@datagrok/peptides 1.17.20 → 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/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Peptides changelog
2
2
 
3
+ ## 1.17.22 (2024-07-22)
4
+
5
+ Fix Active peptide selection viewer failing on frame attached.
6
+
7
+ ## 1.17.21 (2024-07-12)
8
+
9
+ Add support for string aggregation with pie chart viewer in LST viewer.
10
+
3
11
  ## 1.17.20 (2024-07-09)
4
12
 
5
13
  MCL: Reverse order of clusters
package/dist/111.js CHANGED
@@ -1,2 +1,2 @@
1
1
  var peptides;(()=>{"use strict";var e,t,r={4111:(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,threshold:p,fnNames:c,opts:l,aggregationMethod:h,weights:u}=e.data;try{const e=[],f=[],g=[],v=i-r,d=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)}}(h,u);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 w=0;const y=new Array(c.length).fill(null).map(((e,t)=>new a.t$(c[t]).getMeasure(l[t]))),b=t[0].length-2-Math.floor(Math.sqrt(-8*r+4*t[0].length*(t[0].length-1)-7)/2-.5),m=r-t[0].length*b+Math.floor((b+1)*(b+2)/2);let x=b,O=m;for(;w<v;){const r=y.map(((e,r)=>o(t[r][x])||o(t[r][O])?1:e(t[r][x],t[r][O]))),n=1===r.length?r[0]:d(r);1-n>=p&&(e.push(x),f.push(O),g.push(n)),w++,O++,O===t[0].length&&(x++,O=x+1)}const A=new Int32Array(e),M=new Int32Array(f),j=new Float32Array(g);postMessage({i:A,j:M,distance:j})}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(4111)));return o.O(e)},e=[],o.O=(t,r,n,a)=>{if(!r){var s=1/0;for(l=0;l<e.length;l++){for(var[r,n,a]=e[l],i=!0,p=0;p<r.length;p++)(!1&a||s>=a)&&Object.keys(o.O).every((e=>o.O[e](r[p])))?r.splice(p--,1):(i=!1,a<s&&(s=a));if(i){e.splice(l--,1);var c=n();void 0!==c&&(t=c)}}return t}a=a||0;for(var l=e.length;l>0&&e[l-1][2]>a;l--)e[l]=e[l-1];e[l]=[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={111: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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UixLQUFhQSxFQUFZTSxFQUFRakcsS0FBS2dHLEdBRTNGLENBSUQsSUFBS0wsRUFBVyxNQUFNLElBQUlTLE1BQU0seURBQ2hDVCxFQUFZQSxFQUFVVSxRQUFRLE9BQVEsSUFBSUEsUUFBUSxRQUFTLElBQUlBLFFBQVEsWUFBYSxLQUNwRnRELEVBQW9CdUQsRUFBSVgsQyxXQ2R4QixJQUFJWSxFQUFrQixDQUNyQixJQUFLLEdBZ0JOeEQsRUFBb0I0QixFQUFFM0UsRUFBSSxDQUFDNEUsRUFBU0csS0FFL0J3QixFQUFnQjNCLElBRWxCZ0IsY0FBYzdDLEVBQW9CdUQsRUFBSXZELEVBQW9CaUMsRUFBRUosR0FFOUQsRUFHRCxJQUFJNEIsRUFBcUJDLEtBQTJCLHFCQUFJQSxLQUEyQixzQkFBSyxHQUNwRkMsRUFBNkJGLEVBQW1CcEUsS0FBS3VFLEtBQUtILEdBQzlEQSxFQUFtQnBFLEtBdkJDckMsSUFDbkIsSUFBSzJELEVBQVVrRCxFQUFhQyxHQUFXOUcsRUFDdkMsSUFBSSxJQUFJaUQsS0FBWTRELEVBQ2hCN0QsRUFBb0J3QixFQUFFcUMsRUFBYTVELEtBQ3JDRCxFQUFvQk8sRUFBRU4sR0FBWTRELEVBQVk1RCxJQUloRCxJQURHNkQsR0FBU0EsRUFBUTlELEdBQ2RXLEVBQVN4QyxRQUNkcUYsRUFBZ0I3QyxFQUFTb0QsT0FBUyxFQUNuQ0osRUFBMkIzRyxFQUFLLEMsS1ZuQjdCZCxFQUFPOEQsRUFBb0I1RCxFQUMvQjRELEVBQW9CNUQsRUFBSSxJQUNoQjRELEVBQW9CSCxFQUFFLEtBQUttRSxLQUFLOUgsR1dEeEMsSUFBSXNFLEVBQXNCUixFQUFvQjVELEkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvY2h1bmsgbG9hZGVkIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9zdGFydHVwIGNodW5rIGRlcGVuZGVuY2llcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9kaXN0YW5jZS1tYXRyaXgvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvZGlzdGFuY2UtbWF0cml4L3NwYXJzZS1tYXRyaXgtd29ya2VyLmpzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvZW5zdXJlIGNodW5rIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCBjaHVuayBmaWxlbmFtZSIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2ltcG9ydFNjcmlwdHMgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRlZmVycmVkID0gW107XG5fX3dlYnBhY2tfcmVxdWlyZV9fLk8gPSAocmVzdWx0LCBjaHVua0lkcywgZm4sIHByaW9yaXR5KSA9PiB7XG5cdGlmKGNodW5rSWRzKSB7XG5cdFx0cHJpb3JpdHkgPSBwcmlvcml0eSB8fCAwO1xuXHRcdGZvcih2YXIgaSA9IGRlZmVycmVkLmxlbmd0aDsgaSA+IDAgJiYgZGVmZXJyZWRbaSAtIDFdWzJdID4gcHJpb3JpdHk7IGktLSkgZGVmZXJyZWRbaV0gPSBkZWZlcnJlZFtpIC0gMV07XG5cdFx0ZGVmZXJyZWRbaV0gPSBbY2h1bmtJZHMsIGZuLCBwcmlvcml0eV07XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHZhciBub3RGdWxmaWxsZWQgPSBJbmZpbml0eTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZWZlcnJlZC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBbY2h1bmtJZHMsIGZuLCBwcmlvcml0eV0gPSBkZWZlcnJlZFtpXTtcblx0XHR2YXIgZnVsZmlsbGVkID0gdHJ1ZTtcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGNodW5rSWRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRpZiAoKHByaW9yaXR5ICYgMSA9PT0gMCB8fCBub3RGdWxmaWxsZWQgPj0gcHJpb3JpdHkpICYmIE9iamVjdC5rZXlzKF9fd2VicGFja19yZXF1aXJlX18uTykuZXZlcnkoKGtleSkgPT4gKF9fd2VicGFja19yZXF1aXJlX18uT1trZXldKGNodW5rSWRzW2pdKSkpKSB7XG5cdFx0XHRcdGNodW5rSWRzLnNwbGljZShqLS0sIDEpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZnVsZmlsbGVkID0gZmFsc2U7XG5cdFx0XHRcdGlmKHByaW9yaXR5IDwgbm90RnVsZmlsbGVkKSBub3RGdWxmaWxsZWQgPSBwcmlvcml0eTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYoZnVsZmlsbGVkKSB7XG5cdFx0XHRkZWZlcnJlZC5zcGxpY2UoaS0tLCAxKVxuXHRcdFx0dmFyIHIgPSBmbigpO1xuXHRcdFx0aWYgKHIgIT09IHVuZGVmaW5lZCkgcmVzdWx0ID0gcjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07IiwidmFyIG5leHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLng7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnggPSAoKSA9PiB7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLmUoNTAxKS50aGVuKG5leHQpO1xufTsiLCJpbXBvcnQgeyBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcyB9IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IGNvbnN0IGlzTmlsID0gKHgpID0+IHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIGluc2VydFNtYWxsZXIoZGlzdGFuY2VzQXIsIGluZGV4ZXMsIG51bSwgaW5kZXgpIHtcbiAgICBpZiAobnVtID4gZGlzdGFuY2VzQXJbZGlzdGFuY2VzQXIubGVuZ3RoIC0gMV0pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpc3RhbmNlc0FyLmZpbmRJbmRleCgodikgPT4gbnVtIDwgdik7XG4gICAgZGlzdGFuY2VzQXIucG9wKCk7XG4gICAgZGlzdGFuY2VzQXIuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBudW0pO1xuICAgIGluZGV4ZXMucG9wKCk7XG4gICAgaW5kZXhlcy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGluZGV4KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMYXJnZXIoZGlzdGFuY2VzQXIsIGluZGV4ZXMsIG51bSwgaW5kZXgpIHtcbiAgICBpZiAobnVtIDwgZGlzdGFuY2VzQXJbZGlzdGFuY2VzQXIubGVuZ3RoIC0gMV0pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpc3RhbmNlc0FyLmZpbmRJbmRleCgodikgPT4gbnVtID4gdik7XG4gICAgZGlzdGFuY2VzQXIucG9wKCk7XG4gICAgZGlzdGFuY2VzQXIuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBudW0pO1xuICAgIGluZGV4ZXMucG9wKCk7XG4gICAgaW5kZXhlcy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGluZGV4KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uKGFnZ3JlZ2F0aW9uTWV0aG9kLCB3ZWlnaHRzKSB7XG4gICAgc3dpdGNoIChhZ2dyZWdhdGlvbk1ldGhvZCkge1xuICAgICAgICBjYXNlIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzLk1BTkhBVFRBTjpcbiAgICAgICAgICAgIHJldHVybiAodnMpID0+IHZzLnJlZHVjZSgoYWNjLCB2YWwsIGlkeCkgPT4gYWNjICsgdmFsICogd2VpZ2h0c1tpZHhdLCAwKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAodnMpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBldWNsaWRlYW5cbiAgICAgICAgICAgICAgICBjb25zdCBzdW0gPSB2cy5yZWR1Y2UoKGFjYywgdmFsLCBpZHgpID0+IGFjYyArICh2YWwgKiB3ZWlnaHRzW2lkeF0pICoqIDIsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3VtKTtcbiAgICAgICAgICAgIH07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhScGJITXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMWRHbHNjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeFBRVUZQTEVWQlFUUkNMREJDUVVFd1FpeEZRVUZETEUxQlFVMHNVMEZCVXl4RFFVRkRPMEZCUlRsRkxFMUJRVTBzUTBGQlF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eExRVUZMTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1UwRkJVeXhEUVVGRE8wRkJSUzlFTEUxQlFVMHNWVUZCVlN4aFFVRmhMRU5CUVVNc1YwRkJjVUlzUlVGQlJTeFBRVUZwUWl4RlFVRkZMRWRCUVZjc1JVRkJSU3hMUVVGaE8wbEJRMmhITEVsQlFVa3NSMEZCUnl4SFFVRkhMRmRCUVZjc1EwRkJReXhYUVVGWExFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjZReXhQUVVGUE8wbEJSVlFzVFVGQlRTeFhRVUZYTEVkQlFVY3NWMEZCVnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRekZFTEZkQlFWY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVOc1FpeFhRVUZYTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEZUVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzBsQlEyUXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNoRExFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNXVUZCV1N4RFFVRkRMRmRCUVhGQ0xFVkJRVVVzVDBGQmFVSXNSVUZCUlN4SFFVRlhMRVZCUVVVc1MwRkJZVHRKUVVNdlJpeEpRVUZKTEVkQlFVY3NSMEZCUnl4WFFVRlhMRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVOQlFVTTdVVUZEZWtNc1QwRkJUenRKUVVWVUxFMUJRVTBzVjBGQlZ5eEhRVUZITEZkQlFWY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNeFJDeFhRVUZYTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRiRUlzVjBGQlZ5eERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJReXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEzaERMRTlCUVU4c1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5rTEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTjRReXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEhOQ1FVRnpRaXhEUVVOd1F5eHBRa0ZCTkVNc1JVRkJSU3hQUVVGcFFqdEpRVVV2UkN4UlFVRlJMR2xDUVVGcFFpeEZRVUZGTEVOQlFVTTdVVUZETVVJc1MwRkJTeXd3UWtGQk1FSXNRMEZCUXl4VFFVRlRPMWxCUTNaRExFOUJRVThzUTBGQlF5eEZRVUZaTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVkQlFVY3NSMEZCUnl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEY2tZN1dVRkRSU3hQUVVGUExFTkJRVU1zUlVGQldTeEZRVUZGTEVWQlFVVTdaMEpCUTNSQ0xGbEJRVms3WjBKQlExb3NUVUZCVFN4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4SFFVRkhMRWRCUVVjc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU0zUlN4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEZUVJc1EwRkJReXhEUVVGRE8wbEJRMDRzUTBGQlF6dEJRVU5JTEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdlMFJwYzNSaGJtTmxRV2RuY21WbllYUnBiMjVOWlhSb2IyUXNJRVJwYzNSaGJtTmxRV2RuY21WbllYUnBiMjVOWlhSb2IyUnpmU0JtY205dElDY3VMM1I1Y0dWekp6dGNibHh1Wlhod2IzSjBJR052Ym5OMElHbHpUbWxzSUQwZ0tIZzZJR0Z1ZVNrZ1BUNGdlQ0E5UFQwZ2JuVnNiQ0I4ZkNCNElEMDlQU0IxYm1SbFptbHVaV1E3WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGJuTmxjblJUYldGc2JHVnlLR1JwYzNSaGJtTmxjMEZ5T2lCdWRXMWlaWEpiWFN3Z2FXNWtaWGhsY3pvZ2JuVnRZbVZ5VzEwc0lHNTFiVG9nYm5WdFltVnlMQ0JwYm1SbGVEb2diblZ0WW1WeUtTQjdYRzRnSUdsbUlDaHVkVzBnUGlCa2FYTjBZVzVqWlhOQmNsdGthWE4wWVc1alpYTkJjaTVzWlc1bmRHZ3RNVjBwWEc0Z0lDQWdjbVYwZFhKdU8xeHVYRzRnSUdOdmJuTjBJRzVsZDFCdmMybDBhVzl1SUQwZ1pHbHpkR0Z1WTJWelFYSXVabWx1WkVsdVpHVjRLQ2gyS1NBOVBpQnVkVzBnUENCMktUdGNiaUFnWkdsemRHRnVZMlZ6UVhJdWNHOXdLQ2s3WEc0Z0lHUnBjM1JoYm1ObGMwRnlMbk53YkdsalpTaHVaWGRRYjNOcGRHbHZiaXdnTUN3Z2JuVnRLVHRjYmlBZ2FXNWtaWGhsY3k1d2IzQW9LVHRjYmlBZ2FXNWtaWGhsY3k1emNHeHBZMlVvYm1WM1VHOXphWFJwYjI0c0lEQXNJR2x1WkdWNEtUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdsdWMyVnlkRXhoY21kbGNpaGthWE4wWVc1alpYTkJjam9nYm5WdFltVnlXMTBzSUdsdVpHVjRaWE02SUc1MWJXSmxjbHRkTENCdWRXMDZJRzUxYldKbGNpd2dhVzVrWlhnNklHNTFiV0psY2lrZ2UxeHVJQ0JwWmlBb2JuVnRJRHdnWkdsemRHRnVZMlZ6UVhKYlpHbHpkR0Z1WTJWelFYSXViR1Z1WjNSb0xURmRLVnh1SUNBZ0lISmxkSFZ5Ymp0Y2JseHVJQ0JqYjI1emRDQnVaWGRRYjNOcGRHbHZiaUE5SUdScGMzUmhibU5sYzBGeUxtWnBibVJKYm1SbGVDZ29kaWtnUFQ0Z2JuVnRJRDRnZGlrN1hHNGdJR1JwYzNSaGJtTmxjMEZ5TG5CdmNDZ3BPMXh1SUNCa2FYTjBZVzVqWlhOQmNpNXpjR3hwWTJVb2JtVjNVRzl6YVhScGIyNHNJREFzSUc1MWJTazdYRzRnSUdsdVpHVjRaWE11Y0c5d0tDazdYRzRnSUdsdVpHVjRaWE11YzNCc2FXTmxLRzVsZDFCdmMybDBhVzl1TENBd0xDQnBibVJsZUNrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJuWlhSQloyZHlaV2RoZEdsdmJrWjFibU4wYVc5dUtGeHVJQ0JoWjJkeVpXZGhkR2x2YmsxbGRHaHZaRG9nUkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2YmsxbGRHaHZaQ3dnZDJWcFoyaDBjem9nYm5WdFltVnlXMTFjYmlrNklDaDJZV3gxWlhNNklHNTFiV0psY2x0ZEtTQTlQaUJ1ZFcxaVpYSWdlMXh1SUNCemQybDBZMmdnS0dGblozSmxaMkYwYVc5dVRXVjBhRzlrS1NCN1hHNGdJQ0FnWTJGelpTQkVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2N5NU5RVTVJUVZSVVFVNDZYRzRnSUNBZ0lDQnlaWFIxY200Z0tIWnpPaUJ1ZFcxaVpYSmJYU2tnUFQ0Z2RuTXVjbVZrZFdObEtDaGhZMk1zSUhaaGJDd2dhV1I0S1NBOVBpQmhZMk1nS3lCMllXd2dLaUIzWldsbmFIUnpXMmxrZUYwc0lEQXBPMXh1SUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNCeVpYUjFjbTRnS0haek9pQnVkVzFpWlhKYlhTa2dQVDRnZTF4dUlDQWdJQ0FnSUNBdkx5QmxkV05zYVdSbFlXNWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2MzVnRJRDBnZG5NdWNtVmtkV05sS0NoaFkyTXNJSFpoYkN3Z2FXUjRLU0E5UGlCaFkyTWdLeUFvZG1Gc0lDb2dkMlZwWjJoMGMxdHBaSGhkS1NBcUtpQXlMQ0F3S1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUUxaGRHZ3VjM0Z5ZENoemRXMHBPMXh1SUNBZ0lDQWdmVHRjYmlBZ2ZWeHVmVnh1SWwxOSIsImltcG9ydCB7IGdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24sIGlzTmlsIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBNZWFzdXJlLCBpc0JpdEFycmF5TWV0cmljIH0gZnJvbSAnLi4vdHlwZWQtbWV0cmljcyc7XG5pbXBvcnQgQml0QXJyYXkgZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvYml0LWFycmF5Jztcbm9ubWVzc2FnZSA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWVzLCBzdGFydElkeCwgZW5kSWR4LCB0aHJlc2hvbGQsIGZuTmFtZXMsIG9wdHMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCB3ZWlnaHRzIH0gPSBldmVudC5kYXRhO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIGlmIChzdGFydElkeCAhPSAtMSlcbiAgICAgICAgLy8gICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGluIHNwYXJzZSBtYXRyaXggd29ya2VyJyk7IC8vIFRPRE86IHJlbW92ZSB0aGlzIGxpbmVcbiAgICAgICAgY29uc3QgaSA9IFtdO1xuICAgICAgICBjb25zdCBqID0gW107XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlcyA9IFtdO1xuICAgICAgICBjb25zdCBjaHVua1NpemUgPSBlbmRJZHggLSBzdGFydElkeDtcbiAgICAgICAgLy9jb25zdCBtaSA9IHN0YXJ0Um93O1xuICAgICAgICAvL2NvbnN0IG1qID0gc3RhcnRDb2w7XG4gICAgICAgIGNvbnN0IGFnZ3JlZ2F0ZSA9IGdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24oYWdncmVnYXRpb25NZXRob2QsIHdlaWdodHMpO1xuICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodiwgY29sSWR4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNCaXRBcnJheU1ldHJpYyhmbk5hbWVzW2NvbElkeF0pKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05pbCh2W2ldKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbY29sSWR4XVtpXSA9IG5ldyBCaXRBcnJheSh2YWx1ZXNbY29sSWR4XVtpXS5fZGF0YSwgdmFsdWVzW2NvbElkeF1baV0uX2xlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGNudCA9IDA7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlRm5zID0gbmV3IEFycmF5KGZuTmFtZXMubGVuZ3RoKS5maWxsKG51bGwpLm1hcCgoXywgaSkgPT4gbmV3IE1lYXN1cmUoZm5OYW1lc1tpXSkuZ2V0TWVhc3VyZShvcHRzW2ldKSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0Um93ID0gdmFsdWVzWzBdLmxlbmd0aCAtIDIgLSBNYXRoLmZsb29yKE1hdGguc3FydCgtOCAqIHN0YXJ0SWR4ICsgNCAqIHZhbHVlc1swXS5sZW5ndGggKiAodmFsdWVzWzBdLmxlbmd0aCAtIDEpIC0gNykgLyAyIC0gMC41KTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb2wgPSBzdGFydElkeCAtIHZhbHVlc1swXS5sZW5ndGggKiBzdGFydFJvdyArIE1hdGguZmxvb3IoKHN0YXJ0Um93ICsgMSkgKiAoc3RhcnRSb3cgKyAyKSAvIDIpO1xuICAgICAgICBsZXQgbWkgPSBzdGFydFJvdztcbiAgICAgICAgbGV0IG1qID0gc3RhcnRDb2w7XG4gICAgICAgIHdoaWxlIChjbnQgPCBjaHVua1NpemUpIHtcbiAgICAgICAgICAgIC8vY29uc3QgdmFsdWUgPSBzZXExTGlzdFttaV0gJiYgc2VxMUxpc3RbbWpdID8gaGFtbWluZyhzZXExTGlzdFttaV0sIHNlcTFMaXN0W21qXSkgOiAwO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VWYWx1ZXMgPSBkaXN0YW5jZUZucy5tYXAoKGZuLCBpZHgpID0+ICFpc05pbCh2YWx1ZXNbaWR4XVttaV0pICYmICFpc05pbCh2YWx1ZXNbaWR4XVttal0pID9cbiAgICAgICAgICAgICAgICBmbih2YWx1ZXNbaWR4XVttaV0sIHZhbHVlc1tpZHhdW21qXSkgOiAxKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGlzdGFuY2VWYWx1ZXMubGVuZ3RoID09PSAxID8gZGlzdGFuY2VWYWx1ZXNbMF0gOiBhZ2dyZWdhdGUoZGlzdGFuY2VWYWx1ZXMpO1xuICAgICAgICAgICAgaWYgKDEgLSB2YWx1ZSA+PSB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICBpLnB1c2gobWkpO1xuICAgICAgICAgICAgICAgIGoucHVzaChtaik7XG4gICAgICAgICAgICAgICAgZGlzdGFuY2VzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY250Kys7XG4gICAgICAgICAgICBtaisrO1xuICAgICAgICAgICAgaWYgKG1qID09PSB2YWx1ZXNbMF0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbWkrKztcbiAgICAgICAgICAgICAgICBtaiA9IG1pICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpQXJyYXkgPSBuZXcgSW50MzJBcnJheShpKTtcbiAgICAgICAgY29uc3QgakFycmF5ID0gbmV3IEludDMyQXJyYXkoaik7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGRpc3RhbmNlcyk7XG4gICAgICAgIHBvc3RNZXNzYWdlKHsgaTogaUFycmF5LCBqOiBqQXJyYXksIGRpc3RhbmNlOiBkaXN0YW5jZUFycmF5IH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBwb3N0TWVzc2FnZSh7IGVycm9yOiBlIH0pO1xuICAgIH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljM0JoY25ObExXMWhkSEpwZUMxM2IzSnJaWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SnpjR0Z5YzJVdGJXRjBjbWw0TFhkdmNtdGxjaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeFBRVUZQTEVWQlFVTXNjMEpCUVhOQ0xFVkJRVVVzUzBGQlN5eEZRVUZETEUxQlFVMHNVMEZCVXl4RFFVRkRPMEZCUTNSRUxFOUJRVThzUlVGQlpTeFBRVUZQTEVWQlFVVXNaMEpCUVdkQ0xFVkJRVU1zVFVGQlRTeHJRa0ZCYTBJc1EwRkJRenRCUVVONlJTeFBRVUZQTEZGQlFWRXNUVUZCVFN4NVEwRkJlVU1zUTBGQlF6dEJRVVV2UkN4VFFVRlRMRWRCUVVjc1MwRkJTeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTzBsQlF6RkNMRTFCUVUwc1JVRkJReXhOUVVGTkxFVkJRVVVzVVVGQlVTeEZRVUZGTEUxQlFVMHNSVUZCUlN4VFFVRlRMRVZCUVVVc1QwRkJUeXhGUVVGRkxFbEJRVWtzUlVGQlJTeHBRa0ZCYVVJc1JVRkJSU3hQUVVGUExFVkJRVU1zUjBGSGJFTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJRenRKUVVNdlJDeEpRVUZKTEVOQlFVTTdVVUZEU0N4elFrRkJjMEk3VVVGRGRFSXNaMFpCUVdkR08xRkJRMmhHTEUxQlFVMHNRMEZCUXl4SFFVRmhMRVZCUVVVc1EwRkJRenRSUVVOMlFpeE5RVUZOTEVOQlFVTXNSMEZCWVN4RlFVRkZMRU5CUVVNN1VVRkRka0lzVFVGQlRTeFRRVUZUTEVkQlFXRXNSVUZCUlN4RFFVRkRPMUZCUXk5Q0xFMUJRVTBzVTBGQlV5eEhRVUZITEUxQlFVMHNSMEZCUnl4UlFVRlJMRU5CUVVNN1VVRkRjRU1zYzBKQlFYTkNPMUZCUTNSQ0xITkNRVUZ6UWp0UlFVVjBRaXhOUVVGTkxGTkJRVk1zUjBGQlJ5eHpRa0ZCYzBJc1EwRkJReXhwUWtGQmFVSXNSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVWeVJTeE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeEZRVUZGTzFsQlF6TkNMRWxCUVVrc1owSkJRV2RDTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF6dG5Ra0ZEZEVNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0dlFrRkRiRU1zU1VGQlNTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8zZENRVUZGTEZOQlFWTTdiMEpCUXpGQ0xFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0blFrRkRka1lzUTBGQlF6dFpRVU5JTEVOQlFVTTdVVUZEU0N4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOSUxFbEJRVWtzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTmFMRTFCUVUwc1YwRkJWeXhIUVVGSExFbEJRVWtzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNTVUZCU1N4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNWVUZCVlN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEY0Vnc1RVRkJUU3hSUVVGUkxFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZEYUVRc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4UlFVRlJMRWRCUVVjc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVNeFJpeE5RVUZOTEZGQlFWRXNSMEZCUnl4UlFVRlJMRWRCUVVjc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSMEZCUnl4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNeFJ5eEpRVUZKTEVWQlFVVXNSMEZCUnl4UlFVRlJMRU5CUVVNN1VVRkRiRUlzU1VGQlNTeEZRVUZGTEVkQlFVY3NVVUZCVVN4RFFVRkRPMUZCUTJ4Q0xFOUJRVThzUjBGQlJ5eEhRVUZITEZOQlFWTXNSVUZCUlN4RFFVRkRPMWxCUTNaQ0xIVkdRVUYxUmp0WlFVTjJSaXhOUVVGTkxHTkJRV01zUjBGQlJ5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEZEVjc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hOUVVGTkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZETlVNc1RVRkJUU3hMUVVGTExFZEJRVWNzWTBGQll5eERRVUZETEUxQlFVMHNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETzFsQlF6RkdMRWxCUVVrc1EwRkJReXhIUVVGSExFdEJRVXNzU1VGQlNTeFRRVUZUTEVWQlFVVXNRMEZCUXp0blFrRkRNMElzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRuUWtGRFdDeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8yZENRVU5ZTEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03V1VGRGVFSXNRMEZCUXp0WlFVTkVMRWRCUVVjc1JVRkJSU3hEUVVGRE8xbEJRMDRzUlVGQlJTeEZRVUZGTEVOQlFVTTdXVUZEVEN4SlFVRkpMRVZCUVVVc1MwRkJTeXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1owSkJRelZDTEVWQlFVVXNSVUZCUlN4RFFVRkRPMmRDUVVOTUxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJRc1EwRkJRenRSUVVOSUxFTkJRVU03VVVGRlJDeE5RVUZOTEUxQlFVMHNSMEZCUnl4SlFVRkpMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5xUXl4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnFReXhOUVVGTkxHRkJRV0VzUjBGQlJ5eEpRVUZKTEZsQlFWa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRSUVVOc1JDeFhRVUZYTEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeE5RVUZOTEVWQlFVVXNVVUZCVVN4RlFVRkZMR0ZCUVdFc1JVRkJReXhEUVVGRExFTkJRVU03U1VGREwwUXNRMEZCUXp0SlFVRkRMRTlCUVU4c1EwRkJReXhGUVVGRkxFTkJRVU03VVVGRFdDeFhRVUZYTEVOQlFVTXNSVUZCUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF6dEpRVU14UWl4RFFVRkRPMEZCUTBnc1EwRkJReXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdG5aWFJCWjJkeVpXZGhkR2x2YmtaMWJtTjBhVzl1TENCcGMwNXBiSDBnWm5KdmJTQW5MaTkxZEdsc2N5YzdYRzVwYlhCdmNuUWdlMHR1YjNkdVRXVjBjbWxqY3l3Z1RXVmhjM1Z5WlN3Z2FYTkNhWFJCY25KaGVVMWxkSEpwWTMwZ1puSnZiU0FuTGk0dmRIbHdaV1F0YldWMGNtbGpjeWM3WEc1cGJYQnZjblFnUW1sMFFYSnlZWGtnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12WW1sMExXRnljbUY1Snp0Y2JtbHRjRzl5ZENCN1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkgwZ1puSnZiU0FuTGk5MGVYQmxjeWM3WEc1dmJtMWxjM05oWjJVZ1BTQmhjM2x1WXlBb1pYWmxiblFwSUQwK0lIdGNiaUFnWTI5dWMzUWdlM1poYkhWbGN5d2djM1JoY25SSlpIZ3NJR1Z1WkVsa2VDd2dkR2h5WlhOb2IyeGtMQ0JtYms1aGJXVnpMQ0J2Y0hSekxDQmhaMmR5WldkaGRHbHZiazFsZEdodlpDd2dkMlZwWjJoMGMzMDZYRzRnSUNBZ2UzWmhiSFZsY3pvZ1FYSnlZWGs4WVc1NVcxMCtMQ0J6ZEdGeWRFbGtlRG9nYm5WdFltVnlMQ0JsYm1SSlpIZzZJRzUxYldKbGNpeGNiaUFnSUNBZ0lIUm9jbVZ6YUc5c1pEb2diblZ0WW1WeUxDQm1iazVoYldWek9pQkxibTkzYmsxbGRISnBZM05iWFN3Z2IzQjBjem9nWVc1NVcxMHNJSGRsYVdkb2RITTZJRzUxYldKbGNsdGRMRnh1SUNBZ0lDQWdZV2RuY21WbllYUnBiMjVOWlhSb2IyUTZJRVJwYzNSaGJtTmxRV2RuY21WbllYUnBiMjVOWlhSb2IyUjlJRDBnWlhabGJuUXVaR0YwWVR0Y2JpQWdkSEo1SUh0Y2JpQWdJQ0F2THlCcFppQW9jM1JoY25SSlpIZ2dJVDBnTFRFcFhHNGdJQ0FnTHk4Z0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owVnljbTl5SUdsdUlITndZWEp6WlNCdFlYUnlhWGdnZDI5eWEyVnlKeWs3SUM4dklGUlBSRTg2SUhKbGJXOTJaU0IwYUdseklHeHBibVZjYmlBZ0lDQmpiMjV6ZENCcE9pQnVkVzFpWlhKYlhTQTlJRnRkTzF4dUlDQWdJR052Ym5OMElHbzZJRzUxYldKbGNsdGRJRDBnVzEwN1hHNGdJQ0FnWTI5dWMzUWdaR2x6ZEdGdVkyVnpPaUJ1ZFcxaVpYSmJYU0E5SUZ0ZE8xeHVJQ0FnSUdOdmJuTjBJR05vZFc1clUybDZaU0E5SUdWdVpFbGtlQ0F0SUhOMFlYSjBTV1I0TzF4dUlDQWdJQzh2WTI5dWMzUWdiV2tnUFNCemRHRnlkRkp2ZHp0Y2JpQWdJQ0F2TDJOdmJuTjBJRzFxSUQwZ2MzUmhjblJEYjJ3N1hHNWNiaUFnSUNCamIyNXpkQ0JoWjJkeVpXZGhkR1VnUFNCblpYUkJaMmR5WldkaGRHbHZia1oxYm1OMGFXOXVLR0ZuWjNKbFoyRjBhVzl1VFdWMGFHOWtMQ0IzWldsbmFIUnpLVHRjYmx4dUlDQWdJSFpoYkhWbGN5NW1iM0pGWVdOb0tDaDJMQ0JqYjJ4SlpIZ3BJRDArSUh0Y2JpQWdJQ0FnSUdsbUlDaHBjMEpwZEVGeWNtRjVUV1YwY21saktHWnVUbUZ0WlhOYlkyOXNTV1I0WFNrcElIdGNiaUFnSUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IyTG14bGJtZDBhRHNnS3l0cEtTQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHbHpUbWxzS0haYmFWMHBLU0JqYjI1MGFXNTFaVHRjYmlBZ0lDQWdJQ0FnSUNCMllXeDFaWE5iWTI5c1NXUjRYVnRwWFNBOUlHNWxkeUJDYVhSQmNuSmhlU2gyWVd4MVpYTmJZMjlzU1dSNFhWdHBYUzVmWkdGMFlTd2dkbUZzZFdWelcyTnZiRWxrZUYxYmFWMHVYMnhsYm1kMGFDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlLVHRjYmlBZ0lDQnNaWFFnWTI1MElEMGdNRHRjYmlBZ0lDQmpiMjV6ZENCa2FYTjBZVzVqWlVadWN5QTlJRzVsZHlCQmNuSmhlU2htYms1aGJXVnpMbXhsYm1kMGFDa3VabWxzYkNodWRXeHNLUzV0WVhBb0tGOHNJR2twSUQwK0lHNWxkeUJOWldGemRYSmxLR1p1VG1GdFpYTmJhVjBwTG1kbGRFMWxZWE4xY21Vb2IzQjBjMXRwWFNrcE8xeHVJQ0FnSUdOdmJuTjBJSE4wWVhKMFVtOTNJRDBnZG1Gc2RXVnpXekJkTG14bGJtZDBhQ0F0SURJZ0xTQk5ZWFJvTG1ac2IyOXlLRnh1SUNBZ0lDQWdUV0YwYUM1emNYSjBLQzA0SUNvZ2MzUmhjblJKWkhnZ0t5QTBJQ29nZG1Gc2RXVnpXekJkTG14bGJtZDBhQ0FxSUNoMllXeDFaWE5iTUYwdWJHVnVaM1JvSUMwZ01Ta2dMU0EzS1NBdklESWdMU0F3TGpVcE8xeHVJQ0FnSUdOdmJuTjBJSE4wWVhKMFEyOXNJRDBnYzNSaGNuUkpaSGdnTFNCMllXeDFaWE5iTUYwdWJHVnVaM1JvSUNvZ2MzUmhjblJTYjNjZ0t5Qk5ZWFJvTG1ac2IyOXlLQ2h6ZEdGeWRGSnZkeUFySURFcElDb2dLSE4wWVhKMFVtOTNJQ3NnTWlrZ0x5QXlLVHRjYmlBZ0lDQnNaWFFnYldrZ1BTQnpkR0Z5ZEZKdmR6dGNiaUFnSUNCc1pYUWdiV29nUFNCemRHRnlkRU52YkR0Y2JpQWdJQ0IzYUdsc1pTQW9ZMjUwSUR3Z1kyaDFibXRUYVhwbEtTQjdYRzRnSUNBZ0lDQXZMMk52Ym5OMElIWmhiSFZsSUQwZ2MyVnhNVXhwYzNSYmJXbGRJQ1ltSUhObGNURk1hWE4wVzIxcVhTQS9JR2hoYlcxcGJtY29jMlZ4TVV4cGMzUmJiV2xkTENCelpYRXhUR2x6ZEZ0dGFsMHBJRG9nTUR0Y2JpQWdJQ0FnSUdOdmJuTjBJR1JwYzNSaGJtTmxWbUZzZFdWeklEMGdaR2x6ZEdGdVkyVkdibk11YldGd0tDaG1iaXdnYVdSNEtTQTlQaUFoYVhOT2FXd29kbUZzZFdWelcybGtlRjFiYldsZEtTQW1KaUFoYVhOT2FXd29kbUZzZFdWelcybGtlRjFiYldwZEtTQS9YRzRnSUNBZ0lDQWdJR1p1S0haaGJIVmxjMXRwWkhoZFcyMXBYU3dnZG1Gc2RXVnpXMmxrZUYxYmJXcGRLU0E2SURFcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnZG1Gc2RXVWdQU0JrYVhOMFlXNWpaVlpoYkhWbGN5NXNaVzVuZEdnZ1BUMDlJREVnUHlCa2FYTjBZVzVqWlZaaGJIVmxjMXN3WFNBNklHRm5aM0psWjJGMFpTaGthWE4wWVc1alpWWmhiSFZsY3lrN1hHNGdJQ0FnSUNCcFppQW9NU0F0SUhaaGJIVmxJRDQ5SUhSb2NtVnphRzlzWkNrZ2UxeHVJQ0FnSUNBZ0lDQnBMbkIxYzJnb2JXa3BPMXh1SUNBZ0lDQWdJQ0JxTG5CMWMyZ29iV29wTzF4dUlDQWdJQ0FnSUNCa2FYTjBZVzVqWlhNdWNIVnphQ2gyWVd4MVpTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQmpiblFyS3p0Y2JpQWdJQ0FnSUcxcUt5czdYRzRnSUNBZ0lDQnBaaUFvYldvZ1BUMDlJSFpoYkhWbGMxc3dYUzVzWlc1bmRHZ3BJSHRjYmlBZ0lDQWdJQ0FnYldrckt6dGNiaUFnSUNBZ0lDQWdiV29nUFNCdGFTQXJJREU3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdZMjl1YzNRZ2FVRnljbUY1SUQwZ2JtVjNJRWx1ZERNeVFYSnlZWGtvYVNrN1hHNGdJQ0FnWTI5dWMzUWdha0Z5Y21GNUlEMGdibVYzSUVsdWRETXlRWEp5WVhrb2FpazdYRzRnSUNBZ1kyOXVjM1FnWkdsemRHRnVZMlZCY25KaGVTQTlJRzVsZHlCR2JHOWhkRE15UVhKeVlYa29aR2x6ZEdGdVkyVnpLVHRjYmlBZ0lDQndiM04wVFdWemMyRm5aU2g3YVRvZ2FVRnljbUY1TENCcU9pQnFRWEp5WVhrc0lHUnBjM1JoYm1ObE9pQmthWE4wWVc1alpVRnljbUY1ZlNrN1hHNGdJSDBnWTJGMFkyZ2dLR1VwSUh0Y2JpQWdJQ0J3YjNOMFRXVnpjMkZuWlNoN1pYSnliM0k2SUdWOUtUdGNiaUFnZlZ4dWZUdGNiaUpkZlE9PSIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuLy8gdGhlIHN0YXJ0dXAgZnVuY3Rpb25cbl9fd2VicGFja19yZXF1aXJlX18ueCA9ICgpID0+IHtcblx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5cdC8vIFRoaXMgZW50cnkgbW9kdWxlIGRlcGVuZHMgb24gb3RoZXIgbG9hZGVkIGNodW5rcyBhbmQgZXhlY3V0aW9uIG5lZWQgdG8gYmUgZGVsYXllZFxuXHR2YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18uTyh1bmRlZmluZWQsIFs1MDFdLCAoKSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXyg0MTExKSkpXG5cdF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLk8oX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cdHJldHVybiBfX3dlYnBhY2tfZXhwb3J0c19fO1xufTtcblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5mID0ge307XG4vLyBUaGlzIGZpbGUgY29udGFpbnMgb25seSB0aGUgZW50cnkgY2h1bmsuXG4vLyBUaGUgY2h1bmsgbG9hZGluZyBmdW5jdGlvbiBmb3IgYWRkaXRpb25hbCBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18uZSA9IChjaHVua0lkKSA9PiB7XG5cdHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmYpLnJlZHVjZSgocHJvbWlzZXMsIGtleSkgPT4ge1xuXHRcdF9fd2VicGFja19yZXF1aXJlX18uZltrZXldKGNodW5rSWQsIHByb21pc2VzKTtcblx0XHRyZXR1cm4gcHJvbWlzZXM7XG5cdH0sIFtdKSk7XG59OyIsIi8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rcyBhbmQgc2libGluZyBjaHVua3MgZm9yIHRoZSBlbnRyeXBvaW50XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwidmFyIHNjcmlwdFVybDtcbmlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmcuaW1wb3J0U2NyaXB0cykgc2NyaXB0VXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmxvY2F0aW9uICsgXCJcIjtcbnZhciBkb2N1bWVudCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5kb2N1bWVudDtcbmlmICghc2NyaXB0VXJsICYmIGRvY3VtZW50KSB7XG5cdGlmIChkb2N1bWVudC5jdXJyZW50U2NyaXB0KVxuXHRcdHNjcmlwdFVybCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1xuXHRpZiAoIXNjcmlwdFVybCkge1xuXHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHtcblx0XHRcdHZhciBpID0gc2NyaXB0cy5sZW5ndGggLSAxO1xuXHRcdFx0d2hpbGUgKGkgPiAtMSAmJiAoIXNjcmlwdFVybCB8fCAhL15odHRwKHM/KTovLnRlc3Qoc2NyaXB0VXJsKSkpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCIvLyBubyBiYXNlVVJJXG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgY2h1bmtzXG4vLyBcIjFcIiBtZWFucyBcImFscmVhZHkgbG9hZGVkXCJcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDExMTogMVxufTtcblxuLy8gaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nXG52YXIgaW5zdGFsbENodW5rID0gKGRhdGEpID0+IHtcblx0dmFyIFtjaHVua0lkcywgbW9yZU1vZHVsZXMsIHJ1bnRpbWVdID0gZGF0YTtcblx0Zm9yKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhtb3JlTW9kdWxlcywgbW9kdWxlSWQpKSB7XG5cdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuXHRcdH1cblx0fVxuXHRpZihydW50aW1lKSBydW50aW1lKF9fd2VicGFja19yZXF1aXJlX18pO1xuXHR3aGlsZShjaHVua0lkcy5sZW5ndGgpXG5cdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRzLnBvcCgpXSA9IDE7XG5cdHBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uKGRhdGEpO1xufTtcbl9fd2VicGFja19yZXF1aXJlX18uZi5pID0gKGNodW5rSWQsIHByb21pc2VzKSA9PiB7XG5cdC8vIFwiMVwiIGlzIHRoZSBzaWduYWwgZm9yIFwiYWxyZWFkeSBsb2FkZWRcIlxuXHRpZighaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdKSB7XG5cdFx0aWYodHJ1ZSkgeyAvLyBhbGwgY2h1bmtzIGhhdmUgSlNcblx0XHRcdGltcG9ydFNjcmlwdHMoX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgX193ZWJwYWNrX3JlcXVpcmVfXy51KGNodW5rSWQpKTtcblx0XHR9XG5cdH1cbn07XG5cbnZhciBjaHVua0xvYWRpbmdHbG9iYWwgPSBzZWxmW1wid2VicGFja0NodW5rcGVwdGlkZXNcIl0gPSBzZWxmW1wid2VicGFja0NodW5rcGVwdGlkZXNcIl0gfHwgW107XG52YXIgcGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24gPSBjaHVua0xvYWRpbmdHbG9iYWwucHVzaC5iaW5kKGNodW5rTG9hZGluZ0dsb2JhbCk7XG5jaHVua0xvYWRpbmdHbG9iYWwucHVzaCA9IGluc3RhbGxDaHVuaztcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdCIsIi8vIHJ1biBzdGFydHVwXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18ueCgpO1xuIl0sIm5hbWVzIjpbImRlZmVycmVkIiwibmV4dCIsImlzTmlsIiwieCIsIm9ubWVzc2FnZSIsImFzeW5jIiwiZXZlbnQiLCJ2YWx1ZXMiLCJzdGFydElkeCIsImVuZElkeCIsInRocmVzaG9sZCIsImZuTmFtZXMiLCJvcHRzIiwiYWdncmVnYXRpb25NZXRob2QiLCJ3ZWlnaHRzIiwiZGF0YSIsImkiLCJqIiwiZGlzdGFuY2VzIiwiY2h1bmtTaXplIiwiYWdncmVnYXRlIiwiTUFOSEFUVEFOIiwidnMiLCJyZWR1Y2UiLCJhY2MiLCJ2YWwiLCJpZHgiLCJzdW0iLCJNYXRoIiwic3FydCIsImdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24iLCJmb3JFYWNoIiwidiIsImNvbElkeCIsImxlbmd0aCIsIl9kYXRhIiwiX2xlbmd0aCIsImNudCIsImRpc3RhbmNlRm5zIiwiQXJyYXkiLCJmaWxsIiwibWFwIiwiXyIsImdldE1lYXN1cmUiLCJzdGFydFJvdyIsImZsb29yIiwic3RhcnRDb2wiLCJtaSIsIm1qIiwiZGlzdGFuY2VWYWx1ZXMiLCJmbiIsInZhbHVlIiwicHVzaCIsImlBcnJheSIsIkludDMyQXJyYXkiLCJqQXJyYXkiLCJkaXN0YW5jZUFycmF5IiwiRmxvYXQzMkFycmF5IiwicG9zdE1lc3NhZ2UiLCJkaXN0YW5jZSIsImUiLCJlcnJvciIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsInVuZGVmaW5lZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibSIsIl9fd2VicGFja19leHBvcnRzX18iLCJPIiwicmVzdWx0IiwiY2h1bmtJZHMiLCJwcmlvcml0eSIsIm5vdEZ1bGZpbGxlZCIsIkluZmluaXR5IiwiZnVsZmlsbGVkIiwiT2JqZWN0Iiwia2V5cyIsImV2ZXJ5Iiwia2V5Iiwic3BsaWNlIiwiciIsImQiLCJkZWZpbml0aW9uIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImYiLCJjaHVua0lkIiwiUHJvbWlzZSIsImFsbCIsInByb21pc2VzIiwidSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwid2luZG93Iiwib2JqIiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNjcmlwdFVybCIsImltcG9ydFNjcmlwdHMiLCJsb2NhdGlvbiIsImRvY3VtZW50IiwiY3VycmVudFNjcmlwdCIsInNyYyIsInNjcmlwdHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInRlc3QiLCJFcnJvciIsInJlcGxhY2UiLCJwIiwiaW5zdGFsbGVkQ2h1bmtzIiwiY2h1bmtMb2FkaW5nR2xvYmFsIiwic2VsZiIsInBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uIiwiYmluZCIsIm1vcmVNb2R1bGVzIiwicnVudGltZSIsInBvcCIsInRoZW4iXSwic291cmNlUm9vdCI6IiJ9
2
+ //# sourceMappingURL=111.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"111.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-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, threshold, fnNames, opts, aggregationMethod, weights } = event.data;\n try {\n // if (startIdx != -1)\n // throw new Error('Error in sparse matrix worker'); // TODO: remove this line\n const i = [];\n const j = [];\n const distances = [];\n const chunkSize = endIdx - startIdx;\n //const mi = startRow;\n //const mj = startCol;\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 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 while (cnt < chunkSize) {\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 if (1 - value >= threshold) {\n i.push(mi);\n j.push(mj);\n distances.push(value);\n }\n cnt++;\n mj++;\n if (mj === values[0].length) {\n mi++;\n mj = mi + 1;\n }\n }\n const iArray = new Int32Array(i);\n const jArray = new Int32Array(j);\n const distanceArray = new Float32Array(distances);\n postMessage({ i: iArray, j: jArray, distance: distanceArray });\n }\n catch (e) {\n postMessage({ error: e });\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnNlLW1hdHJpeC13b3JrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcGFyc2UtbWF0cml4LXdvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ3RELE9BQU8sRUFBZSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLFFBQVEsTUFBTSx5Q0FBeUMsQ0FBQztBQUUvRCxTQUFTLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQzFCLE1BQU0sRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUMsR0FHbEMsS0FBSyxDQUFDLElBQUksQ0FBQztJQUMvRCxJQUFJLENBQUM7UUFDSCxzQkFBc0I7UUFDdEIsZ0ZBQWdGO1FBQ2hGLE1BQU0sQ0FBQyxHQUFhLEVBQUUsQ0FBQztRQUN2QixNQUFNLENBQUMsR0FBYSxFQUFFLENBQUM7UUFDdkIsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDcEMsc0JBQXNCO1FBQ3RCLHNCQUFzQjtRQUV0QixNQUFNLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVyRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzNCLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDbEMsSUFB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QUUsRUFBRSxDQUFDO2dCQUNMLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxNQUFNLGFBQWEsR0FBRyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRCxXQUFXLENBQUMsRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxXQUFXLENBQUMsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUMxQixDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uLCBpc05pbH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge0tub3duTWV0cmljcywgTWVhc3VyZSwgaXNCaXRBcnJheU1ldHJpY30gZnJvbSAnLi4vdHlwZWQtbWV0cmljcyc7XG5pbXBvcnQgQml0QXJyYXkgZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvYml0LWFycmF5JztcbmltcG9ydCB7RGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZH0gZnJvbSAnLi90eXBlcyc7XG5vbm1lc3NhZ2UgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgY29uc3Qge3ZhbHVlcywgc3RhcnRJZHgsIGVuZElkeCwgdGhyZXNob2xkLCBmbk5hbWVzLCBvcHRzLCBhZ2dyZWdhdGlvbk1ldGhvZCwgd2VpZ2h0c306XG4gICAge3ZhbHVlczogQXJyYXk8YW55W10+LCBzdGFydElkeDogbnVtYmVyLCBlbmRJZHg6IG51bWJlcixcbiAgICAgIHRocmVzaG9sZDogbnVtYmVyLCBmbk5hbWVzOiBLbm93bk1ldHJpY3NbXSwgb3B0czogYW55W10sIHdlaWdodHM6IG51bWJlcltdLFxuICAgICAgYWdncmVnYXRpb25NZXRob2Q6IERpc3RhbmNlQWdncmVnYXRpb25NZXRob2R9ID0gZXZlbnQuZGF0YTtcbiAgdHJ5IHtcbiAgICAvLyBpZiAoc3RhcnRJZHggIT0gLTEpXG4gICAgLy8gICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGluIHNwYXJzZSBtYXRyaXggd29ya2VyJyk7IC8vIFRPRE86IHJlbW92ZSB0aGlzIGxpbmVcbiAgICBjb25zdCBpOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IGo6IG51bWJlcltdID0gW107XG4gICAgY29uc3QgZGlzdGFuY2VzOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IGNodW5rU2l6ZSA9IGVuZElkeCAtIHN0YXJ0SWR4O1xuICAgIC8vY29uc3QgbWkgPSBzdGFydFJvdztcbiAgICAvL2NvbnN0IG1qID0gc3RhcnRDb2w7XG5cbiAgICBjb25zdCBhZ2dyZWdhdGUgPSBnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uKGFnZ3JlZ2F0aW9uTWV0aG9kLCB3ZWlnaHRzKTtcblxuICAgIHZhbHVlcy5mb3JFYWNoKCh2LCBjb2xJZHgpID0+IHtcbiAgICAgIGlmIChpc0JpdEFycmF5TWV0cmljKGZuTmFtZXNbY29sSWR4XSkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgaWYgKGlzTmlsKHZbaV0pKSBjb250aW51ZTtcbiAgICAgICAgICB2YWx1ZXNbY29sSWR4XVtpXSA9IG5ldyBCaXRBcnJheSh2YWx1ZXNbY29sSWR4XVtpXS5fZGF0YSwgdmFsdWVzW2NvbElkeF1baV0uX2xlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgY250ID0gMDtcbiAgICBjb25zdCBkaXN0YW5jZUZucyA9IG5ldyBBcnJheShmbk5hbWVzLmxlbmd0aCkuZmlsbChudWxsKS5tYXAoKF8sIGkpID0+IG5ldyBNZWFzdXJlKGZuTmFtZXNbaV0pLmdldE1lYXN1cmUob3B0c1tpXSkpO1xuICAgIGNvbnN0IHN0YXJ0Um93ID0gdmFsdWVzWzBdLmxlbmd0aCAtIDIgLSBNYXRoLmZsb29yKFxuICAgICAgTWF0aC5zcXJ0KC04ICogc3RhcnRJZHggKyA0ICogdmFsdWVzWzBdLmxlbmd0aCAqICh2YWx1ZXNbMF0ubGVuZ3RoIC0gMSkgLSA3KSAvIDIgLSAwLjUpO1xuICAgIGNvbnN0IHN0YXJ0Q29sID0gc3RhcnRJZHggLSB2YWx1ZXNbMF0ubGVuZ3RoICogc3RhcnRSb3cgKyBNYXRoLmZsb29yKChzdGFydFJvdyArIDEpICogKHN0YXJ0Um93ICsgMikgLyAyKTtcbiAgICBsZXQgbWkgPSBzdGFydFJvdztcbiAgICBsZXQgbWogPSBzdGFydENvbDtcbiAgICB3aGlsZSAoY250IDwgY2h1bmtTaXplKSB7XG4gICAgICAvL2NvbnN0IHZhbHVlID0gc2VxMUxpc3RbbWldICYmIHNlcTFMaXN0W21qXSA/IGhhbW1pbmcoc2VxMUxpc3RbbWldLCBzZXExTGlzdFttal0pIDogMDtcbiAgICAgIGNvbnN0IGRpc3RhbmNlVmFsdWVzID0gZGlzdGFuY2VGbnMubWFwKChmbiwgaWR4KSA9PiAhaXNOaWwodmFsdWVzW2lkeF1bbWldKSAmJiAhaXNOaWwodmFsdWVzW2lkeF1bbWpdKSA/XG4gICAgICAgIGZuKHZhbHVlc1tpZHhdW21pXSwgdmFsdWVzW2lkeF1bbWpdKSA6IDEpO1xuICAgICAgY29uc3QgdmFsdWUgPSBkaXN0YW5jZVZhbHVlcy5sZW5ndGggPT09IDEgPyBkaXN0YW5jZVZhbHVlc1swXSA6IGFnZ3JlZ2F0ZShkaXN0YW5jZVZhbHVlcyk7XG4gICAgICBpZiAoMSAtIHZhbHVlID49IHRocmVzaG9sZCkge1xuICAgICAgICBpLnB1c2gobWkpO1xuICAgICAgICBqLnB1c2gobWopO1xuICAgICAgICBkaXN0YW5jZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBjbnQrKztcbiAgICAgIG1qKys7XG4gICAgICBpZiAobWogPT09IHZhbHVlc1swXS5sZW5ndGgpIHtcbiAgICAgICAgbWkrKztcbiAgICAgICAgbWogPSBtaSArIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaUFycmF5ID0gbmV3IEludDMyQXJyYXkoaSk7XG4gICAgY29uc3QgakFycmF5ID0gbmV3IEludDMyQXJyYXkoaik7XG4gICAgY29uc3QgZGlzdGFuY2VBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoZGlzdGFuY2VzKTtcbiAgICBwb3N0TWVzc2FnZSh7aTogaUFycmF5LCBqOiBqQXJyYXksIGRpc3RhbmNlOiBkaXN0YW5jZUFycmF5fSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwb3N0TWVzc2FnZSh7ZXJyb3I6IGV9KTtcbiAgfVxufTtcbiJdfQ==","// 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__(4111)))\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\t111: 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","threshold","fnNames","opts","aggregationMethod","weights","data","i","j","distances","chunkSize","aggregate","MANHATTAN","vs","reduce","acc","val","idx","sum","Math","sqrt","getAggregationFunction","forEach","v","colIdx","length","_data","_length","cnt","distanceFns","Array","fill","map","_","getMeasure","startRow","floor","startCol","mi","mj","distanceValues","fn","value","push","iArray","Int32Array","jArray","distanceArray","Float32Array","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","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","bind","moreModules","runtime","pop","then"],"sourceRoot":""}
package/dist/216.js CHANGED
@@ -1,2 +1,2 @@
1
1
  var peptides;(()=>{"use strict";({2216:function(){var t=this&&this.__awaiter||function(t,n,e,a){return new(e||(e=Promise))((function(o,r){function i(t){try{c(a.next(t))}catch(t){r(t)}}function s(t){try{c(a.throw(t))}catch(t){r(t)}}function c(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(i,s)}c((a=a.apply(t,n||[])).next())}))};onmessage=n=>t(void 0,void 0,void 0,(function*(){var t,e;const{startIdx:a,endIdx:o,activityArray:r,monomerInfoArray:i,settings:s,currentTargetIdx:c}=n.data,l=[],f=[],d=[],h=o-a;let u=0;const v=r.length-2-Math.floor(Math.sqrt(-8*a+4*r.length*(r.length-1)-7)/2-.5);let p=v,g=a-r.length*v+Math.floor((v+1)*(v+2)/2);const w=new Array(i.length);for(;u<h;){if(-1===c||(null===(t=s.targetCol)||void 0===t?void 0:t.rawData[p])===c&&(null===(e=s.targetCol)||void 0===e?void 0:e.rawData[g])===c){let t=0;const n=r[p]-r[g];if(Math.abs(n)>=s.minActivityDelta){let n=!1,e=0;for(const a of i)if(a.rawData[p]!==a.rawData[g]){if(t++,n=t>s.maxMutations,n)break;w[e++]={pos:a.name,seq1Idx:p,seq2Idx:g}}if(!n&&0!==t)for(let t=0;t<e;t++){const n=w[t].pos;l.push(n),f.push(p),d.push(g)}}}u++,g++,g===r.length&&(p++,g=p+1)}postMessage({pos:l,seq1Idxs:new Uint32Array(f),seq2Idxs:new Uint32Array(d)})}))}})[2216](),peptides={}})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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MUJDLFNBQVUsSUFBSTJCLFlBQVkzQixJQUVsQyxHLElDbkVvQixRLFNBRE0sQ0FBQyxDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9zcmMvd29ya2Vycy9tdXRhdGlvbi1jbGlmZnMtd29ya2VyLnRzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xub25tZXNzYWdlID0gKGV2ZW50KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIGNvbnN0IHsgc3RhcnRJZHgsIGVuZElkeCwgYWN0aXZpdHlBcnJheSwgbW9ub21lckluZm9BcnJheSwgc2V0dGluZ3MsIGN1cnJlbnRUYXJnZXRJZHggfSA9IGV2ZW50LmRhdGE7XG4gICAgY29uc3QgcG9zID0gW107XG4gICAgY29uc3Qgc2VxMUlkeHMgPSBbXTtcbiAgICBjb25zdCBzZXEySWR4cyA9IFtdO1xuICAgIGNvbnN0IGNodW5rU2l6ZSA9IGVuZElkeCAtIHN0YXJ0SWR4O1xuICAgIGxldCBjbnQgPSAwO1xuICAgIGNvbnN0IHN0YXJ0Um93ID0gYWN0aXZpdHlBcnJheS5sZW5ndGggLSAyIC0gTWF0aC5mbG9vcihNYXRoLnNxcnQoLTggKiBzdGFydElkeCArIDQgKiBhY3Rpdml0eUFycmF5Lmxlbmd0aCAqIChhY3Rpdml0eUFycmF5Lmxlbmd0aCAtIDEpIC0gNykgLyAyIC0gMC41KTtcbiAgICBjb25zdCBzdGFydENvbCA9IHN0YXJ0SWR4IC0gYWN0aXZpdHlBcnJheS5sZW5ndGggKiBzdGFydFJvdyArIE1hdGguZmxvb3IoKHN0YXJ0Um93ICsgMSkgKiAoc3RhcnRSb3cgKyAyKSAvIDIpO1xuICAgIGxldCBzZXExSWR4ID0gc3RhcnRSb3c7XG4gICAgbGV0IHNlcTJJZHggPSBzdGFydENvbDtcbiAgICBjb25zdCB0ZW1wRGF0YSA9IG5ldyBBcnJheShtb25vbWVySW5mb0FycmF5Lmxlbmd0aCk7XG4gICAgd2hpbGUgKGNudCA8IGNodW5rU2l6ZSkge1xuICAgICAgICBpZiAoIShjdXJyZW50VGFyZ2V0SWR4ICE9PSAtMSAmJiAoKChfYSA9IHNldHRpbmdzLnRhcmdldENvbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJhd0RhdGFbc2VxMUlkeF0pICE9PSBjdXJyZW50VGFyZ2V0SWR4IHx8XG4gICAgICAgICAgICAoKF9iID0gc2V0dGluZ3MudGFyZ2V0Q29sKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucmF3RGF0YVtzZXEySWR4XSkgIT09IGN1cnJlbnRUYXJnZXRJZHgpKSkge1xuICAgICAgICAgICAgbGV0IHN1YnN0Q291bnRlciA9IDA7XG4gICAgICAgICAgICBjb25zdCBhY3Rpdml0eVZhbFNlcTEgPSBhY3Rpdml0eUFycmF5W3NlcTFJZHhdO1xuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHlWYWxTZXEyID0gYWN0aXZpdHlBcnJheVtzZXEySWR4XTtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gYWN0aXZpdHlWYWxTZXExIC0gYWN0aXZpdHlWYWxTZXEyO1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRlbHRhKSA+PSBzZXR0aW5ncy5taW5BY3Rpdml0eURlbHRhKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN1YnN0Q291bnRlckZsYWcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgdGVtcERhdGFJZHggPSAwO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbW9ub21lckluZm8gb2YgbW9ub21lckluZm9BcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXExY2F0ZWdvcnlJZHggPSBtb25vbWVySW5mby5yYXdEYXRhW3NlcTFJZHhdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXEyY2F0ZWdvcnlJZHggPSBtb25vbWVySW5mby5yYXdEYXRhW3NlcTJJZHhdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VxMWNhdGVnb3J5SWR4ID09PSBzZXEyY2F0ZWdvcnlJZHgpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic3RDb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIHN1YnN0Q291bnRlckZsYWcgPSBzdWJzdENvdW50ZXIgPiBzZXR0aW5ncy5tYXhNdXRhdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzdENvdW50ZXJGbGFnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhW3RlbXBEYXRhSWR4KytdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiBtb25vbWVySW5mby5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMUlkeDogc2VxMUlkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTJJZHg6IHNlcTJJZHgsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghKHN1YnN0Q291bnRlckZsYWcgfHwgc3Vic3RDb3VudGVyID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlbXBEYXRhSWR4OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBEYXRhRWxlbWVudCA9IHRlbXBEYXRhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0ZW1wRGF0YUVsZW1lbnQucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zLnB1c2gocG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VxMUlkeHMucHVzaChzZXExSWR4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcTJJZHhzLnB1c2goc2VxMklkeCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY250Kys7XG4gICAgICAgIHNlcTJJZHgrKztcbiAgICAgICAgaWYgKHNlcTJJZHggPT09IGFjdGl2aXR5QXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXExSWR4Kys7XG4gICAgICAgICAgICBzZXEySWR4ID0gc2VxMUlkeCArIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcG9zdE1lc3NhZ2Uoe1xuICAgICAgICBwb3M6IHBvcyxcbiAgICAgICAgc2VxMUlkeHM6IG5ldyBVaW50MzJBcnJheShzZXExSWR4cyksXG4gICAgICAgIHNlcTJJZHhzOiBuZXcgVWludDMyQXJyYXkoc2VxMklkeHMpLFxuICAgIH0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liWFYwWVhScGIyNHRZMnhwWm1aekxYZHZjbXRsY2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbTExZEdGMGFXOXVMV05zYVdabWN5MTNiM0pyWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN096dEJRVUZCTEZOQlFWTXNSMEZCUnl4RFFVRlBMRXRCUVVzc1JVRkJhVUlzUlVGQlJUczdTVUZEZWtNc1RVRkJUU3hGUVVGRExGRkJRVkVzUlVGQlJTeE5RVUZOTEVWQlFVVXNZVUZCWVN4RlFVRkZMR2RDUVVGblFpeEZRVUZGTEZGQlFWRXNSVUZCUlN4blFrRkJaMElzUlVGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNN1NVRkRia2NzVFVGQlRTeEhRVUZITEVkQlFXRXNSVUZCUlN4RFFVRkRPMGxCUTNwQ0xFMUJRVTBzVVVGQlVTeEhRVUZoTEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhOUVVGTkxGRkJRVkVzUjBGQllTeEZRVUZGTEVOQlFVTTdTVUZET1VJc1RVRkJUU3hUUVVGVExFZEJRVWNzVFVGQlRTeEhRVUZITEZGQlFWRXNRMEZCUXp0SlFVTndReXhKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEV2l4TlFVRk5MRkZCUVZFc1IwRkJSeXhoUVVGaExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVOd1JDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExGRkJRVkVzUjBGQlJ5eERRVUZETEVkQlFVY3NZVUZCWVN4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExHRkJRV0VzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJ4SExFMUJRVTBzVVVGQlVTeEhRVUZITEZGQlFWRXNSMEZCUnl4aFFVRmhMRU5CUVVNc1RVRkJUU3hIUVVGSExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1VVRkJVU3hIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6bEhMRWxCUVVrc1QwRkJUeXhIUVVGSExGRkJRVkVzUTBGQlF6dEpRVU4yUWl4SlFVRkpMRTlCUVU4c1IwRkJSeXhSUVVGUkxFTkJRVU03U1VGRGRrSXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hMUVVGTExFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03U1VGRGNFUXNUMEZCVHl4SFFVRkhMRWRCUVVjc1UwRkJVeXhGUVVGRkxFTkJRVU03VVVGRGRrSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1owSkJRV2RDTEV0QlFVc3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGQkxFMUJRVUVzVVVGQlVTeERRVUZETEZOQlFWTXNNRU5CUVVVc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZMTEdkQ1FVRm5RanRaUVVONlJpeERRVUZCTEUxQlFVRXNVVUZCVVN4RFFVRkRMRk5CUVZNc01FTkJRVVVzVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRkxMR2RDUVVGblFpeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRPMWxCUXpsRUxFbEJRVWtzV1VGQldTeEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTnlRaXhOUVVGTkxHVkJRV1VzUjBGQlJ5eGhRVUZoTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1dVRkRMME1zVFVGQlRTeGxRVUZsTEVkQlFVY3NZVUZCWVN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xbEJReTlETEUxQlFVMHNTMEZCU3l4SFFVRkhMR1ZCUVdVc1IwRkJSeXhsUVVGbExFTkJRVU03V1VGRGFFUXNTVUZCU1N4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEZGQlFWRXNRMEZCUXl4blFrRkJaMElzUlVGQlJTeERRVUZETzJkQ1FVTnFSQ3hKUVVGSkxHZENRVUZuUWl4SFFVRkhMRXRCUVVzc1EwRkJRenRuUWtGRE4wSXNTVUZCU1N4WFFVRlhMRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU53UWl4TFFVRkxMRTFCUVUwc1YwRkJWeXhKUVVGSkxHZENRVUZuUWl4RlFVRkZMRU5CUVVNN2IwSkJRek5ETEUxQlFVMHNaVUZCWlN4SFFVRkhMRmRCUVZjc1EwRkJReXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdiMEpCUTNKRUxFMUJRVTBzWlVGQlpTeEhRVUZITEZkQlFWY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03YjBKQlEzSkVMRWxCUVVrc1pVRkJaU3hMUVVGTExHVkJRV1U3ZDBKQlEzSkRMRk5CUVZNN2IwSkJSVmdzV1VGQldTeEZRVUZGTEVOQlFVTTdiMEpCUTJZc1owSkJRV2RDTEVkQlFVY3NXVUZCV1N4SFFVRkhMRkZCUVZFc1EwRkJReXhaUVVGWkxFTkJRVU03YjBKQlEzaEVMRWxCUVVrc1owSkJRV2RDTzNkQ1FVTnNRaXhOUVVGTk8yOUNRVVZTTEZGQlFWRXNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJReXhIUVVGSE8zZENRVU40UWl4SFFVRkhMRVZCUVVVc1YwRkJWeXhEUVVGRExFbEJRVWs3ZDBKQlEzSkNMRTlCUVU4c1JVRkJSU3hQUVVGUE8zZENRVU5vUWl4UFFVRlBMRVZCUVVVc1QwRkJUenR4UWtGRGFrSXNRMEZCUXp0blFrRkRTaXhEUVVGRE8yZENRVU5FTEVsQlFVa3NRMEZCUXl4RFFVRkRMR2RDUVVGblFpeEpRVUZKTEZsQlFWa3NTMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRE8yOUNRVU01UXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NWMEZCVnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU03ZDBKQlEzSkRMRTFCUVUwc1pVRkJaU3hIUVVGSExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0M1FrRkRjRU1zVFVGQlRTeFJRVUZSTEVkQlFVY3NaVUZCWlN4RFFVRkRMRWRCUVVjc1EwRkJRenQzUWtGRGNrTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dDNRa0ZEYmtJc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0M1FrRkRka0lzVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenR2UWtGRGVrSXNRMEZCUXp0blFrRkRTQ3hEUVVGRE8xbEJRMGdzUTBGQlF6dFJRVU5JTEVOQlFVTTdVVUZEUkN4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVOT0xFOUJRVThzUlVGQlJTeERRVUZETzFGQlExWXNTVUZCU1N4UFFVRlBMRXRCUVVzc1lVRkJZU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzFsQlEzSkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8xbEJRMVlzVDBGQlR5eEhRVUZITEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRlRUlzUTBGQlF6dEpRVU5JTEVOQlFVTTdTVUZEUkN4WFFVRlhMRU5CUVVNN1VVRkRWaXhIUVVGSExFVkJRVVVzUjBGQlJ6dFJRVU5TTEZGQlFWRXNSVUZCUlN4SlFVRkpMRmRCUVZjc1EwRkJReXhSUVVGUkxFTkJRVU03VVVGRGJrTXNVVUZCVVN4RlFVRkZMRWxCUVVrc1YwRkJWeXhEUVVGRExGRkJRVkVzUTBGQlF6dExRVU53UXl4RFFVRkRMRU5CUVVNN1FVRkRUQ3hEUVVGRExFTkJRVUVzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbTl1YldWemMyRm5aU0E5SUdGemVXNWpJQ2hsZG1WdWRDazZJRkJ5YjIxcGMyVThkbTlwWkQ0Z1BUNGdlMXh1SUNCamIyNXpkQ0I3YzNSaGNuUkpaSGdzSUdWdVpFbGtlQ3dnWVdOMGFYWnBkSGxCY25KaGVTd2diVzl1YjIxbGNrbHVabTlCY25KaGVTd2djMlYwZEdsdVozTXNJR04xY25KbGJuUlVZWEpuWlhSSlpIaDlJRDBnWlhabGJuUXVaR0YwWVR0Y2JpQWdZMjl1YzNRZ2NHOXpPaUJ6ZEhKcGJtZGJYU0E5SUZ0ZE8xeHVJQ0JqYjI1emRDQnpaWEV4U1dSNGN6b2diblZ0WW1WeVcxMGdQU0JiWFR0Y2JpQWdZMjl1YzNRZ2MyVnhNa2xrZUhNNklHNTFiV0psY2x0ZElEMGdXMTA3WEc0Z0lHTnZibk4wSUdOb2RXNXJVMmw2WlNBOUlHVnVaRWxrZUNBdElITjBZWEowU1dSNE8xeHVJQ0JzWlhRZ1kyNTBJRDBnTUR0Y2JpQWdZMjl1YzNRZ2MzUmhjblJTYjNjZ1BTQmhZM1JwZG1sMGVVRnljbUY1TG14bGJtZDBhQ0F0SURJZ0xTQk5ZWFJvTG1ac2IyOXlLRnh1SUNBZ0lFMWhkR2d1YzNGeWRDZ3RPQ0FxSUhOMFlYSjBTV1I0SUNzZ05DQXFJR0ZqZEdsMmFYUjVRWEp5WVhrdWJHVnVaM1JvSUNvZ0tHRmpkR2wyYVhSNVFYSnlZWGt1YkdWdVozUm9JQzBnTVNrZ0xTQTNLU0F2SURJZ0xTQXdMalVwTzF4dUlDQmpiMjV6ZENCemRHRnlkRU52YkNBOUlITjBZWEowU1dSNElDMGdZV04wYVhacGRIbEJjbkpoZVM1c1pXNW5kR2dnS2lCemRHRnlkRkp2ZHlBcklFMWhkR2d1Wm14dmIzSW9LSE4wWVhKMFVtOTNJQ3NnTVNrZ0tpQW9jM1JoY25SU2IzY2dLeUF5S1NBdklESXBPMXh1SUNCc1pYUWdjMlZ4TVVsa2VDQTlJSE4wWVhKMFVtOTNPMXh1SUNCc1pYUWdjMlZ4TWtsa2VDQTlJSE4wWVhKMFEyOXNPMXh1SUNCamIyNXpkQ0IwWlcxd1JHRjBZU0E5SUc1bGR5QkJjbkpoZVNodGIyNXZiV1Z5U1c1bWIwRnljbUY1TG14bGJtZDBhQ2s3WEc0Z0lIZG9hV3hsSUNoamJuUWdQQ0JqYUhWdWExTnBlbVVwSUh0Y2JpQWdJQ0JwWmlBb0lTaGpkWEp5Wlc1MFZHRnlaMlYwU1dSNElDRTlQU0F0TVNBbUppQW9jMlYwZEdsdVozTXVkR0Z5WjJWMFEyOXNQeTV5WVhkRVlYUmhXM05sY1RGSlpIaGRJQ0U5UFNCamRYSnlaVzUwVkdGeVoyVjBTV1I0SUh4OFhHNGdJQ0FnSUNCelpYUjBhVzVuY3k1MFlYSm5aWFJEYjJ3L0xuSmhkMFJoZEdGYmMyVnhNa2xrZUYwZ0lUMDlJR04xY25KbGJuUlVZWEpuWlhSSlpIZ3BLU2tnZTF4dUlDQWdJQ0FnYkdWMElITjFZbk4wUTI5MWJuUmxjaUE5SURBN1hHNGdJQ0FnSUNCamIyNXpkQ0JoWTNScGRtbDBlVlpoYkZObGNURWdQU0JoWTNScGRtbDBlVUZ5Y21GNVczTmxjVEZKWkhoZE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWVdOMGFYWnBkSGxXWVd4VFpYRXlJRDBnWVdOMGFYWnBkSGxCY25KaGVWdHpaWEV5U1dSNFhUdGNiaUFnSUNBZ0lHTnZibk4wSUdSbGJIUmhJRDBnWVdOMGFYWnBkSGxXWVd4VFpYRXhJQzBnWVdOMGFYWnBkSGxXWVd4VFpYRXlPMXh1SUNBZ0lDQWdhV1lnS0UxaGRHZ3VZV0p6S0dSbGJIUmhLU0ErUFNCelpYUjBhVzVuY3k1dGFXNUJZM1JwZG1sMGVVUmxiSFJoS1NCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0J6ZFdKemRFTnZkVzUwWlhKR2JHRm5JRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQWdJR3hsZENCMFpXMXdSR0YwWVVsa2VDQTlJREE3WEc0Z0lDQWdJQ0FnSUdadmNpQW9ZMjl1YzNRZ2JXOXViMjFsY2tsdVptOGdiMllnYlc5dWIyMWxja2x1Wm05QmNuSmhlU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhObGNURmpZWFJsWjI5eWVVbGtlQ0E5SUcxdmJtOXRaWEpKYm1adkxuSmhkMFJoZEdGYmMyVnhNVWxrZUYwN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2MyVnhNbU5oZEdWbmIzSjVTV1I0SUQwZ2JXOXViMjFsY2tsdVptOHVjbUYzUkdGMFlWdHpaWEV5U1dSNFhUdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2MyVnhNV05oZEdWbmIzSjVTV1I0SUQwOVBTQnpaWEV5WTJGMFpXZHZjbmxKWkhncFhHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmx4dUlDQWdJQ0FnSUNBZ0lITjFZbk4wUTI5MWJuUmxjaXNyTzF4dUlDQWdJQ0FnSUNBZ0lITjFZbk4wUTI5MWJuUmxja1pzWVdjZ1BTQnpkV0p6ZEVOdmRXNTBaWElnUGlCelpYUjBhVzVuY3k1dFlYaE5kWFJoZEdsdmJuTTdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tITjFZbk4wUTI5MWJuUmxja1pzWVdjcFhHNGdJQ0FnSUNBZ0lDQWdJQ0JpY21WaGF6dGNibHh1SUNBZ0lDQWdJQ0FnSUhSbGJYQkVZWFJoVzNSbGJYQkVZWFJoU1dSNEt5dGRJRDBnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjRzl6T2lCdGIyNXZiV1Z5U1c1bWJ5NXVZVzFsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdjMlZ4TVVsa2VEb2djMlZ4TVVsa2VDeGNiaUFnSUNBZ0lDQWdJQ0FnSUhObGNUSkpaSGc2SUhObGNUSkpaSGdzWEc0Z0lDQWdJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JwWmlBb0lTaHpkV0p6ZEVOdmRXNTBaWEpHYkdGbklIeDhJSE4xWW5OMFEyOTFiblJsY2lBOVBUMGdNQ2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFJsYlhCRVlYUmhTV1I0T3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUhSbGJYQkVZWFJoUld4bGJXVnVkQ0E5SUhSbGJYQkVZWFJoVzJsZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjRzl6YVhScGIyNGdQU0IwWlcxd1JHRjBZVVZzWlcxbGJuUXVjRzl6TzF4dUlDQWdJQ0FnSUNBZ0lDQWdjRzl6TG5CMWMyZ29jRzl6YVhScGIyNHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2MyVnhNVWxrZUhNdWNIVnphQ2h6WlhFeFNXUjRLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lITmxjVEpKWkhoekxuQjFjMmdvYzJWeE1rbGtlQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUdOdWRDc3JPMXh1SUNBZ0lITmxjVEpKWkhnckt6dGNiaUFnSUNCcFppQW9jMlZ4TWtsa2VDQTlQVDBnWVdOMGFYWnBkSGxCY25KaGVTNXNaVzVuZEdncElIdGNiaUFnSUNBZ0lITmxjVEZKWkhnckt6dGNiaUFnSUNBZ0lITmxjVEpKWkhnZ1BTQnpaWEV4U1dSNElDc2dNVHRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjRzl6ZEUxbGMzTmhaMlVvZTF4dUlDQWdJSEJ2Y3pvZ2NHOXpMRnh1SUNBZ0lITmxjVEZKWkhoek9pQnVaWGNnVldsdWRETXlRWEp5WVhrb2MyVnhNVWxrZUhNcExGeHVJQ0FnSUhObGNUSkpaSGh6T2lCdVpYY2dWV2x1ZERNeVFYSnlZWGtvYzJWeE1rbGtlSE1wTEZ4dUlDQjlLVHRjYm4wN1hHNGlYWDA9IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSB7fTtcbl9fd2VicGFja19tb2R1bGVzX19bMjIxNl0oKTtcbiJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJ2YWx1ZSIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIm9ubWVzc2FnZSIsImV2ZW50IiwiX2EiLCJfYiIsInN0YXJ0SWR4IiwiZW5kSWR4IiwiYWN0aXZpdHlBcnJheSIsIm1vbm9tZXJJbmZvQXJyYXkiLCJzZXR0aW5ncyIsImN1cnJlbnRUYXJnZXRJZHgiLCJkYXRhIiwicG9zIiwic2VxMUlkeHMiLCJzZXEySWR4cyIsImNodW5rU2l6ZSIsImNudCIsInN0YXJ0Um93IiwibGVuZ3RoIiwiTWF0aCIsImZsb29yIiwic3FydCIsInNlcTFJZHgiLCJzZXEySWR4IiwidGVtcERhdGEiLCJBcnJheSIsInRhcmdldENvbCIsInJhd0RhdGEiLCJzdWJzdENvdW50ZXIiLCJkZWx0YSIsImFicyIsIm1pbkFjdGl2aXR5RGVsdGEiLCJzdWJzdENvdW50ZXJGbGFnIiwidGVtcERhdGFJZHgiLCJtb25vbWVySW5mbyIsIm1heE11dGF0aW9ucyIsIm5hbWUiLCJpIiwicG9zaXRpb24iLCJwdXNoIiwicG9zdE1lc3NhZ2UiLCJVaW50MzJBcnJheSJdLCJzb3VyY2VSb290IjoiIn0=
2
+ //# sourceMappingURL=216.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"216.js","mappings":"kXAAAA,UAAmBC,GAAyB,OAAD,6B,QACzC,MAAM,SAACC,EAAQ,OAAEC,EAAM,cAAEC,EAAa,iBAAEC,EAAgB,SAAEC,EAAQ,iBAAEC,GAAoBN,EAAMO,KACxFC,EAAgB,GAChBC,EAAqB,GACrBC,EAAqB,GACrBC,EAAYT,EAASD,EAC3B,IAAIW,EAAM,EACV,MAAMC,EAAWV,EAAcW,OAAS,EAAIC,KAAKC,MAC/CD,KAAKE,MAAM,EAAIhB,EAAW,EAAIE,EAAcW,QAAUX,EAAcW,OAAS,GAAK,GAAK,EAAI,IAE7F,IAAII,EAAUL,EACVM,EAFalB,EAAWE,EAAcW,OAASD,EAAWE,KAAKC,OAAOH,EAAW,IAAMA,EAAW,GAAK,GAG3G,MAAMO,EAAW,IAAIC,MAAMjB,EAAiBU,QAC5C,KAAOF,EAAMD,GAAW,CACtB,IAA4B,IAAtBL,IAA8C,QAAlB,EAAAD,EAASiB,iBAAS,eAAEC,QAAQL,MAAaZ,IACvD,QAAlB,EAAAD,EAASiB,iBAAS,eAAEC,QAAQJ,MAAab,EAAoB,CAC7D,IAAIkB,EAAe,EACnB,MAEMC,EAFkBtB,EAAce,GACdf,EAAcgB,GAEtC,GAAIJ,KAAKW,IAAID,IAAUpB,EAASsB,iBAAkB,CAChD,IAAIC,GAAmB,EACnBC,EAAc,EAClB,IAAK,MAAMC,KAAe1B,EAGxB,GAFwB0B,EAAYP,QAAQL,KACpBY,EAAYP,QAAQJ,GAC5C,CAKA,GAFAK,IACAI,EAAmBJ,EAAenB,EAAS0B,aACvCH,EACF,MAEFR,EAASS,KAAiB,CACxBrB,IAAKsB,EAAYE,KACjBd,QAASA,EACTC,QAASA,EAVD,CAaZ,IAAMS,GAAqC,IAAjBJ,EACxB,IAAK,IAAIS,EAAI,EAAGA,EAAIJ,EAAaI,IAAK,CACpC,MACMC,EADkBd,EAASa,GACAzB,IACjCA,EAAI2B,KAAKD,GACTzB,EAAS0B,KAAKjB,GACdR,EAASyB,KAAKhB,EAChB,CAEJ,CACF,CACAP,IACAO,IACIA,IAAYhB,EAAcW,SAC5BI,IACAC,EAAUD,EAAU,EAExB,CACAkB,YAAY,CACV5B,IAAKA,EACLC,SAAU,IAAI4B,YAAY5B,GAC1BC,SAAU,IAAI2B,YAAY3B,IAE9B,G,IC3DoB,Q,SADM,CAAC,C","sources":["webpack://peptides/./src/workers/mutation-cliffs-worker.ts","webpack://peptides/webpack/startup"],"sourcesContent":["onmessage = async (event): Promise<void> => {\n const {startIdx, endIdx, activityArray, monomerInfoArray, settings, currentTargetIdx} = event.data;\n const pos: string[] = [];\n const seq1Idxs: number[] = [];\n const seq2Idxs: number[] = [];\n const chunkSize = endIdx - startIdx;\n let cnt = 0;\n const startRow = activityArray.length - 2 - Math.floor(\n Math.sqrt(-8 * startIdx + 4 * activityArray.length * (activityArray.length - 1) - 7) / 2 - 0.5);\n const startCol = startIdx - activityArray.length * startRow + Math.floor((startRow + 1) * (startRow + 2) / 2);\n let seq1Idx = startRow;\n let seq2Idx = startCol;\n const tempData = new Array(monomerInfoArray.length);\n while (cnt < chunkSize) {\n if (!(currentTargetIdx !== -1 && (settings.targetCol?.rawData[seq1Idx] !== currentTargetIdx ||\n settings.targetCol?.rawData[seq2Idx] !== currentTargetIdx))) {\n let substCounter = 0;\n const activityValSeq1 = activityArray[seq1Idx];\n const activityValSeq2 = activityArray[seq2Idx];\n const delta = activityValSeq1 - activityValSeq2;\n if (Math.abs(delta) >= settings.minActivityDelta) {\n let substCounterFlag = false;\n let tempDataIdx = 0;\n for (const monomerInfo of monomerInfoArray) {\n const seq1categoryIdx = monomerInfo.rawData[seq1Idx];\n const seq2categoryIdx = monomerInfo.rawData[seq2Idx];\n if (seq1categoryIdx === seq2categoryIdx)\n continue;\n\n substCounter++;\n substCounterFlag = substCounter > settings.maxMutations;\n if (substCounterFlag)\n break;\n\n tempData[tempDataIdx++] = {\n pos: monomerInfo.name,\n seq1Idx: seq1Idx,\n seq2Idx: seq2Idx,\n };\n }\n if (!(substCounterFlag || substCounter === 0)) {\n for (let i = 0; i < tempDataIdx; i++) {\n const tempDataElement = tempData[i];\n const position = tempDataElement.pos;\n pos.push(position);\n seq1Idxs.push(seq1Idx);\n seq2Idxs.push(seq2Idx);\n }\n }\n }\n }\n cnt++;\n seq2Idx++;\n if (seq2Idx === activityArray.length) {\n seq1Idx++;\n seq2Idx = seq1Idx + 1;\n }\n }\n postMessage({\n pos: pos,\n seq1Idxs: new Uint32Array(seq1Idxs),\n seq2Idxs: new Uint32Array(seq2Idxs),\n });\n};\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = {};\n__webpack_modules__[2216]();\n"],"names":["onmessage","event","startIdx","endIdx","activityArray","monomerInfoArray","settings","currentTargetIdx","data","pos","seq1Idxs","seq2Idxs","chunkSize","cnt","startRow","length","Math","floor","sqrt","seq1Idx","seq2Idx","tempData","Array","targetCol","rawData","substCounter","delta","abs","minActivityDelta","substCounterFlag","tempDataIdx","monomerInfo","maxMutations","name","i","position","push","postMessage","Uint32Array"],"sourceRoot":""}