Domain: lemmonlines.com
Server Adress: 208.122.217.104

privdayz.com

/home/httpd/html/verobeach.marketing/public_html/
Dosya Yükle :
Current File : /home/httpd/html/verobeach.marketing/public_html/sui.scripts.min.js

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
(function (global){
function SuiComponentBaseInterface(t){this.type=t.type,this._onDestroyCallback=t.onDestroy,this._onBeforeDestroyCallback=t.onBeforeDestroy,this.$placeholder=t.placeholder?$(t.placeholder):!1,this.$container=t.attachTo?$(t.attachTo):!1,this.attachMode="undefined"==typeof t.attachMode?"append":t.attachMode,this.supportedAttachModes=["append","prepend","before","after"],this.template=this._getTemplate(),this.requestedExtensions=t.extensions,this.extensions=this.getActiveExtensions(),_.each(this.extensions,function(e){e.call(this,t)}),this.data=this._formatTemplateData(t)}var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),_=(typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null);$.extend(SuiComponentBaseInterface.prototype,{init:function(){var t=this.template(this.data);return this.$el=$(t),this.$el?(this.$el.data("_SUIcomponent",this),void(this.$placeholder?this.replacePlaceholder():this.$container&&this.attachToContainer())):!1},replacePlaceholder:function(){this.$el.attr({id:this.$placeholder.attr("id"),"class":this.$placeholder.attr("class")}),this.$placeholder.after(this.$el),this.$placeholder.detach()},attachToContainer:function(t,e){this.$container&&this.$el.detach(),this.$container="undefined"!=typeof t?$(t):this.$container,-1!==_.indexOf(this.supportedAttachModes,e)&&(this.attachMode=e),this.$container[this.attachMode](this.$el)},destroy:function(){if("function"==typeof this._onBeforeDestroyCallback){var t=this._onBeforeDestroyCallback.call(this);if(t===!0)return}this.$el.remove(),"function"==typeof this._onDestroyCallback&&this._onDestroyCallback.call(this)},onBeforeDestroy:function(t){this._onBeforeDestroyCallback=t},onDestroy:function(t){this._onDestroyCallback=t},getType:function(){return this.type},getEl:function(){return this.$el},_formatTemplateData:function(t){return this.extensions&&_.each(extensions,function(e){t[e]=!0}),t},getActiveExtensions:function(){var t=this._getAvailableExtensions();if(!this.requestedExtensions||!t)return null;"string"==typeof this.requestedExtensions&&(this.requestedExtensions=this.requestedExtensions.split(" "));var e={};return _.each(this.requestedExtensions,function(n){"undefined"!=typeof t[n]&&(e[n]=t[n])}),e},loadExtensions:function(t){this._initExtensions(t),this._bindExtensions(t)},_getTemplate:function(){return console.log(this.getType()+" component is not supplying a template"),!1},_getAvailableExtensions:function(){return!1},_initExtensions:function(t){var e=this.extensions;if(e){var n=this;_.each(e,function(e,i){"undefined"!=typeof n[i]&&"function"==typeof n[i].extensionInit&&n[i].extensionInit.call(n,t)})}},_bindExtensions:function(t){var e=this.extensions;if(e){var n=this;_.each(e,function(e,i){"undefined"!=typeof n[i]&&"function"==typeof n[i].extensionBind&&n[i].extensionBind.call(n,t)})}},_formatTemplateData:function(t){var e=this.getType().replace("sui-",""),n=this.extensions;return t[e]=t[e]||"",n&&_.each(n,function(n,i){t[i]=!0,t[e]+=" "+i}),t}}),module.exports=SuiComponentBaseInterface;


}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})

},{}],2:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,l,e,t,s){function h(a,l){var t,s,h="";return h+='id="',(s=e.id)?t=s.call(a,{hash:{},data:l}):(s=a&&a.id,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=u(t)+'"'}function n(a,l){var t,s,h="";return h+='class="',(s=e["class"])?t=s.call(a,{hash:{},data:l}):(s=a&&a["class"],t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=u(t)+'"'}function i(a,l){var t,s,h="";return h+='sui-styles="',(s=e.styles)?t=s.call(a,{hash:{},data:l}):(s=a&&a.styles,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=u(t)+'"'}function c(a,l){var t,s,h="";return h+='<label sui-input-label="checkable" for="',(s=e.inputLabelId)?t=s.call(a,{hash:{},data:l}):(s=a&&a.inputLabelId,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=u(t)+'">',(s=e.label)?t=s.call(a,{hash:{},data:l}):(s=a&&a.label,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=u(t)+"</label>"}this.compilerInfo=[4,">= 1.0.0"],e=this.merge(e,a.helpers),s=s||{};var r,d,o="",p="function",u=this.escapeExpression,f=this;return o+="<div ",r=e["if"].call(l,l&&l.id,{hash:{},inverse:f.noop,fn:f.program(1,h,s),data:s}),(r||0===r)&&(o+=r),o+=' sui-input sui-checkbox="',(d=e.checkbox)?r=d.call(l,{hash:{},data:s}):(d=l&&l.checkbox,r=typeof d===p?d.call(l,{hash:{},data:s}):d),o+=u(r)+'" ',r=e["if"].call(l,l&&l["class"],{hash:{},inverse:f.noop,fn:f.program(3,n,s),data:s}),(r||0===r)&&(o+=r),o+=" ",r=e["if"].call(l,l&&l.styles,{hash:{},inverse:f.noop,fn:f.program(5,i,s),data:s}),(r||0===r)&&(o+=r),o+=">\n  ",r=e["if"].call(l,l&&l.label,{hash:{},inverse:f.noop,fn:f.program(7,c,s),data:s}),(r||0===r)&&(o+=r),o+='\n  <div sui-input-holder>\n    <input type="hidden" name="',(d=e.name)?r=d.call(l,{hash:{},data:s}):(d=l&&l.name,r=typeof d===p?d.call(l,{hash:{},data:s}):d),o+=u(r)+'" id="',(d=e.inputLabelId)?r=d.call(l,{hash:{},data:s}):(d=l&&l.inputLabelId,r=typeof d===p?d.call(l,{hash:{},data:s}):d),o+=u(r)+'" value="',(d=e.value)?r=d.call(l,{hash:{},data:s}):(d=l&&l.value,r=typeof d===p?d.call(l,{hash:{},data:s}):d),o+=u(r)+'">\n    <span sui-input-replacement></span>\n  </div>\n</div>'});

},{"hbsfy/runtime":43}],3:[function(require,module,exports){
(function (global){
function SuiCheckbox(e){SuiInputBaseInterface.call(this,e),this.currentValue=this.currentValue?1:0}var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),_=(typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null),SuiInputBaseInterface=require("../sui-input-base-interface"),template=require("./template.hbs"),cmsTemplate=require("./cms-template.hbs");$.extend(SuiCheckbox.prototype,SuiInputBaseInterface.prototype,{_getTemplate:function(e){return"cms"===e?cmsTemplate:template},init:function(){SuiInputBaseInterface.prototype.init.call(this),this.$label=this.$el.find("[sui-radio-check-label]"),this.$el.on("click",this.toggleValue.bind(this))},_getValueFromMarkup:function(){return this.$input.val()?1:0},_setValueInMarkup:function(e){this.$input.toggleClass("checked",!!e)},toggleValue:function(){this.setValue(this.currentValue?0:1)},getInputValue:function(){return this.$input.val()}}),module.exports=function(e){return new SuiCheckbox(e)};


}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})

},{"../sui-input-base-interface":17,"./cms-template.hbs":2,"./template.hbs":4}],4:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,l,e,t,s){function h(a,l){var t,s,h="";return h+='id="',(s=e.id)?t=s.call(a,{hash:{},data:l}):(s=a&&a.id,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=u(t)+'"'}function n(a,l){var t,s,h="";return h+='class="',(s=e["class"])?t=s.call(a,{hash:{},data:l}):(s=a&&a["class"],t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=u(t)+'"'}function i(a,l){var t,s,h="";return h+='sui-styles="',(s=e.styles)?t=s.call(a,{hash:{},data:l}):(s=a&&a.styles,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=u(t)+'"'}function c(a,l){var t,s,h="";return h+='<label sui-input-label="checkable" for="',(s=e.inputLabelId)?t=s.call(a,{hash:{},data:l}):(s=a&&a.inputLabelId,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=u(t)+'">',(s=e.label)?t=s.call(a,{hash:{},data:l}):(s=a&&a.label,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=u(t)+"</label>"}this.compilerInfo=[4,">= 1.0.0"],e=this.merge(e,a.helpers),s=s||{};var r,d,o="",p="function",u=this.escapeExpression,f=this;return o+="<div ",r=e["if"].call(l,l&&l.id,{hash:{},inverse:f.noop,fn:f.program(1,h,s),data:s}),(r||0===r)&&(o+=r),o+=' sui-input sui-checkbox="',(d=e.checkbox)?r=d.call(l,{hash:{},data:s}):(d=l&&l.checkbox,r=typeof d===p?d.call(l,{hash:{},data:s}):d),o+=u(r)+'" ',r=e["if"].call(l,l&&l["class"],{hash:{},inverse:f.noop,fn:f.program(3,n,s),data:s}),(r||0===r)&&(o+=r),o+=" ",r=e["if"].call(l,l&&l.styles,{hash:{},inverse:f.noop,fn:f.program(5,i,s),data:s}),(r||0===r)&&(o+=r),o+=">\n  ",r=e["if"].call(l,l&&l.label,{hash:{},inverse:f.noop,fn:f.program(7,c,s),data:s}),(r||0===r)&&(o+=r),o+='\n  <div sui-input-holder>\n    <input type="hidden" name="',(d=e.name)?r=d.call(l,{hash:{},data:s}):(d=l&&l.name,r=typeof d===p?d.call(l,{hash:{},data:s}):d),o+=u(r)+'" id="',(d=e.inputLabelId)?r=d.call(l,{hash:{},data:s}):(d=l&&l.inputLabelId,r=typeof d===p?d.call(l,{hash:{},data:s}):d),o+=u(r)+'" value="',(d=e.value)?r=d.call(l,{hash:{},data:s}):(d=l&&l.value,r=typeof d===p?d.call(l,{hash:{},data:s}):d),o+=u(r)+'">\n    <span sui-input-replacement></span>\n  </div>\n</div>'});

},{"hbsfy/runtime":43}],5:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,n,l,t,e){function r(a,n){var t,e,r="";return r+='id="',(e=l.id)?t=e.call(a,{hash:{},data:n}):(e=a&&a.id,t=typeof e===m?e.call(a,{hash:{},data:n}):e),r+=g(t)+'"'}function o(a,n){var t,e,r="";return r+='class="',(e=l["class"])?t=e.call(a,{hash:{},data:n}):(e=a&&a["class"],t=typeof e===m?e.call(a,{hash:{},data:n}):e),r+=g(t)+'"'}function s(a,n){var t,e,r="";return r+='sui-styles="',(e=l.styles)?t=e.call(a,{hash:{},data:n}):(e=a&&a.styles,t=typeof e===m?e.call(a,{hash:{},data:n}):e),r+=g(t)+'"'}function i(a,n){var t,e,r="";return r+="\n	<label sui-input-label>",(e=l.label)?t=e.call(a,{hash:{},data:n}):(e=a&&a.label,t=typeof e===m?e.call(a,{hash:{},data:n}):e),(t||0===t)&&(r+=t),r+="</label>\n	"}function d(a,n){var t,e,r="";return r+='class="',(e=l.iconClass)?t=e.call(a,{hash:{},data:n}):(e=a&&a.iconClass,t=typeof e===m?e.call(a,{hash:{},data:n}):e),r+=g(t)+'"'}function h(a,n){return'\n			<div sui-dropdown-search>\n				<input sui-dropdown-search-input type="text" placeholder="Search">\n			</div>\n		'}function p(a,n){var t,e,r="";return r+='\n		<div sui-dropdown-option="',t=l["if"].call(a,a&&a.is_current,{hash:{},inverse:w.noop,fn:w.program(14,c,n),data:n}),(t||0===t)&&(r+=t),r+='" data-value="',(e=l.value)?t=e.call(a,{hash:{},data:n}):(e=a&&a.value,t=typeof e===m?e.call(a,{hash:{},data:n}):e),r+=g(t)+'">',(e=l.text)?t=e.call(a,{hash:{},data:n}):(e=a&&a.text,t=typeof e===m?e.call(a,{hash:{},data:n}):e),(t||0===t)&&(r+=t),r+="</div>\n		"}function c(a,n){return"is-active"}function u(a,n){return"\n			<div sui-dropdown-footer></div>\n		"}this.compilerInfo=[4,">= 1.0.0"],l=this.merge(l,a.helpers),e=e||{};var f,v,y="",m="function",g=this.escapeExpression,w=this;return y+="<div ",f=l["if"].call(n,n&&n.id,{hash:{},inverse:w.noop,fn:w.program(1,r,e),data:e}),(f||0===f)&&(y+=f),y+=' sui-input sui-dropdown="',(v=l.dropdown)?f=v.call(n,{hash:{},data:e}):(v=n&&n.dropdown,f=typeof v===m?v.call(n,{hash:{},data:e}):v),y+=g(f)+'" ',f=l["if"].call(n,n&&n["class"],{hash:{},inverse:w.noop,fn:w.program(3,o,e),data:e}),(f||0===f)&&(y+=f),y+=" ",f=l["if"].call(n,n&&n.styles,{hash:{},inverse:w.noop,fn:w.program(5,s,e),data:e}),(f||0===f)&&(y+=f),y+=">\n	",f=l["if"].call(n,n&&n.label,{hash:{},inverse:w.noop,fn:w.program(7,i,e),data:e}),(f||0===f)&&(y+=f),y+='\n	<input sui-dropdown-input type="hidden" value="'+g((f=n&&n.current,f=null==f||f===!1?f:f.value,typeof f===m?f.apply(n):f))+'" name="',(v=l.name)?f=v.call(n,{hash:{},data:e}):(v=n&&n.name,f=typeof v===m?v.call(n,{hash:{},data:e}):v),y+=g(f)+'">\n	<div sui-dropdown-trigger="',(v=l.trigger_variation)?f=v.call(n,{hash:{},data:e}):(v=n&&n.trigger_variation,f=typeof v===m?v.call(n,{hash:{},data:e}):v),y+=g(f)+'" ',f=l["if"].call(n,n&&n.iconClass,{hash:{},inverse:w.noop,fn:w.program(9,d,e),data:e}),(f||0===f)&&(y+=f),y+=">",f=n&&n.current,f=null==f||f===!1?f:f.text,f=typeof f===m?f.apply(n):f,(f||0===f)&&(y+=f),y+='</div>\n	<div sui-dropdown-options="',(v=l.dropdown)?f=v.call(n,{hash:{},data:e}):(v=n&&n.dropdown,f=typeof v===m?v.call(n,{hash:{},data:e}):v),y+=g(f)+'" ',f=l["if"].call(n,n&&n.styles,{hash:{},inverse:w.noop,fn:w.program(5,s,e),data:e}),(f||0===f)&&(y+=f),y+=">\n		",f=l["if"].call(n,n&&n.searchable,{hash:{},inverse:w.noop,fn:w.program(11,h,e),data:e}),(f||0===f)&&(y+=f),y+="\n		",f=l.each.call(n,n&&n.options,{hash:{},inverse:w.noop,fn:w.program(13,p,e),data:e}),(f||0===f)&&(y+=f),y+="\n		",f=l["if"].call(n,n&&n.hasFooter,{hash:{},inverse:w.noop,fn:w.program(16,u,e),data:e}),(f||0===f)&&(y+=f),y+="\n	</div>\n</div>"});

},{"hbsfy/runtime":43}],6:[function(require,module,exports){
function SuiDropdownAjaxable(){}var $=window.jQuery,_=window._;$.extend(SuiDropdownAjaxable.prototype,{ajaxable:{extensionInit:function(t){this.fetchUrl=t.fetchUrl?t.fetchUrl:!1,this.page=t.page?t.page:1,this.limit=t.limit?t.limit:5,this.resultsLeft=!0,this.paginationBuffer=t.paginationBuffer?parseInt(t.paginationBuffer):15,this.processData="false"==t.processData?!1:!0,this.requestMethod=t.requestMethod?t.requestMethod:"GET"},extensionBind:function(){this.ajaxableFetchOptions()}},ajaxableFetchOptions:function(t){t="undefined"!=typeof t?t:!1;var i=this,a={page:i.page,limit:i.limit,sui_dropdown:!0};"undefined"!=typeof i.searchString&&(a.text_filter=i.searchString),i.processData||(a=JSON.stringify(a)),i.resultsLeft&&$.ajax({url:i.fetchUrl,type:i.requestMethod,dataType:"json",data:a,processData:i.processData,global:!1}).done(function(a){var n=a.data.results;n.length&&(t?(i.data.options=i.cachedOptions.concat(n),i.emptyOptions(),i.appendOptions(i.data.options)):(i.data.options=i.data.options.concat(n),i.appendOptions(n)),i.page++,i.ajaxableBindPagination()),n.length<i.limit&&(i.resultsLeft=!1,i.ajaxableUnbindPagination())}).fail(function(){console.log("SUI Dropdown: Something went wrong while fetching data")})},ajaxableUnbindPagination:function(){this.$optionsList.off("scroll")},ajaxableBindPagination:function(){this.ajaxableUnbindPagination(),this.$optionsList.on("scroll",this.ajaxableCheckScrollPosition.bind(this))},ajaxableCheckScrollPosition:function(){var t=this.$optionsList.height(),i=this.$optionsList.scrollTop(),a=this.$optionsList[0].scrollHeight;i+t>a-this.paginationBuffer&&(this.ajaxableUnbindPagination(),this.ajaxableFetchOptions())}}),module.exports=SuiDropdownAjaxable;

},{}],7:[function(require,module,exports){
function SuiDropdownHasFooter(){}var $=window.jQuery,_=window._;$.extend(SuiDropdownHasFooter.prototype,{hasFooter:{extensionInit:function(o){o.footerMarkup&&(this.$footer=this.$el.find("[sui-dropdown-footer]"),this.$footer.append(o.footerMarkup))},extensionBind:function(){}},hasFooter_getFooter:function(){return this.$footer},hasFooter_updateFooter:function(o){this.$footer=o}}),module.exports=SuiDropdownHasFooter;

},{}],8:[function(require,module,exports){
function SuiDropdownMultiselectable(){}var $=window.jQuery,_=window._;$.extend(SuiDropdownMultiselectable.prototype,{multiselectable:{extensionInit:function(e){var t=this;this.selectedOptions=e.selectedOptions?e.selectedOptions:[],this.currentValue=[],_.each(this.selectedOptions,function(e){t.currentValue.push(e.value)}),this.stackSelected=e.stackSelected?e.stackSelected:!1},extensionBind:function(){}},updateSelection:function(e){var t=this;this.disableBubbling&&e.stopPropagation();var i=$(e.currentTarget),n=i.data("value");if("placeholder"===n)return!1;for(var s=!1,o=0;o<t.selectedOptions.length;o++){var l=t.selectedOptions[o];if(l.value==n){s=o;break}}if(s!==!1){i.removeAttrVal("sui-dropdown-option","is-active"),t.selectedOptions.splice(s,1);var a=t.currentValue.indexOf(n);a>-1&&t.currentValue.splice(a,1)}else{for(var o=0;o<t.data.options.length;o++){var l=t.data.options[o];if(l.value==n&&-1===this.currentValue.indexOf(l.value)){this.selectedOptions.push(l),this.currentValue.push(l.value);break}}i.addAttrVal("sui-dropdown-option","is-active")}if(this.stackSelected){i.detach();var u=this.$optionsList.find('[sui-dropdown-option~="is-active"]:last');u.length?u.after(i):this.$optionsList.find("[sui-dropdown-option]:first").before(i)}_.each(this._onChangeCallbacks,function(e){"function"==typeof e&&e.call(t,t.multiselectableGetSelectedOptions())})},appendOptions:function(e){for(var t=this,i=t.data.options,n=_.pluck(i,"value"),s=this.multiselectableGetSelectedValues(),o=0;o<e.length;o++)e[o].is_current&&(t.selectedOptions.push(e[o]),t.currentValue.push(e[o].value)),s.indexOf(e[o].value)>-1&&(e[o].is_current=!0),-1===n.indexOf(e[o].value)&&(n.push(e[o].value),t.data.options.push(e[o]));if(!this.searchString)for(var o=0;o<t.selectedOptions.length;o++){var l=t.selectedOptions[o];-1===n.indexOf(l.value)&&(l.is_current=!0,e.push(l))}var a=this.optionTemplate({options:e});this.$optionsList.append(a),this.$options=this.$optionsList.find("[sui-dropdown-option]"),this.stackSelected&&this.multiselectableStackSelected(),_.each(this._onChangeCallbacks,function(e){"function"==typeof e&&e.call(t,t.multiselectableGetSelectedOptions())})},getValue:function(){return this.currentValue.length>0&&"placeholder"!==this.currentValue?this.currentValue.join(","):[]},multiselectableStackSelected:function(){var e=this.$optionsList.find('[sui-dropdown-option="is-active"]').detach();this.$optionsList.find("[sui-dropdown-option]:first").before(e)},multiselectableGetSelectedValues:function(){return this.currentValue},multiselectableGetSelectedOptions:function(){return this.selectedOptions},multiselectableAddSelectedOption:function(e){this.appendOptions([e])}}),module.exports=SuiDropdownMultiselectable;

},{}],9:[function(require,module,exports){
function SuiDropdownSearchable(){}var $=window.jQuery,_=window._;$.extend(SuiDropdownSearchable.prototype,{searchable:{extensionInit:function(e){this.searchString=""},extensionBind:function(){this.$searchInput=this.$el.find("[sui-dropdown-search-input]"),this.searchableBindSearch()}},searchableBindSearch:function(){var e=this;this.$searchInput.on("keyup",_.debounce(e.searchableSearchOptions.bind(e),500)),e.disableBubbling&&this.$searchInput.on("click",function(e){e.stopPropagation()})},searchableUnbindSearch:function(){this.$searchInput.off()},searchableSearchOptions:function(e){var t=this.$searchInput.val();if(e="undefined"!=typeof e?e:!1,t!==this.searchString||e)if(this.searchString=t,this.fetchUrl)this.page=1,this.resultsLeft=!0,this.ajaxableFetchOptions(!0);else if(""!==this.searchString){var i=this,n=_.filter(this.cachedOptions,function(e){return e.text.toLowerCase().indexOf(i.searchString.toLowerCase())>-1?!0:!1});this.emptyOptions(),this.appendOptions(n)}else this.emptyOptions(),this.appendOptions(this.cachedOptions)},clearSearch:function(){this.searchString="",this.$searchInput.val(""),this.searchableSearchOptions(!0)}}),module.exports=SuiDropdownSearchable;

},{}],10:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,e,t,r,n){function i(a,e){var r,n,i="";return i+='\n<div sui-dropdown-option="',r=t["if"].call(a,a&&a.is_current,{hash:{},inverse:l.noop,fn:l.program(2,o,e),data:e}),(r||0===r)&&(i+=r),i+='" data-value="',(n=t.value)?r=n.call(a,{hash:{},data:e}):(n=a&&a.value,r=typeof n===h?n.call(a,{hash:{},data:e}):n),i+=p(r)+'">',(n=t.text)?r=n.call(a,{hash:{},data:e}):(n=a&&a.text,r=typeof n===h?n.call(a,{hash:{},data:e}):n),(r||0===r)&&(i+=r),i+="</div>\n"}function o(a,e){return"is-active"}this.compilerInfo=[4,">= 1.0.0"],t=this.merge(t,a.helpers),n=n||{};var s,l=this,h="function",p=this.escapeExpression;return s=t.each.call(e,e&&e.options,{hash:{},inverse:l.noop,fn:l.program(1,i,n),data:n}),s||0===s?s:""});

},{"hbsfy/runtime":43}],11:[function(require,module,exports){
(function (global){
function closeAllDropdowns(){suiDropdowns.forEach(function(t){t.closeDropdown()})}function SuiDropdown(t,i,o){SuiInputBaseInterface.call(this,t),this.$doc=i,this.$win=o,this.$body=$("body"),this.opts=t,this.placeholderText=t.placeholderText?t.placeholderText:"",this.optionsListPosition=t.position||"bottom",this.optionTemplate=t.optionTemplate?t.optionTemplate:optionTemplate,this.cachedOptions=_.clone(this.data.options),this.iconClass=t.iconClass?t.iconClass:null,this.isOpen=!1,this.maxHeight=t.maxHeight?parseInt(t.maxHeight):!1,this.disableBubbling=t.disableBubbling?t.disableBubbling:!1,"undefined"!=typeof t.current&&null!==t.current?this.currentValue="object"==typeof t.current?t.current.value:t.current:t.options&&t.options.length?this.currentValue=t.options[0].value:this.currentValue=null,suiDropdowns.push(this)}var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),_=(typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null);require("../../../helpers/attributeHelpers");var SuiInputBaseInterface=require("../sui-input-base-interface"),template=require("./template.hbs"),cmsTemplate=require("./cms-template.hbs"),optionTemplate=require("./option-template.hbs"),_extensions={searchable:require("./extensions/sui.dropdown.searchable.js"),ajaxable:require("./extensions/sui.dropdown.ajaxable.js"),multiselectable:require("./extensions/sui.dropdown.multiselectable.js"),hasFooter:require("./extensions/sui.dropdown.has-footer.js")},suiDropdowns=[];$.extend(SuiDropdown.prototype,SuiInputBaseInterface.prototype,{init:function(){SuiInputBaseInterface.prototype.init.call(this),this.$scrollParent=this.$el.scrollParent(),this.$trigger=this.$el.find("[sui-dropdown-trigger]"),this.$input=this.$el.find("[sui-dropdown-input]"),this.$optionsList=this.$el.find("[sui-dropdown-options]"),this.$options=this.$el.find("[sui-dropdown-option]"),this.setValue(this.currentValue),this.$el.on("click","[sui-dropdown-trigger]",this.toggleDropdown.bind(this)),this.$optionsList.on("click","[sui-dropdown-option]",this.updateSelection.bind(this))},toggleDropdown:function(t){t&&t.stopPropagation(),this.isOpen?this.closeDropdown():this.openDropdown()},openDropdown:function(){return this.isOpen||this.isReadOnly?!1:(closeAllDropdowns(),this.disableParentScrolling(),this.isOpen=!0,this.$el.addAttrVal("sui-dropdown","is-open"),this.displayOptionsList(),void this.$doc.on("click",this.handleDocumentClicks.bind(this)))},closeDropdown:function(){return this.isOpen?(this.isOpen=!1,this.$el.removeAttrVal("sui-dropdown","is-open"),this.$optionsList.css({display:"none"}).removeAttrVal("sui-dropdown-options","is-open"),this.enableParentScrolling(),void this.$doc.off("click",this.handleDocumentClicks)):!1},displayOptionsList:function(){var t=this.getOptionListCoords(),i=this.$optionsList.height();this.maxHeight&&(i=i>this.maxHeight?this.maxHeight:i);var o=this.$win.height(),e=o-t.bottom-this.$trigger.height()<i,s=e?0:"top"===this.optionsListPosition?t.bottom:"auto";this.$optionsList.detach().css({top:"top"===this.optionsListPosition||e?"auto":t.top,right:"right"===this.optionsListPosition?t.right:"auto",left:"right"===this.optionsListPosition?"auto":t.left,bottom:s,display:"block",width:this.$el.width(),maxHeight:this.maxHeight?this.maxHeight:o}).appendTo("body").addAttrVal("sui-dropdown-options","is-open")},getOptionListCoords:function(){var t=this.$win.scrollTop(),i=this.$trigger.offset().top,o=this.$trigger.offset().left;return{top:i+this.$trigger.outerHeight()-t,right:this.$win.width()-o-this.$trigger.width(),left:o,bottom:i-t}},handleDocumentClicks:function(t){var i=this;0===$(t.target).parents("[sui-dropdown-options]").length&&$(t.target)!==this.$trigger&&i.closeDropdown()},disableParentScrolling:function(){this.$body.css("overflow","hidden"),this.$scrollParent.css("overflow","hidden")},enableParentScrolling:function(){this.$body.css("overflow",""),this.$scrollParent.css("overflow","")},updateSelection:function(t){this.disableBubbling&&t.stopPropagation(),this.setValue($(t.currentTarget).data("value")),this.closeDropdown()},destroy:function(){SuiInputBaseInterface.prototype.destroy.call(this),this.$optionsList&&this.$optionsList.remove()},getSelectedPosition:function(t){if(!this.$options)return!1;var i=this.$options.filter('[data-value="'+t+'"]');return _.indexOf(this.$options,i[0])},getCurrentOptionText:function(){var t=this.$options.filter('[data-value="'+this.getValue()+'"]');return t&&t.length?t.text():""},getValue:function(){return"placeholder"!==this.currentValue?this.currentValue:null},setValue:function(t,i){if(t="placeholder"==t?null:t,!this.$options)return!1;var o=this._validateValue(t);return o===!1?!1:void SuiInputBaseInterface.prototype.setValue.call(this,o,i)},emptyOptions:function(){this.$optionsList.find("[sui-dropdown-option]").remove()},appendOptions:function(t){var i=this.optionTemplate({options:t});this.$optionsList.append(i),this.$options=this.$optionsList.find("[sui-dropdown-option]")},_getTemplate:function(t){return"cms"===t?cmsTemplate:template},_getAvailableExtensions:function(){return _extensions},_formatTemplateData:function(t){try{t.options="string"==typeof t.options?JSON.parse(t.options):t.options||[]}catch(i){t.options=[],console.log("Sui Dropdown, error parsing options JSON")}if("string"==typeof t.options[0]){var o;for(o=0;o<t.options.length;o++){var e=t.options[o];t.options[o]={text:e,value:e}}}return t.id=this.$placeholder?this.$placeholder.attr("id"):t.id,t["class"]=this.$placeholder?this.$placeholder.attr("class"):t["class"],t.placeholderText&&t.options.unshift({text:t.placeholderText,value:"placeholder"}),SuiInputBaseInterface.prototype._formatTemplateData.call(this,t)},_setValueInMarkup:function(t){var i="undefined"==typeof t||null===t?"placeholder":t;this.$currentOption=this.$options.filter('[data-value="'+i+'"]'),this.$currentOption.addAttrVal("sui-dropdown-option","is-active").siblings().removeAttrVal("sui-dropdown-option","is-active"),this.$trigger.html(this.$currentOption.html()),this.$input.val(t)},_validateValue:function(t){var i=this.$options.filter('[data-value="'+t+'"]');return i.length||(t="placeholder",i=this.$options.filter('[data-value="placeholder"]')),i.length?t:!1}}),module.exports=function(t,i,o){function e(t,i,o){SuiDropdown.call(this,t,i,o)}var s="undefined"!=typeof t.extensions?t.extensions:[];return"string"==typeof s&&(s=s.split(" ")),$.extend(e.prototype,SuiDropdown.prototype),_.each(s,function(t){_extensions[t]&&$.extend(e.prototype,_extensions[t].prototype)}),new e(t,i,o)};


}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})

},{"../../../helpers/attributeHelpers":35,"../sui-input-base-interface":17,"./cms-template.hbs":5,"./extensions/sui.dropdown.ajaxable.js":6,"./extensions/sui.dropdown.has-footer.js":7,"./extensions/sui.dropdown.multiselectable.js":8,"./extensions/sui.dropdown.searchable.js":9,"./option-template.hbs":10,"./template.hbs":12}],12:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,n,l,t,e){function r(a,n){var t,e,r="";return r+='id="',(e=l.id)?t=e.call(a,{hash:{},data:n}):(e=a&&a.id,t=typeof e===m?e.call(a,{hash:{},data:n}):e),r+=g(t)+'"'}function o(a,n){var t,e,r="";return r+='class="',(e=l["class"])?t=e.call(a,{hash:{},data:n}):(e=a&&a["class"],t=typeof e===m?e.call(a,{hash:{},data:n}):e),r+=g(t)+'"'}function s(a,n){var t,e,r="";return r+='sui-styles="',(e=l.styles)?t=e.call(a,{hash:{},data:n}):(e=a&&a.styles,t=typeof e===m?e.call(a,{hash:{},data:n}):e),r+=g(t)+'"'}function i(a,n){var t,e,r="";return r+="\n	<label sui-input-label>",(e=l.label)?t=e.call(a,{hash:{},data:n}):(e=a&&a.label,t=typeof e===m?e.call(a,{hash:{},data:n}):e),(t||0===t)&&(r+=t),r+="</label>\n	"}function d(a,n){var t,e,r="";return r+='class="',(e=l.iconClass)?t=e.call(a,{hash:{},data:n}):(e=a&&a.iconClass,t=typeof e===m?e.call(a,{hash:{},data:n}):e),r+=g(t)+'"'}function h(a,n){return'\n			<div sui-dropdown-search>\n				<input sui-dropdown-search-input type="text" placeholder="Search">\n			</div>\n		'}function p(a,n){var t,e,r="";return r+='\n		<div sui-dropdown-option="',t=l["if"].call(a,a&&a.is_current,{hash:{},inverse:w.noop,fn:w.program(14,c,n),data:n}),(t||0===t)&&(r+=t),r+='" data-value="',(e=l.value)?t=e.call(a,{hash:{},data:n}):(e=a&&a.value,t=typeof e===m?e.call(a,{hash:{},data:n}):e),r+=g(t)+'">',(e=l.text)?t=e.call(a,{hash:{},data:n}):(e=a&&a.text,t=typeof e===m?e.call(a,{hash:{},data:n}):e),(t||0===t)&&(r+=t),r+="</div>\n		"}function c(a,n){return"is-active"}function u(a,n){return"\n			<div sui-dropdown-footer></div>\n		"}this.compilerInfo=[4,">= 1.0.0"],l=this.merge(l,a.helpers),e=e||{};var f,v,y="",m="function",g=this.escapeExpression,w=this;return y+="<div ",f=l["if"].call(n,n&&n.id,{hash:{},inverse:w.noop,fn:w.program(1,r,e),data:e}),(f||0===f)&&(y+=f),y+=' sui-input sui-dropdown="',(v=l.dropdown)?f=v.call(n,{hash:{},data:e}):(v=n&&n.dropdown,f=typeof v===m?v.call(n,{hash:{},data:e}):v),y+=g(f)+'" ',f=l["if"].call(n,n&&n["class"],{hash:{},inverse:w.noop,fn:w.program(3,o,e),data:e}),(f||0===f)&&(y+=f),y+=" ",f=l["if"].call(n,n&&n.styles,{hash:{},inverse:w.noop,fn:w.program(5,s,e),data:e}),(f||0===f)&&(y+=f),y+=">\n	",f=l["if"].call(n,n&&n.label,{hash:{},inverse:w.noop,fn:w.program(7,i,e),data:e}),(f||0===f)&&(y+=f),y+='\n	<input sui-dropdown-input type="hidden" value="'+g((f=n&&n.current,f=null==f||f===!1?f:f.value,typeof f===m?f.apply(n):f))+'" name="',(v=l.name)?f=v.call(n,{hash:{},data:e}):(v=n&&n.name,f=typeof v===m?v.call(n,{hash:{},data:e}):v),y+=g(f)+'">\n	<div sui-dropdown-trigger="',(v=l.trigger_variation)?f=v.call(n,{hash:{},data:e}):(v=n&&n.trigger_variation,f=typeof v===m?v.call(n,{hash:{},data:e}):v),y+=g(f)+'" ',f=l["if"].call(n,n&&n.iconClass,{hash:{},inverse:w.noop,fn:w.program(9,d,e),data:e}),(f||0===f)&&(y+=f),y+=">",f=n&&n.current,f=null==f||f===!1?f:f.text,f=typeof f===m?f.apply(n):f,(f||0===f)&&(y+=f),y+='</div>\n	<div sui-dropdown-options="',(v=l.dropdown)?f=v.call(n,{hash:{},data:e}):(v=n&&n.dropdown,f=typeof v===m?v.call(n,{hash:{},data:e}):v),y+=g(f)+'" ',f=l["if"].call(n,n&&n.styles,{hash:{},inverse:w.noop,fn:w.program(5,s,e),data:e}),(f||0===f)&&(y+=f),y+=">\n		",f=l["if"].call(n,n&&n.searchable,{hash:{},inverse:w.noop,fn:w.program(11,h,e),data:e}),(f||0===f)&&(y+=f),y+="\n		",f=l.each.call(n,n&&n.options,{hash:{},inverse:w.noop,fn:w.program(13,p,e),data:e}),(f||0===f)&&(y+=f),y+="\n		",f=l["if"].call(n,n&&n.hasFooter,{hash:{},inverse:w.noop,fn:w.program(16,u,e),data:e}),(f||0===f)&&(y+=f),y+="\n	</div>\n</div>"});

},{"hbsfy/runtime":43}],13:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,n,l,e,i){function s(a,n){var e,i,s="";return s+='id="',(i=l.id)?e=i.call(a,{hash:{},data:n}):(i=a&&a.id,e=typeof i===u?i.call(a,{hash:{},data:n}):i),s+=v(e)+'"'}function t(a,n){var e,i,s="";return s+='class="',(i=l["class"])?e=i.call(a,{hash:{},data:n}):(i=a&&a["class"],e=typeof i===u?i.call(a,{hash:{},data:n}):i),s+=v(e)+'"'}function r(a,n){var e,i,s="";return s+='sui-styles="',(i=l.styles)?e=i.call(a,{hash:{},data:n}):(i=a&&a.styles,e=typeof i===u?i.call(a,{hash:{},data:n}):i),s+=v(e)+'"'}function h(a,n){var e,i,s="";return s+='<label class="sui-input-label" for="',(i=l.name)?e=i.call(a,{hash:{},data:n}):(i=a&&a.name,e=typeof i===u?i.call(a,{hash:{},data:n}):i),s+=v(e)+'">',(i=l.label)?e=i.call(a,{hash:{},data:n}):(i=a&&a.label,e=typeof i===u?i.call(a,{hash:{},data:n}):i),s+=v(e)+"</label>"}function d(a,n){var e,i,s="";return s+='\n		<input type="file" name="',(i=l.name)?e=i.call(a,{hash:{},data:n}):(i=a&&a.name,e=typeof i===u?i.call(a,{hash:{},data:n}):i),s+=v(e)+'">\n		'}function o(a,n){var e,i,s="";return s+='\n		<input type="file">\n		<input type="hidden" name="',(i=l.name)?e=i.call(a,{hash:{},data:n}):(i=a&&a.name,e=typeof i===u?i.call(a,{hash:{},data:n}):i),s+=v(e)+'">\n\n		<div sui-file-loader>\n			<div class="nu-loader med loading"></div>\n		</div>\n\n		<div sui-file-image-preview>\n			<img src="/" title="">\n		</div>\n		'}this.compilerInfo=[4,">= 1.0.0"],l=this.merge(l,a.helpers),i=i||{};var c,f,p="",u="function",v=this.escapeExpression,m=this;return p+="<div ",c=l["if"].call(n,n&&n.id,{hash:{},inverse:m.noop,fn:m.program(1,s,i),data:i}),(c||0===c)&&(p+=c),p+=' sui-input sui-file="',(f=l.file)?c=f.call(n,{hash:{},data:i}):(f=n&&n.file,c=typeof f===u?f.call(n,{hash:{},data:i}):f),p+=v(c)+'" ',c=l["if"].call(n,n&&n["class"],{hash:{},inverse:m.noop,fn:m.program(3,t,i),data:i}),(c||0===c)&&(p+=c),p+=" ",c=l["if"].call(n,n&&n.styles,{hash:{},inverse:m.noop,fn:m.program(5,r,i),data:i}),(c||0===c)&&(p+=c),p+=">\n	",c=l["if"].call(n,n&&n.label,{hash:{},inverse:m.noop,fn:m.program(7,h,i),data:i}),(c||0===c)&&(p+=c),p+="\n\n	<div sui-file-target>\n		",c=l.unless.call(n,n&&n.async,{hash:{},inverse:m.noop,fn:m.program(9,d,i),data:i}),(c||0===c)&&(p+=c),p+="\n\n		\n		",c=l["if"].call(n,n&&n.async,{hash:{},inverse:m.noop,fn:m.program(11,o,i),data:i}),(c||0===c)&&(p+=c),p+='\n\n		<div sui-file-placeholder class="icon-f-upload-image">\n			<p>Upload here.</p>\n		</div>\n\n		<div sui-file-filename>\n			\n		</div>\n	</div>\n</div>'});

},{"hbsfy/runtime":43}],14:[function(require,module,exports){
function SuiFileAsync(){}function _dataURItoBlob(e,a){for(var i=atob(e.split(",")[1]),t=new ArrayBuffer(i.length),n=new Uint8Array(t),s=0;s<i.length;s++)n[s]=i.charCodeAt(s);return new Blob([t],{type:a})}var $=window.jQuery,_=window._;$.extend(SuiFileAsync.prototype,{async:{extensionInit:function(e){this.asyncImageMaxWidth=600,this.asyncImageMaxHeight=600,this.asyncImageQuality=80,this.isShowingPreviewImage=!1,this.isUploading=!1,this.$hiddenInput=this.$el.find('input[type="hidden"]'),this.$asyncImagePreview=this.$el.find("[sui-upload-image-preview]"),this.$asyncUploadLoader=this.$el.find("[sui-upload-loader]")},extensionBind:function(e){},extensionUnbind:function(){}},_changeListener:function(e){var a,i;return this.$input[0]&&this.$input[0].files?(a=this.$input[0].files[0],void(a&&(i="image/jpg"===a.type||"image/jpeg"===a.type||"image/png"===a.type||"image/gif"===a.type,i&&"undefined"!=typeof canvasResize?this._asyncResizeImage(a):(this._asyncHidePreviewImage(),this._asyncUploadFile(a))))):null},_asyncUploadFile:function(e){var a=this,i=new FormData;i.append(this.name,e),i.append("action","upload-custom-rsvp-file"),$.ajax({url:window.location.pathname,type:"post",data:i,dataType:"json",processData:!1,contentType:!1}).done(function(e){var i=e[a.name.replace("custom_field_","")];return"undefined"!=typeof i&&i.path?(a._asyncSetUploadStatus("has-file-uploaded"),void a.$hiddenInput.val(i.path)):(a._asyncSetUploadStatus("upload-error"),void a.$hiddenInput.val(""))}).fail(function(){a._asyncSetUploadStatus("upload-error"),a.$hiddenInput.val("")}).always(function(){})},_asyncResizeImage:function(e){var a=this;a._asyncSetUploadStatus("is-uploading"),setTimeout(function(){canvasResize(e,{width:a.asyncImageMaxWidth,height:a.asyncImageMaxHeight,crop:!1,quality:a.asyncImageQuality,rotate:0,callback:function(e){var i=_dataURItoBlob(e);e&&i?(a._asyncShowPreviewImage(e),a._asyncUploadFile(i)):(a._asyncSetUploadStatus("upload-error"),this._asyncHidePreviewImage())}})},0)},_asyncShowPreviewImage:function(e){this.$asyncImagePreview.find("img").attr("src",e).end().toggleAttrVal("sui-upload-image-preview","has-image",!!e),this.isShowingPreviewImage=!0},_asyncHidePreviewImage:function(){this.isShowingPreviewImage&&(this.$asyncImagePreview.find("img").attr("src","").end().removeAttrVal("has-image"),this.isShowingPreviewImage=!1)},_asyncSetUploadStatus:function(e){this.$uploadTarget.attr("sui-upload-target",e)}}),module.exports=SuiFileAsync;

},{}],15:[function(require,module,exports){
(function (global){
function SuiFile(e,t,i){SuiInputBaseInterface.call(this,e)}var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),_=(typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null),SuiInputBaseInterface=require("../sui-input-base-interface"),template=require("./template.hbs"),cmsTemplate=require("./cms-template.hbs"),_extensions={async:require("./extensions/sui.file.async.js")};$.extend(SuiFile.prototype,SuiInputBaseInterface.prototype,{init:function(){SuiInputBaseInterface.prototype.init.call(this),this.$uploadTarget=this.$el.find("[sui-file-target]"),this.$placeholder=this.$el.find("[sui-file-placeholder]"),this.$uploadFilename=this.$el.find("[sui-file-filename]")},setValue:function(){return!1},_getValueFromMarkup:function(){return this.$input[0].files&&this.$input[0].files[0]&&this.$input[0].files[0].name||"-"},_getTemplate:function(e){return"cms"===e?cmsTemplate:template},_getAvailableExtensions:function(){return _extensions},_changeListener:function(e){var t=this,i=this._getValueFromMarkup();this.$uploadFilename.text(i),t.$uploadTarget.addAttrVal("sui-file-target","has-file-uploaded"),SuiInputBaseInterface.prototype._changeListener.call(this)},_findInputInMarkup:function(e){return this.$el.find('input[type="file"]')}}),module.exports=function(e,t,i){function n(e,t,i){SuiFile.call(this,e,t,i)}var s="undefined"!=typeof e.extensions?e.extensions:[];return"string"==typeof s&&(s=s.split(" ")),$.extend(n.prototype,SuiFile.prototype),_.each(s,function(e){_extensions[e]&&$.extend(n.prototype,_extensions[e].prototype)}),new n(e,t,i)};


}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})

},{"../sui-input-base-interface":17,"./cms-template.hbs":13,"./extensions/sui.file.async.js":14,"./template.hbs":16}],16:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,n,l,e,i){function s(a,n){var e,i,s="";return s+='id="',(i=l.id)?e=i.call(a,{hash:{},data:n}):(i=a&&a.id,e=typeof i===u?i.call(a,{hash:{},data:n}):i),s+=v(e)+'"'}function t(a,n){var e,i,s="";return s+='class="',(i=l["class"])?e=i.call(a,{hash:{},data:n}):(i=a&&a["class"],e=typeof i===u?i.call(a,{hash:{},data:n}):i),s+=v(e)+'"'}function r(a,n){var e,i,s="";return s+='sui-styles="',(i=l.styles)?e=i.call(a,{hash:{},data:n}):(i=a&&a.styles,e=typeof i===u?i.call(a,{hash:{},data:n}):i),s+=v(e)+'"'}function h(a,n){var e,i,s="";return s+='<label class="sui-input-label" for="',(i=l.name)?e=i.call(a,{hash:{},data:n}):(i=a&&a.name,e=typeof i===u?i.call(a,{hash:{},data:n}):i),s+=v(e)+'">',(i=l.label)?e=i.call(a,{hash:{},data:n}):(i=a&&a.label,e=typeof i===u?i.call(a,{hash:{},data:n}):i),s+=v(e)+"</label>"}function d(a,n){var e,i,s="";return s+='\n		<input type="file" name="',(i=l.name)?e=i.call(a,{hash:{},data:n}):(i=a&&a.name,e=typeof i===u?i.call(a,{hash:{},data:n}):i),s+=v(e)+'">\n		'}function o(a,n){var e,i,s="";return s+='\n		<input type="file">\n		<input type="hidden" name="',(i=l.name)?e=i.call(a,{hash:{},data:n}):(i=a&&a.name,e=typeof i===u?i.call(a,{hash:{},data:n}):i),s+=v(e)+'">\n\n		<div sui-file-loader>\n			<div class="nu-loader med loading"></div>\n		</div>\n\n		<div sui-file-image-preview>\n			<img src="/" title="">\n		</div>\n		'}this.compilerInfo=[4,">= 1.0.0"],l=this.merge(l,a.helpers),i=i||{};var c,f,p="",u="function",v=this.escapeExpression,m=this;return p+="<div ",c=l["if"].call(n,n&&n.id,{hash:{},inverse:m.noop,fn:m.program(1,s,i),data:i}),(c||0===c)&&(p+=c),p+=' sui-input sui-file="',(f=l.file)?c=f.call(n,{hash:{},data:i}):(f=n&&n.file,c=typeof f===u?f.call(n,{hash:{},data:i}):f),p+=v(c)+'" ',c=l["if"].call(n,n&&n["class"],{hash:{},inverse:m.noop,fn:m.program(3,t,i),data:i}),(c||0===c)&&(p+=c),p+=" ",c=l["if"].call(n,n&&n.styles,{hash:{},inverse:m.noop,fn:m.program(5,r,i),data:i}),(c||0===c)&&(p+=c),p+=">\n	",c=l["if"].call(n,n&&n.label,{hash:{},inverse:m.noop,fn:m.program(7,h,i),data:i}),(c||0===c)&&(p+=c),p+="\n\n	<div sui-file-target>\n		",c=l.unless.call(n,n&&n.async,{hash:{},inverse:m.noop,fn:m.program(9,d,i),data:i}),(c||0===c)&&(p+=c),p+="\n\n		\n		",c=l["if"].call(n,n&&n.async,{hash:{},inverse:m.noop,fn:m.program(11,o,i),data:i}),(c||0===c)&&(p+=c),p+='\n\n		<div sui-file-placeholder class="icon-f-upload-image">\n			<p>Upload here.</p>\n		</div>\n\n		<div sui-file-filename>\n			\n		</div>\n	</div>\n</div>'});

},{"hbsfy/runtime":43}],17:[function(require,module,exports){
(function (global){
function SuiInputBaseInterface(e){e=e||{},e.inputLabelId="sui-input-"+_instantiatedInputsCount,_instantiatedInputsCount++,SuiBaseComponentInterface.call(this,e),this.name="undefined"!=typeof e.name?e.name:"",this.label="undefined"!=typeof e.label?e.label:"Label",this.placeholderText="undefined"!=typeof e.placeholderText?e.placeholderText:"",this.currentValue="undefined"!=typeof e.currentValue&&null!==e.currentValue?e.currentValue:null,this.isRequired=e.isRequired&&"false"!==e.isRequired&&"0"!=e.isRequired?e.isRequired:0,this._onChangeCallbacks=[],e.onChange&&this._onChangeCallbacks.push(e.onChange),this.errorCode,this.errorMsg,this.areErrorsRendered="undefined"==typeof e.areErrorsRendered||e.areErrorsRendered?1:0,this.valueFormat=e.valueFormat||null,this.isReadOnly="undefined"==typeof e.isReadOnly?!1:e.isReadOnly,this.isDisabled="undefined"==typeof e.isDisabled?!1:e.isDisabled}var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),_=(typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null),SuiBaseComponentInterface=require("../sui-component-base-interface");require("../../helpers/attributeHelpers");var _instantiatedInputsCount=1;$.extend(SuiInputBaseInterface.prototype,SuiBaseComponentInterface.prototype,{init:function(){SuiBaseComponentInterface.prototype.init.call(this),this.$input=this._findInputInMarkup(),this.$errorContainer=$('<div class="sui-error-container"></div>'),this.$label=this.$el.find("[sui-input-label]:first"),this.setValue(this.currentValue),this.setIsRequired(this.isRequired),this.setIsDisabled(this.isDisabled),this.setIsReadOnly(this.isReadOnly),this.$input.on("change",this._changeListener.bind(this))},_findInputInMarkup:function(){return this.$el.find("input")},_getValueFromMarkup:function(){return this.$input.val()},_setValueInMarkup:function(e){this.$input.val(e)},_changeListener:function(e){this.setValue(this._getValueFromMarkup(e))},_throwError:function(e,t){this.errorCode=e,this.errorMsg=t,this.$el.addAttrVal("sui-input","has-errors"),this.areErrorsRendered&&this.$errorContainer.html(this._getFormattedErrors()).appendTo(this.$el)},_clearErrors:function(){this.errorCode=null,this.errorMsg=null,this.$el.removeAttrVal("sui-input","has-errors"),this.areErrorsRendered&&this.$errorContainer.text("").detach()},_getFormattedErrors:function(){var e="";return e+="<li>"+this.errorMsg+"</li>","<ul>"+e+"</ul>"},_formatTemplateData:function(e){return SuiBaseComponentInterface.prototype._formatTemplateData.call(this,e)},validate:function(){this._clearErrors();var e=this.getValue();return this.isRequired&&(null===e||""===e||_.isArray(e)&&!e.length)&&this._throwError("isRequiredEmpty",this.getUserFacingName()+" is required."),"function"==typeof this.validateInputType&&this.validateInputType(),this.errorCode?{code:this.errorCode,msg:this.errorMsg}:!1},onChange:function(e){this._onChangeCallbacks.push(e)},setLabel:function(e){this.label=e,this.$label.text(this.label)},setPlaceholderText:function(e){this.placeholderText=e,this.$input.attr("placeholder",this.placeholderText)},setIsRequired:function(e){this.isRequired=!!e,this.$el.toggleAttrVal("sui-input","is-required",e)},setValue:function(e,t){var i=this,r=this.getValue();e=void 0!==e?e:"",this.currentValue=e,this._setValueInMarkup(e),(!t||t.triggerChange)&&_.each(this._onChangeCallbacks,function(e){"function"==typeof e&&e.call(i,i.getValue(),r)})},setIsReadOnly:function(e){this.isReadOnly=!!e,this.$el.toggleAttrVal("sui-input","is-read-only",this.isReadOnly)},setIsDisabled:function(e){this.isDisabled=!!e,this.$el.toggleAttrVal("sui-input","is-disabled",this.isDisabled)},getPlaceholderText:function(){return this.placeholderText},getLabel:function(){return this.label},getIsRequired:function(){return this.isRequired},getValue:function(){return this.currentValue},getIsReadOnly:function(){return this.isReadOnly},getUserFacingName:function(){return this.label?this.label:this.placeholderText?this.placeholderText:"This field"},getIsDisabled:function(){return this.isDisabled},getName:function(){return this.name}}),module.exports=SuiInputBaseInterface;


}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})

},{"../../helpers/attributeHelpers":35,"../sui-component-base-interface":1}],18:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,l,t,e,s){function i(a,l){var t,e="";return e+='id="'+c((t=a&&a.attributes,t=null==t||t===!1?t:t.id,typeof t===p?t.apply(a):t))+'"'}function r(a,l){var t,e="";return e+='class="'+c((t=a&&a.attributes,t=null==t||t===!1?t:t["class"],typeof t===p?t.apply(a):t))+'"'}function n(a,l){var e,s,i="";return i+='sui-styles="',(s=t.styles)?e=s.call(a,{hash:{},data:l}):(s=a&&a.styles,e=typeof s===p?s.call(a,{hash:{},data:l}):s),i+=c(e)+'"'}this.compilerInfo=[4,">= 1.0.0"],t=this.merge(t,a.helpers),s=s||{};var o,u,h="",p="function",c=this.escapeExpression,d=this;return h+='<div sui-input sui-multi-checkbox="',(u=t.multiCheckbox)?o=u.call(l,{hash:{},data:s}):(u=l&&l.multiCheckbox,o=typeof u===p?u.call(l,{hash:{},data:s}):u),h+=c(o)+'" ',o=t["if"].call(l,(o=l&&l.attributes,null==o||o===!1?o:o.id),{hash:{},inverse:d.noop,fn:d.program(1,i,s),data:s}),(o||0===o)&&(h+=o),h+=" ",o=t["if"].call(l,(o=l&&l.attributes,null==o||o===!1?o:o["class"]),{hash:{},inverse:d.noop,fn:d.program(3,r,s),data:s}),(o||0===o)&&(h+=o),h+=" ",o=t["if"].call(l,l&&l.styles,{hash:{},inverse:d.noop,fn:d.program(5,n,s),data:s}),(o||0===o)&&(h+=o),h+=">\n	<div sui-input-group-label>",(u=t.label)?o=u.call(l,{hash:{},data:s}):(u=l&&l.label,o=typeof u===p?u.call(l,{hash:{},data:s}):u),h+=c(o)+"</div>\n</div>"});

},{"hbsfy/runtime":43}],19:[function(require,module,exports){
(function (global){
function SuiMultiCheckbox(e){SuiInputBaseInterface.call(this,e),this.suiCheckboxInstances=[]}var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),_=(typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null),SuiInputBaseInterface=require("../sui-input-base-interface"),template=require("./template.hbs"),cmsTemplate=require("./cms-template.hbs");$.extend(SuiMultiCheckbox.prototype,SuiInputBaseInterface.prototype,{_getTemplate:function(e){return"cms"===e?cmsTemplate:template},init:function(){var e=this;e.data=e._formatTemplateData(e.data),SuiInputBaseInterface.prototype.init.call(this),e.$label=e.$el.find("[sui-input-group-label]"),_.each(e.data.options,function(t,a){e._addCheckbox(t,a)})},_formatTemplateData:function(e){try{e.options="string"==typeof e.options?JSON.parse(e.options):e.options||[]}catch(t){e.options=[],console.log("Sui MultiCheckbox, error parsing options JSON")}if("string"==typeof e.options[0]){var a;for(a=0;a<e.options.length;a++){var n=e.options[a];e.options[a]={text:n,value:n}}}return SuiInputBaseInterface.prototype._formatTemplateData.call(this,e)},_addCheckbox:function(e,t){var a=this;if("string"==typeof e)var n=e,i=e;else var n=e.text,i=e.value;var o=SUI.createComponent("sui-checkbox",{template:"cms",label:n,value:i,currentValue:0,name:this.name+"-"+t,attachTo:a.$el,isRequired:!1});o.onChange(_.bind(this._changeListener,this)),o&&a.suiCheckboxInstances.push(o)},_getValueFromMarkup:function(){var e=this,t=[];return _.each(e.suiCheckboxInstances,function(e){e.getValue()&&t.push(e.getInputValue())}),t},_setValueInMarkup:function(e){var t=this;_.each(t.suiCheckboxInstances,function(t,a){var n=-1!==_.indexOf(e,t.getInputValue());t.setValue(n,{triggerChange:!1})})},setValue:function(e,t){var a="object"==typeof e?e:[e];SuiInputBaseInterface.prototype.setValue.call(this,a,t)}}),module.exports=function(e){return new SuiMultiCheckbox(e)};


}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})

},{"../sui-input-base-interface":17,"./cms-template.hbs":18,"./template.hbs":20}],20:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,l,t,e,s){function i(a,l){var t,e="";return e+='id="'+c((t=a&&a.attributes,t=null==t||t===!1?t:t.id,typeof t===p?t.apply(a):t))+'"'}function r(a,l){var t,e="";return e+='class="'+c((t=a&&a.attributes,t=null==t||t===!1?t:t["class"],typeof t===p?t.apply(a):t))+'"'}function n(a,l){var e,s,i="";return i+='sui-styles="',(s=t.styles)?e=s.call(a,{hash:{},data:l}):(s=a&&a.styles,e=typeof s===p?s.call(a,{hash:{},data:l}):s),i+=c(e)+'"'}this.compilerInfo=[4,">= 1.0.0"],t=this.merge(t,a.helpers),s=s||{};var o,u,h="",p="function",c=this.escapeExpression,d=this;return h+='<div sui-input sui-multi-checkbox="',(u=t.multiCheckbox)?o=u.call(l,{hash:{},data:s}):(u=l&&l.multiCheckbox,o=typeof u===p?u.call(l,{hash:{},data:s}):u),h+=c(o)+'" ',o=t["if"].call(l,(o=l&&l.attributes,null==o||o===!1?o:o.id),{hash:{},inverse:d.noop,fn:d.program(1,i,s),data:s}),(o||0===o)&&(h+=o),h+=" ",o=t["if"].call(l,(o=l&&l.attributes,null==o||o===!1?o:o["class"]),{hash:{},inverse:d.noop,fn:d.program(3,r,s),data:s}),(o||0===o)&&(h+=o),h+=" ",o=t["if"].call(l,l&&l.styles,{hash:{},inverse:d.noop,fn:d.program(5,n,s),data:s}),(o||0===o)&&(h+=o),h+=">\n	<div sui-input-group-label>",(u=t.label)?o=u.call(l,{hash:{},data:s}):(u=l&&l.label,o=typeof u===p?u.call(l,{hash:{},data:s}):u),h+=c(o)+"</div>\n</div>"});

},{"hbsfy/runtime":43}],21:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,l,t,e,n){function i(a,l){var t,e="";return e+='id="'+c((t=a&&a.attributes,t=null==t||t===!1?t:t.id,typeof t===h?t.apply(a):t))+'"'}function s(a,l){var t,e="";return e+='class="'+c((t=a&&a.attributes,t=null==t||t===!1?t:t["class"],typeof t===h?t.apply(a):t))+'"'}function p(a,l){var e,n,i="";return i+='sui-styles="',(n=t.styles)?e=n.call(a,{hash:{},data:l}):(n=a&&a.styles,e=typeof n===h?n.call(a,{hash:{},data:l}):n),i+=c(e)+'"'}function r(a,l,e){var n,i,s="";return s+='\n	<div sui-radio-option>\n		<label sui-input-label="checkable" for="'+c((n=e&&e.inputLabelId,typeof n===h?n.apply(a):n))+"-"+c((n=null==l||l===!1?l:l.index,typeof n===h?n.apply(a):n))+'">',(i=t.text)?n=i.call(a,{hash:{},data:l}):(i=a&&a.text,n=typeof i===h?i.call(a,{hash:{},data:l}):i),s+=c(n)+'</label>\n		<div sui-input-holder>\n			<input type="radio" name="'+c((n=e&&e.name,typeof n===h?n.apply(a):n))+'" value="',(i=t.value)?n=i.call(a,{hash:{},data:l}):(i=a&&a.value,n=typeof i===h?i.call(a,{hash:{},data:l}):i),s+=c(n)+'" id="'+c((n=e&&e.inputLabelId,typeof n===h?n.apply(a):n))+"-"+c((n=null==l||l===!1?l:l.index,typeof n===h?n.apply(a):n))+'">\n			<span sui-input-replacement></span>\n		</div>\n	</div>\n	'}this.compilerInfo=[4,">= 1.0.0"],t=this.merge(t,a.helpers),n=n||{};var o,u,d="",h="function",c=this.escapeExpression,f=this;return d+='<div sui-input sui-radio="',(u=t.radio)?o=u.call(l,{hash:{},data:n}):(u=l&&l.radio,o=typeof u===h?u.call(l,{hash:{},data:n}):u),d+=c(o)+'" ',o=t["if"].call(l,(o=l&&l.attributes,null==o||o===!1?o:o.id),{hash:{},inverse:f.noop,fn:f.program(1,i,n),data:n}),(o||0===o)&&(d+=o),d+=" ",o=t["if"].call(l,(o=l&&l.attributes,null==o||o===!1?o:o["class"]),{hash:{},inverse:f.noop,fn:f.program(3,s,n),data:n}),(o||0===o)&&(d+=o),d+=" ",o=t["if"].call(l,l&&l.styles,{hash:{},inverse:f.noop,fn:f.program(5,p,n),data:n}),(o||0===o)&&(d+=o),d+=">\n	<div sui-input-group-label>",(u=t.label)?o=u.call(l,{hash:{},data:n}):(u=l&&l.label,o=typeof u===h?u.call(l,{hash:{},data:n}):u),d+=c(o)+"</div>\n	",o=t.each.call(l,l&&l.options,{hash:{},inverse:f.noop,fn:f.programWithDepth(7,r,n,l),data:n}),(o||0===o)&&(d+=o),d+="\n</div>"});

},{"hbsfy/runtime":43}],22:[function(require,module,exports){
(function (global){
function SuiRadio(t){SuiInputBaseInterface.call(this,t)}var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),_=(typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null),SuiInputBaseInterface=require("../sui-input-base-interface"),template=require("./template.hbs"),cmsTemplate=require("./cms-template.hbs");$.extend(SuiRadio.prototype,SuiInputBaseInterface.prototype,{_getTemplate:function(t){return"cms"===t?cmsTemplate:template},init:function(){this.data=this._formatTemplateData(this.data),SuiInputBaseInterface.prototype.init.call(this),this.$label=this.$el.find("[sui-input-group-label]")},_formatTemplateData:function(t){try{t.options="string"==typeof t.options?JSON.parse(t.options):t.options||[]}catch(e){t.options=[],console.log("Sui Radio, error parsing options JSON")}if("string"==typeof t.options[0]){var i;for(i=0;i<t.options.length;i++){var a=t.options[i];t.options[i]={text:a,value:a}}}return SuiInputBaseInterface.prototype._formatTemplateData.call(this,t)},_getValueFromMarkup:function(t){return t&&t.target?$(t.target).filter(":checked").val():this.$input.filter(":checked").val()},_setValueInMarkup:function(t){this.$input.prop("checked",!1).filter('[value="'+t+'"]').prop("checked",!0)}}),module.exports=function(t){return new SuiRadio(t)};


}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})

},{"../sui-input-base-interface":17,"./cms-template.hbs":21,"./template.hbs":23}],23:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,l,t,e,n){function i(a,l){var t,e="";return e+='id="'+c((t=a&&a.attributes,t=null==t||t===!1?t:t.id,typeof t===h?t.apply(a):t))+'"'}function s(a,l){var t,e="";return e+='class="'+c((t=a&&a.attributes,t=null==t||t===!1?t:t["class"],typeof t===h?t.apply(a):t))+'"'}function p(a,l){var e,n,i="";return i+='sui-styles="',(n=t.styles)?e=n.call(a,{hash:{},data:l}):(n=a&&a.styles,e=typeof n===h?n.call(a,{hash:{},data:l}):n),i+=c(e)+'"'}function r(a,l,e){var n,i,s="";return s+='\n	<div sui-radio-option>\n		<label sui-input-label="checkable" for="'+c((n=e&&e.inputLabelId,typeof n===h?n.apply(a):n))+"-"+c((n=null==l||l===!1?l:l.index,typeof n===h?n.apply(a):n))+'">',(i=t.text)?n=i.call(a,{hash:{},data:l}):(i=a&&a.text,n=typeof i===h?i.call(a,{hash:{},data:l}):i),s+=c(n)+'</label>\n		<div sui-input-holder>\n			<input type="radio" name="'+c((n=e&&e.name,typeof n===h?n.apply(a):n))+'" value="',(i=t.value)?n=i.call(a,{hash:{},data:l}):(i=a&&a.value,n=typeof i===h?i.call(a,{hash:{},data:l}):i),s+=c(n)+'" id="'+c((n=e&&e.inputLabelId,typeof n===h?n.apply(a):n))+"-"+c((n=null==l||l===!1?l:l.index,typeof n===h?n.apply(a):n))+'">\n			<span sui-input-replacement></span>\n		</div>\n	</div>\n	'}this.compilerInfo=[4,">= 1.0.0"],t=this.merge(t,a.helpers),n=n||{};var o,u,d="",h="function",c=this.escapeExpression,f=this;return d+='<div sui-input sui-radio="',(u=t.radio)?o=u.call(l,{hash:{},data:n}):(u=l&&l.radio,o=typeof u===h?u.call(l,{hash:{},data:n}):u),d+=c(o)+'" ',o=t["if"].call(l,(o=l&&l.attributes,null==o||o===!1?o:o.id),{hash:{},inverse:f.noop,fn:f.program(1,i,n),data:n}),(o||0===o)&&(d+=o),d+=" ",o=t["if"].call(l,(o=l&&l.attributes,null==o||o===!1?o:o["class"]),{hash:{},inverse:f.noop,fn:f.program(3,s,n),data:n}),(o||0===o)&&(d+=o),d+=" ",o=t["if"].call(l,l&&l.styles,{hash:{},inverse:f.noop,fn:f.program(5,p,n),data:n}),(o||0===o)&&(d+=o),d+=">\n	<div sui-input-group-label>",(u=t.label)?o=u.call(l,{hash:{},data:n}):(u=l&&l.label,o=typeof u===h?u.call(l,{hash:{},data:n}):u),d+=c(o)+"</div>\n	",o=t.each.call(l,l&&l.options,{hash:{},inverse:f.noop,fn:f.programWithDepth(7,r,n,l),data:n}),(o||0===o)&&(d+=o),d+="\n</div>"});

},{"hbsfy/runtime":43}],24:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,l,e,t,s){function h(a,l){var t,s,h="";return h+='id="',(s=e.id)?t=s.call(a,{hash:{},data:l}):(s=a&&a.id,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=f(t)+'"'}function r(a,l){var t,s,h="";return h+='class="',(s=e["class"])?t=s.call(a,{hash:{},data:l}):(s=a&&a["class"],t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=f(t)+'"'}function n(a,l){var t,s,h="";return h+='sui-styles="',(s=e.styles)?t=s.call(a,{hash:{},data:l}):(s=a&&a.styles,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=f(t)+'"'}function i(a,l){var t,s,h="";return h+='<label sui-input-label for="',(s=e.inputLabelId)?t=s.call(a,{hash:{},data:l}):(s=a&&a.inputLabelId,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=f(t)+'">',(s=e.label)?t=s.call(a,{hash:{},data:l}):(s=a&&a.label,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=f(t)+"</label>"}this.compilerInfo=[4,">= 1.0.0"],e=this.merge(e,a.helpers),s=s||{};var d,o,c="",p="function",f=this.escapeExpression,u=this;return c+="<div ",d=e["if"].call(l,l&&l.id,{hash:{},inverse:u.noop,fn:u.program(1,h,s),data:s}),(d||0===d)&&(c+=d),c+=' sui-input sui-textarea="',(o=e.textarea)?d=o.call(l,{hash:{},data:s}):(o=l&&l.textarea,d=typeof o===p?o.call(l,{hash:{},data:s}):o),c+=f(d)+'" ',d=e["if"].call(l,l&&l["class"],{hash:{},inverse:u.noop,fn:u.program(3,r,s),data:s}),(d||0===d)&&(c+=d),c+=" ",d=e["if"].call(l,l&&l.styles,{hash:{},inverse:u.noop,fn:u.program(5,n,s),data:s}),(d||0===d)&&(c+=d),c+=">\n	",d=e["if"].call(l,l&&l.label,{hash:{},inverse:u.noop,fn:u.program(7,i,s),data:s}),(d||0===d)&&(c+=d),c+='\n    <textarea name="',(o=e.name)?d=o.call(l,{hash:{},data:s}):(o=l&&l.name,d=typeof o===p?o.call(l,{hash:{},data:s}):o),c+=f(d)+'" placeholder="',(o=e.placeholderText)?d=o.call(l,{hash:{},data:s}):(o=l&&l.placeholderText,d=typeof o===p?o.call(l,{hash:{},data:s}):o),c+=f(d)+'" id="',(o=e.inputLabelId)?d=o.call(l,{hash:{},data:s}):(o=l&&l.inputLabelId,d=typeof o===p?o.call(l,{hash:{},data:s}):o),c+=f(d)+'"></textarea>\n</div>'});

},{"hbsfy/runtime":43}],25:[function(require,module,exports){
(function (global){
function SuiTextarea(e,t,r){SuiInputBaseInterface.call(this,e)}var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),_=(typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null),SuiInputBaseInterface=require("../sui-input-base-interface"),template=require("./template.hbs"),cmsTemplate=require("./cms-template.hbs");$.extend(SuiTextarea.prototype,SuiInputBaseInterface.prototype,{_getTemplate:function(e){return"cms"===e?cmsTemplate:template},_findInputInMarkup:function(){return this.$el.find("textarea")}}),module.exports=function(e){return new SuiTextarea(e)};


}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})

},{"../sui-input-base-interface":17,"./cms-template.hbs":24,"./template.hbs":26}],26:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,l,e,t,s){function h(a,l){var t,s,h="";return h+='id="',(s=e.id)?t=s.call(a,{hash:{},data:l}):(s=a&&a.id,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=f(t)+'"'}function r(a,l){var t,s,h="";return h+='class="',(s=e["class"])?t=s.call(a,{hash:{},data:l}):(s=a&&a["class"],t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=f(t)+'"'}function n(a,l){var t,s,h="";return h+='sui-styles="',(s=e.styles)?t=s.call(a,{hash:{},data:l}):(s=a&&a.styles,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=f(t)+'"'}function i(a,l){var t,s,h="";return h+='<label sui-input-label for="',(s=e.inputLabelId)?t=s.call(a,{hash:{},data:l}):(s=a&&a.inputLabelId,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=f(t)+'">',(s=e.label)?t=s.call(a,{hash:{},data:l}):(s=a&&a.label,t=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=f(t)+"</label>"}this.compilerInfo=[4,">= 1.0.0"],e=this.merge(e,a.helpers),s=s||{};var d,o,c="",p="function",f=this.escapeExpression,u=this;return c+="<div ",d=e["if"].call(l,l&&l.id,{hash:{},inverse:u.noop,fn:u.program(1,h,s),data:s}),(d||0===d)&&(c+=d),c+=' sui-input sui-textarea="',(o=e.textarea)?d=o.call(l,{hash:{},data:s}):(o=l&&l.textarea,d=typeof o===p?o.call(l,{hash:{},data:s}):o),c+=f(d)+'" ',d=e["if"].call(l,l&&l["class"],{hash:{},inverse:u.noop,fn:u.program(3,r,s),data:s}),(d||0===d)&&(c+=d),c+=" ",d=e["if"].call(l,l&&l.styles,{hash:{},inverse:u.noop,fn:u.program(5,n,s),data:s}),(d||0===d)&&(c+=d),c+=">\n	",d=e["if"].call(l,l&&l.label,{hash:{},inverse:u.noop,fn:u.program(7,i,s),data:s}),(d||0===d)&&(c+=d),c+='\n    <textarea name="',(o=e.name)?d=o.call(l,{hash:{},data:s}):(o=l&&l.name,d=typeof o===p?o.call(l,{hash:{},data:s}):o),c+=f(d)+'" placeholder="',(o=e.placeholderText)?d=o.call(l,{hash:{},data:s}):(o=l&&l.placeholderText,d=typeof o===p?o.call(l,{hash:{},data:s}):o),c+=f(d)+'" id="',(o=e.inputLabelId)?d=o.call(l,{hash:{},data:s}):(o=l&&l.inputLabelId,d=typeof o===p?o.call(l,{hash:{},data:s}):o),c+=f(d)+'"></textarea>\n</div>'});

},{"hbsfy/runtime":43}],27:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,l,t,e,s){function h(a,l){var e,s,h="";return h+='id="',(s=t.id)?e=s.call(a,{hash:{},data:l}):(s=a&&a.id,e=typeof s===o?s.call(a,{hash:{},data:l}):s),h+=f(e)+'"'}function n(a,l){var e,s,h="";return h+='class="',(s=t["class"])?e=s.call(a,{hash:{},data:l}):(s=a&&a["class"],e=typeof s===o?s.call(a,{hash:{},data:l}):s),h+=f(e)+'"'}function i(a,l){var e,s,h="";return h+='sui-styles="',(s=t.styles)?e=s.call(a,{hash:{},data:l}):(s=a&&a.styles,e=typeof s===o?s.call(a,{hash:{},data:l}):s),h+=f(e)+'"'}function r(a,l){var e,s,h="";return h+='<label sui-input-label for="',(s=t.inputLabelId)?e=s.call(a,{hash:{},data:l}):(s=a&&a.inputLabelId,e=typeof s===o?s.call(a,{hash:{},data:l}):s),h+=f(e)+'">',(s=t.label)?e=s.call(a,{hash:{},data:l}):(s=a&&a.label,e=typeof s===o?s.call(a,{hash:{},data:l}):s),h+=f(e)+"</label>"}this.compilerInfo=[4,">= 1.0.0"],t=this.merge(t,a.helpers),s=s||{};var d,p,c="",o="function",f=this.escapeExpression,u=this;return c+="<div ",d=t["if"].call(l,l&&l.id,{hash:{},inverse:u.noop,fn:u.program(1,h,s),data:s}),(d||0===d)&&(c+=d),c+=' sui-input sui-text="',(p=t.text)?d=p.call(l,{hash:{},data:s}):(p=l&&l.text,d=typeof p===o?p.call(l,{hash:{},data:s}):p),c+=f(d)+'" ',d=t["if"].call(l,l&&l["class"],{hash:{},inverse:u.noop,fn:u.program(3,n,s),data:s}),(d||0===d)&&(c+=d),c+=" ",d=t["if"].call(l,l&&l.styles,{hash:{},inverse:u.noop,fn:u.program(5,i,s),data:s}),(d||0===d)&&(c+=d),c+=">\n	",d=t["if"].call(l,l&&l.label,{hash:{},inverse:u.noop,fn:u.program(7,r,s),data:s}),(d||0===d)&&(c+=d),c+='\n    <input type="',(p=t.inputType)?d=p.call(l,{hash:{},data:s}):(p=l&&l.inputType,d=typeof p===o?p.call(l,{hash:{},data:s}):p),c+=f(d)+'" name="',(p=t.name)?d=p.call(l,{hash:{},data:s}):(p=l&&l.name,d=typeof p===o?p.call(l,{hash:{},data:s}):p),c+=f(d)+'" placeholder="',(p=t.placeholderText)?d=p.call(l,{hash:{},data:s}):(p=l&&l.placeholderText,d=typeof p===o?p.call(l,{hash:{},data:s}):p),c+=f(d)+'" id="',(p=t.inputLabelId)?d=p.call(l,{hash:{},data:s}):(p=l&&l.inputLabelId,d=typeof p===o?p.call(l,{hash:{},data:s}):p),c+=f(d)+'">\n</div>'});

},{"hbsfy/runtime":43}],28:[function(require,module,exports){
(function (global){
function SuiTextinputAddress(){}var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),_=(typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null);$.extend(SuiTextinputAddress.prototype,{address:{extensionInit:function(e){return this.autocompleteTypes,this.autocomplete,this.autocompleteListener,"undefined"==typeof google||google===!1?(this.isAddressInitialized=!1,void console.log("Setting address field autocomplete: google is not defined")):(this.autocompleteTypes="undefined"!=typeof this.autocompleteTypes?this.autocompleteTypes:{},void(this.isAddressInitialized=!0))},extensionBind:function(e){this.isAddressInitialized&&(this.autocomplete=new google.maps.places.Autocomplete(this.$input[0],autocomplete_options),this.listener=google.maps.event.addListener(this.autocomplete,"place_changed",function(e){this._addressPlaceHasChanged(e)}))},extensionUnbind:function(){this.autocomplete&&google.maps.event.clearInstanceListeners(this.autocomplete),void 0!==this.listener&&google.maps.event.removeListener(this.listener),$(".pac-container").remove()}},_addressGetPlace:function(){var e=this.autocomplete.getPlace(),t={};if(e.address_components)for(var s in e.address_components){var o=e.address_components[s].types[0],n=_componentTypeEquivalences[o];n&&(t[n]=e.address_components[s].long_name)}return _.defaults(t,{name:e.name,streetNumber:"",route:"",address:t.street_number+" "+t.route,city:"",state:"",zip:"",country:""}),t},_addressPlaceHasChanged:function(){this.place=this._addressGetPlace(),this.$input.addClass("autocompleted")}});var _componentTypeEquivalences={postal_code:"zip",street_number:"streetNumber",route:"route",locality:"city",administrative_area_level_1:"state",country:"country"};module.exports=SuiTextinputAddress;


}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})

},{}],29:[function(require,module,exports){
function SuiTextinputDatepicker(){}var $=window.jQuery,_=window._;$.extend(SuiTextinputDatepicker.prototype,{datepicker:{extensionInit:function(e){"undefined"==typeof $.datepicker&&(this.isDatepickerEnabled=!1);var t="mm/dd/yy";this.$input.datepicker({dateFormat:t,gotoCurrent:!0,constrainInput:!0}),this.valueFormat="date",this.isDatepickerEnabled=!0}}}),module.exports=SuiTextinputDatepicker;

},{}],30:[function(require,module,exports){
function SuiTextinputDatepicker(){}var $=window.jQuery,_=window._;$.extend(SuiTextinputDatepicker.prototype,{timepicker:{extensionInit:function(e){"undefined"==typeof $.timepicker&&(this.isTimepickerEnabled=!1);this.$input.timepicker({scrollDefault:"now"}),this.valueFormat="time",this.isTimepickerEnabled=!0}}}),module.exports=SuiTextinputDatepicker;

},{}],31:[function(require,module,exports){
(function (global){
function SuiTextinput(e){SuiInputBaseInterface.call(this,e),this.data.valueFormat=e.valueFormat||"text"}var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),_=(typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null),SuiInputBaseInterface=require("../sui-input-base-interface"),template=require("./template.hbs"),cmsTemplate=require("./cms-template.hbs"),_extensions={address:require("./extensions/sui.textinput.address.js"),datepicker:require("./extensions/sui.textinput.datepicker.js"),timepicker:require("./extensions/sui.textinput.timepicker.js")},_valueFormatRegExps={email:/^([A-Za-z0-9_\-\.\+:])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]*)$/,date:/^[01]?[0-9]{1}\/[012]?[1-9]{1}\/[0-9]{1,4}$/,time:/^[012]?[1-9]{1}:[0-5][0-9][\s]*(am|pm)?$/i};$.extend(SuiTextinput.prototype,SuiInputBaseInterface.prototype,{_getTemplate:function(e){return"cms"===e?cmsTemplate:template},_getAvailableExtensions:function(){return _extensions},validateInputType:function(){_valueFormatRegExps[this.valueFormat]&&!_valueFormatRegExps[this.valueFormat].test($.trim(this.getValue()))&&this._throwError("hasInvalidFormat",this.getUserFacingName()+" has an invalid format.")}}),module.exports=function(e,t,i){function n(e,t,i){SuiTextinput.call(this,e,t,i)}var s="undefined"!=typeof e.extensions?e.extensions:[];return"string"==typeof s&&(s=s.split(" ")),$.extend(n.prototype,SuiTextinput.prototype),_.each(s,function(e){_extensions[e]&&$.extend(n.prototype,_extensions[e].prototype)}),new n(e,t,i)};


}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})

},{"../sui-input-base-interface":17,"./cms-template.hbs":27,"./extensions/sui.textinput.address.js":28,"./extensions/sui.textinput.datepicker.js":29,"./extensions/sui.textinput.timepicker.js":30,"./template.hbs":32}],32:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,l,t,e,s){function h(a,l){var e,s,h="";return h+='id="',(s=t.id)?e=s.call(a,{hash:{},data:l}):(s=a&&a.id,e=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=f(e)+'"'}function n(a,l){var e,s,h="";return h+='class="',(s=t["class"])?e=s.call(a,{hash:{},data:l}):(s=a&&a["class"],e=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=f(e)+'"'}function r(a,l){var e,s,h="";return h+='sui-styles="',(s=t.styles)?e=s.call(a,{hash:{},data:l}):(s=a&&a.styles,e=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=f(e)+'"'}function i(a,l){var e,s,h="";return h+='<label sui-input-label for="',(s=t.inputLabelId)?e=s.call(a,{hash:{},data:l}):(s=a&&a.inputLabelId,e=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=f(e)+'">',(s=t.label)?e=s.call(a,{hash:{},data:l}):(s=a&&a.label,e=typeof s===p?s.call(a,{hash:{},data:l}):s),h+=f(e)+"</label>"}this.compilerInfo=[4,">= 1.0.0"],t=this.merge(t,a.helpers),s=s||{};var d,o,c="",p="function",f=this.escapeExpression,u=this;return c+="<div ",d=t["if"].call(l,l&&l.id,{hash:{},inverse:u.noop,fn:u.program(1,h,s),data:s}),(d||0===d)&&(c+=d),c+=' sui-input sui-text="',(o=t.text)?d=o.call(l,{hash:{},data:s}):(o=l&&l.text,d=typeof o===p?o.call(l,{hash:{},data:s}):o),c+=f(d)+'" ',d=t["if"].call(l,l&&l["class"],{hash:{},inverse:u.noop,fn:u.program(3,n,s),data:s}),(d||0===d)&&(c+=d),c+=" ",d=t["if"].call(l,l&&l.styles,{hash:{},inverse:u.noop,fn:u.program(5,r,s),data:s}),(d||0===d)&&(c+=d),c+=">\n	",d=t["if"].call(l,l&&l.label,{hash:{},inverse:u.noop,fn:u.program(7,i,s),data:s}),(d||0===d)&&(c+=d),c+='\n    <input type="',(o=t.valueFormat)?d=o.call(l,{hash:{},data:s}):(o=l&&l.valueFormat,d=typeof o===p?o.call(l,{hash:{},data:s}):o),c+=f(d)+'" name="',(o=t.name)?d=o.call(l,{hash:{},data:s}):(o=l&&l.name,d=typeof o===p?o.call(l,{hash:{},data:s}):o),c+=f(d)+'" placeholder="',(o=t.placeholderText)?d=o.call(l,{hash:{},data:s}):(o=l&&l.placeholderText,d=typeof o===p?o.call(l,{hash:{},data:s}):o),c+=f(d)+'" id="',(o=t.inputLabelId)?d=o.call(l,{hash:{},data:s}):(o=l&&l.inputLabelId,d=typeof o===p?o.call(l,{hash:{},data:s}):o),c+=f(d)+'">\n</div>\n'});

},{"hbsfy/runtime":43}],33:[function(require,module,exports){
(function (global){
function SuiModal(e,t,i){SuiComponentBaseInterface.call(this,e),this.$doc=t,this.$win=i,this.$body=$("body"),this.data=e,this.afterInit=this.data.afterInit||$.noop,this.isOpen=!1,this.isDestroyed=!1}var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),_=(typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null);require("../../helpers/attributeHelpers");var SuiComponentBaseInterface=require("../sui-component-base-interface"),template=require("./template.hbs");$.extend(SuiModal.prototype,SuiComponentBaseInterface.prototype,{_getTemplate:function(){return template},init:function(){SuiComponentBaseInterface.prototype.init.call(this),SUI.initComponents(this.$el),"function"==typeof this.afterInit&&this.afterInit(this.$el)},toggleModal:function(e){e&&e.stopPropagation(),this.isOpen?this.closeDropdown():this.openDropdown()},openModal:function(){return this.isOpen?!1:(this.disableBodyScrolling(),this.$el.before("<div sui-modal-overlay></div>"),this.isOpen=!0,this.$el.addAttrVal("sui-modal","is-open"),void this.$doc.on("click.handle-doc-click",this.handleDocumentClicks.bind(this)))},closeModal:function(){return this.isOpen?(this.$el.prev("[sui-modal-overlay]").remove(),this.isOpen=!1,this.$el.removeAttrVal("sui-modal","is-open"),this.enableBodyScrolling(),void this.$doc.off("click.handle-doc-click")):!1},destroy:function(){if("function"==typeof this._onBeforeDestroyCallback){var e=this._onBeforeDestroyCallback.call(this);if(e===!0)return}this.closeModal(),this.$el.remove(),"function"==typeof this._onDestroyCallback&&this._onDestroyCallback.call(this)},handleDocumentClicks:function(e){var t=this,i=$(e.target);i.is("[sui-modal-overlay]")&&t.destroy()},disableBodyScrolling:function(){this.$body.css("overflow","hidden")},enableBodyScrolling:function(){this.$body.css("overflow","")}}),module.exports=function(e,t,i){return new SuiModal(e,t,i)};


}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})

},{"../../helpers/attributeHelpers":35,"../sui-component-base-interface":1,"./template.hbs":34}],34:[function(require,module,exports){
var HandlebarsCompiler=require("hbsfy/runtime");module.exports=HandlebarsCompiler.template(function(a,s,l,t,e){function n(a,s){var t,e,n="";return n+='id="',(e=l.id)?t=e.call(a,{hash:{},data:s}):(e=a&&a.id,t=typeof e===d?e.call(a,{hash:{},data:s}):e),n+=p(t)+'"'}function r(a,s){var t,e,n="";return n+='class="',(e=l["class"])?t=e.call(a,{hash:{},data:s}):(e=a&&a["class"],t=typeof e===d?e.call(a,{hash:{},data:s}):e),n+=p(t)+'"'}function h(a,s){var t,e,n="";return n+='sui-styles="',(e=l.styles)?t=e.call(a,{hash:{},data:s}):(e=a&&a.styles,t=typeof e===d?e.call(a,{hash:{},data:s}):e),n+=p(t)+'"'}this.compilerInfo=[4,">= 1.0.0"],l=this.merge(l,a.helpers),e=e||{};var o,i,c="",d="function",p=this.escapeExpression,f=this;return c+="<div ",o=l["if"].call(s,s&&s.id,{hash:{},inverse:f.noop,fn:f.program(1,n,e),data:e}),(o||0===o)&&(c+=o),c+=' sui-modal="',(i=l.modal)?o=i.call(s,{hash:{},data:e}):(i=s&&s.modal,o=typeof i===d?i.call(s,{hash:{},data:e}):i),c+=p(o)+'" ',o=l["if"].call(s,s&&s["class"],{hash:{},inverse:f.noop,fn:f.program(3,r,e),data:e}),(o||0===o)&&(c+=o),c+=" ",o=l["if"].call(s,s&&s.styles,{hash:{},inverse:f.noop,fn:f.program(5,h,e),data:e}),(o||0===o)&&(c+=o),c+=">\n	",(i=l.content)?o=i.call(s,{hash:{},data:e}):(i=s&&s.content,o=typeof i===d?i.call(s,{hash:{},data:e}):i),(o||0===o)&&(c+=o),c+="\n</div>"});

},{"hbsfy/runtime":43}],35:[function(require,module,exports){
function getWordBoundRegex(t){return new RegExp("\\b"+t+"\\b")}function hasAttrVal(t,r,n){return!!$(t).attr(r).match(getWordBoundRegex(n))}var $=window.jQuery,_=window._;$.fn.addAttrVal=function(t,r){return this.each(function(n,e){var a=$(e),o=a.attr(t)||"";o.match(getWordBoundRegex(r))||a.attr(t,(o+" "+r).trim())}),this},$.fn.removeAttrVal=function(t,r){return this.each(function(n,e){var a=$(e),o=a.attr(t)||"",i=getWordBoundRegex(r);o.match(i)&&a.attr(t,o.replace(i,"").trim())}),this},$.fn.hasAttrVal=function(t,r){return this.each(function(n,e){var a=$(e).attr(t)||"";return!!a.match(getWordBoundRegex(r))}),this},$.fn.toggleAttrVal=function(t,r,n){this.each(function(e,a){var o=$(a);return"undefined"==typeof n?hasAttrVal(this,t,r)?o.removeAttrVal(t,r):o.addAttrVal(t,r):"function"==typeof n&&n()||n===!0?o.addAttrVal(t,r):"function"==typeof n&&!n()||!n?o.removeAttrVal(t,r):void 0})};

},{}],36:[function(require,module,exports){
"use strict";
/*globals Handlebars: true */
var base = require("./handlebars/base");

// Each of these augment the Handlebars object. No need to setup here.
// (This is done to easily share code between commonjs and browse envs)
var SafeString = require("./handlebars/safe-string")["default"];
var Exception = require("./handlebars/exception")["default"];
var Utils = require("./handlebars/utils");
var runtime = require("./handlebars/runtime");

// For compatibility and usage outside of module systems, make the Handlebars object a namespace
var create = function() {
  var hb = new base.HandlebarsEnvironment();

  Utils.extend(hb, base);
  hb.SafeString = SafeString;
  hb.Exception = Exception;
  hb.Utils = Utils;

  hb.VM = runtime;
  hb.template = function(spec) {
    return runtime.template(spec, hb);
  };

  return hb;
};

var Handlebars = create();
Handlebars.create = create;

exports["default"] = Handlebars;
},{"./handlebars/base":37,"./handlebars/exception":38,"./handlebars/runtime":39,"./handlebars/safe-string":40,"./handlebars/utils":41}],37:[function(require,module,exports){
"use strict";
var Utils = require("./utils");
var Exception = require("./exception")["default"];

var VERSION = "1.3.0";
exports.VERSION = VERSION;var COMPILER_REVISION = 4;
exports.COMPILER_REVISION = COMPILER_REVISION;
var REVISION_CHANGES = {
  1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
  2: '== 1.0.0-rc.3',
  3: '== 1.0.0-rc.4',
  4: '>= 1.0.0'
};
exports.REVISION_CHANGES = REVISION_CHANGES;
var isArray = Utils.isArray,
    isFunction = Utils.isFunction,
    toString = Utils.toString,
    objectType = '[object Object]';

function HandlebarsEnvironment(helpers, partials) {
  this.helpers = helpers || {};
  this.partials = partials || {};

  registerDefaultHelpers(this);
}

exports.HandlebarsEnvironment = HandlebarsEnvironment;HandlebarsEnvironment.prototype = {
  constructor: HandlebarsEnvironment,

  logger: logger,
  log: log,

  registerHelper: function(name, fn, inverse) {
    if (toString.call(name) === objectType) {
      if (inverse || fn) { throw new Exception('Arg not supported with multiple helpers'); }
      Utils.extend(this.helpers, name);
    } else {
      if (inverse) { fn.not = inverse; }
      this.helpers[name] = fn;
    }
  },

  registerPartial: function(name, str) {
    if (toString.call(name) === objectType) {
      Utils.extend(this.partials,  name);
    } else {
      this.partials[name] = str;
    }
  }
};

function registerDefaultHelpers(instance) {
  instance.registerHelper('helperMissing', function(arg) {
    if(arguments.length === 2) {
      return undefined;
    } else {
      throw new Exception("Missing helper: '" + arg + "'");
    }
  });

  instance.registerHelper('blockHelperMissing', function(context, options) {
    var inverse = options.inverse || function() {}, fn = options.fn;

    if (isFunction(context)) { context = context.call(this); }

    if(context === true) {
      return fn(this);
    } else if(context === false || context == null) {
      return inverse(this);
    } else if (isArray(context)) {
      if(context.length > 0) {
        return instance.helpers.each(context, options);
      } else {
        return inverse(this);
      }
    } else {
      return fn(context);
    }
  });

  instance.registerHelper('each', function(context, options) {
    var fn = options.fn, inverse = options.inverse;
    var i = 0, ret = "", data;

    if (isFunction(context)) { context = context.call(this); }

    if (options.data) {
      data = createFrame(options.data);
    }

    if(context && typeof context === 'object') {
      if (isArray(context)) {
        for(var j = context.length; i<j; i++) {
          if (data) {
            data.index = i;
            data.first = (i === 0);
            data.last  = (i === (context.length-1));
          }
          ret = ret + fn(context[i], { data: data });
        }
      } else {
        for(var key in context) {
          if(context.hasOwnProperty(key)) {
            if(data) { 
              data.key = key; 
              data.index = i;
              data.first = (i === 0);
            }
            ret = ret + fn(context[key], {data: data});
            i++;
          }
        }
      }
    }

    if(i === 0){
      ret = inverse(this);
    }

    return ret;
  });

  instance.registerHelper('if', function(conditional, options) {
    if (isFunction(conditional)) { conditional = conditional.call(this); }

    // Default behavior is to render the positive path if the value is truthy and not empty.
    // The `includeZero` option may be set to treat the condtional as purely not empty based on the
    // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
    if ((!options.hash.includeZero && !conditional) || Utils.isEmpty(conditional)) {
      return options.inverse(this);
    } else {
      return options.fn(this);
    }
  });

  instance.registerHelper('unless', function(conditional, options) {
    return instance.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn, hash: options.hash});
  });

  instance.registerHelper('with', function(context, options) {
    if (isFunction(context)) { context = context.call(this); }

    if (!Utils.isEmpty(context)) return options.fn(context);
  });

  instance.registerHelper('log', function(context, options) {
    var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;
    instance.log(level, context);
  });
}

var logger = {
  methodMap: { 0: 'debug', 1: 'info', 2: 'warn', 3: 'error' },

  // State enum
  DEBUG: 0,
  INFO: 1,
  WARN: 2,
  ERROR: 3,
  level: 3,

  // can be overridden in the host environment
  log: function(level, obj) {
    if (logger.level <= level) {
      var method = logger.methodMap[level];
      if (typeof console !== 'undefined' && console[method]) {
        console[method].call(console, obj);
      }
    }
  }
};
exports.logger = logger;
function log(level, obj) { logger.log(level, obj); }

exports.log = log;var createFrame = function(object) {
  var obj = {};
  Utils.extend(obj, object);
  return obj;
};
exports.createFrame = createFrame;
},{"./exception":38,"./utils":41}],38:[function(require,module,exports){
"use strict";

var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];

function Exception(message, node) {
  var line;
  if (node && node.firstLine) {
    line = node.firstLine;

    message += ' - ' + line + ':' + node.firstColumn;
  }

  var tmp = Error.prototype.constructor.call(this, message);

  // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
  for (var idx = 0; idx < errorProps.length; idx++) {
    this[errorProps[idx]] = tmp[errorProps[idx]];
  }

  if (line) {
    this.lineNumber = line;
    this.column = node.firstColumn;
  }
}

Exception.prototype = new Error();

exports["default"] = Exception;
},{}],39:[function(require,module,exports){
"use strict";
var Utils = require("./utils");
var Exception = require("./exception")["default"];
var COMPILER_REVISION = require("./base").COMPILER_REVISION;
var REVISION_CHANGES = require("./base").REVISION_CHANGES;

function checkRevision(compilerInfo) {
  var compilerRevision = compilerInfo && compilerInfo[0] || 1,
      currentRevision = COMPILER_REVISION;

  if (compilerRevision !== currentRevision) {
    if (compilerRevision < currentRevision) {
      var runtimeVersions = REVISION_CHANGES[currentRevision],
          compilerVersions = REVISION_CHANGES[compilerRevision];
      throw new Exception("Template was precompiled with an older version of Handlebars than the current runtime. "+
            "Please update your precompiler to a newer version ("+runtimeVersions+") or downgrade your runtime to an older version ("+compilerVersions+").");
    } else {
      // Use the embedded version info since the runtime doesn't know about this revision yet
      throw new Exception("Template was precompiled with a newer version of Handlebars than the current runtime. "+
            "Please update your runtime to a newer version ("+compilerInfo[1]+").");
    }
  }
}

exports.checkRevision = checkRevision;// TODO: Remove this line and break up compilePartial

function template(templateSpec, env) {
  if (!env) {
    throw new Exception("No environment passed to template");
  }

  // Note: Using env.VM references rather than local var references throughout this section to allow
  // for external users to override these as psuedo-supported APIs.
  var invokePartialWrapper = function(partial, name, context, helpers, partials, data) {
    var result = env.VM.invokePartial.apply(this, arguments);
    if (result != null) { return result; }

    if (env.compile) {
      var options = { helpers: helpers, partials: partials, data: data };
      partials[name] = env.compile(partial, { data: data !== undefined }, env);
      return partials[name](context, options);
    } else {
      throw new Exception("The partial " + name + " could not be compiled when running in runtime-only mode");
    }
  };

  // Just add water
  var container = {
    escapeExpression: Utils.escapeExpression,
    invokePartial: invokePartialWrapper,
    programs: [],
    program: function(i, fn, data) {
      var programWrapper = this.programs[i];
      if(data) {
        programWrapper = program(i, fn, data);
      } else if (!programWrapper) {
        programWrapper = this.programs[i] = program(i, fn);
      }
      return programWrapper;
    },
    merge: function(param, common) {
      var ret = param || common;

      if (param && common && (param !== common)) {
        ret = {};
        Utils.extend(ret, common);
        Utils.extend(ret, param);
      }
      return ret;
    },
    programWithDepth: env.VM.programWithDepth,
    noop: env.VM.noop,
    compilerInfo: null
  };

  return function(context, options) {
    options = options || {};
    var namespace = options.partial ? options : env,
        helpers,
        partials;

    if (!options.partial) {
      helpers = options.helpers;
      partials = options.partials;
    }
    var result = templateSpec.call(
          container,
          namespace, context,
          helpers,
          partials,
          options.data);

    if (!options.partial) {
      env.VM.checkRevision(container.compilerInfo);
    }

    return result;
  };
}

exports.template = template;function programWithDepth(i, fn, data /*, $depth */) {
  var args = Array.prototype.slice.call(arguments, 3);

  var prog = function(context, options) {
    options = options || {};

    return fn.apply(this, [context, options.data || data].concat(args));
  };
  prog.program = i;
  prog.depth = args.length;
  return prog;
}

exports.programWithDepth = programWithDepth;function program(i, fn, data) {
  var prog = function(context, options) {
    options = options || {};

    return fn(context, options.data || data);
  };
  prog.program = i;
  prog.depth = 0;
  return prog;
}

exports.program = program;function invokePartial(partial, name, context, helpers, partials, data) {
  var options = { partial: true, helpers: helpers, partials: partials, data: data };

  if(partial === undefined) {
    throw new Exception("The partial " + name + " could not be found");
  } else if(partial instanceof Function) {
    return partial(context, options);
  }
}

exports.invokePartial = invokePartial;function noop() { return ""; }

exports.noop = noop;
},{"./base":37,"./exception":38,"./utils":41}],40:[function(require,module,exports){
"use strict";
// Build out our basic SafeString type
function SafeString(string) {
  this.string = string;
}

SafeString.prototype.toString = function() {
  return "" + this.string;
};

exports["default"] = SafeString;
},{}],41:[function(require,module,exports){
"use strict";
/*jshint -W004 */
var SafeString = require("./safe-string")["default"];

var escape = {
  "&": "&amp;",
  "<": "&lt;",
  ">": "&gt;",
  '"': "&quot;",
  "'": "&#x27;",
  "`": "&#x60;"
};

var badChars = /[&<>"'`]/g;
var possible = /[&<>"'`]/;

function escapeChar(chr) {
  return escape[chr] || "&amp;";
}

function extend(obj, value) {
  for(var key in value) {
    if(Object.prototype.hasOwnProperty.call(value, key)) {
      obj[key] = value[key];
    }
  }
}

exports.extend = extend;var toString = Object.prototype.toString;
exports.toString = toString;
// Sourced from lodash
// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
var isFunction = function(value) {
  return typeof value === 'function';
};
// fallback for older versions of Chrome and Safari
if (isFunction(/x/)) {
  isFunction = function(value) {
    return typeof value === 'function' && toString.call(value) === '[object Function]';
  };
}
var isFunction;
exports.isFunction = isFunction;
var isArray = Array.isArray || function(value) {
  return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false;
};
exports.isArray = isArray;

function escapeExpression(string) {
  // don't escape SafeStrings, since they're already safe
  if (string instanceof SafeString) {
    return string.toString();
  } else if (!string && string !== 0) {
    return "";
  }

  // Force a string conversion as this will be done by the append regardless and
  // the regex test will do this transparently behind the scenes, causing issues if
  // an object's to string has escaped characters in it.
  string = "" + string;

  if(!possible.test(string)) { return string; }
  return string.replace(badChars, escapeChar);
}

exports.escapeExpression = escapeExpression;function isEmpty(value) {
  if (!value && value !== 0) {
    return true;
  } else if (isArray(value) && value.length === 0) {
    return true;
  } else {
    return false;
  }
}

exports.isEmpty = isEmpty;
},{"./safe-string":40}],42:[function(require,module,exports){
// Create a simple path alias to allow browserify to resolve
// the runtime on a supported path.
module.exports = require('./dist/cjs/handlebars.runtime');

},{"./dist/cjs/handlebars.runtime":36}],43:[function(require,module,exports){
module.exports = require("handlebars/runtime")["default"];

},{"handlebars/runtime":42}],44:[function(require,module,exports){
Function.prototype.bind||(Function.prototype.bind=function(t){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var o=Array.prototype.slice.call(arguments,1),n=this,i=function(){},r=function(){return n.apply(this instanceof i?this:t,o.concat(Array.prototype.slice.call(arguments)))};return i.prototype=this.prototype,r.prototype=new i,r},console.log("SUI polyfills: bind"));

},{}],45:[function(require,module,exports){
(function (global){
function SuiComponentRegistry(){this.components={}}var $=(typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null),_=(typeof window !== "undefined" ? window['_'] : typeof global !== "undefined" ? global['_'] : null);require("./sui-polyfills");var components={"sui-dropdown":require("./components/sui-input-components/sui-dropdown/sui.dropdown"),"sui-checkbox":require("./components/sui-input-components/sui-checkbox/sui.checkbox"),"sui-radio":require("./components/sui-input-components/sui-radio/sui.radio"),"sui-text":require("./components/sui-input-components/sui-textinput/sui.textinput"),"sui-textarea":require("./components/sui-input-components/sui-textarea/sui.textarea"),"sui-file":require("./components/sui-input-components/sui-file/sui.file"),"sui-multi-checkbox":require("./components/sui-input-components/sui-multi-checkbox/sui.multi-checkbox"),"sui-modal":require("./components/sui-modal/sui.modal")},$doc=$(document),$win=$(window);$.extend(SuiComponentRegistry.prototype,{_initComponent:function(n,e,t){var o=this;e.find(n.selector).each(function(e,i){var s=o._getOptionsFromPlaceholder(i);if(s.type=t,o.getInstanceByElement(i)===!1){var r=n.createComponent(s,$doc,$win);return r.init(),r.loadExtensions(s),r}})},_convertStringToSuiOption:function(n){return n.replace("sui-","").replace(/-([a-z])/g,function(n,e){return e.toUpperCase()})},_getOptionsFromPlaceholder:function(n){for(var e=$(n),t=n.attributes,o={placeholder:n,id:e.attr("id"),"class":e.attr("class")},i=t.length-1;i>=0;i--)if(t[i].name.match(/^[sui-]/)){var s=this._convertStringToSuiOption(t[i].name);o[s]=t[i].value}return o},registerSuiComponent:function(n){this.components[n.key]={selector:"["+n.key+"]",createComponent:n.factory}},getInstanceByElement:function(n){var e=$(n).data("_SUIcomponent");return e?e:!1},initSuiComponents:function(n){var e=$(n?n:document);for(var t in this.components)this._initComponent(this.components[t],e,t)}});var suiComponentRegistry=new SuiComponentRegistry;for(var key in components)suiComponentRegistry.registerSuiComponent({key:key,factory:components[key]});window.SUI={initComponents:suiComponentRegistry.initSuiComponents.bind(suiComponentRegistry),getInstance:suiComponentRegistry.getInstanceByElement.bind(suiComponentRegistry),createComponent:function(n,e){if(suiComponentRegistry.components[n]){e.type=n;var t=suiComponentRegistry.components[n].createComponent(e,$doc,$win);return t.init(),t.loadExtensions(e),t}}};


}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})

},{"./components/sui-input-components/sui-checkbox/sui.checkbox":3,"./components/sui-input-components/sui-dropdown/sui.dropdown":11,"./components/sui-input-components/sui-file/sui.file":15,"./components/sui-input-components/sui-multi-checkbox/sui.multi-checkbox":19,"./components/sui-input-components/sui-radio/sui.radio":22,"./components/sui-input-components/sui-textarea/sui.textarea":25,"./components/sui-input-components/sui-textinput/sui.textinput":31,"./components/sui-modal/sui.modal":33,"./sui-polyfills":44}]},{},[45])
//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvaG9tZS9kZXBsb3lpby9zcGxhc2gvYXBwL3Jlc291cmNlcy9wdWJsaWMvanMvc3BsYXNoL3N1aS9jb21wb25lbnRzL3N1aS1jb21wb25lbnQtYmFzZS1pbnRlcmZhY2UuanMiLCIvaG9tZS9kZXBsb3lpby9zcGxhc2gvYXBwL3Jlc291cmNlcy9wdWJsaWMvanMvc3BsYXNoL3N1aS9jb21wb25lbnRzL3N1aS1pbnB1dC1jb21wb25lbnRzL3N1aS1jaGVja2JveC9jbXMtdGVtcGxhdGUuaGJzIiwiL2hvbWUvZGVwbG95aW8vc3BsYXNoL2FwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktY2hlY2tib3gvc3VpLmNoZWNrYm94LmpzIiwiL2hvbWUvZGVwbG95aW8vc3BsYXNoL2FwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktY2hlY2tib3gvdGVtcGxhdGUuaGJzIiwiL2hvbWUvZGVwbG95aW8vc3BsYXNoL2FwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktZHJvcGRvd24vY21zLXRlbXBsYXRlLmhicyIsIi9ob21lL2RlcGxveWlvL3NwbGFzaC9hcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL2NvbXBvbmVudHMvc3VpLWlucHV0LWNvbXBvbmVudHMvc3VpLWRyb3Bkb3duL2V4dGVuc2lvbnMvc3VpLmRyb3Bkb3duLmFqYXhhYmxlLmpzIiwiL2hvbWUvZGVwbG95aW8vc3BsYXNoL2FwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktZHJvcGRvd24vZXh0ZW5zaW9ucy9zdWkuZHJvcGRvd24uaGFzLWZvb3Rlci5qcyIsIi9ob21lL2RlcGxveWlvL3NwbGFzaC9hcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL2NvbXBvbmVudHMvc3VpLWlucHV0LWNvbXBvbmVudHMvc3VpLWRyb3Bkb3duL2V4dGVuc2lvbnMvc3VpLmRyb3Bkb3duLm11bHRpc2VsZWN0YWJsZS5qcyIsIi9ob21lL2RlcGxveWlvL3NwbGFzaC9hcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL2NvbXBvbmVudHMvc3VpLWlucHV0LWNvbXBvbmVudHMvc3VpLWRyb3Bkb3duL2V4dGVuc2lvbnMvc3VpLmRyb3Bkb3duLnNlYXJjaGFibGUuanMiLCIvaG9tZS9kZXBsb3lpby9zcGxhc2gvYXBwL3Jlc291cmNlcy9wdWJsaWMvanMvc3BsYXNoL3N1aS9jb21wb25lbnRzL3N1aS1pbnB1dC1jb21wb25lbnRzL3N1aS1kcm9wZG93bi9vcHRpb24tdGVtcGxhdGUuaGJzIiwiL2hvbWUvZGVwbG95aW8vc3BsYXNoL2FwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktZHJvcGRvd24vc3VpLmRyb3Bkb3duLmpzIiwiL2hvbWUvZGVwbG95aW8vc3BsYXNoL2FwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktZHJvcGRvd24vdGVtcGxhdGUuaGJzIiwiL2hvbWUvZGVwbG95aW8vc3BsYXNoL2FwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktZmlsZS9jbXMtdGVtcGxhdGUuaGJzIiwiL2hvbWUvZGVwbG95aW8vc3BsYXNoL2FwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktZmlsZS9leHRlbnNpb25zL3N1aS5maWxlLmFzeW5jLmpzIiwiL2hvbWUvZGVwbG95aW8vc3BsYXNoL2FwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktZmlsZS9zdWkuZmlsZS5qcyIsIi9ob21lL2RlcGxveWlvL3NwbGFzaC9hcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL2NvbXBvbmVudHMvc3VpLWlucHV0LWNvbXBvbmVudHMvc3VpLWZpbGUvdGVtcGxhdGUuaGJzIiwiL2hvbWUvZGVwbG95aW8vc3BsYXNoL2FwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktaW5wdXQtYmFzZS1pbnRlcmZhY2UuanMiLCIvaG9tZS9kZXBsb3lpby9zcGxhc2gvYXBwL3Jlc291cmNlcy9wdWJsaWMvanMvc3BsYXNoL3N1aS9jb21wb25lbnRzL3N1aS1pbnB1dC1jb21wb25lbnRzL3N1aS1tdWx0aS1jaGVja2JveC9jbXMtdGVtcGxhdGUuaGJzIiwiL2hvbWUvZGVwbG95aW8vc3BsYXNoL2FwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktbXVsdGktY2hlY2tib3gvc3VpLm11bHRpLWNoZWNrYm94LmpzIiwiL2hvbWUvZGVwbG95aW8vc3BsYXNoL2FwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktbXVsdGktY2hlY2tib3gvdGVtcGxhdGUuaGJzIiwiL2hvbWUvZGVwbG95aW8vc3BsYXNoL2FwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktcmFkaW8vY21zLXRlbXBsYXRlLmhicyIsIi9ob21lL2RlcGxveWlvL3NwbGFzaC9hcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL2NvbXBvbmVudHMvc3VpLWlucHV0LWNvbXBvbmVudHMvc3VpLXJhZGlvL3N1aS5yYWRpby5qcyIsIi9ob21lL2RlcGxveWlvL3NwbGFzaC9hcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL2NvbXBvbmVudHMvc3VpLWlucHV0LWNvbXBvbmVudHMvc3VpLXJhZGlvL3RlbXBsYXRlLmhicyIsIi9ob21lL2RlcGxveWlvL3NwbGFzaC9hcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL2NvbXBvbmVudHMvc3VpLWlucHV0LWNvbXBvbmVudHMvc3VpLXRleHRhcmVhL2Ntcy10ZW1wbGF0ZS5oYnMiLCIvaG9tZS9kZXBsb3lpby9zcGxhc2gvYXBwL3Jlc291cmNlcy9wdWJsaWMvanMvc3BsYXNoL3N1aS9jb21wb25lbnRzL3N1aS1pbnB1dC1jb21wb25lbnRzL3N1aS10ZXh0YXJlYS9zdWkudGV4dGFyZWEuanMiLCIvaG9tZS9kZXBsb3lpby9zcGxhc2gvYXBwL3Jlc291cmNlcy9wdWJsaWMvanMvc3BsYXNoL3N1aS9jb21wb25lbnRzL3N1aS1pbnB1dC1jb21wb25lbnRzL3N1aS10ZXh0YXJlYS90ZW1wbGF0ZS5oYnMiLCIvaG9tZS9kZXBsb3lpby9zcGxhc2gvYXBwL3Jlc291cmNlcy9wdWJsaWMvanMvc3BsYXNoL3N1aS9jb21wb25lbnRzL3N1aS1pbnB1dC1jb21wb25lbnRzL3N1aS10ZXh0aW5wdXQvY21zLXRlbXBsYXRlLmhicyIsIi9ob21lL2RlcGxveWlvL3NwbGFzaC9hcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL2NvbXBvbmVudHMvc3VpLWlucHV0LWNvbXBvbmVudHMvc3VpLXRleHRpbnB1dC9leHRlbnNpb25zL3N1aS50ZXh0aW5wdXQuYWRkcmVzcy5qcyIsIi9ob21lL2RlcGxveWlvL3NwbGFzaC9hcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL2NvbXBvbmVudHMvc3VpLWlucHV0LWNvbXBvbmVudHMvc3VpLXRleHRpbnB1dC9leHRlbnNpb25zL3N1aS50ZXh0aW5wdXQuZGF0ZXBpY2tlci5qcyIsIi9ob21lL2RlcGxveWlvL3NwbGFzaC9hcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL2NvbXBvbmVudHMvc3VpLWlucHV0LWNvbXBvbmVudHMvc3VpLXRleHRpbnB1dC9leHRlbnNpb25zL3N1aS50ZXh0aW5wdXQudGltZXBpY2tlci5qcyIsIi9ob21lL2RlcGxveWlvL3NwbGFzaC9hcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL2NvbXBvbmVudHMvc3VpLWlucHV0LWNvbXBvbmVudHMvc3VpLXRleHRpbnB1dC9zdWkudGV4dGlucHV0LmpzIiwiL2hvbWUvZGVwbG95aW8vc3BsYXNoL2FwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktdGV4dGlucHV0L3RlbXBsYXRlLmhicyIsIi9ob21lL2RlcGxveWlvL3NwbGFzaC9hcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL2NvbXBvbmVudHMvc3VpLW1vZGFsL3N1aS5tb2RhbC5qcyIsIi9ob21lL2RlcGxveWlvL3NwbGFzaC9hcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL2NvbXBvbmVudHMvc3VpLW1vZGFsL3RlbXBsYXRlLmhicyIsIi9ob21lL2RlcGxveWlvL3NwbGFzaC9hcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL2hlbHBlcnMvYXR0cmlidXRlSGVscGVycy5qcyIsImFwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy5ydW50aW1lLmpzIiwiYXBwL3Jlc291cmNlcy9wdWJsaWMvanMvc3BsYXNoL3N1aS9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2Jhc2UuanMiLCJhcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvZXhjZXB0aW9uLmpzIiwiYXBwL3Jlc291cmNlcy9wdWJsaWMvanMvc3BsYXNoL3N1aS9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL3J1bnRpbWUuanMiLCJhcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvc2FmZS1zdHJpbmcuanMiLCJhcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvdXRpbHMuanMiLCJhcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL3J1bnRpbWUuanMiLCJhcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL25vZGVfbW9kdWxlcy9oYnNmeS9ydW50aW1lLmpzIiwiL2hvbWUvZGVwbG95aW8vc3BsYXNoL2FwcC9yZXNvdXJjZXMvcHVibGljL2pzL3NwbGFzaC9zdWkvc3VpLXBvbHlmaWxscy5qcyIsIi9ob21lL2RlcGxveWlvL3NwbGFzaC9hcHAvcmVzb3VyY2VzL3B1YmxpYy9qcy9zcGxhc2gvc3VpL3N1aS5zY3JpcHRzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQ09BLFFBQVMsMkJBQTBCLEdBR2xDLEtBQUssS0FBTyxFQUFLLEtBR2pCLEtBQUssbUJBQXFCLEVBQUssVUFDL0IsS0FBSyx5QkFBMkIsRUFBSyxnQkFHckMsS0FBSyxhQUFlLEVBQUssWUFBYyxFQUFFLEVBQUssY0FBZSxFQUM3RCxLQUFLLFdBQWEsRUFBSyxTQUFXLEVBQUUsRUFBSyxXQUFZLEVBR3JELEtBQUssV0FBd0MsbUJB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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LGdCQUUxQixPQUFJLEdBQ0ksR0FFQSxHQVFULGtCQUFtQixTQUFTLEdBQzNCLEdBQ0ksR0FBcUIsRUFBVixFQUFZLEVBQWEsU0FFeEMsS0FBSyxHQUFJLEtBQU8sTUFBSyxXQUNwQixLQUFLLGVBQWUsS0FBSyxXQUFXLEdBQU0sRUFBVSxLQVd2RCxJQUFJLHNCQUF1QixHQUFJLHFCQUcvQixLQUFLLEdBQUksT0FBTyxZQUNmLHFCQUFxQixzQkFDcEIsSUFBSyxJQUNMLFFBQVMsV0FBVyxNQUt0QixRQUFPLEtBR04sZUFBZ0IscUJBQXFCLGtCQUFrQixLQUFLLHNCQUk1RCxZQUFhLHFCQUFxQixxQkFBcUIsS0FBSyxzQkFHNUQsZ0JBQWlCLFNBQVMsRUFBZSxHQUN4QyxHQUFJLHFCQUFxQixXQUFXLEdBQWdCLENBQ25ELEVBQUssS0FBTyxDQUdaLElBQUksR0FBVyxxQkFBcUIsV0FBVyxHQUFlLGdCQUFnQixFQUFNLEtBQU0sS0FNMUYsT0FIQSxHQUFTLE9BQ1QsRUFBUyxlQUFnQixHQUVsQiIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIvLy8vXG4vLy8gQWJzdHJhY3QgSW50ZXJmYWNlIGZvciBTVUkgQ29tcG9uZW50c1xuLy8gIFNob3VsZCBuZXZlciBiZSBjb25zdHJ1Y3RlZCwgb25seSBleHRlbmRlZFxuXG52YXIgJCA9IHJlcXVpcmUoJ2pxdWVyeScpLFxuXHRfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuXG5mdW5jdGlvbiBTdWlDb21wb25lbnRCYXNlSW50ZXJmYWNlKG9wdHMpIHtcblxuXHQvLyBwcm9wZXJ0aWVzIGRlZmluZWQgaW4gc3ViY2xhc3Nlc1xuXHR0aGlzLnR5cGUgPSBvcHRzLnR5cGU7XG5cblx0Ly8gY3VzdG9tIGNhbGxiYWNrc1xuXHR0aGlzLl9vbkRlc3Ryb3lDYWxsYmFjayA9IG9wdHMub25EZXN0cm95O1xuXHR0aGlzLl9vbkJlZm9yZURlc3Ryb3lDYWxsYmFjayA9IG9wdHMub25CZWZvcmVEZXN0cm95O1xuXG5cdC8vIGNhY2hlIHBsYWNlaG9sZGVyL2NvbnRhaW5lciBqUXVlcnkgb2JqZWN0c1xuXHR0aGlzLiRwbGFjZWhvbGRlciA9IG9wdHMucGxhY2Vob2xkZXIgPyAkKG9wdHMucGxhY2Vob2xkZXIpIDogZmFsc2U7XG5cdHRoaXMuJGNvbnRhaW5lciA9IG9wdHMuYXR0YWNoVG8gPyAkKG9wdHMuYXR0YWNoVG8pIDogZmFsc2U7XG5cblx0Ly8gYWNjZXB0cyBhcHBlbmQgYW5kIHByZXBlbmRcblx0dGhpcy5hdHRhY2hNb2RlID0gdHlwZW9mIG9wdHMuYXR0YWNoTW9kZSA9PT0gJ3VuZGVmaW5lZCcgPyAnYXBwZW5kJyA6IG9wdHMuYXR0YWNoTW9kZTtcblx0dGhpcy5zdXBwb3J0ZWRBdHRhY2hNb2RlcyA9IFsnYXBwZW5kJywgJ3ByZXBlbmQnLCAnYmVmb3JlJywgJ2FmdGVyJ107XG5cblx0Ly8gZmlsbCBwcm9wcyB1c2luZyBhYnN0cmFjdCBtZXRob2RzIHN1cHBsaWVkIGJ5IGNoaWxkcmVuXG5cdHRoaXMudGVtcGxhdGUgPSB0aGlzLl9nZXRUZW1wbGF0ZSgpO1xuXG5cdC8vIHNhdmUgcmVxdWVzdGVkIGV4dGVuc2lvbnMgYW5kIGdldCBleHRlbnNpb24gb2JqZWN0c1xuXHR0aGlzLnJlcXVlc3RlZEV4dGVuc2lvbnMgPSBvcHRzLmV4dGVuc2lvbnM7XG5cdHRoaXMuZXh0ZW5zaW9ucyA9IHRoaXMuZ2V0QWN0aXZlRXh0ZW5zaW9ucygpO1xuXG5cdC8vIEV4dGVuZCBjb25zdHJ1Y3RvciB3aXRoIEV4dGVuc2lvbiBjb25zdHJ1Y3RvclxuXHRfLmVhY2godGhpcy5leHRlbnNpb25zLCBmdW5jdGlvbihFeHRlbnNpb24pIHtcblx0XHRFeHRlbnNpb24uY2FsbCh0aGlzLCBvcHRzKTtcblx0fSk7XG5cblx0Ly8gZm9ybWF0IGRhdGFcblx0dGhpcy5kYXRhID0gdGhpcy5fZm9ybWF0VGVtcGxhdGVEYXRhKG9wdHMpO1xufVxuXG4kLmV4dGVuZChTdWlDb21wb25lbnRCYXNlSW50ZXJmYWNlLnByb3RvdHlwZSwge1xuXG5cdC8vIFJlcGxhY2VzIHBsYWNlaG9sZGVyIG1hcmt1cCB3aXRoIHRlbXBsYXRlXG5cdGluaXQ6IGZ1bmN0aW9uKCkge1xuXG5cdFx0dmFyIF90aGlzID0gdGhpcztcblx0XHR2YXIgaHRtbCA9IHRoaXMudGVtcGxhdGUodGhpcy5kYXRhKTtcblxuXHRcdC8vIGNhY2hlIGpRdWVyeSBlbGVtZW50c1xuXHRcdHRoaXMuJGVsID0gJChodG1sKTtcblxuXHRcdGlmICghdGhpcy4kZWwpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLiRlbC5kYXRhKCdfU1VJY29tcG9uZW50JywgdGhpcyk7XG5cblx0XHQvLyBhZGQgY29tcG9uZW50IG1hcmt1cCB0byBkb21cblx0XHRpZiAodGhpcy4kcGxhY2Vob2xkZXIpIHtcblx0XHRcdHRoaXMucmVwbGFjZVBsYWNlaG9sZGVyKCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLiRjb250YWluZXIpIHtcblx0XHRcdHRoaXMuYXR0YWNoVG9Db250YWluZXIoKTtcblx0XHR9XG5cdFx0Ly8gZWxzZSB7XG5cdFx0Ly8gXHRjb25zb2xlLmxvZyhcIlNVSSBlcnJvciAtIG5lZWQgc29tZXRoaW5nIHRvIGFwcGVuZCBpdCB0b1wiKTtcblx0XHQvLyB9XG5cdH0sXG5cblx0cmVwbGFjZVBsYWNlaG9sZGVyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiRlbC5hdHRyKHtcblx0XHRcdGlkOiB0aGlzLiRwbGFjZWhvbGRlci5hdHRyKCdpZCcpLFxuXHRcdFx0Y2xhc3M6IHRoaXMuJHBsYWNlaG9sZGVyLmF0dHIoJ2NsYXNzJylcblx0XHR9KTtcblx0XHR0aGlzLiRwbGFjZWhvbGRlci5hZnRlcih0aGlzLiRlbCk7XG5cdFx0dGhpcy4kcGxhY2Vob2xkZXIuZGV0YWNoKCk7XG5cdH0sXG5cblx0YXR0YWNoVG9Db250YWluZXI6IGZ1bmN0aW9uKGNvbnRhaW5lciwgcGxhY2VtZW50KSB7XG5cdFx0Ly8gaWYgdGhlIGVsZW1lbnQgZXhpc3RzIHNvbWV3aGVyZSwgZGV0YWNoIGl0IHNvIGl0IGNhbiBiZSBhcHBlbmRlZCBzb21ld2hlcmUgZWxzZVxuXHRcdGlmKHRoaXMuJGNvbnRhaW5lcil7XG5cdFx0XHR0aGlzLiRlbC5kZXRhY2goKTtcblx0XHR9XG5cblx0XHR0aGlzLiRjb250YWluZXIgPSB0eXBlb2YgY29udGFpbmVyICE9PSAndW5kZWZpbmVkJyA/ICQoY29udGFpbmVyKSA6IHRoaXMuJGNvbnRhaW5lcjtcblxuXHRcdGlmKF8uaW5kZXhPZih0aGlzLnN1cHBvcnRlZEF0dGFjaE1vZGVzLCBwbGFjZW1lbnQpICE9PSAtMSkge1xuXHRcdFx0dGhpcy5hdHRhY2hNb2RlID0gcGxhY2VtZW50O1xuXHRcdH1cblx0XHR0aGlzLiRjb250YWluZXJbdGhpcy5hdHRhY2hNb2RlXSh0aGlzLiRlbCk7XG5cdH0sXG5cblx0ZGVzdHJveTogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gY2FsbCBvbkJlZm9yZUNoYW5nZSBjYWxsYmFjayBpZiBpdCdzIGEgZnVuY3Rpb25cblx0XHQvLyBJZiBmdW5jdGlvbiByZXR1cm5zIHRydWUsIGNhbmNlbCB0aGUgXCJkZXN0cm95IGV2ZW50XCJcblx0XHRpZiAodHlwZW9mIHRoaXMuX29uQmVmb3JlRGVzdHJveUNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHR2YXIgY2FuY2VsRGVzdHJveSA9IHRoaXMuX29uQmVmb3JlRGVzdHJveUNhbGxiYWNrLmNhbGwodGhpcyk7XG5cblx0XHRcdGlmKGNhbmNlbERlc3Ryb3kgPT09IHRydWUpe1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy4kZWwucmVtb3ZlKCk7XG5cblx0XHQvLyBjYWxsIG9uQ2hhbmdlIGNhbGxiYWNrIGlmIGl0J3MgYSBmdW5jdGlvblxuXHRcdGlmICh0eXBlb2YgdGhpcy5fb25EZXN0cm95Q2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHRoaXMuX29uRGVzdHJveUNhbGxiYWNrLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9LFxuXG5cdG9uQmVmb3JlRGVzdHJveTogZnVuY3Rpb24oY2IpIHtcblx0XHR0aGlzLl9vbkJlZm9yZURlc3Ryb3lDYWxsYmFjayA9IGNiO1xuXHR9LFxuXG5cdG9uRGVzdHJveTogZnVuY3Rpb24oY2IpIHtcblx0XHQvLyBhdHRhY2ggY2hhbmdlIGhhbmRsZXIgYW5kIHBhc3MgaW5wdXQgZWxlbWVudCBhc1xuXHRcdC8vIGNvbnRleHQgYW5kIHZhbHVlIGFzIGFyZ3VtZW50XG5cdFx0dGhpcy5fb25EZXN0cm95Q2FsbGJhY2sgPSBjYjtcblx0fSxcblxuXHRnZXRUeXBlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy50eXBlO1xuXHR9LFxuXG5cdGdldEVsOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy4kZWw7XG5cdH0sXG5cblx0LyoqXG5cdCAqIERPIE5PVCBPVkVSUklERSwgZXh0ZW5kIGlzIGNvb2xcblx0ICogdGFraW5nIHRoZSBvcHRzIHBhc3NlZCwgcHJlcGFyZXMgdGhlbSB0byBiZSB0aGlzLmRhdGEgaW5mb3JtYXRpb24gcGFzc2VkIHRvIHRlbXBsYXRlc1xuXHQgKi9cblx0X2Zvcm1hdFRlbXBsYXRlRGF0YTogZnVuY3Rpb24oIGRhdGEgKSB7XG5cdFx0Ly8gTG9vcCB0aHJvdWdoIGV4dGVuc2lvbnMgYW5kIHNlZSBpZiBvcHRzIG5lZWRzIHRvIGJlIGV4dGVuZGVkIGF0IGFsbFxuXHRcdGlmICggdGhpcy5leHRlbnNpb25zICkge1xuXHRcdFx0Xy5lYWNoKGV4dGVuc2lvbnMsIGZ1bmN0aW9uKGV4dGVuc2lvbikge1xuXHRcdFx0XHRkYXRhW2V4dGVuc2lvbl0gPSB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGE7XG5cdH0sXG5cblx0LyoqXG5cdCAqIGNvbXBvbmVudHMgdGhhdCBoYXZlIGV4dGVuc2lvbnMgd2lsbCBjYWxsIHVwb24gdGhpcyBmaXJzdCB0aGluZyBvbiB0aGVpciBjb25zdHJ1Y3RvcnMsXG5cdCAqIHNvIHRoYXQgdGhlaXIgZXh0ZW5zaW9ucyBhcmUgYXZhaWxhYmxlIGluIHZhciBleHRlbnNpb25zID0gdGhpcy5leHRlbnNpb25zO1xuXHQgKi9cblx0Z2V0QWN0aXZlRXh0ZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIF90aGlzID0gdGhpcyxcblx0XHRcdGF2YWlsYWJsZUV4dGVuc2lvbnMgPSB0aGlzLl9nZXRBdmFpbGFibGVFeHRlbnNpb25zKCk7XG5cblx0XHRpZiAoICF0aGlzLnJlcXVlc3RlZEV4dGVuc2lvbnMgfHwgIWF2YWlsYWJsZUV4dGVuc2lvbnMgKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvLyBtYWtlIHN1cmUgZXh0ZW5zaW9ucyBpcyBub3QgYSBzdHJpbmcsIGFzIGl0IGNhbiBiZSBwYXNzZWQgbGlrZSBcImFqYXhhYmxlIHNlYXJjaGFibGVcIlxuXHRcdGlmICggdHlwZW9mIHRoaXMucmVxdWVzdGVkRXh0ZW5zaW9ucyA9PT0gJ3N0cmluZycgKSB7XG5cdFx0XHR0aGlzLnJlcXVlc3RlZEV4dGVuc2lvbnMgPSB0aGlzLnJlcXVlc3RlZEV4dGVuc2lvbnMuc3BsaXQoJyAnKTtcblx0XHR9XG5cblx0XHQvLyByZXR1cm5zIHRob3NlIGV4dGVuc2lvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIGFuZCBwYXNzZWQgaW4gdGhlIG9wdGlvbnNcblx0XHR2YXIgYWN0aXZlRXh0ZW5zaW9ucyA9IHt9O1xuXG5cdFx0Xy5lYWNoKCB0aGlzLnJlcXVlc3RlZEV4dGVuc2lvbnMsIGZ1bmN0aW9uKCBleHRlbnNpb25OYW1lKXtcblx0XHRcdGlmICggdHlwZW9mIGF2YWlsYWJsZUV4dGVuc2lvbnNbZXh0ZW5zaW9uTmFtZV0gIT09ICd1bmRlZmluZWQnICkge1xuXHRcdFx0XHRhY3RpdmVFeHRlbnNpb25zWyBleHRlbnNpb25OYW1lIF0gPSBhdmFpbGFibGVFeHRlbnNpb25zW2V4dGVuc2lvbk5hbWVdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGFjdGl2ZUV4dGVuc2lvbnM7XG5cdH0sXG5cblx0Ly8gY2FsbGVkIGZyb20gdGhlIHN1cGVyIGNsYXNzZXMgdG8gaW5pdGlhbGl6ZSBhbmQgYmluZCBleHRlbnNpb25zXG5cdC8vIHRoaXMgdXN1YWxseSBuZWVkcyB0byBoYXBwZW4gbGFzdCBpbiB0aGVpciBpbml0KCkgZnVuY3Rpb25zXG5cdGxvYWRFeHRlbnNpb25zOiBmdW5jdGlvbiggb3B0cyApIHtcblxuXHRcdC8vIGV4dGVuc2lvbnMgaW5pdGlhbGl6YXRpb24sIHdpbGwgbG9vcCB0aHJ1IGFsbCBvZiB0aGUgZXh0ZW5zaW9ucyBzZXRcblx0XHR0aGlzLl9pbml0RXh0ZW5zaW9ucyggb3B0cyApO1xuXG5cdFx0Ly8gYmluZCBhbnkgZXh0ZW5zaW9uIGxpc3RlbmVyc1xuXHRcdHRoaXMuX2JpbmRFeHRlbnNpb25zKCBvcHRzICk7XG5cdH0sXG5cblx0Ly8vLy8vXG5cdC8vLy8vXG5cdC8vLy8gUFJJVkFURVxuXHQvLy9cblx0Ly9cblxuXHQvLy8vXG5cdC8vLyBBbGwgQ29tcG9uZW50cyBtdXN0IHN1cHBseSBhIHRlbXBsYXRlIHRvXG5cdC8vLyBvdmVycmlkZSB0aGUgZW1wdHkgb25lIGRlZmluZWQgYnkgdGhpcyBpbnRlcmZhY2Vcblx0Ly9cblx0X2dldFRlbXBsYXRlOiBmdW5jdGlvbigpIHtcblx0XHRjb25zb2xlLmxvZyggdGhpcy5nZXRUeXBlKCkgKyAnIGNvbXBvbmVudCBpcyBub3Qgc3VwcGx5aW5nIGEgdGVtcGxhdGUnKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0Ly8vL1xuXHQvLy8gSWYgYSBjb21wb25lbnQgaGFzIGV4dGVuc2lvbnMsIHRoZXkgd2lsbCBiZSByZXF1aXJlZCBpbiB0aGUgY29tcG9uZW50J3MgZmlsZVxuXHQvLy8gYW5kIHBhc3NlZCBhbG9uZyBpbiBhbiBhYnN0cmFjdCBtZXRob2Rcblx0Ly9cblx0X2dldEF2YWlsYWJsZUV4dGVuc2lvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHQvLyBDYWxscyB0aGUgZXh0ZW5zaW9uSW5pdCBtZXRob2Qgb24gZWFjaCBvZiB0aGUgZGVmaW5lZFxuXHQvLyBleHRlbnNpb25zLlxuXHRfaW5pdEV4dGVuc2lvbnM6IGZ1bmN0aW9uKCBvcHRzICkge1xuXHRcdHZhciBleHRlbnNpb25zID0gdGhpcy5leHRlbnNpb25zO1xuXG5cdFx0aWYgKCBleHRlbnNpb25zICkge1xuXHRcdFx0dmFyIF90aGlzID0gdGhpcztcblxuXHRcdFx0Xy5lYWNoKGV4dGVuc2lvbnMsIGZ1bmN0aW9uKGV4dGVuc2lvbiwgZXh0ZW5zaW9uTmFtZSkge1xuXHRcdFx0XHRpZiAoIHR5cGVvZiBfdGhpc1tleHRlbnNpb25OYW1lXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIF90aGlzW2V4dGVuc2lvbk5hbWVdLmV4dGVuc2lvbkluaXQgPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHRcdFx0X3RoaXNbZXh0ZW5zaW9uTmFtZV0uZXh0ZW5zaW9uSW5pdC5jYWxsKF90aGlzLCBvcHRzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIFRoaXMgY2FsbHMgdGhlIGV4dGVuc2lvbkJpbmQgbWV0aG9kIGluc2lkZSBvZiBlYWNoIG9mIHRoZVxuXHQvLyBpbmNsdWRlZCBjb21wb25lbnRzLlxuXHRfYmluZEV4dGVuc2lvbnM6IGZ1bmN0aW9uKCBvcHRzICkge1xuXHRcdHZhciBleHRlbnNpb25zID0gdGhpcy5leHRlbnNpb25zO1xuXG5cdFx0aWYgKCBleHRlbnNpb25zICkge1xuXHRcdFx0dmFyIF90aGlzID0gdGhpcztcblxuXHRcdFx0Xy5lYWNoKGV4dGVuc2lvbnMsIGZ1bmN0aW9uKGV4dGVuc2lvbiwgZXh0ZW5zaW9uTmFtZSkge1xuXHRcdFx0XHRpZiAoIHR5cGVvZiBfdGhpc1tleHRlbnNpb25OYW1lXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIF90aGlzW2V4dGVuc2lvbk5hbWVdLmV4dGVuc2lvbkJpbmQgPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHRcdFx0X3RoaXNbZXh0ZW5zaW9uTmFtZV0uZXh0ZW5zaW9uQmluZC5jYWxsKF90aGlzLCBvcHRzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBETyBOT1QgT1ZFUlJJREUsIGV4dGVuZCBpcyBjb29sXG5cdCAqIHRha2luZyB0aGUgb3B0cyBwYXNzZWQsIHByZXBhcmVzIHRoZW0gdG8gYmUgdGhpcy5kYXRhIGluZm9ybWF0aW9uIHBhc3NlZCB0byB0ZW1wbGF0ZXNcblx0ICovXG5cdF9mb3JtYXRUZW1wbGF0ZURhdGE6IGZ1bmN0aW9uKCBkYXRhICkge1xuXHRcdHZhciB0eXBlT3B0aW9uTmFtZSA9IHRoaXMuZ2V0VHlwZSgpLnJlcGxhY2UoJ3N1aS0nLCAnJyksIC8vIGV4LiBkcm9wZG93biwgbW9kYWwuICB1c2VkIHRvIHBhc3MgZXh0ZW5zaW9ucyBhcyB2YXJpYXRpb25zIHRvIHRoZSB0ZW1wbGF0ZVxuXHRcdFx0ZXh0ZW5zaW9ucyA9IHRoaXMuZXh0ZW5zaW9ucztcblxuXHRcdGRhdGFbdHlwZU9wdGlvbk5hbWVdID0gZGF0YVt0eXBlT3B0aW9uTmFtZV0gfHwgJyc7XG5cblx0XHQvLyBMb29wIHRocm91Z2ggZXh0ZW5zaW9ucyBhbmQgc2VlIGlmIG9wdHMgbmVlZHMgdG8gYmUgZXh0ZW5kZWQgYXQgYWxsXG5cdFx0aWYgKCBleHRlbnNpb25zICkge1xuXHRcdFx0Xy5lYWNoKGV4dGVuc2lvbnMsIGZ1bmN0aW9uKGV4dGVuc2lvbiwgZXh0ZW5zaW9uTmFtZSApIHtcblx0XHRcdFx0Ly8gdXBkYXRlIGV4dGVuc2lvbiBhcyB0cnVlIHByb3BlcnR5LCBhbmQgYWRkIHRvIENTUyB2YXJpYXRpb24gcHJvcGVydHlcblx0XHRcdFx0ZGF0YVtleHRlbnNpb25OYW1lXSA9IHRydWU7XG5cdFx0XHRcdGRhdGFbdHlwZU9wdGlvbk5hbWVdICs9ICgnICcgKyBleHRlbnNpb25OYW1lKTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cbn0pO1xuXG4vLy8vXG4vLy8gRXhwb3J0c1xuLy9cbm1vZHVsZS5leHBvcnRzID0gU3VpQ29tcG9uZW50QmFzZUludGVyZmFjZTtcbiIsIi8vIGhic2Z5IGNvbXBpbGVkIEhhbmRsZWJhcnMgdGVtcGxhdGVcbnZhciBIYW5kbGViYXJzQ29tcGlsZXIgPSByZXF1aXJlKCdoYnNmeS9ydW50aW1lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEhhbmRsZWJhcnNDb21waWxlci50ZW1wbGF0ZShmdW5jdGlvbiAoSGFuZGxlYmFycyxkZXB0aDAsaGVscGVycyxwYXJ0aWFscyxkYXRhKSB7XG4gIHRoaXMuY29tcGlsZXJJbmZvID0gWzQsJz49IDEuMC4wJ107XG5oZWxwZXJzID0gdGhpcy5tZXJnZShoZWxwZXJzLCBIYW5kbGViYXJzLmhlbHBlcnMpOyBkYXRhID0gZGF0YSB8fCB7fTtcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyLCBmdW5jdGlvblR5cGU9XCJmdW5jdGlvblwiLCBlc2NhcGVFeHByZXNzaW9uPXRoaXMuZXNjYXBlRXhwcmVzc2lvbiwgc2VsZj10aGlzO1xuXG5mdW5jdGlvbiBwcm9ncmFtMShkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCJpZD1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmlkKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmlkKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCJcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG5mdW5jdGlvbiBwcm9ncmFtMyhkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCJjbGFzcz1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzWydjbGFzcyddKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwWydjbGFzcyddKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCJcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG5mdW5jdGlvbiBwcm9ncmFtNShkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCJzdWktc3R5bGVzPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuc3R5bGVzKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnN0eWxlcyk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiXCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTcoZGVwdGgwLGRhdGEpIHtcbiAgXG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazEsIGhlbHBlcjtcbiAgYnVmZmVyICs9IFwiPGxhYmVsIHN1aS1pbnB1dC1sYWJlbD1cXFwiY2hlY2thYmxlXFxcIiBmb3I9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5pbnB1dExhYmVsSWQpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuaW5wdXRMYWJlbElkKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCI+XCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmxhYmVsKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmxhYmVsKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIjwvbGFiZWw+XCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuICBidWZmZXIgKz0gXCI8ZGl2IFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMC5pZCksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSgxLCBwcm9ncmFtMSwgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCIgc3VpLWlucHV0IHN1aS1jaGVja2JveD1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmNoZWNrYm94KSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmNoZWNrYm94KTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCIgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwWydjbGFzcyddKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDMsIHByb2dyYW0zLCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAuc3R5bGVzKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDUsIHByb2dyYW01LCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIj5cXG4gIFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMC5sYWJlbCksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSg3LCBwcm9ncmFtNywgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCJcXG4gIDxkaXYgc3VpLWlucHV0LWhvbGRlcj5cXG4gICAgPGlucHV0IHR5cGU9XFxcImhpZGRlblxcXCIgbmFtZT1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLm5hbWUpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAubmFtZSk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiIGlkPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuaW5wdXRMYWJlbElkKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmlucHV0TGFiZWxJZCk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiIHZhbHVlPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMudmFsdWUpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAudmFsdWUpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIj5cXG4gICAgPHNwYW4gc3VpLWlucHV0LXJlcGxhY2VtZW50Pjwvc3Bhbj5cXG4gIDwvZGl2PlxcbjwvZGl2PlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9KTtcbiIsIi8vIFJlcXVpcmUgZGVwZW5kZW5jaWVzIC8vXG5cbnZhciAkID0gcmVxdWlyZSgnanF1ZXJ5JyksXG5cdF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG5cbnZhciBTdWlJbnB1dEJhc2VJbnRlcmZhY2UgPSByZXF1aXJlKCcuLi9zdWktaW5wdXQtYmFzZS1pbnRlcmZhY2UnKTtcblxudmFyIHRlbXBsYXRlID0gcmVxdWlyZSgnLi90ZW1wbGF0ZS5oYnMnKSxcblx0Y21zVGVtcGxhdGUgPSByZXF1aXJlKCcuL2Ntcy10ZW1wbGF0ZS5oYnMnKTtcblxuLyoqXG4gKiBTdWlDaGVja2JveCBiZWhhdmVzIGxpa2UgYSBiaW5hcnkgdG9nZ2xlIGJldHdlZW4gMCBhbmQgMVxuICogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBzdGFuZGFyZCBIVE1MIGJlaGF2aW9yLCBidXQgc28gbXVjaCBtb3JlIGNvbnZlbmllbnQgZm9yIGRhdGEgbWFuaXB1bGF0aW9uXG4gKi9cbmZ1bmN0aW9uIFN1aUNoZWNrYm94KG9wdHMpIHtcblx0U3VpSW5wdXRCYXNlSW50ZXJmYWNlLmNhbGwodGhpcywgb3B0cyk7XG5cblx0Ly8gZm9yIGNoZWNrYm94ZXMsIHZhbHVlcyBhbGxvd2VkIGFyZSBlaXRoZXIgMSBvciAwXG5cdHRoaXMuY3VycmVudFZhbHVlID0gdGhpcy5jdXJyZW50VmFsdWUgPyAxIDogMDtcbn1cblxuJC5leHRlbmQoU3VpQ2hlY2tib3gucHJvdG90eXBlLCBTdWlJbnB1dEJhc2VJbnRlcmZhY2UucHJvdG90eXBlLCB7XG5cdC8vIEltcGxlbWVudGluZyB0aGUgcmVxdWlyZWQgZ2V0VGVtcGxhdGUgbWV0aG9kIHRvIG92ZXJyaWRlXG5cdC8vIHRoZSBiYXNlIGludGVyZmFjZSBhYnN0cmFjdFxuXHRfZ2V0VGVtcGxhdGU6IGZ1bmN0aW9uKHRlbXBsYXRlVHlwZSkge1xuXHRcdHJldHVybiB0ZW1wbGF0ZVR5cGUgPT09ICdjbXMnID8gY21zVGVtcGxhdGUgOiB0ZW1wbGF0ZTtcblx0fSxcblxuXHRpbml0OiBmdW5jdGlvbigpIHtcblx0XHRTdWlJbnB1dEJhc2VJbnRlcmZhY2UucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKTtcblxuXHRcdHRoaXMuJGxhYmVsID0gdGhpcy4kZWwuZmluZCgnW3N1aS1yYWRpby1jaGVjay1sYWJlbF0nKTtcblxuXHRcdC8vIGNsaWNrIGV2ZW50cyBvbiB0aGUgd2hvbGUgZWxlbWVudCBtYWtlIGl0IHRvZ2dsZVxuXHRcdHRoaXMuJGVsLm9uKCdjbGljaycsIHRoaXMudG9nZ2xlVmFsdWUuYmluZCh0aGlzKSApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBvdmVycmlkaW5nIGRlZmF1bHQgZ2V0dGluZyB2YWx1ZSBmcm9tIG1hcmt1cCBiZWhhdmlvclxuXHQgKi9cblx0X2dldFZhbHVlRnJvbU1hcmt1cDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuJGlucHV0LnZhbCgpID8gMSA6IDA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBfc2V0VmFsdWVJbk1hcmt1cCgpIGZvciBpbnB1dHMgYmVjYXVzZSBjaGVja2JveGVzIGFyZSBkaWZmZXJlbnRcblx0ICovXG5cdF9zZXRWYWx1ZUluTWFya3VwOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0Ly8gdGhlIGNoZWNrZWQgY2xhc3MgaXMgbmVlZGVkIGZvciBzdHlsaW5nXG5cdFx0dGhpcy4kaW5wdXQudG9nZ2xlQ2xhc3MoJ2NoZWNrZWQnLCAhIXZhbHVlICk7XG5cdH0sXG5cblx0dG9nZ2xlVmFsdWU6IGZ1bmN0aW9uKCkge1xuXHRcdC8vIGludmVydCB0aGUgdmFsdWVcblx0XHR0aGlzLnNldFZhbHVlKCB0aGlzLmN1cnJlbnRWYWx1ZSA/IDAgOiAxICk7XG5cdH0sXG5cblx0Ly8vL1xuXHQvLy8gVG8gZ2V0IHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIHJhZGlvLCByZWdhcmRsZXNzIG9mIHdoZXRoZXJcblx0Ly8vIG9yIG5vdCBpdCBpcyBjaGVja2VkLiAgVXNlZCBmb3Igc2F2aW5nIHZhbHVlIHRvIFNwbGFzaEZlZWRcblx0Ly9cblx0Z2V0SW5wdXRWYWx1ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuJGlucHV0LnZhbCgpO1xuXHR9XG59KTtcblxuLy8gRXhwb3J0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdHMpIHtcblx0cmV0dXJuIG5ldyBTdWlDaGVja2JveChvcHRzKTtcbn07IiwiLy8gaGJzZnkgY29tcGlsZWQgSGFuZGxlYmFycyB0ZW1wbGF0ZVxudmFyIEhhbmRsZWJhcnNDb21waWxlciA9IHJlcXVpcmUoJ2hic2Z5L3J1bnRpbWUnKTtcbm1vZHVsZS5leHBvcnRzID0gSGFuZGxlYmFyc0NvbXBpbGVyLnRlbXBsYXRlKGZ1bmN0aW9uIChIYW5kbGViYXJzLGRlcHRoMCxoZWxwZXJzLHBhcnRpYWxzLGRhdGEpIHtcbiAgdGhpcy5jb21waWxlckluZm8gPSBbNCwnPj0gMS4wLjAnXTtcbmhlbHBlcnMgPSB0aGlzLm1lcmdlKGhlbHBlcnMsIEhhbmRsZWJhcnMuaGVscGVycyk7IGRhdGEgPSBkYXRhIHx8IHt9O1xuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXIsIGZ1bmN0aW9uVHlwZT1cImZ1bmN0aW9uXCIsIGVzY2FwZUV4cHJlc3Npb249dGhpcy5lc2NhcGVFeHByZXNzaW9uLCBzZWxmPXRoaXM7XG5cbmZ1bmN0aW9uIHByb2dyYW0xKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImlkPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuaWQpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuaWQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW0zKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImNsYXNzPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnNbJ2NsYXNzJ10pIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDBbJ2NsYXNzJ10pOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW01KGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcInN1aS1zdHlsZXM9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5zdHlsZXMpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuc3R5bGVzKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCJcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG5mdW5jdGlvbiBwcm9ncmFtNyhkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCI8bGFiZWwgc3VpLWlucHV0LWxhYmVsPVxcXCJjaGVja2FibGVcXFwiIGZvcj1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmlucHV0TGFiZWxJZCkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5pbnB1dExhYmVsSWQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIj5cIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMubGFiZWwpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAubGFiZWwpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiPC9sYWJlbD5cIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG4gIGJ1ZmZlciArPSBcIjxkaXYgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmlkKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDEsIHByb2dyYW0xLCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIiBzdWktaW5wdXQgc3VpLWNoZWNrYm94PVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuY2hlY2tib3gpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuY2hlY2tib3gpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDBbJ2NsYXNzJ10pLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oMywgcHJvZ3JhbTMsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiIFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMC5zdHlsZXMpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oNSwgcHJvZ3JhbTUsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiPlxcbiAgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmxhYmVsKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDcsIHByb2dyYW03LCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIlxcbiAgPGRpdiBzdWktaW5wdXQtaG9sZGVyPlxcbiAgICA8aW5wdXQgdHlwZT1cXFwiaGlkZGVuXFxcIiBuYW1lPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMubmFtZSkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5uYW1lKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCIgaWQ9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5pbnB1dExhYmVsSWQpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuaW5wdXRMYWJlbElkKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCIgdmFsdWU9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy52YWx1ZSkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC52YWx1ZSk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiPlxcbiAgICA8c3BhbiBzdWktaW5wdXQtcmVwbGFjZW1lbnQ+PC9zcGFuPlxcbiAgPC9kaXY+XFxuPC9kaXY+XCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH0pO1xuIiwiLy8gaGJzZnkgY29tcGlsZWQgSGFuZGxlYmFycyB0ZW1wbGF0ZVxudmFyIEhhbmRsZWJhcnNDb21waWxlciA9IHJlcXVpcmUoJ2hic2Z5L3J1bnRpbWUnKTtcbm1vZHVsZS5leHBvcnRzID0gSGFuZGxlYmFyc0NvbXBpbGVyLnRlbXBsYXRlKGZ1bmN0aW9uIChIYW5kbGViYXJzLGRlcHRoMCxoZWxwZXJzLHBhcnRpYWxzLGRhdGEpIHtcbiAgdGhpcy5jb21waWxlckluZm8gPSBbNCwnPj0gMS4wLjAnXTtcbmhlbHBlcnMgPSB0aGlzLm1lcmdlKGhlbHBlcnMsIEhhbmRsZWJhcnMuaGVscGVycyk7IGRhdGEgPSBkYXRhIHx8IHt9O1xuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXIsIGZ1bmN0aW9uVHlwZT1cImZ1bmN0aW9uXCIsIGVzY2FwZUV4cHJlc3Npb249dGhpcy5lc2NhcGVFeHByZXNzaW9uLCBzZWxmPXRoaXM7XG5cbmZ1bmN0aW9uIHByb2dyYW0xKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImlkPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuaWQpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuaWQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW0zKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImNsYXNzPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnNbJ2NsYXNzJ10pIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDBbJ2NsYXNzJ10pOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW01KGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcInN1aS1zdHlsZXM9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5zdHlsZXMpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuc3R5bGVzKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCJcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG5mdW5jdGlvbiBwcm9ncmFtNyhkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCJcXG5cdDxsYWJlbCBzdWktaW5wdXQtbGFiZWw+XCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmxhYmVsKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmxhYmVsKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiPC9sYWJlbD5cXG5cdFwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW05KGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImNsYXNzPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuaWNvbkNsYXNzKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmljb25DbGFzcyk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiXCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTExKGRlcHRoMCxkYXRhKSB7XG4gIFxuICBcbiAgcmV0dXJuIFwiXFxuXHRcdFx0PGRpdiBzdWktZHJvcGRvd24tc2VhcmNoPlxcblx0XHRcdFx0PGlucHV0IHN1aS1kcm9wZG93bi1zZWFyY2gtaW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgcGxhY2Vob2xkZXI9XFxcIlNlYXJjaFxcXCI+XFxuXHRcdFx0PC9kaXY+XFxuXHRcdFwiO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW0xMyhkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCJcXG5cdFx0PGRpdiBzdWktZHJvcGRvd24tb3B0aW9uPVxcXCJcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAuaXNfY3VycmVudCksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSgxNCwgcHJvZ3JhbTE0LCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIlxcXCIgZGF0YS12YWx1ZT1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLnZhbHVlKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnZhbHVlKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCI+XCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLnRleHQpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAudGV4dCk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIjwvZGl2Plxcblx0XHRcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuZnVuY3Rpb24gcHJvZ3JhbTE0KGRlcHRoMCxkYXRhKSB7XG4gIFxuICBcbiAgcmV0dXJuIFwiaXMtYWN0aXZlXCI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTE2KGRlcHRoMCxkYXRhKSB7XG4gIFxuICBcbiAgcmV0dXJuIFwiXFxuXHRcdFx0PGRpdiBzdWktZHJvcGRvd24tZm9vdGVyPjwvZGl2Plxcblx0XHRcIjtcbiAgfVxuXG4gIGJ1ZmZlciArPSBcIjxkaXYgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmlkKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDEsIHByb2dyYW0xLCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIiBzdWktaW5wdXQgc3VpLWRyb3Bkb3duPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuZHJvcGRvd24pIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuZHJvcGRvd24pOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDBbJ2NsYXNzJ10pLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oMywgcHJvZ3JhbTMsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiIFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMC5zdHlsZXMpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oNSwgcHJvZ3JhbTUsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiPlxcblx0XCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmxhYmVsKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDcsIHByb2dyYW03LCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIlxcblx0PGlucHV0IHN1aS1kcm9wZG93bi1pbnB1dCB0eXBlPVxcXCJoaWRkZW5cXFwiIHZhbHVlPVxcXCJcIlxuICAgICsgZXNjYXBlRXhwcmVzc2lvbigoKHN0YWNrMSA9ICgoc3RhY2sxID0gKGRlcHRoMCAmJiBkZXB0aDAuY3VycmVudCkpLHN0YWNrMSA9PSBudWxsIHx8IHN0YWNrMSA9PT0gZmFsc2UgPyBzdGFjazEgOiBzdGFjazEudmFsdWUpKSx0eXBlb2Ygc3RhY2sxID09PSBmdW5jdGlvblR5cGUgPyBzdGFjazEuYXBwbHkoZGVwdGgwKSA6IHN0YWNrMSkpXG4gICAgKyBcIlxcXCIgbmFtZT1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLm5hbWUpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAubmFtZSk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiPlxcblx0PGRpdiBzdWktZHJvcGRvd24tdHJpZ2dlcj1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLnRyaWdnZXJfdmFyaWF0aW9uKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnRyaWdnZXJfdmFyaWF0aW9uKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCIgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmljb25DbGFzcyksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSg5LCBwcm9ncmFtOSwgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCI+XCI7XG4gIHN0YWNrMSA9ICgoc3RhY2sxID0gKChzdGFjazEgPSAoZGVwdGgwICYmIGRlcHRoMC5jdXJyZW50KSksc3RhY2sxID09IG51bGwgfHwgc3RhY2sxID09PSBmYWxzZSA/IHN0YWNrMSA6IHN0YWNrMS50ZXh0KSksdHlwZW9mIHN0YWNrMSA9PT0gZnVuY3Rpb25UeXBlID8gc3RhY2sxLmFwcGx5KGRlcHRoMCkgOiBzdGFjazEpO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiPC9kaXY+XFxuXHQ8ZGl2IHN1aS1kcm9wZG93bi1vcHRpb25zPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuZHJvcGRvd24pIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuZHJvcGRvd24pOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAuc3R5bGVzKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDUsIHByb2dyYW01LCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIj5cXG5cdFx0XCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLnNlYXJjaGFibGUpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oMTEsIHByb2dyYW0xMSwgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCJcXG5cdFx0XCI7XG4gIHN0YWNrMSA9IGhlbHBlcnMuZWFjaC5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAub3B0aW9ucyksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSgxMywgcHJvZ3JhbTEzLCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIlxcblx0XHRcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAuaGFzRm9vdGVyKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDE2LCBwcm9ncmFtMTYsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiXFxuXHQ8L2Rpdj5cXG48L2Rpdj5cIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfSk7XG4iLCJ2YXIgJCA9IHdpbmRvdy5qUXVlcnk7XG52YXIgXyA9IHdpbmRvdy5fO1xuXG5mdW5jdGlvbiBTdWlEcm9wZG93bkFqYXhhYmxlKCkge31cblxuJC5leHRlbmQoU3VpRHJvcGRvd25BamF4YWJsZS5wcm90b3R5cGUsIHtcblx0YWpheGFibGU6IHtcblx0XHRleHRlbnNpb25Jbml0OiBmdW5jdGlvbihvcHRzKSB7XG5cdFx0XHR0aGlzLmZldGNoVXJsID0gb3B0cy5mZXRjaFVybCA/IG9wdHMuZmV0Y2hVcmwgOiBmYWxzZTtcblxuXHRcdFx0Ly8gRWl0aGVyIHRha2UgcGFnZSBhbmQgbGltaXQgZnJvbSBvcHRpb25zLCBvciBmYWxsYmFjayB0byBkZWZhdWx0c1xuXHRcdFx0dGhpcy5wYWdlID0gb3B0cy5wYWdlID8gb3B0cy5wYWdlIDogMTtcblx0XHRcdHRoaXMubGltaXQgPSBvcHRzLmxpbWl0ID8gb3B0cy5saW1pdCA6IDU7XG5cblx0XHRcdC8vIEFzc3VtZSB0aGF0IHRoZXJlIGFyZSByZXN1bHRzIHRvIGJlIHBvcHVsYXRlZCBpbml0aWFsbHlcblx0XHRcdHRoaXMucmVzdWx0c0xlZnQgPSB0cnVlO1xuXG5cdFx0XHQvLyBDaGVjayBmb3IgYSBwYWdpbmF0aW9uIGJ1ZmZlciB2YWx1ZVxuXHRcdFx0dGhpcy5wYWdpbmF0aW9uQnVmZmVyID0gb3B0cy5wYWdpbmF0aW9uQnVmZmVyID8gcGFyc2VJbnQob3B0cy5wYWdpbmF0aW9uQnVmZmVyKSA6IDE1O1xuXG5cdFx0XHQvLyBDaGVjayBpZiB3ZSB3YW50IHRvIHByb2Nlc3NEYXRhIGluIHRoZSBhamF4IHJlcXVlc3Rcblx0XHRcdHRoaXMucHJvY2Vzc0RhdGEgPSAob3B0cy5wcm9jZXNzRGF0YSA9PSBcImZhbHNlXCIpID8gZmFsc2UgOiB0cnVlO1xuXG5cdFx0XHQvLyBDaGVjayBhamF4IHR5cGVcblx0XHRcdHRoaXMucmVxdWVzdE1ldGhvZCA9IG9wdHMucmVxdWVzdE1ldGhvZCA/IG9wdHMucmVxdWVzdE1ldGhvZCA6ICdHRVQnO1xuXHRcdH0sXG5cblx0XHRleHRlbnNpb25CaW5kOiBmdW5jdGlvbigpIHtcblx0XHRcdC8vIEFqYXggbG9hZCB0aGUgZmlyc3QgcGFnZSBvZiBjb250ZW50XG5cdFx0XHR0aGlzLmFqYXhhYmxlRmV0Y2hPcHRpb25zKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIFRha2VzIGEgcGFzc2VkIHVybCBhbmQgc2VuZHMgYSBHRVQgcmVxdWVzdCB0byBvYnRhaW4gZGF0YS5cblx0Ly8gVXNlcyB0aGUgcmV0cmlldmVkIGRhdGEgdG8gZXh0ZW5kIHRoZSBleGlzdGluZyBkcm9wZG93biBvcHRpb25zXG5cdGFqYXhhYmxlRmV0Y2hPcHRpb25zOiBmdW5jdGlvbihyZXNldCkge1xuXHRcdC8vIFJlc2V0IGlzIGEgZmxhZyB0aGF0IGNhbiBiZSB1c2VkIHRvIGhhdmUgdGhlXG5cdFx0Ly8gZm91bmQgcmVzdWx0cyByZXBsYWNlIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkXG5cdFx0Ly8gb3B0aW9ucyBpbnN0ZWFkIG9mIGdldHRpbmcgYXBwZW5kZWRcblx0XHRyZXNldCA9ICh0eXBlb2YgcmVzZXQgIT09ICd1bmRlZmluZWQnKSA/IHJlc2V0IDogZmFsc2U7XG5cblx0XHR2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdFx0dmFyIHBhcmFtcyA9IHtcblx0XHRcdHBhZ2U6IF90aGlzLnBhZ2UsXG5cdFx0XHRsaW1pdDogX3RoaXMubGltaXQsXG5cdFx0XHRzdWlfZHJvcGRvd246IHRydWUsXG5cdFx0fTtcblxuXHRcdC8vIEFsbG93IGZvciBjb21iaW5pbmcgc2VhcmNoYWJsZSBhbmQgYWpheGFibGVcblx0XHRpZih0eXBlb2YgX3RoaXMuc2VhcmNoU3RyaW5nICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0cGFyYW1zLnRleHRfZmlsdGVyID0gX3RoaXMuc2VhcmNoU3RyaW5nO1xuXHRcdH1cblxuXHRcdC8vIElmIHdlJ3JlIG5vdCBsZXR0aW5nIGpRdWVyeSBwcm9jZXNzRGF0YSxcblx0XHQvLyB3ZSBuZWVkIHRvIHN0cmluZ2lmeSB0aGUgcGFzc2VkIHBhcmFtZXRlcnNcblx0XHQvLyBzbyB0aGUgcmVxdWVzdCBnb2VzIHRocm91Z2guXG5cdFx0aWYoIV90aGlzLnByb2Nlc3NEYXRhKSB7XG5cdFx0XHRwYXJhbXMgPSBKU09OLnN0cmluZ2lmeShwYXJhbXMpO1xuXHRcdH1cblxuXHRcdGlmKF90aGlzLnJlc3VsdHNMZWZ0KSB7XG5cdFx0XHQkLmFqYXgoe1xuXHRcdFx0XHR1cmw6IF90aGlzLmZldGNoVXJsLFxuXHRcdFx0XHR0eXBlOiBfdGhpcy5yZXF1ZXN0TWV0aG9kLFxuXHRcdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxuXHRcdFx0XHRkYXRhOiBwYXJhbXMsXG5cdFx0XHRcdHByb2Nlc3NEYXRhOiBfdGhpcy5wcm9jZXNzRGF0YSxcblx0XHRcdFx0Z2xvYmFsOiBmYWxzZVxuXHRcdFx0fSkuZG9uZShmdW5jdGlvbihyZXNwb25zZSkge1xuXHRcdFx0XHR2YXIgb3B0aW9ucyA9IHJlc3BvbnNlLmRhdGEucmVzdWx0cztcblxuXHRcdFx0XHQvLyBPbmx5IHRha2UgZnVydGhlciBhY3Rpb24gaWYgd2UgZm91bmQgcmVzdWx0c1xuXHRcdFx0XHRpZihvcHRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRcdGlmKHJlc2V0KSB7XG5cdFx0XHRcdFx0XHQvLyBDcmVhdGUgYSBuZXcgYXJyYXkgb2Ygb3B0aW9ucyB0aGF0IGNvbnRhaW5zIHRoZSBjYWNoZWRPcHRpb25zXG5cdFx0XHRcdFx0XHQvLyBhbmQgdGhlIG5ldyBvcHRpb25zIGZyb20gdGhlIEFKQVggcmVxdWVzdFxuXHRcdFx0XHRcdFx0X3RoaXMuZGF0YS5vcHRpb25zID0gX3RoaXMuY2FjaGVkT3B0aW9ucy5jb25jYXQob3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRfdGhpcy5lbXB0eU9wdGlvbnMoKTtcblx0XHRcdFx0XHRcdF90aGlzLmFwcGVuZE9wdGlvbnMoX3RoaXMuZGF0YS5vcHRpb25zKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gQWRkIHRoZSBuZXcgb3B0aW9ucyB0byB0aGUgY2FjaGVkIG9wdGlvbnMgaW4gdGhlIGluc3RhbmNlXG5cdFx0XHRcdFx0XHRfdGhpcy5kYXRhLm9wdGlvbnMgPSBfdGhpcy5kYXRhLm9wdGlvbnMuY29uY2F0KG9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0XHQvLyBBcHBlbmQgdGhlIG5ldyBvcHRpb25zIHRvIHRoZSBkcm9wZG93blxuXHRcdFx0XHRcdFx0X3RoaXMuYXBwZW5kT3B0aW9ucyhvcHRpb25zKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBJbmNyZW1lbnQgdGhlIHBhZ2Vcblx0XHRcdFx0XHRfdGhpcy5wYWdlKys7XG5cblx0XHRcdFx0XHQvLyBCaW5kIHNjcm9sbCBldmVudCB0byB0aGUgbGFzdCBpdGVtIGluIHRoZSBjdXJyZW50IG9wdGlvbnNcblx0XHRcdFx0XHRfdGhpcy5hamF4YWJsZUJpbmRQYWdpbmF0aW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSByZXN1bHRzIGxlZnQgdG8gZmV0Y2hcblx0XHRcdFx0aWYob3B0aW9ucy5sZW5ndGggPCBfdGhpcy5saW1pdCkge1xuXHRcdFx0XHRcdF90aGlzLnJlc3VsdHNMZWZ0ID0gZmFsc2U7XG5cdFx0XHRcdFx0X3RoaXMuYWpheGFibGVVbmJpbmRQYWdpbmF0aW9uKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLmZhaWwoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKCdTVUkgRHJvcGRvd246IFNvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIGZldGNoaW5nIGRhdGEnKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHQvLyBVbi1iaW5kcyB0aGUgcGFnaW5hdGlvbiBhY3Rpb25cblx0YWpheGFibGVVbmJpbmRQYWdpbmF0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiRvcHRpb25zTGlzdC5vZmYoJ3Njcm9sbCcpO1xuXHR9LFxuXG5cdC8vIFJlLWJpbmRzIHRoZSBwYWdpbmF0aW9uIGFjdGlvbiB0byB0aGUgb3B0aW9ucyBsaXN0XG5cdGFqYXhhYmxlQmluZFBhZ2luYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuYWpheGFibGVVbmJpbmRQYWdpbmF0aW9uKCk7XG5cdFx0dGhpcy4kb3B0aW9uc0xpc3Qub24oJ3Njcm9sbCcsIHRoaXMuYWpheGFibGVDaGVja1Njcm9sbFBvc2l0aW9uLmJpbmQodGhpcykpO1xuXHR9LFxuXG5cdC8vIENoZWNrcyB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24gb2YgdGhlIG9wdGlvbnMgbGlzdFxuXHRhamF4YWJsZUNoZWNrU2Nyb2xsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBoZWlnaHQgPSB0aGlzLiRvcHRpb25zTGlzdC5oZWlnaHQoKTtcblx0XHR2YXIgc2Nyb2xsX3RvcCA9IHRoaXMuJG9wdGlvbnNMaXN0LnNjcm9sbFRvcCgpO1xuXHRcdHZhciBzY3JvbGxfaGVpZ2h0ID0gdGhpcy4kb3B0aW9uc0xpc3RbMF0uc2Nyb2xsSGVpZ2h0O1xuXG5cdFx0Ly8gQ2hlY2tzIG9mIHRoZSB0b3Agc2Nyb2xsIHBvc2l0aW9uIG9mIHRoZSBvcHRpb25zIGxpc3QgcGx1cyBpdCdzXG5cdFx0Ly8gaGVpZ2h0ICh3aGljaCBpbiBlZmZlY3QsIGlzIHRoZSBib3R0b20pIGlzIGdyZWF0ZXIgdGhhbiB0aGUgaW5uZXJcblx0XHQvLyBzY3JvbGwgaGVpZ2h0ICh3aXRoIHNvbWUgYnVmZmVyKSBvZiB0aGUgZWxlbWVudC4gVHJpZ2dlcnMgYWN0aW9ucyBpZiBzb1xuXHRcdGlmKChzY3JvbGxfdG9wICsgaGVpZ2h0KSA+IChzY3JvbGxfaGVpZ2h0IC0gdGhpcy5wYWdpbmF0aW9uQnVmZmVyKSkge1xuXHRcdFx0dGhpcy5hamF4YWJsZVVuYmluZFBhZ2luYXRpb24oKTtcblx0XHRcdHRoaXMuYWpheGFibGVGZXRjaE9wdGlvbnMoKTtcblx0XHR9XG5cdH0sXG59KTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IFN1aURyb3Bkb3duQWpheGFibGU7IiwidmFyICQgPSB3aW5kb3cualF1ZXJ5O1xudmFyIF8gPSB3aW5kb3cuXztcblxuZnVuY3Rpb24gU3VpRHJvcGRvd25IYXNGb290ZXIoKSB7fVxuXG4kLmV4dGVuZChTdWlEcm9wZG93bkhhc0Zvb3Rlci5wcm90b3R5cGUsIHtcblxuXHRoYXNGb290ZXI6IHtcblx0XHQvLyBTZXR1cCBpbml0aWFsIGV4dGVuc2lvbiB2YXJzLiBUaGlzIGlzIGNhbGxlZCBpbiB0aGUgbWFpbiBTdWlEcm9wZG93biBmdW5jdGlvblxuXHRcdC8vIGluIHRoZSBpbml0RXh0ZW5zaW9ucyBtZXRob2Rcblx0XHRleHRlbnNpb25Jbml0OiBmdW5jdGlvbihvcHRzKSB7XG5cdFx0XHRpZihvcHRzLmZvb3Rlck1hcmt1cCkge1xuXHRcdFx0XHR0aGlzLiRmb290ZXIgPSB0aGlzLiRlbC5maW5kKCdbc3VpLWRyb3Bkb3duLWZvb3Rlcl0nKTtcblx0XHRcdFx0dGhpcy4kZm9vdGVyLmFwcGVuZChvcHRzLmZvb3Rlck1hcmt1cCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEJpbmQgb3IgY2FsbCBhbnkgbWV0aG9kcyB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgZHJvcGRvd24gaXRzZWxmXG5cdFx0Ly8gaXMgaW5zdGFudGlhdGVkIGFuZCBpbiB0aGUgRE9NXG5cdFx0ZXh0ZW5zaW9uQmluZDogZnVuY3Rpb24oKSB7XG5cdFx0fSxcblxuXG5cdH0sXG5cblx0aGFzRm9vdGVyX2dldEZvb3RlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuJGZvb3Rlcjtcblx0fSxcblxuXHRoYXNGb290ZXJfdXBkYXRlRm9vdGVyOiBmdW5jdGlvbihtYXJrdXApIHtcblx0XHR0aGlzLiRmb290ZXIgPSBtYXJrdXA7XG5cdH1cblxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3VpRHJvcGRvd25IYXNGb290ZXI7IiwidmFyICQgPSB3aW5kb3cualF1ZXJ5O1xudmFyIF8gPSB3aW5kb3cuXztcblxuZnVuY3Rpb24gU3VpRHJvcGRvd25NdWx0aXNlbGVjdGFibGUoKSB7fVxuXG4kLmV4dGVuZChTdWlEcm9wZG93bk11bHRpc2VsZWN0YWJsZS5wcm90b3R5cGUsIHtcblx0bXVsdGlzZWxlY3RhYmxlOiB7XG5cdFx0ZXh0ZW5zaW9uSW5pdDogZnVuY3Rpb24ob3B0cykge1xuXHRcdFx0dmFyIF90aGlzID0gdGhpcztcblxuXHRcdFx0Ly8gSW5zdGFudGlhdGUgYW4gYXJyYXkgdG8gaG9sZCBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHR0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IG9wdHMuc2VsZWN0ZWRPcHRpb25zID8gb3B0cy5zZWxlY3RlZE9wdGlvbnMgOiBbXTtcblxuXHRcdFx0Ly8gU2V0IGN1cnJlbnRWYWx1ZSBlcXVhbCB0byBhbiBhcnJheSBvZiBqdXN0IHRoZSBvcHRpb24gdmFsdWVzXG5cdFx0XHR0aGlzLmN1cnJlbnRWYWx1ZSA9IFtdO1xuXG5cdFx0XHRfLmVhY2godGhpcy5zZWxlY3RlZE9wdGlvbnMsIGZ1bmN0aW9uKG9wdGlvbikge1xuXHRcdFx0XHRfdGhpcy5jdXJyZW50VmFsdWUucHVzaChvcHRpb24udmFsdWUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIENoZWNrIHRvIHNlZSBpZiBhIHN0YWNrIHNlbGVjdGVkIG9wdGlvbiBpcyBwYXNzZWRcblx0XHRcdHRoaXMuc3RhY2tTZWxlY3RlZCA9IG9wdHMuc3RhY2tTZWxlY3RlZCA/IG9wdHMuc3RhY2tTZWxlY3RlZCA6IGZhbHNlO1xuXHRcdH0sXG5cblx0XHRleHRlbnNpb25CaW5kOiBmdW5jdGlvbigpIHtcblxuXHRcdH1cblx0fSxcblxuXHQvLyBPdmVyd3JpdGUgdGhlIGRlZmF1bHQgZHJvcGRvd24gdXBkYXRlU2VsZWN0aW9uXG5cdC8vIHRvIGFkZCB0byB0aGUgc2VsZWN0ZWRWYWx1ZXMgYXJyYXlcblx0dXBkYXRlU2VsZWN0aW9uOiBmdW5jdGlvbihlKSB7XG5cdFx0dmFyIF90aGlzID0gdGhpcztcblxuXHRcdC8vIENoZWNrIGlmIHdlIHdhbnQgdG8gcHJldmVudCBldmVudCBidWJibGluZ1xuXHRcdGlmKHRoaXMuZGlzYWJsZUJ1YmJsaW5nKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdHZhciAkdGFyZ2V0ID0gJChlLmN1cnJlbnRUYXJnZXQpO1xuXHRcdHZhciB2YWx1ZSA9ICR0YXJnZXQuZGF0YSgndmFsdWUnKTtcblxuXHRcdC8vIElmIGl0J3MgdGhlIHBsYWNlaG9sZGVyLCB3ZSBkb24ndCB3YW50IHRvIHRha2Vcblx0XHQvLyBhbnkgYWN0aW9uLiBKdXN0IHJldHVybi5cblx0XHRpZih2YWx1ZSA9PT0gJ3BsYWNlaG9sZGVyJykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIG9wdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHNlbGVjdGVkXG5cdFx0dmFyIGluZGV4VmFsdWUgPSBmYWxzZTtcblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBfdGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBvcHRpb24gPSBfdGhpcy5zZWxlY3RlZE9wdGlvbnNbaV07XG5cblx0XHRcdGlmKG9wdGlvbi52YWx1ZSA9PSB2YWx1ZSkge1xuXHRcdFx0XHRpbmRleFZhbHVlID0gaTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoaW5kZXhWYWx1ZSAhPT0gZmFsc2UpIHtcblx0XHRcdC8vIFJlbW92ZSB0aGUgaXMtYWN0aXZlIGF0dHJpYnV0ZVxuXHRcdFx0JHRhcmdldC5yZW1vdmVBdHRyVmFsKCdzdWktZHJvcGRvd24tb3B0aW9uJywgJ2lzLWFjdGl2ZScpO1xuXG5cdFx0XHQvLyBSZW1vdmUgdGhlIG9wdGlvbiBmcm9tIHRoZSBzZWxlY3RlZE9wdGlvbnMgYXJyYXlcblx0XHRcdF90aGlzLnNlbGVjdGVkT3B0aW9ucy5zcGxpY2UoaW5kZXhWYWx1ZSwgMSk7XG5cblx0XHRcdC8vIEFsc28gcmVtb3ZlIGl0IGZyb20gdGhlIGN1cnJlbnRWYWx1ZSBhcnJheVxuXHRcdFx0dmFyIGN1cnJlbnRWYWx1ZUluZGV4ID0gX3RoaXMuY3VycmVudFZhbHVlLmluZGV4T2YodmFsdWUpO1xuXHRcdFx0aWYoY3VycmVudFZhbHVlSW5kZXggPiAtMSkge1xuXHRcdFx0XHRfdGhpcy5jdXJyZW50VmFsdWUuc3BsaWNlKGN1cnJlbnRWYWx1ZUluZGV4LCAxKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRmluZCB0aGUgb3B0aW9uIGluIHRoZSBfdGhpcy5kYXRhLm9wdGlvbnMgYXJyYXlcblx0XHRcdC8vIGFuZCBhZGQgaXQgdG8gdGhlIHNlbGVjdGVkT3B0aW9uc1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IF90aGlzLmRhdGEub3B0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgb3B0aW9uID0gX3RoaXMuZGF0YS5vcHRpb25zW2ldO1xuXG5cdFx0XHRcdGlmKG9wdGlvbi52YWx1ZSA9PSB2YWx1ZSAmJiB0aGlzLmN1cnJlbnRWYWx1ZS5pbmRleE9mKG9wdGlvbi52YWx1ZSkgPT09IC0xKSB7XG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaChvcHRpb24pO1xuXHRcdFx0XHRcdHRoaXMuY3VycmVudFZhbHVlLnB1c2gob3B0aW9uLnZhbHVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdGhlIGlzLWFjdGl2ZSBhdHRyaWJ1dGVcblx0XHRcdCR0YXJnZXQuYWRkQXR0clZhbCgnc3VpLWRyb3Bkb3duLW9wdGlvbicsICdpcy1hY3RpdmUnKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSdyZSBzdGFja2luZyB0aGUgc2VsZWN0ZWQgb3B0aW9ucywgbWFrZSBzdXJlIHRoaXMgZW50cnkgZ2V0cyBhZGRlZFxuXHRcdC8vIHRvIHRoZSBlbmQgb2YgdGhlIHN0YWNrICh3b3JrcyBmb3IgYm90aCBiZWluZyBzZWxlY3RlZCBhbmQgdW5zZWxlY3RlZClcblx0XHRpZih0aGlzLnN0YWNrU2VsZWN0ZWQpIHtcblx0XHRcdCR0YXJnZXQuZGV0YWNoKCk7XG5cdFx0XHR2YXIgJGxhc3RTZWxlY3RlZEVudHJ5ID0gdGhpcy4kb3B0aW9uc0xpc3QuZmluZCgnW3N1aS1kcm9wZG93bi1vcHRpb25+PVwiaXMtYWN0aXZlXCJdOmxhc3QnKTtcblxuXHRcdFx0aWYoJGxhc3RTZWxlY3RlZEVudHJ5Lmxlbmd0aCkge1xuXHRcdFx0XHQkbGFzdFNlbGVjdGVkRW50cnkuYWZ0ZXIoJHRhcmdldCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLiRvcHRpb25zTGlzdC5maW5kKCdbc3VpLWRyb3Bkb3duLW9wdGlvbl06Zmlyc3QnKS5iZWZvcmUoJHRhcmdldCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gVHJpZ2dlciB0aGUgY2hhbmdlIGV2ZW50XG5cdFx0Xy5lYWNoKHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2tzLCBmdW5jdGlvbihjYikge1xuXHRcdFx0aWYgKCB0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicgKSB7XG5cdFx0XHRcdGNiLmNhbGwoX3RoaXMsIF90aGlzLm11bHRpc2VsZWN0YWJsZUdldFNlbGVjdGVkT3B0aW9ucygpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHQvLyBPdmVyd3JpdGUgYXBwZW5kIG9wdGlvbnMgdG8gY2hlY2sgaWYgdGhlIG9wdGlvblxuXHQvLyBpcyBpbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHZhbHVlc1xuXHRhcHBlbmRPcHRpb25zOiBmdW5jdGlvbihvcHRpb25zKSB7XG5cdFx0dmFyIF90aGlzID0gdGhpcztcblx0XHR2YXIgYWxsT3B0aW9ucyA9IF90aGlzLmRhdGEub3B0aW9ucztcblx0XHR2YXIgb3B0aW9uVmFsdWVzID0gXy5wbHVjayhhbGxPcHRpb25zLCAndmFsdWUnKTtcblx0XHR2YXIgY3VycmVudFZhbHVlcyA9IHRoaXMubXVsdGlzZWxlY3RhYmxlR2V0U2VsZWN0ZWRWYWx1ZXMoKTtcblxuXHRcdC8vIExvb3AgdGhyb3VnaCB0aGUgYWxsX29wdGlvbnMgYW5kIHNlZSBpZiB0aGVpciB2YWx1ZXMgYXJlXG5cdFx0Ly8gaW4gdGhlIGN1cnJlbnRWYWx1ZXMgYXJyYXkuIElmIHNvLCBzZXQgdGhlbSB0byBoYXZlXG5cdFx0Ly8gdGhlIGlzX2N1cnJlbnQgcHJvcGVydHlcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Ly8gSWYgdGhlIG9wdGlvbiBpcyBkZWZpbmVkIGFzIGN1cnJlbnQsIGFkZCBpdCB0b1xuXHRcdFx0Ly8gdGhlIHNlbGVjdGVkT3B0aW9ucyBhcnJheS5cblx0XHRcdGlmKG9wdGlvbnNbaV0uaXNfY3VycmVudCkge1xuXHRcdFx0XHRfdGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaChvcHRpb25zW2ldKTtcblx0XHRcdFx0X3RoaXMuY3VycmVudFZhbHVlLnB1c2gob3B0aW9uc1tpXS52YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoZSBvcHRpb24gaXMgYWxyZWFkeSBpbiB0aGUgc2VsZWN0ZWRPcHRpb25zXG5cdFx0XHQvLyBhcnJheSwgdGhlbiBtYXJrIGl0IGFzIGlzX2N1cnJlbnQuIEl0IGFscmVhZHlcblx0XHRcdC8vIHNob3VsZCBiZSwgYnV0IHRoaXMgaXMgdG8gYmUgc2FmZS5cblx0XHRcdGlmKGN1cnJlbnRWYWx1ZXMuaW5kZXhPZihvcHRpb25zW2ldLnZhbHVlKSA+IC0xKSB7XG5cdFx0XHRcdG9wdGlvbnNbaV0uaXNfY3VycmVudCA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGlmIHRoaXMgbmVlZHMgdG8gYmUgYWRkZWQgdG8gX3RoaXMuZGF0YS5vcHRpb25zXG5cdFx0XHRpZihvcHRpb25WYWx1ZXMuaW5kZXhPZihvcHRpb25zW2ldLnZhbHVlKSA9PT0gLTEpIHtcblx0XHRcdFx0b3B0aW9uVmFsdWVzLnB1c2gob3B0aW9uc1tpXS52YWx1ZSk7XG5cdFx0XHRcdF90aGlzLmRhdGEub3B0aW9ucy5wdXNoKG9wdGlvbnNbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvbmZpcm0gdGhhdCBhbGwgb2YgdGhlIHNlbGVjdGVkT3B0aW9ucyBhcmUgaW4gdGhlIG9wdGlvbnMgYXJyYXkuXG5cdFx0Ly8gT25seSBkbyB0aGlzIGlmIHRoZSBzZWFyY2ggc3RyaW5nIGlzIGVpdGhlciBub3Qgc2V0IG9yIGVtcHR5LlxuXHRcdC8vIERvbid0IHdhbnQgdG8gZGlzcGxheSBhbGwgc2VsZWN0ZWQgb3B0aW9ucyB3aGVuIHRoZSB1c2VyIGlzIHNlYXJjaGluZ1xuXHRcdGlmKCF0aGlzLnNlYXJjaFN0cmluZykge1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IF90aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgb3B0aW9uID0gX3RoaXMuc2VsZWN0ZWRPcHRpb25zW2ldO1xuXG5cdFx0XHRcdC8vIElmIGl0J3Mgbm90IHByZXNlbnQsIHdlIG5lZWQgdG8gYWRkIGl0IHRvIHRoZSBvcHRpb25zIGFycmF5XG5cdFx0XHRcdGlmKG9wdGlvblZhbHVlcy5pbmRleE9mKG9wdGlvbi52YWx1ZSkgPT09IC0xKSB7XG5cdFx0XHRcdFx0b3B0aW9uLmlzX2N1cnJlbnQgPSB0cnVlO1xuXHRcdFx0XHRcdG9wdGlvbnMucHVzaChvcHRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVuZGVyIHRoZSBodG1sIGJhc2VkIG9uIHRoZSBwYXNzZWQgb3B0aW9ucyBhbmRcblx0XHQvLyBhcHBlbmQgdGhlIG9wdGlvbnMgdG8gdGhlICRvcHRpb25zTGlzdFxuXHRcdHZhciBodG1sID0gdGhpcy5vcHRpb25UZW1wbGF0ZSh7IG9wdGlvbnM6IG9wdGlvbnMgfSk7XG5cdFx0dGhpcy4kb3B0aW9uc0xpc3QuYXBwZW5kKGh0bWwpO1xuXG5cdFx0Ly8gUmVzZXQgdGhpcy4kb3B0aW9ucyBjYWNoZSB0byBpbmNsdWRlIG5ldyBvcHRpb25zXG5cdFx0dGhpcy4kb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnNMaXN0LmZpbmQoJ1tzdWktZHJvcGRvd24tb3B0aW9uXScpO1xuXG5cdFx0Ly8gSWYgd2Ugd2FudCBzZWxlY3RlZCBvcHRpb25zIHRvIGJlIHN0YWNrZWQsIGNhbGwgdGhlIHByb3BlciBtZXRob2Rcblx0XHRpZih0aGlzLnN0YWNrU2VsZWN0ZWQpIHtcblx0XHRcdHRoaXMubXVsdGlzZWxlY3RhYmxlU3RhY2tTZWxlY3RlZCgpO1xuXHRcdH1cblxuXHRcdC8vIFRyaWdnZXIgdGhlIGNoYW5nZSBldmVudFxuXHRcdF8uZWFjaCh0aGlzLl9vbkNoYW5nZUNhbGxiYWNrcywgZnVuY3Rpb24oY2IpIHtcblx0XHRcdGlmICggdHlwZW9mIGNiID09PSAnZnVuY3Rpb24nICkge1xuXHRcdFx0XHRjYi5jYWxsKF90aGlzLCBfdGhpcy5tdWx0aXNlbGVjdGFibGVHZXRTZWxlY3RlZE9wdGlvbnMoKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0Ly8gUmV0dXJucyBhIGpvaW5lZCBzdHJpbmcgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB2YWx1ZXNcblx0Z2V0VmFsdWU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiAodGhpcy5jdXJyZW50VmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLmN1cnJlbnRWYWx1ZSAhPT0gJ3BsYWNlaG9sZGVyJykgPyB0aGlzLmN1cnJlbnRWYWx1ZS5qb2luKCcsJykgOiBbXTtcblx0fSxcblxuXHQvLyBTdGFja3MgdGhlIHNlbGVjdGVkIGl0ZW1zIGluIHRoZSBkcm9wZG93biB0b2dldGhlciBhdCB0aGUgdG9wXG5cdC8vIG9mIHRoZSBvcHRpb25zIGxpc3QuXG5cdG11bHRpc2VsZWN0YWJsZVN0YWNrU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdC8vIERldGFjaCB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBhbmQgcmUtYXR0YWNoIHRoZW0gYXQgdGhlIHRvcCBvZiB0aGUgb3B0aW9ucyBsaXN0XG5cdFx0dmFyICRzZWxlY3RlZE9wdGlvbnMgPSB0aGlzLiRvcHRpb25zTGlzdC5maW5kKCdbc3VpLWRyb3Bkb3duLW9wdGlvbj1cImlzLWFjdGl2ZVwiXScpLmRldGFjaCgpO1xuXG5cdFx0Ly8gV2FudCB0byBhZGQgaXQgYmVmb3JlIGFsbCBvZiB0aGUgb3RoZXIgb3B0aW9ucy4gTWF0Y2hpbmdcblx0XHQvLyB0aGUgZmlyc3QgW3N1aS1kcm9wZG93bi1vcHRpb25dIGp1c3QgaW4gY2FzZSB3ZSBoYXZlXG5cdFx0Ly8gYSBzZWFyY2ggYmFyIG9yIGFueSBvdGhlciBmdXR1cmUgZXh0ZW5zaW9uIGFzIHRoZSBmaXJzdFxuXHRcdC8vIGVsZW1lbnQgaW4gdGhpcy4kb3B0aW9uc0xpc3Rcblx0XHR0aGlzLiRvcHRpb25zTGlzdC5maW5kKCdbc3VpLWRyb3Bkb3duLW9wdGlvbl06Zmlyc3QnKS5iZWZvcmUoJHNlbGVjdGVkT3B0aW9ucyk7XG5cdH0sXG5cblx0Ly8gUmV0dXJucyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHZhbHVlc1xuXHRtdWx0aXNlbGVjdGFibGVHZXRTZWxlY3RlZFZhbHVlczogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuY3VycmVudFZhbHVlO1xuXHR9LFxuXG5cdC8vIFJldHVybnMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvcHRpb25zXG5cdG11bHRpc2VsZWN0YWJsZUdldFNlbGVjdGVkT3B0aW9uczogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb25zO1xuXHR9LFxuXG5cdC8vIEFkZHMgYSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIHNlbGVjdGVkT3B0aW9ucyBhcnJheVxuXHRtdWx0aXNlbGVjdGFibGVBZGRTZWxlY3RlZE9wdGlvbjogZnVuY3Rpb24ob3B0aW9uKSB7XG5cdFx0Ly8gQXBwZW5kIHRoZSBzaW5nbGUgb3B0aW9uXG5cdFx0dGhpcy5hcHBlbmRPcHRpb25zKFtvcHRpb25dKTtcblx0fSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN1aURyb3Bkb3duTXVsdGlzZWxlY3RhYmxlOyIsInZhciAkID0gd2luZG93LmpRdWVyeTtcbnZhciBfID0gd2luZG93Ll87XG5cbmZ1bmN0aW9uIFN1aURyb3Bkb3duU2VhcmNoYWJsZSgpIHt9XG5cbiQuZXh0ZW5kKFN1aURyb3Bkb3duU2VhcmNoYWJsZS5wcm90b3R5cGUsIHtcblx0Ly8gQ2VydGFpbiBtZXRob2RzIHNob3VsZCBiZSBuYW1lc3BhY2VkIHdpdGhpbiBhIGtleSB3aXRoIHRoZSBzYW1lIG5hbWVcblx0Ly8gYXMgdGhlIGV4dGVuc2lvbi4gVGhpcyBhbGxvd3MgZm9yIHVzIHRvIGhhdmUgZ2VuZXJpYyBmdW5jdGlvbnMgaW4gaGVyZVxuXHQvLyBsaWtlIGluaXQgYW5kIGJpbmQgd2l0aG91dCB3b3JyeWluZyBhYm91dCBvdmVyd3JpdGluZyBleGlzdGluZyBmdW5jdGlvbmFsaXR5LlxuXHQvLyBJZiB3ZSB3YW50IHRvIG92ZXJ3cml0ZSwgdGhpcyBhbGxvd3MgZm9yIHRoYXQgdG9vIGJ5IHBsYWNpbmcgdGhlIGZ1bmN0aW9uYWxpdHlcblx0Ly8gb3V0c2lkZSBvZiB0aGUgbWFpbiBzZWFyY2hhYmxlIG9iamVjdFxuXG5cdC8vIFRoaXMgYWxzbyBtZWFucyB0aGF0IGl0IHdpbGwgYmUgcmVxdWlyZWQgdG8gYmluZCB0aGUgc2NvcGUgb2YgdGhlIGluc3RhbmNlIHRvIGVhY2hcblx0Ly8gbWV0aG9kIGNhbGxlZCB3aXRoaW4gYW4gZXh0ZW5zaW9uXG5cdHNlYXJjaGFibGU6IHtcblx0XHQvLyBTZXR1cCBpbml0aWFsIGV4dGVuc2lvbiB2YXJzLiBUaGlzIGlzIGNhbGxlZCBpbiB0aGUgbWFpbiBTdWlEcm9wZG93biBmdW5jdGlvblxuXHRcdC8vIGluIHRoZSBpbml0RXh0ZW5zaW9ucyBtZXRob2Rcblx0XHRleHRlbnNpb25Jbml0OiBmdW5jdGlvbihvcHRzKSB7XG5cdFx0XHQvLyBJbml0aWFsaXplIGFuIGVtcHR5IHNlYXJjaCBzdHJpbmdcblx0XHRcdHRoaXMuc2VhcmNoU3RyaW5nID0gJyc7XG5cdFx0fSxcblxuXHRcdC8vIEJpbmQgb3IgY2FsbCBhbnkgbWV0aG9kcyB0aGF0IHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgZHJvcGRvd24gaXRzZWxmXG5cdFx0Ly8gaXMgaW5zdGFudGlhdGVkIGFuZCBpbiB0aGUgRE9NXG5cdFx0ZXh0ZW5zaW9uQmluZDogZnVuY3Rpb24oKSB7XG5cdFx0XHQvLyBDYWNoZSB0aGUgc2VhcmNoIGlucHV0IGVsZW1lbnRcblx0XHRcdHRoaXMuJHNlYXJjaElucHV0ID0gdGhpcy4kZWwuZmluZCgnW3N1aS1kcm9wZG93bi1zZWFyY2gtaW5wdXRdJyk7XG5cblx0XHRcdC8vIEJpbmQgdGhlIGtleXVwIGV2ZW50IGZvciBsaXN0ZW5pbmcgdG8gaW5wdXRcblx0XHRcdHRoaXMuc2VhcmNoYWJsZUJpbmRTZWFyY2goKTtcblx0XHR9LFxuXHR9LFxuXG5cdC8vIEJpbmRzIHRoZSBzZWFyY2ggZnVuY3Rpb25hbGl0eSB0byB0aGUgaW5wdXRcblx0c2VhcmNoYWJsZUJpbmRTZWFyY2g6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBfdGhpcyA9IHRoaXM7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQub24oJ2tleXVwJywgXy5kZWJvdW5jZShfdGhpcy5zZWFyY2hhYmxlU2VhcmNoT3B0aW9ucy5iaW5kKF90aGlzKSwgNTAwKSk7XG5cblx0XHRpZihfdGhpcy5kaXNhYmxlQnViYmxpbmcpIHtcblx0XHRcdHRoaXMuJHNlYXJjaElucHV0Lm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHQvLyBVbmJpbmRzIHRoZSBzZWFyY2ggZnVuY3Rpb25hbGl0eVxuXHRzZWFyY2hhYmxlVW5iaW5kU2VhcmNoOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5vZmYoKTtcblx0fSxcblxuXHQvLyBBY3R1YWxseSBzZWFyY2hlcyB0aGUgZHJvcGRvd24gYW5kIHNob3dzIHJlc3VsdHMgYXMgbmVlZGVkXG5cdHNlYXJjaGFibGVTZWFyY2hPcHRpb25zOiBmdW5jdGlvbihmb3JjZSkge1xuXHRcdHZhciBjdXJyZW50X3ZhbHVlID0gdGhpcy4kc2VhcmNoSW5wdXQudmFsKCk7XG5cdFx0Zm9yY2UgPSAodHlwZW9mIGZvcmNlICE9PSAndW5kZWZpbmVkJykgPyBmb3JjZSA6IGZhbHNlO1xuXG5cdFx0aWYoY3VycmVudF92YWx1ZSAhPT0gdGhpcy5zZWFyY2hTdHJpbmcgfHwgZm9yY2UpIHtcblx0XHRcdHRoaXMuc2VhcmNoU3RyaW5nID0gY3VycmVudF92YWx1ZTtcblxuXHRcdFx0Ly8gSWYgd2UgaGF2ZSBhbiBhamF4IGZldGNoIG9jY3VyaW5nLCBzZW5kIHRoaXMgc2VhcmNoIHF1ZXJ5XG5cdFx0XHQvLyB0byB0aGUgc2VydmVyXG5cdFx0XHRpZih0aGlzLmZldGNoVXJsKSB7XG5cdFx0XHRcdC8vIFJlc2V0IHRoZSBwYWdlIHRvIDEgc2luY2Ugd2UncmUgY2hhbmdpbmcgdGhlIGNvbmRpdGlvbnNcblx0XHRcdFx0dGhpcy5wYWdlID0gMTtcblx0XHRcdFx0dGhpcy5yZXN1bHRzTGVmdCA9IHRydWU7XG5cblx0XHRcdFx0Ly8gRmV0Y2ggbmV3IHJlc3VsdHMgd2l0aCB0aGUgcmVzZXQgZmxhZ1xuXHRcdFx0XHR0aGlzLmFqYXhhYmxlRmV0Y2hPcHRpb25zKHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBub3QsIGp1c3QgZmlsdGVyIHRocm91Z2ggdGhlIGNhY2hlZCBvcHRpb25zIGFuZCBvbmx5XG5cdFx0XHQvLyBkaXNwbGF5IHRob3NlIHRoYXQgbWF0Y2ggdGhlIHRleHQgZmlsdGVyXG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0aWYodGhpcy5zZWFyY2hTdHJpbmcgIT09ICcnKSB7XG5cdFx0XHRcdFx0dmFyIF90aGlzID0gdGhpcztcblx0XHRcdFx0XHQvLyBMb29wIHRocm91Z2ggdGhlIGNhY2hlZE9wdGlvbnMgYW5kIGZpbmQgcmVzdWx0cyB0aGF0IG1hdGNoXG5cdFx0XHRcdFx0Ly8gdGhlIGZpbHRlclxuXHRcdFx0XHRcdHZhciBvcHRpb25zID0gXy5maWx0ZXIodGhpcy5jYWNoZWRPcHRpb25zLCBmdW5jdGlvbihvcHRpb24pIHtcblx0XHRcdFx0XHRcdGlmKG9wdGlvbi50ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihfdGhpcy5zZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKSkgPiAtMSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdC8vIEVtcHR5IHRoZSBkcm9wZG93blxuXHRcdFx0XHRcdHRoaXMuZW1wdHlPcHRpb25zKCk7XG5cblx0XHRcdFx0XHQvLyBBcHBlbmQgdGhlIG9wdGlvbnMgdGhhdCBtZWV0IHRoZSBwYXJhbWV0ZXJzXG5cdFx0XHRcdFx0dGhpcy5hcHBlbmRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIEVtcHR5IHRoZSBkcm9wZG93blxuXHRcdFx0XHRcdHRoaXMuZW1wdHlPcHRpb25zKCk7XG5cblx0XHRcdFx0XHQvLyBBcHBlbmQgdGhlIG9wdGlvbnMgdGhhdCBtZWV0IHRoZSBwYXJhbWV0ZXJzXG5cdFx0XHRcdFx0dGhpcy5hcHBlbmRPcHRpb25zKHRoaXMuY2FjaGVkT3B0aW9ucyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gQ2xlYXJzIHRoZSBzZWFyY2ggaW5wdXQgYW5kIHJlLXRyaWdnZXJzIHRoZSBzZWFyY2ggbG9va3VwXG5cdGNsZWFyU2VhcmNoOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnNlYXJjaFN0cmluZyA9ICcnO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnZhbCgnJyk7XG5cdFx0dGhpcy5zZWFyY2hhYmxlU2VhcmNoT3B0aW9ucyh0cnVlKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3VpRHJvcGRvd25TZWFyY2hhYmxlOyIsIi8vIGhic2Z5IGNvbXBpbGVkIEhhbmRsZWJhcnMgdGVtcGxhdGVcbnZhciBIYW5kbGViYXJzQ29tcGlsZXIgPSByZXF1aXJlKCdoYnNmeS9ydW50aW1lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEhhbmRsZWJhcnNDb21waWxlci50ZW1wbGF0ZShmdW5jdGlvbiAoSGFuZGxlYmFycyxkZXB0aDAsaGVscGVycyxwYXJ0aWFscyxkYXRhKSB7XG4gIHRoaXMuY29tcGlsZXJJbmZvID0gWzQsJz49IDEuMC4wJ107XG5oZWxwZXJzID0gdGhpcy5tZXJnZShoZWxwZXJzLCBIYW5kbGViYXJzLmhlbHBlcnMpOyBkYXRhID0gZGF0YSB8fCB7fTtcbiAgdmFyIHN0YWNrMSwgc2VsZj10aGlzLCBmdW5jdGlvblR5cGU9XCJmdW5jdGlvblwiLCBlc2NhcGVFeHByZXNzaW9uPXRoaXMuZXNjYXBlRXhwcmVzc2lvbjtcblxuZnVuY3Rpb24gcHJvZ3JhbTEoZGVwdGgwLGRhdGEpIHtcbiAgXG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazEsIGhlbHBlcjtcbiAgYnVmZmVyICs9IFwiXFxuPGRpdiBzdWktZHJvcGRvd24tb3B0aW9uPVxcXCJcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAuaXNfY3VycmVudCksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSgyLCBwcm9ncmFtMiwgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCJcXFwiIGRhdGEtdmFsdWU9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy52YWx1ZSkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC52YWx1ZSk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiPlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy50ZXh0KSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnRleHQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCI8L2Rpdj5cXG5cIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuZnVuY3Rpb24gcHJvZ3JhbTIoZGVwdGgwLGRhdGEpIHtcbiAgXG4gIFxuICByZXR1cm4gXCJpcy1hY3RpdmVcIjtcbiAgfVxuXG4gIHN0YWNrMSA9IGhlbHBlcnMuZWFjaC5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAub3B0aW9ucyksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSgxLCBwcm9ncmFtMSwgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgcmV0dXJuIHN0YWNrMTsgfVxuICBlbHNlIHsgcmV0dXJuICcnOyB9XG4gIH0pO1xuIiwiLy8gUmVxdWlyZSBkZXBlbmRlbmNpZXNcblxudmFyICQgPSByZXF1aXJlKCdqcXVlcnknKSxcblx0XyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcblxucmVxdWlyZSgnLi4vLi4vLi4vaGVscGVycy9hdHRyaWJ1dGVIZWxwZXJzJyk7XG5cbnZhciBTdWlJbnB1dEJhc2VJbnRlcmZhY2UgPSByZXF1aXJlKCcuLi9zdWktaW5wdXQtYmFzZS1pbnRlcmZhY2UnKTtcblxudmFyIHRlbXBsYXRlID0gcmVxdWlyZSgnLi90ZW1wbGF0ZS5oYnMnKSxcblx0Y21zVGVtcGxhdGUgPSByZXF1aXJlKCcuL2Ntcy10ZW1wbGF0ZS5oYnMnKSxcblx0b3B0aW9uVGVtcGxhdGUgPSByZXF1aXJlKCcuL29wdGlvbi10ZW1wbGF0ZS5oYnMnKTtcblxuLy8gRGVmaW5lIGFueSBwb3NzaWJsZSBleHRlbnNpb25zIGhlcmVcbnZhciBfZXh0ZW5zaW9ucyA9IHtcblx0c2VhcmNoYWJsZTogcmVxdWlyZSgnLi9leHRlbnNpb25zL3N1aS5kcm9wZG93bi5zZWFyY2hhYmxlLmpzJyksXG5cdGFqYXhhYmxlOiByZXF1aXJlKCcuL2V4dGVuc2lvbnMvc3VpLmRyb3Bkb3duLmFqYXhhYmxlLmpzJyksXG5cdG11bHRpc2VsZWN0YWJsZTogcmVxdWlyZSgnLi9leHRlbnNpb25zL3N1aS5kcm9wZG93bi5tdWx0aXNlbGVjdGFibGUuanMnKSxcblx0aGFzRm9vdGVyOiByZXF1aXJlKCcuL2V4dGVuc2lvbnMvc3VpLmRyb3Bkb3duLmhhcy1mb290ZXIuanMnKVxufTtcblxuLy8gS2VlcCBhcnJheSBvZiBpbnN0YW5jZXMgdG8gY2hlY2tcbi8vIGFnYWluc3QgZHVwbGljYXRlcyBhbmQgcGVyZm9ybSB1dGlsaXRpZXNcbi8vIHN1Y2ggYXMgY2xvc2luZyBvdGhlcnMgd2hlbiBvbmUgaXMgb3BlbmVkXG52YXIgc3VpRHJvcGRvd25zID0gW107XG5cbi8vIGhlbHBlciBmdW5jdGlvbnNcbmZ1bmN0aW9uIGNsb3NlQWxsRHJvcGRvd25zKCkge1xuXHRzdWlEcm9wZG93bnMuZm9yRWFjaChmdW5jdGlvbihkcm9wZG93bikge1xuXHRcdGRyb3Bkb3duLmNsb3NlRHJvcGRvd24oKTtcblx0fSk7XG59XG5cbi8vIERyb3Bkb3duXG5mdW5jdGlvbiBTdWlEcm9wZG93bihvcHRzLCAkZG9jLCAkd2luKSB7XG5cblx0Ly8gQ2FsbCBwYXJlbnQgZnVuY3Rpb25cblx0U3VpSW5wdXRCYXNlSW50ZXJmYWNlLmNhbGwodGhpcywgb3B0cyk7XG5cblx0dGhpcy4kZG9jID0gJGRvYztcblx0dGhpcy4kd2luID0gJHdpbjtcblx0dGhpcy4kYm9keSA9ICQoJ2JvZHknKTtcblx0dGhpcy5vcHRzID0gb3B0cztcblxuXHR0aGlzLnBsYWNlaG9sZGVyVGV4dCA9IG9wdHMucGxhY2Vob2xkZXJUZXh0ID8gb3B0cy5wbGFjZWhvbGRlclRleHQgOiAnJztcblx0dGhpcy5vcHRpb25zTGlzdFBvc2l0aW9uID0gb3B0cy5wb3NpdGlvbiB8fCAnYm90dG9tJztcblxuXHQvLyBHZXQgdGhlIG9ubHkgb3B0aW9ucyB0ZW1wbGF0ZS5cblx0dGhpcy5vcHRpb25UZW1wbGF0ZSA9IG9wdHMub3B0aW9uVGVtcGxhdGUgPyBvcHRzLm9wdGlvblRlbXBsYXRlIDogb3B0aW9uVGVtcGxhdGU7XG5cblx0Ly8gQ2FjaGUgdGhlIGluaXRpYWwgb3B0aW9ucyBpbiBjYXNlIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGRyb3Bkb3duXG5cdHRoaXMuY2FjaGVkT3B0aW9ucyA9IF8uY2xvbmUodGhpcy5kYXRhLm9wdGlvbnMpO1xuXG5cdC8vIGNsYXNzIGFuZCBtYXJrdXAgZm9yIHRoZSBzdWkgdHJpZ2dlclxuXHR0aGlzLmljb25DbGFzcyA9IG9wdHMuaWNvbkNsYXNzID8gb3B0cy5pY29uQ2xhc3MgOiBudWxsO1xuXG5cdC8vIHRyYWNraW5nXG5cdHRoaXMuaXNPcGVuID0gZmFsc2U7XG5cblx0Ly8gQ2hlY2sgaWYgYSBzZXQgbWF4IGhlaWdodCBpcyBiZWluZyBwYXNzZWRcblx0dGhpcy5tYXhIZWlnaHQgPSBvcHRzLm1heEhlaWdodCA/IHBhcnNlSW50KG9wdHMubWF4SGVpZ2h0KSA6IGZhbHNlO1xuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSB3YW50IGV2ZW50cyB0byBidWJibGUgdXAgKHN0b3BQcm9wYWdhdGlvbilcblx0dGhpcy5kaXNhYmxlQnViYmxpbmcgPSBvcHRzLmRpc2FibGVCdWJibGluZyA/IG9wdHMuZGlzYWJsZUJ1YmJsaW5nIDogZmFsc2U7XG5cblx0Ly8gY3VycmVudCBvcHRpb24gY29taW5nIGZyb20gcGFyYW1ldGVyc1xuXHRpZiAodHlwZW9mIG9wdHMuY3VycmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0cy5jdXJyZW50ICE9PSBudWxsKSB7XG5cblx0XHR0aGlzLmN1cnJlbnRWYWx1ZSA9IHR5cGVvZiBvcHRzLmN1cnJlbnQgPT09ICdvYmplY3QnID8gb3B0cy5jdXJyZW50LnZhbHVlIDogb3B0cy5jdXJyZW50O1xuXHR9XG5cblx0Ly8gZGVmYXVsdCB0byBmaXJzdCBvcHRpb25cblx0ZWxzZSBpZiAoIG9wdHMub3B0aW9ucyAmJiBvcHRzLm9wdGlvbnMubGVuZ3RoICkge1xuXHRcdHRoaXMuY3VycmVudFZhbHVlID0gb3B0cy5vcHRpb25zWzBdLnZhbHVlO1xuXHR9XG5cblx0ZWxzZSB7XG5cdFx0dGhpcy5jdXJyZW50VmFsdWUgPSBudWxsO1xuXHR9XG5cblx0Ly8gc3Rhc2ggaW4gc3VpRHJvcGRvd25zIG1hc3RlciBhcnJheVxuXHRzdWlEcm9wZG93bnMucHVzaCh0aGlzKTtcblxufVxuXG4kLmV4dGVuZChTdWlEcm9wZG93bi5wcm90b3R5cGUsIFN1aUlucHV0QmFzZUludGVyZmFjZS5wcm90b3R5cGUsIHtcblxuXHQvLy8vXG5cdC8vLyBQdWJsaWMgTWV0aG9kc1xuXHQvL1xuXG5cdC8vIFJlcGxhY2VzIHBsYWNlaG9sZGVyIG1hcmt1cCB3aXRoIHRlbXBsYXRlXG5cdC8vIGFuZCBzZXRzIFN1aURyb3Bkb3duIGRvbSBlbGVtZW50IHByb3BlcnRpZXNcblx0Ly8gQWRkcyBsaXN0ZW5lcnMuICBDYWxsZWQgd2hlbiBpbnN0YW50aWF0ZWQuXG5cdGluaXQ6IGZ1bmN0aW9uKCkge1xuXG5cdFx0U3VpSW5wdXRCYXNlSW50ZXJmYWNlLnByb3RvdHlwZS5pbml0LmNhbGwodGhpcyk7XG5cdFx0Ly8gcGFyZW50IGNsYXNzIHByb3ZpZGVzIHRoaXMuJGVsIGZyb20gdGVtcGxhdGVcblxuXHRcdC8vIGNhY2hlIHNjcm9sbFBhcmVudFxuXHRcdHRoaXMuJHNjcm9sbFBhcmVudCA9IHRoaXMuJGVsLnNjcm9sbFBhcmVudCgpO1xuXG5cdFx0Ly8gc2V0IG5ldyBwcm9wZXJ0aWVzIGZyb20gdGVtcGxhdGVcblx0XHR0aGlzLiR0cmlnZ2VyID0gdGhpcy4kZWwuZmluZCgnW3N1aS1kcm9wZG93bi10cmlnZ2VyXScpO1xuXHRcdHRoaXMuJGlucHV0ID0gdGhpcy4kZWwuZmluZCgnW3N1aS1kcm9wZG93bi1pbnB1dF0nKTtcblx0XHR0aGlzLiRvcHRpb25zTGlzdCA9IHRoaXMuJGVsLmZpbmQoJ1tzdWktZHJvcGRvd24tb3B0aW9uc10nKTtcblx0XHR0aGlzLiRvcHRpb25zID0gdGhpcy4kZWwuZmluZCgnW3N1aS1kcm9wZG93bi1vcHRpb25dJyk7XG5cblx0XHQvLyBTZXQgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGRyb3Bkb3duXG5cdFx0dGhpcy5zZXRWYWx1ZSh0aGlzLmN1cnJlbnRWYWx1ZSk7XG5cblx0XHQvLyBhZGQgbGlzdGVuZXJzXG5cdFx0dGhpcy4kZWwub24oJ2NsaWNrJywgJ1tzdWktZHJvcGRvd24tdHJpZ2dlcl0nLCB0aGlzLnRvZ2dsZURyb3Bkb3duLmJpbmQodGhpcykpO1xuXHRcdHRoaXMuJG9wdGlvbnNMaXN0Lm9uKCdjbGljaycsICdbc3VpLWRyb3Bkb3duLW9wdGlvbl0nLCB0aGlzLnVwZGF0ZVNlbGVjdGlvbi5iaW5kKHRoaXMpKTtcblx0fSxcblxuXHR0b2dnbGVEcm9wZG93bjogZnVuY3Rpb24oZSkge1xuXHRcdGlmIChlKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdGlmKHRoaXMuaXNPcGVuKSB7XG5cdFx0XHR0aGlzLmNsb3NlRHJvcGRvd24oKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vcGVuRHJvcGRvd24oKTtcblx0XHR9XG5cdH0sXG5cblx0b3BlbkRyb3Bkb3duOiBmdW5jdGlvbigpIHtcblx0XHQvLyBwcmV2ZW50IG9wZW5pbmcgaWYgYWxyZWFkeSBvcGVuZWQgb3Igb3BlbmluZyBpcyBkaXNhYmxlZFxuXHRcdGlmICggdGhpcy5pc09wZW4gfHwgdGhpcy5pc1JlYWRPbmx5ICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGNsb3NlIGFsbCBkcm9wZG93bnNcblx0XHRjbG9zZUFsbERyb3Bkb3ducygpO1xuXG5cdFx0Ly8gZGlzYWJsZSBzY3JvbGxpbmcgb24gcGFyZW50XG5cdFx0dGhpcy5kaXNhYmxlUGFyZW50U2Nyb2xsaW5nKCk7XG5cblx0XHQvLyBvcGVuIHRoaXMgaW5zdGFuY2Vcblx0XHR0aGlzLmlzT3BlbiA9IHRydWU7XG5cdFx0dGhpcy4kZWwuYWRkQXR0clZhbCgnc3VpLWRyb3Bkb3duJywgJ2lzLW9wZW4nKTtcblxuXHRcdC8vIHVwZGF0ZSBvcHRpb25zTGlzdCBjc3MgdG8gZGlzcGxheVxuXHRcdC8vIGluIGNvcnJlY3QgcG9zaXRpb25cblx0XHR0aGlzLmRpc3BsYXlPcHRpb25zTGlzdCgpO1xuXG5cdFx0Ly8gTGlzdGVuIHRvIGNsaWNrcyBvbiBkb2N1bWVudCBhbmQgY2xvc2Vcblx0XHQvLyBpZiBpdCdzIE5PVCBvbiBvbmUgb2Ygb3VyIGRyb3Bkb3duIGVsZW1lbnRzXG5cdFx0dGhpcy4kZG9jLm9uKCdjbGljaycsIHRoaXMuaGFuZGxlRG9jdW1lbnRDbGlja3MuYmluZCh0aGlzKSk7XG5cdH0sXG5cblx0Y2xvc2VEcm9wZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCF0aGlzLmlzT3Blbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuaXNPcGVuID0gZmFsc2U7XG5cdFx0dGhpcy4kZWwucmVtb3ZlQXR0clZhbCgnc3VpLWRyb3Bkb3duJywgJ2lzLW9wZW4nKTtcblxuXHRcdC8vIGhpZGUgbWVudVxuXHRcdHRoaXMuJG9wdGlvbnNMaXN0LmNzcyh7ZGlzcGxheTogJ25vbmUnfSkucmVtb3ZlQXR0clZhbCgnc3VpLWRyb3Bkb3duLW9wdGlvbnMnLCAnaXMtb3BlbicpO1xuXG5cdFx0Ly8gZW5hYmxlIHNjcm9sbGluZyBvbiBwYXJlbnRcblx0XHR0aGlzLmVuYWJsZVBhcmVudFNjcm9sbGluZygpO1xuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBkb2N1bWVudCBjbGljayBsaXN0ZW5lciBmcm9tXG5cdFx0Ly8gb3BlbkRyb3Bkb3duXG5cdFx0dGhpcy4kZG9jLm9mZignY2xpY2snLCB0aGlzLmhhbmRsZURvY3VtZW50Q2xpY2tzKTtcblx0fSxcblxuXHRkaXNwbGF5T3B0aW9uc0xpc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjb29yZHMgPSB0aGlzLmdldE9wdGlvbkxpc3RDb29yZHMoKTtcblx0XHR2YXIgb3B0aW9uc0xpc3RIZWlnaHQgPSB0aGlzLiRvcHRpb25zTGlzdC5oZWlnaHQoKTtcblxuXHRcdC8vIEdldCBoZWlnaHQgb2YgdGhlIG9wdGlvbnMgbGlzdCBpdHNlbGYuIElmIGl0J3MgZ3JlYXRlclxuXHRcdC8vIHRoYW4gdGhlIHNldCBtYXggaGVpZ2h0IHRoZW4gd2Ugb25seSB3YW50IHRvIGNvbnNpZGVyXG5cdFx0Ly8gdGhlIG1heCBoZWlnaHQuXG5cdFx0aWYgKHRoaXMubWF4SGVpZ2h0KSB7XG5cdFx0XHRvcHRpb25zTGlzdEhlaWdodCA9IChvcHRpb25zTGlzdEhlaWdodCA+IHRoaXMubWF4SGVpZ2h0KSA/IHRoaXMubWF4SGVpZ2h0IDogb3B0aW9uc0xpc3RIZWlnaHQ7XG5cdFx0fVxuXG5cdFx0Ly8gZ2V0IG1heCBoZWlnaHQgYmFzZWQgb24gcGFyZW50IHBvc2l0aW9uXG5cdFx0dmFyIHdpbkhlaWdodCA9IHRoaXMuJHdpbi5oZWlnaHQoKSxcblx0XHRcdGhpdHNCb3R0b20gPSB3aW5IZWlnaHQgLSBjb29yZHMuYm90dG9tIC0gdGhpcy4kdHJpZ2dlci5oZWlnaHQoKSA8IG9wdGlvbnNMaXN0SGVpZ2h0O1xuXG5cdFx0Ly8gdGhpcyBsb2dpYyBpcyBhIGxpdHRsZSBsb25nIHRvIHB1dCBpbmxpbmVcblx0XHR2YXIgYm90dG9tVmFsdWUgPSBoaXRzQm90dG9tID8gMCA6ICh0aGlzLm9wdGlvbnNMaXN0UG9zaXRpb24gPT09ICd0b3AnID8gY29vcmRzLmJvdHRvbSA6ICdhdXRvJyk7XG5cblx0XHQvLyBwb3NpdGlvbiBtZW51IGFuZCBtb3ZlIHRvIGp1c3QgaW5zaWRlIGJvZHkgdGFnXG5cdFx0Ly8gZm9yIG5vIGNvbmZsaWN0cyBpbiBmaXhlZCBwb3NpdGlvblxuXHRcdHRoaXMuJG9wdGlvbnNMaXN0LmRldGFjaCgpLmNzcyh7XG5cdFx0XHR0b3A6IHRoaXMub3B0aW9uc0xpc3RQb3NpdGlvbiA9PT0gJ3RvcCcgfHwgaGl0c0JvdHRvbSA/ICdhdXRvJyA6IGNvb3Jkcy50b3AsXG5cdFx0XHRyaWdodDogdGhpcy5vcHRpb25zTGlzdFBvc2l0aW9uID09PSAncmlnaHQnID8gY29vcmRzLnJpZ2h0IDogJ2F1dG8nLFxuXHRcdFx0bGVmdDogdGhpcy5vcHRpb25zTGlzdFBvc2l0aW9uID09PSAncmlnaHQnID8gJ2F1dG8nIDogY29vcmRzLmxlZnQsXG5cdFx0XHRib3R0b206IGJvdHRvbVZhbHVlLFxuXHRcdFx0ZGlzcGxheTogJ2Jsb2NrJyxcblx0XHRcdHdpZHRoOiB0aGlzLiRlbC53aWR0aCgpLFxuXHRcdFx0bWF4SGVpZ2h0OiB0aGlzLm1heEhlaWdodCA/IHRoaXMubWF4SGVpZ2h0IDogd2luSGVpZ2h0XG5cdFx0fSkuYXBwZW5kVG8oJ2JvZHknKS5hZGRBdHRyVmFsKCdzdWktZHJvcGRvd24tb3B0aW9ucycsICdpcy1vcGVuJyk7XG5cdH0sXG5cblx0Z2V0T3B0aW9uTGlzdENvb3JkczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNjcm9sbFkgPSB0aGlzLiR3aW4uc2Nyb2xsVG9wKCksXG5cdFx0XHR0b3BPZmZzZXQgPSB0aGlzLiR0cmlnZ2VyLm9mZnNldCgpLnRvcCxcblx0XHRcdGxlZnRPZmZzZXQgPSB0aGlzLiR0cmlnZ2VyLm9mZnNldCgpLmxlZnQ7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiB0b3BPZmZzZXQgKyB0aGlzLiR0cmlnZ2VyLm91dGVySGVpZ2h0KCkgLSBzY3JvbGxZLFxuXHRcdFx0cmlnaHQ6IHRoaXMuJHdpbi53aWR0aCgpIC0gbGVmdE9mZnNldCAtIHRoaXMuJHRyaWdnZXIud2lkdGgoKSxcblx0XHRcdGxlZnQ6IGxlZnRPZmZzZXQsXG5cdFx0XHRib3R0b206IHRvcE9mZnNldCAtIHNjcm9sbFlcblx0XHR9O1xuXHR9LFxuXG5cdGhhbmRsZURvY3VtZW50Q2xpY2tzOiBmdW5jdGlvbihlKSB7XG5cdFx0dmFyIF90aGlzID0gdGhpcztcblxuXHRcdGlmICgkKGUudGFyZ2V0KS5wYXJlbnRzKCdbc3VpLWRyb3Bkb3duLW9wdGlvbnNdJykubGVuZ3RoID09PSAwICYmICQoZS50YXJnZXQpICE9PSB0aGlzLiR0cmlnZ2VyKSB7XG5cdFx0XHRfdGhpcy5jbG9zZURyb3Bkb3duKCk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc2FibGVQYXJlbnRTY3JvbGxpbmc6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJGJvZHkuY3NzKCdvdmVyZmxvdycsICdoaWRkZW4nKTtcblx0XHR0aGlzLiRzY3JvbGxQYXJlbnQuY3NzKCdvdmVyZmxvdycsICdoaWRkZW4nKTtcblx0fSxcblxuXHRlbmFibGVQYXJlbnRTY3JvbGxpbmc6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJGJvZHkuY3NzKCdvdmVyZmxvdycsICcnKTtcblx0XHR0aGlzLiRzY3JvbGxQYXJlbnQuY3NzKCdvdmVyZmxvdycsICcnKTtcblx0fSxcblxuXHQvKipcblx0ICogZXhlY3V0ZWQgd2hlbiBzZWxlY3RpbmcgYSB2YWx1ZSBmcm9tIHRoZSBkcm9wZG93biBsaXN0XG5cdCAqIHNldHMgdGhlIHZhbHVlIHByb2dyYW1hdGljYWxseSBhbmQgY2xvc2VzIHRoZSBkcm9wZG93blxuXHQgKi9cblx0dXBkYXRlU2VsZWN0aW9uOiBmdW5jdGlvbihlKSB7XG5cdFx0Ly8gY2hlY2sgaWYgd2Ugd2FudCB0byBwcmV2ZW50IGV2ZW50IGJ1YmJsaW5nXG5cdFx0aWYodGhpcy5kaXNhYmxlQnViYmxpbmcpIHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0Ly8gdXBkYXRlIHZhbHVlXG5cdFx0dGhpcy5zZXRWYWx1ZSgkKGUuY3VycmVudFRhcmdldCkuZGF0YSgndmFsdWUnKSk7XG5cblx0XHQvLyBjbG9zZSBkcm9wZG93blxuXHRcdHRoaXMuY2xvc2VEcm9wZG93bigpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBleHRlbmRpbmcgZGVmYXVsdCBkZXN0cm95IHRvIGFsc28gbWFrZSBzdXJlIG9wdGlvbnMgYXBwZW5kZWQgdG8gdGhlIGJvZHkgYXJlIHJlbW92ZWRcblx0ICovXG5cdGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuXHRcdFN1aUlucHV0QmFzZUludGVyZmFjZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpO1xuXHRcdHRoaXMuJG9wdGlvbnNMaXN0ICYmIHRoaXMuJG9wdGlvbnNMaXN0LnJlbW92ZSgpO1xuXHR9LFxuXG5cdGdldFNlbGVjdGVkUG9zaXRpb246IGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0aWYgKCF0aGlzLiRvcHRpb25zKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHZhciAkY3VycmVudE9wdGlvbiA9IHRoaXMuJG9wdGlvbnMuZmlsdGVyKCdbZGF0YS12YWx1ZT1cIicgKyB2YWx1ZSArICdcIl0nKTtcblxuXHRcdHJldHVybiBfLmluZGV4T2YodGhpcy4kb3B0aW9ucywgJGN1cnJlbnRPcHRpb25bMF0pO1xuXHR9LFxuXG5cdGdldEN1cnJlbnRPcHRpb25UZXh0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgJGN1cnJlbnRPcHRpb24gPSB0aGlzLiRvcHRpb25zLmZpbHRlcignW2RhdGEtdmFsdWU9XCInICsgdGhpcy5nZXRWYWx1ZSgpICsgJ1wiXScpO1xuXG5cdFx0cmV0dXJuICgkY3VycmVudE9wdGlvbiAmJiAkY3VycmVudE9wdGlvbi5sZW5ndGgpID8gJGN1cnJlbnRPcHRpb24udGV4dCgpIDogJyc7XG5cdH0sXG5cblx0Z2V0VmFsdWU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZSAhPT0gJ3BsYWNlaG9sZGVyJyA/IHRoaXMuY3VycmVudFZhbHVlIDogbnVsbDtcblx0fSxcblxuXHQvKipcblx0ICogZXh0ZW5kcyBmdW5jdGlvbmFsaXR5IG9mIFNVSSBJbnB1dCBCYXNlIEludGVyZmFjZSwgdG8gY2hlY2sgZm9yIHRoZSB2YWx1ZSB0byBiZSB2YWxpZCBhbW9uZyB0aGUgbGlzdCBvZiBvcHRpb25zXG5cdCAqIGlmIHZhbHVlIGlzIGludmFsaWQsIHRoZSB2YWx1ZSBjaGFuZ2Ugd2lsbCBub3QgYmUgYWxsb3dlZFxuXHQgKi9cblx0c2V0VmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBwYXJhbXMpIHtcblx0XHR2YWx1ZSA9IHZhbHVlID09ICdwbGFjZWhvbGRlcicgPyBudWxsIDogdmFsdWU7XG5cblx0XHRpZiAoIXRoaXMuJG9wdGlvbnMpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyB2YWxpZGF0ZSB2YWx1ZSBhbmQgcmVwbGFjZSBpdCBmb3IgJ3BsYWNlaG9sZGVyJyBpZiBuZWNlc3Nhcnlcblx0XHR2YXIgbmV3VmFsdWUgPSB0aGlzLl92YWxpZGF0ZVZhbHVlKCB2YWx1ZSApO1xuXG5cdFx0Ly8gaWYgdGhlIHZhbGlkYXRpb24gcmV0dXJucyBmYWxzZSwgbm8gb3B0aW9uIGV4aXN0cyB3aXRoIHRoYXQgdmFsdWUuIFdlIGRvbid0IGFsbG93IHRoZSBjaGFuZ2Vcblx0XHRpZiAoIG5ld1ZhbHVlID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRTdWlJbnB1dEJhc2VJbnRlcmZhY2UucHJvdG90eXBlLnNldFZhbHVlLmNhbGwodGhpcywgbmV3VmFsdWUsIHBhcmFtcyk7XG5cdH0sXG5cblx0ZW1wdHlPcHRpb25zOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiRvcHRpb25zTGlzdC5maW5kKCdbc3VpLWRyb3Bkb3duLW9wdGlvbl0nKS5yZW1vdmUoKTtcblx0fSxcblxuXHQvLyBBcHBlbmRzIG5ldyBvcHRpb25zIHRvIHRoZSBleGlzdGluZyBsaXN0XG5cdC8vIG9mIGRyb3Bkb3duIG9wdGlvbnNcblx0YXBwZW5kT3B0aW9uczogZnVuY3Rpb24ob3B0aW9ucykge1xuXHRcdHZhciBodG1sID0gdGhpcy5vcHRpb25UZW1wbGF0ZSh7IG9wdGlvbnM6IG9wdGlvbnMgfSk7XG5cdFx0dGhpcy4kb3B0aW9uc0xpc3QuYXBwZW5kKGh0bWwpO1xuXG5cdFx0Ly8gUmVzZXQgdGhpcy4kb3B0aW9ucyBjYWNoZSB0byBpbmNsdWRlIG5ldyBvcHRpb25zXG5cdFx0dGhpcy4kb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnNMaXN0LmZpbmQoJ1tzdWktZHJvcGRvd24tb3B0aW9uXScpO1xuXHR9LFxuXG5cdC8vLy9cblx0Ly8vIFByaXZhdGUgJiBBYnN0cmFjdCBNZXRob2RzXG5cdC8vXG5cblx0Ly8gSW1wbGVtZW50aW5nIHRoZSByZXF1aXJlZCBnZXRUZW1wbGF0ZSBtZXRob2QgdG8gb3ZlcnJpZGVcblx0Ly8gdGhlIGJhc2UgaW50ZXJmYWNlIGFic3RyYWN0XG5cdF9nZXRUZW1wbGF0ZTogZnVuY3Rpb24odGVtcGxhdGVUeXBlKSB7XG5cdFx0cmV0dXJuIHRlbXBsYXRlVHlwZSA9PT0gJ2NtcycgPyBjbXNUZW1wbGF0ZSA6IHRlbXBsYXRlO1xuXHR9LFxuXG5cdF9nZXRBdmFpbGFibGVFeHRlbnNpb25zOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gX2V4dGVuc2lvbnM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIGV4dGVuZHMgdGhlIGJhc2Ugb25lIHdpdGggc29tZSBkcm9wZG93biBzcGVjaWZpYyBhZGRpdGlvbnNcblx0ICovXG5cdF9mb3JtYXRUZW1wbGF0ZURhdGE6IGZ1bmN0aW9uKGRhdGEpIHtcblx0XHR2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGRhdGEub3B0aW9ucyA9IHR5cGVvZiBkYXRhLm9wdGlvbnMgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkYXRhLm9wdGlvbnMpIDogZGF0YS5vcHRpb25zIHx8IFtdO1xuXHRcdH0gY2F0Y2goZSkge1xuXHRcdFx0ZGF0YS5vcHRpb25zID0gW107XG5cdFx0XHRjb25zb2xlLmxvZyhcIlN1aSBEcm9wZG93biwgZXJyb3IgcGFyc2luZyBvcHRpb25zIEpTT05cIik7XG5cdFx0fVxuXG5cdFx0Ly8gaW4gY2FzZSB0aGUgb3B0aW9ucyBwYXNzZWQgYXJlIGp1c3Qgc3RyaW5ncywgd2UgdGFrZSB0aGF0IHZhbHVlIGZvciB2YWx1ZSBhbmQgbGFiZWwgdGV4dFxuXHRcdGlmICggdHlwZW9mIGRhdGEub3B0aW9uc1swXSA9PT0gJ3N0cmluZycgKSB7XG5cdFx0XHR2YXIgaTtcblx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGF0YS5vcHRpb25zLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YXIgc3RyaW5nID0gZGF0YS5vcHRpb25zW2ldO1xuXHRcdFx0XHRkYXRhLm9wdGlvbnNbaV0gPSB7XG5cdFx0XHRcdFx0dGV4dDogc3RyaW5nLFxuXHRcdFx0XHRcdHZhbHVlOiBzdHJpbmcsXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRkYXRhLmlkID0gdGhpcy4kcGxhY2Vob2xkZXIgPyB0aGlzLiRwbGFjZWhvbGRlci5hdHRyKCdpZCcpIDogZGF0YS5pZDtcblx0XHRkYXRhLmNsYXNzID0gdGhpcy4kcGxhY2Vob2xkZXIgPyB0aGlzLiRwbGFjZWhvbGRlci5hdHRyKCdjbGFzcycpIDogZGF0YS5jbGFzcztcblx0XHQvLyBpZiBwbGFjZWhvbGRlciwgYWRkIGl0IHRvIHRoZSBvcHRpb25zIGF2YWlsYWJsZVxuXHRcdC8vIHRoaXMgaXMgdGhlIGJlaGF2aW9yIG9mIG5hdGl2ZSBkcm9wZG93bnNcblx0XHRpZiAoZGF0YS5wbGFjZWhvbGRlclRleHQpIHtcblx0XHRcdGRhdGEub3B0aW9ucy51bnNoaWZ0KHtcblx0XHRcdFx0dGV4dDogZGF0YS5wbGFjZWhvbGRlclRleHQsXG5cdFx0XHRcdHZhbHVlOiAncGxhY2Vob2xkZXInXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvLyBleHRlbmQgaGVyZSB3aXRoIGRlZmF1bHQgYmVoYXZpb3IgYW5kIHJldHVyblxuXHRcdHJldHVybiBTdWlJbnB1dEJhc2VJbnRlcmZhY2UucHJvdG90eXBlLl9mb3JtYXRUZW1wbGF0ZURhdGEuY2FsbCh0aGlzLCBkYXRhKTtcblx0fSxcblxuXHQvKipcblx0ICogd2hlbiBzZXR0aW5nIHZhbHVlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgY2hhbmdlIHRoZSB0cmlnZ2VyIHRleHQgYW5kIHVwZGF0ZSB0aGUgc2VsZWN0ZWQgb3B0aW9uJ3Mgc3R5bGVzXG5cdCAqL1xuXHRfc2V0VmFsdWVJbk1hcmt1cDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBvcHRpb25WYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdmFsdWUgPT09IG51bGwgPyAncGxhY2Vob2xkZXInIDogdmFsdWVcblxuXHRcdC8vIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZCwgdXBkYXRlIHZpZXcgYW5kIHByb3BlcnRpZXNcblx0XHR0aGlzLiRjdXJyZW50T3B0aW9uID0gdGhpcy4kb3B0aW9ucy5maWx0ZXIoJ1tkYXRhLXZhbHVlPVwiJyArIG9wdGlvblZhbHVlICsgJ1wiXScpO1xuXG5cdFx0Ly8gbWFrZSB0aGUgb3B0aW9uIGFjdGl2ZVxuXHRcdHRoaXMuJGN1cnJlbnRPcHRpb25cblx0XHRcdC5hZGRBdHRyVmFsKCdzdWktZHJvcGRvd24tb3B0aW9uJywgJ2lzLWFjdGl2ZScpXG5cdFx0XHQuc2libGluZ3MoKS5yZW1vdmVBdHRyVmFsKCdzdWktZHJvcGRvd24tb3B0aW9uJywgJ2lzLWFjdGl2ZScpO1xuXG5cdFx0Ly8gdXBkYXRlIGRpc3BsYXkgdGV4dCBmb3IgY3VycmVudFxuXHRcdHRoaXMuJHRyaWdnZXIuaHRtbCh0aGlzLiRjdXJyZW50T3B0aW9uLmh0bWwoKSk7XG5cblx0XHR0aGlzLiRpbnB1dC52YWwodmFsdWUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiB3aGVuIHNldHRpbmcgdmFsdWUsIHZlcmlmaWVzIHRoYXQgdGhlIGRyb3Bkb3duIGhhcyBhbiBvcHRpb24gd2l0aCB0aGlzIHZhbHVlXG5cdCAqIGluIGNhc2UgaXQgZG9lc24ndCB3aWxsIGZhbGxiYWNrIHRvIHRoZSBwbGFjZWhvbGRlci4gSWYgbm8gcGxhY2Vob2xkZXIsIHdpbGwgcmV0dXJuIGZhbHNlXG5cdCAqL1xuXHRfdmFsaWRhdGVWYWx1ZTogZnVuY3Rpb24oIHZhbHVlICkge1xuXG5cdFx0Ly8gdmFsaWRhdGUgdGhhdCB0aGVyZSBpcyBhbiBvcHRpb24gd2l0aCB0aGlzIG5ldyB2YWx1ZVxuXHRcdHZhciAkY3VycmVudE9wdGlvbiA9IHRoaXMuJG9wdGlvbnMuZmlsdGVyKCdbZGF0YS12YWx1ZT1cIicgKyB2YWx1ZSArICdcIl0nKTtcblxuXHRcdC8vIGlmIG5vIG9wdGlvbiBtYXRjaGVzIHRoZSB2YWx1ZSwgYXR0ZW1wdCB0byBzZXQgZHJvcGRvd25cblx0XHQvLyB0byBwbGFjZWhvbGRlclxuXHRcdGlmICghJGN1cnJlbnRPcHRpb24ubGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9ICdwbGFjZWhvbGRlcic7XG5cdFx0XHQkY3VycmVudE9wdGlvbiA9IHRoaXMuJG9wdGlvbnMuZmlsdGVyKCdbZGF0YS12YWx1ZT1cInBsYWNlaG9sZGVyXCJdJyk7XG5cdFx0fVxuXG5cdFx0Ly8gaWYgdGhlcmUgaXMgbm8gcGxhY2Vob2xkZXIgZmFsbGJhY2ssIHJldHVybiBmYWxzZVxuXHRcdHJldHVybiAkY3VycmVudE9wdGlvbi5sZW5ndGggPyB2YWx1ZSA6IGZhbHNlO1xuXHR9XG5cbn0pO1xuXG4vLy8vL1xuLy8vLyBFeHBvcnRcbi8vLyAgVGhpcyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgaGFzIGV4dGVuc2lvbnMgYXZhaWxhYmxlXG4vL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcHRzLCAkZG9jLCAkd2luKSB7XG5cdC8vIEdldCB0aGUgZXh0ZW5zaW9ucyB0aGF0IGhhdmUgYmVlbiBwYXNzZWRcblx0dmFyIGV4dGVuc2lvbnNUb0luY2x1ZGUgPSB0eXBlb2Ygb3B0cy5leHRlbnNpb25zICE9PSAndW5kZWZpbmVkJyA/IG9wdHMuZXh0ZW5zaW9ucyA6IFtdO1xuXHRpZiAoIHR5cGVvZiBleHRlbnNpb25zVG9JbmNsdWRlID09PSAnc3RyaW5nJyApIHtcblx0XHRleHRlbnNpb25zVG9JbmNsdWRlID0gZXh0ZW5zaW9uc1RvSW5jbHVkZS5zcGxpdCgnICcpO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGEgbmV3IGNvbnN0cnVjdG9yIHNvIHRoYXQgZWFjaCBkcm9wZG93biBjYW4gYmVcblx0Ly8gcHJvcGVybHkgZXh0ZW5kZWQgdGhlIGRlZmluZWQgZXh0ZW5zaW9ucy5cblx0ZnVuY3Rpb24gSW5zdGFudGlhdGVkQ29tcG9uZW50KG9wdHMsICRkb2MsICR3aW4pIHtcblx0XHRTdWlEcm9wZG93bi5jYWxsKHRoaXMsIG9wdHMsICRkb2MsICR3aW4pO1xuXHR9XG5cblx0Ly8gSW5zdGFudGlhdGVkIGRyb3Bkb3duIGlzIGlkZW50aWNhbCB0byB0aGUgU1VJIERyb3Bkb3duXG5cdCQuZXh0ZW5kKEluc3RhbnRpYXRlZENvbXBvbmVudC5wcm90b3R5cGUsIFN1aURyb3Bkb3duLnByb3RvdHlwZSk7XG5cblx0Ly8gTG9vcCB0aHJvdWdoIGFuZCBleHRlbmQgdGhlIFN1aURyb3Bkb3duIHByb3RvdHlwZSB3aXRoIHRoZSBleHRlbnNpb25zXG5cdF8uZWFjaChleHRlbnNpb25zVG9JbmNsdWRlLCBmdW5jdGlvbihleHRlbnNpb24pIHtcblx0XHRpZiAoX2V4dGVuc2lvbnNbZXh0ZW5zaW9uXSkge1xuXHRcdFx0JC5leHRlbmQoSW5zdGFudGlhdGVkQ29tcG9uZW50LnByb3RvdHlwZSwgX2V4dGVuc2lvbnNbZXh0ZW5zaW9uXS5wcm90b3R5cGUpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIG5ldyBJbnN0YW50aWF0ZWRDb21wb25lbnQob3B0cywgJGRvYywgJHdpbik7XG59O1xuIiwiLy8gaGJzZnkgY29tcGlsZWQgSGFuZGxlYmFycyB0ZW1wbGF0ZVxudmFyIEhhbmRsZWJhcnNDb21waWxlciA9IHJlcXVpcmUoJ2hic2Z5L3J1bnRpbWUnKTtcbm1vZHVsZS5leHBvcnRzID0gSGFuZGxlYmFyc0NvbXBpbGVyLnRlbXBsYXRlKGZ1bmN0aW9uIChIYW5kbGViYXJzLGRlcHRoMCxoZWxwZXJzLHBhcnRpYWxzLGRhdGEpIHtcbiAgdGhpcy5jb21waWxlckluZm8gPSBbNCwnPj0gMS4wLjAnXTtcbmhlbHBlcnMgPSB0aGlzLm1lcmdlKGhlbHBlcnMsIEhhbmRsZWJhcnMuaGVscGVycyk7IGRhdGEgPSBkYXRhIHx8IHt9O1xuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXIsIGZ1bmN0aW9uVHlwZT1cImZ1bmN0aW9uXCIsIGVzY2FwZUV4cHJlc3Npb249dGhpcy5lc2NhcGVFeHByZXNzaW9uLCBzZWxmPXRoaXM7XG5cbmZ1bmN0aW9uIHByb2dyYW0xKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImlkPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuaWQpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuaWQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW0zKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImNsYXNzPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnNbJ2NsYXNzJ10pIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDBbJ2NsYXNzJ10pOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW01KGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcInN1aS1zdHlsZXM9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5zdHlsZXMpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuc3R5bGVzKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCJcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG5mdW5jdGlvbiBwcm9ncmFtNyhkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCJcXG5cdDxsYWJlbCBzdWktaW5wdXQtbGFiZWw+XCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmxhYmVsKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmxhYmVsKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiPC9sYWJlbD5cXG5cdFwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW05KGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImNsYXNzPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuaWNvbkNsYXNzKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmljb25DbGFzcyk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiXCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTExKGRlcHRoMCxkYXRhKSB7XG4gIFxuICBcbiAgcmV0dXJuIFwiXFxuXHRcdFx0PGRpdiBzdWktZHJvcGRvd24tc2VhcmNoPlxcblx0XHRcdFx0PGlucHV0IHN1aS1kcm9wZG93bi1zZWFyY2gtaW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgcGxhY2Vob2xkZXI9XFxcIlNlYXJjaFxcXCI+XFxuXHRcdFx0PC9kaXY+XFxuXHRcdFwiO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW0xMyhkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCJcXG5cdFx0PGRpdiBzdWktZHJvcGRvd24tb3B0aW9uPVxcXCJcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAuaXNfY3VycmVudCksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSgxNCwgcHJvZ3JhbTE0LCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIlxcXCIgZGF0YS12YWx1ZT1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLnZhbHVlKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnZhbHVlKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCI+XCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLnRleHQpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAudGV4dCk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIjwvZGl2Plxcblx0XHRcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuZnVuY3Rpb24gcHJvZ3JhbTE0KGRlcHRoMCxkYXRhKSB7XG4gIFxuICBcbiAgcmV0dXJuIFwiaXMtYWN0aXZlXCI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTE2KGRlcHRoMCxkYXRhKSB7XG4gIFxuICBcbiAgcmV0dXJuIFwiXFxuXHRcdFx0PGRpdiBzdWktZHJvcGRvd24tZm9vdGVyPjwvZGl2Plxcblx0XHRcIjtcbiAgfVxuXG4gIGJ1ZmZlciArPSBcIjxkaXYgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmlkKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDEsIHByb2dyYW0xLCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIiBzdWktaW5wdXQgc3VpLWRyb3Bkb3duPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuZHJvcGRvd24pIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuZHJvcGRvd24pOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDBbJ2NsYXNzJ10pLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oMywgcHJvZ3JhbTMsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiIFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMC5zdHlsZXMpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oNSwgcHJvZ3JhbTUsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiPlxcblx0XCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmxhYmVsKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDcsIHByb2dyYW03LCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIlxcblx0PGlucHV0IHN1aS1kcm9wZG93bi1pbnB1dCB0eXBlPVxcXCJoaWRkZW5cXFwiIHZhbHVlPVxcXCJcIlxuICAgICsgZXNjYXBlRXhwcmVzc2lvbigoKHN0YWNrMSA9ICgoc3RhY2sxID0gKGRlcHRoMCAmJiBkZXB0aDAuY3VycmVudCkpLHN0YWNrMSA9PSBudWxsIHx8IHN0YWNrMSA9PT0gZmFsc2UgPyBzdGFjazEgOiBzdGFjazEudmFsdWUpKSx0eXBlb2Ygc3RhY2sxID09PSBmdW5jdGlvblR5cGUgPyBzdGFjazEuYXBwbHkoZGVwdGgwKSA6IHN0YWNrMSkpXG4gICAgKyBcIlxcXCIgbmFtZT1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLm5hbWUpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAubmFtZSk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiPlxcblx0PGRpdiBzdWktZHJvcGRvd24tdHJpZ2dlcj1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLnRyaWdnZXJfdmFyaWF0aW9uKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnRyaWdnZXJfdmFyaWF0aW9uKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCIgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmljb25DbGFzcyksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSg5LCBwcm9ncmFtOSwgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCI+XCI7XG4gIHN0YWNrMSA9ICgoc3RhY2sxID0gKChzdGFjazEgPSAoZGVwdGgwICYmIGRlcHRoMC5jdXJyZW50KSksc3RhY2sxID09IG51bGwgfHwgc3RhY2sxID09PSBmYWxzZSA/IHN0YWNrMSA6IHN0YWNrMS50ZXh0KSksdHlwZW9mIHN0YWNrMSA9PT0gZnVuY3Rpb25UeXBlID8gc3RhY2sxLmFwcGx5KGRlcHRoMCkgOiBzdGFjazEpO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiPC9kaXY+XFxuXHQ8ZGl2IHN1aS1kcm9wZG93bi1vcHRpb25zPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuZHJvcGRvd24pIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuZHJvcGRvd24pOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAuc3R5bGVzKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDUsIHByb2dyYW01LCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIj5cXG5cdFx0XCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLnNlYXJjaGFibGUpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oMTEsIHByb2dyYW0xMSwgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCJcXG5cdFx0XCI7XG4gIHN0YWNrMSA9IGhlbHBlcnMuZWFjaC5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAub3B0aW9ucyksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSgxMywgcHJvZ3JhbTEzLCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIlxcblx0XHRcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAuaGFzRm9vdGVyKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDE2LCBwcm9ncmFtMTYsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiXFxuXHQ8L2Rpdj5cXG48L2Rpdj5cIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfSk7XG4iLCIvLyBoYnNmeSBjb21waWxlZCBIYW5kbGViYXJzIHRlbXBsYXRlXG52YXIgSGFuZGxlYmFyc0NvbXBpbGVyID0gcmVxdWlyZSgnaGJzZnkvcnVudGltZScpO1xubW9kdWxlLmV4cG9ydHMgPSBIYW5kbGViYXJzQ29tcGlsZXIudGVtcGxhdGUoZnVuY3Rpb24gKEhhbmRsZWJhcnMsZGVwdGgwLGhlbHBlcnMscGFydGlhbHMsZGF0YSkge1xuICB0aGlzLmNvbXBpbGVySW5mbyA9IFs0LCc+PSAxLjAuMCddO1xuaGVscGVycyA9IHRoaXMubWVyZ2UoaGVscGVycywgSGFuZGxlYmFycy5oZWxwZXJzKTsgZGF0YSA9IGRhdGEgfHwge307XG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazEsIGhlbHBlciwgZnVuY3Rpb25UeXBlPVwiZnVuY3Rpb25cIiwgZXNjYXBlRXhwcmVzc2lvbj10aGlzLmVzY2FwZUV4cHJlc3Npb24sIHNlbGY9dGhpcztcblxuZnVuY3Rpb24gcHJvZ3JhbTEoZGVwdGgwLGRhdGEpIHtcbiAgXG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazEsIGhlbHBlcjtcbiAgYnVmZmVyICs9IFwiaWQ9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5pZCkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5pZCk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiXCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTMoZGVwdGgwLGRhdGEpIHtcbiAgXG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazEsIGhlbHBlcjtcbiAgYnVmZmVyICs9IFwiY2xhc3M9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVyc1snY2xhc3MnXSkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMFsnY2xhc3MnXSk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiXCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTUoZGVwdGgwLGRhdGEpIHtcbiAgXG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazEsIGhlbHBlcjtcbiAgYnVmZmVyICs9IFwic3VpLXN0eWxlcz1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLnN0eWxlcykgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5zdHlsZXMpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW03KGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcIjxsYWJlbCBjbGFzcz1cXFwic3VpLWlucHV0LWxhYmVsXFxcIiBmb3I9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5uYW1lKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLm5hbWUpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIj5cIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMubGFiZWwpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAubGFiZWwpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiPC9sYWJlbD5cIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG5mdW5jdGlvbiBwcm9ncmFtOShkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCJcXG5cdFx0PGlucHV0IHR5cGU9XFxcImZpbGVcXFwiIG5hbWU9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5uYW1lKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLm5hbWUpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIj5cXG5cdFx0XCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTExKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcIlxcblx0XHQ8aW5wdXQgdHlwZT1cXFwiZmlsZVxcXCI+XFxuXHRcdDxpbnB1dCB0eXBlPVxcXCJoaWRkZW5cXFwiIG5hbWU9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5uYW1lKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLm5hbWUpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIj5cXG5cXG5cdFx0PGRpdiBzdWktZmlsZS1sb2FkZXI+XFxuXHRcdFx0PGRpdiBjbGFzcz1cXFwibnUtbG9hZGVyIG1lZCBsb2FkaW5nXFxcIj48L2Rpdj5cXG5cdFx0PC9kaXY+XFxuXFxuXHRcdDxkaXYgc3VpLWZpbGUtaW1hZ2UtcHJldmlldz5cXG5cdFx0XHQ8aW1nIHNyYz1cXFwiXFxcIiB0aXRsZT1cXFwiXFxcIj5cXG5cdFx0PC9kaXY+XFxuXHRcdFwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgYnVmZmVyICs9IFwiPGRpdiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAuaWQpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oMSwgcHJvZ3JhbTEsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiIHN1aS1pbnB1dCBzdWktZmlsZT1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmZpbGUpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuZmlsZSk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiIFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMFsnY2xhc3MnXSksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSgzLCBwcm9ncmFtMywgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCIgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLnN0eWxlcyksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSg1LCBwcm9ncmFtNSwgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCI+XFxuXHRcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAubGFiZWwpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oNywgcHJvZ3JhbTcsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiXFxuXFxuXHQ8ZGl2IHN1aS1maWxlLXRhcmdldD5cXG5cdFx0XCI7XG4gIHN0YWNrMSA9IGhlbHBlcnMudW5sZXNzLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMC5hc3luYyksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSg5LCBwcm9ncmFtOSwgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCJcXG5cXG5cdFx0XFxuXHRcdFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMC5hc3luYyksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSgxMSwgcHJvZ3JhbTExLCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIlxcblxcblx0XHQ8ZGl2IHN1aS1maWxlLXBsYWNlaG9sZGVyIGNsYXNzPVxcXCJpY29uLWYtdXBsb2FkLWltYWdlXFxcIj5cXG5cdFx0XHQ8cD5VcGxvYWQgaGVyZS48L3A+XFxuXHRcdDwvZGl2Plxcblxcblx0XHQ8ZGl2IHN1aS1maWxlLWZpbGVuYW1lPlxcblx0XHRcdFxcblx0XHQ8L2Rpdj5cXG5cdDwvZGl2PlxcbjwvZGl2PlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9KTtcbiIsInZhciAkID0gd2luZG93LmpRdWVyeTtcbnZhciBfID0gd2luZG93Ll87XG5cbmZ1bmN0aW9uIFN1aUZpbGVBc3luYygpIHt9XG5cbiQuZXh0ZW5kKFN1aUZpbGVBc3luYy5wcm90b3R5cGUsIHtcblxuXHRhc3luYzoge1xuXG5cdFx0ZXh0ZW5zaW9uSW5pdDogZnVuY3Rpb24ob3B0cykge1xuXG5cdFx0XHR0aGlzLmFzeW5jSW1hZ2VNYXhXaWR0aCA9IDYwMDtcblx0XHRcdHRoaXMuYXN5bmNJbWFnZU1heEhlaWdodCA9IDYwMDtcblx0XHRcdHRoaXMuYXN5bmNJbWFnZVF1YWxpdHkgPSA4MDtcblxuXHRcdFx0dGhpcy5pc1Nob3dpbmdQcmV2aWV3SW1hZ2UgPSBmYWxzZTtcblx0XHRcdHRoaXMuaXNVcGxvYWRpbmcgPSBmYWxzZTtcblxuXHRcdFx0dGhpcy4kaGlkZGVuSW5wdXQgPSB0aGlzLiRlbC5maW5kKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdJyk7XG5cdFx0XHR0aGlzLiRhc3luY0ltYWdlUHJldmlldyA9IHRoaXMuJGVsLmZpbmQoJ1tzdWktdXBsb2FkLWltYWdlLXByZXZpZXddJyk7XG5cdFx0XHR0aGlzLiRhc3luY1VwbG9hZExvYWRlciA9IHRoaXMuJGVsLmZpbmQoJ1tzdWktdXBsb2FkLWxvYWRlcl0nKTtcblxuXHRcdH0sXG5cblx0XHRleHRlbnNpb25CaW5kOiBmdW5jdGlvbiggb3B0cyApIHtcblx0XHR9LFxuXG5cdFx0ZXh0ZW5zaW9uVW5iaW5kOiBmdW5jdGlvbigpIHtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIE9WRVJSSURFUyB0aGUgZGVmYXV0IFN1aUZpbGVVcGxvYWQuX2NoYW5nZUxpc3RlbmVyIHNvIHRoYXQgdGhlIGNoYW5nZSBldmVudCBvbiB0aGUgaW5wdXQgdHJpZ2dlcnMgdGhlIEFKQVggdXBsb2FkXG5cdCAqL1xuXHRfY2hhbmdlTGlzdGVuZXI6IGZ1bmN0aW9uKGUpIHtcblxuXHRcdHZhciBmaWxlLFxuXHRcdFx0aXNJbWFnZTtcblxuXHRcdC8vIG5lZWQgdG8gaGF2ZSBhIGZpbGVcblx0XHRpZiAoICF0aGlzLiRpbnB1dFswXSB8fCAhdGhpcy4kaW5wdXRbMF0uZmlsZXMgKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRmaWxlID0gdGhpcy4kaW5wdXRbMF0uZmlsZXNbMF07XG5cblx0XHQvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhIGZpbGUgc2VsZWN0ZWQuIFRoaXMgd2lsbCBiZSB1bmRlZmluZWQgaWYgdGhlIGZpbGUgbW9kYWwgaXMgbGVmdCB3aXRob3V0IHNlbGVjdGluZ1xuXHRcdGlmICggIWZpbGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aXNJbWFnZSA9IChmaWxlLnR5cGUgPT09ICdpbWFnZS9qcGcnIHx8IGZpbGUudHlwZSA9PT0gJ2ltYWdlL2pwZWcnIHx8IGZpbGUudHlwZSA9PT0gJ2ltYWdlL3BuZycgfHwgZmlsZS50eXBlID09PSAnaW1hZ2UvZ2lmJyk7XG5cblx0XHQvLyBpZiB0aGlzIGlzIGFuIGltYWdlIGFuZCB3ZSBoYXZlIGNhbnZhc1Jlc2l6ZSBhdmFpbGFibGUsIHdlIHJlc2l6ZSBpdCBiZWZvcmUgdXBsb2FkaW5nXG5cdFx0aWYgKCBpc0ltYWdlICYmIHR5cGVvZiBjYW52YXNSZXNpemUgIT09ICd1bmRlZmluZWQnICkge1xuXHRcdFx0dGhpcy5fYXN5bmNSZXNpemVJbWFnZSggZmlsZSApO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdC8vIGhpZGUgcHJldmlldyBpbWFnZSBpbiBjYXNlIHRoZXJlIHdhcyBvbmVcblx0XHRcdHRoaXMuX2FzeW5jSGlkZVByZXZpZXdJbWFnZSgpO1xuXG5cdFx0XHR0aGlzLl9hc3luY1VwbG9hZEZpbGUoIGZpbGUgKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIGRvZXMgdGhlIEFKQVggY2FsbCB1cGxvYWRpbmcgdGhlIGZpbGVcblx0ICovXG5cdF9hc3luY1VwbG9hZEZpbGU6IGZ1bmN0aW9uICggZmlsZSApIHtcblxuXHRcdHZhciBfdGhpcyA9IHRoaXM7XG5cblx0XHR2YXIgbXlGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXHRcdG15Rm9ybURhdGEuYXBwZW5kKCB0aGlzLm5hbWUgLCBmaWxlICk7XG5cdFx0bXlGb3JtRGF0YS5hcHBlbmQoJ2FjdGlvbicsICd1cGxvYWQtY3VzdG9tLXJzdnAtZmlsZScpO1xuXG5cdFx0JC5hamF4KHtcblx0XHRcdHVybDogd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLCAvLyBXZSB3YW50IHRvIFBPU1QgdG8gd2hhdGV2ZXIgVVJMIHRoaXMgZm9ybSBpcyBsb2FkZWQgb24uXG5cdFx0XHR0eXBlOiAncG9zdCcsXG5cdFx0XHRkYXRhOiBteUZvcm1EYXRhLFxuXHRcdFx0ZGF0YVR5cGU6ICdqc29uJyxcblx0XHRcdHByb2Nlc3NEYXRhOiBmYWxzZSwgLy8gRG9uJ3QgcHJvY2VzcyB0aGUgZmlsZXNcblx0XHRcdGNvbnRlbnRUeXBlOiBmYWxzZVxuXHRcdH0pXG5cdFx0LmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblxuXHRcdFx0Ly8gZm9yIGEgcmVhc29uLCB0aGUgc2VydmVyIHJlbW92ZXMgXCJjdXN0b21fZmllbGRfXCIgZnJvbSB0aGUgbmFtZSBvbiB0aGUgcmVzcG9uc2Vcblx0XHRcdHZhciB1cGxvYWRJbmZvID0gcmVzcG9uc2VbX3RoaXMubmFtZS5yZXBsYWNlKCdjdXN0b21fZmllbGRfJywnJyldO1xuXG5cdFx0XHRpZiAoIHR5cGVvZiB1cGxvYWRJbmZvID09PSAndW5kZWZpbmVkJyB8fCAhdXBsb2FkSW5mby5wYXRoICkge1xuXHRcdFx0XHRfdGhpcy5fYXN5bmNTZXRVcGxvYWRTdGF0dXMoJ3VwbG9hZC1lcnJvcicpO1xuXHRcdFx0XHRfdGhpcy4kaGlkZGVuSW5wdXQudmFsKCcnKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRfdGhpcy5fYXN5bmNTZXRVcGxvYWRTdGF0dXMoJ2hhcy1maWxlLXVwbG9hZGVkJyk7XG5cblx0XHRcdC8vIHNldCBoaWRkZW4gaW5wdXQgdmFsdWUuIHVwbG9hZEluZm8ucGF0aCBpcyB0aGUgdXBsYW9kZWQgZmlsZSBVUkxcblx0XHRcdF90aGlzLiRoaWRkZW5JbnB1dC52YWwoIHVwbG9hZEluZm8ucGF0aCApO1xuXG5cdFx0fSlcblx0XHQuZmFpbCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdF90aGlzLl9hc3luY1NldFVwbG9hZFN0YXR1cygndXBsb2FkLWVycm9yJyk7XG5cdFx0XHRfdGhpcy4kaGlkZGVuSW5wdXQudmFsKCcnKTtcblx0XHR9KVxuXHRcdC5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIHVzZXMgdGhlIGNhbnZhc1Jlc2l6ZSBwbHVnaW4gdG8gcmVzaXplIHRoZSBpbWFnZSBiZWZvcmUgcGFzc2luZyBpdCB0byBidWlsZFxuXHQgKi9cblx0X2FzeW5jUmVzaXplSW1hZ2U6IGZ1bmN0aW9uKCBmaWxlICkge1xuXG5cdFx0dmFyIF90aGlzID0gdGhpcztcblxuXHRcdF90aGlzLl9hc3luY1NldFVwbG9hZFN0YXR1cygnaXMtdXBsb2FkaW5nJyk7XG5cblx0XHQvLyB3aHkgYSBzZXQgdGltZW91dD8gYmVjYXVzZSB3aGlsZSBjYW52YXNSZXNpemUoKSBjb21wdXRlcywgdGhlIHNjcmVlbiBpcyB0b3RhbGx5IGZyb3plblxuXHRcdC8vIHNldHRpbmcgdGhlIHRpbWVvdXQgd2lsbCBhbGxvdyB0aGUgbG9hZGluZyBzdGF0ZSB0byBzaG93IHdoaWxlIHRoaXMgaGFwcGVuc1xuXHRcdHNldFRpbWVvdXQoIGZ1bmN0aW9uKCl7XG5cblx0XHRcdGNhbnZhc1Jlc2l6ZSggZmlsZSwge1xuXHRcdFx0XHR3aWR0aDogX3RoaXMuYXN5bmNJbWFnZU1heFdpZHRoLFxuXHRcdFx0XHRoZWlnaHQ6IF90aGlzLmFzeW5jSW1hZ2VNYXhIZWlnaHQsXG5cdFx0XHRcdGNyb3A6IGZhbHNlLFxuXHRcdFx0XHRxdWFsaXR5OiBfdGhpcy5hc3luY0ltYWdlUXVhbGl0eSxcblx0XHRcdFx0cm90YXRlOiAwLFxuXHRcdFx0XHRjYWxsYmFjazogZnVuY3Rpb24oIHJlc2l6ZWRGaWxlVXJsICkge1xuXG5cdFx0XHRcdFx0dmFyIGJsb2IgPSBfZGF0YVVSSXRvQmxvYiggcmVzaXplZEZpbGVVcmwgKTtcblxuXHRcdFx0XHRcdGlmICggcmVzaXplZEZpbGVVcmwgJiYgYmxvYiApIHtcblxuXHRcdFx0XHRcdFx0Ly8gdXBkYXRpbmcgdGhlIHZpZXdcblx0XHRcdFx0XHRcdF90aGlzLl9hc3luY1Nob3dQcmV2aWV3SW1hZ2UoIHJlc2l6ZWRGaWxlVXJsICk7XG5cblx0XHRcdFx0XHRcdC8vIGRvIHRoZSBmaWxlIHVwbG9hZCBmaW5hbGx5XG5cdFx0XHRcdFx0XHRfdGhpcy5fYXN5bmNVcGxvYWRGaWxlKCBibG9iICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIGVycm9yIHdpdGggdGhlIHJlc2l6aW5nXG5cdFx0XHRcdFx0ZWxzZSB7XG5cblx0XHRcdFx0XHRcdF90aGlzLl9hc3luY1NldFVwbG9hZFN0YXR1cygndXBsb2FkLWVycm9yJyk7XG5cblx0XHRcdFx0XHRcdC8vIGhpZGUgcHJldmlldyBpbWFnZSBpbiBjYXNlIHRoZXJlIHdhcyBvbmVcblx0XHRcdFx0XHRcdHRoaXMuX2FzeW5jSGlkZVByZXZpZXdJbWFnZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSwgMCk7XG5cdH0sXG5cblx0X2FzeW5jU2hvd1ByZXZpZXdJbWFnZTogZnVuY3Rpb24oIHJlc2l6ZWRGaWxlVXJsICkge1xuXG5cdFx0dGhpcy4kYXN5bmNJbWFnZVByZXZpZXcuZmluZCgnaW1nJykuYXR0cignc3JjJywgcmVzaXplZEZpbGVVcmwgKS5lbmQoKVxuXHRcdFx0LnRvZ2dsZUF0dHJWYWwoICdzdWktdXBsb2FkLWltYWdlLXByZXZpZXcnLCAnaGFzLWltYWdlJywgISFyZXNpemVkRmlsZVVybCApO1xuXG5cdFx0dGhpcy5pc1Nob3dpbmdQcmV2aWV3SW1hZ2UgPSB0cnVlO1xuXHR9LFxuXG5cdF9hc3luY0hpZGVQcmV2aWV3SW1hZ2U6IGZ1bmN0aW9uKCkge1xuXG5cdFx0aWYgKCB0aGlzLmlzU2hvd2luZ1ByZXZpZXdJbWFnZSApIHtcblxuXHRcdFx0dGhpcy4kYXN5bmNJbWFnZVByZXZpZXcuZmluZCgnaW1nJykuYXR0cignc3JjJywnJykuZW5kKClcblx0XHRcdFx0LnJlbW92ZUF0dHJWYWwoICdoYXMtaW1hZ2UnICk7XG5cblx0XHRcdHRoaXMuaXNTaG93aW5nUHJldmlld0ltYWdlICA9IGZhbHNlO1xuXHRcdH1cblx0fSxcblxuXHRfYXN5bmNTZXRVcGxvYWRTdGF0dXM6IGZ1bmN0aW9uICggc3RhdHVzICkge1xuXG5cdFx0dGhpcy4kdXBsb2FkVGFyZ2V0LmF0dHIoJ3N1aS11cGxvYWQtdGFyZ2V0Jywgc3RhdHVzICk7XG5cdH0sXG5cbn0pO1xuXG5cbmZ1bmN0aW9uIF9kYXRhVVJJdG9CbG9iKGRhdGFVUkksIHR5cGUpIHtcblx0dmFyIGJ5dGVTdHJpbmcgPSBhdG9iKGRhdGFVUkkuc3BsaXQoJywnKVsxXSksXG5cdFx0YWIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpLFxuXHRcdGlhID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcblx0XHRpYVtpXSA9IGJ5dGVTdHJpbmcuY2hhckNvZGVBdChpKTtcblx0fVxuXHRyZXR1cm4gbmV3IEJsb2IoW2FiXSwgeyB0eXBlOiB0eXBlIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN1aUZpbGVBc3luYzsiLCIvLyBSZXF1aXJlIGRlcGVuZGVuY2llc1xuXG52YXIgJCA9IHJlcXVpcmUoJ2pxdWVyeScpLFxuXHRfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuXG52YXIgU3VpSW5wdXRCYXNlSW50ZXJmYWNlID0gcmVxdWlyZSgnLi4vc3VpLWlucHV0LWJhc2UtaW50ZXJmYWNlJyk7XG5cbnZhciB0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vdGVtcGxhdGUuaGJzJyksXG5cdGNtc1RlbXBsYXRlID0gcmVxdWlyZSgnLi9jbXMtdGVtcGxhdGUuaGJzJyk7XG5cblxuLy8gRGVmaW5lIGFueSBwb3NzaWJsZSBleHRlbnNpb25zIGhlcmVcbnZhciBfZXh0ZW5zaW9ucyA9IHtcblx0YXN5bmM6IHJlcXVpcmUoJy4vZXh0ZW5zaW9ucy9zdWkuZmlsZS5hc3luYy5qcycpXG59O1xuXG5cbmZ1bmN0aW9uIFN1aUZpbGUob3B0cywgJGRvYywgJHdpbikge1xuXG5cdFN1aUlucHV0QmFzZUludGVyZmFjZS5jYWxsKHRoaXMsIG9wdHMpO1xufVxuXG4kLmV4dGVuZChTdWlGaWxlLnByb3RvdHlwZSwgU3VpSW5wdXRCYXNlSW50ZXJmYWNlLnByb3RvdHlwZSwge1xuXG5cdC8vLy9cblx0Ly8vIFB1YmxpYyBNZXRob2RzXG5cdC8vXG5cblx0aW5pdDogZnVuY3Rpb24oKSB7XG5cblx0XHRTdWlJbnB1dEJhc2VJbnRlcmZhY2UucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKTtcblxuXHRcdC8vIGNhY2hlIGFkZGl0aW9uYWwgZG9tIGVsZW1lbnRzXG5cdFx0dGhpcy4kdXBsb2FkVGFyZ2V0ID0gdGhpcy4kZWwuZmluZCgnW3N1aS1maWxlLXRhcmdldF0nKTtcblx0XHR0aGlzLiRwbGFjZWhvbGRlciA9IHRoaXMuJGVsLmZpbmQoJ1tzdWktZmlsZS1wbGFjZWhvbGRlcl0nKTtcblx0XHR0aGlzLiR1cGxvYWRGaWxlbmFtZSA9IHRoaXMuJGVsLmZpbmQoJ1tzdWktZmlsZS1maWxlbmFtZV0nKTtcblx0fSxcblxuXHQvKipcblx0ICogY2Fubm90IHByb2dyYW1tYXRpY2FsbHkgc2V0VmFsdWUgb2YgZmlsZXVwbG9hZC4gT3ZlcnJpZGluZyBzZXRWYWx1ZSgpIGluIHRoaXMgY2FzZVxuXHQgKiB0aGlzIHdvcmtzIGJlY2F1c2Ugd2UncmUgaGFuZGxpbmcgdGhlIHZhbHVlIHNldHRpbmcgaW4gX2NoYW5nZUxpc3RlbmVyIG91cnNlbHZlcyBoZXJlXG5cdCAqL1xuXHRzZXRWYWx1ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiB3aWxsIHJldHVybiB0aGUgZmlsZW5hbWUuIGV4YW1wbGUgXCJwaG90by5qcGdcIlxuXHQgKiB0aGlzIG1ldGhvZCBuZWVkcyB0byBvdmVycmlkZSBiZWNhdXNlIHNvbWUgYnJvd3NlcnMgcmV0dXJuIHRoaW5ncyBsaWtlIEM6L2Zha2VwYXRoL1tmaWxlbmFtZV1cblx0ICovXG5cdF9nZXRWYWx1ZUZyb21NYXJrdXA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLiRpbnB1dFswXS5maWxlcyAmJiB0aGlzLiRpbnB1dFswXS5maWxlc1swXSAmJiB0aGlzLiRpbnB1dFswXS5maWxlc1swXS5uYW1lIHx8ICctJztcblx0fSxcblxuXHQvLy8vXG5cdC8vLyBQcml2YXRlICYgQWJzdHJhY3QgTWV0aG9kc1xuXHQvL1xuXG5cdC8vIEltcGxlbWVudGluZyB0aGUgcmVxdWlyZWQgZ2V0VGVtcGxhdGUgbWV0aG9kIHRvIG92ZXJyaWRlXG5cdC8vIHRoZSBiYXNlIGludGVyZmFjZSBhYnN0cmFjdFxuXHRfZ2V0VGVtcGxhdGU6IGZ1bmN0aW9uKHRlbXBsYXRlVHlwZSkge1xuXHRcdHJldHVybiB0ZW1wbGF0ZVR5cGUgPT09ICdjbXMnID8gY21zVGVtcGxhdGUgOiB0ZW1wbGF0ZTtcblx0fSxcblxuXHRfZ2V0QXZhaWxhYmxlRXh0ZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIF9leHRlbnNpb25zO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBleHRlbmRzIHRoZSBiYXNlIHRvIGFkZCB0aGUgZmlsZW5hbWUgb24gdG9wIG9mIHRoZSBpbnB1dFxuXHQgKi9cblx0X2NoYW5nZUxpc3RlbmVyOiBmdW5jdGlvbihlKSB7XG5cdFx0dmFyIF90aGlzID0gdGhpcztcblxuXHRcdC8vIHNob3cgdGhlIGZpbGVuYW1lXG5cdFx0dmFyIGZpbGVuYW1lID0gdGhpcy5fZ2V0VmFsdWVGcm9tTWFya3VwKCk7XG5cdFx0dGhpcy4kdXBsb2FkRmlsZW5hbWUudGV4dChmaWxlbmFtZSk7XG5cblx0XHRfdGhpcy4kdXBsb2FkVGFyZ2V0LmFkZEF0dHJWYWwoJ3N1aS1maWxlLXRhcmdldCcsICdoYXMtZmlsZS11cGxvYWRlZCcpO1xuXG5cdFx0Ly8gZXh0ZW5kIGJhc2Vcblx0XHRTdWlJbnB1dEJhc2VJbnRlcmZhY2UucHJvdG90eXBlLl9jaGFuZ2VMaXN0ZW5lci5jYWxsKHRoaXMpO1xuXHR9LFxuXG5cdC8vIHJldHVybnMgdGhlIGZpbGUgaW5wdXQgc3BlY2lmaWNhbGx5XG5cdF9maW5kSW5wdXRJbk1hcmt1cDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiB0aGlzLiRlbC5maW5kKCdpbnB1dFt0eXBlPVwiZmlsZVwiXScpO1xuXHR9XG5cbn0pO1xuXG4vLy8vL1xuLy8vLyBFeHBvcnRcbi8vLyAgVGhpcyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgaGFzIGV4dGVuc2lvbnMgYXZhaWxhYmxlXG4vL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcHRzLCAkZG9jLCAkd2luKSB7XG5cblx0Ly8gR2V0IHRoZSBleHRlbnNpb25zIHRoYXQgaGF2ZSBiZWVuIHBhc3NlZFxuXHR2YXIgZXh0ZW5zaW9uc1RvSW5jbHVkZSA9IHR5cGVvZiBvcHRzLmV4dGVuc2lvbnMgIT09ICd1bmRlZmluZWQnID8gb3B0cy5leHRlbnNpb25zIDogW107XG5cdGlmICggdHlwZW9mIGV4dGVuc2lvbnNUb0luY2x1ZGUgPT09ICdzdHJpbmcnICkge1xuXHRcdGV4dGVuc2lvbnNUb0luY2x1ZGUgPSBleHRlbnNpb25zVG9JbmNsdWRlLnNwbGl0KCcgJyk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSBuZXcgY29uc3RydWN0b3Igc28gdGhhdCBlYWNoIGRyb3Bkb3duIGNhbiBiZVxuXHQvLyBwcm9wZXJseSBleHRlbmRlZCB0aGUgZGVmaW5lZCBleHRlbnNpb25zLlxuXHRmdW5jdGlvbiBJbnN0YW50aWF0ZWRDb21wb25lbnQob3B0cywgJGRvYywgJHdpbikge1xuXHRcdFN1aUZpbGUuY2FsbCh0aGlzLCBvcHRzLCAkZG9jLCAkd2luKTtcblx0fVxuXG5cdC8vIEluc3RhbnRpYXRlZCBkcm9wZG93biBpcyBpZGVudGljYWwgdG8gdGhlIFNVSSBEcm9wZG93blxuXHQkLmV4dGVuZChJbnN0YW50aWF0ZWRDb21wb25lbnQucHJvdG90eXBlLCBTdWlGaWxlLnByb3RvdHlwZSk7XG5cblx0Ly8gTG9vcCB0aHJvdWdoIGFuZCBleHRlbmQgdGhlIFN1aUZpbGUgcHJvdG90eXBlIHdpdGggdGhlIGV4dGVuc2lvbnNcblx0Xy5lYWNoKGV4dGVuc2lvbnNUb0luY2x1ZGUsIGZ1bmN0aW9uKGV4dGVuc2lvbikge1xuXHRcdGlmIChfZXh0ZW5zaW9uc1tleHRlbnNpb25dKSB7XG5cdFx0XHQkLmV4dGVuZChJbnN0YW50aWF0ZWRDb21wb25lbnQucHJvdG90eXBlLCBfZXh0ZW5zaW9uc1tleHRlbnNpb25dLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gbmV3IEluc3RhbnRpYXRlZENvbXBvbmVudChvcHRzLCAkZG9jLCAkd2luKTtcbn07IiwiLy8gaGJzZnkgY29tcGlsZWQgSGFuZGxlYmFycyB0ZW1wbGF0ZVxudmFyIEhhbmRsZWJhcnNDb21waWxlciA9IHJlcXVpcmUoJ2hic2Z5L3J1bnRpbWUnKTtcbm1vZHVsZS5leHBvcnRzID0gSGFuZGxlYmFyc0NvbXBpbGVyLnRlbXBsYXRlKGZ1bmN0aW9uIChIYW5kbGViYXJzLGRlcHRoMCxoZWxwZXJzLHBhcnRpYWxzLGRhdGEpIHtcbiAgdGhpcy5jb21waWxlckluZm8gPSBbNCwnPj0gMS4wLjAnXTtcbmhlbHBlcnMgPSB0aGlzLm1lcmdlKGhlbHBlcnMsIEhhbmRsZWJhcnMuaGVscGVycyk7IGRhdGEgPSBkYXRhIHx8IHt9O1xuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXIsIGZ1bmN0aW9uVHlwZT1cImZ1bmN0aW9uXCIsIGVzY2FwZUV4cHJlc3Npb249dGhpcy5lc2NhcGVFeHByZXNzaW9uLCBzZWxmPXRoaXM7XG5cbmZ1bmN0aW9uIHByb2dyYW0xKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImlkPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuaWQpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuaWQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW0zKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImNsYXNzPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnNbJ2NsYXNzJ10pIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDBbJ2NsYXNzJ10pOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW01KGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcInN1aS1zdHlsZXM9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5zdHlsZXMpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuc3R5bGVzKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCJcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG5mdW5jdGlvbiBwcm9ncmFtNyhkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCI8bGFiZWwgY2xhc3M9XFxcInN1aS1pbnB1dC1sYWJlbFxcXCIgZm9yPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMubmFtZSkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5uYW1lKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCI+XCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmxhYmVsKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmxhYmVsKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIjwvbGFiZWw+XCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTkoZGVwdGgwLGRhdGEpIHtcbiAgXG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazEsIGhlbHBlcjtcbiAgYnVmZmVyICs9IFwiXFxuXHRcdDxpbnB1dCB0eXBlPVxcXCJmaWxlXFxcIiBuYW1lPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMubmFtZSkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5uYW1lKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCI+XFxuXHRcdFwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW0xMShkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCJcXG5cdFx0PGlucHV0IHR5cGU9XFxcImZpbGVcXFwiPlxcblx0XHQ8aW5wdXQgdHlwZT1cXFwiaGlkZGVuXFxcIiBuYW1lPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMubmFtZSkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5uYW1lKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCI+XFxuXFxuXHRcdDxkaXYgc3VpLWZpbGUtbG9hZGVyPlxcblx0XHRcdDxkaXYgY2xhc3M9XFxcIm51LWxvYWRlciBtZWQgbG9hZGluZ1xcXCI+PC9kaXY+XFxuXHRcdDwvZGl2Plxcblxcblx0XHQ8ZGl2IHN1aS1maWxlLWltYWdlLXByZXZpZXc+XFxuXHRcdFx0PGltZyBzcmM9XFxcIlxcXCIgdGl0bGU9XFxcIlxcXCI+XFxuXHRcdDwvZGl2Plxcblx0XHRcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG4gIGJ1ZmZlciArPSBcIjxkaXYgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmlkKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDEsIHByb2dyYW0xLCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIiBzdWktaW5wdXQgc3VpLWZpbGU9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5maWxlKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmZpbGUpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDBbJ2NsYXNzJ10pLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oMywgcHJvZ3JhbTMsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiIFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMC5zdHlsZXMpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oNSwgcHJvZ3JhbTUsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiPlxcblx0XCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmxhYmVsKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDcsIHByb2dyYW03LCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIlxcblxcblx0PGRpdiBzdWktZmlsZS10YXJnZXQ+XFxuXHRcdFwiO1xuICBzdGFjazEgPSBoZWxwZXJzLnVubGVzcy5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAuYXN5bmMpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oOSwgcHJvZ3JhbTksIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiXFxuXFxuXHRcdFxcblx0XHRcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAuYXN5bmMpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oMTEsIHByb2dyYW0xMSwgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCJcXG5cXG5cdFx0PGRpdiBzdWktZmlsZS1wbGFjZWhvbGRlciBjbGFzcz1cXFwiaWNvbi1mLXVwbG9hZC1pbWFnZVxcXCI+XFxuXHRcdFx0PHA+VXBsb2FkIGhlcmUuPC9wPlxcblx0XHQ8L2Rpdj5cXG5cXG5cdFx0PGRpdiBzdWktZmlsZS1maWxlbmFtZT5cXG5cdFx0XHRcXG5cdFx0PC9kaXY+XFxuXHQ8L2Rpdj5cXG48L2Rpdj5cIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfSk7XG4iLCIvLy8vXG4vLy8gQWJzdHJhY3QgSW50ZXJmYWNlIGZvciBTVUkgSW5wdXQgQ29tcG9uZW50c1xuLy8gIFNob3VsZCBuZXZlciBiZSBjb25zdHJ1Y3RlZCwgb25seSBleHRlbmRlZFxuXG52YXIgJCA9IHJlcXVpcmUoJ2pxdWVyeScpLFxuXHRfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuXG52YXIgU3VpQmFzZUNvbXBvbmVudEludGVyZmFjZSA9IHJlcXVpcmUoJy4uL3N1aS1jb21wb25lbnQtYmFzZS1pbnRlcmZhY2UnKTtcblxucmVxdWlyZSgnLi4vLi4vaGVscGVycy9hdHRyaWJ1dGVIZWxwZXJzJyk7XG5cbnZhciBfaW5zdGFudGlhdGVkSW5wdXRzQ291bnQgPSAxO1xuXG5cbmZ1bmN0aW9uIFN1aUlucHV0QmFzZUludGVyZmFjZShvcHRzKSB7XG5cdG9wdHMgPSBvcHRzIHx8IHt9O1xuXG5cdC8vIGdlbmVyYXRlcyBhbHBoYW51bWVyaWNhbCBpZCBmb3IgbGlua2luZyBpbnB1dHMgYW5kIGxhYmVscyBmb3IgY2xpY2tzXG5cdC8vIHRoZSBmb3I9XCJcIiBvZiB0aGUgPGxhYmVsPiBtdXN0IG1hdGNoIHRoZSBpZD1cIlwiIG9mIHRoZSBpbnB1dFxuXHRvcHRzLmlucHV0TGFiZWxJZCA9ICdzdWktaW5wdXQtJytfaW5zdGFudGlhdGVkSW5wdXRzQ291bnQ7XG5cdF9pbnN0YW50aWF0ZWRJbnB1dHNDb3VudCsrO1xuXG5cdFN1aUJhc2VDb21wb25lbnRJbnRlcmZhY2UuY2FsbCh0aGlzLCBvcHRzKTtcblxuXHQvLyBsYWJlbCBhbmQgcGxhY2Vob2xkZXIgYXJlIHRoZSB2aXNpYmxlIG5hbWUgb2YgdGhpcyBpbnB1dFxuXHR0aGlzLm5hbWUgPSB0eXBlb2Ygb3B0cy5uYW1lICE9PSAndW5kZWZpbmVkJyA/IG9wdHMubmFtZSA6ICcnO1xuXHR0aGlzLmxhYmVsID0gdHlwZW9mIG9wdHMubGFiZWwgIT09ICd1bmRlZmluZWQnID8gb3B0cy5sYWJlbCA6ICdMYWJlbCc7XG5cdHRoaXMucGxhY2Vob2xkZXJUZXh0ID0gdHlwZW9mIG9wdHMucGxhY2Vob2xkZXJUZXh0ICE9PSAndW5kZWZpbmVkJyA/IG9wdHMucGxhY2Vob2xkZXJUZXh0IDogJyc7XG5cblx0Ly8gbm9ybWFsaXplIGJvb2xlYW4gcHJvcGVydGllcy4gVGhpcyBjaGVjayBpcyByZXF1aXJlZCBiZWNhdXNlIHRoZXNlIGNvdWxkIGNvbWUgZnJvbSBIVE1MIGF0dHJpYnV0ZXNcblx0dGhpcy5jdXJyZW50VmFsdWUgPSB0eXBlb2Ygb3B0cy5jdXJyZW50VmFsdWUgIT09ICd1bmRlZmluZWQnICYmIG9wdHMuY3VycmVudFZhbHVlICE9PSBudWxsID8gb3B0cy5jdXJyZW50VmFsdWUgOiBudWxsO1xuXHR0aGlzLmlzUmVxdWlyZWQgPSAhb3B0cy5pc1JlcXVpcmVkIHx8IG9wdHMuaXNSZXF1aXJlZCA9PT0gJ2ZhbHNlJyB8fCBvcHRzLmlzUmVxdWlyZWQgPT0gJzAnID8gMCA6IG9wdHMuaXNSZXF1aXJlZDtcblxuXHQvLyBDdXN0b20gQ2FsbGJhY2tzXG5cdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2tzID0gW107XG5cblx0aWYgKG9wdHMub25DaGFuZ2UpIHtcblx0XHR0aGlzLl9vbkNoYW5nZUNhbGxiYWNrcy5wdXNoKG9wdHMub25DaGFuZ2UpO1xuXHR9XG5cblx0Ly8gdmFsaWRhdGlvbiBtYW5hZ2VtZW50LiBBbHNvIGlmIHZhbGlkYXRpb24gZXJyb3JzIHNob3cgYnkgdGhlIGlucHV0IGF1dG9tYXRpY2FsbHkgb3Igbm90XG5cdHRoaXMuZXJyb3JDb2RlO1xuXHR0aGlzLmVycm9yTXNnO1xuXHR0aGlzLmFyZUVycm9yc1JlbmRlcmVkID0gdHlwZW9mIG9wdHMuYXJlRXJyb3JzUmVuZGVyZWQgPT09ICd1bmRlZmluZWQnIHx8IG9wdHMuYXJlRXJyb3JzUmVuZGVyZWQgPyAxIDogMDtcblx0dGhpcy52YWx1ZUZvcm1hdCA9IG9wdHMudmFsdWVGb3JtYXQgfHwgbnVsbDtcblxuXHR0aGlzLmlzUmVhZE9ubHkgPSB0eXBlb2Ygb3B0cy5pc1JlYWRPbmx5ID09PSAndW5kZWZpbmVkJyA/IGZhbHNlIDogb3B0cy5pc1JlYWRPbmx5O1xuXHR0aGlzLmlzRGlzYWJsZWQgPSB0eXBlb2Ygb3B0cy5pc0Rpc2FibGVkID09PSAndW5kZWZpbmVkJyA/IGZhbHNlIDogb3B0cy5pc0Rpc2FibGVkO1xuXG5cdC8vIG1vcmUgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBpbiBzdWJjbGFzc2VzXG59XG5cbiQuZXh0ZW5kKFN1aUlucHV0QmFzZUludGVyZmFjZS5wcm90b3R5cGUsIFN1aUJhc2VDb21wb25lbnRJbnRlcmZhY2UucHJvdG90eXBlLCB7XG5cdC8vIFJlcGxhY2VzIHBsYWNlaG9sZGVyIG1hcmt1cCB3aXRoIHRlbXBsYXRlXG5cdGluaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFN1aUJhc2VDb21wb25lbnRJbnRlcmZhY2UucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKTtcblxuXHRcdC8vIGNhY2hlIGlucHV0IGVsZW1lbnQgaWYgc3VwZXIgY2xhc3MgaGFzbid0IHNldCBpdCBhbHJlYWR5XG5cdFx0dGhpcy4kaW5wdXQgPSB0aGlzLl9maW5kSW5wdXRJbk1hcmt1cCgpO1xuXG5cdFx0dGhpcy4kZXJyb3JDb250YWluZXIgPSAkKCc8ZGl2IGNsYXNzPVwic3VpLWVycm9yLWNvbnRhaW5lclwiPjwvZGl2PicpO1xuXHRcdHRoaXMuJGxhYmVsID0gdGhpcy4kZWwuZmluZCgnW3N1aS1pbnB1dC1sYWJlbF06Zmlyc3QnKTtcblxuXHRcdC8vIHN5bmMgaW5pdGlhbCBzdGF0ZXNcblx0XHR0aGlzLnNldFZhbHVlKHRoaXMuY3VycmVudFZhbHVlKTtcblx0XHR0aGlzLnNldElzUmVxdWlyZWQodGhpcy5pc1JlcXVpcmVkKTtcblx0XHR0aGlzLnNldElzRGlzYWJsZWQodGhpcy5pc0Rpc2FibGVkKTtcblx0XHR0aGlzLnNldElzUmVhZE9ubHkodGhpcy5pc1JlYWRPbmx5KTtcblxuXHRcdC8vIGFkZCBsaXN0ZW5lclxuXHRcdHRoaXMuJGlucHV0Lm9uKCdjaGFuZ2UnLCB0aGlzLl9jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpKTtcblx0fSxcblxuXHQvLy8vXG5cdC8vLyBQcml2YXRlIE1ldGhvZHMgKHNob3VsZCBub3QgYmUgdXNlZCBvdXRzaWRlKVxuXHQvL1xuXG5cdC8qKlxuXHQgKiBkZXBlbmRpbmcgb24gdGhlIFNVSSBjb21wb25lbnQgdHlwZSwgdGhpcyBtZXRob2QncyBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGRpZmZlcmVudFxuXHQgKiBkZWZhdWx0IGlzIGFzIGlmIGl0IHdhcyBhIHRleHQgaW5wdXRcblx0ICovXG5cdF9maW5kSW5wdXRJbk1hcmt1cDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuJGVsLmZpbmQoJ2lucHV0Jyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIGRlcGVuZGluZyBvbiB0aGUgU1VJIGNvbXBvbmVudCB0eXBlLCB0aGlzIG1ldGhvZCdzIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgZGlmZmVyZW50XG5cdCAqIGRlZmF1bHQgaXMgYXMgaWYgaXQgd2FzIGEgdGV4dCBpbnB1dFxuXHQgKi9cblx0X2dldFZhbHVlRnJvbU1hcmt1cDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuJGlucHV0LnZhbCgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBkZXBlbmRpbmcgb24gdGhlIFNVSSBjb21wb25lbnQgdHlwZSwgdGhpcyBtZXRob2QncyBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGRpZmZlcmVudFxuXHQgKiBkZWZhdWx0IGlzIGFzIGlmIGl0IHdhcyBhIHRleHQgaW5wdXRcblx0ICovXG5cdF9zZXRWYWx1ZUluTWFya3VwOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dGhpcy4kaW5wdXQudmFsKCB2YWx1ZSApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBET04nVCBPVkVSUklERSwgZXh0ZW5kIGlzIGdvb2Rcblx0ICogZXhlY3V0ZWQgd2hlbiBpbnB1dCBjaGFuZ2VzLiBEZWZhdWx0IGlucHV0IGFjdGlvbi4gRm9yIHNwZWNpZmljIGNhc2VzLCBvdmVycmlkZSBfZ2V0VmFsdWVGcm9tTWFya3VwKClcblx0ICovXG5cdF9jaGFuZ2VMaXN0ZW5lcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHRoaXMuc2V0VmFsdWUoIHRoaXMuX2dldFZhbHVlRnJvbU1hcmt1cCggZXZlbnQgKSApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBlcnJvciBoYW5kbGluZyBsb2dpY1xuXHQgKi9cblx0X3Rocm93RXJyb3I6IGZ1bmN0aW9uKGNvZGUsIG1zZykge1xuXG5cdFx0dGhpcy5lcnJvckNvZGUgPSBjb2RlO1xuXHRcdHRoaXMuZXJyb3JNc2cgPSBtc2c7XG5cblx0XHR0aGlzLiRlbC5hZGRBdHRyVmFsKCdzdWktaW5wdXQnLCAnaGFzLWVycm9ycycpO1xuXG5cdFx0aWYgKCB0aGlzLmFyZUVycm9yc1JlbmRlcmVkICkge1xuXHRcdFx0dGhpcy4kZXJyb3JDb250YWluZXIuaHRtbCh0aGlzLl9nZXRGb3JtYXR0ZWRFcnJvcnMoKSkuYXBwZW5kVG8odGhpcy4kZWwpO1xuXHRcdH1cblx0fSxcblxuXHRfY2xlYXJFcnJvcnM6IGZ1bmN0aW9uKCkge1xuXG5cdFx0dGhpcy5lcnJvckNvZGUgPSBudWxsO1xuXHRcdHRoaXMuZXJyb3JNc2cgPSBudWxsO1xuXG5cdFx0dGhpcy4kZWwucmVtb3ZlQXR0clZhbCgnc3VpLWlucHV0JywgJ2hhcy1lcnJvcnMnKTtcblxuXHRcdGlmICggdGhpcy5hcmVFcnJvcnNSZW5kZXJlZCApIHtcblx0XHRcdHRoaXMuJGVycm9yQ29udGFpbmVyLnRleHQoJycpLmRldGFjaCgpO1xuXHRcdH1cblx0fSxcblxuXHRfZ2V0Rm9ybWF0dGVkRXJyb3JzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaXRlbXNNYXJrdXAgPSAnJztcblxuXHRcdGl0ZW1zTWFya3VwICs9ICc8bGk+JyArIHRoaXMuZXJyb3JNc2cgKyAnPC9saT4nO1xuXG5cdFx0cmV0dXJuICc8dWw+JyArIGl0ZW1zTWFya3VwICsgJzwvdWw+Jztcblx0fSxcblxuXHQvLyBoZXJlIGp1c3Qgc28gdGhhdCB0aGUgc3ViIGNsYXNzZXMgY2FuIGV4dGVuZCBmcm9tIHRoZSBpbnB1dCBiYXNlXG5cdF9mb3JtYXRUZW1wbGF0ZURhdGE6IGZ1bmN0aW9uKCBkYXRhICkge1xuXHRcdHJldHVybiBTdWlCYXNlQ29tcG9uZW50SW50ZXJmYWNlLnByb3RvdHlwZS5fZm9ybWF0VGVtcGxhdGVEYXRhLmNhbGwodGhpcywgZGF0YSk7XG5cdH0sXG5cblx0Ly8vL1xuXHQvLy8gUHVibGljIE1ldGhvZHNcblx0Ly9cblxuXHQvKipcblx0ICogY2hlY2tzIGZvciB0aGlzIGlucHV0IHRvIGJlIHZhbGlkIGZvciBzdWJtaXNzaW9uXG5cdCAqL1xuXHR2YWxpZGF0ZTogZnVuY3Rpb24oKSB7XG5cblx0XHR0aGlzLl9jbGVhckVycm9ycygpOyAvLyBjbGVhciBvbGQgZXJyb3JzXG5cblx0XHQvLyB2YWxpZGF0aW9uIGxvZ2ljIGhlcmVcblx0XHR2YXIgY3VycmVudFZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuXG5cdFx0Ly8gY2hlY2tpbmcgZm9yIHJlcXVpcmVkXG5cdFx0aWYgKHRoaXMuaXNSZXF1aXJlZCAmJiAoY3VycmVudFZhbHVlPT09bnVsbCB8fCBjdXJyZW50VmFsdWU9PT0nJyB8fCAoXy5pc0FycmF5KGN1cnJlbnRWYWx1ZSkmJiFjdXJyZW50VmFsdWUubGVuZ3RoKSApICkge1xuXG5cdFx0XHR0aGlzLl90aHJvd0Vycm9yKCdpc1JlcXVpcmVkRW1wdHknLCB0aGlzLmdldFVzZXJGYWNpbmdOYW1lKCkrJyBpcyByZXF1aXJlZC4nKTtcblx0XHR9XG5cblx0XHQvLyBjYWxsIGlucHV0IHR5cGUtc3BlY2lmaWMgcnVsZXMgaGVyZVxuXHRcdGlmICh0eXBlb2YgdGhpcy52YWxpZGF0ZUlucHV0VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhpcy52YWxpZGF0ZUlucHV0VHlwZSgpO1xuXHRcdH1cblxuXHRcdC8vIHJldHVybiB0aGUgZXJyb3IgY29kZSwgb3IgbnVsbCBpZiBub25lXG5cdFx0aWYgKCB0aGlzLmVycm9yQ29kZSApIHtcblx0XHRcdHJldHVybiB7IGNvZGU6IHRoaXMuZXJyb3JDb2RlLCBtc2c6IHRoaXMuZXJyb3JNc2cgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblxuXHRvbkNoYW5nZTogZnVuY3Rpb24oY2IpIHtcblx0XHQvLyBhdHRhY2ggY2hhbmdlIGhhbmRsZXIgYW5kIHBhc3MgaW5wdXQgZWxlbWVudCBhc1xuXHRcdC8vIGNvbnRleHQgYW5kIHZhbHVlIGFzIGFyZ3VtZW50XG5cdFx0dGhpcy5fb25DaGFuZ2VDYWxsYmFja3MucHVzaChjYik7XG5cdH0sXG5cblx0c2V0TGFiZWw6IGZ1bmN0aW9uKGxhYmVsKSB7XG5cdFx0dGhpcy5sYWJlbCA9IGxhYmVsO1xuXHRcdHRoaXMuJGxhYmVsLnRleHQodGhpcy5sYWJlbCk7XG5cdH0sXG5cblx0c2V0UGxhY2Vob2xkZXJUZXh0OiBmdW5jdGlvbihwbGFjZWhvbGRlclRleHQpIHtcblx0XHR0aGlzLnBsYWNlaG9sZGVyVGV4dCA9IHBsYWNlaG9sZGVyVGV4dDtcblx0XHR0aGlzLiRpbnB1dC5hdHRyKCdwbGFjZWhvbGRlcicsIHRoaXMucGxhY2Vob2xkZXJUZXh0KTtcblx0fSxcblxuXHRzZXRJc1JlcXVpcmVkOiBmdW5jdGlvbihpc1JlcXVpcmVkKSB7XG5cdFx0dGhpcy5pc1JlcXVpcmVkID0gISFpc1JlcXVpcmVkO1xuXG5cdFx0dGhpcy4kZWwudG9nZ2xlQXR0clZhbCgnc3VpLWlucHV0JywgJ2lzLXJlcXVpcmVkJywgaXNSZXF1aXJlZCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIERPTidUIE9WRVJSSURFLCBleHRlbmQgaXMgZ29vZFxuXHQgKiBiYXNlIG9mIHNldFZhbHVlKCkuIFRvIG1ha2UgaXQgc3BlY2lmaWMsIGV4dGVuZCBfc2V0VmFsdWVJbk1hcmt1cCgpXG5cdCAqIGRlYWxzIHdpdGggdGhlIGludGVybmFsIHNhdmluZyBvZiB0aGUgdmFsdWUsIGJ1dCBub3Qgd2l0aCB0aGUgdXBkYXRlcyBvbiB0aGUgdmlld1xuXHQgKiBAcGFyYW1zLnRyaWdnZXJDaGFuZ2UgW2RlZmF1bHQgdHJ1ZV0gZm9yIHRyaWdnZXJpbmcgdGhlIGNhbGxiYWNrIGF0dGFjaGVkIHRvIHRoZSBjb21wb25lbnRcblx0ICovXG5cdHNldFZhbHVlOiBmdW5jdGlvbiggdmFsdWUsIHBhcmFtcyApIHtcblx0XHR2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdFx0dmFyIG9sZFZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuXG5cdFx0dmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiAnJztcblxuXHRcdHRoaXMuY3VycmVudFZhbHVlID0gdmFsdWU7XG5cblx0XHR0aGlzLl9zZXRWYWx1ZUluTWFya3VwKCB2YWx1ZSApO1xuXG5cdFx0Ly8gY2FsbCBvbkNoYW5nZSBjYWxsYmFjayBpZiBpdCdzIGEgZnVuY3Rpb25cblx0XHRpZiAoIXBhcmFtcyB8fCBwYXJhbXNbJ3RyaWdnZXJDaGFuZ2UnXSkge1xuXHRcdFx0Xy5lYWNoKHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2tzLCBmdW5jdGlvbihjYikge1xuXHRcdFx0XHRpZiAoIHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJyApIHtcblx0XHRcdFx0XHRjYi5jYWxsKF90aGlzLCBfdGhpcy5nZXRWYWx1ZSgpLCBvbGRWYWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHRzZXRJc1JlYWRPbmx5OiBmdW5jdGlvbiggaXNSZWFkT25seSApIHtcblx0XHR0aGlzLmlzUmVhZE9ubHkgPSAhIWlzUmVhZE9ubHk7XG5cdFx0dGhpcy4kZWwudG9nZ2xlQXR0clZhbCgnc3VpLWlucHV0JywgJ2lzLXJlYWQtb25seScsIHRoaXMuaXNSZWFkT25seSk7XG5cdH0sXG5cblx0c2V0SXNEaXNhYmxlZDogZnVuY3Rpb24oIGlzRGlzYWJsZWQgKSB7XG5cdFx0dGhpcy5pc0Rpc2FibGVkID0gISFpc0Rpc2FibGVkO1xuXHRcdHRoaXMuJGVsLnRvZ2dsZUF0dHJWYWwoJ3N1aS1pbnB1dCcsICdpcy1kaXNhYmxlZCcsIHRoaXMuaXNEaXNhYmxlZCk7XG5cdH0sXG5cblx0Z2V0UGxhY2Vob2xkZXJUZXh0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wbGFjZWhvbGRlclRleHQ7XG5cdH0sXG5cblx0Z2V0TGFiZWw6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmxhYmVsO1xuXHR9LFxuXG5cdGdldElzUmVxdWlyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmlzUmVxdWlyZWQ7XG5cdH0sXG5cblx0Z2V0VmFsdWU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZTtcblx0fSxcblxuXHRnZXRJc1JlYWRPbmx5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5pc1JlYWRPbmx5O1xuXHR9LFxuXG5cdGdldFVzZXJGYWNpbmdOYW1lOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoIHRoaXMubGFiZWwgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5sYWJlbDtcblx0XHR9IGVsc2UgaWYgKCB0aGlzLnBsYWNlaG9sZGVyVGV4dCApIHtcblx0XHRcdHJldHVybiB0aGlzLnBsYWNlaG9sZGVyVGV4dDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuICdUaGlzIGZpZWxkJztcblx0XHR9XG5cdH0sXG5cblx0Z2V0SXNEaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuaXNEaXNhYmxlZDtcblx0fSxcblxuXHRnZXROYW1lOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5uYW1lO1xuXHR9XG59KTtcblxuLy8vL1xuLy8vIEV4cG9ydFxuLy9cbm1vZHVsZS5leHBvcnRzID0gU3VpSW5wdXRCYXNlSW50ZXJmYWNlOyIsIi8vIGhic2Z5IGNvbXBpbGVkIEhhbmRsZWJhcnMgdGVtcGxhdGVcbnZhciBIYW5kbGViYXJzQ29tcGlsZXIgPSByZXF1aXJlKCdoYnNmeS9ydW50aW1lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEhhbmRsZWJhcnNDb21waWxlci50ZW1wbGF0ZShmdW5jdGlvbiAoSGFuZGxlYmFycyxkZXB0aDAsaGVscGVycyxwYXJ0aWFscyxkYXRhKSB7XG4gIHRoaXMuY29tcGlsZXJJbmZvID0gWzQsJz49IDEuMC4wJ107XG5oZWxwZXJzID0gdGhpcy5tZXJnZShoZWxwZXJzLCBIYW5kbGViYXJzLmhlbHBlcnMpOyBkYXRhID0gZGF0YSB8fCB7fTtcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyLCBmdW5jdGlvblR5cGU9XCJmdW5jdGlvblwiLCBlc2NhcGVFeHByZXNzaW9uPXRoaXMuZXNjYXBlRXhwcmVzc2lvbiwgc2VsZj10aGlzO1xuXG5mdW5jdGlvbiBwcm9ncmFtMShkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMTtcbiAgYnVmZmVyICs9IFwiaWQ9XFxcIlwiXG4gICAgKyBlc2NhcGVFeHByZXNzaW9uKCgoc3RhY2sxID0gKChzdGFjazEgPSAoZGVwdGgwICYmIGRlcHRoMC5hdHRyaWJ1dGVzKSksc3RhY2sxID09IG51bGwgfHwgc3RhY2sxID09PSBmYWxzZSA/IHN0YWNrMSA6IHN0YWNrMS5pZCkpLHR5cGVvZiBzdGFjazEgPT09IGZ1bmN0aW9uVHlwZSA/IHN0YWNrMS5hcHBseShkZXB0aDApIDogc3RhY2sxKSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW0zKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxO1xuICBidWZmZXIgKz0gXCJjbGFzcz1cXFwiXCJcbiAgICArIGVzY2FwZUV4cHJlc3Npb24oKChzdGFjazEgPSAoKHN0YWNrMSA9IChkZXB0aDAgJiYgZGVwdGgwLmF0dHJpYnV0ZXMpKSxzdGFjazEgPT0gbnVsbCB8fCBzdGFjazEgPT09IGZhbHNlID8gc3RhY2sxIDogc3RhY2sxWydjbGFzcyddKSksdHlwZW9mIHN0YWNrMSA9PT0gZnVuY3Rpb25UeXBlID8gc3RhY2sxLmFwcGx5KGRlcHRoMCkgOiBzdGFjazEpKVxuICAgICsgXCJcXFwiXCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTUoZGVwdGgwLGRhdGEpIHtcbiAgXG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazEsIGhlbHBlcjtcbiAgYnVmZmVyICs9IFwic3VpLXN0eWxlcz1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLnN0eWxlcykgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5zdHlsZXMpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgYnVmZmVyICs9IFwiPGRpdiBzdWktaW5wdXQgc3VpLW11bHRpLWNoZWNrYm94PVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMubXVsdGlDaGVja2JveCkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5tdWx0aUNoZWNrYm94KTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCIgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsICgoc3RhY2sxID0gKGRlcHRoMCAmJiBkZXB0aDAuYXR0cmlidXRlcykpLHN0YWNrMSA9PSBudWxsIHx8IHN0YWNrMSA9PT0gZmFsc2UgPyBzdGFjazEgOiBzdGFjazEuaWQpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oMSwgcHJvZ3JhbTEsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiIFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoKHN0YWNrMSA9IChkZXB0aDAgJiYgZGVwdGgwLmF0dHJpYnV0ZXMpKSxzdGFjazEgPT0gbnVsbCB8fCBzdGFjazEgPT09IGZhbHNlID8gc3RhY2sxIDogc3RhY2sxWydjbGFzcyddKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDMsIHByb2dyYW0zLCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAuc3R5bGVzKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDUsIHByb2dyYW01LCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIj5cXG5cdDxkaXYgc3VpLWlucHV0LWdyb3VwLWxhYmVsPlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5sYWJlbCkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5sYWJlbCk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCI8L2Rpdj5cXG48L2Rpdj5cIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfSk7XG4iLCIvLyBSZXF1aXJlIGRlcGVuZGVuY2llc1xuXG52YXIgJCA9IHJlcXVpcmUoJ2pxdWVyeScpLFxuXHRfID0gcmVxdWlyZSgndW5kZXJzY29yZScpO1xuXG52YXIgU3VpSW5wdXRCYXNlSW50ZXJmYWNlID0gcmVxdWlyZSgnLi4vc3VpLWlucHV0LWJhc2UtaW50ZXJmYWNlJyk7XG5cbnZhciB0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vdGVtcGxhdGUuaGJzJyksXG5cdGNtc1RlbXBsYXRlID0gcmVxdWlyZSgnLi9jbXMtdGVtcGxhdGUuaGJzJyk7XG5cbi8vIHByb3BlcnRpZXMgZnJvbSBhYnN0cmFjdCBzdXBlcmNsYXNzOlxuLy8gdGhpcy5kYXRhXG4vLyB0aGlzLmN1cnJlbnRWYWx1ZVxuXG4vLyBvcHRzLm9wdGlvbnMgPSBbXG4vL1x0XHR7IFwibGFiZWxcIjogXCJMYWJlbFwiLCBcInZhbHVlXCI6IDAgfVxuLy8gXVxuXG5mdW5jdGlvbiBTdWlNdWx0aUNoZWNrYm94KG9wdHMpIHtcblxuXHRTdWlJbnB1dEJhc2VJbnRlcmZhY2UuY2FsbCh0aGlzLCBvcHRzKTtcblxuXHR0aGlzLnN1aUNoZWNrYm94SW5zdGFuY2VzID0gW107XG59XG5cbiQuZXh0ZW5kKFN1aU11bHRpQ2hlY2tib3gucHJvdG90eXBlLCBTdWlJbnB1dEJhc2VJbnRlcmZhY2UucHJvdG90eXBlLCB7XG5cdC8vIEltcGxlbWVudGluZyB0aGUgcmVxdWlyZWQgZ2V0VGVtcGxhdGUgbWV0aG9kIHRvIG92ZXJyaWRlXG5cdC8vIHRoZSBiYXNlIGludGVyZmFjZSBhYnN0cmFjdFxuXHRfZ2V0VGVtcGxhdGU6IGZ1bmN0aW9uKHRlbXBsYXRlVHlwZSkge1xuXHRcdHJldHVybiB0ZW1wbGF0ZVR5cGUgPT09ICdjbXMnID8gY21zVGVtcGxhdGUgOiB0ZW1wbGF0ZTtcblx0fSxcblxuXHRpbml0OiBmdW5jdGlvbigpIHtcblxuXHRcdHZhciBfdGhpcyA9IHRoaXM7XG5cblx0XHRfdGhpcy5kYXRhID0gX3RoaXMuX2Zvcm1hdFRlbXBsYXRlRGF0YShfdGhpcy5kYXRhKTtcblxuXHRcdFN1aUlucHV0QmFzZUludGVyZmFjZS5wcm90b3R5cGUuaW5pdC5jYWxsKHRoaXMpO1xuXG5cdFx0X3RoaXMuJGxhYmVsID0gX3RoaXMuJGVsLmZpbmQoJ1tzdWktaW5wdXQtZ3JvdXAtbGFiZWxdJyk7XG5cblx0XHQvLyBpbml0aWFsaXplIHRoZSBhY3R1YWwgU3VpIENoZWNrYm94IGNvbXBvbmVudHNcblx0XHRfLmVhY2goIF90aGlzLmRhdGEub3B0aW9ucywgZnVuY3Rpb24oIHRoaXNPcHRpb24sIGkgKSB7XG5cblx0XHRcdF90aGlzLl9hZGRDaGVja2JveCggdGhpc09wdGlvbiwgaSApO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBleHRlbmRzIHRoZSBiYXNlIG9uZSB3aXRoIHNvbWUgbXVsdGkgY2hlY2tib3ggc3BlY2lmaWMgYWRkaXRpb25zXG5cdCAqL1xuXHRfZm9ybWF0VGVtcGxhdGVEYXRhOiBmdW5jdGlvbihkYXRhKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0ZGF0YS5vcHRpb25zID0gdHlwZW9mIGRhdGEub3B0aW9ucyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGRhdGEub3B0aW9ucykgOiBkYXRhLm9wdGlvbnMgfHwgW107XG5cdFx0fSBjYXRjaChlKSB7XG5cdFx0XHRkYXRhLm9wdGlvbnMgPSBbXTtcblx0XHRcdGNvbnNvbGUubG9nKFwiU3VpIE11bHRpQ2hlY2tib3gsIGVycm9yIHBhcnNpbmcgb3B0aW9ucyBKU09OXCIpO1xuXHRcdH1cblxuXHRcdC8vIGluIGNhc2UgdGhlIG9wdGlvbnMgcGFzc2VkIGFyZSBqdXN0IHN0cmluZ3MsIHdlIHRha2UgdGhhdCB2YWx1ZSBmb3IgdmFsdWUgYW5kIGxhYmVsIHRleHRcblx0XHRpZiAoIHR5cGVvZiBkYXRhLm9wdGlvbnNbMF0gPT09ICdzdHJpbmcnICkge1xuXHRcdFx0dmFyIGk7XG5cdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRhdGEub3B0aW9ucy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0dmFyIHN0cmluZyA9IGRhdGEub3B0aW9uc1tpXTtcblx0XHRcdFx0ZGF0YS5vcHRpb25zW2ldID0ge1xuXHRcdFx0XHRcdHRleHQ6IHN0cmluZyxcblx0XHRcdFx0XHR2YWx1ZTogc3RyaW5nLFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gZXh0ZW5kIGhlcmUgd2l0aCBkZWZhdWx0IGJlaGF2aW9yIGFuZCByZXR1cm5cblx0XHRyZXR1cm4gU3VpSW5wdXRCYXNlSW50ZXJmYWNlLnByb3RvdHlwZS5fZm9ybWF0VGVtcGxhdGVEYXRhLmNhbGwodGhpcywgZGF0YSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIGdlbmVyYXRlcyBhIGNoZWNrYm94IG9uIHRoaXMgbXVsdGkgY2hlY2tib3ggY29tcG9uZW50XG5cdCAqIEB0aGlzT3B0aW9uIC0+IHtcblx0ICogICAgbGFiZWw6ICcnXG5cdCAqICAgIGN1cnJlbnRhbHVlOiAnJ1xuXHQgKiB9XG5cdCAqIG9yIEB0aGlzT3B0aW9uIC0+IFtcIm9wdGlvbiAxXCIsIFwib3B0aW9uIDJcIl1cblx0ICovXG5cdF9hZGRDaGVja2JveDogZnVuY3Rpb24gKCB0aGlzT3B0aW9uLCBpICkge1xuXG5cdFx0dmFyIF90aGlzID0gdGhpcztcblxuXHRcdC8vIG9wdGlvbnMgY2FuIGJlIG9ubHkgc3RyaW5ncywgb3IgYXJyYXlzIGZvciBtb3JlIGNvbnRyb2xcblx0XHRpZiAoIHR5cGVvZiB0aGlzT3B0aW9uID09PSAnc3RyaW5nJyApIHtcblx0XHRcdHZhciBsYWJlbCA9IHRoaXNPcHRpb247XG5cdFx0XHR2YXIgdmFsdWUgPSB0aGlzT3B0aW9uO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdHZhciBsYWJlbCA9IHRoaXNPcHRpb24udGV4dDtcblx0XHRcdHZhciB2YWx1ZSA9IHRoaXNPcHRpb24udmFsdWU7XG5cdFx0fVxuXG5cdFx0dmFyIGNoZWNrYm94SW5zdGFuY2UgPSBTVUkuY3JlYXRlQ29tcG9uZW50KCdzdWktY2hlY2tib3gnLCB7XG5cdFx0XHR0ZW1wbGF0ZTogJ2NtcycsXG5cdFx0XHRsYWJlbDogbGFiZWwsXG5cdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRjdXJyZW50VmFsdWU6IDAsXG5cdFx0XHRuYW1lOiB0aGlzLm5hbWUrJy0nK2ksXG5cdFx0XHRhdHRhY2hUbzogX3RoaXMuJGVsLFxuXHRcdFx0aXNSZXF1aXJlZDogZmFsc2Vcblx0XHR9KTtcblxuXHRcdC8vIHRoZSBjaGFuZ2UgdHJpZ2dlciBpbiB0aGlzIGV2ZW50IGlzIGRpZmZlcmVudCwgc28gd2UgYXR0YWNoIGl0IHRvIHRoZSBjaGFuZ2Ugb24gdGhlIGNoZWNrYm94IGluc3RhbmNlc1xuXHRcdGNoZWNrYm94SW5zdGFuY2Uub25DaGFuZ2UoXy5iaW5kKHRoaXMuX2NoYW5nZUxpc3RlbmVyLCB0aGlzKSk7XG5cblx0XHRpZiAoIGNoZWNrYm94SW5zdGFuY2UgKSB7XG5cdFx0XHRfdGhpcy5zdWlDaGVja2JveEluc3RhbmNlcy5wdXNoKCBjaGVja2JveEluc3RhbmNlICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBvdmVycmlkaW5nIHRoZSB3YXkgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGlzIGNvbXBvbmVudCB3aGVuIGEgY2hhbmdlIGV2ZW50IGhhcHBlbnNcblx0ICovXG5cdF9nZXRWYWx1ZUZyb21NYXJrdXA6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBfdGhpcyA9IHRoaXM7XG5cblx0XHR2YXIgdmFsdWVBcnJheSA9IFtdO1xuXG5cdFx0Xy5lYWNoKF90aGlzLnN1aUNoZWNrYm94SW5zdGFuY2VzLCBmdW5jdGlvbiggdGhpc0luc3RhbmNlICl7XG5cdFx0XHRpZiAoIHRoaXNJbnN0YW5jZS5nZXRWYWx1ZSgpICkge1xuXHRcdFx0XHR2YWx1ZUFycmF5LnB1c2goIHRoaXNJbnN0YW5jZS5nZXRJbnB1dFZhbHVlKCkgKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB2YWx1ZUFycmF5O1xuXHR9LFxuXG5cdF9zZXRWYWx1ZUluTWFya3VwOiBmdW5jdGlvbiggdmFsdWVBcnJheSApIHtcblxuXHRcdHZhciBfdGhpcyA9IHRoaXM7XG5cblx0XHRfLmVhY2goIF90aGlzLnN1aUNoZWNrYm94SW5zdGFuY2VzLCBmdW5jdGlvbiggdGhpc0luc3RhbmNlLCBpICl7XG5cdFx0XHR2YXIgaXNDaGVja2VkID0gXy5pbmRleE9mKCB2YWx1ZUFycmF5LCB0aGlzSW5zdGFuY2UuZ2V0SW5wdXRWYWx1ZSgpICkgIT09IC0xO1xuXG5cdFx0XHR0aGlzSW5zdGFuY2Uuc2V0VmFsdWUoIGlzQ2hlY2tlZCwgeyd0cmlnZ2VyQ2hhbmdlJzogZmFsc2V9IClcblx0XHR9KTtcblxuXHR9LFxuXG5cdC8qKlxuXHQgKiBleHRlbmRzIHRoZSBkZWZhdWx0IHZhbHVlIHNldHRlciB0byBhbGxvdyBhcnJheXMgYW5kIHN0cmluZ3Ncblx0ICovXG5cdHNldFZhbHVlOiBmdW5jdGlvbiggdmFsdWUsIHBhcmFtcyApIHtcblxuXHRcdHZhciB2YWx1ZUFycmF5ID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlIDogW3ZhbHVlXTtcblx0XHRTdWlJbnB1dEJhc2VJbnRlcmZhY2UucHJvdG90eXBlLnNldFZhbHVlLmNhbGwodGhpcywgdmFsdWVBcnJheSwgcGFyYW1zKTtcblx0fVxuXG59KTtcblxuLy8gRXhwb3J0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdHMpIHtcblx0cmV0dXJuIG5ldyBTdWlNdWx0aUNoZWNrYm94KG9wdHMpO1xufTsiLCIvLyBoYnNmeSBjb21waWxlZCBIYW5kbGViYXJzIHRlbXBsYXRlXG52YXIgSGFuZGxlYmFyc0NvbXBpbGVyID0gcmVxdWlyZSgnaGJzZnkvcnVudGltZScpO1xubW9kdWxlLmV4cG9ydHMgPSBIYW5kbGViYXJzQ29tcGlsZXIudGVtcGxhdGUoZnVuY3Rpb24gKEhhbmRsZWJhcnMsZGVwdGgwLGhlbHBlcnMscGFydGlhbHMsZGF0YSkge1xuICB0aGlzLmNvbXBpbGVySW5mbyA9IFs0LCc+PSAxLjAuMCddO1xuaGVscGVycyA9IHRoaXMubWVyZ2UoaGVscGVycywgSGFuZGxlYmFycy5oZWxwZXJzKTsgZGF0YSA9IGRhdGEgfHwge307XG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazEsIGhlbHBlciwgZnVuY3Rpb25UeXBlPVwiZnVuY3Rpb25cIiwgZXNjYXBlRXhwcmVzc2lvbj10aGlzLmVzY2FwZUV4cHJlc3Npb24sIHNlbGY9dGhpcztcblxuZnVuY3Rpb24gcHJvZ3JhbTEoZGVwdGgwLGRhdGEpIHtcbiAgXG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazE7XG4gIGJ1ZmZlciArPSBcImlkPVxcXCJcIlxuICAgICsgZXNjYXBlRXhwcmVzc2lvbigoKHN0YWNrMSA9ICgoc3RhY2sxID0gKGRlcHRoMCAmJiBkZXB0aDAuYXR0cmlidXRlcykpLHN0YWNrMSA9PSBudWxsIHx8IHN0YWNrMSA9PT0gZmFsc2UgPyBzdGFjazEgOiBzdGFjazEuaWQpKSx0eXBlb2Ygc3RhY2sxID09PSBmdW5jdGlvblR5cGUgPyBzdGFjazEuYXBwbHkoZGVwdGgwKSA6IHN0YWNrMSkpXG4gICAgKyBcIlxcXCJcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG5mdW5jdGlvbiBwcm9ncmFtMyhkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMTtcbiAgYnVmZmVyICs9IFwiY2xhc3M9XFxcIlwiXG4gICAgKyBlc2NhcGVFeHByZXNzaW9uKCgoc3RhY2sxID0gKChzdGFjazEgPSAoZGVwdGgwICYmIGRlcHRoMC5hdHRyaWJ1dGVzKSksc3RhY2sxID09IG51bGwgfHwgc3RhY2sxID09PSBmYWxzZSA/IHN0YWNrMSA6IHN0YWNrMVsnY2xhc3MnXSkpLHR5cGVvZiBzdGFjazEgPT09IGZ1bmN0aW9uVHlwZSA/IHN0YWNrMS5hcHBseShkZXB0aDApIDogc3RhY2sxKSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW01KGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcInN1aS1zdHlsZXM9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5zdHlsZXMpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuc3R5bGVzKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCJcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG4gIGJ1ZmZlciArPSBcIjxkaXYgc3VpLWlucHV0IHN1aS1tdWx0aS1jaGVja2JveD1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLm11bHRpQ2hlY2tib3gpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAubXVsdGlDaGVja2JveCk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiIFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoKHN0YWNrMSA9IChkZXB0aDAgJiYgZGVwdGgwLmF0dHJpYnV0ZXMpKSxzdGFjazEgPT0gbnVsbCB8fCBzdGFjazEgPT09IGZhbHNlID8gc3RhY2sxIDogc3RhY2sxLmlkKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDEsIHByb2dyYW0xLCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKChzdGFjazEgPSAoZGVwdGgwICYmIGRlcHRoMC5hdHRyaWJ1dGVzKSksc3RhY2sxID09IG51bGwgfHwgc3RhY2sxID09PSBmYWxzZSA/IHN0YWNrMSA6IHN0YWNrMVsnY2xhc3MnXSksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSgzLCBwcm9ncmFtMywgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCIgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLnN0eWxlcyksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSg1LCBwcm9ncmFtNSwgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCI+XFxuXHQ8ZGl2IHN1aS1pbnB1dC1ncm91cC1sYWJlbD5cIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMubGFiZWwpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAubGFiZWwpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiPC9kaXY+XFxuPC9kaXY+XCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH0pO1xuIiwiLy8gaGJzZnkgY29tcGlsZWQgSGFuZGxlYmFycyB0ZW1wbGF0ZVxudmFyIEhhbmRsZWJhcnNDb21waWxlciA9IHJlcXVpcmUoJ2hic2Z5L3J1bnRpbWUnKTtcbm1vZHVsZS5leHBvcnRzID0gSGFuZGxlYmFyc0NvbXBpbGVyLnRlbXBsYXRlKGZ1bmN0aW9uIChIYW5kbGViYXJzLGRlcHRoMCxoZWxwZXJzLHBhcnRpYWxzLGRhdGEpIHtcbiAgdGhpcy5jb21waWxlckluZm8gPSBbNCwnPj0gMS4wLjAnXTtcbmhlbHBlcnMgPSB0aGlzLm1lcmdlKGhlbHBlcnMsIEhhbmRsZWJhcnMuaGVscGVycyk7IGRhdGEgPSBkYXRhIHx8IHt9O1xuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXIsIGZ1bmN0aW9uVHlwZT1cImZ1bmN0aW9uXCIsIGVzY2FwZUV4cHJlc3Npb249dGhpcy5lc2NhcGVFeHByZXNzaW9uLCBzZWxmPXRoaXM7XG5cbmZ1bmN0aW9uIHByb2dyYW0xKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxO1xuICBidWZmZXIgKz0gXCJpZD1cXFwiXCJcbiAgICArIGVzY2FwZUV4cHJlc3Npb24oKChzdGFjazEgPSAoKHN0YWNrMSA9IChkZXB0aDAgJiYgZGVwdGgwLmF0dHJpYnV0ZXMpKSxzdGFjazEgPT0gbnVsbCB8fCBzdGFjazEgPT09IGZhbHNlID8gc3RhY2sxIDogc3RhY2sxLmlkKSksdHlwZW9mIHN0YWNrMSA9PT0gZnVuY3Rpb25UeXBlID8gc3RhY2sxLmFwcGx5KGRlcHRoMCkgOiBzdGFjazEpKVxuICAgICsgXCJcXFwiXCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTMoZGVwdGgwLGRhdGEpIHtcbiAgXG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazE7XG4gIGJ1ZmZlciArPSBcImNsYXNzPVxcXCJcIlxuICAgICsgZXNjYXBlRXhwcmVzc2lvbigoKHN0YWNrMSA9ICgoc3RhY2sxID0gKGRlcHRoMCAmJiBkZXB0aDAuYXR0cmlidXRlcykpLHN0YWNrMSA9PSBudWxsIHx8IHN0YWNrMSA9PT0gZmFsc2UgPyBzdGFjazEgOiBzdGFjazFbJ2NsYXNzJ10pKSx0eXBlb2Ygc3RhY2sxID09PSBmdW5jdGlvblR5cGUgPyBzdGFjazEuYXBwbHkoZGVwdGgwKSA6IHN0YWNrMSkpXG4gICAgKyBcIlxcXCJcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG5mdW5jdGlvbiBwcm9ncmFtNShkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCJzdWktc3R5bGVzPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuc3R5bGVzKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnN0eWxlcyk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiXCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTcoZGVwdGgwLGRhdGEsZGVwdGgxKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcIlxcblx0PGRpdiBzdWktcmFkaW8tb3B0aW9uPlxcblx0XHQ8bGFiZWwgc3VpLWlucHV0LWxhYmVsPVxcXCJjaGVja2FibGVcXFwiIGZvcj1cXFwiXCJcbiAgICArIGVzY2FwZUV4cHJlc3Npb24oKChzdGFjazEgPSAoZGVwdGgxICYmIGRlcHRoMS5pbnB1dExhYmVsSWQpKSx0eXBlb2Ygc3RhY2sxID09PSBmdW5jdGlvblR5cGUgPyBzdGFjazEuYXBwbHkoZGVwdGgwKSA6IHN0YWNrMSkpXG4gICAgKyBcIi1cIlxuICAgICsgZXNjYXBlRXhwcmVzc2lvbigoKHN0YWNrMSA9IChkYXRhID09IG51bGwgfHwgZGF0YSA9PT0gZmFsc2UgPyBkYXRhIDogZGF0YS5pbmRleCkpLHR5cGVvZiBzdGFjazEgPT09IGZ1bmN0aW9uVHlwZSA/IHN0YWNrMS5hcHBseShkZXB0aDApIDogc3RhY2sxKSlcbiAgICArIFwiXFxcIj5cIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMudGV4dCkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC50ZXh0KTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIjwvbGFiZWw+XFxuXHRcdDxkaXYgc3VpLWlucHV0LWhvbGRlcj5cXG5cdFx0XHQ8aW5wdXQgdHlwZT1cXFwicmFkaW9cXFwiIG5hbWU9XFxcIlwiXG4gICAgKyBlc2NhcGVFeHByZXNzaW9uKCgoc3RhY2sxID0gKGRlcHRoMSAmJiBkZXB0aDEubmFtZSkpLHR5cGVvZiBzdGFjazEgPT09IGZ1bmN0aW9uVHlwZSA/IHN0YWNrMS5hcHBseShkZXB0aDApIDogc3RhY2sxKSlcbiAgICArIFwiXFxcIiB2YWx1ZT1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLnZhbHVlKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnZhbHVlKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCIgaWQ9XFxcIlwiXG4gICAgKyBlc2NhcGVFeHByZXNzaW9uKCgoc3RhY2sxID0gKGRlcHRoMSAmJiBkZXB0aDEuaW5wdXRMYWJlbElkKSksdHlwZW9mIHN0YWNrMSA9PT0gZnVuY3Rpb25UeXBlID8gc3RhY2sxLmFwcGx5KGRlcHRoMCkgOiBzdGFjazEpKVxuICAgICsgXCItXCJcbiAgICArIGVzY2FwZUV4cHJlc3Npb24oKChzdGFjazEgPSAoZGF0YSA9PSBudWxsIHx8IGRhdGEgPT09IGZhbHNlID8gZGF0YSA6IGRhdGEuaW5kZXgpKSx0eXBlb2Ygc3RhY2sxID09PSBmdW5jdGlvblR5cGUgPyBzdGFjazEuYXBwbHkoZGVwdGgwKSA6IHN0YWNrMSkpXG4gICAgKyBcIlxcXCI+XFxuXHRcdFx0PHNwYW4gc3VpLWlucHV0LXJlcGxhY2VtZW50Pjwvc3Bhbj5cXG5cdFx0PC9kaXY+XFxuXHQ8L2Rpdj5cXG5cdFwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgYnVmZmVyICs9IFwiPGRpdiBzdWktaW5wdXQgc3VpLXJhZGlvPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMucmFkaW8pIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAucmFkaW8pOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKChzdGFjazEgPSAoZGVwdGgwICYmIGRlcHRoMC5hdHRyaWJ1dGVzKSksc3RhY2sxID09IG51bGwgfHwgc3RhY2sxID09PSBmYWxzZSA/IHN0YWNrMSA6IHN0YWNrMS5pZCksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSgxLCBwcm9ncmFtMSwgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCIgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsICgoc3RhY2sxID0gKGRlcHRoMCAmJiBkZXB0aDAuYXR0cmlidXRlcykpLHN0YWNrMSA9PSBudWxsIHx8IHN0YWNrMSA9PT0gZmFsc2UgPyBzdGFjazEgOiBzdGFjazFbJ2NsYXNzJ10pLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oMywgcHJvZ3JhbTMsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiIFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMC5zdHlsZXMpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oNSwgcHJvZ3JhbTUsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiPlxcblx0PGRpdiBzdWktaW5wdXQtZ3JvdXAtbGFiZWw+XCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmxhYmVsKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmxhYmVsKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIjwvZGl2Plxcblx0XCI7XG4gIHN0YWNrMSA9IGhlbHBlcnMuZWFjaC5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAub3B0aW9ucyksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbVdpdGhEZXB0aCg3LCBwcm9ncmFtNywgZGF0YSwgZGVwdGgwKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIlxcbjwvZGl2PlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9KTtcbiIsIi8vIFJlcXVpcmUgZGVwZW5kZW5jaWVzXG5cbnZhciAkID0gcmVxdWlyZSgnanF1ZXJ5JyksXG5cdF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG5cbnZhciBTdWlJbnB1dEJhc2VJbnRlcmZhY2UgPSByZXF1aXJlKCcuLi9zdWktaW5wdXQtYmFzZS1pbnRlcmZhY2UnKTtcblxudmFyIHRlbXBsYXRlID0gcmVxdWlyZSgnLi90ZW1wbGF0ZS5oYnMnKSxcblx0Y21zVGVtcGxhdGUgPSByZXF1aXJlKCcuL2Ntcy10ZW1wbGF0ZS5oYnMnKTtcblxuLy8gcHJvcGVydGllcyBmcm9tIGFic3RyYWN0IHN1cGVyY2xhc3M6XG4vLyB0aGlzLmRhdGFcbi8vIHRoaXMuY3VycmVudFZhbHVlXG5cbi8vIG9wdHMub3B0aW9ucyA9IFtcbi8vXHRcdHsgXCJsYWJlbFwiOiBcIkxhYmVsXCIsIFwidmFsdWVcIjogMCB9XG4vLyBdXG5cbmZ1bmN0aW9uIFN1aVJhZGlvKG9wdHMpIHtcblxuXHRTdWlJbnB1dEJhc2VJbnRlcmZhY2UuY2FsbCh0aGlzLCBvcHRzKTtcbn1cblxuJC5leHRlbmQoU3VpUmFkaW8ucHJvdG90eXBlLCBTdWlJbnB1dEJhc2VJbnRlcmZhY2UucHJvdG90eXBlLCB7XG5cdC8vIEltcGxlbWVudGluZyB0aGUgcmVxdWlyZWQgZ2V0VGVtcGxhdGUgbWV0aG9kIHRvIG92ZXJyaWRlXG5cdC8vIHRoZSBiYXNlIGludGVyZmFjZSBhYnN0cmFjdFxuXHRfZ2V0VGVtcGxhdGU6IGZ1bmN0aW9uKHRlbXBsYXRlVHlwZSkge1xuXHRcdHJldHVybiB0ZW1wbGF0ZVR5cGUgPT09ICdjbXMnID8gY21zVGVtcGxhdGUgOiB0ZW1wbGF0ZTtcblx0fSxcblxuXHRpbml0OiBmdW5jdGlvbigpIHtcblxuXHRcdHRoaXMuZGF0YSA9IHRoaXMuX2Zvcm1hdFRlbXBsYXRlRGF0YSh0aGlzLmRhdGEpO1xuXG5cdFx0U3VpSW5wdXRCYXNlSW50ZXJmYWNlLnByb3RvdHlwZS5pbml0LmNhbGwodGhpcyk7XG5cblx0XHR0aGlzLiRsYWJlbCA9IHRoaXMuJGVsLmZpbmQoJ1tzdWktaW5wdXQtZ3JvdXAtbGFiZWxdJyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIGV4dGVuZHMgdGhlIGJhc2Ugb25lIHdpdGggc29tZSByYWRpbyBzcGVjaWZpYyBhZGRpdGlvbnNcblx0ICovXG5cdF9mb3JtYXRUZW1wbGF0ZURhdGE6IGZ1bmN0aW9uKGRhdGEpIHtcblxuXHRcdHRyeSB7XG5cdFx0XHRkYXRhLm9wdGlvbnMgPSB0eXBlb2YgZGF0YS5vcHRpb25zID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoZGF0YS5vcHRpb25zKSA6IGRhdGEub3B0aW9ucyB8fCBbXTtcblx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdGRhdGEub3B0aW9ucyA9IFtdO1xuXHRcdFx0Y29uc29sZS5sb2coXCJTdWkgUmFkaW8sIGVycm9yIHBhcnNpbmcgb3B0aW9ucyBKU09OXCIpO1xuXHRcdH1cblxuXHRcdC8vIGluIGNhc2UgdGhlIG9wdGlvbnMgcGFzc2VkIGFyZSBqdXN0IHN0cmluZ3MsIHdlIHRha2UgdGhhdCB2YWx1ZSBmb3IgdmFsdWUgYW5kIGxhYmVsIHRleHRcblx0XHRpZiAoIHR5cGVvZiBkYXRhLm9wdGlvbnNbMF0gPT09ICdzdHJpbmcnICkge1xuXHRcdFx0dmFyIGk7XG5cdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRhdGEub3B0aW9ucy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0dmFyIHN0cmluZyA9IGRhdGEub3B0aW9uc1tpXTtcblx0XHRcdFx0ZGF0YS5vcHRpb25zW2ldID0ge1xuXHRcdFx0XHRcdHRleHQ6IHN0cmluZyxcblx0XHRcdFx0XHR2YWx1ZTogc3RyaW5nLFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gZXh0ZW5kIGhlcmUgd2l0aCBkZWZhdWx0IGJlaGF2aW9yIGFuZCByZXR1cm5cblx0XHRyZXR1cm4gU3VpSW5wdXRCYXNlSW50ZXJmYWNlLnByb3RvdHlwZS5fZm9ybWF0VGVtcGxhdGVEYXRhLmNhbGwodGhpcywgZGF0YSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIG92ZXJyaWRpbmcgdGhlIG1ldGhvZCBvZiBTdWlCYXNlQ29tcG9uZW50SW50ZXJmYWNlIGZvciByZWd1bGFyIGlucHV0cyBmb3IgdGhpcyBzcGVjaWZpYyB3YXkgb2YgZ2V0dGluZyBjdXJyZW50IHZhbHVlXG5cdCAqL1xuXHRfZ2V0VmFsdWVGcm9tTWFya3VwOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0Ly8gdGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgcmFkaW9zIHdpbGwga2VlcCB0aGUgY2hlY2tlZCBwcm9wZXJ0eSBiZWNhdXNlIHdlIHNldCBpdCB3aXRoIGpRdWVyeSBhZnRlciBjaGFuZ2Vcblx0XHQvLyBzbyB3aGVuIHRoZSBjaGFuZ2UgZXZlbnQgaGFwcGVucywgdHdvIHJhZGlvcyB3aWxsIGhhdmUgdGhlIGNoZWNrZWQgcHJvcGVydHlcblx0XHRpZiAoIGV2ZW50ICYmIGV2ZW50LnRhcmdldCApIHtcblx0XHRcdHJldHVybiAkKGV2ZW50LnRhcmdldCkuZmlsdGVyKCc6Y2hlY2tlZCcpLnZhbCgpO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLiRpbnB1dC5maWx0ZXIoJzpjaGVja2VkJykudmFsKCk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRWYWx1ZUluTWFya3VwOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dGhpcy4kaW5wdXQucHJvcCgnY2hlY2tlZCcsIGZhbHNlKVxuXHRcdFx0LmZpbHRlcignW3ZhbHVlPVwiJyt2YWx1ZSsnXCJdJykucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuXHR9XG59KTtcblxuLy8gRXhwb3J0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdHMpIHtcblx0cmV0dXJuIG5ldyBTdWlSYWRpbyhvcHRzKTtcbn07IiwiLy8gaGJzZnkgY29tcGlsZWQgSGFuZGxlYmFycyB0ZW1wbGF0ZVxudmFyIEhhbmRsZWJhcnNDb21waWxlciA9IHJlcXVpcmUoJ2hic2Z5L3J1bnRpbWUnKTtcbm1vZHVsZS5leHBvcnRzID0gSGFuZGxlYmFyc0NvbXBpbGVyLnRlbXBsYXRlKGZ1bmN0aW9uIChIYW5kbGViYXJzLGRlcHRoMCxoZWxwZXJzLHBhcnRpYWxzLGRhdGEpIHtcbiAgdGhpcy5jb21waWxlckluZm8gPSBbNCwnPj0gMS4wLjAnXTtcbmhlbHBlcnMgPSB0aGlzLm1lcmdlKGhlbHBlcnMsIEhhbmRsZWJhcnMuaGVscGVycyk7IGRhdGEgPSBkYXRhIHx8IHt9O1xuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXIsIGZ1bmN0aW9uVHlwZT1cImZ1bmN0aW9uXCIsIGVzY2FwZUV4cHJlc3Npb249dGhpcy5lc2NhcGVFeHByZXNzaW9uLCBzZWxmPXRoaXM7XG5cbmZ1bmN0aW9uIHByb2dyYW0xKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxO1xuICBidWZmZXIgKz0gXCJpZD1cXFwiXCJcbiAgICArIGVzY2FwZUV4cHJlc3Npb24oKChzdGFjazEgPSAoKHN0YWNrMSA9IChkZXB0aDAgJiYgZGVwdGgwLmF0dHJpYnV0ZXMpKSxzdGFjazEgPT0gbnVsbCB8fCBzdGFjazEgPT09IGZhbHNlID8gc3RhY2sxIDogc3RhY2sxLmlkKSksdHlwZW9mIHN0YWNrMSA9PT0gZnVuY3Rpb25UeXBlID8gc3RhY2sxLmFwcGx5KGRlcHRoMCkgOiBzdGFjazEpKVxuICAgICsgXCJcXFwiXCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTMoZGVwdGgwLGRhdGEpIHtcbiAgXG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazE7XG4gIGJ1ZmZlciArPSBcImNsYXNzPVxcXCJcIlxuICAgICsgZXNjYXBlRXhwcmVzc2lvbigoKHN0YWNrMSA9ICgoc3RhY2sxID0gKGRlcHRoMCAmJiBkZXB0aDAuYXR0cmlidXRlcykpLHN0YWNrMSA9PSBudWxsIHx8IHN0YWNrMSA9PT0gZmFsc2UgPyBzdGFjazEgOiBzdGFjazFbJ2NsYXNzJ10pKSx0eXBlb2Ygc3RhY2sxID09PSBmdW5jdGlvblR5cGUgPyBzdGFjazEuYXBwbHkoZGVwdGgwKSA6IHN0YWNrMSkpXG4gICAgKyBcIlxcXCJcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG5mdW5jdGlvbiBwcm9ncmFtNShkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCJzdWktc3R5bGVzPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuc3R5bGVzKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnN0eWxlcyk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiXCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTcoZGVwdGgwLGRhdGEsZGVwdGgxKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcIlxcblx0PGRpdiBzdWktcmFkaW8tb3B0aW9uPlxcblx0XHQ8bGFiZWwgc3VpLWlucHV0LWxhYmVsPVxcXCJjaGVja2FibGVcXFwiIGZvcj1cXFwiXCJcbiAgICArIGVzY2FwZUV4cHJlc3Npb24oKChzdGFjazEgPSAoZGVwdGgxICYmIGRlcHRoMS5pbnB1dExhYmVsSWQpKSx0eXBlb2Ygc3RhY2sxID09PSBmdW5jdGlvblR5cGUgPyBzdGFjazEuYXBwbHkoZGVwdGgwKSA6IHN0YWNrMSkpXG4gICAgKyBcIi1cIlxuICAgICsgZXNjYXBlRXhwcmVzc2lvbigoKHN0YWNrMSA9IChkYXRhID09IG51bGwgfHwgZGF0YSA9PT0gZmFsc2UgPyBkYXRhIDogZGF0YS5pbmRleCkpLHR5cGVvZiBzdGFjazEgPT09IGZ1bmN0aW9uVHlwZSA/IHN0YWNrMS5hcHBseShkZXB0aDApIDogc3RhY2sxKSlcbiAgICArIFwiXFxcIj5cIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMudGV4dCkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC50ZXh0KTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIjwvbGFiZWw+XFxuXHRcdDxkaXYgc3VpLWlucHV0LWhvbGRlcj5cXG5cdFx0XHQ8aW5wdXQgdHlwZT1cXFwicmFkaW9cXFwiIG5hbWU9XFxcIlwiXG4gICAgKyBlc2NhcGVFeHByZXNzaW9uKCgoc3RhY2sxID0gKGRlcHRoMSAmJiBkZXB0aDEubmFtZSkpLHR5cGVvZiBzdGFjazEgPT09IGZ1bmN0aW9uVHlwZSA/IHN0YWNrMS5hcHBseShkZXB0aDApIDogc3RhY2sxKSlcbiAgICArIFwiXFxcIiB2YWx1ZT1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLnZhbHVlKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnZhbHVlKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCIgaWQ9XFxcIlwiXG4gICAgKyBlc2NhcGVFeHByZXNzaW9uKCgoc3RhY2sxID0gKGRlcHRoMSAmJiBkZXB0aDEuaW5wdXRMYWJlbElkKSksdHlwZW9mIHN0YWNrMSA9PT0gZnVuY3Rpb25UeXBlID8gc3RhY2sxLmFwcGx5KGRlcHRoMCkgOiBzdGFjazEpKVxuICAgICsgXCItXCJcbiAgICArIGVzY2FwZUV4cHJlc3Npb24oKChzdGFjazEgPSAoZGF0YSA9PSBudWxsIHx8IGRhdGEgPT09IGZhbHNlID8gZGF0YSA6IGRhdGEuaW5kZXgpKSx0eXBlb2Ygc3RhY2sxID09PSBmdW5jdGlvblR5cGUgPyBzdGFjazEuYXBwbHkoZGVwdGgwKSA6IHN0YWNrMSkpXG4gICAgKyBcIlxcXCI+XFxuXHRcdFx0PHNwYW4gc3VpLWlucHV0LXJlcGxhY2VtZW50Pjwvc3Bhbj5cXG5cdFx0PC9kaXY+XFxuXHQ8L2Rpdj5cXG5cdFwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgYnVmZmVyICs9IFwiPGRpdiBzdWktaW5wdXQgc3VpLXJhZGlvPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMucmFkaW8pIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAucmFkaW8pOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKChzdGFjazEgPSAoZGVwdGgwICYmIGRlcHRoMC5hdHRyaWJ1dGVzKSksc3RhY2sxID09IG51bGwgfHwgc3RhY2sxID09PSBmYWxzZSA/IHN0YWNrMSA6IHN0YWNrMS5pZCksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSgxLCBwcm9ncmFtMSwgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCIgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsICgoc3RhY2sxID0gKGRlcHRoMCAmJiBkZXB0aDAuYXR0cmlidXRlcykpLHN0YWNrMSA9PSBudWxsIHx8IHN0YWNrMSA9PT0gZmFsc2UgPyBzdGFjazEgOiBzdGFjazFbJ2NsYXNzJ10pLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oMywgcHJvZ3JhbTMsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiIFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMC5zdHlsZXMpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oNSwgcHJvZ3JhbTUsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiPlxcblx0PGRpdiBzdWktaW5wdXQtZ3JvdXAtbGFiZWw+XCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmxhYmVsKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmxhYmVsKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIjwvZGl2Plxcblx0XCI7XG4gIHN0YWNrMSA9IGhlbHBlcnMuZWFjaC5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAub3B0aW9ucyksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbVdpdGhEZXB0aCg3LCBwcm9ncmFtNywgZGF0YSwgZGVwdGgwKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIlxcbjwvZGl2PlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9KTtcbiIsIi8vIGhic2Z5IGNvbXBpbGVkIEhhbmRsZWJhcnMgdGVtcGxhdGVcbnZhciBIYW5kbGViYXJzQ29tcGlsZXIgPSByZXF1aXJlKCdoYnNmeS9ydW50aW1lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEhhbmRsZWJhcnNDb21waWxlci50ZW1wbGF0ZShmdW5jdGlvbiAoSGFuZGxlYmFycyxkZXB0aDAsaGVscGVycyxwYXJ0aWFscyxkYXRhKSB7XG4gIHRoaXMuY29tcGlsZXJJbmZvID0gWzQsJz49IDEuMC4wJ107XG5oZWxwZXJzID0gdGhpcy5tZXJnZShoZWxwZXJzLCBIYW5kbGViYXJzLmhlbHBlcnMpOyBkYXRhID0gZGF0YSB8fCB7fTtcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyLCBmdW5jdGlvblR5cGU9XCJmdW5jdGlvblwiLCBlc2NhcGVFeHByZXNzaW9uPXRoaXMuZXNjYXBlRXhwcmVzc2lvbiwgc2VsZj10aGlzO1xuXG5mdW5jdGlvbiBwcm9ncmFtMShkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCJpZD1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmlkKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmlkKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCJcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG5mdW5jdGlvbiBwcm9ncmFtMyhkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCJjbGFzcz1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzWydjbGFzcyddKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwWydjbGFzcyddKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCJcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG5mdW5jdGlvbiBwcm9ncmFtNShkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCJzdWktc3R5bGVzPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuc3R5bGVzKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnN0eWxlcyk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiXCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTcoZGVwdGgwLGRhdGEpIHtcbiAgXG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazEsIGhlbHBlcjtcbiAgYnVmZmVyICs9IFwiPGxhYmVsIHN1aS1pbnB1dC1sYWJlbCBmb3I9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5pbnB1dExhYmVsSWQpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuaW5wdXRMYWJlbElkKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCI+XCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmxhYmVsKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmxhYmVsKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIjwvbGFiZWw+XCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuICBidWZmZXIgKz0gXCI8ZGl2IFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMC5pZCksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSgxLCBwcm9ncmFtMSwgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCIgc3VpLWlucHV0IHN1aS10ZXh0YXJlYT1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLnRleHRhcmVhKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnRleHRhcmVhKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCIgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwWydjbGFzcyddKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDMsIHByb2dyYW0zLCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAuc3R5bGVzKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDUsIHByb2dyYW01LCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIj5cXG5cdFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMC5sYWJlbCksIHtoYXNoOnt9LGludmVyc2U6c2VsZi5ub29wLGZuOnNlbGYucHJvZ3JhbSg3LCBwcm9ncmFtNywgZGF0YSksZGF0YTpkYXRhfSk7XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCJcXG4gICAgPHRleHRhcmVhIG5hbWU9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5uYW1lKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLm5hbWUpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIiBwbGFjZWhvbGRlcj1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLnBsYWNlaG9sZGVyVGV4dCkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5wbGFjZWhvbGRlclRleHQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIiBpZD1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmlucHV0TGFiZWxJZCkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5pbnB1dExhYmVsSWQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIj48L3RleHRhcmVhPlxcbjwvZGl2PlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9KTtcbiIsIi8vIFJlcXVpcmUgZGVwZW5kZW5jaWVzXG5cbnZhciAkID0gcmVxdWlyZSgnanF1ZXJ5JyksXG5cdF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG5cbnZhciBTdWlJbnB1dEJhc2VJbnRlcmZhY2UgPSByZXF1aXJlKCcuLi9zdWktaW5wdXQtYmFzZS1pbnRlcmZhY2UnKTtcblxudmFyIHRlbXBsYXRlID0gcmVxdWlyZSgnLi90ZW1wbGF0ZS5oYnMnKSxcblx0Y21zVGVtcGxhdGUgPSByZXF1aXJlKCcuL2Ntcy10ZW1wbGF0ZS5oYnMnKTtcblxuXG4vLyBwcm9wZXJ0aWVzIGZyb20gYWJzdHJhY3Qgc3VwZXJjbGFzczpcbi8vIHRoaXMuZGF0YVxuLy8gdGhpcy5jdXJyZW50VmFsdWVcblxuZnVuY3Rpb24gU3VpVGV4dGFyZWEob3B0cywgJGRvYywgJHdpbikge1xuXHRTdWlJbnB1dEJhc2VJbnRlcmZhY2UuY2FsbCh0aGlzLCBvcHRzKTtcbn1cblxuJC5leHRlbmQoU3VpVGV4dGFyZWEucHJvdG90eXBlLCBTdWlJbnB1dEJhc2VJbnRlcmZhY2UucHJvdG90eXBlLCB7XG5cdF9nZXRUZW1wbGF0ZTogZnVuY3Rpb24odGVtcGxhdGVUeXBlKSB7XG5cdFx0cmV0dXJuIHRlbXBsYXRlVHlwZSA9PT0gJ2NtcycgPyBjbXNUZW1wbGF0ZSA6IHRlbXBsYXRlO1xuXHR9LFxuXHRfZmluZElucHV0SW5NYXJrdXA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLiRlbC5maW5kKCd0ZXh0YXJlYScpO1xuXHR9XG59KTtcblxuLy8gRXhwb3J0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdHMpIHtcblx0cmV0dXJuIG5ldyBTdWlUZXh0YXJlYShvcHRzKTtcbn07IiwiLy8gaGJzZnkgY29tcGlsZWQgSGFuZGxlYmFycyB0ZW1wbGF0ZVxudmFyIEhhbmRsZWJhcnNDb21waWxlciA9IHJlcXVpcmUoJ2hic2Z5L3J1bnRpbWUnKTtcbm1vZHVsZS5leHBvcnRzID0gSGFuZGxlYmFyc0NvbXBpbGVyLnRlbXBsYXRlKGZ1bmN0aW9uIChIYW5kbGViYXJzLGRlcHRoMCxoZWxwZXJzLHBhcnRpYWxzLGRhdGEpIHtcbiAgdGhpcy5jb21waWxlckluZm8gPSBbNCwnPj0gMS4wLjAnXTtcbmhlbHBlcnMgPSB0aGlzLm1lcmdlKGhlbHBlcnMsIEhhbmRsZWJhcnMuaGVscGVycyk7IGRhdGEgPSBkYXRhIHx8IHt9O1xuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXIsIGZ1bmN0aW9uVHlwZT1cImZ1bmN0aW9uXCIsIGVzY2FwZUV4cHJlc3Npb249dGhpcy5lc2NhcGVFeHByZXNzaW9uLCBzZWxmPXRoaXM7XG5cbmZ1bmN0aW9uIHByb2dyYW0xKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImlkPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuaWQpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuaWQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW0zKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImNsYXNzPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnNbJ2NsYXNzJ10pIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDBbJ2NsYXNzJ10pOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW01KGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcInN1aS1zdHlsZXM9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5zdHlsZXMpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuc3R5bGVzKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCJcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG5mdW5jdGlvbiBwcm9ncmFtNyhkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCI8bGFiZWwgc3VpLWlucHV0LWxhYmVsIGZvcj1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmlucHV0TGFiZWxJZCkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5pbnB1dExhYmVsSWQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIj5cIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMubGFiZWwpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAubGFiZWwpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiPC9sYWJlbD5cIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG4gIGJ1ZmZlciArPSBcIjxkaXYgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmlkKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDEsIHByb2dyYW0xLCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIiBzdWktaW5wdXQgc3VpLXRleHRhcmVhPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMudGV4dGFyZWEpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAudGV4dGFyZWEpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDBbJ2NsYXNzJ10pLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oMywgcHJvZ3JhbTMsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiIFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMC5zdHlsZXMpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oNSwgcHJvZ3JhbTUsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiPlxcblx0XCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmxhYmVsKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDcsIHByb2dyYW03LCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIlxcbiAgICA8dGV4dGFyZWEgbmFtZT1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLm5hbWUpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAubmFtZSk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiIHBsYWNlaG9sZGVyPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMucGxhY2Vob2xkZXJUZXh0KSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnBsYWNlaG9sZGVyVGV4dCk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiIGlkPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuaW5wdXRMYWJlbElkKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmlucHV0TGFiZWxJZCk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiPjwvdGV4dGFyZWE+XFxuPC9kaXY+XCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH0pO1xuIiwiLy8gaGJzZnkgY29tcGlsZWQgSGFuZGxlYmFycyB0ZW1wbGF0ZVxudmFyIEhhbmRsZWJhcnNDb21waWxlciA9IHJlcXVpcmUoJ2hic2Z5L3J1bnRpbWUnKTtcbm1vZHVsZS5leHBvcnRzID0gSGFuZGxlYmFyc0NvbXBpbGVyLnRlbXBsYXRlKGZ1bmN0aW9uIChIYW5kbGViYXJzLGRlcHRoMCxoZWxwZXJzLHBhcnRpYWxzLGRhdGEpIHtcbiAgdGhpcy5jb21waWxlckluZm8gPSBbNCwnPj0gMS4wLjAnXTtcbmhlbHBlcnMgPSB0aGlzLm1lcmdlKGhlbHBlcnMsIEhhbmRsZWJhcnMuaGVscGVycyk7IGRhdGEgPSBkYXRhIHx8IHt9O1xuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXIsIGZ1bmN0aW9uVHlwZT1cImZ1bmN0aW9uXCIsIGVzY2FwZUV4cHJlc3Npb249dGhpcy5lc2NhcGVFeHByZXNzaW9uLCBzZWxmPXRoaXM7XG5cbmZ1bmN0aW9uIHByb2dyYW0xKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImlkPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuaWQpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuaWQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW0zKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImNsYXNzPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnNbJ2NsYXNzJ10pIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDBbJ2NsYXNzJ10pOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW01KGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcInN1aS1zdHlsZXM9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5zdHlsZXMpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuc3R5bGVzKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCJcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG5mdW5jdGlvbiBwcm9ncmFtNyhkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCI8bGFiZWwgc3VpLWlucHV0LWxhYmVsIGZvcj1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmlucHV0TGFiZWxJZCkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5pbnB1dExhYmVsSWQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIj5cIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMubGFiZWwpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAubGFiZWwpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiPC9sYWJlbD5cIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG4gIGJ1ZmZlciArPSBcIjxkaXYgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmlkKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDEsIHByb2dyYW0xLCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIiBzdWktaW5wdXQgc3VpLXRleHQ9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy50ZXh0KSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnRleHQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDBbJ2NsYXNzJ10pLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oMywgcHJvZ3JhbTMsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiIFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMC5zdHlsZXMpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oNSwgcHJvZ3JhbTUsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiPlxcblx0XCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmxhYmVsKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDcsIHByb2dyYW03LCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIlxcbiAgICA8aW5wdXQgdHlwZT1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmlucHV0VHlwZSkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5pbnB1dFR5cGUpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIiBuYW1lPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMubmFtZSkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5uYW1lKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCIgcGxhY2Vob2xkZXI9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5wbGFjZWhvbGRlclRleHQpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAucGxhY2Vob2xkZXJUZXh0KTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCIgaWQ9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5pbnB1dExhYmVsSWQpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuaW5wdXRMYWJlbElkKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCI+XFxuPC9kaXY+XCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH0pO1xuIiwidmFyICQgPSByZXF1aXJlKCdqcXVlcnknKSxcblx0XyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcblxuZnVuY3Rpb24gU3VpVGV4dGlucHV0QWRkcmVzcygpIHt9XG5cbiQuZXh0ZW5kKFN1aVRleHRpbnB1dEFkZHJlc3MucHJvdG90eXBlLCB7XG5cblx0YWRkcmVzczoge1xuXHRcdC8qKlxuXHRcdCAqIHRoaXMgZXh0ZW5zaW9uIGFjY2VwdHMgc29tZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcblx0XHQgKiBAb3BzLmF1dG9jb21wbGV0ZVR5cGVzID0ge30uIFR5cGVzIG9mIHJlc3VsdHMgdG8gc2hvdyBhY2NvcmRpbmcgdG8gR29vZ2xlIFBsYWNlcyBkb2N1bWVudGF0aW9uLlxuXHRcdCAqICAgICAgICAgcGFzcyAnZ2VvY29kZScgdG8gbG9hZCBvbmx5IGNpdGllc1xuXHRcdCAqL1xuXHRcdGV4dGVuc2lvbkluaXQ6IGZ1bmN0aW9uKG9wdHMpIHtcblxuXHRcdFx0Ly8gc3BlY2lhbCBhdHRyaWJ1dGVzIHJlbGF0ZWQgdG8gdGhpcyBleHRlbnNpb25cblx0XHRcdHRoaXMuYXV0b2NvbXBsZXRlVHlwZXM7XG5cdFx0XHR0aGlzLmF1dG9jb21wbGV0ZTtcblx0XHRcdHRoaXMuYXV0b2NvbXBsZXRlTGlzdGVuZXI7XG5cblx0XHRcdC8vIHRoaXMgZXJyb3IgaGFwcGVucyBub3JtYWxseSBmcm9tIGxvY2FsIGVudiB3aGVuIHRoZXJlIGlzIG5vIGludGVybmV0IGNvbm5lY3Rpb25cblx0XHRcdGlmICggdHlwZW9mIGdvb2dsZSA9PSAndW5kZWZpbmVkJyB8fCBnb29nbGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHR0aGlzLmlzQWRkcmVzc0luaXRpYWxpemVkID0gZmFsc2U7XG5cdFx0XHRcdGNvbnNvbGUubG9nKCdTZXR0aW5nIGFkZHJlc3MgZmllbGQgYXV0b2NvbXBsZXRlOiBnb29nbGUgaXMgbm90IGRlZmluZWQnKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmF1dG9jb21wbGV0ZVR5cGVzID0gdHlwZW9mIHRoaXMuYXV0b2NvbXBsZXRlVHlwZXMgIT09ICd1bmRlZmluZWQnID8gdGhpcy5hdXRvY29tcGxldGVUeXBlcyA6IHt9O1xuXG5cdFx0XHR0aGlzLmlzQWRkcmVzc0luaXRpYWxpemVkID0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0ZXh0ZW5zaW9uQmluZDogZnVuY3Rpb24oIG9wdHMgKSB7XG5cblx0XHRcdGlmICggIXRoaXMuaXNBZGRyZXNzSW5pdGlhbGl6ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5hdXRvY29tcGxldGUgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZSggdGhpcy4kaW5wdXRbMF0sIGF1dG9jb21wbGV0ZV9vcHRpb25zICk7XG5cblx0XHRcdHRoaXMubGlzdGVuZXIgPSBnb29nbGUubWFwcy5ldmVudC5hZGRMaXN0ZW5lciggdGhpcy5hdXRvY29tcGxldGUsICdwbGFjZV9jaGFuZ2VkJywgZnVuY3Rpb24oZSkge1xuXHRcdFx0XHR0aGlzLl9hZGRyZXNzUGxhY2VIYXNDaGFuZ2VkKGUpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdGV4dGVuc2lvblVuYmluZDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdGlmICggdGhpcy5hdXRvY29tcGxldGUgKSB7XG5cdFx0XHRcdGdvb2dsZS5tYXBzLmV2ZW50LmNsZWFySW5zdGFuY2VMaXN0ZW5lcnModGhpcy5hdXRvY29tcGxldGUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCB0aGlzLmxpc3RlbmVyICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdGdvb2dsZS5tYXBzLmV2ZW50LnJlbW92ZUxpc3RlbmVyKHRoaXMubGlzdGVuZXIpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gcmVtb3ZlIHRoZSBtYXJrdXAgZm9yIHRoZSBsaXN0IG9mIGVsZW1lbnRzXG5cdFx0XHQkKFwiLnBhYy1jb250YWluZXJcIikucmVtb3ZlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIHRoZSBwbGFjZSBmcm9tIHRoZSBhdXRvY29tcGxldGUgb2JqZWN0XG5cdCAqIEByZXR1cm4ge1xuXHQgKlxuXHQgKiB9XG5cdCAqL1xuXHRfYWRkcmVzc0dldFBsYWNlOiBmdW5jdGlvbigpIHtcblxuXHRcdHZhciBwbGFjZSA9IHRoaXMuYXV0b2NvbXBsZXRlLmdldFBsYWNlKCk7XG5cblx0XHR2YXIgZmllbGRzID0ge307XG5cblx0XHQvLyBsb2FkIHppcCwgc3RyZWV0TnVtYmVyLCBjaXR5LCBhZGRyZXNzLCBjb3VudHJ5XG5cdFx0aWYgKCBwbGFjZS5hZGRyZXNzX2NvbXBvbmVudHMgKSB7XG5cdFx0XHRmb3IgKCB2YXIgaSBpbiBwbGFjZS5hZGRyZXNzX2NvbXBvbmVudHMgKSB7XG5cblx0XHRcdFx0dmFyIHBsYWNlQ29tcG9uZW50VHlwZSA9IHBsYWNlLmFkZHJlc3NfY29tcG9uZW50c1tpXS50eXBlc1swXTsgLy8gZXhwZWN0cyBwb3N0YWxfY29kZSwgc3RyZWV0X251bWJlciwgcm91dGUsIGxvY2FsaXR5LCBhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzEsIGNvdW50cnlcblx0XHRcdFx0dmFyIGNtc0FkZHJlc3NDb21wb25lbnRUeXBlID0gX2NvbXBvbmVudFR5cGVFcXVpdmFsZW5jZXNbcGxhY2VDb21wb25lbnRUeXBlXTsgLy8gd2lsbCBiZSB6aXAsIHN0cmVldE51bWJlciwgYWRkcmVzcywgY2l0eSwgc3RhdGUsIGNvdW50cnlcblxuXHRcdFx0XHRpZiAoIGNtc0FkZHJlc3NDb21wb25lbnRUeXBlICkge1xuXHRcdFx0XHRcdGZpZWxkc1sgY21zQWRkcmVzc0NvbXBvbmVudFR5cGUgXSA9IHBsYWNlLmFkZHJlc3NfY29tcG9uZW50c1tpXS5sb25nX25hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRfLmRlZmF1bHRzKCBmaWVsZHMsIHtcblx0XHRcdG5hbWU6IHBsYWNlLm5hbWUsXG5cdFx0XHRzdHJlZXROdW1iZXI6ICcnLFxuXHRcdFx0cm91dGU6ICcnLFxuXHRcdFx0YWRkcmVzczogZmllbGRzLnN0cmVldF9udW1iZXIgKycgJysgZmllbGRzLnJvdXRlLFxuXHRcdFx0Y2l0eTogJycsXG5cdFx0XHRzdGF0ZTogJycsXG5cdFx0XHR6aXA6ICcnLFxuXHRcdFx0Y291bnRyeTogJydcblx0XHR9KTtcblxuXHRcdHJldHVybiBmaWVsZHM7XG5cdH0sXG5cblx0Ly8gYWRkcmVzcyBjaGFuZ2UgZXZlbnQgaGFuZGxlclxuXHRfYWRkcmVzc1BsYWNlSGFzQ2hhbmdlZDogZnVuY3Rpb24oKSB7XG5cblx0XHR0aGlzLnBsYWNlID0gdGhpcy5fYWRkcmVzc0dldFBsYWNlKCk7XG5cdFx0dGhpcy4kaW5wdXQuYWRkQ2xhc3MoJ2F1dG9jb21wbGV0ZWQnKTtcblx0fSxcbn0pO1xuXG4vLyBlcXVpdmFsZW5jZXMgYmV0d2VlbiBHb29nbGUgUGxhY2VzIG5hbWVzIGFuZCBTVUkgbmFtZXNcbnZhciBfY29tcG9uZW50VHlwZUVxdWl2YWxlbmNlcyA9IHtcblx0cG9zdGFsX2NvZGU6ICd6aXAnLFxuXHRzdHJlZXRfbnVtYmVyOiAnc3RyZWV0TnVtYmVyJyxcblx0cm91dGU6ICdyb3V0ZScsXG5cdGxvY2FsaXR5OiAnY2l0eScsXG5cdGFkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMTogJ3N0YXRlJyxcblx0Y291bnRyeTogJ2NvdW50cnknXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN1aVRleHRpbnB1dEFkZHJlc3M7IiwidmFyICQgPSB3aW5kb3cualF1ZXJ5O1xudmFyIF8gPSB3aW5kb3cuXztcblxuZnVuY3Rpb24gU3VpVGV4dGlucHV0RGF0ZXBpY2tlcigpIHt9XG5cbiQuZXh0ZW5kKFN1aVRleHRpbnB1dERhdGVwaWNrZXIucHJvdG90eXBlLCB7XG5cblx0ZGF0ZXBpY2tlcjoge1xuXG5cdFx0Ly8gU2V0dXAgaW5pdGlhbCBleHRlbnNpb24gdmFycy4gVGhpcyBpcyBjYWxsZWQgaW4gdGhlIG1haW4gU3VpRHJvcGRvd24gZnVuY3Rpb25cblx0XHQvLyBpbiB0aGUgaW5pdEV4dGVuc2lvbnMgbWV0aG9kXG5cdFx0ZXh0ZW5zaW9uSW5pdDogZnVuY3Rpb24ob3B0cykge1xuXG5cdFx0XHRpZiAoIHR5cGVvZiAkLmRhdGVwaWNrZXIgPT09ICd1bmRlZmluZWQnICkge1xuXHRcdFx0XHR0aGlzLmlzRGF0ZXBpY2tlckVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGRhdGVGb3JtYXQgPSBcIm1tL2RkL3l5XCI7XG5cblx0XHRcdHRoaXMuJGlucHV0LmRhdGVwaWNrZXIoe1xuXHRcdFx0XHRkYXRlRm9ybWF0OiBkYXRlRm9ybWF0LFxuXHRcdFx0XHRnb3RvQ3VycmVudDogdHJ1ZSxcblx0XHRcdFx0Y29uc3RyYWluSW5wdXQ6IHRydWVcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnZhbHVlRm9ybWF0ID0gJ2RhdGUnO1xuXHRcdFx0dGhpcy5pc0RhdGVwaWNrZXJFbmFibGVkID0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gZXh0ZW5zaW9uQmluZDogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gfSxcblx0fSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN1aVRleHRpbnB1dERhdGVwaWNrZXI7IiwidmFyICQgPSB3aW5kb3cualF1ZXJ5O1xudmFyIF8gPSB3aW5kb3cuXztcblxuZnVuY3Rpb24gU3VpVGV4dGlucHV0RGF0ZXBpY2tlcigpIHt9XG5cbiQuZXh0ZW5kKFN1aVRleHRpbnB1dERhdGVwaWNrZXIucHJvdG90eXBlLCB7XG5cblx0dGltZXBpY2tlcjoge1xuXG5cdFx0Ly8gU2V0dXAgaW5pdGlhbCBleHRlbnNpb24gdmFycy4gVGhpcyBpcyBjYWxsZWQgaW4gdGhlIG1haW4gU3VpRHJvcGRvd24gZnVuY3Rpb25cblx0XHQvLyBpbiB0aGUgaW5pdEV4dGVuc2lvbnMgbWV0aG9kXG5cdFx0ZXh0ZW5zaW9uSW5pdDogZnVuY3Rpb24ob3B0cykge1xuXG5cdFx0XHRpZiAoIHR5cGVvZiAkLnRpbWVwaWNrZXIgPT09ICd1bmRlZmluZWQnICkge1xuXHRcdFx0XHR0aGlzLmlzVGltZXBpY2tlckVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGRhdGVGb3JtYXQgPSBcIm1tL2RkL3l5XCI7XG5cblx0XHRcdHRoaXMuJGlucHV0LnRpbWVwaWNrZXIoe1xuXHRcdFx0XHRzY3JvbGxEZWZhdWx0OiAnbm93JyAvLyBkYXRlIHRoYXQgYXBwZWFycyBpcyBjdXJyZW50LCBub3QgMTI6MDBhbSwgbm9ib2R5IHdhbnRzIHRoYXRcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnZhbHVlRm9ybWF0ID0gJ3RpbWUnO1xuXHRcdFx0dGhpcy5pc1RpbWVwaWNrZXJFbmFibGVkID0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gZXh0ZW5zaW9uQmluZDogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gfSxcblx0fSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN1aVRleHRpbnB1dERhdGVwaWNrZXI7IiwiLy8gUmVxdWlyZSBkZXBlbmRlbmNpZXNcblxudmFyICQgPSByZXF1aXJlKCdqcXVlcnknKSxcblx0XyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcblxudmFyIFN1aUlucHV0QmFzZUludGVyZmFjZSA9IHJlcXVpcmUoJy4uL3N1aS1pbnB1dC1iYXNlLWludGVyZmFjZScpO1xuXG52YXIgdGVtcGxhdGUgPSByZXF1aXJlKCcuL3RlbXBsYXRlLmhicycpLFxuXHRjbXNUZW1wbGF0ZSA9IHJlcXVpcmUoJy4vY21zLXRlbXBsYXRlLmhicycpO1xuXG4vLyBEZWZpbmUgYW55IHBvc3NpYmxlIGV4dGVuc2lvbnMgaGVyZVxudmFyIF9leHRlbnNpb25zID0ge1xuXHRhZGRyZXNzOiByZXF1aXJlKCcuL2V4dGVuc2lvbnMvc3VpLnRleHRpbnB1dC5hZGRyZXNzLmpzJyksXG5cdGRhdGVwaWNrZXI6IHJlcXVpcmUoJy4vZXh0ZW5zaW9ucy9zdWkudGV4dGlucHV0LmRhdGVwaWNrZXIuanMnKSxcblx0dGltZXBpY2tlcjogcmVxdWlyZSgnLi9leHRlbnNpb25zL3N1aS50ZXh0aW5wdXQudGltZXBpY2tlci5qcycpXG59O1xuXG4vLy8vXG4vLy8gVGhlIGdlbmVyaWMgXCJUZXh0XCIgaW5wdXQgaXMgdXNlZCBmb3IgYSB2YXJpZXR5IG9mIHR5cGVzXG4vLy8gdGhhdCBzaGFyZSBmdW5jdGlvbmFsaXR5LiAgX3ZhbGlkRm9ybWF0cyBtYXBzIHR5cGUgdG8gdGhlXG4vLy8gcmVnZXggdXNlZCB0byB2YWxpZGF0ZSBpdHMgdmFsdWUuXG4vL1xudmFyIF92YWx1ZUZvcm1hdFJlZ0V4cHMgPSB7XG5cdGVtYWlsOiAvXihbQS1aYS16MC05X1xcLVxcLlxcKzpdKStcXEAoW0EtWmEtejAtOV9cXC1cXC5dKStcXC4oW0EtWmEtel0qKSQvLFxuXHRkYXRlOiAvXlswMV0/WzAtOV17MX1cXC9bMDEyXT9bMS05XXsxfVxcL1swLTldezEsNH0kLywgLy8gbWF0Y2hlcyAwOC8yMy8yMDE1XG5cdHRpbWU6IC9eWzAxMl0/WzEtOV17MX06WzAtNV1bMC05XVtcXHNdKihhbXxwbSk/JC9pIC8vIG1hdGNoZXMgMDM6MTVhbSwgMzoxNWFtLCAzOjE1QU0sIDM6MTUgQU1cbn07XG5cbi8vIHByb3BlcnRpZXMgZnJvbSBhYnN0cmFjdCBzdXBlcmNsYXNzOlxuLy8gdGhpcy5kYXRhXG4vLyB0aGlzLmN1cnJlbnRWYWx1ZVxuZnVuY3Rpb24gU3VpVGV4dGlucHV0KG9wdHMpIHtcblx0U3VpSW5wdXRCYXNlSW50ZXJmYWNlLmNhbGwodGhpcywgb3B0cyk7XG5cblx0dGhpcy5kYXRhLnZhbHVlRm9ybWF0ID0gb3B0cy52YWx1ZUZvcm1hdCB8fCAndGV4dCc7XG5cbn1cblxuJC5leHRlbmQoU3VpVGV4dGlucHV0LnByb3RvdHlwZSwgU3VpSW5wdXRCYXNlSW50ZXJmYWNlLnByb3RvdHlwZSwge1xuXHRfZ2V0VGVtcGxhdGU6IGZ1bmN0aW9uKHRlbXBsYXRlVHlwZSkge1xuXHRcdHJldHVybiB0ZW1wbGF0ZVR5cGUgPT09ICdjbXMnID8gY21zVGVtcGxhdGUgOiB0ZW1wbGF0ZTtcblx0fSxcblxuXHRfZ2V0QXZhaWxhYmxlRXh0ZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIF9leHRlbnNpb25zO1xuXHR9LFxuXG5cdHZhbGlkYXRlSW5wdXRUeXBlOiBmdW5jdGlvbigpIHtcblx0XHQvLyBjaGVjayBmb3JtYXQgb2Ygc3BlY2lmaWMgdHlwZXNcblx0XHRpZiAoX3ZhbHVlRm9ybWF0UmVnRXhwc1t0aGlzLnZhbHVlRm9ybWF0XSAmJiAhX3ZhbHVlRm9ybWF0UmVnRXhwc1t0aGlzLnZhbHVlRm9ybWF0XS50ZXN0KCAkLnRyaW0odGhpcy5nZXRWYWx1ZSgpKSApKSB7XG5cdFx0XHR0aGlzLl90aHJvd0Vycm9yKCdoYXNJbnZhbGlkRm9ybWF0JywgdGhpcy5nZXRVc2VyRmFjaW5nTmFtZSgpKycgaGFzIGFuIGludmFsaWQgZm9ybWF0LicpO1xuXHRcdH1cblx0fVxufSk7XG5cbi8vLy8vXG4vLy8vIEV4cG9ydFxuLy8vICBUaGlzIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBoYXMgZXh0ZW5zaW9ucyBhdmFpbGFibGVcbi8vXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdHMsICRkb2MsICR3aW4pIHtcblxuXHQvLyBHZXQgdGhlIGV4dGVuc2lvbnMgdGhhdCBoYXZlIGJlZW4gcGFzc2VkXG5cdHZhciBleHRlbnNpb25zVG9JbmNsdWRlID0gdHlwZW9mIG9wdHMuZXh0ZW5zaW9ucyAhPT0gJ3VuZGVmaW5lZCcgPyBvcHRzLmV4dGVuc2lvbnMgOiBbXTtcblx0aWYgKCB0eXBlb2YgZXh0ZW5zaW9uc1RvSW5jbHVkZSA9PT0gJ3N0cmluZycgKSB7XG5cdFx0ZXh0ZW5zaW9uc1RvSW5jbHVkZSA9IGV4dGVuc2lvbnNUb0luY2x1ZGUuc3BsaXQoJyAnKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIG5ldyBjb25zdHJ1Y3RvciBzbyB0aGF0IGVhY2ggZHJvcGRvd24gY2FuIGJlXG5cdC8vIHByb3Blcmx5IGV4dGVuZGVkIHRoZSBkZWZpbmVkIGV4dGVuc2lvbnMuXG5cdGZ1bmN0aW9uIEluc3RhbnRpYXRlZENvbXBvbmVudChvcHRzLCAkZG9jLCAkd2luKSB7XG5cdFx0U3VpVGV4dGlucHV0LmNhbGwodGhpcywgb3B0cywgJGRvYywgJHdpbik7XG5cdH1cblxuXHQvLyBJbnN0YW50aWF0ZWQgZHJvcGRvd24gaXMgaWRlbnRpY2FsIHRvIHRoZSBTVUkgRHJvcGRvd25cblx0JC5leHRlbmQoSW5zdGFudGlhdGVkQ29tcG9uZW50LnByb3RvdHlwZSwgU3VpVGV4dGlucHV0LnByb3RvdHlwZSk7XG5cblx0Ly8gTG9vcCB0aHJvdWdoIGFuZCBleHRlbmQgdGhlIFN1aVRleHRpbnB1dCBwcm90b3R5cGUgd2l0aCB0aGUgZXh0ZW5zaW9uc1xuXHRfLmVhY2goIGV4dGVuc2lvbnNUb0luY2x1ZGUsIGZ1bmN0aW9uKGV4dGVuc2lvbikge1xuXHRcdGlmIChfZXh0ZW5zaW9uc1tleHRlbnNpb25dKSB7XG5cdFx0XHQkLmV4dGVuZChJbnN0YW50aWF0ZWRDb21wb25lbnQucHJvdG90eXBlLCBfZXh0ZW5zaW9uc1tleHRlbnNpb25dLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gbmV3IEluc3RhbnRpYXRlZENvbXBvbmVudChvcHRzLCAkZG9jLCAkd2luKTtcbn07IiwiLy8gaGJzZnkgY29tcGlsZWQgSGFuZGxlYmFycyB0ZW1wbGF0ZVxudmFyIEhhbmRsZWJhcnNDb21waWxlciA9IHJlcXVpcmUoJ2hic2Z5L3J1bnRpbWUnKTtcbm1vZHVsZS5leHBvcnRzID0gSGFuZGxlYmFyc0NvbXBpbGVyLnRlbXBsYXRlKGZ1bmN0aW9uIChIYW5kbGViYXJzLGRlcHRoMCxoZWxwZXJzLHBhcnRpYWxzLGRhdGEpIHtcbiAgdGhpcy5jb21waWxlckluZm8gPSBbNCwnPj0gMS4wLjAnXTtcbmhlbHBlcnMgPSB0aGlzLm1lcmdlKGhlbHBlcnMsIEhhbmRsZWJhcnMuaGVscGVycyk7IGRhdGEgPSBkYXRhIHx8IHt9O1xuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXIsIGZ1bmN0aW9uVHlwZT1cImZ1bmN0aW9uXCIsIGVzY2FwZUV4cHJlc3Npb249dGhpcy5lc2NhcGVFeHByZXNzaW9uLCBzZWxmPXRoaXM7XG5cbmZ1bmN0aW9uIHByb2dyYW0xKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImlkPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuaWQpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuaWQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW0zKGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcImNsYXNzPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnNbJ2NsYXNzJ10pIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDBbJ2NsYXNzJ10pOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbmZ1bmN0aW9uIHByb2dyYW01KGRlcHRoMCxkYXRhKSB7XG4gIFxuICB2YXIgYnVmZmVyID0gXCJcIiwgc3RhY2sxLCBoZWxwZXI7XG4gIGJ1ZmZlciArPSBcInN1aS1zdHlsZXM9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5zdHlsZXMpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAuc3R5bGVzKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCJcIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG5mdW5jdGlvbiBwcm9ncmFtNyhkZXB0aDAsZGF0YSkge1xuICBcbiAgdmFyIGJ1ZmZlciA9IFwiXCIsIHN0YWNrMSwgaGVscGVyO1xuICBidWZmZXIgKz0gXCI8bGFiZWwgc3VpLWlucHV0LWxhYmVsIGZvcj1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLmlucHV0TGFiZWxJZCkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5pbnB1dExhYmVsSWQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIj5cIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMubGFiZWwpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAubGFiZWwpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiPC9sYWJlbD5cIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG4gIGJ1ZmZlciArPSBcIjxkaXYgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmlkKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDEsIHByb2dyYW0xLCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIiBzdWktaW5wdXQgc3VpLXRleHQ9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy50ZXh0KSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnRleHQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDBbJ2NsYXNzJ10pLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oMywgcHJvZ3JhbTMsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiIFwiO1xuICBzdGFjazEgPSBoZWxwZXJzWydpZiddLmNhbGwoZGVwdGgwLCAoZGVwdGgwICYmIGRlcHRoMC5zdHlsZXMpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oNSwgcHJvZ3JhbTUsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiPlxcblx0XCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwLmxhYmVsKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDcsIHByb2dyYW03LCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIlxcbiAgICA8aW5wdXQgdHlwZT1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLnZhbHVlRm9ybWF0KSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnZhbHVlRm9ybWF0KTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCIgbmFtZT1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLm5hbWUpIHsgc3RhY2sxID0gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KTsgfVxuICBlbHNlIHsgaGVscGVyID0gKGRlcHRoMCAmJiBkZXB0aDAubmFtZSk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiIHBsYWNlaG9sZGVyPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMucGxhY2Vob2xkZXJUZXh0KSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLnBsYWNlaG9sZGVyVGV4dCk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiIGlkPVxcXCJcIjtcbiAgaWYgKGhlbHBlciA9IGhlbHBlcnMuaW5wdXRMYWJlbElkKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmlucHV0TGFiZWxJZCk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiPlxcbjwvZGl2PlxcblwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9KTtcbiIsIi8vIFJlcXVpcmUgZGVwZW5kZW5jaWVzXG5cbnZhciAkID0gcmVxdWlyZSgnanF1ZXJ5JyksXG5cdF8gPSByZXF1aXJlKCd1bmRlcnNjb3JlJyk7XG5cbnJlcXVpcmUoJy4uLy4uL2hlbHBlcnMvYXR0cmlidXRlSGVscGVycycpO1xuXG52YXIgU3VpQ29tcG9uZW50QmFzZUludGVyZmFjZSA9IHJlcXVpcmUoJy4uL3N1aS1jb21wb25lbnQtYmFzZS1pbnRlcmZhY2UnKTtcblxudmFyIHRlbXBsYXRlID0gcmVxdWlyZSgnLi90ZW1wbGF0ZS5oYnMnKTtcblxuLy8gTW9kYWxcbmZ1bmN0aW9uIFN1aU1vZGFsKG9wdHMsICRkb2MsICR3aW4pIHtcblx0U3VpQ29tcG9uZW50QmFzZUludGVyZmFjZS5jYWxsKHRoaXMsIG9wdHMpO1xuXG5cdHRoaXMuJGRvYyA9ICRkb2M7XG5cdHRoaXMuJHdpbiA9ICR3aW47XG5cdHRoaXMuJGJvZHkgPSAkKCdib2R5Jyk7XG5cblx0dGhpcy5kYXRhID0gb3B0cztcblxuXHR0aGlzLmFmdGVySW5pdCA9IHRoaXMuZGF0YS5hZnRlckluaXQgfHwgJC5ub29wO1xuXG5cdC8vIHRyYWNraW5nXG5cdHRoaXMuaXNPcGVuID0gZmFsc2U7XG5cdHRoaXMuaXNEZXN0cm95ZWQgPSBmYWxzZTtcbn1cblxuJC5leHRlbmQoU3VpTW9kYWwucHJvdG90eXBlLCBTdWlDb21wb25lbnRCYXNlSW50ZXJmYWNlLnByb3RvdHlwZSwge1xuXG5cdF9nZXRUZW1wbGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRlbXBsYXRlO1xuXHR9LFxuXG5cdC8vIFJlcGxhY2VzIHBsYWNlaG9sZGVyIG1hcmt1cCB3aXRoIHRlbXBsYXRlXG5cdC8vIGFuZCBzZXRzIFN1aURyb3Bkb3duIGRvbSBlbGVtZW50IHByb3BlcnRpZXNcblx0Ly8gQWRkcyBsaXN0ZW5lcnMuICBDYWxsZWQgd2hlbiBpbnN0YW50aWF0ZWQuXG5cdGluaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFN1aUNvbXBvbmVudEJhc2VJbnRlcmZhY2UucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKTtcblx0XHQvLyBwYXJlbnQgY2xhc3MgcHJvdmlkZXMgdGhpcy4kZWwgZnJvbSB0ZW1wbGF0ZVxuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB3aGF0ZXZlciBTVUkgY29tcG9uZW50cyBsaXZlIGluIHRoZVxuXHRcdC8vIGNvbnRlbnQgbG9hZGVkIGludG8gdGhlIG1vZGFsLlxuXHRcdFNVSS5pbml0Q29tcG9uZW50cyh0aGlzLiRlbCk7IC8vIGlzIGNhbGxlZCBTVUkuaW5pdENvbXBvbmVudHMoKSB0aGUgXCJwcm9wZXJcIiB3YXkgdG8gaW5pdGlhbGl6ZSBjb21wb25lbnRzP1xuXG5cdFx0Ly8gY2hlY2sgaWYgYWZ0ZXJJbml0IGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHBhc3NlZC5cblx0XHQvLyBhYm92ZSBwcm9wZXJ0eSBkZWZpbml0aW9uIG5vdCB3b3JraW5nLi4uLiB0aGlzLmFmdGVySW5pdCA9IHRoaXMuZGF0YS5hZnRlckluaXQgfHwgJC5ub29wO1xuXHRcdGlmKHR5cGVvZiB0aGlzLmFmdGVySW5pdCA9PSBcImZ1bmN0aW9uXCIpe1xuXHRcdFx0dGhpcy5hZnRlckluaXQodGhpcy4kZWwpO1xuXHRcdH1cblx0fSxcblxuXHR0b2dnbGVNb2RhbDogZnVuY3Rpb24oZSkge1xuXHRcdGlmIChlKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdGlmKHRoaXMuaXNPcGVuKSB7XG5cdFx0XHR0aGlzLmNsb3NlRHJvcGRvd24oKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vcGVuRHJvcGRvd24oKTtcblx0XHR9XG5cdH0sXG5cblx0b3Blbk1vZGFsOiBmdW5jdGlvbigpIHtcblx0XHRpZiAodGhpcy5pc09wZW4pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBkaXNhYmxlIHNjcm9sbGluZyBvbiBwYXJlbnRcblx0XHQvLyBUT0RPOiBtYWtlIHRoaXMgYm9keSBkaXNhYmxpbmcgd29yayEhXG5cdFx0dGhpcy5kaXNhYmxlQm9keVNjcm9sbGluZygpO1xuXG5cdFx0dGhpcy4kZWwuYmVmb3JlKFwiPGRpdiBzdWktbW9kYWwtb3ZlcmxheT48L2Rpdj5cIik7XG5cblx0XHQvLyBvcGVuIHRoaXMgaW5zdGFuY2Vcblx0XHR0aGlzLmlzT3BlbiA9IHRydWU7XG5cdFx0dGhpcy4kZWwuYWRkQXR0clZhbCgnc3VpLW1vZGFsJywgJ2lzLW9wZW4nKTtcblxuXHRcdC8vIExpc3RlbiB0byBjbGlja3Mgb24gZG9jdW1lbnQgYW5kIGNsb3NlXG5cdFx0Ly8gaWYgaXQncyBOT1Qgb24gb25lIG9mIG91ciBkcm9wZG93biBlbGVtZW50c1xuXHRcdHRoaXMuJGRvYy5vbignY2xpY2suaGFuZGxlLWRvYy1jbGljaycsIHRoaXMuaGFuZGxlRG9jdW1lbnRDbGlja3MuYmluZCh0aGlzKSk7XG5cdH0sXG5cblx0Y2xvc2VNb2RhbDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCF0aGlzLmlzT3Blbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuJGVsLnByZXYoXCJbc3VpLW1vZGFsLW92ZXJsYXldXCIpLnJlbW92ZSgpO1xuXG5cdFx0dGhpcy5pc09wZW4gPSBmYWxzZTtcblx0XHR0aGlzLiRlbC5yZW1vdmVBdHRyVmFsKCdzdWktbW9kYWwnLCAnaXMtb3BlbicpO1xuXG5cdFx0Ly8gZW5hYmxlIHNjcm9sbGluZyBvbiBwYXJlbnRcblx0XHR0aGlzLmVuYWJsZUJvZHlTY3JvbGxpbmcoKTtcblxuXHRcdC8vIFJlbW92ZSB0aGUgZG9jdW1lbnQgY2xpY2sgbGlzdGVuZXIgZnJvbVxuXHRcdC8vIG9wZW5Ecm9wZG93blxuXHRcdHRoaXMuJGRvYy5vZmYoJ2NsaWNrLmhhbmRsZS1kb2MtY2xpY2snKTtcblx0fSxcblxuXHRkZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHQvLyBjYWxsIG9uQmVmb3JlQ2hhbmdlIGNhbGxiYWNrIGlmIGl0J3MgYSBmdW5jdGlvblxuXHRcdC8vIElmIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgY2FuY2VsIHRoZSBcImRlc3Ryb3kgZXZlbnRcIlxuXHRcdGlmICh0eXBlb2YgdGhpcy5fb25CZWZvcmVEZXN0cm95Q2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHZhciBjYW5jZWxEZXN0cm95ID0gdGhpcy5fb25CZWZvcmVEZXN0cm95Q2FsbGJhY2suY2FsbCh0aGlzKTtcblxuXHRcdFx0aWYoY2FuY2VsRGVzdHJveSA9PT0gdHJ1ZSl7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmNsb3NlTW9kYWwoKTsgLy8gY2FsbCB0aGlzIGluc3RlYWQgb2YganVzdCAucmVtb3ZlKCkgb24gXCJbc3VpLW1vZGFsLW92ZXJsYXldXCJcblx0XHQvLyB0aGlzLiRlbC5wcmV2KFwiW3N1aS1tb2RhbC1vdmVybGF5XVwiKS5yZW1vdmUoKTtcblx0XHR0aGlzLiRlbC5yZW1vdmUoKTtcblxuXHRcdC8vIGNhbGwgb25DaGFuZ2UgY2FsbGJhY2sgaWYgaXQncyBhIGZ1bmN0aW9uXG5cdFx0aWYgKHR5cGVvZiB0aGlzLl9vbkRlc3Ryb3lDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhpcy5fb25EZXN0cm95Q2FsbGJhY2suY2FsbCh0aGlzKTtcblx0XHR9XG5cdH0sXG5cblx0aGFuZGxlRG9jdW1lbnRDbGlja3M6IGZ1bmN0aW9uKGUpIHtcblx0XHR2YXIgX3RoaXMgPSB0aGlzLFxuXHRcdFx0JHRhcmdldCA9ICQoZS50YXJnZXQpO1xuXG5cdFx0Ly8gaWYgKCR0YXJnZXQucGFyZW50cygnW3N1aS1tb2RhbF0nKS5sZW5ndGggPT09IDAgJiYgISR0YXJnZXQuYXR0cihcInN1aS1tb2RhbFwiKSkge1xuXHRcdC8vIFx0X3RoaXMuY2xvc2VNb2RhbCgpO1xuXHRcdC8vIH1cblxuXHRcdGlmICgkdGFyZ2V0LmlzKCdbc3VpLW1vZGFsLW92ZXJsYXldJykpIHtcblx0XHRcdC8vIF90aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTtcblxuXHRcdFx0X3RoaXMuZGVzdHJveSgpO1xuXHRcdH1cblx0fSxcblxuXHRkaXNhYmxlQm9keVNjcm9sbGluZzogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kYm9keS5jc3MoJ292ZXJmbG93JywgJ2hpZGRlbicpO1xuXHR9LFxuXG5cdGVuYWJsZUJvZHlTY3JvbGxpbmc6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJGJvZHkuY3NzKCdvdmVyZmxvdycsICcnKTtcblx0fVxuXG59KTtcblxuLy8gRXhwb3J0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdHMsICRkb2MsICR3aW4pIHtcblx0cmV0dXJuIG5ldyBTdWlNb2RhbChvcHRzLCAkZG9jLCAkd2luKTtcbn07XG4iLCIvLyBoYnNmeSBjb21waWxlZCBIYW5kbGViYXJzIHRlbXBsYXRlXG52YXIgSGFuZGxlYmFyc0NvbXBpbGVyID0gcmVxdWlyZSgnaGJzZnkvcnVudGltZScpO1xubW9kdWxlLmV4cG9ydHMgPSBIYW5kbGViYXJzQ29tcGlsZXIudGVtcGxhdGUoZnVuY3Rpb24gKEhhbmRsZWJhcnMsZGVwdGgwLGhlbHBlcnMscGFydGlhbHMsZGF0YSkge1xuICB0aGlzLmNvbXBpbGVySW5mbyA9IFs0LCc+PSAxLjAuMCddO1xuaGVscGVycyA9IHRoaXMubWVyZ2UoaGVscGVycywgSGFuZGxlYmFycy5oZWxwZXJzKTsgZGF0YSA9IGRhdGEgfHwge307XG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazEsIGhlbHBlciwgZnVuY3Rpb25UeXBlPVwiZnVuY3Rpb25cIiwgZXNjYXBlRXhwcmVzc2lvbj10aGlzLmVzY2FwZUV4cHJlc3Npb24sIHNlbGY9dGhpcztcblxuZnVuY3Rpb24gcHJvZ3JhbTEoZGVwdGgwLGRhdGEpIHtcbiAgXG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazEsIGhlbHBlcjtcbiAgYnVmZmVyICs9IFwiaWQ9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5pZCkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5pZCk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiXCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTMoZGVwdGgwLGRhdGEpIHtcbiAgXG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazEsIGhlbHBlcjtcbiAgYnVmZmVyICs9IFwiY2xhc3M9XFxcIlwiO1xuICBpZiAoaGVscGVyID0gaGVscGVyc1snY2xhc3MnXSkgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMFsnY2xhc3MnXSk7IHN0YWNrMSA9IHR5cGVvZiBoZWxwZXIgPT09IGZ1bmN0aW9uVHlwZSA/IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSkgOiBoZWxwZXI7IH1cbiAgYnVmZmVyICs9IGVzY2FwZUV4cHJlc3Npb24oc3RhY2sxKVxuICAgICsgXCJcXFwiXCI7XG4gIHJldHVybiBidWZmZXI7XG4gIH1cblxuZnVuY3Rpb24gcHJvZ3JhbTUoZGVwdGgwLGRhdGEpIHtcbiAgXG4gIHZhciBidWZmZXIgPSBcIlwiLCBzdGFjazEsIGhlbHBlcjtcbiAgYnVmZmVyICs9IFwic3VpLXN0eWxlcz1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLnN0eWxlcykgeyBzdGFjazEgPSBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pOyB9XG4gIGVsc2UgeyBoZWxwZXIgPSAoZGVwdGgwICYmIGRlcHRoMC5zdHlsZXMpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGJ1ZmZlciArPSBlc2NhcGVFeHByZXNzaW9uKHN0YWNrMSlcbiAgICArIFwiXFxcIlwiO1xuICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgYnVmZmVyICs9IFwiPGRpdiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAuaWQpLCB7aGFzaDp7fSxpbnZlcnNlOnNlbGYubm9vcCxmbjpzZWxmLnByb2dyYW0oMSwgcHJvZ3JhbTEsIGRhdGEpLGRhdGE6ZGF0YX0pO1xuICBpZihzdGFjazEgfHwgc3RhY2sxID09PSAwKSB7IGJ1ZmZlciArPSBzdGFjazE7IH1cbiAgYnVmZmVyICs9IFwiIHN1aS1tb2RhbD1cXFwiXCI7XG4gIGlmIChoZWxwZXIgPSBoZWxwZXJzLm1vZGFsKSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLm1vZGFsKTsgc3RhY2sxID0gdHlwZW9mIGhlbHBlciA9PT0gZnVuY3Rpb25UeXBlID8gaGVscGVyLmNhbGwoZGVwdGgwLCB7aGFzaDp7fSxkYXRhOmRhdGF9KSA6IGhlbHBlcjsgfVxuICBidWZmZXIgKz0gZXNjYXBlRXhwcmVzc2lvbihzdGFjazEpXG4gICAgKyBcIlxcXCIgXCI7XG4gIHN0YWNrMSA9IGhlbHBlcnNbJ2lmJ10uY2FsbChkZXB0aDAsIChkZXB0aDAgJiYgZGVwdGgwWydjbGFzcyddKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDMsIHByb2dyYW0zLCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIiBcIjtcbiAgc3RhY2sxID0gaGVscGVyc1snaWYnXS5jYWxsKGRlcHRoMCwgKGRlcHRoMCAmJiBkZXB0aDAuc3R5bGVzKSwge2hhc2g6e30saW52ZXJzZTpzZWxmLm5vb3AsZm46c2VsZi5wcm9ncmFtKDUsIHByb2dyYW01LCBkYXRhKSxkYXRhOmRhdGF9KTtcbiAgaWYoc3RhY2sxIHx8IHN0YWNrMSA9PT0gMCkgeyBidWZmZXIgKz0gc3RhY2sxOyB9XG4gIGJ1ZmZlciArPSBcIj5cXG5cdFwiO1xuICBpZiAoaGVscGVyID0gaGVscGVycy5jb250ZW50KSB7IHN0YWNrMSA9IGhlbHBlci5jYWxsKGRlcHRoMCwge2hhc2g6e30sZGF0YTpkYXRhfSk7IH1cbiAgZWxzZSB7IGhlbHBlciA9IChkZXB0aDAgJiYgZGVwdGgwLmNvbnRlbnQpOyBzdGFjazEgPSB0eXBlb2YgaGVscGVyID09PSBmdW5jdGlvblR5cGUgPyBoZWxwZXIuY2FsbChkZXB0aDAsIHtoYXNoOnt9LGRhdGE6ZGF0YX0pIDogaGVscGVyOyB9XG4gIGlmKHN0YWNrMSB8fCBzdGFjazEgPT09IDApIHsgYnVmZmVyICs9IHN0YWNrMTsgfVxuICBidWZmZXIgKz0gXCJcXG48L2Rpdj5cIjtcbiAgcmV0dXJuIGJ1ZmZlcjtcbiAgfSk7XG4iLCJ2YXIgJCA9IHdpbmRvdy5qUXVlcnksXG5cdF8gPSB3aW5kb3cuXztcblxuXG4vLyBFeHRlbmQgalF1ZXJ5IGZ1bmN0aW9uYWxpdHkgdG8gZWFzaWx5IGFkZC9yZW1vdmUgc2luZ2xlIGF0dHJpYnV0ZSB2YWx1ZXNcblxuJC5mbi5hZGRBdHRyVmFsID0gZnVuY3Rpb24oYXR0ciwgdmFsKSB7XG5cblx0dGhpcy5lYWNoKGZ1bmN0aW9uKGksIGVsKSB7XG5cdFx0dmFyICRlbCA9ICQoZWwpLFxuXHRcdFx0Y3VycmVudHZhbHVlID0gJGVsLmF0dHIoYXR0cikgfHwgJyc7XG5cblx0XHRpZiAoIWN1cnJlbnR2YWx1ZS5tYXRjaChnZXRXb3JkQm91bmRSZWdleCh2YWwpKSkge1xuXHRcdFx0JGVsLmF0dHIoYXR0ciwgKGN1cnJlbnR2YWx1ZSArICcgJyArIHZhbCkudHJpbSgpKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4kLmZuLnJlbW92ZUF0dHJWYWwgPSBmdW5jdGlvbihhdHRyLCB2YWwpIHtcblxuXHR0aGlzLmVhY2goZnVuY3Rpb24oaSwgZWwpIHtcblx0XHR2YXIgJGVsID0gJChlbCk7XG5cblx0XHR2YXIgY3VycmVudHZhbHVlID0gJGVsLmF0dHIoYXR0cikgfHwgJycsXG5cdFx0dmFsUmVnZXggPSBnZXRXb3JkQm91bmRSZWdleCh2YWwpO1xuXG5cdFx0aWYgKGN1cnJlbnR2YWx1ZS5tYXRjaCh2YWxSZWdleCkpIHtcblx0XHRcdCRlbC5hdHRyKGF0dHIsIGN1cnJlbnR2YWx1ZS5yZXBsYWNlKHZhbFJlZ2V4LCAnJykudHJpbSgpKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4kLmZuLmhhc0F0dHJWYWwgPSBmdW5jdGlvbihhdHRyLCB2YWwpIHtcblxuXHR0aGlzLmVhY2goZnVuY3Rpb24oaSwgZWwpIHtcblx0XHR2YXIgY3VycmVudHZhbHVlID0gJChlbCkuYXR0cihhdHRyKSB8fCAnJztcblx0XHRyZXR1cm4gISFjdXJyZW50dmFsdWUubWF0Y2goZ2V0V29yZEJvdW5kUmVnZXgodmFsKSk7XG5cdH0pO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4kLmZuLnRvZ2dsZUF0dHJWYWwgPSBmdW5jdGlvbihhdHRyLCB2YWwsIHN0YXRlVmFsKSB7XG5cblx0dGhpcy5lYWNoKGZ1bmN0aW9uKGksIGVsKSB7XG5cdFx0dmFyICRlbCA9ICQoZWwpO1xuXG5cdFx0Ly8gaWYgbm8gc3RhdGVWYWwgKGZ1bmN0aW9uL2Jvb2xlYW4pIGlzIHBhc3NlZCxcblx0XHQvLyBzaW1wbGUgdG9nZ2xlXG5cdFx0aWYgKHR5cGVvZiBzdGF0ZVZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcblxuXHRcdFx0cmV0dXJuIGhhc0F0dHJWYWwodGhpcywgYXR0ciwgdmFsKSA/ICRlbC5yZW1vdmVBdHRyVmFsKGF0dHIsIHZhbCkgOiAkZWwuYWRkQXR0clZhbChhdHRyLCB2YWwpO1xuXG5cdFx0fVxuXG5cdFx0Ly8gaWYgYSBzdGF0ZVZhbCBpcyBub3QgdW5kZWZpbmVkLCBhbmQgaXRzXG5cdFx0Ly8gZnVuY3Rpb24gcmV0dXJucyB0cnVlIG9yIGlmIGl0cyBzdGF0ZVZhbCBpcyBhIHRydWUgYm9vbGVhblxuXHRcdGlmICh0eXBlb2Ygc3RhdGVWYWwgPT09ICdmdW5jdGlvbicgJiYgc3RhdGVWYWwoKSB8fCBzdGF0ZVZhbCA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuICRlbC5hZGRBdHRyVmFsKGF0dHIsIHZhbCk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBzdGF0ZVZhbCA9PT0gJ2Z1bmN0aW9uJyAmJiAhc3RhdGVWYWwoKSB8fCAhc3RhdGVWYWwpIHtcblx0XHRcdHJldHVybiAkZWwucmVtb3ZlQXR0clZhbChhdHRyLCB2YWwpO1xuXHRcdH1cblxuXHR9KTtcblxufVxuXG5cbi8vIFV0aWxpdGllcyAmIGhlbHBlcnNcblxuZnVuY3Rpb24gZ2V0V29yZEJvdW5kUmVnZXgodmFsKSB7XG5cdHJldHVybiBuZXcgUmVnRXhwKCdcXFxcYicgKyB2YWwgKyAnXFxcXGInKTtcbn1cblxuZnVuY3Rpb24gaGFzQXR0clZhbChlbCwgYXR0ciwgdmFsKSB7XG5cdHJldHVybiAhISQoZWwpLmF0dHIoYXR0cikubWF0Y2goZ2V0V29yZEJvdW5kUmVnZXgodmFsKSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG4vKmdsb2JhbHMgSGFuZGxlYmFyczogdHJ1ZSAqL1xudmFyIGJhc2UgPSByZXF1aXJlKFwiLi9oYW5kbGViYXJzL2Jhc2VcIik7XG5cbi8vIEVhY2ggb2YgdGhlc2UgYXVnbWVudCB0aGUgSGFuZGxlYmFycyBvYmplY3QuIE5vIG5lZWQgdG8gc2V0dXAgaGVyZS5cbi8vIChUaGlzIGlzIGRvbmUgdG8gZWFzaWx5IHNoYXJlIGNvZGUgYmV0d2VlbiBjb21tb25qcyBhbmQgYnJvd3NlIGVudnMpXG52YXIgU2FmZVN0cmluZyA9IHJlcXVpcmUoXCIuL2hhbmRsZWJhcnMvc2FmZS1zdHJpbmdcIilbXCJkZWZhdWx0XCJdO1xudmFyIEV4Y2VwdGlvbiA9IHJlcXVpcmUoXCIuL2hhbmRsZWJhcnMvZXhjZXB0aW9uXCIpW1wiZGVmYXVsdFwiXTtcbnZhciBVdGlscyA9IHJlcXVpcmUoXCIuL2hhbmRsZWJhcnMvdXRpbHNcIik7XG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuL2hhbmRsZWJhcnMvcnVudGltZVwiKTtcblxuLy8gRm9yIGNvbXBhdGliaWxpdHkgYW5kIHVzYWdlIG91dHNpZGUgb2YgbW9kdWxlIHN5c3RlbXMsIG1ha2UgdGhlIEhhbmRsZWJhcnMgb2JqZWN0IGEgbmFtZXNwYWNlXG52YXIgY3JlYXRlID0gZnVuY3Rpb24oKSB7XG4gIHZhciBoYiA9IG5ldyBiYXNlLkhhbmRsZWJhcnNFbnZpcm9ubWVudCgpO1xuXG4gIFV0aWxzLmV4dGVuZChoYiwgYmFzZSk7XG4gIGhiLlNhZmVTdHJpbmcgPSBTYWZlU3RyaW5nO1xuICBoYi5FeGNlcHRpb24gPSBFeGNlcHRpb247XG4gIGhiLlV0aWxzID0gVXRpbHM7XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufTtcblxudmFyIEhhbmRsZWJhcnMgPSBjcmVhdGUoKTtcbkhhbmRsZWJhcnMuY3JlYXRlID0gY3JlYXRlO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IEhhbmRsZWJhcnM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgVXRpbHMgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbnZhciBFeGNlcHRpb24gPSByZXF1aXJlKFwiLi9leGNlcHRpb25cIilbXCJkZWZhdWx0XCJdO1xuXG52YXIgVkVSU0lPTiA9IFwiMS4zLjBcIjtcbmV4cG9ydHMuVkVSU0lPTiA9IFZFUlNJT047dmFyIENPTVBJTEVSX1JFVklTSU9OID0gNDtcbmV4cG9ydHMuQ09NUElMRVJfUkVWSVNJT04gPSBDT01QSUxFUl9SRVZJU0lPTjtcbnZhciBSRVZJU0lPTl9DSEFOR0VTID0ge1xuICAxOiAnPD0gMS4wLnJjLjInLCAvLyAxLjAucmMuMiBpcyBhY3R1YWxseSByZXYyIGJ1dCBkb2Vzbid0IHJlcG9ydCBpdFxuICAyOiAnPT0gMS4wLjAtcmMuMycsXG4gIDM6ICc9PSAxLjAuMC1yYy40JyxcbiAgNDogJz49IDEuMC4wJ1xufTtcbmV4cG9ydHMuUkVWSVNJT05fQ0hBTkdFUyA9IFJFVklTSU9OX0NIQU5HRVM7XG52YXIgaXNBcnJheSA9IFV0aWxzLmlzQXJyYXksXG4gICAgaXNGdW5jdGlvbiA9IFV0aWxzLmlzRnVuY3Rpb24sXG4gICAgdG9TdHJpbmcgPSBVdGlscy50b1N0cmluZyxcbiAgICBvYmplY3RUeXBlID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbmZ1bmN0aW9uIEhhbmRsZWJhcnNFbnZpcm9ubWVudChoZWxwZXJzLCBwYXJ0aWFscykge1xuICB0aGlzLmhlbHBlcnMgPSBoZWxwZXJzIHx8IHt9O1xuICB0aGlzLnBhcnRpYWxzID0gcGFydGlhbHMgfHwge307XG5cbiAgcmVnaXN0ZXJEZWZhdWx0SGVscGVycyh0aGlzKTtcbn1cblxuZXhwb3J0cy5IYW5kbGViYXJzRW52aXJvbm1lbnQgPSBIYW5kbGViYXJzRW52aXJvbm1lbnQ7SGFuZGxlYmFyc0Vudmlyb25tZW50LnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IEhhbmRsZWJhcnNFbnZpcm9ubWVudCxcblxuICBsb2dnZXI6IGxvZ2dlcixcbiAgbG9nOiBsb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuLCBpbnZlcnNlKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChpbnZlcnNlIHx8IGZuKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgaGVscGVycycpOyB9XG4gICAgICBVdGlscy5leHRlbmQodGhpcy5oZWxwZXJzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGludmVyc2UpIHsgZm4ubm90ID0gaW52ZXJzZTsgfVxuICAgICAgdGhpcy5oZWxwZXJzW25hbWVdID0gZm47XG4gICAgfVxuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgc3RyKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIFV0aWxzLmV4dGVuZCh0aGlzLnBhcnRpYWxzLCAgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBzdHI7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiByZWdpc3RlckRlZmF1bHRIZWxwZXJzKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdoZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcIk1pc3NpbmcgaGVscGVyOiAnXCIgKyBhcmcgKyBcIidcIik7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignYmxvY2tIZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIHZhciBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlIHx8IGZ1bmN0aW9uKCkge30sIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7IGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7IH1cblxuICAgIGlmKGNvbnRleHQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBmbih0aGlzKTtcbiAgICB9IGVsc2UgaWYoY29udGV4dCA9PT0gZmFsc2UgfHwgY29udGV4dCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkoY29udGV4dCkpIHtcbiAgICAgIGlmKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UuaGVscGVycy5lYWNoKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGludmVyc2UodGhpcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmbihjb250ZXh0KTtcbiAgICB9XG4gIH0pO1xuXG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdlYWNoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIHZhciBmbiA9IG9wdGlvbnMuZm4sIGludmVyc2UgPSBvcHRpb25zLmludmVyc2U7XG4gICAgdmFyIGkgPSAwLCByZXQgPSBcIlwiLCBkYXRhO1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHsgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTsgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgaWYoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvcih2YXIgaiA9IGNvbnRleHQubGVuZ3RoOyBpPGo7IGkrKykge1xuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBkYXRhLmluZGV4ID0gaTtcbiAgICAgICAgICAgIGRhdGEuZmlyc3QgPSAoaSA9PT0gMCk7XG4gICAgICAgICAgICBkYXRhLmxhc3QgID0gKGkgPT09IChjb250ZXh0Lmxlbmd0aC0xKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldCA9IHJldCArIGZuKGNvbnRleHRbaV0sIHsgZGF0YTogZGF0YSB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yKHZhciBrZXkgaW4gY29udGV4dCkge1xuICAgICAgICAgIGlmKGNvbnRleHQuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgaWYoZGF0YSkgeyBcbiAgICAgICAgICAgICAgZGF0YS5rZXkgPSBrZXk7IFxuICAgICAgICAgICAgICBkYXRhLmluZGV4ID0gaTtcbiAgICAgICAgICAgICAgZGF0YS5maXJzdCA9IChpID09PSAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldCA9IHJldCArIGZuKGNvbnRleHRba2V5XSwge2RhdGE6IGRhdGF9KTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihpID09PSAwKXtcbiAgICAgIHJldCA9IGludmVyc2UodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG5cbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihjb25kaXRpb25hbCkpIHsgY29uZGl0aW9uYWwgPSBjb25kaXRpb25hbC5jYWxsKHRoaXMpOyB9XG5cbiAgICAvLyBEZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHJlbmRlciB0aGUgcG9zaXRpdmUgcGF0aCBpZiB0aGUgdmFsdWUgaXMgdHJ1dGh5IGFuZCBub3QgZW1wdHkuXG4gICAgLy8gVGhlIGBpbmNsdWRlWmVyb2Agb3B0aW9uIG1heSBiZSBzZXQgdG8gdHJlYXQgdGhlIGNvbmR0aW9uYWwgYXMgcHVyZWx5IG5vdCBlbXB0eSBiYXNlZCBvbiB0aGVcbiAgICAvLyBiZWhhdmlvciBvZiBpc0VtcHR5LiBFZmZlY3RpdmVseSB0aGlzIGRldGVybWluZXMgaWYgMCBpcyBoYW5kbGVkIGJ5IHRoZSBwb3NpdGl2ZSBwYXRoIG9yIG5lZ2F0aXZlLlxuICAgIGlmICgoIW9wdGlvbnMuaGFzaC5pbmNsdWRlWmVybyAmJiAhY29uZGl0aW9uYWwpIHx8IFV0aWxzLmlzRW1wdHkoY29uZGl0aW9uYWwpKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5mbih0aGlzKTtcbiAgICB9XG4gIH0pO1xuXG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd1bmxlc3MnLCBmdW5jdGlvbihjb25kaXRpb25hbCwgb3B0aW9ucykge1xuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtmbjogb3B0aW9ucy5pbnZlcnNlLCBpbnZlcnNlOiBvcHRpb25zLmZuLCBoYXNoOiBvcHRpb25zLmhhc2h9KTtcbiAgfSk7XG5cbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHsgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTsgfVxuXG4gICAgaWYgKCFVdGlscy5pc0VtcHR5KGNvbnRleHQpKSByZXR1cm4gb3B0aW9ucy5mbihjb250ZXh0KTtcbiAgfSk7XG5cbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICB2YXIgbGV2ZWwgPSBvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwgPyBwYXJzZUludChvcHRpb25zLmRhdGEubGV2ZWwsIDEwKSA6IDE7XG4gICAgaW5zdGFuY2UubG9nKGxldmVsLCBjb250ZXh0KTtcbiAgfSk7XG59XG5cbnZhciBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogeyAwOiAnZGVidWcnLCAxOiAnaW5mbycsIDI6ICd3YXJuJywgMzogJ2Vycm9yJyB9LFxuXG4gIC8vIFN0YXRlIGVudW1cbiAgREVCVUc6IDAsXG4gIElORk86IDEsXG4gIFdBUk46IDIsXG4gIEVSUk9SOiAzLFxuICBsZXZlbDogMyxcblxuICAvLyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgaG9zdCBlbnZpcm9ubWVudFxuICBsb2c6IGZ1bmN0aW9uKGxldmVsLCBvYmopIHtcbiAgICBpZiAobG9nZ2VyLmxldmVsIDw9IGxldmVsKSB7XG4gICAgICB2YXIgbWV0aG9kID0gbG9nZ2VyLm1ldGhvZE1hcFtsZXZlbF07XG4gICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBjb25zb2xlW21ldGhvZF0uY2FsbChjb25zb2xlLCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbmV4cG9ydHMubG9nZ2VyID0gbG9nZ2VyO1xuZnVuY3Rpb24gbG9nKGxldmVsLCBvYmopIHsgbG9nZ2VyLmxvZyhsZXZlbCwgb2JqKTsgfVxuXG5leHBvcnRzLmxvZyA9IGxvZzt2YXIgY3JlYXRlRnJhbWUgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgdmFyIG9iaiA9IHt9O1xuICBVdGlscy5leHRlbmQob2JqLCBvYmplY3QpO1xuICByZXR1cm4gb2JqO1xufTtcbmV4cG9ydHMuY3JlYXRlRnJhbWUgPSBjcmVhdGVGcmFtZTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGVycm9yUHJvcHMgPSBbJ2Rlc2NyaXB0aW9uJywgJ2ZpbGVOYW1lJywgJ2xpbmVOdW1iZXInLCAnbWVzc2FnZScsICduYW1lJywgJ251bWJlcicsICdzdGFjayddO1xuXG5mdW5jdGlvbiBFeGNlcHRpb24obWVzc2FnZSwgbm9kZSkge1xuICB2YXIgbGluZTtcbiAgaWYgKG5vZGUgJiYgbm9kZS5maXJzdExpbmUpIHtcbiAgICBsaW5lID0gbm9kZS5maXJzdExpbmU7XG5cbiAgICBtZXNzYWdlICs9ICcgLSAnICsgbGluZSArICc6JyArIG5vZGUuZmlyc3RDb2x1bW47XG4gIH1cblxuICB2YXIgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgaWYgKGxpbmUpIHtcbiAgICB0aGlzLmxpbmVOdW1iZXIgPSBsaW5lO1xuICAgIHRoaXMuY29sdW1uID0gbm9kZS5maXJzdENvbHVtbjtcbiAgfVxufVxuXG5FeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gRXhjZXB0aW9uOyIsIlwidXNlIHN0cmljdFwiO1xudmFyIFV0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG52YXIgRXhjZXB0aW9uID0gcmVxdWlyZShcIi4vZXhjZXB0aW9uXCIpW1wiZGVmYXVsdFwiXTtcbnZhciBDT01QSUxFUl9SRVZJU0lPTiA9IHJlcXVpcmUoXCIuL2Jhc2VcIikuQ09NUElMRVJfUkVWSVNJT047XG52YXIgUkVWSVNJT05fQ0hBTkdFUyA9IHJlcXVpcmUoXCIuL2Jhc2VcIikuUkVWSVNJT05fQ0hBTkdFUztcblxuZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgdmFyIGNvbXBpbGVyUmV2aXNpb24gPSBjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdIHx8IDEsXG4gICAgICBjdXJyZW50UmV2aXNpb24gPSBDT01QSUxFUl9SRVZJU0lPTjtcblxuICBpZiAoY29tcGlsZXJSZXZpc2lvbiAhPT0gY3VycmVudFJldmlzaW9uKSB7XG4gICAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBjdXJyZW50UmV2aXNpb24pIHtcbiAgICAgIHZhciBydW50aW1lVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sXG4gICAgICAgICAgY29tcGlsZXJWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY29tcGlsZXJSZXZpc2lvbl07XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFwiVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYW4gb2xkZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gXCIrXG4gICAgICAgICAgICBcIlBsZWFzZSB1cGRhdGUgeW91ciBwcmVjb21waWxlciB0byBhIG5ld2VyIHZlcnNpb24gKFwiK3J1bnRpbWVWZXJzaW9ucytcIikgb3IgZG93bmdyYWRlIHlvdXIgcnVudGltZSB0byBhbiBvbGRlciB2ZXJzaW9uIChcIitjb21waWxlclZlcnNpb25zK1wiKS5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVzZSB0aGUgZW1iZWRkZWQgdmVyc2lvbiBpbmZvIHNpbmNlIHRoZSBydW50aW1lIGRvZXNuJ3Qga25vdyBhYm91dCB0aGlzIHJldmlzaW9uIHlldFxuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcIlRlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gXCIrXG4gICAgICAgICAgICBcIlBsZWFzZSB1cGRhdGUgeW91ciBydW50aW1lIHRvIGEgbmV3ZXIgdmVyc2lvbiAoXCIrY29tcGlsZXJJbmZvWzFdK1wiKS5cIik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydHMuY2hlY2tSZXZpc2lvbiA9IGNoZWNrUmV2aXNpb247Ly8gVE9ETzogUmVtb3ZlIHRoaXMgbGluZSBhbmQgYnJlYWsgdXAgY29tcGlsZVBhcnRpYWxcblxuZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFwiTm8gZW52aXJvbm1lbnQgcGFzc2VkIHRvIHRlbXBsYXRlXCIpO1xuICB9XG5cbiAgLy8gTm90ZTogVXNpbmcgZW52LlZNIHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gbG9jYWwgdmFyIHJlZmVyZW5jZXMgdGhyb3VnaG91dCB0aGlzIHNlY3Rpb24gdG8gYWxsb3dcbiAgLy8gZm9yIGV4dGVybmFsIHVzZXJzIHRvIG92ZXJyaWRlIHRoZXNlIGFzIHBzdWVkby1zdXBwb3J0ZWQgQVBJcy5cbiAgdmFyIGludm9rZVBhcnRpYWxXcmFwcGVyID0gZnVuY3Rpb24ocGFydGlhbCwgbmFtZSwgY29udGV4dCwgaGVscGVycywgcGFydGlhbHMsIGRhdGEpIHtcbiAgICB2YXIgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsgcmV0dXJuIHJlc3VsdDsgfVxuXG4gICAgaWYgKGVudi5jb21waWxlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHsgaGVscGVyczogaGVscGVycywgcGFydGlhbHM6IHBhcnRpYWxzLCBkYXRhOiBkYXRhIH07XG4gICAgICBwYXJ0aWFsc1tuYW1lXSA9IGVudi5jb21waWxlKHBhcnRpYWwsIHsgZGF0YTogZGF0YSAhPT0gdW5kZWZpbmVkIH0sIGVudik7XG4gICAgICByZXR1cm4gcGFydGlhbHNbbmFtZV0oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJUaGUgcGFydGlhbCBcIiArIG5hbWUgKyBcIiBjb3VsZCBub3QgYmUgY29tcGlsZWQgd2hlbiBydW5uaW5nIGluIHJ1bnRpbWUtb25seSBtb2RlXCIpO1xuICAgIH1cbiAgfTtcblxuICAvLyBKdXN0IGFkZCB3YXRlclxuICB2YXIgY29udGFpbmVyID0ge1xuICAgIGVzY2FwZUV4cHJlc3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Npb24sXG4gICAgaW52b2tlUGFydGlhbDogaW52b2tlUGFydGlhbFdyYXBwZXIsXG4gICAgcHJvZ3JhbXM6IFtdLFxuICAgIHByb2dyYW06IGZ1bmN0aW9uKGksIGZuLCBkYXRhKSB7XG4gICAgICB2YXIgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldO1xuICAgICAgaWYoZGF0YSkge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHByb2dyYW0oaSwgZm4sIGRhdGEpO1xuICAgICAgfSBlbHNlIGlmICghcHJvZ3JhbVdyYXBwZXIpIHtcbiAgICAgICAgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldID0gcHJvZ3JhbShpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcbiAgICBtZXJnZTogZnVuY3Rpb24ocGFyYW0sIGNvbW1vbikge1xuICAgICAgdmFyIHJldCA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiAocGFyYW0gIT09IGNvbW1vbikpIHtcbiAgICAgICAgcmV0ID0ge307XG4gICAgICAgIFV0aWxzLmV4dGVuZChyZXQsIGNvbW1vbik7XG4gICAgICAgIFV0aWxzLmV4dGVuZChyZXQsIHBhcmFtKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcbiAgICBwcm9ncmFtV2l0aERlcHRoOiBlbnYuVk0ucHJvZ3JhbVdpdGhEZXB0aCxcbiAgICBub29wOiBlbnYuVk0ubm9vcCxcbiAgICBjb21waWxlckluZm86IG51bGxcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHZhciBuYW1lc3BhY2UgPSBvcHRpb25zLnBhcnRpYWwgPyBvcHRpb25zIDogZW52LFxuICAgICAgICBoZWxwZXJzLFxuICAgICAgICBwYXJ0aWFscztcblxuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsKSB7XG4gICAgICBoZWxwZXJzID0gb3B0aW9ucy5oZWxwZXJzO1xuICAgICAgcGFydGlhbHMgPSBvcHRpb25zLnBhcnRpYWxzO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gdGVtcGxhdGVTcGVjLmNhbGwoXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIG5hbWVzcGFjZSwgY29udGV4dCxcbiAgICAgICAgICBoZWxwZXJzLFxuICAgICAgICAgIHBhcnRpYWxzLFxuICAgICAgICAgIG9wdGlvbnMuZGF0YSk7XG5cbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCkge1xuICAgICAgZW52LlZNLmNoZWNrUmV2aXNpb24oY29udGFpbmVyLmNvbXBpbGVySW5mbyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZXhwb3J0cy50ZW1wbGF0ZSA9IHRlbXBsYXRlO2Z1bmN0aW9uIHByb2dyYW1XaXRoRGVwdGgoaSwgZm4sIGRhdGEgLyosICRkZXB0aCAqLykge1xuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMyk7XG5cbiAgdmFyIHByb2cgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgW2NvbnRleHQsIG9wdGlvbnMuZGF0YSB8fCBkYXRhXS5jb25jYXQoYXJncykpO1xuICB9O1xuICBwcm9nLnByb2dyYW0gPSBpO1xuICBwcm9nLmRlcHRoID0gYXJncy5sZW5ndGg7XG4gIHJldHVybiBwcm9nO1xufVxuXG5leHBvcnRzLnByb2dyYW1XaXRoRGVwdGggPSBwcm9ncmFtV2l0aERlcHRoO2Z1bmN0aW9uIHByb2dyYW0oaSwgZm4sIGRhdGEpIHtcbiAgdmFyIHByb2cgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucy5kYXRhIHx8IGRhdGEpO1xuICB9O1xuICBwcm9nLnByb2dyYW0gPSBpO1xuICBwcm9nLmRlcHRoID0gMDtcbiAgcmV0dXJuIHByb2c7XG59XG5cbmV4cG9ydHMucHJvZ3JhbSA9IHByb2dyYW07ZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBuYW1lLCBjb250ZXh0LCBoZWxwZXJzLCBwYXJ0aWFscywgZGF0YSkge1xuICB2YXIgb3B0aW9ucyA9IHsgcGFydGlhbDogdHJ1ZSwgaGVscGVyczogaGVscGVycywgcGFydGlhbHM6IHBhcnRpYWxzLCBkYXRhOiBkYXRhIH07XG5cbiAgaWYocGFydGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcIlRoZSBwYXJ0aWFsIFwiICsgbmFtZSArIFwiIGNvdWxkIG5vdCBiZSBmb3VuZFwiKTtcbiAgfSBlbHNlIGlmKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydHMuaW52b2tlUGFydGlhbCA9IGludm9rZVBhcnRpYWw7ZnVuY3Rpb24gbm9vcCgpIHsgcmV0dXJuIFwiXCI7IH1cblxuZXhwb3J0cy5ub29wID0gbm9vcDsiLCJcInVzZSBzdHJpY3RcIjtcbi8vIEJ1aWxkIG91dCBvdXIgYmFzaWMgU2FmZVN0cmluZyB0eXBlXG5mdW5jdGlvbiBTYWZlU3RyaW5nKHN0cmluZykge1xuICB0aGlzLnN0cmluZyA9IHN0cmluZztcbn1cblxuU2FmZVN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIFwiXCIgKyB0aGlzLnN0cmluZztcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gU2FmZVN0cmluZzsiLCJcInVzZSBzdHJpY3RcIjtcbi8qanNoaW50IC1XMDA0ICovXG52YXIgU2FmZVN0cmluZyA9IHJlcXVpcmUoXCIuL3NhZmUtc3RyaW5nXCIpW1wiZGVmYXVsdFwiXTtcblxudmFyIGVzY2FwZSA9IHtcbiAgXCImXCI6IFwiJmFtcDtcIixcbiAgXCI8XCI6IFwiJmx0O1wiLFxuICBcIj5cIjogXCImZ3Q7XCIsXG4gICdcIic6IFwiJnF1b3Q7XCIsXG4gIFwiJ1wiOiBcIiYjeDI3O1wiLFxuICBcImBcIjogXCImI3g2MDtcIlxufTtcblxudmFyIGJhZENoYXJzID0gL1smPD5cIidgXS9nO1xudmFyIHBvc3NpYmxlID0gL1smPD5cIidgXS87XG5cbmZ1bmN0aW9uIGVzY2FwZUNoYXIoY2hyKSB7XG4gIHJldHVybiBlc2NhcGVbY2hyXSB8fCBcIiZhbXA7XCI7XG59XG5cbmZ1bmN0aW9uIGV4dGVuZChvYmosIHZhbHVlKSB7XG4gIGZvcih2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICBvYmpba2V5XSA9IHZhbHVlW2tleV07XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydHMuZXh0ZW5kID0gZXh0ZW5kO3ZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5leHBvcnRzLnRvU3RyaW5nID0gdG9TdHJpbmc7XG4vLyBTb3VyY2VkIGZyb20gbG9kYXNoXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYmVzdGllanMvbG9kYXNoL2Jsb2IvbWFzdGVyL0xJQ0VOU0UudHh0XG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59O1xuLy8gZmFsbGJhY2sgZm9yIG9sZGVyIHZlcnNpb25zIG9mIENocm9tZSBhbmQgU2FmYXJpXG5pZiAoaXNGdW5jdGlvbigveC8pKSB7XG4gIGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG4gIH07XG59XG52YXIgaXNGdW5jdGlvbjtcbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSA/IHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nIDogZmFsc2U7XG59O1xuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICBpZiAoc3RyaW5nIGluc3RhbmNlb2YgU2FmZVN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcudG9TdHJpbmcoKTtcbiAgfSBlbHNlIGlmICghc3RyaW5nICYmIHN0cmluZyAhPT0gMCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gIC8vIHRoZSByZWdleCB0ZXN0IHdpbGwgZG8gdGhpcyB0cmFuc3BhcmVudGx5IGJlaGluZCB0aGUgc2NlbmVzLCBjYXVzaW5nIGlzc3VlcyBpZlxuICAvLyBhbiBvYmplY3QncyB0byBzdHJpbmcgaGFzIGVzY2FwZWQgY2hhcmFjdGVycyBpbiBpdC5cbiAgc3RyaW5nID0gXCJcIiArIHN0cmluZztcblxuICBpZighcG9zc2libGUudGVzdChzdHJpbmcpKSB7IHJldHVybiBzdHJpbmc7IH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0cy5lc2NhcGVFeHByZXNzaW9uID0gZXNjYXBlRXhwcmVzc2lvbjtmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0cy5pc0VtcHR5ID0gaXNFbXB0eTsiLCIvLyBDcmVhdGUgYSBzaW1wbGUgcGF0aCBhbGlhcyB0byBhbGxvdyBicm93c2VyaWZ5IHRvIHJlc29sdmVcbi8vIHRoZSBydW50aW1lIG9uIGEgc3VwcG9ydGVkIHBhdGguXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGlzdC9janMvaGFuZGxlYmFycy5ydW50aW1lJyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJoYW5kbGViYXJzL3J1bnRpbWVcIilbXCJkZWZhdWx0XCJdO1xuIiwiLy8gKioqKipcbi8vIFNVSSBwb2x5ZmlsbHNcbi8vXG4vLyBJRSA4IC5iaW5kIHBvbHlmaWxsXG4vL1xuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRnVuY3Rpb24vYmluZCNQb2x5ZmlsbFxuLy8gKioqKipcbmlmICghRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpIHtcblx0RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihvVGhpcykge1xuXHRcdGlmICh0eXBlb2YgdGhpcyAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Ly8gY2xvc2VzdCB0aGluZyBwb3NzaWJsZSB0byB0aGUgRUNNQVNjcmlwdCA1XG5cdFx0XHQvLyBpbnRlcm5hbCBJc0NhbGxhYmxlIGZ1bmN0aW9uXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCAtIHdoYXQgaXMgdHJ5aW5nIHRvIGJlIGJvdW5kIGlzIG5vdCBjYWxsYWJsZScpO1xuXHRcdH1cblxuXHRcdHZhciBhQXJncyAgID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSxcblx0XHRcdGZUb0JpbmQgPSB0aGlzLFxuXHRcdFx0Zk5PUCAgICA9IGZ1bmN0aW9uKCkge30sXG5cdFx0XHRmQm91bmQgID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBmVG9CaW5kLmFwcGx5KHRoaXMgaW5zdGFuY2VvZiBmTk9QXG5cdFx0XHRcdFx0PyB0aGlzXG5cdFx0XHRcdFx0OiBvVGhpcyxcblx0XHRcdFx0YUFyZ3MuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcblx0XHRcdH07XG5cblx0XHRmTk9QLnByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXHRcdGZCb3VuZC5wcm90b3R5cGUgPSBuZXcgZk5PUCgpO1xuXG5cdFx0cmV0dXJuIGZCb3VuZDtcblx0fTtcblx0Ly8gYWRkZWQgZm9yIGNoZWNraW5nIGl0IHdvcmtzXG5cdGNvbnNvbGUubG9nKFwiU1VJIHBvbHlmaWxsczogYmluZFwiKTtcbn0iLCIvLyBNYWluIGVudHJ5cG9pbnQgaW50byBhbGwgU1VJIEpTIGNvbXBvbmVudHNcblxudmFyICQgPSByZXF1aXJlKCdqcXVlcnknKSxcblx0XyA9IHJlcXVpcmUoJ3VuZGVyc2NvcmUnKTtcblxucmVxdWlyZSgnLi9zdWktcG9seWZpbGxzJyk7XG5cbi8vIHJlcXVpcmUgY29tcG9uZW50c1xudmFyIGNvbXBvbmVudHMgPSB7XG5cdCdzdWktZHJvcGRvd24nOiByZXF1aXJlKCcuL2NvbXBvbmVudHMvc3VpLWlucHV0LWNvbXBvbmVudHMvc3VpLWRyb3Bkb3duL3N1aS5kcm9wZG93bicpLFxuXHQnc3VpLWNoZWNrYm94JzogcmVxdWlyZSgnLi9jb21wb25lbnRzL3N1aS1pbnB1dC1jb21wb25lbnRzL3N1aS1jaGVja2JveC9zdWkuY2hlY2tib3gnKSxcblx0J3N1aS1yYWRpbyc6IHJlcXVpcmUoJy4vY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktcmFkaW8vc3VpLnJhZGlvJyksXG5cdCdzdWktdGV4dCc6IHJlcXVpcmUoJy4vY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktdGV4dGlucHV0L3N1aS50ZXh0aW5wdXQnKSxcblx0J3N1aS10ZXh0YXJlYSc6IHJlcXVpcmUoJy4vY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktdGV4dGFyZWEvc3VpLnRleHRhcmVhJyksXG5cdCdzdWktZmlsZSc6IHJlcXVpcmUoJy4vY29tcG9uZW50cy9zdWktaW5wdXQtY29tcG9uZW50cy9zdWktZmlsZS9zdWkuZmlsZScpLFxuXHQnc3VpLW11bHRpLWNoZWNrYm94JzogcmVxdWlyZSgnLi9jb21wb25lbnRzL3N1aS1pbnB1dC1jb21wb25lbnRzL3N1aS1tdWx0aS1jaGVja2JveC9zdWkubXVsdGktY2hlY2tib3gnKSxcblx0J3N1aS1tb2RhbCc6IHJlcXVpcmUoJy4vY29tcG9uZW50cy9zdWktbW9kYWwvc3VpLm1vZGFsJylcbn07XG5cbi8vIGNhY2hlIGNvbW1vbiBkb20gZWxlbWVudHMgZm9yIGNvbXBvbmVudHNcbnZhciAkZG9jID0gJChkb2N1bWVudCksXG5cdCR3aW4gPSAkKHdpbmRvdyk7XG5cbi8vIFNVSSBDb21wb25lbnQgUmVnaXN0cnlcbi8vIEluc3RhbnRpYXRlIG9uZSBwZXIgcHJvamVjdCBzY29wZSwgcmVnaXN0ZXIgYW55XG4vLyByZXF1aXJlZCBjb21wb25lbnRzIHdpdGggaXQuXG4vLyBFeHBvc2VzIHB1YmxpYyBpbml0IG1ldGhvZCBvbiB0aGUgd2luZG93IGZvciBpbnRlcmFjdGlvblxuLy8gd2l0aCBleGlzdGluZyBjb2RlYmFzZS5cbmZ1bmN0aW9uIFN1aUNvbXBvbmVudFJlZ2lzdHJ5KCkge1xuXHR0aGlzLmNvbXBvbmVudHMgPSB7fTtcbn1cblxuJC5leHRlbmQoU3VpQ29tcG9uZW50UmVnaXN0cnkucHJvdG90eXBlLCB7XG5cblx0X2luaXRDb21wb25lbnQ6IGZ1bmN0aW9uKGNvbXBvbmVudCwgJGNvbnRleHQsIHR5cGUpIHtcblx0XHR2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdFx0JGNvbnRleHQuZmluZChjb21wb25lbnQuc2VsZWN0b3IpLmVhY2goZnVuY3Rpb24oaSwgZWwpIHtcblx0XHRcdHZhciBvcHRzID0gX3RoaXMuX2dldE9wdGlvbnNGcm9tUGxhY2Vob2xkZXIoZWwpO1xuXHRcdFx0XHRvcHRzLnR5cGUgPSB0eXBlO1xuXG5cdFx0XHRpZiAoX3RoaXMuZ2V0SW5zdGFuY2VCeUVsZW1lbnQoZWwpID09PSBmYWxzZSkge1xuXHRcdFx0XHQvLyBpbnN0YW50aWF0ZSBuZXcgY29tcG9uZW50XG5cdFx0XHRcdHZhciBpbnN0YW5jZSA9IGNvbXBvbmVudC5jcmVhdGVDb21wb25lbnQob3B0cywgJGRvYywgJHdpbik7XG5cblx0XHRcdFx0Ly8gaW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50XG5cdFx0XHRcdGluc3RhbmNlLmluaXQoKTtcblx0XHRcdFx0aW5zdGFuY2UubG9hZEV4dGVuc2lvbnMoIG9wdHMgKTtcblxuXHRcdFx0XHRyZXR1cm4gaW5zdGFuY2U7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0X2NvbnZlcnRTdHJpbmdUb1N1aU9wdGlvbjogZnVuY3Rpb24oc3RyKSB7XG5cdFx0cmV0dXJuIHN0ci5yZXBsYWNlKCdzdWktJywgJycpLnJlcGxhY2UoLy0oW2Etel0pL2csIGZ1bmN0aW9uIChtLCB3KSB7XG5cdFx0ICAgIHJldHVybiB3LnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5cdH0sXG5cblx0Ly8gcGFyc2Ugb3B0aW9ucyBmcm9tIG1hcmt1cFxuXHRfZ2V0T3B0aW9uc0Zyb21QbGFjZWhvbGRlcjogZnVuY3Rpb24ocGxhY2Vob2xkZXIpIHtcblx0XHR2YXIgJGVsID0gJChwbGFjZWhvbGRlcik7XG5cblx0XHQvLyBQYXJzZSBTVUkgYXR0cmlidXRlcyBmb3Igb3B0aW9uc1xuXHRcdHZhciBhdHRycyA9IHBsYWNlaG9sZGVyLmF0dHJpYnV0ZXMsIC8vIGtleSB2YWx1ZSBtYXBcblx0XHRcdHN1aUF0dHJzID0ge1xuXHRcdFx0XHRwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG5cdFx0XHRcdGlkOiAkZWwuYXR0cignaWQnKSxcblx0XHRcdFx0Y2xhc3M6ICRlbC5hdHRyKCdjbGFzcycpXG5cdFx0XHR9O1xuXG5cdFx0Ly8gbG9vcCBvdmVyIGF0dHJzLCBpZiBrZXkgYmVnaW5zIHdpdGggc3VpLSwgcHVzaCBpbnRvIHN1aUF0dHJzXG5cdFx0Zm9yICh2YXIgaSA9IGF0dHJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRpZiAoYXR0cnNbaV0ubmFtZS5tYXRjaCgvXltzdWktXS8pKSB7XG5cdFx0XHRcdC8vIHR1cm5pbmcgc29tZXRoaW5nIGxpa2Ugc3VpLWljb24tY2xhc3MgaW50byBpY29uQ2xhc3Ncblx0XHRcdFx0dmFyIGF0dHJWYWwgPSB0aGlzLl9jb252ZXJ0U3RyaW5nVG9TdWlPcHRpb24oYXR0cnNbaV0ubmFtZSk7XG5cblx0XHRcdFx0c3VpQXR0cnNbYXR0clZhbF0gPSBhdHRyc1tpXS52YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc3VpQXR0cnM7XG5cdH0sXG5cblx0Ly8gUmVnaXN0ZXIgY29tcG9uZW50cyB3aXRoIHNlbGVjdG9yIHRvIGFmZmVjdFxuXHQvLyBhbmQgY29uc3RydWN0b3Jcblx0cmVnaXN0ZXJTdWlDb21wb25lbnQ6IGZ1bmN0aW9uKGFyZ3MpIHtcblx0XHR0aGlzLmNvbXBvbmVudHNbYXJncy5rZXldID0ge1xuXHRcdFx0c2VsZWN0b3I6ICdbJyArIGFyZ3Mua2V5ICsgJ10nLFxuXHRcdFx0Y3JlYXRlQ29tcG9uZW50OiBhcmdzLmZhY3Rvcnlcblx0XHR9O1xuXHR9LFxuXG5cdC8vIENvbXBvbmVudHMgbXVzdCBzYXZlIGl0cyBlbGVtZW50IGFzIHRoaXMuJGVsXG5cdGdldEluc3RhbmNlQnlFbGVtZW50OiBmdW5jdGlvbihlbCkge1xuXHRcdHZhciBpbnN0YW5jZSA9ICQoZWwpLmRhdGEoJ19TVUljb21wb25lbnQnKTtcblxuXHRcdGlmIChpbnN0YW5jZSkge1xuXHRcdFx0cmV0dXJuIGluc3RhbmNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIEluaXRpYWxpemUgU1VJIGNvbXBvbmVudHMgcGVyIGNvbnRleHRcblx0Ly8gUGFzcyBpbiBhIGNvbnRleHQgaWYgdXNlZCB0byBpbml0IGNvbXBvbmVudHNcblx0Ly8gZnJvbSBtYXJrdXAgYWRkZWQgYXN5bmMsIGxlYXZlIGNvbnRleHQgdW5kZWZpbmVkXG5cdC8vIHRvIGluaXRpYWxpemUgYWxsIGNvbXBvbmVudHMgb24gcGFnZVxuXHRpbml0U3VpQ29tcG9uZW50czogZnVuY3Rpb24oY29udGV4dCkge1xuXHRcdHZhciBfdGhpcyA9IHRoaXM7XG5cdFx0dmFyICRjb250ZXh0ID0gY29udGV4dCA/ICQoY29udGV4dCkgOiAkKGRvY3VtZW50KTtcblxuXHRcdGZvciAodmFyIGtleSBpbiB0aGlzLmNvbXBvbmVudHMpIHtcblx0XHRcdHRoaXMuX2luaXRDb21wb25lbnQodGhpcy5jb21wb25lbnRzW2tleV0sICRjb250ZXh0LCBrZXkpO1xuXHRcdH1cblx0fVxuXG59KTtcblxuLy8vL1xuLy8vIEV4cG9ydFxuLy9cblxuLy8gZm9yIG5vdywgaW5zdGFudGlhdGUgb25lIFNVSSBjb21wb25lbnQgcmVnaXN0cnkgaGVyZVxudmFyIHN1aUNvbXBvbmVudFJlZ2lzdHJ5ID0gbmV3IFN1aUNvbXBvbmVudFJlZ2lzdHJ5KCk7XG5cbi8vIHJlZ2lzdGVyIGNvbXBvbmVudHNcbmZvciAodmFyIGtleSBpbiBjb21wb25lbnRzKSB7XG5cdHN1aUNvbXBvbmVudFJlZ2lzdHJ5LnJlZ2lzdGVyU3VpQ29tcG9uZW50KHtcblx0XHRrZXk6IGtleSxcblx0XHRmYWN0b3J5OiBjb21wb25lbnRzW2tleV1cblx0fSk7XG59XG5cbi8vIEV4cG9ydCBwdWJsaWMgbWV0aG9kcyBmb3IgdXNlIGluIGV4aXN0aW5nIGNvZGViYXNlICh0ZXN0aW5nIHRoaXMgcGF0dGVybi4uLmRvIHdlIGxpa2UgaXQ/KVxud2luZG93LlNVSSA9IHtcblx0Ly8gQ2FsbCBvbiBwYWdlIGxvYWQgb3Igd2hlbiBuZXcgY29tcG9uZW50cyBhcmUgbG9hZGVkXG5cdC8vIGFzeW5jaHJvbm91c2x5XG5cdGluaXRDb21wb25lbnRzOiBzdWlDb21wb25lbnRSZWdpc3RyeS5pbml0U3VpQ29tcG9uZW50cy5iaW5kKHN1aUNvbXBvbmVudFJlZ2lzdHJ5KSxcblxuXHQvLyBDYWxsIHRvIGdldCBhbmQgbWFuaXB1bGF0ZSBhIHNpbmdsZSBjb21wb25lbnQgaW5zdGFuY2Vcblx0Ly8gcHJvZ3JhbW1hdGljYWxseVxuXHRnZXRJbnN0YW5jZTogc3VpQ29tcG9uZW50UmVnaXN0cnkuZ2V0SW5zdGFuY2VCeUVsZW1lbnQuYmluZChzdWlDb21wb25lbnRSZWdpc3RyeSksXG5cblx0Ly8gQWNjZXNzIHRvIGFsbCBjb21wb25lbnRzXG5cdGNyZWF0ZUNvbXBvbmVudDogZnVuY3Rpb24oY29tcG9uZW50TmFtZSwgb3B0cykge1xuXHRcdGlmIChzdWlDb21wb25lbnRSZWdpc3RyeS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdKSB7XG5cdFx0XHRvcHRzLnR5cGUgPSBjb21wb25lbnROYW1lO1xuXG5cdFx0XHQvLyBpbnN0YW50aWF0ZSBuZXcgY29tcG9uZW50XG5cdFx0XHR2YXIgaW5zdGFuY2UgPSBzdWlDb21wb25lbnRSZWdpc3RyeS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdLmNyZWF0ZUNvbXBvbmVudChvcHRzLCAkZG9jLCAkd2luKTtcblxuXHRcdFx0Ly8gaW5pdGlhbGl6ZSBhbmQgdGhlbiBsb2FkIGV4dGVuc2lvbnMgZm9yIHRoaXMgY29tcG9uZW50XG5cdFx0XHRpbnN0YW5jZS5pbml0KCk7XG5cdFx0XHRpbnN0YW5jZS5sb2FkRXh0ZW5zaW9ucyggb3B0cyApO1xuXG5cdFx0XHRyZXR1cm4gaW5zdGFuY2U7XG5cdFx0fVxuXHR9LFxufTsiXX0=

coded by Privdayz.com - Visit https://privdayz.com/ for more php shells.
A key player at the mall | Lemmon Lines

Subscribe
  • KIWI ROTATING AD
  • VB OUTLETS AD
  • CHIAZENZA ad
  • Banner Ad 2 – Mr. Oil
  • Banner ad – GHO Homes
  • Banner Ad – Porch Factory

Subscribe
Lemmon Lines - Vero Beach Blog & Newsletter
Lemmon Lines - Vero Beach Blog & Newsletter