@datagrok/eda 1.1.25 → 1.1.28

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.
Files changed (111) hide show
  1. package/.vscode/settings.json +5 -0
  2. package/CHANGELOG.md +12 -0
  3. package/README.md +1 -0
  4. package/dist/05e5e0770f54f07e9474.wasm +0 -0
  5. package/dist/111.js +2 -0
  6. package/dist/111.js.map +1 -0
  7. package/dist/153.js +2 -0
  8. package/dist/153.js.map +1 -0
  9. package/dist/23.js +2 -2
  10. package/dist/23.js.map +1 -0
  11. package/dist/234.js +2 -0
  12. package/dist/234.js.map +1 -0
  13. package/dist/242.js +2 -0
  14. package/dist/242.js.map +1 -0
  15. package/dist/260.js +2 -0
  16. package/dist/260.js.map +1 -0
  17. package/dist/317.js +2 -0
  18. package/dist/317.js.map +1 -0
  19. package/dist/33.js +2 -0
  20. package/dist/33.js.map +1 -0
  21. package/dist/348.js +2 -0
  22. package/dist/348.js.map +1 -0
  23. package/dist/377.js +2 -0
  24. package/dist/377.js.map +1 -0
  25. package/dist/412.js +2 -0
  26. package/dist/412.js.map +1 -0
  27. package/dist/415.js +2 -0
  28. package/dist/415.js.map +1 -0
  29. package/dist/531.js +2 -0
  30. package/dist/531.js.map +1 -0
  31. package/dist/583.js +2 -0
  32. package/dist/583.js.map +1 -0
  33. package/dist/589.js +2 -0
  34. package/dist/589.js.map +1 -0
  35. package/dist/603.js +2 -0
  36. package/dist/603.js.map +1 -0
  37. package/dist/656.js +2 -0
  38. package/dist/656.js.map +1 -0
  39. package/dist/682.js +2 -0
  40. package/dist/682.js.map +1 -0
  41. package/dist/705.js +2 -0
  42. package/dist/705.js.map +1 -0
  43. package/dist/731.js +2 -0
  44. package/dist/731.js.map +1 -0
  45. package/dist/738.js +3 -0
  46. package/dist/738.js.map +1 -0
  47. package/dist/763.js +2 -0
  48. package/dist/763.js.map +1 -0
  49. package/dist/778.js +2 -0
  50. package/dist/778.js.map +1 -0
  51. package/dist/783.js +2 -0
  52. package/dist/783.js.map +1 -0
  53. package/dist/793.js +2 -0
  54. package/dist/793.js.map +1 -0
  55. package/dist/907.js +2 -0
  56. package/dist/907.js.map +1 -0
  57. package/dist/91.js +2 -0
  58. package/dist/91.js.map +1 -0
  59. package/dist/950.js +2 -0
  60. package/dist/950.js.map +1 -0
  61. package/dist/package-test.js +2 -2
  62. package/dist/package-test.js.map +1 -0
  63. package/dist/package.js +2 -2
  64. package/dist/package.js.map +1 -0
  65. package/package.json +92 -92
  66. package/scripts/command.txt +1 -1
  67. package/scripts/func.json +1 -1
  68. package/scripts/module.json +1 -1
  69. package/src/missing-values-imputation/ui.ts +80 -66
  70. package/src/package.ts +288 -38
  71. package/src/pls/pls-tools.ts +16 -15
  72. package/src/regression.ts +232 -0
  73. package/src/svm.ts +78 -38
  74. package/tsconfig.json +4 -4
  75. package/wasm/EDA.js +65 -1
  76. package/wasm/EDA.wasm +0 -0
  77. package/wasm/EDAAPI.js +30 -0
  78. package/wasm/EDAForWebWorker.js +1 -1
  79. package/wasm/callWasm.js +384 -393
  80. package/wasm/regression-api.cpp +66 -0
  81. package/wasm/regression.h +128 -0
  82. package/wasm/workers/fitLinearRegressionParamsWithDataNormalizingWorker.js +13 -0
  83. package/wasm/workers/fitLinearRegressionParamsWorker.js +13 -0
  84. package/webpack.config.js +1 -1
  85. package/dist/208.js +0 -2
  86. package/dist/221.js +0 -2
  87. package/dist/231.js +0 -2
  88. package/dist/261.js +0 -2
  89. package/dist/282.js +0 -2
  90. package/dist/334.js +0 -2
  91. package/dist/356.js +0 -2
  92. package/dist/36.js +0 -2
  93. package/dist/367.js +0 -2
  94. package/dist/374.js +0 -2
  95. package/dist/40.js +0 -2
  96. package/dist/413.js +0 -2
  97. package/dist/42.js +0 -2
  98. package/dist/427.js +0 -2
  99. package/dist/467.js +0 -2
  100. package/dist/523.js +0 -3
  101. package/dist/533.js +0 -2
  102. package/dist/590.js +0 -2
  103. package/dist/65.js +0 -2
  104. package/dist/694.js +0 -2
  105. package/dist/729.js +0 -2
  106. package/dist/796.js +0 -2
  107. package/dist/902.js +0 -2
  108. package/dist/910.js +0 -2
  109. package/dist/972.js +0 -2
  110. package/dist/f5343e2c2e15952ce916.wasm +0 -0
  111. /package/dist/{523.js.LICENSE.txt → 738.js.LICENSE.txt} +0 -0
