| Server IP : 82.208.35.60 / Your IP : 216.73.216.89 Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31 System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64 User : studiokobylisy_cz ( 1008) PHP Version : 7.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/air-sport_cz/www/admin939wizxmp/themes/new-theme/public/ |
Upload File : |
/*! For license information please see invoices.bundle.js.LICENSE.txt */
(()=>{var e={54563:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(38264);var r=window.$,o=function e(){var t=r("body").find(".bootstrap-datetimepicker-widget:last");if(!(t.length<=0)){var n=t.offset(),o=t.outerHeight(),i=(t.outerHeight(!0)-o)/2;t.appendTo("body");var s=n.top+i;t.hasClass("top")&&(s+=o-t.outerHeight(!0)-i),t.css({position:"absolute",top:s,bottom:"auto",left:n.left,right:"auto"}),r(window).on("resize",e)}};t.default=function(){var e=r('.datepicker input[type="text"]');r.each(e,(function(e,t){r(t).datetimepicker({locale:window.full_language_code,format:r(t).data("format")?r(t).data("format"):"YYYY-MM-DD",sideBySide:!0,icons:{time:"time",date:"date",up:"up",down:"down"}}).on("dp.show",o).on("dp.hide",(function(){r(window).off("resize",o)})).on("dp.change",(function(e){var t=new CustomEvent("datepickerChange",e);window.document.dispatchEvent(t)}))}))}},76544:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EventEmitter=void 0;var r,o=(r=n(17187))&&r.__esModule?r:{default:r},i=t.EventEmitter=new o.default;t.default=i},92526:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=s(n(99663)),o=s(n(22600)),i=n(76544);function s(e){return e&&e.__esModule?e:{default:e}}var a=window.$,u=function(){function e(t){var n=this;(0,r.default)(this,e);var o=t||{};return this.localeItemSelector=o.localeItemSelector||".js-locale-item",this.localeButtonSelector=o.localeButtonSelector||".js-locale-btn",this.localeInputSelector=o.localeInputSelector||".js-locale-input",this.selectedLocale=a(this.localeItemSelector).data("locale"),a("body").on("click",this.localeItemSelector,this.toggleLanguage.bind(this)),i.EventEmitter.on("languageSelected",this.toggleInputs.bind(this)),{localeItemSelector:this.localeItemSelector,localeButtonSelector:this.localeButtonSelector,localeInputSelector:this.localeInputSelector,refreshFormInputs:function(e){n.refreshInputs(e)},getSelectedLocale:function(){return n.selectedLocale}}}return(0,o.default)(e,[{key:"refreshInputs",value:function(e){this.selectedLocale&&i.EventEmitter.emit("languageSelected",{selectedLocale:this.selectedLocale,form:e})}},{key:"toggleLanguage",value:function(e){var t=a(e.target),n=t.closest("form");this.selectedLocale=t.data("locale"),this.refreshInputs(n)}},{key:"toggleInputs",value:function(e){var t=e.form;this.selectedLocale=e.selectedLocale;var n=t.find(this.localeButtonSelector),r=n.data("change-language-url");n.text(this.selectedLocale),t.find(this.localeInputSelector).addClass("d-none"),t.find(this.localeInputSelector+".js-locale-"+this.selectedLocale).removeClass("d-none"),r&&this.saveSelectedLanguage(r,this.selectedLocale)}},{key:"saveSelectedLanguage",value:function(e,t){a.post({url:e,data:{language_iso_code:t}})}}]),e}();t.default=u},32242:(e,t,n)=>{e.exports={default:n(33391),__esModule:!0}},99663:(e,t)=>{"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},22600:(e,t,n)=>{"use strict";t.__esModule=!0;var r,o=(r=n(32242))&&r.__esModule?r:{default:r};t.default=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),(0,o.default)(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}()},33391:(e,t,n)=>{n(31477);var r=n(34579).Object;e.exports=function(e,t,n){return r.defineProperty(e,t,n)}},85663:e=>{e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},12159:(e,t,n)=>{var r=n(36727);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},34579:e=>{var t=e.exports={version:"2.6.11"};"number"==typeof __e&&(__e=t)},19216:(e,t,n)=>{var r=n(85663);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},89666:(e,t,n)=>{e.exports=!n(7929)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},97467:(e,t,n)=>{var r=n(36727),o=n(33938).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},83856:(e,t,n)=>{var r=n(33938),o=n(34579),i=n(19216),s=n(41818),a=n(27069),u=function(e,t,n){var c,l,f,h=e&u.F,p=e&u.G,d=e&u.S,v=e&u.P,y=e&u.B,m=e&u.W,g=p?o:o[t]||(o[t]={}),_=g.prototype,b=p?r:d?r[t]:(r[t]||{}).prototype;for(c in p&&(n=t),n)(l=!h&&b&&void 0!==b[c])&&a(g,c)||(f=l?b[c]:n[c],g[c]=p&&"function"!=typeof b[c]?n[c]:y&&l?i(f,r):m&&b[c]==f?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(f):v&&"function"==typeof f?i(Function.call,f):f,v&&((g.virtual||(g.virtual={}))[c]=f,e&u.R&&_&&!_[c]&&s(_,c,f)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,e.exports=u},7929:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},33938:e=>{var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},27069:e=>{var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},41818:(e,t,n)=>{var r=n(4743),o=n(83101);e.exports=n(89666)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},33758:(e,t,n)=>{e.exports=!n(89666)&&!n(7929)((function(){return 7!=Object.defineProperty(n(97467)("div"),"a",{get:function(){return 7}}).a}))},36727:e=>{e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},4743:(e,t,n)=>{var r=n(12159),o=n(33758),i=n(33206),s=Object.defineProperty;t.f=n(89666)?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},83101:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},33206:(e,t,n)=>{var r=n(36727);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},31477:(e,t,n)=>{var r=n(83856);r(r.S+r.F*!n(89666),"Object",{defineProperty:n(4743).f})},17187:e=>{"use strict";var t,n="object"==typeof Reflect?Reflect:null,r=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}e.exports=i,i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var s=10;function a(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function u(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function c(e,t,n,r){var o,i,s,c;if(a(n),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),i=e._events),s=i[t]),void 0===s)s=i[t]=n,++e._eventsCount;else if("function"==typeof s?s=i[t]=r?[n,s]:[s,n]:r?s.unshift(n):s.push(n),(o=u(e))>0&&s.length>o&&!s.warned){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=s.length,c=l,console&&console.warn&&console.warn(c)}return e}function l(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=l.bind(r);return o.listener=n,r.wrapFn=o,o}function h(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(o):d(o,o.length)}function p(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function d(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return s},set:function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");s=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return u(this)},i.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var o="error"===e,i=this._events;if(void 0!==i)o=o&&void 0===i.error;else if(!o)return!1;if(o){var s;if(t.length>0&&(s=t[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var u=i[e];if(void 0===u)return!1;if("function"==typeof u)r(u,this,t);else{var c=u.length,l=d(u,c);for(n=0;n<c;++n)r(l[n],this,t)}return!0},i.prototype.addListener=function(e,t){return c(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return c(this,e,t,!0)},i.prototype.once=function(e,t){return a(t),this.on(e,f(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return a(t),this.prependListener(e,f(this,e,t)),this},i.prototype.removeListener=function(e,t){var n,r,o,i,s;if(a(t),void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(o=-1,i=n.length-1;i>=0;i--)if(n[i]===t||n[i].listener===t){s=n[i].listener,o=i;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,o),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit("removeListener",e,s||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var o,i=Object.keys(n);for(r=0;r<i.length;++r)"removeListener"!==(o=i[r])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=0;r--)this.removeListener(e,t[r]);return this},i.prototype.listeners=function(e){return h(this,e,!0)},i.prototype.rawListeners=function(e){return h(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},i.prototype.listenerCount=p,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},38264:function(e,t,n){!function(e){var t=function(){try{return!!Symbol.iterator}catch(e){return!1}}(),n=function(e){var n={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t&&(n[Symbol.iterator]=function(){return n}),n},r=function(e){return encodeURIComponent(e).replace(/%20/g,"+")},o=function(e){return decodeURIComponent(String(e).replace(/\+/g," "))};(function(){try{var t=e.URLSearchParams;return"a=1"===new t("?a=1").toString()&&"function"==typeof t.prototype.set}catch(e){return!1}})()||function(){var o=function(e){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var t=typeof e;if("undefined"===t);else if("string"===t)""!==e&&this._fromString(e);else if(e instanceof o){var n=this;e.forEach((function(e,t){n.append(t,e)}))}else{if(null===e||"object"!==t)throw new TypeError("Unsupported input's type for URLSearchParams");if("[object Array]"===Object.prototype.toString.call(e))for(var r=0;r<e.length;r++){var i=e[r];if("[object Array]"!==Object.prototype.toString.call(i)&&2===i.length)throw new TypeError("Expected [string, any] as entry at index "+r+" of URLSearchParams's input");this.append(i[0],i[1])}else for(var s in e)e.hasOwnProperty(s)&&this.append(s,e[s])}},i=o.prototype;i.append=function(e,t){e in this._entries?this._entries[e].push(String(t)):this._entries[e]=[String(t)]},i.delete=function(e){delete this._entries[e]},i.get=function(e){return e in this._entries?this._entries[e][0]:null},i.getAll=function(e){return e in this._entries?this._entries[e].slice(0):[]},i.has=function(e){return e in this._entries},i.set=function(e,t){this._entries[e]=[String(t)]},i.forEach=function(e,t){var n;for(var r in this._entries)if(this._entries.hasOwnProperty(r)){n=this._entries[r];for(var o=0;o<n.length;o++)e.call(t,n[o],r,this)}},i.keys=function(){var e=[];return this.forEach((function(t,n){e.push(n)})),n(e)},i.values=function(){var e=[];return this.forEach((function(t){e.push(t)})),n(e)},i.entries=function(){var e=[];return this.forEach((function(t,n){e.push([n,t])})),n(e)},t&&(i[Symbol.iterator]=i.entries),i.toString=function(){var e=[];return this.forEach((function(t,n){e.push(r(n)+"="+r(t))})),e.join("&")},e.URLSearchParams=o}();var i=e.URLSearchParams.prototype;"function"!=typeof i.sort&&(i.sort=function(){var e=this,t=[];this.forEach((function(n,r){t.push([r,n]),e._entries||e.delete(r)})),t.sort((function(e,t){return e[0]<t[0]?-1:e[0]>t[0]?1:0})),e._entries&&(e._entries={});for(var n=0;n<t.length;n++)this.append(t[n][0],t[n][1])}),"function"!=typeof i._fromString&&Object.defineProperty(i,"_fromString",{enumerable:!1,configurable:!1,writable:!1,value:function(e){if(this._entries)this._entries={};else{var t=[];this.forEach((function(e,n){t.push(n)}));for(var n=0;n<t.length;n++)this.delete(t[n])}var r,i=(e=e.replace(/^\?/,"")).split("&");for(n=0;n<i.length;n++)r=i[n].split("="),this.append(o(r[0]),r.length>1?o(r[1]):"")}})}(void 0!==n.g?n.g:"undefined"!=typeof window?window:"undefined"!=typeof self?self:this),function(e){var t,n,r;if(function(){try{var t=new e.URL("b","http://a");return t.pathname="c d","http://a/c%20d"===t.href&&t.searchParams}catch(e){return!1}}()||(t=e.URL,r=(n=function(t,n){"string"!=typeof t&&(t=String(t));var r,o=document;if(n&&(void 0===e.location||n!==e.location.href)){(r=(o=document.implementation.createHTMLDocument("")).createElement("base")).href=n,o.head.appendChild(r);try{if(0!==r.href.indexOf(n))throw new Error(r.href)}catch(e){throw new Error("URL unable to set base "+n+" due to "+e)}}var i=o.createElement("a");if(i.href=t,r&&(o.body.appendChild(i),i.href=i.href),":"===i.protocol||!/:/.test(i.href))throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:i});var s=new e.URLSearchParams(this.search),a=!0,u=!0,c=this;["append","delete","set"].forEach((function(e){var t=s[e];s[e]=function(){t.apply(s,arguments),a&&(u=!1,c.search=s.toString(),u=!0)}})),Object.defineProperty(this,"searchParams",{value:s,enumerable:!0});var l=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==l&&(l=this.search,u&&(a=!1,this.searchParams._fromString(this.search),a=!0))}})}).prototype,["hash","host","hostname","port","protocol"].forEach((function(e){!function(e){Object.defineProperty(r,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:!0})}(e)})),Object.defineProperty(r,"search",{get:function(){return this._anchorElement.search},set:function(e){this._anchorElement.search=e,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(r,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(e){this._anchorElement.href=e,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(e){this._anchorElement.pathname=e},enumerable:!0},origin:{get:function(){var e={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],t=this._anchorElement.port!=e&&""!==this._anchorElement.port;return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(t?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(e){},enumerable:!0},username:{get:function(){return""},set:function(e){},enumerable:!0}}),n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)},n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)},e.URL=n),void 0!==e.location&&!("origin"in e.location)){var o=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:o,enumerable:!0})}catch(t){setInterval((function(){e.location.origin=o()}),100)}}}(void 0!==n.g?n.g:"undefined"!=typeof window?window:"undefined"!=typeof self?self:this)}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{"use strict";var e=r(n(54563)),t=r(n(92526));function r(e){return e&&e.__esModule?e:{default:e}}(0,window.$)((function(){(0,e.default)(),new t.default}))})(),window.invoices={}})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvdXRpbHMvZGF0ZXBpY2tlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL2V2ZW50LWVtaXR0ZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy90cmFuc2xhdGFibGUtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL3VybC1wb2x5ZmlsbC91cmwtcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL2ludm9pY2VzL2luZGV4LmpzIl0sIm5hbWVzIjpbIiQiLCJ3aW5kb3ciLCJyZXBsYWNlRGF0ZVBpY2tlciIsImRhdGVwaWNrZXJXaWRnZXQiLCJmaW5kIiwibGVuZ3RoIiwicG9zaXRpb24iLCJvZmZzZXQiLCJvcmlnaW5hbEhlaWdodCIsIm91dGVySGVpZ2h0IiwibWFyZ2luIiwiYXBwZW5kVG8iLCJ0b3AiLCJoYXNDbGFzcyIsImNzcyIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsIm9uIiwiJGRhdGVQaWNrZXJzIiwiZWFjaCIsImkiLCJwaWNrZXIiLCJkYXRldGltZXBpY2tlciIsImxvY2FsZSIsImZ1bGxfbGFuZ3VhZ2VfY29kZSIsImZvcm1hdCIsImRhdGEiLCJzaWRlQnlTaWRlIiwiaWNvbnMiLCJ0aW1lIiwiZGF0ZSIsInVwIiwiZG93biIsIm9mZiIsImUiLCJldmVudCIsIkN1c3RvbUV2ZW50IiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnRFbWl0dGVyIiwiRXZlbnRFbWl0dGVyQ2xhc3MiLCJUcmFuc2xhdGFibGVJbnB1dCIsIm9wdGlvbnMiLCJvcHRzIiwidGhpcyIsImxvY2FsZUl0ZW1TZWxlY3RvciIsImxvY2FsZUJ1dHRvblNlbGVjdG9yIiwibG9jYWxlSW5wdXRTZWxlY3RvciIsInNlbGVjdGVkTG9jYWxlIiwidG9nZ2xlTGFuZ3VhZ2UiLCJiaW5kIiwidG9nZ2xlSW5wdXRzIiwicmVmcmVzaEZvcm1JbnB1dHMiLCJmb3JtIiwicmVmcmVzaElucHV0cyIsImdldFNlbGVjdGVkTG9jYWxlIiwiZW1pdCIsImxvY2FsZUl0ZW0iLCJ0YXJnZXQiLCJjbG9zZXN0IiwibG9jYWxlQnV0dG9uIiwiY2hhbmdlTGFuZ3VhZ2VVcmwiLCJ0ZXh0IiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInNhdmVTZWxlY3RlZExhbmd1YWdlIiwicG9zdCIsInVybCIsImxhbmd1YWdlX2lzb19jb2RlIiwibW9kdWxlIiwiZXhwb3J0cyIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIlR5cGVFcnJvciIsIm9iaiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwia2V5IiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwicHJvdG90eXBlIiwiJE9iamVjdCIsIml0IiwiZGVzYyIsImRlZmluZVByb3BlcnR5IiwiaXNPYmplY3QiLCJjb3JlIiwidmVyc2lvbiIsIl9fZSIsImFGdW5jdGlvbiIsImZuIiwidGhhdCIsInVuZGVmaW5lZCIsImEiLCJjYWxsIiwiYiIsImMiLCJhcHBseSIsImFyZ3VtZW50cyIsIk9iamVjdCIsImdldCIsImlzIiwiY3JlYXRlRWxlbWVudCIsImdsb2JhbCIsImN0eCIsImhpZGUiLCJoYXMiLCIkZXhwb3J0IiwidHlwZSIsIm5hbWUiLCJzb3VyY2UiLCJvd24iLCJvdXQiLCJJU19GT1JDRUQiLCJGIiwiSVNfR0xPQkFMIiwiRyIsIklTX1NUQVRJQyIsIlMiLCJJU19QUk9UTyIsIlAiLCJJU19CSU5EIiwiQiIsIklTX1dSQVAiLCJXIiwiZXhwUHJvdG8iLCJDIiwiRnVuY3Rpb24iLCJ2aXJ0dWFsIiwiUiIsIlUiLCJleGVjIiwiTWF0aCIsInNlbGYiLCJfX2ciLCJoYXNPd25Qcm9wZXJ0eSIsImRQIiwiY3JlYXRlRGVzYyIsIm9iamVjdCIsInZhbHVlIiwiZiIsImFuT2JqZWN0IiwiSUU4X0RPTV9ERUZJTkUiLCJ0b1ByaW1pdGl2ZSIsIk8iLCJBdHRyaWJ1dGVzIiwiYml0bWFwIiwidmFsIiwidG9TdHJpbmciLCJ2YWx1ZU9mIiwiUmVmbGVjdE93bktleXMiLCJSZWZsZWN0IiwiUmVmbGVjdEFwcGx5IiwicmVjZWl2ZXIiLCJhcmdzIiwib3duS2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImdldE93blByb3BlcnR5TmFtZXMiLCJjb25jYXQiLCJOdW1iZXJJc05hTiIsIk51bWJlciIsImlzTmFOIiwiaW5pdCIsIl9ldmVudHMiLCJfZXZlbnRzQ291bnQiLCJfbWF4TGlzdGVuZXJzIiwiZGVmYXVsdE1heExpc3RlbmVycyIsImNoZWNrTGlzdGVuZXIiLCJsaXN0ZW5lciIsIl9nZXRNYXhMaXN0ZW5lcnMiLCJfYWRkTGlzdGVuZXIiLCJwcmVwZW5kIiwibSIsImV2ZW50cyIsImV4aXN0aW5nIiwid2FybmluZyIsImNyZWF0ZSIsIm5ld0xpc3RlbmVyIiwidW5zaGlmdCIsInB1c2giLCJ3YXJuZWQiLCJ3IiwiRXJyb3IiLCJTdHJpbmciLCJlbWl0dGVyIiwiY291bnQiLCJjb25zb2xlIiwid2FybiIsIm9uY2VXcmFwcGVyIiwiZmlyZWQiLCJyZW1vdmVMaXN0ZW5lciIsIndyYXBGbiIsIl9vbmNlV3JhcCIsInN0YXRlIiwid3JhcHBlZCIsIl9saXN0ZW5lcnMiLCJ1bndyYXAiLCJldmxpc3RlbmVyIiwiYXJyIiwicmV0IiwiQXJyYXkiLCJ1bndyYXBMaXN0ZW5lcnMiLCJhcnJheUNsb25lIiwibGlzdGVuZXJDb3VudCIsIm4iLCJjb3B5Iiwic2V0IiwiYXJnIiwiUmFuZ2VFcnJvciIsImdldFByb3RvdHlwZU9mIiwic2V0TWF4TGlzdGVuZXJzIiwiZ2V0TWF4TGlzdGVuZXJzIiwiZG9FcnJvciIsImVycm9yIiwiZXIiLCJlcnIiLCJtZXNzYWdlIiwiY29udGV4dCIsImhhbmRsZXIiLCJsZW4iLCJsaXN0ZW5lcnMiLCJhZGRMaXN0ZW5lciIsInByZXBlbmRMaXN0ZW5lciIsIm9uY2UiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwibGlzdCIsIm9yaWdpbmFsTGlzdGVuZXIiLCJzaGlmdCIsImluZGV4IiwicG9wIiwic3BsaWNlT25lIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwia2V5cyIsInJhd0xpc3RlbmVycyIsImV2ZW50TmFtZXMiLCJpdGVyYXRvclN1cHBvcnRlZCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY2hlY2tJZkl0ZXJhdG9ySXNTdXBwb3J0ZWQiLCJjcmVhdGVJdGVyYXRvciIsIml0ZW1zIiwibmV4dCIsImRvbmUiLCJzZXJpYWxpemVQYXJhbSIsImVuY29kZVVSSUNvbXBvbmVudCIsInJlcGxhY2UiLCJkZXNlcmlhbGl6ZVBhcmFtIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiVVJMU2VhcmNoUGFyYW1zIiwiY2hlY2tJZlVSTFNlYXJjaFBhcmFtc1N1cHBvcnRlZCIsInNlYXJjaFN0cmluZyIsInR5cGVvZlNlYXJjaFN0cmluZyIsIl9mcm9tU3RyaW5nIiwiX3RoaXMiLCJmb3JFYWNoIiwiYXBwZW5kIiwiZW50cnkiLCJwcm90byIsIl9lbnRyaWVzIiwiZGVsZXRlIiwiZ2V0QWxsIiwic2xpY2UiLCJjYWxsYmFjayIsInRoaXNBcmciLCJlbnRyaWVzIiwidmFsdWVzIiwic2VhcmNoQXJyYXkiLCJqb2luIiwicG9seWZpbGxVUkxTZWFyY2hQYXJhbXMiLCJzb3J0IiwiYXR0cmlidXRlIiwiYXR0cmlidXRlcyIsInNwbGl0IiwiZyIsIl9VUkwiLCJVUkwiLCJ1IiwicGF0aG5hbWUiLCJocmVmIiwic2VhcmNoUGFyYW1zIiwiY2hlY2tJZlVSTElzU3VwcG9ydGVkIiwiYmFzZSIsImJhc2VFbGVtZW50IiwiZG9jIiwibG9jYXRpb24iLCJpbXBsZW1lbnRhdGlvbiIsImNyZWF0ZUhUTUxEb2N1bWVudCIsImhlYWQiLCJhcHBlbmRDaGlsZCIsImluZGV4T2YiLCJhbmNob3JFbGVtZW50IiwiYm9keSIsInByb3RvY29sIiwidGVzdCIsInNlYXJjaCIsImVuYWJsZVNlYXJjaFVwZGF0ZSIsImVuYWJsZVNlYXJjaFBhcmFtc1VwZGF0ZSIsIm1ldGhvZE5hbWUiLCJtZXRob2QiLCJhdHRyaWJ1dGVOYW1lIiwiX2FuY2hvckVsZW1lbnQiLCJsaW5rVVJMV2l0aEFuY2hvckF0dHJpYnV0ZSIsIl91cGRhdGVTZWFyY2hQYXJhbXMiLCJleHBlY3RlZFBvcnQiLCJhZGRQb3J0VG9PcmlnaW4iLCJwb3J0IiwiaG9zdG5hbWUiLCJjcmVhdGVPYmplY3RVUkwiLCJibG9iIiwicmV2b2tlT2JqZWN0VVJMIiwiZ2V0T3JpZ2luIiwic2V0SW50ZXJ2YWwiLCJvcmlnaW4iLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2xvYmFsVGhpcyJdLCJtYXBwaW5ncyI6IjsyRkF3QkEsUyxJQUVPQSxFQUFLQyxPQUFMRCxFQUVERSxFQUFvQixTQUFwQkEsSUFDSixJQUFNQyxFQUFtQkgsRUFBRSxRQUFRSSxLQUNqQyx5Q0FHRixLQUFJRCxFQUFpQkUsUUFBVSxHQUEvQixDQUlBLElBQU1DLEVBQVdILEVBQWlCSSxTQUM1QkMsRUFBaUJMLEVBQWlCTSxjQUNsQ0MsR0FBVVAsRUFBaUJNLGFBQVksR0FBUUQsR0FBa0IsRUFHdkVMLEVBQWlCUSxTQUFTLFFBRzFCLElBQUlDLEVBQU1OLEVBQVNNLElBQU1GLEVBR3JCUCxFQUFpQlUsU0FBUyxTQUM1QkQsR0FBT0osRUFBaUJMLEVBQWlCTSxhQUFZLEdBQVFDLEdBRy9EUCxFQUFpQlcsSUFBSSxDQUNuQlIsU0FBVSxXQUNWTSxNQUNBRyxPQUFRLE9BQ1JDLEtBQU1WLEVBQVNVLEtBQ2ZDLE1BQU8sU0FHVGpCLEVBQUVDLFFBQVFpQixHQUFHLFNBQVVoQixLLFVBTVosV0FDWCxJQUFNaUIsRUFBZW5CLEVBQUUsa0NBQ3ZCQSxFQUFFb0IsS0FBS0QsR0FBYyxTQUFDRSxFQUFHQyxHQUN2QnRCLEVBQUVzQixHQUNDQyxlQUFlLENBQ2RDLE9BQVF2QixPQUFPd0IsbUJBQ2ZDLE9BQVExQixFQUFFc0IsR0FBUUssS0FBSyxVQUNuQjNCLEVBQUVzQixHQUFRSyxLQUFLLFVBQ2YsYUFDSkMsWUFBWSxFQUNaQyxNQUFPLENBQ0xD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R3BFNVAsRUFBT0MsUUNyQmYyUCxFQUFvQnpDLEVBQUksV0FDdkIsR0FBMEIsaUJBQWY2QyxXQUF5QixPQUFPQSxXQUMzQyxJQUNDLE9BQU96UixNQUFRLElBQUkwRixTQUFTLGNBQWIsR0FDZCxNQUFPcEcsR0FDUixHQUFzQixpQkFBWGxDLE9BQXFCLE9BQU9BLFFBTGpCLEcsbUJDeUJ4QixJLElBQUEsVSxJQUNBLFUsb0RBSUFELEVBRllDLE9BQUxELElBRUwsWUFDQSxlQUNBLElBQUkwQyxjIiwiZmlsZSI6Imludm9pY2VzLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmltcG9ydCAndXJsLXBvbHlmaWxsJztcblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG5jb25zdCByZXBsYWNlRGF0ZVBpY2tlciA9ICgpID0+IHtcbiAgY29uc3QgZGF0ZXBpY2tlcldpZGdldCA9ICQoJ2JvZHknKS5maW5kKFxuICAgICcuYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLXdpZGdldDpsYXN0JyxcbiAgKTtcblxuICBpZiAoZGF0ZXBpY2tlcldpZGdldC5sZW5ndGggPD0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBvc2l0aW9uID0gZGF0ZXBpY2tlcldpZGdldC5vZmZzZXQoKTtcbiAgY29uc3Qgb3JpZ2luYWxIZWlnaHQgPSBkYXRlcGlja2VyV2lkZ2V0Lm91dGVySGVpZ2h0KCk7XG4gIGNvbnN0IG1hcmdpbiA9IChkYXRlcGlja2VyV2lkZ2V0Lm91dGVySGVpZ2h0KHRydWUpIC0gb3JpZ2luYWxIZWlnaHQpIC8gMjtcblxuICAvLyBNb3ZlIGRhdGVwaWNrZXIgdG8gdGhlIGV4YWN0IHNhbWUgcGxhY2UgaXQgd2FzIGJ1dCBhdHRhY2hlZCB0byBib2R5XG4gIGRhdGVwaWNrZXJXaWRnZXQuYXBwZW5kVG8oJ2JvZHknKTtcblxuICAvLyBIZWlnaHQgY2hhbmdlZCBiZWNhdXNlIHRoZSBjc3MgZnJvbSBjb2x1bW4tZmlsdGVycyBpcyBub3QgYXBwbGllZCBhbnkgbW9yZVxuICBsZXQgdG9wID0gcG9zaXRpb24udG9wICsgbWFyZ2luO1xuXG4gIC8vIERhdGVwaWNrZXIgaXMgc2V0dGxlIHRvIHRoZSB0b3AgcG9zaXRpb25cbiAgaWYgKGRhdGVwaWNrZXJXaWRnZXQuaGFzQ2xhc3MoJ3RvcCcpKSB7XG4gICAgdG9wICs9IG9yaWdpbmFsSGVpZ2h0IC0gZGF0ZXBpY2tlcldpZGdldC5vdXRlckhlaWdodCh0cnVlKSAtIG1hcmdpbjtcbiAgfVxuXG4gIGRhdGVwaWNrZXJXaWRnZXQuY3NzKHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3AsXG4gICAgYm90dG9tOiAnYXV0bycsXG4gICAgbGVmdDogcG9zaXRpb24ubGVmdCxcbiAgICByaWdodDogJ2F1dG8nLFxuICB9KTtcblxuICAkKHdpbmRvdykub24oJ3Jlc2l6ZScsIHJlcGxhY2VEYXRlUGlja2VyKTtcbn07XG5cbi8qKlxuICogRW5hYmxlIGFsbCBkYXRlcGlja2Vycy5cbiAqL1xuY29uc3QgaW5pdCA9IGZ1bmN0aW9uIGluaXREYXRlUGlja2VycygpIHtcbiAgY29uc3QgJGRhdGVQaWNrZXJzID0gJCgnLmRhdGVwaWNrZXIgaW5wdXRbdHlwZT1cInRleHRcIl0nKTtcbiAgJC5lYWNoKCRkYXRlUGlja2VycywgKGksIHBpY2tlcikgPT4ge1xuICAgICQocGlja2VyKVxuICAgICAgLmRhdGV0aW1lcGlja2VyKHtcbiAgICAgICAgbG9jYWxlOiB3aW5kb3cuZnVsbF9sYW5ndWFnZV9jb2RlLFxuICAgICAgICBmb3JtYXQ6ICQocGlja2VyKS5kYXRhKCdmb3JtYXQnKVxuICAgICAgICAgID8gJChwaWNrZXIpLmRhdGEoJ2Zvcm1hdCcpXG4gICAgICAgICAgOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgIHNpZGVCeVNpZGU6IHRydWUsXG4gICAgICAgIGljb25zOiB7XG4gICAgICAgICAgdGltZTogJ3RpbWUnLFxuICAgICAgICAgIGRhdGU6ICdkYXRlJyxcbiAgICAgICAgICB1cDogJ3VwJyxcbiAgICAgICAgICBkb3duOiAnZG93bicsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLm9uKCdkcC5zaG93JywgcmVwbGFjZURhdGVQaWNrZXIpXG4gICAgICAub24oJ2RwLmhpZGUnLCAoKSA9PiB7XG4gICAgICAgICQod2luZG93KS5vZmYoJ3Jlc2l6ZScsIHJlcGxhY2VEYXRlUGlja2VyKTtcbiAgICAgIH0pXG4gICAgICAub24oJ2RwLmNoYW5nZScsIChlKSA9PiB7XG4gICAgICAgIC8vIExvb2tzIGxpa2Ugd2UgY2FuJ3QgYmluZCBhbiBldmVudCB0byBhIGRhdGVwaWNrZXIgc2VsZWN0ZWQgYWZ0ZXJ3aGlsZS5cbiAgICAgICAgLy8gU28gd2UgZW1pdCBhbiBldmVudCBvbiBjaGFuZ2UgdG8gbWFuaXB1bGF0ZSBkYXRhc1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgnZGF0ZXBpY2tlckNoYW5nZScsIGUpO1xuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgRXZlbnRFbWl0dGVyQ2xhc3MgZnJvbSAnZXZlbnRzJztcblxuLyoqXG4gKiBXZSBpbnN0YW5jaWF0ZSBvbmUgRXZlbnRFbWl0dGVyIChyZXN0cmljdGVkIHZpYSBhIGNvbnN0KSBzbyB0aGF0IGV2ZXJ5IGNvbXBvbmVudHNcbiAqIHJlZ2lzdGVyL2Rpc3BhdGNoIG9uIHRoZSBzYW1lIG9uZSBhbmQgY2FuIGNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlci5cbiAqL1xuZXhwb3J0IGNvbnN0IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXJDbGFzcygpO1xuXG5leHBvcnQgZGVmYXVsdCBFdmVudEVtaXR0ZXI7XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tICcuL2V2ZW50LWVtaXR0ZXInO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgdG9nZ2xlIHRyYW5zbGF0ZWQgaW5wdXRzIChkaXNwbGF5ZWQgd2l0aCBvbmVcbiAqIGlucHV0IGFuZCBhIGxhbmd1YWdlIHNlbGVjdG9yIHVzaW5nIHRoZSBUcmFuc2xhdGFibGVUeXBlIFN5bWZvbnkgZm9ybSB0eXBlKS5cbiAqIEFsc28gY29tcGF0aWJsZSB3aXRoIFRyYW5zbGF0YWJsZUZpZWxkIGNoYW5nZXMuXG4gKi9cbmNsYXNzIFRyYW5zbGF0YWJsZUlucHV0IHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgdGhpcy5sb2NhbGVJdGVtU2VsZWN0b3IgPSBvcHRzLmxvY2FsZUl0ZW1TZWxlY3RvciB8fCAnLmpzLWxvY2FsZS1pdGVtJztcbiAgICB0aGlzLmxvY2FsZUJ1dHRvblNlbGVjdG9yID0gb3B0cy5sb2NhbGVCdXR0b25TZWxlY3RvciB8fCAnLmpzLWxvY2FsZS1idG4nO1xuICAgIHRoaXMubG9jYWxlSW5wdXRTZWxlY3RvciA9IG9wdHMubG9jYWxlSW5wdXRTZWxlY3RvciB8fCAnLmpzLWxvY2FsZS1pbnB1dCc7XG4gICAgdGhpcy5zZWxlY3RlZExvY2FsZSA9ICQodGhpcy5sb2NhbGVJdGVtU2VsZWN0b3IpLmRhdGEoJ2xvY2FsZScpO1xuXG4gICAgJCgnYm9keScpLm9uKFxuICAgICAgJ2NsaWNrJyxcbiAgICAgIHRoaXMubG9jYWxlSXRlbVNlbGVjdG9yLFxuICAgICAgdGhpcy50b2dnbGVMYW5ndWFnZS5iaW5kKHRoaXMpLFxuICAgICk7XG4gICAgRXZlbnRFbWl0dGVyLm9uKCdsYW5ndWFnZVNlbGVjdGVkJywgdGhpcy50b2dnbGVJbnB1dHMuYmluZCh0aGlzKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9jYWxlSXRlbVNlbGVjdG9yOiB0aGlzLmxvY2FsZUl0ZW1TZWxlY3RvcixcbiAgICAgIGxvY2FsZUJ1dHRvblNlbGVjdG9yOiB0aGlzLmxvY2FsZUJ1dHRvblNlbGVjdG9yLFxuICAgICAgbG9jYWxlSW5wdXRTZWxlY3RvcjogdGhpcy5sb2NhbGVJbnB1dFNlbGVjdG9yLFxuXG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSB7alF1ZXJ5fSBmb3JtXG4gICAgICAgKi9cbiAgICAgIHJlZnJlc2hGb3JtSW5wdXRzOiAoZm9ybSkgPT4geyB0aGlzLnJlZnJlc2hJbnB1dHMoZm9ybSk7IH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9XG4gICAgICAgKi9cbiAgICAgIGdldFNlbGVjdGVkTG9jYWxlOiAoKSA9PiB0aGlzLnNlbGVjdGVkTG9jYWxlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtqUXVlcnl9IGZvcm1cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlZnJlc2hJbnB1dHMoZm9ybSkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZExvY2FsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIEV2ZW50RW1pdHRlci5lbWl0KCdsYW5ndWFnZVNlbGVjdGVkJywge1xuICAgICAgc2VsZWN0ZWRMb2NhbGU6IHRoaXMuc2VsZWN0ZWRMb2NhbGUsXG4gICAgICBmb3JtLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGV2ZW50IG9uIGxhbmd1YWdlIHNlbGVjdGlvbiB0byB1cGRhdGUgaW5wdXRzIGFuZCBvdGhlciBjb21wb25lbnRzIHdoaWNoIGRlcGVuZCBvbiB0aGUgbG9jYWxlLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRvZ2dsZUxhbmd1YWdlKGV2ZW50KSB7XG4gICAgY29uc3QgbG9jYWxlSXRlbSA9ICQoZXZlbnQudGFyZ2V0KTtcbiAgICBjb25zdCBmb3JtID0gbG9jYWxlSXRlbS5jbG9zZXN0KCdmb3JtJyk7XG4gICAgdGhpcy5zZWxlY3RlZExvY2FsZSA9IGxvY2FsZUl0ZW0uZGF0YSgnbG9jYWxlJyk7XG4gICAgdGhpcy5yZWZyZXNoSW5wdXRzKGZvcm0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBhbGwgdHJhbnNsYXRhYmxlIGlucHV0cyBpbiBmb3JtIGluIHdoaWNoIGxvY2FsZSB3YXMgY2hhbmdlZFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdG9nZ2xlSW5wdXRzKGV2ZW50KSB7XG4gICAgY29uc3Qge2Zvcm19ID0gZXZlbnQ7XG4gICAgdGhpcy5zZWxlY3RlZExvY2FsZSA9IGV2ZW50LnNlbGVjdGVkTG9jYWxlO1xuICAgIGNvbnN0IGxvY2FsZUJ1dHRvbiA9IGZvcm0uZmluZCh0aGlzLmxvY2FsZUJ1dHRvblNlbGVjdG9yKTtcbiAgICBjb25zdCBjaGFuZ2VMYW5ndWFnZVVybCA9IGxvY2FsZUJ1dHRvbi5kYXRhKCdjaGFuZ2UtbGFuZ3VhZ2UtdXJsJyk7XG5cbiAgICBsb2NhbGVCdXR0b24udGV4dCh0aGlzLnNlbGVjdGVkTG9jYWxlKTtcbiAgICBmb3JtLmZpbmQodGhpcy5sb2NhbGVJbnB1dFNlbGVjdG9yKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgZm9ybVxuICAgICAgLmZpbmQoYCR7dGhpcy5sb2NhbGVJbnB1dFNlbGVjdG9yfS5qcy1sb2NhbGUtJHt0aGlzLnNlbGVjdGVkTG9jYWxlfWApXG4gICAgICAucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuXG4gICAgaWYgKGNoYW5nZUxhbmd1YWdlVXJsKSB7XG4gICAgICB0aGlzLnNhdmVTZWxlY3RlZExhbmd1YWdlKGNoYW5nZUxhbmd1YWdlVXJsLCB0aGlzLnNlbGVjdGVkTG9jYWxlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBsYW5ndWFnZSBjaG9pY2UgZm9yIGVtcGxveWVlIGZvcm1zLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gY2hhbmdlTGFuZ3VhZ2VVcmxcbiAgICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdGVkTG9jYWxlXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzYXZlU2VsZWN0ZWRMYW5ndWFnZShjaGFuZ2VMYW5ndWFnZVVybCwgc2VsZWN0ZWRMb2NhbGUpIHtcbiAgICAkLnBvc3Qoe1xuICAgICAgdXJsOiBjaGFuZ2VMYW5ndWFnZVVybCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbGFuZ3VhZ2VfaXNvX2NvZGU6IHNlbGVjdGVkTG9jYWxlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUcmFuc2xhdGFibGVJbnB1dDtcbiIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2RlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWZpbmVQcm9wZXJ0eSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpOyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciAkT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gJE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjExJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgSVNfV1JBUCA9IHR5cGUgJiAkZXhwb3J0Llc7XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXTtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBrZXksIG93biwgb3V0O1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChvd24gJiYgaGFzKGV4cG9ydHMsIGtleSkpIGNvbnRpbnVlO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gb3duID8gdGFyZ2V0W2tleV0gOiBzb3VyY2Vba2V5XTtcbiAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcbiAgICBleHBvcnRzW2tleV0gPSBJU19HTE9CQUwgJiYgdHlwZW9mIHRhcmdldFtrZXldICE9ICdmdW5jdGlvbicgPyBzb3VyY2Vba2V5XVxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgOiBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbClcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlIHRoZW0gaW4gbGlicmFyeVxuICAgIDogSVNfV1JBUCAmJiB0YXJnZXRba2V5XSA9PSBvdXQgPyAoZnVuY3Rpb24gKEMpIHtcbiAgICAgIHZhciBGID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBDKSB7XG4gICAgICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgQygpO1xuICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IEMoYSk7XG4gICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQyhhLCBiKTtcbiAgICAgICAgICB9IHJldHVybiBuZXcgQyhhLCBiLCBjKTtcbiAgICAgICAgfSByZXR1cm4gQy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIEZbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcbiAgICAgIHJldHVybiBGO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIH0pKG91dCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUubWV0aG9kcy4lTkFNRSVcbiAgICBpZiAoSVNfUFJPVE8pIHtcbiAgICAgIChleHBvcnRzLnZpcnR1YWwgfHwgKGV4cG9ydHMudmlydHVhbCA9IHt9KSlba2V5XSA9IG91dDtcbiAgICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5wcm90b3R5cGUuJU5BTUUlXG4gICAgICBpZiAodHlwZSAmICRleHBvcnQuUiAmJiBleHBQcm90byAmJiAhZXhwUHJvdG9ba2V5XSkgaGlkZShleHBQcm90bywga2V5LCBvdXQpO1xuICAgIH1cbiAgfVxufTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiIsIihmdW5jdGlvbihnbG9iYWwpIHtcclxuICAvKipcclxuICAgKiBQb2x5ZmlsbCBVUkxTZWFyY2hQYXJhbXNcclxuICAgKlxyXG4gICAqIEluc3BpcmVkIGZyb20gOiBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi91cmwtc2VhcmNoLXBhcmFtcy9ibG9iL21hc3Rlci9zcmMvdXJsLXNlYXJjaC1wYXJhbXMuanNcclxuICAgKi9cclxuXHJcbiAgdmFyIGNoZWNrSWZJdGVyYXRvcklzU3VwcG9ydGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gISFTeW1ib2wuaXRlcmF0b3I7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcblxyXG4gIHZhciBpdGVyYXRvclN1cHBvcnRlZCA9IGNoZWNrSWZJdGVyYXRvcklzU3VwcG9ydGVkKCk7XHJcblxyXG4gIHZhciBjcmVhdGVJdGVyYXRvciA9IGZ1bmN0aW9uKGl0ZW1zKSB7XHJcbiAgICB2YXIgaXRlcmF0b3IgPSB7XHJcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KCk7XHJcbiAgICAgICAgcmV0dXJuIHsgZG9uZTogdmFsdWUgPT09IHZvaWQgMCwgdmFsdWU6IHZhbHVlIH07XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgaWYgKGl0ZXJhdG9yU3VwcG9ydGVkKSB7XHJcbiAgICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gaXRlcmF0b3I7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZXJhdG9yO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlYXJjaCBwYXJhbSBuYW1lIGFuZCB2YWx1ZXMgc2hvdWxkIGJlIGVuY29kZWQgYWNjb3JkaW5nIHRvIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsZW5jb2RlZC1zZXJpYWxpemluZ1xyXG4gICAqIGVuY29kZVVSSUNvbXBvbmVudCgpIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdCBleGNlcHQgZW5jb2Rpbmcgc3BhY2VzIGFzIGAlMjBgIGluc3RlYWQgb2YgYCtgLlxyXG4gICAqL1xyXG4gIHZhciBzZXJpYWxpemVQYXJhbSA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKS5yZXBsYWNlKC8lMjAvZywgJysnKTtcclxuICB9O1xyXG5cclxuICB2YXIgZGVzZXJpYWxpemVQYXJhbSA9IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KFN0cmluZyh2YWx1ZSkucmVwbGFjZSgvXFwrL2csICcgJykpO1xyXG4gIH07XHJcblxyXG4gIHZhciBwb2x5ZmlsbFVSTFNlYXJjaFBhcmFtcyA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIHZhciBVUkxTZWFyY2hQYXJhbXMgPSBmdW5jdGlvbihzZWFyY2hTdHJpbmcpIHtcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfZW50cmllcycsIHsgd3JpdGFibGU6IHRydWUsIHZhbHVlOiB7fSB9KTtcclxuICAgICAgdmFyIHR5cGVvZlNlYXJjaFN0cmluZyA9IHR5cGVvZiBzZWFyY2hTdHJpbmc7XHJcblxyXG4gICAgICBpZiAodHlwZW9mU2VhcmNoU3RyaW5nID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIGRvIG5vdGhpbmdcclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2ZTZWFyY2hTdHJpbmcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgaWYgKHNlYXJjaFN0cmluZyAhPT0gJycpIHtcclxuICAgICAgICAgIHRoaXMuX2Zyb21TdHJpbmcoc2VhcmNoU3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoc2VhcmNoU3RyaW5nIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICBzZWFyY2hTdHJpbmcuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xyXG4gICAgICAgICAgX3RoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmICgoc2VhcmNoU3RyaW5nICE9PSBudWxsKSAmJiAodHlwZW9mU2VhcmNoU3RyaW5nID09PSAnb2JqZWN0JykpIHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHNlYXJjaFN0cmluZykgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcclxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VhcmNoU3RyaW5nLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IHNlYXJjaFN0cmluZ1tpXTtcclxuICAgICAgICAgICAgaWYgKChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZW50cnkpID09PSAnW29iamVjdCBBcnJheV0nKSB8fCAoZW50cnkubGVuZ3RoICE9PSAyKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYXBwZW5kKGVudHJ5WzBdLCBlbnRyeVsxXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgW3N0cmluZywgYW55XSBhcyBlbnRyeSBhdCBpbmRleCAnICsgaSArICcgb2YgVVJMU2VhcmNoUGFyYW1zXFwncyBpbnB1dCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzZWFyY2hTdHJpbmcpIHtcclxuICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCBzZWFyY2hTdHJpbmdba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5zdXBwb3J0ZWQgaW5wdXRcXCdzIHR5cGUgZm9yIFVSTFNlYXJjaFBhcmFtcycpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBwcm90byA9IFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XHJcblxyXG4gICAgcHJvdG8uYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcclxuICAgICAgaWYgKG5hbWUgaW4gdGhpcy5fZW50cmllcykge1xyXG4gICAgICAgIHRoaXMuX2VudHJpZXNbbmFtZV0ucHVzaChTdHJpbmcodmFsdWUpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbnRyaWVzW25hbWVdID0gW1N0cmluZyh2YWx1ZSldO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHByb3RvLmRlbGV0ZSA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgZGVsZXRlIHRoaXMuX2VudHJpZXNbbmFtZV07XHJcbiAgICB9O1xyXG5cclxuICAgIHByb3RvLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgcmV0dXJuIChuYW1lIGluIHRoaXMuX2VudHJpZXMpID8gdGhpcy5fZW50cmllc1tuYW1lXVswXSA6IG51bGw7XHJcbiAgICB9O1xyXG5cclxuICAgIHByb3RvLmdldEFsbCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgcmV0dXJuIChuYW1lIGluIHRoaXMuX2VudHJpZXMpID8gdGhpcy5fZW50cmllc1tuYW1lXS5zbGljZSgwKSA6IFtdO1xyXG4gICAgfTtcclxuXHJcbiAgICBwcm90by5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICAgIHJldHVybiAobmFtZSBpbiB0aGlzLl9lbnRyaWVzKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJvdG8uc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcclxuICAgICAgdGhpcy5fZW50cmllc1tuYW1lXSA9IFtTdHJpbmcodmFsdWUpXTtcclxuICAgIH07XHJcblxyXG4gICAgcHJvdG8uZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XHJcbiAgICAgIHZhciBlbnRyaWVzO1xyXG4gICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMuX2VudHJpZXMpIHtcclxuICAgICAgICBpZiAodGhpcy5fZW50cmllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgICAgZW50cmllcyA9IHRoaXMuX2VudHJpZXNbbmFtZV07XHJcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCBlbnRyaWVzW2ldLCBuYW1lLCB0aGlzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcHJvdG8ua2V5cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgaXRlbXMgPSBbXTtcclxuICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XHJcbiAgICAgICAgaXRlbXMucHVzaChuYW1lKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBjcmVhdGVJdGVyYXRvcihpdGVtcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIHByb3RvLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgaXRlbXMgPSBbXTtcclxuICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgaXRlbXMucHVzaCh2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3IoaXRlbXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwcm90by5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcclxuICAgICAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yKGl0ZW1zKTtcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGl0ZXJhdG9yU3VwcG9ydGVkKSB7XHJcbiAgICAgIHByb3RvW1N5bWJvbC5pdGVyYXRvcl0gPSBwcm90by5lbnRyaWVzO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RvLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciBzZWFyY2hBcnJheSA9IFtdO1xyXG4gICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcclxuICAgICAgICBzZWFyY2hBcnJheS5wdXNoKHNlcmlhbGl6ZVBhcmFtKG5hbWUpICsgJz0nICsgc2VyaWFsaXplUGFyYW0odmFsdWUpKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBzZWFyY2hBcnJheS5qb2luKCcmJyk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICBnbG9iYWwuVVJMU2VhcmNoUGFyYW1zID0gVVJMU2VhcmNoUGFyYW1zO1xyXG4gIH07XHJcblxyXG4gIHZhciBjaGVja0lmVVJMU2VhcmNoUGFyYW1zU3VwcG9ydGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB2YXIgVVJMU2VhcmNoUGFyYW1zID0gZ2xvYmFsLlVSTFNlYXJjaFBhcmFtcztcclxuXHJcbiAgICAgIHJldHVybiAobmV3IFVSTFNlYXJjaFBhcmFtcygnP2E9MScpLnRvU3RyaW5nKCkgPT09ICdhPTEnKSAmJiAodHlwZW9mIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuc2V0ID09PSAnZnVuY3Rpb24nKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGlmICghY2hlY2tJZlVSTFNlYXJjaFBhcmFtc1N1cHBvcnRlZCgpKSB7XHJcbiAgICBwb2x5ZmlsbFVSTFNlYXJjaFBhcmFtcygpO1xyXG4gIH1cclxuXHJcbiAgdmFyIHByb3RvID0gZ2xvYmFsLlVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XHJcblxyXG4gIGlmICh0eXBlb2YgcHJvdG8uc29ydCAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgcHJvdG8uc29ydCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICB2YXIgaXRlbXMgPSBbXTtcclxuICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XHJcbiAgICAgICAgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKTtcclxuICAgICAgICBpZiAoIV90aGlzLl9lbnRyaWVzKSB7XHJcbiAgICAgICAgICBfdGhpcy5kZWxldGUobmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaXRlbXMuc29ydChmdW5jdGlvbihhLCBiKSB7XHJcbiAgICAgICAgaWYgKGFbMF0gPCBiWzBdKSB7XHJcbiAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhWzBdID4gYlswXSkge1xyXG4gICAgICAgICAgcmV0dXJuICsxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoX3RoaXMuX2VudHJpZXMpIHsgLy8gZm9yY2UgcmVzZXQgYmVjYXVzZSBJRSBrZWVwcyBrZXlzIGluZGV4XHJcbiAgICAgICAgX3RoaXMuX2VudHJpZXMgPSB7fTtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5hcHBlbmQoaXRlbXNbaV1bMF0sIGl0ZW1zW2ldWzFdKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgcHJvdG8uX2Zyb21TdHJpbmcgIT09ICdmdW5jdGlvbicpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ19mcm9tU3RyaW5nJywge1xyXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gICAgICB2YWx1ZTogZnVuY3Rpb24oc2VhcmNoU3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2VudHJpZXMpIHtcclxuICAgICAgICAgIHRoaXMuX2VudHJpZXMgPSB7fTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFyIGtleXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xyXG4gICAgICAgICAgICBrZXlzLnB1c2gobmFtZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZShrZXlzW2ldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNlYXJjaFN0cmluZyA9IHNlYXJjaFN0cmluZy5yZXBsYWNlKC9eXFw/LywgJycpO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gc2VhcmNoU3RyaW5nLnNwbGl0KCcmJyk7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbaV0uc3BsaXQoJz0nKTtcclxuICAgICAgICAgIHRoaXMuYXBwZW5kKFxyXG4gICAgICAgICAgICBkZXNlcmlhbGl6ZVBhcmFtKGF0dHJpYnV0ZVswXSksXHJcbiAgICAgICAgICAgIChhdHRyaWJ1dGUubGVuZ3RoID4gMSkgPyBkZXNlcmlhbGl6ZVBhcmFtKGF0dHJpYnV0ZVsxXSkgOiAnJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gSFRNTEFuY2hvckVsZW1lbnRcclxuXHJcbn0pKFxyXG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgPyBnbG9iYWxcclxuICAgIDogKCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgPyB3aW5kb3dcclxuICAgIDogKCh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpID8gc2VsZiA6IHRoaXMpKVxyXG4pO1xyXG5cclxuKGZ1bmN0aW9uKGdsb2JhbCkge1xyXG4gIC8qKlxyXG4gICAqIFBvbHlmaWxsIFVSTFxyXG4gICAqXHJcbiAgICogSW5zcGlyZWQgZnJvbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcnYvRE9NLVVSTC1Qb2x5ZmlsbC9ibG9iL21hc3Rlci9zcmMvdXJsLmpzXHJcbiAgICovXHJcblxyXG4gIHZhciBjaGVja0lmVVJMSXNTdXBwb3J0ZWQgPSBmdW5jdGlvbigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciB1ID0gbmV3IGdsb2JhbC5VUkwoJ2InLCAnaHR0cDovL2EnKTtcclxuICAgICAgdS5wYXRobmFtZSA9ICdjIGQnO1xyXG4gICAgICByZXR1cm4gKHUuaHJlZiA9PT0gJ2h0dHA6Ly9hL2MlMjBkJykgJiYgdS5zZWFyY2hQYXJhbXM7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuXHJcbiAgdmFyIHBvbHlmaWxsVVJMID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgX1VSTCA9IGdsb2JhbC5VUkw7XHJcblxyXG4gICAgdmFyIFVSTCA9IGZ1bmN0aW9uKHVybCwgYmFzZSkge1xyXG4gICAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHVybCA9IFN0cmluZyh1cmwpO1xyXG5cclxuICAgICAgLy8gT25seSBjcmVhdGUgYW5vdGhlciBkb2N1bWVudCBpZiB0aGUgYmFzZSBpcyBkaWZmZXJlbnQgZnJvbSBjdXJyZW50IGxvY2F0aW9uLlxyXG4gICAgICB2YXIgZG9jID0gZG9jdW1lbnQsIGJhc2VFbGVtZW50O1xyXG4gICAgICBpZiAoYmFzZSAmJiAoZ2xvYmFsLmxvY2F0aW9uID09PSB2b2lkIDAgfHwgYmFzZSAhPT0gZ2xvYmFsLmxvY2F0aW9uLmhyZWYpKSB7XHJcbiAgICAgICAgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCcnKTtcclxuICAgICAgICBiYXNlRWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdiYXNlJyk7XHJcbiAgICAgICAgYmFzZUVsZW1lbnQuaHJlZiA9IGJhc2U7XHJcbiAgICAgICAgZG9jLmhlYWQuYXBwZW5kQ2hpbGQoYmFzZUVsZW1lbnQpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBpZiAoYmFzZUVsZW1lbnQuaHJlZi5pbmRleE9mKGJhc2UpICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoYmFzZUVsZW1lbnQuaHJlZik7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTCB1bmFibGUgdG8gc2V0IGJhc2UgJyArIGJhc2UgKyAnIGR1ZSB0byAnICsgZXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBhbmNob3JFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgYW5jaG9yRWxlbWVudC5ocmVmID0gdXJsO1xyXG4gICAgICBpZiAoYmFzZUVsZW1lbnQpIHtcclxuICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChhbmNob3JFbGVtZW50KTtcclxuICAgICAgICBhbmNob3JFbGVtZW50LmhyZWYgPSBhbmNob3JFbGVtZW50LmhyZWY7IC8vIGZvcmNlIGhyZWYgdG8gcmVmcmVzaFxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYW5jaG9yRWxlbWVudC5wcm90b2NvbCA9PT0gJzonIHx8ICEvOi8udGVzdChhbmNob3JFbGVtZW50LmhyZWYpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBVUkwnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfYW5jaG9yRWxlbWVudCcsIHtcclxuICAgICAgICB2YWx1ZTogYW5jaG9yRWxlbWVudFxyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgICAvLyBjcmVhdGUgYSBsaW5rZWQgc2VhcmNoUGFyYW1zIHdoaWNoIHJlZmxlY3QgaXRzIGNoYW5nZXMgb24gVVJMXHJcbiAgICAgIHZhciBzZWFyY2hQYXJhbXMgPSBuZXcgZ2xvYmFsLlVSTFNlYXJjaFBhcmFtcyh0aGlzLnNlYXJjaCk7XHJcbiAgICAgIHZhciBlbmFibGVTZWFyY2hVcGRhdGUgPSB0cnVlO1xyXG4gICAgICB2YXIgZW5hYmxlU2VhcmNoUGFyYW1zVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgWydhcHBlbmQnLCAnZGVsZXRlJywgJ3NldCddLmZvckVhY2goZnVuY3Rpb24obWV0aG9kTmFtZSkge1xyXG4gICAgICAgIHZhciBtZXRob2QgPSBzZWFyY2hQYXJhbXNbbWV0aG9kTmFtZV07XHJcbiAgICAgICAgc2VhcmNoUGFyYW1zW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICBtZXRob2QuYXBwbHkoc2VhcmNoUGFyYW1zLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgaWYgKGVuYWJsZVNlYXJjaFVwZGF0ZSkge1xyXG4gICAgICAgICAgICBlbmFibGVTZWFyY2hQYXJhbXNVcGRhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgX3RoaXMuc2VhcmNoID0gc2VhcmNoUGFyYW1zLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGVuYWJsZVNlYXJjaFBhcmFtc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3NlYXJjaFBhcmFtcycsIHtcclxuICAgICAgICB2YWx1ZTogc2VhcmNoUGFyYW1zLFxyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB2YXIgc2VhcmNoID0gdm9pZCAwO1xyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ191cGRhdGVTZWFyY2hQYXJhbXMnLCB7XHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoICE9PSBzZWFyY2gpIHtcclxuICAgICAgICAgICAgc2VhcmNoID0gdGhpcy5zZWFyY2g7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVTZWFyY2hQYXJhbXNVcGRhdGUpIHtcclxuICAgICAgICAgICAgICBlbmFibGVTZWFyY2hVcGRhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaFBhcmFtcy5fZnJvbVN0cmluZyh0aGlzLnNlYXJjaCk7XHJcbiAgICAgICAgICAgICAgZW5hYmxlU2VhcmNoVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBwcm90byA9IFVSTC5wcm90b3R5cGU7XHJcblxyXG4gICAgdmFyIGxpbmtVUkxXaXRoQW5jaG9yQXR0cmlidXRlID0gZnVuY3Rpb24oYXR0cmlidXRlTmFtZSkge1xyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIGF0dHJpYnV0ZU5hbWUsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2FuY2hvckVsZW1lbnRbYXR0cmlidXRlTmFtZV07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLl9hbmNob3JFbGVtZW50W2F0dHJpYnV0ZU5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBbJ2hhc2gnLCAnaG9zdCcsICdob3N0bmFtZScsICdwb3J0JywgJ3Byb3RvY29sJ11cclxuICAgICAgLmZvckVhY2goZnVuY3Rpb24oYXR0cmlidXRlTmFtZSkge1xyXG4gICAgICAgIGxpbmtVUkxXaXRoQW5jaG9yQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sICdzZWFyY2gnLCB7XHJcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FuY2hvckVsZW1lbnRbJ3NlYXJjaCddO1xyXG4gICAgICB9LFxyXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fYW5jaG9yRWxlbWVudFsnc2VhcmNoJ10gPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLl91cGRhdGVTZWFyY2hQYXJhbXMoKTtcclxuICAgICAgfSxcclxuICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocHJvdG8sIHtcclxuXHJcbiAgICAgICd0b1N0cmluZyc6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF90aGlzLmhyZWY7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgICdocmVmJzoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fYW5jaG9yRWxlbWVudC5ocmVmLnJlcGxhY2UoL1xcPyQvLCAnJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLl9hbmNob3JFbGVtZW50LmhyZWYgPSB2YWx1ZTtcclxuICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFBhcmFtcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ3BhdGhuYW1lJzoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fYW5jaG9yRWxlbWVudC5wYXRobmFtZS5yZXBsYWNlKC8oXlxcLz8pLywgJy8nKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuX2FuY2hvckVsZW1lbnQucGF0aG5hbWUgPSB2YWx1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgfSxcclxuXHJcbiAgICAgICdvcmlnaW4nOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIC8vIGdldCBleHBlY3RlZCBwb3J0IGZyb20gcHJvdG9jb2xcclxuICAgICAgICAgIHZhciBleHBlY3RlZFBvcnQgPSB7ICdodHRwOic6IDgwLCAnaHR0cHM6JzogNDQzLCAnZnRwOic6IDIxIH1bdGhpcy5fYW5jaG9yRWxlbWVudC5wcm90b2NvbF07XHJcbiAgICAgICAgICAvLyBhZGQgcG9ydCB0byBvcmlnaW4gaWYsIGV4cGVjdGVkIHBvcnQgaXMgZGlmZmVyZW50IHRoYW4gYWN0dWFsIHBvcnRcclxuICAgICAgICAgIC8vIGFuZCBpdCBpcyBub3QgZW1wdHkgZi5lIGh0dHA6Ly9mb286ODA4MFxyXG4gICAgICAgICAgLy8gODA4MCAhPSA4MCAmJiA4MDgwICE9ICcnXHJcbiAgICAgICAgICB2YXIgYWRkUG9ydFRvT3JpZ2luID0gdGhpcy5fYW5jaG9yRWxlbWVudC5wb3J0ICE9IGV4cGVjdGVkUG9ydCAmJlxyXG4gICAgICAgICAgICB0aGlzLl9hbmNob3JFbGVtZW50LnBvcnQgIT09ICcnO1xyXG5cclxuICAgICAgICAgIHJldHVybiB0aGlzLl9hbmNob3JFbGVtZW50LnByb3RvY29sICtcclxuICAgICAgICAgICAgJy8vJyArXHJcbiAgICAgICAgICAgIHRoaXMuX2FuY2hvckVsZW1lbnQuaG9zdG5hbWUgK1xyXG4gICAgICAgICAgICAoYWRkUG9ydFRvT3JpZ2luID8gKCc6JyArIHRoaXMuX2FuY2hvckVsZW1lbnQucG9ydCkgOiAnJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAncGFzc3dvcmQnOiB7IC8vIFRPRE9cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ3VzZXJuYW1lJzogeyAvLyBUT0RPXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIFVSTC5jcmVhdGVPYmplY3RVUkwgPSBmdW5jdGlvbihibG9iKSB7XHJcbiAgICAgIHJldHVybiBfVVJMLmNyZWF0ZU9iamVjdFVSTC5hcHBseShfVVJMLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMID0gZnVuY3Rpb24odXJsKSB7XHJcbiAgICAgIHJldHVybiBfVVJMLnJldm9rZU9iamVjdFVSTC5hcHBseShfVVJMLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBnbG9iYWwuVVJMID0gVVJMO1xyXG5cclxuICB9O1xyXG5cclxuICBpZiAoIWNoZWNrSWZVUkxJc1N1cHBvcnRlZCgpKSB7XHJcbiAgICBwb2x5ZmlsbFVSTCgpO1xyXG4gIH1cclxuXHJcbiAgaWYgKChnbG9iYWwubG9jYXRpb24gIT09IHZvaWQgMCkgJiYgISgnb3JpZ2luJyBpbiBnbG9iYWwubG9jYXRpb24pKSB7XHJcbiAgICB2YXIgZ2V0T3JpZ2luID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBnbG9iYWwubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgZ2xvYmFsLmxvY2F0aW9uLmhvc3RuYW1lICsgKGdsb2JhbC5sb2NhdGlvbi5wb3J0ID8gKCc6JyArIGdsb2JhbC5sb2NhdGlvbi5wb3J0KSA6ICcnKTtcclxuICAgIH07XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbC5sb2NhdGlvbiwgJ29yaWdpbicsIHtcclxuICAgICAgICBnZXQ6IGdldE9yaWdpbixcclxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcclxuICAgICAgICBnbG9iYWwubG9jYXRpb24ub3JpZ2luID0gZ2V0T3JpZ2luKCk7XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufSkoXHJcbiAgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSA/IGdsb2JhbFxyXG4gICAgOiAoKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSA/IHdpbmRvd1xyXG4gICAgOiAoKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgPyBzZWxmIDogdGhpcykpXHJcbik7XHJcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IGluaXREYXRlUGlja2VycyBmcm9tICdAYXBwL3V0aWxzL2RhdGVwaWNrZXInO1xuaW1wb3J0IFRyYW5zbGF0YWJsZUlucHV0IGZyb20gJ0Bjb21wb25lbnRzL3RyYW5zbGF0YWJsZS1pbnB1dCc7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuJCgoKSA9PiB7XG4gIGluaXREYXRlUGlja2VycygpO1xuICBuZXcgVHJhbnNsYXRhYmxlSW5wdXQoKTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==