@datagrok/peptides 1.17.4 → 1.17.5

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,6 +1,10 @@
1
1
  # Peptides changelog
2
2
 
3
- ## 1.17.3 (WIP)
3
+ ## 1.17.5 (2024-02-15)
4
+
5
+ Added MCL clustering to peptide analysis.
6
+
7
+ ## 1.17.3 (2024-02-01)
4
8
 
5
9
  * Sequence space random seeding for reproducibility.
6
10
  * Use of generated clusters for summery web logo table.
package/dist/23.js ADDED
@@ -0,0 +1,2 @@
1
+ var peptides;(()=>{"use strict";var e,r,t={5023:(e,r,t)=>{var n=t(7862);const o=e=>null==e;var a=t(577),s=t(9657);onmessage=async e=>{const{values:r,startIdx:t,endIdx:i,threshold:c,fnNames:p,opts:l,aggregationMethod:h,weights:u}=e.data;try{const e=[],f=[],g=[],v=i-t,d=function(e,r){return e===n.y.MANHATTAN?e=>e.reduce(((e,t,n)=>e+t*r[n]),0):e=>{const t=e.reduce(((e,t,n)=>e+(t*r[n])**2),0);return Math.sqrt(t)}}(h,u);r.forEach(((e,t)=>{if((0,a.sQ)(p[t]))for(let n=0;n<e.length;++n)o(e[n])||(r[t][n]=new s.Z(r[t][n]._data,r[t][n]._length))}));let w=0;const y=new Array(p.length).fill(null).map(((e,r)=>new a.UH(p[r]).getMeasure(l[r]))),b=r[0].length-2-Math.floor(Math.sqrt(-8*t+4*r[0].length*(r[0].length-1)-7)/2-.5),m=t-r[0].length*b+Math.floor((b+1)*(b+2)/2);let x=b,O=m;for(;w<v;){const t=y.map(((e,t)=>o(r[t][x])||o(r[t][O])?1:e(r[t][x],r[t][O]))),n=1===t.length?t[0]:d(t);1-n>=c&&(e.push(x),f.push(O),g.push(n)),w++,O++,O===r[0].length&&(x++,O=x+1)}const M=new Int32Array(e),j=new Int32Array(f),A=new Float32Array(g);postMessage({i:M,j,distance:A})}catch(e){postMessage({error:e})}}}},n={};function o(e){var r=n[e];if(void 0!==r)return r.exports;var a=n[e]={exports:{}};return t[e](a,a.exports,o),a.exports}o.m=t,o.x=()=>{var e=o.O(void 0,[301],(()=>o(5023)));return o.O(e)},e=[],o.O=(r,t,n,a)=>{if(!t){var s=1/0;for(l=0;l<e.length;l++){for(var[t,n,a]=e[l],i=!0,c=0;c<t.length;c++)(!1&a||s>=a)&&Object.keys(o.O).every((e=>o.O[e](t[c])))?t.splice(c--,1):(i=!1,a<s&&(s=a));if(i){e.splice(l--,1);var p=n();void 0!==p&&(r=p)}}return r}a=a||0;for(var l=e.length;l>0&&e[l-1][2]>a;l--)e[l]=e[l-1];e[l]=[t,n,a]},o.d=(e,r)=>{for(var t in r)o.o(r,t)&&!o.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce(((r,t)=>(o.f[t](e,r),r)),[])),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,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e;o.g.importScripts&&(e=o.g.location+"");var r=o.g.document;if(!e&&r&&(r.currentScript&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var n=t.length-1;n>-1&&!e;)e=t[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={23:1};o.f.i=(r,t)=>{e[r]||importScripts(o.p+o.u(r))};var r=self.webpackChunkpeptides=self.webpackChunkpeptides||[],t=r.push.bind(r);r.push=r=>{var[n,a,s]=r;for(var i in a)o.o(a,i)&&(o.m[i]=a[i]);for(s&&s(o);n.length;)e[n.pop()]=1;t(r)}})(),r=o.x,o.x=()=>o.e(301).then(r);var a=o.x();peptides=a})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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S2dHLEdBRXhELENBSUQsSUFBS0wsRUFBVyxNQUFNLElBQUlRLE1BQU0seURBQ2hDUixFQUFZQSxFQUFVUyxRQUFRLE9BQVEsSUFBSUEsUUFBUSxRQUFTLElBQUlBLFFBQVEsWUFBYSxLQUNwRnJELEVBQW9Cc0QsRUFBSVYsQyxXQ2R4QixJQUFJVyxFQUFrQixDQUNyQixHQUFJLEdBZ0JMdkQsRUFBb0I0QixFQUFFM0UsRUFBSSxDQUFDNEUsRUFBU0csS0FFL0J1QixFQUFnQjFCLElBRWxCZ0IsY0FBYzdDLEVBQW9Cc0QsRUFBSXRELEVBQW9CaUMsRUFBRUosR0FFOUQsRUFHRCxJQUFJMkIsRUFBcUJDLEtBQTJCLHFCQUFJQSxLQUEyQixzQkFBSyxHQUNwRkMsRUFBNkJGLEVBQW1CbkUsS0FBS3NFLEtBQUtILEdBQzlEQSxFQUFtQm5FLEtBdkJDckMsSUFDbkIsSUFBSzJELEVBQVVpRCxFQUFhQyxHQUFXN0csRUFDdkMsSUFBSSxJQUFJaUQsS0FBWTJELEVBQ2hCNUQsRUFBb0J3QixFQUFFb0MsRUFBYTNELEtBQ3JDRCxFQUFvQk8sRUFBRU4sR0FBWTJELEVBQVkzRCxJQUloRCxJQURHNEQsR0FBU0EsRUFBUTdELEdBQ2RXLEVBQVN4QyxRQUNkb0YsRUFBZ0I1QyxFQUFTbUQsT0FBUyxFQUNuQ0osRUFBMkIxRyxFQUFLLEMsS1ZuQjdCZCxFQUFPOEQsRUFBb0I1RCxFQUMvQjRELEVBQW9CNUQsRUFBSSxJQUNoQjRELEVBQW9CSCxFQUFFLEtBQUtrRSxLQUFLN0gsR1dEeEMsSUFBSXNFLEVBQXNCUixFQUFvQjVELEkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvY2h1bmsgbG9hZGVkIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9zdGFydHVwIGNodW5rIGRlcGVuZGVuY2llcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9kaXN0YW5jZS1tYXRyaXgvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvZGlzdGFuY2UtbWF0cml4L3NwYXJzZS1tYXRyaXgtd29ya2VyLmpzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvZW5zdXJlIGNodW5rIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCBjaHVuayBmaWxlbmFtZSIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL3B1YmxpY1BhdGgiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2ltcG9ydFNjcmlwdHMgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRlZmVycmVkID0gW107XG5fX3dlYnBhY2tfcmVxdWlyZV9fLk8gPSAocmVzdWx0LCBjaHVua0lkcywgZm4sIHByaW9yaXR5KSA9PiB7XG5cdGlmKGNodW5rSWRzKSB7XG5cdFx0cHJpb3JpdHkgPSBwcmlvcml0eSB8fCAwO1xuXHRcdGZvcih2YXIgaSA9IGRlZmVycmVkLmxlbmd0aDsgaSA+IDAgJiYgZGVmZXJyZWRbaSAtIDFdWzJdID4gcHJpb3JpdHk7IGktLSkgZGVmZXJyZWRbaV0gPSBkZWZlcnJlZFtpIC0gMV07XG5cdFx0ZGVmZXJyZWRbaV0gPSBbY2h1bmtJZHMsIGZuLCBwcmlvcml0eV07XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHZhciBub3RGdWxmaWxsZWQgPSBJbmZpbml0eTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZWZlcnJlZC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBbY2h1bmtJZHMsIGZuLCBwcmlvcml0eV0gPSBkZWZlcnJlZFtpXTtcblx0XHR2YXIgZnVsZmlsbGVkID0gdHJ1ZTtcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGNodW5rSWRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRpZiAoKHByaW9yaXR5ICYgMSA9PT0gMCB8fCBub3RGdWxmaWxsZWQgPj0gcHJpb3JpdHkpICYmIE9iamVjdC5rZXlzKF9fd2VicGFja19yZXF1aXJlX18uTykuZXZlcnkoKGtleSkgPT4gKF9fd2VicGFja19yZXF1aXJlX18uT1trZXldKGNodW5rSWRzW2pdKSkpKSB7XG5cdFx0XHRcdGNodW5rSWRzLnNwbGljZShqLS0sIDEpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZnVsZmlsbGVkID0gZmFsc2U7XG5cdFx0XHRcdGlmKHByaW9yaXR5IDwgbm90RnVsZmlsbGVkKSBub3RGdWxmaWxsZWQgPSBwcmlvcml0eTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYoZnVsZmlsbGVkKSB7XG5cdFx0XHRkZWZlcnJlZC5zcGxpY2UoaS0tLCAxKVxuXHRcdFx0dmFyIHIgPSBmbigpO1xuXHRcdFx0aWYgKHIgIT09IHVuZGVmaW5lZCkgcmVzdWx0ID0gcjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07IiwidmFyIG5leHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLng7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnggPSAoKSA9PiB7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLmUoMzAxKS50aGVuKG5leHQpO1xufTsiLCJpbXBvcnQgeyBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcyB9IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IGNvbnN0IGlzTmlsID0gKHgpID0+IHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIGluc2VydFNtYWxsZXIoZGlzdGFuY2VzQXIsIGluZGV4ZXMsIG51bSwgaW5kZXgpIHtcbiAgICBpZiAobnVtID4gZGlzdGFuY2VzQXJbZGlzdGFuY2VzQXIubGVuZ3RoIC0gMV0pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpc3RhbmNlc0FyLmZpbmRJbmRleCgodikgPT4gbnVtIDwgdik7XG4gICAgZGlzdGFuY2VzQXIucG9wKCk7XG4gICAgZGlzdGFuY2VzQXIuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBudW0pO1xuICAgIGluZGV4ZXMucG9wKCk7XG4gICAgaW5kZXhlcy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGluZGV4KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMYXJnZXIoZGlzdGFuY2VzQXIsIGluZGV4ZXMsIG51bSwgaW5kZXgpIHtcbiAgICBpZiAobnVtIDwgZGlzdGFuY2VzQXJbZGlzdGFuY2VzQXIubGVuZ3RoIC0gMV0pXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpc3RhbmNlc0FyLmZpbmRJbmRleCgodikgPT4gbnVtID4gdik7XG4gICAgZGlzdGFuY2VzQXIucG9wKCk7XG4gICAgZGlzdGFuY2VzQXIuc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBudW0pO1xuICAgIGluZGV4ZXMucG9wKCk7XG4gICAgaW5kZXhlcy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGluZGV4KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uKGFnZ3JlZ2F0aW9uTWV0aG9kLCB3ZWlnaHRzKSB7XG4gICAgc3dpdGNoIChhZ2dyZWdhdGlvbk1ldGhvZCkge1xuICAgICAgICBjYXNlIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzLk1BTkhBVFRBTjpcbiAgICAgICAgICAgIHJldHVybiAodnMpID0+IHZzLnJlZHVjZSgoYWNjLCB2YWwsIGlkeCkgPT4gYWNjICsgdmFsICogd2VpZ2h0c1tpZHhdLCAwKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAodnMpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBldWNsaWRlYW5cbiAgICAgICAgICAgICAgICBjb25zdCBzdW0gPSB2cy5yZWR1Y2UoKGFjYywgdmFsLCBpZHgpID0+IGFjYyArICh2YWwgKiB3ZWlnaHRzW2lkeF0pICoqIDIsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3VtKTtcbiAgICAgICAgICAgIH07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhScGJITXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMWRHbHNjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeFBRVUZQTEVWQlFUUkNMREJDUVVFd1FpeEZRVUZETEUxQlFVMHNVMEZCVXl4RFFVRkRPMEZCUlRsRkxFMUJRVTBzUTBGQlF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eExRVUZMTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1UwRkJVeXhEUVVGRE8wRkJSUzlFTEUxQlFVMHNWVUZCVlN4aFFVRmhMRU5CUVVNc1YwRkJjVUlzUlVGQlJTeFBRVUZwUWl4RlFVRkZMRWRCUVZjc1JVRkJSU3hMUVVGaE8wbEJRMmhITEVsQlFVa3NSMEZCUnl4SFFVRkhMRmRCUVZjc1EwRkJReXhYUVVGWExFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjZReXhQUVVGUE8wbEJSVlFzVFVGQlRTeFhRVUZYTEVkQlFVY3NWMEZCVnl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRekZFTEZkQlFWY3NRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVOc1FpeFhRVUZYTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEZUVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzBsQlEyUXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNoRExFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNXVUZCV1N4RFFVRkRMRmRCUVhGQ0xFVkJRVVVzVDBGQmFVSXNSVUZCUlN4SFFVRlhMRVZCUVVVc1MwRkJZVHRKUVVNdlJpeEpRVUZKTEVkQlFVY3NSMEZCUnl4WFFVRlhMRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVOQlFVTTdVVUZEZWtNc1QwRkJUenRKUVVWVUxFMUJRVTBzVjBGQlZ5eEhRVUZITEZkQlFWY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVNeFJDeFhRVUZYTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRiRUlzVjBGQlZ5eERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJReXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEzaERMRTlCUVU4c1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5rTEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0QlFVTjRReXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEhOQ1FVRnpRaXhEUVVOd1F5eHBRa0ZCTkVNc1JVRkJSU3hQUVVGcFFqdEpRVVV2UkN4UlFVRlJMR2xDUVVGcFFpeEZRVUZGTzFGQlEzcENMRXRCUVVzc01FSkJRVEJDTEVOQlFVTXNVMEZCVXp0WlFVTjJReXhQUVVGUExFTkJRVU1zUlVGQldTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVkQlFVY3NUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzSkdPMWxCUTBVc1QwRkJUeXhEUVVGRExFVkJRVmtzUlVGQlJTeEZRVUZGTzJkQ1FVTjBRaXhaUVVGWk8yZENRVU5hTEUxQlFVMHNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRE4wVXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzaENMRU5CUVVNc1EwRkJRenRMUVVOTU8wRkJRMGdzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpDd2dSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpITjlJR1p5YjIwZ0p5NHZkSGx3WlhNbk8xeHVYRzVsZUhCdmNuUWdZMjl1YzNRZ2FYTk9hV3dnUFNBb2VEb2dZVzU1S1NBOVBpQjRJRDA5UFNCdWRXeHNJSHg4SUhnZ1BUMDlJSFZ1WkdWbWFXNWxaRHRjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdsdWMyVnlkRk50WVd4c1pYSW9aR2x6ZEdGdVkyVnpRWEk2SUc1MWJXSmxjbHRkTENCcGJtUmxlR1Z6T2lCdWRXMWlaWEpiWFN3Z2JuVnRPaUJ1ZFcxaVpYSXNJR2x1WkdWNE9pQnVkVzFpWlhJcElIdGNiaUFnYVdZZ0tHNTFiU0ErSUdScGMzUmhibU5sYzBGeVcyUnBjM1JoYm1ObGMwRnlMbXhsYm1kMGFDMHhYU2xjYmlBZ0lDQnlaWFIxY200N1hHNWNiaUFnWTI5dWMzUWdibVYzVUc5emFYUnBiMjRnUFNCa2FYTjBZVzVqWlhOQmNpNW1hVzVrU1c1a1pYZ29LSFlwSUQwK0lHNTFiU0E4SUhZcE8xeHVJQ0JrYVhOMFlXNWpaWE5CY2k1d2IzQW9LVHRjYmlBZ1pHbHpkR0Z1WTJWelFYSXVjM0JzYVdObEtHNWxkMUJ2YzJsMGFXOXVMQ0F3TENCdWRXMHBPMXh1SUNCcGJtUmxlR1Z6TG5CdmNDZ3BPMXh1SUNCcGJtUmxlR1Z6TG5Od2JHbGpaU2h1WlhkUWIzTnBkR2x2Yml3Z01Dd2dhVzVrWlhncE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYVc1elpYSjBUR0Z5WjJWeUtHUnBjM1JoYm1ObGMwRnlPaUJ1ZFcxaVpYSmJYU3dnYVc1a1pYaGxjem9nYm5WdFltVnlXMTBzSUc1MWJUb2diblZ0WW1WeUxDQnBibVJsZURvZ2JuVnRZbVZ5S1NCN1hHNGdJR2xtSUNodWRXMGdQQ0JrYVhOMFlXNWpaWE5CY2x0a2FYTjBZVzVqWlhOQmNpNXNaVzVuZEdndE1WMHBYRzRnSUNBZ2NtVjBkWEp1TzF4dVhHNGdJR052Ym5OMElHNWxkMUJ2YzJsMGFXOXVJRDBnWkdsemRHRnVZMlZ6UVhJdVptbHVaRWx1WkdWNEtDaDJLU0E5UGlCdWRXMGdQaUIyS1R0Y2JpQWdaR2x6ZEdGdVkyVnpRWEl1Y0c5d0tDazdYRzRnSUdScGMzUmhibU5sYzBGeUxuTndiR2xqWlNodVpYZFFiM05wZEdsdmJpd2dNQ3dnYm5WdEtUdGNiaUFnYVc1a1pYaGxjeTV3YjNBb0tUdGNiaUFnYVc1a1pYaGxjeTV6Y0d4cFkyVW9ibVYzVUc5emFYUnBiMjRzSURBc0lHbHVaR1Y0S1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2RsZEVGblozSmxaMkYwYVc5dVJuVnVZM1JwYjI0b1hHNGdJR0ZuWjNKbFoyRjBhVzl1VFdWMGFHOWtPaUJFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtMQ0IzWldsbmFIUnpPaUJ1ZFcxaVpYSmJYVnh1S1RvZ0tIWmhiSFZsY3pvZ2JuVnRZbVZ5VzEwcElEMCtJRzUxYldKbGNpQjdYRzRnSUhOM2FYUmphQ0FvWVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlFwSUh0Y2JpQWdJQ0JqWVhObElFUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJSekxrMUJUa2hCVkZSQlRqcGNiaUFnSUNBZ0lISmxkSFZ5YmlBb2RuTTZJRzUxYldKbGNsdGRLU0E5UGlCMmN5NXlaV1IxWTJVb0tHRmpZeXdnZG1Gc0xDQnBaSGdwSUQwK0lHRmpZeUFySUhaaGJDQXFJSGRsYVdkb2RITmJhV1I0WFN3Z01DazdYRzRnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUhKbGRIVnliaUFvZG5NNklHNTFiV0psY2x0ZEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUM4dklHVjFZMnhwWkdWaGJseHVJQ0FnSUNBZ0lDQmpiMjV6ZENCemRXMGdQU0IyY3k1eVpXUjFZMlVvS0dGall5d2dkbUZzTENCcFpIZ3BJRDArSUdGall5QXJJQ2gyWVd3Z0tpQjNaV2xuYUhSelcybGtlRjBwSUNvcUlESXNJREFwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnVFdGMGFDNXpjWEowS0hOMWJTazdYRzRnSUNBZ0lDQjlPMXh1SUNCOVhHNTlYRzRpWFgwPSIsImltcG9ydCB7IGdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24sIGlzTmlsIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBNZWFzdXJlLCBpc0JpdEFycmF5TWV0cmljIH0gZnJvbSAnLi4vdHlwZWQtbWV0cmljcyc7XG5pbXBvcnQgQml0QXJyYXkgZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvYml0LWFycmF5Jztcbm9ubWVzc2FnZSA9IGFzeW5jIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHsgdmFsdWVzLCBzdGFydElkeCwgZW5kSWR4LCB0aHJlc2hvbGQsIGZuTmFtZXMsIG9wdHMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCB3ZWlnaHRzIH0gPSBldmVudC5kYXRhO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIGlmIChzdGFydElkeCAhPSAtMSlcbiAgICAgICAgLy8gICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGluIHNwYXJzZSBtYXRyaXggd29ya2VyJyk7IC8vIFRPRE86IHJlbW92ZSB0aGlzIGxpbmVcbiAgICAgICAgY29uc3QgaSA9IFtdO1xuICAgICAgICBjb25zdCBqID0gW107XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlcyA9IFtdO1xuICAgICAgICBjb25zdCBjaHVua1NpemUgPSBlbmRJZHggLSBzdGFydElkeDtcbiAgICAgICAgLy9jb25zdCBtaSA9IHN0YXJ0Um93O1xuICAgICAgICAvL2NvbnN0IG1qID0gc3RhcnRDb2w7XG4gICAgICAgIGNvbnN0IGFnZ3JlZ2F0ZSA9IGdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24oYWdncmVnYXRpb25NZXRob2QsIHdlaWdodHMpO1xuICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodiwgY29sSWR4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNCaXRBcnJheU1ldHJpYyhmbk5hbWVzW2NvbElkeF0pKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05pbCh2W2ldKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbY29sSWR4XVtpXSA9IG5ldyBCaXRBcnJheSh2YWx1ZXNbY29sSWR4XVtpXS5fZGF0YSwgdmFsdWVzW2NvbElkeF1baV0uX2xlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGNudCA9IDA7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlRm5zID0gbmV3IEFycmF5KGZuTmFtZXMubGVuZ3RoKS5maWxsKG51bGwpLm1hcCgoXywgaSkgPT4gbmV3IE1lYXN1cmUoZm5OYW1lc1tpXSkuZ2V0TWVhc3VyZShvcHRzW2ldKSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0Um93ID0gdmFsdWVzWzBdLmxlbmd0aCAtIDIgLSBNYXRoLmZsb29yKE1hdGguc3FydCgtOCAqIHN0YXJ0SWR4ICsgNCAqIHZhbHVlc1swXS5sZW5ndGggKiAodmFsdWVzWzBdLmxlbmd0aCAtIDEpIC0gNykgLyAyIC0gMC41KTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb2wgPSBzdGFydElkeCAtIHZhbHVlc1swXS5sZW5ndGggKiBzdGFydFJvdyArIE1hdGguZmxvb3IoKHN0YXJ0Um93ICsgMSkgKiAoc3RhcnRSb3cgKyAyKSAvIDIpO1xuICAgICAgICBsZXQgbWkgPSBzdGFydFJvdztcbiAgICAgICAgbGV0IG1qID0gc3RhcnRDb2w7XG4gICAgICAgIHdoaWxlIChjbnQgPCBjaHVua1NpemUpIHtcbiAgICAgICAgICAgIC8vY29uc3QgdmFsdWUgPSBzZXExTGlzdFttaV0gJiYgc2VxMUxpc3RbbWpdID8gaGFtbWluZyhzZXExTGlzdFttaV0sIHNlcTFMaXN0W21qXSkgOiAwO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VWYWx1ZXMgPSBkaXN0YW5jZUZucy5tYXAoKGZuLCBpZHgpID0+ICFpc05pbCh2YWx1ZXNbaWR4XVttaV0pICYmICFpc05pbCh2YWx1ZXNbaWR4XVttal0pID9cbiAgICAgICAgICAgICAgICBmbih2YWx1ZXNbaWR4XVttaV0sIHZhbHVlc1tpZHhdW21qXSkgOiAxKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGlzdGFuY2VWYWx1ZXMubGVuZ3RoID09PSAxID8gZGlzdGFuY2VWYWx1ZXNbMF0gOiBhZ2dyZWdhdGUoZGlzdGFuY2VWYWx1ZXMpO1xuICAgICAgICAgICAgaWYgKDEgLSB2YWx1ZSA+PSB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICBpLnB1c2gobWkpO1xuICAgICAgICAgICAgICAgIGoucHVzaChtaik7XG4gICAgICAgICAgICAgICAgZGlzdGFuY2VzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY250Kys7XG4gICAgICAgICAgICBtaisrO1xuICAgICAgICAgICAgaWYgKG1qID09PSB2YWx1ZXNbMF0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbWkrKztcbiAgICAgICAgICAgICAgICBtaiA9IG1pICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpQXJyYXkgPSBuZXcgSW50MzJBcnJheShpKTtcbiAgICAgICAgY29uc3QgakFycmF5ID0gbmV3IEludDMyQXJyYXkoaik7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGRpc3RhbmNlcyk7XG4gICAgICAgIHBvc3RNZXNzYWdlKHsgaTogaUFycmF5LCBqOiBqQXJyYXksIGRpc3RhbmNlOiBkaXN0YW5jZUFycmF5IH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBwb3N0TWVzc2FnZSh7IGVycm9yOiBlIH0pO1xuICAgIH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljM0JoY25ObExXMWhkSEpwZUMxM2IzSnJaWEl1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SnpjR0Z5YzJVdGJXRjBjbWw0TFhkdmNtdGxjaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeFBRVUZQTEVWQlFVTXNjMEpCUVhOQ0xFVkJRVVVzUzBGQlN5eEZRVUZETEUxQlFVMHNVMEZCVXl4RFFVRkRPMEZCUTNSRUxFOUJRVThzUlVGQlpTeFBRVUZQTEVWQlFVVXNaMEpCUVdkQ0xFVkJRVU1zVFVGQlRTeHJRa0ZCYTBJc1EwRkJRenRCUVVONlJTeFBRVUZQTEZGQlFWRXNUVUZCVFN4NVEwRkJlVU1zUTBGQlF6dEJRVVV2UkN4VFFVRlRMRWRCUVVjc1MwRkJTeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTzBsQlF6RkNMRTFCUVUwc1JVRkJReXhOUVVGTkxFVkJRVVVzVVVGQlVTeEZRVUZGTEUxQlFVMHNSVUZCUlN4VFFVRlRMRVZCUVVVc1QwRkJUeXhGUVVGRkxFbEJRVWtzUlVGQlJTeHBRa0ZCYVVJc1JVRkJSU3hQUVVGUExFVkJRVU1zUjBGSGJFTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJRenRKUVVNdlJDeEpRVUZKTzFGQlEwWXNjMEpCUVhOQ08xRkJRM1JDTEdkR1FVRm5SanRSUVVOb1JpeE5RVUZOTEVOQlFVTXNSMEZCWVN4RlFVRkZMRU5CUVVNN1VVRkRka0lzVFVGQlRTeERRVUZETEVkQlFXRXNSVUZCUlN4RFFVRkRPMUZCUTNaQ0xFMUJRVTBzVTBGQlV5eEhRVUZoTEVWQlFVVXNRMEZCUXp0UlFVTXZRaXhOUVVGTkxGTkJRVk1zUjBGQlJ5eE5RVUZOTEVkQlFVY3NVVUZCVVN4RFFVRkRPMUZCUTNCRExITkNRVUZ6UWp0UlFVTjBRaXh6UWtGQmMwSTdVVUZGZEVJc1RVRkJUU3hUUVVGVExFZEJRVWNzYzBKQlFYTkNMRU5CUVVNc2FVSkJRV2xDTEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNN1VVRkZja1VzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzUlVGQlJUdFpRVU16UWl4SlFVRkpMR2RDUVVGblFpeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhGUVVGRk8yZENRVU55UXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJUdHZRa0ZEYWtNc1NVRkJTU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPM2RDUVVGRkxGTkJRVk03YjBKQlF6RkNMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dHBRa0ZEZEVZN1lVRkRSanRSUVVOSUxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwZ3NTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRMW9zVFVGQlRTeFhRVUZYTEVkQlFVY3NTVUZCU1N4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhKUVVGSkxFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOd1NDeE5RVUZOTEZGQlFWRXNSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVOb1JDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExGRkJRVkVzUjBGQlJ5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlF6RkdMRTFCUVUwc1VVRkJVU3hIUVVGSExGRkJRVkVzUjBGQlJ5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hIUVVGSExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1VVRkJVU3hIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlF6RkhMRWxCUVVrc1JVRkJSU3hIUVVGSExGRkJRVkVzUTBGQlF6dFJRVU5zUWl4SlFVRkpMRVZCUVVVc1IwRkJSeXhSUVVGUkxFTkJRVU03VVVGRGJFSXNUMEZCVHl4SFFVRkhMRWRCUVVjc1UwRkJVeXhGUVVGRk8xbEJRM1JDTEhWR1FVRjFSanRaUVVOMlJpeE5RVUZOTEdOQlFXTXNSMEZCUnl4WFFVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRkRWNzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkROVU1zVFVGQlRTeExRVUZMTEVkQlFVY3NZMEZCWXl4RFFVRkRMRTFCUVUwc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRPMWxCUXpGR0xFbEJRVWtzUTBGQlF5eEhRVUZITEV0QlFVc3NTVUZCU1N4VFFVRlRMRVZCUVVVN1owSkJRekZDTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03WjBKQlExZ3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dG5Ra0ZEV0N4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzJGQlEzWkNPMWxCUTBRc1IwRkJSeXhGUVVGRkxFTkJRVU03V1VGRFRpeEZRVUZGTEVWQlFVVXNRMEZCUXp0WlFVTk1MRWxCUVVrc1JVRkJSU3hMUVVGTExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVN1owSkJRek5DTEVWQlFVVXNSVUZCUlN4RFFVRkRPMmRDUVVOTUxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMkZCUTJJN1UwRkRSanRSUVVWRUxFMUJRVTBzVFVGQlRTeEhRVUZITEVsQlFVa3NWVUZCVlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMnBETEUxQlFVMHNUVUZCVFN4SFFVRkhMRWxCUVVrc1ZVRkJWU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEycERMRTFCUVUwc1lVRkJZU3hIUVVGSExFbEJRVWtzV1VGQldTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTJ4RUxGZEJRVmNzUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeFJRVUZSTEVWQlFVVXNZVUZCWVN4RlFVRkRMRU5CUVVNc1EwRkJRenRMUVVNNVJEdEpRVUZETEU5QlFVOHNRMEZCUXl4RlFVRkZPMUZCUTFZc1YwRkJWeXhEUVVGRExFVkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNN1MwRkRla0k3UVVGRFNDeERRVUZETEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdlMmRsZEVGblozSmxaMkYwYVc5dVJuVnVZM1JwYjI0c0lHbHpUbWxzZlNCbWNtOXRJQ2N1TDNWMGFXeHpKenRjYm1sdGNHOXlkQ0I3UzI1dmQyNU5aWFJ5YVdOekxDQk5aV0Z6ZFhKbExDQnBjMEpwZEVGeWNtRjVUV1YwY21samZTQm1jbTl0SUNjdUxpOTBlWEJsWkMxdFpYUnlhV056Snp0Y2JtbHRjRzl5ZENCQ2FYUkJjbkpoZVNCbWNtOXRJQ2RBWkdGMFlXZHliMnN0YkdsaWNtRnlhV1Z6TDNWMGFXeHpMM055WXk5aWFYUXRZWEp5WVhrbk8xeHVhVzF3YjNKMElIdEVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2ZTQm1jbTl0SUNjdUwzUjVjR1Z6Snp0Y2JtOXViV1Z6YzJGblpTQTlJR0Z6ZVc1aklDaGxkbVZ1ZENrZ1BUNGdlMXh1SUNCamIyNXpkQ0I3ZG1Gc2RXVnpMQ0J6ZEdGeWRFbGtlQ3dnWlc1a1NXUjRMQ0IwYUhKbGMyaHZiR1FzSUdadVRtRnRaWE1zSUc5d2RITXNJR0ZuWjNKbFoyRjBhVzl1VFdWMGFHOWtMQ0IzWldsbmFIUnpmVHBjYmlBZ0lDQjdkbUZzZFdWek9pQkJjbkpoZVR4aGJubGJYVDRzSUhOMFlYSjBTV1I0T2lCdWRXMWlaWElzSUdWdVpFbGtlRG9nYm5WdFltVnlMRnh1SUNBZ0lDQWdkR2h5WlhOb2IyeGtPaUJ1ZFcxaVpYSXNJR1p1VG1GdFpYTTZJRXR1YjNkdVRXVjBjbWxqYzF0ZExDQnZjSFJ6T2lCaGJubGJYU3dnZDJWcFoyaDBjem9nYm5WdFltVnlXMTBzWEc0Z0lDQWdJQ0JoWjJkeVpXZGhkR2x2YmsxbGRHaHZaRG9nUkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2YmsxbGRHaHZaSDBnUFNCbGRtVnVkQzVrWVhSaE8xeHVJQ0IwY25rZ2UxeHVJQ0FnSUM4dklHbG1JQ2h6ZEdGeWRFbGtlQ0FoUFNBdE1TbGNiaUFnSUNBdkx5QWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25SWEp5YjNJZ2FXNGdjM0JoY25ObElHMWhkSEpwZUNCM2IzSnJaWEluS1RzZ0x5OGdWRTlFVHpvZ2NtVnRiM1psSUhSb2FYTWdiR2x1WlZ4dUlDQWdJR052Ym5OMElHazZJRzUxYldKbGNsdGRJRDBnVzEwN1hHNGdJQ0FnWTI5dWMzUWdham9nYm5WdFltVnlXMTBnUFNCYlhUdGNiaUFnSUNCamIyNXpkQ0JrYVhOMFlXNWpaWE02SUc1MWJXSmxjbHRkSUQwZ1cxMDdYRzRnSUNBZ1kyOXVjM1FnWTJoMWJtdFRhWHBsSUQwZ1pXNWtTV1I0SUMwZ2MzUmhjblJKWkhnN1hHNGdJQ0FnTHk5amIyNXpkQ0J0YVNBOUlITjBZWEowVW05M08xeHVJQ0FnSUM4dlkyOXVjM1FnYldvZ1BTQnpkR0Z5ZEVOdmJEdGNibHh1SUNBZ0lHTnZibk4wSUdGblozSmxaMkYwWlNBOUlHZGxkRUZuWjNKbFoyRjBhVzl1Um5WdVkzUnBiMjRvWVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlFzSUhkbGFXZG9kSE1wTzF4dVhHNGdJQ0FnZG1Gc2RXVnpMbVp2Y2tWaFkyZ29LSFlzSUdOdmJFbGtlQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ2FXWWdLR2x6UW1sMFFYSnlZWGxOWlhSeWFXTW9abTVPWVcxbGMxdGpiMnhKWkhoZEtTa2dlMXh1SUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhZdWJHVnVaM1JvT3lBcksya3BJSHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9hWE5PYVd3b2RsdHBYU2twSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnSUNBZ0lIWmhiSFZsYzF0amIyeEpaSGhkVzJsZElEMGdibVYzSUVKcGRFRnljbUY1S0haaGJIVmxjMXRqYjJ4SlpIaGRXMmxkTGw5a1lYUmhMQ0IyWVd4MVpYTmJZMjlzU1dSNFhWdHBYUzVmYkdWdVozUm9LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBwTzF4dUlDQWdJR3hsZENCamJuUWdQU0F3TzF4dUlDQWdJR052Ym5OMElHUnBjM1JoYm1ObFJtNXpJRDBnYm1WM0lFRnljbUY1S0dadVRtRnRaWE11YkdWdVozUm9LUzVtYVd4c0tHNTFiR3dwTG0xaGNDZ29YeXdnYVNrZ1BUNGdibVYzSUUxbFlYTjFjbVVvWm01T1lXMWxjMXRwWFNrdVoyVjBUV1ZoYzNWeVpTaHZjSFJ6VzJsZEtTazdYRzRnSUNBZ1kyOXVjM1FnYzNSaGNuUlNiM2NnUFNCMllXeDFaWE5iTUYwdWJHVnVaM1JvSUMwZ01pQXRJRTFoZEdndVpteHZiM0lvWEc0Z0lDQWdJQ0JOWVhSb0xuTnhjblFvTFRnZ0tpQnpkR0Z5ZEVsa2VDQXJJRFFnS2lCMllXeDFaWE5iTUYwdWJHVnVaM1JvSUNvZ0tIWmhiSFZsYzFzd1hTNXNaVzVuZEdnZ0xTQXhLU0F0SURjcElDOGdNaUF0SURBdU5TazdYRzRnSUNBZ1kyOXVjM1FnYzNSaGNuUkRiMndnUFNCemRHRnlkRWxrZUNBdElIWmhiSFZsYzFzd1hTNXNaVzVuZEdnZ0tpQnpkR0Z5ZEZKdmR5QXJJRTFoZEdndVpteHZiM0lvS0hOMFlYSjBVbTkzSUNzZ01Ta2dLaUFvYzNSaGNuUlNiM2NnS3lBeUtTQXZJRElwTzF4dUlDQWdJR3hsZENCdGFTQTlJSE4wWVhKMFVtOTNPMXh1SUNBZ0lHeGxkQ0J0YWlBOUlITjBZWEowUTI5c08xeHVJQ0FnSUhkb2FXeGxJQ2hqYm5RZ1BDQmphSFZ1YTFOcGVtVXBJSHRjYmlBZ0lDQWdJQzh2WTI5dWMzUWdkbUZzZFdVZ1BTQnpaWEV4VEdsemRGdHRhVjBnSmlZZ2MyVnhNVXhwYzNSYmJXcGRJRDhnYUdGdGJXbHVaeWh6WlhFeFRHbHpkRnR0YVYwc0lITmxjVEZNYVhOMFcyMXFYU2tnT2lBd08xeHVJQ0FnSUNBZ1kyOXVjM1FnWkdsemRHRnVZMlZXWVd4MVpYTWdQU0JrYVhOMFlXNWpaVVp1Y3k1dFlYQW9LR1p1TENCcFpIZ3BJRDArSUNGcGMwNXBiQ2gyWVd4MVpYTmJhV1I0WFZ0dGFWMHBJQ1ltSUNGcGMwNXBiQ2gyWVd4MVpYTmJhV1I0WFZ0dGFsMHBJRDljYmlBZ0lDQWdJQ0FnWm00b2RtRnNkV1Z6VzJsa2VGMWJiV2xkTENCMllXeDFaWE5iYVdSNFhWdHRhbDBwSURvZ01TazdYRzRnSUNBZ0lDQmpiMjV6ZENCMllXeDFaU0E5SUdScGMzUmhibU5sVm1Gc2RXVnpMbXhsYm1kMGFDQTlQVDBnTVNBL0lHUnBjM1JoYm1ObFZtRnNkV1Z6V3pCZElEb2dZV2RuY21WbllYUmxLR1JwYzNSaGJtTmxWbUZzZFdWektUdGNiaUFnSUNBZ0lHbG1JQ2d4SUMwZ2RtRnNkV1VnUGowZ2RHaHlaWE5vYjJ4a0tTQjdYRzRnSUNBZ0lDQWdJR2t1Y0hWemFDaHRhU2s3WEc0Z0lDQWdJQ0FnSUdvdWNIVnphQ2h0YWlrN1hHNGdJQ0FnSUNBZ0lHUnBjM1JoYm1ObGN5NXdkWE5vS0haaGJIVmxLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR051ZENzck8xeHVJQ0FnSUNBZ2JXb3JLenRjYmlBZ0lDQWdJR2xtSUNodGFpQTlQVDBnZG1Gc2RXVnpXekJkTG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnSUNCdGFTc3JPMXh1SUNBZ0lDQWdJQ0J0YWlBOUlHMXBJQ3NnTVR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JqYjI1emRDQnBRWEp5WVhrZ1BTQnVaWGNnU1c1ME16SkJjbkpoZVNocEtUdGNiaUFnSUNCamIyNXpkQ0JxUVhKeVlYa2dQU0J1WlhjZ1NXNTBNekpCY25KaGVTaHFLVHRjYmlBZ0lDQmpiMjV6ZENCa2FYTjBZVzVqWlVGeWNtRjVJRDBnYm1WM0lFWnNiMkYwTXpKQmNuSmhlU2hrYVhOMFlXNWpaWE1wTzF4dUlDQWdJSEJ2YzNSTlpYTnpZV2RsS0h0cE9pQnBRWEp5WVhrc0lHbzZJR3BCY25KaGVTd2daR2x6ZEdGdVkyVTZJR1JwYzNSaGJtTmxRWEp5WVhsOUtUdGNiaUFnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUhCdmMzUk5aWE56WVdkbEtIdGxjbkp2Y2pvZ1pYMHBPMXh1SUNCOVhHNTlPMXh1SWwxOSIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuLy8gdGhlIHN0YXJ0dXAgZnVuY3Rpb25cbl9fd2VicGFja19yZXF1aXJlX18ueCA9ICgpID0+IHtcblx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5cdC8vIFRoaXMgZW50cnkgbW9kdWxlIGRlcGVuZHMgb24gb3RoZXIgbG9hZGVkIGNodW5rcyBhbmQgZXhlY3V0aW9uIG5lZWQgdG8gYmUgZGVsYXllZFxuXHR2YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18uTyh1bmRlZmluZWQsIFszMDFdLCAoKSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXyg1MDIzKSkpXG5cdF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLk8oX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cdHJldHVybiBfX3dlYnBhY2tfZXhwb3J0c19fO1xufTtcblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5mID0ge307XG4vLyBUaGlzIGZpbGUgY29udGFpbnMgb25seSB0aGUgZW50cnkgY2h1bmsuXG4vLyBUaGUgY2h1bmsgbG9hZGluZyBmdW5jdGlvbiBmb3IgYWRkaXRpb25hbCBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18uZSA9IChjaHVua0lkKSA9PiB7XG5cdHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmYpLnJlZHVjZSgocHJvbWlzZXMsIGtleSkgPT4ge1xuXHRcdF9fd2VicGFja19yZXF1aXJlX18uZltrZXldKGNodW5rSWQsIHByb21pc2VzKTtcblx0XHRyZXR1cm4gcHJvbWlzZXM7XG5cdH0sIFtdKSk7XG59OyIsIi8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rcyBhbmQgc2libGluZyBjaHVua3MgZm9yIHRoZSBlbnRyeXBvaW50XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwidmFyIHNjcmlwdFVybDtcbmlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmcuaW1wb3J0U2NyaXB0cykgc2NyaXB0VXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmxvY2F0aW9uICsgXCJcIjtcbnZhciBkb2N1bWVudCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5kb2N1bWVudDtcbmlmICghc2NyaXB0VXJsICYmIGRvY3VtZW50KSB7XG5cdGlmIChkb2N1bWVudC5jdXJyZW50U2NyaXB0KVxuXHRcdHNjcmlwdFVybCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1xuXHRpZiAoIXNjcmlwdFVybCkge1xuXHRcdHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIik7XG5cdFx0aWYoc2NyaXB0cy5sZW5ndGgpIHtcblx0XHRcdHZhciBpID0gc2NyaXB0cy5sZW5ndGggLSAxO1xuXHRcdFx0d2hpbGUgKGkgPiAtMSAmJiAhc2NyaXB0VXJsKSBzY3JpcHRVcmwgPSBzY3JpcHRzW2ktLV0uc3JjO1xuXHRcdH1cblx0fVxufVxuLy8gV2hlbiBzdXBwb3J0aW5nIGJyb3dzZXJzIHdoZXJlIGFuIGF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgeW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQucHVibGljUGF0aCBtYW51YWxseSB2aWEgY29uZmlndXJhdGlvblxuLy8gb3IgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGFuZCBzZXQgdGhlIF9fd2VicGFja19wdWJsaWNfcGF0aF9fIHZhcmlhYmxlIGZyb20geW91ciBjb2RlIHRvIHVzZSB5b3VyIG93biBsb2dpYy5cbmlmICghc2NyaXB0VXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbnNjcmlwdFVybCA9IHNjcmlwdFVybC5yZXBsYWNlKC8jLiokLywgXCJcIikucmVwbGFjZSgvXFw/LiokLywgXCJcIikucmVwbGFjZSgvXFwvW15cXC9dKyQvLCBcIi9cIik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBzY3JpcHRVcmw7IiwiLy8gbm8gYmFzZVVSSVxuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGNodW5rc1xuLy8gXCIxXCIgbWVhbnMgXCJhbHJlYWR5IGxvYWRlZFwiXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQyMzogMVxufTtcblxuLy8gaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nXG52YXIgaW5zdGFsbENodW5rID0gKGRhdGEpID0+IHtcblx0dmFyIFtjaHVua0lkcywgbW9yZU1vZHVsZXMsIHJ1bnRpbWVdID0gZGF0YTtcblx0Zm9yKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhtb3JlTW9kdWxlcywgbW9kdWxlSWQpKSB7XG5cdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuXHRcdH1cblx0fVxuXHRpZihydW50aW1lKSBydW50aW1lKF9fd2VicGFja19yZXF1aXJlX18pO1xuXHR3aGlsZShjaHVua0lkcy5sZW5ndGgpXG5cdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRzLnBvcCgpXSA9IDE7XG5cdHBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uKGRhdGEpO1xufTtcbl9fd2VicGFja19yZXF1aXJlX18uZi5pID0gKGNodW5rSWQsIHByb21pc2VzKSA9PiB7XG5cdC8vIFwiMVwiIGlzIHRoZSBzaWduYWwgZm9yIFwiYWxyZWFkeSBsb2FkZWRcIlxuXHRpZighaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdKSB7XG5cdFx0aWYodHJ1ZSkgeyAvLyBhbGwgY2h1bmtzIGhhdmUgSlNcblx0XHRcdGltcG9ydFNjcmlwdHMoX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgX193ZWJwYWNrX3JlcXVpcmVfXy51KGNodW5rSWQpKTtcblx0XHR9XG5cdH1cbn07XG5cbnZhciBjaHVua0xvYWRpbmdHbG9iYWwgPSBzZWxmW1wid2VicGFja0NodW5rcGVwdGlkZXNcIl0gPSBzZWxmW1wid2VicGFja0NodW5rcGVwdGlkZXNcIl0gfHwgW107XG52YXIgcGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24gPSBjaHVua0xvYWRpbmdHbG9iYWwucHVzaC5iaW5kKGNodW5rTG9hZGluZ0dsb2JhbCk7XG5jaHVua0xvYWRpbmdHbG9iYWwucHVzaCA9IGluc3RhbGxDaHVuaztcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdCIsIi8vIHJ1biBzdGFydHVwXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18ueCgpO1xuIl0sIm5hbWVzIjpbImRlZmVycmVkIiwibmV4dCIsImlzTmlsIiwieCIsIm9ubWVzc2FnZSIsImFzeW5jIiwiZXZlbnQiLCJ2YWx1ZXMiLCJzdGFydElkeCIsImVuZElkeCIsInRocmVzaG9sZCIsImZuTmFtZXMiLCJvcHRzIiwiYWdncmVnYXRpb25NZXRob2QiLCJ3ZWlnaHRzIiwiZGF0YSIsImkiLCJqIiwiZGlzdGFuY2VzIiwiY2h1bmtTaXplIiwiYWdncmVnYXRlIiwiTUFOSEFUVEFOIiwidnMiLCJyZWR1Y2UiLCJhY2MiLCJ2YWwiLCJpZHgiLCJzdW0iLCJNYXRoIiwic3FydCIsImdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24iLCJmb3JFYWNoIiwidiIsImNvbElkeCIsImxlbmd0aCIsIl9kYXRhIiwiX2xlbmd0aCIsImNudCIsImRpc3RhbmNlRm5zIiwiQXJyYXkiLCJmaWxsIiwibWFwIiwiXyIsImdldE1lYXN1cmUiLCJzdGFydFJvdyIsImZsb29yIiwic3RhcnRDb2wiLCJtaSIsIm1qIiwiZGlzdGFuY2VWYWx1ZXMiLCJmbiIsInZhbHVlIiwicHVzaCIsImlBcnJheSIsIkludDMyQXJyYXkiLCJqQXJyYXkiLCJkaXN0YW5jZUFycmF5IiwiRmxvYXQzMkFycmF5IiwicG9zdE1lc3NhZ2UiLCJkaXN0YW5jZSIsImUiLCJlcnJvciIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsInVuZGVmaW5lZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibSIsIl9fd2VicGFja19leHBvcnRzX18iLCJPIiwicmVzdWx0IiwiY2h1bmtJZHMiLCJwcmlvcml0eSIsIm5vdEZ1bGZpbGxlZCIsIkluZmluaXR5IiwiZnVsZmlsbGVkIiwiT2JqZWN0Iiwia2V5cyIsImV2ZXJ5Iiwia2V5Iiwic3BsaWNlIiwiciIsImQiLCJkZWZpbml0aW9uIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImYiLCJjaHVua0lkIiwiUHJvbWlzZSIsImFsbCIsInByb21pc2VzIiwidSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwid2luZG93Iiwib2JqIiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNjcmlwdFVybCIsImltcG9ydFNjcmlwdHMiLCJsb2NhdGlvbiIsImRvY3VtZW50IiwiY3VycmVudFNjcmlwdCIsInNyYyIsInNjcmlwdHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIkVycm9yIiwicmVwbGFjZSIsInAiLCJpbnN0YWxsZWRDaHVua3MiLCJjaHVua0xvYWRpbmdHbG9iYWwiLCJzZWxmIiwicGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24iLCJiaW5kIiwibW9yZU1vZHVsZXMiLCJydW50aW1lIiwicG9wIiwidGhlbiJdLCJzb3VyY2VSb290IjoiIn0=
package/dist/282.js ADDED
@@ -0,0 +1,2 @@
1
+ var peptides;(()=>{"use strict";var e,r,t={1282:(e,r,t)=>{var n=t(7862);const o=e=>null==e;function a(e,r,t,n){if(t>e[e.length-1])return;const o=e.findIndex((e=>t<e));e.pop(),e.splice(o,0,t),r.pop(),r.splice(o,0,n)}var s=t(577),l=t(9657);onmessage=async e=>{const{values:r,startIdx:t,endIdx:i,fnNames:p,opts:c,nNeighbours:f,weights:h,aggregationMethod:u}=e.data;try{const e=new Array(r[0].length).fill(null).map((()=>new Array(f).fill(-1))),g=new Array(r[0].length).fill(null).map((()=>new Array(f).fill(999999))),d=function(e,r){return e===n.y.MANHATTAN?e=>e.reduce(((e,t,n)=>e+t*r[n]),0):e=>{const t=e.reduce(((e,t,n)=>e+(t*r[n])**2),0);return Math.sqrt(t)}}(u,h),v=i-t;r.forEach(((e,t)=>{if((0,s.sQ)(p[t]))for(let n=0;n<e.length;++n)o(e[n])||(r[t][n]=new l.Z(r[t][n]._data,r[t][n]._length))}));let w=0;const y=new Array(p.length).fill(null).map(((e,r)=>new s.UH(p[r]).getMeasure(c[r]))),m=r[0].length-2-Math.floor(Math.sqrt(-8*t+4*r[0].length*(r[0].length-1)-7)/2-.5),b=t-r[0].length*m+Math.floor((m+1)*(m+2)/2);let x=m,O=b;for(;w<v;){const t=y.map(((e,t)=>o(r[t][x])||o(r[t][O])?1:e(r[t][x],r[t][O]))),n=1===t.length?t[0]:d(t);a(g[x],e[x],n,O),a(g[O],e[O],n,x),w++,O++,O===r[0].length&&(x++,O=x+1)}postMessage({knnDistances:g,knnIndexes:e})}catch(e){postMessage({error:e})}}}},n={};function o(e){var r=n[e];if(void 0!==r)return r.exports;var a=n[e]={exports:{}};return t[e](a,a.exports,o),a.exports}o.m=t,o.x=()=>{var e=o.O(void 0,[301],(()=>o(1282)));return o.O(e)},e=[],o.O=(r,t,n,a)=>{if(!t){var s=1/0;for(c=0;c<e.length;c++){for(var[t,n,a]=e[c],l=!0,i=0;i<t.length;i++)(!1&a||s>=a)&&Object.keys(o.O).every((e=>o.O[e](t[i])))?t.splice(i--,1):(l=!1,a<s&&(s=a));if(l){e.splice(c--,1);var p=n();void 0!==p&&(r=p)}}return r}a=a||0;for(var c=e.length;c>0&&e[c-1][2]>a;c--)e[c]=e[c-1];e[c]=[t,n,a]},o.d=(e,r)=>{for(var t in r)o.o(r,t)&&!o.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce(((r,t)=>(o.f[t](e,r),r)),[])),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,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e;o.g.importScripts&&(e=o.g.location+"");var r=o.g.document;if(!e&&r&&(r.currentScript&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var n=t.length-1;n>-1&&!e;)e=t[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={282:1};o.f.i=(r,t)=>{e[r]||importScripts(o.p+o.u(r))};var r=self.webpackChunkpeptides=self.webpackChunkpeptides||[],t=r.push.bind(r);r.push=r=>{var[n,a,s]=r;for(var l in a)o.o(a,l)&&(o.m[l]=a[l]);for(s&&s(o);n.length;)e[n.pop()]=1;t(r)}})(),r=o.x,o.x=()=>o.e(301).then(r);var a=o.x();peptides=a})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjgyLmpzIiwibWFwcGluZ3MiOiJvQ0FBSUEsRUNBQUMsRSxnQ0NDRyxNQUFNQyxFQUFTQyxHQUFNQSxRQUNyQixTQUFTQyxFQUFjQyxFQUFhQyxFQUFTQyxFQUFLQyxHQUNyRCxHQUFJRCxFQUFNRixFQUFZQSxFQUFZSSxPQUFTLEdBQ3ZDLE9BQ0osTUFBTUMsRUFBY0wsRUFBWU0sV0FBV0MsR0FBTUwsRUFBTUssSUFDdkRQLEVBQVlRLE1BQ1pSLEVBQVlTLE9BQU9KLEVBQWEsRUFBR0gsR0FDbkNELEVBQVFPLE1BQ1JQLEVBQVFRLE9BQU9KLEVBQWEsRUFBR0YsRUFDbkMsQyx1QkNQQU8sVUFBWUMsTUFBT0MsSUFDZixNQUFNLE9BQUVDLEVBQU0sU0FBRUMsRUFBUSxPQUFFQyxFQUFNLFFBQUVDLEVBQU8sS0FBRUMsRUFBSSxZQUFFQyxFQUFXLFFBQUVDLEVBQU8sa0JBQUVDLEdBQXNCUixFQUFNUyxLQUNuRyxJQUNJLE1BQU1DLEVBQWEsSUFBSUMsTUFBTVYsRUFBTyxHQUFHVCxRQUFRb0IsS0FBSyxNQUFNQyxLQUFJLElBQU0sSUFBSUYsTUFBTUwsR0FBYU0sTUFBTSxLQUMzRkUsRUFBZSxJQUFJSCxNQUFNVixFQUFPLEdBQUdULFFBQVFvQixLQUFLLE1BQU1DLEtBQUksSUFBTSxJQUFJRixNQUFNTCxHQUFhTSxLQUFLLFVBQzVGRyxFRFlQLFNBQWdDUCxFQUFtQkQsR0FDdEQsT0FBUUMsSUFDQyxJQUEyQlEsVUFDcEJDLEdBQU9BLEVBQUdDLFFBQU8sQ0FBQ0MsRUFBS0MsRUFBS0MsSUFBUUYsRUFBTUMsRUFBTWIsRUFBUWMsSUFBTSxHQUU5REosSUFFSixNQUFNSyxFQUFNTCxFQUFHQyxRQUFPLENBQUNDLEVBQUtDLEVBQUtDLElBQVFGLEdBQU9DLEVBQU1iLEVBQVFjLEtBQVMsR0FBRyxHQUMxRSxPQUFPRSxLQUFLQyxLQUFLRixFQUFJLENBR3JDLENDdkIwQkcsQ0FBdUJqQixFQUFtQkQsR0FDdERtQixFQUFZdkIsRUFBU0QsRUFDM0JELEVBQU8wQixTQUFRLENBQUNoQyxFQUFHaUMsS0FDZixJQUFJLFFBQWlCeEIsRUFBUXdCLElBQ3pCLElBQUssSUFBSUMsRUFBSSxFQUFHQSxFQUFJbEMsRUFBRUgsU0FBVXFDLEVBQ3hCNUMsRUFBTVUsRUFBRWtDLE1BRVo1QixFQUFPMkIsR0FBUUMsR0FBSyxJQUFJLElBQVM1QixFQUFPMkIsR0FBUUMsR0FBR0MsTUFBTzdCLEVBQU8yQixHQUFRQyxHQUFHRSxTQUVwRixJQUVKLElBQUlDLEVBQU0sRUFDVixNQUFNQyxFQUFjLElBQUl0QixNQUFNUCxFQUFRWixRQUFRb0IsS0FBSyxNQUFNQyxLQUFJLENBQUNxQixFQUFHTCxJQUFNLElBQUksS0FBUXpCLEVBQVF5QixJQUFJTSxXQUFXOUIsRUFBS3dCLE1BQ3pHTyxFQUFXbkMsRUFBTyxHQUFHVCxPQUFTLEVBQUkrQixLQUFLYyxNQUFNZCxLQUFLQyxNQUFNLEVBQUl0QixFQUFXLEVBQUlELEVBQU8sR0FBR1QsUUFBVVMsRUFBTyxHQUFHVCxPQUFTLEdBQUssR0FBSyxFQUFJLElBQ2hJOEMsRUFBV3BDLEVBQVdELEVBQU8sR0FBR1QsT0FBUzRDLEVBQVdiLEtBQUtjLE9BQU9ELEVBQVcsSUFBTUEsRUFBVyxHQUFLLEdBQ3ZHLElBQUlHLEVBQUtILEVBQ0xJLEVBQUtGLEVBQ1QsS0FBT04sRUFBTU4sR0FBVyxDQUVwQixNQUFNZSxFQUFpQlIsRUFBWXBCLEtBQUksQ0FBQzZCLEVBQUlyQixJQUFTcEMsRUFBTWdCLEVBQU9vQixHQUFLa0IsS0FBU3RELEVBQU1nQixFQUFPb0IsR0FBS21CLElBQ3ZELEVBQXZDRSxFQUFHekMsRUFBT29CLEdBQUtrQixHQUFLdEMsRUFBT29CLEdBQUttQixNQUc5QkcsRUFBa0MsSUFBMUJGLEVBQWVqRCxPQUFlaUQsRUFBZSxHQUFLMUIsRUFBVTBCLEdBQzFFdEQsRUFBYzJCLEVBQWF5QixHQUFLN0IsRUFBVzZCLEdBQUtJLEVBQU9ILEdBQ3ZEckQsRUFBYzJCLEVBQWEwQixHQUFLOUIsRUFBVzhCLEdBQUtHLEVBQU9KLEdBQ3ZEUCxJQUNBUSxJQUNJQSxJQUFPdkMsRUFBTyxHQUFHVCxTQUNqQitDLElBQ0FDLEVBQUtELEVBQUssRUFFbEIsQ0FDQUssWUFBWSxDQUFFOUIsZUFBY0osY0FDaEMsQ0FDQSxNQUFPbUMsR0FDSEQsWUFBWSxDQUFFRSxNQUFPRCxHQUN6QixFLEdDNUNBRSxFQUEyQixDQUFDLEVBR2hDLFNBQVNDLEVBQW9CQyxHQUU1QixJQUFJQyxFQUFlSCxFQUF5QkUsR0FDNUMsUUFBcUJFLElBQWpCRCxFQUNILE9BQU9BLEVBQWFFLFFBR3JCLElBQUlDLEVBQVNOLEVBQXlCRSxHQUFZLENBR2pERyxRQUFTLENBQUMsR0FPWCxPQUhBRSxFQUFvQkwsR0FBVUksRUFBUUEsRUFBT0QsUUFBU0osR0FHL0NLLEVBQU9ELE9BQ2YsQ0FHQUosRUFBb0JPLEVBQUlELEVBR3hCTixFQUFvQjlELEVBQUksS0FHdkIsSUFBSXNFLEVBQXNCUixFQUFvQlMsT0FBRU4sRUFBVyxDQUFDLE1BQU0sSUFBT0gsRUFBb0IsUUFFN0YsT0FEc0JBLEVBQW9CUyxFQUFFRCxFQUNsQixFSmpDdkJ6RSxFQUFXLEdBQ2ZpRSxFQUFvQlMsRUFBSSxDQUFDQyxFQUFRQyxFQUFVakIsRUFBSWtCLEtBQzlDLElBQUdELEVBQUgsQ0FNQSxJQUFJRSxFQUFlQyxJQUNuQixJQUFTakMsRUFBSSxFQUFHQSxFQUFJOUMsRUFBU1MsT0FBUXFDLElBQUssQ0FHekMsSUFGQSxJQUFLOEIsRUFBVWpCLEVBQUlrQixHQUFZN0UsRUFBUzhDLEdBQ3BDa0MsR0FBWSxFQUNQQyxFQUFJLEVBQUdBLEVBQUlMLEVBQVNuRSxPQUFRd0UsTUFDcEIsRUFBWEosR0FBc0JDLEdBQWdCRCxJQUFhSyxPQUFPQyxLQUFLbEIsRUFBb0JTLEdBQUdVLE9BQU9DLEdBQVNwQixFQUFvQlMsRUFBRVcsR0FBS1QsRUFBU0ssTUFDOUlMLEVBQVM5RCxPQUFPbUUsSUFBSyxJQUVyQkQsR0FBWSxFQUNUSCxFQUFXQyxJQUFjQSxFQUFlRCxJQUc3QyxHQUFHRyxFQUFXLENBQ2JoRixFQUFTYyxPQUFPZ0MsSUFBSyxHQUNyQixJQUFJd0MsRUFBSTNCLFNBQ0VTLElBQU5rQixJQUFpQlgsRUFBU1csRUFDL0IsQ0FDRCxDQUNBLE9BQU9YLENBbkJQLENBSkNFLEVBQVdBLEdBQVksRUFDdkIsSUFBSSxJQUFJL0IsRUFBSTlDLEVBQVNTLE9BQVFxQyxFQUFJLEdBQUs5QyxFQUFTOEMsRUFBSSxHQUFHLEdBQUsrQixFQUFVL0IsSUFBSzlDLEVBQVM4QyxHQUFLOUMsRUFBUzhDLEVBQUksR0FDckc5QyxFQUFTOEMsR0FBSyxDQUFDOEIsRUFBVWpCLEVBQUlrQixFQXFCakIsRUt6QmRaLEVBQW9Cc0IsRUFBSSxDQUFDbEIsRUFBU21CLEtBQ2pDLElBQUksSUFBSUgsS0FBT0csRUFDWHZCLEVBQW9Cd0IsRUFBRUQsRUFBWUgsS0FBU3BCLEVBQW9Cd0IsRUFBRXBCLEVBQVNnQixJQUM1RUgsT0FBT1EsZUFBZXJCLEVBQVNnQixFQUFLLENBQUVNLFlBQVksRUFBTUMsSUFBS0osRUFBV0gsSUFFMUUsRUNORHBCLEVBQW9CNEIsRUFBSSxDQUFDLEVBR3pCNUIsRUFBb0JILEVBQUtnQyxHQUNqQkMsUUFBUUMsSUFBSWQsT0FBT0MsS0FBS2xCLEVBQW9CNEIsR0FBRzFELFFBQU8sQ0FBQzhELEVBQVVaLEtBQ3ZFcEIsRUFBb0I0QixFQUFFUixHQUFLUyxFQUFTRyxHQUM3QkEsSUFDTCxLQ05KaEMsRUFBb0JpQyxFQUFLSixHQUVaQSxFQUFVLE1DSHZCN0IsRUFBb0JrQyxFQUFJLFdBQ3ZCLEdBQTBCLGlCQUFmQyxXQUF5QixPQUFPQSxXQUMzQyxJQUNDLE9BQU9DLE1BQVEsSUFBSUMsU0FBUyxjQUFiLEVBQ2hCLENBQUUsTUFBT3hDLEdBQ1IsR0FBc0IsaUJBQVh5QyxPQUFxQixPQUFPQSxNQUN4QyxDQUNBLENBUHVCLEdDQXhCdEMsRUFBb0J3QixFQUFJLENBQUNlLEVBQUtDLElBQVV2QixPQUFPd0IsVUFBVUMsZUFBZUMsS0FBS0osRUFBS0MsRyxNQ0FsRixJQUFJSSxFQUNBNUMsRUFBb0JrQyxFQUFFVyxnQkFBZUQsRUFBWTVDLEVBQW9Ca0MsRUFBRVksU0FBVyxJQUN0RixJQUFJQyxFQUFXL0MsRUFBb0JrQyxFQUFFYSxTQUNyQyxJQUFLSCxHQUFhRyxJQUNiQSxFQUFTQyxnQkFDWkosRUFBWUcsRUFBU0MsY0FBY0MsTUFDL0JMLEdBQVcsQ0FDZixJQUFJTSxFQUFVSCxFQUFTSSxxQkFBcUIsVUFDNUMsR0FBR0QsRUFBUTFHLE9BRVYsSUFEQSxJQUFJcUMsRUFBSXFFLEVBQVExRyxPQUFTLEVBQ2xCcUMsR0FBSyxJQUFNK0QsR0FBV0EsRUFBWU0sRUFBUXJFLEtBQUtvRSxHQUV4RCxDQUlELElBQUtMLEVBQVcsTUFBTSxJQUFJUSxNQUFNLHlEQUNoQ1IsRUFBWUEsRUFBVVMsUUFBUSxPQUFRLElBQUlBLFFBQVEsUUFBUyxJQUFJQSxRQUFRLFlBQWEsS0FDcEZyRCxFQUFvQnNELEVBQUlWLEMsV0NkeEIsSUFBSVcsRUFBa0IsQ0FDckIsSUFBSyxHQWdCTnZELEVBQW9CNEIsRUFBRS9DLEVBQUksQ0FBQ2dELEVBQVNHLEtBRS9CdUIsRUFBZ0IxQixJQUVsQmdCLGNBQWM3QyxFQUFvQnNELEVBQUl0RCxFQUFvQmlDLEVBQUVKLEdBRTlELEVBR0QsSUFBSTJCLEVBQXFCQyxLQUEyQixxQkFBSUEsS0FBMkIsc0JBQUssR0FDcEZDLEVBQTZCRixFQUFtQkcsS0FBS0MsS0FBS0osR0FDOURBLEVBQW1CRyxLQXZCQ2xHLElBQ25CLElBQUtrRCxFQUFVa0QsRUFBYUMsR0FBV3JHLEVBQ3ZDLElBQUksSUFBSXdDLEtBQVk0RCxFQUNoQjdELEVBQW9Cd0IsRUFBRXFDLEVBQWE1RCxLQUNyQ0QsRUFBb0JPLEVBQUVOLEdBQVk0RCxFQUFZNUQsSUFJaEQsSUFERzZELEdBQVNBLEVBQVE5RCxHQUNkVyxFQUFTbkUsUUFDZCtHLEVBQWdCNUMsRUFBUy9ELE9BQVMsRUFDbkM4RyxFQUEyQmpHLEVBQUssQyxLVm5CN0J6QixFQUFPZ0UsRUFBb0I5RCxFQUMvQjhELEVBQW9COUQsRUFBSSxJQUNoQjhELEVBQW9CSCxFQUFFLEtBQUtrRSxLQUFLL0gsR1dEeEMsSUFBSXdFLEVBQXNCUixFQUFvQjlELEkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvY2h1bmsgbG9hZGVkIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9zdGFydHVwIGNodW5rIGRlcGVuZGVuY2llcyIsIndlYnBhY2s6Ly9wZXB0aWRlcy8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9kaXN0YW5jZS1tYXRyaXgvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvZGlzdGFuY2UtbWF0cml4L2tubi13b3JrZXIuanMiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9lbnN1cmUgY2h1bmsiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2dldCBqYXZhc2NyaXB0IGNodW5rIGZpbGVuYW1lIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vcGVwdGlkZXMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9wZXB0aWRlcy93ZWJwYWNrL3J1bnRpbWUvaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL3BlcHRpZGVzL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGVmZXJyZWQgPSBbXTtcbl9fd2VicGFja19yZXF1aXJlX18uTyA9IChyZXN1bHQsIGNodW5rSWRzLCBmbiwgcHJpb3JpdHkpID0+IHtcblx0aWYoY2h1bmtJZHMpIHtcblx0XHRwcmlvcml0eSA9IHByaW9yaXR5IHx8IDA7XG5cdFx0Zm9yKHZhciBpID0gZGVmZXJyZWQubGVuZ3RoOyBpID4gMCAmJiBkZWZlcnJlZFtpIC0gMV1bMl0gPiBwcmlvcml0eTsgaS0tKSBkZWZlcnJlZFtpXSA9IGRlZmVycmVkW2kgLSAxXTtcblx0XHRkZWZlcnJlZFtpXSA9IFtjaHVua0lkcywgZm4sIHByaW9yaXR5XTtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIG5vdEZ1bGZpbGxlZCA9IEluZmluaXR5O1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGRlZmVycmVkLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIFtjaHVua0lkcywgZm4sIHByaW9yaXR5XSA9IGRlZmVycmVkW2ldO1xuXHRcdHZhciBmdWxmaWxsZWQgPSB0cnVlO1xuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgY2h1bmtJZHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdGlmICgocHJpb3JpdHkgJiAxID09PSAwIHx8IG5vdEZ1bGZpbGxlZCA+PSBwcmlvcml0eSkgJiYgT2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5PKS5ldmVyeSgoa2V5KSA9PiAoX193ZWJwYWNrX3JlcXVpcmVfXy5PW2tleV0oY2h1bmtJZHNbal0pKSkpIHtcblx0XHRcdFx0Y2h1bmtJZHMuc3BsaWNlKGotLSwgMSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmdWxmaWxsZWQgPSBmYWxzZTtcblx0XHRcdFx0aWYocHJpb3JpdHkgPCBub3RGdWxmaWxsZWQpIG5vdEZ1bGZpbGxlZCA9IHByaW9yaXR5O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZihmdWxmaWxsZWQpIHtcblx0XHRcdGRlZmVycmVkLnNwbGljZShpLS0sIDEpXG5cdFx0XHR2YXIgciA9IGZuKCk7XG5cdFx0XHRpZiAociAhPT0gdW5kZWZpbmVkKSByZXN1bHQgPSByO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTsiLCJ2YXIgbmV4dCA9IF9fd2VicGFja19yZXF1aXJlX18ueDtcbl9fd2VicGFja19yZXF1aXJlX18ueCA9ICgpID0+IHtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZSgzMDEpLnRoZW4obmV4dCk7XG59OyIsImltcG9ydCB7IERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgY29uc3QgaXNOaWwgPSAoeCkgPT4geCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0U21hbGxlcihkaXN0YW5jZXNBciwgaW5kZXhlcywgbnVtLCBpbmRleCkge1xuICAgIGlmIChudW0gPiBkaXN0YW5jZXNBcltkaXN0YW5jZXNBci5sZW5ndGggLSAxXSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlzdGFuY2VzQXIuZmluZEluZGV4KCh2KSA9PiBudW0gPCB2KTtcbiAgICBkaXN0YW5jZXNBci5wb3AoKTtcbiAgICBkaXN0YW5jZXNBci5zcGxpY2UobmV3UG9zaXRpb24sIDAsIG51bSk7XG4gICAgaW5kZXhlcy5wb3AoKTtcbiAgICBpbmRleGVzLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaW5kZXgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExhcmdlcihkaXN0YW5jZXNBciwgaW5kZXhlcywgbnVtLCBpbmRleCkge1xuICAgIGlmIChudW0gPCBkaXN0YW5jZXNBcltkaXN0YW5jZXNBci5sZW5ndGggLSAxXSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlzdGFuY2VzQXIuZmluZEluZGV4KCh2KSA9PiBudW0gPiB2KTtcbiAgICBkaXN0YW5jZXNBci5wb3AoKTtcbiAgICBkaXN0YW5jZXNBci5zcGxpY2UobmV3UG9zaXRpb24sIDAsIG51bSk7XG4gICAgaW5kZXhlcy5wb3AoKTtcbiAgICBpbmRleGVzLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaW5kZXgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24oYWdncmVnYXRpb25NZXRob2QsIHdlaWdodHMpIHtcbiAgICBzd2l0Y2ggKGFnZ3JlZ2F0aW9uTWV0aG9kKSB7XG4gICAgICAgIGNhc2UgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMuTUFOSEFUVEFOOlxuICAgICAgICAgICAgcmV0dXJuICh2cykgPT4gdnMucmVkdWNlKChhY2MsIHZhbCwgaWR4KSA9PiBhY2MgKyB2YWwgKiB3ZWlnaHRzW2lkeF0sIDApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICh2cykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGV1Y2xpZGVhblxuICAgICAgICAgICAgICAgIGNvbnN0IHN1bSA9IHZzLnJlZHVjZSgoYWNjLCB2YWwsIGlkeCkgPT4gYWNjICsgKHZhbCAqIHdlaWdodHNbaWR4XSkgKiogMiwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydChzdW0pO1xuICAgICAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWFJwYkhNdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUoxZEdsc2N5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVN4UFFVRlBMRVZCUVRSQ0xEQkNRVUV3UWl4RlFVRkRMRTFCUVUwc1UwRkJVeXhEUVVGRE8wRkJSVGxGTEUxQlFVMHNRMEZCUXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzVTBGQlV5eERRVUZETzBGQlJTOUVMRTFCUVUwc1ZVRkJWU3hoUVVGaExFTkJRVU1zVjBGQmNVSXNSVUZCUlN4UFFVRnBRaXhGUVVGRkxFZEJRVmNzUlVGQlJTeExRVUZoTzBsQlEyaEhMRWxCUVVrc1IwRkJSeXhIUVVGSExGZEJRVmNzUTBGQlF5eFhRVUZYTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJRenRSUVVONlF5eFBRVUZQTzBsQlJWUXNUVUZCVFN4WFFVRlhMRWRCUVVjc1YwRkJWeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6RkVMRmRCUVZjc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5zUWl4WFFVRlhMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRlRU1zVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRPMGxCUTJRc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM2hETEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1dVRkJXU3hEUVVGRExGZEJRWEZDTEVWQlFVVXNUMEZCYVVJc1JVRkJSU3hIUVVGWExFVkJRVVVzUzBGQllUdEpRVU12Uml4SlFVRkpMRWRCUVVjc1IwRkJSeXhYUVVGWExFTkJRVU1zVjBGQlZ5eERRVUZETEUxQlFVMHNSMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRla01zVDBGQlR6dEpRVVZVTEUxQlFVMHNWMEZCVnl4SFFVRkhMRmRCUVZjc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU14UkN4WFFVRlhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRGJFSXNWMEZCVnl4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTNoRExFOUJRVThzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTmtMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVONFF5eERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMSE5DUVVGelFpeERRVU53UXl4cFFrRkJORU1zUlVGQlJTeFBRVUZwUWp0SlFVVXZSQ3hSUVVGUkxHbENRVUZwUWl4RlFVRkZPMUZCUTNwQ0xFdEJRVXNzTUVKQlFUQkNMRU5CUVVNc1UwRkJVenRaUVVOMlF5eFBRVUZQTEVOQlFVTXNSVUZCV1N4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRWRCUVVjc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNKR08xbEJRMFVzVDBGQlR5eERRVUZETEVWQlFWa3NSVUZCUlN4RlFVRkZPMmRDUVVOMFFpeFpRVUZaTzJkQ1FVTmFMRTFCUVUwc1IwRkJSeXhIUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhIUVVGSExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZETjBVc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoQ0xFTkJRVU1zUTBGQlF6dExRVU5NTzBGQlEwZ3NRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkN3Z1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkhOOUlHWnliMjBnSnk0dmRIbHdaWE1uTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnYVhOT2FXd2dQU0FvZURvZ1lXNTVLU0E5UGlCNElEMDlQU0J1ZFd4c0lIeDhJSGdnUFQwOUlIVnVaR1ZtYVc1bFpEdGNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2x1YzJWeWRGTnRZV3hzWlhJb1pHbHpkR0Z1WTJWelFYSTZJRzUxYldKbGNsdGRMQ0JwYm1SbGVHVnpPaUJ1ZFcxaVpYSmJYU3dnYm5WdE9pQnVkVzFpWlhJc0lHbHVaR1Y0T2lCdWRXMWlaWElwSUh0Y2JpQWdhV1lnS0c1MWJTQStJR1JwYzNSaGJtTmxjMEZ5VzJScGMzUmhibU5sYzBGeUxteGxibWQwYUMweFhTbGNiaUFnSUNCeVpYUjFjbTQ3WEc1Y2JpQWdZMjl1YzNRZ2JtVjNVRzl6YVhScGIyNGdQU0JrYVhOMFlXNWpaWE5CY2k1bWFXNWtTVzVrWlhnb0tIWXBJRDArSUc1MWJTQThJSFlwTzF4dUlDQmthWE4wWVc1alpYTkJjaTV3YjNBb0tUdGNiaUFnWkdsemRHRnVZMlZ6UVhJdWMzQnNhV05sS0c1bGQxQnZjMmwwYVc5dUxDQXdMQ0J1ZFcwcE8xeHVJQ0JwYm1SbGVHVnpMbkJ2Y0NncE8xeHVJQ0JwYm1SbGVHVnpMbk53YkdsalpTaHVaWGRRYjNOcGRHbHZiaXdnTUN3Z2FXNWtaWGdwTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdhVzV6WlhKMFRHRnlaMlZ5S0dScGMzUmhibU5sYzBGeU9pQnVkVzFpWlhKYlhTd2dhVzVrWlhobGN6b2diblZ0WW1WeVcxMHNJRzUxYlRvZ2JuVnRZbVZ5TENCcGJtUmxlRG9nYm5WdFltVnlLU0I3WEc0Z0lHbG1JQ2h1ZFcwZ1BDQmthWE4wWVc1alpYTkJjbHRrYVhOMFlXNWpaWE5CY2k1c1pXNW5kR2d0TVYwcFhHNGdJQ0FnY21WMGRYSnVPMXh1WEc0Z0lHTnZibk4wSUc1bGQxQnZjMmwwYVc5dUlEMGdaR2x6ZEdGdVkyVnpRWEl1Wm1sdVpFbHVaR1Y0S0NoMktTQTlQaUJ1ZFcwZ1BpQjJLVHRjYmlBZ1pHbHpkR0Z1WTJWelFYSXVjRzl3S0NrN1hHNGdJR1JwYzNSaGJtTmxjMEZ5TG5Od2JHbGpaU2h1WlhkUWIzTnBkR2x2Yml3Z01Dd2diblZ0S1R0Y2JpQWdhVzVrWlhobGN5NXdiM0FvS1R0Y2JpQWdhVzVrWlhobGN5NXpjR3hwWTJVb2JtVjNVRzl6YVhScGIyNHNJREFzSUdsdVpHVjRLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHZGxkRUZuWjNKbFoyRjBhVzl1Um5WdVkzUnBiMjRvWEc0Z0lHRm5aM0psWjJGMGFXOXVUV1YwYUc5a09pQkVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a0xDQjNaV2xuYUhSek9pQnVkVzFpWlhKYlhWeHVLVG9nS0haaGJIVmxjem9nYm5WdFltVnlXMTBwSUQwK0lHNTFiV0psY2lCN1hHNGdJSE4zYVhSamFDQW9ZV2RuY21WbllYUnBiMjVOWlhSb2IyUXBJSHRjYmlBZ0lDQmpZWE5sSUVScGMzUmhibU5sUVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlJ6TGsxQlRraEJWRlJCVGpwY2JpQWdJQ0FnSUhKbGRIVnliaUFvZG5NNklHNTFiV0psY2x0ZEtTQTlQaUIyY3k1eVpXUjFZMlVvS0dGall5d2dkbUZzTENCcFpIZ3BJRDArSUdGall5QXJJSFpoYkNBcUlIZGxhV2RvZEhOYmFXUjRYU3dnTUNrN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsZEhWeWJpQW9kbk02SUc1MWJXSmxjbHRkS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQzh2SUdWMVkyeHBaR1ZoYmx4dUlDQWdJQ0FnSUNCamIyNXpkQ0J6ZFcwZ1BTQjJjeTV5WldSMVkyVW9LR0ZqWXl3Z2RtRnNMQ0JwWkhncElEMCtJR0ZqWXlBcklDaDJZV3dnS2lCM1pXbG5hSFJ6VzJsa2VGMHBJQ29xSURJc0lEQXBPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdUV0YwYUM1emNYSjBLSE4xYlNrN1hHNGdJQ0FnSUNCOU8xeHVJQ0I5WEc1OVhHNGlYWDA9IiwiaW1wb3J0IHsgZ2V0QWdncmVnYXRpb25GdW5jdGlvbiwgaW5zZXJ0U21hbGxlciwgaXNOaWwgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IE1lYXN1cmUsIGlzQml0QXJyYXlNZXRyaWMgfSBmcm9tICcuLi90eXBlZC1tZXRyaWNzJztcbmltcG9ydCBCaXRBcnJheSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9iaXQtYXJyYXknO1xub25tZXNzYWdlID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZXMsIHN0YXJ0SWR4LCBlbmRJZHgsIGZuTmFtZXMsIG9wdHMsIG5OZWlnaGJvdXJzLCB3ZWlnaHRzLCBhZ2dyZWdhdGlvbk1ldGhvZCB9ID0gZXZlbnQuZGF0YTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBrbm5JbmRleGVzID0gbmV3IEFycmF5KHZhbHVlc1swXS5sZW5ndGgpLmZpbGwobnVsbCkubWFwKCgpID0+IG5ldyBBcnJheShuTmVpZ2hib3VycykuZmlsbCgtMSkpO1xuICAgICAgICBjb25zdCBrbm5EaXN0YW5jZXMgPSBuZXcgQXJyYXkodmFsdWVzWzBdLmxlbmd0aCkuZmlsbChudWxsKS5tYXAoKCkgPT4gbmV3IEFycmF5KG5OZWlnaGJvdXJzKS5maWxsKDk5OTk5OSkpO1xuICAgICAgICBjb25zdCBhZ2dyZWdhdGUgPSBnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uKGFnZ3JlZ2F0aW9uTWV0aG9kLCB3ZWlnaHRzKTtcbiAgICAgICAgY29uc3QgY2h1bmtTaXplID0gZW5kSWR4IC0gc3RhcnRJZHg7XG4gICAgICAgIHZhbHVlcy5mb3JFYWNoKCh2LCBjb2xJZHgpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0JpdEFycmF5TWV0cmljKGZuTmFtZXNbY29sSWR4XSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmlsKHZbaV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlc1tjb2xJZHhdW2ldID0gbmV3IEJpdEFycmF5KHZhbHVlc1tjb2xJZHhdW2ldLl9kYXRhLCB2YWx1ZXNbY29sSWR4XVtpXS5fbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY250ID0gMDtcbiAgICAgICAgY29uc3QgZGlzdGFuY2VGbnMgPSBuZXcgQXJyYXkoZm5OYW1lcy5sZW5ndGgpLmZpbGwobnVsbCkubWFwKChfLCBpKSA9PiBuZXcgTWVhc3VyZShmbk5hbWVzW2ldKS5nZXRNZWFzdXJlKG9wdHNbaV0pKTtcbiAgICAgICAgY29uc3Qgc3RhcnRSb3cgPSB2YWx1ZXNbMF0ubGVuZ3RoIC0gMiAtIE1hdGguZmxvb3IoTWF0aC5zcXJ0KC04ICogc3RhcnRJZHggKyA0ICogdmFsdWVzWzBdLmxlbmd0aCAqICh2YWx1ZXNbMF0ubGVuZ3RoIC0gMSkgLSA3KSAvIDIgLSAwLjUpO1xuICAgICAgICBjb25zdCBzdGFydENvbCA9IHN0YXJ0SWR4IC0gdmFsdWVzWzBdLmxlbmd0aCAqIHN0YXJ0Um93ICsgTWF0aC5mbG9vcigoc3RhcnRSb3cgKyAxKSAqIChzdGFydFJvdyArIDIpIC8gMik7XG4gICAgICAgIGxldCBtaSA9IHN0YXJ0Um93O1xuICAgICAgICBsZXQgbWogPSBzdGFydENvbDtcbiAgICAgICAgd2hpbGUgKGNudCA8IGNodW5rU2l6ZSkge1xuICAgICAgICAgICAgLy9jb25zdCB2YWx1ZSA9IHNlcTFMaXN0W21pXSAmJiBzZXExTGlzdFttal0gPyBoYW1taW5nKHNlcTFMaXN0W21pXSwgc2VxMUxpc3RbbWpdKSA6IDA7XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZVZhbHVlcyA9IGRpc3RhbmNlRm5zLm1hcCgoZm4sIGlkeCkgPT4gIWlzTmlsKHZhbHVlc1tpZHhdW21pXSkgJiYgIWlzTmlsKHZhbHVlc1tpZHhdW21qXSkgP1xuICAgICAgICAgICAgICAgIGZuKHZhbHVlc1tpZHhdW21pXSwgdmFsdWVzW2lkeF1bbWpdKSA6IDEpO1xuICAgICAgICAgICAgLy8gY29uc3QgdmFsdWUgPSAhaXNOaWwodmFsdWVzW21pXSkgJiYgIWlzTmlsKHZhbHVlc1ttal0pID9cbiAgICAgICAgICAgIC8vICAgZGlzdGFuY2VGbih2YWx1ZXNbbWldLCB2YWx1ZXNbbWpdKSA6IDE7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRpc3RhbmNlVmFsdWVzLmxlbmd0aCA9PT0gMSA/IGRpc3RhbmNlVmFsdWVzWzBdIDogYWdncmVnYXRlKGRpc3RhbmNlVmFsdWVzKTtcbiAgICAgICAgICAgIGluc2VydFNtYWxsZXIoa25uRGlzdGFuY2VzW21pXSwga25uSW5kZXhlc1ttaV0sIHZhbHVlLCBtaik7XG4gICAgICAgICAgICBpbnNlcnRTbWFsbGVyKGtubkRpc3RhbmNlc1ttal0sIGtubkluZGV4ZXNbbWpdLCB2YWx1ZSwgbWkpO1xuICAgICAgICAgICAgY250Kys7XG4gICAgICAgICAgICBtaisrO1xuICAgICAgICAgICAgaWYgKG1qID09PSB2YWx1ZXNbMF0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbWkrKztcbiAgICAgICAgICAgICAgICBtaiA9IG1pICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwb3N0TWVzc2FnZSh7IGtubkRpc3RhbmNlcywga25uSW5kZXhlcyB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcG9zdE1lc3NhZ2UoeyBlcnJvcjogZSB9KTtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYTI1dUxYZHZjbXRsY2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbXR1YmkxM2IzSnJaWEl1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNUMEZCVHl4RlFVRkRMSE5DUVVGelFpeEZRVUZGTEdGQlFXRXNSVUZCUlN4TFFVRkxMRVZCUVVNc1RVRkJUU3hUUVVGVExFTkJRVU03UVVGRGNrVXNUMEZCVHl4RlFVRmxMRTlCUVU4c1JVRkJSU3huUWtGQlowSXNSVUZCUXl4TlFVRk5MR3RDUVVGclFpeERRVUZETzBGQlEzcEZMRTlCUVU4c1VVRkJVU3hOUVVGTkxIbERRVUY1UXl4RFFVRkRPMEZCUnk5RUxGTkJRVk1zUjBGQlJ5eExRVUZMTEVWQlFVVXNTMEZCU3l4RlFVRkZMRVZCUVVVN1NVRkRNVUlzVFVGQlRTeEZRVUZETEUxQlFVMHNSVUZCUlN4UlFVRlJMRVZCUVVVc1RVRkJUU3hGUVVGRkxFOUJRVThzUlVGQlJTeEpRVUZKTEVWQlFVVXNWMEZCVnl4RlFVRkZMRTlCUVU4c1JVRkJSU3hwUWtGQmFVSXNSVUZCUXl4SFFVVnBRaXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETzBsQlEzQklMRWxCUVVrN1VVRkRSaXhOUVVGTkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4SlFVRkpMRXRCUVVzc1EwRkJVeXhYUVVGWExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRemRITEUxQlFVMHNXVUZCV1N4SFFVRkhMRWxCUVVrc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZUTEZkQlFWY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEyNUlMRTFCUVUwc1UwRkJVeXhIUVVGSExITkNRVUZ6UWl4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUTNKRkxFMUJRVTBzVTBGQlV5eEhRVUZITEUxQlFVMHNSMEZCUnl4UlFVRlJMRU5CUVVNN1VVRkRjRU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzUlVGQlJUdFpRVU16UWl4SlFVRkpMR2RDUVVGblFpeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhGUVVGRk8yZENRVU55UXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJUdHZRa0ZEYWtNc1NVRkJTU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPM2RDUVVGRkxGTkJRVk03YjBKQlF6RkNMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dHBRa0ZEZEVZN1lVRkRSanRSUVVOSUxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwZ3NTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRMW9zVFVGQlRTeFhRVUZYTEVkQlFVY3NTVUZCU1N4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhKUVVGSkxFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOd1NDeE5RVUZOTEZGQlFWRXNSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVOb1JDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExGRkJRVkVzUjBGQlJ5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlF6RkdMRTFCUVUwc1VVRkJVU3hIUVVGSExGRkJRVkVzUjBGQlJ5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hIUVVGSExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1VVRkJVU3hIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlF6RkhMRWxCUVVrc1JVRkJSU3hIUVVGSExGRkJRVkVzUTBGQlF6dFJRVU5zUWl4SlFVRkpMRVZCUVVVc1IwRkJSeXhSUVVGUkxFTkJRVU03VVVGRGJFSXNUMEZCVHl4SFFVRkhMRWRCUVVjc1UwRkJVeXhGUVVGRk8xbEJRM1JDTEhWR1FVRjFSanRaUVVOMlJpeE5RVUZOTEdOQlFXTXNSMEZCUnl4WFFVRlhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRkRWNzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkROVU1zTWtSQlFUSkVPMWxCUXpORUxEUkRRVUUwUXp0WlFVTTFReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eGpRVUZqTEVOQlFVTXNUVUZCVFN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTTdXVUZETVVZc1lVRkJZU3hEUVVGRExGbEJRVmtzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4VlFVRlZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUzBGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMWxCUXpORUxHRkJRV0VzUTBGQlF5eFpRVUZaTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1ZVRkJWU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEV0QlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRaUVVVelJDeEhRVUZITEVWQlFVVXNRMEZCUXp0WlFVTk9MRVZCUVVVc1JVRkJSU3hEUVVGRE8xbEJRMHdzU1VGQlNTeEZRVUZGTEV0QlFVc3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJUdG5Ra0ZETTBJc1JVRkJSU3hGUVVGRkxFTkJRVU03WjBKQlEwd3NSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03WVVGRFlqdFRRVU5HTzFGQlJVUXNWMEZCVnl4RFFVRkRMRVZCUVVNc1dVRkJXU3hGUVVGRkxGVkJRVlVzUlVGQlF5eERRVUZETEVOQlFVTTdTMEZEZWtNN1NVRkJReXhQUVVGUExFTkJRVU1zUlVGQlJUdFJRVU5XTEZkQlFWY3NRMEZCUXl4RlFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETzB0QlEzcENPMEZCUTBnc1EwRkJReXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdG5aWFJCWjJkeVpXZGhkR2x2YmtaMWJtTjBhVzl1TENCcGJuTmxjblJUYldGc2JHVnlMQ0JwYzA1cGJIMGdabkp2YlNBbkxpOTFkR2xzY3ljN1hHNXBiWEJ2Y25RZ2UwdHViM2R1VFdWMGNtbGpjeXdnVFdWaGMzVnlaU3dnYVhOQ2FYUkJjbkpoZVUxbGRISnBZMzBnWm5KdmJTQW5MaTR2ZEhsd1pXUXRiV1YwY21samN5YzdYRzVwYlhCdmNuUWdRbWwwUVhKeVlYa2dabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZZbWwwTFdGeWNtRjVKenRjYm1sdGNHOXlkQ0I3UkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2YmsxbGRHaHZaSDBnWm5KdmJTQW5MaTkwZVhCbGN5YzdYRzVjYm05dWJXVnpjMkZuWlNBOUlHRnplVzVqSUNobGRtVnVkQ2tnUFQ0Z2UxeHVJQ0JqYjI1emRDQjdkbUZzZFdWekxDQnpkR0Z5ZEVsa2VDd2daVzVrU1dSNExDQm1iazVoYldWekxDQnZjSFJ6TENCdVRtVnBaMmhpYjNWeWN5d2dkMlZwWjJoMGN5d2dZV2RuY21WbllYUnBiMjVOWlhSb2IyUjlPbHh1SUNBZ0lIdDJZV3gxWlhNNklFRnljbUY1UEdGdWVWdGRQaXdnYzNSaGNuUkpaSGc2SUc1MWJXSmxjaXdnWlc1a1NXUjRPaUJ1ZFcxaVpYSXNJR1p1VG1GdFpYTTZJRXR1YjNkdVRXVjBjbWxqYzF0ZExGeHVJQ0FnSUNBZ2IzQjBjem9nWVc1NVcxMHNJRzVPWldsbmFHSnZkWEp6T2lCdWRXMWlaWElzSUhkbGFXZG9kSE02SUc1MWJXSmxjbHRkTENCaFoyZHlaV2RoZEdsdmJrMWxkR2h2WkRvZ1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkgwZ1BTQmxkbVZ1ZEM1a1lYUmhPMXh1SUNCMGNua2dlMXh1SUNBZ0lHTnZibk4wSUd0dWJrbHVaR1Y0WlhNZ1BTQnVaWGNnUVhKeVlYa29kbUZzZFdWeld6QmRMbXhsYm1kMGFDa3VabWxzYkNodWRXeHNLUzV0WVhBb0tDa2dQVDRnYm1WM0lFRnljbUY1UEc1MWJXSmxjajRvYms1bGFXZG9ZbTkxY25NcExtWnBiR3dvTFRFcEtUdGNiaUFnSUNCamIyNXpkQ0JyYm01RWFYTjBZVzVqWlhNZ1BTQnVaWGNnUVhKeVlYa29kbUZzZFdWeld6QmRMbXhsYm1kMGFDa3VabWxzYkNodWRXeHNLUzV0WVhBb0tDa2dQVDRnYm1WM0lFRnljbUY1UEc1MWJXSmxjajRvYms1bGFXZG9ZbTkxY25NcExtWnBiR3dvT1RrNU9UazVLU2s3WEc0Z0lDQWdZMjl1YzNRZ1lXZG5jbVZuWVhSbElEMGdaMlYwUVdkbmNtVm5ZWFJwYjI1R2RXNWpkR2x2YmloaFoyZHlaV2RoZEdsdmJrMWxkR2h2WkN3Z2QyVnBaMmgwY3lrN1hHNGdJQ0FnWTI5dWMzUWdZMmgxYm10VGFYcGxJRDBnWlc1a1NXUjRJQzBnYzNSaGNuUkpaSGc3WEc0Z0lDQWdkbUZzZFdWekxtWnZja1ZoWTJnb0tIWXNJR052YkVsa2VDa2dQVDRnZTF4dUlDQWdJQ0FnYVdZZ0tHbHpRbWwwUVhKeVlYbE5aWFJ5YVdNb1ptNU9ZVzFsYzF0amIyeEpaSGhkS1NrZ2UxeHVJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFl1YkdWdVozUm9PeUFySzJrcElIdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2FYTk9hV3dvZGx0cFhTa3BJR052Ym5ScGJuVmxPMXh1SUNBZ0lDQWdJQ0FnSUhaaGJIVmxjMXRqYjJ4SlpIaGRXMmxkSUQwZ2JtVjNJRUpwZEVGeWNtRjVLSFpoYkhWbGMxdGpiMnhKWkhoZFcybGRMbDlrWVhSaExDQjJZV3gxWlhOYlkyOXNTV1I0WFZ0cFhTNWZiR1Z1WjNSb0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMHBPMXh1SUNBZ0lHeGxkQ0JqYm5RZ1BTQXdPMXh1SUNBZ0lHTnZibk4wSUdScGMzUmhibU5sUm01eklEMGdibVYzSUVGeWNtRjVLR1p1VG1GdFpYTXViR1Z1WjNSb0tTNW1hV3hzS0c1MWJHd3BMbTFoY0Nnb1h5d2dhU2tnUFQ0Z2JtVjNJRTFsWVhOMWNtVW9abTVPWVcxbGMxdHBYU2t1WjJWMFRXVmhjM1Z5WlNodmNIUnpXMmxkS1NrN1hHNGdJQ0FnWTI5dWMzUWdjM1JoY25SU2IzY2dQU0IyWVd4MVpYTmJNRjB1YkdWdVozUm9JQzBnTWlBdElFMWhkR2d1Wm14dmIzSW9YRzRnSUNBZ0lDQk5ZWFJvTG5OeGNuUW9MVGdnS2lCemRHRnlkRWxrZUNBcklEUWdLaUIyWVd4MVpYTmJNRjB1YkdWdVozUm9JQ29nS0haaGJIVmxjMXN3WFM1c1pXNW5kR2dnTFNBeEtTQXRJRGNwSUM4Z01pQXRJREF1TlNrN1hHNGdJQ0FnWTI5dWMzUWdjM1JoY25SRGIyd2dQU0J6ZEdGeWRFbGtlQ0F0SUhaaGJIVmxjMXN3WFM1c1pXNW5kR2dnS2lCemRHRnlkRkp2ZHlBcklFMWhkR2d1Wm14dmIzSW9LSE4wWVhKMFVtOTNJQ3NnTVNrZ0tpQW9jM1JoY25SU2IzY2dLeUF5S1NBdklESXBPMXh1SUNBZ0lHeGxkQ0J0YVNBOUlITjBZWEowVW05M08xeHVJQ0FnSUd4bGRDQnRhaUE5SUhOMFlYSjBRMjlzTzF4dUlDQWdJSGRvYVd4bElDaGpiblFnUENCamFIVnVhMU5wZW1VcElIdGNiaUFnSUNBZ0lDOHZZMjl1YzNRZ2RtRnNkV1VnUFNCelpYRXhUR2x6ZEZ0dGFWMGdKaVlnYzJWeE1VeHBjM1JiYldwZElEOGdhR0Z0YldsdVp5aHpaWEV4VEdsemRGdHRhVjBzSUhObGNURk1hWE4wVzIxcVhTa2dPaUF3TzF4dUlDQWdJQ0FnWTI5dWMzUWdaR2x6ZEdGdVkyVldZV3gxWlhNZ1BTQmthWE4wWVc1alpVWnVjeTV0WVhBb0tHWnVMQ0JwWkhncElEMCtJQ0ZwYzA1cGJDaDJZV3gxWlhOYmFXUjRYVnR0YVYwcElDWW1JQ0ZwYzA1cGJDaDJZV3gxWlhOYmFXUjRYVnR0YWwwcElEOWNiaUFnSUNBZ0lDQWdabTRvZG1Gc2RXVnpXMmxrZUYxYmJXbGRMQ0IyWVd4MVpYTmJhV1I0WFZ0dGFsMHBJRG9nTVNrN1hHNGdJQ0FnSUNBdkx5QmpiMjV6ZENCMllXeDFaU0E5SUNGcGMwNXBiQ2gyWVd4MVpYTmJiV2xkS1NBbUppQWhhWE5PYVd3b2RtRnNkV1Z6VzIxcVhTa2dQMXh1SUNBZ0lDQWdMeThnSUNCa2FYTjBZVzVqWlVadUtIWmhiSFZsYzF0dGFWMHNJSFpoYkhWbGMxdHRhbDBwSURvZ01UdGNiaUFnSUNBZ0lHTnZibk4wSUhaaGJIVmxJRDBnWkdsemRHRnVZMlZXWVd4MVpYTXViR1Z1WjNSb0lEMDlQU0F4SUQ4Z1pHbHpkR0Z1WTJWV1lXeDFaWE5iTUYwZ09pQmhaMmR5WldkaGRHVW9aR2x6ZEdGdVkyVldZV3gxWlhNcE8xeHVJQ0FnSUNBZ2FXNXpaWEowVTIxaGJHeGxjaWhyYm01RWFYTjBZVzVqWlhOYmJXbGRMQ0JyYm01SmJtUmxlR1Z6VzIxcFhTd2dkbUZzZFdVc0lHMXFLVHRjYmlBZ0lDQWdJR2x1YzJWeWRGTnRZV3hzWlhJb2EyNXVSR2x6ZEdGdVkyVnpXMjFxWFN3Z2EyNXVTVzVrWlhobGMxdHRhbDBzSUhaaGJIVmxMQ0J0YVNrN1hHNWNiaUFnSUNBZ0lHTnVkQ3NyTzF4dUlDQWdJQ0FnYldvckt6dGNiaUFnSUNBZ0lHbG1JQ2h0YWlBOVBUMGdkbUZzZFdWeld6QmRMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0J0YVNzck8xeHVJQ0FnSUNBZ0lDQnRhaUE5SUcxcElDc2dNVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQndiM04wVFdWemMyRm5aU2g3YTI1dVJHbHpkR0Z1WTJWekxDQnJibTVKYm1SbGVHVnpmU2s3WEc0Z0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQndiM04wVFdWemMyRm5aU2g3WlhKeWIzSTZJR1Y5S1R0Y2JpQWdmVnh1ZlR0Y2JpSmRmUT09IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4vLyB0aGUgc3RhcnR1cCBmdW5jdGlvblxuX193ZWJwYWNrX3JlcXVpcmVfXy54ID0gKCkgPT4ge1xuXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcblx0Ly8gVGhpcyBlbnRyeSBtb2R1bGUgZGVwZW5kcyBvbiBvdGhlciBsb2FkZWQgY2h1bmtzIGFuZCBleGVjdXRpb24gbmVlZCB0byBiZSBkZWxheWVkXG5cdHZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXy5PKHVuZGVmaW5lZCwgWzMwMV0sICgpID0+IChfX3dlYnBhY2tfcmVxdWlyZV9fKDEyODIpKSlcblx0X193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18uTyhfX3dlYnBhY2tfZXhwb3J0c19fKTtcblx0cmV0dXJuIF9fd2VicGFja19leHBvcnRzX187XG59O1xuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmYgPSB7fTtcbi8vIFRoaXMgZmlsZSBjb250YWlucyBvbmx5IHRoZSBlbnRyeSBjaHVuay5cbi8vIFRoZSBjaHVuayBsb2FkaW5nIGZ1bmN0aW9uIGZvciBhZGRpdGlvbmFsIGNodW5rc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5lID0gKGNodW5rSWQpID0+IHtcblx0cmV0dXJuIFByb21pc2UuYWxsKE9iamVjdC5rZXlzKF9fd2VicGFja19yZXF1aXJlX18uZikucmVkdWNlKChwcm9taXNlcywga2V5KSA9PiB7XG5cdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5mW2tleV0oY2h1bmtJZCwgcHJvbWlzZXMpO1xuXHRcdHJldHVybiBwcm9taXNlcztcblx0fSwgW10pKTtcbn07IiwiLy8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYXN5bmMgY2h1bmtzIGFuZCBzaWJsaW5nIGNodW5rcyBmb3IgdGhlIGVudHJ5cG9pbnRcbl9fd2VicGFja19yZXF1aXJlX18udSA9IChjaHVua0lkKSA9PiB7XG5cdC8vIHJldHVybiB1cmwgZm9yIGZpbGVuYW1lcyBiYXNlZCBvbiB0ZW1wbGF0ZVxuXHRyZXR1cm4gXCJcIiArIGNodW5rSWQgKyBcIi5qc1wiO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICFzY3JpcHRVcmwpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCIvLyBubyBiYXNlVVJJXG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgY2h1bmtzXG4vLyBcIjFcIiBtZWFucyBcImFscmVhZHkgbG9hZGVkXCJcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDI4MjogMVxufTtcblxuLy8gaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nXG52YXIgaW5zdGFsbENodW5rID0gKGRhdGEpID0+IHtcblx0dmFyIFtjaHVua0lkcywgbW9yZU1vZHVsZXMsIHJ1bnRpbWVdID0gZGF0YTtcblx0Zm9yKHZhciBtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhtb3JlTW9kdWxlcywgbW9kdWxlSWQpKSB7XG5cdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuXHRcdH1cblx0fVxuXHRpZihydW50aW1lKSBydW50aW1lKF9fd2VicGFja19yZXF1aXJlX18pO1xuXHR3aGlsZShjaHVua0lkcy5sZW5ndGgpXG5cdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRzLnBvcCgpXSA9IDE7XG5cdHBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uKGRhdGEpO1xufTtcbl9fd2VicGFja19yZXF1aXJlX18uZi5pID0gKGNodW5rSWQsIHByb21pc2VzKSA9PiB7XG5cdC8vIFwiMVwiIGlzIHRoZSBzaWduYWwgZm9yIFwiYWxyZWFkeSBsb2FkZWRcIlxuXHRpZighaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdKSB7XG5cdFx0aWYodHJ1ZSkgeyAvLyBhbGwgY2h1bmtzIGhhdmUgSlNcblx0XHRcdGltcG9ydFNjcmlwdHMoX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgX193ZWJwYWNrX3JlcXVpcmVfXy51KGNodW5rSWQpKTtcblx0XHR9XG5cdH1cbn07XG5cbnZhciBjaHVua0xvYWRpbmdHbG9iYWwgPSBzZWxmW1wid2VicGFja0NodW5rcGVwdGlkZXNcIl0gPSBzZWxmW1wid2VicGFja0NodW5rcGVwdGlkZXNcIl0gfHwgW107XG52YXIgcGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24gPSBjaHVua0xvYWRpbmdHbG9iYWwucHVzaC5iaW5kKGNodW5rTG9hZGluZ0dsb2JhbCk7XG5jaHVua0xvYWRpbmdHbG9iYWwucHVzaCA9IGluc3RhbGxDaHVuaztcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdCIsIi8vIHJ1biBzdGFydHVwXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18ueCgpO1xuIl0sIm5hbWVzIjpbImRlZmVycmVkIiwibmV4dCIsImlzTmlsIiwieCIsImluc2VydFNtYWxsZXIiLCJkaXN0YW5jZXNBciIsImluZGV4ZXMiLCJudW0iLCJpbmRleCIsImxlbmd0aCIsIm5ld1Bvc2l0aW9uIiwiZmluZEluZGV4IiwidiIsInBvcCIsInNwbGljZSIsIm9ubWVzc2FnZSIsImFzeW5jIiwiZXZlbnQiLCJ2YWx1ZXMiLCJzdGFydElkeCIsImVuZElkeCIsImZuTmFtZXMiLCJvcHRzIiwibk5laWdoYm91cnMiLCJ3ZWlnaHRzIiwiYWdncmVnYXRpb25NZXRob2QiLCJkYXRhIiwia25uSW5kZXhlcyIsIkFycmF5IiwiZmlsbCIsIm1hcCIsImtubkRpc3RhbmNlcyIsImFnZ3JlZ2F0ZSIsIk1BTkhBVFRBTiIsInZzIiwicmVkdWNlIiwiYWNjIiwidmFsIiwiaWR4Iiwic3VtIiwiTWF0aCIsInNxcnQiLCJnZXRBZ2dyZWdhdGlvbkZ1bmN0aW9uIiwiY2h1bmtTaXplIiwiZm9yRWFjaCIsImNvbElkeCIsImkiLCJfZGF0YSIsIl9sZW5ndGgiLCJjbnQiLCJkaXN0YW5jZUZucyIsIl8iLCJnZXRNZWFzdXJlIiwic3RhcnRSb3ciLCJmbG9vciIsInN0YXJ0Q29sIiwibWkiLCJtaiIsImRpc3RhbmNlVmFsdWVzIiwiZm4iLCJ2YWx1ZSIsInBvc3RNZXNzYWdlIiwiZSIsImVycm9yIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwidW5kZWZpbmVkIiwiZXhwb3J0cyIsIm1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJtIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsIk8iLCJyZXN1bHQiLCJjaHVua0lkcyIsInByaW9yaXR5Iiwibm90RnVsZmlsbGVkIiwiSW5maW5pdHkiLCJmdWxmaWxsZWQiLCJqIiwiT2JqZWN0Iiwia2V5cyIsImV2ZXJ5Iiwia2V5IiwiciIsImQiLCJkZWZpbml0aW9uIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImYiLCJjaHVua0lkIiwiUHJvbWlzZSIsImFsbCIsInByb21pc2VzIiwidSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwid2luZG93Iiwib2JqIiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNjcmlwdFVybCIsImltcG9ydFNjcmlwdHMiLCJsb2NhdGlvbiIsImRvY3VtZW50IiwiY3VycmVudFNjcmlwdCIsInNyYyIsInNjcmlwdHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIkVycm9yIiwicmVwbGFjZSIsInAiLCJpbnN0YWxsZWRDaHVua3MiLCJjaHVua0xvYWRpbmdHbG9iYWwiLCJzZWxmIiwicGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24iLCJwdXNoIiwiYmluZCIsIm1vcmVNb2R1bGVzIiwicnVudGltZSIsInRoZW4iXSwic291cmNlUm9vdCI6IiJ9