package/dist/796.js DELETED
@@ -1,2 +0,0 @@
1
- var eda;(()=>{"use strict";var t,n,e={7905:(t,n,e)=>{e.d(n,{g:()=>i}),t=e.hmd(t);var r,i=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var n,e,i=void 0!==t?t:{};i.ready=new Promise((function(t,r){n=t,e=r}));var o,a=Object.assign({},i),s="object"==typeof window,u="function"==typeof importScripts,c=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(s||u)&&(u?c=self.location.href:"undefined"!=typeof document&&document.currentScript&&(c=document.currentScript.src),r&&(c=r),c=0!==c.indexOf("blob:")?c.substr(0,c.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(o=t=>{var n=new XMLHttpRequest;return n.open("GET",t,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)})),i.print||console.log.bind(console);var f,l,p=i.printErr||console.warn.bind(console);Object.assign(i,a),a=null,i.arguments&&i.arguments,i.thisProgram&&i.thisProgram,i.quit&&i.quit,i.wasmBinary&&(f=i.wasmBinary),i.noExitRuntime,"object"!=typeof WebAssembly&&E("no native wasm support detected");var h,d,m,y=!1;function b(){var t=l.buffer;i.HEAP8=h=new Int8Array(t),i.HEAP16=new Int16Array(t),i.HEAP32=new Int32Array(t),i.HEAPU8=d=new Uint8Array(t),i.HEAPU16=new Uint16Array(t),i.HEAPU32=m=new Uint32Array(t),i.HEAPF32=new Float32Array(t),i.HEAPF64=new Float64Array(t)}var w=[],v=[],g=[],_=0,A=null,x=null;function E(t){i.onAbort&&i.onAbort(t),p(t="Aborted("+t+")"),y=!0,t+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(t);throw e(n),n}var R,P;function S(t){return t.startsWith("data:application/octet-stream;base64,")}function U(t){try{if(t==R&&f)return new Uint8Array(f);if(o)return o(t);throw"both async and sync fetching of the wasm failed"}catch(t){E(t)}}function j(t,n,e){return function(t){return f||!s&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return U(t)})):fetch(t,{credentials:"same-origin"}).then((function(n){if(!n.ok)throw"failed to load wasm binary file at '"+t+"'";return n.arrayBuffer()})).catch((function(){return U(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,n)})).then((function(t){return t})).then(e,(function(t){p("failed to asynchronously prepare wasm: "+t),E(t)}))}function O(t){for(;t.length>0;)t.shift()(i)}function I(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){m[this.ptr+4>>2]=t},this.get_type=function(){return m[this.ptr+4>>2]},this.set_destructor=function(t){m[this.ptr+8>>2]=t},this.get_destructor=function(){return m[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,h[this.ptr+12>>0]=t},this.get_caught=function(){return 0!=h[this.ptr+12>>0]},this.set_rethrown=function(t){t=t?1:0,h[this.ptr+13>>0]=t},this.get_rethrown=function(){return 0!=h[this.ptr+13>>0]},this.init=function(t,n){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(n)},this.set_adjusted_ptr=function(t){m[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return m[this.ptr+16>>2]},this.get_exception_ptr=function(){if(L(this.get_type()))return m[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function C(t){var n=l.buffer;try{return l.grow(t-n.byteLength+65535>>>16),b(),1}catch(t){}}function H(t){return i["_"+t]}S(R="wasmDbscan.wasm")||(P=R,R=i.locateFile?i.locateFile(P,c):c+P);var T="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function k(t,n,e,r,i){var o={string:t=>{var n=0;return null!=t&&0!==t&&(n=function(t){var n=function(t){for(var n=0,e=0;e<t.length;++e){var r=t.charCodeAt(e);r<=127?n++:r<=2047?n+=2:r>=55296&&r<=57343?(n+=4,++e):n+=3}return n}(t)+1,e=B(n);return function(t,n,e){!function(t,n,e,r){if(!(r>0))return 0;for(var i=e+r-1,o=0;o<t.length;++o){var a=t.charCodeAt(o);if(a>=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&t.charCodeAt(++o)),a<=127){if(e>=i)break;n[e++]=a}else if(a<=2047){if(e+1>=i)break;n[e++]=192|a>>6,n[e++]=128|63&a}else if(a<=65535){if(e+2>=i)break;n[e++]=224|a>>12,n[e++]=128|a>>6&63,n[e++]=128|63&a}else{if(e+3>=i)break;n[e++]=240|a>>18,n[e++]=128|a>>12&63,n[e++]=128|a>>6&63,n[e++]=128|63&a}}n[e]=0}(t,d,n,e)}(t,e,n),e}(t)),n},array:t=>{var n,e,r=B(t.length);return n=t,e=r,h.set(n,e),r}},a=H(t),s=[],u=0;if(r)for(var c=0;c<r.length;c++){var f=o[e[c]];f?(0===u&&(u=W()),s[c]=f(r[c])):s[c]=r[c]}var l=a.apply(null,s);return function(t){return 0!==u&&D(u),function(t){return"string"===n?(e=t)?function(t,n,e){for(var r=n+e,i=n;t[i]&&!(i>=r);)++i;if(i-n>16&&t.buffer&&T)return T.decode(t.subarray(n,i));for(var o="";n<i;){var a=t[n++];if(128&a){var s=63&t[n++];if(192!=(224&a)){var u=63&t[n++];if((a=224==(240&a)?(15&a)<<12|s<<6|u:(7&a)<<18|s<<12|u<<6|63&t[n++])<65536)o+=String.fromCharCode(a);else{var c=a-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|s)}else o+=String.fromCharCode(a)}return o}(d,e,r):"":"boolean"===n?Boolean(t):t;var e,r}(t)}(l)}var F,M={__cxa_throw:function(t,n,e){throw new I(t).init(n,e),t},abort:function(){E("")},emscripten_memcpy_big:function(t,n,e){d.copyWithin(t,n,n+e)},emscripten_resize_heap:function(t){var n,e=d.length,r=2147483648;if((t>>>=0)>r)return!1;for(var i=1;i<=4;i*=2){var o=e*(1+.2/i);if(o=Math.min(o,t+100663296),C(Math.min(r,(n=Math.max(t,o))+(65536-n%65536)%65536)))return!0}return!1}},W=(function(){var t,n,r,o,a={env:M,wasi_snapshot_preview1:M};function s(t,n){var e,r=t.exports;return i.asm=r,l=i.asm.memory,b(),i.asm.__indirect_function_table,e=i.asm.__wasm_call_ctors,v.unshift(e),function(t){if(_--,i.monitorRunDependencies&&i.monitorRunDependencies(_),0==_&&(null!==A&&(clearInterval(A),A=null),x)){var n=x;x=null,n()}}(),r}if(_++,i.monitorRunDependencies&&i.monitorRunDependencies(_),i.instantiateWasm)try{return i.instantiateWasm(a,s)}catch(t){p("Module.instantiateWasm callback failed with error: "+t),e(t)}(t=f,n=R,r=a,o=function(t){s(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(n)||"function"!=typeof fetch?j(n,r,o):fetch(n,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,r).then(o,(function(t){return p("wasm streaming compile failed: "+t),p("falling back to ArrayBuffer instantiation"),j(n,r,o)}))}))).catch(e)}(),i._dbscan=function(){return(i._dbscan=i.asm.dbscan).apply(null,arguments)},i._malloc=function(){return(i._malloc=i.asm.malloc).apply(null,arguments)},i._free=function(){return(i._free=i.asm.free).apply(null,arguments)},function(){return(W=i.asm.stackSave).apply(null,arguments)}),D=function(){return(D=i.asm.stackRestore).apply(null,arguments)},B=function(){return(B=i.asm.stackAlloc).apply(null,arguments)},L=function(){return(L=i.asm.__cxa_is_pointer_type).apply(null,arguments)};function q(){function t(){F||(F=!0,i.calledRun=!0,y||(O(v),n(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),function(){if(i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)t=i.postRun.shift(),g.unshift(t);var t;O(g)}()))}_>0||(function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)t=i.preRun.shift(),w.unshift(t);var t;O(w)}(),_>0||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),t()}),1)):t()))}if(i.ccall=k,i.cwrap=function(t,n,e,r){var i=!e||e.every((t=>"number"===t||"boolean"===t));return"string"!==n&&i&&!r?H(t):function(){return k(t,n,e,arguments)}},x=function t(){F||q(),F||(x=t)},i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return q(),t.ready});"object"==typeof exports?t.exports=i:"function"==typeof define&&e.amdO?define([],(function(){return i})):"object"==typeof exports&&(exports.exportCppDbscanLib=i)},3962:(t,n,e)=>{t.exports=e.p+"9a8fbf37666e32487835.wasm"}},r={};function i(t){var n=r[t];if(void 0!==n)return n.exports;var o=r[t]={id:t,loaded:!1,exports:{}};return e[t](o,o.exports,i),o.loaded=!0,o.exports}i.m=e,i.amdO={},i.d=(t,n)=>{for(var e in n)i.o(n,e)&&!i.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:n[e]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),i.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),(()=>{var t;i.g.importScripts&&(t=i.g.location+"");var n=i.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var e=n.getElementsByTagName("script");if(e.length)for(var r=e.length-1;r>-1&&!t;)t=e[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=t})(),i.b=self.location+"",t=i(7905),n=function(t,n,e,r){return new(e||(e=Promise))((function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var n;t.done?i(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(a,s)}u((r=r.apply(t,n||[])).next())}))},onmessage=e=>{const{embedX:r,embedY:o,epsilon:a,minPts:s}=e.data,u={};n(void 0,void 0,void 0,(function*(){try{const n=yield async function(n,e,r,o){const a=new URL(i(3962),i.b).href,s=a.substring(0,a.lastIndexOf("/")+1)+"wasmDbscan.wasm";let u;try{u=await(0,t.g)({locateFile:()=>a,printErr:t=>{}})}catch(n){try{u=await(0,t.g)({locateFile:()=>s,printErr:t=>{}})}catch(t){throw console.error(t),new Error("Unable to load wasm file for dbscan")}}const c=u.cwrap("dbscan","null",["number","number","number","number","number","number"]),f=Float32Array.BYTES_PER_ELEMENT*n.length,l=u._malloc(f),p=u._malloc(f),h=new Uint8Array(u.HEAPU8.buffer,l,f);h.set(new Uint8Array(n.buffer));const d=new Uint8Array(u.HEAPU8.buffer,p,f);d.set(new Uint8Array(e.buffer));const m=u._malloc(f),y=new Uint8Array(u.HEAPU8.buffer,m,f);c(l,p,n.length,r,o,m);const b=new Int32Array(y.buffer,y.byteOffset,n.length);return u._free(h.byteOffset),u._free(d.byteOffset),u._free(y.byteOffset),b}(r,o,a,s);u.clusters=n,postMessage(u)}catch(t){u.error=t,postMessage(u)}}))},eda={}})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QixJQUFJcE8sV0FBV21PLEVBQVl0TyxPQUFRc08sRUFBWUUsV0FBWTVCLEVBQU9wSyxRQUl4RixPQUhBK0ssRUFBYWtCLE1BQU1OLEVBQU1LLFlBQ3pCakIsRUFBYWtCLE1BQU1MLEVBQU1JLFlBQ3pCakIsRUFBYWtCLE1BQU1ILEVBQVlFLFlBQ3hCRCxDQUNYLENWckJtQ0csQ0FBTzlCLEVBQVFDLEVBQVFDLEVBQVNDLEdBQ3ZEQyxFQUFLQyxTQUFXQSxFQUNoQjBCLFlBQVkzQixFQUNoQixDQUNBLE1BQU9qTSxHQUNIaU0sRUFBS1csTUFBUTVNLEVBQ2I0TixZQUFZM0IsRUFDaEIsQ0FDSixHQUFLLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy9kYnNjYW4vd2FzbS9jbHVzdGVyaW5nLXdvcmtlci5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy9kYnNjYW4vd2FzbS93YXNtRGJzY2FuLmpzIiwid2VicGFjazovL2VkYS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2FtZCBvcHRpb25zIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9oYXJtb255IG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL2Ric2Nhbi93YXNtL2Ric2Nhbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGRic2NhbiB9IGZyb20gJy4vZGJzY2FuJztcbm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IHsgZW1iZWRYLCBlbWJlZFksIGVwc2lsb24sIG1pblB0cyB9ID0gZXZlbnQuZGF0YTtcbiAgICBjb25zdCBkYXRhID0ge307XG4gICAgKCgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY2x1c3RlcnMgPSB5aWVsZCBkYnNjYW4oZW1iZWRYLCBlbWJlZFksIGVwc2lsb24sIG1pblB0cyk7XG4gICAgICAgICAgICBkYXRhLmNsdXN0ZXJzID0gY2x1c3RlcnM7XG4gICAgICAgICAgICBwb3N0TWVzc2FnZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZGF0YS5lcnJvciA9IGU7XG4gICAgICAgICAgICBwb3N0TWVzc2FnZShkYXRhKTtcbiAgICAgICAgfVxuICAgIH0pKSgpO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNsdXN0ZXJpbmctd29ya2VyLmpzLm1hcCIsIlxyXG5leHBvcnQgdmFyIGV4cG9ydENwcERic2NhbkxpYiA9ICgoKSA9PiB7XHJcbiAgdmFyIF9zY3JpcHREaXIgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyA6IHVuZGVmaW5lZDtcclxuICBcclxuICByZXR1cm4gKFxyXG5mdW5jdGlvbihleHBvcnRDcHBEYnNjYW5MaWIgPSB7fSkgIHtcclxuXHJcbi8vIGluY2x1ZGU6IHNoZWxsLmpzXHJcbi8vIFRoZSBNb2R1bGUgb2JqZWN0OiBPdXIgaW50ZXJmYWNlIHRvIHRoZSBvdXRzaWRlIHdvcmxkLiBXZSBpbXBvcnRcclxuLy8gYW5kIGV4cG9ydCB2YWx1ZXMgb24gaXQuIFRoZXJlIGFyZSB2YXJpb3VzIHdheXMgTW9kdWxlIGNhbiBiZSB1c2VkOlxyXG4vLyAxLiBOb3QgZGVmaW5lZC4gV2UgY3JlYXRlIGl0IGhlcmVcclxuLy8gMi4gQSBmdW5jdGlvbiBwYXJhbWV0ZXIsIGZ1bmN0aW9uKE1vZHVsZSkgeyAuLmdlbmVyYXRlZCBjb2RlLi4gfVxyXG4vLyAzLiBwcmUtcnVuIGFwcGVuZGVkIGl0LCB2YXIgTW9kdWxlID0ge307IC4uZ2VuZXJhdGVkIGNvZGUuLlxyXG4vLyA0LiBFeHRlcm5hbCBzY3JpcHQgdGFnIGRlZmluZXMgdmFyIE1vZHVsZS5cclxuLy8gV2UgbmVlZCB0byBjaGVjayBpZiBNb2R1bGUgYWxyZWFkeSBleGlzdHMgKGUuZy4gY2FzZSAzIGFib3ZlKS5cclxuLy8gU3Vic3RpdHV0aW9uIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhY3R1YWwgY29kZSBvbiBsYXRlciBzdGFnZSBvZiB0aGUgYnVpbGQsXHJcbi8vIHRoaXMgd2F5IENsb3N1cmUgQ29tcGlsZXIgd2lsbCBub3QgbWFuZ2xlIGl0IChlLmcuIGNhc2UgNC4gYWJvdmUpLlxyXG4vLyBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gcnVuIGNsb3N1cmUsIGFuZCBhbHNvIHRvIHVzZSBNb2R1bGVcclxuLy8gYWZ0ZXIgdGhlIGdlbmVyYXRlZCBjb2RlLCB5b3Ugd2lsbCBuZWVkIHRvIGRlZmluZSAgIHZhciBNb2R1bGUgPSB7fTtcclxuLy8gYmVmb3JlIHRoZSBjb2RlLiBUaGVuIHRoYXQgb2JqZWN0IHdpbGwgYmUgdXNlZCBpbiB0aGUgY29kZSwgYW5kIHlvdVxyXG4vLyBjYW4gY29udGludWUgdG8gdXNlIE1vZHVsZSBhZnRlcndhcmRzIGFzIHdlbGwuXHJcbnZhciBNb2R1bGUgPSB0eXBlb2YgZXhwb3J0Q3BwRGJzY2FuTGliICE9ICd1bmRlZmluZWQnID8gZXhwb3J0Q3BwRGJzY2FuTGliIDoge307XHJcblxyXG4vLyBTZXQgdXAgdGhlIHByb21pc2UgdGhhdCBpbmRpY2F0ZXMgdGhlIE1vZHVsZSBpcyBpbml0aWFsaXplZFxyXG52YXIgcmVhZHlQcm9taXNlUmVzb2x2ZSwgcmVhZHlQcm9taXNlUmVqZWN0O1xyXG5Nb2R1bGVbJ3JlYWR5J10gPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuICByZWFkeVByb21pc2VSZXNvbHZlID0gcmVzb2x2ZTtcclxuICByZWFkeVByb21pc2VSZWplY3QgPSByZWplY3Q7XHJcbn0pO1xyXG5cclxuLy8gLS1wcmUtanNlcyBhcmUgZW1pdHRlZCBhZnRlciB0aGUgTW9kdWxlIGludGVncmF0aW9uIGNvZGUsIHNvIHRoYXQgdGhleSBjYW5cclxuLy8gcmVmZXIgdG8gTW9kdWxlIChpZiB0aGV5IGNob29zZTsgdGhleSBjYW4gYWxzbyBkZWZpbmUgTW9kdWxlKVxyXG5cclxuXHJcbi8vIFNvbWV0aW1lcyBhbiBleGlzdGluZyBNb2R1bGUgb2JqZWN0IGV4aXN0cyB3aXRoIHByb3BlcnRpZXNcclxuLy8gbWVhbnQgdG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IG1vZHVsZSBmdW5jdGlvbmFsaXR5LiBIZXJlXHJcbi8vIHdlIGNvbGxlY3QgdGhvc2UgcHJvcGVydGllcyBhbmQgcmVhcHBseSBfYWZ0ZXJfIHdlIGNvbmZpZ3VyZVxyXG4vLyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCdzIGRlZmF1bHRzIHRvIGF2b2lkIGhhdmluZyB0byBiZSBzb1xyXG4vLyBkZWZlbnNpdmUgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxyXG52YXIgbW9kdWxlT3ZlcnJpZGVzID0gT2JqZWN0LmFzc2lnbih7fSwgTW9kdWxlKTtcclxuXHJcbnZhciBhcmd1bWVudHNfID0gW107XHJcbnZhciB0aGlzUHJvZ3JhbSA9ICcuL3RoaXMucHJvZ3JhbSc7XHJcbnZhciBxdWl0XyA9IChzdGF0dXMsIHRvVGhyb3cpID0+IHtcclxuICB0aHJvdyB0b1Rocm93O1xyXG59O1xyXG5cclxuLy8gRGV0ZXJtaW5lIHRoZSBydW50aW1lIGVudmlyb25tZW50IHdlIGFyZSBpbi4gWW91IGNhbiBjdXN0b21pemUgdGhpcyBieVxyXG4vLyBzZXR0aW5nIHRoZSBFTlZJUk9OTUVOVCBzZXR0aW5nIGF0IGNvbXBpbGUgdGltZSAoc2VlIHNldHRpbmdzLmpzKS5cclxuXHJcbi8vIEF0dGVtcHQgdG8gYXV0by1kZXRlY3QgdGhlIGVudmlyb25tZW50XHJcbnZhciBFTlZJUk9OTUVOVF9JU19XRUIgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnO1xyXG52YXIgRU5WSVJPTk1FTlRfSVNfV09SS0VSID0gdHlwZW9mIGltcG9ydFNjcmlwdHMgPT0gJ2Z1bmN0aW9uJztcclxuLy8gTi5iLiBFbGVjdHJvbi5qcyBlbnZpcm9ubWVudCBpcyBzaW11bHRhbmVvdXNseSBhIE5PREUtZW52aXJvbm1lbnQsIGJ1dFxyXG4vLyBhbHNvIGEgd2ViIGVudmlyb25tZW50LlxyXG52YXIgRU5WSVJPTk1FTlRfSVNfTk9ERSA9IHR5cGVvZiBwcm9jZXNzID09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zID09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGUgPT0gJ3N0cmluZyc7XHJcbnZhciBFTlZJUk9OTUVOVF9JU19TSEVMTCA9ICFFTlZJUk9OTUVOVF9JU19XRUIgJiYgIUVOVklST05NRU5UX0lTX05PREUgJiYgIUVOVklST05NRU5UX0lTX1dPUktFUjtcclxuXHJcbi8vIGAvYCBzaG91bGQgYmUgcHJlc2VudCBhdCB0aGUgZW5kIGlmIGBzY3JpcHREaXJlY3RvcnlgIGlzIG5vdCBlbXB0eVxyXG52YXIgc2NyaXB0RGlyZWN0b3J5ID0gJyc7XHJcbmZ1bmN0aW9uIGxvY2F0ZUZpbGUocGF0aCkge1xyXG4gIGlmIChNb2R1bGVbJ2xvY2F0ZUZpbGUnXSkge1xyXG4gICAgcmV0dXJuIE1vZHVsZVsnbG9jYXRlRmlsZSddKHBhdGgsIHNjcmlwdERpcmVjdG9yeSk7XHJcbiAgfVxyXG4gIHJldHVybiBzY3JpcHREaXJlY3RvcnkgKyBwYXRoO1xyXG59XHJcblxyXG4vLyBIb29rcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseSBpbiBkaWZmZXJlbnQgcnVudGltZSBlbnZpcm9ubWVudHMuXHJcbnZhciByZWFkXyxcclxuICAgIHJlYWRBc3luYyxcclxuICAgIHJlYWRCaW5hcnksXHJcbiAgICBzZXRXaW5kb3dUaXRsZTtcclxuXHJcbi8vIE5vdGUgdGhhdCB0aGlzIGluY2x1ZGVzIE5vZGUuanMgd29ya2VycyB3aGVuIHJlbGV2YW50IChwdGhyZWFkcyBpcyBlbmFibGVkKS5cclxuLy8gTm9kZS5qcyB3b3JrZXJzIGFyZSBkZXRlY3RlZCBhcyBhIGNvbWJpbmF0aW9uIG9mIEVOVklST05NRU5UX0lTX1dPUktFUiBhbmRcclxuLy8gRU5WSVJPTk1FTlRfSVNfTk9ERS5cclxuaWYgKEVOVklST05NRU5UX0lTX1dFQiB8fCBFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHtcclxuICBpZiAoRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7IC8vIENoZWNrIHdvcmtlciwgbm90IHdlYiwgc2luY2Ugd2luZG93IGNvdWxkIGJlIHBvbHlmaWxsZWRcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9IHNlbGYubG9jYXRpb24uaHJlZjtcclxuICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0KSB7IC8vIHdlYlxyXG4gICAgc2NyaXB0RGlyZWN0b3J5ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XHJcbiAgfVxyXG4gIC8vIFdoZW4gTU9EVUxBUklaRSwgdGhpcyBKUyBtYXkgYmUgZXhlY3V0ZWQgbGF0ZXIsIGFmdGVyIGRvY3VtZW50LmN1cnJlbnRTY3JpcHRcclxuICAvLyBpcyBnb25lLCBzbyB3ZSBzYXZlZCBpdCwgYW5kIHdlIHVzZSBpdCBoZXJlIGluc3RlYWQgb2YgYW55IG90aGVyIGluZm8uXHJcbiAgaWYgKF9zY3JpcHREaXIpIHtcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9IF9zY3JpcHREaXI7XHJcbiAgfVxyXG4gIC8vIGJsb2IgdXJscyBsb29rIGxpa2UgYmxvYjpodHRwOi8vc2l0ZS5jb20vZXRjL2V0YyBhbmQgd2UgY2Fubm90IGluZmVyIGFueXRoaW5nIGZyb20gdGhlbS5cclxuICAvLyBvdGhlcndpc2UsIHNsaWNlIG9mZiB0aGUgZmluYWwgcGFydCBvZiB0aGUgdXJsIHRvIGZpbmQgdGhlIHNjcmlwdCBkaXJlY3RvcnkuXHJcbiAgLy8gaWYgc2NyaXB0RGlyZWN0b3J5IGRvZXMgbm90IGNvbnRhaW4gYSBzbGFzaCwgbGFzdEluZGV4T2Ygd2lsbCByZXR1cm4gLTEsXHJcbiAgLy8gYW5kIHNjcmlwdERpcmVjdG9yeSB3aWxsIGNvcnJlY3RseSBiZSByZXBsYWNlZCB3aXRoIGFuIGVtcHR5IHN0cmluZy5cclxuICAvLyBJZiBzY3JpcHREaXJlY3RvcnkgY29udGFpbnMgYSBxdWVyeSAoc3RhcnRpbmcgd2l0aCA/KSBvciBhIGZyYWdtZW50IChzdGFydGluZyB3aXRoICMpLFxyXG4gIC8vIHRoZXkgYXJlIHJlbW92ZWQgYmVjYXVzZSB0aGV5IGNvdWxkIGNvbnRhaW4gYSBzbGFzaC5cclxuICBpZiAoc2NyaXB0RGlyZWN0b3J5LmluZGV4T2YoJ2Jsb2I6JykgIT09IDApIHtcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9IHNjcmlwdERpcmVjdG9yeS5zdWJzdHIoMCwgc2NyaXB0RGlyZWN0b3J5LnJlcGxhY2UoL1s/I10uKi8sIFwiXCIpLmxhc3RJbmRleE9mKCcvJykrMSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgLy8gRGlmZmVyZW50aWF0ZSB0aGUgV2ViIFdvcmtlciBmcm9tIHRoZSBOb2RlIFdvcmtlciBjYXNlLCBhcyByZWFkaW5nIG11c3RcclxuICAvLyBiZSBkb25lIGRpZmZlcmVudGx5LlxyXG4gIHtcclxuLy8gaW5jbHVkZTogd2ViX29yX3dvcmtlcl9zaGVsbF9yZWFkLmpzXHJcbnJlYWRfID0gKHVybCkgPT4ge1xyXG4gICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIGZhbHNlKTtcclxuICAgICAgeGhyLnNlbmQobnVsbCk7XHJcbiAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0O1xyXG4gIH1cclxuXHJcbiAgaWYgKEVOVklST05NRU5UX0lTX1dPUktFUikge1xyXG4gICAgcmVhZEJpbmFyeSA9ICh1cmwpID0+IHtcclxuICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgZmFsc2UpO1xyXG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xyXG4gICAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgvKiogQHR5cGV7IUFycmF5QnVmZmVyfSAqLyh4aHIucmVzcG9uc2UpKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZWFkQXN5bmMgPSAodXJsLCBvbmxvYWQsIG9uZXJyb3IpID0+IHtcclxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpO1xyXG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XHJcbiAgICB4aHIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDAgfHwgKHhoci5zdGF0dXMgPT0gMCAmJiB4aHIucmVzcG9uc2UpKSB7IC8vIGZpbGUgVVJMcyBjYW4gcmV0dXJuIDBcclxuICAgICAgICBvbmxvYWQoeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgb25lcnJvcigpO1xyXG4gICAgfTtcclxuICAgIHhoci5vbmVycm9yID0gb25lcnJvcjtcclxuICAgIHhoci5zZW5kKG51bGwpO1xyXG4gIH1cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiB3ZWJfb3Jfd29ya2VyX3NoZWxsX3JlYWQuanNcclxuICB9XHJcblxyXG4gIHNldFdpbmRvd1RpdGxlID0gKHRpdGxlKSA9PiBkb2N1bWVudC50aXRsZSA9IHRpdGxlO1xyXG59IGVsc2Vcclxue1xyXG59XHJcblxyXG52YXIgb3V0ID0gTW9kdWxlWydwcmludCddIHx8IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7XHJcbnZhciBlcnIgPSBNb2R1bGVbJ3ByaW50RXJyJ10gfHwgY29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7XHJcblxyXG4vLyBNZXJnZSBiYWNrIGluIHRoZSBvdmVycmlkZXNcclxuT2JqZWN0LmFzc2lnbihNb2R1bGUsIG1vZHVsZU92ZXJyaWRlcyk7XHJcbi8vIEZyZWUgdGhlIG9iamVjdCBoaWVyYXJjaHkgY29udGFpbmVkIGluIHRoZSBvdmVycmlkZXMsIHRoaXMgbGV0cyB0aGUgR0NcclxuLy8gcmVjbGFpbSBkYXRhIHVzZWQgZS5nLiBpbiBtZW1vcnlJbml0aWFsaXplclJlcXVlc3QsIHdoaWNoIGlzIGEgbGFyZ2UgdHlwZWQgYXJyYXkuXHJcbm1vZHVsZU92ZXJyaWRlcyA9IG51bGw7XHJcblxyXG4vLyBFbWl0IGNvZGUgdG8gaGFuZGxlIGV4cGVjdGVkIHZhbHVlcyBvbiB0aGUgTW9kdWxlIG9iamVjdC4gVGhpcyBhcHBsaWVzIE1vZHVsZS54XHJcbi8vIHRvIHRoZSBwcm9wZXIgbG9jYWwgeC4gVGhpcyBoYXMgdHdvIGJlbmVmaXRzOiBmaXJzdCwgd2Ugb25seSBlbWl0IGl0IGlmIGl0IGlzXHJcbi8vIGV4cGVjdGVkIHRvIGFycml2ZSwgYW5kIHNlY29uZCwgYnkgdXNpbmcgYSBsb2NhbCBldmVyeXdoZXJlIGVsc2UgdGhhdCBjYW4gYmVcclxuLy8gbWluaWZpZWQuXHJcblxyXG5pZiAoTW9kdWxlWydhcmd1bWVudHMnXSkgYXJndW1lbnRzXyA9IE1vZHVsZVsnYXJndW1lbnRzJ107XHJcblxyXG5pZiAoTW9kdWxlWyd0aGlzUHJvZ3JhbSddKSB0aGlzUHJvZ3JhbSA9IE1vZHVsZVsndGhpc1Byb2dyYW0nXTtcclxuXHJcbmlmIChNb2R1bGVbJ3F1aXQnXSkgcXVpdF8gPSBNb2R1bGVbJ3F1aXQnXTtcclxuXHJcbi8vIHBlcmZvcm0gYXNzZXJ0aW9ucyBpbiBzaGVsbC5qcyBhZnRlciB3ZSBzZXQgdXAgb3V0KCkgYW5kIGVycigpLCBhcyBvdGhlcndpc2UgaWYgYW4gYXNzZXJ0aW9uIGZhaWxzIGl0IGNhbm5vdCBwcmludCB0aGUgbWVzc2FnZVxyXG5cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBzaGVsbC5qc1xyXG4vLyBpbmNsdWRlOiBwcmVhbWJsZS5qc1xyXG4vLyA9PT0gUHJlYW1ibGUgbGlicmFyeSBzdHVmZiA9PT1cclxuXHJcbi8vIERvY3VtZW50YXRpb24gZm9yIHRoZSBwdWJsaWMgQVBJcyBkZWZpbmVkIGluIHRoaXMgZmlsZSBtdXN0IGJlIHVwZGF0ZWQgaW46XHJcbi8vICAgIHNpdGUvc291cmNlL2RvY3MvYXBpX3JlZmVyZW5jZS9wcmVhbWJsZS5qcy5yc3RcclxuLy8gQSBwcmVidWlsdCBsb2NhbCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhdDpcclxuLy8gICAgc2l0ZS9idWlsZC90ZXh0L2RvY3MvYXBpX3JlZmVyZW5jZS9wcmVhbWJsZS5qcy50eHRcclxuLy8gWW91IGNhbiBhbHNvIGJ1aWxkIGRvY3MgbG9jYWxseSBhcyBIVE1MIG9yIG90aGVyIGZvcm1hdHMgaW4gc2l0ZS9cclxuLy8gQW4gb25saW5lIEhUTUwgdmVyc2lvbiAod2hpY2ggbWF5IGJlIG9mIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgRW1zY3JpcHRlbilcclxuLy8gICAgaXMgdXAgYXQgaHR0cDovL2tyaXBrZW4uZ2l0aHViLmlvL2Vtc2NyaXB0ZW4tc2l0ZS9kb2NzL2FwaV9yZWZlcmVuY2UvcHJlYW1ibGUuanMuaHRtbFxyXG5cclxudmFyIHdhc21CaW5hcnk7XHJcbmlmIChNb2R1bGVbJ3dhc21CaW5hcnknXSkgd2FzbUJpbmFyeSA9IE1vZHVsZVsnd2FzbUJpbmFyeSddO1xyXG52YXIgbm9FeGl0UnVudGltZSA9IE1vZHVsZVsnbm9FeGl0UnVudGltZSddIHx8IHRydWU7XHJcblxyXG5pZiAodHlwZW9mIFdlYkFzc2VtYmx5ICE9ICdvYmplY3QnKSB7XHJcbiAgYWJvcnQoJ25vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQnKTtcclxufVxyXG5cclxuLy8gV2FzbSBnbG9iYWxzXHJcblxyXG52YXIgd2FzbU1lbW9yeTtcclxuXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyBSdW50aW1lIGVzc2VudGlhbHNcclxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4vLyB3aGV0aGVyIHdlIGFyZSBxdWl0dGluZyB0aGUgYXBwbGljYXRpb24uIG5vIGNvZGUgc2hvdWxkIHJ1biBhZnRlciB0aGlzLlxyXG4vLyBzZXQgaW4gZXhpdCgpIGFuZCBhYm9ydCgpXHJcbnZhciBBQk9SVCA9IGZhbHNlO1xyXG5cclxuLy8gc2V0IGJ5IGV4aXQoKSBhbmQgYWJvcnQoKS4gIFBhc3NlZCB0byAnb25FeGl0JyBoYW5kbGVyLlxyXG4vLyBOT1RFOiBUaGlzIGlzIGFsc28gdXNlZCBhcyB0aGUgcHJvY2VzcyByZXR1cm4gY29kZSBjb2RlIGluIHNoZWxsIGVudmlyb25tZW50c1xyXG4vLyBidXQgb25seSB3aGVuIG5vRXhpdFJ1bnRpbWUgaXMgZmFsc2UuXHJcbnZhciBFWElUU1RBVFVTO1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbigqLCBzdHJpbmc9KX0gKi9cclxuZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgdGV4dCkge1xyXG4gIGlmICghY29uZGl0aW9uKSB7XHJcbiAgICAvLyBUaGlzIGJ1aWxkIHdhcyBjcmVhdGVkIHdpdGhvdXQgQVNTRVJUSU9OUyBkZWZpbmVkLiAgYGFzc2VydCgpYCBzaG91bGQgbm90XHJcbiAgICAvLyBldmVyIGJlIGNhbGxlZCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gYnV0IGluIGNhc2UgdGhlcmUgYXJlIGNhbGxlcnMgaW5cclxuICAgIC8vIHRoZSB3aWxkIGxlYXZlIHRoaXMgc2ltcGxlIGFib3J0KCkgaW1wbGVtZW5hdGlvbiBoZXJlIGZvciBub3cuXHJcbiAgICBhYm9ydCh0ZXh0KTtcclxuICB9XHJcbn1cclxuXHJcbi8vIE1lbW9yeSBtYW5hZ2VtZW50XHJcblxyXG52YXIgSEVBUCxcclxuLyoqIEB0eXBlIHshSW50OEFycmF5fSAqL1xyXG4gIEhFQVA4LFxyXG4vKiogQHR5cGUgeyFVaW50OEFycmF5fSAqL1xyXG4gIEhFQVBVOCxcclxuLyoqIEB0eXBlIHshSW50MTZBcnJheX0gKi9cclxuICBIRUFQMTYsXHJcbi8qKiBAdHlwZSB7IVVpbnQxNkFycmF5fSAqL1xyXG4gIEhFQVBVMTYsXHJcbi8qKiBAdHlwZSB7IUludDMyQXJyYXl9ICovXHJcbiAgSEVBUDMyLFxyXG4vKiogQHR5cGUgeyFVaW50MzJBcnJheX0gKi9cclxuICBIRUFQVTMyLFxyXG4vKiogQHR5cGUgeyFGbG9hdDMyQXJyYXl9ICovXHJcbiAgSEVBUEYzMixcclxuLyoqIEB0eXBlIHshRmxvYXQ2NEFycmF5fSAqL1xyXG4gIEhFQVBGNjQ7XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVNZW1vcnlWaWV3cygpIHtcclxuICB2YXIgYiA9IHdhc21NZW1vcnkuYnVmZmVyO1xyXG4gIE1vZHVsZVsnSEVBUDgnXSA9IEhFQVA4ID0gbmV3IEludDhBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVAxNiddID0gSEVBUDE2ID0gbmV3IEludDE2QXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQMzInXSA9IEhFQVAzMiA9IG5ldyBJbnQzMkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUFU4J10gPSBIRUFQVTggPSBuZXcgVWludDhBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVBVMTYnXSA9IEhFQVBVMTYgPSBuZXcgVWludDE2QXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQVTMyJ10gPSBIRUFQVTMyID0gbmV3IFVpbnQzMkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUEYzMiddID0gSEVBUEYzMiA9IG5ldyBGbG9hdDMyQXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQRjY0J10gPSBIRUFQRjY0ID0gbmV3IEZsb2F0NjRBcnJheShiKTtcclxufVxyXG5cclxuLy8gaW5jbHVkZTogcnVudGltZV9pbml0X3RhYmxlLmpzXHJcbi8vIEluIHJlZ3VsYXIgbm9uLVJFTE9DQVRBQkxFIG1vZGUgdGhlIHRhYmxlIGlzIGV4cG9ydGVkXHJcbi8vIGZyb20gdGhlIHdhc20gbW9kdWxlIGFuZCB0aGlzIHdpbGwgYmUgYXNzaWduZWQgb25jZVxyXG4vLyB0aGUgZXhwb3J0cyBhcmUgYXZhaWxhYmxlLlxyXG52YXIgd2FzbVRhYmxlO1xyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfaW5pdF90YWJsZS5qc1xyXG4vLyBpbmNsdWRlOiBydW50aW1lX3N0YWNrX2NoZWNrLmpzXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX3N0YWNrX2NoZWNrLmpzXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfYXNzZXJ0aW9ucy5qc1xyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9hc3NlcnRpb25zLmpzXHJcbnZhciBfX0FUUFJFUlVOX18gID0gW107IC8vIGZ1bmN0aW9ucyBjYWxsZWQgYmVmb3JlIHRoZSBydW50aW1lIGlzIGluaXRpYWxpemVkXHJcbnZhciBfX0FUSU5JVF9fICAgID0gW107IC8vIGZ1bmN0aW9ucyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXBcclxudmFyIF9fQVRFWElUX18gICAgPSBbXTsgLy8gZnVuY3Rpb25zIGNhbGxlZCBkdXJpbmcgc2h1dGRvd25cclxudmFyIF9fQVRQT1NUUlVOX18gPSBbXTsgLy8gZnVuY3Rpb25zIGNhbGxlZCBhZnRlciB0aGUgbWFpbigpIGlzIGNhbGxlZFxyXG5cclxudmFyIHJ1bnRpbWVJbml0aWFsaXplZCA9IGZhbHNlO1xyXG5cclxudmFyIHJ1bnRpbWVLZWVwYWxpdmVDb3VudGVyID0gMDtcclxuXHJcbmZ1bmN0aW9uIGtlZXBSdW50aW1lQWxpdmUoKSB7XHJcbiAgcmV0dXJuIG5vRXhpdFJ1bnRpbWUgfHwgcnVudGltZUtlZXBhbGl2ZUNvdW50ZXIgPiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwcmVSdW4oKSB7XHJcbiAgaWYgKE1vZHVsZVsncHJlUnVuJ10pIHtcclxuICAgIGlmICh0eXBlb2YgTW9kdWxlWydwcmVSdW4nXSA9PSAnZnVuY3Rpb24nKSBNb2R1bGVbJ3ByZVJ1biddID0gW01vZHVsZVsncHJlUnVuJ11dO1xyXG4gICAgd2hpbGUgKE1vZHVsZVsncHJlUnVuJ10ubGVuZ3RoKSB7XHJcbiAgICAgIGFkZE9uUHJlUnVuKE1vZHVsZVsncHJlUnVuJ10uc2hpZnQoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRQUkVSVU5fXyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXRSdW50aW1lKCkge1xyXG4gIHJ1bnRpbWVJbml0aWFsaXplZCA9IHRydWU7XHJcblxyXG4gIFxyXG4gIGNhbGxSdW50aW1lQ2FsbGJhY2tzKF9fQVRJTklUX18pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwb3N0UnVuKCkge1xyXG5cclxuICBpZiAoTW9kdWxlWydwb3N0UnVuJ10pIHtcclxuICAgIGlmICh0eXBlb2YgTW9kdWxlWydwb3N0UnVuJ10gPT0gJ2Z1bmN0aW9uJykgTW9kdWxlWydwb3N0UnVuJ10gPSBbTW9kdWxlWydwb3N0UnVuJ11dO1xyXG4gICAgd2hpbGUgKE1vZHVsZVsncG9zdFJ1biddLmxlbmd0aCkge1xyXG4gICAgICBhZGRPblBvc3RSdW4oTW9kdWxlWydwb3N0UnVuJ10uc2hpZnQoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUE9TVFJVTl9fKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkT25QcmVSdW4oY2IpIHtcclxuICBfX0FUUFJFUlVOX18udW5zaGlmdChjYik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE9uSW5pdChjYikge1xyXG4gIF9fQVRJTklUX18udW5zaGlmdChjYik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE9uRXhpdChjYikge1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRPblBvc3RSdW4oY2IpIHtcclxuICBfX0FUUE9TVFJVTl9fLnVuc2hpZnQoY2IpO1xyXG59XHJcblxyXG4vLyBpbmNsdWRlOiBydW50aW1lX21hdGguanNcclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9pbXVsXHJcblxyXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9NYXRoL2Zyb3VuZFxyXG5cclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9jbHozMlxyXG5cclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC90cnVuY1xyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfbWF0aC5qc1xyXG4vLyBBIGNvdW50ZXIgb2YgZGVwZW5kZW5jaWVzIGZvciBjYWxsaW5nIHJ1bigpLiBJZiB3ZSBuZWVkIHRvXHJcbi8vIGRvIGFzeW5jaHJvbm91cyB3b3JrIGJlZm9yZSBydW5uaW5nLCBpbmNyZW1lbnQgdGhpcyBhbmRcclxuLy8gZGVjcmVtZW50IGl0LiBJbmNyZW1lbnRpbmcgbXVzdCBoYXBwZW4gaW4gYSBwbGFjZSBsaWtlXHJcbi8vIE1vZHVsZS5wcmVSdW4gKHVzZWQgYnkgZW1jYyB0byBhZGQgZmlsZSBwcmVsb2FkaW5nKS5cclxuLy8gTm90ZSB0aGF0IHlvdSBjYW4gYWRkIGRlcGVuZGVuY2llcyBpbiBwcmVSdW4sIGV2ZW4gdGhvdWdoXHJcbi8vIGl0IGhhcHBlbnMgcmlnaHQgYmVmb3JlIHJ1biAtIHJ1biB3aWxsIGJlIHBvc3Rwb25lZCB1bnRpbFxyXG4vLyB0aGUgZGVwZW5kZW5jaWVzIGFyZSBtZXQuXHJcbnZhciBydW5EZXBlbmRlbmNpZXMgPSAwO1xyXG52YXIgcnVuRGVwZW5kZW5jeVdhdGNoZXIgPSBudWxsO1xyXG52YXIgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gbnVsbDsgLy8gb3ZlcnJpZGRlbiB0byB0YWtlIGRpZmZlcmVudCBhY3Rpb25zIHdoZW4gYWxsIHJ1biBkZXBlbmRlbmNpZXMgYXJlIGZ1bGZpbGxlZFxyXG5cclxuZnVuY3Rpb24gZ2V0VW5pcXVlUnVuRGVwZW5kZW5jeShpZCkge1xyXG4gIHJldHVybiBpZDtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkUnVuRGVwZW5kZW5jeShpZCkge1xyXG4gIHJ1bkRlcGVuZGVuY2llcysrO1xyXG5cclxuICBpZiAoTW9kdWxlWydtb25pdG9yUnVuRGVwZW5kZW5jaWVzJ10pIHtcclxuICAgIE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKHJ1bkRlcGVuZGVuY2llcyk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlUnVuRGVwZW5kZW5jeShpZCkge1xyXG4gIHJ1bkRlcGVuZGVuY2llcy0tO1xyXG5cclxuICBpZiAoTW9kdWxlWydtb25pdG9yUnVuRGVwZW5kZW5jaWVzJ10pIHtcclxuICAgIE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKHJ1bkRlcGVuZGVuY2llcyk7XHJcbiAgfVxyXG5cclxuICBpZiAocnVuRGVwZW5kZW5jaWVzID09IDApIHtcclxuICAgIGlmIChydW5EZXBlbmRlbmN5V2F0Y2hlciAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHJ1bkRlcGVuZGVuY3lXYXRjaGVyKTtcclxuICAgICAgcnVuRGVwZW5kZW5jeVdhdGNoZXIgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKGRlcGVuZGVuY2llc0Z1bGZpbGxlZCkge1xyXG4gICAgICB2YXIgY2FsbGJhY2sgPSBkZXBlbmRlbmNpZXNGdWxmaWxsZWQ7XHJcbiAgICAgIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IG51bGw7XHJcbiAgICAgIGNhbGxiYWNrKCk7IC8vIGNhbiBhZGQgYW5vdGhlciBkZXBlbmRlbmNpZXNGdWxmaWxsZWRcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKiBAcGFyYW0ge3N0cmluZ3xudW1iZXI9fSB3aGF0ICovXHJcbmZ1bmN0aW9uIGFib3J0KHdoYXQpIHtcclxuICBpZiAoTW9kdWxlWydvbkFib3J0J10pIHtcclxuICAgIE1vZHVsZVsnb25BYm9ydCddKHdoYXQpO1xyXG4gIH1cclxuXHJcbiAgd2hhdCA9ICdBYm9ydGVkKCcgKyB3aGF0ICsgJyknO1xyXG4gIC8vIFRPRE8oc2JjKTogU2hvdWxkIHdlIHJlbW92ZSBwcmludGluZyBhbmQgbGVhdmUgaXQgdXAgdG8gd2hvZXZlclxyXG4gIC8vIGNhdGNoZXMgdGhlIGV4Y2VwdGlvbj9cclxuICBlcnIod2hhdCk7XHJcblxyXG4gIEFCT1JUID0gdHJ1ZTtcclxuICBFWElUU1RBVFVTID0gMTtcclxuXHJcbiAgd2hhdCArPSAnLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLic7XHJcblxyXG4gIC8vIFVzZSBhIHdhc20gcnVudGltZSBlcnJvciwgYmVjYXVzZSBhIEpTIGVycm9yIG1pZ2h0IGJlIHNlZW4gYXMgYSBmb3JlaWduXHJcbiAgLy8gZXhjZXB0aW9uLCB3aGljaCBtZWFucyB3ZSdkIHJ1biBkZXN0cnVjdG9ycyBvbiBpdC4gV2UgbmVlZCB0aGUgZXJyb3IgdG9cclxuICAvLyBzaW1wbHkgbWFrZSB0aGUgcHJvZ3JhbSBzdG9wLlxyXG4gIC8vIEZJWE1FIFRoaXMgYXBwcm9hY2ggZG9lcyBub3Qgd29yayBpbiBXYXNtIEVIIGJlY2F1c2UgaXQgY3VycmVudGx5IGRvZXMgbm90IGFzc3VtZVxyXG4gIC8vIGFsbCBSdW50aW1lRXJyb3JzIGFyZSBmcm9tIHRyYXBzOyBpdCBkZWNpZGVzIHdoZXRoZXIgYSBSdW50aW1lRXJyb3IgaXMgZnJvbVxyXG4gIC8vIGEgdHJhcCBvciBub3QgYmFzZWQgb24gYSBoaWRkZW4gZmllbGQgd2l0aGluIHRoZSBvYmplY3QuIFNvIGF0IHRoZSBtb21lbnRcclxuICAvLyB3ZSBkb24ndCBoYXZlIGEgd2F5IG9mIHRocm93aW5nIGEgd2FzbSB0cmFwIGZyb20gSlMuIFRPRE8gTWFrZSBhIEpTIEFQSSB0aGF0XHJcbiAgLy8gYWxsb3dzIHRoaXMgaW4gdGhlIHdhc20gc3BlYy5cclxuXHJcbiAgLy8gU3VwcHJlc3MgY2xvc3VyZSBjb21waWxlciB3YXJuaW5nIGhlcmUuIENsb3N1cmUgY29tcGlsZXIncyBidWlsdGluIGV4dGVyblxyXG4gIC8vIGRlZmludGlvbiBmb3IgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yIGNsYWltcyBpdCB0YWtlcyBubyBhcmd1bWVudHMgZXZlblxyXG4gIC8vIHRob3VnaCBpdCBjYW4uXHJcbiAgLy8gVE9ETyhodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvcHVsbC8zOTEzKTogUmVtb3ZlIGlmL3doZW4gdXBzdHJlYW0gY2xvc3VyZSBnZXRzIGZpeGVkLlxyXG4gIC8qKiBAc3VwcHJlc3Mge2NoZWNrVHlwZXN9ICovXHJcbiAgdmFyIGUgPSBuZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKHdoYXQpO1xyXG5cclxuICByZWFkeVByb21pc2VSZWplY3QoZSk7XHJcbiAgLy8gVGhyb3cgdGhlIGVycm9yIHdoZXRoZXIgb3Igbm90IE1PRFVMQVJJWkUgaXMgc2V0IGJlY2F1c2UgYWJvcnQgaXMgdXNlZFxyXG4gIC8vIGluIGNvZGUgcGF0aHMgYXBhcnQgZnJvbSBpbnN0YW50aWF0aW9uIHdoZXJlIGFuIGV4Y2VwdGlvbiBpcyBleHBlY3RlZFxyXG4gIC8vIHRvIGJlIHRocm93biB3aGVuIGFib3J0IGlzIGNhbGxlZC5cclxuICB0aHJvdyBlO1xyXG59XHJcblxyXG4vLyBpbmNsdWRlOiBtZW1vcnlwcm9maWxlci5qc1xyXG4vLyBlbmQgaW5jbHVkZTogbWVtb3J5cHJvZmlsZXIuanNcclxuLy8gaW5jbHVkZTogVVJJVXRpbHMuanNcclxuLy8gUHJlZml4IG9mIGRhdGEgVVJJcyBlbWl0dGVkIGJ5IFNJTkdMRV9GSUxFIGFuZCByZWxhdGVkIG9wdGlvbnMuXHJcbnZhciBkYXRhVVJJUHJlZml4ID0gJ2RhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwnO1xyXG5cclxuLy8gSW5kaWNhdGVzIHdoZXRoZXIgZmlsZW5hbWUgaXMgYSBiYXNlNjQgZGF0YSBVUkkuXHJcbmZ1bmN0aW9uIGlzRGF0YVVSSShmaWxlbmFtZSkge1xyXG4gIC8vIFByZWZpeCBvZiBkYXRhIFVSSXMgZW1pdHRlZCBieSBTSU5HTEVfRklMRSBhbmQgcmVsYXRlZCBvcHRpb25zLlxyXG4gIHJldHVybiBmaWxlbmFtZS5zdGFydHNXaXRoKGRhdGFVUklQcmVmaXgpO1xyXG59XHJcblxyXG4vLyBJbmRpY2F0ZXMgd2hldGhlciBmaWxlbmFtZSBpcyBkZWxpdmVyZWQgdmlhIGZpbGUgcHJvdG9jb2wgKGFzIG9wcG9zZWQgdG8gaHR0cC9odHRwcylcclxuZnVuY3Rpb24gaXNGaWxlVVJJKGZpbGVuYW1lKSB7XHJcbiAgcmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKTtcclxufVxyXG5cclxuLy8gZW5kIGluY2x1ZGU6IFVSSVV0aWxzLmpzXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfZXhjZXB0aW9ucy5qc1xyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9leGNlcHRpb25zLmpzXHJcbnZhciB3YXNtQmluYXJ5RmlsZTtcclxuICB3YXNtQmluYXJ5RmlsZSA9ICd3YXNtRGJzY2FuLndhc20nO1xyXG4gIGlmICghaXNEYXRhVVJJKHdhc21CaW5hcnlGaWxlKSkge1xyXG4gICAgd2FzbUJpbmFyeUZpbGUgPSBsb2NhdGVGaWxlKHdhc21CaW5hcnlGaWxlKTtcclxuICB9XHJcblxyXG5mdW5jdGlvbiBnZXRCaW5hcnkoZmlsZSkge1xyXG4gIHRyeSB7XHJcbiAgICBpZiAoZmlsZSA9PSB3YXNtQmluYXJ5RmlsZSAmJiB3YXNtQmluYXJ5KSB7XHJcbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh3YXNtQmluYXJ5KTtcclxuICAgIH1cclxuICAgIGlmIChyZWFkQmluYXJ5KSB7XHJcbiAgICAgIHJldHVybiByZWFkQmluYXJ5KGZpbGUpO1xyXG4gICAgfVxyXG4gICAgdGhyb3cgXCJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZFwiO1xyXG4gIH1cclxuICBjYXRjaCAoZXJyKSB7XHJcbiAgICBhYm9ydChlcnIpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0QmluYXJ5UHJvbWlzZShiaW5hcnlGaWxlKSB7XHJcbiAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgYmluYXJ5IHlldCwgdHJ5IHRvIGxvYWQgaXQgYXN5bmNocm9ub3VzbHkuXHJcbiAgLy8gRmV0Y2ggaGFzIHNvbWUgYWRkaXRpb25hbCByZXN0cmljdGlvbnMgb3ZlciBYSFIsIGxpa2UgaXQgY2FuJ3QgYmUgdXNlZCBvbiBhIGZpbGU6Ly8gdXJsLlxyXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL3B1bGwvOTIjaXNzdWVjb21tZW50LTE0MDY2NTkzMlxyXG4gIC8vIENvcmRvdmEgb3IgRWxlY3Ryb24gYXBwcyBhcmUgdHlwaWNhbGx5IGxvYWRlZCBmcm9tIGEgZmlsZTovLyB1cmwuXHJcbiAgLy8gU28gdXNlIGZldGNoIGlmIGl0IGlzIGF2YWlsYWJsZSBhbmQgdGhlIHVybCBpcyBub3QgYSBmaWxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIFhIUi5cclxuICBpZiAoIXdhc21CaW5hcnkgJiYgKEVOVklST05NRU5UX0lTX1dFQiB8fCBFTlZJUk9OTUVOVF9JU19XT1JLRVIpKSB7XHJcbiAgICBpZiAodHlwZW9mIGZldGNoID09ICdmdW5jdGlvbidcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmV0Y2goYmluYXJ5RmlsZSwgeyBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyB9KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKCFyZXNwb25zZVsnb2snXSkge1xyXG4gICAgICAgICAgdGhyb3cgXCJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICdcIiArIGJpbmFyeUZpbGUgKyBcIidcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlWydhcnJheUJ1ZmZlciddKCk7XHJcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiBnZXRCaW5hcnkoYmluYXJ5RmlsZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gT3RoZXJ3aXNlLCBnZXRCaW5hcnkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGl0IHN5bmNocm9ub3VzbHlcclxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpIHsgcmV0dXJuIGdldEJpbmFyeShiaW5hcnlGaWxlKTsgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgcmVjZWl2ZXIpIHtcclxuICByZXR1cm4gZ2V0QmluYXJ5UHJvbWlzZShiaW5hcnlGaWxlKS50aGVuKGZ1bmN0aW9uKGJpbmFyeSkge1xyXG4gICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbmFyeSwgaW1wb3J0cyk7XHJcbiAgfSkudGhlbihmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgIHJldHVybiBpbnN0YW5jZTtcclxuICB9KS50aGVuKHJlY2VpdmVyLCBmdW5jdGlvbihyZWFzb24pIHtcclxuICAgIGVycignZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogJyArIHJlYXNvbik7XHJcblxyXG4gICAgYWJvcnQocmVhc29uKTtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5zdGFudGlhdGVBc3luYyhiaW5hcnksIGJpbmFyeUZpbGUsIGltcG9ydHMsIGNhbGxiYWNrKSB7XHJcbiAgaWYgKCFiaW5hcnkgJiZcclxuICAgICAgdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nID09ICdmdW5jdGlvbicgJiZcclxuICAgICAgIWlzRGF0YVVSSShiaW5hcnlGaWxlKSAmJlxyXG4gICAgICB0eXBlb2YgZmV0Y2ggPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgcmV0dXJuIGZldGNoKGJpbmFyeUZpbGUsIHsgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicgfSkudGhlbihmdW5jdGlvbihyZXNwb25zZSkge1xyXG4gICAgICAvLyBTdXBwcmVzcyBjbG9zdXJlIHdhcm5pbmcgaGVyZSBzaW5jZSB0aGUgdXBzdHJlYW0gZGVmaW5pdGlvbiBmb3JcclxuICAgICAgLy8gaW5zdGFudGlhdGVTdHJlYW1pbmcgb25seSBhbGxvd3MgUHJvbWlzZTxSZXBzcG9uc2U+IHJhdGhlciB0aGFuXHJcbiAgICAgIC8vIGFuIGFjdHVhbCBSZXNwb25zZS5cclxuICAgICAgLy8gVE9ETyhodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvcHVsbC8zOTEzKTogUmVtb3ZlIGlmL3doZW4gdXBzdHJlYW0gY2xvc3VyZSBpcyBmaXhlZC5cclxuICAgICAgLyoqIEBzdXBwcmVzcyB7Y2hlY2tUeXBlc30gKi9cclxuICAgICAgdmFyIHJlc3VsdCA9IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHJlc3BvbnNlLCBpbXBvcnRzKTtcclxuXHJcbiAgICAgIHJldHVybiByZXN1bHQudGhlbihcclxuICAgICAgICBjYWxsYmFjayxcclxuICAgICAgICBmdW5jdGlvbihyZWFzb24pIHtcclxuICAgICAgICAgIC8vIFdlIGV4cGVjdCB0aGUgbW9zdCBjb21tb24gZmFpbHVyZSBjYXVzZSB0byBiZSBhIGJhZCBNSU1FIHR5cGUgZm9yIHRoZSBiaW5hcnksXHJcbiAgICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIHNob3VsZCB3b3JrLlxyXG4gICAgICAgICAgZXJyKCd3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogJyArIHJlYXNvbik7XHJcbiAgICAgICAgICBlcnIoJ2ZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uJyk7XHJcbiAgICAgICAgICByZXR1cm4gaW5zdGFudGlhdGVBcnJheUJ1ZmZlcihiaW5hcnlGaWxlLCBpbXBvcnRzLCBjYWxsYmFjayk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgY2FsbGJhY2spO1xyXG4gIH1cclxufVxyXG5cclxuLy8gQ3JlYXRlIHRoZSB3YXNtIGluc3RhbmNlLlxyXG4vLyBSZWNlaXZlcyB0aGUgd2FzbSBpbXBvcnRzLCByZXR1cm5zIHRoZSBleHBvcnRzLlxyXG5mdW5jdGlvbiBjcmVhdGVXYXNtKCkge1xyXG4gIC8vIHByZXBhcmUgaW1wb3J0c1xyXG4gIHZhciBpbmZvID0ge1xyXG4gICAgJ2Vudic6IHdhc21JbXBvcnRzLFxyXG4gICAgJ3dhc2lfc25hcHNob3RfcHJldmlldzEnOiB3YXNtSW1wb3J0cyxcclxuICB9O1xyXG4gIC8vIExvYWQgdGhlIHdhc20gbW9kdWxlIGFuZCBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdXNpbmcgbmF0aXZlIHN1cHBvcnQgaW4gdGhlIEpTIGVuZ2luZS5cclxuICAvLyBoYW5kbGUgYSBnZW5lcmF0ZWQgd2FzbSBpbnN0YW5jZSwgcmVjZWl2aW5nIGl0cyBleHBvcnRzIGFuZFxyXG4gIC8vIHBlcmZvcm1pbmcgb3RoZXIgbmVjZXNzYXJ5IHNldHVwXHJcbiAgLyoqIEBwYXJhbSB7V2ViQXNzZW1ibHkuTW9kdWxlPX0gbW9kdWxlKi9cclxuICBmdW5jdGlvbiByZWNlaXZlSW5zdGFuY2UoaW5zdGFuY2UsIG1vZHVsZSkge1xyXG4gICAgdmFyIGV4cG9ydHMgPSBpbnN0YW5jZS5leHBvcnRzO1xyXG5cclxuICAgIE1vZHVsZVsnYXNtJ10gPSBleHBvcnRzO1xyXG5cclxuICAgIHdhc21NZW1vcnkgPSBNb2R1bGVbJ2FzbSddWydtZW1vcnknXTtcclxuICAgIHVwZGF0ZU1lbW9yeVZpZXdzKCk7XHJcblxyXG4gICAgd2FzbVRhYmxlID0gTW9kdWxlWydhc20nXVsnX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZSddO1xyXG5cclxuICAgIGFkZE9uSW5pdChNb2R1bGVbJ2FzbSddWydfX3dhc21fY2FsbF9jdG9ycyddKTtcclxuXHJcbiAgICByZW1vdmVSdW5EZXBlbmRlbmN5KCd3YXNtLWluc3RhbnRpYXRlJyk7XHJcblxyXG4gICAgcmV0dXJuIGV4cG9ydHM7XHJcbiAgfVxyXG4gIC8vIHdhaXQgZm9yIHRoZSBwdGhyZWFkIHBvb2wgKGlmIGFueSlcclxuICBhZGRSdW5EZXBlbmRlbmN5KCd3YXNtLWluc3RhbnRpYXRlJyk7XHJcblxyXG4gIC8vIFByZWZlciBzdHJlYW1pbmcgaW5zdGFudGlhdGlvbiBpZiBhdmFpbGFibGUuXHJcbiAgZnVuY3Rpb24gcmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQocmVzdWx0KSB7XHJcbiAgICAvLyAncmVzdWx0JyBpcyBhIFJlc3VsdE9iamVjdCBvYmplY3Qgd2hpY2ggaGFzIGJvdGggdGhlIG1vZHVsZSBhbmQgaW5zdGFuY2UuXHJcbiAgICAvLyByZWNlaXZlSW5zdGFuY2UoKSB3aWxsIHN3YXAgaW4gdGhlIGV4cG9ydHMgKHRvIE1vZHVsZS5hc20pIHNvIHRoZXkgY2FuIGJlIGNhbGxlZFxyXG4gICAgLy8gVE9ETzogRHVlIHRvIENsb3N1cmUgcmVncmVzc2lvbiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvaXNzdWVzLzMxOTMsIHRoZSBhYm92ZSBsaW5lIG5vIGxvbmdlciBvcHRpbWl6ZXMgb3V0IGRvd24gdG8gdGhlIGZvbGxvd2luZyBsaW5lLlxyXG4gICAgLy8gV2hlbiB0aGUgcmVncmVzc2lvbiBpcyBmaXhlZCwgY2FuIHJlc3RvcmUgdGhlIGFib3ZlIFBUSFJFQURTLWVuYWJsZWQgcGF0aC5cclxuICAgIHJlY2VpdmVJbnN0YW5jZShyZXN1bHRbJ2luc3RhbmNlJ10pO1xyXG4gIH1cclxuXHJcbiAgLy8gVXNlciBzaGVsbCBwYWdlcyBjYW4gd3JpdGUgdGhlaXIgb3duIE1vZHVsZS5pbnN0YW50aWF0ZVdhc20gPSBmdW5jdGlvbihpbXBvcnRzLCBzdWNjZXNzQ2FsbGJhY2spIGNhbGxiYWNrXHJcbiAgLy8gdG8gbWFudWFsbHkgaW5zdGFudGlhdGUgdGhlIFdhc20gbW9kdWxlIHRoZW1zZWx2ZXMuIFRoaXMgYWxsb3dzIHBhZ2VzIHRvXHJcbiAgLy8gcnVuIHRoZSBpbnN0YW50aWF0aW9uIHBhcmFsbGVsIHRvIGFueSBvdGhlciBhc3luYyBzdGFydHVwIGFjdGlvbnMgdGhleSBhcmVcclxuICAvLyBwZXJmb3JtaW5nLlxyXG4gIC8vIEFsc28gcHRocmVhZHMgYW5kIHdhc20gd29ya2VycyBpbml0aWFsaXplIHRoZSB3YXNtIGluc3RhbmNlIHRocm91Z2ggdGhpc1xyXG4gIC8vIHBhdGguXHJcbiAgaWYgKE1vZHVsZVsnaW5zdGFudGlhdGVXYXNtJ10pIHtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gTW9kdWxlWydpbnN0YW50aWF0ZVdhc20nXShpbmZvLCByZWNlaXZlSW5zdGFuY2UpO1xyXG4gICAgfSBjYXRjaChlKSB7XHJcbiAgICAgIGVycignTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJyArIGUpO1xyXG4gICAgICAgIC8vIElmIGluc3RhbnRpYXRpb24gZmFpbHMsIHJlamVjdCB0aGUgbW9kdWxlIHJlYWR5IHByb21pc2UuXHJcbiAgICAgICAgcmVhZHlQcm9taXNlUmVqZWN0KGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSWYgaW5zdGFudGlhdGlvbiBmYWlscywgcmVqZWN0IHRoZSBtb2R1bGUgcmVhZHkgcHJvbWlzZS5cclxuICBpbnN0YW50aWF0ZUFzeW5jKHdhc21CaW5hcnksIHdhc21CaW5hcnlGaWxlLCBpbmZvLCByZWNlaXZlSW5zdGFudGlhdGlvblJlc3VsdCkuY2F0Y2gocmVhZHlQcm9taXNlUmVqZWN0KTtcclxuICByZXR1cm4ge307IC8vIG5vIGV4cG9ydHMgeWV0OyB3ZSdsbCBmaWxsIHRoZW0gaW4gbGF0ZXJcclxufVxyXG5cclxuLy8gR2xvYmFscyB1c2VkIGJ5IEpTIGk2NCBjb252ZXJzaW9ucyAoc2VlIG1ha2VTZXRWYWx1ZSlcclxudmFyIHRlbXBEb3VibGU7XHJcbnZhciB0ZW1wSTY0O1xyXG5cclxuLy8gaW5jbHVkZTogcnVudGltZV9kZWJ1Zy5qc1xyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9kZWJ1Zy5qc1xyXG4vLyA9PT0gQm9keSA9PT1cclxuXHJcblxyXG4vLyBlbmQgaW5jbHVkZTogcHJlYW1ibGUuanNcclxuXHJcbiAgLyoqIEBjb25zdHJ1Y3RvciAqL1xyXG4gIGZ1bmN0aW9uIEV4aXRTdGF0dXMoc3RhdHVzKSB7XHJcbiAgICAgIHRoaXMubmFtZSA9ICdFeGl0U3RhdHVzJztcclxuICAgICAgdGhpcy5tZXNzYWdlID0gJ1Byb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoJyArIHN0YXR1cyArICcpJztcclxuICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNhbGxSdW50aW1lQ2FsbGJhY2tzKGNhbGxiYWNrcykge1xyXG4gICAgICB3aGlsZSAoY2FsbGJhY2tzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyBQYXNzIHRoZSBtb2R1bGUgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxyXG4gICAgICAgIGNhbGxiYWNrcy5zaGlmdCgpKE1vZHVsZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwdHJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBnZXRWYWx1ZShwdHIsIHR5cGUgPSAnaTgnKSB7XHJcbiAgICBpZiAodHlwZS5lbmRzV2l0aCgnKicpKSB0eXBlID0gJyonO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2kxJzogcmV0dXJuIEhFQVA4WygocHRyKT4+MCldO1xyXG4gICAgICBjYXNlICdpOCc6IHJldHVybiBIRUFQOFsoKHB0cik+PjApXTtcclxuICAgICAgY2FzZSAnaTE2JzogcmV0dXJuIEhFQVAxNlsoKHB0cik+PjEpXTtcclxuICAgICAgY2FzZSAnaTMyJzogcmV0dXJuIEhFQVAzMlsoKHB0cik+PjIpXTtcclxuICAgICAgY2FzZSAnaTY0JzogcmV0dXJuIEhFQVAzMlsoKHB0cik+PjIpXTtcclxuICAgICAgY2FzZSAnZmxvYXQnOiByZXR1cm4gSEVBUEYzMlsoKHB0cik+PjIpXTtcclxuICAgICAgY2FzZSAnZG91YmxlJzogcmV0dXJuIEhFQVBGNjRbKChwdHIpPj4zKV07XHJcbiAgICAgIGNhc2UgJyonOiByZXR1cm4gSEVBUFUzMlsoKHB0cik+PjIpXTtcclxuICAgICAgZGVmYXVsdDogYWJvcnQoJ2ludmFsaWQgdHlwZSBmb3IgZ2V0VmFsdWU6ICcgKyB0eXBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcHRyXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBzZXRWYWx1ZShwdHIsIHZhbHVlLCB0eXBlID0gJ2k4Jykge1xyXG4gICAgaWYgKHR5cGUuZW5kc1dpdGgoJyonKSkgdHlwZSA9ICcqJztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdpMSc6IEhFQVA4WygocHRyKT4+MCldID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICdpOCc6IEhFQVA4WygocHRyKT4+MCldID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICdpMTYnOiBIRUFQMTZbKChwdHIpPj4xKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2kzMic6IEhFQVAzMlsoKHB0cik+PjIpXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnaTY0JzogKHRlbXBJNjQgPSBbdmFsdWU+Pj4wLCh0ZW1wRG91YmxlPXZhbHVlLCgrKE1hdGguYWJzKHRlbXBEb3VibGUpKSkgPj0gMS4wID8gKHRlbXBEb3VibGUgPiAwLjAgPyAoKE1hdGgubWluKCgrKE1hdGguZmxvb3IoKHRlbXBEb3VibGUpLzQyOTQ5NjcyOTYuMCkpKSwgNDI5NDk2NzI5NS4wKSl8MCk+Pj4wIDogKH5+KCgrKE1hdGguY2VpbCgodGVtcERvdWJsZSAtICsoKCh+fih0ZW1wRG91YmxlKSkpPj4+MCkpLzQyOTQ5NjcyOTYuMCkpKSkpPj4+MCkgOiAwKV0sSEVBUDMyWygocHRyKT4+MildID0gdGVtcEk2NFswXSxIRUFQMzJbKCgocHRyKSsoNCkpPj4yKV0gPSB0ZW1wSTY0WzFdKTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Zsb2F0JzogSEVBUEYzMlsoKHB0cik+PjIpXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnZG91YmxlJzogSEVBUEY2NFsoKHB0cik+PjMpXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnKic6IEhFQVBVMzJbKChwdHIpPj4yKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6IGFib3J0KCdpbnZhbGlkIHR5cGUgZm9yIHNldFZhbHVlOiAnICsgdHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQGNvbnN0cnVjdG9yICovXHJcbiAgZnVuY3Rpb24gRXhjZXB0aW9uSW5mbyhleGNQdHIpIHtcclxuICAgICAgdGhpcy5leGNQdHIgPSBleGNQdHI7XHJcbiAgICAgIHRoaXMucHRyID0gZXhjUHRyIC0gMjQ7XHJcbiAgXHJcbiAgICAgIHRoaXMuc2V0X3R5cGUgPSBmdW5jdGlvbih0eXBlKSB7XHJcbiAgICAgICAgSEVBUFUzMlsoKCh0aGlzLnB0cikrKDQpKT4+MildID0gdHlwZTtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5nZXRfdHlwZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBIRUFQVTMyWygoKHRoaXMucHRyKSsoNCkpPj4yKV07XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuc2V0X2Rlc3RydWN0b3IgPSBmdW5jdGlvbihkZXN0cnVjdG9yKSB7XHJcbiAgICAgICAgSEVBUFUzMlsoKCh0aGlzLnB0cikrKDgpKT4+MildID0gZGVzdHJ1Y3RvcjtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5nZXRfZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBIRUFQVTMyWygoKHRoaXMucHRyKSsoOCkpPj4yKV07XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuc2V0X2NhdWdodCA9IGZ1bmN0aW9uIChjYXVnaHQpIHtcclxuICAgICAgICBjYXVnaHQgPSBjYXVnaHQgPyAxIDogMDtcclxuICAgICAgICBIRUFQOFsoKCh0aGlzLnB0cikrKDEyKSk+PjApXSA9IGNhdWdodDtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5nZXRfY2F1Z2h0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBIRUFQOFsoKCh0aGlzLnB0cikrKDEyKSk+PjApXSAhPSAwO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLnNldF9yZXRocm93biA9IGZ1bmN0aW9uIChyZXRocm93bikge1xyXG4gICAgICAgIHJldGhyb3duID0gcmV0aHJvd24gPyAxIDogMDtcclxuICAgICAgICBIRUFQOFsoKCh0aGlzLnB0cikrKDEzKSk+PjApXSA9IHJldGhyb3duO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLmdldF9yZXRocm93biA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gSEVBUDhbKCgodGhpcy5wdHIpKygxMykpPj4wKV0gIT0gMDtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgLy8gSW5pdGlhbGl6ZSBuYXRpdmUgc3RydWN0dXJlIGZpZWxkcy4gU2hvdWxkIGJlIGNhbGxlZCBvbmNlIGFmdGVyIGFsbG9jYXRlZC5cclxuICAgICAgdGhpcy5pbml0ID0gZnVuY3Rpb24odHlwZSwgZGVzdHJ1Y3Rvcikge1xyXG4gICAgICAgIHRoaXMuc2V0X2FkanVzdGVkX3B0cigwKTtcclxuICAgICAgICB0aGlzLnNldF90eXBlKHR5cGUpO1xyXG4gICAgICAgIHRoaXMuc2V0X2Rlc3RydWN0b3IoZGVzdHJ1Y3Rvcik7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgdGhpcy5zZXRfYWRqdXN0ZWRfcHRyID0gZnVuY3Rpb24oYWRqdXN0ZWRQdHIpIHtcclxuICAgICAgICBIRUFQVTMyWygoKHRoaXMucHRyKSsoMTYpKT4+MildID0gYWRqdXN0ZWRQdHI7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X2FkanVzdGVkX3B0ciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBIRUFQVTMyWygoKHRoaXMucHRyKSsoMTYpKT4+MildO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICAvLyBHZXQgcG9pbnRlciB3aGljaCBpcyBleHBlY3RlZCB0byBiZSByZWNlaXZlZCBieSBjYXRjaCBjbGF1c2UgaW4gQysrIGNvZGUuIEl0IG1heSBiZSBhZGp1c3RlZFxyXG4gICAgICAvLyB3aGVuIHRoZSBwb2ludGVyIGlzIGNhc3RlZCB0byBzb21lIG9mIHRoZSBleGNlcHRpb24gb2JqZWN0IGJhc2UgY2xhc3NlcyAoZS5nLiB3aGVuIHZpcnR1YWxcclxuICAgICAgLy8gaW5oZXJpdGFuY2UgaXMgdXNlZCkuIFdoZW4gYSBwb2ludGVyIGlzIHRocm93biB0aGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSB0aHJvd24gcG9pbnRlclxyXG4gICAgICAvLyBpdHNlbGYuXHJcbiAgICAgIHRoaXMuZ2V0X2V4Y2VwdGlvbl9wdHIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyBXb3JrIGFyb3VuZCBhIGZhc3Rjb21wIGJ1ZywgdGhpcyBjb2RlIGlzIHN0aWxsIGluY2x1ZGVkIGZvciBzb21lIHJlYXNvbiBpbiBhIGJ1aWxkIHdpdGhvdXRcclxuICAgICAgICAvLyBleGNlcHRpb25zIHN1cHBvcnQuXHJcbiAgICAgICAgdmFyIGlzUG9pbnRlciA9IF9fX2N4YV9pc19wb2ludGVyX3R5cGUodGhpcy5nZXRfdHlwZSgpKTtcclxuICAgICAgICBpZiAoaXNQb2ludGVyKSB7XHJcbiAgICAgICAgICByZXR1cm4gSEVBUFUzMlsoKHRoaXMuZXhjUHRyKT4+MildO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYWRqdXN0ZWQgPSB0aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtcclxuICAgICAgICBpZiAoYWRqdXN0ZWQgIT09IDApIHJldHVybiBhZGp1c3RlZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5leGNQdHI7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgXHJcbiAgdmFyIGV4Y2VwdGlvbkxhc3QgPSAwO1xyXG4gIFxyXG4gIHZhciB1bmNhdWdodEV4Y2VwdGlvbkNvdW50ID0gMDtcclxuICBmdW5jdGlvbiBfX19jeGFfdGhyb3cocHRyLCB0eXBlLCBkZXN0cnVjdG9yKSB7XHJcbiAgICAgIHZhciBpbmZvID0gbmV3IEV4Y2VwdGlvbkluZm8ocHRyKTtcclxuICAgICAgLy8gSW5pdGlhbGl6ZSBFeGNlcHRpb25JbmZvIGNvbnRlbnQgYWZ0ZXIgaXQgd2FzIGFsbG9jYXRlZCBpbiBfX2N4YV9hbGxvY2F0ZV9leGNlcHRpb24uXHJcbiAgICAgIGluZm8uaW5pdCh0eXBlLCBkZXN0cnVjdG9yKTtcclxuICAgICAgZXhjZXB0aW9uTGFzdCA9IHB0cjtcclxuICAgICAgdW5jYXVnaHRFeGNlcHRpb25Db3VudCsrO1xyXG4gICAgICB0aHJvdyBleGNlcHRpb25MYXN0O1xyXG4gICAgfVxyXG5cclxuICBmdW5jdGlvbiBfYWJvcnQoKSB7XHJcbiAgICAgIGFib3J0KCcnKTtcclxuICAgIH1cclxuXHJcbiAgZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyhkZXN0LCBzcmMsIG51bSkge1xyXG4gICAgICBIRUFQVTguY29weVdpdGhpbihkZXN0LCBzcmMsIHNyYyArIG51bSk7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldEhlYXBNYXgoKSB7XHJcbiAgICAgIC8vIFN0YXkgb25lIFdhc20gcGFnZSBzaG9ydCBvZiA0R0I6IHdoaWxlIGUuZy4gQ2hyb21lIGlzIGFibGUgdG8gYWxsb2NhdGVcclxuICAgICAgLy8gZnVsbCA0R0IgV2FzbSBtZW1vcmllcywgdGhlIHNpemUgd2lsbCB3cmFwIGJhY2sgdG8gMCBieXRlcyBpbiBXYXNtIHNpZGVcclxuICAgICAgLy8gZm9yIGFueSBjb2RlIHRoYXQgZGVhbHMgd2l0aCBoZWFwIHNpemVzLCB3aGljaCB3b3VsZCByZXF1aXJlIHNwZWNpYWxcclxuICAgICAgLy8gY2FzaW5nIGFsbCBoZWFwIHNpemUgcmVsYXRlZCBjb2RlIHRvIHRyZWF0IDAgc3BlY2lhbGx5LlxyXG4gICAgICByZXR1cm4gMjE0NzQ4MzY0ODtcclxuICAgIH1cclxuICBcclxuICBmdW5jdGlvbiBlbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyKHNpemUpIHtcclxuICAgICAgdmFyIGIgPSB3YXNtTWVtb3J5LmJ1ZmZlcjtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyByb3VuZCBzaXplIGdyb3cgcmVxdWVzdCB1cCB0byB3YXNtIHBhZ2Ugc2l6ZSAoZml4ZWQgNjRLQiBwZXIgc3BlYylcclxuICAgICAgICB3YXNtTWVtb3J5Lmdyb3coKHNpemUgLSBiLmJ5dGVMZW5ndGggKyA2NTUzNSkgPj4+IDE2KTsgLy8gLmdyb3coKSB0YWtlcyBhIGRlbHRhIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyBzaXplXHJcbiAgICAgICAgdXBkYXRlTWVtb3J5Vmlld3MoKTtcclxuICAgICAgICByZXR1cm4gMSAvKnN1Y2Nlc3MqLztcclxuICAgICAgfSBjYXRjaChlKSB7XHJcbiAgICAgIH1cclxuICAgICAgLy8gaW1wbGljaXQgMCByZXR1cm4gdG8gc2F2ZSBjb2RlIHNpemUgKGNhbGxlciB3aWxsIGNhc3QgXCJ1bmRlZmluZWRcIiBpbnRvIDBcclxuICAgICAgLy8gYW55aG93KVxyXG4gICAgfVxyXG4gIGZ1bmN0aW9uIF9lbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwKHJlcXVlc3RlZFNpemUpIHtcclxuICAgICAgdmFyIG9sZFNpemUgPSBIRUFQVTgubGVuZ3RoO1xyXG4gICAgICByZXF1ZXN0ZWRTaXplID0gcmVxdWVzdGVkU2l6ZSA+Pj4gMDtcclxuICAgICAgLy8gV2l0aCBtdWx0aXRocmVhZGVkIGJ1aWxkcywgcmFjZXMgY2FuIGhhcHBlbiAoYW5vdGhlciB0aHJlYWQgbWlnaHQgaW5jcmVhc2UgdGhlIHNpemVcclxuICAgICAgLy8gaW4gYmV0d2VlbiksIHNvIHJldHVybiBhIGZhaWx1cmUsIGFuZCBsZXQgdGhlIGNhbGxlciByZXRyeS5cclxuICBcclxuICAgICAgLy8gTWVtb3J5IHJlc2l6ZSBydWxlczpcclxuICAgICAgLy8gMS4gIEFsd2F5cyBpbmNyZWFzZSBoZWFwIHNpemUgdG8gYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCBzaXplLCByb3VuZGVkIHVwXHJcbiAgICAgIC8vICAgICB0byBuZXh0IHBhZ2UgbXVsdGlwbGUuXHJcbiAgICAgIC8vIDJhLiBJZiBNRU1PUllfR1JPV1RIX0xJTkVBUl9TVEVQID09IC0xLCBleGNlc3NpdmVseSByZXNpemUgdGhlIGhlYXBcclxuICAgICAgLy8gICAgIGdlb21ldHJpY2FsbHk6IGluY3JlYXNlIHRoZSBoZWFwIHNpemUgYWNjb3JkaW5nIHRvXHJcbiAgICAgIC8vICAgICBNRU1PUllfR1JPV1RIX0dFT01FVFJJQ19TVEVQIGZhY3RvciAoZGVmYXVsdCArMjAlKSwgQXQgbW9zdFxyXG4gICAgICAvLyAgICAgb3ZlcnJlc2VydmUgYnkgTUVNT1JZX0dST1dUSF9HRU9NRVRSSUNfQ0FQIGJ5dGVzIChkZWZhdWx0IDk2TUIpLlxyXG4gICAgICAvLyAyYi4gSWYgTUVNT1JZX0dST1dUSF9MSU5FQVJfU1RFUCAhPSAtMSwgZXhjZXNzaXZlbHkgcmVzaXplIHRoZSBoZWFwXHJcbiAgICAgIC8vICAgICBsaW5lYXJseTogaW5jcmVhc2UgdGhlIGhlYXAgc2l6ZSBieSBhdCBsZWFzdFxyXG4gICAgICAvLyAgICAgTUVNT1JZX0dST1dUSF9MSU5FQVJfU1RFUCBieXRlcy5cclxuICAgICAgLy8gMy4gIE1heCBzaXplIGZvciB0aGUgaGVhcCBpcyBjYXBwZWQgYXQgMjA0OE1CLVdBU01fUEFHRV9TSVpFLCBvciBieVxyXG4gICAgICAvLyAgICAgTUFYSU1VTV9NRU1PUlksIG9yIGJ5IEFTQU4gbGltaXQsIGRlcGVuZGluZyBvbiB3aGljaCBpcyBzbWFsbGVzdFxyXG4gICAgICAvLyA0LiAgSWYgd2Ugd2VyZSB1bmFibGUgdG8gYWxsb2NhdGUgYXMgbXVjaCBtZW1vcnksIGl0IG1heSBiZSBkdWUgdG9cclxuICAgICAgLy8gICAgIG92ZXItZWFnZXIgZGVjaXNpb24gdG8gZXhjZXNzaXZlbHkgcmVzZXJ2ZSBkdWUgdG8gKDMpIGFib3ZlLlxyXG4gICAgICAvLyAgICAgSGVuY2UgaWYgYW4gYWxsb2NhdGlvbiBmYWlscywgY3V0IGRvd24gb24gdGhlIGFtb3VudCBvZiBleGNlc3NcclxuICAgICAgLy8gICAgIGdyb3d0aCwgaW4gYW4gYXR0ZW1wdCB0byBzdWNjZWVkIHRvIHBlcmZvcm0gYSBzbWFsbGVyIGFsbG9jYXRpb24uXHJcbiAgXHJcbiAgICAgIC8vIEEgbGltaXQgaXMgc2V0IGZvciBob3cgbXVjaCB3ZSBjYW4gZ3Jvdy4gV2Ugc2hvdWxkIG5vdCBleGNlZWQgdGhhdFxyXG4gICAgICAvLyAodGhlIHdhc20gYmluYXJ5IHNwZWNpZmllcyBpdCwgc28gaWYgd2UgdHJpZWQsIHdlJ2QgZmFpbCBhbnlob3cpLlxyXG4gICAgICB2YXIgbWF4SGVhcFNpemUgPSBnZXRIZWFwTWF4KCk7XHJcbiAgICAgIGlmIChyZXF1ZXN0ZWRTaXplID4gbWF4SGVhcFNpemUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgbGV0IGFsaWduVXAgPSAoeCwgbXVsdGlwbGUpID0+IHggKyAobXVsdGlwbGUgLSB4ICUgbXVsdGlwbGUpICUgbXVsdGlwbGU7XHJcbiAgXHJcbiAgICAgIC8vIExvb3AgdGhyb3VnaCBwb3RlbnRpYWwgaGVhcCBzaXplIGluY3JlYXNlcy4gSWYgd2UgYXR0ZW1wdCBhIHRvbyBlYWdlclxyXG4gICAgICAvLyByZXNlcnZhdGlvbiB0aGF0IGZhaWxzLCBjdXQgZG93biBvbiB0aGUgYXR0ZW1wdGVkIHNpemUgYW5kIHJlc2VydmUgYVxyXG4gICAgICAvLyBzbWFsbGVyIGJ1bXAgaW5zdGVhZC4gKG1heCAzIHRpbWVzLCBjaG9zZW4gc29tZXdoYXQgYXJiaXRyYXJpbHkpXHJcbiAgICAgIGZvciAodmFyIGN1dERvd24gPSAxOyBjdXREb3duIDw9IDQ7IGN1dERvd24gKj0gMikge1xyXG4gICAgICAgIHZhciBvdmVyR3Jvd25IZWFwU2l6ZSA9IG9sZFNpemUgKiAoMSArIDAuMiAvIGN1dERvd24pOyAvLyBlbnN1cmUgZ2VvbWV0cmljIGdyb3d0aFxyXG4gICAgICAgIC8vIGJ1dCBsaW1pdCBvdmVycmVzZXJ2aW5nIChkZWZhdWx0IHRvIGNhcHBpbmcgYXQgKzk2TUIgb3Zlcmdyb3d0aCBhdCBtb3N0KVxyXG4gICAgICAgIG92ZXJHcm93bkhlYXBTaXplID0gTWF0aC5taW4ob3Zlckdyb3duSGVhcFNpemUsIHJlcXVlc3RlZFNpemUgKyAxMDA2NjMyOTYgKTtcclxuICBcclxuICAgICAgICB2YXIgbmV3U2l6ZSA9IE1hdGgubWluKG1heEhlYXBTaXplLCBhbGlnblVwKE1hdGgubWF4KHJlcXVlc3RlZFNpemUsIG92ZXJHcm93bkhlYXBTaXplKSwgNjU1MzYpKTtcclxuICBcclxuICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBlbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyKG5ld1NpemUpO1xyXG4gICAgICAgIGlmIChyZXBsYWNlbWVudCkge1xyXG4gIFxyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0Q0Z1bmMoaWRlbnQpIHtcclxuICAgICAgdmFyIGZ1bmMgPSBNb2R1bGVbJ18nICsgaWRlbnRdOyAvLyBjbG9zdXJlIGV4cG9ydGVkIGZ1bmN0aW9uXHJcbiAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gIGZ1bmN0aW9uIHdyaXRlQXJyYXlUb01lbW9yeShhcnJheSwgYnVmZmVyKSB7XHJcbiAgICAgIEhFQVA4LnNldChhcnJheSwgYnVmZmVyKTtcclxuICAgIH1cclxuICBcclxuICBmdW5jdGlvbiBsZW5ndGhCeXRlc1VURjgoc3RyKSB7XHJcbiAgICAgIHZhciBsZW4gPSAwO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIC8vIEdvdGNoYTogY2hhckNvZGVBdCByZXR1cm5zIGEgMTYtYml0IHdvcmQgdGhhdCBpcyBhIFVURi0xNiBlbmNvZGVkIGNvZGVcclxuICAgICAgICAvLyB1bml0LCBub3QgYSBVbmljb2RlIGNvZGUgcG9pbnQgb2YgdGhlIGNoYXJhY3RlciEgU28gZGVjb2RlXHJcbiAgICAgICAgLy8gVVRGMTYtPlVURjMyLT5VVEY4LlxyXG4gICAgICAgIC8vIFNlZSBodHRwOi8vdW5pY29kZS5vcmcvZmFxL3V0Zl9ib20uaHRtbCN1dGYxNi0zXHJcbiAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTsgLy8gcG9zc2libHkgYSBsZWFkIHN1cnJvZ2F0ZVxyXG4gICAgICAgIGlmIChjIDw9IDB4N0YpIHtcclxuICAgICAgICAgIGxlbisrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYyA8PSAweDdGRikge1xyXG4gICAgICAgICAgbGVuICs9IDI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjID49IDB4RDgwMCAmJiBjIDw9IDB4REZGRikge1xyXG4gICAgICAgICAgbGVuICs9IDQ7ICsraTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGVuICs9IDM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBsZW47XHJcbiAgICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLCBoZWFwLCBvdXRJZHgsIG1heEJ5dGVzVG9Xcml0ZSkge1xyXG4gICAgICAvLyBQYXJhbWV0ZXIgbWF4Qnl0ZXNUb1dyaXRlIGlzIG5vdCBvcHRpb25hbC4gTmVnYXRpdmUgdmFsdWVzLCAwLCBudWxsLFxyXG4gICAgICAvLyB1bmRlZmluZWQgYW5kIGZhbHNlIGVhY2ggZG9uJ3Qgd3JpdGUgb3V0IGFueSBieXRlcy5cclxuICAgICAgaWYgKCEobWF4Qnl0ZXNUb1dyaXRlID4gMCkpXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgXHJcbiAgICAgIHZhciBzdGFydElkeCA9IG91dElkeDtcclxuICAgICAgdmFyIGVuZElkeCA9IG91dElkeCArIG1heEJ5dGVzVG9Xcml0ZSAtIDE7IC8vIC0xIGZvciBzdHJpbmcgbnVsbCB0ZXJtaW5hdG9yLlxyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIC8vIEdvdGNoYTogY2hhckNvZGVBdCByZXR1cm5zIGEgMTYtYml0IHdvcmQgdGhhdCBpcyBhIFVURi0xNiBlbmNvZGVkIGNvZGVcclxuICAgICAgICAvLyB1bml0LCBub3QgYSBVbmljb2RlIGNvZGUgcG9pbnQgb2YgdGhlIGNoYXJhY3RlciEgU28gZGVjb2RlXHJcbiAgICAgICAgLy8gVVRGMTYtPlVURjMyLT5VVEY4LlxyXG4gICAgICAgIC8vIFNlZSBodHRwOi8vdW5pY29kZS5vcmcvZmFxL3V0Zl9ib20uaHRtbCN1dGYxNi0zXHJcbiAgICAgICAgLy8gRm9yIFVURjggYnl0ZSBzdHJ1Y3R1cmUsIHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi04I0Rlc2NyaXB0aW9uXHJcbiAgICAgICAgLy8gYW5kIGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyMjc5LnR4dFxyXG4gICAgICAgIC8vIGFuZCBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzYyOVxyXG4gICAgICAgIHZhciB1ID0gc3RyLmNoYXJDb2RlQXQoaSk7IC8vIHBvc3NpYmx5IGEgbGVhZCBzdXJyb2dhdGVcclxuICAgICAgICBpZiAodSA+PSAweEQ4MDAgJiYgdSA8PSAweERGRkYpIHtcclxuICAgICAgICAgIHZhciB1MSA9IHN0ci5jaGFyQ29kZUF0KCsraSk7XHJcbiAgICAgICAgICB1ID0gMHgxMDAwMCArICgodSAmIDB4M0ZGKSA8PCAxMCkgfCAodTEgJiAweDNGRik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1IDw9IDB4N0YpIHtcclxuICAgICAgICAgIGlmIChvdXRJZHggPj0gZW5kSWR4KSBicmVhaztcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gdTtcclxuICAgICAgICB9IGVsc2UgaWYgKHUgPD0gMHg3RkYpIHtcclxuICAgICAgICAgIGlmIChvdXRJZHggKyAxID49IGVuZElkeCkgYnJlYWs7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4QzAgfCAodSA+PiA2KTtcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHg4MCB8ICh1ICYgNjMpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodSA8PSAweEZGRkYpIHtcclxuICAgICAgICAgIGlmIChvdXRJZHggKyAyID49IGVuZElkeCkgYnJlYWs7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4RTAgfCAodSA+PiAxMik7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAoKHUgPj4gNikgJiA2Myk7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAodSAmIDYzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKG91dElkeCArIDMgPj0gZW5kSWR4KSBicmVhaztcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHhGMCB8ICh1ID4+IDE4KTtcclxuICAgICAgICAgIGhlYXBbb3V0SWR4KytdID0gMHg4MCB8ICgodSA+PiAxMikgJiA2Myk7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAoKHUgPj4gNikgJiA2Myk7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAodSAmIDYzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gTnVsbC10ZXJtaW5hdGUgdGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci5cclxuICAgICAgaGVhcFtvdXRJZHhdID0gMDtcclxuICAgICAgcmV0dXJuIG91dElkeCAtIHN0YXJ0SWR4O1xyXG4gICAgfVxyXG4gIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOChzdHIsIG91dFB0ciwgbWF4Qnl0ZXNUb1dyaXRlKSB7XHJcbiAgICAgIHJldHVybiBzdHJpbmdUb1VURjhBcnJheShzdHIsIEhFQVBVOCxvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSk7XHJcbiAgICB9XHJcbiAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4T25TdGFjayhzdHIpIHtcclxuICAgICAgdmFyIHNpemUgPSBsZW5ndGhCeXRlc1VURjgoc3RyKSArIDE7XHJcbiAgICAgIHZhciByZXQgPSBzdGFja0FsbG9jKHNpemUpO1xyXG4gICAgICBzdHJpbmdUb1VURjgoc3RyLCByZXQsIHNpemUpO1xyXG4gICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG4gIFxyXG4gIHZhciBVVEY4RGVjb2RlciA9IHR5cGVvZiBUZXh0RGVjb2RlciAhPSAndW5kZWZpbmVkJyA/IG5ldyBUZXh0RGVjb2RlcigndXRmOCcpIDogdW5kZWZpbmVkO1xyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIHBvaW50ZXIgJ2lkeCcgdG8gYSBudWxsLXRlcm1pbmF0ZWQgVVRGOC1lbmNvZGVkIHN0cmluZyBpbiB0aGUgZ2l2ZW5cclxuICAgICAqIGFycmF5IHRoYXQgY29udGFpbnMgdWludDggdmFsdWVzLCByZXR1cm5zIGEgY29weSBvZiB0aGF0IHN0cmluZyBhcyBhXHJcbiAgICAgKiBKYXZhc2NyaXB0IFN0cmluZyBvYmplY3QuXHJcbiAgICAgKiBoZWFwT3JBcnJheSBpcyBlaXRoZXIgYSByZWd1bGFyIGFycmF5LCBvciBhIEphdmFTY3JpcHQgdHlwZWQgYXJyYXkgdmlldy5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gbWF4Qnl0ZXNUb1JlYWRcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIFVURjhBcnJheVRvU3RyaW5nKGhlYXBPckFycmF5LCBpZHgsIG1heEJ5dGVzVG9SZWFkKSB7XHJcbiAgICAgIHZhciBlbmRJZHggPSBpZHggKyBtYXhCeXRlc1RvUmVhZDtcclxuICAgICAgdmFyIGVuZFB0ciA9IGlkeDtcclxuICAgICAgLy8gVGV4dERlY29kZXIgbmVlZHMgdG8ga25vdyB0aGUgYnl0ZSBsZW5ndGggaW4gYWR2YW5jZSwgaXQgZG9lc24ndCBzdG9wIG9uXHJcbiAgICAgIC8vIG51bGwgdGVybWluYXRvciBieSBpdHNlbGYuICBBbHNvLCB1c2UgdGhlIGxlbmd0aCBpbmZvIHRvIGF2b2lkIHJ1bm5pbmcgdGlueVxyXG4gICAgICAvLyBzdHJpbmdzIHRocm91Z2ggVGV4dERlY29kZXIsIHNpbmNlIC5zdWJhcnJheSgpIGFsbG9jYXRlcyBnYXJiYWdlLlxyXG4gICAgICAvLyAoQXMgYSB0aW55IGNvZGUgc2F2ZSB0cmljaywgY29tcGFyZSBlbmRQdHIgYWdhaW5zdCBlbmRJZHggdXNpbmcgYSBuZWdhdGlvbixcclxuICAgICAgLy8gc28gdGhhdCB1bmRlZmluZWQgbWVhbnMgSW5maW5pdHkpXHJcbiAgICAgIHdoaWxlIChoZWFwT3JBcnJheVtlbmRQdHJdICYmICEoZW5kUHRyID49IGVuZElkeCkpICsrZW5kUHRyO1xyXG4gIFxyXG4gICAgICBpZiAoZW5kUHRyIC0gaWR4ID4gMTYgJiYgaGVhcE9yQXJyYXkuYnVmZmVyICYmIFVURjhEZWNvZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIFVURjhEZWNvZGVyLmRlY29kZShoZWFwT3JBcnJheS5zdWJhcnJheShpZHgsIGVuZFB0cikpO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBzdHIgPSAnJztcclxuICAgICAgLy8gSWYgYnVpbGRpbmcgd2l0aCBUZXh0RGVjb2Rlciwgd2UgaGF2ZSBhbHJlYWR5IGNvbXB1dGVkIHRoZSBzdHJpbmcgbGVuZ3RoXHJcbiAgICAgIC8vIGFib3ZlLCBzbyB0ZXN0IGxvb3AgZW5kIGNvbmRpdGlvbiBhZ2FpbnN0IHRoYXRcclxuICAgICAgd2hpbGUgKGlkeCA8IGVuZFB0cikge1xyXG4gICAgICAgIC8vIEZvciBVVEY4IGJ5dGUgc3RydWN0dXJlLCBzZWU6XHJcbiAgICAgICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtOCNEZXNjcmlwdGlvblxyXG4gICAgICAgIC8vIGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyMjc5LnR4dFxyXG4gICAgICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNjI5XHJcbiAgICAgICAgdmFyIHUwID0gaGVhcE9yQXJyYXlbaWR4KytdO1xyXG4gICAgICAgIGlmICghKHUwICYgMHg4MCkpIHsgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodTApOyBjb250aW51ZTsgfVxyXG4gICAgICAgIHZhciB1MSA9IGhlYXBPckFycmF5W2lkeCsrXSAmIDYzO1xyXG4gICAgICAgIGlmICgodTAgJiAweEUwKSA9PSAweEMwKSB7IHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgodTAgJiAzMSkgPDwgNikgfCB1MSk7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgdmFyIHUyID0gaGVhcE9yQXJyYXlbaWR4KytdICYgNjM7XHJcbiAgICAgICAgaWYgKCh1MCAmIDB4RjApID09IDB4RTApIHtcclxuICAgICAgICAgIHUwID0gKCh1MCAmIDE1KSA8PCAxMikgfCAodTEgPDwgNikgfCB1MjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdTAgPSAoKHUwICYgNykgPDwgMTgpIHwgKHUxIDw8IDEyKSB8ICh1MiA8PCA2KSB8IChoZWFwT3JBcnJheVtpZHgrK10gJiA2Myk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGlmICh1MCA8IDB4MTAwMDApIHtcclxuICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHUwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFyIGNoID0gdTAgLSAweDEwMDAwO1xyXG4gICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODAwIHwgKGNoID4+IDEwKSwgMHhEQzAwIHwgKGNoICYgMHgzRkYpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH1cclxuICBcclxuICBcclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBwb2ludGVyICdwdHInIHRvIGEgbnVsbC10ZXJtaW5hdGVkIFVURjgtZW5jb2RlZCBzdHJpbmcgaW4gdGhlXHJcbiAgICAgKiBlbXNjcmlwdGVuIEhFQVAsIHJldHVybnMgYSBjb3B5IG9mIHRoYXQgc3RyaW5nIGFzIGEgSmF2YXNjcmlwdCBTdHJpbmcgb2JqZWN0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwdHJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gbWF4Qnl0ZXNUb1JlYWQgLSBBbiBvcHRpb25hbCBsZW5ndGggdGhhdCBzcGVjaWZpZXMgdGhlXHJcbiAgICAgKiAgIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuIFlvdSBjYW4gb21pdCB0aGlzIHBhcmFtZXRlciB0byBzY2FuIHRoZVxyXG4gICAgICogICBzdHJpbmcgdW50aWwgdGhlIGZpcnN0IFx1MDAwMCBieXRlLiBJZiBtYXhCeXRlc1RvUmVhZCBpcyBwYXNzZWQsIGFuZCB0aGUgc3RyaW5nXHJcbiAgICAgKiAgIGF0IFtwdHIsIHB0cittYXhCeXRlc1RvUmVhZHJbIGNvbnRhaW5zIGEgbnVsbCBieXRlIGluIHRoZSBtaWRkbGUsIHRoZW4gdGhlXHJcbiAgICAgKiAgIHN0cmluZyB3aWxsIGN1dCBzaG9ydCBhdCB0aGF0IGJ5dGUgaW5kZXggKGkuZS4gbWF4Qnl0ZXNUb1JlYWQgd2lsbCBub3RcclxuICAgICAqICAgcHJvZHVjZSBhIHN0cmluZyBvZiBleGFjdCBsZW5ndGggW3B0ciwgcHRyK21heEJ5dGVzVG9SZWFkWykgTi5CLiBtaXhpbmdcclxuICAgICAqICAgZnJlcXVlbnQgdXNlcyBvZiBVVEY4VG9TdHJpbmcoKSB3aXRoIGFuZCB3aXRob3V0IG1heEJ5dGVzVG9SZWFkIG1heSB0aHJvd1xyXG4gICAgICogICBKUyBKSVQgb3B0aW1pemF0aW9ucyBvZmYsIHNvIGl0IGlzIHdvcnRoIHRvIGNvbnNpZGVyIGNvbnNpc3RlbnRseSB1c2luZyBvbmVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIFVURjhUb1N0cmluZyhwdHIsIG1heEJ5dGVzVG9SZWFkKSB7XHJcbiAgICAgIHJldHVybiBwdHIgPyBVVEY4QXJyYXlUb1N0cmluZyhIRUFQVTgsIHB0ciwgbWF4Qnl0ZXNUb1JlYWQpIDogJyc7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfG51bGw9fSByZXR1cm5UeXBlXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5PX0gYXJnVHlwZXNcclxuICAgICAqIEBwYXJhbSB7QXJndW1lbnRzfEFycmF5PX0gYXJnc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRzXHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBjY2FsbChpZGVudCwgcmV0dXJuVHlwZSwgYXJnVHlwZXMsIGFyZ3MsIG9wdHMpIHtcclxuICAgICAgLy8gRm9yIGZhc3QgbG9va3VwIG9mIGNvbnZlcnNpb24gZnVuY3Rpb25zXHJcbiAgICAgIHZhciB0b0MgPSB7XHJcbiAgICAgICAgJ3N0cmluZyc6IChzdHIpID0+IHtcclxuICAgICAgICAgIHZhciByZXQgPSAwO1xyXG4gICAgICAgICAgaWYgKHN0ciAhPT0gbnVsbCAmJiBzdHIgIT09IHVuZGVmaW5lZCAmJiBzdHIgIT09IDApIHsgLy8gbnVsbCBzdHJpbmdcclxuICAgICAgICAgICAgLy8gYXQgbW9zdCA0IGJ5dGVzIHBlciBVVEYtOCBjb2RlIHBvaW50LCArMSBmb3IgdGhlIHRyYWlsaW5nICdcXDAnXHJcbiAgICAgICAgICAgIHJldCA9IHN0cmluZ1RvVVRGOE9uU3RhY2soc3RyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAnYXJyYXknOiAoYXJyKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcmV0ID0gc3RhY2tBbGxvYyhhcnIubGVuZ3RoKTtcclxuICAgICAgICAgIHdyaXRlQXJyYXlUb01lbW9yeShhcnIsIHJldCk7XHJcbiAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICBcclxuICAgICAgZnVuY3Rpb24gY29udmVydFJldHVyblZhbHVlKHJldCkge1xyXG4gICAgICAgIGlmIChyZXR1cm5UeXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICByZXR1cm4gVVRGOFRvU3RyaW5nKHJldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXR1cm5UeXBlID09PSAnYm9vbGVhbicpIHJldHVybiBCb29sZWFuKHJldCk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICB2YXIgZnVuYyA9IGdldENGdW5jKGlkZW50KTtcclxuICAgICAgdmFyIGNBcmdzID0gW107XHJcbiAgICAgIHZhciBzdGFjayA9IDA7XHJcbiAgICAgIGlmIChhcmdzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICB2YXIgY29udmVydGVyID0gdG9DW2FyZ1R5cGVzW2ldXTtcclxuICAgICAgICAgIGlmIChjb252ZXJ0ZXIpIHtcclxuICAgICAgICAgICAgaWYgKHN0YWNrID09PSAwKSBzdGFjayA9IHN0YWNrU2F2ZSgpO1xyXG4gICAgICAgICAgICBjQXJnc1tpXSA9IGNvbnZlcnRlcihhcmdzW2ldKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNBcmdzW2ldID0gYXJnc1tpXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdmFyIHJldCA9IGZ1bmMuYXBwbHkobnVsbCwgY0FyZ3MpO1xyXG4gICAgICBmdW5jdGlvbiBvbkRvbmUocmV0KSB7XHJcbiAgICAgICAgaWYgKHN0YWNrICE9PSAwKSBzdGFja1Jlc3RvcmUoc3RhY2spO1xyXG4gICAgICAgIHJldHVybiBjb252ZXJ0UmV0dXJuVmFsdWUocmV0KTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICByZXQgPSBvbkRvbmUocmV0KTtcclxuICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmc9fSByZXR1cm5UeXBlXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5PX0gYXJnVHlwZXNcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0c1xyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gY3dyYXAoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBvcHRzKSB7XHJcbiAgICAgIC8vIFdoZW4gdGhlIGZ1bmN0aW9uIHRha2VzIG51bWJlcnMgYW5kIHJldHVybnMgYSBudW1iZXIsIHdlIGNhbiBqdXN0IHJldHVyblxyXG4gICAgICAvLyB0aGUgb3JpZ2luYWwgZnVuY3Rpb25cclxuICAgICAgdmFyIG51bWVyaWNBcmdzID0gIWFyZ1R5cGVzIHx8IGFyZ1R5cGVzLmV2ZXJ5KCh0eXBlKSA9PiB0eXBlID09PSAnbnVtYmVyJyB8fCB0eXBlID09PSAnYm9vbGVhbicpO1xyXG4gICAgICB2YXIgbnVtZXJpY1JldCA9IHJldHVyblR5cGUgIT09ICdzdHJpbmcnO1xyXG4gICAgICBpZiAobnVtZXJpY1JldCAmJiBudW1lcmljQXJncyAmJiAhb3B0cykge1xyXG4gICAgICAgIHJldHVybiBnZXRDRnVuYyhpZGVudCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBjY2FsbChpZGVudCwgcmV0dXJuVHlwZSwgYXJnVHlwZXMsIGFyZ3VtZW50cywgb3B0cyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbnZhciB3YXNtSW1wb3J0cyA9IHtcclxuICBcIl9fY3hhX3Rocm93XCI6IF9fX2N4YV90aHJvdyxcclxuICBcImFib3J0XCI6IF9hYm9ydCxcclxuICBcImVtc2NyaXB0ZW5fbWVtY3B5X2JpZ1wiOiBfZW1zY3JpcHRlbl9tZW1jcHlfYmlnLFxyXG4gIFwiZW1zY3JpcHRlbl9yZXNpemVfaGVhcFwiOiBfZW1zY3JpcHRlbl9yZXNpemVfaGVhcFxyXG59O1xyXG52YXIgYXNtID0gY3JlYXRlV2FzbSgpO1xyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfX193YXNtX2NhbGxfY3RvcnMgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9fX3dhc21fY2FsbF9jdG9ycyA9IE1vZHVsZVtcImFzbVwiXVtcIl9fd2FzbV9jYWxsX2N0b3JzXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX2Ric2NhbiA9IE1vZHVsZVtcIl9kYnNjYW5cIl0gPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9kYnNjYW4gPSBNb2R1bGVbXCJfZGJzY2FuXCJdID0gTW9kdWxlW1wiYXNtXCJdW1wiZGJzY2FuXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX19fZXJybm9fbG9jYXRpb24gPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9fX2Vycm5vX2xvY2F0aW9uID0gTW9kdWxlW1wiYXNtXCJdW1wiX19lcnJub19sb2NhdGlvblwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9tYWxsb2MgPSBNb2R1bGVbXCJfbWFsbG9jXCJdID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfbWFsbG9jID0gTW9kdWxlW1wiX21hbGxvY1wiXSA9IE1vZHVsZVtcImFzbVwiXVtcIm1hbGxvY1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9mcmVlID0gTW9kdWxlW1wiX2ZyZWVcIl0gPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9mcmVlID0gTW9kdWxlW1wiX2ZyZWVcIl0gPSBNb2R1bGVbXCJhc21cIl1bXCJmcmVlXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgc3RhY2tTYXZlID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChzdGFja1NhdmUgPSBNb2R1bGVbXCJhc21cIl1bXCJzdGFja1NhdmVcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBzdGFja1Jlc3RvcmUgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKHN0YWNrUmVzdG9yZSA9IE1vZHVsZVtcImFzbVwiXVtcInN0YWNrUmVzdG9yZVwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIHN0YWNrQWxsb2MgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKHN0YWNrQWxsb2MgPSBNb2R1bGVbXCJhc21cIl1bXCJzdGFja0FsbG9jXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX19fY3hhX2lzX3BvaW50ZXJfdHlwZSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoX19fY3hhX2lzX3BvaW50ZXJfdHlwZSA9IE1vZHVsZVtcImFzbVwiXVtcIl9fY3hhX2lzX3BvaW50ZXJfdHlwZVwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcblxyXG5cclxuLy8gaW5jbHVkZTogcG9zdGFtYmxlLmpzXHJcbi8vID09PSBBdXRvLWdlbmVyYXRlZCBwb3N0YW1ibGUgc2V0dXAgZW50cnkgc3R1ZmYgPT09XHJcblxyXG5Nb2R1bGVbXCJjY2FsbFwiXSA9IGNjYWxsO1xyXG5Nb2R1bGVbXCJjd3JhcFwiXSA9IGN3cmFwO1xyXG5cclxuXHJcbnZhciBjYWxsZWRSdW47XHJcblxyXG5kZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBmdW5jdGlvbiBydW5DYWxsZXIoKSB7XHJcbiAgLy8gSWYgcnVuIGhhcyBuZXZlciBiZWVuIGNhbGxlZCwgYW5kIHdlIHNob3VsZCBjYWxsIHJ1biAoSU5WT0tFX1JVTiBpcyB0cnVlLCBhbmQgTW9kdWxlLm5vSW5pdGlhbFJ1biBpcyBub3QgZmFsc2UpXHJcbiAgaWYgKCFjYWxsZWRSdW4pIHJ1bigpO1xyXG4gIGlmICghY2FsbGVkUnVuKSBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBydW5DYWxsZXI7IC8vIHRyeSB0aGlzIGFnYWluIGxhdGVyLCBhZnRlciBuZXcgZGVwcyBhcmUgZnVsZmlsbGVkXHJcbn07XHJcblxyXG5mdW5jdGlvbiBydW4oKSB7XHJcblxyXG4gIGlmIChydW5EZXBlbmRlbmNpZXMgPiAwKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBwcmVSdW4oKTtcclxuXHJcbiAgLy8gYSBwcmVSdW4gYWRkZWQgYSBkZXBlbmRlbmN5LCBydW4gd2lsbCBiZSBjYWxsZWQgbGF0ZXJcclxuICBpZiAocnVuRGVwZW5kZW5jaWVzID4gMCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZG9SdW4oKSB7XHJcbiAgICAvLyBydW4gbWF5IGhhdmUganVzdCBiZWVuIGNhbGxlZCB0aHJvdWdoIGRlcGVuZGVuY2llcyBiZWluZyBmdWxmaWxsZWQganVzdCBpbiB0aGlzIHZlcnkgZnJhbWUsXHJcbiAgICAvLyBvciB3aGlsZSB0aGUgYXN5bmMgc2V0U3RhdHVzIHRpbWUgYmVsb3cgd2FzIGhhcHBlbmluZ1xyXG4gICAgaWYgKGNhbGxlZFJ1bikgcmV0dXJuO1xyXG4gICAgY2FsbGVkUnVuID0gdHJ1ZTtcclxuICAgIE1vZHVsZVsnY2FsbGVkUnVuJ10gPSB0cnVlO1xyXG5cclxuICAgIGlmIChBQk9SVCkgcmV0dXJuO1xyXG5cclxuICAgIGluaXRSdW50aW1lKCk7XHJcblxyXG4gICAgcmVhZHlQcm9taXNlUmVzb2x2ZShNb2R1bGUpO1xyXG4gICAgaWYgKE1vZHVsZVsnb25SdW50aW1lSW5pdGlhbGl6ZWQnXSkgTW9kdWxlWydvblJ1bnRpbWVJbml0aWFsaXplZCddKCk7XHJcblxyXG4gICAgcG9zdFJ1bigpO1xyXG4gIH1cclxuXHJcbiAgaWYgKE1vZHVsZVsnc2V0U3RhdHVzJ10pIHtcclxuICAgIE1vZHVsZVsnc2V0U3RhdHVzJ10oJ1J1bm5pbmcuLi4nKTtcclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgTW9kdWxlWydzZXRTdGF0dXMnXSgnJyk7XHJcbiAgICAgIH0sIDEpO1xyXG4gICAgICBkb1J1bigpO1xyXG4gICAgfSwgMSk7XHJcbiAgfSBlbHNlXHJcbiAge1xyXG4gICAgZG9SdW4oKTtcclxuICB9XHJcbn1cclxuXHJcbmlmIChNb2R1bGVbJ3ByZUluaXQnXSkge1xyXG4gIGlmICh0eXBlb2YgTW9kdWxlWydwcmVJbml0J10gPT0gJ2Z1bmN0aW9uJykgTW9kdWxlWydwcmVJbml0J10gPSBbTW9kdWxlWydwcmVJbml0J11dO1xyXG4gIHdoaWxlIChNb2R1bGVbJ3ByZUluaXQnXS5sZW5ndGggPiAwKSB7XHJcbiAgICBNb2R1bGVbJ3ByZUluaXQnXS5wb3AoKSgpO1xyXG4gIH1cclxufVxyXG5cclxucnVuKCk7XHJcblxyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHBvc3RhbWJsZS5qc1xyXG5cclxuXHJcbiAgcmV0dXJuIGV4cG9ydENwcERic2NhbkxpYi5yZWFkeVxyXG59XHJcblxyXG4pO1xyXG59KSgpO1xyXG5pZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxyXG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0Q3BwRGJzY2FuTGliO1xyXG5lbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZVsnYW1kJ10pXHJcbiAgZGVmaW5lKFtdLCBmdW5jdGlvbigpIHsgcmV0dXJuIGV4cG9ydENwcERic2NhbkxpYjsgfSk7XHJcbmVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JylcclxuICBleHBvcnRzW1wiZXhwb3J0Q3BwRGJzY2FuTGliXCJdID0gZXhwb3J0Q3BwRGJzY2FuTGliO1xyXG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5hbWRPID0ge307IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmhtZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlID0gT2JqZWN0LmNyZWF0ZShtb2R1bGUpO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0c2V0OiAoKSA9PiB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0VTIE1vZHVsZXMgbWF5IG5vdCBhc3NpZ24gbW9kdWxlLmV4cG9ydHMgb3IgZXhwb3J0cy4qLCBVc2UgRVNNIGV4cG9ydCBzeW50YXgsIGluc3RlYWQ6ICcgKyBtb2R1bGUuaWQpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICFzY3JpcHRVcmwpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBzZWxmLmxvY2F0aW9uICsgXCJcIjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBjaHVua3Ncbi8vIFwiMVwiIG1lYW5zIFwiYWxyZWFkeSBsb2FkZWRcIlxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0Nzk2OiAxXG59O1xuXG4vLyBubyBjaHVuayBpbnN0YWxsIGZ1bmN0aW9uIG5lZWRlZFxuLy8gbm8gY2h1bmsgbG9hZGluZ1xuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0IiwiaW1wb3J0IHsgZXhwb3J0Q3BwRGJzY2FuTGliIH0gZnJvbSBcIi4vd2FzbURic2Nhbi5qc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGJzY2FuKGVtYmVkWCwgZW1iZWRZLCBlcHNpbG9uLCBtaW5QdHMpIHtcbiAgICBjb25zdCB3YXNtVXJsID0gbmV3IFVSTCgnLi93YXNtRGJzY2FuLndhc20nLCBpbXBvcnQubWV0YS51cmwpLmhyZWY7XG4gICAgY29uc3Qgd2FzbVBhdGggPSB3YXNtVXJsLnN1YnN0cmluZygwLCB3YXNtVXJsLmxhc3RJbmRleE9mKCcvJykgKyAxKSArICd3YXNtRGJzY2FuLndhc20nO1xuICAgIGxldCB3YXNtSW5zdGFuY2U7XG4gICAgdHJ5IHtcbiAgICAgICAgd2FzbUluc3RhbmNlID0gYXdhaXQgZXhwb3J0Q3BwRGJzY2FuTGliKHtsb2NhdGVGaWxlOiAoKSA9PiB3YXNtVXJsLCBwcmludEVycjogKF8pID0+IHt9fSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2FzbUluc3RhbmNlID0gYXdhaXQgZXhwb3J0Q3BwRGJzY2FuTGliKHtsb2NhdGVGaWxlOiAoKSA9PiB3YXNtUGF0aCwgcHJpbnRFcnI6IChfKSA9PiB7fX0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbG9hZCB3YXNtIGZpbGUgZm9yIGRic2NhbicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGdldERic2Nhbldhc20gPVxuICAgIHdhc21JbnN0YW5jZS5jd3JhcCgnZGJzY2FuJywgJ251bGwnLCBbJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJywgJ251bWJlcicsICdudW1iZXInLCAnbnVtYmVyJ10pO1xuICAgIGNvbnN0IGJ5dGVzRm9yRW1iZWRYID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogZW1iZWRYLmxlbmd0aDtcbiAgICBjb25zdCBkYXRhUHRyWCA9IHdhc21JbnN0YW5jZS5fbWFsbG9jKGJ5dGVzRm9yRW1iZWRYKTsgLy8gYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgb24gdGhlIHdhc20gaGVhcCBmb3IgdGhlIGVtYmVkWFxuICAgIGNvbnN0IGRhdGFQdHJZID0gd2FzbUluc3RhbmNlLl9tYWxsb2MoYnl0ZXNGb3JFbWJlZFgpOyAvLyBhbGxvY2F0ZSBhIG1lbW9yeSBibG9jayBvbiB0aGUgd2FzbSBoZWFwIGZvciB0aGUgZW1iZWRZXG4gICAgY29uc3QgeEhlYXAgPSBuZXcgVWludDhBcnJheSh3YXNtSW5zdGFuY2UuSEVBUFU4LmJ1ZmZlciwgZGF0YVB0clgsIGJ5dGVzRm9yRW1iZWRYKTtcbiAgICB4SGVhcC5zZXQobmV3IFVpbnQ4QXJyYXkoZW1iZWRYLmJ1ZmZlcikpOyAvLyBjb3B5IGVtYmVkWCB0byB0aGUgd2FzbSBoZWFwXG4gICAgY29uc3QgeUhlYXAgPSBuZXcgVWludDhBcnJheSh3YXNtSW5zdGFuY2UuSEVBUFU4LmJ1ZmZlciwgZGF0YVB0clksIGJ5dGVzRm9yRW1iZWRYKTtcbiAgICB5SGVhcC5zZXQobmV3IFVpbnQ4QXJyYXkoZW1iZWRZLmJ1ZmZlcikpOyAvLyBjb3B5IGVtYmVkWSB0byB0aGUgd2FzbSBoZWFwXG4gICAgXG4gICAgY29uc3QgY2x1c3RlclB0ciA9IHdhc21JbnN0YW5jZS5fbWFsbG9jKGJ5dGVzRm9yRW1iZWRYKTtcbiAgICBjb25zdCBjbHVzdGVySGVhcCA9IG5ldyBVaW50OEFycmF5KHdhc21JbnN0YW5jZS5IRUFQVTguYnVmZmVyLCBjbHVzdGVyUHRyLCBieXRlc0ZvckVtYmVkWCk7XG5cbiAgICBnZXREYnNjYW5XYXNtKGRhdGFQdHJYLCBkYXRhUHRyWSwgZW1iZWRYLmxlbmd0aCwgZXBzaWxvbiwgbWluUHRzLCBjbHVzdGVyUHRyKTtcbiAgICBjb25zdCBjbHVzdGVyUmVzdWx0ID0gbmV3IEludDMyQXJyYXkoY2x1c3RlckhlYXAuYnVmZmVyLCBjbHVzdGVySGVhcC5ieXRlT2Zmc2V0LCBlbWJlZFgubGVuZ3RoKTtcbiAgICB3YXNtSW5zdGFuY2UuX2ZyZWUoeEhlYXAuYnl0ZU9mZnNldCk7XG4gICAgd2FzbUluc3RhbmNlLl9mcmVlKHlIZWFwLmJ5dGVPZmZzZXQpO1xuICAgIHdhc21JbnN0YW5jZS5fZnJlZShjbHVzdGVySGVhcC5ieXRlT2Zmc2V0KTtcbiAgICByZXR1cm4gY2x1c3RlclJlc3VsdDtcbn0iXSwibmFtZXMiOlsiX19hd2FpdGVyIiwiX3NjcmlwdERpciIsImV4cG9ydENwcERic2NhbkxpYiIsImRvY3VtZW50IiwiY3VycmVudFNjcmlwdCIsInNyYyIsInVuZGVmaW5lZCIsInJlYWR5UHJvbWlzZVJlc29sdmUiLCJyZWFkeVByb21pc2VSZWplY3QiLCJNb2R1bGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlYWRCaW5hcnkiLCJtb2R1bGVPdmVycmlkZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJFTlZJUk9OTUVOVF9JU19XRUIiLCJ3aW5kb3ciLCJFTlZJUk9OTUVOVF9JU19XT1JLRVIiLCJpbXBvcnRTY3JpcHRzIiwic2NyaXB0RGlyZWN0b3J5IiwicHJvY2VzcyIsInZlcnNpb25zIiwibm9kZSIsInNlbGYiLCJsb2NhdGlvbiIsImhyZWYiLCJpbmRleE9mIiwic3Vic3RyIiwicmVwbGFjZSIsImxhc3RJbmRleE9mIiwidXJsIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwicmVzcG9uc2VUeXBlIiwic2VuZCIsIlVpbnQ4QXJyYXkiLCJjb25zb2xlIiwibG9nIiwiYmluZCIsIndhc21CaW5hcnkiLCJ3YXNtTWVtb3J5IiwiZXJyIiwid2FybiIsIldlYkFzc2VtYmx5IiwiYWJvcnQiLCJIRUFQOCIsIkhFQVBVOCIsIkhFQVBVMzIiLCJBQk9SVCIsInVwZGF0ZU1lbW9yeVZpZXdzIiwiYiIsImJ1ZmZlciIsIkludDhBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsIl9fQVRQUkVSVU5fXyIsIl9fQVRJTklUX18iLCJfX0FUUE9TVFJVTl9fIiwicnVuRGVwZW5kZW5jaWVzIiwicnVuRGVwZW5kZW5jeVdhdGNoZXIiLCJkZXBlbmRlbmNpZXNGdWxmaWxsZWQiLCJ3aGF0IiwiZSIsIlJ1bnRpbWVFcnJvciIsIndhc21CaW5hcnlGaWxlIiwicGF0aCIsImlzRGF0YVVSSSIsImZpbGVuYW1lIiwic3RhcnRzV2l0aCIsImdldEJpbmFyeSIsImZpbGUiLCJpbnN0YW50aWF0ZUFycmF5QnVmZmVyIiwiYmluYXJ5RmlsZSIsImltcG9ydHMiLCJyZWNlaXZlciIsImZldGNoIiwidGhlbiIsImNyZWRlbnRpYWxzIiwicmVzcG9uc2UiLCJjYXRjaCIsImdldEJpbmFyeVByb21pc2UiLCJiaW5hcnkiLCJpbnN0YW50aWF0ZSIsImluc3RhbmNlIiwicmVhc29uIiwiY2FsbFJ1bnRpbWVDYWxsYmFja3MiLCJjYWxsYmFja3MiLCJsZW5ndGgiLCJzaGlmdCIsIkV4Y2VwdGlvbkluZm8iLCJleGNQdHIiLCJ0aGlzIiwicHRyIiwic2V0X3R5cGUiLCJ0eXBlIiwiZ2V0X3R5cGUiLCJzZXRfZGVzdHJ1Y3RvciIsImRlc3RydWN0b3IiLCJnZXRfZGVzdHJ1Y3RvciIsInNldF9jYXVnaHQiLCJjYXVnaHQiLCJnZXRfY2F1Z2h0Iiwic2V0X3JldGhyb3duIiwicmV0aHJvd24iLCJnZXRfcmV0aHJvd24iLCJpbml0Iiwic2V0X2FkanVzdGVkX3B0ciIsImFkanVzdGVkUHRyIiwiZ2V0X2FkanVzdGVkX3B0ciIsImdldF9leGNlcHRpb25fcHRyIiwiX19fY3hhX2lzX3BvaW50ZXJfdHlwZSIsImFkanVzdGVkIiwiZW1zY3JpcHRlbl9yZWFsbG9jX2J1ZmZlciIsInNpemUiLCJncm93IiwiYnl0ZUxlbmd0aCIsImdldENGdW5jIiwiaWRlbnQiLCJVVEY4RGVjb2RlciIsIlRleHREZWNvZGVyIiwiY2NhbGwiLCJyZXR1cm5UeXBlIiwiYXJnVHlwZXMiLCJhcmdzIiwib3B0cyIsInRvQyIsInN0ciIsInJldCIsImxlbiIsImkiLCJjIiwiY2hhckNvZGVBdCIsImxlbmd0aEJ5dGVzVVRGOCIsInN0YWNrQWxsb2MiLCJvdXRQdHIiLCJtYXhCeXRlc1RvV3JpdGUiLCJoZWFwIiwib3V0SWR4IiwiZW5kSWR4IiwidSIsInN0cmluZ1RvVVRGOEFycmF5Iiwic3RyaW5nVG9VVEY4Iiwic3RyaW5nVG9VVEY4T25TdGFjayIsImFyciIsImFycmF5Iiwic2V0IiwiZnVuYyIsImNBcmdzIiwic3RhY2siLCJjb252ZXJ0ZXIiLCJzdGFja1NhdmUiLCJhcHBseSIsInN0YWNrUmVzdG9yZSIsImhlYXBPckFycmF5IiwiaWR4IiwibWF4Qnl0ZXNUb1JlYWQiLCJlbmRQdHIiLCJkZWNvZGUiLCJzdWJhcnJheSIsInUwIiwidTEiLCJ1MiIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImNoIiwiVVRGOEFycmF5VG9TdHJpbmciLCJCb29sZWFuIiwiY29udmVydFJldHVyblZhbHVlIiwib25Eb25lIiwiY2FsbGVkUnVuIiwid2FzbUltcG9ydHMiLCJkZXN0IiwibnVtIiwiY29weVdpdGhpbiIsInJlcXVlc3RlZFNpemUiLCJ4Iiwib2xkU2l6ZSIsIm1heEhlYXBTaXplIiwiY3V0RG93biIsIm92ZXJHcm93bkhlYXBTaXplIiwiTWF0aCIsIm1pbiIsIm1heCIsImNhbGxiYWNrIiwiaW5mbyIsInJlY2VpdmVJbnN0YW5jZSIsIm1vZHVsZSIsImNiIiwiZXhwb3J0cyIsInVuc2hpZnQiLCJpZCIsImNsZWFySW50ZXJ2YWwiLCJyZW1vdmVSdW5EZXBlbmRlbmN5IiwicmVzdWx0IiwiaW5zdGFudGlhdGVTdHJlYW1pbmciLCJjcmVhdGVXYXNtIiwiYXJndW1lbnRzIiwicnVuIiwiZG9SdW4iLCJwb3N0UnVuIiwicHJlUnVuIiwic2V0VGltZW91dCIsIm51bWVyaWNBcmdzIiwiZXZlcnkiLCJydW5DYWxsZXIiLCJwb3AiLCJyZWFkeSIsImRlZmluZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsImxvYWRlZCIsIl9fd2VicGFja19tb2R1bGVzX18iLCJtIiwiYW1kTyIsImQiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImciLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJobWQiLCJjcmVhdGUiLCJjaGlsZHJlbiIsIkVycm9yIiwib2JqIiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNjcmlwdFVybCIsInNjcmlwdHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInAiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJmdWxmaWxsZWQiLCJ2YWx1ZSIsInN0ZXAiLCJuZXh0IiwicmVqZWN0ZWQiLCJkb25lIiwib25tZXNzYWdlIiwiZXZlbnQiLCJlbWJlZFgiLCJlbWJlZFkiLCJlcHNpbG9uIiwibWluUHRzIiwiZGF0YSIsImNsdXN0ZXJzIiwiYXN5bmMiLCJ3YXNtVXJsIiwiVVJMIiwid2FzbVBhdGgiLCJzdWJzdHJpbmciLCJ3YXNtSW5zdGFuY2UiLCJsb2NhdGVGaWxlIiwicHJpbnRFcnIiLCJfIiwiZXJyb3IiLCJnZXREYnNjYW5XYXNtIiwiY3dyYXAiLCJieXRlc0ZvckVtYmVkWCIsIkJZVEVTX1BFUl9FTEVNRU5UIiwiZGF0YVB0clgiLCJfbWFsbG9jIiwiZGF0YVB0clkiLCJ4SGVhcCIsInlIZWFwIiwiY2x1c3RlclB0ciIsImNsdXN0ZXJIZWFwIiwiY2x1c3RlclJlc3VsdCIsImJ5dGVPZmZzZXQiLCJfZnJlZSIsImRic2NhbiIsInBvc3RNZXNzYWdlIl0sInNvdXJjZVJvb3QiOiIifQ==
package/dist/902.js DELETED
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunkeda=self.webpackChunkeda||[]).push([[902],{6845:(t,n,e)=>{e.d(n,{P:()=>a}),t=e.hmd(t);var r,a=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t){var n,a,o=void 0!==(t=t||{})?t:{};o.ready=new Promise((function(t,e){n=t,a=e}));var s,i=Object.assign({},o),u=[],c="object"==typeof window,f="function"==typeof importScripts,l=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(c||f)&&(f?l=self.location.href:"undefined"!=typeof document&&document.currentScript&&(l=document.currentScript.src),r&&(l=r),l=0!==l.indexOf("blob:")?l.substr(0,l.replace(/[?#].*/,"").lastIndexOf("/")+1):"",f&&(s=t=>{var n=new XMLHttpRequest;return n.open("GET",t,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)})),o.print||console.log.bind(console);var p,m,h=o.printErr||console.warn.bind(console);Object.assign(o,i),i=null,o.arguments&&(u=o.arguments),o.thisProgram&&o.thisProgram,o.quit&&o.quit,o.wasmBinary&&(p=o.wasmBinary),o.noExitRuntime,"object"!=typeof WebAssembly&&F("no native wasm support detected");var d,y,_,w,b,A=!1,C="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function E(t,n){return t?function(t,n,e){for(var r=n+e,a=n;t[a]&&!(a>=r);)++a;if(a-n>16&&t.buffer&&C)return C.decode(t.subarray(n,a));for(var o="";n<a;){var s=t[n++];if(128&s){var i=63&t[n++];if(192!=(224&s)){var u=63&t[n++];if((s=224==(240&s)?(15&s)<<12|i<<6|u:(7&s)<<18|i<<12|u<<6|63&t[n++])<65536)o+=String.fromCharCode(s);else{var c=s-65536;o+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else o+=String.fromCharCode((31&s)<<6|i)}else o+=String.fromCharCode(s)}return o}(_,t,n):""}function v(t){d=t,o.HEAP8=y=new Int8Array(t),o.HEAP16=new Int16Array(t),o.HEAP32=w=new Int32Array(t),o.HEAPU8=_=new Uint8Array(t),o.HEAPU16=new Uint16Array(t),o.HEAPU32=b=new Uint32Array(t),o.HEAPF32=new Float32Array(t),o.HEAPF64=new Float64Array(t)}o.INITIAL_MEMORY;var g=[],R=[],S=[],k=0,I=null,P=null;function F(t){o.onAbort&&o.onAbort(t),h(t="Aborted("+t+")"),A=!0,t+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(t);throw a(n),n}var x,L;function M(t){return t.startsWith("data:application/octet-stream;base64,")}function O(t){try{if(t==x&&p)return new Uint8Array(p);if(s)return s(t);throw"both async and sync fetching of the wasm failed"}catch(t){F(t)}}function T(t){for(;t.length>0;)t.shift()(o)}function H(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){b[this.ptr+4>>2]=t},this.get_type=function(){return b[this.ptr+4>>2]},this.set_destructor=function(t){b[this.ptr+8>>2]=t},this.get_destructor=function(){return b[this.ptr+8>>2]},this.set_refcount=function(t){w[this.ptr>>2]=t},this.set_caught=function(t){t=t?1:0,y[this.ptr+12>>0]=t},this.get_caught=function(){return 0!=y[this.ptr+12>>0]},this.set_rethrown=function(t){t=t?1:0,y[this.ptr+13>>0]=t},this.get_rethrown=function(){return 0!=y[this.ptr+13>>0]},this.init=function(t,n){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(n),this.set_refcount(0),this.set_caught(!1),this.set_rethrown(!1)},this.add_ref=function(){var t=w[this.ptr>>2];w[this.ptr>>2]=t+1},this.release_ref=function(){var t=w[this.ptr>>2];return w[this.ptr>>2]=t-1,1===t},this.set_adjusted_ptr=function(t){b[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return b[this.ptr+16>>2]},this.get_exception_ptr=function(){if(V(this.get_type()))return b[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function j(t){try{return m.grow(t-d.byteLength+65535>>>16),v(m.buffer),1}catch(t){}}function B(t){return o["_"+t]}function D(t,n,e,r,a){var o={string:t=>{var n=0;if(null!=t&&0!==t){var e=1+(t.length<<2);!function(t,n,e){!function(t,n,e,r){if(!(r>0))return 0;for(var a=e+r-1,o=0;o<t.length;++o){var s=t.charCodeAt(o);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&t.charCodeAt(++o)),s<=127){if(e>=a)break;n[e++]=s}else if(s<=2047){if(e+1>=a)break;n[e++]=192|s>>6,n[e++]=128|63&s}else if(s<=65535){if(e+2>=a)break;n[e++]=224|s>>12,n[e++]=128|s>>6&63,n[e++]=128|63&s}else{if(e+3>=a)break;n[e++]=240|s>>18,n[e++]=128|s>>12&63,n[e++]=128|s>>6&63,n[e++]=128|63&s}}n[e]=0}(t,_,n,e)}(t,n=q(e),e)}return n},array:t=>{var n=q(t.length);return function(t,n){y.set(t,n)}(t,n),n}},s=B(t),i=[],u=0;if(r)for(var c=0;c<r.length;c++){var f=o[e[c]];f?(0===u&&(u=z()),i[c]=f(r[c])):i[c]=r[c]}var l=s.apply(null,i);return function(t){return 0!==u&&N(u),function(t){return"string"===n?E(t):"boolean"===n?Boolean(t):t}(t)}(l)}M(x="EDA.wasm")||(L=x,x=o.locateFile?o.locateFile(L,l):l+L);var U,W={a:function(t,n,e,r){F("Assertion failed: "+E(t)+", at: "+[n?E(n):"unknown filename",e,r?E(r):"unknown function"])},b:function(t,n,e){throw new H(t).init(n,e),t},d:function(t,n,e){_.copyWithin(t,n,n+e)},c:function(t){var n,e=_.length,r=2147483648;if((t>>>=0)>r)return!1;for(var a=1;a<=4;a*=2){var o=e*(1+.2/a);if(o=Math.min(o,t+100663296),j(Math.min(r,(n=Math.max(t,o))+(65536-n%65536)%65536)))return!0}return!1}},z=(function(){var t={a:W};function n(t,n){var e,r=t.exports;o.asm=r,v((m=o.asm.e).buffer),o.asm.i,e=o.asm.f,R.unshift(e),function(t){if(k--,o.monitorRunDependencies&&o.monitorRunDependencies(k),0==k&&(null!==I&&(clearInterval(I),I=null),P)){var n=P;P=null,n()}}()}function r(t){n(t.instance)}function s(n){return(p||!c&&!f||"function"!=typeof fetch?Promise.resolve().then((function(){return O(x)})):fetch(new URL(e(1328),e.b)).then((function(t){if(!t.ok)throw"failed to load wasm binary file at '"+x+"'";return t.arrayBuffer()})).catch((function(){return O(x)}))).then((function(n){return WebAssembly.instantiate(n,t)})).then((function(t){return t})).then(n,(function(t){h("failed to asynchronously prepare wasm: "+t),F(t)}))}if(k++,o.monitorRunDependencies&&o.monitorRunDependencies(k),o.instantiateWasm)try{return o.instantiateWasm(t,n)}catch(t){h("Module.instantiateWasm callback failed with error: "+t),a(t)}(p||"function"!=typeof WebAssembly.instantiateStreaming||M(x)||"function"!=typeof fetch?s(r):fetch(new URL(e(1328),e.b)).then((function(n){return WebAssembly.instantiateStreaming(n,t).then(r,(function(t){return h("wasm streaming compile failed: "+t),h("falling back to ArrayBuffer instantiation"),s(r)}))}))).catch(a)}(),o.___wasm_call_ctors=function(){return(o.___wasm_call_ctors=o.asm.f).apply(null,arguments)},o._principalComponentAnalysis=function(){return(o._principalComponentAnalysis=o.asm.g).apply(null,arguments)},o._error=function(){return(o._error=o.asm.h).apply(null,arguments)},o._free=function(){return(o._free=o.asm.j).apply(null,arguments)},o._malloc=function(){return(o._malloc=o.asm.k).apply(null,arguments)},o._partialLeastSquareRegression=function(){return(o._partialLeastSquareRegression=o.asm.l).apply(null,arguments)},o._generateDataset=function(){return(o._generateDataset=o.asm.m).apply(null,arguments)},o._normalizeDataset=function(){return(o._normalizeDataset=o.asm.n).apply(null,arguments)},o._trainLSSVM=function(){return(o._trainLSSVM=o.asm.o).apply(null,arguments)},o._predictByLSSVM=function(){return(o._predictByLSSVM=o.asm.p).apply(null,arguments)},o._trainAndAnalyzeLSSVM=function(){return(o._trainAndAnalyzeLSSVM=o.asm.q).apply(null,arguments)},o.stackSave=function(){return(z=o.stackSave=o.asm.r).apply(null,arguments)}),N=o.stackRestore=function(){return(N=o.stackRestore=o.asm.s).apply(null,arguments)},q=o.stackAlloc=function(){return(q=o.stackAlloc=o.asm.t).apply(null,arguments)},V=o.___cxa_is_pointer_type=function(){return(V=o.___cxa_is_pointer_type=o.asm.u).apply(null,arguments)};function Y(t){function e(){U||(U=!0,o.calledRun=!0,A||(T(R),n(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for("function"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)t=o.postRun.shift(),S.unshift(t);var t;T(S)}()))}t=t||u,k>0||(function(){if(o.preRun)for("function"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)t=o.preRun.shift(),g.unshift(t);var t;T(g)}(),k>0||(o.setStatus?(o.setStatus("Running..."),setTimeout((function(){setTimeout((function(){o.setStatus("")}),1),e()}),1)):e()))}if(o.ccall=D,o.cwrap=function(t,n,e,r){var a=(e=e||[]).every((t=>"number"===t||"boolean"===t));return"string"!==n&&a&&!r?B(t):function(){return D(t,n,e,arguments)}},P=function t(){U||Y(),U||(P=t)},o.preInit)for("function"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return Y(),t.ready});"object"==typeof exports?t.exports=a:"function"==typeof define&&e.amdO?define([],(function(){return a})):"object"==typeof exports&&(exports.exportEDA=a)},2086:(t,n,e)=>{e.d(n,{Gz:()=>w});const r="num",a="floatColumn",o="intColumn",s="floatColumns",i="newFloatColumns",u="intColumns",c="newIntColumns",f="newFloatColumn",l="newIntColumn",p="int",m="double",h="number",d={intColumn:"HEAP32",floatColumn:"HEAPF32",floatColumns:"HEAPF32",newFloatColumns:"HEAPF32",intColumns:"HEAP32",newIntColumns:"HEAP32",newFloatColumn:"HEAPF32",newIntColumn:"HEAP32"},y={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array},_={intColumn:2,floatColumn:2,floatColumns:2,newFloatColumns:2,intColumns:2,newIntColumns:2,newFloatColumn:2,newIntColumn:2};function w(t,n,e,w){!function(t,n){for(const e of n){const n=e.type;switch(n){case r:case p:case m:break;case o:case a:case f:case l:e.data.buf=t._malloc(e.data.numOfRows*y[n].BYTES_PER_ELEMENT);break;case u:case c:case s:case i:e.data.buf=t._malloc(e.data.numOfRows*e.data.numOfColumns*y[n].BYTES_PER_ELEMENT)}}}(t,n),function(t,n){let e,i;for(const c of n){const n=c.type;switch(n){case r:case p:case m:break;case o:case a:e=_[n],i=t[d[n]],i.set(c.data.array,c.data.buf>>e);break;case u:case s:e=_[n],i=t[d[n]];let f=y[n].BYTES_PER_ELEMENT,l=c.data.buf,h=c.data.numOfColumns,w=c.data.numOfRows,b=c.data.arrays;for(let t=0;t<h;t++)i.set(b[t],l+t*w*f>>e)}}}(t,n);let b=function(t){let n=[];for(const e of t)switch(e.type){case r:case p:case m:n.push(e.data);break;case o:case a:case f:case l:n.push(e.data.buf),n.push(e.data.numOfRows);break;case u:case c:case s:case i:n.push(e.data.buf),n.push(e.data.numOfRows),n.push(e.data.numOfColumns)}return n}(n),A=function(t){let n=[];for(const e of t)switch(e.type){case r:case p:case m:n.push(h);break;case o:case a:case f:case l:n.push(h),n.push(h);break;case u:case c:case s:case i:n.push(h),n.push(h),n.push(h)}return n}(n),C=t.ccall(e,w,A,b);return function(t,n){let e,h,_,w,b;for(const A of n){const n=A.type;switch(n){case r:case p:case m:case o:case a:case s:case u:break;case f:case l:e=t[d[n]],h=A.data.numOfRows,w=y[n].BYTES_PER_ELEMENT,b=A.data.buf;let C=new y[n](h);for(let t=0;t<h;t++)C[t]=e[b/w+t];A.array=C;break;case c:case i:e=t[d[n]],h=A.data.numOfRows,_=A.data.numOfColumns,w=y[n].BYTES_PER_ELEMENT,b=A.data.buf;let E=[];for(let t=0;t<_;t++){let r=new y[n](h);for(let n=0;n<h;n++)r[n]=e[b/w+n+t*h];E.push(r)}A.arrays=E}}}(t,n),function(t,n){for(const e of n)switch(e.type){case r:case p:case m:break;case o:case a:case u:case c:case s:case i:case f:case l:t._free(e.data.buf)}}(t,n),C}},1328:(t,n,e)=>{t.exports=e.p+"f5343e2c2e15952ce916.wasm"}}]);
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFLSSxhQUNyQkUsRUFBYVosRUFBUS9ILEdBQU13SSxrQkFDM0J4SyxFQUFNb0ssRUFBSUMsS0FBS3JLLElBQ2YsSUFBSTRLLEVBQVMsR0FFYixJQUFJLElBQUlsRyxFQUFJLEVBQUdBLEVBQUl5RyxFQUFXekcsSUFBSyxDQUNoQyxJQUFJTSxFQUFNLElBQUkrRSxFQUFRL0gsR0FBTXVJLEdBRTVCLElBQUksSUFBSWEsRUFBSSxFQUFHQSxFQUFJYixFQUFXYSxJQUMzQnBHLEVBQUlvRyxHQUFLNUcsRUFBS3hFLEVBQU0ySyxFQUFhUyxFQUFJMUcsRUFBSTZGLEdBRTVDSyxFQUFPRyxLQUFLL0YsRUFDZixDQUVBb0YsRUFBSVEsT0FBU0EsRUFRekIsQ0FDSixDQWdOSVMsQ0FBa0JwRSxFQUFRaEQsR0E3TTlCLFNBQThCZ0QsRUFBUWtELEdBQ2xDLElBQUksTUFBTUMsS0FBT0QsRUFDYixPQUFPQyxFQUFJcEksTUFHUCxLQUFLa0gsRUFDTCxLQUFLUyxFQUNMLEtBQUtDLEVBQ0QsTUFHSixLQUFLUixFQUNMLEtBQUtELEVBQ0wsS0FBS0ksRUFDTCxLQUFLQyxFQUNMLEtBQUtILEVBQ0wsS0FBS0MsRUFDTCxLQUFLRyxFQUNMLEtBQUtDLEVBQ0R6QyxFQUFPcUUsTUFBTWxCLEVBQUlDLEtBQUtySyxLQU90QyxDQXNMSXVMLENBQXFCdEUsRUFBUWhELEdBSXRCeUQsQ0FDWCxDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZWRhLy4vd2FzbS9FREFGb3JXZWJXb3JrZXIuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vd2FzbS9jYWxsV2FzbUZvcldlYldvcmtlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmV4cG9ydCB2YXIgZXhwb3J0RURBID0gKCgpID0+IHtcbiAgdmFyIF9zY3JpcHREaXIgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgPyBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyA6IHVuZGVmaW5lZDtcbiAgXG4gIHJldHVybiAoXG5mdW5jdGlvbihleHBvcnRFREEpIHtcbiAgZXhwb3J0RURBID0gZXhwb3J0RURBIHx8IHt9O1xuXG52YXIgTW9kdWxlPXR5cGVvZiBleHBvcnRFREEhPVwidW5kZWZpbmVkXCI/ZXhwb3J0RURBOnt9O3ZhciByZWFkeVByb21pc2VSZXNvbHZlLHJlYWR5UHJvbWlzZVJlamVjdDtNb2R1bGVbXCJyZWFkeVwiXT1uZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLHJlamVjdCl7cmVhZHlQcm9taXNlUmVzb2x2ZT1yZXNvbHZlO3JlYWR5UHJvbWlzZVJlamVjdD1yZWplY3R9KTt2YXIgbW9kdWxlT3ZlcnJpZGVzPU9iamVjdC5hc3NpZ24oe30sTW9kdWxlKTt2YXIgYXJndW1lbnRzXz1bXTt2YXIgdGhpc1Byb2dyYW09XCIuL3RoaXMucHJvZ3JhbVwiO3ZhciBxdWl0Xz0oc3RhdHVzLHRvVGhyb3cpPT57dGhyb3cgdG9UaHJvd307dmFyIEVOVklST05NRU5UX0lTX1dFQj10eXBlb2Ygd2luZG93PT1cIm9iamVjdFwiO3ZhciBFTlZJUk9OTUVOVF9JU19XT1JLRVI9dHlwZW9mIGltcG9ydFNjcmlwdHM9PVwiZnVuY3Rpb25cIjt2YXIgRU5WSVJPTk1FTlRfSVNfTk9ERT10eXBlb2YgcHJvY2Vzcz09XCJvYmplY3RcIiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM9PVwib2JqZWN0XCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGU9PVwic3RyaW5nXCI7dmFyIHNjcmlwdERpcmVjdG9yeT1cIlwiO2Z1bmN0aW9uIGxvY2F0ZUZpbGUocGF0aCl7aWYoTW9kdWxlW1wibG9jYXRlRmlsZVwiXSl7cmV0dXJuIE1vZHVsZVtcImxvY2F0ZUZpbGVcIl0ocGF0aCxzY3JpcHREaXJlY3RvcnkpfXJldHVybiBzY3JpcHREaXJlY3RvcnkrcGF0aH12YXIgcmVhZF8scmVhZEFzeW5jLHJlYWRCaW5hcnksc2V0V2luZG93VGl0bGU7aWYoRU5WSVJPTk1FTlRfSVNfV0VCfHxFTlZJUk9OTUVOVF9JU19XT1JLRVIpe2lmKEVOVklST05NRU5UX0lTX1dPUktFUil7c2NyaXB0RGlyZWN0b3J5PXNlbGYubG9jYXRpb24uaHJlZn1lbHNlIGlmKHR5cGVvZiBkb2N1bWVudCE9XCJ1bmRlZmluZWRcIiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCl7c2NyaXB0RGlyZWN0b3J5PWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjfWlmKF9zY3JpcHREaXIpe3NjcmlwdERpcmVjdG9yeT1fc2NyaXB0RGlyfWlmKHNjcmlwdERpcmVjdG9yeS5pbmRleE9mKFwiYmxvYjpcIikhPT0wKXtzY3JpcHREaXJlY3Rvcnk9c2NyaXB0RGlyZWN0b3J5LnN1YnN0cigwLHNjcmlwdERpcmVjdG9yeS5yZXBsYWNlKC9bPyNdLiovLFwiXCIpLmxhc3RJbmRleE9mKFwiL1wiKSsxKX1lbHNle3NjcmlwdERpcmVjdG9yeT1cIlwifXtyZWFkXz11cmw9Pnt2YXIgeGhyPW5ldyBYTUxIdHRwUmVxdWVzdDt4aHIub3BlbihcIkdFVFwiLHVybCxmYWxzZSk7eGhyLnNlbmQobnVsbCk7cmV0dXJuIHhoci5yZXNwb25zZVRleHR9O2lmKEVOVklST05NRU5UX0lTX1dPUktFUil7cmVhZEJpbmFyeT11cmw9Pnt2YXIgeGhyPW5ldyBYTUxIdHRwUmVxdWVzdDt4aHIub3BlbihcIkdFVFwiLHVybCxmYWxzZSk7eGhyLnJlc3BvbnNlVHlwZT1cImFycmF5YnVmZmVyXCI7eGhyLnNlbmQobnVsbCk7cmV0dXJuIG5ldyBVaW50OEFycmF5KHhoci5yZXNwb25zZSl9fXJlYWRBc3luYz0odXJsLG9ubG9hZCxvbmVycm9yKT0+e3ZhciB4aHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3hoci5vcGVuKFwiR0VUXCIsdXJsLHRydWUpO3hoci5yZXNwb25zZVR5cGU9XCJhcnJheWJ1ZmZlclwiO3hoci5vbmxvYWQ9KCk9PntpZih4aHIuc3RhdHVzPT0yMDB8fHhoci5zdGF0dXM9PTAmJnhoci5yZXNwb25zZSl7b25sb2FkKHhoci5yZXNwb25zZSk7cmV0dXJufW9uZXJyb3IoKX07eGhyLm9uZXJyb3I9b25lcnJvcjt4aHIuc2VuZChudWxsKX19c2V0V2luZG93VGl0bGU9dGl0bGU9PmRvY3VtZW50LnRpdGxlPXRpdGxlfWVsc2V7fXZhciBvdXQ9TW9kdWxlW1wicHJpbnRcIl18fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7dmFyIGVycj1Nb2R1bGVbXCJwcmludEVyclwiXXx8Y29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7T2JqZWN0LmFzc2lnbihNb2R1bGUsbW9kdWxlT3ZlcnJpZGVzKTttb2R1bGVPdmVycmlkZXM9bnVsbDtpZihNb2R1bGVbXCJhcmd1bWVudHNcIl0pYXJndW1lbnRzXz1Nb2R1bGVbXCJhcmd1bWVudHNcIl07aWYoTW9kdWxlW1widGhpc1Byb2dyYW1cIl0pdGhpc1Byb2dyYW09TW9kdWxlW1widGhpc1Byb2dyYW1cIl07aWYoTW9kdWxlW1wicXVpdFwiXSlxdWl0Xz1Nb2R1bGVbXCJxdWl0XCJdO3ZhciB3YXNtQmluYXJ5O2lmKE1vZHVsZVtcIndhc21CaW5hcnlcIl0pd2FzbUJpbmFyeT1Nb2R1bGVbXCJ3YXNtQmluYXJ5XCJdO3ZhciBub0V4aXRSdW50aW1lPU1vZHVsZVtcIm5vRXhpdFJ1bnRpbWVcIl18fHRydWU7aWYodHlwZW9mIFdlYkFzc2VtYmx5IT1cIm9iamVjdFwiKXthYm9ydChcIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWRcIil9dmFyIHdhc21NZW1vcnk7dmFyIEFCT1JUPWZhbHNlO3ZhciBFWElUU1RBVFVTO3ZhciBVVEY4RGVjb2Rlcj10eXBlb2YgVGV4dERlY29kZXIhPVwidW5kZWZpbmVkXCI/bmV3IFRleHREZWNvZGVyKFwidXRmOFwiKTp1bmRlZmluZWQ7ZnVuY3Rpb24gVVRGOEFycmF5VG9TdHJpbmcoaGVhcE9yQXJyYXksaWR4LG1heEJ5dGVzVG9SZWFkKXt2YXIgZW5kSWR4PWlkeCttYXhCeXRlc1RvUmVhZDt2YXIgZW5kUHRyPWlkeDt3aGlsZShoZWFwT3JBcnJheVtlbmRQdHJdJiYhKGVuZFB0cj49ZW5kSWR4KSkrK2VuZFB0cjtpZihlbmRQdHItaWR4PjE2JiZoZWFwT3JBcnJheS5idWZmZXImJlVURjhEZWNvZGVyKXtyZXR1cm4gVVRGOERlY29kZXIuZGVjb2RlKGhlYXBPckFycmF5LnN1YmFycmF5KGlkeCxlbmRQdHIpKX12YXIgc3RyPVwiXCI7d2hpbGUoaWR4PGVuZFB0cil7dmFyIHUwPWhlYXBPckFycmF5W2lkeCsrXTtpZighKHUwJjEyOCkpe3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7Y29udGludWV9dmFyIHUxPWhlYXBPckFycmF5W2lkeCsrXSY2MztpZigodTAmMjI0KT09MTkyKXtzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoKHUwJjMxKTw8Nnx1MSk7Y29udGludWV9dmFyIHUyPWhlYXBPckFycmF5W2lkeCsrXSY2MztpZigodTAmMjQwKT09MjI0KXt1MD0odTAmMTUpPDwxMnx1MTw8Nnx1Mn1lbHNle3UwPSh1MCY3KTw8MTh8dTE8PDEyfHUyPDw2fGhlYXBPckFycmF5W2lkeCsrXSY2M31pZih1MDw2NTUzNil7c3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHUwKX1lbHNle3ZhciBjaD11MC02NTUzNjtzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8Y2g+PjEwLDU2MzIwfGNoJjEwMjMpfX1yZXR1cm4gc3RyfWZ1bmN0aW9uIFVURjhUb1N0cmluZyhwdHIsbWF4Qnl0ZXNUb1JlYWQpe3JldHVybiBwdHI/VVRGOEFycmF5VG9TdHJpbmcoSEVBUFU4LHB0cixtYXhCeXRlc1RvUmVhZCk6XCJcIn1mdW5jdGlvbiBzdHJpbmdUb1VURjhBcnJheShzdHIsaGVhcCxvdXRJZHgsbWF4Qnl0ZXNUb1dyaXRlKXtpZighKG1heEJ5dGVzVG9Xcml0ZT4wKSlyZXR1cm4gMDt2YXIgc3RhcnRJZHg9b3V0SWR4O3ZhciBlbmRJZHg9b3V0SWR4K21heEJ5dGVzVG9Xcml0ZS0xO2Zvcih2YXIgaT0wO2k8c3RyLmxlbmd0aDsrK2kpe3ZhciB1PXN0ci5jaGFyQ29kZUF0KGkpO2lmKHU+PTU1Mjk2JiZ1PD01NzM0Myl7dmFyIHUxPXN0ci5jaGFyQ29kZUF0KCsraSk7dT02NTUzNisoKHUmMTAyMyk8PDEwKXx1MSYxMDIzfWlmKHU8PTEyNyl7aWYob3V0SWR4Pj1lbmRJZHgpYnJlYWs7aGVhcFtvdXRJZHgrK109dX1lbHNlIGlmKHU8PTIwNDcpe2lmKG91dElkeCsxPj1lbmRJZHgpYnJlYWs7aGVhcFtvdXRJZHgrK109MTkyfHU+PjY7aGVhcFtvdXRJZHgrK109MTI4fHUmNjN9ZWxzZSBpZih1PD02NTUzNSl7aWYob3V0SWR4KzI+PWVuZElkeClicmVhaztoZWFwW291dElkeCsrXT0yMjR8dT4+MTI7aGVhcFtvdXRJZHgrK109MTI4fHU+PjYmNjM7aGVhcFtvdXRJZHgrK109MTI4fHUmNjN9ZWxzZXtpZihvdXRJZHgrMz49ZW5kSWR4KWJyZWFrO2hlYXBbb3V0SWR4KytdPTI0MHx1Pj4xODtoZWFwW291dElkeCsrXT0xMjh8dT4+MTImNjM7aGVhcFtvdXRJZHgrK109MTI4fHU+PjYmNjM7aGVhcFtvdXRJZHgrK109MTI4fHUmNjN9fWhlYXBbb3V0SWR4XT0wO3JldHVybiBvdXRJZHgtc3RhcnRJZHh9ZnVuY3Rpb24gc3RyaW5nVG9VVEY4KHN0cixvdXRQdHIsbWF4Qnl0ZXNUb1dyaXRlKXtyZXR1cm4gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLEhFQVBVOCxvdXRQdHIsbWF4Qnl0ZXNUb1dyaXRlKX12YXIgYnVmZmVyLEhFQVA4LEhFQVBVOCxIRUFQMTYsSEVBUFUxNixIRUFQMzIsSEVBUFUzMixIRUFQRjMyLEhFQVBGNjQ7ZnVuY3Rpb24gdXBkYXRlR2xvYmFsQnVmZmVyQW5kVmlld3MoYnVmKXtidWZmZXI9YnVmO01vZHVsZVtcIkhFQVA4XCJdPUhFQVA4PW5ldyBJbnQ4QXJyYXkoYnVmKTtNb2R1bGVbXCJIRUFQMTZcIl09SEVBUDE2PW5ldyBJbnQxNkFycmF5KGJ1Zik7TW9kdWxlW1wiSEVBUDMyXCJdPUhFQVAzMj1uZXcgSW50MzJBcnJheShidWYpO01vZHVsZVtcIkhFQVBVOFwiXT1IRUFQVTg9bmV3IFVpbnQ4QXJyYXkoYnVmKTtNb2R1bGVbXCJIRUFQVTE2XCJdPUhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KGJ1Zik7TW9kdWxlW1wiSEVBUFUzMlwiXT1IRUFQVTMyPW5ldyBVaW50MzJBcnJheShidWYpO01vZHVsZVtcIkhFQVBGMzJcIl09SEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KGJ1Zik7TW9kdWxlW1wiSEVBUEY2NFwiXT1IRUFQRjY0PW5ldyBGbG9hdDY0QXJyYXkoYnVmKX12YXIgSU5JVElBTF9NRU1PUlk9TW9kdWxlW1wiSU5JVElBTF9NRU1PUllcIl18fDI2ODQzNTQ1Njt2YXIgd2FzbVRhYmxlO3ZhciBfX0FUUFJFUlVOX189W107dmFyIF9fQVRJTklUX189W107dmFyIF9fQVRQT1NUUlVOX189W107dmFyIHJ1bnRpbWVJbml0aWFsaXplZD1mYWxzZTtmdW5jdGlvbiBwcmVSdW4oKXtpZihNb2R1bGVbXCJwcmVSdW5cIl0pe2lmKHR5cGVvZiBNb2R1bGVbXCJwcmVSdW5cIl09PVwiZnVuY3Rpb25cIilNb2R1bGVbXCJwcmVSdW5cIl09W01vZHVsZVtcInByZVJ1blwiXV07d2hpbGUoTW9kdWxlW1wicHJlUnVuXCJdLmxlbmd0aCl7YWRkT25QcmVSdW4oTW9kdWxlW1wicHJlUnVuXCJdLnNoaWZ0KCkpfX1jYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUFJFUlVOX18pfWZ1bmN0aW9uIGluaXRSdW50aW1lKCl7cnVudGltZUluaXRpYWxpemVkPXRydWU7Y2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVElOSVRfXyl9ZnVuY3Rpb24gcG9zdFJ1bigpe2lmKE1vZHVsZVtcInBvc3RSdW5cIl0pe2lmKHR5cGVvZiBNb2R1bGVbXCJwb3N0UnVuXCJdPT1cImZ1bmN0aW9uXCIpTW9kdWxlW1wicG9zdFJ1blwiXT1bTW9kdWxlW1wicG9zdFJ1blwiXV07d2hpbGUoTW9kdWxlW1wicG9zdFJ1blwiXS5sZW5ndGgpe2FkZE9uUG9zdFJ1bihNb2R1bGVbXCJwb3N0UnVuXCJdLnNoaWZ0KCkpfX1jYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUE9TVFJVTl9fKX1mdW5jdGlvbiBhZGRPblByZVJ1bihjYil7X19BVFBSRVJVTl9fLnVuc2hpZnQoY2IpfWZ1bmN0aW9uIGFkZE9uSW5pdChjYil7X19BVElOSVRfXy51bnNoaWZ0KGNiKX1mdW5jdGlvbiBhZGRPblBvc3RSdW4oY2Ipe19fQVRQT1NUUlVOX18udW5zaGlmdChjYil9dmFyIHJ1bkRlcGVuZGVuY2llcz0wO3ZhciBydW5EZXBlbmRlbmN5V2F0Y2hlcj1udWxsO3ZhciBkZXBlbmRlbmNpZXNGdWxmaWxsZWQ9bnVsbDtmdW5jdGlvbiBhZGRSdW5EZXBlbmRlbmN5KGlkKXtydW5EZXBlbmRlbmNpZXMrKztpZihNb2R1bGVbXCJtb25pdG9yUnVuRGVwZW5kZW5jaWVzXCJdKXtNb2R1bGVbXCJtb25pdG9yUnVuRGVwZW5kZW5jaWVzXCJdKHJ1bkRlcGVuZGVuY2llcyl9fWZ1bmN0aW9uIHJlbW92ZVJ1bkRlcGVuZGVuY3koaWQpe3J1bkRlcGVuZGVuY2llcy0tO2lmKE1vZHVsZVtcIm1vbml0b3JSdW5EZXBlbmRlbmNpZXNcIl0pe01vZHVsZVtcIm1vbml0b3JSdW5EZXBlbmRlbmNpZXNcIl0ocnVuRGVwZW5kZW5jaWVzKX1pZihydW5EZXBlbmRlbmNpZXM9PTApe2lmKHJ1bkRlcGVuZGVuY3lXYXRjaGVyIT09bnVsbCl7Y2xlYXJJbnRlcnZhbChydW5EZXBlbmRlbmN5V2F0Y2hlcik7cnVuRGVwZW5kZW5jeVdhdGNoZXI9bnVsbH1pZihkZXBlbmRlbmNpZXNGdWxmaWxsZWQpe3ZhciBjYWxsYmFjaz1kZXBlbmRlbmNpZXNGdWxmaWxsZWQ7ZGVwZW5kZW5jaWVzRnVsZmlsbGVkPW51bGw7Y2FsbGJhY2soKX19fWZ1bmN0aW9uIGFib3J0KHdoYXQpe2lmKE1vZHVsZVtcIm9uQWJvcnRcIl0pe01vZHVsZVtcIm9uQWJvcnRcIl0od2hhdCl9d2hhdD1cIkFib3J0ZWQoXCIrd2hhdCtcIilcIjtlcnIod2hhdCk7QUJPUlQ9dHJ1ZTtFWElUU1RBVFVTPTE7d2hhdCs9XCIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uXCI7dmFyIGU9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcih3aGF0KTtyZWFkeVByb21pc2VSZWplY3QoZSk7dGhyb3cgZX12YXIgZGF0YVVSSVByZWZpeD1cImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCxcIjtmdW5jdGlvbiBpc0RhdGFVUkkoZmlsZW5hbWUpe3JldHVybiBmaWxlbmFtZS5zdGFydHNXaXRoKGRhdGFVUklQcmVmaXgpfXZhciB3YXNtQmluYXJ5RmlsZTt3YXNtQmluYXJ5RmlsZT1cIkVEQS53YXNtXCI7aWYoIWlzRGF0YVVSSSh3YXNtQmluYXJ5RmlsZSkpe3dhc21CaW5hcnlGaWxlPWxvY2F0ZUZpbGUod2FzbUJpbmFyeUZpbGUpfWZ1bmN0aW9uIGdldEJpbmFyeShmaWxlKXt0cnl7aWYoZmlsZT09d2FzbUJpbmFyeUZpbGUmJndhc21CaW5hcnkpe3JldHVybiBuZXcgVWludDhBcnJheSh3YXNtQmluYXJ5KX1pZihyZWFkQmluYXJ5KXtyZXR1cm4gcmVhZEJpbmFyeShmaWxlKX10aHJvd1wiYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWRcIn1jYXRjaChlcnIpe2Fib3J0KGVycil9fWZ1bmN0aW9uIGdldEJpbmFyeVByb21pc2UoKXtpZighd2FzbUJpbmFyeSYmKEVOVklST05NRU5UX0lTX1dFQnx8RU5WSVJPTk1FTlRfSVNfV09SS0VSKSl7aWYodHlwZW9mIGZldGNoPT1cImZ1bmN0aW9uXCIpe3JldHVybiBmZXRjaChuZXcgVVJMKCcuLi93YXNtL0VEQS53YXNtJywgaW1wb3J0Lm1ldGEudXJsKSkudGhlbihmdW5jdGlvbihyZXNwb25zZSl7aWYoIXJlc3BvbnNlW1wib2tcIl0pe3Rocm93XCJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICdcIit3YXNtQmluYXJ5RmlsZStcIidcIn1yZXR1cm4gcmVzcG9uc2VbXCJhcnJheUJ1ZmZlclwiXSgpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gZ2V0QmluYXJ5KHdhc21CaW5hcnlGaWxlKX0pfX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBnZXRCaW5hcnkod2FzbUJpbmFyeUZpbGUpfSl9ZnVuY3Rpb24gY3JlYXRlV2FzbSgpe3ZhciBpbmZvPXtcImFcIjphc21MaWJyYXJ5QXJnfTtmdW5jdGlvbiByZWNlaXZlSW5zdGFuY2UoaW5zdGFuY2UsbW9kdWxlKXt2YXIgZXhwb3J0cz1pbnN0YW5jZS5leHBvcnRzO01vZHVsZVtcImFzbVwiXT1leHBvcnRzO3dhc21NZW1vcnk9TW9kdWxlW1wiYXNtXCJdW1wiZVwiXTt1cGRhdGVHbG9iYWxCdWZmZXJBbmRWaWV3cyh3YXNtTWVtb3J5LmJ1ZmZlcik7d2FzbVRhYmxlPU1vZHVsZVtcImFzbVwiXVtcImlcIl07YWRkT25Jbml0KE1vZHVsZVtcImFzbVwiXVtcImZcIl0pO3JlbW92ZVJ1bkRlcGVuZGVuY3koXCJ3YXNtLWluc3RhbnRpYXRlXCIpfWFkZFJ1bkRlcGVuZGVuY3koXCJ3YXNtLWluc3RhbnRpYXRlXCIpO2Z1bmN0aW9uIHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KHJlc3VsdCl7cmVjZWl2ZUluc3RhbmNlKHJlc3VsdFtcImluc3RhbmNlXCJdKX1mdW5jdGlvbiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKHJlY2VpdmVyKXtyZXR1cm4gZ2V0QmluYXJ5UHJvbWlzZSgpLnRoZW4oZnVuY3Rpb24oYmluYXJ5KXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoYmluYXJ5LGluZm8pfSkudGhlbihmdW5jdGlvbihpbnN0YW5jZSl7cmV0dXJuIGluc3RhbmNlfSkudGhlbihyZWNlaXZlcixmdW5jdGlvbihyZWFzb24pe2VycihcImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206IFwiK3JlYXNvbik7YWJvcnQocmVhc29uKX0pfWZ1bmN0aW9uIGluc3RhbnRpYXRlQXN5bmMoKXtpZighd2FzbUJpbmFyeSYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT1cImZ1bmN0aW9uXCImJiFpc0RhdGFVUkkod2FzbUJpbmFyeUZpbGUpJiZ0eXBlb2YgZmV0Y2g9PVwiZnVuY3Rpb25cIil7cmV0dXJuIGZldGNoKG5ldyBVUkwoJy4uL3dhc20vRURBLndhc20nLCBpbXBvcnQubWV0YS51cmwpKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKXt2YXIgcmVzdWx0PVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHJlc3BvbnNlLGluZm8pO3JldHVybiByZXN1bHQudGhlbihyZWNlaXZlSW5zdGFudGlhdGlvblJlc3VsdCxmdW5jdGlvbihyZWFzb24pe2VycihcIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiBcIityZWFzb24pO2VycihcImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uXCIpO3JldHVybiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KX0pfSl9ZWxzZXtyZXR1cm4gaW5zdGFudGlhdGVBcnJheUJ1ZmZlcihyZWNlaXZlSW5zdGFudGlhdGlvblJlc3VsdCl9fWlmKE1vZHVsZVtcImluc3RhbnRpYXRlV2FzbVwiXSl7dHJ5e3ZhciBleHBvcnRzPU1vZHVsZVtcImluc3RhbnRpYXRlV2FzbVwiXShpbmZvLHJlY2VpdmVJbnN0YW5jZSk7cmV0dXJuIGV4cG9ydHN9Y2F0Y2goZSl7ZXJyKFwiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogXCIrZSk7cmVhZHlQcm9taXNlUmVqZWN0KGUpfX1pbnN0YW50aWF0ZUFzeW5jKCkuY2F0Y2gocmVhZHlQcm9taXNlUmVqZWN0KTtyZXR1cm57fX1mdW5jdGlvbiBjYWxsUnVudGltZUNhbGxiYWNrcyhjYWxsYmFja3Mpe3doaWxlKGNhbGxiYWNrcy5sZW5ndGg+MCl7Y2FsbGJhY2tzLnNoaWZ0KCkoTW9kdWxlKX19ZnVuY3Rpb24gX19fYXNzZXJ0X2ZhaWwoY29uZGl0aW9uLGZpbGVuYW1lLGxpbmUsZnVuYyl7YWJvcnQoXCJBc3NlcnRpb24gZmFpbGVkOiBcIitVVEY4VG9TdHJpbmcoY29uZGl0aW9uKStcIiwgYXQ6IFwiK1tmaWxlbmFtZT9VVEY4VG9TdHJpbmcoZmlsZW5hbWUpOlwidW5rbm93biBmaWxlbmFtZVwiLGxpbmUsZnVuYz9VVEY4VG9TdHJpbmcoZnVuYyk6XCJ1bmtub3duIGZ1bmN0aW9uXCJdKX1mdW5jdGlvbiBFeGNlcHRpb25JbmZvKGV4Y1B0cil7dGhpcy5leGNQdHI9ZXhjUHRyO3RoaXMucHRyPWV4Y1B0ci0yNDt0aGlzLnNldF90eXBlPWZ1bmN0aW9uKHR5cGUpe0hFQVBVMzJbdGhpcy5wdHIrND4+Ml09dHlwZX07dGhpcy5nZXRfdHlwZT1mdW5jdGlvbigpe3JldHVybiBIRUFQVTMyW3RoaXMucHRyKzQ+PjJdfTt0aGlzLnNldF9kZXN0cnVjdG9yPWZ1bmN0aW9uKGRlc3RydWN0b3Ipe0hFQVBVMzJbdGhpcy5wdHIrOD4+Ml09ZGVzdHJ1Y3Rvcn07dGhpcy5nZXRfZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBIRUFQVTMyW3RoaXMucHRyKzg+PjJdfTt0aGlzLnNldF9yZWZjb3VudD1mdW5jdGlvbihyZWZjb3VudCl7SEVBUDMyW3RoaXMucHRyPj4yXT1yZWZjb3VudH07dGhpcy5zZXRfY2F1Z2h0PWZ1bmN0aW9uKGNhdWdodCl7Y2F1Z2h0PWNhdWdodD8xOjA7SEVBUDhbdGhpcy5wdHIrMTI+PjBdPWNhdWdodH07dGhpcy5nZXRfY2F1Z2h0PWZ1bmN0aW9uKCl7cmV0dXJuIEhFQVA4W3RoaXMucHRyKzEyPj4wXSE9MH07dGhpcy5zZXRfcmV0aHJvd249ZnVuY3Rpb24ocmV0aHJvd24pe3JldGhyb3duPXJldGhyb3duPzE6MDtIRUFQOFt0aGlzLnB0cisxMz4+MF09cmV0aHJvd259O3RoaXMuZ2V0X3JldGhyb3duPWZ1bmN0aW9uKCl7cmV0dXJuIEhFQVA4W3RoaXMucHRyKzEzPj4wXSE9MH07dGhpcy5pbml0PWZ1bmN0aW9uKHR5cGUsZGVzdHJ1Y3Rvcil7dGhpcy5zZXRfYWRqdXN0ZWRfcHRyKDApO3RoaXMuc2V0X3R5cGUodHlwZSk7dGhpcy5zZXRfZGVzdHJ1Y3RvcihkZXN0cnVjdG9yKTt0aGlzLnNldF9yZWZjb3VudCgwKTt0aGlzLnNldF9jYXVnaHQoZmFsc2UpO3RoaXMuc2V0X3JldGhyb3duKGZhbHNlKX07dGhpcy5hZGRfcmVmPWZ1bmN0aW9uKCl7dmFyIHZhbHVlPUhFQVAzMlt0aGlzLnB0cj4+Ml07SEVBUDMyW3RoaXMucHRyPj4yXT12YWx1ZSsxfTt0aGlzLnJlbGVhc2VfcmVmPWZ1bmN0aW9uKCl7dmFyIHByZXY9SEVBUDMyW3RoaXMucHRyPj4yXTtIRUFQMzJbdGhpcy5wdHI+PjJdPXByZXYtMTtyZXR1cm4gcHJldj09PTF9O3RoaXMuc2V0X2FkanVzdGVkX3B0cj1mdW5jdGlvbihhZGp1c3RlZFB0cil7SEVBUFUzMlt0aGlzLnB0cisxNj4+Ml09YWRqdXN0ZWRQdHJ9O3RoaXMuZ2V0X2FkanVzdGVkX3B0cj1mdW5jdGlvbigpe3JldHVybiBIRUFQVTMyW3RoaXMucHRyKzE2Pj4yXX07dGhpcy5nZXRfZXhjZXB0aW9uX3B0cj1mdW5jdGlvbigpe3ZhciBpc1BvaW50ZXI9X19fY3hhX2lzX3BvaW50ZXJfdHlwZSh0aGlzLmdldF90eXBlKCkpO2lmKGlzUG9pbnRlcil7cmV0dXJuIEhFQVBVMzJbdGhpcy5leGNQdHI+PjJdfXZhciBhZGp1c3RlZD10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtpZihhZGp1c3RlZCE9PTApcmV0dXJuIGFkanVzdGVkO3JldHVybiB0aGlzLmV4Y1B0cn19dmFyIGV4Y2VwdGlvbkxhc3Q9MDt2YXIgdW5jYXVnaHRFeGNlcHRpb25Db3VudD0wO2Z1bmN0aW9uIF9fX2N4YV90aHJvdyhwdHIsdHlwZSxkZXN0cnVjdG9yKXt2YXIgaW5mbz1uZXcgRXhjZXB0aW9uSW5mbyhwdHIpO2luZm8uaW5pdCh0eXBlLGRlc3RydWN0b3IpO2V4Y2VwdGlvbkxhc3Q9cHRyO3VuY2F1Z2h0RXhjZXB0aW9uQ291bnQrKzt0aHJvdyBwdHJ9ZnVuY3Rpb24gX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyhkZXN0LHNyYyxudW0pe0hFQVBVOC5jb3B5V2l0aGluKGRlc3Qsc3JjLHNyYytudW0pfWZ1bmN0aW9uIGdldEhlYXBNYXgoKXtyZXR1cm4gMjE0NzQ4MzY0OH1mdW5jdGlvbiBlbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyKHNpemUpe3RyeXt3YXNtTWVtb3J5Lmdyb3coc2l6ZS1idWZmZXIuYnl0ZUxlbmd0aCs2NTUzNT4+PjE2KTt1cGRhdGVHbG9iYWxCdWZmZXJBbmRWaWV3cyh3YXNtTWVtb3J5LmJ1ZmZlcik7cmV0dXJuIDF9Y2F0Y2goZSl7fX1mdW5jdGlvbiBfZW1zY3JpcHRlbl9yZXNpemVfaGVhcChyZXF1ZXN0ZWRTaXplKXt2YXIgb2xkU2l6ZT1IRUFQVTgubGVuZ3RoO3JlcXVlc3RlZFNpemU9cmVxdWVzdGVkU2l6ZT4+PjA7dmFyIG1heEhlYXBTaXplPWdldEhlYXBNYXgoKTtpZihyZXF1ZXN0ZWRTaXplPm1heEhlYXBTaXplKXtyZXR1cm4gZmFsc2V9bGV0IGFsaWduVXA9KHgsbXVsdGlwbGUpPT54KyhtdWx0aXBsZS14JW11bHRpcGxlKSVtdWx0aXBsZTtmb3IodmFyIGN1dERvd249MTtjdXREb3duPD00O2N1dERvd24qPTIpe3ZhciBvdmVyR3Jvd25IZWFwU2l6ZT1vbGRTaXplKigxKy4yL2N1dERvd24pO292ZXJHcm93bkhlYXBTaXplPU1hdGgubWluKG92ZXJHcm93bkhlYXBTaXplLHJlcXVlc3RlZFNpemUrMTAwNjYzMjk2KTt2YXIgbmV3U2l6ZT1NYXRoLm1pbihtYXhIZWFwU2l6ZSxhbGlnblVwKE1hdGgubWF4KHJlcXVlc3RlZFNpemUsb3Zlckdyb3duSGVhcFNpemUpLDY1NTM2KSk7dmFyIHJlcGxhY2VtZW50PWVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIobmV3U2l6ZSk7aWYocmVwbGFjZW1lbnQpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9ZnVuY3Rpb24gZ2V0Q0Z1bmMoaWRlbnQpe3ZhciBmdW5jPU1vZHVsZVtcIl9cIitpZGVudF07cmV0dXJuIGZ1bmN9ZnVuY3Rpb24gd3JpdGVBcnJheVRvTWVtb3J5KGFycmF5LGJ1ZmZlcil7SEVBUDguc2V0KGFycmF5LGJ1ZmZlcil9ZnVuY3Rpb24gY2NhbGwoaWRlbnQscmV0dXJuVHlwZSxhcmdUeXBlcyxhcmdzLG9wdHMpe3ZhciB0b0M9e1wic3RyaW5nXCI6c3RyPT57dmFyIHJldD0wO2lmKHN0ciE9PW51bGwmJnN0ciE9PXVuZGVmaW5lZCYmc3RyIT09MCl7dmFyIGxlbj0oc3RyLmxlbmd0aDw8MikrMTtyZXQ9c3RhY2tBbGxvYyhsZW4pO3N0cmluZ1RvVVRGOChzdHIscmV0LGxlbil9cmV0dXJuIHJldH0sXCJhcnJheVwiOmFycj0+e3ZhciByZXQ9c3RhY2tBbGxvYyhhcnIubGVuZ3RoKTt3cml0ZUFycmF5VG9NZW1vcnkoYXJyLHJldCk7cmV0dXJuIHJldH19O2Z1bmN0aW9uIGNvbnZlcnRSZXR1cm5WYWx1ZShyZXQpe2lmKHJldHVyblR5cGU9PT1cInN0cmluZ1wiKXtyZXR1cm4gVVRGOFRvU3RyaW5nKHJldCl9aWYocmV0dXJuVHlwZT09PVwiYm9vbGVhblwiKXJldHVybiBCb29sZWFuKHJldCk7cmV0dXJuIHJldH12YXIgZnVuYz1nZXRDRnVuYyhpZGVudCk7dmFyIGNBcmdzPVtdO3ZhciBzdGFjaz0wO2lmKGFyZ3Mpe2Zvcih2YXIgaT0wO2k8YXJncy5sZW5ndGg7aSsrKXt2YXIgY29udmVydGVyPXRvQ1thcmdUeXBlc1tpXV07aWYoY29udmVydGVyKXtpZihzdGFjaz09PTApc3RhY2s9c3RhY2tTYXZlKCk7Y0FyZ3NbaV09Y29udmVydGVyKGFyZ3NbaV0pfWVsc2V7Y0FyZ3NbaV09YXJnc1tpXX19fXZhciByZXQ9ZnVuYy5hcHBseShudWxsLGNBcmdzKTtmdW5jdGlvbiBvbkRvbmUocmV0KXtpZihzdGFjayE9PTApc3RhY2tSZXN0b3JlKHN0YWNrKTtyZXR1cm4gY29udmVydFJldHVyblZhbHVlKHJldCl9cmV0PW9uRG9uZShyZXQpO3JldHVybiByZXR9ZnVuY3Rpb24gY3dyYXAoaWRlbnQscmV0dXJuVHlwZSxhcmdUeXBlcyxvcHRzKXthcmdUeXBlcz1hcmdUeXBlc3x8W107dmFyIG51bWVyaWNBcmdzPWFyZ1R5cGVzLmV2ZXJ5KHR5cGU9PnR5cGU9PT1cIm51bWJlclwifHx0eXBlPT09XCJib29sZWFuXCIpO3ZhciBudW1lcmljUmV0PXJldHVyblR5cGUhPT1cInN0cmluZ1wiO2lmKG51bWVyaWNSZXQmJm51bWVyaWNBcmdzJiYhb3B0cyl7cmV0dXJuIGdldENGdW5jKGlkZW50KX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gY2NhbGwoaWRlbnQscmV0dXJuVHlwZSxhcmdUeXBlcyxhcmd1bWVudHMsb3B0cyl9fXZhciBhc21MaWJyYXJ5QXJnPXtcImFcIjpfX19hc3NlcnRfZmFpbCxcImJcIjpfX19jeGFfdGhyb3csXCJkXCI6X2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyxcImNcIjpfZW1zY3JpcHRlbl9yZXNpemVfaGVhcH07dmFyIGFzbT1jcmVhdGVXYXNtKCk7dmFyIF9fX3dhc21fY2FsbF9jdG9ycz1Nb2R1bGVbXCJfX193YXNtX2NhbGxfY3RvcnNcIl09ZnVuY3Rpb24oKXtyZXR1cm4oX19fd2FzbV9jYWxsX2N0b3JzPU1vZHVsZVtcIl9fX3dhc21fY2FsbF9jdG9yc1wiXT1Nb2R1bGVbXCJhc21cIl1bXCJmXCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXM9TW9kdWxlW1wiX3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzXCJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpcz1Nb2R1bGVbXCJfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNcIl09TW9kdWxlW1wiYXNtXCJdW1wiZ1wiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgX2Vycm9yPU1vZHVsZVtcIl9lcnJvclwiXT1mdW5jdGlvbigpe3JldHVybihfZXJyb3I9TW9kdWxlW1wiX2Vycm9yXCJdPU1vZHVsZVtcImFzbVwiXVtcImhcIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9mcmVlPU1vZHVsZVtcIl9mcmVlXCJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9mcmVlPU1vZHVsZVtcIl9mcmVlXCJdPU1vZHVsZVtcImFzbVwiXVtcImpcIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIF9tYWxsb2M9TW9kdWxlW1wiX21hbGxvY1wiXT1mdW5jdGlvbigpe3JldHVybihfbWFsbG9jPU1vZHVsZVtcIl9tYWxsb2NcIl09TW9kdWxlW1wiYXNtXCJdW1wia1wiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb249TW9kdWxlW1wiX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25cIl09ZnVuY3Rpb24oKXtyZXR1cm4oX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb249TW9kdWxlW1wiX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25cIl09TW9kdWxlW1wiYXNtXCJdW1wibFwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgX2dlbmVyYXRlRGF0YXNldD1Nb2R1bGVbXCJfZ2VuZXJhdGVEYXRhc2V0XCJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9nZW5lcmF0ZURhdGFzZXQ9TW9kdWxlW1wiX2dlbmVyYXRlRGF0YXNldFwiXT1Nb2R1bGVbXCJhc21cIl1bXCJtXCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfbm9ybWFsaXplRGF0YXNldD1Nb2R1bGVbXCJfbm9ybWFsaXplRGF0YXNldFwiXT1mdW5jdGlvbigpe3JldHVybihfbm9ybWFsaXplRGF0YXNldD1Nb2R1bGVbXCJfbm9ybWFsaXplRGF0YXNldFwiXT1Nb2R1bGVbXCJhc21cIl1bXCJuXCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfdHJhaW5MU1NWTT1Nb2R1bGVbXCJfdHJhaW5MU1NWTVwiXT1mdW5jdGlvbigpe3JldHVybihfdHJhaW5MU1NWTT1Nb2R1bGVbXCJfdHJhaW5MU1NWTVwiXT1Nb2R1bGVbXCJhc21cIl1bXCJvXCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfcHJlZGljdEJ5TFNTVk09TW9kdWxlW1wiX3ByZWRpY3RCeUxTU1ZNXCJdPWZ1bmN0aW9uKCl7cmV0dXJuKF9wcmVkaWN0QnlMU1NWTT1Nb2R1bGVbXCJfcHJlZGljdEJ5TFNTVk1cIl09TW9kdWxlW1wiYXNtXCJdW1wicFwiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgX3RyYWluQW5kQW5hbHl6ZUxTU1ZNPU1vZHVsZVtcIl90cmFpbkFuZEFuYWx5emVMU1NWTVwiXT1mdW5jdGlvbigpe3JldHVybihfdHJhaW5BbmRBbmFseXplTFNTVk09TW9kdWxlW1wiX3RyYWluQW5kQW5hbHl6ZUxTU1ZNXCJdPU1vZHVsZVtcImFzbVwiXVtcInFcIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIHN0YWNrU2F2ZT1Nb2R1bGVbXCJzdGFja1NhdmVcIl09ZnVuY3Rpb24oKXtyZXR1cm4oc3RhY2tTYXZlPU1vZHVsZVtcInN0YWNrU2F2ZVwiXT1Nb2R1bGVbXCJhc21cIl1bXCJyXCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBzdGFja1Jlc3RvcmU9TW9kdWxlW1wic3RhY2tSZXN0b3JlXCJdPWZ1bmN0aW9uKCl7cmV0dXJuKHN0YWNrUmVzdG9yZT1Nb2R1bGVbXCJzdGFja1Jlc3RvcmVcIl09TW9kdWxlW1wiYXNtXCJdW1wic1wiXSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgc3RhY2tBbGxvYz1Nb2R1bGVbXCJzdGFja0FsbG9jXCJdPWZ1bmN0aW9uKCl7cmV0dXJuKHN0YWNrQWxsb2M9TW9kdWxlW1wic3RhY2tBbGxvY1wiXT1Nb2R1bGVbXCJhc21cIl1bXCJ0XCJdKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBfX19jeGFfaXNfcG9pbnRlcl90eXBlPU1vZHVsZVtcIl9fX2N4YV9pc19wb2ludGVyX3R5cGVcIl09ZnVuY3Rpb24oKXtyZXR1cm4oX19fY3hhX2lzX3BvaW50ZXJfdHlwZT1Nb2R1bGVbXCJfX19jeGFfaXNfcG9pbnRlcl90eXBlXCJdPU1vZHVsZVtcImFzbVwiXVtcInVcIl0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07TW9kdWxlW1wiY2NhbGxcIl09Y2NhbGw7TW9kdWxlW1wiY3dyYXBcIl09Y3dyYXA7dmFyIGNhbGxlZFJ1bjtkZXBlbmRlbmNpZXNGdWxmaWxsZWQ9ZnVuY3Rpb24gcnVuQ2FsbGVyKCl7aWYoIWNhbGxlZFJ1bilydW4oKTtpZighY2FsbGVkUnVuKWRlcGVuZGVuY2llc0Z1bGZpbGxlZD1ydW5DYWxsZXJ9O2Z1bmN0aW9uIHJ1bihhcmdzKXthcmdzPWFyZ3N8fGFyZ3VtZW50c187aWYocnVuRGVwZW5kZW5jaWVzPjApe3JldHVybn1wcmVSdW4oKTtpZihydW5EZXBlbmRlbmNpZXM+MCl7cmV0dXJufWZ1bmN0aW9uIGRvUnVuKCl7aWYoY2FsbGVkUnVuKXJldHVybjtjYWxsZWRSdW49dHJ1ZTtNb2R1bGVbXCJjYWxsZWRSdW5cIl09dHJ1ZTtpZihBQk9SVClyZXR1cm47aW5pdFJ1bnRpbWUoKTtyZWFkeVByb21pc2VSZXNvbHZlKE1vZHVsZSk7aWYoTW9kdWxlW1wib25SdW50aW1lSW5pdGlhbGl6ZWRcIl0pTW9kdWxlW1wib25SdW50aW1lSW5pdGlhbGl6ZWRcIl0oKTtwb3N0UnVuKCl9aWYoTW9kdWxlW1wic2V0U3RhdHVzXCJdKXtNb2R1bGVbXCJzZXRTdGF0dXNcIl0oXCJSdW5uaW5nLi4uXCIpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7TW9kdWxlW1wic2V0U3RhdHVzXCJdKFwiXCIpfSwxKTtkb1J1bigpfSwxKX1lbHNle2RvUnVuKCl9fWlmKE1vZHVsZVtcInByZUluaXRcIl0pe2lmKHR5cGVvZiBNb2R1bGVbXCJwcmVJbml0XCJdPT1cImZ1bmN0aW9uXCIpTW9kdWxlW1wicHJlSW5pdFwiXT1bTW9kdWxlW1wicHJlSW5pdFwiXV07d2hpbGUoTW9kdWxlW1wicHJlSW5pdFwiXS5sZW5ndGg+MCl7TW9kdWxlW1wicHJlSW5pdFwiXS5wb3AoKSgpfX1ydW4oKTtcblxuXG4gIHJldHVybiBleHBvcnRFREEucmVhZHlcbn1cbik7XG59KSgpO1xuaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRFREE7XG5lbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZVsnYW1kJ10pXG4gIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7IHJldHVybiBleHBvcnRFREE7IH0pO1xuZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuICBleHBvcnRzW1wiZXhwb3J0RURBXCJdID0gZXhwb3J0RURBO1xuIiwiLy8gVXRpbGl0aWVzIGZvciBjYWxsaW5nIHdhc20tZnVuY3Rpb25zIHZpYSB3ZWJ3b3JrZXIuXG5cbi8vIFdlIHVzZSBhbiBhcHByb2FjaCB0aGF0IGlzIHdlbGwgZGVzY3JpYmVkIGhlcmU6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3XG4vLyBJdCBoYXMgYmVlbiBtb2RpZmllZCBmb3IgdXNhZ2UgaW4gREFUQUdST0suXG5cbi8vIENvbnN0YW50cyBmb3Igd2FzbS1mdW5jdGlvbnMgaW4gd2Vid29ya2VycyBydW50aW1lIHN5c3RlbVxuY29uc3QgVFlQRSA9ICd0eXBlJztcbmNvbnN0IE5VTV9UWVBFID0gJ251bSc7XG5jb25zdCBGTE9BVF9DT0xVTU5fVFlQRSA9ICdmbG9hdENvbHVtbic7XG5jb25zdCBJTlRfQ09MVU1OX1RZUEUgPSAnaW50Q29sdW1uJztcbmNvbnN0IEZMT0FUX0NPTFVNTlNfVFlQRSA9ICdmbG9hdENvbHVtbnMnO1xuY29uc3QgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSA9ICduZXdGbG9hdENvbHVtbnMnO1xuY29uc3QgSU5UX0NPTFVNTlNfVFlQRSA9ICdpbnRDb2x1bW5zJztcbmNvbnN0IE5FV19JTlRfQ09MVU1OU19UWVBFID0gJ25ld0ludENvbHVtbnMnO1xuY29uc3QgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFID0gJ25ld0Zsb2F0Q29sdW1uJztcbmNvbnN0IE5FV19JTlRfQ09MVU1OX1RZUEUgPSAnbmV3SW50Q29sdW1uJztcbmNvbnN0IENPTFVNTiA9ICdjb2x1bW4nO1xuY29uc3QgQ0FMTF9SRVNVTFQgPSAnX2NhbGxSZXN1bHQnO1xuY29uc3QgTlVNX09GX1JPV1MgPSAnbnVtT2ZSb3dzJztcbmNvbnN0IE5VTV9PRl9DT0xVTU5TID0gJ251bU9mQ29sdW1ucyc7XG5jb25zdCBSRUYgPSAncmVmJztcbmNvbnN0IFZBTFVFID0gJ3ZhbHVlJztcbmNvbnN0IFRBQkxFX09GX0NPTFVNTlMgPSAndGFibGVGcm9tQ29sdW1ucyc7XG5jb25zdCBPQkpFQ1RTID0gJ29iamVjdHMnO1xuY29uc3QgSU5UX1RZUEUgPSAnaW50JztcbmNvbnN0IERPVUJMRV9UWVBFID0gJ2RvdWJsZSc7XG5jb25zdCBOVU1CRVIgPSAnbnVtYmVyJztcblxuLy8gVHlwZS10by1oZWFwIGNvcnJlc3BvbmRlbmNlLlxuLy8gSXQgaXMgcmVxdWlyZWQgZm9yIEpTLW1vZHVsZSBnZW5lcmF0ZWQgYnkgRW1zY3JpcHRlbixcbi8vIGFuZCBpdCBpcyB1c2VkLCB3aGVuIHBhc3NpbmcgYXJyYXkgZGF0YSB0by9mcm9tIHdhc20tZnVuY3Rpb25zLlxuLy8gTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIGxpbms6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3XG5jb25zdCBoZWFwTWFwID0ge1xuICAgICAgICAgICAgICAgICAnaW50Q29sdW1uJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbnMnOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IFwiSEVBUEYzMlwiLFxuICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IFwiSEVBUDMyXCIsXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBcIkhFQVAzMlwiXG4gICAgICAgICAgICAgICAgfTtcblxuLy8gVHlwZSBzaWduYXR1cmUgdG8gdHlwZWQgYXJyYXkgbWFwLlxuLy8gSXQgaXMgdXNlZCwgd2hlbiBtYW5pcHVsYXRpbmcgY29sdW1uKHMpLlxuY29uc3QgdHlwZU1hcCA9IHtcbiAgICAgICAgICAgICAgICAgJ2ludENvbHVtbic6IEludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbic6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1ucyc6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IEZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2ludENvbHVtbnMnOiBJbnQzMkFycmF5LCAgXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogSW50MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogSW50MzJBcnJheVxuICAgICAgICAgICAgICAgIH07IFxuXG4vLyBUeXBlLXRvLXNoaWZ0IG1hcC5cbi8vIEl0IGlzIHVzZWQsIHdoZW4gcGFzc2luZyBhcnJheSB0by9mcm9tIHdhc20tZnVuY3Rpb25zLlxuLy8gTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBhdCB0aGUgZm9sbG93aW5nIGxpbms6XG4vLyBodHRwczovL2JlY29taW5naHVtYW4uYWkvcGFzc2luZy1hbmQtcmV0dXJuaW5nLXdlYmFzc2VtYmx5LWFycmF5LXBhcmFtZXRlcnMtYTBmNTcyYzY1ZDk3IFxuY29uc3Qgc2hpZnRNYXAgPSB7J2ludENvbHVtbic6IDIsIFxuICAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogMiwgXG4gICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW5zJzogMiwgIFxuICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1ucyc6IDIsIFxuICAgICAgICAgICAgICAgICAgJ2ludENvbHVtbnMnOiAyLCAgXG4gICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1ucyc6IDIsXG4gICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiAyLFxuICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6IDJcbiAgICAgICAgICAgICAgICAgfTsgICAgICAgICBcblxuLy8gR2V0IGlucHV0IGZvciBDKystZnVuY3Rpb24uXG4vLyBUaGlzIGZ1bmN0aW9uIHRha2VzIHNwZWNpZmljYXRpb24gb2YgYXJndW1lbnRzIChhcmdzU3BlY2lmaWNhdGlvbikgJiBpbnB1dCBkYXRhIChpbnB1dFZhbHMpXG4vLyBhbmQgcmV0dXJucyBpbnB1dCB0aGF0IHdpbGwgYmUgZnVydGhlciB1c2VkIGluIGNwcC93YXNtLWZ1bmN0aW9uLlxuZXhwb3J0IGZ1bmN0aW9uIGdldENwcElucHV0KGFyZ3NTcGVjaWZpY2F0aW9uLCBpbnB1dFZhbHMpIHtcbiAgICBsZXQgY3BwRnVuY0lucHV0ID0gW107XG4gICAgbGV0IHJlZjtcblxuICAgIC8vIGNvbXBsZXRlIGFuIGlucHV0IGZvciBjcHBcbiAgICBsZXQgaSA9IDA7XG4gICAgZm9yKGNvbnN0IGtleSBpbiBhcmdzU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBjb25zdCBhcmcgPSBhcmdzU3BlY2lmaWNhdGlvbltrZXldOyBcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuICAgICAgICBcbiAgICAgICAgLy8gc2tpcCBhdXhpbGlyeSBlbGVtZW50XG4gICAgICAgIGlmKGtleSA9PT0gQ0FMTF9SRVNVTFQpICAgICAgICAgICAgIFxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgLy8gaGVyZSwgd2UgY29uc2lkZXIgZWFjaCB0eXBlIG9mIGlucHV0XG4gICAgICAgIHN3aXRjaCh0eXBlKSB7ICAgICAgICAgICBcbiBcbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSBpbnB1dFZhbHNbaV07XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcblxuICAgICAgICAgICAgICAgIGxldCBhcnJheTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgT0sgaWYgdHlwZSBvZiBjb2x1bW4gYW5kIHRhcmdldCB0eXBlIGNvaW5zaWRlXG4gICAgICAgICAgICAgICAgLy9hcnJheSA9IGlucHV0VmFsc1tpXS5nZXRSYXdEYXRhKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29sID0gaW5wdXRWYWxzW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gaGVyZSwgd2UgY2hlY2sgdHlwZXMgYW5kIHBlcmZvcm0gYW4gYXBwcm9wcmlhdGUgdHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgaWYoICggKGNvbC50eXBlID09PSBJTlRfVFlQRSkgJiYgKHR5cGUgPT09IElOVF9DT0xVTU5fVFlQRSkgKSBcbiAgICAgICAgICAgICAgICAgICB8fCAoIChjb2wudHlwZSA9PT0gRE9VQkxFX1RZUEUpICYmICh0eXBlID09PSBGTE9BVF9DT0xVTU5fVFlQRSkgKSApXG4gICAgICAgICAgICAgICAgICAgICBhcnJheSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKTtcblxuICAgICAgICAgICAgICAgIC8qaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gSU5UX0NPTFVNTl9UWVBFKSkgXG4gICAgICAgICAgICAgICAgICAgICB8fCAoKGNvbC50eXBlID09ICdkb3VibGUnKSAmJiAodHlwZSA9PSBGTE9BVF9DT0xVTU5fVFlQRSkpKVxuICAgICAgICAgICAgICAgICAgICAgICBhcnJheSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpOyovXG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayB0eXBlc1xuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geyAnYXJyYXknOiBhcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ251bU9mUm93cyc6IGFycmF5Lmxlbmd0aH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbiBcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGxldCB2YWwgPSAwOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIHJlZiA9IGFyZ1tOVU1fT0ZfUk9XU11bUkVGXTtcblxuICAgICAgICAgICAgICAgIGlmIChhcmdzU3BlY2lmaWNhdGlvbltyZWZdLnR5cGUgPT09IE5VTV9UWVBFKVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9ST1dTXVtWQUxVRV1dOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IHsnbnVtT2ZSb3dzJzogdmFsfTtcblxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1ucyBvciBjb2x1bW5fbGlzdFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBbXTsgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIE9LIGlmIHR5cGUgb2YgY29sdW1ucyBhbmQgdGFyZ2V0IHR5cGUgY29pbnNpZGVcbiAgICAgICAgICAgICAgICAvL2ZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAvLyAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBoZXJlLCB3ZSBjaGVjayB0eXBlcyBhbmQgcGVyZm9ybSBhbiBhcHByb3ByaWF0ZSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICBmb3IobGV0IGNvbCBvZiBpbnB1dFZhbHNbaV0udG9MaXN0KCkpXG4gICAgICAgICAgICAgICAgICBpZiggKCAoY29sLnR5cGUgPT09IElOVF9UWVBFKSAmJiAodHlwZSA9PT0gSU5UX0NPTFVNTl9UWVBFKSApIFxuICAgICAgICAgICAgICAgICAgICB8fCAoIChjb2wudHlwZSA9PT0gRE9VQkxFX1RZUEUpICYmICh0eXBlID09PSBGTE9BVF9DT0xVTU5fVFlQRSkgKSApXG4gICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKGNvbC5nZXRSYXdEYXRhKCkpO1xuICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLypmb3IobGV0IGNvbCBvZiBpbnB1dFZhbHNbaV0udG9MaXN0KCkpXG4gICAgICAgICAgICAgICAgICAgIGlmKCgoY29sLnR5cGUgPT0gJ2ludCcpICYmICh0eXBlID09IElOVF9DT0xVTU5fVFlQRSkpIFxuICAgICAgICAgICAgICAgICAgICAgIHx8ICgoY29sLnR5cGUgPT0gJ2RvdWJsZScpICYmICh0eXBlID09IEZMT0FUX0NPTFVNTl9UWVBFKSkpXG4gICAgICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChuZXcgdHlwZU1hcFt0eXBlXShjb2wuZ2V0UmF3RGF0YSgpKSk7Ki9cblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geyAnYXJyYXlzJzogYXJyYXlzLFxuICAgICAgICAgICAgICAgICAgICAnbnVtT2ZSb3dzJzogYXJyYXlzWzBdLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgJ251bU9mQ29sdW1ucyc6IGFycmF5cy5sZW5ndGh9O1xuXG4gICAgICAgICAgICAgICAgaSsrOyAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zIG9yIG5ldyBjb2x1bW5fbGlzdFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBsZXQgdmFsMSA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IHZhbDIgPSAwO1xuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9ST1dTXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbDEgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwxID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhW2FyZ1tOVU1fT0ZfUk9XU11bVkFMVUVdXTtcblxuICAgICAgICAgICAgICAgIHJlZiA9IGFyZ1tOVU1fT0ZfQ09MVU1OU11bUkVGXTtcblxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ1JlZjonKTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHJlZik7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbDIgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB2YWwyID0gYXJnc1NwZWNpZmljYXRpb25bcmVmXS5kYXRhW2FyZ1tOVU1fT0ZfQ09MVU1OU11bVkFMVUVdXTsgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IHsnbnVtT2ZSb3dzJzogdmFsMSxcbiAgICAgICAgICAgICAgICAgICdudW1PZkNvbHVtbnMnOiB2YWwyfTtcblxuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICBcblxuICAgICAgICAgICAgZGVmYXVsdDogXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBUT0RPOiBzcGVjaWZ5IGJlaGF2aW91ciAgICAgICAgICAgXG4gICAgICAgICAgICB9IC8vIHN3aXRjaCAgICAgICAgXG5cbiAgICAgICAgY3BwRnVuY0lucHV0LnB1c2goYXJnKTtcbiAgICB9IC8vIGZvciBrZXlcblxuICAgIC8vY29uc29sZS5sb2coJ2NwcEZ1bmNJbnB1dDonKTtcbiAgICAvL2NvbnNvbGUubG9nKGNwcEZ1bmNJbnB1dCk7XG5cbiAgICByZXR1cm4gY3BwRnVuY0lucHV0O1xufSAvLyBnZXRDcHBJbnB1dFxuXG4vLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1ZmZlcnMgZm9yIGFycmF5IGRhdGFcbmZ1bmN0aW9uIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHsgXG4gICAgICAgIGNvbnN0IHR5cGUgPSBhcmcudHlwZTtcblxuICAgICAgICBzd2l0Y2godHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOiBcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuZGF0YS5idWYgPSBtb2R1bGUuX21hbGxvYyhhcmcuZGF0YS5udW1PZlJvd3MgKiB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOiAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTogLy8gYWxsb2NhdGlvbiBtZW1vcnkgZm9yIGNvbHVtbnMgdGhhdCBhcmUgY3JlYXRlZFxuICAgICAgICAgICAgICAgIGFyZy5kYXRhLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKGFyZy5kYXRhLm51bU9mUm93cyAqIGFyZy5kYXRhLm51bU9mQ29sdW1ucyBcbiAgICAgICAgICAgICAgICAgICAgKiB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7IFxuICAgICAgICB9ICBcbiAgICB9XG4gICAgXG4gICAgLy9jb25zb2xlLmxvZygnaW5wdXRzIGFmdGVyIG1lbW9yeSBhbGxvY2F0aW9uOicpO1xuICAgIC8vY29uc29sZS5sb2coaW5wdXRzKTtcbn0gLy8gYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXJcblxuLy8gR2V0IGFycmF5IG9mIHZhbHVlcyB0aGF0IGFyZSBwdXQgdG8gd2FzbS1mdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEFyck9mV2FzbVBhcmFtcyhpbnB1dHMpIHtcbiAgICBsZXQgcGFyYW1zID0gW107XG5cbiAgICAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSB7XG4gICAgICAgIHN3aXRjaCAoYXJnLnR5cGUpIHtcblxuICAgICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTogICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1uICYgbmV3IGNvbHVtblxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEuYnVmKTsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEubnVtT2ZSb3dzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6IFxuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhLmJ1Zik7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEubnVtT2ZSb3dzKTtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZkNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbn0gLy8gZ2V0QXJyT2ZXYXNtUGFyYW1zXG5cbi8vIEdldCBhcnJheSBvZiB0eXBlcyB0aGF0IGFyZSBwdXQgdG8gd2FzbS1mdW5jdGlvbi5cbmZ1bmN0aW9uIGdldEFyck9mV2FzbVR5cGVzKGlucHV0cykge1xuICAgIGxldCB0eXBlcyA9IFtdO1xuXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1ucyAmIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzO1xufSAvLyBnZXRBcnJPZldhc21UeXBlc1xuXG4vLyBQdXQgYXJyYXkgZGF0YSB0byBidWZmZXJcbmZ1bmN0aW9uIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuICAgIGxldCBzaGlmdDtcbiAgICBsZXQgaGVhcDsgICAgXG4gICAgXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTsgIFxuICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFyZy5kYXRhLmFycmF5LCBhcmcuZGF0YS5idWYgPj4gc2hpZnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBzaGlmdCA9IHNoaWZ0TWFwW3R5cGVdO1xuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbGV0IG51bU9mQnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgICAgIGxldCBidWYgPSBhcmcuZGF0YS5idWY7XG4gICAgICAgICAgICAgICAgbGV0IG51bU9mQ29sdW1ucyA9IGFyZy5kYXRhLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBhcmcuZGF0YS5hcnJheXM7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2x1bW5zOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5c1tpXSwgKGJ1ZiArIGkgKiBudW1PZlJvd3MgKiBudW1PZkJ5dGVzKSA+PiBzaGlmdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uKHMpXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn0gLy8gcHV0RGF0YVRvQnVmZmVyXG5cbi8vIEdldCBhcnJheSBkYXRhIGZyb20gYnVmZmVyLlxuZnVuY3Rpb24gZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlLCBpbnB1dHMpIHtcblxuICAgIGxldCBoZWFwO1xuICAgIGxldCBudW1PZlJvd3M7XG4gICAgbGV0IG51bU9mQ29scztcbiAgICBsZXQgbnVtT2ZCeXRlczsgICAgXG4gICAgbGV0IGJ1ZjtcblxuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhcmcudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHsgLy8gUHJvY2VzcyBlYWNoIHR5cGUgb2YgaW5wdXRcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbihzKVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTogICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIG51bU9mQnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UOyAgICBcbiAgICAgICAgICAgICAgICBidWYgPSBhcmcuZGF0YS5idWY7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbal0gPSBoZWFwW2J1ZiAvIG51bU9mQnl0ZXMgKyBqXTtcblxuICAgICAgICAgICAgICAgIGFyZy5hcnJheSA9IGFycmF5O1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOiBcbiAgICAgICAgICAgICAgICBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dO1xuICAgICAgICAgICAgICAgIG51bU9mUm93cyA9IGFyZy5kYXRhLm51bU9mUm93cztcbiAgICAgICAgICAgICAgICBudW1PZkNvbHMgPSBhcmcuZGF0YS5udW1PZkNvbHVtbnM7XG4gICAgICAgICAgICAgICAgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7ICAgIFxuICAgICAgICAgICAgICAgIGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXlzID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgICBhcnJbal0gPSBoZWFwW2J1ZiAvIG51bU9mQnl0ZXMgKyBqICsgaSAqIG51bU9mUm93c107ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goYXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhcmcuYXJyYXlzID0gYXJyYXlzO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSAgICAgICAgICAgIFxufSAvLyBnZXREYXRhRnJvbUJ1ZmZlclxuXG4vLyBDbGVhciBtZW1vcnkgYWxsb2NhdGVkIGZvciBhcnJheSBkYXRhXG5mdW5jdGlvbiBjbGVhck1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuICAgIGZvcihjb25zdCBhcmcgb2YgaW5wdXRzKSBcbiAgICAgICAgc3dpdGNoKGFyZy50eXBlKSB7IC8vIHByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlclxuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBlYWNoIG5vbi1udW1iZXIgY2FzZVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIG1vZHVsZS5fZnJlZShhcmcuZGF0YS5idWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhazsgXG4gICAgICAgIH0gICAgXG59IC8vIGNsZWFyTWVtb3J5Rm9yQnVmZmVyXG5cbi8vIEV4dHJhY3QgbmV3bHkgY3JlYXRlZCBkYXRhOiBuZXcgY29sdW1uKHMpIGFyZSBjcmVhdGVkXG5mdW5jdGlvbiBleHRyYWN0TmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbkFyZ3MsIGFyZ3NBZnRlcldhc21DYWxsKSB7XG4gICAgLy8gdHlwZS10by1jb2x1bW5fY3JlYXRvciBtYXBcbiAgICBjb25zdCB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwID0geyduZXdGbG9hdENvbHVtbnMnOiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogREcuQ29sdW1uLmZyb21JbnQzMkFycmF5fTtcblxuICAgIGxldCBpID0gMDtcblxuICAgIGZvcihjb25zdCBrZXkgaW4gZnVuY1NwZWNpZmljYXRpb25BcmdzKSBcbiAgICB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uQXJnc1trZXldO1xuXG4gICAgICAgIHN3aXRjaChhcmcudHlwZSl7IC8vIFByb2Nlc3MgZWFjaCB0eXBlXG5cbiAgICAgICAgICAgIC8vIG51bWJlclxuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4ocylcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBsZXQgbmFtZTtcblxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgbmFtZSBmb3IgY29sdW1uXG4gICAgICAgICAgICAgICAgaWYoYXJnLm5hbWUgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gKDApLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgZWxzZSBcbiAgICAgICAgICAgICAgICAgICAgbmFtZXMgPSBhcmcubmFtZTtcblxuICAgICAgICAgICAgICAgIGFyZy5jb2x1bW4gPSB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW2FyZy50eXBlXShuYW1lLFxuICAgICAgICAgICAgICAgICAgICBhcmdzQWZ0ZXJXYXNtQ2FsbFtpXS5hcnJheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5zXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgICAgICAgICAgICAgbGV0IGxlbmd0aCA9IGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5cy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBsZXQgbmFtZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZnkgbmFtZSBmb3IgY29sdW1uXG4gICAgICAgICAgICAgICAgaWYoYXJnLm5hbWVzID09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBrID0gMTsgayA8PSBsZW5ndGg7IGsrKylcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2goKGspLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIGVsc2UgbmFtZXMgPSBhcmcubmFtZXM7XG5cbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCh0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW2FyZy50eXBlXShuYW1lc1tqXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5c1tqXSkpO1xuXG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGkrKztcbiAgICB9XG59IC8vIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhXG5cbi8vIEdldCBvdXRwdXQgZGF0YTogb3ZlcmFsbCBvdXRwdXQgaXMgY3JlYXRlZFxuZnVuY3Rpb24gZ2V0T3V0cHV0KGZ1bmNTcGVjaWZpY2F0aW9uKSB7ICBcbiAgICBsZXQgb3V0cHV0ID0gZnVuY1NwZWNpZmljYXRpb24ub3V0cHV0O1xuICAgIFxuICAgIGNvbnN0IHR5cGVUb0RhdGFGaWVsZE1hcCA9IHsnbmV3RmxvYXRDb2x1bW5zJzogJ2NvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1ucyc6ICdjb2x1bW5zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0Zsb2F0Q29sdW1uJzogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiAnY29sdW1uJ307XG5cbiAgICBzd2l0Y2gob3V0cHV0LnR5cGUpIHtcblxuICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ09MVU1OOlxuICAgICAgICAgICAgcmV0dXJuIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXS5jb2x1bW47XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFRBQkxFX09GX0NPTFVNTlM6XG4gICAgICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tvdXRwdXQuc291cmNlXS5jb2x1bW5zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgT0JKRUNUUzpcbiAgICAgICAgICAgIGxldCBhcnJheVRvUmV0dXJuID0gW107XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHB1c2ggZGF0YSBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnRzXG4gICAgICAgICAgICBmb3IobGV0IG5hbWUgb2Ygb3V0cHV0LnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGxldCBhcmcgPSBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHNbbmFtZV07XG4gICAgICAgICAgICAgICAgYXJyYXlUb1JldHVybi5wdXNoKGFyZ1t0eXBlVG9EYXRhRmllbGRNYXBbYXJnLnR5cGVdXSk7XG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlUb1JldHVybjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbn0gLy8gZ2V0T3V0cHV0XG5cbi8vIENsZWFyIG5ld2x5IGNyZWF0ZWQgZGF0YSBmaWVsZHMgKG5ldyBjb2x1bW4ocykpXG5mdW5jdGlvbiBjbGVhck5ld2x5Q3JlYXRlZERhdGEoZnVuY1NwZWNpZmljYXRpb25BcmdzKSB7IFxuICAgIGZvcihjb25zdCBrZXkgaW4gZnVuY1NwZWNpZmljYXRpb25BcmdzKSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uQXJnc1trZXldO1xuXG4gICAgICAgIHN3aXRjaCAoYXJnLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTogICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuY29sdW1uID0gbnVsbDsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufSAvLyBjbGVhck5ld2x5Q3JlYXRlZERhdGFcblxuLy8gVEhFIE1BSU4gRlVOQ1RJT046IGEgd3JhcHBlciBmb3IgQysrLWZ1bmN0aW9uIGNhbGxcbmV4cG9ydCBmdW5jdGlvbiBjcHBXcmFwcGVyKG1vZHVsZSwgYXJncywgY3BwRnVuY05hbWUsIHJldHVyblR5cGUpIHtcbiAgICAvLyBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFycmF5cyB0aGF0IGFyZSBwYXNzZWQgdG8gQysrLWZ1bmN0aW9uXG4gICAgYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlLCBhcmdzKTtcblxuICAgIC8vIHB1dCBkYXRhIChqdXN0IGNvbHVtbihzKSkgdG8gYWxsb2NhdGVkIGJ1ZmZlcnNcbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlLCBhcmdzKTtcblxuICAgIC8vIGNyZWF0ZSBhcnJheSBvZiBwYXJhbWV0ZXJzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBsZXQgcGFyYW1zID0gZ2V0QXJyT2ZXYXNtUGFyYW1zKGFyZ3MpO1xuXG4gICAgLy9jb25zb2xlLmxvZygncGFyYW1zOicpO1xuICAgIC8vY29uc29sZS5sb2cocGFyYW1zKTtcblxuICAgIC8vIGNyZWF0ZSBhcnJheSBvZiBwYXJhbWV0ZXJzJyB0eXBlcyB0aGF0IGFyZSBwYXNzZWQgdG8gQysrLWZ1bmN0aW9uXG4gICAgbGV0IHR5cGVzID0gZ2V0QXJyT2ZXYXNtVHlwZXMoYXJncyk7XG4gICAgXG4gICAgLy9jb25zb2xlLmxvZygndHlwZXM6Jyk7XG4gICAgLy9jb25zb2xlLmxvZyh0eXBlcyk7XG5cbiAgICAvLyBjYWxsIHdhc20tZnVuY3Rpb25cbiAgICBsZXQgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNwcEZ1bmNOYW1lLCByZXR1cm5UeXBlLCB0eXBlcywgcGFyYW1zKTtcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKHJlc3VsdCk7XG5cbiAgICAvLyBnZXQgZGF0YSBmcm9tIGJ1ZmZlcnMgKGp1c3QgY29sdW1uKHMpKVxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSwgYXJncyk7ICAgICAgICBcblxuICAgIC8vIGNsZWFyIG1lbW9yeSB0aGF0IHdhcyBwcmV2aW91c2VseSBhbGxvY2F0ZWRcbiAgICBjbGVhck1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy9jb25zb2xlLmxvZygnZG9uZScpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0IHRoZSByZXF1aXJlZCBvdXRwdXQuXG4vLyBJdCB0YWtlcyBhIHNwZWNpZmljYXRpb24gb2YgdGhlIGZ1bmN0aW9uIGFuZCB0aGUgZGF0YSBjb21wdXRlZFxuLy8gYW5kIGV4dHJhY3RzIHRoZSByZXF1aXJlZCByZXN1bHRzLlxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3VsdChmdW5jU3BlY2lmaWNhdGlvbiwgZGF0YUZyb21XZWJXb3JrZXIpIHtcbiAgICBmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMuX2NhbGxSZXN1bHQgPSBkYXRhRnJvbVdlYldvcmtlci5jYWxsUmVzdWx0OyAgXG5cbiAgICBleHRyYWN0TmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMsIGRhdGFGcm9tV2ViV29ya2VyLmFyZ3MpOyAgICBcblxuICAgIGxldCBvdXRQdXQgPSBnZXRPdXRwdXQoZnVuY1NwZWNpZmljYXRpb24pO1xuXG4gICAgLy8gQmVsb3csIHdlIHJlbW92ZSBuZXdseSBjcmVhdGVkIGNvbHVtbihzKSwgd2hpY2ggYXJlIGNyZWF0ZWQgYXQgdGhlIGV4dHJhY3Rpb24tc3RlcC5cbiAgICAvLyBJdCBpcyBlc3BlY2lhbGx5IHJlcXVpcmVkLCB3aGVuIG11bHRpcGxlIGNhbGwgb2Ygd2FzbS1mdW5jdGlvbnMgaW4gd2Vid29ya2VyLlxuICAgIGNsZWFyTmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbi5hcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIG91dFB1dDtcbn0iXSwibmFtZXMiOlsiX3NjcmlwdERpciIsImV4cG9ydEVEQSIsImRvY3VtZW50IiwiY3VycmVudFNjcmlwdCIsInNyYyIsInVuZGVmaW5lZCIsInJlYWR5UHJvbWlzZVJlc29sdmUiLCJyZWFkeVByb21pc2VSZWplY3QiLCJNb2R1bGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlYWRCaW5hcnkiLCJtb2R1bGVPdmVycmlkZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJhcmd1bWVudHNfIiwiRU5WSVJPTk1FTlRfSVNfV0VCIiwid2luZG93IiwiRU5WSVJPTk1FTlRfSVNfV09SS0VSIiwiaW1wb3J0U2NyaXB0cyIsInNjcmlwdERpcmVjdG9yeSIsInByb2Nlc3MiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJzZWxmIiwibG9jYXRpb24iLCJocmVmIiwiaW5kZXhPZiIsInN1YnN0ciIsInJlcGxhY2UiLCJsYXN0SW5kZXhPZiIsInVybCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsInNlbmQiLCJVaW50OEFycmF5IiwicmVzcG9uc2UiLCJjb25zb2xlIiwibG9nIiwiYmluZCIsIndhc21CaW5hcnkiLCJ3YXNtTWVtb3J5IiwiZXJyIiwid2FybiIsIldlYkFzc2VtYmx5IiwiYWJvcnQiLCJidWZmZXIiLCJIRUFQOCIsIkhFQVBVOCIsIkhFQVAzMiIsIkhFQVBVMzIiLCJBQk9SVCIsIlVURjhEZWNvZGVyIiwiVGV4dERlY29kZXIiLCJVVEY4VG9TdHJpbmciLCJwdHIiLCJtYXhCeXRlc1RvUmVhZCIsImhlYXBPckFycmF5IiwiaWR4IiwiZW5kSWR4IiwiZW5kUHRyIiwiZGVjb2RlIiwic3ViYXJyYXkiLCJzdHIiLCJ1MCIsInUxIiwidTIiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaCIsIlVURjhBcnJheVRvU3RyaW5nIiwidXBkYXRlR2xvYmFsQnVmZmVyQW5kVmlld3MiLCJidWYiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJfX0FUUFJFUlVOX18iLCJfX0FUSU5JVF9fIiwiX19BVFBPU1RSVU5fXyIsInJ1bkRlcGVuZGVuY2llcyIsInJ1bkRlcGVuZGVuY3lXYXRjaGVyIiwiZGVwZW5kZW5jaWVzRnVsZmlsbGVkIiwid2hhdCIsImUiLCJSdW50aW1lRXJyb3IiLCJ3YXNtQmluYXJ5RmlsZSIsInBhdGgiLCJpc0RhdGFVUkkiLCJmaWxlbmFtZSIsInN0YXJ0c1dpdGgiLCJnZXRCaW5hcnkiLCJmaWxlIiwiY2FsbFJ1bnRpbWVDYWxsYmFja3MiLCJjYWxsYmFja3MiLCJsZW5ndGgiLCJzaGlmdCIsIkV4Y2VwdGlvbkluZm8iLCJleGNQdHIiLCJ0aGlzIiwic2V0X3R5cGUiLCJ0eXBlIiwiZ2V0X3R5cGUiLCJzZXRfZGVzdHJ1Y3RvciIsImRlc3RydWN0b3IiLCJnZXRfZGVzdHJ1Y3RvciIsInNldF9yZWZjb3VudCIsInJlZmNvdW50Iiwic2V0X2NhdWdodCIsImNhdWdodCIsImdldF9jYXVnaHQiLCJzZXRfcmV0aHJvd24iLCJyZXRocm93biIsImdldF9yZXRocm93biIsImluaXQiLCJzZXRfYWRqdXN0ZWRfcHRyIiwiYWRkX3JlZiIsInZhbHVlIiwicmVsZWFzZV9yZWYiLCJwcmV2IiwiYWRqdXN0ZWRQdHIiLCJnZXRfYWRqdXN0ZWRfcHRyIiwiZ2V0X2V4Y2VwdGlvbl9wdHIiLCJfX19jeGFfaXNfcG9pbnRlcl90eXBlIiwiYWRqdXN0ZWQiLCJlbXNjcmlwdGVuX3JlYWxsb2NfYnVmZmVyIiwic2l6ZSIsImdyb3ciLCJieXRlTGVuZ3RoIiwiZ2V0Q0Z1bmMiLCJpZGVudCIsImNjYWxsIiwicmV0dXJuVHlwZSIsImFyZ1R5cGVzIiwiYXJncyIsIm9wdHMiLCJ0b0MiLCJyZXQiLCJsZW4iLCJvdXRQdHIiLCJtYXhCeXRlc1RvV3JpdGUiLCJoZWFwIiwib3V0SWR4IiwiaSIsInUiLCJjaGFyQ29kZUF0Iiwic3RyaW5nVG9VVEY4QXJyYXkiLCJzdHJpbmdUb1VURjgiLCJzdGFja0FsbG9jIiwiYXJyIiwiYXJyYXkiLCJzZXQiLCJ3cml0ZUFycmF5VG9NZW1vcnkiLCJmdW5jIiwiY0FyZ3MiLCJzdGFjayIsImNvbnZlcnRlciIsInN0YWNrU2F2ZSIsImFwcGx5Iiwic3RhY2tSZXN0b3JlIiwiQm9vbGVhbiIsImNvbnZlcnRSZXR1cm5WYWx1ZSIsIm9uRG9uZSIsImNhbGxlZFJ1biIsImFzbUxpYnJhcnlBcmciLCJjb25kaXRpb24iLCJsaW5lIiwiZGVzdCIsIm51bSIsImNvcHlXaXRoaW4iLCJyZXF1ZXN0ZWRTaXplIiwieCIsIm9sZFNpemUiLCJtYXhIZWFwU2l6ZSIsImN1dERvd24iLCJvdmVyR3Jvd25IZWFwU2l6ZSIsIk1hdGgiLCJtaW4iLCJtYXgiLCJpbmZvIiwicmVjZWl2ZUluc3RhbmNlIiwiaW5zdGFuY2UiLCJtb2R1bGUiLCJjYiIsImV4cG9ydHMiLCJ1bnNoaWZ0IiwiaWQiLCJjbGVhckludGVydmFsIiwiY2FsbGJhY2siLCJyZW1vdmVSdW5EZXBlbmRlbmN5IiwicmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQiLCJyZXN1bHQiLCJpbnN0YW50aWF0ZUFycmF5QnVmZmVyIiwicmVjZWl2ZXIiLCJmZXRjaCIsInRoZW4iLCJVUkwiLCJjYXRjaCIsImJpbmFyeSIsImluc3RhbnRpYXRlIiwicmVhc29uIiwiaW5zdGFudGlhdGVTdHJlYW1pbmciLCJjcmVhdGVXYXNtIiwiYXJndW1lbnRzIiwicnVuIiwiZG9SdW4iLCJwb3N0UnVuIiwicHJlUnVuIiwic2V0VGltZW91dCIsIm51bWVyaWNBcmdzIiwiZXZlcnkiLCJydW5DYWxsZXIiLCJwb3AiLCJyZWFkeSIsImRlZmluZSIsIk5VTV9UWVBFIiwiRkxPQVRfQ09MVU1OX1RZUEUiLCJJTlRfQ09MVU1OX1RZUEUiLCJGTE9BVF9DT0xVTU5TX1RZUEUiLCJORVdfRkxPQVRfQ09MVU1OU19UWVBFIiwiSU5UX0NPTFVNTlNfVFlQRSIsIk5FV19JTlRfQ09MVU1OU19UWVBFIiwiTkVXX0ZMT0FUX0NPTFVNTl9UWVBFIiwiTkVXX0lOVF9DT0xVTU5fVFlQRSIsIklOVF9UWVBFIiwiRE9VQkxFX1RZUEUiLCJOVU1CRVIiLCJoZWFwTWFwIiwidHlwZU1hcCIsInNoaWZ0TWFwIiwiY3BwV3JhcHBlciIsImNwcEZ1bmNOYW1lIiwiaW5wdXRzIiwiYXJnIiwiZGF0YSIsIl9tYWxsb2MiLCJudW1PZlJvd3MiLCJCWVRFU19QRVJfRUxFTUVOVCIsIm51bU9mQ29sdW1ucyIsImFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyIiwibnVtT2ZCeXRlcyIsImFycmF5cyIsInB1dERhdGFUb0J1ZmZlciIsInBhcmFtcyIsInB1c2giLCJnZXRBcnJPZldhc21QYXJhbXMiLCJ0eXBlcyIsImdldEFyck9mV2FzbVR5cGVzIiwibnVtT2ZDb2xzIiwiaiIsImdldERhdGFGcm9tQnVmZmVyIiwiX2ZyZWUiLCJjbGVhck1lbW9yeUZvckJ1ZmZlciJdLCJzb3VyY2VSb290IjoiIn0=
package/dist/910.js DELETED
@@ -1,2 +0,0 @@
1
- var eda;(()=>{"use strict";var e,r,t={910:(e,r,t)=>{var o=t(6845),a=t(2086);onmessage=async function(e){(0,o.P)().then((r=>{let t=e.data,o=(0,a.Gz)(r,t,"error","number");postMessage({callResult:o,args:t})}))}}},o={};function a(e){var r=o[e];if(void 0!==r)return r.exports;var n=o[e]={id:e,loaded:!1,exports:{}};return t[e](n,n.exports,a),n.loaded=!0,n.exports}a.m=t,a.x=()=>{var e=a.O(void 0,[902],(()=>a(910)));return a.O(e)},a.amdO={},e=[],a.O=(r,t,o,n)=>{if(!t){var i=1/0;for(l=0;l<e.length;l++){for(var[t,o,n]=e[l],s=!0,c=0;c<t.length;c++)(!1&n||i>=n)&&Object.keys(a.O).every((e=>a.O[e](t[c])))?t.splice(c--,1):(s=!1,n<i&&(i=n));if(s){e.splice(l--,1);var p=o();void 0!==p&&(r=p)}}return r}n=n||0;for(var l=e.length;l>0&&e[l-1][2]>n;l--)e[l]=e[l-1];e[l]=[t,o,n]},a.d=(e,r)=>{for(var t in r)a.o(r,t)&&!a.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce(((r,t)=>(a.f[t](e,r),r)),[])),a.u=e=>e+".js",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),a.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e;a.g.importScripts&&(e=a.g.location+"");var r=a.g.document;if(!e&&r&&(r.currentScript&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var o=t.length-1;o>-1&&!e;)e=t[o--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=e})(),(()=>{a.b=self.location+"";var e={910:1};a.f.i=(r,t)=>{e[r]||importScripts(a.p+a.u(r))};var r=self.webpackChunkeda=self.webpackChunkeda||[],t=r.push.bind(r);r.push=r=>{var[o,n,i]=r;for(var s in n)a.o(n,s)&&(a.m[s]=n[s]);for(i&&i(a);o.length;)e[o.pop()]=1;t(r)}})(),r=a.x,a.x=()=>a.e(902).then(r);var n=a.x();eda=n})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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bUJFLEtBQUtDLEtBQUtILEdBQzlEQSxFQUFtQkUsS0F2QkM1RSxJQUNuQixJQUFLaUIsRUFBVTZELEVBQWFDLEdBQVcvRSxFQUN2QyxJQUFJLElBQUlLLEtBQVl5RSxFQUNoQjFFLEVBQW9COEIsRUFBRTRDLEVBQWF6RSxLQUNyQ0QsRUFBb0JRLEVBQUVQLEdBQVl5RSxFQUFZekUsSUFJaEQsSUFERzBFLEdBQVNBLEVBQVEzRSxHQUNkYSxFQUFTTSxRQUNka0QsRUFBZ0J4RCxFQUFTK0QsT0FBUyxFQUNuQ0wsRUFBMkIzRSxFQUFLLEMsS1huQjdCUCxFQUFPVyxFQUFvQlMsRUFDL0JULEVBQW9CUyxFQUFJLElBQ2hCVCxFQUFvQm1DLEVBQUUsS0FBSzFDLEtBQUtKLEdZRHhDLElBQUlxQixFQUFzQlYsRUFBb0JTLEkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2NodW5rIGxvYWRlZCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL3N0YXJ0dXAgY2h1bmsgZGVwZW5kZW5jaWVzIiwid2VicGFjazovL2VkYS8uL3dhc20vd29ya2Vycy9lcnJvcldvcmtlci5qcyIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9hbWQgb3B0aW9ucyIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZW5zdXJlIGNodW5rIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgY2h1bmsgZmlsZW5hbWUiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9oYXJtb255IG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvaW1wb3J0U2NyaXB0cyBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRlZmVycmVkID0gW107XG5fX3dlYnBhY2tfcmVxdWlyZV9fLk8gPSAocmVzdWx0LCBjaHVua0lkcywgZm4sIHByaW9yaXR5KSA9PiB7XG5cdGlmKGNodW5rSWRzKSB7XG5cdFx0cHJpb3JpdHkgPSBwcmlvcml0eSB8fCAwO1xuXHRcdGZvcih2YXIgaSA9IGRlZmVycmVkLmxlbmd0aDsgaSA+IDAgJiYgZGVmZXJyZWRbaSAtIDFdWzJdID4gcHJpb3JpdHk7IGktLSkgZGVmZXJyZWRbaV0gPSBkZWZlcnJlZFtpIC0gMV07XG5cdFx0ZGVmZXJyZWRbaV0gPSBbY2h1bmtJZHMsIGZuLCBwcmlvcml0eV07XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHZhciBub3RGdWxmaWxsZWQgPSBJbmZpbml0eTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZWZlcnJlZC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBbY2h1bmtJZHMsIGZuLCBwcmlvcml0eV0gPSBkZWZlcnJlZFtpXTtcblx0XHR2YXIgZnVsZmlsbGVkID0gdHJ1ZTtcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGNodW5rSWRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRpZiAoKHByaW9yaXR5ICYgMSA9PT0gMCB8fCBub3RGdWxmaWxsZWQgPj0gcHJpb3JpdHkpICYmIE9iamVjdC5rZXlzKF9fd2VicGFja19yZXF1aXJlX18uTykuZXZlcnkoKGtleSkgPT4gKF9fd2VicGFja19yZXF1aXJlX18uT1trZXldKGNodW5rSWRzW2pdKSkpKSB7XG5cdFx0XHRcdGNodW5rSWRzLnNwbGljZShqLS0sIDEpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZnVsZmlsbGVkID0gZmFsc2U7XG5cdFx0XHRcdGlmKHByaW9yaXR5IDwgbm90RnVsZmlsbGVkKSBub3RGdWxmaWxsZWQgPSBwcmlvcml0eTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYoZnVsZmlsbGVkKSB7XG5cdFx0XHRkZWZlcnJlZC5zcGxpY2UoaS0tLCAxKVxuXHRcdFx0dmFyIHIgPSBmbigpO1xuXHRcdFx0aWYgKHIgIT09IHVuZGVmaW5lZCkgcmVzdWx0ID0gcjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07IiwidmFyIG5leHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLng7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnggPSAoKSA9PiB7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLmUoOTAyKS50aGVuKG5leHQpO1xufTsiLCIvLyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkuXG5cbmltcG9ydCB7ZXhwb3J0RURBfSBmcm9tICcuLi8uLi93YXNtL0VEQUZvcldlYldvcmtlcic7XG5pbXBvcnQge2NwcFdyYXBwZXJ9IGZyb20gJy4uLy4uL3dhc20vY2FsbFdhc21Gb3JXZWJXb3JrZXIuanMnO1xuXG5vbm1lc3NhZ2UgPSBhc3luYyBmdW5jdGlvbiAoZXZ0KSB7XG4gIGV4cG9ydEVEQSgpLnRoZW4obW9kdWxlID0+IFxuICAgIHtcbiAgICAgIGxldCBhcmdzID0gZXZ0LmRhdGE7XG4gICAgICBsZXQgcmVzdWx0ID0gY3BwV3JhcHBlcihtb2R1bGUsIGFyZ3MsICdlcnJvcicsICdudW1iZXInKTtcbiAgICAgIHBvc3RNZXNzYWdlKHsnY2FsbFJlc3VsdCc6IHJlc3VsdCwgJ2FyZ3MnOiBhcmdzfSk7XG4gICAgfSApXG59IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG5cdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbl9fd2VicGFja19yZXF1aXJlX18ubSA9IF9fd2VicGFja19tb2R1bGVzX187XG5cbi8vIHRoZSBzdGFydHVwIGZ1bmN0aW9uXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnggPSAoKSA9PiB7XG5cdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuXHQvLyBUaGlzIGVudHJ5IG1vZHVsZSBkZXBlbmRzIG9uIG90aGVyIGxvYWRlZCBjaHVua3MgYW5kIGV4ZWN1dGlvbiBuZWVkIHRvIGJlIGRlbGF5ZWRcblx0dmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLk8odW5kZWZpbmVkLCBbOTAyXSwgKCkgPT4gKF9fd2VicGFja19yZXF1aXJlX18oOTEwKSkpXG5cdF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLk8oX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cdHJldHVybiBfX3dlYnBhY2tfZXhwb3J0c19fO1xufTtcblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5hbWRPID0ge307IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5mID0ge307XG4vLyBUaGlzIGZpbGUgY29udGFpbnMgb25seSB0aGUgZW50cnkgY2h1bmsuXG4vLyBUaGUgY2h1bmsgbG9hZGluZyBmdW5jdGlvbiBmb3IgYWRkaXRpb25hbCBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18uZSA9IChjaHVua0lkKSA9PiB7XG5cdHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmYpLnJlZHVjZSgocHJvbWlzZXMsIGtleSkgPT4ge1xuXHRcdF9fd2VicGFja19yZXF1aXJlX18uZltrZXldKGNodW5rSWQsIHByb21pc2VzKTtcblx0XHRyZXR1cm4gcHJvbWlzZXM7XG5cdH0sIFtdKSk7XG59OyIsIi8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rcyBhbmQgc2libGluZyBjaHVua3MgZm9yIHRoZSBlbnRyeXBvaW50XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmhtZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlID0gT2JqZWN0LmNyZWF0ZShtb2R1bGUpO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0c2V0OiAoKSA9PiB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0VTIE1vZHVsZXMgbWF5IG5vdCBhc3NpZ24gbW9kdWxlLmV4cG9ydHMgb3IgZXhwb3J0cy4qLCBVc2UgRVNNIGV4cG9ydCBzeW50YXgsIGluc3RlYWQ6ICcgKyBtb2R1bGUuaWQpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICFzY3JpcHRVcmwpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBzZWxmLmxvY2F0aW9uICsgXCJcIjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBjaHVua3Ncbi8vIFwiMVwiIG1lYW5zIFwiYWxyZWFkeSBsb2FkZWRcIlxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0OTEwOiAxXG59O1xuXG4vLyBpbXBvcnRTY3JpcHRzIGNodW5rIGxvYWRpbmdcbnZhciBpbnN0YWxsQ2h1bmsgPSAoZGF0YSkgPT4ge1xuXHR2YXIgW2NodW5rSWRzLCBtb3JlTW9kdWxlcywgcnVudGltZV0gPSBkYXRhO1xuXHRmb3IodmFyIG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHtcblx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubVttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07XG5cdFx0fVxuXHR9XG5cdGlmKHJ1bnRpbWUpIHJ1bnRpbWUoX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cdHdoaWxlKGNodW5rSWRzLmxlbmd0aClcblx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZHMucG9wKCldID0gMTtcblx0cGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24oZGF0YSk7XG59O1xuX193ZWJwYWNrX3JlcXVpcmVfXy5mLmkgPSAoY2h1bmtJZCwgcHJvbWlzZXMpID0+IHtcblx0Ly8gXCIxXCIgaXMgdGhlIHNpZ25hbCBmb3IgXCJhbHJlYWR5IGxvYWRlZFwiXG5cdGlmKCFpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtcblx0XHRpZih0cnVlKSB7IC8vIGFsbCBjaHVua3MgaGF2ZSBKU1xuXHRcdFx0aW1wb3J0U2NyaXB0cyhfX3dlYnBhY2tfcmVxdWlyZV9fLnAgKyBfX3dlYnBhY2tfcmVxdWlyZV9fLnUoY2h1bmtJZCkpO1xuXHRcdH1cblx0fVxufTtcblxudmFyIGNodW5rTG9hZGluZ0dsb2JhbCA9IHNlbGZbXCJ3ZWJwYWNrQ2h1bmtlZGFcIl0gPSBzZWxmW1wid2VicGFja0NodW5rZWRhXCJdIHx8IFtdO1xudmFyIHBhcmVudENodW5rTG9hZGluZ0Z1bmN0aW9uID0gY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2guYmluZChjaHVua0xvYWRpbmdHbG9iYWwpO1xuY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2ggPSBpbnN0YWxsQ2h1bms7XG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3QiLCIvLyBydW4gc3RhcnR1cFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLngoKTtcbiJdLCJuYW1lcyI6WyJkZWZlcnJlZCIsIm5leHQiLCJvbm1lc3NhZ2UiLCJhc3luYyIsImV2dCIsInRoZW4iLCJtb2R1bGUiLCJhcmdzIiwiZGF0YSIsInJlc3VsdCIsInBvc3RNZXNzYWdlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwidW5kZWZpbmVkIiwiZXhwb3J0cyIsImlkIiwibG9hZGVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIm0iLCJ4IiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsIk8iLCJhbWRPIiwiY2h1bmtJZHMiLCJmbiIsInByaW9yaXR5Iiwibm90RnVsZmlsbGVkIiwiSW5maW5pdHkiLCJpIiwibGVuZ3RoIiwiZnVsZmlsbGVkIiwiaiIsIk9iamVjdCIsImtleXMiLCJldmVyeSIsImtleSIsInNwbGljZSIsInIiLCJkIiwiZGVmaW5pdGlvbiIsIm8iLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJmIiwiZSIsImNodW5rSWQiLCJQcm9taXNlIiwiYWxsIiwicmVkdWNlIiwicHJvbWlzZXMiLCJ1IiwiZyIsImdsb2JhbFRoaXMiLCJ0aGlzIiwiRnVuY3Rpb24iLCJ3aW5kb3ciLCJobWQiLCJjcmVhdGUiLCJjaGlsZHJlbiIsInNldCIsIkVycm9yIiwib2JqIiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInNjcmlwdFVybCIsImltcG9ydFNjcmlwdHMiLCJsb2NhdGlvbiIsImRvY3VtZW50IiwiY3VycmVudFNjcmlwdCIsInNyYyIsInNjcmlwdHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInJlcGxhY2UiLCJwIiwiYiIsInNlbGYiLCJpbnN0YWxsZWRDaHVua3MiLCJjaHVua0xvYWRpbmdHbG9iYWwiLCJwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbiIsInB1c2giLCJiaW5kIiwibW9yZU1vZHVsZXMiLCJydW50aW1lIiwicG9wIl0sInNvdXJjZVJvb3QiOiIifQ==