var M=Object.create;var d=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var S=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var W=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of x(t))!j.call(e,i)&&i!==n&&d(e,i,{get:()=>t[i],enumerable:!(r=F(t,i))||r.enumerable});return e};var H=(e,t,n)=>(n=e!=null?M(N(e)):{},W(t||!e||!e.__esModule?d(n,"default",{value:e,enumerable:!0}):n,e));var C=S((Z,v)=>{"use strict";var a=typeof Reflect=="object"?Reflect:null,h=a&&typeof a.apply=="function"?a.apply:function(t,n,r){return Function.prototype.apply.call(t,n,r)},l;a&&typeof a.ownKeys=="function"?l=a.ownKeys:Object.getOwnPropertySymbols?l=function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:l=function(t){return Object.getOwnPropertyNames(t)};function K(e){console&&console.warn&&console.warn(e)}var O=Number.isNaN||function(t){return t!==t};function s(){s.init.call(this)}v.exports=s;v.exports.once=B;s.EventEmitter=s;s.prototype._events=void 0;s.prototype._eventsCount=0;s.prototype._maxListeners=void 0;var _=10;function p(e){if(typeof e!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return _},set:function(e){if(typeof e!="number"||e<0||O(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");_=e}});s.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};s.prototype.setMaxListeners=function(t){if(typeof t!="number"||t<0||O(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this._maxListeners=t,this};function D(e){return e._maxListeners===void 0?s.defaultMaxListeners:e._maxListeners}s.prototype.getMaxListeners=function(){return D(this)};s.prototype.emit=function(t){for(var n=[],r=1;r0&&(o=n[0]),o instanceof Error)throw o;var u=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw u.context=o,u}var c=f[t];if(c===void 0)return!1;if(typeof c=="function")h(c,this,n);else for(var L=c.length,b=R(c,L),r=0;r0&&o.length>i&&!o.warned){o.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=e,u.type=t,u.count=o.length,K(u)}return e}s.prototype.addListener=function(t,n){return m(this,t,n,!1)};s.prototype.on=s.prototype.addListener;s.prototype.prependListener=function(t,n){return m(this,t,n,!0)};function k(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function y(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=k.bind(r);return i.listener=n,r.wrapFn=i,i}s.prototype.once=function(t,n){return p(n),this.on(t,y(this,t,n)),this};s.prototype.prependOnceListener=function(t,n){return p(n),this.prependListener(t,y(this,t,n)),this};s.prototype.removeListener=function(t,n){var r,i,f,o,u;if(p(n),i=this._events,i===void 0)return this;if(r=i[t],r===void 0)return this;if(r===n||r.listener===n)--this._eventsCount===0?this._events=Object.create(null):(delete i[t],i.removeListener&&this.emit("removeListener",t,r.listener||n));else if(typeof r!="function"){for(f=-1,o=r.length-1;o>=0;o--)if(r[o]===n||r[o].listener===n){u=r[o].listener,f=o;break}if(f<0)return this;f===0?r.shift():T(r,f),r.length===1&&(i[t]=r[0]),i.removeListener!==void 0&&this.emit("removeListener",t,u||n)}return this};s.prototype.off=s.prototype.removeListener;s.prototype.removeAllListeners=function(t){var n,r,i;if(r=this._events,r===void 0)return this;if(r.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):r[t]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete r[t]),this;if(arguments.length===0){var f=Object.keys(r),o;for(i=0;i=0;i--)this.removeListener(t,n[i]);return this};function A(e,t,n){var r=e._events;if(r===void 0)return[];var i=r[t];return i===void 0?[]:typeof i=="function"?n?[i.listener||i]:[i]:n?U(i):R(i,i.length)}s.prototype.listeners=function(t){return A(this,t,!0)};s.prototype.rawListeners=function(t){return A(this,t,!1)};s.listenerCount=function(e,t){return typeof e.listenerCount=="function"?e.listenerCount(t):I.call(e,t)};s.prototype.listenerCount=I;function I(e){var t=this._events;if(t!==void 0){var n=t[e];if(typeof n=="function")return 1;if(n!==void 0)return n.length}return 0}s.prototype.eventNames=function(){return this._eventsCount>0?l(this._events):[]};function R(e,t){for(var n=new Array(t),r=0;r(r[r.PAUSE=0]="PAUSE",r[r.PROVIDE_FILE=1]="PROVIDE_FILE",r[r.RESUME=2]="RESUME",r))(E||{});var w=new P.default,G=(e,t)=>(Object.assign(e,t),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:e}),e),ne=(e,t)=>{G(e,{uploadStatus:2}),self.postMessage({event:"OPERATION_FAILED",error:t})},re=()=>{w.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),w.once("OPERATION_FAILED",e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})},ie=e=>typeof e=="object"&&e!==null&&"action"in e&&Object.values(E).includes(e.action);export{w as events,re as init,ie as isWorkerActionMessage,ne as sendFileError,G as updateFile}; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi8uLi9zcmMvd29ya2VyL3NoYXJlZC50cyIsICIuLi8uLi9zcmMvZW51bS93b3JrZXItYWN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIiwgImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgV09SS0VSX0FDVElPTiB9IGZyb20gXCJ+L2VudW0vd29ya2VyLWFjdGlvbi50c1wiO1xuaW1wb3J0IHR5cGUgeyBMdWZpRmlsZSB9IGZyb20gXCJ+L2VudGl0aWVzL2x1ZmktZmlsZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJBY3Rpb25NZXNzYWdlIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1hY3Rpb24tbWVzc2FnZS50c1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBVUExPQURfU1RBVFVTIH0gZnJvbSBcIn4vZW51bS9maWxlLXN0YXR1cy50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJFdmVudCB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItZXZlbnQudHNcIjtcblxuZGVjbGFyZSBsZXQgc2VsZjogV29ya2VyO1xuXG5leHBvcnQgY29uc3QgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4vKipcbiAqIFVwZGF0ZSBmaWxlIGluIHdvcmtlcnMgYW5kIHByb3ZpZGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgbWFpbiB0aHJlYWRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEBwYXJhbSBhcmdzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsZSA9IChsdWZpRmlsZTogTHVmaUZpbGUsIGFyZ3M6IFBhcnRpYWw8THVmaUZpbGU+KSA9PiB7XG4gIE9iamVjdC5hc3NpZ24obHVmaUZpbGUsIGFyZ3MpO1xuXG4gIGlmICh0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIGV2ZW50OiBFVkVOVC5GSUxFX1VQREFURUQsXG4gICAgICBsdWZpRmlsZSxcbiAgICB9IGFzIFdvcmtlckV2ZW50KTtcbiAgfVxuXG4gIHJldHVybiBsdWZpRmlsZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZW5kRmlsZUVycm9yID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSwgZXJyb3I6IEVycm9yKSA9PiB7XG4gIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHsgdXBsb2FkU3RhdHVzOiBVUExPQURfU1RBVFVTLkZBSUxFRCB9KTtcblxuICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yIH0gYXMgV29ya2VyRXZlbnQpO1xufTtcblxuLyoqXG4gKiBJbml0IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggY2hpbGQgd29ya2VyJ3Mgb25tZXNzYWdlIGV2ZW50LlxuICovXG5leHBvcnQgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRU5FRCwgKCkgPT4ge1xuICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgZXZlbnQ6IEVWRU5ULlNPQ0tFVF9PUEVORUQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGV2ZW50cy5vbmNlKEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1dvcmtlckFjdGlvbk1lc3NhZ2UgPSAoXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIG1lc3NhZ2U6IGFueSxcbik6IG1lc3NhZ2UgaXMgV29ya2VyQWN0aW9uTWVzc2FnZSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG1lc3NhZ2UgPT09IFwib2JqZWN0XCIgJiZcbiAgICBtZXNzYWdlICE9PSBudWxsICYmXG4gICAgXCJhY3Rpb25cIiBpbiBtZXNzYWdlICYmXG4gICAgT2JqZWN0LnZhbHVlcyhXT1JLRVJfQUNUSU9OKS5pbmNsdWRlcyhtZXNzYWdlLmFjdGlvbilcbiAgKTtcbn07XG4iLCAiZXhwb3J0IGVudW0gV09SS0VSX0FDVElPTiB7XG4gIFBBVVNFLFxuICBQUk9WSURFX0ZJTEUsXG4gIFJFU1VNRSxcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJ5Z0JBQUEsSUFBQUEsRUFBQUMsRUFBQSxDQUFBQyxFQUFBQyxJQUFBLGNBdUJBLElBQUlDLEVBQUksT0FBTyxTQUFZLFNBQVcsUUFBVSxLQUM1Q0MsRUFBZUQsR0FBSyxPQUFPQSxFQUFFLE9BQVUsV0FDdkNBLEVBQUUsTUFDRixTQUFzQkUsRUFBUUMsRUFBVUMsRUFBTSxDQUM5QyxPQUFPLFNBQVMsVUFBVSxNQUFNLEtBQUtGLEVBQVFDLEVBQVVDLENBQUksQ0FDN0QsRUFFRUMsRUFDQUwsR0FBSyxPQUFPQSxFQUFFLFNBQVksV0FDNUJLLEVBQWlCTCxFQUFFLFFBQ1YsT0FBTyxzQkFDaEJLLEVBQWlCLFNBQXdCSCxFQUFRLENBQy9DLE9BQU8sT0FBTyxvQkFBb0JBLENBQU0sRUFDckMsT0FBTyxPQUFPLHNCQUFzQkEsQ0FBTSxDQUFDLENBQ2hELEVBRUFHLEVBQWlCLFNBQXdCSCxFQUFRLENBQy9DLE9BQU8sT0FBTyxvQkFBb0JBLENBQU0sQ0FDMUMsRUFHRixTQUFTSSxFQUFtQkMsRUFBUyxDQUMvQixTQUFXLFFBQVEsTUFBTSxRQUFR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Q0FDZixxQkFDQSxTQUFBRCxDQUNGLENBQWdCLEVBR1hBLEdBR0lFLEdBQWdCLENBQUNGLEVBQW9CRyxJQUFpQixDQUNqRUosRUFBV0MsRUFBVSxDQUFFLGNBQW1DLENBQUMsRUFFM0QsS0FBSyxZQUFZLENBQUUseUJBQStCLE1BQUFHLENBQU0sQ0FBZ0IsQ0FDMUUsRUFLYUMsR0FBTyxJQUFNLENBQ3hCUCxFQUFPLHFCQUEwQixJQUFNLENBQ3JDLEtBQUssWUFBWSxDQUNmLHFCQUNGLENBQUMsQ0FDSCxDQUFDLEVBRURBLEVBQU8sd0JBQThCTSxHQUFpQixDQUNwRCxLQUFLLFlBQVksQ0FBRSx5QkFBK0IsTUFBQUEsQ0FBTSxDQUFDLENBQzNELENBQUMsQ0FDSCxFQUVhRSxHQUVYQyxHQUdFLE9BQU9BLEdBQVksVUFDbkJBLElBQVksTUFDWixXQUFZQSxHQUNaLE9BQU8sT0FBT0MsQ0FBYSxFQUFFLFNBQVNELEVBQVEsTUFBTSIsCiAgIm5hbWVzIjogWyJyZXF1aXJlX2V2ZW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlIiLCAiUmVmbGVjdEFwcGx5IiwgInRhcmdldCIsICJyZWNlaXZlciIsICJhcmdzIiwgIlJlZmxlY3RPd25LZXlzIiwgIlByb2Nlc3NFbWl0V2FybmluZyIsICJ3YXJuaW5nIiwgIk51bWJlcklzTmFOIiwgInZhbHVlIiwgIkV2ZW50RW1pdHRlciIsICJvbmNlIiwgImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCAiY2hlY2tMaXN0ZW5lciIsICJsaXN0ZW5lciIsICJhcmciLCAibiIsICJfZ2V0TWF4TGlzdGVuZXJzIiwgInRoYXQiLCAidHlwZSIsICJpIiwgImRvRXJyb3IiLCAiZXZlbnRzIiwgImVyIiwgImVyciIsICJoYW5kbGVyIiwgImxlbiIsICJsaXN0ZW5lcnMiLCAiYXJyYXlDbG9uZSIsICJfYWRkTGlzdGVuZXIiLCAicHJlcGVuZCIsICJtIiwgImV4aXN0aW5nIiwgInciLCAib25jZVdyYXBwZXIiLCAiX29uY2VXcmFwIiwgInN0YXRlIiwgIndyYXBwZWQiLCAibGlzdCIsICJwb3NpdGlvbiIsICJvcmlnaW5hbExpc3RlbmVyIiwgInNwbGljZU9uZSIsICJrZXlzIiwgImtleSIsICJfbGlzdGVuZXJzIiwgInVud3JhcCIsICJldmxpc3RlbmVyIiwgInVud3JhcExpc3RlbmVycyIsICJlbWl0dGVyIiwgImxpc3RlbmVyQ291bnQiLCAiYXJyIiwgImNvcHkiLCAiaW5kZXgiLCAicmV0IiwgIm5hbWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZXJyb3JMaXN0ZW5lciIsICJyZXNvbHZlciIsICJldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIiLCAiYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIiLCAiZmxhZ3MiLCAid3JhcExpc3RlbmVyIiwgImltcG9ydF9ldmVudHMiLCAiV09SS0VSX0FDVElPTiIsICJldmVudHMiLCAiRXZlbnRFbWl0dGVyIiwgInVwZGF0ZUZpbGUiLCAibHVmaUZpbGUiLCAiYXJncyIsICJzZW5kRmlsZUVycm9yIiwgImVycm9yIiwgImluaXQiLCAiaXNXb3JrZXJBY3Rpb25NZXNzYWdlIiwgIm1lc3NhZ2UiLCAiV09SS0VSX0FDVElPTiJdCn0K