@datagrok/peptides 1.17.21 → 1.17.22

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/705.js CHANGED
@@ -1,2 +1,2 @@
1
1
  var peptides;(()=>{"use strict";var t={1096:(t,e,r)=>{r.d(e,{R:()=>i}),t=r.hmd(t);var n,i=(n="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var e,r,i=void 0!==t?t:{};i.ready=new Promise((function(t,n){e=t,r=n}));var o,a=Object.assign({},i),s="object"==typeof window,u="function"==typeof importScripts,c=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(s||u)&&(u?c=self.location.href:"undefined"!=typeof document&&document.currentScript&&(c=document.currentScript.src),n&&(c=n),c=0!==c.indexOf("blob:")?c.substr(0,c.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(o=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)})),i.print||console.log.bind(console);var f,l,p=i.printErr||console.warn.bind(console);Object.assign(i,a),a=null,i.arguments&&i.arguments,i.thisProgram&&i.thisProgram,i.quit&&i.quit,i.wasmBinary&&(f=i.wasmBinary),i.noExitRuntime,"object"!=typeof WebAssembly&&R("no native wasm support detected");var h,d,m,y=!1;function b(){var t=l.buffer;i.HEAP8=h=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=new Int32Array(t),i.HEAPU8=d=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=m=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}var g=[],w=[],v=[],A=0,_=null,E=null;function R(t){i.onAbort&&i.onAbort(t),p(t="Aborted("+t+")"),y=!0,t+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(t);throw r(e),e}var x,P;function S(t){return t.startsWith("data:application/octet-stream;base64,")}function j(t){try{if(t==x&&f)return new Uint8Array(f);if(o)return o(t);throw"both async and sync fetching of the wasm failed"}catch(t){R(t)}}function O(t,e,r){return function(t){return f||!s&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return j(t)})):fetch(t,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+t+"'";return e.arrayBuffer()})).catch((function(){return j(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,e)})).then((function(t){return t})).then(r,(function(t){p("failed to asynchronously prepare wasm: "+t),R(t)}))}function U(t){for(;t.length>0;)t.shift()(i)}function I(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){m[this.ptr+4>>2]=t},this.get_type=function(){return m[this.ptr+4>>2]},this.set_destructor=function(t){m[this.ptr+8>>2]=t},this.get_destructor=function(){return m[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,h[this.ptr+12|0]=t},this.get_caught=function(){return 0!=h[this.ptr+12|0]},this.set_rethrown=function(t){t=t?1:0,h[this.ptr+13|0]=t},this.get_rethrown=function(){return 0!=h[this.ptr+13|0]},this.init=function(t,e){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(e)},this.set_adjusted_ptr=function(t){m[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return m[this.ptr+16>>2]},this.get_exception_ptr=function(){if(L(this.get_type()))return m[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function T(t){var e=l.buffer;try{return l.grow(t-e.byteLength+65535>>>16),b(),1}catch(t){}}function C(t){return i["_"+t]}S(x="wasmCluster.wasm")||(P=x,x=i.locateFile?i.locateFile(P,c):c+P);var M="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function F(t,e,r,n,i){var o={string:t=>{var e=0;return null!=t&&0!==t&&(e=function(t){var e=function(t){for(var e=0,r=0;r<t.length;++r){var n=t.charCodeAt(r);n<=127?e++:n<=2047?e+=2:n>=55296&&n<=57343?(e+=4,++r):e+=3}return e}(t)+1,r=k(e);return function(t,e,r){!function(t,e,r,n){if(!(n>0))return 0;for(var i=r+n-1,o=0;o<t.length;++o){var a=t.charCodeAt(o);if(a>=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&t.charCodeAt(++o)),a<=127){if(r>=i)break;e[r++]=a}else if(a<=2047){if(r+1>=i)break;e[r++]=192|a>>6,e[r++]=128|63&a}else if(a<=65535){if(r+2>=i)break;e[r++]=224|a>>12,e[r++]=128|a>>6&63,e[r++]=128|63&a}else{if(r+3>=i)break;e[r++]=240|a>>18,e[r++]=128|a>>12&63,e[r++]=128|a>>6&63,e[r++]=128|63&a}}e[r]=0}(t,d,e,r)}(t,r,e),r}(t)),e},array:t=>{var e,r,n=k(t.length);return e=t,r=n,h.set(e,r),n}},a=C(t),s=[],u=0;if(n)for(var c=0;c<n.length;c++){var f=o[r[c]];f?(0===u&&(u=W()),s[c]=f(n[c])):s[c]=n[c]}var l=a.apply(null,s);return function(t){return 0!==u&&D(u),function(t){return"string"===e?(r=t)?function(t,e,r){for(var n=e+r,i=e;t[i]&&!(i>=n);)++i;if(i-e>16&&t.buffer&&M)return M.decode(t.subarray(e,i));for(var o="";e<i;){var a=t[e++];if(128&a){var s=63&t[e++];if(192!=(224&a)){var u=63&t[e++];if((a=224==(240&a)?(15&a)<<12|s<<6|u:(7&a)<<18|s<<12|u<<6|63&t[e++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|s)}else o+=String.fromCharCode(a)}return o}(d,r,n):"":"boolean"===e?Boolean(t):t;var r,n}(t)}(l)}var H,B={d:function(t,e,r){throw new I(t).init(e,r),t},a:function(){R("")},c:function(t,e,r){d.copyWithin(t,e,e+r)},b:function(t){var e,r=d.length,n=2147483648;if((t>>>=0)>n)return!1;for(var i=1;i<=4;i*=2){var o=r*(1+.2/i);if(o=Math.min(o,t+100663296),T(Math.min(n,(e=Math.max(t,o))+(65536-e%65536)%65536)))return!0}return!1}},W=(function(){var t,e,n,o,a={a:B};function s(t,e){var r,n=t.exports;return i.asm=n,l=i.asm.e,b(),i.asm.i,r=i.asm.f,w.unshift(r),function(t){if(A--,i.monitorRunDependencies&&i.monitorRunDependencies(A),0==A&&(null!==_&&(clearInterval(_),_=null),E)){var e=E;E=null,e()}}(),n}if(A++,i.monitorRunDependencies&&i.monitorRunDependencies(A),i.instantiateWasm)try{return i.instantiateWasm(a,s)}catch(t){p("Module.instantiateWasm callback failed with error: "+t),r(t)}(t=f,e=x,n=a,o=function(t){s(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(e)||"function"!=typeof fetch?O(e,n,o):fetch(e,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,n).then(o,(function(t){return p("wasm streaming compile failed: "+t),p("falling back to ArrayBuffer instantiation"),O(e,n,o)}))}))).catch(r)}(),i._getDendrogram=function(){return(i._getDendrogram=i.asm.g).apply(null,arguments)},i._free=function(){return(i._free=i.asm.h).apply(null,arguments)},i._malloc=function(){return(i._malloc=i.asm.j).apply(null,arguments)},function(){return(W=i.asm.k).apply(null,arguments)}),D=function(){return(D=i.asm.l).apply(null,arguments)},k=function(){return(k=i.asm.m).apply(null,arguments)},L=function(){return(L=i.asm.n).apply(null,arguments)};function N(){function t(){H||(H=!0,i.calledRun=!0,y||(U(w),e(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)t=i.postRun.shift(),v.unshift(t);var t;U(v)}()))}A>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),g.unshift(t);var t;U(g)}(),A>0||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),t()}),1)):t()))}if(i.ccall=F,i.cwrap=function(t,e,r,n){var i=!r||r.every((t=>"number"===t||"boolean"===t));return"string"!==e&&i&&!n?C(t):function(){return F(t,e,r,arguments)}},E=function t(){H||N(),H||(E=t)},i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return N(),t.ready});"object"==typeof exports?t.exports=i:"function"==typeof define&&r.amdO?define([],(function(){return i})):"object"==typeof exports&&(exports.exportCppLib=i)},5024:(t,e,r)=>{t.exports=r.p+"8473fcbfb6e85ca6c852.wasm"}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={id:n,loaded:!1,exports:{}};return t[n](o,o.exports,r),o.loaded=!0,o.exports}r.m=t,r.amdO={},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{var t;r.g.importScripts&&(t=r.g.location+"");var e=r.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var i=n.length-1;i>-1&&(!t||!/^http(s?):/.test(t));)t=n[i--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r.p=t})(),r.b=self.location+"";var n=r(1096);onmessage=t=>{const{distMatArray:e,n:i,methodCode:o}=t.data,a={};try{(async function(t,e,i){const o=new URL(r(5024),r.b).href,a=o.substring(0,o.lastIndexOf("/")+1)+"wasmCluster.wasm";let s;try{s=await(0,n.R)({locateFile:()=>a,printErr:t=>{}})}catch(t){try{s=await(0,n.R)({locateFile:()=>o,printErr:t=>{}})}catch(t){throw console.error(t),new Error("Unable to load wasm file for hierarchical clustering")}}const u=s.cwrap("getDendrogram","null",["number","number","number","number","number"]),c=Float32Array.BYTES_PER_ELEMENT*t.length,f=s._malloc(c),l=new Uint8Array(s.HEAPU8.buffer,f,c);l.set(new Uint8Array(t.buffer));const p=Int32Array.BYTES_PER_ELEMENT*(e-1)*2,h=s._malloc(p),d=new Uint8Array(s.HEAPU8.buffer,h,p),m=Float32Array.BYTES_PER_ELEMENT*(e-1),y=s._malloc(m),b=new Uint8Array(s.HEAPU8.buffer,y,m);u(f,e,i,h,y);const g=new Int32Array(d.buffer,d.byteOffset,2*(e-1)),w=new Float32Array(b.buffer,b.byteOffset,e-1).slice(0,e-1),v=g.slice(0,e-1),A=g.slice(e-1,2*e-2);return s._free(l.byteOffset),s._free(d.byteOffset),s._free(b.byteOffset),{mergeRow1:v,mergeRow2:A,heightsResult:w}})(e,i,o).then((t=>{a.clusterMatrix=t,postMessage(a)}))}catch(t){a.error=t,postMessage(a)}},peptides={}})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFBUXhILElBQUksSUFBSW5ILFdBQVcwTixFQUFRek0sU0FHbkMsTUFBTTJOLEVBQXFCeE4sV0FBV29OLG1CQUFxQmxCLEVBQUksR0FBSyxFQUM5RHVCLEVBQVdiLEVBQWFVLFFBQVFFLEdBQ2hDRSxFQUFZLElBQUk5TyxXQUFXZ08sRUFBYXBOLE9BQU9LLE9BQVE0TixFQUFVRCxHQUdqRUcsRUFBdUJ4TixhQUFhaU4sbUJBQXFCbEIsRUFBSSxHQUM3RDBCLEVBQWFoQixFQUFhVSxRQUFRSyxHQUNsQ0UsRUFBYyxJQUFJalAsV0FBV2dPLEVBQWFwTixPQUFPSyxPQUFRK04sRUFBWUQsR0FHM0VWLEVBQWtCSSxFQUFTbkIsRUFBR0ssRUFBUWtCLEVBQVVHLEdBRWhELE1BQU1FLEVBQWMsSUFBSTlOLFdBQVcwTixFQUFVN04sT0FBUTZOLEVBQVVLLFdBQW9CLEdBQVA3QixFQUFFLElBQ3hFOEIsRUFBZ0IsSUFBSzdOLGFBQWEwTixFQUFZaE8sT0FBUWdPLEVBQVlFLFdBQVk3QixFQUFFLEdBQUkrQixNQUFNLEVBQUcvQixFQUFFLEdBRS9GZ0MsRUFBWUosRUFBWUcsTUFBTSxFQUFHL0IsRUFBRSxHQUNuQ2lDLEVBQVlMLEVBQVlHLE1BQU0vQixFQUFFLEVBQUcsRUFBRUEsRUFBSSxHQUsvQyxPQUhBVSxFQUFhd0IsTUFBTWIsRUFBUVEsWUFDM0JuQixFQUFhd0IsTUFBTVYsRUFBVUssWUFDN0JuQixFQUFhd0IsTUFBTVAsRUFBWUUsWUFDeEIsQ0FBQ0csWUFBV0MsWUFBV0gsZ0JBQ2hDLEVEdERRSyxDQUEyQnBDLEVBQWNDLEVBQUdDLEdBQ3ZDekssTUFBTTRNLElBQ1BsQyxFQUFLa0MsY0FBZ0JBLEVBQ3JCQyxZQUFZbkMsRUFBSyxHQUV6QixDQUNBLE1BQU94TCxHQUNId0wsRUFBS1ksTUFBUXBNLEVBQ2IyTixZQUFZbkMsRUFDaEIsRyIsInNvdXJjZXMiOlsid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvaGllcmFyY2hpY2FsLWNsdXN0ZXJpbmcvd2FzbS93YXNtQ2x1c3Rlci5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvYW1kIG9wdGlvbnMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2hhcm1vbnkgbW9kdWxlIGRlY29yYXRvciIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9pbXBvcnRTY3JpcHRzIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy9oaWVyYXJjaGljYWwtY2x1c3RlcmluZy93YXNtL2NsdXN0ZXJpbmctd29ya2VyLmpzIiwid2VicGFjazovL3BlcHRpZGVzLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvaGllcmFyY2hpY2FsLWNsdXN0ZXJpbmcvd2FzbS9jbHVzdGVyaXplcldhc20uanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciBleHBvcnRDcHBMaWIgPSAoKCkgPT4ge1xuICB2YXIgX3NjcmlwdERpciA9XG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHRcbiAgICAgID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmNcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZXhwb3J0Q3BwTGliID0ge30pIHtcbiAgICB2YXIgTW9kdWxlID0gdHlwZW9mIGV4cG9ydENwcExpYiAhPSBcInVuZGVmaW5lZFwiID8gZXhwb3J0Q3BwTGliIDoge307XG4gICAgdmFyIHJlYWR5UHJvbWlzZVJlc29sdmUsIHJlYWR5UHJvbWlzZVJlamVjdDtcbiAgICBNb2R1bGVbXCJyZWFkeVwiXSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHJlYWR5UHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgcmVhZHlQcm9taXNlUmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuICAgIHZhciBtb2R1bGVPdmVycmlkZXMgPSBPYmplY3QuYXNzaWduKHt9LCBNb2R1bGUpO1xuICAgIHZhciBhcmd1bWVudHNfID0gW107XG4gICAgdmFyIHRoaXNQcm9ncmFtID0gXCIuL3RoaXMucHJvZ3JhbVwiO1xuICAgIHZhciBxdWl0XyA9IChzdGF0dXMsIHRvVGhyb3cpID0+IHtcbiAgICAgIHRocm93IHRvVGhyb3c7XG4gICAgfTtcbiAgICB2YXIgRU5WSVJPTk1FTlRfSVNfV0VCID0gdHlwZW9mIHdpbmRvdyA9PSBcIm9iamVjdFwiO1xuICAgIHZhciBFTlZJUk9OTUVOVF9JU19XT1JLRVIgPSB0eXBlb2YgaW1wb3J0U2NyaXB0cyA9PSBcImZ1bmN0aW9uXCI7XG4gICAgdmFyIEVOVklST05NRU5UX0lTX05PREUgPVxuICAgICAgdHlwZW9mIHByb2Nlc3MgPT0gXCJvYmplY3RcIiAmJlxuICAgICAgdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMgPT0gXCJvYmplY3RcIiAmJlxuICAgICAgdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZSA9PSBcInN0cmluZ1wiO1xuICAgIHZhciBzY3JpcHREaXJlY3RvcnkgPSBcIlwiO1xuICAgIGZ1bmN0aW9uIGxvY2F0ZUZpbGUocGF0aCkge1xuICAgICAgaWYgKE1vZHVsZVtcImxvY2F0ZUZpbGVcIl0pIHtcbiAgICAgICAgcmV0dXJuIE1vZHVsZVtcImxvY2F0ZUZpbGVcIl0ocGF0aCwgc2NyaXB0RGlyZWN0b3J5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzY3JpcHREaXJlY3RvcnkgKyBwYXRoO1xuICAgIH1cbiAgICB2YXIgcmVhZF8sIHJlYWRBc3luYywgcmVhZEJpbmFyeSwgc2V0V2luZG93VGl0bGU7XG4gICAgaWYgKEVOVklST05NRU5UX0lTX1dFQiB8fCBFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHtcbiAgICAgIGlmIChFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHtcbiAgICAgICAgc2NyaXB0RGlyZWN0b3J5ID0gc2VsZi5sb2NhdGlvbi5ocmVmO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQgIT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0KSB7XG4gICAgICAgIHNjcmlwdERpcmVjdG9yeSA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1xuICAgICAgfVxuICAgICAgaWYgKF9zY3JpcHREaXIpIHtcbiAgICAgICAgc2NyaXB0RGlyZWN0b3J5ID0gX3NjcmlwdERpcjtcbiAgICAgIH1cbiAgICAgIGlmIChzY3JpcHREaXJlY3RvcnkuaW5kZXhPZihcImJsb2I6XCIpICE9PSAwKSB7XG4gICAgICAgIHNjcmlwdERpcmVjdG9yeSA9IHNjcmlwdERpcmVjdG9yeS5zdWJzdHIoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBzY3JpcHREaXJlY3RvcnkucmVwbGFjZSgvWz8jXS4qLywgXCJcIikubGFzdEluZGV4T2YoXCIvXCIpICsgMVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NyaXB0RGlyZWN0b3J5ID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIHtcbiAgICAgICAgcmVhZF8gPSAodXJsKSA9PiB7XG4gICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIHVybCwgZmFsc2UpO1xuICAgICAgICAgIHhoci5zZW5kKG51bGwpO1xuICAgICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICB9O1xuICAgICAgICBpZiAoRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7XG4gICAgICAgICAgcmVhZEJpbmFyeSA9ICh1cmwpID0+IHtcbiAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIHVybCwgZmFsc2UpO1xuICAgICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9IFwiYXJyYXlidWZmZXJcIjtcbiAgICAgICAgICAgIHhoci5zZW5kKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHhoci5yZXNwb25zZSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZWFkQXN5bmMgPSAodXJsLCBvbmxvYWQsIG9uZXJyb3IpID0+IHtcbiAgICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgdXJsLCB0cnVlKTtcbiAgICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xuICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDAgfHwgKHhoci5zdGF0dXMgPT0gMCAmJiB4aHIucmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgIG9ubG9hZCh4aHIucmVzcG9uc2UpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbmVycm9yKCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICB4aHIub25lcnJvciA9IG9uZXJyb3I7XG4gICAgICAgICAgeGhyLnNlbmQobnVsbCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBzZXRXaW5kb3dUaXRsZSA9ICh0aXRsZSkgPT4gKGRvY3VtZW50LnRpdGxlID0gdGl0bGUpO1xuICAgIH0gZWxzZSB7XG4gICAgfVxuICAgIHZhciBvdXQgPSBNb2R1bGVbXCJwcmludFwiXSB8fCBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO1xuICAgIHZhciBlcnIgPSBNb2R1bGVbXCJwcmludEVyclwiXSB8fCBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbiAgICBPYmplY3QuYXNzaWduKE1vZHVsZSwgbW9kdWxlT3ZlcnJpZGVzKTtcbiAgICBtb2R1bGVPdmVycmlkZXMgPSBudWxsO1xuICAgIGlmIChNb2R1bGVbXCJhcmd1bWVudHNcIl0pIGFyZ3VtZW50c18gPSBNb2R1bGVbXCJhcmd1bWVudHNcIl07XG4gICAgaWYgKE1vZHVsZVtcInRoaXNQcm9ncmFtXCJdKSB0aGlzUHJvZ3JhbSA9IE1vZHVsZVtcInRoaXNQcm9ncmFtXCJdO1xuICAgIGlmIChNb2R1bGVbXCJxdWl0XCJdKSBxdWl0XyA9IE1vZHVsZVtcInF1aXRcIl07XG4gICAgdmFyIHdhc21CaW5hcnk7XG4gICAgaWYgKE1vZHVsZVtcIndhc21CaW5hcnlcIl0pIHdhc21CaW5hcnkgPSBNb2R1bGVbXCJ3YXNtQmluYXJ5XCJdO1xuICAgIHZhciBub0V4aXRSdW50aW1lID0gTW9kdWxlW1wibm9FeGl0UnVudGltZVwiXSB8fCB0cnVlO1xuICAgIGlmICh0eXBlb2YgV2ViQXNzZW1ibHkgIT0gXCJvYmplY3RcIikge1xuICAgICAgYWJvcnQoXCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkXCIpO1xuICAgIH1cbiAgICB2YXIgd2FzbU1lbW9yeTtcbiAgICB2YXIgQUJPUlQgPSBmYWxzZTtcbiAgICB2YXIgRVhJVFNUQVRVUztcbiAgICB2YXIgSEVBUDgsIEhFQVBVOCwgSEVBUDE2LCBIRUFQVTE2LCBIRUFQMzIsIEhFQVBVMzIsIEhFQVBGMzIsIEhFQVBGNjQ7XG4gICAgZnVuY3Rpb24gdXBkYXRlTWVtb3J5Vmlld3MoKSB7XG4gICAgICB2YXIgYiA9IHdhc21NZW1vcnkuYnVmZmVyO1xuICAgICAgTW9kdWxlW1wiSEVBUDhcIl0gPSBIRUFQOCA9IG5ldyBJbnQ4QXJyYXkoYik7XG4gICAgICBNb2R1bGVbXCJIRUFQMTZcIl0gPSBIRUFQMTYgPSBuZXcgSW50MTZBcnJheShiKTtcbiAgICAgIE1vZHVsZVtcIkhFQVAzMlwiXSA9IEhFQVAzMiA9IG5ldyBJbnQzMkFycmF5KGIpO1xuICAgICAgTW9kdWxlW1wiSEVBUFU4XCJdID0gSEVBUFU4ID0gbmV3IFVpbnQ4QXJyYXkoYik7XG4gICAgICBNb2R1bGVbXCJIRUFQVTE2XCJdID0gSEVBUFUxNiA9IG5ldyBVaW50MTZBcnJheShiKTtcbiAgICAgIE1vZHVsZVtcIkhFQVBVMzJcIl0gPSBIRUFQVTMyID0gbmV3IFVpbnQzMkFycmF5KGIpO1xuICAgICAgTW9kdWxlW1wiSEVBUEYzMlwiXSA9IEhFQVBGMzIgPSBuZXcgRmxvYXQzMkFycmF5KGIpO1xuICAgICAgTW9kdWxlW1wiSEVBUEY2NFwiXSA9IEhFQVBGNjQgPSBuZXcgRmxvYXQ2NEFycmF5KGIpO1xuICAgIH1cbiAgICB2YXIgd2FzbVRhYmxlO1xuICAgIHZhciBfX0FUUFJFUlVOX18gPSBbXTtcbiAgICB2YXIgX19BVElOSVRfXyA9IFtdO1xuICAgIHZhciBfX0FUUE9TVFJVTl9fID0gW107XG4gICAgdmFyIHJ1bnRpbWVJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIHByZVJ1bigpIHtcbiAgICAgIGlmIChNb2R1bGVbXCJwcmVSdW5cIl0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBNb2R1bGVbXCJwcmVSdW5cIl0gPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgIE1vZHVsZVtcInByZVJ1blwiXSA9IFtNb2R1bGVbXCJwcmVSdW5cIl1dO1xuICAgICAgICB3aGlsZSAoTW9kdWxlW1wicHJlUnVuXCJdLmxlbmd0aCkge1xuICAgICAgICAgIGFkZE9uUHJlUnVuKE1vZHVsZVtcInByZVJ1blwiXS5zaGlmdCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBSRVJVTl9fKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdFJ1bnRpbWUoKSB7XG4gICAgICBydW50aW1lSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVElOSVRfXyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvc3RSdW4oKSB7XG4gICAgICBpZiAoTW9kdWxlW1wicG9zdFJ1blwiXSkge1xuICAgICAgICBpZiAodHlwZW9mIE1vZHVsZVtcInBvc3RSdW5cIl0gPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgIE1vZHVsZVtcInBvc3RSdW5cIl0gPSBbTW9kdWxlW1wicG9zdFJ1blwiXV07XG4gICAgICAgIHdoaWxlIChNb2R1bGVbXCJwb3N0UnVuXCJdLmxlbmd0aCkge1xuICAgICAgICAgIGFkZE9uUG9zdFJ1bihNb2R1bGVbXCJwb3N0UnVuXCJdLnNoaWZ0KCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUE9TVFJVTl9fKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkT25QcmVSdW4oY2IpIHtcbiAgICAgIF9fQVRQUkVSVU5fXy51bnNoaWZ0KGNiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkT25Jbml0KGNiKSB7XG4gICAgICBfX0FUSU5JVF9fLnVuc2hpZnQoY2IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRPblBvc3RSdW4oY2IpIHtcbiAgICAgIF9fQVRQT1NUUlVOX18udW5zaGlmdChjYik7XG4gICAgfVxuICAgIHZhciBydW5EZXBlbmRlbmNpZXMgPSAwO1xuICAgIHZhciBydW5EZXBlbmRlbmN5V2F0Y2hlciA9IG51bGw7XG4gICAgdmFyIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IG51bGw7XG4gICAgZnVuY3Rpb24gYWRkUnVuRGVwZW5kZW5jeShpZCkge1xuICAgICAgcnVuRGVwZW5kZW5jaWVzKys7XG4gICAgICBpZiAoTW9kdWxlW1wibW9uaXRvclJ1bkRlcGVuZGVuY2llc1wiXSkge1xuICAgICAgICBNb2R1bGVbXCJtb25pdG9yUnVuRGVwZW5kZW5jaWVzXCJdKHJ1bkRlcGVuZGVuY2llcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZVJ1bkRlcGVuZGVuY3koaWQpIHtcbiAgICAgIHJ1bkRlcGVuZGVuY2llcy0tO1xuICAgICAgaWYgKE1vZHVsZVtcIm1vbml0b3JSdW5EZXBlbmRlbmNpZXNcIl0pIHtcbiAgICAgICAgTW9kdWxlW1wibW9uaXRvclJ1bkRlcGVuZGVuY2llc1wiXShydW5EZXBlbmRlbmNpZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHJ1bkRlcGVuZGVuY2llcyA9PSAwKSB7XG4gICAgICAgIGlmIChydW5EZXBlbmRlbmN5V2F0Y2hlciAhPT0gbnVsbCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwocnVuRGVwZW5kZW5jeVdhdGNoZXIpO1xuICAgICAgICAgIHJ1bkRlcGVuZGVuY3lXYXRjaGVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVwZW5kZW5jaWVzRnVsZmlsbGVkKSB7XG4gICAgICAgICAgdmFyIGNhbGxiYWNrID0gZGVwZW5kZW5jaWVzRnVsZmlsbGVkO1xuICAgICAgICAgIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IG51bGw7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhYm9ydCh3aGF0KSB7XG4gICAgICBpZiAoTW9kdWxlW1wib25BYm9ydFwiXSkge1xuICAgICAgICBNb2R1bGVbXCJvbkFib3J0XCJdKHdoYXQpO1xuICAgICAgfVxuICAgICAgd2hhdCA9IFwiQWJvcnRlZChcIiArIHdoYXQgKyBcIilcIjtcbiAgICAgIGVycih3aGF0KTtcbiAgICAgIEFCT1JUID0gdHJ1ZTtcbiAgICAgIEVYSVRTVEFUVVMgPSAxO1xuICAgICAgd2hhdCArPSBcIi4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby5cIjtcbiAgICAgIHZhciBlID0gbmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcih3aGF0KTtcbiAgICAgIHJlYWR5UHJvbWlzZVJlamVjdChlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHZhciBkYXRhVVJJUHJlZml4ID0gXCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsXCI7XG4gICAgZnVuY3Rpb24gaXNEYXRhVVJJKGZpbGVuYW1lKSB7XG4gICAgICByZXR1cm4gZmlsZW5hbWUuc3RhcnRzV2l0aChkYXRhVVJJUHJlZml4KTtcbiAgICB9XG4gICAgdmFyIHdhc21CaW5hcnlGaWxlO1xuICAgIHdhc21CaW5hcnlGaWxlID0gXCJ3YXNtQ2x1c3Rlci53YXNtXCI7XG4gICAgaWYgKCFpc0RhdGFVUkkod2FzbUJpbmFyeUZpbGUpKSB7XG4gICAgICB3YXNtQmluYXJ5RmlsZSA9IGxvY2F0ZUZpbGUod2FzbUJpbmFyeUZpbGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRCaW5hcnkoZmlsZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGZpbGUgPT0gd2FzbUJpbmFyeUZpbGUgJiYgd2FzbUJpbmFyeSkge1xuICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh3YXNtQmluYXJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVhZEJpbmFyeSkge1xuICAgICAgICAgIHJldHVybiByZWFkQmluYXJ5KGZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IFwiYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWRcIjtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBhYm9ydChlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRCaW5hcnlQcm9taXNlKGJpbmFyeUZpbGUpIHtcbiAgICAgIGlmICghd2FzbUJpbmFyeSAmJiAoRU5WSVJPTk1FTlRfSVNfV0VCIHx8IEVOVklST05NRU5UX0lTX1dPUktFUikpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmZXRjaCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICByZXR1cm4gZmV0Y2goYmluYXJ5RmlsZSwgeyBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiIH0pXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZVtcIm9rXCJdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgXCJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICdcIiArIGJpbmFyeUZpbGUgKyBcIidcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VbXCJhcnJheUJ1ZmZlclwiXSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRCaW5hcnkoYmluYXJ5RmlsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0QmluYXJ5KGJpbmFyeUZpbGUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgcmVjZWl2ZXIpIHtcbiAgICAgIHJldHVybiBnZXRCaW5hcnlQcm9taXNlKGJpbmFyeUZpbGUpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uIChiaW5hcnkpIHtcbiAgICAgICAgICByZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluYXJ5LCBpbXBvcnRzKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihyZWNlaXZlciwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgIGVycihcImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206IFwiICsgcmVhc29uKTtcbiAgICAgICAgICBhYm9ydChyZWFzb24pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5zdGFudGlhdGVBc3luYyhiaW5hcnksIGJpbmFyeUZpbGUsIGltcG9ydHMsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFiaW5hcnkgJiZcbiAgICAgICAgdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nID09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAhaXNEYXRhVVJJKGJpbmFyeUZpbGUpICYmXG4gICAgICAgIHR5cGVvZiBmZXRjaCA9PSBcImZ1bmN0aW9uXCJcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmV0Y2goYmluYXJ5RmlsZSwgeyBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiIH0pLnRoZW4oZnVuY3Rpb24gKFxuICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhyZXNwb25zZSwgaW1wb3J0cyk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKGNhbGxiYWNrLCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICBlcnIoXCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogXCIgKyByZWFzb24pO1xuICAgICAgICAgICAgZXJyKFwiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb25cIik7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFudGlhdGVBcnJheUJ1ZmZlcihiaW5hcnlGaWxlLCBpbXBvcnRzLCBjYWxsYmFjayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVXYXNtKCkge1xuICAgICAgdmFyIGluZm8gPSB7IGE6IHdhc21JbXBvcnRzIH07XG4gICAgICBmdW5jdGlvbiByZWNlaXZlSW5zdGFuY2UoaW5zdGFuY2UsIG1vZHVsZSkge1xuICAgICAgICB2YXIgZXhwb3J0cyA9IGluc3RhbmNlLmV4cG9ydHM7XG4gICAgICAgIE1vZHVsZVtcImFzbVwiXSA9IGV4cG9ydHM7XG4gICAgICAgIHdhc21NZW1vcnkgPSBNb2R1bGVbXCJhc21cIl1bXCJlXCJdO1xuICAgICAgICB1cGRhdGVNZW1vcnlWaWV3cygpO1xuICAgICAgICB3YXNtVGFibGUgPSBNb2R1bGVbXCJhc21cIl1bXCJpXCJdO1xuICAgICAgICBhZGRPbkluaXQoTW9kdWxlW1wiYXNtXCJdW1wiZlwiXSk7XG4gICAgICAgIHJlbW92ZVJ1bkRlcGVuZGVuY3koXCJ3YXNtLWluc3RhbnRpYXRlXCIpO1xuICAgICAgICByZXR1cm4gZXhwb3J0cztcbiAgICAgIH1cbiAgICAgIGFkZFJ1bkRlcGVuZGVuY3koXCJ3YXNtLWluc3RhbnRpYXRlXCIpO1xuICAgICAgZnVuY3Rpb24gcmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQocmVzdWx0KSB7XG4gICAgICAgIHJlY2VpdmVJbnN0YW5jZShyZXN1bHRbXCJpbnN0YW5jZVwiXSk7XG4gICAgICB9XG4gICAgICBpZiAoTW9kdWxlW1wiaW5zdGFudGlhdGVXYXNtXCJdKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIE1vZHVsZVtcImluc3RhbnRpYXRlV2FzbVwiXShpbmZvLCByZWNlaXZlSW5zdGFuY2UpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgZXJyKFwiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogXCIgKyBlKTtcbiAgICAgICAgICByZWFkeVByb21pc2VSZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGluc3RhbnRpYXRlQXN5bmMoXG4gICAgICAgIHdhc21CaW5hcnksXG4gICAgICAgIHdhc21CaW5hcnlGaWxlLFxuICAgICAgICBpbmZvLFxuICAgICAgICByZWNlaXZlSW5zdGFudGlhdGlvblJlc3VsdFxuICAgICAgKS5jYXRjaChyZWFkeVByb21pc2VSZWplY3QpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYWxsUnVudGltZUNhbGxiYWNrcyhjYWxsYmFja3MpIHtcbiAgICAgIHdoaWxlIChjYWxsYmFja3MubGVuZ3RoID4gMCkge1xuICAgICAgICBjYWxsYmFja3Muc2hpZnQoKShNb2R1bGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBFeGNlcHRpb25JbmZvKGV4Y1B0cikge1xuICAgICAgdGhpcy5leGNQdHIgPSBleGNQdHI7XG4gICAgICB0aGlzLnB0ciA9IGV4Y1B0ciAtIDI0O1xuICAgICAgdGhpcy5zZXRfdHlwZSA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIEhFQVBVMzJbKHRoaXMucHRyICsgNCkgPj4gMl0gPSB0eXBlO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZ2V0X3R5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBIRUFQVTMyWyh0aGlzLnB0ciArIDQpID4+IDJdO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2V0X2Rlc3RydWN0b3IgPSBmdW5jdGlvbiAoZGVzdHJ1Y3Rvcikge1xuICAgICAgICBIRUFQVTMyWyh0aGlzLnB0ciArIDgpID4+IDJdID0gZGVzdHJ1Y3RvcjtcbiAgICAgIH07XG4gICAgICB0aGlzLmdldF9kZXN0cnVjdG9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gSEVBUFUzMlsodGhpcy5wdHIgKyA4KSA+PiAyXTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNldF9jYXVnaHQgPSBmdW5jdGlvbiAoY2F1Z2h0KSB7XG4gICAgICAgIGNhdWdodCA9IGNhdWdodCA/IDEgOiAwO1xuICAgICAgICBIRUFQOFsodGhpcy5wdHIgKyAxMikgPj4gMF0gPSBjYXVnaHQ7XG4gICAgICB9O1xuICAgICAgdGhpcy5nZXRfY2F1Z2h0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gSEVBUDhbKHRoaXMucHRyICsgMTIpID4+IDBdICE9IDA7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZXRfcmV0aHJvd24gPSBmdW5jdGlvbiAocmV0aHJvd24pIHtcbiAgICAgICAgcmV0aHJvd24gPSByZXRocm93biA/IDEgOiAwO1xuICAgICAgICBIRUFQOFsodGhpcy5wdHIgKyAxMykgPj4gMF0gPSByZXRocm93bjtcbiAgICAgIH07XG4gICAgICB0aGlzLmdldF9yZXRocm93biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIEhFQVA4Wyh0aGlzLnB0ciArIDEzKSA+PiAwXSAhPSAwO1xuICAgICAgfTtcbiAgICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uICh0eXBlLCBkZXN0cnVjdG9yKSB7XG4gICAgICAgIHRoaXMuc2V0X2FkanVzdGVkX3B0cigwKTtcbiAgICAgICAgdGhpcy5zZXRfdHlwZSh0eXBlKTtcbiAgICAgICAgdGhpcy5zZXRfZGVzdHJ1Y3RvcihkZXN0cnVjdG9yKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNldF9hZGp1c3RlZF9wdHIgPSBmdW5jdGlvbiAoYWRqdXN0ZWRQdHIpIHtcbiAgICAgICAgSEVBUFUzMlsodGhpcy5wdHIgKyAxNikgPj4gMl0gPSBhZGp1c3RlZFB0cjtcbiAgICAgIH07XG4gICAgICB0aGlzLmdldF9hZGp1c3RlZF9wdHIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBIRUFQVTMyWyh0aGlzLnB0ciArIDE2KSA+PiAyXTtcbiAgICAgIH07XG4gICAgICB0aGlzLmdldF9leGNlcHRpb25fcHRyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaXNQb2ludGVyID0gX19fY3hhX2lzX3BvaW50ZXJfdHlwZSh0aGlzLmdldF90eXBlKCkpO1xuICAgICAgICBpZiAoaXNQb2ludGVyKSB7XG4gICAgICAgICAgcmV0dXJuIEhFQVBVMzJbdGhpcy5leGNQdHIgPj4gMl07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFkanVzdGVkID0gdGhpcy5nZXRfYWRqdXN0ZWRfcHRyKCk7XG4gICAgICAgIGlmIChhZGp1c3RlZCAhPT0gMCkgcmV0dXJuIGFkanVzdGVkO1xuICAgICAgICByZXR1cm4gdGhpcy5leGNQdHI7XG4gICAgICB9O1xuICAgIH1cbiAgICB2YXIgZXhjZXB0aW9uTGFzdCA9IDA7XG4gICAgdmFyIHVuY2F1Z2h0RXhjZXB0aW9uQ291bnQgPSAwO1xuICAgIGZ1bmN0aW9uIF9fX2N4YV90aHJvdyhwdHIsIHR5cGUsIGRlc3RydWN0b3IpIHtcbiAgICAgIHZhciBpbmZvID0gbmV3IEV4Y2VwdGlvbkluZm8ocHRyKTtcbiAgICAgIGluZm8uaW5pdCh0eXBlLCBkZXN0cnVjdG9yKTtcbiAgICAgIGV4Y2VwdGlvbkxhc3QgPSBwdHI7XG4gICAgICB1bmNhdWdodEV4Y2VwdGlvbkNvdW50Kys7XG4gICAgICB0aHJvdyBleGNlcHRpb25MYXN0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBfYWJvcnQoKSB7XG4gICAgICBhYm9ydChcIlwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyhkZXN0LCBzcmMsIG51bSkge1xuICAgICAgSEVBUFU4LmNvcHlXaXRoaW4oZGVzdCwgc3JjLCBzcmMgKyBudW0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRIZWFwTWF4KCkge1xuICAgICAgcmV0dXJuIDIxNDc0ODM2NDg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIoc2l6ZSkge1xuICAgICAgdmFyIGIgPSB3YXNtTWVtb3J5LmJ1ZmZlcjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHdhc21NZW1vcnkuZ3Jvdygoc2l6ZSAtIGIuYnl0ZUxlbmd0aCArIDY1NTM1KSA+Pj4gMTYpO1xuICAgICAgICB1cGRhdGVNZW1vcnlWaWV3cygpO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9lbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwKHJlcXVlc3RlZFNpemUpIHtcbiAgICAgIHZhciBvbGRTaXplID0gSEVBUFU4Lmxlbmd0aDtcbiAgICAgIHJlcXVlc3RlZFNpemUgPSByZXF1ZXN0ZWRTaXplID4+PiAwO1xuICAgICAgdmFyIG1heEhlYXBTaXplID0gZ2V0SGVhcE1heCgpO1xuICAgICAgaWYgKHJlcXVlc3RlZFNpemUgPiBtYXhIZWFwU2l6ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBsZXQgYWxpZ25VcCA9ICh4LCBtdWx0aXBsZSkgPT5cbiAgICAgICAgeCArICgobXVsdGlwbGUgLSAoeCAlIG11bHRpcGxlKSkgJSBtdWx0aXBsZSk7XG4gICAgICBmb3IgKHZhciBjdXREb3duID0gMTsgY3V0RG93biA8PSA0OyBjdXREb3duICo9IDIpIHtcbiAgICAgICAgdmFyIG92ZXJHcm93bkhlYXBTaXplID0gb2xkU2l6ZSAqICgxICsgMC4yIC8gY3V0RG93bik7XG4gICAgICAgIG92ZXJHcm93bkhlYXBTaXplID0gTWF0aC5taW4oXG4gICAgICAgICAgb3Zlckdyb3duSGVhcFNpemUsXG4gICAgICAgICAgcmVxdWVzdGVkU2l6ZSArIDEwMDY2MzI5NlxuICAgICAgICApO1xuICAgICAgICB2YXIgbmV3U2l6ZSA9IE1hdGgubWluKFxuICAgICAgICAgIG1heEhlYXBTaXplLFxuICAgICAgICAgIGFsaWduVXAoTWF0aC5tYXgocmVxdWVzdGVkU2l6ZSwgb3Zlckdyb3duSGVhcFNpemUpLCA2NTUzNilcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gZW1zY3JpcHRlbl9yZWFsbG9jX2J1ZmZlcihuZXdTaXplKTtcbiAgICAgICAgaWYgKHJlcGxhY2VtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q0Z1bmMoaWRlbnQpIHtcbiAgICAgIHZhciBmdW5jID0gTW9kdWxlW1wiX1wiICsgaWRlbnRdO1xuICAgICAgcmV0dXJuIGZ1bmM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlQXJyYXlUb01lbW9yeShhcnJheSwgYnVmZmVyKSB7XG4gICAgICBIRUFQOC5zZXQoYXJyYXksIGJ1ZmZlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxlbmd0aEJ5dGVzVVRGOChzdHIpIHtcbiAgICAgIHZhciBsZW4gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGMgPD0gMTI3KSB7XG4gICAgICAgICAgbGVuKys7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA8PSAyMDQ3KSB7XG4gICAgICAgICAgbGVuICs9IDI7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA+PSA1NTI5NiAmJiBjIDw9IDU3MzQzKSB7XG4gICAgICAgICAgbGVuICs9IDQ7XG4gICAgICAgICAgKytpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlbiArPSAzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVuO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdHJpbmdUb1VURjhBcnJheShzdHIsIGhlYXAsIG91dElkeCwgbWF4Qnl0ZXNUb1dyaXRlKSB7XG4gICAgICBpZiAoIShtYXhCeXRlc1RvV3JpdGUgPiAwKSkgcmV0dXJuIDA7XG4gICAgICB2YXIgc3RhcnRJZHggPSBvdXRJZHg7XG4gICAgICB2YXIgZW5kSWR4ID0gb3V0SWR4ICsgbWF4Qnl0ZXNUb1dyaXRlIC0gMTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciB1ID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmICh1ID49IDU1Mjk2ICYmIHUgPD0gNTczNDMpIHtcbiAgICAgICAgICB2YXIgdTEgPSBzdHIuY2hhckNvZGVBdCgrK2kpO1xuICAgICAgICAgIHUgPSAoNjU1MzYgKyAoKHUgJiAxMDIzKSA8PCAxMCkpIHwgKHUxICYgMTAyMyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHUgPD0gMTI3KSB7XG4gICAgICAgICAgaWYgKG91dElkeCA+PSBlbmRJZHgpIGJyZWFrO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gdTtcbiAgICAgICAgfSBlbHNlIGlmICh1IDw9IDIwNDcpIHtcbiAgICAgICAgICBpZiAob3V0SWR4ICsgMSA+PSBlbmRJZHgpIGJyZWFrO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMTkyIHwgKHUgPj4gNik7XG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAxMjggfCAodSAmIDYzKTtcbiAgICAgICAgfSBlbHNlIGlmICh1IDw9IDY1NTM1KSB7XG4gICAgICAgICAgaWYgKG91dElkeCArIDIgPj0gZW5kSWR4KSBicmVhaztcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDIyNCB8ICh1ID4+IDEyKTtcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDEyOCB8ICgodSA+PiA2KSAmIDYzKTtcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDEyOCB8ICh1ICYgNjMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChvdXRJZHggKyAzID49IGVuZElkeCkgYnJlYWs7XG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAyNDAgfCAodSA+PiAxOCk7XG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAxMjggfCAoKHUgPj4gMTIpICYgNjMpO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMTI4IHwgKCh1ID4+IDYpICYgNjMpO1xuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMTI4IHwgKHUgJiA2Myk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhlYXBbb3V0SWR4XSA9IDA7XG4gICAgICByZXR1cm4gb3V0SWR4IC0gc3RhcnRJZHg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOChzdHIsIG91dFB0ciwgbWF4Qnl0ZXNUb1dyaXRlKSB7XG4gICAgICByZXR1cm4gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLCBIRUFQVTgsIG91dFB0ciwgbWF4Qnl0ZXNUb1dyaXRlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4T25TdGFjayhzdHIpIHtcbiAgICAgIHZhciBzaXplID0gbGVuZ3RoQnl0ZXNVVEY4KHN0cikgKyAxO1xuICAgICAgdmFyIHJldCA9IHN0YWNrQWxsb2Moc2l6ZSk7XG4gICAgICBzdHJpbmdUb1VURjgoc3RyLCByZXQsIHNpemUpO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgdmFyIFVURjhEZWNvZGVyID1cbiAgICAgIHR5cGVvZiBUZXh0RGVjb2RlciAhPSBcInVuZGVmaW5lZFwiID8gbmV3IFRleHREZWNvZGVyKFwidXRmOFwiKSA6IHVuZGVmaW5lZDtcbiAgICBmdW5jdGlvbiBVVEY4QXJyYXlUb1N0cmluZyhoZWFwT3JBcnJheSwgaWR4LCBtYXhCeXRlc1RvUmVhZCkge1xuICAgICAgdmFyIGVuZElkeCA9IGlkeCArIG1heEJ5dGVzVG9SZWFkO1xuICAgICAgdmFyIGVuZFB0ciA9IGlkeDtcbiAgICAgIHdoaWxlIChoZWFwT3JBcnJheVtlbmRQdHJdICYmICEoZW5kUHRyID49IGVuZElkeCkpICsrZW5kUHRyO1xuICAgICAgaWYgKGVuZFB0ciAtIGlkeCA+IDE2ICYmIGhlYXBPckFycmF5LmJ1ZmZlciAmJiBVVEY4RGVjb2Rlcikge1xuICAgICAgICByZXR1cm4gVVRGOERlY29kZXIuZGVjb2RlKGhlYXBPckFycmF5LnN1YmFycmF5KGlkeCwgZW5kUHRyKSk7XG4gICAgICB9XG4gICAgICB2YXIgc3RyID0gXCJcIjtcbiAgICAgIHdoaWxlIChpZHggPCBlbmRQdHIpIHtcbiAgICAgICAgdmFyIHUwID0gaGVhcE9yQXJyYXlbaWR4KytdO1xuICAgICAgICBpZiAoISh1MCAmIDEyOCkpIHtcbiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHUxID0gaGVhcE9yQXJyYXlbaWR4KytdICYgNjM7XG4gICAgICAgIGlmICgodTAgJiAyMjQpID09IDE5Mikge1xuICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgodTAgJiAzMSkgPDwgNikgfCB1MSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHUyID0gaGVhcE9yQXJyYXlbaWR4KytdICYgNjM7XG4gICAgICAgIGlmICgodTAgJiAyNDApID09IDIyNCkge1xuICAgICAgICAgIHUwID0gKCh1MCAmIDE1KSA8PCAxMikgfCAodTEgPDwgNikgfCB1MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1MCA9XG4gICAgICAgICAgICAoKHUwICYgNykgPDwgMTgpIHxcbiAgICAgICAgICAgICh1MSA8PCAxMikgfFxuICAgICAgICAgICAgKHUyIDw8IDYpIHxcbiAgICAgICAgICAgIChoZWFwT3JBcnJheVtpZHgrK10gJiA2Myk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHUwIDwgNjU1MzYpIHtcbiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGNoID0gdTAgLSA2NTUzNjtcbiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NiB8IChjaCA+PiAxMCksIDU2MzIwIHwgKGNoICYgMTAyMykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBVVEY4VG9TdHJpbmcocHRyLCBtYXhCeXRlc1RvUmVhZCkge1xuICAgICAgcmV0dXJuIHB0ciA/IFVURjhBcnJheVRvU3RyaW5nKEhFQVBVOCwgcHRyLCBtYXhCeXRlc1RvUmVhZCkgOiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjY2FsbChpZGVudCwgcmV0dXJuVHlwZSwgYXJnVHlwZXMsIGFyZ3MsIG9wdHMpIHtcbiAgICAgIHZhciB0b0MgPSB7XG4gICAgICAgIHN0cmluZzogKHN0cikgPT4ge1xuICAgICAgICAgIHZhciByZXQgPSAwO1xuICAgICAgICAgIGlmIChzdHIgIT09IG51bGwgJiYgc3RyICE9PSB1bmRlZmluZWQgJiYgc3RyICE9PSAwKSB7XG4gICAgICAgICAgICByZXQgPSBzdHJpbmdUb1VURjhPblN0YWNrKHN0cik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiAoYXJyKSA9PiB7XG4gICAgICAgICAgdmFyIHJldCA9IHN0YWNrQWxsb2MoYXJyLmxlbmd0aCk7XG4gICAgICAgICAgd3JpdGVBcnJheVRvTWVtb3J5KGFyciwgcmV0KTtcbiAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIGNvbnZlcnRSZXR1cm5WYWx1ZShyZXQpIHtcbiAgICAgICAgaWYgKHJldHVyblR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gVVRGOFRvU3RyaW5nKHJldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJldHVyblR5cGUgPT09IFwiYm9vbGVhblwiKSByZXR1cm4gQm9vbGVhbihyZXQpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgICAgdmFyIGZ1bmMgPSBnZXRDRnVuYyhpZGVudCk7XG4gICAgICB2YXIgY0FyZ3MgPSBbXTtcbiAgICAgIHZhciBzdGFjayA9IDA7XG4gICAgICBpZiAoYXJncykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgY29udmVydGVyID0gdG9DW2FyZ1R5cGVzW2ldXTtcbiAgICAgICAgICBpZiAoY29udmVydGVyKSB7XG4gICAgICAgICAgICBpZiAoc3RhY2sgPT09IDApIHN0YWNrID0gc3RhY2tTYXZlKCk7XG4gICAgICAgICAgICBjQXJnc1tpXSA9IGNvbnZlcnRlcihhcmdzW2ldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY0FyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIHJldCA9IGZ1bmMuYXBwbHkobnVsbCwgY0FyZ3MpO1xuICAgICAgZnVuY3Rpb24gb25Eb25lKHJldCkge1xuICAgICAgICBpZiAoc3RhY2sgIT09IDApIHN0YWNrUmVzdG9yZShzdGFjayk7XG4gICAgICAgIHJldHVybiBjb252ZXJ0UmV0dXJuVmFsdWUocmV0KTtcbiAgICAgIH1cbiAgICAgIHJldCA9IG9uRG9uZShyZXQpO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3dyYXAoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBvcHRzKSB7XG4gICAgICB2YXIgbnVtZXJpY0FyZ3MgPVxuICAgICAgICAhYXJnVHlwZXMgfHxcbiAgICAgICAgYXJnVHlwZXMuZXZlcnkoKHR5cGUpID0+IHR5cGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIpO1xuICAgICAgdmFyIG51bWVyaWNSZXQgPSByZXR1cm5UeXBlICE9PSBcInN0cmluZ1wiO1xuICAgICAgaWYgKG51bWVyaWNSZXQgJiYgbnVtZXJpY0FyZ3MgJiYgIW9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGdldENGdW5jKGlkZW50KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjY2FsbChpZGVudCwgcmV0dXJuVHlwZSwgYXJnVHlwZXMsIGFyZ3VtZW50cywgb3B0cyk7XG4gICAgICB9O1xuICAgIH1cbiAgICB2YXIgd2FzbUltcG9ydHMgPSB7XG4gICAgICBkOiBfX19jeGFfdGhyb3csXG4gICAgICBhOiBfYWJvcnQsXG4gICAgICBjOiBfZW1zY3JpcHRlbl9tZW1jcHlfYmlnLFxuICAgICAgYjogX2Vtc2NyaXB0ZW5fcmVzaXplX2hlYXAsXG4gICAgfTtcbiAgICB2YXIgYXNtID0gY3JlYXRlV2FzbSgpO1xuICAgIHZhciBfX193YXNtX2NhbGxfY3RvcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKF9fX3dhc21fY2FsbF9jdG9ycyA9IE1vZHVsZVtcImFzbVwiXVtcImZcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICB2YXIgX2dldERlbmRyb2dyYW0gPSAoTW9kdWxlW1wiX2dldERlbmRyb2dyYW1cIl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKF9nZXREZW5kcm9ncmFtID0gTW9kdWxlW1wiX2dldERlbmRyb2dyYW1cIl0gPVxuICAgICAgICBNb2R1bGVbXCJhc21cIl1bXCJnXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH0pO1xuICAgIHZhciBfZnJlZSA9IChNb2R1bGVbXCJfZnJlZVwiXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoX2ZyZWUgPSBNb2R1bGVbXCJfZnJlZVwiXSA9IE1vZHVsZVtcImFzbVwiXVtcImhcIl0pLmFwcGx5KFxuICAgICAgICBudWxsLFxuICAgICAgICBhcmd1bWVudHNcbiAgICAgICk7XG4gICAgfSk7XG4gICAgdmFyIF9fX2Vycm5vX2xvY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChfX19lcnJub19sb2NhdGlvbiA9IE1vZHVsZVtcImFzbVwiXVtcIl9fZXJybm9fbG9jYXRpb25cIl0pLmFwcGx5KFxuICAgICAgICBudWxsLFxuICAgICAgICBhcmd1bWVudHNcbiAgICAgICk7XG4gICAgfTtcbiAgICB2YXIgX21hbGxvYyA9IChNb2R1bGVbXCJfbWFsbG9jXCJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChfbWFsbG9jID0gTW9kdWxlW1wiX21hbGxvY1wiXSA9IE1vZHVsZVtcImFzbVwiXVtcImpcIl0pLmFwcGx5KFxuICAgICAgICBudWxsLFxuICAgICAgICBhcmd1bWVudHNcbiAgICAgICk7XG4gICAgfSk7XG4gICAgdmFyIHN0YWNrU2F2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoc3RhY2tTYXZlID0gTW9kdWxlW1wiYXNtXCJdW1wia1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIHZhciBzdGFja1Jlc3RvcmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKHN0YWNrUmVzdG9yZSA9IE1vZHVsZVtcImFzbVwiXVtcImxcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICB2YXIgc3RhY2tBbGxvYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoc3RhY2tBbGxvYyA9IE1vZHVsZVtcImFzbVwiXVtcIm1cIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICB2YXIgX19fY3hhX2lzX3BvaW50ZXJfdHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoX19fY3hhX2lzX3BvaW50ZXJfdHlwZSA9IE1vZHVsZVtcImFzbVwiXVtcIm5cIl0pLmFwcGx5KFxuICAgICAgICBudWxsLFxuICAgICAgICBhcmd1bWVudHNcbiAgICAgICk7XG4gICAgfTtcbiAgICBNb2R1bGVbXCJjY2FsbFwiXSA9IGNjYWxsO1xuICAgIE1vZHVsZVtcImN3cmFwXCJdID0gY3dyYXA7XG4gICAgdmFyIGNhbGxlZFJ1bjtcbiAgICBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBmdW5jdGlvbiBydW5DYWxsZXIoKSB7XG4gICAgICBpZiAoIWNhbGxlZFJ1bikgcnVuKCk7XG4gICAgICBpZiAoIWNhbGxlZFJ1bikgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gcnVuQ2FsbGVyO1xuICAgIH07XG4gICAgZnVuY3Rpb24gcnVuKCkge1xuICAgICAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcHJlUnVuKCk7XG4gICAgICBpZiAocnVuRGVwZW5kZW5jaWVzID4gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBkb1J1bigpIHtcbiAgICAgICAgaWYgKGNhbGxlZFJ1bikgcmV0dXJuO1xuICAgICAgICBjYWxsZWRSdW4gPSB0cnVlO1xuICAgICAgICBNb2R1bGVbXCJjYWxsZWRSdW5cIl0gPSB0cnVlO1xuICAgICAgICBpZiAoQUJPUlQpIHJldHVybjtcbiAgICAgICAgaW5pdFJ1bnRpbWUoKTtcbiAgICAgICAgcmVhZHlQcm9taXNlUmVzb2x2ZShNb2R1bGUpO1xuICAgICAgICBpZiAoTW9kdWxlW1wib25SdW50aW1lSW5pdGlhbGl6ZWRcIl0pIE1vZHVsZVtcIm9uUnVudGltZUluaXRpYWxpemVkXCJdKCk7XG4gICAgICAgIHBvc3RSdW4oKTtcbiAgICAgIH1cbiAgICAgIGlmIChNb2R1bGVbXCJzZXRTdGF0dXNcIl0pIHtcbiAgICAgICAgTW9kdWxlW1wic2V0U3RhdHVzXCJdKFwiUnVubmluZy4uLlwiKTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBNb2R1bGVbXCJzZXRTdGF0dXNcIl0oXCJcIik7XG4gICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgZG9SdW4oKTtcbiAgICAgICAgfSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb1J1bigpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoTW9kdWxlW1wicHJlSW5pdFwiXSkge1xuICAgICAgaWYgKHR5cGVvZiBNb2R1bGVbXCJwcmVJbml0XCJdID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgTW9kdWxlW1wicHJlSW5pdFwiXSA9IFtNb2R1bGVbXCJwcmVJbml0XCJdXTtcbiAgICAgIHdoaWxlIChNb2R1bGVbXCJwcmVJbml0XCJdLmxlbmd0aCA+IDApIHtcbiAgICAgICAgTW9kdWxlW1wicHJlSW5pdFwiXS5wb3AoKSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBydW4oKTtcblxuICAgIHJldHVybiBleHBvcnRDcHBMaWIucmVhZHk7XG4gIH07XG59KSgpO1xuaWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIpXG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0Q3BwTGliO1xuZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZVtcImFtZFwiXSlcbiAgZGVmaW5lKFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGV4cG9ydENwcExpYjtcbiAgfSk7XG5lbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikgZXhwb3J0c1tcImV4cG9ydENwcExpYlwiXSA9IGV4cG9ydENwcExpYjtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmFtZE8gPSB7fTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18uaG1kID0gKG1vZHVsZSkgPT4ge1xuXHRtb2R1bGUgPSBPYmplY3QuY3JlYXRlKG1vZHVsZSk7XG5cdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgJ2V4cG9ydHMnLCB7XG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRzZXQ6ICgpID0+IHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignRVMgTW9kdWxlcyBtYXkgbm90IGFzc2lnbiBtb2R1bGUuZXhwb3J0cyBvciBleHBvcnRzLiosIFVzZSBFU00gZXhwb3J0IHN5bnRheCwgaW5zdGVhZDogJyArIG1vZHVsZS5pZCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIG1vZHVsZTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdClcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcblx0aWYgKCFzY3JpcHRVcmwpIHtcblx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuXHRcdGlmKHNjcmlwdHMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgaSA9IHNjcmlwdHMubGVuZ3RoIC0gMTtcblx0XHRcdHdoaWxlIChpID4gLTEgJiYgKCFzY3JpcHRVcmwgfHwgIS9eaHR0cChzPyk6Ly50ZXN0KHNjcmlwdFVybCkpKSBzY3JpcHRVcmwgPSBzY3JpcHRzW2ktLV0uc3JjO1xuXHRcdH1cblx0fVxufVxuLy8gV2hlbiBzdXBwb3J0aW5nIGJyb3dzZXJzIHdoZXJlIGFuIGF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQucHVibGljUGF0aCBtYW51YWxseSB2aWEgY29uZmlndXJhdGlvblxuLy8gb3IgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGFuZCBzZXQgdGhlIF9fd2VicGFja19wdWJsaWNfcGF0aF9fIHZhcmlhYmxlIGZyb20geW91ciBjb2RlIHRvIHVzZSB5b3VyIG93biBsb2dpYy5cbmlmICghc2NyaXB0VXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbnNjcmlwdFVybCA9IHNjcmlwdFVybC5yZXBsYWNlKC8jLiokLywgXCJcIikucmVwbGFjZSgvXFw/LiokLywgXCJcIikucmVwbGFjZSgvXFwvW15cXC9dKyQvLCBcIi9cIik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBzY3JpcHRVcmw7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5iID0gc2VsZi5sb2NhdGlvbiArIFwiXCI7XG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgY2h1bmtzXG4vLyBcIjFcIiBtZWFucyBcImFscmVhZHkgbG9hZGVkXCJcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDcwNTogMVxufTtcblxuLy8gbm8gY2h1bmsgaW5zdGFsbCBmdW5jdGlvbiBuZWVkZWRcbi8vIG5vIGNodW5rIGxvYWRpbmdcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdCIsImltcG9ydCB7IGdldENsdXN0ZXJzRnJvbURpc3RNYXRXYXNtIH0gZnJvbSAnLi9jbHVzdGVyaXplcldhc20nO1xub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyBkaXN0TWF0QXJyYXksIG4sIG1ldGhvZENvZGUgfSA9IGV2ZW50LmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IHt9O1xuICAgIHRyeSB7XG4gICAgICAgIGdldENsdXN0ZXJzRnJvbURpc3RNYXRXYXNtKGRpc3RNYXRBcnJheSwgbiwgbWV0aG9kQ29kZSlcbiAgICAgICAgICAgIC50aGVuKChjbHVzdGVyTWF0cml4KSA9PiB7XG4gICAgICAgICAgICBkYXRhLmNsdXN0ZXJNYXRyaXggPSBjbHVzdGVyTWF0cml4O1xuICAgICAgICAgICAgcG9zdE1lc3NhZ2UoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBkYXRhLmVycm9yID0gZTtcbiAgICAgICAgcG9zdE1lc3NhZ2UoZGF0YSk7XG4gICAgfVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNsdXN0ZXJpbmctd29ya2VyLmpzLm1hcCIsImltcG9ydCB7ZXhwb3J0Q3BwTGlifSBmcm9tICcuL3dhc21DbHVzdGVyLmpzJztcblxuLyoqXG4gY2FsbHMgd2FzbSBmdW5jdGlvbiB0byBnZXQgY2x1c3RlcmluZyBtZXJnZXMgYW5kIGhlaWdodHMgZnJvbSBkaXN0YW5jZSBtYXRyaXhcbiBkaXN0bWF0OiBkaXN0YW5jZSBtYXRyaXggYXMgYW4gYXJyYXkgb2YgZmxvYXRzIGNvbXByaXNpbmcgdGhlIHRvcCByaWdodCB0cmlhbmdsZSBvZiB0aGUgbWF0cml4XG4gbjogbnVtYmVyIG9mIG9ic2VydmFibGVzXG4gbWV0aG9kOiAwID0gc2luZ2xlIGxpbmthZ2UsIDEgPSBjb21wbGV0ZSBsaW5rYWdlLCAyID0gYXZlcmFnZSBsaW5rYWdlLCAzID0gbWVkaWFuIGxpbmthZ2VcbiByZXN1bHQ6IHsgbWVyZ2VSZXN1bHQ6IEludDMyQXJyYXksIGhlaWdodHNSZXN1bHQ6IEZsb2F0MzJBcnJheSB9XG4gbWVyZ2VSZXN1bHQgaGFzIGxlbmd0aCBvZiAobi0xKSoyIGFuZCBoZWlnaHRSZXN1bHQgaGFzIGxlbmd0aCBvZiBuLTFcbiB0b2dldGhlciB0aGV5IGRlc2NyaWJlIHRoZSBjbHVzdGVyaW5nIGFzIGEgZGVuZHJvZ3JhbSBhcyBhIG1hdHJpeCBvZiAobi0xKSBYIDNcbiBlYWNoIHJvdyBpbiB0aGUgZ2l2ZW4gbWF0cml4IGNvbXByaXNlcyB0aGUgbWVyZ2UgZXZlbnQgYXQgc3RlcCBpIGFuZCBsYXN0IGNvbHVtbiBpcyB0aGUgaGVpZ2h0IGZyb20gdGhlIGxlYXZlcy5cbiovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2x1c3RlcnNGcm9tRGlzdE1hdFdhc20oZGlzdG1hdCwgbiwgbWV0aG9kKSB7XG4gIGNvbnN0IHdhc21VcmwgPSBuZXcgVVJMKCcuL3dhc21DbHVzdGVyLndhc20nLCBpbXBvcnQubWV0YS51cmwpLmhyZWY7XG4gIGNvbnN0IHdhc21QYXRoID0gd2FzbVVybC5zdWJzdHJpbmcoMCwgd2FzbVVybC5sYXN0SW5kZXhPZignLycpICsgMSkgKyAnd2FzbUNsdXN0ZXIud2FzbSc7XG4gIGxldCB3YXNtSW5zdGFuY2U7XG4gIHRyeSB7XG4gICAgICB3YXNtSW5zdGFuY2UgPSBhd2FpdCBleHBvcnRDcHBMaWIoe2xvY2F0ZUZpbGU6ICgpID0+IHdhc21QYXRoLCBwcmludEVycjogKF8pID0+IHt9fSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgd2FzbUluc3RhbmNlID0gYXdhaXQgZXhwb3J0Q3BwTGliKHtsb2NhdGVGaWxlOiAoKSA9PiB3YXNtVXJsLCBwcmludEVycjogKF8pID0+IHt9fSk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbG9hZCB3YXNtIGZpbGUgZm9yIGhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nJyk7XG4gICAgICB9XG4gIH1cblxuICBjb25zdCBnZXREZW5kcm9ncmFtV2FzbSA9XG4gICAgd2FzbUluc3RhbmNlLmN3cmFwKCdnZXREZW5kcm9ncmFtJywgJ251bGwnLCBbJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJywgJ251bWJlcicsICdudW1iZXInXSk7XG4gIC8vIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIG9uIHRoZSB3YXNtIGhlYXAgZm9yIHRoZSBkaXN0YW5jZSBtYXRyaXhcbiAgY29uc3QgYnl0ZXNGb3JEaXN0TWF0ID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogZGlzdG1hdC5sZW5ndGg7XG4gIGNvbnN0IGRhdGFQdHIgPSB3YXNtSW5zdGFuY2UuX21hbGxvYyhieXRlc0ZvckRpc3RNYXQpO1xuICBjb25zdCBtYXRIZWFwID0gbmV3IFVpbnQ4QXJyYXkod2FzbUluc3RhbmNlLkhFQVBVOC5idWZmZXIsIGRhdGFQdHIsIGJ5dGVzRm9yRGlzdE1hdCk7XG4gIG1hdEhlYXAuc2V0KG5ldyBVaW50OEFycmF5KGRpc3RtYXQuYnVmZmVyKSk7XG5cbiAgLy9hbGxvY2F0ZSBhIG1lbW9yeSBibG9jayBvbiB0aGUgd2FzbSBoZWFwIGZvciB0aGUgbWVyZ2VzIGFycmF5XG4gIGNvbnN0IGJ5dGVzRm9yTWVyZ2VBcnJheSA9IEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAobiAtIDEpICogMjtcbiAgY29uc3QgbWVyZ2VQdHIgPSB3YXNtSW5zdGFuY2UuX21hbGxvYyhieXRlc0Zvck1lcmdlQXJyYXkpO1xuICBjb25zdCBtZXJnZUhlYXAgPSBuZXcgVWludDhBcnJheSh3YXNtSW5zdGFuY2UuSEVBUFU4LmJ1ZmZlciwgbWVyZ2VQdHIsIGJ5dGVzRm9yTWVyZ2VBcnJheSk7XG5cbiAgLy9hbGxvY2F0ZSBhIG1lbW9yeSBibG9jayBvbiB0aGUgd2FzbSBoZWFwIGZvciB0aGUgaGVpZ3QgYXJyYXlcbiAgY29uc3QgYnl0ZXNGb3JIZWlnaHRzQXJyYXkgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAobiAtIDEpO1xuICBjb25zdCBoZWlnaHRzUHRyID0gd2FzbUluc3RhbmNlLl9tYWxsb2MoYnl0ZXNGb3JIZWlnaHRzQXJyYXkpO1xuICBjb25zdCBoZWlnaHRzSGVhcCA9IG5ldyBVaW50OEFycmF5KHdhc21JbnN0YW5jZS5IRUFQVTguYnVmZmVyLCBoZWlnaHRzUHRyLCBieXRlc0ZvckhlaWdodHNBcnJheSk7XG5cbiAgLy8gY2FsbCB0aGUgd2FzbSBmdW5jdGlvblxuICBnZXREZW5kcm9ncmFtV2FzbShkYXRhUHRyLCBuLCBtZXRob2QsIG1lcmdlUHRyLCBoZWlnaHRzUHRyKTtcbiAgLy8gZ2V0IHRoZSBtZXJnZXMgYW5kIGhlaWdodHMgZnJvbSB0aGUgd2FzbSBoZWFwXG4gIGNvbnN0IG1lcmdlUmVzdWx0ID0gbmV3IEludDMyQXJyYXkobWVyZ2VIZWFwLmJ1ZmZlciwgbWVyZ2VIZWFwLmJ5dGVPZmZzZXQsIChuLTEpICogMik7XG4gIGNvbnN0IGhlaWdodHNSZXN1bHQgPSAobmV3IEZsb2F0MzJBcnJheShoZWlnaHRzSGVhcC5idWZmZXIsIGhlaWdodHNIZWFwLmJ5dGVPZmZzZXQsIG4tMSkpLnNsaWNlKDAsIG4tMSk7XG5cbiAgY29uc3QgbWVyZ2VSb3cxID0gbWVyZ2VSZXN1bHQuc2xpY2UoMCwgbi0xKTtcbiAgY29uc3QgbWVyZ2VSb3cyID0gbWVyZ2VSZXN1bHQuc2xpY2Uobi0xLCAyKm4gLSAyKTtcbiAgLy8gZnJlZSB0aGUgbWVtb3J5IGJsb2NrcyBvbiB0aGUgd2FzbSBoZWFwXG4gIHdhc21JbnN0YW5jZS5fZnJlZShtYXRIZWFwLmJ5dGVPZmZzZXQpO1xuICB3YXNtSW5zdGFuY2UuX2ZyZWUobWVyZ2VIZWFwLmJ5dGVPZmZzZXQpO1xuICB3YXNtSW5zdGFuY2UuX2ZyZWUoaGVpZ2h0c0hlYXAuYnl0ZU9mZnNldCk7XG4gIHJldHVybiB7bWVyZ2VSb3cxLCBtZXJnZVJvdzIsIGhlaWdodHNSZXN1bHR9O1xufVxuIl0sIm5hbWVzIjpbIl9zY3JpcHREaXIiLCJleHBvcnRDcHBMaWIiLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJ1bmRlZmluZWQiLCJyZWFkeVByb21pc2VSZXNvbHZlIiwicmVhZHlQcm9taXNlUmVqZWN0IiwiTW9kdWxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWFkQmluYXJ5IiwibW9kdWxlT3ZlcnJpZGVzIiwiT2JqZWN0IiwiYXNzaWduIiwiRU5WSVJPTk1FTlRfSVNfV0VCIiwid2luZG93IiwiRU5WSVJPTk1FTlRfSVNfV09SS0VSIiwiaW1wb3J0U2NyaXB0cyIsInNjcmlwdERpcmVjdG9yeSIsInByb2Nlc3MiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJzZWxmIiwibG9jYXRpb24iLCJocmVmIiwiaW5kZXhPZiIsInN1YnN0ciIsInJlcGxhY2UiLCJsYXN0SW5kZXhPZiIsInVybCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsInNlbmQiLCJVaW50OEFycmF5IiwicmVzcG9uc2UiLCJjb25zb2xlIiwibG9nIiwiYmluZCIsIndhc21CaW5hcnkiLCJ3YXNtTWVtb3J5IiwiZXJyIiwid2FybiIsIldlYkFzc2VtYmx5IiwiYWJvcnQiLCJIRUFQOCIsIkhFQVBVOCIsIkhFQVBVMzIiLCJBQk9SVCIsInVwZGF0ZU1lbW9yeVZpZXdzIiwiYiIsImJ1ZmZlciIsIkludDhBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsIl9fQVRQUkVSVU5fXyIsIl9fQVRJTklUX18iLCJfX0FUUE9TVFJVTl9fIiwicnVuRGVwZW5kZW5jaWVzIiwicnVuRGVwZW5kZW5jeVdhdGNoZXIiLCJkZXBlbmRlbmNpZXNGdWxmaWxsZWQiLCJ3aGF0IiwiZSIsIlJ1bnRpbWVFcnJvciIsIndhc21CaW5hcnlGaWxlIiwicGF0aCIsImlzRGF0YVVSSSIsImZpbGVuYW1lIiwic3RhcnRzV2l0aCIsImdldEJpbmFyeSIsImZpbGUiLCJpbnN0YW50aWF0ZUFycmF5QnVmZmVyIiwiYmluYXJ5RmlsZSIsImltcG9ydHMiLCJyZWNlaXZlciIsImZldGNoIiwidGhlbiIsImNyZWRlbnRpYWxzIiwiY2F0Y2giLCJnZXRCaW5hcnlQcm9taXNlIiwiYmluYXJ5IiwiaW5zdGFudGlhdGUiLCJpbnN0YW5jZSIsInJlYXNvbiIsImNhbGxSdW50aW1lQ2FsbGJhY2tzIiwiY2FsbGJhY2tzIiwibGVuZ3RoIiwic2hpZnQiLCJFeGNlcHRpb25JbmZvIiwiZXhjUHRyIiwidGhpcyIsInB0ciIsInNldF90eXBlIiwidHlwZSIsImdldF90eXBlIiwic2V0X2Rlc3RydWN0b3IiLCJkZXN0cnVjdG9yIiwiZ2V0X2Rlc3RydWN0b3IiLCJzZXRfY2F1Z2h0IiwiY2F1Z2h0IiwiZ2V0X2NhdWdodCIsInNldF9yZXRocm93biIsInJldGhyb3duIiwiZ2V0X3JldGhyb3duIiwiaW5pdCIsInNldF9hZGp1c3RlZF9wdHIiLCJhZGp1c3RlZFB0ciIsImdldF9hZGp1c3RlZF9wdHIiLCJnZXRfZXhjZXB0aW9uX3B0ciIsIl9fX2N4YV9pc19wb2ludGVyX3R5cGUiLCJhZGp1c3RlZCIsImVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIiLCJzaXplIiwiZ3JvdyIsImJ5dGVMZW5ndGgiLCJnZXRDRnVuYyIsImlkZW50IiwiVVRGOERlY29kZXIiLCJUZXh0RGVjb2RlciIsImNjYWxsIiwicmV0dXJuVHlwZSIsImFyZ1R5cGVzIiwiYXJncyIsIm9wdHMiLCJ0b0MiLCJzdHJpbmciLCJzdHIiLCJyZXQiLCJsZW4iLCJpIiwiYyIsImNoYXJDb2RlQXQiLCJsZW5ndGhCeXRlc1VURjgiLCJzdGFja0FsbG9jIiwib3V0UHRyIiwibWF4Qnl0ZXNUb1dyaXRlIiwiaGVhcCIsIm91dElkeCIsImVuZElkeCIsInUiLCJzdHJpbmdUb1VURjhBcnJheSIsInN0cmluZ1RvVVRGOCIsInN0cmluZ1RvVVRGOE9uU3RhY2siLCJhcnJheSIsImFyciIsInNldCIsImZ1bmMiLCJjQXJncyIsInN0YWNrIiwiY29udmVydGVyIiwic3RhY2tTYXZlIiwiYXBwbHkiLCJzdGFja1Jlc3RvcmUiLCJoZWFwT3JBcnJheSIsImlkeCIsIm1heEJ5dGVzVG9SZWFkIiwiZW5kUHRyIiwiZGVjb2RlIiwic3ViYXJyYXkiLCJ1MCIsInUxIiwidTIiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaCIsIlVURjhBcnJheVRvU3RyaW5nIiwiQm9vbGVhbiIsImNvbnZlcnRSZXR1cm5WYWx1ZSIsIm9uRG9uZSIsImNhbGxlZFJ1biIsIndhc21JbXBvcnRzIiwiZCIsImEiLCJkZXN0IiwibnVtIiwiY29weVdpdGhpbiIsInJlcXVlc3RlZFNpemUiLCJ4Iiwib2xkU2l6ZSIsIm1heEhlYXBTaXplIiwiY3V0RG93biIsIm92ZXJHcm93bkhlYXBTaXplIiwiTWF0aCIsIm1pbiIsIm1heCIsImNhbGxiYWNrIiwiaW5mbyIsInJlY2VpdmVJbnN0YW5jZSIsIm1vZHVsZSIsImNiIiwiZXhwb3J0cyIsInVuc2hpZnQiLCJpZCIsImNsZWFySW50ZXJ2YWwiLCJyZW1vdmVSdW5EZXBlbmRlbmN5IiwicmVzdWx0IiwiaW5zdGFudGlhdGVTdHJlYW1pbmciLCJjcmVhdGVXYXNtIiwiYXJndW1lbnRzIiwicnVuIiwiZG9SdW4iLCJwb3N0UnVuIiwicHJlUnVuIiwic2V0VGltZW91dCIsIm51bWVyaWNBcmdzIiwiZXZlcnkiLCJydW5DYWxsZXIiLCJwb3AiLCJyZWFkeSIsImRlZmluZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsImxvYWRlZCIsIl9fd2VicGFja19tb2R1bGVzX18iLCJtIiwiYW1kTyIsImRlZmluaXRpb24iLCJrZXkiLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZyIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsImhtZCIsImNyZWF0ZSIsImNoaWxkcmVuIiwiRXJyb3IiLCJvYmoiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwic2NyaXB0VXJsIiwic2NyaXB0cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidGVzdCIsInAiLCJvbm1lc3NhZ2UiLCJldmVudCIsImRpc3RNYXRBcnJheSIsIm4iLCJtZXRob2RDb2RlIiwiZGF0YSIsImFzeW5jIiwiZGlzdG1hdCIsIm1ldGhvZCIsIndhc21VcmwiLCJVUkwiLCJ3YXNtUGF0aCIsInN1YnN0cmluZyIsIndhc21JbnN0YW5jZSIsImxvY2F0ZUZpbGUiLCJwcmludEVyciIsIl8iLCJlcnJvciIsImdldERlbmRyb2dyYW1XYXNtIiwiY3dyYXAiLCJieXRlc0ZvckRpc3RNYXQiLCJCWVRFU19QRVJfRUxFTUVOVCIsImRhdGFQdHIiLCJfbWFsbG9jIiwibWF0SGVhcCIsImJ5dGVzRm9yTWVyZ2VBcnJheSIsIm1lcmdlUHRyIiwibWVyZ2VIZWFwIiwiYnl0ZXNGb3JIZWlnaHRzQXJyYXkiLCJoZWlnaHRzUHRyIiwiaGVpZ2h0c0hlYXAiLCJtZXJnZVJlc3VsdCIsImJ5dGVPZmZzZXQiLCJoZWlnaHRzUmVzdWx0Iiwic2xpY2UiLCJtZXJnZVJvdzEiLCJtZXJnZVJvdzIiLCJfZnJlZSIsImdldENsdXN0ZXJzRnJvbURpc3RNYXRXYXNtIiwiY2x1c3Rlck1hdHJpeCIsInBvc3RNZXNzYWdlIl0sInNvdXJjZVJvb3QiOiIifQ==
2
+ //# sourceMappingURL=705.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"705.js","mappings":"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","sources":["webpack://peptides/./node_modules/@datagrok-libraries/math/src/hierarchical-clustering/wasm/wasmCluster.js","webpack://peptides/webpack/bootstrap","webpack://peptides/webpack/runtime/amd options","webpack://peptides/webpack/runtime/define property getters","webpack://peptides/webpack/runtime/global","webpack://peptides/webpack/runtime/harmony module decorator","webpack://peptides/webpack/runtime/hasOwnProperty shorthand","webpack://peptides/webpack/runtime/publicPath","webpack://peptides/webpack/runtime/importScripts chunk loading","webpack://peptides/./node_modules/@datagrok-libraries/math/src/hierarchical-clustering/wasm/clustering-worker.js","webpack://peptides/./node_modules/@datagrok-libraries/math/src/hierarchical-clustering/wasm/clusterizerWasm.js"],"sourcesContent":["export var exportCppLib = (() => {\n var _scriptDir =\n typeof document !== \"undefined\" && document.currentScript\n ? document.currentScript.src\n : undefined;\n\n return function (exportCppLib = {}) {\n var Module = typeof exportCppLib != \"undefined\" ? exportCppLib : {};\n var readyPromiseResolve, readyPromiseReject;\n Module[\"ready\"] = new Promise(function (resolve, reject) {\n readyPromiseResolve = resolve;\n readyPromiseReject = reject;\n });\n var moduleOverrides = Object.assign({}, Module);\n var arguments_ = [];\n var thisProgram = \"./this.program\";\n var quit_ = (status, toThrow) => {\n throw toThrow;\n };\n var ENVIRONMENT_IS_WEB = typeof window == \"object\";\n var ENVIRONMENT_IS_WORKER = typeof importScripts == \"function\";\n var ENVIRONMENT_IS_NODE =\n typeof process == \"object\" &&\n typeof process.versions == \"object\" &&\n typeof process.versions.node == \"string\";\n var scriptDirectory = \"\";\n function locateFile(path) {\n if (Module[\"locateFile\"]) {\n return Module[\"locateFile\"](path, scriptDirectory);\n }\n return scriptDirectory + path;\n }\n var read_, readAsync, readBinary, setWindowTitle;\n if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n if (ENVIRONMENT_IS_WORKER) {\n scriptDirectory = self.location.href;\n } else if (typeof document != \"undefined\" && document.currentScript) {\n scriptDirectory = document.currentScript.src;\n }\n if (_scriptDir) {\n scriptDirectory = _scriptDir;\n }\n if (scriptDirectory.indexOf(\"blob:\") !== 0) {\n scriptDirectory = scriptDirectory.substr(\n 0,\n scriptDirectory.replace(/[?#].*/, \"\").lastIndexOf(\"/\") + 1\n );\n } else {\n scriptDirectory = \"\";\n }\n {\n read_ = (url) => {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url, false);\n xhr.send(null);\n return xhr.responseText;\n };\n if (ENVIRONMENT_IS_WORKER) {\n readBinary = (url) => {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url, false);\n xhr.responseType = \"arraybuffer\";\n xhr.send(null);\n return new Uint8Array(xhr.response);\n };\n }\n readAsync = (url, onload, onerror) => {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url, true);\n xhr.responseType = \"arraybuffer\";\n xhr.onload = () => {\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) {\n onload(xhr.response);\n return;\n }\n onerror();\n };\n xhr.onerror = onerror;\n xhr.send(null);\n };\n }\n setWindowTitle = (title) => (document.title = title);\n } else {\n }\n var out = Module[\"print\"] || console.log.bind(console);\n var err = Module[\"printErr\"] || console.warn.bind(console);\n Object.assign(Module, moduleOverrides);\n moduleOverrides = null;\n if (Module[\"arguments\"]) arguments_ = Module[\"arguments\"];\n if (Module[\"thisProgram\"]) thisProgram = Module[\"thisProgram\"];\n if (Module[\"quit\"]) quit_ = Module[\"quit\"];\n var wasmBinary;\n if (Module[\"wasmBinary\"]) wasmBinary = Module[\"wasmBinary\"];\n var noExitRuntime = Module[\"noExitRuntime\"] || true;\n if (typeof WebAssembly != \"object\") {\n abort(\"no native wasm support detected\");\n }\n var wasmMemory;\n var ABORT = false;\n var EXITSTATUS;\n var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;\n function updateMemoryViews() {\n var b = wasmMemory.buffer;\n Module[\"HEAP8\"] = HEAP8 = new Int8Array(b);\n Module[\"HEAP16\"] = HEAP16 = new Int16Array(b);\n Module[\"HEAP32\"] = HEAP32 = new Int32Array(b);\n Module[\"HEAPU8\"] = HEAPU8 = new Uint8Array(b);\n Module[\"HEAPU16\"] = HEAPU16 = new Uint16Array(b);\n Module[\"HEAPU32\"] = HEAPU32 = new Uint32Array(b);\n Module[\"HEAPF32\"] = HEAPF32 = new Float32Array(b);\n Module[\"HEAPF64\"] = HEAPF64 = new Float64Array(b);\n }\n var wasmTable;\n var __ATPRERUN__ = [];\n var __ATINIT__ = [];\n var __ATPOSTRUN__ = [];\n var runtimeInitialized = false;\n function preRun() {\n if (Module[\"preRun\"]) {\n if (typeof Module[\"preRun\"] == \"function\")\n Module[\"preRun\"] = [Module[\"preRun\"]];\n while (Module[\"preRun\"].length) {\n addOnPreRun(Module[\"preRun\"].shift());\n }\n }\n callRuntimeCallbacks(__ATPRERUN__);\n }\n function initRuntime() {\n runtimeInitialized = true;\n callRuntimeCallbacks(__ATINIT__);\n }\n function postRun() {\n if (Module[\"postRun\"]) {\n if (typeof Module[\"postRun\"] == \"function\")\n Module[\"postRun\"] = [Module[\"postRun\"]];\n while (Module[\"postRun\"].length) {\n addOnPostRun(Module[\"postRun\"].shift());\n }\n }\n callRuntimeCallbacks(__ATPOSTRUN__);\n }\n function addOnPreRun(cb) {\n __ATPRERUN__.unshift(cb);\n }\n function addOnInit(cb) {\n __ATINIT__.unshift(cb);\n }\n function addOnPostRun(cb) {\n __ATPOSTRUN__.unshift(cb);\n }\n var runDependencies = 0;\n var runDependencyWatcher = null;\n var dependenciesFulfilled = null;\n function addRunDependency(id) {\n runDependencies++;\n if (Module[\"monitorRunDependencies\"]) {\n Module[\"monitorRunDependencies\"](runDependencies);\n }\n }\n function removeRunDependency(id) {\n runDependencies--;\n if (Module[\"monitorRunDependencies\"]) {\n Module[\"monitorRunDependencies\"](runDependencies);\n }\n if (runDependencies == 0) {\n if (runDependencyWatcher !== null) {\n clearInterval(runDependencyWatcher);\n runDependencyWatcher = null;\n }\n if (dependenciesFulfilled) {\n var callback = dependenciesFulfilled;\n dependenciesFulfilled = null;\n callback();\n }\n }\n }\n function abort(what) {\n if (Module[\"onAbort\"]) {\n Module[\"onAbort\"](what);\n }\n what = \"Aborted(\" + what + \")\";\n err(what);\n ABORT = true;\n EXITSTATUS = 1;\n what += \". Build with -sASSERTIONS for more info.\";\n var e = new WebAssembly.RuntimeError(what);\n readyPromiseReject(e);\n throw e;\n }\n var dataURIPrefix = \"data:application/octet-stream;base64,\";\n function isDataURI(filename) {\n return filename.startsWith(dataURIPrefix);\n }\n var wasmBinaryFile;\n wasmBinaryFile = \"wasmCluster.wasm\";\n if (!isDataURI(wasmBinaryFile)) {\n wasmBinaryFile = locateFile(wasmBinaryFile);\n }\n function getBinary(file) {\n try {\n if (file == wasmBinaryFile && wasmBinary) {\n return new Uint8Array(wasmBinary);\n }\n if (readBinary) {\n return readBinary(file);\n }\n throw \"both async and sync fetching of the wasm failed\";\n } catch (err) {\n abort(err);\n }\n }\n function getBinaryPromise(binaryFile) {\n if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) {\n if (typeof fetch == \"function\") {\n return fetch(binaryFile, { credentials: \"same-origin\" })\n .then(function (response) {\n if (!response[\"ok\"]) {\n throw \"failed to load wasm binary file at '\" + binaryFile + \"'\";\n }\n return response[\"arrayBuffer\"]();\n })\n .catch(function () {\n return getBinary(binaryFile);\n });\n }\n }\n return Promise.resolve().then(function () {\n return getBinary(binaryFile);\n });\n }\n function instantiateArrayBuffer(binaryFile, imports, receiver) {\n return getBinaryPromise(binaryFile)\n .then(function (binary) {\n return WebAssembly.instantiate(binary, imports);\n })\n .then(function (instance) {\n return instance;\n })\n .then(receiver, function (reason) {\n err(\"failed to asynchronously prepare wasm: \" + reason);\n abort(reason);\n });\n }\n function instantiateAsync(binary, binaryFile, imports, callback) {\n if (\n !binary &&\n typeof WebAssembly.instantiateStreaming == \"function\" &&\n !isDataURI(binaryFile) &&\n typeof fetch == \"function\"\n ) {\n return fetch(binaryFile, { credentials: \"same-origin\" }).then(function (\n response\n ) {\n var result = WebAssembly.instantiateStreaming(response, imports);\n return result.then(callback, function (reason) {\n err(\"wasm streaming compile failed: \" + reason);\n err(\"falling back to ArrayBuffer instantiation\");\n return instantiateArrayBuffer(binaryFile, imports, callback);\n });\n });\n } else {\n return instantiateArrayBuffer(binaryFile, imports, callback);\n }\n }\n function createWasm() {\n var info = { a: wasmImports };\n function receiveInstance(instance, module) {\n var exports = instance.exports;\n Module[\"asm\"] = exports;\n wasmMemory = Module[\"asm\"][\"e\"];\n updateMemoryViews();\n wasmTable = Module[\"asm\"][\"i\"];\n addOnInit(Module[\"asm\"][\"f\"]);\n removeRunDependency(\"wasm-instantiate\");\n return exports;\n }\n addRunDependency(\"wasm-instantiate\");\n function receiveInstantiationResult(result) {\n receiveInstance(result[\"instance\"]);\n }\n if (Module[\"instantiateWasm\"]) {\n try {\n return Module[\"instantiateWasm\"](info, receiveInstance);\n } catch (e) {\n err(\"Module.instantiateWasm callback failed with error: \" + e);\n readyPromiseReject(e);\n }\n }\n instantiateAsync(\n wasmBinary,\n wasmBinaryFile,\n info,\n receiveInstantiationResult\n ).catch(readyPromiseReject);\n return {};\n }\n function callRuntimeCallbacks(callbacks) {\n while (callbacks.length > 0) {\n callbacks.shift()(Module);\n }\n }\n function ExceptionInfo(excPtr) {\n this.excPtr = excPtr;\n this.ptr = excPtr - 24;\n this.set_type = function (type) {\n HEAPU32[(this.ptr + 4) >> 2] = type;\n };\n this.get_type = function () {\n return HEAPU32[(this.ptr + 4) >> 2];\n };\n this.set_destructor = function (destructor) {\n HEAPU32[(this.ptr + 8) >> 2] = destructor;\n };\n this.get_destructor = function () {\n return HEAPU32[(this.ptr + 8) >> 2];\n };\n this.set_caught = function (caught) {\n caught = caught ? 1 : 0;\n HEAP8[(this.ptr + 12) >> 0] = caught;\n };\n this.get_caught = function () {\n return HEAP8[(this.ptr + 12) >> 0] != 0;\n };\n this.set_rethrown = function (rethrown) {\n rethrown = rethrown ? 1 : 0;\n HEAP8[(this.ptr + 13) >> 0] = rethrown;\n };\n this.get_rethrown = function () {\n return HEAP8[(this.ptr + 13) >> 0] != 0;\n };\n this.init = function (type, destructor) {\n this.set_adjusted_ptr(0);\n this.set_type(type);\n this.set_destructor(destructor);\n };\n this.set_adjusted_ptr = function (adjustedPtr) {\n HEAPU32[(this.ptr + 16) >> 2] = adjustedPtr;\n };\n this.get_adjusted_ptr = function () {\n return HEAPU32[(this.ptr + 16) >> 2];\n };\n this.get_exception_ptr = function () {\n var isPointer = ___cxa_is_pointer_type(this.get_type());\n if (isPointer) {\n return HEAPU32[this.excPtr >> 2];\n }\n var adjusted = this.get_adjusted_ptr();\n if (adjusted !== 0) return adjusted;\n return this.excPtr;\n };\n }\n var exceptionLast = 0;\n var uncaughtExceptionCount = 0;\n function ___cxa_throw(ptr, type, destructor) {\n var info = new ExceptionInfo(ptr);\n info.init(type, destructor);\n exceptionLast = ptr;\n uncaughtExceptionCount++;\n throw exceptionLast;\n }\n function _abort() {\n abort(\"\");\n }\n function _emscripten_memcpy_big(dest, src, num) {\n HEAPU8.copyWithin(dest, src, src + num);\n }\n function getHeapMax() {\n return 2147483648;\n }\n function emscripten_realloc_buffer(size) {\n var b = wasmMemory.buffer;\n try {\n wasmMemory.grow((size - b.byteLength + 65535) >>> 16);\n updateMemoryViews();\n return 1;\n } catch (e) {}\n }\n function _emscripten_resize_heap(requestedSize) {\n var oldSize = HEAPU8.length;\n requestedSize = requestedSize >>> 0;\n var maxHeapSize = getHeapMax();\n if (requestedSize > maxHeapSize) {\n return false;\n }\n let alignUp = (x, multiple) =>\n x + ((multiple - (x % multiple)) % multiple);\n for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);\n overGrownHeapSize = Math.min(\n overGrownHeapSize,\n requestedSize + 100663296\n );\n var newSize = Math.min(\n maxHeapSize,\n alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)\n );\n var replacement = emscripten_realloc_buffer(newSize);\n if (replacement) {\n return true;\n }\n }\n return false;\n }\n function getCFunc(ident) {\n var func = Module[\"_\" + ident];\n return func;\n }\n function writeArrayToMemory(array, buffer) {\n HEAP8.set(array, buffer);\n }\n function lengthBytesUTF8(str) {\n var len = 0;\n for (var i = 0; i < str.length; ++i) {\n var c = str.charCodeAt(i);\n if (c <= 127) {\n len++;\n } else if (c <= 2047) {\n len += 2;\n } else if (c >= 55296 && c <= 57343) {\n len += 4;\n ++i;\n } else {\n len += 3;\n }\n }\n return len;\n }\n function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {\n if (!(maxBytesToWrite > 0)) return 0;\n var startIdx = outIdx;\n var endIdx = outIdx + maxBytesToWrite - 1;\n for (var i = 0; i < str.length; ++i) {\n var u = str.charCodeAt(i);\n if (u >= 55296 && u <= 57343) {\n var u1 = str.charCodeAt(++i);\n u = (65536 + ((u & 1023) << 10)) | (u1 & 1023);\n }\n if (u <= 127) {\n if (outIdx >= endIdx) break;\n heap[outIdx++] = u;\n } else if (u <= 2047) {\n if (outIdx + 1 >= endIdx) break;\n heap[outIdx++] = 192 | (u >> 6);\n heap[outIdx++] = 128 | (u & 63);\n } else if (u <= 65535) {\n if (outIdx + 2 >= endIdx) break;\n heap[outIdx++] = 224 | (u >> 12);\n heap[outIdx++] = 128 | ((u >> 6) & 63);\n heap[outIdx++] = 128 | (u & 63);\n } else {\n if (outIdx + 3 >= endIdx) break;\n heap[outIdx++] = 240 | (u >> 18);\n heap[outIdx++] = 128 | ((u >> 12) & 63);\n heap[outIdx++] = 128 | ((u >> 6) & 63);\n heap[outIdx++] = 128 | (u & 63);\n }\n }\n heap[outIdx] = 0;\n return outIdx - startIdx;\n }\n function stringToUTF8(str, outPtr, maxBytesToWrite) {\n return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\n }\n function stringToUTF8OnStack(str) {\n var size = lengthBytesUTF8(str) + 1;\n var ret = stackAlloc(size);\n stringToUTF8(str, ret, size);\n return ret;\n }\n var UTF8Decoder =\n typeof TextDecoder != \"undefined\" ? new TextDecoder(\"utf8\") : undefined;\n function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {\n var endIdx = idx + maxBytesToRead;\n var endPtr = idx;\n while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;\n if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n }\n var str = \"\";\n while (idx < endPtr) {\n var u0 = heapOrArray[idx++];\n if (!(u0 & 128)) {\n str += String.fromCharCode(u0);\n continue;\n }\n var u1 = heapOrArray[idx++] & 63;\n if ((u0 & 224) == 192) {\n str += String.fromCharCode(((u0 & 31) << 6) | u1);\n continue;\n }\n var u2 = heapOrArray[idx++] & 63;\n if ((u0 & 240) == 224) {\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n } else {\n u0 =\n ((u0 & 7) << 18) |\n (u1 << 12) |\n (u2 << 6) |\n (heapOrArray[idx++] & 63);\n }\n if (u0 < 65536) {\n str += String.fromCharCode(u0);\n } else {\n var ch = u0 - 65536;\n str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023));\n }\n }\n return str;\n }\n function UTF8ToString(ptr, maxBytesToRead) {\n return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : \"\";\n }\n function ccall(ident, returnType, argTypes, args, opts) {\n var toC = {\n string: (str) => {\n var ret = 0;\n if (str !== null && str !== undefined && str !== 0) {\n ret = stringToUTF8OnStack(str);\n }\n return ret;\n },\n array: (arr) => {\n var ret = stackAlloc(arr.length);\n writeArrayToMemory(arr, ret);\n return ret;\n },\n };\n function convertReturnValue(ret) {\n if (returnType === \"string\") {\n return UTF8ToString(ret);\n }\n if (returnType === \"boolean\") return Boolean(ret);\n return ret;\n }\n var func = getCFunc(ident);\n var cArgs = [];\n var stack = 0;\n if (args) {\n for (var i = 0; i < args.length; i++) {\n var converter = toC[argTypes[i]];\n if (converter) {\n if (stack === 0) stack = stackSave();\n cArgs[i] = converter(args[i]);\n } else {\n cArgs[i] = args[i];\n }\n }\n }\n var ret = func.apply(null, cArgs);\n function onDone(ret) {\n if (stack !== 0) stackRestore(stack);\n return convertReturnValue(ret);\n }\n ret = onDone(ret);\n return ret;\n }\n function cwrap(ident, returnType, argTypes, opts) {\n var numericArgs =\n !argTypes ||\n argTypes.every((type) => type === \"number\" || type === \"boolean\");\n var numericRet = returnType !== \"string\";\n if (numericRet && numericArgs && !opts) {\n return getCFunc(ident);\n }\n return function () {\n return ccall(ident, returnType, argTypes, arguments, opts);\n };\n }\n var wasmImports = {\n d: ___cxa_throw,\n a: _abort,\n c: _emscripten_memcpy_big,\n b: _emscripten_resize_heap,\n };\n var asm = createWasm();\n var ___wasm_call_ctors = function () {\n return (___wasm_call_ctors = Module[\"asm\"][\"f\"]).apply(null, arguments);\n };\n var _getDendrogram = (Module[\"_getDendrogram\"] = function () {\n return (_getDendrogram = Module[\"_getDendrogram\"] =\n Module[\"asm\"][\"g\"]).apply(null, arguments);\n });\n var _free = (Module[\"_free\"] = function () {\n return (_free = Module[\"_free\"] = Module[\"asm\"][\"h\"]).apply(\n null,\n arguments\n );\n });\n var ___errno_location = function () {\n return (___errno_location = Module[\"asm\"][\"__errno_location\"]).apply(\n null,\n arguments\n );\n };\n var _malloc = (Module[\"_malloc\"] = function () {\n return (_malloc = Module[\"_malloc\"] = Module[\"asm\"][\"j\"]).apply(\n null,\n arguments\n );\n });\n var stackSave = function () {\n return (stackSave = Module[\"asm\"][\"k\"]).apply(null, arguments);\n };\n var stackRestore = function () {\n return (stackRestore = Module[\"asm\"][\"l\"]).apply(null, arguments);\n };\n var stackAlloc = function () {\n return (stackAlloc = Module[\"asm\"][\"m\"]).apply(null, arguments);\n };\n var ___cxa_is_pointer_type = function () {\n return (___cxa_is_pointer_type = Module[\"asm\"][\"n\"]).apply(\n null,\n arguments\n );\n };\n Module[\"ccall\"] = ccall;\n Module[\"cwrap\"] = cwrap;\n var calledRun;\n dependenciesFulfilled = function runCaller() {\n if (!calledRun) run();\n if (!calledRun) dependenciesFulfilled = runCaller;\n };\n function run() {\n if (runDependencies > 0) {\n return;\n }\n preRun();\n if (runDependencies > 0) {\n return;\n }\n function doRun() {\n if (calledRun) return;\n calledRun = true;\n Module[\"calledRun\"] = true;\n if (ABORT) return;\n initRuntime();\n readyPromiseResolve(Module);\n if (Module[\"onRuntimeInitialized\"]) Module[\"onRuntimeInitialized\"]();\n postRun();\n }\n if (Module[\"setStatus\"]) {\n Module[\"setStatus\"](\"Running...\");\n setTimeout(function () {\n setTimeout(function () {\n Module[\"setStatus\"](\"\");\n }, 1);\n doRun();\n }, 1);\n } else {\n doRun();\n }\n }\n if (Module[\"preInit\"]) {\n if (typeof Module[\"preInit\"] == \"function\")\n Module[\"preInit\"] = [Module[\"preInit\"]];\n while (Module[\"preInit\"].length > 0) {\n Module[\"preInit\"].pop()();\n }\n }\n run();\n\n return exportCppLib.ready;\n };\n})();\nif (typeof exports === \"object\" && typeof module === \"object\")\n module.exports = exportCppLib;\nelse if (typeof define === \"function\" && define[\"amd\"])\n define([], function () {\n return exportCppLib;\n });\nelse if (typeof exports === \"object\") exports[\"exportCppLib\"] = exportCppLib;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = (module) => {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: () => {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = self.location + \"\";\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t705: 1\n};\n\n// no chunk install function needed\n// no chunk loading\n\n// no HMR\n\n// no HMR manifest","import { getClustersFromDistMatWasm } from './clusterizerWasm';\nonmessage = (event) => {\n const { distMatArray, n, methodCode } = event.data;\n const data = {};\n try {\n getClustersFromDistMatWasm(distMatArray, n, methodCode)\n .then((clusterMatrix) => {\n data.clusterMatrix = clusterMatrix;\n postMessage(data);\n });\n }\n catch (e) {\n data.error = e;\n postMessage(data);\n }\n};\n//# sourceMappingURL=clustering-worker.js.map","import {exportCppLib} from './wasmCluster.js';\n\n/**\n calls wasm function to get clustering merges and heights from distance matrix\n distmat: distance matrix as an array of floats comprising the top right triangle of the matrix\n n: number of observables\n method: 0 = single linkage, 1 = complete linkage, 2 = average linkage, 3 = median linkage\n result: { mergeResult: Int32Array, heightsResult: Float32Array }\n mergeResult has length of (n-1)*2 and heightResult has length of n-1\n together they describe the clustering as a dendrogram as a matrix of (n-1) X 3\n each row in the given matrix comprises the merge event at step i and last column is the height from the leaves.\n*/\nexport async function getClustersFromDistMatWasm(distmat, n, method) {\n const wasmUrl = new URL('./wasmCluster.wasm', import.meta.url).href;\n const wasmPath = wasmUrl.substring(0, wasmUrl.lastIndexOf('/') + 1) + 'wasmCluster.wasm';\n let wasmInstance;\n try {\n wasmInstance = await exportCppLib({locateFile: () => wasmPath, printErr: (_) => {}});\n } catch (e) {\n try {\n wasmInstance = await exportCppLib({locateFile: () => wasmUrl, printErr: (_) => {}});\n }\n catch (e) {\n console.error(e);\n throw new Error('Unable to load wasm file for hierarchical clustering');\n }\n }\n\n const getDendrogramWasm =\n wasmInstance.cwrap('getDendrogram', 'null', ['number', 'number', 'number', 'number', 'number']);\n // allocate a memory block on the wasm heap for the distance matrix\n const bytesForDistMat = Float32Array.BYTES_PER_ELEMENT * distmat.length;\n const dataPtr = wasmInstance._malloc(bytesForDistMat);\n const matHeap = new Uint8Array(wasmInstance.HEAPU8.buffer, dataPtr, bytesForDistMat);\n matHeap.set(new Uint8Array(distmat.buffer));\n\n //allocate a memory block on the wasm heap for the merges array\n const bytesForMergeArray = Int32Array.BYTES_PER_ELEMENT * (n - 1) * 2;\n const mergePtr = wasmInstance._malloc(bytesForMergeArray);\n const mergeHeap = new Uint8Array(wasmInstance.HEAPU8.buffer, mergePtr, bytesForMergeArray);\n\n //allocate a memory block on the wasm heap for the heigt array\n const bytesForHeightsArray = Float32Array.BYTES_PER_ELEMENT * (n - 1);\n const heightsPtr = wasmInstance._malloc(bytesForHeightsArray);\n const heightsHeap = new Uint8Array(wasmInstance.HEAPU8.buffer, heightsPtr, bytesForHeightsArray);\n\n // call the wasm function\n getDendrogramWasm(dataPtr, n, method, mergePtr, heightsPtr);\n // get the merges and heights from the wasm heap\n const mergeResult = new Int32Array(mergeHeap.buffer, mergeHeap.byteOffset, (n-1) * 2);\n const heightsResult = (new Float32Array(heightsHeap.buffer, heightsHeap.byteOffset, n-1)).slice(0, n-1);\n\n const mergeRow1 = mergeResult.slice(0, n-1);\n const mergeRow2 = mergeResult.slice(n-1, 2*n - 2);\n // free the memory blocks on the wasm heap\n wasmInstance._free(matHeap.byteOffset);\n wasmInstance._free(mergeHeap.byteOffset);\n wasmInstance._free(heightsHeap.byteOffset);\n return {mergeRow1, mergeRow2, heightsResult};\n}\n"],"names":["_scriptDir","exportCppLib","document","currentScript","src","undefined","readyPromiseResolve","readyPromiseReject","Module","Promise","resolve","reject","readBinary","moduleOverrides","Object","assign","ENVIRONMENT_IS_WEB","window","ENVIRONMENT_IS_WORKER","importScripts","scriptDirectory","process","versions","node","self","location","href","indexOf","substr","replace","lastIndexOf","url","xhr","XMLHttpRequest","open","responseType","send","Uint8Array","response","console","log","bind","wasmBinary","wasmMemory","err","warn","WebAssembly","abort","HEAP8","HEAPU8","HEAPU32","ABORT","updateMemoryViews","b","buffer","Int8Array","Int16Array","Int32Array","Uint16Array","Uint32Array","Float32Array","Float64Array","__ATPRERUN__","__ATINIT__","__ATPOSTRUN__","runDependencies","runDependencyWatcher","dependenciesFulfilled","what","e","RuntimeError","wasmBinaryFile","path","isDataURI","filename","startsWith","getBinary","file","instantiateArrayBuffer","binaryFile","imports","receiver","fetch","then","credentials","catch","getBinaryPromise","binary","instantiate","instance","reason","callRuntimeCallbacks","callbacks","length","shift","ExceptionInfo","excPtr","this","ptr","set_type","type","get_type","set_destructor","destructor","get_destructor","set_caught","caught","get_caught","set_rethrown","rethrown","get_rethrown","init","set_adjusted_ptr","adjustedPtr","get_adjusted_ptr","get_exception_ptr","___cxa_is_pointer_type","adjusted","emscripten_realloc_buffer","size","grow","byteLength","getCFunc","ident","UTF8Decoder","TextDecoder","ccall","returnType","argTypes","args","opts","toC","string","str","ret","len","i","c","charCodeAt","lengthBytesUTF8","stackAlloc","outPtr","maxBytesToWrite","heap","outIdx","endIdx","u","stringToUTF8Array","stringToUTF8","stringToUTF8OnStack","array","arr","set","func","cArgs","stack","converter","stackSave","apply","stackRestore","heapOrArray","idx","maxBytesToRead","endPtr","decode","subarray","u0","u1","u2","String","fromCharCode","ch","UTF8ArrayToString","Boolean","convertReturnValue","onDone","calledRun","wasmImports","d","a","dest","num","copyWithin","requestedSize","x","oldSize","maxHeapSize","cutDown","overGrownHeapSize","Math","min","max","callback","info","receiveInstance","module","cb","exports","unshift","id","clearInterval","removeRunDependency","result","instantiateStreaming","createWasm","arguments","run","doRun","postRun","preRun","setTimeout","numericArgs","every","runCaller","pop","ready","define","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","m","amdO","definition","key","o","defineProperty","enumerable","get","g","globalThis","Function","hmd","create","children","Error","obj","prop","prototype","hasOwnProperty","call","scriptUrl","scripts","getElementsByTagName","test","p","onmessage","event","distMatArray","n","methodCode","data","async","distmat","method","wasmUrl","URL","wasmPath","substring","wasmInstance","locateFile","printErr","_","error","getDendrogramWasm","cwrap","bytesForDistMat","BYTES_PER_ELEMENT","dataPtr","_malloc","matHeap","bytesForMergeArray","mergePtr","mergeHeap","bytesForHeightsArray","heightsPtr","heightsHeap","mergeResult","byteOffset","heightsResult","slice","mergeRow1","mergeRow2","_free","getClustersFromDistMatWasm","clusterMatrix","postMessage"],"sourceRoot":""}
package/dist/778.js CHANGED
@@ -1,2 +1,2 @@
1
1
  var peptides;(()=>{"use strict";var e,t,r={3778:(e,t,r)=>{var n=r(6066);const o=e=>null==e;var a=r(7114),s=r(8774);onmessage=async e=>{const{values:t,startIdx:r,endIdx:i,sampleLength:l,fnNames:c,opts:p,weights:h,aggregationMethod:f}=e.data;try{let e=new Float32Array(l);const u=i-r,g=function(e,t){return e===n.G.MANHATTAN?e=>e.reduce(((e,r,n)=>e+r*t[n]),0):e=>{const r=e.reduce(((e,r,n)=>e+(r*t[n])**2),0);return Math.sqrt(r)}}(f,h);t.forEach(((e,r)=>{if((0,a.lW)(c[r]))for(let n=0;n<e.length;++n)o(e[n])||(t[r][n]=new s.A(t[r][n]._data,t[r][n]._length))}));let v=0;const d=Math.floor(u/l),w=new Array(c.length).fill(null).map(((e,t)=>new a.t$(c[t]).getMeasure(p[t]))),m=t[0].length-2-Math.floor(Math.sqrt(-8*r+4*t[0].length*(t[0].length-1)-7)/2-.5),b=r-t[0].length*m+Math.floor((m+1)*(m+2)/2);let y=m,x=b,M=0;for(;v<u&&M<l;){const r=w.map(((e,r)=>o(t[r][y])||o(t[r][x])?1:e(t[r][y],t[r][x]))),n=1===r.length?r[0]:g(r);for(e[M]=n,M++,v+=d,x+=d;x>=t[0].length&&v<u;)y++,x=y+1+(x-t[0].length)}M<l&&(e=e.slice(0,M)),postMessage({distance:e})}catch(e){postMessage({error:e})}}}},n={};function o(e){var t=n[e];if(void 0!==t)return t.exports;var a=n[e]={exports:{}};return r[e](a,a.exports,o),a.exports}o.m=r,o.x=()=>{var e=o.O(void 0,[501],(()=>o(3778)));return o.O(e)},e=[],o.O=(t,r,n,a)=>{if(!r){var s=1/0;for(p=0;p<e.length;p++){for(var[r,n,a]=e[p],i=!0,l=0;l<r.length;l++)(!1&a||s>=a)&&Object.keys(o.O).every((e=>o.O[e](r[l])))?r.splice(l--,1):(i=!1,a<s&&(s=a));if(i){e.splice(p--,1);var c=n();void 0!==c&&(t=c)}}return t}a=a||0;for(var p=e.length;p>0&&e[p-1][2]>a;p--)e[p]=e[p-1];e[p]=[r,n,a]},o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce(((t,r)=>(o.f[r](e,t),t)),[])),o.u=e=>e+".js",o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e;o.g.importScripts&&(e=o.g.location+"");var t=o.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");if(r.length)for(var n=r.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=r[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=e})(),(()=>{var e={778:1};o.f.i=(t,r)=>{e[t]||importScripts(o.p+o.u(t))};var t=self.webpackChunkpeptides=self.webpackChunkpeptides||[],r=t.push.bind(t);t.push=t=>{var[n,a,s]=t;for(var i in a)o.o(a,i)&&(o.m[i]=a[i]);for(s&&s(o);n.length;)e[n.pop()]=1;r(t)}})(),t=o.x,o.x=()=>o.e(501).then(t);var a=o.x();peptides=a})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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OUUsS0FBSzZFLEdBRTNGLENBSUQsSUFBS0wsRUFBVyxNQUFNLElBQUlTLE1BQU0seURBQ2hDVCxFQUFZQSxFQUFVVSxRQUFRLE9BQVEsSUFBSUEsUUFBUSxRQUFTLElBQUlBLFFBQVEsWUFBYSxLQUNwRnZELEVBQW9Cd0QsRUFBSVgsQyxXQ2R4QixJQUFJWSxFQUFrQixDQUNyQixJQUFLLEdBZ0JOekQsRUFBb0I2QixFQUFFeEQsRUFBSSxDQUFDeUQsRUFBU0csS0FFL0J3QixFQUFnQjNCLElBRWxCZ0IsY0FBYzlDLEVBQW9Cd0QsRUFBSXhELEVBQW9Ca0MsRUFBRUosR0FFOUQsRUFHRCxJQUFJNEIsRUFBcUJDLEtBQTJCLHFCQUFJQSxLQUEyQixzQkFBSyxHQUNwRkMsRUFBNkJGLEVBQW1CRyxLQUFLQyxLQUFLSixHQUM5REEsRUFBbUJHLEtBdkJDMUcsSUFDbkIsSUFBS3dELEVBQVVvRCxFQUFhQyxHQUFXN0csRUFDdkMsSUFBSSxJQUFJOEMsS0FBWThELEVBQ2hCL0QsRUFBb0J5QixFQUFFc0MsRUFBYTlELEtBQ3JDRCxFQUFvQk8sRUFBRU4sR0FBWThELEVBQVk5RCxJQUloRCxJQURHK0QsR0FBU0EsRUFBUWhFLEdBQ2RXLEVBQVNyQyxRQUNkbUYsRUFBZ0I5QyxFQUFTc0QsT0FBUyxFQUNuQ0wsRUFBMkJ6RyxFQUFLLEMsS1ZuQjdCZCxFQUFPMkQsRUFBb0J6RCxFQUMvQnlELEVBQW9CekQsRUFBSSxJQUNoQnlELEVBQW9CSCxFQUFFLEtBQUtxRSxLQUFLN0gsR1dEeEMsSUFBSW1FLEVBQXNCUixFQUFvQnpELEkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvY2h1bmsgbG9hZGVkIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9zdGFydHVwIGNodW5rIGRlcGVuZGVuY2llcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9kaXN0YW5jZS1tYXRyaXgvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvZGlzdGFuY2UtbWF0cml4L3NwYXJzZS1tYXRyaXgtdGhyZXNob2xkLXdvcmtlci5qcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2Vuc3VyZSBjaHVuayIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgY2h1bmsgZmlsZW5hbWUiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9pbXBvcnRTY3JpcHRzIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBkZWZlcnJlZCA9IFtdO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5PID0gKHJlc3VsdCwgY2h1bmtJZHMsIGZuLCBwcmlvcml0eSkgPT4ge1xuXHRpZihjaHVua0lkcykge1xuXHRcdHByaW9yaXR5ID0gcHJpb3JpdHkgfHwgMDtcblx0XHRmb3IodmFyIGkgPSBkZWZlcnJlZC5sZW5ndGg7IGkgPiAwICYmIGRlZmVycmVkW2kgLSAxXVsyXSA+IHByaW9yaXR5OyBpLS0pIGRlZmVycmVkW2ldID0gZGVmZXJyZWRbaSAtIDFdO1xuXHRcdGRlZmVycmVkW2ldID0gW2NodW5rSWRzLCBmbiwgcHJpb3JpdHldO1xuXHRcdHJldHVybjtcblx0fVxuXHR2YXIgbm90RnVsZmlsbGVkID0gSW5maW5pdHk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZGVmZXJyZWQubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgW2NodW5rSWRzLCBmbiwgcHJpb3JpdHldID0gZGVmZXJyZWRbaV07XG5cdFx0dmFyIGZ1bGZpbGxlZCA9IHRydWU7XG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBjaHVua0lkcy5sZW5ndGg7IGorKykge1xuXHRcdFx0aWYgKChwcmlvcml0eSAmIDEgPT09IDAgfHwgbm90RnVsZmlsbGVkID49IHByaW9yaXR5KSAmJiBPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLk8pLmV2ZXJ5KChrZXkpID0+IChfX3dlYnBhY2tfcmVxdWlyZV9fLk9ba2V5XShjaHVua0lkc1tqXSkpKSkge1xuXHRcdFx0XHRjaHVua0lkcy5zcGxpY2Uoai0tLCAxKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGxlZCA9IGZhbHNlO1xuXHRcdFx0XHRpZihwcmlvcml0eSA8IG5vdEZ1bGZpbGxlZCkgbm90RnVsZmlsbGVkID0gcHJpb3JpdHk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmKGZ1bGZpbGxlZCkge1xuXHRcdFx0ZGVmZXJyZWQuc3BsaWNlKGktLSwgMSlcblx0XHRcdHZhciByID0gZm4oKTtcblx0XHRcdGlmIChyICE9PSB1bmRlZmluZWQpIHJlc3VsdCA9IHI7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59OyIsInZhciBuZXh0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy54O1xuX193ZWJwYWNrX3JlcXVpcmVfXy54ID0gKCkgPT4ge1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy5lKDUwMSkudGhlbihuZXh0KTtcbn07IiwiaW1wb3J0IHsgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMgfSBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCBjb25zdCBpc05pbCA9ICh4KSA9PiB4ID09PSBudWxsIHx8IHggPT09IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRTbWFsbGVyKGRpc3RhbmNlc0FyLCBpbmRleGVzLCBudW0sIGluZGV4KSB7XG4gICAgaWYgKG51bSA+IGRpc3RhbmNlc0FyW2Rpc3RhbmNlc0FyLmxlbmd0aCAtIDFdKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgbmV3UG9zaXRpb24gPSBkaXN0YW5jZXNBci5maW5kSW5kZXgoKHYpID0+IG51bSA8IHYpO1xuICAgIGRpc3RhbmNlc0FyLnBvcCgpO1xuICAgIGRpc3RhbmNlc0FyLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgbnVtKTtcbiAgICBpbmRleGVzLnBvcCgpO1xuICAgIGluZGV4ZXMuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBpbmRleCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGFyZ2VyKGRpc3RhbmNlc0FyLCBpbmRleGVzLCBudW0sIGluZGV4KSB7XG4gICAgaWYgKG51bSA8IGRpc3RhbmNlc0FyW2Rpc3RhbmNlc0FyLmxlbmd0aCAtIDFdKVxuICAgICAgICByZXR1cm47XG4gICAgY29uc3QgbmV3UG9zaXRpb24gPSBkaXN0YW5jZXNBci5maW5kSW5kZXgoKHYpID0+IG51bSA+IHYpO1xuICAgIGRpc3RhbmNlc0FyLnBvcCgpO1xuICAgIGRpc3RhbmNlc0FyLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgbnVtKTtcbiAgICBpbmRleGVzLnBvcCgpO1xuICAgIGluZGV4ZXMuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBpbmRleCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWdncmVnYXRpb25GdW5jdGlvbihhZ2dyZWdhdGlvbk1ldGhvZCwgd2VpZ2h0cykge1xuICAgIHN3aXRjaCAoYWdncmVnYXRpb25NZXRob2QpIHtcbiAgICAgICAgY2FzZSBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcy5NQU5IQVRUQU46XG4gICAgICAgICAgICByZXR1cm4gKHZzKSA9PiB2cy5yZWR1Y2UoKGFjYywgdmFsLCBpZHgpID0+IGFjYyArIHZhbCAqIHdlaWdodHNbaWR4XSwgMCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gKHZzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXVjbGlkZWFuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtID0gdnMucmVkdWNlKChhY2MsIHZhbCwgaWR4KSA9PiBhY2MgKyAodmFsICogd2VpZ2h0c1tpZHhdKSAqKiAyLCAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHN1bSk7XG4gICAgICAgICAgICB9O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRYUnBiSE11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjFkR2xzY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hQUVVGUExFVkJRVFJDTERCQ1FVRXdRaXhGUVVGRExFMUJRVTBzVTBGQlV5eERRVUZETzBGQlJUbEZMRTFCUVUwc1EwRkJReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhMUVVGTExFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NVMEZCVXl4RFFVRkRPMEZCUlM5RUxFMUJRVTBzVlVGQlZTeGhRVUZoTEVOQlFVTXNWMEZCY1VJc1JVRkJSU3hQUVVGcFFpeEZRVUZGTEVkQlFWY3NSVUZCUlN4TFFVRmhPMGxCUTJoSExFbEJRVWtzUjBGQlJ5eEhRVUZITEZkQlFWY3NRMEZCUXl4WFFVRlhMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUTBGQlF6dFJRVU42UXl4UFFVRlBPMGxCUlZRc1RVRkJUU3hYUVVGWExFZEJRVWNzVjBGQlZ5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUXpGRUxGZEJRVmNzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTnNRaXhYUVVGWExFTkJRVU1zVFVGQlRTeERRVUZETEZkQlFWY3NSVUZCUlN4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRGVFTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRMlFzVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJReXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzaERMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzV1VGQldTeERRVUZETEZkQlFYRkNMRVZCUVVVc1QwRkJhVUlzUlVGQlJTeEhRVUZYTEVWQlFVVXNTMEZCWVR0SlFVTXZSaXhKUVVGSkxFZEJRVWNzUjBGQlJ5eFhRVUZYTEVOQlFVTXNWMEZCVnl4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFTkJRVU03VVVGRGVrTXNUMEZCVHp0SlFVVlVMRTFCUVUwc1YwRkJWeXhIUVVGSExGZEJRVmNzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTXhSQ3hYUVVGWExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdTVUZEYkVJc1YwRkJWeXhEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRM2hETEU5QlFVOHNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVOa0xFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dEJRVU40UXl4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxITkNRVUZ6UWl4RFFVTndReXhwUWtGQk5FTXNSVUZCUlN4UFFVRnBRanRKUVVVdlJDeFJRVUZSTEdsQ1FVRnBRaXhGUVVGRkxFTkJRVU03VVVGRE1VSXNTMEZCU3l3d1FrRkJNRUlzUTBGQlF5eFRRVUZUTzFsQlEzWkRMRTlCUVU4c1EwRkJReXhGUVVGWkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGNrWTdXVUZEUlN4UFFVRlBMRU5CUVVNc1JVRkJXU3hGUVVGRkxFVkJRVVU3WjBKQlEzUkNMRmxCUVZrN1owSkJRMW9zVFVGQlRTeEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVNM1JTeFBRVUZQTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGVFSXNRMEZCUXl4RFFVRkRPMGxCUTA0c1EwRkJRenRCUVVOSUxFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZTBScGMzUmhibU5sUVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlFzSUVScGMzUmhibU5sUVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlJ6ZlNCbWNtOXRJQ2N1TDNSNWNHVnpKenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJR2x6VG1sc0lEMGdLSGc2SUdGdWVTa2dQVDRnZUNBOVBUMGdiblZzYkNCOGZDQjRJRDA5UFNCMWJtUmxabWx1WldRN1hHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnBibk5sY25SVGJXRnNiR1Z5S0dScGMzUmhibU5sYzBGeU9pQnVkVzFpWlhKYlhTd2dhVzVrWlhobGN6b2diblZ0WW1WeVcxMHNJRzUxYlRvZ2JuVnRZbVZ5TENCcGJtUmxlRG9nYm5WdFltVnlLU0I3WEc0Z0lHbG1JQ2h1ZFcwZ1BpQmthWE4wWVc1alpYTkJjbHRrYVhOMFlXNWpaWE5CY2k1c1pXNW5kR2d0TVYwcFhHNGdJQ0FnY21WMGRYSnVPMXh1WEc0Z0lHTnZibk4wSUc1bGQxQnZjMmwwYVc5dUlEMGdaR2x6ZEdGdVkyVnpRWEl1Wm1sdVpFbHVaR1Y0S0NoMktTQTlQaUJ1ZFcwZ1BDQjJLVHRjYmlBZ1pHbHpkR0Z1WTJWelFYSXVjRzl3S0NrN1hHNGdJR1JwYzNSaGJtTmxjMEZ5TG5Od2JHbGpaU2h1WlhkUWIzTnBkR2x2Yml3Z01Dd2diblZ0S1R0Y2JpQWdhVzVrWlhobGN5NXdiM0FvS1R0Y2JpQWdhVzVrWlhobGN5NXpjR3hwWTJVb2JtVjNVRzl6YVhScGIyNHNJREFzSUdsdVpHVjRLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHbHVjMlZ5ZEV4aGNtZGxjaWhrYVhOMFlXNWpaWE5CY2pvZ2JuVnRZbVZ5VzEwc0lHbHVaR1Y0WlhNNklHNTFiV0psY2x0ZExDQnVkVzA2SUc1MWJXSmxjaXdnYVc1a1pYZzZJRzUxYldKbGNpa2dlMXh1SUNCcFppQW9iblZ0SUR3Z1pHbHpkR0Z1WTJWelFYSmJaR2x6ZEdGdVkyVnpRWEl1YkdWdVozUm9MVEZkS1Z4dUlDQWdJSEpsZEhWeWJqdGNibHh1SUNCamIyNXpkQ0J1WlhkUWIzTnBkR2x2YmlBOUlHUnBjM1JoYm1ObGMwRnlMbVpwYm1SSmJtUmxlQ2dvZGlrZ1BUNGdiblZ0SUQ0Z2RpazdYRzRnSUdScGMzUmhibU5sYzBGeUxuQnZjQ2dwTzF4dUlDQmthWE4wWVc1alpYTkJjaTV6Y0d4cFkyVW9ibVYzVUc5emFYUnBiMjRzSURBc0lHNTFiU2s3WEc0Z0lHbHVaR1Y0WlhNdWNHOXdLQ2s3WEc0Z0lHbHVaR1Y0WlhNdWMzQnNhV05sS0c1bGQxQnZjMmwwYVc5dUxDQXdMQ0JwYm1SbGVDazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCblpYUkJaMmR5WldkaGRHbHZia1oxYm1OMGFXOXVLRnh1SUNCaFoyZHlaV2RoZEdsdmJrMWxkR2h2WkRvZ1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkN3Z2QyVnBaMmgwY3pvZ2JuVnRZbVZ5VzExY2JpazZJQ2gyWVd4MVpYTTZJRzUxYldKbGNsdGRLU0E5UGlCdWRXMWlaWElnZTF4dUlDQnpkMmwwWTJnZ0tHRm5aM0psWjJGMGFXOXVUV1YwYUc5a0tTQjdYRzRnSUNBZ1kyRnpaU0JFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtjeTVOUVU1SVFWUlVRVTQ2WEc0Z0lDQWdJQ0J5WlhSMWNtNGdLSFp6T2lCdWRXMWlaWEpiWFNrZ1BUNGdkbk11Y21Wa2RXTmxLQ2hoWTJNc0lIWmhiQ3dnYVdSNEtTQTlQaUJoWTJNZ0t5QjJZV3dnS2lCM1pXbG5hSFJ6VzJsa2VGMHNJREFwTzF4dUlDQWdJR1JsWm1GMWJIUTZYRzRnSUNBZ0lDQnlaWFIxY200Z0tIWnpPaUJ1ZFcxaVpYSmJYU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQXZMeUJsZFdOc2FXUmxZVzVjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjM1Z0SUQwZ2RuTXVjbVZrZFdObEtDaGhZMk1zSUhaaGJDd2dhV1I0S1NBOVBpQmhZMk1nS3lBb2RtRnNJQ29nZDJWcFoyaDBjMXRwWkhoZEtTQXFLaUF5TENBd0tUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlFMWhkR2d1YzNGeWRDaHpkVzBwTzF4dUlDQWdJQ0FnZlR0Y2JpQWdmVnh1ZlZ4dUlsMTkiLCJpbXBvcnQgeyBnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uLCBpc05pbCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgTWVhc3VyZSwgaXNCaXRBcnJheU1ldHJpYyB9IGZyb20gJy4uL3R5cGVkLW1ldHJpY3MnO1xuaW1wb3J0IEJpdEFycmF5IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL2JpdC1hcnJheSc7XG5vbm1lc3NhZ2UgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB7IHZhbHVlcywgc3RhcnRJZHgsIGVuZElkeCwgc2FtcGxlTGVuZ3RoLCBmbk5hbWVzLCBvcHRzLCB3ZWlnaHRzLCBhZ2dyZWdhdGlvbk1ldGhvZCB9ID0gZXZlbnQuZGF0YTtcbiAgICB0cnkge1xuICAgICAgICAvLyBpZiAoc3RhcnRJZHggIT0gLTEpXG4gICAgICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBpbiBzcGFyc2UgdGhyZXNob2xkIHdvcmtlcicpOyAvLyBUT0RPOiByZW1vdmUgdGhpcyBsaW5lXG4gICAgICAgIGxldCBkaXN0YW5jZXMgPSBuZXcgRmxvYXQzMkFycmF5KHNhbXBsZUxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGNodW5rU2l6ZSA9IGVuZElkeCAtIHN0YXJ0SWR4O1xuICAgICAgICBjb25zdCBhZ2dyZWdhdGUgPSBnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uKGFnZ3JlZ2F0aW9uTWV0aG9kLCB3ZWlnaHRzKTtcbiAgICAgICAgdmFsdWVzLmZvckVhY2goKHYsIGNvbElkeCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzQml0QXJyYXlNZXRyaWMoZm5OYW1lc1tjb2xJZHhdKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdi5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOaWwodltpXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2NvbElkeF1baV0gPSBuZXcgQml0QXJyYXkodmFsdWVzW2NvbElkeF1baV0uX2RhdGEsIHZhbHVlc1tjb2xJZHhdW2ldLl9sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjbnQgPSAwO1xuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSBNYXRoLmZsb29yKGNodW5rU2l6ZSAvIHNhbXBsZUxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlRm5zID0gbmV3IEFycmF5KGZuTmFtZXMubGVuZ3RoKS5maWxsKG51bGwpLm1hcCgoXywgaSkgPT4gbmV3IE1lYXN1cmUoZm5OYW1lc1tpXSkuZ2V0TWVhc3VyZShvcHRzW2ldKSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0Um93ID0gdmFsdWVzWzBdLmxlbmd0aCAtIDIgLSBNYXRoLmZsb29yKE1hdGguc3FydCgtOCAqIHN0YXJ0SWR4ICsgNCAqIHZhbHVlc1swXS5sZW5ndGggKiAodmFsdWVzWzBdLmxlbmd0aCAtIDEpIC0gNykgLyAyIC0gMC41KTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb2wgPSBzdGFydElkeCAtIHZhbHVlc1swXS5sZW5ndGggKiBzdGFydFJvdyArIE1hdGguZmxvb3IoKHN0YXJ0Um93ICsgMSkgKiAoc3RhcnRSb3cgKyAyKSAvIDIpO1xuICAgICAgICBsZXQgbWkgPSBzdGFydFJvdztcbiAgICAgICAgbGV0IG1qID0gc3RhcnRDb2w7XG4gICAgICAgIGxldCBkaXN0YW5jZUFycmF5Q291bnRlciA9IDA7XG4gICAgICAgIHdoaWxlIChjbnQgPCBjaHVua1NpemUgJiYgZGlzdGFuY2VBcnJheUNvdW50ZXIgPCBzYW1wbGVMZW5ndGgpIHtcbiAgICAgICAgICAgIC8vY29uc3QgdmFsdWUgPSBzZXExTGlzdFttaV0gJiYgc2VxMUxpc3RbbWpdID8gaGFtbWluZyhzZXExTGlzdFttaV0sIHNlcTFMaXN0W21qXSkgOiAwO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VWYWx1ZXMgPSBkaXN0YW5jZUZucy5tYXAoKGZuLCBpZHgpID0+ICFpc05pbCh2YWx1ZXNbaWR4XVttaV0pICYmICFpc05pbCh2YWx1ZXNbaWR4XVttal0pID9cbiAgICAgICAgICAgICAgICBmbih2YWx1ZXNbaWR4XVttaV0sIHZhbHVlc1tpZHhdW21qXSkgOiAxKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGlzdGFuY2VWYWx1ZXMubGVuZ3RoID09PSAxID8gZGlzdGFuY2VWYWx1ZXNbMF0gOiBhZ2dyZWdhdGUoZGlzdGFuY2VWYWx1ZXMpO1xuICAgICAgICAgICAgZGlzdGFuY2VzW2Rpc3RhbmNlQXJyYXlDb3VudGVyXSA9IHZhbHVlO1xuICAgICAgICAgICAgZGlzdGFuY2VBcnJheUNvdW50ZXIrKztcbiAgICAgICAgICAgIC8vIGNvbnN0IGN1cnJlbnRJbmNyZW1lbnQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBpbmNyZW1lbnQpICsgMVxuICAgICAgICAgICAgY250ICs9IGluY3JlbWVudDtcbiAgICAgICAgICAgIG1qICs9IGluY3JlbWVudDtcbiAgICAgICAgICAgIHdoaWxlIChtaiA+PSB2YWx1ZXNbMF0ubGVuZ3RoICYmIGNudCA8IGNodW5rU2l6ZSkge1xuICAgICAgICAgICAgICAgIG1pKys7XG4gICAgICAgICAgICAgICAgbWogPSBtaSArIDEgKyAobWogLSB2YWx1ZXNbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzdGFuY2VBcnJheUNvdW50ZXIgPCBzYW1wbGVMZW5ndGgpXG4gICAgICAgICAgICBkaXN0YW5jZXMgPSBkaXN0YW5jZXMuc2xpY2UoMCwgZGlzdGFuY2VBcnJheUNvdW50ZXIpO1xuICAgICAgICBwb3N0TWVzc2FnZSh7IGRpc3RhbmNlOiBkaXN0YW5jZXMgfSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHBvc3RNZXNzYWdlKHsgZXJyb3I6IGUgfSk7XG4gICAgfVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMzQmhjbk5sTFcxaGRISnBlQzEwYUhKbGMyaHZiR1F0ZDI5eWEyVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaWMzQmhjbk5sTFcxaGRISnBlQzEwYUhKbGMyaHZiR1F0ZDI5eWEyVnlMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFOUJRVThzUlVGQlF5eHpRa0ZCYzBJc1JVRkJSU3hMUVVGTExFVkJRVU1zVFVGQlRTeFRRVUZUTEVOQlFVTTdRVUZEZEVRc1QwRkJUeXhGUVVGbExFOUJRVThzUlVGQlJTeG5Ra0ZCWjBJc1JVRkJReXhOUVVGTkxHdENRVUZyUWl4RFFVRkRPMEZCUTNwRkxFOUJRVThzVVVGQlVTeE5RVUZOTEhsRFFVRjVReXhEUVVGRE8wRkJSUzlFTEZOQlFWTXNSMEZCUnl4TFFVRkxMRVZCUVVVc1MwRkJTeXhGUVVGRkxFVkJRVVU3U1VGRE1VSXNUVUZCVFN4RlFVRkRMRTFCUVUwc1JVRkJSU3hSUVVGUkxFVkJRVVVzVFVGQlRTeEZRVUZGTEZsQlFWa3NSVUZCUlN4UFFVRlBMRVZCUVVVc1NVRkJTU3hGUVVGRkxFOUJRVThzUlVGQlJTeHBRa0ZCYVVJc1JVRkJReXhIUVVkc1FpeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRPMGxCUTJ4R0xFbEJRVWtzUTBGQlF6dFJRVU5JTEhOQ1FVRnpRanRSUVVOMFFpeHRSa0ZCYlVZN1VVRkRia1lzU1VGQlNTeFRRVUZUTEVkQlFXbENMRWxCUVVrc1dVRkJXU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzFGQlF6ZEVMRTFCUVUwc1UwRkJVeXhIUVVGSExFMUJRVTBzUjBGQlJ5eFJRVUZSTEVOQlFVTTdVVUZEY0VNc1RVRkJUU3hUUVVGVExFZEJRVWNzYzBKQlFYTkNMRU5CUVVNc2FVSkJRV2xDTEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNN1VVRkZja1VzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzUlVGQlJUdFpRVU16UWl4SlFVRkpMR2RDUVVGblFpeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03WjBKQlEzUkRMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1RVRkJUU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdiMEpCUTJ4RExFbEJRVWtzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenQzUWtGQlJTeFRRVUZUTzI5Q1FVTXhRaXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hSUVVGUkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdaMEpCUTNaR0xFTkJRVU03V1VGRFNDeERRVUZETzFGQlEwZ3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRTQ3hKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEV2l4TlFVRk5MRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNSMEZCUnl4WlFVRlpMRU5CUVVNc1EwRkJRenRSUVVOMlJDeE5RVUZOTEZkQlFWY3NSMEZCUnl4SlFVRkpMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFbEJRVWtzVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGVkJRVlVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM0JJTEUxQlFVMHNVVUZCVVN4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRMmhFTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVVVGQlVTeEhRVUZITEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZETVVZc1RVRkJUU3hSUVVGUkxFZEJRVWNzVVVGQlVTeEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhSUVVGUkxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4UlFVRlJMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETVVjc1NVRkJTU3hGUVVGRkxFZEJRVWNzVVVGQlVTeERRVUZETzFGQlEyeENMRWxCUVVrc1JVRkJSU3hIUVVGSExGRkJRVkVzUTBGQlF6dFJRVU5zUWl4SlFVRkpMRzlDUVVGdlFpeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTTNRaXhQUVVGUExFZEJRVWNzUjBGQlJ5eFRRVUZUTEVsQlFVa3NiMEpCUVc5Q0xFZEJRVWNzV1VGQldTeEZRVUZGTEVOQlFVTTdXVUZET1VRc2RVWkJRWFZHTzFsQlEzWkdMRTFCUVUwc1kwRkJZeXhIUVVGSExGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU4wUnl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU0xUXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhqUVVGakxFTkJRVU1zVFVGQlRTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1kwRkJZeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1kwRkJZeXhEUVVGRExFTkJRVU03V1VGRE1VWXNVMEZCVXl4RFFVRkRMRzlDUVVGdlFpeERRVUZETEVkQlFVY3NTMEZCU3l4RFFVRkRPMWxCUTNoRExHOUNRVUZ2UWl4RlFVRkZMRU5CUVVNN1dVRkRka0lzY1VWQlFYRkZPMWxCUTNKRkxFZEJRVWNzU1VGQlJTeFRRVUZUTEVOQlFVTTdXVUZEWml4RlFVRkZMRWxCUVVVc1UwRkJVeXhEUVVGRE8xbEJRMlFzVDBGQlR5eEZRVUZGTEVsQlFVa3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzU1VGQlNTeEhRVUZITEVkQlFVY3NVMEZCVXl4RlFVRkZMRU5CUVVNN1owSkJRMnBFTEVWQlFVVXNSVUZCUlN4RFFVRkRPMmRDUVVOTUxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRaUVVONFF5eERRVUZETzFGQlEwZ3NRMEZCUXp0UlFVVkVMRWxCUVVrc2IwSkJRVzlDTEVkQlFVY3NXVUZCV1R0WlFVTnlReXhUUVVGVExFZEJRVWNzVTBGQlV5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRVZCUVVVc2IwSkJRVzlDTEVOQlFVTXNRMEZCUXp0UlFVVjJSQ3hYUVVGWExFTkJRVU1zUlVGQlF5eFJRVUZSTEVWQlFVVXNVMEZCVXl4RlFVRkRMRU5CUVVNc1EwRkJRenRKUVVOeVF5eERRVUZETzBsQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1EwRkJRenRSUVVOWUxGZEJRVmNzUTBGQlF5eEZRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRE8wbEJRekZDTEVOQlFVTTdRVUZEU0N4RFFVRkRMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2UyZGxkRUZuWjNKbFoyRjBhVzl1Um5WdVkzUnBiMjRzSUdselRtbHNmU0JtY205dElDY3VMM1YwYVd4ekp6dGNibWx0Y0c5eWRDQjdTMjV2ZDI1TlpYUnlhV056TENCTlpXRnpkWEpsTENCcGMwSnBkRUZ5Y21GNVRXVjBjbWxqZlNCbWNtOXRJQ2N1TGk5MGVYQmxaQzF0WlhSeWFXTnpKenRjYm1sdGNHOXlkQ0JDYVhSQmNuSmhlU0JtY205dElDZEFaR0YwWVdkeWIyc3RiR2xpY21GeWFXVnpMM1YwYVd4ekwzTnlZeTlpYVhRdFlYSnlZWGtuTzF4dWFXMXdiM0owSUh0RWFYTjBZVzVqWlVGblozSmxaMkYwYVc5dVRXVjBhRzlrZlNCbWNtOXRJQ2N1TDNSNWNHVnpKenRjYm05dWJXVnpjMkZuWlNBOUlHRnplVzVqSUNobGRtVnVkQ2tnUFQ0Z2UxeHVJQ0JqYjI1emRDQjdkbUZzZFdWekxDQnpkR0Z5ZEVsa2VDd2daVzVrU1dSNExDQnpZVzF3YkdWTVpXNW5kR2dzSUdadVRtRnRaWE1zSUc5d2RITXNJSGRsYVdkb2RITXNJR0ZuWjNKbFoyRjBhVzl1VFdWMGFHOWtmVHBjYmlBZ0lDQjdkbUZzZFdWek9pQkJjbkpoZVR4aGJubGJYVDRzSUhOMFlYSjBTV1I0T2lCdWRXMWlaWElzSUdWdVpFbGtlRG9nYm5WdFltVnlMRnh1SUNBZ0lDQWdjMkZ0Y0d4bFRHVnVaM1JvT2lCdWRXMWlaWElzSUdadVRtRnRaWE02SUV0dWIzZHVUV1YwY21samMxdGRMQ0J2Y0hSek9pQmhibmxiWFN4Y2JpQWdJQ0FnSUhkbGFXZG9kSE02SUc1MWJXSmxjbHRkTENCaFoyZHlaV2RoZEdsdmJrMWxkR2h2WkRvZ1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkgwZ1BTQmxkbVZ1ZEM1a1lYUmhPMXh1SUNCMGNua2dlMXh1SUNBZ0lDOHZJR2xtSUNoemRHRnlkRWxrZUNBaFBTQXRNU2xjYmlBZ0lDQXZMeUFnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWduUlhKeWIzSWdhVzRnYzNCaGNuTmxJSFJvY21WemFHOXNaQ0IzYjNKclpYSW5LVHNnTHk4Z1ZFOUVUem9nY21WdGIzWmxJSFJvYVhNZ2JHbHVaVnh1SUNBZ0lHeGxkQ0JrYVhOMFlXNWpaWE02SUVac2IyRjBNekpCY25KaGVTQTlJRzVsZHlCR2JHOWhkRE15UVhKeVlYa29jMkZ0Y0d4bFRHVnVaM1JvS1R0Y2JpQWdJQ0JqYjI1emRDQmphSFZ1YTFOcGVtVWdQU0JsYm1SSlpIZ2dMU0J6ZEdGeWRFbGtlRHRjYmlBZ0lDQmpiMjV6ZENCaFoyZHlaV2RoZEdVZ1BTQm5aWFJCWjJkeVpXZGhkR2x2YmtaMWJtTjBhVzl1S0dGblozSmxaMkYwYVc5dVRXVjBhRzlrTENCM1pXbG5hSFJ6S1R0Y2JseHVJQ0FnSUhaaGJIVmxjeTVtYjNKRllXTm9LQ2gyTENCamIyeEpaSGdwSUQwK0lIdGNiaUFnSUNBZ0lHbG1JQ2hwYzBKcGRFRnljbUY1VFdWMGNtbGpLR1p1VG1GdFpYTmJZMjlzU1dSNFhTa3BJSHRjYmlBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMkxteGxibWQwYURzZ0t5dHBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR2x6VG1sc0tIWmJhVjBwS1NCamIyNTBhVzUxWlR0Y2JpQWdJQ0FnSUNBZ0lDQjJZV3gxWlhOYlkyOXNTV1I0WFZ0cFhTQTlJRzVsZHlCQ2FYUkJjbkpoZVNoMllXeDFaWE5iWTI5c1NXUjRYVnRwWFM1ZlpHRjBZU3dnZG1Gc2RXVnpXMk52YkVsa2VGMWJhVjB1WDJ4bGJtZDBhQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5S1R0Y2JpQWdJQ0JzWlhRZ1kyNTBJRDBnTUR0Y2JpQWdJQ0JqYjI1emRDQnBibU55WlcxbGJuUWdQU0JOWVhSb0xtWnNiMjl5S0dOb2RXNXJVMmw2WlNBdklITmhiWEJzWlV4bGJtZDBhQ2s3WEc0Z0lDQWdZMjl1YzNRZ1pHbHpkR0Z1WTJWR2JuTWdQU0J1WlhjZ1FYSnlZWGtvWm01T1lXMWxjeTVzWlc1bmRHZ3BMbVpwYkd3b2JuVnNiQ2t1YldGd0tDaGZMQ0JwS1NBOVBpQnVaWGNnVFdWaGMzVnlaU2htYms1aGJXVnpXMmxkS1M1blpYUk5aV0Z6ZFhKbEtHOXdkSE5iYVYwcEtUdGNiaUFnSUNCamIyNXpkQ0J6ZEdGeWRGSnZkeUE5SUhaaGJIVmxjMXN3WFM1c1pXNW5kR2dnTFNBeUlDMGdUV0YwYUM1bWJHOXZjaWhjYmlBZ0lDQWdJRTFoZEdndWMzRnlkQ2d0T0NBcUlITjBZWEowU1dSNElDc2dOQ0FxSUhaaGJIVmxjMXN3WFM1c1pXNW5kR2dnS2lBb2RtRnNkV1Z6V3pCZExteGxibWQwYUNBdElERXBJQzBnTnlrZ0x5QXlJQzBnTUM0MUtUdGNiaUFnSUNCamIyNXpkQ0J6ZEdGeWRFTnZiQ0E5SUhOMFlYSjBTV1I0SUMwZ2RtRnNkV1Z6V3pCZExteGxibWQwYUNBcUlITjBZWEowVW05M0lDc2dUV0YwYUM1bWJHOXZjaWdvYzNSaGNuUlNiM2NnS3lBeEtTQXFJQ2h6ZEdGeWRGSnZkeUFySURJcElDOGdNaWs3WEc0Z0lDQWdiR1YwSUcxcElEMGdjM1JoY25SU2IzYzdYRzRnSUNBZ2JHVjBJRzFxSUQwZ2MzUmhjblJEYjJ3N1hHNGdJQ0FnYkdWMElHUnBjM1JoYm1ObFFYSnlZWGxEYjNWdWRHVnlJRDBnTUR0Y2JpQWdJQ0IzYUdsc1pTQW9ZMjUwSUR3Z1kyaDFibXRUYVhwbElDWW1JR1JwYzNSaGJtTmxRWEp5WVhsRGIzVnVkR1Z5SUR3Z2MyRnRjR3hsVEdWdVozUm9LU0I3WEc0Z0lDQWdJQ0F2TDJOdmJuTjBJSFpoYkhWbElEMGdjMlZ4TVV4cGMzUmJiV2xkSUNZbUlITmxjVEZNYVhOMFcyMXFYU0EvSUdoaGJXMXBibWNvYzJWeE1VeHBjM1JiYldsZExDQnpaWEV4VEdsemRGdHRhbDBwSURvZ01EdGNiaUFnSUNBZ0lHTnZibk4wSUdScGMzUmhibU5sVm1Gc2RXVnpJRDBnWkdsemRHRnVZMlZHYm5NdWJXRndLQ2htYml3Z2FXUjRLU0E5UGlBaGFYTk9hV3dvZG1Gc2RXVnpXMmxrZUYxYmJXbGRLU0FtSmlBaGFYTk9hV3dvZG1Gc2RXVnpXMmxrZUYxYmJXcGRLU0EvWEc0Z0lDQWdJQ0FnSUdadUtIWmhiSFZsYzF0cFpIaGRXMjFwWFN3Z2RtRnNkV1Z6VzJsa2VGMWJiV3BkS1NBNklERXBPMXh1SUNBZ0lDQWdZMjl1YzNRZ2RtRnNkV1VnUFNCa2FYTjBZVzVqWlZaaGJIVmxjeTVzWlc1bmRHZ2dQVDA5SURFZ1B5QmthWE4wWVc1alpWWmhiSFZsYzFzd1hTQTZJR0ZuWjNKbFoyRjBaU2hrYVhOMFlXNWpaVlpoYkhWbGN5azdYRzRnSUNBZ0lDQmthWE4wWVc1alpYTmJaR2x6ZEdGdVkyVkJjbkpoZVVOdmRXNTBaWEpkSUQwZ2RtRnNkV1U3WEc0Z0lDQWdJQ0JrYVhOMFlXNWpaVUZ5Y21GNVEyOTFiblJsY2lzck8xeHVJQ0FnSUNBZ0x5OGdZMjl1YzNRZ1kzVnljbVZ1ZEVsdVkzSmxiV1Z1ZENBOUlFMWhkR2d1Wm14dmIzSW9UV0YwYUM1eVlXNWtiMjBvS1NBcUlHbHVZM0psYldWdWRDa2dLeUF4WEc0Z0lDQWdJQ0JqYm5RclBXbHVZM0psYldWdWREdGNiaUFnSUNBZ0lHMXFLejFwYm1OeVpXMWxiblE3WEc0Z0lDQWdJQ0IzYUdsc1pTQW9iV29nUGowZ2RtRnNkV1Z6V3pCZExteGxibWQwYUNBbUppQmpiblFnUENCamFIVnVhMU5wZW1VcElIdGNiaUFnSUNBZ0lDQWdiV2tyS3p0Y2JpQWdJQ0FnSUNBZ2JXb2dQU0J0YVNBcklERWdLeUFvYldvZ0xTQjJZV3gxWlhOYk1GMHViR1Z1WjNSb0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9aR2x6ZEdGdVkyVkJjbkpoZVVOdmRXNTBaWElnUENCellXMXdiR1ZNWlc1bmRHZ3BYRzRnSUNBZ0lDQmthWE4wWVc1alpYTWdQU0JrYVhOMFlXNWpaWE11YzJ4cFkyVW9NQ3dnWkdsemRHRnVZMlZCY25KaGVVTnZkVzUwWlhJcE8xeHVYRzRnSUNBZ2NHOXpkRTFsYzNOaFoyVW9lMlJwYzNSaGJtTmxPaUJrYVhOMFlXNWpaWE45S1R0Y2JpQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJSEJ2YzNSTlpYTnpZV2RsS0h0bGNuSnZjam9nWlgwcE8xeHVJQ0I5WEc1OU8xeHVJbDE5IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4vLyB0aGUgc3RhcnR1cCBmdW5jdGlvblxuX193ZWJwYWNrX3JlcXVpcmVfXy54ID0gKCkgPT4ge1xuXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcblx0Ly8gVGhpcyBlbnRyeSBtb2R1bGUgZGVwZW5kcyBvbiBvdGhlciBsb2FkZWQgY2h1bmtzIGFuZCBleGVjdXRpb24gbmVlZCB0byBiZSBkZWxheWVkXG5cdHZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXy5PKHVuZGVmaW5lZCwgWzUwMV0sICgpID0+IChfX3dlYnBhY2tfcmVxdWlyZV9fKDM3NzgpKSlcblx0X193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18uTyhfX3dlYnBhY2tfZXhwb3J0c19fKTtcblx0cmV0dXJuIF9fd2VicGFja19leHBvcnRzX187XG59O1xuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmYgPSB7fTtcbi8vIFRoaXMgZmlsZSBjb250YWlucyBvbmx5IHRoZSBlbnRyeSBjaHVuay5cbi8vIFRoZSBjaHVuayBsb2FkaW5nIGZ1bmN0aW9uIGZvciBhZGRpdGlvbmFsIGNodW5rc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5lID0gKGNodW5rSWQpID0+IHtcblx0cmV0dXJuIFByb21pc2UuYWxsKE9iamVjdC5rZXlzKF9fd2VicGFja19yZXF1aXJlX18uZikucmVkdWNlKChwcm9taXNlcywga2V5KSA9PiB7XG5cdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5mW2tleV0oY2h1bmtJZCwgcHJvbWlzZXMpO1xuXHRcdHJldHVybiBwcm9taXNlcztcblx0fSwgW10pKTtcbn07IiwiLy8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYXN5bmMgY2h1bmtzIGFuZCBzaWJsaW5nIGNodW5rcyBmb3IgdGhlIGVudHJ5cG9pbnRcbl9fd2VicGFja19yZXF1aXJlX18udSA9IChjaHVua0lkKSA9PiB7XG5cdC8vIHJldHVybiB1cmwgZm9yIGZpbGVuYW1lcyBiYXNlZCBvbiB0ZW1wbGF0ZVxuXHRyZXR1cm4gXCJcIiArIGNodW5rSWQgKyBcIi5qc1wiO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICghc2NyaXB0VXJsIHx8ICEvXmh0dHAocz8pOi8udGVzdChzY3JpcHRVcmwpKSkgc2NyaXB0VXJsID0gc2NyaXB0c1tpLS1dLnNyYztcblx0XHR9XG5cdH1cbn1cbi8vIFdoZW4gc3VwcG9ydGluZyBicm93c2VycyB3aGVyZSBhbiBhdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIHlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0LnB1YmxpY1BhdGggbWFudWFsbHkgdmlhIGNvbmZpZ3VyYXRpb25cbi8vIG9yIHBhc3MgYW4gZW1wdHkgc3RyaW5nIChcIlwiKSBhbmQgc2V0IHRoZSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyB2YXJpYWJsZSBmcm9tIHlvdXIgY29kZSB0byB1c2UgeW91ciBvd24gbG9naWMuXG5pZiAoIXNjcmlwdFVybCkgdGhyb3cgbmV3IEVycm9yKFwiQXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIik7XG5zY3JpcHRVcmwgPSBzY3JpcHRVcmwucmVwbGFjZSgvIy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcPy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcL1teXFwvXSskLywgXCIvXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gc2NyaXB0VXJsOyIsIi8vIG5vIGJhc2VVUklcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBjaHVua3Ncbi8vIFwiMVwiIG1lYW5zIFwiYWxyZWFkeSBsb2FkZWRcIlxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0Nzc4OiAxXG59O1xuXG4vLyBpbXBvcnRTY3JpcHRzIGNodW5rIGxvYWRpbmdcbnZhciBpbnN0YWxsQ2h1bmsgPSAoZGF0YSkgPT4ge1xuXHR2YXIgW2NodW5rSWRzLCBtb3JlTW9kdWxlcywgcnVudGltZV0gPSBkYXRhO1xuXHRmb3IodmFyIG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHtcblx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubVttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07XG5cdFx0fVxuXHR9XG5cdGlmKHJ1bnRpbWUpIHJ1bnRpbWUoX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cdHdoaWxlKGNodW5rSWRzLmxlbmd0aClcblx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZHMucG9wKCldID0gMTtcblx0cGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24oZGF0YSk7XG59O1xuX193ZWJwYWNrX3JlcXVpcmVfXy5mLmkgPSAoY2h1bmtJZCwgcHJvbWlzZXMpID0+IHtcblx0Ly8gXCIxXCIgaXMgdGhlIHNpZ25hbCBmb3IgXCJhbHJlYWR5IGxvYWRlZFwiXG5cdGlmKCFpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtcblx0XHRpZih0cnVlKSB7IC8vIGFsbCBjaHVua3MgaGF2ZSBKU1xuXHRcdFx0aW1wb3J0U2NyaXB0cyhfX3dlYnBhY2tfcmVxdWlyZV9fLnAgKyBfX3dlYnBhY2tfcmVxdWlyZV9fLnUoY2h1bmtJZCkpO1xuXHRcdH1cblx0fVxufTtcblxudmFyIGNodW5rTG9hZGluZ0dsb2JhbCA9IHNlbGZbXCJ3ZWJwYWNrQ2h1bmtwZXB0aWRlc1wiXSA9IHNlbGZbXCJ3ZWJwYWNrQ2h1bmtwZXB0aWRlc1wiXSB8fCBbXTtcbnZhciBwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbiA9IGNodW5rTG9hZGluZ0dsb2JhbC5wdXNoLmJpbmQoY2h1bmtMb2FkaW5nR2xvYmFsKTtcbmNodW5rTG9hZGluZ0dsb2JhbC5wdXNoID0gaW5zdGFsbENodW5rO1xuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0IiwiLy8gcnVuIHN0YXJ0dXBcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXy54KCk7XG4iXSwibmFtZXMiOlsiZGVmZXJyZWQiLCJuZXh0IiwiaXNOaWwiLCJ4Iiwib25tZXNzYWdlIiwiYXN5bmMiLCJldmVudCIsInZhbHVlcyIsInN0YXJ0SWR4IiwiZW5kSWR4Iiwic2FtcGxlTGVuZ3RoIiwiZm5OYW1lcyIsIm9wdHMiLCJ3ZWlnaHRzIiwiYWdncmVnYXRpb25NZXRob2QiLCJkYXRhIiwiZGlzdGFuY2VzIiwiRmxvYXQzMkFycmF5IiwiY2h1bmtTaXplIiwiYWdncmVnYXRlIiwiTUFOSEFUVEFOIiwidnMiLCJyZWR1Y2UiLCJhY2MiLCJ2YWwiLCJpZHgiLCJzdW0iLCJNYXRoIiwic3FydCIsImdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24iLCJmb3JFYWNoIiwidiIsImNvbElkeCIsImkiLCJsZW5ndGgiLCJfZGF0YSIsIl9sZW5ndGgiLCJjbnQiLCJpbmNyZW1lbnQiLCJmbG9vciIsImRpc3RhbmNlRm5zIiwiQXJyYXkiLCJmaWxsIiwibWFwIiwiXyIsImdldE1lYXN1cmUiLCJzdGFydFJvdyIsInN0YXJ0Q29sIiwibWkiLCJtaiIsImRpc3RhbmNlQXJyYXlDb3VudGVyIiwiZGlzdGFuY2VWYWx1ZXMiLCJmbiIsInZhbHVlIiwic2xpY2UiLCJwb3N0TWVzc2FnZSIsImRpc3RhbmNlIiwiZSIsImVycm9yIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwidW5kZWZpbmVkIiwiZXhwb3J0cyIsIm1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJtIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsIk8iLCJyZXN1bHQiLCJjaHVua0lkcyIsInByaW9yaXR5Iiwibm90RnVsZmlsbGVkIiwiSW5maW5pdHkiLCJmdWxmaWxsZWQiLCJqIiwiT2JqZWN0Iiwia2V5cyIsImV2ZXJ5Iiwia2V5Iiwic3BsaWNlIiwiciIsImQiLCJkZWZpbml0aW9uIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImYiLCJjaHVua0lkIiwiUHJvbWlzZSIsImFsbCIsInByb21pc2VzIiwidSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwid2luZG93Iiwib2JqIiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNjcmlwdFVybCIsImltcG9ydFNjcmlwdHMiLCJsb2NhdGlvbiIsImRvY3VtZW50IiwiY3VycmVudFNjcmlwdCIsInNyYyIsInNjcmlwdHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInRlc3QiLCJFcnJvciIsInJlcGxhY2UiLCJwIiwiaW5zdGFsbGVkQ2h1bmtzIiwiY2h1bmtMb2FkaW5nR2xvYmFsIiwic2VsZiIsInBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uIiwicHVzaCIsImJpbmQiLCJtb3JlTW9kdWxlcyIsInJ1bnRpbWUiLCJwb3AiLCJ0aGVuIl0sInNvdXJjZVJvb3QiOiIifQ==
2
+ //# sourceMappingURL=778.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"778.js","mappings":"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","sources":["webpack://peptides/webpack/runtime/chunk loaded","webpack://peptides/webpack/runtime/startup chunk dependencies","webpack://peptides/./node_modules/@datagrok-libraries/ml/src/distance-matrix/utils.js","webpack://peptides/./node_modules/@datagrok-libraries/ml/src/distance-matrix/sparse-matrix-threshold-worker.js","webpack://peptides/webpack/bootstrap","webpack://peptides/webpack/runtime/define property getters","webpack://peptides/webpack/runtime/ensure chunk","webpack://peptides/webpack/runtime/get javascript chunk filename","webpack://peptides/webpack/runtime/global","webpack://peptides/webpack/runtime/hasOwnProperty shorthand","webpack://peptides/webpack/runtime/publicPath","webpack://peptides/webpack/runtime/importScripts chunk loading","webpack://peptides/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn __webpack_require__.e(501).then(next);\n};","import { DistanceAggregationMethods } from './types';\nexport const isNil = (x) => x === null || x === undefined;\nexport function insertSmaller(distancesAr, indexes, num, index) {\n if (num > distancesAr[distancesAr.length - 1])\n return;\n const newPosition = distancesAr.findIndex((v) => num < v);\n distancesAr.pop();\n distancesAr.splice(newPosition, 0, num);\n indexes.pop();\n indexes.splice(newPosition, 0, index);\n}\nexport function insertLarger(distancesAr, indexes, num, index) {\n if (num < distancesAr[distancesAr.length - 1])\n return;\n const newPosition = distancesAr.findIndex((v) => num > v);\n distancesAr.pop();\n distancesAr.splice(newPosition, 0, num);\n indexes.pop();\n indexes.splice(newPosition, 0, index);\n}\nexport function getAggregationFunction(aggregationMethod, weights) {\n switch (aggregationMethod) {\n case DistanceAggregationMethods.MANHATTAN:\n return (vs) => vs.reduce((acc, val, idx) => acc + val * weights[idx], 0);\n default:\n return (vs) => {\n // euclidean\n const sum = vs.reduce((acc, val, idx) => acc + (val * weights[idx]) ** 2, 0);\n return Math.sqrt(sum);\n };\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRCLDBCQUEwQixFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRTlFLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDO0FBRS9ELE1BQU0sVUFBVSxhQUFhLENBQUMsV0FBcUIsRUFBRSxPQUFpQixFQUFFLEdBQVcsRUFBRSxLQUFhO0lBQ2hHLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQztRQUN6QyxPQUFPO0lBRVQsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNsQixXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLFdBQXFCLEVBQUUsT0FBaUIsRUFBRSxHQUFXLEVBQUUsS0FBYTtJQUMvRixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUM7UUFDekMsT0FBTztJQUVULE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNkLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxpQkFBNEMsRUFBRSxPQUFpQjtJQUUvRCxRQUFRLGlCQUFpQixFQUFFLENBQUM7UUFDMUIsS0FBSywwQkFBMEIsQ0FBQyxTQUFTO1lBQ3ZDLE9BQU8sQ0FBQyxFQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckY7WUFDRSxPQUFPLENBQUMsRUFBWSxFQUFFLEVBQUU7Z0JBQ3RCLFlBQVk7Z0JBQ1osTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM3RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxDQUFDO0lBQ04sQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Rpc3RhbmNlQWdncmVnYXRpb25NZXRob2QsIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGlzTmlsID0gKHg6IGFueSkgPT4geCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRTbWFsbGVyKGRpc3RhbmNlc0FyOiBudW1iZXJbXSwgaW5kZXhlczogbnVtYmVyW10sIG51bTogbnVtYmVyLCBpbmRleDogbnVtYmVyKSB7XG4gIGlmIChudW0gPiBkaXN0YW5jZXNBcltkaXN0YW5jZXNBci5sZW5ndGgtMV0pXG4gICAgcmV0dXJuO1xuXG4gIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlzdGFuY2VzQXIuZmluZEluZGV4KCh2KSA9PiBudW0gPCB2KTtcbiAgZGlzdGFuY2VzQXIucG9wKCk7XG4gIGRpc3RhbmNlc0FyLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgbnVtKTtcbiAgaW5kZXhlcy5wb3AoKTtcbiAgaW5kZXhlcy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExhcmdlcihkaXN0YW5jZXNBcjogbnVtYmVyW10sIGluZGV4ZXM6IG51bWJlcltdLCBudW06IG51bWJlciwgaW5kZXg6IG51bWJlcikge1xuICBpZiAobnVtIDwgZGlzdGFuY2VzQXJbZGlzdGFuY2VzQXIubGVuZ3RoLTFdKVxuICAgIHJldHVybjtcblxuICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpc3RhbmNlc0FyLmZpbmRJbmRleCgodikgPT4gbnVtID4gdik7XG4gIGRpc3RhbmNlc0FyLnBvcCgpO1xuICBkaXN0YW5jZXNBci5zcGxpY2UobmV3UG9zaXRpb24sIDAsIG51bSk7XG4gIGluZGV4ZXMucG9wKCk7XG4gIGluZGV4ZXMuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBpbmRleCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uKFxuICBhZ2dyZWdhdGlvbk1ldGhvZDogRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZCwgd2VpZ2h0czogbnVtYmVyW11cbik6ICh2YWx1ZXM6IG51bWJlcltdKSA9PiBudW1iZXIge1xuICBzd2l0Y2ggKGFnZ3JlZ2F0aW9uTWV0aG9kKSB7XG4gICAgY2FzZSBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcy5NQU5IQVRUQU46XG4gICAgICByZXR1cm4gKHZzOiBudW1iZXJbXSkgPT4gdnMucmVkdWNlKChhY2MsIHZhbCwgaWR4KSA9PiBhY2MgKyB2YWwgKiB3ZWlnaHRzW2lkeF0sIDApO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gKHZzOiBudW1iZXJbXSkgPT4ge1xuICAgICAgICAvLyBldWNsaWRlYW5cbiAgICAgICAgY29uc3Qgc3VtID0gdnMucmVkdWNlKChhY2MsIHZhbCwgaWR4KSA9PiBhY2MgKyAodmFsICogd2VpZ2h0c1tpZHhdKSAqKiAyLCAwKTtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydChzdW0pO1xuICAgICAgfTtcbiAgfVxufVxuIl19","import { getAggregationFunction, isNil } from './utils';\nimport { Measure, isBitArrayMetric } from '../typed-metrics';\nimport BitArray from '@datagrok-libraries/utils/src/bit-array';\nonmessage = async (event) => {\n const { values, startIdx, endIdx, sampleLength, fnNames, opts, weights, aggregationMethod } = event.data;\n try {\n // if (startIdx != -1)\n // throw new Error('Error in sparse threshold worker'); // TODO: remove this line\n let distances = new Float32Array(sampleLength);\n const chunkSize = endIdx - startIdx;\n const aggregate = getAggregationFunction(aggregationMethod, weights);\n values.forEach((v, colIdx) => {\n if (isBitArrayMetric(fnNames[colIdx])) {\n for (let i = 0; i < v.length; ++i) {\n if (isNil(v[i]))\n continue;\n values[colIdx][i] = new BitArray(values[colIdx][i]._data, values[colIdx][i]._length);\n }\n }\n });\n let cnt = 0;\n const increment = Math.floor(chunkSize / sampleLength);\n const distanceFns = new Array(fnNames.length).fill(null).map((_, i) => new Measure(fnNames[i]).getMeasure(opts[i]));\n const startRow = values[0].length - 2 - Math.floor(Math.sqrt(-8 * startIdx + 4 * values[0].length * (values[0].length - 1) - 7) / 2 - 0.5);\n const startCol = startIdx - values[0].length * startRow + Math.floor((startRow + 1) * (startRow + 2) / 2);\n let mi = startRow;\n let mj = startCol;\n let distanceArrayCounter = 0;\n while (cnt < chunkSize && distanceArrayCounter < sampleLength) {\n //const value = seq1List[mi] && seq1List[mj] ? hamming(seq1List[mi], seq1List[mj]) : 0;\n const distanceValues = distanceFns.map((fn, idx) => !isNil(values[idx][mi]) && !isNil(values[idx][mj]) ?\n fn(values[idx][mi], values[idx][mj]) : 1);\n const value = distanceValues.length === 1 ? distanceValues[0] : aggregate(distanceValues);\n distances[distanceArrayCounter] = value;\n distanceArrayCounter++;\n // const currentIncrement = Math.floor(Math.random() * increment) + 1\n cnt += increment;\n mj += increment;\n while (mj >= values[0].length && cnt < chunkSize) {\n mi++;\n mj = mi + 1 + (mj - values[0].length);\n }\n }\n if (distanceArrayCounter < sampleLength)\n distances = distances.slice(0, distanceArrayCounter);\n postMessage({ distance: distances });\n }\n catch (e) {\n postMessage({ error: e });\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlLW1hdHJpeC10aHJlc2hvbGQtd29ya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3BhcnNlLW1hdHJpeC10aHJlc2hvbGQtd29ya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDdEQsT0FBTyxFQUFlLE9BQU8sRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3pFLE9BQU8sUUFBUSxNQUFNLHlDQUF5QyxDQUFDO0FBRS9ELFNBQVMsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7SUFDMUIsTUFBTSxFQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBQyxHQUdsQixLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ2xGLElBQUksQ0FBQztRQUNILHNCQUFzQjtRQUN0QixtRkFBbUY7UUFDbkYsSUFBSSxTQUFTLEdBQWlCLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdELE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDcEMsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFckUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzQixJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFBRSxTQUFT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LEVBQUUsRUFBRSxDQUFDO2dCQUNMLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksb0JBQW9CLEdBQUcsWUFBWTtZQUNyQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUV2RCxXQUFXLENBQUMsRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLFdBQVcsQ0FBQyxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldEFnZ3JlZ2F0aW9uRnVuY3Rpb24sIGlzTmlsfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7S25vd25NZXRyaWNzLCBNZWFzdXJlLCBpc0JpdEFycmF5TWV0cmljfSBmcm9tICcuLi90eXBlZC1tZXRyaWNzJztcbmltcG9ydCBCaXRBcnJheSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9iaXQtYXJyYXknO1xuaW1wb3J0IHtEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kfSBmcm9tICcuL3R5cGVzJztcbm9ubWVzc2FnZSA9IGFzeW5jIChldmVudCkgPT4ge1xuICBjb25zdCB7dmFsdWVzLCBzdGFydElkeCwgZW5kSWR4LCBzYW1wbGVMZW5ndGgsIGZuTmFtZXMsIG9wdHMsIHdlaWdodHMsIGFnZ3JlZ2F0aW9uTWV0aG9kfTpcbiAgICB7dmFsdWVzOiBBcnJheTxhbnlbXT4sIHN0YXJ0SWR4OiBudW1iZXIsIGVuZElkeDogbnVtYmVyLFxuICAgICAgc2FtcGxlTGVuZ3RoOiBudW1iZXIsIGZuTmFtZXM6IEtub3duTWV0cmljc1tdLCBvcHRzOiBhbnlbXSxcbiAgICAgIHdlaWdodHM6IG51bWJlcltdLCBhZ2dyZWdhdGlvbk1ldGhvZDogRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZH0gPSBldmVudC5kYXRhO1xuICB0cnkge1xuICAgIC8vIGlmIChzdGFydElkeCAhPSAtMSlcbiAgICAvLyAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgaW4gc3BhcnNlIHRocmVzaG9sZCB3b3JrZXInKTsgLy8gVE9ETzogcmVtb3ZlIHRoaXMgbGluZVxuICAgIGxldCBkaXN0YW5jZXM6IEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoc2FtcGxlTGVuZ3RoKTtcbiAgICBjb25zdCBjaHVua1NpemUgPSBlbmRJZHggLSBzdGFydElkeDtcbiAgICBjb25zdCBhZ2dyZWdhdGUgPSBnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uKGFnZ3JlZ2F0aW9uTWV0aG9kLCB3ZWlnaHRzKTtcblxuICAgIHZhbHVlcy5mb3JFYWNoKCh2LCBjb2xJZHgpID0+IHtcbiAgICAgIGlmIChpc0JpdEFycmF5TWV0cmljKGZuTmFtZXNbY29sSWR4XSkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgaWYgKGlzTmlsKHZbaV0pKSBjb250aW51ZTtcbiAgICAgICAgICB2YWx1ZXNbY29sSWR4XVtpXSA9IG5ldyBCaXRBcnJheSh2YWx1ZXNbY29sSWR4XVtpXS5fZGF0YSwgdmFsdWVzW2NvbElkeF1baV0uX2xlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgY250ID0gMDtcbiAgICBjb25zdCBpbmNyZW1lbnQgPSBNYXRoLmZsb29yKGNodW5rU2l6ZSAvIHNhbXBsZUxlbmd0aCk7XG4gICAgY29uc3QgZGlzdGFuY2VGbnMgPSBuZXcgQXJyYXkoZm5OYW1lcy5sZW5ndGgpLmZpbGwobnVsbCkubWFwKChfLCBpKSA9PiBuZXcgTWVhc3VyZShmbk5hbWVzW2ldKS5nZXRNZWFzdXJlKG9wdHNbaV0pKTtcbiAgICBjb25zdCBzdGFydFJvdyA9IHZhbHVlc1swXS5sZW5ndGggLSAyIC0gTWF0aC5mbG9vcihcbiAgICAgIE1hdGguc3FydCgtOCAqIHN0YXJ0SWR4ICsgNCAqIHZhbHVlc1swXS5sZW5ndGggKiAodmFsdWVzWzBdLmxlbmd0aCAtIDEpIC0gNykgLyAyIC0gMC41KTtcbiAgICBjb25zdCBzdGFydENvbCA9IHN0YXJ0SWR4IC0gdmFsdWVzWzBdLmxlbmd0aCAqIHN0YXJ0Um93ICsgTWF0aC5mbG9vcigoc3RhcnRSb3cgKyAxKSAqIChzdGFydFJvdyArIDIpIC8gMik7XG4gICAgbGV0IG1pID0gc3RhcnRSb3c7XG4gICAgbGV0IG1qID0gc3RhcnRDb2w7XG4gICAgbGV0IGRpc3RhbmNlQXJyYXlDb3VudGVyID0gMDtcbiAgICB3aGlsZSAoY250IDwgY2h1bmtTaXplICYmIGRpc3RhbmNlQXJyYXlDb3VudGVyIDwgc2FtcGxlTGVuZ3RoKSB7XG4gICAgICAvL2NvbnN0IHZhbHVlID0gc2VxMUxpc3RbbWldICYmIHNlcTFMaXN0W21qXSA/IGhhbW1pbmcoc2VxMUxpc3RbbWldLCBzZXExTGlzdFttal0pIDogMDtcbiAgICAgIGNvbnN0IGRpc3RhbmNlVmFsdWVzID0gZGlzdGFuY2VGbnMubWFwKChmbiwgaWR4KSA9PiAhaXNOaWwodmFsdWVzW2lkeF1bbWldKSAmJiAhaXNOaWwodmFsdWVzW2lkeF1bbWpdKSA/XG4gICAgICAgIGZuKHZhbHVlc1tpZHhdW21pXSwgdmFsdWVzW2lkeF1bbWpdKSA6IDEpO1xuICAgICAgY29uc3QgdmFsdWUgPSBkaXN0YW5jZVZhbHVlcy5sZW5ndGggPT09IDEgPyBkaXN0YW5jZVZhbHVlc1swXSA6IGFnZ3JlZ2F0ZShkaXN0YW5jZVZhbHVlcyk7XG4gICAgICBkaXN0YW5jZXNbZGlzdGFuY2VBcnJheUNvdW50ZXJdID0gdmFsdWU7XG4gICAgICBkaXN0YW5jZUFycmF5Q291bnRlcisrO1xuICAgICAgLy8gY29uc3QgY3VycmVudEluY3JlbWVudCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGluY3JlbWVudCkgKyAxXG4gICAgICBjbnQrPWluY3JlbWVudDtcbiAgICAgIG1qKz1pbmNyZW1lbnQ7XG4gICAgICB3aGlsZSAobWogPj0gdmFsdWVzWzBdLmxlbmd0aCAmJiBjbnQgPCBjaHVua1NpemUpIHtcbiAgICAgICAgbWkrKztcbiAgICAgICAgbWogPSBtaSArIDEgKyAobWogLSB2YWx1ZXNbMF0ubGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlzdGFuY2VBcnJheUNvdW50ZXIgPCBzYW1wbGVMZW5ndGgpXG4gICAgICBkaXN0YW5jZXMgPSBkaXN0YW5jZXMuc2xpY2UoMCwgZGlzdGFuY2VBcnJheUNvdW50ZXIpO1xuXG4gICAgcG9zdE1lc3NhZ2Uoe2Rpc3RhbmNlOiBkaXN0YW5jZXN9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHBvc3RNZXNzYWdlKHtlcnJvcjogZX0pO1xuICB9XG59O1xuIl19","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [501], () => (__webpack_require__(3778)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t778: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = self[\"webpackChunkpeptides\"] = self[\"webpackChunkpeptides\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","isNil","x","onmessage","async","event","values","startIdx","endIdx","sampleLength","fnNames","opts","weights","aggregationMethod","data","distances","Float32Array","chunkSize","aggregate","MANHATTAN","vs","reduce","acc","val","idx","sum","Math","sqrt","getAggregationFunction","forEach","v","colIdx","i","length","_data","_length","cnt","increment","floor","distanceFns","Array","fill","map","_","getMeasure","startRow","startCol","mi","mj","distanceArrayCounter","distanceValues","fn","value","slice","postMessage","distance","e","error","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","m","__webpack_exports__","O","result","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","Object","keys","every","key","splice","r","d","definition","o","defineProperty","enumerable","get","f","chunkId","Promise","all","promises","u","g","globalThis","this","Function","window","obj","prop","prototype","hasOwnProperty","call","scriptUrl","importScripts","location","document","currentScript","src","scripts","getElementsByTagName","test","Error","replace","p","installedChunks","chunkLoadingGlobal","self","parentChunkLoadingFunction","push","bind","moreModules","runtime","pop","then"],"sourceRoot":""}