Files
renaldybrada 9f7f55c98d major update
2026-03-17 10:29:33 +07:00

2 lines
2.5 MiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
!function(e){var t={};function n(i){if(t[i])return t[i].exports;var l=t[i]={i:i,l:!1,exports:{}};return e[i].call(l.exports,l,l.exports,n),l.l=!0,l.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var l in e)n.d(i,l,function(t){return e[t]}.bind(null,l));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s="XJR1")}({"1kvd":function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={name:"dialog",add:function(e){const t=e.context;t.dialog={kind:"",updateModal:!1,_closeSignal:!1};let n=e.util.createElement("DIV");n.className="se-dialog sun-editor-common";let i=e.util.createElement("DIV");i.className="se-dialog-back",i.style.display="none";let l=e.util.createElement("DIV");l.className="se-dialog-inner",l.style.display="none",n.appendChild(i),n.appendChild(l),t.dialog.modalArea=n,t.dialog.back=i,t.dialog.modal=l,t.dialog.modal.addEventListener("mousedown",this._onMouseDown_dialog.bind(e)),t.dialog.modal.addEventListener("click",this._onClick_dialog.bind(e)),t.element.relative.appendChild(n),n=null,i=null,l=null},_onMouseDown_dialog:function(e){/se-dialog-inner/.test(e.target.className)?this.context.dialog._closeSignal=!0:this.context.dialog._closeSignal=!1},_onClick_dialog:function(e){(/close/.test(e.target.getAttribute("data-command"))||this.context.dialog._closeSignal)&&this.plugins.dialog.close.call(this)},open:function(e,t){if(this.modalForm)return!1;this.plugins.dialog._bindClose&&(this._d.removeEventListener("keydown",this.plugins.dialog._bindClose),this.plugins.dialog._bindClose=null),this.plugins.dialog._bindClose=function(e){/27/.test(e.keyCode)&&this.plugins.dialog.close.call(this)}.bind(this),this._d.addEventListener("keydown",this.plugins.dialog._bindClose),this.context.dialog.updateModal=t,"full"===this.options.popupDisplay?this.context.dialog.modalArea.style.position="fixed":this.context.dialog.modalArea.style.position="absolute",this.context.dialog.kind=e,this.modalForm=this.context[e].modal;const n=this.context[e].focusElement;"function"==typeof this.plugins[e].on&&this.plugins[e].on.call(this,t),this.context.dialog.modalArea.style.display="block",this.context.dialog.back.style.display="block",this.context.dialog.modal.style.display="block",this.modalForm.style.display="block",n&&n.focus()},_bindClose:null,close:function(){this.plugins.dialog._bindClose&&(this._d.removeEventListener("keydown",this.plugins.dialog._bindClose),this.plugins.dialog._bindClose=null);const e=this.context.dialog.kind;this.modalForm.style.display="none",this.context.dialog.back.style.display="none",this.context.dialog.modalArea.style.display="none",this.context.dialog.updateModal=!1,"function"==typeof this.plugins[e].init&&this.plugins[e].init.call(this),this.context.dialog.kind="",this.modalForm=null,this.focus()}};return void 0===t&&(e.SUNEDITOR_MODULES||Object.defineProperty(e,"SUNEDITOR_MODULES",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_MODULES,"dialog",{enumerable:!0,writable:!1,configurable:!1,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_MODULES a window with a document");return l(e)}:l(i)},"3FqI":function(e,t,n){},JhlZ:function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={name:"fileBrowser",_xmlHttp:null,_loading:null,add:function(e){const t=e.context;t.fileBrowser={_closeSignal:!1,area:null,header:null,tagArea:null,body:null,list:null,tagElements:null,items:[],selectedTags:[],selectorHandler:null,contextPlugin:"",columnSize:4};let n=e.util.createElement("DIV");n.className="se-file-browser sun-editor-common";let i=e.util.createElement("DIV");i.className="se-file-browser-back";let l=e.util.createElement("DIV");l.className="se-file-browser-inner",l.innerHTML=this.set_browser(e),n.appendChild(i),n.appendChild(l),this._loading=n.querySelector(".se-loading-box"),t.fileBrowser.area=n,t.fileBrowser.header=l.querySelector(".se-file-browser-header"),t.fileBrowser.titleArea=l.querySelector(".se-file-browser-title"),t.fileBrowser.tagArea=l.querySelector(".se-file-browser-tags"),t.fileBrowser.body=l.querySelector(".se-file-browser-body"),t.fileBrowser.list=l.querySelector(".se-file-browser-list"),t.fileBrowser.tagArea.addEventListener("click",this.onClickTag.bind(e)),t.fileBrowser.list.addEventListener("click",this.onClickFile.bind(e)),l.addEventListener("mousedown",this._onMouseDown_browser.bind(e)),l.addEventListener("click",this._onClick_browser.bind(e)),t.element.relative.appendChild(n),n=null,i=null,l=null},set_browser:function(e){const t=e.lang;return'<div class="se-file-browser-content"><div class="se-file-browser-header"><button type="button" data-command="close" class="se-btn se-file-browser-close" class="close" title="'+t.dialogBox.close+'" aria-label="'+t.dialogBox.close+'">'+e.icons.cancel+'</button><span class="se-file-browser-title"></span><div class="se-file-browser-tags"></div></div><div class="se-file-browser-body"><div class="se-loading-box sun-editor-common"><div class="se-loading-effect"></div></div><div class="se-file-browser-list"></div></div></div>'},_onMouseDown_browser:function(e){/se-file-browser-inner/.test(e.target.className)?this.context.fileBrowser._closeSignal=!0:this.context.fileBrowser._closeSignal=!1},_onClick_browser:function(e){e.stopPropagation(),(/close/.test(e.target.getAttribute("data-command"))||this.context.fileBrowser._closeSignal)&&this.plugins.fileBrowser.close.call(this)},open:function(e,t){this.plugins.fileBrowser._bindClose&&(this._d.removeEventListener("keydown",this.plugins.fileBrowser._bindClose),this.plugins.fileBrowser._bindClose=null),this.plugins.fileBrowser._bindClose=function(e){/27/.test(e.keyCode)&&this.plugins.fileBrowser.close.call(this)}.bind(this),this._d.addEventListener("keydown",this.plugins.fileBrowser._bindClose);const n=this.context.fileBrowser;n.contextPlugin=e,n.selectorHandler=t;const i=this.context[e],l=i.listClass;this.util.hasClass(n.list,l)||(n.list.className="se-file-browser-list "+l),"full"===this.options.popupDisplay?n.area.style.position="fixed":n.area.style.position="absolute",n.titleArea.textContent=i.title,n.area.style.display="block",this.context[e].directData?this.plugins.fileBrowser._drawListItem.call(this,this.context[e].directData,!0):this.plugins.fileBrowser._drawFileList.call(this,this.context[e].url,this.context[e].header)},_bindClose:null,close:function(){const e=this.plugins.fileBrowser;e._xmlHttp&&e._xmlHttp.abort(),e._bindClose&&(this._d.removeEventListener("keydown",e._bindClose),e._bindClose=null);const t=this.context.fileBrowser;t.area.style.display="none",t.selectorHandler=null,t.selectedTags=[],t.items=[],t.list.innerHTML=t.tagArea.innerHTML=t.titleArea.textContent="","function"==typeof this.plugins[t.contextPlugin].init&&this.plugins[t.contextPlugin].init.call(this),t.contextPlugin=""},showBrowserLoading:function(){this._loading.style.display="block"},closeBrowserLoading:function(){this._loading.style.display="none"},_drawFileList:function(e,t){const n=this.plugins.fileBrowser,i=n._xmlHttp=this.util.getXMLHttpRequest();if(i.onreadystatechange=n._callBackGet.bind(this,i),i.open("get",e,!0),null!==t&&"object"==typeof t&&this._w.Object.keys(t).length>0)for(let e in t)i.setRequestHeader(e,t[e]);i.send(null),this.plugins.fileBrowser.showBrowserLoading()},_callBackGet:function(e){if(4===e.readyState)if(this.plugins.fileBrowser._xmlHttp=null,200===e.status)try{const t=JSON.parse(e.responseText);t.result.length>0?this.plugins.fileBrowser._drawListItem.call(this,t.result,!0):t.nullMessage&&(this.context.fileBrowser.list.innerHTML=t.nullMessage)}catch(e){throw Error('[SUNEDITOR.fileBrowser.drawList.fail] cause : "'+e.message+'"')}finally{this.plugins.fileBrowser.closeBrowserLoading(),this.context.fileBrowser.body.style.maxHeight=this._w.innerHeight-this.context.fileBrowser.header.offsetHeight-50+"px"}else if(this.plugins.fileBrowser.closeBrowserLoading(),0!==e.status){const t=e.responseText?JSON.parse(e.responseText):e,n="[SUNEDITOR.fileBrowser.get.serverException] status: "+e.status+", response: "+(t.errorMessage||e.responseText);throw Error(n)}},_drawListItem:function(e,t){const n=this.context.fileBrowser,i=this.context[n.contextPlugin],l=[],o=e.length,s=i.columnSize||n.columnSize,a=s<=1?1:Math.round(o/s)||1,r=i.itemTemplateHandler;let c="",d='<div class="se-file-item-column">',u=1;for(let n,i,h=0;h<o;h++)if(n=e[h],i=n.tag?"string"==typeof n.tag?n.tag.split(","):n.tag:[],i=n.tag=i.map((function(e){return e.trim()})),d+=r(n),(h+1)%a==0&&u<s&&h+1<o&&(u++,d+='</div><div class="se-file-item-column">'),t&&i.length>0)for(let e,t=0,n=i.length;t<n;t++)e=i[t],e&&-1===l.indexOf(e)&&(l.push(e),c+='<a title="'+e+'" aria-label="'+e+'">'+e+"</a>");d+="</div>",n.list.innerHTML=d,t&&(n.items=e,n.tagArea.innerHTML=c,n.tagElements=n.tagArea.querySelectorAll("A"))},onClickTag:function(e){const t=e.target;if(!this.util.isAnchor(t))return;const n=t.textContent,i=this.plugins.fileBrowser,l=this.context.fileBrowser,o=l.tagArea.querySelector('a[title="'+n+'"]'),s=l.selectedTags,a=s.indexOf(n);a>-1?(s.splice(a,1),this.util.removeClass(o,"on")):(s.push(n),this.util.addClass(o,"on")),i._drawListItem.call(this,0===s.length?l.items:l.items.filter((function(e){return e.tag.some((function(e){return s.indexOf(e)>-1}))})),!1)},onClickFile:function(e){e.preventDefault(),e.stopPropagation();const t=this.context.fileBrowser,n=t.list;let i=e.target,l=null;if(i!==n){for(;n!==i.parentNode&&(l=i.getAttribute("data-command"),!l);)i=i.parentNode;l&&((t.selectorHandler||this.context[t.contextPlugin].selectorHandler)(i,i.parentNode.querySelector(".__se__img_name").textContent),this.plugins.fileBrowser.close.call(this))}}};return void 0===t&&(e.SUNEDITOR_MODULES||Object.defineProperty(e,"SUNEDITOR_MODULES",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_MODULES,"fileBrowser",{enumerable:!0,writable:!1,configurable:!1,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_MODULES a window with a document");return l(e)}:l(i)},P6u4:function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={code:"en",toolbar:{default:"Default",save:"Save",font:"Font",formats:"Formats",fontSize:"Size",bold:"Bold",underline:"Underline",italic:"Italic",strike:"Strike",subscript:"Subscript",superscript:"Superscript",removeFormat:"Remove Format",fontColor:"Font Color",hiliteColor:"Highlight Color",indent:"Indent",outdent:"Outdent",align:"Align",alignLeft:"Align left",alignRight:"Align right",alignCenter:"Align center",alignJustify:"Align justify",list:"List",orderList:"Ordered list",unorderList:"Unordered list",horizontalRule:"Horizontal line",hr_solid:"Solid",hr_dotted:"Dotted",hr_dashed:"Dashed",table:"Table",link:"Link",math:"Math",image:"Image",video:"Video",audio:"Audio",fullScreen:"Full screen",showBlocks:"Show blocks",codeView:"Code view",undo:"Undo",redo:"Redo",preview:"Preview",print:"print",tag_p:"Paragraph",tag_div:"Normal (DIV)",tag_h:"Header",tag_blockquote:"Quote",tag_pre:"Code",template:"Template",lineHeight:"Line height",paragraphStyle:"Paragraph style",textStyle:"Text style",imageGallery:"Image gallery",dir_ltr:"Left to right",dir_rtl:"Right to left",mention:"Mention"},dialogBox:{linkBox:{title:"Insert Link",url:"URL to link",text:"Text to display",newWindowCheck:"Open in new window",downloadLinkCheck:"Download link",bookmark:"Bookmark"},mathBox:{title:"Math",inputLabel:"Mathematical Notation",fontSizeLabel:"Font Size",previewLabel:"Preview"},imageBox:{title:"Insert image",file:"Select from files",url:"Image URL",altText:"Alternative text"},videoBox:{title:"Insert Video",file:"Select from files",url:"Media embed URL, YouTube/Vimeo"},audioBox:{title:"Insert Audio",file:"Select from files",url:"Audio URL"},browser:{tags:"Tags",search:"Search"},caption:"Insert description",close:"Close",submitButton:"Submit",revertButton:"Revert",proportion:"Constrain proportions",basic:"Basic",left:"Left",right:"Right",center:"Center",width:"Width",height:"Height",size:"Size",ratio:"Ratio"},controller:{edit:"Edit",unlink:"Unlink",remove:"Remove",insertRowAbove:"Insert row above",insertRowBelow:"Insert row below",deleteRow:"Delete row",insertColumnBefore:"Insert column before",insertColumnAfter:"Insert column after",deleteColumn:"Delete column",fixedColumnWidth:"Fixed column width",resize100:"Resize 100%",resize75:"Resize 75%",resize50:"Resize 50%",resize25:"Resize 25%",autoSize:"Auto size",mirrorHorizontal:"Mirror, Horizontal",mirrorVertical:"Mirror, Vertical",rotateLeft:"Rotate left",rotateRight:"Rotate right",maxSize:"Max size",minSize:"Min size",tableHeader:"Table header",mergeCells:"Merge cells",splitCells:"Split Cells",HorizontalSplit:"Horizontal split",VerticalSplit:"Vertical split"},menu:{spaced:"Spaced",bordered:"Bordered",neon:"Neon",translucent:"Translucent",shadow:"Shadow",code:"Code"}};return void 0===t&&(e.SUNEDITOR_LANG||Object.defineProperty(e,"SUNEDITOR_LANG",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_LANG,"en",{enumerable:!0,writable:!0,configurable:!0,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_LANG a window with a document");return l(e)}:l(i)},WUQj:function(e,t,n){},XJR1:function(e,t,n){"use strict";n.r(t);n("3FqI"),n("WUQj");var i={name:"colorPicker",add:function(e){const t=e.context;t.colorPicker={colorListHTML:"",_colorInput:"",_defaultColor:"#000",_styleProperty:"color",_currentColor:"",_colorList:[]},t.colorPicker.colorListHTML=this.createColorList(e,this._makeColorList)},createColorList:function(e,t){const n=e.options,i=e.lang,l=n.colorList&&0!==n.colorList.length?n.colorList:["#ff0000","#ff5e00","#ffe400","#abf200","#00d8ff","#0055ff","#6600ff","#ff00dd","#000000","#ffd8d8","#fae0d4","#faf4c0","#e4f7ba","#d4f4fa","#d9e5ff","#e8d9ff","#ffd9fa","#f1f1f1","#ffa7a7","#ffc19e","#faed7d","#cef279","#b2ebf4","#b2ccff","#d1b2ff","#ffb2f5","#bdbdbd","#f15f5f","#f29661","#e5d85c","#bce55c","#5cd1e5","#6699ff","#a366ff","#f261df","#8c8c8c","#980000","#993800","#998a00","#6b9900","#008299","#003399","#3d0099","#990085","#353535","#670000","#662500","#665c00","#476600","#005766","#002266","#290066","#660058","#222222"];let o=[],s='<div class="se-list-inner">';for(let e,n=0,i=l.length;n<i;n++)e=l[n],e&&("string"==typeof e&&(o.push(e),n<i-1)||(o.length>0&&(s+='<div class="se-selector-color">'+t(o)+"</div>",o=[]),"object"==typeof e&&(s+='<div class="se-selector-color">'+t(e)+"</div>")));return s+='<form class="se-form-group"><input type="text" maxlength="9" class="_se_color_picker_input se-color-input"/><button type="submit" class="se-btn-primary _se_color_picker_submit" title="'+i.dialogBox.submitButton+'" aria-label="'+i.dialogBox.submitButton+'">'+e.icons.checked+'</button><button type="button" class="se-btn _se_color_picker_remove" title="'+i.toolbar.removeFormat+'" aria-label="'+i.toolbar.removeFormat+'">'+e.icons.erase+"</button></form></div>",s},_makeColorList:function(e){let t="";t+='<ul class="se-color-pallet">';for(let n,i=0,l=e.length;i<l;i++)n=e[i],"string"==typeof n&&(t+='<li><button type="button" data-value="'+n+'" title="'+n+'" aria-label="'+n+'" style="background-color:'+n+';"></button></li>');return t+="</ul>",t},init:function(e,t){const n=this.plugins.colorPicker;let i=t||(n.getColorInNode.call(this,e)||this.context.colorPicker._defaultColor);i=n.isHexColor(i)?i:n.rgb2hex(i)||i;const l=this.context.colorPicker._colorList;if(l)for(let e=0,t=l.length;e<t;e++)i.toLowerCase()===l[e].getAttribute("data-value").toLowerCase()?this.util.addClass(l[e],"active"):this.util.removeClass(l[e],"active");n.setInputText.call(this,n.colorName2hex.call(this,i))},setCurrentColor:function(e){this.context.colorPicker._currentColor=e,this.context.colorPicker._colorInput.style.borderColor=e},setInputText:function(e){e=/^#/.test(e)?e:"#"+e,this.context.colorPicker._colorInput.value=e,this.plugins.colorPicker.setCurrentColor.call(this,e)},getColorInNode:function(e){let t="";const n=this.context.colorPicker._styleProperty;for(;e&&!this.util.isWysiwygDiv(e)&&0===t.length;)1===e.nodeType&&e.style[n]&&(t=e.style[n]),e=e.parentNode;return t},isHexColor:function(e){return/^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(e)},rgb2hex:function(e){const t=e.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);return t&&4===t.length?"#"+("0"+parseInt(t[1],10).toString(16)).slice(-2)+("0"+parseInt(t[2],10).toString(16)).slice(-2)+("0"+parseInt(t[3],10).toString(16)).slice(-2):""},colorName2hex:function(e){if(/^#/.test(e))return e;var t=this.util.createElement("div");t.style.display="none",t.style.color=e;var n=this._w.getComputedStyle(this._d.body.appendChild(t)).color.match(/\d+/g).map((function(e){return parseInt(e,10)}));return this.util.removeItem(t),n.length>=3&&"#"+((1<<24)+(n[0]<<16)+(n[1]<<8)+n[2]).toString(16).substr(1)}},l={name:"fontColor",display:"submenu",add:function(e,t){e.addModule([i]);const n=e.context;n.fontColor={previewEl:null,colorInput:null,colorList:null};let l=this.setSubmenu(e);n.fontColor.colorInput=l.querySelector("._se_color_picker_input"),n.fontColor.colorInput.addEventListener("keyup",this.onChangeInput.bind(e)),l.querySelector("._se_color_picker_submit").addEventListener("click",this.submit.bind(e)),l.querySelector("._se_color_picker_remove").addEventListener("click",this.remove.bind(e)),l.addEventListener("click",this.pickup.bind(e)),n.fontColor.colorList=l.querySelectorAll("li button"),e.initMenuTarget(this.name,t,l),l=null},setSubmenu:function(e){const t=e.context.colorPicker.colorListHTML,n=e.util.createElement("DIV");return n.className="se-submenu se-list-layer",n.innerHTML=t,n},on:function(){const e=this.context.colorPicker,t=this.context.fontColor;e._colorInput=t.colorInput;const n=this.wwComputedStyle.color;e._defaultColor=n?this.plugins.colorPicker.isHexColor(n)?n:this.plugins.colorPicker.rgb2hex(n):"#333333",e._styleProperty="color",e._colorList=t.colorList,this.plugins.colorPicker.init.call(this,this.getSelectionNode(),null)},onChangeInput:function(e){this.plugins.colorPicker.setCurrentColor.call(this,e.target.value)},submit:function(){this.plugins.fontColor.applyColor.call(this,this.context.colorPicker._currentColor)},pickup:function(e){e.preventDefault(),e.stopPropagation(),this.plugins.fontColor.applyColor.call(this,e.target.getAttribute("data-value"))},remove:function(){this.nodeChange(null,["color"],["span"],!0),this.submenuOff()},applyColor:function(e){if(!e)return;const t=this.util.createElement("SPAN");t.style.color=e,this.nodeChange(t,["color"],null,null),this.submenuOff()}},o={name:"hiliteColor",display:"submenu",add:function(e,t){e.addModule([i]);const n=e.context;n.hiliteColor={previewEl:null,colorInput:null,colorList:null};let l=this.setSubmenu(e);n.hiliteColor.colorInput=l.querySelector("._se_color_picker_input"),n.hiliteColor.colorInput.addEventListener("keyup",this.onChangeInput.bind(e)),l.querySelector("._se_color_picker_submit").addEventListener("click",this.submit.bind(e)),l.querySelector("._se_color_picker_remove").addEventListener("click",this.remove.bind(e)),l.addEventListener("click",this.pickup.bind(e)),n.hiliteColor.colorList=l.querySelectorAll("li button"),e.initMenuTarget(this.name,t,l),l=null},setSubmenu:function(e){const t=e.context.colorPicker.colorListHTML,n=e.util.createElement("DIV");return n.className="se-submenu se-list-layer",n.innerHTML=t,n},on:function(){const e=this.context.colorPicker,t=this.context.hiliteColor;e._colorInput=t.colorInput;const n=this.wwComputedStyle.backgroundColor;e._defaultColor=n?this.plugins.colorPicker.isHexColor(n)?n:this.plugins.colorPicker.rgb2hex(n):"#ffffff",e._styleProperty="backgroundColor",e._colorList=t.colorList,this.plugins.colorPicker.init.call(this,this.getSelectionNode(),null)},onChangeInput:function(e){this.plugins.colorPicker.setCurrentColor.call(this,e.target.value)},submit:function(){this.plugins.hiliteColor.applyColor.call(this,this.context.colorPicker._currentColor)},pickup:function(e){e.preventDefault(),e.stopPropagation(),this.plugins.hiliteColor.applyColor.call(this,e.target.getAttribute("data-value"))},remove:function(){this.nodeChange(null,["background-color"],["span"],!0),this.submenuOff()},applyColor:function(e){if(!e)return;const t=this.util.createElement("SPAN");t.style.backgroundColor=e,this.nodeChange(t,["background-color"],null,null),this.submenuOff()}},s={name:"template",display:"submenu",add:function(e,t){e.context.template={selectedIndex:-1};let n=this.setSubmenu(e);n.querySelector("ul").addEventListener("click",this.pickup.bind(e)),e.initMenuTarget(this.name,t,n),n=null},setSubmenu:function(e){const t=e.options.templates;if(!t||0===t.length)throw Error('[SUNEDITOR.plugins.template.fail] To use the "template" plugin, please define the "templates" option.');const n=e.util.createElement("DIV");n.className="se-list-layer";let i='<div class="se-submenu se-list-inner"><ul class="se-list-basic">';for(let e,n=0,l=t.length;n<l;n++)e=t[n],i+='<li><button type="button" class="se-btn-list" data-value="'+n+'" title="'+e.name+'" aria-label="'+e.name+'">'+e.name+"</button></li>";return i+="</ul></div>",n.innerHTML=i,n},pickup:function(e){if(!/^BUTTON$/i.test(e.target.tagName))return!1;e.preventDefault(),e.stopPropagation(),this.context.template.selectedIndex=1*e.target.getAttribute("data-value");const t=this.options.templates[this.context.template.selectedIndex];if(!t.html)throw this.submenuOff(),Error('[SUNEDITOR.template.fail] cause : "templates[i].html not found"');this.setContents(t.html),this.submenuOff()}},a=n("1kvd"),r=n.n(a),c={name:"selectMenu",add:function(e){e.context.selectMenu={caller:{},callerContext:null}},setForm:function(){return'<div class="se-select-list"></div>'},createList:function(e,t,n){e.form.innerHTML="<ul>"+n+"</ul>",e.items=t,e.menus=e.form.querySelectorAll("li")},initEvent:function(e,t){const n=t.querySelector(".se-select-list"),i=this.context.selectMenu.caller[e]={form:n,items:[],menus:[],index:-1,item:null,clickMethod:null,callerName:e};n.addEventListener("mousedown",this.plugins.selectMenu.onMousedown_list),n.addEventListener("mousemove",this.plugins.selectMenu.onMouseMove_list.bind(this,i)),n.addEventListener("click",this.plugins.selectMenu.onClick_list.bind(this,i))},onMousedown_list:function(e){e.preventDefault(),e.stopPropagation()},onMouseMove_list:function(e,t){this.util.addClass(e.form,"__se_select-menu-mouse-move");const n=t.target.getAttribute("data-index");n&&(e.index=1*n)},onClick_list:function(e,t){const n=t.target.getAttribute("data-index");n&&e.clickMethod.call(this,e.items[n])},moveItem:function(e,t){this.util.removeClass(e.form,"__se_select-menu-mouse-move"),t=e.index+t;const n=e.menus,i=n.length,l=e.index=t>=i?0:t<0?i-1:t;for(let e=0;e<i;e++)e===l?this.util.addClass(n[e],"active"):this.util.removeClass(n[e],"active");e.item=e.items[l]},getItem:function(e,t){return t=!t||t<0?e.index:t,e.items[t]},on:function(e,t){const n=this.context.selectMenu.caller[e];this.context.selectMenu.callerContext=n,n.clickMethod=t,n.callerName=e},open:function(e,t){const n=e.form;n.style.visibility="hidden",n.style.display="block",t(n),n.style.visibility=""},close:function(e){e.form.style.display="none",e.items=[],e.menus=[],e.index=-1,e.item=null},init:function(e){e&&(e.items=[],e.menus=[],e.index=-1,e.item=null,e.callerName="",this.context.selectMenu.callerContext=null)}},d={name:"anchor",add:function(e){e.addModule([c]),e.context.anchor={caller:{},forms:this.setDialogForm(e),host:(e._w.location.origin+e._w.location.pathname).replace(/\/$/,""),callerContext:null}},setDialogForm:function(e){const t=e.lang,n=e.options.linkRel,i=(e.options.linkRelDefault.default||"").split(" "),l=e.icons,o=e.util.createElement("DIV");let s='<div class="se-dialog-body"><div class="se-dialog-form"><label>'+t.dialogBox.linkBox.url+'</label><div class="se-dialog-form-files"><input class="se-input-form se-input-url" type="text" placeholder="'+(e.options.protocol||"")+'" /><button type="button" class="se-btn se-dialog-files-edge-button _se_bookmark_button" title="'+t.dialogBox.linkBox.bookmark+'" aria-label="'+t.dialogBox.linkBox.bookmark+'">'+l.bookmark+"</button>"+e.plugins.selectMenu.setForm()+'</div><div class="se-anchor-preview-form"><span class="se-svg se-anchor-preview-icon _se_anchor_bookmark_icon">'+l.bookmark+'</span><span class="se-svg se-anchor-preview-icon _se_anchor_download_icon">'+l.download+'</span><pre class="se-link-preview"></pre></div></div><div class="se-dialog-form"><label>'+t.dialogBox.linkBox.text+'</label><input class="se-input-form _se_anchor_text" type="text" /></div><div class="se-dialog-form-footer"><label><input type="checkbox" class="se-dialog-btn-check _se_anchor_check" />&nbsp;'+t.dialogBox.linkBox.newWindowCheck+'</label><label><input type="checkbox" class="se-dialog-btn-check _se_anchor_download" />&nbsp;'+t.dialogBox.linkBox.downloadLinkCheck+"</label>";if(n.length>0){s+='<div class="se-anchor-rel"><button type="button" class="se-btn se-btn-select se-anchor-rel-btn">&lt;rel&gt;</button><div class="se-anchor-rel-wrapper"><pre class="se-link-preview se-anchor-rel-preview"></pre></div><div class="se-list-layer"><div class="se-list-inner"><ul class="se-list-basic se-list-checked">';for(let e,t=0,o=n.length;t<o;t++)e=n[t],s+='<li><button type="button" class="se-btn-list'+(i.indexOf(e)>-1?" se-checked":"")+'" data-command="'+e+'" title="'+e+'" aria-label="'+e+'"><span class="se-svg">'+l.checked+"</span>"+e+"</button></li>";s+="</ul></div></div></div>"}return s+="</div></div>",o.innerHTML=s,o},initEvent:function(e,t){const n=this.plugins.anchor,i=this.context.anchor.caller[e]={modal:t,urlInput:null,linkDefaultRel:this.options.linkRelDefault,defaultRel:this.options.linkRelDefault.default||"",currentRel:[],linkAnchor:null,linkValue:"",_change:!1,callerName:e};"string"==typeof i.linkDefaultRel.default&&(i.linkDefaultRel.default=i.linkDefaultRel.default.trim()),"string"==typeof i.linkDefaultRel.check_new_window&&(i.linkDefaultRel.check_new_window=i.linkDefaultRel.check_new_window.trim()),"string"==typeof i.linkDefaultRel.check_bookmark&&(i.linkDefaultRel.check_bookmark=i.linkDefaultRel.check_bookmark.trim()),i.urlInput=t.querySelector(".se-input-url"),i.anchorText=t.querySelector("._se_anchor_text"),i.newWindowCheck=t.querySelector("._se_anchor_check"),i.downloadCheck=t.querySelector("._se_anchor_download"),i.download=t.querySelector("._se_anchor_download_icon"),i.preview=t.querySelector(".se-link-preview"),i.bookmark=t.querySelector("._se_anchor_bookmark_icon"),i.bookmarkButton=t.querySelector("._se_bookmark_button"),this.plugins.selectMenu.initEvent.call(this,e,t);const l=this.context.selectMenu.caller[e];this.options.linkRel.length>0&&(i.relButton=t.querySelector(".se-anchor-rel-btn"),i.relList=t.querySelector(".se-list-layer"),i.relPreview=t.querySelector(".se-anchor-rel-preview"),i.relButton.addEventListener("click",n.onClick_relButton.bind(this,i)),i.relList.addEventListener("click",n.onClick_relList.bind(this,i))),i.newWindowCheck.addEventListener("change",n.onChange_newWindowCheck.bind(this,i)),i.downloadCheck.addEventListener("change",n.onChange_downloadCheck.bind(this,i)),i.anchorText.addEventListener("input",n.onChangeAnchorText.bind(this,i)),i.urlInput.addEventListener("input",n.onChangeUrlInput.bind(this,i)),i.urlInput.addEventListener("keydown",n.onKeyDownUrlInput.bind(this,l)),i.urlInput.addEventListener("focus",n.onFocusUrlInput.bind(this,i,l)),i.urlInput.addEventListener("blur",n.onBlurUrlInput.bind(this,l)),i.bookmarkButton.addEventListener("click",n.onClick_bookmarkButton.bind(this,i))},on:function(e,t){const n=this.plugins.anchor;if(t){if(e.linkAnchor){this.context.dialog.updateModal=!0;const t=e.linkAnchor.getAttribute("href");e.linkValue=e.preview.textContent=e.urlInput.value=n.selfPathBookmark.call(this,t)?t.substr(t.lastIndexOf("#")):t,e.anchorText.value=e.linkAnchor.textContent,e.newWindowCheck.checked=!!/_blank/i.test(e.linkAnchor.target),e.downloadCheck.checked=e.linkAnchor.download}}else n.init.call(this,e),e.anchorText.value=this.getSelection().toString().trim(),e.newWindowCheck.checked=this.options.linkTargetNewWindow;this.context.anchor.callerContext=e,n.setRel.call(this,e,t&&e.linkAnchor?e.linkAnchor.rel:e.defaultRel),n.setLinkPreview.call(this,e,e.linkValue),this.plugins.selectMenu.on.call(this,e.callerName,this.plugins.anchor.setHeaderBookmark)},selfPathBookmark:function(e){const t=this._w.location.href.replace(/\/$/,"");return 0===e.indexOf("#")||0===e.indexOf(t)&&e.indexOf("#")===(-1===t.indexOf("#")?t.length:t.substr(0,t.indexOf("#")).length)},_closeRelMenu:null,toggleRelList:function(e,t){if(t){const t=e.relButton,n=e.relList;this.util.addClass(t,"active"),n.style.visibility="hidden",n.style.display="block",this.options.rtl?n.style.left=t.offsetLeft-n.offsetWidth-1+"px":n.style.left=t.offsetLeft+t.offsetWidth+1+"px",n.style.top=t.offsetTop+t.offsetHeight/2-n.offsetHeight/2+"px",n.style.visibility="",this.plugins.anchor._closeRelMenu=function(e,t,n){n&&(e.relButton.contains(n.target)||e.relList.contains(n.target))||(this.util.removeClass(t,"active"),e.relList.style.display="none",this.modalForm.removeEventListener("click",this.plugins.anchor._closeRelMenu),this.plugins.anchor._closeRelMenu=null)}.bind(this,e,t),this.modalForm.addEventListener("click",this.plugins.anchor._closeRelMenu)}else this.plugins.anchor._closeRelMenu&&this.plugins.anchor._closeRelMenu()},onClick_relButton:function(e,t){this.plugins.anchor.toggleRelList.call(this,e,!this.util.hasClass(t.target,"active"))},onClick_relList:function(e,t){const n=t.target,i=n.getAttribute("data-command");if(!i)return;const l=e.currentRel,o=this.util.toggleClass(n,"se-checked"),s=l.indexOf(i);o?-1===s&&l.push(i):s>-1&&l.splice(s,1),e.relPreview.title=e.relPreview.textContent=l.join(" ")},setRel:function(e,t){const n=e.relList,i=e.currentRel=t?t.split(" "):[];if(!n)return;const l=n.querySelectorAll("button");for(let e,t=0,n=l.length;t<n;t++)e=l[t].getAttribute("data-command"),i.indexOf(e)>-1?this.util.addClass(l[t],"se-checked"):this.util.removeClass(l[t],"se-checked");e.relPreview.title=e.relPreview.textContent=i.join(" ")},createHeaderList:function(e,t,n){const i=this.util.getListChildren(this.context.element.wysiwyg,(function(e){return/h[1-6]/i.test(e.nodeName)}));if(0===i.length)return;const l=new this._w.RegExp("^"+n.replace(/^#/,""),"i"),o=[];let s="";for(let e,t=0,n=i.length;t<n;t++)e=i[t],l.test(e.textContent)&&(o.push(e),s+='<li class="se-select-item" data-index="'+t+'">'+e.textContent+"</li>");0===o.length?this.plugins.selectMenu.close.call(this,t):(this.plugins.selectMenu.createList(t,o,s),this.plugins.selectMenu.open.call(this,t,this.plugins.anchor._setMenuListPosition.bind(this,e)))},_setMenuListPosition:function(e,t){t.style.top=e.urlInput.offsetHeight+1+"px"},onKeyDownUrlInput:function(e,t){switch(t.keyCode){case 38:t.preventDefault(),t.stopPropagation(),this.plugins.selectMenu.moveItem.call(this,e,-1);break;case 40:t.preventDefault(),t.stopPropagation(),this.plugins.selectMenu.moveItem.call(this,e,1);break;case 13:e.index>-1&&(t.preventDefault(),t.stopPropagation(),this.plugins.anchor.setHeaderBookmark.call(this,this.plugins.selectMenu.getItem(e,null)))}},setHeaderBookmark:function(e){const t=this.context.anchor.callerContext,n=e.id||"h_"+this._w.Math.random().toString().replace(/.+\./,"");e.id=n,t.urlInput.value="#"+n,t.anchorText.value.trim()&&t._change||(t.anchorText.value=e.textContent),this.plugins.anchor.setLinkPreview.call(this,t,t.urlInput.value),this.plugins.selectMenu.close.call(this,this.context.selectMenu.callerContext),this.context.anchor.callerContext.urlInput.focus()},onChangeAnchorText:function(e,t){e._change=!!t.target.value.trim()},onChangeUrlInput:function(e,t){const n=t.target.value.trim();this.plugins.anchor.setLinkPreview.call(this,e,n),this.plugins.anchor.selfPathBookmark.call(this,n)?this.plugins.anchor.createHeaderList.call(this,e,this.context.selectMenu.callerContext,n):this.plugins.selectMenu.close.call(this,this.context.selectMenu.callerContext)},onFocusUrlInput:function(e,t){const n=e.urlInput.value;this.plugins.anchor.selfPathBookmark.call(this,n)&&this.plugins.anchor.createHeaderList.call(this,e,t,n)},onBlurUrlInput:function(e){this.plugins.selectMenu.close.call(this,e)},setLinkPreview:function(e,t){const n=e.preview,i=this.options.linkProtocol,l=this.options.linkNoPrefix,o=/^(mailto\:|tel\:|sms\:|https*\:\/\/|#)/.test(t)||0===t.indexOf(i),s=!!i&&this._w.RegExp("^"+this.util.escapeStringRegexp(t.substr(0,i.length))).test(i);t=e.linkValue=n.textContent=t?l?t:!i||o||s?o?t:/^www\./.test(t)?"http://"+t:this.context.anchor.host+(/^\//.test(t)?"":"/")+t:i+t:"",this.plugins.anchor.selfPathBookmark.call(this,t)?(e.bookmark.style.display="block",this.util.addClass(e.bookmarkButton,"active")):(e.bookmark.style.display="none",this.util.removeClass(e.bookmarkButton,"active")),!this.plugins.anchor.selfPathBookmark.call(this,t)&&e.downloadCheck.checked?e.download.style.display="block":e.download.style.display="none"},setCtx:function(e,t){e&&(t.linkAnchor=e,t.linkValue=e.href,t.currentRel=e.rel.split(" "))},updateAnchor:function(e,t,n,i,l){!this.plugins.anchor.selfPathBookmark.call(this,t)&&i.downloadCheck.checked?e.setAttribute("download",n||t):e.removeAttribute("download"),i.newWindowCheck.checked?e.target="_blank":e.removeAttribute("target");const o=i.currentRel.join(" ");o?e.rel=o:e.removeAttribute("rel"),e.href=t,l?0===e.children.length&&(e.textContent=""):e.textContent=n},createAnchor:function(e,t){if(0===e.linkValue.length)return null;const n=e.linkValue,i=e.anchorText,l=0===i.value.length?n:i.value,o=e.linkAnchor||this.util.createElement("A");return this.plugins.anchor.updateAnchor.call(this,o,n,l,e,t),e.linkValue=e.preview.textContent=e.urlInput.value=e.anchorText.value="",o},onClick_bookmarkButton:function(e){let t=e.urlInput.value;this.plugins.anchor.selfPathBookmark.call(this,t)?(t=t.substr(1),e.bookmark.style.display="none",this.util.removeClass(e.bookmarkButton,"active"),this.plugins.selectMenu.close.call(this,this.context.selectMenu.callerContext)):(t="#"+t,e.bookmark.style.display="block",this.util.addClass(e.bookmarkButton,"active"),e.downloadCheck.checked=!1,e.download.style.display="none",this.plugins.anchor.createHeaderList.call(this,e,this.context.selectMenu.callerContext,t)),e.urlInput.value=t,this.plugins.anchor.setLinkPreview.call(this,e,t),e.urlInput.focus()},onChange_newWindowCheck:function(e,t){"string"==typeof e.linkDefaultRel.check_new_window&&(t.target.checked?this.plugins.anchor.setRel.call(this,e,this.plugins.anchor._relMerge.call(this,e,e.linkDefaultRel.check_new_window)):this.plugins.anchor.setRel.call(this,e,this.plugins.anchor._relDelete.call(this,e,e.linkDefaultRel.check_new_window)))},onChange_downloadCheck:function(e,t){t.target.checked?(e.download.style.display="block",e.bookmark.style.display="none",this.util.removeClass(e.bookmarkButton,"active"),e.linkValue=e.preview.textContent=e.urlInput.value=e.urlInput.value.replace(/^\#+/,""),"string"==typeof e.linkDefaultRel.check_bookmark&&this.plugins.anchor.setRel.call(this,e,this.plugins.anchor._relMerge.call(this,e,e.linkDefaultRel.check_bookmark))):(e.download.style.display="none","string"==typeof e.linkDefaultRel.check_bookmark&&this.plugins.anchor.setRel.call(this,e,this.plugins.anchor._relDelete.call(this,e,e.linkDefaultRel.check_bookmark)))},_relMerge:function(e,t){const n=e.currentRel;if(!t)return n.join(" ");if(/^only\:/.test(t))return t=t.replace(/^only\:/,"").trim(),e.currentRel=t.split(" "),t;const i=t.split(" ");for(let e,t=0,l=i.length;t<l;t++)e=n.indexOf(i[t]),-1===e&&n.push(i[t]);return n.join(" ")},_relDelete:function(e,t){if(!t)return e.currentRel.join(" ");/^only\:/.test(t)&&(t=t.replace(/^only\:/,"").trim());const n=e.currentRel.join(" ").replace(this._w.RegExp(t+"\\s*"),"");return e.currentRel=n.split(" "),n},init:function(e){e.linkAnchor=null,e.linkValue=e.preview.textContent=e.urlInput.value="",e.anchorText.value="",e.newWindowCheck.checked=!1,e.downloadCheck.checked=!1,e._change=!1,this.plugins.anchor.setRel.call(this,e,e.defaultRel),e.relList&&this.plugins.anchor.toggleRelList.call(this,e,!1),this.context.anchor.callerContext=null,this.plugins.selectMenu.init.call(this,this.context.selectMenu.callerContext)}},u={name:"link",display:"dialog",add:function(e){e.addModule([r.a,d]);const t=e.context,n=t.link={focusElement:null,_linkAnchor:null,anchorCtx:null};let i=this.setDialog(e);n.modal=i;let l=this.setController_LinkButton(e);n.linkController=l,i.querySelector("form").addEventListener("submit",this.submit.bind(e)),l.addEventListener("click",this.onClick_linkController.bind(e)),t.dialog.modal.appendChild(i),t.element.relative.appendChild(l),e.plugins.anchor.initEvent.call(e,"link",i),n.focusElement=t.anchor.caller.link.urlInput,i=null,l=null},setDialog:function(e){const t=e.lang,n=e.util.createElement("DIV"),i=e.icons;n.className="se-dialog-content",n.style.display="none";let l='<form><div class="se-dialog-header"><button type="button" data-command="close" class="se-btn se-dialog-close" title="'+t.dialogBox.close+'" aria-label="'+t.dialogBox.close+'">'+i.cancel+'</button><span class="se-modal-title">'+t.dialogBox.linkBox.title+"</span></div>"+e.context.anchor.forms.innerHTML+'<div class="se-dialog-footer"><button type="submit" class="se-btn-primary" title="'+t.dialogBox.submitButton+'" aria-label="'+t.dialogBox.submitButton+'"><span>'+t.dialogBox.submitButton+"</span></button></div></form>";return n.innerHTML=l,n},setController_LinkButton:function(e){const t=e.lang,n=e.icons,i=e.util.createElement("DIV");return i.className="se-controller se-controller-link",i.innerHTML='<div class="se-arrow se-arrow-up"></div><div class="link-content"><span><a target="_blank" href=""></a>&nbsp;</span><div class="se-btn-group"><button type="button" data-command="update" tabindex="-1" class="se-btn se-tooltip">'+n.edit+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.edit+'</span></span></button><button type="button" data-command="unlink" tabindex="-1" class="se-btn se-tooltip">'+n.unlink+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.unlink+'</span></span></button><button type="button" data-command="delete" tabindex="-1" class="se-btn se-tooltip">'+n.delete+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.remove+"</span></span></button></div></div>",i},open:function(){this.plugins.dialog.open.call(this,"link","link"===this.currentControllerName)},submit:function(e){this.showLoading(),e.preventDefault(),e.stopPropagation();try{const e=this.plugins.anchor.createAnchor.call(this,this.context.anchor.caller.link,!1);if(null===e)return;if(this.context.dialog.updateModal){const e=this.context.link._linkAnchor.childNodes[0];this.setRange(e,0,e,e.textContent.length)}else{const t=this.getSelectedElements();if(t.length>1){const n=this.util.createElement(t[0].nodeName);if(n.appendChild(e),!this.insertNode(n,null,!0))return}else if(!this.insertNode(e,null,!0))return;this.setRange(e.childNodes[0],0,e.childNodes[0],e.textContent.length)}}finally{this.plugins.dialog.close.call(this),this.closeLoading(),this.history.push(!1)}return!1},active:function(e){if(e){if(this.util.isAnchor(e)&&null===e.getAttribute("data-image-link"))return this.controllerArray.indexOf(this.context.link.linkController)<0&&this.plugins.link.call_controller.call(this,e),!0}else this.controllerArray.indexOf(this.context.link.linkController)>-1&&this.controllersOff();return!1},on:function(e){this.plugins.anchor.on.call(this,this.context.anchor.caller.link,e)},call_controller:function(e){this.editLink=this.context.link._linkAnchor=this.context.anchor.caller.link.linkAnchor=e;const t=this.context.link.linkController,n=t.querySelector("a");n.href=e.href,n.title=e.textContent,n.textContent=e.textContent,this.util.addClass(e,"on"),this.setControllerPosition(t,e,"bottom",{left:0,top:0}),this.controllersOn(t,e,"link",this.util.removeClass.bind(this.util,this.context.link._linkAnchor,"on"))},onClick_linkController:function(e){e.stopPropagation();const t=e.target.getAttribute("data-command")||e.target.parentNode.getAttribute("data-command");if(t){if(e.preventDefault(),/update/.test(t))this.plugins.dialog.open.call(this,"link",!0);else if(/unlink/.test(t)){const e=this.util.getChildElement(this.context.link._linkAnchor,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!1),t=this.util.getChildElement(this.context.link._linkAnchor,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!0);this.setRange(e,0,t,t.textContent.length),this.nodeChange(null,null,["A"],!1)}else this.util.removeItem(this.context.link._linkAnchor),this.context.anchor.caller.link.linkAnchor=null,this.focus(),this.history.push(!1);this.controllersOff()}},init:function(){this.context.link.linkController.style.display="none",this.plugins.anchor.init.call(this,this.context.anchor.caller.link)}},h=n("ZED3"),g=n.n(h),p=n("ee5k"),m=n.n(p),f=n("gjS+"),_=n.n(f),b={name:"image",display:"dialog",add:function(e){e.addModule([r.a,d,g.a,m.a,_.a]);const t=e.options,n=e.context,i=n.image={_infoList:[],_infoIndex:0,_uploadFileLength:0,focusElement:null,sizeUnit:t._imageSizeUnit,_linkElement:"",_altText:"",_align:"none",_floatClassRegExp:"__se__float\\-[a-z]+",_v_src:{_linkValue:""},svgDefaultSize:"30%",base64RenderIndex:0,_element:null,_cover:null,_container:null,inputX:null,inputY:null,_element_w:1,_element_h:1,_element_l:0,_element_t:0,_defaultSizeX:"auto",_defaultSizeY:"auto",_origin_w:"auto"===t.imageWidth?"":t.imageWidth,_origin_h:"auto"===t.imageHeight?"":t.imageHeight,_proportionChecked:!0,_resizing:t.imageResizing,_resizeDotHide:!t.imageHeightShow,_rotation:t.imageRotation,_alignHide:!t.imageAlignShow,_onlyPercentage:t.imageSizeOnlyPercentage,_ratio:!1,_ratioX:1,_ratioY:1,_captionShow:!0,_captionChecked:!1,_caption:null,captionCheckEl:null};let l=this.setDialog(e);i.modal=l,i.imgInputFile=l.querySelector("._se_image_file"),i.imgUrlFile=l.querySelector("._se_image_url"),i.focusElement=i.imgInputFile||i.imgUrlFile,i.altText=l.querySelector("._se_image_alt"),i.captionCheckEl=l.querySelector("._se_image_check_caption"),i.previewSrc=l.querySelector("._se_tab_content_image .se-link-preview"),l.querySelector(".se-dialog-tabs").addEventListener("click",this.openTab.bind(e)),l.querySelector("form").addEventListener("submit",this.submit.bind(e)),i.imgInputFile&&l.querySelector(".se-file-remove").addEventListener("click",this._removeSelectedFiles.bind(i.imgInputFile,i.imgUrlFile,i.previewSrc)),i.imgUrlFile&&i.imgUrlFile.addEventListener("input",this._onLinkPreview.bind(i.previewSrc,i._v_src,t.linkProtocol)),i.imgInputFile&&i.imgUrlFile&&i.imgInputFile.addEventListener("change",this._fileInputChange.bind(i));const o=l.querySelector(".__se__gallery");o&&o.addEventListener("click",this._openGallery.bind(e)),i.proportion={},i.inputX={},i.inputY={},t.imageResizing&&(i.proportion=l.querySelector("._se_image_check_proportion"),i.inputX=l.querySelector("._se_image_size_x"),i.inputY=l.querySelector("._se_image_size_y"),i.inputX.value=t.imageWidth,i.inputY.value=t.imageHeight,i.inputX.addEventListener("keyup",this.setInputSize.bind(e,"x")),i.inputY.addEventListener("keyup",this.setInputSize.bind(e,"y")),i.inputX.addEventListener("change",this.setRatio.bind(e)),i.inputY.addEventListener("change",this.setRatio.bind(e)),i.proportion.addEventListener("change",this.setRatio.bind(e)),l.querySelector(".se-dialog-btn-revert").addEventListener("click",this.sizeRevert.bind(e))),n.dialog.modal.appendChild(l),e.plugins.anchor.initEvent.call(e,"image",l.querySelector("._se_tab_content_url")),i.anchorCtx=e.context.anchor.caller.image,l=null},setDialog:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");i.className="se-dialog-content se-dialog-image",i.style.display="none";let l='<div class="se-dialog-header"><button type="button" data-command="close" class="se-btn se-dialog-close" class="close" title="'+n.dialogBox.close+'" aria-label="'+n.dialogBox.close+'">'+e.icons.cancel+'</button><span class="se-modal-title">'+n.dialogBox.imageBox.title+'</span></div><div class="se-dialog-tabs"><button type="button" class="_se_tab_link active" data-tab-link="image">'+n.toolbar.image+'</button><button type="button" class="_se_tab_link" data-tab-link="url">'+n.toolbar.link+'</button></div><form method="post" enctype="multipart/form-data"><div class="_se_tab_content _se_tab_content_image"><div class="se-dialog-body"><div style="border-bottom: 1px dashed #ccc;">';if(t.imageFileInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.imageBox.file+'</label><div class="se-dialog-form-files"><input class="se-input-form _se_image_file" type="file" accept="'+t.imageAccept+'"'+(t.imageMultipleFile?' multiple="multiple"':"")+'/><button type="button" class="se-btn se-dialog-files-edge-button se-file-remove" title="'+n.controller.remove+'" aria-label="'+n.controller.remove+'">'+e.icons.cancel+"</button></div></div>"),t.imageUrlInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.imageBox.url+'</label><div class="se-dialog-form-files"><input class="se-input-form se-input-url _se_image_url" type="text" />'+(t.imageGalleryUrl&&e.plugins.imageGallery?'<button type="button" class="se-btn se-dialog-files-edge-button __se__gallery" title="'+n.toolbar.imageGallery+'" aria-label="'+n.toolbar.imageGallery+'">'+e.icons.image_gallery+"</button>":"")+'</div><pre class="se-link-preview"></pre></div>'),l+='</div><div class="se-dialog-form"><label>'+n.dialogBox.imageBox.altText+'</label><input class="se-input-form _se_image_alt" type="text" /></div>',t.imageResizing){const i=t.imageSizeOnlyPercentage,o=i?' style="display: none !important;"':"",s=t.imageHeightShow?"":' style="display: none !important;"';l+='<div class="se-dialog-form">',i||!t.imageHeightShow?l+='<div class="se-dialog-size-text"><label class="size-w">'+n.dialogBox.size+"</label></div>":l+='<div class="se-dialog-size-text"><label class="size-w">'+n.dialogBox.width+'</label><label class="se-dialog-size-x">&nbsp;</label><label class="size-h">'+n.dialogBox.height+"</label></div>",l+='<input class="se-input-control _se_image_size_x" placeholder="auto"'+(i?' type="number" min="1"':'type="text"')+(i?' max="100"':"")+' /><label class="se-dialog-size-x"'+s+">"+(i?"%":"x")+'</label><input type="text" class="se-input-control _se_image_size_y" placeholder="auto"'+o+(i?' max="100"':"")+s+"/><label"+o+s+'><input type="checkbox" class="se-dialog-btn-check _se_image_check_proportion" checked/>&nbsp;'+n.dialogBox.proportion+'</label><button type="button" title="'+n.dialogBox.revertButton+'" aria-label="'+n.dialogBox.revertButton+'" class="se-btn se-dialog-btn-revert" style="float: right;">'+e.icons.revert+"</button></div>"}return l+='<div class="se-dialog-form se-dialog-form-footer"><label><input type="checkbox" class="se-dialog-btn-check _se_image_check_caption" />&nbsp;'+n.dialogBox.caption+'</label></div></div></div><div class="_se_tab_content _se_tab_content_url" style="display: none">'+e.context.anchor.forms.innerHTML+'</div><div class="se-dialog-footer"><div'+(t.imageAlignShow?"":' style="display: none"')+'><label><input type="radio" name="suneditor_image_radio" class="se-dialog-btn-radio" value="none" checked>'+n.dialogBox.basic+'</label><label><input type="radio" name="suneditor_image_radio" class="se-dialog-btn-radio" value="left">'+n.dialogBox.left+'</label><label><input type="radio" name="suneditor_image_radio" class="se-dialog-btn-radio" value="center">'+n.dialogBox.center+'</label><label><input type="radio" name="suneditor_image_radio" class="se-dialog-btn-radio" value="right">'+n.dialogBox.right+'</label></div><button type="submit" class="se-btn-primary" title="'+n.dialogBox.submitButton+'" aria-label="'+n.dialogBox.submitButton+'"><span>'+n.dialogBox.submitButton+"</span></button></div></form>",i.innerHTML=l,i},_fileInputChange:function(){this.imgInputFile.value?(this.imgUrlFile.setAttribute("disabled",!0),this.previewSrc.style.textDecoration="line-through"):(this.imgUrlFile.removeAttribute("disabled"),this.previewSrc.style.textDecoration="")},_removeSelectedFiles:function(e,t){this.value="",e&&(e.removeAttribute("disabled"),t.style.textDecoration="")},_openGallery:function(){this.callPlugin("imageGallery",this.plugins.imageGallery.open.bind(this,this.plugins.image._setUrlInput.bind(this.context.image)),null)},_setUrlInput:function(e){this.altText.value=e.alt,this._v_src._linkValue=this.previewSrc.textContent=this.imgUrlFile.value=e.getAttribute("data-value")||e.src,this.imgUrlFile.focus()},_onLinkPreview:function(e,t,n){const i=n.target.value.trim();e._linkValue=this.textContent=i?t&&-1===i.indexOf("://")&&0!==i.indexOf("#")?t+i:-1===i.indexOf("://")?"/"+i:i:""},fileTags:["img"],select:function(e){this.plugins.image.onModifyMode.call(this,e,this.plugins.resizing.call_controller_resize.call(this,e,"image"))},destroy:function(e){const t=e||this.context.image._element,n=this.util.getParentElement(t,this.util.isMediaComponent)||t,i=1*t.getAttribute("data-index");if("function"==typeof this.functions.onImageDeleteBefore&&!1===this.functions.onImageDeleteBefore(t,n,i,this))return;let l=n.previousElementSibling||n.nextElementSibling;const o=n.parentNode;this.util.removeItem(n),this.plugins.image.init.call(this),this.controllersOff(),o!==this.context.element.wysiwyg&&this.util.removeItemAllParents(o,(function(e){return 0===e.childNodes.length}),null),this.focusEdge(l),this.plugins.fileManager.deleteInfo.call(this,"image",i,this.functions.onImageUpload),this.history.push(!1)},on:function(e){const t=this.context.image;e?t.imgInputFile&&this.options.imageMultipleFile&&t.imgInputFile.removeAttribute("multiple"):(t.inputX.value=t._origin_w=this.options.imageWidth===t._defaultSizeX?"":this.options.imageWidth,t.inputY.value=t._origin_h=this.options.imageHeight===t._defaultSizeY?"":this.options.imageHeight,t.imgInputFile&&this.options.imageMultipleFile&&t.imgInputFile.setAttribute("multiple","multiple")),this.plugins.anchor.on.call(this,t.anchorCtx,e)},open:function(){this.plugins.dialog.open.call(this,"image","image"===this.currentControllerName)},openTab:function(e){const t=this.context.image.modal,n="init"===e?t.querySelector("._se_tab_link"):e.target;if(!/^BUTTON$/i.test(n.tagName))return!1;const i=n.getAttribute("data-tab-link");let l,o,s;for(o=t.getElementsByClassName("_se_tab_content"),l=0;l<o.length;l++)o[l].style.display="none";for(s=t.getElementsByClassName("_se_tab_link"),l=0;l<s.length;l++)this.util.removeClass(s[l],"active");return t.querySelector("._se_tab_content_"+i).style.display="block",this.util.addClass(n,"active"),"image"===i&&this.context.image.focusElement?this.context.image.focusElement.focus():"url"===i&&this.context.anchor.caller.image.urlInput.focus(),!1},submit:function(e){const t=this.context.image,n=this.plugins.image;e.preventDefault(),e.stopPropagation(),t._altText=t.altText.value,t._align=t.modal.querySelector('input[name="suneditor_image_radio"]:checked').value,t._captionChecked=t.captionCheckEl.checked,t._resizing&&(t._proportionChecked=t.proportion.checked);try{this.context.dialog.updateModal&&n.update_image.call(this,!1,!0,!1),t.imgInputFile&&t.imgInputFile.files.length>0?(this.showLoading(),n.submitAction.call(this,this.context.image.imgInputFile.files)):t.imgUrlFile&&t._v_src._linkValue.length>0&&(this.showLoading(),n.onRender_imgUrl.call(this,t._v_src._linkValue))}catch(e){throw this.closeLoading(),Error('[SUNEDITOR.image.submit.fail] cause : "'+e.message+'"')}finally{this.plugins.dialog.close.call(this)}return!1},submitAction:function(e){if(0===e.length)return;let t=0,n=[];for(let i=0,l=e.length;i<l;i++)/image/i.test(e[i].type)&&(n.push(e[i]),t+=e[i].size);const i=this.options.imageUploadSizeLimit;if(i>0){let e=0;const n=this.context.image._infoList;for(let t=0,i=n.length;t<i;t++)e+=1*n[t].size;if(t+e>i){this.closeLoading();const n="[SUNEDITOR.imageUpload.fail] Size of uploadable total images: "+i/1e3+"KB";return void(("function"!=typeof this.functions.onImageUploadError||this.functions.onImageUploadError(n,{limitSize:i,currentSize:e,uploadSize:t},this))&&this.functions.noticeOpen(n))}}const l=this.context.image;l._uploadFileLength=n.length;const o={anchor:this.plugins.anchor.createAnchor.call(this,l.anchorCtx,!0),inputWidth:l.inputX.value,inputHeight:l.inputY.value,align:l._align,isUpdate:this.context.dialog.updateModal,alt:l._altText,element:l._element};if("function"==typeof this.functions.onImageUploadBefore){const e=this.functions.onImageUploadBefore(n,o,this,function(e){e&&this._w.Array.isArray(e.result)?this.plugins.image.register.call(this,o,e):this.plugins.image.upload.call(this,o,e)}.bind(this));if(void 0===e)return;if(!e)return void this.closeLoading();this._w.Array.isArray(e)&&e.length>0&&(n=e)}this.plugins.image.upload.call(this,o,n)},error:function(e,t){if(this.closeLoading(),"function"!=typeof this.functions.onImageUploadError||this.functions.onImageUploadError(e,t,this))throw this.functions.noticeOpen(e),Error("[SUNEDITOR.plugin.image.error] response: "+e)},upload:function(e,t){if(!t)return void this.closeLoading();if("string"==typeof t)return void this.plugins.image.error.call(this,t,null);const n=this.options.imageUploadUrl,i=this.context.dialog.updateModal?1:t.length;if("string"==typeof n&&n.length>0){const l=new FormData;for(let e=0;e<i;e++)l.append("file-"+e,t[e]);this.plugins.fileManager.upload.call(this,n,this.options.imageUploadHeader,l,this.plugins.image.callBack_imgUpload.bind(this,e),this.functions.onImageUploadError)}else this.plugins.image.setup_reader.call(this,t,e.anchor,e.inputWidth,e.inputHeight,e.align,e.alt,i,e.isUpdate)},callBack_imgUpload:function(e,t){if("function"==typeof this.functions.imageUploadHandler)this.functions.imageUploadHandler(t,e,this);else{const n=JSON.parse(t.responseText);n.errorMessage?this.plugins.image.error.call(this,n.errorMessage,n):this.plugins.image.register.call(this,e,n)}},register:function(e,t){const n=t.result;for(let t,i=0,l=n.length;i<l;i++){if(t={name:n[i].name,size:n[i].size},e.isUpdate){this.plugins.image.update_src.call(this,n[i].url,e.element,t);break}this.plugins.image.create_image.call(this,n[i].url,e.anchor,e.inputWidth,e.inputHeight,e.align,t,e.alt)}this.closeLoading()},setup_reader:function(e,t,n,i,l,o,s,a){try{if(0===s)return this.closeLoading(),void console.warn("[SUNEDITOR.image.base64.fail] cause : No applicable files");this.context.image.base64RenderIndex=s;const r=this._w.FileReader,c=[s];this.context.image.inputX.value=n,this.context.image.inputY.value=i;for(let d,u,h=0;h<s;h++)d=new r,u=e[h],d.onload=function(e,s,a,r,d){c[d]={result:e.result,file:r},0==--this.context.image.base64RenderIndex&&(this.plugins.image.onRender_imgBase64.call(this,s,c,a,t,n,i,l,o),this.closeLoading())}.bind(this,d,a,this.context.image._element,u,h),d.readAsDataURL(u)}catch(e){throw this.closeLoading(),Error('[SUNEDITOR.image.setup_reader.fail] cause : "'+e.message+'"')}},onRender_imgBase64:function(e,t,n,i,l,o,s,a){const r=this.plugins.image.update_src,c=this.plugins.image.create_image;for(let d=0,u=t.length;d<u;d++)e?(this.context.image._element.setAttribute("data-file-name",t[d].file.name),this.context.image._element.setAttribute("data-file-size",t[d].file.size),r.call(this,t[d].result,n,t[d].file)):c.call(this,t[d].result,i,l,o,s,t[d].file,a)},onRender_imgUrl:function(e){if(e||(e=this.context.image._v_src._linkValue),!e)return!1;const t=this.context.image;try{const n={name:e.split("/").pop(),size:0};this.context.dialog.updateModal?this.plugins.image.update_src.call(this,e,t._element,n):this.plugins.image.create_image.call(this,e,this.plugins.anchor.createAnchor.call(this,t.anchorCtx,!0),t.inputX.value,t.inputY.value,t._align,n,t._altText)}catch(e){throw Error('[SUNEDITOR.image.URLRendering.fail] cause : "'+e.message+'"')}finally{this.closeLoading()}},onRender_link:function(e,t){return t?(t.setAttribute("data-image-link","image"),e.setAttribute("data-image-link",t.href),t.appendChild(e),t):e},setInputSize:function(e,t){t&&32===t.keyCode?t.preventDefault():this.plugins.resizing._module_setInputSize.call(this,this.context.image,e)},setRatio:function(){this.plugins.resizing._module_setRatio.call(this,this.context.image)},checkFileInfo:function(){const e=this.plugins.image,t=this.context.image,n=function(n){e.onModifyMode.call(this,n,null),e.openModify.call(this,!0),t.inputX.value=t._origin_w,t.inputY.value=t._origin_h;const i=this.util.getFormatElement(n);i&&(t._align=i.style.textAlign||i.style.float),this.util.isAnchor(n.parentNode)&&!t.anchorCtx.linkValue&&(t.anchorCtx.linkValue=" "),e.update_image.call(this,!0,!1,!0),e.init.call(this)}.bind(this);this.plugins.fileManager.checkInfo.call(this,"image",["img"],this.functions.onImageUpload,n,!0)},resetFileInfo:function(){this.plugins.fileManager.resetInfo.call(this,"image",this.functions.onImageUpload)},create_image:function(e,t,n,i,l,o,s){const a=this.plugins.image,r=this.context.image;this.context.resizing._resize_plugin="image";let c=this.util.createElement("IMG");c.src=e,c.alt=s,c.setAttribute("data-rotate","0"),t=a.onRender_link.call(this,c,t?t.cloneNode(!1):null),r._resizing&&c.setAttribute("data-proportion",r._proportionChecked);const d=this.plugins.component.set_cover.call(this,t),u=this.plugins.component.set_container.call(this,d,"se-image-container");r._captionChecked&&(r._caption=this.plugins.component.create_caption.call(this),d.appendChild(r._caption)),r._element=c,r._cover=d,r._container=u,a.applySize.call(this,n,i),a.setAlign.call(this,l,c,d,u),c.onload=a._image_create_onload.bind(this,c,r.svgDefaultSize,u),this.insertComponent(u,!0,!0,!this.options.mediaAutoSelect)&&this.plugins.fileManager.setInfo.call(this,"image",c,this.functions.onImageUpload,o,!0),this.context.resizing._resize_plugin=""},_image_create_onload:function(e,t,n){if(0===e.offsetWidth&&this.plugins.image.applySize.call(this,t,""),this.options.mediaAutoSelect)this.selectComponent(e,"image");else{const e=this.appendFormatTag(n,null);e&&this.setRange(e,0,e,0)}this.history.push(!1)},update_image:function(e,t,n){const i=this.context.image;let l,o=i._element,s=i._cover,a=i._container,r=!1;null===s&&(r=!0,o=i._element.cloneNode(!0),s=this.plugins.component.set_cover.call(this,o)),null===a?(s=s.cloneNode(!0),o=s.querySelector("img"),r=!0,a=this.plugins.component.set_container.call(this,s,"se-image-container")):r&&(a.innerHTML="",a.appendChild(s),i._cover=s,i._element=o,r=!1);const c=this.util.isNumber(i.inputX.value)?i.inputX.value+i.sizeUnit:i.inputX.value,d=this.util.isNumber(i.inputY.value)?i.inputY.value+i.sizeUnit:i.inputY.value;l=/%$/.test(o.style.width)?c!==a.style.width||d!==a.style.height:c!==o.style.width||d!==o.style.height,o.alt=i._altText;let u=!1;i._captionChecked?i._caption||(i._caption=this.plugins.component.create_caption.call(this),s.appendChild(i._caption),u=!0):i._caption&&(this.util.removeItem(i._caption),i._caption=null,u=!0);let h=null;const g=this.plugins.anchor.createAnchor.call(this,i.anchorCtx,!0);if(g)i._linkElement!==g||r&&!a.contains(g)?(i._linkElement=g.cloneNode(!1),s.insertBefore(this.plugins.image.onRender_link.call(this,o,i._linkElement),i._caption),h=i._element):i._linkElement.setAttribute("data-image-link","image");else if(null!==i._linkElement){const e=o;if(e.setAttribute("data-image-link",""),s.contains(i._linkElement)){const t=e.cloneNode(!0);s.removeChild(i._linkElement),s.insertBefore(t,i._caption),i._element=o=t}}let p=null;if(r){const e=i._element.parentNode;if(p=this.util.isRangeFormatElement(e)||this.util.isWysiwygDiv(e)?i._element:e||i._element,this.util.getParentElement(i._element,this.util.isNotCheckingNode))p=h?g:i._element,p.parentNode.replaceChild(a,p);else if(this.util.isListCell(p)){const e=this.util.getParentElement(i._element,(function(e){return e.parentNode===p}));p.insertBefore(a,e),this.util.removeItem(i._element),this.util.removeEmptyNode(e,null,!0)}else if(this.util.isFormatElement(p)){const e=this.util.getParentElement(i._element,(function(e){return e.parentNode===p}));p=this.util.splitElement(p,e),p.parentNode.insertBefore(a,p),this.util.removeItem(i._element),this.util.removeEmptyNode(p,null,!0),0===p.children.length&&(p.innerHTML=this.util.htmlRemoveWhiteSpace(p.innerHTML))}else if(this.util.isFormatElement(p.parentNode)){const e=p.parentNode;e.parentNode.insertBefore(a,p.previousSibling?e.nextElementSibling:e),0===i.__updateTags.map((function(e){return p.contains(e)})).length&&this.util.removeItem(p)}else p=this.util.isFigures(p.parentNode)?p.parentNode:p,p.parentNode.replaceChild(a,p);o=a.querySelector("img"),i._element=o,i._cover=s,i._container=a}h&&(r?(this.util.removeItem(h),0===this.util.getListChildren(g,(function(e){return/IMG/i.test(e.tagName)})).length&&this.util.removeItem(g)):this.util.removeItem(g)),(u||!i._onlyPercentage&&l)&&!e&&(/\d+/.test(o.style.height)||this.context.resizing._rotateVertical&&i._captionChecked)&&(/%$/.test(i.inputX.value)||/%$/.test(i.inputY.value)?this.plugins.resizing.resetTransform.call(this,o):this.plugins.resizing.setTransformSize.call(this,o,this.util.getNumber(i.inputX.value,0),this.util.getNumber(i.inputY.value,0))),i._resizing&&(o.setAttribute("data-proportion",i._proportionChecked),l&&this.plugins.image.applySize.call(this)),this.plugins.image.setAlign.call(this,null,o,null,null),e&&this.plugins.fileManager.setInfo.call(this,"image",o,this.functions.onImageUpload,null,!0),t&&this.selectComponent(o,"image"),n||this.history.push(!1)},update_src:function(e,t,n){t.src=e,this._w.setTimeout(this.plugins.fileManager.setInfo.bind(this,"image",t,this.functions.onImageUpload,n,!0)),this.selectComponent(t,"image")},onModifyMode:function(e,t){if(!e)return;const n=this.context.image;n._linkElement=n.anchorCtx.linkAnchor=this.util.isAnchor(e.parentNode)?e.parentNode:null,n._element=e,n._cover=this.util.getParentElement(e,"FIGURE"),n._container=this.util.getParentElement(e,this.util.isMediaComponent),n._caption=this.util.getChildElement(n._cover,"FIGCAPTION"),n._align=e.getAttribute("data-align")||e.style.float||"none",e.style.float="",this.plugins.anchor.setCtx(n._linkElement,n.anchorCtx),t&&(n._element_w=t.w,n._element_h=t.h,n._element_t=t.t,n._element_l=t.l);let i,l,o=n._element.getAttribute("data-size")||n._element.getAttribute("data-origin");o?(o=o.split(","),i=o[0],l=o[1]):t&&(i=t.w,l=t.h),n._origin_w=i||e.style.width||e.width||"",n._origin_h=l||e.style.height||e.height||""},openModify:function(e){const t=this.context.image;t.imgUrlFile&&(t._v_src._linkValue=t.previewSrc.textContent=t.imgUrlFile.value=t._element.src),t._altText=t.altText.value=t._element.alt,(t.modal.querySelector('input[name="suneditor_image_radio"][value="'+t._align+'"]')||t.modal.querySelector('input[name="suneditor_image_radio"][value="none"]')).checked=!0,t._align=t.modal.querySelector('input[name="suneditor_image_radio"]:checked').value,t._captionChecked=t.captionCheckEl.checked=!!t._caption,t._resizing&&this.plugins.resizing._module_setModifyInputSize.call(this,t,this.plugins.image),e||this.plugins.dialog.open.call(this,"image",!0)},applySize:function(e,t){const n=this.context.image;return e||(e=n.inputX.value||this.options.imageWidth),t||(t=n.inputY.value||this.options.imageHeight),n._onlyPercentage&&e||/%$/.test(e)?(this.plugins.image.setPercentSize.call(this,e,t),!0):(e&&"auto"!==e||t&&"auto"!==t?this.plugins.image.setSize.call(this,e,t,!1):this.plugins.image.setAutoSize.call(this),!1)},sizeRevert:function(){this.plugins.resizing._module_sizeRevert.call(this,this.context.image)},setSize:function(e,t,n,i){const l=this.context.image,o=/^(rw|lw)$/.test(i)&&/\d+/.test(l._element.style.height);/^(th|bh)$/.test(i)&&/\d+/.test(l._element.style.width)||(l._element.style.width=this.util.isNumber(e)?e+l.sizeUnit:e,this.plugins.image.cancelPercentAttr.call(this)),o||(l._element.style.height=this.util.isNumber(t)?t+l.sizeUnit:/%$/.test(t)?"":t),"center"===l._align&&this.plugins.image.setAlign.call(this,null,null,null,null),n||l._element.removeAttribute("data-percentage"),this.plugins.resizing._module_saveCurrentSize.call(this,l)},setAutoSize:function(){const e=this.context.image;e._caption&&(e._caption.style.marginTop=""),this.plugins.resizing.resetTransform.call(this,e._element),this.plugins.image.cancelPercentAttr.call(this),e._element.style.maxWidth="",e._element.style.width="",e._element.style.height="",e._cover.style.width="",e._cover.style.height="",this.plugins.image.setAlign.call(this,null,null,null,null),e._element.setAttribute("data-percentage","auto,auto"),this.plugins.resizing._module_saveCurrentSize.call(this,e)},setOriginSize:function(){const e=this.context.image;e._element.removeAttribute("data-percentage"),this.plugins.resizing.resetTransform.call(this,e._element),this.plugins.image.cancelPercentAttr.call(this);const t=(e._element.getAttribute("data-origin")||"").split(","),n=t[0],i=t[1];t&&(e._onlyPercentage||/%$/.test(n)&&(/%$/.test(i)||!/\d/.test(i))?this.plugins.image.setPercentSize.call(this,n,i):this.plugins.image.setSize.call(this,n,i),this.plugins.resizing._module_saveCurrentSize.call(this,e))},setPercentSize:function(e,t){const n=this.context.image;t=!t||/%$/.test(t)||this.util.getNumber(t,0)?this.util.isNumber(t)?t+n.sizeUnit:t||"":this.util.isNumber(t)?t+"%":t;const i=/%$/.test(t);n._container.style.width=this.util.isNumber(e)?e+"%":e,n._container.style.height="",n._cover.style.width="100%",n._cover.style.height=i?t:"",n._element.style.width="100%",n._element.style.height=i?"":t,n._element.style.maxWidth="","center"===n._align&&this.plugins.image.setAlign.call(this,null,null,null,null),n._element.setAttribute("data-percentage",e+","+t),this.plugins.resizing.setCaptionPosition.call(this,n._element),this.plugins.resizing._module_saveCurrentSize.call(this,n)},cancelPercentAttr:function(){const e=this.context.image;e._cover.style.width="",e._cover.style.height="",e._container.style.width="",e._container.style.height="",this.util.removeClass(e._container,this.context.image._floatClassRegExp),this.util.addClass(e._container,"__se__float-"+e._align),"center"===e._align&&this.plugins.image.setAlign.call(this,null,null,null,null)},setAlign:function(e,t,n,i){const l=this.context.image;e||(e=l._align),t||(t=l._element),n||(n=l._cover),i||(i=l._container),/%$/.test(t.style.width)&&"center"===e?(i.style.minWidth="100%",n.style.width=i.style.width):(i.style.minWidth="",n.style.width=this.context.resizing._rotateVertical?t.style.height||t.offsetHeight:t.style.width&&"auto"!==t.style.width?t.style.width||"100%":""),this.util.hasClass(i,"__se__float-"+e)||(this.util.removeClass(i,l._floatClassRegExp),this.util.addClass(i,"__se__float-"+e)),t.setAttribute("data-align",e)},init:function(){const e=this.context.image;e.imgInputFile&&(e.imgInputFile.value=""),e.imgUrlFile&&(e._v_src._linkValue=e.previewSrc.textContent=e.imgUrlFile.value=""),e.imgInputFile&&e.imgUrlFile&&(e.imgUrlFile.removeAttribute("disabled"),e.previewSrc.style.textDecoration=""),e.altText.value="",e.modal.querySelector('input[name="suneditor_image_radio"][value="none"]').checked=!0,e.captionCheckEl.checked=!1,e._element=null,this.plugins.image.openTab.call(this,"init"),e._resizing&&(e.inputX.value=this.options.imageWidth===e._defaultSizeX?"":this.options.imageWidth,e.inputY.value=this.options.imageHeight===e._defaultSizeY?"":this.options.imageHeight,e.proportion.checked=!0,e._ratio=!1,e._ratioX=1,e._ratioY=1),this.plugins.anchor.init.call(this,e.anchorCtx)}},v={name:"video",display:"dialog",add:function(e){e.addModule([r.a,g.a,m.a,_.a]);const t=e.options,n=e.context,i=n.video={_infoList:[],_infoIndex:0,_uploadFileLength:0,focusElement:null,sizeUnit:t._videoSizeUnit,_align:"none",_floatClassRegExp:"__se__float\\-[a-z]+",_youtubeQuery:t.youtubeQuery,_vimeoQuery:t.vimeoQuery,_videoRatio:100*t.videoRatio+"%",_defaultRatio:100*t.videoRatio+"%",_linkValue:"",_element:null,_cover:null,_container:null,inputX:null,inputY:null,_element_w:1,_element_h:1,_element_l:0,_element_t:0,_defaultSizeX:"100%",_defaultSizeY:100*t.videoRatio+"%",_origin_w:"100%"===t.videoWidth?"":t.videoWidth,_origin_h:"56.25%"===t.videoHeight?"":t.videoHeight,_proportionChecked:!0,_resizing:t.videoResizing,_resizeDotHide:!t.videoHeightShow,_rotation:t.videoRotation,_alignHide:!t.videoAlignShow,_onlyPercentage:t.videoSizeOnlyPercentage,_ratio:!1,_ratioX:1,_ratioY:1,_captionShow:!1};let l=this.setDialog(e);i.modal=l,i.videoInputFile=l.querySelector("._se_video_file"),i.videoUrlFile=l.querySelector(".se-input-url"),i.focusElement=i.videoUrlFile||i.videoInputFile,i.preview=l.querySelector(".se-link-preview"),l.querySelector("form").addEventListener("submit",this.submit.bind(e)),i.videoInputFile&&l.querySelector(".se-dialog-files-edge-button").addEventListener("click",this._removeSelectedFiles.bind(i.videoInputFile,i.videoUrlFile,i.preview)),i.videoInputFile&&i.videoUrlFile&&i.videoInputFile.addEventListener("change",this._fileInputChange.bind(i)),i.videoUrlFile&&i.videoUrlFile.addEventListener("input",this._onLinkPreview.bind(i.preview,i,t.linkProtocol)),i.proportion={},i.videoRatioOption={},i.inputX={},i.inputY={},t.videoResizing&&(i.proportion=l.querySelector("._se_video_check_proportion"),i.videoRatioOption=l.querySelector(".se-video-ratio"),i.inputX=l.querySelector("._se_video_size_x"),i.inputY=l.querySelector("._se_video_size_y"),i.inputX.value=t.videoWidth,i.inputY.value=t.videoHeight,i.inputX.addEventListener("keyup",this.setInputSize.bind(e,"x")),i.inputY.addEventListener("keyup",this.setInputSize.bind(e,"y")),i.inputX.addEventListener("change",this.setRatio.bind(e)),i.inputY.addEventListener("change",this.setRatio.bind(e)),i.proportion.addEventListener("change",this.setRatio.bind(e)),i.videoRatioOption.addEventListener("change",this.setVideoRatio.bind(e)),l.querySelector(".se-dialog-btn-revert").addEventListener("click",this.sizeRevert.bind(e))),n.dialog.modal.appendChild(l),l=null},setDialog:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");i.className="se-dialog-content",i.style.display="none";let l='<form method="post" enctype="multipart/form-data"><div class="se-dialog-header"><button type="button" data-command="close" class="se-btn se-dialog-close" title="'+n.dialogBox.close+'" aria-label="'+n.dialogBox.close+'">'+e.icons.cancel+'</button><span class="se-modal-title">'+n.dialogBox.videoBox.title+'</span></div><div class="se-dialog-body">';if(t.videoFileInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.videoBox.file+'</label><div class="se-dialog-form-files"><input class="se-input-form _se_video_file" type="file" accept="'+t.videoAccept+'"'+(t.videoMultipleFile?' multiple="multiple"':"")+'/><button type="button" data-command="filesRemove" class="se-btn se-dialog-files-edge-button se-file-remove" title="'+n.controller.remove+'" aria-label="'+n.controller.remove+'">'+e.icons.cancel+"</button></div></div>"),t.videoUrlInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.videoBox.url+'</label><input class="se-input-form se-input-url" type="text" /><pre class="se-link-preview"></pre></div>'),t.videoResizing){const i=t.videoRatioList||[{name:"16:9",value:.5625},{name:"4:3",value:.75},{name:"21:9",value:.4285}],o=t.videoRatio,s=t.videoSizeOnlyPercentage,a=s?' style="display: none !important;"':"",r=t.videoHeightShow?"":' style="display: none !important;"',c=t.videoRatioShow?"":' style="display: none !important;"',d=s||t.videoHeightShow||t.videoRatioShow?"":' style="display: none !important;"';l+='<div class="se-dialog-form"><div class="se-dialog-size-text"><label class="size-w">'+n.dialogBox.width+'</label><label class="se-dialog-size-x">&nbsp;</label><label class="size-h"'+r+">"+n.dialogBox.height+'</label><label class="size-h"'+c+">("+n.dialogBox.ratio+')</label></div><input class="se-input-control _se_video_size_x" placeholder="100%"'+(s?' type="number" min="1"':'type="text"')+(s?' max="100"':"")+'/><label class="se-dialog-size-x"'+d+">"+(s?"%":"x")+'</label><input class="se-input-control _se_video_size_y" placeholder="'+100*t.videoRatio+'%"'+(s?' type="number" min="1"':'type="text"')+(s?' max="100"':"")+r+'/><select class="se-input-select se-video-ratio" title="'+n.dialogBox.ratio+'" aria-label="'+n.dialogBox.ratio+'"'+c+">",r||(l+='<option value=""> - </option>');for(let e=0,t=i.length;e<t;e++)l+='<option value="'+i[e].value+'"'+(o.toString()===i[e].value.toString()?" selected":"")+">"+i[e].name+"</option>";l+='</select><button type="button" title="'+n.dialogBox.revertButton+'" aria-label="'+n.dialogBox.revertButton+'" class="se-btn se-dialog-btn-revert" style="float: right;">'+e.icons.revert+'</button></div><div class="se-dialog-form se-dialog-form-footer"'+a+d+'><label><input type="checkbox" class="se-dialog-btn-check _se_video_check_proportion" checked/>&nbsp;'+n.dialogBox.proportion+"</label></div>"}return l+='</div><div class="se-dialog-footer"><div'+(t.videoAlignShow?"":' style="display: none"')+'><label><input type="radio" name="suneditor_video_radio" class="se-dialog-btn-radio" value="none" checked>'+n.dialogBox.basic+'</label><label><input type="radio" name="suneditor_video_radio" class="se-dialog-btn-radio" value="left">'+n.dialogBox.left+'</label><label><input type="radio" name="suneditor_video_radio" class="se-dialog-btn-radio" value="center">'+n.dialogBox.center+'</label><label><input type="radio" name="suneditor_video_radio" class="se-dialog-btn-radio" value="right">'+n.dialogBox.right+'</label></div><button type="submit" class="se-btn-primary" title="'+n.dialogBox.submitButton+'" aria-label="'+n.dialogBox.submitButton+'"><span>'+n.dialogBox.submitButton+"</span></button></div></form>",i.innerHTML=l,i},_fileInputChange:function(){this.videoInputFile.value?(this.videoUrlFile.setAttribute("disabled",!0),this.preview.style.textDecoration="line-through"):(this.videoUrlFile.removeAttribute("disabled"),this.preview.style.textDecoration="")},_removeSelectedFiles:function(e,t){this.value="",e&&(e.removeAttribute("disabled"),t.style.textDecoration="")},_onLinkPreview:function(e,t,n){const i=n.target.value.trim();/^<iframe.*\/iframe>$/.test(i)?(e._linkValue=i,this.textContent='<IFrame :src=".."></IFrame>'):e._linkValue=this.textContent=i?t&&-1===i.indexOf("://")&&0!==i.indexOf("#")?t+i:-1===i.indexOf("://")?"/"+i:i:""},_setTagAttrs:function(e){e.setAttribute("controls",!0);const t=this.options.videoTagAttrs;if(t)for(let n in t)this.util.hasOwn(t,n)&&e.setAttribute(n,t[n])},createVideoTag:function(){const e=this.util.createElement("VIDEO");return this.plugins.video._setTagAttrs.call(this,e),e},_setIframeAttrs:function(e){e.frameBorder="0",e.allowFullscreen=!0;const t=this.options.videoIframeAttrs;if(t)for(let n in t)this.util.hasOwn(t,n)&&e.setAttribute(n,t[n])},createIframeTag:function(){const e=this.util.createElement("IFRAME");return this.plugins.video._setIframeAttrs.call(this,e),e},fileTags:["iframe","video"],select:function(e){this.plugins.video.onModifyMode.call(this,e,this.plugins.resizing.call_controller_resize.call(this,e,"video"))},destroy:function(e){const t=e||this.context.video._element,n=this.context.video._container,i=1*t.getAttribute("data-index");if("function"==typeof this.functions.onVideoDeleteBefore&&!1===this.functions.onVideoDeleteBefore(t,n,i,this))return;let l=n.previousElementSibling||n.nextElementSibling;const o=n.parentNode;this.util.removeItem(n),this.plugins.video.init.call(this),this.controllersOff(),o!==this.context.element.wysiwyg&&this.util.removeItemAllParents(o,(function(e){return 0===e.childNodes.length}),null),this.focusEdge(l),this.plugins.fileManager.deleteInfo.call(this,"video",i,this.functions.onVideoUpload),this.history.push(!1)},on:function(e){const t=this.context.video;e?t.videoInputFile&&this.options.videoMultipleFile&&t.videoInputFile.removeAttribute("multiple"):(t.inputX.value=t._origin_w=this.options.videoWidth===t._defaultSizeX?"":this.options.videoWidth,t.inputY.value=t._origin_h=this.options.videoHeight===t._defaultSizeY?"":this.options.videoHeight,t.proportion.disabled=!0,t.videoInputFile&&this.options.videoMultipleFile&&t.videoInputFile.setAttribute("multiple","multiple")),t._resizing&&this.plugins.video.setVideoRatioSelect.call(this,t._origin_h||t._defaultRatio)},open:function(){this.plugins.dialog.open.call(this,"video","video"===this.currentControllerName)},setVideoRatio:function(e){const t=this.context.video,n=e.target.options[e.target.selectedIndex].value;t._defaultSizeY=t._videoRatio=n?100*n+"%":t._defaultSizeY,t.inputY.placeholder=n?100*n+"%":"",t.inputY.value=""},setInputSize:function(e,t){if(t&&32===t.keyCode)return void t.preventDefault();const n=this.context.video;this.plugins.resizing._module_setInputSize.call(this,n,e),"y"===e&&this.plugins.video.setVideoRatioSelect.call(this,t.target.value||n._defaultRatio)},setRatio:function(){this.plugins.resizing._module_setRatio.call(this,this.context.video)},submit:function(e){const t=this.context.video,n=this.plugins.video;e.preventDefault(),e.stopPropagation(),t._align=t.modal.querySelector('input[name="suneditor_video_radio"]:checked').value;try{t.videoInputFile&&t.videoInputFile.files.length>0?(this.showLoading(),n.submitAction.call(this,this.context.video.videoInputFile.files)):t.videoUrlFile&&t._linkValue.length>0&&(this.showLoading(),n.setup_url.call(this,t._linkValue))}catch(e){throw this.closeLoading(),Error('[SUNEDITOR.video.submit.fail] cause : "'+e.message+'"')}finally{this.plugins.dialog.close.call(this)}return!1},submitAction:function(e){if(0===e.length)return;let t=0,n=[];for(let i=0,l=e.length;i<l;i++)/video/i.test(e[i].type)&&(n.push(e[i]),t+=e[i].size);const i=this.options.videoUploadSizeLimit;if(i>0){let e=0;const n=this.context.video._infoList;for(let t=0,i=n.length;t<i;t++)e+=1*n[t].size;if(t+e>i){this.closeLoading();const n="[SUNEDITOR.videoUpload.fail] Size of uploadable total videos: "+i/1e3+"KB";return void(("function"!=typeof this.functions.onVideoUploadError||this.functions.onVideoUploadError(n,{limitSize:i,currentSize:e,uploadSize:t},this))&&this.functions.noticeOpen(n))}}const l=this.context.video;l._uploadFileLength=n.length;const o={inputWidth:l.inputX.value,inputHeight:l.inputY.value,align:l._align,isUpdate:this.context.dialog.updateModal,element:l._element};if("function"==typeof this.functions.onVideoUploadBefore){const e=this.functions.onVideoUploadBefore(n,o,this,function(e){e&&this._w.Array.isArray(e.result)?this.plugins.video.register.call(this,o,e):this.plugins.video.upload.call(this,o,e)}.bind(this));if(void 0===e)return;if(!e)return void this.closeLoading();"object"==typeof e&&e.length>0&&(n=e)}this.plugins.video.upload.call(this,o,n)},error:function(e,t){if(this.closeLoading(),"function"!=typeof this.functions.onVideoUploadError||this.functions.onVideoUploadError(e,t,this))throw this.functions.noticeOpen(e),Error("[SUNEDITOR.plugin.video.error] response: "+e)},upload:function(e,t){if(!t)return void this.closeLoading();if("string"==typeof t)return void this.plugins.video.error.call(this,t,null);const n=this.options.videoUploadUrl,i=this.context.dialog.updateModal?1:t.length;if(!("string"==typeof n&&n.length>0))throw Error('[SUNEDITOR.videoUpload.fail] cause : There is no "videoUploadUrl" option.');{const l=new FormData;for(let e=0;e<i;e++)l.append("file-"+e,t[e]);this.plugins.fileManager.upload.call(this,n,this.options.videoUploadHeader,l,this.plugins.video.callBack_videoUpload.bind(this,e),this.functions.onVideoUploadError)}},callBack_videoUpload:function(e,t){if("function"==typeof this.functions.videoUploadHandler)this.functions.videoUploadHandler(t,e,this);else{const n=JSON.parse(t.responseText);n.errorMessage?this.plugins.video.error.call(this,n.errorMessage,n):this.plugins.video.register.call(this,e,n)}},register:function(e,t){const n=t.result,i=this.plugins.video.createVideoTag.call(this);for(let t,l=0,o=n.length;l<o;l++)t={name:n[l].name,size:n[l].size},this.plugins.video.create_video.call(this,e.isUpdate?e.element:i.cloneNode(!1),n[l].url,e.inputWidth,e.inputHeight,e.align,t,e.isUpdate);this.closeLoading()},setup_url:function(e){try{const t=this.context.video;if(e||(e=t._linkValue),!e)return!1;if(/^<iframe.*\/iframe>$/.test(e)){if(0===(e=(new this._w.DOMParser).parseFromString(e,"text/html").querySelector("iframe").src).length)return!1}if(/youtu\.?be/.test(e)){if(/^http/.test(e)||(e="https://"+e),e=e.replace("watch?v=",""),/^\/\/.+\/embed\//.test(e)||(e=e.replace(e.match(/\/\/.+\//)[0],"//www.youtube.com/embed/").replace("&","?&")),t._youtubeQuery.length>0)if(/\?/.test(e)){const n=e.split("?");e=n[0]+"?"+t._youtubeQuery+"&"+n[1]}else e+="?"+t._youtubeQuery}else if(/vimeo\.com/.test(e)&&(e.endsWith("/")&&(e=e.slice(0,-1)),e="https://player.vimeo.com/video/"+e.slice(e.lastIndexOf("/")+1),t._vimeoQuery.length>0))if(/\?/.test(e)){const n=e.split("?");e=n[0]+"?"+t._vimeoQuery+"&"+n[1]}else e+="?"+t._vimeoQuery;this.plugins.video.create_video.call(this,this.plugins.video[/embed|iframe|player|\/e\/|\.php|\.html?/.test(e)||/vimeo\.com/.test(e)?"createIframeTag":"createVideoTag"].call(this),e,t.inputX.value,t.inputY.value,t._align,null,this.context.dialog.updateModal)}catch(e){throw Error('[SUNEDITOR.video.upload.fail] cause : "'+e.message+'"')}finally{this.closeLoading()}},create_video:function(e,t,n,i,l,o,s){this.context.resizing._resize_plugin="video";const a=this.context.video;let r=null,c=null,d=!1;if(s){if((e=a._element).src!==t){d=!0;const n=/youtu\.?be/.test(t),i=/vimeo\.com/.test(t);if(!n&&!i||/^iframe$/i.test(e.nodeName))if(n||i||/^video$/i.test(e.nodeName))e.src=t;else{const n=this.plugins.video.createVideoTag.call(this);n.src=t,e.parentNode.replaceChild(n,e),a._element=e=n}else{const n=this.plugins.video.createIframeTag.call(this);n.src=t,e.parentNode.replaceChild(n,e),a._element=e=n}}c=a._container,r=this.util.getParentElement(e,"FIGURE")}else d=!0,e.src=t,a._element=e,r=this.plugins.component.set_cover.call(this,e),c=this.plugins.component.set_container.call(this,r,"se-video-container");a._cover=r,a._container=c;const u=this.plugins.resizing._module_getSizeX.call(this,a)!==(n||a._defaultSizeX)||this.plugins.resizing._module_getSizeY.call(this,a)!==(i||a._videoRatio),h=!s||u;a._resizing&&(this.context.video._proportionChecked=a.proportion.checked,e.setAttribute("data-proportion",a._proportionChecked));let g=!1;h&&(g=this.plugins.video.applySize.call(this)),g&&"center"===l||this.plugins.video.setAlign.call(this,null,e,r,c);let p=!0;if(s)a._resizing&&this.context.resizing._rotateVertical&&h&&this.plugins.resizing.setTransformSize.call(this,e,null,null);else if(p=this.insertComponent(c,!1,!0,!this.options.mediaAutoSelect),!this.options.mediaAutoSelect){const e=this.appendFormatTag(c,null);e&&this.setRange(e,0,e,0)}p&&(d&&this.plugins.fileManager.setInfo.call(this,"video",e,this.functions.onVideoUpload,o,!0),s&&(this.selectComponent(e,"video"),this.history.push(!1))),this.context.resizing._resize_plugin=""},_update_videoCover:function(e){if(!e)return;const t=this.context.video;/^video$/i.test(e.nodeName)?this.plugins.video._setTagAttrs.call(this,e):this.plugins.video._setIframeAttrs.call(this,e);const n=e.parentNode;let i=this.util.isRangeFormatElement(n)||this.util.isWysiwygDiv(n)?e:n||e;const l=e;t._element=e=e.cloneNode(!0);const o=t._cover=this.plugins.component.set_cover.call(this,e),s=t._container=this.plugins.component.set_container.call(this,o,"se-video-container");try{const n=i.querySelector("figcaption");let a=null;n&&(a=this.util.createElement("DIV"),a.innerHTML=n.innerHTML,this.util.removeItem(n));const r=(e.getAttribute("data-size")||e.getAttribute("data-origin")||"").split(",");this.plugins.video.applySize.call(this,r[0]||l.style.width||l.width||"",r[1]||l.style.height||l.height||"");const c=this.util.getFormatElement(l);if(c&&(t._align=c.style.textAlign||c.style.float),this.plugins.video.setAlign.call(this,null,e,o,s),this.util.getParentElement(l,this.util.isNotCheckingNode))l.parentNode.replaceChild(s,l);else if(this.util.isListCell(i)){const e=this.util.getParentElement(l,(function(e){return e.parentNode===i}));i.insertBefore(s,e),this.util.removeItem(l),this.util.removeEmptyNode(e,null,!0)}else if(this.util.isFormatElement(i)){const e=this.util.getParentElement(l,(function(e){return e.parentNode===i}));i=this.util.splitElement(i,e),i.parentNode.insertBefore(s,i),this.util.removeItem(l),this.util.removeEmptyNode(i,null,!0),0===i.children.length&&(i.innerHTML=this.util.htmlRemoveWhiteSpace(i.innerHTML))}else i.parentNode.replaceChild(s,i);a&&i.parentNode.insertBefore(a,s.nextElementSibling)}catch(e){console.warn("[SUNEDITOR.video.error] Maybe the video tag is nested.",e)}this.plugins.fileManager.setInfo.call(this,"video",e,this.functions.onVideoUpload,null,!0),this.plugins.video.init.call(this)},onModifyMode:function(e,t){const n=this.context.video;n._element=e,n._cover=this.util.getParentElement(e,"FIGURE"),n._container=this.util.getParentElement(e,this.util.isMediaComponent),n._align=e.style.float||e.getAttribute("data-align")||"none",e.style.float="",t&&(n._element_w=t.w,n._element_h=t.h,n._element_t=t.t,n._element_l=t.l);let i,l,o=n._element.getAttribute("data-size")||n._element.getAttribute("data-origin");o?(o=o.split(","),i=o[0],l=o[1]):t&&(i=t.w,l=t.h),n._origin_w=i||e.style.width||e.width||"",n._origin_h=l||e.style.height||e.height||""},openModify:function(e){const t=this.context.video;if(t.videoUrlFile&&(t._linkValue=t.preview.textContent=t.videoUrlFile.value=t._element.src||(t._element.querySelector("source")||"").src||""),(t.modal.querySelector('input[name="suneditor_video_radio"][value="'+t._align+'"]')||t.modal.querySelector('input[name="suneditor_video_radio"][value="none"]')).checked=!0,t._resizing){this.plugins.resizing._module_setModifyInputSize.call(this,t,this.plugins.video);const e=t._videoRatio=this.plugins.resizing._module_getSizeY.call(this,t);this.plugins.video.setVideoRatioSelect.call(this,e)||(t.inputY.value=t._onlyPercentage?this.util.getNumber(e,2):e)}e||this.plugins.dialog.open.call(this,"video",!0)},setVideoRatioSelect:function(e){let t=!1;const n=this.context.video,i=n.videoRatioOption.options;/%$/.test(e)||n._onlyPercentage?e=this.util.getNumber(e,2)/100+"":(!this.util.isNumber(e)||1*e>=1)&&(e=""),n.inputY.placeholder="";for(let l=0,o=i.length;l<o;l++)i[l].value===e?(t=i[l].selected=!0,n.inputY.placeholder=e?100*e+"%":""):i[l].selected=!1;return t},checkFileInfo:function(){this.plugins.fileManager.checkInfo.call(this,"video",["iframe","video"],this.functions.onVideoUpload,this.plugins.video._update_videoCover.bind(this),!0)},resetFileInfo:function(){this.plugins.fileManager.resetInfo.call(this,"video",this.functions.onVideoUpload)},applySize:function(e,t){const n=this.context.video;return e||(e=n.inputX.value||this.options.videoWidth),t||(t=n.inputY.value||this.options.videoHeight),n._onlyPercentage||/%$/.test(e)||!e?(this.plugins.video.setPercentSize.call(this,e||"100%",t||(/%$/.test(n._videoRatio)?n._videoRatio:n._defaultRatio)),!0):(e&&"auto"!==e||t&&"auto"!==t?this.plugins.video.setSize.call(this,e,t||n._videoRatio||n._defaultRatio,!1):this.plugins.video.setAutoSize.call(this),!1)},sizeRevert:function(){this.plugins.resizing._module_sizeRevert.call(this,this.context.video)},setSize:function(e,t,n,i){const l=this.context.video,o=/^(rw|lw)$/.test(i),s=/^(th|bh)$/.test(i);s||(e=this.util.getNumber(e,0)),o||(t=this.util.isNumber(t)?t+l.sizeUnit:t||""),e=e?e+l.sizeUnit:"",s||(l._element.style.width=e),o||(l._cover.style.paddingBottom=l._cover.style.height=t),s||/%$/.test(e)||(l._cover.style.width=e,l._container.style.width=""),o||/%$/.test(t)?l._element.style.height="":l._element.style.height=t,n||l._element.removeAttribute("data-percentage"),this.plugins.resizing._module_saveCurrentSize.call(this,l)},setAutoSize:function(){this.plugins.video.setPercentSize.call(this,100,this.context.video._defaultRatio)},setOriginSize:function(e){const t=this.context.video;t._element.removeAttribute("data-percentage"),this.plugins.resizing.resetTransform.call(this,t._element),this.plugins.video.cancelPercentAttr.call(this);const n=((e?t._element.getAttribute("data-size"):"")||t._element.getAttribute("data-origin")||"").split(",");if(n){const e=n[0],i=n[1];t._onlyPercentage||/%$/.test(e)&&(/%$/.test(i)||!/\d/.test(i))?this.plugins.video.setPercentSize.call(this,e,i):this.plugins.video.setSize.call(this,e,i),this.plugins.resizing._module_saveCurrentSize.call(this,t)}},setPercentSize:function(e,t){const n=this.context.video;t=!t||/%$/.test(t)||this.util.getNumber(t,0)?this.util.isNumber(t)?t+n.sizeUnit:t||n._defaultRatio:this.util.isNumber(t)?t+"%":t,n._container.style.width=this.util.isNumber(e)?e+"%":e,n._container.style.height="",n._cover.style.width="100%",n._cover.style.height=t,n._cover.style.paddingBottom=t,n._element.style.width="100%",n._element.style.height="100%",n._element.style.maxWidth="","center"===n._align&&this.plugins.video.setAlign.call(this,null,null,null,null),n._element.setAttribute("data-percentage",e+","+t),this.plugins.resizing._module_saveCurrentSize.call(this,n)},cancelPercentAttr:function(){const e=this.context.video;e._cover.style.width="",e._cover.style.height="",e._cover.style.paddingBottom="",e._container.style.width="",e._container.style.height="",this.util.removeClass(e._container,this.context.video._floatClassRegExp),this.util.addClass(e._container,"__se__float-"+e._align),"center"===e._align&&this.plugins.video.setAlign.call(this,null,null,null,null)},setAlign:function(e,t,n,i){const l=this.context.video;e||(e=l._align),t||(t=l._element),n||(n=l._cover),i||(i=l._container),/%$/.test(t.style.width)&&"center"===e?(i.style.minWidth="100%",n.style.width=i.style.width,n.style.height=n.style.height,n.style.paddingBottom=/%$/.test(n.style.height)?this.util.getNumber(this.util.getNumber(n.style.height,2)/100*this.util.getNumber(n.style.width,2),2)+"%":n.style.height):(i.style.minWidth="",n.style.width=this.context.resizing._rotateVertical?t.style.height||t.offsetHeight:t.style.width||"100%",n.style.paddingBottom=n.style.height),this.util.hasClass(i,"__se__float-"+e)||(this.util.removeClass(i,l._floatClassRegExp),this.util.addClass(i,"__se__float-"+e)),t.setAttribute("data-align",e)},init:function(){const e=this.context.video;e.videoInputFile&&(e.videoInputFile.value=""),e.videoUrlFile&&(e._linkValue=e.preview.textContent=e.videoUrlFile.value=""),e.videoInputFile&&e.videoUrlFile&&(e.videoUrlFile.removeAttribute("disabled"),e.preview.style.textDecoration=""),e._origin_w=this.options.videoWidth,e._origin_h=this.options.videoHeight,e.modal.querySelector('input[name="suneditor_video_radio"][value="none"]').checked=!0,e._resizing&&(e.inputX.value=this.options.videoWidth===e._defaultSizeX?"":this.options.videoWidth,e.inputY.value=this.options.videoHeight===e._defaultSizeY?"":this.options.videoHeight,e.proportion.checked=!0,e.proportion.disabled=!0,this.plugins.video.setVideoRatioSelect.call(this,e._defaultRatio))}},y={name:"audio",display:"dialog",add:function(e){e.addModule([r.a,g.a,_.a]);const t=e.context,n=t.audio={_infoList:[],_infoIndex:0,_uploadFileLength:0,focusElement:null,targetSelect:null,_origin_w:e.options.audioWidth,_origin_h:e.options.audioHeight,_linkValue:"",_element:null,_cover:null,_container:null};let i=this.setDialog(e);n.modal=i,n.audioInputFile=i.querySelector("._se_audio_files"),n.audioUrlFile=i.querySelector(".se-input-url"),n.focusElement=n.audioInputFile||n.audioUrlFile,n.preview=i.querySelector(".se-link-preview");let l=this.setController(e);n.controller=l,i.querySelector("form").addEventListener("submit",this.submit.bind(e)),n.audioInputFile&&i.querySelector(".se-dialog-files-edge-button").addEventListener("click",this._removeSelectedFiles.bind(n.audioInputFile,n.audioUrlFile,n.preview)),n.audioInputFile&&n.audioUrlFile&&n.audioInputFile.addEventListener("change",this._fileInputChange.bind(n)),l.addEventListener("click",this.onClick_controller.bind(e)),n.audioUrlFile&&n.audioUrlFile.addEventListener("input",this._onLinkPreview.bind(n.preview,n,e.options.linkProtocol)),t.dialog.modal.appendChild(i),t.element.relative.appendChild(l),i=null,l=null},setDialog:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");i.className="se-dialog-content",i.style.display="none";let l='<form method="post" enctype="multipart/form-data"><div class="se-dialog-header"><button type="button" data-command="close" class="se-btn se-dialog-close" title="'+n.dialogBox.close+'" aria-label="'+n.dialogBox.close+'">'+e.icons.cancel+'</button><span class="se-modal-title">'+n.dialogBox.audioBox.title+'</span></div><div class="se-dialog-body">';return t.audioFileInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.audioBox.file+'</label><div class="se-dialog-form-files"><input class="se-input-form _se_audio_files" type="file" accept="'+t.audioAccept+'"'+(t.audioMultipleFile?' multiple="multiple"':"")+'/><button type="button" data-command="filesRemove" class="se-btn se-dialog-files-edge-button se-file-remove" title="'+n.controller.remove+'" aria-label="'+n.controller.remove+'">'+e.icons.cancel+"</button></div></div>"),t.audioUrlInput&&(l+='<div class="se-dialog-form"><label>'+n.dialogBox.audioBox.url+'</label><input class="se-input-form se-input-url" type="text" /><pre class="se-link-preview"></pre></div>'),l+='</div><div class="se-dialog-footer"><button type="submit" class="se-btn-primary" title="'+n.dialogBox.submitButton+'" aria-label="'+n.dialogBox.submitButton+'"><span>'+n.dialogBox.submitButton+"</span></button></div></form>",i.innerHTML=l,i},setController:function(e){const t=e.lang,n=e.icons,i=e.util.createElement("DIV");return i.className="se-controller se-controller-link",i.innerHTML='<div class="se-arrow se-arrow-up"></div><div class="link-content"><div class="se-btn-group"><button type="button" data-command="update" tabindex="-1" class="se-tooltip">'+n.edit+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.edit+'</span></span></button><button type="button" data-command="delete" tabindex="-1" class="se-tooltip">'+n.delete+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.remove+"</span></span></button></div></div>",i},_fileInputChange:function(){this.audioInputFile.value?(this.audioUrlFile.setAttribute("disabled",!0),this.preview.style.textDecoration="line-through"):(this.audioUrlFile.removeAttribute("disabled"),this.preview.style.textDecoration="")},_removeSelectedFiles:function(e,t){this.value="",e&&(e.removeAttribute("disabled"),t.style.textDecoration="")},_createAudioTag:function(){const e=this.util.createElement("AUDIO");this.plugins.audio._setTagAttrs.call(this,e);const t=this.context.audio._origin_w,n=this.context.audio._origin_h;return e.setAttribute("origin-size",t+","+n),e.style.cssText=(t?"width:"+t+"; ":"")+(n?"height:"+n+";":""),e},_setTagAttrs:function(e){e.setAttribute("controls",!0);const t=this.options.audioTagAttrs;if(t)for(let n in t)this.util.hasOwn(t,n)&&e.setAttribute(n,t[n])},_onLinkPreview:function(e,t,n){const i=n.target.value.trim();e._linkValue=this.textContent=i?t&&-1===i.indexOf("://")&&0!==i.indexOf("#")?t+i:-1===i.indexOf("://")?"/"+i:i:""},fileTags:["audio"],select:function(e){this.plugins.audio.onModifyMode.call(this,e)},destroy:function(e){e=e||this.context.audio._element;const t=this.util.getParentElement(e,this.util.isComponent)||e,n=1*e.getAttribute("data-index");if("function"==typeof this.functions.onAudioDeleteBefore&&!1===this.functions.onAudioDeleteBefore(e,t,n,this))return;const i=t.previousElementSibling||t.nextElementSibling,l=t.parentNode;this.util.removeItem(t),this.plugins.audio.init.call(this),this.controllersOff(),l!==this.context.element.wysiwyg&&this.util.removeItemAllParents(l,(function(e){return 0===e.childNodes.length}),null),this.focusEdge(i),this.plugins.fileManager.deleteInfo.call(this,"audio",n,this.functions.onAudioUpload),this.history.push(!1)},checkFileInfo:function(){this.plugins.fileManager.checkInfo.call(this,"audio",["audio"],this.functions.onAudioUpload,this.plugins.audio.updateCover.bind(this),!1)},resetFileInfo:function(){this.plugins.fileManager.resetInfo.call(this,"audio",this.functions.onAudioUpload)},on:function(e){const t=this.context.audio;e?t._element?(this.context.dialog.updateModal=!0,t._linkValue=t.preview.textContent=t.audioUrlFile.value=t._element.src,t.audioInputFile&&this.options.audioMultipleFile&&t.audioInputFile.removeAttribute("multiple")):t.audioInputFile&&this.options.audioMultipleFile&&t.audioInputFile.removeAttribute("multiple"):(this.plugins.audio.init.call(this),t.audioInputFile&&this.options.audioMultipleFile&&t.audioInputFile.setAttribute("multiple","multiple"))},open:function(){this.plugins.dialog.open.call(this,"audio","audio"===this.currentControllerName)},submit:function(e){const t=this.context.audio;e.preventDefault(),e.stopPropagation();try{t.audioInputFile&&t.audioInputFile.files.length>0?(this.showLoading(),this.plugins.audio.submitAction.call(this,t.audioInputFile.files)):t.audioUrlFile&&t._linkValue.length>0&&(this.showLoading(),this.plugins.audio.setupUrl.call(this,t._linkValue))}catch(e){throw this.closeLoading(),Error('[SUNEDITOR.audio.submit.fail] cause : "'+e.message+'"')}finally{this.plugins.dialog.close.call(this)}return!1},submitAction:function(e){if(0===e.length)return;let t=0,n=[];for(let i=0,l=e.length;i<l;i++)/audio/i.test(e[i].type)&&(n.push(e[i]),t+=e[i].size);const i=this.options.audioUploadSizeLimit;if(i>0){let e=0;const n=this.context.audio._infoList;for(let t=0,i=n.length;t<i;t++)e+=1*n[t].size;if(t+e>i){this.closeLoading();const n="[SUNEDITOR.audioUpload.fail] Size of uploadable total audios: "+i/1e3+"KB";return void(("function"!=typeof this.functions.onAudioUploadError||this.functions.onAudioUploadError(n,{limitSize:i,currentSize:e,uploadSize:t},this))&&this.functions.noticeOpen(n))}}const l=this.context.audio;l._uploadFileLength=n.length;const o={isUpdate:this.context.dialog.updateModal,element:l._element};if("function"==typeof this.functions.onAudioUploadBefore){const e=this.functions.onAudioUploadBefore(n,o,this,function(e){e&&this._w.Array.isArray(e.result)?this.plugins.audio.register.call(this,o,e):this.plugins.audio.upload.call(this,o,e)}.bind(this));if(void 0===e)return;if(!e)return void this.closeLoading();"object"==typeof e&&e.length>0&&(n=e)}this.plugins.audio.upload.call(this,o,n)},error:function(e,t){if(this.closeLoading(),"function"!=typeof this.functions.onAudioUploadError||this.functions.onAudioUploadError(e,t,this))throw this.functions.noticeOpen(e),Error("[SUNEDITOR.plugin.audio.exception] response: "+e)},upload:function(e,t){if(!t)return void this.closeLoading();if("string"==typeof t)return void this.plugins.audio.error.call(this,t,null);const n=this.options.audioUploadUrl,i=this.context.dialog.updateModal?1:t.length,l=new FormData;for(let e=0;e<i;e++)l.append("file-"+e,t[e]);this.plugins.fileManager.upload.call(this,n,this.options.audioUploadHeader,l,this.plugins.audio.callBack_upload.bind(this,e),this.functions.onAudioUploadError)},callBack_upload:function(e,t){if("function"==typeof this.functions.audioUploadHandler)this.functions.audioUploadHandler(t,e,this);else{const n=JSON.parse(t.responseText);n.errorMessage?this.plugins.audio.error.call(this,n.errorMessage,n):this.plugins.audio.register.call(this,e,n)}},register:function(e,t){const n=t.result;for(let t,i,l=0,o=n.length;l<o;l++)i=e.isUpdate?e.element:this.plugins.audio._createAudioTag.call(this),t={name:n[l].name,size:n[l].size},this.plugins.audio.create_audio.call(this,i,n[l].url,t,e.isUpdate);this.closeLoading()},setupUrl:function(e){try{if(0===e.length)return!1;this.plugins.audio.create_audio.call(this,this.plugins.audio._createAudioTag.call(this),e,null,this.context.dialog.updateModal)}catch(e){throw Error('[SUNEDITOR.audio.audio.fail] cause : "'+e.message+'"')}finally{this.closeLoading()}},create_audio:function(e,t,n,i){const l=this.context.audio;if(i){if(l._element&&(e=l._element),!e||e.src===t)return void this.selectComponent(e,"audio");e.src=t,this.selectComponent(e,"audio")}else{e.src=t;const n=this.plugins.component.set_cover.call(this,e),i=this.plugins.component.set_container.call(this,n,"");if(!this.insertComponent(i,!1,!0,!this.options.mediaAutoSelect))return void this.focus();if(!this.options.mediaAutoSelect){const e=this.appendFormatTag(i,null);e&&this.setRange(e,0,e,0)}}this.plugins.fileManager.setInfo.call(this,"audio",e,this.functions.onAudioUpload,n,!1),i&&this.history.push(!1)},updateCover:function(e){const t=this.context.audio;this.plugins.audio._setTagAttrs.call(this,e);const n=e.parentNode;let i=this.util.isRangeFormatElement(n)||this.util.isWysiwygDiv(n)?e:n||e;const l=e;t._element=e=e.cloneNode(!1);const o=this.plugins.component.set_cover.call(this,e),s=this.plugins.component.set_container.call(this,o,"se-audio-container");try{if(this.util.getParentElement(l,this.util.isNotCheckingNode))l.parentNode.replaceChild(s,l);else if(this.util.isListCell(i)){const e=this.util.getParentElement(l,(function(e){return e.parentNode===i}));i.insertBefore(s,e),this.util.removeItem(l),this.util.removeEmptyNode(e,null,!0)}else if(this.util.isFormatElement(i)){const e=this.util.getParentElement(l,(function(e){return e.parentNode===i}));i=this.util.splitElement(i,e),i.parentNode.insertBefore(s,i),this.util.removeItem(l),this.util.removeEmptyNode(i,null,!0),0===i.children.length&&(i.innerHTML=this.util.htmlRemoveWhiteSpace(i.innerHTML))}else i.parentNode.replaceChild(s,i)}catch(e){console.warn("[SUNEDITOR.audio.error] Maybe the audio tag is nested.",e)}this.plugins.fileManager.setInfo.call(this,"audio",e,this.functions.onAudioUpload,null,!1),this.plugins.audio.init.call(this)},onModifyMode:function(e){const t=this.context.audio;this.setControllerPosition(t.controller,e,"bottom",{left:0,top:0}),this.controllersOn(t.controller,e,this.plugins.audio.onControllerOff.bind(this,e),"audio"),this.util.addClass(e,"active"),t._element=e,t._cover=this.util.getParentElement(e,"FIGURE"),t._container=this.util.getParentElement(e,this.util.isComponent)},openModify:function(e){if(this.context.audio.audioUrlFile){const e=this.context.audio;e._linkValue=e.preview.textContent=e.audioUrlFile.value=e._element.src}e||this.plugins.dialog.open.call(this,"audio",!0)},onClick_controller:function(e){e.stopPropagation();const t=e.target.getAttribute("data-command");t&&(e.preventDefault(),/update/.test(t)?this.plugins.audio.openModify.call(this,!1):this.plugins.audio.destroy.call(this,this.context.audio._element),this.controllersOff())},onControllerOff:function(e){this.util.removeClass(e,"active"),this.context.audio.controller.style.display="none"},init:function(){if(this.context.dialog.updateModal)return;const e=this.context.audio;e.audioInputFile&&(e.audioInputFile.value=""),e.audioUrlFile&&(e._linkValue=e.preview.textContent=e.audioUrlFile.value=""),e.audioInputFile&&e.audioUrlFile&&(e.audioUrlFile.removeAttribute("disabled"),e.preview.style.textDecoration=""),e._element=null}};var C={name:"math",display:"dialog",add:function(e){e.addModule([r.a]);const t=e.context;t.math={focusElement:null,previewElement:null,fontSizeElement:null,defaultFontSize:"",_mathExp:null};let n=this.setDialog(e);t.math.modal=n,t.math.focusElement=n.querySelector(".se-math-exp"),t.math.previewElement=n.querySelector(".se-math-preview"),t.math.fontSizeElement=n.querySelector(".se-math-size"),t.math.focusElement.addEventListener("paste",(function(t){"function"==typeof e.functions.onPasteMath&&e.functions.onPasteMath(t,e)}),!1),t.math.focusElement.addEventListener(e.util.isIE?"textinput":"input",this._renderMathExp.bind(e,t.math),!1),t.math.fontSizeElement.addEventListener("change",function(e){this.fontSize=e.target.value}.bind(t.math.previewElement.style),!1);let i=this.setController_MathButton(e);t.math.mathController=i,t.math._mathExp=null,n.querySelector("form").addEventListener("submit",this.submit.bind(e),!1),i.addEventListener("click",this.onClick_mathController.bind(e)),t.math.previewElement.style.fontSize=t.math.defaultFontSize,t.dialog.modal.appendChild(n),t.element.relative.appendChild(i),n=null,i=null},setDialog:function(e){const t=e.lang,n=e.util.createElement("DIV"),i=e.options.mathFontSize;let l=i[0].value;n.className="se-dialog-content",n.style.display="none";let o='<form><div class="se-dialog-header"><button type="button" data-command="close" class="se-btn se-dialog-close" title="'+t.dialogBox.close+'" aria-label="'+t.dialogBox.close+'">'+e.icons.cancel+'</button><span class="se-modal-title">'+t.dialogBox.mathBox.title+'</span></div><div class="se-dialog-body"><div class="se-dialog-form"><label>'+t.dialogBox.mathBox.inputLabel+' (<a href="https://katex.org/docs/supported.html" target="_blank">KaTeX</a>)</label><textarea class="se-input-form se-math-exp" type="text"></textarea></div><div class="se-dialog-form"><label>'+t.dialogBox.mathBox.fontSizeLabel+'</label><select class="se-input-select se-math-size">';for(let e,t=0,n=i.length;t<n;t++)e=i[t],e.default&&(l=e.value),o+='<option value="'+e.value+'"'+(e.default?" selected":"")+">"+e.text+"</option>";return o+='</select></div><div class="se-dialog-form"><label>'+t.dialogBox.mathBox.previewLabel+'</label><p class="se-math-preview"></p></div></div><div class="se-dialog-footer"><button type="submit" class="se-btn-primary" title="'+t.dialogBox.submitButton+'" aria-label="'+t.dialogBox.submitButton+'"><span>'+t.dialogBox.submitButton+"</span></button></div></form>",e.context.math.defaultFontSize=l,n.innerHTML=o,n},setController_MathButton:function(e){const t=e.lang,n=e.util.createElement("DIV");return n.className="se-controller se-controller-link",n.innerHTML='<div class="se-arrow se-arrow-up"></div><div class="link-content"><div class="se-btn-group"><button type="button" data-command="update" tabindex="-1" class="se-btn se-tooltip">'+e.icons.edit+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.edit+'</span></span></button><button type="button" data-command="delete" tabindex="-1" class="se-btn se-tooltip">'+e.icons.delete+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.remove+"</span></span></button></div></div>",n},open:function(){this.plugins.dialog.open.call(this,"math","math"===this.currentControllerName)},managedTags:function(){return{className:"katex",method:function(e){if(!e.getAttribute("data-exp")||!this.options.katex)return;const t=this._d.createRange().createContextualFragment(this.plugins.math._renderer.call(this,this.util.HTMLDecoder(e.getAttribute("data-exp"))));e.innerHTML=t.querySelector(".katex").innerHTML,e.setAttribute("contenteditable",!1)}}},_renderer:function(e){let t="";try{this.util.removeClass(this.context.math.focusElement,"se-error"),t=this.options.katex.src.renderToString(e,{throwOnError:!0,displayMode:!0})}catch(e){this.util.addClass(this.context.math.focusElement,"se-error"),t='<span class="se-math-katex-error">Katex syntax error. (Refer <a href="https://katex.org/docs/supported.html" target="_blank">KaTeX</a>)</span>',console.warn("[SUNEDITOR.math.Katex.error] ",e)}return t},_renderMathExp:function(e,t){e.previewElement.innerHTML=this.plugins.math._renderer.call(this,t.target.value)},submit:function(e){this.showLoading(),e.preventDefault(),e.stopPropagation();const t=function(){if(0===this.context.math.focusElement.value.trim().length)return!1;const e=this.context.math,t=e.focusElement.value,n=e.previewElement.querySelector(".katex");if(!n)return!1;if(n.className="__se__katex "+n.className,n.setAttribute("contenteditable",!1),n.setAttribute("data-exp",this.util.HTMLEncoder(t)),n.setAttribute("data-font-size",e.fontSizeElement.value),n.style.fontSize=e.fontSizeElement.value,this.context.dialog.updateModal){const t=this.util.getParentElement(e._mathExp,".katex");t.parentNode.replaceChild(n,t),this.setRange(n,0,n,1)}else{const e=this.getSelectedElements();if(e.length>1){const t=this.util.createElement(e[0].nodeName);if(t.appendChild(n),!this.insertNode(t,null,!0))return!1}else if(!this.insertNode(n,null,!0))return!1;const t=this.util.createTextNode(this.util.zeroWidthSpace);n.parentNode.insertBefore(t,n.nextSibling),this.setRange(n,0,n,1)}return e.focusElement.value="",e.fontSizeElement.value="1em",e.previewElement.style.fontSize="1em",e.previewElement.innerHTML="",!0}.bind(this);try{t()&&(this.plugins.dialog.close.call(this),this.history.push(!1))}catch(e){this.plugins.dialog.close.call(this)}finally{this.closeLoading()}return!1},active:function(e){if(e){if(e.getAttribute("data-exp"))return this.controllerArray.indexOf(this.context.math.mathController)<0&&(this.setRange(e,0,e,1),this.plugins.math.call_controller.call(this,e)),!0}else this.controllerArray.indexOf(this.context.math.mathController)>-1&&this.controllersOff();return!1},on:function(e){if(e){const e=this.context.math;if(e._mathExp){const t=this.util.HTMLDecoder(e._mathExp.getAttribute("data-exp")),n=e._mathExp.getAttribute("data-font-size")||"1em";this.context.dialog.updateModal=!0,e.focusElement.value=t,e.fontSizeElement.value=n,e.previewElement.innerHTML=this.plugins.math._renderer.call(this,t),e.previewElement.style.fontSize=n}}else this.plugins.math.init.call(this)},call_controller:function(e){this.context.math._mathExp=e;const t=this.context.math.mathController;this.setControllerPosition(t,e,"bottom",{left:0,top:0}),this.controllersOn(t,e,"math")},onClick_mathController:function(e){e.stopPropagation();const t=e.target.getAttribute("data-command")||e.target.parentNode.getAttribute("data-command");t&&(e.preventDefault(),/update/.test(t)?(this.context.math.focusElement.value=this.util.HTMLDecoder(this.context.math._mathExp.getAttribute("data-exp")),this.plugins.dialog.open.call(this,"math",!0)):(this.util.removeItem(this.context.math._mathExp),this.context.math._mathExp=null,this.focus(),this.history.push(!1)),this.controllersOff())},init:function(){const e=this.context.math;e.mathController.style.display="none",e._mathExp=null,e.focusElement.value="",e.previewElement.innerHTML=""}},w=n("JhlZ"),x=n.n(w),E={blockquote:{name:"blockquote",display:"command",add:function(e,t){e.context.blockquote={targetButton:t,tag:e.util.createElement("BLOCKQUOTE")}},active:function(e){if(e){if(/blockquote/i.test(e.nodeName))return this.util.addClass(this.context.blockquote.targetButton,"active"),!0}else this.util.removeClass(this.context.blockquote.targetButton,"active");return!1},action:function(){const e=this.util.getParentElement(this.getSelectionNode(),"blockquote");e?this.detachRangeFormatElement(e,null,null,!1,!1):this.applyRangeFormatElement(this.context.blockquote.tag.cloneNode(!1))}},align:{name:"align",display:"submenu",add:function(e,t){const n=e.icons,i=e.context;i.align={targetButton:t,_itemMenu:null,_alignList:null,currentAlign:"",defaultDir:e.options.rtl?"right":"left",icons:{justify:n.align_justify,left:n.align_left,right:n.align_right,center:n.align_center}};let l=this.setSubmenu(e),o=i.align._itemMenu=l.querySelector("ul");o.addEventListener("click",this.pickup.bind(e)),i.align._alignList=o.querySelectorAll("li button"),e.initMenuTarget(this.name,t,l),l=null,o=null},setSubmenu:function(e){const t=e.lang,n=e.icons,i=e.util.createElement("DIV"),l=e.options.alignItems;let o="";for(let e,i,s=0;s<l.length;s++)e=l[s],i=t.toolbar["align"+e.charAt(0).toUpperCase()+e.slice(1)],o+='<li><button type="button" class="se-btn-list se-btn-align" data-value="'+e+'" title="'+i+'" aria-label="'+i+'"><span class="se-list-icon">'+n["align_"+e]+"</span>"+i+"</button></li>";return i.className="se-submenu se-list-layer se-list-align",i.innerHTML='<div class="se-list-inner"><ul class="se-list-basic">'+o+"</ul></div>",i},active:function(e){const t=this.context.align,n=t.targetButton,i=n.firstElementChild;if(e){if(this.util.isFormatElement(e)){const l=e.style.textAlign;if(l)return this.util.changeElement(i,t.icons[l]||t.icons[t.defaultDir]),n.setAttribute("data-focus",l),!0}}else this.util.changeElement(i,t.icons[t.defaultDir]),n.removeAttribute("data-focus");return!1},on:function(){const e=this.context.align,t=e._alignList,n=e.targetButton.getAttribute("data-focus")||e.defaultDir;if(n!==e.currentAlign){for(let e=0,i=t.length;e<i;e++)n===t[e].getAttribute("data-value")?this.util.addClass(t[e],"active"):this.util.removeClass(t[e],"active");e.currentAlign=n}},exchangeDir:function(){const e=this.options.rtl?"right":"left";if(!this.context.align||this.context.align.defaultDir===e)return;this.context.align.defaultDir=e;let t=this.context.align._itemMenu,n=t.querySelector('[data-value="left"]'),i=t.querySelector('[data-value="right"]');if(n&&i){const e=n.parentElement,t=i.parentElement;e.appendChild(i),t.appendChild(n)}},pickup:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n=null;for(;!n&&!/UL/i.test(t.tagName);)n=t.getAttribute("data-value"),t=t.parentNode;if(!n)return;const i=this.context.align.defaultDir,l=this.getSelectedElements();for(let e=0,t=l.length;e<t;e++)this.util.setStyle(l[e],"textAlign",n===i?"":n);this.effectNode=null,this.submenuOff(),this.focus(),this.history.push(!1)}},font:{name:"font",display:"submenu",add:function(e,t){const n=e.context;n.font={targetText:t.querySelector(".txt"),targetTooltip:t.parentNode.querySelector(".se-tooltip-text"),_fontList:null,currentFont:""};let i=this.setSubmenu(e);i.querySelector(".se-list-inner").addEventListener("click",this.pickup.bind(e)),n.font._fontList=i.querySelectorAll("ul li button"),e.initMenuTarget(this.name,t,i),i=null},setSubmenu:function(e){const t=e.lang,n=e.util.createElement("DIV");let i,l,o,s;n.className="se-submenu se-list-layer se-list-font-family";let a=e.options.font,r='<div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="default_value se-btn-list" title="'+t.toolbar.default+'" aria-label="'+t.toolbar.default+'">('+t.toolbar.default+")</button></li>";for(o=0,s=a.length;o<s;o++)i=a[o],l=i.split(",")[0],r+='<li><button type="button" class="se-btn-list" data-value="'+i+'" data-txt="'+l+'" title="'+l+'" aria-label="'+l+'" style="font-family:'+i+';">'+l+"</button></li>";return r+="</ul></div>",n.innerHTML=r,n},active:function(e){const t=this.context.font.targetText,n=this.context.font.targetTooltip;if(e){if(e.style&&e.style.fontFamily.length>0){const i=e.style.fontFamily.replace(/["']/g,"");return this.util.changeTxt(t,i),this.util.changeTxt(n,this.lang.toolbar.font+" ("+i+")"),!0}}else{const e=this.hasFocus?this.wwComputedStyle.fontFamily:this.lang.toolbar.font;this.util.changeTxt(t,e),this.util.changeTxt(n,this.hasFocus?this.lang.toolbar.font+(e?" ("+e+")":""):e)}return!1},on:function(){const e=this.context.font,t=e._fontList,n=e.targetText.textContent;if(n!==e.currentFont){for(let e=0,i=t.length;e<i;e++)n===(t[e].getAttribute("data-value")||"").replace(/'|"/g,"")?this.util.addClass(t[e],"active"):this.util.removeClass(t[e],"active");e.currentFont=n}},pickup:function(e){if(!/^BUTTON$/i.test(e.target.tagName))return!1;e.preventDefault(),e.stopPropagation();let t=e.target.getAttribute("data-value");if(t){const e=this.util.createElement("SPAN");/[\s\d\W]/.test(t)&&!/^['"].*['"]$/.test(t)&&(t='"'+t+'"'),e.style.fontFamily=t,this.nodeChange(e,["font-family"],null,null)}else this.nodeChange(null,["font-family"],["span"],!0);this.submenuOff()}},fontSize:{name:"fontSize",display:"submenu",add:function(e,t){const n=e.context;n.fontSize={targetText:t.querySelector(".txt"),_sizeList:null,currentSize:""};let i=this.setSubmenu(e),l=i.querySelector("ul");l.addEventListener("click",this.pickup.bind(e)),n.fontSize._sizeList=l.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null,l=null},setSubmenu:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");i.className="se-submenu se-list-layer se-list-font-size";const l=t.fontSize?t.fontSize:[8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72];let o='<div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="default_value se-btn-list" title="'+n.toolbar.default+'" aria-label="'+n.toolbar.default+'">('+n.toolbar.default+")</button></li>";for(let e,n=0,i=t.fontSizeUnit,s=l.length;n<s;n++)e=l[n],o+='<li><button type="button" class="se-btn-list" data-value="'+e+i+'" title="'+e+i+'" aria-label="'+e+i+'" style="font-size:'+e+i+';">'+e+"</button></li>";return o+="</ul></div>",i.innerHTML=o,i},active:function(e){if(e){if(e.style&&e.style.fontSize.length>0)return this.util.changeTxt(this.context.fontSize.targetText,this._convertFontSize.call(this,this.options.fontSizeUnit,e.style.fontSize)),!0}else this.util.changeTxt(this.context.fontSize.targetText,this.hasFocus?this._convertFontSize.call(this,this.options.fontSizeUnit,this.wwComputedStyle.fontSize):this.lang.toolbar.fontSize);return!1},on:function(){const e=this.context.fontSize,t=e._sizeList,n=e.targetText.textContent;if(n!==e.currentSize){for(let e=0,i=t.length;e<i;e++)n===t[e].getAttribute("data-value")?this.util.addClass(t[e],"active"):this.util.removeClass(t[e],"active");e.currentSize=n}},pickup:function(e){if(!/^BUTTON$/i.test(e.target.tagName))return!1;e.preventDefault(),e.stopPropagation();const t=e.target.getAttribute("data-value");if(t){const e=this.util.createElement("SPAN");e.style.fontSize=t,this.nodeChange(e,["font-size"],null,null)}else this.nodeChange(null,["font-size"],["span"],!0);this.submenuOff()}},fontColor:l,hiliteColor:o,horizontalRule:{name:"horizontalRule",display:"submenu",add:function(e,t){e.context.horizontalRule={currentHR:null};let n=this.setSubmenu(e);n.querySelector("ul").addEventListener("click",this.horizontalRulePick.bind(e)),e.initMenuTarget(this.name,t,n),n=null},setSubmenu:function(e){const t=e.lang,n=e.util.createElement("DIV"),i=e.options.hrItems||[{name:t.toolbar.hr_solid,class:"__se__solid"},{name:t.toolbar.hr_dashed,class:"__se__dashed"},{name:t.toolbar.hr_dotted,class:"__se__dotted"}];let l="";for(let e=0,t=i.length;e<t;e++)l+='<li><button type="button" class="se-btn-list btn_line" data-command="horizontalRule" data-value="'+i[e].class+'" title="'+i[e].name+'" aria-label="'+i[e].name+'"><hr'+(i[e].class?' class="'+i[e].class+'"':"")+(i[e].style?' style="'+i[e].style+'"':"")+"/></button></li>";return n.className="se-submenu se-list-layer se-list-line",n.innerHTML='<div class="se-list-inner"><ul class="se-list-basic">'+l+"</ul></div>",n},active:function(e){if(e){if(/HR/i.test(e.nodeName))return this.context.horizontalRule.currentHR=e,this.util.hasClass(e,"on")||(this.util.addClass(e,"on"),this.controllersOn("hr",this.util.removeClass.bind(this.util,e,"on"))),!0}else this.util.hasClass(this.context.horizontalRule.currentHR,"on")&&this.controllersOff();return!1},appendHr:function(e){return this.focus(),this.insertComponent(e.cloneNode(!1),!1,!0,!1)},horizontalRulePick:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n=t.getAttribute("data-command");for(;!n&&!/UL/i.test(t.tagName);)t=t.parentNode,n=t.getAttribute("data-command");if(!n)return;const i=this.plugins.horizontalRule.appendHr.call(this,t.firstElementChild);i&&(this.setRange(i,0,i,0),this.submenuOff())}},list:{name:"list",display:"submenu",add:function(e,t){const n=e.context;n.list={targetButton:t,_list:null,currentList:"",icons:{bullets:e.icons.list_bullets,number:e.icons.list_number}};let i=this.setSubmenu(e),l=i.querySelector("ul");l.addEventListener("click",this.pickup.bind(e)),n.list._list=l.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null,l=null},setSubmenu:function(e){const t=e.lang,n=e.util.createElement("DIV");return n.className="se-submenu se-list-layer",n.innerHTML='<div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="se-btn-list se-tooltip" data-command="OL" title="'+t.toolbar.orderList+'" aria-label="'+t.toolbar.orderList+'">'+e.icons.list_number+'</button></li><li><button type="button" class="se-btn-list se-tooltip" data-command="UL" title="'+t.toolbar.unorderList+'" aria-label="'+t.toolbar.unorderList+'">'+e.icons.list_bullets+"</button></li></ul></div>",n},active:function(e){const t=this.context.list.targetButton,n=t.firstElementChild,i=this.util;if(i.isList(e)){const l=e.nodeName;return t.setAttribute("data-focus",l),i.addClass(t,"active"),/UL/i.test(l)?i.changeElement(n,this.context.list.icons.bullets):i.changeElement(n,this.context.list.icons.number),!0}return t.removeAttribute("data-focus"),i.changeElement(n,this.context.list.icons.number),i.removeClass(t,"active"),!1},on:function(){const e=this.context.list,t=e._list,n=e.targetButton.getAttribute("data-focus")||"";if(n!==e.currentList){for(let e=0,i=t.length;e<i;e++)n===t[e].getAttribute("data-command")?this.util.addClass(t[e],"active"):this.util.removeClass(t[e],"active");e.currentList=n}},editList:function(e,t,n){let i=this.getRange(),l=t||this.getSelectedElementsAndComponents(!1);if(0===l.length){if(t)return;if(i=this.getRange_addLine(i,null),l=this.getSelectedElementsAndComponents(!1),0===l.length)return}const o=this.util;o.sortByDepth(l,!0);let s=l[0],a=l[l.length-1],r=!o.isListCell(s)&&!o.isComponent(s)||s.previousElementSibling?s.previousElementSibling:s.parentNode.previousElementSibling,c=!o.isListCell(a)&&!o.isComponent(a)||a.nextElementSibling?a.nextElementSibling:a.parentNode.nextElementSibling;const d=i.collapsed,u={sc:i.startContainer,so:i.startContainer===i.endContainer&&o.onlyZeroWidthSpace(i.startContainer)&&0===i.startOffset&&1===i.endOffset?i.endOffset:i.startOffset,ec:i.endContainer,eo:i.endOffset};let h=null,g=!0;for(let e=0,t=l.length;e<t;e++)if(!o.isList(o.getRangeFormatElement(l[e],function(t){return this.getRangeFormatElement(t)&&t!==l[e]}.bind(o)))){g=!1;break}if(!g||r&&s.tagName===r.tagName&&e===r.tagName.toUpperCase()||c&&a.tagName===c.tagName&&e===c.tagName.toUpperCase()){const t=r?r.parentNode:r,n=c?c.parentNode:c;r=t&&!o.isWysiwygDiv(t)&&t.nodeName===e?t:r,c=n&&!o.isWysiwygDiv(n)&&n.nodeName===e?n:c;const i=r&&r.tagName===e,s=c&&c.tagName===e;let a=i?r:o.createElement(e),d=null,h=null,g=null,p=null;const m=function(e){return!this.isComponent(e)&&!this.isList(e)}.bind(o);for(let t,n,s,r,c,p,f,_,b,v=0,y=l.length;v<y;v++)if(n=l[v],0!==n.childNodes.length||o._isIgnoreNodeChange(n)){if(r=l[v+1],c=n.parentNode,p=r?r.parentNode:null,s=o.isListCell(n),b=o.isRangeFormatElement(c)?c:null,f=s&&!o.isWysiwygDiv(c)?c.parentNode:c,_=s&&!o.isWysiwygDiv(c)?!r||o.isListCell(f)?c:c.nextSibling:n.nextSibling,t=o.createElement("LI"),o.copyFormatAttributes(t,n),0===v&&u.sc===n&&(u.sc=t),v===y-1&&u.ec===n&&(u.ec=t),o.isComponent(n)){const e=/^HR$/i.test(n.nodeName);e||(t.innerHTML="<br>"),t.innerHTML+=n.outerHTML,e&&(t.innerHTML+="<br>")}else{const e=n.childNodes;for(;e[0];)t.appendChild(e[0])}a.appendChild(t),r||(h=a),r&&f===p&&!o.isRangeFormatElement(_)||(d||(d=a),i&&r&&f===p||r&&o.isList(p)&&p===c||a.parentNode!==f&&f.insertBefore(a,_)),o.removeItem(n),i&&null===g&&(g=a.children.length-1),r&&(o.getRangeFormatElement(p,m)!==o.getRangeFormatElement(c,m)||o.isList(p)&&o.isList(c)&&o.getElementDepth(p)!==o.getElementDepth(c))&&(a=o.createElement(e)),b&&0===b.children.length&&o.removeItem(b)}else o.removeItem(n);g&&(d=d.children[g]),s&&(p=a.children.length-1,a.innerHTML+=c.innerHTML,h=a.children[p],o.removeItem(c))}else{if(n)for(let e=0,t=l.length;e<t;e++)for(let n=e-1;n>=0;n--)if(l[n].contains(l[e])){l.splice(e,1),e--,t--;break}const t=o.getRangeFormatElement(s),i=t&&t.tagName===e;let a,r;const c=function(e){return!this.isComponent(e)}.bind(o);i||(r=o.createElement(e));for(let t,s,d=0,u=l.length;d<u;d++)s=o.getRangeFormatElement(l[d],c),s&&o.isList(s)&&(t?t!==s?(n&&o.isListCell(s.parentNode)?this.plugins.list._detachNested.call(this,a.f):h=this.detachRangeFormatElement(a.f[0].parentNode,a.f,r,!1,!0),s=l[d].parentNode,i||(r=o.createElement(e)),t=s,a={r:t,f:[o.getParentElement(l[d],"LI")]}):a.f.push(o.getParentElement(l[d],"LI")):(t=s,a={r:t,f:[o.getParentElement(l[d],"LI")]}),d===u-1&&(n&&o.isListCell(s.parentNode)?this.plugins.list._detachNested.call(this,a.f):h=this.detachRangeFormatElement(a.f[0].parentNode,a.f,r,!1,!0)))}return this.effectNode=null,d&&h||u},_detachNested:function(e){const t=e[0],n=e[e.length-1],i=n.nextElementSibling,l=t.parentNode,o=l.parentNode.nextElementSibling,s=l.parentNode.parentNode;for(let t=0,n=e.length;t<n;t++)s.insertBefore(e[t],o);if(i&&l.children.length>0){const e=l.cloneNode(!1),t=l.childNodes,o=this.util.getPositionIndex(i);for(;t[o];)e.appendChild(t[o]);n.appendChild(e)}0===l.children.length&&this.util.removeItem(l),this.util.mergeSameTags(s);const a=this.util.getEdgeChildNodes(t,n);return{cc:t.parentNode,sc:a.sc,ec:a.ec}},editInsideList:function(e,t){const n=(t=t||this.getSelectedElements().filter(function(e){return this.isListCell(e)}.bind(this.util))).length;if(0===n||!e&&!this.util.isListCell(t[0].previousElementSibling)&&!this.util.isListCell(t[n-1].nextElementSibling))return{sc:t[0],so:0,ec:t[n-1],eo:1};let i=t[0].parentNode,l=t[n-1],o=null;if(e){if(i!==l.parentNode&&this.util.isList(l.parentNode.parentNode)&&l.nextElementSibling)for(l=l.nextElementSibling;l;)t.push(l),l=l.nextElementSibling;o=this.plugins.list.editList.call(this,i.nodeName.toUpperCase(),t,!0)}else{let e=this.util.createElement(i.nodeName),s=t[0].previousElementSibling,a=l.nextElementSibling;const r={s:null,e:null,sl:i,el:i};for(let l,o=0,c=n;o<c;o++)l=t[o],l.parentNode!==i&&(this.plugins.list._insiedList.call(this,i,e,s,a,r),i=l.parentNode,e=this.util.createElement(i.nodeName)),s=l.previousElementSibling,a=l.nextElementSibling,e.appendChild(l);this.plugins.list._insiedList.call(this,i,e,s,a,r);const c=this.util.getNodeFromPath(r.s,r.sl),d=this.util.getNodeFromPath(r.e,r.el);o={sc:c,so:0,ec:d,eo:d.textContent.length}}return o},_insiedList:function(e,t,n,i,l){let o=!1;if(n&&t.tagName===n.tagName){const e=t.children;for(;e[0];)n.appendChild(e[0]);t=n,o=!0}if(i&&t.tagName===i.tagName){const e=i.children;for(;e[0];)t.appendChild(e[0]);const n=i.nextElementSibling;i.parentNode.removeChild(i),i=n}if(!o){this.util.isListCell(n)&&(e=n,i=null),e.insertBefore(t,i),l.s||(l.s=this.util.getNodePath(t.firstElementChild.firstChild,e,null),l.sl=e);const o=e.contains(l.sl)?this.util.getNodePath(l.sl,e):null;l.e=this.util.getNodePath(t.lastElementChild.firstChild,e,null),l.el=e,this.util.mergeSameTags(e,[l.s,l.e,o],!1),this.util.mergeNestedTags(e),o&&(l.sl=this.util.getNodeFromPath(o,e))}return t},pickup:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n="";for(;!n&&!/^UL$/i.test(t.tagName);)n=t.getAttribute("data-command"),t=t.parentNode;if(!n)return;const i=this.plugins.list.editList.call(this,n,null,!1);i&&this.setRange(i.sc,i.so,i.ec,i.eo),this.submenuOff(),this.history.push(!1)}},table:{name:"table",display:"submenu",add:function(e,t){const n=e.context;let i=n.table={_element:null,_tdElement:null,_trElement:null,_trElements:null,_tableXY:[],_maxWidth:!0,_fixedColumn:!1,_rtl:e.options.rtl,cellControllerTop:"top"===e.options.tableCellControllerPosition,resizeText:null,headerButton:null,mergeButton:null,splitButton:null,splitMenu:null,maxText:e.lang.controller.maxSize,minText:e.lang.controller.minSize,_physical_cellCnt:0,_logical_cellCnt:0,_rowCnt:0,_rowIndex:0,_physical_cellIndex:0,_logical_cellIndex:0,_current_colSpan:0,_current_rowSpan:0,icons:{expansion:e.icons.expansion,reduction:e.icons.reduction}},l=this.setSubmenu(e),o=l.querySelector(".se-controller-table-picker");i.tableHighlight=l.querySelector(".se-table-size-highlighted"),i.tableUnHighlight=l.querySelector(".se-table-size-unhighlighted"),i.tableDisplay=l.querySelector(".se-table-size-display"),e.options.rtl&&(i.tableHighlight.style.left="167px");let s=this.setController_table(e);i.tableController=s,i.resizeButton=s.querySelector("._se_table_resize"),i.resizeText=s.querySelector("._se_table_resize > span > span"),i.columnFixedButton=s.querySelector("._se_table_fixed_column"),i.headerButton=s.querySelector("._se_table_header");let a=this.setController_tableEditor(e,i.cellControllerTop);i.resizeDiv=a,i.splitMenu=a.querySelector(".se-btn-group-sub"),i.mergeButton=a.querySelector("._se_table_merge_button"),i.splitButton=a.querySelector("._se_table_split_button"),i.insertRowAboveButton=a.querySelector("._se_table_insert_row_a"),i.insertRowBelowButton=a.querySelector("._se_table_insert_row_b"),o.addEventListener("mousemove",this.onMouseMove_tablePicker.bind(e,i)),o.addEventListener("click",this.appendTable.bind(e)),a.addEventListener("click",this.onClick_tableController.bind(e)),s.addEventListener("click",this.onClick_tableController.bind(e)),e.initMenuTarget(this.name,t,l),n.element.relative.appendChild(a),n.element.relative.appendChild(s),l=null,o=null,a=null,s=null,i=null},setSubmenu:function(e){const t=e.util.createElement("DIV");return t.className="se-submenu se-selector-table",t.innerHTML='<div class="se-table-size"><div class="se-table-size-picker se-controller-table-picker"></div><div class="se-table-size-highlighted"></div><div class="se-table-size-unhighlighted"></div></div><div class="se-table-size-display">1 x 1</div>',t},setController_table:function(e){const t=e.lang,n=e.icons,i=e.util.createElement("DIV");return i.className="se-controller se-controller-table",i.innerHTML='<div><div class="se-btn-group"><button type="button" data-command="resize" class="se-btn se-tooltip _se_table_resize">'+n.expansion+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.maxSize+'</span></span></button><button type="button" data-command="layout" class="se-btn se-tooltip _se_table_fixed_column">'+n.fixed_column_width+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.fixedColumnWidth+'</span></span></button><button type="button" data-command="header" class="se-btn se-tooltip _se_table_header">'+n.table_header+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.tableHeader+'</span></span></button><button type="button" data-command="remove" class="se-btn se-tooltip">'+n.delete+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.remove+"</span></span></button></div></div>",i},setController_tableEditor:function(e,t){const n=e.lang,i=e.icons,l=e.util.createElement("DIV");return l.className="se-controller se-controller-table-cell",l.innerHTML=(t?"":'<div class="se-arrow se-arrow-up"></div>')+'<div class="se-btn-group"><button type="button" data-command="insert" data-value="row" data-option="up" class="se-btn se-tooltip _se_table_insert_row_a">'+i.insert_row_above+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.insertRowAbove+'</span></span></button><button type="button" data-command="insert" data-value="row" data-option="down" class="se-btn se-tooltip _se_table_insert_row_b">'+i.insert_row_below+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.insertRowBelow+'</span></span></button><button type="button" data-command="delete" data-value="row" class="se-btn se-tooltip">'+i.delete_row+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.deleteRow+'</span></span></button><button type="button" data-command="merge" class="_se_table_merge_button se-btn se-tooltip" disabled>'+i.merge_cell+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.mergeCells+'</span></span></button></div><div class="se-btn-group" style="padding-top: 0;"><button type="button" data-command="insert" data-value="cell" data-option="left" class="se-btn se-tooltip">'+i.insert_column_left+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.insertColumnBefore+'</span></span></button><button type="button" data-command="insert" data-value="cell" data-option="right" class="se-btn se-tooltip">'+i.insert_column_right+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.insertColumnAfter+'</span></span></button><button type="button" data-command="delete" data-value="cell" class="se-btn se-tooltip">'+i.delete_column+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.deleteColumn+'</span></span></button><button type="button" data-command="onsplit" class="_se_table_split_button se-btn se-tooltip">'+i.split_cell+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+n.controller.splitCells+'</span></span></button><div class="se-btn-group-sub sun-editor-common se-list-layer se-table-split"><div class="se-list-inner"><ul class="se-list-basic"><li class="se-btn-list" data-command="split" data-value="vertical" style="line-height:32px;" title="'+n.controller.VerticalSplit+'" aria-label="'+n.controller.VerticalSplit+'">'+n.controller.VerticalSplit+'</li><li class="se-btn-list" data-command="split" data-value="horizontal" style="line-height:32px;" title="'+n.controller.HorizontalSplit+'" aria-label="'+n.controller.HorizontalSplit+'">'+n.controller.HorizontalSplit+"</li></ul></div></div></div>",l},appendTable:function(){const e=this.util.createElement("TABLE"),t=this.plugins.table.createCells,n=this.context.table._tableXY[0];let i=this.context.table._tableXY[1],l="<tbody>";for(;i>0;)l+="<tr>"+t.call(this,"td",n)+"</tr>",--i;l+="</tbody>",e.innerHTML=l;if(this.insertComponent(e,!1,!0,!1)){const t=e.querySelector("td div");this.setRange(t,0,t,0),this.plugins.table.reset_table_picker.call(this)}},createCells:function(e,t,n){if(e=e.toLowerCase(),n){const t=this.util.createElement(e);return t.innerHTML="<div><br></div>",t}{let n="";for(;t>0;)n+="<"+e+"><div><br></div></"+e+">",t--;return n}},onMouseMove_tablePicker:function(e,t){t.stopPropagation();let n=this._w.Math.ceil(t.offsetX/18),i=this._w.Math.ceil(t.offsetY/18);n=n<1?1:n,i=i<1?1:i,e._rtl&&(e.tableHighlight.style.left=18*n-13+"px",n=11-n),e.tableHighlight.style.width=n+"em",e.tableHighlight.style.height=i+"em",this.util.changeTxt(e.tableDisplay,n+" x "+i),e._tableXY=[n,i]},reset_table_picker:function(){if(!this.context.table.tableHighlight)return;const e=this.context.table.tableHighlight.style,t=this.context.table.tableUnHighlight.style;e.width="1em",e.height="1em",t.width="10em",t.height="10em",this.util.changeTxt(this.context.table.tableDisplay,"1 x 1"),this.submenuOff()},init:function(){const e=this.context.table,t=this.plugins.table;if(t._removeEvents.call(this),t._selectedTable){const e=t._selectedTable.querySelectorAll(".se-table-selected-cell");for(let t=0,n=e.length;t<n;t++)this.util.removeClass(e[t],"se-table-selected-cell")}t._toggleEditor.call(this,!0),e._element=null,e._tdElement=null,e._trElement=null,e._trElements=null,e._tableXY=[],e._maxWidth=!0,e._fixedColumn=!1,e._physical_cellCnt=0,e._logical_cellCnt=0,e._rowCnt=0,e._rowIndex=0,e._physical_cellIndex=0,e._logical_cellIndex=0,e._current_colSpan=0,e._current_rowSpan=0,t._shift=!1,t._selectedCells=null,t._selectedTable=null,t._ref=null,t._fixedCell=null,t._selectedCell=null,t._fixedCellName=null},call_controller_tableEdit:function(e){const t=this.plugins.table,n=this.context.table;if(!this.getSelection().isCollapsed&&!t._selectedCell)return this.controllersOff(),void this.util.removeClass(e,"se-table-selected-cell");const i=n._element||this.plugins.table._selectedTable||this.util.getParentElement(e,"TABLE");n._maxWidth=this.util.hasClass(i,"se-table-size-100")||"100%"===i.style.width||!i.style.width&&!this.util.hasClass(i,"se-table-size-auto"),n._fixedColumn=this.util.hasClass(i,"se-table-layout-fixed")||"fixed"===i.style.tableLayout,t.setTableStyle.call(this,n._maxWidth?"width|column":"width"),t.setPositionControllerTop.call(this,i),t.setPositionControllerDiv.call(this,e,t._shift),t._shift||this.controllersOn(n.resizeDiv,n.tableController,t.init.bind(this),e,"table")},setPositionControllerTop:function(e){this.setControllerPosition(this.context.table.tableController,e,"top",{left:0,top:0})},setPositionControllerDiv:function(e,t){const n=this.context.table,i=n.resizeDiv;this.plugins.table.setCellInfo.call(this,e,t),n.cellControllerTop?this.setControllerPosition(i,n._element,"top",{left:n.tableController.offsetWidth,top:0}):this.setControllerPosition(i,e,"bottom",{left:0,top:0})},setCellInfo:function(e,t){const n=this.context.table,i=n._element=this.plugins.table._selectedTable||this.util.getParentElement(e,"TABLE");if(/THEAD/i.test(i.firstElementChild.nodeName)?this.util.addClass(n.headerButton,"active"):this.util.removeClass(n.headerButton,"active"),t||0===n._physical_cellCnt){n._tdElement!==e&&(n._tdElement=e,n._trElement=e.parentNode);const t=n._trElements=i.rows,l=e.cellIndex;let o=0;for(let e=0,n=t[0].cells,i=t[0].cells.length;e<i;e++)o+=n[e].colSpan;const s=n._rowIndex=n._trElement.rowIndex;n._rowCnt=t.length,n._physical_cellCnt=n._trElement.cells.length,n._logical_cellCnt=o,n._physical_cellIndex=l,n._current_colSpan=n._tdElement.colSpan-1,n._current_rowSpan,n._trElement.cells[l].rowSpan;let a=[],r=[];for(let e,i,o=0;o<=s;o++){e=t[o].cells,i=0;for(let t,c,d,u,h=0,g=e.length;h<g;h++){if(t=e[h],c=t.colSpan-1,d=t.rowSpan-1,u=h+i,r.length>0)for(let e,t=0;t<r.length;t++)e=r[t],e.row>o||(u>=e.index?(i+=e.cs,u+=e.cs,e.rs-=1,e.row=o+1,e.rs<1&&(r.splice(t,1),t--)):h===g-1&&(e.rs-=1,e.row=o+1,e.rs<1&&(r.splice(t,1),t--)));if(o===s&&h===l){n._logical_cellIndex=u;break}d>0&&a.push({index:u,cs:c+1,rs:d,row:-1}),i+=c}r=r.concat(a).sort((function(e,t){return e.index-t.index})),a=[]}a=null,r=null}},editTable:function(e,t){const n=this.plugins.table,i=this.context.table,l=i._element,o="row"===e;if(o){const e=i._trElement.parentNode;if(/^THEAD$/i.test(e.nodeName)){if("up"===t)return;if(!e.nextElementSibling||!/^TBODY$/i.test(e.nextElementSibling.nodeName))return void(l.innerHTML+="<tbody><tr>"+n.createCells.call(this,"td",i._logical_cellCnt,!1)+"</tr></tbody>")}}if(n._ref){const e=i._tdElement,l=n._selectedCells;if(o)if(t)n.setCellInfo.call(this,"up"===t?l[0]:l[l.length-1],!0),n.editRow.call(this,t,e);else{let e=l[0].parentNode;const i=[l[0]];for(let t,n=1,o=l.length;n<o;n++)t=l[n],e!==t.parentNode&&(i.push(t),e=t.parentNode);for(let e=0,l=i.length;e<l;e++)n.setCellInfo.call(this,i[e],!0),n.editRow.call(this,t)}else{const i=l[0].parentNode;if(t){let o=null;for(let e=0,t=l.length-1;e<t;e++)if(i!==l[e+1].parentNode){o=l[e];break}n.setCellInfo.call(this,"left"===t?l[0]:o||l[0],!0),n.editCell.call(this,t,e)}else{const e=[l[0]];for(let t,n=1,o=l.length;n<o&&(t=l[n],i===t.parentNode);n++)e.push(t);for(let i=0,l=e.length;i<l;i++)n.setCellInfo.call(this,e[i],!0),n.editCell.call(this,t)}}t||n.init.call(this)}else n[o?"editRow":"editCell"].call(this,t);if(!t){const e=l.children;for(let t=0;t<e.length;t++)0===e[t].children.length&&(this.util.removeItem(e[t]),t--);0===l.children.length&&this.util.removeItem(l)}},editRow:function(e,t){const n=this.context.table,i=!e,l="up"===e,o=n._rowIndex,s=i||l?o:o+n._current_rowSpan+1,a=i?-1:1,r=n._trElements;let c=n._logical_cellCnt;for(let e,t=0,n=o+(i?-1:0);t<=n;t++){if(e=r[t].cells,0===e.length)return;for(let n,i,l=0,o=e.length;l<o;l++)n=e[l].rowSpan,i=e[l].colSpan,n<2&&i<2||n+t>s&&s>t&&(e[l].rowSpan=n+a,c-=i)}if(i){const e=r[o+1];if(e){const t=[];let n=r[o].cells,i=0;for(let e,l,o=0,s=n.length;o<s;o++)e=n[o],l=o+i,i+=e.colSpan-1,e.rowSpan>1&&(e.rowSpan-=1,t.push({cell:e.cloneNode(!1),index:l}));if(t.length>0){let l=t.shift();n=e.cells,i=0;for(let o,s,a=0,r=n.length;a<r&&(o=n[a],s=a+i,i+=o.colSpan-1,!(s>=l.index)||(a--,i--,i+=l.cell.colSpan-1,e.insertBefore(l.cell,o),l=t.shift(),l));a++);if(l){e.appendChild(l.cell);for(let n=0,i=t.length;n<i;n++)e.appendChild(t[n].cell)}}}n._element.deleteRow(s)}else{n._element.insertRow(s).innerHTML=this.plugins.table.createCells.call(this,"td",c,!1)}i?this.controllersOff():this.plugins.table.setPositionControllerDiv.call(this,t||n._tdElement,!0)},editCell:function(e,t){const n=this.context.table,i=this.util,l=!e,o="left"===e,s=n._current_colSpan,a=l||o?n._logical_cellIndex:n._logical_cellIndex+s+1,r=n._trElements;let c=[],d=[],u=0;const h=[],g=[];for(let e,t,o,p,m,f,_=0,b=n._rowCnt;_<b;_++){e=r[_],t=a,m=!1,o=e.cells,f=0;for(let e,n,r,p,b=0,v=o.length;b<v&&(e=o[b],e);b++)if(n=e.rowSpan-1,r=e.colSpan-1,l){if(p=b+f,d.length>0){const e=!o[b+1];for(let t,n=0;n<d.length;n++)t=d[n],t.row>_||(p>=t.index?(f+=t.cs,p=b+f,t.rs-=1,t.row=_+1,t.rs<1&&(d.splice(n,1),n--)):e&&(t.rs-=1,t.row=_+1,t.rs<1&&(d.splice(n,1),n--)))}n>0&&c.push({rs:n,cs:r+1,index:p,row:-1}),p>=t&&p+r<=t+s?h.push(e):p<=t+s&&p+r>=t?e.colSpan-=i.getOverlapRangeAtIndex(a,a+s,p,p+r):n>0&&(p<t||p+r>t+s)&&g.push({cell:e,i:_,rs:_+n}),f+=r}else{if(b>=t)break;if(r>0){if(u<1&&r+b>=t){e.colSpan+=1,t=null,u=n+1;break}t-=r}if(!m){for(let e,n=0;n<d.length;n++)e=d[n],t-=e.cs,e.rs-=1,e.rs<1&&(d.splice(n,1),n--);m=!0}}if(d=d.concat(c).sort((function(e,t){return e.index-t.index})),c=[],!l){if(u>0){u-=1;continue}null!==t&&o.length>0&&(p=this.plugins.table.createCells.call(this,o[0].nodeName,0,!0),p=e.insertBefore(p,o[t]))}}if(l){let e,t;for(let n,l=0,o=h.length;l<o;l++)n=h[l].parentNode,i.removeItem(h[l]),0===n.cells.length&&(e||(e=i.getArrayIndex(r,n)),t=i.getArrayIndex(r,n),i.removeItem(n));for(let n,l=0,o=g.length;l<o;l++)n=g[l],n.cell.rowSpan=i.getOverlapRangeAtIndex(e,t,n.i,n.rs);this.controllersOff()}else this.plugins.table.setPositionControllerDiv.call(this,t||n._tdElement,!0)},_closeSplitMenu:null,openSplitMenu:function(){this.util.addClass(this.context.table.splitButton,"on"),this.context.table.splitMenu.style.display="inline-table",this.plugins.table._closeSplitMenu=function(){this.util.removeClass(this.context.table.splitButton,"on"),this.context.table.splitMenu.style.display="none",this.removeDocEvent("click",this.plugins.table._closeSplitMenu),this.plugins.table._closeSplitMenu=null}.bind(this),this.addDocEvent("click",this.plugins.table._closeSplitMenu)},splitCells:function(e){const t=this.util,n="vertical"===e,i=this.context.table,l=i._tdElement,o=i._trElements,s=i._trElement,a=i._logical_cellIndex,r=i._rowIndex,c=this.plugins.table.createCells.call(this,l.nodeName,0,!0);if(n){const e=l.colSpan;if(c.rowSpan=l.rowSpan,e>1)c.colSpan=this._w.Math.floor(e/2),l.colSpan=e-c.colSpan,s.insertBefore(c,l.nextElementSibling);else{let t=[],n=[];for(let s,r,c=0,d=i._rowCnt;c<d;c++){s=o[c].cells,r=0;for(let i,o,d,u,h=0,g=s.length;h<g;h++){if(i=s[h],o=i.colSpan-1,d=i.rowSpan-1,u=h+r,n.length>0)for(let e,t=0;t<n.length;t++)e=n[t],e.row>c||(u>=e.index?(r+=e.cs,u+=e.cs,e.rs-=1,e.row=c+1,e.rs<1&&(n.splice(t,1),t--)):h===g-1&&(e.rs-=1,e.row=c+1,e.rs<1&&(n.splice(t,1),t--)));if(u<=a&&d>0&&t.push({index:u,cs:o+1,rs:d,row:-1}),i!==l&&u<=a&&u+o>=a+e-1){i.colSpan+=1;break}if(u>a)break;r+=o}n=n.concat(t).sort((function(e,t){return e.index-t.index})),t=[]}s.insertBefore(c,l.nextElementSibling)}}else{const e=l.rowSpan;if(c.colSpan=l.colSpan,e>1){c.rowSpan=this._w.Math.floor(e/2);const n=e-c.rowSpan,i=[],r=t.getArrayIndex(o,s)+n;for(let e,t,n=0;n<r;n++){e=o[n].cells,t=0;for(let l,o,s,c=0,d=e.length;c<d&&(s=c+t,!(s>=a));c++)l=e[c],o=l.rowSpan-1,o>0&&o+n>=r&&s<a&&i.push({index:s,cs:l.colSpan}),t+=l.colSpan-1}const d=o[r],u=d.cells;let h=i.shift();for(let e,t,n,l,o=0,s=u.length,r=0;o<s;o++){if(n=o+r,e=u[o],t=e.colSpan-1,l=n+t+1,h&&l>=h.index&&(r+=h.cs,l+=h.cs,h=i.shift()),l>=a||o===s-1){d.insertBefore(c,e.nextElementSibling);break}r+=t}l.rowSpan=n}else{c.rowSpan=l.rowSpan;const e=t.createElement("TR");e.appendChild(c);for(let e,t=0;t<r;t++){if(e=o[t].cells,0===e.length)return;for(let n=0,i=e.length;n<i;n++)t+e[n].rowSpan-1>=r&&(e[n].rowSpan+=1)}const n=i._physical_cellIndex,a=s.cells;for(let e=0,t=a.length;e<t;e++)e!==n&&(a[e].rowSpan+=1);s.parentNode.insertBefore(e,s.nextElementSibling)}}this.focusEdge(l),this.plugins.table.setPositionControllerDiv.call(this,l,!0)},mergeCells:function(){const e=this.plugins.table,t=this.context.table,n=this.util,i=e._ref,l=e._selectedCells,o=l[0];let s=null,a=null,r=i.ce-i.cs+1,c=i.re-i.rs+1,d="",u=null;for(let e,t,i=1,o=l.length;i<o;i++){e=l[i],u!==e.parentNode&&(u=e.parentNode),t=e.children;for(let e=0,i=t.length;e<i;e++)n.isFormatElement(t[e])&&n.onlyZeroWidthSpace(t[e].textContent)&&n.removeItem(t[e]);d+=e.innerHTML,n.removeItem(e),0===u.cells.length&&(s?a=u:s=u,c-=1)}if(s){const e=t._trElements,i=n.getArrayIndex(e,s),l=n.getArrayIndex(e,a||s),o=[];for(let t,s=0;s<=l;s++)if(t=e[s].cells,0!==t.length)for(let e,o,a=0,r=t.length;a<r;a++)e=t[a],o=e.rowSpan-1,o>0&&s+o>=i&&(e.rowSpan-=n.getOverlapRangeAtIndex(i,l,s,s+o));else o.push(e[s]);for(let e=0,t=o.length;e<t;e++)n.removeItem(o[e])}o.innerHTML+=d,o.colSpan=r,o.rowSpan=c,this.controllersOff(),e.setActiveButton.call(this,!0,!1),e.call_controller_tableEdit.call(this,o),n.addClass(o,"se-table-selected-cell"),this.focusEdge(o)},toggleHeader:function(){const e=this.util,t=this.context.table.headerButton,n=e.hasClass(t,"active"),i=this.context.table._element;if(n)e.removeItem(i.querySelector("thead"));else{const t=e.createElement("THEAD");t.innerHTML="<tr>"+this.plugins.table.createCells.call(this,"th",this.context.table._logical_cellCnt,!1)+"</tr>",i.insertBefore(t,i.firstElementChild)}e.toggleClass(t,"active"),/TH/i.test(this.context.table._tdElement.nodeName)?this.controllersOff():this.plugins.table.setPositionControllerDiv.call(this,this.context.table._tdElement,!1)},setTableStyle:function(e){const t=this.context.table,n=t._element;let i,l,o,s;e.indexOf("width")>-1&&(i=t.resizeButton.firstElementChild,l=t.resizeText,t._maxWidth?(o=t.icons.reduction,s=t.minText,t.columnFixedButton.style.display="block",this.util.removeClass(n,"se-table-size-auto"),this.util.addClass(n,"se-table-size-100")):(o=t.icons.expansion,s=t.maxText,t.columnFixedButton.style.display="none",this.util.removeClass(n,"se-table-size-100"),this.util.addClass(n,"se-table-size-auto")),this.util.changeElement(i,o),this.util.changeTxt(l,s)),e.indexOf("column")>-1&&(t._fixedColumn?(this.util.removeClass(n,"se-table-layout-auto"),this.util.addClass(n,"se-table-layout-fixed"),this.util.addClass(t.columnFixedButton,"active")):(this.util.removeClass(n,"se-table-layout-fixed"),this.util.addClass(n,"se-table-layout-auto"),this.util.removeClass(t.columnFixedButton,"active")))},setActiveButton:function(e,t){const n=this.context.table;/^TH$/i.test(e.nodeName)?(n.insertRowAboveButton.setAttribute("disabled",!0),n.insertRowBelowButton.setAttribute("disabled",!0)):(n.insertRowAboveButton.removeAttribute("disabled"),n.insertRowBelowButton.removeAttribute("disabled")),t&&e!==t?(n.splitButton.setAttribute("disabled",!0),n.mergeButton.removeAttribute("disabled")):(n.splitButton.removeAttribute("disabled"),n.mergeButton.setAttribute("disabled",!0))},_bindOnSelect:null,_bindOffSelect:null,_bindOffShift:null,_selectedCells:null,_shift:!1,_fixedCell:null,_fixedCellName:null,_selectedCell:null,_selectedTable:null,_ref:null,_toggleEditor:function(e){this.context.element.wysiwyg.setAttribute("contenteditable",e),e?this.util.removeClass(this.context.element.wysiwyg,"se-disabled"):this.util.addClass(this.context.element.wysiwyg,"se-disabled")},_offCellMultiSelect:function(e){e.stopPropagation();const t=this.plugins.table;t._shift?t._initBind&&(this._wd.removeEventListener("touchmove",t._initBind),t._initBind=null):(t._removeEvents.call(this),t._toggleEditor.call(this,!0)),t._fixedCell&&t._selectedTable&&(t.setActiveButton.call(this,t._fixedCell,t._selectedCell),t.call_controller_tableEdit.call(this,t._selectedCell||t._fixedCell),t._selectedCells=t._selectedTable.querySelectorAll(".se-table-selected-cell"),t._selectedCell&&t._fixedCell&&this.focusEdge(t._selectedCell),t._shift||(t._fixedCell=null,t._selectedCell=null,t._fixedCellName=null))},_onCellMultiSelect:function(e){this._antiBlur=!0;const t=this.plugins.table,n=this.util.getParentElement(e.target,this.util.isCell);if(t._shift)n===t._fixedCell?t._toggleEditor.call(this,!0):t._toggleEditor.call(this,!1);else if(!t._ref){if(n===t._fixedCell)return;t._toggleEditor.call(this,!1)}n&&n!==t._selectedCell&&t._fixedCellName===n.nodeName&&t._selectedTable===this.util.getParentElement(n,"TABLE")&&(t._selectedCell=n,t._setMultiCells.call(this,t._fixedCell,n))},_setMultiCells:function(e,t){const n=this.plugins.table,i=n._selectedTable.rows,l=this.util,o=n._selectedTable.querySelectorAll(".se-table-selected-cell");for(let e=0,t=o.length;e<t;e++)l.removeClass(o[e],"se-table-selected-cell");if(e===t&&(l.addClass(e,"se-table-selected-cell"),!n._shift))return;let s=!0,a=[],r=[];const c=n._ref={_i:0,cs:null,ce:null,rs:null,re:null};for(let n,o,d=0,u=i.length;d<u;d++){n=i[d].cells,o=0;for(let i,u,h,g,p=0,m=n.length;p<m;p++){if(i=n[p],h=i.colSpan-1,g=i.rowSpan-1,u=p+o,a.length>0)for(let e,t=0;t<a.length;t++)e=a[t],e.row>d||(u>=e.index?(o+=e.cs,u+=e.cs,e.rs-=1,e.row=d+1,e.rs<1&&(a.splice(t,1),t--)):p===m-1&&(e.rs-=1,e.row=d+1,e.rs<1&&(a.splice(t,1),t--)));if(s){if(i!==e&&i!==t||(c.cs=null!==c.cs&&c.cs<u?c.cs:u,c.ce=null!==c.ce&&c.ce>u+h?c.ce:u+h,c.rs=null!==c.rs&&c.rs<d?c.rs:d,c.re=null!==c.re&&c.re>d+g?c.re:d+g,c._i+=1),2===c._i){s=!1,a=[],r=[],d=-1;break}}else if(l.getOverlapRangeAtIndex(c.cs,c.ce,u,u+h)&&l.getOverlapRangeAtIndex(c.rs,c.re,d,d+g)){const e=c.cs<u?c.cs:u,t=c.ce>u+h?c.ce:u+h,n=c.rs<d?c.rs:d,o=c.re>d+g?c.re:d+g;if(c.cs!==e||c.ce!==t||c.rs!==n||c.re!==o){c.cs=e,c.ce=t,c.rs=n,c.re=o,d=-1,a=[],r=[];break}l.addClass(i,"se-table-selected-cell")}g>0&&r.push({index:u,cs:h+1,rs:g,row:-1}),o+=i.colSpan-1}a=a.concat(r).sort((function(e,t){return e.index-t.index})),r=[]}},_removeEvents:function(){const e=this.plugins.table;e._initBind&&(this._wd.removeEventListener("touchmove",e._initBind),e._initBind=null),e._bindOnSelect&&(this._wd.removeEventListener("mousedown",e._bindOnSelect),this._wd.removeEventListener("mousemove",e._bindOnSelect),e._bindOnSelect=null),e._bindOffSelect&&(this._wd.removeEventListener("mouseup",e._bindOffSelect),e._bindOffSelect=null),e._bindOffShift&&(this._wd.removeEventListener("keyup",e._bindOffShift),e._bindOffShift=null)},_initBind:null,onTableCellMultiSelect:function(e,t){const n=this.plugins.table;n._removeEvents.call(this),this.controllersOff(),n._shift=t,n._fixedCell=e,n._fixedCellName=e.nodeName,n._selectedTable=this.util.getParentElement(e,"TABLE");const i=n._selectedTable.querySelectorAll(".se-table-selected-cell");for(let e=0,t=i.length;e<t;e++)this.util.removeClass(i[e],"se-table-selected-cell");this.util.addClass(e,"se-table-selected-cell"),n._bindOnSelect=n._onCellMultiSelect.bind(this),n._bindOffSelect=n._offCellMultiSelect.bind(this),t?(n._bindOffShift=function(){this.controllersOn(this.context.table.resizeDiv,this.context.table.tableController,this.plugins.table.init.bind(this),e,"table"),n._ref||this.controllersOff()}.bind(this),this._wd.addEventListener("keyup",n._bindOffShift,!1),this._wd.addEventListener("mousedown",n._bindOnSelect,!1)):this._wd.addEventListener("mousemove",n._bindOnSelect,!1),this._wd.addEventListener("mouseup",n._bindOffSelect,!1),n._initBind=n.init.bind(this),this._wd.addEventListener("touchmove",n._initBind,!1)},onClick_tableController:function(e){e.stopPropagation();const t=e.target.getAttribute("data-command")?e.target:e.target.parentNode;if(t.getAttribute("disabled"))return;const n=t.getAttribute("data-command"),i=t.getAttribute("data-value"),l=t.getAttribute("data-option"),o=this.plugins.table;if("function"==typeof o._closeSplitMenu&&(o._closeSplitMenu(),"onsplit"===n))return;if(!n)return;e.preventDefault();const s=this.context.table;switch(n){case"insert":case"delete":o.editTable.call(this,i,l);break;case"header":o.toggleHeader.call(this);break;case"onsplit":o.openSplitMenu.call(this);break;case"split":o.splitCells.call(this,i);break;case"merge":o.mergeCells.call(this);break;case"resize":s._maxWidth=!s._maxWidth,o.setTableStyle.call(this,"width"),o.setPositionControllerTop.call(this,s._element),o.setPositionControllerDiv.call(this,s._tdElement,o._shift);break;case"layout":s._fixedColumn=!s._fixedColumn,o.setTableStyle.call(this,"column"),o.setPositionControllerTop.call(this,s._element),o.setPositionControllerDiv.call(this,s._tdElement,o._shift);break;case"remove":const e=s._element.parentNode;this.util.removeItem(s._element),this.controllersOff(),e!==this.context.element.wysiwyg&&this.util.removeItemAllParents(e,(function(e){return 0===e.childNodes.length}),null),this.focus()}this.history.push(!1)}},formatBlock:{name:"formatBlock",display:"submenu",add:function(e,t){const n=e.context;n.formatBlock={targetText:t.querySelector(".txt"),targetTooltip:t.parentNode.querySelector(".se-tooltip-text"),_formatList:null,currentFormat:""};let i=this.setSubmenu(e);i.querySelector("ul").addEventListener("click",this.pickUp.bind(e)),n.formatBlock._formatList=i.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null},setSubmenu:function(e){const t=e.options,n=e.lang.toolbar,i=e.util.createElement("DIV");i.className="se-submenu se-list-layer se-list-format";const l=["p","div","blockquote","pre","h1","h2","h3","h4","h5","h6"],o=t.formats&&0!==t.formats.length?t.formats:l;let s='<div class="se-list-inner"><ul class="se-list-basic">';for(let e,t,i,a,r,c,d,u=0,h=o.length;u<h;u++)e=o[u],"string"==typeof e&&l.indexOf(e)>-1?(t=e.toLowerCase(),i="blockquote"===t?"range":"pre"===t?"free":"replace",r=/^h/.test(t)?t.match(/\d+/)[0]:"",a=n["tag_"+(r?"h":t)]+r,d="",c=""):(t=e.tag.toLowerCase(),i=e.command,a=e.name||t,d=e.class,c=d?' class="'+d+'"':""),s+='<li><button type="button" class="se-btn-list" data-command="'+i+'" data-value="'+t+'" data-class="'+d+'" title="'+a+'" aria-label="'+a+'"><'+t+c+">"+a+"</"+t+"></button></li>";return s+="</ul></div>",i.innerHTML=s,i},active:function(e){let t=this.lang.toolbar.formats;const n=this.context.formatBlock.targetText;if(e){if(this.util.isFormatElement(e)){const i=this.context.formatBlock._formatList,l=e.nodeName.toLowerCase(),o=(e.className.match(/(\s|^)__se__format__[^\s]+/)||[""])[0].trim();for(let e,n=0,s=i.length;n<s;n++)if(e=i[n],l===e.getAttribute("data-value")&&o===e.getAttribute("data-class")){t=e.title;break}return this.util.changeTxt(n,t),n.setAttribute("data-value",l),n.setAttribute("data-class",o),!0}}else this.util.changeTxt(n,t);return!1},on:function(){const e=this.context.formatBlock,t=e._formatList,n=e.targetText,i=(n.getAttribute("data-value")||"")+(n.getAttribute("data-class")||"");if(i!==e.currentFormat){for(let e,n=0,l=t.length;n<l;n++)e=t[n],i===e.getAttribute("data-value")+e.getAttribute("data-class")?this.util.addClass(e,"active"):this.util.removeClass(e,"active");e.currentFormat=i}},pickUp:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n=null,i=null,l=null,o="";for(;!n&&!/UL/i.test(t.tagName);){if(n=t.getAttribute("data-command"),i=t.getAttribute("data-value"),o=t.getAttribute("data-class"),n){l=t.firstChild;break}t=t.parentNode}if(n){if("range"===n){const e=l.cloneNode(!1);this.applyRangeFormatElement(e)}else{let e=this.getRange(),t=this.getSelectedElementsAndComponents(!1);if(0===t.length&&(e=this.getRange_addLine(e,null),t=this.getSelectedElementsAndComponents(!1),0===t.length))return;const s=e.startOffset,a=e.endOffset,r=this.util;let c=t[0],d=t[t.length-1];const u=r.getNodePath(e.startContainer,c,null,null),h=r.getNodePath(e.endContainer,d,null,null),g=this.detachList(t,!1);g.sc&&(c=g.sc),g.ec&&(d=g.ec),this.setRange(r.getNodeFromPath(u,c),s,r.getNodeFromPath(h,d),a);const p=this.getSelectedElementsAndComponents(!1);if("free"===n){const e=p.length-1;let t=p[e].parentNode,n=l.cloneNode(!1);const i=n;for(let i,o,s,a,c,d,u=e,h=!0;u>=0;u--)if(i=p[u],i!==(p[u+1]?p[u+1].parentNode:null)){if(d=r.isComponent(i),o=d?"":i.innerHTML.replace(/(?!>)\s+(?=<)|\n/g," "),s=r.getParentElement(i,(function(e){return e.parentNode===t})),(t!==i.parentNode||d)&&(r.isFormatElement(t)?(t.parentNode.insertBefore(n,t.nextSibling),t=t.parentNode):(t.insertBefore(n,s?s.nextSibling:null),t=i.parentNode),a=n.nextSibling,a&&n.nodeName===a.nodeName&&r.isSameAttributes(n,a)&&(n.innerHTML+="<BR>"+a.innerHTML,r.removeItem(a)),n=l.cloneNode(!1),h=!0),c=n.innerHTML,n.innerHTML=(h||!o||!c||/<br>$/i.test(o)?o:o+"<BR>")+c,0===u){t.insertBefore(n,i),a=i.nextSibling,a&&n.nodeName===a.nodeName&&r.isSameAttributes(n,a)&&(n.innerHTML+="<BR>"+a.innerHTML,r.removeItem(a));const e=n.previousSibling;e&&n.nodeName===e.nodeName&&r.isSameAttributes(n,e)&&(e.innerHTML+="<BR>"+n.innerHTML,r.removeItem(n))}d||r.removeItem(i),o&&(h=!1)}this.setRange(i,0,i,0)}else{for(let e,t,n=0,s=p.length;n<s;n++)e=p[n],e.nodeName.toLowerCase()===i.toLowerCase()&&(e.className.match(/(\s|^)__se__format__[^\s]+/)||[""])[0].trim()===o||r.isComponent(e)||(t=l.cloneNode(!1),r.copyFormatAttributes(t,e),t.innerHTML=e.innerHTML,e.parentNode.replaceChild(t,e)),0===n&&(c=t||e),n===s-1&&(d=t||e),t=null;this.setRange(r.getNodeFromPath(u,c),s,r.getNodeFromPath(h,d),a)}this.history.push(!1)}this.submenuOff()}}},lineHeight:{name:"lineHeight",display:"submenu",add:function(e,t){const n=e.context;n.lineHeight={_sizeList:null,currentSize:-1};let i=this.setSubmenu(e),l=i.querySelector("ul");l.addEventListener("click",this.pickup.bind(e)),n.lineHeight._sizeList=l.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null,l=null},setSubmenu:function(e){const t=e.options,n=e.lang,i=e.util.createElement("DIV");i.className="se-submenu se-list-layer";const l=t.lineHeights?t.lineHeights:[{text:"1",value:1},{text:"1.15",value:1.15},{text:"1.5",value:1.5},{text:"2",value:2}];let o='<div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="default_value se-btn-list" title="'+n.toolbar.default+'" aria-label="'+n.toolbar.default+'">('+n.toolbar.default+")</button></li>";for(let e,t=0,n=l.length;t<n;t++)e=l[t],o+='<li><button type="button" class="se-btn-list" data-value="'+e.value+'" title="'+e.text+'" aria-label="'+e.text+'">'+e.text+"</button></li>";return o+="</ul></div>",i.innerHTML=o,i},on:function(){const e=this.context.lineHeight,t=e._sizeList,n=this.util.getFormatElement(this.getSelectionNode()),i=n?n.style.lineHeight+"":"";if(i!==e.currentSize){for(let e=0,n=t.length;e<n;e++)i===t[e].getAttribute("data-value")?this.util.addClass(t[e],"active"):this.util.removeClass(t[e],"active");e.currentSize=i}},pickup:function(e){if(!/^BUTTON$/i.test(e.target.tagName))return!1;e.preventDefault(),e.stopPropagation();const t=e.target.getAttribute("data-value")||"",n=this.getSelectedElements();for(let e=0,i=n.length;e<i;e++)n[e].style.lineHeight=t;this.submenuOff(),this.history.push(!1)}},template:s,paragraphStyle:{name:"paragraphStyle",display:"submenu",add:function(e,t){const n=e.context;n.paragraphStyle={_classList:null};let i=this.setSubmenu(e);i.querySelector("ul").addEventListener("click",this.pickUp.bind(e)),n.paragraphStyle._classList=i.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null},setSubmenu:function(e){const t=e.options,n=e.util.createElement("DIV");n.className="se-submenu se-list-layer se-list-format";const i=e.lang.menu,l={spaced:{name:i.spaced,class:"__se__p-spaced",_class:""},bordered:{name:i.bordered,class:"__se__p-bordered",_class:""},neon:{name:i.neon,class:"__se__p-neon",_class:""}},o=t.paragraphStyles&&0!==t.paragraphStyles.length?t.paragraphStyles:["spaced","bordered","neon"];let s='<div class="se-list-inner"><ul class="se-list-basic">';for(let e,t,n,i,a=0,r=o.length;a<r;a++){if(e=o[a],"string"==typeof e){const t=l[e.toLowerCase()];if(!t)continue;e=t}t=e.name,n=e.class?' class="'+e.class+'"':"",i=e._class,s+='<li><button type="button" class="se-btn-list'+(i?" "+i:"")+'" data-value="'+e.class+'" title="'+t+'" aria-label="'+t+'"><div'+n+">"+t+"</div></button></li>"}return s+="</ul></div>",n.innerHTML=s,n},on:function(){const e=this.context.paragraphStyle._classList,t=this.util.getFormatElement(this.getSelectionNode());for(let n=0,i=e.length;n<i;n++)this.util.hasClass(t,e[n].getAttribute("data-value"))?this.util.addClass(e[n],"active"):this.util.removeClass(e[n],"active")},pickUp:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n=null;for(;!/^UL$/i.test(t.tagName)&&(n=t.getAttribute("data-value"),!n);)t=t.parentNode;if(!n)return;let i=this.getSelectedElements();if(0===i.length&&(this.getRange_addLine(this.getRange(),null),i=this.getSelectedElements(),0===i.length))return;const l=this.util.hasClass(t,"active")?this.util.removeClass.bind(this.util):this.util.addClass.bind(this.util);for(let e=0,t=i.length;e<t;e++)l(i[e],n);this.submenuOff(),this.history.push(!1)}},textStyle:{name:"textStyle",display:"submenu",add:function(e,t){const n=e.context;n.textStyle={_styleList:null};let i=this.setSubmenu(e),l=i.querySelector("ul");l.addEventListener("click",this.pickup.bind(e)),n.textStyle._styleList=i.querySelectorAll("li button"),e.initMenuTarget(this.name,t,i),i=null,l=null},setSubmenu:function(e){const t=e.options,n=e.util.createElement("DIV");n.className="se-submenu se-list-layer se-list-format";const i={code:{name:e.lang.menu.code,class:"__se__t-code",tag:"code"},translucent:{name:e.lang.menu.translucent,style:"opacity: 0.5;",tag:"span"},shadow:{name:e.lang.menu.shadow,class:"__se__t-shadow",tag:"span"}},l=t.textStyles?t.textStyles:e._w.Object.keys(i);let o='<div class="se-list-inner"><ul class="se-list-basic">';for(let e,t,n,s,a,r,c,d=0,u=l.length;d<u;d++){if(e=l[d],s="",r="",a=[],"string"==typeof e){const t=i[e.toLowerCase()];if(!t)continue;e=t}n=e.name,t=e.tag||"span",c=e._class,e.style&&(s+=' style="'+e.style+'"',r+=e.style.replace(/:[^;]+(;|$)\s*/g,","),a.push("style")),e.class&&(s+=' class="'+e.class+'"',r+="."+e.class.trim().replace(/\s+/g,",."),a.push("class")),r=r.replace(/,$/,""),o+='<li><button type="button" class="se-btn-list'+(c?" "+c:"")+'" data-command="'+t+'" data-value="'+r+'" title="'+n+'" aria-label="'+n+'"><'+t+s+">"+n+"</"+t+"></button></li>"}return o+="</ul></div>",n.innerHTML=o,n},on:function(){const e=this.util,t=this.context.textStyle._styleList,n=this.getSelectionNode();for(let i,l,o,s=0,a=t.length;s<a;s++){i=t[s],l=i.getAttribute("data-value").split(",");for(let t,s,a=0;a<l.length;a++){for(t=n,o=!1;t&&!e.isFormatElement(t)&&!e.isComponent(t);){if(t.nodeName.toLowerCase()===i.getAttribute("data-command").toLowerCase()&&(s=l[a],/^\./.test(s)?e.hasClass(t,s.replace(/^\./,"")):t.style[s])){o=!0;break}t=t.parentNode}if(!o)break}o?e.addClass(i,"active"):e.removeClass(i,"active")}},pickup:function(e){e.preventDefault(),e.stopPropagation();let t=e.target,n=null,i=null;for(;!n&&!/UL/i.test(t.tagName);){if(n=t.getAttribute("data-command"),n){i=t.firstChild;break}t=t.parentNode}if(!n)return;const l=i.style.cssText.replace(/:.+(;|$)/g,",").split(",");l.pop();const o=i.classList;for(let e=0,t=o.length;e<t;e++)l.push("."+o[e]);const s=this.util.hasClass(t,"active")?null:i.cloneNode(!1),a=s?null:[i.nodeName];this.nodeChange(s,l,a,!0),this.submenuOff()}},link:u,image:b,video:v,audio:y,math:C,imageGallery:{name:"imageGallery",add:function(e){e.addModule([x.a]);e.context.imageGallery={title:e.lang.toolbar.imageGallery,directData:e.options.imageGalleryData,url:e.options.imageGalleryUrl,header:e.options.imageGalleryHeader,listClass:"se-image-list",itemTemplateHandler:this.drawItems,selectorHandler:this.setImage.bind(e),columnSize:4}},open:function(e){this.plugins.fileBrowser.open.call(this,"imageGallery",e)},drawItems:function(e){const t=e.src.split("/").pop();return'<div class="se-file-item-img"><img src="'+(e.thumbnail||e.src)+'" alt="'+(e.alt||t)+'" data-command="pick" data-value="'+(e.src||e.thumbnail)+'"><div class="se-file-img-name se-file-name-back"></div><div class="se-file-img-name __se__img_name">'+(e.name||t)+"</div></div>"},setImage:function(e,t){this.callPlugin("image",function(){const n={name:t,size:0};this.plugins.image.create_image.call(this,e.getAttribute("data-value"),null,this.context.image._origin_w,this.context.image._origin_h,"none",n,e.alt)}.bind(this),null)}}},S={rtl:{italic:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10.5 15.8" xml:space="preserve"><g><path d="M0.3,0.1c0.3,0,0.5,0,0.7,0c1,0.1,1.7,0.1,2.2,0.1H4L7.2,0l0.2,1.1H7c-0.5,0-1,0.1-1.5,0.3v0.4l0.3,1.9L6,4.4L6.3,6 l0.1,0.4l0.1,0.5c0.1,0.2,0.1,0.4,0.2,0.7s0.1,0.6,0.2,0.9L7,9.1l0.6,2.8l0.3,1.4c0.1,0.4,0.2,0.7,0.4,1c0.4,0.2,0.8,0.3,1.2,0.4 l0.8,0.2l0.2,0.9l-1.1,0c-0.9-0.1-1.5-0.1-1.8-0.1h-2c-0.9,0.1-1.4,0.2-1.5,0.2c-0.1,0-0.2,0-0.3,0H3.4c-0.1,0-0.2,0-0.2,0 l-0.1-0.4c0-0.2-0.1-0.4-0.1-0.6l0.7-0.1c0.4,0,0.8-0.1,1.2-0.2c0-0.1,0-0.2,0-0.3l-0.1-0.5l-0.4-2.4L4,9.6L3.4,6.4 C3.2,5.7,3,4.7,2.7,3.3c0-0.3-0.1-0.5-0.1-0.8C2.5,2.1,2.4,1.9,2.3,1.6C2,1.4,1.6,1.3,1.3,1.2C0.9,1.2,0.5,1.1,0.2,0.9L0,0.4L0,0 L0.3,0.1L0.3,0.1z"/></g></svg>',indent:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 12.4" xml:space="preserve"><g><g><path d="M15.5,10.1L15.5,10.1c0.1,0,0.3,0.1,0.3,0.3v1.7c0,0.1,0,0.1-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.1l-15.2,0 c-0.1,0-0.1,0-0.2-0.1C0,12.2,0,12.2,0,12.1l0-1.7c0-0.1,0-0.1,0.1-0.2c0.1-0.1,0.1-0.1,0.2-0.1C0.3,10.1,15.5,10.1,15.5,10.1z M9.8,6.7c0.1,0,0.1,0,0.2,0.1C10.1,6.9,10.1,7,10.1,7v1.7c0,0.1,0,0.2-0.1,0.2C10,9,9.9,9,9.8,9L0.3,9C0.2,9,0.1,9,0.1,8.9 C0,8.9,0,8.8,0,8.7V7C0,7,0,6.9,0.1,6.8c0.1-0.1,0.1-0.1,0.2-0.1C0.3,6.7,9.8,6.7,9.8,6.7z M0.3,3.4h9.6h0c0.1,0,0.3,0.1,0.3,0.3 v1.7v0c0,0.1-0.1,0.3-0.3,0.3H0.3c-0.1,0-0.1,0-0.2-0.1C0,5.5,0,5.4,0,5.3V3.6c0-0.1,0-0.1,0.1-0.2C0.1,3.4,0.2,3.4,0.3,3.4 L0.3,3.4z M0.3,0l15.2,0c0.1,0,0.1,0,0.2,0.1c0.1,0.1,0.1,0.1,0.1,0.2V2c0,0.1,0,0.2-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.1H0.3 c-0.1,0-0.1,0-0.2-0.1C0,2.1,0,2,0,2l0-1.7c0-0.1,0-0.1,0.1-0.2C0.1,0,0.2,0,0.3,0z"/></g><path d="M13.1,3.5L15.7,6c0.1,0.1,0.1,0.3,0,0.4l-2.5,2.5C13.1,9,13,9,12.9,9c-0.1,0-0.1,0-0.2-0.1c-0.1-0.1-0.1-0.1-0.1-0.2V3.7 c0-0.1,0-0.2,0.1-0.2c0.1-0.1,0.1-0.1,0.2-0.1C13,3.4,13.1,3.4,13.1,3.5z"/></g></svg>',outdent:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 12.4" xml:space="preserve"><g><g><path d="M15.5,10.1L15.5,10.1c0.1,0,0.3,0.1,0.3,0.3v1.7c0,0.1,0,0.1-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.1l-15.2,0 c-0.1,0-0.1,0-0.2-0.1C0,12.2,0,12.2,0,12.1l0-1.7c0-0.1,0-0.1,0.1-0.2c0.1-0.1,0.1-0.1,0.2-0.1C0.3,10.1,15.5,10.1,15.5,10.1z M9.8,6.7c0.1,0,0.1,0,0.2,0.1C10.1,6.9,10.1,7,10.1,7v1.7c0,0.1,0,0.2-0.1,0.2C10,9,9.9,9,9.8,9L0.3,9C0.2,9,0.1,9,0.1,8.9 C0,8.9,0,8.8,0,8.7V7C0,7,0,6.9,0.1,6.8c0.1-0.1,0.1-0.1,0.2-0.1C0.3,6.7,9.8,6.7,9.8,6.7z M0.3,3.4h9.6h0c0.1,0,0.3,0.1,0.3,0.3 v1.7v0c0,0.1-0.1,0.3-0.3,0.3H0.3c-0.1,0-0.1,0-0.2-0.1C0,5.5,0,5.4,0,5.3V3.6c0-0.1,0-0.1,0.1-0.2C0.1,3.4,0.2,3.4,0.3,3.4 L0.3,3.4z M0.3,0l15.2,0c0.1,0,0.1,0,0.2,0.1c0.1,0.1,0.1,0.1,0.1,0.2V2c0,0.1,0,0.2-0.1,0.2c-0.1,0.1-0.1,0.1-0.2,0.1H0.3 c-0.1,0-0.1,0-0.2-0.1C0,2.1,0,2,0,2l0-1.7c0-0.1,0-0.1,0.1-0.2C0.1,0,0.2,0,0.3,0z"/></g><path d="M15.5,3.4c0.1,0,0.1,0,0.2,0.1c0.1,0.1,0.1,0.1,0.1,0.2v5.1c0,0.1,0,0.1-0.1,0.2C15.6,9,15.5,9,15.5,9 c-0.1,0-0.1,0-0.2-0.1l-2.5-2.5c-0.1-0.1-0.1-0.3,0-0.4l2.5-2.5C15.3,3.4,15.4,3.4,15.5,3.4z"/></g></svg>',list_bullets:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 12.4" xml:space="preserve"><g><path d="M12.4,10.7c0,0.9,0.8,1.7,1.7,1.7c0.9,0,1.7-0.8,1.7-1.7C15.7,9.8,15,9,14.1,9c-0.4,0-0.9,0.2-1.2,0.5 C12.5,9.8,12.4,10.2,12.4,10.7C12.4,10.7,12.4,10.7,12.4,10.7z M12.4,6.2c0,0.9,0.8,1.7,1.7,1.7c0.4,0,0.9-0.2,1.2-0.5 c0.3-0.3,0.4-0.7,0.4-1.1c0-0.9-0.7-1.7-1.6-1.7C13.1,4.6,12.4,5.3,12.4,6.2C12.4,6.2,12.4,6.2,12.4,6.2z M0,9.8v1.7 c0,0.1,0,0.1,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.1l10.7,0c0,0,0,0,0,0c0.1,0,0.3-0.1,0.3-0.3V9.8c0-0.1,0-0.1-0.1-0.2 C11.1,9.6,11,9.6,11,9.6l-10.7,0c-0.1,0-0.1,0-0.2,0.1C0,9.7,0,9.8,0,9.8L0,9.8z M12.9,2.9c0.3,0.3,0.7,0.5,1.2,0.5 c0.4,0,0.9-0.2,1.2-0.5c0.7-0.7,0.7-1.7,0-2.4C14.9,0.2,14.5,0,14.1,0c-0.4,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.5,0.7-0.5,1.2 C12.4,2.1,12.5,2.6,12.9,2.9z M0,5.3V7c0,0.1,0,0.1,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.1H11c0.1,0,0.1,0,0.2-0.1 c0.1-0.1,0.1-0.1,0.1-0.2V5.3c0,0,0,0,0,0c0-0.1-0.1-0.3-0.3-0.3H0.3c-0.1,0-0.1,0-0.2,0.1C0,5.2,0,5.3,0,5.3L0,5.3z M0,0.8v1.7 c0,0.1,0,0.1,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.1h10.7c0.1,0,0.1,0,0.2-0.1c0,0,0.1-0.1,0.1-0.2V0.8c0-0.1,0-0.1-0.1-0.2 c0-0.1-0.1-0.1-0.2-0.1H0.3c-0.1,0-0.1,0-0.2,0.1C0,0.7,0,0.8,0,0.8L0,0.8z"/></g></svg>',list_number:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 15.7" xml:space="preserve"><g><path d="M0,11.5l0,1.7c0,0.1,0,0.1,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.1H11c0.1,0,0.2,0,0.2-0.1c0.1-0.1,0.1-0.1,0.1-0.2v-1.7 c0-0.1,0-0.1-0.1-0.2c-0.1-0.1-0.1-0.1-0.2-0.1H0.3c-0.1,0-0.2,0-0.2,0.1C0,11.4,0,11.4,0,11.5L0,11.5z M0,8.7c0,0.1,0,0.1,0.1,0.2 C0.1,8.9,0.2,9,0.3,9H11c0.1,0,0.2,0,0.2-0.1c0.1-0.1,0.1-0.1,0.1-0.2V7c0-0.1,0-0.1-0.1-0.2c-0.1-0.1-0.1-0.1-0.2-0.1l-10.7,0 c-0.1,0-0.2,0-0.2,0.1C0,6.8,0,6.9,0,7C0,7,0,8.7,0,8.7z M0,2.5v1.7c0,0.1,0,0.1,0.1,0.2c0,0,0.1,0.1,0.2,0.1l10.7,0 c0.1,0,0.2,0,0.2-0.1c0.1-0.1,0.1-0.1,0.1-0.2V2.4c0-0.1,0-0.1-0.1-0.2c-0.1,0-0.1,0-0.2,0H0.3c-0.1,0-0.1,0-0.2,0 C0,2.3,0,2.4,0,2.5L0,2.5z"/></g><path d="M15.6,14.2c0-0.3-0.1-0.6-0.3-0.8c-0.2-0.2-0.4-0.4-0.7-0.4l0.9-1v-0.8h-2.9v1.3h0.9v-0.5h0.9l0,0c-0.1,0.1-0.2,0.2-0.3,0.3 s-0.2,0.3-0.4,0.5l-0.3,0.3l0.2,0.5c0.6,0,0.9,0.1,0.9,0.5c0,0.1-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.1-0.4,0.1c-0.3,0-0.7-0.1-0.9-0.3 l-0.5,0.8c0.4,0.4,0.9,0.6,1.5,0.6c0.4,0,0.9-0.1,1.2-0.4C15.5,15.1,15.6,14.7,15.6,14.2z"/><path d="M15.6,8.7h-0.9v0.5h-1.1c0-0.2,0.2-0.4,0.4-0.5c0.2-0.2,0.4-0.3,0.7-0.4c0.3-0.2,0.5-0.3,0.7-0.6c0.2-0.2,0.3-0.5,0.3-0.8 c0-0.4-0.2-0.8-0.5-1c-0.6-0.4-1.4-0.5-2-0.1c-0.3,0.2-0.5,0.4-0.6,0.7L13.3,7c0.1-0.3,0.4-0.5,0.7-0.5c0.1,0,0.3,0,0.3,0.1 c0.1,0.1,0.1,0.2,0.1,0.3c0,0.2-0.1,0.3-0.2,0.4c-0.2,0.1-0.3,0.3-0.5,0.4c-0.2,0.1-0.4,0.3-0.6,0.4c-0.2,0.2-0.4,0.4-0.5,0.6 c-0.1,0.2-0.2,0.5-0.2,0.8c0,0.2,0,0.3,0,0.5h3.2L15.6,8.7L15.6,8.7z"/><path d="M15.6,3.6h-1V0h-0.9l-1.2,1.1l0.6,0.7c0.2-0.1,0.3-0.3,0.4-0.5l0,0v2.2h-0.9v0.9h3L15.6,3.6L15.6,3.6z"/></svg>',link:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 15.7" xml:space="preserve"><g><path d="M7.4,9.9l3.1,3.1c0.3,0.3,0.8,0.5,1.3,0.5c0.5,0,0.9-0.2,1.3-0.5c0,0,0,0,0,0c0.7-0.7,0.7-1.9,0-2.6L9.9,7.3 c0-0.1,0-0.2,0-0.3C9.9,7,10,7,10.1,7l2.2-0.2c0.1,0,0.1,0,0.2,0.1l2.1,2.1c0.4,0.4,0.7,0.8,0.9,1.3c0.2,0.5,0.3,1,0.3,1.5 c0,0.5-0.1,1-0.3,1.5c-0.8,2-3.2,3-5.2,2.2c-0.5-0.2-0.9-0.5-1.3-0.9l-2.1-2.1c-0.1,0-0.1-0.1-0.1-0.2L7,10.1C7,10,7,9.9,7.1,9.9 C7.2,9.8,7.3,9.9,7.4,9.9z M1.2,1.1C1.6,0.7,2,0.4,2.5,0.3c1-0.4,2.1-0.4,3.1,0C6,0.4,6.5,0.7,6.8,1.1L9,3.2C9,3.3,9.1,3.3,9,3.4 L8.8,5.6c0,0.1-0.1,0.2-0.2,0.2c-0.1,0.1-0.2,0.1-0.3,0L5.3,2.7C5,2.3,4.5,2.1,4,2.1c-0.5,0-0.9,0.2-1.3,0.5c0,0,0,0,0,0 C2,3.4,2,4.5,2.7,5.2l3.1,3.2c0.1,0.1,0.1,0.2,0,0.3c0,0.1-0.1,0.1-0.2,0.1L3.5,9C3.4,9,3.4,9,3.3,8.9L1.2,6.8c0,0,0,0,0,0 C-0.4,5.2-0.4,2.7,1.2,1.1L1.2,1.1z M14.3,6h-2.6c0,0,0,0,0,0c-0.1,0-0.2-0.1-0.2-0.2c0-0.1,0-0.2,0.1-0.3l2.5-0.7 c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0.1,0.1,0.2l0.1,0.8c0,0.1,0,0.1-0.1,0.2C14.5,6,14.4,6,14.3,6L14.3,6z M10.2,4.1 c0,0.1-0.1,0.2-0.2,0.2l0,0c0,0,0,0,0,0C9.8,4.2,9.7,4.1,9.8,4L9.7,1.4c0-0.1,0-0.1,0.1-0.2c0.1,0,0.1,0,0.2,0h0.8 c0.1,0,0.1,0,0.2,0.1c0,0.1,0,0.1,0,0.2L10.2,4.1L10.2,4.1z M1.5,9.7h1.3h1.3c0.1,0,0.2,0.1,0.2,0.2c0,0.1,0,0.2-0.1,0.3l-2.5,0.6 H1.6c0,0-0.1,0-0.1,0c-0.1,0-0.1-0.1-0.1-0.2L1.2,9.9c0-0.1,0-0.1,0.1-0.2c0-0.1,0.1-0.1,0.2-0.1L1.5,9.7z M5.6,11.6 C5.6,11.6,5.6,11.6,5.6,11.6c0-0.1,0.1-0.2,0.3-0.1c0,0,0,0,0,0c0.1,0,0.2,0.1,0.2,0.2v2.6c0,0.1,0,0.1-0.1,0.2 c0,0-0.1,0.1-0.2,0.1L5,14.5c-0.1,0-0.1,0-0.2-0.1c0-0.1,0-0.1,0-0.2L5.6,11.6L5.6,11.6z"/></g></svg>',unlink:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 15.7" xml:space="preserve"><g><path d="M14.6,14.6c1.6-1.6,1.6-4.1,0-5.7l0,0l-3.1-3.1l-1.2,1.6l2.9,2.9c0.4,0.4,0.6,0.9,0.6,1.5c0,1.1-0.9,2.1-2.1,2.1l0,0 c-0.6,0-1.1-0.2-1.5-0.6l-0.4-0.4l-1.7,1l0.8,0.8C10.4,16.2,13,16.2,14.6,14.6L14.6,14.6L14.6,14.6z M3.6,6C3,5.9,2.6,5.5,2.3,5 S1.9,4,2.1,3.4C2.3,2.9,2.6,2.5,3,2.2C3.5,2,4.1,1.9,4.6,2l3.3,1.4l0.5-2L5.1,0.1C4-0.1,2.9,0,2,0.5C1.1,1.1,0.4,1.9,0.2,3 C-0.1,4,0,5.1,0.6,6C1.1,6.9,1.9,7.6,3,7.8l5.4,2l0.5-2L6.2,6.9L3.6,6z"/></g></svg>'},redo:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.59 14.18"><g><path d="M11.58,18.48a6.84,6.84,0,1,1,6.85-6.85s0,.26,0,.67a8,8,0,0,1-.22,1.44l.91-.55a.51.51,0,0,1,.36,0,.45.45,0,0,1,.29.22.47.47,0,0,1,.06.36.45.45,0,0,1-.22.29L17.42,15.3l-.12,0h-.25l-.12-.06-.09-.09-.06-.07,0-.06-.87-2.12a.43.43,0,0,1,0-.37.49.49,0,0,1,.27-.26.41.41,0,0,1,.36,0,.53.53,0,0,1,.27.26l.44,1.09a6.51,6.51,0,0,0,.24-1.36,4.58,4.58,0,0,0,0-.64,5.83,5.83,0,0,0-1.73-4.17,5.88,5.88,0,0,0-8.34,0,5.9,5.9,0,0,0,4.17,10.06.51.51,0,0,1,.33.15.48.48,0,0,1,0,.68.53.53,0,0,1-.33.12Z" transform="translate(-4.48 -4.54)"/></g></svg>',undo:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.59 14.18"><g><path d="M5,14a.43.43,0,0,1-.22-.29.46.46,0,0,1,.06-.36.43.43,0,0,1,.29-.22.56.56,0,0,1,.36,0l.91.55a8.27,8.27,0,0,1-.22-1.45,5.07,5.07,0,0,1,0-.67A6.85,6.85,0,1,1,13,18.47a.44.44,0,0,1-.33-.13.48.48,0,0,1,0-.68.51.51,0,0,1,.33-.15A5.89,5.89,0,0,0,17.15,7.45a5.88,5.88,0,0,0-8.33,0,5.84,5.84,0,0,0-1.73,4.17s0,.25,0,.65a6.49,6.49,0,0,0,.24,1.37l.44-1.09a.57.57,0,0,1,.27-.26.41.41,0,0,1,.36,0,.53.53,0,0,1,.27.26.43.43,0,0,1,0,.37L7.82,15l0,.09-.09.09-.1.07-.06,0H7.28l-.13,0-1.09-.63c-.65-.36-1-.57-1.1-.63Z" transform="translate(-4.49 -4.53)"/></g></svg>',bold:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11.76 15.75"><g><path d="M6.4,3.76V19.5h6.76a5.55,5.55,0,0,0,2-.32,4.93,4.93,0,0,0,1.52-1,4.27,4.27,0,0,0,1.48-3.34,3.87,3.87,0,0,0-.69-2.37,5.74,5.74,0,0,0-.71-.83,3.44,3.44,0,0,0-1.1-.65,3.6,3.6,0,0,0,1.58-1.36,3.66,3.66,0,0,0,.53-1.93,3.7,3.7,0,0,0-1.21-2.87,4.65,4.65,0,0,0-3.25-1.1H6.4Zm2.46,6.65V5.57h3.52a4.91,4.91,0,0,1,1.36.15,2.3,2.3,0,0,1,.85.45,2.06,2.06,0,0,1,.74,1.71,2.3,2.3,0,0,1-.78,1.92,2.54,2.54,0,0,1-.86.46,4.7,4.7,0,0,1-1.32.15H8.86Zm0,7.27V12.15H12.7a4.56,4.56,0,0,1,1.38.17,3.43,3.43,0,0,1,.95.49,2.29,2.29,0,0,1,.92,2,2.73,2.73,0,0,1-.83,2.1,2.66,2.66,0,0,1-.83.58,3.25,3.25,0,0,1-1.26.2H8.86Z" transform="translate(-6.4 -3.75)"/></g></svg>',underline:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 9.78 15.74"><g><path d="M14.64,3.76h2.52v7.72a4.51,4.51,0,0,1-.59,2.31,3.76,3.76,0,0,1-1.71,1.53,6.12,6.12,0,0,1-2.64.53,5,5,0,0,1-3.57-1.18,4.17,4.17,0,0,1-1.27-3.24V3.76H9.9v7.3a3,3,0,0,0,.55,2,2.3,2.3,0,0,0,1.83.65,2.26,2.26,0,0,0,1.8-.65,3.09,3.09,0,0,0,.55-2V3.76Zm2.52,13.31V19.5H7.39V17.08h9.77Z" transform="translate(-7.38 -3.76)"/></g></svg>',italic:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10.49 15.76"><g><path d="M17.16,3.79l.37,0-.06.38-.14.52A10,10,0,0,1,16.21,5a9.37,9.37,0,0,0-1,.32,6.68,6.68,0,0,0-.25.89c-.06.31-.11.59-.14.85-.3,1.36-.52,2.41-.68,3.14l-.61,3.18L13.1,15l-.43,2.4-.12.46a.62.62,0,0,0,0,.28c.44.1.85.17,1.23.22l.68.11a4.51,4.51,0,0,1-.08.6l-.09.42a.92.92,0,0,0-.23,0l-.43,0a1.37,1.37,0,0,1-.29,0c-.13,0-.63-.08-1.49-.16l-2,0c-.28,0-.87,0-1.78.12L7,19.5l.17-.88.8-.2A6.61,6.61,0,0,0,9.19,18,2.62,2.62,0,0,0,9.61,17l.28-1.41.58-2.75.12-.66c.05-.3.11-.58.17-.86s.12-.51.17-.69l.12-.48.12-.43.31-1.6.15-.65.31-1.91V5.14a3.86,3.86,0,0,0-1.48-.29l-.38,0,.2-1.06,3.24.14.75,0c.45,0,1.18,0,2.18-.09.23,0,.46,0,.71,0Z" transform="translate(-7.04 -3.76)"/></g></svg>',strike:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 14.9"><g><path d="M12.94,13a4.27,4.27,0,0,1,1.32.58,1.46,1.46,0,0,1,.55,1.2,1.87,1.87,0,0,1-.88,1.64,4.17,4.17,0,0,1-2.35.59,4.44,4.44,0,0,1-2.74-.71,2.72,2.72,0,0,1-1-2.17H5.57a4.56,4.56,0,0,0,1.55,3.7,7,7,0,0,0,4.47,1.23,6,6,0,0,0,4.07-1.3,4.24,4.24,0,0,0,1.52-3.37,4,4,0,0,0-.26-1.4h-4ZM6.37,10.24A3.27,3.27,0,0,1,6,8.68a4,4,0,0,1,1.48-3.3,5.92,5.92,0,0,1,3.88-1.21,5.58,5.58,0,0,1,3.91,1.24,4.36,4.36,0,0,1,1.45,3.17H14.44a2.12,2.12,0,0,0-.91-1.81,4.45,4.45,0,0,0-2.44-.55,3.69,3.69,0,0,0-2,.51A1.64,1.64,0,0,0,8.3,8.22a1.3,1.3,0,0,0,.48,1.11,7,7,0,0,0,2.1.78l.28.06.28.08H6.37Zm13.09.68a.73.73,0,0,1,.49.21.66.66,0,0,1,.2.48.64.64,0,0,1-.2.48.71.71,0,0,1-.49.19H5.1a.67.67,0,0,1-.49-.19.66.66,0,0,1-.2-.48.64.64,0,0,1,.2-.48.73.73,0,0,1,.49-.21H19.46Z" transform="translate(-4.41 -4.17)"/></g></svg>',subscript:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 14.61"><g><path d="M15.38,4.33H12.74L11.19,7c-.28.46-.51.87-.69,1.21L10.07,9h0l-.44-.8c-.22-.4-.45-.81-.71-1.23L7.34,4.33H4.68L8.26,10,4.4,16.08H7.1l1.69-2.83c.38-.63.72-1.22,1-1.78l.25-.46h0l.49.92c.24.45.48.89.74,1.32L13,16.08h2.61L11.84,10l1.77-2.84,1.77-2.85Zm4.77,13.75H17v-.15c0-.4.05-.64.16-.72a4.42,4.42,0,0,1,1.16-.31,3.3,3.3,0,0,0,1.54-.56A1.84,1.84,0,0,0,20.15,15a1.78,1.78,0,0,0-.44-1.41A2.8,2.8,0,0,0,18,13.25a2.71,2.71,0,0,0-1.69.37,1.83,1.83,0,0,0-.44,1.43v.23H17v-.23q0-.63.18-.78a1.62,1.62,0,0,1,.88-.15,1.59,1.59,0,0,1,.88.15q.18.15.18.75t-.18.75a3.58,3.58,0,0,1-1.18.33,3.33,3.33,0,0,0-1.52.51,1.57,1.57,0,0,0-.32,1.18v1.15h4.27v-.86Z" transform="translate(-4.4 -4.33)"/></g></svg>',superscript:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 15.42"><g><path d="M12,13.14l3.61-5.81H12.94L11.33,10c-.28.46-.51.88-.69,1.25l-.45.83h0l-.45-.85c-.22-.41-.45-.82-.71-1.24L7.4,7.33H4.68l3.66,5.81L4.4,19.33H7.14l1.74-2.87q.58-1,1-1.83l.25-.48h0l.51.94.75,1.37,1.72,2.87h2.67l-1.92-3.09c-1.12-1.8-1.76-2.83-1.92-3.1Zm4.84-4.41h0l0,.15h3.27v.86H15.77V8.58a1.66,1.66,0,0,1,.33-1.22,3.51,3.51,0,0,1,1.56-.51,3.68,3.68,0,0,0,1.21-.34c.13-.1.19-.36.19-.77S19,5.07,18.87,5A1.63,1.63,0,0,0,18,4.8a1.58,1.58,0,0,0-.91.17c-.13.11-.19.38-.19.8V6H15.78V5.76a1.87,1.87,0,0,1,.45-1.47A2.84,2.84,0,0,1,18,3.91a2.8,2.8,0,0,1,1.72.38,1.84,1.84,0,0,1,.45,1.44,1.91,1.91,0,0,1-.34,1.35,3.24,3.24,0,0,1-1.58.57A3.69,3.69,0,0,0,17,8c-.12.1-.17.35-.17.76Z" transform="translate(-4.4 -3.91)"/></g></svg>',erase:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.76"><g><path d="M13.69,17.2h6.46v1.31H8.56L4.41,14.37,14,4.75l6.06,6.06L16.89,14l-3.2,3.19Zm-4.61,0h2.77L14.09,15,9.88,10.75,6.25,14.38l1.41,1.41c.84.82,1.31,1.29,1.42,1.41Z" transform="translate(-4.41 -4.75)"/></g></svg>',indent:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 12.36"><g><path d="M4.68,14.45a.27.27,0,0,1-.19-.08.3.3,0,0,1-.08-.21V9.1a.27.27,0,0,1,.08-.19.28.28,0,0,1,.2-.08.25.25,0,0,1,.19.07l2.54,2.54a.29.29,0,0,1,0,.4L4.88,14.36a.24.24,0,0,1-.2.09Zm15.19,1.12a.27.27,0,0,1,.19.08.25.25,0,0,1,.08.19v1.69a.27.27,0,0,1-.08.19.25.25,0,0,1-.19.08H4.68a.27.27,0,0,1-.19-.08.25.25,0,0,1-.08-.19V15.84a.27.27,0,0,1,.27-.27H19.87Zm0-3.38a.27.27,0,0,1,.19.08.28.28,0,0,1,.08.21v1.68a.32.32,0,0,1-.08.21.25.25,0,0,1-.19.08H10.31a.27.27,0,0,1-.19-.08.3.3,0,0,1-.08-.21V12.48a.32.32,0,0,1,.08-.21.24.24,0,0,1,.19-.08h9.56Zm0-3.37a.27.27,0,0,1,.19.08.25.25,0,0,1,.08.19v1.69a.27.27,0,0,1-.08.19.25.25,0,0,1-.19.08H10.31a.27.27,0,0,1-.27-.27V9.1a.27.27,0,0,1,.27-.27h9.56Zm.2-3.29a.28.28,0,0,1,.08.2V7.41a.32.32,0,0,1-.08.21.25.25,0,0,1-.19.08H4.68a.27.27,0,0,1-.19-.08.3.3,0,0,1-.08-.21V5.73a.32.32,0,0,1,.08-.21.25.25,0,0,1,.19-.08H19.87a.28.28,0,0,1,.2.09Z" transform="translate(-4.41 -5.44)"/></g></svg>',outdent:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 12.36"><g><path d="M19.87,15.57a.27.27,0,0,1,.19.08.25.25,0,0,1,.08.19v1.69a.27.27,0,0,1-.08.19.25.25,0,0,1-.19.08H4.68a.27.27,0,0,1-.19-.08.25.25,0,0,1-.08-.19V15.84a.27.27,0,0,1,.27-.27H19.87ZM7.5,14.45a.25.25,0,0,1-.2-.09L4.76,11.84a.29.29,0,0,1,0-.4L7.3,8.9a.29.29,0,0,1,.4,0,.31.31,0,0,1,.07.2v5.06a.32.32,0,0,1-.08.21.26.26,0,0,1-.19.08ZM19.87,8.82a.27.27,0,0,1,.19.08.25.25,0,0,1,.08.19v1.69a.27.27,0,0,1-.08.19.25.25,0,0,1-.19.08H10.31a.27.27,0,0,1-.27-.27V9.1a.27.27,0,0,1,.27-.27h9.56Zm0,3.37a.27.27,0,0,1,.19.08.28.28,0,0,1,.08.21v1.68a.32.32,0,0,1-.08.21.25.25,0,0,1-.19.08H10.31a.27.27,0,0,1-.19-.08.3.3,0,0,1-.08-.21V12.48a.32.32,0,0,1,.08-.21.24.24,0,0,1,.19-.08h9.56Zm.2-6.66a.28.28,0,0,1,.08.2V7.41a.32.32,0,0,1-.08.21.25.25,0,0,1-.19.08H4.68a.27.27,0,0,1-.19-.08.3.3,0,0,1-.08-.21V5.73a.32.32,0,0,1,.08-.21.25.25,0,0,1,.19-.08H19.87a.28.28,0,0,1,.2.09Z" transform="translate(-4.41 -5.44)"/></g></svg>',expansion:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M11.8,13.06l-5.1,5.1H9.51V19.5H4.41V14.4H5.75v2.81L8.3,14.66q2.25-2.23,2.55-2.55Zm8.35-9.3v5.1H18.81V6.05l-5.1,5.1-1-1,5.1-5.1H15.05V3.76Z" transform="translate(-4.41 -3.76)"/></g></svg>',reduction:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M14.91,10h2.87v1.38H12.55V6.12h1.38V9l5.24-5.24.48.49.49.48ZM6.77,11.92H12v5.23H10.62V14.26L5.37,19.5l-1-1L9.63,13.3H6.77Z" transform="translate(-4.4 -3.76)"/></g></svg>',code_view:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.73 11.8"><g><path d="M8.09,7.94a.76.76,0,0,1,.53.22.72.72,0,0,1,.21.52.76.76,0,0,1-.22.54L6.18,11.63l2.43,2.44a.69.69,0,0,1,.2.51.66.66,0,0,1-.21.51.75.75,0,0,1-.51.22.63.63,0,0,1-.51-.21h0L4.63,12.15a.7.7,0,0,1-.22-.53.67.67,0,0,1,.25-.55L7.57,8.16a.82.82,0,0,1,.52-.22Zm12.05,3.69a.7.7,0,0,1-.23.52L17,15.1h0a.66.66,0,0,1-.51.21.73.73,0,0,1-.51-.22.75.75,0,0,1-.22-.51.63.63,0,0,1,.21-.51l2.43-2.44L15.92,9.22a.73.73,0,0,1-.22-.53A.74.74,0,0,1,17,8.18h0l2.91,2.91a.67.67,0,0,1,.27.54Zm-5.9-5.9a.73.73,0,0,1,.61.32.71.71,0,0,1,.07.68L11,17a1,1,0,0,1-.22.32.6.6,0,0,1-.35.16.75.75,0,0,1-.69-.26.69.69,0,0,1-.12-.72L13.56,6.23a.75.75,0,0,1,.26-.35.74.74,0,0,1,.42-.15Z" transform="translate(-4.41 -5.73)"/></g></svg>',preview:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.65 15.66"><g><path d="M16.19,14.43l2.49,2.49a.73.73,0,0,1,.21.52.67.67,0,0,1-.22.51.7.7,0,0,1-.52.22.69.69,0,0,1-.51-.21l-2.49-2.48a5.17,5.17,0,0,1-1.34.69,4.64,4.64,0,0,1-1.48.24,4.78,4.78,0,1,1,0-9.56,4.79,4.79,0,0,1,1.84.36,4.9,4.9,0,0,1,1.56,1,4.77,4.77,0,0,1,.46,6.18ZM10,14a3.3,3.3,0,0,0,2.34.93A3.37,3.37,0,0,0,14.7,14a3.3,3.3,0,0,0-1.08-5.41,3.47,3.47,0,0,0-2.56,0A3,3,0,0,0,10,9.28,3.31,3.31,0,0,0,10,14ZM16,4a3.86,3.86,0,0,1,2.77,1.14A3.9,3.9,0,0,1,20,7.85v4a.77.77,0,0,1-.22.53.7.7,0,0,1-.52.21.72.72,0,0,1-.74-.74v-4a2.46,2.46,0,0,0-.72-1.73A2.37,2.37,0,0,0,16,5.45H8.53A2.42,2.42,0,0,0,6.08,7.89v7.52a2.41,2.41,0,0,0,.71,1.73,2.46,2.46,0,0,0,1.74.72h4.08a.73.73,0,0,1,0,1.46H8.53a3.85,3.85,0,0,1-2.78-1.14A3.93,3.93,0,0,1,4.6,15.4V7.87A3.94,3.94,0,0,1,5.76,5.09,3.88,3.88,0,0,1,8.54,4H16Z" transform="translate(-4.45 -3.8)"/></g></svg>',print:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16.05 16.04"><g><path d="M19.76,15.84a1.29,1.29,0,0,0,.39-.92V8.35A2.05,2.05,0,0,0,19.57,7a1.93,1.93,0,0,0-1.38-.57H6.37a1.95,1.95,0,0,0-2,2v6.56a1.23,1.23,0,0,0,.38.92,1.35,1.35,0,0,0,.93.38h2V14.9l-2,0V8.35a.67.67,0,0,1,.18-.47.62.62,0,0,1,.48-.19H18.18a.6.6,0,0,1,.46.19.66.66,0,0,1,.18.47V14.9h-2v1.32h2A1.35,1.35,0,0,0,19.76,15.84ZM17.52,7.69V5.06a1.31,1.31,0,0,0-.38-.92,1.34,1.34,0,0,0-.94-.38H8.34A1.3,1.3,0,0,0,7,5.06V7.69H8.34V5.06h7.87V7.69h1.31ZM8.34,12.93h7.87l0,5.26H8.34V12.93Zm7.87,5.26v0Zm.65,1.31a.6.6,0,0,0,.46-.19.72.72,0,0,0,.2-.47V12.29a.74.74,0,0,0-.2-.47.6.6,0,0,0-.46-.19H7.68a.6.6,0,0,0-.46.19.72.72,0,0,0-.2.47v6.55a.74.74,0,0,0,.2.47.6.6,0,0,0,.46.19h9.18ZM16.67,9.28a.7.7,0,0,0-.94,0,.63.63,0,0,0-.18.46.67.67,0,0,0,.18.47.68.68,0,0,0,.94,0,.66.66,0,0,0,.18-.47A.58.58,0,0,0,16.67,9.28Z" transform="translate(-4.25 -3.61)"/></g></svg>',template:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14.27 15.64"><g><path d="M18.18,19.16a1,1,0,0,0,1-1V5.73a1,1,0,0,0-1-1h-2v1h2V18.19H6.37V5.73h2v-1h-2A.94.94,0,0,0,5.68,5a1,1,0,0,0-.29.7V18.18a.94.94,0,0,0,.29.69,1,1,0,0,0,.69.29H18.18ZM9.82,10.31h4.92a.49.49,0,0,0,.35-.15.47.47,0,0,0,.15-.35.49.49,0,0,0-.15-.35.47.47,0,0,0-.35-.15H9.82a.49.49,0,0,0-.35.15.47.47,0,0,0-.15.35.49.49,0,0,0,.15.35.47.47,0,0,0,.35.15Zm5.9,4.92H8.83a.49.49,0,0,0-.35.15.47.47,0,0,0-.15.35.49.49,0,0,0,.15.35.47.47,0,0,0,.35.15h6.89a.49.49,0,0,0,.35-.15.47.47,0,0,0,.15-.35.51.51,0,0,0-.5-.5ZM7.36,12.77a.49.49,0,0,0,.15.35.47.47,0,0,0,.35.15h8.85a.49.49,0,0,0,.35-.15.47.47,0,0,0,.15-.35.49.49,0,0,0-.15-.35.47.47,0,0,0-.35-.15H7.85a.49.49,0,0,0-.35.15.52.52,0,0,0-.14.35Z" transform="translate(-5.14 -3.77)"/><path d="M14.24,6.71a1,1,0,0,0,1-1,1,1,0,0,0-1-1,1,1,0,0,0-1-1h-2a.94.94,0,0,0-.69.28,1,1,0,0,0-.29.7A.94.94,0,0,0,9.62,5a.91.91,0,0,0-.29.69,1,1,0,0,0,.29.7,1,1,0,0,0,.69.29h3.93Z" transform="translate(-5.14 -3.77)"/></g></svg>',line_height:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.76 13.56"><g><path d="M4.4,4.88V8.26a2,2,0,0,0,.5.39s.1,0,.18-.12a.62.62,0,0,0,.17-.28c.06-.19.13-.44.21-.74s.14-.52.19-.66a.58.58,0,0,1,.21-.3,2.41,2.41,0,0,1,.63-.21,3.83,3.83,0,0,1,.88-.12,9.15,9.15,0,0,1,1.31.06.16.16,0,0,1,.11,0,.26.26,0,0,1,.06.14,4,4,0,0,1,0,.49v2l.05,3.77c0,1.41,0,2.68-.05,3.81a1.79,1.79,0,0,1-.11.49,10.68,10.68,0,0,1-1.4.45,1.12,1.12,0,0,0-.69.43v.31l0,.22.61,0c.85-.08,1.54-.12,2.06-.12a19.76,19.76,0,0,1,2.09.08,15.08,15.08,0,0,0,1.64.08,1.4,1.4,0,0,0,.29,0,1.58,1.58,0,0,0,0-.26l-.05-.43a2.26,2.26,0,0,0-.43-.17l-.77-.22-.15,0a2.55,2.55,0,0,1-.78-.28,2.56,2.56,0,0,1-.11-.75l0-1.29,0-3.15V7.53a10.51,10.51,0,0,1,.06-1.2,3.83,3.83,0,0,1,.6,0l1.88,0a2.18,2.18,0,0,1,.38,0,.45.45,0,0,1,.23.17.9.9,0,0,1,.05.25c0,.16.06.35.1.58a3.33,3.33,0,0,0,.14.55A6.39,6.39,0,0,0,15,9a2.91,2.91,0,0,0,.6-.15,2.77,2.77,0,0,0,0-.46l0-.51,0-2.95-.25,0-.38,0L15,4.94a.71.71,0,0,1-.18.15.45.45,0,0,1-.25.07l-.29,0H8.75l-.15,0H7.45a17,17,0,0,1-1.86,0L5.36,5l-.25-.13ZM19.75,16.14h-.69v-9h.69A.4.4,0,0,0,20.13,7c.06-.11,0-.24-.1-.39L18.92,5.15a.52.52,0,0,0-.86,0L17,6.58c-.12.15-.16.28-.1.39s.18.16.38.16h.69v9h-.69a.4.4,0,0,0-.38.16c-.06.11,0,.24.1.39l1.11,1.43a.52.52,0,0,0,.86,0L20,16.69c.12-.15.16-.28.1-.39a.4.4,0,0,0-.38-.16Z" transform="translate(-4.4 -4.86)"/></g></svg>',paragraph_style:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11.81 15.74"><g><path d="M18.18,3.76v2h-2V19.5h-2V5.73h-2V19.5h-2V11.63a3.94,3.94,0,0,1,0-7.87h7.87Z" transform="translate(-6.37 -3.76)"/></g></svg>',text_style:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13.76 15.74"><g><path d="M17.68,6.71a2.22,2.22,0,0,0,1.06-.22.74.74,0,0,0,.42-.7.73.73,0,0,0-.08-.33.67.67,0,0,0-.17-.22,1,1,0,0,0-.31-.15L18.26,5l-.45-.09A15.27,15.27,0,0,0,13.26,5V4.74c0-.66-.63-1-1.92-1-.24,0-.43.15-.59.46a4,4,0,0,0-.36,1.14h0v0a26.45,26.45,0,0,1-3.5.35A2,2,0,0,0,5.77,6a.84.84,0,0,0-.37.79,2.14,2.14,0,0,0,.41,1.29,1.23,1.23,0,0,0,1.05.63,16.62,16.62,0,0,0,3.29-.45l-.34,3.35c-.16,1.61-.29,2.9-.37,3.86s-.12,1.66-.12,2.09l0,.65a5.15,5.15,0,0,0,.05.6,1.28,1.28,0,0,0,.16.54.34.34,0,0,0,.28.18,1.16,1.16,0,0,0,.79-.46,3.66,3.66,0,0,0,.68-1,22.08,22.08,0,0,0,1-4.33q.49-3.1.78-6.15a24.69,24.69,0,0,1,4.62-.84Z" transform="translate(-5.4 -3.76)"/></g></svg>',save:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M18.53,19.5l.2-.05A1.78,1.78,0,0,0,20.13,18l0-.09V7.14a2,2,0,0,0-.28-.64A3.18,3.18,0,0,0,19.43,6c-.5-.52-1-1-1.55-1.54A2.59,2.59,0,0,0,17.37,4a1.83,1.83,0,0,0-.61-.25H6l-.21,0a1.78,1.78,0,0,0-1.4,1.49l0,.1V17.87a2.49,2.49,0,0,0,.09.37,1.79,1.79,0,0,0,1.44,1.23l.09,0Zm-6.25-.6H6.92a.61.61,0,0,1-.68-.48.78.78,0,0,1,0-.22V12.3a.62.62,0,0,1,.69-.68H17.64a.62.62,0,0,1,.69.69V18.2a.64.64,0,0,1-.71.69H12.28ZM12,9.81H8.15a.63.63,0,0,1-.72-.71v-4a.64.64,0,0,1,.72-.72h7.66a.64.64,0,0,1,.72.72v4a.65.65,0,0,1-.74.72ZM13.5,5V9.18h1.78V5Z" transform="translate(-4.41 -3.76)"/></g></svg>',blockquote:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 475.082 475.081"><g><path d="M164.45,219.27h-63.954c-7.614,0-14.087-2.664-19.417-7.994c-5.327-5.33-7.994-11.801-7.994-19.417v-9.132c0-20.177,7.139-37.401,21.416-51.678c14.276-14.272,31.503-21.411,51.678-21.411h18.271c4.948,0,9.229-1.809,12.847-5.424c3.616-3.617,5.424-7.898,5.424-12.847V54.819c0-4.948-1.809-9.233-5.424-12.85c-3.617-3.612-7.898-5.424-12.847-5.424h-18.271c-19.797,0-38.684,3.858-56.673,11.563c-17.987,7.71-33.545,18.132-46.68,31.267c-13.134,13.129-23.553,28.688-31.262,46.677C3.855,144.039,0,162.931,0,182.726v200.991c0,15.235,5.327,28.171,15.986,38.834c10.66,10.657,23.606,15.985,38.832,15.985h109.639c15.225,0,28.167-5.328,38.828-15.985c10.657-10.663,15.987-23.599,15.987-38.834V274.088c0-15.232-5.33-28.168-15.994-38.832C192.622,224.6,179.675,219.27,164.45,219.27z"/><path d="M459.103,235.256c-10.656-10.656-23.599-15.986-38.828-15.986h-63.953c-7.61,0-14.089-2.664-19.41-7.994c-5.332-5.33-7.994-11.801-7.994-19.417v-9.132c0-20.177,7.139-37.401,21.409-51.678c14.271-14.272,31.497-21.411,51.682-21.411h18.267c4.949,0,9.233-1.809,12.848-5.424c3.613-3.617,5.428-7.898,5.428-12.847V54.819c0-4.948-1.814-9.233-5.428-12.85c-3.614-3.612-7.898-5.424-12.848-5.424h-18.267c-19.808,0-38.691,3.858-56.685,11.563c-17.984,7.71-33.537,18.132-46.672,31.267c-13.135,13.129-23.559,28.688-31.265,46.677c-7.707,17.987-11.567,36.879-11.567,56.674v200.991c0,15.235,5.332,28.171,15.988,38.834c10.657,10.657,23.6,15.985,38.828,15.985h109.633c15.229,0,28.171-5.328,38.827-15.985c10.664-10.663,15.985-23.599,15.985-38.834V274.088C475.082,258.855,469.76,245.92,459.103,235.256z"/></g></svg>',arrow_down:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.73 8.67"><g><path d="M18.79,7.52a.8.8,0,0,1,.56-.23.82.82,0,0,1,.79.79.8.8,0,0,1-.23.56l-7.07,7.07a.79.79,0,0,1-.57.25.77.77,0,0,1-.57-.25h0L4.64,8.65a.8.8,0,0,1-.23-.57.82.82,0,0,1,.79-.79.8.8,0,0,1,.56.23L12.28,14l3.26-3.26,3.25-3.26Z" transform="translate(-4.41 -7.29)"/></g></svg>',align_justify:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.77"><g><path d="M4.41,4.74v2H20.15v-2H4.41Zm0,5.9H20.15v-2H4.41v2Zm0,3.94H20.15v-2H4.41v2Zm0,3.93h7.87v-2H4.41v2Z" transform="translate(-4.41 -4.74)"/></g></svg>',align_left:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.77"><g><path d="M4.41,4.74v2H20.15v-2H4.41Zm11.8,3.94H4.41v2H16.22v-2Zm-11.8,5.9H18.18v-2H4.41v2Zm0,3.93h9.84v-2H4.41v2Z" transform="translate(-4.41 -4.74)"/></g></svg>',align_right:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.77"><g><path d="M4.41,4.74v2H20.15v-2H4.41Zm3.93,5.9H20.15v-2H8.34v2Zm-2,3.94H20.14v-2H6.37v2Zm3.94,3.93h9.84v-2H10.31v2Z" transform="translate(-4.41 -4.74)"/></g></svg>',align_center:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.77"><g><path d="M4.41,4.74v2H20.15v-2H4.41Zm2,3.94v2H18.18v-2H6.37Zm-1,5.9H19.16v-2H5.39v2Zm2,3.93H17.2v-2H7.36v2Z" transform="translate(-4.41 -4.74)"/></g></svg>',font_color:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 14.61"><g><path d="M18.5,15.57,14.28,4.32h-3.4L6.65,15.57h3l.8-2.26h4.23l.8,2.26h3ZM14,11.07H11.14L12.54,7,13.25,9c.41,1.18.64,1.86.7,2ZM4.41,16.69v2.24H20.15V16.69H4.41Z" transform="translate(-4.41 -4.32)"/></g></svg>',highlight_color:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.66 15.74"><g><path d="M12.32,9.31,13.38,13H11.21l.52-1.83q.46-1.61.54-1.83ZM4.44,3.76H20.1V19.5H4.44V3.76ZM14.71,17.32h2.63L13.7,6H10.89L7.26,17.32H9.89l.63-2.24h3.55l.32,1.12c.18.65.29,1,.32,1.12Z" transform="translate(-4.44 -3.76)"/></g></svg>',list_bullets:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 12.37"><g><path d="M7.77,16.12a1.59,1.59,0,0,0-.49-1.18,1.62,1.62,0,0,0-1.19-.49,1.68,1.68,0,1,0,0,3.36,1.67,1.67,0,0,0,1.68-1.69Zm0-4.48A1.67,1.67,0,0,0,6.09,10,1.68,1.68,0,0,0,4.9,12.82a1.62,1.62,0,0,0,1.19.49,1.67,1.67,0,0,0,1.68-1.67Zm12.38,3.64a.27.27,0,0,0-.08-.19.28.28,0,0,0-.2-.09H9.19a.28.28,0,0,0-.2.08.29.29,0,0,0-.08.19V17a.27.27,0,0,0,.28.28H19.87a.27.27,0,0,0,.19-.08.24.24,0,0,0,.08-.2V15.28ZM7.77,7.13a1.63,1.63,0,0,0-.49-1.2,1.61,1.61,0,0,0-1.19-.49,1.61,1.61,0,0,0-1.19.49,1.71,1.71,0,0,0,0,2.4,1.62,1.62,0,0,0,1.19.49,1.61,1.61,0,0,0,1.19-.49,1.63,1.63,0,0,0,.49-1.2Zm12.38,3.66a.28.28,0,0,0-.08-.2.29.29,0,0,0-.19-.08H9.19a.27.27,0,0,0-.28.28v1.69a.27.27,0,0,0,.08.19.24.24,0,0,0,.2.08H19.87a.27.27,0,0,0,.19-.08.25.25,0,0,0,.08-.19V10.79Zm0-4.5a.27.27,0,0,0-.08-.19A.25.25,0,0,0,19.88,6H9.19A.28.28,0,0,0,9,6.1a.26.26,0,0,0-.08.19V8A.27.27,0,0,0,9,8.17a.24.24,0,0,0,.2.08H19.87a.27.27,0,0,0,.19-.08A.25.25,0,0,0,20.14,8V6.29Z" transform="translate(-4.41 -5.44)"/></g></svg>',list_number:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.69 15.74"><g><path d="M7.66,18a1.24,1.24,0,0,0-.26-.78,1.17,1.17,0,0,0-.72-.42l.85-1V15H4.58v1.34h.94v-.46l.85,0h0c-.11.11-.22.23-.32.35s-.23.27-.37.47L5.39,17l.23.51c.61-.05.92.11.92.49a.42.42,0,0,1-.18.37.79.79,0,0,1-.45.12A1.41,1.41,0,0,1,5,18.15l-.51.77A2.06,2.06,0,0,0,6,19.5a1.8,1.8,0,0,0,1.2-.41A1.38,1.38,0,0,0,7.66,18Zm0-5.54H6.75V13H5.63A.72.72,0,0,1,6,12.51a5.45,5.45,0,0,1,.66-.45,2.71,2.71,0,0,0,.67-.57,1.19,1.19,0,0,0,.31-.81,1.29,1.29,0,0,0-.45-1,1.86,1.86,0,0,0-2-.11,1.51,1.51,0,0,0-.62.7l.74.52A.87.87,0,0,1,6,10.28a.51.51,0,0,1,.35.12.42.42,0,0,1,.13.33.55.55,0,0,1-.21.4,3,3,0,0,1-.5.38c-.19.13-.39.27-.58.42a2,2,0,0,0-.5.6,1.63,1.63,0,0,0-.21.81,3.89,3.89,0,0,0,.05.48h3.2V12.44Zm12.45,2.82a.27.27,0,0,0-.08-.19.28.28,0,0,0-.21-.08H9.1a.32.32,0,0,0-.21.08.24.24,0,0,0-.08.2V17a.27.27,0,0,0,.08.19.3.3,0,0,0,.21.08H19.83a.32.32,0,0,0,.21-.08.25.25,0,0,0,.08-.19V15.26ZM7.69,7.32h-1V3.76H5.8L4.6,4.88l.63.68a1.85,1.85,0,0,0,.43-.48h0l0,2.24H4.74V8.2h3V7.32Zm12.43,3.42a.27.27,0,0,0-.08-.19.28.28,0,0,0-.21-.08H9.1a.32.32,0,0,0-.21.08.24.24,0,0,0-.08.2v1.71a.27.27,0,0,0,.08.19.3.3,0,0,0,.21.08H19.83a.32.32,0,0,0,.21-.08.25.25,0,0,0,.08-.19V10.74Zm0-4.52A.27.27,0,0,0,20,6,.28.28,0,0,0,19.83,6H9.1A.32.32,0,0,0,8.89,6a.24.24,0,0,0-.08.19V7.93a.27.27,0,0,0,.08.19.32.32,0,0,0,.21.08H19.83A.32.32,0,0,0,20,8.12a.26.26,0,0,0,.08-.2V6.22Z" transform="translate(-4.43 -3.76)"/></g></svg>',table:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M4.41,8.05V3.76H8.7V8.05H4.41Zm5.71,0V3.76h4.3V8.05h-4.3Zm5.74-4.29h4.29V8.05H15.86V3.76Zm-11.45,10V9.48H8.7v4.3H4.41Zm5.71,0V9.48h4.3v4.3h-4.3Zm5.74,0V9.48h4.29v4.3H15.86ZM4.41,19.5V15.21H8.7V19.5H4.41Zm5.71,0V15.21h4.3V19.5h-4.3Zm5.74,0V15.21h4.29V19.5H15.86Z" transform="translate(-4.41 -3.76)"/></g></svg>',horizontal_rule:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 2.24"><g><path d="M20.15,12.75V10.51H4.41v2.24H20.15Z" transform="translate(-4.41 -10.51)"/></g></svg>',show_blocks:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.66 15.67"><g><path d="M19.72,5.58a1.64,1.64,0,0,0-1.64-1.64H6.23a1.62,1.62,0,0,0-1.16.48,1.63,1.63,0,0,0-.48,1.16V9.63a1.6,1.6,0,0,0,.48,1.16,1.62,1.62,0,0,0,1.16.47H18.09a1.67,1.67,0,0,0,1.16-.47,1.62,1.62,0,0,0,.48-1.16V5.58Zm-.94,4.05a.68.68,0,0,1-.7.7H6.23a.66.66,0,0,1-.48-.2.74.74,0,0,1-.21-.5V5.58a.66.66,0,0,1,.2-.48.71.71,0,0,1,.48-.21H18.08a.74.74,0,0,1,.5.21.66.66,0,0,1,.2.48ZM6.48,7.72a.21.21,0,0,0,.17-.07.22.22,0,0,0,.07-.17V7.06a1.27,1.27,0,0,1,.11-.52.37.37,0,0,1,.36-.23H8.77A.25.25,0,0,0,9,6.17a.19.19,0,0,0,0-.23.27.27,0,0,0-.2-.12H7.19a.88.88,0,0,0-.72.39,1.51,1.51,0,0,0-.23.85v.42a.24.24,0,0,0,.24.24Zm-.19.81a.21.21,0,0,0,.17-.07.26.26,0,0,0,.07-.17.24.24,0,0,0-.24-.24.2.2,0,0,0-.16.09.2.2,0,0,0-.07.16.22.22,0,0,0,.07.17.23.23,0,0,0,.16.06Zm8.46,5.1a1.63,1.63,0,0,0-.47-1.16A1.61,1.61,0,0,0,13.12,12H6.23a1.6,1.6,0,0,0-1.16.46,1.62,1.62,0,0,0-.48,1.16v4.05a1.64,1.64,0,0,0,1.64,1.64h6.89a1.6,1.6,0,0,0,1.16-.48,1.62,1.62,0,0,0,.47-1.16Zm-.94,4a.7.7,0,0,1-.2.49.65.65,0,0,1-.5.2H6.23a.66.66,0,0,1-.48-.2.75.75,0,0,1-.21-.49v-4a.74.74,0,0,1,.21-.5.66.66,0,0,1,.48-.2h6.89a.68.68,0,0,1,.7.7v4Zm6.15,0v-4a1.6,1.6,0,0,0-.48-1.16A1.67,1.67,0,0,0,18.32,12H17.1a1.63,1.63,0,0,0-1.16.47,1.61,1.61,0,0,0-.47,1.16v4a1.67,1.67,0,0,0,.47,1.16,1.62,1.62,0,0,0,1.16.48h1.22A1.64,1.64,0,0,0,20,17.68Zm-.94-4v4a.75.75,0,0,1-.21.49.62.62,0,0,1-.48.2H17.11a.69.69,0,0,1-.5-.2.7.7,0,0,1-.2-.49v-4a.68.68,0,0,1,.7-.7h1.22a.66.66,0,0,1,.48.2.72.72,0,0,1,.21.5Z" transform="translate(-4.44 -3.79)"/></g></svg>',cancel:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M14.15,11.63l5.61,5.61a1.29,1.29,0,0,1,.38.93,1.27,1.27,0,0,1-.4.93,1.25,1.25,0,0,1-.92.4,1.31,1.31,0,0,1-.94-.4l-5.61-5.61L6.67,19.1a1.31,1.31,0,0,1-.94.4,1.24,1.24,0,0,1-.92-.4,1.27,1.27,0,0,1-.4-.93,1.33,1.33,0,0,1,.38-.93l5.61-5.63L4.79,6a1.26,1.26,0,0,1-.38-.93,1.22,1.22,0,0,1,.4-.92,1.28,1.28,0,0,1,.92-.39,1.38,1.38,0,0,1,.94.38l5.61,5.61,5.61-5.61a1.33,1.33,0,0,1,.94-.38,1.26,1.26,0,0,1,.92.39,1.24,1.24,0,0,1,.4.92,1.29,1.29,0,0,1-.39.93L17,8.81l-2.8,2.82Z" transform="translate(-4.41 -3.76)"/></g></svg>',image:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 15.77"><g><path d="M8.77,8.72a.88.88,0,0,1-.61-.27.82.82,0,0,1-.25-.61.89.89,0,0,1,.25-.62A.82.82,0,0,1,8.77,7a.81.81,0,0,1,.61.25.83.83,0,0,1,.27.62.81.81,0,0,1-.25.61.91.91,0,0,1-.63.27Zm9.62-5a1.74,1.74,0,0,1,1.76,1.76V17.76a1.74,1.74,0,0,1-1.76,1.76H6.16A1.74,1.74,0,0,1,4.4,17.76V5.51A1.74,1.74,0,0,1,6.16,3.75H18.39Zm0,1.75H6.16v8L8.53,11.8a.94.94,0,0,1,.54-.17.86.86,0,0,1,.54.2L11.09,13l3.64-4.55a.78.78,0,0,1,.34-.25.85.85,0,0,1,.42-.07.89.89,0,0,1,.39.12.78.78,0,0,1,.28.29l2.24,3.67V5.51Zm0,12.24V15.6L15.3,10.53,11.89,14.8a.89.89,0,0,1-.59.32.82.82,0,0,1-.64-.18L9,13.62,6.16,15.74v2Z" transform="translate(-4.4 -3.75)"/></g></svg>',video:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 14.55"><g><path d="M20.15,10.26V18.9l-3.94-1.57v1.2H4.41V10.66H16.22v1.23l2-.81,2-.82ZM14.64,17h0V12.54h0v-.31H6V17h8.67Zm3.94-.37v-4l-2.37,1v2l1.18.48,1.19.48ZM7.94,9.86A2.77,2.77,0,0,1,5.19,7.11a2.76,2.76,0,0,1,5.51,0A2.78,2.78,0,0,1,7.94,9.86Zm0-3.93a1.21,1.21,0,0,0-.83.35,1.15,1.15,0,0,0-.34.84A1.09,1.09,0,0,0,7.11,8,1.15,1.15,0,0,0,8,8.28,1.13,1.13,0,0,0,9.11,7.12,1.16,1.16,0,0,0,7.94,5.93Zm5.9,3.93a2.34,2.34,0,0,1-1.67-.68,2.3,2.3,0,0,1-.68-1.67,2.35,2.35,0,0,1,4-1.67,2.37,2.37,0,0,1,0,3.34,2.33,2.33,0,0,1-1.68.68Zm0-3.14a.75.75,0,1,0,.55.22.73.73,0,0,0-.55-.22Z" transform="translate(-4.41 -4.35)"/></g></svg>',link:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.72"><g><path d="M13.05,13.63a.24.24,0,0,1,.15.22L13.42,16a.19.19,0,0,1-.08.18l-2.12,2.14a4.08,4.08,0,0,1-1.29.85A4,4,0,0,1,4.71,17a3.92,3.92,0,0,1-.3-1.52A4,4,0,0,1,4.71,14a3.91,3.91,0,0,1,.87-1.3L7.7,10.56a.25.25,0,0,1,.2-.06l2.17.22a.21.21,0,0,1,.19.15.24.24,0,0,1,0,.25L7.12,14.23a1.81,1.81,0,0,0,0,2.58,1.78,1.78,0,0,0,1.29.52,1.74,1.74,0,0,0,1.28-.52L12.8,13.7a.24.24,0,0,1,.25-.07ZM19,4.92a4,4,0,0,1,0,5.66L16.86,12.7a.25.25,0,0,1-.17.08l-2.2-.23a.21.21,0,0,1-.19-.15.22.22,0,0,1,0-.25L17.44,9a1.81,1.81,0,0,0,0-2.58,1.78,1.78,0,0,0-1.29-.52,1.74,1.74,0,0,0-1.28.52L11.76,9.57a.21.21,0,0,1-.25,0,.24.24,0,0,1-.16-.21l-.22-2.17a.19.19,0,0,1,.08-.18l2.12-2.14a4.08,4.08,0,0,1,1.29-.85,4.05,4.05,0,0,1,3.06,0,3.85,3.85,0,0,1,1.3.85ZM5.84,9.82a.25.25,0,0,1-.18-.08.19.19,0,0,1-.07-.19l.11-.77a.2.2,0,0,1,.11-.17.24.24,0,0,1,.2,0l2.5.72a.25.25,0,0,1,.15.27.22.22,0,0,1-.23.21l-2.59,0Zm4.12-2-.73-2.5a.27.27,0,0,1,0-.2A.21.21,0,0,1,9.41,5L10.19,5a.25.25,0,0,1,.19,0,.23.23,0,0,1,.08.18l-.05,2.61a.2.2,0,0,1-.19.23h0A.22.22,0,0,1,10,7.85Zm8.76,5.58a.25.25,0,0,1,.18.08.23.23,0,0,1,.06.2l-.11.77a.25.25,0,0,1-.11.17.21.21,0,0,1-.12,0l-.08,0L16,14a.25.25,0,0,1-.15-.27.22.22,0,0,1,.22-.21l1.29,0,1.33,0Zm-4.12,2,.74,2.51a.28.28,0,0,1,0,.2.23.23,0,0,1-.18.11l-.8.11a.23.23,0,0,1-.17-.07.25.25,0,0,1-.08-.18l0-2.61a.22.22,0,0,1,.22-.22.21.21,0,0,1,.26.15Z" transform="translate(-4.41 -3.77)"/></g></svg>',math:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11.81 15.73"><g><path d="M17.19,5.73a1,1,0,0,0,.71-.29,1,1,0,0,0,.28-.7,1,1,0,0,0-1-1H7.35a1,1,0,0,0-1,1,.77.77,0,0,0,.13.47h0l4.58,6.43L6.68,17.81a1.25,1.25,0,0,0-.29.71.94.94,0,0,0,.28.7.92.92,0,0,0,.69.28H17.2a1,1,0,0,0,.71-.28,1,1,0,0,0,0-1.39.92.92,0,0,0-.71-.29H9.26l3.87-5.43a.86.86,0,0,0,0-.95L9.26,5.73h7.93Z" transform="translate(-6.38 -3.77)"/></g></svg>',unlink:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.72"><g><path d="M19,18.32a4,4,0,0,0,0-5.68L15.85,9.5l-1.17,1.55L17.57,14a2,2,0,0,1,.61,1.47,2.08,2.08,0,0,1-2.09,2.09,2,2,0,0,1-1.47-.61l-.38-.37-1.74,1,.8.78a4,4,0,0,0,5.68,0ZM8,9.77a2,2,0,0,1-1.27-1,1.89,1.89,0,0,1-.21-1.57A2.1,2.1,0,0,1,7.45,6,2,2,0,0,1,9,5.76L12.27,7.2l.49-2L9.48,3.9a4,4,0,0,0-3.06.41A3.82,3.82,0,0,0,4.56,6.73a3.8,3.8,0,0,0,.4,3A3.78,3.78,0,0,0,7.39,11.6l5.38,2,.49-2-2.64-.94L8,9.77Z" transform="translate(-4.41 -3.76)"/></g></svg>',table_header:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 15.74"><g><path d="M17,19.5v-.78H15.5v.78H17Zm-3,0v-.78H12.5v.78H14Zm-3,0v-.78H9.53v.78H11Zm-3,0v-.78H6.53v.78H8Zm10.55,0a1.73,1.73,0,0,0,.85-.35,1.67,1.67,0,0,0,.56-.76l-.71-.31a1.21,1.21,0,0,1-.35.4,1.34,1.34,0,0,1-.53.23l.08.38c.06.24.09.38.1.41Zm-13.7-.63.55-.55A.77.77,0,0,1,5.25,18a1.31,1.31,0,0,1-.06-.38v-.38H4.41v.38a2,2,0,0,0,.12.68,1.6,1.6,0,0,0,.35.57Zm15.27-2.12V15.26h-.78v1.49h.78Zm-15-1V14.23H4.41v1.49h.78Zm15-2V12.26h-.78v1.49h.78Zm-15-1V11.22H4.41v1.51h.78Zm15-2V9.26h-.78v1.51h.78Zm-15-1V8.17H4.41V9.74h.78Zm15-2V6.28h-.78V7.77h.78Zm-15-1.11V5.33L4.48,5.1a.77.77,0,0,0-.07.27,2.72,2.72,0,0,0,0,.28v1h.79ZM19.21,5l.63-.4A1.62,1.62,0,0,0,19.16,4a1.94,1.94,0,0,0-.91-.22v.78a1.31,1.31,0,0,1,.56.12.88.88,0,0,1,.4.36ZM6,4.54H7.78V3.76H6a.82.82,0,0,0-.28.06l.12.35c.07.21.1.33.11.36Zm10.8,0V3.76H15.28v.78h1.49Zm-3,0V3.76H12.28v.78h1.49Zm-3,0V3.76H9.28v.78h1.51ZM6,10.84h12.6V6.91H6Z" transform="translate(-4.4 -3.76)"/></g></svg>',merge_cell:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.76 15.74"><g><path d="M18.92,13.5h1.23v4.15A1.84,1.84,0,0,1,18.3,19.5H14V18.27H18.3a.6.6,0,0,0,.44-.18.59.59,0,0,0,.18-.44V13.5ZM18.3,3.76a1.84,1.84,0,0,1,1.85,1.85V9.82H18.92V5.6a.6.6,0,0,0-.18-.44A.59.59,0,0,0,18.3,5H14V3.76H18.3Zm1.85,8.51H15.6L17.26,14l-.86.86-3.14-3.17L16.4,8.51l.86.86L15.62,11h4.54v1.24Zm-13.9,6h4.27V19.5H6.25A1.84,1.84,0,0,1,4.4,17.65V13.5H5.63v4.15a.61.61,0,0,0,.62.62Zm0-14.51h4.27V5H6.25a.6.6,0,0,0-.44.18.57.57,0,0,0-.17.43V9.81H4.41V5.6A1.83,1.83,0,0,1,6.25,3.76Zm5,7.9L8.15,14.83,7.3,14,9,12.27H4.41V11H8.94L7.3,9.38,7.73,9l.43-.43Z" transform="translate(-4.4 -3.76)"/></g></svg>',split_cell:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 15.74"><g><path d="M10.37,12.25H6.74L8.4,13.94l-.87.86L4.41,11.63,7.53,8.5l.87.86L6.74,11h3.62v1.23Zm9.78-.61L17,14.81,16.13,14l1.66-1.69H14.16V11h3.63L16.13,9.37l.43-.43A5.24,5.24,0,0,1,17,8.51ZM18.9,8.22V5.61a.57.57,0,0,0-.18-.43A.65.65,0,0,0,18.29,5H12.88V18.28h5.41a.7.7,0,0,0,.44-.18.57.57,0,0,0,.18-.43V15h1.23v2.64a1.84,1.84,0,0,1-1.85,1.83h-12A1.84,1.84,0,0,1,4.94,19a1.81,1.81,0,0,1-.54-1.29V15H5.63v2.64a.57.57,0,0,0,.18.43.67.67,0,0,0,.44.18h5.41V5H6.25a.7.7,0,0,0-.44.18.56.56,0,0,0-.17.43V8.22H4.41V5.61A1.8,1.8,0,0,1,5,4.31a1.91,1.91,0,0,1,1.31-.55h12a1.89,1.89,0,0,1,1.31.55,1.8,1.8,0,0,1,.54,1.3V8.23H18.9Z" transform="translate(-4.4 -3.76)"/></g></svg>',caption:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 13.79"><g><path d="M4.41,18.52H20.15v-2H4.41ZM20,4.73H18.07V6h.65v.65H20V4.73ZM17,6V4.73H14.55V6H17ZM13.49,6V4.73H11V6h2.47ZM10,6V4.73H7.5V6H10ZM5.79,6h.65V4.73H4.5V6.67H5.8V6ZM4.5,11.34H5.79V8.48H4.5ZM6.44,13.8H5.79v-.65H4.5v1.94H6.44ZM17,15.09V13.8H14.55v1.29H17Zm-3.52,0V13.8H11v1.29h2.47Zm-3.53,0V13.8H7.5v1.29H10ZM20,13.16H18.72v.65h-.65V15.1H20Zm-1.29-1.82H20V8.48h-1.3v2.86Z" transform="translate(-4.41 -4.73)"/></g></svg>',edit:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.73"><g><path d="M7.51,5.68h6l1.52-1.57H6.94a2.4,2.4,0,0,0-1.79.82A2.8,2.8,0,0,0,4.41,6.8V17a2.55,2.55,0,0,0,.75,1.8A2.48,2.48,0,0,0,7,19.5H17.22a2.57,2.57,0,0,0,1.83-.74,2.52,2.52,0,0,0,.77-1.8V8.83l-1.58,1.54v6a1.54,1.54,0,0,1-1.53,1.53H7.51A1.54,1.54,0,0,1,6,16.41V7.21A1.52,1.52,0,0,1,7.51,5.68Zm5.63,7.47h0L10.7,10.74l-1,3.38,1.71-.48,1.7-.49Zm.34-.34h0l5.36-5.32L16.4,5.08,11,10.4l1.23,1.21,1.21,1.2ZM19.93,6.4a.82.82,0,0,0,.22-.48A.54.54,0,0,0,20,5.47L18.45,4A.67.67,0,0,0,18,3.77a.7.7,0,0,0-.48.21l-.74.72,2.44,2.43.37-.37.35-.36Z" transform="translate(-4.41 -3.77)"/></g></svg>',delete:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.73 15.74"><g><path d="M19.16,6.71a.94.94,0,0,0,.69-.28.91.91,0,0,0,.29-.68A1,1,0,0,0,19.85,5a.93.93,0,0,0-.69-.3H14.24A.94.94,0,0,0,14,4.06a.92.92,0,0,0-.7-.3h-2a1,1,0,0,0-.7.3.93.93,0,0,0-.28.68H5.39A.92.92,0,0,0,4.7,5a1,1,0,0,0-.29.71.91.91,0,0,0,.29.68,1,1,0,0,0,.69.28H19.16Zm-12.79,1a1,1,0,0,0-.7.3.94.94,0,0,0-.28.69v8.85A1.88,1.88,0,0,0,6,18.93a1.9,1.9,0,0,0,1.39.57H17.2a1.87,1.87,0,0,0,1.39-.58,1.91,1.91,0,0,0,.58-1.39V8.68A1,1,0,0,0,18.88,8a.89.89,0,0,0-.7-.29,1,1,0,0,0-.69.29.92.92,0,0,0-.29.68v7.87a1,1,0,0,1-1,1H8.34a.94.94,0,0,1-.69-.28,1,1,0,0,1-.29-.71V8.68a1,1,0,0,0-1-1Z" transform="translate(-4.41 -3.76)"/></g></svg>',modify:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.7 15.74"><g><path d="M19.79,15.23a.66.66,0,0,1,.3.38.59.59,0,0,1-.07.48l-.8,1.38a.66.66,0,0,1-.38.3.59.59,0,0,1-.48-.07l-.68-.38a4.55,4.55,0,0,1-1.34.77v.78a.64.64,0,0,1-.18.45.61.61,0,0,1-.45.18h-1.6a.6.6,0,0,1-.44-.18.66.66,0,0,1-.19-.45v-.78a4.36,4.36,0,0,1-1.32-.77l-.69.38a.58.58,0,0,1-.48.07.66.66,0,0,1-.38-.3l-.38-.66h.83a1.77,1.77,0,0,0,1.23-.52,1.72,1.72,0,0,0,.51-1.23v-.18a3,3,0,0,0,.49-.28l.15.09a1.83,1.83,0,0,0,.88.23A1.75,1.75,0,0,0,15.84,14l.88-1.52a1.7,1.7,0,0,0,.17-1.32,1.66,1.66,0,0,0-.3-.61,1.84,1.84,0,0,0-.51-.45l-.15-.09,0-.29,0-.28.15-.09a1,1,0,0,0,.26-.18l0,.06v.78a4.34,4.34,0,0,1,1.34.77l.68-.38a.68.68,0,0,1,.48-.06.64.64,0,0,1,.38.29l.8,1.38a.58.58,0,0,1,.07.48.63.63,0,0,1-.3.38l-.68.4a3.84,3.84,0,0,1,.08.76,4.13,4.13,0,0,1-.08.78l.34.18.32.2ZM10.17,7.86a1.9,1.9,0,0,1,1.35,3.23,1.85,1.85,0,0,1-1.35.55A1.9,1.9,0,0,1,8.83,8.41a1.92,1.92,0,0,1,1.34-.55Zm1.58,7.2a.73.73,0,0,1-.21.49.66.66,0,0,1-.48.2H9.29a.68.68,0,0,1-.69-.69V14.2a4.75,4.75,0,0,1-1.48-.86l-.75.45a.73.73,0,0,1-.7,0,.63.63,0,0,1-.25-.26L4.54,12a.67.67,0,0,1-.08-.53.71.71,0,0,1,.32-.42l.75-.43a4.8,4.8,0,0,1-.08-.85,4.71,4.71,0,0,1,.08-.85l-.74-.44a.71.71,0,0,1-.32-.42.65.65,0,0,1,.07-.54L5.42,6a.66.66,0,0,1,.42-.32l.18,0a.73.73,0,0,1,.35.09l.75.43A4.68,4.68,0,0,1,8.6,5.33V4.45a.68.68,0,0,1,.69-.69h1.77a.64.64,0,0,1,.48.2.73.73,0,0,1,.21.49v.88a4.75,4.75,0,0,1,1.48.85L14,5.75a.67.67,0,0,1,.34-.09l.18,0a.71.71,0,0,1,.42.32l.89,1.54a.67.67,0,0,1,.06.52.73.73,0,0,1-.32.43l-.75.42a4.8,4.8,0,0,1,.08.85,4.71,4.71,0,0,1-.08.85l.75.43a.66.66,0,0,1,.32.42.73.73,0,0,1-.06.54l-.89,1.52a.69.69,0,0,1-.25.26.7.7,0,0,1-.35.09.64.64,0,0,1-.34-.09l-.75-.45a4.87,4.87,0,0,1-1.48.86v.87ZM7.23,9.75a3,3,0,0,0,.86,2.08,2.94,2.94,0,1,0,4.16-4.16,3,3,0,0,0-2.08-.85A2.94,2.94,0,0,0,7.23,9.75Z" transform="translate(-4.44 -3.76)"/></g></svg>',revert:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.76 14.69"><g><path d="M18.26,15V12.3l1.89-2V15a2.58,2.58,0,0,1-.24,1c-.2.58-.75.92-1.65,1H7.56v2L4.41,15.63,7.56,13v2h10.7ZM6.3,8.28V11L4.41,13V8.28a2.58,2.58,0,0,1,.24-1c.2-.58.75-.92,1.65-1H17v-2l3.15,3.34L17,10.3v-2H6.3Z" transform="translate(-4.4 -4.28)"/></g></svg>',auto_size:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 15.74"><g><path d="M6.71,17.19,6.89,16l1.21-.15A6,6,0,0,1,6.81,13.9a5.78,5.78,0,0,1-.45-2.27A6,6,0,0,1,8.1,7.45a5.83,5.83,0,0,1,4.17-1.73l1-1-1-1A7.89,7.89,0,0,0,5,14.64a7.73,7.73,0,0,0,1.71,2.55Zm5.57,2.31h0A7.86,7.86,0,0,0,17.85,6.07L17.67,7.3l-1.21.15a5.9,5.9,0,0,1,1.29,1.92,5.81,5.81,0,0,1,.45,2.26,5.91,5.91,0,0,1-5.9,5.9l-1,1,.49.49.47.5Z" transform="translate(-4.41 -3.76)"/></g></svg>',insert_row_below:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M15.7,1.3c-0.1-0.1-0.1-0.2-0.2-0.2L15.3,1H0.4L0.3,1.1c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0.1-0.1,0.1L0,1.4v7.7l0.1,0.1c0,0.1,0.1,0.1,0.2,0.2l0.1,0.1h2.3V9.3l0.1-0.5L3,8.5l0.1-0.2c-0.1,0-0.2,0-0.3,0H1.2v-6h13.3v6h-1.6c-0.1,0-0.2,0-0.3,0l0.1,0.2l0.2,0.4C12.9,9,13,9.2,13,9.3v0.1h2.3l0.2-0.1c0.1,0,0.1-0.1,0.2-0.2l0.1-0.1V1.4L15.7,1.3z"/><path d="M10.5,7.5C9.9,7.1,9.3,6.8,8.6,6.7c-0.2,0-0.5-0.1-0.7,0c-0.2,0-0.5,0-0.7,0C6.6,6.7,6.1,6.9,5.6,7.3C5.2,7.6,4.7,8,4.4,8.4C4.3,8.6,4.2,8.8,4.2,8.9C4.1,9.1,4,9.3,3.9,9.4C3.9,9.6,3.8,9.7,3.8,9.9c0,0.2-0.1,0.3-0.1,0.5v-0.1c-0.1,0.8,0.1,1.6,0.5,2.4c0.4,0.7,1,1.3,1.7,1.7c0.3,0.2,0.6,0.3,0.9,0.3c0.3,0.1,0.7,0.1,1,0.1c0.3,0,0.7,0,1-0.1c0.3-0.1,0.6-0.2,0.9-0.3c0.5-0.3,0.9-0.6,1.3-1c0.3-0.4,0.6-0.8,0.8-1.3c0.1-0.4,0.2-0.9,0.2-1.4c0-0.5-0.1-1-0.3-1.4C11.5,8.6,11.1,8,10.5,7.5z M10.1,11.3H8.5v1.6H8H7.9H7.3v0v-0.1v-1.4H5.7v-0.4v-0.2v-0.6h0h1.5V8.5h1.2v1.6h1.6V11.3z"/></g></svg>',insert_row_above:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M0.1,14.5c0.1,0.1,0.1,0.2,0.2,0.2l0.1,0.1h14.9l0.1-0.1c0,0,0.1-0.1,0.1-0.1c0,0,0.1-0.1,0.1-0.1l0.1-0.1V6.7l-0.1-0.1c0-0.1-0.1-0.1-0.2-0.2l-0.1-0.1h-2.3v0.1l-0.1,0.5l-0.2,0.4l-0.1,0.2c0.1,0,0.2,0,0.3,0h1.6v6H1.3v-6h1.6c0.1,0,0.2,0,0.3,0L3.1,7.3L2.9,6.9C2.8,6.8,2.8,6.6,2.7,6.5V6.3H0.4L0.3,6.4c-0.1,0-0.1,0.1-0.2,0.2L0,6.7v7.7L0.1,14.5z"/><path d="M5.3,8.3c0.6,0.5,1.2,0.8,1.9,0.9c0.2,0,0.5,0.1,0.7,0c0.2,0,0.5,0,0.7,0c0.6-0.1,1.1-0.3,1.6-0.6c0.5-0.3,0.9-0.7,1.2-1.2c0.1-0.2,0.2-0.3,0.3-0.5c0.1-0.2,0.2-0.4,0.2-0.5c0.1-0.1,0.1-0.3,0.1-0.4C12,5.8,12,5.6,12,5.4v0.1c0.1-0.8-0.1-1.6-0.5-2.4c-0.4-0.7-1-1.3-1.7-1.7C9.5,1.3,9.2,1.2,8.9,1.1C8.5,1,8.2,1,7.9,1c-0.3,0-0.7,0-1,0.1C6.6,1.2,6.3,1.3,6,1.4C5.5,1.7,5.1,2,4.7,2.4C4.4,2.8,4.1,3.3,3.9,3.8C3.8,4.2,3.7,4.7,3.7,5.2c0,0.5,0.1,1,0.3,1.4C4.3,7.2,4.7,7.8,5.3,8.3z M5.7,4.5h1.6V2.9h0.5h0.1h0.6v0v0.1v1.4H10v0.4v0.2v0.6h0H8.5v1.6H7.3V5.7H5.7V4.5z"/></g></svg>',insert_column_left:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M14.5,15.7c0.1-0.1,0.2-0.1,0.2-0.2l0.1-0.1V0.4l-0.1-0.1c0,0-0.1-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1L14.4,0H6.7L6.6,0.1c-0.1,0-0.1,0.1-0.2,0.2L6.3,0.4v2.3h0.1l0.5,0.1L7.3,3l0.2,0.1c0-0.1,0-0.2,0-0.3V1.2h6v13.3h-6v-1.6c0-0.1,0-0.2,0-0.3l-0.2,0.1l-0.4,0.2C6.7,12.9,6.6,13,6.4,13H6.3v2.3l0.1,0.2c0,0.1,0.1,0.1,0.2,0.2l0.1,0.1h7.7L14.5,15.7z"/><path d="M8.3,10.5C8.7,10,9,9.3,9.1,8.6c0-0.2,0.1-0.5,0-0.7c0-0.2,0-0.5,0-0.7C9,6.7,8.8,6.1,8.5,5.7C8.2,5.2,7.8,4.8,7.3,4.5C7.2,4.4,7,4.3,6.9,4.2C6.7,4.1,6.5,4,6.4,4C6.2,3.9,6.1,3.9,5.9,3.8c-0.2,0-0.3-0.1-0.5-0.1h0.1C4.7,3.7,3.8,3.9,3.1,4.3C2.4,4.7,1.8,5.3,1.4,6C1.3,6.3,1.2,6.6,1.1,6.9C1,7.2,1,7.6,1,7.9c0,0.3,0,0.7,0.1,1c0.1,0.3,0.2,0.6,0.3,0.9c0.3,0.5,0.6,0.9,1,1.3c0.4,0.3,0.8,0.6,1.3,0.8C4.2,12,4.7,12.1,5.1,12c0.5,0,1-0.1,1.4-0.3C7.2,11.5,7.8,11.1,8.3,10.5zM4.5,10.1V8.5H2.9V8V7.9V7.3h0H3h1.4V5.7h0.4h0.2h0.6v0v1.5h1.6v1.2H5.7v1.6H4.5z"/></g></svg>',insert_column_right:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M1.3,0.1C1.2,0.2,1.1,0.2,1.1,0.3L1,0.4v14.9l0.1,0.1c0,0,0.1,0.1,0.1,0.1c0,0,0.1,0.1,0.1,0.1l0.1,0.1h7.7l0.1-0.1c0.1,0,0.1-0.1,0.2-0.2l0.1-0.1v-2.3H9.3l-0.5-0.1l-0.4-0.2l-0.2-0.1c0,0.1,0,0.2,0,0.3v1.6h-6V1.3h6v1.6c0,0.1,0,0.2,0,0.3l0.2-0.1l0.4-0.2C9,2.9,9.2,2.8,9.3,2.8h0.1V0.5L9.4,0.3c0-0.1-0.1-0.1-0.2-0.2L9.1,0H1.4L1.3,0.1z"/><path d="M7.5,5.3C7,5.8,6.7,6.5,6.6,7.2c0,0.2-0.1,0.5,0,0.7c0,0.2,0,0.5,0,0.7c0.1,0.6,0.3,1.1,0.6,1.6c0.3,0.5,0.7,0.9,1.2,1.2c0.2,0.1,0.3,0.2,0.5,0.3c0.2,0.1,0.4,0.2,0.5,0.2c0.1,0.1,0.3,0.1,0.4,0.1c0.2,0,0.3,0.1,0.5,0.1h-0.1c0.8,0.1,1.6-0.1,2.4-0.5c0.7-0.4,1.3-1,1.7-1.7c0.2-0.3,0.3-0.6,0.3-0.9c0.1-0.3,0.1-0.7,0.1-1c0-0.3,0-0.7-0.1-1c-0.1-0.3-0.2-0.6-0.3-0.9c-0.3-0.5-0.6-0.9-1-1.3C13,4.4,12.5,4.2,12,4c-0.4-0.1-0.9-0.2-1.4-0.2c-0.5,0-1,0.1-1.4,0.2C8.5,4.3,7.9,4.7,7.5,5.3z M11.3,5.7v1.6h1.6v0.5v0.1v0.6h0h-0.1h-1.4v1.6h-0.4h-0.2h-0.6v0V8.5H8.5V7.3h1.6V5.7H11.3z"/></g></svg>',delete_row:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 13.83"><g><path d="M4.7,18.46l.12.08H19.73l.12-.08a.58.58,0,0,0,.22-.22l.08-.12,0-7.69-.08-.11a.77.77,0,0,0-.18-.18l-.11-.08-2.31,0-.08.28-.1.29a1.58,1.58,0,0,1-.12.29l-.14.34s0,0,.18,0H18.9v6H5.64v-6H7.35c.14,0,.2,0,.18,0l-.14-.34a2.85,2.85,0,0,1-.12-.29l-.1-.29-.07-.27-2.31,0-.11.08a.77.77,0,0,0-.18.18l-.08.11,0,7.69.08.12a.47.47,0,0,0,.09.12l.13.09ZM12.11,13a4,4,0,0,0,1.46-.21,4.51,4.51,0,0,0,1.31-.71A4,4,0,0,0,16.26,10a4.32,4.32,0,0,0-.08-2.54,4.34,4.34,0,0,0-1-1.52,4.15,4.15,0,0,0-1.54-1,4.34,4.34,0,0,0-1.35-.22A4.07,4.07,0,0,0,11,4.93,3.94,3.94,0,0,0,9.24,6.07,3.92,3.92,0,0,0,8.15,8.88a3.91,3.91,0,0,0,.12.95A4.16,4.16,0,0,0,12.11,13Zm2.35-4.14v.58H10.09V8.27h4.37v.58Z" transform="translate(-4.4 -4.71)"/></g></svg>',delete_column:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13.81 15.74"><g><path d="M5.66,19.42l.12.08,7.69,0,.11-.08a.77.77,0,0,0,.18-.18l.08-.11,0-2.32-.15,0-.45-.15-.42-.18-.17-.07a1,1,0,0,0,0,.27v1.63h-6V5h6V6.62a.9.9,0,0,0,0,.26l.17-.07.42-.17a3.91,3.91,0,0,1,.45-.15l.15,0,0-2.32L13.75,4a.77.77,0,0,0-.18-.18l-.11-.08H5.79l-.13.07a.63.63,0,0,0-.21.22l-.08.12V19.08l.08.12a.47.47,0,0,0,.09.12.35.35,0,0,0,.12.1Zm9-3.67a4.16,4.16,0,0,0,2.36-.51,4.08,4.08,0,0,0,1.67-1.72,4,4,0,0,0,.35-.91,3.79,3.79,0,0,0,.1-1,4.71,4.71,0,0,0-.11-1,5,5,0,0,0-.3-.87,4.25,4.25,0,0,0-1-1.25,4.49,4.49,0,0,0-1.34-.81A4.26,4.26,0,0,0,15,7.48a3.88,3.88,0,0,0-1.41.25A4.32,4.32,0,0,0,11.86,9,4,4,0,0,0,11,10.94a4.4,4.4,0,0,0-.05.68,4.5,4.5,0,0,0,.05.68,3.93,3.93,0,0,0,.61,1.57,4.22,4.22,0,0,0,1.18,1.2,4.59,4.59,0,0,0,.48.27c.2.1.37.17.5.22a2.44,2.44,0,0,0,.45.12,4.61,4.61,0,0,0,.5.07Zm2.54-4.12v.58H12.87V11h4.37v.59Z" transform="translate(-5.37 -3.76)"/></g></svg>',fixed_column_width:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6,5H18A1,1 0 0,1 19,6A1,1 0 0,1 18,7H6A1,1 0 0,1 5,6A1,1 0 0,1 6,5M21,2V4H3V2H21M15,8H17V22H15V8M7,8H9V22H7V8M11,8H13V22H11V8Z" /></svg>',rotate_left:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M0.5,10.2c0,0.1,0,0.2,0,0.3v0.2l0,0c0.1,0.3,0.3,0.6,0.4,0.9l0,0C1,11.8,1.3,12,1.5,11.9h0.1h0.2h0.1c0.1-0.1,0.3-0.3,0.4-0.5v-0.2c0-0.1,0-0.2-0.1-0.3l0,0c-0.2-0.2-0.3-0.4-0.3-0.7l0,0C1.8,10,1.7,9.9,1.5,9.8c-0.1,0-0.2,0-0.3,0H0.9C0.7,9.9,0.6,10,0.5,10.2L0.5,10.2z"/><path d="M2.2,11.5L2.2,11.5L2.2,11.5z"/><path d="M5.9,3.6L5.9,3.6L5.9,3.6z"/><path d="M0.1,7.9c0,0.3,0,0.6,0,0.9l0,0l0,0l0,0l0,0c0,0.2,0.1,0.3,0.2,0.4l0,0c0.2,0.1,0.3,0.2,0.5,0.2l0,0l0,0c0.2,0,0.4-0.1,0.5-0.3l0,0c0-0.1,0.1-0.3,0.1-0.4V8.6l0,0c0-0.2,0-0.5,0-0.7l0,0c0-0.2-0.1-0.4-0.2-0.5C1.1,7.3,0.9,7.2,0.7,7.2S0.3,7.3,0.2,7.4C0.1,7.5,0,7.7,0.1,7.9z"/><path d="M1.9,12.7L1.9,12.7c0,0.2,0,0.4,0.2,0.5l0,0l0.2,0.3l0,0c0.2,0.1,0.3,0.2,0.5,0.4l0,0l0,0l0,0l0,0C2.9,14,3,14.1,3.2,14.1s0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.3,0.2-0.5v-0.1c0-0.2-0.1-0.4-0.2-0.5l0,0l-0.4-0.4l-0.2-0.2l0,0C3,12.1,2.8,12,2.6,12l0,0c-0.2,0-0.4,0.1-0.5,0.2l0,0C2,12.3,1.9,12.5,1.9,12.7z"/><path d="M6.6,15c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.2,0.2,0.4,0.3l0,0c0.3,0,0.5,0,0.7,0h0.3l0,0c0.2,0,0.4-0.1,0.5-0.2c0.1-0.2,0.2-0.3,0.2-0.5l0,0l0,0c0-0.2-0.1-0.4-0.2-0.5l0,0c-0.1-0.1-0.3-0.2-0.5-0.2l0,0H7.9c-0.1,0-0.3,0-0.5,0l0,0H7.3c-0.2-0.1-0.3,0-0.5,0.1l0,0C6.7,14.6,6.6,14.8,6.6,15L6.6,15L6.6,15L6.6,15z"/><path d="M4.2,7.4C4,7.5,4,7.7,4,7.9c0,0.2,0,0.4,0.2,0.5l0,0l3.2,3.2l0,0c0.1,0.1,0.3,0.2,0.5,0.2s0.3-0.1,0.5-0.2l0,0l3.2-3.2l0,0c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5l0,0C11.5,7.3,11,6.7,10,5.8l0,0L8.4,4.2l0,0C8.3,4.1,8.1,4,7.9,4S7.5,4.1,7.4,4.2L4.2,7.4L4.2,7.4z M6.8,9L5.7,7.9l2.2-2.2l2.3,2.2l-2.3,2.2C7.7,9.9,7.3,9.5,6.8,9L6.8,9z"/><path d="M4.1,14.1C4,14.2,4,14.3,4,14.4v0.2l0,0c0.1,0.1,0.2,0.3,0.4,0.4l0,0c0.3,0.1,0.6,0.2,0.9,0.4h0.1h0.1l0,0c0.2,0,0.3-0.1,0.5-0.1l0,0c0.2-0.1,0.3-0.3,0.3-0.4l0,0l0,0l0,0l0,0v-0.2c0-0.1-0.1-0.2-0.1-0.3l0,0C6.1,14.2,6,14.1,5.8,14l0,0c-0.3-0.1-0.5-0.2-0.8-0.2l0,0c-0.1-0.1-0.2-0.1-0.3-0.1H4.5C4.3,13.7,4.2,13.9,4.1,14.1z"/><path d="M9.3,14.4c0,0.1-0.1,0.3,0,0.4V15l0,0c0,0.1,0.1,0.3,0.5,0.4c0.1,0.1,0.3,0.1,0.4,0.1l0,0h0.1l0,0c0.3-0.1,0.6-0.2,0.9-0.3l0,0c0.1-0.1,0.2-0.2,0.3-0.4l0.1-0.3c0-0.1-0.1-0.2-0.1-0.3l0,0c-0.1-0.2-0.2-0.3-0.4-0.4l0,0h-0.3c-0.1,0-0.2,0-0.3,0l0,0c-0.2,0.1-0.5,0.2-0.8,0.3l0,0C9.5,14.1,9.4,14.2,9.3,14.4L9.3,14.4z"/><path d="M11.4,14.7L11.4,14.7L11.4,14.7z"/><path d="M9.5,15.3L9.5,15.3L9.5,15.3z"/><path d="M15.9,7.9c0-1-0.2-2-0.6-3l0,0c-0.4-1-1-1.9-1.7-2.6C12.8,1.6,12,1,11,0.6l0,0C10.1,0.2,9,0,8,0C7.3,0,6.5,0.1,5.8,0.3l0,0C5.2,0.5,4.6,0.8,4,1.1L3.1,0.2l0,0C2.9,0.1,2.8,0,2.6,0H2.4l0,0C2.2,0,2,0.2,1.9,0.4l0,0L0.1,4.9l0,0C0,5,0,5.1,0,5.2c0,0.2,0.1,0.4,0.2,0.5l0,0c0.2,0.1,0.3,0.2,0.5,0.2h0.1H1l0,0l4.7-1.8l0,0C5.9,4,6.1,3.8,6.1,3.6V3.4C6.1,3.2,6,3,5.9,2.9l0,0L5.1,2.1c0.4-0.2,0.8-0.4,1.3-0.5c0.5-0.1,1.1-0.2,1.7-0.2c0.9,0,1.7,0.2,2.5,0.5l0,0c0.8,0.3,1.5,0.8,2.1,1.4c0.6,0.6,1.1,1.3,1.4,2.1l0,0c0.3,0.8,0.5,1.6,0.5,2.5s-0.2,1.7-0.5,2.5l0,0c-0.3,0.8-0.8,1.5-1.4,2.1c-0.2,0.2-0.4,0.3-0.6,0.5l0,0c-0.2,0.1-0.3,0.3-0.3,0.5v0.1c0,0.1,0,0.3,0.1,0.4l0,0c0.1,0.2,0.3,0.3,0.5,0.3l0,0c0.1,0,0.3-0.1,0.4-0.2l0,0l0,0l0,0l0,0c0.2-0.2,0.5-0.4,0.7-0.6l0,0l0,0l0,0l0,0c0.7-0.8,1.3-1.6,1.7-2.6C15.6,10,15.8,9,15.9,7.9z M1.9,4C2,3.8,2.1,3.5,2.3,3.1l0,0L2.7,2l1.2,1.2L1.9,4z"/><path d="M6.8,15.5L6.8,15.5L6.8,15.5z"/></g></svg>',rotate_right:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.8 15.8"><g><path d="M9.9,15.3L9.9,15.3L9.9,15.3z"/><path d="M6.9,15.1L6.9,15.1c0,0.1,0.1,0.3,0.2,0.4l0,0c0.1,0.2,0.3,0.3,0.5,0.3l0,0h0.3c0.2,0,0.4,0,0.7,0l0,0c0.2-0.1,0.3-0.2,0.4-0.3c0.1-0.1,0.2-0.2,0.2-0.4V15c0-0.2-0.1-0.4-0.2-0.4c-0.2-0.1-0.3-0.2-0.5-0.2H8.4l0,0c-0.1,0-0.3,0-0.5,0H7.6l0,0c-0.2,0-0.4,0.1-0.5,0.2C7,14.7,6.9,14.9,6.9,15.1z"/><path d="M6.5,14.4L6.5,14.4L6.5,14.4z"/><path d="M5.8,5.8L5.8,5.8c-1,0.9-1.5,1.5-1.7,1.6l0,0C4,7.5,4,7.7,4,7.9c0,0.2,0,0.4,0.2,0.5l0,0l3.2,3.2l0,0c0.2,0.1,0.3,0.2,0.5,0.2s0.4-0.1,0.5-0.2l0,0l3.2-3.2l0,0c0.1-0.1,0.2-0.3,0.2-0.5c0-0.2-0.1-0.4-0.2-0.5l0,0L8.4,4.2C8.3,4.1,8.1,4,7.9,4C7.7,4,7.5,4.1,7.4,4.2l0,0L5.8,5.8z M5.6,7.9l2.3-2.2l2.2,2.2L9,9l0,0l0,0l0,0l0,0c-0.5,0.6-0.9,0.9-1.1,1.1L5.6,7.9z"/><path d="M9,15.5L9,15.5L9,15.5z"/><path d="M9.6,14.7v0.2l0,0l0,0l0,0l0,0c0.1,0.2,0.1,0.3,0.3,0.3c0.1,0.1,0.3,0.1,0.4,0.1l0,0h0.1h0.1c0.3-0.1,0.6-0.3,0.9-0.4l0,0c0.1-0.1,0.2-0.2,0.3-0.4l0,0v-0.2c0-0.1,0-0.2-0.1-0.3c-0.1-0.2-0.2-0.3-0.4-0.4H11c-0.1,0-0.2,0.1-0.3,0.1l0,0c-0.2,0.1-0.4,0.2-0.7,0.3l0,0l0,0c-0.1,0.1-0.3,0.2-0.4,0.4C9.6,14.5,9.6,14.6,9.6,14.7z"/><path d="M9,14.5L9,14.5L9,14.5z"/><path d="M9.6,14.4L9.6,14.4L9.6,14.4z"/><path d="M11.7,14L11.7,14L11.7,14z"/><path d="M15.6,7.4L15.6,7.4L15.6,7.4z"/><path d="M15,9.4c0.2,0,0.4,0,0.6-0.2l0,0c0.1-0.1,0.2-0.2,0.2-0.4l0,0l0,0l0,0l0,0c0-0.3,0-0.6,0-0.9c0-0.2-0.1-0.4-0.2-0.5c-0.1-0.1-0.3-0.2-0.5-0.2s-0.4,0.1-0.5,0.2c-0.1,0.1-0.2,0.3-0.2,0.5l0,0c0,0.2,0,0.4,0,0.7l0,0v0.1c0,0.1,0,0.3,0.1,0.4l0,0C14.6,9.3,14.8,9.4,15,9.4L15,9.4L15,9.4z"/><path d="M14,12h0.1h0.2h0.1c0.2,0,0.5-0.2,0.6-0.4l0,0c0.2-0.3,0.3-0.6,0.4-0.9l0,0v-0.2c0-0.1-0.1-0.2-0.1-0.3c-0.1-0.2-0.2-0.3-0.4-0.4h-0.3c-0.1,0-0.2,0-0.3,0C14.2,9.9,14,10,14,10.3l0,0c-0.1,0.2-0.2,0.5-0.3,0.7l0,0c-0.1,0.1-0.1,0.2-0.1,0.3v0.2l0,0l0,0C13.6,11.6,13.8,11.8,14,12z"/><path d="M14.6,7.4L14.6,7.4L14.6,7.4z"/><path d="M4.4,14.2c-0.1,0.1-0.1,0.2-0.1,0.3l0.1,0.2c0,0.2,0.2,0.3,0.3,0.4l0,0c0.3,0.1,0.6,0.3,1.1,0.4l0,0h0.1l0,0c0.1,0,0.2-0.1,0.4-0.2c0.1,0,0.2-0.2,0.3-0.3l0,0v-0.2c0-0.1-0.1-0.3-0.2-0.4c-0.1-0.1-0.2-0.2-0.4-0.3l0,0c-0.2-0.1-0.5-0.2-0.7-0.3l0,0c-0.1,0-0.2,0-0.3,0H4.7l0,0C4.6,13.9,4.4,14,4.4,14.2L4.4,14.2z"/><path d="M11.9,13.3c0,0.2,0.1,0.4,0.2,0.6c0.1,0.1,0.3,0.2,0.5,0.2s0.4-0.1,0.5-0.2l0,0l0,0l0,0l0,0c0.1-0.1,0.3-0.3,0.4-0.4l0,0l0.2-0.3l0,0c0.1-0.2,0.2-0.3,0.2-0.5l0,0c0-0.2-0.1-0.4-0.2-0.5l0,0c-0.1-0.1-0.3-0.2-0.5-0.2l0,0c-0.2,0-0.4,0.1-0.5,0.2l0,0l-0.2,0.2l-0.4,0.4l0,0C12,13,11.9,13.1,11.9,13.3L11.9,13.3z"/><path d="M12.1,13.8L12.1,13.8L12.1,13.8z"/><path d="M11.9,13.3L11.9,13.3L11.9,13.3z"/><path d="M15.9,5.2c0-0.1-0.1-0.2-0.1-0.3l0,0L14,0.4l0,0C13.9,0.2,13.7,0,13.5,0l0,0l0,0h-0.2c-0.2,0-0.4,0.1-0.5,0.2l0,0l-0.9,0.9c-0.5-0.3-1.1-0.6-1.8-0.8l0,0C9.4,0.1,8.7,0,7.9,0c-1,0-2,0.2-3,0.6S3,1.6,2.3,2.3C1.6,3.1,1,3.9,0.6,4.9l0,0C0.2,5.8,0,6.8,0,7.9c0,1,0.2,2,0.6,3s0.9,1.8,1.7,2.6l0,0l0,0l0,0l0,0c0.2,0.2,0.5,0.4,0.7,0.6l0,0l0,0l0,0l0,0c0.2,0.1,0.3,0.2,0.5,0.2l0,0c0.2,0,0.4-0.1,0.6-0.3l0,0c0.1-0.1,0.1-0.3,0.1-0.4v-0.1l0,0C4.1,13.3,4,13.1,3.9,13l0,0c-0.2-0.1-0.4-0.3-0.6-0.5c-0.6-0.6-1.1-1.3-1.4-2.1l0,0C1.6,9.6,1.4,8.8,1.4,7.9s0.2-1.7,0.5-2.5l0,0c0.3-0.8,0.8-1.5,1.4-2.1c0.6-0.6,1.3-1.1,2.1-1.4l0,0C6.2,1.6,7,1.4,7.9,1.4c0.6,0,1.1,0.1,1.7,0.2c0.5,0.1,0.9,0.3,1.3,0.5l-0.8,0.8l0,0C10,3.1,9.9,3.2,9.9,3.4v0.2l0,0l0,0c0,0.2,0.2,0.4,0.4,0.5l0,0l4.5,1.8l0,0H15h0.1c0.2,0,0.4-0.1,0.5-0.2l0,0C15.7,5.6,15.8,5.4,15.9,5.2z M11.8,3.2L13,2l0.4,1.1l0,0c0.2,0.4,0.3,0.7,0.4,0.9L11.8,3.2z"/></g></svg>',mirror_horizontal:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14.75 15.74"><g><path d="M13.75,3.76l5.9,15.74h-5.9V3.76ZM4.9,19.5,10.8,3.76V19.5H4.9Z" transform="translate(-4.9 -3.76)"/></g></svg>',mirror_vertical:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.74 14.75"><g><path d="M20.15,13.1,4.41,19V13.1H20.15ZM4.41,4.25l15.74,5.9H4.41V4.25Z" transform="translate(-4.41 -4.25)"/></g></svg>',checked:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.75 12.1"><g><path d="M4.59,12.23l.12.18L9.43,17.5a.58.58,0,0,0,.84,0L20,7.45h0a.58.58,0,0,0,0-.84l-.85-.85a.58.58,0,0,0-.84,0H18.2l-8.12,8.41a.29.29,0,0,1-.42,0l-3.4-3.63a.58.58,0,0,0-.84,0l-.85.85a.6.6,0,0,0-.14.21.51.51,0,0,0,0,.44c.05.06.1.13.16.19Z" transform="translate(-4.38 -5.58)"/></g></svg>',line_break:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19,6a1,1,0,0,0-1,1v4a1,1,0,0,1-1,1H7.41l1.3-1.29A1,1,0,0,0,7.29,9.29l-3,3a1,1,0,0,0-.21.33,1,1,0,0,0,0,.76,1,1,0,0,0,.21.33l3,3a1,1,0,0,0,1.42,0,1,1,0,0,0,0-1.42L7.41,14H17a3,3,0,0,0,3-3V7A1,1,0,0,0,19,6Z"/></svg>',audio:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14,3.23V5.29C16.89,6.15 19,8.83 19,12C19,15.17 16.89,17.84 14,18.7V20.77C18,19.86 21,16.28 21,12C21,7.72 18,4.14 14,3.23M16.5,12C16.5,10.23 15.5,8.71 14,7.97V16C15.5,15.29 16.5,13.76 16.5,12M3,9V15H7L12,20V4L7,9H3Z" /></svg>',image_gallery:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="30 30 150 150"><g><path d="M152.775,120.548V51.651c0-12.271-9.984-22.254-22.254-22.254H43.727c-12.271,0-22.254,9.983-22.254,22.254v68.896c0,12.27,9.983,22.254,22.254,22.254h86.795C142.791,142.802,152.775,132.817,152.775,120.548z M36.394,51.651c0-4.042,3.291-7.333,7.333-7.333h86.795c4.042,0,7.332,3.291,7.332,7.333v23.917l-14.938-17.767c-1.41-1.678-3.487-2.649-5.68-2.658h-0.029c-2.184,0-4.255,0.954-5.674,2.613L76.709,98.519l-9.096-9.398c-1.427-1.474-3.392-2.291-5.448-2.273c-2.052,0.025-4.004,0.893-5.396,2.4L36.394,111.32V51.651z M41.684,127.585l20.697-22.416l9.312,9.622c1.461,1.511,3.489,2.334,5.592,2.27c2.101-0.066,4.075-1.013,5.44-2.612l34.436-40.308l20.693,24.613v21.794c0,4.042-3.29,7.332-7.332,7.332H43.727C43.018,127.88,42.334,127.775,41.684,127.585z M182.616,152.5V75.657c0-4.12-3.34-7.46-7.461-7.46c-4.119,0-7.46,3.34-7.46,7.46V152.5c0,4.112-3.347,7.46-7.461,7.46h-94c-4.119,0-7.46,3.339-7.46,7.459c0,4.123,3.341,7.462,7.46,7.462h94C172.576,174.881,182.616,164.841,182.616,152.5z"/></g></svg>',bookmark:'<svg viewBox="0 0 24 24"><path d="M17,3H7A2,2 0 0,0 5,5V21L12,18L19,21V5C19,3.89 18.1,3 17,3Z" /></svg>',download:'<svg viewBox="0 0 24 24"><path d="M2 12H4V17H20V12H22V17C22 18.11 21.11 19 20 19H4C2.9 19 2 18.11 2 17V12M12 15L17.55 9.54L16.13 8.13L13 11.25V2H11V11.25L7.88 8.13L6.46 9.55L12 15Z" /></svg>',dir_ltr:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M9 4v4c-1.1 0-2-.9-2-2s.9-2 2-2m8-2H9C6.79 2 5 3.79 5 6s1.79 4 4 4v5h2V4h2v11h2V4h2V2zm0 12v3H5v2h12v3l4-4-4-4z"/></svg>',dir_rtl:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M10 4v4c-1.1 0-2-.9-2-2s.9-2 2-2m8-2h-8C7.79 2 6 3.79 6 6s1.79 4 4 4v5h2V4h2v11h2V4h2V2zM8 14l-4 4 4 4v-3h12v-2H8v-3z"/></svg>',alert_outline:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11,15H13V17H11V15M11,7H13V13H11V7M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20Z" /></svg>',more_text:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 180 180"><g><path d="M49.711,142.188h49.027c2.328,0.002,4.394,1.492,5.129,3.699l9.742,29.252c0.363,1.092,1.385,1.828,2.537,1.83l15.883,0.01c0.859,0,1.667-0.412,2.17-1.109s0.641-1.594,0.37-2.41l-16.625-50.045L86.503,28.953c-0.36-1.097-1.383-1.839-2.537-1.842H64.532c-1.153-0.001-2.178,0.736-2.542,1.831L13.847,173.457c-0.271,0.816-0.135,1.713,0.369,2.412c0.503,0.697,1.311,1.109,2.171,1.109h15.872c1.151,0,2.173-0.736,2.537-1.828l9.793-29.287C45.325,143.66,47.39,142.18,49.711,142.188L49.711,142.188z M53.493,119.098l15.607-46.9c0.744-2.196,2.806-3.674,5.125-3.674s4.381,1.478,5.125,3.674l15.607,46.904c0.537,1.621,0.263,3.402-0.736,4.789c-1.018,1.408-2.649,2.24-4.386,2.24H58.615c-1.736,0-3.368-0.832-4.386-2.24C53.23,122.504,52.956,120.721,53.493,119.098L53.493,119.098z M190.465,63.32c0-2.919-1.015-5.396-3.059-7.428c-2.029-2.031-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.016-7.388,3.047c-2.029,2.032-3.056,4.498-3.056,7.386c0,2.889,1.026,5.354,3.056,7.385c2.032,2.032,4.499,3.059,7.388,3.059c2.887,0,5.354-1.026,7.383-3.059C189.45,68.633,190.465,66.178,190.465,63.32L190.465,63.32z M190.465,101.994c0-2.858-1.015-5.313-3.059-7.333c-2.029-2.042-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.005-7.388,3.047c-2.029,2.021-3.056,4.486-3.056,7.376c0,2.887,1.026,5.352,3.056,7.395c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,107.389,190.465,104.914,190.465,101.994L190.465,101.994z M190.465,140.76c0-2.918-1.015-5.395-3.059-7.438c-2.029-2.041-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.006-7.388,3.047c-2.029,2.043-3.056,4.52-3.056,7.438c0,2.922,1.026,5.398,3.056,7.439c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,146.158,190.465,143.682,190.465,140.76L190.465,140.76z"/></g></svg>',more_paragraph:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 180 180"><g><path d="M128.39,28.499H63.493c-25.558,0-46.354,20.796-46.354,46.354c0,25.559,20.796,46.353,46.354,46.353h9.271v55.625h18.542V47.04h9.271V176.83h18.543V47.04h9.271V28.499z M72.764,102.664h-9.271c-15.337,0-27.813-12.475-27.813-27.812c0-15.336,12.476-27.813,27.813-27.813h9.271V102.664z M190.465,63.32c0-2.919-1.015-5.396-3.059-7.428c-2.029-2.031-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.016-7.388,3.047c-2.029,2.032-3.056,4.498-3.056,7.386c0,2.889,1.026,5.354,3.056,7.385c2.032,2.032,4.499,3.059,7.388,3.059c2.887,0,5.354-1.026,7.383-3.059C189.45,68.633,190.465,66.178,190.465,63.32L190.465,63.32z M190.465,101.994c0-2.858-1.015-5.313-3.059-7.333c-2.029-2.042-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.005-7.388,3.047c-2.029,2.021-3.056,4.486-3.056,7.376c0,2.887,1.026,5.352,3.056,7.395c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,107.389,190.465,104.914,190.465,101.994L190.465,101.994z M190.465,140.76c0-2.918-1.015-5.395-3.059-7.438c-2.029-2.041-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.006-7.388,3.047c-2.029,2.043-3.056,4.52-3.056,7.438c0,2.922,1.026,5.398,3.056,7.439c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,146.158,190.465,143.682,190.465,140.76L190.465,140.76z"/></g></svg>',more_plus:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="35 30 140 140"><g><path d="M137.215,102.045c0,3.498-2.835,6.332-6.333,6.332H24.549c-3.498,0-6.334-2.834-6.334-6.332l0,0c0-3.498,2.836-6.333,6.334-6.333h106.333C134.38,95.711,137.215,98.547,137.215,102.045L137.215,102.045z M77.715,161.545c-3.498,0-6.333-2.836-6.333-6.334V48.878c0-3.498,2.836-6.333,6.333-6.333l0,0c3.498,0,6.334,2.835,6.334,6.333v106.333C84.049,158.709,81.213,161.545,77.715,161.545L77.715,161.545z M190.465,63.32c0-2.919-1.015-5.396-3.059-7.428c-2.029-2.031-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.016-7.388,3.047c-2.029,2.032-3.056,4.498-3.056,7.386c0,2.889,1.026,5.354,3.056,7.385c2.032,2.032,4.499,3.059,7.388,3.059c2.887,0,5.354-1.026,7.383-3.059C189.45,68.632,190.465,66.177,190.465,63.32L190.465,63.32z M190.465,101.993c0-2.858-1.015-5.313-3.059-7.333c-2.029-2.042-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.005-7.388,3.047c-2.029,2.021-3.056,4.486-3.056,7.376c0,2.888,1.026,5.353,3.056,7.396c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,107.389,190.465,104.914,190.465,101.993L190.465,101.993z M190.465,140.76c0-2.918-1.015-5.395-3.059-7.438c-2.029-2.041-4.496-3.047-7.383-3.047c-2.889,0-5.355,1.006-7.388,3.047c-2.029,2.043-3.056,4.52-3.056,7.438c0,2.922,1.026,5.398,3.056,7.439c2.032,2.021,4.499,3.047,7.388,3.047c2.887,0,5.354-1.025,7.383-3.047C189.45,146.158,190.465,143.682,190.465,140.76L190.465,140.76z"/></g></svg>',more_horizontal:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.76 3.58"><g><path d="M4.64,10.73a1.84,1.84,0,0,1,.65-.65,1.76,1.76,0,0,1,1.79,0A1.79,1.79,0,0,1,8,11.63a1.84,1.84,0,0,1-.25.9,1.69,1.69,0,0,1-.65.65,1.8,1.8,0,0,1-2.69-1.55A2.08,2.08,0,0,1,4.64,10.73Zm6.09,0a1.84,1.84,0,0,1,.65-.65,1.78,1.78,0,0,1,2.67,1.55,1.73,1.73,0,0,1-.24.9,1.84,1.84,0,0,1-.65.65,1.76,1.76,0,0,1-1.79,0,1.79,1.79,0,0,1-.64-2.44Zm6.08,0a1.69,1.69,0,0,1,.65-.65,1.76,1.76,0,0,1,1.79,0,1.79,1.79,0,0,1,.9,1.54,1.73,1.73,0,0,1-.24.9,1.84,1.84,0,0,1-.65.65,1.8,1.8,0,0,1-2.69-1.55A2,2,0,0,1,16.81,10.73Z" transform="translate(-4.39 -9.84)"/></g></svg>',more_vertical:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3.94 15.75"><g><path d="M12.28,7.69a1.92,1.92,0,0,1-1.39-.58,2,2,0,0,1-.58-1.39,1.92,1.92,0,0,1,.58-1.39,2,2,0,0,1,1.39-.58,1.92,1.92,0,0,1,1.39.58,2,2,0,0,1,.58,1.39,1.92,1.92,0,0,1-.58,1.39,2,2,0,0,1-1.39.58Zm0,2a1.92,1.92,0,0,1,1.39.58,2,2,0,0,1,.58,1.39A1.92,1.92,0,0,1,13.67,13a2,2,0,0,1-1.39.58A1.92,1.92,0,0,1,10.89,13a2,2,0,0,1-.58-1.39,2,2,0,0,1,2-2Zm0,5.9a1.92,1.92,0,0,1,1.39.58,2,2,0,0,1,.58,1.39,1.92,1.92,0,0,1-.58,1.39,2,2,0,0,1-1.39.58,1.92,1.92,0,0,1-1.39-.58,2,2,0,0,1-.58-1.39,1.92,1.92,0,0,1,.58-1.39,1.94,1.94,0,0,1,1.39-.58Z" transform="translate(-10.31 -3.75)"/></g></svg>',attachment:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8.38 15.68"><g><path d="M15.23,6h1v9.78a3.88,3.88,0,0,1-1.31,2.45,4,4,0,0,1-6.57-2.45V7A3,3,0,0,1,9.2,4.89a3,3,0,0,1,5,2.09v8.31a1.92,1.92,0,0,1-.58,1.39,2,2,0,0,1-1.39.58,1.92,1.92,0,0,1-1.39-.58,2,2,0,0,1-.58-1.39V8h1v7.32a1,1,0,0,0,.29.69,1,1,0,0,0,.69.28A.9.9,0,0,0,13,16a1,1,0,0,0,.29-.69V7a1.92,1.92,0,0,0-.58-1.39A2,2,0,0,0,11.27,5a1.92,1.92,0,0,0-1.39.58A2,2,0,0,0,9.33,7v8.31a3,3,0,1,0,5.9,0V6Z" transform="translate(-8.08 -3.78)"/></g></svg>',map:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11.7 15.62"><g><path d="M12.05,12.42a2.93,2.93,0,1,1,2.07-5A2.88,2.88,0,0,1,15,9.49a3,3,0,0,1-.86,2.07,2.89,2.89,0,0,1-2.07.86Zm0-5.36a2.43,2.43,0,0,0-1.72,4.16,2.48,2.48,0,0,0,1.72.72,2.44,2.44,0,0,0,0-4.88Zm0-3.3A5.84,5.84,0,0,1,17.9,9.62a9.94,9.94,0,0,1-1.73,5A33.59,33.59,0,0,1,12.84,19a1.52,1.52,0,0,1-.23.2,1,1,0,0,1-.55.2h0a1,1,0,0,1-.55-.2,1.52,1.52,0,0,1-.23-.2,33.59,33.59,0,0,1-3.33-4.32,9.93,9.93,0,0,1-1.72-5,5.84,5.84,0,0,1,5.85-5.86ZM12,18.34l.08.05.06-.06a35.58,35.58,0,0,0,3.06-3.93,9.35,9.35,0,0,0,1.74-4.77,4.88,4.88,0,0,0-4.88-4.88A4.79,4.79,0,0,0,8.6,6.17,4.84,4.84,0,0,0,7.17,9.62,9.29,9.29,0,0,0,8.91,14.4,36,36,0,0,0,12,18.34Z" transform="translate(-6.2 -3.76)"/></g></svg>',magic_stick:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15.73 15.75"><g><path d="M19.86,19.21a1,1,0,0,0,.28-.68,1,1,0,0,0-.28-.7L13,10.93a1,1,0,0,0-.7-.28,1,1,0,0,0-.68,1.65l6.9,6.9a1,1,0,0,0,.69.29.93.93,0,0,0,.69-.28ZM9.19,8.55a3,3,0,0,0,1.68,0,14.12,14.12,0,0,0,1.41-.32A11.26,11.26,0,0,0,10.8,7.06c-.56-.36-.86-.56-.91-.58S10,5.91,10,5.11s0-1.26-.15-1.37a4.35,4.35,0,0,0-1.19.71c-.53.4-.81.62-.87.68a9,9,0,0,0-2-.6,6.84,6.84,0,0,0-.76-.09s0,.27.08.77a8.6,8.6,0,0,0,.61,2q-.09.09-.69.87a3.59,3.59,0,0,0-.68,1.17c.12.17.57.23,1.36.15S7,9.26,7.15,9.23s.21.36.57.91a10.49,10.49,0,0,0,1.14,1.48c0-.1.14-.57.31-1.4a3,3,0,0,0,0-1.67Z" transform="translate(-4.41 -3.74)"/></g></svg>',empty_file:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12.78 15.75"><g><path d="M14.73,3.76,18.67,7.7v9.84a2,2,0,0,1-2,2H7.84a1.89,1.89,0,0,1-1.38-.58,2,2,0,0,1-.57-1.39V5.73a1.93,1.93,0,0,1,.57-1.38,2,2,0,0,1,1.38-.58h6.62l.26,0v0Zm2.95,4.92h-2a1.93,1.93,0,0,1-1.38-.57,2,2,0,0,1-.58-1.4V6.17c0-.36,0-.84,0-1.43H7.85a1,1,0,0,0-.7.29,1,1,0,0,0-.29.7V17.54a1,1,0,0,0,.29.69,1,1,0,0,0,.69.29h8.85a1,1,0,0,0,.71-.29.92.92,0,0,0,.28-.69Zm0-1L14.73,4.74v2A1,1,0,0,0,15,7.4a1,1,0,0,0,.69.29Z" transform="translate(-5.89 -3.76)"/></g></svg>'},N=n("P6u4"),T=n.n(N);const k={_d:null,_w:null,isIE:null,isIE_Edge:null,isOSX_IOS:null,isChromium:null,isMobile:null,isResizeObserverSupported:null,_propertiesInit:function(){this._d||(this._d=document,this._w=window,this.isIE=navigator.userAgent.indexOf("Trident")>-1,this.isIE_Edge=navigator.userAgent.indexOf("Trident")>-1||navigator.appVersion.indexOf("Edge")>-1,this.isOSX_IOS=/(Mac|iPhone|iPod|iPad)/.test(navigator.platform),this.isChromium=!!window.chrome,this.isResizeObserverSupported="function"==typeof ResizeObserver,this.isMobile=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||(navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0)&&"ontouchstart"in window)},_allowedEmptyNodeList:".se-component, pre, blockquote, hr, li, table, img, iframe, video, audio, canvas",_HTMLConvertor:function(e){const t={"&":"&amp;"," ":"&nbsp;","'":"&apos;",'"':"&quot;","<":"&lt;",">":"&gt;"};return e.replace(/&|\u00A0|'|"|<|>/g,(function(e){return"string"==typeof t[e]?t[e]:e}))},zeroWidthSpace:String.fromCharCode(8203),zeroWidthRegExp:new RegExp(String.fromCharCode(8203),"g"),onlyZeroWidthRegExp:new RegExp("^"+String.fromCharCode(8203)+"+$"),fontValueMap:{"xx-small":1,"x-small":2,small:3,medium:4,large:5,"x-large":6,"xx-large":7},onlyZeroWidthSpace:function(e){return null!=e&&("string"!=typeof e&&(e=e.textContent),""===e||this.onlyZeroWidthRegExp.test(e))},getXMLHttpRequest:function(){if(!this._w.ActiveXObject)return this._w.XMLHttpRequest?new XMLHttpRequest:null;try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(e){try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){return null}}},getValues:function(e){return e?this._w.Object.keys(e).map((function(t){return e[t]})):[]},camelToKebabCase:function(e){return"string"==typeof e?e.replace(/[A-Z]/g,(function(e){return"-"+e.toLowerCase()})):e.map((function(e){return k.camelToKebabCase(e)}))},kebabToCamelCase:function(e){return"string"==typeof e?e.replace(/-[a-zA-Z]/g,(function(e){return e.replace("-","").toUpperCase()})):e.map((function(e){return k.camelToKebabCase(e)}))},createElement:function(e){return this._d.createElement(e)},createTextNode:function(e){return this._d.createTextNode(e||"")},HTMLEncoder:function(e){const t={"<":"$lt;",">":"$gt;"};return e.replace(/<|>/g,(function(e){return"string"==typeof t[e]?t[e]:e}))},HTMLDecoder:function(e){const t={"$lt;":"<","$gt;":">"};return e.replace(/\$lt;|\$gt;/g,(function(e){return"string"==typeof t[e]?t[e]:e}))},hasOwn:function(e,t){return this._hasOwn.call(e,t)},_hasOwn:Object.prototype.hasOwnProperty,getIncludePath:function(e,t){let n="";const i=[],l="js"===t?"script":"link",o="js"===t?"src":"href";let s="(?:";for(let t=0,n=e.length;t<n;t++)s+=e[t]+(t<n-1?"|":")");const a=new this._w.RegExp("(^|.*[\\/])"+s+"(\\.[^\\/]+)?."+t+"(?:\\?.*|;.*)?$","i"),r=new this._w.RegExp(".+\\."+t+"(?:\\?.*|;.*)?$","i");for(let e=this._d.getElementsByTagName(l),t=0;t<e.length;t++)r.test(e[t][o])&&i.push(e[t]);for(let e=0;e<i.length;e++){let t=i[e][o].match(a);if(t){n=t[0];break}}if(""===n&&(n=i.length>0?i[0][o]:""),-1===n.indexOf(":/")&&"//"!==n.slice(0,2)&&(n=0===n.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+n:location.href.match(/^[^\?]*\/(?:)/)[0]+n),!n)throw"[SUNEDITOR.util.getIncludePath.fail] The SUNEDITOR installation path could not be automatically detected. (name: +"+name+", extension: "+t+")";return n},getPageStyle:function(e){let t="";const n=(e||this._d).styleSheets;for(let e,i=0,l=n.length;i<l;i++){try{e=n[i].cssRules}catch(e){continue}if(e)for(let n=0,i=e.length;n<i;n++)t+=e[n].cssText}return t},getIframeDocument:function(e){let t=e.contentWindow||e.contentDocument;return t.document&&(t=t.document),t},getAttributesToString:function(e,t){if(!e.attributes)return"";const n=e.attributes;let i="";for(let e=0,l=n.length;e<l;e++)t&&t.indexOf(n[e].name)>-1||(i+=n[e].name+'="'+n[e].value+'" ');return i},getByteLength:function(e){if(!e||!e.toString)return 0;e=e.toString();const t=this._w.encodeURIComponent;let n,i;return this.isIE_Edge?(i=this._w.unescape(t(e)).length,n=0,null!==t(e).match(/(%0A|%0D)/gi)&&(n=t(e).match(/(%0A|%0D)/gi).length),i+n):(i=new this._w.TextEncoder("utf-8").encode(e).length,n=0,null!==t(e).match(/(%0A|%0D)/gi)&&(n=t(e).match(/(%0A|%0D)/gi).length),i+n)},isWysiwygDiv:function(e){return e&&1===e.nodeType&&(this.hasClass(e,"se-wrapper-wysiwyg")||/^BODY$/i.test(e.nodeName))},isNonEditable:function(e){return e&&1===e.nodeType&&"false"===e.getAttribute("contenteditable")},isTextStyleElement:function(e){return e&&3!==e.nodeType&&/^(strong|span|font|b|var|i|em|u|ins|s|strike|del|sub|sup|mark|a|label|code|summary)$/i.test(e.nodeName)},isInputElement:function(e){return e&&1===e.nodeType&&/^(INPUT|TEXTAREA)$/i.test(e.nodeName)},isFormatElement:function(e){return e&&1===e.nodeType&&(/^(P|DIV|H[1-6]|PRE|LI|TH|TD|DETAILS)$/i.test(e.nodeName)||this.hasClass(e,"(\\s|^)__se__format__replace_.+(\\s|$)|(\\s|^)__se__format__free_.+(\\s|$)"))&&!this.isComponent(e)&&!this.isWysiwygDiv(e)},isRangeFormatElement:function(e){return e&&1===e.nodeType&&(/^(BLOCKQUOTE|OL|UL|FIGCAPTION|TABLE|THEAD|TBODY|TR|TH|TD|DETAILS)$/i.test(e.nodeName)||this.hasClass(e,"(\\s|^)__se__format__range_.+(\\s|$)"))},isClosureRangeFormatElement:function(e){return e&&1===e.nodeType&&(/^(TH|TD)$/i.test(e.nodeName)||this.hasClass(e,"(\\s|^)__se__format__range__closure_.+(\\s|$)"))},isFreeFormatElement:function(e){return e&&1===e.nodeType&&(/^PRE$/i.test(e.nodeName)||this.hasClass(e,"(\\s|^)__se__format__free_.+(\\s|$)"))&&!this.isComponent(e)&&!this.isWysiwygDiv(e)},isClosureFreeFormatElement:function(e){return e&&1===e.nodeType&&this.hasClass(e,"(\\s|^)__se__format__free__closure_.+(\\s|$)")},isComponent:function(e){return e&&(/se-component/.test(e.className)||/^(TABLE|HR)$/.test(e.nodeName))},isUneditableComponent:function(e){return e&&this.hasClass(e,"__se__uneditable")},isMediaComponent:function(e){return e&&/se-component/.test(e.className)},isNotCheckingNode:function(e){return e&&/katex|__se__tag/.test(e.className)},getFormatElement:function(e,t){if(!e)return null;for(t||(t=function(){return!0});e;){if(this.isWysiwygDiv(e))return null;if(this.isRangeFormatElement(e)&&e.firstElementChild,this.isFormatElement(e)&&t(e))return e;e=e.parentNode}return null},getRangeFormatElement:function(e,t){if(!e)return null;for(t||(t=function(){return!0});e;){if(this.isWysiwygDiv(e))return null;if(this.isRangeFormatElement(e)&&!/^(THEAD|TBODY|TR)$/i.test(e.nodeName)&&t(e))return e;e=e.parentNode}return null},getFreeFormatElement:function(e,t){if(!e)return null;for(t||(t=function(){return!0});e;){if(this.isWysiwygDiv(e))return null;if(this.isFreeFormatElement(e)&&t(e))return e;e=e.parentNode}return null},getClosureFreeFormatElement:function(e,t){if(!e)return null;for(t||(t=function(){return!0});e;){if(this.isWysiwygDiv(e))return null;if(this.isClosureFreeFormatElement(e)&&t(e))return e;e=e.parentNode}return null},copyTagAttributes:function(e,t,n){if(t.style.cssText){const n=t.style;for(let t=0,i=n.length;t<i;t++)e.style[n[t]]=n[n[t]]}const i=t.attributes;for(let t,l=0,o=i.length;l<o;l++)t=i[l].name.toLowerCase(),n&&n.indexOf(t)>-1||!i[l].value?e.removeAttribute(t):"style"!==t&&e.setAttribute(i[l].name,i[l].value)},copyFormatAttributes:function(e,t){(t=t.cloneNode(!1)).className=t.className.replace(/(\s|^)__se__format__[^\s]+/g,""),this.copyTagAttributes(e,t)},getArrayItem:function(e,t,n){if(!e||0===e.length)return null;t=t||function(){return!0};const i=[];for(let l,o=0,s=e.length;o<s;o++)if(l=e[o],t(l)){if(!n)return l;i.push(l)}return n?i:null},arrayIncludes:function(e,t){for(let n=0;n<e.length;n++)if(e[n]===t)return!0;return!1},getArrayIndex:function(e,t){let n=-1;for(let i=0,l=e.length;i<l;i++)if(e[i]===t){n=i;break}return n},nextIdx:function(e,t){let n=this.getArrayIndex(e,t);return-1===n?-1:n+1},prevIdx:function(e,t){let n=this.getArrayIndex(e,t);return-1===n?-1:n-1},getPositionIndex:function(e){let t=0;for(;e=e.previousSibling;)t+=1;return t},getNodePath:function(e,t,n){const i=[];let l=!0;return this.getParentElement(e,function(e){if(e===t&&(l=!1),l&&!this.isWysiwygDiv(e)){if(n&&3===e.nodeType){let t=null,i=null;n.s=n.e=0;let l=e.previousSibling;for(;l&&3===l.nodeType;)i=l.textContent.replace(this.zeroWidthRegExp,""),n.s+=i.length,e.textContent=i+e.textContent,t=l,l=l.previousSibling,this.removeItem(t);let o=e.nextSibling;for(;o&&3===o.nodeType;)i=o.textContent.replace(this.zeroWidthRegExp,""),n.e+=i.length,e.textContent+=i,t=o,o=o.nextSibling,this.removeItem(t)}i.push(e)}return!1}.bind(this)),i.map(this.getPositionIndex).reverse()},getNodeFromPath:function(e,t){let n,i=t;for(let t=0,l=e.length;t<l&&(n=i.childNodes,0!==n.length);t++)i=n.length<=e[t]?n[n.length-1]:n[e[t]];return i},isSameAttributes:function(e,t){if(3===e.nodeType&&3===t.nodeType)return!0;if(3===e.nodeType||3===t.nodeType)return!1;const n=e.style,i=t.style;let l=0;for(let e=0,t=n.length;e<t;e++)n[n[e]]===i[n[e]]&&l++;const o=e.classList,s=t.classList,a=this._w.RegExp;let r=0;for(let e=0,t=o.length;e<t;e++)a("(s|^)"+o[e]+"(s|$)").test(s.value)&&r++;return l===i.length&&l===n.length&&r===s.length&&r===o.length},isEmptyLine:function(e){return!e||!e.parentNode||!e.querySelector("IMG, IFRAME, AUDIO, VIDEO, CANVAS, TABLE")&&0===e.children.length&&this.onlyZeroWidthSpace(e.textContent)},isSpanWithoutAttr:function(e){return!!e&&1===e.nodeType&&/^SPAN$/i.test(e.nodeName)&&!e.className&&!e.style.cssText},isList:function(e){return e&&/^(OL|UL)$/i.test("string"==typeof e?e:e.nodeName)},isListCell:function(e){return e&&/^LI$/i.test("string"==typeof e?e:e.nodeName)},isTable:function(e){return e&&/^(TABLE|THEAD|TBODY|TR|TH|TD)$/i.test("string"==typeof e?e:e.nodeName)},isCell:function(e){return e&&/^(TD|TH)$/i.test("string"==typeof e?e:e.nodeName)},isBreak:function(e){return e&&/^BR$/i.test("string"==typeof e?e:e.nodeName)},isAnchor:function(e){return e&&/^A$/i.test("string"==typeof e?e:e.nodeName)},isMedia:function(e){return e&&/^(IMG|IFRAME|AUDIO|VIDEO|CANVAS)$/i.test("string"==typeof e?e:e.nodeName)},isFigures:function(e){return e&&(this.isMedia(e)||/^(FIGURE)$/i.test("string"==typeof e?e:e.nodeName))},isNumber:function(e){return!!e&&/^-?\d+(\.\d+)?$/.test(e+"")},getNumber:function(e,t){if(!e)return 0;let n=(e+"").match(/-?\d+(\.\d+)?/);return n&&n[0]?(n=n[0],t<0?1*n:0===t?this._w.Math.round(1*n):1*(1*n).toFixed(t)):0},getListChildren:function(e,t){const n=[];return e&&e.children&&0!==e.children.length?(t=t||function(){return!0},function i(l){if(e!==l&&t(l)&&n.push(l),l.children)for(let e=0,t=l.children.length;e<t;e++)i(l.children[e])}(e),n):n},getListChildNodes:function(e,t){const n=[];return e&&0!==e.childNodes.length?(t=t||function(){return!0},function i(l){e!==l&&t(l)&&n.push(l);for(let e=0,t=l.childNodes.length;e<t;e++)i(l.childNodes[e])}(e),n):n},getElementDepth:function(e){if(!e||this.isWysiwygDiv(e))return-1;let t=0;for(e=e.parentNode;e&&!this.isWysiwygDiv(e);)t+=1,e=e.parentNode;return t},compareElements:function(e,t){let n=e,i=t;for(;n&&i&&n.parentNode!==i.parentNode;)n=n.parentNode,i=i.parentNode;if(!n||!i)return{ancestor:null,a:e,b:t,result:0};const l=n.parentNode.childNodes,o=this.getArrayIndex(l,n),s=this.getArrayIndex(l,i);return{ancestor:n.parentNode,a:n,b:i,result:o>s?1:o<s?-1:0}},getParentElement:function(e,t){let n;if("function"==typeof t)n=t;else{let e;/^\./.test(t)?(e="className",t=t.split(".")[1]):/^#/.test(t)?(e="id",t="^"+t.split("#")[1]+"$"):/^:/.test(t)?(e="name",t="^"+t.split(":")[1]+"$"):(e="nodeName",t="^"+t+"$");const i=new this._w.RegExp(t,"i");n=function(t){return i.test(t[e])}}for(;e&&!n(e);){if(this.isWysiwygDiv(e))return null;e=e.parentNode}return e},getPreviousDeepestNode:function(e,t){let n=e.previousSibling;if(!n){for(let i=e.parentNode;i;i=i.parentNode){if(i===t)return null;if(i.previousSibling){n=i.previousSibling;break}}if(!n)return null}for(;n.lastChild;)n=n.lastChild;return n},getNextDeepestNode:function(e,t){let n=e.nextSibling;if(!n){for(let i=e.parentNode;i;i=i.parentNode){if(i===t)return null;if(i.nextSibling){n=i.nextSibling;break}}if(!n)return null}for(;n.firstChild;)n=n.firstChild;return n},getChildElement:function(e,t,n){let i;if("function"==typeof t)i=t;else{let e;/^\./.test(t)?(e="className",t=t.split(".")[1]):/^#/.test(t)?(e="id",t="^"+t.split("#")[1]+"$"):/^:/.test(t)?(e="name",t="^"+t.split(":")[1]+"$"):(e="nodeName",t="^"+("text"===t?"#"+t:t)+"$");const n=new this._w.RegExp(t,"i");i=function(t){return n.test(t[e])}}const l=this.getListChildNodes(e,(function(e){return i(e)}));return l[n?l.length-1:0]},getEdgeChildNodes:function(e,t){if(e){for(t||(t=e);e&&1===e.nodeType&&e.childNodes.length>0&&!this.isBreak(e);)e=e.firstChild;for(;t&&1===t.nodeType&&t.childNodes.length>0&&!this.isBreak(t);)t=t.lastChild;return{sc:e,ec:t||e}}},getOffset:function(e,t){let n=0,i=0,l=3===e.nodeType?e.parentElement:e;const o=this.getParentElement(e,this.isWysiwygDiv.bind(this));for(;l&&!this.hasClass(l,"se-container")&&l!==o;)n+=l.offsetLeft,i+=l.offsetTop,l=l.offsetParent;const s=t&&/iframe/i.test(t.nodeName);return{left:n+(s?t.parentElement.offsetLeft:0),top:i-(o?o.scrollTop:0)+(s?t.parentElement.offsetTop:0)}},getOverlapRangeAtIndex:function(e,t,n,i){if(e<=i?t<n:t>n)return 0;const l=(e>n?e:n)-(t<i?t:i);return(l<0?-1*l:l)+1},changeTxt:function(e,t){e&&t&&(e.textContent=t)},changeElement:function(e,t){if("string"==typeof t)if(e.outerHTML)e.outerHTML=t;else{const n=this.createElement("DIV");n.innerHTML=t,t=n.firstChild,e.parentNode.replaceChild(t,e)}else 1===t.nodeType&&e.parentNode.replaceChild(t,e)},setStyle:function(e,t,n){e.style[t]=n,n||e.style.cssText||e.removeAttribute("style")},hasClass:function(e,t){if(e)return new this._w.RegExp(t).test(e.className)},addClass:function(e,t){if(!e)return;new this._w.RegExp("(\\s|^)"+t+"(\\s|$)").test(e.className)||(e.className+=(e.className.length>0?" ":"")+t)},removeClass:function(e,t){if(!e)return;const n=new this._w.RegExp("(\\s|^)"+t+"(\\s|$)");e.className=e.className.replace(n," ").trim(),e.className.trim()||e.removeAttribute("class")},toggleClass:function(e,t){if(!e)return;let n=!1;const i=new this._w.RegExp("(\\s|^)"+t+"(\\s|$)");return i.test(e.className)?e.className=e.className.replace(i," ").trim():(e.className+=" "+t,n=!0),e.className.trim()||e.removeAttribute("class"),n},isImportantDisabled:function(e){return e.hasAttribute("data-important-disabled")},setDisabledButtons:function(e,t,n){for(let i=0,l=t.length;i<l;i++){let l=t[i];!n&&this.isImportantDisabled(l)||(l.disabled=e),n&&(e?l.setAttribute("data-important-disabled",""):l.removeAttribute("data-important-disabled"))}},removeItem:function(e){e&&("function"==typeof e.remove?e.remove():e.parentNode&&e.parentNode.removeChild(e))},removeItemAllParents:function(e,t,n){if(!e)return null;let i=null;return t||(t=function(e){if(e===n||this.isComponent(e))return!1;const t=e.textContent.trim();return 0===t.length||/^(\n|\u200B)+$/.test(t)}.bind(this)),function e(n){if(!k.isWysiwygDiv(n)){const l=n.parentNode;l&&t(n)&&(i={sc:n.previousElementSibling,ec:n.nextElementSibling},k.removeItem(n),e(l))}}(e),i},detachNestedList:function(e,t){const n=this._deleteNestedList(e);let i,l,o;if(n){i=n.cloneNode(!1),l=n.childNodes;const t=this.getPositionIndex(e);for(;l[t];)i.appendChild(l[t])}else i=e;if(t)o=this.getListChildren(i,function(e){return this.isListCell(e)&&!e.previousElementSibling}.bind(this));else{const t=this.getElementDepth(e)+2;o=this.getListChildren(e,function(e){return this.isListCell(e)&&!e.previousElementSibling&&this.getElementDepth(e)===t}.bind(this))}for(let e=0,t=o.length;e<t;e++)this._deleteNestedList(o[e]);return n&&(n.parentNode.insertBefore(i,n.nextSibling),l&&0===l.length&&this.removeItem(n)),i===e?i.parentNode:i},_deleteNestedList:function(e){const t=e.parentNode;let n,i,l,o,s,a=t,r=a.parentNode;for(;this.isListCell(r);){for(o=this.getPositionIndex(e),n=r.nextElementSibling,i=r.parentNode,l=a;l;){if(a=a.nextSibling,this.isList(l)){for(s=l.childNodes;s[o];)i.insertBefore(s[o],n);0===s.length&&this.removeItem(l)}else i.appendChild(l);l=a}a=i,r=i.parentNode}return 0===t.children.length&&this.removeItem(t),i},splitElement:function(e,t,n){if(this.isWysiwygDiv(e))return e;if(t&&!this.isNumber(t)){const n=e.childNodes;let i=this.getPositionIndex(t);const l=e.cloneNode(!1),o=e.cloneNode(!1);for(let e=0,t=n.length;e<t;e++){if(e<i)l.appendChild(n[e]);else{if(!(e>i))continue;o.appendChild(n[e])}e--,t--,i--}return l.childNodes.length>0&&e.parentNode.insertBefore(l,e),o.childNodes.length>0&&e.parentNode.insertBefore(o,e.nextElementSibling),e}const i=e.parentNode;let l,o,s,a=0,r=1,c=!0;if((!n||n<0)&&(n=0),3===e.nodeType){if(a=this.getPositionIndex(e),t>=0&&e.length!==t){e.splitText(t);const n=this.getNodeFromPath([a+1],i);this.onlyZeroWidthSpace(n)&&(n.data=this.zeroWidthSpace)}}else if(1===e.nodeType){if(0===t){for(;e.firstChild;)e=e.firstChild;if(3===e.nodeType){const t=this.createTextNode(this.zeroWidthSpace);e.parentNode.insertBefore(t,e),e=t}}e.previousSibling?e=e.previousSibling:this.getElementDepth(e)===n&&(c=!1)}1===e.nodeType&&(r=0);let d=e;for(;this.getElementDepth(d)>n;)for(a=this.getPositionIndex(d)+r,d=d.parentNode,s=l,l=d.cloneNode(!1),o=d.childNodes,s&&(this.isListCell(l)&&this.isList(s)&&s.firstElementChild?(l.innerHTML=s.firstElementChild.innerHTML,k.removeItem(s.firstElementChild),s.children.length>0&&l.appendChild(s)):l.appendChild(s));o[a];)l.appendChild(o[a]);d.childNodes.length<=1&&(!d.firstChild||0===d.firstChild.textContent.length)&&(d.innerHTML="<br>");const u=d.parentNode;return c&&(d=d.nextSibling),l?(this.mergeSameTags(l,null,!1),this.mergeNestedTags(l,function(e){return this.isList(e)}.bind(this)),l.childNodes.length>0?u.insertBefore(l,d):l=d,this.isListCell(l)&&l.children&&this.isList(l.children[0])&&l.insertBefore(this.createElement("BR"),l.children[0]),0===i.childNodes.length&&this.removeItem(i),l):d},mergeSameTags:function(e,t,n){const i=this,l=t?t.length:0;let o=null;return l&&(o=this._w.Array.apply(null,new this._w.Array(l)).map(this._w.Number.prototype.valueOf,0)),function e(s,a,r){const c=s.childNodes;for(let d,u,h=0,g=c.length;h<g&&(d=c[h],u=c[h+1],d);h++)if(!(i.isBreak(d)||i.isMedia(d)||i.isInputElement(d)))if(n&&i._isIgnoreNodeChange(d)||!n&&(i.isTable(d)||i.isListCell(d)||i.isFormatElement(d)&&!i.isFreeFormatElement(d)))(i.isTable(d)||i.isListCell(d))&&e(d,a+1,h);else{if(1===g&&s.nodeName===d.nodeName&&s.parentNode){if(l){let e,n,o,r,c;for(let u=0;u<l;u++)if(e=t[u],e&&e[a]===h){for(n=d,o=s,r=a,c=!0;r>=0;){if(i.getArrayIndex(o.childNodes,n)!==e[r]){c=!1;break}n=d.parentNode,o=n.parentNode,r--}c&&(e.splice(a,1),e[a]=h)}}i.copyTagAttributes(d,s),s.parentNode.insertBefore(d,s),i.removeItem(s)}if(!u){1===d.nodeType&&e(d,a+1,h);break}if(d.nodeName===u.nodeName&&i.isSameAttributes(d,u)&&d.href===u.href){const e=d.childNodes;let n=0;for(let t=0,i=e.length;t<i;t++)e[t].textContent.length>0&&n++;const s=d.lastChild,c=u.firstChild;let g=0;if(s&&c){const e=3===s.nodeType&&3===c.nodeType;g=s.textContent.length;let i=s.previousSibling;for(;i&&3===i.nodeType;)g+=i.textContent.length,i=i.previousSibling;if(n>0&&3===s.nodeType&&3===c.nodeType&&(s.textContent.length>0||c.textContent.length>0)&&n--,l){let i=null;for(let d=0;d<l;d++)if(i=t[d],i&&i[a]>h){if(a>0&&i[a-1]!==r)continue;i[a]-=1,i[a+1]>=0&&i[a]===h&&(i[a+1]+=n,e&&s&&3===s.nodeType&&c&&3===c.nodeType&&(o[d]+=g))}}}if(3===d.nodeType){if(g=d.textContent.length,d.textContent+=u.textContent,l){let e=null;for(let i=0;i<l;i++)if(e=t[i],e&&e[a]>h){if(a>0&&e[a-1]!==r)continue;e[a]-=1,e[a+1]>=0&&e[a]===h&&(e[a+1]+=n,o[i]+=g)}}}else d.innerHTML+=u.innerHTML;i.removeItem(u),h--}else 1===d.nodeType&&e(d,a+1,h)}}(e,0,0),o},mergeNestedTags:function(e,t){"string"==typeof t?t=function(e){return this.test(e.tagName)}.bind(new this._w.RegExp("^("+(t||".+")+")$","i")):"function"!=typeof t&&(t=function(){return!0}),function e(n){let i=n.children;if(1===i.length&&i[0].nodeName===n.nodeName&&t(n)){const e=i[0];for(i=e.children;i[0];)n.appendChild(i[0]);n.removeChild(e)}for(let t=0,i=n.children.length;t<i;t++)e(n.children[t])}(e)},removeEmptyNode:function(e,t,n){const i=this;t&&(t=i.getParentElement(t,(function(t){return e===t.parentElement}))),function n(l){if(i._notTextNode(l)||l===t||i.isNonEditable(l))return 0;if(l===e||!i.onlyZeroWidthSpace(l.textContent)||l.firstChild&&i.isBreak(l.firstChild)||l.querySelector(i._allowedEmptyNodeList)){const e=l.children;for(let t=0,l=e.length,o=0;t<l;t++)e[t+o]&&!i.isComponent(e[t+o])&&(o+=n(e[t+o]))}else if(l.parentNode)return l.parentNode.removeChild(l),-1;return 0}(e),0===e.childNodes.length&&(n?this.removeItem(e):e.innerHTML="<br>")},htmlRemoveWhiteSpace:function(e){return e?e.trim().replace(/<\/?(?!strong|span|font|b|var|i|em|u|ins|s|strike|del|sub|sup|mark|a|label|code|summary)[^>^<]+>\s+(?=<)/gi,(function(e){return e.replace(/\n/g,"").replace(/\s+/," ")})):""},htmlCompress:function(e){return e.replace(/\n/g,"").replace(/>\s+</g,"> <")},sortByDepth:function(e,t){const n=t?1:-1,i=-1*n;e.sort(function(e,t){return this.isListCell(e)&&this.isListCell(t)?(e=this.getElementDepth(e))>(t=this.getElementDepth(t))?n:e<t?i:0:0}.bind(this))},escapeStringRegexp:function(e){if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")},_isExcludeSelectionElement:function(e){return!/FIGCAPTION/i.test(e.nodeName)&&(this.isComponent(e)||/FIGURE/i.test(e.nodeName))},_isIgnoreNodeChange:function(e){return e&&3!==e.nodeType&&(this.isNonEditable(e)||!this.isTextStyleElement(e))},_isMaintainedNode:function(e){return e&&3!==e.nodeType&&/^(a|label|code|summary)$/i.test("string"==typeof e?e:e.nodeName)},_isSizeNode:function(e){return e&&3!==e.nodeType&&this.isTextStyleElement(e)&&!!e.style.fontSize},_notTextNode:function(e){return e&&3!==e.nodeType&&(this.isComponent(e)||/^(br|input|select|canvas|img|iframe|audio|video)$/i.test("string"==typeof e?e:e.nodeName))},_disallowedTags:function(e){return/^(meta|script|link|style|[a-z]+\:[a-z]+)$/i.test(e.nodeName)},createTagsWhitelist:function(e){return new RegExp("<\\/?\\b(?!\\b"+(e||"").replace(/\|/g,"\\b|\\b")+"\\b)[^>]*>","gi")},createTagsBlacklist:function(e){return new RegExp("<\\/?\\b(?:\\b"+(e||"^").replace(/\|/g,"\\b|\\b")+"\\b)[^>]*>","gi")},_consistencyCheckOfHTML:function(e,t,n,i,l){const o=[],s=[],a=[],r=[],c=this.getListChildNodes(e,function(c){if(1!==c.nodeType)return this.isList(c.parentElement)&&o.push(c),!1;if(n.test(c.nodeName)||!t.test(c.nodeName)&&0===c.childNodes.length&&this.isNotCheckingNode(c))return o.push(c),!1;const d=!this.getParentElement(c,this.isNotCheckingNode);if(!this.isTable(c)&&!this.isListCell(c)&&!this.isAnchor(c)&&(this.isFormatElement(c)||this.isRangeFormatElement(c)||this.isTextStyleElement(c))&&0===c.childNodes.length&&d)return s.push(c),!1;if(this.isList(c.parentNode)&&!this.isList(c)&&!this.isListCell(c))return a.push(c),!1;if(this.isCell(c)){const e=c.firstElementChild;if(!this.isFormatElement(e)&&!this.isRangeFormatElement(e)&&!this.isComponent(e))return r.push(c),!1}if(d&&c.className){const e=new this._w.Array(c.classList).map(i).join(" ").trim();e?c.className=e:c.removeAttribute("class")}return l&&c.parentNode!==e&&d&&(this.isListCell(c)&&!this.isList(c.parentNode)||(this.isFormatElement(c)||this.isComponent(c))&&!this.isRangeFormatElement(c.parentNode)&&!this.getParentElement(c,this.isComponent))}.bind(this));for(let e=0,t=o.length;e<t;e++)this.removeItem(o[e]);const d=[];for(let e,t,n=0,i=c.length;n<i;n++)if(e=c[n],t=e.parentNode,t&&t.parentNode)if(this.getParentElement(e,this.isListCell)){const n=e.childNodes;for(let l=n.length-1;i>=0;l--)t.insertBefore(e,n[l]);d.push(e)}else t.parentNode.insertBefore(e,t),d.push(t);for(let e,t=0,n=d.length;t<n;t++)e=d[t],this.onlyZeroWidthSpace(e.textContent.trim())&&this.removeItem(e);for(let e=0,t=s.length;e<t;e++)this.removeItem(s[e]);for(let e,t,n,i,l=0,o=a.length;l<o;l++)if(e=a[l],i=e.parentNode,i)if(t=this.createElement("LI"),this.isFormatElement(e)){for(n=e.childNodes;n[0];)t.appendChild(n[0]);i.insertBefore(t,e),this.removeItem(e)}else e=e.nextSibling,t.appendChild(a[l]),i.insertBefore(t,e);for(let e,t,n=0,i=r.length;n<i;n++)e=r[n],t=this.createElement("DIV"),t.innerHTML=0===e.textContent.trim().length&&0===e.children.length?"<br>":e.innerHTML,e.innerHTML=t.outerHTML},_setDefaultOptionStyle:function(e,t){let n="";e.height&&(n+="height:"+e.height+";"),e.minHeight&&(n+="min-height:"+e.minHeight+";"),e.maxHeight&&(n+="max-height:"+e.maxHeight+";"),e.position&&(n+="position:"+e.position+";"),e.width&&(n+="width:"+e.width+";"),e.minWidth&&(n+="min-width:"+e.minWidth+";"),e.maxWidth&&(n+="max-width:"+e.maxWidth+";");let i="",l="",o="";const s=(t=n+t).split(";");for(let t,n=0,a=s.length;n<a;n++)t=s[n].trim(),t&&(/^(min-|max-)?width\s*:/.test(t)||/^(z-index|position)\s*:/.test(t)?i+=t+";":/^(min-|max-)?height\s*:/.test(t)?(/^height/.test(t)&&"auto"===t.split(":")[1].trim()&&(e.height="auto"),l+=t+";"):o+=t+";");return{top:i,frame:l,editor:o}},_setIframeDocument:function(e,t){e.setAttribute("scrolling","auto"),e.contentDocument.head.innerHTML='<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">'+this._setIframeCssTags(t),e.contentDocument.body.className=t._editableClass,e.contentDocument.body.setAttribute("contenteditable",!0),e.contentDocument.body.setAttribute("autocorrect","off")},_setIframeCssTags:function(e){const t=e.iframeCSSFileName,n=this._w.RegExp;let i="";for(let e,l=0,o=t.length;l<o;l++){if(e=[],/(^https?:\/\/)|(^data:text\/css,)/.test(t[l]))e.push(t[l]);else{const i=new n("(^|.*[\\/])"+t[l]+"(\\..+)?\\.css(?:\\?.*|;.*)?$","i");for(let t,n=document.getElementsByTagName("link"),l=0,o=n.length;l<o;l++)t=n[l].href.match(i),t&&e.push(t[0])}if(!e||0===e.length)throw'[SUNEDITOR.constructor.iframe.fail] The suneditor CSS files installation path could not be automatically detected. Please set the option property "iframeCSSFileName" before creating editor instances.';for(let t=0,n=e.length;t<n;t++)i+='<link href="'+e[t]+'" rel="stylesheet">'}return i+("auto"===e.height?"<style>\n/** Iframe height auto */\nbody{height: min-content; overflow: hidden;}\n</style>":"")}};var L=k,B={init:function(e,t){"object"!=typeof t&&(t={});const n=document;this._initOptions(e,t);const i=n.createElement("DIV");i.className="sun-editor"+(t.rtl?" se-rtl":""),e.id&&(i.id="suneditor_"+e.id);const l=n.createElement("DIV");l.className="se-container";const o=this._createToolBar(n,t.buttonList,t.plugins,t),s=o.element.cloneNode(!1);s.className+=" se-toolbar-shadow",o.element.style.visibility="hidden",o.pluginCallButtons.math&&this._checkKatexMath(t.katex);const a=n.createElement("DIV");a.className="se-arrow";const r=n.createElement("DIV");r.className="se-toolbar-sticky-dummy";const c=n.createElement("DIV");c.className="se-wrapper";const d=this._initElements(t,i,o.element,a),u=d.bottomBar,h=d.wysiwygFrame,g=d.placeholder;let p=d.codeView;const m=u.resizingBar,f=u.navigation,_=u.charWrapper,b=u.charCounter,v=n.createElement("DIV");v.className="se-loading-box sun-editor-common",v.innerHTML='<div class="se-loading-effect"></div>';const y=n.createElement("DIV");y.className="se-line-breaker",y.innerHTML='<button class="se-btn">'+t.icons.line_break+"</button>";const C=n.createElement("DIV");C.className+="se-line-breaker-component";const w=C.cloneNode(!0);C.innerHTML=w.innerHTML=t.icons.line_break;const x=n.createElement("DIV");x.className="se-resizing-back";const E=n.createElement("INPUT");E.tabIndex=-1,E.style.cssText="position: fixed !important; top: -10000px !important; display: block !important; width: 0 !important; height: 0 !important; margin: 0 !important; padding: 0 !important;";const S=t.toolbarContainer;S&&(S.appendChild(o.element),S.appendChild(s));const N=t.resizingBarContainer;return m&&N&&N.appendChild(m),c.appendChild(p),g&&c.appendChild(g),S||(l.appendChild(o.element),l.appendChild(s)),l.appendChild(r),l.appendChild(c),l.appendChild(x),l.appendChild(v),l.appendChild(y),l.appendChild(C),l.appendChild(w),l.appendChild(E),m&&!N&&l.appendChild(m),i.appendChild(l),p=this._checkCodeMirror(t,p),{constructed:{_top:i,_relative:l,_toolBar:o.element,_toolbarShadow:s,_menuTray:o._menuTray,_editorArea:c,_wysiwygArea:h,_codeArea:p,_placeholder:g,_resizingBar:m,_navigation:f,_charWrapper:_,_charCounter:b,_loading:v,_lineBreaker:y,_lineBreaker_t:C,_lineBreaker_b:w,_resizeBack:x,_stickyDummy:r,_arrow:a,_focusTemp:E},options:t,plugins:o.plugins,pluginCallButtons:o.pluginCallButtons,_responsiveButtons:o.responsiveButtons}},_checkCodeMirror:function(e,t){if(e.codeMirror){const n=[{mode:"htmlmixed",htmlMode:!0,lineNumbers:!0,lineWrapping:!0},e.codeMirror.options||{}].reduce((function(e,t){for(let n in t)L.hasOwn(t,n)&&(e[n]=t[n]);return e}),{});"auto"===e.height&&(n.viewportMargin=1/0,n.height="auto");const i=e.codeMirror.src.fromTextArea(t,n);i.display.wrapper.style.cssText=t.style.cssText,e.codeMirrorEditor=i,(t=i.display.wrapper).className+=" se-wrapper-code-mirror"}return t},_checkKatexMath:function(e){if(!e)throw Error('[SUNEDITOR.create.fail] To use the math button you need to add a "katex" object to the options.');const t=[{throwOnError:!1},e.options||{}].reduce((function(e,t){for(let n in t)L.hasOwn(t,n)&&(e[n]=t[n]);return e}),{});e.options=t},_setOptions:function(e,t,n){this._initOptions(t.element.originElement,e);const i=t.element,l=i.relative,o=i.editorArea,s=e.toolbarContainer&&e.toolbarContainer!==n.toolbarContainer,a=e.lang!==n.lang||e.buttonList!==n.buttonList||e.mode!==n.mode||s,r=this._createToolBar(document,a?e.buttonList:n.buttonList,e.plugins,e);r.pluginCallButtons.math&&this._checkKatexMath(e.katex);const c=document.createElement("DIV");c.className="se-arrow",a&&(r.element.style.visibility="hidden",s?(e.toolbarContainer.appendChild(r.element),i.toolbar.parentElement.removeChild(i.toolbar)):i.toolbar.parentElement.replaceChild(r.element,i.toolbar),i.toolbar=r.element,i._menuTray=r._menuTray,i._arrow=c);const d=this._initElements(e,i.topArea,a?r.element:i.toolbar,c),u=d.bottomBar,h=d.wysiwygFrame,g=d.placeholder;let p=d.codeView;return i.resizingBar&&L.removeItem(i.resizingBar),u.resizingBar&&(e.resizingBarContainer&&e.resizingBarContainer!==n.resizingBarContainer?e.resizingBarContainer.appendChild(u.resizingBar):l.appendChild(u.resizingBar)),o.innerHTML="",o.appendChild(p),g&&o.appendChild(g),p=this._checkCodeMirror(e,p),i.resizingBar=u.resizingBar,i.navigation=u.navigation,i.charWrapper=u.charWrapper,i.charCounter=u.charCounter,i.wysiwygFrame=h,i.code=p,i.placeholder=g,e.rtl?L.addClass(i.topArea,"se-rtl"):L.removeClass(i.topArea,"se-rtl"),{callButtons:r.pluginCallButtons,plugins:r.plugins,toolbar:r}},_initElements:function(e,t,n,i){t.style.cssText=e._editorStyles.top,/inline/i.test(e.mode)?(n.className+=" se-toolbar-inline",n.style.width=e.toolbarWidth):/balloon/i.test(e.mode)&&(n.className+=" se-toolbar-balloon",n.style.width=e.toolbarWidth,n.appendChild(i));const l=document.createElement(e.iframe?"IFRAME":"DIV");if(l.className="se-wrapper-inner se-wrapper-wysiwyg",e.iframe)l.allowFullscreen=!0,l.frameBorder=0,l.style.cssText=e._editorStyles.frame,l.className+=e.className;else{l.setAttribute("contenteditable",!0),l.setAttribute("autocorrect","off"),l.setAttribute("scrolling","auto");for(let t in e.iframeAttributes)l.setAttribute(t,e.iframeAttributes[t]);l.className+=" "+e._editableClass,l.style.cssText=e._editorStyles.frame+e._editorStyles.editor,l.className+=e.className}const o=document.createElement("TEXTAREA");o.className="se-wrapper-inner se-wrapper-code"+e.className,o.style.cssText=e._editorStyles.frame,o.style.display="none","auto"===e.height&&(o.style.overflow="hidden");let s=null,a=null,r=null,c=null;if(e.resizingBar&&(s=document.createElement("DIV"),s.className="se-resizing-bar sun-editor-common",a=document.createElement("DIV"),a.className="se-navigation sun-editor-common",s.appendChild(a),e.charCounter)){if(r=document.createElement("DIV"),r.className="se-char-counter-wrapper",e.charCounterLabel){const t=document.createElement("SPAN");t.className="se-char-label",t.textContent=e.charCounterLabel,r.appendChild(t)}if(c=document.createElement("SPAN"),c.className="se-char-counter",c.textContent="0",r.appendChild(c),e.maxCharCount>0){const t=document.createElement("SPAN");t.textContent=" / "+e.maxCharCount,r.appendChild(t)}s.appendChild(r)}let d=null;return e.placeholder&&(d=document.createElement("SPAN"),d.className="se-placeholder",d.innerText=e.placeholder),{bottomBar:{resizingBar:s,navigation:a,charWrapper:r,charCounter:c},wysiwygFrame:l,codeView:o,placeholder:d}},_initOptions:function(e,t){const n={};if(t.plugins){const e=t.plugins,i=e.length?e:Object.keys(e).map((function(t){return e[t]}));for(let e,t=0,l=i.length;t<l;t++)e=i[t].default||i[t],n[e.name]=e}t.plugins=n,t.strictMode=!1!==t.strictMode,t.strictHTMLValidation=!1!==t.strictHTMLValidation,t.lang=t.lang||T.a,t.value="string"==typeof t.value?t.value:null,t.allowedClassNames=new L._w.RegExp((t.allowedClassNames&&"string"==typeof t.allowedClassNames?t.allowedClassNames+"|":"")+"^__se__|se-|katex"),t.historyStackDelayTime="number"==typeof t.historyStackDelayTime?t.historyStackDelayTime:400,t.frameAttrbutes=t.frameAttrbutes||{},t.defaultTag="string"==typeof t.defaultTag&&t.defaultTag.length>0?t.defaultTag:"p";const i=t.textTags=[{bold:"STRONG",underline:"U",italic:"EM",strike:"DEL",sub:"SUB",sup:"SUP"},t.textTags||{}].reduce((function(e,t){for(let n in t)e[n]=t[n];return e}),{});t._textTagsMap={strong:i.bold.toLowerCase(),b:i.bold.toLowerCase(),u:i.underline.toLowerCase(),ins:i.underline.toLowerCase(),em:i.italic.toLowerCase(),i:i.italic.toLowerCase(),del:i.strike.toLowerCase(),strike:i.strike.toLowerCase(),s:i.strike.toLowerCase(),sub:i.sub.toLowerCase(),sup:i.sup.toLowerCase()},t._defaultCommand={bold:t.textTags.bold,underline:t.textTags.underline,italic:t.textTags.italic,strike:t.textTags.strike,subscript:t.textTags.sub,superscript:t.textTags.sup},t.__allowedScriptTag=!0===t.__allowedScriptTag;t.tagsBlacklist=t.tagsBlacklist||"",t._defaultTagsWhitelist=("string"==typeof t._defaultTagsWhitelist?t._defaultTagsWhitelist:"br|p|div|pre|blockquote|h1|h2|h3|h4|h5|h6|ol|ul|li|hr|figure|figcaption|img|iframe|audio|video|source|table|thead|tbody|tr|th|td|a|b|strong|var|i|em|u|ins|s|span|strike|del|sub|sup|code|svg|path|details|summary")+(t.__allowedScriptTag?"|script":""),t._editorTagsWhitelist="*"===t.addTagsWhitelist?"*":this._setWhitelist(t._defaultTagsWhitelist+("string"==typeof t.addTagsWhitelist&&t.addTagsWhitelist.length>0?"|"+t.addTagsWhitelist:""),t.tagsBlacklist),t.pasteTagsBlacklist=t.tagsBlacklist+(t.tagsBlacklist&&t.pasteTagsBlacklist?"|"+t.pasteTagsBlacklist:t.pasteTagsBlacklist||""),t.pasteTagsWhitelist="*"===t.pasteTagsWhitelist?"*":this._setWhitelist("string"==typeof t.pasteTagsWhitelist?t.pasteTagsWhitelist:t._editorTagsWhitelist,t.pasteTagsBlacklist),t.attributesWhitelist=t.attributesWhitelist&&"object"==typeof t.attributesWhitelist?t.attributesWhitelist:null,t.attributesBlacklist=t.attributesBlacklist&&"object"==typeof t.attributesBlacklist?t.attributesBlacklist:null,t.mode=t.mode||"classic",t.rtl=!!t.rtl,t.lineAttrReset=["id"].concat(t.lineAttrReset&&"string"==typeof t.lineAttrReset?t.lineAttrReset.toLowerCase().split("|"):[]),t._editableClass="sun-editor-editable"+(t.rtl?" se-rtl":""),t._printClass="string"==typeof t._printClass?t._printClass:null,t.toolbarWidth=t.toolbarWidth?L.isNumber(t.toolbarWidth)?t.toolbarWidth+"px":t.toolbarWidth:"auto",t.toolbarContainer="string"==typeof t.toolbarContainer?document.querySelector(t.toolbarContainer):t.toolbarContainer,t.stickyToolbar=/balloon/i.test(t.mode)||t.toolbarContainer?-1:void 0===t.stickyToolbar?0:/^\d+/.test(t.stickyToolbar)?L.getNumber(t.stickyToolbar,0):-1,t.hideToolbar=!!t.hideToolbar,t.fullScreenOffset=void 0===t.fullScreenOffset?0:/^\d+/.test(t.fullScreenOffset)?L.getNumber(t.fullScreenOffset,0):0,t.fullPage=!!t.fullPage,t.iframe=t.fullPage||!!t.iframe,t.iframeAttributes=t.iframeAttributes||{},t.iframeCSSFileName=t.iframe?"string"==typeof t.iframeCSSFileName?[t.iframeCSSFileName]:t.iframeCSSFileName||["suneditor"]:null,t.previewTemplate="string"==typeof t.previewTemplate?t.previewTemplate:null,t.printTemplate="string"==typeof t.printTemplate?t.printTemplate:null,t.codeMirror=t.codeMirror?t.codeMirror.src?t.codeMirror:{src:t.codeMirror}:null,t.katex=t.katex?t.katex.src?t.katex:{src:t.katex}:null,t.mathFontSize=t.mathFontSize?t.mathFontSize:[{text:"1",value:"1em"},{text:"1.5",value:"1.5em"},{text:"2",value:"2em"},{text:"2.5",value:"2.5em"}],t.position="string"==typeof t.position?t.position:null,t.display=t.display||("none"!==e.style.display&&e.style.display?e.style.display:"block"),t.popupDisplay=t.popupDisplay||"full",t.resizingBar=void 0===t.resizingBar?!/inline|balloon/i.test(t.mode):t.resizingBar,t.showPathLabel=!!t.resizingBar&&("boolean"!=typeof t.showPathLabel||t.showPathLabel),t.resizeEnable=void 0===t.resizeEnable||!!t.resizeEnable,t.resizingBarContainer="string"==typeof t.resizingBarContainer?document.querySelector(t.resizingBarContainer):t.resizingBarContainer,t.charCounter=t.maxCharCount>0||"boolean"==typeof t.charCounter&&t.charCounter,t.charCounterType="string"==typeof t.charCounterType?t.charCounterType:"char",t.charCounterLabel="string"==typeof t.charCounterLabel?t.charCounterLabel.trim():null,t.maxCharCount=L.isNumber(t.maxCharCount)&&t.maxCharCount>-1?1*t.maxCharCount:null,t.width=t.width?L.isNumber(t.width)?t.width+"px":t.width:e.clientWidth?e.clientWidth+"px":"100%",t.minWidth=(L.isNumber(t.minWidth)?t.minWidth+"px":t.minWidth)||"",t.maxWidth=(L.isNumber(t.maxWidth)?t.maxWidth+"px":t.maxWidth)||"",t.height=t.height?L.isNumber(t.height)?t.height+"px":t.height:e.clientHeight?e.clientHeight+"px":"auto",t.minHeight=(L.isNumber(t.minHeight)?t.minHeight+"px":t.minHeight)||"",t.maxHeight=(L.isNumber(t.maxHeight)?t.maxHeight+"px":t.maxHeight)||"",t.className="string"==typeof t.className&&t.className.length>0?" "+t.className:"",t.defaultStyle="string"==typeof t.defaultStyle?t.defaultStyle:"",t.font=t.font?t.font:["Arial","Comic Sans MS","Courier New","Impact","Georgia","tahoma","Trebuchet MS","Verdana"],t.fontSize=t.fontSize?t.fontSize:null,t.formats=t.formats?t.formats:null,t.colorList=t.colorList?t.colorList:null,t.lineHeights=t.lineHeights?t.lineHeights:null,t.paragraphStyles=t.paragraphStyles?t.paragraphStyles:null,t.textStyles=t.textStyles?t.textStyles:null,t.fontSizeUnit="string"==typeof t.fontSizeUnit&&t.fontSizeUnit.trim().toLowerCase()||"px",t.alignItems="object"==typeof t.alignItems?t.alignItems:t.rtl?["right","center","left","justify"]:["left","center","right","justify"],t.imageResizing=void 0===t.imageResizing||t.imageResizing,t.imageHeightShow=void 0===t.imageHeightShow||!!t.imageHeightShow,t.imageAlignShow=void 0===t.imageAlignShow||!!t.imageAlignShow,t.imageWidth=t.imageWidth?L.isNumber(t.imageWidth)?t.imageWidth+"px":t.imageWidth:"auto",t.imageHeight=t.imageHeight?L.isNumber(t.imageHeight)?t.imageHeight+"px":t.imageHeight:"auto",t.imageSizeOnlyPercentage=!!t.imageSizeOnlyPercentage,t._imageSizeUnit=t.imageSizeOnlyPercentage?"%":"px",t.imageRotation=void 0!==t.imageRotation?t.imageRotation:!(t.imageSizeOnlyPercentage||!t.imageHeightShow),t.imageFileInput=void 0===t.imageFileInput||t.imageFileInput,t.imageUrlInput=void 0===t.imageUrlInput||!t.imageFileInput||t.imageUrlInput,t.imageUploadHeader=t.imageUploadHeader||null,t.imageUploadUrl="string"==typeof t.imageUploadUrl?t.imageUploadUrl:null,t.imageUploadSizeLimit=/\d+/.test(t.imageUploadSizeLimit)?L.getNumber(t.imageUploadSizeLimit,0):null,t.imageMultipleFile=!!t.imageMultipleFile,t.imageAccept="string"!=typeof t.imageAccept||"*"===t.imageAccept.trim()?"image/*":t.imageAccept.trim()||"image/*",t.imageGalleryData=t.imageGalleryData||null,t.imageGalleryUrl="string"==typeof t.imageGalleryUrl?t.imageGalleryUrl:null,t.imageGalleryHeader=t.imageGalleryHeader||null,t.videoResizing=void 0===t.videoResizing||t.videoResizing,t.videoHeightShow=void 0===t.videoHeightShow||!!t.videoHeightShow,t.videoAlignShow=void 0===t.videoAlignShow||!!t.videoAlignShow,t.videoRatioShow=void 0===t.videoRatioShow||!!t.videoRatioShow,t.videoWidth=t.videoWidth&&L.getNumber(t.videoWidth,0)?L.isNumber(t.videoWidth)?t.videoWidth+"px":t.videoWidth:"",t.videoHeight=t.videoHeight&&L.getNumber(t.videoHeight,0)?L.isNumber(t.videoHeight)?t.videoHeight+"px":t.videoHeight:"",t.videoSizeOnlyPercentage=!!t.videoSizeOnlyPercentage,t._videoSizeUnit=t.videoSizeOnlyPercentage?"%":"px",t.videoRotation=void 0!==t.videoRotation?t.videoRotation:!(t.videoSizeOnlyPercentage||!t.videoHeightShow),t.videoRatio=L.getNumber(t.videoRatio,4)||.5625,t.videoRatioList=t.videoRatioList?t.videoRatioList:null,t.youtubeQuery=(t.youtubeQuery||"").replace("?",""),t.vimeoQuery=(t.vimeoQuery||"").replace("?",""),t.videoFileInput=!!t.videoFileInput,t.videoUrlInput=void 0===t.videoUrlInput||!t.videoFileInput||t.videoUrlInput,t.videoUploadHeader=t.videoUploadHeader||null,t.videoUploadUrl="string"==typeof t.videoUploadUrl?t.videoUploadUrl:null,t.videoUploadSizeLimit=/\d+/.test(t.videoUploadSizeLimit)?L.getNumber(t.videoUploadSizeLimit,0):null,t.videoMultipleFile=!!t.videoMultipleFile,t.videoTagAttrs=t.videoTagAttrs||null,t.videoIframeAttrs=t.videoIframeAttrs||null,t.videoAccept="string"!=typeof t.videoAccept||"*"===t.videoAccept.trim()?"video/*":t.videoAccept.trim()||"video/*",t.audioWidth=t.audioWidth?L.isNumber(t.audioWidth)?t.audioWidth+"px":t.audioWidth:"",t.audioHeight=t.audioHeight?L.isNumber(t.audioHeight)?t.audioHeight+"px":t.audioHeight:"",t.audioFileInput=!!t.audioFileInput,t.audioUrlInput=void 0===t.audioUrlInput||!t.audioFileInput||t.audioUrlInput,t.audioUploadHeader=t.audioUploadHeader||null,t.audioUploadUrl="string"==typeof t.audioUploadUrl?t.audioUploadUrl:null,t.audioUploadSizeLimit=/\d+/.test(t.audioUploadSizeLimit)?L.getNumber(t.audioUploadSizeLimit,0):null,t.audioMultipleFile=!!t.audioMultipleFile,t.audioTagAttrs=t.audioTagAttrs||null,t.audioAccept="string"!=typeof t.audioAccept||"*"===t.audioAccept.trim()?"audio/*":t.audioAccept.trim()||"audio/*",t.tableCellControllerPosition="string"==typeof t.tableCellControllerPosition?t.tableCellControllerPosition.toLowerCase():"cell",t.linkTargetNewWindow=!!t.linkTargetNewWindow,t.linkProtocol="string"==typeof t.linkProtocol?t.linkProtocol:null,t.linkRel=Array.isArray(t.linkRel)?t.linkRel:[],t.linkRelDefault=t.linkRelDefault||{},t.tabDisable=!!t.tabDisable,t.shortcutsDisable=Array.isArray(t.shortcutsDisable)?t.shortcutsDisable:[],t.shortcutsHint=void 0===t.shortcutsHint||!!t.shortcutsHint,t.callBackSave=t.callBackSave?t.callBackSave:null,t.templates=t.templates?t.templates:null,t.placeholder="string"==typeof t.placeholder?t.placeholder:null,t.mediaAutoSelect=void 0===t.mediaAutoSelect||!!t.mediaAutoSelect,t.buttonList=t.buttonList?t.buttonList:[["undo","redo"],["bold","underline","italic","strike","subscript","superscript"],["removeFormat"],["outdent","indent"],["fullScreen","showBlocks","codeView"],["preview","print"]],t.rtl&&(t.buttonList=t.buttonList.reverse()),t.icons=t.icons&&"object"==typeof t.icons?[S,t.icons].reduce((function(e,t){for(let n in t)L.hasOwn(t,n)&&(e[n]=t[n]);return e}),{}):S,t.icons=t.rtl?[t.icons,t.icons.rtl].reduce((function(e,t){for(let n in t)L.hasOwn(t,n)&&(e[n]=t[n]);return e}),{}):t.icons,t.__listCommonStyle=t.__listCommonStyle||["fontSize","color","fontFamily","fontWeight","fontStyle"],t._editorStyles=L._setDefaultOptionStyle(t,t.defaultStyle)},_setWhitelist:function(e,t){if("string"!=typeof t)return e;t=t.split("|"),e=e.split("|");for(let n,i=0,l=t.length;i<l;i++)n=e.indexOf(t[i]),n>-1&&e.splice(n,1);return e.join("|")},_defaultButtons:function(e){const t=e.icons,n=e.lang,i=L.isOSX_IOS?"⌘":"CTRL",l=L.isOSX_IOS?"⇧":"+SHIFT",o=e.shortcutsHint?e.shortcutsDisable:["bold","strike","underline","italic","undo","indent","save"],s=e.rtl?["[","]"]:["]","["],a=e.rtl?[t.outdent,t.indent]:[t.indent,t.outdent];return{bold:["",n.toolbar.bold+'<span class="se-shortcut">'+(o.indexOf("bold")>-1?"":i+'+<span class="se-shortcut-key">B</span>')+"</span>","bold","",t.bold],underline:["",n.toolbar.underline+'<span class="se-shortcut">'+(o.indexOf("underline")>-1?"":i+'+<span class="se-shortcut-key">U</span>')+"</span>","underline","",t.underline],italic:["",n.toolbar.italic+'<span class="se-shortcut">'+(o.indexOf("italic")>-1?"":i+'+<span class="se-shortcut-key">I</span>')+"</span>","italic","",t.italic],strike:["",n.toolbar.strike+'<span class="se-shortcut">'+(o.indexOf("strike")>-1?"":i+l+'+<span class="se-shortcut-key">S</span>')+"</span>","strike","",t.strike],subscript:["",n.toolbar.subscript,"SUB","",t.subscript],superscript:["",n.toolbar.superscript,"SUP","",t.superscript],removeFormat:["",n.toolbar.removeFormat,"removeFormat","",t.erase],indent:["",n.toolbar.indent+'<span class="se-shortcut">'+(o.indexOf("indent")>-1?"":i+'+<span class="se-shortcut-key">'+s[0]+"</span>")+"</span>","indent","",a[0]],outdent:["",n.toolbar.outdent+'<span class="se-shortcut">'+(o.indexOf("indent")>-1?"":i+'+<span class="se-shortcut-key">'+s[1]+"</span>")+"</span>","outdent","",a[1]],fullScreen:["se-code-view-enabled se-resizing-enabled",n.toolbar.fullScreen,"fullScreen","",t.expansion],showBlocks:["",n.toolbar.showBlocks,"showBlocks","",t.show_blocks],codeView:["se-code-view-enabled se-resizing-enabled",n.toolbar.codeView,"codeView","",t.code_view],undo:["",n.toolbar.undo+'<span class="se-shortcut">'+(o.indexOf("undo")>-1?"":i+'+<span class="se-shortcut-key">Z</span>')+"</span>","undo","",t.undo],redo:["",n.toolbar.redo+'<span class="se-shortcut">'+(o.indexOf("undo")>-1?"":i+'+<span class="se-shortcut-key">Y</span> / '+i+l+'+<span class="se-shortcut-key">Z</span>')+"</span>","redo","",t.redo],preview:["se-resizing-enabled",n.toolbar.preview,"preview","",t.preview],print:["se-resizing-enabled",n.toolbar.print,"print","",t.print],dir:["",n.toolbar[e.rtl?"dir_ltr":"dir_rtl"],"dir","",t[e.rtl?"dir_ltr":"dir_rtl"]],dir_ltr:["",n.toolbar.dir_ltr,"dir_ltr","",t.dir_ltr],dir_rtl:["",n.toolbar.dir_rtl,"dir_rtl","",t.dir_rtl],save:["se-resizing-enabled",n.toolbar.save+'<span class="se-shortcut">'+(o.indexOf("save")>-1?"":i+'+<span class="se-shortcut-key">S</span>')+"</span>","save","",t.save],blockquote:["",n.toolbar.tag_blockquote,"blockquote","command",t.blockquote],font:["se-btn-select se-btn-tool-font",n.toolbar.font,"font","submenu",'<span class="txt">'+n.toolbar.font+"</span>"+t.arrow_down],formatBlock:["se-btn-select se-btn-tool-format",n.toolbar.formats,"formatBlock","submenu",'<span class="txt">'+n.toolbar.formats+"</span>"+t.arrow_down],fontSize:["se-btn-select se-btn-tool-size",n.toolbar.fontSize,"fontSize","submenu",'<span class="txt">'+n.toolbar.fontSize+"</span>"+t.arrow_down],fontColor:["",n.toolbar.fontColor,"fontColor","submenu",t.font_color],hiliteColor:["",n.toolbar.hiliteColor,"hiliteColor","submenu",t.highlight_color],align:["se-btn-align",n.toolbar.align,"align","submenu",e.rtl?t.align_right:t.align_left],list:["",n.toolbar.list,"list","submenu",t.list_number],horizontalRule:["btn_line",n.toolbar.horizontalRule,"horizontalRule","submenu",t.horizontal_rule],table:["",n.toolbar.table,"table","submenu",t.table],lineHeight:["",n.toolbar.lineHeight,"lineHeight","submenu",t.line_height],template:["",n.toolbar.template,"template","submenu",t.template],paragraphStyle:["",n.toolbar.paragraphStyle,"paragraphStyle","submenu",t.paragraph_style],textStyle:["",n.toolbar.textStyle,"textStyle","submenu",t.text_style],link:["",n.toolbar.link,"link","dialog",t.link],image:["",n.toolbar.image,"image","dialog",t.image],video:["",n.toolbar.video,"video","dialog",t.video],audio:["",n.toolbar.audio,"audio","dialog",t.audio],math:["",n.toolbar.math,"math","dialog",t.math],imageGallery:["",n.toolbar.imageGallery,"imageGallery","fileBrowser",t.image_gallery]}},_createModuleGroup:function(){const e=L.createElement("DIV");e.className="se-btn-module se-btn-module-border";const t=L.createElement("UL");return t.className="se-menu-list",e.appendChild(t),{div:e,ul:t}},_createButton:function(e,t,n,i,l,o,s){const a=L.createElement("LI"),r=L.createElement("BUTTON"),c=t||n;return r.setAttribute("type","button"),r.setAttribute("class","se-btn"+(e?" "+e:"")+" se-tooltip"),r.setAttribute("data-command",n),r.setAttribute("data-display",i),r.setAttribute("aria-label",c.replace(/<span .+<\/span>/,"")),r.setAttribute("tabindex","-1"),l||(l='<span class="se-icon-text">!</span>'),/^default\./i.test(l)&&(l=s[l.replace(/^default\./i,"")]),/^text\./i.test(l)&&(l=l.replace(/^text\./i,""),r.className+=" se-btn-more-text"),l+='<span class="se-tooltip-inner"><span class="se-tooltip-text">'+c+"</span></span>",o&&r.setAttribute("disabled",!0),r.innerHTML=l,a.appendChild(r),{li:a,button:r}},_createToolBar:function(e,t,n,i){const l=e.createElement("DIV");l.className="se-toolbar-separator-vertical";const o=e.createElement("DIV");o.className="se-toolbar sun-editor-common";const s=e.createElement("DIV");s.className="se-btn-tray",o.appendChild(s),t=JSON.parse(JSON.stringify(t));const a=i.icons,r=this._defaultButtons(i),c={},d=[];let u=null,h=null,g=null,p=null,m="",f=!1;const _=L.createElement("DIV");_.className="se-toolbar-more-layer";e:for(let i,o,b,v,y,C=0;C<t.length;C++)if(i=!1,y="",v=t[C],g=this._createModuleGroup(),"object"==typeof v){for(let e,l=0;l<v.length;l++){if(h=v[l],e=!1,/^\%\d+/.test(h)&&0===l){v[0]=h.replace(/[^\d]/g,""),d.push(v),t.splice(C--,1);continue e}if("object"==typeof h)"function"==typeof h.add?(m=h.name,u=r[m],n[m]=h):(m=h.name,u=[h.buttonClass,h.title,h.name,h.dataDisplay,h.innerHTML,h._disabled]);else{if(/^\-/.test(h)){y=h.substr(1),g.div.className+=" module-float-"+y;continue}if(/^\#/.test(h)){"fix"===h.substr(1)&&(g.ul.className+=" se-menu-dir-fix");continue}if(/^\:/.test(h)){e=!0;const t=h.match(/^\:([^\-]+)\-([^\-]+)\-([^\-]+)/);b="__se__"+t[1].trim();u=["se-btn-more",t[2].trim(),b,"MORE",t[3].trim()]}else u=r[h];if(m=h,!u){const e=n[m];if(!e)throw Error("[SUNEDITOR.create.toolbar.fail] The button name of a plugin that does not exist. ["+m+"]");u=[e.buttonClass,e.title,e.name,e.display,e.innerHTML,e._disabled]}}p=this._createButton(u[0],u[1],u[2],u[3],u[4],u[5],a),(i?o:g.ul).appendChild(p.li),n[m]&&(c[m]=p.button),e&&(i=!0,o=L.createElement("DIV"),o.className="se-more-layer "+b,o.innerHTML='<div class="se-more-form"><ul class="se-menu-list"'+(y?' style="float: '+y+';"':"")+"></ul></div>",_.appendChild(o),o=o.firstElementChild.firstElementChild)}if(f){const e=l.cloneNode(!1);s.appendChild(e)}s.appendChild(g.div),f=!0}else if(/^\/$/.test(v)){const t=e.createElement("DIV");t.className="se-btn-module-enter",s.appendChild(t),f=!1}switch(s.children.length){case 0:s.style.display="none";break;case 1:L.removeClass(s.firstElementChild,"se-btn-module-border");break;default:if(i.rtl){const e=l.cloneNode(!1);e.style.float=s.lastElementChild.style.float,s.appendChild(e)}}d.length>0&&d.unshift(t),_.children.length>0&&s.appendChild(_);const b=e.createElement("DIV");b.className="se-menu-tray",o.appendChild(b);const v=e.createElement("DIV");return v.className="se-toolbar-cover",o.appendChild(v),i.hideToolbar&&(o.style.display="none"),{element:o,plugins:n,pluginCallButtons:c,responsiveButtons:d,_menuTray:b,_buttonTray:s}}};var A=function(e,t,n){return{element:{originElement:e,topArea:t._top,relative:t._relative,toolbar:t._toolBar,_toolbarShadow:t._toolbarShadow,_buttonTray:t._toolBar.querySelector(".se-btn-tray"),_menuTray:t._menuTray,resizingBar:t._resizingBar,navigation:t._navigation,charWrapper:t._charWrapper,charCounter:t._charCounter,editorArea:t._editorArea,wysiwygFrame:t._wysiwygArea,wysiwyg:t._wysiwygArea,code:t._codeArea,placeholder:t._placeholder,loading:t._loading,lineBreaker:t._lineBreaker,lineBreaker_t:t._lineBreaker_t,lineBreaker_b:t._lineBreaker_b,resizeBackground:t._resizeBack,_stickyDummy:t._stickyDummy,_arrow:t._arrow,_focusTemp:t._focusTemp},tool:{cover:t._toolBar.querySelector(".se-toolbar-cover"),bold:t._toolBar.querySelector('[data-command="bold"]'),underline:t._toolBar.querySelector('[data-command="underline"]'),italic:t._toolBar.querySelector('[data-command="italic"]'),strike:t._toolBar.querySelector('[data-command="strike"]'),sub:t._toolBar.querySelector('[data-command="SUB"]'),sup:t._toolBar.querySelector('[data-command="SUP"]'),undo:t._toolBar.querySelector('[data-command="undo"]'),redo:t._toolBar.querySelector('[data-command="redo"]'),save:t._toolBar.querySelector('[data-command="save"]'),outdent:t._toolBar.querySelector('[data-command="outdent"]'),indent:t._toolBar.querySelector('[data-command="indent"]'),fullScreen:t._toolBar.querySelector('[data-command="fullScreen"]'),showBlocks:t._toolBar.querySelector('[data-command="showBlocks"]'),codeView:t._toolBar.querySelector('[data-command="codeView"]'),dir:t._toolBar.querySelector('[data-command="dir"]'),dir_ltr:t._toolBar.querySelector('[data-command="dir_ltr"]'),dir_rtl:t._toolBar.querySelector('[data-command="dir_rtl"]')},options:n,option:n}},z={name:"notice",add:function(e){const t=e.context;t.notice={};let n=e.util.createElement("DIV"),i=e.util.createElement("SPAN"),l=e.util.createElement("BUTTON");n.className="se-notice",l.className="close",l.setAttribute("aria-label","Close"),l.setAttribute("title",e.lang.dialogBox.close),l.innerHTML=e.icons.cancel,n.appendChild(i),n.appendChild(l),t.notice.modal=n,t.notice.message=i,l.addEventListener("click",this.onClick_cancel.bind(e)),t.element.editorArea.appendChild(n),n=null},onClick_cancel:function(e){e.preventDefault(),e.stopPropagation(),this.plugins.notice.close.call(this)},open:function(e){this.context.notice.message.textContent=e,this.context.notice.modal.style.display="block"},close:function(){this.context.notice.modal.style.display="none"}},M={init:function(e){return{create:function(t,n){return this.create(t,n,e)}.bind(this)}},create:function(e,t,n){L._propertiesInit(),"object"!=typeof t&&(t={}),n&&(t=[n,t].reduce((function(e,t){for(let n in t)if(L.hasOwn(t,n))if("plugins"===n&&t[n]&&e[n]){let i=e[n],l=t[n];i=i.length?i:Object.keys(i).map((function(e){return i[e]})),l=l.length?l:Object.keys(l).map((function(e){return l[e]})),e[n]=l.filter((function(e){return-1===i.indexOf(e)})).concat(i)}else e[n]=t[n];return e}),{}));const i="string"==typeof e?document.getElementById(e):e;if(!i){if("string"==typeof e)throw Error('[SUNEDITOR.create.fail] The element for that id was not found (ID:"'+e+'")');throw Error("[SUNEDITOR.create.fail] suneditor requires textarea's element or id value")}const l=B.init(i,t);if(l.constructed._top.id&&document.getElementById(l.constructed._top.id))throw Error('[SUNEDITOR.create.fail] The ID of the suneditor you are trying to create already exists (ID:"'+l.constructed._top.id+'")');return function(e,t,n,i,l,o){const s=e.element.originElement.ownerDocument||document,a=s.defaultView||window,r=L,c=l.icons,d={_d:s,_w:a,_parser:new a.DOMParser,_prevRtl:l.rtl,_editorHeight:0,_editorHeightPadding:0,_listCamel:l.__listCommonStyle,_listKebab:r.camelToKebabCase(l.__listCommonStyle),__focusTemp:e.element._focusTemp,_wd:null,_ww:null,_shadowRoot:null,_shadowRootControllerEventTarget:null,util:r,functions:null,options:null,wwComputedStyle:null,notice:z,icons:c,history:null,context:e,pluginCallButtons:t,plugins:n||{},initPlugins:{},_targetPlugins:{},_menuTray:{},lang:i,effectNode:null,submenu:null,container:null,_submenuName:"",_bindedSubmenuOff:null,_bindedContainerOff:null,submenuActiveButton:null,containerActiveButton:null,controllerArray:[],currentControllerName:"",currentControllerTarget:null,currentFileComponentInfo:null,codeViewDisabledButtons:[],resizingDisabledButtons:[],_moreLayerActiveButton:null,_htmlCheckWhitelistRegExp:null,_htmlCheckBlacklistRegExp:null,_disallowedTextTagsRegExp:null,editorTagsWhitelistRegExp:null,editorTagsBlacklistRegExp:null,pasteTagsWhitelistRegExp:null,pasteTagsBlacklistRegExp:null,hasFocus:!1,isDisabled:!1,isReadOnly:!1,_attributesWhitelistRegExp:null,_attributesWhitelistRegExp_all_data:null,_attributesBlacklistRegExp:null,_attributesTagsWhitelist:null,_attributesTagsBlacklist:null,_bindControllersOff:null,_isInline:null,_isBalloon:null,_isBalloonAlways:null,_inlineToolbarAttr:{top:"",width:"",isShow:!1},_notHideToolbar:!1,_sticky:!1,_antiBlur:!1,_lineBreaker:null,_lineBreakerButton:null,_componentsInfoInit:!0,_componentsInfoReset:!1,activePlugins:null,managedTagsInfo:null,_charTypeHTML:!1,_fileInfoPluginsCheck:null,_fileInfoPluginsReset:null,_fileManager:{tags:null,regExp:null,queryString:null,pluginRegExp:null,pluginMap:null},commandMap:{},_commandMapStyles:{STRONG:["font-weight"],U:["text-decoration"],EM:["font-style"],DEL:["text-decoration"]},_styleCommandMap:null,_cleanStyleRegExp:{div:new a.RegExp("\\s*[^-a-zA-Z](.+)\\s*:[^;]+(?!;)*","ig"),span:new a.RegExp("\\s*[^-a-zA-Z](font-family|font-size|color|background-color)\\s*:[^;]+(?!;)*","ig"),format:new a.RegExp("\\s*[^-a-zA-Z](text-align|margin-left|margin-right|width|height|line-height)\\s*:[^;]+(?!;)*","ig"),fontSizeUnit:new a.RegExp("\\d+"+l.fontSizeUnit+"$","i")},_variable:{isChanged:!1,isCodeView:!1,isFullScreen:!1,innerHeight_fullScreen:0,resizeClientY:0,tabSize:4,codeIndent:2,minResizingSize:r.getNumber(e.element.wysiwygFrame.style.minHeight||"65",0),currentNodes:[],currentNodesMap:[],_range:null,_selectionNode:null,_originCssText:e.element.topArea.style.cssText,_bodyOverflow:"",_editorAreaOriginCssText:"",_wysiwygOriginCssText:"",_codeOriginCssText:"",_fullScreenAttrs:{sticky:!1,balloon:!1,inline:!1},_lineBreakComp:null,_lineBreakDir:""},_formatAttrsTemp:null,_saveButtonStates:function(){this.allCommandButtons||(this.allCommandButtons={});const e=this.context.element._buttonTray.querySelectorAll(".se-menu-list button[data-display]");for(let t,n,i=0;i<e.length;i++)t=e[i],n=t.getAttribute("data-command"),this.allCommandButtons[n]=t},_recoverButtonStates:function(){if(this.allCommandButtons){const e=this.context.element._buttonTray.querySelectorAll(".se-menu-list button[data-display]");for(let t,n,i,l=0;l<e.length;l++)t=e[l],n=t.getAttribute("data-command"),i=this.allCommandButtons[n],i&&(t.parentElement.replaceChild(i,t),this.context.tool[n]&&(this.context.tool[n]=i))}},callPlugin:function(e,n,i){if(i=i||t[e],!this.plugins[e])throw Error('[SUNEDITOR.core.callPlugin.fail] The called plugin does not exist or is in an invalid format. (pluginName:"'+e+'")');this.initPlugins[e]?"object"==typeof this._targetPlugins[e]&&i&&this.initMenuTarget(e,i,this._targetPlugins[e]):(this.plugins[e].add(this,i),this.initPlugins[e]=!0),this.plugins[e].active&&!this.commandMap[e]&&i&&(this.commandMap[e]=i,this.activePlugins.push(e)),"function"==typeof n&&n()},addModule:function(e){for(let t,n=0,i=e.length;n<i;n++)t=e[n].name,this.plugins[t]||(this.plugins[t]=e[n]),this.initPlugins[t]||(this.initPlugins[t]=!0,"function"==typeof this.plugins[t].add&&this.plugins[t].add(this))},getGlobalScrollOffset:function(){let t=0,n=0,i=e.element.topArea;for(;i;)t+=i.scrollTop,n+=i.scrollLeft,i=i.parentElement;for(i=this._shadowRoot?this._shadowRoot.host:null;i;)t+=i.scrollTop,n+=i.scrollLeft,i=i.parentElement;return{top:t,left:n}},initMenuTarget:function(t,n,i){n?(e.element._menuTray.appendChild(i),this._targetPlugins[t]=!0,this._menuTray[n.getAttribute("data-command")]=i):this._targetPlugins[t]=i},submenuOn:function(e){this._bindedSubmenuOff&&this._bindedSubmenuOff(),this._bindControllersOff&&this.controllersOff();const t=this._submenuName=e.getAttribute("data-command"),n=this.submenu=this._menuTray[t];this.submenuActiveButton=e,this._setMenuPosition(e,n),this._bindedSubmenuOff=this.submenuOff.bind(this),this.addDocEvent("mousedown",this._bindedSubmenuOff,!1),this.plugins[t].on&&this.plugins[t].on.call(this),this._antiBlur=!0},submenuOff:function(){this.removeDocEvent("mousedown",this._bindedSubmenuOff),this._bindedSubmenuOff=null,this.submenu&&(this._submenuName="",this.submenu.style.display="none",this.submenu=null,r.removeClass(this.submenuActiveButton,"on"),this.submenuActiveButton=null,this._notHideToolbar=!1),this._antiBlur=!1},moreLayerOff:function(){if(this._moreLayerActiveButton){e.element.toolbar.querySelector("."+this._moreLayerActiveButton.getAttribute("data-command")).style.display="none",r.removeClass(this._moreLayerActiveButton,"on"),this._moreLayerActiveButton=null}},containerOn:function(e){this._bindedContainerOff&&this._bindedContainerOff();const t=this._containerName=e.getAttribute("data-command"),n=this.container=this._menuTray[t];this.containerActiveButton=e,this._setMenuPosition(e,n),this._bindedContainerOff=this.containerOff.bind(this),this.addDocEvent("mousedown",this._bindedContainerOff,!1),this.plugins[t].on&&this.plugins[t].on.call(this),this._antiBlur=!0},containerOff:function(){this.removeDocEvent("mousedown",this._bindedContainerOff),this._bindedContainerOff=null,this.container&&(this._containerName="",this.container.style.display="none",this.container=null,r.removeClass(this.containerActiveButton,"on"),this.containerActiveButton=null,this._notHideToolbar=!1),this._antiBlur=!1},_setMenuPosition:function(t,n){n.style.visibility="hidden",n.style.display="block",n.style.height="",r.addClass(t,"on");const i=this.context.element.toolbar,o=i.offsetWidth,s=u._getEditorOffsets(e.element.toolbar),c=n.offsetWidth,d=t.parentElement.offsetLeft+3;if(l.rtl){const e=t.offsetWidth,i=c>e?c-e:0,l=i>0?0:e-c;n.style.left=d-i+l+"px",s.left>u._getEditorOffsets(n).left&&(n.style.left="0px")}else{const e=o<=c?0:o-(d+c);n.style.left=e<0?d+e+"px":d+"px"}let h=0,g=t;for(;g&&g!==i;)h+=g.offsetTop,g=g.offsetParent;const p=h;this._isBalloon?h+=i.offsetTop+t.offsetHeight:h-=t.offsetHeight;const m=s.top,f=n.offsetHeight,_=this.getGlobalScrollOffset().top,b=a.innerHeight-(m-_+p+t.parentElement.offsetHeight);if(b<f){let e=-1*(f-p+3);const i=m-_+e,l=f+(i<0?i:0);l>b?(n.style.height=l+"px",e=-1*(l-p+3)):(n.style.height=b+"px",e=p+t.parentElement.offsetHeight),n.style.top=e+"px"}else n.style.top=p+t.parentElement.offsetHeight+"px";n.style.visibility=""},controllersOn:function(){this._bindControllersOff&&this._bindControllersOff(),this.controllerArray=[];for(let e,t=0;t<arguments.length;t++)e=arguments[t],e&&("string"!=typeof e?"function"!=typeof e?r.hasClass(e,"se-controller")?(e.style&&(e.style.display="block",this._shadowRoot&&-1===this._shadowRootControllerEventTarget.indexOf(e)&&(e.addEventListener("mousedown",(function(e){e.preventDefault(),e.stopPropagation()})),this._shadowRootControllerEventTarget.push(e))),this.controllerArray.push(e)):(this.currentControllerTarget=e,this.currentFileComponentInfo=this.getFileComponent(e)):this.controllerArray.push(e):this.currentControllerName=e);this._bindControllersOff=this.controllersOff.bind(this),this.addDocEvent("mousedown",this._bindControllersOff,!1),this.addDocEvent("keydown",this._bindControllersOff,!1),this._antiBlur=!0,"function"==typeof h.showController&&h.showController(this.currentControllerName,this.controllerArray,this)},controllersOff:function(t){this._lineBreaker.style.display="none";const n=this.controllerArray.length;if(t&&t.target&&n>0)for(let e=0;e<n;e++)if("function"==typeof this.controllerArray[e].contains&&this.controllerArray[e].contains(t.target))return;if((!this._fileManager.pluginRegExp.test(this.currentControllerName)||!t||"keydown"!==t.type||27===t.keyCode)&&(e.element.lineBreaker_t.style.display=e.element.lineBreaker_b.style.display="none",this._variable._lineBreakComp=null,this.currentControllerName="",this.currentControllerTarget=null,this.currentFileComponentInfo=null,this.effectNode=null,this._bindControllersOff)){if(this.removeDocEvent("mousedown",this._bindControllersOff),this.removeDocEvent("keydown",this._bindControllersOff),this._bindControllersOff=null,n>0){for(let e=0;e<n;e++)"function"==typeof this.controllerArray[e]?this.controllerArray[e]():this.controllerArray[e].style.display="none";this.controllerArray=[]}this._antiBlur=!1}},setControllerPosition:function(t,n,i,o){l.rtl&&(o.left*=-1);const s=r.getOffset(n,e.element.wysiwygFrame);t.style.visibility="hidden",t.style.display="block";const a="top"===i?-(t.offsetHeight+2):n.offsetHeight+12;t.style.top=s.top+a+o.top+"px";const c=s.left-e.element.wysiwygFrame.scrollLeft+o.left,d=t.offsetWidth,u=n.offsetWidth,h=r.hasClass(t.firstElementChild,"se-arrow")?t.firstElementChild:null;if(l.rtl){const n=d>u?d-u:0,i=n>0?0:u-d;t.style.left=c-n+i+"px",n>0&&h&&(h.style.left=(d-14<10+n?d-14:10+n)+"px");const l=e.element.wysiwygFrame.offsetLeft-t.offsetLeft;l>0&&(t.style.left="0px",h&&(h.style.left=l+"px"))}else{t.style.left=c+"px";const n=e.element.wysiwygFrame.offsetWidth-(t.offsetLeft+d);n<0?(t.style.left=t.offsetLeft+n+"px",h&&(h.style.left=20-n+"px")):h&&(h.style.left="20px")}t.style.visibility=""},execCommand:function(e,t,n){this._wd.execCommand(e,t,"formatBlock"===e?"<"+n+">":n),this.history.push(!0)},nativeFocus:function(){this.__focus(),this._editorRange()},__focus:function(){const t=r.getParentElement(this.getSelectionNode(),"figcaption");t?t.focus():e.element.wysiwyg.focus()},focus:function(){if("none"!==e.element.wysiwygFrame.style.display){if(l.iframe)this.nativeFocus();else try{const t=this.getRange();if(t.startContainer===t.endContainer&&r.isWysiwygDiv(t.startContainer)){const n=t.commonAncestorContainer.children[t.startOffset];if(!r.isFormatElement(n)&&!r.isComponent(n)){const t=r.createElement(l.defaultTag),i=r.createElement("BR");return t.appendChild(i),e.element.wysiwyg.insertBefore(t,n),void this.setRange(i,0,i,0)}}this.setRange(t.startContainer,t.startOffset,t.endContainer,t.endOffset)}catch(e){this.nativeFocus()}u._applyTagEffects(),this._isBalloon&&u._toggleToolbarBalloon()}},focusEdge:function(t){t||(t=e.element.wysiwyg.lastElementChild);const n=this.getFileComponent(t);n?this.selectComponent(n.target,n.pluginName):t?(t=r.getChildElement(t,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!0))?this.setRange(t,t.textContent.length,t,t.textContent.length):this.nativeFocus():this.focus()},blur:function(){l.iframe?e.element.wysiwygFrame.blur():e.element.wysiwyg.blur()},setRange:function(e,t,n,i){if(!e||!n)return;(r.isBreak(e)||3===e.nodeType)&&t>e.textContent.length&&(t=e.textContent.length),(r.isBreak(n)||3===n.nodeType)&&i>n.textContent.length&&(i=n.textContent.length),r.isFormatElement(e)&&(e=e.childNodes[t>0?e.childNodes.length-1:0]||e,t=t>0?1!==e.nodeType||r.isBreak(e)?e.textContent?e.textContent.length:0:1:0),r.isFormatElement(n)&&(n=n.childNodes[i>0?n.childNodes.length-1:0]||n,i=i>0?1!==n.nodeType||r.isBreak(n)?n.textContent?n.textContent.length:0:1:0);const o=this._wd.createRange();try{t>e.textContent.length&&(t=e.textContent.length),i>n.textContent.length&&(i=n.textContent.length),o.setStart(e,t),o.setEnd(n,i)}catch(e){return console.warn("[SUNEDITOR.core.focus.error] "+e),void this.nativeFocus()}const s=this.getSelection();return s.removeAllRanges&&s.removeAllRanges(),s.addRange(o),this._rangeInfo(o,this.getSelection()),l.iframe&&this.__focus(),o},removeRange:function(){this._variable._range=null,this._variable._selectionNode=null,this.hasFocus&&this.getSelection().removeAllRanges(),this._setKeyEffect([])},getRange:function(){const t=this._variable._range||this._createDefaultRange(),n=this.getSelection();if(t.collapsed===n.isCollapsed||!e.element.wysiwyg.contains(n.focusNode))return t;if(n.rangeCount>0)return this._variable._range=n.getRangeAt(0),this._variable._range;{const e=n.anchorNode,t=n.focusNode,i=n.anchorOffset,l=n.focusOffset,o=r.compareElements(e,t),s=o.ancestor&&(0===o.result?i<=l:o.result>1);return this.setRange(s?e:t,s?i:l,s?t:e,s?l:i)}},getRange_addLine:function(t,n){if(this._selectionVoid(t)){const i=e.element.wysiwyg,o=r.createElement(l.defaultTag);o.innerHTML="<br>",i.insertBefore(o,n&&n!==i?n.nextElementSibling:i.firstElementChild),this.setRange(o.firstElementChild,0,o.firstElementChild,1),t=this._variable._range}return t},getSelection:function(){const t=this._shadowRoot&&this._shadowRoot.getSelection?this._shadowRoot.getSelection():this._ww.getSelection();return this._variable._range||e.element.wysiwyg.contains(t.focusNode)||(t.removeAllRanges(),t.addRange(this._createDefaultRange())),t},getSelectionNode:function(){if(e.element.wysiwyg.contains(this._variable._selectionNode)||this._editorRange(),!this._variable._selectionNode){const t=r.getChildElement(e.element.wysiwyg.firstChild,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!1);if(t)return this._variable._selectionNode=t,t;this._editorRange()}return this._variable._selectionNode},_editorRange:function(){const e=this._wd.activeElement;if(r.isInputElement(e))return this._variable._selectionNode=e,e;const t=this.getSelection();if(!t)return null;let n=null;n=t.rangeCount>0?t.getRangeAt(0):this._createDefaultRange(),this._rangeInfo(n,t)},_rangeInfo:function(e,t){let n=null;this._variable._range=e,n=e.collapsed?r.isWysiwygDiv(e.commonAncestorContainer)&&e.commonAncestorContainer.children[e.startOffset]||e.commonAncestorContainer:t.extentNode||t.anchorNode,this._variable._selectionNode=n},_createDefaultRange:function(){const t=e.element.wysiwyg,n=this._wd.createRange();let i=t.firstElementChild,o=null;return i?(o=i.firstChild,o||(o=r.createElement("BR"),i.appendChild(o))):(i=r.createElement(l.defaultTag),o=r.createElement("BR"),i.appendChild(o),t.appendChild(i)),n.setStart(o,0),n.setEnd(o,0),n},_selectionVoid:function(e){const t=e.commonAncestorContainer;return r.isWysiwygDiv(e.startContainer)&&r.isWysiwygDiv(e.endContainer)||/FIGURE/i.test(t.nodeName)||this._fileManager.regExp.test(t.nodeName)||r.isMediaComponent(t)},_resetRangeToTextNode:function(){const t=this.getRange();if(this._selectionVoid(t))return!1;const n=t.collapsed;let i,o,s,a=t.startContainer,c=t.startOffset,d=t.endContainer,u=t.endOffset;if(r.isFormatElement(a))for(a.childNodes[c]?(a=a.childNodes[c]||a,c=0):(a=a.lastChild||a,c=a.textContent.length);a&&1===a.nodeType&&a.firstChild;)a=a.firstChild||a,c=0;if(r.isFormatElement(d)){for(d=d.childNodes[u]||d.lastChild||d;d&&1===d.nodeType&&d.lastChild;)d=d.lastChild;u=n?0:d.textContent.length}if(i=r.isWysiwygDiv(a)?e.element.wysiwyg.firstChild:a,o=c,r.isBreak(i)||1===i.nodeType&&i.childNodes.length>0){const e=r.isBreak(i);if(!e){for(;i&&!r.isBreak(i)&&1===i.nodeType;)i=i.childNodes[o]||i.nextElementSibling||i.nextSibling,o=0;let e=r.getFormatElement(i,null);e===r.getRangeFormatElement(e,null)&&(e=r.createElement(r.getParentElement(i,r.isCell)?"DIV":l.defaultTag),i.parentNode.insertBefore(e,i),e.appendChild(i))}if(r.isBreak(i)){const t=r.createTextNode(r.zeroWidthSpace);i.parentNode.insertBefore(t,i),i=t,e&&a===d&&(d=i,u=1)}}if(a=i,c=o,i=r.isWysiwygDiv(d)?e.element.wysiwyg.lastChild:d,o=u,r.isBreak(i)||1===i.nodeType&&i.childNodes.length>0){const e=r.isBreak(i);if(!e){for(;i&&!r.isBreak(i)&&1===i.nodeType&&(s=i.childNodes,0!==s.length);)i=s[o>0?o-1:o]||!/FIGURE/i.test(s[0].nodeName)?s[0]:i.previousElementSibling||i.previousSibling||a,o=o>0?i.textContent.length:o;let e=r.getFormatElement(i,null);e===r.getRangeFormatElement(e,null)&&(e=r.createElement(r.isCell(e)?"DIV":l.defaultTag),i.parentNode.insertBefore(e,i),e.appendChild(i))}if(r.isBreak(i)){const t=r.createTextNode(r.zeroWidthSpace);i.parentNode.insertBefore(t,i),i=t,o=1,e&&!i.previousSibling&&r.removeItem(d)}}return d=i,u=o,this.setRange(a,c,d,u),!0},getSelectedElements:function(t){if(!this._resetRangeToTextNode())return[];let n=this.getRange();if(r.isWysiwygDiv(n.startContainer)){const t=e.element.wysiwyg.children;if(0===t.length)return[];this.setRange(t[0],0,t[t.length-1],t[t.length-1].textContent.trim().length),n=this.getRange()}const i=n.startContainer,l=n.endContainer,o=n.commonAncestorContainer,s=r.getListChildren(o,(function(e){return t?t(e):r.isFormatElement(e)}));if(r.isWysiwygDiv(o)||r.isRangeFormatElement(o)||s.unshift(r.getFormatElement(o,null)),i===l||1===s.length)return s;let a=r.getFormatElement(i,null),c=r.getFormatElement(l,null),d=null,u=null;const h=function(e){return!r.isTable(e)||/^TABLE$/i.test(e.nodeName)};let g=r.getRangeFormatElement(a,h),p=r.getRangeFormatElement(c,h);r.isTable(g)&&r.isListCell(g.parentNode)&&(g=g.parentNode),r.isTable(p)&&r.isListCell(p.parentNode)&&(p=p.parentNode);const m=g===p;for(let e,t=0,n=s.length;t<n;t++)if(e=s[t],a===e||!m&&e===g)d=t;else if(c===e||!m&&e===p){u=t;break}return null===d&&(d=0),null===u&&(u=s.length-1),s.slice(d,u+1)},getSelectedElementsAndComponents:function(e){const t=this.getRange().commonAncestorContainer,n=r.getParentElement(t,r.isComponent),i=r.isTable(t)?this.getSelectedElements(null):this.getSelectedElements(function(e){const t=this.getParentElement(e,this.isComponent);return this.isFormatElement(e)&&(!t||t===n)||this.isComponent(e)&&!this.getFormatElement(e)}.bind(r));if(e)for(let e=0,t=i.length;e<t;e++)for(let n=e-1;n>=0;n--)if(i[n].contains(i[e])){i.splice(e,1),e--,t--;break}return i},isEdgePoint:function(e,t,n){return 1===e.nodeType&&!e.textContent.length||("end"!==n&&0===t||(!n||"start"!==n)&&!e.nodeValue&&1===t||(!n||"end"===n)&&!!e.nodeValue&&t===e.nodeValue.length)},_isEdgeFormat:function(e,t,n){if(!this.isEdgePoint(e,t,n))return!1;const i=[];for(n="start"===n?"previousSibling":"nextSibling";e&&!r.isFormatElement(e)&&!r.isWysiwygDiv(e);){if(e[n]&&(!r.isBreak(e[n])||e[n][n]))return null;1===e.nodeType&&i.push(e.cloneNode(!1)),e=e.parentNode}return i},showLoading:function(){e.element.loading.style.display="block"},closeLoading:function(){e.element.loading.style.display="none"},appendFormatTag:function(e,t){if(!e||!e.parentNode)return null;const n=r.getFormatElement(this.getSelectionNode(),null);let i=null;if(!r.isFormatElement(e)&&r.isFreeFormatElement(n||e.parentNode))i=r.createElement("BR");else{const e=t?"string"==typeof t?t:t.nodeName:!r.isFormatElement(n)||r.isRangeFormatElement(n)||r.isFreeFormatElement(n)?l.defaultTag:n.nodeName;i=r.createElement(e),i.innerHTML="<br>",(t&&"string"!=typeof t||!t&&r.isFormatElement(n))&&r.copyTagAttributes(i,t||n,["id"])}return r.isCell(e)?e.insertBefore(i,e.nextElementSibling):e.parentNode.insertBefore(i,e.nextElementSibling),i},insertComponent:function(e,t,n,i){if(this.isReadOnly||n&&!this.checkCharCount(e,null))return null;const l=this.removeNode();this.getRange_addLine(this.getRange(),l.container);let o=null,s=this.getSelectionNode(),a=r.getFormatElement(s,null);if(r.isListCell(a))this.insertNode(e,s===a?null:(s||l.container).nextSibling,!1),e.nextSibling||e.parentNode.appendChild(r.createElement("BR"));else{if(this.getRange().collapsed&&(3===l.container.nodeType||r.isBreak(l.container))){const e=r.getParentElement(l.container,function(e){return this.isRangeFormatElement(e)}.bind(r));o=r.splitElement(l.container,l.offset,e?r.getElementDepth(e)+1:0),o&&(a=o.previousSibling)}this.insertNode(e,r.isRangeFormatElement(a)?null:a,!1),a&&r.onlyZeroWidthSpace(a)&&r.removeItem(a)}if(!i){this.setRange(e,0,e,0);const t=this.getFileComponent(e);t?this.selectComponent(t.target,t.pluginName):o&&(o=r.getEdgeChildNodes(o,null).sc||o,this.setRange(o,0,o,0))}return t||this.history.push(1),o||e},getFileComponent:function(e){if(!this._fileManager.queryString||!e)return null;let t,n;return(/^FIGURE$/i.test(e.nodeName)||/se-component/.test(e.className))&&(t=e.querySelector(this._fileManager.queryString)),!t&&e.nodeName&&this._fileManager.regExp.test(e.nodeName)&&(t=e),t&&(n=this._fileManager.pluginMap[t.nodeName.toLowerCase()],n)?{target:t,component:r.getParentElement(t,r.isComponent),pluginName:n}:null},selectComponent:function(e,t){if(r.isUneditableComponent(r.getParentElement(e,r.isComponent))||r.isUneditableComponent(e))return!1;this.hasFocus||this.focus();const n=this.plugins[t];n&&a.setTimeout(function(){"function"==typeof n.select&&this.callPlugin(t,n.select.bind(this,e),null),this._setComponentLineBreaker(e)}.bind(this))},_setComponentLineBreaker:function(t){this._lineBreaker.style.display="none";const n=r.getParentElement(t,r.isComponent);if(!n)return;const i=e.element.lineBreaker_t.style,l=e.element.lineBreaker_b.style,o="block"===this.context.resizing.resizeContainer.style.display?this.context.resizing.resizeContainer:t,s=r.isListCell(n.parentNode);let a,c,d;(s?n.previousSibling&&!r.isComponent(n.previousElementSibling):r.isFormatElement(n.previousElementSibling))?i.display="none":(this._variable._lineBreakComp=n,c=e.element.wysiwyg.scrollTop,a=r.getOffset(t,e.element.wysiwygFrame).top+c,d=o.offsetWidth/2/2,i.top=a-c-12+"px",i.left=r.getOffset(o).left+d+"px",i.display="block"),(s?n.nextSibling&&!r.isComponent(n.nextElementSibling):r.isFormatElement(n.nextElementSibling))?l.display="none":(a||(this._variable._lineBreakComp=n,c=e.element.wysiwyg.scrollTop,a=r.getOffset(t,e.element.wysiwygFrame).top+c,d=o.offsetWidth/2/2),l.top=a+o.offsetHeight-c-12+"px",l.left=r.getOffset(o).left+o.offsetWidth-d-24+"px",l.display="block")},_checkDuplicateNode:function(e,t){!function e(n){d._dupleCheck(n,t);const i=n.childNodes;for(let t=0,n=i.length;t<n;t++)e(i[t])}(e)},_dupleCheck:function(e,t){if(!r.isTextStyleElement(e))return;const n=(e.style.cssText.match(/[^;]+;/g)||[]).map((function(e){return e.trim()})),i=e.nodeName;if(/^span$/i.test(i)&&0===n.length)return e;let l=!1;return function t(o){if(!r.isWysiwygDiv(o)&&r.isTextStyleElement(o)){if(o.nodeName===i){l=!0;const t=o.style.cssText.match(/[^;]+;/g)||[];for(let e,i=0,l=t.length;i<l;i++)(e=n.indexOf(t[i].trim()))>-1&&n.splice(e,1);for(let t=0,n=o.classList.length;t<n;t++)e.classList.remove(o.classList[t])}t(o.parentElement)}}(t),l&&((e.style.cssText=n.join(" "))||(e.setAttribute("style",""),e.removeAttribute("style")),e.attributes.length||e.setAttribute("data-se-duple","true")),e},insertNode:function(t,n,i){if(this.isReadOnly||i&&!this.checkCharCount(t,null))return null;let o,s,a,c=null,d=this.getRange(),u=r.isListCell(d.commonAncestorContainer)?d.commonAncestorContainer:r.getFormatElement(this.getSelectionNode(),null),h=r.isListCell(u)&&(r.isListCell(t)||r.isList(t)),g=null;const p=r.isFreeFormatElement(u),m=!p&&(r.isFormatElement(t)||r.isRangeFormatElement(t))||r.isComponent(t);if(h&&(a=n||r.isList(t)?u.lastChild:u.nextElementSibling,g=r.isList(t)?u:(a||u).parentNode),!n&&(m||r.isComponent(t)||r.isMedia(t))){const e=this.isEdgePoint(d.endContainer,d.endOffset,"end"),t=this.removeNode(),i=t.container,l=i===t.prevContainer&&d.collapsed?null:t.prevContainer;if(h&&l)if(g=3===l.nodeType?l.parentNode:l,g.contains(i)){let e=!0;for(a=i;a.parentNode&&a.parentNode!==g;)a=a.parentNode,e=!1;e&&i===l&&(a=a.nextSibling)}else a=null;else if(h&&r.isListCell(i)&&!u.parentElement)u=r.createElement("LI"),g.appendChild(u),i.appendChild(g),a=null;else if(3===i.nodeType||r.isBreak(i)||h){const l=r.getParentElement(i,function(e){return this.isRangeFormatElement(e)||this.isListCell(e)}.bind(r));if(n=r.splitElement(i,t.offset,l?r.getElementDepth(l)+1:0))if(h){if(u.contains(i)){const t=r.isList(u.lastElementChild);let i=null;e||(i=u.cloneNode(!1),i.appendChild(n.textContent.trim()?n:r.createTextNode(r.zeroWidthSpace))),t&&(i||(i=u.cloneNode(!1),i.appendChild(r.createTextNode(r.zeroWidthSpace))),i.appendChild(u.lastElementChild)),i&&(u.parentNode.insertBefore(i,u.nextElementSibling),a=n=i)}}else n=n.previousSibling;else r.isListCell(u)||(a=n=u)}}d=n||m?this.getRange():this.getRange_addLine(this.getRange(),null);const f=d.commonAncestorContainer,_=d.startOffset,b=d.endOffset,v=d.startContainer===f&&r.isFormatElement(f),y=v&&(f.childNodes[_]||f.childNodes[0])||d.startContainer,C=v&&(f.childNodes[b]||f.childNodes[f.childNodes.length-1])||d.endContainer;if(!h)if(n)o=n.parentNode,n=n.nextSibling,s=!0;else if(o=y,3===y.nodeType&&(o=y.parentNode),d.collapsed)if(3===f.nodeType)n=f.textContent.length>b?f.splitText(b):f.nextSibling;else if(r.isBreak(o))n=o,o=o.parentNode;else{let e=o.childNodes[_];const i=e&&3===e.nodeType&&r.onlyZeroWidthSpace(e)&&r.isBreak(e.nextSibling)?e.nextSibling:e;i?!i.nextSibling&&r.isBreak(i)?(o.removeChild(i),n=null):n=r.isBreak(i)&&!r.isBreak(t)?i:i.nextSibling:n=null}else{if(y===C){n=this.isEdgePoint(C,b)?C.nextSibling:C.splitText(b);let e=y;this.isEdgePoint(y,_)||(e=y.splitText(_)),o.removeChild(e),0===o.childNodes.length&&m&&(o.innerHTML="<br>")}else{const e=this.removeNode(),i=e.container,s=e.prevContainer;if(i&&0===i.childNodes.length&&m&&(r.isFormatElement(i)?i.innerHTML="<br>":r.isRangeFormatElement(i)&&(i.innerHTML="<"+l.defaultTag+"><br></"+l.defaultTag+">")),r.isListCell(i)&&3===t.nodeType)o=i,n=null;else if(!m&&s)if(o=3===s.nodeType?s.parentNode:s,o.contains(i)){let e=!0;for(n=i;n.parentNode&&n.parentNode!==o;)n=n.parentNode,e=!1;e&&i===s&&(n=n.nextSibling)}else n=null;else r.isWysiwygDiv(i)&&!r.isFormatElement(t)?(o=i.appendChild(r.createElement(l.defaultTag)),n=null):o=(n=m?C:i===s?i.nextSibling:i)&&n.parentNode?n.parentNode:f;for(;n&&!r.isFormatElement(n)&&n.parentNode!==f;)n=n.parentNode}}try{if(!h){if((r.isWysiwygDiv(n)||o===e.element.wysiwyg.parentNode)&&(o=e.element.wysiwyg,n=null),r.isFormatElement(t)||r.isRangeFormatElement(t)||!r.isListCell(o)&&r.isComponent(t)){const e=o;if(r.isList(n))o=n,n=null;else if(r.isListCell(n))o=n.previousElementSibling||n;else if(!s&&!n){const e=this.removeNode(),t=3===e.container.nodeType?r.isListCell(r.getFormatElement(e.container,null))?e.container:r.getFormatElement(e.container,null)||e.container.parentNode:e.container,i=r.isWysiwygDiv(t)||r.isRangeFormatElement(t);o=i?t:t.parentNode,n=i?null:t.nextSibling}0===e.childNodes.length&&o!==e&&r.removeItem(e)}if(!m||p||r.isRangeFormatElement(o)||r.isListCell(o)||r.isWysiwygDiv(o)||(n=o.nextElementSibling,o=o.parentNode),r.isWysiwygDiv(o)&&(3===t.nodeType||r.isBreak(t))){const e=r.createElement(l.defaultTag);e.appendChild(t),c=t,t=e}}if(h?g.parentNode?(o=g,n=a):(o=e.element.wysiwyg,n=null):n=o===n?o.lastChild:n,r.isListCell(t)&&!r.isList(o)){if(r.isListCell(o))n=o.nextElementSibling,o=o.parentNode;else{const e=r.createElement("ol");o.insertBefore(e,n),o=e,n=null}h=!0}if(this._checkDuplicateNode(t,o),o.insertBefore(t,n),h)if(r.onlyZeroWidthSpace(u.textContent.trim()))r.removeItem(u),t=t.lastChild;else{const e=r.getArrayItem(u.children,r.isList);e&&(t!==e?(t.appendChild(e),t=e.previousSibling):(o.appendChild(t),t=o),r.onlyZeroWidthSpace(u.textContent.trim())&&r.removeItem(u))}}catch(e){o.appendChild(t),console.warn("[SUNEDITOR.insertNode.warn] "+e)}finally{c&&(t=c);const e=o.querySelectorAll("[data-se-duple]");if(e.length>0)for(let n,i,l,o,s=0,a=e.length;s<a;s++){for(n=e[s],l=n.childNodes,o=n.parentNode;l[0];)i=l[0],o.insertBefore(i,n);n===t&&(t=i),r.removeItem(n)}if((r.isFormatElement(t)||r.isComponent(t))&&y===C){const e=r.getFormatElement(f,null);e&&1===e.nodeType&&r.isEmptyLine(e)&&r.removeItem(e)}if(p&&(r.isFormatElement(t)||r.isRangeFormatElement(t))&&(t=this._setIntoFreeFormat(t)),!r.isComponent(t)){let e=1;if(3===t.nodeType)e=t.textContent.length,this.setRange(t,e,t,e);else if(!r.isBreak(t)&&!r.isListCell(t)&&r.isFormatElement(o)){let n=null;t.previousSibling&&!r.isBreak(t.previousSibling)||(n=r.createTextNode(r.zeroWidthSpace),t.parentNode.insertBefore(n,t)),t.nextSibling&&!r.isBreak(t.nextSibling)||(n=r.createTextNode(r.zeroWidthSpace),t.parentNode.insertBefore(n,t.nextSibling)),r._isIgnoreNodeChange(t)&&(t=t.nextSibling,e=0)}this.setRange(t,e,t,e)}return t}},_setIntoFreeFormat:function(e){const t=e.parentNode;let n,i;for(;r.isFormatElement(e)||r.isRangeFormatElement(e);){for(n=e.childNodes,i=null;n[0];)if(i=n[0],r.isFormatElement(i)||r.isRangeFormatElement(i)){if(this._setIntoFreeFormat(i),!e.parentNode)break;n=e.childNodes}else t.insertBefore(i,e);0===e.childNodes.length&&r.removeItem(e),e=r.createElement("BR"),t.insertBefore(e,i.nextSibling)}return e},removeNode:function(){this._resetRangeToTextNode();const t=this.getRange();if(t.startContainer===t.endContainer){const e=r.getParentElement(t.startContainer,r.isMediaComponent);if(e){const t=r.createElement("BR"),n=r.createElement(l.defaultTag);return n.appendChild(t),r.changeElement(e,n),d.setRange(n,0,n,0),this.history.push(!0),{container:n,offset:0,prevContainer:null}}}const n=0===t.startOffset,i=d.isEdgePoint(t.endContainer,t.endOffset,"end");let o=null,s=null,a=null;n&&(s=r.getFormatElement(t.startContainer),s&&(o=s.previousElementSibling,s=o)),i&&(a=r.getFormatElement(t.endContainer),a=a?a.nextElementSibling:a);let c,u=0,h=t.startContainer,g=t.endContainer,p=t.startOffset,m=t.endOffset;const f=3===t.commonAncestorContainer.nodeType&&t.commonAncestorContainer.parentNode===h.parentNode?h.parentNode:t.commonAncestorContainer;if(f===h&&f===g&&(h=f.children[p],g=f.children[m],p=m=0),!h||!g)return{container:f,offset:0};if(h===g&&t.collapsed&&h.textContent&&r.onlyZeroWidthSpace(h.textContent.substr(p)))return{container:h,offset:p,prevContainer:h&&h.parentNode?h:null};let _=null,b=null;const v=r.getListChildNodes(f,null);let y=r.getArrayIndex(v,h),C=r.getArrayIndex(v,g);if(v.length>0&&y>-1&&C>-1){for(let e=y+1,t=h;e>=0;e--)v[e]===t.parentNode&&v[e].firstChild===t&&0===p&&(y=e,t=t.parentNode);for(let e=C-1,t=g;e>y;e--)v[e]===t.parentNode&&1===v[e].nodeType&&(v.splice(e,1),t=t.parentNode,--C)}else{if(0===v.length){if(r.isFormatElement(f)||r.isRangeFormatElement(f)||r.isWysiwygDiv(f)||r.isBreak(f)||r.isMedia(f))return{container:f,offset:0};if(3===f.nodeType)return{container:f,offset:m};v.push(f),h=g=f}else if(h=g=v[0],r.isBreak(h)||r.onlyZeroWidthSpace(h))return{container:r.isMedia(f)?f:h,offset:0};y=C=0}for(let e=y;e<=C;e++){const t=v[e];if(0===t.length||3===t.nodeType&&void 0===t.data)this._nodeRemoveListItem(t);else if(t!==h)if(t!==g)this._nodeRemoveListItem(t);else{if(1===g.nodeType){if(r.isComponent(g))continue;b=r.createTextNode(g.textContent)}else b=r.createTextNode(g.substringData(m,g.length-m));b.length>0?g.data=b.data:this._nodeRemoveListItem(g)}else{if(1===h.nodeType){if(r.isComponent(h))continue;_=r.createTextNode(h.textContent)}else t===g?(_=r.createTextNode(h.substringData(0,p)+g.substringData(m,g.length-m)),u=p):_=r.createTextNode(h.substringData(0,p));if(_.length>0?h.data=_.data:this._nodeRemoveListItem(h),t===g)break}}const w=r.getParentElement(g,"ul"),x=r.getParentElement(h,"li");if(w&&x&&x.contains(w)?(c=w.previousSibling,u=c.textContent.length):(c=g&&g.parentNode?g:h&&h.parentNode?h:t.endContainer||t.startContainer,u=n||i?i?c.textContent.length:0:u),!r.isWysiwygDiv(c)&&0===c.childNodes.length){const t=r.removeItemAllParents(c,null,null);t&&(c=t.sc||t.ec||e.element.wysiwyg)}return r.getFormatElement(c)||h&&h.parentNode||(a?(c=a,u=0):s&&(c=s,u=1)),this.setRange(c,u,c,u),this.history.push(!0),{container:c,offset:u,prevContainer:o}},_nodeRemoveListItem:function(e){const t=r.getFormatElement(e,null);r.removeItem(e),r.isListCell(t)&&(r.removeItemAllParents(t,null,null),t&&r.isList(t.firstChild)&&t.insertBefore(r.createTextNode(r.zeroWidthSpace),t.firstChild))},applyRangeFormatElement:function(e){this.getRange_addLine(this.getRange(),null);const t=this.getSelectedElementsAndComponents(!1);if(!t||0===t.length)return;e:for(let e,n,i,l,o,s,a=0,c=t.length;a<c;a++)if(e=t[a],r.isListCell(e))if(n=e.lastElementChild,n&&r.isListCell(e.nextElementSibling)&&t.indexOf(e.nextElementSibling)>-1&&(l=n.lastElementChild,t.indexOf(l)>-1)){let e=null;for(;e=l.lastElementChild;)if(r.isList(e)){if(!(t.indexOf(e.lastElementChild)>-1))continue e;l=e.lastElementChild}i=n.firstElementChild,o=t.indexOf(i),s=t.indexOf(l),t.splice(o,s-o+1),c=t.length}else;let n,i,l,o=t[t.length-1];n=r.isRangeFormatElement(o)||r.isFormatElement(o)?o:r.getRangeFormatElement(o,null)||r.getFormatElement(o,null),r.isCell(n)?(i=null,l=n):(i=n.nextSibling,l=n.parentNode);let s=r.getElementDepth(n),a=null;const c=[],d=function(e,t,n){let i=null;if(e!==t&&!r.isTable(t)){if(t&&r.getElementDepth(e)===r.getElementDepth(t))return n;i=r.removeItemAllParents(t,null,e)}return i?i.ec:n};for(let n,o,u,h,g,p,m,f=0,_=t.length;f<_;f++)if(n=t[f],o=n.parentNode,o&&!e.contains(o))if(u=r.getElementDepth(n),r.isList(o)){if(null===a&&(p?(a=p,m=!0,p=null):a=o.cloneNode(!1)),c.push(n),g=t[f+1],f===_-1||g&&g.parentNode!==o){g&&n.contains(g.parentNode)&&(p=g.parentNode.cloneNode(!1));let t,f=o.parentNode;for(;r.isList(f);)t=r.createElement(f.nodeName),t.appendChild(a),a=t,f=f.parentNode;const _=this.detachRangeFormatElement(o,c,null,!0,!0);s>=u?(s=u,l=_.cc,i=d(l,o,_.ec),i&&(l=i.parentNode)):l===_.cc&&(i=_.ec),l!==_.cc&&(h=d(l,_.cc,h),i=void 0!==h?h:_.cc);for(let e=0,t=_.removeArray.length;e<t;e++)a.appendChild(_.removeArray[e]);m||e.appendChild(a),p&&_.removeArray[_.removeArray.length-1].appendChild(p),a=null,m=!1}}else s>=u&&(s=u,l=o,i=n.nextSibling),e.appendChild(n),l!==o&&(h=d(l,o),void 0!==h&&(i=h));if(this.effectNode=null,r.mergeSameTags(e,null,!1),r.mergeNestedTags(e,function(e){return this.isList(e)}.bind(r)),i&&r.getElementDepth(i)>0&&(r.isList(i.parentNode)||r.isList(i.parentNode.parentNode))){const t=r.getParentElement(i,function(e){return this.isRangeFormatElement(e)&&!this.isList(e)}.bind(r)),n=r.splitElement(i,null,t?r.getElementDepth(t)+1:0);n.parentNode.insertBefore(e,n)}else l.insertBefore(e,i),d(e,i);const u=r.getEdgeChildNodes(e.firstElementChild,e.lastElementChild);t.length>1?this.setRange(u.sc,0,u.ec,u.ec.textContent.length):this.setRange(u.ec,u.ec.textContent.length,u.ec,u.ec.textContent.length),this.history.push(!1)},detachRangeFormatElement:function(e,t,n,i,o){const s=this.getRange();let a=s.startOffset,c=s.endOffset,d=r.getListChildNodes(e,(function(t){return t.parentNode===e})),u=e.parentNode,h=null,g=null,p=e.cloneNode(!1);const m=[],f=r.isList(n);let _=!1,b=!1,v=!1;function y(t,n,i,l){if(r.onlyZeroWidthSpace(n)&&(n.innerHTML=r.zeroWidthSpace,a=c=1),3===n.nodeType)return t.insertBefore(n,i),n;const o=(v?n:l).childNodes;let s=n.cloneNode(!1),d=null,u=null;for(;o[0];)u=o[0],!r._notTextNode(u)||r.isBreak(u)||r.isListCell(s)?s.appendChild(u):(s.childNodes.length>0&&(d||(d=s),t.insertBefore(s,i),s=n.cloneNode(!1)),t.insertBefore(u,i),d||(d=u));if(s.childNodes.length>0){if(r.isListCell(t)&&r.isListCell(s)&&r.isList(i))if(f){for(d=i;i;)s.appendChild(i),i=i.nextSibling;t.parentNode.insertBefore(s,t.nextElementSibling)}else{const t=l.nextElementSibling,n=r.detachNestedList(l,!1);if(e!==n||t!==l.nextElementSibling){const t=s.childNodes;for(;t[0];)l.appendChild(t[0]);e=n,b=!0}}else t.insertBefore(s,i);d||(d=s)}return d}for(let o,s,a,c=0,C=d.length;c<C;c++)if(o=d[c],3!==o.nodeType||!r.isList(p))if(v=!1,i&&0===c&&(h=t&&t.length!==C&&t[0]!==o?p:e.previousSibling),t&&(s=t.indexOf(o)),t&&-1===s)p||(p=e.cloneNode(!1)),p.appendChild(o);else{if(t&&(a=t[s+1]),p&&p.children.length>0&&(u.insertBefore(p,e),p=null),!f&&r.isListCell(o))if(a&&r.getElementDepth(o)!==r.getElementDepth(a)&&(r.isListCell(u)||r.getArrayItem(o.children,r.isList,!1))){const t=o.nextElementSibling,n=r.detachNestedList(o,!1);e===n&&t===o.nextElementSibling||(e=n,b=!0)}else{const t=o;o=r.createElement(i?t.nodeName:r.isList(e.parentNode)||r.isListCell(e.parentNode)?"LI":r.isCell(e.parentNode)?"DIV":l.defaultTag);const n=r.isListCell(o),s=t.childNodes;for(;s[0]&&(!r.isList(s[0])||n);)o.appendChild(s[0]);r.copyFormatAttributes(o,t),v=!0}else o=o.cloneNode(!1);if(!b&&(i?(m.push(o),r.removeItem(d[c])):(n?(_||(u.insertBefore(n,e),_=!0),o=y(n,o,null,d[c])):o=y(u,o,e,d[c]),b||(t?(g=o,h||(h=o)):h||(h=g=o))),b)){b=v=!1,d=r.getListChildNodes(e,(function(t){return t.parentNode===e})),p=e.cloneNode(!1),u=e.parentNode,c=-1,C=d.length;continue}}const C=e.parentNode;let w=e.nextSibling;p&&p.children.length>0&&C.insertBefore(p,w),n?h=n.previousSibling:h||(h=e.previousSibling),w=e.nextSibling!==p?e.nextSibling:p?p.nextSibling:null,0===e.children.length||0===e.textContent.length?r.removeItem(e):r.removeEmptyNode(e,null,!1);let x=null;if(i)x={cc:C,sc:h,so:a,ec:w,eo:c,removeArray:m};else{h||(h=g),g||(g=h);const e=r.getEdgeChildNodes(h,g.parentNode?h:g);x={cc:(e.sc||e.ec).parentNode,sc:e.sc,so:a,ec:e.ec,eo:c,removeArray:null}}if(this.effectNode=null,o)return x;!i&&x&&(t?this.setRange(x.sc,a,x.ec,c):this.setRange(x.sc,0,x.sc,0)),this.history.push(!1)},detachList:function(e,t){let n={},i=!1,l=!1,o=null,s=null;const a=function(e){return!this.isComponent(e)}.bind(r);for(let c,d,u,h,g=0,p=e.length;g<p;g++){if(u=g===p-1,d=r.getRangeFormatElement(e[g],a),h=r.isList(d),!c&&h)c=d,n={r:c,f:[r.getParentElement(e[g],"LI")]},0===g&&(i=!0);else if(c&&h)if(c!==d){const a=this.detachRangeFormatElement(n.f[0].parentNode,n.f,null,t,!0);d=e[g].parentNode,i&&(o=a.sc,i=!1),u&&(s=a.ec),h?(c=d,n={r:c,f:[r.getParentElement(e[g],"LI")]},u&&(l=!0)):c=null}else n.f.push(r.getParentElement(e[g],"LI")),u&&(l=!0);if(u&&r.isList(c)){const e=this.detachRangeFormatElement(n.f[0].parentNode,n.f,null,t,!0);(l||1===p)&&(s=e.ec),i&&(o=e.sc||s)}}return{sc:o,ec:s}},nodeChange:function(e,t,n,i){this._resetRangeToTextNode();let l=this.getRange_addLine(this.getRange(),null);t=!!(t&&t.length>0)&&t,n=!!(n&&n.length>0)&&n;const o=!e,s=o&&!n&&!t;let c=l.startContainer,d=l.startOffset,u=l.endContainer,h=l.endOffset;if(s&&l.collapsed&&r.isFormatElement(c.parentNode)||c===u&&1===c.nodeType&&r.isNonEditable(c)){const e=c.parentNode;if(!r.isListCell(e)||!r.getValues(e.style).some(function(e){return this._listKebab.indexOf(e)>-1}.bind(this)))return}if(l.collapsed&&!s&&1===c.nodeType&&!r.isBreak(c)&&!r.isComponent(c)){let e=null;const t=c.childNodes[d];t&&(e=t.nextSibling?r.isBreak(t)?t:t.nextSibling:null);const n=r.createTextNode(r.zeroWidthSpace);c.insertBefore(n,e),this.setRange(n,1,n,1),l=this.getRange(),c=l.startContainer,d=l.startOffset,u=l.endContainer,h=l.endOffset}r.isFormatElement(c)&&(c=c.childNodes[d]||c.firstChild,d=0),r.isFormatElement(u)&&(u=u.childNodes[h]||u.lastChild,h=u.textContent.length),o&&(e=r.createElement("DIV"));const g=a.RegExp,p=e.nodeName;if(!s&&c===u&&!n&&e){let t=c,n=0;const i=[],l=e.style;for(let e=0,t=l.length;e<t;e++)i.push(l[e]);const s=e.classList;for(let e=0,t=s.length;e<t;e++)i.push("."+s[e]);if(i.length>0){for(;!r.isFormatElement(t)&&!r.isWysiwygDiv(t);){for(let l=0;l<i.length;l++)if(1===t.nodeType){const s=i[l],a=!!/^\./.test(s)&&new g("\\s*"+s.replace(/^\./,"")+"(\\s+|$)","ig"),r=o?!!t.style[s]:!!t.style[s]&&!!e.style[s]&&t.style[s]===e.style[s],c=!1!==a&&(o?!!t.className.match(a):!!t.className.match(a)&&!!e.className.match(a));(r||c)&&n++}t=t.parentNode}if(n>=i.length)return}}let m,f={},_={},b="",v="",y="";if(t){for(let e,n=0,i=t.length;n<i;n++)e=t[n],/^\./.test(e)?v+=(v?"|":"\\s*(?:")+e.replace(/^\./,""):b+=(b?"|":"(?:;|^|\\s)(?:")+e;b&&(b+=")\\s*:[^;]*\\s*(?:;|$)",b=new g(b,"ig")),v&&(v+=")(?=\\s+|$)",v=new g(v,"ig"))}if(n){y="^(?:"+n[0];for(let e=1;e<n.length;e++)y+="|"+n[e];y+=")$",y=new g(y,"i")}const C=a.Boolean,w={v:!1},x=function(e){const t=e.cloneNode(!1);if(3===t.nodeType||r.isBreak(t))return t;if(s)return null;const n=!y&&o||y&&y.test(t.nodeName);if(n&&!i)return w.v=!0,null;const l=t.style.cssText;let a="";b&&l.length>0&&(a=l.replace(b,"").trim(),a!==l&&(w.v=!0));const c=t.className;let d="";return v&&c.length>0&&(d=c.replace(v,"").trim(),d!==c&&(w.v=!0)),(!o||!v&&c||!b&&l||a||d||!n)&&(a||d||t.nodeName!==p||C(b)!==C(l)||C(v)!==C(c))?(b&&l.length>0&&(t.style.cssText=a),t.style.cssText||t.removeAttribute("style"),v&&c.length>0&&(t.className=d.trim()),t.className.trim()||t.removeAttribute("class"),t.style.cssText||t.className||t.nodeName!==p&&!n?t:(w.v=!0,null)):(w.v=!0,null)},E=this.getSelectedElements(null);l=this.getRange(),c=l.startContainer,d=l.startOffset,u=l.endContainer,h=l.endOffset,r.getFormatElement(c,null)||(c=r.getChildElement(E[0],(function(e){return 3===e.nodeType}),!1),d=0),r.getFormatElement(u,null)||(u=r.getChildElement(E[E.length-1],(function(e){return 3===e.nodeType}),!1),h=u.textContent.length);const S=r.getFormatElement(c,null)===r.getFormatElement(u,null),N=E.length-(S?0:1);m=e.cloneNode(!1);const T=s||o&&function(e){for(let t=0,n=e.length;t<n;t++)if(r._isMaintainedNode(e[t])||r._isSizeNode(e[t]))return!0;return!1}(n),k=o||r._isSizeNode(m),L=this._util_getMaintainedNode.bind(r,T,k),B=this._util_isMaintainedNode.bind(r,T,k);if(S){this._resetCommonListCell(E[0],t)&&(l=this.setRange(c,d,u,h));const e=this._nodeChange_oneLine(E[0],m,x,c,d,u,h,s,o,l.collapsed,w,L,B);f.container=e.startContainer,f.offset=e.startOffset,_.container=e.endContainer,_.offset=e.endOffset,f.container===_.container&&r.onlyZeroWidthSpace(f.container)&&(f.offset=_.offset=1),this._setCommonListStyle(e.ancestor,null)}else{let n=!1;N>0&&this._resetCommonListCell(E[N],t)&&(n=!0),this._resetCommonListCell(E[0],t)&&(n=!0),n&&this.setRange(c,d,u,h),N>0&&(m=e.cloneNode(!1),_=this._nodeChange_endLine(E[N],m,x,u,h,s,o,w,L,B));for(let n,i=N-1;i>0;i--)this._resetCommonListCell(E[i],t),m=e.cloneNode(!1),n=this._nodeChange_middleLine(E[i],m,x,s,o,w,_.container),n.endContainer&&n.ancestor.contains(n.endContainer)&&(_.ancestor=null,_.container=n.endContainer),this._setCommonListStyle(n.ancestor,null);m=e.cloneNode(!1),f=this._nodeChange_startLine(E[0],m,x,c,d,s,o,w,L,B,_.container),f.endContainer&&(_.ancestor=null,_.container=f.endContainer),N<=0?_=f:_.container||(_.ancestor=null,_.container=f.container,_.offset=f.container.textContent.length),this._setCommonListStyle(f.ancestor,null),this._setCommonListStyle(_.ancestor||r.getFormatElement(_.container),null)}this.controllersOff(),this.setRange(f.container,f.offset,_.container,_.offset),this.history.push(!1)},_resetCommonListCell:function(e,t){if(!r.isListCell(e))return;t||(t=this._listKebab);const n=r.getArrayItem(e.childNodes,(function(e){return!r.isBreak(e)}),!0),i=e.style,o=[],s=[],a=r.getValues(i);for(let e=0,n=this._listKebab.length;e<n;e++)a.indexOf(this._listKebab[e])>-1&&t.indexOf(this._listKebab[e])>-1&&(o.push(this._listCamel[e]),s.push(this._listKebab[e]));if(!o.length)return;const c=r.createElement("SPAN");for(let e=0,t=o.length;e<t;e++)c.style[o[e]]=i[s[e]],i.removeProperty(s[e]);let d=c.cloneNode(!1),u=null,h=!1;for(let t,i,s=0,a=n.length;s<a;s++)t=n[s],l._textTagsMap[t.nodeName.toLowerCase()]||(i=r.getValues(t.style),0===i.length||o.some((function(e){return-1===i.indexOf(e)}))&&i.some((function(e){o.indexOf(e)}))?(u=t.nextSibling,d.appendChild(t)):d.childNodes.length>0&&(e.insertBefore(d,u),d=c.cloneNode(!1),u=null,h=!0));return d.childNodes.length>0&&(e.insertBefore(d,u),h=!0),i.length||e.removeAttribute("style"),h},_setCommonListStyle:function(e,t){if(!r.isListCell(e))return;const n=r.getArrayItem((t||e).childNodes,(function(e){return!r.isBreak(e)}),!0);if(!(t=n[0])||n.length>1||1!==t.nodeType)return;const i=t.style,o=e.style,s=t.nodeName.toLowerCase();let a=!1;l._textTagsMap[s]===l._defaultCommand.bold.toLowerCase()&&(o.fontWeight="bold"),l._textTagsMap[s]===l._defaultCommand.italic.toLowerCase()&&(o.fontStyle="italic");const c=r.getValues(i);if(c.length>0)for(let e=0,t=this._listCamel.length;e<t;e++)c.indexOf(this._listKebab[e])>-1&&(o[this._listCamel[e]]=i[this._listCamel[e]],i.removeProperty(this._listKebab[e]),a=!0);if(this._setCommonListStyle(e,t),a&&!i.length){const e=t.childNodes,n=t.parentNode,i=t.nextSibling;for(;e.length>0;)n.insertBefore(e[0],i);r.removeItem(t)}},_stripRemoveNode:function(e){const t=e.parentNode;if(!e||3===e.nodeType||!t)return;const n=e.childNodes;for(;n[0];)t.insertBefore(n[0],e);t.removeChild(e)},_util_getMaintainedNode:function(e,t,n){return!n||e?null:this.getParentElement(n,this._isMaintainedNode.bind(this))||(t?null:this.getParentElement(n,this._isSizeNode.bind(this)))},_util_isMaintainedNode:function(e,t,n){if(!n||e||1!==n.nodeType)return!1;const i=this._isMaintainedNode(n);return this.getParentElement(n,this._isMaintainedNode.bind(this))?i:i||!t&&this._isSizeNode(n)},_nodeChange_oneLine:function(e,t,n,i,l,o,s,c,d,u,h,g,p){let m=i.parentNode;for(;!(m.nextSibling||m.previousSibling||r.isFormatElement(m.parentNode)||r.isWysiwygDiv(m.parentNode))&&m.nodeName!==t.nodeName;)m=m.parentNode;if(!d&&m===o.parentNode&&m.nodeName===t.nodeName&&r.onlyZeroWidthSpace(i.textContent.slice(0,l))&&r.onlyZeroWidthSpace(o.textContent.slice(s))){const n=m.childNodes;let a=!0;for(let e,t,l,s,c=0,d=n.length;c<d;c++)if(e=n[c],s=!r.onlyZeroWidthSpace(e),e!==i)if(e!==o){if(!t&&s||t&&l&&s){a=!1;break}}else l=!0;else t=!0;if(a)return r.copyTagAttributes(m,t),{ancestor:e,startContainer:i,startOffset:l,endContainer:o,endOffset:s}}h.v=!1;const f=e,_=[t],b=e.cloneNode(!1),v=i===o;let y,C,w,x,E,S=i,N=l,T=o,k=s,L=!1,B=!1;const A=a.RegExp;function z(e){const t=new A("(?:;|^|\\s)(?:"+x+"null)\\s*:[^;]*\\s*(?:;|$)","ig");let n="";return t&&e.style.cssText.length>0&&(n=t.test(e.style.cssText)),!n}if(function e(i,l){const o=i.childNodes;for(let i,s=0,a=o.length;s<a;s++){let a=o[s];if(!a)continue;let d,h=l;if(!L&&a===S){let e=b;E=g(a);const o=r.createTextNode(1===S.nodeType?"":S.substringData(0,N)),s=r.createTextNode(1===S.nodeType?"":S.substringData(N,v&&k>=N?k-N:S.data.length-N));if(E){const t=g(l);if(t&&t.parentNode!==e){let n=t,i=null;for(;n.parentNode!==e;){for(l=i=n.parentNode.cloneNode(!1);n.childNodes[0];)i.appendChild(n.childNodes[0]);n.appendChild(i),n=n.parentNode}n.parentNode.appendChild(t)}E=E.cloneNode(!1)}r.onlyZeroWidthSpace(o)||l.appendChild(o);const c=g(l);for(c&&(E=c),E&&(e=E),C=a,y=[],x="";C!==e&&C!==f&&null!==C;)i=p(C)?null:n(C),i&&1===C.nodeType&&z(C)&&(y.push(i),x+=C.style.cssText.substr(0,C.style.cssText.indexOf(":"))+"|"),C=C.parentNode;const d=y.pop()||s;for(w=C=d;y.length>0;)C=y.pop(),w.appendChild(C),w=C;if(t.appendChild(d),e.appendChild(t),E&&!g(T)&&(t=t.cloneNode(!1),b.appendChild(t),_.push(t)),S=s,N=0,L=!0,C!==s&&C.appendChild(S),!v)continue}if(B||a!==T){if(L){if(1===a.nodeType&&!r.isBreak(a)){r._isIgnoreNodeChange(a)?(b.appendChild(a.cloneNode(!0)),u||(t=t.cloneNode(!1),b.appendChild(t),_.push(t))):e(a,a);continue}C=a,y=[],x="";const o=[];for(;null!==C.parentNode&&C!==f&&C!==t;)i=B?C.cloneNode(!1):n(C),1===C.nodeType&&!r.isBreak(a)&&i&&z(C)&&(p(C)?E||o.push(i):y.push(i),x+=C.style.cssText.substr(0,C.style.cssText.indexOf(":"))+"|"),C=C.parentNode;y=y.concat(o);const s=y.pop()||a;for(w=C=s;y.length>0;)C=y.pop(),w.appendChild(C),w=C;if(!p(t.parentNode)||p(s)||r.onlyZeroWidthSpace(t)||(t=t.cloneNode(!1),b.appendChild(t),_.push(t)),B||E||!p(s))s===a?l=B?b:t:B?(b.appendChild(s),l=C):(t.appendChild(s),l=C);else{t=t.cloneNode(!1);const e=s.childNodes;for(let n=0,i=e.length;n<i;n++)t.appendChild(e[n]);s.appendChild(t),b.appendChild(s),_.push(t),l=t.children.length>0?C:t}if(E&&3===a.nodeType)if(g(a)){const e=r.getParentElement(l,function(e){return this._isMaintainedNode(e.parentNode)||e.parentNode===b}.bind(r));E.appendChild(e),t=e.cloneNode(!1),_.push(t),b.appendChild(t)}else E=null}d=a.cloneNode(!1),l.appendChild(d),1!==a.nodeType||r.isBreak(a)||(h=d),e(a,h)}else{E=g(a);const e=r.createTextNode(1===T.nodeType?"":T.substringData(k,T.length-k)),l=r.createTextNode(v||1===T.nodeType?"":T.substringData(0,k));if(E?E=E.cloneNode(!1):p(t.parentNode)&&!E&&(t=t.cloneNode(!1),b.appendChild(t),_.push(t)),!r.onlyZeroWidthSpace(e)){C=a,x="",y=[];const t=[];for(;C!==b&&C!==f&&null!==C;)1===C.nodeType&&z(C)&&(p(C)?t.push(C.cloneNode(!1)):y.push(C.cloneNode(!1)),x+=C.style.cssText.substr(0,C.style.cssText.indexOf(":"))+"|"),C=C.parentNode;for(y=y.concat(t),d=w=C=y.pop()||e;y.length>0;)C=y.pop(),w.appendChild(C),w=C;b.appendChild(d),C.textContent=e.data}if(E&&d){const e=g(d);e&&(E=e)}for(C=a,y=[],x="";C!==b&&C!==f&&null!==C;)i=p(C)?null:n(C),i&&1===C.nodeType&&z(C)&&(y.push(i),x+=C.style.cssText.substr(0,C.style.cssText.indexOf(":"))+"|"),C=C.parentNode;const o=y.pop()||l;for(w=C=o;y.length>0;)C=y.pop(),w.appendChild(C),w=C;E?((t=t.cloneNode(!1)).appendChild(o),E.insertBefore(t,E.firstChild),b.appendChild(E),_.push(t),E=null):t.appendChild(o),T=l,k=l.data.length,B=!0,!c&&u&&(t=l,l.textContent=r.zeroWidthSpace),C!==l&&C.appendChild(T)}}}(e,b),d&&!c&&!h.v)return{ancestor:e,startContainer:i,startOffset:l,endContainer:o,endOffset:s};if(c=c&&d)for(let e=0;e<_.length;e++){let t,n,i,l=_[e];if(u)t=r.createTextNode(r.zeroWidthSpace),b.replaceChild(t,l);else{const e=l.childNodes;for(n=e[0];e[0];)i=e[0],b.insertBefore(i,l);r.removeItem(l)}0===e&&(u?S=T=t:(S=n,T=i))}else{if(d)for(let e=0;e<_.length;e++)this._stripRemoveNode(_[e]);u&&(S=T=t)}r.removeEmptyNode(b,t,!1),u&&(N=S.textContent.length,k=T.textContent.length);const M=c||0===T.textContent.length;r.isBreak(T)||0!==T.textContent.length||(r.removeItem(T),T=S),k=M?T.textContent.length:k;const I={s:0,e:0},H=r.getNodePath(S,b,I),R=!T.parentNode;R&&(T=S);const D={s:0,e:0},O=r.getNodePath(T,b,R||M?null:D);N+=I.s,k=u?N:R?S.textContent.length:M?k+I.s:k+D.s;const F=r.mergeSameTags(b,[H,O],!0);return e.parentNode.replaceChild(b,e),S=r.getNodeFromPath(H,b),T=r.getNodeFromPath(O,b),{ancestor:b,startContainer:S,startOffset:N+F[0],endContainer:T,endOffset:k+F[1]}},_nodeChange_startLine:function(e,t,n,i,l,o,s,a,c,d,u){let h=i.parentNode;for(;!(h.nextSibling||h.previousSibling||r.isFormatElement(h.parentNode)||r.isWysiwygDiv(h.parentNode))&&h.nodeName!==t.nodeName;)h=h.parentNode;if(!s&&h.nodeName===t.nodeName&&!r.isFormatElement(h)&&!h.nextSibling&&r.onlyZeroWidthSpace(i.textContent.slice(0,l))){let n=!0,o=i.previousSibling;for(;o;){if(!r.onlyZeroWidthSpace(o)){n=!1;break}o=o.previousSibling}if(n)return r.copyTagAttributes(h,t),{ancestor:e,container:i,offset:l}}a.v=!1;const g=e,p=[t],m=e.cloneNode(!1);let f,_,b,v,y=i,C=l,w=!1;if(function e(i,l){const o=i.childNodes;for(let i,s,a=0,h=o.length;a<h;a++){const h=o[a];if(!h)continue;let x=l;if(w&&!r.isBreak(h)){if(1===h.nodeType){if(r._isIgnoreNodeChange(h)){if(t=t.cloneNode(!1),s=h.cloneNode(!0),m.appendChild(s),m.appendChild(t),p.push(t),u&&h.contains(u)){const e=r.getNodePath(u,h);u=r.getNodeFromPath(e,s)}}else e(h,h);continue}_=h,f=[];const o=[];for(;null!==_.parentNode&&_!==g&&_!==t;)i=n(_),1===_.nodeType&&i&&(d(_)?v||o.push(i):f.push(i)),_=_.parentNode;f=f.concat(o);const a=f.length>0,y=f.pop()||h;for(b=_=y;f.length>0;)_=f.pop(),b.appendChild(_),b=_;if(d(t.parentNode)&&!d(y)&&(t=t.cloneNode(!1),m.appendChild(t),p.push(t)),!v&&d(y)){t=t.cloneNode(!1);const e=y.childNodes;for(let n=0,i=e.length;n<i;n++)t.appendChild(e[n]);y.appendChild(t),m.appendChild(y),l=d(_)?t:_,p.push(t)}else a?(t.appendChild(y),l=_):l=t;if(v&&3===h.nodeType)if(c(h)){const e=r.getParentElement(l,function(e){return this._isMaintainedNode(e.parentNode)||e.parentNode===m}.bind(r));v.appendChild(e),t=e.cloneNode(!1),p.push(t),m.appendChild(t)}else v=null}if(w||h!==y)i=w?n(h):h.cloneNode(!1),i&&(l.appendChild(i),1!==h.nodeType||r.isBreak(h)||(x=i)),e(h,x);else{let e=m;v=c(h);const o=r.createTextNode(1===y.nodeType?"":y.substringData(0,C)),s=r.createTextNode(1===y.nodeType?"":y.substringData(C,y.length-C));if(v){const t=c(l);if(t&&t.parentNode!==e){let n=t,i=null;for(;n.parentNode!==e;){for(l=i=n.parentNode.cloneNode(!1);n.childNodes[0];)i.appendChild(n.childNodes[0]);n.appendChild(i),n=n.parentNode}n.parentNode.appendChild(t)}v=v.cloneNode(!1)}r.onlyZeroWidthSpace(o)||l.appendChild(o);const a=c(l);for(a&&(v=a),v&&(e=v),_=l,f=[];_!==e&&null!==_;)i=n(_),1===_.nodeType&&i&&f.push(i),_=_.parentNode;const d=f.pop()||l;for(b=_=d;f.length>0;)_=f.pop(),b.appendChild(_),b=_;d!==l?(t.appendChild(d),l=_):l=t,r.isBreak(h)&&t.appendChild(h.cloneNode(!1)),e.appendChild(t),y=s,C=0,w=!0,l.appendChild(y)}}}(e,m),s&&!o&&!a.v)return{ancestor:e,container:i,offset:l,endContainer:u};if(o=o&&s)for(let e=0;e<p.length;e++){let t=p[e];const n=t.childNodes,i=n[0];for(;n[0];)m.insertBefore(n[0],t);r.removeItem(t),0===e&&(y=i)}else if(s){t=t.firstChild;for(let e=0;e<p.length;e++)this._stripRemoveNode(p[e])}if(o||0!==m.childNodes.length){r.removeEmptyNode(m,t,!1),r.onlyZeroWidthSpace(m.textContent)&&(y=m.firstChild,C=0);const n={s:0,e:0},i=r.getNodePath(y,m,n);C+=n.s;const l=r.mergeSameTags(m,[i],!0);e.parentNode.replaceChild(m,e),y=r.getNodeFromPath(i,m),C+=l[0]}else e.childNodes?y=e.childNodes[0]:(y=r.createTextNode(r.zeroWidthSpace),e.appendChild(y));return{ancestor:m,container:y,offset:C,endContainer:u}},_nodeChange_middleLine:function(e,t,n,i,l,o,s){if(!l){let n=null;s&&e.contains(s)&&(n=r.getNodePath(s,e));const i=e.cloneNode(!0),l=t.nodeName,o=t.style.cssText,a=t.className;let c,d=i.childNodes,u=0,h=d.length;for(;u<h&&(c=d[u],3!==c.nodeType);u++){if(c.nodeName!==l){if(!r.isBreak(c)&&r._isIgnoreNodeChange(c))continue;if(1===h){d=c.childNodes,h=d.length,u=-1;continue}break}c.style.cssText+=o,r.addClass(c,a)}if(h>0&&u===h)return e.innerHTML=i.innerHTML,{ancestor:e,endContainer:n?r.getNodeFromPath(n,e):null}}o.v=!1;const a=e.cloneNode(!1),c=[t];let d=!0;if(function e(i,l){const o=i.childNodes;for(let i,u,h=0,g=o.length;h<g;h++){let g=o[h];if(!g)continue;let p=l;if(r.isBreak(g)||!r._isIgnoreNodeChange(g))i=n(g),i&&(d=!1,l.appendChild(i),1===g.nodeType&&(p=i)),r.isBreak(g)||e(g,p);else if(t.childNodes.length>0&&(a.appendChild(t),t=t.cloneNode(!1)),u=g.cloneNode(!0),a.appendChild(u),a.appendChild(t),c.push(t),l=t,s&&g.contains(s)){const e=r.getNodePath(s,g);s=r.getNodeFromPath(e,u)}}}(e,t),d||l&&!i&&!o.v)return{ancestor:e,endContainer:s};if(a.appendChild(t),i&&l)for(let e=0;e<c.length;e++){let t=c[e];const n=t.childNodes;for(;n[0];)a.insertBefore(n[0],t);r.removeItem(t)}else if(l){t=t.firstChild;for(let e=0;e<c.length;e++)this._stripRemoveNode(c[e])}return r.removeEmptyNode(a,t,!1),r.mergeSameTags(a,null,!0),e.parentNode.replaceChild(a,e),{ancestor:a,endContainer:s}},_nodeChange_endLine:function(e,t,n,i,l,o,s,a,c,d){let u=i.parentNode;for(;!(u.nextSibling||u.previousSibling||r.isFormatElement(u.parentNode)||r.isWysiwygDiv(u.parentNode))&&u.nodeName!==t.nodeName;)u=u.parentNode;if(!s&&u.nodeName===t.nodeName&&!r.isFormatElement(u)&&!u.previousSibling&&r.onlyZeroWidthSpace(i.textContent.slice(l))){let n=!0,o=i.nextSibling;for(;o;){if(!r.onlyZeroWidthSpace(o)){n=!1;break}o=o.nextSibling}if(n)return r.copyTagAttributes(u,t),{ancestor:e,container:i,offset:l}}a.v=!1;const h=e,g=[t],p=e.cloneNode(!1);let m,f,_,b,v=i,y=l,C=!1;if(function e(i,l){const o=i.childNodes;for(let i,s=o.length-1;0<=s;s--){const a=o[s];if(!a)continue;let u=l;if(C&&!r.isBreak(a)){if(1===a.nodeType){if(r._isIgnoreNodeChange(a)){t=t.cloneNode(!1);const e=a.cloneNode(!0);p.insertBefore(e,l),p.insertBefore(t,e),g.push(t)}else e(a,a);continue}f=a,m=[];const o=[];for(;null!==f.parentNode&&f!==h&&f!==t;)i=n(f),i&&1===f.nodeType&&(d(f)?b||o.push(i):m.push(i)),f=f.parentNode;m=m.concat(o);const s=m.length>0,u=m.pop()||a;for(_=f=u;m.length>0;)f=m.pop(),_.appendChild(f),_=f;if(d(t.parentNode)&&!d(u)&&(t=t.cloneNode(!1),p.insertBefore(t,p.firstChild),g.push(t)),!b&&d(u)){t=t.cloneNode(!1);const e=u.childNodes;for(let n=0,i=e.length;n<i;n++)t.appendChild(e[n]);u.appendChild(t),p.insertBefore(u,p.firstChild),g.push(t),l=t.children.length>0?f:t}else s?(t.insertBefore(u,t.firstChild),l=f):l=t;if(b&&3===a.nodeType)if(c(a)){const e=r.getParentElement(l,function(e){return this._isMaintainedNode(e.parentNode)||e.parentNode===p}.bind(r));b.appendChild(e),t=e.cloneNode(!1),g.push(t),p.insertBefore(t,p.firstChild)}else b=null}if(C||a!==v)i=C?n(a):a.cloneNode(!1),i&&(l.insertBefore(i,l.firstChild),1!==a.nodeType||r.isBreak(a)||(u=i)),e(a,u);else{b=c(a);const e=r.createTextNode(1===v.nodeType?"":v.substringData(y,v.length-y)),o=r.createTextNode(1===v.nodeType?"":v.substringData(0,y));if(b){b=b.cloneNode(!1);const e=c(l);if(e&&e.parentNode!==p){let t=e,n=null;for(;t.parentNode!==p;){for(l=n=t.parentNode.cloneNode(!1);t.childNodes[0];)n.appendChild(t.childNodes[0]);t.appendChild(n),t=t.parentNode}t.parentNode.insertBefore(e,t.parentNode.firstChild)}b=b.cloneNode(!1)}else d(t.parentNode)&&!b&&(t=t.cloneNode(!1),p.appendChild(t),g.push(t));for(r.onlyZeroWidthSpace(e)||l.insertBefore(e,l.firstChild),f=l,m=[];f!==p&&null!==f;)i=d(f)?null:n(f),i&&1===f.nodeType&&m.push(i),f=f.parentNode;const s=m.pop()||l;for(_=f=s;m.length>0;)f=m.pop(),_.appendChild(f),_=f;s!==l?(t.insertBefore(s,t.firstChild),l=f):l=t,r.isBreak(a)&&t.appendChild(a.cloneNode(!1)),b?(b.insertBefore(t,b.firstChild),p.insertBefore(b,p.firstChild),b=null):p.insertBefore(t,p.firstChild),v=o,y=o.data.length,C=!0,l.insertBefore(v,l.firstChild)}}}(e,p),s&&!o&&!a.v)return{ancestor:e,container:i,offset:l};if(o=o&&s)for(let e=0;e<g.length;e++){let t=g[e];const n=t.childNodes;let i=null;for(;n[0];)i=n[0],p.insertBefore(i,t);r.removeItem(t),e===g.length-1&&(v=i,y=i.textContent.length)}else if(s){t=t.firstChild;for(let e=0;e<g.length;e++)this._stripRemoveNode(g[e])}if(o||0!==p.childNodes.length){if(!s&&0===t.textContent.length)return r.removeEmptyNode(p,null,!1),{ancestor:null,container:null,offset:0};r.removeEmptyNode(p,t,!1),r.onlyZeroWidthSpace(p.textContent)?(v=p.firstChild,y=v.textContent.length):r.onlyZeroWidthSpace(v)&&(v=t,y=1);const n={s:0,e:0},i=r.getNodePath(v,p,n);y+=n.s;const l=r.mergeSameTags(p,[i],!0);e.parentNode.replaceChild(p,e),v=r.getNodeFromPath(i,p),y+=l[0]}else e.childNodes?v=e.childNodes[0]:(v=r.createTextNode(r.zeroWidthSpace),e.appendChild(v));return{ancestor:p,container:v,offset:1===v.nodeType&&1===y?v.childNodes.length:y}},actionCall:function(t,n,i){if(n){if(/more/i.test(n)){if(i!==this._moreLayerActiveButton){const n=e.element.toolbar.querySelector("."+t);n&&(this._moreLayerActiveButton&&this.moreLayerOff(),this._moreLayerActiveButton=i,n.style.display="block",u._showToolbarBalloon(),u._showToolbarInline()),r.addClass(i,"on")}else{e.element.toolbar.querySelector("."+this._moreLayerActiveButton.getAttribute("data-command"))&&(this.moreLayerOff(),u._showToolbarBalloon(),u._showToolbarInline())}return}if(/container/.test(n)&&(null===this._menuTray[t]||i!==this.containerActiveButton))return void this.callPlugin(t,this.containerOn.bind(this,i),i);if(this.isReadOnly&&r.arrayIncludes(this.resizingDisabledButtons,i))return;if(/submenu/.test(n)&&(null===this._menuTray[t]||i!==this.submenuActiveButton))return void this.callPlugin(t,this.submenuOn.bind(this,i),i);if(/dialog/.test(n))return void this.callPlugin(t,this.plugins[t].open.bind(this),i);/command/.test(n)?this.callPlugin(t,this.plugins[t].action.bind(this),i):/fileBrowser/.test(n)&&this.callPlugin(t,this.plugins[t].open.bind(this,null),i)}else t&&this.commandHandler(i,t);/submenu/.test(n)?this.submenuOff():/command/.test(n)||(this.submenuOff(),this.containerOff())},commandHandler:function(t,n){if(!d.isReadOnly||/copy|cut|selectAll|codeView|fullScreen|print|preview|showBlocks/.test(n))switch(n){case"copy":case"cut":this.execCommand(n);break;case"paste":break;case"selectAll":this.containerOff();const i=e.element.wysiwyg;let o=r.getChildElement(i.firstChild,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!1)||i.firstChild,s=r.getChildElement(i.lastChild,(function(e){return 0===e.childNodes.length||3===e.nodeType}),!0)||i.lastChild;if(!o||!s)return;if(r.isMedia(o)){const e=this.getFileComponent(o),t=r.createElement("BR"),n=r.createElement(l.defaultTag);n.appendChild(t),o=e?e.component:o,o.parentNode.insertBefore(n,o),o=t}if(r.isMedia(s)){const e=r.createElement("BR"),t=r.createElement(l.defaultTag);t.appendChild(e),i.appendChild(t),s=e}u._showToolbarBalloon(this.setRange(o,0,s,s.textContent.length));break;case"codeView":this.toggleCodeView();break;case"fullScreen":this.toggleFullScreen(t);break;case"indent":case"outdent":this.indent(n);break;case"undo":this.history.undo();break;case"redo":this.history.redo();break;case"removeFormat":this.removeFormat(),this.focus();break;case"print":this.print();break;case"preview":this.preview();break;case"showBlocks":this.toggleDisplayBlocks();break;case"dir":this.setDir(l.rtl?"ltr":"rtl");break;case"dir_ltr":this.setDir("ltr");break;case"dir_rtl":this.setDir("rtl");break;case"save":if("function"==typeof l.callBackSave)l.callBackSave(this.getContents(!1),this._variable.isChanged);else{if(!this._variable.isChanged||"function"!=typeof h.save)throw Error("[SUNEDITOR.core.commandHandler.fail] Please register call back function in creation option. (callBackSave : Function)");h.save()}this._variable.isChanged=!1,e.tool.save&&e.tool.save.setAttribute("disabled",!0);break;default:n=l._defaultCommand[n.toLowerCase()]||n,this.commandMap[n]||(this.commandMap[n]=t);const a=this._variable.currentNodesMap,c=a.indexOf(n)>-1?null:r.createElement(n);let d=n;/^SUB$/i.test(n)&&a.indexOf("SUP")>-1?d="SUP":/^SUP$/i.test(n)&&a.indexOf("SUB")>-1&&(d="SUB"),this.nodeChange(c,this._commandMapStyles[n]||null,[d],!1),this.focus()}},removeFormat:function(){this.nodeChange(null,null,null,null)},indent:function(e){const t=this.getRange(),n=this.getSelectedElements(null),i=[],o="indent"!==e,s=l.rtl?"marginRight":"marginLeft";let a=t.startContainer,c=t.endContainer,d=t.startOffset,u=t.endOffset;for(let e,t,l=0,a=n.length;l<a;l++)e=n[l],r.isListCell(e)&&this.plugins.list?(o||e.previousElementSibling)&&i.push(e):(t=/\d+/.test(e.style[s])?r.getNumber(e.style[s],0):0,o?t-=25:t+=25,r.setStyle(e,s,t<=0?"":t+"px"));i.length>0&&this.plugins.list.editInsideList.call(this,o,i),this.effectNode=null,this.setRange(a,d,c,u),this.history.push(!1)},toggleDisplayBlocks:function(){const t=e.element.wysiwyg;r.toggleClass(t,"se-show-block"),r.hasClass(t,"se-show-block")?r.addClass(this._styleCommandMap.showBlocks,"active"):r.removeClass(this._styleCommandMap.showBlocks,"active"),this._resourcesStateChange()},toggleCodeView:function(){const t=this._variable.isCodeView;this.controllersOff(),r.setDisabledButtons(!t,this.codeViewDisabledButtons),t?(r.isNonEditable(e.element.wysiwygFrame)||this._setCodeDataToEditor(),e.element.wysiwygFrame.scrollTop=0,e.element.code.style.display="none",e.element.wysiwygFrame.style.display="block",this._variable._codeOriginCssText=this._variable._codeOriginCssText.replace(/(\s?display(\s+)?:(\s+)?)[a-zA-Z]+(?=;)/,"display: none"),this._variable._wysiwygOriginCssText=this._variable._wysiwygOriginCssText.replace(/(\s?display(\s+)?:(\s+)?)[a-zA-Z]+(?=;)/,"display: block"),"auto"!==l.height||l.codeMirrorEditor||(e.element.code.style.height="0px"),this._variable.isCodeView=!1,this._variable.isFullScreen||(this._notHideToolbar=!1,/balloon|balloon-always/i.test(l.mode)&&(e.element._arrow.style.display="",this._isInline=!1,this._isBalloon=!0,u._hideToolbar())),this.nativeFocus(),r.removeClass(this._styleCommandMap.codeView,"active"),r.isNonEditable(e.element.wysiwygFrame)||(this.history.push(!1),this.history._resetCachingButton())):(this._setEditorDataToCodeView(),this._variable._codeOriginCssText=this._variable._codeOriginCssText.replace(/(\s?display(\s+)?:(\s+)?)[a-zA-Z]+(?=;)/,"display: block"),this._variable._wysiwygOriginCssText=this._variable._wysiwygOriginCssText.replace(/(\s?display(\s+)?:(\s+)?)[a-zA-Z]+(?=;)/,"display: none"),this._variable.isFullScreen?e.element.code.style.height="100%":"auto"!==l.height||l.codeMirrorEditor||(e.element.code.style.height=e.element.code.scrollHeight>0?e.element.code.scrollHeight+"px":"auto"),l.codeMirrorEditor&&l.codeMirrorEditor.refresh(),this._variable.isCodeView=!0,this._variable.isFullScreen||(this._notHideToolbar=!0,this._isBalloon&&(e.element._arrow.style.display="none",e.element.toolbar.style.left="",this._isInline=!0,this._isBalloon=!1,u._showToolbarInline())),this._variable._range=null,e.element.code.focus(),r.addClass(this._styleCommandMap.codeView,"active")),this._checkPlaceholder(),this.isReadOnly&&r.setDisabledButtons(!0,this.resizingDisabledButtons),"function"==typeof h.toggleCodeView&&h.toggleCodeView(this._variable.isCodeView,this)},_setCodeDataToEditor:function(){const t=this._getCodeView();if(l.fullPage){const e=this._parser.parseFromString(t,"text/html");if(!this.options.__allowedScriptTag){const t=e.head.children;for(let n=0,i=t.length;n<i;n++)/^script$/i.test(t[n].tagName)&&(e.head.removeChild(t[n]),n--,i--)}let n=e.head.innerHTML;e.head.querySelector('link[rel="stylesheet"]')&&("auto"!==this.options.height||e.head.querySelector("style"))||(n+=r._setIframeCssTags(this.options)),this._wd.head.innerHTML=n,this._wd.body.innerHTML=this.convertContentsForEditor(e.body.innerHTML);const i=e.body.attributes;for(let e=0,t=i.length;e<t;e++)"contenteditable"!==i[e].name&&this._wd.body.setAttribute(i[e].name,i[e].value);if(!r.hasClass(this._wd.body,"sun-editor-editable")){const e=l._editableClass.split(" ");for(let t=0;t<e.length;t++)r.addClass(this._wd.body,l._editableClass[t])}}else e.element.wysiwyg.innerHTML=t.length>0?this.convertContentsForEditor(t):"<"+l.defaultTag+"><br></"+l.defaultTag+">"},_setEditorDataToCodeView:function(){const t=this.convertHTMLForCodeView(e.element.wysiwyg,!1);let n="";if(l.fullPage){const e=r.getAttributesToString(this._wd.body,null);n="<!DOCTYPE html>\n<html>\n"+this._wd.head.outerHTML.replace(/>(?!\n)/g,">\n")+"<body "+e+">\n"+t+"</body>\n</html>"}else n=t;e.element.code.style.display="block",e.element.wysiwygFrame.style.display="none",this._setCodeView(n)},toggleFullScreen:function(t){const n=e.element.topArea,i=e.element.toolbar,o=e.element.editorArea,d=e.element.wysiwygFrame,g=e.element.code,p=this._variable;this.controllersOff();const m="none"===i.style.display||this._isInline&&!this._inlineToolbarAttr.isShow;p.isFullScreen?(p.isFullScreen=!1,d.style.cssText=p._wysiwygOriginCssText,g.style.cssText=p._codeOriginCssText,i.style.cssText="",o.style.cssText=p._editorAreaOriginCssText,n.style.cssText=p._originCssText,s.body.style.overflow=p._bodyOverflow,"auto"!==l.height||l.codeMirrorEditor||u._codeViewAutoHeight(),l.toolbarContainer&&l.toolbarContainer.appendChild(i),l.stickyToolbar>-1&&r.removeClass(i,"se-toolbar-sticky"),p._fullScreenAttrs.sticky&&!l.toolbarContainer&&(p._fullScreenAttrs.sticky=!1,e.element._stickyDummy.style.display="block",r.addClass(i,"se-toolbar-sticky")),this._isInline=p._fullScreenAttrs.inline,this._isBalloon=p._fullScreenAttrs.balloon,this._isInline&&u._showToolbarInline(),l.toolbarContainer&&r.removeClass(i,"se-toolbar-balloon"),u.onScroll_window(),t&&r.changeElement(t.firstElementChild,c.expansion),e.element.topArea.style.marginTop="",r.removeClass(this._styleCommandMap.fullScreen,"active")):(p.isFullScreen=!0,p._fullScreenAttrs.inline=this._isInline,p._fullScreenAttrs.balloon=this._isBalloon,(this._isInline||this._isBalloon)&&(this._isInline=!1,this._isBalloon=!1),l.toolbarContainer&&e.element.relative.insertBefore(i,o),n.style.position="fixed",n.style.top="0",n.style.left="0",n.style.width="100%",n.style.maxWidth="100%",n.style.height="100%",n.style.zIndex="2147483647",""!==e.element._stickyDummy.style.display&&(p._fullScreenAttrs.sticky=!0,e.element._stickyDummy.style.display="none",r.removeClass(i,"se-toolbar-sticky")),p._bodyOverflow=s.body.style.overflow,s.body.style.overflow="hidden",p._editorAreaOriginCssText=o.style.cssText,p._wysiwygOriginCssText=d.style.cssText,p._codeOriginCssText=g.style.cssText,o.style.cssText=i.style.cssText="",d.style.cssText=(d.style.cssText.match(/\s?display(\s+)?:(\s+)?[a-zA-Z]+;/)||[""])[0]+l._editorStyles.editor,g.style.cssText=(g.style.cssText.match(/\s?display(\s+)?:(\s+)?[a-zA-Z]+;/)||[""])[0],i.style.width=d.style.height=g.style.height="100%",i.style.position="relative",i.style.display="block",p.innerHeight_fullScreen=a.innerHeight-i.offsetHeight,o.style.height=p.innerHeight_fullScreen-l.fullScreenOffset+"px",t&&r.changeElement(t.firstElementChild,c.reduction),l.iframe&&"auto"===l.height&&(o.style.overflow="auto",this._iframeAutoHeight()),e.element.topArea.style.marginTop=l.fullScreenOffset+"px",r.addClass(this._styleCommandMap.fullScreen,"active")),m&&h.toolbar.hide(),"function"==typeof h.toggleFullScreen&&h.toggleFullScreen(this._variable.isFullScreen,this)},print:function(){const e=r.createElement("IFRAME");e.style.display="none",s.body.appendChild(e);const t=l.printTemplate?l.printTemplate.replace(/\{\{\s*contents\s*\}\}/i,this.getContents(!0)):this.getContents(!0),n=r.getIframeDocument(e),i=this._wd;if(l.iframe){const e=null!==l._printClass?'class="'+l._printClass+'"':l.fullPage?r.getAttributesToString(i.body,["contenteditable"]):'class="'+l._editableClass+'"';n.write("<!DOCTYPE html><html><head>"+i.head.innerHTML+"</head><body "+e+">"+t+"</body></html>")}else{const e=s.head.getElementsByTagName("link"),i=s.head.getElementsByTagName("style");let o="";for(let t=0,n=e.length;t<n;t++)o+=e[t].outerHTML;for(let e=0,t=i.length;e<t;e++)o+=i[e].outerHTML;n.write("<!DOCTYPE html><html><head>"+o+'</head><body class="'+(null!==l._printClass?l._printClass:l._editableClass)+'">'+t+"</body></html>")}this.showLoading(),a.setTimeout((function(){try{if(e.focus(),r.isIE_Edge||r.isChromium||s.documentMode||a.StyleMedia)try{e.contentWindow.document.execCommand("print",!1,null)}catch(t){e.contentWindow.print()}else e.contentWindow.print()}catch(e){throw Error("[SUNEDITOR.core.print.fail] error: "+e)}finally{d.closeLoading(),r.removeItem(e)}}),1e3)},preview:function(){d.submenuOff(),d.containerOff(),d.controllersOff();const e=l.previewTemplate?l.previewTemplate.replace(/\{\{\s*contents\s*\}\}/i,this.getContents(!0)):this.getContents(!0),t=a.open("","_blank");t.mimeType="text/html";const n=this._wd;if(l.iframe){const i=null!==l._printClass?'class="'+l._printClass+'"':l.fullPage?r.getAttributesToString(n.body,["contenteditable"]):'class="'+l._editableClass+'"';t.document.write("<!DOCTYPE html><html><head>"+n.head.innerHTML+"<style>body {overflow:auto !important; margin: 10px auto !important; height:auto !important; outline:1px dashed #ccc;}</style></head><body "+i+">"+e+"</body></html>")}else{const n=s.head.getElementsByTagName("link"),o=s.head.getElementsByTagName("style");let a="";for(let e=0,t=n.length;e<t;e++)a+=n[e].outerHTML;for(let e=0,t=o.length;e<t;e++)a+=o[e].outerHTML;t.document.write('<!DOCTYPE html><html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><title>'+i.toolbar.preview+"</title>"+a+'</head><body class="'+(null!==l._printClass?l._printClass:l._editableClass)+'" style="margin:10px auto !important; height:auto !important; outline:1px dashed #ccc;">'+e+"</body></html>")}},setDir:function(t){const n="rtl"===t,o=this._prevRtl!==n;this._prevRtl=l.rtl=n,o&&(this.plugins.align&&this.plugins.align.exchangeDir.call(this),e.tool.indent&&r.changeElement(e.tool.indent.firstElementChild,c.indent),e.tool.outdent&&r.changeElement(e.tool.outdent.firstElementChild,c.outdent));const s=e.element;n?(r.addClass(s.topArea,"se-rtl"),r.addClass(s.wysiwygFrame,"se-rtl")):(r.removeClass(s.topArea,"se-rtl"),r.removeClass(s.wysiwygFrame,"se-rtl"));const a=r.getListChildren(s.wysiwyg,(function(e){return r.isFormatElement(e)&&(e.style.marginRight||e.style.marginLeft||e.style.textAlign)}));for(let e,t,n,i=0,l=a.length;i<l;i++)e=a[i],n=e.style.marginRight,t=e.style.marginLeft,(n||t)&&(e.style.marginRight=t,e.style.marginLeft=n),n=e.style.textAlign,"left"===n?e.style.textAlign="right":"right"===n&&(e.style.textAlign="left");const d=e.tool;d.dir&&(r.changeTxt(d.dir.querySelector(".se-tooltip-text"),i.toolbar[l.rtl?"dir_ltr":"dir_rtl"]),r.changeElement(d.dir.firstElementChild,c[l.rtl?"dir_ltr":"dir_rtl"])),d.dir_ltr&&(n?r.removeClass(d.dir_ltr,"active"):r.addClass(d.dir_ltr,"active")),d.dir_rtl&&(n?r.addClass(d.dir_rtl,"active"):r.removeClass(d.dir_rtl,"active"))},setContents:function(t){this.removeRange();const n=null==t?"":this.convertContentsForEditor(t,null,null);if(this._variable.isCodeView){const e=this.convertHTMLForCodeView(n,!1);this._setCodeView(e)}else e.element.wysiwyg.innerHTML=n,this._resetComponents(),this.history.push(!1)},setIframeContents:function(e){if(!l.iframe)return!1;e.head&&(this._wd.head.innerHTML=this.options.__allowedScriptTag?e.head:e.head.replace(this.__scriptTagRegExp,"")),e.body&&(this._wd.body.innerHTML=this.convertContentsForEditor(e.body)),this._resetComponents()},getContents:function(t){const n=this.cleanHTML(e.element.wysiwyg.innerHTML,null,null),i=r.createElement("DIV");i.innerHTML=n;const o=r.getListChildren(i,(function(e){return e.hasAttribute("contenteditable")}));for(let e=0,t=o.length;e<t;e++)o[e].removeAttribute("contenteditable");if(l.fullPage&&!t){const e=r.getAttributesToString(this._wd.body,["contenteditable"]);return"<!DOCTYPE html><html>"+this._wd.head.outerHTML+"<body "+e+">"+i.innerHTML+"</body></html>"}return i.innerHTML},getFullContents:function(e){return'<div class="sun-editor-editable'+(l.rtl?" se-rtl":"")+'">'+this.getContents(e)+"</div>"},_makeLine:function(e,t){const n=l.defaultTag;if(1===e.nodeType){if(this.__disallowedTagNameRegExp.test(e.nodeName))return"";if(/__se__tag/.test(e.className))return e.outerHTML;const i=r.getListChildNodes(e,(function(e){return r.isSpanWithoutAttr(e)&&!r.getParentElement(e,r.isNotCheckingNode)}))||[];for(let e=i.length-1;e>=0;e--)i[e].outerHTML=i[e].innerHTML;return!t||r.isFormatElement(e)||r.isRangeFormatElement(e)||r.isComponent(e)||r.isFigures(e)||r.isAnchor(e)&&r.isMedia(e.firstElementChild)?r.isSpanWithoutAttr(e)?e.innerHTML:e.outerHTML:"<"+n+">"+(r.isSpanWithoutAttr(e)?e.innerHTML:e.outerHTML)+"</"+n+">"}if(3===e.nodeType){if(!t)return r._HTMLConvertor(e.textContent);const i=e.textContent.split(/\n/g);let l="";for(let e,t=0,o=i.length;t<o;t++)e=i[t].trim(),e.length>0&&(l+="<"+n+">"+r._HTMLConvertor(e)+"</"+n+">");return l}return 8===e.nodeType&&this._allowHTMLComments?"\x3c!--"+e.textContent.trim()+"--\x3e":""},_tagConvertor:function(e){if(!this._disallowedTextTagsRegExp)return e;const t=l._textTagsMap;return e.replace(this._disallowedTextTagsRegExp,(function(e,n,i,l){return n+("string"==typeof t[i]?t[i]:i)+(l?" "+l:"")}))},_deleteDisallowedTags:function(e){return e=e.replace(this.__disallowedTagsRegExp,"").replace(/<[a-z0-9]+\:[a-z0-9]+[^>^\/]*>[^>]*<\/[a-z0-9]+\:[a-z0-9]+>/gi,""),/\bfont\b/i.test(this.options._editorTagsWhitelist)||(e=e.replace(/(<\/?)font(\s?)/gi,"$1span$2")),e.replace(this.editorTagsWhitelistRegExp,"").replace(this.editorTagsBlacklistRegExp,"")},_convertFontSize:function(e,t){const n=this._w.Math,i=t.match(/(\d+(?:\.\d+)?)(.+)/),l=i?1*i[1]:r.fontValueMap[t],o=i?i[2]:"rem";let s=l;switch(/em/.test(o)?s=n.round(l/.0625):"pt"===o?s=n.round(1.333*l):"%"===o&&(s=l/100),e){case"em":case"rem":case"%":return(.0625*s).toFixed(2)+e;case"pt":return n.round(s/1.333)+e;default:return s+e}},_cleanStyle:function(e,t,n){let i=(e.match(/style\s*=\s*(?:"|')[^"']*(?:"|')/)||[])[0];if(/span/i.test(n)&&!i&&(e.match(/<[^\s]+\s(.+)/)||[])[1]){const t=(e.match(/\ssize="([^"]+)"/i)||[])[1],n=(e.match(/\sface="([^"]+)"/i)||[])[1],l=(e.match(/\scolor="([^"]+)"/i)||[])[1];(t||n||l)&&(i='style="'+(t?"font-size:"+this.util.getNumber(t/3.333,1)+"rem;":"")+(n?"font-family:"+n+";":"")+(l?"color:"+l+";":"")+'"')}if(i){t||(t=[]);const e=i.replace(/&quot;/g,"").match(this._cleanStyleRegExp[n]);if(e){const n=[];for(let t,i=0,o=e.length;i<o;i++)if(t=e[i].match(/([a-zA-Z0-9-]+)(:)([^"']+)/),t&&!/inherit|initial|revert|unset/i.test(t[3])){const e=r.kebabToCamelCase(t[1].trim()),i=this.wwComputedStyle[e]?this.wwComputedStyle[e].replace(/"/g,""):"",o=t[3].trim();switch(e){case"fontFamily":if(!l.plugins.font||-1===l.font.indexOf(o))continue;break;case"fontSize":if(!l.plugins.fontSize)continue;this._cleanStyleRegExp.fontSizeUnit.test(t[0])||(t[0]=t[0].replace((t[0].match(/:\s*([^;]+)/)||[])[1],this._convertFontSize.bind(this,l.fontSizeUnit)));break;case"color":if(!l.plugins.fontColor||/rgba\(([0-9]+\s*,\s*){3}0\)|windowtext/i.test(o))continue;break;case"backgroundColor":if(!l.plugins.hiliteColor||/rgba\(([0-9]+\s*,\s*){3}0\)|windowtext/i.test(o))continue}i!==o&&n.push(t[0])}n.length>0&&t.push('style="'+n.join(";")+'"')}}return t},_cleanTags:function(e,t,n){if(/^<[a-z0-9]+\:[a-z0-9]+/i.test(t))return t;let i=null;const l=n.match(/(?!<)[a-zA-Z0-9\-]+/)[0].toLowerCase(),o=this._attributesTagsBlacklist[l];t=t.replace(/\s(?:on[a-z]+)\s*=\s*(")[^"]*\1/gi,""),t=o?t.replace(o,""):t.replace(this._attributesBlacklistRegExp,"");const s=this._attributesTagsWhitelist[l];if(i=s?t.match(s):t.match(e?this._attributesWhitelistRegExp:this._attributesWhitelistRegExp_all_data),e||"span"===l||"li"===l||this._cleanStyleRegExp[l])if("a"===l){const e=t.match(/(?:(?:id|name)\s*=\s*(?:"|')[^"']*(?:"|'))/g);e&&(i||(i=[]),i.push(e[0]))}else i&&/style=/i.test(i.toString())||("span"!==l&&"li"!==l||(i=this._cleanStyle(t,i,"span")),this._cleanStyleRegExp[l]?i=this._cleanStyle(t,i,l):/^(P|DIV|H[1-6]|PRE)$/i.test(l)&&(i=this._cleanStyle(t,i,"format")));else{const e=t.match(/style\s*=\s*(?:"|')[^"']*(?:"|')/);e&&!i?i=[e[0]]:e&&!i.some((function(e){return/^style/.test(e.trim())}))&&i.push(e[0])}if(r.isFigures(l)){const e=t.match(/style\s*=\s*(?:"|')[^"']*(?:"|')/);i||(i=[]),e&&i.push(e[0])}if(i)for(let e,t=0,l=i.length;t<l;t++)e=/^(?:href|src)\s*=\s*('|"|\s)*javascript\s*\:/i.test(i[t].trim())?"":i[t],n+=(/^\s/.test(e)?"":" ")+e;return n},_editFormat:function(e){let t,n="";const i=e.childNodes;for(let e,o=0,s=i.length;o<s;o++)e=i[o],8===e.nodeType?n+="\x3c!-- "+e.textContent+" --\x3e":r.isFormatElement(e)||r.isRangeFormatElement(e)||r.isComponent(e)||/meta/i.test(e.nodeName)?(t&&(n+=t.outerHTML,t=null),n+=e.outerHTML):(t||(t=r.createElement(l.defaultTag)),r.isTextStyleElement(e)&&e.removeAttribute("style"),t.appendChild(e),o--,s--);return t&&(n+=t.outerHTML),s.createRange().createContextualFragment(n)},_convertListCell:function(e){let t="";for(let n,i=0,l=e.length;i<l;i++)n=e[i],1===n.nodeType?r.isList(n)?t+=n.innerHTML:r.isListCell(n)?t+=n.outerHTML:r.isFormatElement(n)?t+="<li>"+(n.innerHTML.trim()||"<br>")+"</li>":r.isRangeFormatElement(n)&&!r.isTable(n)?t+=this._convertListCell(n):t+="<li>"+n.outerHTML+"</li>":t+="<li>"+(n.textContent||"<br>")+"</li>";return t},_isFormatData:function(e){let t=!1;for(let n,i=0,l=e.length;i<l;i++)if(n=e[i],1===n.nodeType&&!r.isTextStyleElement(n)&&!r.isBreak(n)&&!this.__disallowedTagNameRegExp.test(n.nodeName)){t=!0;break}return t},cleanHTML:function(e,t,n){if(!l.strictMode)return r.htmlCompress(e);e=this._deleteDisallowedTags(this._parser.parseFromString(r.htmlCompress(e),"text/html").body.innerHTML).replace(/(<[a-zA-Z0-9\-]+)[^>]*(?=>)/g,this._cleanTags.bind(this,!0)).replace(/<br\/?>$/i,"");const i=s.createRange().createContextualFragment(e);try{r._consistencyCheckOfHTML(i,this._htmlCheckWhitelistRegExp,this._htmlCheckBlacklistRegExp,this._classNameFilter,l.strictHTMLValidation)}catch(e){console.warn("[SUNEDITOR.cleanHTML.consistencyCheck.fail] "+e)}if(this.managedTagsInfo&&this.managedTagsInfo.query){const e=i.querySelectorAll(this.managedTagsInfo.query);for(let t,n,i=0,l=e.length;i<l;i++){n=[].slice.call(e[i].classList);for(let l=0,o=n.length;l<o;l++)if(t=this.managedTagsInfo.map[n[l]],t){t(e[i]);break}}}let o=i.childNodes,a="";const c=this._isFormatData(o);c&&(o=this._editFormat(i).childNodes);for(let e,t=0,n=o.length;t<n;t++)e=o[t],this.__allowedScriptRegExp.test(e.nodeName)?a+=e.outerHTML:a+=this._makeLine(e,c);return a=r.htmlRemoveWhiteSpace(a),a?(t&&(a=a.replace("string"==typeof t?r.createTagsWhitelist(t):t,"")),n&&(a=a.replace("string"==typeof n?r.createTagsBlacklist(n):n,""))):a=e,this._tagConvertor(a)},convertContentsForEditor:function(e){if(!l.strictMode)return r.htmlCompress(e);e=this._deleteDisallowedTags(this._parser.parseFromString(r.htmlCompress(e),"text/html").body.innerHTML).replace(/(<[a-zA-Z0-9\-]+)[^>]*(?=>)/g,this._cleanTags.bind(this,!0));const t=s.createRange().createContextualFragment(e);try{r._consistencyCheckOfHTML(t,this._htmlCheckWhitelistRegExp,this._htmlCheckBlacklistRegExp,this._classNameFilter,l.strictHTMLValidation)}catch(e){console.warn("[SUNEDITOR.convertContentsForEditor.consistencyCheck.fail] "+e)}if(this.managedTagsInfo&&this.managedTagsInfo.query){const e=t.querySelectorAll(this.managedTagsInfo.query);for(let t,n,i=0,l=e.length;i<l;i++){n=[].slice.call(e[i].classList);for(let l=0,o=n.length;l<o;l++)if(t=this.managedTagsInfo.map[n[l]],t){t(e[i]);break}}}const n=t.childNodes;let i="",o=null;for(let e,t=0;t<n.length;t++)if(e=n[t],this.__allowedScriptRegExp.test(e.nodeName))i+=e.outerHTML;else{if(!(r.isFormatElement(e)||r.isRangeFormatElement(e)||r.isComponent(e)||r.isFigures(e)||8===e.nodeType||/__se__tag/.test(e.className))){if(o||(o=r.createElement(l.defaultTag)),o.appendChild(e),t--,n[t+1]&&!r.isFormatElement(n[t+1]))continue;e=o,o=null}o&&(i+=this._makeLine(o,!0),o=null),i+=this._makeLine(e,!0)}return o&&(i+=this._makeLine(o,!0)),0===i.length?"<"+l.defaultTag+"><br></"+l.defaultTag+">":(i=r.htmlRemoveWhiteSpace(i),this._tagConvertor(i))},convertHTMLForCodeView:function(e,t){let n="";const i=a.RegExp,l=new i("^(BLOCKQUOTE|PRE|TABLE|THEAD|TBODY|TR|TH|TD|OL|UL|IMG|IFRAME|VIDEO|AUDIO|FIGURE|FIGCAPTION|HR|BR|CANVAS|SELECT)$","i"),o="string"==typeof e?s.createRange().createContextualFragment(e):e,c=function(e){return this.isFormatElement(e)||this.isComponent(e)}.bind(r),d=t?"":"\n";let u=t?0:1*this._variable.codeIndent;return u=u>0?new a.Array(u+1).join(" "):"",function e(t,o){const s=t.childNodes,h=l.test(t.nodeName),g=h?o:"";for(let p,m,f,_,b,v,y=0,C=s.length;y<C;y++)p=s[y],_=l.test(p.nodeName),m=_?d:"",f=!c(p)||h||/^(TH|TD)$/i.test(t.nodeName)?"":d,8!==p.nodeType?3!==p.nodeType?0!==p.childNodes.length?p.outerHTML?(b=p.nodeName.toLowerCase(),v=g||_?o:"",n+=(f||(h?"":m))+v+p.outerHTML.match(i("<"+b+"[^>]*>","i"))[0]+m,e(p,o+u),n+=(/\n$/.test(n)?v:"")+"</"+b+">"+(f||m||h||/^(TH|TD)$/i.test(p.nodeName)?d:"")):n+=(new a.XMLSerializer).serializeToString(p):n+=(/^HR$/i.test(p.nodeName)?d:"")+(/^PRE$/i.test(p.parentElement.nodeName)&&/^BR$/i.test(p.nodeName)?"":g)+p.outerHTML+m:r.isList(p.parentElement)||(n+=r._HTMLConvertor(/^\n+$/.test(p.data)?"":p.data)):n+="\n\x3c!-- "+p.textContent.trim()+" --\x3e"+m}(o,""),n.trim()+d},addDocEvent:function(e,t,n){s.addEventListener(e,t,n),l.iframe&&this._wd.addEventListener(e,t)},removeDocEvent:function(e,t){s.removeEventListener(e,t),l.iframe&&this._wd.removeEventListener(e,t)},_charCount:function(e){const t=l.maxCharCount,n=l.charCounterType;let i=0;if(e&&(i=this.getCharLength(e,n)),this._setCharCount(),t>0){let e=!1;const l=h.getCharCount(n);if(l>t){if(e=!0,i>0){this._editorRange();const e=this.getRange(),n=e.endOffset-1,i=this.getSelectionNode().textContent,o=e.endOffset-(l-t);this.getSelectionNode().textContent=i.slice(0,o<0?0:o)+i.slice(e.endOffset,i.length),this.setRange(e.endContainer,n,e.endContainer,n)}}else l+i>t&&(e=!0);if(e&&(this._callCounterBlink(),i>0))return!1}return!0},checkCharCount:function(e,t){if(l.maxCharCount){const n=t||l.charCounterType,i=this.getCharLength("string"==typeof e?e:this._charTypeHTML&&1===e.nodeType?e.outerHTML:e.textContent,n);if(i>0&&i+h.getCharCount(n)>l.maxCharCount)return this._callCounterBlink(),!1}return!0},getCharLength:function(e,t){return/byte/.test(t)?r.getByteLength(e):e.length},resetResponsiveToolbar:function(){d.controllersOff();const t=u._responsiveButtonSize;if(t){let n=0;n=(d._isBalloon||d._isInline)&&"auto"===l.toolbarWidth?e.element.topArea.offsetWidth:e.element.toolbar.offsetWidth;let i="default";for(let e=1,l=t.length;e<l;e++)if(n<t[e]){i=t[e]+"";break}u._responsiveCurrentSize!==i&&(u._responsiveCurrentSize=i,h.setToolbarButtons(u._responsiveButtons[i]))}},_setCharCount:function(){e.element.charCounter&&a.setTimeout(function(e,t){this.textContent&&e&&(this.textContent=e.getCharCount(t.charCounterType))}.bind(e.element.charCounter,h,l),0)},_callCounterBlink:function(){const t=e.element.charWrapper;t&&!r.hasClass(t,"se-blink")&&(r.addClass(t,"se-blink"),a.setTimeout((function(){r.removeClass(t,"se-blink")}),600))},_checkComponents:function(){for(let e=0,t=this._fileInfoPluginsCheck.length;e<t;e++)this._fileInfoPluginsCheck[e]()},_resetComponents:function(){for(let e=0,t=this._fileInfoPluginsReset.length;e<t;e++)this._fileInfoPluginsReset[e]()},_setCodeView:function(t){l.codeMirrorEditor?l.codeMirrorEditor.getDoc().setValue(t):e.element.code.value=t},_getCodeView:function(){return l.codeMirrorEditor?l.codeMirrorEditor.getDoc().getValue():e.element.code.value},_setKeyEffect:function(e){const t=this.commandMap,i=this.activePlugins;for(let l in t)e.indexOf(l)>-1||!r.hasOwn(t,l)||(i.indexOf(l)>-1?n[l].active.call(this,null):t.OUTDENT&&/^OUTDENT$/i.test(l)?r.isImportantDisabled(t.OUTDENT)||t.OUTDENT.setAttribute("disabled",!0):t.INDENT&&/^INDENT$/i.test(l)?r.isImportantDisabled(t.INDENT)||t.INDENT.removeAttribute("disabled"):r.removeClass(t[l],"active"))},_init:function(i,o){const c=a.RegExp;this._ww=l.iframe?e.element.wysiwygFrame.contentWindow:a,this._wd=s,this._charTypeHTML="byte-html"===l.charCounterType,this.wwComputedStyle=a.getComputedStyle(e.element.wysiwyg),this._editorHeight=e.element.wysiwygFrame.offsetHeight,this._editorHeightPadding=r.getNumber(this.wwComputedStyle.getPropertyValue("padding-top"))+r.getNumber(this.wwComputedStyle.getPropertyValue("padding-bottom")),this._classNameFilter=function(e){return this.test(e)?e:""}.bind(l.allowedClassNames);const d=l.__allowedScriptTag?"":"script|";if(this.__scriptTagRegExp=new c("<(script)[^>]*>([\\s\\S]*?)<\\/\\1>|<script[^>]*\\/?>","gi"),this.__disallowedTagsRegExp=new c("<("+d+"style)[^>]*>([\\s\\S]*?)<\\/\\1>|<("+d+"style)[^>]*\\/?>","gi"),this.__disallowedTagNameRegExp=new c("^("+d+"meta|link|style|[a-z]+:[a-z]+)$","i"),this.__allowedScriptRegExp=new c("^"+(l.__allowedScriptTag?"script":"")+"$","i"),!l.iframe&&"function"==typeof a.ShadowRoot){let t=e.element.wysiwygFrame;for(;t;){if(t.shadowRoot){this._shadowRoot=t.shadowRoot;break}if(t instanceof a.ShadowRoot){this._shadowRoot=t;break}t=t.parentNode}this._shadowRoot&&(this._shadowRootControllerEventTarget=[])}const u=a.Object.keys(l._textTagsMap),h=l.addTagsWhitelist?l.addTagsWhitelist.split("|").filter((function(e){return/b|i|ins|s|strike/i.test(e)})):[];for(let e=0;e<h.length;e++)u.splice(u.indexOf(h[e].toLowerCase()),1);this._disallowedTextTagsRegExp=0===u.length?null:new c("(<\\/?)("+u.join("|")+")\\b\\s*([^>^<]+)?\\s*(?=>)","gi");const g=function(e,t){return e?"*"===e?"[a-z-]+":t?e+"|"+t:e:"^"},p="contenteditable|colspan|rowspan|target|href|download|rel|src|alt|class|type|origin-size|controls|autoplay|loop|muted|poster|preload|playsinline|allowfullscreen|sandbox|loading|allow|referrerpolicy|frameborder|scrolling";this._allowHTMLComments=l._editorTagsWhitelist.indexOf("//")>-1||"*"===l._editorTagsWhitelist,this._htmlCheckWhitelistRegExp=new c("^("+g(l._editorTagsWhitelist.replace("|//",""),"")+")$","i"),this._htmlCheckBlacklistRegExp=new c("^("+(l.tagsBlacklist||"^")+")$","i"),this.editorTagsWhitelistRegExp=r.createTagsWhitelist(g(l._editorTagsWhitelist.replace("|//","|\x3c!--|--\x3e"),"")),this.editorTagsBlacklistRegExp=r.createTagsBlacklist(l.tagsBlacklist.replace("|//","|\x3c!--|--\x3e")),this.pasteTagsWhitelistRegExp=r.createTagsWhitelist(g(l.pasteTagsWhitelist,"")),this.pasteTagsBlacklistRegExp=r.createTagsBlacklist(l.pasteTagsBlacklist);const m='\\s*=\\s*(")[^"]*\\1',f=l.attributesWhitelist;let _={},b="";if(f)for(let e in f)r.hasOwn(f,e)&&!/^on[a-z]+$/i.test(f[e])&&("all"===e?b=g(f[e],p):_[e]=new c("\\s(?:"+g(f[e],p)+")"+m,"ig"));this._attributesWhitelistRegExp=new c("\\s(?:"+(b||p+"|data-format|data-size|data-file-size|data-file-name|data-origin|data-align|data-image-link|data-rotate|data-proportion|data-percentage|data-exp|data-font-size")+")"+m,"ig"),this._attributesWhitelistRegExp_all_data=new c("\\s(?:"+(b||p)+"|data-[a-z0-9\\-]+)"+m,"ig"),this._attributesTagsWhitelist=_;const v=l.attributesBlacklist;if(_={},b="",v)for(let e in v)r.hasOwn(v,e)&&("all"===e?b=g(v[e],""):_[e]=new c("\\s(?:"+g(v[e],"")+")"+m,"ig"));this._attributesBlacklistRegExp=new c("\\s(?:"+(b||"^")+")"+m,"ig"),this._attributesTagsBlacklist=_,this._isInline=/inline/i.test(l.mode),this._isBalloon=/balloon|balloon-always/i.test(l.mode),this._isBalloonAlways=/balloon-always/i.test(l.mode),this._cachingButtons(),this._fileInfoPluginsCheck=[],this._fileInfoPluginsReset=[],this.managedTagsInfo={query:"",map:{}};const y=[];this.activePlugins=[],this._fileManager.tags=[],this._fileManager.pluginMap={};let C,w,x=[];for(let e in n)if(r.hasOwn(n,e)){if(C=n[e],w=t[e],(C.active||C.action)&&w&&this.callPlugin(e,null,w),"function"==typeof C.checkFileInfo&&"function"==typeof C.resetFileInfo&&(this.callPlugin(e,null,w),this._fileInfoPluginsCheck.push(C.checkFileInfo.bind(this)),this._fileInfoPluginsReset.push(C.resetFileInfo.bind(this))),a.Array.isArray(C.fileTags)){const t=C.fileTags;this.callPlugin(e,null,w),this._fileManager.tags=this._fileManager.tags.concat(t),x.push(e);for(let n=0,i=t.length;n<i;n++)this._fileManager.pluginMap[t[n].toLowerCase()]=e}if(C.managedTags){const e=C.managedTags();y.push("."+e.className),this.managedTagsInfo.map[e.className]=e.method.bind(this)}}this.managedTagsInfo.query=y.toString(),this._fileManager.queryString=this._fileManager.tags.join(","),this._fileManager.regExp=new c("^("+(this._fileManager.tags.join("|")||"^")+")$","i"),this._fileManager.pluginRegExp=new c("^("+(0===x.length?"^":x.join("|"))+")$","i"),this._variable._originCssText=e.element.topArea.style.cssText,this._placeholder=e.element.placeholder,this._lineBreaker=e.element.lineBreaker,this._lineBreakerButton=this._lineBreaker.querySelector("button"),this.history=function(e,t){const n=e._w,i=e.util,l=e.options.historyStackDelayTime;let o=e.context.element,s=e.context.tool.undo,a=e.context.tool.redo,r=null,c=0,d=[];function u(){const n=d[c];o.wysiwyg.innerHTML=n.contents,e.setRange(i.getNodeFromPath(n.s.path,o.wysiwyg),n.s.offset,i.getNodeFromPath(n.e.path,o.wysiwyg),n.e.offset),e.focus(),d.length<=1?(s&&s.setAttribute("disabled",!0),a&&a.setAttribute("disabled",!0)):0===c?(s&&s.setAttribute("disabled",!0),a&&a.removeAttribute("disabled")):c===d.length-1?(s&&s.removeAttribute("disabled"),a&&a.setAttribute("disabled",!0)):(s&&s.removeAttribute("disabled"),a&&a.removeAttribute("disabled")),e.controllersOff(),e._checkComponents(),e._setCharCount(),e._resourcesStateChange(),t()}function h(){e._checkComponents();const n=o.wysiwyg.innerHTML;if(!n||d[c]&&n===d[c].contents)return;c++;const l=e._variable._range;d.length>c&&(d=d.slice(0,c),a&&a.setAttribute("disabled",!0)),d[c]=l?{contents:n,s:{path:i.getNodePath(l.startContainer,null,null),offset:l.startOffset},e:{path:i.getNodePath(l.endContainer,null,null),offset:l.endOffset}}:{contents:n,s:{path:[0,0],offset:[0,0]},e:{path:0,offset:0}},1===c&&s&&s.removeAttribute("disabled"),e._setCharCount(),t()}return{stack:d,push:function(t){n.setTimeout(e._resourcesStateChange.bind(e));const i="number"==typeof t?t>0?t:0:t?l:0;i&&!r||(n.clearTimeout(r),i)?r=n.setTimeout((function(){n.clearTimeout(r),r=null,h()}),i):h()},undo:function(){c>0&&(c--,u())},redo:function(){d.length-1>c&&(c++,u())},go:function(e){c=e<0?d.length-1:e,u()},getCurrentIndex:function(){return c},reset:function(n){s&&s.setAttribute("disabled",!0),a&&a.setAttribute("disabled",!0),e._variable.isChanged=!1,e.context.tool.save&&e.context.tool.save.setAttribute("disabled",!0),d.splice(0),c=0,d[c]={contents:e.getContents(!0),s:{path:[0,0],offset:0},e:{path:[0,0],offset:0}},n||t()},_resetCachingButton:function(){o=e.context.element,s=e.context.tool.undo,a=e.context.tool.redo,0===c?(s&&s.setAttribute("disabled",!0),a&&c===d.length-1&&a.setAttribute("disabled",!0),e._variable.isChanged=!1,e.context.tool.save&&e.context.tool.save.setAttribute("disabled",!0)):c===d.length-1&&a&&a.setAttribute("disabled",!0)},_destroy:function(){r&&n.clearTimeout(r),d=null}}}(this,this._onChange_historyStack.bind(this)),this.addModule([z]),l.iframe&&(this._wd=e.element.wysiwygFrame.contentDocument,e.element.wysiwyg=this._wd.body,l._editorStyles.editor&&(e.element.wysiwyg.style.cssText=l._editorStyles.editor),"auto"===l.height&&(this._iframeAuto=this._wd.body)),this._initWysiwygArea(i,o)},_cachingButtons:function(){this.codeViewDisabledButtons=e.element._buttonTray.querySelectorAll('.se-menu-list button[data-display]:not([class~="se-code-view-enabled"]):not([data-display="MORE"])'),this.resizingDisabledButtons=e.element._buttonTray.querySelectorAll('.se-menu-list button[data-display]:not([class~="se-resizing-enabled"]):not([data-display="MORE"])');const t=e.tool,n=this.commandMap;n.INDENT=t.indent,n.OUTDENT=t.outdent,n[l.textTags.bold.toUpperCase()]=t.bold,n[l.textTags.underline.toUpperCase()]=t.underline,n[l.textTags.italic.toUpperCase()]=t.italic,n[l.textTags.strike.toUpperCase()]=t.strike,n[l.textTags.sub.toUpperCase()]=t.subscript,n[l.textTags.sup.toUpperCase()]=t.superscript,this._styleCommandMap={fullScreen:t.fullScreen,showBlocks:t.showBlocks,codeView:t.codeView},this._saveButtonStates()},_initWysiwygArea:function(t,n){e.element.wysiwyg.innerHTML=t?n:this.convertContentsForEditor(("string"==typeof n?n:/^TEXTAREA$/i.test(e.element.originElement.nodeName)?e.element.originElement.value:e.element.originElement.innerHTML)||"")},_resourcesStateChange:function(){this._iframeAutoHeight(),this._checkPlaceholder()},_onChange_historyStack:function(){this.hasFocus&&u._applyTagEffects(),this._variable.isChanged=!0,e.tool.save&&e.tool.save.removeAttribute("disabled"),h.onChange&&h.onChange(this.getContents(!0),this),"block"===e.element.toolbar.style.display&&u._showToolbarBalloon()},_iframeAutoHeight:function(){this._iframeAuto?a.setTimeout((function(){const t=d._iframeAuto.offsetHeight;e.element.wysiwygFrame.style.height=t+"px",r.isResizeObserverSupported||d.__callResizeFunction(t,null)})):r.isResizeObserverSupported||d.__callResizeFunction(e.element.wysiwygFrame.offsetHeight,null)},__callResizeFunction:function(e,t){e=-1===e?t.borderBoxSize&&t.borderBoxSize[0]?t.borderBoxSize[0].blockSize:t.contentRect.height+this._editorHeightPadding:e,this._editorHeight!==e&&("function"==typeof h.onResizeEditor&&h.onResizeEditor(e,this._editorHeight,d,t),this._editorHeight=e)},_checkPlaceholder:function(){if(this._placeholder){if(this._variable.isCodeView)return void(this._placeholder.style.display="none");const t=e.element.wysiwyg;!r.onlyZeroWidthSpace(t.textContent)||t.querySelector(r._allowedEmptyNodeList)||(t.innerText.match(/\n/g)||"").length>1?this._placeholder.style.display="none":this._placeholder.style.display="block"}},_setDefaultFormat:function(e){if(this._fileManager.pluginRegExp.test(this.currentControllerName))return;const t=this.getRange(),n=t.commonAncestorContainer,i=t.startContainer,o=r.getRangeFormatElement(n,null);let s,a,c;const d=r.getParentElement(n,r.isComponent);if(!d||r.isTable(d)){if(1===n.nodeType&&"true"===n.getAttribute("data-se-embed")){let e=n.nextElementSibling;return r.isFormatElement(e)||(e=this.appendFormatTag(n,l.defaultTag)),void this.setRange(e.firstChild,0,e.firstChild,0)}if(!r.isRangeFormatElement(i)&&!r.isWysiwygDiv(i)||!r.isComponent(i.children[t.startOffset])&&!r.isComponent(i.children[t.startOffset-1])){if(r.getParentElement(n,r.isNotCheckingNode))return null;if(o)return c=r.createElement(e||l.defaultTag),c.innerHTML=o.innerHTML,0===c.childNodes.length&&(c.innerHTML=r.zeroWidthSpace),o.innerHTML=c.outerHTML,c=o.firstChild,s=r.getEdgeChildNodes(c,null).sc,s||(s=r.createTextNode(r.zeroWidthSpace),c.insertBefore(s,c.firstChild)),a=s.textContent.length,void this.setRange(s,a,s,a);if(r.isRangeFormatElement(n)&&n.childNodes.length<=1){let e=null;return 1===n.childNodes.length&&r.isBreak(n.firstChild)?e=n.firstChild:(e=r.createTextNode(r.zeroWidthSpace),n.appendChild(e)),void this.setRange(e,1,e,1)}try{if(3===n.nodeType&&(c=r.createElement(e||l.defaultTag),n.parentNode.insertBefore(c,n),c.appendChild(n)),r.isWysiwygDiv(n))return c=r.createElement(e||l.defaultTag),c.innerHTML=n.innerHTML,n.innerHTML="",n.appendChild(c),this.effectNode=null,void this.setRange(c,1,c,1);if(c&&(r.isBreak(c.nextSibling)&&r.removeItem(c.nextSibling),r.isBreak(c.previousSibling)&&r.removeItem(c.previousSibling)),r.isBreak(s)){const e=r.createTextNode(r.zeroWidthSpace);s.parentNode.insertBefore(e,s),s=e}}catch(t){return this.execCommand("formatBlock",!1,e||l.defaultTag),this.removeRange(),this._editorRange(),void(this.effectNode=null)}if(c&&(r.isBreak(c.nextSibling)&&r.removeItem(c.nextSibling),r.isBreak(c.previousSibling)&&r.removeItem(c.previousSibling),r.isBreak(s))){const e=r.createTextNode(r.zeroWidthSpace);s.parentNode.insertBefore(e,s),s=e}this.effectNode=null,i?this.setRange(i,1,i,1):this.nativeFocus()}}},_setOptionsInit:function(t,n){this.context=e=A(t.originElement,this._getConstructed(t),l),this._componentsInfoReset=!0,this._editorInit(!0,n)},_editorInit:function(t,n){this._init(t,n),u._addEvent(),this._setCharCount(),u._offStickyToolbar(),u.onResize_window(),e.element.toolbar.style.visibility="";const i=l.frameAttrbutes;for(let t in i)e.element.wysiwyg.setAttribute(t,i[t]);this._checkComponents(),this._componentsInfoInit=!1,this._componentsInfoReset=!1,this.history.reset(!0),a.setTimeout((function(){"function"==typeof d._resourcesStateChange&&(u._resizeObserver&&u._resizeObserver.observe(e.element.wysiwygFrame),u._toolbarObserver&&u._toolbarObserver.observe(e.element._toolbarShadow),d._resourcesStateChange(),"function"==typeof h.onload&&h.onload(d,t))}))},_getConstructed:function(e){return{_top:e.topArea,_relative:e.relative,_toolBar:e.toolbar,_toolbarShadow:e._toolbarShadow,_menuTray:e._menuTray,_editorArea:e.editorArea,_wysiwygArea:e.wysiwygFrame,_codeArea:e.code,_placeholder:e.placeholder,_resizingBar:e.resizingBar,_navigation:e.navigation,_charCounter:e.charCounter,_charWrapper:e.charWrapper,_loading:e.loading,_lineBreaker:e.lineBreaker,_lineBreaker_t:e.lineBreaker_t,_lineBreaker_b:e.lineBreaker_b,_resizeBack:e.resizeBackground,_stickyDummy:e._stickyDummy,_arrow:e._arrow}}},u={_IEisComposing:!1,_lineBreakerBind:null,_responsiveCurrentSize:"default",_responsiveButtonSize:null,_responsiveButtons:null,_deleteKeyCode:new a.RegExp("^(8|46)$"),_cursorMoveKeyCode:new a.RegExp("^(8|3[2-9]|40|46)$"),_directionKeyCode:new a.RegExp("^(8|13|3[2-9]|40|46)$"),_nonTextKeyCode:new a.RegExp("^(8|13|1[6-9]|20|27|3[3-9]|40|45|46|11[2-9]|12[0-3]|144|145)$"),_historyIgnoreKeyCode:new a.RegExp("^(1[6-9]|20|27|3[3-9]|40|45|11[2-9]|12[0-3]|144|145)$"),_onButtonsCheck:new a.RegExp("^("+a.Object.keys(l._textTagsMap).join("|")+")$","i"),_frontZeroWidthReg:new a.RegExp(r.zeroWidthSpace+"+",""),_keyCodeShortcut:{65:"A",66:"B",83:"S",85:"U",73:"I",89:"Y",90:"Z",219:"[",221:"]"},_shortcutCommand:function(e,t){let n=null;const i=u._keyCodeShortcut[e];switch(i){case"A":n="selectAll";break;case"B":-1===l.shortcutsDisable.indexOf("bold")&&(n="bold");break;case"S":t&&-1===l.shortcutsDisable.indexOf("strike")?n="strike":t||-1!==l.shortcutsDisable.indexOf("save")||(n="save");break;case"U":-1===l.shortcutsDisable.indexOf("underline")&&(n="underline");break;case"I":-1===l.shortcutsDisable.indexOf("italic")&&(n="italic");break;case"Z":-1===l.shortcutsDisable.indexOf("undo")&&(n=t?"redo":"undo");break;case"Y":-1===l.shortcutsDisable.indexOf("undo")&&(n="redo");break;case"[":-1===l.shortcutsDisable.indexOf("indent")&&(n=l.rtl?"indent":"outdent");break;case"]":-1===l.shortcutsDisable.indexOf("indent")&&(n=l.rtl?"outdent":"indent")}return n?(d.commandHandler(d.commandMap[n],n),!0):!!i},_applyTagEffects:function(){if(r.hasClass(e.element.wysiwyg,"se-read-only"))return!1;let t=d.getSelectionNode();if(t===d.effectNode)return;d.effectNode=t;const i=l.rtl?"marginRight":"marginLeft",o=d.commandMap,s=u._onButtonsCheck,a=[],c=[],h=d.activePlugins,g=h.length;let p="";for(;t.firstChild;)t=t.firstChild;for(let e=t;!r.isWysiwygDiv(e)&&e;e=e.parentNode)if(1===e.nodeType&&!r.isBreak(e)){if(p=e.nodeName.toUpperCase(),c.push(p),!d.isReadOnly)for(let t,i=0;i<g;i++)t=h[i],-1===a.indexOf(t)&&n[t].active.call(d,e)&&a.push(t);r.isFormatElement(e)?(-1===a.indexOf("OUTDENT")&&o.OUTDENT&&!r.isImportantDisabled(o.OUTDENT)&&(r.isListCell(e)||e.style[i]&&r.getNumber(e.style[i],0)>0)&&(a.push("OUTDENT"),o.OUTDENT.removeAttribute("disabled")),-1===a.indexOf("INDENT")&&o.INDENT&&!r.isImportantDisabled(o.INDENT)&&(a.push("INDENT"),r.isListCell(e)&&!e.previousElementSibling?o.INDENT.setAttribute("disabled",!0):o.INDENT.removeAttribute("disabled"))):s&&s.test(p)&&(a.push(p),r.addClass(o[p],"active"))}d._setKeyEffect(a),d._variable.currentNodes=c.reverse(),d._variable.currentNodesMap=a,l.showPathLabel&&(e.element.navigation.textContent=d._variable.currentNodes.join(" > "))},_buttonsEventHandler:function(e){let t=e.target;if(d._bindControllersOff&&e.stopPropagation(),/^(input|textarea|select|option)$/i.test(t.nodeName)?d._antiBlur=!1:e.preventDefault(),r.getParentElement(t,".se-submenu"))e.stopPropagation(),d._notHideToolbar=!0;else{let n=t.getAttribute("data-command"),i=t.className;for(;!n&&!/se-menu-list/.test(i)&&!/sun-editor-common/.test(i);)t=t.parentNode,n=t.getAttribute("data-command"),i=t.className;n!==d._submenuName&&n!==d._containerName||e.stopPropagation()}},addGlobalEvent:function(e,t,n){return l.iframe&&d._ww.addEventListener(e,t,n),d._w.addEventListener(e,t,n),{type:e,listener:t,useCapture:n}},removeGlobalEvent:function(e,t,n){e&&("object"==typeof e&&(t=e.listener,n=e.useCapture,e=e.type),l.iframe&&d._ww.removeEventListener(e,t,n),d._w.removeEventListener(e,t,n))},onClick_toolbar:function(e){let t=e.target,n=t.getAttribute("data-display"),i=t.getAttribute("data-command"),l=t.className;for(d.controllersOff();t.parentNode&&!i&&!/se-menu-list/.test(l)&&!/se-toolbar/.test(l);)t=t.parentNode,i=t.getAttribute("data-command"),n=t.getAttribute("data-display"),l=t.className;(i||n)&&(t.disabled||d.actionCall(i,n,t))},__selectionSyncEvent:null,onMouseDown_wysiwyg:function(t){if(d.isReadOnly||r.isNonEditable(e.element.wysiwyg))return;if(r._isExcludeSelectionElement(t.target))return void t.preventDefault();if(u.removeGlobalEvent(u.__selectionSyncEvent),u.__selectionSyncEvent=u.addGlobalEvent("mouseup",(function(){d&&d._editorRange(),u.removeGlobalEvent(u.__selectionSyncEvent)})),"function"==typeof h.onMouseDown&&!1===h.onMouseDown(t,d))return;const n=r.getParentElement(t.target,r.isCell);if(n){const e=d.plugins.table;e&&n!==e._fixedCell&&!e._shift&&d.callPlugin("table",(function(){e.onTableCellMultiSelect.call(d,n,!1)}),null)}d._isBalloon&&u._hideToolbar()},onClick_wysiwyg:function(t){const n=t.target;if(d.isReadOnly)return t.preventDefault(),r.isAnchor(n)&&a.open(n.href,n.target),!1;if(r.isNonEditable(e.element.wysiwyg))return;if("function"==typeof h.onClick&&!1===h.onClick(t,d))return;const i=d.getFileComponent(n);if(i)return t.preventDefault(),void d.selectComponent(i.target,i.pluginName);const o=r.getParentElement(n,"FIGCAPTION");if(o&&r.isNonEditable(o)&&(t.preventDefault(),o.focus(),d._isInline&&!d._inlineToolbarAttr.isShow)){u._showToolbarInline();const e=function(){u._hideToolbar(),o.removeEventListener("blur",e)};o.addEventListener("blur",e)}if(d._editorRange(),3===t.detail){let e=d.getRange();r.isFormatElement(e.endContainer)&&0===e.endOffset&&(e=d.setRange(e.startContainer,e.startOffset,e.startContainer,e.startContainer.length),d._rangeInfo(e,d.getSelection()))}const s=d.getSelectionNode(),c=r.getFormatElement(s,null),g=r.getRangeFormatElement(s,null);let p=s;for(;p&&p.firstChild;)p=p.firstChild;const m=d.getFileComponent(p);if(m){const e=d.getRange();g||e.startContainer!==e.endContainer||d.selectComponent(m.target,m.pluginName)}else d.currentFileComponentInfo&&d.controllersOff();if(c||r.isNonEditable(n)||r.isList(g))u._applyTagEffects();else{const e=d.getRange();if(r.getFormatElement(e.startContainer)===r.getFormatElement(e.endContainer))if(r.isList(g)){t.preventDefault();const e=r.createElement("LI"),n=s.nextElementSibling;e.appendChild(s),g.insertBefore(e,n),d.focus()}else r.isWysiwygDiv(s)||r.isComponent(s)||r.isTable(s)&&!r.isCell(s)||null===d._setDefaultFormat(r.isRangeFormatElement(g)?"DIV":l.defaultTag)?u._applyTagEffects():(t.preventDefault(),d.focus())}d._isBalloon&&a.setTimeout(u._toggleToolbarBalloon)},_balloonDelay:null,_showToolbarBalloonDelay:function(){u._balloonDelay&&a.clearTimeout(u._balloonDelay),u._balloonDelay=a.setTimeout(function(){a.clearTimeout(this._balloonDelay),this._balloonDelay=null,this._showToolbarBalloon()}.bind(u),350)},_toggleToolbarBalloon:function(){if(d){d._editorRange();const e=d.getRange();d._bindControllersOff||!d._isBalloonAlways&&e.collapsed?u._hideToolbar():u._showToolbarBalloon(e)}},_showToolbarBalloon:function(t){if(!d._isBalloon)return;const n=t||d.getRange(),i=e.element.toolbar,o=e.element.topArea,s=d.getSelection();let c;if(d._isBalloonAlways&&n.collapsed)c=!0;else if(s.focusNode===s.anchorNode)c=s.focusOffset<s.anchorOffset;else{const e=r.getListChildNodes(n.commonAncestorContainer,null);c=r.getArrayIndex(e,s.focusNode)<r.getArrayIndex(e,s.anchorNode)}let h=n.getClientRects();h=h[c?0:h.length-1];const g=d.getGlobalScrollOffset();let p=g.left,m=g.top;const f=o.offsetWidth,_=u._getEditorOffsets(null),b=_.top,v=_.left;if(i.style.top="-10000px",i.style.visibility="hidden",i.style.display="block",!h){const t=d.getSelectionNode();if(r.isFormatElement(t)){const e=r.createTextNode(r.zeroWidthSpace);d.insertNode(e,null,!1),d.setRange(e,1,e,1),d._editorRange(),h=d.getRange().getClientRects(),h=h[c?0:h.length-1]}if(!h){const n=r.getOffset(t,e.element.wysiwygFrame);h={left:n.left,top:n.top,right:n.left,bottom:n.top+t.offsetHeight,noText:!0},p=0,m=0}c=!0}const y=a.Math.round(e.element._arrow.offsetWidth/2),C=i.offsetWidth,w=i.offsetHeight,x=/iframe/i.test(e.element.wysiwygFrame.nodeName)?e.element.wysiwygFrame.getClientRects()[0]:null;if(x&&(h={left:h.left+x.left,top:h.top+x.top,right:h.right+x.right-x.width,bottom:h.bottom+x.bottom-x.height}),u._setToolbarOffset(c,h,i,v,f,p,m,b,y),C===i.offsetWidth&&w===i.offsetHeight||u._setToolbarOffset(c,h,i,v,f,p,m,b,y),l.toolbarContainer){const e=o.parentElement;let t=l.toolbarContainer,n=t.offsetLeft,s=t.offsetTop;for(;!t.parentElement.contains(e)||!/^(BODY|HTML)$/i.test(t.parentElement.nodeName);)t=t.offsetParent,n+=t.offsetLeft,s+=t.offsetTop;i.style.left=i.offsetLeft-n+o.offsetLeft+"px",i.style.top=i.offsetTop-s+o.offsetTop+"px"}i.style.visibility=""},_setToolbarOffset:function(t,n,i,l,o,c,d,h,g){const p=i.offsetWidth,m=n.noText&&!t?0:i.offsetHeight,f=(t?n.left:n.right)-l-p/2+c,_=f+p-o;let b=(t?n.top-m-g:n.bottom+g)-(n.noText?0:h)+d,v=f<0?1:_<0?f:f-_-1-1,y=!1;const C=b+(t?u._getEditorOffsets(null).top:i.offsetHeight-e.element.wysiwyg.offsetHeight);!t&&C>0&&u._getPageBottomSpace()<C?(t=!0,y=!0):t&&s.documentElement.offsetTop>C&&(t=!1,y=!0),y&&(b=(t?n.top-m-g:n.bottom+g)-(n.noText?0:h)+d),i.style.left=a.Math.floor(v)+"px",i.style.top=a.Math.floor(b)+"px",t?(r.removeClass(e.element._arrow,"se-arrow-up"),r.addClass(e.element._arrow,"se-arrow-down"),e.element._arrow.style.top=m+"px"):(r.removeClass(e.element._arrow,"se-arrow-down"),r.addClass(e.element._arrow,"se-arrow-up"),e.element._arrow.style.top=-g+"px");const w=a.Math.floor(p/2+(f-v));e.element._arrow.style.left=(w+g>i.offsetWidth?i.offsetWidth-g:w<g?g:w)+"px"},_showToolbarInline:function(){if(!d._isInline)return;const t=e.element.toolbar;l.toolbarContainer?t.style.position="relative":t.style.position="absolute",t.style.visibility="hidden",t.style.display="block",d._inlineToolbarAttr.width=t.style.width=l.toolbarWidth,d._inlineToolbarAttr.top=t.style.top=(l.toolbarContainer?0:-1-t.offsetHeight)+"px","function"==typeof h.showInline&&h.showInline(t,e,d),u.onScroll_window(),d._inlineToolbarAttr.isShow=!0,t.style.visibility=""},_hideToolbar:function(){d._notHideToolbar||d._variable.isFullScreen||(e.element.toolbar.style.display="none",d._inlineToolbarAttr.isShow=!1)},onInput_wysiwyg:function(e){if(/AUDIO/.test(e.target.nodeName))return!1;if(d.isReadOnly||d.isDisabled)return e.preventDefault(),e.stopPropagation(),d.history.go(d.history.getCurrentIndex()),!1;const t=d.getRange(),n=d.getSelectionNode(),i=r.getFormatElement(n,null);if(!i&&t.collapsed&&!r.isComponent(n)&&!r.isList(n)){const e=r.getRangeFormatElement(i,null);d._setDefaultFormat(r.isRangeFormatElement(e)?"DIV":l.defaultTag)}d._editorRange();const o=(null===e.data?"":void 0===e.data?" ":e.data)||"";if(!d._charCount(o))return e.preventDefault(),e.stopPropagation(),!1;"function"==typeof h.onInput&&!1===h.onInput(e,d)||d.history.push(!0)},_isUneditableNode:function(e,t){const n=t?e.startContainer:e.endContainer,i=t?e.startOffset:e.endOffset,l=t?"previousSibling":"nextSibling";let o;return 1===n.nodeType?(o=u._isUneditableNode_getSibling(n.childNodes[i],l,n),o&&1===o.nodeType&&"false"===o.getAttribute("contenteditable")):(o=u._isUneditableNode_getSibling(n,l,n),d.isEdgePoint(n,i,t?"start":"end")&&o&&1===o.nodeType&&"false"===o.getAttribute("contenteditable"))},_isUneditableNode_getSibling:function(e,t,n){if(!e)return null;let i=e[t];if(!i){if(i=r.getFormatElement(n),i=i?i[t]:null,!i||r.isComponent(i))return null;i="previousSibling"===t?i.firstChild:i.lastChild}return i},_onShortcutKey:!1,onKeyDown_wysiwyg:function(t){let n=d.getSelectionNode();if(r.isInputElement(n))return;const i=t.keyCode,o=t.shiftKey,s=t.ctrlKey||t.metaKey||91===i||92===i||224===i,c=t.altKey;if(u._IEisComposing=229===i,!s&&d.isReadOnly&&!u._cursorMoveKeyCode.test(i))return t.preventDefault(),!1;if(d.submenuOff(),d._isBalloon&&u._hideToolbar(),"function"==typeof h.onKeyDown&&!1===h.onKeyDown(t,d))return;if(s&&u._shortcutCommand(i,o))return u._onShortcutKey=!0,t.preventDefault(),t.stopPropagation(),!1;u._onShortcutKey&&(u._onShortcutKey=!1),13===i&&r.isFormatElement(d.getRange().startContainer)&&(d._resetRangeToTextNode(),n=d.getSelectionNode());const g=d.getRange(),p=!g.collapsed||g.startContainer!==g.endContainer,m=d._fileManager.pluginRegExp.test(d.currentControllerName)?d.currentControllerName:"";let f=r.getFormatElement(n,null)||n,_=r.getRangeFormatElement(f,null);if(!/37|38|39|40/.test(t.keyCode)||!1!==u._onKeyDown_wysiwyg_arrowKey(t)){switch(i){case 8:if(!p&&m){t.preventDefault(),t.stopPropagation(),d.plugins[m].destroy.call(d);break}if(p&&u._hardDelete()){t.preventDefault(),t.stopPropagation();break}if(!r.isFormatElement(f)&&!e.element.wysiwyg.firstElementChild&&!r.isComponent(n)&&null!==d._setDefaultFormat(l.defaultTag))return t.preventDefault(),t.stopPropagation(),!1;if(!p&&!f.previousElementSibling&&0===g.startOffset&&!n.previousSibling&&!r.isListCell(f)&&r.isFormatElement(f)&&(!r.isFreeFormatElement(f)||r.isClosureFreeFormatElement(f))){if(r.isClosureRangeFormatElement(f.parentNode))return t.preventDefault(),t.stopPropagation(),!1;if(r.isWysiwygDiv(f.parentNode)&&f.childNodes.length<=1&&(!f.firstChild||r.onlyZeroWidthSpace(f.textContent))){if(t.preventDefault(),t.stopPropagation(),f.nodeName.toUpperCase()===l.defaultTag.toUpperCase()){f.innerHTML="<br>";const e=f.attributes;for(;e[0];)f.removeAttribute(e[0].name)}else{const e=r.createElement(l.defaultTag);e.innerHTML="<br>",f.parentElement.replaceChild(e,f)}return d.nativeFocus(),!1}}const i=g.startContainer;if(f&&!f.previousElementSibling&&0===g.startOffset&&3===i.nodeType&&!r.isFormatElement(i.parentNode)){let e=i.parentNode.previousSibling;const t=i.parentNode.nextSibling;e||(t?e=t:(e=r.createElement("BR"),f.appendChild(e)));let n=i;for(;f.contains(n)&&!n.previousSibling;)n=n.parentNode;if(!f.contains(n)){i.textContent="",r.removeItemAllParents(i,null,f);break}}if(u._isUneditableNode(g,!0)){t.preventDefault(),t.stopPropagation();break}!p&&d._isEdgeFormat(g.startContainer,g.startOffset,"start")&&r.isFormatElement(f.previousElementSibling)&&(d._formatAttrsTemp=f.previousElementSibling.attributes);const b=g.commonAncestorContainer;if(f=r.getFormatElement(g.startContainer,null),_=r.getRangeFormatElement(f,null),_&&f&&!r.isCell(_)&&!/^FIGCAPTION$/i.test(_.nodeName)){if(r.isListCell(f)&&r.isList(_)&&(r.isListCell(_.parentNode)||f.previousElementSibling)&&(n===f||3===n.nodeType&&(!n.previousSibling||r.isList(n.previousSibling)))&&(r.getFormatElement(g.startContainer,null)!==r.getFormatElement(g.endContainer,null)?_.contains(g.startContainer):0===g.startOffset&&g.collapsed)){if(g.startContainer!==g.endContainer)t.preventDefault(),d.removeNode(),3===g.startContainer.nodeType&&d.setRange(g.startContainer,g.startContainer.textContent.length,g.startContainer,g.startContainer.textContent.length),d.history.push(!0);else{let e=f.previousElementSibling||_.parentNode;if(r.isListCell(e)){t.preventDefault();let n=e;if(!e.contains(f)&&r.isListCell(n)&&r.isList(n.lastElementChild)){for(n=n.lastElementChild.lastElementChild;r.isListCell(n)&&r.isList(n.lastElementChild);)n=n.lastElementChild&&n.lastElementChild.lastElementChild;e=n}let i=e===_.parentNode?_.previousSibling:e.lastChild;i||(i=r.createTextNode(r.zeroWidthSpace),_.parentNode.insertBefore(i,_.parentNode.firstChild));const l=3===i.nodeType?i.textContent.length:1,o=f.childNodes;let s=i,a=o[0];for(;a=o[0];)e.insertBefore(a,s.nextSibling),s=a;r.removeItem(f),0===_.children.length&&r.removeItem(_),d.setRange(i,l,i,l),d.history.push(!0)}}break}if(!p&&0===g.startOffset){let e=!0,n=b;for(;n&&n!==_&&!r.isWysiwygDiv(n);){if(n.previousSibling&&(1===n.previousSibling.nodeType||!r.onlyZeroWidthSpace(n.previousSibling.textContent.trim()))){e=!1;break}n=n.parentNode}if(e&&_.parentNode){t.preventDefault(),d.detachRangeFormatElement(_,r.isListCell(f)?[f]:null,null,!1,!1),d.history.push(!0);break}}}if(!p&&f&&(0===g.startOffset||n===f&&f.childNodes[g.startOffset])){const e=r.isListCell(f),i=n===f?f.childNodes[g.startOffset]:n,l=e?i.previousSibling:f.previousSibling,o=e||(3===b.nodeType||r.isBreak(b))&&!b.previousSibling&&0===g.startOffset;if(i&&(e||!i.previousSibling)&&(b&&r.isComponent(b.previousSibling)||o&&r.isComponent(l))){const n=d.getFileComponent(l);n?(t.preventDefault(),t.stopPropagation(),e?r.removeItem(i):0===f.textContent.length&&r.removeItem(f),!1===d.selectComponent(n.target,n.pluginName)&&d.blur()):r.isComponent(l)&&(t.preventDefault(),t.stopPropagation(),r.removeItem(l));break}if(i&&r.isNonEditable(i.previousSibling)){t.preventDefault(),t.stopPropagation(),r.removeItem(i.previousSibling);break}}break;case 46:if(m){t.preventDefault(),t.stopPropagation(),d.plugins[m].destroy.call(d);break}if(p&&u._hardDelete()){t.preventDefault(),t.stopPropagation();break}if(!p&&d._isEdgeFormat(g.endContainer,g.endOffset,"end")&&!f.nextSibling)return t.preventDefault(),void t.stopPropagation();if(u._isUneditableNode(g,!1)){t.preventDefault(),t.stopPropagation();break}if((r.isFormatElement(n)||null===n.nextSibling||r.onlyZeroWidthSpace(n.nextSibling)&&null===n.nextSibling.nextSibling)&&g.startOffset===n.textContent.length){const e=f.nextElementSibling;if(!e)break;if(r.isComponent(e)){if(t.preventDefault(),r.onlyZeroWidthSpace(f)&&(r.removeItem(f),r.isTable(e))){let t=r.getChildElement(e,r.isCell,!1);t=t.firstElementChild||t,d.setRange(t,0,t,0);break}const n=d.getFileComponent(e);n?(t.stopPropagation(),!1===d.selectComponent(n.target,n.pluginName)&&d.blur()):r.isComponent(e)&&(t.stopPropagation(),r.removeItem(e));break}}if(!p&&(d.isEdgePoint(g.endContainer,g.endOffset)||n===f&&f.childNodes[g.startOffset])){const e=n===f&&f.childNodes[g.startOffset]||n;if(e&&r.isNonEditable(e.nextSibling)){t.preventDefault(),t.stopPropagation(),r.removeItem(e.nextSibling);break}if(r.isComponent(e)){t.preventDefault(),t.stopPropagation(),r.removeItem(e);break}}if(!p&&d._isEdgeFormat(g.endContainer,g.endOffset,"end")&&r.isFormatElement(f.nextElementSibling)&&(d._formatAttrsTemp=f.attributes),f=r.getFormatElement(g.startContainer,null),_=r.getRangeFormatElement(f,null),r.isListCell(f)&&r.isList(_)&&(n===f||3===n.nodeType&&(!n.nextSibling||r.isList(n.nextSibling))&&(r.getFormatElement(g.startContainer,null)!==r.getFormatElement(g.endContainer,null)?_.contains(g.endContainer):g.endOffset===n.textContent.length&&g.collapsed))){g.startContainer!==g.endContainer&&d.removeNode();let e=r.getArrayItem(f.children,r.isList,!1);if(e=e||f.nextElementSibling||(_.parentNode?_.parentNode.nextElementSibling:null),e&&(r.isList(e)||r.getArrayItem(e.children,r.isList,!1))){let n,i;if(t.preventDefault(),r.isList(e)){const t=e.firstElementChild;for(i=t.childNodes,n=i[0];i[0];)f.insertBefore(i[0],e);r.removeItem(t)}else{for(n=e.firstChild,i=e.childNodes;i[0];)f.appendChild(i[0]);r.removeItem(e)}d.setRange(n,0,n,0),d.history.push(!0)}break}break;case 9:if(m||l.tabDisable)break;if(t.preventDefault(),s||c||r.isWysiwygDiv(n))break;const v=!g.collapsed||d.isEdgePoint(g.startContainer,g.startOffset),y=d.getSelectedElements(null);n=d.getSelectionNode();const C=[];let w=[],x=r.isListCell(y[0]),E=r.isListCell(y[y.length-1]),S={sc:g.startContainer,so:g.startOffset,ec:g.endContainer,eo:g.endOffset};for(let e,t=0,n=y.length;t<n;t++)if(e=y[t],r.isListCell(e)){if(!e.previousElementSibling&&!o)continue;C.push(e)}else w.push(e);if(C.length>0&&v&&d.plugins.list)S=d.plugins.list.editInsideList.call(d,o,C);else{const e=r.getParentElement(n,r.isCell);if(e&&v){const t=r.getParentElement(e,"table"),n=r.getListChildren(t,r.isCell);let i=o?r.prevIdx(n,e):r.nextIdx(n,e);i!==n.length||o||(i=0),-1===i&&o&&(i=n.length-1);let l=n[i];if(!l)break;l=l.firstElementChild||l,d.setRange(l,0,l,0);break}w=w.concat(C),x=E=null}if(w.length>0)if(o){const e=w.length-1;for(let t,n=0;n<=e;n++){t=w[n].childNodes;for(let e,n=0,i=t.length;n<i&&(e=t[n],e);n++)if(!r.onlyZeroWidthSpace(e)){/^\s{1,4}$/.test(e.textContent)?r.removeItem(e):/^\s{1,4}/.test(e.textContent)&&(e.textContent=e.textContent.replace(/^\s{1,4}/,""));break}}const t=r.getChildElement(w[0],"text",!1),n=r.getChildElement(w[e],"text",!0);!x&&t&&(S.sc=t,S.so=0),!E&&n&&(S.ec=n,S.eo=n.textContent.length)}else{const e=r.createTextNode(new a.Array(d._variable.tabSize+1).join(" "));if(1===w.length){if(!d.insertNode(e,null,!0))return!1;x||(S.sc=e,S.so=e.length),E||(S.ec=e,S.eo=e.length)}else{const t=w.length-1;for(let n,i=0;i<=t;i++)n=w[i].firstChild,n&&(r.isBreak(n)?w[i].insertBefore(e.cloneNode(!1),n):n.textContent=e.textContent+n.textContent);const n=r.getChildElement(w[0],"text",!1),i=r.getChildElement(w[t],"text",!0);!x&&n&&(S.sc=n,S.so=0),!E&&i&&(S.ec=i,S.eo=i.textContent.length)}}d.setRange(S.sc,S.so,S.ec,S.eo),d.history.push(!1);break;case 13:const N=r.getFreeFormatElement(n,null);if(d._charTypeHTML){let e="";if(e=!o&&N||o?"<br>":"<"+f.nodeName+"><br></"+f.nodeName+">",!d.checkCharCount(e,"byte-html"))return t.preventDefault(),!1}if(!o&&!m){const i=d._isEdgeFormat(g.endContainer,g.endOffset,"end"),o=d._isEdgeFormat(g.startContainer,g.startOffset,"start");if(i&&(/^H[1-6]$/i.test(f.nodeName)||/^HR$/i.test(f.nodeName))){u._enterPrevent(t);let e=null;const n=d.appendFormatTag(f,l.defaultTag);if(i&&i.length>0){e=i.pop();const t=e;for(;i.length>0;)e=e.appendChild(i.pop());n.appendChild(t)}if(e=e?e.appendChild(n.firstChild):n.firstChild,r.isBreak(e)){const t=r.createTextNode(r.zeroWidthSpace);e.parentNode.insertBefore(t,e),d.setRange(t,1,t,1)}else d.setRange(e,0,e,0);break}if(_&&f&&!r.isCell(_)&&!/^FIGCAPTION$/i.test(_.nodeName)){const e=d.getRange();if(d.isEdgePoint(e.endContainer,e.endOffset)&&r.isList(n.nextSibling)){u._enterPrevent(t);const e=r.createElement("LI"),i=r.createElement("BR");e.appendChild(i),f.parentNode.insertBefore(e,f.nextElementSibling),e.appendChild(n.nextSibling),d.setRange(i,1,i,1);break}if((3!==e.commonAncestorContainer.nodeType||!e.commonAncestorContainer.nextElementSibling)&&r.onlyZeroWidthSpace(f.innerText.trim())&&!r.isListCell(f.nextElementSibling)){u._enterPrevent(t);let e=null;if(r.isListCell(_.parentNode)){const t=f.parentNode.parentNode;_=t.parentNode;const n=r.createElement("LI");n.innerHTML="<br>",r.copyTagAttributes(n,f,l.lineAttrReset),e=n,_.insertBefore(e,t.nextElementSibling)}else{const t=r.isCell(_.parentNode)?"DIV":r.isList(_.parentNode)?"LI":r.isFormatElement(_.nextElementSibling)&&!r.isRangeFormatElement(_.nextElementSibling)?_.nextElementSibling.nodeName:r.isFormatElement(_.previousElementSibling)&&!r.isRangeFormatElement(_.previousElementSibling)?_.previousElementSibling.nodeName:l.defaultTag;e=r.createElement(t),r.copyTagAttributes(e,f,l.lineAttrReset);const n=d.detachRangeFormatElement(_,[f],null,!0,!0);n.cc.insertBefore(e,n.ec)}e.innerHTML="<br>",r.removeItemAllParents(f,null,null),d.setRange(e,1,e,1);break}}if(N){u._enterPrevent(t);const e=n===N,i=d.getSelection(),l=n.childNodes,o=i.focusOffset,s=n.previousElementSibling,a=n.nextSibling;if(!r.isClosureFreeFormatElement(N)&&l&&(e&&g.collapsed&&l.length-1<=o+1&&r.isBreak(l[o])&&(!l[o+1]||(!l[o+2]||r.onlyZeroWidthSpace(l[o+2].textContent))&&3===l[o+1].nodeType&&r.onlyZeroWidthSpace(l[o+1].textContent))&&o>0&&r.isBreak(l[o-1])||!e&&r.onlyZeroWidthSpace(n.textContent)&&r.isBreak(s)&&(r.isBreak(s.previousSibling)||!r.onlyZeroWidthSpace(s.previousSibling.textContent))&&(!a||!r.isBreak(a)&&r.onlyZeroWidthSpace(a.textContent)))){e?r.removeItem(l[o-1]):r.removeItem(n);const t=d.appendFormatTag(N,r.isFormatElement(N.nextElementSibling)&&!r.isRangeFormatElement(N.nextElementSibling)?N.nextElementSibling:null);r.copyFormatAttributes(t,N),d.setRange(t,1,t,1);break}if(e){h.insertHTML(g.collapsed&&r.isBreak(g.startContainer.childNodes[g.startOffset-1])?"<br>":"<br><br>",!0,!1);let e=i.focusNode;const t=i.focusOffset;N===e&&(e=e.childNodes[t-o>1?t-1:t]),d.setRange(e,1,e,1)}else{const e=i.focusNode.nextSibling,t=r.createElement("BR");d.insertNode(t,null,!1);const n=t.previousSibling,l=t.nextSibling;r.isBreak(e)||r.isBreak(n)||l&&!r.onlyZeroWidthSpace(l)?d.setRange(l,0,l,0):(t.parentNode.insertBefore(t.cloneNode(!1),t),d.setRange(t,1,t,1))}u._onShortcutKey=!0;break}if(g.collapsed&&(o||i)){u._enterPrevent(t);const e=r.createElement("BR"),s=r.createElement(f.nodeName);r.copyTagAttributes(s,f,l.lineAttrReset);let a=e;do{if(!r.isBreak(n)&&1===n.nodeType){const e=n.cloneNode(!1);e.appendChild(a),a=e}n=n.parentNode}while(f!==n&&f.contains(n));s.appendChild(a),f.parentNode.insertBefore(s,o&&!i?f:f.nextElementSibling),i&&d.setRange(e,1,e,1);break}if(f){let n;t.stopPropagation();let s=0;if(g.collapsed)n=r.onlyZeroWidthSpace(f)?d.appendFormatTag(f,f.cloneNode(!1)):r.splitElement(g.endContainer,g.endOffset,r.getElementDepth(f));else{const a=r.getFormatElement(g.startContainer,null)!==r.getFormatElement(g.endContainer,null),c=f.cloneNode(!1);c.innerHTML="<br>";const h=g.commonAncestorContainer,p=h===g.startContainer&&h===g.endContainer&&r.onlyZeroWidthSpace(h)?g:d.removeNode();if(n=r.getFormatElement(p.container,null),!n){r.isWysiwygDiv(p.container)&&(u._enterPrevent(t),e.element.wysiwyg.appendChild(c),n=c,r.copyTagAttributes(n,f,l.lineAttrReset),d.setRange(n,s,n,s));break}const m=r.getRangeFormatElement(p.container);if(n=n.contains(m)?r.getChildElement(m,r.getFormatElement.bind(r)):n,a){if(i&&!o)n.parentNode.insertBefore(c,p.prevContainer&&p.container!==p.prevContainer?n:n.nextElementSibling),n=c,s=0;else if(s=p.offset,o){const e=n.parentNode.insertBefore(c,n);i&&(n=e,s=0)}}else i&&o?(n.parentNode.insertBefore(c,p.prevContainer&&p.container===p.prevContainer?n.nextElementSibling:n),n=c,s=0):n=r.splitElement(p.container,p.offset,r.getElementDepth(f))}u._enterPrevent(t),r.copyTagAttributes(n,f,l.lineAttrReset),d.setRange(n,s,n,s);break}}if(p)break;if(_&&r.getParentElement(_,"FIGCAPTION")&&r.getParentElement(_,r.isList)&&(u._enterPrevent(t),f=d.appendFormatTag(f,null),d.setRange(f,0,f,0)),m){t.preventDefault(),t.stopPropagation(),d.containerOff(),d.controllersOff();const n=e[m],i=n._container,s=i.previousElementSibling||i.nextElementSibling;let a=null;r.isListCell(i.parentNode)?a=r.createElement("BR"):(a=r.createElement(r.isFormatElement(s)&&!r.isRangeFormatElement(s)?s.nodeName:l.defaultTag),a.innerHTML="<br>"),o?i.parentNode.insertBefore(a,i):i.parentNode.insertBefore(a,i.nextElementSibling),d.callPlugin(m,(function(){!1===d.selectComponent(n._element,m)&&d.blur()}),null)}break;case 27:if(m)return t.preventDefault(),t.stopPropagation(),d.controllersOff(),!1}if(d.currentFileComponentInfo&&d.controllersOff(),o&&16===i){t.preventDefault(),t.stopPropagation();const e=d.plugins.table;if(e&&!e._shift&&!e._ref){const t=r.getParentElement(f,r.isCell);if(t)return void e.onTableCellMultiSelect.call(d,t,!0)}}else if(o&&(r.isOSX_IOS?c:s)&&32===i){t.preventDefault(),t.stopPropagation();const e=d.insertNode(r.createTextNode(" "));if(e)return void d.setRange(e,e.length,e,e.length)}if(r.isIE&&!s&&!c&&!p&&!u._nonTextKeyCode.test(i)&&r.isBreak(g.commonAncestorContainer)){const e=r.createTextNode(r.zeroWidthSpace);d.insertNode(e,null,!1),d.setRange(e,1,e,1)}u._directionKeyCode.test(i)&&(a.setTimeout(d._editorRange.bind(d),0),u._applyTagEffects())}},_onKeyDown_wysiwyg_arrowKey:function(e){if(e.shiftKey)return;let t=d.getSelectionNode();const n=function(t,n){if(n||(n=0),e.preventDefault(),e.stopPropagation(),!t)return;let i=d.getFileComponent(t);i?d.selectComponent(i.target,i.pluginName):(d.setRange(t,n,t,n),d.controllersOff())},i=r.getParentElement(t,"table");if(i){const l=r.getParentElement(t,"tr"),o=r.getParentElement(t,"td");let s=o,a=o;if(o){for(;s&&s.firstChild;)s=s.firstChild;for(;a&&a.lastChild;)a=a.lastChild}let c=t;for(;c&&c.firstChild;)c=c.firstChild;const u=c===s,h=c===a;let g=null,p=0;if(38===e.keyCode&&u){const e=l&&l.previousElementSibling;for(g=e?e.children[o.cellIndex]:r.getPreviousDeepestNode(i,d.context.element.wysiwyg);g&&g.lastChild;)g=g.lastChild;g&&(p=g.textContent.length)}else if(40===e.keyCode&&h){const e=l&&l.nextElementSibling;for(g=e?e.children[o.cellIndex]:r.getNextDeepestNode(i,d.context.element.wysiwyg);g&&g.firstChild;)g=g.firstChild}if(g)return n(g,p),!1}const l=d.getFileComponent(t);if(l){const t=/37|38/.test(e.keyCode),i=/39|40/.test(e.keyCode);if(t){const e=r.getPreviousDeepestNode(l.target,d.context.element.wysiwyg);n(e,e&&e.textContent.length)}else if(i){n(r.getNextDeepestNode(l.target,d.context.element.wysiwyg))}}},onKeyUp_wysiwyg:function(e){if(u._onShortcutKey)return;d._editorRange();const t=e.keyCode,n=e.ctrlKey||e.metaKey||91===t||92===t||224===t,i=e.altKey;if(d.isReadOnly)return void(!n&&u._cursorMoveKeyCode.test(t)&&u._applyTagEffects());const o=d.getRange();let s=d.getSelectionNode();if(d._isBalloon&&(d._isBalloonAlways&&27!==t||!o.collapsed)){if(!d._isBalloonAlways)return void u._showToolbarBalloon();27!==t&&u._showToolbarBalloonDelay()}let a=s;for(;a&&a.firstChild;)a=a.firstChild;const c=d.getFileComponent(a);if(16!==e.keyCode&&!e.shiftKey&&c&&d.selectComponent(c.target,c.pluginName),8===t&&r.isWysiwygDiv(s)&&""===s.textContent&&0===s.children.length){e.preventDefault(),e.stopPropagation(),s.innerHTML="";const t=r.createElement(r.isFormatElement(d._variable.currentNodes[0])?d._variable.currentNodes[0]:l.defaultTag);return t.innerHTML="<br>",s.appendChild(t),d.setRange(t,0,t,0),u._applyTagEffects(),void d.history.push(!1)}const g=r.getFormatElement(s,null),p=r.getRangeFormatElement(s,null),m=d._formatAttrsTemp;if(m){for(let e=0,n=m.length;e<n;e++)13===t&&/^id$/i.test(m[e].name)?g.removeAttribute("id"):g.setAttribute(m[e].name,m[e].value);d._formatAttrsTemp=null}g||!o.collapsed||r.isComponent(s)||r.isList(s)||null===d._setDefaultFormat(r.isRangeFormatElement(p)?"DIV":l.defaultTag)||(s=d.getSelectionNode());if(!n&&!i&&!u._nonTextKeyCode.test(t)&&3===s.nodeType&&r.zeroWidthRegExp.test(s.textContent)&&!(void 0!==e.isComposing?e.isComposing:u._IEisComposing)){let e=o.startOffset,t=o.endOffset;const n=(s.textContent.substring(0,t).match(u._frontZeroWidthReg)||"").length;e=o.startOffset-n,t=o.endOffset-n,s.textContent=s.textContent.replace(r.zeroWidthRegExp,""),d.setRange(s,e<0?0:e,s,t<0?0:t)}u._deleteKeyCode.test(t)&&g&&r.onlyZeroWidthSpace(g.textContent)&&!g.previousElementSibling&&(g.innerHTML="<br>",d.setRange(g,0,g,0)),d._charCount(""),"function"==typeof h.onKeyUp&&!1===h.onKeyUp(e,d)||n||i||u._historyIgnoreKeyCode.test(t)||d.history.push(!0)},onScroll_wysiwyg:function(e){d.controllersOff(),d._isBalloon&&u._hideToolbar(),"function"==typeof h.onScroll&&h.onScroll(e,d)},onFocus_wysiwyg:function(e){d._antiBlur||(d.hasFocus=!0,a.setTimeout(u._applyTagEffects),d._isInline&&u._showToolbarInline(),"function"==typeof h.onFocus&&h.onFocus(e,d))},onBlur_wysiwyg:function(t){d._antiBlur||d._variable.isCodeView||(d.hasFocus=!1,d.effectNode=null,d.controllersOff(),(d._isInline||d._isBalloon)&&u._hideToolbar(),d._setKeyEffect([]),d._variable.currentNodes=[],d._variable.currentNodesMap=[],l.showPathLabel&&(e.element.navigation.textContent=""),"function"==typeof h.onBlur&&h.onBlur(t,d,this))},onMouseDown_resizingBar:function(t){t.stopPropagation(),d.submenuOff(),d.controllersOff(),d._variable.resizeClientY=t.clientY,e.element.resizeBackground.style.display="block",s.addEventListener("mousemove",u._resize_editor),s.addEventListener("mouseup",(function t(){e.element.resizeBackground.style.display="none",s.removeEventListener("mousemove",u._resize_editor),s.removeEventListener("mouseup",t)}))},_resize_editor:function(t){const n=e.element.editorArea.offsetHeight+(t.clientY-d._variable.resizeClientY),i=n<d._variable.minResizingSize?d._variable.minResizingSize:n;e.element.wysiwygFrame.style.height=e.element.code.style.height=i+"px",d._variable.resizeClientY=t.clientY,r.isResizeObserverSupported||d.__callResizeFunction(i,null)},onResize_window:function(){r.isResizeObserverSupported||d.resetResponsiveToolbar();const t=e.element.toolbar,n="none"===t.style.display||d._isInline&&!d._inlineToolbarAttr.isShow;if(0!==t.offsetWidth||n){if(e.fileBrowser&&"block"===e.fileBrowser.area.style.display&&(e.fileBrowser.body.style.maxHeight=a.innerHeight-e.fileBrowser.header.offsetHeight-50+"px"),d.submenuActiveButton&&d.submenu&&d._setMenuPosition(d.submenuActiveButton,d.submenu),d._variable.isFullScreen)return d._variable.innerHeight_fullScreen+=a.innerHeight-t.offsetHeight-d._variable.innerHeight_fullScreen,void(e.element.editorArea.style.height=d._variable.innerHeight_fullScreen+"px");d._variable.isCodeView&&d._isInline?u._showToolbarInline():(d._iframeAutoHeight(),d._sticky&&(t.style.width=e.element.topArea.offsetWidth-2+"px",u.onScroll_window()))}},onScroll_window:function(){if(d._variable.isFullScreen||0===e.element.toolbar.offsetWidth||l.stickyToolbar<0)return;const t=e.element,n=t.editorArea.offsetHeight,i=(this.scrollY||s.documentElement.scrollTop)+l.stickyToolbar,o=u._getEditorOffsets(l.toolbarContainer).top-(d._isInline?t.toolbar.offsetHeight:0),a=d._isInline&&i-o>0?i-o-e.element.toolbar.offsetHeight:0;i<o?u._offStickyToolbar():i+d._variable.minResizingSize>=n+o?(d._sticky||u._onStickyToolbar(a),t.toolbar.style.top=a+n+o+l.stickyToolbar-i-d._variable.minResizingSize+"px"):i>=o&&u._onStickyToolbar(a)},_getEditorOffsets:function(t){let n=t||e.element.topArea,i=0,l=0,o=0;for(;n;)i+=n.offsetTop,l+=n.offsetLeft,o+=n.scrollTop,n=n.offsetParent;return{top:i,left:l,scroll:o}},_getPageBottomSpace:function(){return s.documentElement.scrollHeight-(u._getEditorOffsets(null).top+e.element.topArea.offsetHeight)},_onStickyToolbar:function(t){const n=e.element;d._isInline||l.toolbarContainer||(n._stickyDummy.style.height=n.toolbar.offsetHeight+"px",n._stickyDummy.style.display="block"),n.toolbar.style.top=l.stickyToolbar+t+"px",n.toolbar.style.width=d._isInline?d._inlineToolbarAttr.width:n.toolbar.offsetWidth+"px",r.addClass(n.toolbar,"se-toolbar-sticky"),d._sticky=!0},_offStickyToolbar:function(){const t=e.element;t._stickyDummy.style.display="none",t.toolbar.style.top=d._isInline?d._inlineToolbarAttr.top:"",t.toolbar.style.width=d._isInline?d._inlineToolbarAttr.width:"",t.editorArea.style.marginTop="",r.removeClass(t.toolbar,"se-toolbar-sticky"),d._sticky=!1},_codeViewAutoHeight:function(){d._variable.isFullScreen||(e.element.code.style.height=e.element.code.scrollHeight+"px")},_hardDelete:function(){const e=d.getRange(),t=e.startContainer,n=e.endContainer,i=r.getRangeFormatElement(t),l=r.getRangeFormatElement(n),o=r.isCell(i),s=r.isCell(l),a=e.commonAncestorContainer;if((o&&!i.previousElementSibling&&!i.parentElement.previousElementSibling||s&&!l.nextElementSibling&&!l.parentElement.nextElementSibling)&&i!==l)if(o){if(s)return r.removeItem(r.getParentElement(i,(function(e){return a===e.parentNode}))),d.nativeFocus(),!0;r.removeItem(r.getParentElement(i,(function(e){return a===e.parentNode})))}else r.removeItem(r.getParentElement(l,(function(e){return a===e.parentNode})));const c=1===t.nodeType?r.getParentElement(t,".se-component"):null,u=1===n.nodeType?r.getParentElement(n,".se-component"):null;return c&&r.removeItem(c),u&&r.removeItem(u),!1},onPaste_wysiwyg:function(e){const t=r.isIE?a.clipboardData:e.clipboardData;return!t||u._dataTransferAction("paste",e,t)},_setClipboardComponent:function(e,t,n){e.preventDefault(),e.stopPropagation(),n.setData("text/html",t.component.outerHTML)},onCopy_wysiwyg:function(e){const t=r.isIE?a.clipboardData:e.clipboardData;if("function"==typeof h.onCopy&&!1===h.onCopy(e,t,d))return e.preventDefault(),e.stopPropagation(),!1;const n=d.currentFileComponentInfo;n&&!r.isIE&&(u._setClipboardComponent(e,n,t),r.addClass(n.component,"se-component-copy"),a.setTimeout((function(){r.removeClass(n.component,"se-component-copy")}),150))},onSave_wysiwyg:function(e){"function"!=typeof h.onSave||h.onSave(e,d)},onCut_wysiwyg:function(e){const t=r.isIE?a.clipboardData:e.clipboardData;if("function"==typeof h.onCut&&!1===h.onCut(e,t,d))return e.preventDefault(),e.stopPropagation(),!1;const n=d.currentFileComponentInfo;n&&!r.isIE&&(u._setClipboardComponent(e,n,t),r.removeItem(n.component),d.controllersOff()),a.setTimeout((function(){d.history.push(!1)}))},onDrop_wysiwyg:function(e){if(d.isReadOnly||r.isIE)return e.preventDefault(),e.stopPropagation(),!1;const t=e.dataTransfer;return!t||(u._setDropLocationSelection(e),d.removeNode(),document.body.contains(d.currentControllerTarget)||d.controllersOff(),u._dataTransferAction("drop",e,t))},_setDropLocationSelection:function(e){const t={startContainer:null,startOffset:null,endContainer:null,endOffset:null};let n=null;if(e.rangeParent?(t.startContainer=e.rangeParent,t.startOffset=e.rangeOffset,t.endContainer=e.rangeParent,t.endOffset=e.rangeOffset):n=d._wd.caretRangeFromPoint?d._wd.caretRangeFromPoint(e.clientX,e.clientY):d.getRange(),n&&(t.startContainer=n.startContainer,t.startOffset=n.startOffset,t.endContainer=n.endContainer,t.endOffset=n.endOffset),t.startContainer===t.endContainer){const e=r.getParentElement(t.startContainer,r.isComponent);e&&(t.startContainer=e,t.startOffset=0,t.endContainer=e,t.endOffset=0)}d.setRange(t.startContainer,t.startOffset,t.endContainer,t.endOffset)},_dataTransferAction:function(t,n,i){let l,o;if(r.isIE){l=i.getData("Text");const s=d.getRange(),c=r.createElement("DIV"),h={sc:s.startContainer,so:s.startOffset,ec:s.endContainer,eo:s.endOffset};return c.setAttribute("contenteditable",!0),c.style.cssText="position:absolute; top:0; left:0; width:1px; height:1px; overflow:hidden;",e.element.relative.appendChild(c),c.focus(),a.setTimeout((function(){o=c.innerHTML,r.removeItem(c),d.setRange(h.sc,h.so,h.ec,h.eo),u._setClipboardData(t,n,l,o,i)})),!0}if(l=i.getData("text/plain"),o=i.getData("text/html"),!1===u._setClipboardData(t,n,l,o,i))return n.preventDefault(),n.stopPropagation(),!1},_setClipboardData:function(e,t,n,i,l){const o=/class=["']*Mso(Normal|List)/i.test(i)||/content=["']*Word.Document/i.test(i)||/content=["']*OneNote.File/i.test(i)||/content=["']*Excel.Sheet/i.test(i);!i?i=r._HTMLConvertor(n).replace(/\n/g,"<br>"):(i=i.replace(/^<html>\r?\n?<body>\r?\n?\x3C!--StartFragment--\>|\x3C!--EndFragment-->\r?\n?<\/body\>\r?\n?<\/html>$/g,""),o&&(i=i.replace(/\n/g," "),n=n.replace(/\n/g," ")),i=d.cleanHTML(i,d.pasteTagsWhitelistRegExp,d.pasteTagsBlacklistRegExp));const s=d._charCount(d._charTypeHTML?i:n);if("paste"===e&&"function"==typeof h.onPaste){const e=h.onPaste(t,i,s,d);if(!1===e)return!1;if("string"==typeof e){if(!e)return!1;i=e}}if("drop"===e&&"function"==typeof h.onDrop){const e=h.onDrop(t,i,s,d);if(!1===e)return!1;if("string"==typeof e){if(!e)return!1;i=e}}const a=l.files;return a.length>0&&!o?(/^image/.test(a[0].type)&&d.plugins.image&&h.insertImage(a),!1):!!s&&(i?(h.insertHTML(i,!0,!1),!1):void 0)},onMouseMove_wysiwyg:function(t){if(d.isDisabled||d.isReadOnly)return!1;const n=r.getParentElement(t.target,r.isComponent),i=d._lineBreaker.style;if(n&&!d.currentControllerName){const o=e.element;let s=0,a=o.wysiwyg;do{s+=a.scrollTop,a=a.parentElement}while(a&&!/^(BODY|HTML)$/i.test(a.nodeName));const c=o.wysiwyg.scrollTop,h=u._getEditorOffsets(null),g=r.getOffset(n,o.wysiwygFrame).top+c,p=t.pageY+s+(l.iframe&&!l.toolbarContainer?o.toolbar.offsetHeight:0),m=g+(l.iframe?s:h.top),f=r.isListCell(n.parentNode);let _="",b="";if((f?!n.previousSibling:!r.isFormatElement(n.previousElementSibling))&&p<m+20)b=g,_="t";else{if((f?n.nextSibling:r.isFormatElement(n.nextElementSibling))||!(p>m+n.offsetHeight-20))return void(i.display="none");b=g+n.offsetHeight,_="b"}d._variable._lineBreakComp=n,d._variable._lineBreakDir=_,i.top=b-c+"px",d._lineBreakerButton.style.left=r.getOffset(n).left+n.offsetWidth/2-15+"px",i.display="block"}else"none"!==i.display&&(i.display="none")},_enterPrevent:function(e){e.preventDefault(),r.isMobile&&d.__focusTemp.focus()},_onMouseDown_lineBreak:function(e){e.preventDefault()},_onLineBreak:function(e){e.preventDefault();const t=d._variable._lineBreakComp,n=this?this:d._variable._lineBreakDir,i=r.isListCell(t.parentNode),o=r.createElement(i?"BR":r.isCell(t.parentNode)?"DIV":l.defaultTag);if(i||(o.innerHTML="<br>"),d._charTypeHTML&&!d.checkCharCount(o.outerHTML,"byte-html"))return;t.parentNode.insertBefore(o,"t"===n?t:t.nextSibling),d._lineBreaker.style.display="none",d._variable._lineBreakComp=null;const s=i?o:o.firstChild;d.setRange(s,1,s,1),d.history.push(!1)},_resizeObserver:null,_toolbarObserver:null,_addEvent:function(){const t=l.iframe?d._ww:e.element.wysiwyg;r.isResizeObserverSupported&&(this._resizeObserver=new a.ResizeObserver((function(e){d.__callResizeFunction(-1,e[0])}))),e.element.toolbar.addEventListener("mousedown",u._buttonsEventHandler,!1),e.element._menuTray.addEventListener("mousedown",u._buttonsEventHandler,!1),e.element.toolbar.addEventListener("click",u.onClick_toolbar,!1),t.addEventListener("mousedown",u.onMouseDown_wysiwyg,!1),t.addEventListener("click",u.onClick_wysiwyg,!1),t.addEventListener(r.isIE?"textinput":"input",u.onInput_wysiwyg,!1),t.addEventListener("keydown",u.onKeyDown_wysiwyg,!1),t.addEventListener("keyup",u.onKeyUp_wysiwyg,!1),t.addEventListener("paste",u.onPaste_wysiwyg,!1),t.addEventListener("copy",u.onCopy_wysiwyg,!1),t.addEventListener("cut",u.onCut_wysiwyg,!1),t.addEventListener("drop",u.onDrop_wysiwyg,!1),t.addEventListener("scroll",u.onScroll_wysiwyg,!1),t.addEventListener("focus",u.onFocus_wysiwyg,!1),t.addEventListener("blur",u.onBlur_wysiwyg,!1),u._lineBreakerBind={a:u._onLineBreak.bind(""),t:u._onLineBreak.bind("t"),b:u._onLineBreak.bind("b")},t.addEventListener("mousemove",u.onMouseMove_wysiwyg,!1),d._lineBreakerButton.addEventListener("mousedown",u._onMouseDown_lineBreak,!1),d._lineBreakerButton.addEventListener("click",u._lineBreakerBind.a,!1),e.element.lineBreaker_t.addEventListener("mousedown",u._lineBreakerBind.t,!1),e.element.lineBreaker_b.addEventListener("mousedown",u._lineBreakerBind.b,!1),t.addEventListener("touchstart",u.onMouseDown_wysiwyg,{passive:!0,useCapture:!1}),t.addEventListener("touchend",u.onClick_wysiwyg,{passive:!0,useCapture:!1}),"auto"!==l.height||l.codeMirrorEditor||(e.element.code.addEventListener("keydown",u._codeViewAutoHeight,!1),e.element.code.addEventListener("keyup",u._codeViewAutoHeight,!1),e.element.code.addEventListener("paste",u._codeViewAutoHeight,!1)),e.element.resizingBar&&(/\d+/.test(l.height)&&l.resizeEnable?e.element.resizingBar.addEventListener("mousedown",u.onMouseDown_resizingBar,!1):r.addClass(e.element.resizingBar,"se-resizing-none")),u._setResponsiveToolbar(),r.isResizeObserverSupported&&(this._toolbarObserver=new a.ResizeObserver(d.resetResponsiveToolbar)),a.addEventListener("resize",u.onResize_window,!1),l.stickyToolbar>-1&&a.addEventListener("scroll",u.onScroll_window,!1)},_removeEvent:function(){const t=l.iframe?d._ww:e.element.wysiwyg;e.element.toolbar.removeEventListener("mousedown",u._buttonsEventHandler),e.element._menuTray.removeEventListener("mousedown",u._buttonsEventHandler),e.element.toolbar.removeEventListener("click",u.onClick_toolbar),t.removeEventListener("mousedown",u.onMouseDown_wysiwyg),t.removeEventListener("click",u.onClick_wysiwyg),t.removeEventListener(r.isIE?"textinput":"input",u.onInput_wysiwyg),t.removeEventListener("keydown",u.onKeyDown_wysiwyg),t.removeEventListener("keyup",u.onKeyUp_wysiwyg),t.removeEventListener("paste",u.onPaste_wysiwyg),t.removeEventListener("copy",u.onCopy_wysiwyg),t.removeEventListener("cut",u.onCut_wysiwyg),t.removeEventListener("drop",u.onDrop_wysiwyg),t.removeEventListener("scroll",u.onScroll_wysiwyg),t.removeEventListener("mousemove",u.onMouseMove_wysiwyg),d._lineBreakerButton.removeEventListener("mousedown",u._onMouseDown_lineBreak),d._lineBreakerButton.removeEventListener("click",u._lineBreakerBind.a),e.element.lineBreaker_t.removeEventListener("mousedown",u._lineBreakerBind.t),e.element.lineBreaker_b.removeEventListener("mousedown",u._lineBreakerBind.b),u._lineBreakerBind=null,t.removeEventListener("touchstart",u.onMouseDown_wysiwyg,{passive:!0,useCapture:!1}),t.removeEventListener("touchend",u.onClick_wysiwyg,{passive:!0,useCapture:!1}),t.removeEventListener("focus",u.onFocus_wysiwyg),t.removeEventListener("blur",u.onBlur_wysiwyg),e.element.code.removeEventListener("keydown",u._codeViewAutoHeight),e.element.code.removeEventListener("keyup",u._codeViewAutoHeight),e.element.code.removeEventListener("paste",u._codeViewAutoHeight),e.element.resizingBar&&e.element.resizingBar.removeEventListener("mousedown",u.onMouseDown_resizingBar),u._resizeObserver&&(u._resizeObserver.unobserve(e.element.wysiwygFrame),u._resizeObserver=null),u._toolbarObserver&&(u._toolbarObserver.unobserve(e.element._toolbarShadow),u._toolbarObserver=null),a.removeEventListener("resize",u.onResize_window),a.removeEventListener("scroll",u.onScroll_window)},_setResponsiveToolbar:function(){if(0===o.length)return void(o=null);u._responsiveCurrentSize="default";const e=u._responsiveButtonSize=[],t=u._responsiveButtons={default:o[0]};for(let n,i,l=1,s=o.length;l<s;l++)i=o[l],n=1*i[0],e.push(n),t[n]=i[1];e.sort((function(e,t){return e-t})).unshift("default")}},h={core:d,util:r,onload:null,onScroll:null,onMouseDown:null,onClick:null,onInput:null,onKeyDown:null,onKeyUp:null,onCopy:null,onCut:null,onFocus:null,onBlur:null,onChange:null,onSave:null,onDrop:null,onPaste:null,showInline:null,showController:null,toggleCodeView:null,toggleFullScreen:null,imageUploadHandler:null,videoUploadHandler:null,audioUploadHandler:null,onImageUploadBefore:null,onVideoUploadBefore:null,onAudioUploadBefore:null,onImageUpload:null,onVideoUpload:null,onAudioUpload:null,onImageUploadError:null,onVideoUploadError:null,onAudioUploadError:null,onResizeEditor:null,onSetToolbarButtons:null,setToolbarButtons:function(t){d.submenuOff(),d.containerOff(),d.moreLayerOff();const n=B._createToolBar(s,t,d.plugins,l);o=n.responsiveButtons,u._setResponsiveToolbar(),e.element.toolbar.replaceChild(n._buttonTray,e.element._buttonTray);const i=A(e.element.originElement,d._getConstructed(e.element),l);e.element=i.element,e.tool=i.tool,l.iframe&&(e.element.wysiwyg=d._wd.body),d._recoverButtonStates(),d._cachingButtons(),d.history._resetCachingButton(),d.effectNode=null,d.hasFocus&&u._applyTagEffects(),d.isReadOnly&&r.setDisabledButtons(!0,d.resizingDisabledButtons),"function"==typeof h.onSetToolbarButtons&&h.onSetToolbarButtons(n._buttonTray.querySelectorAll("button"),d)},setOptions:function(s){u._removeEvent(),d._resetComponents(),r.removeClass(d._styleCommandMap.showBlocks,"active"),r.removeClass(d._styleCommandMap.codeView,"active"),d._variable.isCodeView=!1,d._iframeAuto=null,d.plugins=s.plugins||d.plugins;const c=[l,s].reduce((function(e,t){for(let n in t)if(r.hasOwn(t,n))if("plugins"===n&&t[n]&&e[n]){let i=e[n],l=t[n];i=i.length?i:a.Object.keys(i).map((function(e){return i[e]})),l=l.length?l:a.Object.keys(l).map((function(e){return l[e]})),e[n]=l.filter((function(e){return-1===i.indexOf(e)})).concat(i)}else e[n]=t[n];return e}),{}),h=e.element,g=h.wysiwyg.innerHTML,p=B._setOptions(c,e,l);p.callButtons&&(t=p.callButtons,d.initPlugins={}),p.plugins&&(d.plugins=n=p.plugins),0===h._menuTray.children.length&&(this._menuTray={}),o=p.toolbar.responsiveButtons,d.options=l=c,d.lang=i=l.lang,l.iframe&&h.wysiwygFrame.addEventListener("load",(function(){r._setIframeDocument(this,l),d._setOptionsInit(h,g)})),h.editorArea.appendChild(h.wysiwygFrame),l.iframe||d._setOptionsInit(h,g)},setDefaultStyle:function(t){const n=l._editorStyles=r._setDefaultOptionStyle(l,t),i=e.element;i.topArea.style.cssText=n.top,i.code.style.cssText=l._editorStyles.frame,i.code.style.display="none","auto"===l.height?i.code.style.overflow="hidden":i.code.style.overflow="",l.iframe?(i.wysiwygFrame.style.cssText=n.frame,i.wysiwyg.style.cssText=n.editor):i.wysiwygFrame.style.cssText=n.frame+n.editor},noticeOpen:function(e){d.notice.open.call(d,e)},noticeClose:function(){d.notice.close.call(d)},save:function(){const t=d.getContents(!1);e.element.originElement.value=t,u.onSave_wysiwyg(t,d)},getContext:function(){return e},getContents:function(e){return d.getContents(e)},getText:function(){return e.element.wysiwyg.textContent},getCharCount:function(t){return t="string"==typeof t?t:l.charCounterType,d.getCharLength(d._charTypeHTML?e.element.wysiwyg.innerHTML:e.element.wysiwyg.textContent,t)},getImagesInfo:function(){return e.image?e.image._infoList:[]},getFilesInfo:function(t){return e[t]?e[t]._infoList:[]},insertImage:function(e){d.plugins.image&&e&&(d.initPlugins.image?d.plugins.image.submitAction.call(d,e):d.callPlugin("image",d.plugins.image.submitAction.bind(d,e),null),d.focus())},insertHTML:function(t,n,i,l){if(e.element.wysiwygFrame.contains(d.getSelection().focusNode)||d.focus(),"string"==typeof t){n||(t=d.cleanHTML(t,null,null));try{if(r.isListCell(r.getFormatElement(d.getSelectionNode(),null))){const e=s.createRange().createContextualFragment(t).childNodes;d._isFormatData(e)&&(t=d._convertListCell(e))}const e=s.createRange().createContextualFragment(t).childNodes;if(i){const t=d._charTypeHTML?"outerHTML":"textContent";let n="";for(let i=0,l=e.length;i<l;i++)n+=e[i][t];if(!d.checkCharCount(n,null))return}let n,o,a,c,u;for(;n=e[0];)c&&3===c.nodeType&&o&&1===o.nodeType&&r.isBreak(n)?(c=n,r.removeItem(n)):(a=d.insertNode(n,o,!1),o=a.container||a,u||(u=a),c=n);3===c.nodeType&&1===o.nodeType&&(o=c);const h=3===o.nodeType?a.endOffset||o.textContent.length:o.childNodes.length;l?d.setRange(u.container||u,u.startOffset||0,o,h):d.setRange(o,h,o,h)}catch(e){if(d.isDisabled||d.isReadOnly)return;console.warn("[SUNEDITOR.insertHTML.fail] "+e),d.execCommand("insertHTML",!1,t)}}else if(r.isComponent(t))d.insertComponent(t,!1,i,!1);else{let e=null;(r.isFormatElement(t)||r.isMedia(t))&&(e=r.getFormatElement(d.getSelectionNode(),null)),d.insertNode(t,e,i)}d.effectNode=null,d.focus(),d.history.push(!1)},setContents:function(e){d.setContents(e)},appendContents:function(t){const n=d.convertContentsForEditor(t);if(d._variable.isCodeView)d._setCodeView(d._getCodeView()+"\n"+d.convertHTMLForCodeView(n,!1));else{const t=r.createElement("DIV");t.innerHTML=n;const i=e.element.wysiwyg,l=t.children;for(let e=0,t=l.length;e<t;e++)l[e]&&i.appendChild(l[e])}d.history.push(!1)},readOnly:function(t){d.isReadOnly=t,r.setDisabledButtons(!!t,d.resizingDisabledButtons),t?(d.controllersOff(),d.submenuActiveButton&&d.submenuActiveButton.disabled&&d.submenuOff(),d._moreLayerActiveButton&&d._moreLayerActiveButton.disabled&&d.moreLayerOff(),d.containerActiveButton&&d.containerActiveButton.disabled&&d.containerOff(),d.modalForm&&d.plugins.dialog.close.call(d),e.element.code.setAttribute("readOnly","true"),r.addClass(e.element.wysiwygFrame,"se-read-only")):(e.element.code.removeAttribute("readOnly"),r.removeClass(e.element.wysiwygFrame,"se-read-only")),l.codeMirrorEditor&&l.codeMirrorEditor.setOption("readOnly",!!t)},disable:function(){this.toolbar.disable(),this.wysiwyg.disable()},disabled:function(){this.disable()},enable:function(){this.toolbar.enable(),this.wysiwyg.enable()},enabled:function(){this.enable()},show:function(){const t=e.element.topArea.style;"none"===t.display&&(t.display=l.display)},hide:function(){e.element.topArea.style.display="none"},destroy:function(){d.submenuOff(),d.containerOff(),d.controllersOff(),d.notice&&d.notice.close.call(d),d.modalForm&&d.plugins.dialog.close.call(d),d.history._destroy(),u._removeEvent(),r.removeItem(e.element.toolbar),r.removeItem(e.element.topArea);for(let e in d.functions)r.hasOwn(d,e)&&delete d.functions[e];for(let e in d)r.hasOwn(d,e)&&delete d[e];for(let e in u)r.hasOwn(u,e)&&delete u[e];for(let t in e)r.hasOwn(e,t)&&delete e[t];for(let e in t)r.hasOwn(t,e)&&delete t[e];for(let e in this)r.hasOwn(this,e)&&delete this[e]},toolbar:{disable:function(){d.submenuOff(),d.moreLayerOff(),d.containerOff(),e.tool.cover.style.display="block"},disabled:function(){this.disable()},enable:function(){e.tool.cover.style.display="none"},enabled:function(){this.enable()},show:function(){d._isInline?u._showToolbarInline():(e.element.toolbar.style.display="",e.element._stickyDummy.style.display=""),u.onResize_window()},hide:function(){d._isInline?u._hideToolbar():(e.element.toolbar.style.display="none",e.element._stickyDummy.style.display="none"),u.onResize_window()}},wysiwyg:{disable:function(){d.controllersOff(),d.modalForm&&d.plugins.dialog.close.call(d),e.element.wysiwyg.setAttribute("contenteditable",!1),d.isDisabled=!0,l.codeMirrorEditor?l.codeMirrorEditor.setOption("readOnly",!0):e.element.code.setAttribute("disabled","disabled")},enable:function(){e.element.wysiwyg.setAttribute("contenteditable",!0),d.isDisabled=!1,l.codeMirrorEditor?l.codeMirrorEditor.setOption("readOnly",!1):e.element.code.removeAttribute("disabled")}}};d.functions=h,d.options=l;let g=e.element,p=g.originElement,m=g.topArea;return p.style.display="none",m.style.display="block",l.iframe&&g.wysiwygFrame.addEventListener("load",(function(){r._setIframeDocument(this,l),d._editorInit(!1,l.value),l.value=null})),"object"==typeof p.nextElementSibling?p.parentNode.insertBefore(m,p.nextElementSibling):p.parentNode.appendChild(m),g.editorArea.appendChild(g.wysiwygFrame),g=p=m=null,l.iframe||(d._editorInit(!1,l.value),l.value=null),h}(A(i,l.constructed,l.options),l.pluginCallButtons,l.plugins,l.options.lang,t,l._responsiveButtons)}};window.SUNEDITOR||Object.defineProperty(window,"SUNEDITOR",{enumerable:!0,writable:!1,configurable:!1,value:{init:M.init,create:M.init({plugins:E}).create}})},ZED3:function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={name:"component",set_container:function(e,t){const n=this.util.createElement("DIV");return n.className="se-component "+t,n.appendChild(e),n},set_cover:function(e){const t=this.util.createElement("FIGURE");return t.appendChild(e),t},create_caption:function(){const e=this.util.createElement("FIGCAPTION");return e.innerHTML="<div>"+this.lang.dialogBox.caption+"</div>",e}};return void 0===t&&(e.SUNEDITOR_MODULES||Object.defineProperty(e,"SUNEDITOR_MODULES",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_MODULES,"component",{enumerable:!0,writable:!1,configurable:!1,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_MODULES a window with a document");return l(e)}:l(i)},ee5k:function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={name:"resizing",add:function(e){const t=e.icons,n=e.context;n.resizing={_resizeClientX:0,_resizeClientY:0,_resize_plugin:"",_resize_w:0,_resize_h:0,_origin_w:0,_origin_h:0,_rotateVertical:!1,_resize_direction:"",_move_path:null,_isChange:!1,alignIcons:{basic:t.align_justify,left:t.align_left,right:t.align_right,center:t.align_center}};let i=this.setController_resize(e);n.resizing.resizeContainer=i,n.resizing.resizeDiv=i.querySelector(".se-modal-resize"),n.resizing.resizeDot=i.querySelector(".se-resize-dot"),n.resizing.resizeDisplay=i.querySelector(".se-resize-display");let l=this.setController_button(e);n.resizing.resizeButton=l;let o=n.resizing.resizeHandles=n.resizing.resizeDot.querySelectorAll("span");n.resizing.resizeButtonGroup=l.querySelector("._se_resizing_btn_group"),n.resizing.rotationButtons=l.querySelectorAll("._se_resizing_btn_group ._se_rotation"),n.resizing.percentageButtons=l.querySelectorAll("._se_resizing_btn_group ._se_percentage"),n.resizing.alignMenu=l.querySelector(".se-resizing-align-list"),n.resizing.alignMenuList=n.resizing.alignMenu.querySelectorAll("button"),n.resizing.alignButton=l.querySelector("._se_resizing_align_button"),n.resizing.autoSizeButton=l.querySelector("._se_resizing_btn_group ._se_auto_size"),n.resizing.captionButton=l.querySelector("._se_resizing_caption_button"),i.addEventListener("mousedown",(function(e){e.preventDefault()})),o[0].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[1].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[2].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[3].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[4].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[5].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[6].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),o[7].addEventListener("mousedown",this.onMouseDown_resize_handle.bind(e)),l.addEventListener("click",this.onClick_resizeButton.bind(e)),n.element.relative.appendChild(i),n.element.relative.appendChild(l),i=null,l=null,o=null},setController_resize:function(e){const t=e.util.createElement("DIV");return t.className="se-controller se-resizing-container",t.style.display="none",t.innerHTML='<div class="se-modal-resize"></div><div class="se-resize-dot"><span class="tl"></span><span class="tr"></span><span class="bl"></span><span class="br"></span><span class="lw"></span><span class="th"></span><span class="rw"></span><span class="bh"></span><div class="se-resize-display"></div></div>',t},setController_button:function(e){const t=e.lang,n=e.icons,i=e.util.createElement("DIV");return i.className="se-controller se-controller-resizing",i.innerHTML='<div class="se-arrow se-arrow-up"></div><div class="se-btn-group _se_resizing_btn_group"><button type="button" data-command="percent" data-value="1" class="se-tooltip _se_percentage"><span>100%</span><span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.resize100+'</span></span></button><button type="button" data-command="percent" data-value="0.75" class="se-tooltip _se_percentage"><span>75%</span><span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.resize75+'</span></span></button><button type="button" data-command="percent" data-value="0.5" class="se-tooltip _se_percentage"><span>50%</span><span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.resize50+'</span></span></button><button type="button" data-command="auto" class="se-btn se-tooltip _se_auto_size">'+n.auto_size+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.autoSize+'</span></span></button><button type="button" data-command="rotate" data-value="-90" class="se-btn se-tooltip _se_rotation">'+n.rotate_left+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.rotateLeft+'</span></span></button><button type="button" data-command="rotate" data-value="90" class="se-btn se-tooltip _se_rotation">'+n.rotate_right+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.rotateRight+'</span></span></button></div><div class="se-btn-group" style="padding-top: 0;"><button type="button" data-command="mirror" data-value="h" class="se-btn se-tooltip">'+n.mirror_horizontal+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.mirrorHorizontal+'</span></span></button><button type="button" data-command="mirror" data-value="v" class="se-btn se-tooltip">'+n.mirror_vertical+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.mirrorVertical+'</span></span></button><button type="button" data-command="onalign" class="se-btn se-tooltip _se_resizing_align_button">'+n.align_justify+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.toolbar.align+'</span></span></button><div class="se-btn-group-sub sun-editor-common se-list-layer se-resizing-align-list"><div class="se-list-inner"><ul class="se-list-basic"><li><button type="button" class="se-btn-list se-tooltip" data-command="align" data-value="basic">'+n.align_justify+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.basic+'</span></span></button></li><li><button type="button" class="se-btn-list se-tooltip" data-command="align" data-value="left">'+n.align_left+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.left+'</span></span></button></li><li><button type="button" class="se-btn-list se-tooltip" data-command="align" data-value="center">'+n.align_center+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.center+'</span></span></button></li><li><button type="button" class="se-btn-list se-tooltip" data-command="align" data-value="right">'+n.align_right+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.right+'</span></span></button></li></ul></div></div><button type="button" data-command="caption" class="se-btn se-tooltip _se_resizing_caption_button">'+n.caption+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.caption+'</span></span></button><button type="button" data-command="revert" class="se-btn se-tooltip">'+n.revert+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.dialogBox.revertButton+'</span></span></button><button type="button" data-command="update" class="se-btn se-tooltip">'+n.modify+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.edit+'</span></span></button><button type="button" data-command="delete" class="se-btn se-tooltip">'+n.delete+'<span class="se-tooltip-inner"><span class="se-tooltip-text">'+t.controller.remove+"</span></span></button></div>",i},_module_getSizeX:function(e,t,n,i){return t||(t=e._element),n||(n=e._cover),i||(i=e._container),t?/%$/.test(t.style.width)?(i&&this.util.getNumber(i.style.width,2)||100)+"%":t.style.width:""},_module_getSizeY:function(e,t,n,i){return t||(t=e._element),n||(n=e._cover),i||(i=e._container),i&&n?this.util.getNumber(n.style.paddingBottom,0)>0&&!this.context.resizing._rotateVertical?n.style.height:/%$/.test(t.style.height)&&/%$/.test(t.style.width)?(i&&this.util.getNumber(i.style.height,2)||100)+"%":t.style.height:t&&t.style.height||""},_module_setModifyInputSize:function(e,t){const n=e._onlyPercentage&&this.context.resizing._rotateVertical;e.proportion.checked=e._proportionChecked="false"!==e._element.getAttribute("data-proportion");let i=n?"":this.plugins.resizing._module_getSizeX.call(this,e);if(i===e._defaultSizeX&&(i=""),e._onlyPercentage&&(i=this.util.getNumber(i,2)),e.inputX.value=i,t.setInputSize.call(this,"x"),!e._onlyPercentage){let t=n?"":this.plugins.resizing._module_getSizeY.call(this,e);t===e._defaultSizeY&&(t=""),e._onlyPercentage&&(t=this.util.getNumber(t,2)),e.inputY.value=t}e.inputX.disabled=!!n,e.inputY.disabled=!!n,e.proportion.disabled=!!n,t.setRatio.call(this)},_module_setInputSize:function(e,t){if(e._onlyPercentage)"x"===t&&e.inputX.value>100&&(e.inputX.value=100);else if(e.proportion.checked&&e._ratio&&/\d/.test(e.inputX.value)&&/\d/.test(e.inputY.value)){const n=e.inputX.value.replace(/\d+|\./g,"")||e.sizeUnit,i=e.inputY.value.replace(/\d+|\./g,"")||e.sizeUnit;if(n!==i)return;const l="%"===n?2:0;"x"===t?e.inputY.value=this.util.getNumber(e._ratioY*this.util.getNumber(e.inputX.value,l),l)+i:e.inputX.value=this.util.getNumber(e._ratioX*this.util.getNumber(e.inputY.value,l),l)+n}},_module_setRatio:function(e){const t=e.inputX.value,n=e.inputY.value;if(e.proportion.checked&&/\d+/.test(t)&&/\d+/.test(n)){if((t.replace(/\d+|\./g,"")||e.sizeUnit)!==(n.replace(/\d+|\./g,"")||e.sizeUnit))e._ratio=!1;else if(!e._ratio){const i=this.util.getNumber(t,0),l=this.util.getNumber(n,0);e._ratio=!0,e._ratioX=i/l,e._ratioY=l/i}}else e._ratio=!1},_module_sizeRevert:function(e){e._onlyPercentage?e.inputX.value=e._origin_w>100?100:e._origin_w:(e.inputX.value=e._origin_w,e.inputY.value=e._origin_h)},_module_saveCurrentSize:function(e){const t=this.plugins.resizing._module_getSizeX.call(this,e),n=this.plugins.resizing._module_getSizeY.call(this,e);e._element.setAttribute("width",t.replace("px","")),e._element.setAttribute("height",n.replace("px","")),e._element.setAttribute("data-size",t+","+n),e._videoRatio&&(e._videoRatio=n)},call_controller_resize:function(e,t){const n=this.context.resizing,i=this.context[t];n._resize_plugin=t;const l=n.resizeContainer,o=n.resizeDiv,s=this.util.getOffset(e,this.context.element.wysiwygFrame),a=n._rotateVertical=/^(90|270)$/.test(Math.abs(e.getAttribute("data-rotate")).toString()),r=a?e.offsetHeight:e.offsetWidth,c=a?e.offsetWidth:e.offsetHeight,d=s.top,u=s.left-this.context.element.wysiwygFrame.scrollLeft;l.style.top=d+"px",l.style.left=u+"px",l.style.width=r+"px",l.style.height=c+"px",o.style.top="0px",o.style.left="0px",o.style.width=r+"px",o.style.height=c+"px";let h=e.getAttribute("data-align")||"basic";h="none"===h?"basic":h;const g=this.util.getParentElement(e,this.util.isComponent),p=this.util.getParentElement(e,"FIGURE"),m=this.plugins.resizing._module_getSizeX.call(this,i,e,p,g)||"auto",f=i._onlyPercentage&&"image"===t?"":", "+(this.plugins.resizing._module_getSizeY.call(this,i,e,p,g)||"auto");this.util.changeTxt(n.resizeDisplay,this.lang.dialogBox[h]+" ("+m+f+")"),n.resizeButtonGroup.style.display=i._resizing?"":"none";const _=!i._resizing||i._resizeDotHide||i._onlyPercentage?"none":"flex",b=n.resizeHandles;for(let e=0,t=b.length;e<t;e++)b[e].style.display=_;if(i._resizing){const e=n.rotationButtons;e[0].style.display=e[1].style.display=i._rotation?"":"none"}if(i._alignHide)n.alignButton.style.display="none";else{n.alignButton.style.display="";const e=n.alignMenuList;this.util.changeElement(n.alignButton.firstElementChild,n.alignIcons[h]);for(let t=0,n=e.length;t<n;t++)e[t].getAttribute("data-value")===h?this.util.addClass(e[t],"on"):this.util.removeClass(e[t],"on")}const v=n.percentageButtons,y=/%$/.test(e.style.width)&&/%$/.test(g.style.width)?this.util.getNumber(g.style.width,0)/100+"":"";for(let e=0,t=v.length;e<t;e++)v[e].getAttribute("data-value")===y?this.util.addClass(v[e],"active"):this.util.removeClass(v[e],"active");i._captionShow?(n.captionButton.style.display="",this.util.getChildElement(e.parentNode,"figcaption")?(this.util.addClass(n.captionButton,"active"),i._captionChecked=!0):(this.util.removeClass(n.captionButton,"active"),i._captionChecked=!1)):n.captionButton.style.display="none",l.style.display="block";const C={left:0,top:50};this.options.iframe&&(C.left-=this.context.element.wysiwygFrame.parentElement.offsetLeft,C.top-=this.context.element.wysiwygFrame.parentElement.offsetTop),this.setControllerPosition(n.resizeButton,l,"bottom",C),this.controllersOn(l,n.resizeButton,function(){this.util.setDisabledButtons.call(this.util,!1,this.resizingDisabledButtons),this.history._resetCachingButton()}.bind(this),e,t),this.util.setDisabledButtons(!0,this.resizingDisabledButtons),n._resize_w=r,n._resize_h=c;const w=(e.getAttribute("origin-size")||"").split(",");return n._origin_w=w[0]||e.naturalWidth,n._origin_h=w[1]||e.naturalHeight,{w:r,h:c,t:d,l:u}},_closeAlignMenu:null,openAlignMenu:function(){const e=this.context.resizing.alignButton;this.util.addClass(e,"on"),this.context.resizing.alignMenu.style.top=e.offsetTop+e.offsetHeight+"px",this.context.resizing.alignMenu.style.left=e.offsetLeft-e.offsetWidth/2+"px",this.context.resizing.alignMenu.style.display="block",this.plugins.resizing._closeAlignMenu=function(){this.util.removeClass(this.context.resizing.alignButton,"on"),this.context.resizing.alignMenu.style.display="none",this.removeDocEvent("click",this.plugins.resizing._closeAlignMenu),this.plugins.resizing._closeAlignMenu=null}.bind(this),this.addDocEvent("click",this.plugins.resizing._closeAlignMenu)},onClick_resizeButton:function(e){e.stopPropagation();const t=e.target,n=t.getAttribute("data-command")||t.parentNode.getAttribute("data-command");if(!n)return;const i=t.getAttribute("data-value")||t.parentNode.getAttribute("data-value"),l=this.context.resizing._resize_plugin,o=this.context[l],s=o._element,a=this.plugins[l];if(e.preventDefault(),"function"!=typeof this.plugins.resizing._closeAlignMenu||(this.plugins.resizing._closeAlignMenu(),"onalign"!==n)){switch(n){case"auto":this.plugins.resizing.resetTransform.call(this,s),a.setAutoSize.call(this),this.selectComponent(s,l);break;case"percent":let e=this.plugins.resizing._module_getSizeY.call(this,o);if(this.context.resizing._rotateVertical){const t=s.getAttribute("data-percentage");t&&(e=t.split(",")[1])}this.plugins.resizing.resetTransform.call(this,s),a.setPercentSize.call(this,100*i,null!==this.util.getNumber(e,0)&&/%$/.test(e)?e:""),this.selectComponent(s,l);break;case"mirror":const t=s.getAttribute("data-rotate")||"0";let n=s.getAttribute("data-rotateX")||"",r=s.getAttribute("data-rotateY")||"";"h"===i&&!this.context.resizing._rotateVertical||"v"===i&&this.context.resizing._rotateVertical?r=r?"":"180":n=n?"":"180",s.setAttribute("data-rotateX",n),s.setAttribute("data-rotateY",r),this.plugins.resizing._setTransForm(s,t,n,r);break;case"rotate":const c=this.context.resizing,d=1*s.getAttribute("data-rotate")+1*i,u=this._w.Math.abs(d)>=360?0:d;s.setAttribute("data-rotate",u),c._rotateVertical=/^(90|270)$/.test(this._w.Math.abs(u).toString()),this.plugins.resizing.setTransformSize.call(this,s,null,null),this.selectComponent(s,l);break;case"onalign":return void this.plugins.resizing.openAlignMenu.call(this);case"align":const h="basic"===i?"none":i;a.setAlign.call(this,h,null,null,null),this.selectComponent(s,l);break;case"caption":const g=!o._captionChecked;if(a.openModify.call(this,!0),o._captionChecked=o.captionCheckEl.checked=g,a.update_image.call(this,!1,!1,!1),g){const e=this.util.getChildElement(o._caption,(function(e){return 3===e.nodeType}));e?this.setRange(e,0,e,e.textContent.length):o._caption.focus(),this.controllersOff()}else this.selectComponent(s,l),a.openModify.call(this,!0);break;case"revert":a.setOriginSize.call(this),this.selectComponent(s,l);break;case"update":a.openModify.call(this),this.controllersOff();break;case"delete":a.destroy.call(this)}this.history.push(!1)}},resetTransform:function(e){const t=(e.getAttribute("data-size")||e.getAttribute("data-origin")||"").split(",");this.context.resizing._rotateVertical=!1,e.style.maxWidth="",e.style.transform="",e.style.transformOrigin="",e.setAttribute("data-rotate",""),e.setAttribute("data-rotateX",""),e.setAttribute("data-rotateY",""),this.plugins[this.context.resizing._resize_plugin].setSize.call(this,t[0]?t[0]:"auto",t[1]?t[1]:"",!0)},setTransformSize:function(e,t,n){let i=e.getAttribute("data-percentage");const l=this.context.resizing._rotateVertical,o=1*e.getAttribute("data-rotate");let s="";if(i&&!l)i=i.split(","),"auto"===i[0]&&"auto"===i[1]?this.plugins[this.context.resizing._resize_plugin].setAutoSize.call(this):this.plugins[this.context.resizing._resize_plugin].setPercentSize.call(this,i[0],i[1]);else{const i=this.util.getParentElement(e,"FIGURE"),a=t||e.offsetWidth,r=n||e.offsetHeight,c=(l?r:a)+"px",d=(l?a:r)+"px";if(this.plugins[this.context.resizing._resize_plugin].cancelPercentAttr.call(this),this.plugins[this.context.resizing._resize_plugin].setSize.call(this,a+"px",r+"px",!0),i.style.width=c,i.style.height=this.context[this.context.resizing._resize_plugin]._caption?"":d,l){let e=a/2+"px "+a/2+"px 0",t=r/2+"px "+r/2+"px 0";s=90===o||-270===o?t:e}}e.style.transformOrigin=s,this.plugins.resizing._setTransForm(e,o.toString(),e.getAttribute("data-rotateX")||"",e.getAttribute("data-rotateY")||""),e.style.maxWidth=l?"none":"",this.plugins.resizing.setCaptionPosition.call(this,e)},_setTransForm:function(e,t,n,i){let l=(e.offsetWidth-e.offsetHeight)*(/-/.test(t)?1:-1),o="";if(/[1-9]/.test(t)&&(n||i))switch(o=n?"Y":"X",t){case"90":o=n&&i?"X":i?o:"";break;case"270":l*=-1,o=n&&i?"Y":n?o:"";break;case"-90":o=n&&i?"Y":n?o:"";break;case"-270":l*=-1,o=n&&i?"X":i?o:"";break;default:o=""}t%180==0&&(e.style.maxWidth=""),e.style.transform="rotate("+t+"deg)"+(n?" rotateX("+n+"deg)":"")+(i?" rotateY("+i+"deg)":"")+(o?" translate"+o+"("+l+"px)":"")},setCaptionPosition:function(e){const t=this.util.getChildElement(this.util.getParentElement(e,"FIGURE"),"FIGCAPTION");t&&(t.style.marginTop=(this.context.resizing._rotateVertical?e.offsetWidth-e.offsetHeight:0)+"px")},onMouseDown_resize_handle:function(e){e.stopPropagation(),e.preventDefault();const t=this.context.resizing,n=t._resize_direction=e.target.classList[0];t._resizeClientX=e.clientX,t._resizeClientY=e.clientY,this.context.element.resizeBackground.style.display="block",t.resizeButton.style.display="none",t.resizeDiv.style.float=/l/.test(n)?"right":/r/.test(n)?"left":"none";const i=function(e){if("keydown"===e.type&&27!==e.keyCode)return;const o=t._isChange;t._isChange=!1,this.removeDocEvent("mousemove",l),this.removeDocEvent("mouseup",i),this.removeDocEvent("keydown",i),"keydown"===e.type?(this.controllersOff(),this.context.element.resizeBackground.style.display="none",this.plugins[this.context.resizing._resize_plugin].init.call(this)):(this.plugins.resizing.cancel_controller_resize.call(this,n),o&&this.history.push(!1))}.bind(this),l=this.plugins.resizing.resizing_element.bind(this,t,n,this.context[t._resize_plugin]);this.addDocEvent("mousemove",l),this.addDocEvent("mouseup",i),this.addDocEvent("keydown",i)},resizing_element:function(e,t,n,i){const l=i.clientX,o=i.clientY;let s=n._element_w,a=n._element_h;const r=n._element_w+(/r/.test(t)?l-e._resizeClientX:e._resizeClientX-l),c=n._element_h+(/b/.test(t)?o-e._resizeClientY:e._resizeClientY-o),d=n._element_h/n._element_w*r;/t/.test(t)&&(e.resizeDiv.style.top=n._element_h-(/h/.test(t)?c:d)+"px"),/l/.test(t)&&(e.resizeDiv.style.left=n._element_w-r+"px"),/r|l/.test(t)&&(e.resizeDiv.style.width=r+"px",s=r),/^(t|b)[^h]$/.test(t)?(e.resizeDiv.style.height=d+"px",a=d):/^(t|b)h$/.test(t)&&(e.resizeDiv.style.height=c+"px",a=c),e._resize_w=s,e._resize_h=a,this.util.changeTxt(e.resizeDisplay,this._w.Math.round(s)+" x "+this._w.Math.round(a)),e._isChange=!0},cancel_controller_resize:function(e){const t=this.context.resizing._rotateVertical;this.controllersOff(),this.context.element.resizeBackground.style.display="none";let n=this._w.Math.round(t?this.context.resizing._resize_h:this.context.resizing._resize_w),i=this._w.Math.round(t?this.context.resizing._resize_w:this.context.resizing._resize_h);if(!t&&!/%$/.test(n)){const e=16,t=this.context.element.wysiwygFrame.clientWidth-2*e-2;this.util.getNumber(n,0)>t&&(i=this._w.Math.round(i/n*t),n=t)}const l=this.context.resizing._resize_plugin;this.plugins[l].setSize.call(this,n,i,!1,e),t&&this.plugins.resizing.setTransformSize.call(this,this.context[this.context.resizing._resize_plugin]._element,n,i),this.selectComponent(this.context[l]._element,l)}};return void 0===t&&(e.SUNEDITOR_MODULES||Object.defineProperty(e,"SUNEDITOR_MODULES",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_MODULES,"resizing",{enumerable:!0,writable:!1,configurable:!1,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_MODULES a window with a document");return l(e)}:l(i)},"gjS+":function(e,t,n){"use strict";var i,l;i="undefined"!=typeof window?window:this,l=function(e,t){const n={name:"fileManager",_xmlHttp:null,_checkMediaComponent:function(e){return!/IMG|IFRAME|VIDEO|AUDIO/i.test(e.tagName)||/FIGURE/i.test(e.parentElement.nodeName)||/FIGURE/i.test(e.parentElement.parentElement.nodeName)},upload:function(e,t,n,i,l){this.showLoading();const o=this.plugins.fileManager,s=o._xmlHttp=this.util.getXMLHttpRequest();if(s.onreadystatechange=o._callBackUpload.bind(this,s,i,l),s.open("post",e,!0),null!==t&&"object"==typeof t&&this._w.Object.keys(t).length>0)for(let e in t)s.setRequestHeader(e,t[e]);s.send(n)},_callBackUpload:function(e,t,n){if(4===e.readyState)if(200===e.status)try{t(e)}catch(e){throw Error('[SUNEDITOR.fileManager.upload.callBack.fail] cause : "'+e.message+'"')}finally{this.closeLoading()}else{this.closeLoading();const t=e.responseText?JSON.parse(e.responseText):e;if("function"!=typeof n||n("",t,this)){const n="[SUNEDITOR.fileManager.upload.serverException] status: "+e.status+", response: "+(t.errorMessage||e.responseText);throw this.functions.noticeOpen(n),Error(n)}}},checkInfo:function(e,t,n,i,l){let o=[];for(let e=0,n=t.length;e<n;e++)o=o.concat([].slice.call(this.context.element.wysiwyg.querySelectorAll(t[e]+':not([data-se-embed="true"])')));const s=this.plugins.fileManager,a=this.context[e],r=a._infoList,c=s.setInfo.bind(this);if(o.length===r.length){if(this._componentsInfoReset){for(let t=0,i=o.length;t<i;t++)c(e,o[t],n,null,l);return}{let e=!1;for(let t,n=0,i=r.length;n<i;n++)if(t=r[n],0===o.filter((function(e){return t.src===e.src&&t.index.toString()===e.getAttribute("data-index")})).length){e=!0;break}if(!e)return}}const d=l?this.context.resizing._resize_plugin:"";l&&(this.context.resizing._resize_plugin=e);const u=[],h=[];for(let e=0,t=r.length;e<t;e++)h[e]=r[e].index;for(a.__updateTags=o;o.length>0;){const t=o.shift();this.util.getParentElement(t,this.util.isMediaComponent)&&s._checkMediaComponent(t)?!t.getAttribute("data-index")||h.indexOf(1*t.getAttribute("data-index"))<0?(u.push(a._infoIndex),t.removeAttribute("data-index"),c(e,t,n,null,l)):u.push(1*t.getAttribute("data-index")):(u.push(a._infoIndex),i(t))}for(let e,t=0;t<r.length;t++)e=r[t].index,u.indexOf(e)>-1||(r.splice(t,1),"function"==typeof n&&n(null,e,"delete",null,0,this),t--);l&&(this.context.resizing._resize_plugin=d)},setInfo:function(e,t,n,i,l){const o=l?this.context.resizing._resize_plugin:"";l&&(this.context.resizing._resize_plugin=e);const s=this.plugins[e],a=this.context[e],r=a._infoList;let c=t.getAttribute("data-index"),d=null,u="";if(i||(i={name:t.getAttribute("data-file-name")||("string"==typeof t.src?t.src.split("/").pop():""),size:t.getAttribute("data-file-size")||0}),!c||this._componentsInfoInit)u="create",c=a._infoIndex++,t.setAttribute("data-index",c),t.setAttribute("data-file-name",i.name),t.setAttribute("data-file-size",i.size),d={src:t.src,index:1*c,name:i.name,size:i.size},r.push(d);else{u="update",c*=1;for(let e=0,t=r.length;e<t;e++)if(c===r[e].index){d=r[e];break}d||(c=a._infoIndex++,d={index:c},r.push(d)),d.src=t.src,d.name=t.getAttribute("data-file-name"),d.size=1*t.getAttribute("data-file-size")}if(d.element=t,d.delete=s.destroy.bind(this,t),d.select=function(e){e.scrollIntoView(!0),this._w.setTimeout(s.select.bind(this,e))}.bind(this,t),l){if(!t.getAttribute("origin-size")&&t.naturalWidth&&t.setAttribute("origin-size",t.naturalWidth+","+t.naturalHeight),!t.getAttribute("data-origin")){const e=this.util.getParentElement(t,this.util.isMediaComponent),n=this.util.getParentElement(t,"FIGURE"),i=this.plugins.resizing._module_getSizeX.call(this,a,t,n,e),l=this.plugins.resizing._module_getSizeY.call(this,a,t,n,e);t.setAttribute("data-origin",i+","+l),t.setAttribute("data-size",i+","+l)}if(!t.style.width){const e=(t.getAttribute("data-size")||t.getAttribute("data-origin")||"").split(",");s.onModifyMode.call(this,t,null),s.applySize.call(this,e[0],e[1])}this.context.resizing._resize_plugin=o}"function"==typeof n&&n(t,c,u,d,--a._uploadFileLength<0?0:a._uploadFileLength,this)},deleteInfo:function(e,t,n){if(t>=0){const i=this.context[e]._infoList;for(let e=0,l=i.length;e<l;e++)if(t===i[e].index)return i.splice(e,1),void("function"==typeof n&&n(null,t,"delete",null,0,this))}},resetInfo:function(e,t){const n=this.context[e];if("function"==typeof t){const e=n._infoList;for(let n=0,i=e.length;n<i;n++)t(null,e[n].index,"delete",null,0,this)}n._infoList=[],n._infoIndex=0}};return void 0===t&&(e.SUNEDITOR_MODULES||Object.defineProperty(e,"SUNEDITOR_MODULES",{enumerable:!0,writable:!1,configurable:!1,value:{}}),Object.defineProperty(e.SUNEDITOR_MODULES,"fileManager",{enumerable:!0,writable:!1,configurable:!1,value:n})),n},"object"==typeof e.exports?e.exports=i.document?l(i,!0):function(e){if(!e.document)throw new Error("SUNEDITOR_MODULES a window with a document");return l(e)}:l(i)}});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvbW9kdWxlcy9kaWFsb2cuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvbW9kdWxlcy9maWxlQnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbGFuZy9lbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9tb2R1bGVzL19jb2xvclBpY2tlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9zdWJtZW51L2ZvbnRDb2xvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9zdWJtZW51L2hpbGl0ZUNvbG9yLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL3N1Ym1lbnUvdGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvbW9kdWxlcy9fc2VsZWN0TWVudS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9tb2R1bGVzL19hbmNob3IuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvZGlhbG9nL2xpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvZGlhbG9nL2ltYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL2RpYWxvZy92aWRlby5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9kaWFsb2cvYXVkaW8uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvZGlhbG9nL21hdGguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvY29tbWFuZC9ibG9ja3F1b3RlLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL3N1Ym1lbnUvYWxpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvc3VibWVudS9mb250LmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL3N1Ym1lbnUvZm9udFNpemUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvc3VibWVudS9ob3Jpem9udGFsUnVsZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9zdWJtZW51L2xpc3QuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvc3VibWVudS90YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9zdWJtZW51L2Zvcm1hdEJsb2NrLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL3N1Ym1lbnUvbGluZUhlaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGx1Z2lucy9zdWJtZW51L3BhcmFncmFwaFN0eWxlLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL3N1Ym1lbnUvdGV4dFN0eWxlLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL2ZpbGVCcm93c2VyL2ltYWdlR2FsbGVyeS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL2RlZmF1bHRJY29ucy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbGliL3V0aWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xpYi9jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbGliL2NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvbW9kdWxlcy9fbm90aWNlLmpzIiwid2VicGFjazovLy8uL3NyYy9zdW5lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xpYi9jb3JlLmpzIiwid2VicGFjazovLy8uL3NyYy9saWIvaGlzdG9yeS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc3VuZWRpdG9yX2J1aWxkLmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL21vZHVsZXMvY29tcG9uZW50LmpzIiwid2VicGFjazovLy8uL3NyYy9wbHVnaW5zL21vZHVsZXMvcmVzaXppbmcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3BsdWdpbnMvbW9kdWxlcy9maWxlTWFuYWdlci5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImdsb2JhbCIsImZhY3RvcnkiLCJ3aW5kb3ciLCJ0aGlzIiwibm9HbG9iYWwiLCJkaWFsb2ciLCJhZGQiLCJjb3JlIiwiY29udGV4dCIsImtpbmQiLCJ1cGRhdGVNb2RhbCIsIl9jbG9zZVNpZ25hbCIsImRpYWxvZ19kaXYiLCJ1dGlsIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImRpYWxvZ19iYWNrIiwic3R5bGUiLCJkaXNwbGF5IiwiZGlhbG9nX2FyZWEiLCJhcHBlbmRDaGlsZCIsIm1vZGFsQXJlYSIsImJhY2siLCJtb2RhbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJfb25Nb3VzZURvd25fZGlhbG9nIiwiX29uQ2xpY2tfZGlhbG9nIiwiZWxlbWVudCIsInJlbGF0aXZlIiwiZSIsInRlc3QiLCJ0YXJnZXQiLCJnZXRBdHRyaWJ1dGUiLCJwbHVnaW5zIiwiY2xvc2UiLCJvcGVuIiwidXBkYXRlIiwibW9kYWxGb3JtIiwiX2JpbmRDbG9zZSIsIl9kIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImtleUNvZGUiLCJvcHRpb25zIiwicG9wdXBEaXNwbGF5IiwicG9zaXRpb24iLCJmb2N1c0VsZW1lbnQiLCJvbiIsImZvY3VzIiwiaW5pdCIsIlNVTkVESVRPUl9NT0RVTEVTIiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJkb2N1bWVudCIsInciLCJFcnJvciIsImZpbGVCcm93c2VyIiwiX3htbEh0dHAiLCJfbG9hZGluZyIsImFyZWEiLCJoZWFkZXIiLCJ0YWdBcmVhIiwiYm9keSIsImxpc3QiLCJ0YWdFbGVtZW50cyIsIml0ZW1zIiwic2VsZWN0ZWRUYWdzIiwic2VsZWN0b3JIYW5kbGVyIiwiY29udGV4dFBsdWdpbiIsImNvbHVtblNpemUiLCJicm93c2VyX2RpdiIsImNvbnRlbnQiLCJpbm5lckhUTUwiLCJzZXRfYnJvd3NlciIsInF1ZXJ5U2VsZWN0b3IiLCJ0aXRsZUFyZWEiLCJvbkNsaWNrVGFnIiwib25DbGlja0ZpbGUiLCJfb25Nb3VzZURvd25fYnJvd3NlciIsIl9vbkNsaWNrX2Jyb3dzZXIiLCJsYW5nIiwiZGlhbG9nQm94IiwiaWNvbnMiLCJjYW5jZWwiLCJzdG9wUHJvcGFnYXRpb24iLCJwbHVnaW5OYW1lIiwiZmlsZUJyb3dzZXJDb250ZXh0IiwicGx1Z2luQ29udGV4dCIsImxpc3RDbGFzc05hbWUiLCJsaXN0Q2xhc3MiLCJoYXNDbGFzcyIsInRleHRDb250ZW50IiwidGl0bGUiLCJkaXJlY3REYXRhIiwiX2RyYXdMaXN0SXRlbSIsIl9kcmF3RmlsZUxpc3QiLCJ1cmwiLCJmaWxlQnJvd3NlclBsdWdpbiIsImFib3J0Iiwic2hvd0Jyb3dzZXJMb2FkaW5nIiwiY2xvc2VCcm93c2VyTG9hZGluZyIsImJyb3dzZXJIZWFkZXIiLCJ4bWxIdHRwIiwiZ2V0WE1MSHR0cFJlcXVlc3QiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJfY2FsbEJhY2tHZXQiLCJfdyIsImtleXMiLCJsZW5ndGgiLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2VuZCIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJyZXMiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJyZXN1bHQiLCJudWxsTWVzc2FnZSIsIm1lc3NhZ2UiLCJtYXhIZWlnaHQiLCJpbm5lckhlaWdodCIsIm9mZnNldEhlaWdodCIsImVyciIsImVycm9yTWVzc2FnZSIsIl90YWdzIiwibGVuIiwic3BsaXRTaXplIiwiTWF0aCIsInJvdW5kIiwiZHJhd0l0ZW1IYW5kbGVyIiwiaXRlbVRlbXBsYXRlSGFuZGxlciIsInRhZ3NIVE1MIiwibGlzdEhUTUwiLCJjb2x1bW5zIiwiaXRlbSIsInRhZ3MiLCJ0YWciLCJzcGxpdCIsIm1hcCIsInYiLCJ0cmltIiwidExlbiIsImluZGV4T2YiLCJwdXNoIiwicXVlcnlTZWxlY3RvckFsbCIsImlzQW5jaG9yIiwidGFnTmFtZSIsInNlbGVjdFRhZyIsInNUYWdJbmRleCIsInNwbGljZSIsInJlbW92ZUNsYXNzIiwiYWRkQ2xhc3MiLCJmaWx0ZXIiLCJzb21lIiwicHJldmVudERlZmF1bHQiLCJsaXN0RWwiLCJjb21tYW5kIiwicGFyZW50Tm9kZSIsImNvZGUiLCJ0b29sYmFyIiwiZGVmYXVsdCIsInNhdmUiLCJmb250IiwiZm9ybWF0cyIsImZvbnRTaXplIiwiYm9sZCIsInVuZGVybGluZSIsIml0YWxpYyIsInN0cmlrZSIsInN1YnNjcmlwdCIsInN1cGVyc2NyaXB0IiwicmVtb3ZlRm9ybWF0IiwiZm9udENvbG9yIiwiaGlsaXRlQ29sb3IiLCJpbmRlbnQiLCJvdXRkZW50IiwiYWxpZ24iLCJhbGlnbkxlZnQiLCJhbGlnblJpZ2h0IiwiYWxpZ25DZW50ZXIiLCJhbGlnbkp1c3RpZnkiLCJvcmRlckxpc3QiLCJ1bm9yZGVyTGlzdCIsImhvcml6b250YWxSdWxlIiwiaHJfc29saWQiLCJocl9kb3R0ZWQiLCJocl9kYXNoZWQiLCJ0YWJsZSIsImxpbmsiLCJtYXRoIiwiaW1hZ2UiLCJ2aWRlbyIsImF1ZGlvIiwiZnVsbFNjcmVlbiIsInNob3dCbG9ja3MiLCJjb2RlVmlldyIsInVuZG8iLCJyZWRvIiwicHJldmlldyIsInByaW50IiwidGFnX3AiLCJ0YWdfZGl2IiwidGFnX2giLCJ0YWdfYmxvY2txdW90ZSIsInRhZ19wcmUiLCJ0ZW1wbGF0ZSIsImxpbmVIZWlnaHQiLCJwYXJhZ3JhcGhTdHlsZSIsInRleHRTdHlsZSIsImltYWdlR2FsbGVyeSIsImRpcl9sdHIiLCJkaXJfcnRsIiwibWVudGlvbiIsImxpbmtCb3giLCJ0ZXh0IiwibmV3V2luZG93Q2hlY2siLCJkb3dubG9hZExpbmtDaGVjayIsImJvb2ttYXJrIiwibWF0aEJveCIsImlucHV0TGFiZWwiLCJmb250U2l6ZUxhYmVsIiwicHJldmlld0xhYmVsIiwiaW1hZ2VCb3giLCJmaWxlIiwiYWx0VGV4dCIsInZpZGVvQm94IiwiYXVkaW9Cb3giLCJicm93c2VyIiwic2VhcmNoIiwiY2FwdGlvbiIsInN1Ym1pdEJ1dHRvbiIsInJldmVydEJ1dHRvbiIsInByb3BvcnRpb24iLCJiYXNpYyIsImxlZnQiLCJyaWdodCIsImNlbnRlciIsIndpZHRoIiwiaGVpZ2h0Iiwic2l6ZSIsInJhdGlvIiwiY29udHJvbGxlciIsImVkaXQiLCJ1bmxpbmsiLCJyZW1vdmUiLCJpbnNlcnRSb3dBYm92ZSIsImluc2VydFJvd0JlbG93IiwiZGVsZXRlUm93IiwiaW5zZXJ0Q29sdW1uQmVmb3JlIiwiaW5zZXJ0Q29sdW1uQWZ0ZXIiLCJkZWxldGVDb2x1bW4iLCJmaXhlZENvbHVtbldpZHRoIiwicmVzaXplMTAwIiwicmVzaXplNzUiLCJyZXNpemU1MCIsInJlc2l6ZTI1IiwiYXV0b1NpemUiLCJtaXJyb3JIb3Jpem9udGFsIiwibWlycm9yVmVydGljYWwiLCJyb3RhdGVMZWZ0Iiwicm90YXRlUmlnaHQiLCJtYXhTaXplIiwibWluU2l6ZSIsInRhYmxlSGVhZGVyIiwibWVyZ2VDZWxscyIsInNwbGl0Q2VsbHMiLCJIb3Jpem9udGFsU3BsaXQiLCJWZXJ0aWNhbFNwbGl0IiwibWVudSIsInNwYWNlZCIsImJvcmRlcmVkIiwibmVvbiIsInRyYW5zbHVjZW50Iiwic2hhZG93IiwiU1VORURJVE9SX0xBTkciLCJjb2xvclBpY2tlciIsImNvbG9yTGlzdEhUTUwiLCJfY29sb3JJbnB1dCIsIl9kZWZhdWx0Q29sb3IiLCJfc3R5bGVQcm9wZXJ0eSIsIl9jdXJyZW50Q29sb3IiLCJfY29sb3JMaXN0IiwiY3JlYXRlQ29sb3JMaXN0IiwiX21ha2VDb2xvckxpc3QiLCJtYWtlQ29sb3IiLCJvcHRpb24iLCJjb2xvckxpc3QiLCJjb2xvckFyciIsImNvbG9yIiwiY2hlY2tlZCIsImVyYXNlIiwibm9kZSIsImZpbGxDb2xvciIsImdldENvbG9ySW5Ob2RlIiwiaXNIZXhDb2xvciIsInJnYjJoZXgiLCJ0b0xvd2VyQ2FzZSIsInNldElucHV0VGV4dCIsImNvbG9yTmFtZTJoZXgiLCJzZXRDdXJyZW50Q29sb3IiLCJoZXhDb2xvclN0ciIsImJvcmRlckNvbG9yIiwiZmluZENvbG9yIiwic3R5bGVQcm9wZXJ0eSIsImlzV3lzaXd5Z0RpdiIsIm5vZGVUeXBlIiwic3RyIiwicmdiIiwicmdiTWF0Y2giLCJtYXRjaCIsInBhcnNlSW50IiwidG9TdHJpbmciLCJzbGljZSIsImNvbG9yTmFtZSIsInRlbXAiLCJjb2xvcnMiLCJnZXRDb21wdXRlZFN0eWxlIiwiYSIsInJlbW92ZUl0ZW0iLCJzdWJzdHIiLCJ0YXJnZXRFbGVtZW50IiwiYWRkTW9kdWxlIiwicHJldmlld0VsIiwiY29sb3JJbnB1dCIsImxpc3REaXYiLCJzZXRTdWJtZW51Iiwib25DaGFuZ2VJbnB1dCIsInN1Ym1pdCIsInBpY2t1cCIsImluaXRNZW51VGFyZ2V0IiwiY29sb3JBcmVhIiwiY29udGV4dFBpY2tlciIsImNvbnRleHRGb250Q29sb3IiLCJ3d0NvbXB1dGVkU3R5bGUiLCJnZXRTZWxlY3Rpb25Ob2RlIiwiYXBwbHlDb2xvciIsIm5vZGVDaGFuZ2UiLCJzdWJtZW51T2ZmIiwibmV3Tm9kZSIsImNvbnRleHRIaWxpdGVDb2xvciIsImJhY2tncm91bmRDb2xvciIsInNlbGVjdGVkSW5kZXgiLCJ0ZW1wbGF0ZURpdiIsInRlbXBsYXRlTGlzdCIsInRlbXBsYXRlcyIsImh0bWwiLCJzZXRDb250ZW50cyIsInNlbGVjdE1lbnUiLCJjYWxsZXIiLCJjYWxsZXJDb250ZXh0Iiwic2V0Rm9ybSIsImNyZWF0ZUxpc3QiLCJsaXN0Q29udGV4dCIsImZvcm0iLCJtZW51cyIsImluaXRFdmVudCIsImZvcm1zIiwiaW5kZXgiLCJjbGlja01ldGhvZCIsImNhbGxlck5hbWUiLCJvbk1vdXNlZG93bl9saXN0Iiwib25Nb3VzZU1vdmVfbGlzdCIsIm9uQ2xpY2tfbGlzdCIsIm1vdmVJdGVtIiwibnVtIiwic2VsZWN0SW5kZXgiLCJnZXRJdGVtIiwicG9zaXRpb25IYW5kbGVyIiwidmlzaWJpbGl0eSIsImFuY2hvciIsInNldERpYWxvZ0Zvcm0iLCJob3N0IiwibG9jYXRpb24iLCJvcmlnaW4iLCJwYXRobmFtZSIsInJlcGxhY2UiLCJyZWxMaXN0IiwibGlua1JlbCIsImRlZmF1bHRSZWwiLCJsaW5rUmVsRGVmYXVsdCIsInByb3RvY29sIiwiZG93bmxvYWQiLCJyZWwiLCJhbmNob3JQbHVnaW4iLCJ1cmxJbnB1dCIsImxpbmtEZWZhdWx0UmVsIiwiY3VycmVudFJlbCIsImxpbmtBbmNob3IiLCJsaW5rVmFsdWUiLCJfY2hhbmdlIiwiY2hlY2tfbmV3X3dpbmRvdyIsImNoZWNrX2Jvb2ttYXJrIiwiYW5jaG9yVGV4dCIsImRvd25sb2FkQ2hlY2siLCJib29rbWFya0J1dHRvbiIsInJlbEJ1dHRvbiIsInJlbFByZXZpZXciLCJvbkNsaWNrX3JlbEJ1dHRvbiIsIm9uQ2xpY2tfcmVsTGlzdCIsIm9uQ2hhbmdlX25ld1dpbmRvd0NoZWNrIiwib25DaGFuZ2VfZG93bmxvYWRDaGVjayIsIm9uQ2hhbmdlQW5jaG9yVGV4dCIsIm9uQ2hhbmdlVXJsSW5wdXQiLCJvbktleURvd25VcmxJbnB1dCIsIm9uRm9jdXNVcmxJbnB1dCIsIm9uQmx1clVybElucHV0Iiwib25DbGlja19ib29rbWFya0J1dHRvbiIsImNvbnRleHRBbmNob3IiLCJocmVmIiwic2VsZlBhdGhCb29rbWFyayIsImxhc3RJbmRleE9mIiwiZ2V0U2VsZWN0aW9uIiwibGlua1RhcmdldE5ld1dpbmRvdyIsInNldFJlbCIsInNldExpbmtQcmV2aWV3Iiwic2V0SGVhZGVyQm9va21hcmsiLCJwYXRoIiwiX2Nsb3NlUmVsTWVudSIsInRvZ2dsZVJlbExpc3QiLCJzaG93IiwicnRsIiwib2Zmc2V0TGVmdCIsIm9mZnNldFdpZHRoIiwidG9wIiwib2Zmc2V0VG9wIiwiY29udGFpbnMiLCJjbWQiLCJjdXJyZW50IiwidG9nZ2xlQ2xhc3MiLCJqb2luIiwicmVsQXR0ciIsInJlbExpc3RFbCIsInJlbHMiLCJjaGVja2VkUmVsIiwiY3JlYXRlSGVhZGVyTGlzdCIsImNvbnRleHRMaXN0IiwidXJsVmFsdWUiLCJoZWFkZXJzIiwiZ2V0TGlzdENoaWxkcmVuIiwid3lzaXd5ZyIsIm5vZGVOYW1lIiwidmFsdWVSZWdFeHAiLCJSZWdFeHAiLCJoIiwiX3NldE1lbnVMaXN0UG9zaXRpb24iLCJpZCIsInJhbmRvbSIsImNvbnRleHRMaW5rIiwibGlua1Byb3RvY29sIiwibm9QcmVmaXgiLCJsaW5rTm9QcmVmaXgiLCJyZXNlcnZlZFByb3RvY29sIiwic2FtZVByb3RvY29sIiwiZXNjYXBlU3RyaW5nUmVnZXhwIiwic2V0Q3R4IiwidXBkYXRlQW5jaG9yIiwiZGlzcGxheVRleHQiLCJub3RUZXh0Iiwic2V0QXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwiY2hpbGRyZW4iLCJjcmVhdGVBbmNob3IiLCJvQSIsIl9yZWxNZXJnZSIsIl9yZWxEZWxldGUiLCJfbGlua0FuY2hvciIsImFuY2hvckN0eCIsImxpbmtfZGlhbG9nIiwic2V0RGlhbG9nIiwibGlua19jb250cm9sbGVyIiwic2V0Q29udHJvbGxlcl9MaW5rQnV0dG9uIiwibGlua0NvbnRyb2xsZXIiLCJvbkNsaWNrX2xpbmtDb250cm9sbGVyIiwibGlua19idG4iLCJkZWxldGUiLCJjdXJyZW50Q29udHJvbGxlck5hbWUiLCJzaG93TG9hZGluZyIsInRleHROb2RlIiwiY2hpbGROb2RlcyIsInNldFJhbmdlIiwic2VsZWN0ZWRGb3JtYXRzIiwiZ2V0U2VsZWN0ZWRFbGVtZW50cyIsIm9Gb3JtYXQiLCJpbnNlcnROb2RlIiwiY2xvc2VMb2FkaW5nIiwiaGlzdG9yeSIsImFjdGl2ZSIsImNvbnRyb2xsZXJBcnJheSIsImNhbGxfY29udHJvbGxlciIsImNvbnRyb2xsZXJzT2ZmIiwic2VsZWN0aW9uQVRhZyIsImVkaXRMaW5rIiwibGlua0J0biIsInNldENvbnRyb2xsZXJQb3NpdGlvbiIsImNvbnRyb2xsZXJzT24iLCJzYyIsImdldENoaWxkRWxlbWVudCIsImVjIiwiY29tcG9uZW50IiwicmVzaXppbmciLCJmaWxlTWFuYWdlciIsImNvbnRleHRJbWFnZSIsIl9pbmZvTGlzdCIsIl9pbmZvSW5kZXgiLCJfdXBsb2FkRmlsZUxlbmd0aCIsInNpemVVbml0IiwiX2ltYWdlU2l6ZVVuaXQiLCJfbGlua0VsZW1lbnQiLCJfYWx0VGV4dCIsIl9hbGlnbiIsIl9mbG9hdENsYXNzUmVnRXhwIiwiX3Zfc3JjIiwiX2xpbmtWYWx1ZSIsInN2Z0RlZmF1bHRTaXplIiwiYmFzZTY0UmVuZGVySW5kZXgiLCJfZWxlbWVudCIsIl9jb3ZlciIsIl9jb250YWluZXIiLCJpbnB1dFgiLCJpbnB1dFkiLCJfZWxlbWVudF93IiwiX2VsZW1lbnRfaCIsIl9lbGVtZW50X2wiLCJfZWxlbWVudF90IiwiX2RlZmF1bHRTaXplWCIsIl9kZWZhdWx0U2l6ZVkiLCJfb3JpZ2luX3ciLCJpbWFnZVdpZHRoIiwiX29yaWdpbl9oIiwiaW1hZ2VIZWlnaHQiLCJfcHJvcG9ydGlvbkNoZWNrZWQiLCJfcmVzaXppbmciLCJpbWFnZVJlc2l6aW5nIiwiX3Jlc2l6ZURvdEhpZGUiLCJpbWFnZUhlaWdodFNob3ciLCJfcm90YXRpb24iLCJpbWFnZVJvdGF0aW9uIiwiX2FsaWduSGlkZSIsImltYWdlQWxpZ25TaG93IiwiX29ubHlQZXJjZW50YWdlIiwiaW1hZ2VTaXplT25seVBlcmNlbnRhZ2UiLCJfcmF0aW8iLCJfcmF0aW9YIiwiX3JhdGlvWSIsIl9jYXB0aW9uU2hvdyIsIl9jYXB0aW9uQ2hlY2tlZCIsIl9jYXB0aW9uIiwiY2FwdGlvbkNoZWNrRWwiLCJpbWFnZV9kaWFsb2ciLCJpbWdJbnB1dEZpbGUiLCJpbWdVcmxGaWxlIiwicHJldmlld1NyYyIsIm9wZW5UYWIiLCJfcmVtb3ZlU2VsZWN0ZWRGaWxlcyIsIl9vbkxpbmtQcmV2aWV3IiwiX2ZpbGVJbnB1dENoYW5nZSIsImltYWdlR2FsbGVyeUJ1dHRvbiIsIl9vcGVuR2FsbGVyeSIsInNldElucHV0U2l6ZSIsInNldFJhdGlvIiwic2l6ZVJldmVydCIsImltYWdlRmlsZUlucHV0IiwiaW1hZ2VBY2NlcHQiLCJpbWFnZU11bHRpcGxlRmlsZSIsImltYWdlVXJsSW5wdXQiLCJpbWFnZUdhbGxlcnlVcmwiLCJpbWFnZV9nYWxsZXJ5Iiwib25seVBlcmNlbnRhZ2UiLCJvbmx5UGVyY2VudERpc3BsYXkiLCJoZWlnaHREaXNwbGF5IiwicmV2ZXJ0IiwidGV4dERlY29yYXRpb24iLCJjYWxsUGx1Z2luIiwiX3NldFVybElucHV0IiwiYWx0Iiwic3JjIiwiZmlsZVRhZ3MiLCJzZWxlY3QiLCJvbk1vZGlmeU1vZGUiLCJjYWxsX2NvbnRyb2xsZXJfcmVzaXplIiwiZGVzdHJveSIsImltYWdlRWwiLCJpbWFnZUNvbnRhaW5lciIsImdldFBhcmVudEVsZW1lbnQiLCJpc01lZGlhQ29tcG9uZW50IiwiZGF0YUluZGV4IiwiZnVuY3Rpb25zIiwib25JbWFnZURlbGV0ZUJlZm9yZSIsImZvY3VzRWwiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiZW1wdHlEaXYiLCJyZW1vdmVJdGVtQWxsUGFyZW50cyIsImZvY3VzRWRnZSIsImRlbGV0ZUluZm8iLCJvbkltYWdlVXBsb2FkIiwidGFiTmFtZSIsInRhYkNvbnRlbnQiLCJ0YWJMaW5rcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJpbWFnZVBsdWdpbiIsInVwZGF0ZV9pbWFnZSIsImZpbGVzIiwic3VibWl0QWN0aW9uIiwib25SZW5kZXJfaW1nVXJsIiwiZXJyb3IiLCJmaWxlTGlzdCIsImZpbGVTaXplIiwidHlwZSIsImxpbWl0U2l6ZSIsImltYWdlVXBsb2FkU2l6ZUxpbWl0IiwiaW5mb1NpemUiLCJpbWFnZXNJbmZvIiwib25JbWFnZVVwbG9hZEVycm9yIiwibm90aWNlT3BlbiIsImluZm8iLCJpbnB1dFdpZHRoIiwiaW5wdXRIZWlnaHQiLCJpc1VwZGF0ZSIsIm9uSW1hZ2VVcGxvYWRCZWZvcmUiLCJkYXRhIiwiQXJyYXkiLCJpc0FycmF5IiwicmVnaXN0ZXIiLCJ1cGxvYWQiLCJyZXNwb25zZSIsImltYWdlVXBsb2FkVXJsIiwiZmlsZXNMZW4iLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiaW1hZ2VVcGxvYWRIZWFkZXIiLCJjYWxsQmFja19pbWdVcGxvYWQiLCJzZXR1cF9yZWFkZXIiLCJpbWFnZVVwbG9hZEhhbmRsZXIiLCJ1cGRhdGVfc3JjIiwiY3JlYXRlX2ltYWdlIiwiY29uc29sZSIsIndhcm4iLCJ3RmlsZVJlYWRlciIsIkZpbGVSZWFkZXIiLCJmaWxlc1N0YWNrIiwicmVhZGVyIiwib25sb2FkIiwidXBkYXRlRWxlbWVudCIsIm9uUmVuZGVyX2ltZ0Jhc2U2NCIsInJlYWRBc0RhdGFVUkwiLCJ1cGRhdGVNZXRob2QiLCJjcmVhdGVNZXRob2QiLCJwb3AiLCJvblJlbmRlcl9saW5rIiwiaW1nVGFnIiwieHkiLCJfbW9kdWxlX3NldElucHV0U2l6ZSIsIl9tb2R1bGVfc2V0UmF0aW8iLCJjaGVja0ZpbGVJbmZvIiwibW9kaWZ5SGFuZGxlciIsIm9wZW5Nb2RpZnkiLCJmb3JtYXQiLCJnZXRGb3JtYXRFbGVtZW50IiwidGV4dEFsaWduIiwiZmxvYXQiLCJjaGVja0luZm8iLCJyZXNldEZpbGVJbmZvIiwicmVzZXRJbmZvIiwiX3Jlc2l6ZV9wbHVnaW4iLCJvSW1nIiwiY2xvbmVOb2RlIiwiY292ZXIiLCJzZXRfY292ZXIiLCJjb250YWluZXIiLCJzZXRfY29udGFpbmVyIiwiY3JlYXRlX2NhcHRpb24iLCJhcHBseVNpemUiLCJzZXRBbGlnbiIsIl9pbWFnZV9jcmVhdGVfb25sb2FkIiwiaW5zZXJ0Q29tcG9uZW50IiwibWVkaWFBdXRvU2VsZWN0Iiwic2V0SW5mbyIsInNlbGVjdENvbXBvbmVudCIsImxpbmUiLCJhcHBlbmRGb3JtYXRUYWciLCJvcGVuQ29udHJvbGxlciIsIm5vdEhpc3RvcnlQdXNoIiwiY2hhbmdlU2l6ZSIsImlzTmV3Q29udGFpbmVyIiwieCIsImlzTnVtYmVyIiwieSIsIm1vZGlmaWVkQ2FwdGlvbiIsImlzTmV3QW5jaG9yIiwiaW5zZXJ0QmVmb3JlIiwiaW1hZ2VFbGVtZW50IiwibmV3RWwiLCJyZW1vdmVDaGlsZCIsImV4aXN0RWxlbWVudCIsImltZ1BhcmVudCIsImlzUmFuZ2VGb3JtYXRFbGVtZW50IiwiaXNOb3RDaGVja2luZ05vZGUiLCJyZXBsYWNlQ2hpbGQiLCJpc0xpc3RDZWxsIiwicmVmZXIiLCJyZW1vdmVFbXB0eU5vZGUiLCJpc0Zvcm1hdEVsZW1lbnQiLCJzcGxpdEVsZW1lbnQiLCJodG1sUmVtb3ZlV2hpdGVTcGFjZSIsInByZXZpb3VzU2libGluZyIsIl9fdXBkYXRlVGFncyIsImlzRmlndXJlcyIsIl9yb3RhdGVWZXJ0aWNhbCIsInJlc2V0VHJhbnNmb3JtIiwic2V0VHJhbnNmb3JtU2l6ZSIsImdldE51bWJlciIsInNldFRpbWVvdXQiLCJ1c2VyU2l6ZSIsIm5vdE9wZW4iLCJfbW9kdWxlX3NldE1vZGlmeUlucHV0U2l6ZSIsInNldFBlcmNlbnRTaXplIiwic2V0U2l6ZSIsInNldEF1dG9TaXplIiwiX21vZHVsZV9zaXplUmV2ZXJ0Iiwibm90UmVzZXRQZXJjZW50YWdlIiwiZGlyZWN0aW9uIiwib25seVciLCJjYW5jZWxQZXJjZW50QXR0ciIsIl9tb2R1bGVfc2F2ZUN1cnJlbnRTaXplIiwibWFyZ2luVG9wIiwibWF4V2lkdGgiLCJzZXRPcmlnaW5TaXplIiwib3JpZ2luU2l6ZSIsImhlaWdodFBlcmNlbnRhZ2UiLCJzZXRDYXB0aW9uUG9zaXRpb24iLCJtaW5XaWR0aCIsImNvbnRleHRWaWRlbyIsIl92aWRlb1NpemVVbml0IiwiX3lvdXR1YmVRdWVyeSIsInlvdXR1YmVRdWVyeSIsIl92aW1lb1F1ZXJ5IiwidmltZW9RdWVyeSIsIl92aWRlb1JhdGlvIiwidmlkZW9SYXRpbyIsIl9kZWZhdWx0UmF0aW8iLCJ2aWRlb1dpZHRoIiwidmlkZW9IZWlnaHQiLCJ2aWRlb1Jlc2l6aW5nIiwidmlkZW9IZWlnaHRTaG93IiwidmlkZW9Sb3RhdGlvbiIsInZpZGVvQWxpZ25TaG93IiwidmlkZW9TaXplT25seVBlcmNlbnRhZ2UiLCJ2aWRlb19kaWFsb2ciLCJ2aWRlb0lucHV0RmlsZSIsInZpZGVvVXJsRmlsZSIsInZpZGVvUmF0aW9PcHRpb24iLCJzZXRWaWRlb1JhdGlvIiwidmlkZW9GaWxlSW5wdXQiLCJ2aWRlb0FjY2VwdCIsInZpZGVvTXVsdGlwbGVGaWxlIiwidmlkZW9VcmxJbnB1dCIsInJhdGlvTGlzdCIsInZpZGVvUmF0aW9MaXN0IiwicmF0aW9EaXNwbGF5IiwidmlkZW9SYXRpb1Nob3ciLCJvbmx5V2lkdGhEaXNwbGF5IiwiX3NldFRhZ0F0dHJzIiwiYXR0cnMiLCJ2aWRlb1RhZ0F0dHJzIiwiaGFzT3duIiwiY3JlYXRlVmlkZW9UYWciLCJ2aWRlb1RhZyIsIl9zZXRJZnJhbWVBdHRycyIsImZyYW1lQm9yZGVyIiwiYWxsb3dGdWxsc2NyZWVuIiwidmlkZW9JZnJhbWVBdHRycyIsImNyZWF0ZUlmcmFtZVRhZyIsImlmcmFtZVRhZyIsImZyYW1lIiwib25WaWRlb0RlbGV0ZUJlZm9yZSIsIm9uVmlkZW9VcGxvYWQiLCJkaXNhYmxlZCIsInNldFZpZGVvUmF0aW9TZWxlY3QiLCJwbGFjZWhvbGRlciIsInZpZGVvUGx1Z2luIiwic2V0dXBfdXJsIiwidmlkZW9VcGxvYWRTaXplTGltaXQiLCJ2aWRlb3NJbmZvIiwib25WaWRlb1VwbG9hZEVycm9yIiwib25WaWRlb1VwbG9hZEJlZm9yZSIsInZpZGVvVXBsb2FkVXJsIiwidmlkZW9VcGxvYWRIZWFkZXIiLCJjYWxsQmFja192aWRlb1VwbG9hZCIsInZpZGVvVXBsb2FkSGFuZGxlciIsImNyZWF0ZV92aWRlbyIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsInNwbGl0VXJsIiwiZW5kc1dpdGgiLCJvRnJhbWUiLCJpc1lvdXR1YmUiLCJpc1ZpbWVvIiwibmV3VGFnIiwiaW5wdXRVcGRhdGUiLCJfbW9kdWxlX2dldFNpemVYIiwiX21vZHVsZV9nZXRTaXplWSIsImlzUGVyY2VudCIsImNoYW5nZWQiLCJfdXBkYXRlX3ZpZGVvQ292ZXIiLCJmcmFtZVBhcmVudCIsInByZXZGcmFtZSIsImZpZ2NhcHRpb24iLCJyYXRpb1NlbGVjdGVkIiwicmF0aW9PcHRpb25zIiwic2VsZWN0ZWQiLCJvbmx5SCIsInBhZGRpbmdCb3R0b20iLCJkYXRhU2l6ZSIsImNvbnRleHRBdWRpbyIsInRhcmdldFNlbGVjdCIsImF1ZGlvV2lkdGgiLCJhdWRpb0hlaWdodCIsImF1ZGlvX2RpYWxvZyIsImF1ZGlvSW5wdXRGaWxlIiwiYXVkaW9VcmxGaWxlIiwiYXVkaW9fY29udHJvbGxlciIsInNldENvbnRyb2xsZXIiLCJvbkNsaWNrX2NvbnRyb2xsZXIiLCJhdWRpb0ZpbGVJbnB1dCIsImF1ZGlvQWNjZXB0IiwiYXVkaW9NdWx0aXBsZUZpbGUiLCJhdWRpb1VybElucHV0IiwiX2NyZWF0ZUF1ZGlvVGFnIiwib0F1ZGlvIiwiY3NzVGV4dCIsImF1ZGlvVGFnQXR0cnMiLCJpc0NvbXBvbmVudCIsIm9uQXVkaW9EZWxldGVCZWZvcmUiLCJvbkF1ZGlvVXBsb2FkIiwidXBkYXRlQ292ZXIiLCJzZXR1cFVybCIsImF1ZGlvVXBsb2FkU2l6ZUxpbWl0IiwiYXVkaW9zSW5mbyIsIm9uQXVkaW9VcGxvYWRFcnJvciIsIm9uQXVkaW9VcGxvYWRCZWZvcmUiLCJhdWRpb1VwbG9hZFVybCIsImF1ZGlvVXBsb2FkSGVhZGVyIiwiY2FsbEJhY2tfdXBsb2FkIiwiYXVkaW9VcGxvYWRIYW5kbGVyIiwiY3JlYXRlX2F1ZGlvIiwiZWxlbWVudFBhcmVudCIsInByZXZFbGVtZW50Iiwic2VsZWN0aW9uVGFnIiwib25Db250cm9sbGVyT2ZmIiwicHJldmlld0VsZW1lbnQiLCJmb250U2l6ZUVsZW1lbnQiLCJkZWZhdWx0Rm9udFNpemUiLCJfbWF0aEV4cCIsIm1hdGhfZGlhbG9nIiwib25QYXN0ZU1hdGgiLCJpc0lFIiwiX3JlbmRlck1hdGhFeHAiLCJtYXRoX2NvbnRyb2xsZXIiLCJzZXRDb250cm9sbGVyX01hdGhCdXR0b24iLCJtYXRoQ29udHJvbGxlciIsIm9uQ2xpY2tfbWF0aENvbnRyb2xsZXIiLCJtYXRoRm9udFNpemUiLCJmIiwibWF0aF9idG4iLCJtYW5hZ2VkVGFncyIsIm1ldGhvZCIsImthdGV4IiwiZG9tIiwiY3JlYXRlUmFuZ2UiLCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQiLCJfcmVuZGVyZXIiLCJIVE1MRGVjb2RlciIsImV4cCIsInJlbmRlclRvU3RyaW5nIiwidGhyb3dPbkVycm9yIiwiZGlzcGxheU1vZGUiLCJjb250ZXh0TWF0aCIsIm1hdGhFeHAiLCJrYXRleEVsIiwiSFRNTEVuY29kZXIiLCJjb250YWluZXJFbCIsImVtcHR5IiwiY3JlYXRlVGV4dE5vZGUiLCJ6ZXJvV2lkdGhTcGFjZSIsIm5leHRTaWJsaW5nIiwibWF0aFRhZyIsIm1hdGhCdG4iLCJibG9ja3F1b3RlIiwidGFyZ2V0QnV0dG9uIiwiYWN0aW9uIiwiY3VycmVudEJsb2NrcXVvdGUiLCJkZXRhY2hSYW5nZUZvcm1hdEVsZW1lbnQiLCJhcHBseVJhbmdlRm9ybWF0RWxlbWVudCIsIl9pdGVtTWVudSIsIl9hbGlnbkxpc3QiLCJjdXJyZW50QWxpZ24iLCJkZWZhdWx0RGlyIiwianVzdGlmeSIsImFsaWduX2p1c3RpZnkiLCJhbGlnbl9sZWZ0IiwiYWxpZ25fcmlnaHQiLCJhbGlnbl9jZW50ZXIiLCJsaXN0VWwiLCJhbGlnbkl0ZW1zIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJhbGlnbkNvbnRleHQiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImNoYW5nZUVsZW1lbnQiLCJhbGlnbkxpc3QiLCJleGNoYW5nZURpciIsImRpciIsImxlZnRCdG4iLCJyaWdodEJ0biIsImxwIiwicGFyZW50RWxlbWVudCIsInJwIiwic2VsZWN0ZWRGb3Jtc3RzIiwic2V0U3R5bGUiLCJlZmZlY3ROb2RlIiwidGFyZ2V0VGV4dCIsInRhcmdldFRvb2x0aXAiLCJfZm9udExpc3QiLCJjdXJyZW50Rm9udCIsImZvbnRMaXN0IiwidG9vbHRpcCIsImZvbnRGYW1pbHkiLCJzZWxlY3RGb250IiwiY2hhbmdlVHh0IiwiaGFzRm9jdXMiLCJmb250Q29udGV4dCIsIl9zaXplTGlzdCIsImN1cnJlbnRTaXplIiwic2l6ZUxpc3QiLCJ1bml0IiwiZm9udFNpemVVbml0IiwiX2NvbnZlcnRGb250U2l6ZSIsImZvbnRTaXplQ29udGV4dCIsImN1cnJlbnRIUiIsImhvcml6b250YWxSdWxlUGljayIsImhySXRlbXMiLCJjbGFzcyIsImFwcGVuZEhyIiwiaHJUZW1wIiwib05vZGUiLCJfbGlzdCIsImN1cnJlbnRMaXN0IiwiYnVsbGV0cyIsImxpc3RfYnVsbGV0cyIsIm51bWJlciIsImxpc3RfbnVtYmVyIiwiYnV0dG9uIiwiaWNvbiIsImlzTGlzdCIsImVkaXRMaXN0Iiwic2VsZWN0ZWRDZWxscyIsImRldGFjaCIsInJhbmdlIiwiZ2V0UmFuZ2UiLCJnZXRTZWxlY3RlZEVsZW1lbnRzQW5kQ29tcG9uZW50cyIsImdldFJhbmdlX2FkZExpbmUiLCJzb3J0QnlEZXB0aCIsImZpcnN0U2VsIiwibGFzdFNlbCIsInRvcEVsIiwiYm90dG9tRWwiLCJpc0NvbGxhcHNlZCIsImNvbGxhcHNlZCIsIm9yaWdpblJhbmdlIiwic3RhcnRDb250YWluZXIiLCJzbyIsImVuZENvbnRhaW5lciIsIm9ubHlaZXJvV2lkdGhTcGFjZSIsInN0YXJ0T2Zmc2V0IiwiZW5kT2Zmc2V0IiwiZW8iLCJhZnRlclJhbmdlIiwiaXNSZW1vdmUiLCJnZXRSYW5nZUZvcm1hdEVsZW1lbnQiLCJ0b3BFbFBhcmVudCIsImJvdHRvbUVsUGFyZW50IiwibWVyZ2VUb3AiLCJtZXJnZUJvdHRvbSIsImZpcnN0TGlzdCIsImxhc3RMaXN0IiwidG9wTnVtYmVyIiwiYm90dG9tTnVtYmVyIiwicGFzc0NvbXBvbmVudCIsIm5ld0NlbGwiLCJmVGFnIiwiaXNDZWxsIiwibmV4dCIsIm9yaWdpblBhcmVudCIsIm5leHRQYXJlbnQiLCJwYXJlbnRUYWciLCJzaWJsaW5nVGFnIiwicmFuZ2VUYWciLCJfaXNJZ25vcmVOb2RlQ2hhbmdlIiwiY29weUZvcm1hdEF0dHJpYnV0ZXMiLCJpc0hSIiwib3V0ZXJIVE1MIiwiZkNoaWxkcmVuIiwiZ2V0RWxlbWVudERlcHRoIiwiaiIsImN1cnJlbnRGb3JtYXQiLCJyYW5nZUFyciIsInRlbXBMaXN0IiwiX2RldGFjaE5lc3RlZCIsImNlbGxzIiwiZmlyc3QiLCJsYXN0Iiwib3JpZ2luTGlzdCIsInNpYmxpbmciLCJjTGVuIiwibmV3TGlzdCIsImdldFBvc2l0aW9uSW5kZXgiLCJtZXJnZVNhbWVUYWdzIiwiZWRnZSIsImdldEVkZ2VDaGlsZE5vZGVzIiwiY2MiLCJlZGl0SW5zaWRlTGlzdCIsImNlbGxzTGVuIiwiZWwiLCJsYXN0Q2VsbCIsImlubmVyTGlzdCIsInByZXYiLCJub2RlUGF0aCIsInNsIiwiX2luc2llZExpc3QiLCJnZXROb2RlRnJvbVBhdGgiLCJpbnNlcnRQcmV2IiwiZ2V0Tm9kZVBhdGgiLCJmaXJzdENoaWxkIiwic2xQYXRoIiwibGFzdEVsZW1lbnRDaGlsZCIsIm1lcmdlTmVzdGVkVGFncyIsImNvbnRleHRUYWJsZSIsIl90ZEVsZW1lbnQiLCJfdHJFbGVtZW50IiwiX3RyRWxlbWVudHMiLCJfdGFibGVYWSIsIl9tYXhXaWR0aCIsIl9maXhlZENvbHVtbiIsIl9ydGwiLCJjZWxsQ29udHJvbGxlclRvcCIsInRhYmxlQ2VsbENvbnRyb2xsZXJQb3NpdGlvbiIsInJlc2l6ZVRleHQiLCJoZWFkZXJCdXR0b24iLCJtZXJnZUJ1dHRvbiIsInNwbGl0QnV0dG9uIiwic3BsaXRNZW51IiwibWF4VGV4dCIsIm1pblRleHQiLCJfcGh5c2ljYWxfY2VsbENudCIsIl9sb2dpY2FsX2NlbGxDbnQiLCJfcm93Q250IiwiX3Jvd0luZGV4IiwiX3BoeXNpY2FsX2NlbGxJbmRleCIsIl9sb2dpY2FsX2NlbGxJbmRleCIsIl9jdXJyZW50X2NvbFNwYW4iLCJfY3VycmVudF9yb3dTcGFuIiwiZXhwYW5zaW9uIiwicmVkdWN0aW9uIiwidGFibGVQaWNrZXIiLCJ0YWJsZUhpZ2hsaWdodCIsInRhYmxlVW5IaWdobGlnaHQiLCJ0YWJsZURpc3BsYXkiLCJ0YWJsZUNvbnRyb2xsZXIiLCJzZXRDb250cm9sbGVyX3RhYmxlIiwicmVzaXplQnV0dG9uIiwiY29sdW1uRml4ZWRCdXR0b24iLCJyZXNpemVEaXYiLCJzZXRDb250cm9sbGVyX3RhYmxlRWRpdG9yIiwiaW5zZXJ0Um93QWJvdmVCdXR0b24iLCJpbnNlcnRSb3dCZWxvd0J1dHRvbiIsIm9uTW91c2VNb3ZlX3RhYmxlUGlja2VyIiwiYXBwZW5kVGFibGUiLCJvbkNsaWNrX3RhYmxlQ29udHJvbGxlciIsInRhYmxlUmVzaXplIiwiZml4ZWRfY29sdW1uX3dpZHRoIiwidGFibGVfaGVhZGVyIiwiaW5zZXJ0X3Jvd19hYm92ZSIsImluc2VydF9yb3dfYmVsb3ciLCJkZWxldGVfcm93IiwibWVyZ2VfY2VsbCIsImluc2VydF9jb2x1bW5fbGVmdCIsImluc2VydF9jb2x1bW5fcmlnaHQiLCJkZWxldGVfY29sdW1uIiwic3BsaXRfY2VsbCIsIm9UYWJsZSIsImNyZWF0ZUNlbGxzIiwidGFibGVIVE1MIiwiZmlyc3RUZCIsInJlc2V0X3RhYmxlX3BpY2tlciIsImNudCIsInJldHVybkVsZW1lbnQiLCJjZWxsIiwiY2VsbHNIVE1MIiwiY2VpbCIsIm9mZnNldFgiLCJvZmZzZXRZIiwiaGlnaGxpZ2h0IiwidW5IaWdobGlnaHQiLCJ0YWJsZVBsdWdpbiIsIl9yZW1vdmVFdmVudHMiLCJfc2VsZWN0ZWRUYWJsZSIsIl90b2dnbGVFZGl0b3IiLCJfc2hpZnQiLCJfc2VsZWN0ZWRDZWxscyIsIl9yZWYiLCJfZml4ZWRDZWxsIiwiX3NlbGVjdGVkQ2VsbCIsIl9maXhlZENlbGxOYW1lIiwiY2FsbF9jb250cm9sbGVyX3RhYmxlRWRpdCIsInRkRWxlbWVudCIsInRhYmxlRWxlbWVudCIsInRhYmxlTGF5b3V0Iiwic2V0VGFibGVTdHlsZSIsInNldFBvc2l0aW9uQ29udHJvbGxlclRvcCIsInNldFBvc2l0aW9uQ29udHJvbGxlckRpdiIsInJlc2V0Iiwic2V0Q2VsbEluZm8iLCJyb3dzIiwiY2VsbEluZGV4IiwiY2VsbENudCIsImNvbFNwYW4iLCJyb3dJbmRleCIsInJvd1NwYW4iLCJyb3dTcGFuQXJyIiwic3BhbkluZGV4IiwiY3MiLCJycyIsImxvZ2NhbEluZGV4IiwiYXJyIiwicm93IiwiY29uY2F0Iiwic29ydCIsImIiLCJlZGl0VGFibGUiLCJpc1JvdyIsInRhYmxlQXR0ciIsInBvc2l0aW9uQ2VsbCIsImVkaXRSb3ciLCJyZW1vdmVDZWxscyIsImZpcnN0Um93IiwicmlnaHRDZWxsIiwiZWRpdENlbGwiLCJwb3NpdGlvblJlc2V0RWxlbWVudCIsInVwIiwib3JpZ2luUm93SW5kZXgiLCJzaWduIiwic3BhbkNlbGxzIiwic3BhbkNlbGwiLCJzaGlmdCIsImluc2VydFJvdyIsInBhc3NDZWxsIiwicmVtb3ZlQ2VsbCIsInJlbW92ZVNwYW5BcnIiLCJpbnNlcnRJbmRleCIsImFwcGx5U3BhbiIsImNlbGxDb2xTcGFuIiwicmVtb3ZlSW5kZXgiLCJnZXRPdmVybGFwUmFuZ2VBdEluZGV4IiwicmVtb3ZlRmlyc3QiLCJyZW1vdmVFbmQiLCJyTGVuIiwiZ2V0QXJyYXlJbmRleCIsInJvd1NwYW5DZWxsIiwiX2Nsb3NlU3BsaXRNZW51Iiwib3BlblNwbGl0TWVudSIsInJlbW92ZURvY0V2ZW50IiwiYWRkRG9jRXZlbnQiLCJ2ZXJ0aWNhbCIsImN1cnJlbnRDZWxsIiwiY3VycmVudFJvdyIsImN1cnJlbnRDb2xTcGFuIiwiZmxvb3IiLCJjdXJyZW50Um93U3BhbiIsIm5ld1Jvd1NwYW4iLCJuZXh0Um93SW5kZXgiLCJuZXh0Um93IiwibmV4dENlbGxzIiwibmV3Um93IiwicGh5c2ljYWxJbmRleCIsInJlZiIsIm1lcmdlQ2VsbCIsImVtcHR5Um93Rmlyc3QiLCJlbXB0eVJvd0xhc3QiLCJjZSIsInJlIiwibWVyZ2VIVE1MIiwiY2giLCJyb3dJbmRleEZpcnN0Iiwicm93SW5kZXhMYXN0IiwicmVtb3ZlUm93cyIsInNldEFjdGl2ZUJ1dHRvbiIsInRvZ2dsZUhlYWRlciIsInN0eWxlcyIsInNwYW4iLCJzaXplSWNvbiIsImZpeGVkQ2VsbCIsInNlbGVjdGVkQ2VsbCIsIl9iaW5kT25TZWxlY3QiLCJfYmluZE9mZlNlbGVjdCIsIl9iaW5kT2ZmU2hpZnQiLCJlbmFibGVkIiwiX29mZkNlbGxNdWx0aVNlbGVjdCIsIl9pbml0QmluZCIsIl93ZCIsIl9vbkNlbGxNdWx0aVNlbGVjdCIsIl9hbnRpQmx1ciIsIl9zZXRNdWx0aUNlbGxzIiwic3RhcnRDZWxsIiwiZW5kQ2VsbCIsImZpbmRTZWxlY3RlZENlbGwiLCJfaSIsIm5ld0NzIiwibmV3Q2UiLCJuZXdScyIsIm5ld1JlIiwib25UYWJsZUNlbGxNdWx0aVNlbGVjdCIsImZvcm1hdEJsb2NrIiwiX2Zvcm1hdExpc3QiLCJwaWNrVXAiLCJsYW5nX3Rvb2xiYXIiLCJkZWZhdWx0Rm9ybWF0cyIsImZvcm1hdExpc3QiLCJmb3JtYXRUaXRsZSIsImZvcm1hdENvbnRleHQiLCJyYW5nZUVsZW1lbnQiLCJmaXJzdFBhdGgiLCJsYXN0UGF0aCIsInJsaXN0IiwiZGV0YWNoTGlzdCIsIm1vZGlmaWVkRm9ybXN0cyIsImZyZWVFbGVtZW50IiwiYmVmb3JlIiwiaW5uZXIiLCJpc0NvbXAiLCJpc1NhbWVBdHRyaWJ1dGVzIiwibmV3Rm9ybWF0IiwibGluZUhlaWdodHMiLCJsaW5lSGVpZ2h0Q29udGV4dCIsIl9jbGFzc0xpc3QiLCJtZW51TGFuZyIsImRlZmF1bHRMaXN0IiwiX2NsYXNzIiwicGFyYWdyYXBoU3R5bGVzIiwiZGVmYXVsdFN0eWxlIiwicGFyYWdyYXBoTGlzdCIsIl9zdHlsZUxpc3QiLCJzdHlsZUxpc3QiLCJ0ZXh0U3R5bGVzIiwic3R5bGVCdXR0b25MaXN0Iiwic2VsZWN0aW9uTm9kZSIsImJ0biIsImNoZWNrU3R5bGVzIiwiY2xhc3NlcyIsImNsYXNzTGlzdCIsInJlbW92ZU5vZGVzIiwiaW1hZ2VHYWxsZXJ5RGF0YSIsImltYWdlR2FsbGVyeUhlYWRlciIsImRyYXdJdGVtcyIsInNldEltYWdlIiwic3JjTmFtZSIsInRodW1ibmFpbCIsImZpbGVOYW1lIiwiY29kZV92aWV3IiwibGluZV9oZWlnaHQiLCJwYXJhZ3JhcGhfc3R5bGUiLCJ0ZXh0X3N0eWxlIiwiYXJyb3dfZG93biIsImZvbnRfY29sb3IiLCJoaWdobGlnaHRfY29sb3IiLCJob3Jpem9udGFsX3J1bGUiLCJzaG93X2Jsb2NrcyIsIm1vZGlmeSIsImF1dG9fc2l6ZSIsInJvdGF0ZV9sZWZ0Iiwicm90YXRlX3JpZ2h0IiwibWlycm9yX2hvcml6b250YWwiLCJtaXJyb3JfdmVydGljYWwiLCJsaW5lX2JyZWFrIiwiYWxlcnRfb3V0bGluZSIsIm1vcmVfdGV4dCIsIm1vcmVfcGFyYWdyYXBoIiwibW9yZV9wbHVzIiwibW9yZV9ob3Jpem9udGFsIiwibW9yZV92ZXJ0aWNhbCIsImF0dGFjaG1lbnQiLCJtYWdpY19zdGljayIsImVtcHR5X2ZpbGUiLCJpc0lFX0VkZ2UiLCJpc09TWF9JT1MiLCJpc0Nocm9taXVtIiwiaXNNb2JpbGUiLCJpc1Jlc2l6ZU9ic2VydmVyU3VwcG9ydGVkIiwiX3Byb3BlcnRpZXNJbml0IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYXBwVmVyc2lvbiIsInBsYXRmb3JtIiwiY2hyb21lIiwiUmVzaXplT2JzZXJ2ZXIiLCJtYXhUb3VjaFBvaW50cyIsIm1zTWF4VG91Y2hQb2ludHMiLCJfYWxsb3dlZEVtcHR5Tm9kZUxpc3QiLCJfSFRNTENvbnZlcnRvciIsImNvbnRlbnRzIiwiJyIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsInplcm9XaWR0aFJlZ0V4cCIsIm9ubHlaZXJvV2lkdGhSZWdFeHAiLCJmb250VmFsdWVNYXAiLCJBY3RpdmVYT2JqZWN0IiwiWE1MSHR0cFJlcXVlc3QiLCJlMSIsImdldFZhbHVlcyIsIm9iaiIsImNhbWVsVG9LZWJhYkNhc2UiLCJwYXJhbSIsImxldHRlciIsImtlYmFiVG9DYW1lbENhc2UiLCJlbGVtZW50TmFtZSIsIl9oYXNPd24iLCJnZXRJbmNsdWRlUGF0aCIsIm5hbWVBcnJheSIsImV4dGVuc2lvbiIsInBhdGhMaXN0IiwicmVnRXhwIiwiZXh0UmVnRXhwIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJlZGl0b3JUYWciLCJnZXRQYWdlU3R5bGUiLCJkb2MiLCJzaGVldHMiLCJzdHlsZVNoZWV0cyIsInJ1bGVzIiwiY3NzUnVsZXMiLCJnZXRJZnJhbWVEb2N1bWVudCIsImlmcmFtZSIsIndEb2N1bWVudCIsImNvbnRlbnRXaW5kb3ciLCJjb250ZW50RG9jdW1lbnQiLCJnZXRBdHRyaWJ1dGVzVG9TdHJpbmciLCJleGNlcHRBdHRycyIsImF0dHJpYnV0ZXMiLCJhdHRyU3RyaW5nIiwiZ2V0Qnl0ZUxlbmd0aCIsImVuY29kZXIiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjciIsImNsIiwidW5lc2NhcGUiLCJUZXh0RW5jb2RlciIsImVuY29kZSIsImlzTm9uRWRpdGFibGUiLCJpc1RleHRTdHlsZUVsZW1lbnQiLCJpc0lucHV0RWxlbWVudCIsImlzQ2xvc3VyZVJhbmdlRm9ybWF0RWxlbWVudCIsImlzRnJlZUZvcm1hdEVsZW1lbnQiLCJpc0Nsb3N1cmVGcmVlRm9ybWF0RWxlbWVudCIsImlzVW5lZGl0YWJsZUNvbXBvbmVudCIsInZhbGlkYXRpb24iLCJnZXRGcmVlRm9ybWF0RWxlbWVudCIsImdldENsb3N1cmVGcmVlRm9ybWF0RWxlbWVudCIsImNvcHlUYWdBdHRyaWJ1dGVzIiwib3JpZ2luRWwiLCJjb3B5RWwiLCJibGFja2xpc3QiLCJjb3B5U3R5bGVzIiwiZ2V0QXJyYXlJdGVtIiwiYXJyYXkiLCJtdWx0aSIsImFycmF5SW5jbHVkZXMiLCJpZHgiLCJuZXh0SWR4IiwicHJldklkeCIsIl9uZXdPZmZzZXRzIiwiZmluZHMiLCJ0ZW1wVGV4dCIsInByZXZpb3VzIiwicmV2ZXJzZSIsIm9mZnNldHMiLCJub2RlcyIsInN0eWxlX2EiLCJzdHlsZV9iIiwiY29tcFN0eWxlIiwiY2xhc3NfYSIsImNsYXNzX2IiLCJyZWciLCJjb21wQ2xhc3MiLCJpc0VtcHR5TGluZSIsImlzU3BhbldpdGhvdXRBdHRyIiwiaXNUYWJsZSIsImlzQnJlYWsiLCJpc01lZGlhIiwibWF4RGVjIiwidG9GaXhlZCIsInJlY3Vyc2lvbkZ1bmMiLCJnZXRMaXN0Q2hpbGROb2RlcyIsImRlcHRoIiwiY29tcGFyZUVsZW1lbnRzIiwiYU5vZGUiLCJiTm9kZSIsImFuY2VzdG9yIiwiYUluZGV4IiwiYkluZGV4IiwicXVlcnkiLCJjaGVjayIsImF0dHIiLCJnZXRQcmV2aW91c0RlZXBlc3ROb2RlIiwiY2VpbGluZyIsInByZXZpb3VzTm9kZSIsImxhc3RDaGlsZCIsImdldE5leHREZWVwZXN0Tm9kZSIsIm5leHROb2RlIiwiY2hpbGRMaXN0IiwiZ2V0T2Zmc2V0Iiwid3lzaXd5Z0ZyYW1lIiwib2Zmc2V0RWxlbWVudCIsIm9mZnNldFBhcmVudCIsInNjcm9sbFRvcCIsImFTdGFydCIsImFFbmQiLCJiU3RhcnQiLCJiRW5kIiwib3ZlcmxhcCIsInR4dCIsIm5ld0VsZW1lbnQiLCJzdHlsZU5hbWUiLCJpc0ltcG9ydGFudERpc2FibGVkIiwiaGFzQXR0cmlidXRlIiwic2V0RGlzYWJsZWRCdXR0b25zIiwiYnV0dG9uTGlzdCIsImltcG9ydGFudCIsInN0b3BQYXJlbnQiLCJwYXJlbnQiLCJkZXRhY2hOZXN0ZWRMaXN0IiwiYmFzZU5vZGUiLCJhbGwiLCJyTm9kZSIsIl9kZWxldGVOZXN0ZWRMaXN0IiwiY05vZGVzIiwickNoaWxkcmVuIiwiYmFzZVBhcmVudCIsImxpU2libGluZyIsImxpUGFyZW50IiwiY2hpbGQiLCJvZmZzZXQiLCJicCIsInN1ZmZpeEluZGV4Iiwic3BsaXRUZXh0IiwiYWZ0ZXIiLCJkZXB0aEVsIiwicEVsZW1lbnQiLCJub2RlUGF0aEFycmF5Iiwib25seVRleHQiLCJpbnN0Iiwibm9kZVBhdGhMZW4iLCJhcHBseSIsIk51bWJlciIsInZhbHVlT2YiLCJkZXB0aEluZGV4IiwiY0RlcHRoIiwic3BsaWNlRGVwdGgiLCJjaGlsZHMiLCJjaGlsZExlbmd0aCIsIm5MZW4iLCJhZGRPZmZzZXQiLCJ0ZXh0T2Zmc2V0IiwidGVtcEwiLCJub3RSZW1vdmVOb2RlIiwiZm9yY2VEZWxldGUiLCJfbm90VGV4dE5vZGUiLCJodG1sQ29tcHJlc3MiLCJkZXMiLCJzdHJpbmciLCJUeXBlRXJyb3IiLCJfaXNFeGNsdWRlU2VsZWN0aW9uRWxlbWVudCIsIl9pc01haW50YWluZWROb2RlIiwiX2lzU2l6ZU5vZGUiLCJfZGlzYWxsb3dlZFRhZ3MiLCJjcmVhdGVUYWdzV2hpdGVsaXN0IiwiY3JlYXRlVGFnc0JsYWNrbGlzdCIsIl9jb25zaXN0ZW5jeUNoZWNrT2ZIVE1MIiwiZG9jdW1lbnRGcmFnbWVudCIsImh0bWxDaGVja1doaXRlbGlzdFJlZ0V4cCIsImh0bWxDaGVja0JsYWNrbGlzdFJlZ0V4cCIsImNsYXNzTmFtZUZpbHRlciIsInN0cmljdEhUTUxWYWxpZGF0aW9uIiwicmVtb3ZlVGFncyIsImVtcHR5VGFncyIsIndyb25nTGlzdCIsIndpdGhvdXRGb3JtYXRDZWxscyIsIndyb25nVGFncyIsIm5ydGFnIiwiZmVsIiwiY2hlY2tUYWdzIiwiY2VsbENoaWxkcmVuIiwidHAiLCJfc2V0RGVmYXVsdE9wdGlvblN0eWxlIiwib3B0aW9uU3R5bGUiLCJtaW5IZWlnaHQiLCJlZGl0b3IiLCJzdHlsZUFyciIsIl9zZXRJZnJhbWVEb2N1bWVudCIsImhlYWQiLCJfc2V0SWZyYW1lQ3NzVGFncyIsIl9lZGl0YWJsZUNsYXNzIiwibGlua05hbWVzIiwiaWZyYW1lQ1NTRmlsZU5hbWUiLCJ3UmVnRXhwIiwidGFnU3RyaW5nIiwiQ1NTRmlsZU5hbWUiLCJzdHlsZVRhZyIsIl9pbml0T3B0aW9ucyIsInRvcF9kaXYiLCJ0b29sX2JhciIsIl9jcmVhdGVUb29sQmFyIiwidG9vbGJhclNoYWRvdyIsInBsdWdpbkNhbGxCdXR0b25zIiwiX2NoZWNrS2F0ZXhNYXRoIiwiYXJyb3ciLCJzdGlja3lfZHVtbXkiLCJlZGl0b3JfZGl2IiwiaW5pdEVsZW1lbnRzIiwiX2luaXRFbGVtZW50cyIsImJvdHRvbUJhciIsInd5c2l3eWdfZGl2IiwicGxhY2Vob2xkZXJfc3BhbiIsInRleHRhcmVhIiwicmVzaXppbmdfYmFyIiwicmVzaXppbmdCYXIiLCJuYXZpZ2F0aW9uIiwiY2hhcl93cmFwcGVyIiwiY2hhcldyYXBwZXIiLCJjaGFyX2NvdW50ZXIiLCJjaGFyQ291bnRlciIsImxvYWRpbmdfYm94IiwibGluZV9icmVha2VyIiwibGluZV9icmVha2VyX3QiLCJsaW5lX2JyZWFrZXJfYiIsInJlc2l6ZV9iYWNrIiwiZm9jdXNUZW1wIiwidGFiSW5kZXgiLCJ0b29sYmFyQ29udGFpbmVyIiwicmVzaXppbmdCYXJDb250YWluZXIiLCJfY2hlY2tDb2RlTWlycm9yIiwiY29uc3RydWN0ZWQiLCJfdG9wIiwiX3JlbGF0aXZlIiwiX3Rvb2xCYXIiLCJfdG9vbGJhclNoYWRvdyIsIl9tZW51VHJheSIsIl9lZGl0b3JBcmVhIiwiX3d5c2l3eWdBcmVhIiwiX2NvZGVBcmVhIiwiX3BsYWNlaG9sZGVyIiwiX3Jlc2l6aW5nQmFyIiwiX25hdmlnYXRpb24iLCJfY2hhcldyYXBwZXIiLCJfY2hhckNvdW50ZXIiLCJfbGluZUJyZWFrZXIiLCJfbGluZUJyZWFrZXJfdCIsIl9saW5lQnJlYWtlcl9iIiwiX3Jlc2l6ZUJhY2siLCJfc3RpY2t5RHVtbXkiLCJfYXJyb3ciLCJfZm9jdXNUZW1wIiwiX3Jlc3BvbnNpdmVCdXR0b25zIiwicmVzcG9uc2l2ZUJ1dHRvbnMiLCJjb2RlTWlycm9yIiwiY21PcHRpb25zIiwiaHRtbE1vZGUiLCJsaW5lTnVtYmVycyIsImxpbmVXcmFwcGluZyIsInJlZHVjZSIsInZpZXdwb3J0TWFyZ2luIiwiSW5maW5pdHkiLCJjbSIsImZyb21UZXh0QXJlYSIsIndyYXBwZXIiLCJjb2RlTWlycm9yRWRpdG9yIiwia2F0ZXhPcHRpb25zIiwiX3NldE9wdGlvbnMiLCJtZXJnZU9wdGlvbnMiLCJvcmlnaW5PcHRpb25zIiwib3JpZ2luRWxlbWVudCIsImVkaXRvckFyZWEiLCJpc05ld1Rvb2xiYXJDb250YWluZXIiLCJpc05ld1Rvb2xiYXIiLCJ0b3BBcmVhIiwiY2FsbEJ1dHRvbnMiLCJ0b3BEaXYiLCJ0b29sQmFyIiwidG9vbEJhckFycm93IiwiX2VkaXRvclN0eWxlcyIsInRvb2xiYXJXaWR0aCIsInd5c2l3eWdEaXYiLCJpZnJhbWVBdHRyaWJ1dGVzIiwib3ZlcmZsb3ciLCJjaGFyQ291bnRlckxhYmVsIiwiY2hhckxhYmVsIiwibWF4Q2hhckNvdW50IiwiY2hhcl9tYXgiLCJpbm5lclRleHQiLCJfcGx1Z2lucyIsInBsdWdpbnNWYWx1ZXMiLCJzdHJpY3RNb2RlIiwiX2RlZmF1bHRMYW5nIiwiYWxsb3dlZENsYXNzTmFtZXMiLCJoaXN0b3J5U3RhY2tEZWxheVRpbWUiLCJmcmFtZUF0dHJidXRlcyIsImRlZmF1bHRUYWciLCJ0ZXh0VGFncyIsInN1YiIsInN1cCIsIl9kZWZhdWx0IiwiX25ldyIsIl90ZXh0VGFnc01hcCIsIl9kZWZhdWx0Q29tbWFuZCIsIl9fYWxsb3dlZFNjcmlwdFRhZyIsInRhZ3NCbGFja2xpc3QiLCJfZGVmYXVsdFRhZ3NXaGl0ZWxpc3QiLCJfZWRpdG9yVGFnc1doaXRlbGlzdCIsImFkZFRhZ3NXaGl0ZWxpc3QiLCJfc2V0V2hpdGVsaXN0IiwicGFzdGVUYWdzQmxhY2tsaXN0IiwicGFzdGVUYWdzV2hpdGVsaXN0IiwiYXR0cmlidXRlc1doaXRlbGlzdCIsImF0dHJpYnV0ZXNCbGFja2xpc3QiLCJsaW5lQXR0clJlc2V0IiwiX3ByaW50Q2xhc3MiLCJzdGlja3lUb29sYmFyIiwidW5kZWZpbmVkIiwiaGlkZVRvb2xiYXIiLCJmdWxsU2NyZWVuT2Zmc2V0IiwiZnVsbFBhZ2UiLCJwcmV2aWV3VGVtcGxhdGUiLCJwcmludFRlbXBsYXRlIiwic2hvd1BhdGhMYWJlbCIsInJlc2l6ZUVuYWJsZSIsImNoYXJDb3VudGVyVHlwZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0IiwidGFiRGlzYWJsZSIsInNob3J0Y3V0c0Rpc2FibGUiLCJzaG9ydGN1dHNIaW50IiwiY2FsbEJhY2tTYXZlIiwiX2ljb25zIiwiX19saXN0Q29tbW9uU3R5bGUiLCJ3aGl0ZWxpc3QiLCJfZGVmYXVsdEJ1dHRvbnMiLCJhZGRTaGlmdCIsImluZGVudEtleSIsImluZGVudEljb24iLCJfY3JlYXRlTW9kdWxlR3JvdXAiLCJvRGl2Iiwib1VsIiwiX2NyZWF0ZUJ1dHRvbiIsImJ1dHRvbkNsYXNzIiwiZGF0YUNvbW1hbmQiLCJkYXRhRGlzcGxheSIsIl9kaXNhYmxlZCIsIm9MaSIsIm9CdXR0b24iLCJsYWJlbCIsInNlcGFyYXRvcl92ZXJ0aWNhbCIsIl9idXR0b25UcmF5Iiwic3RyaW5naWZ5IiwiZGVmYXVsdEJ1dHRvbkxpc3QiLCJtb2R1bGVFbGVtZW50IiwiYnV0dG9uRWxlbWVudCIsIm1vcmVMYXllciIsImJ1dHRvbkdyb3VwTG9vcCIsIm1vcmUiLCJtb3JlQ29udGFpbmVyIiwibW9yZUNvbW1hbmQiLCJidXR0b25Hcm91cCIsIm1vcmVCdXR0b24iLCJkaXYiLCJ1bCIsIm1hdGNoZWQiLCJjdXN0b20iLCJsaSIsInN2IiwiZW50ZXJEaXYiLCJ1bnNoaWZ0IiwidG9vbF9jb3ZlciIsIl9Db250ZXh0IiwiY29ucyIsImxvYWRpbmciLCJsaW5lQnJlYWtlciIsImxpbmVCcmVha2VyX3QiLCJsaW5lQnJlYWtlcl9iIiwicmVzaXplQmFja2dyb3VuZCIsInRvb2wiLCJub3RpY2UiLCJub3RpY2VfZGl2Iiwibm90aWNlX3NwYW4iLCJub3RpY2VfYnV0dG9uIiwib25DbGlja19jYW5jZWwiLCJpbml0X29wdGlvbnMiLCJpZE9yRWxlbWVudCIsIl9pbml0X29wdGlvbnMiLCJ2YWwiLCJnZXRFbGVtZW50QnlJZCIsIl9Db25zdHJ1Y3RvciIsIm93bmVyRG9jdW1lbnQiLCJkZWZhdWx0VmlldyIsIl91dGlsIiwiX3BhcnNlciIsIl9wcmV2UnRsIiwiX2VkaXRvckhlaWdodCIsIl9lZGl0b3JIZWlnaHRQYWRkaW5nIiwiX2xpc3RDYW1lbCIsIl9saXN0S2ViYWIiLCJfX2ZvY3VzVGVtcCIsIl93dyIsIl9zaGFkb3dSb290IiwiX3NoYWRvd1Jvb3RDb250cm9sbGVyRXZlbnRUYXJnZXQiLCJfbm90aWNlIiwiaW5pdFBsdWdpbnMiLCJfdGFyZ2V0UGx1Z2lucyIsInN1Ym1lbnUiLCJfc3VibWVudU5hbWUiLCJfYmluZGVkU3VibWVudU9mZiIsIl9iaW5kZWRDb250YWluZXJPZmYiLCJzdWJtZW51QWN0aXZlQnV0dG9uIiwiY29udGFpbmVyQWN0aXZlQnV0dG9uIiwiY3VycmVudENvbnRyb2xsZXJUYXJnZXQiLCJjdXJyZW50RmlsZUNvbXBvbmVudEluZm8iLCJjb2RlVmlld0Rpc2FibGVkQnV0dG9ucyIsInJlc2l6aW5nRGlzYWJsZWRCdXR0b25zIiwiX21vcmVMYXllckFjdGl2ZUJ1dHRvbiIsIl9odG1sQ2hlY2tXaGl0ZWxpc3RSZWdFeHAiLCJfaHRtbENoZWNrQmxhY2tsaXN0UmVnRXhwIiwiX2Rpc2FsbG93ZWRUZXh0VGFnc1JlZ0V4cCIsImVkaXRvclRhZ3NXaGl0ZWxpc3RSZWdFeHAiLCJlZGl0b3JUYWdzQmxhY2tsaXN0UmVnRXhwIiwicGFzdGVUYWdzV2hpdGVsaXN0UmVnRXhwIiwicGFzdGVUYWdzQmxhY2tsaXN0UmVnRXhwIiwiaXNEaXNhYmxlZCIsImlzUmVhZE9ubHkiLCJfYXR0cmlidXRlc1doaXRlbGlzdFJlZ0V4cCIsIl9hdHRyaWJ1dGVzV2hpdGVsaXN0UmVnRXhwX2FsbF9kYXRhIiwiX2F0dHJpYnV0ZXNCbGFja2xpc3RSZWdFeHAiLCJfYXR0cmlidXRlc1RhZ3NXaGl0ZWxpc3QiLCJfYXR0cmlidXRlc1RhZ3NCbGFja2xpc3QiLCJfYmluZENvbnRyb2xsZXJzT2ZmIiwiX2lzSW5saW5lIiwiX2lzQmFsbG9vbiIsIl9pc0JhbGxvb25BbHdheXMiLCJfaW5saW5lVG9vbGJhckF0dHIiLCJpc1Nob3ciLCJfbm90SGlkZVRvb2xiYXIiLCJfc3RpY2t5IiwiX2xpbmVCcmVha2VyQnV0dG9uIiwiX2NvbXBvbmVudHNJbmZvSW5pdCIsIl9jb21wb25lbnRzSW5mb1Jlc2V0IiwiYWN0aXZlUGx1Z2lucyIsIm1hbmFnZWRUYWdzSW5mbyIsIl9jaGFyVHlwZUhUTUwiLCJfZmlsZUluZm9QbHVnaW5zQ2hlY2siLCJfZmlsZUluZm9QbHVnaW5zUmVzZXQiLCJfZmlsZU1hbmFnZXIiLCJxdWVyeVN0cmluZyIsInBsdWdpblJlZ0V4cCIsInBsdWdpbk1hcCIsImNvbW1hbmRNYXAiLCJfY29tbWFuZE1hcFN0eWxlcyIsIlNUUk9ORyIsIlUiLCJFTSIsIkRFTCIsIl9zdHlsZUNvbW1hbmRNYXAiLCJfY2xlYW5TdHlsZVJlZ0V4cCIsIl92YXJpYWJsZSIsImlzQ2hhbmdlZCIsImlzQ29kZVZpZXciLCJpc0Z1bGxTY3JlZW4iLCJpbm5lckhlaWdodF9mdWxsU2NyZWVuIiwicmVzaXplQ2xpZW50WSIsInRhYlNpemUiLCJjb2RlSW5kZW50IiwibWluUmVzaXppbmdTaXplIiwiY3VycmVudE5vZGVzIiwiY3VycmVudE5vZGVzTWFwIiwiX3JhbmdlIiwiX3NlbGVjdGlvbk5vZGUiLCJfb3JpZ2luQ3NzVGV4dCIsIl9ib2R5T3ZlcmZsb3ciLCJfZWRpdG9yQXJlYU9yaWdpbkNzc1RleHQiLCJfd3lzaXd5Z09yaWdpbkNzc1RleHQiLCJfY29kZU9yaWdpbkNzc1RleHQiLCJfZnVsbFNjcmVlbkF0dHJzIiwic3RpY2t5IiwiYmFsbG9vbiIsImlubGluZSIsIl9saW5lQnJlYWtDb21wIiwiX2xpbmVCcmVha0RpciIsIl9mb3JtYXRBdHRyc1RlbXAiLCJfc2F2ZUJ1dHRvblN0YXRlcyIsImFsbENvbW1hbmRCdXR0b25zIiwiY3VycmVudEJ1dHRvbnMiLCJfcmVjb3ZlckJ1dHRvblN0YXRlcyIsIm9sZEJ1dHRvbiIsImNhbGxCYWNrRnVuY3Rpb24iLCJfdGFyZ2V0IiwibW9kdWxlQXJyYXkiLCJtb2R1bGVOYW1lIiwiZ2V0R2xvYmFsU2Nyb2xsT2Zmc2V0Iiwic2Nyb2xsTGVmdCIsInN1Ym1lbnVPbiIsInN1Ym1lbnVOYW1lIiwiX3NldE1lbnVQb3NpdGlvbiIsIm1vcmVMYXllck9mZiIsImNvbnRhaW5lck9uIiwiY29udGFpbmVyTmFtZSIsIl9jb250YWluZXJOYW1lIiwiY29udGFpbmVyT2ZmIiwidG9vbGJhclciLCJ0b29sYmFyT2Zmc2V0IiwiZXZlbnQiLCJfZ2V0RWRpdG9yT2Zmc2V0cyIsIm1lbnVXIiwiZWxlbWVudFciLCJydGxXIiwicnRsTCIsIm92ZXJMZWZ0Iiwib2Zmc2V0RWwiLCJidCIsInRvb2xiYXJUb3AiLCJtZW51SGVpZ2h0IiwibWVudUhlaWdodF9ib3R0b20iLCJtZW51VG9wIiwiaW5zVG9wIiwibWVudUhlaWdodF90b3AiLCJhcmciLCJhcmd1bWVudHMiLCJnZXRGaWxlQ29tcG9uZW50Iiwic2hvd0NvbnRyb2xsZXIiLCJyZWZlckVsIiwidG9wTWFyZ2luIiwiY29udHJvbGxlclciLCJyZWZlckVsVyIsImFsbG93Iiwib3ZlclNpemUiLCJleGVjQ29tbWFuZCIsInNob3dEZWZhdWx0VUkiLCJuYXRpdmVGb2N1cyIsIl9fZm9jdXMiLCJfZWRpdG9yUmFuZ2UiLCJjdXJyZW50Tm9kZSIsImNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIiwiYnIiLCJfYXBwbHlUYWdFZmZlY3RzIiwiX3RvZ2dsZVRvb2xiYXJCYWxsb29uIiwiZmlsZUNvbXBvbmVudEluZm8iLCJibHVyIiwic3RhcnRDb24iLCJzdGFydE9mZiIsImVuZENvbiIsImVuZE9mZiIsInNldFN0YXJ0Iiwic2V0RW5kIiwic2VsZWN0aW9uIiwicmVtb3ZlQWxsUmFuZ2VzIiwiYWRkUmFuZ2UiLCJfcmFuZ2VJbmZvIiwicmVtb3ZlUmFuZ2UiLCJfc2V0S2V5RWZmZWN0IiwiX2NyZWF0ZURlZmF1bHRSYW5nZSIsImZvY3VzTm9kZSIsInJhbmdlQ291bnQiLCJnZXRSYW5nZUF0IiwiYW5jaG9yTm9kZSIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0IiwiY29tcGFyZVZhbHVlIiwicmlnaHREaXIiLCJfc2VsZWN0aW9uVm9pZCIsIm9wIiwiYWN0aXZlRWwiLCJhY3RpdmVFbGVtZW50IiwiZXh0ZW50Tm9kZSIsImZpcnN0Rm9ybWF0IiwiY29tbSIsIl9yZXNldFJhbmdlVG9UZXh0Tm9kZSIsInRlbXBDb24iLCJ0ZW1wT2Zmc2V0IiwidGVtcENoaWxkIiwib25seUJyZWFrIiwiZW1wdHlUZXh0IiwiY29tbW9uQ29uIiwibGluZU5vZGVzIiwic3RhcnRMaW5lIiwiZW5kTGluZSIsInN0YXJ0SWR4IiwiZW5kSWR4Iiwib25seVRhYmxlIiwic3RhcnRSYW5nZUVsIiwiZW5kUmFuZ2VFbCIsInNhbWVSYW5nZSIsInJlbW92ZUR1cGxpY2F0ZSIsIm15Q29tcG9uZW50Iiwic2VsZWN0ZWRMaW5lcyIsImlzRWRnZVBvaW50Iiwibm9kZVZhbHVlIiwiX2lzRWRnZUZvcm1hdCIsImZvcm1hdE5vZGUiLCJjdXJyZW50Rm9ybWF0RWwiLCJvRm9ybWF0TmFtZSIsImNoZWNrQ2hhckNvdW50Iiwibm90U2VsZWN0IiwicmVtb3ZlTm9kZSIsImZvcm1hdEVsIiwiZGVwdGhGb3JtYXQiLCJwbHVnaW4iLCJfc2V0Q29tcG9uZW50TGluZUJyZWFrZXIiLCJ0X3N0eWxlIiwiYl9zdHlsZSIsInJlc2l6ZUNvbnRhaW5lciIsImNvbXBvbmVudFRvcCIsIndTY3JvbGwiLCJfY2hlY2tEdXBsaWNhdGVOb2RlIiwiX2R1cGxlQ2hlY2siLCJvU3R5bGVzIiwiZHVwbGUiLCJhZnRlck5vZGUiLCJvcmlnaW5BZnRlciIsInRlbXBBZnRlck5vZGUiLCJmTm9kZSIsImluc2VydExpc3RDZWxsIiwidGVtcFBhcmVudE5vZGUiLCJmcmVlRm9ybWF0IiwiaXNGb3JtYXRzIiwiaXNFZGdlIiwicHJldkNvbnRhaW5lciIsInNhbWVQYXJlbnQiLCJzdWJMaXN0IiwiZm9ybWF0UmFuZ2UiLCJyZW1vdmVkVGFnIiwib2xkUGFyZW50IiwicmFuZ2VDb24iLCJmb21hdE5vZGUiLCJjaExpc3QiLCJkdXBsZU5vZGVzIiwiY0l0ZW0iLCJfc2V0SW50b0ZyZWVGb3JtYXQiLCJ6ZXJvV2lkdGgiLCJvTm9kZUNoaWxkcmVuIiwibGFzdE9Ob2RlIiwiZmlsZUNvbXBvbmVudCIsImlzU3RhcnRFZGdlIiwiaXNFbmRFZGdlIiwic3RhcnRQcmV2RWwiLCJlbmROZXh0RWwiLCJiZWZvcmVOb2RlIiwic3RhcnRJbmRleCIsImVuZEluZGV4Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsIl9ub2RlUmVtb3ZlTGlzdEl0ZW0iLCJzdWJzdHJpbmdEYXRhIiwiZW5kVWwiLCJzdGFydExpIiwicmMiLCJyYW5nZUxpbmVzIiwibGluZXNMb29wIiwibmVzdGVkIiwiZkVsIiwibEVsIiwic3RhbmRUYWciLCJiZWZvcmVUYWciLCJwYXJlbnREZXB0aCIsImxpc3RQYXJlbnQiLCJsaW5lQXJyIiwicmVtb3ZlSXRlbXMiLCJuZXh0TGluZSIsIm5leHRMaXN0IiwicmVtb3ZlQXJyYXkiLCJzcGxpdFJhbmdlIiwibmV3UmFuZ2VFbGVtZW50IiwiZmlyc3ROb2RlIiwibGFzdE5vZGUiLCJyYW5nZUVsIiwiaW5zZXJ0ZWROZXciLCJtb3ZlQ29tcGxldGUiLCJhcHBlbmROb2RlIiwiaW5zTm9kZSIsIm9yaWdpbk5vZGUiLCJpbnNDaGlsZHJlbiIsIm9yaWdpbk5leHQiLCJkZXRhY2hSYW5nZSIsImxpbmVJbmRleCIsImluc05leHQiLCJpbm5lckNoaWxkcmVuIiwicmFuZ2VQYXJlbnQiLCJyYW5nZVJpZ2h0IiwiY2hpbGRFZGdlIiwibGlzdEZpcnN0IiwibGlzdExhc3QiLCJsYXN0SW5kZXgiLCJzdHlsZUFycmF5IiwicmVtb3ZlTm9kZUFycmF5Iiwic3RyaWN0UmVtb3ZlIiwiaXNSZW1vdmVOb2RlIiwiaXNSZW1vdmVGb3JtYXQiLCJrIiwibmV3Tm9kZU5hbWUiLCJzTm9kZSIsImNoZWNrQ250IiwiY2hlY2tBdHRycyIsImNrZWNrQ2xhc3NlcyIsImNsYXNzUmVnIiwic3R5bGVDaGVjayIsImNsYXNzQ2hlY2siLCJzdGFydCIsImVuZCIsInN0eWxlUmVnRXhwIiwiY2xhc3NSZWdFeHAiLCJyZW1vdmVOb2RlUmVnRXhwIiwid0Jvb2xlYW4iLCJCb29sZWFuIiwiX3JlbW92ZUNoZWNrIiwiY2hlY2tOb2RlIiwidk5vZGUiLCJ0YWdSZW1vdmUiLCJvcmlnaW5TdHlsZSIsIm9yaWdpbkNsYXNzZXMiLCJvbmVMaW5lIiwiZW5kTGVuZ3RoIiwiaXNSZW1vdmVBbmNob3IiLCJpc1NpemVOb2RlIiwiX2dldE1haW50YWluZWROb2RlIiwiX3V0aWxfZ2V0TWFpbnRhaW5lZE5vZGUiLCJfdXRpbF9pc01haW50YWluZWROb2RlIiwiX3Jlc2V0Q29tbW9uTGlzdENlbGwiLCJuZXdSYW5nZSIsIl9ub2RlQ2hhbmdlX29uZUxpbmUiLCJfc2V0Q29tbW9uTGlzdFN0eWxlIiwiYXBwbGllZENvbW1vbkxpc3QiLCJfbm9kZUNoYW5nZV9lbmRMaW5lIiwiX25vZGVDaGFuZ2VfbWlkZGxlTGluZSIsIl9ub2RlQ2hhbmdlX3N0YXJ0TGluZSIsImVsU3R5bGVzIiwiZWsiLCJlbEtleXMiLCJyZW1vdmVQcm9wZXJ0eSIsInNlbCIsImFwcGxpZWRFbCIsImNoaWxkU3R5bGUiLCJlbFN0eWxlIiwiZm9udFdlaWdodCIsImZvbnRTdHlsZSIsImNLZXlzIiwiX3N0cmlwUmVtb3ZlTm9kZSIsIl9pc1JlbW92ZSIsIm5ld0lubmVyTm9kZSIsInBhcmVudENvbiIsInNhbWVUYWciLCJ6Iiwibk5vZGVBcnJheSIsInBOb2RlIiwiaXNTYW1lTm9kZSIsInBDdXJyZW50Iiwic3RhcnRQYXNzIiwiZW5kUGFzcyIsImNoZWNrQ3NzIiwiY292ZXJOb2RlIiwicHJldk5vZGUiLCJwcmV2QW5jaG9yTm9kZSIsImNoaWxkTm9kZSIsImFuY2hvcnMiLCJhQ2hpbGRyZW4iLCJhTGVuIiwiYW5jZXN0b3JBbmNob3JOb2RlIiwiYWZ0ZXJBbmNob3JOb2RlIiwidGV4dE5vZGVfcyIsInRleHROb2RlX2UiLCJlbmRDb25SZXNldCIsIm5ld1N0YXJ0T2Zmc2V0Iiwic3RhcnRQYXRoIiwibWVyZ2VFbmRDb24iLCJuZXdFbmRPZmZzZXQiLCJlbmRQYXRoIiwibmV3T2Zmc2V0cyIsIl9lbmRDb250YWluZXIiLCJwYXNzTm9kZSIsImNsb25lQ2hpbGQiLCJpc1RvcE5vZGUiLCJ0ZW1wTm9kZSIsIm5ld0Nzc1RleHQiLCJuZXdDbGFzcyIsIm5vbmVDaGFuZ2UiLCJhY3Rpb25DYWxsIiwibGF5ZXIiLCJfc2hvd1Rvb2xiYXJCYWxsb29uIiwiX3Nob3dUb29sYmFySW5saW5lIiwiY29tbWFuZEhhbmRsZXIiLCJ0b2dnbGVDb2RlVmlldyIsInRvZ2dsZUZ1bGxTY3JlZW4iLCJ0b2dnbGVEaXNwbGF5QmxvY2tzIiwic2V0RGlyIiwiZ2V0Q29udGVudHMiLCJub2Rlc01hcCIsIm1hcmdpbkRpciIsIm1hcmdpbiIsIl9yZXNvdXJjZXNTdGF0ZUNoYW5nZSIsIl9zZXRDb2RlRGF0YVRvRWRpdG9yIiwiX2hpZGVUb29sYmFyIiwiX3Jlc2V0Q2FjaGluZ0J1dHRvbiIsIl9zZXRFZGl0b3JEYXRhVG9Db2RlVmlldyIsInNjcm9sbEhlaWdodCIsInJlZnJlc2giLCJfY2hlY2tQbGFjZWhvbGRlciIsImNvZGVfaHRtbCIsIl9nZXRDb2RlVmlldyIsInBhcnNlRG9jdW1lbnQiLCJoZWFkQ2hpbGRyZW4iLCJjb252ZXJ0Q29udGVudHNGb3JFZGl0b3IiLCJlZGl0YWJsZUNsYXNzZXMiLCJjb2RlQ29udGVudHMiLCJjb252ZXJ0SFRNTEZvckNvZGVWaWV3IiwiY29kZVZhbHVlIiwiX3NldENvZGVWaWV3IiwiX3ZhciIsIndhc1Rvb2xiYXJIaWRkZW4iLCJfY29kZVZpZXdBdXRvSGVpZ2h0Iiwib25TY3JvbGxfd2luZG93IiwiekluZGV4IiwiX2lmcmFtZUF1dG9IZWlnaHQiLCJoaWRlIiwiY29udGVudHNIVE1MIiwicHJpbnREb2N1bWVudCIsIndEb2MiLCJhcnJ0cyIsIndyaXRlIiwibGlua3MiLCJsaW5rSFRNTCIsImRvY3VtZW50TW9kZSIsIlN0eWxlTWVkaWEiLCJ3aW5kb3dPYmplY3QiLCJtaW1lVHlwZSIsImNoYW5nZURpciIsIm1hcmdpblJpZ2h0IiwibWFyZ2luTGVmdCIsImNvbnZlcnRWYWx1ZSIsIl9yZXNldENvbXBvbmVudHMiLCJzZXRJZnJhbWVDb250ZW50cyIsImN0eCIsIl9fc2NyaXB0VGFnUmVnRXhwIiwib25seUNvbnRlbnRzIiwiY2xlYW5IVE1MIiwicmVuZGVySFRNTCIsImVkaXRhYmxlRWxzIiwiZ2V0RnVsbENvbnRlbnRzIiwiX21ha2VMaW5lIiwicmVxdWlyZUZvcm1hdCIsIl9fZGlzYWxsb3dlZFRhZ05hbWVSZWdFeHAiLCJ0ZXh0QXJyYXkiLCJfYWxsb3dIVE1MQ29tbWVudHMiLCJfdGFnQ29udmVydG9yIiwiX2RlbGV0ZURpc2FsbG93ZWRUYWdzIiwiX19kaXNhbGxvd2VkVGFnc1JlZ0V4cCIsInRvIiwic2l6ZU51bSIsImZyb20iLCJweFNpemUiLCJfY2xlYW5TdHlsZSIsImZhY2UiLCJhbGxvd2VkU3R5bGUiLCJfY2xlYW5UYWdzIiwibG93TGV2ZWxDaGVjayIsImJBdHRyIiwid0F0dHIiLCJfZWRpdEZvcm1hdCIsInRlbXBUcmVlIiwiX2NvbnZlcnRMaXN0Q2VsbCIsImRvbVRyZWUiLCJfaXNGb3JtYXREYXRhIiwiX2NsYXNzTmFtZUZpbHRlciIsInRleHRDb21wTGlzdCIsImluaXRNZXRob2QiLCJfX2FsbG93ZWRTY3JpcHRSZWdFeHAiLCJjb21wIiwicmV0dXJuSFRNTCIsImJyUmVnIiwiaXNGb3JtYXQiLCJickNoYXIiLCJpbmRlbnRTaXplIiwiZWxlbWVudFJlZ1Rlc3QiLCJlbGVtZW50SW5kZW50IiwibGluZUJSIiwibm9kZVJlZ1Rlc3QiLCJ0YWdJbmRlbnQiLCJYTUxTZXJpYWxpemVyIiwic2VyaWFsaXplVG9TdHJpbmciLCJsaXN0ZW5lciIsInVzZUNhcHR1cmUiLCJfY2hhckNvdW50IiwiaW5wdXRUZXh0IiwiY291bnRUeXBlIiwibmV4dENoYXJDb3VudCIsImdldENoYXJMZW5ndGgiLCJfc2V0Q2hhckNvdW50Iiwib3ZlciIsImNvdW50IiwiZ2V0Q2hhckNvdW50Iiwic2xpY2VQb3NpdGlvbiIsIl9jYWxsQ291bnRlckJsaW5rIiwicmVzZXRSZXNwb25zaXZlVG9vbGJhciIsInJlc3BvbnNpdmVTaXplIiwiX3Jlc3BvbnNpdmVCdXR0b25TaXplIiwicmVzcG9uc2l2ZVdpZHRoIiwiX3Jlc3BvbnNpdmVDdXJyZW50U2l6ZSIsInNldFRvb2xiYXJCdXR0b25zIiwiX2NoZWNrQ29tcG9uZW50cyIsImdldERvYyIsInNldFZhbHVlIiwiZ2V0VmFsdWUiLCJpZ25vcmVkTGlzdCIsIk9VVERFTlQiLCJJTkRFTlQiLCJfaW5pdCIsInJlbG9hZCIsIl9pbml0SFRNTCIsImdldFByb3BlcnR5VmFsdWUiLCJzUHJlZml4IiwiU2hhZG93Um9vdCIsInNoYWRvd1Jvb3QiLCJkaXNhbGxvd1RleHRUYWdzIiwiYWxsb3dUZXh0VGFncyIsImdldFJlZ0xpc3QiLCJzdHIyIiwiZGVmYXVsdEF0dHIiLCJyZWdFbmRTdHIiLCJfd0F0dHIiLCJ0YWdzQXR0ciIsImFsbEF0dHIiLCJfYkF0dHIiLCJfY2FjaGluZ0J1dHRvbnMiLCJtYW5hZ2VkQ2xhc3MiLCJmaWxlUGx1Z2luUmVnRXhwIiwiY2hhbmdlIiwiZGVsYXlUaW1lIiwicHVzaERlbGF5Iiwic3RhY2tJbmRleCIsInN0YWNrIiwic2V0Q29udGVudHNGcm9tU3RhY2siLCJwdXNoU3RhY2siLCJkZWxheSIsInRpbWUiLCJjbGVhclRpbWVvdXQiLCJnbyIsImdldEN1cnJlbnRJbmRleCIsImlnbm9yZUNoYW5nZUV2ZW50IiwiX2Rlc3Ryb3kiLCJfaGlzdG9yeSIsIl9vbkNoYW5nZV9oaXN0b3J5U3RhY2siLCJfaWZyYW1lQXV0byIsIl9pbml0V3lzaXd5Z0FyZWEiLCJvbkNoYW5nZSIsIl9fY2FsbFJlc2l6ZUZ1bmN0aW9uIiwicmVzaXplT2JzZXJ2ZXJFbnRyeSIsImJvcmRlckJveFNpemUiLCJibG9ja1NpemUiLCJjb250ZW50UmVjdCIsIm9uUmVzaXplRWRpdG9yIiwiX3NldERlZmF1bHRGb3JtYXQiLCJmb3JtYXROYW1lIiwiX3NldE9wdGlvbnNJbml0IiwiX2dldENvbnN0cnVjdGVkIiwiX2VkaXRvckluaXQiLCJfYWRkRXZlbnQiLCJfb2ZmU3RpY2t5VG9vbGJhciIsIm9uUmVzaXplX3dpbmRvdyIsIl9yZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJfdG9vbGJhck9ic2VydmVyIiwiY29udGV4dEVsIiwiX0lFaXNDb21wb3NpbmciLCJfbGluZUJyZWFrZXJCaW5kIiwiX2RlbGV0ZUtleUNvZGUiLCJfY3Vyc29yTW92ZUtleUNvZGUiLCJfZGlyZWN0aW9uS2V5Q29kZSIsIl9ub25UZXh0S2V5Q29kZSIsIl9oaXN0b3J5SWdub3JlS2V5Q29kZSIsIl9vbkJ1dHRvbnNDaGVjayIsIl9mcm9udFplcm9XaWR0aFJlZyIsIl9rZXlDb2RlU2hvcnRjdXQiLCI2NSIsIjY2IiwiODMiLCI4NSIsIjczIiwiODkiLCI5MCIsIjIxOSIsIjIyMSIsIl9zaG9ydGN1dENvbW1hbmQiLCJrZXlTdHIiLCJjbGFzc09uQ2hlY2siLCJjb21tYW5kTWFwTm9kZXMiLCJfYnV0dG9uc0V2ZW50SGFuZGxlciIsImFkZEdsb2JhbEV2ZW50IiwicmVtb3ZlR2xvYmFsRXZlbnQiLCJvbkNsaWNrX3Rvb2xiYXIiLCJfX3NlbGVjdGlvblN5bmNFdmVudCIsIm9uTW91c2VEb3duX3d5c2l3eWciLCJvbk1vdXNlRG93biIsInRhYmxlQ2VsbCIsIm9uQ2xpY2tfd3lzaXd5ZyIsIm9uQ2xpY2siLCJkZXRhaWwiLCJzZWxlY3Rpb25Ob2RlRGVlcGVzdEZpcnN0Q2hpbGQiLCJzZWxlY3RlZENvbXBvbmVudEluZm8iLCJwcmV2TGkiLCJfYmFsbG9vbkRlbGF5IiwiX3Nob3dUb29sYmFyQmFsbG9vbkRlbGF5IiwicmFuZ2VPYmoiLCJpc0RpclRvcCIsInJlY3RzIiwiZ2V0Q2xpZW50UmVjdHMiLCJnbG9iYWxTY3JvbGwiLCJlZGl0b3JXaWR0aCIsInN0aWNreVRvcCIsImVkaXRvckxlZnQiLCJub2RlT2Zmc2V0IiwiYm90dG9tIiwibm9UZXh0IiwiYXJyb3dNYXJnaW4iLCJ0b29sYmFySGVpZ2h0IiwiaWZyYW1lUmVjdHMiLCJfc2V0VG9vbGJhck9mZnNldCIsImVkaXRvclBhcmVudCIsImFic29sdXRlTGVmdCIsIm92ZXJSaWdodCIsInJlc2V0VG9wIiwic3BhY2UiLCJfZ2V0UGFnZUJvdHRvbVNwYWNlIiwiZG9jdW1lbnRFbGVtZW50IiwiYXJyb3dfbGVmdCIsInNob3dJbmxpbmUiLCJvbklucHV0X3d5c2l3eWciLCJvbklucHV0IiwiX2lzVW5lZGl0YWJsZU5vZGUiLCJpc0Zyb250Iiwic2libGluZ0tleSIsInNpYmxpbmdOb2RlIiwiX2lzVW5lZGl0YWJsZU5vZGVfZ2V0U2libGluZyIsInNlbGVjdE5vZGUiLCJfb25TaG9ydGN1dEtleSIsIm9uS2V5RG93bl93eXNpd3lnIiwic2hpZnRLZXkiLCJjdHJsIiwiY3RybEtleSIsIm1ldGFLZXkiLCJhbHRLZXkiLCJvbktleURvd24iLCJzZWxlY3RSYW5nZSIsImZpbGVDb21wb25lbnROYW1lIiwiX29uS2V5RG93bl93eXNpd3lnX2Fycm93S2V5IiwiX2hhcmREZWxldGUiLCJkZWZhdWx0Rm9ybWF0IiwiY29uIiwicHJldkxhc3QiLCJpZ25vcmVaV1MiLCJuZXh0RWwiLCJsaW5lcyIsImZjIiwibGMiLCJtb3ZlQ2VsbCIsImVuZENoaWxkIiwidGFiVGV4dCIsImZyZWVGb3JtYXRFbCIsImVudGVySFRNTCIsImZvcm1hdEVuZEVkZ2UiLCJmb3JtYXRTdGFydEVkZ2UiLCJfZW50ZXJQcmV2ZW50IiwiaW5uZXJOb2RlIiwicGFyZW50TGkiLCJuZXdMaXN0Q2VsbCIsInNlbGVjdGlvbkZvcm1hdCIsIndTZWxlY3Rpb24iLCJpbnNlcnRIVE1MIiwid09mZnNldCIsImZvY3VzTmV4dCIsImJyUHJldiIsImJyTmV4dCIsImZvY3VzQlIiLCJpc011bHRpTGluZSIsImlubmVyUmFuZ2UiLCJ0ZW1wRWwiLCJjb21wQ29udGV4dCIsIm5ic3AiLCJjb21wb25lbnRJbmZvIiwiY3VycmVudENlbGxGaXJzdE5vZGUiLCJjdXJyZW50Q2VsbExhc3ROb2RlIiwiaXNDZWxsRmlyc3ROb2RlIiwiaXNDZWxsTGFzdE5vZGUiLCJzaWJsaW5nVG9TZXQiLCJwcmV2aW91c1JvdyIsInNlbGVjdFByZXZpb3VzIiwic2VsZWN0TmV4dCIsInByZXZpb3VzRGVlcGVzdE5vZGUiLCJvbktleVVwX3d5c2l3eWciLCJvRm9ybWF0VGFnIiwiaXNDb21wb3NpbmciLCJmcm9udFplcm9XaWR0aENudCIsInN1YnN0cmluZyIsIm9uS2V5VXAiLCJvblNjcm9sbF93eXNpd3lnIiwib25TY3JvbGwiLCJvbkZvY3VzX3d5c2l3eWciLCJvbkZvY3VzIiwib25CbHVyX3d5c2l3eWciLCJvbkJsdXIiLCJvbk1vdXNlRG93bl9yZXNpemluZ0JhciIsImNsaWVudFkiLCJfcmVzaXplX2VkaXRvciIsImNsb3N1cmVGdW5jIiwicmVzaXplSW50ZXJ2YWwiLCJpc1Rvb2xiYXJIaWRkZW4iLCJlZGl0b3JIZWlnaHQiLCJzY3JvbGxZIiwiZWRpdG9yVG9wIiwiaW5saW5lT2Zmc2V0IiwiX29uU3RpY2t5VG9vbGJhciIsInNjcm9sbCIsInNDZWxsIiwiZUNlbGwiLCJzSXNDZWxsIiwiZUlzQ2VsbCIsInNDb21wIiwiZUNvbXAiLCJvblBhc3RlX3d5c2l3eWciLCJjbGlwYm9hcmREYXRhIiwiX2RhdGFUcmFuc2ZlckFjdGlvbiIsIl9zZXRDbGlwYm9hcmRDb21wb25lbnQiLCJzZXREYXRhIiwib25Db3B5X3d5c2l3eWciLCJvbkNvcHkiLCJvblNhdmVfd3lzaXd5ZyIsIm9uU2F2ZSIsIm9uQ3V0X3d5c2l3eWciLCJvbkN1dCIsIm9uRHJvcF93eXNpd3lnIiwiZGF0YVRyYW5zZmVyIiwiX3NldERyb3BMb2NhdGlvblNlbGVjdGlvbiIsInJhbmdlT2Zmc2V0IiwiY2FyZXRSYW5nZUZyb21Qb2ludCIsImNsaWVudFgiLCJwbGFpblRleHQiLCJjbGVhbkRhdGEiLCJnZXREYXRhIiwidGVtcERpdiIsInRlbXBSYW5nZSIsIl9zZXRDbGlwYm9hcmREYXRhIiwiTVNEYXRhIiwib25QYXN0ZSIsIm9uRHJvcCIsImluc2VydEltYWdlIiwib25Nb3VzZU1vdmVfd3lzaXd5ZyIsImxpbmVCcmVha2VyU3R5bGUiLCJjdHhFbCIsInBhZ2VZIiwiX29uTW91c2VEb3duX2xpbmVCcmVhayIsIl9vbkxpbmVCcmVhayIsImV2ZW50V3lzaXd5ZyIsImVudHJpZXMiLCJwYXNzaXZlIiwiX3NldFJlc3BvbnNpdmVUb29sYmFyIiwiX3JlbW92ZUV2ZW50IiwidW5vYnNlcnZlIiwic2l6ZUFycmF5IiwiYnV0dG9uc09iaiIsIm9uU2V0VG9vbGJhckJ1dHRvbnMiLCJuZXdUb29sYmFyIiwibmV3Q29udGV4dCIsInNldE9wdGlvbnMiLCJfb3B0aW9ucyIsInNldERlZmF1bHRTdHlsZSIsIm5ld1N0eWxlcyIsIm5vdGljZUNsb3NlIiwiZ2V0Q29udGV4dCIsImdldFRleHQiLCJnZXRJbWFnZXNJbmZvIiwiZ2V0RmlsZXNJbmZvIiwibm90Q2xlYW5pbmdEYXRhIiwicmFuZ2VTZWxlY3Rpb24iLCJjaGVja0hUTUwiLCJmaXJzdENvbiIsImFwcGVuZENvbnRlbnRzIiwicmVhZE9ubHkiLCJzZXRPcHRpb24iLCJkaXNhYmxlIiwiZW5hYmxlIiwidG9wQXJlYVN0eWxlIiwiU1VORURJVE9SIiwic3VuZWRpdG9yIiwiX3Jlc2l6ZUNsaWVudFgiLCJfcmVzaXplQ2xpZW50WSIsIl9yZXNpemVfdyIsIl9yZXNpemVfaCIsIl9yZXNpemVfZGlyZWN0aW9uIiwiX21vdmVfcGF0aCIsIl9pc0NoYW5nZSIsImFsaWduSWNvbnMiLCJyZXNpemVfZGl2X2NvbnRhaW5lciIsInNldENvbnRyb2xsZXJfcmVzaXplIiwicmVzaXplRG90IiwicmVzaXplRGlzcGxheSIsInJlc2l6ZV9idXR0b24iLCJzZXRDb250cm9sbGVyX2J1dHRvbiIsInJlc2l6ZV9oYW5kbGVzIiwicmVzaXplSGFuZGxlcyIsInJlc2l6ZUJ1dHRvbkdyb3VwIiwicm90YXRpb25CdXR0b25zIiwicGVyY2VudGFnZUJ1dHRvbnMiLCJhbGlnbk1lbnUiLCJhbGlnbk1lbnVMaXN0IiwiYWxpZ25CdXR0b24iLCJhdXRvU2l6ZUJ1dHRvbiIsImNhcHRpb25CdXR0b24iLCJvbk1vdXNlRG93bl9yZXNpemVfaGFuZGxlIiwib25DbGlja19yZXNpemVCdXR0b24iLCJyZXNpemVfY29udGFpbmVyIiwicGx1Z2luT2JqIiwicGVyY2VudGFnZVJvdGF0aW9uIiwieFVuaXQiLCJ5VW5pdCIsImRlYyIsInhWYWx1ZSIsInlWYWx1ZSIsImNvbnRleHRSZXNpemluZyIsImlzVmVydGljYWwiLCJhYnMiLCJkaXNwbGF5WCIsImRpc3BsYXlZIiwicmVzaXplRG90U2hvdyIsInJvdGF0aW9ucyIsInBCdXR0b25zIiwibmF0dXJhbFdpZHRoIiwibmF0dXJhbEhlaWdodCIsIl9jbG9zZUFsaWduTWVudSIsIm9wZW5BbGlnbk1lbnUiLCJjdXJyZW50Q29udGV4dCIsImN1cnJlbnRNb2R1bGUiLCJwZXJjZW50WSIsInBlcmNlbnRhZ2UiLCJfc2V0VHJhbnNGb3JtIiwic2xvcGUiLCJkZWciLCJhbGlnblZhbHVlIiwiY2FwdGlvblRleHQiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1PcmlnaW4iLCJ0cmFuc09yaWdpbiIsIm9mZnNldFciLCJvZmZzZXRIIiwidHJhbnNXIiwidHJhbnNIIiwidHJhbnNsYXRlIiwiY2xvc3VyZUZ1bmNfYmluZCIsInJlc2l6aW5nX2VsZW1lbnRfYmluZCIsImNhbmNlbF9jb250cm9sbGVyX3Jlc2l6ZSIsInJlc2l6aW5nX2VsZW1lbnQiLCJyZXN1bHRXIiwicmVzdWx0SCIsIndoIiwicGFkZGluZyIsImxpbWl0IiwiX2NoZWNrTWVkaWFDb21wb25lbnQiLCJ1cGxvYWRVcmwiLCJ1cGxvYWRIZWFkZXIiLCJjYWxsQmFjayIsImVycm9yQ2FsbEJhY2siLCJmaWxlUGx1Z2luIiwiX2NhbGxCYWNrVXBsb2FkIiwidGFnTmFtZXMiLCJ1cGxvYWRFdmVudEhhbmRsZXIiLCJmaWxlTWFuYWdlclBsdWdpbiIsImluZm9MaXN0Iiwic2V0RmlsZUluZm8iLCJpbmZvVXBkYXRlIiwiY3VycmVudFRhZ3MiLCJpbmZvSW5kZXgiLCJwbGd1aW4iLCJzdGF0ZSIsInNjcm9sbEludG9WaWV3Il0sIm1hcHBp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RUFDVkMsY0FBYyxFQUNkbEUsTUFBT21nQixLQUlSQSxHQTFUcUQsaUJBQW5CcmhCLEVBQU9ELFFBQzVDQyxFQUFPRCxRQUFVa0MsRUFBT29ELFNBQ3BCbkQsRUFBUUQsR0FBUSxHQUNoQixTQUFVcUQsR0FDTixJQUFLQSxFQUFFRCxTQUNILE1BQU0sSUFBSUUsTUFBTSw4Q0FFcEIsT0FBT3JELEVBQVFvRCxJQUd2QnBELEVBQVFEIiwiZmlsZSI6InN1bmVkaXRvci5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCJYSlIxXCIpO1xuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XHJcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cclxuICAgICAgICAgICAgZmFjdG9yeShnbG9iYWwsIHRydWUpIDpcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHcpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdy5kb2N1bWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU1VORURJVE9SX01PRFVMRVMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeSh3KTtcclxuICAgICAgICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmFjdG9yeShnbG9iYWwpO1xyXG4gICAgfVxyXG59KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24gKHdpbmRvdywgbm9HbG9iYWwpIHtcclxuICAgIGNvbnN0IGRpYWxvZyA9IHtcclxuICAgICAgICBuYW1lOiAnZGlhbG9nJyxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ29uc3RydWN0b3JcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdCBcclxuICAgICAgICAgKi9cclxuICAgICAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZGlhbG9nID0ge1xyXG4gICAgICAgICAgICAgICAga2luZDogJycsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVNb2RhbDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBfY2xvc2VTaWduYWw6IGZhbHNlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAvKiogZGlhbG9nICovXHJcbiAgICAgICAgICAgIGxldCBkaWFsb2dfZGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgICAgICBkaWFsb2dfZGl2LmNsYXNzTmFtZSA9ICdzZS1kaWFsb2cgc3VuLWVkaXRvci1jb21tb24nO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRpYWxvZ19iYWNrID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgICAgICBkaWFsb2dfYmFjay5jbGFzc05hbWUgPSAnc2UtZGlhbG9nLWJhY2snO1xyXG4gICAgICAgICAgICBkaWFsb2dfYmFjay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRpYWxvZ19hcmVhID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgICAgICBkaWFsb2dfYXJlYS5jbGFzc05hbWUgPSAnc2UtZGlhbG9nLWlubmVyJztcclxuICAgICAgICAgICAgZGlhbG9nX2FyZWEuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHJcbiAgICAgICAgICAgIGRpYWxvZ19kaXYuYXBwZW5kQ2hpbGQoZGlhbG9nX2JhY2spO1xyXG4gICAgICAgICAgICBkaWFsb2dfZGl2LmFwcGVuZENoaWxkKGRpYWxvZ19hcmVhKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRleHQuZGlhbG9nLm1vZGFsQXJlYSA9IGRpYWxvZ19kaXY7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZGlhbG9nLmJhY2sgPSBkaWFsb2dfYmFjaztcclxuICAgICAgICAgICAgY29udGV4dC5kaWFsb2cubW9kYWwgPSBkaWFsb2dfYXJlYTtcclxuXHJcbiAgICAgICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgICAgIGNvbnRleHQuZGlhbG9nLm1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuX29uTW91c2VEb3duX2RpYWxvZy5iaW5kKGNvcmUpKTtcclxuICAgICAgICAgICAgY29udGV4dC5kaWFsb2cubW9kYWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrX2RpYWxvZy5iaW5kKGNvcmUpKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qKiBhcHBlbmQgaHRtbCAqL1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQucmVsYXRpdmUuYXBwZW5kQ2hpbGQoZGlhbG9nX2Rpdik7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXHJcbiAgICAgICAgICAgIGRpYWxvZ19kaXYgPSBudWxsLCBkaWFsb2dfYmFjayA9IG51bGwsIGRpYWxvZ19hcmVhID0gbnVsbDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgY2xvc2luZyB0aGUgZGlhbG9nXHJcbiAgICAgICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBlIEV2ZW50IG9iamVjdFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX29uTW91c2VEb3duX2RpYWxvZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKC9zZS1kaWFsb2ctaW5uZXIvLnRlc3QoZS50YXJnZXQuY2xhc3NOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy5fY2xvc2VTaWduYWwgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy5fY2xvc2VTaWduYWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudCB0byBjbG9zZSB0aGUgd2luZG93IHdoZW4gdGhlIG91dHNpZGUgYXJlYSBvZiB0aGUgZGlhbG9nIG9yIGNsb3NlIGJ1dHRvbiBpcyBjbGlja1xyXG4gICAgICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZSBFdmVudCBvYmplY3RcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9vbkNsaWNrX2RpYWxvZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKC9jbG9zZS8udGVzdChlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpKSB8fCB0aGlzLmNvbnRleHQuZGlhbG9nLl9jbG9zZVNpZ25hbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5jbG9zZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIE9wZW4gYSBEaWFsb2cgcGx1Z2luXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGtpbmQgRGlhbG9nIHBsdWdpbiBuYW1lXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSB1cGRhdGUgV2hldGhlciBpdCB3aWxsIG9wZW4gZm9yIHVwZGF0ZSAoJ2ltYWdlJyA9PT0gdGhpcy5jdXJyZW50Q29udHJvbGxlck5hbWUpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb3BlbjogZnVuY3Rpb24gKGtpbmQsIHVwZGF0ZSkgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kYWxGb3JtKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBsdWdpbnMuZGlhbG9nLl9iaW5kQ2xvc2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2QucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMucGx1Z2lucy5kaWFsb2cuX2JpbmRDbG9zZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuZGlhbG9nLl9iaW5kQ2xvc2UgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuZGlhbG9nLl9iaW5kQ2xvc2UgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEvMjcvLnRlc3QoZS5rZXlDb2RlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5jbG9zZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2QuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMucGx1Z2lucy5kaWFsb2cuX2JpbmRDbG9zZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsID0gdXBkYXRlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wb3B1cERpc3BsYXkgPT09ICdmdWxsJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy5tb2RhbEFyZWEuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy5tb2RhbEFyZWEuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLmtpbmQgPSBraW5kO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGFsRm9ybSA9IHRoaXMuY29udGV4dFtraW5kXS5tb2RhbDtcclxuICAgICAgICAgICAgY29uc3QgZm9jdXNFbGVtZW50ID0gdGhpcy5jb250ZXh0W2tpbmRdLmZvY3VzRWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wbHVnaW5zW2tpbmRdLm9uID09PSAnZnVuY3Rpb24nKSB0aGlzLnBsdWdpbnNba2luZF0ub24uY2FsbCh0aGlzLCB1cGRhdGUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy5tb2RhbEFyZWEuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cuYmFjay5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy5tb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgdGhpcy5tb2RhbEZvcm0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgICAgICBpZiAoZm9jdXNFbGVtZW50KSBmb2N1c0VsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfYmluZENsb3NlOiBudWxsLFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDbG9zZSBhIERpYWxvZyBwbHVnaW5cclxuICAgICAgICAgKiBUaGUgcGx1Z2luJ3MgXCJpbml0XCIgbWV0aG9kIGlzIGNhbGxlZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wbHVnaW5zLmRpYWxvZy5fYmluZENsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLnBsdWdpbnMuZGlhbG9nLl9iaW5kQ2xvc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5fYmluZENsb3NlID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qga2luZCA9IHRoaXMuY29udGV4dC5kaWFsb2cua2luZDtcclxuICAgICAgICAgICAgdGhpcy5tb2RhbEZvcm0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy5iYWNrLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cubW9kYWxBcmVhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5kaWFsb2cudXBkYXRlTW9kYWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBsdWdpbnNba2luZF0uaW5pdCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5wbHVnaW5zW2tpbmRdLmluaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy5raW5kID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMubW9kYWxGb3JtID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgaWYgKHR5cGVvZiBub0dsb2JhbCA9PT0gdHlwZW9mIHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICghd2luZG93LlNVTkVESVRPUl9NT0RVTEVTKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdTVU5FRElUT1JfTU9EVUxFUycsIHtcclxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHt9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVU5FRElUT1JfTU9EVUxFUywgJ2RpYWxvZycsIHtcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB2YWx1ZTogZGlhbG9nXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRpYWxvZztcclxufSkpOyIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xyXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XHJcbiAgICAgICAgICAgIGZhY3RvcnkoZ2xvYmFsLCB0cnVlKSA6XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICh3KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXcuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NVTkVESVRPUl9NT0RVTEVTIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhY3Rvcnkodyk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZhY3RvcnkoZ2xvYmFsKTtcclxuICAgIH1cclxufSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uICh3aW5kb3csIG5vR2xvYmFsKSB7XHJcbiAgICBjb25zdCBmaWxlQnJvd3NlciA9IHtcclxuICAgICAgICBuYW1lOiAnZmlsZUJyb3dzZXInLFxyXG4gICAgICAgIF94bWxIdHRwOiBudWxsLFxyXG4gICAgICAgIF9sb2FkaW5nOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ29uc3RydWN0b3JcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdCBcclxuICAgICAgICAgKi9cclxuICAgICAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZmlsZUJyb3dzZXIgPSB7XHJcbiAgICAgICAgICAgICAgICBfY2xvc2VTaWduYWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYXJlYTogbnVsbCxcclxuICAgICAgICAgICAgICAgIGhlYWRlcjogbnVsbCxcclxuICAgICAgICAgICAgICAgIHRhZ0FyZWE6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBib2R5OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgbGlzdDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHRhZ0VsZW1lbnRzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUYWdzOiBbXSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdG9ySGFuZGxlcjogbnVsbCxcclxuICAgICAgICAgICAgICAgIGNvbnRleHRQbHVnaW46ICcnLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uU2l6ZTogNFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgLyoqIGZpbGVCcm93c2VyICovXHJcbiAgICAgICAgICAgIGxldCBicm93c2VyX2RpdiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgYnJvd3Nlcl9kaXYuY2xhc3NOYW1lID0gJ3NlLWZpbGUtYnJvd3NlciBzdW4tZWRpdG9yLWNvbW1vbic7XHJcblxyXG4gICAgICAgICAgICBsZXQgYmFjayA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgYmFjay5jbGFzc05hbWUgPSAnc2UtZmlsZS1icm93c2VyLWJhY2snO1xyXG5cclxuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQuY2xhc3NOYW1lID0gJ3NlLWZpbGUtYnJvd3Nlci1pbm5lcic7XHJcbiAgICAgICAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gdGhpcy5zZXRfYnJvd3Nlcihjb3JlKTtcclxuXHJcbiAgICAgICAgICAgIGJyb3dzZXJfZGl2LmFwcGVuZENoaWxkKGJhY2spO1xyXG4gICAgICAgICAgICBicm93c2VyX2Rpdi5hcHBlbmRDaGlsZChjb250ZW50KTtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGJyb3dzZXJfZGl2LnF1ZXJ5U2VsZWN0b3IoJy5zZS1sb2FkaW5nLWJveCcpO1xyXG5cclxuICAgICAgICAgICAgY29udGV4dC5maWxlQnJvd3Nlci5hcmVhID0gYnJvd3Nlcl9kaXY7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZmlsZUJyb3dzZXIuaGVhZGVyID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcuc2UtZmlsZS1icm93c2VyLWhlYWRlcicpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmZpbGVCcm93c2VyLnRpdGxlQXJlYSA9IGNvbnRlbnQucXVlcnlTZWxlY3RvcignLnNlLWZpbGUtYnJvd3Nlci10aXRsZScpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmZpbGVCcm93c2VyLnRhZ0FyZWEgPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZS1maWxlLWJyb3dzZXItdGFncycpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmZpbGVCcm93c2VyLmJvZHkgPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZS1maWxlLWJyb3dzZXItYm9keScpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmZpbGVCcm93c2VyLmxpc3QgPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZS1maWxlLWJyb3dzZXItbGlzdCcpO1xyXG5cclxuICAgICAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICAgICAgY29udGV4dC5maWxlQnJvd3Nlci50YWdBcmVhLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrVGFnLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmZpbGVCcm93c2VyLmxpc3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQ2xpY2tGaWxlLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICBjb250ZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuX29uTW91c2VEb3duX2Jyb3dzZXIuYmluZChjb3JlKSk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrX2Jyb3dzZXIuYmluZChjb3JlKSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvKiogYXBwZW5kIGh0bWwgKi9cclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnJlbGF0aXZlLmFwcGVuZENoaWxkKGJyb3dzZXJfZGl2KTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICAgICAgYnJvd3Nlcl9kaXYgPSBudWxsLCBiYWNrID0gbnVsbCwgY29udGVudCA9IG51bGw7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0X2Jyb3dzZXI6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9XCJzZS1maWxlLWJyb3dzZXItY29udGVudFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZmlsZS1icm93c2VyLWhlYWRlclwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiY2xvc2VcIiBjbGFzcz1cInNlLWJ0biBzZS1maWxlLWJyb3dzZXItY2xvc2VcIiBjbGFzcz1cImNsb3NlXCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guY2xvc2UgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBsYW5nLmRpYWxvZ0JveC5jbG9zZSArICdcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5pY29ucy5jYW5jZWwgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLWZpbGUtYnJvd3Nlci10aXRsZVwiPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1maWxlLWJyb3dzZXItdGFnc1wiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWZpbGUtYnJvd3Nlci1ib2R5XCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtbG9hZGluZy1ib3ggc3VuLWVkaXRvci1jb21tb25cIj48ZGl2IGNsYXNzPVwic2UtbG9hZGluZy1lZmZlY3RcIj48L2Rpdj48L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1maWxlLWJyb3dzZXItbGlzdFwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudCB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZiBjbG9zaW5nIHRoZSBicm93c2VyXHJcbiAgICAgICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBlIEV2ZW50IG9iamVjdFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX29uTW91c2VEb3duX2Jyb3dzZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmICgvc2UtZmlsZS1icm93c2VyLWlubmVyLy50ZXN0KGUudGFyZ2V0LmNsYXNzTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxlQnJvd3Nlci5fY2xvc2VTaWduYWwgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbGVCcm93c2VyLl9jbG9zZVNpZ25hbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IHRvIGNsb3NlIHRoZSB3aW5kb3cgd2hlbiB0aGUgb3V0c2lkZSBhcmVhIG9mIHRoZSBicm93c2VyIG9yIGNsb3NlIGJ1dHRvbiBpcyBjbGlja1xyXG4gICAgICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZSBFdmVudCBvYmplY3RcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9vbkNsaWNrX2Jyb3dzZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoL2Nsb3NlLy50ZXN0KGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJykpIHx8IHRoaXMuY29udGV4dC5maWxlQnJvd3Nlci5fY2xvc2VTaWduYWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5jbG9zZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIE9wZW4gYSBmaWxlIGJyb3dzZXIgcGx1Z2luXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBsdWdpbk5hbWUgUGx1Z2luIG5hbWUgdXNpbmcgdGhlIGZpbGUgYnJvd3NlclxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gc2VsZWN0b3JIYW5kbGVyIFdoZW4gdGhlIGZ1bmN0aW9uIGNvbWVzIGFzIGFuIGFyZ3VtZW50IHZhbHVlLCBpdCBzdWJzdGl0dXRlcyBcImNvbnRleHQuc2VsZWN0b3JIYW5kbGVyXCIuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb3BlbjogZnVuY3Rpb24gKHBsdWdpbk5hbWUsIHNlbGVjdG9ySGFuZGxlcikgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5fYmluZENsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLnBsdWdpbnMuZmlsZUJyb3dzZXIuX2JpbmRDbG9zZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZUJyb3dzZXIuX2JpbmRDbG9zZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5fYmluZENsb3NlID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghLzI3Ly50ZXN0KGUua2V5Q29kZSkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5jbG9zZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2QuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5fYmluZENsb3NlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVCcm93c2VyQ29udGV4dCA9IHRoaXMuY29udGV4dC5maWxlQnJvd3NlcjtcclxuICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0LmNvbnRleHRQbHVnaW4gPSBwbHVnaW5OYW1lO1xyXG4gICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQuc2VsZWN0b3JIYW5kbGVyID0gc2VsZWN0b3JIYW5kbGVyO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgcGx1Z2luQ29udGV4dCA9IHRoaXMuY29udGV4dFtwbHVnaW5OYW1lXTtcclxuICAgICAgICAgICAgY29uc3QgbGlzdENsYXNzTmFtZSA9IHBsdWdpbkNvbnRleHQubGlzdENsYXNzO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudXRpbC5oYXNDbGFzcyhmaWxlQnJvd3NlckNvbnRleHQubGlzdCwgbGlzdENsYXNzTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5saXN0LmNsYXNzTmFtZSA9ICdzZS1maWxlLWJyb3dzZXItbGlzdCAnICsgbGlzdENsYXNzTmFtZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wb3B1cERpc3BsYXkgPT09ICdmdWxsJykge1xyXG4gICAgICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0LmFyZWEuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0LmFyZWEuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQudGl0bGVBcmVhLnRleHRDb250ZW50ID0gcGx1Z2luQ29udGV4dC50aXRsZTtcclxuICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0LmFyZWEuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0W3BsdWdpbk5hbWVdLmRpcmVjdERhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5fZHJhd0xpc3RJdGVtLmNhbGwodGhpcywgdGhpcy5jb250ZXh0W3BsdWdpbk5hbWVdLmRpcmVjdERhdGEsIHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLl9kcmF3RmlsZUxpc3QuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHRbcGx1Z2luTmFtZV0udXJsLCB0aGlzLmNvbnRleHRbcGx1Z2luTmFtZV0uaGVhZGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9iaW5kQ2xvc2U6IG51bGwsXHJcbiAgICAgICAgXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENsb3NlIGEgZmlsZUJyb3dzZXIgcGx1Z2luXHJcbiAgICAgICAgICogVGhlIHBsdWdpbidzIFwiaW5pdFwiIG1ldGhvZCBpcyBjYWxsZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsZUJyb3dzZXJQbHVnaW4gPSB0aGlzLnBsdWdpbnMuZmlsZUJyb3dzZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAoZmlsZUJyb3dzZXJQbHVnaW4uX3htbEh0dHApIHtcclxuICAgICAgICAgICAgICAgIGZpbGVCcm93c2VyUGx1Z2luLl94bWxIdHRwLmFib3J0KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChmaWxlQnJvd3NlclBsdWdpbi5fYmluZENsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmaWxlQnJvd3NlclBsdWdpbi5fYmluZENsb3NlKTtcclxuICAgICAgICAgICAgICAgIGZpbGVCcm93c2VyUGx1Z2luLl9iaW5kQ2xvc2UgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlQnJvd3NlckNvbnRleHQgPSB0aGlzLmNvbnRleHQuZmlsZUJyb3dzZXI7XHJcbiAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5hcmVhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5zZWxlY3RvckhhbmRsZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQuc2VsZWN0ZWRUYWdzID0gW107XHJcbiAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5pdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQubGlzdC5pbm5lckhUTUwgPSBmaWxlQnJvd3NlckNvbnRleHQudGFnQXJlYS5pbm5lckhUTUwgPSBmaWxlQnJvd3NlckNvbnRleHQudGl0bGVBcmVhLnRleHRDb250ZW50ID0gJyc7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucGx1Z2luc1tmaWxlQnJvd3NlckNvbnRleHQuY29udGV4dFBsdWdpbl0uaW5pdCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5wbHVnaW5zW2ZpbGVCcm93c2VyQ29udGV4dC5jb250ZXh0UGx1Z2luXS5pbml0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5jb250ZXh0UGx1Z2luID0gJyc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNob3cgZmlsZSBicm93c2VyIGxvYWRpbmcgYm94XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2hvd0Jyb3dzZXJMb2FkaW5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENsb3NlIGZpbGUgYnJvd3NlciBsb2FkaW5nIGJveFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsb3NlQnJvd3NlckxvYWRpbmc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZGluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9kcmF3RmlsZUxpc3Q6IGZ1bmN0aW9uICh1cmwsIGJyb3dzZXJIZWFkZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsZUJyb3dzZXJQbHVnaW4gPSB0aGlzLnBsdWdpbnMuZmlsZUJyb3dzZXI7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB4bWxIdHRwID0gZmlsZUJyb3dzZXJQbHVnaW4uX3htbEh0dHAgPSB0aGlzLnV0aWwuZ2V0WE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICAgICAgeG1sSHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmaWxlQnJvd3NlclBsdWdpbi5fY2FsbEJhY2tHZXQuYmluZCh0aGlzLCB4bWxIdHRwKTtcclxuICAgICAgICAgICAgeG1sSHR0cC5vcGVuKCdnZXQnLCB1cmwsIHRydWUpO1xyXG4gICAgICAgICAgICBpZihicm93c2VySGVhZGVyICE9PSBudWxsICYmIHR5cGVvZiBicm93c2VySGVhZGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLl93Lk9iamVjdC5rZXlzKGJyb3dzZXJIZWFkZXIpLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBrZXkgaW4gYnJvd3NlckhlYWRlcil7XHJcbiAgICAgICAgICAgICAgICAgICAgeG1sSHR0cC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgYnJvd3NlckhlYWRlcltrZXldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB4bWxIdHRwLnNlbmQobnVsbCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZUJyb3dzZXIuc2hvd0Jyb3dzZXJMb2FkaW5nKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2NhbGxCYWNrR2V0OiBmdW5jdGlvbiAoeG1sSHR0cCkge1xyXG4gICAgICAgICAgICBpZiAoeG1sSHR0cC5yZWFkeVN0YXRlID09PSA0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZUJyb3dzZXIuX3htbEh0dHAgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHhtbEh0dHAuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBKU09OLnBhcnNlKHhtbEh0dHAucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5yZXN1bHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLl9kcmF3TGlzdEl0ZW0uY2FsbCh0aGlzLCByZXMucmVzdWx0LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMubnVsbE1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maWxlQnJvd3Nlci5saXN0LmlubmVySFRNTCA9IHJlcy5udWxsTWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuZmlsZUJyb3dzZXIuZHJhd0xpc3QuZmFpbF0gY2F1c2UgOiBcIicgKyBlLm1lc3NhZ2UgKyAnXCInKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZUJyb3dzZXIuY2xvc2VCcm93c2VyTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlsZUJyb3dzZXIuYm9keS5zdHlsZS5tYXhIZWlnaHQgPSAodGhpcy5fdy5pbm5lckhlaWdodCAtIHRoaXMuY29udGV4dC5maWxlQnJvd3Nlci5oZWFkZXIub2Zmc2V0SGVpZ2h0IC0gNTApICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBleGNlcHRpb25cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZUJyb3dzZXIuY2xvc2VCcm93c2VyTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4bWxIdHRwLnN0YXR1cyAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSAheG1sSHR0cC5yZXNwb25zZVRleHQgPyB4bWxIdHRwIDogSlNPTi5wYXJzZSh4bWxIdHRwLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9ICdbU1VORURJVE9SLmZpbGVCcm93c2VyLmdldC5zZXJ2ZXJFeGNlcHRpb25dIHN0YXR1czogJyArIHhtbEh0dHAuc3RhdHVzICsgJywgcmVzcG9uc2U6ICcgKyAocmVzLmVycm9yTWVzc2FnZSB8fCB4bWxIdHRwLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2RyYXdMaXN0SXRlbTogZnVuY3Rpb24gKGl0ZW1zLCB1cGRhdGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsZUJyb3dzZXJDb250ZXh0ID0gdGhpcy5jb250ZXh0LmZpbGVCcm93c2VyO1xyXG4gICAgICAgICAgICBjb25zdCBwbHVnaW5Db250ZXh0ID0gdGhpcy5jb250ZXh0W2ZpbGVCcm93c2VyQ29udGV4dC5jb250ZXh0UGx1Z2luXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IF90YWdzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IGl0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uU2l6ZSA9IHBsdWdpbkNvbnRleHQuY29sdW1uU2l6ZSB8fCBmaWxlQnJvd3NlckNvbnRleHQuY29sdW1uU2l6ZTtcclxuICAgICAgICAgICAgY29uc3Qgc3BsaXRTaXplID0gY29sdW1uU2l6ZSA8PSAxID8gMSA6IChNYXRoLnJvdW5kKGxlbi9jb2x1bW5TaXplKSB8fCAxKTtcclxuICAgICAgICAgICAgY29uc3QgZHJhd0l0ZW1IYW5kbGVyID0gcGx1Z2luQ29udGV4dC5pdGVtVGVtcGxhdGVIYW5kbGVyO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHRhZ3NIVE1MID0gJyc7XHJcbiAgICAgICAgICAgIGxldCBsaXN0SFRNTCA9ICc8ZGl2IGNsYXNzPVwic2UtZmlsZS1pdGVtLWNvbHVtblwiPic7XHJcbiAgICAgICAgICAgIGxldCBjb2x1bW5zID0gMTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGl0ZW0sIHRhZ3M7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICAgICAgdGFncyA9ICFpdGVtLnRhZyA/IFtdIDogdHlwZW9mIGl0ZW0udGFnID09PSAnc3RyaW5nJyA/IGl0ZW0udGFnLnNwbGl0KCcsJykgOiBpdGVtLnRhZztcclxuICAgICAgICAgICAgICAgIHRhZ3MgPSBpdGVtLnRhZyA9IHRhZ3MubWFwKGZ1bmN0aW9uICh2KSB7IHJldHVybiB2LnRyaW0oKTsgfSk7XHJcbiAgICAgICAgICAgICAgICBsaXN0SFRNTCArPSBkcmF3SXRlbUhhbmRsZXIoaXRlbSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKChpICsgMSkgJSBzcGxpdFNpemUgPT09IDAgJiYgY29sdW1ucyA8IGNvbHVtblNpemUgJiYgKGkgKyAxKSA8IGxlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMrKztcclxuICAgICAgICAgICAgICAgICAgICBsaXN0SFRNTCArPSAnPC9kaXY+PGRpdiBjbGFzcz1cInNlLWZpbGUtaXRlbS1jb2x1bW5cIj4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAodXBkYXRlICYmIHRhZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHQgPSAwLCB0TGVuID0gdGFncy5sZW5ndGgsIHRhZzsgdCA8IHRMZW47IHQrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWcgPSB0YWdzW3RdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnICYmIF90YWdzLmluZGV4T2YodGFnKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90YWdzLnB1c2godGFnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ3NIVE1MICs9ICc8YSB0aXRsZT1cIicgKyB0YWcgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyB0YWcgKyAnXCI+JyArIHRhZyArICc8L2E+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaXN0SFRNTCArPSAnPC9kaXY+JztcclxuXHJcbiAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC5saXN0LmlubmVySFRNTCA9IGxpc3RIVE1MO1xyXG5cclxuICAgICAgICAgICAgaWYgKHVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0Lml0ZW1zID0gaXRlbXM7XHJcbiAgICAgICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQudGFnQXJlYS5pbm5lckhUTUwgPSB0YWdzSFRNTDtcclxuICAgICAgICAgICAgICAgIGZpbGVCcm93c2VyQ29udGV4dC50YWdFbGVtZW50cyA9IGZpbGVCcm93c2VyQ29udGV4dC50YWdBcmVhLnF1ZXJ5U2VsZWN0b3JBbGwoJ0EnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uQ2xpY2tUYWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0O1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudXRpbC5pc0FuY2hvcih0YXJnZXQpKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0YWdOYW1lID0gdGFyZ2V0LnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlQnJvd3NlclBsdWdpbiA9IHRoaXMucGx1Z2lucy5maWxlQnJvd3NlcjtcclxuICAgICAgICAgICAgY29uc3QgZmlsZUJyb3dzZXJDb250ZXh0ID0gdGhpcy5jb250ZXh0LmZpbGVCcm93c2VyO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0VGFnID0gZmlsZUJyb3dzZXJDb250ZXh0LnRhZ0FyZWEucXVlcnlTZWxlY3RvcignYVt0aXRsZT1cIicgKyB0YWdOYW1lICsgJ1wiXScpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFRhZ3MgPSBmaWxlQnJvd3NlckNvbnRleHQuc2VsZWN0ZWRUYWdzO1xyXG4gICAgICAgICAgICBjb25zdCBzVGFnSW5kZXggPSBzZWxlY3RlZFRhZ3MuaW5kZXhPZih0YWdOYW1lKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzVGFnSW5kZXggPiAtMSl7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRhZ3Muc3BsaWNlKHNUYWdJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3Moc2VsZWN0VGFnLCAnb24nKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVGFncy5wdXNoKHRhZ05hbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKHNlbGVjdFRhZywgJ29uJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZpbGVCcm93c2VyUGx1Z2luLl9kcmF3TGlzdEl0ZW0uY2FsbCh0aGlzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUYWdzLmxlbmd0aCA9PT0gMCA/XHJcbiAgICAgICAgICAgICAgICBmaWxlQnJvd3NlckNvbnRleHQuaXRlbXMgOlxyXG4gICAgICAgICAgICAgICAgZmlsZUJyb3dzZXJDb250ZXh0Lml0ZW1zLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnRhZy5zb21lKGZ1bmN0aW9uICh0YWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkVGFncy5pbmRleE9mKHRhZykgPiAtMTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pLCBmYWxzZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25DbGlja0ZpbGU6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVCcm93c2VyQ29udGV4dCA9IHRoaXMuY29udGV4dC5maWxlQnJvd3NlcjtcclxuICAgICAgICAgICAgY29uc3QgbGlzdEVsID0gZmlsZUJyb3dzZXJDb250ZXh0Lmxpc3Q7XHJcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgICAgICAgICAgbGV0IGNvbW1hbmQgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gbGlzdEVsKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAobGlzdEVsICE9PSB0YXJnZXQucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmQpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghY29tbWFuZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IChmaWxlQnJvd3NlckNvbnRleHQuc2VsZWN0b3JIYW5kbGVyIHx8IHRoaXMuY29udGV4dFtmaWxlQnJvd3NlckNvbnRleHQuY29udGV4dFBsdWdpbl0uc2VsZWN0b3JIYW5kbGVyKTtcclxuICAgICAgICAgICAgaGFuZGxlcih0YXJnZXQsIHRhcmdldC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoJy5fX3NlX19pbWdfbmFtZScpLnRleHRDb250ZW50KTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVCcm93c2VyLmNsb3NlLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodHlwZW9mIG5vR2xvYmFsID09PSB0eXBlb2YgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKCF3aW5kb3cuU1VORURJVE9SX01PRFVMRVMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ1NVTkVESVRPUl9NT0RVTEVTJywge1xyXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZToge31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNVTkVESVRPUl9NT0RVTEVTLCAnZmlsZUJyb3dzZXInLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsdWU6IGZpbGVCcm93c2VyXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVCcm93c2VyO1xyXG59KSk7IiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XHJcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cclxuICAgICAgICAgICAgZmFjdG9yeShnbG9iYWwsIHRydWUpIDpcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHcpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdy5kb2N1bWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU1VORURJVE9SX0xBTkcgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeSh3KTtcclxuICAgICAgICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmFjdG9yeShnbG9iYWwpO1xyXG4gICAgfVxyXG59KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24gKHdpbmRvdywgbm9HbG9iYWwpIHtcclxuICAgIGNvbnN0IGxhbmcgPSB7XHJcbiAgICAgICAgY29kZTogJ2VuJyxcclxuICAgICAgICB0b29sYmFyOiB7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdEZWZhdWx0JyxcclxuICAgICAgICAgICAgc2F2ZTogJ1NhdmUnLFxyXG4gICAgICAgICAgICBmb250OiAnRm9udCcsXHJcbiAgICAgICAgICAgIGZvcm1hdHM6ICdGb3JtYXRzJyxcclxuICAgICAgICAgICAgZm9udFNpemU6ICdTaXplJyxcclxuICAgICAgICAgICAgYm9sZDogJ0JvbGQnLFxyXG4gICAgICAgICAgICB1bmRlcmxpbmU6ICdVbmRlcmxpbmUnLFxyXG4gICAgICAgICAgICBpdGFsaWM6ICdJdGFsaWMnLFxyXG4gICAgICAgICAgICBzdHJpa2U6ICdTdHJpa2UnLFxyXG4gICAgICAgICAgICBzdWJzY3JpcHQ6ICdTdWJzY3JpcHQnLFxyXG4gICAgICAgICAgICBzdXBlcnNjcmlwdDogJ1N1cGVyc2NyaXB0JyxcclxuICAgICAgICAgICAgcmVtb3ZlRm9ybWF0OiAnUmVtb3ZlIEZvcm1hdCcsXHJcbiAgICAgICAgICAgIGZvbnRDb2xvcjogJ0ZvbnQgQ29sb3InLFxyXG4gICAgICAgICAgICBoaWxpdGVDb2xvcjogJ0hpZ2hsaWdodCBDb2xvcicsXHJcbiAgICAgICAgICAgIGluZGVudDogJ0luZGVudCcsXHJcbiAgICAgICAgICAgIG91dGRlbnQ6ICdPdXRkZW50JyxcclxuICAgICAgICAgICAgYWxpZ246ICdBbGlnbicsXHJcbiAgICAgICAgICAgIGFsaWduTGVmdDogJ0FsaWduIGxlZnQnLFxyXG4gICAgICAgICAgICBhbGlnblJpZ2h0OiAnQWxpZ24gcmlnaHQnLFxyXG4gICAgICAgICAgICBhbGlnbkNlbnRlcjogJ0FsaWduIGNlbnRlcicsXHJcbiAgICAgICAgICAgIGFsaWduSnVzdGlmeTogJ0FsaWduIGp1c3RpZnknLFxyXG4gICAgICAgICAgICBsaXN0OiAnTGlzdCcsXHJcbiAgICAgICAgICAgIG9yZGVyTGlzdDogJ09yZGVyZWQgbGlzdCcsXHJcbiAgICAgICAgICAgIHVub3JkZXJMaXN0OiAnVW5vcmRlcmVkIGxpc3QnLFxyXG4gICAgICAgICAgICBob3Jpem9udGFsUnVsZTogJ0hvcml6b250YWwgbGluZScsXHJcbiAgICAgICAgICAgIGhyX3NvbGlkOiAnU29saWQnLFxyXG4gICAgICAgICAgICBocl9kb3R0ZWQ6ICdEb3R0ZWQnLFxyXG4gICAgICAgICAgICBocl9kYXNoZWQ6ICdEYXNoZWQnLFxyXG4gICAgICAgICAgICB0YWJsZTogJ1RhYmxlJyxcclxuICAgICAgICAgICAgbGluazogJ0xpbmsnLFxyXG4gICAgICAgICAgICBtYXRoOiAnTWF0aCcsXHJcbiAgICAgICAgICAgIGltYWdlOiAnSW1hZ2UnLFxyXG4gICAgICAgICAgICB2aWRlbzogJ1ZpZGVvJyxcclxuICAgICAgICAgICAgYXVkaW86ICdBdWRpbycsXHJcbiAgICAgICAgICAgIGZ1bGxTY3JlZW46ICdGdWxsIHNjcmVlbicsXHJcbiAgICAgICAgICAgIHNob3dCbG9ja3M6ICdTaG93IGJsb2NrcycsXHJcbiAgICAgICAgICAgIGNvZGVWaWV3OiAnQ29kZSB2aWV3JyxcclxuICAgICAgICAgICAgdW5kbzogJ1VuZG8nLFxyXG4gICAgICAgICAgICByZWRvOiAnUmVkbycsXHJcbiAgICAgICAgICAgIHByZXZpZXc6ICdQcmV2aWV3JyxcclxuICAgICAgICAgICAgcHJpbnQ6ICdwcmludCcsXHJcbiAgICAgICAgICAgIHRhZ19wOiAnUGFyYWdyYXBoJyxcclxuICAgICAgICAgICAgdGFnX2RpdjogJ05vcm1hbCAoRElWKScsXHJcbiAgICAgICAgICAgIHRhZ19oOiAnSGVhZGVyJyxcclxuICAgICAgICAgICAgdGFnX2Jsb2NrcXVvdGU6ICdRdW90ZScsXHJcbiAgICAgICAgICAgIHRhZ19wcmU6ICdDb2RlJyxcclxuICAgICAgICAgICAgdGVtcGxhdGU6ICdUZW1wbGF0ZScsXHJcbiAgICAgICAgICAgIGxpbmVIZWlnaHQ6ICdMaW5lIGhlaWdodCcsXHJcbiAgICAgICAgICAgIHBhcmFncmFwaFN0eWxlOiAnUGFyYWdyYXBoIHN0eWxlJyxcclxuICAgICAgICAgICAgdGV4dFN0eWxlOiAnVGV4dCBzdHlsZScsXHJcbiAgICAgICAgICAgIGltYWdlR2FsbGVyeTogJ0ltYWdlIGdhbGxlcnknLFxyXG4gICAgICAgICAgICBkaXJfbHRyOiAnTGVmdCB0byByaWdodCcsXHJcbiAgICAgICAgICAgIGRpcl9ydGw6ICdSaWdodCB0byBsZWZ0JyxcclxuICAgICAgICAgICAgbWVudGlvbjogJ01lbnRpb24nXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkaWFsb2dCb3g6IHtcclxuICAgICAgICAgICAgbGlua0JveDoge1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdJbnNlcnQgTGluaycsXHJcbiAgICAgICAgICAgICAgICB1cmw6ICdVUkwgdG8gbGluaycsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiAnVGV4dCB0byBkaXNwbGF5JyxcclxuICAgICAgICAgICAgICAgIG5ld1dpbmRvd0NoZWNrOiAnT3BlbiBpbiBuZXcgd2luZG93JyxcclxuICAgICAgICAgICAgICAgIGRvd25sb2FkTGlua0NoZWNrOiAnRG93bmxvYWQgbGluaycsXHJcbiAgICAgICAgICAgICAgICBib29rbWFyazogJ0Jvb2ttYXJrJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtYXRoQm94OiB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogJ01hdGgnLFxyXG4gICAgICAgICAgICAgICAgaW5wdXRMYWJlbDogJ01hdGhlbWF0aWNhbCBOb3RhdGlvbicsXHJcbiAgICAgICAgICAgICAgICBmb250U2l6ZUxhYmVsOiAnRm9udCBTaXplJyxcclxuICAgICAgICAgICAgICAgIHByZXZpZXdMYWJlbDogJ1ByZXZpZXcnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGltYWdlQm94OiB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0luc2VydCBpbWFnZScsXHJcbiAgICAgICAgICAgICAgICBmaWxlOiAnU2VsZWN0IGZyb20gZmlsZXMnLFxyXG4gICAgICAgICAgICAgICAgdXJsOiAnSW1hZ2UgVVJMJyxcclxuICAgICAgICAgICAgICAgIGFsdFRleHQ6ICdBbHRlcm5hdGl2ZSB0ZXh0J1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB2aWRlb0JveDoge1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdJbnNlcnQgVmlkZW8nLFxyXG4gICAgICAgICAgICAgICAgZmlsZTogJ1NlbGVjdCBmcm9tIGZpbGVzJyxcclxuICAgICAgICAgICAgICAgIHVybDogJ01lZGlhIGVtYmVkIFVSTCwgWW91VHViZS9WaW1lbydcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYXVkaW9Cb3g6IHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiAnSW5zZXJ0IEF1ZGlvJyxcclxuICAgICAgICAgICAgICAgIGZpbGU6ICdTZWxlY3QgZnJvbSBmaWxlcycsXHJcbiAgICAgICAgICAgICAgICB1cmw6ICdBdWRpbyBVUkwnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGJyb3dzZXI6IHtcclxuICAgICAgICAgICAgICAgIHRhZ3M6ICdUYWdzJyxcclxuICAgICAgICAgICAgICAgIHNlYXJjaDogJ1NlYXJjaCcsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhcHRpb246ICdJbnNlcnQgZGVzY3JpcHRpb24nLFxyXG4gICAgICAgICAgICBjbG9zZTogJ0Nsb3NlJyxcclxuICAgICAgICAgICAgc3VibWl0QnV0dG9uOiAnU3VibWl0JyxcclxuICAgICAgICAgICAgcmV2ZXJ0QnV0dG9uOiAnUmV2ZXJ0JyxcclxuICAgICAgICAgICAgcHJvcG9ydGlvbjogJ0NvbnN0cmFpbiBwcm9wb3J0aW9ucycsXHJcbiAgICAgICAgICAgIGJhc2ljOiAnQmFzaWMnLFxyXG4gICAgICAgICAgICBsZWZ0OiAnTGVmdCcsXHJcbiAgICAgICAgICAgIHJpZ2h0OiAnUmlnaHQnLFxyXG4gICAgICAgICAgICBjZW50ZXI6ICdDZW50ZXInLFxyXG4gICAgICAgICAgICB3aWR0aDogJ1dpZHRoJyxcclxuICAgICAgICAgICAgaGVpZ2h0OiAnSGVpZ2h0JyxcclxuICAgICAgICAgICAgc2l6ZTogJ1NpemUnLFxyXG4gICAgICAgICAgICByYXRpbzogJ1JhdGlvJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29udHJvbGxlcjoge1xyXG4gICAgICAgICAgICBlZGl0OiAnRWRpdCcsXHJcbiAgICAgICAgICAgIHVubGluazogJ1VubGluaycsXHJcbiAgICAgICAgICAgIHJlbW92ZTogJ1JlbW92ZScsXHJcbiAgICAgICAgICAgIGluc2VydFJvd0Fib3ZlOiAnSW5zZXJ0IHJvdyBhYm92ZScsXHJcbiAgICAgICAgICAgIGluc2VydFJvd0JlbG93OiAnSW5zZXJ0IHJvdyBiZWxvdycsXHJcbiAgICAgICAgICAgIGRlbGV0ZVJvdzogJ0RlbGV0ZSByb3cnLFxyXG4gICAgICAgICAgICBpbnNlcnRDb2x1bW5CZWZvcmU6ICdJbnNlcnQgY29sdW1uIGJlZm9yZScsXHJcbiAgICAgICAgICAgIGluc2VydENvbHVtbkFmdGVyOiAnSW5zZXJ0IGNvbHVtbiBhZnRlcicsXHJcbiAgICAgICAgICAgIGRlbGV0ZUNvbHVtbjogJ0RlbGV0ZSBjb2x1bW4nLFxyXG4gICAgICAgICAgICBmaXhlZENvbHVtbldpZHRoOiAnRml4ZWQgY29sdW1uIHdpZHRoJyxcclxuICAgICAgICAgICAgcmVzaXplMTAwOiAnUmVzaXplIDEwMCUnLFxyXG4gICAgICAgICAgICByZXNpemU3NTogJ1Jlc2l6ZSA3NSUnLFxyXG4gICAgICAgICAgICByZXNpemU1MDogJ1Jlc2l6ZSA1MCUnLFxyXG4gICAgICAgICAgICByZXNpemUyNTogJ1Jlc2l6ZSAyNSUnLFxyXG4gICAgICAgICAgICBhdXRvU2l6ZTogJ0F1dG8gc2l6ZScsXHJcbiAgICAgICAgICAgIG1pcnJvckhvcml6b250YWw6ICdNaXJyb3IsIEhvcml6b250YWwnLFxyXG4gICAgICAgICAgICBtaXJyb3JWZXJ0aWNhbDogJ01pcnJvciwgVmVydGljYWwnLFxyXG4gICAgICAgICAgICByb3RhdGVMZWZ0OiAnUm90YXRlIGxlZnQnLFxyXG4gICAgICAgICAgICByb3RhdGVSaWdodDogJ1JvdGF0ZSByaWdodCcsXHJcbiAgICAgICAgICAgIG1heFNpemU6ICdNYXggc2l6ZScsXHJcbiAgICAgICAgICAgIG1pblNpemU6ICdNaW4gc2l6ZScsXHJcbiAgICAgICAgICAgIHRhYmxlSGVhZGVyOiAnVGFibGUgaGVhZGVyJyxcclxuICAgICAgICAgICAgbWVyZ2VDZWxsczogJ01lcmdlIGNlbGxzJyxcclxuICAgICAgICAgICAgc3BsaXRDZWxsczogJ1NwbGl0IENlbGxzJyxcclxuICAgICAgICAgICAgSG9yaXpvbnRhbFNwbGl0OiAnSG9yaXpvbnRhbCBzcGxpdCcsXHJcbiAgICAgICAgICAgIFZlcnRpY2FsU3BsaXQ6ICdWZXJ0aWNhbCBzcGxpdCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1lbnU6IHtcclxuICAgICAgICAgICAgc3BhY2VkOiAnU3BhY2VkJyxcclxuICAgICAgICAgICAgYm9yZGVyZWQ6ICdCb3JkZXJlZCcsXHJcbiAgICAgICAgICAgIG5lb246ICdOZW9uJyxcclxuICAgICAgICAgICAgdHJhbnNsdWNlbnQ6ICdUcmFuc2x1Y2VudCcsXHJcbiAgICAgICAgICAgIHNoYWRvdzogJ1NoYWRvdycsXHJcbiAgICAgICAgICAgIGNvZGU6ICdDb2RlJ1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgaWYgKHR5cGVvZiBub0dsb2JhbCA9PT0gdHlwZW9mIHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICghd2luZG93LlNVTkVESVRPUl9MQU5HKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdTVU5FRElUT1JfTEFORycsIHtcclxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHt9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5TVU5FRElUT1JfTEFORywgJ2VuJywge1xyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB2YWx1ZTogbGFuZ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYW5nO1xyXG59KSk7IiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxOCBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdjb2xvclBpY2tlcicsXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb25zdHJ1Y3RvclxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3QgXHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnRleHQuY29sb3JQaWNrZXIgPSB7XHJcbiAgICAgICAgICAgIGNvbG9yTGlzdEhUTUw6ICcnLFxyXG4gICAgICAgICAgICBfY29sb3JJbnB1dDogJycsXHJcbiAgICAgICAgICAgIF9kZWZhdWx0Q29sb3I6ICcjMDAwJyxcclxuICAgICAgICAgICAgX3N0eWxlUHJvcGVydHk6ICdjb2xvcicsXHJcbiAgICAgICAgICAgIF9jdXJyZW50Q29sb3I6ICcnLFxyXG4gICAgICAgICAgICBfY29sb3JMaXN0OiBbXVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xyXG4gICAgICAgIGNvbnRleHQuY29sb3JQaWNrZXIuY29sb3JMaXN0SFRNTCA9IHRoaXMuY3JlYXRlQ29sb3JMaXN0KGNvcmUsIHRoaXMuX21ha2VDb2xvckxpc3QpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGUgY29sb3IgbGlzdFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3QgXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtYWtlQ29sb3IgdGhpcy5fbWFrZUNvbG9yTGlzdFxyXG4gICAgICogQHJldHVybnMge1N0cmluZ30gSFRNTCBzdHJpbmdcclxuICAgICAqL1xyXG4gICAgY3JlYXRlQ29sb3JMaXN0OiBmdW5jdGlvbiAoY29yZSwgbWFrZUNvbG9yKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gY29yZS5vcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XHJcbiAgICAgICAgY29uc3QgY29sb3JMaXN0ID0gIW9wdGlvbi5jb2xvckxpc3QgfHwgb3B0aW9uLmNvbG9yTGlzdC5sZW5ndGggPT09IDAgP1xyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAnI2ZmMDAwMCcsICcjZmY1ZTAwJywgJyNmZmU0MDAnLCAnI2FiZjIwMCcsICcjMDBkOGZmJywgJyMwMDU1ZmYnLCAnIzY2MDBmZicsICcjZmYwMGRkJywgJyMwMDAwMDAnLFxyXG4gICAgICAgICAgICAgICAgJyNmZmQ4ZDgnLCAnI2ZhZTBkNCcsICcjZmFmNGMwJywgJyNlNGY3YmEnLCAnI2Q0ZjRmYScsICcjZDllNWZmJywgJyNlOGQ5ZmYnLCAnI2ZmZDlmYScsICcjZjFmMWYxJyxcclxuICAgICAgICAgICAgICAgICcjZmZhN2E3JywgJyNmZmMxOWUnLCAnI2ZhZWQ3ZCcsICcjY2VmMjc5JywgJyNiMmViZjQnLCAnI2IyY2NmZicsICcjZDFiMmZmJywgJyNmZmIyZjUnLCAnI2JkYmRiZCcsXHJcbiAgICAgICAgICAgICAgICAnI2YxNWY1ZicsICcjZjI5NjYxJywgJyNlNWQ4NWMnLCAnI2JjZTU1YycsICcjNWNkMWU1JywgJyM2Njk5ZmYnLCAnI2EzNjZmZicsICcjZjI2MWRmJywgJyM4YzhjOGMnLFxyXG4gICAgICAgICAgICAgICAgJyM5ODAwMDAnLCAnIzk5MzgwMCcsICcjOTk4YTAwJywgJyM2Yjk5MDAnLCAnIzAwODI5OScsICcjMDAzMzk5JywgJyMzZDAwOTknLCAnIzk5MDA4NScsICcjMzUzNTM1JyxcclxuICAgICAgICAgICAgICAgICcjNjcwMDAwJywgJyM2NjI1MDAnLCAnIzY2NWMwMCcsICcjNDc2NjAwJywgJyMwMDU3NjYnLCAnIzAwMjI2NicsICcjMjkwMDY2JywgJyM2NjAwNTgnLCAnIzIyMjIyMidcclxuICAgICAgICAgICAgXSA6IG9wdGlvbi5jb2xvckxpc3Q7XHJcblxyXG4gICAgICAgIGxldCBjb2xvckFyciA9IFtdO1xyXG4gICAgICAgIGxldCBsaXN0ID0gJzxkaXYgY2xhc3M9XCJzZS1saXN0LWlubmVyXCI+JztcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNvbG9yTGlzdC5sZW5ndGgsIGNvbG9yOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JMaXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjb2xvcikgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3JBcnIucHVzaChjb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBsZW4gLSAxKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjb2xvckFyci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdCArPSAnPGRpdiBjbGFzcz1cInNlLXNlbGVjdG9yLWNvbG9yXCI+JyArIG1ha2VDb2xvcihjb2xvckFycikgKyAnPC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICBjb2xvckFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0ICs9ICc8ZGl2IGNsYXNzPVwic2Utc2VsZWN0b3ItY29sb3JcIj4nICsgbWFrZUNvbG9yKGNvbG9yKSArICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxpc3QgKz0gJycgK1xyXG4gICAgICAgICAgICAnPGZvcm0gY2xhc3M9XCJzZS1mb3JtLWdyb3VwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF4bGVuZ3RoPVwiOVwiIGNsYXNzPVwiX3NlX2NvbG9yX3BpY2tlcl9pbnB1dCBzZS1jb2xvci1pbnB1dFwiLz4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cInNlLWJ0bi1wcmltYXJ5IF9zZV9jb2xvcl9waWNrZXJfc3VibWl0XCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuaWNvbnMuY2hlY2tlZCArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4gX3NlX2NvbG9yX3BpY2tlcl9yZW1vdmVcIiB0aXRsZT1cIicgKyBsYW5nLnRvb2xiYXIucmVtb3ZlRm9ybWF0ICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgbGFuZy50b29sYmFyLnJlbW92ZUZvcm1hdCArICdcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLmljb25zLmVyYXNlICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgJzwvZm9ybT4nICtcclxuICAgICAgICAgICAgJzwvZGl2Pic7XHJcblxyXG4gICAgICAgIHJldHVybiBsaXN0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGJ5IHRoaXMuY3JlYXRlQ29sb3JMaXN0XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBjb2xvckxpc3QgQ29sb3IgbGlzdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX21ha2VDb2xvckxpc3Q6IGZ1bmN0aW9uIChjb2xvckxpc3QpIHtcclxuICAgICAgICBsZXQgbGlzdCA9ICcnO1xyXG5cclxuICAgICAgICBsaXN0ICs9ICc8dWwgY2xhc3M9XCJzZS1jb2xvci1wYWxsZXRcIj4nO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjb2xvckxpc3QubGVuZ3RoLCBjb2xvcjsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbG9yID0gY29sb3JMaXN0W2ldO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgbGlzdCArPSAnPGxpPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtdmFsdWU9XCInICsgY29sb3IgKyAnXCIgdGl0bGU9XCInICsgY29sb3IgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBjb2xvciArICdcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6JyArIGNvbG9yICsgJztcIj48L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzwvbGk+JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsaXN0ICs9ICc8L3VsPic7XHJcblxyXG4gICAgICAgIHJldHVybiBsaXN0O1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRGlzcGxheXMgb3IgcmVzZXRzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY29sb3IgYXQgY29sb3IgbGlzdC5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBDdXJyZW50IFNlbGVjdGVkIG5vZGVcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfG51bGx9IGNvbG9yIENvbG9yIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uIChub2RlLCBjb2xvcikge1xyXG4gICAgICAgIGNvbnN0IGNvbG9yUGlja2VyID0gdGhpcy5wbHVnaW5zLmNvbG9yUGlja2VyO1xyXG4gICAgICAgIGxldCBmaWxsQ29sb3IgPSBjb2xvciA/IGNvbG9yIDogY29sb3JQaWNrZXIuZ2V0Q29sb3JJbk5vZGUuY2FsbCh0aGlzLCBub2RlKSB8fCB0aGlzLmNvbnRleHQuY29sb3JQaWNrZXIuX2RlZmF1bHRDb2xvcjtcclxuICAgICAgICBmaWxsQ29sb3IgPSBjb2xvclBpY2tlci5pc0hleENvbG9yKGZpbGxDb2xvcikgPyBmaWxsQ29sb3IgOiBjb2xvclBpY2tlci5yZ2IyaGV4KGZpbGxDb2xvcikgfHwgZmlsbENvbG9yO1xyXG5cclxuICAgICAgICBjb25zdCBjb2xvckxpc3QgPSB0aGlzLmNvbnRleHQuY29sb3JQaWNrZXIuX2NvbG9yTGlzdDtcclxuICAgICAgICBpZiAoY29sb3JMaXN0KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjb2xvckxpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChmaWxsQ29sb3IudG9Mb3dlckNhc2UoKSA9PT0gY29sb3JMaXN0W2ldLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoY29sb3JMaXN0W2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhjb2xvckxpc3RbaV0sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29sb3JQaWNrZXIuc2V0SW5wdXRUZXh0LmNhbGwodGhpcywgY29sb3JQaWNrZXIuY29sb3JOYW1lMmhleC5jYWxsKHRoaXMsIGZpbGxDb2xvcikpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTdG9yZSBjb2xvciB2YWx1ZXNcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBoZXhDb2xvclN0ciBIYXggY29sb3IgdmFsdWVcclxuICAgICAqL1xyXG4gICAgc2V0Q3VycmVudENvbG9yOiBmdW5jdGlvbiAoaGV4Q29sb3JTdHIpIHtcclxuICAgICAgICB0aGlzLmNvbnRleHQuY29sb3JQaWNrZXIuX2N1cnJlbnRDb2xvciA9IGhleENvbG9yU3RyO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5jb2xvclBpY2tlci5fY29sb3JJbnB1dC5zdHlsZS5ib3JkZXJDb2xvciA9IGhleENvbG9yU3RyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXQgY29sb3IgYXQgaW5wdXQgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhleENvbG9yU3RyIEhheCBjb2xvciB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRJbnB1dFRleHQ6IGZ1bmN0aW9uIChoZXhDb2xvclN0cikge1xyXG4gICAgICAgIGhleENvbG9yU3RyID0gL14jLy50ZXN0KGhleENvbG9yU3RyKSA/IGhleENvbG9yU3RyIDogJyMnICsgaGV4Q29sb3JTdHI7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmNvbG9yUGlja2VyLl9jb2xvcklucHV0LnZhbHVlID0gaGV4Q29sb3JTdHI7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmNvbG9yUGlja2VyLnNldEN1cnJlbnRDb2xvci5jYWxsKHRoaXMsIGhleENvbG9yU3RyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyBjb2xvciB2YWx1ZSBhdCBjb2xvciBwcm9wZXJ0eSBvZiBub2RlXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgU2VsZWN0ZWQgbm9kZSBcclxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGdldENvbG9ySW5Ob2RlOiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIGxldCBmaW5kQ29sb3IgPSAnJztcclxuICAgICAgICBjb25zdCBzdHlsZVByb3BlcnR5ID0gdGhpcy5jb250ZXh0LmNvbG9yUGlja2VyLl9zdHlsZVByb3BlcnR5O1xyXG5cclxuICAgICAgICB3aGlsZSAobm9kZSAmJiAhdGhpcy51dGlsLmlzV3lzaXd5Z0Rpdihub2RlKSAmJiBmaW5kQ29sb3IubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxICYmIG5vZGUuc3R5bGVbc3R5bGVQcm9wZXJ0eV0pIGZpbmRDb2xvciA9IG5vZGUuc3R5bGVbc3R5bGVQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmluZENvbG9yO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBGdW5jdGlvbiB0byBjaGVjayBoZXggZm9ybWF0IGNvbG9yXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyIENvbG9yIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIGlzSGV4Q29sb3I6IGZ1bmN0aW9uIChzdHIpIHtcclxuICAgICAgICByZXR1cm4gL14jWzAtOWEtZl17M30oPzpbMC05YS1mXXszfSk/JC9pLnRlc3Qoc3RyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRnVuY3Rpb24gdG8gY29udmVydCBoZXggZm9ybWF0IHRvIGEgcmdiIGNvbG9yXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcmdiIFJHQiBjb2xvciBmb3JtYXRcclxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHJnYjJoZXg6IGZ1bmN0aW9uIChyZ2IpIHtcclxuICAgICAgICBjb25zdCByZ2JNYXRjaCA9IHJnYi5tYXRjaCgvXnJnYmE/W1xccytdP1xcKFtcXHMrXT8oXFxkKylbXFxzK10/LFtcXHMrXT8oXFxkKylbXFxzK10/LFtcXHMrXT8oXFxkKylbXFxzK10/L2kpO1xyXG5cclxuICAgICAgICByZXR1cm4gKHJnYk1hdGNoICYmIHJnYk1hdGNoLmxlbmd0aCA9PT0gNCkgPyBcIiNcIiArXHJcbiAgICAgICAgICAgIChcIjBcIiArIHBhcnNlSW50KHJnYk1hdGNoWzFdLDEwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKSArXHJcbiAgICAgICAgICAgIChcIjBcIiArIHBhcnNlSW50KHJnYk1hdGNoWzJdLDEwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKSArXHJcbiAgICAgICAgICAgIChcIjBcIiArIHBhcnNlSW50KHJnYk1hdGNoWzNdLDEwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKSA6ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBjb2xvciB2YWx1ZXMgb2Ygb3RoZXIgZm9ybWF0cyB0byBoZXggY29sb3IgdmFsdWVzIGFuZCByZXR1cm5zLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbG9yTmFtZSBDb2xvciB2YWx1ZVxyXG4gICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAqL1xyXG4gICAgY29sb3JOYW1lMmhleDogZnVuY3Rpb24gKGNvbG9yTmFtZSkge1xyXG4gICAgICAgIGlmICgvXiMvLnRlc3QoY29sb3JOYW1lKSkgcmV0dXJuIGNvbG9yTmFtZTtcclxuICAgICAgICB2YXIgdGVtcCA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICB0ZW1wLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgdGVtcC5zdHlsZS5jb2xvciA9IGNvbG9yTmFtZTtcclxuICAgICAgICB2YXIgY29sb3JzID0gdGhpcy5fdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX2QuYm9keS5hcHBlbmRDaGlsZCh0ZW1wKSkuY29sb3IubWF0Y2goL1xcZCsvZykubWFwKGZ1bmN0aW9uIChhKSB7IHJldHVybiBwYXJzZUludChhLDEwKTsgfSk7XHJcbiAgICAgICAgdGhpcy51dGlsLnJlbW92ZUl0ZW0odGVtcCk7XHJcbiAgICAgICAgcmV0dXJuIChjb2xvcnMubGVuZ3RoID49IDMpID8gJyMnICsgKCgoMSA8PCAyNCkgKyAoY29sb3JzWzBdIDw8IDE2KSArIChjb2xvcnNbMV0gPDwgOCkgKyBjb2xvcnNbMl0pLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkpIDogZmFsc2U7XHJcbiAgICB9XHJcbn07IiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBjb2xvclBpY2tlciBmcm9tICcuLi9tb2R1bGVzL19jb2xvclBpY2tlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnZm9udENvbG9yJyxcclxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcclxuICAgICAgICBjb3JlLmFkZE1vZHVsZShbY29sb3JQaWNrZXJdKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcclxuICAgICAgICBjb250ZXh0LmZvbnRDb2xvciA9IHtcclxuICAgICAgICAgICAgcHJldmlld0VsOiBudWxsLFxyXG4gICAgICAgICAgICBjb2xvcklucHV0OiBudWxsLFxyXG4gICAgICAgICAgICBjb2xvckxpc3Q6IG51bGxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogc2V0IHN1Ym1lbnUgKi9cclxuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcclxuICAgICAgICBjb250ZXh0LmZvbnRDb2xvci5jb2xvcklucHV0ID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbG9yX3BpY2tlcl9pbnB1dCcpO1xyXG5cclxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgIGNvbnRleHQuZm9udENvbG9yLmNvbG9ySW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uQ2hhbmdlSW5wdXQuYmluZChjb3JlKSk7XHJcbiAgICAgICAgbGlzdERpdi5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbG9yX3BpY2tlcl9zdWJtaXQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuc3VibWl0LmJpbmQoY29yZSkpO1xyXG4gICAgICAgIGxpc3REaXYucXVlcnlTZWxlY3RvcignLl9zZV9jb2xvcl9waWNrZXJfcmVtb3ZlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnJlbW92ZS5iaW5kKGNvcmUpKTtcclxuICAgICAgICBsaXN0RGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5waWNrdXAuYmluZChjb3JlKSk7XHJcbiAgICAgICAgY29udGV4dC5mb250Q29sb3IuY29sb3JMaXN0ID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yQWxsKCdsaSBidXR0b24nKTtcclxuXHJcbiAgICAgICAgLyoqIGFwcGVuZCB0YXJnZXQgYnV0dG9uIG1lbnUgKi9cclxuICAgICAgICBjb3JlLmluaXRNZW51VGFyZ2V0KHRoaXMubmFtZSwgdGFyZ2V0RWxlbWVudCwgbGlzdERpdik7XHJcblxyXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICBsaXN0RGl2ID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0U3VibWVudTogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBjb2xvckFyZWEgPSBjb3JlLmNvbnRleHQuY29sb3JQaWNrZXIuY29sb3JMaXN0SFRNTDtcclxuICAgICAgICBjb25zdCBsaXN0RGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG5cclxuICAgICAgICBsaXN0RGl2LmNsYXNzTmFtZSA9ICdzZS1zdWJtZW51IHNlLWxpc3QtbGF5ZXInO1xyXG4gICAgICAgIGxpc3REaXYuaW5uZXJIVE1MID0gY29sb3JBcmVhO1xyXG5cclxuICAgICAgICByZXR1cm4gbGlzdERpdjtcclxuICAgIH0sXHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHN1Ym1lbnVcclxuICAgICAqL1xyXG4gICAgb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0UGlja2VyID0gdGhpcy5jb250ZXh0LmNvbG9yUGlja2VyO1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRGb250Q29sb3IgPSB0aGlzLmNvbnRleHQuZm9udENvbG9yO1xyXG5cclxuICAgICAgICBjb250ZXh0UGlja2VyLl9jb2xvcklucHV0ID0gY29udGV4dEZvbnRDb2xvci5jb2xvcklucHV0O1xyXG4gICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy53d0NvbXB1dGVkU3R5bGUuY29sb3I7XHJcbiAgICAgICAgY29udGV4dFBpY2tlci5fZGVmYXVsdENvbG9yID0gY29sb3IgPyB0aGlzLnBsdWdpbnMuY29sb3JQaWNrZXIuaXNIZXhDb2xvcihjb2xvcikgPyBjb2xvciA6IHRoaXMucGx1Z2lucy5jb2xvclBpY2tlci5yZ2IyaGV4KGNvbG9yKSA6IFwiIzMzMzMzM1wiO1xyXG4gICAgICAgIGNvbnRleHRQaWNrZXIuX3N0eWxlUHJvcGVydHkgPSAnY29sb3InO1xyXG4gICAgICAgIGNvbnRleHRQaWNrZXIuX2NvbG9yTGlzdCA9IGNvbnRleHRGb250Q29sb3IuY29sb3JMaXN0O1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5jb2xvclBpY2tlci5pbml0LmNhbGwodGhpcywgdGhpcy5nZXRTZWxlY3Rpb25Ob2RlKCksIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgX2NvbG9yUGlja2VyXHJcbiAgICAgKi9cclxuICAgIG9uQ2hhbmdlSW5wdXQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmNvbG9yUGlja2VyLnNldEN1cnJlbnRDb2xvci5jYWxsKHRoaXMsIGUudGFyZ2V0LnZhbHVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgc3VibWl0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZvbnRDb2xvci5hcHBseUNvbG9yLmNhbGwodGhpcywgdGhpcy5jb250ZXh0LmNvbG9yUGlja2VyLl9jdXJyZW50Q29sb3IpO1xyXG4gICAgfSxcclxuXHJcbiAgICBwaWNrdXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5mb250Q29sb3IuYXBwbHlDb2xvci5jYWxsKHRoaXMsIGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpKTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlQ2hhbmdlKG51bGwsIFsnY29sb3InXSwgWydzcGFuJ10sIHRydWUpO1xyXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBhcHBseUNvbG9yOiBmdW5jdGlvbiAoY29sb3IpIHtcclxuICAgICAgICBpZiAoIWNvbG9yKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnU1BBTicpO1xyXG4gICAgICAgIG5ld05vZGUuc3R5bGUuY29sb3IgPSBjb2xvcjtcclxuICAgICAgICB0aGlzLm5vZGVDaGFuZ2UobmV3Tm9kZSwgWydjb2xvciddLCBudWxsLCBudWxsKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJtZW51T2ZmKCk7XHJcbiAgICB9XHJcbn07XHJcbiIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5pbXBvcnQgY29sb3JQaWNrZXIgZnJvbSAnLi4vbW9kdWxlcy9fY29sb3JQaWNrZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ2hpbGl0ZUNvbG9yJyxcclxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcclxuICAgICAgICBjb3JlLmFkZE1vZHVsZShbY29sb3JQaWNrZXJdKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcclxuICAgICAgICBjb250ZXh0LmhpbGl0ZUNvbG9yID0ge1xyXG4gICAgICAgICAgICBwcmV2aWV3RWw6IG51bGwsXHJcbiAgICAgICAgICAgIGNvbG9ySW5wdXQ6IG51bGwsXHJcbiAgICAgICAgICAgIGNvbG9yTGlzdDogbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xyXG4gICAgICAgIGxldCBsaXN0RGl2ID0gdGhpcy5zZXRTdWJtZW51KGNvcmUpO1xyXG4gICAgICAgIGNvbnRleHQuaGlsaXRlQ29sb3IuY29sb3JJbnB1dCA9IGxpc3REaXYucXVlcnlTZWxlY3RvcignLl9zZV9jb2xvcl9waWNrZXJfaW5wdXQnKTtcclxuXHJcbiAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICBjb250ZXh0LmhpbGl0ZUNvbG9yLmNvbG9ySW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uQ2hhbmdlSW5wdXQuYmluZChjb3JlKSk7XHJcbiAgICAgICAgbGlzdERpdi5xdWVyeVNlbGVjdG9yKCcuX3NlX2NvbG9yX3BpY2tlcl9zdWJtaXQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuc3VibWl0LmJpbmQoY29yZSkpO1xyXG4gICAgICAgIGxpc3REaXYucXVlcnlTZWxlY3RvcignLl9zZV9jb2xvcl9waWNrZXJfcmVtb3ZlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnJlbW92ZS5iaW5kKGNvcmUpKTtcclxuICAgICAgICBsaXN0RGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5waWNrdXAuYmluZChjb3JlKSk7XHJcblxyXG4gICAgICAgIGNvbnRleHQuaGlsaXRlQ29sb3IuY29sb3JMaXN0ID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yQWxsKCdsaSBidXR0b24nKTtcclxuXHJcbiAgICAgICAgLyoqIGFwcGVuZCB0YXJnZXQgYnV0dG9uIG1lbnUgKi9cclxuICAgICAgICBjb3JlLmluaXRNZW51VGFyZ2V0KHRoaXMubmFtZSwgdGFyZ2V0RWxlbWVudCwgbGlzdERpdik7XHJcblxyXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICBsaXN0RGl2ID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0U3VibWVudTogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBjb2xvckFyZWEgPSBjb3JlLmNvbnRleHQuY29sb3JQaWNrZXIuY29sb3JMaXN0SFRNTDtcclxuICAgICAgICBjb25zdCBsaXN0RGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG5cclxuICAgICAgICBsaXN0RGl2LmNsYXNzTmFtZSA9ICdzZS1zdWJtZW51IHNlLWxpc3QtbGF5ZXInO1xyXG4gICAgICAgIGxpc3REaXYuaW5uZXJIVE1MID0gY29sb3JBcmVhO1xyXG5cclxuICAgICAgICByZXR1cm4gbGlzdERpdjtcclxuICAgIH0sXHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHN1Ym1lbnVcclxuICAgICAqL1xyXG4gICAgb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0UGlja2VyID0gdGhpcy5jb250ZXh0LmNvbG9yUGlja2VyO1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRIaWxpdGVDb2xvciA9IHRoaXMuY29udGV4dC5oaWxpdGVDb2xvcjtcclxuXHJcbiAgICAgICAgY29udGV4dFBpY2tlci5fY29sb3JJbnB1dCA9IGNvbnRleHRIaWxpdGVDb2xvci5jb2xvcklucHV0O1xyXG4gICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy53d0NvbXB1dGVkU3R5bGUuYmFja2dyb3VuZENvbG9yO1xyXG4gICAgICAgIGNvbnRleHRQaWNrZXIuX2RlZmF1bHRDb2xvciA9IGNvbG9yID8gdGhpcy5wbHVnaW5zLmNvbG9yUGlja2VyLmlzSGV4Q29sb3IoY29sb3IpID8gY29sb3IgOiB0aGlzLnBsdWdpbnMuY29sb3JQaWNrZXIucmdiMmhleChjb2xvcikgOiBcIiNmZmZmZmZcIjtcclxuICAgICAgICBjb250ZXh0UGlja2VyLl9zdHlsZVByb3BlcnR5ID0gJ2JhY2tncm91bmRDb2xvcic7XHJcbiAgICAgICAgY29udGV4dFBpY2tlci5fY29sb3JMaXN0ID0gY29udGV4dEhpbGl0ZUNvbG9yLmNvbG9yTGlzdDtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnBsdWdpbnMuY29sb3JQaWNrZXIuaW5pdC5jYWxsKHRoaXMsIHRoaXMuZ2V0U2VsZWN0aW9uTm9kZSgpLCBudWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIF9jb2xvclBpY2tlclxyXG4gICAgICovXHJcbiAgICBvbkNoYW5nZUlucHV0OiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5jb2xvclBpY2tlci5zZXRDdXJyZW50Q29sb3IuY2FsbCh0aGlzLCBlLnRhcmdldC52YWx1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHN1Ym1pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5oaWxpdGVDb2xvci5hcHBseUNvbG9yLmNhbGwodGhpcywgdGhpcy5jb250ZXh0LmNvbG9yUGlja2VyLl9jdXJyZW50Q29sb3IpO1xyXG4gICAgfSxcclxuXHJcbiAgICBwaWNrdXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5oaWxpdGVDb2xvci5hcHBseUNvbG9yLmNhbGwodGhpcywgZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLm5vZGVDaGFuZ2UobnVsbCwgWydiYWNrZ3JvdW5kLWNvbG9yJ10sIFsnc3BhbiddLCB0cnVlKTtcclxuICAgICAgICB0aGlzLnN1Ym1lbnVPZmYoKTtcclxuICAgIH0sXHJcblxyXG4gICAgYXBwbHlDb2xvcjogZnVuY3Rpb24gKGNvbG9yKSB7XHJcbiAgICAgICAgaWYgKCFjb2xvcikgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnU1BBTicpO1xyXG4gICAgICAgIG5ld05vZGUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3I7XHJcbiAgICAgICAgdGhpcy5ub2RlQ2hhbmdlKG5ld05vZGUsIFsnYmFja2dyb3VuZC1jb2xvciddLCBudWxsLCBudWxsKTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN1Ym1lbnVPZmYoKTtcclxuICAgIH1cclxufTtcclxuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICd0ZW1wbGF0ZScsXHJcbiAgICBkaXNwbGF5OiAnc3VibWVudScsXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlLCB0YXJnZXRFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcclxuICAgICAgICBjb250ZXh0LnRlbXBsYXRlID0ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4OiAtMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZURpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcclxuXHJcbiAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICB0ZW1wbGF0ZURpdi5xdWVyeVNlbGVjdG9yKCd1bCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5waWNrdXAuYmluZChjb3JlKSk7XHJcblxyXG4gICAgICAgIC8qKiBhcHBlbmQgdGFyZ2V0IGJ1dHRvbiBtZW51ICovXHJcbiAgICAgICAgY29yZS5pbml0TWVudVRhcmdldCh0aGlzLm5hbWUsIHRhcmdldEVsZW1lbnQsIHRlbXBsYXRlRGl2KTtcclxuXHJcbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xyXG4gICAgICAgIHRlbXBsYXRlRGl2ID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0U3VibWVudTogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxpc3QgPSBjb3JlLm9wdGlvbnMudGVtcGxhdGVzO1xyXG4gICAgICAgIGlmICghdGVtcGxhdGVMaXN0IHx8IHRlbXBsYXRlTGlzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IucGx1Z2lucy50ZW1wbGF0ZS5mYWlsXSBUbyB1c2UgdGhlIFwidGVtcGxhdGVcIiBwbHVnaW4sIHBsZWFzZSBkZWZpbmUgdGhlIFwidGVtcGxhdGVzXCIgb3B0aW9uLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbGlzdERpdiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICBsaXN0RGl2LmNsYXNzTmFtZSA9ICdzZS1saXN0LWxheWVyJztcclxuXHJcbiAgICAgICAgbGV0IGxpc3QgPSAnPGRpdiBjbGFzcz1cInNlLXN1Ym1lbnUgc2UtbGlzdC1pbm5lclwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzx1bCBjbGFzcz1cInNlLWxpc3QtYmFzaWNcIj4nO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0ZW1wbGF0ZUxpc3QubGVuZ3RoLCB0OyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdCA9IHRlbXBsYXRlTGlzdFtpXTtcclxuICAgICAgICAgICAgbGlzdCArPSAnPGxpPjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3RcIiBkYXRhLXZhbHVlPVwiJyArIGkgKyAnXCIgdGl0bGU9XCInICsgdC5uYW1lICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgdC5uYW1lICsgJ1wiPicgKyB0Lm5hbWUgKyAnPC9idXR0b24+PC9saT4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaXN0ICs9ICc8L3VsPjwvZGl2Pic7XHJcblxyXG4gICAgICAgIGxpc3REaXYuaW5uZXJIVE1MID0gbGlzdDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpc3REaXY7XHJcbiAgICB9LFxyXG5cclxuICAgIHBpY2t1cDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoIS9eQlVUVE9OJC9pLnRlc3QoZS50YXJnZXQudGFnTmFtZSkpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIHRoaXMuY29udGV4dC50ZW1wbGF0ZS5zZWxlY3RlZEluZGV4ID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykgKiAxO1xyXG4gICAgICAgIGNvbnN0IHRlbXAgPSB0aGlzLm9wdGlvbnMudGVtcGxhdGVzW3RoaXMuY29udGV4dC50ZW1wbGF0ZS5zZWxlY3RlZEluZGV4XTtcclxuXHJcbiAgICAgICAgaWYgKHRlbXAuaHRtbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRlbnRzKHRlbXAuaHRtbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJtZW51T2ZmKCk7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLnRlbXBsYXRlLmZhaWxdIGNhdXNlIDogXCJ0ZW1wbGF0ZXNbaV0uaHRtbCBub3QgZm91bmRcIicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnN1Ym1lbnVPZmYoKTtcclxuICAgIH1cclxufTsiLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE4IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ3NlbGVjdE1lbnUnLFxyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvcmUuY29udGV4dC5zZWxlY3RNZW51ID0ge1xyXG4gICAgICAgICAgICBjYWxsZXI6IHt9LFxyXG4gICAgICAgICAgICBjYWxsZXJDb250ZXh0OiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0Rm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz1cInNlLXNlbGVjdC1saXN0XCI+PC9kaXY+JztcclxuICAgIH0sXHJcblxyXG4gICAgY3JlYXRlTGlzdDogZnVuY3Rpb24gKGxpc3RDb250ZXh0LCBpdGVtcywgaHRtbCkge1xyXG4gICAgICAgIGxpc3RDb250ZXh0LmZvcm0uaW5uZXJIVE1MID0gJzx1bD4nICsgaHRtbCArICc8L3VsPic7XHJcbiAgICAgICAgbGlzdENvbnRleHQuaXRlbXMgPSBpdGVtcztcclxuICAgICAgICBsaXN0Q29udGV4dC5tZW51cyA9IGxpc3RDb250ZXh0LmZvcm0ucXVlcnlTZWxlY3RvckFsbCgnbGknKTtcclxuICAgIH0sXHJcblxyXG4gICAgaW5pdEV2ZW50OiBmdW5jdGlvbiAocGx1Z2luTmFtZSwgZm9ybXMpIHtcclxuICAgICAgICBjb25zdCBmb3JtID0gZm9ybXMucXVlcnlTZWxlY3RvcignLnNlLXNlbGVjdC1saXN0Jyk7XHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dC5zZWxlY3RNZW51LmNhbGxlcltwbHVnaW5OYW1lXSA9IHtcclxuICAgICAgICAgICAgZm9ybTogZm9ybSxcclxuICAgICAgICAgICAgaXRlbXM6IFtdLFxyXG4gICAgICAgICAgICBtZW51czogW10sXHJcbiAgICAgICAgICAgIGluZGV4OiAtMSxcclxuICAgICAgICAgICAgaXRlbTogbnVsbCxcclxuICAgICAgICAgICAgY2xpY2tNZXRob2Q6IG51bGwsXHJcbiAgICAgICAgICAgIGNhbGxlck5hbWU6IHBsdWdpbk5hbWVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51Lm9uTW91c2Vkb3duX2xpc3QpO1xyXG4gICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUub25Nb3VzZU1vdmVfbGlzdC5iaW5kKHRoaXMsIGNvbnRleHQpKTtcclxuICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUub25DbGlja19saXN0LmJpbmQodGhpcywgY29udGV4dCkpO1xyXG4gICAgfSxcclxuXHJcbiAgICBvbk1vdXNlZG93bl9saXN0OiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBvbk1vdXNlTW92ZV9saXN0OiBmdW5jdGlvbiAoY29udGV4dCwgZSkge1xyXG4gICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhjb250ZXh0LmZvcm0sICdfX3NlX3NlbGVjdC1tZW51LW1vdXNlLW1vdmUnKTtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpO1xyXG4gICAgICAgIGlmICghaW5kZXgpIHJldHVybjtcclxuICAgICAgICBjb250ZXh0LmluZGV4ID0gaW5kZXggKiAxO1xyXG4gICAgfSxcclxuXHJcbiAgICBvbkNsaWNrX2xpc3Q6IGZ1bmN0aW9uIChjb250ZXh0LCBlKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXgnKTtcclxuICAgICAgICBpZiAoIWluZGV4KSByZXR1cm47XHJcbiAgICAgICAgY29udGV4dC5jbGlja01ldGhvZC5jYWxsKHRoaXMsIGNvbnRleHQuaXRlbXNbaW5kZXhdKTtcclxuICAgIH0sXHJcblxyXG4gICAgbW92ZUl0ZW06IGZ1bmN0aW9uIChsaXN0Q29udGV4dCwgbnVtKSB7XHJcbiAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGxpc3RDb250ZXh0LmZvcm0sICdfX3NlX3NlbGVjdC1tZW51LW1vdXNlLW1vdmUnKTtcclxuICAgICAgICBudW0gPSBsaXN0Q29udGV4dC5pbmRleCArIG51bTtcclxuICAgICAgICBjb25zdCBtZW51cyA9IGxpc3RDb250ZXh0Lm1lbnVzO1xyXG4gICAgICAgIGNvbnN0IGxlbiA9IG1lbnVzLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBzZWxlY3RJbmRleCA9IGxpc3RDb250ZXh0LmluZGV4ID0gbnVtID49IGxlbiA/IDAgOiBudW0gPCAwID8gbGVuIC0gMSA6IG51bTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpID09PSBzZWxlY3RJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKG1lbnVzW2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MobWVudXNbaV0sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGlzdENvbnRleHQuaXRlbSA9IGxpc3RDb250ZXh0Lml0ZW1zW3NlbGVjdEluZGV4XTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0SXRlbTogZnVuY3Rpb24gKGxpc3RDb250ZXh0LCBpbmRleCkge1xyXG4gICAgICAgIGluZGV4ID0gKCFpbmRleCB8fCBpbmRleCA8IDApID8gbGlzdENvbnRleHQuaW5kZXggOiBpbmRleDtcclxuICAgICAgICByZXR1cm4gbGlzdENvbnRleHQuaXRlbXNbaW5kZXhdO1xyXG4gICAgfSxcclxuXHJcbiAgICBvbjogZnVuY3Rpb24gKGNhbGxlck5hbWUsIGNsaWNrTWV0aG9kKSB7XHJcbiAgICAgICAgY29uc3QgbGlzdENvbnRleHQgPSB0aGlzLmNvbnRleHQuc2VsZWN0TWVudS5jYWxsZXJbY2FsbGVyTmFtZV07XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnNlbGVjdE1lbnUuY2FsbGVyQ29udGV4dCA9IGxpc3RDb250ZXh0O1xyXG4gICAgICAgIGxpc3RDb250ZXh0LmNsaWNrTWV0aG9kID0gY2xpY2tNZXRob2Q7XHJcbiAgICAgICAgbGlzdENvbnRleHQuY2FsbGVyTmFtZSA9IGNhbGxlck5hbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIG9wZW46IGZ1bmN0aW9uIChsaXN0Q29udGV4dCwgcG9zaXRpb25IYW5kbGVyKSB7XHJcbiAgICAgICAgY29uc3QgZm9ybSA9IGxpc3RDb250ZXh0LmZvcm07XHJcbiAgICAgICAgZm9ybS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgZm9ybS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICBwb3NpdGlvbkhhbmRsZXIoZm9ybSk7XHJcbiAgICAgICAgZm9ybS5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsb3NlOiBmdW5jdGlvbiAobGlzdENvbnRleHQpIHtcclxuICAgICAgICBsaXN0Q29udGV4dC5mb3JtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgbGlzdENvbnRleHQuaXRlbXMgPSBbXTtcclxuICAgICAgICBsaXN0Q29udGV4dC5tZW51cyA9IFtdO1xyXG4gICAgICAgIGxpc3RDb250ZXh0LmluZGV4ID0gLTE7XHJcbiAgICAgICAgbGlzdENvbnRleHQuaXRlbSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIGluaXQ6IGZ1bmN0aW9uIChsaXN0Q29udGV4dCkge1xyXG4gICAgICAgIGlmICghbGlzdENvbnRleHQpIHJldHVybjtcclxuICAgICAgICBsaXN0Q29udGV4dC5pdGVtcyA9IFtdO1xyXG4gICAgICAgIGxpc3RDb250ZXh0Lm1lbnVzID0gW107XHJcbiAgICAgICAgbGlzdENvbnRleHQuaW5kZXggPSAtMTtcclxuICAgICAgICBsaXN0Q29udGV4dC5pdGVtID0gbnVsbDtcclxuICAgICAgICBsaXN0Q29udGV4dC5jYWxsZXJOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnNlbGVjdE1lbnUuY2FsbGVyQ29udGV4dCA9IG51bGw7XHJcbiAgICB9XHJcbn07IiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBzZWxlY3RNZW51IGZyb20gJy4vX3NlbGVjdE1lbnUnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ2FuY2hvcicsXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29yZS5hZGRNb2R1bGUoW3NlbGVjdE1lbnVdKTtcclxuICAgICAgICBcclxuICAgICAgICBjb3JlLmNvbnRleHQuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICBjYWxsZXI6IHt9LFxyXG4gICAgICAgICAgICBmb3JtczogdGhpcy5zZXREaWFsb2dGb3JtKGNvcmUpLFxyXG4gICAgICAgICAgICBob3N0OiAoY29yZS5fdy5sb2NhdGlvbi5vcmlnaW4gKyBjb3JlLl93LmxvY2F0aW9uLnBhdGhuYW1lKS5yZXBsYWNlKC9cXC8kLywgJycpLFxyXG4gICAgICAgICAgICBjYWxsZXJDb250ZXh0OiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIGRpYWxvZyAqL1xyXG4gICAgc2V0RGlhbG9nRm9ybTogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xyXG4gICAgICAgIGNvbnN0IHJlbExpc3QgPSBjb3JlLm9wdGlvbnMubGlua1JlbDtcclxuICAgICAgICBjb25zdCBkZWZhdWx0UmVsID0gKGNvcmUub3B0aW9ucy5saW5rUmVsRGVmYXVsdC5kZWZhdWx0IHx8ICcnKS5zcGxpdCgnICcpO1xyXG4gICAgICAgIGNvbnN0IGljb25zID0gY29yZS5pY29ucztcclxuICAgICAgICBjb25zdCBmb3JtcyA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuXHJcbiAgICAgICAgbGV0IGh0bWwgPSAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1ib2R5XCI+JyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm1cIj4nICtcclxuICAgICAgICAgICAgICAgICc8bGFiZWw+JyArIGxhbmcuZGlhbG9nQm94LmxpbmtCb3gudXJsICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtLWZpbGVzXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCBjbGFzcz1cInNlLWlucHV0LWZvcm0gc2UtaW5wdXQtdXJsXCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIicgKyAoY29yZS5vcHRpb25zLnByb3RvY29sIHx8ICcnKSArICdcIiAvPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0biBzZS1kaWFsb2ctZmlsZXMtZWRnZS1idXR0b24gX3NlX2Jvb2ttYXJrX2J1dHRvblwiIHRpdGxlPVwiJyArIGxhbmcuZGlhbG9nQm94LmxpbmtCb3guYm9va21hcmsgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBsYW5nLmRpYWxvZ0JveC5saW5rQm94LmJvb2ttYXJrICsgJ1wiPicgKyBpY29ucy5ib29rbWFyayArICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLnBsdWdpbnMuc2VsZWN0TWVudS5zZXRGb3JtKCkgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1hbmNob3ItcHJldmlldy1mb3JtXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2Utc3ZnIHNlLWFuY2hvci1wcmV2aWV3LWljb24gX3NlX2FuY2hvcl9ib29rbWFya19pY29uXCI+JyArIGljb25zLmJvb2ttYXJrICsgJzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS1zdmcgc2UtYW5jaG9yLXByZXZpZXctaWNvbiBfc2VfYW5jaG9yX2Rvd25sb2FkX2ljb25cIj4nICsgaWNvbnMuZG93bmxvYWQgKyAnPC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8cHJlIGNsYXNzPVwic2UtbGluay1wcmV2aWV3XCI+PC9wcmU+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxsYWJlbD4nICsgbGFuZy5kaWFsb2dCb3gubGlua0JveC50ZXh0ICsgJzwvbGFiZWw+PGlucHV0IGNsYXNzPVwic2UtaW5wdXQtZm9ybSBfc2VfYW5jaG9yX3RleHRcIiB0eXBlPVwidGV4dFwiIC8+JyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybS1mb290ZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic2UtZGlhbG9nLWJ0bi1jaGVjayBfc2VfYW5jaG9yX2NoZWNrXCIgLz4mbmJzcDsnICsgbGFuZy5kaWFsb2dCb3gubGlua0JveC5uZXdXaW5kb3dDaGVjayArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgJzxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzZS1kaWFsb2ctYnRuLWNoZWNrIF9zZV9hbmNob3JfZG93bmxvYWRcIiAvPiZuYnNwOycgKyBsYW5nLmRpYWxvZ0JveC5saW5rQm94LmRvd25sb2FkTGlua0NoZWNrICsgJzwvbGFiZWw+JztcclxuICAgICAgICAgICAgaWYgKHJlbExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cInNlLWFuY2hvci1yZWxcIj48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0biBzZS1idG4tc2VsZWN0IHNlLWFuY2hvci1yZWwtYnRuXCI+Jmx0O3JlbCZndDs8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWFuY2hvci1yZWwtd3JhcHBlclwiPjxwcmUgY2xhc3M9XCJzZS1saW5rLXByZXZpZXcgc2UtYW5jaG9yLXJlbC1wcmV2aWV3XCI+PC9wcmU+PC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1saXN0LWxheWVyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtbGlzdC1pbm5lclwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzx1bCBjbGFzcz1cInNlLWxpc3QtYmFzaWMgc2UtbGlzdC1jaGVja2VkXCI+JztcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByZWxMaXN0Lmxlbmd0aCwgcmVsOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICByZWwgPSByZWxMaXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxsaT48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0bi1saXN0JyArIChkZWZhdWx0UmVsLmluZGV4T2YocmVsKSA+IC0xID8gJyBzZS1jaGVja2VkJyA6ICcnKSArICdcIiBkYXRhLWNvbW1hbmQ9XCInICsgcmVsICsgJ1wiIHRpdGxlPVwiJyArIHJlbCArICdcIiBhcmlhLWxhYmVsPVwiJyArIHJlbCArICdcIj48c3BhbiBjbGFzcz1cInNlLXN2Z1wiPicgKyBpY29ucy5jaGVja2VkICsgJzwvc3Bhbj4nICsgcmVsICsgJzwvYnV0dG9uPjwvbGk+JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzwvdWw+PC9kaXY+PC9kaXY+PC9kaXY+JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICBodG1sICs9ICc8L2Rpdj48L2Rpdj4nO1xyXG5cclxuICAgICAgICBmb3Jtcy5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgICAgIHJldHVybiBmb3JtcztcclxuICAgIH0sXHJcblxyXG4gICAgaW5pdEV2ZW50OiBmdW5jdGlvbiAocGx1Z2luTmFtZSwgZm9ybXMpIHtcclxuICAgICAgICBjb25zdCBhbmNob3JQbHVnaW4gPSB0aGlzLnBsdWdpbnMuYW5jaG9yO1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQuYW5jaG9yLmNhbGxlcltwbHVnaW5OYW1lXSA9IHtcclxuICAgICAgICAgICAgbW9kYWw6IGZvcm1zLFxyXG4gICAgICAgICAgICB1cmxJbnB1dDogbnVsbCxcclxuICAgICAgICAgICAgbGlua0RlZmF1bHRSZWw6IHRoaXMub3B0aW9ucy5saW5rUmVsRGVmYXVsdCxcclxuICAgICAgICAgICAgZGVmYXVsdFJlbDogdGhpcy5vcHRpb25zLmxpbmtSZWxEZWZhdWx0LmRlZmF1bHQgfHwgJycsXHJcbiAgICAgICAgICAgIGN1cnJlbnRSZWw6IFtdLFxyXG4gICAgICAgICAgICBsaW5rQW5jaG9yOiBudWxsLFxyXG4gICAgICAgICAgICBsaW5rVmFsdWU6ICcnLFxyXG4gICAgICAgICAgICBfY2hhbmdlOiBmYWxzZSxcclxuICAgICAgICAgICAgY2FsbGVyTmFtZTogcGx1Z2luTmFtZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgY29udGV4dC5saW5rRGVmYXVsdFJlbC5kZWZhdWx0ID09PSAnc3RyaW5nJykgY29udGV4dC5saW5rRGVmYXVsdFJlbC5kZWZhdWx0ID0gY29udGV4dC5saW5rRGVmYXVsdFJlbC5kZWZhdWx0LnRyaW0oKTtcclxuICAgICAgICBpZiAodHlwZW9mIGNvbnRleHQubGlua0RlZmF1bHRSZWwuY2hlY2tfbmV3X3dpbmRvdyA9PT0gJ3N0cmluZycpIGNvbnRleHQubGlua0RlZmF1bHRSZWwuY2hlY2tfbmV3X3dpbmRvdyA9IGNvbnRleHQubGlua0RlZmF1bHRSZWwuY2hlY2tfbmV3X3dpbmRvdy50cmltKCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0LmxpbmtEZWZhdWx0UmVsLmNoZWNrX2Jvb2ttYXJrID09PSAnc3RyaW5nJykgY29udGV4dC5saW5rRGVmYXVsdFJlbC5jaGVja19ib29rbWFyayA9IGNvbnRleHQubGlua0RlZmF1bHRSZWwuY2hlY2tfYm9va21hcmsudHJpbSgpO1xyXG5cclxuICAgICAgICBjb250ZXh0LnVybElucHV0ID0gZm9ybXMucXVlcnlTZWxlY3RvcignLnNlLWlucHV0LXVybCcpO1xyXG4gICAgICAgIGNvbnRleHQuYW5jaG9yVGV4dCA9IGZvcm1zLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfYW5jaG9yX3RleHQnKTtcclxuICAgICAgICBjb250ZXh0Lm5ld1dpbmRvd0NoZWNrID0gZm9ybXMucXVlcnlTZWxlY3RvcignLl9zZV9hbmNob3JfY2hlY2snKTtcclxuICAgICAgICBjb250ZXh0LmRvd25sb2FkQ2hlY2sgPSBmb3Jtcy5xdWVyeVNlbGVjdG9yKCcuX3NlX2FuY2hvcl9kb3dubG9hZCcpO1xyXG4gICAgICAgIGNvbnRleHQuZG93bmxvYWQgPSBmb3Jtcy5xdWVyeVNlbGVjdG9yKCcuX3NlX2FuY2hvcl9kb3dubG9hZF9pY29uJyk7XHJcbiAgICAgICAgY29udGV4dC5wcmV2aWV3ID0gZm9ybXMucXVlcnlTZWxlY3RvcignLnNlLWxpbmstcHJldmlldycpO1xyXG4gICAgICAgIGNvbnRleHQuYm9va21hcmsgPSBmb3Jtcy5xdWVyeVNlbGVjdG9yKCcuX3NlX2FuY2hvcl9ib29rbWFya19pY29uJyk7XHJcbiAgICAgICAgY29udGV4dC5ib29rbWFya0J1dHRvbiA9IGZvcm1zLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfYm9va21hcmtfYnV0dG9uJyk7XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51LmluaXRFdmVudC5jYWxsKHRoaXMsIHBsdWdpbk5hbWUsIGZvcm1zKTtcclxuICAgICAgICBjb25zdCBsaXN0Q29udGV4dCA9IHRoaXMuY29udGV4dC5zZWxlY3RNZW51LmNhbGxlcltwbHVnaW5OYW1lXTtcclxuICAgICAgICBcclxuICAgICAgICAvKiogcmVsICovXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5saW5rUmVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29udGV4dC5yZWxCdXR0b24gPSBmb3Jtcy5xdWVyeVNlbGVjdG9yKCcuc2UtYW5jaG9yLXJlbC1idG4nKTtcclxuICAgICAgICAgICAgY29udGV4dC5yZWxMaXN0ID0gZm9ybXMucXVlcnlTZWxlY3RvcignLnNlLWxpc3QtbGF5ZXInKTtcclxuICAgICAgICAgICAgY29udGV4dC5yZWxQcmV2aWV3ID0gZm9ybXMucXVlcnlTZWxlY3RvcignLnNlLWFuY2hvci1yZWwtcHJldmlldycpO1xyXG4gICAgICAgICAgICBjb250ZXh0LnJlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFuY2hvclBsdWdpbi5vbkNsaWNrX3JlbEJ1dHRvbi5iaW5kKHRoaXMsIGNvbnRleHQpKTtcclxuICAgICAgICAgICAgY29udGV4dC5yZWxMaXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYW5jaG9yUGx1Z2luLm9uQ2xpY2tfcmVsTGlzdC5iaW5kKHRoaXMsIGNvbnRleHQpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnRleHQubmV3V2luZG93Q2hlY2suYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgYW5jaG9yUGx1Z2luLm9uQ2hhbmdlX25ld1dpbmRvd0NoZWNrLmJpbmQodGhpcywgY29udGV4dCkpO1xyXG4gICAgICAgIGNvbnRleHQuZG93bmxvYWRDaGVjay5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBhbmNob3JQbHVnaW4ub25DaGFuZ2VfZG93bmxvYWRDaGVjay5iaW5kKHRoaXMsIGNvbnRleHQpKTtcclxuICAgICAgICBjb250ZXh0LmFuY2hvclRleHQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBhbmNob3JQbHVnaW4ub25DaGFuZ2VBbmNob3JUZXh0LmJpbmQodGhpcywgY29udGV4dCkpO1xyXG4gICAgICAgIGNvbnRleHQudXJsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBhbmNob3JQbHVnaW4ub25DaGFuZ2VVcmxJbnB1dC5iaW5kKHRoaXMsIGNvbnRleHQpKTtcclxuICAgICAgICBjb250ZXh0LnVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBhbmNob3JQbHVnaW4ub25LZXlEb3duVXJsSW5wdXQuYmluZCh0aGlzLCBsaXN0Q29udGV4dCkpO1xyXG4gICAgICAgIGNvbnRleHQudXJsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBhbmNob3JQbHVnaW4ub25Gb2N1c1VybElucHV0LmJpbmQodGhpcywgY29udGV4dCwgbGlzdENvbnRleHQpKTtcclxuICAgICAgICBjb250ZXh0LnVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBhbmNob3JQbHVnaW4ub25CbHVyVXJsSW5wdXQuYmluZCh0aGlzLCBsaXN0Q29udGV4dCkpO1xyXG4gICAgICAgIGNvbnRleHQuYm9va21hcmtCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhbmNob3JQbHVnaW4ub25DbGlja19ib29rbWFya0J1dHRvbi5iaW5kKHRoaXMsIGNvbnRleHQpKTtcclxuICAgIH0sXHJcblxyXG4gICAgb246IGZ1bmN0aW9uIChjb250ZXh0QW5jaG9yLCB1cGRhdGUpIHtcclxuICAgICAgICBjb25zdCBhbmNob3JQbHVnaW4gPSB0aGlzLnBsdWdpbnMuYW5jaG9yO1xyXG5cclxuICAgICAgICBpZiAoIXVwZGF0ZSkge1xyXG4gICAgICAgICAgICBhbmNob3JQbHVnaW4uaW5pdC5jYWxsKHRoaXMsIGNvbnRleHRBbmNob3IpO1xyXG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmFuY2hvclRleHQudmFsdWUgPSB0aGlzLmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkudHJpbSgpO1xyXG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLm5ld1dpbmRvd0NoZWNrLmNoZWNrZWQgPSB0aGlzLm9wdGlvbnMubGlua1RhcmdldE5ld1dpbmRvdztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRBbmNob3IubGlua0FuY2hvcikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgaHJlZiA9IGNvbnRleHRBbmNob3IubGlua0FuY2hvci5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcclxuICAgICAgICAgICAgY29udGV4dEFuY2hvci5saW5rVmFsdWUgPSBjb250ZXh0QW5jaG9yLnByZXZpZXcudGV4dENvbnRlbnQgPSBjb250ZXh0QW5jaG9yLnVybElucHV0LnZhbHVlID0gYW5jaG9yUGx1Z2luLnNlbGZQYXRoQm9va21hcmsuY2FsbCh0aGlzLCBocmVmKSA/IGhyZWYuc3Vic3RyKGhyZWYubGFzdEluZGV4T2YoJyMnKSkgOiBocmVmO1xyXG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmFuY2hvclRleHQudmFsdWUgPSBjb250ZXh0QW5jaG9yLmxpbmtBbmNob3IudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IubmV3V2luZG93Q2hlY2suY2hlY2tlZCA9ICgvX2JsYW5rL2kudGVzdChjb250ZXh0QW5jaG9yLmxpbmtBbmNob3IudGFyZ2V0KSA/IHRydWUgOiBmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IuZG93bmxvYWRDaGVjay5jaGVja2VkID0gY29udGV4dEFuY2hvci5saW5rQW5jaG9yLmRvd25sb2FkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmFuY2hvci5jYWxsZXJDb250ZXh0ID0gY29udGV4dEFuY2hvcjtcclxuICAgICAgICBhbmNob3JQbHVnaW4uc2V0UmVsLmNhbGwodGhpcywgY29udGV4dEFuY2hvciwgKHVwZGF0ZSAmJiBjb250ZXh0QW5jaG9yLmxpbmtBbmNob3IpID8gY29udGV4dEFuY2hvci5saW5rQW5jaG9yLnJlbCA6IGNvbnRleHRBbmNob3IuZGVmYXVsdFJlbCk7XHJcbiAgICAgICAgYW5jaG9yUGx1Z2luLnNldExpbmtQcmV2aWV3LmNhbGwodGhpcywgY29udGV4dEFuY2hvciwgY29udGV4dEFuY2hvci5saW5rVmFsdWUpO1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51Lm9uLmNhbGwodGhpcywgY29udGV4dEFuY2hvci5jYWxsZXJOYW1lLCB0aGlzLnBsdWdpbnMuYW5jaG9yLnNldEhlYWRlckJvb2ttYXJrKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2VsZlBhdGhCb29rbWFyazogZnVuY3Rpb24ocGF0aCkge1xyXG4gICAgICAgIGNvbnN0IGhyZWYgPSB0aGlzLl93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgvXFwvJC8sICcnKTtcclxuICAgICAgICByZXR1cm4gcGF0aC5pbmRleE9mKCcjJykgPT09IDAgfHwgKHBhdGguaW5kZXhPZihocmVmKSA9PT0gMCAmJiBwYXRoLmluZGV4T2YoJyMnKSA9PT0gKGhyZWYuaW5kZXhPZihcIiNcIikgPT09IC0xID8gaHJlZi5sZW5ndGggOiBocmVmLnN1YnN0cigwLCBocmVmLmluZGV4T2YoXCIjXCIpKS5sZW5ndGgpKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2Nsb3NlUmVsTWVudTogbnVsbCxcclxuICAgIHRvZ2dsZVJlbExpc3Q6IGZ1bmN0aW9uIChjb250ZXh0QW5jaG9yLCBzaG93KSB7XHJcbiAgICAgICAgaWYgKCFzaG93KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBsdWdpbnMuYW5jaG9yLl9jbG9zZVJlbE1lbnUpIHRoaXMucGx1Z2lucy5hbmNob3IuX2Nsb3NlUmVsTWVudSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGNvbnRleHRBbmNob3IucmVsQnV0dG9uO1xyXG4gICAgICAgICAgICBjb25zdCByZWxMaXN0ID0gY29udGV4dEFuY2hvci5yZWxMaXN0O1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3ModGFyZ2V0LCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIHJlbExpc3Quc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgICAgICAgICByZWxMaXN0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5ydGwpIHJlbExpc3Quc3R5bGUubGVmdCA9ICh0YXJnZXQub2Zmc2V0TGVmdCArIHRhcmdldC5vZmZzZXRXaWR0aCArIDEpICsgJ3B4JztcclxuICAgICAgICAgICAgZWxzZSByZWxMaXN0LnN0eWxlLmxlZnQgPSAodGFyZ2V0Lm9mZnNldExlZnQgLSByZWxMaXN0Lm9mZnNldFdpZHRoIC0gMSkgKyAncHgnO1xyXG4gICAgICAgICAgICByZWxMaXN0LnN0eWxlLnRvcCA9ICh0YXJnZXQub2Zmc2V0VG9wICsgKHRhcmdldC5vZmZzZXRIZWlnaHQgLyAyKSAtIChyZWxMaXN0Lm9mZnNldEhlaWdodCAvIDIpKSArICdweCc7XHJcbiAgICAgICAgICAgIHJlbExpc3Quc3R5bGUudmlzaWJpbGl0eSA9ICcnO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5fY2xvc2VSZWxNZW51ID0gZnVuY3Rpb24gKGNvbnRleHQsIHRhcmdldCwgZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGUgJiYgKGNvbnRleHQucmVsQnV0dG9uLmNvbnRhaW5zKGUudGFyZ2V0KSB8fCBjb250ZXh0LnJlbExpc3QuY29udGFpbnMoZS50YXJnZXQpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHRhcmdldCwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5yZWxMaXN0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGFsRm9ybS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucGx1Z2lucy5hbmNob3IuX2Nsb3NlUmVsTWVudSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLl9jbG9zZVJlbE1lbnUgPSBudWxsO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcywgY29udGV4dEFuY2hvciwgdGFyZ2V0KTtcclxuICAgIFxyXG4gICAgICAgICAgICB0aGlzLm1vZGFsRm9ybS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucGx1Z2lucy5hbmNob3IuX2Nsb3NlUmVsTWVudSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBvbkNsaWNrX3JlbEJ1dHRvbjogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIGUpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnRvZ2dsZVJlbExpc3QuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCAhdGhpcy51dGlsLmhhc0NsYXNzKGUudGFyZ2V0LCAnYWN0aXZlJykpO1xyXG4gICAgfSxcclxuXHJcbiAgICBvbkNsaWNrX3JlbExpc3Q6IGZ1bmN0aW9uIChjb250ZXh0QW5jaG9yLCBlKSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgY21kID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgaWYgKCFjbWQpIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBjdXJyZW50ID0gY29udGV4dEFuY2hvci5jdXJyZW50UmVsO1xyXG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSB0aGlzLnV0aWwudG9nZ2xlQ2xhc3ModGFyZ2V0LCAnc2UtY2hlY2tlZCcpO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY3VycmVudC5pbmRleE9mKGNtZCk7XHJcbiAgICAgICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgY3VycmVudC5wdXNoKGNtZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIGN1cnJlbnQuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnRleHRBbmNob3IucmVsUHJldmlldy50aXRsZSA9IGNvbnRleHRBbmNob3IucmVsUHJldmlldy50ZXh0Q29udGVudCA9IGN1cnJlbnQuam9pbignICcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRSZWw6IGZ1bmN0aW9uIChjb250ZXh0QW5jaG9yLCByZWxBdHRyKSB7XHJcbiAgICAgICAgY29uc3QgcmVsTGlzdEVsID0gY29udGV4dEFuY2hvci5yZWxMaXN0O1xyXG4gICAgICAgIGNvbnN0IHJlbHMgPSBjb250ZXh0QW5jaG9yLmN1cnJlbnRSZWwgPSAhcmVsQXR0ciA/IFtdIDogcmVsQXR0ci5zcGxpdCgnICcpO1xyXG4gICAgICAgIGlmICghcmVsTGlzdEVsKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGNoZWNrZWRSZWwgPSByZWxMaXN0RWwucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uJyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoZWNrZWRSZWwubGVuZ3RoLCBjbWQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjbWQgPSBjaGVja2VkUmVsW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgICAgIGlmIChyZWxzLmluZGV4T2YoY21kKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoY2hlY2tlZFJlbFtpXSwgJ3NlLWNoZWNrZWQnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhjaGVja2VkUmVsW2ldLCAnc2UtY2hlY2tlZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250ZXh0QW5jaG9yLnJlbFByZXZpZXcudGl0bGUgPSBjb250ZXh0QW5jaG9yLnJlbFByZXZpZXcudGV4dENvbnRlbnQgPSByZWxzLmpvaW4oJyAnKTtcclxuICAgIH0sXHJcblxyXG4gICAgY3JlYXRlSGVhZGVyTGlzdDogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIGNvbnRleHRMaXN0LCB1cmxWYWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnV0aWwuZ2V0TGlzdENoaWxkcmVuKHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWcsIGZ1bmN0aW9uKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC9oWzEtNl0vaS50ZXN0KGN1cnJlbnQubm9kZU5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCB2YWx1ZVJlZ0V4cCA9IG5ldyB0aGlzLl93LlJlZ0V4cCgnXicgKyB1cmxWYWx1ZS5yZXBsYWNlKC9eIy8sICcnKSwgJ2knKTtcclxuICAgICAgICBjb25zdCBsaXN0ID0gW107XHJcbiAgICAgICAgbGV0IGh0bWwgPSAnJztcclxuICAgICAgICBmb3IobGV0IGkgPSAwLCBsZW4gPSBoZWFkZXJzLmxlbmd0aCwgaDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGggPSBoZWFkZXJzW2ldO1xyXG4gICAgICAgICAgICBpZiAoIXZhbHVlUmVnRXhwLnRlc3QoaC50ZXh0Q29udGVudCkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBsaXN0LnB1c2goaCk7XHJcbiAgICAgICAgICAgIGh0bWwgKz0gJzxsaSBjbGFzcz1cInNlLXNlbGVjdC1pdGVtXCIgZGF0YS1pbmRleD1cIicgKyBpICsgJ1wiPicgKyBoLnRleHRDb250ZW50ICsgJzwvbGk+JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuc2VsZWN0TWVudS5jbG9zZS5jYWxsKHRoaXMsIGNvbnRleHRMaXN0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuc2VsZWN0TWVudS5jcmVhdGVMaXN0KGNvbnRleHRMaXN0LCBsaXN0LCBodG1sKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUub3Blbi5jYWxsKHRoaXMsIGNvbnRleHRMaXN0LCB0aGlzLnBsdWdpbnMuYW5jaG9yLl9zZXRNZW51TGlzdFBvc2l0aW9uLmJpbmQodGhpcywgY29udGV4dEFuY2hvcikpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3NldE1lbnVMaXN0UG9zaXRpb246IGZ1bmN0aW9uIChjb250ZXh0QW5jaG9yLCBsaXN0KSB7XHJcbiAgICAgICAgbGlzdC5zdHlsZS50b3AgPSAoY29udGV4dEFuY2hvci51cmxJbnB1dC5vZmZzZXRIZWlnaHQgKyAxKSArICdweCc7XHJcbiAgICB9LFxyXG5cclxuICAgIG9uS2V5RG93blVybElucHV0OiBmdW5jdGlvbiAoY29udGV4dExpc3QsIGUpIHtcclxuICAgICAgICBjb25zdCBrZXlDb2RlID0gZS5rZXlDb2RlO1xyXG4gICAgICAgIHN3aXRjaCAoa2V5Q29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIDM4OiAvLyB1cFxyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51Lm1vdmVJdGVtLmNhbGwodGhpcywgY29udGV4dExpc3QsIC0xKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDQwOiAvLyBkb3duXHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUubW92ZUl0ZW0uY2FsbCh0aGlzLCBjb250ZXh0TGlzdCwgMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxMzogLy8gZW50ZXJcclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0TGlzdC5pbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5zZXRIZWFkZXJCb29rbWFyay5jYWxsKHRoaXMsIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51LmdldEl0ZW0oY29udGV4dExpc3QsIG51bGwpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgc2V0SGVhZGVyQm9va21hcms6IGZ1bmN0aW9uIChoZWFkZXIpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0QW5jaG9yID0gdGhpcy5jb250ZXh0LmFuY2hvci5jYWxsZXJDb250ZXh0O1xyXG4gICAgICAgIGNvbnN0IGlkID0gaGVhZGVyLmlkIHx8ICdoXycgKyB0aGlzLl93Lk1hdGgucmFuZG9tKCkudG9TdHJpbmcoKS5yZXBsYWNlKC8uK1xcLi8sICcnKTtcclxuICAgICAgICBoZWFkZXIuaWQgPSBpZDtcclxuICAgICAgICBjb250ZXh0QW5jaG9yLnVybElucHV0LnZhbHVlID0gJyMnICsgaWQ7XHJcblxyXG4gICAgICAgIGlmICghY29udGV4dEFuY2hvci5hbmNob3JUZXh0LnZhbHVlLnRyaW0oKSB8fCAhY29udGV4dEFuY2hvci5fY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IuYW5jaG9yVGV4dC52YWx1ZSA9IGhlYWRlci50ZXh0Q29udGVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5zZXRMaW5rUHJldmlldy5jYWxsKHRoaXMsIGNvbnRleHRBbmNob3IsIGNvbnRleHRBbmNob3IudXJsSW5wdXQudmFsdWUpO1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51LmNsb3NlLmNhbGwodGhpcywgdGhpcy5jb250ZXh0LnNlbGVjdE1lbnUuY2FsbGVyQ29udGV4dCk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmFuY2hvci5jYWxsZXJDb250ZXh0LnVybElucHV0LmZvY3VzKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIG9uQ2hhbmdlQW5jaG9yVGV4dDogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIGUpIHtcclxuICAgICAgICBjb250ZXh0QW5jaG9yLl9jaGFuZ2UgPSAhIWUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcclxuICAgIH0sXHJcblxyXG4gICAgb25DaGFuZ2VVcmxJbnB1dDogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIGUpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnNldExpbmtQcmV2aWV3LmNhbGwodGhpcywgY29udGV4dEFuY2hvciwgdmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wbHVnaW5zLmFuY2hvci5zZWxmUGF0aEJvb2ttYXJrLmNhbGwodGhpcywgdmFsdWUpKSB0aGlzLnBsdWdpbnMuYW5jaG9yLmNyZWF0ZUhlYWRlckxpc3QuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB0aGlzLmNvbnRleHQuc2VsZWN0TWVudS5jYWxsZXJDb250ZXh0LCB2YWx1ZSk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnBsdWdpbnMuc2VsZWN0TWVudS5jbG9zZS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dC5zZWxlY3RNZW51LmNhbGxlckNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBvbkZvY3VzVXJsSW5wdXQ6IGZ1bmN0aW9uIChjb250ZXh0QW5jaG9yLCBjb250ZXh0TGluaykge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29udGV4dEFuY2hvci51cmxJbnB1dC52YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5wbHVnaW5zLmFuY2hvci5zZWxmUGF0aEJvb2ttYXJrLmNhbGwodGhpcywgdmFsdWUpKSB0aGlzLnBsdWdpbnMuYW5jaG9yLmNyZWF0ZUhlYWRlckxpc3QuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCBjb250ZXh0TGluaywgdmFsdWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBvbkJsdXJVcmxJbnB1dDogZnVuY3Rpb24gKGNvbnRleHRMaXN0KSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUuY2xvc2UuY2FsbCh0aGlzLCBjb250ZXh0TGlzdCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldExpbmtQcmV2aWV3OiBmdW5jdGlvbiAoY29udGV4dCwgdmFsdWUpIHtcclxuICAgICAgICBjb25zdCBwcmV2aWV3ID0gY29udGV4dC5wcmV2aWV3O1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdGhpcy5vcHRpb25zLmxpbmtQcm90b2NvbDtcclxuICAgICAgICBjb25zdCBub1ByZWZpeCA9IHRoaXMub3B0aW9ucy5saW5rTm9QcmVmaXg7XHJcbiAgICAgICAgY29uc3QgcmVzZXJ2ZWRQcm90b2NvbCAgPSAvXihtYWlsdG9cXDp8dGVsXFw6fHNtc1xcOnxodHRwcypcXDpcXC9cXC98IykvLnRlc3QodmFsdWUpIHx8IHZhbHVlLmluZGV4T2YocHJvdG9jb2wpID09PSAwO1xyXG4gICAgICAgIGNvbnN0IHNhbWVQcm90b2NvbCA9ICFwcm90b2NvbCA/IGZhbHNlIDogdGhpcy5fdy5SZWdFeHAoJ14nICsgdGhpcy51dGlsLmVzY2FwZVN0cmluZ1JlZ2V4cCh2YWx1ZS5zdWJzdHIoMCwgcHJvdG9jb2wubGVuZ3RoKSkpLnRlc3QocHJvdG9jb2wpO1xyXG4gICAgICAgIHZhbHVlID0gY29udGV4dC5saW5rVmFsdWUgPSBwcmV2aWV3LnRleHRDb250ZW50ID0gIXZhbHVlID8gJycgOiBub1ByZWZpeCA/IHZhbHVlIDogKHByb3RvY29sICYmICFyZXNlcnZlZFByb3RvY29sICYmICFzYW1lUHJvdG9jb2wpID8gcHJvdG9jb2wgKyB2YWx1ZSA6IHJlc2VydmVkUHJvdG9jb2wgPyB2YWx1ZSA6IC9ed3d3XFwuLy50ZXN0KHZhbHVlKSA/ICdodHRwOi8vJyArIHZhbHVlIDogdGhpcy5jb250ZXh0LmFuY2hvci5ob3N0ICsgKC9eXFwvLy50ZXN0KHZhbHVlKSA/ICcnIDogJy8nKSArIHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wbHVnaW5zLmFuY2hvci5zZWxmUGF0aEJvb2ttYXJrLmNhbGwodGhpcywgdmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuYm9va21hcmsuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhjb250ZXh0LmJvb2ttYXJrQnV0dG9uLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29udGV4dC5ib29rbWFyay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MoY29udGV4dC5ib29rbWFya0J1dHRvbiwgJ2FjdGl2ZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnBsdWdpbnMuYW5jaG9yLnNlbGZQYXRoQm9va21hcmsuY2FsbCh0aGlzLCB2YWx1ZSkgJiYgY29udGV4dC5kb3dubG9hZENoZWNrLmNoZWNrZWQpIHtcclxuICAgICAgICAgICAgY29udGV4dC5kb3dubG9hZC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb250ZXh0LmRvd25sb2FkLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDdHg6IGZ1bmN0aW9uIChhbmNob3IsIGNvbnRleHRBbmNob3IpIHtcclxuICAgICAgICBpZiAoIWFuY2hvcikgcmV0dXJuO1xyXG4gICAgICAgIGNvbnRleHRBbmNob3IubGlua0FuY2hvciA9IGFuY2hvcjtcclxuICAgICAgICBjb250ZXh0QW5jaG9yLmxpbmtWYWx1ZSA9IGFuY2hvci5ocmVmO1xyXG4gICAgICAgIGNvbnRleHRBbmNob3IuY3VycmVudFJlbCA9IGFuY2hvci5yZWwuc3BsaXQoXCIgXCIpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVBbmNob3I6IGZ1bmN0aW9uIChhbmNob3IsIHVybCwgZGlzcGxheVRleHQsIGNvbnRleHRBbmNob3IsIG5vdFRleHQpIHtcclxuICAgICAgICAvLyBkb3dubG9hZFxyXG4gICAgICAgIGlmICghdGhpcy5wbHVnaW5zLmFuY2hvci5zZWxmUGF0aEJvb2ttYXJrLmNhbGwodGhpcywgdXJsKSAmJiBjb250ZXh0QW5jaG9yLmRvd25sb2FkQ2hlY2suY2hlY2tlZCkge1xyXG4gICAgICAgICAgICBhbmNob3Iuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGRpc3BsYXlUZXh0IHx8IHVybCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYW5jaG9yLnJlbW92ZUF0dHJpYnV0ZSgnZG93bmxvYWQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG5ldyB3aW5kb3dcclxuICAgICAgICBpZiAoY29udGV4dEFuY2hvci5uZXdXaW5kb3dDaGVjay5jaGVja2VkKSBhbmNob3IudGFyZ2V0ID0gJ19ibGFuayc7XHJcbiAgICAgICAgZWxzZSBhbmNob3IucmVtb3ZlQXR0cmlidXRlKCd0YXJnZXQnKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyByZWxcclxuICAgICAgICBjb25zdCByZWwgPSBjb250ZXh0QW5jaG9yLmN1cnJlbnRSZWwuam9pbignICcpO1xyXG4gICAgICAgIGlmICghcmVsKSBhbmNob3IucmVtb3ZlQXR0cmlidXRlKCdyZWwnKTtcclxuICAgICAgICBlbHNlIGFuY2hvci5yZWwgPSByZWw7XHJcblxyXG4gICAgICAgIC8vIHNldCB1cmxcclxuICAgICAgICBhbmNob3IuaHJlZiA9IHVybDtcclxuICAgICAgICBpZiAobm90VGV4dCkge1xyXG4gICAgICAgICAgICBpZiAoYW5jaG9yLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgYW5jaG9yLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYW5jaG9yLnRleHRDb250ZW50ID0gZGlzcGxheVRleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVBbmNob3I6IGZ1bmN0aW9uIChjb250ZXh0QW5jaG9yLCBub3RUZXh0KSB7XHJcbiAgICAgICAgaWYgKGNvbnRleHRBbmNob3IubGlua1ZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgdXJsID0gY29udGV4dEFuY2hvci5saW5rVmFsdWU7XHJcbiAgICAgICAgY29uc3QgYW5jaG9yID0gY29udGV4dEFuY2hvci5hbmNob3JUZXh0O1xyXG4gICAgICAgIGNvbnN0IGRpc3BsYXlUZXh0ID0gYW5jaG9yLnZhbHVlLmxlbmd0aCA9PT0gMCA/IHVybCA6IGFuY2hvci52YWx1ZTtcclxuXHJcbiAgICAgICAgY29uc3Qgb0EgPSBjb250ZXh0QW5jaG9yLmxpbmtBbmNob3IgfHwgdGhpcy51dGlsLmNyZWF0ZUVsZW1lbnQoJ0EnKTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnVwZGF0ZUFuY2hvci5jYWxsKHRoaXMsIG9BLCB1cmwsIGRpc3BsYXlUZXh0LCBjb250ZXh0QW5jaG9yLCBub3RUZXh0KTtcclxuXHJcbiAgICAgICAgY29udGV4dEFuY2hvci5saW5rVmFsdWUgPSBjb250ZXh0QW5jaG9yLnByZXZpZXcudGV4dENvbnRlbnQgPSBjb250ZXh0QW5jaG9yLnVybElucHV0LnZhbHVlID0gY29udGV4dEFuY2hvci5hbmNob3JUZXh0LnZhbHVlID0gJyc7XHJcblxyXG4gICAgICAgIHJldHVybiBvQTtcclxuICAgIH0sXHJcblxyXG4gICAgb25DbGlja19ib29rbWFya0J1dHRvbjogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IpIHtcclxuICAgICAgICBsZXQgdXJsID0gY29udGV4dEFuY2hvci51cmxJbnB1dC52YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5wbHVnaW5zLmFuY2hvci5zZWxmUGF0aEJvb2ttYXJrLmNhbGwodGhpcywgdXJsKSkge1xyXG4gICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmJvb2ttYXJrLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhjb250ZXh0QW5jaG9yLmJvb2ttYXJrQnV0dG9uLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5zZWxlY3RNZW51LmNsb3NlLmNhbGwodGhpcywgdGhpcy5jb250ZXh0LnNlbGVjdE1lbnUuY2FsbGVyQ29udGV4dCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXJsID0gJyMnICsgdXJsO1xyXG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmJvb2ttYXJrLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoY29udGV4dEFuY2hvci5ib29rbWFya0J1dHRvbiwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmRvd25sb2FkQ2hlY2suY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmRvd25sb2FkLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3IuY3JlYXRlSGVhZGVyTGlzdC5jYWxsKHRoaXMsIGNvbnRleHRBbmNob3IsIHRoaXMuY29udGV4dC5zZWxlY3RNZW51LmNhbGxlckNvbnRleHQsIHVybCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250ZXh0QW5jaG9yLnVybElucHV0LnZhbHVlID0gdXJsO1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3Iuc2V0TGlua1ByZXZpZXcuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB1cmwpO1xyXG4gICAgICAgIGNvbnRleHRBbmNob3IudXJsSW5wdXQuZm9jdXMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgb25DaGFuZ2VfbmV3V2luZG93Q2hlY2s6IGZ1bmN0aW9uIChjb250ZXh0QW5jaG9yLCBlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0QW5jaG9yLmxpbmtEZWZhdWx0UmVsLmNoZWNrX25ld193aW5kb3cgIT09ICdzdHJpbmcnKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5zZXRSZWwuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB0aGlzLnBsdWdpbnMuYW5jaG9yLl9yZWxNZXJnZS5jYWxsKHRoaXMsIGNvbnRleHRBbmNob3IsIGNvbnRleHRBbmNob3IubGlua0RlZmF1bHRSZWwuY2hlY2tfbmV3X3dpbmRvdykpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3Iuc2V0UmVsLmNhbGwodGhpcywgY29udGV4dEFuY2hvciwgdGhpcy5wbHVnaW5zLmFuY2hvci5fcmVsRGVsZXRlLmNhbGwodGhpcywgY29udGV4dEFuY2hvciwgY29udGV4dEFuY2hvci5saW5rRGVmYXVsdFJlbC5jaGVja19uZXdfd2luZG93KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBvbkNoYW5nZV9kb3dubG9hZENoZWNrOiBmdW5jdGlvbiAoY29udGV4dEFuY2hvciwgZSkge1xyXG4gICAgICAgIGlmIChlLnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IuZG93bmxvYWQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IuYm9va21hcmsuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNvbnRleHRBbmNob3IuYm9va21hcmtCdXR0b24sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgY29udGV4dEFuY2hvci5saW5rVmFsdWUgPSBjb250ZXh0QW5jaG9yLnByZXZpZXcudGV4dENvbnRlbnQgPSBjb250ZXh0QW5jaG9yLnVybElucHV0LnZhbHVlID0gY29udGV4dEFuY2hvci51cmxJbnB1dC52YWx1ZS5yZXBsYWNlKC9eXFwjKy8sICcnKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0QW5jaG9yLmxpbmtEZWZhdWx0UmVsLmNoZWNrX2Jvb2ttYXJrID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5zZXRSZWwuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB0aGlzLnBsdWdpbnMuYW5jaG9yLl9yZWxNZXJnZS5jYWxsKHRoaXMsIGNvbnRleHRBbmNob3IsIGNvbnRleHRBbmNob3IubGlua0RlZmF1bHRSZWwuY2hlY2tfYm9va21hcmspKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRBbmNob3IuZG93bmxvYWQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0QW5jaG9yLmxpbmtEZWZhdWx0UmVsLmNoZWNrX2Jvb2ttYXJrID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5zZXRSZWwuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCB0aGlzLnBsdWdpbnMuYW5jaG9yLl9yZWxEZWxldGUuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCBjb250ZXh0QW5jaG9yLmxpbmtEZWZhdWx0UmVsLmNoZWNrX2Jvb2ttYXJrKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZWxNZXJnZTogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIHJlbEF0dHIpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50ID0gY29udGV4dEFuY2hvci5jdXJyZW50UmVsO1xyXG4gICAgICAgIGlmICghcmVsQXR0cikgcmV0dXJuIGN1cnJlbnQuam9pbignICcpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICgvXm9ubHlcXDovLnRlc3QocmVsQXR0cikpIHtcclxuICAgICAgICAgICAgcmVsQXR0ciA9IHJlbEF0dHIucmVwbGFjZSgvXm9ubHlcXDovLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBjb250ZXh0QW5jaG9yLmN1cnJlbnRSZWwgPSByZWxBdHRyLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWxBdHRyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVscyA9IHJlbEF0dHIuc3BsaXQoJyAnKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmVscy5sZW5ndGgsIGluZGV4OyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaW5kZXggPSBjdXJyZW50LmluZGV4T2YocmVsc1tpXSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIGN1cnJlbnQucHVzaChyZWxzW2ldKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50LmpvaW4oJyAnKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3JlbERlbGV0ZTogZnVuY3Rpb24gKGNvbnRleHRBbmNob3IsIHJlbEF0dHIpIHtcclxuICAgICAgICBpZiAoIXJlbEF0dHIpIHJldHVybiBjb250ZXh0QW5jaG9yLmN1cnJlbnRSZWwuam9pbignICcpO1xyXG4gICAgICAgIGlmICgvXm9ubHlcXDovLnRlc3QocmVsQXR0cikpIHJlbEF0dHIgPSByZWxBdHRyLnJlcGxhY2UoL15vbmx5XFw6LywgJycpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVscyA9IGNvbnRleHRBbmNob3IuY3VycmVudFJlbC5qb2luKCcgJykucmVwbGFjZSh0aGlzLl93LlJlZ0V4cChyZWxBdHRyICsgJ1xcXFxzKicpLCAnJyk7XHJcbiAgICAgICAgY29udGV4dEFuY2hvci5jdXJyZW50UmVsID0gcmVscy5zcGxpdCgnICcpO1xyXG4gICAgICAgIHJldHVybiByZWxzO1xyXG4gICAgfSxcclxuXHJcbiAgICBpbml0OiBmdW5jdGlvbiAoY29udGV4dEFuY2hvcikge1xyXG4gICAgICAgIGNvbnRleHRBbmNob3IubGlua0FuY2hvciA9IG51bGw7XHJcbiAgICAgICAgY29udGV4dEFuY2hvci5saW5rVmFsdWUgPSBjb250ZXh0QW5jaG9yLnByZXZpZXcudGV4dENvbnRlbnQgPSBjb250ZXh0QW5jaG9yLnVybElucHV0LnZhbHVlID0gJyc7XHJcbiAgICAgICAgY29udGV4dEFuY2hvci5hbmNob3JUZXh0LnZhbHVlID0gJyc7XHJcbiAgICAgICAgY29udGV4dEFuY2hvci5uZXdXaW5kb3dDaGVjay5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgY29udGV4dEFuY2hvci5kb3dubG9hZENoZWNrLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICBjb250ZXh0QW5jaG9yLl9jaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnNldFJlbC5jYWxsKHRoaXMsIGNvbnRleHRBbmNob3IsIGNvbnRleHRBbmNob3IuZGVmYXVsdFJlbCk7XHJcbiAgICAgICAgaWYgKGNvbnRleHRBbmNob3IucmVsTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnRvZ2dsZVJlbExpc3QuY2FsbCh0aGlzLCBjb250ZXh0QW5jaG9yLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29udGV4dC5hbmNob3IuY2FsbGVyQ29udGV4dCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnNlbGVjdE1lbnUuaW5pdC5jYWxsKHRoaXMsIHRoaXMuY29udGV4dC5zZWxlY3RNZW51LmNhbGxlckNvbnRleHQpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuaW1wb3J0IGRpYWxvZyBmcm9tICcuLi9tb2R1bGVzL2RpYWxvZyc7XHJcbmltcG9ydCBhbmNob3IgZnJvbSAnLi4vbW9kdWxlcy9fYW5jaG9yJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdsaW5rJyxcclxuICAgIGRpc3BsYXk6ICdkaWFsb2cnLFxyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvcmUuYWRkTW9kdWxlKFtkaWFsb2csIGFuY2hvcl0pO1xyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRMaW5rID0gY29udGV4dC5saW5rID0ge1xyXG4gICAgICAgICAgICBmb2N1c0VsZW1lbnQ6IG51bGwsIC8vIEBPdmVycmlkZSBkaWFsb2cgLy8gVGhpcyBlbGVtZW50IGhhcyBmb2N1cyB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLlxyXG4gICAgICAgICAgICBfbGlua0FuY2hvcjogbnVsbCxcclxuICAgICAgICAgICAgYW5jaG9yQ3R4OiBudWxsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIGxpbmsgZGlhbG9nICovXHJcbiAgICAgICAgbGV0IGxpbmtfZGlhbG9nID0gdGhpcy5zZXREaWFsb2coY29yZSk7XHJcbiAgICAgICAgY29udGV4dExpbmsubW9kYWwgPSBsaW5rX2RpYWxvZztcclxuICAgICAgICBcclxuICAgICAgICAvKiogbGluayBjb250cm9sbGVyICovXHJcbiAgICAgICAgbGV0IGxpbmtfY29udHJvbGxlciA9IHRoaXMuc2V0Q29udHJvbGxlcl9MaW5rQnV0dG9uKGNvcmUpO1xyXG4gICAgICAgIGNvbnRleHRMaW5rLmxpbmtDb250cm9sbGVyID0gbGlua19jb250cm9sbGVyO1xyXG5cclxuICAgICAgICBsaW5rX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCdmb3JtJykuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgdGhpcy5zdWJtaXQuYmluZChjb3JlKSk7XHJcbiAgICAgICAgbGlua19jb250cm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrX2xpbmtDb250cm9sbGVyLmJpbmQoY29yZSkpO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIGh0bWwgKi9cclxuICAgICAgICBjb250ZXh0LmRpYWxvZy5tb2RhbC5hcHBlbmRDaGlsZChsaW5rX2RpYWxvZyk7XHJcblxyXG4gICAgICAgIC8qKiBhcHBlbmQgY29udHJvbGxlciAqL1xyXG4gICAgICAgIGNvbnRleHQuZWxlbWVudC5yZWxhdGl2ZS5hcHBlbmRDaGlsZChsaW5rX2NvbnRyb2xsZXIpO1xyXG5cclxuICAgICAgICAvKiogbGluayBldmVudCAqL1xyXG4gICAgICAgIGNvcmUucGx1Z2lucy5hbmNob3IuaW5pdEV2ZW50LmNhbGwoY29yZSwgJ2xpbmsnLCBsaW5rX2RpYWxvZyk7XHJcbiAgICAgICAgY29udGV4dExpbmsuZm9jdXNFbGVtZW50ID0gY29udGV4dC5hbmNob3IuY2FsbGVyLmxpbmsudXJsSW5wdXQ7XHJcblxyXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICBsaW5rX2RpYWxvZyA9IG51bGwsIGxpbmtfY29udHJvbGxlciA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiBkaWFsb2cgKi9cclxuICAgIHNldERpYWxvZzogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XHJcblxyXG4gICAgICAgIGRpYWxvZy5jbGFzc05hbWUgPSAnc2UtZGlhbG9nLWNvbnRlbnQnO1xyXG4gICAgICAgIGRpYWxvZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIGxldCBodG1sID0gJycgK1xyXG4gICAgICAgICAgICAnPGZvcm0+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1oZWFkZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiY2xvc2VcIiBjbGFzcz1cInNlLWJ0biBzZS1kaWFsb2ctY2xvc2VcIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5jbG9zZSArICdcIiBhcmlhLWxhYmVsPVwiJyArIGxhbmcuZGlhbG9nQm94LmNsb3NlICsgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5jYW5jZWwgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS1tb2RhbC10aXRsZVwiPicgKyBsYW5nLmRpYWxvZ0JveC5saW5rQm94LnRpdGxlICsgJzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgIGNvcmUuY29udGV4dC5hbmNob3IuZm9ybXMuaW5uZXJIVE1MICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvb3RlclwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cInNlLWJ0bi1wcmltYXJ5XCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJ1wiPjxzcGFuPicgKyBsYW5nLmRpYWxvZ0JveC5zdWJtaXRCdXR0b24gKyAnPC9zcGFuPjwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPC9mb3JtPic7XHJcblxyXG4gICAgICAgIGRpYWxvZy5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgICAgIHJldHVybiBkaWFsb2c7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiBtb2RpZnkgY29udHJvbGxlciBidXR0b24gKi9cclxuICAgIHNldENvbnRyb2xsZXJfTGlua0J1dHRvbjogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xyXG4gICAgICAgIGNvbnN0IGljb25zID0gY29yZS5pY29ucztcclxuICAgICAgICBjb25zdCBsaW5rX2J0biA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuXHJcbiAgICAgICAgbGlua19idG4uY2xhc3NOYW1lID0gJ3NlLWNvbnRyb2xsZXIgc2UtY29udHJvbGxlci1saW5rJztcclxuICAgICAgICBsaW5rX2J0bi5pbm5lckhUTUwgPSAnJyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtYXJyb3cgc2UtYXJyb3ctdXBcIj48L2Rpdj4nICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJsaW5rLWNvbnRlbnRcIj48c3Bhbj48YSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiXCI+PC9hPiZuYnNwOzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtYnRuLWdyb3VwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cInVwZGF0ZVwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLmVkaXQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLmVkaXQgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cInVubGlua1wiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zLnVubGluayArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIudW5saW5rICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJkZWxldGVcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5kZWxldGUgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLnJlbW92ZSArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzwvZGl2Pic7XHJcblxyXG4gICAgICAgIHJldHVybiBsaW5rX2J0bjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgZGlhbG9nXHJcbiAgICAgKi9cclxuICAgIG9wZW46IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuZGlhbG9nLm9wZW4uY2FsbCh0aGlzLCAnbGluaycsICdsaW5rJyA9PT0gdGhpcy5jdXJyZW50Q29udHJvbGxlck5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzdWJtaXQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdGhpcy5zaG93TG9hZGluZygpO1xyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qgb0EgPSB0aGlzLnBsdWdpbnMuYW5jaG9yLmNyZWF0ZUFuY2hvci5jYWxsKHRoaXMsIHRoaXMuY29udGV4dC5hbmNob3IuY2FsbGVyLmxpbmssIGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKG9BID09PSBudWxsKSByZXR1cm47XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEZvcm1hdHMgPSB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHMoKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEZvcm1hdHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9Gb3JtYXQgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudChzZWxlY3RlZEZvcm1hdHNbMF0ubm9kZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9Gb3JtYXQuYXBwZW5kQ2hpbGQob0EpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbnNlcnROb2RlKG9Gb3JtYXQsIG51bGwsIHRydWUpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbnNlcnROb2RlKG9BLCBudWxsLCB0cnVlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKG9BLmNoaWxkTm9kZXNbMF0sIDAsIG9BLmNoaWxkTm9kZXNbMF0sIG9BLnRleHRDb250ZW50Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXQgcmFuZ2VcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gdGhpcy5jb250ZXh0LmxpbmsuX2xpbmtBbmNob3IuY2hpbGROb2Rlc1swXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UodGV4dE5vZGUsIDAsIHRleHROb2RlLCB0ZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5jbG9zZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgY29yZVxyXG4gICAgICovXHJcbiAgICBhY3RpdmU6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xsZXJBcnJheS5pbmRleE9mKHRoaXMuY29udGV4dC5saW5rLmxpbmtDb250cm9sbGVyKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXRpbC5pc0FuY2hvcihlbGVtZW50KSAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1pbWFnZS1saW5rJykgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbGxlckFycmF5LmluZGV4T2YodGhpcy5jb250ZXh0LmxpbmsubGlua0NvbnRyb2xsZXIpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmxpbmsuY2FsbF9jb250cm9sbGVyLmNhbGwodGhpcywgZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGRpYWxvZ1xyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24gKHVwZGF0ZSkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5hbmNob3Iub24uY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuYW5jaG9yLmNhbGxlci5saW5rLCB1cGRhdGUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBjYWxsX2NvbnRyb2xsZXI6IGZ1bmN0aW9uIChzZWxlY3Rpb25BVGFnKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0TGluayA9IHRoaXMuY29udGV4dC5saW5rLl9saW5rQW5jaG9yID0gdGhpcy5jb250ZXh0LmFuY2hvci5jYWxsZXIubGluay5saW5rQW5jaG9yID0gc2VsZWN0aW9uQVRhZztcclxuICAgICAgICBjb25zdCBsaW5rQnRuID0gdGhpcy5jb250ZXh0LmxpbmsubGlua0NvbnRyb2xsZXI7XHJcbiAgICAgICAgY29uc3QgbGluayA9IGxpbmtCdG4ucXVlcnlTZWxlY3RvcignYScpO1xyXG5cclxuICAgICAgICBsaW5rLmhyZWYgPSBzZWxlY3Rpb25BVGFnLmhyZWY7XHJcbiAgICAgICAgbGluay50aXRsZSA9IHNlbGVjdGlvbkFUYWcudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgbGluay50ZXh0Q29udGVudCA9IHNlbGVjdGlvbkFUYWcudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhzZWxlY3Rpb25BVGFnLCAnb24nKTtcclxuICAgICAgICB0aGlzLnNldENvbnRyb2xsZXJQb3NpdGlvbihsaW5rQnRuLCBzZWxlY3Rpb25BVGFnLCAnYm90dG9tJywge2xlZnQ6IDAsIHRvcDogMH0pO1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcnNPbihsaW5rQnRuLCBzZWxlY3Rpb25BVGFnLCAnbGluaycsIHRoaXMudXRpbC5yZW1vdmVDbGFzcy5iaW5kKHRoaXMudXRpbCwgdGhpcy5jb250ZXh0LmxpbmsuX2xpbmtBbmNob3IsICdvbicpKTtcclxuICAgIH0sXHJcblxyXG4gICAgb25DbGlja19saW5rQ29udHJvbGxlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICBjb25zdCBjb21tYW5kID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKSB8fCBlLnRhcmdldC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgaWYgKC91cGRhdGUvLnRlc3QoY29tbWFuZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5vcGVuLmNhbGwodGhpcywgJ2xpbmsnLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKC91bmxpbmsvLnRlc3QoY29tbWFuZCkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2MgPSB0aGlzLnV0aWwuZ2V0Q2hpbGRFbGVtZW50KHRoaXMuY29udGV4dC5saW5rLl9saW5rQW5jaG9yLCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gY3VycmVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCB8fCBjdXJyZW50Lm5vZGVUeXBlID09PSAzOyB9LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVjID0gdGhpcy51dGlsLmdldENoaWxkRWxlbWVudCh0aGlzLmNvbnRleHQubGluay5fbGlua0FuY2hvciwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgfHwgY3VycmVudC5ub2RlVHlwZSA9PT0gMzsgfSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2Uoc2MsIDAsIGVjLCBlYy50ZXh0Q29udGVudC5sZW5ndGgpO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGVDaGFuZ2UobnVsbCwgbnVsbCwgWydBJ10sIGZhbHNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvKiogZGVsZXRlICovXHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVJdGVtKHRoaXMuY29udGV4dC5saW5rLl9saW5rQW5jaG9yKTtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFuY2hvci5jYWxsZXIubGluay5saW5rQW5jaG9yID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xyXG5cclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGRpYWxvZ1xyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmxpbmsubGlua0NvbnRyb2xsZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLmluaXQuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuYW5jaG9yLmNhbGxlci5saW5rKTtcclxuICAgIH1cclxufTtcclxuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBkaWFsb2cgZnJvbSAnLi4vbW9kdWxlcy9kaWFsb2cnO1xyXG5pbXBvcnQgYW5jaG9yIGZyb20gJy4uL21vZHVsZXMvX2FuY2hvcic7XHJcbmltcG9ydCBjb21wb25lbnQgZnJvbSAnLi4vbW9kdWxlcy9jb21wb25lbnQnO1xyXG5pbXBvcnQgcmVzaXppbmcgZnJvbSAnLi4vbW9kdWxlcy9yZXNpemluZyc7XHJcbmltcG9ydCBmaWxlTWFuYWdlciBmcm9tICcuLi9tb2R1bGVzL2ZpbGVNYW5hZ2VyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdpbWFnZScsXHJcbiAgICBkaXNwbGF5OiAnZGlhbG9nJyxcclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb3JlLmFkZE1vZHVsZShbZGlhbG9nLCBhbmNob3IsIGNvbXBvbmVudCwgcmVzaXppbmcsIGZpbGVNYW5hZ2VyXSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNvcmUub3B0aW9ucztcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IGNvbnRleHQuaW1hZ2UgPSB7XHJcbiAgICAgICAgICAgIF9pbmZvTGlzdDogW10sIC8vIEBPdmVycmlkZSBmaWxlTWFuYWdlclxyXG4gICAgICAgICAgICBfaW5mb0luZGV4OiAwLCAvLyBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcclxuICAgICAgICAgICAgX3VwbG9hZEZpbGVMZW5ndGg6IDAsIC8vIEBPdmVycmlkZSBmaWxlTWFuYWdlclxyXG4gICAgICAgICAgICBmb2N1c0VsZW1lbnQ6IG51bGwsIC8vIEBPdmVycmlkZSBkaWFsb2cgLy8gVGhpcyBlbGVtZW50IGhhcyBmb2N1cyB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLlxyXG4gICAgICAgICAgICBzaXplVW5pdDogb3B0aW9ucy5faW1hZ2VTaXplVW5pdCxcclxuICAgICAgICAgICAgX2xpbmtFbGVtZW50OiAnJyxcclxuICAgICAgICAgICAgX2FsdFRleHQ6ICcnLFxyXG4gICAgICAgICAgICBfYWxpZ246ICdub25lJyxcclxuICAgICAgICAgICAgX2Zsb2F0Q2xhc3NSZWdFeHA6ICdfX3NlX19mbG9hdFxcXFwtW2Etel0rJyxcclxuICAgICAgICAgICAgX3Zfc3JjOiB7X2xpbmtWYWx1ZTogJyd9LFxyXG4gICAgICAgICAgICBzdmdEZWZhdWx0U2l6ZTogJzMwJScsXHJcbiAgICAgICAgICAgIGJhc2U2NFJlbmRlckluZGV4OiAwLFxyXG4gICAgICAgICAgICAvLyBAcmVxdWlyZSBAT3ZlcnJpZGUgY29tcG9uZW50XHJcbiAgICAgICAgICAgIF9lbGVtZW50OiBudWxsLFxyXG4gICAgICAgICAgICBfY292ZXI6IG51bGwsXHJcbiAgICAgICAgICAgIF9jb250YWluZXI6IG51bGwsXHJcbiAgICAgICAgICAgIC8vIEBPdmVycmlkZSByZXNpemluZyBwcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgIGlucHV0WDogbnVsbCxcclxuICAgICAgICAgICAgaW5wdXRZOiBudWxsLFxyXG4gICAgICAgICAgICBfZWxlbWVudF93OiAxLFxyXG4gICAgICAgICAgICBfZWxlbWVudF9oOiAxLFxyXG4gICAgICAgICAgICBfZWxlbWVudF9sOiAwLFxyXG4gICAgICAgICAgICBfZWxlbWVudF90OiAwLFxyXG4gICAgICAgICAgICBfZGVmYXVsdFNpemVYOiAnYXV0bycsXHJcbiAgICAgICAgICAgIF9kZWZhdWx0U2l6ZVk6ICdhdXRvJyxcclxuICAgICAgICAgICAgX29yaWdpbl93OiBvcHRpb25zLmltYWdlV2lkdGggPT09ICdhdXRvJyA/ICcnIDogb3B0aW9ucy5pbWFnZVdpZHRoLFxyXG4gICAgICAgICAgICBfb3JpZ2luX2g6IG9wdGlvbnMuaW1hZ2VIZWlnaHQgPT09ICdhdXRvJyA/ICcnIDogb3B0aW9ucy5pbWFnZUhlaWdodCxcclxuICAgICAgICAgICAgX3Byb3BvcnRpb25DaGVja2VkOiB0cnVlLFxyXG4gICAgICAgICAgICBfcmVzaXppbmc6IG9wdGlvbnMuaW1hZ2VSZXNpemluZyxcclxuICAgICAgICAgICAgX3Jlc2l6ZURvdEhpZGU6ICFvcHRpb25zLmltYWdlSGVpZ2h0U2hvdyxcclxuICAgICAgICAgICAgX3JvdGF0aW9uOiBvcHRpb25zLmltYWdlUm90YXRpb24sXHJcbiAgICAgICAgICAgIF9hbGlnbkhpZGU6ICFvcHRpb25zLmltYWdlQWxpZ25TaG93LFxyXG4gICAgICAgICAgICBfb25seVBlcmNlbnRhZ2U6IG9wdGlvbnMuaW1hZ2VTaXplT25seVBlcmNlbnRhZ2UsXHJcbiAgICAgICAgICAgIF9yYXRpbzogZmFsc2UsXHJcbiAgICAgICAgICAgIF9yYXRpb1g6IDEsXHJcbiAgICAgICAgICAgIF9yYXRpb1k6IDEsXHJcbiAgICAgICAgICAgIF9jYXB0aW9uU2hvdzogdHJ1ZSxcclxuICAgICAgICAgICAgX2NhcHRpb25DaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgX2NhcHRpb246IG51bGwsXHJcbiAgICAgICAgICAgIGNhcHRpb25DaGVja0VsOiBudWxsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIGltYWdlIGRpYWxvZyAqL1xyXG4gICAgICAgIGxldCBpbWFnZV9kaWFsb2cgPSB0aGlzLnNldERpYWxvZyhjb3JlKTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UubW9kYWwgPSBpbWFnZV9kaWFsb2c7XHJcbiAgICAgICAgY29udGV4dEltYWdlLmltZ0lucHV0RmlsZSA9IGltYWdlX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuX3NlX2ltYWdlX2ZpbGUnKTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuaW1nVXJsRmlsZSA9IGltYWdlX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuX3NlX2ltYWdlX3VybCcpO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5mb2N1c0VsZW1lbnQgPSBjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlIHx8IGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5hbHRUZXh0ID0gaW1hZ2VfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfaW1hZ2VfYWx0Jyk7XHJcbiAgICAgICAgY29udGV4dEltYWdlLmNhcHRpb25DaGVja0VsID0gaW1hZ2VfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfaW1hZ2VfY2hlY2tfY2FwdGlvbicpO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5wcmV2aWV3U3JjID0gaW1hZ2VfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFiX2NvbnRlbnRfaW1hZ2UgLnNlLWxpbmstcHJldmlldycpO1xyXG5cclxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgIGltYWdlX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuc2UtZGlhbG9nLXRhYnMnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub3BlblRhYi5iaW5kKGNvcmUpKTtcclxuICAgICAgICBpbWFnZV9kaWFsb2cucXVlcnlTZWxlY3RvcignZm9ybScpLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIHRoaXMuc3VibWl0LmJpbmQoY29yZSkpO1xyXG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlKSBpbWFnZV9kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLWZpbGUtcmVtb3ZlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9yZW1vdmVTZWxlY3RlZEZpbGVzLmJpbmQoY29udGV4dEltYWdlLmltZ0lucHV0RmlsZSwgY29udGV4dEltYWdlLmltZ1VybEZpbGUsIGNvbnRleHRJbWFnZS5wcmV2aWV3U3JjKSk7XHJcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlKSBjb250ZXh0SW1hZ2UuaW1nVXJsRmlsZS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMuX29uTGlua1ByZXZpZXcuYmluZChjb250ZXh0SW1hZ2UucHJldmlld1NyYywgY29udGV4dEltYWdlLl92X3NyYywgb3B0aW9ucy5saW5rUHJvdG9jb2wpKTtcclxuICAgICAgICBpZiAoY29udGV4dEltYWdlLmltZ0lucHV0RmlsZSAmJiBjb250ZXh0SW1hZ2UuaW1nVXJsRmlsZSkgY29udGV4dEltYWdlLmltZ0lucHV0RmlsZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLl9maWxlSW5wdXRDaGFuZ2UuYmluZChjb250ZXh0SW1hZ2UpKTtcclxuXHJcbiAgICAgICAgY29uc3QgaW1hZ2VHYWxsZXJ5QnV0dG9uID0gaW1hZ2VfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fX3NlX19nYWxsZXJ5Jyk7XHJcbiAgICAgICAgaWYgKGltYWdlR2FsbGVyeUJ1dHRvbikgaW1hZ2VHYWxsZXJ5QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb3BlbkdhbGxlcnkuYmluZChjb3JlKSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29udGV4dEltYWdlLnByb3BvcnRpb24gPSB7fTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRYID0ge307XHJcbiAgICAgICAgY29udGV4dEltYWdlLmlucHV0WSA9IHt9O1xyXG4gICAgICAgIGlmIChvcHRpb25zLmltYWdlUmVzaXppbmcpIHtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLnByb3BvcnRpb24gPSBpbWFnZV9kaWFsb2cucXVlcnlTZWxlY3RvcignLl9zZV9pbWFnZV9jaGVja19wcm9wb3J0aW9uJyk7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5pbnB1dFggPSBpbWFnZV9kaWFsb2cucXVlcnlTZWxlY3RvcignLl9zZV9pbWFnZV9zaXplX3gnKTtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLmlucHV0WSA9IGltYWdlX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuX3NlX2ltYWdlX3NpemVfeScpO1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRYLnZhbHVlID0gb3B0aW9ucy5pbWFnZVdpZHRoO1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRZLnZhbHVlID0gb3B0aW9ucy5pbWFnZUhlaWdodDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5pbnB1dFguYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLnNldElucHV0U2l6ZS5iaW5kKGNvcmUsICd4JykpO1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuaW5wdXRZLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5zZXRJbnB1dFNpemUuYmluZChjb3JlLCAneScpKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5pbnB1dFguYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5zZXRSYXRpby5iaW5kKGNvcmUpKTtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLmlucHV0WS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLnNldFJhdGlvLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UucHJvcG9ydGlvbi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLnNldFJhdGlvLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaW1hZ2VfZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5zZS1kaWFsb2ctYnRuLXJldmVydCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5zaXplUmV2ZXJ0LmJpbmQoY29yZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqIGFwcGVuZCBodG1sICovXHJcbiAgICAgICAgY29udGV4dC5kaWFsb2cubW9kYWwuYXBwZW5kQ2hpbGQoaW1hZ2VfZGlhbG9nKTtcclxuXHJcbiAgICAgICAgLyoqIGxpbmsgZXZlbnQgKi9cclxuICAgICAgICBjb3JlLnBsdWdpbnMuYW5jaG9yLmluaXRFdmVudC5jYWxsKGNvcmUsICdpbWFnZScsIGltYWdlX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuX3NlX3RhYl9jb250ZW50X3VybCcpKTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuYW5jaG9yQ3R4ID0gY29yZS5jb250ZXh0LmFuY2hvci5jYWxsZXIuaW1hZ2U7XHJcblxyXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICBpbWFnZV9kaWFsb2cgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiogZGlhbG9nICovXHJcbiAgICBzZXREaWFsb2c6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gY29yZS5vcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG5cclxuICAgICAgICBkaWFsb2cuY2xhc3NOYW1lID0gJ3NlLWRpYWxvZy1jb250ZW50IHNlLWRpYWxvZy1pbWFnZSc7XHJcbiAgICAgICAgZGlhbG9nLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblxyXG4gICAgICAgIGxldCBodG1sID0gJycgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1oZWFkZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJjbG9zZVwiIGNsYXNzPVwic2UtYnRuIHNlLWRpYWxvZy1jbG9zZVwiIGNsYXNzPVwiY2xvc2VcIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5jbG9zZSArICdcIiBhcmlhLWxhYmVsPVwiJyArIGxhbmcuZGlhbG9nQm94LmNsb3NlICsgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuaWNvbnMuY2FuY2VsICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLW1vZGFsLXRpdGxlXCI+JyArIGxhbmcuZGlhbG9nQm94LmltYWdlQm94LnRpdGxlICsgJzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy10YWJzXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJfc2VfdGFiX2xpbmsgYWN0aXZlXCIgZGF0YS10YWItbGluaz1cImltYWdlXCI+JyArIGxhbmcudG9vbGJhci5pbWFnZSArICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIl9zZV90YWJfbGlua1wiIGRhdGEtdGFiLWxpbms9XCJ1cmxcIj4nICsgbGFuZy50b29sYmFyLmxpbmsgKyAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzxmb3JtIG1ldGhvZD1cInBvc3RcIiBlbmN0eXBlPVwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJfc2VfdGFiX2NvbnRlbnQgX3NlX3RhYl9jb250ZW50X2ltYWdlXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctYm9keVwiPjxkaXYgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICNjY2M7XCI+JztcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLmltYWdlRmlsZUlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJycgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+JyArIGxhbmcuZGlhbG9nQm94LmltYWdlQm94LmZpbGUgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtLWZpbGVzXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgY2xhc3M9XCJzZS1pbnB1dC1mb3JtIF9zZV9pbWFnZV9maWxlXCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCInICsgb3B0aW9uLmltYWdlQWNjZXB0ICsgJ1wiJyArIChvcHRpb24uaW1hZ2VNdWx0aXBsZUZpbGUgPyAnIG11bHRpcGxlPVwibXVsdGlwbGVcIicgOiAnJykgKyAnLz4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuIHNlLWRpYWxvZy1maWxlcy1lZGdlLWJ1dHRvbiBzZS1maWxlLXJlbW92ZVwiIHRpdGxlPVwiJyArIGxhbmcuY29udHJvbGxlci5yZW1vdmUgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBsYW5nLmNvbnRyb2xsZXIucmVtb3ZlICsgJ1wiPicgKyBjb3JlLmljb25zLmNhbmNlbCArICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24uaW1hZ2VVcmxJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICcnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm1cIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPicgKyBsYW5nLmRpYWxvZ0JveC5pbWFnZUJveC51cmwgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtLWZpbGVzXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgY2xhc3M9XCJzZS1pbnB1dC1mb3JtIHNlLWlucHV0LXVybCBfc2VfaW1hZ2VfdXJsXCIgdHlwZT1cInRleHRcIiAvPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG9wdGlvbi5pbWFnZUdhbGxlcnlVcmwgJiYgY29yZS5wbHVnaW5zLmltYWdlR2FsbGVyeSkgPyAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4gc2UtZGlhbG9nLWZpbGVzLWVkZ2UtYnV0dG9uIF9fc2VfX2dhbGxlcnlcIiB0aXRsZT1cIicgKyBsYW5nLnRvb2xiYXIuaW1hZ2VHYWxsZXJ5ICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgbGFuZy50b29sYmFyLmltYWdlR2FsbGVyeSArICdcIj4nICsgY29yZS5pY29ucy5pbWFnZV9nYWxsZXJ5ICsgJzwvYnV0dG9uPicgOiAnJykgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHByZSBjbGFzcz1cInNlLWxpbmstcHJldmlld1wiPjwvcHJlPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPicgKyBsYW5nLmRpYWxvZ0JveC5pbWFnZUJveC5hbHRUZXh0ICsgJzwvbGFiZWw+PGlucHV0IGNsYXNzPVwic2UtaW5wdXQtZm9ybSBfc2VfaW1hZ2VfYWx0XCIgdHlwZT1cInRleHRcIiAvPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JztcclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb24uaW1hZ2VSZXNpemluZykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb25seVBlcmNlbnRhZ2UgPSBvcHRpb24uaW1hZ2VTaXplT25seVBlcmNlbnRhZ2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbmx5UGVyY2VudERpc3BsYXkgPSBvbmx5UGVyY2VudGFnZSA/ICcgc3R5bGU9XCJkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XCInIDogJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHREaXNwbGF5ID0gIW9wdGlvbi5pbWFnZUhlaWdodFNob3cgPyAnIHN0eWxlPVwiZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1wiJyA6ICcnO1xyXG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtXCI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9ubHlQZXJjZW50YWdlIHx8ICFvcHRpb24uaW1hZ2VIZWlnaHRTaG93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICcnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLXNpemUtdGV4dFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgY2xhc3M9XCJzaXplLXdcIj4nICsgbGFuZy5kaWFsb2dCb3guc2l6ZSArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICcnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLXNpemUtdGV4dFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgY2xhc3M9XCJzaXplLXdcIj4nICsgbGFuZy5kaWFsb2dCb3gud2lkdGggKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwic2UtZGlhbG9nLXNpemUteFwiPiZuYnNwOzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbCBjbGFzcz1cInNpemUtaFwiPicgKyBsYW5nLmRpYWxvZ0JveC5oZWlnaHQgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJycgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCBjbGFzcz1cInNlLWlucHV0LWNvbnRyb2wgX3NlX2ltYWdlX3NpemVfeFwiIHBsYWNlaG9sZGVyPVwiYXV0b1wiJyArIChvbmx5UGVyY2VudGFnZSA/ICcgdHlwZT1cIm51bWJlclwiIG1pbj1cIjFcIicgOiAndHlwZT1cInRleHRcIicpICsgKG9ubHlQZXJjZW50YWdlID8gJyBtYXg9XCIxMDBcIicgOiAnJykgKyAnIC8+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwic2UtZGlhbG9nLXNpemUteFwiJyArIGhlaWdodERpc3BsYXkgKyAnPicgKyAob25seVBlcmNlbnRhZ2UgPyAnJScgOiAneCcpICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJzZS1pbnB1dC1jb250cm9sIF9zZV9pbWFnZV9zaXplX3lcIiBwbGFjZWhvbGRlcj1cImF1dG9cIicgKyBvbmx5UGVyY2VudERpc3BsYXkgKyAob25seVBlcmNlbnRhZ2UgPyAnIG1heD1cIjEwMFwiJyA6ICcnKSArIGhlaWdodERpc3BsYXkgKyAnLz4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwnICsgb25seVBlcmNlbnREaXNwbGF5ICsgaGVpZ2h0RGlzcGxheSArICc+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic2UtZGlhbG9nLWJ0bi1jaGVjayBfc2VfaW1hZ2VfY2hlY2tfcHJvcG9ydGlvblwiIGNoZWNrZWQvPiZuYnNwOycgKyBsYW5nLmRpYWxvZ0JveC5wcm9wb3J0aW9uICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3gucmV2ZXJ0QnV0dG9uICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgbGFuZy5kaWFsb2dCb3gucmV2ZXJ0QnV0dG9uICsgJ1wiIGNsYXNzPVwic2UtYnRuIHNlLWRpYWxvZy1idG4tcmV2ZXJ0XCIgc3R5bGU9XCJmbG9hdDogcmlnaHQ7XCI+JyArIGNvcmUuaWNvbnMucmV2ZXJ0ICsgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGh0bWwgKz0gJycgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtIHNlLWRpYWxvZy1mb3JtLWZvb3RlclwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzZS1kaWFsb2ctYnRuLWNoZWNrIF9zZV9pbWFnZV9jaGVja19jYXB0aW9uXCIgLz4mbmJzcDsnICsgbGFuZy5kaWFsb2dCb3guY2FwdGlvbiArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJfc2VfdGFiX2NvbnRlbnQgX3NlX3RhYl9jb250ZW50X3VybFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuY29udGV4dC5hbmNob3IuZm9ybXMuaW5uZXJIVE1MICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvb3RlclwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2JyArIChvcHRpb24uaW1hZ2VBbGlnblNob3cgPyAnJyA6ICcgc3R5bGU9XCJkaXNwbGF5OiBub25lXCInKSArICc+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzdW5lZGl0b3JfaW1hZ2VfcmFkaW9cIiBjbGFzcz1cInNlLWRpYWxvZy1idG4tcmFkaW9cIiB2YWx1ZT1cIm5vbmVcIiBjaGVja2VkPicgKyBsYW5nLmRpYWxvZ0JveC5iYXNpYyArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3VuZWRpdG9yX2ltYWdlX3JhZGlvXCIgY2xhc3M9XCJzZS1kaWFsb2ctYnRuLXJhZGlvXCIgdmFsdWU9XCJsZWZ0XCI+JyArIGxhbmcuZGlhbG9nQm94LmxlZnQgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInN1bmVkaXRvcl9pbWFnZV9yYWRpb1wiIGNsYXNzPVwic2UtZGlhbG9nLWJ0bi1yYWRpb1wiIHZhbHVlPVwiY2VudGVyXCI+JyArIGxhbmcuZGlhbG9nQm94LmNlbnRlciArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3VuZWRpdG9yX2ltYWdlX3JhZGlvXCIgY2xhc3M9XCJzZS1kaWFsb2ctYnRuLXJhZGlvXCIgdmFsdWU9XCJyaWdodFwiPicgKyBsYW5nLmRpYWxvZ0JveC5yaWdodCArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJzZS1idG4tcHJpbWFyeVwiIHRpdGxlPVwiJyArIGxhbmcuZGlhbG9nQm94LnN1Ym1pdEJ1dHRvbiArICdcIiBhcmlhLWxhYmVsPVwiJyArIGxhbmcuZGlhbG9nQm94LnN1Ym1pdEJ1dHRvbiArICdcIj48c3Bhbj4nICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJzwvc3Bhbj48L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzwvZm9ybT4nO1xyXG5cclxuICAgICAgICBkaWFsb2cuaW5uZXJIVE1MID0gaHRtbDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRpYWxvZztcclxuICAgIH0sXHJcblxyXG4gICAgX2ZpbGVJbnB1dENoYW5nZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pbWdJbnB1dEZpbGUudmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbWdVcmxGaWxlLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3U3JjLnN0eWxlLnRleHREZWNvcmF0aW9uID0gJyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbWdVcmxGaWxlLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3U3JjLnN0eWxlLnRleHREZWNvcmF0aW9uID0gJ2xpbmUtdGhyb3VnaCc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfcmVtb3ZlU2VsZWN0ZWRGaWxlczogZnVuY3Rpb24gKHVybElucHV0LCBwcmV2aWV3U3JjKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmICh1cmxJbnB1dCkge1xyXG4gICAgICAgICAgICB1cmxJbnB1dC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgIHByZXZpZXdTcmMuc3R5bGUudGV4dERlY29yYXRpb24gPSAnJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9vcGVuR2FsbGVyeTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuY2FsbFBsdWdpbignaW1hZ2VHYWxsZXJ5JywgdGhpcy5wbHVnaW5zLmltYWdlR2FsbGVyeS5vcGVuLmJpbmQodGhpcywgdGhpcy5wbHVnaW5zLmltYWdlLl9zZXRVcmxJbnB1dC5iaW5kKHRoaXMuY29udGV4dC5pbWFnZSkpLCBudWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldFVybElucHV0OiBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgdGhpcy5hbHRUZXh0LnZhbHVlID0gdGFyZ2V0LmFsdDtcclxuICAgICAgICB0aGlzLl92X3NyYy5fbGlua1ZhbHVlID0gdGhpcy5wcmV2aWV3U3JjLnRleHRDb250ZW50ID0gdGhpcy5pbWdVcmxGaWxlLnZhbHVlID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpIHx8IHRhcmdldC5zcmM7XHJcbiAgICAgICAgdGhpcy5pbWdVcmxGaWxlLmZvY3VzKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9vbkxpbmtQcmV2aWV3OiBmdW5jdGlvbiAoY29udGV4dCwgcHJvdG9jb2wsIGUpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGUudGFyZ2V0LnZhbHVlLnRyaW0oKTtcclxuICAgICAgICBjb250ZXh0Ll9saW5rVmFsdWUgPSB0aGlzLnRleHRDb250ZW50ID0gIXZhbHVlID8gJycgOiAocHJvdG9jb2wgJiYgdmFsdWUuaW5kZXhPZignOi8vJykgPT09IC0xICYmIHZhbHVlLmluZGV4T2YoJyMnKSAhPT0gMCkgPyBwcm90b2NvbCArIHZhbHVlIDogdmFsdWUuaW5kZXhPZignOi8vJykgPT09IC0xID8gJy8nICsgdmFsdWUgOiB2YWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgQFJlcXVpcmVkIGZpbGVNYW5hZ2VyXHJcbiAgICAgKi9cclxuICAgIGZpbGVUYWdzOiBbJ2ltZyddLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGNvcmUsIGZpbGVNYW5hZ2VyLCByZXNpemluZ1xyXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGNhbGxlZCBmcm9tIGNvcmUuc2VsZWN0Q29tcG9uZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRhcmdldCBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHNlbGVjdDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2Uub25Nb2RpZnlNb2RlLmNhbGwodGhpcywgZWxlbWVudCwgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLmNhbGxfY29udHJvbGxlcl9yZXNpemUuY2FsbCh0aGlzLCBlbGVtZW50LCAnaW1hZ2UnKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGZpbGVNYW5hZ2VyLCByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlRWwgPSBlbGVtZW50IHx8IHRoaXMuY29udGV4dC5pbWFnZS5fZWxlbWVudDtcclxuICAgICAgICBjb25zdCBpbWFnZUNvbnRhaW5lciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGltYWdlRWwsIHRoaXMudXRpbC5pc01lZGlhQ29tcG9uZW50KSB8fCBpbWFnZUVsO1xyXG4gICAgICAgIGNvbnN0IGRhdGFJbmRleCA9IGltYWdlRWwuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4JykgKiAxO1xyXG5cclxuICAgICAgICAvLyBldmVudFxyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mdW5jdGlvbnMub25JbWFnZURlbGV0ZUJlZm9yZSA9PT0gJ2Z1bmN0aW9uJyAmJiAodGhpcy5mdW5jdGlvbnMub25JbWFnZURlbGV0ZUJlZm9yZShpbWFnZUVsLCBpbWFnZUNvbnRhaW5lciwgZGF0YUluZGV4LCB0aGlzKSA9PT0gZmFsc2UpKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBmb2N1c0VsID0gKGltYWdlQ29udGFpbmVyLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgfHwgaW1hZ2VDb250YWluZXIubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBlbXB0eURpdiA9IGltYWdlQ29udGFpbmVyLnBhcmVudE5vZGU7XHJcbiAgICAgICAgdGhpcy51dGlsLnJlbW92ZUl0ZW0oaW1hZ2VDb250YWluZXIpO1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5pbml0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG5cclxuICAgICAgICBpZiAoZW1wdHlEaXYgIT09IHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWcpIHRoaXMudXRpbC5yZW1vdmVJdGVtQWxsUGFyZW50cyhlbXB0eURpdiwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDA7IH0sIG51bGwpO1xyXG5cclxuICAgICAgICAvLyBmb2N1c1xyXG4gICAgICAgIHRoaXMuZm9jdXNFZGdlKGZvY3VzRWwpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGV2ZW50XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLmRlbGV0ZUluZm8uY2FsbCh0aGlzLCAnaW1hZ2UnLCBkYXRhSW5kZXgsIHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWQpO1xyXG5cclxuICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZGlhbG9nXHJcbiAgICAgKi9cclxuICAgIG9uOiBmdW5jdGlvbiAodXBkYXRlKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghdXBkYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5pbnB1dFgudmFsdWUgPSBjb250ZXh0SW1hZ2UuX29yaWdpbl93ID0gdGhpcy5vcHRpb25zLmltYWdlV2lkdGggPT09IGNvbnRleHRJbWFnZS5fZGVmYXVsdFNpemVYID8gJycgOiB0aGlzLm9wdGlvbnMuaW1hZ2VXaWR0aDtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLmlucHV0WS52YWx1ZSA9IGNvbnRleHRJbWFnZS5fb3JpZ2luX2ggPSB0aGlzLm9wdGlvbnMuaW1hZ2VIZWlnaHQgPT09IGNvbnRleHRJbWFnZS5fZGVmYXVsdFNpemVZID8gJycgOiB0aGlzLm9wdGlvbnMuaW1hZ2VIZWlnaHQ7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlICYmIHRoaXMub3B0aW9ucy5pbWFnZU11bHRpcGxlRmlsZSkgY29udGV4dEltYWdlLmltZ0lucHV0RmlsZS5zZXRBdHRyaWJ1dGUoJ211bHRpcGxlJywgJ211bHRpcGxlJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5pbWdJbnB1dEZpbGUgJiYgdGhpcy5vcHRpb25zLmltYWdlTXVsdGlwbGVGaWxlKSBjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlLnJlbW92ZUF0dHJpYnV0ZSgnbXVsdGlwbGUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5vbi5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZS5hbmNob3JDdHgsIHVwZGF0ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBkaWFsb2dcclxuICAgICAqL1xyXG4gICAgb3BlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cub3Blbi5jYWxsKHRoaXMsICdpbWFnZScsICdpbWFnZScgPT09IHRoaXMuY3VycmVudENvbnRyb2xsZXJOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgb3BlblRhYjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBjb25zdCBtb2RhbCA9IHRoaXMuY29udGV4dC5pbWFnZS5tb2RhbDtcclxuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gKGUgPT09ICdpbml0JyA/IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFiX2xpbmsnKSA6IGUudGFyZ2V0KTtcclxuXHJcbiAgICAgICAgaWYgKCEvXkJVVFRPTiQvaS50ZXN0KHRhcmdldEVsZW1lbnQudGFnTmFtZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRGVjbGFyZSBhbGwgdmFyaWFibGVzXHJcbiAgICAgICAgY29uc3QgdGFiTmFtZSA9IHRhcmdldEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXRhYi1saW5rJyk7XHJcbiAgICAgICAgY29uc3QgY29udGVudENsYXNzTmFtZSA9ICdfc2VfdGFiX2NvbnRlbnQnO1xyXG4gICAgICAgIGxldCBpLCB0YWJDb250ZW50LCB0YWJMaW5rcztcclxuXHJcbiAgICAgICAgLy8gR2V0IGFsbCBlbGVtZW50cyB3aXRoIGNsYXNzPVwidGFiY29udGVudFwiIGFuZCBoaWRlIHRoZW1cclxuICAgICAgICB0YWJDb250ZW50ID0gbW9kYWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb250ZW50Q2xhc3NOYW1lKTtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGFiQ29udGVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0YWJDb250ZW50W2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBHZXQgYWxsIGVsZW1lbnRzIHdpdGggY2xhc3M9XCJ0YWJsaW5rc1wiIGFuZCByZW1vdmUgdGhlIGNsYXNzIFwiYWN0aXZlXCJcclxuICAgICAgICB0YWJMaW5rcyA9IG1vZGFsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ19zZV90YWJfbGluaycpO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0YWJMaW5rcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGFiTGlua3NbaV0sICdhY3RpdmUnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNob3cgdGhlIGN1cnJlbnQgdGFiLCBhbmQgYWRkIGFuIFwiYWN0aXZlXCIgY2xhc3MgdG8gdGhlIGJ1dHRvbiB0aGF0IG9wZW5lZCB0aGUgdGFiXHJcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcignLicgKyBjb250ZW50Q2xhc3NOYW1lICsgJ18nICsgdGFiTmFtZSkuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKHRhcmdldEVsZW1lbnQsICdhY3RpdmUnKTtcclxuXHJcbiAgICAgICAgLy8gZm9jdXNcclxuICAgICAgICBpZiAodGFiTmFtZSA9PT0gJ2ltYWdlJyAmJiB0aGlzLmNvbnRleHQuaW1hZ2UuZm9jdXNFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbWFnZS5mb2N1c0VsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRhYk5hbWUgPT09ICd1cmwnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbmNob3IuY2FsbGVyLmltYWdlLnVybElucHV0LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIHN1Ym1pdDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VQbHVnaW4gPSB0aGlzLnBsdWdpbnMuaW1hZ2U7XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2FsdFRleHQgPSBjb250ZXh0SW1hZ2UuYWx0VGV4dC52YWx1ZTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2FsaWduID0gY29udGV4dEltYWdlLm1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9XCJzdW5lZGl0b3JfaW1hZ2VfcmFkaW9cIl06Y2hlY2tlZCcpLnZhbHVlO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fY2FwdGlvbkNoZWNrZWQgPSBjb250ZXh0SW1hZ2UuY2FwdGlvbkNoZWNrRWwuY2hlY2tlZDtcclxuICAgICAgICBpZiAoY29udGV4dEltYWdlLl9yZXNpemluZykgY29udGV4dEltYWdlLl9wcm9wb3J0aW9uQ2hlY2tlZCA9IGNvbnRleHRJbWFnZS5wcm9wb3J0aW9uLmNoZWNrZWQ7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsKSB7XHJcbiAgICAgICAgICAgICAgICBpbWFnZVBsdWdpbi51cGRhdGVfaW1hZ2UuY2FsbCh0aGlzLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoY29udGV4dEltYWdlLmltZ0lucHV0RmlsZSAmJiBjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlLmZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgIGltYWdlUGx1Z2luLnN1Ym1pdEFjdGlvbi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dC5pbWFnZS5pbWdJbnB1dEZpbGUuZmlsZXMpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlICYmIGNvbnRleHRJbWFnZS5fdl9zcmMuX2xpbmtWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBpbWFnZVBsdWdpbi5vblJlbmRlcl9pbWdVcmwuY2FsbCh0aGlzLCBjb250ZXh0SW1hZ2UuX3Zfc3JjLl9saW5rVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuaW1hZ2Uuc3VibWl0LmZhaWxdIGNhdXNlIDogXCInICsgZXJyb3IubWVzc2FnZSArICdcIicpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cuY2xvc2UuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgc3VibWl0QWN0aW9uOiBmdW5jdGlvbiAoZmlsZUxpc3QpIHtcclxuICAgICAgICBpZiAoZmlsZUxpc3QubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBmaWxlU2l6ZSA9IDA7XHJcbiAgICAgICAgbGV0IGZpbGVzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZpbGVMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICgvaW1hZ2UvaS50ZXN0KGZpbGVMaXN0W2ldLnR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGVMaXN0W2ldKTtcclxuICAgICAgICAgICAgICAgIGZpbGVTaXplICs9IGZpbGVMaXN0W2ldLnNpemU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGxpbWl0U2l6ZSA9IHRoaXMub3B0aW9ucy5pbWFnZVVwbG9hZFNpemVMaW1pdDtcclxuICAgICAgICBpZiAobGltaXRTaXplID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgaW5mb1NpemUgPSAwO1xyXG4gICAgICAgICAgICBjb25zdCBpbWFnZXNJbmZvID0gdGhpcy5jb250ZXh0LmltYWdlLl9pbmZvTGlzdDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGltYWdlc0luZm8ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGluZm9TaXplICs9IGltYWdlc0luZm9baV0uc2l6ZSAqIDE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICgoZmlsZVNpemUgKyBpbmZvU2l6ZSkgPiBsaW1pdFNpemUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSAnW1NVTkVESVRPUi5pbWFnZVVwbG9hZC5mYWlsXSBTaXplIG9mIHVwbG9hZGFibGUgdG90YWwgaW1hZ2VzOiAnICsgKGxpbWl0U2l6ZS8xMDAwKSArICdLQic7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWRFcnJvciAhPT0gJ2Z1bmN0aW9uJyB8fCB0aGlzLmZ1bmN0aW9ucy5vbkltYWdlVXBsb2FkRXJyb3IoZXJyLCB7ICdsaW1pdFNpemUnOiBsaW1pdFNpemUsICdjdXJyZW50U2l6ZSc6IGluZm9TaXplLCAndXBsb2FkU2l6ZSc6IGZpbGVTaXplIH0sIHRoaXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnMubm90aWNlT3BlbihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl91cGxvYWRGaWxlTGVuZ3RoID0gZmlsZXMubGVuZ3RoO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGFuY2hvciA9IHRoaXMucGx1Z2lucy5hbmNob3IuY3JlYXRlQW5jaG9yLmNhbGwodGhpcywgY29udGV4dEltYWdlLmFuY2hvckN0eCwgdHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgaW5mbyA9IHtcclxuICAgICAgICAgICAgYW5jaG9yOiBhbmNob3IsXHJcbiAgICAgICAgICAgIGlucHV0V2lkdGg6IGNvbnRleHRJbWFnZS5pbnB1dFgudmFsdWUsXHJcbiAgICAgICAgICAgIGlucHV0SGVpZ2h0OiBjb250ZXh0SW1hZ2UuaW5wdXRZLnZhbHVlLFxyXG4gICAgICAgICAgICBhbGlnbjogY29udGV4dEltYWdlLl9hbGlnbixcclxuICAgICAgICAgICAgaXNVcGRhdGU6IHRoaXMuY29udGV4dC5kaWFsb2cudXBkYXRlTW9kYWwsXHJcbiAgICAgICAgICAgIGFsdDogY29udGV4dEltYWdlLl9hbHRUZXh0LFxyXG4gICAgICAgICAgICBlbGVtZW50OiBjb250ZXh0SW1hZ2UuX2VsZW1lbnRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWRCZWZvcmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZEJlZm9yZShmaWxlcywgaW5mbywgdGhpcywgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIHRoaXMuX3cuQXJyYXkuaXNBcnJheShkYXRhLnJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2UucmVnaXN0ZXIuY2FsbCh0aGlzLCBpbmZvLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLnVwbG9hZC5jYWxsKHRoaXMsIGluZm8sIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93LkFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQubGVuZ3RoID4gMCkgZmlsZXMgPSByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2UudXBsb2FkLmNhbGwodGhpcywgaW5mbywgZmlsZXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBlcnJvcjogZnVuY3Rpb24gKG1lc3NhZ2UsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWRFcnJvciAhPT0gJ2Z1bmN0aW9uJyB8fCB0aGlzLmZ1bmN0aW9ucy5vbkltYWdlVXBsb2FkRXJyb3IobWVzc2FnZSwgcmVzcG9uc2UsIHRoaXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zLm5vdGljZU9wZW4obWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLnBsdWdpbi5pbWFnZS5lcnJvcl0gcmVzcG9uc2U6ICcgKyBtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHVwbG9hZDogZnVuY3Rpb24gKGluZm8sIGZpbGVzKSB7XHJcbiAgICAgICAgaWYgKCFmaWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgZmlsZXMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5lcnJvci5jYWxsKHRoaXMsIGZpbGVzLCBudWxsKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaW1hZ2VVcGxvYWRVcmwgPSB0aGlzLm9wdGlvbnMuaW1hZ2VVcGxvYWRVcmw7XHJcbiAgICAgICAgY29uc3QgZmlsZXNMZW4gPSB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsID8gMSA6IGZpbGVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gc2VydmVyIHVwbG9hZFxyXG4gICAgICAgIGlmICh0eXBlb2YgaW1hZ2VVcGxvYWRVcmwgPT09ICdzdHJpbmcnICYmIGltYWdlVXBsb2FkVXJsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlc0xlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUtJyArIGksIGZpbGVzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIudXBsb2FkLmNhbGwodGhpcywgaW1hZ2VVcGxvYWRVcmwsIHRoaXMub3B0aW9ucy5pbWFnZVVwbG9hZEhlYWRlciwgZm9ybURhdGEsIHRoaXMucGx1Z2lucy5pbWFnZS5jYWxsQmFja19pbWdVcGxvYWQuYmluZCh0aGlzLCBpbmZvKSwgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZEVycm9yKTtcclxuICAgICAgICB9IGVsc2UgeyAvLyBiYXNlNjRcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLnNldHVwX3JlYWRlci5jYWxsKHRoaXMsIGZpbGVzLCBpbmZvLmFuY2hvciwgaW5mby5pbnB1dFdpZHRoLCBpbmZvLmlucHV0SGVpZ2h0LCBpbmZvLmFsaWduLCBpbmZvLmFsdCwgZmlsZXNMZW4sIGluZm8uaXNVcGRhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY2FsbEJhY2tfaW1nVXBsb2FkOiBmdW5jdGlvbiAoaW5mbywgeG1sSHR0cCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mdW5jdGlvbnMuaW1hZ2VVcGxvYWRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zLmltYWdlVXBsb2FkSGFuZGxlcih4bWxIdHRwLCBpbmZvLCB0aGlzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoeG1sSHR0cC5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2UuZXJyb3IuY2FsbCh0aGlzLCByZXNwb25zZS5lcnJvck1lc3NhZ2UsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5yZWdpc3Rlci5jYWxsKHRoaXMsIGluZm8sIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVnaXN0ZXI6IGZ1bmN0aW9uIChpbmZvLCByZXNwb25zZSkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVMaXN0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZmlsZUxpc3QubGVuZ3RoLCBmaWxlOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgZmlsZSA9IHsgbmFtZTogZmlsZUxpc3RbaV0ubmFtZSwgc2l6ZTogZmlsZUxpc3RbaV0uc2l6ZSB9O1xyXG4gICAgICAgICAgICBpZiAoaW5mby5pc1VwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLnVwZGF0ZV9zcmMuY2FsbCh0aGlzLCBmaWxlTGlzdFtpXS51cmwsIGluZm8uZWxlbWVudCwgZmlsZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5jcmVhdGVfaW1hZ2UuY2FsbCh0aGlzLCBmaWxlTGlzdFtpXS51cmwsIGluZm8uYW5jaG9yLCBpbmZvLmlucHV0V2lkdGgsIGluZm8uaW5wdXRIZWlnaHQsIGluZm8uYWxpZ24sIGZpbGUsIGluZm8uYWx0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXR1cF9yZWFkZXI6IGZ1bmN0aW9uIChmaWxlcywgYW5jaG9yLCB3aWR0aCwgaGVpZ2h0LCBhbGlnbiwgYWx0LCBmaWxlc0xlbiwgaXNVcGRhdGUpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZmlsZXNMZW4gPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tTVU5FRElUT1IuaW1hZ2UuYmFzZTY0LmZhaWxdIGNhdXNlIDogTm8gYXBwbGljYWJsZSBmaWxlcycpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuaW1hZ2UuYmFzZTY0UmVuZGVySW5kZXggPSBmaWxlc0xlbjtcclxuICAgICAgICAgICAgY29uc3Qgd0ZpbGVSZWFkZXIgPSB0aGlzLl93LkZpbGVSZWFkZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzU3RhY2sgPSBbZmlsZXNMZW5dO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuaW1hZ2UuaW5wdXRYLnZhbHVlID0gd2lkdGg7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbWFnZS5pbnB1dFkudmFsdWUgPSBoZWlnaHQ7XHJcbiAgICBcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIHJlYWRlciwgZmlsZTsgaSA8IGZpbGVzTGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyB3RmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICAgICAgZmlsZSA9IGZpbGVzW2ldO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKHJlYWRlciwgdXBkYXRlLCB1cGRhdGVFbGVtZW50LCBmaWxlLCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVzU3RhY2tbaW5kZXhdID0geyByZXN1bHQ6IHJlYWRlci5yZXN1bHQsIGZpbGU6IGZpbGUgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKC0tdGhpcy5jb250ZXh0LmltYWdlLmJhc2U2NFJlbmRlckluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5vblJlbmRlcl9pbWdCYXNlNjQuY2FsbCh0aGlzLCB1cGRhdGUsIGZpbGVzU3RhY2ssIHVwZGF0ZUVsZW1lbnQsIGFuY2hvciwgd2lkdGgsIGhlaWdodCwgYWxpZ24sIGFsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMsIHJlYWRlciwgaXNVcGRhdGUsIHRoaXMuY29udGV4dC5pbWFnZS5fZWxlbWVudCwgZmlsZSwgaSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLmltYWdlLnNldHVwX3JlYWRlci5mYWlsXSBjYXVzZSA6IFwiJyArIGUubWVzc2FnZSArICdcIicpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgb25SZW5kZXJfaW1nQmFzZTY0OiBmdW5jdGlvbiAodXBkYXRlLCBmaWxlc1N0YWNrLCB1cGRhdGVFbGVtZW50LCBhbmNob3IsIHdpZHRoLCBoZWlnaHQsIGFsaWduLCBhbHQpIHtcclxuICAgICAgICBjb25zdCB1cGRhdGVNZXRob2QgPSB0aGlzLnBsdWdpbnMuaW1hZ2UudXBkYXRlX3NyYztcclxuICAgICAgICBjb25zdCBjcmVhdGVNZXRob2QgPSB0aGlzLnBsdWdpbnMuaW1hZ2UuY3JlYXRlX2ltYWdlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBmaWxlc1N0YWNrLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pbWFnZS5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtZmlsZS1uYW1lJywgZmlsZXNTdGFja1tpXS5maWxlLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmltYWdlLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1maWxlLXNpemUnLCBmaWxlc1N0YWNrW2ldLmZpbGUuc2l6ZSk7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVNZXRob2QuY2FsbCh0aGlzLCBmaWxlc1N0YWNrW2ldLnJlc3VsdCwgdXBkYXRlRWxlbWVudCwgZmlsZXNTdGFja1tpXS5maWxlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNyZWF0ZU1ldGhvZC5jYWxsKHRoaXMsIGZpbGVzU3RhY2tbaV0ucmVzdWx0LCBhbmNob3IsIHdpZHRoLCBoZWlnaHQsIGFsaWduLCBmaWxlc1N0YWNrW2ldLmZpbGUsIGFsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIG9uUmVuZGVyX2ltZ1VybDogZnVuY3Rpb24gKHVybCkge1xyXG4gICAgICAgIGlmICghdXJsKSB1cmwgPSB0aGlzLmNvbnRleHQuaW1hZ2UuX3Zfc3JjLl9saW5rVmFsdWU7XHJcbiAgICAgICAgaWYgKCF1cmwpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSB7bmFtZTogdXJsLnNwbGl0KCcvJykucG9wKCksIHNpemU6IDB9O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCkgdGhpcy5wbHVnaW5zLmltYWdlLnVwZGF0ZV9zcmMuY2FsbCh0aGlzLCB1cmwsIGNvbnRleHRJbWFnZS5fZWxlbWVudCwgZmlsZSk7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy5wbHVnaW5zLmltYWdlLmNyZWF0ZV9pbWFnZS5jYWxsKHRoaXMsIHVybCwgdGhpcy5wbHVnaW5zLmFuY2hvci5jcmVhdGVBbmNob3IuY2FsbCh0aGlzLCBjb250ZXh0SW1hZ2UuYW5jaG9yQ3R4LCB0cnVlKSwgY29udGV4dEltYWdlLmlucHV0WC52YWx1ZSwgY29udGV4dEltYWdlLmlucHV0WS52YWx1ZSwgY29udGV4dEltYWdlLl9hbGlnbiwgZmlsZSwgY29udGV4dEltYWdlLl9hbHRUZXh0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLmltYWdlLlVSTFJlbmRlcmluZy5mYWlsXSBjYXVzZSA6IFwiJyArIGUubWVzc2FnZSArICdcIicpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBvblJlbmRlcl9saW5rOiBmdW5jdGlvbiAoaW1nVGFnLCBhbmNob3IpIHtcclxuICAgICAgICBpZiAoYW5jaG9yKSB7XHJcbiAgICAgICAgICAgIGFuY2hvci5zZXRBdHRyaWJ1dGUoJ2RhdGEtaW1hZ2UtbGluaycsICdpbWFnZScpO1xyXG4gICAgICAgICAgICBpbWdUYWcuc2V0QXR0cmlidXRlKCdkYXRhLWltYWdlLWxpbmsnLCBhbmNob3IuaHJlZik7XHJcbiAgICAgICAgICAgIGFuY2hvci5hcHBlbmRDaGlsZChpbWdUYWcpO1xyXG4gICAgICAgICAgICByZXR1cm4gYW5jaG9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGltZ1RhZztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB4eSAneCc6IHdpZHRoLCAneSc6IGhlaWdodFxyXG4gICAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBlIEV2ZW50IG9iamVjdFxyXG4gICAgICovXHJcbiAgICBzZXRJbnB1dFNpemU6IGZ1bmN0aW9uICh4eSwgZSkge1xyXG4gICAgICAgIGlmIChlICYmIGUua2V5Q29kZSA9PT0gMzIpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9zZXRJbnB1dFNpemUuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQuaW1hZ2UsIHh5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgc2V0UmF0aW86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9zZXRSYXRpby5jYWxsKHRoaXMsIHRoaXMuY29udGV4dC5pbWFnZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGZpbGVNYW5hZ2VyXHJcbiAgICAgKi9cclxuICAgIGNoZWNrRmlsZUluZm86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBpbWFnZVBsdWdpbiA9IHRoaXMucGx1Z2lucy5pbWFnZTtcclxuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZGlmeUhhbmRsZXIgPSBmdW5jdGlvbiAodGFnKSB7XHJcbiAgICAgICAgICAgIGltYWdlUGx1Z2luLm9uTW9kaWZ5TW9kZS5jYWxsKHRoaXMsIHRhZywgbnVsbCk7XHJcbiAgICAgICAgICAgIGltYWdlUGx1Z2luLm9wZW5Nb2RpZnkuY2FsbCh0aGlzLCB0cnVlKTtcclxuICAgICAgICAgICAgLy8gZ2V0IHNpemVcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLmlucHV0WC52YWx1ZSA9IGNvbnRleHRJbWFnZS5fb3JpZ2luX3c7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5pbnB1dFkudmFsdWUgPSBjb250ZXh0SW1hZ2UuX29yaWdpbl9oO1xyXG4gICAgICAgICAgICAvLyBnZXQgYWxpZ25cclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy51dGlsLmdldEZvcm1hdEVsZW1lbnQodGFnKTtcclxuICAgICAgICAgICAgaWYgKGZvcm1hdCkgY29udGV4dEltYWdlLl9hbGlnbiA9IGZvcm1hdC5zdHlsZS50ZXh0QWxpZ24gfHwgZm9ybWF0LnN0eWxlLmZsb2F0O1xyXG4gICAgICAgICAgICAvLyBsaW5rXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnV0aWwuaXNBbmNob3IodGFnLnBhcmVudE5vZGUpICYmICFjb250ZXh0SW1hZ2UuYW5jaG9yQ3R4LmxpbmtWYWx1ZSkgY29udGV4dEltYWdlLmFuY2hvckN0eC5saW5rVmFsdWUgPSAnICc7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpbWFnZVBsdWdpbi51cGRhdGVfaW1hZ2UuY2FsbCh0aGlzLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGltYWdlUGx1Z2luLmluaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9LmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5jaGVja0luZm8uY2FsbCh0aGlzLCAnaW1hZ2UnLCBbJ2ltZyddLCB0aGlzLmZ1bmN0aW9ucy5vbkltYWdlVXBsb2FkLCBtb2RpZnlIYW5kbGVyLCB0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcclxuICAgICAqL1xyXG4gICAgcmVzZXRGaWxlSW5mbzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5yZXNldEluZm8uY2FsbCh0aGlzLCAnaW1hZ2UnLCB0aGlzLmZ1bmN0aW9ucy5vbkltYWdlVXBsb2FkKTtcclxuICAgIH0sXHJcblxyXG4gICAgY3JlYXRlX2ltYWdlOiBmdW5jdGlvbiAoc3JjLCBhbmNob3IsIHdpZHRoLCBoZWlnaHQsIGFsaWduLCBmaWxlLCBhbHQpIHtcclxuICAgICAgICBjb25zdCBpbWFnZVBsdWdpbiA9IHRoaXMucGx1Z2lucy5pbWFnZTtcclxuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luID0gJ2ltYWdlJztcclxuXHJcbiAgICAgICAgbGV0IG9JbWcgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnSU1HJyk7XHJcbiAgICAgICAgb0ltZy5zcmMgPSBzcmM7XHJcbiAgICAgICAgb0ltZy5hbHQgPSBhbHQ7XHJcbiAgICAgICAgb0ltZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlJywgJzAnKTtcclxuICAgICAgICBhbmNob3IgPSBpbWFnZVBsdWdpbi5vblJlbmRlcl9saW5rLmNhbGwodGhpcywgb0ltZywgYW5jaG9yID8gIGFuY2hvci5jbG9uZU5vZGUoZmFsc2UpIDogbnVsbCk7XHJcblxyXG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuX3Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgIG9JbWcuc2V0QXR0cmlidXRlKCdkYXRhLXByb3BvcnRpb24nLCBjb250ZXh0SW1hZ2UuX3Byb3BvcnRpb25DaGVja2VkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNvdmVyID0gdGhpcy5wbHVnaW5zLmNvbXBvbmVudC5zZXRfY292ZXIuY2FsbCh0aGlzLCBhbmNob3IpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucGx1Z2lucy5jb21wb25lbnQuc2V0X2NvbnRhaW5lci5jYWxsKHRoaXMsIGNvdmVyLCAnc2UtaW1hZ2UtY29udGFpbmVyJyk7XHJcblxyXG4gICAgICAgIC8vIGNhcHRpb25cclxuICAgICAgICBpZiAoY29udGV4dEltYWdlLl9jYXB0aW9uQ2hlY2tlZCkge1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuX2NhcHRpb24gPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LmNyZWF0ZV9jYXB0aW9uLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIGNvdmVyLmFwcGVuZENoaWxkKGNvbnRleHRJbWFnZS5fY2FwdGlvbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQgPSBvSW1nO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fY292ZXIgPSBjb3ZlcjtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuXHJcbiAgICAgICAgLy8gc2V0IHNpemVcclxuICAgICAgICBpbWFnZVBsdWdpbi5hcHBseVNpemUuY2FsbCh0aGlzLCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgLy8gYWxpZ25cclxuICAgICAgICBpbWFnZVBsdWdpbi5zZXRBbGlnbi5jYWxsKHRoaXMsIGFsaWduLCBvSW1nLCBjb3ZlciwgY29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgb0ltZy5vbmxvYWQgPSBpbWFnZVBsdWdpbi5faW1hZ2VfY3JlYXRlX29ubG9hZC5iaW5kKHRoaXMsIG9JbWcsIGNvbnRleHRJbWFnZS5zdmdEZWZhdWx0U2l6ZSwgY29udGFpbmVyKTtcclxuICAgICAgICBpZiAodGhpcy5pbnNlcnRDb21wb25lbnQoY29udGFpbmVyLCB0cnVlLCB0cnVlLCAhdGhpcy5vcHRpb25zLm1lZGlhQXV0b1NlbGVjdCkpIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5zZXRJbmZvLmNhbGwodGhpcywgJ2ltYWdlJywgb0ltZywgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZCwgZmlsZSwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luID0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIF9pbWFnZV9jcmVhdGVfb25sb2FkOiBmdW5jdGlvbiAob0ltZywgc3ZnRGVmYXVsdFNpemUsIGNvbnRhaW5lcikge1xyXG4gICAgICAgIC8vIHN2ZyBleGNlcHRpb24gaGFuZGxpbmdcclxuICAgICAgICBpZiAob0ltZy5vZmZzZXRXaWR0aCA9PT0gMCkgdGhpcy5wbHVnaW5zLmltYWdlLmFwcGx5U2l6ZS5jYWxsKHRoaXMsIHN2Z0RlZmF1bHRTaXplLCAnJyk7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5tZWRpYUF1dG9TZWxlY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQob0ltZywgJ2ltYWdlJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuYXBwZW5kRm9ybWF0VGFnKGNvbnRhaW5lciwgbnVsbCk7XHJcbiAgICAgICAgICAgIGlmIChsaW5lKSB0aGlzLnNldFJhbmdlKGxpbmUsIDAsIGxpbmUsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZV9pbWFnZTogZnVuY3Rpb24gKGluaXQsIG9wZW5Db250cm9sbGVyLCBub3RIaXN0b3J5UHVzaCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcclxuICAgICAgICBsZXQgaW1hZ2VFbCA9IGNvbnRleHRJbWFnZS5fZWxlbWVudDtcclxuICAgICAgICBsZXQgY292ZXIgPSBjb250ZXh0SW1hZ2UuX2NvdmVyO1xyXG4gICAgICAgIGxldCBjb250YWluZXIgPSBjb250ZXh0SW1hZ2UuX2NvbnRhaW5lcjtcclxuICAgICAgICBsZXQgaXNOZXdDb250YWluZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKGNvdmVyID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlzTmV3Q29udGFpbmVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgaW1hZ2VFbCA9IGNvbnRleHRJbWFnZS5fZWxlbWVudC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgIGNvdmVyID0gdGhpcy5wbHVnaW5zLmNvbXBvbmVudC5zZXRfY292ZXIuY2FsbCh0aGlzLCBpbWFnZUVsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb250YWluZXIgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgY292ZXIgPSBjb3Zlci5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgIGltYWdlRWwgPSBjb3Zlci5xdWVyeVNlbGVjdG9yKCdpbWcnKTtcclxuICAgICAgICAgICAgaXNOZXdDb250YWluZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb250YWluZXIgPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LnNldF9jb250YWluZXIuY2FsbCh0aGlzLCBjb3ZlciwgJ3NlLWltYWdlLWNvbnRhaW5lcicpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNOZXdDb250YWluZXIpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY292ZXIpO1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuX2NvdmVyID0gY292ZXI7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudCA9IGltYWdlRWw7XHJcbiAgICAgICAgICAgIGlzTmV3Q29udGFpbmVyID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjaGVjayBzaXplXHJcbiAgICAgICAgbGV0IGNoYW5nZVNpemU7XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMudXRpbC5pc051bWJlcihjb250ZXh0SW1hZ2UuaW5wdXRYLnZhbHVlKSA/IGNvbnRleHRJbWFnZS5pbnB1dFgudmFsdWUgKyBjb250ZXh0SW1hZ2Uuc2l6ZVVuaXQgOiBjb250ZXh0SW1hZ2UuaW5wdXRYLnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnV0aWwuaXNOdW1iZXIoY29udGV4dEltYWdlLmlucHV0WS52YWx1ZSkgPyBjb250ZXh0SW1hZ2UuaW5wdXRZLnZhbHVlICsgY29udGV4dEltYWdlLnNpemVVbml0IDogY29udGV4dEltYWdlLmlucHV0WS52YWx1ZTtcclxuICAgICAgICBpZiAoLyUkLy50ZXN0KGltYWdlRWwuc3R5bGUud2lkdGgpKSB7XHJcbiAgICAgICAgICAgIGNoYW5nZVNpemUgPSB4ICE9PSBjb250YWluZXIuc3R5bGUud2lkdGggfHwgeSAhPT0gY29udGFpbmVyLnN0eWxlLmhlaWdodDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjaGFuZ2VTaXplID0geCAhPT0gaW1hZ2VFbC5zdHlsZS53aWR0aCB8fCB5ICE9PSBpbWFnZUVsLnN0eWxlLmhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFsdFxyXG4gICAgICAgIGltYWdlRWwuYWx0ID0gY29udGV4dEltYWdlLl9hbHRUZXh0O1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGNhcHRpb25cclxuICAgICAgICBsZXQgbW9kaWZpZWRDYXB0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5fY2FwdGlvbkNoZWNrZWQpIHtcclxuICAgICAgICAgICAgaWYgKCFjb250ZXh0SW1hZ2UuX2NhcHRpb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fY2FwdGlvbiA9IHRoaXMucGx1Z2lucy5jb21wb25lbnQuY3JlYXRlX2NhcHRpb24uY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIGNvdmVyLmFwcGVuZENoaWxkKGNvbnRleHRJbWFnZS5fY2FwdGlvbik7XHJcbiAgICAgICAgICAgICAgICBtb2RpZmllZENhcHRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5fY2FwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUl0ZW0oY29udGV4dEltYWdlLl9jYXB0aW9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fY2FwdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBtb2RpZmllZENhcHRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBsaW5rXHJcbiAgICAgICAgbGV0IGlzTmV3QW5jaG9yID0gbnVsbDtcclxuICAgICAgICBjb25zdCBhbmNob3IgPSB0aGlzLnBsdWdpbnMuYW5jaG9yLmNyZWF0ZUFuY2hvci5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZS5hbmNob3JDdHgsIHRydWUpO1xyXG4gICAgICAgIGlmIChhbmNob3IpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5fbGlua0VsZW1lbnQgIT09IGFuY2hvciB8fCAoaXNOZXdDb250YWluZXIgJiYgIWNvbnRhaW5lci5jb250YWlucyhhbmNob3IpKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dEltYWdlLl9saW5rRWxlbWVudCA9IGFuY2hvci5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgY292ZXIuaW5zZXJ0QmVmb3JlKHRoaXMucGx1Z2lucy5pbWFnZS5vblJlbmRlcl9saW5rLmNhbGwodGhpcywgaW1hZ2VFbCwgY29udGV4dEltYWdlLl9saW5rRWxlbWVudCksIGNvbnRleHRJbWFnZS5fY2FwdGlvbik7XHJcbiAgICAgICAgICAgICAgICBpc05ld0FuY2hvciA9IGNvbnRleHRJbWFnZS5fZWxlbWVudDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fbGlua0VsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWltYWdlLWxpbmsnLCAnaW1hZ2UnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dEltYWdlLl9saW5rRWxlbWVudCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBpbWFnZUVsZW1lbnQgPSBpbWFnZUVsO1xyXG4gICAgICAgICAgICBpbWFnZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWltYWdlLWxpbmsnLCAnJyk7XHJcbiAgICAgICAgICAgIGlmIChjb3Zlci5jb250YWlucyhjb250ZXh0SW1hZ2UuX2xpbmtFbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RWwgPSBpbWFnZUVsZW1lbnQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgY292ZXIucmVtb3ZlQ2hpbGQoY29udGV4dEltYWdlLl9saW5rRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICBjb3Zlci5pbnNlcnRCZWZvcmUobmV3RWwsIGNvbnRleHRJbWFnZS5fY2FwdGlvbik7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQgPSBpbWFnZUVsID0gbmV3RWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBleGlzdEVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIGlmIChpc05ld0NvbnRhaW5lcikge1xyXG4gICAgICAgICAgICBjb25zdCBpbWdQYXJlbnQgPSBjb250ZXh0SW1hZ2UuX2VsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgZXhpc3RFbGVtZW50ID0gKHRoaXMudXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChpbWdQYXJlbnQpIHx8IHRoaXMudXRpbC5pc1d5c2l3eWdEaXYoaW1nUGFyZW50KSkgPyBjb250ZXh0SW1hZ2UuX2VsZW1lbnQgOiBpbWdQYXJlbnQgfHwgY29udGV4dEltYWdlLl9lbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChjb250ZXh0SW1hZ2UuX2VsZW1lbnQsIHRoaXMudXRpbC5pc05vdENoZWNraW5nTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIGV4aXN0RWxlbWVudCA9IGlzTmV3QW5jaG9yID8gYW5jaG9yIDogY29udGV4dEltYWdlLl9lbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgZXhpc3RFbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGNvbnRhaW5lciwgZXhpc3RFbGVtZW50KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnV0aWwuaXNMaXN0Q2VsbChleGlzdEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWZlciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGNvbnRleHRJbWFnZS5fZWxlbWVudCwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQucGFyZW50Tm9kZSA9PT0gZXhpc3RFbGVtZW50OyB9KTtcclxuICAgICAgICAgICAgICAgIGV4aXN0RWxlbWVudC5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCByZWZlcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShjb250ZXh0SW1hZ2UuX2VsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUVtcHR5Tm9kZShyZWZlciwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51dGlsLmlzRm9ybWF0RWxlbWVudChleGlzdEVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWZlciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGNvbnRleHRJbWFnZS5fZWxlbWVudCwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQucGFyZW50Tm9kZSA9PT0gZXhpc3RFbGVtZW50OyB9KTtcclxuICAgICAgICAgICAgICAgIGV4aXN0RWxlbWVudCA9IHRoaXMudXRpbC5zcGxpdEVsZW1lbnQoZXhpc3RFbGVtZW50LCByZWZlcik7XHJcbiAgICAgICAgICAgICAgICBleGlzdEVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCBleGlzdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUl0ZW0oY29udGV4dEltYWdlLl9lbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVFbXB0eU5vZGUoZXhpc3RFbGVtZW50LCBudWxsLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChleGlzdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSBleGlzdEVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy51dGlsLmh0bWxSZW1vdmVXaGl0ZVNwYWNlKGV4aXN0RWxlbWVudC5pbm5lckhUTUwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXRpbC5pc0Zvcm1hdEVsZW1lbnQoZXhpc3RFbGVtZW50LnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0cyA9IGV4aXN0RWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCBleGlzdEVsZW1lbnQucHJldmlvdXNTaWJsaW5nID8gZm9ybWF0cy5uZXh0RWxlbWVudFNpYmxpbmcgOiBmb3JtYXRzKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dEltYWdlLl9fdXBkYXRlVGFncy5tYXAoZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGV4aXN0RWxlbWVudC5jb250YWlucyhjdXJyZW50KTsgfSkubGVuZ3RoID09PSAwKSB0aGlzLnV0aWwucmVtb3ZlSXRlbShleGlzdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBleGlzdEVsZW1lbnQgPSB0aGlzLnV0aWwuaXNGaWd1cmVzKGV4aXN0RWxlbWVudC5wYXJlbnROb2RlKSA/IGV4aXN0RWxlbWVudC5wYXJlbnROb2RlIDogZXhpc3RFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGV4aXN0RWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChjb250YWluZXIsIGV4aXN0RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGltYWdlRWwgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW1nJyk7XHJcblxyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQgPSBpbWFnZUVsO1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuX2NvdmVyID0gY292ZXI7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fY29udGFpbmVyID0gY29udGFpbmVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzTmV3QW5jaG9yKSB7XHJcbiAgICAgICAgICAgIGlmICghaXNOZXdDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVJdGVtKGFuY2hvcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShpc05ld0FuY2hvcik7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51dGlsLmdldExpc3RDaGlsZHJlbihhbmNob3IsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiAvSU1HL2kudGVzdChjdXJyZW50LnRhZ05hbWUpOyB9KS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShhbmNob3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0cmFuc2Zvcm1cclxuICAgICAgICBpZiAobW9kaWZpZWRDYXB0aW9uIHx8ICghY29udGV4dEltYWdlLl9vbmx5UGVyY2VudGFnZSAmJiBjaGFuZ2VTaXplKSkge1xyXG4gICAgICAgICAgICBpZiAoIWluaXQgJiYgKC9cXGQrLy50ZXN0KGltYWdlRWwuc3R5bGUuaGVpZ2h0KSB8fCAodGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbCAmJiBjb250ZXh0SW1hZ2UuX2NhcHRpb25DaGVja2VkKSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICgvJSQvLnRlc3QoY29udGV4dEltYWdlLmlucHV0WC52YWx1ZSkgfHwgLyUkLy50ZXN0KGNvbnRleHRJbWFnZS5pbnB1dFkudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLnJlc2V0VHJhbnNmb3JtLmNhbGwodGhpcywgaW1hZ2VFbCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5zZXRUcmFuc2Zvcm1TaXplLmNhbGwodGhpcywgaW1hZ2VFbCwgdGhpcy51dGlsLmdldE51bWJlcihjb250ZXh0SW1hZ2UuaW5wdXRYLnZhbHVlLCAwKSwgdGhpcy51dGlsLmdldE51bWJlcihjb250ZXh0SW1hZ2UuaW5wdXRZLnZhbHVlLCAwKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNpemVcclxuICAgICAgICBpZiAoY29udGV4dEltYWdlLl9yZXNpemluZykge1xyXG4gICAgICAgICAgICBpbWFnZUVsLnNldEF0dHJpYnV0ZSgnZGF0YS1wcm9wb3J0aW9uJywgY29udGV4dEltYWdlLl9wcm9wb3J0aW9uQ2hlY2tlZCk7XHJcbiAgICAgICAgICAgIGlmIChjaGFuZ2VTaXplKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2UuYXBwbHlTaXplLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFsaWduXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLnNldEFsaWduLmNhbGwodGhpcywgbnVsbCwgaW1hZ2VFbCwgbnVsbCwgbnVsbCk7XHJcblxyXG4gICAgICAgIC8vIHNldCBpbWFnZXNJbmZvXHJcbiAgICAgICAgaWYgKGluaXQpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLnNldEluZm8uY2FsbCh0aGlzLCAnaW1hZ2UnLCBpbWFnZUVsLCB0aGlzLmZ1bmN0aW9ucy5vbkltYWdlVXBsb2FkLCBudWxsLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcGVuQ29udHJvbGxlcikge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdENvbXBvbmVudChpbWFnZUVsLCAnaW1hZ2UnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICBpZiAoIW5vdEhpc3RvcnlQdXNoKSB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZV9zcmM6IGZ1bmN0aW9uIChzcmMsIGVsZW1lbnQsIGZpbGUpIHtcclxuICAgICAgICBlbGVtZW50LnNyYyA9IHNyYztcclxuICAgICAgICB0aGlzLl93LnNldFRpbWVvdXQodGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLnNldEluZm8uYmluZCh0aGlzLCAnaW1hZ2UnLCBlbGVtZW50LCB0aGlzLmZ1bmN0aW9ucy5vbkltYWdlVXBsb2FkLCBmaWxlLCB0cnVlKSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQoZWxlbWVudCwgJ2ltYWdlJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBmaWxlTWFuYWdlciwgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgb25Nb2RpZnlNb2RlOiBmdW5jdGlvbiAoZWxlbWVudCwgc2l6ZSkge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2xpbmtFbGVtZW50ID0gY29udGV4dEltYWdlLmFuY2hvckN0eC5saW5rQW5jaG9yID0gdGhpcy51dGlsLmlzQW5jaG9yKGVsZW1lbnQucGFyZW50Tm9kZSkgPyBlbGVtZW50LnBhcmVudE5vZGUgOiBudWxsO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9jb3ZlciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsICdGSUdVUkUnKTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2NvbnRhaW5lciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsIHRoaXMudXRpbC5pc01lZGlhQ29tcG9uZW50KTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2NhcHRpb24gPSB0aGlzLnV0aWwuZ2V0Q2hpbGRFbGVtZW50KGNvbnRleHRJbWFnZS5fY292ZXIsICdGSUdDQVBUSU9OJyk7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9hbGlnbiA9ICBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1hbGlnbicpIHx8IGVsZW1lbnQuc3R5bGUuZmxvYXQgfHwgJ25vbmUnO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuZmxvYXQgPSAnJztcclxuICAgICAgICB0aGlzLnBsdWdpbnMuYW5jaG9yLnNldEN0eChjb250ZXh0SW1hZ2UuX2xpbmtFbGVtZW50LCBjb250ZXh0SW1hZ2UuYW5jaG9yQ3R4KTtcclxuXHJcbiAgICAgICAgaWYgKHNpemUpIHtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50X3cgPSBzaXplLnc7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudF9oID0gc2l6ZS5oO1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnRfdCA9IHNpemUudDtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50X2wgPSBzaXplLmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdXNlclNpemUgPSBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXNpemUnKSB8fCBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbicpO1xyXG4gICAgICAgIGxldCB3LCBoO1xyXG4gICAgICAgIGlmICh1c2VyU2l6ZSkge1xyXG4gICAgICAgICAgICB1c2VyU2l6ZSA9IHVzZXJTaXplLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgIHcgPSB1c2VyU2l6ZVswXTtcclxuICAgICAgICAgICAgaCA9IHVzZXJTaXplWzFdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2l6ZSkge1xyXG4gICAgICAgICAgICB3ID0gc2l6ZS53O1xyXG4gICAgICAgICAgICBoID0gc2l6ZS5oO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGV4dEltYWdlLl9vcmlnaW5fdyA9IHcgfHwgZWxlbWVudC5zdHlsZS53aWR0aCB8fCBlbGVtZW50LndpZHRoIHx8ICcnO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fb3JpZ2luX2ggPSBoIHx8IGVsZW1lbnQuc3R5bGUuaGVpZ2h0IHx8IGVsZW1lbnQuaGVpZ2h0IHx8ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZU1hbmFnZXIsIHJlc2l6aW5nXHJcbiAgICAgKi9cclxuICAgIG9wZW5Nb2RpZnk6IGZ1bmN0aW9uIChub3RPcGVuKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xyXG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuaW1nVXJsRmlsZSkge1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuX3Zfc3JjLl9saW5rVmFsdWUgPSBjb250ZXh0SW1hZ2UucHJldmlld1NyYy50ZXh0Q29udGVudCA9IGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlLnZhbHVlID0gY29udGV4dEltYWdlLl9lbGVtZW50LnNyYztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9hbHRUZXh0ID0gY29udGV4dEltYWdlLmFsdFRleHQudmFsdWUgPSBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuYWx0O1xyXG4gICAgICAgIChjb250ZXh0SW1hZ2UubW9kYWwucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT1cInN1bmVkaXRvcl9pbWFnZV9yYWRpb1wiXVt2YWx1ZT1cIicgKyBjb250ZXh0SW1hZ2UuX2FsaWduICsgJ1wiXScpIHx8IGNvbnRleHRJbWFnZS5tb2RhbC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPVwic3VuZWRpdG9yX2ltYWdlX3JhZGlvXCJdW3ZhbHVlPVwibm9uZVwiXScpKS5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2FsaWduID0gY29udGV4dEltYWdlLm1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9XCJzdW5lZGl0b3JfaW1hZ2VfcmFkaW9cIl06Y2hlY2tlZCcpLnZhbHVlO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fY2FwdGlvbkNoZWNrZWQgPSBjb250ZXh0SW1hZ2UuY2FwdGlvbkNoZWNrRWwuY2hlY2tlZCA9ICEhY29udGV4dEltYWdlLl9jYXB0aW9uO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuX3Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NldE1vZGlmeUlucHV0U2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZSwgdGhpcy5wbHVnaW5zLmltYWdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghbm90T3BlbikgdGhpcy5wbHVnaW5zLmRpYWxvZy5vcGVuLmNhbGwodGhpcywgJ2ltYWdlJywgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGZpbGVNYW5hZ2VyXHJcbiAgICAgKi9cclxuICAgIGFwcGx5U2l6ZTogZnVuY3Rpb24gKHcsIGgpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XHJcblxyXG4gICAgICAgIGlmICghdykgdyA9IGNvbnRleHRJbWFnZS5pbnB1dFgudmFsdWUgfHwgdGhpcy5vcHRpb25zLmltYWdlV2lkdGg7XHJcbiAgICAgICAgaWYgKCFoKSBoID0gY29udGV4dEltYWdlLmlucHV0WS52YWx1ZSB8fCB0aGlzLm9wdGlvbnMuaW1hZ2VIZWlnaHQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKChjb250ZXh0SW1hZ2UuX29ubHlQZXJjZW50YWdlICYmICEhdykgfHwgLyUkLy50ZXN0KHcpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5zZXRQZXJjZW50U2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKCghdyB8fCB3ID09PSAnYXV0bycpICYmICghaCB8fCBoID09PSAnYXV0bycpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5zZXRBdXRvU2l6ZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5zZXRTaXplLmNhbGwodGhpcywgdywgaCwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBzaXplUmV2ZXJ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfc2l6ZVJldmVydC5jYWxsKHRoaXMsIHRoaXMuY29udGV4dC5pbWFnZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXHJcbiAgICAgKi9cclxuICAgIHNldFNpemU6IGZ1bmN0aW9uICh3LCBoLCBub3RSZXNldFBlcmNlbnRhZ2UsIGRpcmVjdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcclxuICAgICAgICBjb25zdCBvbmx5VyA9IC9eKHJ3fGx3KSQvLnRlc3QoZGlyZWN0aW9uKSAmJiAvXFxkKy8udGVzdChjb250ZXh0SW1hZ2UuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0KTtcclxuICAgICAgICBjb25zdCBvbmx5SCA9IC9eKHRofGJoKSQvLnRlc3QoZGlyZWN0aW9uKSAmJiAvXFxkKy8udGVzdChjb250ZXh0SW1hZ2UuX2VsZW1lbnQuc3R5bGUud2lkdGgpO1xyXG5cclxuICAgICAgICBpZiAoIW9ubHlIKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMudXRpbC5pc051bWJlcih3KSA/IHcgKyBjb250ZXh0SW1hZ2Uuc2l6ZVVuaXQgOiB3O1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2UuY2FuY2VsUGVyY2VudEF0dHIuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFvbmx5Vykge1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy51dGlsLmlzTnVtYmVyKGgpID8gaCArIGNvbnRleHRJbWFnZS5zaXplVW5pdCA6IC8lJC8udGVzdChoKSA/ICcnIDogaDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuX2FsaWduID09PSAnY2VudGVyJykgdGhpcy5wbHVnaW5zLmltYWdlLnNldEFsaWduLmNhbGwodGhpcywgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XHJcbiAgICAgICAgaWYgKCFub3RSZXNldFBlcmNlbnRhZ2UpIGNvbnRleHRJbWFnZS5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtcGVyY2VudGFnZScpO1xyXG5cclxuICAgICAgICAvLyBzYXZlIGN1cnJlbnQgc2l6ZVxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NhdmVDdXJyZW50U2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXHJcbiAgICAgKi9cclxuICAgIHNldEF1dG9TaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEltYWdlID0gdGhpcy5jb250ZXh0LmltYWdlO1xyXG5cclxuICAgICAgICBpZiAoY29udGV4dEltYWdlLl9jYXB0aW9uKSBjb250ZXh0SW1hZ2UuX2NhcHRpb24uc3R5bGUubWFyZ2luVG9wID0gJyc7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLnJlc2V0VHJhbnNmb3JtLmNhbGwodGhpcywgY29udGV4dEltYWdlLl9lbGVtZW50KTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2UuY2FuY2VsUGVyY2VudEF0dHIuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50LnN0eWxlLm1heFdpZHRoID0gJyc7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50LnN0eWxlLndpZHRoID0gJyc7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50LnN0eWxlLmhlaWdodCA9ICcnO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fY292ZXIuc3R5bGUud2lkdGggPSAnJztcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2NvdmVyLnN0eWxlLmhlaWdodCA9ICcnO1xyXG5cclxuICAgICAgICB0aGlzLnBsdWdpbnMuaW1hZ2Uuc2V0QWxpZ24uY2FsbCh0aGlzLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXBlcmNlbnRhZ2UnLCAnYXV0byxhdXRvJyk7XHJcblxyXG4gICAgICAgIC8vIHNhdmUgY3VycmVudCBzaXplXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfc2F2ZUN1cnJlbnRTaXplLmNhbGwodGhpcywgY29udGV4dEltYWdlKTtcclxuICAgIH0sXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXHJcbiAgICAgKi9cclxuICAgIHNldE9yaWdpblNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1wZXJjZW50YWdlJyk7XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5yZXNldFRyYW5zZm9ybS5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZS5fZWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLmNhbmNlbFBlcmNlbnRBdHRyLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIGNvbnN0IG9yaWdpblNpemUgPSAoY29udGV4dEltYWdlLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW4nKSB8fCAnJykuc3BsaXQoJywnKTtcclxuICAgICAgICBjb25zdCB3ID0gb3JpZ2luU2l6ZVswXTtcclxuICAgICAgICBjb25zdCBoID0gb3JpZ2luU2l6ZVsxXTtcclxuXHJcbiAgICAgICAgaWYgKG9yaWdpblNpemUpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5fb25seVBlcmNlbnRhZ2UgfHwgKC8lJC8udGVzdCh3KSAmJiAoLyUkLy50ZXN0KGgpIHx8ICEvXFxkLy50ZXN0KGgpKSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5zZXRQZXJjZW50U2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmltYWdlLnNldFNpemUuY2FsbCh0aGlzLCB3LCBoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc2F2ZSBjdXJyZW50IHNpemVcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfc2F2ZUN1cnJlbnRTaXplLmNhbGwodGhpcywgY29udGV4dEltYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXHJcbiAgICAgKi9cclxuICAgIHNldFBlcmNlbnRTaXplOiBmdW5jdGlvbiAodywgaCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcclxuICAgICAgICBoID0gISFoICYmICEvJSQvLnRlc3QoaCkgJiYgIXRoaXMudXRpbC5nZXROdW1iZXIoaCwgMCkgPyB0aGlzLnV0aWwuaXNOdW1iZXIoaCkgPyBoICsgJyUnIDogaCA6IHRoaXMudXRpbC5pc051bWJlcihoKSA/IGggKyBjb250ZXh0SW1hZ2Uuc2l6ZVVuaXQgOiAoaCB8fCAnJyk7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0UGVyY2VudGFnZSA9IC8lJC8udGVzdChoKTtcclxuXHJcbiAgICAgICAgY29udGV4dEltYWdlLl9jb250YWluZXIuc3R5bGUud2lkdGggPSB0aGlzLnV0aWwuaXNOdW1iZXIodykgPyB3ICsgJyUnIDogdztcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2NvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnJztcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2NvdmVyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fY292ZXIuc3R5bGUuaGVpZ2h0ID0gIWhlaWdodFBlcmNlbnRhZ2UgPyAnJyA6IGg7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9lbGVtZW50LnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHRQZXJjZW50YWdlID8gJycgOiBoO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fZWxlbWVudC5zdHlsZS5tYXhXaWR0aCA9ICcnO1xyXG5cclxuICAgICAgICBpZiAoY29udGV4dEltYWdlLl9hbGlnbiA9PT0gJ2NlbnRlcicpIHRoaXMucGx1Z2lucy5pbWFnZS5zZXRBbGlnbi5jYWxsKHRoaXMsIG51bGwsIG51bGwsIG51bGwsIG51bGwpO1xyXG5cclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXBlcmNlbnRhZ2UnLCB3ICsgJywnICsgaCk7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLnNldENhcHRpb25Qb3NpdGlvbi5jYWxsKHRoaXMsIGNvbnRleHRJbWFnZS5fZWxlbWVudCk7XHJcblxyXG4gICAgICAgIC8vIHNhdmUgY3VycmVudCBzaXplXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfc2F2ZUN1cnJlbnRTaXplLmNhbGwodGhpcywgY29udGV4dEltYWdlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgY2FuY2VsUGVyY2VudEF0dHI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0SW1hZ2UgPSB0aGlzLmNvbnRleHQuaW1hZ2U7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29udGV4dEltYWdlLl9jb3Zlci5zdHlsZS53aWR0aCA9ICcnO1xyXG4gICAgICAgIGNvbnRleHRJbWFnZS5fY292ZXIuc3R5bGUuaGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgY29udGV4dEltYWdlLl9jb250YWluZXIuc3R5bGUud2lkdGggPSAnJztcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2NvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnJztcclxuXHJcbiAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNvbnRleHRJbWFnZS5fY29udGFpbmVyLCB0aGlzLmNvbnRleHQuaW1hZ2UuX2Zsb2F0Q2xhc3NSZWdFeHApO1xyXG4gICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhjb250ZXh0SW1hZ2UuX2NvbnRhaW5lciwgJ19fc2VfX2Zsb2F0LScgKyBjb250ZXh0SW1hZ2UuX2FsaWduKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5fYWxpZ24gPT09ICdjZW50ZXInKSB0aGlzLnBsdWdpbnMuaW1hZ2Uuc2V0QWxpZ24uY2FsbCh0aGlzLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgc2V0QWxpZ246IGZ1bmN0aW9uIChhbGlnbiwgZWxlbWVudCwgY292ZXIsIGNvbnRhaW5lcikge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIWFsaWduKSBhbGlnbiA9IGNvbnRleHRJbWFnZS5fYWxpZ247XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSBlbGVtZW50ID0gY29udGV4dEltYWdlLl9lbGVtZW50O1xyXG4gICAgICAgIGlmICghY292ZXIpIGNvdmVyID0gY29udGV4dEltYWdlLl9jb3ZlcjtcclxuICAgICAgICBpZiAoIWNvbnRhaW5lcikgY29udGFpbmVyID0gY29udGV4dEltYWdlLl9jb250YWluZXI7XHJcblxyXG4gICAgICAgIGlmICgvJSQvLnRlc3QoZWxlbWVudC5zdHlsZS53aWR0aCkgJiYgYWxpZ24gPT09ICdjZW50ZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5taW5XaWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgY292ZXIuc3R5bGUud2lkdGggPSBjb250YWluZXIuc3R5bGUud2lkdGg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLm1pbldpZHRoID0gJyc7XHJcbiAgICAgICAgICAgIGNvdmVyLnN0eWxlLndpZHRoID0gdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbCA/IChlbGVtZW50LnN0eWxlLmhlaWdodCB8fCBlbGVtZW50Lm9mZnNldEhlaWdodCkgOiAoKCFlbGVtZW50LnN0eWxlLndpZHRoIHx8IGVsZW1lbnQuc3R5bGUud2lkdGggPT09ICdhdXRvJykgPyAnJyA6IGVsZW1lbnQuc3R5bGUud2lkdGggfHwgJzEwMCUnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy51dGlsLmhhc0NsYXNzKGNvbnRhaW5lciwgJ19fc2VfX2Zsb2F0LScgKyBhbGlnbikpIHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNvbnRhaW5lciwgY29udGV4dEltYWdlLl9mbG9hdENsYXNzUmVnRXhwKTtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGNvbnRhaW5lciwgJ19fc2VfX2Zsb2F0LScgKyBhbGlnbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWFsaWduJywgYWxpZ24pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBkaWFsb2dcclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRJbWFnZSA9IHRoaXMuY29udGV4dC5pbWFnZTtcclxuICAgICAgICBpZiAoY29udGV4dEltYWdlLmltZ0lucHV0RmlsZSkgY29udGV4dEltYWdlLmltZ0lucHV0RmlsZS52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuaW1nVXJsRmlsZSkgY29udGV4dEltYWdlLl92X3NyYy5fbGlua1ZhbHVlID0gY29udGV4dEltYWdlLnByZXZpZXdTcmMudGV4dENvbnRlbnQgPSBjb250ZXh0SW1hZ2UuaW1nVXJsRmlsZS52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmIChjb250ZXh0SW1hZ2UuaW1nSW5wdXRGaWxlICYmIGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5pbWdVcmxGaWxlLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLnByZXZpZXdTcmMuc3R5bGUudGV4dERlY29yYXRpb24gPSAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnRleHRJbWFnZS5hbHRUZXh0LnZhbHVlID0gJyc7XHJcbiAgICAgICAgY29udGV4dEltYWdlLm1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9XCJzdW5lZGl0b3JfaW1hZ2VfcmFkaW9cIl1bdmFsdWU9XCJub25lXCJdJykuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgY29udGV4dEltYWdlLmNhcHRpb25DaGVja0VsLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICBjb250ZXh0SW1hZ2UuX2VsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5vcGVuVGFiLmNhbGwodGhpcywgJ2luaXQnKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbnRleHRJbWFnZS5fcmVzaXppbmcpIHtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLmlucHV0WC52YWx1ZSA9IHRoaXMub3B0aW9ucy5pbWFnZVdpZHRoID09PSBjb250ZXh0SW1hZ2UuX2RlZmF1bHRTaXplWCA/ICcnIDogdGhpcy5vcHRpb25zLmltYWdlV2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5pbnB1dFkudmFsdWUgPSB0aGlzLm9wdGlvbnMuaW1hZ2VIZWlnaHQgPT09IGNvbnRleHRJbWFnZS5fZGVmYXVsdFNpemVZID8gJycgOiB0aGlzLm9wdGlvbnMuaW1hZ2VIZWlnaHQ7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5wcm9wb3J0aW9uLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb250ZXh0SW1hZ2UuX3JhdGlvID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnRleHRJbWFnZS5fcmF0aW9YID0gMTtcclxuICAgICAgICAgICAgY29udGV4dEltYWdlLl9yYXRpb1kgPSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmFuY2hvci5pbml0LmNhbGwodGhpcywgY29udGV4dEltYWdlLmFuY2hvckN0eCk7XHJcbiAgICB9XHJcbn07XHJcbiIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5pbXBvcnQgZGlhbG9nIGZyb20gJy4uL21vZHVsZXMvZGlhbG9nJztcclxuaW1wb3J0IGNvbXBvbmVudCBmcm9tICcuLi9tb2R1bGVzL2NvbXBvbmVudCc7XHJcbmltcG9ydCByZXNpemluZyBmcm9tICcuLi9tb2R1bGVzL3Jlc2l6aW5nJztcclxuaW1wb3J0IGZpbGVNYW5hZ2VyIGZyb20gJy4uL21vZHVsZXMvZmlsZU1hbmFnZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ3ZpZGVvJyxcclxuICAgIGRpc3BsYXk6ICdkaWFsb2cnLFxyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvcmUuYWRkTW9kdWxlKFtkaWFsb2csIGNvbXBvbmVudCwgcmVzaXppbmcsIGZpbGVNYW5hZ2VyXSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBjb3JlLm9wdGlvbnM7XHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSBjb250ZXh0LnZpZGVvID0ge1xyXG4gICAgICAgICAgICBfaW5mb0xpc3Q6IFtdLCAvLyBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcclxuICAgICAgICAgICAgX2luZm9JbmRleDogMCwgLy8gQE92ZXJyaWRlIGZpbGVNYW5hZ2VyXHJcbiAgICAgICAgICAgIF91cGxvYWRGaWxlTGVuZ3RoOiAwLCAvLyBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcclxuICAgICAgICAgICAgZm9jdXNFbGVtZW50OiBudWxsLCAvLyBAT3ZlcnJpZGUgZGlhbG9nIC8vIFRoaXMgZWxlbWVudCBoYXMgZm9jdXMgd2hlbiB0aGUgZGlhbG9nIGlzIG9wZW5lZC5cclxuICAgICAgICAgICAgc2l6ZVVuaXQ6IG9wdGlvbnMuX3ZpZGVvU2l6ZVVuaXQsXHJcbiAgICAgICAgICAgIF9hbGlnbjogJ25vbmUnLFxyXG4gICAgICAgICAgICBfZmxvYXRDbGFzc1JlZ0V4cDogJ19fc2VfX2Zsb2F0XFxcXC1bYS16XSsnLFxyXG4gICAgICAgICAgICBfeW91dHViZVF1ZXJ5OiBvcHRpb25zLnlvdXR1YmVRdWVyeSxcclxuICAgICAgICAgICAgX3ZpbWVvUXVlcnk6IG9wdGlvbnMudmltZW9RdWVyeSxcclxuICAgICAgICAgICAgX3ZpZGVvUmF0aW86IChvcHRpb25zLnZpZGVvUmF0aW8gKiAxMDApICsgJyUnLFxyXG4gICAgICAgICAgICBfZGVmYXVsdFJhdGlvOiAob3B0aW9ucy52aWRlb1JhdGlvICogMTAwKSArICclJyxcclxuICAgICAgICAgICAgX2xpbmtWYWx1ZTogJycsXHJcbiAgICAgICAgICAgIC8vIEByZXF1aXJlIEBPdmVycmlkZSBjb21wb25lbnRcclxuICAgICAgICAgICAgX2VsZW1lbnQ6IG51bGwsXHJcbiAgICAgICAgICAgIF9jb3ZlcjogbnVsbCxcclxuICAgICAgICAgICAgX2NvbnRhaW5lcjogbnVsbCxcclxuICAgICAgICAgICAgLy8gQE92ZXJyaWRlIHJlc2l6aW5nIHByb3BlcnRpZXNcclxuICAgICAgICAgICAgaW5wdXRYOiBudWxsLFxyXG4gICAgICAgICAgICBpbnB1dFk6IG51bGwsXHJcbiAgICAgICAgICAgIF9lbGVtZW50X3c6IDEsXHJcbiAgICAgICAgICAgIF9lbGVtZW50X2g6IDEsXHJcbiAgICAgICAgICAgIF9lbGVtZW50X2w6IDAsXHJcbiAgICAgICAgICAgIF9lbGVtZW50X3Q6IDAsXHJcbiAgICAgICAgICAgIF9kZWZhdWx0U2l6ZVg6ICcxMDAlJyxcclxuICAgICAgICAgICAgX2RlZmF1bHRTaXplWTogKG9wdGlvbnMudmlkZW9SYXRpbyAqIDEwMCkgKyAnJScsXHJcbiAgICAgICAgICAgIF9vcmlnaW5fdzogb3B0aW9ucy52aWRlb1dpZHRoID09PSAnMTAwJScgPyAnJyA6IG9wdGlvbnMudmlkZW9XaWR0aCxcclxuICAgICAgICAgICAgX29yaWdpbl9oOiBvcHRpb25zLnZpZGVvSGVpZ2h0ID09PSAnNTYuMjUlJyA/ICcnIDogb3B0aW9ucy52aWRlb0hlaWdodCxcclxuICAgICAgICAgICAgX3Byb3BvcnRpb25DaGVja2VkOiB0cnVlLFxyXG4gICAgICAgICAgICBfcmVzaXppbmc6IG9wdGlvbnMudmlkZW9SZXNpemluZyxcclxuICAgICAgICAgICAgX3Jlc2l6ZURvdEhpZGU6ICFvcHRpb25zLnZpZGVvSGVpZ2h0U2hvdyxcclxuICAgICAgICAgICAgX3JvdGF0aW9uOiBvcHRpb25zLnZpZGVvUm90YXRpb24sXHJcbiAgICAgICAgICAgIF9hbGlnbkhpZGU6ICFvcHRpb25zLnZpZGVvQWxpZ25TaG93LFxyXG4gICAgICAgICAgICBfb25seVBlcmNlbnRhZ2U6IG9wdGlvbnMudmlkZW9TaXplT25seVBlcmNlbnRhZ2UsXHJcbiAgICAgICAgICAgIF9yYXRpbzogZmFsc2UsXHJcbiAgICAgICAgICAgIF9yYXRpb1g6IDEsXHJcbiAgICAgICAgICAgIF9yYXRpb1k6IDEsXHJcbiAgICAgICAgICAgIF9jYXB0aW9uU2hvdzogZmFsc2VcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogdmlkZW8gZGlhbG9nICovXHJcbiAgICAgICAgbGV0IHZpZGVvX2RpYWxvZyA9IHRoaXMuc2V0RGlhbG9nKGNvcmUpO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5tb2RhbCA9IHZpZGVvX2RpYWxvZztcclxuICAgICAgICBjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGUgPSB2aWRlb19kaWFsb2cucXVlcnlTZWxlY3RvcignLl9zZV92aWRlb19maWxlJyk7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLnZpZGVvVXJsRmlsZSA9IHZpZGVvX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuc2UtaW5wdXQtdXJsJyk7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLmZvY3VzRWxlbWVudCA9IGNvbnRleHRWaWRlby52aWRlb1VybEZpbGUgfHwgY29udGV4dFZpZGVvLnZpZGVvSW5wdXRGaWxlO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5wcmV2aWV3ID0gdmlkZW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5zZS1saW5rLXByZXZpZXcnKTtcclxuXHJcbiAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICB2aWRlb19kaWFsb2cucXVlcnlTZWxlY3RvcignZm9ybScpLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIHRoaXMuc3VibWl0LmJpbmQoY29yZSkpO1xyXG4gICAgICAgIGlmIChjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGUpIHZpZGVvX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuc2UtZGlhbG9nLWZpbGVzLWVkZ2UtYnV0dG9uJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9yZW1vdmVTZWxlY3RlZEZpbGVzLmJpbmQoY29udGV4dFZpZGVvLnZpZGVvSW5wdXRGaWxlLCBjb250ZXh0VmlkZW8udmlkZW9VcmxGaWxlLCBjb250ZXh0VmlkZW8ucHJldmlldykpO1xyXG4gICAgICAgIGlmIChjb250ZXh0VmlkZW8udmlkZW9JbnB1dEZpbGUgJiYgY29udGV4dFZpZGVvLnZpZGVvVXJsRmlsZSkgY29udGV4dFZpZGVvLnZpZGVvSW5wdXRGaWxlLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuX2ZpbGVJbnB1dENoYW5nZS5iaW5kKGNvbnRleHRWaWRlbykpO1xyXG4gICAgICAgIGlmIChjb250ZXh0VmlkZW8udmlkZW9VcmxGaWxlKSBjb250ZXh0VmlkZW8udmlkZW9VcmxGaWxlLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5fb25MaW5rUHJldmlldy5iaW5kKGNvbnRleHRWaWRlby5wcmV2aWV3LCBjb250ZXh0VmlkZW8sIG9wdGlvbnMubGlua1Byb3RvY29sKSk7XHJcblxyXG4gICAgICAgIGNvbnRleHRWaWRlby5wcm9wb3J0aW9uID0ge307XHJcbiAgICAgICAgY29udGV4dFZpZGVvLnZpZGVvUmF0aW9PcHRpb24gPSB7fTtcclxuICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRYID0ge307XHJcbiAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WSA9IHt9O1xyXG4gICAgICAgIGlmIChvcHRpb25zLnZpZGVvUmVzaXppbmcpIHtcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLnByb3BvcnRpb24gPSB2aWRlb19kaWFsb2cucXVlcnlTZWxlY3RvcignLl9zZV92aWRlb19jaGVja19wcm9wb3J0aW9uJyk7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby52aWRlb1JhdGlvT3B0aW9uID0gdmlkZW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5zZS12aWRlby1yYXRpbycpO1xyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRYID0gdmlkZW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdmlkZW9fc2l6ZV94Jyk7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFkgPSB2aWRlb19kaWFsb2cucXVlcnlTZWxlY3RvcignLl9zZV92aWRlb19zaXplX3knKTtcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WC52YWx1ZSA9IG9wdGlvbnMudmlkZW9XaWR0aDtcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WS52YWx1ZSA9IG9wdGlvbnMudmlkZW9IZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRYLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5zZXRJbnB1dFNpemUuYmluZChjb3JlLCAneCcpKTtcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WS5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuc2V0SW5wdXRTaXplLmJpbmQoY29yZSwgJ3knKSk7XHJcblxyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRYLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuc2V0UmF0aW8uYmluZChjb3JlKSk7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFkuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5zZXRSYXRpby5iaW5kKGNvcmUpKTtcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLnByb3BvcnRpb24uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5zZXRSYXRpby5iaW5kKGNvcmUpKTtcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLnZpZGVvUmF0aW9PcHRpb24uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5zZXRWaWRlb1JhdGlvLmJpbmQoY29yZSkpO1xyXG5cclxuICAgICAgICAgICAgdmlkZW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5zZS1kaWFsb2ctYnRuLXJldmVydCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5zaXplUmV2ZXJ0LmJpbmQoY29yZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqIGFwcGVuZCBodG1sICovXHJcbiAgICAgICAgY29udGV4dC5kaWFsb2cubW9kYWwuYXBwZW5kQ2hpbGQodmlkZW9fZGlhbG9nKTtcclxuXHJcbiAgICAgICAgLyoqIGVtcHR5IG1lbW9yeSAqL1xyXG4gICAgICAgIHZpZGVvX2RpYWxvZyA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiBkaWFsb2cgKi9cclxuICAgIHNldERpYWxvZzogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBvcHRpb24gPSBjb3JlLm9wdGlvbnM7XHJcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcclxuICAgICAgICBjb25zdCBkaWFsb2cgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIGRpYWxvZy5jbGFzc05hbWUgPSAnc2UtZGlhbG9nLWNvbnRlbnQnO1xyXG4gICAgICAgIGRpYWxvZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIGxldCBodG1sID0gJycgK1xyXG4gICAgICAgICAgICAnPGZvcm0gbWV0aG9kPVwicG9zdFwiIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1oZWFkZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiY2xvc2VcIiBjbGFzcz1cInNlLWJ0biBzZS1kaWFsb2ctY2xvc2VcIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5jbG9zZSArICdcIiBhcmlhLWxhYmVsPVwiJyArIGxhbmcuZGlhbG9nQm94LmNsb3NlICsgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLmljb25zLmNhbmNlbCArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLW1vZGFsLXRpdGxlXCI+JyArIGxhbmcuZGlhbG9nQm94LnZpZGVvQm94LnRpdGxlICsgJzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWJvZHlcIj4nO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb24udmlkZW9GaWxlSW5wdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICcnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD4nICsgbGFuZy5kaWFsb2dCb3gudmlkZW9Cb3guZmlsZSArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybS1maWxlc1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgY2xhc3M9XCJzZS1pbnB1dC1mb3JtIF9zZV92aWRlb19maWxlXCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCInICsgb3B0aW9uLnZpZGVvQWNjZXB0ICsgJ1wiJyArIChvcHRpb24udmlkZW9NdWx0aXBsZUZpbGUgPyAnIG11bHRpcGxlPVwibXVsdGlwbGVcIicgOiAnJykgKyAnLz4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiZmlsZXNSZW1vdmVcIiBjbGFzcz1cInNlLWJ0biBzZS1kaWFsb2ctZmlsZXMtZWRnZS1idXR0b24gc2UtZmlsZS1yZW1vdmVcIiB0aXRsZT1cIicgKyBsYW5nLmNvbnRyb2xsZXIucmVtb3ZlICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgbGFuZy5jb250cm9sbGVyLnJlbW92ZSArICdcIj4nICsgY29yZS5pY29ucy5jYW5jZWwgKyAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nIDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbi52aWRlb1VybElucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm1cIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+JyArIGxhbmcuZGlhbG9nQm94LnZpZGVvQm94LnVybCArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCBjbGFzcz1cInNlLWlucHV0LWZvcm0gc2UtaW5wdXQtdXJsXCIgdHlwZT1cInRleHRcIiAvPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxwcmUgY2xhc3M9XCJzZS1saW5rLXByZXZpZXdcIj48L3ByZT4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9uLnZpZGVvUmVzaXppbmcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJhdGlvTGlzdCA9IG9wdGlvbi52aWRlb1JhdGlvTGlzdCB8fCBbe25hbWU6ICcxNjo5JywgdmFsdWU6IDAuNTYyNX0sIHtuYW1lOiAnNDozJywgdmFsdWU6IDAuNzV9LCB7bmFtZTogJzIxOjknLCB2YWx1ZTogMC40Mjg1fV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCByYXRpbyA9IG9wdGlvbi52aWRlb1JhdGlvO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb25seVBlcmNlbnRhZ2UgPSBvcHRpb24udmlkZW9TaXplT25seVBlcmNlbnRhZ2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbmx5UGVyY2VudERpc3BsYXkgPSBvbmx5UGVyY2VudGFnZSA/ICcgc3R5bGU9XCJkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XCInIDogJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHREaXNwbGF5ID0gIW9wdGlvbi52aWRlb0hlaWdodFNob3cgPyAnIHN0eWxlPVwiZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1wiJyA6ICcnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmF0aW9EaXNwbGF5ID0gIW9wdGlvbi52aWRlb1JhdGlvU2hvdyA/ICcgc3R5bGU9XCJkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XCInIDogJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbmx5V2lkdGhEaXNwbGF5ID0gIW9ubHlQZXJjZW50YWdlICYmICFvcHRpb24udmlkZW9IZWlnaHRTaG93ICYmICFvcHRpb24udmlkZW9SYXRpb1Nob3cgPyAnIHN0eWxlPVwiZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1wiJyA6ICcnO1xyXG4gICAgICAgICAgICAgICAgaHRtbCArPSAnJyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1zaXplLXRleHRcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgY2xhc3M9XCJzaXplLXdcIj4nICsgbGFuZy5kaWFsb2dCb3gud2lkdGggKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgY2xhc3M9XCJzZS1kaWFsb2ctc2l6ZS14XCI+Jm5ic3A7PC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgY2xhc3M9XCJzaXplLWhcIicgKyBoZWlnaHREaXNwbGF5ICsgJz4nICsgbGFuZy5kaWFsb2dCb3guaGVpZ2h0ICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGNsYXNzPVwic2l6ZS1oXCInICsgcmF0aW9EaXNwbGF5ICsgJz4oJyArIGxhbmcuZGlhbG9nQm94LnJhdGlvICsgJyk8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgY2xhc3M9XCJzZS1pbnB1dC1jb250cm9sIF9zZV92aWRlb19zaXplX3hcIiBwbGFjZWhvbGRlcj1cIjEwMCVcIicgKyAob25seVBlcmNlbnRhZ2UgPyAnIHR5cGU9XCJudW1iZXJcIiBtaW49XCIxXCInIDogJ3R5cGU9XCJ0ZXh0XCInKSArIChvbmx5UGVyY2VudGFnZSA/ICcgbWF4PVwiMTAwXCInIDogJycpICsgJy8+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgY2xhc3M9XCJzZS1kaWFsb2ctc2l6ZS14XCInICsgb25seVdpZHRoRGlzcGxheSArICc+JyArIChvbmx5UGVyY2VudGFnZSA/ICclJyA6ICd4JykgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCBjbGFzcz1cInNlLWlucHV0LWNvbnRyb2wgX3NlX3ZpZGVvX3NpemVfeVwiIHBsYWNlaG9sZGVyPVwiJyArIChvcHRpb24udmlkZW9SYXRpbyAqIDEwMCkgKyAnJVwiJyArIChvbmx5UGVyY2VudGFnZSA/ICcgdHlwZT1cIm51bWJlclwiIG1pbj1cIjFcIicgOiAndHlwZT1cInRleHRcIicpICsgKG9ubHlQZXJjZW50YWdlID8gJyBtYXg9XCIxMDBcIicgOiAnJykgKyBoZWlnaHREaXNwbGF5ICsgJy8+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c2VsZWN0IGNsYXNzPVwic2UtaW5wdXQtc2VsZWN0IHNlLXZpZGVvLXJhdGlvXCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3gucmF0aW8gKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBsYW5nLmRpYWxvZ0JveC5yYXRpbyArICdcIicgKyByYXRpb0Rpc3BsYXkgKyAnPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhlaWdodERpc3BsYXkpIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCJcIj4gLSA8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJhdGlvTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgcmF0aW9MaXN0W2ldLnZhbHVlICsgJ1wiJyArIChyYXRpby50b1N0cmluZygpID09PSByYXRpb0xpc3RbaV0udmFsdWUudG9TdHJpbmcoKSA/ICcgc2VsZWN0ZWQnIDogJycpICsgJz4nICsgcmF0aW9MaXN0W2ldLm5hbWUgKyAnPC9vcHRpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPC9zZWxlY3Q+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5yZXZlcnRCdXR0b24gKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBsYW5nLmRpYWxvZ0JveC5yZXZlcnRCdXR0b24gKyAnXCIgY2xhc3M9XCJzZS1idG4gc2UtZGlhbG9nLWJ0bi1yZXZlcnRcIiBzdHlsZT1cImZsb2F0OiByaWdodDtcIj4nICsgY29yZS5pY29ucy5yZXZlcnQgKyAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm0gc2UtZGlhbG9nLWZvcm0tZm9vdGVyXCInICsgb25seVBlcmNlbnREaXNwbGF5ICsgb25seVdpZHRoRGlzcGxheSArICc+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwic2UtZGlhbG9nLWJ0bi1jaGVjayBfc2VfdmlkZW9fY2hlY2tfcHJvcG9ydGlvblwiIGNoZWNrZWQvPiZuYnNwOycgKyBsYW5nLmRpYWxvZ0JveC5wcm9wb3J0aW9uICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvZGl2Pic7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGh0bWwgKz0gJycgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9vdGVyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYnICsgKG9wdGlvbi52aWRlb0FsaWduU2hvdyA/ICcnIDogJyBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIicpICsgJz4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInN1bmVkaXRvcl92aWRlb19yYWRpb1wiIGNsYXNzPVwic2UtZGlhbG9nLWJ0bi1yYWRpb1wiIHZhbHVlPVwibm9uZVwiIGNoZWNrZWQ+JyArIGxhbmcuZGlhbG9nQm94LmJhc2ljICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzdW5lZGl0b3JfdmlkZW9fcmFkaW9cIiBjbGFzcz1cInNlLWRpYWxvZy1idG4tcmFkaW9cIiB2YWx1ZT1cImxlZnRcIj4nICsgbGFuZy5kaWFsb2dCb3gubGVmdCArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3VuZWRpdG9yX3ZpZGVvX3JhZGlvXCIgY2xhc3M9XCJzZS1kaWFsb2ctYnRuLXJhZGlvXCIgdmFsdWU9XCJjZW50ZXJcIj4nICsgbGFuZy5kaWFsb2dCb3guY2VudGVyICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzdW5lZGl0b3JfdmlkZW9fcmFkaW9cIiBjbGFzcz1cInNlLWRpYWxvZy1idG4tcmFkaW9cIiB2YWx1ZT1cInJpZ2h0XCI+JyArIGxhbmcuZGlhbG9nQm94LnJpZ2h0ICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cInNlLWJ0bi1wcmltYXJ5XCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgbGFuZy5kaWFsb2dCb3guc3VibWl0QnV0dG9uICsgJ1wiPjxzcGFuPicgKyBsYW5nLmRpYWxvZ0JveC5zdWJtaXRCdXR0b24gKyAnPC9zcGFuPjwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPC9mb3JtPic7XHJcblxyXG4gICAgICAgIGRpYWxvZy5pbm5lckhUTUwgPSBodG1sO1xyXG5cclxuICAgICAgICByZXR1cm4gZGlhbG9nO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZmlsZUlucHV0Q2hhbmdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpZGVvSW5wdXRGaWxlLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW9VcmxGaWxlLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3LnN0eWxlLnRleHREZWNvcmF0aW9uID0gJyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52aWRlb1VybEZpbGUuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXcuc3R5bGUudGV4dERlY29yYXRpb24gPSAnbGluZS10aHJvdWdoJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW1vdmVTZWxlY3RlZEZpbGVzOiBmdW5jdGlvbiAodXJsSW5wdXQsIHByZXZpZXcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKHVybElucHV0KSB7XHJcbiAgICAgICAgICAgIHVybElucHV0LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgcHJldmlldy5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX29uTGlua1ByZXZpZXc6IGZ1bmN0aW9uIChjb250ZXh0LCBwcm90b2NvbCwgZSkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xyXG4gICAgICAgIGlmICgvXjxpZnJhbWUuKlxcL2lmcmFtZT4kLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICBjb250ZXh0Ll9saW5rVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy50ZXh0Q29udGVudCA9ICc8SUZyYW1lIDpzcmM9XCIuLlwiPjwvSUZyYW1lPic7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29udGV4dC5fbGlua1ZhbHVlID0gdGhpcy50ZXh0Q29udGVudCA9ICF2YWx1ZSA/ICcnIDogKHByb3RvY29sICYmIHZhbHVlLmluZGV4T2YoJzovLycpID09PSAtMSAmJiB2YWx1ZS5pbmRleE9mKCcjJykgIT09IDApID8gcHJvdG9jb2wgKyB2YWx1ZSA6IHZhbHVlLmluZGV4T2YoJzovLycpID09PSAtMSA/ICcvJyArIHZhbHVlIDogdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0VGFnQXR0cnM6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NvbnRyb2xzJywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGF0dHJzID0gdGhpcy5vcHRpb25zLnZpZGVvVGFnQXR0cnM7XHJcbiAgICAgICAgaWYgKCFhdHRycykgcmV0dXJuO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gYXR0cnMpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnV0aWwuaGFzT3duKGF0dHJzLCBrZXkpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyc1trZXldKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNyZWF0ZVZpZGVvVGFnOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgdmlkZW9UYWcgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnVklERU8nKTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uX3NldFRhZ0F0dHJzLmNhbGwodGhpcywgdmlkZW9UYWcpO1xyXG4gICAgICAgIHJldHVybiB2aWRlb1RhZztcclxuICAgIH0sXHJcblxyXG4gICAgX3NldElmcmFtZUF0dHJzOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGVsZW1lbnQuZnJhbWVCb3JkZXIgPSAnMCc7XHJcbiAgICAgICAgZWxlbWVudC5hbGxvd0Z1bGxzY3JlZW4gPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBhdHRycyA9IHRoaXMub3B0aW9ucy52aWRlb0lmcmFtZUF0dHJzO1xyXG4gICAgICAgIGlmICghYXR0cnMpIHJldHVybjtcclxuXHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGF0dHJzKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy51dGlsLmhhc093bihhdHRycywga2V5KSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgYXR0cnNba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVJZnJhbWVUYWc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBpZnJhbWVUYWcgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnSUZSQU1FJyk7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLl9zZXRJZnJhbWVBdHRycy5jYWxsKHRoaXMsIGlmcmFtZVRhZyk7XHJcbiAgICAgICAgcmV0dXJuIGlmcmFtZVRhZztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgQFJlcXVpcmVkIGZpbGVNYW5hZ2VyXHJcbiAgICAgKi9cclxuICAgIGZpbGVUYWdzOiBbJ2lmcmFtZScsICd2aWRlbyddLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGNvcmUsIHJlc2l6aW5nLCBmaWxlTWFuYWdlclxyXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGNhbGxlZCBmcm9tIGNvcmUuc2VsZWN0Q29tcG9uZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRhcmdldCBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHNlbGVjdDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8ub25Nb2RpZnlNb2RlLmNhbGwodGhpcywgZWxlbWVudCwgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLmNhbGxfY29udHJvbGxlcl9yZXNpemUuY2FsbCh0aGlzLCBlbGVtZW50LCAndmlkZW8nKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGZpbGVNYW5hZ2VyLCByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IGZyYW1lID0gZWxlbWVudCB8fCB0aGlzLmNvbnRleHQudmlkZW8uX2VsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250ZXh0LnZpZGVvLl9jb250YWluZXI7XHJcbiAgICAgICAgY29uc3QgZGF0YUluZGV4ID0gZnJhbWUuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4JykgKiAxO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uVmlkZW9EZWxldGVCZWZvcmUgPT09ICdmdW5jdGlvbicgJiYgKHRoaXMuZnVuY3Rpb25zLm9uVmlkZW9EZWxldGVCZWZvcmUoZnJhbWUsIGNvbnRhaW5lciwgZGF0YUluZGV4LCB0aGlzKSA9PT0gZmFsc2UpKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBmb2N1c0VsID0gKGNvbnRhaW5lci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIHx8IGNvbnRhaW5lci5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgIGNvbnN0IGVtcHR5RGl2ID0gY29udGFpbmVyLnBhcmVudE5vZGU7XHJcbiAgICAgICAgdGhpcy51dGlsLnJlbW92ZUl0ZW0oY29udGFpbmVyKTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uaW5pdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuXHJcbiAgICAgICAgaWYgKGVtcHR5RGl2ICE9PSB0aGlzLmNvbnRleHQuZWxlbWVudC53eXNpd3lnKSB0aGlzLnV0aWwucmVtb3ZlSXRlbUFsbFBhcmVudHMoZW1wdHlEaXYsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwOyB9LCBudWxsKTtcclxuXHJcbiAgICAgICAgLy8gZm9jdXNcclxuICAgICAgICB0aGlzLmZvY3VzRWRnZShmb2N1c0VsKTtcclxuXHJcbiAgICAgICAgLy8gZXZlbnRcclxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuZGVsZXRlSW5mby5jYWxsKHRoaXMsICd2aWRlbycsIGRhdGFJbmRleCwgdGhpcy5mdW5jdGlvbnMub25WaWRlb1VwbG9hZCk7XHJcblxyXG4gICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBkaWFsb2dcclxuICAgICAqL1xyXG4gICAgb246IGZ1bmN0aW9uICh1cGRhdGUpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcblxyXG4gICAgICAgIGlmICghdXBkYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFgudmFsdWUgPSBjb250ZXh0VmlkZW8uX29yaWdpbl93ID0gdGhpcy5vcHRpb25zLnZpZGVvV2lkdGggPT09IGNvbnRleHRWaWRlby5fZGVmYXVsdFNpemVYID8gJycgOiB0aGlzLm9wdGlvbnMudmlkZW9XaWR0aDtcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WS52YWx1ZSA9IGNvbnRleHRWaWRlby5fb3JpZ2luX2ggPSB0aGlzLm9wdGlvbnMudmlkZW9IZWlnaHQgPT09IGNvbnRleHRWaWRlby5fZGVmYXVsdFNpemVZID8gJycgOiB0aGlzLm9wdGlvbnMudmlkZW9IZWlnaHQ7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5wcm9wb3J0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZSAmJiB0aGlzLm9wdGlvbnMudmlkZW9NdWx0aXBsZUZpbGUpIGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZS5zZXRBdHRyaWJ1dGUoJ211bHRpcGxlJywgJ211bHRpcGxlJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZSAmJiB0aGlzLm9wdGlvbnMudmlkZW9NdWx0aXBsZUZpbGUpIGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZS5yZW1vdmVBdHRyaWJ1dGUoJ211bHRpcGxlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLl9yZXNpemluZykge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uc2V0VmlkZW9SYXRpb1NlbGVjdC5jYWxsKHRoaXMsIGNvbnRleHRWaWRlby5fb3JpZ2luX2ggfHwgY29udGV4dFZpZGVvLl9kZWZhdWx0UmF0aW8pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGRpYWxvZ1xyXG4gICAgICovXHJcbiAgICBvcGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5vcGVuLmNhbGwodGhpcywgJ3ZpZGVvJywgJ3ZpZGVvJyA9PT0gdGhpcy5jdXJyZW50Q29udHJvbGxlck5hbWUpO1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgc2V0VmlkZW9SYXRpbzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBlLnRhcmdldC5vcHRpb25zW2UudGFyZ2V0LnNlbGVjdGVkSW5kZXhdLnZhbHVlO1xyXG5cclxuICAgICAgICBjb250ZXh0VmlkZW8uX2RlZmF1bHRTaXplWSA9IGNvbnRleHRWaWRlby5fdmlkZW9SYXRpbyA9ICF2YWx1ZSA/IGNvbnRleHRWaWRlby5fZGVmYXVsdFNpemVZIDogKHZhbHVlICogMTAwKSArICclJztcclxuICAgICAgICBjb250ZXh0VmlkZW8uaW5wdXRZLnBsYWNlaG9sZGVyID0gIXZhbHVlID8gJycgOiAodmFsdWUgKiAxMDApICsgJyUnO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFkudmFsdWUgPSAnJztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB4eSAneCc6IHdpZHRoLCAneSc6IGhlaWdodFxyXG4gICAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBlIEV2ZW50IG9iamVjdFxyXG4gICAgICovXHJcbiAgICBzZXRJbnB1dFNpemU6IGZ1bmN0aW9uICh4eSwgZSkge1xyXG4gICAgICAgIGlmIChlICYmIGUua2V5Q29kZSA9PT0gMzIpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfc2V0SW5wdXRTaXplLmNhbGwodGhpcywgY29udGV4dFZpZGVvLCB4eSk7XHJcblxyXG4gICAgICAgIGlmICh4eSA9PT0gJ3knKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5zZXRWaWRlb1JhdGlvU2VsZWN0LmNhbGwodGhpcywgZS50YXJnZXQudmFsdWUgfHwgY29udGV4dFZpZGVvLl9kZWZhdWx0UmF0aW8pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgc2V0UmF0aW86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9zZXRSYXRpby5jYWxsKHRoaXMsIHRoaXMuY29udGV4dC52aWRlbyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHN1Ym1pdDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgY29uc3QgdmlkZW9QbHVnaW4gPSB0aGlzLnBsdWdpbnMudmlkZW87XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICBjb250ZXh0VmlkZW8uX2FsaWduID0gY29udGV4dFZpZGVvLm1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9XCJzdW5lZGl0b3JfdmlkZW9fcmFkaW9cIl06Y2hlY2tlZCcpLnZhbHVlO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dFZpZGVvLnZpZGVvSW5wdXRGaWxlICYmIGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZS5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB2aWRlb1BsdWdpbi5zdWJtaXRBY3Rpb24uY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQudmlkZW8udmlkZW9JbnB1dEZpbGUuZmlsZXMpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRWaWRlby52aWRlb1VybEZpbGUgJiYgY29udGV4dFZpZGVvLl9saW5rVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgdmlkZW9QbHVnaW4uc2V0dXBfdXJsLmNhbGwodGhpcywgY29udGV4dFZpZGVvLl9saW5rVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IudmlkZW8uc3VibWl0LmZhaWxdIGNhdXNlIDogXCInICsgZXJyb3IubWVzc2FnZSArICdcIicpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cuY2xvc2UuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgc3VibWl0QWN0aW9uOiBmdW5jdGlvbiAoZmlsZUxpc3QpIHtcclxuICAgICAgICBpZiAoZmlsZUxpc3QubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBmaWxlU2l6ZSA9IDA7XHJcbiAgICAgICAgbGV0IGZpbGVzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZpbGVMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICgvdmlkZW8vaS50ZXN0KGZpbGVMaXN0W2ldLnR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGVMaXN0W2ldKTtcclxuICAgICAgICAgICAgICAgIGZpbGVTaXplICs9IGZpbGVMaXN0W2ldLnNpemU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGxpbWl0U2l6ZSA9IHRoaXMub3B0aW9ucy52aWRlb1VwbG9hZFNpemVMaW1pdDtcclxuICAgICAgICBpZiAobGltaXRTaXplID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgaW5mb1NpemUgPSAwO1xyXG4gICAgICAgICAgICBjb25zdCB2aWRlb3NJbmZvID0gdGhpcy5jb250ZXh0LnZpZGVvLl9pbmZvTGlzdDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHZpZGVvc0luZm8ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGluZm9TaXplICs9IHZpZGVvc0luZm9baV0uc2l6ZSAqIDE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICgoZmlsZVNpemUgKyBpbmZvU2l6ZSkgPiBsaW1pdFNpemUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSAnW1NVTkVESVRPUi52aWRlb1VwbG9hZC5mYWlsXSBTaXplIG9mIHVwbG9hZGFibGUgdG90YWwgdmlkZW9zOiAnICsgKGxpbWl0U2l6ZS8xMDAwKSArICdLQic7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uVmlkZW9VcGxvYWRFcnJvciAhPT0gJ2Z1bmN0aW9uJyB8fCB0aGlzLmZ1bmN0aW9ucy5vblZpZGVvVXBsb2FkRXJyb3IoZXJyLCB7ICdsaW1pdFNpemUnOiBsaW1pdFNpemUsICdjdXJyZW50U2l6ZSc6IGluZm9TaXplLCAndXBsb2FkU2l6ZSc6IGZpbGVTaXplIH0sIHRoaXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnMubm90aWNlT3BlbihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl91cGxvYWRGaWxlTGVuZ3RoID0gZmlsZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICBjb25zdCBpbmZvID0ge1xyXG4gICAgICAgICAgICBpbnB1dFdpZHRoOiBjb250ZXh0VmlkZW8uaW5wdXRYLnZhbHVlLFxyXG4gICAgICAgICAgICBpbnB1dEhlaWdodDogY29udGV4dFZpZGVvLmlucHV0WS52YWx1ZSxcclxuICAgICAgICAgICAgYWxpZ246IGNvbnRleHRWaWRlby5fYWxpZ24sXHJcbiAgICAgICAgICAgIGlzVXBkYXRlOiB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsLFxyXG4gICAgICAgICAgICBlbGVtZW50OiBjb250ZXh0VmlkZW8uX2VsZW1lbnRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uVmlkZW9VcGxvYWRCZWZvcmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5mdW5jdGlvbnMub25WaWRlb1VwbG9hZEJlZm9yZShmaWxlcywgaW5mbywgdGhpcywgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIHRoaXMuX3cuQXJyYXkuaXNBcnJheShkYXRhLnJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8ucmVnaXN0ZXIuY2FsbCh0aGlzLCBpbmZvLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnVwbG9hZC5jYWxsKHRoaXMsIGluZm8sIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQubGVuZ3RoID4gMCkgZmlsZXMgPSByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8udXBsb2FkLmNhbGwodGhpcywgaW5mbywgZmlsZXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBlcnJvcjogZnVuY3Rpb24gKG1lc3NhZ2UsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uVmlkZW9VcGxvYWRFcnJvciAhPT0gJ2Z1bmN0aW9uJyB8fCB0aGlzLmZ1bmN0aW9ucy5vblZpZGVvVXBsb2FkRXJyb3IobWVzc2FnZSwgcmVzcG9uc2UsIHRoaXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zLm5vdGljZU9wZW4obWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLnBsdWdpbi52aWRlby5lcnJvcl0gcmVzcG9uc2U6ICcgKyBtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHVwbG9hZDogZnVuY3Rpb24gKGluZm8sIGZpbGVzKSB7XHJcbiAgICAgICAgaWYgKCFmaWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgZmlsZXMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5lcnJvci5jYWxsKHRoaXMsIGZpbGVzLCBudWxsKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdmlkZW9VcGxvYWRVcmwgPSB0aGlzLm9wdGlvbnMudmlkZW9VcGxvYWRVcmw7XHJcbiAgICAgICAgY29uc3QgZmlsZXNMZW4gPSB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsID8gMSA6IGZpbGVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gc2VydmVyIHVwbG9hZFxyXG4gICAgICAgIGlmICh0eXBlb2YgdmlkZW9VcGxvYWRVcmwgPT09ICdzdHJpbmcnICYmIHZpZGVvVXBsb2FkVXJsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlc0xlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUtJyArIGksIGZpbGVzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIudXBsb2FkLmNhbGwodGhpcywgdmlkZW9VcGxvYWRVcmwsIHRoaXMub3B0aW9ucy52aWRlb1VwbG9hZEhlYWRlciwgZm9ybURhdGEsIHRoaXMucGx1Z2lucy52aWRlby5jYWxsQmFja192aWRlb1VwbG9hZC5iaW5kKHRoaXMsIGluZm8pLCB0aGlzLmZ1bmN0aW9ucy5vblZpZGVvVXBsb2FkRXJyb3IpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLnZpZGVvVXBsb2FkLmZhaWxdIGNhdXNlIDogVGhlcmUgaXMgbm8gXCJ2aWRlb1VwbG9hZFVybFwiIG9wdGlvbi4nKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNhbGxCYWNrX3ZpZGVvVXBsb2FkOiBmdW5jdGlvbiAoaW5mbywgeG1sSHR0cCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mdW5jdGlvbnMudmlkZW9VcGxvYWRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zLnZpZGVvVXBsb2FkSGFuZGxlcih4bWxIdHRwLCBpbmZvLCB0aGlzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoeG1sSHR0cC5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uZXJyb3IuY2FsbCh0aGlzLCByZXNwb25zZS5lcnJvck1lc3NhZ2UsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5yZWdpc3Rlci5jYWxsKHRoaXMsIGluZm8sIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVnaXN0ZXI6IGZ1bmN0aW9uIChpbmZvLCByZXNwb25zZSkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVMaXN0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG4gICAgICAgIGNvbnN0IHZpZGVvVGFnID0gdGhpcy5wbHVnaW5zLnZpZGVvLmNyZWF0ZVZpZGVvVGFnLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBmaWxlTGlzdC5sZW5ndGgsIGZpbGU7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmaWxlID0geyBuYW1lOiBmaWxlTGlzdFtpXS5uYW1lLCBzaXplOiBmaWxlTGlzdFtpXS5zaXplIH07XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5jcmVhdGVfdmlkZW8uY2FsbCh0aGlzLCAoaW5mby5pc1VwZGF0ZSA/IGluZm8uZWxlbWVudCA6IHZpZGVvVGFnLmNsb25lTm9kZShmYWxzZSkpLCBmaWxlTGlzdFtpXS51cmwsIGluZm8uaW5wdXRXaWR0aCwgaW5mby5pbnB1dEhlaWdodCwgaW5mby5hbGlnbiwgZmlsZSwgaW5mby5pc1VwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXR1cF91cmw6IGZ1bmN0aW9uICh1cmwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgICAgIGlmICghdXJsKSB1cmwgPSBjb250ZXh0VmlkZW8uX2xpbmtWYWx1ZTtcclxuICAgICAgICAgICAgaWYgKCF1cmwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8qKiBpZnJhbWUgc291cmNlICovXHJcbiAgICAgICAgICAgIGlmICgvXjxpZnJhbWUuKlxcL2lmcmFtZT4kLy50ZXN0KHVybCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9JZnJhbWUgPSAobmV3IHRoaXMuX3cuRE9NUGFyc2VyKCkpLnBhcnNlRnJvbVN0cmluZyh1cmwsICd0ZXh0L2h0bWwnKS5xdWVyeVNlbGVjdG9yKCdpZnJhbWUnKTtcclxuICAgICAgICAgICAgICAgIHVybCA9IG9JZnJhbWUuc3JjO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVybC5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLyoqIHlvdXR1YmUgKi9cclxuICAgICAgICAgICAgaWYgKC95b3V0dVxcLj9iZS8udGVzdCh1cmwpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB1cmwgPSAnaHR0cHM6Ly8nICsgdXJsO1xyXG4gICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoJ3dhdGNoP3Y9JywgJycpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCEvXlxcL1xcLy4rXFwvZW1iZWRcXC8vLnRlc3QodXJsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKHVybC5tYXRjaCgvXFwvXFwvLitcXC8vKVswXSwgJy8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLycpLnJlcGxhY2UoJyYnLCAnPyYnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dFZpZGVvLl95b3V0dWJlUXVlcnkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXFw/Ly50ZXN0KHVybCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BsaXRVcmwgPSB1cmwuc3BsaXQoJz8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gc3BsaXRVcmxbMF0gKyAnPycgKyBjb250ZXh0VmlkZW8uX3lvdXR1YmVRdWVyeSArICcmJyArIHNwbGl0VXJsWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCArPSAnPycgKyBjb250ZXh0VmlkZW8uX3lvdXR1YmVRdWVyeTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL3ZpbWVvXFwuY29tLy50ZXN0KHVybCkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmwuZW5kc1dpdGgoJy8nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IHVybC5zbGljZSgwLCAtMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB1cmwgPSAnaHR0cHM6Ly9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLycgKyB1cmwuc2xpY2UodXJsLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dFZpZGVvLl92aW1lb1F1ZXJ5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoL1xcPy8udGVzdCh1cmwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0VXJsID0gdXJsLnNwbGl0KCc/Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHNwbGl0VXJsWzBdICsgJz8nICsgY29udGV4dFZpZGVvLl92aW1lb1F1ZXJ5ICsgJyYnICsgc3BsaXRVcmxbMV07XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JyArIGNvbnRleHRWaWRlby5fdmltZW9RdWVyeTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5jcmVhdGVfdmlkZW8uY2FsbCh0aGlzLCB0aGlzLnBsdWdpbnMudmlkZW9bKCEvZW1iZWR8aWZyYW1lfHBsYXllcnxcXC9lXFwvfFxcLnBocHxcXC5odG1sPy8udGVzdCh1cmwpICYmICEvdmltZW9cXC5jb20vLnRlc3QodXJsKSA/IFwiY3JlYXRlVmlkZW9UYWdcIiA6IFwiY3JlYXRlSWZyYW1lVGFnXCIpXS5jYWxsKHRoaXMpLCB1cmwsIGNvbnRleHRWaWRlby5pbnB1dFgudmFsdWUsIGNvbnRleHRWaWRlby5pbnB1dFkudmFsdWUsIGNvbnRleHRWaWRlby5fYWxpZ24sIG51bGwsIHRoaXMuY29udGV4dC5kaWFsb2cudXBkYXRlTW9kYWwpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLnZpZGVvLnVwbG9hZC5mYWlsXSBjYXVzZSA6IFwiJyArIGVycm9yLm1lc3NhZ2UgKyAnXCInKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY3JlYXRlX3ZpZGVvOiBmdW5jdGlvbiAob0ZyYW1lLCBzcmMsIHdpZHRoLCBoZWlnaHQsIGFsaWduLCBmaWxlLCBpc1VwZGF0ZSkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbiA9ICd2aWRlbyc7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBjb3ZlciA9IG51bGw7XHJcbiAgICAgICAgbGV0IGNvbnRhaW5lciA9IG51bGw7XHJcbiAgICAgICAgbGV0IGluaXQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLyoqIHVwZGF0ZSAqL1xyXG4gICAgICAgIGlmIChpc1VwZGF0ZSkge1xyXG4gICAgICAgICAgICBvRnJhbWUgPSBjb250ZXh0VmlkZW8uX2VsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChvRnJhbWUuc3JjICE9PSBzcmMpIHtcclxuICAgICAgICAgICAgICAgIGluaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNZb3V0dWJlID0gL3lvdXR1XFwuP2JlLy50ZXN0KHNyYyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc1ZpbWVvID0gL3ZpbWVvXFwuY29tLy50ZXN0KHNyYyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGlzWW91dHViZSB8fCBpc1ZpbWVvKSAmJiAhL15pZnJhbWUkL2kudGVzdChvRnJhbWUubm9kZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VGFnID0gdGhpcy5wbHVnaW5zLnZpZGVvLmNyZWF0ZUlmcmFtZVRhZy5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1RhZy5zcmMgPSBzcmM7XHJcbiAgICAgICAgICAgICAgICAgICAgb0ZyYW1lLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld1RhZywgb0ZyYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0VmlkZW8uX2VsZW1lbnQgPSBvRnJhbWUgPSBuZXdUYWc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc1lvdXR1YmUgJiYgIWlzVmltZW8gJiYgIS9edmlkZW8kL2kudGVzdChvRnJhbWUubm9kZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VGFnID0gdGhpcy5wbHVnaW5zLnZpZGVvLmNyZWF0ZVZpZGVvVGFnLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFnLnNyYyA9IHNyYztcclxuICAgICAgICAgICAgICAgICAgICBvRnJhbWUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3VGFnLCBvRnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudCA9IG9GcmFtZSA9IG5ld1RhZztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb0ZyYW1lLnNyYyA9IHNyYztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250YWluZXIgPSBjb250ZXh0VmlkZW8uX2NvbnRhaW5lcjtcclxuICAgICAgICAgICAgY292ZXIgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChvRnJhbWUsICdGSUdVUkUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLyoqIGNyZWF0ZSAqL1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpbml0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgb0ZyYW1lLnNyYyA9IHNyYztcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50ID0gb0ZyYW1lO1xyXG4gICAgICAgICAgICBjb3ZlciA9IHRoaXMucGx1Z2lucy5jb21wb25lbnQuc2V0X2NvdmVyLmNhbGwodGhpcywgb0ZyYW1lKTtcclxuICAgICAgICAgICAgY29udGFpbmVyID0gdGhpcy5wbHVnaW5zLmNvbXBvbmVudC5zZXRfY29udGFpbmVyLmNhbGwodGhpcywgY292ZXIsICdzZS12aWRlby1jb250YWluZXInKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKiByZW5kZXJpbmcgKi9cclxuICAgICAgICBjb250ZXh0VmlkZW8uX2NvdmVyID0gY292ZXI7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9jb250YWluZXIgPSBjb250YWluZXI7XHJcblxyXG4gICAgICAgIGNvbnN0IGlucHV0VXBkYXRlID0gKHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX2dldFNpemVYLmNhbGwodGhpcywgY29udGV4dFZpZGVvKSAhPT0gKHdpZHRoIHx8IGNvbnRleHRWaWRlby5fZGVmYXVsdFNpemVYKSkgfHwgKHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX2dldFNpemVZLmNhbGwodGhpcywgY29udGV4dFZpZGVvKSAhPT0gKGhlaWdodCB8fCBjb250ZXh0VmlkZW8uX3ZpZGVvUmF0aW8pKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VTaXplID0gIWlzVXBkYXRlIHx8IGlucHV0VXBkYXRlO1xyXG5cclxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLl9yZXNpemluZykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQudmlkZW8uX3Byb3BvcnRpb25DaGVja2VkID0gY29udGV4dFZpZGVvLnByb3BvcnRpb24uY2hlY2tlZDtcclxuICAgICAgICAgICAgb0ZyYW1lLnNldEF0dHJpYnV0ZSgnZGF0YS1wcm9wb3J0aW9uJywgY29udGV4dFZpZGVvLl9wcm9wb3J0aW9uQ2hlY2tlZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzaXplXHJcbiAgICAgICAgbGV0IGlzUGVyY2VudCA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChjaGFuZ2VTaXplKSB7XHJcbiAgICAgICAgICAgIGlzUGVyY2VudCA9IHRoaXMucGx1Z2lucy52aWRlby5hcHBseVNpemUuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFsaWduXHJcbiAgICAgICAgaWYgKCEoaXNQZXJjZW50ICYmIGFsaWduID09PSAnY2VudGVyJykpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldEFsaWduLmNhbGwodGhpcywgbnVsbCwgb0ZyYW1lLCBjb3ZlciwgY29udGFpbmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIWlzVXBkYXRlKSB7XHJcbiAgICAgICAgICAgIGNoYW5nZWQgPSB0aGlzLmluc2VydENvbXBvbmVudChjb250YWluZXIsIGZhbHNlLCB0cnVlLCAhdGhpcy5vcHRpb25zLm1lZGlhQXV0b1NlbGVjdCk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLm1lZGlhQXV0b1NlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuYXBwZW5kRm9ybWF0VGFnKGNvbnRhaW5lciwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGluZSkgdGhpcy5zZXRSYW5nZShsaW5lLCAwLCBsaW5lLCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFZpZGVvLl9yZXNpemluZyAmJiB0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsICYmIGNoYW5nZVNpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLnNldFRyYW5zZm9ybVNpemUuY2FsbCh0aGlzLCBvRnJhbWUsIG51bGwsIG51bGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcclxuICAgICAgICAgICAgaWYgKGluaXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5zZXRJbmZvLmNhbGwodGhpcywgJ3ZpZGVvJywgb0ZyYW1lLCB0aGlzLmZ1bmN0aW9ucy5vblZpZGVvVXBsb2FkLCBmaWxlLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KG9GcmFtZSwgJ3ZpZGVvJyk7XHJcbiAgICAgICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbiA9ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlX3ZpZGVvQ292ZXI6IGZ1bmN0aW9uIChvRnJhbWUpIHtcclxuICAgICAgICBpZiAoIW9GcmFtZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKC9edmlkZW8kL2kudGVzdChvRnJhbWUubm9kZU5hbWUpKSB0aGlzLnBsdWdpbnMudmlkZW8uX3NldFRhZ0F0dHJzLmNhbGwodGhpcywgb0ZyYW1lKTtcclxuICAgICAgICBlbHNlIHRoaXMucGx1Z2lucy52aWRlby5fc2V0SWZyYW1lQXR0cnMuY2FsbCh0aGlzLCBvRnJhbWUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGZyYW1lUGFyZW50ID0gb0ZyYW1lLnBhcmVudE5vZGU7XHJcbiAgICAgICAgbGV0IGV4aXN0RWxlbWVudCA9ICh0aGlzLnV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQoZnJhbWVQYXJlbnQpIHx8IHRoaXMudXRpbC5pc1d5c2l3eWdEaXYoZnJhbWVQYXJlbnQpKSA/IG9GcmFtZSA6IGZyYW1lUGFyZW50IHx8IG9GcmFtZTtcclxuXHJcbiAgICAgICAgY29uc3QgcHJldkZyYW1lID0gb0ZyYW1lO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudCA9IG9GcmFtZSA9IG9GcmFtZS5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgY292ZXIgPSBjb250ZXh0VmlkZW8uX2NvdmVyID0gdGhpcy5wbHVnaW5zLmNvbXBvbmVudC5zZXRfY292ZXIuY2FsbCh0aGlzLCBvRnJhbWUpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRleHRWaWRlby5fY29udGFpbmVyID0gdGhpcy5wbHVnaW5zLmNvbXBvbmVudC5zZXRfY29udGFpbmVyLmNhbGwodGhpcywgY292ZXIsICdzZS12aWRlby1jb250YWluZXInKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgZmlnY2FwdGlvbiA9IGV4aXN0RWxlbWVudC5xdWVyeVNlbGVjdG9yKCdmaWdjYXB0aW9uJyk7XHJcbiAgICAgICAgICAgIGxldCBjYXB0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKCEhZmlnY2FwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY2FwdGlvbiA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgICAgIGNhcHRpb24uaW5uZXJIVE1MID0gZmlnY2FwdGlvbi5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShmaWdjYXB0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc2l6ZVxyXG4gICAgICAgICAgICBjb25zdCBzaXplID0gKG9GcmFtZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2l6ZScpIHx8IG9GcmFtZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luJykgfHwgJycpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5hcHBseVNpemUuY2FsbCh0aGlzLCAoc2l6ZVswXSB8fCBwcmV2RnJhbWUuc3R5bGUud2lkdGggfHwgcHJldkZyYW1lLndpZHRoIHx8ICcnKSwgKHNpemVbMV0gfHwgcHJldkZyYW1lLnN0eWxlLmhlaWdodCB8fCBwcmV2RnJhbWUuaGVpZ2h0IHx8ICcnKSk7XHJcblxyXG4gICAgICAgICAgICAvLyBhbGlnblxyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLnV0aWwuZ2V0Rm9ybWF0RWxlbWVudChwcmV2RnJhbWUpO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0KSBjb250ZXh0VmlkZW8uX2FsaWduID0gZm9ybWF0LnN0eWxlLnRleHRBbGlnbiB8fCBmb3JtYXQuc3R5bGUuZmxvYXQ7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5zZXRBbGlnbi5jYWxsKHRoaXMsIG51bGwsIG9GcmFtZSwgY292ZXIsIGNvbnRhaW5lcik7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQocHJldkZyYW1lLCB0aGlzLnV0aWwuaXNOb3RDaGVja2luZ05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwcmV2RnJhbWUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY29udGFpbmVyLCBwcmV2RnJhbWUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXRpbC5pc0xpc3RDZWxsKGV4aXN0RWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlZmVyID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQocHJldkZyYW1lLCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gY3VycmVudC5wYXJlbnROb2RlID09PSBleGlzdEVsZW1lbnQ7IH0pO1xyXG4gICAgICAgICAgICAgICAgZXhpc3RFbGVtZW50Lmluc2VydEJlZm9yZShjb250YWluZXIsIHJlZmVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVJdGVtKHByZXZGcmFtZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlRW1wdHlOb2RlKHJlZmVyLCBudWxsLCB0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnV0aWwuaXNGb3JtYXRFbGVtZW50KGV4aXN0RWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlZmVyID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQocHJldkZyYW1lLCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gY3VycmVudC5wYXJlbnROb2RlID09PSBleGlzdEVsZW1lbnQ7IH0pO1xyXG4gICAgICAgICAgICAgICAgZXhpc3RFbGVtZW50ID0gdGhpcy51dGlsLnNwbGl0RWxlbWVudChleGlzdEVsZW1lbnQsIHJlZmVyKTtcclxuICAgICAgICAgICAgICAgIGV4aXN0RWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjb250YWluZXIsIGV4aXN0RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShwcmV2RnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUVtcHR5Tm9kZShleGlzdEVsZW1lbnQsIG51bGwsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT09IDApIGV4aXN0RWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnV0aWwuaHRtbFJlbW92ZVdoaXRlU3BhY2UoZXhpc3RFbGVtZW50LmlubmVySFRNTCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBleGlzdEVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY29udGFpbmVyLCBleGlzdEVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoISFjYXB0aW9uKSBleGlzdEVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2FwdGlvbiwgY29udGFpbmVyLm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbU1VORURJVE9SLnZpZGVvLmVycm9yXSBNYXliZSB0aGUgdmlkZW8gdGFnIGlzIG5lc3RlZC4nLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuc2V0SW5mby5jYWxsKHRoaXMsICd2aWRlbycsIG9GcmFtZSwgdGhpcy5mdW5jdGlvbnMub25WaWRlb1VwbG9hZCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLmluaXQuY2FsbCh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGZpbGVNYW5hZ2VyLCByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBvbk1vZGlmeU1vZGU6IGZ1bmN0aW9uIChlbGVtZW50LCBzaXplKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9jb3ZlciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsICdGSUdVUkUnKTtcclxuICAgICAgICBjb250ZXh0VmlkZW8uX2NvbnRhaW5lciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsIHRoaXMudXRpbC5pc01lZGlhQ29tcG9uZW50KTtcclxuICAgICAgICBjb250ZXh0VmlkZW8uX2FsaWduID0gZWxlbWVudC5zdHlsZS5mbG9hdCB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1hbGlnbicpIHx8ICdub25lJztcclxuICAgICAgICBlbGVtZW50LnN0eWxlLmZsb2F0ID0gJyc7XHJcblxyXG4gICAgICAgIGlmIChzaXplKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudF93ID0gc2l6ZS53O1xyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uX2VsZW1lbnRfaCA9IHNpemUuaDtcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50X3QgPSBzaXplLnQ7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudF9sID0gc2l6ZS5sO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG9yaWdpbiA9IGNvbnRleHRWaWRlby5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2l6ZScpIHx8IGNvbnRleHRWaWRlby5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luJyk7XHJcbiAgICAgICAgbGV0IHcsIGg7XHJcbiAgICAgICAgaWYgKG9yaWdpbikge1xyXG4gICAgICAgICAgICBvcmlnaW4gPSBvcmlnaW4uc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgdyA9IG9yaWdpblswXTtcclxuICAgICAgICAgICAgaCA9IG9yaWdpblsxXTtcclxuICAgICAgICB9IGVsc2UgaWYgKHNpemUpIHtcclxuICAgICAgICAgICAgdyA9IHNpemUudztcclxuICAgICAgICAgICAgaCA9IHNpemUuaDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnRleHRWaWRlby5fb3JpZ2luX3cgPSB3IHx8IGVsZW1lbnQuc3R5bGUud2lkdGggfHwgZWxlbWVudC53aWR0aCB8fCAnJztcclxuICAgICAgICBjb250ZXh0VmlkZW8uX29yaWdpbl9oID0gaCB8fCBlbGVtZW50LnN0eWxlLmhlaWdodCB8fCBlbGVtZW50LmhlaWdodCB8fCAnJztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGZpbGVNYW5hZ2VyLCByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBvcGVuTW9kaWZ5OiBmdW5jdGlvbiAobm90T3Blbikge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IHRoaXMuY29udGV4dC52aWRlbztcclxuXHJcbiAgICAgICAgaWYgKGNvbnRleHRWaWRlby52aWRlb1VybEZpbGUpIGNvbnRleHRWaWRlby5fbGlua1ZhbHVlID0gY29udGV4dFZpZGVvLnByZXZpZXcudGV4dENvbnRlbnQgPSBjb250ZXh0VmlkZW8udmlkZW9VcmxGaWxlLnZhbHVlID0gKGNvbnRleHRWaWRlby5fZWxlbWVudC5zcmMgfHwgKGNvbnRleHRWaWRlby5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdzb3VyY2UnKSB8fCAnJykuc3JjIHx8ICcnKTtcclxuICAgICAgICAoY29udGV4dFZpZGVvLm1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9XCJzdW5lZGl0b3JfdmlkZW9fcmFkaW9cIl1bdmFsdWU9XCInICsgY29udGV4dFZpZGVvLl9hbGlnbiArICdcIl0nKSB8fCBjb250ZXh0VmlkZW8ubW9kYWwucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT1cInN1bmVkaXRvcl92aWRlb19yYWRpb1wiXVt2YWx1ZT1cIm5vbmVcIl0nKSkuY2hlY2tlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChjb250ZXh0VmlkZW8uX3Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX3NldE1vZGlmeUlucHV0U2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRWaWRlbywgdGhpcy5wbHVnaW5zLnZpZGVvKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHkgPSBjb250ZXh0VmlkZW8uX3ZpZGVvUmF0aW8gPSB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9nZXRTaXplWS5jYWxsKHRoaXMsIGNvbnRleHRWaWRlbyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhdGlvU2VsZWN0ZWQgPSB0aGlzLnBsdWdpbnMudmlkZW8uc2V0VmlkZW9SYXRpb1NlbGVjdC5jYWxsKHRoaXMsIHkpO1xyXG4gICAgICAgICAgICBpZiAoIXJhdGlvU2VsZWN0ZWQpIGNvbnRleHRWaWRlby5pbnB1dFkudmFsdWUgPSBjb250ZXh0VmlkZW8uX29ubHlQZXJjZW50YWdlID8gdGhpcy51dGlsLmdldE51bWJlcih5LCAyKSA6IHk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW5vdE9wZW4pIHRoaXMucGx1Z2lucy5kaWFsb2cub3Blbi5jYWxsKHRoaXMsICd2aWRlbycsIHRydWUpO1xyXG4gICAgfSxcclxuICAgIFxyXG4gICAgc2V0VmlkZW9SYXRpb1NlbGVjdDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgbGV0IHJhdGlvU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgY29uc3QgcmF0aW9PcHRpb25zID0gY29udGV4dFZpZGVvLnZpZGVvUmF0aW9PcHRpb24ub3B0aW9ucztcclxuXHJcbiAgICAgICAgaWYgKC8lJC8udGVzdCh2YWx1ZSkgfHwgY29udGV4dFZpZGVvLl9vbmx5UGVyY2VudGFnZSkgdmFsdWUgPSAodGhpcy51dGlsLmdldE51bWJlcih2YWx1ZSwgMikgLyAxMDApICsgJyc7XHJcbiAgICAgICAgZWxzZSBpZiAoIXRoaXMudXRpbC5pc051bWJlcih2YWx1ZSkgfHwgKHZhbHVlICogMSkgPj0gMSkgdmFsdWUgPSAnJztcclxuXHJcbiAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WS5wbGFjZWhvbGRlciA9ICcnO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByYXRpb09wdGlvbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHJhdGlvT3B0aW9uc1tpXS52YWx1ZSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJhdGlvU2VsZWN0ZWQgPSByYXRpb09wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WS5wbGFjZWhvbGRlciA9ICF2YWx1ZSA/ICcnIDogKHZhbHVlICogMTAwKSArICclJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHJhdGlvT3B0aW9uc1tpXS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJhdGlvU2VsZWN0ZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGZpbGVNYW5hZ2VyXHJcbiAgICAgKi9cclxuICAgIGNoZWNrRmlsZUluZm86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuY2hlY2tJbmZvLmNhbGwodGhpcywgJ3ZpZGVvJywgWydpZnJhbWUnLCAndmlkZW8nXSwgdGhpcy5mdW5jdGlvbnMub25WaWRlb1VwbG9hZCwgdGhpcy5wbHVnaW5zLnZpZGVvLl91cGRhdGVfdmlkZW9Db3Zlci5iaW5kKHRoaXMpLCB0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcclxuICAgICAqL1xyXG4gICAgcmVzZXRGaWxlSW5mbzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5yZXNldEluZm8uY2FsbCh0aGlzLCAndmlkZW8nLCB0aGlzLmZ1bmN0aW9ucy5vblZpZGVvVXBsb2FkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcclxuICAgICAqL1xyXG4gICAgYXBwbHlTaXplOiBmdW5jdGlvbiAodywgaCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IHRoaXMuY29udGV4dC52aWRlbztcclxuXHJcbiAgICAgICAgaWYgKCF3KSB3ID0gY29udGV4dFZpZGVvLmlucHV0WC52YWx1ZSB8fCB0aGlzLm9wdGlvbnMudmlkZW9XaWR0aDtcclxuICAgICAgICBpZiAoIWgpIGggPSBjb250ZXh0VmlkZW8uaW5wdXRZLnZhbHVlIHx8IHRoaXMub3B0aW9ucy52aWRlb0hlaWdodDtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLl9vbmx5UGVyY2VudGFnZSB8fCAvJSQvLnRlc3QodykgfHwgIXcpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldFBlcmNlbnRTaXplLmNhbGwodGhpcywgKHcgfHwgJzEwMCUnKSwgKGggfHwgKC8lJC8udGVzdChjb250ZXh0VmlkZW8uX3ZpZGVvUmF0aW8pID8gY29udGV4dFZpZGVvLl92aWRlb1JhdGlvIDogY29udGV4dFZpZGVvLl9kZWZhdWx0UmF0aW8pKSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKCF3IHx8IHcgPT09ICdhdXRvJykgJiYgKCFoIHx8IGggPT09ICdhdXRvJykpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldEF1dG9TaXplLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldFNpemUuY2FsbCh0aGlzLCB3LCAoaCB8fCBjb250ZXh0VmlkZW8uX3ZpZGVvUmF0aW8gfHwgY29udGV4dFZpZGVvLl9kZWZhdWx0UmF0aW8pLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHJlc2l6aW5nXHJcbiAgICAgKi9cclxuICAgIHNpemVSZXZlcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9zaXplUmV2ZXJ0LmNhbGwodGhpcywgdGhpcy5jb250ZXh0LnZpZGVvKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgc2V0U2l6ZTogZnVuY3Rpb24gKHcsIGgsIG5vdFJlc2V0UGVyY2VudGFnZSwgZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xyXG4gICAgICAgIGNvbnN0IG9ubHlXID0gL14ocnd8bHcpJC8udGVzdChkaXJlY3Rpb24pO1xyXG4gICAgICAgIGNvbnN0IG9ubHlIID0gL14odGh8YmgpJC8udGVzdChkaXJlY3Rpb24pO1xyXG5cclxuICAgICAgICBpZiAoIW9ubHlIKSB3ID0gdGhpcy51dGlsLmdldE51bWJlcih3LCAwKTtcclxuICAgICAgICBpZiAoIW9ubHlXKSBoID0gdGhpcy51dGlsLmlzTnVtYmVyKGgpID8gaCArIGNvbnRleHRWaWRlby5zaXplVW5pdCA6ICFoID8gJycgOiBoO1xyXG4gICAgICAgIHcgPSB3ID8gdyArIGNvbnRleHRWaWRlby5zaXplVW5pdCA6ICcnO1xyXG5cclxuICAgICAgICBpZiAoIW9ubHlIKSBjb250ZXh0VmlkZW8uX2VsZW1lbnQuc3R5bGUud2lkdGggPSB3O1xyXG4gICAgICAgIGlmICghb25seVcpIGNvbnRleHRWaWRlby5fY292ZXIuc3R5bGUucGFkZGluZ0JvdHRvbSA9IGNvbnRleHRWaWRlby5fY292ZXIuc3R5bGUuaGVpZ2h0ID0gaDtcclxuXHJcbiAgICAgICAgaWYgKCFvbmx5SCAmJiAhLyUkLy50ZXN0KHcpKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5fY292ZXIuc3R5bGUud2lkdGggPSB3O1xyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8uX2NvbnRhaW5lci5zdHlsZS53aWR0aCA9ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFvbmx5VyAmJiAhLyUkLy50ZXN0KGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghbm90UmVzZXRQZXJjZW50YWdlKSBjb250ZXh0VmlkZW8uX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXBlcmNlbnRhZ2UnKTtcclxuXHJcbiAgICAgICAgLy8gc2F2ZSBjdXJyZW50IHNpemVcclxuICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9zYXZlQ3VycmVudFNpemUuY2FsbCh0aGlzLCBjb250ZXh0VmlkZW8pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBzZXRBdXRvU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5zZXRQZXJjZW50U2l6ZS5jYWxsKHRoaXMsIDEwMCwgdGhpcy5jb250ZXh0LnZpZGVvLl9kZWZhdWx0UmF0aW8pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBzZXRPcmlnaW5TaXplOiBmdW5jdGlvbiAoZGF0YVNpemUpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1wZXJjZW50YWdlJyk7XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5yZXNldFRyYW5zZm9ybS5jYWxsKHRoaXMsIGNvbnRleHRWaWRlby5fZWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLmNhbmNlbFBlcmNlbnRBdHRyLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIGNvbnN0IG9yaWdpblNpemUgPSAoKGRhdGFTaXplID8gY29udGV4dFZpZGVvLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zaXplJykgOiAnJykgfHwgY29udGV4dFZpZGVvLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW4nKSB8fCAnJykuc3BsaXQoJywnKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAob3JpZ2luU2l6ZSkge1xyXG4gICAgICAgICAgICBjb25zdCB3ID0gb3JpZ2luU2l6ZVswXTtcclxuICAgICAgICAgICAgY29uc3QgaCA9IG9yaWdpblNpemVbMV07XHJcblxyXG4gICAgICAgICAgICBpZiAoY29udGV4dFZpZGVvLl9vbmx5UGVyY2VudGFnZSB8fCAoLyUkLy50ZXN0KHcpICYmICgvJSQvLnRlc3QoaCkgfHwgIS9cXGQvLnRlc3QoaCkpKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnZpZGVvLnNldFBlcmNlbnRTaXplLmNhbGwodGhpcywgdywgaCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMudmlkZW8uc2V0U2l6ZS5jYWxsKHRoaXMsIHcsIGgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzYXZlIGN1cnJlbnQgc2l6ZVxyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9zYXZlQ3VycmVudFNpemUuY2FsbCh0aGlzLCBjb250ZXh0VmlkZW8pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgcmVzaXppbmdcclxuICAgICAqL1xyXG4gICAgc2V0UGVyY2VudFNpemU6IGZ1bmN0aW9uICh3LCBoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xyXG4gICAgICAgIGggPSAhIWggJiYgIS8lJC8udGVzdChoKSAmJiAhdGhpcy51dGlsLmdldE51bWJlcihoLCAwKSA/IHRoaXMudXRpbC5pc051bWJlcihoKSA/IGggKyAnJScgOiBoIDogdGhpcy51dGlsLmlzTnVtYmVyKGgpID8gaCArIGNvbnRleHRWaWRlby5zaXplVW5pdCA6IChoIHx8IGNvbnRleHRWaWRlby5fZGVmYXVsdFJhdGlvKTtcclxuXHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9jb250YWluZXIuc3R5bGUud2lkdGggPSB0aGlzLnV0aWwuaXNOdW1iZXIodykgPyB3ICsgJyUnIDogdztcclxuICAgICAgICBjb250ZXh0VmlkZW8uX2NvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSAnJztcclxuICAgICAgICBjb250ZXh0VmlkZW8uX2NvdmVyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5fY292ZXIuc3R5bGUuaGVpZ2h0ID0gaDtcclxuICAgICAgICBjb250ZXh0VmlkZW8uX2NvdmVyLnN0eWxlLnBhZGRpbmdCb3R0b20gPSBoO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudC5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICBjb250ZXh0VmlkZW8uX2VsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudC5zdHlsZS5tYXhXaWR0aCA9ICcnO1xyXG5cclxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLl9hbGlnbiA9PT0gJ2NlbnRlcicpIHRoaXMucGx1Z2lucy52aWRlby5zZXRBbGlnbi5jYWxsKHRoaXMsIG51bGwsIG51bGwsIG51bGwsIG51bGwpO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcGVyY2VudGFnZScsIHcgKyAnLCcgKyBoKTtcclxuXHJcbiAgICAgICAgLy8gc2F2ZSBjdXJyZW50IHNpemVcclxuICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9zYXZlQ3VycmVudFNpemUuY2FsbCh0aGlzLCBjb250ZXh0VmlkZW8pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBjYW5jZWxQZXJjZW50QXR0cjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRWaWRlbyA9IHRoaXMuY29udGV4dC52aWRlbztcclxuICAgICAgICBcclxuICAgICAgICBjb250ZXh0VmlkZW8uX2NvdmVyLnN0eWxlLndpZHRoID0gJyc7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9jb3Zlci5zdHlsZS5oZWlnaHQgPSAnJztcclxuICAgICAgICBjb250ZXh0VmlkZW8uX2NvdmVyLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAnJztcclxuICAgICAgICBjb250ZXh0VmlkZW8uX2NvbnRhaW5lci5zdHlsZS53aWR0aCA9ICcnO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5fY29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICcnO1xyXG5cclxuICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MoY29udGV4dFZpZGVvLl9jb250YWluZXIsIHRoaXMuY29udGV4dC52aWRlby5fZmxvYXRDbGFzc1JlZ0V4cCk7XHJcbiAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGNvbnRleHRWaWRlby5fY29udGFpbmVyLCAnX19zZV9fZmxvYXQtJyArIGNvbnRleHRWaWRlby5fYWxpZ24pO1xyXG5cclxuICAgICAgICBpZiAoY29udGV4dFZpZGVvLl9hbGlnbiA9PT0gJ2NlbnRlcicpIHRoaXMucGx1Z2lucy52aWRlby5zZXRBbGlnbi5jYWxsKHRoaXMsIG51bGwsIG51bGwsIG51bGwsIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBzZXRBbGlnbjogZnVuY3Rpb24gKGFsaWduLCBlbGVtZW50LCBjb3ZlciwgY29udGFpbmVyKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFZpZGVvID0gdGhpcy5jb250ZXh0LnZpZGVvO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghYWxpZ24pIGFsaWduID0gY29udGV4dFZpZGVvLl9hbGlnbjtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIGVsZW1lbnQgPSBjb250ZXh0VmlkZW8uX2VsZW1lbnQ7XHJcbiAgICAgICAgaWYgKCFjb3ZlcikgY292ZXIgPSBjb250ZXh0VmlkZW8uX2NvdmVyO1xyXG4gICAgICAgIGlmICghY29udGFpbmVyKSBjb250YWluZXIgPSBjb250ZXh0VmlkZW8uX2NvbnRhaW5lcjtcclxuXHJcbiAgICAgICAgaWYgKC8lJC8udGVzdChlbGVtZW50LnN0eWxlLndpZHRoKSAmJiBhbGlnbiA9PT0gJ2NlbnRlcicpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLm1pbldpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICBjb3Zlci5zdHlsZS53aWR0aCA9IGNvbnRhaW5lci5zdHlsZS53aWR0aDtcclxuICAgICAgICAgICAgY292ZXIuc3R5bGUuaGVpZ2h0ID0gY292ZXIuc3R5bGUuaGVpZ2h0O1xyXG4gICAgICAgICAgICBjb3Zlci5zdHlsZS5wYWRkaW5nQm90dG9tID0gIS8lJC8udGVzdChjb3Zlci5zdHlsZS5oZWlnaHQpID8gY292ZXIuc3R5bGUuaGVpZ2h0IDogdGhpcy51dGlsLmdldE51bWJlcigodGhpcy51dGlsLmdldE51bWJlcihjb3Zlci5zdHlsZS5oZWlnaHQsIDIpIC8gMTAwKSAqIHRoaXMudXRpbC5nZXROdW1iZXIoY292ZXIuc3R5bGUud2lkdGgsIDIpLCAyKSArICclJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb250YWluZXIuc3R5bGUubWluV2lkdGggPSAnJztcclxuICAgICAgICAgICAgY292ZXIuc3R5bGUud2lkdGggPSB0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsID8gKGVsZW1lbnQuc3R5bGUuaGVpZ2h0IHx8IGVsZW1lbnQub2Zmc2V0SGVpZ2h0KSA6IChlbGVtZW50LnN0eWxlLndpZHRoIHx8ICcxMDAlJyk7XHJcbiAgICAgICAgICAgIGNvdmVyLnN0eWxlLnBhZGRpbmdCb3R0b20gPSBjb3Zlci5zdHlsZS5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMudXRpbC5oYXNDbGFzcyhjb250YWluZXIsICdfX3NlX19mbG9hdC0nICsgYWxpZ24pKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhjb250YWluZXIsIGNvbnRleHRWaWRlby5fZmxvYXRDbGFzc1JlZ0V4cCk7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhjb250YWluZXIsICdfX3NlX19mbG9hdC0nICsgYWxpZ24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1hbGlnbicsIGFsaWduKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgZGlhbG9nXHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0VmlkZW8gPSB0aGlzLmNvbnRleHQudmlkZW87XHJcbiAgICAgICAgaWYgKGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZSkgY29udGV4dFZpZGVvLnZpZGVvSW5wdXRGaWxlLnZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKGNvbnRleHRWaWRlby52aWRlb1VybEZpbGUpIGNvbnRleHRWaWRlby5fbGlua1ZhbHVlID0gY29udGV4dFZpZGVvLnByZXZpZXcudGV4dENvbnRlbnQgPSBjb250ZXh0VmlkZW8udmlkZW9VcmxGaWxlLnZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKGNvbnRleHRWaWRlby52aWRlb0lucHV0RmlsZSAmJiBjb250ZXh0VmlkZW8udmlkZW9VcmxGaWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby52aWRlb1VybEZpbGUucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8ucHJldmlldy5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGV4dFZpZGVvLl9vcmlnaW5fdyA9IHRoaXMub3B0aW9ucy52aWRlb1dpZHRoO1xyXG4gICAgICAgIGNvbnRleHRWaWRlby5fb3JpZ2luX2ggPSB0aGlzLm9wdGlvbnMudmlkZW9IZWlnaHQ7XHJcbiAgICAgICAgY29udGV4dFZpZGVvLm1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9XCJzdW5lZGl0b3JfdmlkZW9fcmFkaW9cIl1bdmFsdWU9XCJub25lXCJdJykuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGNvbnRleHRWaWRlby5fcmVzaXppbmcpIHtcclxuICAgICAgICAgICAgY29udGV4dFZpZGVvLmlucHV0WC52YWx1ZSA9IHRoaXMub3B0aW9ucy52aWRlb1dpZHRoID09PSBjb250ZXh0VmlkZW8uX2RlZmF1bHRTaXplWCA/ICcnIDogdGhpcy5vcHRpb25zLnZpZGVvV2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5pbnB1dFkudmFsdWUgPSB0aGlzLm9wdGlvbnMudmlkZW9IZWlnaHQgPT09IGNvbnRleHRWaWRlby5fZGVmYXVsdFNpemVZID8gJycgOiB0aGlzLm9wdGlvbnMudmlkZW9IZWlnaHQ7XHJcbiAgICAgICAgICAgIGNvbnRleHRWaWRlby5wcm9wb3J0aW9uLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb250ZXh0VmlkZW8ucHJvcG9ydGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy52aWRlby5zZXRWaWRlb1JhdGlvU2VsZWN0LmNhbGwodGhpcywgY29udGV4dFZpZGVvLl9kZWZhdWx0UmF0aW8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBkaWFsb2cgZnJvbSAnLi4vbW9kdWxlcy9kaWFsb2cnO1xyXG5pbXBvcnQgY29tcG9uZW50IGZyb20gJy4uL21vZHVsZXMvY29tcG9uZW50JztcclxuaW1wb3J0IGZpbGVNYW5hZ2VyIGZyb20gJy4uL21vZHVsZXMvZmlsZU1hbmFnZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ2F1ZGlvJyxcclxuICAgIGRpc3BsYXk6ICdkaWFsb2cnLFxyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvcmUuYWRkTW9kdWxlKFtkaWFsb2csIGNvbXBvbmVudCwgZmlsZU1hbmFnZXJdKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcclxuICAgICAgICBjb25zdCBjb250ZXh0QXVkaW8gPSBjb250ZXh0LmF1ZGlvID0ge1xyXG4gICAgICAgICAgICBfaW5mb0xpc3Q6IFtdLCAvLyBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcclxuICAgICAgICAgICAgX2luZm9JbmRleDogMCwgLy8gQE92ZXJyaWRlIGZpbGVNYW5hZ2VyXHJcbiAgICAgICAgICAgIF91cGxvYWRGaWxlTGVuZ3RoOiAwLCAvLyBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcclxuICAgICAgICAgICAgZm9jdXNFbGVtZW50OiBudWxsLCAvLyBAT3ZlcnJpZGUgZGlhbG9nIC8vIFRoaXMgZWxlbWVudCBoYXMgZm9jdXMgd2hlbiB0aGUgZGlhbG9nIGlzIG9wZW5lZC5cclxuICAgICAgICAgICAgdGFyZ2V0U2VsZWN0OiBudWxsLFxyXG4gICAgICAgICAgICBfb3JpZ2luX3c6IGNvcmUub3B0aW9ucy5hdWRpb1dpZHRoLFxyXG4gICAgICAgICAgICBfb3JpZ2luX2g6IGNvcmUub3B0aW9ucy5hdWRpb0hlaWdodCxcclxuICAgICAgICAgICAgX2xpbmtWYWx1ZTogJycsXHJcbiAgICAgICAgICAgIC8vIEByZXF1aXJlIEBPdmVycmlkZSBjb21wb25lbnRcclxuICAgICAgICAgICAgX2VsZW1lbnQ6IG51bGwsXHJcbiAgICAgICAgICAgIF9jb3ZlcjogbnVsbCxcclxuICAgICAgICAgICAgX2NvbnRhaW5lcjogbnVsbCxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogZGlhbG9nICovXHJcbiAgICAgICAgbGV0IGF1ZGlvX2RpYWxvZyA9IHRoaXMuc2V0RGlhbG9nKGNvcmUpO1xyXG4gICAgICAgIGNvbnRleHRBdWRpby5tb2RhbCA9IGF1ZGlvX2RpYWxvZztcclxuICAgICAgICBjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUgPSBhdWRpb19kaWFsb2cucXVlcnlTZWxlY3RvcignLl9zZV9hdWRpb19maWxlcycpO1xyXG4gICAgICAgIGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUgPSBhdWRpb19kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLWlucHV0LXVybCcpO1xyXG4gICAgICAgIGNvbnRleHRBdWRpby5mb2N1c0VsZW1lbnQgPSBjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUgfHwgY29udGV4dEF1ZGlvLmF1ZGlvVXJsRmlsZTtcclxuICAgICAgICBjb250ZXh0QXVkaW8ucHJldmlldyA9IGF1ZGlvX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuc2UtbGluay1wcmV2aWV3Jyk7XHJcblxyXG4gICAgICAgIC8qKiBjb250cm9sbGVyICovXHJcbiAgICAgICAgbGV0IGF1ZGlvX2NvbnRyb2xsZXIgPSB0aGlzLnNldENvbnRyb2xsZXIoY29yZSk7XHJcbiAgICAgICAgY29udGV4dEF1ZGlvLmNvbnRyb2xsZXIgPSBhdWRpb19jb250cm9sbGVyO1xyXG5cclxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgIGF1ZGlvX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCdmb3JtJykuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgdGhpcy5zdWJtaXQuYmluZChjb3JlKSk7XHJcbiAgICAgICAgaWYgKGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZSkgYXVkaW9fZGlhbG9nLnF1ZXJ5U2VsZWN0b3IoJy5zZS1kaWFsb2ctZmlsZXMtZWRnZS1idXR0b24nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX3JlbW92ZVNlbGVjdGVkRmlsZXMuYmluZChjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUsIGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUsIGNvbnRleHRBdWRpby5wcmV2aWV3KSk7XHJcbiAgICAgICAgaWYgKGNvbnRleHRBdWRpby5hdWRpb0lucHV0RmlsZSAmJiBjb250ZXh0QXVkaW8uYXVkaW9VcmxGaWxlKSBjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5fZmlsZUlucHV0Q2hhbmdlLmJpbmQoY29udGV4dEF1ZGlvKSk7XHJcbiAgICAgICAgYXVkaW9fY29udHJvbGxlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25DbGlja19jb250cm9sbGVyLmJpbmQoY29yZSkpO1xyXG4gICAgICAgIGlmIChjb250ZXh0QXVkaW8uYXVkaW9VcmxGaWxlKSBjb250ZXh0QXVkaW8uYXVkaW9VcmxGaWxlLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgdGhpcy5fb25MaW5rUHJldmlldy5iaW5kKGNvbnRleHRBdWRpby5wcmV2aWV3LCBjb250ZXh0QXVkaW8sIGNvcmUub3B0aW9ucy5saW5rUHJvdG9jb2wpKTtcclxuXHJcbiAgICAgICAgLyoqIGFwcGVuZCBodG1sICovXHJcbiAgICAgICAgY29udGV4dC5kaWFsb2cubW9kYWwuYXBwZW5kQ2hpbGQoYXVkaW9fZGlhbG9nKTtcclxuXHJcbiAgICAgICAgLyoqIGFwcGVuZCBjb250cm9sbGVyICovXHJcbiAgICAgICAgY29udGV4dC5lbGVtZW50LnJlbGF0aXZlLmFwcGVuZENoaWxkKGF1ZGlvX2NvbnRyb2xsZXIpO1xyXG5cclxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXHJcbiAgICAgICAgYXVkaW9fZGlhbG9nID0gbnVsbCwgYXVkaW9fY29udHJvbGxlciA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiBIVE1MIC0gZGlhbG9nICovXHJcbiAgICBzZXREaWFsb2c6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gY29yZS5vcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG5cclxuICAgICAgICBkaWFsb2cuY2xhc3NOYW1lID0gJ3NlLWRpYWxvZy1jb250ZW50JztcclxuICAgICAgICBkaWFsb2cuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICBsZXQgaHRtbCA9ICcnICtcclxuICAgICAgICAgICAgJzxmb3JtIG1ldGhvZD1cInBvc3RcIiBlbmN0eXBlPVwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctaGVhZGVyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImNsb3NlXCIgY2xhc3M9XCJzZS1idG4gc2UtZGlhbG9nLWNsb3NlXCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guY2xvc2UgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBsYW5nLmRpYWxvZ0JveC5jbG9zZSArICdcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5pY29ucy5jYW5jZWwgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS1tb2RhbC10aXRsZVwiPicgKyBsYW5nLmRpYWxvZ0JveC5hdWRpb0JveC50aXRsZSArICc8L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1ib2R5XCI+JztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uLmF1ZGlvRmlsZUlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm1cIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWw+JyArIGxhbmcuZGlhbG9nQm94LmF1ZGlvQm94LmZpbGUgKyAnPC9sYWJlbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvcm0tZmlsZXNcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGlucHV0IGNsYXNzPVwic2UtaW5wdXQtZm9ybSBfc2VfYXVkaW9fZmlsZXNcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cIicgKyBvcHRpb24uYXVkaW9BY2NlcHQgKyAnXCInICsgKG9wdGlvbi5hdWRpb011bHRpcGxlRmlsZSA/ICcgbXVsdGlwbGU9XCJtdWx0aXBsZVwiJyA6ICcnKSArICcvPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJmaWxlc1JlbW92ZVwiIGNsYXNzPVwic2UtYnRuIHNlLWRpYWxvZy1maWxlcy1lZGdlLWJ1dHRvbiBzZS1maWxlLXJlbW92ZVwiIHRpdGxlPVwiJyArIGxhbmcuY29udHJvbGxlci5yZW1vdmUgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBsYW5nLmNvbnRyb2xsZXIucmVtb3ZlICsgJ1wiPicgKyBjb3JlLmljb25zLmNhbmNlbCArICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uLmF1ZGlvVXJsSW5wdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICcnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD4nICsgbGFuZy5kaWFsb2dCb3guYXVkaW9Cb3gudXJsICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGlucHV0IGNsYXNzPVwic2UtaW5wdXQtZm9ybSBzZS1pbnB1dC11cmxcIiB0eXBlPVwidGV4dFwiIC8+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHByZSBjbGFzcz1cInNlLWxpbmstcHJldmlld1wiPjwvcHJlPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPC9kaXY+JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJycgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9vdGVyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwic2UtYnRuLXByaW1hcnlcIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5zdWJtaXRCdXR0b24gKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBsYW5nLmRpYWxvZ0JveC5zdWJtaXRCdXR0b24gKyAnXCI+PHNwYW4+JyArIGxhbmcuZGlhbG9nQm94LnN1Ym1pdEJ1dHRvbiArICc8L3NwYW4+PC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8L2Zvcm0+JztcclxuXHJcbiAgICAgICAgZGlhbG9nLmlubmVySFRNTCA9IGh0bWw7XHJcblxyXG4gICAgICAgIHJldHVybiBkaWFsb2c7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiBIVE1MIC0gY29udHJvbGxlciAqL1xyXG4gICAgc2V0Q29udHJvbGxlcjogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xyXG4gICAgICAgIGNvbnN0IGljb25zID0gY29yZS5pY29ucztcclxuICAgICAgICBjb25zdCBsaW5rX2J0biA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuXHJcbiAgICAgICAgbGlua19idG4uY2xhc3NOYW1lID0gJ3NlLWNvbnRyb2xsZXIgc2UtY29udHJvbGxlci1saW5rJztcclxuICAgICAgICBsaW5rX2J0bi5pbm5lckhUTUwgPSAnJyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtYXJyb3cgc2UtYXJyb3ctdXBcIj48L2Rpdj4nICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJsaW5rLWNvbnRlbnRcIj4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtYnRuLWdyb3VwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cInVwZGF0ZVwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cInNlLXRvb2x0aXBcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMuZWRpdCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIuZWRpdCArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiZGVsZXRlXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwic2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5kZWxldGUgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLnJlbW92ZSArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzwvZGl2Pic7XHJcblxyXG4gICAgICAgIHJldHVybiBsaW5rX2J0bjtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gRGlzYWJsZSB1cmwgaW5wdXQgd2hlbiB1cGxvYWRpbmcgZmlsZXNcclxuICAgIF9maWxlSW5wdXRDaGFuZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuYXVkaW9JbnB1dEZpbGUudmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hdWRpb1VybEZpbGUucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpZXcuc3R5bGUudGV4dERlY29yYXRpb24gPSAnJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvVXJsRmlsZS5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlldy5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICdsaW5lLXRocm91Z2gnO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy8gRGlzYWJsZSB1cmwgaW5wdXQgd2hlbiB1cGxvYWRpbmcgZmlsZXNcclxuICAgIF9yZW1vdmVTZWxlY3RlZEZpbGVzOiBmdW5jdGlvbiAodXJsSW5wdXQsIHByZXZpZXcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKHVybElucHV0KSB7XHJcbiAgICAgICAgICAgIHVybElucHV0LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgcHJldmlldy5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy8gY3JlYXRlIG5ldyBhdWRpbyB0YWdcclxuICAgIF9jcmVhdGVBdWRpb1RhZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IG9BdWRpbyA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdBVURJTycpO1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5hdWRpby5fc2V0VGFnQXR0cnMuY2FsbCh0aGlzLCBvQXVkaW8pO1xyXG5cclxuICAgICAgICBjb25zdCB3ID0gdGhpcy5jb250ZXh0LmF1ZGlvLl9vcmlnaW5fdztcclxuICAgICAgICBjb25zdCBoID0gdGhpcy5jb250ZXh0LmF1ZGlvLl9vcmlnaW5faDtcclxuICAgICAgICBvQXVkaW8uc2V0QXR0cmlidXRlKCdvcmlnaW4tc2l6ZScsIHcgKyAnLCcgKyBoKTtcclxuICAgICAgICBvQXVkaW8uc3R5bGUuY3NzVGV4dCA9ICh3ID8gKCd3aWR0aDonICsgdyArICc7ICcpIDogJycpICsgKGggPyAoJ2hlaWdodDonICsgaCArICc7JykgOiAnJyk7XHJcblxyXG4gICAgICAgIHJldHVybiBvQXVkaW87XHJcbiAgICB9LFxyXG5cclxuICAgIF9zZXRUYWdBdHRyczogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY29udHJvbHMnLCB0cnVlKTtcclxuXHJcbiAgICAgICAgY29uc3QgYXR0cnMgPSB0aGlzLm9wdGlvbnMuYXVkaW9UYWdBdHRycztcclxuICAgICAgICBpZiAoIWF0dHJzKSByZXR1cm47XHJcblxyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBhdHRycykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudXRpbC5oYXNPd24oYXR0cnMsIGtleSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIGF0dHJzW2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX29uTGlua1ByZXZpZXc6IGZ1bmN0aW9uIChjb250ZXh0LCBwcm90b2NvbCwgZSkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xyXG4gICAgICAgIGNvbnRleHQuX2xpbmtWYWx1ZSA9IHRoaXMudGV4dENvbnRlbnQgPSAhdmFsdWUgPyAnJyA6IChwcm90b2NvbCAmJiB2YWx1ZS5pbmRleE9mKCc6Ly8nKSA9PT0gLTEgJiYgdmFsdWUuaW5kZXhPZignIycpICE9PSAwKSA/IHByb3RvY29sICsgdmFsdWUgOiB2YWx1ZS5pbmRleE9mKCc6Ly8nKSA9PT0gLTEgPyAnLycgKyB2YWx1ZSA6IHZhbHVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZU1hbmFnZXJcclxuICAgICAqL1xyXG4gICAgZmlsZVRhZ3M6IFsnYXVkaW8nXSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBjb3JlLCBmaWxlTWFuYWdlciwgcmVzaXppbmdcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBjYWxsZWQgZnJvbSBjb3JlLnNlbGVjdENvbXBvbmVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUYXJnZXQgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBzZWxlY3Q6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLm9uTW9kaWZ5TW9kZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBmaWxlTWFuYWdlciwgcmVzaXppbmcgXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQgfHwgdGhpcy5jb250ZXh0LmF1ZGlvLl9lbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsIHRoaXMudXRpbC5pc0NvbXBvbmVudCkgfHwgZWxlbWVudDtcclxuICAgICAgICBjb25zdCBkYXRhSW5kZXggPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpICogMTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uQXVkaW9EZWxldGVCZWZvcmUgPT09ICdmdW5jdGlvbicgJiYgKHRoaXMuZnVuY3Rpb25zLm9uQXVkaW9EZWxldGVCZWZvcmUoZWxlbWVudCwgY29udGFpbmVyLCBkYXRhSW5kZXgsIHRoaXMpID09PSBmYWxzZSkpIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBmb2N1c0VsID0gKGNvbnRhaW5lci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIHx8IGNvbnRhaW5lci5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgIGNvbnN0IGVtcHR5RGl2ID0gY29udGFpbmVyLnBhcmVudE5vZGU7XHJcbiAgICAgICAgdGhpcy51dGlsLnJlbW92ZUl0ZW0oY29udGFpbmVyKTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8uaW5pdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuXHJcbiAgICAgICAgaWYgKGVtcHR5RGl2ICE9PSB0aGlzLmNvbnRleHQuZWxlbWVudC53eXNpd3lnKSB0aGlzLnV0aWwucmVtb3ZlSXRlbUFsbFBhcmVudHMoZW1wdHlEaXYsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwOyB9LCBudWxsKTtcclxuXHJcbiAgICAgICAgLy8gZm9jdXNcclxuICAgICAgICB0aGlzLmZvY3VzRWRnZShmb2N1c0VsKTtcclxuXHJcbiAgICAgICAgLy8gZmlsZU1hbmFnZXIgZXZlbnRcclxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuZGVsZXRlSW5mby5jYWxsKHRoaXMsICdhdWRpbycsIGRhdGFJbmRleCwgdGhpcy5mdW5jdGlvbnMub25BdWRpb1VwbG9hZCk7XHJcblxyXG4gICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGZpbGVNYW5hZ2VyXHJcbiAgICAgKi9cclxuICAgIGNoZWNrRmlsZUluZm86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuY2hlY2tJbmZvLmNhbGwodGhpcywgJ2F1ZGlvJywgWydhdWRpbyddLCB0aGlzLmZ1bmN0aW9ucy5vbkF1ZGlvVXBsb2FkLCB0aGlzLnBsdWdpbnMuYXVkaW8udXBkYXRlQ292ZXIuYmluZCh0aGlzKSwgZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBmaWxlTWFuYWdlclxyXG4gICAgICovXHJcbiAgICByZXNldEZpbGVJbmZvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLnJlc2V0SW5mby5jYWxsKHRoaXMsICdhdWRpbycsIHRoaXMuZnVuY3Rpb25zLm9uQXVkaW9VcGxvYWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZGlhbG9nXHJcbiAgICAgKi9cclxuICAgIG9uOiBmdW5jdGlvbiAodXBkYXRlKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dEF1ZGlvID0gdGhpcy5jb250ZXh0LmF1ZGlvO1xyXG5cclxuICAgICAgICBpZiAoIXVwZGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8uaW5pdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlICYmIHRoaXMub3B0aW9ucy5hdWRpb011bHRpcGxlRmlsZSkgY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlLnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnbXVsdGlwbGUnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRBdWRpby5fZWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29udGV4dEF1ZGlvLl9saW5rVmFsdWUgPSBjb250ZXh0QXVkaW8ucHJldmlldy50ZXh0Q29udGVudCA9IGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUudmFsdWUgPSBjb250ZXh0QXVkaW8uX2VsZW1lbnQuc3JjO1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlICYmIHRoaXMub3B0aW9ucy5hdWRpb011bHRpcGxlRmlsZSkgY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlLnJlbW92ZUF0dHJpYnV0ZSgnbXVsdGlwbGUnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlICYmIHRoaXMub3B0aW9ucy5hdWRpb011bHRpcGxlRmlsZSkgY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlLnJlbW92ZUF0dHJpYnV0ZSgnbXVsdGlwbGUnKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBkaWFsb2dcclxuICAgICAqL1xyXG4gICAgb3BlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cub3Blbi5jYWxsKHRoaXMsICdhdWRpbycsICdhdWRpbycgPT09IHRoaXMuY3VycmVudENvbnRyb2xsZXJOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgc3VibWl0OiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRBdWRpbyA9IHRoaXMuY29udGV4dC5hdWRpbztcclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUgJiYgY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlLmZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hdWRpby5zdWJtaXRBY3Rpb24uY2FsbCh0aGlzLCBjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUuZmlsZXMpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUgJiYgY29udGV4dEF1ZGlvLl9saW5rVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93TG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLnNldHVwVXJsLmNhbGwodGhpcywgY29udGV4dEF1ZGlvLl9saW5rVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuYXVkaW8uc3VibWl0LmZhaWxdIGNhdXNlIDogXCInICsgZXJyb3IubWVzc2FnZSArICdcIicpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cuY2xvc2UuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgc3VibWl0QWN0aW9uOiBmdW5jdGlvbiAoZmlsZUxpc3QpIHtcclxuICAgICAgICBpZiAoZmlsZUxpc3QubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBmaWxlU2l6ZSA9IDA7XHJcbiAgICAgICAgbGV0IGZpbGVzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZpbGVMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICgvYXVkaW8vaS50ZXN0KGZpbGVMaXN0W2ldLnR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGVMaXN0W2ldKTtcclxuICAgICAgICAgICAgICAgIGZpbGVTaXplICs9IGZpbGVMaXN0W2ldLnNpemU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGxpbWl0U2l6ZSA9IHRoaXMub3B0aW9ucy5hdWRpb1VwbG9hZFNpemVMaW1pdDtcclxuICAgICAgICBpZiAobGltaXRTaXplID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgaW5mb1NpemUgPSAwO1xyXG4gICAgICAgICAgICBjb25zdCBhdWRpb3NJbmZvID0gdGhpcy5jb250ZXh0LmF1ZGlvLl9pbmZvTGlzdDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGF1ZGlvc0luZm8ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGluZm9TaXplICs9IGF1ZGlvc0luZm9baV0uc2l6ZSAqIDE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICgoZmlsZVNpemUgKyBpbmZvU2l6ZSkgPiBsaW1pdFNpemUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSAnW1NVTkVESVRPUi5hdWRpb1VwbG9hZC5mYWlsXSBTaXplIG9mIHVwbG9hZGFibGUgdG90YWwgYXVkaW9zOiAnICsgKGxpbWl0U2l6ZS8xMDAwKSArICdLQic7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZnVuY3Rpb25zLm9uQXVkaW9VcGxvYWRFcnJvciAhPT0gJ2Z1bmN0aW9uJyB8fCB0aGlzLmZ1bmN0aW9ucy5vbkF1ZGlvVXBsb2FkRXJyb3IoZXJyLCB7ICdsaW1pdFNpemUnOiBsaW1pdFNpemUsICdjdXJyZW50U2l6ZSc6IGluZm9TaXplLCAndXBsb2FkU2l6ZSc6IGZpbGVTaXplIH0sIHRoaXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnMubm90aWNlT3BlbihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0QXVkaW8gPSB0aGlzLmNvbnRleHQuYXVkaW87XHJcbiAgICAgICAgY29udGV4dEF1ZGlvLl91cGxvYWRGaWxlTGVuZ3RoID0gZmlsZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICBjb25zdCBpbmZvID0ge1xyXG4gICAgICAgICAgICBpc1VwZGF0ZTogdGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCxcclxuICAgICAgICAgICAgZWxlbWVudDogY29udGV4dEF1ZGlvLl9lbGVtZW50XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZ1bmN0aW9ucy5vbkF1ZGlvVXBsb2FkQmVmb3JlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZnVuY3Rpb25zLm9uQXVkaW9VcGxvYWRCZWZvcmUoZmlsZXMsIGluZm8sIHRoaXMsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiB0aGlzLl93LkFycmF5LmlzQXJyYXkoZGF0YS5yZXN1bHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLnJlZ2lzdGVyLmNhbGwodGhpcywgaW5mbywgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hdWRpby51cGxvYWQuY2FsbCh0aGlzLCBpbmZvLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0Lmxlbmd0aCA+IDApIGZpbGVzID0gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLnVwbG9hZC5jYWxsKHRoaXMsIGluZm8sIGZpbGVzKTtcclxuICAgIH0sXHJcblxyXG4gICAgZXJyb3I6IGZ1bmN0aW9uIChtZXNzYWdlLCByZXNwb25zZSkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZ1bmN0aW9ucy5vbkF1ZGlvVXBsb2FkRXJyb3IgIT09ICdmdW5jdGlvbicgfHwgdGhpcy5mdW5jdGlvbnMub25BdWRpb1VwbG9hZEVycm9yKG1lc3NhZ2UsIHJlc3BvbnNlLCB0aGlzKSkge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmN0aW9ucy5ub3RpY2VPcGVuKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5wbHVnaW4uYXVkaW8uZXhjZXB0aW9uXSByZXNwb25zZTogJyArIG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgdXBsb2FkOiBmdW5jdGlvbiAoaW5mbywgZmlsZXMpIHtcclxuICAgICAgICBpZiAoIWZpbGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBmaWxlcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLmVycm9yLmNhbGwodGhpcywgZmlsZXMsIG51bGwpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhdWRpb1VwbG9hZFVybCA9IHRoaXMub3B0aW9ucy5hdWRpb1VwbG9hZFVybDtcclxuICAgICAgICBjb25zdCBmaWxlc0xlbiA9IHRoaXMuY29udGV4dC5kaWFsb2cudXBkYXRlTW9kYWwgPyAxIDogZmlsZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyBjcmVhdGUgZm9ybURhdGFcclxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXNMZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUtJyArIGksIGZpbGVzW2ldKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNlcnZlciB1cGxvYWRcclxuICAgICAgICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIudXBsb2FkLmNhbGwodGhpcywgYXVkaW9VcGxvYWRVcmwsIHRoaXMub3B0aW9ucy5hdWRpb1VwbG9hZEhlYWRlciwgZm9ybURhdGEsIHRoaXMucGx1Z2lucy5hdWRpby5jYWxsQmFja191cGxvYWQuYmluZCh0aGlzLCBpbmZvKSwgdGhpcy5mdW5jdGlvbnMub25BdWRpb1VwbG9hZEVycm9yKTtcclxuICAgIH0sXHJcblxyXG4gICAgY2FsbEJhY2tfdXBsb2FkOiBmdW5jdGlvbiAoaW5mbywgeG1sSHR0cCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mdW5jdGlvbnMuYXVkaW9VcGxvYWRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zLmF1ZGlvVXBsb2FkSGFuZGxlcih4bWxIdHRwLCBpbmZvLCB0aGlzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoeG1sSHR0cC5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuYXVkaW8uZXJyb3IuY2FsbCh0aGlzLCByZXNwb25zZS5lcnJvck1lc3NhZ2UsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hdWRpby5yZWdpc3Rlci5jYWxsKHRoaXMsIGluZm8sIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVnaXN0ZXI6IGZ1bmN0aW9uIChpbmZvLCByZXNwb25zZSkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVMaXN0ID0gcmVzcG9uc2UucmVzdWx0O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZmlsZUxpc3QubGVuZ3RoLCBmaWxlLCBvQXVkaW87IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaW5mby5pc1VwZGF0ZSkgb0F1ZGlvID0gaW5mby5lbGVtZW50O1xyXG4gICAgICAgICAgICBlbHNlIG9BdWRpbyA9IHRoaXMucGx1Z2lucy5hdWRpby5fY3JlYXRlQXVkaW9UYWcuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIGZpbGUgPSB7IG5hbWU6IGZpbGVMaXN0W2ldLm5hbWUsIHNpemU6IGZpbGVMaXN0W2ldLnNpemUgfTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLmNyZWF0ZV9hdWRpby5jYWxsKHRoaXMsIG9BdWRpbywgZmlsZUxpc3RbaV0udXJsLCBmaWxlLCBpbmZvLmlzVXBkYXRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2VMb2FkaW5nKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldHVwVXJsOiBmdW5jdGlvbiAoc3JjKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHNyYy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLmNyZWF0ZV9hdWRpby5jYWxsKHRoaXMsIHRoaXMucGx1Z2lucy5hdWRpby5fY3JlYXRlQXVkaW9UYWcuY2FsbCh0aGlzKSwgc3JjLCBudWxsLCB0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5hdWRpby5hdWRpby5mYWlsXSBjYXVzZSA6IFwiJyArIGVycm9yLm1lc3NhZ2UgKyAnXCInKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY3JlYXRlX2F1ZGlvOiBmdW5jdGlvbiAoZWxlbWVudCwgc3JjLCBmaWxlLCBpc1VwZGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRBdWRpbyA9IHRoaXMuY29udGV4dC5hdWRpbztcclxuICAgICAgICBcclxuICAgICAgICAvLyBjcmVhdGUgbmV3IHRhZ1xyXG4gICAgICAgIGlmICghaXNVcGRhdGUpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5zcmMgPSBzcmM7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdmVyID0gdGhpcy5wbHVnaW5zLmNvbXBvbmVudC5zZXRfY292ZXIuY2FsbCh0aGlzLCBlbGVtZW50KTtcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5wbHVnaW5zLmNvbXBvbmVudC5zZXRfY29udGFpbmVyLmNhbGwodGhpcywgY292ZXIsICcnKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluc2VydENvbXBvbmVudChjb250YWluZXIsIGZhbHNlLCB0cnVlLCAhdGhpcy5vcHRpb25zLm1lZGlhQXV0b1NlbGVjdCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5tZWRpYUF1dG9TZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmFwcGVuZEZvcm1hdFRhZyhjb250YWluZXIsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUpIHRoaXMuc2V0UmFuZ2UobGluZSwgMCwgbGluZSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IC8vIHVwZGF0ZVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dEF1ZGlvLl9lbGVtZW50KSBlbGVtZW50ID0gY29udGV4dEF1ZGlvLl9lbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LnNyYyAhPT0gc3JjKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNyYyA9IHNyYztcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGVsZW1lbnQsICdhdWRpbycpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQoZWxlbWVudCwgJ2F1ZGlvJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5zZXRJbmZvLmNhbGwodGhpcywgJ2F1ZGlvJywgZWxlbWVudCwgdGhpcy5mdW5jdGlvbnMub25BdWRpb1VwbG9hZCwgZmlsZSwgZmFsc2UpO1xyXG4gICAgICAgIGlmIChpc1VwZGF0ZSkgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVDb3ZlcjogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0QXVkaW8gPSB0aGlzLmNvbnRleHQuYXVkaW87XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLl9zZXRUYWdBdHRycy5jYWxsKHRoaXMsIGVsZW1lbnQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRQYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgICAgICAgbGV0IGV4aXN0RWxlbWVudCA9ICh0aGlzLnV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQoZWxlbWVudFBhcmVudCkgfHwgdGhpcy51dGlsLmlzV3lzaXd5Z0RpdihlbGVtZW50UGFyZW50KSkgPyBlbGVtZW50IDogZWxlbWVudFBhcmVudCB8fCBlbGVtZW50O1xyXG5cclxuICAgICAgICAvLyBjbG9uZSBlbGVtZW50XHJcbiAgICAgICAgY29uc3QgcHJldkVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIGNvbnRleHRBdWRpby5fZWxlbWVudCA9IGVsZW1lbnQgPSBlbGVtZW50LmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgY29uc3QgY292ZXIgPSB0aGlzLnBsdWdpbnMuY29tcG9uZW50LnNldF9jb3Zlci5jYWxsKHRoaXMsIGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucGx1Z2lucy5jb21wb25lbnQuc2V0X2NvbnRhaW5lci5jYWxsKHRoaXMsIGNvdmVyLCAnc2UtYXVkaW8tY29udGFpbmVyJyk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChwcmV2RWxlbWVudCwgdGhpcy51dGlsLmlzTm90Q2hlY2tpbmdOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgcHJldkVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY29udGFpbmVyLCBwcmV2RWxlbWVudCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51dGlsLmlzTGlzdENlbGwoZXhpc3RFbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVmZXIgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChwcmV2RWxlbWVudCwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQucGFyZW50Tm9kZSA9PT0gZXhpc3RFbGVtZW50OyB9KTtcclxuICAgICAgICAgICAgICAgIGV4aXN0RWxlbWVudC5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCByZWZlcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShwcmV2RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlRW1wdHlOb2RlKHJlZmVyLCBudWxsLCB0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnV0aWwuaXNGb3JtYXRFbGVtZW50KGV4aXN0RWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlZmVyID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQocHJldkVsZW1lbnQsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LnBhcmVudE5vZGUgPT09IGV4aXN0RWxlbWVudDsgfSk7XHJcbiAgICAgICAgICAgICAgICBleGlzdEVsZW1lbnQgPSB0aGlzLnV0aWwuc3BsaXRFbGVtZW50KGV4aXN0RWxlbWVudCwgcmVmZXIpO1xyXG4gICAgICAgICAgICAgICAgZXhpc3RFbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNvbnRhaW5lciwgZXhpc3RFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVJdGVtKHByZXZFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVFbXB0eU5vZGUoZXhpc3RFbGVtZW50LCBudWxsLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChleGlzdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSBleGlzdEVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy51dGlsLmh0bWxSZW1vdmVXaGl0ZVNwYWNlKGV4aXN0RWxlbWVudC5pbm5lckhUTUwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZXhpc3RFbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGNvbnRhaW5lciwgZXhpc3RFbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW1NVTkVESVRPUi5hdWRpby5lcnJvcl0gTWF5YmUgdGhlIGF1ZGlvIHRhZyBpcyBuZXN0ZWQuJywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLnNldEluZm8uY2FsbCh0aGlzLCAnYXVkaW8nLCBlbGVtZW50LCB0aGlzLmZ1bmN0aW9ucy5vbkF1ZGlvVXBsb2FkLCBudWxsLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLmluaXQuY2FsbCh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGZpbGVNYW5hZ2VyLCByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBvbk1vZGlmeU1vZGU6IGZ1bmN0aW9uIChzZWxlY3Rpb25UYWcpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0QXVkaW8gPSB0aGlzLmNvbnRleHQuYXVkaW87XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5zZXRDb250cm9sbGVyUG9zaXRpb24oY29udGV4dEF1ZGlvLmNvbnRyb2xsZXIsIHNlbGVjdGlvblRhZywgJ2JvdHRvbScsIHtsZWZ0OiAwLCB0b3A6IDB9KTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT24oY29udGV4dEF1ZGlvLmNvbnRyb2xsZXIsIHNlbGVjdGlvblRhZywgdGhpcy5wbHVnaW5zLmF1ZGlvLm9uQ29udHJvbGxlck9mZi5iaW5kKHRoaXMsIHNlbGVjdGlvblRhZyksICdhdWRpbycpO1xyXG5cclxuICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3Moc2VsZWN0aW9uVGFnLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgY29udGV4dEF1ZGlvLl9lbGVtZW50ID0gc2VsZWN0aW9uVGFnO1xyXG4gICAgICAgIGNvbnRleHRBdWRpby5fY292ZXIgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChzZWxlY3Rpb25UYWcsICdGSUdVUkUnKTtcclxuICAgICAgICBjb250ZXh0QXVkaW8uX2NvbnRhaW5lciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KHNlbGVjdGlvblRhZywgdGhpcy51dGlsLmlzQ29tcG9uZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGZpbGVNYW5hZ2VyLCByZXNpemluZ1xyXG4gICAgICovXHJcbiAgICBvcGVuTW9kaWZ5OiBmdW5jdGlvbiAobm90T3Blbikge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQuYXVkaW8uYXVkaW9VcmxGaWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRBdWRpbyA9IHRoaXMuY29udGV4dC5hdWRpbztcclxuICAgICAgICAgICAgY29udGV4dEF1ZGlvLl9saW5rVmFsdWUgPSBjb250ZXh0QXVkaW8ucHJldmlldy50ZXh0Q29udGVudCA9IGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUudmFsdWUgPSBjb250ZXh0QXVkaW8uX2VsZW1lbnQuc3JjO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW5vdE9wZW4pIHRoaXMucGx1Z2lucy5kaWFsb2cub3Blbi5jYWxsKHRoaXMsICdhdWRpbycsIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBvbkNsaWNrX2NvbnRyb2xsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgaWYgKC91cGRhdGUvLnRlc3QoY29tbWFuZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmF1ZGlvLm9wZW5Nb2RpZnkuY2FsbCh0aGlzLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgeyAvKiogZGVsZXRlICovXHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5hdWRpby5kZXN0cm95LmNhbGwodGhpcywgdGhpcy5jb250ZXh0LmF1ZGlvLl9lbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuICAgIH0sXHJcblxyXG4gICAgb25Db250cm9sbGVyT2ZmOiBmdW5jdGlvbiAoc2VsZWN0aW9uVGFnKSB7XHJcbiAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHNlbGVjdGlvblRhZywgJ2FjdGl2ZScpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5hdWRpby5jb250cm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBkaWFsb2dcclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQuZGlhbG9nLnVwZGF0ZU1vZGFsKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY29udGV4dEF1ZGlvID0gdGhpcy5jb250ZXh0LmF1ZGlvO1xyXG5cclxuICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlKSBjb250ZXh0QXVkaW8uYXVkaW9JbnB1dEZpbGUudmFsdWUgPSAnJztcclxuICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvVXJsRmlsZSkgY29udGV4dEF1ZGlvLl9saW5rVmFsdWUgPSBjb250ZXh0QXVkaW8ucHJldmlldy50ZXh0Q29udGVudCA9IGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUudmFsdWUgPSAnJztcclxuICAgICAgICBpZiAoY29udGV4dEF1ZGlvLmF1ZGlvSW5wdXRGaWxlICYmIGNvbnRleHRBdWRpby5hdWRpb1VybEZpbGUpIHtcclxuICAgICAgICAgICAgY29udGV4dEF1ZGlvLmF1ZGlvVXJsRmlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgIGNvbnRleHRBdWRpby5wcmV2aWV3LnN0eWxlLnRleHREZWNvcmF0aW9uID0gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250ZXh0QXVkaW8uX2VsZW1lbnQgPSBudWxsO1xyXG4gICAgfVxyXG59OyIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBkaWFsb2cgZnJvbSAnLi4vbW9kdWxlcy9kaWFsb2cnO1xyXG5cclxuY29uc3QgS0FURVhfV0VCU0lURSA9IFwiaHR0cHM6Ly9rYXRleC5vcmcvZG9jcy9zdXBwb3J0ZWQuaHRtbFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ21hdGgnLFxyXG4gICAgZGlzcGxheTogJ2RpYWxvZycsXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29yZS5hZGRNb2R1bGUoW2RpYWxvZ10pO1xyXG5cclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnRleHQubWF0aCA9IHtcclxuICAgICAgICAgICAgZm9jdXNFbGVtZW50OiBudWxsLCAvLyBAT3ZlcnJpZGUgZGlhbG9nIC8vIFRoaXMgZWxlbWVudCBoYXMgZm9jdXMgd2hlbiB0aGUgZGlhbG9nIGlzIG9wZW5lZC5cclxuICAgICAgICAgICAgcHJldmlld0VsZW1lbnQ6IG51bGwsXHJcbiAgICAgICAgICAgIGZvbnRTaXplRWxlbWVudDogbnVsbCxcclxuICAgICAgICAgICAgZGVmYXVsdEZvbnRTaXplOiAnJyxcclxuICAgICAgICAgICAgX21hdGhFeHA6IG51bGxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogbWF0aCBkaWFsb2cgKi9cclxuICAgICAgICBsZXQgbWF0aF9kaWFsb2cgPSB0aGlzLnNldERpYWxvZyhjb3JlKTtcclxuICAgICAgICBjb250ZXh0Lm1hdGgubW9kYWwgPSBtYXRoX2RpYWxvZztcclxuICAgICAgICBjb250ZXh0Lm1hdGguZm9jdXNFbGVtZW50ID0gbWF0aF9kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLW1hdGgtZXhwJyk7XHJcbiAgICAgICAgY29udGV4dC5tYXRoLnByZXZpZXdFbGVtZW50ID0gbWF0aF9kaWFsb2cucXVlcnlTZWxlY3RvcignLnNlLW1hdGgtcHJldmlldycpO1xyXG4gICAgICAgIGNvbnRleHQubWF0aC5mb250U2l6ZUVsZW1lbnQgPSBtYXRoX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCcuc2UtbWF0aC1zaXplJyk7XHJcbiAgICAgICAgY29udGV4dC5tYXRoLmZvY3VzRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29yZS5mdW5jdGlvbnMub25QYXN0ZU1hdGggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGNvcmUuZnVuY3Rpb25zLm9uUGFzdGVNYXRoKGUsIGNvcmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgZmFsc2UpO1xyXG4gICAgICAgIGNvbnRleHQubWF0aC5mb2N1c0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihjb3JlLnV0aWwuaXNJRSA/ICd0ZXh0aW5wdXQnIDogJ2lucHV0JywgdGhpcy5fcmVuZGVyTWF0aEV4cC5iaW5kKGNvcmUsIGNvbnRleHQubWF0aCksIGZhbHNlKTtcclxuICAgICAgICBjb250ZXh0Lm1hdGguZm9udFNpemVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uIChlKSB7IHRoaXMuZm9udFNpemUgPSBlLnRhcmdldC52YWx1ZTsgfS5iaW5kKGNvbnRleHQubWF0aC5wcmV2aWV3RWxlbWVudC5zdHlsZSksIGZhbHNlKTtcclxuXHJcbiAgICAgICAgLyoqIG1hdGggY29udHJvbGxlciAqL1xyXG4gICAgICAgIGxldCBtYXRoX2NvbnRyb2xsZXIgPSB0aGlzLnNldENvbnRyb2xsZXJfTWF0aEJ1dHRvbihjb3JlKTtcclxuICAgICAgICBjb250ZXh0Lm1hdGgubWF0aENvbnRyb2xsZXIgPSBtYXRoX2NvbnRyb2xsZXI7XHJcbiAgICAgICAgY29udGV4dC5tYXRoLl9tYXRoRXhwID0gbnVsbDtcclxuXHJcbiAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICBtYXRoX2RpYWxvZy5xdWVyeVNlbGVjdG9yKCdmb3JtJykuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgdGhpcy5zdWJtaXQuYmluZChjb3JlKSwgZmFsc2UpO1xyXG4gICAgICAgIG1hdGhfY29udHJvbGxlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25DbGlja19tYXRoQ29udHJvbGxlci5iaW5kKGNvcmUpKTtcclxuICAgICAgICBjb250ZXh0Lm1hdGgucHJldmlld0VsZW1lbnQuc3R5bGUuZm9udFNpemUgPSBjb250ZXh0Lm1hdGguZGVmYXVsdEZvbnRTaXplO1xyXG5cclxuICAgICAgICAvKiogYXBwZW5kIGh0bWwgKi9cclxuICAgICAgICBjb250ZXh0LmRpYWxvZy5tb2RhbC5hcHBlbmRDaGlsZChtYXRoX2RpYWxvZyk7XHJcbiAgICAgICAgY29udGV4dC5lbGVtZW50LnJlbGF0aXZlLmFwcGVuZENoaWxkKG1hdGhfY29udHJvbGxlcik7XHJcblxyXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICBtYXRoX2RpYWxvZyA9IG51bGwsIG1hdGhfY29udHJvbGxlciA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiBkaWFsb2cgKi9cclxuICAgIHNldERpYWxvZzogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICBjb25zdCBmb250U2l6ZSA9IGNvcmUub3B0aW9ucy5tYXRoRm9udFNpemU7XHJcbiAgICAgICAgbGV0IGRlZmF1bHRGb250U2l6ZSA9IGZvbnRTaXplWzBdLnZhbHVlO1xyXG5cclxuICAgICAgICBkaWFsb2cuY2xhc3NOYW1lID0gJ3NlLWRpYWxvZy1jb250ZW50JztcclxuICAgICAgICBkaWFsb2cuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICBsZXQgaHRtbCA9ICcnICtcclxuICAgICAgICAnPGZvcm0+JyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWhlYWRlclwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImNsb3NlXCIgY2xhc3M9XCJzZS1idG4gc2UtZGlhbG9nLWNsb3NlXCIgdGl0bGU9XCInICsgbGFuZy5kaWFsb2dCb3guY2xvc2UgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBsYW5nLmRpYWxvZ0JveC5jbG9zZSArICdcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLmljb25zLmNhbmNlbCArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS1tb2RhbC10aXRsZVwiPicgKyBsYW5nLmRpYWxvZ0JveC5tYXRoQm94LnRpdGxlICsgJzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1ib2R5XCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWRpYWxvZy1mb3JtXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxsYWJlbD4nICsgbGFuZy5kaWFsb2dCb3gubWF0aEJveC5pbnB1dExhYmVsICsgJyAoPGEgaHJlZj1cIicgKyBLQVRFWF9XRUJTSVRFICsgJ1wiIHRhcmdldD1cIl9ibGFua1wiPkthVGVYPC9hPik8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8dGV4dGFyZWEgY2xhc3M9XCJzZS1pbnB1dC1mb3JtIHNlLW1hdGgtZXhwXCIgdHlwZT1cInRleHRcIj48L3RleHRhcmVhPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8bGFiZWw+JyArIGxhbmcuZGlhbG9nQm94Lm1hdGhCb3guZm9udFNpemVMYWJlbCArICc8L2xhYmVsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8c2VsZWN0IGNsYXNzPVwic2UtaW5wdXQtc2VsZWN0IHNlLW1hdGgtc2l6ZVwiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZvbnRTaXplLmxlbmd0aCwgZjsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBmb250U2l6ZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYuZGVmYXVsdCkgZGVmYXVsdEZvbnRTaXplID0gZi52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBmLnZhbHVlICsgJ1wiJyArIChmLmRlZmF1bHQgPyAnIHNlbGVjdGVkJyA6ICcnKSArICc+JyArIGYudGV4dCArICc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzwvc2VsZWN0PicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1kaWFsb2ctZm9ybVwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8bGFiZWw+JyArIGxhbmcuZGlhbG9nQm94Lm1hdGhCb3gucHJldmlld0xhYmVsICsgJzwvbGFiZWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxwIGNsYXNzPVwic2UtbWF0aC1wcmV2aWV3XCI+PC9wPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtZGlhbG9nLWZvb3RlclwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwic2UtYnRuLXByaW1hcnlcIiB0aXRsZT1cIicgKyBsYW5nLmRpYWxvZ0JveC5zdWJtaXRCdXR0b24gKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBsYW5nLmRpYWxvZ0JveC5zdWJtaXRCdXR0b24gKyAnXCI+PHNwYW4+JyArIGxhbmcuZGlhbG9nQm94LnN1Ym1pdEJ1dHRvbiArICc8L3NwYW4+PC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAnPC9mb3JtPic7XHJcblxyXG4gICAgICAgIGNvcmUuY29udGV4dC5tYXRoLmRlZmF1bHRGb250U2l6ZSA9IGRlZmF1bHRGb250U2l6ZTtcclxuICAgICAgICBkaWFsb2cuaW5uZXJIVE1MID0gaHRtbDtcclxuICAgICAgICByZXR1cm4gZGlhbG9nO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiogbW9kaWZ5IGNvbnRyb2xsZXIgYnV0dG9uICovXHJcbiAgICBzZXRDb250cm9sbGVyX01hdGhCdXR0b246IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcclxuICAgICAgICBjb25zdCBtYXRoX2J0biA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuXHJcbiAgICAgICAgbWF0aF9idG4uY2xhc3NOYW1lID0gJ3NlLWNvbnRyb2xsZXIgc2UtY29udHJvbGxlci1saW5rJztcclxuICAgICAgICBtYXRoX2J0bi5pbm5lckhUTUwgPSAnJyArXHJcbiAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1hcnJvdyBzZS1hcnJvdy11cFwiPjwvZGl2PicgK1xyXG4gICAgICAgICc8ZGl2IGNsYXNzPVwibGluay1jb250ZW50XCI+JyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtYnRuLWdyb3VwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwidXBkYXRlXCIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXBcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLmljb25zLmVkaXQgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIuZWRpdCArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImRlbGV0ZVwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5pY29ucy5kZWxldGUgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIucmVtb3ZlICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgJyc7XHJcblxyXG4gICAgICAgIHJldHVybiBtYXRoX2J0bjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAUmVxdWlyZWQgQE92ZXJyaWRlIGRpYWxvZ1xyXG4gICAgICovXHJcbiAgICBvcGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLmRpYWxvZy5vcGVuLmNhbGwodGhpcywgJ21hdGgnLCAnbWF0aCcgPT09IHRoaXMuY3VycmVudENvbnRyb2xsZXJOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgY29yZSAtIG1hbmFnZWRUYWdzSW5mb1xyXG4gICAgICovXHJcbiAgICBtYW5hZ2VkVGFnczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2thdGV4JyxcclxuICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1leHAnKSB8fCAhdGhpcy5vcHRpb25zLmthdGV4KSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb20gPSB0aGlzLl9kLmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHRoaXMucGx1Z2lucy5tYXRoLl9yZW5kZXJlci5jYWxsKHRoaXMsIHRoaXMudXRpbC5IVE1MRGVjb2RlcihlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1leHAnKSkpKTtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gZG9tLnF1ZXJ5U2VsZWN0b3IoJy5rYXRleCcpLmlubmVySFRNTDtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBfcmVuZGVyZXI6IGZ1bmN0aW9uIChleHApIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHRoaXMuY29udGV4dC5tYXRoLmZvY3VzRWxlbWVudCwgJ3NlLWVycm9yJyk7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMub3B0aW9ucy5rYXRleC5zcmMucmVuZGVyVG9TdHJpbmcoZXhwLCB7dGhyb3dPbkVycm9yOiB0cnVlLCBkaXNwbGF5TW9kZTogdHJ1ZX0pO1xyXG4gICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKHRoaXMuY29udGV4dC5tYXRoLmZvY3VzRWxlbWVudCwgJ3NlLWVycm9yJyk7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9ICc8c3BhbiBjbGFzcz1cInNlLW1hdGgta2F0ZXgtZXJyb3JcIj5LYXRleCBzeW50YXggZXJyb3IuIChSZWZlciA8YSBocmVmPVwiJyArIEtBVEVYX1dFQlNJVEUgKyAnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+S2FUZVg8L2E+KTwvc3Bhbj4nO1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tTVU5FRElUT1IubWF0aC5LYXRleC5lcnJvcl0gJywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSxcclxuXHJcbiAgICBfcmVuZGVyTWF0aEV4cDogZnVuY3Rpb24gKGNvbnRleHRNYXRoLCBlKSB7XHJcbiAgICAgICAgY29udGV4dE1hdGgucHJldmlld0VsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wbHVnaW5zLm1hdGguX3JlbmRlcmVyLmNhbGwodGhpcywgZS50YXJnZXQudmFsdWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzdWJtaXQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdGhpcy5zaG93TG9hZGluZygpO1xyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3VibWl0QWN0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0Lm1hdGguZm9jdXNFbGVtZW50LnZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRNYXRoID0gdGhpcy5jb250ZXh0Lm1hdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGhFeHAgPSBjb250ZXh0TWF0aC5mb2N1c0VsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGthdGV4RWwgPSBjb250ZXh0TWF0aC5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcua2F0ZXgnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICgha2F0ZXhFbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBrYXRleEVsLmNsYXNzTmFtZSA9ICdfX3NlX19rYXRleCAnICsga2F0ZXhFbC5jbGFzc05hbWU7XHJcbiAgICAgICAgICAgIGthdGV4RWwuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGthdGV4RWwuc2V0QXR0cmlidXRlKCdkYXRhLWV4cCcsIHRoaXMudXRpbC5IVE1MRW5jb2RlcihtYXRoRXhwKSk7XHJcbiAgICAgICAgICAgIGthdGV4RWwuc2V0QXR0cmlidXRlKCdkYXRhLWZvbnQtc2l6ZScsIGNvbnRleHRNYXRoLmZvbnRTaXplRWxlbWVudC52YWx1ZSk7XHJcbiAgICAgICAgICAgIGthdGV4RWwuc3R5bGUuZm9udFNpemUgPSBjb250ZXh0TWF0aC5mb250U2l6ZUVsZW1lbnQudmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5kaWFsb2cudXBkYXRlTW9kYWwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRm9ybWF0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50cygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEZvcm1hdHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9Gb3JtYXQgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudChzZWxlY3RlZEZvcm1hdHNbMF0ubm9kZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9Gb3JtYXQuYXBwZW5kQ2hpbGQoa2F0ZXhFbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluc2VydE5vZGUob0Zvcm1hdCwgbnVsbCwgdHJ1ZSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluc2VydE5vZGUoa2F0ZXhFbCwgbnVsbCwgdHJ1ZSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbXB0eSA9IHRoaXMudXRpbC5jcmVhdGVUZXh0Tm9kZSh0aGlzLnV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAga2F0ZXhFbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbXB0eSwga2F0ZXhFbC5uZXh0U2libGluZyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKGthdGV4RWwsIDAsIGthdGV4RWwsIDEpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChjb250ZXh0TWF0aC5fbWF0aEV4cCwgJy5rYXRleCcpO1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyRWwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoa2F0ZXhFbCwgY29udGFpbmVyRWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShrYXRleEVsLCAwLCBrYXRleEVsLCAxKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29udGV4dE1hdGguZm9jdXNFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgIGNvbnRleHRNYXRoLmZvbnRTaXplRWxlbWVudC52YWx1ZSA9ICcxZW0nO1xyXG4gICAgICAgICAgICBjb250ZXh0TWF0aC5wcmV2aWV3RWxlbWVudC5zdHlsZS5mb250U2l6ZSA9ICcxZW0nO1xyXG4gICAgICAgICAgICBjb250ZXh0TWF0aC5wcmV2aWV3RWxlbWVudC5pbm5lckhUTUwgPSAnJztcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHN1Ym1pdEFjdGlvbigpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuZGlhbG9nLmNsb3NlLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cuY2xvc2UuY2FsbCh0aGlzKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBhY3RpdmU6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xsZXJBcnJheS5pbmRleE9mKHRoaXMuY29udGV4dC5tYXRoLm1hdGhDb250cm9sbGVyKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWV4cCcpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xsZXJBcnJheS5pbmRleE9mKHRoaXMuY29udGV4dC5tYXRoLm1hdGhDb250cm9sbGVyKSA8IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoZWxlbWVudCwgMCwgZWxlbWVudCwgMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMubWF0aC5jYWxsX2NvbnRyb2xsZXIuY2FsbCh0aGlzLCBlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgb246IGZ1bmN0aW9uICh1cGRhdGUpIHtcclxuICAgICAgICBpZiAoIXVwZGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMubWF0aC5pbml0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGV4dE1hdGggPSB0aGlzLmNvbnRleHQubWF0aDtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHRNYXRoLl9tYXRoRXhwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBleHAgPSB0aGlzLnV0aWwuSFRNTERlY29kZXIoY29udGV4dE1hdGguX21hdGhFeHAuZ2V0QXR0cmlidXRlKCdkYXRhLWV4cCcpKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRTaXplID0gY29udGV4dE1hdGguX21hdGhFeHAuZ2V0QXR0cmlidXRlKCdkYXRhLWZvbnQtc2l6ZScpIHx8ICcxZW0nO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRpYWxvZy51cGRhdGVNb2RhbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0TWF0aC5mb2N1c0VsZW1lbnQudmFsdWUgPSBleHA7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0TWF0aC5mb250U2l6ZUVsZW1lbnQudmFsdWUgPSBmb250U2l6ZTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRNYXRoLnByZXZpZXdFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGx1Z2lucy5tYXRoLl9yZW5kZXJlci5jYWxsKHRoaXMsIGV4cCk7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0TWF0aC5wcmV2aWV3RWxlbWVudC5zdHlsZS5mb250U2l6ZSA9IGZvbnRTaXplO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjYWxsX2NvbnRyb2xsZXI6IGZ1bmN0aW9uIChtYXRoVGFnKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0Lm1hdGguX21hdGhFeHAgPSBtYXRoVGFnO1xyXG4gICAgICAgIGNvbnN0IG1hdGhCdG4gPSB0aGlzLmNvbnRleHQubWF0aC5tYXRoQ29udHJvbGxlcjtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRDb250cm9sbGVyUG9zaXRpb24obWF0aEJ0biwgbWF0aFRhZywgJ2JvdHRvbScsIHtsZWZ0OiAwLCB0b3A6IDB9KTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT24obWF0aEJ0biwgbWF0aFRhZywgJ21hdGgnKTtcclxuICAgIH0sXHJcblxyXG4gICAgb25DbGlja19tYXRoQ29udHJvbGxlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICBjb25zdCBjb21tYW5kID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKSB8fCBlLnRhcmdldC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgaWYgKC91cGRhdGUvLnRlc3QoY29tbWFuZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0Lm1hdGguZm9jdXNFbGVtZW50LnZhbHVlID0gdGhpcy51dGlsLkhUTUxEZWNvZGVyKHRoaXMuY29udGV4dC5tYXRoLl9tYXRoRXhwLmdldEF0dHJpYnV0ZSgnZGF0YS1leHAnKSk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5kaWFsb2cub3Blbi5jYWxsKHRoaXMsICdtYXRoJywgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLyoqIGRlbGV0ZSAqL1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbSh0aGlzLmNvbnRleHQubWF0aC5fbWF0aEV4cCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5tYXRoLl9tYXRoRXhwID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xyXG5cclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0TWF0aCA9IHRoaXMuY29udGV4dC5tYXRoO1xyXG4gICAgICAgIGNvbnRleHRNYXRoLm1hdGhDb250cm9sbGVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgY29udGV4dE1hdGguX21hdGhFeHAgPSBudWxsO1xyXG4gICAgICAgIGNvbnRleHRNYXRoLmZvY3VzRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgIGNvbnRleHRNYXRoLnByZXZpZXdFbGVtZW50LmlubmVySFRNTCA9ICcnO1xyXG4gICAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG4vLyBjb21tYW5kXHJcbmltcG9ydCBibG9ja3F1b3RlIGZyb20gJy4vY29tbWFuZC9ibG9ja3F1b3RlJztcclxuXHJcbi8vIHN1Ym1lbnVcclxuaW1wb3J0IGFsaWduIGZyb20gJy4vc3VibWVudS9hbGlnbic7XHJcbmltcG9ydCBmb250IGZyb20gJy4vc3VibWVudS9mb250JztcclxuaW1wb3J0IGZvbnRTaXplIGZyb20gJy4vc3VibWVudS9mb250U2l6ZSc7XHJcbmltcG9ydCBmb250Q29sb3IgZnJvbSAnLi9zdWJtZW51L2ZvbnRDb2xvcic7XHJcbmltcG9ydCBoaWxpdGVDb2xvciBmcm9tICcuL3N1Ym1lbnUvaGlsaXRlQ29sb3InO1xyXG5pbXBvcnQgaG9yaXpvbnRhbFJ1bGUgZnJvbSAnLi9zdWJtZW51L2hvcml6b250YWxSdWxlJztcclxuaW1wb3J0IGxpc3QgZnJvbSAnLi9zdWJtZW51L2xpc3QnO1xyXG5pbXBvcnQgdGFibGUgZnJvbSAnLi9zdWJtZW51L3RhYmxlJztcclxuaW1wb3J0IGZvcm1hdEJsb2NrIGZyb20gJy4vc3VibWVudS9mb3JtYXRCbG9jayc7XHJcbmltcG9ydCBsaW5lSGVpZ2h0IGZyb20gJy4vc3VibWVudS9saW5lSGVpZ2h0JztcclxuaW1wb3J0IHRlbXBsYXRlIGZyb20gJy4vc3VibWVudS90ZW1wbGF0ZSc7XHJcbmltcG9ydCBwYXJhZ3JhcGhTdHlsZSBmcm9tICcuL3N1Ym1lbnUvcGFyYWdyYXBoU3R5bGUnO1xyXG5pbXBvcnQgdGV4dFN0eWxlIGZyb20gJy4vc3VibWVudS90ZXh0U3R5bGUnO1xyXG5cclxuLy8gZGlhbG9nXHJcbmltcG9ydCBsaW5rIGZyb20gJy4vZGlhbG9nL2xpbmsnO1xyXG5pbXBvcnQgaW1hZ2UgZnJvbSAnLi9kaWFsb2cvaW1hZ2UnO1xyXG5pbXBvcnQgdmlkZW8gZnJvbSAnLi9kaWFsb2cvdmlkZW8nO1xyXG5pbXBvcnQgYXVkaW8gZnJvbSAnLi9kaWFsb2cvYXVkaW8nO1xyXG5pbXBvcnQgbWF0aCBmcm9tICcuL2RpYWxvZy9tYXRoJztcclxuXHJcbi8vIGZpbGUgYnJvd3NlclxyXG5pbXBvcnQgaW1hZ2VHYWxsZXJ5IGZyb20gJy4vZmlsZUJyb3dzZXIvaW1hZ2VHYWxsZXJ5JztcclxuXHJcbmV4cG9ydCB7IGJsb2NrcXVvdGUsIGFsaWduLCBmb250LCBmb250U2l6ZSwgZm9udENvbG9yLCBoaWxpdGVDb2xvciwgaG9yaXpvbnRhbFJ1bGUsIGxpc3QsIHRhYmxlLCBmb3JtYXRCbG9jaywgbGluZUhlaWdodCwgdGVtcGxhdGUsIHBhcmFncmFwaFN0eWxlLCB0ZXh0U3R5bGUsIGxpbmssIGltYWdlLCB2aWRlbywgYXVkaW8sIG1hdGgsIGltYWdlR2FsbGVyeSB9O1xyXG5leHBvcnQgZGVmYXVsdCB7IGJsb2NrcXVvdGUsIGFsaWduLCBmb250LCBmb250U2l6ZSwgZm9udENvbG9yLCBoaWxpdGVDb2xvciwgaG9yaXpvbnRhbFJ1bGUsIGxpc3QsIHRhYmxlLCBmb3JtYXRCbG9jaywgbGluZUhlaWdodCwgdGVtcGxhdGUsIHBhcmFncmFwaFN0eWxlLCB0ZXh0U3R5bGUsIGxpbmssIGltYWdlLCB2aWRlbywgYXVkaW8sIG1hdGgsIGltYWdlR2FsbGVyeSB9O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ2Jsb2NrcXVvdGUnLFxyXG4gICAgZGlzcGxheTogJ2NvbW1hbmQnLFxyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSwgdGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XHJcbiAgICAgICAgY29udGV4dC5ibG9ja3F1b3RlID0ge1xyXG4gICAgICAgICAgICB0YXJnZXRCdXR0b246IHRhcmdldEVsZW1lbnQsXHJcbiAgICAgICAgICAgIHRhZzogY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0JMT0NLUVVPVEUnKVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGNvcmVcclxuICAgICAqL1xyXG4gICAgYWN0aXZlOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGhpcy5jb250ZXh0LmJsb2NrcXVvdGUudGFyZ2V0QnV0dG9uLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmICgvYmxvY2txdW90ZS9pLnRlc3QoZWxlbWVudC5ub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKHRoaXMuY29udGV4dC5ibG9ja3F1b3RlLnRhcmdldEJ1dHRvbiwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBjb3JlXHJcbiAgICAgKi9cclxuICAgIGFjdGlvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRCbG9ja3F1b3RlID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQodGhpcy5nZXRTZWxlY3Rpb25Ob2RlKCksICdibG9ja3F1b3RlJyk7XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50QmxvY2txdW90ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRldGFjaFJhbmdlRm9ybWF0RWxlbWVudChjdXJyZW50QmxvY2txdW90ZSwgbnVsbCwgbnVsbCwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5UmFuZ2VGb3JtYXRFbGVtZW50KHRoaXMuY29udGV4dC5ibG9ja3F1b3RlLnRhZy5jbG9uZU5vZGUoZmFsc2UpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07IiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdhbGlnbicsXHJcbiAgICBkaXNwbGF5OiAnc3VibWVudScsXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlLCB0YXJnZXRFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgaWNvbnMgPSBjb3JlLmljb25zO1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XHJcbiAgICAgICAgY29udGV4dC5hbGlnbiA9IHtcclxuICAgICAgICAgICAgdGFyZ2V0QnV0dG9uOiB0YXJnZXRFbGVtZW50LFxyXG4gICAgICAgICAgICBfaXRlbU1lbnU6IG51bGwsXHJcbiAgICAgICAgICAgIF9hbGlnbkxpc3Q6IG51bGwsXHJcbiAgICAgICAgICAgIGN1cnJlbnRBbGlnbjogJycsXHJcbiAgICAgICAgICAgIGRlZmF1bHREaXI6IGNvcmUub3B0aW9ucy5ydGwgPyAncmlnaHQnIDogJ2xlZnQnLFxyXG4gICAgICAgICAgICBpY29uczoge1xyXG4gICAgICAgICAgICAgICAganVzdGlmeTogaWNvbnMuYWxpZ25fanVzdGlmeSxcclxuICAgICAgICAgICAgICAgIGxlZnQ6IGljb25zLmFsaWduX2xlZnQsXHJcbiAgICAgICAgICAgICAgICByaWdodDogaWNvbnMuYWxpZ25fcmlnaHQsXHJcbiAgICAgICAgICAgICAgICBjZW50ZXI6IGljb25zLmFsaWduX2NlbnRlclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIHNldCBzdWJtZW51ICovXHJcbiAgICAgICAgbGV0IGxpc3REaXYgPSB0aGlzLnNldFN1Ym1lbnUoY29yZSk7XHJcbiAgICAgICAgbGV0IGxpc3RVbCA9IGNvbnRleHQuYWxpZ24uX2l0ZW1NZW51ID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yKCd1bCcpO1xyXG5cclxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgIGxpc3RVbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucGlja3VwLmJpbmQoY29yZSkpO1xyXG4gICAgICAgIGNvbnRleHQuYWxpZ24uX2FsaWduTGlzdCA9IGxpc3RVbC5xdWVyeVNlbGVjdG9yQWxsKCdsaSBidXR0b24nKTtcclxuXHJcbiAgICAgICAgLyoqIGFwcGVuZCB0YXJnZXQgYnV0dG9uIG1lbnUgKi9cclxuICAgICAgICBjb3JlLmluaXRNZW51VGFyZ2V0KHRoaXMubmFtZSwgdGFyZ2V0RWxlbWVudCwgbGlzdERpdik7XHJcblxyXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICBsaXN0RGl2ID0gbnVsbCwgbGlzdFVsID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0U3VibWVudTogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xyXG4gICAgICAgIGNvbnN0IGljb25zID0gY29yZS5pY29ucztcclxuICAgICAgICBjb25zdCBsaXN0RGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGNvbnN0IGFsaWduSXRlbXMgPSBjb3JlLm9wdGlvbnMuYWxpZ25JdGVtcztcclxuXHJcbiAgICAgICAgbGV0IGh0bWwgPSAnJztcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgaXRlbSwgdGV4dDsgaSA8IGFsaWduSXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaXRlbSA9IGFsaWduSXRlbXNbaV07XHJcbiAgICAgICAgICAgIHRleHQgPSBsYW5nLnRvb2xiYXJbJ2FsaWduJyArIGl0ZW0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBpdGVtLnNsaWNlKDEpXTtcclxuICAgICAgICAgICAgaHRtbCArPSAnPGxpPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3Qgc2UtYnRuLWFsaWduXCIgZGF0YS12YWx1ZT1cIicgKyBpdGVtICsgJ1wiIHRpdGxlPVwiJyArIHRleHQgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyB0ZXh0ICsgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLWxpc3QtaWNvblwiPicgKyBpY29uc1snYWxpZ25fJyArIGl0ZW1dICsgJzwvc3Bhbj4nICsgdGV4dCArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICc8L2xpPic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsaXN0RGl2LmNsYXNzTmFtZSA9ICdzZS1zdWJtZW51IHNlLWxpc3QtbGF5ZXIgc2UtbGlzdC1hbGlnbic7XHJcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSAnJyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtbGlzdC1pbm5lclwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzx1bCBjbGFzcz1cInNlLWxpc3QtYmFzaWNcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICBodG1sICtcclxuICAgICAgICAgICAgICAgICc8L3VsPicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpc3REaXY7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGNvcmVcclxuICAgICAqL1xyXG4gICAgYWN0aXZlOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IGFsaWduQ29udGV4dCA9IHRoaXMuY29udGV4dC5hbGlnbjtcclxuICAgICAgICBjb25zdCB0YXJnZXRCdXR0b24gPSBhbGlnbkNvbnRleHQudGFyZ2V0QnV0dG9uO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRhcmdldEJ1dHRvbi5maXJzdEVsZW1lbnRDaGlsZDtcclxuXHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5jaGFuZ2VFbGVtZW50KHRhcmdldCwgYWxpZ25Db250ZXh0Lmljb25zW2FsaWduQ29udGV4dC5kZWZhdWx0RGlyXSk7XHJcbiAgICAgICAgICAgIHRhcmdldEJ1dHRvbi5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtZm9jdXMnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXRpbC5pc0Zvcm1hdEVsZW1lbnQoZWxlbWVudCkpIHtcclxuICAgICAgICAgICAgY29uc3QgdGV4dEFsaWduID0gZWxlbWVudC5zdHlsZS50ZXh0QWxpZ247XHJcbiAgICAgICAgICAgIGlmICh0ZXh0QWxpZ24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5jaGFuZ2VFbGVtZW50KHRhcmdldCwgYWxpZ25Db250ZXh0Lmljb25zW3RleHRBbGlnbl0gfHwgYWxpZ25Db250ZXh0Lmljb25zW2FsaWduQ29udGV4dC5kZWZhdWx0RGlyXSk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRCdXR0b24uc2V0QXR0cmlidXRlKCdkYXRhLWZvY3VzJywgdGV4dEFsaWduKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHN1Ym1lbnVcclxuICAgICAqL1xyXG4gICAgb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBhbGlnbkNvbnRleHQgPSB0aGlzLmNvbnRleHQuYWxpZ247XHJcbiAgICAgICAgY29uc3QgYWxpZ25MaXN0ID0gYWxpZ25Db250ZXh0Ll9hbGlnbkxpc3Q7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEFsaWduID0gYWxpZ25Db250ZXh0LnRhcmdldEJ1dHRvbi5nZXRBdHRyaWJ1dGUoJ2RhdGEtZm9jdXMnKSB8fCBhbGlnbkNvbnRleHQuZGVmYXVsdERpcjtcclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRBbGlnbiAhPT0gYWxpZ25Db250ZXh0LmN1cnJlbnRBbGlnbikge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYWxpZ25MaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEFsaWduID09PSBhbGlnbkxpc3RbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoYWxpZ25MaXN0W2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhhbGlnbkxpc3RbaV0sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYWxpZ25Db250ZXh0LmN1cnJlbnRBbGlnbiA9IGN1cnJlbnRBbGlnbjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGV4Y2hhbmdlRGlyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgZGlyID0gdGhpcy5vcHRpb25zLnJ0bCA/ICdyaWdodCcgOiAnbGVmdCc7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuYWxpZ24gfHwgdGhpcy5jb250ZXh0LmFsaWduLmRlZmF1bHREaXIgPT09IGRpcikgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRleHQuYWxpZ24uZGVmYXVsdERpciA9IGRpcjtcclxuICAgICAgICBsZXQgbWVudSA9IHRoaXMuY29udGV4dC5hbGlnbi5faXRlbU1lbnU7XHJcbiAgICAgICAgbGV0IGxlZnRCdG4gPSBtZW51LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXZhbHVlPVwibGVmdFwiXScpO1xyXG4gICAgICAgIGxldCByaWdodEJ0biA9IG1lbnUucXVlcnlTZWxlY3RvcignW2RhdGEtdmFsdWU9XCJyaWdodFwiXScpO1xyXG4gICAgICAgIGlmIChsZWZ0QnRuICYmIHJpZ2h0QnRuKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxwID0gbGVmdEJ0bi5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCBycCA9IHJpZ2h0QnRuLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGxwLmFwcGVuZENoaWxkKHJpZ2h0QnRuKTtcclxuICAgICAgICAgICAgcnAuYXBwZW5kQ2hpbGQobGVmdEJ0bik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBwaWNrdXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xyXG5cclxuICAgICAgICB3aGlsZSAoIXZhbHVlICYmICEvVUwvaS50ZXN0KHRhcmdldC50YWdOYW1lKSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKTtcclxuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHREaXIgPSB0aGlzLmNvbnRleHQuYWxpZ24uZGVmYXVsdERpcjtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEZvcm1zdHMgPSB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHMoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRGb3Jtc3RzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5zZXRTdHlsZShzZWxlY3RlZEZvcm1zdHNbaV0sICd0ZXh0QWxpZ24nLCAodmFsdWUgPT09IGRlZmF1bHREaXIgPyAnJyA6IHZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVmZmVjdE5vZGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgICAgIHRoaXMuZm9jdXMoKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ2ZvbnQnLFxyXG4gICAgZGlzcGxheTogJ3N1Ym1lbnUnLFxyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSwgdGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XHJcbiAgICAgICAgY29udGV4dC5mb250ID0ge1xyXG4gICAgICAgICAgICB0YXJnZXRUZXh0OiB0YXJnZXRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50eHQnKSxcclxuICAgICAgICAgICAgdGFyZ2V0VG9vbHRpcDogdGFyZ2V0RWxlbWVudC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoJy5zZS10b29sdGlwLXRleHQnKSxcclxuICAgICAgICAgICAgX2ZvbnRMaXN0OiBudWxsLFxyXG4gICAgICAgICAgICBjdXJyZW50Rm9udDogJydcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogc2V0IHN1Ym1lbnUgKi9cclxuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcclxuXHJcbiAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJy5zZS1saXN0LWlubmVyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2t1cC5iaW5kKGNvcmUpKTtcclxuXHJcbiAgICAgICAgY29udGV4dC5mb250Ll9mb250TGlzdCA9IGxpc3REaXYucXVlcnlTZWxlY3RvckFsbCgndWwgbGkgYnV0dG9uJyk7XHJcblxyXG4gICAgICAgIC8qKiBhcHBlbmQgdGFyZ2V0IGJ1dHRvbiBtZW51ICovXHJcbiAgICAgICAgY29yZS5pbml0TWVudVRhcmdldCh0aGlzLm5hbWUsIHRhcmdldEVsZW1lbnQsIGxpc3REaXYpO1xyXG5cclxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXHJcbiAgICAgICAgbGlzdERpdiA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN1Ym1lbnU6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcclxuICAgICAgICBjb25zdCBsaXN0RGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG5cclxuICAgICAgICBsaXN0RGl2LmNsYXNzTmFtZSA9ICdzZS1zdWJtZW51IHNlLWxpc3QtbGF5ZXIgc2UtbGlzdC1mb250LWZhbWlseSc7XHJcblxyXG4gICAgICAgIGxldCBmb250LCB0ZXh0LCBpLCBsZW47XHJcbiAgICAgICAgbGV0IGZvbnRMaXN0ID0gY29yZS5vcHRpb25zLmZvbnQ7XHJcblxyXG4gICAgICAgIGxldCBsaXN0ID0gJzxkaXYgY2xhc3M9XCJzZS1saXN0LWlubmVyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJkZWZhdWx0X3ZhbHVlIHNlLWJ0bi1saXN0XCIgdGl0bGU9XCInICsgbGFuZy50b29sYmFyLmRlZmF1bHQgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBsYW5nLnRvb2xiYXIuZGVmYXVsdCArICdcIj4oJyArIGxhbmcudG9vbGJhci5kZWZhdWx0ICsgJyk8L2J1dHRvbj48L2xpPic7XHJcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZm9udExpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9udCA9IGZvbnRMaXN0W2ldO1xyXG4gICAgICAgICAgICB0ZXh0ID0gZm9udC5zcGxpdCgnLCcpWzBdO1xyXG4gICAgICAgICAgICBsaXN0ICs9ICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdFwiIGRhdGEtdmFsdWU9XCInICsgZm9udCArICdcIiBkYXRhLXR4dD1cIicgKyB0ZXh0ICsgJ1wiIHRpdGxlPVwiJyArIHRleHQgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyB0ZXh0ICsgJ1wiIHN0eWxlPVwiZm9udC1mYW1pbHk6JyArIGZvbnQgKyAnO1wiPicgKyB0ZXh0ICsgJzwvYnV0dG9uPjwvbGk+JztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlzdCArPSAnPC91bD48L2Rpdj4nO1xyXG4gICAgICAgIGxpc3REaXYuaW5uZXJIVE1MID0gbGlzdDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpc3REaXY7XHJcbiAgICB9LFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBjb3JlXHJcbiAgICAgKi9cclxuICAgIGFjdGl2ZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmNvbnRleHQuZm9udC50YXJnZXRUZXh0O1xyXG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLmNvbnRleHQuZm9udC50YXJnZXRUb29sdGlwO1xyXG5cclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgZm9udCA9IHRoaXMuaGFzRm9jdXMgPyB0aGlzLnd3Q29tcHV0ZWRTdHlsZS5mb250RmFtaWx5IDogdGhpcy5sYW5nLnRvb2xiYXIuZm9udDtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmNoYW5nZVR4dCh0YXJnZXQsIGZvbnQpO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KHRvb2x0aXAsIHRoaXMuaGFzRm9jdXMgPyB0aGlzLmxhbmcudG9vbGJhci5mb250ICsgKGZvbnQgPyAnICgnICsgZm9udCArICcpJyA6ICcnKSA6IGZvbnQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5zdHlsZSAmJiBlbGVtZW50LnN0eWxlLmZvbnRGYW1pbHkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RGb250ID0gZWxlbWVudC5zdHlsZS5mb250RmFtaWx5LnJlcGxhY2UoL1tcIiddL2csJycpO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KHRhcmdldCwgc2VsZWN0Rm9udCk7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5jaGFuZ2VUeHQodG9vbHRpcCwgdGhpcy5sYW5nLnRvb2xiYXIuZm9udCArICcgKCcgKyBzZWxlY3RGb250ICsgJyknKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBzdWJtZW51XHJcbiAgICAgKi9cclxuICAgIG9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgZm9udENvbnRleHQgPSB0aGlzLmNvbnRleHQuZm9udDtcclxuICAgICAgICBjb25zdCBmb250TGlzdCA9IGZvbnRDb250ZXh0Ll9mb250TGlzdDtcclxuICAgICAgICBjb25zdCBjdXJyZW50Rm9udCA9IGZvbnRDb250ZXh0LnRhcmdldFRleHQudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50Rm9udCAhPT0gZm9udENvbnRleHQuY3VycmVudEZvbnQpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZvbnRMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvbnQgPT09IChmb250TGlzdFtpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSB8fCAnJykucmVwbGFjZSgvJ3xcIi9nLCAnJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3MoZm9udExpc3RbaV0sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGZvbnRMaXN0W2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvbnRDb250ZXh0LmN1cnJlbnRGb250ID0gY3VycmVudEZvbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBwaWNrdXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKCEvXkJVVFRPTiQvaS50ZXN0KGUudGFyZ2V0LnRhZ05hbWUpKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnU1BBTicpO1xyXG4gICAgICAgICAgICBpZiAoL1tcXHNcXGRcXFddLy50ZXN0KHZhbHVlKSAmJiAhL15bJ1wiXS4qWydcIl0kLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSAnXCInICsgdmFsdWUgKyAnXCInO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5ld05vZGUuc3R5bGUuZm9udEZhbWlseSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGVDaGFuZ2UobmV3Tm9kZSwgWydmb250LWZhbWlseSddLCBudWxsLCBudWxsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGVDaGFuZ2UobnVsbCwgWydmb250LWZhbWlseSddLCBbJ3NwYW4nXSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ2ZvbnRTaXplJyxcclxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnRleHQuZm9udFNpemUgPSB7XHJcbiAgICAgICAgICAgIHRhcmdldFRleHQ6IHRhcmdldEVsZW1lbnQucXVlcnlTZWxlY3RvcignLnR4dCcpLFxyXG4gICAgICAgICAgICBfc2l6ZUxpc3Q6IG51bGwsXHJcbiAgICAgICAgICAgIGN1cnJlbnRTaXplOiAnJ1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xyXG4gICAgICAgIGxldCBsaXN0RGl2ID0gdGhpcy5zZXRTdWJtZW51KGNvcmUpO1xyXG4gICAgICAgIGxldCBsaXN0VWwgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJ3VsJyk7XHJcblxyXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgbGlzdFVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5waWNrdXAuYmluZChjb3JlKSk7XHJcbiAgICAgICAgY29udGV4dC5mb250U2l6ZS5fc2l6ZUxpc3QgPSBsaXN0VWwucXVlcnlTZWxlY3RvckFsbCgnbGkgYnV0dG9uJyk7XHJcblxyXG4gICAgICAgIC8qKiBhcHBlbmQgdGFyZ2V0IGJ1dHRvbiBtZW51ICovXHJcbiAgICAgICAgY29yZS5pbml0TWVudVRhcmdldCh0aGlzLm5hbWUsIHRhcmdldEVsZW1lbnQsIGxpc3REaXYpO1xyXG5cclxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXHJcbiAgICAgICAgbGlzdERpdiA9IG51bGwsIGxpc3RVbCA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN1Ym1lbnU6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gY29yZS5vcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XHJcbiAgICAgICAgY29uc3QgbGlzdERpdiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuXHJcbiAgICAgICAgbGlzdERpdi5jbGFzc05hbWUgPSAnc2Utc3VibWVudSBzZS1saXN0LWxheWVyIHNlLWxpc3QtZm9udC1zaXplJztcclxuXHJcbiAgICAgICAgY29uc3Qgc2l6ZUxpc3QgPSAhb3B0aW9uLmZvbnRTaXplID8gWzgsIDksIDEwLCAxMSwgMTIsIDE0LCAxNiwgMTgsIDIwLCAyMiwgMjQsIDI2LCAyOCwgMzYsIDQ4LCA3Ml0gOiBvcHRpb24uZm9udFNpemU7XHJcblxyXG4gICAgICAgIGxldCBsaXN0ID0gJzxkaXYgY2xhc3M9XCJzZS1saXN0LWlubmVyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJkZWZhdWx0X3ZhbHVlIHNlLWJ0bi1saXN0XCIgdGl0bGU9XCInICsgbGFuZy50b29sYmFyLmRlZmF1bHQgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBsYW5nLnRvb2xiYXIuZGVmYXVsdCArICdcIj4oJyArIGxhbmcudG9vbGJhci5kZWZhdWx0ICsgJyk8L2J1dHRvbj48L2xpPic7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIHVuaXQgPSBvcHRpb24uZm9udFNpemVVbml0LCBsZW4gPSBzaXplTGlzdC5sZW5ndGgsIHNpemU7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBzaXplID0gc2l6ZUxpc3RbaV07XHJcbiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0bi1saXN0XCIgZGF0YS12YWx1ZT1cIicgKyBzaXplICsgdW5pdCArICdcIiB0aXRsZT1cIicgKyBzaXplICsgdW5pdCArICdcIiBhcmlhLWxhYmVsPVwiJyArIHNpemUgKyB1bml0ICsgJ1wiIHN0eWxlPVwiZm9udC1zaXplOicgKyBzaXplICsgdW5pdCArICc7XCI+JyArIHNpemUgKyAnPC9idXR0b24+PC9saT4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaXN0ICs9ICc8L3VsPjwvZGl2Pic7XHJcblxyXG4gICAgICAgIGxpc3REaXYuaW5uZXJIVE1MID0gbGlzdDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpc3REaXY7XHJcbiAgICB9LFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBjb3JlXHJcbiAgICAgKi9cclxuICAgIGFjdGl2ZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmNoYW5nZVR4dCh0aGlzLmNvbnRleHQuZm9udFNpemUudGFyZ2V0VGV4dCwgdGhpcy5oYXNGb2N1cyA/IHRoaXMuX2NvbnZlcnRGb250U2l6ZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mb250U2l6ZVVuaXQsIHRoaXMud3dDb21wdXRlZFN0eWxlLmZvbnRTaXplKSA6IHRoaXMubGFuZy50b29sYmFyLmZvbnRTaXplKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuc3R5bGUgJiYgZWxlbWVudC5zdHlsZS5mb250U2l6ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5jaGFuZ2VUeHQodGhpcy5jb250ZXh0LmZvbnRTaXplLnRhcmdldFRleHQsIHRoaXMuX2NvbnZlcnRGb250U2l6ZS5jYWxsKHRoaXMsIHRoaXMub3B0aW9ucy5mb250U2l6ZVVuaXQsIGVsZW1lbnQuc3R5bGUuZm9udFNpemUpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBzdWJtZW51XHJcbiAgICAgKi9cclxuICAgIG9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgZm9udFNpemVDb250ZXh0ID0gdGhpcy5jb250ZXh0LmZvbnRTaXplO1xyXG4gICAgICAgIGNvbnN0IHNpemVMaXN0ID0gZm9udFNpemVDb250ZXh0Ll9zaXplTGlzdDtcclxuICAgICAgICBjb25zdCBjdXJyZW50U2l6ZSA9IGZvbnRTaXplQ29udGV4dC50YXJnZXRUZXh0LnRleHRDb250ZW50O1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudFNpemUgIT09IGZvbnRTaXplQ29udGV4dC5jdXJyZW50U2l6ZSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2l6ZUxpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2l6ZSA9PT0gc2l6ZUxpc3RbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3Moc2l6ZUxpc3RbaV0sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHNpemVMaXN0W2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvbnRTaXplQ29udGV4dC5jdXJyZW50U2l6ZSA9IGN1cnJlbnRTaXplO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcGlja3VwOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICghL15CVVRUT04kL2kudGVzdChlLnRhcmdldC50YWdOYW1lKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpO1xyXG5cclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KCdTUEFOJyk7XHJcbiAgICAgICAgICAgIG5ld05vZGUuc3R5bGUuZm9udFNpemUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlQ2hhbmdlKG5ld05vZGUsIFsnZm9udC1zaXplJ10sIG51bGwsIG51bGwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZUNoYW5nZShudWxsLCBbJ2ZvbnQtc2l6ZSddLCBbJ3NwYW4nXSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN1Ym1lbnVPZmYoKTtcclxuICAgIH1cclxufTtcclxuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdob3Jpem9udGFsUnVsZScsXHJcbiAgICBkaXNwbGF5OiAnc3VibWVudScsXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlLCB0YXJnZXRFbGVtZW50KSB7XHJcbiAgICAgICAgY29yZS5jb250ZXh0Lmhvcml6b250YWxSdWxlID0ge1xyXG4gICAgICAgICAgICBjdXJyZW50SFI6IG51bGwsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIHNldCBzdWJtZW51ICovXHJcbiAgICAgICAgbGV0IGxpc3REaXYgPSB0aGlzLnNldFN1Ym1lbnUoY29yZSk7XHJcblxyXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgbGlzdERpdi5xdWVyeVNlbGVjdG9yKCd1bCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ob3Jpem9udGFsUnVsZVBpY2suYmluZChjb3JlKSk7XHJcblxyXG4gICAgICAgIC8qKiBhcHBlbmQgdGFyZ2V0IGJ1dHRvbiBtZW51ICovXHJcbiAgICAgICAgY29yZS5pbml0TWVudVRhcmdldCh0aGlzLm5hbWUsIHRhcmdldEVsZW1lbnQsIGxpc3REaXYpO1xyXG5cclxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXHJcbiAgICAgICAgbGlzdERpdiA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN1Ym1lbnU6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcclxuICAgICAgICBjb25zdCBsaXN0RGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gY29yZS5vcHRpb25zLmhySXRlbXMgfHwgW3tuYW1lOiBsYW5nLnRvb2xiYXIuaHJfc29saWQsIGNsYXNzOiAnX19zZV9fc29saWQnfSwge25hbWU6IGxhbmcudG9vbGJhci5ocl9kYXNoZWQsIGNsYXNzOiAnX19zZV9fZGFzaGVkJ30sIHtuYW1lOiBsYW5nLnRvb2xiYXIuaHJfZG90dGVkLCBjbGFzczogJ19fc2VfX2RvdHRlZCd9XTtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgbGlzdCA9ICcnO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBsaXN0ICs9ICc8bGk+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCBidG5fbGluZVwiIGRhdGEtY29tbWFuZD1cImhvcml6b250YWxSdWxlXCIgZGF0YS12YWx1ZT1cIicgKyBpdGVtc1tpXS5jbGFzcyArICdcIiB0aXRsZT1cIicgKyBpdGVtc1tpXS5uYW1lICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgaXRlbXNbaV0ubmFtZSArICdcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGhyJyArIChpdGVtc1tpXS5jbGFzcyA/ICcgY2xhc3M9XCInICsgaXRlbXNbaV0uY2xhc3MgKyAnXCInIDogJycpICsgKGl0ZW1zW2ldLnN0eWxlID8gJyBzdHlsZT1cIicgKyBpdGVtc1tpXS5zdHlsZSArICdcIicgOiAnJykgKyAnLz4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgJzwvbGk+JztcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGlzdERpdi5jbGFzc05hbWUgPSAnc2Utc3VibWVudSBzZS1saXN0LWxheWVyIHNlLWxpc3QtbGluZSc7XHJcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSAnJyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtbGlzdC1pbm5lclwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzx1bCBjbGFzcz1cInNlLWxpc3QtYmFzaWNcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0ICtcclxuICAgICAgICAgICAgICAgICc8L3VsPicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpc3REaXY7XHJcbiAgICB9LFxyXG5cclxuICAgIGFjdGl2ZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXRpbC5oYXNDbGFzcyh0aGlzLmNvbnRleHQuaG9yaXpvbnRhbFJ1bGUuY3VycmVudEhSLCAnb24nKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICgvSFIvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5ob3Jpem9udGFsUnVsZS5jdXJyZW50SFIgPSBlbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudXRpbC5oYXNDbGFzcyhlbGVtZW50LCAnb24nKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGVsZW1lbnQsICdvbicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09uKCdocicsIHRoaXMudXRpbC5yZW1vdmVDbGFzcy5iaW5kKHRoaXMudXRpbCwgZWxlbWVudCwgJ29uJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBhcHBlbmRIcjogZnVuY3Rpb24gKGhyVGVtcCkge1xyXG4gICAgICAgIHRoaXMuZm9jdXMoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRDb21wb25lbnQoaHJUZW1wLmNsb25lTm9kZShmYWxzZSksIGZhbHNlLCB0cnVlLCBmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhvcml6b250YWxSdWxlUGljazogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgbGV0IHRhcmdldCA9IGUudGFyZ2V0O1xyXG4gICAgICAgIGxldCBjb21tYW5kID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUgKCFjb21tYW5kICYmICEvVUwvaS50ZXN0KHRhcmdldC50YWdOYW1lKSkge1xyXG4gICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IG9Ob2RlID0gdGhpcy5wbHVnaW5zLmhvcml6b250YWxSdWxlLmFwcGVuZEhyLmNhbGwodGhpcywgdGFyZ2V0LmZpcnN0RWxlbWVudENoaWxkKTtcclxuICAgICAgICBpZiAob05vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShvTm9kZSwgMCwgb05vZGUsIDApO1xyXG4gICAgICAgICAgICB0aGlzLnN1Ym1lbnVPZmYoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbiIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnbGlzdCcsXHJcbiAgICBkaXNwbGF5OiAnc3VibWVudScsXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlLCB0YXJnZXRFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcclxuICAgICAgICBjb250ZXh0Lmxpc3QgPSB7XHJcbiAgICAgICAgICAgIHRhcmdldEJ1dHRvbjogdGFyZ2V0RWxlbWVudCxcclxuICAgICAgICAgICAgX2xpc3Q6IG51bGwsXHJcbiAgICAgICAgICAgIGN1cnJlbnRMaXN0OiAnJyxcclxuICAgICAgICAgICAgaWNvbnM6IHtcclxuICAgICAgICAgICAgICAgIGJ1bGxldHM6IGNvcmUuaWNvbnMubGlzdF9idWxsZXRzLFxyXG4gICAgICAgICAgICAgICAgbnVtYmVyOiBjb3JlLmljb25zLmxpc3RfbnVtYmVyXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogc2V0IHN1Ym1lbnUgKi9cclxuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcclxuICAgICAgICBsZXQgbGlzdFVsID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yKCd1bCcpO1xyXG5cclxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgIGxpc3RVbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucGlja3VwLmJpbmQoY29yZSkpO1xyXG4gICAgICAgIGNvbnRleHQubGlzdC5fbGlzdCA9IGxpc3RVbC5xdWVyeVNlbGVjdG9yQWxsKCdsaSBidXR0b24nKTtcclxuXHJcbiAgICAgICAgLyoqIGFwcGVuZCB0YXJnZXQgYnV0dG9uIG1lbnUgKi9cclxuICAgICAgICBjb3JlLmluaXRNZW51VGFyZ2V0KHRoaXMubmFtZSwgdGFyZ2V0RWxlbWVudCwgbGlzdERpdik7XHJcblxyXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICBsaXN0RGl2ID0gbnVsbCwgbGlzdFVsID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0U3VibWVudTogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBsYW5nID0gY29yZS5sYW5nO1xyXG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIGxpc3REaXYuY2xhc3NOYW1lID0gJ3NlLXN1Ym1lbnUgc2UtbGlzdC1sYXllcic7XHJcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSAnJyArXHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtbGlzdC1pbm5lclwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzx1bCBjbGFzcz1cInNlLWxpc3QtYmFzaWNcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGxpPjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3Qgc2UtdG9vbHRpcFwiIGRhdGEtY29tbWFuZD1cIk9MXCIgdGl0bGU9XCInICsgbGFuZy50b29sYmFyLm9yZGVyTGlzdCArICdcIiBhcmlhLWxhYmVsPVwiJyArIGxhbmcudG9vbGJhci5vcmRlckxpc3QgKyAnXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuaWNvbnMubGlzdF9udW1iZXIgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj48L2xpPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCBzZS10b29sdGlwXCIgZGF0YS1jb21tYW5kPVwiVUxcIiB0aXRsZT1cIicgKyBsYW5nLnRvb2xiYXIudW5vcmRlckxpc3QgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBsYW5nLnRvb2xiYXIudW5vcmRlckxpc3QgKyAnXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuaWNvbnMubGlzdF9idWxsZXRzICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+PC9saT4nICtcclxuICAgICAgICAgICAgICAgICc8L3VsPicgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpc3REaXY7XHJcbiAgICB9LFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBjb3JlXHJcbiAgICAgKi9cclxuICAgIGFjdGl2ZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBidXR0b24gPSB0aGlzLmNvbnRleHQubGlzdC50YXJnZXRCdXR0b247XHJcbiAgICAgICAgY29uc3QgaWNvbiA9IGJ1dHRvbi5maXJzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICBjb25zdCB1dGlsID0gdGhpcy51dGlsO1xyXG5cclxuICAgICAgICBpZiAodXRpbC5pc0xpc3QoZWxlbWVudCkpIHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lO1xyXG4gICAgICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKCdkYXRhLWZvY3VzJywgbm9kZU5hbWUpO1xyXG4gICAgICAgICAgICB1dGlsLmFkZENsYXNzKGJ1dHRvbiwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICBpZiAoL1VML2kudGVzdChub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHV0aWwuY2hhbmdlRWxlbWVudChpY29uLCB0aGlzLmNvbnRleHQubGlzdC5pY29ucy5idWxsZXRzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHV0aWwuY2hhbmdlRWxlbWVudChpY29uLCB0aGlzLmNvbnRleHQubGlzdC5pY29ucy5udW1iZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBidXR0b24ucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWZvY3VzJyk7XHJcbiAgICAgICAgICAgIHV0aWwuY2hhbmdlRWxlbWVudChpY29uLCB0aGlzLmNvbnRleHQubGlzdC5pY29ucy5udW1iZXIpO1xyXG4gICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKGJ1dHRvbiwgJ2FjdGl2ZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAgLyoqXHJcbiAgICAgKiBAT3ZlcnJpZGUgc3VibWVudVxyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGxpc3RDb250ZXh0ID0gdGhpcy5jb250ZXh0Lmxpc3Q7XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IGxpc3RDb250ZXh0Ll9saXN0O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRMaXN0ID0gbGlzdENvbnRleHQudGFyZ2V0QnV0dG9uLmdldEF0dHJpYnV0ZSgnZGF0YS1mb2N1cycpIHx8ICcnO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudExpc3QgIT09IGxpc3RDb250ZXh0LmN1cnJlbnRMaXN0KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBsaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudExpc3QgPT09IGxpc3RbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhsaXN0W2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhsaXN0W2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxpc3RDb250ZXh0LmN1cnJlbnRMaXN0ID0gY3VycmVudExpc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlZGl0TGlzdDogZnVuY3Rpb24gKGNvbW1hbmQsIHNlbGVjdGVkQ2VsbHMsIGRldGFjaCkge1xyXG4gICAgICAgIGxldCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRGb3JtYXRzID0gIXNlbGVjdGVkQ2VsbHMgPyB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHNBbmRDb21wb25lbnRzKGZhbHNlKSA6IHNlbGVjdGVkQ2VsbHM7XHJcblxyXG4gICAgICAgIGlmIChzZWxlY3RlZEZvcm1hdHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZENlbGxzKSByZXR1cm47XHJcbiAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRSYW5nZV9hZGRMaW5lKHJhbmdlLCBudWxsKTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRGb3JtYXRzID0gdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnRzQW5kQ29tcG9uZW50cyhmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEZvcm1hdHMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IHV0aWwgPSB0aGlzLnV0aWw7XHJcbiAgICAgICAgdXRpbC5zb3J0QnlEZXB0aChzZWxlY3RlZEZvcm1hdHMsIHRydWUpO1xyXG5cclxuICAgICAgICAvLyBtZXJnZVxyXG4gICAgICAgIGxldCBmaXJzdFNlbCA9IHNlbGVjdGVkRm9ybWF0c1swXTtcclxuICAgICAgICBsZXQgbGFzdFNlbCA9IHNlbGVjdGVkRm9ybWF0c1tzZWxlY3RlZEZvcm1hdHMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgbGV0IHRvcEVsID0gKHV0aWwuaXNMaXN0Q2VsbChmaXJzdFNlbCkgfHwgdXRpbC5pc0NvbXBvbmVudChmaXJzdFNlbCkpICYmICFmaXJzdFNlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nID8gZmlyc3RTZWwucGFyZW50Tm9kZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIDogZmlyc3RTZWwucHJldmlvdXNFbGVtZW50U2libGluZztcclxuICAgICAgICBsZXQgYm90dG9tRWwgPSAodXRpbC5pc0xpc3RDZWxsKGxhc3RTZWwpIHx8IHV0aWwuaXNDb21wb25lbnQobGFzdFNlbCkpICYmICFsYXN0U2VsLm5leHRFbGVtZW50U2libGluZyA/IGxhc3RTZWwucGFyZW50Tm9kZS5uZXh0RWxlbWVudFNpYmxpbmcgOiBsYXN0U2VsLm5leHRFbGVtZW50U2libGluZztcclxuXHJcbiAgICAgICAgY29uc3QgaXNDb2xsYXBzZWQgPSByYW5nZS5jb2xsYXBzZWQ7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luUmFuZ2UgPSB7XHJcbiAgICAgICAgICAgIHNjOiByYW5nZS5zdGFydENvbnRhaW5lcixcclxuICAgICAgICAgICAgc286IChyYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyICYmIHV0aWwub25seVplcm9XaWR0aFNwYWNlKHJhbmdlLnN0YXJ0Q29udGFpbmVyKSAmJiByYW5nZS5zdGFydE9mZnNldCA9PT0gMCAmJiByYW5nZS5lbmRPZmZzZXQgPT09IDEpID8gcmFuZ2UuZW5kT2Zmc2V0IDogcmFuZ2Uuc3RhcnRPZmZzZXQsXHJcbiAgICAgICAgICAgIGVjOiByYW5nZS5lbmRDb250YWluZXIsXHJcbiAgICAgICAgICAgIGVvOiByYW5nZS5lbmRPZmZzZXRcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBhZnRlclJhbmdlID0gbnVsbDtcclxuICAgICAgICBsZXQgaXNSZW1vdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRGb3JtYXRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghdXRpbC5pc0xpc3QodXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoc2VsZWN0ZWRGb3JtYXRzW2ldLCBmdW5jdGlvbiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmFuZ2VGb3JtYXRFbGVtZW50KGN1cnJlbnQpICYmIGN1cnJlbnQgIT09IHNlbGVjdGVkRm9ybWF0c1tpXTtcclxuICAgICAgICAgICAgfS5iaW5kKHV0aWwpKSkpIHtcclxuICAgICAgICAgICAgICAgIGlzUmVtb3ZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzUmVtb3ZlICYmICghdG9wRWwgfHwgKGZpcnN0U2VsLnRhZ05hbWUgIT09IHRvcEVsLnRhZ05hbWUgfHwgY29tbWFuZCAhPT0gdG9wRWwudGFnTmFtZS50b1VwcGVyQ2FzZSgpKSkgJiYgKCFib3R0b21FbCB8fCAobGFzdFNlbC50YWdOYW1lICE9PSBib3R0b21FbC50YWdOYW1lIHx8IGNvbW1hbmQgIT09IGJvdHRvbUVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSkpKSB7XHJcbiAgICAgICAgICAgIGlmIChkZXRhY2gpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzZWxlY3RlZEZvcm1hdHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gaSAtIDE7IGogPj0gMDsgai0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEZvcm1hdHNbal0uY29udGFpbnMoc2VsZWN0ZWRGb3JtYXRzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGb3JtYXRzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktLTsgbGVuLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgY3VycmVudEZvcm1hdCA9IHV0aWwuZ2V0UmFuZ2VGb3JtYXRFbGVtZW50KGZpcnN0U2VsKTtcclxuICAgICAgICAgICAgY29uc3QgY2FuY2VsID0gY3VycmVudEZvcm1hdCAmJiBjdXJyZW50Rm9ybWF0LnRhZ05hbWUgPT09IGNvbW1hbmQ7XHJcbiAgICAgICAgICAgIGxldCByYW5nZUFyciwgdGVtcExpc3Q7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhc3NDb21wb25lbnQgPSBmdW5jdGlvbiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzQ29tcG9uZW50KGN1cnJlbnQpO1xyXG4gICAgICAgICAgICB9LmJpbmQodXRpbCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoIWNhbmNlbCkgdGVtcExpc3QgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoY29tbWFuZCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRGb3JtYXRzLmxlbmd0aCwgciwgbzsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBvID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoc2VsZWN0ZWRGb3JtYXRzW2ldLCBwYXNzQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgIGlmICghbyB8fCAhdXRpbC5pc0xpc3QobykpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHIgPSBvO1xyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlQXJyID0ge3I6IHIsIGY6IFt1dGlsLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0ZWRGb3JtYXRzW2ldLCAnTEknKV19O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAociAhPT0gbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGV0YWNoICYmIHV0aWwuaXNMaXN0Q2VsbChvLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMubGlzdC5fZGV0YWNoTmVzdGVkLmNhbGwodGhpcywgcmFuZ2VBcnIuZik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlclJhbmdlID0gdGhpcy5kZXRhY2hSYW5nZUZvcm1hdEVsZW1lbnQocmFuZ2VBcnIuZlswXS5wYXJlbnROb2RlLCByYW5nZUFyci5mLCB0ZW1wTGlzdCwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvID0gc2VsZWN0ZWRGb3JtYXRzW2ldLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuY2VsKSB0ZW1wTGlzdCA9IHV0aWwuY3JlYXRlRWxlbWVudChjb21tYW5kKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZUFyciA9IHtyOiByLCBmOiBbdXRpbC5nZXRQYXJlbnRFbGVtZW50KHNlbGVjdGVkRm9ybWF0c1tpXSwgJ0xJJyldfTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZUFyci5mLnB1c2godXRpbC5nZXRQYXJlbnRFbGVtZW50KHNlbGVjdGVkRm9ybWF0c1tpXSwgJ0xJJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGxlbiAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGV0YWNoICYmIHV0aWwuaXNMaXN0Q2VsbChvLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5saXN0Ll9kZXRhY2hOZXN0ZWQuY2FsbCh0aGlzLCByYW5nZUFyci5mKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlclJhbmdlID0gdGhpcy5kZXRhY2hSYW5nZUZvcm1hdEVsZW1lbnQocmFuZ2VBcnIuZlswXS5wYXJlbnROb2RlLCByYW5nZUFyci5mLCB0ZW1wTGlzdCwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvcEVsUGFyZW50ID0gdG9wRWwgPyB0b3BFbC5wYXJlbnROb2RlIDogdG9wRWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbUVsUGFyZW50ID0gYm90dG9tRWwgPyBib3R0b21FbC5wYXJlbnROb2RlIDogYm90dG9tRWw7XHJcbiAgICAgICAgICAgIHRvcEVsID0gdG9wRWxQYXJlbnQgJiYgIXV0aWwuaXNXeXNpd3lnRGl2KHRvcEVsUGFyZW50KSAmJiB0b3BFbFBhcmVudC5ub2RlTmFtZSA9PT0gY29tbWFuZCA/IHRvcEVsUGFyZW50IDogdG9wRWw7XHJcbiAgICAgICAgICAgIGJvdHRvbUVsID0gYm90dG9tRWxQYXJlbnQgJiYgIXV0aWwuaXNXeXNpd3lnRGl2KGJvdHRvbUVsUGFyZW50KSAmJiBib3R0b21FbFBhcmVudC5ub2RlTmFtZSA9PT0gY29tbWFuZCA/IGJvdHRvbUVsUGFyZW50IDogYm90dG9tRWw7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBtZXJnZVRvcCA9IHRvcEVsICYmIHRvcEVsLnRhZ05hbWUgPT09IGNvbW1hbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlQm90dG9tID0gYm90dG9tRWwgJiYgYm90dG9tRWwudGFnTmFtZSA9PT0gY29tbWFuZDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCBsaXN0ID0gbWVyZ2VUb3AgPyB0b3BFbCA6IHV0aWwuY3JlYXRlRWxlbWVudChjb21tYW5kKTtcclxuICAgICAgICAgICAgbGV0IGZpcnN0TGlzdCA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBsYXN0TGlzdCA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCB0b3BOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgYm90dG9tTnVtYmVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBhc3NDb21wb25lbnQgPSBmdW5jdGlvbiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzQ29tcG9uZW50KGN1cnJlbnQpICYmICF0aGlzLmlzTGlzdChjdXJyZW50KTtcclxuICAgICAgICAgICAgfS5iaW5kKHV0aWwpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNlbGVjdGVkRm9ybWF0cy5sZW5ndGgsIG5ld0NlbGwsIGZUYWcsIGlzQ2VsbCwgbmV4dCwgb3JpZ2luUGFyZW50LCBuZXh0UGFyZW50LCBwYXJlbnRUYWcsIHNpYmxpbmdUYWcsIHJhbmdlVGFnOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGZUYWcgPSBzZWxlY3RlZEZvcm1hdHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoZlRhZy5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCAmJiAhdXRpbC5faXNJZ25vcmVOb2RlQ2hhbmdlKGZUYWcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGZUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbmV4dCA9IHNlbGVjdGVkRm9ybWF0c1tpICsgMV07XHJcbiAgICAgICAgICAgICAgICBvcmlnaW5QYXJlbnQgPSBmVGFnLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICBuZXh0UGFyZW50ID0gbmV4dCA/IG5leHQucGFyZW50Tm9kZSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpc0NlbGwgPSB1dGlsLmlzTGlzdENlbGwoZlRhZyk7XHJcbiAgICAgICAgICAgICAgICByYW5nZVRhZyA9IHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQob3JpZ2luUGFyZW50KSA/IG9yaWdpblBhcmVudCA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRUYWcgPSBpc0NlbGwgJiYgIXV0aWwuaXNXeXNpd3lnRGl2KG9yaWdpblBhcmVudCkgPyBvcmlnaW5QYXJlbnQucGFyZW50Tm9kZSA6IG9yaWdpblBhcmVudDtcclxuICAgICAgICAgICAgICAgIHNpYmxpbmdUYWcgPSBpc0NlbGwgJiYgIXV0aWwuaXNXeXNpd3lnRGl2KG9yaWdpblBhcmVudCkgPyAoIW5leHQgfHwgdXRpbC5pc0xpc3RDZWxsKHBhcmVudFRhZykpID8gb3JpZ2luUGFyZW50IDogb3JpZ2luUGFyZW50Lm5leHRTaWJsaW5nIDogZlRhZy5uZXh0U2libGluZztcclxuXHJcbiAgICAgICAgICAgICAgICBuZXdDZWxsID0gdXRpbC5jcmVhdGVFbGVtZW50KCdMSScpO1xyXG4gICAgICAgICAgICAgICAgdXRpbC5jb3B5Rm9ybWF0QXR0cmlidXRlcyhuZXdDZWxsLCBmVGFnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gIDAgJiYgb3JpZ2luUmFuZ2Uuc2MgPT09IGZUYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5SYW5nZS5zYyA9IG5ld0NlbGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gbGVuIC0gMSAmJiBvcmlnaW5SYW5nZS5lYyA9PT0gZlRhZykge1xyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblJhbmdlLmVjID0gbmV3Q2VsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0NvbXBvbmVudChmVGFnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzSFIgPSAvXkhSJC9pLnRlc3QoZlRhZy5ub2RlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0hSKSBuZXdDZWxsLmlubmVySFRNTCA9ICc8YnI+JztcclxuICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLmlubmVySFRNTCArPSBmVGFnLm91dGVySFRNTDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNIUikgbmV3Q2VsbC5pbm5lckhUTUwgKz0gJzxicj4nO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmQ2hpbGRyZW4gPSBmVGFnLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGZDaGlsZHJlblswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLmFwcGVuZENoaWxkKGZDaGlsZHJlblswXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGlzdC5hcHBlbmRDaGlsZChuZXdDZWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIW5leHQpIGxhc3RMaXN0ID0gbGlzdDtcclxuICAgICAgICAgICAgICAgIGlmICghbmV4dCB8fCBwYXJlbnRUYWcgIT09IG5leHRQYXJlbnQgfHwgdXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChzaWJsaW5nVGFnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RMaXN0KSBmaXJzdExpc3QgPSBsaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoIW1lcmdlVG9wIHx8ICFuZXh0IHx8IHBhcmVudFRhZyAhPT0gbmV4dFBhcmVudCkgJiYgIShuZXh0ICYmIHV0aWwuaXNMaXN0KG5leHRQYXJlbnQpICYmIG5leHRQYXJlbnQgPT09IG9yaWdpblBhcmVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QucGFyZW50Tm9kZSAhPT0gcGFyZW50VGFnKSBwYXJlbnRUYWcuaW5zZXJ0QmVmb3JlKGxpc3QsIHNpYmxpbmdUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oZlRhZyk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWVyZ2VUb3AgJiYgdG9wTnVtYmVyID09PSBudWxsKSB0b3BOdW1iZXIgPSBsaXN0LmNoaWxkcmVuLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dCAmJiAodXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQobmV4dFBhcmVudCwgcGFzc0NvbXBvbmVudCkgIT09IHV0aWwuZ2V0UmFuZ2VGb3JtYXRFbGVtZW50KG9yaWdpblBhcmVudCwgcGFzc0NvbXBvbmVudCkgfHwgKHV0aWwuaXNMaXN0KG5leHRQYXJlbnQpICYmIHV0aWwuaXNMaXN0KG9yaWdpblBhcmVudCkgJiYgdXRpbC5nZXRFbGVtZW50RGVwdGgobmV4dFBhcmVudCkgIT09IHV0aWwuZ2V0RWxlbWVudERlcHRoKG9yaWdpblBhcmVudCkpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3QgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoY29tbWFuZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlVGFnICYmIHJhbmdlVGFnLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgdXRpbC5yZW1vdmVJdGVtKHJhbmdlVGFnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRvcE51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgZmlyc3RMaXN0ID0gZmlyc3RMaXN0LmNoaWxkcmVuW3RvcE51bWJlcl07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChtZXJnZUJvdHRvbSkge1xyXG4gICAgICAgICAgICAgICAgYm90dG9tTnVtYmVyID0gbGlzdC5jaGlsZHJlbi5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgbGlzdC5pbm5lckhUTUwgKz0gYm90dG9tRWwuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgbGFzdExpc3QgPSBsaXN0LmNoaWxkcmVuW2JvdHRvbU51bWJlcl07XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oYm90dG9tRWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuZWZmZWN0Tm9kZSA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuICFpc0NvbGxhcHNlZCA/IG9yaWdpblJhbmdlIDogYWZ0ZXJSYW5nZSB8fCBvcmlnaW5SYW5nZTtcclxuICAgIH0sXHJcblxyXG4gICAgX2RldGFjaE5lc3RlZDogZnVuY3Rpb24gKGNlbGxzKSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3QgPSBjZWxsc1swXTtcclxuICAgICAgICBjb25zdCBsYXN0ID0gY2VsbHNbY2VsbHMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgY29uc3QgbmV4dCA9IGxhc3QubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbkxpc3QgPSBmaXJzdC5wYXJlbnROb2RlO1xyXG4gICAgICAgIGNvbnN0IHNpYmxpbmcgPSBvcmlnaW5MaXN0LnBhcmVudE5vZGUubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBvcmlnaW5MaXN0LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSBjZWxscy5sZW5ndGg7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2VsbHNbY10sIHNpYmxpbmcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG5leHQgJiYgb3JpZ2luTGlzdC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0xpc3QgPSBvcmlnaW5MaXN0LmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gb3JpZ2luTGlzdC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudXRpbC5nZXRQb3NpdGlvbkluZGV4KG5leHQpO1xyXG4gICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5baW5kZXhdKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdMaXN0LmFwcGVuZENoaWxkKGNoaWxkcmVuW2luZGV4XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGFzdC5hcHBlbmRDaGlsZChuZXdMaXN0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcmlnaW5MaXN0LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgdGhpcy51dGlsLnJlbW92ZUl0ZW0ob3JpZ2luTGlzdCk7XHJcbiAgICAgICAgdGhpcy51dGlsLm1lcmdlU2FtZVRhZ3MocGFyZW50Tm9kZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLnV0aWwuZ2V0RWRnZUNoaWxkTm9kZXMoZmlyc3QsIGxhc3QpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjYzogZmlyc3QucGFyZW50Tm9kZSxcclxuICAgICAgICAgICAgc2M6IGVkZ2Uuc2MsXHJcbiAgICAgICAgICAgIGVjOiBlZGdlLmVjXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgZWRpdEluc2lkZUxpc3Q6IGZ1bmN0aW9uIChyZW1vdmUsIHNlbGVjdGVkQ2VsbHMpIHtcclxuICAgICAgICBzZWxlY3RlZENlbGxzID0gIXNlbGVjdGVkQ2VsbHMgPyB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHMoKS5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7IHJldHVybiB0aGlzLmlzTGlzdENlbGwoZWwpOyB9LmJpbmQodGhpcy51dGlsKSkgOiBzZWxlY3RlZENlbGxzO1xyXG4gICAgICAgIGNvbnN0IGNlbGxzTGVuID0gc2VsZWN0ZWRDZWxscy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGNlbGxzTGVuID09PSAwIHx8ICghcmVtb3ZlICYmICghdGhpcy51dGlsLmlzTGlzdENlbGwoc2VsZWN0ZWRDZWxsc1swXS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSAmJiAhdGhpcy51dGlsLmlzTGlzdENlbGwoc2VsZWN0ZWRDZWxsc1tjZWxsc0xlbiAtIDFdLm5leHRFbGVtZW50U2libGluZykpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgc2M6IHNlbGVjdGVkQ2VsbHNbMF0sXHJcbiAgICAgICAgICAgICAgICBzbzogMCxcclxuICAgICAgICAgICAgICAgIGVjOiBzZWxlY3RlZENlbGxzW2NlbGxzTGVuIC0gMV0sXHJcbiAgICAgICAgICAgICAgICBlbzogMVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG9yaWdpbkxpc3QgPSBzZWxlY3RlZENlbGxzWzBdLnBhcmVudE5vZGU7XHJcbiAgICAgICAgbGV0IGxhc3RDZWxsID0gc2VsZWN0ZWRDZWxsc1tjZWxsc0xlbiAtIDFdO1xyXG4gICAgICAgIGxldCByYW5nZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChyZW1vdmUpIHtcclxuICAgICAgICAgICAgaWYgKG9yaWdpbkxpc3QgIT09IGxhc3RDZWxsLnBhcmVudE5vZGUgJiYgdGhpcy51dGlsLmlzTGlzdChsYXN0Q2VsbC5wYXJlbnROb2RlLnBhcmVudE5vZGUpICYmIGxhc3RDZWxsLm5leHRFbGVtZW50U2libGluZykge1xyXG4gICAgICAgICAgICAgICAgbGFzdENlbGwgPSBsYXN0Q2VsbC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAobGFzdENlbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENlbGxzLnB1c2gobGFzdENlbGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RDZWxsID0gbGFzdENlbGwubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJhbmdlID0gdGhpcy5wbHVnaW5zLmxpc3QuZWRpdExpc3QuY2FsbCh0aGlzLCBvcmlnaW5MaXN0Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCksIHNlbGVjdGVkQ2VsbHMsIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBpbm5lckxpc3QgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudChvcmlnaW5MaXN0Lm5vZGVOYW1lKTtcclxuICAgICAgICAgICAgbGV0IHByZXYgPSBzZWxlY3RlZENlbGxzWzBdLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgIGxldCBuZXh0ID0gbGFzdENlbGwubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgICAgICBjb25zdCBub2RlUGF0aCA9IHsgczogbnVsbCwgZTogbnVsbCwgc2w6IG9yaWdpbkxpc3QsIGVsOiBvcmlnaW5MaXN0IH07XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2VsbHNMZW4sIGM7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYyA9IHNlbGVjdGVkQ2VsbHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoYy5wYXJlbnROb2RlICE9PSBvcmlnaW5MaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLmxpc3QuX2luc2llZExpc3QuY2FsbCh0aGlzLCBvcmlnaW5MaXN0LCBpbm5lckxpc3QsIHByZXYsIG5leHQsIG5vZGVQYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5MaXN0ID0gYy5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlubmVyTGlzdCA9IHRoaXMudXRpbC5jcmVhdGVFbGVtZW50KG9yaWdpbkxpc3Qubm9kZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBwcmV2ID0gYy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgbmV4dCA9IGMubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgaW5uZXJMaXN0LmFwcGVuZENoaWxkKGMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMubGlzdC5faW5zaWVkTGlzdC5jYWxsKHRoaXMsIG9yaWdpbkxpc3QsIGlubmVyTGlzdCwgcHJldiwgbmV4dCwgbm9kZVBhdGgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2MgPSB0aGlzLnV0aWwuZ2V0Tm9kZUZyb21QYXRoKG5vZGVQYXRoLnMsIG5vZGVQYXRoLnNsKTtcclxuICAgICAgICAgICAgY29uc3QgZWMgPSB0aGlzLnV0aWwuZ2V0Tm9kZUZyb21QYXRoKG5vZGVQYXRoLmUsIG5vZGVQYXRoLmVsKTtcclxuICAgICAgICAgICAgcmFuZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICBzYzogc2MsXHJcbiAgICAgICAgICAgICAgICBzbzogMCxcclxuICAgICAgICAgICAgICAgIGVjOiBlYyxcclxuICAgICAgICAgICAgICAgIGVvOiBlYy50ZXh0Q29udGVudC5sZW5ndGhcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByYW5nZTtcclxuICAgIH0sXHJcblxyXG4gICAgX2luc2llZExpc3Q6IGZ1bmN0aW9uIChvcmlnaW5MaXN0LCBpbm5lckxpc3QsIHByZXYsIG5leHQsIG5vZGVQYXRoKSB7XHJcbiAgICAgICAgbGV0IGluc2VydFByZXYgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHByZXYgJiYgaW5uZXJMaXN0LnRhZ05hbWUgPT09IHByZXYudGFnTmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGlubmVyTGlzdC5jaGlsZHJlbjtcclxuICAgICAgICAgICAgd2hpbGUgKGNoaWxkcmVuWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBwcmV2LmFwcGVuZENoaWxkKGNoaWxkcmVuWzBdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaW5uZXJMaXN0ID0gcHJldjtcclxuICAgICAgICAgICAgaW5zZXJ0UHJldiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobmV4dCAmJiBpbm5lckxpc3QudGFnTmFtZSA9PT0gbmV4dC50YWdOYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gbmV4dC5jaGlsZHJlbjtcclxuICAgICAgICAgICAgd2hpbGUgKGNoaWxkcmVuWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBpbm5lckxpc3QuYXBwZW5kQ2hpbGQoY2hpbGRyZW5bMF0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gbmV4dC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgIG5leHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuZXh0KTtcclxuICAgICAgICAgICAgbmV4dCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWluc2VydFByZXYpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXRpbC5pc0xpc3RDZWxsKHByZXYpKSB7XHJcbiAgICAgICAgICAgICAgICBvcmlnaW5MaXN0ID0gcHJldjtcclxuICAgICAgICAgICAgICAgIG5leHQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBvcmlnaW5MaXN0Lmluc2VydEJlZm9yZShpbm5lckxpc3QsIG5leHQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFub2RlUGF0aC5zKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlUGF0aC5zID0gdGhpcy51dGlsLmdldE5vZGVQYXRoKGlubmVyTGlzdC5maXJzdEVsZW1lbnRDaGlsZC5maXJzdENoaWxkLCBvcmlnaW5MaXN0LCBudWxsKTtcclxuICAgICAgICAgICAgICAgIG5vZGVQYXRoLnNsID0gb3JpZ2luTGlzdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2xQYXRoID0gb3JpZ2luTGlzdC5jb250YWlucyhub2RlUGF0aC5zbCkgPyB0aGlzLnV0aWwuZ2V0Tm9kZVBhdGgobm9kZVBhdGguc2wsIG9yaWdpbkxpc3QpIDogbnVsbDtcclxuICAgICAgICAgICAgbm9kZVBhdGguZSA9IHRoaXMudXRpbC5nZXROb2RlUGF0aChpbm5lckxpc3QubGFzdEVsZW1lbnRDaGlsZC5maXJzdENoaWxkLCBvcmlnaW5MaXN0LCBudWxsKTtcclxuICAgICAgICAgICAgbm9kZVBhdGguZWwgPSBvcmlnaW5MaXN0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy51dGlsLm1lcmdlU2FtZVRhZ3Mob3JpZ2luTGlzdCwgW25vZGVQYXRoLnMsIG5vZGVQYXRoLmUsIHNsUGF0aF0sIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy51dGlsLm1lcmdlTmVzdGVkVGFncyhvcmlnaW5MaXN0KTtcclxuICAgICAgICAgICAgaWYgKHNsUGF0aCkgbm9kZVBhdGguc2wgPSB0aGlzLnV0aWwuZ2V0Tm9kZUZyb21QYXRoKHNsUGF0aCwgb3JpZ2luTGlzdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaW5uZXJMaXN0O1xyXG4gICAgfSxcclxuXHJcbiAgICBwaWNrdXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgICAgICBsZXQgY29tbWFuZCA9ICcnO1xyXG5cclxuICAgICAgICB3aGlsZSAoIWNvbW1hbmQgJiYgIS9eVUwkL2kudGVzdCh0YXJnZXQudGFnTmFtZSkpIHtcclxuICAgICAgICAgICAgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xyXG4gICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY29tbWFuZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMucGx1Z2lucy5saXN0LmVkaXRMaXN0LmNhbGwodGhpcywgY29tbWFuZCwgbnVsbCwgZmFsc2UpO1xyXG4gICAgICAgIGlmIChyYW5nZSkgdGhpcy5zZXRSYW5nZShyYW5nZS5zYywgcmFuZ2Uuc28sIHJhbmdlLmVjLCByYW5nZS5lbyk7XHJcblxyXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG5cclxuICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ3RhYmxlJyxcclxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGxldCBjb250ZXh0VGFibGUgPSBjb250ZXh0LnRhYmxlID0ge1xyXG4gICAgICAgICAgICBfZWxlbWVudDogbnVsbCxcclxuICAgICAgICAgICAgX3RkRWxlbWVudDogbnVsbCxcclxuICAgICAgICAgICAgX3RyRWxlbWVudDogbnVsbCxcclxuICAgICAgICAgICAgX3RyRWxlbWVudHM6IG51bGwsXHJcbiAgICAgICAgICAgIF90YWJsZVhZOiBbXSxcclxuICAgICAgICAgICAgX21heFdpZHRoOiB0cnVlLFxyXG4gICAgICAgICAgICBfZml4ZWRDb2x1bW46IGZhbHNlLFxyXG4gICAgICAgICAgICBfcnRsOiBjb3JlLm9wdGlvbnMucnRsLFxyXG4gICAgICAgICAgICBjZWxsQ29udHJvbGxlclRvcDogY29yZS5vcHRpb25zLnRhYmxlQ2VsbENvbnRyb2xsZXJQb3NpdGlvbiA9PT0gJ3RvcCcsXHJcbiAgICAgICAgICAgIHJlc2l6ZVRleHQ6IG51bGwsXHJcbiAgICAgICAgICAgIGhlYWRlckJ1dHRvbjogbnVsbCxcclxuICAgICAgICAgICAgbWVyZ2VCdXR0b246IG51bGwsXHJcbiAgICAgICAgICAgIHNwbGl0QnV0dG9uOiBudWxsLFxyXG4gICAgICAgICAgICBzcGxpdE1lbnU6IG51bGwsXHJcbiAgICAgICAgICAgIG1heFRleHQ6IGNvcmUubGFuZy5jb250cm9sbGVyLm1heFNpemUsXHJcbiAgICAgICAgICAgIG1pblRleHQ6IGNvcmUubGFuZy5jb250cm9sbGVyLm1pblNpemUsXHJcbiAgICAgICAgICAgIF9waHlzaWNhbF9jZWxsQ250OiAwLFxyXG4gICAgICAgICAgICBfbG9naWNhbF9jZWxsQ250OiAwLFxyXG4gICAgICAgICAgICBfcm93Q250OiAwLFxyXG4gICAgICAgICAgICBfcm93SW5kZXg6IDAsXHJcbiAgICAgICAgICAgIF9waHlzaWNhbF9jZWxsSW5kZXg6IDAsXHJcbiAgICAgICAgICAgIF9sb2dpY2FsX2NlbGxJbmRleDogMCxcclxuICAgICAgICAgICAgX2N1cnJlbnRfY29sU3BhbjogMCxcclxuICAgICAgICAgICAgX2N1cnJlbnRfcm93U3BhbjogMCxcclxuICAgICAgICAgICAgaWNvbnM6IHtcclxuICAgICAgICAgICAgICAgIGV4cGFuc2lvbjogY29yZS5pY29ucy5leHBhbnNpb24sXHJcbiAgICAgICAgICAgICAgICByZWR1Y3Rpb246IGNvcmUuaWNvbnMucmVkdWN0aW9uXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiogc2V0IHN1Ym1lbnUgKi9cclxuICAgICAgICBsZXQgbGlzdERpdiA9IHRoaXMuc2V0U3VibWVudShjb3JlKTtcclxuICAgICAgICBsZXQgdGFibGVQaWNrZXIgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJy5zZS1jb250cm9sbGVyLXRhYmxlLXBpY2tlcicpO1xyXG5cclxuICAgICAgICBjb250ZXh0VGFibGUudGFibGVIaWdobGlnaHQgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJy5zZS10YWJsZS1zaXplLWhpZ2hsaWdodGVkJyk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLnRhYmxlVW5IaWdobGlnaHQgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJy5zZS10YWJsZS1zaXplLXVuaGlnaGxpZ2h0ZWQnKTtcclxuICAgICAgICBjb250ZXh0VGFibGUudGFibGVEaXNwbGF5ID0gbGlzdERpdi5xdWVyeVNlbGVjdG9yKCcuc2UtdGFibGUtc2l6ZS1kaXNwbGF5Jyk7XHJcbiAgICAgICAgaWYgKGNvcmUub3B0aW9ucy5ydGwpIGNvbnRleHRUYWJsZS50YWJsZUhpZ2hsaWdodC5zdHlsZS5sZWZ0ID0gKDEwICogMTggLSAxMykgKyAncHgnO1xyXG5cclxuICAgICAgICAvKiogc2V0IHRhYmxlIGNvbnRyb2xsZXIgKi9cclxuICAgICAgICBsZXQgdGFibGVDb250cm9sbGVyID0gdGhpcy5zZXRDb250cm9sbGVyX3RhYmxlKGNvcmUpO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS50YWJsZUNvbnRyb2xsZXIgPSB0YWJsZUNvbnRyb2xsZXI7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLnJlc2l6ZUJ1dHRvbiA9IHRhYmxlQ29udHJvbGxlci5xdWVyeVNlbGVjdG9yKCcuX3NlX3RhYmxlX3Jlc2l6ZScpO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5yZXNpemVUZXh0ID0gdGFibGVDb250cm9sbGVyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFibGVfcmVzaXplID4gc3BhbiA+IHNwYW4nKTtcclxuICAgICAgICBjb250ZXh0VGFibGUuY29sdW1uRml4ZWRCdXR0b24gPSB0YWJsZUNvbnRyb2xsZXIucXVlcnlTZWxlY3RvcignLl9zZV90YWJsZV9maXhlZF9jb2x1bW4nKTtcclxuICAgICAgICBjb250ZXh0VGFibGUuaGVhZGVyQnV0dG9uID0gdGFibGVDb250cm9sbGVyLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFibGVfaGVhZGVyJyk7XHJcblxyXG4gICAgICAgIC8qKiBzZXQgcmVzaXppbmcgKi9cclxuICAgICAgICBsZXQgcmVzaXplRGl2ID0gdGhpcy5zZXRDb250cm9sbGVyX3RhYmxlRWRpdG9yKGNvcmUsIGNvbnRleHRUYWJsZS5jZWxsQ29udHJvbGxlclRvcCk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLnJlc2l6ZURpdiA9IHJlc2l6ZURpdjtcclxuICAgICAgICBjb250ZXh0VGFibGUuc3BsaXRNZW51ID0gcmVzaXplRGl2LnF1ZXJ5U2VsZWN0b3IoJy5zZS1idG4tZ3JvdXAtc3ViJyk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLm1lcmdlQnV0dG9uID0gcmVzaXplRGl2LnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFibGVfbWVyZ2VfYnV0dG9uJyk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLnNwbGl0QnV0dG9uID0gcmVzaXplRGl2LnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFibGVfc3BsaXRfYnV0dG9uJyk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLmluc2VydFJvd0Fib3ZlQnV0dG9uID0gcmVzaXplRGl2LnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFibGVfaW5zZXJ0X3Jvd19hJyk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLmluc2VydFJvd0JlbG93QnV0dG9uID0gcmVzaXplRGl2LnF1ZXJ5U2VsZWN0b3IoJy5fc2VfdGFibGVfaW5zZXJ0X3Jvd19iJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICB0YWJsZVBpY2tlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlX3RhYmxlUGlja2VyLmJpbmQoY29yZSwgY29udGV4dFRhYmxlKSk7XHJcbiAgICAgICAgdGFibGVQaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmFwcGVuZFRhYmxlLmJpbmQoY29yZSkpO1xyXG4gICAgICAgIHJlc2l6ZURpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25DbGlja190YWJsZUNvbnRyb2xsZXIuYmluZChjb3JlKSk7XHJcbiAgICAgICAgdGFibGVDb250cm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrX3RhYmxlQ29udHJvbGxlci5iaW5kKGNvcmUpKTtcclxuXHJcbiAgICAgICAgLyoqIGFwcGVuZCB0YXJnZXQgYnV0dG9uIG1lbnUgKi9cclxuICAgICAgICBjb3JlLmluaXRNZW51VGFyZ2V0KHRoaXMubmFtZSwgdGFyZ2V0RWxlbWVudCwgbGlzdERpdik7XHJcblxyXG4gICAgICAgIC8qKiBhcHBlbmQgY29udHJvbGxlciAqL1xyXG4gICAgICAgIGNvbnRleHQuZWxlbWVudC5yZWxhdGl2ZS5hcHBlbmRDaGlsZChyZXNpemVEaXYpO1xyXG4gICAgICAgIGNvbnRleHQuZWxlbWVudC5yZWxhdGl2ZS5hcHBlbmRDaGlsZCh0YWJsZUNvbnRyb2xsZXIpO1xyXG5cclxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXHJcbiAgICAgICAgbGlzdERpdiA9IG51bGwsIHRhYmxlUGlja2VyID0gbnVsbCwgcmVzaXplRGl2ID0gbnVsbCwgdGFibGVDb250cm9sbGVyID0gbnVsbCwgY29udGV4dFRhYmxlID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0U3VibWVudTogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb25zdCBsaXN0RGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGxpc3REaXYuY2xhc3NOYW1lID0gJ3NlLXN1Ym1lbnUgc2Utc2VsZWN0b3ItdGFibGUnO1xyXG4gICAgICAgIGxpc3REaXYuaW5uZXJIVE1MID0gJycgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLXRhYmxlLXNpemVcIj4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtdGFibGUtc2l6ZS1waWNrZXIgc2UtY29udHJvbGxlci10YWJsZS1waWNrZXJcIj48L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2UtdGFibGUtc2l6ZS1oaWdobGlnaHRlZFwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS10YWJsZS1zaXplLXVuaGlnaGxpZ2h0ZWRcIj48L2Rpdj4nICtcclxuICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLXRhYmxlLXNpemUtZGlzcGxheVwiPjEgeCAxPC9kaXY+JztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpc3REaXY7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldENvbnRyb2xsZXJfdGFibGU6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcclxuICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XHJcbiAgICAgICAgY29uc3QgdGFibGVSZXNpemUgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIHRhYmxlUmVzaXplLmNsYXNzTmFtZSA9ICdzZS1jb250cm9sbGVyIHNlLWNvbnRyb2xsZXItdGFibGUnO1xyXG4gICAgICAgIHRhYmxlUmVzaXplLmlubmVySFRNTCA9ICcnICtcclxuICAgICAgICAgICAgJzxkaXY+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWJ0bi1ncm91cFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJyZXNpemVcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwIF9zZV90YWJsZV9yZXNpemVcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMuZXhwYW5zaW9uICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5tYXhTaXplICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJsYXlvdXRcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwIF9zZV90YWJsZV9maXhlZF9jb2x1bW5cIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMuZml4ZWRfY29sdW1uX3dpZHRoICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5maXhlZENvbHVtbldpZHRoICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJoZWFkZXJcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwIF9zZV90YWJsZV9oZWFkZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMudGFibGVfaGVhZGVyICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci50YWJsZUhlYWRlciArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwicmVtb3ZlXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucy5kZWxldGUgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLnJlbW92ZSArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzwvZGl2Pic7XHJcblxyXG4gICAgICAgIHJldHVybiB0YWJsZVJlc2l6ZTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0Q29udHJvbGxlcl90YWJsZUVkaXRvcjogZnVuY3Rpb24gKGNvcmUsIGNlbGxDb250cm9sbGVyVG9wKSB7XHJcbiAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcclxuICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XHJcbiAgICAgICAgY29uc3QgdGFibGVSZXNpemUgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgIHRhYmxlUmVzaXplLmNsYXNzTmFtZSA9ICdzZS1jb250cm9sbGVyIHNlLWNvbnRyb2xsZXItdGFibGUtY2VsbCc7XHJcbiAgICAgICAgdGFibGVSZXNpemUuaW5uZXJIVE1MID0gKGNlbGxDb250cm9sbGVyVG9wID8gJycgOiAnPGRpdiBjbGFzcz1cInNlLWFycm93IHNlLWFycm93LXVwXCI+PC9kaXY+JykgK1xyXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWJ0bi1ncm91cFwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImluc2VydFwiIGRhdGEtdmFsdWU9XCJyb3dcIiBkYXRhLW9wdGlvbj1cInVwXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcCBfc2VfdGFibGVfaW5zZXJ0X3Jvd19hXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbnMuaW5zZXJ0X3Jvd19hYm92ZSArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5pbnNlcnRSb3dBYm92ZSArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImluc2VydFwiIGRhdGEtdmFsdWU9XCJyb3dcIiBkYXRhLW9wdGlvbj1cImRvd25cIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwIF9zZV90YWJsZV9pbnNlcnRfcm93X2JcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICBpY29ucy5pbnNlcnRfcm93X2JlbG93ICtcclxuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLmluc2VydFJvd0JlbG93ICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwiZGVsZXRlXCIgZGF0YS12YWx1ZT1cInJvd1wiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXBcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICBpY29ucy5kZWxldGVfcm93ICtcclxuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLmRlbGV0ZVJvdyArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cIm1lcmdlXCIgY2xhc3M9XCJfc2VfdGFibGVfbWVyZ2VfYnV0dG9uIHNlLWJ0biBzZS10b29sdGlwXCIgZGlzYWJsZWQ+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbnMubWVyZ2VfY2VsbCArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5tZXJnZUNlbGxzICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1idG4tZ3JvdXBcIiBzdHlsZT1cInBhZGRpbmctdG9wOiAwO1wiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImluc2VydFwiIGRhdGEtdmFsdWU9XCJjZWxsXCIgZGF0YS1vcHRpb249XCJsZWZ0XCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGljb25zLmluc2VydF9jb2x1bW5fbGVmdCArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5pbnNlcnRDb2x1bW5CZWZvcmUgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJpbnNlcnRcIiBkYXRhLXZhbHVlPVwiY2VsbFwiIGRhdGEtb3B0aW9uPVwicmlnaHRcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbnMuaW5zZXJ0X2NvbHVtbl9yaWdodCArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5pbnNlcnRDb2x1bW5BZnRlciArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cImRlbGV0ZVwiIGRhdGEtdmFsdWU9XCJjZWxsXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGljb25zLmRlbGV0ZV9jb2x1bW4gK1xyXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIuZGVsZXRlQ29sdW1uICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwib25zcGxpdFwiIGNsYXNzPVwiX3NlX3RhYmxlX3NwbGl0X2J1dHRvbiBzZS1idG4gc2UtdG9vbHRpcFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGljb25zLnNwbGl0X2NlbGwgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIuc3BsaXRDZWxscyArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1idG4tZ3JvdXAtc3ViIHN1bi1lZGl0b3ItY29tbW9uIHNlLWxpc3QtbGF5ZXIgc2UtdGFibGUtc3BsaXRcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWxpc3QtaW5uZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJzx1bCBjbGFzcz1cInNlLWxpc3QtYmFzaWNcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgY2xhc3M9XCJzZS1idG4tbGlzdFwiIGRhdGEtY29tbWFuZD1cInNwbGl0XCIgZGF0YS12YWx1ZT1cInZlcnRpY2FsXCIgc3R5bGU9XCJsaW5lLWhlaWdodDozMnB4O1wiIHRpdGxlPVwiJyArIGxhbmcuY29udHJvbGxlci5WZXJ0aWNhbFNwbGl0ICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgbGFuZy5jb250cm9sbGVyLlZlcnRpY2FsU3BsaXQgKyAnXCI+JyArIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmcuY29udHJvbGxlci5WZXJ0aWNhbFNwbGl0ICsgJzwvbGk+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPGxpIGNsYXNzPVwic2UtYnRuLWxpc3RcIiBkYXRhLWNvbW1hbmQ9XCJzcGxpdFwiIGRhdGEtdmFsdWU9XCJob3Jpem9udGFsXCIgc3R5bGU9XCJsaW5lLWhlaWdodDozMnB4O1wiIHRpdGxlPVwiJyArIGxhbmcuY29udHJvbGxlci5Ib3Jpem9udGFsU3BsaXQgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBsYW5nLmNvbnRyb2xsZXIuSG9yaXpvbnRhbFNwbGl0ICsgJ1wiPicgKyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nLmNvbnRyb2xsZXIuSG9yaXpvbnRhbFNwbGl0ICsgJzwvbGk+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICc8L3VsPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgJzwvZGl2Pic7XHJcblxyXG4gICAgICAgIHJldHVybiB0YWJsZVJlc2l6ZTtcclxuICAgIH0sXHJcblxyXG4gICAgYXBwZW5kVGFibGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBvVGFibGUgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnVEFCTEUnKTtcclxuICAgICAgICBjb25zdCBjcmVhdGVDZWxscyA9IHRoaXMucGx1Z2lucy50YWJsZS5jcmVhdGVDZWxscztcclxuXHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMuY29udGV4dC50YWJsZS5fdGFibGVYWVswXTtcclxuICAgICAgICBsZXQgeSA9IHRoaXMuY29udGV4dC50YWJsZS5fdGFibGVYWVsxXTtcclxuICAgICAgICBsZXQgdGFibGVIVE1MID0gJzx0Ym9keT4nO1xyXG4gICAgICAgIHdoaWxlICh5ID4gMCkge1xyXG4gICAgICAgICAgICB0YWJsZUhUTUwgKz0gJzx0cj4nICsgY3JlYXRlQ2VsbHMuY2FsbCh0aGlzLCAndGQnLCB4KSArICc8L3RyPic7XHJcbiAgICAgICAgICAgIC0teTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGFibGVIVE1MICs9ICc8L3Rib2R5Pic7XHJcbiAgICAgICAgb1RhYmxlLmlubmVySFRNTCA9IHRhYmxlSFRNTDtcclxuXHJcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuaW5zZXJ0Q29tcG9uZW50KG9UYWJsZSwgZmFsc2UsIHRydWUsIGZhbHNlKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdFRkID0gb1RhYmxlLnF1ZXJ5U2VsZWN0b3IoJ3RkIGRpdicpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFJhbmdlKGZpcnN0VGQsIDAsIGZpcnN0VGQsIDApO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMudGFibGUucmVzZXRfdGFibGVfcGlja2VyLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjcmVhdGVDZWxsczogZnVuY3Rpb24gKG5vZGVOYW1lLCBjbnQsIHJldHVybkVsZW1lbnQpIHtcclxuICAgICAgICBub2RlTmFtZSA9IG5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIGlmICghcmV0dXJuRWxlbWVudCkge1xyXG4gICAgICAgICAgICBsZXQgY2VsbHNIVE1MID0gJyc7XHJcbiAgICAgICAgICAgIHdoaWxlIChjbnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjZWxsc0hUTUwgKz0gJzwnICtub2RlTmFtZSArICc+PGRpdj48YnI+PC9kaXY+PC8nICsgbm9kZU5hbWUgKyAnPic7XHJcbiAgICAgICAgICAgICAgICBjbnQtLTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY2VsbHNIVE1MO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudChub2RlTmFtZSk7XHJcbiAgICAgICAgICAgIGNlbGwuaW5uZXJIVE1MID0gJzxkaXY+PGJyPjwvZGl2Pic7XHJcbiAgICAgICAgICAgIHJldHVybiBjZWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgb25Nb3VzZU1vdmVfdGFibGVQaWNrZXI6IGZ1bmN0aW9uIChjb250ZXh0VGFibGUsIGUpIHtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICBsZXQgeCA9IHRoaXMuX3cuTWF0aC5jZWlsKGUub2Zmc2V0WCAvIDE4KTtcclxuICAgICAgICBsZXQgeSA9IHRoaXMuX3cuTWF0aC5jZWlsKGUub2Zmc2V0WSAvIDE4KTtcclxuICAgICAgICB4ID0geCA8IDEgPyAxIDogeDtcclxuICAgICAgICB5ID0geSA8IDEgPyAxIDogeTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoY29udGV4dFRhYmxlLl9ydGwpIHtcclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLnRhYmxlSGlnaGxpZ2h0LnN0eWxlLmxlZnQgPSAoeCAqIDE4IC0gMTMpICsgJ3B4JztcclxuICAgICAgICAgICAgeCA9IDExIC0geDtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29udGV4dFRhYmxlLnRhYmxlSGlnaGxpZ2h0LnN0eWxlLndpZHRoID0geCArICdlbSc7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLnRhYmxlSGlnaGxpZ2h0LnN0eWxlLmhlaWdodCA9IHkgKyAnZW0nO1xyXG5cclxuICAgICAgICAvLyBsZXQgeF91ID0geCA8IDUgPyA1IDogKHggPiA5ID8gMTAgOiB4ICsgMSk7XHJcbiAgICAgICAgLy8gbGV0IHlfdSA9IHkgPCA1ID8gNSA6ICh5ID4gOSA/IDEwIDogeSArIDEpO1xyXG4gICAgICAgIC8vIGNvbnRleHRUYWJsZS50YWJsZVVuSGlnaGxpZ2h0LnN0eWxlLndpZHRoID0geF91ICsgJ2VtJztcclxuICAgICAgICAvLyBjb250ZXh0VGFibGUudGFibGVVbkhpZ2hsaWdodC5zdHlsZS5oZWlnaHQgPSB5X3UgKyAnZW0nO1xyXG5cclxuICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KGNvbnRleHRUYWJsZS50YWJsZURpc3BsYXksIHggKyAnIHggJyArIHkpO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5fdGFibGVYWSA9IFt4LCB5XTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVzZXRfdGFibGVfcGlja2VyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQudGFibGUudGFibGVIaWdobGlnaHQpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0ID0gdGhpcy5jb250ZXh0LnRhYmxlLnRhYmxlSGlnaGxpZ2h0LnN0eWxlO1xyXG4gICAgICAgIGNvbnN0IHVuSGlnaGxpZ2h0ID0gdGhpcy5jb250ZXh0LnRhYmxlLnRhYmxlVW5IaWdobGlnaHQuc3R5bGU7XHJcblxyXG4gICAgICAgIGhpZ2hsaWdodC53aWR0aCA9ICcxZW0nO1xyXG4gICAgICAgIGhpZ2hsaWdodC5oZWlnaHQgPSAnMWVtJztcclxuICAgICAgICB1bkhpZ2hsaWdodC53aWR0aCA9ICcxMGVtJztcclxuICAgICAgICB1bkhpZ2hsaWdodC5oZWlnaHQgPSAnMTBlbSc7XHJcblxyXG4gICAgICAgIHRoaXMudXRpbC5jaGFuZ2VUeHQodGhpcy5jb250ZXh0LnRhYmxlLnRhYmxlRGlzcGxheSwgJzEgeCAxJyk7XHJcbiAgICAgICAgdGhpcy5zdWJtZW51T2ZmKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0VGFibGUgPSB0aGlzLmNvbnRleHQudGFibGU7XHJcbiAgICAgICAgY29uc3QgdGFibGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMudGFibGU7XHJcblxyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9yZW1vdmVFdmVudHMuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKHRhYmxlUGx1Z2luLl9zZWxlY3RlZFRhYmxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSB0YWJsZVBsdWdpbi5fc2VsZWN0ZWRUYWJsZS5xdWVyeVNlbGVjdG9yQWxsKCcuc2UtdGFibGUtc2VsZWN0ZWQtY2VsbCcpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRDZWxscy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHNlbGVjdGVkQ2VsbHNbaV0sICdzZS10YWJsZS1zZWxlY3RlZC1jZWxsJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRhYmxlUGx1Z2luLl90b2dnbGVFZGl0b3IuY2FsbCh0aGlzLCB0cnVlKTtcclxuXHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9lbGVtZW50ID0gbnVsbDtcclxuICAgICAgICBjb250ZXh0VGFibGUuX3RkRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl90ckVsZW1lbnQgPSBudWxsO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5fdHJFbGVtZW50cyA9IG51bGw7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl90YWJsZVhZID0gW107XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9tYXhXaWR0aCA9IHRydWU7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9maXhlZENvbHVtbiA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5fcGh5c2ljYWxfY2VsbENudCA9IDA7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9sb2dpY2FsX2NlbGxDbnQgPSAwO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5fcm93Q250ID0gMDtcclxuICAgICAgICBjb250ZXh0VGFibGUuX3Jvd0luZGV4ID0gMDtcclxuICAgICAgICBjb250ZXh0VGFibGUuX3BoeXNpY2FsX2NlbGxJbmRleCA9IDA7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9sb2dpY2FsX2NlbGxJbmRleCA9IDA7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9jdXJyZW50X2NvbFNwYW4gPSAwO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5fY3VycmVudF9yb3dTcGFuID0gMDtcclxuXHJcbiAgICAgICAgdGFibGVQbHVnaW4uX3NoaWZ0ID0gZmFsc2U7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uX3NlbGVjdGVkQ2VsbHMgPSBudWxsO1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9zZWxlY3RlZFRhYmxlID0gbnVsbDtcclxuICAgICAgICB0YWJsZVBsdWdpbi5fcmVmID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGFibGVQbHVnaW4uX2ZpeGVkQ2VsbCA9IG51bGw7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uX3NlbGVjdGVkQ2VsbCA9IG51bGw7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uX2ZpeGVkQ2VsbE5hbWUgPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiogdGFibGUgZWRpdCBjb250cm9sbGVyICovXHJcbiAgICBjYWxsX2NvbnRyb2xsZXJfdGFibGVFZGl0OiBmdW5jdGlvbiAodGRFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgdGFibGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMudGFibGU7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRhYmxlID0gdGhpcy5jb250ZXh0LnRhYmxlO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQgJiYgIXRhYmxlUGx1Z2luLl9zZWxlY3RlZENlbGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGRFbGVtZW50LCAnc2UtdGFibGUtc2VsZWN0ZWQtY2VsbCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSBjb250ZXh0VGFibGUuX2VsZW1lbnQgfHwgdGhpcy5wbHVnaW5zLnRhYmxlLl9zZWxlY3RlZFRhYmxlIHx8IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KHRkRWxlbWVudCwgJ1RBQkxFJyk7XHJcbiAgICAgICAgY29udGV4dFRhYmxlLl9tYXhXaWR0aCA9IHRoaXMudXRpbC5oYXNDbGFzcyh0YWJsZUVsZW1lbnQsICdzZS10YWJsZS1zaXplLTEwMCcpIHx8IHRhYmxlRWxlbWVudC5zdHlsZS53aWR0aCA9PT0gJzEwMCUnIHx8ICghdGFibGVFbGVtZW50LnN0eWxlLndpZHRoICYmICF0aGlzLnV0aWwuaGFzQ2xhc3ModGFibGVFbGVtZW50LCAnc2UtdGFibGUtc2l6ZS1hdXRvJykpO1xyXG4gICAgICAgIGNvbnRleHRUYWJsZS5fZml4ZWRDb2x1bW4gPSB0aGlzLnV0aWwuaGFzQ2xhc3ModGFibGVFbGVtZW50LCAnc2UtdGFibGUtbGF5b3V0LWZpeGVkJykgfHwgdGFibGVFbGVtZW50LnN0eWxlLnRhYmxlTGF5b3V0ID09PSAnZml4ZWQnO1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLnNldFRhYmxlU3R5bGUuY2FsbCh0aGlzLCBjb250ZXh0VGFibGUuX21heFdpZHRoID8gJ3dpZHRofGNvbHVtbicgOiAnd2lkdGgnKTtcclxuICAgICAgICBcclxuICAgICAgICB0YWJsZVBsdWdpbi5zZXRQb3NpdGlvbkNvbnRyb2xsZXJUb3AuY2FsbCh0aGlzLCB0YWJsZUVsZW1lbnQpO1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLnNldFBvc2l0aW9uQ29udHJvbGxlckRpdi5jYWxsKHRoaXMsIHRkRWxlbWVudCwgdGFibGVQbHVnaW4uX3NoaWZ0KTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIXRhYmxlUGx1Z2luLl9zaGlmdCkgdGhpcy5jb250cm9sbGVyc09uKGNvbnRleHRUYWJsZS5yZXNpemVEaXYsIGNvbnRleHRUYWJsZS50YWJsZUNvbnRyb2xsZXIsIHRhYmxlUGx1Z2luLmluaXQuYmluZCh0aGlzKSwgdGRFbGVtZW50LCAndGFibGUnKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0UG9zaXRpb25Db250cm9sbGVyVG9wOiBmdW5jdGlvbiAodGFibGVFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5zZXRDb250cm9sbGVyUG9zaXRpb24odGhpcy5jb250ZXh0LnRhYmxlLnRhYmxlQ29udHJvbGxlciwgdGFibGVFbGVtZW50LCAndG9wJywge2xlZnQ6IDAsIHRvcDogMH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRQb3NpdGlvbkNvbnRyb2xsZXJEaXY6IGZ1bmN0aW9uICh0ZEVsZW1lbnQsIHJlc2V0KSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRhYmxlID0gdGhpcy5jb250ZXh0LnRhYmxlO1xyXG4gICAgICAgIGNvbnN0IHJlc2l6ZURpdiA9IGNvbnRleHRUYWJsZS5yZXNpemVEaXY7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnRhYmxlLnNldENlbGxJbmZvLmNhbGwodGhpcywgdGRFbGVtZW50LCByZXNldCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGNvbnRleHRUYWJsZS5jZWxsQ29udHJvbGxlclRvcCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xsZXJQb3NpdGlvbihyZXNpemVEaXYsIGNvbnRleHRUYWJsZS5fZWxlbWVudCwgJ3RvcCcsIHtsZWZ0OiBjb250ZXh0VGFibGUudGFibGVDb250cm9sbGVyLm9mZnNldFdpZHRoLCB0b3A6IDB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xsZXJQb3NpdGlvbihyZXNpemVEaXYsIHRkRWxlbWVudCwgJ2JvdHRvbScsIHtsZWZ0OiAwLCB0b3A6IDB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNldENlbGxJbmZvOiBmdW5jdGlvbiAodGRFbGVtZW50LCByZXNldCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRUYWJsZSA9IHRoaXMuY29udGV4dC50YWJsZTtcclxuICAgICAgICBjb25zdCB0YWJsZSA9IGNvbnRleHRUYWJsZS5fZWxlbWVudCA9IHRoaXMucGx1Z2lucy50YWJsZS5fc2VsZWN0ZWRUYWJsZSB8fCB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudCh0ZEVsZW1lbnQsICdUQUJMRScpO1xyXG5cclxuICAgICAgICBpZiAoL1RIRUFEL2kudGVzdCh0YWJsZS5maXJzdEVsZW1lbnRDaGlsZC5ub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGNvbnRleHRUYWJsZS5oZWFkZXJCdXR0b24sICdhY3RpdmUnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MoY29udGV4dFRhYmxlLmhlYWRlckJ1dHRvbiwgJ2FjdGl2ZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc2V0IHx8IGNvbnRleHRUYWJsZS5fcGh5c2ljYWxfY2VsbENudCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dFRhYmxlLl90ZEVsZW1lbnQgIT09IHRkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dFRhYmxlLl90ZEVsZW1lbnQgPSB0ZEVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0VGFibGUuX3RyRWxlbWVudCA9IHRkRWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByb3dzID0gY29udGV4dFRhYmxlLl90ckVsZW1lbnRzID0gdGFibGUucm93cztcclxuICAgICAgICAgICAgY29uc3QgY2VsbEluZGV4ID0gdGRFbGVtZW50LmNlbGxJbmRleDtcclxuXHJcbiAgICAgICAgICAgIGxldCBjZWxsQ250ID0gMDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGNlbGxzID0gcm93c1swXS5jZWxscywgbGVuID0gcm93c1swXS5jZWxscy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY2VsbENudCArPSBjZWxsc1tpXS5jb2xTcGFuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyByb3cgY250LCByb3cgaW5kZXhcclxuICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBjb250ZXh0VGFibGUuX3Jvd0luZGV4ID0gY29udGV4dFRhYmxlLl90ckVsZW1lbnQucm93SW5kZXg7XHJcbiAgICAgICAgICAgIGNvbnRleHRUYWJsZS5fcm93Q250ID0gcm93cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAvLyBjZWxsIGNudCwgcGh5c2ljYWwgY2VsbCBpbmRleFxyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUuX3BoeXNpY2FsX2NlbGxDbnQgPSBjb250ZXh0VGFibGUuX3RyRWxlbWVudC5jZWxscy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnRleHRUYWJsZS5fbG9naWNhbF9jZWxsQ250ID0gY2VsbENudDtcclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLl9waHlzaWNhbF9jZWxsSW5kZXggPSBjZWxsSW5kZXg7XHJcblxyXG4gICAgICAgICAgICAvLyBzcGFuXHJcbiAgICAgICAgICAgIGNvbnRleHRUYWJsZS5fY3VycmVudF9jb2xTcGFuID0gY29udGV4dFRhYmxlLl90ZEVsZW1lbnQuY29sU3BhbiAtIDE7XHJcbiAgICAgICAgICAgIGNvbnRleHRUYWJsZS5fY3VycmVudF9yb3dTcGFuIC0gY29udGV4dFRhYmxlLl90ckVsZW1lbnQuY2VsbHNbY2VsbEluZGV4XS5yb3dTcGFuIC0gMTtcclxuXHJcbiAgICAgICAgICAgIC8vIGZpbmQgbG9nY2FsIGNlbGwgaW5kZXhcclxuICAgICAgICAgICAgbGV0IHJvd1NwYW5BcnIgPSBbXTtcclxuICAgICAgICAgICAgbGV0IHNwYW5JbmRleCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgY2VsbHMsIGNvbFNwYW47IGkgPD0gcm93SW5kZXg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY2VsbHMgPSByb3dzW2ldLmNlbGxzO1xyXG4gICAgICAgICAgICAgICAgY29sU3BhbiA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IGNlbGxzLmxlbmd0aCwgY2VsbCwgY3MsIHJzLCBsb2djYWxJbmRleDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxsc1tjXTtcclxuICAgICAgICAgICAgICAgICAgICBjcyA9IGNlbGwuY29sU3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgcnMgPSBjZWxsLnJvd1NwYW4gLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2NhbEluZGV4ID0gYyArIGNvbFNwYW47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzcGFuSW5kZXgubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByID0gMCwgYXJyOyByIDwgc3BhbkluZGV4Lmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIgPSBzcGFuSW5kZXhbcl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLnJvdyA+IGkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2NhbEluZGV4ID49IGFyci5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gKz0gYXJyLmNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2NhbEluZGV4ICs9IGFyci5jcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucnMgLT0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucm93ID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5ycyA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbkluZGV4LnNwbGljZShyLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSBjTGVuIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5ycyAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5yb3cgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLnJzIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXguc3BsaWNlKHIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBsb2djYWwgY2VsbCBpbmRleFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSByb3dJbmRleCAmJiBjID09PSBjZWxsSW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFRhYmxlLl9sb2dpY2FsX2NlbGxJbmRleCA9IGxvZ2NhbEluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycyA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93U3BhbkFyci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBsb2djYWxJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzOiBjcyArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByczogcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IC0xXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuICs9IGNzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNwYW5JbmRleCA9IHNwYW5JbmRleC5jb25jYXQocm93U3BhbkFycikuc29ydChmdW5jdGlvbiAoYSwgYikge3JldHVybiBhLmluZGV4IC0gYi5pbmRleDt9KTtcclxuICAgICAgICAgICAgICAgIHJvd1NwYW5BcnIgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcm93U3BhbkFyciA9IG51bGw7XHJcbiAgICAgICAgICAgIHNwYW5JbmRleCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlZGl0VGFibGU6IGZ1bmN0aW9uICh0eXBlLCBvcHRpb24pIHtcclxuICAgICAgICBjb25zdCB0YWJsZVBsdWdpbiA9IHRoaXMucGx1Z2lucy50YWJsZTtcclxuICAgICAgICBjb25zdCBjb250ZXh0VGFibGUgPSB0aGlzLmNvbnRleHQudGFibGU7XHJcbiAgICAgICAgY29uc3QgdGFibGUgPSBjb250ZXh0VGFibGUuX2VsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgaXNSb3cgPSB0eXBlID09PSAncm93JztcclxuXHJcbiAgICAgICAgaWYgKGlzUm93KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlQXR0ciA9IGNvbnRleHRUYWJsZS5fdHJFbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGlmICgvXlRIRUFEJC9pLnRlc3QodGFibGVBdHRyLm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbiA9PT0gJ3VwJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRhYmxlQXR0ci5uZXh0RWxlbWVudFNpYmxpbmcgfHwgIS9eVEJPRFkkL2kudGVzdCh0YWJsZUF0dHIubmV4dEVsZW1lbnRTaWJsaW5nLm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlLmlubmVySFRNTCArPSAnPHRib2R5Pjx0cj4nICsgdGFibGVQbHVnaW4uY3JlYXRlQ2VsbHMuY2FsbCh0aGlzLCAndGQnLCBjb250ZXh0VGFibGUuX2xvZ2ljYWxfY2VsbENudCwgZmFsc2UpICsgJzwvdHI+PC90Ym9keT4nO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbXVsdGlcclxuICAgICAgICBpZiAodGFibGVQbHVnaW4uX3JlZikge1xyXG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbkNlbGwgPSBjb250ZXh0VGFibGUuX3RkRWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IHRhYmxlUGx1Z2luLl9zZWxlY3RlZENlbGxzO1xyXG4gICAgICAgICAgICAvLyBtdWx0aSAtIHJvd1xyXG4gICAgICAgICAgICBpZiAoaXNSb3cpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSByb3dcclxuICAgICAgICAgICAgICAgIGlmICghb3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJvdyA9IHNlbGVjdGVkQ2VsbHNbMF0ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVDZWxscyA9IFtzZWxlY3RlZENlbGxzWzBdXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDEsIGxlbiA9IHNlbGVjdGVkQ2VsbHMubGVuZ3RoLCBjZWxsOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbCA9IHNlbGVjdGVkQ2VsbHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgIT09IGNlbGwucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2VsbHMucHVzaChjZWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9IGNlbGwucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJlbW92ZUNlbGxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLnNldENlbGxJbmZvLmNhbGwodGhpcywgcmVtb3ZlQ2VsbHNbaV0sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5lZGl0Um93LmNhbGwodGhpcywgb3B0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBlZGl0IHJvd1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLnNldENlbGxJbmZvLmNhbGwodGhpcywgb3B0aW9uID09PSAndXAnID8gc2VsZWN0ZWRDZWxsc1swXSA6IHNlbGVjdGVkQ2VsbHNbc2VsZWN0ZWRDZWxscy5sZW5ndGggLSAxXSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uZWRpdFJvdy5jYWxsKHRoaXMsIG9wdGlvbiwgcG9zaXRpb25DZWxsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbXVsdGkgLSBjZWxsXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvdyA9IHNlbGVjdGVkQ2VsbHNbMF0ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBjZWxsXHJcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUNlbGxzID0gW3NlbGVjdGVkQ2VsbHNbMF1dO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxLCBsZW4gPSBzZWxlY3RlZENlbGxzLmxlbmd0aCwgY2VsbDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgPSBzZWxlY3RlZENlbGxzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RSb3cgPT09IGNlbGwucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2VsbHMucHVzaChjZWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmVtb3ZlQ2VsbHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uc2V0Q2VsbEluZm8uY2FsbCh0aGlzLCByZW1vdmVDZWxsc1tpXSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLmVkaXRDZWxsLmNhbGwodGhpcywgb3B0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBlZGl0IGNlbGxcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmlnaHRDZWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNlbGVjdGVkQ2VsbHMubGVuZ3RoIC0gMTsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdFJvdyAhPT0gc2VsZWN0ZWRDZWxsc1tpICsgMV0ucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRDZWxsID0gc2VsZWN0ZWRDZWxsc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5zZXRDZWxsSW5mby5jYWxsKHRoaXMsIG9wdGlvbiA9PT0gJ2xlZnQnID8gc2VsZWN0ZWRDZWxsc1swXSA6IHJpZ2h0Q2VsbCB8fCBzZWxlY3RlZENlbGxzWzBdLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5lZGl0Q2VsbC5jYWxsKHRoaXMsIG9wdGlvbiwgcG9zaXRpb25DZWxsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFvcHRpb24pIHRhYmxlUGx1Z2luLmluaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9IC8vIG9uZVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0YWJsZVBsdWdpbltpc1JvdyA/ICdlZGl0Um93JyA6ICdlZGl0Q2VsbCddLmNhbGwodGhpcywgb3B0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFmdGVyIHJlbW92ZVxyXG4gICAgICAgIGlmICghb3B0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGFibGUuY2hpbGRyZW47XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlSXRlbShjaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGFibGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB0aGlzLnV0aWwucmVtb3ZlSXRlbSh0YWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlZGl0Um93OiBmdW5jdGlvbiAob3B0aW9uLCBwb3NpdGlvblJlc2V0RWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRUYWJsZSA9IHRoaXMuY29udGV4dC50YWJsZTtcclxuICAgICAgICBjb25zdCByZW1vdmUgPSAhb3B0aW9uO1xyXG5cclxuICAgICAgICBjb25zdCB1cCA9IG9wdGlvbiA9PT0gJ3VwJztcclxuICAgICAgICBjb25zdCBvcmlnaW5Sb3dJbmRleCA9IGNvbnRleHRUYWJsZS5fcm93SW5kZXg7XHJcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSByZW1vdmUgfHwgdXAgPyBvcmlnaW5Sb3dJbmRleCA6IG9yaWdpblJvd0luZGV4ICsgY29udGV4dFRhYmxlLl9jdXJyZW50X3Jvd1NwYW4gKyAxO1xyXG4gICAgICAgIGNvbnN0IHNpZ24gPSByZW1vdmUgPyAtMSA6IDE7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3Qgcm93cyA9IGNvbnRleHRUYWJsZS5fdHJFbGVtZW50cztcclxuICAgICAgICBsZXQgY2VsbENudCA9IGNvbnRleHRUYWJsZS5fbG9naWNhbF9jZWxsQ250O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gb3JpZ2luUm93SW5kZXggKyAocmVtb3ZlID8gLTEgOiAwKSwgY2VsbDsgaSA8PSBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjZWxsID0gcm93c1tpXS5jZWxscztcclxuICAgICAgICAgICAgaWYgKGNlbGwubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IGNlbGwubGVuZ3RoLCBycywgY3M7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgIHJzID0gY2VsbFtjXS5yb3dTcGFuO1xyXG4gICAgICAgICAgICAgICAgY3MgPSBjZWxsW2NdLmNvbFNwYW47XHJcbiAgICAgICAgICAgICAgICBpZiAocnMgPCAyICYmIGNzIDwgMikgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJzICsgaSA+IHJvd0luZGV4ICYmIHJvd0luZGV4ID4gaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGxbY10ucm93U3BhbiA9IHJzICsgc2lnbjtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsQ250IC09IGNzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVtb3ZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSByb3dzW29yaWdpblJvd0luZGV4ICsgMV07XHJcbiAgICAgICAgICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuQ2VsbHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGxldCBjZWxscyA9IHJvd3Nbb3JpZ2luUm93SW5kZXhdLmNlbGxzO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbFNwYW4gPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjZWxscy5sZW5ndGgsIGNlbGwsIGxvZ2NhbEluZGV4OyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsID0gY2VsbHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nY2FsSW5kZXggPSBpICsgY29sU3BhbjtcclxuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuICs9IGNlbGwuY29sU3BhbiAtIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLnJvd1NwYW4gPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwucm93U3BhbiAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuQ2VsbHMucHVzaCh7Y2VsbDogY2VsbC5jbG9uZU5vZGUoZmFsc2UpLCBpbmRleDogbG9nY2FsSW5kZXh9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNwYW5DZWxscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNwYW5DZWxsID0gc3BhbkNlbGxzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbHMgPSBuZXh0LmNlbGxzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2VsbHMubGVuZ3RoLCBjZWxsLCBsb2djYWxJbmRleDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxsc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nY2FsSW5kZXggPSBpICsgY29sU3BhbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sU3BhbiArPSBjZWxsLmNvbFNwYW4gLSAxO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2djYWxJbmRleCA+PSBzcGFuQ2VsbC5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tLCBjb2xTcGFuLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xTcGFuICs9IHNwYW5DZWxsLmNlbGwuY29sU3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Lmluc2VydEJlZm9yZShzcGFuQ2VsbC5jZWxsLCBjZWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5DZWxsID0gc3BhbkNlbGxzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNwYW5DZWxsKSBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNwYW5DZWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuYXBwZW5kQ2hpbGQoc3BhbkNlbGwuY2VsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzcGFuQ2VsbHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuYXBwZW5kQ2hpbGQoc3BhbkNlbGxzW2ldLmNlbGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUuX2VsZW1lbnQuZGVsZXRlUm93KHJvd0luZGV4KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdSb3cgPSBjb250ZXh0VGFibGUuX2VsZW1lbnQuaW5zZXJ0Um93KHJvd0luZGV4KTtcclxuICAgICAgICAgICAgbmV3Um93LmlubmVySFRNTCA9IHRoaXMucGx1Z2lucy50YWJsZS5jcmVhdGVDZWxscy5jYWxsKHRoaXMsICd0ZCcsIGNlbGxDbnQsIGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVtb3ZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy50YWJsZS5zZXRQb3NpdGlvbkNvbnRyb2xsZXJEaXYuY2FsbCh0aGlzLCBwb3NpdGlvblJlc2V0RWxlbWVudCB8fCBjb250ZXh0VGFibGUuX3RkRWxlbWVudCwgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZWRpdENlbGw6IGZ1bmN0aW9uIChvcHRpb24sIHBvc2l0aW9uUmVzZXRFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRhYmxlID0gdGhpcy5jb250ZXh0LnRhYmxlO1xyXG4gICAgICAgIGNvbnN0IHV0aWwgPSB0aGlzLnV0aWw7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlID0gIW9wdGlvbjtcclxuXHJcbiAgICAgICAgY29uc3QgbGVmdCA9IG9wdGlvbiA9PT0gJ2xlZnQnO1xyXG4gICAgICAgIGNvbnN0IGNvbFNwYW4gPSBjb250ZXh0VGFibGUuX2N1cnJlbnRfY29sU3BhbjtcclxuICAgICAgICBjb25zdCBjZWxsSW5kZXggPSByZW1vdmUgfHwgbGVmdCA/IGNvbnRleHRUYWJsZS5fbG9naWNhbF9jZWxsSW5kZXggOiBjb250ZXh0VGFibGUuX2xvZ2ljYWxfY2VsbEluZGV4ICsgY29sU3BhbiArIDE7XHJcblxyXG4gICAgICAgIGNvbnN0IHJvd3MgPSBjb250ZXh0VGFibGUuX3RyRWxlbWVudHM7XHJcbiAgICAgICAgbGV0IHJvd1NwYW5BcnIgPSBbXTtcclxuICAgICAgICBsZXQgc3BhbkluZGV4ID0gW107XHJcbiAgICAgICAgbGV0IHBhc3NDZWxsID0gMDtcclxuICAgICAgICBjb25zdCByZW1vdmVDZWxsID0gW107XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlU3BhbkFyciA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY29udGV4dFRhYmxlLl9yb3dDbnQsIHJvdywgaW5zZXJ0SW5kZXgsIGNlbGxzLCBuZXdDZWxsLCBhcHBseVNwYW4sIGNlbGxDb2xTcGFuOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgcm93ID0gcm93c1tpXTtcclxuICAgICAgICAgICAgaW5zZXJ0SW5kZXggPSBjZWxsSW5kZXg7XHJcbiAgICAgICAgICAgIGFwcGx5U3BhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjZWxscyA9IHJvdy5jZWxscztcclxuICAgICAgICAgICAgY2VsbENvbFNwYW4gPSAwO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNlbGwsIGNMZW4gPSBjZWxscy5sZW5ndGgsIHJzLCBjcywgcmVtb3ZlSW5kZXg7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxsc1tjXTtcclxuICAgICAgICAgICAgICAgIGlmICghY2VsbCkgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgcnMgPSBjZWxsLnJvd1NwYW4gLSAxO1xyXG4gICAgICAgICAgICAgICAgY3MgPSBjZWxsLmNvbFNwYW4gLSAxO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghcmVtb3ZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj0gaW5zZXJ0SW5kZXgpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjcyA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3NDZWxsIDwgMSAmJiBjcyArIGMgPj0gaW5zZXJ0SW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY29sU3BhbiArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0SW5kZXggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc0NlbGwgPSBycyArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0SW5kZXggLT0gY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFwcGx5U3Bhbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByID0gMCwgYXJyOyByIDwgc3BhbkluZGV4Lmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIgPSBzcGFuSW5kZXhbcl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRJbmRleCAtPSBhcnIuY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucnMgLT0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnIucnMgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbkluZGV4LnNwbGljZShyLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBseVNwYW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSW5kZXggPSBjICsgY2VsbENvbFNwYW47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzcGFuSW5kZXgubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q2VsbCA9ICFjZWxsc1tjICsgMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHIgPSAwLCBhcnI7IHIgPCBzcGFuSW5kZXgubGVuZ3RoOyByKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyciA9IHNwYW5JbmRleFtyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnIucm93ID4gaSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbW92ZUluZGV4ID49IGFyci5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxDb2xTcGFuICs9IGFyci5jcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVJbmRleCA9IGMgKyBjZWxsQ29sU3BhbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucnMgLT0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucm93ID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5ycyA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbkluZGV4LnNwbGljZShyLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0Q2VsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5ycyAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5yb3cgPSBpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLnJzIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXguc3BsaWNlKHIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocnMgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1NwYW5BcnIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByczogcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjczogY3MgKyAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHJlbW92ZUluZGV4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAtMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmVJbmRleCA+PSBpbnNlcnRJbmRleCAmJiByZW1vdmVJbmRleCArIGNzIDw9IGluc2VydEluZGV4ICsgY29sU3Bhbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDZWxsLnB1c2goY2VsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZW1vdmVJbmRleCA8PSBpbnNlcnRJbmRleCArIGNvbFNwYW4gJiYgcmVtb3ZlSW5kZXggKyBjcyA+PSBpbnNlcnRJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNvbFNwYW4gLT0gdXRpbC5nZXRPdmVybGFwUmFuZ2VBdEluZGV4KGNlbGxJbmRleCwgY2VsbEluZGV4ICsgY29sU3BhbiwgcmVtb3ZlSW5kZXgsIHJlbW92ZUluZGV4ICsgY3MpOyBcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJzID4gMCAmJiAocmVtb3ZlSW5kZXggPCBpbnNlcnRJbmRleCB8fCByZW1vdmVJbmRleCArIGNzID4gaW5zZXJ0SW5kZXggKyBjb2xTcGFuKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTcGFuQXJyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbDogY2VsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6IGksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByczogaSArIHJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbENvbFNwYW4gKz0gY3M7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNwYW5JbmRleCA9IHNwYW5JbmRleC5jb25jYXQocm93U3BhbkFycikuc29ydChmdW5jdGlvbiAoYSwgYikge3JldHVybiBhLmluZGV4IC0gYi5pbmRleDt9KTtcclxuICAgICAgICAgICAgcm93U3BhbkFyciA9IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFyZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXNzQ2VsbCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXNzQ2VsbCAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpbnNlcnRJbmRleCAhPT0gbnVsbCAmJiBjZWxscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbCA9IHRoaXMucGx1Z2lucy50YWJsZS5jcmVhdGVDZWxscy5jYWxsKHRoaXMsIGNlbGxzWzBdLm5vZGVOYW1lLCAwLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBuZXdDZWxsID0gcm93Lmluc2VydEJlZm9yZShuZXdDZWxsLCBjZWxsc1tpbnNlcnRJbmRleF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVtb3ZlKSB7XHJcbiAgICAgICAgICAgIGxldCByZW1vdmVGaXJzdCwgcmVtb3ZlRW5kO1xyXG4gICAgICAgICAgICBmb3IgKGxldCByID0gMCwgckxlbiA9IHJlbW92ZUNlbGwubGVuZ3RoLCByb3c7IHIgPCByTGVuOyByKyspIHtcclxuICAgICAgICAgICAgICAgIHJvdyA9IHJlbW92ZUNlbGxbcl0ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShyZW1vdmVDZWxsW3JdKTtcclxuICAgICAgICAgICAgICAgIGlmIChyb3cuY2VsbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW1vdmVGaXJzdCkgcmVtb3ZlRmlyc3QgPSB1dGlsLmdldEFycmF5SW5kZXgocm93cywgcm93KTtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVFbmQgPSB1dGlsLmdldEFycmF5SW5kZXgocm93cywgcm93KTtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0ocm93KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSByZW1vdmVTcGFuQXJyLmxlbmd0aCwgcm93U3BhbkNlbGw7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgIHJvd1NwYW5DZWxsID0gcmVtb3ZlU3BhbkFycltjXTtcclxuICAgICAgICAgICAgICAgIHJvd1NwYW5DZWxsLmNlbGwucm93U3BhbiA9IHV0aWwuZ2V0T3ZlcmxhcFJhbmdlQXRJbmRleChyZW1vdmVGaXJzdCwgcmVtb3ZlRW5kLCByb3dTcGFuQ2VsbC5pLCByb3dTcGFuQ2VsbC5ycyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMudGFibGUuc2V0UG9zaXRpb25Db250cm9sbGVyRGl2LmNhbGwodGhpcywgcG9zaXRpb25SZXNldEVsZW1lbnQgfHwgY29udGV4dFRhYmxlLl90ZEVsZW1lbnQsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2Nsb3NlU3BsaXRNZW51OiBudWxsLFxyXG4gICAgb3BlblNwbGl0TWVudTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyh0aGlzLmNvbnRleHQudGFibGUuc3BsaXRCdXR0b24sICdvbicpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC50YWJsZS5zcGxpdE1lbnUuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtdGFibGUnO1xyXG5cclxuICAgICAgICB0aGlzLnBsdWdpbnMudGFibGUuX2Nsb3NlU3BsaXRNZW51ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGhpcy5jb250ZXh0LnRhYmxlLnNwbGl0QnV0dG9uLCAnb24nKTtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnRhYmxlLnNwbGl0TWVudS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZURvY0V2ZW50KCdjbGljaycsIHRoaXMucGx1Z2lucy50YWJsZS5fY2xvc2VTcGxpdE1lbnUpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMudGFibGUuX2Nsb3NlU3BsaXRNZW51ID0gbnVsbDtcclxuICAgICAgICB9LmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkRG9jRXZlbnQoJ2NsaWNrJywgdGhpcy5wbHVnaW5zLnRhYmxlLl9jbG9zZVNwbGl0TWVudSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNwbGl0Q2VsbHM6IGZ1bmN0aW9uIChkaXJlY3Rpb24pIHtcclxuICAgICAgICBjb25zdCB1dGlsID0gdGhpcy51dGlsO1xyXG4gICAgICAgIGNvbnN0IHZlcnRpY2FsID0gZGlyZWN0aW9uID09PSAndmVydGljYWwnO1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRUYWJsZSA9IHRoaXMuY29udGV4dC50YWJsZTtcclxuICAgICAgICBjb25zdCBjdXJyZW50Q2VsbCA9IGNvbnRleHRUYWJsZS5fdGRFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IHJvd3MgPSBjb250ZXh0VGFibGUuX3RyRWxlbWVudHM7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFJvdyA9IGNvbnRleHRUYWJsZS5fdHJFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY29udGV4dFRhYmxlLl9sb2dpY2FsX2NlbGxJbmRleDtcclxuICAgICAgICBjb25zdCByb3dJbmRleCA9IGNvbnRleHRUYWJsZS5fcm93SW5kZXg7XHJcbiAgICAgICAgY29uc3QgbmV3Q2VsbCA9IHRoaXMucGx1Z2lucy50YWJsZS5jcmVhdGVDZWxscy5jYWxsKHRoaXMsIGN1cnJlbnRDZWxsLm5vZGVOYW1lLCAwLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLy8gdmVydGljYWxcclxuICAgICAgICBpZiAodmVydGljYWwpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvbFNwYW4gPSBjdXJyZW50Q2VsbC5jb2xTcGFuO1xyXG4gICAgICAgICAgICBuZXdDZWxsLnJvd1NwYW4gPSBjdXJyZW50Q2VsbC5yb3dTcGFuO1xyXG5cclxuICAgICAgICAgICAgLy8gY29sc3BhbiA+IDFcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2xTcGFuID4gMSkge1xyXG4gICAgICAgICAgICAgICAgbmV3Q2VsbC5jb2xTcGFuID0gdGhpcy5fdy5NYXRoLmZsb29yKGN1cnJlbnRDb2xTcGFuLzIpO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudENlbGwuY29sU3BhbiA9IGN1cnJlbnRDb2xTcGFuIC0gbmV3Q2VsbC5jb2xTcGFuO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFJvdy5pbnNlcnRCZWZvcmUobmV3Q2VsbCwgY3VycmVudENlbGwubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gY29sc3BhbiAtIDFcclxuICAgICAgICAgICAgICAgIGxldCByb3dTcGFuQXJyID0gW107XHJcbiAgICAgICAgICAgICAgICBsZXQgc3BhbkluZGV4ID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNvbnRleHRUYWJsZS5fcm93Q250LCBjZWxscywgY29sU3BhbjsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbHMgPSByb3dzW2ldLmNlbGxzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2VsbHMubGVuZ3RoLCBjZWxsLCBjcywgcnMsIGxvZ2NhbEluZGV4OyBjIDwgY0xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxsc1tjXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3MgPSBjZWxsLmNvbFNwYW4gLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBycyA9IGNlbGwucm93U3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2NhbEluZGV4ID0gYyArIGNvbFNwYW47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BhbkluZGV4Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHIgPSAwLCBhcnI7IHIgPCBzcGFuSW5kZXgubGVuZ3RoOyByKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIgPSBzcGFuSW5kZXhbcl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5yb3cgPiBpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9nY2FsSW5kZXggPj0gYXJyLmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gKz0gYXJyLmNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2djYWxJbmRleCArPSBhcnIuY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5ycyAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucm93ID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnIucnMgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXguc3BsaWNlKHIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IGNMZW4gLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5ycyAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucm93ID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnIucnMgPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXguc3BsaWNlKHIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9nY2FsSW5kZXggPD0gaW5kZXggJiYgcnMgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dTcGFuQXJyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBsb2djYWxJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjczogY3MgKyAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzOiBycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IC0xXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwgIT09IGN1cnJlbnRDZWxsICYmIGxvZ2NhbEluZGV4IDw9IGluZGV4ICYmIGxvZ2NhbEluZGV4ICsgY3MgPj0gaW5kZXggKyBjdXJyZW50Q29sU3BhbiAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY29sU3BhbiArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2djYWxJbmRleCA+IGluZGV4KSBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gKz0gY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXggPSBzcGFuSW5kZXguY29uY2F0KHJvd1NwYW5BcnIpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtyZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93U3BhbkFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGN1cnJlbnRSb3cuaW5zZXJ0QmVmb3JlKG5ld0NlbGwsIGN1cnJlbnRDZWxsLm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgeyAvLyBob3Jpem9udGFsXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRSb3dTcGFuID0gY3VycmVudENlbGwucm93U3BhbjtcclxuICAgICAgICAgICAgbmV3Q2VsbC5jb2xTcGFuID0gY3VycmVudENlbGwuY29sU3BhbjtcclxuXHJcbiAgICAgICAgICAgIC8vIHJvd3NwYW4gPiAxXHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50Um93U3BhbiA+IDEpIHtcclxuICAgICAgICAgICAgICAgIG5ld0NlbGwucm93U3BhbiA9IHRoaXMuX3cuTWF0aC5mbG9vcihjdXJyZW50Um93U3Bhbi8yKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1Jvd1NwYW4gPSBjdXJyZW50Um93U3BhbiAtIG5ld0NlbGwucm93U3BhbjtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3dTcGFuQXJyID0gW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Um93SW5kZXggPSB1dGlsLmdldEFycmF5SW5kZXgocm93cywgY3VycmVudFJvdykgKyBuZXdSb3dTcGFuO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBjZWxscywgY29sU3BhbjsgaSA8IG5leHRSb3dJbmRleDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbHMgPSByb3dzW2ldLmNlbGxzO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2VsbHMubGVuZ3RoLCBjZWxsLCBjcywgbG9nY2FsSW5kZXg7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nY2FsSW5kZXggPSBjICsgY29sU3BhbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2NhbEluZGV4ID49IGluZGV4KSBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxsc1tjXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3MgPSBjZWxsLnJvd1NwYW4gLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3MgPiAwICYmIGNzICsgaSA+PSBuZXh0Um93SW5kZXggJiYgbG9nY2FsSW5kZXggPCBpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93U3BhbkFyci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogbG9nY2FsSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3M6IGNlbGwuY29sU3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sU3BhbiArPSBjZWxsLmNvbFNwYW4gLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Um93ID0gcm93c1tuZXh0Um93SW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dENlbGxzID0gbmV4dFJvdy5jZWxscztcclxuICAgICAgICAgICAgICAgIGxldCBycyA9IHJvd1NwYW5BcnIuc2hpZnQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IG5leHRDZWxscy5sZW5ndGgsIGNvbFNwYW4gPSAwLCBjZWxsLCBjcywgbG9nY2FsSW5kZXgsIGluc2VydEluZGV4OyBjIDwgY0xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nY2FsSW5kZXggPSBjICsgY29sU3BhbjtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsID0gbmV4dENlbGxzW2NdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNzID0gY2VsbC5jb2xTcGFuIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICBpbnNlcnRJbmRleCA9IGxvZ2NhbEluZGV4ICsgY3MgKyAxO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocnMgJiYgaW5zZXJ0SW5kZXggPj0gcnMuaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sU3BhbiArPSBycy5jcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0SW5kZXggKz0gcnMuY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJzID0gcm93U3BhbkFyci5zaGlmdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0SW5kZXggPj0gaW5kZXggfHwgYyA9PT0gY0xlbiAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFJvdy5pbnNlcnRCZWZvcmUobmV3Q2VsbCwgY2VsbC5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gKz0gY3M7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY3VycmVudENlbGwucm93U3BhbiA9IG5ld1Jvd1NwYW47XHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIHJvd3NwYW4gLSAxXHJcbiAgICAgICAgICAgICAgICBuZXdDZWxsLnJvd1NwYW4gPSBjdXJyZW50Q2VsbC5yb3dTcGFuO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Um93ID0gdXRpbC5jcmVhdGVFbGVtZW50KCdUUicpO1xyXG4gICAgICAgICAgICAgICAgbmV3Um93LmFwcGVuZENoaWxkKG5ld0NlbGwpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBjZWxsczsgaSA8IHJvd0luZGV4OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjZWxscyA9IHJvd3NbaV0uY2VsbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IGNlbGxzLmxlbmd0aDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSArIGNlbGxzW2NdLnJvd1NwYW4gLSAxID49IHJvd0luZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsc1tjXS5yb3dTcGFuICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcGh5c2ljYWxJbmRleCA9IGNvbnRleHRUYWJsZS5fcGh5c2ljYWxfY2VsbEluZGV4O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbHMgPSBjdXJyZW50Um93LmNlbGxzO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2VsbHMubGVuZ3RoOyBjIDwgY0xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IHBoeXNpY2FsSW5kZXgpIGNvbnRpbnVlOyAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBjZWxsc1tjXS5yb3dTcGFuICs9IDE7ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50Um93LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld1JvdywgY3VycmVudFJvdy5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZvY3VzRWRnZShjdXJyZW50Q2VsbCk7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5zLnRhYmxlLnNldFBvc2l0aW9uQ29udHJvbGxlckRpdi5jYWxsKHRoaXMsIGN1cnJlbnRDZWxsLCB0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgbWVyZ2VDZWxsczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gdGhpcy5wbHVnaW5zLnRhYmxlO1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHRUYWJsZSA9IHRoaXMuY29udGV4dC50YWJsZTtcclxuICAgICAgICBjb25zdCB1dGlsID0gdGhpcy51dGlsO1xyXG5cclxuICAgICAgICBjb25zdCByZWYgPSB0YWJsZVBsdWdpbi5fcmVmO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSB0YWJsZVBsdWdpbi5fc2VsZWN0ZWRDZWxscztcclxuICAgICAgICBjb25zdCBtZXJnZUNlbGwgPSBzZWxlY3RlZENlbGxzWzBdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBlbXB0eVJvd0ZpcnN0ID0gbnVsbDtcclxuICAgICAgICBsZXQgZW1wdHlSb3dMYXN0ID0gbnVsbDtcclxuICAgICAgICBsZXQgY3MgPSAocmVmLmNlIC0gcmVmLmNzKSArIDE7XHJcbiAgICAgICAgbGV0IHJzID0gKHJlZi5yZSAtIHJlZi5ycykgKyAxO1xyXG4gICAgICAgIGxldCBtZXJnZUhUTUwgPSAnJztcclxuICAgICAgICBsZXQgcm93ID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDEsIGxlbiA9IHNlbGVjdGVkQ2VsbHMubGVuZ3RoLCBjZWxsLCBjaDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNlbGwgPSBzZWxlY3RlZENlbGxzW2ldO1xyXG4gICAgICAgICAgICBpZiAocm93ICE9PSBjZWxsLnBhcmVudE5vZGUpIHJvdyA9IGNlbGwucGFyZW50Tm9kZTtcclxuXHJcbiAgICAgICAgICAgIGNoID0gY2VsbC5jaGlsZHJlbjtcclxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSBjaC5sZW5ndGg7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChjaFtjXSkgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoY2hbY10udGV4dENvbnRlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGNoW2NdKTtcclxuICAgICAgICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtZXJnZUhUTUwgKz0gY2VsbC5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShjZWxsKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyb3cuY2VsbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5Um93Rmlyc3QpIGVtcHR5Um93Rmlyc3QgPSByb3c7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGVtcHR5Um93TGFzdCA9IHJvdztcclxuICAgICAgICAgICAgICAgIHJzIC09IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbXB0eVJvd0ZpcnN0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBjb250ZXh0VGFibGUuX3RyRWxlbWVudHM7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4Rmlyc3QgPSB1dGlsLmdldEFycmF5SW5kZXgocm93cywgZW1wdHlSb3dGaXJzdCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4TGFzdCA9IHV0aWwuZ2V0QXJyYXlJbmRleChyb3dzLCBlbXB0eVJvd0xhc3QgfHwgZW1wdHlSb3dGaXJzdCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZVJvd3MgPSBbXTtcclxuICAgIFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgY2VsbHM7IGkgPD0gcm93SW5kZXhMYXN0OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNlbGxzID0gcm93c1tpXS5jZWxscztcclxuICAgICAgICAgICAgICAgIGlmIChjZWxscy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVSb3dzLnB1c2gocm93c1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2VsbHMubGVuZ3RoLCBjZWxsLCByczsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxsc1tjXTtcclxuICAgICAgICAgICAgICAgICAgICBycyA9IGNlbGwucm93U3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzID4gMCAmJiBpICsgcnMgPj0gcm93SW5kZXhGaXJzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnJvd1NwYW4gLT0gdXRpbC5nZXRPdmVybGFwUmFuZ2VBdEluZGV4KHJvd0luZGV4Rmlyc3QsIHJvd0luZGV4TGFzdCwgaSwgaSArIHJzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByZW1vdmVSb3dzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0ocmVtb3ZlUm93c1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1lcmdlQ2VsbC5pbm5lckhUTUwgKz0gbWVyZ2VIVE1MO1xyXG4gICAgICAgIG1lcmdlQ2VsbC5jb2xTcGFuID0gY3M7XHJcbiAgICAgICAgbWVyZ2VDZWxsLnJvd1NwYW4gPSBycztcclxuXHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLnNldEFjdGl2ZUJ1dHRvbi5jYWxsKHRoaXMsIHRydWUsIGZhbHNlKTtcclxuICAgICAgICB0YWJsZVBsdWdpbi5jYWxsX2NvbnRyb2xsZXJfdGFibGVFZGl0LmNhbGwodGhpcywgbWVyZ2VDZWxsKTtcclxuXHJcbiAgICAgICAgdXRpbC5hZGRDbGFzcyhtZXJnZUNlbGwsICdzZS10YWJsZS1zZWxlY3RlZC1jZWxsJyk7XHJcbiAgICAgICAgdGhpcy5mb2N1c0VkZ2UobWVyZ2VDZWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgdG9nZ2xlSGVhZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgdXRpbCA9IHRoaXMudXRpbDtcclxuICAgICAgICBjb25zdCBoZWFkZXJCdXR0b24gPSB0aGlzLmNvbnRleHQudGFibGUuaGVhZGVyQnV0dG9uO1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHV0aWwuaGFzQ2xhc3MoaGVhZGVyQnV0dG9uLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLmNvbnRleHQudGFibGUuX2VsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmICghYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHV0aWwuY3JlYXRlRWxlbWVudCgnVEhFQUQnKTtcclxuICAgICAgICAgICAgaGVhZGVyLmlubmVySFRNTCA9ICc8dHI+JyArIHRoaXMucGx1Z2lucy50YWJsZS5jcmVhdGVDZWxscy5jYWxsKHRoaXMsICd0aCcsIHRoaXMuY29udGV4dC50YWJsZS5fbG9naWNhbF9jZWxsQ250LCBmYWxzZSkgKyAnPC90cj4nO1xyXG4gICAgICAgICAgICB0YWJsZS5pbnNlcnRCZWZvcmUoaGVhZGVyLCB0YWJsZS5maXJzdEVsZW1lbnRDaGlsZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHRhYmxlLnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXRpbC50b2dnbGVDbGFzcyhoZWFkZXJCdXR0b24sICdhY3RpdmUnKTtcclxuXHJcbiAgICAgICAgaWYgKC9USC9pLnRlc3QodGhpcy5jb250ZXh0LnRhYmxlLl90ZEVsZW1lbnQubm9kZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMudGFibGUuc2V0UG9zaXRpb25Db250cm9sbGVyRGl2LmNhbGwodGhpcywgdGhpcy5jb250ZXh0LnRhYmxlLl90ZEVsZW1lbnQsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRhYmxlU3R5bGU6IGZ1bmN0aW9uIChzdHlsZXMpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0VGFibGUgPSB0aGlzLmNvbnRleHQudGFibGU7XHJcbiAgICAgICAgY29uc3QgdGFibGVFbGVtZW50ID0gY29udGV4dFRhYmxlLl9lbGVtZW50O1xyXG4gICAgICAgIGxldCBpY29uLCBzcGFuLCBzaXplSWNvbiwgdGV4dDtcclxuXHJcbiAgICAgICAgaWYgKHN0eWxlcy5pbmRleE9mKCd3aWR0aCcpID4gLTEpIHtcclxuICAgICAgICAgICAgaWNvbiA9ICBjb250ZXh0VGFibGUucmVzaXplQnV0dG9uLmZpcnN0RWxlbWVudENoaWxkO1xyXG4gICAgICAgICAgICBzcGFuID0gY29udGV4dFRhYmxlLnJlc2l6ZVRleHQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbnRleHRUYWJsZS5fbWF4V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIHNpemVJY29uID0gY29udGV4dFRhYmxlLmljb25zLmV4cGFuc2lvbjtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBjb250ZXh0VGFibGUubWF4VGV4dDtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRUYWJsZS5jb2x1bW5GaXhlZEJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHRhYmxlRWxlbWVudCwgJ3NlLXRhYmxlLXNpemUtMTAwJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3ModGFibGVFbGVtZW50LCAnc2UtdGFibGUtc2l6ZS1hdXRvJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzaXplSWNvbiA9IGNvbnRleHRUYWJsZS5pY29ucy5yZWR1Y3Rpb247XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gY29udGV4dFRhYmxlLm1pblRleHQ7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0VGFibGUuY29sdW1uRml4ZWRCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGFibGVFbGVtZW50LCAnc2UtdGFibGUtc2l6ZS1hdXRvJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3ModGFibGVFbGVtZW50LCAnc2UtdGFibGUtc2l6ZS0xMDAnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy51dGlsLmNoYW5nZUVsZW1lbnQoaWNvbiwgc2l6ZUljb24pO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KHNwYW4sIHRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0eWxlcy5pbmRleE9mKCdjb2x1bW4nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGlmICghY29udGV4dFRhYmxlLl9maXhlZENvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHRhYmxlRWxlbWVudCwgJ3NlLXRhYmxlLWxheW91dC1maXhlZCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKHRhYmxlRWxlbWVudCwgJ3NlLXRhYmxlLWxheW91dC1hdXRvJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MoY29udGV4dFRhYmxlLmNvbHVtbkZpeGVkQnV0dG9uLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3ModGFibGVFbGVtZW50LCAnc2UtdGFibGUtbGF5b3V0LWF1dG8nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyh0YWJsZUVsZW1lbnQsICdzZS10YWJsZS1sYXlvdXQtZml4ZWQnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhjb250ZXh0VGFibGUuY29sdW1uRml4ZWRCdXR0b24sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNldEFjdGl2ZUJ1dHRvbjogZnVuY3Rpb24gKGZpeGVkQ2VsbCwgc2VsZWN0ZWRDZWxsKSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRhYmxlID0gdGhpcy5jb250ZXh0LnRhYmxlO1xyXG5cclxuICAgICAgICBpZiAoL15USCQvaS50ZXN0KGZpeGVkQ2VsbC5ub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLmluc2VydFJvd0Fib3ZlQnV0dG9uLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLmluc2VydFJvd0JlbG93QnV0dG9uLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUuaW5zZXJ0Um93QWJvdmVCdXR0b24ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUuaW5zZXJ0Um93QmVsb3dCdXR0b24ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZENlbGwgfHwgZml4ZWRDZWxsID09PSBzZWxlY3RlZENlbGwpIHtcclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLnNwbGl0QnV0dG9uLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgY29udGV4dFRhYmxlLm1lcmdlQnV0dG9uLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUuc3BsaXRCdXR0b24uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICBjb250ZXh0VGFibGUubWVyZ2VCdXR0b24ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy8gbXVsdGkgc2VsZWN0ZVxyXG4gICAgX2JpbmRPblNlbGVjdDogbnVsbCxcclxuICAgIF9iaW5kT2ZmU2VsZWN0OiBudWxsLFxyXG4gICAgX2JpbmRPZmZTaGlmdDogbnVsbCxcclxuICAgIF9zZWxlY3RlZENlbGxzOiBudWxsLFxyXG4gICAgX3NoaWZ0OiBmYWxzZSxcclxuICAgIF9maXhlZENlbGw6IG51bGwsXHJcbiAgICBfZml4ZWRDZWxsTmFtZTogbnVsbCxcclxuICAgIF9zZWxlY3RlZENlbGw6IG51bGwsXHJcbiAgICBfc2VsZWN0ZWRUYWJsZTogbnVsbCxcclxuICAgIF9yZWY6IG51bGwsXHJcbiAgICBfdG9nZ2xlRWRpdG9yOiBmdW5jdGlvbiAoZW5hYmxlZCkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCBlbmFibGVkKTtcclxuICAgICAgICBpZiAoZW5hYmxlZCkgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWcsICdzZS1kaXNhYmxlZCcpO1xyXG4gICAgICAgIGVsc2UgdGhpcy51dGlsLmFkZENsYXNzKHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWcsICdzZS1kaXNhYmxlZCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfb2ZmQ2VsbE11bHRpU2VsZWN0OiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgY29uc3QgdGFibGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMudGFibGU7XHJcblxyXG4gICAgICAgIGlmICghdGFibGVQbHVnaW4uX3NoaWZ0KSB7XHJcbiAgICAgICAgICAgIHRhYmxlUGx1Z2luLl9yZW1vdmVFdmVudHMuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX3RvZ2dsZUVkaXRvci5jYWxsKHRoaXMsIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGFibGVQbHVnaW4uX2luaXRCaW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dkLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRhYmxlUGx1Z2luLl9pbml0QmluZCk7XHJcbiAgICAgICAgICAgIHRhYmxlUGx1Z2luLl9pbml0QmluZCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRhYmxlUGx1Z2luLl9maXhlZENlbGwgfHwgIXRhYmxlUGx1Z2luLl9zZWxlY3RlZFRhYmxlKSByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGFibGVQbHVnaW4uc2V0QWN0aXZlQnV0dG9uLmNhbGwodGhpcywgdGFibGVQbHVnaW4uX2ZpeGVkQ2VsbCwgdGFibGVQbHVnaW4uX3NlbGVjdGVkQ2VsbCk7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uY2FsbF9jb250cm9sbGVyX3RhYmxlRWRpdC5jYWxsKHRoaXMsIHRhYmxlUGx1Z2luLl9zZWxlY3RlZENlbGwgfHwgdGFibGVQbHVnaW4uX2ZpeGVkQ2VsbCk7XHJcblxyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9zZWxlY3RlZENlbGxzID0gdGFibGVQbHVnaW4uX3NlbGVjdGVkVGFibGUucXVlcnlTZWxlY3RvckFsbCgnLnNlLXRhYmxlLXNlbGVjdGVkLWNlbGwnKTtcclxuICAgICAgICBpZiAodGFibGVQbHVnaW4uX3NlbGVjdGVkQ2VsbCAmJiB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsKSB0aGlzLmZvY3VzRWRnZSh0YWJsZVBsdWdpbi5fc2VsZWN0ZWRDZWxsKTtcclxuXHJcbiAgICAgICAgaWYgKCF0YWJsZVBsdWdpbi5fc2hpZnQpIHtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX2ZpeGVkQ2VsbCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRhYmxlUGx1Z2luLl9zZWxlY3RlZENlbGwgPSBudWxsO1xyXG4gICAgICAgICAgICB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsTmFtZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfb25DZWxsTXVsdGlTZWxlY3Q6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdGhpcy5fYW50aUJsdXIgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gdGhpcy5wbHVnaW5zLnRhYmxlO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGUudGFyZ2V0LCB0aGlzLnV0aWwuaXNDZWxsKTtcclxuXHJcbiAgICAgICAgaWYgKHRhYmxlUGx1Z2luLl9zaGlmdCkge1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0ID09PSB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsKSB0YWJsZVBsdWdpbi5fdG9nZ2xlRWRpdG9yLmNhbGwodGhpcywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGVsc2UgdGFibGVQbHVnaW4uX3RvZ2dsZUVkaXRvci5jYWxsKHRoaXMsIGZhbHNlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCF0YWJsZVBsdWdpbi5fcmVmKSB7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IHRhYmxlUGx1Z2luLl9maXhlZENlbGwpIHJldHVybjtcclxuICAgICAgICAgICAgZWxzZSB0YWJsZVBsdWdpbi5fdG9nZ2xlRWRpdG9yLmNhbGwodGhpcywgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0YXJnZXQgfHwgdGFyZ2V0ID09PSB0YWJsZVBsdWdpbi5fc2VsZWN0ZWRDZWxsIHx8IHRhYmxlUGx1Z2luLl9maXhlZENlbGxOYW1lICE9PSB0YXJnZXQubm9kZU5hbWUgfHwgXHJcbiAgICAgICAgICAgIHRhYmxlUGx1Z2luLl9zZWxlY3RlZFRhYmxlICE9PSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudCh0YXJnZXQsICdUQUJMRScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9zZWxlY3RlZENlbGwgPSB0YXJnZXQ7XHJcbiAgICAgICAgdGFibGVQbHVnaW4uX3NldE11bHRpQ2VsbHMuY2FsbCh0aGlzLCB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsLCB0YXJnZXQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0TXVsdGlDZWxsczogZnVuY3Rpb24gKHN0YXJ0Q2VsbCwgZW5kQ2VsbCkge1xyXG4gICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gdGhpcy5wbHVnaW5zLnRhYmxlO1xyXG4gICAgICAgIGNvbnN0IHJvd3MgPSB0YWJsZVBsdWdpbi5fc2VsZWN0ZWRUYWJsZS5yb3dzO1xyXG4gICAgICAgIGNvbnN0IHV0aWwgPSB0aGlzLnV0aWw7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSB0YWJsZVBsdWdpbi5fc2VsZWN0ZWRUYWJsZS5xdWVyeVNlbGVjdG9yQWxsKCcuc2UtdGFibGUtc2VsZWN0ZWQtY2VsbCcpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzZWxlY3RlZENlbGxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3Moc2VsZWN0ZWRDZWxsc1tpXSwgJ3NlLXRhYmxlLXNlbGVjdGVkLWNlbGwnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGFydENlbGwgPT09IGVuZENlbGwpIHtcclxuICAgICAgICAgICAgdXRpbC5hZGRDbGFzcyhzdGFydENlbGwsICdzZS10YWJsZS1zZWxlY3RlZC1jZWxsJyk7XHJcbiAgICAgICAgICAgIGlmICghdGFibGVQbHVnaW4uX3NoaWZ0KSByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZmluZFNlbGVjdGVkQ2VsbCA9IHRydWU7XHJcbiAgICAgICAgbGV0IHNwYW5JbmRleCA9IFtdO1xyXG4gICAgICAgIGxldCByb3dTcGFuQXJyID0gW107XHJcbiAgICAgICAgY29uc3QgcmVmID0gdGFibGVQbHVnaW4uX3JlZiA9IHtfaTogMCwgY3M6IG51bGwsIGNlOiBudWxsLCByczogbnVsbCwgcmU6IG51bGx9O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcm93cy5sZW5ndGgsIGNlbGxzLCBjb2xTcGFuOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY2VsbHMgPSByb3dzW2ldLmNlbGxzO1xyXG4gICAgICAgICAgICBjb2xTcGFuID0gMDtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjTGVuID0gY2VsbHMubGVuZ3RoLCBjZWxsLCBsb2djYWxJbmRleCwgY3MsIHJzOyBjIDwgY0xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICBjZWxsID0gY2VsbHNbY107XHJcbiAgICAgICAgICAgICAgICBjcyA9IGNlbGwuY29sU3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICBycyA9IGNlbGwucm93U3BhbiAtIDE7XHJcbiAgICAgICAgICAgICAgICBsb2djYWxJbmRleCA9IGMgKyBjb2xTcGFuO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzcGFuSW5kZXgubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHIgPSAwLCBhcnI7IHIgPCBzcGFuSW5kZXgubGVuZ3RoOyByKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyID0gc3BhbkluZGV4W3JdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLnJvdyA+IGkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9nY2FsSW5kZXggPj0gYXJyLmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xTcGFuICs9IGFyci5jcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2NhbEluZGV4ICs9IGFyci5jcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5ycyAtPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnJvdyA9IGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5ycyA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXguc3BsaWNlKHIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSBjTGVuIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnJzIC09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucm93ID0gaSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLnJzIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5JbmRleC5zcGxpY2UociwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmaW5kU2VsZWN0ZWRDZWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwgPT09IHN0YXJ0Q2VsbCB8fCBjZWxsID09PSBlbmRDZWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5jcyA9IHJlZi5jcyAhPT0gbnVsbCAmJiByZWYuY3MgPCBsb2djYWxJbmRleCA/IHJlZi5jcyA6IGxvZ2NhbEluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuY2UgPSByZWYuY2UgIT09IG51bGwgJiYgcmVmLmNlID4gbG9nY2FsSW5kZXggKyBjcyA/IHJlZi5jZSA6IGxvZ2NhbEluZGV4ICsgY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5ycyA9IHJlZi5ycyAhPT0gbnVsbCAmJiByZWYucnMgPCBpID8gcmVmLnJzIDogaTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLnJlID0gcmVmLnJlICE9PSBudWxsICYmIHJlZi5yZSA+IGkgKyBycyA/IHJlZi5yZSA6IGkgKyBycztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLl9pICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWYuX2kgPT09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluZFNlbGVjdGVkQ2VsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXggPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93U3BhbkFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXRpbC5nZXRPdmVybGFwUmFuZ2VBdEluZGV4KHJlZi5jcywgcmVmLmNlLCBsb2djYWxJbmRleCwgbG9nY2FsSW5kZXggKyBjcykgJiYgdXRpbC5nZXRPdmVybGFwUmFuZ2VBdEluZGV4KHJlZi5ycywgcmVmLnJlLCBpLCBpICsgcnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q3MgPSByZWYuY3MgPCBsb2djYWxJbmRleCA/IHJlZi5jcyA6IGxvZ2NhbEluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlID0gcmVmLmNlID4gbG9nY2FsSW5kZXggKyBjcyA/IHJlZi5jZSA6IGxvZ2NhbEluZGV4ICsgY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UnMgPSByZWYucnMgPCBpID8gcmVmLnJzIDogaTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdSZSA9IHJlZi5yZSA+IGkgKyBycyA/IHJlZi5yZSA6IGkgKyBycztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5jcyAhPT0gbmV3Q3MgfHwgcmVmLmNlICE9PSBuZXdDZSB8fCByZWYucnMgIT09IG5ld1JzIHx8IHJlZi5yZSAhPT0gbmV3UmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmNzID0gbmV3Q3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5jZSA9IG5ld0NlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWYucnMgPSBuZXdScztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLnJlID0gbmV3UmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5JbmRleCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dTcGFuQXJyID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5hZGRDbGFzcyhjZWxsLCAnc2UtdGFibGUtc2VsZWN0ZWQtY2VsbCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChycyA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByb3dTcGFuQXJyLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogbG9nY2FsSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzOiBjcyArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJzOiBycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAtMVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbFNwYW4gKz0gY2VsbC5jb2xTcGFuIC0gMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc3BhbkluZGV4ID0gc3BhbkluZGV4LmNvbmNhdChyb3dTcGFuQXJyKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7cmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O30pO1xyXG4gICAgICAgICAgICByb3dTcGFuQXJyID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfcmVtb3ZlRXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgdGFibGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMudGFibGU7XHJcblxyXG4gICAgICAgIGlmICh0YWJsZVBsdWdpbi5faW5pdEJpbmQpIHtcclxuICAgICAgICAgICAgdGhpcy5fd2QucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGFibGVQbHVnaW4uX2luaXRCaW5kKTtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX2luaXRCaW5kID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0YWJsZVBsdWdpbi5fYmluZE9uU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dkLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRhYmxlUGx1Z2luLl9iaW5kT25TZWxlY3QpO1xyXG4gICAgICAgICAgICB0aGlzLl93ZC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0YWJsZVBsdWdpbi5fYmluZE9uU2VsZWN0KTtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX2JpbmRPblNlbGVjdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGFibGVQbHVnaW4uX2JpbmRPZmZTZWxlY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fd2QucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRhYmxlUGx1Z2luLl9iaW5kT2ZmU2VsZWN0KTtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX2JpbmRPZmZTZWxlY3QgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRhYmxlUGx1Z2luLl9iaW5kT2ZmU2hpZnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fd2QucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0YWJsZVBsdWdpbi5fYmluZE9mZlNoaWZ0KTtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX2JpbmRPZmZTaGlmdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfaW5pdEJpbmQ6IG51bGwsXHJcbiAgICBvblRhYmxlQ2VsbE11bHRpU2VsZWN0OiBmdW5jdGlvbiAodGRFbGVtZW50LCBzaGlmdCkge1xyXG4gICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gdGhpcy5wbHVnaW5zLnRhYmxlO1xyXG5cclxuICAgICAgICB0YWJsZVBsdWdpbi5fcmVtb3ZlRXZlbnRzLmNhbGwodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG5cclxuICAgICAgICB0YWJsZVBsdWdpbi5fc2hpZnQgPSBzaGlmdDtcclxuICAgICAgICB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsID0gdGRFbGVtZW50O1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9maXhlZENlbGxOYW1lID0gdGRFbGVtZW50Lm5vZGVOYW1lO1xyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9zZWxlY3RlZFRhYmxlID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQodGRFbGVtZW50LCAnVEFCTEUnKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IHRhYmxlUGx1Z2luLl9zZWxlY3RlZFRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZS10YWJsZS1zZWxlY3RlZC1jZWxsJyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNlbGVjdGVkQ2VsbHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKHNlbGVjdGVkQ2VsbHNbaV0sICdzZS10YWJsZS1zZWxlY3RlZC1jZWxsJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnV0aWwuYWRkQ2xhc3ModGRFbGVtZW50LCAnc2UtdGFibGUtc2VsZWN0ZWQtY2VsbCcpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRhYmxlUGx1Z2luLl9iaW5kT25TZWxlY3QgPSB0YWJsZVBsdWdpbi5fb25DZWxsTXVsdGlTZWxlY3QuYmluZCh0aGlzKTtcclxuICAgICAgICB0YWJsZVBsdWdpbi5fYmluZE9mZlNlbGVjdCA9IHRhYmxlUGx1Z2luLl9vZmZDZWxsTXVsdGlTZWxlY3QuYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKCFzaGlmdCkge1xyXG4gICAgICAgICAgICB0aGlzLl93ZC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0YWJsZVBsdWdpbi5fYmluZE9uU2VsZWN0LCBmYWxzZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX2JpbmRPZmZTaGlmdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcnNPbih0aGlzLmNvbnRleHQudGFibGUucmVzaXplRGl2LCB0aGlzLmNvbnRleHQudGFibGUudGFibGVDb250cm9sbGVyLCB0aGlzLnBsdWdpbnMudGFibGUuaW5pdC5iaW5kKHRoaXMpLCB0ZEVsZW1lbnQsICd0YWJsZScpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0YWJsZVBsdWdpbi5fcmVmKSB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3dkLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGFibGVQbHVnaW4uX2JpbmRPZmZTaGlmdCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl93ZC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0YWJsZVBsdWdpbi5fYmluZE9uU2VsZWN0LCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl93ZC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGFibGVQbHVnaW4uX2JpbmRPZmZTZWxlY3QsIGZhbHNlKTtcclxuICAgICAgICB0YWJsZVBsdWdpbi5faW5pdEJpbmQgPSB0YWJsZVBsdWdpbi5pbml0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5fd2QuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGFibGVQbHVnaW4uX2luaXRCaW5kLCBmYWxzZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIG9uQ2xpY2tfdGFibGVDb250cm9sbGVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKSA/IGUudGFyZ2V0IDogZS50YXJnZXQucGFyZW50Tm9kZTtcclxuXHJcbiAgICAgICAgaWYgKHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3B0aW9uJyk7XHJcbiAgICAgICAgY29uc3QgdGFibGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMudGFibGU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0YWJsZVBsdWdpbi5fY2xvc2VTcGxpdE1lbnUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGFibGVQbHVnaW4uX2Nsb3NlU3BsaXRNZW51KCk7XHJcbiAgICAgICAgICAgIGlmIChjb21tYW5kID09PSAnb25zcGxpdCcpIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY29tbWFuZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRhYmxlID0gdGhpcy5jb250ZXh0LnRhYmxlO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGNvbW1hbmQpIHtcclxuICAgICAgICAgICAgY2FzZSAnaW5zZXJ0JzpcclxuICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzpcclxuICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLmVkaXRUYWJsZS5jYWxsKHRoaXMsIHZhbHVlLCBvcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2hlYWRlcic6XHJcbiAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi50b2dnbGVIZWFkZXIuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdvbnNwbGl0JzpcclxuICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLm9wZW5TcGxpdE1lbnUuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzcGxpdCc6XHJcbiAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5zcGxpdENlbGxzLmNhbGwodGhpcywgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21lcmdlJzpcclxuICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLm1lcmdlQ2VsbHMuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdyZXNpemUnOlxyXG4gICAgICAgICAgICAgICAgY29udGV4dFRhYmxlLl9tYXhXaWR0aCA9ICFjb250ZXh0VGFibGUuX21heFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uc2V0VGFibGVTdHlsZS5jYWxsKHRoaXMsICd3aWR0aCcpO1xyXG4gICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uc2V0UG9zaXRpb25Db250cm9sbGVyVG9wLmNhbGwodGhpcywgY29udGV4dFRhYmxlLl9lbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLnNldFBvc2l0aW9uQ29udHJvbGxlckRpdi5jYWxsKHRoaXMsIGNvbnRleHRUYWJsZS5fdGRFbGVtZW50LCB0YWJsZVBsdWdpbi5fc2hpZnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xheW91dCc6XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0VGFibGUuX2ZpeGVkQ29sdW1uID0gIWNvbnRleHRUYWJsZS5fZml4ZWRDb2x1bW47XHJcbiAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5zZXRUYWJsZVN0eWxlLmNhbGwodGhpcywgJ2NvbHVtbicpO1xyXG4gICAgICAgICAgICAgICAgdGFibGVQbHVnaW4uc2V0UG9zaXRpb25Db250cm9sbGVyVG9wLmNhbGwodGhpcywgY29udGV4dFRhYmxlLl9lbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLnNldFBvc2l0aW9uQ29udHJvbGxlckRpdi5jYWxsKHRoaXMsIGNvbnRleHRUYWJsZS5fdGRFbGVtZW50LCB0YWJsZVBsdWdpbi5fc2hpZnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlbW92ZSc6XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbXB0eURpdiA9IGNvbnRleHRUYWJsZS5fZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUl0ZW0oY29udGV4dFRhYmxlLl9lbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZW1wdHlEaXYgIT09IHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWcpIHRoaXMudXRpbC5yZW1vdmVJdGVtQWxsUGFyZW50cyhlbXB0eURpdiwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDA7IH0sIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgIH1cclxufTtcclxuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdmb3JtYXRCbG9jaycsXHJcbiAgICBkaXNwbGF5OiAnc3VibWVudScsXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlLCB0YXJnZXRFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcclxuICAgICAgICBjb250ZXh0LmZvcm1hdEJsb2NrID0ge1xyXG4gICAgICAgICAgICB0YXJnZXRUZXh0OiB0YXJnZXRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50eHQnKSxcclxuICAgICAgICAgICAgdGFyZ2V0VG9vbHRpcDogdGFyZ2V0RWxlbWVudC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoJy5zZS10b29sdGlwLXRleHQnKSxcclxuICAgICAgICAgICAgX2Zvcm1hdExpc3Q6IG51bGwsXHJcbiAgICAgICAgICAgIGN1cnJlbnRGb3JtYXQ6ICcnXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIHNldCBzdWJtZW51ICovXHJcbiAgICAgICAgbGV0IGxpc3REaXYgPSB0aGlzLnNldFN1Ym1lbnUoY29yZSk7XHJcblxyXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgbGlzdERpdi5xdWVyeVNlbGVjdG9yKCd1bCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5waWNrVXAuYmluZChjb3JlKSk7XHJcbiAgICAgICAgY29udGV4dC5mb3JtYXRCbG9jay5fZm9ybWF0TGlzdCA9IGxpc3REaXYucXVlcnlTZWxlY3RvckFsbCgnbGkgYnV0dG9uJyk7XHJcblxyXG4gICAgICAgIC8qKiBhcHBlbmQgdGFyZ2V0IGJ1dHRvbiBtZW51ICovXHJcbiAgICAgICAgY29yZS5pbml0TWVudVRhcmdldCh0aGlzLm5hbWUsIHRhcmdldEVsZW1lbnQsIGxpc3REaXYpO1xyXG5cclxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXHJcbiAgICAgICAgbGlzdERpdiA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN1Ym1lbnU6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gY29yZS5vcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGxhbmdfdG9vbGJhciA9IGNvcmUubGFuZy50b29sYmFyO1xyXG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgbGlzdERpdi5jbGFzc05hbWUgPSAnc2Utc3VibWVudSBzZS1saXN0LWxheWVyIHNlLWxpc3QtZm9ybWF0JztcclxuXHJcbiAgICAgICAgY29uc3QgZGVmYXVsdEZvcm1hdHMgPSBbJ3AnLCAnZGl2JywgJ2Jsb2NrcXVvdGUnLCAncHJlJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2J107XHJcbiAgICAgICAgY29uc3QgZm9ybWF0TGlzdCA9ICFvcHRpb24uZm9ybWF0cyB8fCBvcHRpb24uZm9ybWF0cy5sZW5ndGggPT09IDAgPyBkZWZhdWx0Rm9ybWF0cyA6IG9wdGlvbi5mb3JtYXRzO1xyXG5cclxuICAgICAgICBsZXQgbGlzdCA9ICc8ZGl2IGNsYXNzPVwic2UtbGlzdC1pbm5lclwiPjx1bCBjbGFzcz1cInNlLWxpc3QtYmFzaWNcIj4nO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBmb3JtYXRMaXN0Lmxlbmd0aCwgZm9ybWF0LCB0YWdOYW1lLCBjb21tYW5kLCBuYW1lLCBoLCBhdHRycywgY2xhc3NOYW1lOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0TGlzdFtpXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZm9ybWF0ID09PSAnc3RyaW5nJyAmJiBkZWZhdWx0Rm9ybWF0cy5pbmRleE9mKGZvcm1hdCkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGFnTmFtZSA9IGZvcm1hdC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZCA9IHRhZ05hbWUgPT09ICdibG9ja3F1b3RlJyA/ICdyYW5nZScgOiB0YWdOYW1lID09PSAncHJlJyA/ICdmcmVlJyA6ICdyZXBsYWNlJztcclxuICAgICAgICAgICAgICAgIGggPSAvXmgvLnRlc3QodGFnTmFtZSkgPyB0YWdOYW1lLm1hdGNoKC9cXGQrLylbMF0gOiAnJztcclxuICAgICAgICAgICAgICAgIG5hbWUgPSBsYW5nX3Rvb2xiYXJbJ3RhZ18nICsgKGggPyAnaCcgOiB0YWdOYW1lKV0gKyBoO1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICBhdHRycyA9ICcnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFnTmFtZSA9IGZvcm1hdC50YWcudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBmb3JtYXQuY29tbWFuZDtcclxuICAgICAgICAgICAgICAgIG5hbWUgPSBmb3JtYXQubmFtZSB8fCB0YWdOYW1lO1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gZm9ybWF0LmNsYXNzO1xyXG4gICAgICAgICAgICAgICAgYXR0cnMgPSBjbGFzc05hbWUgPyAnIGNsYXNzPVwiJyArIGNsYXNzTmFtZSArICdcIicgOiAnJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGlzdCArPSAnPGxpPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3RcIiBkYXRhLWNvbW1hbmQ9XCInICsgY29tbWFuZCArICdcIiBkYXRhLXZhbHVlPVwiJyArIHRhZ05hbWUgKyAnXCIgZGF0YS1jbGFzcz1cIicgKyBjbGFzc05hbWUgKyAnXCIgdGl0bGU9XCInICsgbmFtZSArICdcIiBhcmlhLWxhYmVsPVwiJyArIG5hbWUgKyAnXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwnICsgdGFnTmFtZSArIGF0dHJzICsgJz4nICsgbmFtZSArICc8LycgKyB0YWdOYW1lICsgJz4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj48L2xpPic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpc3QgKz0gJzwvdWw+PC9kaXY+JztcclxuXHJcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSBsaXN0O1xyXG5cclxuICAgICAgICByZXR1cm4gbGlzdERpdjtcclxuICAgIH0sXHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIGNvcmVcclxuICAgICAqL1xyXG4gICAgYWN0aXZlOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGxldCBmb3JtYXRUaXRsZSA9IHRoaXMubGFuZy50b29sYmFyLmZvcm1hdHM7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5jb250ZXh0LmZvcm1hdEJsb2NrLnRhcmdldFRleHQ7XHJcblxyXG4gICAgICAgIGlmICghZWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KHRhcmdldCwgZm9ybWF0VGl0bGUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy51dGlsLmlzRm9ybWF0RWxlbWVudChlbGVtZW50KSkge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXRDb250ZXh0ID0gdGhpcy5jb250ZXh0LmZvcm1hdEJsb2NrO1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXRMaXN0ID0gZm9ybWF0Q29udGV4dC5fZm9ybWF0TGlzdDtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IChlbGVtZW50LmNsYXNzTmFtZS5tYXRjaCgvKFxcc3xeKV9fc2VfX2Zvcm1hdF9fW15cXHNdKy8pIHx8IFsnJ10pWzBdLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBmb3JtYXRMaXN0Lmxlbmd0aCwgZjsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmID0gZm9ybWF0TGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlTmFtZSA9PT0gZi5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSAmJiBjbGFzc05hbWUgPT09IGYuZ2V0QXR0cmlidXRlKCdkYXRhLWNsYXNzJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXRUaXRsZSA9IGYudGl0bGU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5jaGFuZ2VUeHQodGFyZ2V0LCBmb3JtYXRUaXRsZSk7XHJcbiAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnLCBub2RlTmFtZSk7XHJcbiAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RhdGEtY2xhc3MnLCBjbGFzc05hbWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBzdWJtZW51XHJcbiAgICAgKi9cclxuICAgIG9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0Q29udGV4dCA9IHRoaXMuY29udGV4dC5mb3JtYXRCbG9jaztcclxuICAgICAgICBjb25zdCBmb3JtYXRMaXN0ID0gZm9ybWF0Q29udGV4dC5fZm9ybWF0TGlzdDtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSBmb3JtYXRDb250ZXh0LnRhcmdldFRleHQ7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEZvcm1hdCA9ICh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykgfHwgJycpICsgKHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2xhc3MnKSB8fCAnJyk7XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50Rm9ybWF0ICE9PSBmb3JtYXRDb250ZXh0LmN1cnJlbnRGb3JtYXQpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZvcm1hdExpc3QubGVuZ3RoLCBmOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGYgPSBmb3JtYXRMaXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb3JtYXQgPT09IGYuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykgKyBmLmdldEF0dHJpYnV0ZSgnZGF0YS1jbGFzcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKGYsICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGYsICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9ybWF0Q29udGV4dC5jdXJyZW50Rm9ybWF0ID0gY3VycmVudEZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHBpY2tVcDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgbGV0IHRhcmdldCA9IGUudGFyZ2V0O1xyXG4gICAgICAgIGxldCBjb21tYW5kID0gbnVsbCwgdmFsdWUgPSBudWxsLCB0YWcgPSBudWxsLCBjbGFzc05hbWUgPSAnJztcclxuICAgICAgICBcclxuICAgICAgICB3aGlsZSAoIWNvbW1hbmQgJiYgIS9VTC9pLnRlc3QodGFyZ2V0LnRhZ05hbWUpKSB7XHJcbiAgICAgICAgICAgIGNvbW1hbmQgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcclxuICAgICAgICAgICAgdmFsdWUgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJyk7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2xhc3MnKTtcclxuICAgICAgICAgICAgaWYgKGNvbW1hbmQpIHtcclxuICAgICAgICAgICAgICAgIHRhZyA9IHRhcmdldC5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvbW1hbmQpIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gYmxvY2txdW90ZVxyXG4gICAgICAgIGlmIChjb21tYW5kID09PSAncmFuZ2UnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlRWxlbWVudCA9IHRhZy5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5UmFuZ2VGb3JtYXRFbGVtZW50KHJhbmdlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGZyZWUsIHJlcGxhY2VcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHJhbmdlID0gdGhpcy5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0ZWRGb3Jtc3RzID0gdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnRzQW5kQ29tcG9uZW50cyhmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRGb3Jtc3RzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFJhbmdlX2FkZExpbmUocmFuZ2UsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRGb3Jtc3RzID0gdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnRzQW5kQ29tcG9uZW50cyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRGb3Jtc3RzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzdGFydE9mZnNldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmRPZmZzZXQgPSByYW5nZS5lbmRPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB1dGlsID0gdGhpcy51dGlsO1xyXG4gICAgICAgICAgICBsZXQgZmlyc3QgPSBzZWxlY3RlZEZvcm1zdHNbMF07XHJcbiAgICAgICAgICAgIGxldCBsYXN0ID0gc2VsZWN0ZWRGb3Jtc3RzW3NlbGVjdGVkRm9ybXN0cy5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3RQYXRoID0gdXRpbC5nZXROb2RlUGF0aChyYW5nZS5zdGFydENvbnRhaW5lciwgZmlyc3QsIG51bGwsIG51bGwpO1xyXG4gICAgICAgICAgICBjb25zdCBsYXN0UGF0aCA9IHV0aWwuZ2V0Tm9kZVBhdGgocmFuZ2UuZW5kQ29udGFpbmVyLCBsYXN0LCBudWxsLCBudWxsKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIHJlbW92ZSBzZWxlY3RlZCBsaXN0XHJcbiAgICAgICAgICAgIGNvbnN0IHJsaXN0ID0gdGhpcy5kZXRhY2hMaXN0KHNlbGVjdGVkRm9ybXN0cywgZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmxpc3Quc2MpIGZpcnN0ID0gcmxpc3Quc2M7XHJcbiAgICAgICAgICAgIGlmIChybGlzdC5lYykgbGFzdCA9IHJsaXN0LmVjO1xyXG5cclxuICAgICAgICAgICAgLy8gY2hhbmdlIGZvcm1hdCB0YWdcclxuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZSh1dGlsLmdldE5vZGVGcm9tUGF0aChmaXJzdFBhdGgsIGZpcnN0KSwgc3RhcnRPZmZzZXQsIHV0aWwuZ2V0Tm9kZUZyb21QYXRoKGxhc3RQYXRoLCBsYXN0KSwgZW5kT2Zmc2V0KTtcclxuICAgICAgICAgICAgY29uc3QgbW9kaWZpZWRGb3Jtc3RzID0gdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnRzQW5kQ29tcG9uZW50cyhmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBmcmVlIGZvcm1hdFxyXG4gICAgICAgICAgICBpZiAoY29tbWFuZCA9PT0gJ2ZyZWUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW4gPSBtb2RpZmllZEZvcm1zdHMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIGxldCBwYXJlbnROb2RlID0gbW9kaWZpZWRGb3Jtc3RzW2xlbl0ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgIGxldCBmcmVlRWxlbWVudCA9IHRhZy5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZm9jdXNFbGVtZW50ID0gZnJlZUVsZW1lbnQ7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBsZW4sIGYsIGh0bWwsIGJlZm9yZSwgbmV4dCwgaW5uZXIsIGlzQ29tcCwgZmlyc3QgPSB0cnVlOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGYgPSBtb2RpZmllZEZvcm1zdHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGYgPT09ICghbW9kaWZpZWRGb3Jtc3RzW2kgKyAxXSA/IG51bGwgOiBtb2RpZmllZEZvcm1zdHNbaSArIDFdLnBhcmVudE5vZGUpKSBjb250aW51ZTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlzQ29tcCA9IHV0aWwuaXNDb21wb25lbnQoZik7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGlzQ29tcCA/ICcnIDogZi5pbm5lckhUTUwucmVwbGFjZSgvKD8hPilcXHMrKD89PCl8XFxuL2csICcgJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlID0gdXRpbC5nZXRQYXJlbnRFbGVtZW50KGYsIGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50LnBhcmVudE5vZGUgPT09IHBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50Tm9kZSAhPT0gZi5wYXJlbnROb2RlIHx8IGlzQ29tcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQocGFyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZnJlZUVsZW1lbnQsIHBhcmVudE5vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZyZWVFbGVtZW50LCBiZWZvcmUgPyBiZWZvcmUubmV4dFNpYmxpbmcgOiBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBmLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBmcmVlRWxlbWVudC5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgZnJlZUVsZW1lbnQubm9kZU5hbWUgPT09IG5leHQubm9kZU5hbWUgJiYgdXRpbC5pc1NhbWVBdHRyaWJ1dGVzKGZyZWVFbGVtZW50LCBuZXh0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZUVsZW1lbnQuaW5uZXJIVE1MICs9ICc8QlI+JyArIG5leHQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKG5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmVlRWxlbWVudCA9IHRhZy5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaW5uZXIgPSBmcmVlRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJlZUVsZW1lbnQuaW5uZXJIVE1MID0gKChmaXJzdCB8fCAhaHRtbCB8fCAhaW5uZXIgfHwgLzxicj4kL2kudGVzdChodG1sKSkgPyBodG1sIDogaHRtbCArICc8QlI+JykgKyBpbm5lcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZnJlZUVsZW1lbnQsIGYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gZi5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgZnJlZUVsZW1lbnQubm9kZU5hbWUgPT09IG5leHQubm9kZU5hbWUgJiYgdXRpbC5pc1NhbWVBdHRyaWJ1dGVzKGZyZWVFbGVtZW50LCBuZXh0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZUVsZW1lbnQuaW5uZXJIVE1MICs9ICc8QlI+JyArIG5leHQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKG5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gZnJlZUVsZW1lbnQucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAmJiBmcmVlRWxlbWVudC5ub2RlTmFtZSA9PT0gcHJldi5ub2RlTmFtZSAmJiB1dGlsLmlzU2FtZUF0dHJpYnV0ZXMoZnJlZUVsZW1lbnQsIHByZXYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LmlubmVySFRNTCArPSAnPEJSPicgKyBmcmVlRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oZnJlZUVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ29tcCkgdXRpbC5yZW1vdmVJdGVtKGYpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghIWh0bWwpIGZpcnN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoZm9jdXNFbGVtZW50LCAwLCBmb2N1c0VsZW1lbnQsIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHJlcGxhY2UgZm9ybWF0XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG1vZGlmaWVkRm9ybXN0cy5sZW5ndGgsIG5vZGUsIG5ld0Zvcm1hdDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG1vZGlmaWVkRm9ybXN0c1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gdmFsdWUudG9Mb3dlckNhc2UoKSB8fCAobm9kZS5jbGFzc05hbWUubWF0Y2goLyhcXHN8XilfX3NlX19mb3JtYXRfX1teXFxzXSsvKSB8fCBbJyddKVswXS50cmltKCkgIT09IGNsYXNzTmFtZSkgJiYgIXV0aWwuaXNDb21wb25lbnQobm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Rm9ybWF0ID0gdGFnLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29weUZvcm1hdEF0dHJpYnV0ZXMobmV3Rm9ybWF0LCBub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Rm9ybWF0LmlubmVySFRNTCA9IG5vZGUuaW5uZXJIVE1MO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3Rm9ybWF0LCBub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkgZmlyc3QgPSBuZXdGb3JtYXQgfHwgbm9kZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gbGVuIC0gMSkgbGFzdCA9IG5ld0Zvcm1hdCB8fCBub2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld0Zvcm1hdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UodXRpbC5nZXROb2RlRnJvbVBhdGgoZmlyc3RQYXRoLCBmaXJzdCksIHN0YXJ0T2Zmc2V0LCB1dGlsLmdldE5vZGVGcm9tUGF0aChsYXN0UGF0aCwgbGFzdCksIGVuZE9mZnNldCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdWJtZW51T2ZmKCk7XHJcbiAgICB9XHJcbn07XHJcbiIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTk3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ2xpbmVIZWlnaHQnLFxyXG4gICAgZGlzcGxheTogJ3N1Ym1lbnUnLFxyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSwgdGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XHJcbiAgICAgICAgY29udGV4dC5saW5lSGVpZ2h0ID0ge1xyXG4gICAgICAgICAgICBfc2l6ZUxpc3Q6IG51bGwsXHJcbiAgICAgICAgICAgIGN1cnJlbnRTaXplOiAtMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qKiBzZXQgc3VibWVudSAqL1xyXG4gICAgICAgIGxldCBsaXN0RGl2ID0gdGhpcy5zZXRTdWJtZW51KGNvcmUpO1xyXG4gICAgICAgIGxldCBsaXN0VWwgPSBsaXN0RGl2LnF1ZXJ5U2VsZWN0b3IoJ3VsJyk7XHJcblxyXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgbGlzdFVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5waWNrdXAuYmluZChjb3JlKSk7XHJcblxyXG4gICAgICAgIGNvbnRleHQubGluZUhlaWdodC5fc2l6ZUxpc3QgPSBsaXN0VWwucXVlcnlTZWxlY3RvckFsbCgnbGkgYnV0dG9uJyk7XHJcblxyXG4gICAgICAgIC8qKiBhcHBlbmQgdGFyZ2V0IGJ1dHRvbiBtZW51ICovXHJcbiAgICAgICAgY29yZS5pbml0TWVudVRhcmdldCh0aGlzLm5hbWUsIHRhcmdldEVsZW1lbnQsIGxpc3REaXYpO1xyXG5cclxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXHJcbiAgICAgICAgbGlzdERpdiA9IG51bGwsIGxpc3RVbCA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN1Ym1lbnU6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gY29yZS5vcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGxhbmcgPSBjb3JlLmxhbmc7XHJcbiAgICAgICAgY29uc3QgbGlzdERpdiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuXHJcbiAgICAgICAgbGlzdERpdi5jbGFzc05hbWUgPSAnc2Utc3VibWVudSBzZS1saXN0LWxheWVyJztcclxuXHJcbiAgICAgICAgY29uc3Qgc2l6ZUxpc3QgPSAhb3B0aW9uLmxpbmVIZWlnaHRzID8gW1xyXG4gICAgICAgICAgICB7dGV4dDogJzEnLCB2YWx1ZTogMX0sXHJcbiAgICAgICAgICAgIHt0ZXh0OiAnMS4xNScsIHZhbHVlOiAxLjE1fSxcclxuICAgICAgICAgICAge3RleHQ6ICcxLjUnLCB2YWx1ZTogMS41fSxcclxuICAgICAgICAgICAge3RleHQ6ICcyJywgdmFsdWU6IDJ9XHJcbiAgICAgICAgXSA6IG9wdGlvbi5saW5lSGVpZ2h0cztcclxuXHJcbiAgICAgICAgbGV0IGxpc3QgPSAnPGRpdiBjbGFzcz1cInNlLWxpc3QtaW5uZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICc8dWwgY2xhc3M9XCJzZS1saXN0LWJhc2ljXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxsaT48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImRlZmF1bHRfdmFsdWUgc2UtYnRuLWxpc3RcIiB0aXRsZT1cIicgKyBsYW5nLnRvb2xiYXIuZGVmYXVsdCArICdcIiBhcmlhLWxhYmVsPVwiJyArIGxhbmcudG9vbGJhci5kZWZhdWx0ICsgJ1wiPignICsgbGFuZy50b29sYmFyLmRlZmF1bHQgKyAnKTwvYnV0dG9uPjwvbGk+JztcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2l6ZUxpc3QubGVuZ3RoLCBzaXplOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgc2l6ZSA9IHNpemVMaXN0W2ldO1xyXG4gICAgICAgICAgICBsaXN0ICs9ICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdFwiIGRhdGEtdmFsdWU9XCInICsgc2l6ZS52YWx1ZSArICdcIiB0aXRsZT1cIicgKyBzaXplLnRleHQgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBzaXplLnRleHQgKyAnXCI+JyArIHNpemUudGV4dCArICc8L2J1dHRvbj48L2xpPic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpc3QgKz0gJzwvdWw+PC9kaXY+JztcclxuXHJcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSBsaXN0O1xyXG5cclxuICAgICAgICByZXR1cm4gbGlzdERpdjtcclxuICAgIH0sXHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHN1Ym1lbnVcclxuICAgICAqL1xyXG4gICAgb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBsaW5lSGVpZ2h0Q29udGV4dCA9IHRoaXMuY29udGV4dC5saW5lSGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IHNpemVMaXN0ID0gbGluZUhlaWdodENvbnRleHQuX3NpemVMaXN0O1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMudXRpbC5nZXRGb3JtYXRFbGVtZW50KHRoaXMuZ2V0U2VsZWN0aW9uTm9kZSgpKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50U2l6ZSA9ICFmb3JtYXQgPyAnJyA6IGZvcm1hdC5zdHlsZS5saW5lSGVpZ2h0ICsgJyc7XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50U2l6ZSAhPT0gbGluZUhlaWdodENvbnRleHQuY3VycmVudFNpemUpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHNpemVMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNpemUgPT09IHNpemVMaXN0W2ldLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLmFkZENsYXNzKHNpemVMaXN0W2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyhzaXplTGlzdFtpXSwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsaW5lSGVpZ2h0Q29udGV4dC5jdXJyZW50U2l6ZSA9IGN1cnJlbnRTaXplO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcGlja3VwOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICghL15CVVRUT04kL2kudGVzdChlLnRhcmdldC50YWdOYW1lKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpIHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdHMgPSB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHMoKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGZvcm1hdHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9ybWF0c1tpXS5zdHlsZS5saW5lSGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN1Ym1lbnVPZmYoKTtcclxuXHJcbiAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgIH1cclxufTtcclxuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG5hbWU6ICdwYXJhZ3JhcGhTdHlsZScsXHJcbiAgICBkaXNwbGF5OiAnc3VibWVudScsXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChjb3JlLCB0YXJnZXRFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcclxuICAgICAgICBjb250ZXh0LnBhcmFncmFwaFN0eWxlID0ge1xyXG4gICAgICAgICAgICBfY2xhc3NMaXN0OiBudWxsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIHNldCBzdWJtZW51ICovXHJcbiAgICAgICAgbGV0IGxpc3REaXYgPSB0aGlzLnNldFN1Ym1lbnUoY29yZSk7XHJcblxyXG4gICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgbGlzdERpdi5xdWVyeVNlbGVjdG9yKCd1bCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5waWNrVXAuYmluZChjb3JlKSk7XHJcblxyXG4gICAgICAgIGNvbnRleHQucGFyYWdyYXBoU3R5bGUuX2NsYXNzTGlzdCA9IGxpc3REaXYucXVlcnlTZWxlY3RvckFsbCgnbGkgYnV0dG9uJyk7XHJcblxyXG4gICAgICAgIC8qKiBhcHBlbmQgdGFyZ2V0IGJ1dHRvbiBtZW51ICovXHJcbiAgICAgICAgY29yZS5pbml0TWVudVRhcmdldCh0aGlzLm5hbWUsIHRhcmdldEVsZW1lbnQsIGxpc3REaXYpO1xyXG5cclxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXHJcbiAgICAgICAgbGlzdERpdiA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN1Ym1lbnU6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gY29yZS5vcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgbGlzdERpdi5jbGFzc05hbWUgPSAnc2Utc3VibWVudSBzZS1saXN0LWxheWVyIHNlLWxpc3QtZm9ybWF0JztcclxuXHJcbiAgICAgICAgY29uc3QgbWVudUxhbmcgPSBjb3JlLmxhbmcubWVudTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0TGlzdCA9IHtcclxuICAgICAgICAgICAgc3BhY2VkOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBtZW51TGFuZy5zcGFjZWQsXHJcbiAgICAgICAgICAgICAgICBjbGFzczogJ19fc2VfX3Atc3BhY2VkJyxcclxuICAgICAgICAgICAgICAgIF9jbGFzczogJydcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYm9yZGVyZWQ6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1lbnVMYW5nLmJvcmRlcmVkLFxyXG4gICAgICAgICAgICAgICAgY2xhc3M6ICdfX3NlX19wLWJvcmRlcmVkJyxcclxuICAgICAgICAgICAgICAgIF9jbGFzczogJydcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbmVvbjoge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbWVudUxhbmcubmVvbixcclxuICAgICAgICAgICAgICAgIGNsYXNzOiAnX19zZV9fcC1uZW9uJyxcclxuICAgICAgICAgICAgICAgIF9jbGFzczogJydcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoU3R5bGVzID0gIW9wdGlvbi5wYXJhZ3JhcGhTdHlsZXMgfHwgb3B0aW9uLnBhcmFncmFwaFN0eWxlcy5sZW5ndGggPT09IDAgPyBbJ3NwYWNlZCcsICdib3JkZXJlZCcsICduZW9uJ10gOiBvcHRpb24ucGFyYWdyYXBoU3R5bGVzO1xyXG5cclxuICAgICAgICBsZXQgbGlzdCA9ICc8ZGl2IGNsYXNzPVwic2UtbGlzdC1pbm5lclwiPjx1bCBjbGFzcz1cInNlLWxpc3QtYmFzaWNcIj4nO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXJhZ3JhcGhTdHlsZXMubGVuZ3RoLCBwLCBuYW1lLCBhdHRycywgX2NsYXNzOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgcCA9IHBhcmFncmFwaFN0eWxlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRTdHlsZSA9IGRlZmF1bHRMaXN0W3AudG9Mb3dlckNhc2UoKV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRlZmF1bHRTdHlsZSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBwID0gZGVmYXVsdFN0eWxlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBuYW1lID0gcC5uYW1lO1xyXG4gICAgICAgICAgICBhdHRycyA9IHAuY2xhc3MgPyAnIGNsYXNzPVwiJyArIHAuY2xhc3MgKyAnXCInIDogJyc7XHJcbiAgICAgICAgICAgIF9jbGFzcyA9IHAuX2NsYXNzO1xyXG5cclxuICAgICAgICAgICAgbGlzdCArPSAnPGxpPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3QnICsgKF9jbGFzcyA/ICcgJyArIF9jbGFzczogJycpICsgJ1wiIGRhdGEtdmFsdWU9XCInICsgcC5jbGFzcyArICdcIiB0aXRsZT1cIicgKyBuYW1lICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgbmFtZSArICdcIj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGRpdicgKyBhdHRycyArICc+JyArIG5hbWUgKyAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+PC9saT4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaXN0ICs9ICc8L3VsPjwvZGl2Pic7XHJcblxyXG4gICAgICAgIGxpc3REaXYuaW5uZXJIVE1MID0gbGlzdDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpc3REaXY7XHJcbiAgICB9LFxyXG5cclxuICAgICAvKipcclxuICAgICAqIEBPdmVycmlkZSBzdWJtZW51XHJcbiAgICAgKi9cclxuICAgIG9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoQ29udGV4dCA9IHRoaXMuY29udGV4dC5wYXJhZ3JhcGhTdHlsZTtcclxuICAgICAgICBjb25zdCBwYXJhZ3JhcGhMaXN0ID0gcGFyYWdyYXBoQ29udGV4dC5fY2xhc3NMaXN0O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGb3JtYXQgPSB0aGlzLnV0aWwuZ2V0Rm9ybWF0RWxlbWVudCh0aGlzLmdldFNlbGVjdGlvbk5vZGUoKSk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXJhZ3JhcGhMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnV0aWwuaGFzQ2xhc3MoY3VycmVudEZvcm1hdCwgcGFyYWdyYXBoTGlzdFtpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhwYXJhZ3JhcGhMaXN0W2ldLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MocGFyYWdyYXBoTGlzdFtpXSwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBwaWNrVXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHdoaWxlICghL15VTCQvaS50ZXN0KHRhcmdldC50YWdOYW1lKSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlKSBicmVhaztcclxuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBzZWxlY3RlZEZvcm1zdHMgPSB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHMoKTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRGb3Jtc3RzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldFJhbmdlX2FkZExpbmUodGhpcy5nZXRSYW5nZSgpLCBudWxsKTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRGb3Jtc3RzID0gdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnRzKCk7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEZvcm1zdHMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjaGFuZ2UgZm9ybWF0IGNsYXNzXHJcbiAgICAgICAgY29uc3QgdG9nZ2xlQ2xhc3MgPSB0aGlzLnV0aWwuaGFzQ2xhc3ModGFyZ2V0LCAnYWN0aXZlJykgPyB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MuYmluZCh0aGlzLnV0aWwpIDogdGhpcy51dGlsLmFkZENsYXNzLmJpbmQodGhpcy51dGlsKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRGb3Jtc3RzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGVjdGVkRm9ybXN0c1tpXSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdWJtZW51T2ZmKCk7XHJcblxyXG4gICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICB9XHJcbn07XHJcbiIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAndGV4dFN0eWxlJyxcclxuICAgIGRpc3BsYXk6ICdzdWJtZW51JyxcclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUsIHRhcmdldEVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gY29yZS5jb250ZXh0O1xyXG4gICAgICAgIGNvbnRleHQudGV4dFN0eWxlID0ge1xyXG4gICAgICAgICAgICBfc3R5bGVMaXN0OiBudWxsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLyoqIHNldCBzdWJtZW51ICovXHJcbiAgICAgICAgbGV0IGxpc3REaXYgPSB0aGlzLnNldFN1Ym1lbnUoY29yZSk7XHJcbiAgICAgICAgbGV0IGxpc3RVbCA9IGxpc3REaXYucXVlcnlTZWxlY3RvcigndWwnKTtcclxuXHJcbiAgICAgICAgLyoqIGFkZCBldmVudCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICBsaXN0VWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBpY2t1cC5iaW5kKGNvcmUpKTtcclxuXHJcbiAgICAgICAgY29udGV4dC50ZXh0U3R5bGUuX3N0eWxlTGlzdCA9IGxpc3REaXYucXVlcnlTZWxlY3RvckFsbCgnbGkgYnV0dG9uJyk7XHJcblxyXG4gICAgICAgIC8qKiBhcHBlbmQgdGFyZ2V0IGJ1dHRvbiBtZW51ICovXHJcbiAgICAgICAgY29yZS5pbml0TWVudVRhcmdldCh0aGlzLm5hbWUsIHRhcmdldEVsZW1lbnQsIGxpc3REaXYpO1xyXG5cclxuICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXHJcbiAgICAgICAgbGlzdERpdiA9IG51bGwsIGxpc3RVbCA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFN1Ym1lbnU6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gY29yZS5vcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGxpc3REaXYgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgbGlzdERpdi5jbGFzc05hbWUgPSAnc2Utc3VibWVudSBzZS1saXN0LWxheWVyIHNlLWxpc3QtZm9ybWF0JztcclxuXHJcbiAgICAgICAgY29uc3QgZGVmYXVsdExpc3QgPSB7XHJcbiAgICAgICAgICAgIGNvZGU6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGNvcmUubGFuZy5tZW51LmNvZGUsXHJcbiAgICAgICAgICAgICAgICBjbGFzczogJ19fc2VfX3QtY29kZScsXHJcbiAgICAgICAgICAgICAgICB0YWc6ICdjb2RlJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdHJhbnNsdWNlbnQ6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGNvcmUubGFuZy5tZW51LnRyYW5zbHVjZW50LFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdvcGFjaXR5OiAwLjU7JyxcclxuICAgICAgICAgICAgICAgIHRhZzogJ3NwYW4nLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaGFkb3c6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGNvcmUubGFuZy5tZW51LnNoYWRvdyxcclxuICAgICAgICAgICAgICAgIGNsYXNzOiAnX19zZV9fdC1zaGFkb3cnLFxyXG4gICAgICAgICAgICAgICAgdGFnOiAnc3BhbicsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHN0eWxlTGlzdCA9ICFvcHRpb24udGV4dFN0eWxlcyA/IGNvcmUuX3cuT2JqZWN0LmtleXMoZGVmYXVsdExpc3QpIDogb3B0aW9uLnRleHRTdHlsZXM7XHJcblxyXG4gICAgICAgIGxldCBsaXN0ID0gJzxkaXYgY2xhc3M9XCJzZS1saXN0LWlubmVyXCI+PHVsIGNsYXNzPVwic2UtbGlzdC1iYXNpY1wiPic7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHN0eWxlTGlzdC5sZW5ndGgsIHQsIHRhZywgbmFtZSwgYXR0cnMsIGNvbW1hbmQsIHZhbHVlLCBfY2xhc3M7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB0ID0gc3R5bGVMaXN0W2ldO1xyXG4gICAgICAgICAgICBhdHRycyA9ICcnLCB2YWx1ZSA9ICcnLCBjb21tYW5kID0gW107XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0U3R5bGUgPSBkZWZhdWx0TGlzdFt0LnRvTG93ZXJDYXNlKCldO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkZWZhdWx0U3R5bGUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgdCA9IGRlZmF1bHRTdHlsZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbmFtZSA9IHQubmFtZTtcclxuICAgICAgICAgICAgdGFnID0gdC50YWcgfHwgJ3NwYW4nO1xyXG4gICAgICAgICAgICBfY2xhc3MgPSB0Ll9jbGFzcztcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnN0eWxlKSB7XHJcbiAgICAgICAgICAgICAgICBhdHRycyArPSAnIHN0eWxlPVwiJyArIHQuc3R5bGUgKyAnXCInO1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gdC5zdHlsZS5yZXBsYWNlKC86W147XSsoO3wkKVxccyovZywgJywnKTtcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQucHVzaCgnc3R5bGUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodC5jbGFzcykge1xyXG4gICAgICAgICAgICAgICAgYXR0cnMgKz0gJyBjbGFzcz1cIicgKyB0LmNsYXNzICsgJ1wiJztcclxuICAgICAgICAgICAgICAgIHZhbHVlICs9ICcuJyArIHQuY2xhc3MudHJpbSgpLnJlcGxhY2UoL1xccysvZywgJywuJyk7XHJcbiAgICAgICAgICAgICAgICBjb21tYW5kLnB1c2goJ2NsYXNzJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvLCQvLCAnJyk7XHJcblxyXG4gICAgICAgICAgICBsaXN0ICs9ICc8bGk+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCcgKyAoX2NsYXNzID8gJyAnICsgX2NsYXNzOiAnJykgKyAnXCIgZGF0YS1jb21tYW5kPVwiJyArIHRhZyArICdcIiBkYXRhLXZhbHVlPVwiJyArIHZhbHVlICsgJ1wiIHRpdGxlPVwiJyArIG5hbWUgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyBuYW1lICsgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8JyArIHRhZyArIGF0dHJzICsgJz4nICsgbmFtZSArICAnPC8nICsgdGFnICsgJz4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj48L2xpPic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpc3QgKz0gJzwvdWw+PC9kaXY+JztcclxuXHJcbiAgICAgICAgbGlzdERpdi5pbm5lckhUTUwgPSBsaXN0O1xyXG5cclxuICAgICAgICByZXR1cm4gbGlzdERpdjtcclxuICAgIH0sXHJcblxyXG4gICAgIC8qKlxyXG4gICAgICogQE92ZXJyaWRlIHN1Ym1lbnVcclxuICAgICAqL1xyXG4gICAgb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCB1dGlsID0gdGhpcy51dGlsO1xyXG4gICAgICAgIGNvbnN0IHRleHRTdHlsZUNvbnRleHQgPSB0aGlzLmNvbnRleHQudGV4dFN0eWxlO1xyXG4gICAgICAgIGNvbnN0IHN0eWxlQnV0dG9uTGlzdCA9IHRleHRTdHlsZUNvbnRleHQuX3N0eWxlTGlzdDtcclxuICAgICAgICBjb25zdCBzZWxlY3Rpb25Ob2RlID0gdGhpcy5nZXRTZWxlY3Rpb25Ob2RlKCk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzdHlsZUJ1dHRvbkxpc3QubGVuZ3RoLCBidG4sIGRhdGEsIGFjdGl2ZTsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGJ0biA9IHN0eWxlQnV0dG9uTGlzdFtpXTtcclxuICAgICAgICAgICAgZGF0YSA9IGJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKS5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgZm9yIChsZXQgdiA9IDAsIG5vZGUsIHZhbHVlOyB2IDwgZGF0YS5sZW5ndGg7IHYrKykge1xyXG4gICAgICAgICAgICAgICAgbm9kZSA9IHNlbGVjdGlvbk5vZGU7XHJcbiAgICAgICAgICAgICAgICBhY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYgIXV0aWwuaXNGb3JtYXRFbGVtZW50KG5vZGUpICYmICF1dGlsLmlzQ29tcG9uZW50KG5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJykudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRhdGFbdl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXlxcLi8udGVzdCh2YWx1ZSkgPyB1dGlsLmhhc0NsYXNzKG5vZGUsIHZhbHVlLnJlcGxhY2UoL15cXC4vLCAnJykpIDogISFub2RlLnN0eWxlW3ZhbHVlXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFhY3RpdmUpIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhY3RpdmUgPyB1dGlsLmFkZENsYXNzKGJ0biwgJ2FjdGl2ZScpIDogdXRpbC5yZW1vdmVDbGFzcyhidG4sICdhY3RpdmUnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBwaWNrdXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgICAgICBsZXQgY29tbWFuZCA9IG51bGwsIHRhZyA9IG51bGw7XHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUgKCFjb21tYW5kICYmICEvVUwvaS50ZXN0KHRhcmdldC50YWdOYW1lKSkge1xyXG4gICAgICAgICAgICBjb21tYW5kID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgICAgIGlmIChjb21tYW5kKSB7XHJcbiAgICAgICAgICAgICAgICB0YWcgPSB0YXJnZXQuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGNoZWNrU3R5bGVzID0gdGFnLnN0eWxlLmNzc1RleHQucmVwbGFjZSgvOi4rKDt8JCkvZywgJywnKS5zcGxpdCgnLCcpO1xyXG4gICAgICAgIGNoZWNrU3R5bGVzLnBvcCgpO1xyXG5cclxuICAgICAgICBjb25zdCBjbGFzc2VzID0gdGFnLmNsYXNzTGlzdDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2xhc3Nlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjaGVja1N0eWxlcy5wdXNoKCcuJyArIGNsYXNzZXNbaV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMudXRpbC5oYXNDbGFzcyh0YXJnZXQsICdhY3RpdmUnKSA/IG51bGwgOiB0YWcuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICBjb25zdCByZW1vdmVOb2RlcyA9IG5ld05vZGUgPyBudWxsIDogW3RhZy5ub2RlTmFtZV07XHJcbiAgICAgICAgdGhpcy5ub2RlQ2hhbmdlKG5ld05vZGUsIGNoZWNrU3R5bGVzLCByZW1vdmVOb2RlcywgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuaW1wb3J0IGZpbGVCcm93c2VyIGZyb20gJy4uL21vZHVsZXMvZmlsZUJyb3dzZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgbmFtZTogJ2ltYWdlR2FsbGVyeScsXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb25zdHJ1Y3RvclxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3QgXHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICBjb3JlLmFkZE1vZHVsZShbZmlsZUJyb3dzZXJdKTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNvcmUuY29udGV4dDtcclxuICAgICAgICBjb250ZXh0LmltYWdlR2FsbGVyeSA9IHtcclxuICAgICAgICAgICAgdGl0bGU6IGNvcmUubGFuZy50b29sYmFyLmltYWdlR2FsbGVyeSwgLy8gQFJlcXVpcmVkIEBPdmVycmlkZSBmaWxlQnJvd3NlciAtIEZpbGUgYnJvd3NlciB3aW5kb3cgdGl0bGUuXHJcbiAgICAgICAgICAgIGRpcmVjdERhdGE6IGNvcmUub3B0aW9ucy5pbWFnZUdhbGxlcnlEYXRhLCAvLyBAb3B0aW9uIEBPdmVycmlkZSBmaWxlQnJvd3NlciAtIERpcmVjdCBKU09OIGRhdGEgd2l0aG91dCBtYWtpbmcgc2VydmVyIHJlcXVlc3RzLlxyXG4gICAgICAgICAgICB1cmw6IGNvcmUub3B0aW9ucy5pbWFnZUdhbGxlcnlVcmwsIC8vIEBvcHRpb24gQE92ZXJyaWRlIGZpbGVCcm93c2VyIC0gRmlsZSBzZXJ2ZXIgdXJsLlxyXG4gICAgICAgICAgICBoZWFkZXI6IGNvcmUub3B0aW9ucy5pbWFnZUdhbGxlcnlIZWFkZXIsIC8vIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZUJyb3dzZXIgLSBGaWxlIHNlcnZlciBodHRwIGhlYWRlci5cclxuICAgICAgICAgICAgbGlzdENsYXNzOiAnc2UtaW1hZ2UtbGlzdCcsIC8vIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZUJyb3dzZXIgLSBDbGFzcyBuYW1lIG9mIGxpc3QgZGl2LlxyXG4gICAgICAgICAgICBpdGVtVGVtcGxhdGVIYW5kbGVyOiB0aGlzLmRyYXdJdGVtcywgLy8gQFJlcXVpcmVkIEBPdmVycmlkZSBmaWxlQnJvd3NlciAtIEZ1bmN0aW9uIHRoYXQgZGVmaW5lcyB0aGUgSFRNTCBvZiBhbiBmaWxlIGl0ZW0uXHJcbiAgICAgICAgICAgIHNlbGVjdG9ySGFuZGxlcjogdGhpcy5zZXRJbWFnZS5iaW5kKGNvcmUpLCAvLyBAUmVxdWlyZWQgQE92ZXJyaWRlIGZpbGVCcm93c2VyIC0gRnVuY3Rpb24gdGhhdCBhY3Rpb24gd2hlbiBpdGVtIGNsaWNrLlxyXG4gICAgICAgICAgICBjb2x1bW5TaXplOiA0IC8vIEBPcHRpb24gQE92ZXJyaWRlIGZpbGVCcm93c2VyIC0gTnVtYmVyIG9mIFwiZGl2LnNlLWZpbGUtaXRlbS1jb2x1bW5cIiB0byBiZSBjcmVhdGVkIChkZWZhdWx0OiA0KVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEBSZXF1aXJlZCBAT3ZlcnJpZGUgZmlsZUJyb3dzZXJcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPcGVuIGEgZmlsZSBicm93c2VyLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfSBzZWxlY3RvckhhbmRsZXIgV2hlbiB0aGUgZnVuY3Rpb24gY29tZXMgYXMgYW4gYXJndW1lbnQgdmFsdWUsIGl0IHN1YnN0aXR1dGVzIFwiY29udGV4dC5zZWxlY3RvckhhbmRsZXJcIi5cclxuICAgICAqL1xyXG4gICAgb3BlbjogZnVuY3Rpb24gKHNlbGVjdG9ySGFuZGxlcikge1xyXG4gICAgICAgIHRoaXMucGx1Z2lucy5maWxlQnJvd3Nlci5vcGVuLmNhbGwodGhpcywgJ2ltYWdlR2FsbGVyeScsIHNlbGVjdG9ySGFuZGxlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQFJlcXVpcmVkIEBPdmVycmlkZSBmaWxlQnJvd3NlclxyXG4gICAgICogQGRlc2NyaXB0aW9uIERlZmluZSB0aGUgSFRNTCBvZiB0aGUgaXRlbSB0byBiZSBwdXQgaW4gXCJkaXYuc2UtZmlsZS1pdGVtLWNvbHVtblwiLlxyXG4gICAgICogRm9ybWF0OiBbXHJcbiAgICAgKiAgICAgIHsgc3JjOiBcImltYWdlIHNyY1wiLCBuYW1lOiBcIm5hbWUoQG9wdGlvbilcIiwgYWx0OiBcImltYWdlIGFsdChAb3B0aW9uKVwiLCB0YWc6IFwidGFnIG5hbWUoQG9wdGlvbilcIiB9XHJcbiAgICAgKiBdXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaXRlbSBJdGVtIG9mIHRoZSByZXNwb25zZSBkYXRhJ3MgYXJyYXlcclxuICAgICAqL1xyXG4gICAgZHJhd0l0ZW1zOiBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIGNvbnN0IHNyY05hbWUgPSBpdGVtLnNyYy5zcGxpdCgnLycpLnBvcCgpO1xyXG4gICAgICAgIHJldHVybiAgJzxkaXYgY2xhc3M9XCJzZS1maWxlLWl0ZW0taW1nXCI+PGltZyBzcmM9XCInICsgKGl0ZW0udGh1bWJuYWlsIHx8IGl0ZW0uc3JjKSArICdcIiBhbHQ9XCInICsgKGl0ZW0uYWx0IHx8IHNyY05hbWUpICsgJ1wiIGRhdGEtY29tbWFuZD1cInBpY2tcIiBkYXRhLXZhbHVlPVwiJyArIChpdGVtLnNyYyB8fCBpdGVtLnRodW1ibmFpbCkgKyAnXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1maWxlLWltZy1uYW1lIHNlLWZpbGUtbmFtZS1iYWNrXCI+PC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1maWxlLWltZy1uYW1lIF9fc2VfX2ltZ19uYW1lXCI+JyArIChpdGVtLm5hbWUgfHwgc3JjTmFtZSkgKyAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+JztcclxuICAgIH0sXHJcblxyXG4gICAgc2V0SW1hZ2U6IGZ1bmN0aW9uICh0YXJnZXQsIGZpbGVOYW1lKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsUGx1Z2luKCdpbWFnZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IHtuYW1lOiBmaWxlTmFtZSwgc2l6ZTogMH07XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5pbWFnZS5jcmVhdGVfaW1hZ2UuY2FsbCh0aGlzLCB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJyksIG51bGwsIHRoaXMuY29udGV4dC5pbWFnZS5fb3JpZ2luX3csIHRoaXMuY29udGV4dC5pbWFnZS5fb3JpZ2luX2gsICdub25lJywgZmlsZSwgdGFyZ2V0LmFsdCk7XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpLCBudWxsKTtcclxuICAgIH1cclxufTsiLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDIwIEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAvLyBydGwgaWNvblxyXG4gICBydGw6IHtcclxuICAgICAgaXRhbGljOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxMC41IDE1LjhcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnPjxwYXRoIGQ9XCJNMC4zLDAuMWMwLjMsMCwwLjUsMCwwLjcsMGMxLDAuMSwxLjcsMC4xLDIuMiwwLjFINEw3LjIsMGwwLjIsMS4xSDdjLTAuNSwwLTEsMC4xLTEuNSwwLjN2MC40bDAuMywxLjlMNiw0LjRMNi4zLDYgbDAuMSwwLjRsMC4xLDAuNWMwLjEsMC4yLDAuMSwwLjQsMC4yLDAuN3MwLjEsMC42LDAuMiwwLjlMNyw5LjFsMC42LDIuOGwwLjMsMS40YzAuMSwwLjQsMC4yLDAuNywwLjQsMWMwLjQsMC4yLDAuOCwwLjMsMS4yLDAuNCBsMC44LDAuMmwwLjIsMC45bC0xLjEsMGMtMC45LTAuMS0xLjUtMC4xLTEuOC0wLjFoLTJjLTAuOSwwLjEtMS40LDAuMi0xLjUsMC4yYy0wLjEsMC0wLjIsMC0wLjMsMEgzLjRjLTAuMSwwLTAuMiwwLTAuMiwwIGwtMC4xLTAuNGMwLTAuMi0wLjEtMC40LTAuMS0wLjZsMC43LTAuMWMwLjQsMCwwLjgtMC4xLDEuMi0wLjJjMC0wLjEsMC0wLjIsMC0wLjNsLTAuMS0wLjVsLTAuNC0yLjRMNCw5LjZMMy40LDYuNCBDMy4yLDUuNywzLDQuNywyLjcsMy4zYzAtMC4zLTAuMS0wLjUtMC4xLTAuOEMyLjUsMi4xLDIuNCwxLjksMi4zLDEuNkMyLDEuNCwxLjYsMS4zLDEuMywxLjJDMC45LDEuMiwwLjUsMS4xLDAuMiwwLjlMMCwwLjRMMCwwIEwwLjMsMC4xTDAuMywwLjF6XCIvPjwvZz48L3N2Zz4nLFxyXG4gICAgICBpbmRlbnQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjcgMTIuNFwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+PGc+PGc+PHBhdGggZD1cIk0xNS41LDEwLjFMMTUuNSwxMC4xYzAuMSwwLDAuMywwLjEsMC4zLDAuM3YxLjdjMCwwLjEsMCwwLjEtMC4xLDAuMmMtMC4xLDAuMS0wLjEsMC4xLTAuMiwwLjFsLTE1LjIsMCBjLTAuMSwwLTAuMSwwLTAuMi0wLjFDMCwxMi4yLDAsMTIuMiwwLDEyLjFsMC0xLjdjMC0wLjEsMC0wLjEsMC4xLTAuMmMwLjEtMC4xLDAuMS0wLjEsMC4yLTAuMUMwLjMsMTAuMSwxNS41LDEwLjEsMTUuNSwxMC4xeiBNOS44LDYuN2MwLjEsMCwwLjEsMCwwLjIsMC4xQzEwLjEsNi45LDEwLjEsNywxMC4xLDd2MS43YzAsMC4xLDAsMC4yLTAuMSwwLjJDMTAsOSw5LjksOSw5LjgsOUwwLjMsOUMwLjIsOSwwLjEsOSwwLjEsOC45IEMwLDguOSwwLDguOCwwLDguN1Y3QzAsNywwLDYuOSwwLjEsNi44YzAuMS0wLjEsMC4xLTAuMSwwLjItMC4xQzAuMyw2LjcsOS44LDYuNyw5LjgsNi43eiBNMC4zLDMuNGg5LjZoMGMwLjEsMCwwLjMsMC4xLDAuMywwLjMgdjEuN3YwYzAsMC4xLTAuMSwwLjMtMC4zLDAuM0gwLjNjLTAuMSwwLTAuMSwwLTAuMi0wLjFDMCw1LjUsMCw1LjQsMCw1LjNWMy42YzAtMC4xLDAtMC4xLDAuMS0wLjJDMC4xLDMuNCwwLjIsMy40LDAuMywzLjQgTDAuMywzLjR6IE0wLjMsMGwxNS4yLDBjMC4xLDAsMC4xLDAsMC4yLDAuMWMwLjEsMC4xLDAuMSwwLjEsMC4xLDAuMlYyYzAsMC4xLDAsMC4yLTAuMSwwLjJjLTAuMSwwLjEtMC4xLDAuMS0wLjIsMC4xSDAuMyBjLTAuMSwwLTAuMSwwLTAuMi0wLjFDMCwyLjEsMCwyLDAsMmwwLTEuN2MwLTAuMSwwLTAuMSwwLjEtMC4yQzAuMSwwLDAuMiwwLDAuMywwelwiLz48L2c+PHBhdGggZD1cIk0xMy4xLDMuNUwxNS43LDZjMC4xLDAuMSwwLjEsMC4zLDAsMC40bC0yLjUsMi41QzEzLjEsOSwxMyw5LDEyLjksOWMtMC4xLDAtMC4xLDAtMC4yLTAuMWMtMC4xLTAuMS0wLjEtMC4xLTAuMS0wLjJWMy43IGMwLTAuMSwwLTAuMiwwLjEtMC4yYzAuMS0wLjEsMC4xLTAuMSwwLjItMC4xQzEzLDMuNCwxMy4xLDMuNCwxMy4xLDMuNXpcIi8+PC9nPjwvc3ZnPicsXHJcbiAgICAgIG91dGRlbnQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjcgMTIuNFwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+PGc+PGc+PHBhdGggZD1cIk0xNS41LDEwLjFMMTUuNSwxMC4xYzAuMSwwLDAuMywwLjEsMC4zLDAuM3YxLjdjMCwwLjEsMCwwLjEtMC4xLDAuMmMtMC4xLDAuMS0wLjEsMC4xLTAuMiwwLjFsLTE1LjIsMCBjLTAuMSwwLTAuMSwwLTAuMi0wLjFDMCwxMi4yLDAsMTIuMiwwLDEyLjFsMC0xLjdjMC0wLjEsMC0wLjEsMC4xLTAuMmMwLjEtMC4xLDAuMS0wLjEsMC4yLTAuMUMwLjMsMTAuMSwxNS41LDEwLjEsMTUuNSwxMC4xeiBNOS44LDYuN2MwLjEsMCwwLjEsMCwwLjIsMC4xQzEwLjEsNi45LDEwLjEsNywxMC4xLDd2MS43YzAsMC4xLDAsMC4yLTAuMSwwLjJDMTAsOSw5LjksOSw5LjgsOUwwLjMsOUMwLjIsOSwwLjEsOSwwLjEsOC45IEMwLDguOSwwLDguOCwwLDguN1Y3QzAsNywwLDYuOSwwLjEsNi44YzAuMS0wLjEsMC4xLTAuMSwwLjItMC4xQzAuMyw2LjcsOS44LDYuNyw5LjgsNi43eiBNMC4zLDMuNGg5LjZoMGMwLjEsMCwwLjMsMC4xLDAuMywwLjMgdjEuN3YwYzAsMC4xLTAuMSwwLjMtMC4zLDAuM0gwLjNjLTAuMSwwLTAuMSwwLTAuMi0wLjFDMCw1LjUsMCw1LjQsMCw1LjNWMy42YzAtMC4xLDAtMC4xLDAuMS0wLjJDMC4xLDMuNCwwLjIsMy40LDAuMywzLjQgTDAuMywzLjR6IE0wLjMsMGwxNS4yLDBjMC4xLDAsMC4xLDAsMC4yLDAuMWMwLjEsMC4xLDAuMSwwLjEsMC4xLDAuMlYyYzAsMC4xLDAsMC4yLTAuMSwwLjJjLTAuMSwwLjEtMC4xLDAuMS0wLjIsMC4xSDAuMyBjLTAuMSwwLTAuMSwwLTAuMi0wLjFDMCwyLjEsMCwyLDAsMmwwLTEuN2MwLTAuMSwwLTAuMSwwLjEtMC4yQzAuMSwwLDAuMiwwLDAuMywwelwiLz48L2c+PHBhdGggZD1cIk0xNS41LDMuNGMwLjEsMCwwLjEsMCwwLjIsMC4xYzAuMSwwLjEsMC4xLDAuMSwwLjEsMC4ydjUuMWMwLDAuMSwwLDAuMS0wLjEsMC4yQzE1LjYsOSwxNS41LDksMTUuNSw5IGMtMC4xLDAtMC4xLDAtMC4yLTAuMWwtMi41LTIuNWMtMC4xLTAuMS0wLjEtMC4zLDAtMC40bDIuNS0yLjVDMTUuMywzLjQsMTUuNCwzLjQsMTUuNSwzLjR6XCIvPjwvZz48L3N2Zz4nLFxyXG4gICAgICBsaXN0X2J1bGxldHM6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjcgMTIuNFwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+PGc+PHBhdGggZD1cIk0xMi40LDEwLjdjMCwwLjksMC44LDEuNywxLjcsMS43YzAuOSwwLDEuNy0wLjgsMS43LTEuN0MxNS43LDkuOCwxNSw5LDE0LjEsOWMtMC40LDAtMC45LDAuMi0xLjIsMC41IEMxMi41LDkuOCwxMi40LDEwLjIsMTIuNCwxMC43QzEyLjQsMTAuNywxMi40LDEwLjcsMTIuNCwxMC43eiBNMTIuNCw2LjJjMCwwLjksMC44LDEuNywxLjcsMS43YzAuNCwwLDAuOS0wLjIsMS4yLTAuNSBjMC4zLTAuMywwLjQtMC43LDAuNC0xLjFjMC0wLjktMC43LTEuNy0xLjYtMS43QzEzLjEsNC42LDEyLjQsNS4zLDEyLjQsNi4yQzEyLjQsNi4yLDEyLjQsNi4yLDEyLjQsNi4yeiBNMCw5Ljh2MS43IGMwLDAuMSwwLDAuMSwwLjEsMC4yYzAuMSwwLjEsMC4xLDAuMSwwLjIsMC4xbDEwLjcsMGMwLDAsMCwwLDAsMGMwLjEsMCwwLjMtMC4xLDAuMy0wLjNWOS44YzAtMC4xLDAtMC4xLTAuMS0wLjIgQzExLjEsOS42LDExLDkuNiwxMSw5LjZsLTEwLjcsMGMtMC4xLDAtMC4xLDAtMC4yLDAuMUMwLDkuNywwLDkuOCwwLDkuOEwwLDkuOHogTTEyLjksMi45YzAuMywwLjMsMC43LDAuNSwxLjIsMC41IGMwLjQsMCwwLjktMC4yLDEuMi0wLjVjMC43LTAuNywwLjctMS43LDAtMi40QzE0LjksMC4yLDE0LjUsMCwxNC4xLDBjLTAuNCwwLTAuOSwwLjItMS4yLDAuNWMtMC4zLDAuMy0wLjUsMC43LTAuNSwxLjIgQzEyLjQsMi4xLDEyLjUsMi42LDEyLjksMi45eiBNMCw1LjNWN2MwLDAuMSwwLDAuMSwwLjEsMC4yYzAuMSwwLjEsMC4xLDAuMSwwLjIsMC4xSDExYzAuMSwwLDAuMSwwLDAuMi0wLjEgYzAuMS0wLjEsMC4xLTAuMSwwLjEtMC4yVjUuM2MwLDAsMCwwLDAsMGMwLTAuMS0wLjEtMC4zLTAuMy0wLjNIMC4zYy0wLjEsMC0wLjEsMC0wLjIsMC4xQzAsNS4yLDAsNS4zLDAsNS4zTDAsNS4zeiBNMCwwLjh2MS43IGMwLDAuMSwwLDAuMSwwLjEsMC4yYzAuMSwwLjEsMC4xLDAuMSwwLjIsMC4xaDEwLjdjMC4xLDAsMC4xLDAsMC4yLTAuMWMwLDAsMC4xLTAuMSwwLjEtMC4yVjAuOGMwLTAuMSwwLTAuMS0wLjEtMC4yIGMwLTAuMS0wLjEtMC4xLTAuMi0wLjFIMC4zYy0wLjEsMC0wLjEsMC0wLjIsMC4xQzAsMC43LDAsMC44LDAsMC44TDAsMC44elwiLz48L2c+PC9zdmc+JyxcclxuICAgICAgbGlzdF9udW1iZXI6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjcgMTUuN1wiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+PGc+PHBhdGggZD1cIk0wLDExLjVsMCwxLjdjMCwwLjEsMCwwLjEsMC4xLDAuMmMwLjEsMC4xLDAuMSwwLjEsMC4yLDAuMUgxMWMwLjEsMCwwLjIsMCwwLjItMC4xYzAuMS0wLjEsMC4xLTAuMSwwLjEtMC4ydi0xLjcgYzAtMC4xLDAtMC4xLTAuMS0wLjJjLTAuMS0wLjEtMC4xLTAuMS0wLjItMC4xSDAuM2MtMC4xLDAtMC4yLDAtMC4yLDAuMUMwLDExLjQsMCwxMS40LDAsMTEuNUwwLDExLjV6IE0wLDguN2MwLDAuMSwwLDAuMSwwLjEsMC4yIEMwLjEsOC45LDAuMiw5LDAuMyw5SDExYzAuMSwwLDAuMiwwLDAuMi0wLjFjMC4xLTAuMSwwLjEtMC4xLDAuMS0wLjJWN2MwLTAuMSwwLTAuMS0wLjEtMC4yYy0wLjEtMC4xLTAuMS0wLjEtMC4yLTAuMWwtMTAuNywwIGMtMC4xLDAtMC4yLDAtMC4yLDAuMUMwLDYuOCwwLDYuOSwwLDdDMCw3LDAsOC43LDAsOC43eiBNMCwyLjV2MS43YzAsMC4xLDAsMC4xLDAuMSwwLjJjMCwwLDAuMSwwLjEsMC4yLDAuMWwxMC43LDAgYzAuMSwwLDAuMiwwLDAuMi0wLjFjMC4xLTAuMSwwLjEtMC4xLDAuMS0wLjJWMi40YzAtMC4xLDAtMC4xLTAuMS0wLjJjLTAuMSwwLTAuMSwwLTAuMiwwSDAuM2MtMC4xLDAtMC4xLDAtMC4yLDAgQzAsMi4zLDAsMi40LDAsMi41TDAsMi41elwiLz48L2c+PHBhdGggZD1cIk0xNS42LDE0LjJjMC0wLjMtMC4xLTAuNi0wLjMtMC44Yy0wLjItMC4yLTAuNC0wLjQtMC43LTAuNGwwLjktMXYtMC44aC0yLjl2MS4zaDAuOXYtMC41aDAuOWwwLDBjLTAuMSwwLjEtMC4yLDAuMi0wLjMsMC4zIHMtMC4yLDAuMy0wLjQsMC41bC0wLjMsMC4zbDAuMiwwLjVjMC42LDAsMC45LDAuMSwwLjksMC41YzAsMC4xLTAuMSwwLjMtMC4yLDAuNGMtMC4xLDAuMS0wLjMsMC4xLTAuNCwwLjFjLTAuMywwLTAuNy0wLjEtMC45LTAuMyBsLTAuNSwwLjhjMC40LDAuNCwwLjksMC42LDEuNSwwLjZjMC40LDAsMC45LTAuMSwxLjItMC40QzE1LjUsMTUuMSwxNS42LDE0LjcsMTUuNiwxNC4yelwiLz48cGF0aCBkPVwiTTE1LjYsOC43aC0wLjl2MC41aC0xLjFjMC0wLjIsMC4yLTAuNCwwLjQtMC41YzAuMi0wLjIsMC40LTAuMywwLjctMC40YzAuMy0wLjIsMC41LTAuMywwLjctMC42YzAuMi0wLjIsMC4zLTAuNSwwLjMtMC44IGMwLTAuNC0wLjItMC44LTAuNS0xYy0wLjYtMC40LTEuNC0wLjUtMi0wLjFjLTAuMywwLjItMC41LDAuNC0wLjYsMC43TDEzLjMsN2MwLjEtMC4zLDAuNC0wLjUsMC43LTAuNWMwLjEsMCwwLjMsMCwwLjMsMC4xIGMwLjEsMC4xLDAuMSwwLjIsMC4xLDAuM2MwLDAuMi0wLjEsMC4zLTAuMiwwLjRjLTAuMiwwLjEtMC4zLDAuMy0wLjUsMC40Yy0wLjIsMC4xLTAuNCwwLjMtMC42LDAuNGMtMC4yLDAuMi0wLjQsMC40LTAuNSwwLjYgYy0wLjEsMC4yLTAuMiwwLjUtMC4yLDAuOGMwLDAuMiwwLDAuMywwLDAuNWgzLjJMMTUuNiw4LjdMMTUuNiw4Ljd6XCIvPjxwYXRoIGQ9XCJNMTUuNiwzLjZoLTFWMGgtMC45bC0xLjIsMS4xbDAuNiwwLjdjMC4yLTAuMSwwLjMtMC4zLDAuNC0wLjVsMCwwdjIuMmgtMC45djAuOWgzTDE1LjYsMy42TDE1LjYsMy42elwiLz48L3N2Zz4nLFxyXG4gICAgICBsaW5rOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43IDE1LjdcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnPjxwYXRoIGQ9XCJNNy40LDkuOWwzLjEsMy4xYzAuMywwLjMsMC44LDAuNSwxLjMsMC41YzAuNSwwLDAuOS0wLjIsMS4zLTAuNWMwLDAsMCwwLDAsMGMwLjctMC43LDAuNy0xLjksMC0yLjZMOS45LDcuMyBjMC0wLjEsMC0wLjIsMC0wLjNDOS45LDcsMTAsNywxMC4xLDdsMi4yLTAuMmMwLjEsMCwwLjEsMCwwLjIsMC4xbDIuMSwyLjFjMC40LDAuNCwwLjcsMC44LDAuOSwxLjNjMC4yLDAuNSwwLjMsMSwwLjMsMS41IGMwLDAuNS0wLjEsMS0wLjMsMS41Yy0wLjgsMi0zLjIsMy01LjIsMi4yYy0wLjUtMC4yLTAuOS0wLjUtMS4zLTAuOWwtMi4xLTIuMWMtMC4xLDAtMC4xLTAuMS0wLjEtMC4yTDcsMTAuMUM3LDEwLDcsOS45LDcuMSw5LjkgQzcuMiw5LjgsNy4zLDkuOSw3LjQsOS45eiBNMS4yLDEuMUMxLjYsMC43LDIsMC40LDIuNSwwLjNjMS0wLjQsMi4xLTAuNCwzLjEsMEM2LDAuNCw2LjUsMC43LDYuOCwxLjFMOSwzLjJDOSwzLjMsOS4xLDMuMyw5LDMuNCBMOC44LDUuNmMwLDAuMS0wLjEsMC4yLTAuMiwwLjJjLTAuMSwwLjEtMC4yLDAuMS0wLjMsMEw1LjMsMi43QzUsMi4zLDQuNSwyLjEsNCwyLjFjLTAuNSwwLTAuOSwwLjItMS4zLDAuNWMwLDAsMCwwLDAsMCBDMiwzLjQsMiw0LjUsMi43LDUuMmwzLjEsMy4yYzAuMSwwLjEsMC4xLDAuMiwwLDAuM2MwLDAuMS0wLjEsMC4xLTAuMiwwLjFMMy41LDlDMy40LDksMy40LDksMy4zLDguOUwxLjIsNi44YzAsMCwwLDAsMCwwIEMtMC40LDUuMi0wLjQsMi43LDEuMiwxLjFMMS4yLDEuMXogTTE0LjMsNmgtMi42YzAsMCwwLDAsMCwwYy0wLjEsMC0wLjItMC4xLTAuMi0wLjJjMC0wLjEsMC0wLjIsMC4xLTAuM2wyLjUtMC43IGMwLjEsMCwwLjEsMCwwLjIsMGMwLjEsMCwwLjEsMC4xLDAuMSwwLjJsMC4xLDAuOGMwLDAuMSwwLDAuMS0wLjEsMC4yQzE0LjUsNiwxNC40LDYsMTQuMyw2TDE0LjMsNnogTTEwLjIsNC4xIGMwLDAuMS0wLjEsMC4yLTAuMiwwLjJsMCwwYzAsMCwwLDAsMCwwQzkuOCw0LjIsOS43LDQuMSw5LjgsNEw5LjcsMS40YzAtMC4xLDAtMC4xLDAuMS0wLjJjMC4xLDAsMC4xLDAsMC4yLDBoMC44IGMwLjEsMCwwLjEsMCwwLjIsMC4xYzAsMC4xLDAsMC4xLDAsMC4yTDEwLjIsNC4xTDEwLjIsNC4xeiBNMS41LDkuN2gxLjNoMS4zYzAuMSwwLDAuMiwwLjEsMC4yLDAuMmMwLDAuMSwwLDAuMi0wLjEsMC4zbC0yLjUsMC42IEgxLjZjMCwwLTAuMSwwLTAuMSwwYy0wLjEsMC0wLjEtMC4xLTAuMS0wLjJMMS4yLDkuOWMwLTAuMSwwLTAuMSwwLjEtMC4yYzAtMC4xLDAuMS0wLjEsMC4yLTAuMUwxLjUsOS43eiBNNS42LDExLjYgQzUuNiwxMS42LDUuNiwxMS42LDUuNiwxMS42YzAtMC4xLDAuMS0wLjIsMC4zLTAuMWMwLDAsMCwwLDAsMGMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi42YzAsMC4xLDAsMC4xLTAuMSwwLjIgYzAsMC0wLjEsMC4xLTAuMiwwLjFMNSwxNC41Yy0wLjEsMC0wLjEsMC0wLjItMC4xYzAtMC4xLDAtMC4xLDAtMC4yTDUuNiwxMS42TDUuNiwxMS42elwiLz48L2c+PC9zdmc+JyxcclxuICAgICAgdW5saW5rOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43IDE1LjdcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPjxnPjxwYXRoIGQ9XCJNMTQuNiwxNC42YzEuNi0xLjYsMS42LTQuMSwwLTUuN2wwLDBsLTMuMS0zLjFsLTEuMiwxLjZsMi45LDIuOWMwLjQsMC40LDAuNiwwLjksMC42LDEuNWMwLDEuMS0wLjksMi4xLTIuMSwyLjFsMCwwIGMtMC42LDAtMS4xLTAuMi0xLjUtMC42bC0wLjQtMC40bC0xLjcsMWwwLjgsMC44QzEwLjQsMTYuMiwxMywxNi4yLDE0LjYsMTQuNkwxNC42LDE0LjZMMTQuNiwxNC42eiBNMy42LDZDMyw1LjksMi42LDUuNSwyLjMsNSBTMS45LDQsMi4xLDMuNEMyLjMsMi45LDIuNiwyLjUsMywyLjJDMy41LDIsNC4xLDEuOSw0LjYsMmwzLjMsMS40bDAuNS0yTDUuMSwwLjFDNC0wLjEsMi45LDAsMiwwLjVDMS4xLDEuMSwwLjQsMS45LDAuMiwzIEMtMC4xLDQsMCw1LjEsMC42LDZDMS4xLDYuOSwxLjksNy42LDMsNy44bDUuNCwybDAuNS0yTDYuMiw2LjlMMy42LDZ6XCIvPjwvZz48L3N2Zz4nXHJcbiAgIH0sXHJcbiAgIC8vIGNvbW1vbiwgbHRyIGljb25cclxuICAgcmVkbzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNTkgMTQuMThcIj48Zz48cGF0aCBkPVwiTTExLjU4LDE4LjQ4YTYuODQsNi44NCwwLDEsMSw2Ljg1LTYuODVzMCwuMjYsMCwuNjdhOCw4LDAsMCwxLS4yMiwxLjQ0bC45MS0uNTVhLjUxLjUxLDAsMCwxLC4zNiwwLC40NS40NSwwLDAsMSwuMjkuMjIuNDcuNDcsMCwwLDEsLjA2LjM2LjQ1LjQ1LDAsMCwxLS4yMi4yOUwxNy40MiwxNS4zbC0uMTIsMGgtLjI1bC0uMTItLjA2LS4wOS0uMDktLjA2LS4wNywwLS4wNi0uODctMi4xMmEuNDMuNDMsMCwwLDEsMC0uMzcuNDkuNDksMCwwLDEsLjI3LS4yNi40MS40MSwwLDAsMSwuMzYsMCwuNTMuNTMsMCwwLDEsLjI3LjI2bC40NCwxLjA5YTYuNTEsNi41MSwwLDAsMCwuMjQtMS4zNiw0LjU4LDQuNTgsMCwwLDAsMC0uNjQsNS44Myw1LjgzLDAsMCwwLTEuNzMtNC4xNyw1Ljg4LDUuODgsMCwwLDAtOC4zNCwwLDUuOSw1LjksMCwwLDAsNC4xNywxMC4wNi41MS41MSwwLDAsMSwuMzMuMTUuNDguNDgsMCwwLDEsMCwuNjguNTMuNTMsMCwwLDEtLjMzLjEyWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40OCAtNC41NClcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIHVuZG86ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjU5IDE0LjE4XCI+PGc+PHBhdGggZD1cIk01LDE0YS40My40MywwLDAsMS0uMjItLjI5LjQ2LjQ2LDAsMCwxLC4wNi0uMzYuNDMuNDMsMCwwLDEsLjI5LS4yMi41Ni41NiwwLDAsMSwuMzYsMGwuOTEuNTVhOC4yNyw4LjI3LDAsMCwxLS4yMi0xLjQ1LDUuMDcsNS4wNywwLDAsMSwwLS42N0E2Ljg1LDYuODUsMCwxLDEsMTMsMTguNDdhLjQ0LjQ0LDAsMCwxLS4zMy0uMTMuNDguNDgsMCwwLDEsMC0uNjguNTEuNTEsMCwwLDEsLjMzLS4xNUE1Ljg5LDUuODksMCwwLDAsMTcuMTUsNy40NWE1Ljg4LDUuODgsMCwwLDAtOC4zMywwLDUuODQsNS44NCwwLDAsMC0xLjczLDQuMTdzMCwuMjUsMCwuNjVhNi40OSw2LjQ5LDAsMCwwLC4yNCwxLjM3bC40NC0xLjA5YS41Ny41NywwLDAsMSwuMjctLjI2LjQxLjQxLDAsMCwxLC4zNiwwLC41My41MywwLDAsMSwuMjcuMjYuNDMuNDMsMCwwLDEsMCwuMzdMNy44MiwxNWwwLC4wOS0uMDkuMDktLjEuMDctLjA2LDBINy4yOGwtLjEzLDAtMS4wOS0uNjNjLS42NS0uMzYtMS0uNTctMS4xLS42M1pcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDkgLTQuNTMpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBib2xkOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxMS43NiAxNS43NVwiPjxnPjxwYXRoIGQ9XCJNNi40LDMuNzZWMTkuNWg2Ljc2YTUuNTUsNS41NSwwLDAsMCwyLS4zMiw0LjkzLDQuOTMsMCwwLDAsMS41Mi0xLDQuMjcsNC4yNywwLDAsMCwxLjQ4LTMuMzQsMy44NywzLjg3LDAsMCwwLS42OS0yLjM3LDUuNzQsNS43NCwwLDAsMC0uNzEtLjgzLDMuNDQsMy40NCwwLDAsMC0xLjEtLjY1LDMuNiwzLjYsMCwwLDAsMS41OC0xLjM2LDMuNjYsMy42NiwwLDAsMCwuNTMtMS45MywzLjcsMy43LDAsMCwwLTEuMjEtMi44Nyw0LjY1LDQuNjUsMCwwLDAtMy4yNS0xLjFINi40Wm0yLjQ2LDYuNjVWNS41N2gzLjUyYTQuOTEsNC45MSwwLDAsMSwxLjM2LjE1LDIuMywyLjMsMCwwLDEsLjg1LjQ1LDIuMDYsMi4wNiwwLDAsMSwuNzQsMS43MSwyLjMsMi4zLDAsMCwxLS43OCwxLjkyLDIuNTQsMi41NCwwLDAsMS0uODYuNDYsNC43LDQuNywwLDAsMS0xLjMyLjE1SDguODZabTAsNy4yN1YxMi4xNUgxMi43YTQuNTYsNC41NiwwLDAsMSwxLjM4LjE3LDMuNDMsMy40MywwLDAsMSwuOTUuNDksMi4yOSwyLjI5LDAsMCwxLC45MiwyLDIuNzMsMi43MywwLDAsMS0uODMsMi4xLDIuNjYsMi42NiwwLDAsMS0uODMuNTgsMy4yNSwzLjI1LDAsMCwxLTEuMjYuMkg4Ljg2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNi40IC0zLjc1KVwiLz48L2c+PC9zdmc+JyxcclxuICAgdW5kZXJsaW5lOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA5Ljc4IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk0xNC42NCwzLjc2aDIuNTJ2Ny43MmE0LjUxLDQuNTEsMCwwLDEtLjU5LDIuMzEsMy43NiwzLjc2LDAsMCwxLTEuNzEsMS41Myw2LjEyLDYuMTIsMCwwLDEtMi42NC41Myw1LDUsMCwwLDEtMy41Ny0xLjE4LDQuMTcsNC4xNywwLDAsMS0xLjI3LTMuMjRWMy43Nkg5Ljl2Ny4zYTMsMywwLDAsMCwuNTUsMiwyLjMsMi4zLDAsMCwwLDEuODMuNjUsMi4yNiwyLjI2LDAsMCwwLDEuOC0uNjUsMy4wOSwzLjA5LDAsMCwwLC41NS0yVjMuNzZabTIuNTIsMTMuMzFWMTkuNUg3LjM5VjE3LjA4aDkuNzdaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC03LjM4IC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgaXRhbGljOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxMC40OSAxNS43NlwiPjxnPjxwYXRoIGQ9XCJNMTcuMTYsMy43OWwuMzcsMC0uMDYuMzgtLjE0LjUyQTEwLDEwLDAsMCwxLDE2LjIxLDVhOS4zNyw5LjM3LDAsMCwwLTEsLjMyLDYuNjgsNi42OCwwLDAsMC0uMjUuODljLS4wNi4zMS0uMTEuNTktLjE0Ljg1LS4zLDEuMzYtLjUyLDIuNDEtLjY4LDMuMTRsLS42MSwzLjE4TDEzLjEsMTVsLS40MywyLjQtLjEyLjQ2YS42Mi42MiwwLDAsMCwwLC4yOGMuNDQuMS44NS4xNywxLjIzLjIybC42OC4xMWE0LjUxLDQuNTEsMCwwLDEtLjA4LjZsLS4wOS40MmEuOTIuOTIsMCwwLDAtLjIzLDBsLS40MywwYTEuMzcsMS4zNywwLDAsMS0uMjksMGMtLjEzLDAtLjYzLS4wOC0xLjQ5LS4xNmwtMiwwYy0uMjgsMC0uODcsMC0xLjc4LjEyTDcsMTkuNWwuMTctLjg4LjgtLjJBNi42MSw2LjYxLDAsMCwwLDkuMTksMTgsMi42MiwyLjYyLDAsMCwwLDkuNjEsMTdsLjI4LTEuNDEuNTgtMi43NS4xMi0uNjZjLjA1LS4zLjExLS41OC4xNy0uODZzLjEyLS41MS4xNy0uNjlsLjEyLS40OC4xMi0uNDMuMzEtMS42LjE1LS42NS4zMS0xLjkxVjUuMTRhMy44NiwzLjg2LDAsMCwwLTEuNDgtLjI5bC0uMzgsMCwuMi0xLjA2LDMuMjQuMTQuNzUsMGMuNDUsMCwxLjE4LDAsMi4xOC0uMDkuMjMsMCwuNDYsMCwuNzEsMFpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTcuMDQgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBzdHJpa2U6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE0LjlcIj48Zz48cGF0aCBkPVwiTTEyLjk0LDEzYTQuMjcsNC4yNywwLDAsMSwxLjMyLjU4LDEuNDYsMS40NiwwLDAsMSwuNTUsMS4yLDEuODcsMS44NywwLDAsMS0uODgsMS42NCw0LjE3LDQuMTcsMCwwLDEtMi4zNS41OSw0LjQ0LDQuNDQsMCwwLDEtMi43NC0uNzEsMi43MiwyLjcyLDAsMCwxLTEtMi4xN0g1LjU3YTQuNTYsNC41NiwwLDAsMCwxLjU1LDMuNyw3LDcsMCwwLDAsNC40NywxLjIzLDYsNiwwLDAsMCw0LjA3LTEuMyw0LjI0LDQuMjQsMCwwLDAsMS41Mi0zLjM3LDQsNCwwLDAsMC0uMjYtMS40aC00Wk02LjM3LDEwLjI0QTMuMjcsMy4yNywwLDAsMSw2LDguNjhhNCw0LDAsMCwxLDEuNDgtMy4zLDUuOTIsNS45MiwwLDAsMSwzLjg4LTEuMjEsNS41OCw1LjU4LDAsMCwxLDMuOTEsMS4yNCw0LjM2LDQuMzYsMCwwLDEsMS40NSwzLjE3SDE0LjQ0YTIuMTIsMi4xMiwwLDAsMC0uOTEtMS44MSw0LjQ1LDQuNDUsMCwwLDAtMi40NC0uNTUsMy42OSwzLjY5LDAsMCwwLTIsLjUxQTEuNjQsMS42NCwwLDAsMCw4LjMsOC4yMmExLjMsMS4zLDAsMCwwLC40OCwxLjExLDcsNywwLDAsMCwyLjEuNzhsLjI4LjA2LjI4LjA4SDYuMzdabTEzLjA5LjY4YS43My43MywwLDAsMSwuNDkuMjEuNjYuNjYsMCwwLDEsLjIuNDguNjQuNjQsMCwwLDEtLjIuNDguNzEuNzEsMCwwLDEtLjQ5LjE5SDUuMWEuNjcuNjcsMCwwLDEtLjQ5LS4xOS42Ni42NiwwLDAsMS0uMi0uNDguNjQuNjQsMCwwLDEsLjItLjQ4LjczLjczLDAsMCwxLC40OS0uMjFIMTkuNDZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC00LjE3KVwiLz48L2c+PC9zdmc+JyxcclxuICAgc3Vic2NyaXB0OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NSAxNC42MVwiPjxnPjxwYXRoIGQ9XCJNMTUuMzgsNC4zM0gxMi43NEwxMS4xOSw3Yy0uMjguNDYtLjUxLjg3LS42OSwxLjIxTDEwLjA3LDloMGwtLjQ0LS44Yy0uMjItLjQtLjQ1LS44MS0uNzEtMS4yM0w3LjM0LDQuMzNINC42OEw4LjI2LDEwLDQuNCwxNi4wOEg3LjFsMS42OS0yLjgzYy4zOC0uNjMuNzItMS4yMiwxLTEuNzhsLjI1LS40NmgwbC40OS45MmMuMjQuNDUuNDguODkuNzQsMS4zMkwxMywxNi4wOGgyLjYxTDExLjg0LDEwbDEuNzctMi44NCwxLjc3LTIuODVabTQuNzcsMTMuNzVIMTd2LS4xNWMwLS40LjA1LS42NC4xNi0uNzJhNC40Miw0LjQyLDAsMCwxLDEuMTYtLjMxLDMuMywzLjMsMCwwLDAsMS41NC0uNTZBMS44NCwxLjg0LDAsMCwwLDIwLjE1LDE1YTEuNzgsMS43OCwwLDAsMC0uNDQtMS40MUEyLjgsMi44LDAsMCwwLDE4LDEzLjI1YTIuNzEsMi43MSwwLDAsMC0xLjY5LjM3LDEuODMsMS44MywwLDAsMC0uNDQsMS40M3YuMjNIMTd2LS4yM3EwLS42My4xOC0uNzhhMS42MiwxLjYyLDAsMCwxLC44OC0uMTUsMS41OSwxLjU5LDAsMCwxLC44OC4xNXEuMTguMTUuMTguNzV0LS4xOC43NWEzLjU4LDMuNTgsMCwwLDEtMS4xOC4zMywzLjMzLDMuMzMsMCwwLDAtMS41Mi41MSwxLjU3LDEuNTcsMCwwLDAtLjMyLDEuMTh2MS4xNWg0LjI3di0uODZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQgLTQuMzMpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBzdXBlcnNjcmlwdDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzUgMTUuNDJcIj48Zz48cGF0aCBkPVwiTTEyLDEzLjE0bDMuNjEtNS44MUgxMi45NEwxMS4zMywxMGMtLjI4LjQ2LS41MS44OC0uNjksMS4yNWwtLjQ1LjgzaDBsLS40NS0uODVjLS4yMi0uNDEtLjQ1LS44Mi0uNzEtMS4yNEw3LjQsNy4zM0g0LjY4bDMuNjYsNS44MUw0LjQsMTkuMzNINy4xNGwxLjc0LTIuODdxLjU4LTEsMS0xLjgzbC4yNS0uNDhoMGwuNTEuOTQuNzUsMS4zNywxLjcyLDIuODdoMi42N2wtMS45Mi0zLjA5Yy0xLjEyLTEuOC0xLjc2LTIuODMtMS45Mi0zLjFabTQuODQtNC40MWgwbDAsLjE1aDMuMjd2Ljg2SDE1Ljc3VjguNThhMS42NiwxLjY2LDAsMCwxLC4zMy0xLjIyLDMuNTEsMy41MSwwLDAsMSwxLjU2LS41MSwzLjY4LDMuNjgsMCwwLDAsMS4yMS0uMzRjLjEzLS4xLjE5LS4zNi4xOS0uNzdTMTksNS4wNywxOC44Nyw1QTEuNjMsMS42MywwLDAsMCwxOCw0LjhhMS41OCwxLjU4LDAsMCwwLS45MS4xN2MtLjEzLjExLS4xOS4zOC0uMTkuOFY2SDE1Ljc4VjUuNzZhMS44NywxLjg3LDAsMCwxLC40NS0xLjQ3QTIuODQsMi44NCwwLDAsMSwxOCwzLjkxYTIuOCwyLjgsMCwwLDEsMS43Mi4zOCwxLjg0LDEuODQsMCwwLDEsLjQ1LDEuNDQsMS45MSwxLjkxLDAsMCwxLS4zNCwxLjM1LDMuMjQsMy4yNCwwLDAsMS0xLjU4LjU3QTMuNjksMy42OSwwLDAsMCwxNyw4Yy0uMTIuMS0uMTcuMzUtLjE3Ljc2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40IC0zLjkxKVwiLz48L2c+PC9zdmc+JyxcclxuICAgZXJhc2U6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDEzLjc2XCI+PGc+PHBhdGggZD1cIk0xMy42OSwxNy4yaDYuNDZ2MS4zMUg4LjU2TDQuNDEsMTQuMzcsMTQsNC43NWw2LjA2LDYuMDZMMTYuODksMTRsLTMuMiwzLjE5Wm0tNC42MSwwaDIuNzdMMTQuMDksMTUsOS44OCwxMC43NSw2LjI1LDE0LjM4bDEuNDEsMS40MWMuODQuODIsMS4zMSwxLjI5LDEuNDIsMS40MVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTQuNzUpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBpbmRlbnQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDEyLjM2XCI+PGc+PHBhdGggZD1cIk00LjY4LDE0LjQ1YS4yNy4yNywwLDAsMS0uMTktLjA4LjMuMywwLDAsMS0uMDgtLjIxVjkuMWEuMjcuMjcsMCwwLDEsLjA4LS4xOS4yOC4yOCwwLDAsMSwuMi0uMDguMjUuMjUsMCwwLDEsLjE5LjA3bDIuNTQsMi41NGEuMjkuMjksMCwwLDEsMCwuNEw0Ljg4LDE0LjM2YS4yNC4yNCwwLDAsMS0uMi4wOVptMTUuMTksMS4xMmEuMjcuMjcsMCwwLDEsLjE5LjA4LjI1LjI1LDAsMCwxLC4wOC4xOXYxLjY5YS4yNy4yNywwLDAsMS0uMDguMTkuMjUuMjUsMCwwLDEtLjE5LjA4SDQuNjhhLjI3LjI3LDAsMCwxLS4xOS0uMDguMjUuMjUsMCwwLDEtLjA4LS4xOVYxNS44NGEuMjcuMjcsMCwwLDEsLjI3LS4yN0gxOS44N1ptMC0zLjM4YS4yNy4yNywwLDAsMSwuMTkuMDguMjguMjgsMCwwLDEsLjA4LjIxdjEuNjhhLjMyLjMyLDAsMCwxLS4wOC4yMS4yNS4yNSwwLDAsMS0uMTkuMDhIMTAuMzFhLjI3LjI3LDAsMCwxLS4xOS0uMDguMy4zLDAsMCwxLS4wOC0uMjFWMTIuNDhhLjMyLjMyLDAsMCwxLC4wOC0uMjEuMjQuMjQsMCwwLDEsLjE5LS4wOGg5LjU2Wm0wLTMuMzdhLjI3LjI3LDAsMCwxLC4xOS4wOC4yNS4yNSwwLDAsMSwuMDguMTl2MS42OWEuMjcuMjcsMCwwLDEtLjA4LjE5LjI1LjI1LDAsMCwxLS4xOS4wOEgxMC4zMWEuMjcuMjcsMCwwLDEtLjI3LS4yN1Y5LjFhLjI3LjI3LDAsMCwxLC4yNy0uMjdoOS41NlptLjItMy4yOWEuMjguMjgsMCwwLDEsLjA4LjJWNy40MWEuMzIuMzIsMCwwLDEtLjA4LjIxLjI1LjI1LDAsMCwxLS4xOS4wOEg0LjY4YS4yNy4yNywwLDAsMS0uMTktLjA4LjMuMywwLDAsMS0uMDgtLjIxVjUuNzNhLjMyLjMyLDAsMCwxLC4wOC0uMjEuMjUuMjUsMCwwLDEsLjE5LS4wOEgxOS44N2EuMjguMjgsMCwwLDEsLjIuMDlaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC01LjQ0KVwiLz48L2c+PC9zdmc+JyxcclxuICAgb3V0ZGVudDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTIuMzZcIj48Zz48cGF0aCBkPVwiTTE5Ljg3LDE1LjU3YS4yNy4yNywwLDAsMSwuMTkuMDguMjUuMjUsMCwwLDEsLjA4LjE5djEuNjlhLjI3LjI3LDAsMCwxLS4wOC4xOS4yNS4yNSwwLDAsMS0uMTkuMDhINC42OGEuMjcuMjcsMCwwLDEtLjE5LS4wOC4yNS4yNSwwLDAsMS0uMDgtLjE5VjE1Ljg0YS4yNy4yNywwLDAsMSwuMjctLjI3SDE5Ljg3Wk03LjUsMTQuNDVhLjI1LjI1LDAsMCwxLS4yLS4wOUw0Ljc2LDExLjg0YS4yOS4yOSwwLDAsMSwwLS40TDcuMyw4LjlhLjI5LjI5LDAsMCwxLC40LDAsLjMxLjMxLDAsMCwxLC4wNy4ydjUuMDZhLjMyLjMyLDAsMCwxLS4wOC4yMS4yNi4yNiwwLDAsMS0uMTkuMDhaTTE5Ljg3LDguODJhLjI3LjI3LDAsMCwxLC4xOS4wOC4yNS4yNSwwLDAsMSwuMDguMTl2MS42OWEuMjcuMjcsMCwwLDEtLjA4LjE5LjI1LjI1LDAsMCwxLS4xOS4wOEgxMC4zMWEuMjcuMjcsMCwwLDEtLjI3LS4yN1Y5LjFhLjI3LjI3LDAsMCwxLC4yNy0uMjdoOS41NlptMCwzLjM3YS4yNy4yNywwLDAsMSwuMTkuMDguMjguMjgsMCwwLDEsLjA4LjIxdjEuNjhhLjMyLjMyLDAsMCwxLS4wOC4yMS4yNS4yNSwwLDAsMS0uMTkuMDhIMTAuMzFhLjI3LjI3LDAsMCwxLS4xOS0uMDguMy4zLDAsMCwxLS4wOC0uMjFWMTIuNDhhLjMyLjMyLDAsMCwxLC4wOC0uMjEuMjQuMjQsMCwwLDEsLjE5LS4wOGg5LjU2Wm0uMi02LjY2YS4yOC4yOCwwLDAsMSwuMDguMlY3LjQxYS4zMi4zMiwwLDAsMS0uMDguMjEuMjUuMjUsMCwwLDEtLjE5LjA4SDQuNjhhLjI3LjI3LDAsMCwxLS4xOS0uMDguMy4zLDAsMCwxLS4wOC0uMjFWNS43M2EuMzIuMzIsMCwwLDEsLjA4LS4yMS4yNS4yNSwwLDAsMSwuMTktLjA4SDE5Ljg3YS4yOC4yOCwwLDAsMSwuMi4wOVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTUuNDQpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBleHBhbnNpb246ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk0xMS44LDEzLjA2bC01LjEsNS4xSDkuNTFWMTkuNUg0LjQxVjE0LjRINS43NXYyLjgxTDguMywxNC42NnEyLjI1LTIuMjMsMi41NS0yLjU1Wm04LjM1LTkuM3Y1LjFIMTguODFWNi4wNWwtNS4xLDUuMS0xLTEsNS4xLTUuMUgxNS4wNVYzLjc2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtMy43NilcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIHJlZHVjdGlvbjogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTE0LjkxLDEwaDIuODd2MS4zOEgxMi41NVY2LjEyaDEuMzhWOWw1LjI0LTUuMjQuNDguNDkuNDkuNDhaTTYuNzcsMTEuOTJIMTJ2NS4yM0gxMC42MlYxNC4yNkw1LjM3LDE5LjVsLTEtMUw5LjYzLDEzLjNINi43N1pcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNCAtMy43NilcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGNvZGVfdmlldzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzMgMTEuOFwiPjxnPjxwYXRoIGQ9XCJNOC4wOSw3Ljk0YS43Ni43NiwwLDAsMSwuNTMuMjIuNzIuNzIsMCwwLDEsLjIxLjUyLjc2Ljc2LDAsMCwxLS4yMi41NEw2LjE4LDExLjYzbDIuNDMsMi40NGEuNjkuNjksMCwwLDEsLjIuNTEuNjYuNjYsMCwwLDEtLjIxLjUxLjc1Ljc1LDAsMCwxLS41MS4yMi42My42MywwLDAsMS0uNTEtLjIxaDBMNC42MywxMi4xNWEuNy43LDAsMCwxLS4yMi0uNTMuNjcuNjcsMCwwLDEsLjI1LS41NUw3LjU3LDguMTZhLjgyLjgyLDAsMCwxLC41Mi0uMjJabTEyLjA1LDMuNjlhLjcuNywwLDAsMS0uMjMuNTJMMTcsMTUuMWgwYS42Ni42NiwwLDAsMS0uNTEuMjEuNzMuNzMsMCwwLDEtLjUxLS4yMi43NS43NSwwLDAsMS0uMjItLjUxLjYzLjYzLDAsMCwxLC4yMS0uNTFsMi40My0yLjQ0TDE1LjkyLDkuMjJhLjczLjczLDAsMCwxLS4yMi0uNTNBLjc0Ljc0LDAsMCwxLDE3LDguMThoMGwyLjkxLDIuOTFhLjY3LjY3LDAsMCwxLC4yNy41NFptLTUuOS01LjlhLjczLjczLDAsMCwxLC42MS4zMi43MS43MSwwLDAsMSwuMDcuNjhMMTEsMTdhMSwxLDAsMCwxLS4yMi4zMi42LjYsMCwwLDEtLjM1LjE2Ljc1Ljc1LDAsMCwxLS42OS0uMjYuNjkuNjksMCwwLDEtLjEyLS43MkwxMy41Niw2LjIzYS43NS43NSwwLDAsMSwuMjYtLjM1Ljc0Ljc0LDAsMCwxLC40Mi0uMTVaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC01LjczKVwiLz48L2c+PC9zdmc+JyxcclxuICAgcHJldmlldzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNjUgMTUuNjZcIj48Zz48cGF0aCBkPVwiTTE2LjE5LDE0LjQzbDIuNDksMi40OWEuNzMuNzMsMCwwLDEsLjIxLjUyLjY3LjY3LDAsMCwxLS4yMi41MS43LjcsMCwwLDEtLjUyLjIyLjY5LjY5LDAsMCwxLS41MS0uMjFsLTIuNDktMi40OGE1LjE3LDUuMTcsMCwwLDEtMS4zNC42OSw0LjY0LDQuNjQsMCwwLDEtMS40OC4yNCw0Ljc4LDQuNzgsMCwxLDEsMC05LjU2LDQuNzksNC43OSwwLDAsMSwxLjg0LjM2LDQuOSw0LjksMCwwLDEsMS41NiwxLDQuNzcsNC43NywwLDAsMSwuNDYsNi4xOFpNMTAsMTRhMy4zLDMuMywwLDAsMCwyLjM0LjkzQTMuMzcsMy4zNywwLDAsMCwxNC43LDE0YTMuMywzLjMsMCwwLDAtMS4wOC01LjQxLDMuNDcsMy40NywwLDAsMC0yLjU2LDBBMywzLDAsMCwwLDEwLDkuMjgsMy4zMSwzLjMxLDAsMCwwLDEwLDE0Wk0xNiw0YTMuODYsMy44NiwwLDAsMSwyLjc3LDEuMTRBMy45LDMuOSwwLDAsMSwyMCw3Ljg1djRhLjc3Ljc3LDAsMCwxLS4yMi41My43LjcsMCwwLDEtLjUyLjIxLjcyLjcyLDAsMCwxLS43NC0uNzR2LTRhMi40NiwyLjQ2LDAsMCwwLS43Mi0xLjczQTIuMzcsMi4zNywwLDAsMCwxNiw1LjQ1SDguNTNBMi40MiwyLjQyLDAsMCwwLDYuMDgsNy44OXY3LjUyYTIuNDEsMi40MSwwLDAsMCwuNzEsMS43MywyLjQ2LDIuNDYsMCwwLDAsMS43NC43Mmg0LjA4YS43My43MywwLDAsMSwwLDEuNDZIOC41M2EzLjg1LDMuODUsMCwwLDEtMi43OC0xLjE0QTMuOTMsMy45MywwLDAsMSw0LjYsMTUuNFY3Ljg3QTMuOTQsMy45NCwwLDAsMSw1Ljc2LDUuMDksMy44OCwzLjg4LDAsMCwxLDguNTQsNEgxNlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDUgLTMuOClcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIHByaW50OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNi4wNSAxNi4wNFwiPjxnPjxwYXRoIGQ9XCJNMTkuNzYsMTUuODRhMS4yOSwxLjI5LDAsMCwwLC4zOS0uOTJWOC4zNUEyLjA1LDIuMDUsMCwwLDAsMTkuNTcsN2ExLjkzLDEuOTMsMCwwLDAtMS4zOC0uNTdINi4zN2ExLjk1LDEuOTUsMCwwLDAtMiwydjYuNTZhMS4yMywxLjIzLDAsMCwwLC4zOC45MiwxLjM1LDEuMzUsMCwwLDAsLjkzLjM4aDJWMTQuOWwtMiwwVjguMzVhLjY3LjY3LDAsMCwxLC4xOC0uNDcuNjIuNjIsMCwwLDEsLjQ4LS4xOUgxOC4xOGEuNi42LDAsMCwxLC40Ni4xOS42Ni42NiwwLDAsMSwuMTguNDdWMTQuOWgtMnYxLjMyaDJBMS4zNSwxLjM1LDAsMCwwLDE5Ljc2LDE1Ljg0Wk0xNy41Miw3LjY5VjUuMDZhMS4zMSwxLjMxLDAsMCwwLS4zOC0uOTIsMS4zNCwxLjM0LDAsMCwwLS45NC0uMzhIOC4zNEExLjMsMS4zLDAsMCwwLDcsNS4wNlY3LjY5SDguMzRWNS4wNmg3Ljg3VjcuNjloMS4zMVpNOC4zNCwxMi45M2g3Ljg3bDAsNS4yNkg4LjM0VjEyLjkzWm03Ljg3LDUuMjZ2MFptLjY1LDEuMzFhLjYuNiwwLDAsMCwuNDYtLjE5LjcyLjcyLDAsMCwwLC4yLS40N1YxMi4yOWEuNzQuNzQsMCwwLDAtLjItLjQ3LjYuNiwwLDAsMC0uNDYtLjE5SDcuNjhhLjYuNiwwLDAsMC0uNDYuMTkuNzIuNzIsMCwwLDAtLjIuNDd2Ni41NWEuNzQuNzQsMCwwLDAsLjIuNDcuNi42LDAsMCwwLC40Ni4xOWg5LjE4Wk0xNi42Nyw5LjI4YS43LjcsMCwwLDAtLjk0LDAsLjYzLjYzLDAsMCwwLS4xOC40Ni42Ny42NywwLDAsMCwuMTguNDcuNjguNjgsMCwwLDAsLjk0LDAsLjY2LjY2LDAsMCwwLC4xOC0uNDdBLjU4LjU4LDAsMCwwLDE2LjY3LDkuMjhaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjI1IC0zLjYxKVwiLz48L2c+PC9zdmc+JyxcclxuICAgdGVtcGxhdGU6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE0LjI3IDE1LjY0XCI+PGc+PHBhdGggZD1cIk0xOC4xOCwxOS4xNmExLDEsMCwwLDAsMS0xVjUuNzNhMSwxLDAsMCwwLTEtMWgtMnYxaDJWMTguMTlINi4zN1Y1LjczaDJ2LTFoLTJBLjk0Ljk0LDAsMCwwLDUuNjgsNWExLDEsMCwwLDAtLjI5LjdWMTguMThhLjk0Ljk0LDAsMCwwLC4yOS42OSwxLDEsMCwwLDAsLjY5LjI5SDE4LjE4Wk05LjgyLDEwLjMxaDQuOTJhLjQ5LjQ5LDAsMCwwLC4zNS0uMTUuNDcuNDcsMCwwLDAsLjE1LS4zNS40OS40OSwwLDAsMC0uMTUtLjM1LjQ3LjQ3LDAsMCwwLS4zNS0uMTVIOS44MmEuNDkuNDksMCwwLDAtLjM1LjE1LjQ3LjQ3LDAsMCwwLS4xNS4zNS40OS40OSwwLDAsMCwuMTUuMzUuNDcuNDcsMCwwLDAsLjM1LjE1Wm01LjksNC45Mkg4LjgzYS40OS40OSwwLDAsMC0uMzUuMTUuNDcuNDcsMCwwLDAtLjE1LjM1LjQ5LjQ5LDAsMCwwLC4xNS4zNS40Ny40NywwLDAsMCwuMzUuMTVoNi44OWEuNDkuNDksMCwwLDAsLjM1LS4xNS40Ny40NywwLDAsMCwuMTUtLjM1LjUxLjUxLDAsMCwwLS41LS41Wk03LjM2LDEyLjc3YS40OS40OSwwLDAsMCwuMTUuMzUuNDcuNDcsMCwwLDAsLjM1LjE1aDguODVhLjQ5LjQ5LDAsMCwwLC4zNS0uMTUuNDcuNDcsMCwwLDAsLjE1LS4zNS40OS40OSwwLDAsMC0uMTUtLjM1LjQ3LjQ3LDAsMCwwLS4zNS0uMTVINy44NWEuNDkuNDksMCwwLDAtLjM1LjE1LjUyLjUyLDAsMCwwLS4xNC4zNVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTUuMTQgLTMuNzcpXCIvPjxwYXRoIGQ9XCJNMTQuMjQsNi43MWExLDEsMCwwLDAsMS0xLDEsMSwwLDAsMC0xLTEsMSwxLDAsMCwwLTEtMWgtMmEuOTQuOTQsMCwwLDAtLjY5LjI4LDEsMSwwLDAsMC0uMjkuN0EuOTQuOTQsMCwwLDAsOS42Miw1YS45MS45MSwwLDAsMC0uMjkuNjksMSwxLDAsMCwwLC4yOS43LDEsMSwwLDAsMCwuNjkuMjloMy45M1pcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTUuMTQgLTMuNzcpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBsaW5lX2hlaWdodDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzYgMTMuNTZcIj48Zz48cGF0aCBkPVwiTTQuNCw0Ljg4VjguMjZhMiwyLDAsMCwwLC41LjM5cy4xLDAsLjE4LS4xMmEuNjIuNjIsMCwwLDAsLjE3LS4yOGMuMDYtLjE5LjEzLS40NC4yMS0uNzRzLjE0LS41Mi4xOS0uNjZhLjU4LjU4LDAsMCwxLC4yMS0uMywyLjQxLDIuNDEsMCwwLDEsLjYzLS4yMSwzLjgzLDMuODMsMCwwLDEsLjg4LS4xMiw5LjE1LDkuMTUsMCwwLDEsMS4zMS4wNi4xNi4xNiwwLDAsMSwuMTEsMCwuMjYuMjYsMCwwLDEsLjA2LjE0LDQsNCwwLDAsMSwwLC40OXYybC4wNSwzLjc3YzAsMS40MSwwLDIuNjgtLjA1LDMuODFhMS43OSwxLjc5LDAsMCwxLS4xMS40OSwxMC42OCwxMC42OCwwLDAsMS0xLjQuNDUsMS4xMiwxLjEyLDAsMCwwLS42OS40M3YuMzFsMCwuMjIuNjEsMGMuODUtLjA4LDEuNTQtLjEyLDIuMDYtLjEyYTE5Ljc2LDE5Ljc2LDAsMCwxLDIuMDkuMDgsMTUuMDgsMTUuMDgsMCwwLDAsMS42NC4wOCwxLjQsMS40LDAsMCwwLC4yOSwwLDEuNTgsMS41OCwwLDAsMCwwLS4yNmwtLjA1LS40M2EyLjI2LDIuMjYsMCwwLDAtLjQzLS4xN2wtLjc3LS4yMi0uMTUsMGEyLjU1LDIuNTUsMCwwLDEtLjc4LS4yOCwyLjU2LDIuNTYsMCwwLDEtLjExLS43NWwwLTEuMjksMC0zLjE1VjcuNTNhMTAuNTEsMTAuNTEsMCwwLDEsLjA2LTEuMiwzLjgzLDMuODMsMCwwLDEsLjYsMGwxLjg4LDBhMi4xOCwyLjE4LDAsMCwxLC4zOCwwLC40NS40NSwwLDAsMSwuMjMuMTcuOS45LDAsMCwxLC4wNS4yNWMwLC4xNi4wNi4zNS4xLjU4YTMuMzMsMy4zMywwLDAsMCwuMTQuNTVBNi4zOSw2LjM5LDAsMCwwLDE1LDlhMi45MSwyLjkxLDAsMCwwLC42LS4xNSwyLjc3LDIuNzcsMCwwLDAsMC0uNDZsMC0uNTEsMC0yLjk1LS4yNSwwLS4zOCwwTDE1LDQuOTRhLjcxLjcxLDAsMCwxLS4xOC4xNS40NS40NSwwLDAsMS0uMjUuMDdsLS4yOSwwSDguNzVsLS4xNSwwSDcuNDVhMTcsMTcsMCwwLDEtMS44NiwwTDUuMzYsNWwtLjI1LS4xM1pNMTkuNzUsMTYuMTRoLS42OXYtOWguNjlBLjQuNCwwLDAsMCwyMC4xMyw3Yy4wNi0uMTEsMC0uMjQtLjEtLjM5TDE4LjkyLDUuMTVhLjUyLjUyLDAsMCwwLS44NiwwTDE3LDYuNThjLS4xMi4xNS0uMTYuMjgtLjEuMzlzLjE4LjE2LjM4LjE2aC42OXY5aC0uNjlhLjQuNCwwLDAsMC0uMzguMTZjLS4wNi4xMSwwLC4yNC4xLjM5bDEuMTEsMS40M2EuNTIuNTIsMCwwLDAsLjg2LDBMMjAsMTYuNjljLjEyLS4xNS4xNi0uMjguMS0uMzlhLjQuNCwwLDAsMC0uMzgtLjE2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40IC00Ljg2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgcGFyYWdyYXBoX3N0eWxlOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxMS44MSAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNMTguMTgsMy43NnYyaC0yVjE5LjVoLTJWNS43M2gtMlYxOS41aC0yVjExLjYzYTMuOTQsMy45NCwwLDAsMSwwLTcuODdoNy44N1pcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTYuMzcgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICB0ZXh0X3N0eWxlOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxMy43NiAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNMTcuNjgsNi43MWEyLjIyLDIuMjIsMCwwLDAsMS4wNi0uMjIuNzQuNzQsMCwwLDAsLjQyLS43LjczLjczLDAsMCwwLS4wOC0uMzMuNjcuNjcsMCwwLDAtLjE3LS4yMiwxLDEsMCwwLDAtLjMxLS4xNUwxOC4yNiw1bC0uNDUtLjA5QTE1LjI3LDE1LjI3LDAsMCwwLDEzLjI2LDVWNC43NGMwLS42Ni0uNjMtMS0xLjkyLTEtLjI0LDAtLjQzLjE1LS41OS40NmE0LDQsMCwwLDAtLjM2LDEuMTRoMHYwYTI2LjQ1LDI2LjQ1LDAsMCwxLTMuNS4zNUEyLDIsMCwwLDAsNS43Nyw2YS44NC44NCwwLDAsMC0uMzcuNzksMi4xNCwyLjE0LDAsMCwwLC40MSwxLjI5LDEuMjMsMS4yMywwLDAsMCwxLjA1LjYzLDE2LjYyLDE2LjYyLDAsMCwwLDMuMjktLjQ1bC0uMzQsMy4zNWMtLjE2LDEuNjEtLjI5LDIuOS0uMzcsMy44NnMtLjEyLDEuNjYtLjEyLDIuMDlsMCwuNjVhNS4xNSw1LjE1LDAsMCwwLC4wNS42LDEuMjgsMS4yOCwwLDAsMCwuMTYuNTQuMzQuMzQsMCwwLDAsLjI4LjE4LDEuMTYsMS4xNiwwLDAsMCwuNzktLjQ2LDMuNjYsMy42NiwwLDAsMCwuNjgtMSwyMi4wOCwyMi4wOCwwLDAsMCwxLTQuMzNxLjQ5LTMuMS43OC02LjE1YTI0LjY5LDI0LjY5LDAsMCwxLDQuNjItLjg0WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNS40IC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgc2F2ZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTE4LjUzLDE5LjVsLjItLjA1QTEuNzgsMS43OCwwLDAsMCwyMC4xMywxOGwwLS4wOVY3LjE0YTIsMiwwLDAsMC0uMjgtLjY0QTMuMTgsMy4xOCwwLDAsMCwxOS40Myw2Yy0uNS0uNTItMS0xLTEuNTUtMS41NEEyLjU5LDIuNTksMCwwLDAsMTcuMzcsNGExLjgzLDEuODMsMCwwLDAtLjYxLS4yNUg2bC0uMjEsMGExLjc4LDEuNzgsMCwwLDAtMS40LDEuNDlsMCwuMVYxNy44N2EyLjQ5LDIuNDksMCwwLDAsLjA5LjM3LDEuNzksMS43OSwwLDAsMCwxLjQ0LDEuMjNsLjA5LDBabS02LjI1LS42SDYuOTJhLjYxLjYxLDAsMCwxLS42OC0uNDguNzguNzgsMCwwLDEsMC0uMjJWMTIuM2EuNjIuNjIsMCwwLDEsLjY5LS42OEgxNy42NGEuNjIuNjIsMCwwLDEsLjY5LjY5VjE4LjJhLjY0LjY0LDAsMCwxLS43MS42OUgxMi4yOFpNMTIsOS44MUg4LjE1YS42My42MywwLDAsMS0uNzItLjcxdi00YS42NC42NCwwLDAsMSwuNzItLjcyaDcuNjZhLjY0LjY0LDAsMCwxLC43Mi43MnY0YS42NS42NSwwLDAsMS0uNzQuNzJaTTEzLjUsNVY5LjE4aDEuNzhWNVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBibG9ja3F1b3RlOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA0NzUuMDgyIDQ3NS4wODFcIj48Zz48cGF0aCBkPVwiTTE2NC40NSwyMTkuMjdoLTYzLjk1NGMtNy42MTQsMC0xNC4wODctMi42NjQtMTkuNDE3LTcuOTk0Yy01LjMyNy01LjMzLTcuOTk0LTExLjgwMS03Ljk5NC0xOS40MTd2LTkuMTMyYzAtMjAuMTc3LDcuMTM5LTM3LjQwMSwyMS40MTYtNTEuNjc4YzE0LjI3Ni0xNC4yNzIsMzEuNTAzLTIxLjQxMSw1MS42NzgtMjEuNDExaDE4LjI3MWM0Ljk0OCwwLDkuMjI5LTEuODA5LDEyLjg0Ny01LjQyNGMzLjYxNi0zLjYxNyw1LjQyNC03Ljg5OCw1LjQyNC0xMi44NDdWNTQuODE5YzAtNC45NDgtMS44MDktOS4yMzMtNS40MjQtMTIuODVjLTMuNjE3LTMuNjEyLTcuODk4LTUuNDI0LTEyLjg0Ny01LjQyNGgtMTguMjcxYy0xOS43OTcsMC0zOC42ODQsMy44NTgtNTYuNjczLDExLjU2M2MtMTcuOTg3LDcuNzEtMzMuNTQ1LDE4LjEzMi00Ni42OCwzMS4yNjdjLTEzLjEzNCwxMy4xMjktMjMuNTUzLDI4LjY4OC0zMS4yNjIsNDYuNjc3QzMuODU1LDE0NC4wMzksMCwxNjIuOTMxLDAsMTgyLjcyNnYyMDAuOTkxYzAsMTUuMjM1LDUuMzI3LDI4LjE3MSwxNS45ODYsMzguODM0YzEwLjY2LDEwLjY1NywyMy42MDYsMTUuOTg1LDM4LjgzMiwxNS45ODVoMTA5LjYzOWMxNS4yMjUsMCwyOC4xNjctNS4zMjgsMzguODI4LTE1Ljk4NWMxMC42NTctMTAuNjYzLDE1Ljk4Ny0yMy41OTksMTUuOTg3LTM4LjgzNFYyNzQuMDg4YzAtMTUuMjMyLTUuMzMtMjguMTY4LTE1Ljk5NC0zOC44MzJDMTkyLjYyMiwyMjQuNiwxNzkuNjc1LDIxOS4yNywxNjQuNDUsMjE5LjI3elwiLz48cGF0aCBkPVwiTTQ1OS4xMDMsMjM1LjI1NmMtMTAuNjU2LTEwLjY1Ni0yMy41OTktMTUuOTg2LTM4LjgyOC0xNS45ODZoLTYzLjk1M2MtNy42MSwwLTE0LjA4OS0yLjY2NC0xOS40MS03Ljk5NGMtNS4zMzItNS4zMy03Ljk5NC0xMS44MDEtNy45OTQtMTkuNDE3di05LjEzMmMwLTIwLjE3Nyw3LjEzOS0zNy40MDEsMjEuNDA5LTUxLjY3OGMxNC4yNzEtMTQuMjcyLDMxLjQ5Ny0yMS40MTEsNTEuNjgyLTIxLjQxMWgxOC4yNjdjNC45NDksMCw5LjIzMy0xLjgwOSwxMi44NDgtNS40MjRjMy42MTMtMy42MTcsNS40MjgtNy44OTgsNS40MjgtMTIuODQ3VjU0LjgxOWMwLTQuOTQ4LTEuODE0LTkuMjMzLTUuNDI4LTEyLjg1Yy0zLjYxNC0zLjYxMi03Ljg5OC01LjQyNC0xMi44NDgtNS40MjRoLTE4LjI2N2MtMTkuODA4LDAtMzguNjkxLDMuODU4LTU2LjY4NSwxMS41NjNjLTE3Ljk4NCw3LjcxLTMzLjUzNywxOC4xMzItNDYuNjcyLDMxLjI2N2MtMTMuMTM1LDEzLjEyOS0yMy41NTksMjguNjg4LTMxLjI2NSw0Ni42NzdjLTcuNzA3LDE3Ljk4Ny0xMS41NjcsMzYuODc5LTExLjU2Nyw1Ni42NzR2MjAwLjk5MWMwLDE1LjIzNSw1LjMzMiwyOC4xNzEsMTUuOTg4LDM4LjgzNGMxMC42NTcsMTAuNjU3LDIzLjYsMTUuOTg1LDM4LjgyOCwxNS45ODVoMTA5LjYzM2MxNS4yMjksMCwyOC4xNzEtNS4zMjgsMzguODI3LTE1Ljk4NWMxMC42NjQtMTAuNjYzLDE1Ljk4NS0yMy41OTksMTUuOTg1LTM4LjgzNFYyNzQuMDg4QzQ3NS4wODIsMjU4Ljg1NSw0NjkuNzYsMjQ1LjkyLDQ1OS4xMDMsMjM1LjI1NnpcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGFycm93X2Rvd246ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjczIDguNjdcIj48Zz48cGF0aCBkPVwiTTE4Ljc5LDcuNTJhLjguOCwwLDAsMSwuNTYtLjIzLjgyLjgyLDAsMCwxLC43OS43OS44LjgsMCwwLDEtLjIzLjU2bC03LjA3LDcuMDdhLjc5Ljc5LDAsMCwxLS41Ny4yNS43Ny43NywwLDAsMS0uNTctLjI1aDBMNC42NCw4LjY1YS44LjgsMCwwLDEtLjIzLS41Ny44Mi44MiwwLDAsMSwuNzktLjc5LjguOCwwLDAsMSwuNTYuMjNMMTIuMjgsMTRsMy4yNi0zLjI2LDMuMjUtMy4yNlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTcuMjkpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBhbGlnbl9qdXN0aWZ5OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxMy43N1wiPjxnPjxwYXRoIGQ9XCJNNC40MSw0Ljc0djJIMjAuMTV2LTJINC40MVptMCw1LjlIMjAuMTV2LTJINC40MXYyWm0wLDMuOTRIMjAuMTV2LTJINC40MXYyWm0wLDMuOTNoNy44N3YtMkg0LjQxdjJaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC00Ljc0KVwiLz48L2c+PC9zdmc+JyxcclxuICAgYWxpZ25fbGVmdDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTMuNzdcIj48Zz48cGF0aCBkPVwiTTQuNDEsNC43NHYySDIwLjE1di0ySDQuNDFabTExLjgsMy45NEg0LjQxdjJIMTYuMjJ2LTJabS0xMS44LDUuOUgxOC4xOHYtMkg0LjQxdjJabTAsMy45M2g5Ljg0di0ySDQuNDF2MlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTQuNzQpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBhbGlnbl9yaWdodDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTMuNzdcIj48Zz48cGF0aCBkPVwiTTQuNDEsNC43NHYySDIwLjE1di0ySDQuNDFabTMuOTMsNS45SDIwLjE1di0ySDguMzR2MlptLTIsMy45NEgyMC4xNHYtMkg2LjM3djJabTMuOTQsMy45M2g5Ljg0di0ySDEwLjMxdjJaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC00Ljc0KVwiLz48L2c+PC9zdmc+JyxcclxuICAgYWxpZ25fY2VudGVyOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxMy43N1wiPjxnPjxwYXRoIGQ9XCJNNC40MSw0Ljc0djJIMjAuMTV2LTJINC40MVptMiwzLjk0djJIMTguMTh2LTJINi4zN1ptLTEsNS45SDE5LjE2di0ySDUuMzl2MlptMiwzLjkzSDE3LjJ2LTJINy4zNnYyWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtNC43NClcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGZvbnRfY29sb3I6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE0LjYxXCI+PGc+PHBhdGggZD1cIk0xOC41LDE1LjU3LDE0LjI4LDQuMzJoLTMuNEw2LjY1LDE1LjU3aDNsLjgtMi4yNmg0LjIzbC44LDIuMjZoM1pNMTQsMTEuMDdIMTEuMTRMMTIuNTQsNywxMy4yNSw5Yy40MSwxLjE4LjY0LDEuODYuNywyWk00LjQxLDE2LjY5djIuMjRIMjAuMTVWMTYuNjlINC40MVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTQuMzIpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBoaWdobGlnaHRfY29sb3I6JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNjYgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTEyLjMyLDkuMzEsMTMuMzgsMTNIMTEuMjFsLjUyLTEuODNxLjQ2LTEuNjEuNTQtMS44M1pNNC40NCwzLjc2SDIwLjFWMTkuNUg0LjQ0VjMuNzZaTTE0LjcxLDE3LjMyaDIuNjNMMTMuNyw2SDEwLjg5TDcuMjYsMTcuMzJIOS44OWwuNjMtMi4yNGgzLjU1bC4zMiwxLjEyYy4xOC42NS4yOSwxLC4zMiwxLjEyWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40NCAtMy43NilcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGxpc3RfYnVsbGV0czogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTIuMzdcIj48Zz48cGF0aCBkPVwiTTcuNzcsMTYuMTJhMS41OSwxLjU5LDAsMCwwLS40OS0xLjE4LDEuNjIsMS42MiwwLDAsMC0xLjE5LS40OSwxLjY4LDEuNjgsMCwxLDAsMCwzLjM2LDEuNjcsMS42NywwLDAsMCwxLjY4LTEuNjlabTAtNC40OEExLjY3LDEuNjcsMCwwLDAsNi4wOSwxMCwxLjY4LDEuNjgsMCwwLDAsNC45LDEyLjgyYTEuNjIsMS42MiwwLDAsMCwxLjE5LjQ5LDEuNjcsMS42NywwLDAsMCwxLjY4LTEuNjdabTEyLjM4LDMuNjRhLjI3LjI3LDAsMCwwLS4wOC0uMTkuMjguMjgsMCwwLDAtLjItLjA5SDkuMTlhLjI4LjI4LDAsMCwwLS4yLjA4LjI5LjI5LDAsMCwwLS4wOC4xOVYxN2EuMjcuMjcsMCwwLDAsLjI4LjI4SDE5Ljg3YS4yNy4yNywwLDAsMCwuMTktLjA4LjI0LjI0LDAsMCwwLC4wOC0uMlYxNS4yOFpNNy43Nyw3LjEzYTEuNjMsMS42MywwLDAsMC0uNDktMS4yLDEuNjEsMS42MSwwLDAsMC0xLjE5LS40OSwxLjYxLDEuNjEsMCwwLDAtMS4xOS40OSwxLjcxLDEuNzEsMCwwLDAsMCwyLjQsMS42MiwxLjYyLDAsMCwwLDEuMTkuNDksMS42MSwxLjYxLDAsMCwwLDEuMTktLjQ5LDEuNjMsMS42MywwLDAsMCwuNDktMS4yWm0xMi4zOCwzLjY2YS4yOC4yOCwwLDAsMC0uMDgtLjIuMjkuMjksMCwwLDAtLjE5LS4wOEg5LjE5YS4yNy4yNywwLDAsMC0uMjguMjh2MS42OWEuMjcuMjcsMCwwLDAsLjA4LjE5LjI0LjI0LDAsMCwwLC4yLjA4SDE5Ljg3YS4yNy4yNywwLDAsMCwuMTktLjA4LjI1LjI1LDAsMCwwLC4wOC0uMTlWMTAuNzlabTAtNC41YS4yNy4yNywwLDAsMC0uMDgtLjE5QS4yNS4yNSwwLDAsMCwxOS44OCw2SDkuMTlBLjI4LjI4LDAsMCwwLDksNi4xYS4yNi4yNiwwLDAsMC0uMDguMTlWOEEuMjcuMjcsMCwwLDAsOSw4LjE3YS4yNC4yNCwwLDAsMCwuMi4wOEgxOS44N2EuMjcuMjcsMCwwLDAsLjE5LS4wOEEuMjUuMjUsMCwwLDAsMjAuMTQsOFY2LjI5WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtNS40NClcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGxpc3RfbnVtYmVyOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS42OSAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNNy42NiwxOGExLjI0LDEuMjQsMCwwLDAtLjI2LS43OCwxLjE3LDEuMTcsMCwwLDAtLjcyLS40MmwuODUtMVYxNUg0LjU4djEuMzRoLjk0di0uNDZsLjg1LDBoMGMtLjExLjExLS4yMi4yMy0uMzIuMzVzLS4yMy4yNy0uMzcuNDdMNS4zOSwxN2wuMjMuNTFjLjYxLS4wNS45Mi4xMS45Mi40OWEuNDIuNDIsMCwwLDEtLjE4LjM3Ljc5Ljc5LDAsMCwxLS40NS4xMkExLjQxLDEuNDEsMCwwLDEsNSwxOC4xNWwtLjUxLjc3QTIuMDYsMi4wNiwwLDAsMCw2LDE5LjVhMS44LDEuOCwwLDAsMCwxLjItLjQxQTEuMzgsMS4zOCwwLDAsMCw3LjY2LDE4Wm0wLTUuNTRINi43NVYxM0g1LjYzQS43Mi43MiwwLDAsMSw2LDEyLjUxYTUuNDUsNS40NSwwLDAsMSwuNjYtLjQ1LDIuNzEsMi43MSwwLDAsMCwuNjctLjU3LDEuMTksMS4xOSwwLDAsMCwuMzEtLjgxLDEuMjksMS4yOSwwLDAsMC0uNDUtMSwxLjg2LDEuODYsMCwwLDAtMi0uMTEsMS41MSwxLjUxLDAsMCwwLS42Mi43bC43NC41MkEuODcuODcsMCwwLDEsNiwxMC4yOGEuNTEuNTEsMCwwLDEsLjM1LjEyLjQyLjQyLDAsMCwxLC4xMy4zMy41NS41NSwwLDAsMS0uMjEuNCwzLDMsMCwwLDEtLjUuMzhjLS4xOS4xMy0uMzkuMjctLjU4LjQyYTIsMiwwLDAsMC0uNS42LDEuNjMsMS42MywwLDAsMC0uMjEuODEsMy44OSwzLjg5LDAsMCwwLC4wNS40OGgzLjJWMTIuNDRabTEyLjQ1LDIuODJhLjI3LjI3LDAsMCwwLS4wOC0uMTkuMjguMjgsMCwwLDAtLjIxLS4wOEg5LjFhLjMyLjMyLDAsMCwwLS4yMS4wOC4yNC4yNCwwLDAsMC0uMDguMlYxN2EuMjcuMjcsMCwwLDAsLjA4LjE5LjMuMywwLDAsMCwuMjEuMDhIMTkuODNhLjMyLjMyLDAsMCwwLC4yMS0uMDguMjUuMjUsMCwwLDAsLjA4LS4xOVYxNS4yNlpNNy42OSw3LjMyaC0xVjMuNzZINS44TDQuNiw0Ljg4bC42My42OGExLjg1LDEuODUsMCwwLDAsLjQzLS40OGgwbDAsMi4yNEg0Ljc0VjguMmgzVjcuMzJabTEyLjQzLDMuNDJhLjI3LjI3LDAsMCwwLS4wOC0uMTkuMjguMjgsMCwwLDAtLjIxLS4wOEg5LjFhLjMyLjMyLDAsMCwwLS4yMS4wOC4yNC4yNCwwLDAsMC0uMDguMnYxLjcxYS4yNy4yNywwLDAsMCwuMDguMTkuMy4zLDAsMCwwLC4yMS4wOEgxOS44M2EuMzIuMzIsMCwwLDAsLjIxLS4wOC4yNS4yNSwwLDAsMCwuMDgtLjE5VjEwLjc0Wm0wLTQuNTJBLjI3LjI3LDAsMCwwLDIwLDYsLjI4LjI4LDAsMCwwLDE5LjgzLDZIOS4xQS4zMi4zMiwwLDAsMCw4Ljg5LDZhLjI0LjI0LDAsMCwwLS4wOC4xOVY3LjkzYS4yNy4yNywwLDAsMCwuMDguMTkuMzIuMzIsMCwwLDAsLjIxLjA4SDE5LjgzQS4zMi4zMiwwLDAsMCwyMCw4LjEyYS4yNi4yNiwwLDAsMCwuMDgtLjJWNi4yMlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDMgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICB0YWJsZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTQuNDEsOC4wNVYzLjc2SDguN1Y4LjA1SDQuNDFabTUuNzEsMFYzLjc2aDQuM1Y4LjA1aC00LjNabTUuNzQtNC4yOWg0LjI5VjguMDVIMTUuODZWMy43NlptLTExLjQ1LDEwVjkuNDhIOC43djQuM0g0LjQxWm01LjcxLDBWOS40OGg0LjN2NC4zaC00LjNabTUuNzQsMFY5LjQ4aDQuMjl2NC4zSDE1Ljg2Wk00LjQxLDE5LjVWMTUuMjFIOC43VjE5LjVINC40MVptNS43MSwwVjE1LjIxaDQuM1YxOS41aC00LjNabTUuNzQsMFYxNS4yMWg0LjI5VjE5LjVIMTUuODZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgaG9yaXpvbnRhbF9ydWxlOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAyLjI0XCI+PGc+PHBhdGggZD1cIk0yMC4xNSwxMi43NVYxMC41MUg0LjQxdjIuMjRIMjAuMTVaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC0xMC41MSlcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIHNob3dfYmxvY2tzOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS42NiAxNS42N1wiPjxnPjxwYXRoIGQ9XCJNMTkuNzIsNS41OGExLjY0LDEuNjQsMCwwLDAtMS42NC0xLjY0SDYuMjNhMS42MiwxLjYyLDAsMCwwLTEuMTYuNDgsMS42MywxLjYzLDAsMCwwLS40OCwxLjE2VjkuNjNhMS42LDEuNiwwLDAsMCwuNDgsMS4xNiwxLjYyLDEuNjIsMCwwLDAsMS4xNi40N0gxOC4wOWExLjY3LDEuNjcsMCwwLDAsMS4xNi0uNDcsMS42MiwxLjYyLDAsMCwwLC40OC0xLjE2VjUuNThabS0uOTQsNC4wNWEuNjguNjgsMCwwLDEtLjcuN0g2LjIzYS42Ni42NiwwLDAsMS0uNDgtLjIuNzQuNzQsMCwwLDEtLjIxLS41VjUuNThhLjY2LjY2LDAsMCwxLC4yLS40OC43MS43MSwwLDAsMSwuNDgtLjIxSDE4LjA4YS43NC43NCwwLDAsMSwuNS4yMS42Ni42NiwwLDAsMSwuMi40OFpNNi40OCw3LjcyYS4yMS4yMSwwLDAsMCwuMTctLjA3LjIyLjIyLDAsMCwwLC4wNy0uMTdWNy4wNmExLjI3LDEuMjcsMCwwLDEsLjExLS41Mi4zNy4zNywwLDAsMSwuMzYtLjIzSDguNzdBLjI1LjI1LDAsMCwwLDksNi4xN2EuMTkuMTksMCwwLDAsMC0uMjMuMjcuMjcsMCwwLDAtLjItLjEySDcuMTlhLjg4Ljg4LDAsMCwwLS43Mi4zOSwxLjUxLDEuNTEsMCwwLDAtLjIzLjg1di40MmEuMjQuMjQsMCwwLDAsLjI0LjI0Wm0tLjE5LjgxYS4yMS4yMSwwLDAsMCwuMTctLjA3LjI2LjI2LDAsMCwwLC4wNy0uMTcuMjQuMjQsMCwwLDAtLjI0LS4yNC4yLjIsMCwwLDAtLjE2LjA5LjIuMiwwLDAsMC0uMDcuMTYuMjIuMjIsMCwwLDAsLjA3LjE3LjIzLjIzLDAsMCwwLC4xNi4wNlptOC40Niw1LjFhMS42MywxLjYzLDAsMCwwLS40Ny0xLjE2QTEuNjEsMS42MSwwLDAsMCwxMy4xMiwxMkg2LjIzYTEuNiwxLjYsMCwwLDAtMS4xNi40NiwxLjYyLDEuNjIsMCwwLDAtLjQ4LDEuMTZ2NC4wNWExLjY0LDEuNjQsMCwwLDAsMS42NCwxLjY0aDYuODlhMS42LDEuNiwwLDAsMCwxLjE2LS40OCwxLjYyLDEuNjIsMCwwLDAsLjQ3LTEuMTZabS0uOTQsNGEuNy43LDAsMCwxLS4yLjQ5LjY1LjY1LDAsMCwxLS41LjJINi4yM2EuNjYuNjYsMCwwLDEtLjQ4LS4yLjc1Ljc1LDAsMCwxLS4yMS0uNDl2LTRhLjc0Ljc0LDAsMCwxLC4yMS0uNS42Ni42NiwwLDAsMSwuNDgtLjJoNi44OWEuNjguNjgsMCwwLDEsLjcuN3Y0Wm02LjE1LDB2LTRhMS42LDEuNiwwLDAsMC0uNDgtMS4xNkExLjY3LDEuNjcsMCwwLDAsMTguMzIsMTJIMTcuMWExLjYzLDEuNjMsMCwwLDAtMS4xNi40NywxLjYxLDEuNjEsMCwwLDAtLjQ3LDEuMTZ2NGExLjY3LDEuNjcsMCwwLDAsLjQ3LDEuMTYsMS42MiwxLjYyLDAsMCwwLDEuMTYuNDhoMS4yMkExLjY0LDEuNjQsMCwwLDAsMjAsMTcuNjhabS0uOTQtNHY0YS43NS43NSwwLDAsMS0uMjEuNDkuNjIuNjIsMCwwLDEtLjQ4LjJIMTcuMTFhLjY5LjY5LDAsMCwxLS41LS4yLjcuNywwLDAsMS0uMi0uNDl2LTRhLjY4LjY4LDAsMCwxLC43LS43aDEuMjJhLjY2LjY2LDAsMCwxLC40OC4yLjcyLjcyLDAsMCwxLC4yMS41WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40NCAtMy43OSlcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGNhbmNlbDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTE0LjE1LDExLjYzbDUuNjEsNS42MWExLjI5LDEuMjksMCwwLDEsLjM4LjkzLDEuMjcsMS4yNywwLDAsMS0uNC45MywxLjI1LDEuMjUsMCwwLDEtLjkyLjQsMS4zMSwxLjMxLDAsMCwxLS45NC0uNGwtNS42MS01LjYxTDYuNjcsMTkuMWExLjMxLDEuMzEsMCwwLDEtLjk0LjQsMS4yNCwxLjI0LDAsMCwxLS45Mi0uNCwxLjI3LDEuMjcsMCwwLDEtLjQtLjkzLDEuMzMsMS4zMywwLDAsMSwuMzgtLjkzbDUuNjEtNS42M0w0Ljc5LDZhMS4yNiwxLjI2LDAsMCwxLS4zOC0uOTMsMS4yMiwxLjIyLDAsMCwxLC40LS45MiwxLjI4LDEuMjgsMCwwLDEsLjkyLS4zOSwxLjM4LDEuMzgsMCwwLDEsLjk0LjM4bDUuNjEsNS42MSw1LjYxLTUuNjFhMS4zMywxLjMzLDAsMCwxLC45NC0uMzgsMS4yNiwxLjI2LDAsMCwxLC45Mi4zOSwxLjI0LDEuMjQsMCwwLDEsLjQuOTIsMS4yOSwxLjI5LDAsMCwxLS4zOS45M0wxNyw4LjgxbC0yLjgsMi44MlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBpbWFnZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzUgMTUuNzdcIj48Zz48cGF0aCBkPVwiTTguNzcsOC43MmEuODguODgsMCwwLDEtLjYxLS4yNy44Mi44MiwwLDAsMS0uMjUtLjYxLjg5Ljg5LDAsMCwxLC4yNS0uNjJBLjgyLjgyLDAsMCwxLDguNzcsN2EuODEuODEsMCwwLDEsLjYxLjI1LjgzLjgzLDAsMCwxLC4yNy42Mi44MS44MSwwLDAsMS0uMjUuNjEuOTEuOTEsMCwwLDEtLjYzLjI3Wm05LjYyLTVhMS43NCwxLjc0LDAsMCwxLDEuNzYsMS43NlYxNy43NmExLjc0LDEuNzQsMCwwLDEtMS43NiwxLjc2SDYuMTZBMS43NCwxLjc0LDAsMCwxLDQuNCwxNy43NlY1LjUxQTEuNzQsMS43NCwwLDAsMSw2LjE2LDMuNzVIMTguMzlabTAsMS43NUg2LjE2djhMOC41MywxMS44YS45NC45NCwwLDAsMSwuNTQtLjE3Ljg2Ljg2LDAsMCwxLC41NC4yTDExLjA5LDEzbDMuNjQtNC41NWEuNzguNzgsMCwwLDEsLjM0LS4yNS44NS44NSwwLDAsMSwuNDItLjA3Ljg5Ljg5LDAsMCwxLC4zOS4xMi43OC43OCwwLDAsMSwuMjguMjlsMi4yNCwzLjY3VjUuNTFabTAsMTIuMjRWMTUuNkwxNS4zLDEwLjUzLDExLjg5LDE0LjhhLjg5Ljg5LDAsMCwxLS41OS4zMi44Mi44MiwwLDAsMS0uNjQtLjE4TDksMTMuNjIsNi4xNiwxNS43NHYyWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40IC0zLjc1KVwiLz48L2c+PC9zdmc+JyxcclxuICAgdmlkZW86ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE0LjU1XCI+PGc+PHBhdGggZD1cIk0yMC4xNSwxMC4yNlYxOC45bC0zLjk0LTEuNTd2MS4ySDQuNDFWMTAuNjZIMTYuMjJ2MS4yM2wyLS44MSwyLS44MlpNMTQuNjQsMTdoMFYxMi41NGgwdi0uMzFINlYxN2g4LjY3Wm0zLjk0LS4zN3YtNGwtMi4zNywxdjJsMS4xOC40OCwxLjE5LjQ4Wk03Ljk0LDkuODZBMi43NywyLjc3LDAsMCwxLDUuMTksNy4xMWEyLjc2LDIuNzYsMCwwLDEsNS41MSwwQTIuNzgsMi43OCwwLDAsMSw3Ljk0LDkuODZabTAtMy45M2ExLjIxLDEuMjEsMCwwLDAtLjgzLjM1LDEuMTUsMS4xNSwwLDAsMC0uMzQuODRBMS4wOSwxLjA5LDAsMCwwLDcuMTEsOCwxLjE1LDEuMTUsMCwwLDAsOCw4LjI4LDEuMTMsMS4xMywwLDAsMCw5LjExLDcuMTIsMS4xNiwxLjE2LDAsMCwwLDcuOTQsNS45M1ptNS45LDMuOTNhMi4zNCwyLjM0LDAsMCwxLTEuNjctLjY4LDIuMywyLjMsMCwwLDEtLjY4LTEuNjcsMi4zNSwyLjM1LDAsMCwxLDQtMS42NywyLjM3LDIuMzcsMCwwLDEsMCwzLjM0LDIuMzMsMi4zMywwLDAsMS0xLjY4LjY4Wm0wLTMuMTRhLjc1Ljc1LDAsMSwwLC41NS4yMi43My43MywwLDAsMC0uNTUtLjIyWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtNC4zNSlcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGxpbms6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE1LjcyXCI+PGc+PHBhdGggZD1cIk0xMy4wNSwxMy42M2EuMjQuMjQsMCwwLDEsLjE1LjIyTDEzLjQyLDE2YS4xOS4xOSwwLDAsMS0uMDguMThsLTIuMTIsMi4xNGE0LjA4LDQuMDgsMCwwLDEtMS4yOS44NUE0LDQsMCwwLDEsNC43MSwxN2EzLjkyLDMuOTIsMCwwLDEtLjMtMS41MkE0LDQsMCwwLDEsNC43MSwxNGEzLjkxLDMuOTEsMCwwLDEsLjg3LTEuM0w3LjcsMTAuNTZhLjI1LjI1LDAsMCwxLC4yLS4wNmwyLjE3LjIyYS4yMS4yMSwwLDAsMSwuMTkuMTUuMjQuMjQsMCwwLDEsMCwuMjVMNy4xMiwxNC4yM2ExLjgxLDEuODEsMCwwLDAsMCwyLjU4LDEuNzgsMS43OCwwLDAsMCwxLjI5LjUyLDEuNzQsMS43NCwwLDAsMCwxLjI4LS41MkwxMi44LDEzLjdhLjI0LjI0LDAsMCwxLC4yNS0uMDdaTTE5LDQuOTJhNCw0LDAsMCwxLDAsNS42NkwxNi44NiwxMi43YS4yNS4yNSwwLDAsMS0uMTcuMDhsLTIuMi0uMjNhLjIxLjIxLDAsMCwxLS4xOS0uMTUuMjIuMjIsMCwwLDEsMC0uMjVMMTcuNDQsOWExLjgxLDEuODEsMCwwLDAsMC0yLjU4LDEuNzgsMS43OCwwLDAsMC0xLjI5LS41MiwxLjc0LDEuNzQsMCwwLDAtMS4yOC41MkwxMS43Niw5LjU3YS4yMS4yMSwwLDAsMS0uMjUsMCwuMjQuMjQsMCwwLDEtLjE2LS4yMWwtLjIyLTIuMTdhLjE5LjE5LDAsMCwxLC4wOC0uMThsMi4xMi0yLjE0YTQuMDgsNC4wOCwwLDAsMSwxLjI5LS44NSw0LjA1LDQuMDUsMCwwLDEsMy4wNiwwLDMuODUsMy44NSwwLDAsMSwxLjMuODVaTTUuODQsOS44MmEuMjUuMjUsMCwwLDEtLjE4LS4wOC4xOS4xOSwwLDAsMS0uMDctLjE5bC4xMS0uNzdhLjIuMiwwLDAsMSwuMTEtLjE3LjI0LjI0LDAsMCwxLC4yLDBsMi41LjcyYS4yNS4yNSwwLDAsMSwuMTUuMjcuMjIuMjIsMCwwLDEtLjIzLjIxbC0yLjU5LDBabTQuMTItMi0uNzMtMi41YS4yNy4yNywwLDAsMSwwLS4yQS4yMS4yMSwwLDAsMSw5LjQxLDVMMTAuMTksNWEuMjUuMjUsMCwwLDEsLjE5LDAsLjIzLjIzLDAsMCwxLC4wOC4xOGwtLjA1LDIuNjFhLjIuMiwwLDAsMS0uMTkuMjNoMEEuMjIuMjIsMCwwLDEsMTAsNy44NVptOC43Niw1LjU4YS4yNS4yNSwwLDAsMSwuMTguMDguMjMuMjMsMCwwLDEsLjA2LjJsLS4xMS43N2EuMjUuMjUsMCwwLDEtLjExLjE3LjIxLjIxLDAsMCwxLS4xMiwwbC0uMDgsMEwxNiwxNGEuMjUuMjUsMCwwLDEtLjE1LS4yNy4yMi4yMiwwLDAsMSwuMjItLjIxbDEuMjksMCwxLjMzLDBabS00LjEyLDIsLjc0LDIuNTFhLjI4LjI4LDAsMCwxLDAsLjIuMjMuMjMsMCwwLDEtLjE4LjExbC0uOC4xMWEuMjMuMjMsMCwwLDEtLjE3LS4wNy4yNS4yNSwwLDAsMS0uMDgtLjE4bDAtMi42MWEuMjIuMjIsMCwwLDEsLjIyLS4yMi4yMS4yMSwwLDAsMSwuMjYuMTVaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC0zLjc3KVwiLz48L2c+PC9zdmc+JyxcclxuICAgbWF0aDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTEuODEgMTUuNzNcIj48Zz48cGF0aCBkPVwiTTE3LjE5LDUuNzNhMSwxLDAsMCwwLC43MS0uMjksMSwxLDAsMCwwLC4yOC0uNywxLDEsMCwwLDAtMS0xSDcuMzVhMSwxLDAsMCwwLTEsMSwuNzcuNzcsMCwwLDAsLjEzLjQ3aDBsNC41OCw2LjQzTDYuNjgsMTcuODFhMS4yNSwxLjI1LDAsMCwwLS4yOS43MS45NC45NCwwLDAsMCwuMjguNy45Mi45MiwwLDAsMCwuNjkuMjhIMTcuMmExLDEsMCwwLDAsLjcxLS4yOCwxLDEsMCwwLDAsMC0xLjM5LjkyLjkyLDAsMCwwLS43MS0uMjlIOS4yNmwzLjg3LTUuNDNhLjg2Ljg2LDAsMCwwLDAtLjk1TDkuMjYsNS43M2g3LjkzWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNi4zOCAtMy43NylcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIHVubGluazogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTUuNzJcIj48Zz48cGF0aCBkPVwiTTE5LDE4LjMyYTQsNCwwLDAsMCwwLTUuNjhMMTUuODUsOS41bC0xLjE3LDEuNTVMMTcuNTcsMTRhMiwyLDAsMCwxLC42MSwxLjQ3LDIuMDgsMi4wOCwwLDAsMS0yLjA5LDIuMDksMiwyLDAsMCwxLTEuNDctLjYxbC0uMzgtLjM3LTEuNzQsMSwuOC43OGE0LDQsMCwwLDAsNS42OCwwWk04LDkuNzdhMiwyLDAsMCwxLTEuMjctMSwxLjg5LDEuODksMCwwLDEtLjIxLTEuNTdBMi4xLDIuMSwwLDAsMSw3LjQ1LDYsMiwyLDAsMCwxLDksNS43NkwxMi4yNyw3LjJsLjQ5LTJMOS40OCwzLjlhNCw0LDAsMCwwLTMuMDYuNDFBMy44MiwzLjgyLDAsMCwwLDQuNTYsNi43M2EzLjgsMy44LDAsMCwwLC40LDNBMy43OCwzLjc4LDAsMCwwLDcuMzksMTEuNmw1LjM4LDIsLjQ5LTItMi42NC0uOTRMOCw5Ljc3WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtMy43NilcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIHRhYmxlX2hlYWRlcjogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzUgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTE3LDE5LjV2LS43OEgxNS41di43OEgxN1ptLTMsMHYtLjc4SDEyLjV2Ljc4SDE0Wm0tMywwdi0uNzhIOS41M3YuNzhIMTFabS0zLDB2LS43OEg2LjUzdi43OEg4Wm0xMC41NSwwYTEuNzMsMS43MywwLDAsMCwuODUtLjM1LDEuNjcsMS42NywwLDAsMCwuNTYtLjc2bC0uNzEtLjMxYTEuMjEsMS4yMSwwLDAsMS0uMzUuNCwxLjM0LDEuMzQsMCwwLDEtLjUzLjIzbC4wOC4zOGMuMDYuMjQuMDkuMzguMS40MVptLTEzLjctLjYzLjU1LS41NUEuNzcuNzcsMCwwLDEsNS4yNSwxOGExLjMxLDEuMzEsMCwwLDEtLjA2LS4zOHYtLjM4SDQuNDF2LjM4YTIsMiwwLDAsMCwuMTIuNjgsMS42LDEuNiwwLDAsMCwuMzUuNTdabTE1LjI3LTIuMTJWMTUuMjZoLS43OHYxLjQ5aC43OFptLTE1LTFWMTQuMjNINC40MXYxLjQ5aC43OFptMTUtMlYxMi4yNmgtLjc4djEuNDloLjc4Wm0tMTUtMVYxMS4yMkg0LjQxdjEuNTFoLjc4Wm0xNS0yVjkuMjZoLS43OHYxLjUxaC43OFptLTE1LTFWOC4xN0g0LjQxVjkuNzRoLjc4Wm0xNS0yVjYuMjhoLS43OFY3Ljc3aC43OFptLTE1LTEuMTFWNS4zM0w0LjQ4LDUuMWEuNzcuNzcsMCwwLDAtLjA3LjI3LDIuNzIsMi43MiwwLDAsMCwwLC4yOHYxaC43OVpNMTkuMjEsNWwuNjMtLjRBMS42MiwxLjYyLDAsMCwwLDE5LjE2LDRhMS45NCwxLjk0LDAsMCwwLS45MS0uMjJ2Ljc4YTEuMzEsMS4zMSwwLDAsMSwuNTYuMTIuODguODgsMCwwLDEsLjQuMzZaTTYsNC41NEg3Ljc4VjMuNzZINmEuODIuODIsMCwwLDAtLjI4LjA2bC4xMi4zNWMuMDcuMjEuMS4zMy4xMS4zNlptMTAuOCwwVjMuNzZIMTUuMjh2Ljc4aDEuNDlabS0zLDBWMy43NkgxMi4yOHYuNzhoMS40OVptLTMsMFYzLjc2SDkuMjh2Ljc4aDEuNTFaTTYsMTAuODRoMTIuNlY2LjkxSDZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBtZXJnZV9jZWxsOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NiAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNMTguOTIsMTMuNWgxLjIzdjQuMTVBMS44NCwxLjg0LDAsMCwxLDE4LjMsMTkuNUgxNFYxOC4yN0gxOC4zYS42LjYsMCwwLDAsLjQ0LS4xOC41OS41OSwwLDAsMCwuMTgtLjQ0VjEzLjVaTTE4LjMsMy43NmExLjg0LDEuODQsMCwwLDEsMS44NSwxLjg1VjkuODJIMTguOTJWNS42YS42LjYsMCwwLDAtLjE4LS40NEEuNTkuNTksMCwwLDAsMTguMyw1SDE0VjMuNzZIMTguM1ptMS44NSw4LjUxSDE1LjZMMTcuMjYsMTRsLS44Ni44Ni0zLjE0LTMuMTdMMTYuNCw4LjUxbC44Ni44NkwxNS42MiwxMWg0LjU0djEuMjRabS0xMy45LDZoNC4yN1YxOS41SDYuMjVBMS44NCwxLjg0LDAsMCwxLDQuNCwxNy42NVYxMy41SDUuNjN2NC4xNWEuNjEuNjEsMCwwLDAsLjYyLjYyWm0wLTE0LjUxaDQuMjdWNUg2LjI1YS42LjYsMCwwLDAtLjQ0LjE4LjU3LjU3LDAsMCwwLS4xNy40M1Y5LjgxSDQuNDFWNS42QTEuODMsMS44MywwLDAsMSw2LjI1LDMuNzZabTUsNy45TDguMTUsMTQuODMsNy4zLDE0LDksMTIuMjdINC40MVYxMUg4Ljk0TDcuMyw5LjM4LDcuNzMsOWwuNDMtLjQzWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40IC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgc3BsaXRfY2VsbDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzUgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTEwLjM3LDEyLjI1SDYuNzRMOC40LDEzLjk0bC0uODcuODZMNC40MSwxMS42Myw3LjUzLDguNWwuODcuODZMNi43NCwxMWgzLjYydjEuMjNabTkuNzgtLjYxTDE3LDE0LjgxLDE2LjEzLDE0bDEuNjYtMS42OUgxNC4xNlYxMWgzLjYzTDE2LjEzLDkuMzdsLjQzLS40M0E1LjI0LDUuMjQsMCwwLDEsMTcsOC41MVpNMTguOSw4LjIyVjUuNjFhLjU3LjU3LDAsMCwwLS4xOC0uNDNBLjY1LjY1LDAsMCwwLDE4LjI5LDVIMTIuODhWMTguMjhoNS40MWEuNy43LDAsMCwwLC40NC0uMTguNTcuNTcsMCwwLDAsLjE4LS40M1YxNWgxLjIzdjIuNjRhMS44NCwxLjg0LDAsMCwxLTEuODUsMS44M2gtMTJBMS44NCwxLjg0LDAsMCwxLDQuOTQsMTlhMS44MSwxLjgxLDAsMCwxLS41NC0xLjI5VjE1SDUuNjN2Mi42NGEuNTcuNTcsMCwwLDAsLjE4LjQzLjY3LjY3LDAsMCwwLC40NC4xOGg1LjQxVjVINi4yNWEuNy43LDAsMCwwLS40NC4xOC41Ni41NiwwLDAsMC0uMTcuNDNWOC4yMkg0LjQxVjUuNjFBMS44LDEuOCwwLDAsMSw1LDQuMzFhMS45MSwxLjkxLDAsMCwxLDEuMzEtLjU1aDEyYTEuODksMS44OSwwLDAsMSwxLjMxLjU1LDEuOCwxLjgsMCwwLDEsLjU0LDEuM1Y4LjIzSDE4LjlaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBjYXB0aW9uOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NCAxMy43OVwiPjxnPjxwYXRoIGQ9XCJNNC40MSwxOC41MkgyMC4xNXYtMkg0LjQxWk0yMCw0LjczSDE4LjA3VjZoLjY1di42NUgyMFY0LjczWk0xNyw2VjQuNzNIMTQuNTVWNkgxN1pNMTMuNDksNlY0LjczSDExVjZoMi40N1pNMTAsNlY0LjczSDcuNVY2SDEwWk01Ljc5LDZoLjY1VjQuNzNINC41VjYuNjdINS44VjZaTTQuNSwxMS4zNEg1Ljc5VjguNDhINC41Wk02LjQ0LDEzLjhINS43OXYtLjY1SDQuNXYxLjk0SDYuNDRaTTE3LDE1LjA5VjEzLjhIMTQuNTV2MS4yOUgxN1ptLTMuNTIsMFYxMy44SDExdjEuMjloMi40N1ptLTMuNTMsMFYxMy44SDcuNXYxLjI5SDEwWk0yMCwxMy4xNkgxOC43MnYuNjVoLS42NVYxNS4xSDIwWm0tMS4yOS0xLjgySDIwVjguNDhoLTEuM3YyLjg2WlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC40MSAtNC43MylcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGVkaXQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE1LjczXCI+PGc+PHBhdGggZD1cIk03LjUxLDUuNjhoNmwxLjUyLTEuNTdINi45NGEyLjQsMi40LDAsMCwwLTEuNzkuODJBMi44LDIuOCwwLDAsMCw0LjQxLDYuOFYxN2EyLjU1LDIuNTUsMCwwLDAsLjc1LDEuOEEyLjQ4LDIuNDgsMCwwLDAsNywxOS41SDE3LjIyYTIuNTcsMi41NywwLDAsMCwxLjgzLS43NCwyLjUyLDIuNTIsMCwwLDAsLjc3LTEuOFY4LjgzbC0xLjU4LDEuNTR2NmExLjU0LDEuNTQsMCwwLDEtMS41MywxLjUzSDcuNTFBMS41NCwxLjU0LDAsMCwxLDYsMTYuNDFWNy4yMUExLjUyLDEuNTIsMCwwLDEsNy41MSw1LjY4Wm01LjYzLDcuNDdoMEwxMC43LDEwLjc0bC0xLDMuMzgsMS43MS0uNDgsMS43LS40OVptLjM0LS4zNGgwbDUuMzYtNS4zMkwxNi40LDUuMDgsMTEsMTAuNGwxLjIzLDEuMjEsMS4yMSwxLjJaTTE5LjkzLDYuNGEuODIuODIsMCwwLDAsLjIyLS40OEEuNTQuNTQsMCwwLDAsMjAsNS40N0wxOC40NSw0QS42Ny42NywwLDAsMCwxOCwzLjc3YS43LjcsMCwwLDAtLjQ4LjIxbC0uNzQuNzIsMi40NCwyLjQzLjM3LS4zNy4zNS0uMzZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC0zLjc3KVwiLz48L2c+PC9zdmc+JyxcclxuICAgZGVsZXRlOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43MyAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNMTkuMTYsNi43MWEuOTQuOTQsMCwwLDAsLjY5LS4yOC45MS45MSwwLDAsMCwuMjktLjY4QTEsMSwwLDAsMCwxOS44NSw1YS45My45MywwLDAsMC0uNjktLjNIMTQuMjRBLjk0Ljk0LDAsMCwwLDE0LDQuMDZhLjkyLjkyLDAsMCwwLS43LS4zaC0yYTEsMSwwLDAsMC0uNy4zLjkzLjkzLDAsMCwwLS4yOC42OEg1LjM5QS45Mi45MiwwLDAsMCw0LjcsNWExLDEsMCwwLDAtLjI5LjcxLjkxLjkxLDAsMCwwLC4yOS42OCwxLDEsMCwwLDAsLjY5LjI4SDE5LjE2Wm0tMTIuNzksMWExLDEsMCwwLDAtLjcuMy45NC45NCwwLDAsMC0uMjguNjl2OC44NUExLjg4LDEuODgsMCwwLDAsNiwxOC45M2ExLjksMS45LDAsMCwwLDEuMzkuNTdIMTcuMmExLjg3LDEuODcsMCwwLDAsMS4zOS0uNTgsMS45MSwxLjkxLDAsMCwwLC41OC0xLjM5VjguNjhBMSwxLDAsMCwwLDE4Ljg4LDhhLjg5Ljg5LDAsMCwwLS43LS4yOSwxLDEsMCwwLDAtLjY5LjI5LjkyLjkyLDAsMCwwLS4yOS42OHY3Ljg3YTEsMSwwLDAsMS0xLDFIOC4zNGEuOTQuOTQsMCwwLDEtLjY5LS4yOCwxLDEsMCwwLDEtLjI5LS43MVY4LjY4YTEsMSwwLDAsMC0xLTFaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgbW9kaWZ5OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43IDE1Ljc0XCI+PGc+PHBhdGggZD1cIk0xOS43OSwxNS4yM2EuNjYuNjYsMCwwLDEsLjMuMzguNTkuNTksMCwwLDEtLjA3LjQ4bC0uOCwxLjM4YS42Ni42NiwwLDAsMS0uMzguMy41OS41OSwwLDAsMS0uNDgtLjA3bC0uNjgtLjM4YTQuNTUsNC41NSwwLDAsMS0xLjM0Ljc3di43OGEuNjQuNjQsMCwwLDEtLjE4LjQ1LjYxLjYxLDAsMCwxLS40NS4xOGgtMS42YS42LjYsMCwwLDEtLjQ0LS4xOC42Ni42NiwwLDAsMS0uMTktLjQ1di0uNzhhNC4zNiw0LjM2LDAsMCwxLTEuMzItLjc3bC0uNjkuMzhhLjU4LjU4LDAsMCwxLS40OC4wNy42Ni42NiwwLDAsMS0uMzgtLjNsLS4zOC0uNjZoLjgzYTEuNzcsMS43NywwLDAsMCwxLjIzLS41MiwxLjcyLDEuNzIsMCwwLDAsLjUxLTEuMjN2LS4xOGEzLDMsMCwwLDAsLjQ5LS4yOGwuMTUuMDlhMS44MywxLjgzLDAsMCwwLC44OC4yM0ExLjc1LDEuNzUsMCwwLDAsMTUuODQsMTRsLjg4LTEuNTJhMS43LDEuNywwLDAsMCwuMTctMS4zMiwxLjY2LDEuNjYsMCwwLDAtLjMtLjYxLDEuODQsMS44NCwwLDAsMC0uNTEtLjQ1bC0uMTUtLjA5LDAtLjI5LDAtLjI4LjE1LS4wOWExLDEsMCwwLDAsLjI2LS4xOGwwLC4wNnYuNzhhNC4zNCw0LjM0LDAsMCwxLDEuMzQuNzdsLjY4LS4zOGEuNjguNjgsMCwwLDEsLjQ4LS4wNi42NC42NCwwLDAsMSwuMzguMjlsLjgsMS4zOGEuNTguNTgsMCwwLDEsLjA3LjQ4LjYzLjYzLDAsMCwxLS4zLjM4bC0uNjguNGEzLjg0LDMuODQsMCwwLDEsLjA4Ljc2LDQuMTMsNC4xMywwLDAsMS0uMDguNzhsLjM0LjE4LjMyLjJaTTEwLjE3LDcuODZhMS45LDEuOSwwLDAsMSwxLjM1LDMuMjMsMS44NSwxLjg1LDAsMCwxLTEuMzUuNTVBMS45LDEuOSwwLDAsMSw4LjgzLDguNDFhMS45MiwxLjkyLDAsMCwxLDEuMzQtLjU1Wm0xLjU4LDcuMmEuNzMuNzMsMCwwLDEtLjIxLjQ5LjY2LjY2LDAsMCwxLS40OC4ySDkuMjlhLjY4LjY4LDAsMCwxLS42OS0uNjlWMTQuMmE0Ljc1LDQuNzUsMCwwLDEtMS40OC0uODZsLS43NS40NWEuNzMuNzMsMCwwLDEtLjcsMCwuNjMuNjMsMCwwLDEtLjI1LS4yNkw0LjU0LDEyYS42Ny42NywwLDAsMS0uMDgtLjUzLjcxLjcxLDAsMCwxLC4zMi0uNDJsLjc1LS40M2E0LjgsNC44LDAsMCwxLS4wOC0uODUsNC43MSw0LjcxLDAsMCwxLC4wOC0uODVsLS43NC0uNDRhLjcxLjcxLDAsMCwxLS4zMi0uNDIuNjUuNjUsMCwwLDEsLjA3LS41NEw1LjQyLDZhLjY2LjY2LDAsMCwxLC40Mi0uMzJsLjE4LDBhLjczLjczLDAsMCwxLC4zNS4wOWwuNzUuNDNBNC42OCw0LjY4LDAsMCwxLDguNiw1LjMzVjQuNDVhLjY4LjY4LDAsMCwxLC42OS0uNjloMS43N2EuNjQuNjQsMCwwLDEsLjQ4LjIuNzMuNzMsMCwwLDEsLjIxLjQ5di44OGE0Ljc1LDQuNzUsMCwwLDEsMS40OC44NUwxNCw1Ljc1YS42Ny42NywwLDAsMSwuMzQtLjA5bC4xOCwwYS43MS43MSwwLDAsMSwuNDIuMzJsLjg5LDEuNTRhLjY3LjY3LDAsMCwxLC4wNi41Mi43My43MywwLDAsMS0uMzIuNDNsLS43NS40MmE0LjgsNC44LDAsMCwxLC4wOC44NSw0LjcxLDQuNzEsMCwwLDEtLjA4Ljg1bC43NS40M2EuNjYuNjYsMCwwLDEsLjMyLjQyLjczLjczLDAsMCwxLS4wNi41NGwtLjg5LDEuNTJhLjY5LjY5LDAsMCwxLS4yNS4yNi43LjcsMCwwLDEtLjM1LjA5LjY0LjY0LDAsMCwxLS4zNC0uMDlsLS43NS0uNDVhNC44Nyw0Ljg3LDAsMCwxLTEuNDguODZ2Ljg3Wk03LjIzLDkuNzVhMywzLDAsMCwwLC44NiwyLjA4LDIuOTQsMi45NCwwLDEsMCw0LjE2LTQuMTYsMywzLDAsMCwwLTIuMDgtLjg1QTIuOTQsMi45NCwwLDAsMCw3LjIzLDkuNzVaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQ0IC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgcmV2ZXJ0OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43NiAxNC42OVwiPjxnPjxwYXRoIGQ9XCJNMTguMjYsMTVWMTIuM2wxLjg5LTJWMTVhMi41OCwyLjU4LDAsMCwxLS4yNCwxYy0uMi41OC0uNzUuOTItMS42NSwxSDcuNTZ2Mkw0LjQxLDE1LjYzLDcuNTYsMTN2MmgxMC43Wk02LjMsOC4yOFYxMUw0LjQxLDEzVjguMjhhMi41OCwyLjU4LDAsMCwxLC4yNC0xYy4yLS41OC43NS0uOTIsMS42NS0xSDE3di0ybDMuMTUsMy4zNEwxNywxMC4zdi0ySDYuM1pcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNCAtNC4yOClcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGF1dG9fc2l6ZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzQgMTUuNzRcIj48Zz48cGF0aCBkPVwiTTYuNzEsMTcuMTksNi44OSwxNmwxLjIxLS4xNUE2LDYsMCwwLDEsNi44MSwxMy45YTUuNzgsNS43OCwwLDAsMS0uNDUtMi4yN0E2LDYsMCwwLDEsOC4xLDcuNDVhNS44Myw1LjgzLDAsMCwxLDQuMTctMS43M2wxLTEtMS0xQTcuODksNy44OSwwLDAsMCw1LDE0LjY0YTcuNzMsNy43MywwLDAsMCwxLjcxLDIuNTVabTUuNTcsMi4zMWgwQTcuODYsNy44NiwwLDAsMCwxNy44NSw2LjA3TDE3LjY3LDcuM2wtMS4yMS4xNWE1LjksNS45LDAsMCwxLDEuMjksMS45Miw1LjgxLDUuODEsMCwwLDEsLjQ1LDIuMjYsNS45MSw1LjkxLDAsMCwxLTUuOSw1LjlsLTEsMSwuNDkuNDkuNDcuNVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBpbnNlcnRfcm93X2JlbG93OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS44IDE1LjhcIj48Zz48cGF0aCBkPVwiTTE1LjcsMS4zYy0wLjEtMC4xLTAuMS0wLjItMC4yLTAuMkwxNS4zLDFIMC40TDAuMywxLjFjMCwwLTAuMSwwLjEtMC4xLDAuMWMwLDAtMC4xLDAuMS0wLjEsMC4xTDAsMS40djcuN2wwLjEsMC4xYzAsMC4xLDAuMSwwLjEsMC4yLDAuMmwwLjEsMC4xaDIuM1Y5LjNsMC4xLTAuNUwzLDguNWwwLjEtMC4yYy0wLjEsMC0wLjIsMC0wLjMsMEgxLjJ2LTZoMTMuM3Y2aC0xLjZjLTAuMSwwLTAuMiwwLTAuMywwbDAuMSwwLjJsMC4yLDAuNEMxMi45LDksMTMsOS4yLDEzLDkuM3YwLjFoMi4zbDAuMi0wLjFjMC4xLDAsMC4xLTAuMSwwLjItMC4ybDAuMS0wLjFWMS40TDE1LjcsMS4zelwiLz48cGF0aCBkPVwiTTEwLjUsNy41QzkuOSw3LjEsOS4zLDYuOCw4LjYsNi43Yy0wLjIsMC0wLjUtMC4xLTAuNywwYy0wLjIsMC0wLjUsMC0wLjcsMEM2LjYsNi43LDYuMSw2LjksNS42LDcuM0M1LjIsNy42LDQuNyw4LDQuNCw4LjRDNC4zLDguNiw0LjIsOC44LDQuMiw4LjlDNC4xLDkuMSw0LDkuMywzLjksOS40QzMuOSw5LjYsMy44LDkuNywzLjgsOS45YzAsMC4yLTAuMSwwLjMtMC4xLDAuNXYtMC4xYy0wLjEsMC44LDAuMSwxLjYsMC41LDIuNGMwLjQsMC43LDEsMS4zLDEuNywxLjdjMC4zLDAuMiwwLjYsMC4zLDAuOSwwLjNjMC4zLDAuMSwwLjcsMC4xLDEsMC4xYzAuMywwLDAuNywwLDEtMC4xYzAuMy0wLjEsMC42LTAuMiwwLjktMC4zYzAuNS0wLjMsMC45LTAuNiwxLjMtMWMwLjMtMC40LDAuNi0wLjgsMC44LTEuM2MwLjEtMC40LDAuMi0wLjksMC4yLTEuNGMwLTAuNS0wLjEtMS0wLjMtMS40QzExLjUsOC42LDExLjEsOCwxMC41LDcuNXogTTEwLjEsMTEuM0g4LjV2MS42SDhINy45SDcuM3Ywdi0wLjF2LTEuNEg1Ljd2LTAuNHYtMC4ydi0wLjZoMGgxLjVWOC41aDEuMnYxLjZoMS42VjExLjN6XCIvPjwvZz48L3N2Zz4nLFxyXG4gICBpbnNlcnRfcm93X2Fib3ZlOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS44IDE1LjhcIj48Zz48cGF0aCBkPVwiTTAuMSwxNC41YzAuMSwwLjEsMC4xLDAuMiwwLjIsMC4ybDAuMSwwLjFoMTQuOWwwLjEtMC4xYzAsMCwwLjEtMC4xLDAuMS0wLjFjMCwwLDAuMS0wLjEsMC4xLTAuMWwwLjEtMC4xVjYuN2wtMC4xLTAuMWMwLTAuMS0wLjEtMC4xLTAuMi0wLjJsLTAuMS0wLjFoLTIuM3YwLjFsLTAuMSwwLjVsLTAuMiwwLjRsLTAuMSwwLjJjMC4xLDAsMC4yLDAsMC4zLDBoMS42djZIMS4zdi02aDEuNmMwLjEsMCwwLjIsMCwwLjMsMEwzLjEsNy4zTDIuOSw2LjlDMi44LDYuOCwyLjgsNi42LDIuNyw2LjVWNi4zSDAuNEwwLjMsNi40Yy0wLjEsMC0wLjEsMC4xLTAuMiwwLjJMMCw2Ljd2Ny43TDAuMSwxNC41elwiLz48cGF0aCBkPVwiTTUuMyw4LjNjMC42LDAuNSwxLjIsMC44LDEuOSwwLjljMC4yLDAsMC41LDAuMSwwLjcsMGMwLjIsMCwwLjUsMCwwLjcsMGMwLjYtMC4xLDEuMS0wLjMsMS42LTAuNmMwLjUtMC4zLDAuOS0wLjcsMS4yLTEuMmMwLjEtMC4yLDAuMi0wLjMsMC4zLTAuNWMwLjEtMC4yLDAuMi0wLjQsMC4yLTAuNWMwLjEtMC4xLDAuMS0wLjMsMC4xLTAuNEMxMiw1LjgsMTIsNS42LDEyLDUuNHYwLjFjMC4xLTAuOC0wLjEtMS42LTAuNS0yLjRjLTAuNC0wLjctMS0xLjMtMS43LTEuN0M5LjUsMS4zLDkuMiwxLjIsOC45LDEuMUM4LjUsMSw4LjIsMSw3LjksMWMtMC4zLDAtMC43LDAtMSwwLjFDNi42LDEuMiw2LjMsMS4zLDYsMS40QzUuNSwxLjcsNS4xLDIsNC43LDIuNEM0LjQsMi44LDQuMSwzLjMsMy45LDMuOEMzLjgsNC4yLDMuNyw0LjcsMy43LDUuMmMwLDAuNSwwLjEsMSwwLjMsMS40QzQuMyw3LjIsNC43LDcuOCw1LjMsOC4zeiBNNS43LDQuNWgxLjZWMi45aDAuNWgwLjFoMC42djB2MC4xdjEuNEgxMHYwLjR2MC4ydjAuNmgwSDguNXYxLjZINy4zVjUuN0g1LjdWNC41elwiLz48L2c+PC9zdmc+JyxcclxuICAgaW5zZXJ0X2NvbHVtbl9sZWZ0OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS44IDE1LjhcIj48Zz48cGF0aCBkPVwiTTE0LjUsMTUuN2MwLjEtMC4xLDAuMi0wLjEsMC4yLTAuMmwwLjEtMC4xVjAuNGwtMC4xLTAuMWMwLDAtMC4xLTAuMS0wLjEtMC4xYzAsMC0wLjEtMC4xLTAuMS0wLjFMMTQuNCwwSDYuN0w2LjYsMC4xYy0wLjEsMC0wLjEsMC4xLTAuMiwwLjJMNi4zLDAuNHYyLjNoMC4xbDAuNSwwLjFMNy4zLDNsMC4yLDAuMWMwLTAuMSwwLTAuMiwwLTAuM1YxLjJoNnYxMy4zaC02di0xLjZjMC0wLjEsMC0wLjIsMC0wLjNsLTAuMiwwLjFsLTAuNCwwLjJDNi43LDEyLjksNi42LDEzLDYuNCwxM0g2LjN2Mi4zbDAuMSwwLjJjMCwwLjEsMC4xLDAuMSwwLjIsMC4ybDAuMSwwLjFoNy43TDE0LjUsMTUuN3pcIi8+PHBhdGggZD1cIk04LjMsMTAuNUM4LjcsMTAsOSw5LjMsOS4xLDguNmMwLTAuMiwwLjEtMC41LDAtMC43YzAtMC4yLDAtMC41LDAtMC43QzksNi43LDguOCw2LjEsOC41LDUuN0M4LjIsNS4yLDcuOCw0LjgsNy4zLDQuNUM3LjIsNC40LDcsNC4zLDYuOSw0LjJDNi43LDQuMSw2LjUsNCw2LjQsNEM2LjIsMy45LDYuMSwzLjksNS45LDMuOGMtMC4yLDAtMC4zLTAuMS0wLjUtMC4xaDAuMUM0LjcsMy43LDMuOCwzLjksMy4xLDQuM0MyLjQsNC43LDEuOCw1LjMsMS40LDZDMS4zLDYuMywxLjIsNi42LDEuMSw2LjlDMSw3LjIsMSw3LjYsMSw3LjljMCwwLjMsMCwwLjcsMC4xLDFjMC4xLDAuMywwLjIsMC42LDAuMywwLjljMC4zLDAuNSwwLjYsMC45LDEsMS4zYzAuNCwwLjMsMC44LDAuNiwxLjMsMC44QzQuMiwxMiw0LjcsMTIuMSw1LjEsMTJjMC41LDAsMS0wLjEsMS40LTAuM0M3LjIsMTEuNSw3LjgsMTEuMSw4LjMsMTAuNXpNNC41LDEwLjFWOC41SDIuOVY4VjcuOVY3LjNoMEgzaDEuNFY1LjdoMC40aDAuMmgwLjZ2MHYxLjVoMS42djEuMkg1Ljd2MS42SDQuNXpcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIGluc2VydF9jb2x1bW5fcmlnaHQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjggMTUuOFwiPjxnPjxwYXRoIGQ9XCJNMS4zLDAuMUMxLjIsMC4yLDEuMSwwLjIsMS4xLDAuM0wxLDAuNHYxNC45bDAuMSwwLjFjMCwwLDAuMSwwLjEsMC4xLDAuMWMwLDAsMC4xLDAuMSwwLjEsMC4xbDAuMSwwLjFoNy43bDAuMS0wLjFjMC4xLDAsMC4xLTAuMSwwLjItMC4ybDAuMS0wLjF2LTIuM0g5LjNsLTAuNS0wLjFsLTAuNC0wLjJsLTAuMi0wLjFjMCwwLjEsMCwwLjIsMCwwLjN2MS42aC02VjEuM2g2djEuNmMwLDAuMSwwLDAuMiwwLDAuM2wwLjItMC4xbDAuNC0wLjJDOSwyLjksOS4yLDIuOCw5LjMsMi44aDAuMVYwLjVMOS40LDAuM2MwLTAuMS0wLjEtMC4xLTAuMi0wLjJMOS4xLDBIMS40TDEuMywwLjF6XCIvPjxwYXRoIGQ9XCJNNy41LDUuM0M3LDUuOCw2LjcsNi41LDYuNiw3LjJjMCwwLjItMC4xLDAuNSwwLDAuN2MwLDAuMiwwLDAuNSwwLDAuN2MwLjEsMC42LDAuMywxLjEsMC42LDEuNmMwLjMsMC41LDAuNywwLjksMS4yLDEuMmMwLjIsMC4xLDAuMywwLjIsMC41LDAuM2MwLjIsMC4xLDAuNCwwLjIsMC41LDAuMmMwLjEsMC4xLDAuMywwLjEsMC40LDAuMWMwLjIsMCwwLjMsMC4xLDAuNSwwLjFoLTAuMWMwLjgsMC4xLDEuNi0wLjEsMi40LTAuNWMwLjctMC40LDEuMy0xLDEuNy0xLjdjMC4yLTAuMywwLjMtMC42LDAuMy0wLjljMC4xLTAuMywwLjEtMC43LDAuMS0xYzAtMC4zLDAtMC43LTAuMS0xYy0wLjEtMC4zLTAuMi0wLjYtMC4zLTAuOWMtMC4zLTAuNS0wLjYtMC45LTEtMS4zQzEzLDQuNCwxMi41LDQuMiwxMiw0Yy0wLjQtMC4xLTAuOS0wLjItMS40LTAuMmMtMC41LDAtMSwwLjEtMS40LDAuMkM4LjUsNC4zLDcuOSw0LjcsNy41LDUuM3ogTTExLjMsNS43djEuNmgxLjZ2MC41djAuMXYwLjZoMGgtMC4xaC0xLjR2MS42aC0wLjRoLTAuMmgtMC42djBWOC41SDguNVY3LjNoMS42VjUuN0gxMS4zelwiLz48L2c+PC9zdmc+JyxcclxuICAgZGVsZXRlX3JvdzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzUgMTMuODNcIj48Zz48cGF0aCBkPVwiTTQuNywxOC40NmwuMTIuMDhIMTkuNzNsLjEyLS4wOGEuNTguNTgsMCwwLDAsLjIyLS4yMmwuMDgtLjEyLDAtNy42OS0uMDgtLjExYS43Ny43NywwLDAsMC0uMTgtLjE4bC0uMTEtLjA4LTIuMzEsMC0uMDguMjgtLjEuMjlhMS41OCwxLjU4LDAsMCwxLS4xMi4yOWwtLjE0LjM0czAsMCwuMTgsMEgxOC45djZINS42NHYtNkg3LjM1Yy4xNCwwLC4yLDAsLjE4LDBsLS4xNC0uMzRhMi44NSwyLjg1LDAsMCwxLS4xMi0uMjlsLS4xLS4yOS0uMDctLjI3LTIuMzEsMC0uMTEuMDhhLjc3Ljc3LDAsMCwwLS4xOC4xOGwtLjA4LjExLDAsNy42OS4wOC4xMmEuNDcuNDcsMCwwLDAsLjA5LjEybC4xMy4wOVpNMTIuMTEsMTNhNCw0LDAsMCwwLDEuNDYtLjIxLDQuNTEsNC41MSwwLDAsMCwxLjMxLS43MUE0LDQsMCwwLDAsMTYuMjYsMTBhNC4zMiw0LjMyLDAsMCwwLS4wOC0yLjU0LDQuMzQsNC4zNCwwLDAsMC0xLTEuNTIsNC4xNSw0LjE1LDAsMCwwLTEuNTQtMSw0LjM0LDQuMzQsMCwwLDAtMS4zNS0uMjJBNC4wNyw0LjA3LDAsMCwwLDExLDQuOTMsMy45NCwzLjk0LDAsMCwwLDkuMjQsNi4wNywzLjkyLDMuOTIsMCwwLDAsOC4xNSw4Ljg4YTMuOTEsMy45MSwwLDAsMCwuMTIuOTVBNC4xNiw0LjE2LDAsMCwwLDEyLjExLDEzWm0yLjM1LTQuMTR2LjU4SDEwLjA5VjguMjdoNC4zN3YuNThaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQgLTQuNzEpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBkZWxldGVfY29sdW1uOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxMy44MSAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNNS42NiwxOS40MmwuMTIuMDgsNy42OSwwLC4xMS0uMDhhLjc3Ljc3LDAsMCwwLC4xOC0uMThsLjA4LS4xMSwwLTIuMzItLjE1LDAtLjQ1LS4xNS0uNDItLjE4LS4xNy0uMDdhMSwxLDAsMCwwLDAsLjI3djEuNjNoLTZWNWg2VjYuNjJhLjkuOSwwLDAsMCwwLC4yNmwuMTctLjA3LjQyLS4xN2EzLjkxLDMuOTEsMCwwLDEsLjQ1LS4xNWwuMTUsMCwwLTIuMzJMMTMuNzUsNGEuNzcuNzcsMCwwLDAtLjE4LS4xOGwtLjExLS4wOEg1Ljc5bC0uMTMuMDdhLjYzLjYzLDAsMCwwLS4yMS4yMmwtLjA4LjEyVjE5LjA4bC4wOC4xMmEuNDcuNDcsMCwwLDAsLjA5LjEyLjM1LjM1LDAsMCwwLC4xMi4xWm05LTMuNjdhNC4xNiw0LjE2LDAsMCwwLDIuMzYtLjUxLDQuMDgsNC4wOCwwLDAsMCwxLjY3LTEuNzIsNCw0LDAsMCwwLC4zNS0uOTEsMy43OSwzLjc5LDAsMCwwLC4xLTEsNC43MSw0LjcxLDAsMCwwLS4xMS0xLDUsNSwwLDAsMC0uMy0uODcsNC4yNSw0LjI1LDAsMCwwLTEtMS4yNSw0LjQ5LDQuNDksMCwwLDAtMS4zNC0uODFBNC4yNiw0LjI2LDAsMCwwLDE1LDcuNDhhMy44OCwzLjg4LDAsMCwwLTEuNDEuMjVBNC4zMiw0LjMyLDAsMCwwLDExLjg2LDksNCw0LDAsMCwwLDExLDEwLjk0YTQuNCw0LjQsMCwwLDAtLjA1LjY4LDQuNSw0LjUsMCwwLDAsLjA1LjY4LDMuOTMsMy45MywwLDAsMCwuNjEsMS41Nyw0LjIyLDQuMjIsMCwwLDAsMS4xOCwxLjIsNC41OSw0LjU5LDAsMCwwLC40OC4yN2MuMi4xLjM3LjE3LjUuMjJhMi40NCwyLjQ0LDAsMCwwLC40NS4xMiw0LjYxLDQuNjEsMCwwLDAsLjUuMDdabTIuNTQtNC4xMnYuNThIMTIuODdWMTFoNC4zN3YuNTlaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC01LjM3IC0zLjc2KVwiLz48L2c+PC9zdmc+JyxcclxuICAgZml4ZWRfY29sdW1uX3dpZHRoOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGQ9XCJNNiw1SDE4QTEsMSAwIDAsMSAxOSw2QTEsMSAwIDAsMSAxOCw3SDZBMSwxIDAgMCwxIDUsNkExLDEgMCAwLDEgNiw1TTIxLDJWNEgzVjJIMjFNMTUsOEgxN1YyMkgxNVY4TTcsOEg5VjIySDdWOE0xMSw4SDEzVjIySDExVjhaXCIgLz48L3N2Zz4nLFxyXG4gICByb3RhdGVfbGVmdDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuOCAxNS44XCI+PGc+PHBhdGggZD1cIk0wLjUsMTAuMmMwLDAuMSwwLDAuMiwwLDAuM3YwLjJsMCwwYzAuMSwwLjMsMC4zLDAuNiwwLjQsMC45bDAsMEMxLDExLjgsMS4zLDEyLDEuNSwxMS45aDAuMWgwLjJoMC4xYzAuMS0wLjEsMC4zLTAuMywwLjQtMC41di0wLjJjMC0wLjEsMC0wLjItMC4xLTAuM2wwLDBjLTAuMi0wLjItMC4zLTAuNC0wLjMtMC43bDAsMEMxLjgsMTAsMS43LDkuOSwxLjUsOS44Yy0wLjEsMC0wLjIsMC0wLjMsMEgwLjlDMC43LDkuOSwwLjYsMTAsMC41LDEwLjJMMC41LDEwLjJ6XCIvPjxwYXRoIGQ9XCJNMi4yLDExLjVMMi4yLDExLjVMMi4yLDExLjV6XCIvPjxwYXRoIGQ9XCJNNS45LDMuNkw1LjksMy42TDUuOSwzLjZ6XCIvPjxwYXRoIGQ9XCJNMC4xLDcuOWMwLDAuMywwLDAuNiwwLDAuOWwwLDBsMCwwbDAsMGwwLDBjMCwwLjIsMC4xLDAuMywwLjIsMC40bDAsMGMwLjIsMC4xLDAuMywwLjIsMC41LDAuMmwwLDBsMCwwYzAuMiwwLDAuNC0wLjEsMC41LTAuM2wwLDBjMC0wLjEsMC4xLTAuMywwLjEtMC40VjguNmwwLDBjMC0wLjIsMC0wLjUsMC0wLjdsMCwwYzAtMC4yLTAuMS0wLjQtMC4yLTAuNUMxLjEsNy4zLDAuOSw3LjIsMC43LDcuMlMwLjMsNy4zLDAuMiw3LjRDMC4xLDcuNSwwLDcuNywwLjEsNy45elwiLz48cGF0aCBkPVwiTTEuOSwxMi43TDEuOSwxMi43YzAsMC4yLDAsMC40LDAuMiwwLjVsMCwwbDAuMiwwLjNsMCwwYzAuMiwwLjEsMC4zLDAuMiwwLjUsMC40bDAsMGwwLDBsMCwwbDAsMEMyLjksMTQsMywxNC4xLDMuMiwxNC4xczAuNC0wLjEsMC41LTAuMmMwLjEtMC4yLDAuMi0wLjMsMC4yLTAuNXYtMC4xYzAtMC4yLTAuMS0wLjQtMC4yLTAuNWwwLDBsLTAuNC0wLjRsLTAuMi0wLjJsMCwwQzMsMTIuMSwyLjgsMTIsMi42LDEybDAsMGMtMC4yLDAtMC40LDAuMS0wLjUsMC4ybDAsMEMyLDEyLjMsMS45LDEyLjUsMS45LDEyLjd6XCIvPjxwYXRoIGQ9XCJNNi42LDE1YzAsMC4yLDAuMSwwLjQsMC4yLDAuNWMwLjEsMC4xLDAuMiwwLjIsMC40LDAuM2wwLDBjMC4zLDAsMC41LDAsMC43LDBoMC4zbDAsMGMwLjIsMCwwLjQtMC4xLDAuNS0wLjJjMC4xLTAuMiwwLjItMC4zLDAuMi0wLjVsMCwwbDAsMGMwLTAuMi0wLjEtMC40LTAuMi0wLjVsMCwwYy0wLjEtMC4xLTAuMy0wLjItMC41LTAuMmwwLDBINy45Yy0wLjEsMC0wLjMsMC0wLjUsMGwwLDBINy4zYy0wLjItMC4xLTAuMywwLTAuNSwwLjFsMCwwQzYuNywxNC42LDYuNiwxNC44LDYuNiwxNUw2LjYsMTVMNi42LDE1TDYuNiwxNXpcIi8+PHBhdGggZD1cIk00LjIsNy40QzQsNy41LDQsNy43LDQsNy45YzAsMC4yLDAsMC40LDAuMiwwLjVsMCwwbDMuMiwzLjJsMCwwYzAuMSwwLjEsMC4zLDAuMiwwLjUsMC4yczAuMy0wLjEsMC41LTAuMmwwLDBsMy4yLTMuMmwwLDBjMC4xLTAuMSwwLjItMC4zLDAuMi0wLjVjMC0wLjItMC4xLTAuNC0wLjItMC41bDAsMEMxMS41LDcuMywxMSw2LjcsMTAsNS44bDAsMEw4LjQsNC4ybDAsMEM4LjMsNC4xLDguMSw0LDcuOSw0UzcuNSw0LjEsNy40LDQuMkw0LjIsNy40TDQuMiw3LjR6IE02LjgsOUw1LjcsNy45bDIuMi0yLjJsMi4zLDIuMmwtMi4zLDIuMkM3LjcsOS45LDcuMyw5LjUsNi44LDlMNi44LDl6XCIvPjxwYXRoIGQ9XCJNNC4xLDE0LjFDNCwxNC4yLDQsMTQuMyw0LDE0LjR2MC4ybDAsMGMwLjEsMC4xLDAuMiwwLjMsMC40LDAuNGwwLDBjMC4zLDAuMSwwLjYsMC4yLDAuOSwwLjRoMC4xaDAuMWwwLDBjMC4yLDAsMC4zLTAuMSwwLjUtMC4xbDAsMGMwLjItMC4xLDAuMy0wLjMsMC4zLTAuNGwwLDBsMCwwbDAsMGwwLDB2LTAuMmMwLTAuMS0wLjEtMC4yLTAuMS0wLjNsMCwwQzYuMSwxNC4yLDYsMTQuMSw1LjgsMTRsMCwwYy0wLjMtMC4xLTAuNS0wLjItMC44LTAuMmwwLDBjLTAuMS0wLjEtMC4yLTAuMS0wLjMtMC4xSDQuNUM0LjMsMTMuNyw0LjIsMTMuOSw0LjEsMTQuMXpcIi8+PHBhdGggZD1cIk05LjMsMTQuNGMwLDAuMS0wLjEsMC4zLDAsMC40VjE1bDAsMGMwLDAuMSwwLjEsMC4zLDAuNSwwLjRjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFsMCwwaDAuMWwwLDBjMC4zLTAuMSwwLjYtMC4yLDAuOS0wLjNsMCwwYzAuMS0wLjEsMC4yLTAuMiwwLjMtMC40bDAuMS0wLjNjMC0wLjEtMC4xLTAuMi0wLjEtMC4zbDAsMGMtMC4xLTAuMi0wLjItMC4zLTAuNC0wLjRsMCwwaC0wLjNjLTAuMSwwLTAuMiwwLTAuMywwbDAsMGMtMC4yLDAuMS0wLjUsMC4yLTAuOCwwLjNsMCwwQzkuNSwxNC4xLDkuNCwxNC4yLDkuMywxNC40TDkuMywxNC40elwiLz48cGF0aCBkPVwiTTExLjQsMTQuN0wxMS40LDE0LjdMMTEuNCwxNC43elwiLz48cGF0aCBkPVwiTTkuNSwxNS4zTDkuNSwxNS4zTDkuNSwxNS4zelwiLz48cGF0aCBkPVwiTTE1LjksNy45YzAtMS0wLjItMi0wLjYtM2wwLDBjLTAuNC0xLTEtMS45LTEuNy0yLjZDMTIuOCwxLjYsMTIsMSwxMSwwLjZsMCwwQzEwLjEsMC4yLDksMCw4LDBDNy4zLDAsNi41LDAuMSw1LjgsMC4zbDAsMEM1LjIsMC41LDQuNiwwLjgsNCwxLjFMMy4xLDAuMmwwLDBDMi45LDAuMSwyLjgsMCwyLjYsMEgyLjRsMCwwQzIuMiwwLDIsMC4yLDEuOSwwLjRsMCwwTDAuMSw0LjlsMCwwQzAsNSwwLDUuMSwwLDUuMmMwLDAuMiwwLjEsMC40LDAuMiwwLjVsMCwwYzAuMiwwLjEsMC4zLDAuMiwwLjUsMC4yaDAuMUgxbDAsMGw0LjctMS44bDAsMEM1LjksNCw2LjEsMy44LDYuMSwzLjZWMy40QzYuMSwzLjIsNiwzLDUuOSwyLjlsMCwwTDUuMSwyLjFjMC40LTAuMiwwLjgtMC40LDEuMy0wLjVjMC41LTAuMSwxLjEtMC4yLDEuNy0wLjJjMC45LDAsMS43LDAuMiwyLjUsMC41bDAsMGMwLjgsMC4zLDEuNSwwLjgsMi4xLDEuNGMwLjYsMC42LDEuMSwxLjMsMS40LDIuMWwwLDBjMC4zLDAuOCwwLjUsMS42LDAuNSwyLjVzLTAuMiwxLjctMC41LDIuNWwwLDBjLTAuMywwLjgtMC44LDEuNS0xLjQsMi4xYy0wLjIsMC4yLTAuNCwwLjMtMC42LDAuNWwwLDBjLTAuMiwwLjEtMC4zLDAuMy0wLjMsMC41djAuMWMwLDAuMSwwLDAuMywwLjEsMC40bDAsMGMwLjEsMC4yLDAuMywwLjMsMC41LDAuM2wwLDBjMC4xLDAsMC4zLTAuMSwwLjQtMC4ybDAsMGwwLDBsMCwwbDAsMGMwLjItMC4yLDAuNS0wLjQsMC43LTAuNmwwLDBsMCwwbDAsMGwwLDBjMC43LTAuOCwxLjMtMS42LDEuNy0yLjZDMTUuNiwxMCwxNS44LDksMTUuOSw3Ljl6IE0xLjksNEMyLDMuOCwyLjEsMy41LDIuMywzLjFsMCwwTDIuNywybDEuMiwxLjJMMS45LDR6XCIvPjxwYXRoIGQ9XCJNNi44LDE1LjVMNi44LDE1LjVMNi44LDE1LjV6XCIvPjwvZz48L3N2Zz4nLFxyXG4gICByb3RhdGVfcmlnaHQ6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1LjggMTUuOFwiPjxnPjxwYXRoIGQ9XCJNOS45LDE1LjNMOS45LDE1LjNMOS45LDE1LjN6XCIvPjxwYXRoIGQ9XCJNNi45LDE1LjFMNi45LDE1LjFjMCwwLjEsMC4xLDAuMywwLjIsMC40bDAsMGMwLjEsMC4yLDAuMywwLjMsMC41LDAuM2wwLDBoMC4zYzAuMiwwLDAuNCwwLDAuNywwbDAsMGMwLjItMC4xLDAuMy0wLjIsMC40LTAuM2MwLjEtMC4xLDAuMi0wLjIsMC4yLTAuNFYxNWMwLTAuMi0wLjEtMC40LTAuMi0wLjRjLTAuMi0wLjEtMC4zLTAuMi0wLjUtMC4ySDguNGwwLDBjLTAuMSwwLTAuMywwLTAuNSwwSDcuNmwwLDBjLTAuMiwwLTAuNCwwLjEtMC41LDAuMkM3LDE0LjcsNi45LDE0LjksNi45LDE1LjF6XCIvPjxwYXRoIGQ9XCJNNi41LDE0LjRMNi41LDE0LjRMNi41LDE0LjR6XCIvPjxwYXRoIGQ9XCJNNS44LDUuOEw1LjgsNS44Yy0xLDAuOS0xLjUsMS41LTEuNywxLjZsMCwwQzQsNy41LDQsNy43LDQsNy45YzAsMC4yLDAsMC40LDAuMiwwLjVsMCwwbDMuMiwzLjJsMCwwYzAuMiwwLjEsMC4zLDAuMiwwLjUsMC4yczAuNC0wLjEsMC41LTAuMmwwLDBsMy4yLTMuMmwwLDBjMC4xLTAuMSwwLjItMC4zLDAuMi0wLjVjMC0wLjItMC4xLTAuNC0wLjItMC41bDAsMEw4LjQsNC4yQzguMyw0LjEsOC4xLDQsNy45LDRDNy43LDQsNy41LDQuMSw3LjQsNC4ybDAsMEw1LjgsNS44eiBNNS42LDcuOWwyLjMtMi4ybDIuMiwyLjJMOSw5bDAsMGwwLDBsMCwwbDAsMGMtMC41LDAuNi0wLjksMC45LTEuMSwxLjFMNS42LDcuOXpcIi8+PHBhdGggZD1cIk05LDE1LjVMOSwxNS41TDksMTUuNXpcIi8+PHBhdGggZD1cIk05LjYsMTQuN3YwLjJsMCwwbDAsMGwwLDBsMCwwYzAuMSwwLjIsMC4xLDAuMywwLjMsMC4zYzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xbDAsMGgwLjFoMC4xYzAuMy0wLjEsMC42LTAuMywwLjktMC40bDAsMGMwLjEtMC4xLDAuMi0wLjIsMC4zLTAuNGwwLDB2LTAuMmMwLTAuMSwwLTAuMi0wLjEtMC4zYy0wLjEtMC4yLTAuMi0wLjMtMC40LTAuNEgxMWMtMC4xLDAtMC4yLDAuMS0wLjMsMC4xbDAsMGMtMC4yLDAuMS0wLjQsMC4yLTAuNywwLjNsMCwwbDAsMGMtMC4xLDAuMS0wLjMsMC4yLTAuNCwwLjRDOS42LDE0LjUsOS42LDE0LjYsOS42LDE0Ljd6XCIvPjxwYXRoIGQ9XCJNOSwxNC41TDksMTQuNUw5LDE0LjV6XCIvPjxwYXRoIGQ9XCJNOS42LDE0LjRMOS42LDE0LjRMOS42LDE0LjR6XCIvPjxwYXRoIGQ9XCJNMTEuNywxNEwxMS43LDE0TDExLjcsMTR6XCIvPjxwYXRoIGQ9XCJNMTUuNiw3LjRMMTUuNiw3LjRMMTUuNiw3LjR6XCIvPjxwYXRoIGQ9XCJNMTUsOS40YzAuMiwwLDAuNCwwLDAuNi0wLjJsMCwwYzAuMS0wLjEsMC4yLTAuMiwwLjItMC40bDAsMGwwLDBsMCwwbDAsMGMwLTAuMywwLTAuNiwwLTAuOWMwLTAuMi0wLjEtMC40LTAuMi0wLjVjLTAuMS0wLjEtMC4zLTAuMi0wLjUtMC4ycy0wLjQsMC4xLTAuNSwwLjJjLTAuMSwwLjEtMC4yLDAuMy0wLjIsMC41bDAsMGMwLDAuMiwwLDAuNCwwLDAuN2wwLDB2MC4xYzAsMC4xLDAsMC4zLDAuMSwwLjRsMCwwQzE0LjYsOS4zLDE0LjgsOS40LDE1LDkuNEwxNSw5LjRMMTUsOS40elwiLz48cGF0aCBkPVwiTTE0LDEyaDAuMWgwLjJoMC4xYzAuMiwwLDAuNS0wLjIsMC42LTAuNGwwLDBjMC4yLTAuMywwLjMtMC42LDAuNC0wLjlsMCwwdi0wLjJjMC0wLjEtMC4xLTAuMi0wLjEtMC4zYy0wLjEtMC4yLTAuMi0wLjMtMC40LTAuNGgtMC4zYy0wLjEsMC0wLjIsMC0wLjMsMEMxNC4yLDkuOSwxNCwxMCwxNCwxMC4zbDAsMGMtMC4xLDAuMi0wLjIsMC41LTAuMywwLjdsMCwwYy0wLjEsMC4xLTAuMSwwLjItMC4xLDAuM3YwLjJsMCwwbDAsMEMxMy42LDExLjYsMTMuOCwxMS44LDE0LDEyelwiLz48cGF0aCBkPVwiTTE0LjYsNy40TDE0LjYsNy40TDE0LjYsNy40elwiLz48cGF0aCBkPVwiTTQuNCwxNC4yYy0wLjEsMC4xLTAuMSwwLjItMC4xLDAuM2wwLjEsMC4yYzAsMC4yLDAuMiwwLjMsMC4zLDAuNGwwLDBjMC4zLDAuMSwwLjYsMC4zLDEuMSwwLjRsMCwwaDAuMWwwLDBjMC4xLDAsMC4yLTAuMSwwLjQtMC4yYzAuMSwwLDAuMi0wLjIsMC4zLTAuM2wwLDB2LTAuMmMwLTAuMS0wLjEtMC4zLTAuMi0wLjRjLTAuMS0wLjEtMC4yLTAuMi0wLjQtMC4zbDAsMGMtMC4yLTAuMS0wLjUtMC4yLTAuNy0wLjNsMCwwYy0wLjEsMC0wLjIsMC0wLjMsMEg0LjdsMCwwQzQuNiwxMy45LDQuNCwxNCw0LjQsMTQuMkw0LjQsMTQuMnpcIi8+PHBhdGggZD1cIk0xMS45LDEzLjNjMCwwLjIsMC4xLDAuNCwwLjIsMC42YzAuMSwwLjEsMC4zLDAuMiwwLjUsMC4yczAuNC0wLjEsMC41LTAuMmwwLDBsMCwwbDAsMGwwLDBjMC4xLTAuMSwwLjMtMC4zLDAuNC0wLjRsMCwwbDAuMi0wLjNsMCwwYzAuMS0wLjIsMC4yLTAuMywwLjItMC41bDAsMGMwLTAuMi0wLjEtMC40LTAuMi0wLjVsMCwwYy0wLjEtMC4xLTAuMy0wLjItMC41LTAuMmwwLDBjLTAuMiwwLTAuNCwwLjEtMC41LDAuMmwwLDBsLTAuMiwwLjJsLTAuNCwwLjRsMCwwQzEyLDEzLDExLjksMTMuMSwxMS45LDEzLjNMMTEuOSwxMy4zelwiLz48cGF0aCBkPVwiTTEyLjEsMTMuOEwxMi4xLDEzLjhMMTIuMSwxMy44elwiLz48cGF0aCBkPVwiTTExLjksMTMuM0wxMS45LDEzLjNMMTEuOSwxMy4zelwiLz48cGF0aCBkPVwiTTE1LjksNS4yYzAtMC4xLTAuMS0wLjItMC4xLTAuM2wwLDBMMTQsMC40bDAsMEMxMy45LDAuMiwxMy43LDAsMTMuNSwwbDAsMGwwLDBoLTAuMmMtMC4yLDAtMC40LDAuMS0wLjUsMC4ybDAsMGwtMC45LDAuOWMtMC41LTAuMy0xLjEtMC42LTEuOC0wLjhsMCwwQzkuNCwwLjEsOC43LDAsNy45LDBjLTEsMC0yLDAuMi0zLDAuNlMzLDEuNiwyLjMsMi4zQzEuNiwzLjEsMSwzLjksMC42LDQuOWwwLDBDMC4yLDUuOCwwLDYuOCwwLDcuOWMwLDEsMC4yLDIsMC42LDNzMC45LDEuOCwxLjcsMi42bDAsMGwwLDBsMCwwbDAsMGMwLjIsMC4yLDAuNSwwLjQsMC43LDAuNmwwLDBsMCwwbDAsMGwwLDBjMC4yLDAuMSwwLjMsMC4yLDAuNSwwLjJsMCwwYzAuMiwwLDAuNC0wLjEsMC42LTAuM2wwLDBjMC4xLTAuMSwwLjEtMC4zLDAuMS0wLjR2LTAuMWwwLDBDNC4xLDEzLjMsNCwxMy4xLDMuOSwxM2wwLDBjLTAuMi0wLjEtMC40LTAuMy0wLjYtMC41Yy0wLjYtMC42LTEuMS0xLjMtMS40LTIuMWwwLDBDMS42LDkuNiwxLjQsOC44LDEuNCw3LjlzMC4yLTEuNywwLjUtMi41bDAsMGMwLjMtMC44LDAuOC0xLjUsMS40LTIuMWMwLjYtMC42LDEuMy0xLjEsMi4xLTEuNGwwLDBDNi4yLDEuNiw3LDEuNCw3LjksMS40YzAuNiwwLDEuMSwwLjEsMS43LDAuMmMwLjUsMC4xLDAuOSwwLjMsMS4zLDAuNWwtMC44LDAuOGwwLDBDMTAsMy4xLDkuOSwzLjIsOS45LDMuNHYwLjJsMCwwbDAsMGMwLDAuMiwwLjIsMC40LDAuNCwwLjVsMCwwbDQuNSwxLjhsMCwwSDE1aDAuMWMwLjIsMCwwLjQtMC4xLDAuNS0wLjJsMCwwQzE1LjcsNS42LDE1LjgsNS40LDE1LjksNS4yeiBNMTEuOCwzLjJMMTMsMmwwLjQsMS4xbDAsMGMwLjIsMC40LDAuMywwLjcsMC40LDAuOUwxMS44LDMuMnpcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIG1pcnJvcl9ob3Jpem9udGFsOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNC43NSAxNS43NFwiPjxnPjxwYXRoIGQ9XCJNMTMuNzUsMy43Nmw1LjksMTUuNzRoLTUuOVYzLjc2Wk00LjksMTkuNSwxMC44LDMuNzZWMTkuNUg0LjlaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjkgLTMuNzYpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBtaXJyb3JfdmVydGljYWw6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE1Ljc0IDE0Ljc1XCI+PGc+PHBhdGggZD1cIk0yMC4xNSwxMy4xLDQuNDEsMTlWMTMuMUgyMC4xNVpNNC40MSw0LjI1bDE1Ljc0LDUuOUg0LjQxVjQuMjVaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00LjQxIC00LjI1KVwiLz48L2c+PC9zdmc+JyxcclxuICAgY2hlY2tlZDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzUgMTIuMVwiPjxnPjxwYXRoIGQ9XCJNNC41OSwxMi4yM2wuMTIuMThMOS40MywxNy41YS41OC41OCwwLDAsMCwuODQsMEwyMCw3LjQ1aDBhLjU4LjU4LDAsMCwwLDAtLjg0bC0uODUtLjg1YS41OC41OCwwLDAsMC0uODQsMEgxOC4ybC04LjEyLDguNDFhLjI5LjI5LDAsMCwxLS40MiwwbC0zLjQtMy42M2EuNTguNTgsMCwwLDAtLjg0LDBsLS44NS44NWEuNi42LDAsMCwwLS4xNC4yMS41MS41MSwwLDAsMCwwLC40NGMuMDUuMDYuMS4xMy4xNi4xOVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuMzggLTUuNTgpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBsaW5lX2JyZWFrOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGQ9XCJNMTksNmExLDEsMCwwLDAtMSwxdjRhMSwxLDAsMCwxLTEsMUg3LjQxbDEuMy0xLjI5QTEsMSwwLDAsMCw3LjI5LDkuMjlsLTMsM2ExLDEsMCwwLDAtLjIxLjMzLDEsMSwwLDAsMCwwLC43NiwxLDEsMCwwLDAsLjIxLjMzbDMsM2ExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJMNy40MSwxNEgxN2EzLDMsMCwwLDAsMy0zVjdBMSwxLDAsMCwwLDE5LDZaXCIvPjwvc3ZnPicsXHJcbiAgIGF1ZGlvOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGQ9XCJNMTQsMy4yM1Y1LjI5QzE2Ljg5LDYuMTUgMTksOC44MyAxOSwxMkMxOSwxNS4xNyAxNi44OSwxNy44NCAxNCwxOC43VjIwLjc3QzE4LDE5Ljg2IDIxLDE2LjI4IDIxLDEyQzIxLDcuNzIgMTgsNC4xNCAxNCwzLjIzTTE2LjUsMTJDMTYuNSwxMC4yMyAxNS41LDguNzEgMTQsNy45N1YxNkMxNS41LDE1LjI5IDE2LjUsMTMuNzYgMTYuNSwxMk0zLDlWMTVIN0wxMiwyMFY0TDcsOUgzWlwiIC8+PC9zdmc+JyxcclxuICAgaW1hZ2VfZ2FsbGVyeTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIzMCAzMCAxNTAgMTUwXCI+PGc+PHBhdGggZD1cIk0xNTIuNzc1LDEyMC41NDhWNTEuNjUxYzAtMTIuMjcxLTkuOTg0LTIyLjI1NC0yMi4yNTQtMjIuMjU0SDQzLjcyN2MtMTIuMjcxLDAtMjIuMjU0LDkuOTgzLTIyLjI1NCwyMi4yNTR2NjguODk2YzAsMTIuMjcsOS45ODMsMjIuMjU0LDIyLjI1NCwyMi4yNTRoODYuNzk1QzE0Mi43OTEsMTQyLjgwMiwxNTIuNzc1LDEzMi44MTcsMTUyLjc3NSwxMjAuNTQ4eiBNMzYuMzk0LDUxLjY1MWMwLTQuMDQyLDMuMjkxLTcuMzMzLDcuMzMzLTcuMzMzaDg2Ljc5NWM0LjA0MiwwLDcuMzMyLDMuMjkxLDcuMzMyLDcuMzMzdjIzLjkxN2wtMTQuOTM4LTE3Ljc2N2MtMS40MS0xLjY3OC0zLjQ4Ny0yLjY0OS01LjY4LTIuNjU4aC0wLjAyOWMtMi4xODQsMC00LjI1NSwwLjk1NC01LjY3NCwyLjYxM0w3Ni43MDksOTguNTE5bC05LjA5Ni05LjM5OGMtMS40MjctMS40NzQtMy4zOTItMi4yOTEtNS40NDgtMi4yNzNjLTIuMDUyLDAuMDI1LTQuMDA0LDAuODkzLTUuMzk2LDIuNEwzNi4zOTQsMTExLjMyVjUxLjY1MXogTTQxLjY4NCwxMjcuNTg1bDIwLjY5Ny0yMi40MTZsOS4zMTIsOS42MjJjMS40NjEsMS41MTEsMy40ODksMi4zMzQsNS41OTIsMi4yN2MyLjEwMS0wLjA2Niw0LjA3NS0xLjAxMyw1LjQ0LTIuNjEybDM0LjQzNi00MC4zMDhsMjAuNjkzLDI0LjYxM3YyMS43OTRjMCw0LjA0Mi0zLjI5LDcuMzMyLTcuMzMyLDcuMzMySDQzLjcyN0M0My4wMTgsMTI3Ljg4LDQyLjMzNCwxMjcuNzc1LDQxLjY4NCwxMjcuNTg1eiBNMTgyLjYxNiwxNTIuNVY3NS42NTdjMC00LjEyLTMuMzQtNy40Ni03LjQ2MS03LjQ2Yy00LjExOSwwLTcuNDYsMy4zNC03LjQ2LDcuNDZWMTUyLjVjMCw0LjExMi0zLjM0Nyw3LjQ2LTcuNDYxLDcuNDZoLTk0Yy00LjExOSwwLTcuNDYsMy4zMzktNy40Niw3LjQ1OWMwLDQuMTIzLDMuMzQxLDcuNDYyLDcuNDYsNy40NjJoOTRDMTcyLjU3NiwxNzQuODgxLDE4Mi42MTYsMTY0Ljg0MSwxODIuNjE2LDE1Mi41elwiLz48L2c+PC9zdmc+JyxcclxuICAgYm9va21hcms6ICc8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBkPVwiTTE3LDNIN0EyLDIgMCAwLDAgNSw1VjIxTDEyLDE4TDE5LDIxVjVDMTksMy44OSAxOC4xLDMgMTcsM1pcIiAvPjwvc3ZnPicsXHJcbiAgIGRvd25sb2FkOiAnPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZD1cIk0yIDEySDRWMTdIMjBWMTJIMjJWMTdDMjIgMTguMTEgMjEuMTEgMTkgMjAgMTlINEMyLjkgMTkgMiAxOC4xMSAyIDE3VjEyTTEyIDE1TDE3LjU1IDkuNTRMMTYuMTMgOC4xM0wxMyAxMS4yNVYySDExVjExLjI1TDcuODggOC4xM0w2LjQ2IDkuNTVMMTIgMTVaXCIgLz48L3N2Zz4nLFxyXG4gICBkaXJfbHRyOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIGQ9XCJNMCAwaDI0djI0SDBWMHpcIiBmaWxsPVwibm9uZVwiLz48cGF0aCBkPVwiTTkgNHY0Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMm04LTJIOUM2Ljc5IDIgNSAzLjc5IDUgNnMxLjc5IDQgNCA0djVoMlY0aDJ2MTFoMlY0aDJWMnptMCAxMnYzSDV2MmgxMnYzbDQtNC00LTR6XCIvPjwvc3ZnPicsXHJcbiAgIGRpcl9ydGw6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+PHBhdGggZD1cIk0wIDBoMjR2MjRIMFYwelwiIGZpbGw9XCJub25lXCIvPjxwYXRoIGQ9XCJNMTAgNHY0Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMm04LTJoLThDNy43OSAyIDYgMy43OSA2IDZzMS43OSA0IDQgNHY1aDJWNGgydjExaDJWNGgyVjJ6TTggMTRsLTQgNCA0IDR2LTNoMTJ2LTJIOHYtM3pcIi8+PC9zdmc+JyxcclxuICAgLy8gRXJyb3JcclxuICAgYWxlcnRfb3V0bGluZTogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBkPVwiTTExLDE1SDEzVjE3SDExVjE1TTExLDdIMTNWMTNIMTFWN00xMiwyQzYuNDcsMiAyLDYuNSAyLDEyQTEwLDEwIDAgMCwwIDEyLDIyQTEwLDEwIDAgMCwwIDIyLDEyQTEwLDEwIDAgMCwwIDEyLDJNMTIsMjBBOCw4IDAgMCwxIDQsMTJBOCw4IDAgMCwxIDEyLDRBOCw4IDAgMCwxIDIwLDEyQTgsOCAwIDAsMSAxMiwyMFpcIiAvPjwvc3ZnPicsXHJcbiAgIC8vIE1vcmUgaWNvbnNcclxuICAgbW9yZV90ZXh0OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjEwIDEwIDE4MCAxODBcIj48Zz48cGF0aCBkPVwiTTQ5LjcxMSwxNDIuMTg4aDQ5LjAyN2MyLjMyOCwwLjAwMiw0LjM5NCwxLjQ5Miw1LjEyOSwzLjY5OWw5Ljc0MiwyOS4yNTJjMC4zNjMsMS4wOTIsMS4zODUsMS44MjgsMi41MzcsMS44M2wxNS44ODMsMC4wMWMwLjg1OSwwLDEuNjY3LTAuNDEyLDIuMTctMS4xMDlzMC42NDEtMS41OTQsMC4zNy0yLjQxbC0xNi42MjUtNTAuMDQ1TDg2LjUwMywyOC45NTNjLTAuMzYtMS4wOTctMS4zODMtMS44MzktMi41MzctMS44NDJINjQuNTMyYy0xLjE1My0wLjAwMS0yLjE3OCwwLjczNi0yLjU0MiwxLjgzMUwxMy44NDcsMTczLjQ1N2MtMC4yNzEsMC44MTYtMC4xMzUsMS43MTMsMC4zNjksMi40MTJjMC41MDMsMC42OTcsMS4zMTEsMS4xMDksMi4xNzEsMS4xMDloMTUuODcyYzEuMTUxLDAsMi4xNzMtMC43MzYsMi41MzctMS44MjhsOS43OTMtMjkuMjg3QzQ1LjMyNSwxNDMuNjYsNDcuMzksMTQyLjE4LDQ5LjcxMSwxNDIuMTg4TDQ5LjcxMSwxNDIuMTg4eiBNNTMuNDkzLDExOS4wOThsMTUuNjA3LTQ2LjljMC43NDQtMi4xOTYsMi44MDYtMy42NzQsNS4xMjUtMy42NzRzNC4zODEsMS40NzgsNS4xMjUsMy42NzRsMTUuNjA3LDQ2LjkwNGMwLjUzNywxLjYyMSwwLjI2MywzLjQwMi0wLjczNiw0Ljc4OWMtMS4wMTgsMS40MDgtMi42NDksMi4yNC00LjM4NiwyLjI0SDU4LjYxNWMtMS43MzYsMC0zLjM2OC0wLjgzMi00LjM4Ni0yLjI0QzUzLjIzLDEyMi41MDQsNTIuOTU2LDEyMC43MjEsNTMuNDkzLDExOS4wOThMNTMuNDkzLDExOS4wOTh6IE0xOTAuNDY1LDYzLjMyYzAtMi45MTktMS4wMTUtNS4zOTYtMy4wNTktNy40MjhjLTIuMDI5LTIuMDMxLTQuNDk2LTMuMDQ3LTcuMzgzLTMuMDQ3Yy0yLjg4OSwwLTUuMzU1LDEuMDE2LTcuMzg4LDMuMDQ3Yy0yLjAyOSwyLjAzMi0zLjA1Niw0LjQ5OC0zLjA1Niw3LjM4NmMwLDIuODg5LDEuMDI2LDUuMzU0LDMuMDU2LDcuMzg1YzIuMDMyLDIuMDMyLDQuNDk5LDMuMDU5LDcuMzg4LDMuMDU5YzIuODg3LDAsNS4zNTQtMS4wMjYsNy4zODMtMy4wNTlDMTg5LjQ1LDY4LjYzMywxOTAuNDY1LDY2LjE3OCwxOTAuNDY1LDYzLjMyTDE5MC40NjUsNjMuMzJ6IE0xOTAuNDY1LDEwMS45OTRjMC0yLjg1OC0xLjAxNS01LjMxMy0zLjA1OS03LjMzM2MtMi4wMjktMi4wNDItNC40OTYtMy4wNDctNy4zODMtMy4wNDdjLTIuODg5LDAtNS4zNTUsMS4wMDUtNy4zODgsMy4wNDdjLTIuMDI5LDIuMDIxLTMuMDU2LDQuNDg2LTMuMDU2LDcuMzc2YzAsMi44ODcsMS4wMjYsNS4zNTIsMy4wNTYsNy4zOTVjMi4wMzIsMi4wMjEsNC40OTksMy4wNDcsNy4zODgsMy4wNDdjMi44ODcsMCw1LjM1NC0xLjAyNSw3LjM4My0zLjA0N0MxODkuNDUsMTA3LjM4OSwxOTAuNDY1LDEwNC45MTQsMTkwLjQ2NSwxMDEuOTk0TDE5MC40NjUsMTAxLjk5NHogTTE5MC40NjUsMTQwLjc2YzAtMi45MTgtMS4wMTUtNS4zOTUtMy4wNTktNy40MzhjLTIuMDI5LTIuMDQxLTQuNDk2LTMuMDQ3LTcuMzgzLTMuMDQ3Yy0yLjg4OSwwLTUuMzU1LDEuMDA2LTcuMzg4LDMuMDQ3Yy0yLjAyOSwyLjA0My0zLjA1Niw0LjUyLTMuMDU2LDcuNDM4YzAsMi45MjIsMS4wMjYsNS4zOTgsMy4wNTYsNy40MzljMi4wMzIsMi4wMjEsNC40OTksMy4wNDcsNy4zODgsMy4wNDdjMi44ODcsMCw1LjM1NC0xLjAyNSw3LjM4My0zLjA0N0MxODkuNDUsMTQ2LjE1OCwxOTAuNDY1LDE0My42ODIsMTkwLjQ2NSwxNDAuNzZMMTkwLjQ2NSwxNDAuNzZ6XCIvPjwvZz48L3N2Zz4nLFxyXG4gICBtb3JlX3BhcmFncmFwaDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIxMCAxMCAxODAgMTgwXCI+PGc+PHBhdGggZD1cIk0xMjguMzksMjguNDk5SDYzLjQ5M2MtMjUuNTU4LDAtNDYuMzU0LDIwLjc5Ni00Ni4zNTQsNDYuMzU0YzAsMjUuNTU5LDIwLjc5Niw0Ni4zNTMsNDYuMzU0LDQ2LjM1M2g5LjI3MXY1NS42MjVoMTguNTQyVjQ3LjA0aDkuMjcxVjE3Ni44M2gxOC41NDNWNDcuMDRoOS4yNzFWMjguNDk5eiBNNzIuNzY0LDEwMi42NjRoLTkuMjcxYy0xNS4zMzcsMC0yNy44MTMtMTIuNDc1LTI3LjgxMy0yNy44MTJjMC0xNS4zMzYsMTIuNDc2LTI3LjgxMywyNy44MTMtMjcuODEzaDkuMjcxVjEwMi42NjR6IE0xOTAuNDY1LDYzLjMyYzAtMi45MTktMS4wMTUtNS4zOTYtMy4wNTktNy40MjhjLTIuMDI5LTIuMDMxLTQuNDk2LTMuMDQ3LTcuMzgzLTMuMDQ3Yy0yLjg4OSwwLTUuMzU1LDEuMDE2LTcuMzg4LDMuMDQ3Yy0yLjAyOSwyLjAzMi0zLjA1Niw0LjQ5OC0zLjA1Niw3LjM4NmMwLDIuODg5LDEuMDI2LDUuMzU0LDMuMDU2LDcuMzg1YzIuMDMyLDIuMDMyLDQuNDk5LDMuMDU5LDcuMzg4LDMuMDU5YzIuODg3LDAsNS4zNTQtMS4wMjYsNy4zODMtMy4wNTlDMTg5LjQ1LDY4LjYzMywxOTAuNDY1LDY2LjE3OCwxOTAuNDY1LDYzLjMyTDE5MC40NjUsNjMuMzJ6IE0xOTAuNDY1LDEwMS45OTRjMC0yLjg1OC0xLjAxNS01LjMxMy0zLjA1OS03LjMzM2MtMi4wMjktMi4wNDItNC40OTYtMy4wNDctNy4zODMtMy4wNDdjLTIuODg5LDAtNS4zNTUsMS4wMDUtNy4zODgsMy4wNDdjLTIuMDI5LDIuMDIxLTMuMDU2LDQuNDg2LTMuMDU2LDcuMzc2YzAsMi44ODcsMS4wMjYsNS4zNTIsMy4wNTYsNy4zOTVjMi4wMzIsMi4wMjEsNC40OTksMy4wNDcsNy4zODgsMy4wNDdjMi44ODcsMCw1LjM1NC0xLjAyNSw3LjM4My0zLjA0N0MxODkuNDUsMTA3LjM4OSwxOTAuNDY1LDEwNC45MTQsMTkwLjQ2NSwxMDEuOTk0TDE5MC40NjUsMTAxLjk5NHogTTE5MC40NjUsMTQwLjc2YzAtMi45MTgtMS4wMTUtNS4zOTUtMy4wNTktNy40MzhjLTIuMDI5LTIuMDQxLTQuNDk2LTMuMDQ3LTcuMzgzLTMuMDQ3Yy0yLjg4OSwwLTUuMzU1LDEuMDA2LTcuMzg4LDMuMDQ3Yy0yLjAyOSwyLjA0My0zLjA1Niw0LjUyLTMuMDU2LDcuNDM4YzAsMi45MjIsMS4wMjYsNS4zOTgsMy4wNTYsNy40MzljMi4wMzIsMi4wMjEsNC40OTksMy4wNDcsNy4zODgsMy4wNDdjMi44ODcsMCw1LjM1NC0xLjAyNSw3LjM4My0zLjA0N0MxODkuNDUsMTQ2LjE1OCwxOTAuNDY1LDE0My42ODIsMTkwLjQ2NSwxNDAuNzZMMTkwLjQ2NSwxNDAuNzZ6XCIvPjwvZz48L3N2Zz4nLFxyXG4gICBtb3JlX3BsdXM6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMzUgMzAgMTQwIDE0MFwiPjxnPjxwYXRoIGQ9XCJNMTM3LjIxNSwxMDIuMDQ1YzAsMy40OTgtMi44MzUsNi4zMzItNi4zMzMsNi4zMzJIMjQuNTQ5Yy0zLjQ5OCwwLTYuMzM0LTIuODM0LTYuMzM0LTYuMzMybDAsMGMwLTMuNDk4LDIuODM2LTYuMzMzLDYuMzM0LTYuMzMzaDEwNi4zMzNDMTM0LjM4LDk1LjcxMSwxMzcuMjE1LDk4LjU0NywxMzcuMjE1LDEwMi4wNDVMMTM3LjIxNSwxMDIuMDQ1eiBNNzcuNzE1LDE2MS41NDVjLTMuNDk4LDAtNi4zMzMtMi44MzYtNi4zMzMtNi4zMzRWNDguODc4YzAtMy40OTgsMi44MzYtNi4zMzMsNi4zMzMtNi4zMzNsMCwwYzMuNDk4LDAsNi4zMzQsMi44MzUsNi4zMzQsNi4zMzN2MTA2LjMzM0M4NC4wNDksMTU4LjcwOSw4MS4yMTMsMTYxLjU0NSw3Ny43MTUsMTYxLjU0NUw3Ny43MTUsMTYxLjU0NXogTTE5MC40NjUsNjMuMzJjMC0yLjkxOS0xLjAxNS01LjM5Ni0zLjA1OS03LjQyOGMtMi4wMjktMi4wMzEtNC40OTYtMy4wNDctNy4zODMtMy4wNDdjLTIuODg5LDAtNS4zNTUsMS4wMTYtNy4zODgsMy4wNDdjLTIuMDI5LDIuMDMyLTMuMDU2LDQuNDk4LTMuMDU2LDcuMzg2YzAsMi44ODksMS4wMjYsNS4zNTQsMy4wNTYsNy4zODVjMi4wMzIsMi4wMzIsNC40OTksMy4wNTksNy4zODgsMy4wNTljMi44ODcsMCw1LjM1NC0xLjAyNiw3LjM4My0zLjA1OUMxODkuNDUsNjguNjMyLDE5MC40NjUsNjYuMTc3LDE5MC40NjUsNjMuMzJMMTkwLjQ2NSw2My4zMnogTTE5MC40NjUsMTAxLjk5M2MwLTIuODU4LTEuMDE1LTUuMzEzLTMuMDU5LTcuMzMzYy0yLjAyOS0yLjA0Mi00LjQ5Ni0zLjA0Ny03LjM4My0zLjA0N2MtMi44ODksMC01LjM1NSwxLjAwNS03LjM4OCwzLjA0N2MtMi4wMjksMi4wMjEtMy4wNTYsNC40ODYtMy4wNTYsNy4zNzZjMCwyLjg4OCwxLjAyNiw1LjM1MywzLjA1Niw3LjM5NmMyLjAzMiwyLjAyMSw0LjQ5OSwzLjA0Nyw3LjM4OCwzLjA0N2MyLjg4NywwLDUuMzU0LTEuMDI1LDcuMzgzLTMuMDQ3QzE4OS40NSwxMDcuMzg5LDE5MC40NjUsMTA0LjkxNCwxOTAuNDY1LDEwMS45OTNMMTkwLjQ2NSwxMDEuOTkzeiBNMTkwLjQ2NSwxNDAuNzZjMC0yLjkxOC0xLjAxNS01LjM5NS0zLjA1OS03LjQzOGMtMi4wMjktMi4wNDEtNC40OTYtMy4wNDctNy4zODMtMy4wNDdjLTIuODg5LDAtNS4zNTUsMS4wMDYtNy4zODgsMy4wNDdjLTIuMDI5LDIuMDQzLTMuMDU2LDQuNTItMy4wNTYsNy40MzhjMCwyLjkyMiwxLjAyNiw1LjM5OCwzLjA1Niw3LjQzOWMyLjAzMiwyLjAyMSw0LjQ5OSwzLjA0Nyw3LjM4OCwzLjA0N2MyLjg4NywwLDUuMzU0LTEuMDI1LDcuMzgzLTMuMDQ3QzE4OS40NSwxNDYuMTU4LDE5MC40NjUsMTQzLjY4MiwxOTAuNDY1LDE0MC43NkwxOTAuNDY1LDE0MC43NnpcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIG1vcmVfaG9yaXpvbnRhbDogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTUuNzYgMy41OFwiPjxnPjxwYXRoIGQ9XCJNNC42NCwxMC43M2ExLjg0LDEuODQsMCwwLDEsLjY1LS42NSwxLjc2LDEuNzYsMCwwLDEsMS43OSwwQTEuNzksMS43OSwwLDAsMSw4LDExLjYzYTEuODQsMS44NCwwLDAsMS0uMjUuOSwxLjY5LDEuNjksMCwwLDEtLjY1LjY1LDEuOCwxLjgsMCwwLDEtMi42OS0xLjU1QTIuMDgsMi4wOCwwLDAsMSw0LjY0LDEwLjczWm02LjA5LDBhMS44NCwxLjg0LDAsMCwxLC42NS0uNjUsMS43OCwxLjc4LDAsMCwxLDIuNjcsMS41NSwxLjczLDEuNzMsMCwwLDEtLjI0LjksMS44NCwxLjg0LDAsMCwxLS42NS42NSwxLjc2LDEuNzYsMCwwLDEtMS43OSwwLDEuNzksMS43OSwwLDAsMS0uNjQtMi40NFptNi4wOCwwYTEuNjksMS42OSwwLDAsMSwuNjUtLjY1LDEuNzYsMS43NiwwLDAsMSwxLjc5LDAsMS43OSwxLjc5LDAsMCwxLC45LDEuNTQsMS43MywxLjczLDAsMCwxLS4yNC45LDEuODQsMS44NCwwLDAsMS0uNjUuNjUsMS44LDEuOCwwLDAsMS0yLjY5LTEuNTVBMiwyLDAsMCwxLDE2LjgxLDEwLjczWlwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNC4zOSAtOS44NClcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIG1vcmVfdmVydGljYWw6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDMuOTQgMTUuNzVcIj48Zz48cGF0aCBkPVwiTTEyLjI4LDcuNjlhMS45MiwxLjkyLDAsMCwxLTEuMzktLjU4LDIsMiwwLDAsMS0uNTgtMS4zOSwxLjkyLDEuOTIsMCwwLDEsLjU4LTEuMzksMiwyLDAsMCwxLDEuMzktLjU4LDEuOTIsMS45MiwwLDAsMSwxLjM5LjU4LDIsMiwwLDAsMSwuNTgsMS4zOSwxLjkyLDEuOTIsMCwwLDEtLjU4LDEuMzksMiwyLDAsMCwxLTEuMzkuNThabTAsMmExLjkyLDEuOTIsMCwwLDEsMS4zOS41OCwyLDIsMCwwLDEsLjU4LDEuMzlBMS45MiwxLjkyLDAsMCwxLDEzLjY3LDEzYTIsMiwwLDAsMS0xLjM5LjU4QTEuOTIsMS45MiwwLDAsMSwxMC44OSwxM2EyLDIsMCwwLDEtLjU4LTEuMzksMiwyLDAsMCwxLDItMlptMCw1LjlhMS45MiwxLjkyLDAsMCwxLDEuMzkuNTgsMiwyLDAsMCwxLC41OCwxLjM5LDEuOTIsMS45MiwwLDAsMS0uNTgsMS4zOSwyLDIsMCwwLDEtMS4zOS41OCwxLjkyLDEuOTIsMCwwLDEtMS4zOS0uNTgsMiwyLDAsMCwxLS41OC0xLjM5LDEuOTIsMS45MiwwLDAsMSwuNTgtMS4zOSwxLjk0LDEuOTQsMCwwLDEsMS4zOS0uNThaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC0xMC4zMSAtMy43NSlcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIC8vIE5vdCBjdXJyZW50bHkgdXNlZFxyXG4gICBhdHRhY2htZW50OiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA4LjM4IDE1LjY4XCI+PGc+PHBhdGggZD1cIk0xNS4yMyw2aDF2OS43OGEzLjg4LDMuODgsMCwwLDEtMS4zMSwyLjQ1LDQsNCwwLDAsMS02LjU3LTIuNDVWN0EzLDMsMCwwLDEsOS4yLDQuODlhMywzLDAsMCwxLDUsMi4wOXY4LjMxYTEuOTIsMS45MiwwLDAsMS0uNTgsMS4zOSwyLDIsMCwwLDEtMS4zOS41OCwxLjkyLDEuOTIsMCwwLDEtMS4zOS0uNTgsMiwyLDAsMCwxLS41OC0xLjM5VjhoMXY3LjMyYTEsMSwwLDAsMCwuMjkuNjksMSwxLDAsMCwwLC42OS4yOEEuOS45LDAsMCwwLDEzLDE2YTEsMSwwLDAsMCwuMjktLjY5VjdhMS45MiwxLjkyLDAsMCwwLS41OC0xLjM5QTIsMiwwLDAsMCwxMS4yNyw1YTEuOTIsMS45MiwwLDAsMC0xLjM5LjU4QTIsMiwwLDAsMCw5LjMzLDd2OC4zMWEzLDMsMCwxLDAsNS45LDBWNlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTguMDggLTMuNzgpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBtYXA6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDExLjcgMTUuNjJcIj48Zz48cGF0aCBkPVwiTTEyLjA1LDEyLjQyYTIuOTMsMi45MywwLDEsMSwyLjA3LTVBMi44OCwyLjg4LDAsMCwxLDE1LDkuNDlhMywzLDAsMCwxLS44NiwyLjA3LDIuODksMi44OSwwLDAsMS0yLjA3Ljg2Wm0wLTUuMzZhMi40MywyLjQzLDAsMCwwLTEuNzIsNC4xNiwyLjQ4LDIuNDgsMCwwLDAsMS43Mi43MiwyLjQ0LDIuNDQsMCwwLDAsMC00Ljg4Wm0wLTMuM0E1Ljg0LDUuODQsMCwwLDEsMTcuOSw5LjYyYTkuOTQsOS45NCwwLDAsMS0xLjczLDVBMzMuNTksMzMuNTksMCwwLDEsMTIuODQsMTlhMS41MiwxLjUyLDAsMCwxLS4yMy4yLDEsMSwwLDAsMS0uNTUuMmgwYTEsMSwwLDAsMS0uNTUtLjIsMS41MiwxLjUyLDAsMCwxLS4yMy0uMiwzMy41OSwzMy41OSwwLDAsMS0zLjMzLTQuMzIsOS45Myw5LjkzLDAsMCwxLTEuNzItNSw1Ljg0LDUuODQsMCwwLDEsNS44NS01Ljg2Wk0xMiwxOC4zNGwuMDguMDUuMDYtLjA2YTM1LjU4LDM1LjU4LDAsMCwwLDMuMDYtMy45Myw5LjM1LDkuMzUsMCwwLDAsMS43NC00Ljc3LDQuODgsNC44OCwwLDAsMC00Ljg4LTQuODhBNC43OSw0Ljc5LDAsMCwwLDguNiw2LjE3LDQuODQsNC44NCwwLDAsMCw3LjE3LDkuNjIsOS4yOSw5LjI5LDAsMCwwLDguOTEsMTQuNCwzNiwzNiwwLDAsMCwxMiwxOC4zNFpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTYuMiAtMy43NilcIi8+PC9nPjwvc3ZnPicsXHJcbiAgIG1hZ2ljX3N0aWNrOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNS43MyAxNS43NVwiPjxnPjxwYXRoIGQ9XCJNMTkuODYsMTkuMjFhMSwxLDAsMCwwLC4yOC0uNjgsMSwxLDAsMCwwLS4yOC0uN0wxMywxMC45M2ExLDEsMCwwLDAtLjctLjI4LDEsMSwwLDAsMC0uNjgsMS42NWw2LjksNi45YTEsMSwwLDAsMCwuNjkuMjkuOTMuOTMsMCwwLDAsLjY5LS4yOFpNOS4xOSw4LjU1YTMsMywwLDAsMCwxLjY4LDAsMTQuMTIsMTQuMTIsMCwwLDAsMS40MS0uMzJBMTEuMjYsMTEuMjYsMCwwLDAsMTAuOCw3LjA2Yy0uNTYtLjM2LS44Ni0uNTYtLjkxLS41OFMxMCw1LjkxLDEwLDUuMTFzMC0xLjI2LS4xNS0xLjM3YTQuMzUsNC4zNSwwLDAsMC0xLjE5LjcxYy0uNTMuNC0uODEuNjItLjg3LjY4YTksOSwwLDAsMC0yLS42LDYuODQsNi44NCwwLDAsMC0uNzYtLjA5czAsLjI3LjA4Ljc3YTguNiw4LjYsMCwwLDAsLjYxLDJxLS4wOS4wOS0uNjkuODdhMy41OSwzLjU5LDAsMCwwLS42OCwxLjE3Yy4xMi4xNy41Ny4yMywxLjM2LjE1UzcsOS4yNiw3LjE1LDkuMjNzLjIxLjM2LjU3LjkxYTEwLjQ5LDEwLjQ5LDAsMCwwLDEuMTQsMS40OGMwLS4xLjE0LS41Ny4zMS0xLjRhMywzLDAsMCwwLDAtMS42N1pcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQuNDEgLTMuNzQpXCIvPjwvZz48L3N2Zz4nLFxyXG4gICBlbXB0eV9maWxlOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxMi43OCAxNS43NVwiPjxnPjxwYXRoIGQ9XCJNMTQuNzMsMy43NiwxOC42Nyw3Ljd2OS44NGEyLDIsMCwwLDEtMiwySDcuODRhMS44OSwxLjg5LDAsMCwxLTEuMzgtLjU4LDIsMiwwLDAsMS0uNTctMS4zOVY1LjczYTEuOTMsMS45MywwLDAsMSwuNTctMS4zOCwyLDIsMCwwLDEsMS4zOC0uNThoNi42MmwuMjYsMHYwWm0yLjk1LDQuOTJoLTJhMS45MywxLjkzLDAsMCwxLTEuMzgtLjU3LDIsMiwwLDAsMS0uNTgtMS40VjYuMTdjMC0uMzYsMC0uODQsMC0xLjQzSDcuODVhMSwxLDAsMCwwLS43LjI5LDEsMSwwLDAsMC0uMjkuN1YxNy41NGExLDEsMCwwLDAsLjI5LjY5LDEsMSwwLDAsMCwuNjkuMjloOC44NWExLDEsMCwwLDAsLjcxLS4yOS45Mi45MiwwLDAsMCwuMjgtLjY5Wm0wLTFMMTQuNzMsNC43NHYyQTEsMSwwLDAsMCwxNSw3LjRhMSwxLDAsMCwwLC42OS4yOVpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTUuODkgLTMuNzYpXCIvPjwvZz48L3N2Zz4nXHJcbn07XHJcbiIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIHV0aWxpdHkgZnVuY3Rpb25cclxuICovXHJcbmNvbnN0IHV0aWwgPSB7XHJcbiAgICBfZDogbnVsbCxcclxuICAgIF93OiBudWxsLFxyXG4gICAgaXNJRTogbnVsbCxcclxuICAgIGlzSUVfRWRnZTogbnVsbCxcclxuICAgIGlzT1NYX0lPUzogbnVsbCxcclxuICAgIGlzQ2hyb21pdW06IG51bGwsXHJcbiAgICBpc01vYmlsZTogbnVsbCxcclxuICAgIGlzUmVzaXplT2JzZXJ2ZXJTdXBwb3J0ZWQ6IG51bGwsXHJcbiAgICBfcHJvcGVydGllc0luaXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuX2QgPSAgZG9jdW1lbnQ7XHJcbiAgICAgICAgdGhpcy5fdyA9IHdpbmRvdztcclxuICAgICAgICB0aGlzLmlzSUUgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQnKSA+IC0xO1xyXG4gICAgICAgIHRoaXMuaXNJRV9FZGdlID0gKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudCcpID4gLTEpIHx8IChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCdFZGdlJykgPiAtMSk7XHJcbiAgICAgICAgdGhpcy5pc09TWF9JT1MgPSAvKE1hY3xpUGhvbmV8aVBvZHxpUGFkKS8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pO1xyXG4gICAgICAgIHRoaXMuaXNDaHJvbWl1bSA9ICEhd2luZG93LmNocm9tZTtcclxuICAgICAgICB0aGlzLmlzUmVzaXplT2JzZXJ2ZXJTdXBwb3J0ZWQgPSAodHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAnZnVuY3Rpb24nKTtcclxuICAgICAgICB0aGlzLmlzTW9iaWxlID0gL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpIHx8ICgobmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMCB8fCBuYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cyA+IDApICYmICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9hbGxvd2VkRW1wdHlOb2RlTGlzdDogJy5zZS1jb21wb25lbnQsIHByZSwgYmxvY2txdW90ZSwgaHIsIGxpLCB0YWJsZSwgaW1nLCBpZnJhbWUsIHZpZGVvLCBhdWRpbywgY2FudmFzJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBIVE1MIFJlc2VydmVkIFdvcmQgQ29udmVydGVyLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbnRlbnRzIFxyXG4gICAgICogQHJldHVybnMge1N0cmluZ30gSFRNTCBzdHJpbmdcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9IVE1MQ29udmVydG9yOiBmdW5jdGlvbiAoY29udGVudHMpIHtcclxuICAgICAgICBjb25zdCBlYyA9IHsnJic6ICcmYW1wOycsICdcXHUwMEEwJzogJyZuYnNwOycsICdcXCcnOiAnJmFwb3M7JywgJ1wiJzogJyZxdW90OycsICc8JzogJyZsdDsnLCAnPic6ICcmZ3Q7J307XHJcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRzLnJlcGxhY2UoLyZ8XFx1MDBBMHwnfFwifDx8Pi9nLCBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgICAgICByZXR1cm4gKHR5cGVvZiBlY1ttXSA9PT0gJ3N0cmluZycpID8gZWNbbV0gOiBtO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBVbmljb2RlIENoYXJhY3RlciAnWkVSTyBXSURUSCBTUEFDRScgKFxcdTIwMEIpXHJcbiAgICAgKi9cclxuICAgIHplcm9XaWR0aFNwYWNlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKDgyMDMpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaW5kICd6ZXJvIHdpZHRoIHNwYWNlJyAoL1xcdTIwMEIvZylcclxuICAgICAqL1xyXG4gICAgemVyb1dpZHRoUmVnRXhwOiBuZXcgUmVnRXhwKFN0cmluZy5mcm9tQ2hhckNvZGUoODIwMyksICdnJyksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVndWxhciBleHByZXNzaW9uIHRvIGZpbmQgb25seSAnemVybyB3aWR0aCBzcGFjZScgKC9eXFx1MjAwQiskLylcclxuICAgICAqL1xyXG4gICAgb25seVplcm9XaWR0aFJlZ0V4cDogbmV3IFJlZ0V4cCgnXicgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKDgyMDMpICsgJyskJyksXHJcblxyXG4gICAgZm9udFZhbHVlTWFwOiB7XHJcbiAgICAgICAgJ3h4LXNtYWxsJzogMSxcclxuICAgICAgICAneC1zbWFsbCc6IDIsXHJcbiAgICAgICAgJ3NtYWxsJzogMyxcclxuICAgICAgICAnbWVkaXVtJzogNCxcclxuICAgICAgICAnbGFyZ2UnOiA1LFxyXG4gICAgICAgICd4LWxhcmdlJzogNixcclxuICAgICAgICAneHgtbGFyZ2UnOiA3XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEEgbWV0aG9kIHRoYXQgY2hlY2tzIElmIHRoZSB0ZXh0IGlzIGJsYW5rIG9yIHRvIHNlZSBpZiBpdCBjb250YWlucyAnWkVSTyBXSURUSCBTUEFDRScgb3IgZW1wdHkgKHV0aWwuemVyb1dpZHRoU3BhY2UpXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xOb2RlfSB0ZXh0IFN0cmluZyB2YWx1ZSBvciBOb2RlXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgb25seVplcm9XaWR0aFNwYWNlOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgICAgIGlmICh0ZXh0ID09PSBudWxsIHx8IHRleHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycpIHRleHQgPSB0ZXh0LnRleHRDb250ZW50O1xyXG4gICAgICAgIHJldHVybiB0ZXh0ID09PSAnJyB8fCB0aGlzLm9ubHlaZXJvV2lkdGhSZWdFeHAudGVzdCh0ZXh0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyBYTUxIdHRwUmVxdWVzdCBvYmplY3RcclxuICAgICAqIEByZXR1cm5zIHtYTUxIdHRwUmVxdWVzdHxBY3RpdmVYT2JqZWN0fVxyXG4gICAgICovXHJcbiAgICBnZXRYTUxIdHRwUmVxdWVzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8qKiBJRSAqL1xyXG4gICAgICAgIGlmICh0aGlzLl93LkFjdGl2ZVhPYmplY3QpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTXN4bWwyLlhNTEhUVFAnKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qKiBuZXRzY2FwZSAqL1xyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3cuWE1MSHR0cFJlcXVlc3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvKiogZmFpbCAqL1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE9iamVjdC52YWx1ZXNcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bGx9IG9iaiBPYmplY3QgcGFyYW1ldGVyLlxyXG4gICAgICogQHJldHVybnMge0FycmF5fVxyXG4gICAgICovXHJcbiAgICBnZXRWYWx1ZXM6IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gIW9iaiA/IFtdIDogdGhpcy5fdy5PYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoaSkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqW2ldO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0IHRoZSBDYW1lbENhc2UgVG8gdGhlIEtlYmFiQ2FzZS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBwYXJhbSBbQ2FtZWwgc3RyaW5nXVxyXG4gICAgICogQHJldHVybnMge1N0cmluZ3xBcnJheX1cclxuICAgICAqL1xyXG4gICAgY2FtZWxUb0tlYmFiQ2FzZTogZnVuY3Rpb24gKHBhcmFtKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uIChsZXR0ZXIpIHsgcmV0dXJuIFwiLVwiICsgbGV0dGVyLnRvTG93ZXJDYXNlKCk7IH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbS5tYXAoZnVuY3Rpb24oc3RyKSB7IHJldHVybiB1dGlsLmNhbWVsVG9LZWJhYkNhc2Uoc3RyKTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0IHRoZSBLZWJhYkNhc2UgVG8gdGhlIENhbWVsQ2FzZS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBwYXJhbSBbS2ViYWJDYXNlIHN0cmluZ11cclxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd8QXJyYXl9XHJcbiAgICAgKi9cclxuICAgIGtlYmFiVG9DYW1lbENhc2U6IGZ1bmN0aW9uIChwYXJhbSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbS5yZXBsYWNlKC8tW2EtekEtWl0vZywgZnVuY3Rpb24gKGxldHRlcikgeyByZXR1cm4gbGV0dGVyLnJlcGxhY2UoJy0nLCAnJykudG9VcHBlckNhc2UoKTsgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtLm1hcChmdW5jdGlvbihzdHIpIHsgcmV0dXJuIHV0aWwuY2FtZWxUb0tlYmFiQ2FzZShzdHIpOyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSBFbGVtZW50IG5vZGVcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBlbGVtZW50TmFtZSBFbGVtZW50IG5hbWVcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fVxyXG4gICAgICovXHJcbiAgICBjcmVhdGVFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudE5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZC5jcmVhdGVFbGVtZW50KGVsZW1lbnROYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlIHRleHQgbm9kZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgdGV4dCBjb250ZW50c1xyXG4gICAgICogQHJldHVybnMge05vZGV9XHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZVRleHROb2RlOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kLmNyZWF0ZVRleHROb2RlKHRleHQgfHwgJycpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgZWRpdG9yIGNoZWNrcyB0YWdzIGJ5IHN0cmluZy5cclxuICAgICAqIElmIHRoZXJlIGlzIFwiPFwiIG9yIFwiPlwiIGluIHRoZSBhdHRyaWJ1dGUgb2YgdGFnLCBIVE1MIGlzIGJyb2tlbiB3aGVuIGNoZWNraW5nIHRoZSB0YWcuXHJcbiAgICAgKiBXaGVuIHVzaW5nIGFuIGF0dHJpYnV0ZSB3aXRoIFwiPFwiIG9yIFwiPlwiLCB1c2UgXCJIVE1MRW5jb2RlclwiIHRvIHNhdmUuIChleDogbWF0aChrYXRleCkpXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudHMgSFRNTCBvciBUZXh0IHN0cmluZ1xyXG4gICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAqL1xyXG4gICAgSFRNTEVuY29kZXI6IGZ1bmN0aW9uIChjb250ZW50cykge1xyXG4gICAgICAgIGNvbnN0IGVjID0geyc8JzogJyRsdDsnLCAnPic6ICckZ3Q7J307XHJcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRzLnJlcGxhY2UoLzx8Pi9nLCBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgICAgICByZXR1cm4gKHR5cGVvZiBlY1ttXSA9PT0gJ3N0cmluZycpID8gZWNbbV0gOiBtO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgZWRpdG9yIGNoZWNrcyB0YWdzIGJ5IHN0cmluZy5cclxuICAgICAqIElmIHRoZXJlIGlzIFwiPFwiIG9yIFwiPlwiIGluIHRoZSBhdHRyaWJ1dGUgb2YgdGFnLCBIVE1MIGlzIGJyb2tlbiB3aGVuIGNoZWNraW5nIHRoZSB0YWcuXHJcbiAgICAgKiBEZWNvZGVyIG9mIGRhdGEgc3RvcmVkIGFzIFwiSFRNTEVuY29kZXJcIiAoZXg6IG1hdGgoa2F0ZXgpKVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbnRlbnRzIEhUTUwgb3IgVGV4dCBzdHJpbmdcclxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIEhUTUxEZWNvZGVyOiBmdW5jdGlvbiAoY29udGVudHMpIHtcclxuICAgICAgICBjb25zdCBlYyA9IHsnJGx0Oyc6ICc8JywgJyRndDsnOiAnPid9O1xyXG4gICAgICAgIHJldHVybiBjb250ZW50cy5yZXBsYWNlKC9cXCRsdDt8XFwkZ3Q7L2csIGZ1bmN0aW9uIChtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAodHlwZW9mIGVjW21dID09PSAnc3RyaW5nJykgPyBlY1ttXSA6IG07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoaXMgbWV0aG9kIHJ1biBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGtleSBvYmoua2V5XHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaGFzT3duOiBmdW5jdGlvbiAob2JqLCBrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGFzT3duLmNhbGwob2JqLCBrZXkpO1xyXG4gICAgfSxcclxuICAgIF9oYXNPd246IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZFxyXG4gICAgICogQGRlc2NyaXB0aW9uIEdldCB0aGUgdGhlIHRhZyBwYXRoIG9mIHRoZSBhcmd1bWVudHMgdmFsdWVcclxuICAgICAqIElmIG5vdCBmb3VuZCwgcmV0dXJuIHRoZSBmaXJzdCBmb3VuZCB2YWx1ZVxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gbmFtZUFycmF5IEZpbGUgbmFtZSBhcnJheVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGV4dGVuc2lvbiBqcywgY3NzXHJcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBnZXRJbmNsdWRlUGF0aDogZnVuY3Rpb24gKG5hbWVBcnJheSwgZXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgbGV0IHBhdGggPSAnJztcclxuICAgICAgICBjb25zdCBwYXRoTGlzdCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBleHRlbnNpb24gPT09ICdqcycgPyAnc2NyaXB0JyA6ICdsaW5rJztcclxuICAgICAgICBjb25zdCBzcmMgPSBleHRlbnNpb24gPT09ICdqcycgPyAnc3JjJyA6ICdocmVmJztcclxuXHJcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gJyg/Oic7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG5hbWVBcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmaWxlTmFtZSArPSBuYW1lQXJyYXlbaV0gKyAoaSA8IGxlbiAtIDEgPyAnfCcgOiAnKScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVnRXhwID0gbmV3IHRoaXMuX3cuUmVnRXhwKCcoXnwuKltcXFxcL10pJyArIGZpbGVOYW1lICsgJyhcXFxcLlteXFxcXC9dKyk/XFwuJyArIGV4dGVuc2lvbiArICcoPzpcXFxcPy4qfDsuKik/JCcsICdpJyk7XHJcbiAgICAgICAgY29uc3QgZXh0UmVnRXhwID0gbmV3IHRoaXMuX3cuUmVnRXhwKCcuK1xcXFwuJyArIGV4dGVuc2lvbiArICcoPzpcXFxcPy4qfDsuKik/JCcsICdpJyk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGMgPSB0aGlzLl9kLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpLCBpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGV4dFJlZ0V4cC50ZXN0KGNbaV1bc3JjXSkpIHtcclxuICAgICAgICAgICAgICAgIHBhdGhMaXN0LnB1c2goY1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGVkaXRvclRhZyA9IHBhdGhMaXN0W2ldW3NyY10ubWF0Y2gocmVnRXhwKTtcclxuICAgICAgICAgICAgaWYgKGVkaXRvclRhZykge1xyXG4gICAgICAgICAgICAgICAgcGF0aCA9IGVkaXRvclRhZ1swXTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGF0aCA9PT0gJycpIHBhdGggPSBwYXRoTGlzdC5sZW5ndGggPiAwID8gcGF0aExpc3RbMF1bc3JjXSA6ICcnO1xyXG5cclxuICAgICAgICAtMSA9PT0gcGF0aC5pbmRleE9mKCc6LycpICYmICcvLycgIT09IHBhdGguc2xpY2UoMCwgMikgJiYgKHBhdGggPSAwID09PSBwYXRoLmluZGV4T2YoJy8nKSA/IGxvY2F0aW9uLmhyZWYubWF0Y2goL14uKj86XFwvXFwvW15cXC9dKi8pWzBdICsgcGF0aCA6IGxvY2F0aW9uLmhyZWYubWF0Y2goL15bXlxcP10qXFwvKD86KS8pWzBdICsgcGF0aCk7XHJcblxyXG4gICAgICAgIGlmICghcGF0aCkgdGhyb3cgJ1tTVU5FRElUT1IudXRpbC5nZXRJbmNsdWRlUGF0aC5mYWlsXSBUaGUgU1VORURJVE9SIGluc3RhbGxhdGlvbiBwYXRoIGNvdWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkLiAobmFtZTogKycgKyBuYW1lICsgJywgZXh0ZW5zaW9uOiAnICsgZXh0ZW5zaW9uICsgJyknO1xyXG5cclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZFxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIENTUyB0ZXh0IHRoYXQgaGFzIGJlZW4gYXBwbGllZCB0byB0aGUgY3VycmVudCBwYWdlLlxyXG4gICAgICogQHBhcmFtIHtEb2N1bWVudHxudWxsfSBkb2MgVG8gZ2V0IHRoZSBDU1MgdGV4dCBvZiBhbiBkb2N1bWVudChjb3JlLl93ZCkuIElmIG51bGwgZ2V0IHRoZSBjdXJyZW50IGRvY3VtZW50LlxyXG4gICAgICogQHJldHVybnMge1N0cmluZ30gU3R5bGVzIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBnZXRQYWdlU3R5bGU6IGZ1bmN0aW9uIChkb2MpIHtcclxuICAgICAgICBsZXQgY3NzVGV4dCA9ICcnO1xyXG4gICAgICAgIGNvbnN0IHNoZWV0cyA9IChkb2MgfHwgdGhpcy5fZCkuc3R5bGVTaGVldHM7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzaGVldHMubGVuZ3RoLCBydWxlczsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBydWxlcyA9IHNoZWV0c1tpXS5jc3NSdWxlcztcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChydWxlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSBydWxlcy5sZW5ndGg7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjc3NUZXh0ICs9IHJ1bGVzW2NdLmNzc1RleHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjc3NUZXh0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIGFyZ3VtZW50IGlmcmFtZSdzIGRvY3VtZW50IG9iamVjdFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBpZnJhbWUgSWZyYW1lIGVsZW1lbnQgKGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUpXHJcbiAgICAgKiBAcmV0dXJucyB7RG9jdW1lbnR9XHJcbiAgICAgKi9cclxuICAgIGdldElmcmFtZURvY3VtZW50OiBmdW5jdGlvbiAoaWZyYW1lKSB7XHJcbiAgICAgICAgbGV0IHdEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93IHx8IGlmcmFtZS5jb250ZW50RG9jdW1lbnQ7XHJcbiAgICAgICAgaWYgKHdEb2N1bWVudC5kb2N1bWVudCkgd0RvY3VtZW50ID0gd0RvY3VtZW50LmRvY3VtZW50O1xyXG4gICAgICAgIHJldHVybiB3RG9jdW1lbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEdldCBhdHRyaWJ1dGVzIG9mIGFyZ3VtZW50IGVsZW1lbnQgdG8gc3RyaW5nICgnY2xhc3M9XCItLS1cIiBuYW1lPVwiLS0tXCIgJylcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IG9iamVjdFxyXG4gICAgICogQHBhcmFtIHtBcnJheXxudWxsfSBleGNlcHRBdHRycyBBcnJheSBvZiBhdHRyaWJ1dGUgbmFtZXMgdG8gZXhjbHVkZSBmcm9tIHRoZSByZXN1bHRcclxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGdldEF0dHJpYnV0ZXNUb1N0cmluZzogZnVuY3Rpb24gKGVsZW1lbnQsIGV4Y2VwdEF0dHJzKSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50LmF0dHJpYnV0ZXMpIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgY29uc3QgYXR0cnMgPSBlbGVtZW50LmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgbGV0IGF0dHJTdHJpbmcgPSAnJztcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGF0dHJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChleGNlcHRBdHRycyAmJiBleGNlcHRBdHRycy5pbmRleE9mKGF0dHJzW2ldLm5hbWUpID4gLTEpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBhdHRyU3RyaW5nICs9IGF0dHJzW2ldLm5hbWUgKyAnPVwiJyArIGF0dHJzW2ldLnZhbHVlICsgJ1wiICc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXR0clN0cmluZztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25HZXRzIEdldCB0aGUgbGVuZ3RoIGluIGJ5dGVzIG9mIGEgc3RyaW5nLlxyXG4gICAgICogcmVmZXJlbmNpbmcgY29kZTogXCJodHRwczovL2dpdGh1Yi5jb20vc2hhYW4xOTc0L215cmRpbi9ibG9iL21hc3Rlci9leHByZXNzaW9ucy9zdHJpbmcuanMjTDExXCJcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFN0cmluZyB0ZXh0XHJcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRCeXRlTGVuZ3RoOiBmdW5jdGlvbih0ZXh0KSB7XHJcbiAgICAgICAgaWYgKCF0ZXh0IHx8ICF0ZXh0LnRvU3RyaW5nKSByZXR1cm4gMDtcclxuICAgICAgICB0ZXh0ID0gdGV4dC50b1N0cmluZygpO1xyXG5cclxuICAgICAgICBjb25zdCBlbmNvZGVyID0gdGhpcy5fdy5lbmNvZGVVUklDb21wb25lbnQ7XHJcbiAgICAgICAgbGV0IGNyLCBjbDtcclxuICAgICAgICBpZiAodGhpcy5pc0lFX0VkZ2UpIHtcclxuICAgICAgICAgICAgY2wgPSB0aGlzLl93LnVuZXNjYXBlKGVuY29kZXIodGV4dCkpLmxlbmd0aDtcclxuICAgICAgICAgICAgY3IgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVuY29kZXIodGV4dCkubWF0Y2goLyglMEF8JTBEKS9naSkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNyID0gZW5jb2Rlcih0ZXh0KS5tYXRjaCgvKCUwQXwlMEQpL2dpKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjbCArIGNyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNsID0gKG5ldyB0aGlzLl93LlRleHRFbmNvZGVyKCd1dGYtOCcpLmVuY29kZSh0ZXh0KSkubGVuZ3RoO1xyXG4gICAgICAgICAgICBjciA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoZW5jb2Rlcih0ZXh0KS5tYXRjaCgvKCUwQXwlMEQpL2dpKSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY3IgPSBlbmNvZGVyKHRleHQpLm1hdGNoKC8oJTBBfCUwRCkvZ2kpLmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNsICsgY3I7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgZWRpdCByZWdpb24gdG9wIGRpdiBlbGVtZW50IG9yIGlmcmFtZSdzIGJvZHkgdGFnLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFRoZSBub2RlIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNXeXNpd3lnRGl2OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IDEgJiYgKHRoaXMuaGFzQ2xhc3MoZWxlbWVudCwgJ3NlLXdyYXBwZXItd3lzaXd5ZycpIHx8IC9eQk9EWSQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSXQgaXMganVkZ2VkIHdoZXRoZXIgaXQgaXMgdGhlIGNvbnRlbnRlZGl0YWJsZSBwcm9wZXJ0eSBpcyBmYWxzZS5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUaGUgbm9kZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzTm9uRWRpdGFibGU6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSA9PT0gMSAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJykgPT09ICdmYWxzZSc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGp1ZGdlZCB3aGV0aGVyIGl0IGlzIGEgbm9kZSByZWxhdGVkIHRvIHRoZSB0ZXh0IHN0eWxlLlxyXG4gICAgICogKHN0cm9uZ3xzcGFufGZvbnR8Ynx2YXJ8aXxlbXx1fGluc3xzfHN0cmlrZXxkZWx8c3VifHN1cHxtYXJrfGF8bGFiZWx8Y29kZSlcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUaGUgbm9kZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzVGV4dFN0eWxlRWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlICE9PSAzICYmIC9eKHN0cm9uZ3xzcGFufGZvbnR8Ynx2YXJ8aXxlbXx1fGluc3xzfHN0cmlrZXxkZWx8c3VifHN1cHxtYXJrfGF8bGFiZWx8Y29kZXxzdW1tYXJ5KSQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgaW5wdXQgZWxlbWVudCAoSU5QVVQsIFRFWFRBUkVBKVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFRoZSBub2RlIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgaXNJbnB1dEVsZW1lbnQ6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSA9PT0gMSAmJiAvXihJTlBVVHxURVhUQVJFQSkkL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSXQgaXMganVkZ2VkIHdoZXRoZXIgaXQgaXMgdGhlIGZvcm1hdCBlbGVtZW50IChQLCBESVYsIEhbMS02XSwgUFJFLCBMSSB8IGNsYXNzPVwiX19zZV9fZm9ybWF0X19yZXBsYWNlX3h4eFwiKVxyXG4gICAgICogRm9ybWF0IGVsZW1lbnQgYWxzbyBjb250YWluIFwiZnJlZSBmb3JtYXQgRWxlbWVudFwiXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgVGhlIG5vZGUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0Zvcm1hdEVsZW1lbnQ6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSA9PT0gMSAmJiAoL14oUHxESVZ8SFsxLTZdfFBSRXxMSXxUSHxURHxERVRBSUxTKSQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpIHx8IHRoaXMuaGFzQ2xhc3MoZWxlbWVudCwgJyhcXFxcc3xeKV9fc2VfX2Zvcm1hdF9fcmVwbGFjZV8uKyhcXFxcc3wkKXwoXFxcXHN8XilfX3NlX19mb3JtYXRfX2ZyZWVfLisoXFxcXHN8JCknKSkgJiYgIXRoaXMuaXNDb21wb25lbnQoZWxlbWVudCkgJiYgIXRoaXMuaXNXeXNpd3lnRGl2KGVsZW1lbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgcmFuZ2UgZm9ybWF0IGVsZW1lbnQuIChCTE9DS1FVT1RFLCBPTCwgVUwsIEZJR0NBUFRJT04sIFRBQkxFLCBUSEVBRCwgVEJPRFksIFRSLCBUSCwgVEQgfCBjbGFzcz1cIl9fc2VfX2Zvcm1hdF9fcmFuZ2VfeHh4XCIpXHJcbiAgICAgKiBSYW5nZSBmb3JtYXQgZWxlbWVudCBpcyB3cmFwIHRoZSBcImZvcm1hdCBlbGVtZW50XCIgYW5kIFwiY29tcG9uZW50XCJcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUaGUgbm9kZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUmFuZ2VGb3JtYXRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IDEgJiYgKC9eKEJMT0NLUVVPVEV8T0x8VUx8RklHQ0FQVElPTnxUQUJMRXxUSEVBRHxUQk9EWXxUUnxUSHxURHxERVRBSUxTKSQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpIHx8IHRoaXMuaGFzQ2xhc3MoZWxlbWVudCwgJyhcXFxcc3xeKV9fc2VfX2Zvcm1hdF9fcmFuZ2VfLisoXFxcXHN8JCknKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGp1ZGdlZCB3aGV0aGVyIGl0IGlzIHRoZSBjbG9zdXJlIHJhbmdlIGZvcm1hdCBlbGVtZW50LiAoVEgsIFREIHwgY2xhc3M9XCJfX3NlX19mb3JtYXRfX3JhbmdlX19jbG9zdXJlX3h4eFwiKVxyXG4gICAgICogQ2xvc3VyZSByYW5nZSBmb3JtYXQgZWxlbWVudHMgaXMgaW5jbHVkZWQgaW4gdGhlIHJhbmdlIGZvcm1hdCBlbGVtZW50LlxyXG4gICAgICogIC0gQ2xvc3VyZSByYW5nZSBmb3JtYXQgZWxlbWVudCBpcyB3cmFwIHRoZSBcImZvcm1hdCBlbGVtZW50XCIgYW5kIFwiY29tcG9uZW50XCJcclxuICAgICAqIOKAuyBZb3UgY2Fubm90IGV4aXQgdGhpcyBmb3JtYXQgd2l0aCB0aGUgRW50ZXIga2V5IG9yIEJhY2tzcGFjZSBrZXkuXHJcbiAgICAgKiDigLsgVXNlIGl0IG9ubHkgaW4gc3BlY2lhbCBjYXNlcy4gKFtleF0gZm9ybWF0IG9mIHRhYmxlIGNlbGxzKVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFRoZSBub2RlIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNDbG9zdXJlUmFuZ2VGb3JtYXRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IDEgJiYgKC9eKFRIfFREKSQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpIHx8IHRoaXMuaGFzQ2xhc3MoZWxlbWVudCwgJyhcXFxcc3xeKV9fc2VfX2Zvcm1hdF9fcmFuZ2VfX2Nsb3N1cmVfLisoXFxcXHN8JCknKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGp1ZGdlZCB3aGV0aGVyIGl0IGlzIHRoZSBmcmVlIGZvcm1hdCBlbGVtZW50LiAoUFJFIHwgY2xhc3M9XCJfX3NlX19mb3JtYXRfX2ZyZWVfeHh4XCIpXHJcbiAgICAgKiBGcmVlIGZvcm1hdCBlbGVtZW50cyBpcyBpbmNsdWRlZCBpbiB0aGUgZm9ybWF0IGVsZW1lbnQuXHJcbiAgICAgKiBGcmVlIGZvcm1hdCBlbGVtZW50cydzIGxpbmUgYnJlYWsgaXMgXCJCUlwiIHRhZy5cclxuICAgICAqIOKAuyBFbnRlcmluZyB0aGUgRW50ZXIga2V5IGluIHRoZSBzcGFjZSBvbiB0aGUgbGFzdCBsaW5lIGVuZHMgXCJGcmVlIEZvcm1hdFwiIGFuZCBhcHBlbmRzIFwiRm9ybWF0XCIuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgVGhlIG5vZGUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0ZyZWVGb3JtYXRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IDEgJiYgKC9eUFJFJC9pLnRlc3QoZWxlbWVudC5ub2RlTmFtZSkgfHwgdGhpcy5oYXNDbGFzcyhlbGVtZW50LCAnKFxcXFxzfF4pX19zZV9fZm9ybWF0X19mcmVlXy4rKFxcXFxzfCQpJykpICYmICF0aGlzLmlzQ29tcG9uZW50KGVsZW1lbnQpICYmICF0aGlzLmlzV3lzaXd5Z0RpdihlbGVtZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSXQgaXMganVkZ2VkIHdoZXRoZXIgaXQgaXMgdGhlIGNsb3N1cmUgZnJlZSBmb3JtYXQgZWxlbWVudC4gKGNsYXNzPVwiX19zZV9fZm9ybWF0X19mcmVlX19jbG9zdXJlX3h4eFwiKVxyXG4gICAgICogQ2xvc3VyZSBmcmVlIGZvcm1hdCBlbGVtZW50cyBpcyBpbmNsdWRlZCBpbiB0aGUgZnJlZSBmb3JtYXQgZWxlbWVudC5cclxuICAgICAqICAtIENsb3N1cmUgZnJlZSBmb3JtYXQgZWxlbWVudHMncyBsaW5lIGJyZWFrIGlzIFwiQlJcIiB0YWcuXHJcbiAgICAgKiDigLsgWW91IGNhbm5vdCBleGl0IHRoaXMgZm9ybWF0IHdpdGggdGhlIEVudGVyIGtleSBvciBCYWNrc3BhY2Uga2V5LlxyXG4gICAgICog4oC7IFVzZSBpdCBvbmx5IGluIHNwZWNpYWwgY2FzZXMuIChbZXhdIGZvcm1hdCBvZiB0YWJsZSBjZWxscylcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUaGUgbm9kZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzQ2xvc3VyZUZyZWVGb3JtYXRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IDEgJiYgdGhpcy5oYXNDbGFzcyhlbGVtZW50LCAnKFxcXFxzfF4pX19zZV9fZm9ybWF0X19mcmVlX19jbG9zdXJlXy4rKFxcXFxzfCQpJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGp1ZGdlZCB3aGV0aGVyIGl0IGlzIHRoZSBjb21wb25lbnRbaW1nLCBpZnJhbWUsIHZpZGVvLCBhdWRpbywgdGFibGVdIGNvdmVyKGNsYXNzPVwic2UtY29tcG9uZW50XCIpIGFuZCB0YWJsZSwgaHJcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUaGUgbm9kZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzQ29tcG9uZW50OiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmICgvc2UtY29tcG9uZW50Ly50ZXN0KGVsZW1lbnQuY2xhc3NOYW1lKSB8fCAvXihUQUJMRXxIUikkLy50ZXN0KGVsZW1lbnQubm9kZU5hbWUpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGZvciBcIl9fc2VfX3VuZWRpdGFibGVcIiBpbiB0aGUgY2xhc3MgbGlzdC5cclxuICAgICAqIENvbXBvbmVudHMgd2l0aCBjbGFzcyBcIl9fc2VfX3VuZWRpdGFibGVcIiBjYW5ub3QgYmUgbW9kaWZpZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1VuZWRpdGFibGVDb21wb25lbnQ6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgdGhpcy5oYXNDbGFzcyhlbGVtZW50LCAnX19zZV9fdW5lZGl0YWJsZScpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJdCBpcyBqdWRnZWQgd2hldGhlciBpdCBpcyB0aGUgY29tcG9uZW50IFtpbWcsIGlmcmFtZV0gY292ZXIoY2xhc3M9XCJzZS1jb21wb25lbnRcIilcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUaGUgbm9kZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzTWVkaWFDb21wb25lbnQ6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgL3NlLWNvbXBvbmVudC8udGVzdChlbGVtZW50LmNsYXNzTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGp1ZGdlZCB3aGV0aGVyIGl0IGlzIHRoZSBub3QgY2hlY2tpbmcgbm9kZS4gKGNsYXNzPVwia2F0ZXhcIiwgXCJfX3NlX190YWdcIilcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUaGUgbm9kZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzTm90Q2hlY2tpbmdOb2RlOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIC9rYXRleHxfX3NlX190YWcvLnRlc3QoZWxlbWVudC5jbGFzc05hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJZiBhIHBhcmVudCBub2RlIHRoYXQgY29udGFpbnMgYW4gYXJndW1lbnQgbm9kZSBmaW5kcyBhIGZvcm1hdCBub2RlICh1dGlsLmlzRm9ybWF0RWxlbWVudCksIGl0IHJldHVybnMgdGhhdCBub2RlLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFJlZmVyZW5jZSBub2RlLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfSB2YWxpZGF0aW9uIEFkZGl0aW9uYWwgdmFsaWRhdGlvbiBmdW5jdGlvbi5cclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fG51bGx9XHJcbiAgICAgKi9cclxuICAgIGdldEZvcm1hdEVsZW1lbnQ6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAoIXZhbGlkYXRpb24pIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1d5c2l3eWdEaXYoZWxlbWVudCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1JhbmdlRm9ybWF0RWxlbWVudChlbGVtZW50KSkgZWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNGb3JtYXRFbGVtZW50KGVsZW1lbnQpICYmIHZhbGlkYXRpb24oZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJZiBhIHBhcmVudCBub2RlIHRoYXQgY29udGFpbnMgYW4gYXJndW1lbnQgbm9kZSBmaW5kcyBhIGZvcm1hdCBub2RlICh1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KSwgaXQgcmV0dXJucyB0aGF0IG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgUmVmZXJlbmNlIG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHZhbGlkYXRpb24gQWRkaXRpb25hbCB2YWxpZGF0aW9uIGZ1bmN0aW9uLlxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8bnVsbH1cclxuICAgICAqL1xyXG4gICAgZ2V0UmFuZ2VGb3JtYXRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsaWRhdGlvbikge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNXeXNpd3lnRGl2KGVsZW1lbnQpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNSYW5nZUZvcm1hdEVsZW1lbnQoZWxlbWVudCkgJiYgIS9eKFRIRUFEfFRCT0RZfFRSKSQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpICYmIHZhbGlkYXRpb24oZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIElmIGEgcGFyZW50IG5vZGUgdGhhdCBjb250YWlucyBhbiBhcmd1bWVudCBub2RlIGZpbmRzIGEgZnJlZSBmb3JtYXQgbm9kZSAodXRpbC5pc0ZyZWVGb3JtYXRFbGVtZW50KSwgaXQgcmV0dXJucyB0aGF0IG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgUmVmZXJlbmNlIG5vZGUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHZhbGlkYXRpb24gQWRkaXRpb25hbCB2YWxpZGF0aW9uIGZ1bmN0aW9uLlxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8bnVsbH1cclxuICAgICAqL1xyXG4gICAgZ2V0RnJlZUZvcm1hdEVsZW1lbnQ6IGZ1bmN0aW9uIChlbGVtZW50LCB2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAoIXZhbGlkYXRpb24pIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3aGlsZSAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1d5c2l3eWdEaXYoZWxlbWVudCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZyZWVGb3JtYXRFbGVtZW50KGVsZW1lbnQpICYmIHZhbGlkYXRpb24oZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJZiBhIHBhcmVudCBub2RlIHRoYXQgY29udGFpbnMgYW4gYXJndW1lbnQgbm9kZSBmaW5kcyBhIGNsb3N1cmUgZnJlZSBmb3JtYXQgbm9kZSAodXRpbC5pc0Nsb3N1cmVGcmVlRm9ybWF0RWxlbWVudCksIGl0IHJldHVybnMgdGhhdCBub2RlLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFJlZmVyZW5jZSBub2RlLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfSB2YWxpZGF0aW9uIEFkZGl0aW9uYWwgdmFsaWRhdGlvbiBmdW5jdGlvbi5cclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fG51bGx9XHJcbiAgICAgKi9cclxuICAgIGdldENsb3N1cmVGcmVlRm9ybWF0RWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbGlkYXRpb24pIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmICghdmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzV3lzaXd5Z0RpdihlbGVtZW50KSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ2xvc3VyZUZyZWVGb3JtYXRFbGVtZW50KGVsZW1lbnQpICYmIHZhbGlkYXRpb24oZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBZGQgc3R5bGUgYW5kIGNsYXNzTmFtZSBvZiBjb3B5RWwgdG8gb3JpZ2luRWxcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gb3JpZ2luRWwgT3JpZ2luIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gY29weUVsIEVsZW1lbnQgdG8gY29weVxyXG4gICAgICogQHBhcmFtIHtBcnJheXxudWxsfSBibGFja2xpc3QgQmxhY2tsaXN0IGFycmF5KExvd2VyQ2FzZSlcclxuICAgICAqL1xyXG4gICAgY29weVRhZ0F0dHJpYnV0ZXM6IGZ1bmN0aW9uIChvcmlnaW5FbCwgY29weUVsLCBibGFja2xpc3QpIHtcclxuICAgICAgICBpZiAoY29weUVsLnN0eWxlLmNzc1RleHQpIHtcclxuICAgICAgICAgICAgY29uc3QgY29weVN0eWxlcyA9IGNvcHlFbC5zdHlsZTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNvcHlTdHlsZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG9yaWdpbkVsLnN0eWxlW2NvcHlTdHlsZXNbaV1dID0gY29weVN0eWxlc1tjb3B5U3R5bGVzW2ldXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXR0cnMgPSBjb3B5RWwuYXR0cmlidXRlcztcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXR0cnMubGVuZ3RoLCBuYW1lOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgbmFtZSA9IGF0dHJzW2ldLm5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgaWYgKChibGFja2xpc3QgJiYgYmxhY2tsaXN0LmluZGV4T2YobmFtZSkgPiAtMSkgfHwgIWF0dHJzW2ldLnZhbHVlKSBvcmlnaW5FbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgIT09ICdzdHlsZScpIG9yaWdpbkVsLnNldEF0dHJpYnV0ZShhdHRyc1tpXS5uYW1lLCBhdHRyc1tpXS52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb3B5IGFuZCBhcHBseSBhdHRyaWJ1dGVzIG9mIGZvcm1hdCB0YWcgdGhhdCBzaG91bGQgYmUgbWFpbnRhaW5lZC4gKHN0eWxlLCBjbGFzcykgSWdub3JlIFwiX19zZV9fZm9ybWF0X19cIiBjbGFzc1xyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBvcmlnaW5FbCBPcmlnaW4gZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBjb3B5RWwgRWxlbWVudCB0byBjb3B5XHJcbiAgICAgKi9cclxuICAgIGNvcHlGb3JtYXRBdHRyaWJ1dGVzOiBmdW5jdGlvbiAob3JpZ2luRWwsIGNvcHlFbCkge1xyXG4gICAgICAgIGNvcHlFbCA9IGNvcHlFbC5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgIGNvcHlFbC5jbGFzc05hbWUgPSBjb3B5RWwuY2xhc3NOYW1lLnJlcGxhY2UoLyhcXHN8XilfX3NlX19mb3JtYXRfX1teXFxzXSsvZywgJycpO1xyXG4gICAgICAgIHRoaXMuY29weVRhZ0F0dHJpYnV0ZXMob3JpZ2luRWwsIGNvcHlFbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEdldCB0aGUgaXRlbSBmcm9tIHRoZSBhcnJheSB0aGF0IG1hdGNoZXMgdGhlIGNvbmRpdGlvbi5cclxuICAgICAqIEBwYXJhbSB7QXJyYXl8SFRNTENvbGxlY3Rpb258Tm9kZUxpc3R9IGFycmF5IEFycmF5IHRvIGdldCBpdGVtXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHZhbGlkYXRpb24gQ29uZGl0aW9uYWwgZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gbXVsdGkgSWYgdHJ1ZSwgcmV0dXJucyBhbGwgaXRlbXMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYSBvdGhlcndpc2UsIHJldHVybnMgYW4gZW1wdHkgYXJyYXkuXHJcbiAgICAgKiBJZiBmYWxzZSwgcmV0dXJucyBvbmx5IG9uZSBpdGVtIHRoYXQgbWVldCB0aGUgY3JpdGVyaWEgb3RoZXJ3aXNlIHJldHVybiBudWxsLlxyXG4gICAgICogQHJldHVybnMge0FycmF5fE5vZGV8bnVsbH1cclxuICAgICAqL1xyXG4gICAgZ2V0QXJyYXlJdGVtOiBmdW5jdGlvbiAoYXJyYXksIHZhbGlkYXRpb24sIG11bHRpKSB7XHJcbiAgICAgICAgaWYgKCFhcnJheSB8fCBhcnJheS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICB2YWxpZGF0aW9uID0gdmFsaWRhdGlvbiB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9O1xyXG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoLCBhOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgYSA9IGFycmF5W2ldO1xyXG4gICAgICAgICAgICBpZiAodmFsaWRhdGlvbihhKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtdWx0aSkgcmV0dXJuIGE7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGFyci5wdXNoKGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gIW11bHRpID8gbnVsbCA6IGFycjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgaWYgYW4gYXJyYXkgY29udGFpbnMgYW4gZWxlbWVudCBcclxuICAgICAqIEBwYXJhbSB7QXJyYXl8SFRNTENvbGxlY3Rpb258Tm9kZUxpc3R9IGFycmF5IGVsZW1lbnQgYXJyYXlcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjaGVjayBmb3JcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBhcnJheUluY2x1ZGVzOiBmdW5jdGlvbihhcnJheSwgZWxlbWVudCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFycmF5W2ldID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEdldCB0aGUgaW5kZXggb2YgdGhlIGFyZ3VtZW50IHZhbHVlIGluIHRoZSBlbGVtZW50IGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fEhUTUxDb2xsZWN0aW9ufE5vZGVMaXN0fSBhcnJheSBlbGVtZW50IGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gZmluZCBpbmRleFxyXG4gICAgICogQHJldHVybnMge051bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0QXJyYXlJbmRleDogZnVuY3Rpb24gKGFycmF5LCBlbGVtZW50KSB7XHJcbiAgICAgICAgbGV0IGlkeCA9IC0xO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYXJyYXlbaV0gPT09IGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGlkeCA9IGk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGlkeDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IHRoZSBuZXh0IGluZGV4IG9mIHRoZSBhcmd1bWVudCB2YWx1ZSBpbiB0aGUgZWxlbWVudCBhcnJheVxyXG4gICAgICogQHBhcmFtIHtBcnJheXxIVE1MQ29sbGVjdGlvbnxOb2RlTGlzdH0gYXJyYXkgZWxlbWVudCBhcnJheVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBpdGVtIFRoZSBlbGVtZW50IHRvIGZpbmQgaW5kZXhcclxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIG5leHRJZHg6IGZ1bmN0aW9uIChhcnJheSwgaXRlbSkge1xyXG4gICAgICAgIGxldCBpZHggPSB0aGlzLmdldEFycmF5SW5kZXgoYXJyYXksIGl0ZW0pO1xyXG4gICAgICAgIGlmIChpZHggPT09IC0xKSByZXR1cm4gLTE7XHJcbiAgICAgICAgcmV0dXJuIGlkeCArIDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEdldCB0aGUgcHJldmlvdXMgaW5kZXggb2YgdGhlIGFyZ3VtZW50IHZhbHVlIGluIHRoZSBlbGVtZW50IGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fEhUTUxDb2xsZWN0aW9ufE5vZGVMaXN0fSBhcnJheSBFbGVtZW50IGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGl0ZW0gVGhlIGVsZW1lbnQgdG8gZmluZCBpbmRleFxyXG4gICAgICogQHJldHVybnMge051bWJlcn1cclxuICAgICAqL1xyXG4gICAgcHJldklkeDogZnVuY3Rpb24gKGFycmF5LCBpdGVtKSB7XHJcbiAgICAgICAgbGV0IGlkeCA9IHRoaXMuZ2V0QXJyYXlJbmRleChhcnJheSwgaXRlbSk7XHJcbiAgICAgICAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiAtMTtcclxuICAgICAgICByZXR1cm4gaWR4IC0gMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgaW5kZXggY29tcGFyZWQgdG8gb3RoZXIgc2libGluZyBub2Rlcy5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBUaGUgTm9kZSB0byBmaW5kIGluZGV4XHJcbiAgICAgKiBAcmV0dXJucyB7TnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRQb3NpdGlvbkluZGV4OiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIGxldCBpZHggPSAwO1xyXG4gICAgICAgIHdoaWxlICgobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSkge1xyXG4gICAgICAgICAgICBpZHggKz0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlkeDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIFwibm9kZVwiIGluIHRoZSBcInBhcmVudE5vZGVcIiBpbiBhIG51bWVyaWNhbCBhcnJheS5cclxuICAgICAqIGV4KSA8cD48c3Bhbj5hYTwvc3Bhbj48c3Bhbj5iYjwvc3Bhbj48L3A+IDogZ2V0Tm9kZVBhdGgobm9kZTogXCJiYlwiLCBwYXJlbnROb2RlOiBcIjxQPlwiKSAtPiBbMSwgMF1cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBUaGUgTm9kZSB0byBmaW5kIHBvc2l0aW9uIHBhdGhcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxudWxsfSBwYXJlbnROb2RlIFBhcmVudCBub2RlLiBJZiBudWxsLCB3eXNpd3lnIGRpdiBhcmVhXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdHxudWxsfSBfbmV3T2Zmc2V0cyBJZiB5b3Ugc2VuZCBhbiBvYmplY3Qgb2YgdGhlIGZvcm0gXCJ7czogMCwgZTogMH1cIiwgdGhlIHRleHQgbm9kZXMgdGhhdCBhcmUgYXR0YWNoZWQgdG9nZXRoZXIgYXJlIG1lcmdlZCBpbnRvIG9uZSwgY2VudGVyZWQgb24gdGhlIFwibm9kZVwiIGFyZ3VtZW50LlxyXG4gICAgICogXCJfbmV3T2Zmc2V0cy5zXCIgc3RvcmVzIHRoZSBsZW5ndGggb2YgdGhlIGNvbWJpbmVkIGNoYXJhY3RlcnMgYWZ0ZXIgXCJub2RlXCIgYW5kIFwiX25ld09mZnNldHMuZVwiIHN0b3JlcyB0aGUgbGVuZ3RoIG9mIHRoZSBjb21iaW5lZCBjaGFyYWN0ZXJzIGJlZm9yZSBcIm5vZGVcIi5cclxuICAgICAqIERvIG5vdCB1c2UgdW5sZXNzIGFic29sdXRlbHkgbmVjZXNzYXJ5LlxyXG4gICAgICogQHJldHVybnMge0FycmF5fVxyXG4gICAgICovXHJcbiAgICBnZXROb2RlUGF0aDogZnVuY3Rpb24gKG5vZGUsIHBhcmVudE5vZGUsIF9uZXdPZmZzZXRzKSB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IFtdO1xyXG4gICAgICAgIGxldCBmaW5kcyA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0UGFyZW50RWxlbWVudChub2RlLCBmdW5jdGlvbiAoZWwpIHtcclxuICAgICAgICAgICAgaWYgKGVsID09PSBwYXJlbnROb2RlKSBmaW5kcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoZmluZHMgJiYgIXRoaXMuaXNXeXNpd3lnRGl2KGVsKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gbWVyZ2UgdGV4dCBub2Rlc1xyXG4gICAgICAgICAgICAgICAgaWYgKF9uZXdPZmZzZXRzICYmIGVsLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBudWxsLCB0ZW1wVGV4dCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgX25ld09mZnNldHMucyA9IF9uZXdPZmZzZXRzLmUgPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldmlvdXMgPSBlbC5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHByZXZpb3VzICYmIHByZXZpb3VzLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBUZXh0ID0gcHJldmlvdXMudGV4dENvbnRlbnQucmVwbGFjZSh0aGlzLnplcm9XaWR0aFJlZ0V4cCwgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfbmV3T2Zmc2V0cy5zICs9IHRlbXBUZXh0Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWwudGV4dENvbnRlbnQgPSB0ZW1wVGV4dCArIGVsLnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gcHJldmlvdXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzID0gcHJldmlvdXMucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0odGVtcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IGVsLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0ICYmIG5leHQubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFRleHQgPSBuZXh0LnRleHRDb250ZW50LnJlcGxhY2UodGhpcy56ZXJvV2lkdGhSZWdFeHAsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX25ld09mZnNldHMuZSArPSB0ZW1wVGV4dC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnRleHRDb250ZW50ICs9IHRlbXBUZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gbmV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbSh0ZW1wKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaW5kZXggcHVzaFxyXG4gICAgICAgICAgICAgICAgcGF0aC5wdXNoKGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhdGgubWFwKHRoaXMuZ2V0UG9zaXRpb25JbmRleCkucmV2ZXJzZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBub2RlIGluIHRoZSBsb2NhdGlvbiBvZiB0aGUgcGF0aCBhcnJheSBvYnRhaW5lZCBmcm9tIFwidXRpbC5nZXROb2RlUGF0aFwiLlxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gb2Zmc2V0cyBQb3NpdGlvbiBhcnJheSwgYXJyYXkgb2J0YWluZWQgZnJvbSBcInV0aWwuZ2V0Tm9kZVBhdGhcIlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBwYXJlbnROb2RlIEJhc2UgcGFyZW50IGVsZW1lbnRcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfVxyXG4gICAgICovXHJcbiAgICBnZXROb2RlRnJvbVBhdGg6IGZ1bmN0aW9uIChvZmZzZXRzLCBwYXJlbnROb2RlKSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnQgPSBwYXJlbnROb2RlO1xyXG4gICAgICAgIGxldCBub2RlcztcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG9mZnNldHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgbm9kZXMgPSBjdXJyZW50LmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIGJyZWFrO1xyXG4gICAgICAgICAgICBpZiAobm9kZXMubGVuZ3RoIDw9IG9mZnNldHNbaV0pIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBub2Rlc1tvZmZzZXRzW2ldXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbXBhcmVzIHRoZSBzdHlsZSBhbmQgY2xhc3MgZm9yIGVxdWFsIHZhbHVlcy5cclxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiBib3RoIGFyZSB0ZXh0IG5vZGVzLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBhIE5vZGUgdG8gY29tcGFyZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBiIE5vZGUgdG8gY29tcGFyZVxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzU2FtZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgaWYgKGEubm9kZVR5cGUgPT09IDMgJiYgYi5ub2RlVHlwZSA9PT0gMykgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKGEubm9kZVR5cGUgPT09IDMgfHwgYi5ub2RlVHlwZSA9PT0gMykgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCBzdHlsZV9hID0gYS5zdHlsZTtcclxuICAgICAgICBjb25zdCBzdHlsZV9iID0gYi5zdHlsZTtcclxuICAgICAgICBsZXQgY29tcFN0eWxlID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHN0eWxlX2EubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHN0eWxlX2Fbc3R5bGVfYVtpXV0gPT09IHN0eWxlX2Jbc3R5bGVfYVtpXV0pIGNvbXBTdHlsZSsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY2xhc3NfYSA9IGEuY2xhc3NMaXN0O1xyXG4gICAgICAgIGNvbnN0IGNsYXNzX2IgPSBiLmNsYXNzTGlzdDtcclxuICAgICAgICBjb25zdCByZWcgPSB0aGlzLl93LlJlZ0V4cDtcclxuICAgICAgICBsZXQgY29tcENsYXNzID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNsYXNzX2EubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHJlZygnKFxcc3xeKScgKyBjbGFzc19hW2ldICsgJyhcXHN8JCknKS50ZXN0KGNsYXNzX2IudmFsdWUpKSBjb21wQ2xhc3MrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAoY29tcFN0eWxlID09PSBzdHlsZV9iLmxlbmd0aCAmJiBjb21wU3R5bGUgPT09IHN0eWxlX2EubGVuZ3RoKSAmJiAoY29tcENsYXNzID09PSBjbGFzc19iLmxlbmd0aCAmJiBjb21wQ2xhc3MgPT09IGNsYXNzX2EubGVuZ3RoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgdGhlIGxpbmUgZWxlbWVudCh1dGlsLmlzRm9ybWF0RWxlbWVudCkgaXMgZW1wdHkuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgRm9ybWF0IGVsZW1lbnQgbm9kZVxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzRW1wdHlMaW5lOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiAhZWxlbWVudCB8fCAhZWxlbWVudC5wYXJlbnROb2RlIHx8ICghZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdJTUcsIElGUkFNRSwgQVVESU8sIFZJREVPLCBDQU5WQVMsIFRBQkxFJykgJiYgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPT09IDAgJiYgdGhpcy5vbmx5WmVyb1dpZHRoU3BhY2UoZWxlbWVudC50ZXh0Q29udGVudCkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVjayB0aGUgc3BhbidzIGF0dHJpYnV0ZXMgYXJlIGVtcHR5LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fG51bGx9IGVsZW1lbnQgRWxlbWVudCBub2RlXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNTcGFuV2l0aG91dEF0dHI6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuICEhZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSAxICYmIC9eU1BBTiQvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpICYmICFlbGVtZW50LmNsYXNzTmFtZSAmJiAhZWxlbWVudC5zdHlsZS5jc3NUZXh0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVjayB0aGUgbm9kZSBpcyBhIGxpc3QgKG9sLCB1bClcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IG5vZGUgVGhlIGVsZW1lbnQgb3IgZWxlbWVudCBuYW1lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNMaXN0OiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHJldHVybiBub2RlICYmIC9eKE9MfFVMKSQvaS50ZXN0KHR5cGVvZiBub2RlID09PSAnc3RyaW5nJyA/IG5vZGUgOiBub2RlLm5vZGVOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgdGhlIG5vZGUgaXMgYSBsaXN0IGNlbGwgKGxpKVxyXG4gICAgICogQHBhcmFtIHtOb2RlfFN0cmluZ30gbm9kZSBUaGUgZWxlbWVudCBvciBlbGVtZW50IG5hbWUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0xpc3RDZWxsOiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHJldHVybiBub2RlICYmIC9eTEkkL2kudGVzdCh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycgPyBub2RlIDogbm9kZS5ub2RlTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrIHRoZSBub2RlIGlzIGEgdGFibGUgKHRhYmxlLCB0aGVhZCwgdGJvZHksIHRyLCB0aCwgdGQpXHJcbiAgICAgKiBAcGFyYW0ge05vZGV8U3RyaW5nfSBub2RlIFRoZSBlbGVtZW50IG9yIGVsZW1lbnQgbmFtZSB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzVGFibGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUgJiYgL14oVEFCTEV8VEhFQUR8VEJPRFl8VFJ8VEh8VEQpJC9pLnRlc3QodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnID8gbm9kZSA6IG5vZGUubm9kZU5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVjayB0aGUgbm9kZSBpcyBhIHRhYmxlIGNlbGwgKHRkLCB0aClcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IG5vZGUgVGhlIGVsZW1lbnQgb3IgZWxlbWVudCBuYW1lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNDZWxsOiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHJldHVybiBub2RlICYmIC9eKFREfFRIKSQvaS50ZXN0KHR5cGVvZiBub2RlID09PSAnc3RyaW5nJyA/IG5vZGUgOiBub2RlLm5vZGVOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgdGhlIG5vZGUgaXMgYSBicmVhayBub2RlIChCUilcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IG5vZGUgVGhlIGVsZW1lbnQgb3IgZWxlbWVudCBuYW1lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNCcmVhazogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICByZXR1cm4gbm9kZSAmJiAvXkJSJC9pLnRlc3QodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnID8gbm9kZSA6IG5vZGUubm9kZU5hbWUpO1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgdGhlIG5vZGUgaXMgYSBhbmNob3Igbm9kZSAoQSlcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IG5vZGUgVGhlIGVsZW1lbnQgb3IgZWxlbWVudCBuYW1lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNBbmNob3I6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUgJiYgL15BJC9pLnRlc3QodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnID8gbm9kZSA6IG5vZGUubm9kZU5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVjayB0aGUgbm9kZSBpcyBhIG1lZGlhIG5vZGUgKGltZywgaWZyYW1lLCBhdWRpbywgdmlkZW8sIGNhbnZhcylcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IG5vZGUgVGhlIGVsZW1lbnQgb3IgZWxlbWVudCBuYW1lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNNZWRpYTogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICByZXR1cm4gbm9kZSAmJiAvXihJTUd8SUZSQU1FfEFVRElPfFZJREVPfENBTlZBUykkL2kudGVzdCh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycgPyBub2RlIDogbm9kZS5ub2RlTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENoZWNrIHRoZSBub2RlIGlzIGEgZmlndXJlIHRhZyBvciB1dGlsLmlzTWVkaWEoKVxyXG4gICAgICogQHBhcmFtIHtOb2RlfFN0cmluZ30gbm9kZSBUaGUgZWxlbWVudCBvciBlbGVtZW50IG5hbWUgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0ZpZ3VyZXM6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUgJiYgKHRoaXMuaXNNZWRpYShub2RlKSB8fCAvXihGSUdVUkUpJC9pLnRlc3QodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnID8gbm9kZSA6IG5vZGUubm9kZU5hbWUpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGZvciBudW1lcmljICh3aXRoIGRlY2ltYWwgcG9pbnQpLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB0ZXh0IFRleHQgc3RyaW5nIG9yIG51bWJlclxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzTnVtYmVyOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgICAgIHJldHVybiAhIXRleHQgJiYgL14tP1xcZCsoXFwuXFxkKyk/JC8udGVzdCh0ZXh0ICsgJycpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgYSBudW1iZXIuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHRleHQgVGV4dCBzdHJpbmcgb3IgbnVtYmVyXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gbWF4RGVjIE1heGltdW0gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzICgtMSA6IEluZmluaXR5KVxyXG4gICAgICogQHJldHVybnMge051bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0TnVtYmVyOiBmdW5jdGlvbiAodGV4dCwgbWF4RGVjKSB7XHJcbiAgICAgICAgaWYgKCF0ZXh0KSByZXR1cm4gMDtcclxuXHJcbiAgICAgICAgbGV0IG51bWJlciA9ICh0ZXh0ICsgJycpLm1hdGNoKC8tP1xcZCsoXFwuXFxkKyk/Lyk7XHJcbiAgICAgICAgaWYgKCFudW1iZXIgfHwgIW51bWJlclswXSkgcmV0dXJuIDA7XHJcblxyXG4gICAgICAgIG51bWJlciA9IG51bWJlclswXTtcclxuICAgICAgICByZXR1cm4gbWF4RGVjIDwgMCA/IG51bWJlciAqIDEgOiBtYXhEZWMgPT09IDAgPyB0aGlzLl93Lk1hdGgucm91bmQobnVtYmVyICogMSkgOiAobnVtYmVyICogMSkudG9GaXhlZChtYXhEZWMpICogMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IGFsbCBcImNoaWxkcmVuXCIgb2YgdGhlIGFyZ3VtZW50IHZhbHVlIGVsZW1lbnQgKFdpdGhvdXQgdGV4dCBub2RlcylcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBlbGVtZW50IHRvIGdldCBjaGlsZCBub2RlXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHZhbGlkYXRpb24gQ29uZGl0aW9uYWwgZnVuY3Rpb25cclxuICAgICAqIEByZXR1cm5zIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgZ2V0TGlzdENoaWxkcmVuOiBmdW5jdGlvbiAoZWxlbWVudCwgdmFsaWRhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gW107XHJcbiAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmNoaWxkcmVuIHx8IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSByZXR1cm4gY2hpbGRyZW47XHJcblxyXG4gICAgICAgIHZhbGlkYXRpb24gPSB2YWxpZGF0aW9uIHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XHJcblxyXG4gICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT09IGN1cnJlbnQgJiYgdmFsaWRhdGlvbihjdXJyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjdXJyZW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCEhY3VycmVudC5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGN1cnJlbnQuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25GdW5jKGN1cnJlbnQuY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IGFsbCBcImNoaWxkTm9kZXNcIiBvZiB0aGUgYXJndW1lbnQgdmFsdWUgZWxlbWVudCAoSW5jbHVkZSB0ZXh0IG5vZGVzKVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IGVsZW1lbnQgdG8gZ2V0IGNoaWxkIG5vZGVcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gdmFsaWRhdGlvbiBDb25kaXRpb25hbCBmdW5jdGlvblxyXG4gICAgICogQHJldHVybnMge0FycmF5fVxyXG4gICAgICovXHJcbiAgICBnZXRMaXN0Q2hpbGROb2RlczogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbGlkYXRpb24pIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSByZXR1cm4gY2hpbGRyZW47XHJcblxyXG4gICAgICAgIHZhbGlkYXRpb24gPSB2YWxpZGF0aW9uIHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH07XHJcblxyXG4gICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT09IGN1cnJlbnQgJiYgdmFsaWRhdGlvbihjdXJyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjdXJyZW50KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmVjdXJzaW9uRnVuYyhjdXJyZW50LmNoaWxkTm9kZXNbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkoZWxlbWVudCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhcmVudHMgbm9kZXMuXHJcbiAgICAgKiBcIjBcIiB3aGVuIHRoZSBwYXJlbnQgbm9kZSBpcyB0aGUgV1lTSVdZRyBhcmVhLlxyXG4gICAgICogXCItMVwiIHdoZW4gdGhlIGVsZW1lbnQgYXJndW1lbnQgaXMgdGhlIFdZU0lXWUcgYXJlYS5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge051bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0RWxlbWVudERlcHRoOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIGlmICghZWxlbWVudCB8fCB0aGlzLmlzV3lzaXd5Z0RpdihlbGVtZW50KSkgcmV0dXJuIC0xO1xyXG5cclxuICAgICAgICBsZXQgZGVwdGggPSAwO1xyXG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XHJcblxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50ICYmICF0aGlzLmlzV3lzaXd5Z0RpdihlbGVtZW50KSkge1xyXG4gICAgICAgICAgICBkZXB0aCArPSAxO1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGRlcHRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDb21wYXJlcyB0d28gZWxlbWVudHMgdG8gZmluZCBhIGNvbW1vbiBhbmNlc3RvciwgYW5kIHJldHVybnMgdGhlIG9yZGVyIG9mIHRoZSB0d28gZWxlbWVudHMuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGEgTm9kZSB0byBjb21wYXJlLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBiIE5vZGUgdG8gY29tcGFyZS5cclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHsgYW5jZXNzdG9yLCBhLCBiLCByZXN1bHQ6IChhID4gYiA/IDEgOiBhIDwgYiA/IC0xIDogMCkgfTtcclxuICAgICAqL1xyXG4gICAgY29tcGFyZUVsZW1lbnRzOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIGxldCBhTm9kZSA9IGEsIGJOb2RlID0gYjtcclxuICAgICAgICB3aGlsZSAoYU5vZGUgJiYgYk5vZGUgJiYgYU5vZGUucGFyZW50Tm9kZSAhPT0gYk5vZGUucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICBhTm9kZSA9IGFOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGJOb2RlID0gYk5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYU5vZGUgfHwgIWJOb2RlKSByZXR1cm4geyBhbmNlc3RvcjogbnVsbCwgYTogYSwgYjogYiwgcmVzdWx0OiAwIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gYU5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgIGNvbnN0IGFJbmRleCA9IHRoaXMuZ2V0QXJyYXlJbmRleChjaGlsZHJlbiwgYU5vZGUpO1xyXG4gICAgICAgIGNvbnN0IGJJbmRleCA9IHRoaXMuZ2V0QXJyYXlJbmRleChjaGlsZHJlbiwgYk5vZGUpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhbmNlc3RvcjogYU5vZGUucGFyZW50Tm9kZSxcclxuICAgICAgICAgICAgYTogYU5vZGUsXHJcbiAgICAgICAgICAgIGI6IGJOb2RlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGFJbmRleCA+IGJJbmRleCA/IDEgOiBhSW5kZXggPCBiSW5kZXggPyAtMSA6IDBcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXQgdGhlIHBhcmVudCBlbGVtZW50IG9mIHRoZSBhcmd1bWVudCB2YWx1ZS5cclxuICAgICAqIEEgdGFnIHRoYXQgc2F0aXNmaWVzIHRoZSBxdWVyeSBjb25kaXRpb24gaXMgaW1wb3J0ZWQuXHJcbiAgICAgKiBSZXR1cm5zIG51bGwgaWYgbm90IGZvdW5kLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFJlZmVyZW5jZSBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gcXVlcnkgUXVlcnkgU3RyaW5nIChub2RlTmFtZSwgLmNsYXNzTmFtZSwgI0lELCA6bmFtZSkgb3IgdmFsaWRhdGlvbiBmdW5jdGlvbi5cclxuICAgICAqIE5vdCB1c2UgaXQgbGlrZSBqcXVlcnkuXHJcbiAgICAgKiBPbmx5IG9uZSBjb25kaXRpb24gY2FuIGJlIGVudGVyZWQgYXQgYSB0aW1lLlxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8bnVsbH1cclxuICAgICAqL1xyXG4gICAgZ2V0UGFyZW50RWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQsIHF1ZXJ5KSB7XHJcbiAgICAgICAgbGV0IGNoZWNrO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNoZWNrID0gcXVlcnk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGF0dHI7XHJcbiAgICAgICAgICAgIGlmICgvXlxcLi8udGVzdChxdWVyeSkpIHtcclxuICAgICAgICAgICAgICAgIGF0dHIgPSAnY2xhc3NOYW1lJztcclxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuc3BsaXQoJy4nKVsxXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgvXiMvLnRlc3QocXVlcnkpKSB7XHJcbiAgICAgICAgICAgICAgICBhdHRyID0gJ2lkJztcclxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gJ14nICsgcXVlcnkuc3BsaXQoJyMnKVsxXSArICckJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgvXjovLnRlc3QocXVlcnkpKSB7XHJcbiAgICAgICAgICAgICAgICBhdHRyID0gJ25hbWUnO1xyXG4gICAgICAgICAgICAgICAgcXVlcnkgPSAnXicgKyBxdWVyeS5zcGxpdCgnOicpWzFdICsgJyQnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXR0ciA9ICdub2RlTmFtZSc7XHJcbiAgICAgICAgICAgICAgICBxdWVyeSA9ICdeJyArIHF1ZXJ5ICsgJyQnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgdGhpcy5fdy5SZWdFeHAocXVlcnksICdpJyk7XHJcbiAgICAgICAgICAgIGNoZWNrID0gZnVuY3Rpb24gKGVsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVnRXhwLnRlc3QoZWxbYXR0cl0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQgJiYgIWNoZWNrKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzV3lzaXd5Z0RpdihlbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBwcmV2aW91cyBzaWJsaW5nIGxhc3QgY2hpbGQuIElmIHRoZXJlIGlzIG5vIHNpYmxpbmcsIHRoZW4gaXQnbGwgdGFrZSBpdCBmcm9tIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHdpdGggY2hpbGRcclxuICAgICAqIFJldHVybnMgbnVsbCBpZiBub3QgZm91bmQuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgUmVmZXJlbmNlIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxudWxsfSBjZWlsaW5nIEhpZ2hlc3QgYm91bmRhcnkgYWxsb3dlZFxyXG4gICAgICogQHJldHVybnMge05vZGV8bnVsbH1cclxuICAgICAqL1xyXG4gICAgZ2V0UHJldmlvdXNEZWVwZXN0Tm9kZTogZnVuY3Rpb24gKG5vZGUsIGNlaWxpbmcpIHtcclxuICAgICAgICBsZXQgcHJldmlvdXNOb2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgaWYgKCFwcmV2aW91c05vZGUpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTsgcGFyZW50Tm9kZTsgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGNlaWxpbmcpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUucHJldmlvdXNTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNOb2RlID0gcGFyZW50Tm9kZS5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwcmV2aW91c05vZGUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aGlsZSAocHJldmlvdXNOb2RlLmxhc3RDaGlsZCkgcHJldmlvdXNOb2RlID0gcHJldmlvdXNOb2RlLmxhc3RDaGlsZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzTm9kZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgbmV4dCBzaWJsaW5nIGZpcnN0IGNoaWxkLiBJZiB0aGVyZSBpcyBubyBzaWJsaW5nLCB0aGVuIGl0J2xsIHRha2UgaXQgZnJvbSB0aGUgY2xvc2VzdCBhbmNlc3RvciB3aXRoIGNoaWxkXHJcbiAgICAgKiBSZXR1cm5zIG51bGwgaWYgbm90IGZvdW5kLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBub2RlIFJlZmVyZW5jZSBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge05vZGV8bnVsbH0gY2VpbGluZyBIaWdoZXN0IGJvdW5kYXJ5IGFsbG93ZWRcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfG51bGx9XHJcbiAgICAgKi9cclxuICAgIGdldE5leHREZWVwZXN0Tm9kZTogZnVuY3Rpb24gKG5vZGUsIGNlaWxpbmcpIHtcclxuICAgICAgICBsZXQgbmV4dE5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgIGlmICghbmV4dE5vZGUpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTsgcGFyZW50Tm9kZTsgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGNlaWxpbmcpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUubmV4dFNpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IHBhcmVudE5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFuZXh0Tm9kZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChuZXh0Tm9kZS5maXJzdENoaWxkKSBuZXh0Tm9kZSA9IG5leHROb2RlLmZpcnN0Q2hpbGQ7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXh0Tm9kZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IHRoZSBjaGlsZCBlbGVtZW50IG9mIHRoZSBhcmd1bWVudCB2YWx1ZS5cclxuICAgICAqIEEgdGFnIHRoYXQgc2F0aXNmaWVzIHRoZSBxdWVyeSBjb25kaXRpb24gaXMgaW1wb3J0ZWQuXHJcbiAgICAgKiBSZXR1cm5zIG51bGwgaWYgbm90IGZvdW5kLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IFJlZmVyZW5jZSBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gcXVlcnkgUXVlcnkgU3RyaW5nIChub2RlTmFtZSwgLmNsYXNzTmFtZSwgI0lELCA6bmFtZSkgb3IgdmFsaWRhdGlvbiBmdW5jdGlvbi5cclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gbGFzdCBJZiB0cnVlIHJldHVybnMgdGhlIGxhc3Qgbm9kZSBhbW9uZyB0aGUgZm91bmQgY2hpbGQgbm9kZXMuIChkZWZhdWx0OiBmaXJzdCBub2RlKVxyXG4gICAgICogTm90IHVzZSBpdCBsaWtlIGpxdWVyeS5cclxuICAgICAqIE9ubHkgb25lIGNvbmRpdGlvbiBjYW4gYmUgZW50ZXJlZCBhdCBhIHRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxudWxsfVxyXG4gICAgICovXHJcbiAgICBnZXRDaGlsZEVsZW1lbnQ6IGZ1bmN0aW9uIChlbGVtZW50LCBxdWVyeSwgbGFzdCkge1xyXG4gICAgICAgIGxldCBjaGVjaztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBjaGVjayA9IHF1ZXJ5O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBhdHRyO1xyXG4gICAgICAgICAgICBpZiAoL15cXC4vLnRlc3QocXVlcnkpKSB7XHJcbiAgICAgICAgICAgICAgICBhdHRyID0gJ2NsYXNzTmFtZSc7XHJcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHF1ZXJ5LnNwbGl0KCcuJylbMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL14jLy50ZXN0KHF1ZXJ5KSkge1xyXG4gICAgICAgICAgICAgICAgYXR0ciA9ICdpZCc7XHJcbiAgICAgICAgICAgICAgICBxdWVyeSA9ICdeJyArIHF1ZXJ5LnNwbGl0KCcjJylbMV0gKyAnJCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL146Ly50ZXN0KHF1ZXJ5KSkge1xyXG4gICAgICAgICAgICAgICAgYXR0ciA9ICduYW1lJztcclxuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gJ14nICsgcXVlcnkuc3BsaXQoJzonKVsxXSArICckJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGF0dHIgPSAnbm9kZU5hbWUnO1xyXG4gICAgICAgICAgICAgICAgcXVlcnkgPSAnXicgKyAocXVlcnkgPT09ICd0ZXh0JyA/ICcjJyArIHF1ZXJ5IDogcXVlcnkpICsgJyQnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgdGhpcy5fdy5SZWdFeHAocXVlcnksICdpJyk7XHJcbiAgICAgICAgICAgIGNoZWNrID0gZnVuY3Rpb24gKGVsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVnRXhwLnRlc3QoZWxbYXR0cl0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY2hpbGRMaXN0ID0gdGhpcy5nZXRMaXN0Q2hpbGROb2RlcyhlbGVtZW50LCBmdW5jdGlvbiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hlY2soY3VycmVudCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGlsZExpc3RbbGFzdCA/IGNoaWxkTGlzdC5sZW5ndGggLSAxIDogMF07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIDEuIFRoZSBmaXJzdCBub2RlIG9mIGFsbCB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIFwiZmlyc3RcIiBlbGVtZW50IGlzIHJldHVybmVkLlxyXG4gICAgICogMi4gVGhlIGxhc3Qgbm9kZSBvZiBhbGwgdGhlIGNoaWxkIG5vZGVzIG9mIHRoZSBcImxhc3RcIiBlbGVtZW50IGlzIHJldHVybmVkLlxyXG4gICAgICogMy4gV2hlbiB0aGVyZSBpcyBubyBcImxhc3RcIiBlbGVtZW50LCB0aGUgZmlyc3QgYW5kIGxhc3Qgbm9kZXMgb2YgYWxsIHRoZSBjaGlsZHJlbiBvZiB0aGUgXCJmaXJzdFwiIGVsZW1lbnQgYXJlIHJldHVybmVkLlxyXG4gICAgICogeyBzYzogXCJmaXJzdFwiLCBlYzogXCJsYXN0XCIgfVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBmaXJzdCBGaXJzdCBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge05vZGV8bnVsbH0gbGFzdCBMYXN0IGVsZW1lbnRcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICAgKi9cclxuICAgIGdldEVkZ2VDaGlsZE5vZGVzOiBmdW5jdGlvbiAoZmlyc3QsIGxhc3QpIHtcclxuICAgICAgICBpZiAoIWZpcnN0KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFsYXN0KSBsYXN0ID0gZmlyc3Q7XHJcblxyXG4gICAgICAgIHdoaWxlIChmaXJzdCAmJiBmaXJzdC5ub2RlVHlwZSA9PT0gMSAmJiBmaXJzdC5jaGlsZE5vZGVzLmxlbmd0aCA+IDAgJiYgIXRoaXMuaXNCcmVhayhmaXJzdCkpIGZpcnN0ID0gZmlyc3QuZmlyc3RDaGlsZDtcclxuICAgICAgICB3aGlsZSAobGFzdCAmJiBsYXN0Lm5vZGVUeXBlID09PSAxICYmIGxhc3QuY2hpbGROb2Rlcy5sZW5ndGggPiAwICYmICAhdGhpcy5pc0JyZWFrKGxhc3QpKSBsYXN0ID0gbGFzdC5sYXN0Q2hpbGQ7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNjOiBmaXJzdCxcclxuICAgICAgICAgICAgZWM6IGxhc3QgfHwgZmlyc3RcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGVmdCBhbmQgdG9wIG9mIGFyZ3VtZW50LiB7bGVmdDowLCB0b3A6MH1cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBUYXJnZXQgbm9kZVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fG51bGx9IHd5c2l3eWdGcmFtZSBXaGVuIHVzZSBpZnJhbWUgb3B0aW9uLCBpZnJhbWUgb2JqZWN0IHNob3VsZCBiZSBzZW50IChjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lKVxyXG4gICAgICogQHJldHVybnMge09iamVjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0T2Zmc2V0OiBmdW5jdGlvbiAoZWxlbWVudCwgd3lzaXd5Z0ZyYW1lKSB7XHJcbiAgICAgICAgbGV0IG9mZnNldExlZnQgPSAwO1xyXG4gICAgICAgIGxldCBvZmZzZXRUb3AgPSAwO1xyXG4gICAgICAgIGxldCBvZmZzZXRFbGVtZW50ID0gZWxlbWVudC5ub2RlVHlwZSA9PT0gMyA/IGVsZW1lbnQucGFyZW50RWxlbWVudCA6IGVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3Qgd3lzaXd5ZyA9IHRoaXMuZ2V0UGFyZW50RWxlbWVudChlbGVtZW50LCB0aGlzLmlzV3lzaXd5Z0Rpdi5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgd2hpbGUgKG9mZnNldEVsZW1lbnQgJiYgIXRoaXMuaGFzQ2xhc3Mob2Zmc2V0RWxlbWVudCwgJ3NlLWNvbnRhaW5lcicpICYmIG9mZnNldEVsZW1lbnQgIT09IHd5c2l3eWcpIHtcclxuICAgICAgICAgICAgb2Zmc2V0TGVmdCArPSBvZmZzZXRFbGVtZW50Lm9mZnNldExlZnQ7XHJcbiAgICAgICAgICAgIG9mZnNldFRvcCArPSBvZmZzZXRFbGVtZW50Lm9mZnNldFRvcDtcclxuICAgICAgICAgICAgb2Zmc2V0RWxlbWVudCA9IG9mZnNldEVsZW1lbnQub2Zmc2V0UGFyZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaWZyYW1lID0gd3lzaXd5Z0ZyYW1lICYmIC9pZnJhbWUvaS50ZXN0KHd5c2l3eWdGcmFtZS5ub2RlTmFtZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGxlZnQ6IG9mZnNldExlZnQgKyAoaWZyYW1lID8gd3lzaXd5Z0ZyYW1lLnBhcmVudEVsZW1lbnQub2Zmc2V0TGVmdCA6IDApLFxyXG4gICAgICAgICAgICB0b3A6IChvZmZzZXRUb3AgLSAod3lzaXd5ZyA/IHd5c2l3eWcuc2Nyb2xsVG9wIDogMCkpICsgKGlmcmFtZSA/IHd5c2l3eWdGcmFtZS5wYXJlbnRFbGVtZW50Lm9mZnNldFRvcCA6IDApXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSXQgY29tcGFyZXMgdGhlIHN0YXJ0IGFuZCBlbmQgaW5kZXhlcyBvZiBcImFcIiBhbmQgXCJiXCIgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBvdmVybGFwcGluZyBpbmRleGVzIGluIHRoZSByYW5nZS5cclxuICAgICAqIGV4KSAxLCA1LCA0LCA2ID0+IFwiMlwiICg0IH4gNSlcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBhU3RhcnQgU3RhcnQgaW5kZXggb2YgXCJhXCJcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBhRW5kIEVuZCBpbmRleCBvZiBcImFcIlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGJTdGFydCBTdGFydCBpbmRleCBvZiBcImJcIlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGJFbmQgU3RhcnQgaW5kZXggb2YgXCJiXCJcclxuICAgICAqIEByZXR1cm5zIHtOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldE92ZXJsYXBSYW5nZUF0SW5kZXg6IGZ1bmN0aW9uIChhU3RhcnQsIGFFbmQsIGJTdGFydCwgYkVuZCkge1xyXG4gICAgICAgIGlmIChhU3RhcnQgPD0gYkVuZCA/IGFFbmQgPCBiU3RhcnQgOiBhRW5kID4gYlN0YXJ0KSByZXR1cm4gMDtcclxuXHJcbiAgICAgICAgY29uc3Qgb3ZlcmxhcCA9IChhU3RhcnQgPiBiU3RhcnQgPyBhU3RhcnQgOiBiU3RhcnQpIC0gKGFFbmQgPCBiRW5kID8gYUVuZCA6IGJFbmQpO1xyXG4gICAgICAgIHJldHVybiAob3ZlcmxhcCA8IDAgPyBvdmVybGFwICogLTEgOiBvdmVybGFwKSArIDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNldCB0aGUgdGV4dCBjb250ZW50IHZhbHVlIG9mIHRoZSBhcmd1bWVudCB2YWx1ZSBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGVsZW1lbnQgRWxlbWVudCB0byByZXBsYWNlIHRleHQgY29udGVudFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHR4dCBUZXh0IHRvIGJlIGFwcGxpZWRcclxuICAgICAqL1xyXG4gICAgY2hhbmdlVHh0OiBmdW5jdGlvbiAoZWxlbWVudCwgdHh0KSB7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50IHx8ICF0eHQpIHJldHVybjtcclxuICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdHh0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXBsYWNlIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUYXJnZXQgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8RWxlbWVudH0gbmV3RWxlbWVudCBTdHJpbmcgb3IgZWxlbWVudCBvZiB0aGUgbmV3IGVsZW1lbnQgdG8gYXBwbHlcclxuICAgICAqL1xyXG4gICAgY2hhbmdlRWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQsIG5ld0VsZW1lbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIG5ld0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm91dGVySFRNTCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5vdXRlckhUTUwgPSBuZXdFbGVtZW50O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgICAgIGRvYy5pbm5lckhUTUwgPSBuZXdFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudCA9IGRvYy5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdFbGVtZW50LCBlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3RWxlbWVudC5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICBlbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld0VsZW1lbnQsIGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU2V0IHN0eWxlLCBpZiBhbGwgc3R5bGVzIGFyZSBkZWxldGVkLCB0aGUgc3R5bGUgcHJvcGVydGllcyBhcmUgZGVsZXRlZC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRvIHNldCBzdHlsZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHN0eWxlTmFtZSBTdHlsZSBhdHRyaWJ1dGUgbmFtZSAobWFyZ2luTGVmdCwgdGV4dEFsaWduLi4uKVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWx1ZSBTdHlsZSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRTdHlsZTogZnVuY3Rpb24gKGVsZW1lbnQsIHN0eWxlTmFtZSwgdmFsdWUpIHtcclxuICAgICAgICBlbGVtZW50LnN0eWxlW3N0eWxlTmFtZV0gPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCF2YWx1ZSAmJiAhZWxlbWVudC5zdHlsZS5jc3NUZXh0KSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRGV0ZXJtaW5lIHdoZXRoZXIgYW55IG9mIHRoZSBtYXRjaGVkIGVsZW1lbnRzIGFyZSBhc3NpZ25lZCB0aGUgZ2l2ZW4gY2xhc3NcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBFbGVtZW50cyB0byBzZWFyY2ggY2xhc3MgbmFtZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGNsYXNzTmFtZSBDbGFzcyBuYW1lIHRvIHNlYXJjaCBmb3JcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICovXHJcbiAgICBoYXNDbGFzczogZnVuY3Rpb24gKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xyXG5cclxuICAgICAgICByZXR1cm4gKG5ldyB0aGlzLl93LlJlZ0V4cChjbGFzc05hbWUpKS50ZXN0KGVsZW1lbnQuY2xhc3NOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQXBwZW5kIHRoZSBjbGFzc05hbWUgdmFsdWUgb2YgdGhlIGFyZ3VtZW50IHZhbHVlIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBFbGVtZW50cyB0byBhZGQgY2xhc3MgbmFtZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGNsYXNzTmFtZSBDbGFzcyBuYW1lIHRvIGJlIGFkZFxyXG4gICAgICovXHJcbiAgICBhZGRDbGFzczogZnVuY3Rpb24gKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xyXG4gICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBjaGVjayA9IG5ldyB0aGlzLl93LlJlZ0V4cCgnKFxcXFxzfF4pJyArIGNsYXNzTmFtZSArICcoXFxcXHN8JCknKTtcclxuICAgICAgICBpZiAoY2hlY2sudGVzdChlbGVtZW50LmNsYXNzTmFtZSkpIHJldHVybjtcclxuXHJcbiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgKz0gKGVsZW1lbnQuY2xhc3NOYW1lLmxlbmd0aCA+IDAgPyAnICcgOiAnJykgKyBjbGFzc05hbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZSB0aGUgY2xhc3NOYW1lIHZhbHVlIG9mIHRoZSBhcmd1bWVudCB2YWx1ZSBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgRWxlbWVudHMgdG8gcmVtb3ZlIGNsYXNzIG5hbWVcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjbGFzc05hbWUgQ2xhc3MgbmFtZSB0byBiZSByZW1vdmVcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uIChlbGVtZW50LCBjbGFzc05hbWUpIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgY2hlY2sgPSBuZXcgdGhpcy5fdy5SZWdFeHAoJyhcXFxcc3xeKScgKyBjbGFzc05hbWUgKyAnKFxcXFxzfCQpJyk7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKGNoZWNrLCAnICcpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgaWYgKCFlbGVtZW50LmNsYXNzTmFtZS50cmltKCkpIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBcmd1bWVudCB2YWx1ZSBJZiB0aGVyZSBpcyBubyBjbGFzcyBuYW1lLCBpbnNlcnQgaXQgYW5kIGRlbGV0ZSB0aGUgY2xhc3MgbmFtZSBpZiBpdCBleGlzdHNcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBFbGVtZW50cyB0byByZXBsYWNlIGNsYXNzIG5hbWVcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjbGFzc05hbWUgQ2xhc3MgbmFtZSB0byBiZSBjaGFuZ2VcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufHVuZGVmaW5lZH1cclxuICAgICAqL1xyXG4gICAgdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uIChlbGVtZW50LCBjbGFzc05hbWUpIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHJldHVybjtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGNvbnN0IGNoZWNrID0gbmV3IHRoaXMuX3cuUmVnRXhwKCcoXFxcXHN8XiknICsgY2xhc3NOYW1lICsgJyhcXFxcc3wkKScpO1xyXG4gICAgICAgIGlmIChjaGVjay50ZXN0KGVsZW1lbnQuY2xhc3NOYW1lKSkge1xyXG4gICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoY2hlY2ssICcgJykudHJpbSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lICs9ICcgJyArIGNsYXNzTmFtZTtcclxuICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZWxlbWVudC5jbGFzc05hbWUudHJpbSgpKSBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGVsZW1lbnQgY2FuJ3QgYmUgZWFzaWx5IGVuYWJsZWRcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRvIGNoZWNrIGZvclxyXG4gICAgICovXHJcbiAgICBpc0ltcG9ydGFudERpc2FibGVkOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1pbXBvcnRhbnQtZGlzYWJsZWQnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSW4gdGhlIHByZWRlZmluZWQgY29kZSB2aWV3IG1vZGUsIHRoZSBidXR0b25zIGV4Y2VwdCB0aGUgZXhlY3V0YWJsZSBidXR0b24gYXJlIGNoYW5nZWQgdG8gdGhlICdkaXNhYmxlZCcgc3RhdGUuXHJcbiAgICAgKiBjb3JlLmNvZGVWaWV3RGlzYWJsZWRCdXR0b25zIChBbiBhcnJheSBvZiBidXR0b25zIHdob3NlIGNsYXNzIG5hbWUgaXMgbm90IFwic2UtY29kZS12aWV3LWVuYWJsZWRcIilcclxuICAgICAqIGNvcmUucmVzaXppbmdEaXNhYmxlZEJ1dHRvbnMgKEFuIGFycmF5IG9mIGJ1dHRvbnMgd2hvc2UgY2xhc3MgbmFtZSBpcyBub3QgXCJzZS1yZXNpemluZy1lbmFibGVkXCIpXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIERpc2FibGVkIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fEhUTUxDb2xsZWN0aW9ufE5vZGVMaXN0fSBidXR0b25MaXN0IEJ1dHRvbiBhcnJheVxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBpbXBvcnRhbnQgSWYgcHJpdmVsZWdlZCBtb2RlIHNob3VsZCBiZSB1c2VkIChOZWNlc3NhcnkgdG8gc3dpdGNoIGltcG9ydGFudERpc2FibGVkIGJ1dHRvbnMpXHJcbiAgICAgKi9cclxuICAgIHNldERpc2FibGVkQnV0dG9uczogZnVuY3Rpb24gKGRpc2FibGVkLCBidXR0b25MaXN0LCBpbXBvcnRhbnQpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYnV0dG9uTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgYnV0dG9uID0gYnV0dG9uTGlzdFtpXTtcclxuICAgICAgICAgICAgaWYgKGltcG9ydGFudCB8fCAhdGhpcy5pc0ltcG9ydGFudERpc2FibGVkKGJ1dHRvbikpIGJ1dHRvbi5kaXNhYmxlZCA9IGRpc2FibGVkO1xyXG4gICAgICAgICAgICBpZiAoaW1wb3J0YW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKCdkYXRhLWltcG9ydGFudC1kaXNhYmxlZCcsICcnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1pbXBvcnRhbnQtZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlIGFyZ3VtZW51IHZhbHVlIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gaXRlbSBOb2RlIHRvIGJlIHJlbW92ZVxyXG4gICAgICovXHJcbiAgICByZW1vdmVJdGVtOiBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZih0eXBlb2YgaXRlbS5yZW1vdmUgPT09ICdmdW5jdGlvbicpIGl0ZW0ucmVtb3ZlKCk7XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbS5wYXJlbnROb2RlKSBpdGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaXRlbSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZSBhbGwgcGFyZW50IG5vZGVzIHRoYXQgbWF0Y2ggdGhlIGNvbmRpdGlvbi5cclxuICAgICAqIFJldHVybnMgYW4ge3NjOiBwcmV2aW91c1NpYmxpbmcsIGVjOiBuZXh0U2libGluZ30odGhlIGRlbGV0ZWQgbm9kZSByZWZlcmVuY2UpIG9yIG51bGwuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IGl0ZW0gTm9kZSB0byBiZSByZW1vdmVcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gdmFsaWRhdGlvbiBWYWxpZGF0aW9uIGZ1bmN0aW9uLiBkZWZhdWx0KERlbGV0ZWQgaWYgaXQgb25seSBoYXZlIGJyZWFrTGluZSBhbmQgYmxhbmtzKVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fG51bGx9IHN0b3BQYXJlbnQgU3RvcCB3aGVuIHRoZSBwYXJlbnQgbm9kZSByZWFjaGVzIHN0b3BQYXJlbnRcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R8bnVsbH0ge3NjOiBwcmV2aW91c1NpYmxpbmcsIGVjOiBuZXh0U2libGluZ31cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlSXRlbUFsbFBhcmVudHM6IGZ1bmN0aW9uIChpdGVtLCB2YWxpZGF0aW9uLCBzdG9wUGFyZW50KSB7XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBsZXQgY2MgPSBudWxsO1xyXG4gICAgICAgIGlmICghdmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uID0gZnVuY3Rpb24gKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09PSBzdG9wUGFyZW50IHx8IHRoaXMuaXNDb21wb25lbnQoY3VycmVudCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBjdXJyZW50LnRleHRDb250ZW50LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA9PT0gMCB8fCAvXihcXG58XFx1MjAwQikrJC8udGVzdCh0ZXh0KTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgKGZ1bmN0aW9uIHJlY3Vyc2lvbkZ1bmMgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKCF1dGlsLmlzV3lzaXd5Z0RpdihlbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudCAmJiB2YWxpZGF0aW9uKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjOiBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjOiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkZ1bmMocGFyZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0oaXRlbSkpO1xyXG5cclxuICAgICAgICByZXR1cm4gY2M7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIERldGFjaCBOZXN0ZWQgYWxsIG5lc3RlZCBsaXN0cyB1bmRlciB0aGUgXCJiYXNlTm9kZVwiLlxyXG4gICAgICogUmV0dXJucyBhIGxpc3Qgd2l0aCBuZXN0ZWQgcmVtb3ZlZC5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gYmFzZU5vZGUgRWxlbWVudCBvbiB3aGljaCB0byBiYXNlLlxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBhbGwgSWYgdHJ1ZSwgaXQgYWxzbyBkZXRhY2ggYWxsIG5lc3RlZCBsaXN0cyBvZiBhIHJldHVybmVkIGxpc3QuXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH1cclxuICAgICAqL1xyXG4gICAgZGV0YWNoTmVzdGVkTGlzdDogZnVuY3Rpb24gKGJhc2VOb2RlLCBhbGwpIHtcclxuICAgICAgICBjb25zdCByTm9kZSA9IHRoaXMuX2RlbGV0ZU5lc3RlZExpc3QoYmFzZU5vZGUpO1xyXG4gICAgICAgIGxldCByYW5nZUVsZW1lbnQsIGNOb2RlcztcclxuXHJcbiAgICAgICAgaWYgKHJOb2RlKSB7XHJcbiAgICAgICAgICAgIHJhbmdlRWxlbWVudCA9IHJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgIGNOb2RlcyA9IHJOb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRQb3NpdGlvbkluZGV4KGJhc2VOb2RlKTtcclxuICAgICAgICAgICAgd2hpbGUgKGNOb2Rlc1tpbmRleF0pIHtcclxuICAgICAgICAgICAgICAgIHJhbmdlRWxlbWVudC5hcHBlbmRDaGlsZChjTm9kZXNbaW5kZXhdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJhbmdlRWxlbWVudCA9IGJhc2VOb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJDaGlsZHJlbjtcclxuICAgICAgICBpZiAoIWFsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBkZXB0aCA9IHRoaXMuZ2V0RWxlbWVudERlcHRoKGJhc2VOb2RlKSArIDI7XHJcbiAgICAgICAgICAgIHJDaGlsZHJlbiA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuKGJhc2VOb2RlLCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gdGhpcy5pc0xpc3RDZWxsKGN1cnJlbnQpICYmICFjdXJyZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgdGhpcy5nZXRFbGVtZW50RGVwdGgoY3VycmVudCkgPT09IGRlcHRoOyB9LmJpbmQodGhpcykpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJDaGlsZHJlbiA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuKHJhbmdlRWxlbWVudCwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIHRoaXMuaXNMaXN0Q2VsbChjdXJyZW50KSAmJiAhY3VycmVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nOyB9LmJpbmQodGhpcykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJDaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9kZWxldGVOZXN0ZWRMaXN0KHJDaGlsZHJlbltpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAock5vZGUpIHtcclxuICAgICAgICAgICAgck5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocmFuZ2VFbGVtZW50LCByTm9kZS5uZXh0U2libGluZyk7XHJcbiAgICAgICAgICAgIGlmIChjTm9kZXMgJiYgY05vZGVzLmxlbmd0aCA9PT0gMCkgdGhpcy5yZW1vdmVJdGVtKHJOb2RlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByYW5nZUVsZW1lbnQgPT09IGJhc2VOb2RlID8gcmFuZ2VFbGVtZW50LnBhcmVudE5vZGUgOiByYW5nZUVsZW1lbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFN1YiBmdW5jdGlvbiBvZiB1dGlsLmRldGFjaE5lc3RlZExpc3QgbWV0aG9kLlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX2RlbGV0ZU5lc3RlZExpc3Q6IGZ1bmN0aW9uIChiYXNlTm9kZSkge1xyXG4gICAgICAgIGNvbnN0IGJhc2VQYXJlbnQgPSBiYXNlTm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgIGxldCBzaWJsaW5nID0gYmFzZVBhcmVudDtcclxuICAgICAgICBsZXQgcGFyZW50ID0gc2libGluZy5wYXJlbnROb2RlO1xyXG4gICAgICAgIGxldCBsaVNpYmxpbmcsIGxpUGFyZW50LCBjaGlsZCwgaW5kZXgsIGM7XHJcblxyXG4gICAgICAgIHdoaWxlICh0aGlzLmlzTGlzdENlbGwocGFyZW50KSkge1xyXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuZ2V0UG9zaXRpb25JbmRleChiYXNlTm9kZSk7XHJcbiAgICAgICAgICAgIGxpU2libGluZyA9IHBhcmVudC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgIGxpUGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGNoaWxkID0gc2libGluZztcclxuICAgICAgICAgICAgd2hpbGUoY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXN0KGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGMgPSBjaGlsZC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjW2luZGV4XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaVBhcmVudC5pbnNlcnRCZWZvcmUoY1tpbmRleF0sIGxpU2libGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmxlbmd0aCA9PT0gMCkgdGhpcy5yZW1vdmVJdGVtKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlQYXJlbnQuYXBwZW5kQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2hpbGQgPSBzaWJsaW5nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNpYmxpbmcgPSBsaVBhcmVudDtcclxuICAgICAgICAgICAgcGFyZW50ID0gbGlQYXJlbnQucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiYXNlUGFyZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgdGhpcy5yZW1vdmVJdGVtKGJhc2VQYXJlbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gbGlQYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNwbGl0IGFsbCB0YWdzIGJhc2VkIG9uIFwiYmFzZU5vZGVcIlxyXG4gICAgICogUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBzcGxpdGVkIHRhZy5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gYmFzZU5vZGUgRWxlbWVudCBvciB0ZXh0IG5vZGUgb24gd2hpY2ggdG8gYmFzZVxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ8Tm9kZXxudWxsfSBvZmZzZXQgVGV4dCBvZmZzZXQgb2YgXCJiYXNlTm9kZVwiIChPbmx5IHZhbGlkIHdoZW4gXCJiYXNlTm9kZVwiIGlzIGEgdGV4dCBub2RlKVxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGRlcHRoIFRoZSBuZXN0aW5nIGRlcHRoIG9mIHRoZSBlbGVtZW50IGJlaW5nIHNwbGl0LiAoZGVmYXVsdDogMClcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fVxyXG4gICAgICovXHJcbiAgICBzcGxpdEVsZW1lbnQ6IGZ1bmN0aW9uIChiYXNlTm9kZSwgb2Zmc2V0LCBkZXB0aCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzV3lzaXd5Z0RpdihiYXNlTm9kZSkpIHJldHVybiBiYXNlTm9kZTtcclxuXHJcbiAgICAgICAgaWYgKG9mZnNldCAmJiAhdGhpcy5pc051bWJlcihvZmZzZXQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gIGJhc2VOb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuZ2V0UG9zaXRpb25JbmRleChvZmZzZXQpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gYmFzZU5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgY29uc3QgbmV4dCA9IGJhc2VOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgPCBpbmRleCkgcHJldi5hcHBlbmRDaGlsZChjaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpID4gaW5kZXgpIG5leHQuYXBwZW5kQ2hpbGQoY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGktLTtcclxuICAgICAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICAgICAgaW5kZXgtLTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHByZXYuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSBiYXNlTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShwcmV2LCBiYXNlTm9kZSk7XHJcbiAgICAgICAgICAgIGlmIChuZXh0LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkgYmFzZU5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV4dCwgYmFzZU5vZGUubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBiYXNlTm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJwID0gYmFzZU5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgIGxldCBzdWZmaXhJbmRleCA9IDE7XHJcbiAgICAgICAgbGV0IG5leHQgPSB0cnVlO1xyXG4gICAgICAgIGxldCBuZXdFbCwgY2hpbGRyZW4sIHRlbXA7XHJcbiAgICAgICAgaWYgKCFkZXB0aCB8fCBkZXB0aCA8IDApIGRlcHRoID0gMDtcclxuXHJcbiAgICAgICAgaWYgKGJhc2VOb2RlLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5nZXRQb3NpdGlvbkluZGV4KGJhc2VOb2RlKTtcclxuICAgICAgICAgICAgaWYgKG9mZnNldCA+PSAwICYmIGJhc2VOb2RlLmxlbmd0aCAhPT0gb2Zmc2V0KSB7XHJcbiAgICAgICAgICAgICAgICBiYXNlTm9kZS5zcGxpdFRleHQob2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyID0gdGhpcy5nZXROb2RlRnJvbVBhdGgoW2luZGV4ICsgMV0sIGJwKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9ubHlaZXJvV2lkdGhTcGFjZShhZnRlcikpIGFmdGVyLmRhdGEgPSB0aGlzLnplcm9XaWR0aFNwYWNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChiYXNlTm9kZS5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAob2Zmc2V0ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoYmFzZU5vZGUuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VOb2RlID0gYmFzZU5vZGUuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChiYXNlTm9kZS5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyID0gdGhpcy5jcmVhdGVUZXh0Tm9kZSh0aGlzLnplcm9XaWR0aFNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICBiYXNlTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhZnRlciwgYmFzZU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VOb2RlID0gYWZ0ZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFiYXNlTm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldEVsZW1lbnREZXB0aChiYXNlTm9kZSkgPT09IGRlcHRoKSBuZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBiYXNlTm9kZSA9IGJhc2VOb2RlLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhc2VOb2RlLm5vZGVUeXBlID09PSAxKSBzdWZmaXhJbmRleCA9IDA7XHJcbiAgICAgICAgbGV0IGRlcHRoRWwgPSBiYXNlTm9kZTtcclxuICAgICAgICB3aGlsZSAodGhpcy5nZXRFbGVtZW50RGVwdGgoZGVwdGhFbCkgPiBkZXB0aCkge1xyXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuZ2V0UG9zaXRpb25JbmRleChkZXB0aEVsKSArIHN1ZmZpeEluZGV4O1xyXG4gICAgICAgICAgICBkZXB0aEVsID0gZGVwdGhFbC5wYXJlbnROb2RlO1xyXG5cclxuICAgICAgICAgICAgdGVtcCA9IG5ld0VsO1xyXG4gICAgICAgICAgICBuZXdFbCA9IGRlcHRoRWwuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBkZXB0aEVsLmNoaWxkTm9kZXM7XHJcblxyXG4gICAgICAgICAgICBpZiAodGVtcCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNMaXN0Q2VsbChuZXdFbCkgJiYgdGhpcy5pc0xpc3QodGVtcCkgJiYgdGVtcC5maXJzdEVsZW1lbnRDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld0VsLmlubmVySFRNTCA9IHRlbXAuZmlyc3RFbGVtZW50Q2hpbGQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbSh0ZW1wLmZpcnN0RWxlbWVudENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGVtcC5jaGlsZHJlbi5sZW5ndGggPiAwKSBuZXdFbC5hcHBlbmRDaGlsZCh0ZW1wKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3RWwuYXBwZW5kQ2hpbGQodGVtcCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHdoaWxlIChjaGlsZHJlbltpbmRleF0pIHtcclxuICAgICAgICAgICAgICAgIG5ld0VsLmFwcGVuZENoaWxkKGNoaWxkcmVuW2luZGV4XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkZXB0aEVsLmNoaWxkTm9kZXMubGVuZ3RoIDw9IDEgJiYgKCFkZXB0aEVsLmZpcnN0Q2hpbGQgfHwgZGVwdGhFbC5maXJzdENoaWxkLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMCkpIGRlcHRoRWwuaW5uZXJIVE1MID0gJzxicj4nO1xyXG5cclxuICAgICAgICBjb25zdCBwRWxlbWVudCA9IGRlcHRoRWwucGFyZW50Tm9kZTtcclxuICAgICAgICBpZiAobmV4dCkgZGVwdGhFbCA9IGRlcHRoRWwubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgaWYgKCFuZXdFbCkgcmV0dXJuIGRlcHRoRWw7XHJcblxyXG4gICAgICAgIHRoaXMubWVyZ2VTYW1lVGFncyhuZXdFbCwgbnVsbCwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMubWVyZ2VOZXN0ZWRUYWdzKG5ld0VsLCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gdGhpcy5pc0xpc3QoY3VycmVudCk7IH0uYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgIGlmIChuZXdFbC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHBFbGVtZW50Lmluc2VydEJlZm9yZShuZXdFbCwgZGVwdGhFbCk7XHJcbiAgICAgICAgZWxzZSBuZXdFbCA9IGRlcHRoRWw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzTGlzdENlbGwobmV3RWwpICYmIG5ld0VsLmNoaWxkcmVuICYmIHRoaXMuaXNMaXN0KG5ld0VsLmNoaWxkcmVuWzBdKSkge1xyXG4gICAgICAgICAgICBuZXdFbC5pbnNlcnRCZWZvcmUodGhpcy5jcmVhdGVFbGVtZW50KCdCUicpLCBuZXdFbC5jaGlsZHJlblswXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYnAuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHRoaXMucmVtb3ZlSXRlbShicCk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXdFbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVXNlIHdpdGggXCJucGRlUGF0aCAodXRpbC5nZXROb2RlUGF0aClcIiB0byBtZXJnZSB0aGUgc2FtZSBhdHRyaWJ1dGVzIGFuZCB0YWdzIGlmIHRoZXkgYXJlIHByZXNlbnQgYW5kIG1vZGlmeSB0aGUgbm9kZXBhdGguXHJcbiAgICAgKiBJZiBcIm9mZnNldFwiIGhhcyBiZWVuIGNoYW5nZWQsIGl0IHdpbGwgcmV0dXJuIGFzIG11Y2ggXCJvZmZzZXRcIiBhcyBpdCBoYXMgYmVlbiBtb2RpZmllZC5cclxuICAgICAqIEFuIGFycmF5IGNvbnRhaW5pbmcgY2hhbmdlIG9mZnNldHMgaXMgcmV0dXJuZWQgaW4gdGhlIG9yZGVyIG9mIHRoZSBcIm5vZGVQYXRoQXJyYXlcIiBhcnJheS5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBFbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fG51bGx9IG5vZGVQYXRoQXJyYXkgQXJyYXkgb2YgTm9kZVBhdGggb2JqZWN0IChbdXRpbC5nZXROb2RlUGF0aCgpLCAuLl0pXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IG9ubHlUZXh0IElmIHRydWUsIG5vbi10ZXh0IG5vZGVzKCF1dGlsLl9pc0lnbm9yZU5vZGVDaGFuZ2UpIGxpa2UgJ3NwYW4nLCAnc3Ryb25nJy4uIGFyZSBpZ25vcmVkLlxyXG4gICAgICogQHJldHVybnMge0FycmF5fSBbb2Zmc2V0LCAuLl1cclxuICAgICAqL1xyXG4gICAgbWVyZ2VTYW1lVGFnczogZnVuY3Rpb24gKGVsZW1lbnQsIG5vZGVQYXRoQXJyYXksIG9ubHlUZXh0KSB7XHJcbiAgICAgICAgY29uc3QgaW5zdCA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qgbm9kZVBhdGhMZW4gPSBub2RlUGF0aEFycmF5ID8gbm9kZVBhdGhBcnJheS5sZW5ndGggOiAwO1xyXG4gICAgICAgIGxldCBvZmZzZXRzID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKG5vZGVQYXRoTGVuKSB7XHJcbiAgICAgICAgICAgIG9mZnNldHMgPSB0aGlzLl93LkFycmF5LmFwcGx5KG51bGwsIG5ldyB0aGlzLl93LkFycmF5KG5vZGVQYXRoTGVuKSkubWFwKHRoaXMuX3cuTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQsIGRlcHRoLCBkZXB0aEluZGV4KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY3VycmVudC5jaGlsZE5vZGVzO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoaWxkcmVuLmxlbmd0aCwgY2hpbGQsIG5leHQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIG5leHQgPSBjaGlsZHJlbltpICsgMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKSBicmVhaztcclxuICAgICAgICAgICAgICAgIGlmIChpbnN0LmlzQnJlYWsoY2hpbGQpIHx8IGluc3QuaXNNZWRpYShjaGlsZCkgfHwgaW5zdC5pc0lucHV0RWxlbWVudChjaGlsZCkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgaWYoKG9ubHlUZXh0ICYmIGluc3QuX2lzSWdub3JlTm9kZUNoYW5nZShjaGlsZCkpIHx8ICghb25seVRleHQgJiYgKGluc3QuaXNUYWJsZShjaGlsZCkgfHwgaW5zdC5pc0xpc3RDZWxsKGNoaWxkKSB8fCAoaW5zdC5pc0Zvcm1hdEVsZW1lbnQoY2hpbGQpICYmICFpbnN0LmlzRnJlZUZvcm1hdEVsZW1lbnQoY2hpbGQpKSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluc3QuaXNUYWJsZShjaGlsZCkgfHwgaW5zdC5pc0xpc3RDZWxsKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25GdW5jKGNoaWxkLCBkZXB0aCArIDEsIGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsZW4gPT09IDEgJiYgY3VycmVudC5ub2RlTmFtZSA9PT0gY2hpbGQubm9kZU5hbWUgJiYgY3VycmVudC5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIG5vZGVQYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVQYXRoTGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoLCBjLCBwLCBjRGVwdGgsIHNwbGljZURlcHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IG5vZGVQYXRoTGVuOyBuKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBub2RlUGF0aEFycmF5W25dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGggJiYgcGF0aFtkZXB0aF0gPT09IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gY2hpbGQsIHAgPSBjdXJyZW50LCBjRGVwdGggPSBkZXB0aCwgc3BsaWNlRGVwdGggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjRGVwdGggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdC5nZXRBcnJheUluZGV4KHAuY2hpbGROb2RlcywgYykgIT09IHBhdGhbY0RlcHRoXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlRGVwdGggPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBjaGlsZC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gYy5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjRGVwdGgtLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwbGljZURlcHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguc3BsaWNlKGRlcHRoLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFtkZXB0aF0gPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgdGFnXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdC5jb3B5VGFnQXR0cmlidXRlcyhjaGlsZCwgY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZCwgY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdC5yZW1vdmVJdGVtKGN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghbmV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkgcmVjdXJzaW9uRnVuYyhjaGlsZCwgZGVwdGggKyAxLCBpKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQubm9kZU5hbWUgPT09IG5leHQubm9kZU5hbWUgJiYgaW5zdC5pc1NhbWVBdHRyaWJ1dGVzKGNoaWxkLCBuZXh0KSAmJiBjaGlsZC5ocmVmID09PSBuZXh0LmhyZWYpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHMgPSBjaGlsZC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZExlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDAsIG5MZW4gPSBjaGlsZHMubGVuZ3RoOyBuIDwgbkxlbjsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZHNbbl0udGV4dENvbnRlbnQubGVuZ3RoID4gMCkgY2hpbGRMZW5ndGgrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBjaGlsZC5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IG5leHQuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYWRkT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobCAmJiByKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRPZmZzZXQgPSBsLm5vZGVUeXBlID09PSAzICYmIHIubm9kZVR5cGUgPT09IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZE9mZnNldCA9IGwudGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcEwgPSBsLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUodGVtcEwgJiYgdGVtcEwubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE9mZnNldCArPSB0ZW1wTC50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTCA9IHRlbXBMLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTGVuZ3RoID4gMCAmJiBsLm5vZGVUeXBlID09PSAzICYmIHIubm9kZVR5cGUgPT09IDMgJiYgKGwudGV4dENvbnRlbnQubGVuZ3RoID4gMCB8fCByLnRleHRDb250ZW50Lmxlbmd0aCA+IDApKSBjaGlsZExlbmd0aC0tO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVQYXRoTGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IG5vZGVQYXRoTGVuOyBuKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gbm9kZVBhdGhBcnJheVtuXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF0aCAmJiBwYXRoW2RlcHRoXSA+IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcHRoID4gMCAmJiBwYXRoW2RlcHRoIC0gMV0gIT09IGRlcHRoSW5kZXgpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFtkZXB0aF0gLT0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGhbZGVwdGggKyAxXSA+PSAwICYmIHBhdGhbZGVwdGhdID09PSBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoW2RlcHRoICsgMV0gKz0gY2hpbGRMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dE9mZnNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsICYmIGwubm9kZVR5cGUgPT09IDMgJiYgciAmJiByLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldHNbbl0gKz0gYWRkT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZE9mZnNldCA9IGNoaWxkLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQudGV4dENvbnRlbnQgKz0gbmV4dC50ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVQYXRoTGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IG5vZGVQYXRoTGVuOyBuKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gbm9kZVBhdGhBcnJheVtuXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF0aCAmJiBwYXRoW2RlcHRoXSA+IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcHRoID4gMCAmJiBwYXRoW2RlcHRoIC0gMV0gIT09IGRlcHRoSW5kZXgpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFtkZXB0aF0gLT0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGhbZGVwdGggKyAxXSA+PSAwICYmIHBhdGhbZGVwdGhdID09PSBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoW2RlcHRoICsgMV0gKz0gY2hpbGRMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRzW25dICs9IGFkZE9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmlubmVySFRNTCArPSBuZXh0LmlubmVySFRNTDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGluc3QucmVtb3ZlSXRlbShuZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICBpLS07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRnVuYyhjaGlsZCwgZGVwdGggKyAxLCBpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKGVsZW1lbnQsIDAsIDApO1xyXG5cclxuICAgICAgICByZXR1cm4gb2Zmc2V0cztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlIG5lc3RlZCB0YWdzIHdpdGhvdXQgb3RoZXIgY2hpbGQgbm9kZXMuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCBvYmplY3RcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5nfG51bGx9IHZhbGlkYXRpb24gVmFsaWRhdGlvbiBmdW5jdGlvbiAvIFN0cmluZyhcInRhZzF8dGFnMi4uXCIpIC8gSWYgbnVsbCwgYWxsIHRhZ3MgYXJlIGFwcGxpY2FibGUuXHJcbiAgICAgKi9cclxuICAgIG1lcmdlTmVzdGVkVGFnczogZnVuY3Rpb24gKGVsZW1lbnQsIHZhbGlkYXRpb24pIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb24gPSBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gdGhpcy50ZXN0KGN1cnJlbnQudGFnTmFtZSk7IH0uYmluZChuZXcgdGhpcy5fdy5SZWdFeHAoJ14oJyArICh2YWxpZGF0aW9uID8gdmFsaWRhdGlvbiA6ICcuKycpICsgJykkJywgJ2knKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsaWRhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9uID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gY3VycmVudC5jaGlsZHJlbjtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiBjaGlsZHJlblswXS5ub2RlTmFtZSA9PT0gY3VycmVudC5ub2RlTmFtZSAmJiB2YWxpZGF0aW9uKGN1cnJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wID0gY2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IHRlbXAuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmFwcGVuZENoaWxkKGNoaWxkcmVuWzBdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGN1cnJlbnQucmVtb3ZlQ2hpbGQodGVtcCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjdXJyZW50LmNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICByZWN1cnNpb25GdW5jKGN1cnJlbnQuY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkoZWxlbWVudCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZSBhIGVtcHR5IGNoaWxkIG5vZGUgb2YgYXJndW1lbnQgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IG5vZGVcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxudWxsfSBub3RSZW1vdmVOb2RlIERvIG5vdCByZW1vdmUgbm9kZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZURlbGV0ZSBXaGVuIGFsbCBjaGlsZCBub2RlcyBhcmUgZGVsZXRlZCwgdGhlIHBhcmVudCBub2RlIGlzIGFsc28gZGVsZXRlZC5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlRW1wdHlOb2RlOiBmdW5jdGlvbiAoZWxlbWVudCwgbm90UmVtb3ZlTm9kZSwgZm9yY2VEZWxldGUpIHtcclxuICAgICAgICBjb25zdCBpbnN0ID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKG5vdFJlbW92ZU5vZGUpIHtcclxuICAgICAgICAgICAgbm90UmVtb3ZlTm9kZSA9IGluc3QuZ2V0UGFyZW50RWxlbWVudChub3RSZW1vdmVOb2RlLCBmdW5jdGlvbiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQgPT09IGN1cnJlbnQucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAoZnVuY3Rpb24gcmVjdXJzaW9uRnVuYyhjdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChpbnN0Ll9ub3RUZXh0Tm9kZShjdXJyZW50KSB8fCBjdXJyZW50ID09PSBub3RSZW1vdmVOb2RlIHx8IGluc3QuaXNOb25FZGl0YWJsZShjdXJyZW50KSkgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBlbGVtZW50ICYmIGluc3Qub25seVplcm9XaWR0aFNwYWNlKGN1cnJlbnQudGV4dENvbnRlbnQpICYmICghY3VycmVudC5maXJzdENoaWxkIHx8ICFpbnN0LmlzQnJlYWsoY3VycmVudC5maXJzdENoaWxkKSkgJiYgIWN1cnJlbnQucXVlcnlTZWxlY3RvcihpbnN0Ll9hbGxvd2VkRW1wdHlOb2RlTGlzdCkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBjdXJyZW50LmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoaWxkcmVuLmxlbmd0aCwgciA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGRyZW5baSArIHJdIHx8IGluc3QuaXNDb21wb25lbnQoY2hpbGRyZW5baSArIHJdKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgciArPSByZWN1cnNpb25GdW5jKGNoaWxkcmVuW2kgKyByXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pKGVsZW1lbnQpO1xyXG5cclxuICAgICAgICBpZiAoZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoZm9yY2VEZWxldGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShlbGVtZW50KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gJzxicj4nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSZW1vdmUgd2hpdGVzcGFjZSBiZXR3ZWVuIHRhZ3MgaW4gSFRNTCBzdHJpbmcuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaHRtbCBIVE1MIHN0cmluZ1xyXG4gICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAqL1xyXG4gICAgaHRtbFJlbW92ZVdoaXRlU3BhY2U6IGZ1bmN0aW9uIChodG1sKSB7XHJcbiAgICAgICAgaWYgKCFodG1sKSByZXR1cm4gJyc7XHJcbiAgICAgICAgcmV0dXJuIGh0bWwudHJpbSgpLnJlcGxhY2UoLzxcXC8/KD8hc3Ryb25nfHNwYW58Zm9udHxifHZhcnxpfGVtfHV8aW5zfHN8c3RyaWtlfGRlbHxzdWJ8c3VwfG1hcmt8YXxsYWJlbHxjb2RlfHN1bW1hcnkpW14+XjxdKz5cXHMrKD89PCkvaWcsIGZ1bmN0aW9uIChtKSB7IHJldHVybiBtLnJlcGxhY2UoL1xcbi9nLCAnJykucmVwbGFjZSgvXFxzKy8sICcgJyk7IH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBIVE1MIGNvZGUgY29tcHJlc3Npb25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIEhUTUwgc3RyaW5nXHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBIVE1MIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBodG1sQ29tcHJlc3M6IGZ1bmN0aW9uIChodG1sKSB7XHJcbiAgICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZSgvXFxuL2csICcnKS5yZXBsYWNlKC8+XFxzKzwvZywgJz4gPCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBTb3J0IGEgZWxlbWVudCBhcnJheSBieSBkZXB0aCBvZiBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgQXJyYXkgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGRlcyB0cnVlOiBkZXNjZW5kaW5nIG9yZGVyIC8gZmFsc2U6IGFzY2VuZGluZyBvcmRlclxyXG4gICAgICovXHJcbiAgICBzb3J0QnlEZXB0aDogZnVuY3Rpb24gKGFycmF5LCBkZXMpIHtcclxuICAgICAgICBjb25zdCB0ID0gIWRlcyA/IC0xIDogMTtcclxuICAgICAgICBjb25zdCBmID0gdCAqIC0xO1xyXG5cclxuICAgICAgICBhcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0xpc3RDZWxsKGEpIHx8ICF0aGlzLmlzTGlzdENlbGwoYikpIHJldHVybiAwO1xyXG4gICAgICAgICAgICBhID0gdGhpcy5nZXRFbGVtZW50RGVwdGgoYSk7XHJcbiAgICAgICAgICAgIGIgPSB0aGlzLmdldEVsZW1lbnREZXB0aChiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGEgPiBiID8gdCA6IGEgPCBiID8gZiA6IDA7XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcclxuICAgIH0sXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVzY2FwZSBhIHN0cmluZyBmb3Igc2FmZSB1c2UgaW4gcmVndWxhciBleHByZXNzaW9ucy5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgU3RyaW5nIHRvIGVzY2FwZVxyXG4gICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZXNjYXBlU3RyaW5nUmVnZXhwOiBmdW5jdGlvbiAoc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgc3RyaW5nJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBFc2NhcGUgY2hhcmFjdGVycyB3aXRoIHNwZWNpYWwgbWVhbmluZyBlaXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgY2hhcmFjdGVyIHNldHMuXHJcbiAgICAgICAgLy8gVXNlIGEgc2ltcGxlIGJhY2tzbGFzaCBlc2NhcGUgd2hlbiBpdOKAmXMgYWx3YXlzIHZhbGlkLCBhbmQgYSBgXFx4bm5gIGVzY2FwZSB3aGVuIHRoZSBzaW1wbGVyIGZvcm0gd291bGQgYmUgZGlzYWxsb3dlZCBieSBVbmljb2RlIHBhdHRlcm5z4oCZIHN0cmljdGVyIGdyYW1tYXIuXHJcbiAgICAgICAgcmV0dXJuIHN0cmluZ1xyXG4gICAgICAgICAgICAucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCsqPy5dL2csICdcXFxcJCYnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvLS9nLCAnXFxcXHgyZCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfaXNFeGNsdWRlU2VsZWN0aW9uRWxlbWVudDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gIS9GSUdDQVBUSU9OL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSAmJiAodGhpcy5pc0NvbXBvbmVudChlbGVtZW50KSB8fCAvRklHVVJFL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE5vZGVzIHRoYXQgbmVlZCB0byBiZSBhZGRlZCB3aXRob3V0IG1vZGlmaWNhdGlvbiB3aGVuIGNoYW5naW5nIHRleHQgbm9kZXNcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBFbGVtZW50IHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9pc0lnbm9yZU5vZGVDaGFuZ2U6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSAhPT0gMyAmJiAodGhpcy5pc05vbkVkaXRhYmxlKGVsZW1lbnQpIHx8ICF0aGlzLmlzVGV4dFN0eWxlRWxlbWVudChlbGVtZW50KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE5vZGVzIHRoYXQgbXVzdCByZW1haW4gdW5kZXRhY2hlZCB3aGVuIGNoYW5naW5nIHRleHQgbm9kZXMgKEEsIExhYmVsLCBDb2RlLCBTcGFuOmZvbnQtc2l6ZSlcclxuICAgICAqIEBwYXJhbSB7Tm9kZXxTdHJpbmd9IGVsZW1lbnQgRWxlbWVudCB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfaXNNYWludGFpbmVkTm9kZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlICE9PSAzICYmIC9eKGF8bGFiZWx8Y29kZXxzdW1tYXJ5KSQvaS50ZXN0KHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJyA/IGVsZW1lbnQgOiBlbGVtZW50Lm5vZGVOYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTm9kZSB3aXRoIGZvbnQtc2l6ZSBzdHlsZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IEVsZW1lbnQgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX2lzU2l6ZU5vZGU6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSAhPT0gMyAmJiB0aGlzLmlzVGV4dFN0eWxlRWxlbWVudChlbGVtZW50KSAmJiAhIWVsZW1lbnQuc3R5bGUuZm9udFNpemU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIE5vZGVzIHdpdGhvdXQgdGV4dFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50IEVsZW1lbnQgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX25vdFRleHROb2RlOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgIT09IDMgJiYgKHRoaXMuaXNDb21wb25lbnQoZWxlbWVudCkgfHwgL14oYnJ8aW5wdXR8c2VsZWN0fGNhbnZhc3xpbWd8aWZyYW1lfGF1ZGlvfHZpZGVvKSQvaS50ZXN0KHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJyA/IGVsZW1lbnQgOiBlbGVtZW50Lm5vZGVOYW1lKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlcHJlY2F0ZWRcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVjayBkaXNhbGxvd2VkIHRhZ3NcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBFbGVtZW50IHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9kaXNhbGxvd2VkVGFnczogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gL14obWV0YXxzY3JpcHR8bGlua3xzdHlsZXxbYS16XStcXDpbYS16XSspJC9pLnRlc3QoZWxlbWVudC5ub2RlTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSB3aGl0ZWxpc3QgUmVnRXhwIG9iamVjdC5cclxuICAgICAqIFJldHVybiBSZWdFeHAgZm9ybWF0OiBuZXcgUmVnRXhwKFwiPFxcXFwvP1xcXFxiKD8hXCIgKyBsaXN0ICsgXCIpXFxcXGJbXj5ePF0qKz5cIiwgXCJnaVwiKVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGxpc3QgVGFncyBsaXN0IChcImJyfHB8ZGl2fHByZS4uLlwiKVxyXG4gICAgICogQHJldHVybnMge1JlZ0V4cH1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlVGFnc1doaXRlbGlzdDogZnVuY3Rpb24gKGxpc3QpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnPFxcXFwvP1xcXFxiKD8hXFxcXGInICsgKGxpc3QgfHwgJycpLnJlcGxhY2UoL1xcfC9nLCAnXFxcXGJ8XFxcXGInKSArICdcXFxcYilbXj5dKj4nLCAnZ2knKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlIGJsYWNrbGlzdCBSZWdFeHAgb2JqZWN0LlxyXG4gICAgICogUmV0dXJuIFJlZ0V4cCBmb3JtYXQ6IG5ldyBSZWdFeHAoXCI8XFxcXC8/XFxcXGIoPzpcIiArIGxpc3QgKyBcIilcXFxcYltePl48XSorPlwiLCBcImdpXCIpXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbGlzdCBUYWdzIGxpc3QgKFwiYnJ8cHxkaXZ8cHJlLi4uXCIpXHJcbiAgICAgKiBAcmV0dXJucyB7UmVnRXhwfVxyXG4gICAgICovXHJcbiAgICBjcmVhdGVUYWdzQmxhY2tsaXN0OiBmdW5jdGlvbiAobGlzdCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKCc8XFxcXC8/XFxcXGIoPzpcXFxcYicgKyAobGlzdCB8fCAnXicpLnJlcGxhY2UoL1xcfC9nLCAnXFxcXGJ8XFxcXGInKSArICdcXFxcYilbXj5dKj4nLCAnZ2knKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRml4IHRhZ3MgdGhhdCBkbyBub3QgZml0IHRoZSBlZGl0b3IgZm9ybWF0LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBkb2N1bWVudEZyYWdtZW50IERvY3VtZW50IGZyYWdtZW50IFwiRE9DVU1FTlRfRlJBR01FTlRfTk9ERVwiIChub2RlVHlwZSA9PT0gMTEpXHJcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gaHRtbENoZWNrV2hpdGVsaXN0UmVnRXhwIEVkaXRvciB0YWdzIHdoaXRlbGlzdCAoY29yZS5faHRtbENoZWNrV2hpdGVsaXN0UmVnRXhwKVxyXG4gICAgICogQHBhcmFtIHtSZWdFeHB9IGh0bWxDaGVja0JsYWNrbGlzdFJlZ0V4cCBFZGl0b3IgdGFncyBibGFja2xpc3QgKGNvcmUuX2h0bWxDaGVja0JsYWNrbGlzdFJlZ0V4cClcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNsYXNzTmFtZUZpbHRlciBDbGFzcyBuYW1lIGZpbHRlciBmdW5jdGlvblxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaWN0SFRNTFZhbGlkYXRpb24gRW5mb3JjZXMgc3RyaWN0IEhUTUwgdmFsaWRhdGlvbiBiYXNlZCBvbiB0aGUgZWRpdG9yYHMgcG9saWN5XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfY29uc2lzdGVuY3lDaGVja09mSFRNTDogZnVuY3Rpb24gKGRvY3VtZW50RnJhZ21lbnQsIGh0bWxDaGVja1doaXRlbGlzdFJlZ0V4cCwgaHRtbENoZWNrQmxhY2tsaXN0UmVnRXhwLCBjbGFzc05hbWVGaWx0ZXIsIHN0cmljdEhUTUxWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXQgaXMgY2FuIHVzZSBcIi5jaGlsZHJlbih1dGlsLmdldExpc3RDaGlsZHJlbilcIiB0byBleGNsdWRlIHRleHQgbm9kZXMsIGJ1dCBcImRvY3VtZW50RnJhZ21lbnQuY2hpbGRyZW5cIiBpcyBub3Qgc3VwcG9ydGVkIGluIElFLlxyXG4gICAgICAgICAqIFNvIGNoZWNrIHRoZSBub2RlIHR5cGUgYW5kIGV4Y2x1ZGUgdGhlIHRleHQgbm8gKGN1cnJlbnQubm9kZVR5cGUgIT09IDEpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlVGFncyA9IFtdLCBlbXB0eVRhZ3MgPSBbXSwgd3JvbmdMaXN0ID0gW10sIHdpdGhvdXRGb3JtYXRDZWxscyA9IFtdO1xyXG5cclxuICAgICAgICAvLyB3cm9uZyBwb3NpdGlvblxyXG4gICAgICAgIGNvbnN0IHdyb25nVGFncyA9IHRoaXMuZ2V0TGlzdENoaWxkTm9kZXMoZG9jdW1lbnRGcmFnbWVudCwgZnVuY3Rpb24gKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQubm9kZVR5cGUgIT09IDEpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGlzdChjdXJyZW50LnBhcmVudEVsZW1lbnQpKSByZW1vdmVUYWdzLnB1c2goY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHdoaXRlIGxpc3RcclxuICAgICAgICAgICAgaWYgKGh0bWxDaGVja0JsYWNrbGlzdFJlZ0V4cC50ZXN0KGN1cnJlbnQubm9kZU5hbWUpIHx8ICghaHRtbENoZWNrV2hpdGVsaXN0UmVnRXhwLnRlc3QoY3VycmVudC5ub2RlTmFtZSkgJiYgY3VycmVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmlzTm90Q2hlY2tpbmdOb2RlKGN1cnJlbnQpKSkge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlVGFncy5wdXNoKGN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBlbXB0eSB0YWdzXHJcbiAgICAgICAgICAgIGNvbnN0IG5ydGFnID0gIXRoaXMuZ2V0UGFyZW50RWxlbWVudChjdXJyZW50LCB0aGlzLmlzTm90Q2hlY2tpbmdOb2RlKTtcclxuICAgICAgICAgICAgaWYgKCghdGhpcy5pc1RhYmxlKGN1cnJlbnQpICYmICF0aGlzLmlzTGlzdENlbGwoY3VycmVudCkgJiYgIXRoaXMuaXNBbmNob3IoY3VycmVudCkpICYmICh0aGlzLmlzRm9ybWF0RWxlbWVudChjdXJyZW50KSB8fCB0aGlzLmlzUmFuZ2VGb3JtYXRFbGVtZW50KGN1cnJlbnQpIHx8IHRoaXMuaXNUZXh0U3R5bGVFbGVtZW50KGN1cnJlbnQpKSAmJiBjdXJyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwICYmIG5ydGFnKSB7XHJcbiAgICAgICAgICAgICAgICBlbXB0eVRhZ3MucHVzaChjdXJyZW50KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gd3JvbmcgbGlzdFxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpc3QoY3VycmVudC5wYXJlbnROb2RlKSAmJiAhdGhpcy5pc0xpc3QoY3VycmVudCkgJiYgIXRoaXMuaXNMaXN0Q2VsbChjdXJyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgd3JvbmdMaXN0LnB1c2goY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHRhYmxlIGNlbGxzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ2VsbChjdXJyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmVsID0gY3VycmVudC5maXJzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0Zvcm1hdEVsZW1lbnQoZmVsKSAmJiAhdGhpcy5pc1JhbmdlRm9ybWF0RWxlbWVudChmZWwpICYmICF0aGlzLmlzQ29tcG9uZW50KGZlbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB3aXRob3V0Rm9ybWF0Q2VsbHMucHVzaChjdXJyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGNsYXNzIGZpbHRlclxyXG4gICAgICAgICAgICBpZiAobnJ0YWcgJiYgY3VycmVudC5jbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IG5ldyB0aGlzLl93LkFycmF5KGN1cnJlbnQuY2xhc3NMaXN0KS5tYXAoY2xhc3NOYW1lRmlsdGVyKS5qb2luKCcgJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSkgY3VycmVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGN1cnJlbnQucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBzdHJpY3RIVE1MVmFsaWRhdGlvbiAmJiBjdXJyZW50LnBhcmVudE5vZGUgIT09IGRvY3VtZW50RnJhZ21lbnQgJiYgbnJ0YWcgJiZcclxuICAgICAgICAgICAgICAgICgodGhpcy5pc0xpc3RDZWxsKGN1cnJlbnQpICYmICF0aGlzLmlzTGlzdChjdXJyZW50LnBhcmVudE5vZGUpKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICgodGhpcy5pc0Zvcm1hdEVsZW1lbnQoY3VycmVudCkgfHwgdGhpcy5pc0NvbXBvbmVudChjdXJyZW50KSkgJiYgIXRoaXMuaXNSYW5nZUZvcm1hdEVsZW1lbnQoY3VycmVudC5wYXJlbnROb2RlKSAmJiAhdGhpcy5nZXRQYXJlbnRFbGVtZW50KGN1cnJlbnQsIHRoaXMuaXNDb21wb25lbnQpKSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0uYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByZW1vdmVUYWdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShyZW1vdmVUYWdzW2ldKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNoZWNrVGFncyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB3cm9uZ1RhZ3MubGVuZ3RoLCB0LCBwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdCA9IHdyb25nVGFnc1tpXTtcclxuICAgICAgICAgICAgcCA9IHQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgaWYgKCFwIHx8ICFwLnBhcmVudE5vZGUpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0UGFyZW50RWxlbWVudCh0LCB0aGlzLmlzTGlzdENlbGwpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsQ2hpbGRyZW4gPSB0LmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gY2VsbENoaWxkcmVuLmxlbmd0aCAtIDE7IGxlbiA+PSAwOyBqLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBwLmluc2VydEJlZm9yZSh0LCBjZWxsQ2hpbGRyZW5bal0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2hlY2tUYWdzLnB1c2godCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQsIHApO1xyXG4gICAgICAgICAgICAgICAgY2hlY2tUYWdzLnB1c2gocCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjaGVja1RhZ3MubGVuZ3RoLCB0OyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdCA9IGNoZWNrVGFnc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMub25seVplcm9XaWR0aFNwYWNlKHQudGV4dENvbnRlbnQudHJpbSgpKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZW1wdHlUYWdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShlbXB0eVRhZ3NbaV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHdyb25nTGlzdC5sZW5ndGgsIHQsIHRwLCBjaGlsZHJlbiwgcDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHQgPSB3cm9uZ0xpc3RbaV07XHJcbiAgICAgICAgICAgIHAgPSB0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGlmICghcCkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICB0cCA9IHRoaXMuY3JlYXRlRWxlbWVudCgnTEknKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRm9ybWF0RWxlbWVudCh0KSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4gPSB0LmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0cC5hcHBlbmRDaGlsZChjaGlsZHJlblswXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwLmluc2VydEJlZm9yZSh0cCwgdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0odCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ID0gdC5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgIHRwLmFwcGVuZENoaWxkKHdyb25nTGlzdFtpXSk7XHJcbiAgICAgICAgICAgICAgICBwLmluc2VydEJlZm9yZSh0cCwgdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB3aXRob3V0Rm9ybWF0Q2VsbHMubGVuZ3RoLCB0LCBmOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdCA9IHdpdGhvdXRGb3JtYXRDZWxsc1tpXTtcclxuICAgICAgICAgICAgZiA9IHRoaXMuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgIGYuaW5uZXJIVE1MID0gKHQudGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCA9PT0gMCAmJiB0LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgPyAnPGJyPicgOiB0LmlubmVySFRNTDtcclxuICAgICAgICAgICAgdC5pbm5lckhUTUwgPSBmLm91dGVySFRNTDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9zZXREZWZhdWx0T3B0aW9uU3R5bGU6IGZ1bmN0aW9uIChvcHRpb25zLCBkZWZhdWx0U3R5bGUpIHtcclxuICAgICAgICBsZXQgb3B0aW9uU3R5bGUgPSAnJztcclxuICAgICAgICBpZiAob3B0aW9ucy5oZWlnaHQpIG9wdGlvblN0eWxlICs9ICdoZWlnaHQ6JyArIG9wdGlvbnMuaGVpZ2h0ICsgJzsnO1xyXG4gICAgICAgIGlmIChvcHRpb25zLm1pbkhlaWdodCkgb3B0aW9uU3R5bGUgKz0gJ21pbi1oZWlnaHQ6JyArIG9wdGlvbnMubWluSGVpZ2h0ICsgJzsnO1xyXG4gICAgICAgIGlmIChvcHRpb25zLm1heEhlaWdodCkgb3B0aW9uU3R5bGUgKz0gJ21heC1oZWlnaHQ6JyArIG9wdGlvbnMubWF4SGVpZ2h0ICsgJzsnO1xyXG4gICAgICAgIGlmIChvcHRpb25zLnBvc2l0aW9uKSBvcHRpb25TdHlsZSArPSAncG9zaXRpb246JyArIG9wdGlvbnMucG9zaXRpb24gKyAnOyc7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMud2lkdGgpIG9wdGlvblN0eWxlICs9ICd3aWR0aDonICsgb3B0aW9ucy53aWR0aCArICc7JztcclxuICAgICAgICBpZiAob3B0aW9ucy5taW5XaWR0aCkgb3B0aW9uU3R5bGUgKz0gJ21pbi13aWR0aDonICsgb3B0aW9ucy5taW5XaWR0aCArICc7JztcclxuICAgICAgICBpZiAob3B0aW9ucy5tYXhXaWR0aCkgb3B0aW9uU3R5bGUgKz0gJ21heC13aWR0aDonICsgb3B0aW9ucy5tYXhXaWR0aCArICc7JztcclxuXHJcbiAgICAgICAgbGV0IHRvcCA9ICcnLCBmcmFtZSA9ICcnLCBlZGl0b3IgPSAnJztcclxuICAgICAgICBkZWZhdWx0U3R5bGUgPSBvcHRpb25TdHlsZSArIGRlZmF1bHRTdHlsZTtcclxuICAgICAgICBjb25zdCBzdHlsZUFyciA9IGRlZmF1bHRTdHlsZS5zcGxpdCgnOycpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzdHlsZUFyci5sZW5ndGgsIHM7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gc3R5bGVBcnJbaV0udHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIXMpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAoL14obWluLXxtYXgtKT93aWR0aFxccyo6Ly50ZXN0KHMpIHx8IC9eKHotaW5kZXh8cG9zaXRpb24pXFxzKjovLnRlc3QocykpIHtcclxuICAgICAgICAgICAgICAgIHRvcCArPSBzICsgJzsnO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKC9eKG1pbi18bWF4LSk/aGVpZ2h0XFxzKjovLnRlc3QocykpIHtcclxuICAgICAgICAgICAgICAgIGlmICgvXmhlaWdodC8udGVzdChzKSAmJiBzLnNwbGl0KCc6JylbMV0udHJpbSgpID09PSAnYXV0bycpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmhlaWdodCA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZyYW1lICs9IHMgKyAnOyc7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlZGl0b3IgKz0gcyArICc7JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRvcDogdG9wLFxyXG4gICAgICAgICAgICBmcmFtZTogZnJhbWUsXHJcbiAgICAgICAgICAgIGVkaXRvcjogZWRpdG9yXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldElmcmFtZURvY3VtZW50OiBmdW5jdGlvbiAoZnJhbWUsIG9wdGlvbnMpIHtcclxuICAgICAgICBmcmFtZS5zZXRBdHRyaWJ1dGUoJ3Njcm9sbGluZycsICdhdXRvJyk7XHJcbiAgICAgICAgZnJhbWUuY29udGVudERvY3VtZW50LmhlYWQuaW5uZXJIVE1MID0gJycgK1xyXG4gICAgICAgICAgICAnPG1ldGEgY2hhcnNldD1cInV0Zi04XCIgLz4nICtcclxuICAgICAgICAgICAgJzxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSwgbWF4aW11bS1zY2FsZT0xXCI+JyArXHJcbiAgICAgICAgICAgIHRoaXMuX3NldElmcmFtZUNzc1RhZ3Mob3B0aW9ucyk7XHJcbiAgICAgICAgZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuY2xhc3NOYW1lID0gb3B0aW9ucy5fZWRpdGFibGVDbGFzcztcclxuICAgICAgICBmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIHRydWUpO1xyXG4gICAgICAgIGZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgnYXV0b2NvcnJlY3QnLCBcIm9mZlwiKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldElmcmFtZUNzc1RhZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgbGlua05hbWVzID0gb3B0aW9ucy5pZnJhbWVDU1NGaWxlTmFtZTtcclxuICAgICAgICBjb25zdCB3UmVnRXhwID0gdGhpcy5fdy5SZWdFeHA7XHJcbiAgICAgICAgbGV0IHRhZ1N0cmluZyA9ICcnO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBmID0gMCwgbGVuID0gbGlua05hbWVzLmxlbmd0aCwgcGF0aDsgZiA8IGxlbjsgZisrKSB7XHJcbiAgICAgICAgICAgIHBhdGggPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGlmICgvKF5odHRwcz86XFwvXFwvKXwoXmRhdGE6dGV4dFxcL2NzcywpLy50ZXN0KGxpbmtOYW1lc1tmXSkpIHtcclxuICAgICAgICAgICAgICAgIHBhdGgucHVzaChsaW5rTmFtZXNbZl0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgQ1NTRmlsZU5hbWUgPSBuZXcgd1JlZ0V4cCgnKF58LipbXFxcXC9dKScgKyBsaW5rTmFtZXNbZl0gKyAnKFxcXFwuLispP1xcXFwuY3NzKD86XFxcXD8uKnw7LiopPyQnLCAnaScpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaW5rJyksIGkgPSAwLCBsZW4gPSBjLmxlbmd0aCwgc3R5bGVUYWc7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlVGFnID0gY1tpXS5ocmVmLm1hdGNoKENTU0ZpbGVOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGVUYWcpIHBhdGgucHVzaChzdHlsZVRhZ1swXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghcGF0aCB8fCBwYXRoLmxlbmd0aCA9PT0gMCkgdGhyb3cgJ1tTVU5FRElUT1IuY29uc3RydWN0b3IuaWZyYW1lLmZhaWxdIFRoZSBzdW5lZGl0b3IgQ1NTIGZpbGVzIGluc3RhbGxhdGlvbiBwYXRoIGNvdWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkLiBQbGVhc2Ugc2V0IHRoZSBvcHRpb24gcHJvcGVydHkgXCJpZnJhbWVDU1NGaWxlTmFtZVwiIGJlZm9yZSBjcmVhdGluZyBlZGl0b3IgaW5zdGFuY2VzLic7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcGF0aC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGFnU3RyaW5nICs9ICc8bGluayBocmVmPVwiJyArIHBhdGhbaV0gKyAnXCIgcmVsPVwic3R5bGVzaGVldFwiPic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0YWdTdHJpbmcgKyAob3B0aW9ucy5oZWlnaHQgPT09ICdhdXRvJyA/ICc8c3R5bGU+XFxuLyoqIElmcmFtZSBoZWlnaHQgYXV0byAqL1xcbmJvZHl7aGVpZ2h0OiBtaW4tY29udGVudDsgb3ZlcmZsb3c6IGhpZGRlbjt9XFxuPC9zdHlsZT4nIDogJycpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdXRpbDsiLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuaW1wb3J0IF9pY29ucyBmcm9tICcuLi9hc3NldHMvZGVmYXVsdEljb25zJztcclxuaW1wb3J0IF9kZWZhdWx0TGFuZyBmcm9tICcuLi9sYW5nL2VuJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi91dGlsJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIGRvY3VtZW50IGNyZWF0ZVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRleHRhcmVhXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBPcHRpb25zXHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIG9wdGlvbnMgPSB7fTtcclxuXHJcbiAgICAgICAgY29uc3QgZG9jID0gZG9jdW1lbnQ7XHJcblxyXG4gICAgICAgIC8qKiAtLS0gaW5pdCBvcHRpb25zIC0tLSAqL1xyXG4gICAgICAgIHRoaXMuX2luaXRPcHRpb25zKGVsZW1lbnQsIG9wdGlvbnMpO1xyXG4gICAgXHJcbiAgICAgICAgLy8gc3VuZWRpdG9yIGRpdlxyXG4gICAgICAgIGNvbnN0IHRvcF9kaXYgPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgdG9wX2Rpdi5jbGFzc05hbWUgPSAnc3VuLWVkaXRvcicgKyAob3B0aW9ucy5ydGwgPyAnIHNlLXJ0bCcgOiAnJyk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuaWQpIHRvcF9kaXYuaWQgPSAnc3VuZWRpdG9yXycgKyBlbGVtZW50LmlkO1xyXG4gICAgXHJcbiAgICAgICAgLy8gcmVsYXRpdmUgZGl2XHJcbiAgICAgICAgY29uc3QgcmVsYXRpdmUgPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgcmVsYXRpdmUuY2xhc3NOYW1lID0gJ3NlLWNvbnRhaW5lcic7XHJcbiAgICBcclxuICAgICAgICAvLyB0b29sYmFyXHJcbiAgICAgICAgY29uc3QgdG9vbF9iYXIgPSB0aGlzLl9jcmVhdGVUb29sQmFyKGRvYywgb3B0aW9ucy5idXR0b25MaXN0LCBvcHRpb25zLnBsdWdpbnMsIG9wdGlvbnMpO1xyXG4gICAgICAgIGNvbnN0IHRvb2xiYXJTaGFkb3cgPSB0b29sX2Jhci5lbGVtZW50LmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgdG9vbGJhclNoYWRvdy5jbGFzc05hbWUgKz0gJyBzZS10b29sYmFyLXNoYWRvdyc7XHJcbiAgICAgICAgdG9vbF9iYXIuZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgaWYgKHRvb2xfYmFyLnBsdWdpbkNhbGxCdXR0b25zLm1hdGgpIHRoaXMuX2NoZWNrS2F0ZXhNYXRoKG9wdGlvbnMua2F0ZXgpO1xyXG4gICAgICAgIGNvbnN0IGFycm93ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGFycm93LmNsYXNzTmFtZSA9ICdzZS1hcnJvdyc7XHJcblxyXG4gICAgICAgIC8vIHN0aWNreSB0b29sYmFyIGR1bW15XHJcbiAgICAgICAgY29uc3Qgc3RpY2t5X2R1bW15ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIHN0aWNreV9kdW1teS5jbGFzc05hbWUgPSAnc2UtdG9vbGJhci1zdGlja3ktZHVtbXknO1xyXG4gICAgXHJcbiAgICAgICAgLy8gaW5uZXIgZWRpdG9yIGRpdlxyXG4gICAgICAgIGNvbnN0IGVkaXRvcl9kaXYgPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgZWRpdG9yX2Rpdi5jbGFzc05hbWUgPSAnc2Utd3JhcHBlcic7XHJcblxyXG4gICAgICAgIC8qKiAtLS0gaW5pdCBlbGVtZW50cyBhbmQgY3JlYXRlIGJvdHRvbSBiYXIgLS0tICovXHJcbiAgICAgICAgY29uc3QgaW5pdEVsZW1lbnRzID0gdGhpcy5faW5pdEVsZW1lbnRzKG9wdGlvbnMsIHRvcF9kaXYsIHRvb2xfYmFyLmVsZW1lbnQsIGFycm93KTtcclxuXHJcbiAgICAgICAgY29uc3QgYm90dG9tQmFyID0gaW5pdEVsZW1lbnRzLmJvdHRvbUJhcjtcclxuICAgICAgICBjb25zdCB3eXNpd3lnX2RpdiA9IGluaXRFbGVtZW50cy53eXNpd3lnRnJhbWU7XHJcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJfc3BhbiA9IGluaXRFbGVtZW50cy5wbGFjZWhvbGRlcjtcclxuICAgICAgICBsZXQgdGV4dGFyZWEgPSBpbml0RWxlbWVudHMuY29kZVZpZXc7XHJcblxyXG4gICAgICAgIC8vIHJlc2l6aW5nIGJhclxyXG4gICAgICAgIGNvbnN0IHJlc2l6aW5nX2JhciA9IGJvdHRvbUJhci5yZXNpemluZ0JhcjtcclxuICAgICAgICBjb25zdCBuYXZpZ2F0aW9uID0gYm90dG9tQmFyLm5hdmlnYXRpb247XHJcbiAgICAgICAgY29uc3QgY2hhcl93cmFwcGVyID0gYm90dG9tQmFyLmNoYXJXcmFwcGVyO1xyXG4gICAgICAgIGNvbnN0IGNoYXJfY291bnRlciA9IGJvdHRvbUJhci5jaGFyQ291bnRlcjtcclxuICAgIFxyXG4gICAgICAgIC8vIGxvYWRpbmcgYm94XHJcbiAgICAgICAgY29uc3QgbG9hZGluZ19ib3ggPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgbG9hZGluZ19ib3guY2xhc3NOYW1lID0gJ3NlLWxvYWRpbmctYm94IHN1bi1lZGl0b3ItY29tbW9uJztcclxuICAgICAgICBsb2FkaW5nX2JveC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cInNlLWxvYWRpbmctZWZmZWN0XCI+PC9kaXY+JztcclxuXHJcbiAgICAgICAgLy8gZW50ZXIgbGluZVxyXG4gICAgICAgIGNvbnN0IGxpbmVfYnJlYWtlciA9IGRvYy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICBsaW5lX2JyZWFrZXIuY2xhc3NOYW1lID0gJ3NlLWxpbmUtYnJlYWtlcic7XHJcbiAgICAgICAgbGluZV9icmVha2VyLmlubmVySFRNTCA9ICc8YnV0dG9uIGNsYXNzPVwic2UtYnRuXCI+JyArIG9wdGlvbnMuaWNvbnMubGluZV9icmVhayArICc8L2J1dHRvbj4nO1xyXG4gICAgICAgIGNvbnN0IGxpbmVfYnJlYWtlcl90ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGxpbmVfYnJlYWtlcl90LmNsYXNzTmFtZSArPSAnc2UtbGluZS1icmVha2VyLWNvbXBvbmVudCc7XHJcbiAgICAgICAgY29uc3QgbGluZV9icmVha2VyX2IgPSBsaW5lX2JyZWFrZXJfdC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgbGluZV9icmVha2VyX3QuaW5uZXJIVE1MID0gbGluZV9icmVha2VyX2IuaW5uZXJIVE1MID0gb3B0aW9ucy5pY29ucy5saW5lX2JyZWFrO1xyXG4gICAgXHJcbiAgICAgICAgLy8gcmVzaXplIG9wZXJhdGlvbiBiYWNrZ3JvdW5kXHJcbiAgICAgICAgY29uc3QgcmVzaXplX2JhY2sgPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgcmVzaXplX2JhY2suY2xhc3NOYW1lID0gJ3NlLXJlc2l6aW5nLWJhY2snO1xyXG5cclxuICAgICAgICAvLy8gZm9jdXMgdGVtcFxyXG4gICAgICAgIGNvbnN0IGZvY3VzVGVtcCA9IGRvYy5jcmVhdGVFbGVtZW50KCdJTlBVVCcpO1xyXG4gICAgICAgIGZvY3VzVGVtcC50YWJJbmRleCA9IC0xO1xyXG4gICAgICAgIGZvY3VzVGVtcC5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50OyB0b3A6IC0xMDAwMHB4ICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IHdpZHRoOiAwICFpbXBvcnRhbnQ7IGhlaWdodDogMCAhaW1wb3J0YW50OyBtYXJnaW46IDAgIWltcG9ydGFudDsgcGFkZGluZzogMCAhaW1wb3J0YW50Oyc7XHJcblxyXG4gICAgICAgIC8vIHRvb2xiYXIgY29udGFpbmVyXHJcbiAgICAgICAgY29uc3QgdG9vbGJhckNvbnRhaW5lciA9IG9wdGlvbnMudG9vbGJhckNvbnRhaW5lcjtcclxuICAgICAgICBpZiAodG9vbGJhckNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICB0b29sYmFyQ29udGFpbmVyLmFwcGVuZENoaWxkKHRvb2xfYmFyLmVsZW1lbnQpO1xyXG4gICAgICAgICAgICB0b29sYmFyQ29udGFpbmVyLmFwcGVuZENoaWxkKHRvb2xiYXJTaGFkb3cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVzaXppbmdiYXJcclxuICAgICAgICBjb25zdCByZXNpemluZ0JhckNvbnRhaW5lciA9IG9wdGlvbnMucmVzaXppbmdCYXJDb250YWluZXI7XHJcbiAgICAgICAgaWYgKHJlc2l6aW5nX2JhciAmJiByZXNpemluZ0JhckNvbnRhaW5lcikgcmVzaXppbmdCYXJDb250YWluZXIuYXBwZW5kQ2hpbGQocmVzaXppbmdfYmFyKTtcclxuICAgIFxyXG4gICAgICAgIC8qKiBhcHBlbmQgaHRtbCAqL1xyXG4gICAgICAgIGVkaXRvcl9kaXYuYXBwZW5kQ2hpbGQodGV4dGFyZWEpO1xyXG4gICAgICAgIGlmIChwbGFjZWhvbGRlcl9zcGFuKSBlZGl0b3JfZGl2LmFwcGVuZENoaWxkKHBsYWNlaG9sZGVyX3NwYW4pO1xyXG4gICAgICAgIGlmICghdG9vbGJhckNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICByZWxhdGl2ZS5hcHBlbmRDaGlsZCh0b29sX2Jhci5lbGVtZW50KTtcclxuICAgICAgICAgICAgcmVsYXRpdmUuYXBwZW5kQ2hpbGQodG9vbGJhclNoYWRvdyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbGF0aXZlLmFwcGVuZENoaWxkKHN0aWNreV9kdW1teSk7XHJcbiAgICAgICAgcmVsYXRpdmUuYXBwZW5kQ2hpbGQoZWRpdG9yX2Rpdik7XHJcbiAgICAgICAgcmVsYXRpdmUuYXBwZW5kQ2hpbGQocmVzaXplX2JhY2spO1xyXG4gICAgICAgIHJlbGF0aXZlLmFwcGVuZENoaWxkKGxvYWRpbmdfYm94KTtcclxuICAgICAgICByZWxhdGl2ZS5hcHBlbmRDaGlsZChsaW5lX2JyZWFrZXIpO1xyXG4gICAgICAgIHJlbGF0aXZlLmFwcGVuZENoaWxkKGxpbmVfYnJlYWtlcl90KTtcclxuICAgICAgICByZWxhdGl2ZS5hcHBlbmRDaGlsZChsaW5lX2JyZWFrZXJfYik7XHJcbiAgICAgICAgcmVsYXRpdmUuYXBwZW5kQ2hpbGQoZm9jdXNUZW1wKTtcclxuICAgICAgICBpZiAocmVzaXppbmdfYmFyICYmICFyZXNpemluZ0JhckNvbnRhaW5lcikgcmVsYXRpdmUuYXBwZW5kQ2hpbGQocmVzaXppbmdfYmFyKTtcclxuICAgICAgICB0b3BfZGl2LmFwcGVuZENoaWxkKHJlbGF0aXZlKTtcclxuXHJcbiAgICAgICAgdGV4dGFyZWEgPSB0aGlzLl9jaGVja0NvZGVNaXJyb3Iob3B0aW9ucywgdGV4dGFyZWEpO1xyXG4gICAgXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY29uc3RydWN0ZWQ6IHtcclxuICAgICAgICAgICAgICAgIF90b3A6IHRvcF9kaXYsXHJcbiAgICAgICAgICAgICAgICBfcmVsYXRpdmU6IHJlbGF0aXZlLFxyXG4gICAgICAgICAgICAgICAgX3Rvb2xCYXI6IHRvb2xfYmFyLmVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBfdG9vbGJhclNoYWRvdzogdG9vbGJhclNoYWRvdyxcclxuICAgICAgICAgICAgICAgIF9tZW51VHJheTogdG9vbF9iYXIuX21lbnVUcmF5LFxyXG4gICAgICAgICAgICAgICAgX2VkaXRvckFyZWE6IGVkaXRvcl9kaXYsXHJcbiAgICAgICAgICAgICAgICBfd3lzaXd5Z0FyZWE6IHd5c2l3eWdfZGl2LFxyXG4gICAgICAgICAgICAgICAgX2NvZGVBcmVhOiB0ZXh0YXJlYSxcclxuICAgICAgICAgICAgICAgIF9wbGFjZWhvbGRlcjogcGxhY2Vob2xkZXJfc3BhbixcclxuICAgICAgICAgICAgICAgIF9yZXNpemluZ0JhcjogcmVzaXppbmdfYmFyLFxyXG4gICAgICAgICAgICAgICAgX25hdmlnYXRpb246IG5hdmlnYXRpb24sXHJcbiAgICAgICAgICAgICAgICBfY2hhcldyYXBwZXI6IGNoYXJfd3JhcHBlcixcclxuICAgICAgICAgICAgICAgIF9jaGFyQ291bnRlcjogY2hhcl9jb3VudGVyLFxyXG4gICAgICAgICAgICAgICAgX2xvYWRpbmc6IGxvYWRpbmdfYm94LFxyXG4gICAgICAgICAgICAgICAgX2xpbmVCcmVha2VyOiBsaW5lX2JyZWFrZXIsXHJcbiAgICAgICAgICAgICAgICBfbGluZUJyZWFrZXJfdDogbGluZV9icmVha2VyX3QsXHJcbiAgICAgICAgICAgICAgICBfbGluZUJyZWFrZXJfYjogbGluZV9icmVha2VyX2IsXHJcbiAgICAgICAgICAgICAgICBfcmVzaXplQmFjazogcmVzaXplX2JhY2ssXHJcbiAgICAgICAgICAgICAgICBfc3RpY2t5RHVtbXk6IHN0aWNreV9kdW1teSxcclxuICAgICAgICAgICAgICAgIF9hcnJvdzogYXJyb3csXHJcbiAgICAgICAgICAgICAgICBfZm9jdXNUZW1wOiBmb2N1c1RlbXBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcclxuICAgICAgICAgICAgcGx1Z2luczogdG9vbF9iYXIucGx1Z2lucyxcclxuICAgICAgICAgICAgcGx1Z2luQ2FsbEJ1dHRvbnM6IHRvb2xfYmFyLnBsdWdpbkNhbGxCdXR0b25zLFxyXG4gICAgICAgICAgICBfcmVzcG9uc2l2ZUJ1dHRvbnM6IHRvb2xfYmFyLnJlc3BvbnNpdmVCdXR0b25zXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgdGhlIENvZGVNaXJyb3Igb3B0aW9uIHRvIGFwcGx5IHRoZSBDb2RlTWlycm9yIGFuZCByZXR1cm4gdGhlIENvZGVNaXJyb3IgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIG9wdGlvbnNcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdGV4dGFyZWEgdGV4dGFyZWEgZWxlbWVudFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX2NoZWNrQ29kZU1pcnJvcjogZnVuY3Rpb24gKG9wdGlvbnMsIHRleHRhcmVhKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuY29kZU1pcnJvcikge1xyXG4gICAgICAgICAgICBjb25zdCBjbU9wdGlvbnMgPSBbe1xyXG4gICAgICAgICAgICAgICAgbW9kZTogJ2h0bWxtaXhlZCcsXHJcbiAgICAgICAgICAgICAgICBodG1sTW9kZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbGluZVdyYXBwaW5nOiB0cnVlXHJcbiAgICAgICAgICAgIH0sIChvcHRpb25zLmNvZGVNaXJyb3Iub3B0aW9ucyB8fCB7fSldLnJlZHVjZShmdW5jdGlvbiAoaW5pdCwgb3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gb3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaGFzT3duKG9wdGlvbiwga2V5KSkgaW5pdFtrZXldID0gb3B0aW9uW2tleV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5pdDtcclxuICAgICAgICAgICAgfSwge30pO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGVpZ2h0ID09PSAnYXV0bycpIHtcclxuICAgICAgICAgICAgICAgIGNtT3B0aW9ucy52aWV3cG9ydE1hcmdpbiA9IEluZmluaXR5O1xyXG4gICAgICAgICAgICAgICAgY21PcHRpb25zLmhlaWdodCA9ICdhdXRvJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgY20gPSBvcHRpb25zLmNvZGVNaXJyb3Iuc3JjLmZyb21UZXh0QXJlYSh0ZXh0YXJlYSwgY21PcHRpb25zKTtcclxuICAgICAgICAgICAgY20uZGlzcGxheS53cmFwcGVyLnN0eWxlLmNzc1RleHQgPSB0ZXh0YXJlYS5zdHlsZS5jc3NUZXh0O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgb3B0aW9ucy5jb2RlTWlycm9yRWRpdG9yID0gY207XHJcbiAgICAgICAgICAgIHRleHRhcmVhID0gY20uZGlzcGxheS53cmFwcGVyO1xyXG4gICAgICAgICAgICB0ZXh0YXJlYS5jbGFzc05hbWUgKz0gJyBzZS13cmFwcGVyLWNvZGUtbWlycm9yJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0YXJlYTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2sgZm9yIGEga2F0ZXggb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGthdGV4IGthdGV4IG9iamVjdFxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX2NoZWNrS2F0ZXhNYXRoOiBmdW5jdGlvbiAoa2F0ZXgpIHtcclxuICAgICAgICBpZiAoIWthdGV4KSB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5jcmVhdGUuZmFpbF0gVG8gdXNlIHRoZSBtYXRoIGJ1dHRvbiB5b3UgbmVlZCB0byBhZGQgYSBcImthdGV4XCIgb2JqZWN0IHRvIHRoZSBvcHRpb25zLicpO1xyXG5cclxuICAgICAgICBjb25zdCBrYXRleE9wdGlvbnMgPSBbe1xyXG4gICAgICAgICAgICB0aHJvd09uRXJyb3I6IGZhbHNlLFxyXG4gICAgICAgIH0sIChrYXRleC5vcHRpb25zIHx8IHt9KV0ucmVkdWNlKGZ1bmN0aW9uIChpbml0LCBvcHRpb24pIHtcclxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIG9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaGFzT3duKG9wdGlvbiwga2V5KSkgaW5pdFtrZXldID0gb3B0aW9uW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGluaXQ7XHJcbiAgICAgICAgfSwge30pO1xyXG5cclxuICAgICAgICBrYXRleC5vcHRpb25zID0ga2F0ZXhPcHRpb25zO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBBZGQgb3IgcmVzZXQgb3B0aW9uc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG1lcmdlT3B0aW9ucyBOZXcgb3B0aW9ucyBwcm9wZXJ0eVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgQ29udGV4dCBvYmplY3Qgb2YgY29yZVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9yaWdpbk9wdGlvbnMgT3JpZ2luIG9wdGlvbnNcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHBsdWdpbkNhbGxCdXR0b25zXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfc2V0T3B0aW9uczogZnVuY3Rpb24gKG1lcmdlT3B0aW9ucywgY29udGV4dCwgb3JpZ2luT3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuX2luaXRPcHRpb25zKGNvbnRleHQuZWxlbWVudC5vcmlnaW5FbGVtZW50LCBtZXJnZU9wdGlvbnMpO1xyXG5cclxuICAgICAgICBjb25zdCBlbCA9IGNvbnRleHQuZWxlbWVudDtcclxuICAgICAgICBjb25zdCByZWxhdGl2ZSA9IGVsLnJlbGF0aXZlO1xyXG4gICAgICAgIGNvbnN0IGVkaXRvckFyZWEgPSBlbC5lZGl0b3JBcmVhO1xyXG4gICAgICAgIGNvbnN0IGlzTmV3VG9vbGJhckNvbnRhaW5lciA9IG1lcmdlT3B0aW9ucy50b29sYmFyQ29udGFpbmVyICYmIG1lcmdlT3B0aW9ucy50b29sYmFyQ29udGFpbmVyICE9PSBvcmlnaW5PcHRpb25zLnRvb2xiYXJDb250YWluZXI7XHJcbiAgICAgICAgY29uc3QgaXNOZXdUb29sYmFyID0gbWVyZ2VPcHRpb25zLmxhbmcgIT09IG9yaWdpbk9wdGlvbnMubGFuZyB8fCBtZXJnZU9wdGlvbnMuYnV0dG9uTGlzdCAhPT0gb3JpZ2luT3B0aW9ucy5idXR0b25MaXN0IHx8IG1lcmdlT3B0aW9ucy5tb2RlICE9PSBvcmlnaW5PcHRpb25zLm1vZGUgfHwgaXNOZXdUb29sYmFyQ29udGFpbmVyO1xyXG5cclxuICAgICAgICBjb25zdCB0b29sX2JhciA9IHRoaXMuX2NyZWF0ZVRvb2xCYXIoZG9jdW1lbnQsIChpc05ld1Rvb2xiYXIgPyBtZXJnZU9wdGlvbnMuYnV0dG9uTGlzdCA6IG9yaWdpbk9wdGlvbnMuYnV0dG9uTGlzdCksIG1lcmdlT3B0aW9ucy5wbHVnaW5zLCBtZXJnZU9wdGlvbnMpO1xyXG4gICAgICAgIGlmICh0b29sX2Jhci5wbHVnaW5DYWxsQnV0dG9ucy5tYXRoKSB0aGlzLl9jaGVja0thdGV4TWF0aChtZXJnZU9wdGlvbnMua2F0ZXgpO1xyXG4gICAgICAgIGNvbnN0IGFycm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgYXJyb3cuY2xhc3NOYW1lID0gJ3NlLWFycm93JztcclxuXHJcbiAgICAgICAgaWYgKGlzTmV3VG9vbGJhcikge1xyXG4gICAgICAgICAgICB0b29sX2Jhci5lbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgICAgICAgLy8gdG9vbGJhciBjb250YWluZXJcclxuICAgICAgICAgICAgaWYgKGlzTmV3VG9vbGJhckNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgbWVyZ2VPcHRpb25zLnRvb2xiYXJDb250YWluZXIuYXBwZW5kQ2hpbGQodG9vbF9iYXIuZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICBlbC50b29sYmFyLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZWwudG9vbGJhcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbC50b29sYmFyLnBhcmVudEVsZW1lbnQucmVwbGFjZUNoaWxkKHRvb2xfYmFyLmVsZW1lbnQsIGVsLnRvb2xiYXIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbC50b29sYmFyID0gdG9vbF9iYXIuZWxlbWVudDtcclxuICAgICAgICAgICAgZWwuX21lbnVUcmF5ID0gdG9vbF9iYXIuX21lbnVUcmF5O1xyXG4gICAgICAgICAgICBlbC5fYXJyb3cgPSBhcnJvdztcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgaW5pdEVsZW1lbnRzID0gdGhpcy5faW5pdEVsZW1lbnRzKG1lcmdlT3B0aW9ucywgZWwudG9wQXJlYSwgKGlzTmV3VG9vbGJhciA/IHRvb2xfYmFyLmVsZW1lbnQgOiBlbC50b29sYmFyKSwgYXJyb3cpO1xyXG5cclxuICAgICAgICBjb25zdCBib3R0b21CYXIgPSBpbml0RWxlbWVudHMuYm90dG9tQmFyO1xyXG4gICAgICAgIGNvbnN0IHd5c2l3eWdGcmFtZSA9IGluaXRFbGVtZW50cy53eXNpd3lnRnJhbWU7XHJcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJfc3BhbiA9IGluaXRFbGVtZW50cy5wbGFjZWhvbGRlcjtcclxuICAgICAgICBsZXQgY29kZSA9IGluaXRFbGVtZW50cy5jb2RlVmlldztcclxuXHJcbiAgICAgICAgaWYgKGVsLnJlc2l6aW5nQmFyKSB1dGlsLnJlbW92ZUl0ZW0oZWwucmVzaXppbmdCYXIpO1xyXG4gICAgICAgIGlmIChib3R0b21CYXIucmVzaXppbmdCYXIpIHtcclxuICAgICAgICAgICAgaWYgKG1lcmdlT3B0aW9ucy5yZXNpemluZ0JhckNvbnRhaW5lciAmJiBtZXJnZU9wdGlvbnMucmVzaXppbmdCYXJDb250YWluZXIgIT09IG9yaWdpbk9wdGlvbnMucmVzaXppbmdCYXJDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIG1lcmdlT3B0aW9ucy5yZXNpemluZ0JhckNvbnRhaW5lci5hcHBlbmRDaGlsZChib3R0b21CYXIucmVzaXppbmdCYXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmUuYXBwZW5kQ2hpbGQoYm90dG9tQmFyLnJlc2l6aW5nQmFyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWRpdG9yQXJlYS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBlZGl0b3JBcmVhLmFwcGVuZENoaWxkKGNvZGUpO1xyXG4gICAgICAgIGlmIChwbGFjZWhvbGRlcl9zcGFuKSBlZGl0b3JBcmVhLmFwcGVuZENoaWxkKHBsYWNlaG9sZGVyX3NwYW4pO1xyXG5cclxuICAgICAgICBjb2RlID0gdGhpcy5fY2hlY2tDb2RlTWlycm9yKG1lcmdlT3B0aW9ucywgY29kZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZWwucmVzaXppbmdCYXIgPSBib3R0b21CYXIucmVzaXppbmdCYXI7XHJcbiAgICAgICAgZWwubmF2aWdhdGlvbiA9IGJvdHRvbUJhci5uYXZpZ2F0aW9uO1xyXG4gICAgICAgIGVsLmNoYXJXcmFwcGVyID0gYm90dG9tQmFyLmNoYXJXcmFwcGVyO1xyXG4gICAgICAgIGVsLmNoYXJDb3VudGVyID0gYm90dG9tQmFyLmNoYXJDb3VudGVyO1xyXG4gICAgICAgIGVsLnd5c2l3eWdGcmFtZSA9IHd5c2l3eWdGcmFtZTtcclxuICAgICAgICBlbC5jb2RlID0gY29kZTtcclxuICAgICAgICBlbC5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyX3NwYW47XHJcblxyXG4gICAgICAgIGlmIChtZXJnZU9wdGlvbnMucnRsKSB1dGlsLmFkZENsYXNzKGVsLnRvcEFyZWEsICdzZS1ydGwnKTtcclxuICAgICAgICBlbHNlIHV0aWwucmVtb3ZlQ2xhc3MoZWwudG9wQXJlYSwgJ3NlLXJ0bCcpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjYWxsQnV0dG9uczogdG9vbF9iYXIucGx1Z2luQ2FsbEJ1dHRvbnMsXHJcbiAgICAgICAgICAgIHBsdWdpbnM6IHRvb2xfYmFyLnBsdWdpbnMsXHJcbiAgICAgICAgICAgIHRvb2xiYXI6IHRvb2xfYmFyXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZSBwcm9wZXJ0eSBvZiBzdW5lZGl0b3IgZWxlbWVudHNcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIE9wdGlvbnNcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdG9wRGl2IFN1bmVkaXRvciB0b3AgZGl2XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRvb2xCYXIgVG9vbCBiYXJcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdG9vbEJhckFycm93IFRvb2wgYmFyIGFycm93IChiYWxsb29uIGVkaXRvcilcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IEJvdHRvbSBiYXIgZWxlbWVudHMgKHJlc2l6aW5nQmFyLCBuYXZpZ2F0aW9uLCBjaGFyV3JhcHBlciwgY2hhckNvdW50ZXIpXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfaW5pdEVsZW1lbnRzOiBmdW5jdGlvbiAob3B0aW9ucywgdG9wRGl2LCB0b29sQmFyLCB0b29sQmFyQXJyb3cpIHtcclxuICAgICAgICAvKiogdG9wIGRpdiAqL1xyXG4gICAgICAgIHRvcERpdi5zdHlsZS5jc3NUZXh0ID0gb3B0aW9ucy5fZWRpdG9yU3R5bGVzLnRvcDtcclxuXHJcbiAgICAgICAgLyoqIHRvb2xiYXIgKi9cclxuICAgICAgICBpZiAoL2lubGluZS9pLnRlc3Qob3B0aW9ucy5tb2RlKSkge1xyXG4gICAgICAgICAgICB0b29sQmFyLmNsYXNzTmFtZSArPSAnIHNlLXRvb2xiYXItaW5saW5lJztcclxuICAgICAgICAgICAgdG9vbEJhci5zdHlsZS53aWR0aCA9IG9wdGlvbnMudG9vbGJhcldpZHRoO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoL2JhbGxvb24vaS50ZXN0KG9wdGlvbnMubW9kZSkpIHtcclxuICAgICAgICAgICAgdG9vbEJhci5jbGFzc05hbWUgKz0gJyBzZS10b29sYmFyLWJhbGxvb24nO1xyXG4gICAgICAgICAgICB0b29sQmFyLnN0eWxlLndpZHRoID0gb3B0aW9ucy50b29sYmFyV2lkdGg7XHJcbiAgICAgICAgICAgIHRvb2xCYXIuYXBwZW5kQ2hpbGQodG9vbEJhckFycm93KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKiBlZGl0b3IgKi9cclxuICAgICAgICAvLyB3eXNpd3lnIGRpdiBvciBpZnJhbWVcclxuICAgICAgICBjb25zdCB3eXNpd3lnRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCghb3B0aW9ucy5pZnJhbWUgPyAnRElWJyA6ICdJRlJBTUUnKTtcclxuICAgICAgICB3eXNpd3lnRGl2LmNsYXNzTmFtZSA9ICdzZS13cmFwcGVyLWlubmVyIHNlLXdyYXBwZXItd3lzaXd5Zyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCFvcHRpb25zLmlmcmFtZSkge1xyXG4gICAgICAgICAgICB3eXNpd3lnRGl2LnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHd5c2l3eWdEaXYuc2V0QXR0cmlidXRlKCdhdXRvY29ycmVjdCcsIFwib2ZmXCIpO1xyXG4gICAgICAgICAgICB3eXNpd3lnRGl2LnNldEF0dHJpYnV0ZSgnc2Nyb2xsaW5nJywgJ2F1dG8nKTtcclxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIG9wdGlvbnMuaWZyYW1lQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgd3lzaXd5Z0Rpdi5zZXRBdHRyaWJ1dGUoa2V5LCBvcHRpb25zLmlmcmFtZUF0dHJpYnV0ZXNba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd3lzaXd5Z0Rpdi5jbGFzc05hbWUgKz0gJyAnICsgb3B0aW9ucy5fZWRpdGFibGVDbGFzcztcclxuICAgICAgICAgICAgd3lzaXd5Z0Rpdi5zdHlsZS5jc3NUZXh0ID0gb3B0aW9ucy5fZWRpdG9yU3R5bGVzLmZyYW1lICsgb3B0aW9ucy5fZWRpdG9yU3R5bGVzLmVkaXRvcjtcclxuICAgICAgICAgICAgd3lzaXd5Z0Rpdi5jbGFzc05hbWUgKz0gb3B0aW9ucy5jbGFzc05hbWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd3lzaXd5Z0Rpdi5hbGxvd0Z1bGxzY3JlZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICB3eXNpd3lnRGl2LmZyYW1lQm9yZGVyID0gMDtcclxuICAgICAgICAgICAgd3lzaXd5Z0Rpdi5zdHlsZS5jc3NUZXh0ID0gb3B0aW9ucy5fZWRpdG9yU3R5bGVzLmZyYW1lO1xyXG4gICAgICAgICAgICB3eXNpd3lnRGl2LmNsYXNzTmFtZSArPSBvcHRpb25zLmNsYXNzTmFtZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRleHRhcmVhIGZvciBjb2RlIHZpZXdcclxuICAgICAgICBjb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1RFWFRBUkVBJyk7XHJcbiAgICAgICAgdGV4dGFyZWEuY2xhc3NOYW1lID0gJ3NlLXdyYXBwZXItaW5uZXIgc2Utd3JhcHBlci1jb2RlJyArIG9wdGlvbnMuY2xhc3NOYW1lO1xyXG4gICAgICAgIHRleHRhcmVhLnN0eWxlLmNzc1RleHQgPSBvcHRpb25zLl9lZGl0b3JTdHlsZXMuZnJhbWU7XHJcbiAgICAgICAgdGV4dGFyZWEuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICBpZiAob3B0aW9ucy5oZWlnaHQgPT09ICdhdXRvJykgdGV4dGFyZWEuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcclxuXHJcbiAgICAgICAgLyoqIHJlc2l6ZSBiYXIgKi9cclxuICAgICAgICBsZXQgcmVzaXppbmdCYXIgPSBudWxsO1xyXG4gICAgICAgIGxldCBuYXZpZ2F0aW9uID0gbnVsbDtcclxuICAgICAgICBsZXQgY2hhcldyYXBwZXIgPSBudWxsO1xyXG4gICAgICAgIGxldCBjaGFyQ291bnRlciA9IG51bGw7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMucmVzaXppbmdCYXIpIHtcclxuICAgICAgICAgICAgcmVzaXppbmdCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgcmVzaXppbmdCYXIuY2xhc3NOYW1lID0gJ3NlLXJlc2l6aW5nLWJhciBzdW4tZWRpdG9yLWNvbW1vbic7XHJcblxyXG4gICAgICAgICAgICAvKiogbmF2aWdhdGlvbiAqL1xyXG4gICAgICAgICAgICBuYXZpZ2F0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgIG5hdmlnYXRpb24uY2xhc3NOYW1lID0gJ3NlLW5hdmlnYXRpb24gc3VuLWVkaXRvci1jb21tb24nO1xyXG4gICAgICAgICAgICByZXNpemluZ0Jhci5hcHBlbmRDaGlsZChuYXZpZ2F0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIC8qKiBjaGFyIGNvdW50ZXIgKi9cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2hhckNvdW50ZXIpIHtcclxuICAgICAgICAgICAgICAgIGNoYXJXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgICAgICBjaGFyV3JhcHBlci5jbGFzc05hbWUgPSAnc2UtY2hhci1jb3VudGVyLXdyYXBwZXInO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNoYXJDb3VudGVyTGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdTUEFOJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhckxhYmVsLmNsYXNzTmFtZSA9ICdzZS1jaGFyLWxhYmVsJztcclxuICAgICAgICAgICAgICAgICAgICBjaGFyTGFiZWwudGV4dENvbnRlbnQgPSBvcHRpb25zLmNoYXJDb3VudGVyTGFiZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhcldyYXBwZXIuYXBwZW5kQ2hpbGQoY2hhckxhYmVsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgY2hhckNvdW50ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdTUEFOJyk7XHJcbiAgICAgICAgICAgICAgICBjaGFyQ291bnRlci5jbGFzc05hbWUgPSAnc2UtY2hhci1jb3VudGVyJztcclxuICAgICAgICAgICAgICAgIGNoYXJDb3VudGVyLnRleHRDb250ZW50ID0gJzAnO1xyXG4gICAgICAgICAgICAgICAgY2hhcldyYXBwZXIuYXBwZW5kQ2hpbGQoY2hhckNvdW50ZXIpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5tYXhDaGFyQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl9tYXggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdTUEFOJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhcl9tYXgudGV4dENvbnRlbnQgPSAnIC8gJyArIG9wdGlvbnMubWF4Q2hhckNvdW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGNoYXJXcmFwcGVyLmFwcGVuZENoaWxkKGNoYXJfbWF4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXNpemluZ0Jhci5hcHBlbmRDaGlsZChjaGFyV3JhcHBlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IHBsYWNlaG9sZGVyID0gbnVsbDtcclxuICAgICAgICBpZiAob3B0aW9ucy5wbGFjZWhvbGRlcikge1xyXG4gICAgICAgICAgICBwbGFjZWhvbGRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1NQQU4nKTtcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXIuY2xhc3NOYW1lID0gJ3NlLXBsYWNlaG9sZGVyJztcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXIuaW5uZXJUZXh0ID0gb3B0aW9ucy5wbGFjZWhvbGRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGJvdHRvbUJhcjoge1xyXG4gICAgICAgICAgICAgICAgcmVzaXppbmdCYXI6IHJlc2l6aW5nQmFyLFxyXG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvbjogbmF2aWdhdGlvbixcclxuICAgICAgICAgICAgICAgIGNoYXJXcmFwcGVyOiBjaGFyV3JhcHBlcixcclxuICAgICAgICAgICAgICAgIGNoYXJDb3VudGVyOiBjaGFyQ291bnRlclxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB3eXNpd3lnRnJhbWU6IHd5c2l3eWdEaXYsXHJcbiAgICAgICAgICAgIGNvZGVWaWV3OiB0ZXh0YXJlYSxcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZSBvcHRpb25zXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgT3B0aW9ucyBvYmplY3RcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfaW5pdE9wdGlvbnM6IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgcGx1Z2lucyA9IHt9O1xyXG4gICAgICAgIGlmIChvcHRpb25zLnBsdWdpbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgX3BsdWdpbnMgPSBvcHRpb25zLnBsdWdpbnM7XHJcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbnNWYWx1ZXMgPSBfcGx1Z2lucy5sZW5ndGggPyBfcGx1Z2lucyA6IE9iamVjdC5rZXlzKF9wbHVnaW5zKS5tYXAoZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gX3BsdWdpbnNbbmFtZV07IH0pO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcGx1Z2luc1ZhbHVlcy5sZW5ndGgsIHA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcCA9IHBsdWdpbnNWYWx1ZXNbaV0uZGVmYXVsdCB8fCBwbHVnaW5zVmFsdWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgcGx1Z2luc1twLm5hbWVdID0gcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBvcHRpb25zLnBsdWdpbnMgPSBwbHVnaW5zO1xyXG4gICAgICAgIC8qKiBWYWx1ZXMgKi9cclxuICAgICAgICBvcHRpb25zLnN0cmljdE1vZGUgPSBvcHRpb25zLnN0cmljdE1vZGUgIT09IGZhbHNlO1xyXG4gICAgICAgIG9wdGlvbnMuc3RyaWN0SFRNTFZhbGlkYXRpb24gPSBvcHRpb25zLnN0cmljdEhUTUxWYWxpZGF0aW9uICE9PSBmYWxzZTtcclxuICAgICAgICBvcHRpb25zLmxhbmcgPSBvcHRpb25zLmxhbmcgfHwgX2RlZmF1bHRMYW5nO1xyXG4gICAgICAgIG9wdGlvbnMudmFsdWUgPSB0eXBlb2Ygb3B0aW9ucy52YWx1ZSA9PT0gJ3N0cmluZycgPyBvcHRpb25zLnZhbHVlIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLmFsbG93ZWRDbGFzc05hbWVzID0gbmV3IHV0aWwuX3cuUmVnRXhwKChvcHRpb25zLmFsbG93ZWRDbGFzc05hbWVzICYmIHR5cGVvZiBvcHRpb25zLmFsbG93ZWRDbGFzc05hbWVzID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuYWxsb3dlZENsYXNzTmFtZXMgKyAnfCcgOiAnJykgKyAnXl9fc2VfX3xzZS18a2F0ZXgnKTtcclxuICAgICAgICBvcHRpb25zLmhpc3RvcnlTdGFja0RlbGF5VGltZSA9IHR5cGVvZiBvcHRpb25zLmhpc3RvcnlTdGFja0RlbGF5VGltZSA9PT0gJ251bWJlcicgPyBvcHRpb25zLmhpc3RvcnlTdGFja0RlbGF5VGltZSA6IDQwMDtcclxuICAgICAgICBvcHRpb25zLmZyYW1lQXR0cmJ1dGVzID0gb3B0aW9ucy5mcmFtZUF0dHJidXRlcyB8fCB7fTtcclxuICAgICAgICAvLyB0YWcgc3R5bGVcclxuICAgICAgICBvcHRpb25zLmRlZmF1bHRUYWcgPSB0eXBlb2Ygb3B0aW9ucy5kZWZhdWx0VGFnID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmRlZmF1bHRUYWcubGVuZ3RoID4gMCA/IG9wdGlvbnMuZGVmYXVsdFRhZyA6ICdwJztcclxuICAgICAgICBjb25zdCB0ZXh0VGFncyA9IG9wdGlvbnMudGV4dFRhZ3MgPSBbe2JvbGQ6ICdTVFJPTkcnLCB1bmRlcmxpbmU6ICdVJywgaXRhbGljOiAnRU0nLCBzdHJpa2U6ICdERUwnLCBzdWI6ICdTVUInLCBzdXA6ICdTVVAnfSwgKG9wdGlvbnMudGV4dFRhZ3MgfHwge30pXS5yZWR1Y2UoZnVuY3Rpb24gKF9kZWZhdWx0LCBfbmV3KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfbmV3KSB7XHJcbiAgICAgICAgICAgICAgICBfZGVmYXVsdFtrZXldID0gX25ld1trZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfZGVmYXVsdDtcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICAgICAgb3B0aW9ucy5fdGV4dFRhZ3NNYXAgPSB7XHJcbiAgICAgICAgICAgICdzdHJvbmcnOiB0ZXh0VGFncy5ib2xkLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICAgICdiJzogdGV4dFRhZ3MuYm9sZC50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAndSc6IHRleHRUYWdzLnVuZGVybGluZS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAnaW5zJzogdGV4dFRhZ3MudW5kZXJsaW5lLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICAgICdlbSc6IHRleHRUYWdzLml0YWxpYy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAnaSc6IHRleHRUYWdzLml0YWxpYy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAnZGVsJzogdGV4dFRhZ3Muc3RyaWtlLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICAgICdzdHJpa2UnOiB0ZXh0VGFncy5zdHJpa2UudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICAgICAgJ3MnOiB0ZXh0VGFncy5zdHJpa2UudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICAgICAgJ3N1Yic6IHRleHRUYWdzLnN1Yi50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAnc3VwJzogdGV4dFRhZ3Muc3VwLnRvTG93ZXJDYXNlKClcclxuICAgICAgICB9O1xyXG4gICAgICAgIG9wdGlvbnMuX2RlZmF1bHRDb21tYW5kID0ge1xyXG4gICAgICAgICAgICBib2xkOiBvcHRpb25zLnRleHRUYWdzLmJvbGQsXHJcbiAgICAgICAgICAgIHVuZGVybGluZTogb3B0aW9ucy50ZXh0VGFncy51bmRlcmxpbmUsXHJcbiAgICAgICAgICAgIGl0YWxpYzogb3B0aW9ucy50ZXh0VGFncy5pdGFsaWMsXHJcbiAgICAgICAgICAgIHN0cmlrZTogb3B0aW9ucy50ZXh0VGFncy5zdHJpa2UsXHJcbiAgICAgICAgICAgIHN1YnNjcmlwdDogb3B0aW9ucy50ZXh0VGFncy5zdWIsXHJcbiAgICAgICAgICAgIHN1cGVyc2NyaXB0OiBvcHRpb25zLnRleHRUYWdzLnN1cFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLyoqIFdoaXRlbGlzdCwgQmxhY2tsaXN0ICovXHJcbiAgICAgICAgb3B0aW9ucy5fX2FsbG93ZWRTY3JpcHRUYWcgPSBvcHRpb25zLl9fYWxsb3dlZFNjcmlwdFRhZyA9PT0gdHJ1ZTtcclxuICAgICAgICBjb25zdCB3aGl0ZWxpc3QgPSAnYnJ8cHxkaXZ8cHJlfGJsb2NrcXVvdGV8aDF8aDJ8aDN8aDR8aDV8aDZ8b2x8dWx8bGl8aHJ8ZmlndXJlfGZpZ2NhcHRpb258aW1nfGlmcmFtZXxhdWRpb3x2aWRlb3xzb3VyY2V8dGFibGV8dGhlYWR8dGJvZHl8dHJ8dGh8dGR8YXxifHN0cm9uZ3x2YXJ8aXxlbXx1fGluc3xzfHNwYW58c3RyaWtlfGRlbHxzdWJ8c3VwfGNvZGV8c3ZnfHBhdGh8ZGV0YWlsc3xzdW1tYXJ5JztcclxuICAgICAgICAvLyB0YWdzXHJcbiAgICAgICAgb3B0aW9ucy50YWdzQmxhY2tsaXN0ID0gb3B0aW9ucy50YWdzQmxhY2tsaXN0IHx8ICcnO1xyXG4gICAgICAgIG9wdGlvbnMuX2RlZmF1bHRUYWdzV2hpdGVsaXN0ID0gKHR5cGVvZiBvcHRpb25zLl9kZWZhdWx0VGFnc1doaXRlbGlzdCA9PT0gJ3N0cmluZycgPyBvcHRpb25zLl9kZWZhdWx0VGFnc1doaXRlbGlzdCA6IHdoaXRlbGlzdCkgKyAob3B0aW9ucy5fX2FsbG93ZWRTY3JpcHRUYWcgPyAnfHNjcmlwdCcgOiAnJyk7XHJcbiAgICAgICAgb3B0aW9ucy5fZWRpdG9yVGFnc1doaXRlbGlzdCA9IG9wdGlvbnMuYWRkVGFnc1doaXRlbGlzdCA9PT0gJyonID8gJyonIDogdGhpcy5fc2V0V2hpdGVsaXN0KG9wdGlvbnMuX2RlZmF1bHRUYWdzV2hpdGVsaXN0ICsgKHR5cGVvZiBvcHRpb25zLmFkZFRhZ3NXaGl0ZWxpc3QgPT09ICdzdHJpbmcnICYmIG9wdGlvbnMuYWRkVGFnc1doaXRlbGlzdC5sZW5ndGggPiAwID8gJ3wnICsgb3B0aW9ucy5hZGRUYWdzV2hpdGVsaXN0IDogJycpLCBvcHRpb25zLnRhZ3NCbGFja2xpc3QpO1xyXG4gICAgICAgIC8vIHBhc3RlIHRhZ3NcclxuICAgICAgICBvcHRpb25zLnBhc3RlVGFnc0JsYWNrbGlzdCA9IG9wdGlvbnMudGFnc0JsYWNrbGlzdCArIChvcHRpb25zLnRhZ3NCbGFja2xpc3QgJiYgb3B0aW9ucy5wYXN0ZVRhZ3NCbGFja2xpc3QgPyAoJ3wnICsgb3B0aW9ucy5wYXN0ZVRhZ3NCbGFja2xpc3QpIDogKG9wdGlvbnMucGFzdGVUYWdzQmxhY2tsaXN0IHx8ICcnKSk7XHJcbiAgICAgICAgb3B0aW9ucy5wYXN0ZVRhZ3NXaGl0ZWxpc3QgPSBvcHRpb25zLnBhc3RlVGFnc1doaXRlbGlzdCA9PT0gJyonID8gJyonIDogdGhpcy5fc2V0V2hpdGVsaXN0KHR5cGVvZiBvcHRpb25zLnBhc3RlVGFnc1doaXRlbGlzdCA9PT0gJ3N0cmluZycgPyBvcHRpb25zLnBhc3RlVGFnc1doaXRlbGlzdCA6IG9wdGlvbnMuX2VkaXRvclRhZ3NXaGl0ZWxpc3QsIG9wdGlvbnMucGFzdGVUYWdzQmxhY2tsaXN0KTtcclxuICAgICAgICAvLyB0YWcgYXR0cmlidXRlc1xyXG4gICAgICAgIG9wdGlvbnMuYXR0cmlidXRlc1doaXRlbGlzdCA9ICghb3B0aW9ucy5hdHRyaWJ1dGVzV2hpdGVsaXN0IHx8IHR5cGVvZiBvcHRpb25zLmF0dHJpYnV0ZXNXaGl0ZWxpc3QgIT09ICdvYmplY3QnKSA/IG51bGwgOiBvcHRpb25zLmF0dHJpYnV0ZXNXaGl0ZWxpc3Q7XHJcbiAgICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzQmxhY2tsaXN0ID0gKCFvcHRpb25zLmF0dHJpYnV0ZXNCbGFja2xpc3QgfHwgdHlwZW9mIG9wdGlvbnMuYXR0cmlidXRlc0JsYWNrbGlzdCAhPT0gJ29iamVjdCcpID8gbnVsbCA6IG9wdGlvbnMuYXR0cmlidXRlc0JsYWNrbGlzdDtcclxuICAgICAgICAvKiogTGF5b3V0ICovXHJcbiAgICAgICAgb3B0aW9ucy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8ICdjbGFzc2ljJzsgLy8gY2xhc3NpYywgaW5saW5lLCBiYWxsb29uLCBiYWxsb29uLWFsd2F5c1xyXG4gICAgICAgIG9wdGlvbnMucnRsID0gISFvcHRpb25zLnJ0bDtcclxuICAgICAgICBvcHRpb25zLmxpbmVBdHRyUmVzZXQgPSBbJ2lkJ10uY29uY2F0KChvcHRpb25zLmxpbmVBdHRyUmVzZXQgJiYgdHlwZW9mIG9wdGlvbnMubGluZUF0dHJSZXNldCA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmxpbmVBdHRyUmVzZXQudG9Mb3dlckNhc2UoKS5zcGxpdCgnfCcpIDogW10pKTtcclxuICAgICAgICBvcHRpb25zLl9lZGl0YWJsZUNsYXNzID0gJ3N1bi1lZGl0b3ItZWRpdGFibGUnICsgKG9wdGlvbnMucnRsID8gJyBzZS1ydGwnIDogJycpO1xyXG4gICAgICAgIG9wdGlvbnMuX3ByaW50Q2xhc3MgPSB0eXBlb2Ygb3B0aW9ucy5fcHJpbnRDbGFzcyA9PT0gJ3N0cmluZycgPyBvcHRpb25zLl9wcmludENsYXNzIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLnRvb2xiYXJXaWR0aCA9IG9wdGlvbnMudG9vbGJhcldpZHRoID8gKHV0aWwuaXNOdW1iZXIob3B0aW9ucy50b29sYmFyV2lkdGgpID8gb3B0aW9ucy50b29sYmFyV2lkdGggKyAncHgnIDogb3B0aW9ucy50b29sYmFyV2lkdGgpIDogJ2F1dG8nO1xyXG4gICAgICAgIG9wdGlvbnMudG9vbGJhckNvbnRhaW5lciA9IHR5cGVvZiBvcHRpb25zLnRvb2xiYXJDb250YWluZXIgPT09ICdzdHJpbmcnID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvcHRpb25zLnRvb2xiYXJDb250YWluZXIpIDogb3B0aW9ucy50b29sYmFyQ29udGFpbmVyO1xyXG4gICAgICAgIG9wdGlvbnMuc3RpY2t5VG9vbGJhciA9ICgvYmFsbG9vbi9pLnRlc3Qob3B0aW9ucy5tb2RlKSB8fCAhIW9wdGlvbnMudG9vbGJhckNvbnRhaW5lcikgPyAtMSA6IG9wdGlvbnMuc3RpY2t5VG9vbGJhciA9PT0gdW5kZWZpbmVkID8gMCA6ICgvXlxcZCsvLnRlc3Qob3B0aW9ucy5zdGlja3lUb29sYmFyKSA/IHV0aWwuZ2V0TnVtYmVyKG9wdGlvbnMuc3RpY2t5VG9vbGJhciwgMCkgOiAtMSk7XHJcbiAgICAgICAgb3B0aW9ucy5oaWRlVG9vbGJhciA9ICEhb3B0aW9ucy5oaWRlVG9vbGJhcjtcclxuICAgICAgICBvcHRpb25zLmZ1bGxTY3JlZW5PZmZzZXQgPSBvcHRpb25zLmZ1bGxTY3JlZW5PZmZzZXQgPT09IHVuZGVmaW5lZCA/IDAgOiAoL15cXGQrLy50ZXN0KG9wdGlvbnMuZnVsbFNjcmVlbk9mZnNldCkgPyB1dGlsLmdldE51bWJlcihvcHRpb25zLmZ1bGxTY3JlZW5PZmZzZXQsIDApIDogMCk7XHJcbiAgICAgICAgb3B0aW9ucy5mdWxsUGFnZSA9ICEhb3B0aW9ucy5mdWxsUGFnZTtcclxuICAgICAgICBvcHRpb25zLmlmcmFtZSA9IG9wdGlvbnMuZnVsbFBhZ2UgfHwgISFvcHRpb25zLmlmcmFtZTtcclxuICAgICAgICBvcHRpb25zLmlmcmFtZUF0dHJpYnV0ZXMgPSBvcHRpb25zLmlmcmFtZUF0dHJpYnV0ZXMgfHwge307XHJcbiAgICAgICAgb3B0aW9ucy5pZnJhbWVDU1NGaWxlTmFtZSA9IG9wdGlvbnMuaWZyYW1lID8gdHlwZW9mIG9wdGlvbnMuaWZyYW1lQ1NTRmlsZU5hbWUgPT09ICdzdHJpbmcnID8gW29wdGlvbnMuaWZyYW1lQ1NTRmlsZU5hbWVdIDogKG9wdGlvbnMuaWZyYW1lQ1NTRmlsZU5hbWUgfHwgWydzdW5lZGl0b3InXSkgOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMucHJldmlld1RlbXBsYXRlID0gdHlwZW9mIG9wdGlvbnMucHJldmlld1RlbXBsYXRlID09PSAnc3RyaW5nJyA/IG9wdGlvbnMucHJldmlld1RlbXBsYXRlIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLnByaW50VGVtcGxhdGUgPSB0eXBlb2Ygb3B0aW9ucy5wcmludFRlbXBsYXRlID09PSAnc3RyaW5nJyA/IG9wdGlvbnMucHJpbnRUZW1wbGF0ZSA6IG51bGw7XHJcbiAgICAgICAgLyoqIENvZGVNaXJyb3Igb2JqZWN0ICovXHJcbiAgICAgICAgb3B0aW9ucy5jb2RlTWlycm9yID0gb3B0aW9ucy5jb2RlTWlycm9yID8gb3B0aW9ucy5jb2RlTWlycm9yLnNyYyA/IG9wdGlvbnMuY29kZU1pcnJvciA6IHtzcmM6IG9wdGlvbnMuY29kZU1pcnJvcn0gOiBudWxsO1xyXG4gICAgICAgIC8qKiBrYXRleCBvYmplY3QgKE1hdGggcGx1Z2luKSAqL1xyXG4gICAgICAgIG9wdGlvbnMua2F0ZXggPSBvcHRpb25zLmthdGV4ID8gb3B0aW9ucy5rYXRleC5zcmMgPyBvcHRpb25zLmthdGV4IDoge3NyYzogb3B0aW9ucy5rYXRleH0gOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMubWF0aEZvbnRTaXplID0gISFvcHRpb25zLm1hdGhGb250U2l6ZSA/IG9wdGlvbnMubWF0aEZvbnRTaXplIDogW1xyXG4gICAgICAgICAgICB7dGV4dDogJzEnLCB2YWx1ZTogJzFlbSd9LFxyXG4gICAgICAgICAgICB7dGV4dDogJzEuNScsIHZhbHVlOiAnMS41ZW0nfSxcclxuICAgICAgICAgICAge3RleHQ6ICcyJywgdmFsdWU6ICcyZW0nfSxcclxuICAgICAgICAgICAge3RleHQ6ICcyLjUnLCB2YWx1ZTogJzIuNWVtJ31cclxuICAgICAgICBdO1xyXG4gICAgICAgIC8qKiBEaXNwbGF5ICovXHJcbiAgICAgICAgb3B0aW9ucy5wb3NpdGlvbiA9IHR5cGVvZiBvcHRpb25zLnBvc2l0aW9uID09PSAnc3RyaW5nJyA/IG9wdGlvbnMucG9zaXRpb24gOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMuZGlzcGxheSA9IG9wdGlvbnMuZGlzcGxheSB8fCAoZWxlbWVudC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgfHwgIWVsZW1lbnQuc3R5bGUuZGlzcGxheSA/ICdibG9jaycgOiBlbGVtZW50LnN0eWxlLmRpc3BsYXkpO1xyXG4gICAgICAgIG9wdGlvbnMucG9wdXBEaXNwbGF5ID0gb3B0aW9ucy5wb3B1cERpc3BsYXkgfHwgJ2Z1bGwnO1xyXG4gICAgICAgIC8qKiBCb3R0b20gcmVzaXppbmcgYmFyICovXHJcbiAgICAgICAgb3B0aW9ucy5yZXNpemluZ0JhciA9IG9wdGlvbnMucmVzaXppbmdCYXIgPT09IHVuZGVmaW5lZCA/ICgvaW5saW5lfGJhbGxvb24vaS50ZXN0KG9wdGlvbnMubW9kZSkgPyBmYWxzZSA6IHRydWUpIDogb3B0aW9ucy5yZXNpemluZ0JhcjtcclxuICAgICAgICBvcHRpb25zLnNob3dQYXRoTGFiZWwgPSAhb3B0aW9ucy5yZXNpemluZ0JhciA/IGZhbHNlIDogdHlwZW9mIG9wdGlvbnMuc2hvd1BhdGhMYWJlbCA9PT0gJ2Jvb2xlYW4nID8gb3B0aW9ucy5zaG93UGF0aExhYmVsIDogdHJ1ZTtcclxuICAgICAgICBvcHRpb25zLnJlc2l6ZUVuYWJsZSA9IG9wdGlvbnMucmVzaXplRW5hYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFvcHRpb25zLnJlc2l6ZUVuYWJsZTtcclxuICAgICAgICBvcHRpb25zLnJlc2l6aW5nQmFyQ29udGFpbmVyID0gdHlwZW9mIG9wdGlvbnMucmVzaXppbmdCYXJDb250YWluZXIgPT09ICdzdHJpbmcnID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvcHRpb25zLnJlc2l6aW5nQmFyQ29udGFpbmVyKSA6IG9wdGlvbnMucmVzaXppbmdCYXJDb250YWluZXI7XHJcbiAgICAgICAgLyoqIENoYXJhY3RlciBjb3VudCAqL1xyXG4gICAgICAgIG9wdGlvbnMuY2hhckNvdW50ZXIgPSBvcHRpb25zLm1heENoYXJDb3VudCA+IDAgPyB0cnVlIDogdHlwZW9mIG9wdGlvbnMuY2hhckNvdW50ZXIgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuY2hhckNvdW50ZXIgOiBmYWxzZTtcclxuICAgICAgICBvcHRpb25zLmNoYXJDb3VudGVyVHlwZSA9IHR5cGVvZiBvcHRpb25zLmNoYXJDb3VudGVyVHlwZSA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmNoYXJDb3VudGVyVHlwZSA6ICdjaGFyJztcclxuICAgICAgICBvcHRpb25zLmNoYXJDb3VudGVyTGFiZWwgPSB0eXBlb2Ygb3B0aW9ucy5jaGFyQ291bnRlckxhYmVsID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuY2hhckNvdW50ZXJMYWJlbC50cmltKCkgOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMubWF4Q2hhckNvdW50ID0gdXRpbC5pc051bWJlcihvcHRpb25zLm1heENoYXJDb3VudCkgJiYgb3B0aW9ucy5tYXhDaGFyQ291bnQgPiAtMSA/IG9wdGlvbnMubWF4Q2hhckNvdW50ICogMSA6IG51bGw7XHJcbiAgICAgICAgLyoqIFdpZHRoIHNpemUgKi9cclxuICAgICAgICBvcHRpb25zLndpZHRoID0gb3B0aW9ucy53aWR0aCA/ICh1dGlsLmlzTnVtYmVyKG9wdGlvbnMud2lkdGgpID8gb3B0aW9ucy53aWR0aCArICdweCcgOiBvcHRpb25zLndpZHRoKSA6IChlbGVtZW50LmNsaWVudFdpZHRoID8gZWxlbWVudC5jbGllbnRXaWR0aCArICdweCcgOiAnMTAwJScpO1xyXG4gICAgICAgIG9wdGlvbnMubWluV2lkdGggPSAodXRpbC5pc051bWJlcihvcHRpb25zLm1pbldpZHRoKSA/IG9wdGlvbnMubWluV2lkdGggKyAncHgnIDogb3B0aW9ucy5taW5XaWR0aCkgfHwgJyc7XHJcbiAgICAgICAgb3B0aW9ucy5tYXhXaWR0aCA9ICh1dGlsLmlzTnVtYmVyKG9wdGlvbnMubWF4V2lkdGgpID8gb3B0aW9ucy5tYXhXaWR0aCArICdweCcgOiBvcHRpb25zLm1heFdpZHRoKSB8fCAnJztcclxuICAgICAgICAvKiogSGVpZ2h0IHNpemUgKi9cclxuICAgICAgICBvcHRpb25zLmhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0ID8gKHV0aWwuaXNOdW1iZXIob3B0aW9ucy5oZWlnaHQpID8gb3B0aW9ucy5oZWlnaHQgKyAncHgnIDogb3B0aW9ucy5oZWlnaHQpIDogKGVsZW1lbnQuY2xpZW50SGVpZ2h0ID8gZWxlbWVudC5jbGllbnRIZWlnaHQgKyAncHgnIDogJ2F1dG8nKTtcclxuICAgICAgICBvcHRpb25zLm1pbkhlaWdodCA9ICh1dGlsLmlzTnVtYmVyKG9wdGlvbnMubWluSGVpZ2h0KSA/IG9wdGlvbnMubWluSGVpZ2h0ICsgJ3B4JyA6IG9wdGlvbnMubWluSGVpZ2h0KSB8fCAnJztcclxuICAgICAgICBvcHRpb25zLm1heEhlaWdodCA9ICh1dGlsLmlzTnVtYmVyKG9wdGlvbnMubWF4SGVpZ2h0KSA/IG9wdGlvbnMubWF4SGVpZ2h0ICsgJ3B4JyA6IG9wdGlvbnMubWF4SGVpZ2h0KSB8fCAnJztcclxuICAgICAgICAvKiogRWRpdGluZyBhcmVhICovXHJcbiAgICAgICAgb3B0aW9ucy5jbGFzc05hbWUgPSAodHlwZW9mIG9wdGlvbnMuY2xhc3NOYW1lID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmNsYXNzTmFtZS5sZW5ndGggPiAwKSA/ICcgJyArIG9wdGlvbnMuY2xhc3NOYW1lIDogJyc7XHJcbiAgICAgICAgb3B0aW9ucy5kZWZhdWx0U3R5bGUgPSB0eXBlb2Ygb3B0aW9ucy5kZWZhdWx0U3R5bGUgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5kZWZhdWx0U3R5bGUgOiAnJztcclxuICAgICAgICAvKiogRGVmaW5pbmcgbWVudSBpdGVtcyAqL1xyXG4gICAgICAgIG9wdGlvbnMuZm9udCA9ICFvcHRpb25zLmZvbnQgPyBbJ0FyaWFsJywgJ0NvbWljIFNhbnMgTVMnLCAnQ291cmllciBOZXcnLCAnSW1wYWN0JywgJ0dlb3JnaWEnLCAndGFob21hJywgJ1RyZWJ1Y2hldCBNUycsICdWZXJkYW5hJ10gOiBvcHRpb25zLmZvbnQ7XHJcbiAgICAgICAgb3B0aW9ucy5mb250U2l6ZSA9ICFvcHRpb25zLmZvbnRTaXplID8gbnVsbCA6IG9wdGlvbnMuZm9udFNpemU7XHJcbiAgICAgICAgb3B0aW9ucy5mb3JtYXRzID0gIW9wdGlvbnMuZm9ybWF0cyA/IG51bGwgOiBvcHRpb25zLmZvcm1hdHM7XHJcbiAgICAgICAgb3B0aW9ucy5jb2xvckxpc3QgPSAhb3B0aW9ucy5jb2xvckxpc3QgPyBudWxsIDogb3B0aW9ucy5jb2xvckxpc3Q7XHJcbiAgICAgICAgb3B0aW9ucy5saW5lSGVpZ2h0cyA9ICFvcHRpb25zLmxpbmVIZWlnaHRzID8gbnVsbCA6IG9wdGlvbnMubGluZUhlaWdodHM7XHJcbiAgICAgICAgb3B0aW9ucy5wYXJhZ3JhcGhTdHlsZXMgPSAhb3B0aW9ucy5wYXJhZ3JhcGhTdHlsZXMgPyBudWxsIDogb3B0aW9ucy5wYXJhZ3JhcGhTdHlsZXM7XHJcbiAgICAgICAgb3B0aW9ucy50ZXh0U3R5bGVzID0gIW9wdGlvbnMudGV4dFN0eWxlcyA/IG51bGwgOiBvcHRpb25zLnRleHRTdHlsZXM7XHJcbiAgICAgICAgb3B0aW9ucy5mb250U2l6ZVVuaXQgPSB0eXBlb2Ygb3B0aW9ucy5mb250U2l6ZVVuaXQgPT09ICdzdHJpbmcnID8gKG9wdGlvbnMuZm9udFNpemVVbml0LnRyaW0oKS50b0xvd2VyQ2FzZSgpIHx8ICdweCcpIDogJ3B4JztcclxuICAgICAgICBvcHRpb25zLmFsaWduSXRlbXMgPSB0eXBlb2Ygb3B0aW9ucy5hbGlnbkl0ZW1zID09PSAnb2JqZWN0JyA/IG9wdGlvbnMuYWxpZ25JdGVtcyA6IChvcHRpb25zLnJ0bCA/IFsncmlnaHQnLCAnY2VudGVyJywgJ2xlZnQnLCAnanVzdGlmeSddIDogWydsZWZ0JywgJ2NlbnRlcicsICdyaWdodCcsICdqdXN0aWZ5J10pO1xyXG4gICAgICAgIC8qKiBJbWFnZSAqL1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VSZXNpemluZyA9IG9wdGlvbnMuaW1hZ2VSZXNpemluZyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMuaW1hZ2VSZXNpemluZztcclxuICAgICAgICBvcHRpb25zLmltYWdlSGVpZ2h0U2hvdyA9IG9wdGlvbnMuaW1hZ2VIZWlnaHRTaG93ID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFvcHRpb25zLmltYWdlSGVpZ2h0U2hvdztcclxuICAgICAgICBvcHRpb25zLmltYWdlQWxpZ25TaG93ID0gb3B0aW9ucy5pbWFnZUFsaWduU2hvdyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6ICEhb3B0aW9ucy5pbWFnZUFsaWduU2hvdztcclxuICAgICAgICBvcHRpb25zLmltYWdlV2lkdGggPSAhb3B0aW9ucy5pbWFnZVdpZHRoID8gJ2F1dG8nIDogdXRpbC5pc051bWJlcihvcHRpb25zLmltYWdlV2lkdGgpID8gb3B0aW9ucy5pbWFnZVdpZHRoICsgJ3B4JyA6IG9wdGlvbnMuaW1hZ2VXaWR0aDtcclxuICAgICAgICBvcHRpb25zLmltYWdlSGVpZ2h0ID0gIW9wdGlvbnMuaW1hZ2VIZWlnaHQgPyAnYXV0bycgOiB1dGlsLmlzTnVtYmVyKG9wdGlvbnMuaW1hZ2VIZWlnaHQpID8gb3B0aW9ucy5pbWFnZUhlaWdodCArICdweCcgOiBvcHRpb25zLmltYWdlSGVpZ2h0O1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VTaXplT25seVBlcmNlbnRhZ2UgPSAhIW9wdGlvbnMuaW1hZ2VTaXplT25seVBlcmNlbnRhZ2U7XHJcbiAgICAgICAgb3B0aW9ucy5faW1hZ2VTaXplVW5pdCA9IG9wdGlvbnMuaW1hZ2VTaXplT25seVBlcmNlbnRhZ2UgPyAnJScgOiAncHgnO1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VSb3RhdGlvbiA9IG9wdGlvbnMuaW1hZ2VSb3RhdGlvbiAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5pbWFnZVJvdGF0aW9uIDogIShvcHRpb25zLmltYWdlU2l6ZU9ubHlQZXJjZW50YWdlIHx8ICFvcHRpb25zLmltYWdlSGVpZ2h0U2hvdyk7XHJcbiAgICAgICAgb3B0aW9ucy5pbWFnZUZpbGVJbnB1dCA9IG9wdGlvbnMuaW1hZ2VGaWxlSW5wdXQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRpb25zLmltYWdlRmlsZUlucHV0O1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VVcmxJbnB1dCA9IChvcHRpb25zLmltYWdlVXJsSW5wdXQgPT09IHVuZGVmaW5lZCB8fCAhb3B0aW9ucy5pbWFnZUZpbGVJbnB1dCkgPyB0cnVlIDogb3B0aW9ucy5pbWFnZVVybElucHV0O1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VVcGxvYWRIZWFkZXIgPSBvcHRpb25zLmltYWdlVXBsb2FkSGVhZGVyIHx8IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy5pbWFnZVVwbG9hZFVybCA9IHR5cGVvZiBvcHRpb25zLmltYWdlVXBsb2FkVXJsID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuaW1hZ2VVcGxvYWRVcmwgOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VVcGxvYWRTaXplTGltaXQgPSAvXFxkKy8udGVzdChvcHRpb25zLmltYWdlVXBsb2FkU2l6ZUxpbWl0KSA/IHV0aWwuZ2V0TnVtYmVyKG9wdGlvbnMuaW1hZ2VVcGxvYWRTaXplTGltaXQsIDApIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLmltYWdlTXVsdGlwbGVGaWxlID0gISFvcHRpb25zLmltYWdlTXVsdGlwbGVGaWxlO1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VBY2NlcHQgPSAodHlwZW9mIG9wdGlvbnMuaW1hZ2VBY2NlcHQgIT09ICdzdHJpbmcnIHx8IG9wdGlvbnMuaW1hZ2VBY2NlcHQudHJpbSgpID09PSBcIipcIikgPyAnaW1hZ2UvKicgOiBvcHRpb25zLmltYWdlQWNjZXB0LnRyaW0oKSB8fCAnaW1hZ2UvKic7XHJcbiAgICAgICAgLyoqIEltYWdlIC0gaW1hZ2UgZ2FsbGVyeSAqL1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VHYWxsZXJ5RGF0YSA9IG9wdGlvbnMuaW1hZ2VHYWxsZXJ5RGF0YSB8fCBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMuaW1hZ2VHYWxsZXJ5VXJsID0gdHlwZW9mIG9wdGlvbnMuaW1hZ2VHYWxsZXJ5VXJsID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuaW1hZ2VHYWxsZXJ5VXJsIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLmltYWdlR2FsbGVyeUhlYWRlciA9IG9wdGlvbnMuaW1hZ2VHYWxsZXJ5SGVhZGVyIHx8IG51bGw7XHJcbiAgICAgICAgLyoqIFZpZGVvICovXHJcbiAgICAgICAgb3B0aW9ucy52aWRlb1Jlc2l6aW5nID0gb3B0aW9ucy52aWRlb1Jlc2l6aW5nID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0aW9ucy52aWRlb1Jlc2l6aW5nO1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9IZWlnaHRTaG93ID0gb3B0aW9ucy52aWRlb0hlaWdodFNob3cgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAhIW9wdGlvbnMudmlkZW9IZWlnaHRTaG93O1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9BbGlnblNob3cgPSBvcHRpb25zLnZpZGVvQWxpZ25TaG93ID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFvcHRpb25zLnZpZGVvQWxpZ25TaG93O1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9SYXRpb1Nob3cgPSBvcHRpb25zLnZpZGVvUmF0aW9TaG93ID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFvcHRpb25zLnZpZGVvUmF0aW9TaG93O1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9XaWR0aCA9ICFvcHRpb25zLnZpZGVvV2lkdGggfHwgIXV0aWwuZ2V0TnVtYmVyKG9wdGlvbnMudmlkZW9XaWR0aCwgMCkgPyAnJyA6IHV0aWwuaXNOdW1iZXIob3B0aW9ucy52aWRlb1dpZHRoKSA/IG9wdGlvbnMudmlkZW9XaWR0aCArICdweCcgOiBvcHRpb25zLnZpZGVvV2lkdGg7XHJcbiAgICAgICAgb3B0aW9ucy52aWRlb0hlaWdodCA9ICFvcHRpb25zLnZpZGVvSGVpZ2h0IHx8ICF1dGlsLmdldE51bWJlcihvcHRpb25zLnZpZGVvSGVpZ2h0LCAwKSA/ICcnIDogdXRpbC5pc051bWJlcihvcHRpb25zLnZpZGVvSGVpZ2h0KSA/IG9wdGlvbnMudmlkZW9IZWlnaHQgKyAncHgnIDogb3B0aW9ucy52aWRlb0hlaWdodDtcclxuICAgICAgICBvcHRpb25zLnZpZGVvU2l6ZU9ubHlQZXJjZW50YWdlID0gISFvcHRpb25zLnZpZGVvU2l6ZU9ubHlQZXJjZW50YWdlO1xyXG4gICAgICAgIG9wdGlvbnMuX3ZpZGVvU2l6ZVVuaXQgPSBvcHRpb25zLnZpZGVvU2l6ZU9ubHlQZXJjZW50YWdlID8gJyUnIDogJ3B4JztcclxuICAgICAgICBvcHRpb25zLnZpZGVvUm90YXRpb24gPSBvcHRpb25zLnZpZGVvUm90YXRpb24gIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMudmlkZW9Sb3RhdGlvbiA6ICEob3B0aW9ucy52aWRlb1NpemVPbmx5UGVyY2VudGFnZSB8fCAhb3B0aW9ucy52aWRlb0hlaWdodFNob3cpO1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9SYXRpbyA9ICh1dGlsLmdldE51bWJlcihvcHRpb25zLnZpZGVvUmF0aW8sIDQpIHx8IDAuNTYyNSk7XHJcbiAgICAgICAgb3B0aW9ucy52aWRlb1JhdGlvTGlzdCA9ICFvcHRpb25zLnZpZGVvUmF0aW9MaXN0ID8gbnVsbCA6IG9wdGlvbnMudmlkZW9SYXRpb0xpc3Q7XHJcbiAgICAgICAgb3B0aW9ucy55b3V0dWJlUXVlcnkgPSAob3B0aW9ucy55b3V0dWJlUXVlcnkgfHwgJycpLnJlcGxhY2UoJz8nLCAnJyk7XHJcbiAgICAgICAgb3B0aW9ucy52aW1lb1F1ZXJ5ID0gKG9wdGlvbnMudmltZW9RdWVyeSB8fCAnJykucmVwbGFjZSgnPycsICcnKTtcclxuICAgICAgICBvcHRpb25zLnZpZGVvRmlsZUlucHV0ID0gISFvcHRpb25zLnZpZGVvRmlsZUlucHV0O1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9VcmxJbnB1dCA9IChvcHRpb25zLnZpZGVvVXJsSW5wdXQgPT09IHVuZGVmaW5lZCB8fCAhb3B0aW9ucy52aWRlb0ZpbGVJbnB1dCkgPyB0cnVlIDogb3B0aW9ucy52aWRlb1VybElucHV0O1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9VcGxvYWRIZWFkZXIgPSBvcHRpb25zLnZpZGVvVXBsb2FkSGVhZGVyIHx8IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy52aWRlb1VwbG9hZFVybCA9IHR5cGVvZiBvcHRpb25zLnZpZGVvVXBsb2FkVXJsID09PSAnc3RyaW5nJyA/IG9wdGlvbnMudmlkZW9VcGxvYWRVcmwgOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9VcGxvYWRTaXplTGltaXQgPSAvXFxkKy8udGVzdChvcHRpb25zLnZpZGVvVXBsb2FkU2l6ZUxpbWl0KSA/IHV0aWwuZ2V0TnVtYmVyKG9wdGlvbnMudmlkZW9VcGxvYWRTaXplTGltaXQsIDApIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLnZpZGVvTXVsdGlwbGVGaWxlID0gISFvcHRpb25zLnZpZGVvTXVsdGlwbGVGaWxlO1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9UYWdBdHRycyA9IG9wdGlvbnMudmlkZW9UYWdBdHRycyB8fCBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9JZnJhbWVBdHRycyA9IG9wdGlvbnMudmlkZW9JZnJhbWVBdHRycyB8fCBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW9BY2NlcHQgPSAodHlwZW9mIG9wdGlvbnMudmlkZW9BY2NlcHQgIT09ICdzdHJpbmcnIHx8IG9wdGlvbnMudmlkZW9BY2NlcHQudHJpbSgpID09PSBcIipcIikgPyAndmlkZW8vKicgOiBvcHRpb25zLnZpZGVvQWNjZXB0LnRyaW0oKSB8fCAndmlkZW8vKic7XHJcbiAgICAgICAgLyoqIEF1ZGlvICovXHJcbiAgICAgICAgb3B0aW9ucy5hdWRpb1dpZHRoID0gIW9wdGlvbnMuYXVkaW9XaWR0aCA/ICcnIDogdXRpbC5pc051bWJlcihvcHRpb25zLmF1ZGlvV2lkdGgpID8gb3B0aW9ucy5hdWRpb1dpZHRoICsgJ3B4JyA6IG9wdGlvbnMuYXVkaW9XaWR0aDtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvSGVpZ2h0ID0gIW9wdGlvbnMuYXVkaW9IZWlnaHQgPyAnJyA6IHV0aWwuaXNOdW1iZXIob3B0aW9ucy5hdWRpb0hlaWdodCkgPyBvcHRpb25zLmF1ZGlvSGVpZ2h0ICsgJ3B4JyA6IG9wdGlvbnMuYXVkaW9IZWlnaHQ7XHJcbiAgICAgICAgb3B0aW9ucy5hdWRpb0ZpbGVJbnB1dCA9ICEhb3B0aW9ucy5hdWRpb0ZpbGVJbnB1dDtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvVXJsSW5wdXQgPSAob3B0aW9ucy5hdWRpb1VybElucHV0ID09PSB1bmRlZmluZWQgfHwgIW9wdGlvbnMuYXVkaW9GaWxlSW5wdXQpID8gdHJ1ZSA6IG9wdGlvbnMuYXVkaW9VcmxJbnB1dDtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvVXBsb2FkSGVhZGVyID0gb3B0aW9ucy5hdWRpb1VwbG9hZEhlYWRlciB8fCBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMuYXVkaW9VcGxvYWRVcmwgPSB0eXBlb2Ygb3B0aW9ucy5hdWRpb1VwbG9hZFVybCA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmF1ZGlvVXBsb2FkVXJsIDogbnVsbDtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvVXBsb2FkU2l6ZUxpbWl0ID0gL1xcZCsvLnRlc3Qob3B0aW9ucy5hdWRpb1VwbG9hZFNpemVMaW1pdCkgPyB1dGlsLmdldE51bWJlcihvcHRpb25zLmF1ZGlvVXBsb2FkU2l6ZUxpbWl0LCAwKSA6IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy5hdWRpb011bHRpcGxlRmlsZSA9ICEhb3B0aW9ucy5hdWRpb011bHRpcGxlRmlsZTtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvVGFnQXR0cnMgPSBvcHRpb25zLmF1ZGlvVGFnQXR0cnMgfHwgbnVsbDtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvQWNjZXB0ID0gKHR5cGVvZiBvcHRpb25zLmF1ZGlvQWNjZXB0ICE9PSAnc3RyaW5nJyB8fCBvcHRpb25zLmF1ZGlvQWNjZXB0LnRyaW0oKSA9PT0gXCIqXCIpID8gJ2F1ZGlvLyonIDogb3B0aW9ucy5hdWRpb0FjY2VwdC50cmltKCkgfHwgJ2F1ZGlvLyonO1xyXG4gICAgICAgIC8qKiBUYWJsZSAqL1xyXG4gICAgICAgIG9wdGlvbnMudGFibGVDZWxsQ29udHJvbGxlclBvc2l0aW9uID0gdHlwZW9mIG9wdGlvbnMudGFibGVDZWxsQ29udHJvbGxlclBvc2l0aW9uID09PSAnc3RyaW5nJyA/IG9wdGlvbnMudGFibGVDZWxsQ29udHJvbGxlclBvc2l0aW9uLnRvTG93ZXJDYXNlKCkgOiAnY2VsbCc7XHJcbiAgICAgICAgLyoqIExpbmsgKi9cclxuICAgICAgICBvcHRpb25zLmxpbmtUYXJnZXROZXdXaW5kb3cgPSAhIW9wdGlvbnMubGlua1RhcmdldE5ld1dpbmRvdztcclxuICAgICAgICBvcHRpb25zLmxpbmtQcm90b2NvbCA9IHR5cGVvZiBvcHRpb25zLmxpbmtQcm90b2NvbCA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmxpbmtQcm90b2NvbCA6IG51bGw7XHJcbiAgICAgICAgb3B0aW9ucy5saW5rUmVsID0gQXJyYXkuaXNBcnJheShvcHRpb25zLmxpbmtSZWwpID8gb3B0aW9ucy5saW5rUmVsIDogW107XHJcbiAgICAgICAgb3B0aW9ucy5saW5rUmVsRGVmYXVsdCA9IG9wdGlvbnMubGlua1JlbERlZmF1bHQgfHwge307XHJcbiAgICAgICAgLyoqIEhSICovXHJcbiAgICAgICAgLy8gb3B0aW9ucy5ockl0ZW1zID0gb3B0aW9ucy5ockl0ZW1zO1xyXG4gICAgICAgIC8qKiBLZXkgYWN0aW9ucyAqL1xyXG4gICAgICAgIG9wdGlvbnMudGFiRGlzYWJsZSA9ICEhb3B0aW9ucy50YWJEaXNhYmxlO1xyXG4gICAgICAgIG9wdGlvbnMuc2hvcnRjdXRzRGlzYWJsZSA9IEFycmF5LmlzQXJyYXkob3B0aW9ucy5zaG9ydGN1dHNEaXNhYmxlKSA/IG9wdGlvbnMuc2hvcnRjdXRzRGlzYWJsZSA6IFtdO1xyXG4gICAgICAgIG9wdGlvbnMuc2hvcnRjdXRzSGludCA9IG9wdGlvbnMuc2hvcnRjdXRzSGludCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6ICEhb3B0aW9ucy5zaG9ydGN1dHNIaW50O1xyXG4gICAgICAgIC8qKiBEZWZpbmluZyBzYXZlIGJ1dHRvbiAqL1xyXG4gICAgICAgIG9wdGlvbnMuY2FsbEJhY2tTYXZlID0gIW9wdGlvbnMuY2FsbEJhY2tTYXZlID8gbnVsbCA6IG9wdGlvbnMuY2FsbEJhY2tTYXZlO1xyXG4gICAgICAgIC8qKiBUZW1wbGF0ZXMgQXJyYXkgKi9cclxuICAgICAgICBvcHRpb25zLnRlbXBsYXRlcyA9ICFvcHRpb25zLnRlbXBsYXRlcyA/IG51bGwgOiBvcHRpb25zLnRlbXBsYXRlcztcclxuICAgICAgICAvKiogRVRDICovXHJcbiAgICAgICAgb3B0aW9ucy5wbGFjZWhvbGRlciA9IHR5cGVvZiBvcHRpb25zLnBsYWNlaG9sZGVyID09PSAnc3RyaW5nJyA/IG9wdGlvbnMucGxhY2Vob2xkZXIgOiBudWxsO1xyXG4gICAgICAgIG9wdGlvbnMubWVkaWFBdXRvU2VsZWN0ID0gb3B0aW9ucy5tZWRpYUF1dG9TZWxlY3QgPT09IHVuZGVmaW5lZCA/IHRydWUgOiAhIW9wdGlvbnMubWVkaWFBdXRvU2VsZWN0O1xyXG4gICAgICAgIC8qKiBCdXR0b25zICovXHJcbiAgICAgICAgb3B0aW9ucy5idXR0b25MaXN0ID0gISFvcHRpb25zLmJ1dHRvbkxpc3QgPyBvcHRpb25zLmJ1dHRvbkxpc3QgOiBbXHJcbiAgICAgICAgICAgIFsndW5kbycsICdyZWRvJ10sXHJcbiAgICAgICAgICAgIFsnYm9sZCcsICd1bmRlcmxpbmUnLCAnaXRhbGljJywgJ3N0cmlrZScsICdzdWJzY3JpcHQnLCAnc3VwZXJzY3JpcHQnXSxcclxuICAgICAgICAgICAgWydyZW1vdmVGb3JtYXQnXSxcclxuICAgICAgICAgICAgWydvdXRkZW50JywgJ2luZGVudCddLFxyXG4gICAgICAgICAgICBbJ2Z1bGxTY3JlZW4nLCAnc2hvd0Jsb2NrcycsICdjb2RlVmlldyddLFxyXG4gICAgICAgICAgICBbJ3ByZXZpZXcnLCAncHJpbnQnXVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIC8qKiBSVEwgLSBidXR0b25zICovXHJcbiAgICAgICAgaWYgKG9wdGlvbnMucnRsKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuYnV0dG9uTGlzdCA9IG9wdGlvbnMuYnV0dG9uTGlzdC5yZXZlcnNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiogLS0tIERlZmluZSBpY29ucyAtLS0gKi9cclxuICAgICAgICAvLyBjdXN0b20gaWNvbnNcclxuICAgICAgICBvcHRpb25zLmljb25zID0gKCFvcHRpb25zLmljb25zIHx8IHR5cGVvZiBvcHRpb25zLmljb25zICE9PSAnb2JqZWN0JykgPyBfaWNvbnMgOiBbX2ljb25zLCBvcHRpb25zLmljb25zXS5yZWR1Y2UoZnVuY3Rpb24gKF9kZWZhdWx0LCBfbmV3KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfbmV3KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5oYXNPd24oX25ldywga2V5KSkgX2RlZmF1bHRba2V5XSA9IF9uZXdba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gX2RlZmF1bHQ7XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgICAgIC8vIHJ0bCBpY29uc1xyXG4gICAgICAgIG9wdGlvbnMuaWNvbnMgPSAhb3B0aW9ucy5ydGwgPyBvcHRpb25zLmljb25zIDogW29wdGlvbnMuaWNvbnMsIG9wdGlvbnMuaWNvbnMucnRsXS5yZWR1Y2UoZnVuY3Rpb24gKF9kZWZhdWx0LCBfbmV3KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBfbmV3KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5oYXNPd24oX25ldywga2V5KSkgX2RlZmF1bHRba2V5XSA9IF9uZXdba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gX2RlZmF1bHQ7XHJcbiAgICAgICAgfSwge30pO1xyXG5cclxuICAgICAgICAvKiogUHJpdmF0ZSBvcHRpb25zICovXHJcbiAgICAgICAgb3B0aW9ucy5fX2xpc3RDb21tb25TdHlsZSA9IG9wdGlvbnMuX19saXN0Q29tbW9uU3R5bGUgfHwgWydmb250U2l6ZScsICdjb2xvcicsICdmb250RmFtaWx5JywgJ2ZvbnRXZWlnaHQnLCAnZm9udFN0eWxlJ107XHJcblxyXG4gICAgICAgIC8qKiBfaW5pdCBvcHRpb25zICovXHJcbiAgICAgICAgb3B0aW9ucy5fZWRpdG9yU3R5bGVzID0gdXRpbC5fc2V0RGVmYXVsdE9wdGlvblN0eWxlKG9wdGlvbnMsIG9wdGlvbnMuZGVmYXVsdFN0eWxlKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldFdoaXRlbGlzdDogZnVuY3Rpb24gKHdoaXRlbGlzdCwgYmxhY2tsaXN0KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBibGFja2xpc3QgIT09ICdzdHJpbmcnKSByZXR1cm4gd2hpdGVsaXN0O1xyXG4gICAgICAgIGJsYWNrbGlzdCA9IGJsYWNrbGlzdC5zcGxpdCgnfCcpO1xyXG4gICAgICAgIHdoaXRlbGlzdCA9IHdoaXRlbGlzdC5zcGxpdCgnfCcpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBibGFja2xpc3QubGVuZ3RoLCBpbmRleDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGluZGV4ID0gd2hpdGVsaXN0LmluZGV4T2YoYmxhY2tsaXN0W2ldKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHdoaXRlbGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gd2hpdGVsaXN0LmpvaW4oJ3wnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gU3VuZWRpdG9yJ3MgRGVmYXVsdCBidXR0b24gbGlzdFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgb3B0aW9uc1xyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX2RlZmF1bHRCdXR0b25zOiBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGljb25zID0gb3B0aW9ucy5pY29ucztcclxuICAgICAgICBjb25zdCBsYW5nID0gb3B0aW9ucy5sYW5nO1xyXG4gICAgICAgIGNvbnN0IGNtZCA9IHV0aWwuaXNPU1hfSU9TID8gJ+KMmCcgOiAnQ1RSTCc7XHJcbiAgICAgICAgY29uc3QgYWRkU2hpZnQgPSB1dGlsLmlzT1NYX0lPUyA/ICfih6cnIDogJytTSElGVCc7XHJcbiAgICAgICAgY29uc3Qgc2hvcnRjdXRzRGlzYWJsZSA9ICFvcHRpb25zLnNob3J0Y3V0c0hpbnQgPyBbJ2JvbGQnLCAnc3RyaWtlJywgJ3VuZGVybGluZScsICdpdGFsaWMnLCAndW5kbycsICdpbmRlbnQnLCAnc2F2ZSddIDogb3B0aW9ucy5zaG9ydGN1dHNEaXNhYmxlO1xyXG4gICAgICAgIGNvbnN0IGluZGVudEtleSA9IG9wdGlvbnMucnRsID8gWydbJywnXSddIDogWyddJywnWyddO1xyXG4gICAgICAgIGNvbnN0IGluZGVudEljb24gPSBvcHRpb25zLnJ0bCA/IFtpY29ucy5vdXRkZW50LCBpY29ucy5pbmRlbnRdIDogW2ljb25zLmluZGVudCwgaWNvbnMub3V0ZGVudF07XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC8qKiBkZWZhdWx0IGNvbW1hbmQgKi9cclxuICAgICAgICAgICAgYm9sZDogWycnLCBsYW5nLnRvb2xiYXIuYm9sZCArICc8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0XCI+JyArIChzaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ2JvbGQnKSA+IC0xID8gJycgOiBjbWQgKyAnKzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXQta2V5XCI+Qjwvc3Bhbj4nKSArICc8L3NwYW4+JywgJ2JvbGQnLCAnJywgaWNvbnMuYm9sZF0sXHJcbiAgICAgICAgICAgIHVuZGVybGluZTogWycnLCBsYW5nLnRvb2xiYXIudW5kZXJsaW5lICsgJzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXRcIj4nICsgKHNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZigndW5kZXJsaW5lJykgPiAtMSA/ICcnIDogY21kICsgJys8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0LWtleVwiPlU8L3NwYW4+JykgKyAnPC9zcGFuPicsICd1bmRlcmxpbmUnLCAnJywgaWNvbnMudW5kZXJsaW5lXSxcclxuICAgICAgICAgICAgaXRhbGljOiBbJycsIGxhbmcudG9vbGJhci5pdGFsaWMgKyAnPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dFwiPicgKyAoc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCdpdGFsaWMnKSA+IC0xID8gJycgOiBjbWQgKyAnKzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXQta2V5XCI+STwvc3Bhbj4nKSArICc8L3NwYW4+JywgJ2l0YWxpYycsICcnLCBpY29ucy5pdGFsaWNdLFxyXG4gICAgICAgICAgICBzdHJpa2U6IFsnJywgbGFuZy50b29sYmFyLnN0cmlrZSArICc8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0XCI+JyArIChzaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ3N0cmlrZScpID4gLTEgPyAnJyA6IGNtZCArIGFkZFNoaWZ0ICsgJys8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0LWtleVwiPlM8L3NwYW4+JykgKyAnPC9zcGFuPicsICdzdHJpa2UnLCAnJywgaWNvbnMuc3RyaWtlXSxcclxuICAgICAgICAgICAgc3Vic2NyaXB0OiBbJycsIGxhbmcudG9vbGJhci5zdWJzY3JpcHQsICdTVUInLCAnJywgaWNvbnMuc3Vic2NyaXB0XSxcclxuICAgICAgICAgICAgc3VwZXJzY3JpcHQ6IFsnJywgbGFuZy50b29sYmFyLnN1cGVyc2NyaXB0LCAnU1VQJywgJycsIGljb25zLnN1cGVyc2NyaXB0XSxcclxuICAgICAgICAgICAgcmVtb3ZlRm9ybWF0OiBbJycsIGxhbmcudG9vbGJhci5yZW1vdmVGb3JtYXQsICdyZW1vdmVGb3JtYXQnLCAnJywgaWNvbnMuZXJhc2VdLFxyXG4gICAgICAgICAgICBpbmRlbnQ6IFsnJywgbGFuZy50b29sYmFyLmluZGVudCArICc8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0XCI+JyArIChzaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ2luZGVudCcpID4gLTEgPyAnJyA6IGNtZCArICcrPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dC1rZXlcIj4nICsgaW5kZW50S2V5WzBdICsgJzwvc3Bhbj4nKSArICc8L3NwYW4+JywgJ2luZGVudCcsICcnLCBpbmRlbnRJY29uWzBdXSxcclxuICAgICAgICAgICAgb3V0ZGVudDogWycnLCBsYW5nLnRvb2xiYXIub3V0ZGVudCArICc8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0XCI+JyArIChzaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ2luZGVudCcpID4gLTEgPyAnJyA6IGNtZCArICcrPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dC1rZXlcIj4nICsgaW5kZW50S2V5WzFdICsgJzwvc3Bhbj4nKSArICc8L3NwYW4+JywgJ291dGRlbnQnLCAnJywgaW5kZW50SWNvblsxXV0sXHJcbiAgICAgICAgICAgIGZ1bGxTY3JlZW46IFsnc2UtY29kZS12aWV3LWVuYWJsZWQgc2UtcmVzaXppbmctZW5hYmxlZCcsIGxhbmcudG9vbGJhci5mdWxsU2NyZWVuLCAnZnVsbFNjcmVlbicsICcnLCBpY29ucy5leHBhbnNpb25dLFxyXG4gICAgICAgICAgICBzaG93QmxvY2tzOiBbJycsIGxhbmcudG9vbGJhci5zaG93QmxvY2tzLCAnc2hvd0Jsb2NrcycsICcnLCBpY29ucy5zaG93X2Jsb2Nrc10sXHJcbiAgICAgICAgICAgIGNvZGVWaWV3OiBbJ3NlLWNvZGUtdmlldy1lbmFibGVkIHNlLXJlc2l6aW5nLWVuYWJsZWQnLCBsYW5nLnRvb2xiYXIuY29kZVZpZXcsICdjb2RlVmlldycsICcnLCBpY29ucy5jb2RlX3ZpZXddLFxyXG4gICAgICAgICAgICB1bmRvOiBbJycsIGxhbmcudG9vbGJhci51bmRvICsgJzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXRcIj4nICsgKHNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZigndW5kbycpID4gLTEgPyAnJyA6IGNtZCArICcrPHNwYW4gY2xhc3M9XCJzZS1zaG9ydGN1dC1rZXlcIj5aPC9zcGFuPicpICsgJzwvc3Bhbj4nLCAndW5kbycsICcnLCBpY29ucy51bmRvXSxcclxuICAgICAgICAgICAgcmVkbzogWycnLCBsYW5nLnRvb2xiYXIucmVkbyArICc8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0XCI+JyArIChzaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ3VuZG8nKSA+IC0xID8gJycgOiBjbWQgKyAnKzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXQta2V5XCI+WTwvc3Bhbj4gLyAnICsgY21kICsgYWRkU2hpZnQgKyAnKzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXQta2V5XCI+Wjwvc3Bhbj4nKSArICc8L3NwYW4+JywgJ3JlZG8nLCAnJywgaWNvbnMucmVkb10sXHJcbiAgICAgICAgICAgIHByZXZpZXc6IFsnc2UtcmVzaXppbmctZW5hYmxlZCcsIGxhbmcudG9vbGJhci5wcmV2aWV3LCAncHJldmlldycsICcnLCBpY29ucy5wcmV2aWV3XSxcclxuICAgICAgICAgICAgcHJpbnQ6IFsnc2UtcmVzaXppbmctZW5hYmxlZCcsIGxhbmcudG9vbGJhci5wcmludCwgJ3ByaW50JywgJycsIGljb25zLnByaW50XSxcclxuICAgICAgICAgICAgZGlyOiBbJycsIGxhbmcudG9vbGJhcltvcHRpb25zLnJ0bCA/ICdkaXJfbHRyJyA6ICdkaXJfcnRsJ10sICdkaXInLCAnJywgIGljb25zW29wdGlvbnMucnRsID8gJ2Rpcl9sdHInIDogJ2Rpcl9ydGwnXV0sXHJcbiAgICAgICAgICAgIGRpcl9sdHI6IFsnJywgbGFuZy50b29sYmFyLmRpcl9sdHIsICdkaXJfbHRyJywgJycsICBpY29ucy5kaXJfbHRyXSxcclxuICAgICAgICAgICAgZGlyX3J0bDogWycnLCBsYW5nLnRvb2xiYXIuZGlyX3J0bCwgJ2Rpcl9ydGwnLCAnJywgIGljb25zLmRpcl9ydGxdLFxyXG4gICAgICAgICAgICBzYXZlOiBbJ3NlLXJlc2l6aW5nLWVuYWJsZWQnLCBsYW5nLnRvb2xiYXIuc2F2ZSArICc8c3BhbiBjbGFzcz1cInNlLXNob3J0Y3V0XCI+JyArIChzaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ3NhdmUnKSA+IC0xID8gJycgOiBjbWQgKyAnKzxzcGFuIGNsYXNzPVwic2Utc2hvcnRjdXQta2V5XCI+Uzwvc3Bhbj4nKSArICc8L3NwYW4+JywgJ3NhdmUnLCAnJywgaWNvbnMuc2F2ZV0sXHJcbiAgICAgICAgICAgIC8qKiBwbHVnaW5zIC0gY29tbWFuZCAqL1xyXG4gICAgICAgICAgICBibG9ja3F1b3RlOiBbJycsIGxhbmcudG9vbGJhci50YWdfYmxvY2txdW90ZSwgJ2Jsb2NrcXVvdGUnLCAnY29tbWFuZCcsIGljb25zLmJsb2NrcXVvdGVdLFxyXG4gICAgICAgICAgICAvKiogcGx1Z2lucyAtIHN1Ym1lbnUgKi9cclxuICAgICAgICAgICAgZm9udDogWydzZS1idG4tc2VsZWN0IHNlLWJ0bi10b29sLWZvbnQnLCBsYW5nLnRvb2xiYXIuZm9udCwgJ2ZvbnQnLCAnc3VibWVudScsICc8c3BhbiBjbGFzcz1cInR4dFwiPicgKyBsYW5nLnRvb2xiYXIuZm9udCArICc8L3NwYW4+JyArIGljb25zLmFycm93X2Rvd25dLFxyXG4gICAgICAgICAgICBmb3JtYXRCbG9jazogWydzZS1idG4tc2VsZWN0IHNlLWJ0bi10b29sLWZvcm1hdCcsIGxhbmcudG9vbGJhci5mb3JtYXRzLCAnZm9ybWF0QmxvY2snLCAnc3VibWVudScsICc8c3BhbiBjbGFzcz1cInR4dFwiPicgKyBsYW5nLnRvb2xiYXIuZm9ybWF0cyArICc8L3NwYW4+JyArIGljb25zLmFycm93X2Rvd25dLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogWydzZS1idG4tc2VsZWN0IHNlLWJ0bi10b29sLXNpemUnLCBsYW5nLnRvb2xiYXIuZm9udFNpemUsICdmb250U2l6ZScsICdzdWJtZW51JywgJzxzcGFuIGNsYXNzPVwidHh0XCI+JyArIGxhbmcudG9vbGJhci5mb250U2l6ZSArICc8L3NwYW4+JyArIGljb25zLmFycm93X2Rvd25dLFxyXG4gICAgICAgICAgICBmb250Q29sb3I6IFsnJywgbGFuZy50b29sYmFyLmZvbnRDb2xvciwgJ2ZvbnRDb2xvcicsICdzdWJtZW51JywgaWNvbnMuZm9udF9jb2xvcl0sXHJcbiAgICAgICAgICAgIGhpbGl0ZUNvbG9yOiBbJycsIGxhbmcudG9vbGJhci5oaWxpdGVDb2xvciwgJ2hpbGl0ZUNvbG9yJywgJ3N1Ym1lbnUnLCBpY29ucy5oaWdobGlnaHRfY29sb3JdLFxyXG4gICAgICAgICAgICBhbGlnbjogWydzZS1idG4tYWxpZ24nLCBsYW5nLnRvb2xiYXIuYWxpZ24sICdhbGlnbicsICdzdWJtZW51JywgKG9wdGlvbnMucnRsID8gaWNvbnMuYWxpZ25fcmlnaHQgOiBpY29ucy5hbGlnbl9sZWZ0KV0sXHJcbiAgICAgICAgICAgIGxpc3Q6IFsnJywgbGFuZy50b29sYmFyLmxpc3QsICdsaXN0JywgJ3N1Ym1lbnUnLCBpY29ucy5saXN0X251bWJlcl0sXHJcbiAgICAgICAgICAgIGhvcml6b250YWxSdWxlOiBbJ2J0bl9saW5lJywgbGFuZy50b29sYmFyLmhvcml6b250YWxSdWxlLCAnaG9yaXpvbnRhbFJ1bGUnLCAnc3VibWVudScsIGljb25zLmhvcml6b250YWxfcnVsZV0sXHJcbiAgICAgICAgICAgIHRhYmxlOiBbJycsIGxhbmcudG9vbGJhci50YWJsZSwgJ3RhYmxlJywgJ3N1Ym1lbnUnLCBpY29ucy50YWJsZV0sXHJcbiAgICAgICAgICAgIGxpbmVIZWlnaHQ6IFsnJywgbGFuZy50b29sYmFyLmxpbmVIZWlnaHQsICdsaW5lSGVpZ2h0JywgJ3N1Ym1lbnUnLCBpY29ucy5saW5lX2hlaWdodF0sXHJcbiAgICAgICAgICAgIHRlbXBsYXRlOiBbJycsIGxhbmcudG9vbGJhci50ZW1wbGF0ZSwgJ3RlbXBsYXRlJywgJ3N1Ym1lbnUnLCBpY29ucy50ZW1wbGF0ZV0sXHJcbiAgICAgICAgICAgIHBhcmFncmFwaFN0eWxlOiBbJycsIGxhbmcudG9vbGJhci5wYXJhZ3JhcGhTdHlsZSwgJ3BhcmFncmFwaFN0eWxlJywgJ3N1Ym1lbnUnLCBpY29ucy5wYXJhZ3JhcGhfc3R5bGVdLFxyXG4gICAgICAgICAgICB0ZXh0U3R5bGU6IFsnJywgbGFuZy50b29sYmFyLnRleHRTdHlsZSwgJ3RleHRTdHlsZScsICdzdWJtZW51JywgaWNvbnMudGV4dF9zdHlsZV0sXHJcbiAgICAgICAgICAgIC8qKiBwbHVnaW5zIC0gZGlhbG9nICovXHJcbiAgICAgICAgICAgIGxpbms6IFsnJywgbGFuZy50b29sYmFyLmxpbmssICdsaW5rJywgJ2RpYWxvZycsIGljb25zLmxpbmtdLFxyXG4gICAgICAgICAgICBpbWFnZTogWycnLCBsYW5nLnRvb2xiYXIuaW1hZ2UsICdpbWFnZScsICdkaWFsb2cnLCBpY29ucy5pbWFnZV0sXHJcbiAgICAgICAgICAgIHZpZGVvOiBbJycsIGxhbmcudG9vbGJhci52aWRlbywgJ3ZpZGVvJywgJ2RpYWxvZycsIGljb25zLnZpZGVvXSxcclxuICAgICAgICAgICAgYXVkaW86IFsnJywgbGFuZy50b29sYmFyLmF1ZGlvLCAnYXVkaW8nLCAnZGlhbG9nJywgaWNvbnMuYXVkaW9dLFxyXG4gICAgICAgICAgICBtYXRoOiBbJycsIGxhbmcudG9vbGJhci5tYXRoLCAnbWF0aCcsICdkaWFsb2cnLCBpY29ucy5tYXRoXSxcclxuICAgICAgICAgICAgLyoqIHBsdWdpbnMgLSBmaWxlQnJvd3NlciAqL1xyXG4gICAgICAgICAgICBpbWFnZUdhbGxlcnk6IFsnJywgbGFuZy50b29sYmFyLmltYWdlR2FsbGVyeSwgJ2ltYWdlR2FsbGVyeScsICdmaWxlQnJvd3NlcicsIGljb25zLmltYWdlX2dhbGxlcnldXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlIGEgZ3JvdXAgZGl2IGNvbnRhaW5pbmcgZWFjaCBtb2R1bGVcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfY3JlYXRlTW9kdWxlR3JvdXA6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBvRGl2ID0gdXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICBvRGl2LmNsYXNzTmFtZSA9ICdzZS1idG4tbW9kdWxlIHNlLWJ0bi1tb2R1bGUtYm9yZGVyJztcclxuXHJcbiAgICAgICAgY29uc3Qgb1VsID0gdXRpbC5jcmVhdGVFbGVtZW50KCdVTCcpO1xyXG4gICAgICAgIG9VbC5jbGFzc05hbWUgPSAnc2UtbWVudS1saXN0JztcclxuICAgICAgICBvRGl2LmFwcGVuZENoaWxkKG9VbCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICdkaXYnOiBvRGl2LFxyXG4gICAgICAgICAgICAndWwnOiBvVWxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGUgYSBidXR0b24gZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGJ1dHRvbkNsYXNzIGNsYXNzTmFtZSBpbiBidXR0b25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSBUaXRsZSBpbiBidXR0b25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhQ29tbWFuZCBUaGUgZGF0YS1jb21tYW5kIHByb3BlcnR5IG9mIHRoZSBidXR0b25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhRGlzcGxheSBUaGUgZGF0YS1kaXNwbGF5IHByb3BlcnR5IG9mIHRoZSBidXR0b24gKCdkaWFsb2cnLCAnc3VibWVudScsICdjb21tYW5kJylcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbm5lckhUTUwgSHRtbCBpbiBidXR0b25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBfZGlzYWJsZWQgQnV0dG9uIGRpc2FibGVkXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gX2ljb25zIEljb25zXHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX2NyZWF0ZUJ1dHRvbjogZnVuY3Rpb24gKGJ1dHRvbkNsYXNzLCB0aXRsZSwgZGF0YUNvbW1hbmQsIGRhdGFEaXNwbGF5LCBpbm5lckhUTUwsIF9kaXNhYmxlZCwgX2ljb25zKSB7XHJcbiAgICAgICAgY29uc3Qgb0xpID0gdXRpbC5jcmVhdGVFbGVtZW50KCdMSScpO1xyXG4gICAgICAgIGNvbnN0IG9CdXR0b24gPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0JVVFRPTicpO1xyXG4gICAgICAgIGNvbnN0IGxhYmVsID0gKHRpdGxlIHx8IGRhdGFDb21tYW5kKTtcclxuXHJcbiAgICAgICAgb0J1dHRvbi5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnYnV0dG9uJyk7XHJcbiAgICAgICAgb0J1dHRvbi5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3NlLWJ0bicgKyAoYnV0dG9uQ2xhc3MgPyAnICcgKyBidXR0b25DbGFzcyA6ICcnKSArICcgc2UtdG9vbHRpcCcpO1xyXG4gICAgICAgIG9CdXR0b24uc2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnLCBkYXRhQ29tbWFuZCk7XHJcbiAgICAgICAgb0J1dHRvbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtZGlzcGxheScsIGRhdGFEaXNwbGF5KTtcclxuICAgICAgICBvQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGxhYmVsLnJlcGxhY2UoLzxzcGFuIC4rPFxcL3NwYW4+LywgJycpKTtcclxuICAgICAgICBvQnV0dG9uLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoIWlubmVySFRNTCkgaW5uZXJIVE1MID0gJzxzcGFuIGNsYXNzPVwic2UtaWNvbi10ZXh0XCI+ITwvc3Bhbj4nO1xyXG4gICAgICAgIGlmICgvXmRlZmF1bHRcXC4vaS50ZXN0KGlubmVySFRNTCkpIHtcclxuICAgICAgICAgICAgaW5uZXJIVE1MID0gX2ljb25zW2lubmVySFRNTC5yZXBsYWNlKC9eZGVmYXVsdFxcLi9pLCAnJyldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoL150ZXh0XFwuL2kudGVzdChpbm5lckhUTUwpKSB7XHJcbiAgICAgICAgICAgIGlubmVySFRNTCA9IGlubmVySFRNTC5yZXBsYWNlKC9edGV4dFxcLi9pLCAnJyk7XHJcbiAgICAgICAgICAgIG9CdXR0b24uY2xhc3NOYW1lICs9ICcgc2UtYnRuLW1vcmUtdGV4dCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbm5lckhUTUwgKz0gJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhYmVsICsgJzwvc3Bhbj48L3NwYW4+JztcclxuXHJcbiAgICAgICAgaWYgKF9kaXNhYmxlZCkgb0J1dHRvbi5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgb0J1dHRvbi5pbm5lckhUTUwgPSBpbm5lckhUTUw7XHJcbiAgICAgICAgb0xpLmFwcGVuZENoaWxkKG9CdXR0b24pO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnbGknOiBvTGksXHJcbiAgICAgICAgICAgICdidXR0b24nOiBvQnV0dG9uXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlIGVkaXRvciBIVE1MXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBkb2MgZG9jdW1lbnQgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBidXR0b25MaXN0IG9wdGlvbi5idXR0b25MaXN0XHJcbiAgICAgKiBAcGFyYW0ge09iamVjdHxudWxsfSBwbHVnaW5zIFBsdWdpbnNcclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IG9wdGlvbnMgb3B0aW9uc1xyXG4gICAgICogQHJldHVybnMge09iamVjdH0geyBlbGVtZW50OiAoRWxlbWVudCkgVG9vbGJhciBlbGVtZW50LCBwbHVnaW5zOiAoQXJyYXl8bnVsbCkgUGx1Z2lucyBBcnJheSwgcGx1Z2luQ2FsbEJ1dHRvbnM6IChPYmplY3QpLCByZXNwb25zaXZlQnV0dG9uczogKEFycmF5KSB9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfY3JlYXRlVG9vbEJhcjogZnVuY3Rpb24gKGRvYywgYnV0dG9uTGlzdCwgcGx1Z2lucywgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHNlcGFyYXRvcl92ZXJ0aWNhbCA9IGRvYy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICBzZXBhcmF0b3JfdmVydGljYWwuY2xhc3NOYW1lID0gJ3NlLXRvb2xiYXItc2VwYXJhdG9yLXZlcnRpY2FsJztcclxuXHJcbiAgICAgICAgY29uc3QgdG9vbF9iYXIgPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgdG9vbF9iYXIuY2xhc3NOYW1lID0gJ3NlLXRvb2xiYXIgc3VuLWVkaXRvci1jb21tb24nO1xyXG5cclxuICAgICAgICBjb25zdCBfYnV0dG9uVHJheSA9IGRvYy5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICBfYnV0dG9uVHJheS5jbGFzc05hbWUgPSAnc2UtYnRuLXRyYXknO1xyXG4gICAgICAgIHRvb2xfYmFyLmFwcGVuZENoaWxkKF9idXR0b25UcmF5KTtcclxuXHJcbiAgICAgICAgLyoqIGNyZWF0ZSBidXR0b24gbGlzdCAqL1xyXG4gICAgICAgIGJ1dHRvbkxpc3QgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGJ1dHRvbkxpc3QpKTtcclxuICAgICAgICBjb25zdCBpY29ucyA9IG9wdGlvbnMuaWNvbnM7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdEJ1dHRvbkxpc3QgPSB0aGlzLl9kZWZhdWx0QnV0dG9ucyhvcHRpb25zKTtcclxuICAgICAgICBjb25zdCBwbHVnaW5DYWxsQnV0dG9ucyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNpdmVCdXR0b25zID0gW107XHJcblxyXG4gICAgICAgIGxldCBtb2R1bGUgPSBudWxsO1xyXG4gICAgICAgIGxldCBidXR0b24gPSBudWxsO1xyXG4gICAgICAgIGxldCBtb2R1bGVFbGVtZW50ID0gbnVsbDtcclxuICAgICAgICBsZXQgYnV0dG9uRWxlbWVudCA9IG51bGw7XHJcbiAgICAgICAgbGV0IHBsdWdpbk5hbWUgPSAnJztcclxuICAgICAgICBsZXQgdmVydGljYWwgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBtb3JlTGF5ZXIgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIG1vcmVMYXllci5jbGFzc05hbWUgPSAnc2UtdG9vbGJhci1tb3JlLWxheWVyJztcclxuXHJcbiAgICAgICAgYnV0dG9uR3JvdXBMb29wOlxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBtb3JlLCBtb3JlQ29udGFpbmVyLCBtb3JlQ29tbWFuZCwgYnV0dG9uR3JvdXAsIGFsaWduOyBpIDwgYnV0dG9uTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBtb3JlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGFsaWduID0gJyc7XHJcbiAgICAgICAgICAgIGJ1dHRvbkdyb3VwID0gYnV0dG9uTGlzdFtpXTtcclxuICAgICAgICAgICAgbW9kdWxlRWxlbWVudCA9IHRoaXMuX2NyZWF0ZU1vZHVsZUdyb3VwKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBidXR0b24gb2JqZWN0XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYnV0dG9uR3JvdXAgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBidXR0b25zIGxvb3BcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwLCBtb3JlQnV0dG9uOyBqIDwgYnV0dG9uR3JvdXAubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBidXR0b24gPSBidXR0b25Hcm91cFtqXTtcclxuICAgICAgICAgICAgICAgICAgICBtb3JlQnV0dG9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXlxcJVxcZCsvLnRlc3QoYnV0dG9uKSAmJiBqID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbkdyb3VwWzBdID0gYnV0dG9uLnJlcGxhY2UoL1teXFxkXS9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpdmVCdXR0b25zLnB1c2goYnV0dG9uR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25MaXN0LnNwbGljZShpLS0sIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBidXR0b25Hcm91cExvb3A7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnV0dG9uID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJ1dHRvbi5hZGQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbk5hbWUgPSBidXR0b24ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IGRlZmF1bHRCdXR0b25MaXN0W3BsdWdpbk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luc1twbHVnaW5OYW1lXSA9IGJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbk5hbWUgPSBidXR0b24ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IFtidXR0b24uYnV0dG9uQ2xhc3MsIGJ1dHRvbi50aXRsZSwgYnV0dG9uLm5hbWUsIGJ1dHRvbi5kYXRhRGlzcGxheSwgYnV0dG9uLmlubmVySFRNTCwgYnV0dG9uLl9kaXNhYmxlZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlnblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoL15cXC0vLnRlc3QoYnV0dG9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24gPSBidXR0b24uc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlRWxlbWVudC5kaXYuY2xhc3NOYW1lICs9ICcgbW9kdWxlLWZsb2F0LScgKyBhbGlnbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBydGwgZml4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXlxcIy8udGVzdChidXR0b24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBidXR0b24uc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbiA9PT0gJ2ZpeCcpIG1vZHVsZUVsZW1lbnQudWwuY2xhc3NOYW1lICs9ICcgc2UtbWVudS1kaXItZml4JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtb3JlIGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoL15cXDovLnRlc3QoYnV0dG9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZUJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gYnV0dG9uLm1hdGNoKC9eXFw6KFteXFwtXSspXFwtKFteXFwtXSspXFwtKFteXFwtXSspLyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlQ29tbWFuZCA9ICdfX3NlX18nICsgbWF0Y2hlZFsxXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IG1hdGNoZWRbMl0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5uZXJIVE1MID0gbWF0Y2hlZFszXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBbJ3NlLWJ0bi1tb3JlJywgdGl0bGUsIG1vcmVDb21tYW5kLCAnTU9SRScsIGlubmVySFRNTF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0dG9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IGRlZmF1bHRCdXR0b25MaXN0W2J1dHRvbl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbk5hbWUgPSBidXR0b247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXN0b20gPSBwbHVnaW5zW3BsdWdpbk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXN0b20pIHRocm93IEVycm9yKCdbU1VORURJVE9SLmNyZWF0ZS50b29sYmFyLmZhaWxdIFRoZSBidXR0b24gbmFtZSBvZiBhIHBsdWdpbiB0aGF0IGRvZXMgbm90IGV4aXN0LiBbJyArIHBsdWdpbk5hbWUgKyAnXScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gW2N1c3RvbS5idXR0b25DbGFzcywgY3VzdG9tLnRpdGxlLCBjdXN0b20ubmFtZSwgY3VzdG9tLmRpc3BsYXksIGN1c3RvbS5pbm5lckhUTUwsIGN1c3RvbS5fZGlzYWJsZWRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXR0b25FbGVtZW50ID0gdGhpcy5fY3JlYXRlQnV0dG9uKG1vZHVsZVswXSwgbW9kdWxlWzFdLCBtb2R1bGVbMl0sIG1vZHVsZVszXSwgbW9kdWxlWzRdLCBtb2R1bGVbNV0sIGljb25zKTtcclxuICAgICAgICAgICAgICAgICAgICAobW9yZSA/IG1vcmVDb250YWluZXIgOiBtb2R1bGVFbGVtZW50LnVsKS5hcHBlbmRDaGlsZChidXR0b25FbGVtZW50LmxpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbnNbcGx1Z2luTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luQ2FsbEJ1dHRvbnNbcGx1Z2luTmFtZV0gPSBidXR0b25FbGVtZW50LmJ1dHRvbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG1vcmUgYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vcmVCdXR0b24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVDb250YWluZXIgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JlQ29udGFpbmVyLmNsYXNzTmFtZSA9ICdzZS1tb3JlLWxheWVyICcgKyBtb3JlQ29tbWFuZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZUNvbnRhaW5lci5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cInNlLW1vcmUtZm9ybVwiPjx1bCBjbGFzcz1cInNlLW1lbnUtbGlzdFwiJyArIChhbGlnbiA/ICcgc3R5bGU9XCJmbG9hdDogJyArIGFsaWduICsgJztcIicgOiAnJykgKyAnPjwvdWw+PC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9yZUxheWVyLmFwcGVuZENoaWxkKG1vcmVDb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JlQ29udGFpbmVyID0gbW9yZUNvbnRhaW5lci5maXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3YgPSAgc2VwYXJhdG9yX3ZlcnRpY2FsLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2J1dHRvblRyYXkuYXBwZW5kQ2hpbGQoc3YpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBfYnV0dG9uVHJheS5hcHBlbmRDaGlsZChtb2R1bGVFbGVtZW50LmRpdik7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLyoqIGxpbmUgYnJlYWsgICovXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKC9eXFwvJC8udGVzdChidXR0b25Hcm91cCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGVyRGl2ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgICAgICAgICAgZW50ZXJEaXYuY2xhc3NOYW1lID0gJ3NlLWJ0bi1tb2R1bGUtZW50ZXInO1xyXG4gICAgICAgICAgICAgICAgX2J1dHRvblRyYXkuYXBwZW5kQ2hpbGQoZW50ZXJEaXYpO1xyXG4gICAgICAgICAgICAgICAgdmVydGljYWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoIChfYnV0dG9uVHJheS5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgX2J1dHRvblRyYXkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKF9idXR0b25UcmF5LmZpcnN0RWxlbWVudENoaWxkLCAnc2UtYnRuLW1vZHVsZS1ib3JkZXInKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucnRsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3YgPSAgc2VwYXJhdG9yX3ZlcnRpY2FsLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3Yuc3R5bGUuZmxvYXQgPSBfYnV0dG9uVHJheS5sYXN0RWxlbWVudENoaWxkLnN0eWxlLmZsb2F0O1xyXG4gICAgICAgICAgICAgICAgICAgIF9idXR0b25UcmF5LmFwcGVuZENoaWxkKHN2KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zaXZlQnV0dG9ucy5sZW5ndGggPiAwKSByZXNwb25zaXZlQnV0dG9ucy51bnNoaWZ0KGJ1dHRvbkxpc3QpO1xyXG4gICAgICAgIGlmIChtb3JlTGF5ZXIuY2hpbGRyZW4ubGVuZ3RoID4gMCkgX2J1dHRvblRyYXkuYXBwZW5kQ2hpbGQobW9yZUxheWVyKTtcclxuXHJcbiAgICAgICAgLy8gbWVudSB0cmF5XHJcbiAgICAgICAgY29uc3QgX21lbnVUcmF5ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIF9tZW51VHJheS5jbGFzc05hbWUgPSAnc2UtbWVudS10cmF5JztcclxuICAgICAgICB0b29sX2Jhci5hcHBlbmRDaGlsZChfbWVudVRyYXkpO1xyXG5cclxuICAgICAgICAvLyBjb3ZlclxyXG4gICAgICAgIGNvbnN0IHRvb2xfY292ZXIgPSBkb2MuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgdG9vbF9jb3Zlci5jbGFzc05hbWUgPSAnc2UtdG9vbGJhci1jb3Zlcic7XHJcbiAgICAgICAgdG9vbF9iYXIuYXBwZW5kQ2hpbGQodG9vbF9jb3Zlcik7XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmhpZGVUb29sYmFyKSB0b29sX2Jhci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAnZWxlbWVudCc6IHRvb2xfYmFyLFxyXG4gICAgICAgICAgICAncGx1Z2lucyc6IHBsdWdpbnMsXHJcbiAgICAgICAgICAgICdwbHVnaW5DYWxsQnV0dG9ucyc6IHBsdWdpbkNhbGxCdXR0b25zLFxyXG4gICAgICAgICAgICAncmVzcG9uc2l2ZUJ1dHRvbnMnOiByZXNwb25zaXZlQnV0dG9ucyxcclxuICAgICAgICAgICAgJ19tZW51VHJheSc6IF9tZW51VHJheSxcclxuICAgICAgICAgICAgJ19idXR0b25UcmF5JzogX2J1dHRvblRyYXlcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59OyIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIEVsZW1lbnRzIGFuZCB2YXJpYWJsZXMgeW91IHNob3VsZCBoYXZlXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCB0ZXh0YXJlYSBlbGVtZW50XHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25zIFRvb2xiYXIgZWxlbWVudCB5b3UgY3JlYXRlZFxyXG4gKiBAcGFyYW0ge0pTT058T2JqZWN0fSBvcHRpb25zIEluc2VydGVkIG9wdGlvbnNcclxuICogQHJldHVybnMge09iamVjdH0ge0VsZW1lbnRzLCB2YXJpYWJsZXMgb2YgdGhlIGVkaXRvciwgb3B0aW9ufVxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuY29uc3QgX0NvbnRleHQgPSBmdW5jdGlvbiAoZWxlbWVudCwgY29ucywgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBlbGVtZW50OiB7XHJcbiAgICAgICAgICAgIG9yaWdpbkVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgIHRvcEFyZWE6IGNvbnMuX3RvcCxcclxuICAgICAgICAgICAgcmVsYXRpdmU6IGNvbnMuX3JlbGF0aXZlLFxyXG4gICAgICAgICAgICB0b29sYmFyOiBjb25zLl90b29sQmFyLFxyXG4gICAgICAgICAgICBfdG9vbGJhclNoYWRvdzogY29ucy5fdG9vbGJhclNoYWRvdyxcclxuICAgICAgICAgICAgX2J1dHRvblRyYXk6IGNvbnMuX3Rvb2xCYXIucXVlcnlTZWxlY3RvcignLnNlLWJ0bi10cmF5JyksXHJcbiAgICAgICAgICAgIF9tZW51VHJheTogY29ucy5fbWVudVRyYXksXHJcbiAgICAgICAgICAgIHJlc2l6aW5nQmFyOiBjb25zLl9yZXNpemluZ0JhcixcclxuICAgICAgICAgICAgbmF2aWdhdGlvbjogY29ucy5fbmF2aWdhdGlvbixcclxuICAgICAgICAgICAgY2hhcldyYXBwZXI6IGNvbnMuX2NoYXJXcmFwcGVyLFxyXG4gICAgICAgICAgICBjaGFyQ291bnRlcjogY29ucy5fY2hhckNvdW50ZXIsXHJcbiAgICAgICAgICAgIGVkaXRvckFyZWE6IGNvbnMuX2VkaXRvckFyZWEsXHJcbiAgICAgICAgICAgIHd5c2l3eWdGcmFtZTogY29ucy5fd3lzaXd5Z0FyZWEsXHJcbiAgICAgICAgICAgIHd5c2l3eWc6IGNvbnMuX3d5c2l3eWdBcmVhLCAvLyBpZiAob3B0aW9ucy5pZnJhbWUpIGNvbnMuX3d5c2l3eWdBcmVhLmNvbnRlbnREb2N1bWVudC5ib2R5XHJcbiAgICAgICAgICAgIGNvZGU6IGNvbnMuX2NvZGVBcmVhLFxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogY29ucy5fcGxhY2Vob2xkZXIsXHJcbiAgICAgICAgICAgIGxvYWRpbmc6IGNvbnMuX2xvYWRpbmcsXHJcbiAgICAgICAgICAgIGxpbmVCcmVha2VyOiBjb25zLl9saW5lQnJlYWtlcixcclxuICAgICAgICAgICAgbGluZUJyZWFrZXJfdDogY29ucy5fbGluZUJyZWFrZXJfdCxcclxuICAgICAgICAgICAgbGluZUJyZWFrZXJfYjogY29ucy5fbGluZUJyZWFrZXJfYixcclxuICAgICAgICAgICAgcmVzaXplQmFja2dyb3VuZDogY29ucy5fcmVzaXplQmFjayxcclxuICAgICAgICAgICAgX3N0aWNreUR1bW15OiBjb25zLl9zdGlja3lEdW1teSxcclxuICAgICAgICAgICAgX2Fycm93OiBjb25zLl9hcnJvdyxcclxuICAgICAgICAgICAgX2ZvY3VzVGVtcDogY29ucy5fZm9jdXNUZW1wXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b29sOiB7XHJcbiAgICAgICAgICAgIGNvdmVyOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJy5zZS10b29sYmFyLWNvdmVyJyksXHJcbiAgICAgICAgICAgIGJvbGQ6IGNvbnMuX3Rvb2xCYXIucXVlcnlTZWxlY3RvcignW2RhdGEtY29tbWFuZD1cImJvbGRcIl0nKSxcclxuICAgICAgICAgICAgdW5kZXJsaW5lOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWNvbW1hbmQ9XCJ1bmRlcmxpbmVcIl0nKSxcclxuICAgICAgICAgICAgaXRhbGljOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWNvbW1hbmQ9XCJpdGFsaWNcIl0nKSxcclxuICAgICAgICAgICAgc3RyaWtlOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWNvbW1hbmQ9XCJzdHJpa2VcIl0nKSxcclxuICAgICAgICAgICAgc3ViOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWNvbW1hbmQ9XCJTVUJcIl0nKSxcclxuICAgICAgICAgICAgc3VwOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWNvbW1hbmQ9XCJTVVBcIl0nKSxcclxuICAgICAgICAgICAgdW5kbzogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCdbZGF0YS1jb21tYW5kPVwidW5kb1wiXScpLFxyXG4gICAgICAgICAgICByZWRvOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWNvbW1hbmQ9XCJyZWRvXCJdJyksXHJcbiAgICAgICAgICAgIHNhdmU6IGNvbnMuX3Rvb2xCYXIucXVlcnlTZWxlY3RvcignW2RhdGEtY29tbWFuZD1cInNhdmVcIl0nKSxcclxuICAgICAgICAgICAgb3V0ZGVudDogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCdbZGF0YS1jb21tYW5kPVwib3V0ZGVudFwiXScpLFxyXG4gICAgICAgICAgICBpbmRlbnQ6IGNvbnMuX3Rvb2xCYXIucXVlcnlTZWxlY3RvcignW2RhdGEtY29tbWFuZD1cImluZGVudFwiXScpLFxyXG4gICAgICAgICAgICBmdWxsU2NyZWVuOiBjb25zLl90b29sQmFyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWNvbW1hbmQ9XCJmdWxsU2NyZWVuXCJdJyksXHJcbiAgICAgICAgICAgIHNob3dCbG9ja3M6IGNvbnMuX3Rvb2xCYXIucXVlcnlTZWxlY3RvcignW2RhdGEtY29tbWFuZD1cInNob3dCbG9ja3NcIl0nKSxcclxuICAgICAgICAgICAgY29kZVZpZXc6IGNvbnMuX3Rvb2xCYXIucXVlcnlTZWxlY3RvcignW2RhdGEtY29tbWFuZD1cImNvZGVWaWV3XCJdJyksXHJcbiAgICAgICAgICAgIGRpcjogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCdbZGF0YS1jb21tYW5kPVwiZGlyXCJdJyksXHJcbiAgICAgICAgICAgIGRpcl9sdHI6IGNvbnMuX3Rvb2xCYXIucXVlcnlTZWxlY3RvcignW2RhdGEtY29tbWFuZD1cImRpcl9sdHJcIl0nKSxcclxuICAgICAgICAgICAgZGlyX3J0bDogY29ucy5fdG9vbEJhci5xdWVyeVNlbGVjdG9yKCdbZGF0YS1jb21tYW5kPVwiZGlyX3J0bFwiXScpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxyXG4gICAgICAgIG9wdGlvbjogb3B0aW9uc1xyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IF9Db250ZXh0OyIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBuYW1lOiAnbm90aWNlJyxcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnN0cnVjdG9yXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdCBcclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XHJcbiAgICAgICAgY29udGV4dC5ub3RpY2UgPSB7fTtcclxuXHJcbiAgICAgICAgLyoqIGRpYWxvZyAqL1xyXG4gICAgICAgIGxldCBub3RpY2VfZGl2ID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgIGxldCBub3RpY2Vfc3BhbiA9IGNvcmUudXRpbC5jcmVhdGVFbGVtZW50KCdTUEFOJyk7XHJcbiAgICAgICAgbGV0IG5vdGljZV9idXR0b24gPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnQlVUVE9OJyk7XHJcblxyXG4gICAgICAgIG5vdGljZV9kaXYuY2xhc3NOYW1lID0gJ3NlLW5vdGljZSc7XHJcbiAgICAgICAgbm90aWNlX2J1dHRvbi5jbGFzc05hbWUgPSAnY2xvc2UnO1xyXG4gICAgICAgIG5vdGljZV9idXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0Nsb3NlJyk7XHJcbiAgICAgICAgbm90aWNlX2J1dHRvbi5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgY29yZS5sYW5nLmRpYWxvZ0JveC5jbG9zZSk7XHJcbiAgICAgICAgbm90aWNlX2J1dHRvbi5pbm5lckhUTUwgPSBjb3JlLmljb25zLmNhbmNlbDtcclxuICAgICAgICBcclxuICAgICAgICBub3RpY2VfZGl2LmFwcGVuZENoaWxkKG5vdGljZV9zcGFuKTtcclxuICAgICAgICBub3RpY2VfZGl2LmFwcGVuZENoaWxkKG5vdGljZV9idXR0b24pO1xyXG5cclxuICAgICAgICBjb250ZXh0Lm5vdGljZS5tb2RhbCA9IG5vdGljZV9kaXY7XHJcbiAgICAgICAgY29udGV4dC5ub3RpY2UubWVzc2FnZSA9IG5vdGljZV9zcGFuO1xyXG5cclxuICAgICAgICAvKiogYWRkIGV2ZW50IGxpc3RlbmVycyAqL1xyXG4gICAgICAgIG5vdGljZV9idXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQ2xpY2tfY2FuY2VsLmJpbmQoY29yZSkpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8qKiBhcHBlbmQgaHRtbCAqL1xyXG4gICAgICAgIGNvbnRleHQuZWxlbWVudC5lZGl0b3JBcmVhLmFwcGVuZENoaWxkKG5vdGljZV9kaXYpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8qKiBlbXB0eSBtZW1vcnkgKi9cclxuICAgICAgICBub3RpY2VfZGl2ID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBlIEV2ZW50IG9iamVjdFxyXG4gICAgICovXHJcbiAgICBvbkNsaWNrX2NhbmNlbDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLnBsdWdpbnMubm90aWNlLmNsb3NlLmNhbGwodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uICBPcGVuIHRoZSBub3RpY2UgcGFuZWxcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IE5vdGljZSBtZXNzYWdlXHJcbiAgICAgKi9cclxuICAgIG9wZW46IGZ1bmN0aW9uICh0ZXh0KSAge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5ub3RpY2UubWVzc2FnZS50ZXh0Q29udGVudCA9IHRleHQ7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0Lm5vdGljZS5tb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gIE9wZW4gdGhlIG5vdGljZSBwYW5lbFxyXG4gICAgICovXHJcbiAgICBjbG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5ub3RpY2UubW9kYWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIH1cclxufTtcclxuIiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCBjb3JlIGZyb20gJy4vbGliL2NvcmUnO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2xpYi91dGlsJztcclxuaW1wb3J0IF9Db25zdHJ1Y3RvciBmcm9tICcuL2xpYi9jb25zdHJ1Y3Rvcic7XHJcbmltcG9ydCBfQ29udGV4dCBmcm9tICcuL2xpYi9jb250ZXh0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdGhlIGNyZWF0ZSBmdW5jdGlvbiB3aXRoIHByZXNldCBvcHRpb25zLlxyXG4gICAgICogSWYgdGhlIG9wdGlvbnMgb3ZlcmxhcCwgdGhlIG9wdGlvbnMgb2YgdGhlICdjcmVhdGUnIGZ1bmN0aW9uIHRha2UgcHJlY2VkZW5jZS5cclxuICAgICAqIEBwYXJhbSB7SnNvbn0gb3B0aW9ucyBJbml0aWFsaXphdGlvbiBvcHRpb25zXHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbiAoaW5pdF9vcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoaWRPckVsZW1lbnQsIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZShpZE9yRWxlbWVudCwgb3B0aW9ucywgaW5pdF9vcHRpb25zKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlIHRoZSBzdW5lZGl0b3JcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfEVsZW1lbnR9IGlkT3JFbGVtZW50IHRleHRhcmVhIElkIG9yIHRleHRhcmVhIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7SlNPTnxPYmplY3R9IG9wdGlvbnMgdXNlciBvcHRpb25zXHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChpZE9yRWxlbWVudCwgb3B0aW9ucywgX2luaXRfb3B0aW9ucykge1xyXG4gICAgICAgIHV0aWwuX3Byb3BlcnRpZXNJbml0KCk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIG9wdGlvbnMgPSB7fTtcclxuICAgICAgICBpZiAoX2luaXRfb3B0aW9ucykge1xyXG4gICAgICAgICAgICBvcHRpb25zID0gIFtfaW5pdF9vcHRpb25zLCBvcHRpb25zXS5yZWR1Y2UoZnVuY3Rpb24gKGluaXQsIG9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIG9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5oYXNPd24ob3B0aW9uLCBrZXkpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAncGx1Z2lucycgJiYgb3B0aW9uW2tleV0gJiYgaW5pdFtrZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5pdFtrZXldLCBvID0gb3B0aW9uW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpLmxlbmd0aCA/IGkgOiBPYmplY3Qua2V5cyhpKS5tYXAoZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gaVtuYW1lXTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPSBvLmxlbmd0aCA/IG8gOiBPYmplY3Qua2V5cyhvKS5tYXAoZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gb1tuYW1lXTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRba2V5XSA9IChvLmZpbHRlcihmdW5jdGlvbih2YWwpIHsgcmV0dXJuIGkuaW5kZXhPZih2YWwpID09PSAtMTsgfSkpLmNvbmNhdChpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0W2tleV0gPSBvcHRpb25ba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge30pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdHlwZW9mIGlkT3JFbGVtZW50ID09PSAnc3RyaW5nJyA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkT3JFbGVtZW50KSA6IGlkT3JFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpZE9yRWxlbWVudCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLmNyZWF0ZS5mYWlsXSBUaGUgZWxlbWVudCBmb3IgdGhhdCBpZCB3YXMgbm90IGZvdW5kIChJRDpcIicgKyBpZE9yRWxlbWVudCArICdcIiknKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuY3JlYXRlLmZhaWxdIHN1bmVkaXRvciByZXF1aXJlcyB0ZXh0YXJlYVxcJ3MgZWxlbWVudCBvciBpZCB2YWx1ZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY29ucyA9IF9Db25zdHJ1Y3Rvci5pbml0KGVsZW1lbnQsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBpZiAoY29ucy5jb25zdHJ1Y3RlZC5fdG9wLmlkICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnMuY29uc3RydWN0ZWQuX3RvcC5pZCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuY3JlYXRlLmZhaWxdIFRoZSBJRCBvZiB0aGUgc3VuZWRpdG9yIHlvdSBhcmUgdHJ5aW5nIHRvIGNyZWF0ZSBhbHJlYWR5IGV4aXN0cyAoSUQ6XCInICsgY29ucy5jb25zdHJ1Y3RlZC5fdG9wLmlkICsgJ1wiKScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvcmUoX0NvbnRleHQoZWxlbWVudCwgY29ucy5jb25zdHJ1Y3RlZCwgY29ucy5vcHRpb25zKSwgY29ucy5wbHVnaW5DYWxsQnV0dG9ucywgY29ucy5wbHVnaW5zLCBjb25zLm9wdGlvbnMubGFuZywgb3B0aW9ucywgY29ucy5fcmVzcG9uc2l2ZUJ1dHRvbnMpO1xyXG4gICAgfVxyXG59O1xyXG4iLCIvKlxyXG4gKiB3eXNpd3lnIHdlYiBlZGl0b3JcclxuICpcclxuICogc3VuZWRpdG9yLmpzXHJcbiAqIENvcHlyaWdodCAyMDE3IEppSG9uZyBMZWUuXHJcbiAqIE1JVCBsaWNlbnNlLlxyXG4gKi9cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuaW1wb3J0IF9Db25zdHJ1Y3RvciBmcm9tICcuL2NvbnN0cnVjdG9yJztcclxuaW1wb3J0IF9Db250ZXh0IGZyb20gJy4vY29udGV4dCc7XHJcbmltcG9ydCBfaGlzdG9yeSBmcm9tICcuL2hpc3RvcnknO1xyXG5pbXBvcnQgX3V0aWwgZnJvbSAnLi91dGlsJztcclxuaW1wb3J0IF9ub3RpY2UgZnJvbSAnLi4vcGx1Z2lucy9tb2R1bGVzL19ub3RpY2UnO1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBTdW5FZGl0b3IgY29uc3R1Y3RvciBmdW5jdGlvbi5cclxuICogY3JlYXRlIGNvcmUgb2JqZWN0IGFuZCBldmVudCByZWdpc3RyYXRpb24uXHJcbiAqIGNvcmUsIGV2ZW50LCBmdW5jdGlvbnNcclxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcclxuICogQHBhcmFtIHtPYmplY3R9IHBsdWdpbkNhbGxCdXR0b25zXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwbHVnaW5zIFxyXG4gKiBAcGFyYW0ge09iamVjdH0gbGFuZ1xyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xyXG4gKiBAcGFyYW0ge09iamVjdH0gX3Jlc3BvbnNpdmVCdXR0b25zXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IGZ1bmN0aW9ucyBPYmplY3RcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChjb250ZXh0LCBwbHVnaW5DYWxsQnV0dG9ucywgcGx1Z2lucywgbGFuZywgb3B0aW9ucywgX3Jlc3BvbnNpdmVCdXR0b25zKSB7XHJcbiAgICBjb25zdCBfZCA9IGNvbnRleHQuZWxlbWVudC5vcmlnaW5FbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XHJcbiAgICBjb25zdCBfdyA9IF9kLmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcclxuICAgIGNvbnN0IHV0aWwgPSBfdXRpbDtcclxuICAgIGNvbnN0IGljb25zID0gb3B0aW9ucy5pY29ucztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBlZGl0b3IgY29yZSBvYmplY3RcclxuICAgICAqIHNob3VsZCBhbHdheXMgYmluZCB0aGlzIG9iamVjdCB3aGVuIHJlZ2lzdGVyaW5nIGFuIGV2ZW50IGluIHRoZSBwbHVnLWluLlxyXG4gICAgICovXHJcbiAgICBjb25zdCBjb3JlID0ge1xyXG4gICAgICAgIF9kOiBfZCxcclxuICAgICAgICBfdzogX3csXHJcbiAgICAgICAgX3BhcnNlcjogbmV3IF93LkRPTVBhcnNlcigpLFxyXG4gICAgICAgIF9wcmV2UnRsOiBvcHRpb25zLnJ0bCxcclxuICAgICAgICBfZWRpdG9ySGVpZ2h0OiAwLFxyXG4gICAgICAgIF9lZGl0b3JIZWlnaHRQYWRkaW5nOiAwLFxyXG4gICAgICAgIF9saXN0Q2FtZWw6IG9wdGlvbnMuX19saXN0Q29tbW9uU3R5bGUsXHJcbiAgICAgICAgX2xpc3RLZWJhYjogdXRpbC5jYW1lbFRvS2ViYWJDYXNlKG9wdGlvbnMuX19saXN0Q29tbW9uU3R5bGUpLFxyXG4gICAgICAgIF9fZm9jdXNUZW1wOiBjb250ZXh0LmVsZW1lbnQuX2ZvY3VzVGVtcCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERvY3VtZW50IG9iamVjdCBvZiB0aGUgaWZyYW1lIGlmIGNyZWF0ZWQgYXMgYW4gaWZyYW1lIHx8IF9kXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfd2Q6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBXaW5kb3cgb2JqZWN0IG9mIHRoZSBpZnJhbWUgaWYgY3JlYXRlZCBhcyBhbiBpZnJhbWUgfHwgX3dcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF93dzogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENsb3Nlc3QgU2hhZG93Um9vdCB0byBlZGl0b3IgaWYgZm91bmRcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zaGFkb3dSb290OiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQmxvY2sgY29udHJvbGxlciBtb3VzZWRvd24gZXZlbnRzIGluIFwic2hhZG93Um9vdFwiIGVudmlyb25tZW50XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc2hhZG93Um9vdENvbnRyb2xsZXJFdmVudFRhcmdldDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFV0aWwgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdXRpbDogdXRpbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEZ1bmN0aW9ucyBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICBmdW5jdGlvbnM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFZGl0b3Igb3B0aW9uc1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9wdGlvbnM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDb21wdXRlZCBzdHlsZSBvZiB0aGUgd3lzaXd5ZyBhcmVhICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb250ZXh0LmVsZW1lbnQud3lzaXd5ZykpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgd3dDb21wdXRlZFN0eWxlOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gTm90aWNlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5vdGljZTogX25vdGljZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERlZmF1bHQgaWNvbnMgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWNvbnM6IGljb25zLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSGlzdG9yeSBvYmplY3QgZm9yIHVuZG8sIHJlZG9cclxuICAgICAgICAgKi9cclxuICAgICAgICBoaXN0b3J5OiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRWxlbWVudHMgYW5kIHVzZXIgb3B0aW9ucyBwYXJhbWV0ZXJzIG9mIHRoZSBzdW5lZGl0b3JcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUGx1Z2luIGJ1dHRvbnNcclxuICAgICAgICAgKi9cclxuICAgICAgICBwbHVnaW5DYWxsQnV0dG9uczogcGx1Z2luQ2FsbEJ1dHRvbnMsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBMb2FkZWQgcGx1Z2luc1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBsdWdpbnM6IHBsdWdpbnMgfHwge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBXaGV0aGVyIHRoZSBwbHVnaW4gaXMgaW5pdGlhbGl6ZWRcclxuICAgICAgICAgKi9cclxuICAgICAgICBpbml0UGx1Z2luczoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBPYmplY3QgZm9yIG1hbmFnaW5nIHN1Ym1lbnUgZWxlbWVudHNcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF90YXJnZXRQbHVnaW5zOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNhdmUgcmVuZGVyZWQgc3VibWVudXMgYW5kIGNvbnRhaW5lcnNcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9tZW51VHJheToge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBsb2FkZWQgbGFuZ3VhZ2VcclxuICAgICAgICAgKi9cclxuICAgICAgICBsYW5nOiBsYW5nLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlbGVjdGlvbiBub2RlIChjb3JlLmdldFNlbGVjdGlvbk5vZGUoKSkgdG8gd2hpY2ggdGhlIGVmZmVjdCB3YXMgbGFzdCBhcHBsaWVkXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZWZmZWN0Tm9kZTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIHN1Ym1lbnUgZWxlbWVudFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHN1Ym1lbnU6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBjb250YWluZXIgZWxlbWVudFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnRhaW5lcjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGN1cnJlbnQgc3VibWVudCBuYW1lXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc3VibWVudU5hbWU6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gYmluZGVkIHN1Ym1lbnVPZmYgbWV0aG9kXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfYmluZGVkU3VibWVudU9mZjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGJpbmRlZCBjb250YWluZXJPZmYgbWV0aG9kXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfYmluZGVkQ29udGFpbmVyT2ZmOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gYWN0aXZlIGJ1dHRvbiBlbGVtZW50IGluIHN1Ym1lbnVcclxuICAgICAgICAgKi9cclxuICAgICAgICBzdWJtZW51QWN0aXZlQnV0dG9uOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gYWN0aXZlIGJ1dHRvbiBlbGVtZW50IGluIGNvbnRhaW5lclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnRhaW5lckFjdGl2ZUJ1dHRvbjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRoZSBlbGVtZW50cyBhcnJheSB0byBiZSBwcm9jZXNzZWQgdW52aXNpYmxlIHdoZW4gdGhlIGNvbnRyb2xsZXJzT2ZmIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIChyZXNpemluZywgbGluayBtb2RpZmllZCBidXR0b24sIHRhYmxlIGNvbnRyb2xsZXIpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29udHJvbGxlckFycmF5OiBbXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gdGhhdCBjYWxsZWQgdGhlIGN1cnJlbnRseSBhY3RpdmUgY29udHJvbGxlclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGN1cnJlbnRDb250cm9sbGVyTmFtZTogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdGFyZ2V0IGVsZW1lbnQgb2YgY3VycmVudCBjb250cm9sbGVyXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY3VycmVudENvbnRyb2xsZXJUYXJnZXQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgZmlsZSBjb21wb25lbnQgb2JqZWN0IG9mIGN1cnJlbnQgc2VsZWN0ZWQgZmlsZSB0YWcgKGdldEZpbGVDb21wb25lbnQpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY3VycmVudEZpbGVDb21wb25lbnRJbmZvOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQW4gYXJyYXkgb2YgYnV0dG9ucyB3aG9zZSBjbGFzcyBuYW1lIGlzIG5vdCBcInNlLWNvZGUtdmlldy1lbmFibGVkXCJcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb2RlVmlld0Rpc2FibGVkQnV0dG9uczogW10sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBBbiBhcnJheSBvZiBidXR0b25zIHdob3NlIGNsYXNzIG5hbWUgaXMgbm90IFwic2UtcmVzaXppbmctZW5hYmxlZFwiXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVzaXppbmdEaXNhYmxlZEJ1dHRvbnM6IFtdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gYWN0aXZlIG1vcmUgbGF5ZXIgZWxlbWVudCBpbiBzdWJtZW51XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbW9yZUxheWVyQWN0aXZlQnV0dG9uOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGFnIHdoaXRlbGlzdCBSZWdFeHAgb2JqZWN0IHVzZWQgaW4gXCJfY29uc2lzdGVuY3lDaGVja09mSFRNTFwiIG1ldGhvZFxyXG4gICAgICAgICAqIF4ob3B0aW9ucy5fZWRpdG9yVGFnc1doaXRlbGlzdCkkXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfaHRtbENoZWNrV2hpdGVsaXN0UmVnRXhwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGFnIGJsYWNrbGlzdCBSZWdFeHAgb2JqZWN0IHVzZWQgaW4gXCJfY29uc2lzdGVuY3lDaGVja09mSFRNTFwiIG1ldGhvZFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2h0bWxDaGVja0JsYWNrbGlzdFJlZ0V4cDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJlZ0V4cCB3aGVuIHVzaW5nIGNoZWNrIGRpc2FsbG93ZCB0YWdzLiAoYiwgaSwgaW5zLCBzdHJpa2UsIHMpXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfZGlzYWxsb3dlZFRleHRUYWdzUmVnRXhwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRWRpdG9yIHRhZ3Mgd2hpdGVsaXN0IChSZWdFeHAgb2JqZWN0KVxyXG4gICAgICAgICAqIHV0aWwuY3JlYXRlVGFnc1doaXRlbGlzdChvcHRpb25zLl9lZGl0b3JUYWdzV2hpdGVsaXN0KVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVkaXRvclRhZ3NXaGl0ZWxpc3RSZWdFeHA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFZGl0b3IgdGFncyBibGFja2xpc3QgKFJlZ0V4cCBvYmplY3QpXHJcbiAgICAgICAgICogdXRpbC5jcmVhdGVUYWdzQmxhY2tsaXN0KG9wdGlvbnMudGFnc0JsYWNrbGlzdClcclxuICAgICAgICAgKi9cclxuICAgICAgICBlZGl0b3JUYWdzQmxhY2tsaXN0UmVnRXhwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGFnIHdoaXRlbGlzdCB3aGVuIHBhc3RpbmcgKFJlZ0V4cCBvYmplY3QpXHJcbiAgICAgICAgICogdXRpbC5jcmVhdGVUYWdzV2hpdGVsaXN0KG9wdGlvbnMucGFzdGVUYWdzV2hpdGVsaXN0KVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBhc3RlVGFnc1doaXRlbGlzdFJlZ0V4cDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRhZyBibGFja2xpc3Qgd2hlbiBwYXN0aW5nIChSZWdFeHAgb2JqZWN0KVxyXG4gICAgICAgICAqIHV0aWwuY3JlYXRlVGFnc0JsYWNrbGlzdChvcHRpb25zLnBhc3RlVGFnc0JsYWNrbGlzdClcclxuICAgICAgICAgKi9cclxuICAgICAgICBwYXN0ZVRhZ3NCbGFja2xpc3RSZWdFeHA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBCb29sZWFuIHZhbHVlIG9mIHdoZXRoZXIgdGhlIGVkaXRvciBoYXMgZm9jdXNcclxuICAgICAgICAgKi9cclxuICAgICAgICBoYXNGb2N1czogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBCb29sZWFuIHZhbHVlIG9mIHdoZXRoZXIgdGhlIGVkaXRvciBpcyBkaXNhYmxlZFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlzRGlzYWJsZWQ6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQm9vbGVhbiB2YWx1ZSBvZiB3aGV0aGVyIHRoZSBlZGl0b3IgaXMgcmVhZE9ubHlcclxuICAgICAgICAgKi9cclxuICAgICAgICBpc1JlYWRPbmx5OiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEF0dHJpYnV0ZXMgd2hpdGVsaXN0IHVzZWQgYnkgdGhlIGNsZWFuSFRNTCBtZXRob2RcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9hdHRyaWJ1dGVzV2hpdGVsaXN0UmVnRXhwOiBudWxsLFxyXG4gICAgICAgIF9hdHRyaWJ1dGVzV2hpdGVsaXN0UmVnRXhwX2FsbF9kYXRhOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQXR0cmlidXRlcyBibGFja2xpc3QgdXNlZCBieSB0aGUgY2xlYW5IVE1MIG1ldGhvZFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2F0dHJpYnV0ZXNCbGFja2xpc3RSZWdFeHA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBBdHRyaWJ1dGVzIG9mIHRhZ3Mgd2hpdGVsaXN0IHVzZWQgYnkgdGhlIGNsZWFuSFRNTCBtZXRob2RcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9hdHRyaWJ1dGVzVGFnc1doaXRlbGlzdDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEF0dHJpYnV0ZXMgb2YgdGFncyBibGFja2xpc3QgdXNlZCBieSB0aGUgY2xlYW5IVE1MIG1ldGhvZFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2F0dHJpYnV0ZXNUYWdzQmxhY2tsaXN0OiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gYmluZGVkIGNvbnRyb2xsZXJzT2ZmIG1ldGhvZFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2JpbmRDb250cm9sbGVyc09mZjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIElzIGlubGluZSBtb2RlP1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2lzSW5saW5lOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSXMgYmFsbG9vbnxiYWxsb29uLWFsd2F5cyBtb2RlP1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2lzQmFsbG9vbjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIElzIGJhbGxvb24tYWx3YXlzIG1vZGU/XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfaXNCYWxsb29uQWx3YXlzOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmVxdWlyZWQgdmFsdWUgd2hlbiB1c2luZyBpbmxpbmUgbW9kZSB0byBzdGlja3kgdG9vbGJhclxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2lubGluZVRvb2xiYXJBdHRyOiB7dG9wOiAnJywgd2lkdGg6ICcnLCBpc1Nob3c6IGZhbHNlfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFZhcmlhYmxlIHRoYXQgY29udHJvbHMgdGhlIFwiYmx1clwiIGV2ZW50IGluIHRoZSBlZGl0b3Igb2YgaW5saW5lIG9yIGJhbGxvb24gbW9kZSB3aGVuIHRoZSBmb2N1cyBpcyBtb3ZlZCB0byBzdWJtZW51XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbm90SGlkZVRvb2xiYXI6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVmFyaWFibGUgdmFsdWUgdGhhdCBzdGlja3kgdG9vbGJhciBtb2RlXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc3RpY2t5OiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFZhcmlhYmxlcyBmb3IgY29udHJvbGxpbmcgZm9jdXMgYW5kIGJsdXIgZXZlbnRzXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfYW50aUJsdXI6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50IGxpbmUgYnJlYWtlciBlbGVtZW50XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbGluZUJyZWFrZXI6IG51bGwsXHJcbiAgICAgICAgX2xpbmVCcmVha2VyQnV0dG9uOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSWYgdHJ1ZSwgKGluaXRpYWxpemUsIHJlc2V0KSBhbGwgaW5kZXhlcyBvZiBpbWFnZSwgdmlkZW8gaW5mb3JtYXRpb25cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9jb21wb25lbnRzSW5mb0luaXQ6IHRydWUsXHJcbiAgICAgICAgX2NvbXBvbmVudHNJbmZvUmVzZXQ6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUGx1Z2lucyBhcnJheSB3aXRoIFwiYWN0aXZlXCIgbWV0aG9kLlxyXG4gICAgICAgICAqIFwiYWN0aXZlUGx1Z2luc1wiIHJ1bnMgdGhlIFwiYWRkXCIgbWV0aG9kIHdoZW4gY3JlYXRpbmcgdGhlIGVkaXRvci5cclxuICAgICAgICAgKi9cclxuICAgICAgICBhY3RpdmVQbHVnaW5zOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSW5mb3JtYXRpb24gb2YgdGFncyB0aGF0IHNob3VsZCBtYWludGFpbiBIVE1MIHN0cnVjdHVyZSwgc3R5bGUsIGNsYXNzIG5hbWUsIGV0Yy4gKEluIHVzZSBieSBcIm1hdGhcIiBwbHVnaW4pXHJcbiAgICAgICAgICogV2hlbiBpbnNlcnRpbmcgXCJodG1sXCIgc3VjaCBhcyBwYXN0ZSwgaXQgaXMgZXhlY3V0ZWQgb24gdGhlIFwiaHRtbFwiIHRvIGJlIGluc2VydGVkLiAoY29yZS5jbGVhbkhUTUwpXHJcbiAgICAgICAgICogQmFzaWMgRWRpdG9yIEFjdGlvbnM6XHJcbiAgICAgICAgICogMS4gQWxsIGNsYXNzZXMgbm90IHN0YXJ0aW5nIHdpdGggXCJfX3NlX19cIiBvciBcInNlLVwiIGluIHRoZSBlZGl0b3IgYXJlIHJlbW92ZWQuXHJcbiAgICAgICAgICogMi4gVGhlIHN0eWxlIG9mIGFsbCB0YWdzIGV4Y2VwdCB0aGUgXCJzcGFuXCIgdGFnIGlzIHJlbW92ZWQgZnJvbSB0aGUgZWRpdG9yLlxyXG4gICAgICAgICAqIFwibWFuYWdlZFRhZ3NJbmZvXCIgc3RydWN0dXJlIGV4OlxyXG4gICAgICAgICAqIG1hbmFnZWRUYWdzSW5mbzoge1xyXG4gICAgICAgICAqICAgcXVlcnk6ICcuX19zZV9feHh4LCBzZS14eHgnXHJcbiAgICAgICAgICogICBtYXA6IHtcclxuICAgICAgICAgKiAgICAgJ19fc2VfX3h4eCc6IG1ldGhvZC5iaW5kKGNvcmUpLFxyXG4gICAgICAgICAqICAgICAnc2UteHh4JzogbWV0aG9kLmJpbmQoY29yZSksXHJcbiAgICAgICAgICogICB9XHJcbiAgICAgICAgICogfVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogRGVmaW5lIGluIHRoZSBmb2xsb3dpbmcgcmV0dXJuIGZvcm1hdCBpbiB0aGUgXCJtYW5hZ2VkVGFnSW5mb1wiIGZ1bmN0aW9uIG9mIHRoZSBwbHVnaW4uXHJcbiAgICAgICAgICogbWFuYWdlZFRhZ0luZm8oKSA9PiB7XHJcbiAgICAgICAgICogIHJldHVybiB7XHJcbiAgICAgICAgICogICAgY2xhc3NOYW1lOiAnc3RyaW5nJywgLy8gQ2xhc3MgbmFtZSB0byBpZGVudGlmeSB0aGUgdGFnLiAoXCJfX3NlX194eHhcIiwgXCJzZS14eHhcIilcclxuICAgICAgICAgKiAgICAvLyBDaGFuZ2UgdGhlIGh0bWwgb2YgdGhlIFwiZWxlbWVudFwiLiAoXCJlbGVtZW50XCIgaXMgdGhlIGVsZW1lbnQgZm91bmQgd2l0aCBcImNsYXNzTmFtZVwiLilcclxuICAgICAgICAgKiAgICAvLyBcIm1ldGhvZFwiIGlzIGV4ZWN1dGVkIGJ5IGJpbmRpbmcgXCJjb3JlXCIuXHJcbiAgICAgICAgICogICAgbWV0aG9kOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAqICAgICAgLy8gdGhpcyA9PT0gY29yZVxyXG4gICAgICAgICAqICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAvLyAocmVuZGVyZWQgaHRtbCk7XHJcbiAgICAgICAgICogICAgfVxyXG4gICAgICAgICAqICB9XHJcbiAgICAgICAgICogfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1hbmFnZWRUYWdzSW5mbzogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGNhc2hpbmc6IG9wdGlvbnMuY2hhckNvdW50ZXJUeXBlID09PSAnYnl0ZS1odG1sJ1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2NoYXJUeXBlSFRNTDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBBcnJheSBvZiBcImNoZWNrRmlsZUluZm9cIiBmdW5jdGlvbnMgd2l0aCB0aGUgY29yZSBib3VuZFxyXG4gICAgICAgICAqIChQbHVnaW5zIHdpdGggXCJjaGVja0ZpbGVJbmZvXCIgYW5kIFwicmVzZXRGaWxlSW5mb1wiIG1ldGhvZHMpXHJcbiAgICAgICAgICogXCJmaWxlSW5mb1BsdWdpbnNcIiBydW5zIHRoZSBcImFkZFwiIG1ldGhvZCB3aGVuIGNyZWF0aW5nIHRoZSBlZGl0b3IuXHJcbiAgICAgICAgICogXCJjaGVja0ZpbGVJbmZvXCIgbWV0aG9kIGlzIGFsd2F5cyBjYWxsIGp1c3QgYmVmb3JlIHRoZSBcImNoYW5nZVwiIGV2ZW50LlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2ZpbGVJbmZvUGx1Z2luc0NoZWNrOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQXJyYXkgb2YgXCJyZXNldEZpbGVJbmZvXCIgZnVuY3Rpb25zIHdpdGggdGhlIGNvcmUgYm91bmRcclxuICAgICAgICAgKiAoUGx1Z2lucyB3aXRoIFwiY2hlY2tGaWxlSW5mb1wiIGFuZCBcInJlc2V0RmlsZUluZm9cIiBtZXRob2RzKVxyXG4gICAgICAgICAqIFwiY2hlY2tGaWxlSW5mb1wiIG1ldGhvZCBpcyBhbHdheXMgY2FsbCBqdXN0IGJlZm9yZSB0aGUgXCJmdW5jdGlvbnMuc2V0T3B0aW9uc1wiIG1ldGhvZC5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9maWxlSW5mb1BsdWdpbnNSZXNldDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFZhcmlhYmxlcyBmb3IgZmlsZSBjb21wb25lbnQgbWFuYWdlbWVudFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2ZpbGVNYW5hZ2VyOiB7XHJcbiAgICAgICAgICAgIHRhZ3M6IG51bGwsXHJcbiAgICAgICAgICAgIHJlZ0V4cDogbnVsbCxcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmc6IG51bGwsXHJcbiAgICAgICAgICAgIHBsdWdpblJlZ0V4cDogbnVsbCxcclxuICAgICAgICAgICAgcGx1Z2luTWFwOiBudWxsXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2UgdGV4dCBvciBjbGFzc05hbWUgZm9yIGVhY2ggc2VsZWN0aW9uIGNoYW5nZVxyXG4gICAgICAgICAqIEFmdGVyIGNyZWF0aW5nIHRoZSBlZGl0b3IsIFwiYWN0aXZlUGx1Z2luc1wiIGFyZSBhZGRlZC5cclxuICAgICAgICAgKiBAcHJvcGVydHkge0VsZW1lbnR9IFNUUk9ORyBib2xkIGJ1dHRvblxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gVSB1bmRlcmxpbmUgYnV0dG9uXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtFbGVtZW50fSBFTSBpdGFsaWMgYnV0dG9uXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtFbGVtZW50fSBERUwgc3RyaWtlIGJ1dHRvblxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gU1VCIHN1YnNjcmlwdCBidXR0b25cclxuICAgICAgICAgKiBAcHJvcGVydHkge0VsZW1lbnR9IFNVUCBzdXBlcnNjcmlwdCBidXR0b25cclxuICAgICAgICAgKiBAcHJvcGVydHkge0VsZW1lbnR9IE9VVERFTlQgb3V0ZGVudCBidXR0b25cclxuICAgICAgICAgKiBAcHJvcGVydHkge0VsZW1lbnR9IElOREVOVCBpbmRlbnQgYnV0dG9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29tbWFuZE1hcDoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDU1MgcHJvcGVydGllcyByZWxhdGVkIHRvIHN0eWxlIHRhZ3MgXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfY29tbWFuZE1hcFN0eWxlczoge1xyXG4gICAgICAgICAgICBTVFJPTkc6IFsnZm9udC13ZWlnaHQnXSxcclxuICAgICAgICAgICAgVTogWyd0ZXh0LWRlY29yYXRpb24nXSxcclxuICAgICAgICAgICAgRU06IFsnZm9udC1zdHlsZSddLFxyXG4gICAgICAgICAgICBERUw6IFsndGV4dC1kZWNvcmF0aW9uJ11cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU3R5bGUgYnV0dG9uIHJlbGF0ZWQgdG8gZWRpdCBhcmVhXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtFbGVtZW50fSBmdWxsU2NyZWVuIGZ1bGxTY3JlZW4gYnV0dG9uIGVsZW1lbnRcclxuICAgICAgICAgKiBAcHJvcGVydHkge0VsZW1lbnR9IHNob3dCbG9ja3Mgc2hvd0Jsb2NrcyBidXR0b24gZWxlbWVudFxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gY29kZVZpZXcgY29kZVZpZXcgYnV0dG9uIGVsZW1lbnRcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zdHlsZUNvbW1hbmRNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2NsZWFuU3R5bGVSZWdFeHA6IHtcclxuICAgICAgICAgICAgZGl2OiBuZXcgX3cuUmVnRXhwKCdcXFxccypbXi1hLXpBLVpdKC4rKVxcXFxzKjpbXjtdKyg/ITspKicsICdpZycpLFxyXG4gICAgICAgICAgICBzcGFuOiBuZXcgX3cuUmVnRXhwKCdcXFxccypbXi1hLXpBLVpdKGZvbnQtZmFtaWx5fGZvbnQtc2l6ZXxjb2xvcnxiYWNrZ3JvdW5kLWNvbG9yKVxcXFxzKjpbXjtdKyg/ITspKicsICdpZycpLFxyXG4gICAgICAgICAgICBmb3JtYXQ6IG5ldyBfdy5SZWdFeHAoJ1xcXFxzKlteLWEtekEtWl0odGV4dC1hbGlnbnxtYXJnaW4tbGVmdHxtYXJnaW4tcmlnaHR8d2lkdGh8aGVpZ2h0fGxpbmUtaGVpZ2h0KVxcXFxzKjpbXjtdKyg/ITspKicsICdpZycpLFxyXG4gICAgICAgICAgICBmb250U2l6ZVVuaXQ6IG5ldyBfdy5SZWdFeHAoJ1xcXFxkKycgKyBvcHRpb25zLmZvbnRTaXplVW5pdCArICckJywgJ2knKSxcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVmFyaWFibGVzIHVzZWQgaW50ZXJuYWxseSBpbiBlZGl0b3Igb3BlcmF0aW9uXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtCb29sZWFufSBpc0NvZGVWaWV3IFN0YXRlIG9mIGNvZGUgdmlld1xyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gaXNGdWxsU2NyZWVuIFN0YXRlIG9mIGZ1bGwgc2NyZWVuXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtOdW1iZXJ9IGlubmVySGVpZ2h0X2Z1bGxTY3JlZW4gSW5uZXJIZWlnaHQgaW4gZWRpdG9yIHdoZW4gaW4gZnVsbCBzY3JlZW5cclxuICAgICAgICAgKiBAcHJvcGVydHkge051bWJlcn0gcmVzaXplQ2xpZW50WSBSZW1lbWJlciB0aGUgdmVydGljYWwgc2l6ZSBvZiB0aGUgZWRpdG9yIGJlZm9yZSByZXNpemluZyB0aGUgZWRpdG9yIChVc2VkIHdoZW4gY2FsY3VsYXRpbmcgZHVyaW5nIHJlc2l6ZSBvcGVyYXRpb24pXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtOdW1iZXJ9IHRhYlNpemUgSW5kZW50IHNpemUgb2YgdGFiICg0KVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjb2RlSW5kZW50IEluZGVudCBzaXplIG9mIENvZGUgdmlldyBtb2RlICgyKVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBtaW5SZXNpemluZ1NpemUgTWluaW11bSBzaXplIG9mIGVkaXRpbmcgYXJlYSB3aGVuIHJlc2l6ZWQge051bWJlcn0gKC5zZS13cmFwcGVyLWlubmVyIHttaW4taGVpZ2h0OiA2NXB4O30gfHwgNjUpXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtBcnJheX0gY3VycmVudE5vZGVzICBBbiBhcnJheSBvZiB0aGUgY3VycmVudCBjdXJzb3IncyBub2RlIHN0cnVjdHVyZVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3ZhcmlhYmxlOiB7XHJcbiAgICAgICAgICAgIGlzQ2hhbmdlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGlzQ29kZVZpZXc6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0Z1bGxTY3JlZW46IGZhbHNlLFxyXG4gICAgICAgICAgICBpbm5lckhlaWdodF9mdWxsU2NyZWVuOiAwLFxyXG4gICAgICAgICAgICByZXNpemVDbGllbnRZOiAwLFxyXG4gICAgICAgICAgICB0YWJTaXplOiA0LFxyXG4gICAgICAgICAgICBjb2RlSW5kZW50OiAyLFxyXG4gICAgICAgICAgICBtaW5SZXNpemluZ1NpemU6IHV0aWwuZ2V0TnVtYmVyKChjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLnN0eWxlLm1pbkhlaWdodCB8fCAnNjUnKSwgMCksXHJcbiAgICAgICAgICAgIGN1cnJlbnROb2RlczogW10sXHJcbiAgICAgICAgICAgIGN1cnJlbnROb2Rlc01hcDogW10sXHJcbiAgICAgICAgICAgIF9yYW5nZTogbnVsbCxcclxuICAgICAgICAgICAgX3NlbGVjdGlvbk5vZGU6IG51bGwsXHJcbiAgICAgICAgICAgIF9vcmlnaW5Dc3NUZXh0OiBjb250ZXh0LmVsZW1lbnQudG9wQXJlYS5zdHlsZS5jc3NUZXh0LFxyXG4gICAgICAgICAgICBfYm9keU92ZXJmbG93OiAnJyxcclxuICAgICAgICAgICAgX2VkaXRvckFyZWFPcmlnaW5Dc3NUZXh0OiAnJyxcclxuICAgICAgICAgICAgX3d5c2l3eWdPcmlnaW5Dc3NUZXh0OiAnJyxcclxuICAgICAgICAgICAgX2NvZGVPcmlnaW5Dc3NUZXh0OiAnJyxcclxuICAgICAgICAgICAgX2Z1bGxTY3JlZW5BdHRyczoge3N0aWNreTogZmFsc2UsIGJhbGxvb246IGZhbHNlLCBpbmxpbmU6IGZhbHNlfSxcclxuICAgICAgICAgICAgX2xpbmVCcmVha0NvbXA6IG51bGwsXHJcbiAgICAgICAgICAgIF9saW5lQnJlYWtEaXI6ICcnXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRlbXAgdmFyaWFibGUgZm9yIHNldCBsaW5lIGF0dHJzXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfZm9ybWF0QXR0cnNUZW1wOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2F2ZSB0aGUgY3VycmVudCBidXR0b25zIHN0YXRlcyB0byBcImFsbENvbW1hbmRCdXR0b25zXCIgb2JqZWN0XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc2F2ZUJ1dHRvblN0YXRlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsQ29tbWFuZEJ1dHRvbnMpIHRoaXMuYWxsQ29tbWFuZEJ1dHRvbnMgPSB7fTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRCdXR0b25zID0gdGhpcy5jb250ZXh0LmVsZW1lbnQuX2J1dHRvblRyYXkucXVlcnlTZWxlY3RvckFsbCgnLnNlLW1lbnUtbGlzdCBidXR0b25bZGF0YS1kaXNwbGF5XScpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgZWxlbWVudCwgY29tbWFuZDsgaSA8IGN1cnJlbnRCdXR0b25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gY3VycmVudEJ1dHRvbnNbaV07XHJcbiAgICAgICAgICAgICAgICBjb21tYW5kID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuYWxsQ29tbWFuZEJ1dHRvbnNbY29tbWFuZF0gPSBlbGVtZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJlY292ZXIgdGhlIGN1cnJlbnQgYnV0dG9ucyBzdGF0ZXMgZnJvbSBcImFsbENvbW1hbmRCdXR0b25zXCIgb2JqZWN0XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfcmVjb3ZlckJ1dHRvblN0YXRlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hbGxDb21tYW5kQnV0dG9ucykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEJ1dHRvbnMgPSB0aGlzLmNvbnRleHQuZWxlbWVudC5fYnV0dG9uVHJheS5xdWVyeVNlbGVjdG9yQWxsKCcuc2UtbWVudS1saXN0IGJ1dHRvbltkYXRhLWRpc3BsYXldJyk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgYnV0dG9uLCBjb21tYW5kLCBvbGRCdXR0b247IGkgPCBjdXJyZW50QnV0dG9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbiA9IGN1cnJlbnRCdXR0b25zW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBidXR0b24uZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgb2xkQnV0dG9uID0gdGhpcy5hbGxDb21tYW5kQnV0dG9uc1tjb21tYW5kXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob2xkQnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5wYXJlbnRFbGVtZW50LnJlcGxhY2VDaGlsZChvbGRCdXR0b24sIGJ1dHRvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQudG9vbFtjb21tYW5kXSkgdGhpcy5jb250ZXh0LnRvb2xbY29tbWFuZF0gPSBvbGRCdXR0b247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIElmIHRoZSBwbHVnaW4gaXMgbm90IGFkZGVkLCBhZGQgdGhlIHBsdWdpbiBhbmQgY2FsbCB0aGUgJ2FkZCcgZnVuY3Rpb24uXHJcbiAgICAgICAgICogSWYgdGhlIHBsdWdpbiBpcyBhZGRlZCBjYWxsIGNhbGxCYWNrIGZ1bmN0aW9uLlxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW5OYW1lIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gdG8gY2FsbFxyXG4gICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxCYWNrRnVuY3Rpb24gRnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgbW9kdWxlIGNhbGxcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR8bnVsbH0gX3RhcmdldCBQbHVnaW4gdGFyZ2V0IGJ1dHRvbiAoVGhpcyBpcyBub3QgbmVjZXNzYXJ5IGlmIHlvdSBoYXZlIGEgYnV0dG9uIGxpc3Qgd2hlbiBjcmVhdGluZyB0aGUgZWRpdG9yKVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNhbGxQbHVnaW46IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCBjYWxsQmFja0Z1bmN0aW9uLCBfdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIF90YXJnZXQgPSBfdGFyZ2V0IHx8IHBsdWdpbkNhbGxCdXR0b25zW3BsdWdpbk5hbWVdO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLnBsdWdpbnNbcGx1Z2luTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLmNvcmUuY2FsbFBsdWdpbi5mYWlsXSBUaGUgY2FsbGVkIHBsdWdpbiBkb2VzIG5vdCBleGlzdCBvciBpcyBpbiBhbiBpbnZhbGlkIGZvcm1hdC4gKHBsdWdpbk5hbWU6XCInICsgcGx1Z2luTmFtZSArICdcIiknKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pbml0UGx1Z2luc1twbHVnaW5OYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zW3BsdWdpbk5hbWVdLmFkZCh0aGlzLCBfdGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFBsdWdpbnNbcGx1Z2luTmFtZV0gPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl90YXJnZXRQbHVnaW5zW3BsdWdpbk5hbWVdID09PSAnb2JqZWN0JyAmJiAhIV90YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdE1lbnVUYXJnZXQocGx1Z2luTmFtZSwgX3RhcmdldCwgdGhpcy5fdGFyZ2V0UGx1Z2luc1twbHVnaW5OYW1lXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBsdWdpbnNbcGx1Z2luTmFtZV0uYWN0aXZlICYmICF0aGlzLmNvbW1hbmRNYXBbcGx1Z2luTmFtZV0gJiYgISFfdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRNYXBbcGx1Z2luTmFtZV0gPSBfdGFyZ2V0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQbHVnaW5zLnB1c2gocGx1Z2luTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbEJhY2tGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykgY2FsbEJhY2tGdW5jdGlvbigpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJZiB0aGUgbW9kdWxlIGlzIG5vdCBhZGRlZCwgYWRkIHRoZSBtb2R1bGUgYW5kIGNhbGwgdGhlICdhZGQnIGZ1bmN0aW9uXHJcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gbW9kdWxlQXJyYXkgbW9kdWxlIG9iamVjdCdzIEFycmF5IFtkaWFsb2csIHJlc2l6aW5nXVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFkZE1vZHVsZTogZnVuY3Rpb24gKG1vZHVsZUFycmF5KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBtb2R1bGVBcnJheS5sZW5ndGgsIG1vZHVsZU5hbWU7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZSA9IG1vZHVsZUFycmF5W2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGx1Z2luc1ttb2R1bGVOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc1ttb2R1bGVOYW1lXSA9IG1vZHVsZUFycmF5W2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRQbHVnaW5zW21vZHVsZU5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0UGx1Z2luc1ttb2R1bGVOYW1lXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBsdWdpbnNbbW9kdWxlTmFtZV0uYWRkID09PSAnZnVuY3Rpb24nKSB0aGlzLnBsdWdpbnNbbW9kdWxlTmFtZV0uYWRkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGN1cnJlbnQgZWRpdG9yLXJlbGF0aXZlIHNjcm9sbCBvZmZzZXQuXHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0ge3RvcCwgbGVmdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRHbG9iYWxTY3JvbGxPZmZzZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgbGV0IHQgPSAwLCBsID0gMDtcclxuICAgICAgICAgICAgbGV0IGVsID0gY29udGV4dC5lbGVtZW50LnRvcEFyZWE7XHJcbiAgICAgICAgICAgIHdoaWxlIChlbCkge1xyXG4gICAgICAgICAgICAgICAgdCArPSBlbC5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBsICs9IGVsLnNjcm9sbExlZnQ7XHJcbiAgICAgICAgICAgICAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsID0gdGhpcy5fc2hhZG93Um9vdCA/IHRoaXMuX3NoYWRvd1Jvb3QuaG9zdCA6IG51bGw7XHJcbiAgICAgICAgICAgIHdoaWxlIChlbCkge1xyXG4gICAgICAgICAgICAgICAgdCArPSBlbC5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBsICs9IGVsLnNjcm9sbExlZnQ7XHJcbiAgICAgICAgICAgICAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB0b3A6IHQsXHJcbiAgICAgICAgICAgICAgICBsZWZ0OiBsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIE1ldGhvZCBmb3IgbWFuYWdpbmcgc3VibWVudSBlbGVtZW50LlxyXG4gICAgICAgICAqIFlvdSBtdXN0IGFkZCB0aGUgXCJzdWJtZW51XCIgZWxlbWVudCB1c2luZyB0aGUgdGhpcyBtZXRob2QgYXQgY3VzdG9tIHBsdWdpbi5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZSBQbHVnaW4gbmFtZVxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudHxudWxsfSB0YXJnZXQgVGFyZ2V0IGJ1dHRvblxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbWVudSBTdWJtZW51IGVsZW1lbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICBpbml0TWVudVRhcmdldDogZnVuY3Rpb24gKHBsdWdpbk5hbWUsIHRhcmdldCwgbWVudSkge1xyXG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0UGx1Z2luc1twbHVnaW5OYW1lXSA9IG1lbnU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuX21lbnVUcmF5LmFwcGVuZENoaWxkKG1lbnUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0UGx1Z2luc1twbHVnaW5OYW1lXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZW51VHJheVt0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKV0gPSBtZW51O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEVuYWJsZSBzdWJtZW51XHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFN1Ym1lbnUncyBidXR0b24gZWxlbWVudCB0byBjYWxsXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc3VibWVudU9uOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fYmluZGVkU3VibWVudU9mZikgdGhpcy5fYmluZGVkU3VibWVudU9mZigpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fYmluZENvbnRyb2xsZXJzT2ZmKSB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzdWJtZW51TmFtZSA9IHRoaXMuX3N1Ym1lbnVOYW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xyXG4gICAgICAgICAgICBjb25zdCBtZW51ID0gdGhpcy5zdWJtZW51ID0gdGhpcy5fbWVudVRyYXlbc3VibWVudU5hbWVdO1xyXG4gICAgICAgICAgICB0aGlzLnN1Ym1lbnVBY3RpdmVCdXR0b24gPSBlbGVtZW50O1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRNZW51UG9zaXRpb24oZWxlbWVudCwgbWVudSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9iaW5kZWRTdWJtZW51T2ZmID0gdGhpcy5zdWJtZW51T2ZmLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRG9jRXZlbnQoJ21vdXNlZG93bicsIHRoaXMuX2JpbmRlZFN1Ym1lbnVPZmYsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBsdWdpbnNbc3VibWVudU5hbWVdLm9uKSB0aGlzLnBsdWdpbnNbc3VibWVudU5hbWVdLm9uLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2FudGlCbHVyID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRGlzYWJsZSBzdWJtZW51XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc3VibWVudU9mZjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZURvY0V2ZW50KCdtb3VzZWRvd24nLCB0aGlzLl9iaW5kZWRTdWJtZW51T2ZmKTtcclxuICAgICAgICAgICAgdGhpcy5fYmluZGVkU3VibWVudU9mZiA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zdWJtZW51KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdWJtZW51TmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJtZW51LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1Ym1lbnUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyh0aGlzLnN1Ym1lbnVBY3RpdmVCdXR0b24sICdvbicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJtZW51QWN0aXZlQnV0dG9uID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdEhpZGVUb29sYmFyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2FudGlCbHVyID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERpc2FibGUgbW9yZSBsYXllclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1vcmVMYXllck9mZjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tb3JlTGF5ZXJBY3RpdmVCdXR0b24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyID0gY29udGV4dC5lbGVtZW50LnRvb2xiYXIucXVlcnlTZWxlY3RvcignLicgKyB0aGlzLl9tb3JlTGF5ZXJBY3RpdmVCdXR0b24uZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKSk7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9tb3JlTGF5ZXJBY3RpdmVCdXR0b24sICdvbicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9yZUxheWVyQWN0aXZlQnV0dG9uID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFbmFibGUgY29udGFpbmVyXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IENvbnRhaW5lcidzIGJ1dHRvbiBlbGVtZW50IHRvIGNhbGxcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb250YWluZXJPbjogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2JpbmRlZENvbnRhaW5lck9mZikgdGhpcy5fYmluZGVkQ29udGFpbmVyT2ZmKCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gdGhpcy5fY29udGFpbmVyTmFtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbW1hbmQnKTtcclxuICAgICAgICAgICAgY29uc3QgbWVudSA9IHRoaXMuY29udGFpbmVyID0gdGhpcy5fbWVudVRyYXlbY29udGFpbmVyTmFtZV07XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyQWN0aXZlQnV0dG9uID0gZWxlbWVudDtcclxuICAgICAgICAgICAgdGhpcy5fc2V0TWVudVBvc2l0aW9uKGVsZW1lbnQsIG1lbnUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fYmluZGVkQ29udGFpbmVyT2ZmID0gdGhpcy5jb250YWluZXJPZmYuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5hZGREb2NFdmVudCgnbW91c2Vkb3duJywgdGhpcy5fYmluZGVkQ29udGFpbmVyT2ZmLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5wbHVnaW5zW2NvbnRhaW5lck5hbWVdLm9uKSB0aGlzLnBsdWdpbnNbY29udGFpbmVyTmFtZV0ub24uY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5fYW50aUJsdXIgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBEaXNhYmxlIGNvbnRhaW5lclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnRhaW5lck9mZjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZURvY0V2ZW50KCdtb3VzZWRvd24nLCB0aGlzLl9iaW5kZWRDb250YWluZXJPZmYpO1xyXG4gICAgICAgICAgICB0aGlzLl9iaW5kZWRDb250YWluZXJPZmYgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250YWluZXJOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyh0aGlzLmNvbnRhaW5lckFjdGl2ZUJ1dHRvbiwgJ29uJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lckFjdGl2ZUJ1dHRvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RIaWRlVG9vbGJhciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9hbnRpQmx1ciA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTZXQgdGhlIG1lbnUgcG9zaXRpb24uIChzdWJtZW51LCBjb250YWluZXIpXHJcbiAgICAgICAgICogQHBhcmFtIHsqfSBlbGVtZW50IEJ1dHRvbiBlbGVtZW50XHJcbiAgICAgICAgICogQHBhcmFtIHsqfSBtZW51IE1lbnUgZWxlbWVudFxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3NldE1lbnVQb3NpdGlvbjogZnVuY3Rpb24gKGVsZW1lbnQsIG1lbnUpIHtcclxuICAgICAgICAgICAgbWVudS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgICAgIG1lbnUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIG1lbnUuc3R5bGUuaGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoZWxlbWVudCwgJ29uJyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0b29sYmFyID0gdGhpcy5jb250ZXh0LmVsZW1lbnQudG9vbGJhcjtcclxuICAgICAgICAgICAgY29uc3QgdG9vbGJhclcgPSB0b29sYmFyLm9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICBjb25zdCB0b29sYmFyT2Zmc2V0ID0gZXZlbnQuX2dldEVkaXRvck9mZnNldHMoY29udGV4dC5lbGVtZW50LnRvb2xiYXIpO1xyXG4gICAgICAgICAgICBjb25zdCBtZW51VyA9IG1lbnUub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IGwgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0TGVmdCArIDM7XHJcblxyXG4gICAgICAgICAgICAvLyBydGxcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucnRsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50VyA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBydGxXID0gbWVudVcgPiBlbGVtZW50VyA/IG1lbnVXIC0gZWxlbWVudFcgOiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcnRsTCA9IHJ0bFcgPiAwID8gMCA6IGVsZW1lbnRXIC0gbWVudVc7XHJcbiAgICAgICAgICAgICAgICBtZW51LnN0eWxlLmxlZnQgPSAobCAtIHJ0bFcgKyBydGxMKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICBpZiAodG9vbGJhck9mZnNldC5sZWZ0ID4gZXZlbnQuX2dldEVkaXRvck9mZnNldHMobWVudSkubGVmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lbnUuc3R5bGUubGVmdCA9ICcwcHgnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3ZlckxlZnQgPSB0b29sYmFyVyA8PSBtZW51VyA/IDAgOiB0b29sYmFyVyAtIChsICsgbWVudVcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG92ZXJMZWZ0IDwgMCkgbWVudS5zdHlsZS5sZWZ0ID0gKGwgKyBvdmVyTGVmdCkgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBtZW51LnN0eWxlLmxlZnQgPSBsICsgJ3B4JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gZ2V0IGVsZW1lbnQgdG9wXHJcbiAgICAgICAgICAgIGxldCB0ID0gMDtcclxuICAgICAgICAgICAgbGV0IG9mZnNldEVsID0gZWxlbWVudDtcclxuICAgICAgICAgICAgd2hpbGUgKG9mZnNldEVsICYmIG9mZnNldEVsICE9PSB0b29sYmFyKSB7XHJcbiAgICAgICAgICAgICAgICB0ICs9IG9mZnNldEVsLm9mZnNldFRvcDtcclxuICAgICAgICAgICAgICAgIG9mZnNldEVsID0gb2Zmc2V0RWwub2Zmc2V0UGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBidCA9IHQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0JhbGxvb24pIHtcclxuICAgICAgICAgICAgICAgIHQgKz0gdG9vbGJhci5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHQgLT0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHNldCBtZW51IHBvc2l0aW9uXHJcbiAgICAgICAgICAgIGNvbnN0IHRvb2xiYXJUb3AgPSB0b29sYmFyT2Zmc2V0LnRvcDtcclxuICAgICAgICAgICAgY29uc3QgbWVudUhlaWdodCA9IG1lbnUub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmdldEdsb2JhbFNjcm9sbE9mZnNldCgpLnRvcDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG1lbnVIZWlnaHRfYm90dG9tID0gX3cuaW5uZXJIZWlnaHQgLSAodG9vbGJhclRvcCAtIHNjcm9sbFRvcCArIGJ0ICsgZWxlbWVudC5wYXJlbnRFbGVtZW50Lm9mZnNldEhlaWdodCk7XHJcbiAgICAgICAgICAgIGlmIChtZW51SGVpZ2h0X2JvdHRvbSA8IG1lbnVIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIGxldCBtZW51VG9wID0gLTEgKiAobWVudUhlaWdodCAtIGJ0ICsgMyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnNUb3AgPSB0b29sYmFyVG9wIC0gc2Nyb2xsVG9wICsgbWVudVRvcDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lbnVIZWlnaHRfdG9wID0gbWVudUhlaWdodCArIChpbnNUb3AgPCAwID8gaW5zVG9wIDogMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG1lbnVIZWlnaHRfdG9wID4gbWVudUhlaWdodF9ib3R0b20pIHtcclxuICAgICAgICAgICAgICAgICAgICBtZW51LnN0eWxlLmhlaWdodCA9IG1lbnVIZWlnaHRfdG9wICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICBtZW51VG9wID0gLTEgKiAobWVudUhlaWdodF90b3AgLSBidCArIDMpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBtZW51LnN0eWxlLmhlaWdodCA9IG1lbnVIZWlnaHRfYm90dG9tICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICBtZW51VG9wID0gYnQgKyBlbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG1lbnUuc3R5bGUudG9wID0gbWVudVRvcCArICdweCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtZW51LnN0eWxlLnRvcCA9IChidCArIGVsZW1lbnQucGFyZW50RWxlbWVudC5vZmZzZXRIZWlnaHQpICsgJ3B4JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbWVudS5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNob3cgY29udHJvbGxlciBhdCBlZGl0b3IgYXJlYSAoY29udHJvbGxlciBlbGVtZW50cywgZnVuY3Rpb24sIFwiY29udHJvbGxlciB0YXJnZXQgZWxlbWVudChAUmVxdWlyZWQpXCIsIFwiY29udHJvbGxlciBuYW1lKEBSZXF1aXJlZClcIiwgZXRjLi4pXHJcbiAgICAgICAgICogQHBhcmFtIHsqfSBhcmd1bWVudHMgY29udHJvbGxlciBlbGVtZW50cywgZnVuY3Rpb25zLi5cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb250cm9sbGVyc09uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9iaW5kQ29udHJvbGxlcnNPZmYpIHRoaXMuX2JpbmRDb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJBcnJheSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGFyZzsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYXJnID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFhcmcpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENvbnRyb2xsZXJOYW1lID0gYXJnO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJBcnJheS5wdXNoKGFyZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaGFzQ2xhc3MoYXJnLCAnc2UtY29udHJvbGxlcicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29udHJvbGxlclRhcmdldCA9IGFyZztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGaWxlQ29tcG9uZW50SW5mbyA9IHRoaXMuZ2V0RmlsZUNvbXBvbmVudChhcmcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFyZy5zdHlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFyZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hhZG93Um9vdCAmJiB0aGlzLl9zaGFkb3dSb290Q29udHJvbGxlckV2ZW50VGFyZ2V0LmluZGV4T2YoYXJnKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7IGUucHJldmVudERlZmF1bHQoKTsgZS5zdG9wUHJvcGFnYXRpb24oKTsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoYWRvd1Jvb3RDb250cm9sbGVyRXZlbnRUYXJnZXQucHVzaChhcmcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlckFycmF5LnB1c2goYXJnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fYmluZENvbnRyb2xsZXJzT2ZmID0gdGhpcy5jb250cm9sbGVyc09mZi5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZERvY0V2ZW50KCdtb3VzZWRvd24nLCB0aGlzLl9iaW5kQ29udHJvbGxlcnNPZmYsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5hZGREb2NFdmVudCgna2V5ZG93bicsIHRoaXMuX2JpbmRDb250cm9sbGVyc09mZiwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9hbnRpQmx1ciA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5zaG93Q29udHJvbGxlciA9PT0gJ2Z1bmN0aW9uJykgZnVuY3Rpb25zLnNob3dDb250cm9sbGVyKHRoaXMuY3VycmVudENvbnRyb2xsZXJOYW1lLCB0aGlzLmNvbnRyb2xsZXJBcnJheSwgdGhpcyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEhpZGUgY29udHJvbGxlciBhdCBlZGl0b3IgYXJlYSAobGluayBidXR0b24sIGltYWdlIHJlc2l6ZSBidXR0b24uLilcclxuICAgICAgICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR8TW91c2VFdmVudHxudWxsfSBlIEV2ZW50IG9iamVjdCB3aGVuIGNhbGxlZCBmcm9tIG1vdXNlZG93biBhbmQga2V5ZG93biBldmVudHMgcmVnaXN0ZXJlZCBpbiBcImNvcmUuY29udHJvbGxlcnNPblwiXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29udHJvbGxlcnNPZmY6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpbmVCcmVha2VyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IHRoaXMuY29udHJvbGxlckFycmF5Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIGlmIChlICYmIGUudGFyZ2V0ICYmIGxlbiA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udHJvbGxlckFycmF5W2ldLmNvbnRhaW5zID09PSAnZnVuY3Rpb24nICYmIHRoaXMuY29udHJvbGxlckFycmF5W2ldLmNvbnRhaW5zKGUudGFyZ2V0KSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fZmlsZU1hbmFnZXIucGx1Z2luUmVnRXhwLnRlc3QodGhpcy5jdXJyZW50Q29udHJvbGxlck5hbWUpICYmIGUgJiYgZS50eXBlID09PSAna2V5ZG93bicgJiYgZS5rZXlDb2RlICE9PSAyNykgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQubGluZUJyZWFrZXJfdC5zdHlsZS5kaXNwbGF5ID0gY29udGV4dC5lbGVtZW50LmxpbmVCcmVha2VyX2Iuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX2xpbmVCcmVha0NvbXAgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29udHJvbGxlck5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29udHJvbGxlclRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZpbGVDb21wb25lbnRJbmZvID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5lZmZlY3ROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9iaW5kQ29udHJvbGxlcnNPZmYpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRG9jRXZlbnQoJ21vdXNlZG93bicsIHRoaXMuX2JpbmRDb250cm9sbGVyc09mZik7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRG9jRXZlbnQoJ2tleWRvd24nLCB0aGlzLl9iaW5kQ29udHJvbGxlcnNPZmYpO1xyXG4gICAgICAgICAgICB0aGlzLl9iaW5kQ29udHJvbGxlcnNPZmYgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udHJvbGxlckFycmF5W2ldID09PSAnZnVuY3Rpb24nKSB0aGlzLmNvbnRyb2xsZXJBcnJheVtpXSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5jb250cm9sbGVyQXJyYXlbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJBcnJheSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9hbnRpQmx1ciA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTcGVjaWZ5IHRoZSBwb3NpdGlvbiBvZiB0aGUgY29udHJvbGxlci5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRyb2xsZXIgQ29udHJvbGxlciBlbGVtZW50LlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gcmVmZXJFbCBFbGVtZW50IHRoYXQgaXMgdGhlIGJhc2lzIG9mIHRoZSBjb250cm9sbGVyJ3MgcG9zaXRpb24uXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBvc2l0aW9uIFR5cGUgb2YgcG9zaXRpb24gKFwidG9wXCIgfCBcImJvdHRvbVwiKVxyXG4gICAgICAgICAqIFdoZW4gdXNpbmcgdGhlIFwidG9wXCIgcG9zaXRpb24sIHRoZXJlIHNob3VsZCBub3QgYmUgYW4gYXJyb3cgb24gdGhlIGNvbnRyb2xsZXIuXHJcbiAgICAgICAgICogV2hlbiB1c2luZyB0aGUgXCJib3R0b21cIiBwb3NpdGlvbiB0aGVyZSBzaG91bGQgYmUgYW4gYXJyb3cgb24gdGhlIGNvbnRyb2xsZXIuXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGFkZE9mZnNldCBUaGVzZSBhcmUgdGhlIGxlZnQgYW5kIHRvcCB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIGFkZGVkIHNwZWNpYWxseS4gXHJcbiAgICAgICAgICogVGhpcyBhcmd1bWVudCBpcyByZXF1aXJlZC4gLSB7bGVmdDogMCwgdG9wOiAwfVxyXG4gICAgICAgICAqIFBsZWFzZSBlbnRlciB0aGUgdmFsdWUgYmFzZWQgb24gbHRyIG1vZGUuXHJcbiAgICAgICAgICogQ2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5IGluIHJ0bCBtb2RlLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNldENvbnRyb2xsZXJQb3NpdGlvbjogZnVuY3Rpb24gKGNvbnRyb2xsZXIsIHJlZmVyRWwsIHBvc2l0aW9uLCBhZGRPZmZzZXQpIHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucnRsKSBhZGRPZmZzZXQubGVmdCAqPSAtMTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHV0aWwuZ2V0T2Zmc2V0KHJlZmVyRWwsIGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUpO1xyXG4gICAgICAgICAgICBjb250cm9sbGVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgICAgICAgY29udHJvbGxlci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHJcbiAgICAgICAgICAgIC8vIEhlaWdodCB2YWx1ZSBvZiB0aGUgYXJyb3cgZWxlbWVudCBpcyAxMXB4XHJcbiAgICAgICAgICAgIGNvbnN0IHRvcE1hcmdpbiA9IHBvc2l0aW9uID09PSAndG9wJyA/IC0oY29udHJvbGxlci5vZmZzZXRIZWlnaHQgKyAyKSA6IChyZWZlckVsLm9mZnNldEhlaWdodCArIDEyKTtcclxuICAgICAgICAgICAgY29udHJvbGxlci5zdHlsZS50b3AgPSAob2Zmc2V0LnRvcCArIHRvcE1hcmdpbiArIGFkZE9mZnNldC50b3ApICsgJ3B4JztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGwgPSBvZmZzZXQubGVmdCAtIGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuc2Nyb2xsTGVmdCArIGFkZE9mZnNldC5sZWZ0O1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyVyA9IGNvbnRyb2xsZXIub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyRWxXID0gcmVmZXJFbC5vZmZzZXRXaWR0aDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFsbG93ID0gdXRpbC5oYXNDbGFzcyhjb250cm9sbGVyLmZpcnN0RWxlbWVudENoaWxkLCAnc2UtYXJyb3cnKSA/IGNvbnRyb2xsZXIuZmlyc3RFbGVtZW50Q2hpbGQgOiBudWxsO1xyXG5cclxuICAgICAgICAgICAgLy8gcnRsIChXaWR0aCB2YWx1ZSBvZiB0aGUgYXJyb3cgZWxlbWVudCBpcyAyMnB4KVxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5ydGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJ0bFcgPSAoY29udHJvbGxlclcgPiByZWZlckVsVykgPyBjb250cm9sbGVyVyAtIHJlZmVyRWxXIDogMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJ0bEwgPSBydGxXID4gMCA/IDAgOiByZWZlckVsVyAtIGNvbnRyb2xsZXJXO1xyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5zdHlsZS5sZWZ0ID0gKGwgLSBydGxXICsgcnRsTCkgKyAncHgnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChydGxXID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhbGxvdykgYWxsb3cuc3R5bGUubGVmdCA9ICgoY29udHJvbGxlclcgLSAxNCA8IDEwICsgcnRsVykgPyAoY29udHJvbGxlclcgLSAxNCkgOiAoMTAgKyBydGxXKSkgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJTaXplID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5vZmZzZXRMZWZ0IC0gY29udHJvbGxlci5vZmZzZXRMZWZ0O1xyXG4gICAgICAgICAgICAgICAgaWYgKG92ZXJTaXplID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuc3R5bGUubGVmdCA9ICcwcHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhbGxvdykgYWxsb3cuc3R5bGUubGVmdCA9IG92ZXJTaXplICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuc3R5bGUubGVmdCA9IGwgKyAncHgnO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJTaXplID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5vZmZzZXRXaWR0aCAtIChjb250cm9sbGVyLm9mZnNldExlZnQgKyBjb250cm9sbGVyVyk7XHJcbiAgICAgICAgICAgICAgICBpZiAob3ZlclNpemUgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5zdHlsZS5sZWZ0ID0gKGNvbnRyb2xsZXIub2Zmc2V0TGVmdCArIG92ZXJTaXplKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93KSBhbGxvdy5zdHlsZS5sZWZ0ID0gKDIwIC0gb3ZlclNpemUpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93KSBhbGxvdy5zdHlsZS5sZWZ0ID0gJzIwcHgnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb250cm9sbGVyLnN0eWxlLnZpc2liaWxpdHkgPSAnJztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gamF2YXNjcmlwdCBleGVjQ29tbWFuZFxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tYW5kIGphdmFzY3JpcHQgZXhlY0NvbW1hbmQgZnVuY3Rpb24gcHJvcGVydHlcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW58dW5kZWZpbmVkfSBzaG93RGVmYXVsdFVJIGphdmFzY3JpcHQgZXhlY0NvbW1hbmQgZnVuY3Rpb24gcHJvcGVydHlcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR9IHZhbHVlIGphdmFzY3JpcHQgZXhlY0NvbW1hbmQgZnVuY3Rpb24gcHJvcGVydHlcclxuICAgICAgICAgKi9cclxuICAgICAgICBleGVjQ29tbWFuZDogZnVuY3Rpb24gKGNvbW1hbmQsIHNob3dEZWZhdWx0VUksIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dkLmV4ZWNDb21tYW5kKGNvbW1hbmQsIHNob3dEZWZhdWx0VUksIChjb21tYW5kID09PSAnZm9ybWF0QmxvY2snID8gJzwnICsgdmFsdWUgKyAnPicgOiB2YWx1ZSkpO1xyXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKHRydWUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBGb2N1cyB0byB3eXNpd3lnIGFyZWEgdXNpbmcgXCJuYXRpdmUgZm9jdXMgZnVuY3Rpb25cIlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5hdGl2ZUZvY3VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX19mb2N1cygpO1xyXG4gICAgICAgICAgICB0aGlzLl9lZGl0b3JSYW5nZSgpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBGb2N1cyBtZXRob2RcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9fZm9jdXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FwdGlvbiA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudCh0aGlzLmdldFNlbGVjdGlvbk5vZGUoKSwgJ2ZpZ2NhcHRpb24nKTtcclxuICAgICAgICAgICAgaWYgKGNhcHRpb24pIHtcclxuICAgICAgICAgICAgICAgIGNhcHRpb24uZm9jdXMoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC53eXNpd3lnLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRm9jdXMgdG8gd3lzaXd5ZyBhcmVhXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZm9jdXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pZnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRm9jdXMoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0Q29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXIgJiYgdXRpbC5pc1d5c2l3eWdEaXYocmFuZ2Uuc3RhcnRDb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIuY2hpbGRyZW5bcmFuZ2Uuc3RhcnRPZmZzZXRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNGb3JtYXRFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhdXRpbC5pc0NvbXBvbmVudChjdXJyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IHV0aWwuY3JlYXRlRWxlbWVudChvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnIgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0JSJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQuYXBwZW5kQ2hpbGQoYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuaW5zZXJ0QmVmb3JlKGZvcm1hdCwgY3VycmVudE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShiciwgMCwgYnIsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UocmFuZ2Uuc3RhcnRDb250YWluZXIsIHJhbmdlLnN0YXJ0T2Zmc2V0LCByYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVGb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBldmVudC5fYXBwbHlUYWdFZmZlY3RzKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0JhbGxvb24pIGV2ZW50Ll90b2dnbGVUb29sYmFyQmFsbG9vbigpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJZiBcImZvY3VzRWxcIiBpcyBhIGNvbXBvbmVudCwgdGhlbiB0aGF0IGNvbXBvbmVudCBpcyBzZWxlY3RlZDsgaWYgaXQgaXMgYSBmb3JtYXQgZWxlbWVudCwgdGhlIGxhc3QgdGV4dCBpcyBzZWxlY3RlZFxyXG4gICAgICAgICAqIElmIFwiZm9jdXNFZGdlXCIgaXMgbnVsbCwgdGhlbiBzZWxlY3RlZCBsYXN0IGVsZW1lbnRcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR8bnVsbH0gZm9jdXNFbCBGb2N1cyBlbGVtZW50XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZm9jdXNFZGdlOiBmdW5jdGlvbiAoZm9jdXNFbCkge1xyXG4gICAgICAgICAgICBpZiAoIWZvY3VzRWwpIGZvY3VzRWwgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5sYXN0RWxlbWVudENoaWxkO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZUNvbXBvbmVudEluZm8gPSB0aGlzLmdldEZpbGVDb21wb25lbnQoZm9jdXNFbCk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlQ29tcG9uZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQoZmlsZUNvbXBvbmVudEluZm8udGFyZ2V0LCBmaWxlQ29tcG9uZW50SW5mby5wbHVnaW5OYW1lKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmb2N1c0VsKSB7XHJcbiAgICAgICAgICAgICAgICBmb2N1c0VsID0gdXRpbC5nZXRDaGlsZEVsZW1lbnQoZm9jdXNFbCwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgfHwgY3VycmVudC5ub2RlVHlwZSA9PT0gMzsgfSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZvY3VzRWwpIHRoaXMubmF0aXZlRm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5zZXRSYW5nZShmb2N1c0VsLCBmb2N1c0VsLnRleHRDb250ZW50Lmxlbmd0aCwgZm9jdXNFbCwgZm9jdXNFbC50ZXh0Q29udGVudC5sZW5ndGgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEZvY3Vzb3V0IHRvIHd5c2l3eWcgYXJlYSAoLmJsdXIoKSlcclxuICAgICAgICAgKi9cclxuICAgICAgICBibHVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5ibHVyKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5ibHVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2V0IGN1cnJlbnQgZWRpdG9yJ3MgcmFuZ2Ugb2JqZWN0IGFuZCByZXR1cm4uXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBzdGFydENvbiBUaGUgc3RhcnRDb250YWluZXIgcHJvcGVydHkgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuXHJcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0T2ZmIFRoZSBzdGFydE9mZnNldCBwcm9wZXJ0eSBvZiB0aGUgc2VsZWN0aW9uIG9iamVjdC5cclxuICAgICAgICAgKiBAcGFyYW0ge05vZGV9IGVuZENvbiBUaGUgZW5kQ29udGFpbmVyIHByb3BlcnR5IG9mIHRoZSBzZWxlY3Rpb24gb2JqZWN0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBlbmRPZmYgVGhlIGVuZE9mZnNldCBwcm9wZXJ0eSBvZiB0aGUgc2VsZWN0aW9uIG9iamVjdC5cclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSYW5nZSBvYmplY3QuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0UmFuZ2U6IGZ1bmN0aW9uIChzdGFydENvbiwgc3RhcnRPZmYsIGVuZENvbiwgZW5kT2ZmKSB7XHJcbiAgICAgICAgICAgIGlmICghc3RhcnRDb24gfHwgIWVuZENvbikgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoKHV0aWwuaXNCcmVhayhzdGFydENvbikgfHwgc3RhcnRDb24ubm9kZVR5cGUgPT09IDMpICYmIHN0YXJ0T2ZmID4gc3RhcnRDb24udGV4dENvbnRlbnQubGVuZ3RoKSBzdGFydE9mZiA9IHN0YXJ0Q29uLnRleHRDb250ZW50Lmxlbmd0aDtcclxuXHRcdCAgICBpZiAoKHV0aWwuaXNCcmVhayhlbmRDb24pIHx8IGVuZENvbi5ub2RlVHlwZSA9PT0gMykgJiYgZW5kT2ZmID4gZW5kQ29uLnRleHRDb250ZW50Lmxlbmd0aCkgZW5kT2ZmID0gZW5kQ29uLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KHN0YXJ0Q29uKSkge1xyXG4gICAgICAgICAgICAgICAgc3RhcnRDb24gPSBzdGFydENvbi5jaGlsZE5vZGVzW3N0YXJ0T2ZmID4gMCA/IHN0YXJ0Q29uLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSA6IDBdIHx8IHN0YXJ0Q29uO1xyXG4gICAgICAgICAgICAgICAgc3RhcnRPZmYgPSBzdGFydE9mZiA+IDAgPyAoc3RhcnRDb24ubm9kZVR5cGUgPT09IDEgJiYgIXV0aWwuaXNCcmVhayhzdGFydENvbikgPyAxIDogc3RhcnRDb24udGV4dENvbnRlbnQgPyBzdGFydENvbi50ZXh0Q29udGVudC5sZW5ndGggOiAwKSA6IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KGVuZENvbikpIHtcclxuICAgICAgICAgICAgICAgIGVuZENvbiA9IGVuZENvbi5jaGlsZE5vZGVzW2VuZE9mZiA+IDAgPyBlbmRDb24uY2hpbGROb2Rlcy5sZW5ndGggLSAxIDogMF0gfHwgZW5kQ29uO1xyXG4gICAgICAgICAgICAgICAgZW5kT2ZmID0gZW5kT2ZmID4gMCA/IChlbmRDb24ubm9kZVR5cGUgPT09IDEgJiYgIXV0aWwuaXNCcmVhayhlbmRDb24pID8gMSA6IGVuZENvbi50ZXh0Q29udGVudCA/IGVuZENvbi50ZXh0Q29udGVudC5sZW5ndGggOiAwKSA6IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5fd2QuY3JlYXRlUmFuZ2UoKTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRPZmYgPiBzdGFydENvbi50ZXh0Q29udGVudC5sZW5ndGgpIHN0YXJ0T2ZmID0gc3RhcnRDb24udGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVuZE9mZiA+IGVuZENvbi50ZXh0Q29udGVudC5sZW5ndGgpIGVuZE9mZiA9IGVuZENvbi50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydChzdGFydENvbiwgc3RhcnRPZmYpO1xyXG4gICAgICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKGVuZENvbiwgZW5kT2ZmKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1NVTkVESVRPUi5jb3JlLmZvY3VzLmVycm9yXSAnICsgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVGb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmFuZ2VJbmZvKHJhbmdlLCB0aGlzLmdldFNlbGVjdGlvbigpKTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaWZyYW1lKSB0aGlzLl9fZm9jdXMoKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiByYW5nZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlIHJhbmdlIG9iamVjdCBhbmQgYnV0dG9uIGVmZmVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlbW92ZVJhbmdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLl9yYW5nZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLl9zZWxlY3Rpb25Ob2RlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzRm9jdXMpIHRoaXMuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldEtleUVmZmVjdChbXSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldCBjdXJyZW50IGVkaXRvcidzIHJhbmdlIG9iamVjdFxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0UmFuZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLl92YXJpYWJsZS5fcmFuZ2UgfHwgdGhpcy5fY3JlYXRlRGVmYXVsdFJhbmdlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIGlmIChyYW5nZS5jb2xsYXBzZWQgPT09IHNlbGVjdGlvbi5pc0NvbGxhcHNlZCB8fCAhY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuY29udGFpbnMoc2VsZWN0aW9uLmZvY3VzTm9kZSkpIHJldHVybiByYW5nZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLl9yYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlLl9yYW5nZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjID0gc2VsZWN0aW9uLmFuY2hvck5vZGUsIGVjID0gc2VsZWN0aW9uLmZvY3VzTm9kZSwgc28gPSBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LCBlbyA9IHNlbGVjdGlvbi5mb2N1c09mZnNldDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVWYWx1ZSA9IHV0aWwuY29tcGFyZUVsZW1lbnRzKHNjLCBlYyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByaWdodERpciA9IGNvbXBhcmVWYWx1ZS5hbmNlc3RvciAmJiAoY29tcGFyZVZhbHVlLnJlc3VsdCA9PT0gMCA/IHNvIDw9IGVvIDogY29tcGFyZVZhbHVlLnJlc3VsdCA+IDEgPyB0cnVlIDogZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0UmFuZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHREaXIgPyBzYyA6IGVjLFxyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0RGlyID8gc28gOiBlbyxcclxuICAgICAgICAgICAgICAgICAgICByaWdodERpciA/IGVjIDogc2MsXHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHREaXIgPyBlbyA6IHNvXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIElmIHRoZSBcInJhbmdlXCIgb2JqZWN0IGlzIGEgbm9uLWVkaXRhYmxlIGFyZWEsIGFkZCBhIGxpbmUgYXQgdGhlIHRvcCBvZiB0aGUgZWRpdG9yIGFuZCB1cGRhdGUgdGhlIFwicmFuZ2VcIiBvYmplY3QuXHJcbiAgICAgICAgICogUmV0dXJucyBhIG5ldyBcInJhbmdlXCIgb3IgYXJndW1lbnQgXCJyYW5nZVwiLlxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByYW5nZSBjb3JlLmdldFJhbmdlKClcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR8bnVsbH0gY29udGFpbmVyIElmIHRoZXJlIGlzIFwiY29udGFpbmVyXCIgYXJndW1lbnQsIGl0IGNyZWF0ZXMgYSBsaW5lIGluIGZyb250IG9mIHRoZSBjb250YWluZXIuXHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gcmFuZ2VcclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRSYW5nZV9hZGRMaW5lOiBmdW5jdGlvbiAocmFuZ2UsIGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2VsZWN0aW9uVm9pZChyYW5nZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHd5c2l3eWcgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZztcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gdXRpbC5jcmVhdGVFbGVtZW50KG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICBvcC5pbm5lckhUTUwgPSAnPGJyPic7XHJcbiAgICAgICAgICAgICAgICB3eXNpd3lnLmluc2VydEJlZm9yZShvcCwgY29udGFpbmVyICYmIGNvbnRhaW5lciAhPT0gd3lzaXd5ZyA/IGNvbnRhaW5lci5uZXh0RWxlbWVudFNpYmxpbmcgOiB3eXNpd3lnLmZpcnN0RWxlbWVudENoaWxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2Uob3AuZmlyc3RFbGVtZW50Q2hpbGQsIDAsIG9wLmZpcnN0RWxlbWVudENoaWxkLCAxKTtcclxuICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5fdmFyaWFibGUuX3JhbmdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByYW5nZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0IHdpbmRvdyBzZWxlY3Rpb24gb2JlamN0XHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRTZWxlY3Rpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5fc2hhZG93Um9vdCAmJiB0aGlzLl9zaGFkb3dSb290LmdldFNlbGVjdGlvbiA/IHRoaXMuX3NoYWRvd1Jvb3QuZ2V0U2VsZWN0aW9uKCkgOiB0aGlzLl93dy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl92YXJpYWJsZS5fcmFuZ2UgJiYgIWNvbnRleHQuZWxlbWVudC53eXNpd3lnLmNvbnRhaW5zKHNlbGVjdGlvbi5mb2N1c05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UodGhpcy5fY3JlYXRlRGVmYXVsdFJhbmdlKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldCBjdXJyZW50IHNlbGVjdCBub2RlXHJcbiAgICAgICAgICogQHJldHVybnMge05vZGV9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0U2VsZWN0aW9uTm9kZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIWNvbnRleHQuZWxlbWVudC53eXNpd3lnLmNvbnRhaW5zKHRoaXMuX3ZhcmlhYmxlLl9zZWxlY3Rpb25Ob2RlKSkgdGhpcy5fZWRpdG9yUmFuZ2UoKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl92YXJpYWJsZS5fc2VsZWN0aW9uTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uTm9kZSA9IHV0aWwuZ2V0Q2hpbGRFbGVtZW50KGNvbnRleHQuZWxlbWVudC53eXNpd3lnLmZpcnN0Q2hpbGQsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwIHx8IGN1cnJlbnQubm9kZVR5cGUgPT09IDM7IH0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGlmICghc2VsZWN0aW9uTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRvclJhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLl9zZWxlY3Rpb25Ob2RlID0gc2VsZWN0aW9uTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uTm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFyaWFibGUuX3NlbGVjdGlvbk5vZGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNhdmluZyB0aGUgcmFuZ2Ugb2JqZWN0IGFuZCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5vZGUgb2YgZWRpdG9yXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfZWRpdG9yUmFuZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgYWN0aXZlRWwgPSB0aGlzLl93ZC5hY3RpdmVFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAodXRpbC5pc0lucHV0RWxlbWVudChhY3RpdmVFbCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLl9zZWxlY3Rpb25Ob2RlID0gYWN0aXZlRWw7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aXZlRWw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIGlmICghc2VsZWN0aW9uKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHJhbmdlID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuX2NyZWF0ZURlZmF1bHRSYW5nZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9yYW5nZUluZm8ocmFuZ2UsIHNlbGVjdGlvbik7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNldCBcInJhbmdlXCIgYW5kIFwic2VsZWN0aW9uXCIgaW5mby5cclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmFuZ2UgcmFuZ2Ugb2JqZWN0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWxlY3Rpb24gc2VsZWN0aW9uIG9iamVjdC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBfcmFuZ2VJbmZvOiBmdW5jdGlvbiAocmFuZ2UsIHNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLl9yYW5nZSA9IHJhbmdlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJhbmdlLmNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNXeXNpd3lnRGl2KHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSkgc2VsZWN0aW9uTm9kZSA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLmNoaWxkcmVuW3JhbmdlLnN0YXJ0T2Zmc2V0XSB8fCByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgIGVsc2Ugc2VsZWN0aW9uTm9kZSA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gZXh0ZW50Tm9kZSAtIEZpcmVmb3ggbGVnYWN5XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ob2RlID0gc2VsZWN0aW9uLmV4dGVudE5vZGUgfHwgc2VsZWN0aW9uLmFuY2hvck5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLl9zZWxlY3Rpb25Ob2RlID0gc2VsZWN0aW9uTm9kZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJuIHRoZSByYW5nZSBvYmplY3Qgb2YgZWRpdG9yJ3MgZmlyc3QgY2hpbGQgbm9kZVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfY3JlYXRlRGVmYXVsdFJhbmdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHd5c2l3eWcgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZztcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLl93ZC5jcmVhdGVSYW5nZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGZpcnN0Rm9ybWF0ID0gd3lzaXd5Zy5maXJzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgbGV0IGZvY3VzRWwgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoIWZpcnN0Rm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICBmaXJzdEZvcm1hdCA9IHV0aWwuY3JlYXRlRWxlbWVudChvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgZm9jdXNFbCA9IHV0aWwuY3JlYXRlRWxlbWVudCgnQlInKTtcclxuICAgICAgICAgICAgICAgIGZpcnN0Rm9ybWF0LmFwcGVuZENoaWxkKGZvY3VzRWwpO1xyXG4gICAgICAgICAgICAgICAgd3lzaXd5Zy5hcHBlbmRDaGlsZChmaXJzdEZvcm1hdCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb2N1c0VsID0gZmlyc3RGb3JtYXQuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIGlmICghZm9jdXNFbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRWwgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0JSJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3JtYXQuYXBwZW5kQ2hpbGQoZm9jdXNFbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KGZvY3VzRWwsIDApO1xyXG4gICAgICAgICAgICByYW5nZS5zZXRFbmQoZm9jdXNFbCwgMCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmFuZ2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBubyB2YWxpZCBcInNlbGVjdGlvblwiLlxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByYW5nZSBjb3JlLmdldFJhbmdlKClcclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSByYW5nZVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3NlbGVjdGlvblZvaWQ6IGZ1bmN0aW9uIChyYW5nZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb21tID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XHJcbiAgICAgICAgICAgIHJldHVybiAodXRpbC5pc1d5c2l3eWdEaXYocmFuZ2Uuc3RhcnRDb250YWluZXIpICYmIHV0aWwuaXNXeXNpd3lnRGl2KHJhbmdlLmVuZENvbnRhaW5lcikpIHx8IC9GSUdVUkUvaS50ZXN0KGNvbW0ubm9kZU5hbWUpIHx8IHRoaXMuX2ZpbGVNYW5hZ2VyLnJlZ0V4cC50ZXN0KGNvbW0ubm9kZU5hbWUpIHx8IHV0aWwuaXNNZWRpYUNvbXBvbmVudChjb21tKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmVzZXQgcmFuZ2Ugb2JqZWN0IHRvIHRleHQgbm9kZSBzZWxlY3RlZCBzdGF0dXMuXHJcbiAgICAgICAgICogQHJldHVybnMge0Jvb2xlYW59IFJldHVybnMgZmFsc2UgaWYgdGhlcmUgaXMgbm8gdmFsaWQgc2VsZWN0aW9uLlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3Jlc2V0UmFuZ2VUb1RleHROb2RlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2VsZWN0aW9uVm9pZChyYW5nZSkpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbGxhcHNlZCA9IHJhbmdlLmNvbGxhcHNlZDtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0Q29uID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGxldCBzdGFydE9mZiA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgICAgICBsZXQgZW5kQ29uID0gcmFuZ2UuZW5kQ29udGFpbmVyO1xyXG4gICAgICAgICAgICBsZXQgZW5kT2ZmID0gcmFuZ2UuZW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICBsZXQgdGVtcENvbiwgdGVtcE9mZnNldCwgdGVtcENoaWxkO1xyXG5cclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KHN0YXJ0Q29uKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzdGFydENvbi5jaGlsZE5vZGVzW3N0YXJ0T2ZmXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29uID0gc3RhcnRDb24ubGFzdENoaWxkIHx8IHN0YXJ0Q29uO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZmID0gc3RhcnRDb24udGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydENvbiA9IHN0YXJ0Q29uLmNoaWxkTm9kZXNbc3RhcnRPZmZdIHx8IHN0YXJ0Q29uO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZmID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlIChzdGFydENvbiAmJiBzdGFydENvbi5ub2RlVHlwZSA9PT0gMSAmJiBzdGFydENvbi5maXJzdENoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRDb24gPSBzdGFydENvbi5maXJzdENoaWxkIHx8IHN0YXJ0Q29uO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZmID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQoZW5kQ29uKSkge1xyXG4gICAgICAgICAgICAgICAgZW5kQ29uID0gZW5kQ29uLmNoaWxkTm9kZXNbZW5kT2ZmXSB8fCBlbmRDb24ubGFzdENoaWxkIHx8IGVuZENvbjtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChlbmRDb24gJiYgZW5kQ29uLm5vZGVUeXBlID09PSAxICYmIGVuZENvbi5sYXN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmRDb24gPSBlbmRDb24ubGFzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZW5kT2ZmID0gY29sbGFwc2VkID8gMCA6IGVuZENvbi50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHN0YXJ0Q29udGFpbmVyXHJcbiAgICAgICAgICAgIHRlbXBDb24gPSB1dGlsLmlzV3lzaXd5Z0RpdihzdGFydENvbikgPyBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5maXJzdENoaWxkIDogc3RhcnRDb247XHJcbiAgICAgICAgICAgIHRlbXBPZmZzZXQgPSBzdGFydE9mZjtcclxuXHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzQnJlYWsodGVtcENvbikgfHwgKHRlbXBDb24ubm9kZVR5cGUgPT09IDEgJiYgdGVtcENvbi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbmx5QnJlYWsgPSB1dGlsLmlzQnJlYWsodGVtcENvbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9ubHlCcmVhaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICh0ZW1wQ29uICYmICF1dGlsLmlzQnJlYWsodGVtcENvbikgJiYgdGVtcENvbi5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uID0gdGVtcENvbi5jaGlsZE5vZGVzW3RlbXBPZmZzZXRdIHx8IHRlbXBDb24ubmV4dEVsZW1lbnRTaWJsaW5nIHx8IHRlbXBDb24ubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBPZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1hdCA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudCh0ZW1wQ29uLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ID09PSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChmb3JtYXQsIG51bGwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IHV0aWwuY3JlYXRlRWxlbWVudCh1dGlsLmdldFBhcmVudEVsZW1lbnQodGVtcENvbiwgdXRpbC5pc0NlbGwpID8gJ0RJVicgOiBvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZvcm1hdCwgdGVtcENvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC5hcHBlbmRDaGlsZCh0ZW1wQ29uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayh0ZW1wQ29uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtcHR5VGV4dCA9IHV0aWwuY3JlYXRlVGV4dE5vZGUodXRpbC56ZXJvV2lkdGhTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcENvbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbXB0eVRleHQsIHRlbXBDb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBDb24gPSBlbXB0eVRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9ubHlCcmVhaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRDb24gPT09IGVuZENvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kQ29uID0gdGVtcENvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZE9mZiA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHNldCBzdGFydENvbnRhaW5lclxyXG4gICAgICAgICAgICBzdGFydENvbiA9IHRlbXBDb247XHJcbiAgICAgICAgICAgIHN0YXJ0T2ZmID0gdGVtcE9mZnNldDtcclxuXHJcbiAgICAgICAgICAgIC8vIGVuZENvbnRhaW5lclxyXG4gICAgICAgICAgICB0ZW1wQ29uID0gdXRpbC5pc1d5c2l3eWdEaXYoZW5kQ29uKSA/IGNvbnRleHQuZWxlbWVudC53eXNpd3lnLmxhc3RDaGlsZCA6IGVuZENvbjtcclxuICAgICAgICAgICAgdGVtcE9mZnNldCA9IGVuZE9mZjtcclxuXHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzQnJlYWsodGVtcENvbikgfHwgKHRlbXBDb24ubm9kZVR5cGUgPT09IDEgJiYgdGVtcENvbi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbmx5QnJlYWsgPSB1dGlsLmlzQnJlYWsodGVtcENvbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9ubHlCcmVhaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICh0ZW1wQ29uICYmICF1dGlsLmlzQnJlYWsodGVtcENvbikgJiYgdGVtcENvbi5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ2hpbGQgPSB0ZW1wQ29uLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wQ2hpbGQubGVuZ3RoID09PSAwKSBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbiA9IHRlbXBDaGlsZFt0ZW1wT2Zmc2V0ID4gMCA/IHRlbXBPZmZzZXQgLSAxIDogdGVtcE9mZnNldF0gfHwgIS9GSUdVUkUvaS50ZXN0KHRlbXBDaGlsZFswXS5ub2RlTmFtZSkgPyB0ZW1wQ2hpbGRbMF0gOiAodGVtcENvbi5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIHx8IHRlbXBDb24ucHJldmlvdXNTaWJsaW5nIHx8IHN0YXJ0Q29uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcE9mZnNldCA9IHRlbXBPZmZzZXQgPiAwID8gdGVtcENvbi50ZXh0Q29udGVudC5sZW5ndGggOiB0ZW1wT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1hdCA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudCh0ZW1wQ29uLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ID09PSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChmb3JtYXQsIG51bGwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IHV0aWwuY3JlYXRlRWxlbWVudCh1dGlsLmlzQ2VsbChmb3JtYXQpID8gJ0RJVicgOiBvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZvcm1hdCwgdGVtcENvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC5hcHBlbmRDaGlsZCh0ZW1wQ29uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayh0ZW1wQ29uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtcHR5VGV4dCA9IHV0aWwuY3JlYXRlVGV4dE5vZGUodXRpbC56ZXJvV2lkdGhTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcENvbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbXB0eVRleHQsIHRlbXBDb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBDb24gPSBlbXB0eVRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcE9mZnNldCA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9ubHlCcmVhayAmJiAhdGVtcENvbi5wcmV2aW91c1NpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGVuZENvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgZW5kQ29udGFpbmVyXHJcbiAgICAgICAgICAgIGVuZENvbiA9IHRlbXBDb247XHJcbiAgICAgICAgICAgIGVuZE9mZiA9IHRlbXBPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgUmFuZ2VcclxuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShzdGFydENvbiwgc3RhcnRPZmYsIGVuZENvbiwgZW5kT2ZmKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBcImZvcm1hdEVsZW1lbnRcIih1dGlsLmlzRm9ybWF0RWxlbWVudCkgYXJyYXkgZnJvbSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHJhbmdlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gdmFsaWRhdGlvbiBUaGUgdmFsaWRhdGlvbiBmdW5jdGlvbi4gKFJlcGxhY2VzIHRoZSBkZWZhdWx0IHZhbGlkYXRpb24gZnVuY3Rpb24tdXRpbC5pc0Zvcm1hdEVsZW1lbnQoY3VycmVudCkpXHJcbiAgICAgICAgICogQHJldHVybnMge0FycmF5fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldFNlbGVjdGVkRWxlbWVudHM6IGZ1bmN0aW9uICh2YWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fcmVzZXRSYW5nZVRvVGV4dE5vZGUoKSkgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICBsZXQgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc1d5c2l3eWdEaXYocmFuZ2Uuc3RhcnRDb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShjaGlsZHJlblswXSwgMCwgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0sIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnRleHRDb250ZW50LnRyaW0oKS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29uID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZENvbiA9IHJhbmdlLmVuZENvbnRhaW5lcjtcclxuICAgICAgICAgICAgY29uc3QgY29tbW9uQ29uID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XHJcblxyXG4gICAgICAgICAgICAvLyBnZXQgbGluZSBub2Rlc1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lTm9kZXMgPSB1dGlsLmdldExpc3RDaGlsZHJlbihjb21tb25Db24sIGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvbiA/IHZhbGlkYXRpb24oY3VycmVudCkgOiB1dGlsLmlzRm9ybWF0RWxlbWVudChjdXJyZW50KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXV0aWwuaXNXeXNpd3lnRGl2KGNvbW1vbkNvbikgJiYgIXV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQoY29tbW9uQ29uKSkgbGluZU5vZGVzLnVuc2hpZnQodXRpbC5nZXRGb3JtYXRFbGVtZW50KGNvbW1vbkNvbiwgbnVsbCkpO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnRDb24gPT09IGVuZENvbiB8fCBsaW5lTm9kZXMubGVuZ3RoID09PSAxKSByZXR1cm4gbGluZU5vZGVzO1xyXG5cclxuICAgICAgICAgICAgbGV0IHN0YXJ0TGluZSA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChzdGFydENvbiwgbnVsbCk7XHJcbiAgICAgICAgICAgIGxldCBlbmRMaW5lID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KGVuZENvbiwgbnVsbCk7XHJcbiAgICAgICAgICAgIGxldCBzdGFydElkeCA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBlbmRJZHggPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb25seVRhYmxlID0gZnVuY3Rpb24gKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB1dGlsLmlzVGFibGUoY3VycmVudCkgPyAvXlRBQkxFJC9pLnRlc3QoY3VycmVudC5ub2RlTmFtZSkgOiB0cnVlO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbGV0IHN0YXJ0UmFuZ2VFbCA9IHV0aWwuZ2V0UmFuZ2VGb3JtYXRFbGVtZW50KHN0YXJ0TGluZSwgb25seVRhYmxlKTtcclxuICAgICAgICAgICAgbGV0IGVuZFJhbmdlRWwgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChlbmRMaW5lLCBvbmx5VGFibGUpO1xyXG4gICAgICAgICAgICBpZiAodXRpbC5pc1RhYmxlKHN0YXJ0UmFuZ2VFbCkgJiYgdXRpbC5pc0xpc3RDZWxsKHN0YXJ0UmFuZ2VFbC5wYXJlbnROb2RlKSkgc3RhcnRSYW5nZUVsID0gc3RhcnRSYW5nZUVsLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzVGFibGUoZW5kUmFuZ2VFbCkgJiYgdXRpbC5pc0xpc3RDZWxsKGVuZFJhbmdlRWwucGFyZW50Tm9kZSkpIGVuZFJhbmdlRWwgPSBlbmRSYW5nZUVsLnBhcmVudE5vZGU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzYW1lUmFuZ2UgPSBzdGFydFJhbmdlRWwgPT09IGVuZFJhbmdlRWw7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBsaW5lTm9kZXMubGVuZ3RoLCBsaW5lOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lTm9kZXNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0TGluZSA9PT0gbGluZSB8fCAoIXNhbWVSYW5nZSAmJiBsaW5lID09PSBzdGFydFJhbmdlRWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJZHggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChlbmRMaW5lID09PSBsaW5lIHx8ICghc2FtZVJhbmdlICYmIGxpbmUgPT09IGVuZFJhbmdlRWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kSWR4ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHN0YXJ0SWR4ID09PSBudWxsKSBzdGFydElkeCA9IDA7XHJcbiAgICAgICAgICAgIGlmIChlbmRJZHggPT09IG51bGwpIGVuZElkeCA9IGxpbmVOb2Rlcy5sZW5ndGggLSAxO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGxpbmVOb2Rlcy5zbGljZShzdGFydElkeCwgZW5kSWR4ICsgMSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldCBmb3JtYXQgZWxlbWVudHMgYW5kIGNvbXBvbmVudHMgZnJvbSB0aGUgc2VsZWN0ZWQgYXJlYS4gKFAsIERJViwgSFsxLTZdLCBPTCwgVUwsIFRBQkxFLi4pXHJcbiAgICAgICAgICogSWYgc29tZSBvZiB0aGUgY29tcG9uZW50IGFyZSBpbmNsdWRlZCBpbiB0aGUgc2VsZWN0aW9uLCBnZXQgdGhlIGVudGlyZSB0aGF0IGNvbXBvbmVudC5cclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlbW92ZUR1cGxpY2F0ZSBJZiB0cnVlLCBpZiB0aGVyZSBpcyBhIHBhcmVudCBhbmQgY2hpbGQgdGFnIGFtb25nIHRoZSBzZWxlY3RlZCBlbGVtZW50cywgdGhlIGNoaWxkIHRhZyBpcyBleGNsdWRlZC5cclxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0U2VsZWN0ZWRFbGVtZW50c0FuZENvbXBvbmVudHM6IGZ1bmN0aW9uIChyZW1vdmVEdXBsaWNhdGUpIHtcclxuICAgICAgICAgICAgY29uc3QgY29tbW9uQ29uID0gdGhpcy5nZXRSYW5nZSgpLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG4gICAgICAgICAgICBjb25zdCBteUNvbXBvbmVudCA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChjb21tb25Db24sIHV0aWwuaXNDb21wb25lbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZExpbmVzID0gdXRpbC5pc1RhYmxlKGNvbW1vbkNvbikgP1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTZWxlY3RlZEVsZW1lbnRzKG51bGwpIDpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50cyhmdW5jdGlvbiAoY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuZ2V0UGFyZW50RWxlbWVudChjdXJyZW50LCB0aGlzLmlzQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuaXNGb3JtYXRFbGVtZW50KGN1cnJlbnQpICYmICghY29tcG9uZW50IHx8IGNvbXBvbmVudCA9PT0gbXlDb21wb25lbnQpKSB8fCAodGhpcy5pc0NvbXBvbmVudChjdXJyZW50KSAmJiAhdGhpcy5nZXRGb3JtYXRFbGVtZW50KGN1cnJlbnQpKTtcclxuICAgICAgICAgICAgICAgIH0uYmluZCh1dGlsKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocmVtb3ZlRHVwbGljYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRMaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSBpIC0gMTsgaiA+PSAwOyBqLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkTGluZXNbal0uY29udGFpbnMoc2VsZWN0ZWRMaW5lc1tpXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGluZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tOyBsZW4tLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRMaW5lcztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRGV0ZXJtaW5lIGlmIHRoaXMgb2Zmc2V0IGlzIHRoZSBlZGdlIG9mZnNldCBvZiBjb250YWluZXJcclxuICAgICAgICAgKiBAcGFyYW0ge05vZGV9IGNvbnRhaW5lciBUaGUgbm9kZSBvZiB0aGUgc2VsZWN0aW9uIG9iamVjdC4gKHJhbmdlLnN0YXJ0Q29udGFpbmVyLi4pXHJcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBUaGUgb2Zmc2V0IG9mIHRoZSBzZWxlY3Rpb24gb2JqZWN0LiAoY29yZS5nZXRSYW5nZSgpLnN0YXJ0T2Zmc2V0Li4uKVxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZH0gZGlyIFNlbGVjdCBjaGVjayBwb2ludCAtIEJvdGggZWRnZSwgRnJvbnQgZWRnZSBvciBFbmQgZWRnZS4gKFwic3RhcnRcIjogRnJvbnQgZWRnZSwgXCJlbmRcIjogRW5kIGVkZ2UsIHVuZGVmaW5lZDogQm90aCBlZGdlKVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlzRWRnZVBvaW50OiBmdW5jdGlvbiAoY29udGFpbmVyLCBvZmZzZXQsIGRpcikge1xyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSAxICYmICFjb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIChkaXIgIT09ICdlbmQnICYmIG9mZnNldCA9PT0gMCkgfHwgKCghZGlyIHx8IGRpciAhPT0gJ3N0YXJ0JykgJiYgIWNvbnRhaW5lci5ub2RlVmFsdWUgJiYgb2Zmc2V0ID09PSAxKSB8fCAoKCFkaXIgfHwgZGlyID09PSAnZW5kJykgJiYgISFjb250YWluZXIubm9kZVZhbHVlICYmIG9mZnNldCA9PT0gY29udGFpbmVyLm5vZGVWYWx1ZS5sZW5ndGgpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDaGVjayBpZiB0aGUgY29udGFpbmVyIGFuZCBvZmZzZXQgdmFsdWVzIGFyZSB0aGUgZWRnZXMgb2YgdGhlIGZvcm1hdCB0YWdcclxuICAgICAgICAgKiBAcGFyYW0ge05vZGV9IGNvbnRhaW5lciBUaGUgbm9kZSBvZiB0aGUgc2VsZWN0aW9uIG9iamVjdC4gKHJhbmdlLnN0YXJ0Q29udGFpbmVyLi4pXHJcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBUaGUgb2Zmc2V0IG9mIHRoZSBzZWxlY3Rpb24gb2JqZWN0LiAoY29yZS5nZXRSYW5nZSgpLnN0YXJ0T2Zmc2V0Li4uKVxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkaXIgU2VsZWN0IGNoZWNrIHBvaW50IC0gXCJzdGFydFwiOiBGcm9udCBlZGdlLCBcImVuZFwiOiBFbmQgZWRnZSwgdW5kZWZpbmVkOiBCb3RoIGVkZ2UuXHJcbiAgICAgICAgICogQHJldHVybnMge0FycmF5fG51bGx9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfaXNFZGdlRm9ybWF0OiBmdW5jdGlvbiAobm9kZSwgb2Zmc2V0LCBkaXIpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzRWRnZVBvaW50KG5vZGUsIG9mZnNldCwgZGlyKSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgICAgIGRpciA9IGRpciA9PT0gJ3N0YXJ0JyA/ICdwcmV2aW91c1NpYmxpbmcnIDogJ25leHRTaWJsaW5nJztcclxuICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYgIXV0aWwuaXNGb3JtYXRFbGVtZW50KG5vZGUpICYmICF1dGlsLmlzV3lzaXd5Z0Rpdihub2RlKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub2RlW2Rpcl0gfHwgKHV0aWwuaXNCcmVhayhub2RlW2Rpcl0pICYmICFub2RlW2Rpcl1bZGlyXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMSkgcmVzdWx0LnB1c2gobm9kZS5jbG9uZU5vZGUoZmFsc2UpKTtcclxuICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2hvdyBsb2FkaW5nIGJveFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNob3dMb2FkaW5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5sb2FkaW5nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDbG9zZSBsb2FkaW5nIGJveFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsb3NlTG9hZGluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQubG9hZGluZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBBcHBlbmQgZm9ybWF0IGVsZW1lbnQgdG8gc2libGluZyBub2RlIG9mIGFyZ3VtZW50IGVsZW1lbnQuXHJcbiAgICAgICAgICogSWYgdGhlIFwiZm9ybWF0Tm9kZU5hbWVcIiBhcmd1bWVudCB2YWx1ZSBpcyBwcmVzZW50LCB0aGUgdGFnIG9mIHRoYXQgYXJndW1lbnQgdmFsdWUgaXMgaW5zZXJ0ZWQsXHJcbiAgICAgICAgICogSWYgbm90LCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGZvcm1hdCB0YWcgaXMgaW5zZXJ0ZWQuXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEluc2VydCBhcyBzaWJsaW5ncyBvZiB0aGF0IGVsZW1lbnRcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ3xFbGVtZW50fG51bGx9IGZvcm1hdE5vZGUgTm9kZSBuYW1lIG9yIG5vZGUgb2JlamN0IHRvIGJlIGluc2VydGVkXHJcbiAgICAgICAgICogQHJldHVybnMge0VsZW1lbnR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXBwZW5kRm9ybWF0VGFnOiBmdW5jdGlvbiAoZWxlbWVudCwgZm9ybWF0Tm9kZSkge1xyXG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQucGFyZW50Tm9kZSkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Rm9ybWF0RWwgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQodGhpcy5nZXRTZWxlY3Rpb25Ob2RlKCksIG51bGwpO1xyXG4gICAgICAgICAgICBsZXQgb0Zvcm1hdCA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICghdXRpbC5pc0Zvcm1hdEVsZW1lbnQoZWxlbWVudCkgJiYgdXRpbC5pc0ZyZWVGb3JtYXRFbGVtZW50KGN1cnJlbnRGb3JtYXRFbCB8fCBlbGVtZW50LnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBvRm9ybWF0ID0gdXRpbC5jcmVhdGVFbGVtZW50KCdCUicpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb0Zvcm1hdE5hbWUgPSBmb3JtYXROb2RlID8gKHR5cGVvZiBmb3JtYXROb2RlID09PSAnc3RyaW5nJyA/IGZvcm1hdE5vZGUgOiBmb3JtYXROb2RlLm5vZGVOYW1lKSA6ICh1dGlsLmlzRm9ybWF0RWxlbWVudChjdXJyZW50Rm9ybWF0RWwpICYmICF1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KGN1cnJlbnRGb3JtYXRFbCkgJiYgIXV0aWwuaXNGcmVlRm9ybWF0RWxlbWVudChjdXJyZW50Rm9ybWF0RWwpKSA/IGN1cnJlbnRGb3JtYXRFbC5ub2RlTmFtZSA6IG9wdGlvbnMuZGVmYXVsdFRhZztcclxuICAgICAgICAgICAgICAgIG9Gb3JtYXQgPSB1dGlsLmNyZWF0ZUVsZW1lbnQob0Zvcm1hdE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgb0Zvcm1hdC5pbm5lckhUTUwgPSAnPGJyPic7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZvcm1hdE5vZGUgJiYgdHlwZW9mIGZvcm1hdE5vZGUgIT09ICdzdHJpbmcnKSB8fCAoIWZvcm1hdE5vZGUgJiYgdXRpbC5pc0Zvcm1hdEVsZW1lbnQoY3VycmVudEZvcm1hdEVsKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLmNvcHlUYWdBdHRyaWJ1dGVzKG9Gb3JtYXQsIGZvcm1hdE5vZGUgfHwgY3VycmVudEZvcm1hdEVsLCBbJ2lkJ10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc0NlbGwoZWxlbWVudCkpIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKG9Gb3JtYXQsIGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICAgICAgZWxzZSBlbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG9Gb3JtYXQsIGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvRm9ybWF0O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgbWV0aG9kIHRvIGluc2VydCBhIGVsZW1lbnQgYW5kIHJldHVybi4gKHVzZWQgZWxlbWVudHMgOiB0YWJsZSwgaHIsIGltYWdlLCB2aWRlbylcclxuICAgICAgICAgKiBJZiBcImVsZW1lbnRcIiBpcyBcIkhSXCIsIGluc2VydCBhbmQgcmV0dXJuIHRoZSBuZXcgbGluZS5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0byBiZSBpbnNlcnRlZFxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gbm90SGlzdG9yeVB1c2ggV2hlbiB0cnVlLCBpdCBkb2VzIG5vdCB1cGRhdGUgdGhlIGhpc3Rvcnkgc3RhY2sgYW5kIHRoZSBzZWxlY3Rpb24gb2JqZWN0IGFuZCByZXR1cm4gRWRnZU5vZGVzICh1dGlsLmdldEVkZ2VDaGlsZE5vZGVzKVxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gY2hlY2tDaGFyQ291bnQgSWYgdHJ1ZSwgaWYgXCJvcHRpb25zLm1heENoYXJDb3VudFwiIGlzIGV4Y2VlZGVkIHdoZW4gXCJlbGVtZW50XCIgaXMgYWRkZWQsIG51bGwgaXMgcmV0dXJuZWQgd2l0aG91dCBhZGRpdGlvbi5cclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IG5vdFNlbGVjdCBJZiB0cnVlLCBEbyBub3QgYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIGluc2VydGVkIGNvbXBvbmVudC5cclxuICAgICAgICAgKiBAcmV0dXJucyB7RWxlbWVudH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBpbnNlcnRDb21wb25lbnQ6IGZ1bmN0aW9uIChlbGVtZW50LCBub3RIaXN0b3J5UHVzaCwgY2hlY2tDaGFyQ291bnQsIG5vdFNlbGVjdCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlYWRPbmx5IHx8IChjaGVja0NoYXJDb3VudCAmJiAhdGhpcy5jaGVja0NoYXJDb3VudChlbGVtZW50LCBudWxsKSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByID0gdGhpcy5yZW1vdmVOb2RlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UmFuZ2VfYWRkTGluZSh0aGlzLmdldFJhbmdlKCksIHIuY29udGFpbmVyKTtcclxuICAgICAgICAgICAgbGV0IG9Ob2RlID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHNlbGVjdGlvbk5vZGUgPSB0aGlzLmdldFNlbGVjdGlvbk5vZGUoKTtcclxuICAgICAgICAgICAgbGV0IGZvcm1hdEVsID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHNlbGVjdGlvbk5vZGUsIG51bGwpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0Q2VsbChmb3JtYXRFbCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Tm9kZShlbGVtZW50LCBzZWxlY3Rpb25Ob2RlID09PSBmb3JtYXRFbCA/IG51bGwgOiAoc2VsZWN0aW9uTm9kZSB8fCByLmNvbnRhaW5lcikubmV4dFNpYmxpbmcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5uZXh0U2libGluZykgZWxlbWVudC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHV0aWwuY3JlYXRlRWxlbWVudCgnQlInKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRSYW5nZSgpLmNvbGxhcHNlZCAmJiAoci5jb250YWluZXIubm9kZVR5cGUgPT09IDMgfHwgdXRpbC5pc0JyZWFrKHIuY29udGFpbmVyKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXB0aEZvcm1hdCA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChyLmNvbnRhaW5lciwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIHRoaXMuaXNSYW5nZUZvcm1hdEVsZW1lbnQoY3VycmVudCk7IH0uYmluZCh1dGlsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb05vZGUgPSB1dGlsLnNwbGl0RWxlbWVudChyLmNvbnRhaW5lciwgci5vZmZzZXQsICFkZXB0aEZvcm1hdCA/IDAgOiB1dGlsLmdldEVsZW1lbnREZXB0aChkZXB0aEZvcm1hdCkgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob05vZGUpIGZvcm1hdEVsID0gb05vZGUucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnROb2RlKGVsZW1lbnQsIHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQoZm9ybWF0RWwpID8gbnVsbCA6IGZvcm1hdEVsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybWF0RWwgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoZm9ybWF0RWwpKSB1dGlsLnJlbW92ZUl0ZW0oZm9ybWF0RWwpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIW5vdFNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShlbGVtZW50LCAwLCBlbGVtZW50LCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlQ29tcG9uZW50SW5mbyA9IHRoaXMuZ2V0RmlsZUNvbXBvbmVudChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWxlQ29tcG9uZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGZpbGVDb21wb25lbnRJbmZvLnRhcmdldCwgZmlsZUNvbXBvbmVudEluZm8ucGx1Z2luTmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb05vZGUgPSB1dGlsLmdldEVkZ2VDaGlsZE5vZGVzKG9Ob2RlLCBudWxsKS5zYyB8fCBvTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKG9Ob2RlLCAwLCBvTm9kZSwgMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgaWYgKCFub3RIaXN0b3J5UHVzaCkgdGhpcy5oaXN0b3J5LnB1c2goMSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb05vZGUgfHwgZWxlbWVudDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgZmlsZSBjb21wb25lbnQgYW5kIHRoYXQgcGx1Z2luIG5hbWVcclxuICAgICAgICAgKiByZXR1cm46IHt0YXJnZXQsIGNvbXBvbmVudCwgcGx1Z2luTmFtZX0gfCBudWxsXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRhcmdldCBlbGVtZW50IChmaWd1cmUgdGFnLCBjb21wb25lbnQgZGl2LCBmaWxlIHRhZylcclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fG51bGx9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0RmlsZUNvbXBvbmVudDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9maWxlTWFuYWdlci5xdWVyeVN0cmluZyB8fCAhZWxlbWVudCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgICAgICBsZXQgdGFyZ2V0LCBwbHVnaW5OYW1lO1xyXG4gICAgICAgICAgICBpZiAoL15GSUdVUkUkL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSB8fCAvc2UtY29tcG9uZW50Ly50ZXN0KGVsZW1lbnQuY2xhc3NOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuX2ZpbGVNYW5hZ2VyLnF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRhcmdldCAmJiBlbGVtZW50Lm5vZGVOYW1lICYmIHRoaXMuX2ZpbGVNYW5hZ2VyLnJlZ0V4cC50ZXN0KGVsZW1lbnQubm9kZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBlbGVtZW50O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBwbHVnaW5OYW1lID0gdGhpcy5fZmlsZU1hbmFnZXIucGx1Z2luTWFwW3RhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICAgICAgICAgIGlmIChwbHVnaW5OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdXRpbC5nZXRQYXJlbnRFbGVtZW50KHRhcmdldCwgdXRpbC5pc0NvbXBvbmVudCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbk5hbWU6IHBsdWdpbk5hbWVcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGhlIGNvbXBvbmVudChpbWFnZSwgdmlkZW8pIGlzIHNlbGVjdGVkIGFuZCB0aGUgcmVzaXppbmcgbW9kdWxlIGlzIGNhbGxlZC5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0YWcgKGltZywgaWZyYW1lLCB2aWRlbylcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZSBQbHVnaW4gbmFtZSAoaW1hZ2UsIHZpZGVvKVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNlbGVjdENvbXBvbmVudDogZnVuY3Rpb24gKGVsZW1lbnQsIHBsdWdpbk5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNVbmVkaXRhYmxlQ29tcG9uZW50KHV0aWwuZ2V0UGFyZW50RWxlbWVudChlbGVtZW50LCB1dGlsLmlzQ29tcG9uZW50KSkgfHwgdXRpbC5pc1VuZWRpdGFibGVDb21wb25lbnQoZWxlbWVudCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc0ZvY3VzKSB0aGlzLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMucGx1Z2luc1twbHVnaW5OYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFwbHVnaW4pIHJldHVybjtcclxuICAgICAgICAgICAgX3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5zZWxlY3QgPT09ICdmdW5jdGlvbicpIHRoaXMuY2FsbFBsdWdpbihwbHVnaW5OYW1lLCBwbHVnaW4uc2VsZWN0LmJpbmQodGhpcywgZWxlbWVudCksIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Q29tcG9uZW50TGluZUJyZWFrZXIoZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNldCBsaW5lIGJyZWFrZXIgb2YgY29tcG9uZW50XHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGFnIChpbWcsIGlmcmFtZSwgdmlkZW8pXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc2V0Q29tcG9uZW50TGluZUJyZWFrZXI6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIC8vIGxpbmUgYnJlYWtlclxyXG4gICAgICAgICAgICB0aGlzLl9saW5lQnJlYWtlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgdXRpbC5pc0NvbXBvbmVudCk7XHJcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCB0X3N0eWxlID0gY29udGV4dC5lbGVtZW50LmxpbmVCcmVha2VyX3Quc3R5bGU7XHJcbiAgICAgICAgICAgIGNvbnN0IGJfc3R5bGUgPSBjb250ZXh0LmVsZW1lbnQubGluZUJyZWFrZXJfYi5zdHlsZTtcclxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5jb250ZXh0LnJlc2l6aW5nLnJlc2l6ZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID09PSAnYmxvY2snID8gdGhpcy5jb250ZXh0LnJlc2l6aW5nLnJlc2l6ZUNvbnRhaW5lciA6IGVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpc0xpc3QgPSB1dGlsLmlzTGlzdENlbGwoY29udGFpbmVyLnBhcmVudE5vZGUpO1xyXG4gICAgICAgICAgICBsZXQgY29tcG9uZW50VG9wLCB3U2Nyb2xsLCB3O1xyXG4gICAgICAgICAgICAvLyB0b3BcclxuICAgICAgICAgICAgaWYgKGlzTGlzdCA/ICFjb250YWluZXIucHJldmlvdXNTaWJsaW5nIHx8IHV0aWwuaXNDb21wb25lbnQoY29udGFpbmVyLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIDogIXV0aWwuaXNGb3JtYXRFbGVtZW50KGNvbnRhaW5lci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX2xpbmVCcmVha0NvbXAgPSBjb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICB3U2Nyb2xsID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50VG9wID0gdXRpbC5nZXRPZmZzZXQoZWxlbWVudCwgY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZSkudG9wICsgd1Njcm9sbDtcclxuICAgICAgICAgICAgICAgIHcgPSAodGFyZ2V0Lm9mZnNldFdpZHRoIC8gMikgLyAyO1xyXG5cclxuICAgICAgICAgICAgICAgIHRfc3R5bGUudG9wID0gKGNvbXBvbmVudFRvcCAtIHdTY3JvbGwgLSAxMikgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgdF9zdHlsZS5sZWZ0ID0gKHV0aWwuZ2V0T2Zmc2V0KHRhcmdldCkubGVmdCArIHcpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIHRfc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0X3N0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gYm90dG9tXHJcbiAgICAgICAgICAgIGlmIChpc0xpc3QgPyAhY29udGFpbmVyLm5leHRTaWJsaW5nIHx8IHV0aWwuaXNDb21wb25lbnQoY29udGFpbmVyLm5leHRFbGVtZW50U2libGluZykgIDogIXV0aWwuaXNGb3JtYXRFbGVtZW50KGNvbnRhaW5lci5uZXh0RWxlbWVudFNpYmxpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbXBvbmVudFRvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLl9saW5lQnJlYWtDb21wID0gY29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIHdTY3JvbGwgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50VG9wID0gdXRpbC5nZXRPZmZzZXQoZWxlbWVudCwgY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZSkudG9wICsgd1Njcm9sbDtcclxuICAgICAgICAgICAgICAgICAgICB3ID0gKHRhcmdldC5vZmZzZXRXaWR0aCAvIDIpIC8gMjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBiX3N0eWxlLnRvcCA9IChjb21wb25lbnRUb3AgKyB0YXJnZXQub2Zmc2V0SGVpZ2h0IC0gd1Njcm9sbCAtIDEyKSArICdweCc7XHJcbiAgICAgICAgICAgICAgICBiX3N0eWxlLmxlZnQgPSAodXRpbC5nZXRPZmZzZXQodGFyZ2V0KS5sZWZ0ICsgdGFyZ2V0Lm9mZnNldFdpZHRoIC0gdyAtIDI0KSArICdweCc7XHJcbiAgICAgICAgICAgICAgICBiX3N0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYl9zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2NoZWNrRHVwbGljYXRlTm9kZTogZnVuY3Rpb24gKG9Ob2RlLCBwYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvcmUuX2R1cGxlQ2hlY2soY3VycmVudCwgcGFyZW50Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gY3VycmVudC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25GdW5jKGNoaWxkTm9kZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KShvTm9kZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2R1cGxlQ2hlY2s6IGZ1bmN0aW9uIChvTm9kZSwgcGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICBpZiAoIXV0aWwuaXNUZXh0U3R5bGVFbGVtZW50KG9Ob2RlKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb1N0eWxlcyA9IChvTm9kZS5zdHlsZS5jc3NUZXh0Lm1hdGNoKC9bXjtdKzsvZykgfHwgW10pLm1hcChmdW5jdGlvbih2KXsgcmV0dXJuIHYudHJpbSgpOyB9KTtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZU5hbWUgPSBvTm9kZS5ub2RlTmFtZTtcclxuICAgICAgICAgICAgaWYgKC9ec3BhbiQvaS50ZXN0KG5vZGVOYW1lKSAmJiBvU3R5bGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG9Ob2RlO1xyXG5cclxuICAgICAgICAgICAgbGV0IGR1cGxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGFuY2VzdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc1d5c2l3eWdEaXYoYW5jZXN0b3IpIHx8ICF1dGlsLmlzVGV4dFN0eWxlRWxlbWVudChhbmNlc3RvcikpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGlmIChhbmNlc3Rvci5ub2RlTmFtZSA9PT0gbm9kZU5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkdXBsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVzID0gYW5jZXN0b3Iuc3R5bGUuY3NzVGV4dC5tYXRjaCgvW147XSs7L2cpIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBzdHlsZXMubGVuZ3RoLCBqOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChqID0gb1N0eWxlcy5pbmRleE9mKHN0eWxlc1tpXS50cmltKCkpKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvU3R5bGVzLnNwbGljZShqLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYW5jZXN0b3IuY2xhc3NMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9Ob2RlLmNsYXNzTGlzdC5yZW1vdmUoYW5jZXN0b3IuY2xhc3NMaXN0W2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVjdXJzaW9uRnVuYyhhbmNlc3Rvci5wYXJlbnRFbGVtZW50KTtcclxuICAgICAgICAgICAgfSkocGFyZW50Tm9kZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZHVwbGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghKG9Ob2RlLnN0eWxlLmNzc1RleHQgPSBvU3R5bGVzLmpvaW4oJyAnKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBvTm9kZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9Ob2RlLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghb05vZGUuYXR0cmlidXRlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBvTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2UtZHVwbGUnLCAndHJ1ZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb05vZGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZSBzZWxlY3RlZCBub2RlIGFuZCBpbnNlcnQgYXJndW1lbnQgdmFsdWUgbm9kZSBhbmQgcmV0dXJuLlxyXG4gICAgICAgICAqIElmIHRoZSBcImFmdGVyTm9kZVwiIGV4aXN0cywgaXQgaXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIFwiYWZ0ZXJOb2RlXCJcclxuICAgICAgICAgKiBJbnNlcnRpbmcgYSB0ZXh0IG5vZGUgbWVyZ2VzIHdpdGggYm90aCB0ZXh0IG5vZGVzIG9uIGJvdGggc2lkZXMgYW5kIHJldHVybnMgYSBuZXcgXCJ7IGNvbnRhaW5lciwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCB9XCIuXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBvTm9kZSBFbGVtZW50IHRvIGJlIGluc2VydGVkXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfG51bGx9IGFmdGVyTm9kZSBJZiB0aGUgbm9kZSBleGlzdHMsIGl0IGlzIGluc2VydGVkIGFmdGVyIHRoZSBub2RlXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBjaGVja0NoYXJDb3VudCBJZiB0cnVlLCBpZiBcIm9wdGlvbnMubWF4Q2hhckNvdW50XCIgaXMgZXhjZWVkZWQgd2hlbiBcImVsZW1lbnRcIiBpcyBhZGRlZCwgbnVsbCBpcyByZXR1cm5lZCB3aXRob3V0IGFkZGl0aW9uLlxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R8Tm9kZXxudWxsfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGluc2VydE5vZGU6IGZ1bmN0aW9uIChvTm9kZSwgYWZ0ZXJOb2RlLCBjaGVja0NoYXJDb3VudCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlYWRPbmx5IHx8IChjaGVja0NoYXJDb3VudCAmJiAhdGhpcy5jaGVja0NoYXJDb3VudChvTm9kZSwgbnVsbCkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGZOb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHJhbmdlID0gdGhpcy5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICBsZXQgbGluZSA9IHV0aWwuaXNMaXN0Q2VsbChyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikgPyByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lciA6IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudCh0aGlzLmdldFNlbGVjdGlvbk5vZGUoKSwgbnVsbCk7XHJcbiAgICAgICAgICAgIGxldCBpbnNlcnRMaXN0Q2VsbCA9IHV0aWwuaXNMaXN0Q2VsbChsaW5lKSAmJiAodXRpbC5pc0xpc3RDZWxsKG9Ob2RlKSB8fCB1dGlsLmlzTGlzdChvTm9kZSkpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHBhcmVudE5vZGUsIG9yaWdpbkFmdGVyLCB0ZW1wQWZ0ZXJOb2RlLCB0ZW1wUGFyZW50Tm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyZWVGb3JtYXQgPSB1dGlsLmlzRnJlZUZvcm1hdEVsZW1lbnQobGluZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzRm9ybWF0cyA9ICghZnJlZUZvcm1hdCAmJiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQob05vZGUpIHx8IHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQob05vZGUpKSkgfHwgdXRpbC5pc0NvbXBvbmVudChvTm9kZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaW5zZXJ0TGlzdENlbGwpIHtcclxuICAgICAgICAgICAgICAgIHRlbXBBZnRlck5vZGUgPSBhZnRlck5vZGUgfHwgdXRpbC5pc0xpc3Qob05vZGUpID8gbGluZS5sYXN0Q2hpbGQgOiBsaW5lLm5leHRFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgICAgIHRlbXBQYXJlbnROb2RlID0gdXRpbC5pc0xpc3Qob05vZGUpID8gbGluZSA6ICh0ZW1wQWZ0ZXJOb2RlIHx8IGxpbmUpLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghYWZ0ZXJOb2RlICYmIChpc0Zvcm1hdHMgfHwgdXRpbC5pc0NvbXBvbmVudChvTm9kZSkgfHwgdXRpbC5pc01lZGlhKG9Ob2RlKSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzRWRnZSA9IHRoaXMuaXNFZGdlUG9pbnQocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQsICdlbmQnKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0aGlzLnJlbW92ZU5vZGUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHIuY29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldkNvbnRhaW5lciA9IChjb250YWluZXIgPT09IHIucHJldkNvbnRhaW5lciAmJiByYW5nZS5jb2xsYXBzZWQpID8gbnVsbCA6IHIucHJldkNvbnRhaW5lcjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0TGlzdENlbGwgJiYgcHJldkNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBQYXJlbnROb2RlID0gcHJldkNvbnRhaW5lci5ub2RlVHlwZSA9PT0gMyA/IHByZXZDb250YWluZXIucGFyZW50Tm9kZSA6IHByZXZDb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBQYXJlbnROb2RlLmNvbnRhaW5zKGNvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNhbWVQYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQWZ0ZXJOb2RlID0gY29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGVtcEFmdGVyTm9kZS5wYXJlbnROb2RlICYmIHRlbXBBZnRlck5vZGUucGFyZW50Tm9kZSAhPT0gdGVtcFBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBBZnRlck5vZGUgPSB0ZW1wQWZ0ZXJOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lUGFyZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNhbWVQYXJlbnQgJiYgY29udGFpbmVyID09PSBwcmV2Q29udGFpbmVyKSB0ZW1wQWZ0ZXJOb2RlID0gdGVtcEFmdGVyTm9kZS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQWZ0ZXJOb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluc2VydExpc3RDZWxsICYmIHV0aWwuaXNMaXN0Q2VsbChjb250YWluZXIpICYmICFsaW5lLnBhcmVudEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5lID0gdXRpbC5jcmVhdGVFbGVtZW50KCdMSScpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBQYXJlbnROb2RlLmFwcGVuZENoaWxkKGxpbmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0ZW1wUGFyZW50Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcEFmdGVyTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gMyB8fCB1dGlsLmlzQnJlYWsoY29udGFpbmVyKSB8fCBpbnNlcnRMaXN0Q2VsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcHRoRm9ybWF0ID0gdXRpbC5nZXRQYXJlbnRFbGVtZW50KGNvbnRhaW5lciwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIHRoaXMuaXNSYW5nZUZvcm1hdEVsZW1lbnQoY3VycmVudCkgfHwgdGhpcy5pc0xpc3RDZWxsKGN1cnJlbnQpOyB9LmJpbmQodXRpbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IHV0aWwuc3BsaXRFbGVtZW50KGNvbnRhaW5lciwgci5vZmZzZXQsICFkZXB0aEZvcm1hdCA/IDAgOiB1dGlsLmdldEVsZW1lbnREZXB0aChkZXB0aEZvcm1hdCkgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFmdGVyTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNMaXN0Q2VsbChsaW5lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEFmdGVyTm9kZSA9IGFmdGVyTm9kZSA9IGxpbmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluc2VydExpc3RDZWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lLmNvbnRhaW5zKGNvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1Ykxpc3QgPSB1dGlsLmlzTGlzdChsaW5lLmxhc3RFbGVtZW50Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0NlbGwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VkZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsID0gbGluZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbGwuYXBwZW5kQ2hpbGQoYWZ0ZXJOb2RlLnRleHRDb250ZW50LnRyaW0oKSA/IGFmdGVyTm9kZSA6IHV0aWwuY3JlYXRlVGV4dE5vZGUodXRpbC56ZXJvV2lkdGhTcGFjZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Ykxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld0NlbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbCA9IGxpbmUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5hcHBlbmRDaGlsZCh1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VsbC5hcHBlbmRDaGlsZChsaW5lLmxhc3RFbGVtZW50Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NlbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld0NlbGwsIGxpbmUubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQWZ0ZXJOb2RlID0gYWZ0ZXJOb2RlID0gbmV3Q2VsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IGFmdGVyTm9kZS5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByYW5nZSA9ICghYWZ0ZXJOb2RlICYmICFpc0Zvcm1hdHMpID8gdGhpcy5nZXRSYW5nZV9hZGRMaW5lKHRoaXMuZ2V0UmFuZ2UoKSwgbnVsbCkgOiB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1vbkNvbiA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydE9mZiA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmRPZmYgPSByYW5nZS5lbmRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdFJhbmdlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IGNvbW1vbkNvbiAmJiB1dGlsLmlzRm9ybWF0RWxlbWVudChjb21tb25Db24pO1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydENvbiA9IGZvcm1hdFJhbmdlID8gKGNvbW1vbkNvbi5jaGlsZE5vZGVzW3N0YXJ0T2ZmXSB8fCBjb21tb25Db24uY2hpbGROb2Rlc1swXSB8fCByYW5nZS5zdGFydENvbnRhaW5lcikgOiByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgICAgICAgICAgY29uc3QgZW5kQ29uID0gZm9ybWF0UmFuZ2UgPyAoY29tbW9uQ29uLmNoaWxkTm9kZXNbZW5kT2ZmXSB8fCBjb21tb25Db24uY2hpbGROb2Rlc1tjb21tb25Db24uY2hpbGROb2Rlcy5sZW5ndGggLSAxXSB8fCByYW5nZS5lbmRDb250YWluZXIpIDogcmFuZ2UuZW5kQ29udGFpbmVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFpbnNlcnRMaXN0Q2VsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFhZnRlck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gc3RhcnRDb247XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29uLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBzdGFydENvbi5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIE5vIFNlbGVjdCByYW5nZSBub2RlICovXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLmNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbW9uQ29uLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbW9uQ29uLnRleHRDb250ZW50Lmxlbmd0aCA+IGVuZE9mZikgYWZ0ZXJOb2RlID0gY29tbW9uQ29uLnNwbGl0VGV4dChlbmRPZmYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBhZnRlck5vZGUgPSBjb21tb25Db24ubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNCcmVhayhwYXJlbnROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjID0gcGFyZW50Tm9kZS5jaGlsZE5vZGVzW3N0YXJ0T2ZmXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb2N1c05vZGUgPSAoYyAmJiBjLm5vZGVUeXBlID09PSAzICYmIHV0aWwub25seVplcm9XaWR0aFNwYWNlKGMpICYmIHV0aWwuaXNCcmVhayhjLm5leHRTaWJsaW5nKSkgPyBjLm5leHRTaWJsaW5nIDogYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9jdXNOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9jdXNOb2RlLm5leHRTaWJsaW5nICYmIHV0aWwuaXNCcmVhayhmb2N1c05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKGZvY3VzTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gKHV0aWwuaXNCcmVhayhmb2N1c05vZGUpICYmICF1dGlsLmlzQnJlYWsob05vZGUpKSA/IGZvY3VzTm9kZSA6IGZvY3VzTm9kZS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBwYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvKiogU2VsZWN0IHJhbmdlIG5vZGVzICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2FtZUNvbnRhaW5lciA9IHN0YXJ0Q29uID09PSBlbmRDb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NhbWVDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRWRnZVBvaW50KGVuZENvbiwgZW5kT2ZmKSkgYWZ0ZXJOb2RlID0gZW5kQ29uLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBhZnRlck5vZGUgPSBlbmRDb24uc3BsaXRUZXh0KGVuZE9mZik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZU5vZGUgPSBzdGFydENvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0VkZ2VQb2ludChzdGFydENvbiwgc3RhcnRPZmYpKSByZW1vdmVOb2RlID0gc3RhcnRDb24uc3BsaXRUZXh0KHN0YXJ0T2ZmKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKHJlbW92ZU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgJiYgaXNGb3JtYXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5pbm5lckhUTUwgPSAnPGJyPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVkVGFnID0gdGhpcy5yZW1vdmVOb2RlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSByZW1vdmVkVGFnLmNvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZDb250YWluZXIgPSByZW1vdmVkVGFnLnByZXZDb250YWluZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lciAmJiBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgJiYgaXNGb3JtYXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KGNvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICc8YnI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQoY29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJzwnICsgb3B0aW9ucy5kZWZhdWx0VGFnICsgJz48YnI+PC8nICsgb3B0aW9ucy5kZWZhdWx0VGFnICsgJz4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3RDZWxsKGNvbnRhaW5lcikgJiYgb05vZGUubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gY29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0Zvcm1hdHMgJiYgcHJldkNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBwcmV2Q29udGFpbmVyLm5vZGVUeXBlID09PSAzID8gcHJldkNvbnRhaW5lci5wYXJlbnROb2RlIDogcHJldkNvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50Tm9kZS5jb250YWlucyhjb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzYW1lUGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gY29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYWZ0ZXJOb2RlLnBhcmVudE5vZGUgJiYgYWZ0ZXJOb2RlLnBhcmVudE5vZGUgIT09IHBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IGFmdGVyTm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZVBhcmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYW1lUGFyZW50ICYmIGNvbnRhaW5lciA9PT0gcHJldkNvbnRhaW5lcikgYWZ0ZXJOb2RlID0gYWZ0ZXJOb2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1dGlsLmlzV3lzaXd5Z0Rpdihjb250YWluZXIpICYmICF1dGlsLmlzRm9ybWF0RWxlbWVudChvTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gY29udGFpbmVyLmFwcGVuZENoaWxkKHV0aWwuY3JlYXRlRWxlbWVudChvcHRpb25zLmRlZmF1bHRUYWcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBpc0Zvcm1hdHMgPyBlbmRDb24gOiBjb250YWluZXIgPT09IHByZXZDb250YWluZXIgPyBjb250YWluZXIubmV4dFNpYmxpbmcgOiBjb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9ICghYWZ0ZXJOb2RlIHx8ICFhZnRlck5vZGUucGFyZW50Tm9kZSkgPyBjb21tb25Db24gOiBhZnRlck5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYWZ0ZXJOb2RlICYmICF1dGlsLmlzRm9ybWF0RWxlbWVudChhZnRlck5vZGUpICYmIGFmdGVyTm9kZS5wYXJlbnROb2RlICE9PSBjb21tb25Db24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBhZnRlck5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIGhhcyBhZnRlck5vZGVcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gYWZ0ZXJOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gYWZ0ZXJOb2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbkFmdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIC8vIHNldCBub2RlXHJcbiAgICAgICAgICAgICAgICBpZiAoIWluc2VydExpc3RDZWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNXeXNpd3lnRGl2KGFmdGVyTm9kZSkgfHwgcGFyZW50Tm9kZSA9PT0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWcucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQob05vZGUpIHx8IHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQob05vZGUpIHx8ICghdXRpbC5pc0xpc3RDZWxsKHBhcmVudE5vZGUpICYmIHV0aWwuaXNDb21wb25lbnQob05vZGUpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRQYXJlbnQgPSBwYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3QoYWZ0ZXJOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IGFmdGVyTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXRpbC5pc0xpc3RDZWxsKGFmdGVyTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBhZnRlck5vZGUucHJldmlvdXNFbGVtZW50U2libGluZyB8fCBhZnRlck5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9yaWdpbkFmdGVyICYmICFhZnRlck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0aGlzLnJlbW92ZU5vZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHIuY29udGFpbmVyLm5vZGVUeXBlID09PSAzID8gKHV0aWwuaXNMaXN0Q2VsbCh1dGlsLmdldEZvcm1hdEVsZW1lbnQoci5jb250YWluZXIsIG51bGwpKSA/IHIuY29udGFpbmVyIDogKHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChyLmNvbnRhaW5lciwgbnVsbCkgfHwgci5jb250YWluZXIucGFyZW50Tm9kZSkpIDogci5jb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByYW5nZUNvbiA9IHV0aWwuaXNXeXNpd3lnRGl2KGNvbnRhaW5lcikgfHwgdXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChjb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHJhbmdlQ29uID8gY29udGFpbmVyIDogY29udGFpbmVyLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSByYW5nZUNvbiA/IG51bGwgOiBjb250YWluZXIubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRQYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgJiYgcGFyZW50Tm9kZSAhPT0gb2xkUGFyZW50KSB1dGlsLnJlbW92ZUl0ZW0ob2xkUGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0Zvcm1hdHMgJiYgIWZyZWVGb3JtYXQgJiYgIXV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQocGFyZW50Tm9kZSkgJiYgIXV0aWwuaXNMaXN0Q2VsbChwYXJlbnROb2RlKSAmJiAhdXRpbC5pc1d5c2l3eWdEaXYocGFyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gcGFyZW50Tm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc1d5c2l3eWdEaXYocGFyZW50Tm9kZSkgJiYgKG9Ob2RlLm5vZGVUeXBlID09PSAzIHx8IHV0aWwuaXNCcmVhayhvTm9kZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvbWF0Tm9kZSA9IHV0aWwuY3JlYXRlRWxlbWVudChvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb21hdE5vZGUuYXBwZW5kQ2hpbGQob05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmTm9kZSA9IG9Ob2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvTm9kZSA9IGZvbWF0Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaW5zZXJ0LS1cclxuICAgICAgICAgICAgICAgIGlmIChpbnNlcnRMaXN0Q2VsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGVtcFBhcmVudE5vZGUucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHRlbXBQYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSB0ZW1wQWZ0ZXJOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gcGFyZW50Tm9kZSA9PT0gYWZ0ZXJOb2RlID8gcGFyZW50Tm9kZS5sYXN0Q2hpbGQgOiBhZnRlck5vZGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0Q2VsbChvTm9kZSkgJiYgIXV0aWwuaXNMaXN0KHBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0Q2VsbChwYXJlbnROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBwYXJlbnROb2RlLm5leHRFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bCA9IHV0aWwuY3JlYXRlRWxlbWVudCgnb2wnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodWwsIGFmdGVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSB1bDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGlzdENlbGwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrRHVwbGljYXRlTm9kZShvTm9kZSwgcGFyZW50Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShvTm9kZSwgYWZ0ZXJOb2RlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0TGlzdENlbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UobGluZS50ZXh0Q29udGVudC50cmltKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShsaW5lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb05vZGUgPSBvTm9kZS5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hMaXN0ID0gdXRpbC5nZXRBcnJheUl0ZW0obGluZS5jaGlsZHJlbiwgdXRpbC5pc0xpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob05vZGUgIT09IGNoTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9Ob2RlLmFwcGVuZENoaWxkKGNoTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb05vZGUgPSBjaExpc3QucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKG9Ob2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvTm9kZSA9IHBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwub25seVplcm9XaWR0aFNwYWNlKGxpbmUudGV4dENvbnRlbnQudHJpbSgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShsaW5lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQob05vZGUpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdbU1VORURJVE9SLmluc2VydE5vZGUud2Fybl0gJyArIGVycm9yKTtcclxuICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgIGlmIChmTm9kZSkgb05vZGUgPSBmTm9kZTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkdXBsZU5vZGVzID0gcGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zZS1kdXBsZV0nKTtcclxuICAgICAgICAgICAgICAgIGlmIChkdXBsZU5vZGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZHVwbGVOb2Rlcy5sZW5ndGgsIGQsIGMsIGNoLCBwYXJlbnQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gZHVwbGVOb2Rlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBkLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGQucGFyZW50Tm9kZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaFswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGNoWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShjLCBkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQgPT09IG9Ob2RlKSBvTm9kZSA9IGM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCh1dGlsLmlzRm9ybWF0RWxlbWVudChvTm9kZSkgfHwgdXRpbC5pc0NvbXBvbmVudChvTm9kZSkpICYmIHN0YXJ0Q29uID09PSBlbmRDb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjSXRlbSA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChjb21tb25Db24sIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjSXRlbSAmJiBjSXRlbS5ub2RlVHlwZSA9PT0gMSAmJiB1dGlsLmlzRW1wdHlMaW5lKGNJdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oY0l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZnJlZUZvcm1hdCAmJiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQob05vZGUpIHx8IHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQob05vZGUpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9Ob2RlID0gdGhpcy5fc2V0SW50b0ZyZWVGb3JtYXQob05vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0NvbXBvbmVudChvTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gMTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob05vZGUubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gb05vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKG9Ob2RlLCBvZmZzZXQsIG9Ob2RlLCBvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXV0aWwuaXNCcmVhayhvTm9kZSkgJiYgIXV0aWwuaXNMaXN0Q2VsbChvTm9kZSkgJiYgdXRpbC5pc0Zvcm1hdEVsZW1lbnQocGFyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHplcm9XaWR0aCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb05vZGUucHJldmlvdXNTaWJsaW5nIHx8IHV0aWwuaXNCcmVhayhvTm9kZS5wcmV2aW91c1NpYmxpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvV2lkdGggPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb05vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoemVyb1dpZHRoLCBvTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb05vZGUubmV4dFNpYmxpbmcgfHwgdXRpbC5pc0JyZWFrKG9Ob2RlLm5leHRTaWJsaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgemVyb1dpZHRoID0gdXRpbC5jcmVhdGVUZXh0Tm9kZSh1dGlsLnplcm9XaWR0aFNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9Ob2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHplcm9XaWR0aCwgb05vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5faXNJZ25vcmVOb2RlQ2hhbmdlKG9Ob2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb05vZGUgPSBvTm9kZS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2Uob05vZGUsIG9mZnNldCwgb05vZGUsIG9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9Ob2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3NldEludG9GcmVlRm9ybWF0OiBmdW5jdGlvbiAob05vZGUpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IG9Ob2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGxldCBvTm9kZUNoaWxkcmVuLCBsYXN0T05vZGU7XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAodXRpbC5pc0Zvcm1hdEVsZW1lbnQob05vZGUpIHx8IHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQob05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBvTm9kZUNoaWxkcmVuID0gb05vZGUuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgIGxhc3RPTm9kZSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKG9Ob2RlQ2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBsYXN0T05vZGUgPSBvTm9kZUNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChsYXN0T05vZGUpIHx8IHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQobGFzdE9Ob2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRJbnRvRnJlZUZvcm1hdChsYXN0T05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9Ob2RlLnBhcmVudE5vZGUpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvTm9kZUNoaWxkcmVuID0gb05vZGUuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShsYXN0T05vZGUsIG9Ob2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob05vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHV0aWwucmVtb3ZlSXRlbShvTm9kZSk7XHJcbiAgICAgICAgICAgICAgICBvTm9kZSA9IHV0aWwuY3JlYXRlRWxlbWVudCgnQlInKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG9Ob2RlLCBsYXN0T05vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb05vZGU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5vZGVzIGFuZCByZXNldCBzZWxlY3Rpb24gcmFuZ2VcclxuICAgICAgICAgKiBSZXR1cm5zIHtjb250YWluZXI6IFwidGhlIGxhc3QgZWxlbWVudCBhZnRlciBkZWxldGlvblwiLCBvZmZzZXQ6IFwib2Zmc2V0XCIsIHByZXZDb250YWluZXI6IFwicHJldmlvdXNFbGVtZW50U2libGluZyBPZiB0aGUgZGVsZXRlZCBhcmVhXCJ9XHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICByZW1vdmVOb2RlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0UmFuZ2VUb1RleHROb2RlKCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlQ29tcG9uZW50ID0gdXRpbC5nZXRQYXJlbnRFbGVtZW50KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCB1dGlsLmlzTWVkaWFDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbGVDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBiciA9IHV0aWwuY3JlYXRlRWxlbWVudCgnQlInKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSB1dGlsLmNyZWF0ZUVsZW1lbnQob3B0aW9ucy5kZWZhdWx0VGFnKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQuYXBwZW5kQ2hpbGQoYnIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB1dGlsLmNoYW5nZUVsZW1lbnQoZmlsZUNvbXBvbmVudCwgZm9ybWF0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShmb3JtYXQsIDAsIGZvcm1hdCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2godHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogZm9ybWF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZDb250YWluZXI6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpc1N0YXJ0RWRnZSA9IHJhbmdlLnN0YXJ0T2Zmc2V0ID09PSAwO1xyXG4gICAgICAgICAgICBjb25zdCBpc0VuZEVkZ2UgPSBjb3JlLmlzRWRnZVBvaW50KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0LCAnZW5kJyk7XHJcbiAgICAgICAgICAgIGxldCBwcmV2Q29udGFpbmVyID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0UHJldkVsID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGVuZE5leHRFbCA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChpc1N0YXJ0RWRnZSkge1xyXG4gICAgICAgICAgICAgICAgc3RhcnRQcmV2RWwgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQocmFuZ2Uuc3RhcnRDb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0UHJldkVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJldkNvbnRhaW5lciA9IHN0YXJ0UHJldkVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRQcmV2RWwgPSBwcmV2Q29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc0VuZEVkZ2UpIHtcclxuICAgICAgICAgICAgICAgIGVuZE5leHRFbCA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChyYW5nZS5lbmRDb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgZW5kTmV4dEVsID0gZW5kTmV4dEVsID8gZW5kTmV4dEVsLm5leHRFbGVtZW50U2libGluZyA6IGVuZE5leHRFbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGNvbnRhaW5lciwgb2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0Q29uID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGxldCBlbmRDb24gPSByYW5nZS5lbmRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGxldCBzdGFydE9mZiA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgICAgICBsZXQgZW5kT2ZmID0gcmFuZ2UuZW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICBjb25zdCBjb21tb25Db24gPSAocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUgPT09IDMgJiYgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZSA9PT0gc3RhcnRDb24ucGFyZW50Tm9kZSkgPyBzdGFydENvbi5wYXJlbnROb2RlIDogcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XHJcbiAgICAgICAgICAgIGlmIChjb21tb25Db24gPT09IHN0YXJ0Q29uICYmIGNvbW1vbkNvbiA9PT0gZW5kQ29uKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydENvbiA9IGNvbW1vbkNvbi5jaGlsZHJlbltzdGFydE9mZl07XHJcbiAgICAgICAgICAgICAgICBlbmRDb24gPSBjb21tb25Db24uY2hpbGRyZW5bZW5kT2ZmXTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0T2ZmID0gZW5kT2ZmID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFzdGFydENvbiB8fCAhZW5kQ29uKSByZXR1cm4gIHtcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogY29tbW9uQ29uLFxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAwXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RhcnRDb24gPT09IGVuZENvbiAmJiByYW5nZS5jb2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGFydENvbi50ZXh0Q29udGVudCAmJiB1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShzdGFydENvbi50ZXh0Q29udGVudC5zdWJzdHIoc3RhcnRPZmYpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogc3RhcnRDb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogc3RhcnRPZmYsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZDb250YWluZXI6IHN0YXJ0Q29uICYmIHN0YXJ0Q29uLnBhcmVudE5vZGUgPyBzdGFydENvbiA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgYmVmb3JlTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBhZnRlck5vZGUgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IHV0aWwuZ2V0TGlzdENoaWxkTm9kZXMoY29tbW9uQ29uLCBudWxsKTtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSB1dGlsLmdldEFycmF5SW5kZXgoY2hpbGROb2Rlcywgc3RhcnRDb24pO1xyXG4gICAgICAgICAgICBsZXQgZW5kSW5kZXggPSB1dGlsLmdldEFycmF5SW5kZXgoY2hpbGROb2RlcywgZW5kQ29uKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCA+IDAgJiYgc3RhcnRJbmRleCA+IC0xICYmIGVuZEluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4ICsgMSwgc3RhcnROb2RlID0gc3RhcnRDb247IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZXNbaV0gPT09IHN0YXJ0Tm9kZS5wYXJlbnROb2RlICYmIGNoaWxkTm9kZXNbaV0uZmlyc3RDaGlsZCA9PT0gc3RhcnROb2RlICYmIHN0YXJ0T2ZmID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGVuZEluZGV4IC0gMSwgZW5kTm9kZSA9IGVuZENvbjsgaSA+IHN0YXJ0SW5kZXg7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGVzW2ldID09PSBlbmROb2RlLnBhcmVudE5vZGUgJiYgY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kTm9kZSA9IGVuZE5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmRJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQoY29tbW9uQ29uKSB8fCB1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KGNvbW1vbkNvbikgfHwgdXRpbC5pc1d5c2l3eWdEaXYoY29tbW9uQ29uKSB8fCB1dGlsLmlzQnJlYWsoY29tbW9uQ29uKSB8fCB1dGlsLmlzTWVkaWEoY29tbW9uQ29uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiBjb21tb25Db24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbW1vbkNvbi5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiBjb21tb25Db24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGVuZE9mZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGVzLnB1c2goY29tbW9uQ29uKTtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydENvbiA9IGVuZENvbiA9IGNvbW1vbkNvbjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRDb24gPSBlbmRDb24gPSBjaGlsZE5vZGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzQnJlYWsoc3RhcnRDb24pIHx8IHV0aWwub25seVplcm9XaWR0aFNwYWNlKHN0YXJ0Q29uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiB1dGlsLmlzTWVkaWEoY29tbW9uQ29uKSA/IGNvbW1vbkNvbiA6IHN0YXJ0Q29uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBlbmRJbmRleCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjaGlsZE5vZGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmxlbmd0aCA9PT0gMCB8fCAoaXRlbS5ub2RlVHlwZSA9PT0gMyAmJiBpdGVtLmRhdGEgPT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub2RlUmVtb3ZlTGlzdEl0ZW0oaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT09IHN0YXJ0Q29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29uLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzQ29tcG9uZW50KHN0YXJ0Q29uKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgYmVmb3JlTm9kZSA9IHV0aWwuY3JlYXRlVGV4dE5vZGUoc3RhcnRDb24udGV4dENvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtID09PSBlbmRDb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZU5vZGUgPSB1dGlsLmNyZWF0ZVRleHROb2RlKHN0YXJ0Q29uLnN1YnN0cmluZ0RhdGEoMCwgc3RhcnRPZmYpICsgZW5kQ29uLnN1YnN0cmluZ0RhdGEoZW5kT2ZmLCAoZW5kQ29uLmxlbmd0aCAtIGVuZE9mZikpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHN0YXJ0T2ZmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlTm9kZSA9IHV0aWwuY3JlYXRlVGV4dE5vZGUoc3RhcnRDb24uc3Vic3RyaW5nRGF0YSgwLCBzdGFydE9mZikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYmVmb3JlTm9kZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29uLmRhdGEgPSBiZWZvcmVOb2RlLmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm9kZVJlbW92ZUxpc3RJdGVtKHN0YXJ0Q29uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtID09PSBlbmRDb24pIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpdGVtID09PSBlbmRDb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kQ29uLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzQ29tcG9uZW50KGVuZENvbikpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGFmdGVyTm9kZSA9IHV0aWwuY3JlYXRlVGV4dE5vZGUoZW5kQ29uLnRleHRDb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSB1dGlsLmNyZWF0ZVRleHROb2RlKGVuZENvbi5zdWJzdHJpbmdEYXRhKGVuZE9mZiwgKGVuZENvbi5sZW5ndGggLSBlbmRPZmYpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWZ0ZXJOb2RlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kQ29uLmRhdGEgPSBhZnRlck5vZGUuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub2RlUmVtb3ZlTGlzdEl0ZW0oZW5kQ29uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX25vZGVSZW1vdmVMaXN0SXRlbShpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZW5kVWwgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoZW5kQ29uLCAndWwnKTtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRMaSA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChzdGFydENvbiwgJ2xpJyk7XHJcbiAgICAgICAgICAgIGlmIChlbmRVbCAmJiBzdGFydExpICYmIHN0YXJ0TGkuY29udGFpbnMoZW5kVWwpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIgPSBlbmRVbC5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBjb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyID0gZW5kQ29uICYmIGVuZENvbi5wYXJlbnROb2RlID8gZW5kQ29uIDogc3RhcnRDb24gJiYgc3RhcnRDb24ucGFyZW50Tm9kZSA/IHN0YXJ0Q29uIDogKHJhbmdlLmVuZENvbnRhaW5lciB8fCByYW5nZS5zdGFydENvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAoIWlzU3RhcnRFZGdlICYmICFpc0VuZEVkZ2UpID8gb2Zmc2V0IDogaXNFbmRFZGdlID8gY29udGFpbmVyLnRleHRDb250ZW50Lmxlbmd0aCA6IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdXRpbC5pc1d5c2l3eWdEaXYoY29udGFpbmVyKSAmJiBjb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJjID0gdXRpbC5yZW1vdmVJdGVtQWxsUGFyZW50cyhjb250YWluZXIsIG51bGwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJjKSBjb250YWluZXIgPSByYy5zYyB8fCByYy5lYyB8fCBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCF1dGlsLmdldEZvcm1hdEVsZW1lbnQoY29udGFpbmVyKSAmJiAhKHN0YXJ0Q29uICYmIHN0YXJ0Q29uLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZW5kTmV4dEVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gZW5kTmV4dEVsO1xyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0UHJldkVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gc3RhcnRQcmV2RWw7XHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc2V0IHJhbmdlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoY29udGFpbmVyLCBvZmZzZXQsIGNvbnRhaW5lciwgb2Zmc2V0KTtcclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaCh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcclxuICAgICAgICAgICAgICAgIG9mZnNldDogb2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgcHJldkNvbnRhaW5lcjogcHJldkNvbnRhaW5lclxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9ub2RlUmVtb3ZlTGlzdEl0ZW06IGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChpdGVtLCBudWxsKTtcclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGl0ZW0pO1xyXG5cclxuICAgICAgICAgICAgaWYoIXV0aWwuaXNMaXN0Q2VsbChmb3JtYXQpKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW1BbGxQYXJlbnRzKGZvcm1hdCwgbnVsbCwgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZm9ybWF0ICYmIHV0aWwuaXNMaXN0KGZvcm1hdC5maXJzdENoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgZm9ybWF0Lmluc2VydEJlZm9yZSh1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpLCBmb3JtYXQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQXBwZW5kZWQgYWxsIHNlbGVjdGVkIGZvcm1hdCBFbGVtZW50IHRvIHRoZSBhcmd1bWVudCBlbGVtZW50IGFuZCBpbnNlcnRcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJhbmdlRWxlbWVudCBFbGVtZW50IG9mIHdyYXAgdGhlIGFyZ3VtZW50cyAoQkxPQ0tRVU9URS4uLilcclxuICAgICAgICAgKi9cclxuICAgICAgICBhcHBseVJhbmdlRm9ybWF0RWxlbWVudDogZnVuY3Rpb24gKHJhbmdlRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldFJhbmdlX2FkZExpbmUodGhpcy5nZXRSYW5nZSgpLCBudWxsKTtcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2VMaW5lcyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50c0FuZENvbXBvbmVudHMoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAoIXJhbmdlTGluZXMgfHwgcmFuZ2VMaW5lcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGxpbmVzTG9vcDpcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJhbmdlTGluZXMubGVuZ3RoLCBsaW5lLCBuZXN0ZWQsIGZFbCwgbEVsLCBmLCBsOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxpbmUgPSByYW5nZUxpbmVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF1dGlsLmlzTGlzdENlbGwobGluZSkpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIG5lc3RlZCA9IGxpbmUubGFzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgIGlmIChuZXN0ZWQgJiYgdXRpbC5pc0xpc3RDZWxsKGxpbmUubmV4dEVsZW1lbnRTaWJsaW5nKSAmJiByYW5nZUxpbmVzLmluZGV4T2YobGluZS5uZXh0RWxlbWVudFNpYmxpbmcpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsRWwgPSBuZXN0ZWQubGFzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2VMaW5lcy5pbmRleE9mKGxFbCkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGlzdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgobGlzdCA9IGxFbC5sYXN0RWxlbWVudENoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0KGxpc3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlTGluZXMuaW5kZXhPZihsaXN0Lmxhc3RFbGVtZW50Q2hpbGQpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEVsID0gbGlzdC5sYXN0RWxlbWVudENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGxpbmVzTG9vcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZFbCA9IG5lc3RlZC5maXJzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZiA9IHJhbmdlTGluZXMuaW5kZXhPZihmRWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gcmFuZ2VMaW5lcy5pbmRleE9mKGxFbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlTGluZXMuc3BsaWNlKGYsIChsIC0gZikgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gcmFuZ2VMaW5lcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGxhc3QgID0gcmFuZ2VMaW5lc1tyYW5nZUxpbmVzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICBsZXQgc3RhbmRUYWcsIGJlZm9yZVRhZywgcEVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChsYXN0KSB8fCB1dGlsLmlzRm9ybWF0RWxlbWVudChsYXN0KSkge1xyXG4gICAgICAgICAgICAgICAgc3RhbmRUYWcgPSBsYXN0O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RhbmRUYWcgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChsYXN0LCBudWxsKSB8fCB1dGlsLmdldEZvcm1hdEVsZW1lbnQobGFzdCwgbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzQ2VsbChzdGFuZFRhZykpIHtcclxuICAgICAgICAgICAgICAgIGJlZm9yZVRhZyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBwRWxlbWVudCA9IHN0YW5kVGFnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYmVmb3JlVGFnID0gc3RhbmRUYWcubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICBwRWxlbWVudCA9IHN0YW5kVGFnLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBwYXJlbnREZXB0aCA9IHV0aWwuZ2V0RWxlbWVudERlcHRoKHN0YW5kVGFnKTtcclxuICAgICAgICAgICAgbGV0IGxpc3RQYXJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lQXJyID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZUl0ZW1zID0gZnVuY3Rpb24gKHBhcmVudCwgb3JpZ2luLCBiZWZvcmUpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjYyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50ICE9PSBvcmlnaW4gJiYgIXV0aWwuaXNUYWJsZShvcmlnaW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbiAmJiB1dGlsLmdldEVsZW1lbnREZXB0aChwYXJlbnQpID09PSB1dGlsLmdldEVsZW1lbnREZXB0aChvcmlnaW4pKSByZXR1cm4gYmVmb3JlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNjID0gdXRpbC5yZW1vdmVJdGVtQWxsUGFyZW50cyhvcmlnaW4sIG51bGwsIHBhcmVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNjID8gY2MuZWMgOiBiZWZvcmU7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmFuZ2VMaW5lcy5sZW5ndGgsIGxpbmUsIG9yaWdpblBhcmVudCwgZGVwdGgsIGJlZm9yZSwgbmV4dExpbmUsIG5leHRMaXN0LCBuZXN0ZWQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGluZSA9IHJhbmdlTGluZXNbaV07XHJcbiAgICAgICAgICAgICAgICBvcmlnaW5QYXJlbnQgPSBsaW5lLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9yaWdpblBhcmVudCB8fCByYW5nZUVsZW1lbnQuY29udGFpbnMob3JpZ2luUGFyZW50KSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgZGVwdGggPSB1dGlsLmdldEVsZW1lbnREZXB0aChsaW5lKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3Qob3JpZ2luUGFyZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0UGFyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0TGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFBhcmVudCA9IG5leHRMaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRMaXN0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RQYXJlbnQgPSBvcmlnaW5QYXJlbnQuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGluZUFyci5wdXNoKGxpbmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRMaW5lID0gcmFuZ2VMaW5lc1tpICsgMV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBsZW4gLSAxIHx8IChuZXh0TGluZSAmJiBuZXh0TGluZS5wYXJlbnROb2RlICE9PSBvcmlnaW5QYXJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5lc3RlZCBsaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0TGluZSAmJiBsaW5lLmNvbnRhaW5zKG5leHRMaW5lLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0TGlzdCA9IG5leHRMaW5lLnBhcmVudE5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBvcmlnaW5QYXJlbnQucGFyZW50Tm9kZSwgcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHV0aWwuaXNMaXN0KGxpc3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gdXRpbC5jcmVhdGVFbGVtZW50KGxpc3Qubm9kZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5hcHBlbmRDaGlsZChsaXN0UGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RQYXJlbnQgPSBwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWRnZSA9IHRoaXMuZGV0YWNoUmFuZ2VGb3JtYXRFbGVtZW50KG9yaWdpblBhcmVudCwgbGluZUFyciwgbnVsbCwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50RGVwdGggPj0gZGVwdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudERlcHRoID0gZGVwdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRWxlbWVudCA9IGVkZ2UuY2M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVUYWcgPSByZW1vdmVJdGVtcyhwRWxlbWVudCwgb3JpZ2luUGFyZW50LCBlZGdlLmVjKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWZvcmVUYWcpIHBFbGVtZW50ID0gYmVmb3JlVGFnLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocEVsZW1lbnQgPT09IGVkZ2UuY2MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZVRhZyA9IGVkZ2UuZWM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwRWxlbWVudCAhPT0gZWRnZS5jYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlID0gcmVtb3ZlSXRlbXMocEVsZW1lbnQsIGVkZ2UuY2MsIGJlZm9yZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmVmb3JlICE9PSB1bmRlZmluZWQpIGJlZm9yZVRhZyA9IGJlZm9yZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgYmVmb3JlVGFnID0gZWRnZS5jYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSBlZGdlLnJlbW92ZUFycmF5Lmxlbmd0aDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFBhcmVudC5hcHBlbmRDaGlsZChlZGdlLnJlbW92ZUFycmF5W2NdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXN0ZWQpIHJhbmdlRWxlbWVudC5hcHBlbmRDaGlsZChsaXN0UGFyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRMaXN0KSBlZGdlLnJlbW92ZUFycmF5W2VkZ2UucmVtb3ZlQXJyYXkubGVuZ3RoIC0gMV0uYXBwZW5kQ2hpbGQobmV4dExpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0UGFyZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50RGVwdGggPj0gZGVwdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50RGVwdGggPSBkZXB0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEVsZW1lbnQgPSBvcmlnaW5QYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZVRhZyA9IGxpbmUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByYW5nZUVsZW1lbnQuYXBwZW5kQ2hpbGQobGluZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwRWxlbWVudCAhPT0gb3JpZ2luUGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSA9IHJlbW92ZUl0ZW1zKHBFbGVtZW50LCBvcmlnaW5QYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmVmb3JlICE9PSB1bmRlZmluZWQpIGJlZm9yZVRhZyA9IGJlZm9yZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZWZmZWN0Tm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHV0aWwubWVyZ2VTYW1lVGFncyhyYW5nZUVsZW1lbnQsIG51bGwsIGZhbHNlKTtcclxuICAgICAgICAgICAgdXRpbC5tZXJnZU5lc3RlZFRhZ3MocmFuZ2VFbGVtZW50LCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gdGhpcy5pc0xpc3QoY3VycmVudCk7IH0uYmluZCh1dGlsKSk7XHJcblxyXG4gICAgICAgICAgICAvLyBOZXN0ZWQgbGlzdFxyXG4gICAgICAgICAgICBpZiAoYmVmb3JlVGFnICYmIHV0aWwuZ2V0RWxlbWVudERlcHRoKGJlZm9yZVRhZykgPiAwICYmICh1dGlsLmlzTGlzdChiZWZvcmVUYWcucGFyZW50Tm9kZSkgfHwgdXRpbC5pc0xpc3QoYmVmb3JlVGFnLnBhcmVudE5vZGUucGFyZW50Tm9kZSkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZXB0aEZvcm1hdCA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChiZWZvcmVUYWcsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiB0aGlzLmlzUmFuZ2VGb3JtYXRFbGVtZW50KGN1cnJlbnQpICYmICF0aGlzLmlzTGlzdChjdXJyZW50KTsgfS5iaW5kKHV0aWwpKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0UmFuZ2UgPSB1dGlsLnNwbGl0RWxlbWVudChiZWZvcmVUYWcsIG51bGwsICFkZXB0aEZvcm1hdCA/IDAgOiB1dGlsLmdldEVsZW1lbnREZXB0aChkZXB0aEZvcm1hdCkgKyAxKTtcclxuICAgICAgICAgICAgICAgIHNwbGl0UmFuZ2UucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocmFuZ2VFbGVtZW50LCBzcGxpdFJhbmdlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gYmFzaWNcclxuICAgICAgICAgICAgICAgIHBFbGVtZW50Lmluc2VydEJlZm9yZShyYW5nZUVsZW1lbnQsIGJlZm9yZVRhZyk7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVJdGVtcyhyYW5nZUVsZW1lbnQsIGJlZm9yZVRhZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGVkZ2UgPSB1dGlsLmdldEVkZ2VDaGlsZE5vZGVzKHJhbmdlRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCwgcmFuZ2VFbGVtZW50Lmxhc3RFbGVtZW50Q2hpbGQpO1xyXG4gICAgICAgICAgICBpZiAocmFuZ2VMaW5lcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKGVkZ2Uuc2MsIDAsIGVkZ2UuZWMsIGVkZ2UuZWMudGV4dENvbnRlbnQubGVuZ3RoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoZWRnZS5lYywgZWRnZS5lYy50ZXh0Q29udGVudC5sZW5ndGgsIGVkZ2UuZWMsIGVkZ2UuZWMudGV4dENvbnRlbnQubGVuZ3RoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRoZSBlbGVtZW50cyBvZiB0aGUgXCJzZWxlY3RlZEZvcm1hdHNcIiBhcnJheSBhcmUgZGV0YWNoZWQgZnJvbSB0aGUgXCJyYW5nZUVsZW1lbnRcIiBlbGVtZW50LiAoXCJMSVwiIHRhZ3MgYXJlIGNvbnZlcnRlZCB0byBcIlBcIiB0YWdzKVxyXG4gICAgICAgICAqIFdoZW4gXCJzZWxlY3RlZEZvcm1hdHNcIiBpcyBudWxsLCBhbGwgZWxlbWVudHMgYXJlIGRldGFjaGVkIGFuZCByZXR1cm4ge2NjOiBwYXJlbnROb2RlLCBzYzogbmV4dFNpYmxpbmcsIGVjOiBwcmV2aW91c1NpYmxpbmcsIHJlbW92ZUFycmF5OiBbQXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50c119LlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gcmFuZ2VFbGVtZW50IFJhbmdlIGZvcm1hdCBlbGVtZW50IChQUkUsIEJMT0NLUVVPVEUsIE9MLCBVTC4uLilcclxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fG51bGx9IHNlbGVjdGVkRm9ybWF0cyBBcnJheSBvZiBmb3JtYXQgZWxlbWVudHMgKFAsIERJViwgTEkuLi4pIHRvIHJlbW92ZS5cclxuICAgICAgICAgKiBJZiBudWxsLCBBcHBsaWVzIHRvIGFsbCBlbGVtZW50cyBhbmQgcmV0dXJuIHtjYzogcGFyZW50Tm9kZSwgc2M6IG5leHRTaWJsaW5nLCBlYzogcHJldmlvdXNTaWJsaW5nfVxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudHxudWxsfSBuZXdSYW5nZUVsZW1lbnQgVGhlIG5vZGUocmFuZ2VFbGVtZW50KSB0byByZXBsYWNlIHRoZSBjdXJyZW50bHkgd3JhcHBlZCBub2RlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVtb3ZlIElmIHRydWUsIGRlbGV0ZWQgd2l0aG91dCBkZXRhY2hlZC5cclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IG5vdEhpc3RvcnlQdXNoIFdoZW4gdHJ1ZSwgaXQgZG9lcyBub3QgdXBkYXRlIHRoZSBoaXN0b3J5IHN0YWNrIGFuZCB0aGUgc2VsZWN0aW9uIG9iamVjdCBhbmQgcmV0dXJuIEVkZ2VOb2RlcyAodXRpbC5nZXRFZGdlQ2hpbGROb2RlcylcclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRldGFjaFJhbmdlRm9ybWF0RWxlbWVudDogZnVuY3Rpb24gKHJhbmdlRWxlbWVudCwgc2VsZWN0ZWRGb3JtYXRzLCBuZXdSYW5nZUVsZW1lbnQsIHJlbW92ZSwgbm90SGlzdG9yeVB1c2gpIHtcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgIGxldCBzbyA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgICAgICBsZXQgZW8gPSByYW5nZS5lbmRPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSB1dGlsLmdldExpc3RDaGlsZE5vZGVzKHJhbmdlRWxlbWVudCwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQucGFyZW50Tm9kZSA9PT0gcmFuZ2VFbGVtZW50OyB9KTtcclxuICAgICAgICAgICAgbGV0IHBhcmVudCA9IHJhbmdlRWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBsZXQgZmlyc3ROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGxhc3ROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHJhbmdlRWwgPSByYW5nZUVsZW1lbnQuY2xvbmVOb2RlKGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZUFycmF5ID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0xpc3QgPSB1dGlsLmlzTGlzdChuZXdSYW5nZUVsZW1lbnQpO1xyXG4gICAgICAgICAgICBsZXQgaW5zZXJ0ZWROZXcgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IHJlc2V0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBtb3ZlQ29tcGxldGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGFwcGVuZE5vZGUgKHBhcmVudCwgaW5zTm9kZSwgc2libGluZywgb3JpZ2luTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwub25seVplcm9XaWR0aFNwYWNlKGluc05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zTm9kZS5pbm5lckhUTUwgPSB1dGlsLnplcm9XaWR0aFNwYWNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHNvID0gZW8gPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpbnNOb2RlLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShpbnNOb2RlLCBzaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zTm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnNDaGlsZHJlbiA9IChtb3ZlQ29tcGxldGUgPyBpbnNOb2RlIDogb3JpZ2luTm9kZSkuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgIGxldCBmb3JtYXQgPSBpbnNOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlyc3QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgIHdoaWxlIChpbnNDaGlsZHJlblswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGMgPSBpbnNDaGlsZHJlblswXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5fbm90VGV4dE5vZGUoYykgJiYgIXV0aWwuaXNCcmVhayhjKSAmJiAhdXRpbC5pc0xpc3RDZWxsKGZvcm1hdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3QpIGZpcnN0ID0gZm9ybWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShmb3JtYXQsIHNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gaW5zTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoYywgc2libGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3QpIGZpcnN0ID0gYztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQuYXBwZW5kQ2hpbGQoYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmb3JtYXQuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0Q2VsbChwYXJlbnQpICYmIHV0aWwuaXNMaXN0Q2VsbChmb3JtYXQpICYmIHV0aWwuaXNMaXN0KHNpYmxpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IHNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShzaWJsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LmFwcGVuZENoaWxkKHNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZvcm1hdCwgcGFyZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5OZXh0ID0gb3JpZ2luTm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXRhY2hSYW5nZSA9IHV0aWwuZGV0YWNoTmVzdGVkTGlzdChvcmlnaW5Ob2RlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJhbmdlRWxlbWVudCAhPT0gZGV0YWNoUmFuZ2UpIHx8IChvcmlnaW5OZXh0ICE9PSBvcmlnaW5Ob2RlLm5leHRFbGVtZW50U2libGluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmQ2hpbGRyZW4gPSBmb3JtYXQuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZkNoaWxkcmVuWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbk5vZGUuYXBwZW5kQ2hpbGQoZkNoaWxkcmVuWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlRWxlbWVudCA9IGRldGFjaFJhbmdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZm9ybWF0LCBzaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3QpIGZpcnN0ID0gZm9ybWF0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gZGV0YWNoIGxvb3BcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoaWxkcmVuLmxlbmd0aCwgaW5zTm9kZSwgbGluZUluZGV4LCBuZXh0OyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGluc05vZGUgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnNOb2RlLm5vZGVUeXBlID09PSAzICYmIHV0aWwuaXNMaXN0KHJhbmdlRWwpKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBtb3ZlQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChyZW1vdmUgJiYgaSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VsZWN0ZWRGb3JtYXRzIHx8IHNlbGVjdGVkRm9ybWF0cy5sZW5ndGggPT09IGxlbiB8fCBzZWxlY3RlZEZvcm1hdHNbMF0gPT09IGluc05vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3ROb2RlID0gcmFuZ2VFbGVtZW50LnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdE5vZGUgPSByYW5nZUVsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRGb3JtYXRzKSBsaW5lSW5kZXggPSBzZWxlY3RlZEZvcm1hdHMuaW5kZXhPZihpbnNOb2RlKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEZvcm1hdHMgJiYgbGluZUluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmFuZ2VFbCkgcmFuZ2VFbCA9IHJhbmdlRWxlbWVudC5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlRWwuYXBwZW5kQ2hpbGQoaW5zTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEZvcm1hdHMpIG5leHQgPSBzZWxlY3RlZEZvcm1hdHNbbGluZUluZGV4ICsgMV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlRWwgJiYgcmFuZ2VFbC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUocmFuZ2VFbCwgcmFuZ2VFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VFbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld0xpc3QgJiYgdXRpbC5pc0xpc3RDZWxsKGluc05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmIHV0aWwuZ2V0RWxlbWVudERlcHRoKGluc05vZGUpICE9PSB1dGlsLmdldEVsZW1lbnREZXB0aChuZXh0KSAmJiAodXRpbC5pc0xpc3RDZWxsKHBhcmVudCkgfHwgdXRpbC5nZXRBcnJheUl0ZW0oaW5zTm9kZS5jaGlsZHJlbiwgdXRpbC5pc0xpc3QsIGZhbHNlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluc05leHQgPSBpbnNOb2RlLm5leHRFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRldGFjaFJhbmdlID0gdXRpbC5kZXRhY2hOZXN0ZWRMaXN0KGluc05vZGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmFuZ2VFbGVtZW50ICE9PSBkZXRhY2hSYW5nZSkgfHwgaW5zTmV4dCAhPT0gaW5zTm9kZS5uZXh0RWxlbWVudFNpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZUVsZW1lbnQgPSBkZXRhY2hSYW5nZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lciA9IGluc05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNOb2RlID0gdXRpbC5jcmVhdGVFbGVtZW50KHJlbW92ZSA/IGlubmVyLm5vZGVOYW1lIDogKHV0aWwuaXNMaXN0KHJhbmdlRWxlbWVudC5wYXJlbnROb2RlKSB8fCB1dGlsLmlzTGlzdENlbGwocmFuZ2VFbGVtZW50LnBhcmVudE5vZGUpKSA/ICdMSScgOiB1dGlsLmlzQ2VsbChyYW5nZUVsZW1lbnQucGFyZW50Tm9kZSkgPyAnRElWJyA6IG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0NlbGwgPSB1dGlsLmlzTGlzdENlbGwoaW5zTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lckNoaWxkcmVuID0gaW5uZXIuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbm5lckNoaWxkcmVuWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0KGlubmVyQ2hpbGRyZW5bMF0pICYmICFpc0NlbGwpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc05vZGUuYXBwZW5kQ2hpbGQoaW5uZXJDaGlsZHJlblswXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNvcHlGb3JtYXRBdHRyaWJ1dGVzKGluc05vZGUsIGlubmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVDb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNOb2RlID0gaW5zTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbW92ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1JhbmdlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5zZXJ0ZWROZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShuZXdSYW5nZUVsZW1lbnQsIHJhbmdlRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkTmV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zTm9kZSA9IGFwcGVuZE5vZGUobmV3UmFuZ2VFbGVtZW50LCBpbnNOb2RlLCBudWxsLCBjaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc05vZGUgPSBhcHBlbmROb2RlKHBhcmVudCwgaW5zTm9kZSwgcmFuZ2VFbGVtZW50LCBjaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEZvcm1hdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE5vZGUgPSBpbnNOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3ROb2RlID0gaW5zTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWZpcnN0Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdE5vZGUgPSBsYXN0Tm9kZSA9IGluc05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQXJyYXkucHVzaChpbnNOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShjaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQgPSBtb3ZlQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gdXRpbC5nZXRMaXN0Q2hpbGROb2RlcyhyYW5nZUVsZW1lbnQsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiBjdXJyZW50LnBhcmVudE5vZGUgPT09IHJhbmdlRWxlbWVudDsgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZUVsID0gcmFuZ2VFbGVtZW50LmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSByYW5nZUVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByYW5nZVBhcmVudCA9IHJhbmdlRWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBsZXQgcmFuZ2VSaWdodCA9IHJhbmdlRWxlbWVudC5uZXh0U2libGluZztcclxuICAgICAgICAgICAgaWYgKHJhbmdlRWwgJiYgcmFuZ2VFbC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByYW5nZVBhcmVudC5pbnNlcnRCZWZvcmUocmFuZ2VFbCwgcmFuZ2VSaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChuZXdSYW5nZUVsZW1lbnQpIGZpcnN0Tm9kZSA9IG5ld1JhbmdlRWxlbWVudC5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCFmaXJzdE5vZGUpIGZpcnN0Tm9kZSA9IHJhbmdlRWxlbWVudC5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgIHJhbmdlUmlnaHQgPSByYW5nZUVsZW1lbnQubmV4dFNpYmxpbmcgIT09IHJhbmdlRWwgPyByYW5nZUVsZW1lbnQubmV4dFNpYmxpbmcgOiByYW5nZUVsID8gcmFuZ2VFbC5uZXh0U2libGluZyA6IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAocmFuZ2VFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fCByYW5nZUVsZW1lbnQudGV4dENvbnRlbnQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0ocmFuZ2VFbGVtZW50KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlRW1wdHlOb2RlKHJhbmdlRWxlbWVudCwgbnVsbCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZWRnZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChyZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgIGVkZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2M6IHJhbmdlUGFyZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHNjOiBmaXJzdE5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgc286IHNvLFxyXG4gICAgICAgICAgICAgICAgICAgIGVjOiByYW5nZVJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIGVvOiBlbyxcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVBcnJheTogcmVtb3ZlQXJyYXlcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZpcnN0Tm9kZSkgZmlyc3ROb2RlID0gbGFzdE5vZGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxhc3ROb2RlKSBsYXN0Tm9kZSA9IGZpcnN0Tm9kZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkRWRnZSA9IHV0aWwuZ2V0RWRnZUNoaWxkTm9kZXMoZmlyc3ROb2RlLCAobGFzdE5vZGUucGFyZW50Tm9kZSA/IGZpcnN0Tm9kZSA6IGxhc3ROb2RlKSk7XHJcbiAgICAgICAgICAgICAgICBlZGdlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNjOiAoY2hpbGRFZGdlLnNjIHx8IGNoaWxkRWRnZS5lYykucGFyZW50Tm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBzYzogY2hpbGRFZGdlLnNjLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvOiBzbyxcclxuICAgICAgICAgICAgICAgICAgICBlYzogY2hpbGRFZGdlLmVjLFxyXG4gICAgICAgICAgICAgICAgICAgIGVvOiBlbyxcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVBcnJheTogbnVsbFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lZmZlY3ROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKG5vdEhpc3RvcnlQdXNoKSByZXR1cm4gZWRnZTtcclxuXHJcbiAgICAgICAgICAgIGlmICghcmVtb3ZlICYmIGVkZ2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICghc2VsZWN0ZWRGb3JtYXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShlZGdlLnNjLCAwLCBlZGdlLnNjLCAwKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShlZGdlLnNjLCBzbywgZWRnZS5lYywgZW8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gXCJzZWxlY3RlZEZvcm1hdHNcIiBhcnJheSBhcmUgZGV0YWNoZWQgZnJvbSB0aGUgbGlzdCBlbGVtZW50LlxyXG4gICAgICAgICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYXBwbGllZCB3aGVuIHRoZSBmaXJzdCBhbmQgbGFzdCBsaW5lcyBvZiBcInNlbGVjdGVkRm9ybWF0c1wiIGFyZSBcIkxJXCIgcmVzcGVjdGl2ZWx5LlxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHNlbGVjdGVkRm9ybWF0cyBBcnJheSBvZiBmb3JtYXQgZWxlbWVudHMgKExJLCBQLi4uKSB0byByZW1vdmUuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSByZW1vdmUgSWYgdHJ1ZSwgZGVsZXRlZCB3aXRob3V0IGRldGFjaGVkLlxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHtzYzogPExJPiwgZWM6IDxMST59LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRldGFjaExpc3Q6IGZ1bmN0aW9uIChzZWxlY3RlZEZvcm1hdHMsIHJlbW92ZSkge1xyXG4gICAgICAgICAgICBsZXQgcmFuZ2VBcnIgPSB7fTtcclxuICAgICAgICAgICAgbGV0IGxpc3RGaXJzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgbGlzdExhc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IGZpcnN0ID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGxhc3QgPSBudWxsO1xyXG4gICAgICAgICAgICBjb25zdCBwYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuICF0aGlzLmlzQ29tcG9uZW50KGN1cnJlbnQpOyB9LmJpbmQodXRpbCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRGb3JtYXRzLmxlbmd0aCwgciwgbywgbGFzdEluZGV4LCBpc0xpc3Q7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gaSA9PT0gbGVuIC0gMTtcclxuICAgICAgICAgICAgICAgIG8gPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChzZWxlY3RlZEZvcm1hdHNbaV0sIHBhc3NDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgaXNMaXN0ID0gdXRpbC5pc0xpc3Qobyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXIgJiYgaXNMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgciA9IG87XHJcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2VBcnIgPSB7cjogciwgZjogW3V0aWwuZ2V0UGFyZW50RWxlbWVudChzZWxlY3RlZEZvcm1hdHNbaV0sICdMSScpXX07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIGxpc3RGaXJzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHIgJiYgaXNMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHIgIT09IG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWRnZSA9IHRoaXMuZGV0YWNoUmFuZ2VGb3JtYXRFbGVtZW50KHJhbmdlQXJyLmZbMF0ucGFyZW50Tm9kZSwgcmFuZ2VBcnIuZiwgbnVsbCwgcmVtb3ZlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbyA9IHNlbGVjdGVkRm9ybWF0c1tpXS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdEZpcnN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGVkZ2Uuc2M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0Rmlyc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEluZGV4KSBsYXN0ID0gZWRnZS5lYztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VBcnIgPSB7cjogciwgZjogW3V0aWwuZ2V0UGFyZW50RWxlbWVudChzZWxlY3RlZEZvcm1hdHNbaV0sICdMSScpXX07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEluZGV4KSBsaXN0TGFzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlQXJyLmYucHVzaCh1dGlsLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0ZWRGb3JtYXRzW2ldLCAnTEknKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0SW5kZXgpIGxpc3RMYXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RJbmRleCAmJiB1dGlsLmlzTGlzdChyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmRldGFjaFJhbmdlRm9ybWF0RWxlbWVudChyYW5nZUFyci5mWzBdLnBhcmVudE5vZGUsIHJhbmdlQXJyLmYsIG51bGwsIHJlbW92ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RMYXN0IHx8IGxlbiA9PT0gMSkgbGFzdCA9IGVkZ2UuZWM7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RGaXJzdCkgZmlyc3QgPSBlZGdlLnNjIHx8IGxhc3Q7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBzYzogZmlyc3QsXHJcbiAgICAgICAgICAgICAgICBlYzogbGFzdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBBZGQsIHVwZGF0ZSwgYW5kIGRlbGV0ZSBub2RlcyBmcm9tIHNlbGVjdGVkIHRleHQuXHJcbiAgICAgICAgICogMS4gSWYgdGhlcmUgaXMgYSBub2RlIGluIHRoZSBcImFwcGVuZE5vZGVcIiBhcmd1bWVudCwgYSBub2RlIHdpdGggdGhlIHNhbWUgdGFncyBhbmQgYXR0cmlidXRlcyBhcyBcImFwcGVuZE5vZGVcIiBpcyBhZGRlZCB0byB0aGUgc2VsZWN0aW9uIHRleHQuXHJcbiAgICAgICAgICogMi4gSWYgaXQgaXMgaW4gdGhlIHNhbWUgdGFnLCBvbmx5IHRoZSB0YWcncyBhdHRyaWJ1dGVzIGFyZSBjaGFuZ2VkIHdpdGhvdXQgYWRkaW5nIGEgdGFnLlxyXG4gICAgICAgICAqIDMuIElmIHRoZSBcImFwcGVuZE5vZGVcIiBhcmd1bWVudCBpcyBudWxsLCB0aGUgbm9kZSBvZiB0aGUgc2VsZWN0aW9uIGlzIHVwZGF0ZSBvciByZW1vdmUgd2l0aG91dCBhZGRpbmcgYSBuZXcgbm9kZS5cclxuICAgICAgICAgKiA0LiBUaGUgc2FtZSBzdHlsZSBhcyB0aGUgc3R5bGUgYXR0cmlidXRlIG9mIHRoZSBcInN0eWxlQXJyYXlcIiBhcmd1bWVudCBpcyBkZWxldGVkLlxyXG4gICAgICAgICAqICAgIChTdHlsZXMgc2hvdWxkIGJlIHB1dCB3aXRoIGF0dHJpYnV0ZSBuYW1lcyBmcm9tIGNzcy4gW1wiYmFja2dyb3VuZC1jb2xvclwiXSlcclxuICAgICAgICAgKiA1LiBUaGUgc2FtZSBjbGFzcyBuYW1lIGFzIHRoZSBjbGFzcyBhdHRyaWJ1dGUgb2YgdGhlIFwic3R5bGVBcnJheVwiIGFyZ3VtZW50IGlzIGRlbGV0ZWQuXHJcbiAgICAgICAgICogICAgKFRoZSBjbGFzcyBuYW1lIGlzIHByZWNlZGVkIGJ5IFwiLlwiIFtcIi5jbGFzc05hbWVcIl0pXHJcbiAgICAgICAgICogNi4gVXNlIGEgbGlzdCBvZiBzdHlsZXMgYW5kIGNsYXNzZXMgb2YgXCJhcHBlbmROb2RlXCIgaW4gXCJzdHlsZUFycmF5XCIgdG8gYXZvaWQgZHVwbGljYXRlIHByb3BlcnR5IHZhbHVlcy5cclxuICAgICAgICAgKiA3LiBJZiBhIG5vZGUgd2l0aCBhbGwgc3R5bGVzIGFuZCBjbGFzc2VzIHJlbW92ZWQgaGFzIHRoZSBzYW1lIHRhZyBuYW1lIGFzIFwiYXBwZW5kTm9kZVwiIG9yIFwicmVtb3ZlTm9kZUFycmF5XCIsIG9yIFwiYXBwZW5kTm9kZVwiIGlzIG51bGwsIHRoYXQgbm9kZSBpcyBkZWxldGVkLlxyXG4gICAgICAgICAqIDguIFJlZ2FyZGxlc3Mgb2YgdGhlIHN0eWxlIGFuZCBjbGFzcyBvZiB0aGUgbm9kZSwgdGhlIHRhZyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIFwicmVtb3ZlTm9kZUFycmF5XCIgYXJndW1lbnQgdmFsdWUgaXMgZGVsZXRlZC5cclxuICAgICAgICAgKiA5LiBJZiB0aGUgXCJzdHJpY3RSZW1vdmVcIiBhcmd1bWVudCBpcyB0cnVlLCBvbmx5IG5vZGVzIHdpdGggYWxsIHN0eWxlcyBhbmQgY2xhc3NlcyByZW1vdmVkIGZyb20gdGhlIG5vZGVzIG9mIFwicmVtb3ZlTm9kZUFycmF5XCIgYXJlIHJlbW92ZWQuXHJcbiAgICAgICAgICoxMC4gSXQgd29uJ3Qgd29yayBpZiB0aGUgcGFyZW50IG5vZGUgaGFzIHRoZSBzYW1lIGNsYXNzIGFuZCBzYW1lIHZhbHVlIHN0eWxlLlxyXG4gICAgICAgICAqICAgIEhvd2V2ZXIsIGlmIHRoZXJlIGlzIGEgdmFsdWUgaW4gXCJyZW1vdmVOb2RlQXJyYXlcIiwgaXQgd29ya3MgYW5kIHRoZSB0ZXh0IG5vZGUgaXMgc2VwYXJhdGVkIGV2ZW4gaWYgdGhlcmUgaXMgbm8gbm9kZSB0byByZXBsYWNlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudHxudWxsfSBhcHBlbmROb2RlIFRoZSBlbGVtZW50IHRvIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3Rpb24uIElmIGl0IGlzIG51bGwsIG9ubHkgZGVsZXRlIHRoZSBub2RlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8bnVsbH0gc3R5bGVBcnJheSBUaGUgc3R5bGUgb3IgY2xhc3NOYW1lIGF0dHJpYnV0ZSBuYW1lIEFycmF5IHRvIGNoZWNrIChbJ2ZvbnQtc2l6ZSddLCBbJy5jbGFzc05hbWUnXSwgWydmb250LWZhbWlseScsICdjb2xvcicsICcuY2xhc3NOYW1lJ10uLi5dKVxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8bnVsbH0gcmVtb3ZlTm9kZUFycmF5IEFuIGFycmF5IG9mIG5vZGUgbmFtZXMgdG8gcmVtb3ZlIHR5cGVzIGZyb20sIHJlbW92ZSBhbGwgZm9ybWF0cyB3aGVuIFwiYXBwZW5kTm9kZVwiIGlzIG51bGwgYW5kIHRoZXJlIGlzIGFuIGVtcHR5IGFycmF5IG9yIG51bGwgdmFsdWUuIChbJ3NwYW4nXSwgWydzdHJvbmcnLCAnZW0nXSAuLi5dKVxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbnxudWxsfSBzdHJpY3RSZW1vdmUgSWYgdHJ1ZSwgb25seSBub2RlcyB3aXRoIGFsbCBzdHlsZXMgYW5kIGNsYXNzZXMgcmVtb3ZlZCBmcm9tIHRoZSBub2RlcyBvZiBcInJlbW92ZU5vZGVBcnJheVwiIGFyZSByZW1vdmVkLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5vZGVDaGFuZ2U6IGZ1bmN0aW9uIChhcHBlbmROb2RlLCBzdHlsZUFycmF5LCByZW1vdmVOb2RlQXJyYXksIHN0cmljdFJlbW92ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNldFJhbmdlVG9UZXh0Tm9kZSgpO1xyXG4gICAgICAgICAgICBsZXQgcmFuZ2UgPSB0aGlzLmdldFJhbmdlX2FkZExpbmUodGhpcy5nZXRSYW5nZSgpLCBudWxsKTtcclxuICAgICAgICAgICAgc3R5bGVBcnJheSA9IHN0eWxlQXJyYXkgJiYgc3R5bGVBcnJheS5sZW5ndGggPiAwID8gc3R5bGVBcnJheSA6IGZhbHNlO1xyXG4gICAgICAgICAgICByZW1vdmVOb2RlQXJyYXkgPSByZW1vdmVOb2RlQXJyYXkgJiYgcmVtb3ZlTm9kZUFycmF5Lmxlbmd0aCA+IDAgPyByZW1vdmVOb2RlQXJyYXkgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGlzUmVtb3ZlTm9kZSA9ICFhcHBlbmROb2RlO1xyXG4gICAgICAgICAgICBjb25zdCBpc1JlbW92ZUZvcm1hdCA9IGlzUmVtb3ZlTm9kZSAmJiAhcmVtb3ZlTm9kZUFycmF5ICYmICFzdHlsZUFycmF5O1xyXG4gICAgICAgICAgICBsZXQgc3RhcnRDb24gPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0T2ZmID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGxldCBlbmRDb24gPSByYW5nZS5lbmRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGxldCBlbmRPZmYgPSByYW5nZS5lbmRPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoKGlzUmVtb3ZlRm9ybWF0ICYmIHJhbmdlLmNvbGxhcHNlZCAmJiB1dGlsLmlzRm9ybWF0RWxlbWVudChzdGFydENvbi5wYXJlbnROb2RlKSkgfHwgKHN0YXJ0Q29uID09PSBlbmRDb24gJiYgc3RhcnRDb24ubm9kZVR5cGUgPT09IDEgJiYgdXRpbC5pc05vbkVkaXRhYmxlKHN0YXJ0Q29uKSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IHN0YXJ0Q29uLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNMaXN0Q2VsbChmb3JtYXQpIHx8ICF1dGlsLmdldFZhbHVlcyhmb3JtYXQuc3R5bGUpLnNvbWUoZnVuY3Rpb24oaykgeyByZXR1cm4gdGhpcy5fbGlzdEtlYmFiLmluZGV4T2YoaykgPiAtMTsgfS5iaW5kKHRoaXMpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmFuZ2UuY29sbGFwc2VkICYmICFpc1JlbW92ZUZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29uLm5vZGVUeXBlID09PSAxICYmICF1dGlsLmlzQnJlYWsoc3RhcnRDb24pICYmICF1dGlsLmlzQ29tcG9uZW50KHN0YXJ0Q29uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhZnRlck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvY3VzTm9kZSA9IHN0YXJ0Q29uLmNoaWxkTm9kZXNbc3RhcnRPZmZdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9jdXNOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9jdXNOb2RlLm5leHRTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gdXRpbC5pc0JyZWFrKGZvY3VzTm9kZSkgPyBmb2N1c05vZGUgOiBmb2N1c05vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHplcm9XaWR0aCA9IHV0aWwuY3JlYXRlVGV4dE5vZGUodXRpbC56ZXJvV2lkdGhTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRDb24uaW5zZXJ0QmVmb3JlKHplcm9XaWR0aCwgYWZ0ZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKHplcm9XaWR0aCwgMSwgemVyb1dpZHRoLCAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRDb24gPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mZiA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZENvbiA9IHJhbmdlLmVuZENvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICBlbmRPZmYgPSByYW5nZS5lbmRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChzdGFydENvbikpIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0Q29uID0gc3RhcnRDb24uY2hpbGROb2Rlc1tzdGFydE9mZl0gfHwgc3RhcnRDb24uZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIHN0YXJ0T2ZmID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQoZW5kQ29uKSkge1xyXG4gICAgICAgICAgICAgICAgZW5kQ29uID0gZW5kQ29uLmNoaWxkTm9kZXNbZW5kT2ZmXSB8fCBlbmRDb24ubGFzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgZW5kT2ZmID0gZW5kQ29uLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGlzUmVtb3ZlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IHV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHdSZWdFeHAgPSBfdy5SZWdFeHA7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld05vZGVOYW1lID0gYXBwZW5kTm9kZS5ub2RlTmFtZTtcclxuXHJcbiAgICAgICAgICAgIC8qIGNoZWNrZWQgc2FtZSBzdHlsZSBwcm9wZXJ0eSAqL1xyXG4gICAgICAgICAgICBpZiAoIWlzUmVtb3ZlRm9ybWF0ICYmIHN0YXJ0Q29uID09PSBlbmRDb24gJiYgIXJlbW92ZU5vZGVBcnJheSAmJiBhcHBlbmROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc05vZGUgPSBzdGFydENvbjtcclxuICAgICAgICAgICAgICAgIGxldCBjaGVja0NudCA9IDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVja0F0dHJzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hlY2tTdHlsZXMgPSBhcHBlbmROb2RlLnN0eWxlO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoZWNrU3R5bGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tBdHRycy5wdXNoKGNoZWNrU3R5bGVzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBja2Vja0NsYXNzZXMgPSBhcHBlbmROb2RlLmNsYXNzTGlzdDtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBja2Vja0NsYXNzZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja0F0dHJzLnB1c2goJy4nICsgY2tlY2tDbGFzc2VzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tBdHRycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUoIXV0aWwuaXNGb3JtYXRFbGVtZW50KHNOb2RlKSAmJiAhdXRpbC5pc1d5c2l3eWdEaXYoc05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hlY2tBdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNOb2RlLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IGNoZWNrQXR0cnNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xhc3NSZWcgPSAvXlxcLi8udGVzdChzKSA/IG5ldyB3UmVnRXhwKCdcXFxccyonICsgcy5yZXBsYWNlKC9eXFwuLywgJycpICsgJyhcXFxccyt8JCknLCAnaWcnKSA6IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHlsZUNoZWNrID0gaXNSZW1vdmVOb2RlID8gISFzTm9kZS5zdHlsZVtzXSA6ICghIXNOb2RlLnN0eWxlW3NdICYmICEhYXBwZW5kTm9kZS5zdHlsZVtzXSAmJiBzTm9kZS5zdHlsZVtzXSA9PT0gYXBwZW5kTm9kZS5zdHlsZVtzXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xhc3NDaGVjayA9IGNsYXNzUmVnID09PSBmYWxzZSA/IGZhbHNlIDogaXNSZW1vdmVOb2RlID8gISFzTm9kZS5jbGFzc05hbWUubWF0Y2goY2xhc3NSZWcpIDogISFzTm9kZS5jbGFzc05hbWUubWF0Y2goY2xhc3NSZWcpICYmICEhYXBwZW5kTm9kZS5jbGFzc05hbWUubWF0Y2goY2xhc3NSZWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZUNoZWNrIHx8IGNsYXNzQ2hlY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tDbnQrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc05vZGUgPSBzTm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrQ250ID49IGNoZWNrQXR0cnMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBzdGFydCA9IHt9LCBlbmQgPSB7fTtcclxuICAgICAgICAgICAgbGV0IG5ld05vZGUsIHN0eWxlUmVnRXhwID0gJycsIGNsYXNzUmVnRXhwID0gJycsIHJlbW92ZU5vZGVSZWdFeHAgPSAnJztcclxuXHJcbiAgICAgICAgICAgIGlmIChzdHlsZUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc3R5bGVBcnJheS5sZW5ndGgsIHM7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHMgPSBzdHlsZUFycmF5W2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXlxcLi8udGVzdChzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc1JlZ0V4cCArPSAoY2xhc3NSZWdFeHAgPyAnfCcgOiAnXFxcXHMqKD86JykgKyBzLnJlcGxhY2UoL15cXC4vLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVSZWdFeHAgKz0gKHN0eWxlUmVnRXhwID8gJ3wnIDogJyg/Ojt8XnxcXFxccykoPzonKSArIHM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzdHlsZVJlZ0V4cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlUmVnRXhwICs9ICcpXFxcXHMqOlteO10qXFxcXHMqKD86O3wkKSc7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVSZWdFeHAgPSBuZXcgd1JlZ0V4cChzdHlsZVJlZ0V4cCwgJ2lnJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNsYXNzUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NSZWdFeHAgKz0gJykoPz1cXFxccyt8JCknO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzUmVnRXhwID0gbmV3IHdSZWdFeHAoY2xhc3NSZWdFeHAsICdpZycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmVtb3ZlTm9kZUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICByZW1vdmVOb2RlUmVnRXhwID0gJ14oPzonICsgcmVtb3ZlTm9kZUFycmF5WzBdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCByZW1vdmVOb2RlQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2RlUmVnRXhwICs9ICd8JyArIHJlbW92ZU5vZGVBcnJheVtpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVSZWdFeHAgKz0gJykkJztcclxuICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVSZWdFeHAgPSBuZXcgd1JlZ0V4cChyZW1vdmVOb2RlUmVnRXhwLCAnaScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiogdmFsaWRhdGlvbiBjaGVjayBmdW5jdGlvbiovXHJcbiAgICAgICAgICAgIGNvbnN0IHdCb29sZWFuID0gX3cuQm9vbGVhbjtcclxuICAgICAgICAgICAgY29uc3QgX3JlbW92ZUNoZWNrID0ge3Y6IGZhbHNlfTtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IGZ1bmN0aW9uIChjaGVja05vZGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZOb2RlID0gY2hlY2tOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gYWxsIHBhdGhcclxuICAgICAgICAgICAgICAgIGlmICh2Tm9kZS5ub2RlVHlwZSA9PT0gMyB8fCB1dGlsLmlzQnJlYWsodk5vZGUpKSByZXR1cm4gdk5vZGU7XHJcbiAgICAgICAgICAgICAgICAvLyBhbGwgcmVtb3ZlXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNSZW1vdmVGb3JtYXQpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBub2RlIGNoZWNrXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0YWdSZW1vdmUgPSAoIXJlbW92ZU5vZGVSZWdFeHAgJiYgaXNSZW1vdmVOb2RlKSB8fCAocmVtb3ZlTm9kZVJlZ0V4cCAmJiByZW1vdmVOb2RlUmVnRXhwLnRlc3Qodk5vZGUubm9kZU5hbWUpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB0YWcgcmVtb3ZlXHJcbiAgICAgICAgICAgICAgICBpZiAodGFnUmVtb3ZlICYmICFzdHJpY3RSZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBfcmVtb3ZlQ2hlY2sudiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gc3R5bGUgcmVnZXhwXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5TdHlsZSA9IHZOb2RlLnN0eWxlLmNzc1RleHQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3R5bGUgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmIChzdHlsZVJlZ0V4cCAmJiBvcmlnaW5TdHlsZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBvcmlnaW5TdHlsZS5yZXBsYWNlKHN0eWxlUmVnRXhwLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAhPT0gb3JpZ2luU3R5bGUpIF9yZW1vdmVDaGVjay52ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBjbGFzcyBjaGVja1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luQ2xhc3NlcyA9IHZOb2RlLmNsYXNzTmFtZTtcclxuICAgICAgICAgICAgICAgIGxldCBjbGFzc2VzID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2xhc3NSZWdFeHAgJiYgb3JpZ2luQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NlcyA9IG9yaWdpbkNsYXNzZXMucmVwbGFjZShjbGFzc1JlZ0V4cCwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xhc3NlcyAhPT0gb3JpZ2luQ2xhc3NlcykgX3JlbW92ZUNoZWNrLnYgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBvbmx5XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNSZW1vdmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChjbGFzc1JlZ0V4cCB8fCAhb3JpZ2luQ2xhc3NlcykgJiYgKHN0eWxlUmVnRXhwIHx8ICFvcmlnaW5TdHlsZSkgJiYgIXN0eWxlICYmICFjbGFzc2VzICYmIHRhZ1JlbW92ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfcmVtb3ZlQ2hlY2sudiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBjaGFuZ2VcclxuICAgICAgICAgICAgICAgIGlmIChzdHlsZSB8fCBjbGFzc2VzIHx8IHZOb2RlLm5vZGVOYW1lICE9PSBuZXdOb2RlTmFtZSB8fCAod0Jvb2xlYW4oc3R5bGVSZWdFeHApICE9PSB3Qm9vbGVhbihvcmlnaW5TdHlsZSkpIHx8ICh3Qm9vbGVhbihjbGFzc1JlZ0V4cCkgIT09IHdCb29sZWFuKG9yaWdpbkNsYXNzZXMpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZVJlZ0V4cCAmJiBvcmlnaW5TdHlsZS5sZW5ndGggPiAwKSB2Tm9kZS5zdHlsZS5jc3NUZXh0ID0gc3R5bGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2Tm9kZS5zdHlsZS5jc3NUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZOb2RlLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc1JlZ0V4cCAmJiBvcmlnaW5DbGFzc2VzLmxlbmd0aCA+IDApIHZOb2RlLmNsYXNzTmFtZSA9IGNsYXNzZXMudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdk5vZGUuY2xhc3NOYW1lLnRyaW0oKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2Tm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZOb2RlLnN0eWxlLmNzc1RleHQgJiYgIXZOb2RlLmNsYXNzTmFtZSAmJiAodk5vZGUubm9kZU5hbWUgPT09IG5ld05vZGVOYW1lIHx8IHRhZ1JlbW92ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3JlbW92ZUNoZWNrLnYgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2Tm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBfcmVtb3ZlQ2hlY2sudiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIC8vIGdldCBsaW5lIG5vZGVzXHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmVOb2RlcyA9IHRoaXMuZ2V0U2VsZWN0ZWRFbGVtZW50cyhudWxsKTtcclxuICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgIHN0YXJ0Q29uID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgIHN0YXJ0T2ZmID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGVuZENvbiA9IHJhbmdlLmVuZENvbnRhaW5lcjtcclxuICAgICAgICAgICAgZW5kT2ZmID0gcmFuZ2UuZW5kT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgaWYgKCF1dGlsLmdldEZvcm1hdEVsZW1lbnQoc3RhcnRDb24sIG51bGwpKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydENvbiA9IHV0aWwuZ2V0Q2hpbGRFbGVtZW50KGxpbmVOb2Rlc1swXSwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQubm9kZVR5cGUgPT09IDM7IH0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0T2ZmID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCF1dGlsLmdldEZvcm1hdEVsZW1lbnQoZW5kQ29uLCBudWxsKSkge1xyXG4gICAgICAgICAgICAgICAgZW5kQ29uID0gdXRpbC5nZXRDaGlsZEVsZW1lbnQobGluZU5vZGVzW2xpbmVOb2Rlcy5sZW5ndGggLSAxXSwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQubm9kZVR5cGUgPT09IDM7IH0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGVuZE9mZiA9IGVuZENvbi50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvbmVMaW5lID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHN0YXJ0Q29uLCBudWxsKSA9PT0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KGVuZENvbiwgbnVsbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZExlbmd0aCA9IGxpbmVOb2Rlcy5sZW5ndGggLSAob25lTGluZSA/IDAgOiAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vIG5vZGUgQ2hhbmdlc1xyXG4gICAgICAgICAgICBuZXdOb2RlID0gYXBwZW5kTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgaXNSZW1vdmVBbmNob3IgPSBpc1JlbW92ZUZvcm1hdCB8fCAoaXNSZW1vdmVOb2RlICYmIChmdW5jdGlvbiAoYXJyKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBuID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgbiA8IGxlbjsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuX2lzTWFpbnRhaW5lZE5vZGUoYXJyW25dKSB8fCB1dGlsLl9pc1NpemVOb2RlKGFycltuXSkpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9KShyZW1vdmVOb2RlQXJyYXkpKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGlzU2l6ZU5vZGUgPSBpc1JlbW92ZU5vZGUgfHwgdXRpbC5faXNTaXplTm9kZShuZXdOb2RlKTtcclxuICAgICAgICAgICAgY29uc3QgX2dldE1haW50YWluZWROb2RlID0gdGhpcy5fdXRpbF9nZXRNYWludGFpbmVkTm9kZS5iaW5kKHV0aWwsIGlzUmVtb3ZlQW5jaG9yLCBpc1NpemVOb2RlKTtcclxuICAgICAgICAgICAgY29uc3QgX2lzTWFpbnRhaW5lZE5vZGUgPSB0aGlzLl91dGlsX2lzTWFpbnRhaW5lZE5vZGUuYmluZCh1dGlsLCBpc1JlbW92ZUFuY2hvciwgaXNTaXplTm9kZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBvbmUgbGluZVxyXG4gICAgICAgICAgICBpZiAob25lTGluZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Jlc2V0Q29tbW9uTGlzdENlbGwobGluZU5vZGVzWzBdLCBzdHlsZUFycmF5KSkgcmFuZ2UgPSB0aGlzLnNldFJhbmdlKHN0YXJ0Q29uLCBzdGFydE9mZiwgZW5kQ29uLCBlbmRPZmYpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JhbmdlID0gdGhpcy5fbm9kZUNoYW5nZV9vbmVMaW5lKGxpbmVOb2Rlc1swXSwgbmV3Tm9kZSwgdmFsaWRhdGlvbiwgc3RhcnRDb24sIHN0YXJ0T2ZmLCBlbmRDb24sIGVuZE9mZiwgaXNSZW1vdmVGb3JtYXQsIGlzUmVtb3ZlTm9kZSwgcmFuZ2UuY29sbGFwc2VkLCBfcmVtb3ZlQ2hlY2ssIF9nZXRNYWludGFpbmVkTm9kZSwgX2lzTWFpbnRhaW5lZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnQuY29udGFpbmVyID0gbmV3UmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICBzdGFydC5vZmZzZXQgPSBuZXdSYW5nZS5zdGFydE9mZnNldDtcclxuICAgICAgICAgICAgICAgIGVuZC5jb250YWluZXIgPSBuZXdSYW5nZS5lbmRDb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICBlbmQub2Zmc2V0ID0gbmV3UmFuZ2UuZW5kT2Zmc2V0O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzdGFydC5jb250YWluZXIgPT09IGVuZC5jb250YWluZXIgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2Uoc3RhcnQuY29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0Lm9mZnNldCA9IGVuZC5vZmZzZXQgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Q29tbW9uTGlzdFN0eWxlKG5ld1JhbmdlLmFuY2VzdG9yLCBudWxsKTtcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gbXVsdGkgbGluZSBcclxuICAgICAgICAgICAgICAgIGxldCBhcHBsaWVkQ29tbW9uTGlzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVuZExlbmd0aCA+IDAgJiYgdGhpcy5fcmVzZXRDb21tb25MaXN0Q2VsbChsaW5lTm9kZXNbZW5kTGVuZ3RoXSwgc3R5bGVBcnJheSkpIGFwcGxpZWRDb21tb25MaXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZXNldENvbW1vbkxpc3RDZWxsKGxpbmVOb2Rlc1swXSwgc3R5bGVBcnJheSkpIGFwcGxpZWRDb21tb25MaXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChhcHBsaWVkQ29tbW9uTGlzdCkgdGhpcy5zZXRSYW5nZShzdGFydENvbiwgc3RhcnRPZmYsIGVuZENvbiwgZW5kT2ZmKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBlbmRcclxuICAgICAgICAgICAgICAgIGlmIChlbmRMZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IGFwcGVuZE5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbmQgPSB0aGlzLl9ub2RlQ2hhbmdlX2VuZExpbmUobGluZU5vZGVzW2VuZExlbmd0aF0sIG5ld05vZGUsIHZhbGlkYXRpb24sIGVuZENvbiwgZW5kT2ZmLCBpc1JlbW92ZUZvcm1hdCwgaXNSZW1vdmVOb2RlLCBfcmVtb3ZlQ2hlY2ssIF9nZXRNYWludGFpbmVkTm9kZSwgX2lzTWFpbnRhaW5lZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIG1pZFxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGVuZExlbmd0aCAtIDEsIG5ld1JhbmdlOyBpID4gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXRDb21tb25MaXN0Q2VsbChsaW5lTm9kZXNbaV0sIHN0eWxlQXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBhcHBlbmROb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3UmFuZ2UgPSB0aGlzLl9ub2RlQ2hhbmdlX21pZGRsZUxpbmUobGluZU5vZGVzW2ldLCBuZXdOb2RlLCB2YWxpZGF0aW9uLCBpc1JlbW92ZUZvcm1hdCwgaXNSZW1vdmVOb2RlLCBfcmVtb3ZlQ2hlY2ssIGVuZC5jb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdSYW5nZS5lbmRDb250YWluZXIgJiYgbmV3UmFuZ2UuYW5jZXN0b3IuY29udGFpbnMobmV3UmFuZ2UuZW5kQ29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQuYW5jZXN0b3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQuY29udGFpbmVyID0gbmV3UmFuZ2UuZW5kQ29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRDb21tb25MaXN0U3R5bGUobmV3UmFuZ2UuYW5jZXN0b3IsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0XHJcbiAgICAgICAgICAgICAgICBuZXdOb2RlID0gYXBwZW5kTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnQgPSB0aGlzLl9ub2RlQ2hhbmdlX3N0YXJ0TGluZShsaW5lTm9kZXNbMF0sIG5ld05vZGUsIHZhbGlkYXRpb24sIHN0YXJ0Q29uLCBzdGFydE9mZiwgaXNSZW1vdmVGb3JtYXQsIGlzUmVtb3ZlTm9kZSwgX3JlbW92ZUNoZWNrLCBfZ2V0TWFpbnRhaW5lZE5vZGUsIF9pc01haW50YWluZWROb2RlLCBlbmQuY29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQuZW5kQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kLmFuY2VzdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBlbmQuY29udGFpbmVyID0gc3RhcnQuZW5kQ29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChlbmRMZW5ndGggPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZW5kLmNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZC5hbmNlc3RvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kLmNvbnRhaW5lciA9IHN0YXJ0LmNvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICBlbmQub2Zmc2V0ID0gc3RhcnQuY29udGFpbmVyLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRDb21tb25MaXN0U3R5bGUoc3RhcnQuYW5jZXN0b3IsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Q29tbW9uTGlzdFN0eWxlKGVuZC5hbmNlc3RvciB8fCB1dGlsLmdldEZvcm1hdEVsZW1lbnQoZW5kLmNvbnRhaW5lciksIG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgcmFuZ2VcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFJhbmdlKHN0YXJ0LmNvbnRhaW5lciwgc3RhcnQub2Zmc2V0LCBlbmQuY29udGFpbmVyLCBlbmQub2Zmc2V0KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXNldCBjb21tb24gc3R5bGUgb2YgbGlzdCBjZWxsXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbCBMaXN0IGNlbGwgZWxlbWVudC4gPGxpPlxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8bnVsbH0gc3R5bGVBcnJheSBTdHlsZSBhcnJheVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3Jlc2V0Q29tbW9uTGlzdENlbGw6IGZ1bmN0aW9uIChlbCwgc3R5bGVBcnJheSkge1xyXG4gICAgICAgICAgICBpZiAoIXV0aWwuaXNMaXN0Q2VsbChlbCkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFzdHlsZUFycmF5KSBzdHlsZUFycmF5ID0gdGhpcy5fbGlzdEtlYmFiO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB1dGlsLmdldEFycmF5SXRlbSgoZWwpLmNoaWxkTm9kZXMsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiAhdXRpbC5pc0JyZWFrKGN1cnJlbnQpOyB9LCB0cnVlKTtcclxuICAgICAgICAgICAgY29uc3QgZWxTdHlsZXMgPSBlbC5zdHlsZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGVjID0gW10sIGVrID0gW10sIGVsS2V5cyA9IHV0aWwuZ2V0VmFsdWVzKGVsU3R5bGVzKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2xpc3RLZWJhYi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsS2V5cy5pbmRleE9mKHRoaXMuX2xpc3RLZWJhYltpXSkgPiAtMSAmJiBzdHlsZUFycmF5LmluZGV4T2YodGhpcy5fbGlzdEtlYmFiW2ldKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWMucHVzaCh0aGlzLl9saXN0Q2FtZWxbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGVrLnB1c2godGhpcy5fbGlzdEtlYmFiW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFlYy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIC8vIHJlc2V0IGNlbGwgc3R5bGUtLS1cclxuICAgICAgICAgICAgY29uc3QgcmVmZXIgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ1NQQU4nKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGVjLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICByZWZlci5zdHlsZVtlY1tpXV0gPSBlbFN0eWxlc1tla1tpXV07XHJcbiAgICAgICAgICAgICAgICBlbFN0eWxlcy5yZW1vdmVQcm9wZXJ0eShla1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBzZWwgPSByZWZlci5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICBsZXQgciA9IG51bGwsIGFwcGxpZWRFbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2hpbGRyZW4ubGVuZ3RoLCBjLCBzOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGMgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLl90ZXh0VGFnc01hcFtjLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBzID0gdXRpbC5nZXRWYWx1ZXMoYy5zdHlsZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocy5sZW5ndGggPT09IDAgfHwgKGVjLnNvbWUoZnVuY3Rpb24gKGspIHtyZXR1cm4gcy5pbmRleE9mKGspID09PSAtMTt9KSAmJiBzLnNvbWUoZnVuY3Rpb24oaykge2VjLmluZGV4T2YoaykgPiAtMTt9KSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByID0gYy5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICBzZWwuYXBwZW5kQ2hpbGQoYyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBlbC5pbnNlcnRCZWZvcmUoc2VsLCByKTtcclxuICAgICAgICAgICAgICAgICAgICBzZWwgPSByZWZlci5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcGxpZWRFbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWwuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBlbC5pbnNlcnRCZWZvcmUoc2VsLCByKTtcclxuICAgICAgICAgICAgICAgIGFwcGxpZWRFbCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFlbFN0eWxlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGFwcGxpZWRFbDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSWYgY2VydGFpbiBzdHlsZXMgYXJlIGFwcGxpZWQgdG8gYWxsIGNoaWxkIG5vZGVzIG9mIHRoZSBsaXN0IGNlbGwsIHRoZSBzdHlsZSBvZiB0aGUgbGlzdCBjZWxsIGlzIGFsc28gY2hhbmdlZC4gKGJvbGQsIGNvbG9yLCBzaXplKVxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWwgTGlzdCBjZWxsIGVsZW1lbnQuIDxsaT5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR8bnVsbH0gY2hpbGQgVmFyaWFibGUgZm9yIHJlY3Vyc2l2ZSBjYWxsLiAoXCJudWxsXCIgb24gdGhlIGZpcnN0IGNhbGwpXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc2V0Q29tbW9uTGlzdFN0eWxlOiBmdW5jdGlvbiAoZWwsIGNoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmICghdXRpbC5pc0xpc3RDZWxsKGVsKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB1dGlsLmdldEFycmF5SXRlbSgoY2hpbGQgfHwgZWwpLmNoaWxkTm9kZXMsIGZ1bmN0aW9uIChjdXJyZW50KSB7IHJldHVybiAhdXRpbC5pc0JyZWFrKGN1cnJlbnQpOyB9LCB0cnVlKTtcclxuICAgICAgICAgICAgY2hpbGQgPSBjaGlsZHJlblswXTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY2hpbGQgfHwgY2hpbGRyZW4ubGVuZ3RoID4gMSB8fCBjaGlsZC5ub2RlVHlwZSAhPT0gMSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgLy8gc2V0IGNlbGwgc3R5bGUtLS1cclxuICAgICAgICAgICAgY29uc3QgY2hpbGRTdHlsZSA9IGNoaWxkLnN0eWxlO1xyXG4gICAgICAgICAgICBjb25zdCBlbFN0eWxlID0gZWwuc3R5bGU7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGVOYW1lID0gY2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgbGV0IGFwcGxpZWRFbCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gYm9sZCwgaXRhbGljXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLl90ZXh0VGFnc01hcFtub2RlTmFtZV0gPT09IG9wdGlvbnMuX2RlZmF1bHRDb21tYW5kLmJvbGQudG9Mb3dlckNhc2UoKSkgZWxTdHlsZS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5fdGV4dFRhZ3NNYXBbbm9kZU5hbWVdID09PSBvcHRpb25zLl9kZWZhdWx0Q29tbWFuZC5pdGFsaWMudG9Mb3dlckNhc2UoKSkgZWxTdHlsZS5mb250U3R5bGUgPSAnaXRhbGljJztcclxuXHJcbiAgICAgICAgICAgIC8vIHN0eWxlc1xyXG4gICAgICAgICAgICBjb25zdCBjS2V5cyA9IHV0aWwuZ2V0VmFsdWVzKGNoaWxkU3R5bGUpO1xyXG4gICAgICAgICAgICBpZiAoY0tleXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2xpc3RDYW1lbC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjS2V5cy5pbmRleE9mKHRoaXMuX2xpc3RLZWJhYltpXSkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbFN0eWxlW3RoaXMuX2xpc3RDYW1lbFtpXV0gPSBjaGlsZFN0eWxlW3RoaXMuX2xpc3RDYW1lbFtpXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkU3R5bGUucmVtb3ZlUHJvcGVydHkodGhpcy5fbGlzdEtlYmFiW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGllZEVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NldENvbW1vbkxpc3RTdHlsZShlbCwgY2hpbGQpO1xyXG4gICAgICAgICAgICBpZiAoIWFwcGxpZWRFbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgLy8gY29tbW9uIHN0eWxlXHJcbiAgICAgICAgICAgIGlmICghY2hpbGRTdHlsZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoID0gY2hpbGQuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBjaGlsZC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbiA9IGNoaWxkLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNoLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBwLmluc2VydEJlZm9yZShjaFswXSwgbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFN0cmlwIHJlbW92ZSBub2RlXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSByZW1vdmVOb2RlIFRoZSByZW1vdmUgbm9kZVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3N0cmlwUmVtb3ZlTm9kZTogZnVuY3Rpb24gKHJlbW92ZU5vZGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHJlbW92ZU5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgaWYgKCFyZW1vdmVOb2RlIHx8IHJlbW92ZU5vZGUubm9kZVR5cGUgPT09IDMgfHwgIWVsZW1lbnQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcmVtb3ZlTm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNoaWxkcmVuWzBdLCByZW1vdmVOb2RlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZChyZW1vdmVOb2RlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmV0dXJuIHRoZSBwYXJlbnQgbWFpbnRhaW5lZCB0YWcuIChiaW5kIGFuZCB1c2UgYSB1dGlsIG9iamVjdClcclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgRWxlbWVudFxyXG4gICAgICAgICAqIEByZXR1cm5zIHtFbGVtZW50fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3V0aWxfZ2V0TWFpbnRhaW5lZE5vZGU6IGZ1bmN0aW9uIChfaXNSZW1vdmUsIF9pc1NpemVOb2RlLCBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbWVudCB8fCBfaXNSZW1vdmUpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsIHRoaXMuX2lzTWFpbnRhaW5lZE5vZGUuYmluZCh0aGlzKSkgfHwgKCFfaXNTaXplTm9kZSA/IHRoaXMuZ2V0UGFyZW50RWxlbWVudChlbGVtZW50LCB0aGlzLl9pc1NpemVOb2RlLmJpbmQodGhpcykpIDogbnVsbCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENoZWNrIGlmIGVsZW1lbnQgaXMgYSB0YWcgdGhhdCBzaG91bGQgYmUgcGVyc2lzdGVkLiAoYmluZCBhbmQgdXNlIGEgdXRpbCBvYmplY3QpXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnRcclxuICAgICAgICAgKiBAcmV0dXJucyB7RWxlbWVudH1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF91dGlsX2lzTWFpbnRhaW5lZE5vZGU6IGZ1bmN0aW9uIChfaXNSZW1vdmUsIF9pc1NpemVOb2RlLCBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbWVudCB8fCBfaXNSZW1vdmUgfHwgZWxlbWVudC5ub2RlVHlwZSAhPT0gMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSB0aGlzLl9pc01haW50YWluZWROb2RlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsIHRoaXMuX2lzTWFpbnRhaW5lZE5vZGUuYmluZCh0aGlzKSkgPyBhbmNob3IgOiAoYW5jaG9yIHx8ICghX2lzU2l6ZU5vZGUgPyB0aGlzLl9pc1NpemVOb2RlKGVsZW1lbnQpIDogZmFsc2UpKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gd3JhcHMgdGV4dCBub2RlcyBvZiBsaW5lIHNlbGVjdGVkIHRleHQuXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBub2RlIG9mIHRoZSBsaW5lIHRoYXQgY29udGFpbnMgdGhlIHNlbGVjdGVkIHRleHQgbm9kZS5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5ld0lubmVyTm9kZSBUaGUgZG9tIHRoYXQgd2lsbCB3cmFwIHRoZSBzZWxlY3RlZCB0ZXh0IGFyZWFcclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB2YWxpZGF0aW9uIENoZWNrIGlmIHRoZSBub2RlIHNob3VsZCBiZSBzdHJpcHBlZC5cclxuICAgICAgICAgKiBAcGFyYW0ge05vZGV9IHN0YXJ0Q29uIFRoZSBzdGFydENvbnRhaW5lciBwcm9wZXJ0eSBvZiB0aGUgc2VsZWN0aW9uIG9iamVjdC5cclxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gc3RhcnRPZmYgVGhlIHN0YXJ0T2Zmc2V0IHByb3BlcnR5IG9mIHRoZSBzZWxlY3Rpb24gb2JqZWN0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gZW5kQ29uIFRoZSBlbmRDb250YWluZXIgcHJvcGVydHkgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuXHJcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IGVuZE9mZiBUaGUgZW5kT2Zmc2V0IHByb3BlcnR5IG9mIHRoZSBzZWxlY3Rpb24gb2JqZWN0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNSZW1vdmVGb3JtYXQgSXMgdGhlIHJlbW92ZSBhbGwgZm9ybWF0cyBjb21tYW5kP1xyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNSZW1vdmVOb2RlIFwibmV3SW5uZXJOb2RlXCIgaXMgcmVtb3ZlIG5vZGU/XHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBjb2xsYXBzZWQgcmFuZ2UuY29sbGFwc2VkXHJcbiAgICAgICAgICogQHJldHVybnMge3thbmNlc3RvcjogKiwgc3RhcnRDb250YWluZXI6ICosIHN0YXJ0T2Zmc2V0OiAqLCBlbmRDb250YWluZXI6ICosIGVuZE9mZnNldDogKn19XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbm9kZUNoYW5nZV9vbmVMaW5lOiBmdW5jdGlvbiAoZWxlbWVudCwgbmV3SW5uZXJOb2RlLCB2YWxpZGF0aW9uLCBzdGFydENvbiwgc3RhcnRPZmYsIGVuZENvbiwgZW5kT2ZmLCBpc1JlbW92ZUZvcm1hdCwgaXNSZW1vdmVOb2RlLCBjb2xsYXBzZWQsIF9yZW1vdmVDaGVjaywgX2dldE1haW50YWluZWROb2RlLCBfaXNNYWludGFpbmVkTm9kZSkge1xyXG4gICAgICAgICAgICAvLyBub3QgYWRkIHRhZ1xyXG4gICAgICAgICAgICBsZXQgcGFyZW50Q29uID0gc3RhcnRDb24ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgd2hpbGUgKCFwYXJlbnRDb24ubmV4dFNpYmxpbmcgJiYgIXBhcmVudENvbi5wcmV2aW91c1NpYmxpbmcgJiYgIXV0aWwuaXNGb3JtYXRFbGVtZW50KHBhcmVudENvbi5wYXJlbnROb2RlKSAmJiAhdXRpbC5pc1d5c2l3eWdEaXYocGFyZW50Q29uLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Q29uLm5vZGVOYW1lID09PSBuZXdJbm5lck5vZGUubm9kZU5hbWUpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uID0gcGFyZW50Q29uLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaXNSZW1vdmVOb2RlICYmIHBhcmVudENvbiA9PT0gZW5kQ29uLnBhcmVudE5vZGUgJiYgcGFyZW50Q29uLm5vZGVOYW1lID09PSBuZXdJbm5lck5vZGUubm9kZU5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShzdGFydENvbi50ZXh0Q29udGVudC5zbGljZSgwLCBzdGFydE9mZikpICYmIHV0aWwub25seVplcm9XaWR0aFNwYWNlKGVuZENvbi50ZXh0Q29udGVudC5zbGljZShlbmRPZmYpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50Q29uLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNhbWVUYWcgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2hpbGRyZW4ubGVuZ3RoLCBjLCBzLCBlLCB6OyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB6ID0gIXV0aWwub25seVplcm9XaWR0aFNwYWNlKGMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gc3RhcnRDb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IGVuZENvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCFzICYmIHopIHx8IChzICYmIGUgJiYgeikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWVUYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2FtZVRhZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNvcHlUYWdBdHRyaWJ1dGVzKHBhcmVudENvbiwgbmV3SW5uZXJOb2RlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvcjogZWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyOiBzdGFydENvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBzdGFydE9mZixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZENvbnRhaW5lcjogZW5kQ29uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0OiBlbmRPZmZcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGFkZCB0YWdcclxuICAgICAgICAgICAgX3JlbW92ZUNoZWNrLnYgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3QgZWwgPSBlbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCBuTm9kZUFycmF5ID0gW25ld0lubmVyTm9kZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHBOb2RlID0gZWxlbWVudC5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCBpc1NhbWVOb2RlID0gc3RhcnRDb24gPT09IGVuZENvbjtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0Q29udGFpbmVyID0gc3RhcnRDb247XHJcbiAgICAgICAgICAgIGxldCBzdGFydE9mZnNldCA9IHN0YXJ0T2ZmO1xyXG4gICAgICAgICAgICBsZXQgZW5kQ29udGFpbmVyID0gZW5kQ29uO1xyXG4gICAgICAgICAgICBsZXQgZW5kT2Zmc2V0ID0gZW5kT2ZmO1xyXG4gICAgICAgICAgICBsZXQgc3RhcnRQYXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBlbmRQYXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBwQ3VycmVudCwgbmV3Tm9kZSwgYXBwZW5kTm9kZSwgY3NzVGV4dCwgYW5jaG9yTm9kZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHdSZWdFeHAgPSBfdy5SZWdFeHA7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrQ3NzICh2Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVnRXhwID0gbmV3IHdSZWdFeHAoJyg/Ojt8XnxcXFxccykoPzonICsgY3NzVGV4dCArICdudWxsKVxcXFxzKjpbXjtdKlxcXFxzKig/Ojt8JCknLCAnaWcnKTtcclxuICAgICAgICAgICAgICAgIGxldCBzdHlsZSA9ICcnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZWdFeHAgJiYgdk5vZGUuc3R5bGUuY3NzVGV4dC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSByZWdFeHAudGVzdCh2Tm9kZS5zdHlsZS5jc3NUZXh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIXN0eWxlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAoZnVuY3Rpb24gcmVjdXJzaW9uRnVuYyhjdXJyZW50LCBhbmNlc3Rvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IGN1cnJlbnQuY2hpbGROb2RlcztcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2hpbGROb2Rlcy5sZW5ndGgsIHZOb2RlOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGQgPSBjaGlsZE5vZGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb3Zlck5vZGUgPSBhbmNlc3RvcjtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2xvbmVOb2RlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBzdGFydENvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc3RhcnRQYXNzICYmIGNoaWxkID09PSBzdGFydENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluZSA9IHBOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gX2dldE1haW50YWluZWROb2RlKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldk5vZGUgPSB1dGlsLmNyZWF0ZVRleHROb2RlKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSAxID8gJycgOiBzdGFydENvbnRhaW5lci5zdWJzdHJpbmdEYXRhKDAsIHN0YXJ0T2Zmc2V0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZShzdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gMSA/ICcnIDogc3RhcnRDb250YWluZXIuc3Vic3RyaW5nRGF0YShzdGFydE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2FtZU5vZGUgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmRPZmZzZXQgPj0gc3RhcnRPZmZzZXQgPyBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCA6IHN0YXJ0Q29udGFpbmVyLmRhdGEubGVuZ3RoIC0gc3RhcnRPZmZzZXQpIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydENvbnRhaW5lci5kYXRhLmxlbmd0aCAtIHN0YXJ0T2Zmc2V0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2hvck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBfZ2V0TWFpbnRhaW5lZE5vZGUoYW5jZXN0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgJiYgYS5wYXJlbnROb2RlICE9PSBsaW5lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG0gPSBhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobS5wYXJlbnROb2RlICE9PSBsaW5lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gcCA9IG0ucGFyZW50Tm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShtLmNoaWxkTm9kZXNbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuYXBwZW5kQ2hpbGQobS5jaGlsZE5vZGVzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLmFwcGVuZENoaWxkKHApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gbS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gYW5jaG9yTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwub25seVplcm9XaWR0aFNwYWNlKHByZXZOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IuYXBwZW5kQ2hpbGQocHJldk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2QW5jaG9yTm9kZSA9IF9nZXRNYWludGFpbmVkTm9kZShhbmNlc3Rvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXByZXZBbmNob3JOb2RlKSBhbmNob3JOb2RlID0gcHJldkFuY2hvck5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmNob3JOb2RlKSBsaW5lID0gYW5jaG9yTm9kZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3NzVGV4dCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV3Tm9kZSAhPT0gbGluZSAmJiBuZXdOb2RlICE9PSBlbCAmJiBuZXdOb2RlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Tm9kZSA9IF9pc01haW50YWluZWROb2RlKG5ld05vZGUpID8gbnVsbCA6IHZhbGlkYXRpb24obmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodk5vZGUgJiYgbmV3Tm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBjaGVja0NzcyhuZXdOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50LnB1c2godk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzc1RleHQgKz0gbmV3Tm9kZS5zdHlsZS5jc3NUZXh0LnN1YnN0cigwLCBuZXdOb2RlLnN0eWxlLmNzc1RleHQuaW5kZXhPZignOicpKSArICd8JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBuZXdOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHBDdXJyZW50LnBvcCgpIHx8IHRleHROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZSA9IGNoaWxkTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBDdXJyZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBwQ3VycmVudC5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUuYXBwZW5kQ2hpbGQobmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlLmFwcGVuZENoaWxkKGNoaWxkTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmNob3JOb2RlICYmICFfZ2V0TWFpbnRhaW5lZE5vZGUoZW5kQ29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gdGV4dE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQYXNzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlICE9PSB0ZXh0Tm9kZSkgbmV3Tm9kZS5hcHBlbmRDaGlsZChzdGFydENvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTYW1lTm9kZSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBlbmRDb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWVuZFBhc3MgJiYgY2hpbGQgPT09IGVuZENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gX2dldE1haW50YWluZWROb2RlKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJOb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZShlbmRDb250YWluZXIubm9kZVR5cGUgPT09IDEgPyAnJyA6IGVuZENvbnRhaW5lci5zdWJzdHJpbmdEYXRhKGVuZE9mZnNldCwgKGVuZENvbnRhaW5lci5sZW5ndGggLSBlbmRPZmZzZXQpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gdXRpbC5jcmVhdGVUZXh0Tm9kZShpc1NhbWVOb2RlIHx8IGVuZENvbnRhaW5lci5ub2RlVHlwZSA9PT0gMSA/ICcnIDogZW5kQ29udGFpbmVyLnN1YnN0cmluZ0RhdGEoMCwgZW5kT2Zmc2V0KSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IGFuY2hvck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfaXNNYWludGFpbmVkTm9kZShuZXdJbm5lck5vZGUucGFyZW50Tm9kZSkgJiYgIWFuY2hvck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwub25seVplcm9XaWR0aFNwYWNlKGFmdGVyTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzc1RleHQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmNob3JzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV3Tm9kZSAhPT0gcE5vZGUgJiYgbmV3Tm9kZSAhPT0gZWwgJiYgbmV3Tm9kZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlLm5vZGVUeXBlID09PSAxICYmIGNoZWNrQ3NzKG5ld05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNNYWludGFpbmVkTm9kZShuZXdOb2RlKSkgYW5jaG9ycy5wdXNoKG5ld05vZGUuY2xvbmVOb2RlKGZhbHNlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgcEN1cnJlbnQucHVzaChuZXdOb2RlLmNsb25lTm9kZShmYWxzZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NUZXh0ICs9IG5ld05vZGUuc3R5bGUuY3NzVGV4dC5zdWJzdHIoMCwgbmV3Tm9kZS5zdHlsZS5jc3NUZXh0LmluZGV4T2YoJzonKSkgKyAnfCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBuZXdOb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudCA9IHBDdXJyZW50LmNvbmNhdChhbmNob3JzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZU5vZGUgPSBhcHBlbmROb2RlID0gbmV3Tm9kZSA9IHBDdXJyZW50LnBvcCgpIHx8IGFmdGVyTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwQ3VycmVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IHBDdXJyZW50LnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUuYXBwZW5kQ2hpbGQobmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQoY2xvbmVOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUudGV4dENvbnRlbnQgPSBhZnRlck5vZGUuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2hvck5vZGUgJiYgY2xvbmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZnRlckFuY2hvck5vZGUgPSBfZ2V0TWFpbnRhaW5lZE5vZGUoY2xvbmVOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZnRlckFuY2hvck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gYWZ0ZXJBbmNob3JOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzc1RleHQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5ld05vZGUgIT09IHBOb2RlICYmIG5ld05vZGUgIT09IGVsICYmIG5ld05vZGUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZOb2RlID0gX2lzTWFpbnRhaW5lZE5vZGUobmV3Tm9kZSkgPyBudWxsIDogdmFsaWRhdGlvbihuZXdOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2Tm9kZSAmJiBuZXdOb2RlLm5vZGVUeXBlID09PSAxICYmIGNoZWNrQ3NzKG5ld05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQucHVzaCh2Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzVGV4dCArPSBuZXdOb2RlLnN0eWxlLmNzc1RleHQuc3Vic3RyKDAsIG5ld05vZGUuc3R5bGUuY3NzVGV4dC5pbmRleE9mKCc6JykpICsgJ3wnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG5ld05vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gcEN1cnJlbnQucG9wKCkgfHwgdGV4dE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUgPSBuZXdOb2RlID0gY2hpbGROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocEN1cnJlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IHBDdXJyZW50LnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZS5hcHBlbmRDaGlsZChuZXdOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUuYXBwZW5kQ2hpbGQoY2hpbGROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUuaW5zZXJ0QmVmb3JlKG5ld0lubmVyTm9kZSwgYW5jaG9yTm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKGFuY2hvck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZS5hcHBlbmRDaGlsZChjaGlsZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRDb250YWluZXIgPSB0ZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0ID0gdGV4dE5vZGUuZGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBhc3MgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JlbW92ZUZvcm1hdCAmJiBjb2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IHRleHROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE5vZGUudGV4dENvbnRlbnQgPSB1dGlsLnplcm9XaWR0aFNwYWNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3Tm9kZSAhPT0gdGV4dE5vZGUpIG5ld05vZGUuYXBwZW5kQ2hpbGQoZW5kQ29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBvdGhlclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFBhc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxICYmICF1dGlsLmlzQnJlYWsoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5faXNJZ25vcmVOb2RlQ2hhbmdlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKGNoaWxkLmNsb25lTm9kZSh0cnVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRnVuYyhjaGlsZCwgY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3NzVGV4dCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmNob3JzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXdOb2RlLnBhcmVudE5vZGUgIT09IG51bGwgJiYgbmV3Tm9kZSAhPT0gZWwgJiYgbmV3Tm9kZSAhPT0gbmV3SW5uZXJOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Tm9kZSA9IGVuZFBhc3MgPyBuZXdOb2RlLmNsb25lTm9kZShmYWxzZSkgOiB2YWxpZGF0aW9uKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld05vZGUubm9kZVR5cGUgPT09IDEgJiYgIXV0aWwuaXNCcmVhayhjaGlsZCkgJiYgdk5vZGUgJiYgY2hlY2tDc3MobmV3Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2lzTWFpbnRhaW5lZE5vZGUobmV3Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbmNob3JOb2RlKSBhbmNob3JzLnB1c2godk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50LnB1c2godk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NUZXh0ICs9IG5ld05vZGUuc3R5bGUuY3NzVGV4dC5zdWJzdHIoMCwgbmV3Tm9kZS5zdHlsZS5jc3NUZXh0LmluZGV4T2YoJzonKSkgKyAnfCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gbmV3Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50ID0gcEN1cnJlbnQuY29uY2F0KGFuY2hvcnMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gcEN1cnJlbnQucG9wKCkgfHwgY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUgPSBuZXdOb2RlID0gY2hpbGROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocEN1cnJlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IHBDdXJyZW50LnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZS5hcHBlbmRDaGlsZChuZXdOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2lzTWFpbnRhaW5lZE5vZGUobmV3SW5uZXJOb2RlLnBhcmVudE5vZGUpICYmICFfaXNNYWludGFpbmVkTm9kZShjaGlsZE5vZGUpICYmICF1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShuZXdJbm5lck5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSBuZXdJbm5lck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTm9kZUFycmF5LnB1c2gobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmRQYXNzICYmICFhbmNob3JOb2RlICYmIF9pc01haW50YWluZWROb2RlKGNoaWxkTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYUNoaWxkcmVuID0gY2hpbGROb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhID0gMCwgYUxlbiA9IGFDaGlsZHJlbi5sZW5ndGg7IGEgPCBhTGVuOyBhKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUuYXBwZW5kQ2hpbGQoYUNoaWxkcmVuW2FdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQoY2hpbGROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0lubmVyTm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSBhbmNlc3RvciA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGFuY2VzdG9yID0gbmV3SW5uZXJOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkTm9kZSA9PT0gY2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW5kUGFzcykgYW5jZXN0b3IgPSBuZXdJbm5lck5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGFuY2VzdG9yID0gcE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kUGFzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQoY2hpbGROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZS5hcHBlbmRDaGlsZChjaGlsZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yTm9kZSAmJiBjaGlsZC5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9nZXRNYWludGFpbmVkTm9kZShjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmNlc3RvckFuY2hvck5vZGUgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoYW5jZXN0b3IsIGZ1bmN0aW9uIChjdXJyZW50KSB7cmV0dXJuIHRoaXMuX2lzTWFpbnRhaW5lZE5vZGUoY3VycmVudC5wYXJlbnROb2RlKSB8fCBjdXJyZW50LnBhcmVudE5vZGUgPT09IHBOb2RlO30uYmluZCh1dGlsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZS5hcHBlbmRDaGlsZChhbmNlc3RvckFuY2hvck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IGFuY2VzdG9yQW5jaG9yTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjbG9uZU5vZGUgPSBjaGlsZC5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmFwcGVuZENoaWxkKGNsb25lTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxICYmICF1dGlsLmlzQnJlYWsoY2hpbGQpKSBjb3Zlck5vZGUgPSBjbG9uZU5vZGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkZ1bmMoY2hpbGQsIGNvdmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKGVsZW1lbnQsIHBOb2RlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIG5vdCByZW1vdmUgdGFnXHJcbiAgICAgICAgICAgIGlmIChpc1JlbW92ZU5vZGUgJiYgIWlzUmVtb3ZlRm9ybWF0ICYmICFfcmVtb3ZlQ2hlY2sudikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBhbmNlc3RvcjogZWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICBzdGFydENvbnRhaW5lcjogc3RhcnRDb24sXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0T2ZmLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuZENvbnRhaW5lcjogZW5kQ29uLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuZE9mZnNldDogZW5kT2ZmXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpc1JlbW92ZUZvcm1hdCA9IGlzUmVtb3ZlRm9ybWF0ICYmIGlzUmVtb3ZlTm9kZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1JlbW92ZUZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuTm9kZUFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZU5vZGUgPSBuTm9kZUFycmF5W2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0Tm9kZSwgdGV4dE5vZGVfcywgdGV4dE5vZGVfZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZSA9IHV0aWwuY3JlYXRlVGV4dE5vZGUodXRpbC56ZXJvV2lkdGhTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLnJlcGxhY2VDaGlsZCh0ZXh0Tm9kZSwgcmVtb3ZlTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgckNoaWxkcmVuID0gcmVtb3ZlTm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZV9zID0gckNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAockNoaWxkcmVuWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZV9lID0gckNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuaW5zZXJ0QmVmb3JlKHRleHROb2RlX2UsIHJlbW92ZU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShyZW1vdmVOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyID0gZW5kQ29udGFpbmVyID0gdGV4dE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydENvbnRhaW5lciA9IHRleHROb2RlX3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRDb250YWluZXIgPSB0ZXh0Tm9kZV9lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUmVtb3ZlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbk5vZGVBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJpcFJlbW92ZU5vZGUobk5vZGVBcnJheVtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjb2xsYXBzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydENvbnRhaW5lciA9IGVuZENvbnRhaW5lciA9IG5ld0lubmVyTm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVFbXB0eU5vZGUocE5vZGUsIG5ld0lubmVyTm9kZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBzdGFydENvbnRhaW5lci50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBlbmRPZmZzZXQgPSBlbmRDb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBlbmRDb250YWluZXIgcmVzZXRcclxuICAgICAgICAgICAgY29uc3QgZW5kQ29uUmVzZXQgPSBpc1JlbW92ZUZvcm1hdCB8fCBlbmRDb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoID09PSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF1dGlsLmlzQnJlYWsoZW5kQ29udGFpbmVyKSAmJiBlbmRDb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0oZW5kQ29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgIGVuZENvbnRhaW5lciA9IHN0YXJ0Q29udGFpbmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVuZE9mZnNldCA9IGVuZENvblJlc2V0ID8gZW5kQ29udGFpbmVyLnRleHRDb250ZW50Lmxlbmd0aCA6IGVuZE9mZnNldDtcclxuXHJcbiAgICAgICAgICAgIC8vIG5vZGUgY2hhbmdlXHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1N0YXJ0T2Zmc2V0ID0ge3M6IDAsIGU6IDB9O1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydFBhdGggPSB1dGlsLmdldE5vZGVQYXRoKHN0YXJ0Q29udGFpbmVyLCBwTm9kZSwgbmV3U3RhcnRPZmZzZXQpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbWVyZ2VFbmRDb24gPSAhZW5kQ29udGFpbmVyLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGlmIChtZXJnZUVuZENvbikgZW5kQ29udGFpbmVyID0gc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0VuZE9mZnNldCA9IHtzOiAwLCBlOiAwfTtcclxuICAgICAgICAgICAgY29uc3QgZW5kUGF0aCA9IHV0aWwuZ2V0Tm9kZVBhdGgoZW5kQ29udGFpbmVyICwgcE5vZGUsICghbWVyZ2VFbmRDb24gJiYgIWVuZENvblJlc2V0KSA/IG5ld0VuZE9mZnNldCA6IG51bGwpO1xyXG5cclxuICAgICAgICAgICAgc3RhcnRPZmZzZXQgKz0gbmV3U3RhcnRPZmZzZXQucztcclxuICAgICAgICAgICAgZW5kT2Zmc2V0ID0gKGNvbGxhcHNlZCA/IHN0YXJ0T2Zmc2V0IDogbWVyZ2VFbmRDb24gPyBzdGFydENvbnRhaW5lci50ZXh0Q29udGVudC5sZW5ndGggOiBlbmRDb25SZXNldCA/IGVuZE9mZnNldCArIG5ld1N0YXJ0T2Zmc2V0LnMgOiBlbmRPZmZzZXQgKyBuZXdFbmRPZmZzZXQucyk7XHJcblxyXG4gICAgICAgICAgICAvLyB0YWcgbWVyZ2VcclxuICAgICAgICAgICAgY29uc3QgbmV3T2Zmc2V0cyA9IHV0aWwubWVyZ2VTYW1lVGFncyhwTm9kZSwgW3N0YXJ0UGF0aCwgZW5kUGF0aF0sIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChwTm9kZSwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lciA9IHV0aWwuZ2V0Tm9kZUZyb21QYXRoKHN0YXJ0UGF0aCwgcE5vZGUpO1xyXG4gICAgICAgICAgICBlbmRDb250YWluZXIgPSB1dGlsLmdldE5vZGVGcm9tUGF0aChlbmRQYXRoLCBwTm9kZSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYW5jZXN0b3I6IHBOb2RlLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRDb250YWluZXI6IHN0YXJ0Q29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHN0YXJ0T2Zmc2V0ICsgbmV3T2Zmc2V0c1swXSxcclxuICAgICAgICAgICAgICAgIGVuZENvbnRhaW5lcjogZW5kQ29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgZW5kT2Zmc2V0OiBlbmRPZmZzZXQgKyBuZXdPZmZzZXRzWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIHdyYXBzIGZpcnN0IGxpbmUgc2VsZWN0ZWQgdGV4dC5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIG5vZGUgb2YgdGhlIGxpbmUgdGhhdCBjb250YWlucyB0aGUgc2VsZWN0ZWQgdGV4dCBub2RlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gbmV3SW5uZXJOb2RlIFRoZSBkb20gdGhhdCB3aWxsIHdyYXAgdGhlIHNlbGVjdGVkIHRleHQgYXJlYVxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHZhbGlkYXRpb24gQ2hlY2sgaWYgdGhlIG5vZGUgc2hvdWxkIGJlIHN0cmlwcGVkLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gc3RhcnRDb24gVGhlIHN0YXJ0Q29udGFpbmVyIHByb3BlcnR5IG9mIHRoZSBzZWxlY3Rpb24gb2JqZWN0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzdGFydE9mZiBUaGUgc3RhcnRPZmZzZXQgcHJvcGVydHkgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc1JlbW92ZUZvcm1hdCBJcyB0aGUgcmVtb3ZlIGFsbCBmb3JtYXRzIGNvbW1hbmQ/XHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc1JlbW92ZU5vZGUgXCJuZXdJbm5lck5vZGVcIiBpcyByZW1vdmUgbm9kZT9cclxuICAgICAgICAgKiBAcmV0dXJucyB7bnVsbHxOb2RlfSBJZiBlbmQgY29udGFpbmVyIGlzIHJlbmV3ZWQsIHJldHVybmVkIHJlbmV3ZWQgbm9kZVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHsgYW5jZXN0b3IsIGNvbnRhaW5lciwgb2Zmc2V0LCBlbmRDb250YWluZXIgfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX25vZGVDaGFuZ2Vfc3RhcnRMaW5lOiBmdW5jdGlvbiAoZWxlbWVudCwgbmV3SW5uZXJOb2RlLCB2YWxpZGF0aW9uLCBzdGFydENvbiwgc3RhcnRPZmYsIGlzUmVtb3ZlRm9ybWF0LCBpc1JlbW92ZU5vZGUsIF9yZW1vdmVDaGVjaywgX2dldE1haW50YWluZWROb2RlLCBfaXNNYWludGFpbmVkTm9kZSwgX2VuZENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAvLyBub3QgYWRkIHRhZ1xyXG4gICAgICAgICAgICBsZXQgcGFyZW50Q29uID0gc3RhcnRDb24ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgd2hpbGUgKCFwYXJlbnRDb24ubmV4dFNpYmxpbmcgJiYgIXBhcmVudENvbi5wcmV2aW91c1NpYmxpbmcgJiYgIXV0aWwuaXNGb3JtYXRFbGVtZW50KHBhcmVudENvbi5wYXJlbnROb2RlKSAmJiAhdXRpbC5pc1d5c2l3eWdEaXYocGFyZW50Q29uLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Q29uLm5vZGVOYW1lID09PSBuZXdJbm5lck5vZGUubm9kZU5hbWUpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uID0gcGFyZW50Q29uLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaXNSZW1vdmVOb2RlICYmIHBhcmVudENvbi5ub2RlTmFtZSA9PT0gbmV3SW5uZXJOb2RlLm5vZGVOYW1lICYmICF1dGlsLmlzRm9ybWF0RWxlbWVudChwYXJlbnRDb24pICYmICFwYXJlbnRDb24ubmV4dFNpYmxpbmcgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2Uoc3RhcnRDb24udGV4dENvbnRlbnQuc2xpY2UoMCwgc3RhcnRPZmYpKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNhbWVUYWcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgbGV0IHMgPSBzdGFydENvbi5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAocykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UocykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2FtZVRhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcyA9IHMucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzYW1lVGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5jb3B5VGFnQXR0cmlidXRlcyhwYXJlbnRDb24sIG5ld0lubmVyTm9kZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yOiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IHN0YXJ0Q29uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHN0YXJ0T2ZmXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYWRkIHRhZ1xyXG4gICAgICAgICAgICBfcmVtb3ZlQ2hlY2sudiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBlbCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG5Ob2RlQXJyYXkgPSBbbmV3SW5uZXJOb2RlXTtcclxuICAgICAgICAgICAgY29uc3QgcE5vZGUgPSBlbGVtZW50LmNsb25lTm9kZShmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29udGFpbmVyID0gc3RhcnRDb247XHJcbiAgICAgICAgICAgIGxldCBvZmZzZXQgPSBzdGFydE9mZjtcclxuICAgICAgICAgICAgbGV0IHBhc3NOb2RlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBwQ3VycmVudCwgbmV3Tm9kZSwgYXBwZW5kTm9kZSwgYW5jaG9yTm9kZTtcclxuXHJcbiAgICAgICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQsIGFuY2VzdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gY3VycmVudC5jaGlsZE5vZGVzO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjaGlsZE5vZGVzLmxlbmd0aCwgdk5vZGUsIGNsb25lQ2hpbGQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY292ZXJOb2RlID0gYW5jZXN0b3I7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXNzTm9kZSAmJiAhdXRpbC5pc0JyZWFrKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLl9pc0lnbm9yZU5vZGVDaGFuZ2UoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVDaGlsZCA9IGNoaWxkLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChjbG9uZUNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmQgY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9lbmRDb250YWluZXIgJiYgY2hpbGQuY29udGFpbnMoX2VuZENvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kUGF0aCA9IHV0aWwuZ2V0Tm9kZVBhdGgoX2VuZENvbnRhaW5lciwgY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZW5kQ29udGFpbmVyID0gdXRpbC5nZXROb2RlRnJvbVBhdGgoZW5kUGF0aCwgY2xvbmVDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25GdW5jKGNoaWxkLCBjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmNob3JzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXdOb2RlLnBhcmVudE5vZGUgIT09IG51bGwgJiYgbmV3Tm9kZSAhPT0gZWwgJiYgbmV3Tm9kZSAhPT0gbmV3SW5uZXJOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Tm9kZSA9IHZhbGlkYXRpb24obmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3Tm9kZS5ub2RlVHlwZSA9PT0gMSAmJiB2Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNNYWludGFpbmVkTm9kZShuZXdOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFuY2hvck5vZGUpIGFuY2hvcnMucHVzaCh2Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQucHVzaCh2Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG5ld05vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudCA9IHBDdXJyZW50LmNvbmNhdChhbmNob3JzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzVG9wTm9kZSA9IHBDdXJyZW50Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHBDdXJyZW50LnBvcCgpIHx8IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZSA9IGNoaWxkTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBDdXJyZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBwQ3VycmVudC5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUuYXBwZW5kQ2hpbGQobmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9pc01haW50YWluZWROb2RlKG5ld0lubmVyTm9kZS5wYXJlbnROb2RlKSAmJiAhX2lzTWFpbnRhaW5lZE5vZGUoY2hpbGROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYW5jaG9yTm9kZSAmJiBfaXNNYWludGFpbmVkTm9kZShjaGlsZE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSBuZXdJbm5lck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFDaGlsZHJlbiA9IGNoaWxkTm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYSA9IDAsIGFMZW4gPSBhQ2hpbGRyZW4ubGVuZ3RoOyBhIDwgYUxlbjsgYSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlLmFwcGVuZENoaWxkKGFDaGlsZHJlblthXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKGNoaWxkTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9ICFfaXNNYWludGFpbmVkTm9kZShuZXdOb2RlKSA/IG5ld05vZGUgOiBuZXdJbm5lck5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTm9kZUFycmF5LnB1c2gobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1RvcE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZS5hcHBlbmRDaGlsZChjaGlsZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBuZXdJbm5lck5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmNob3JOb2RlICYmIGNoaWxkLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2dldE1haW50YWluZWROb2RlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuY2VzdG9yQW5jaG9yTm9kZSA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChhbmNlc3RvciwgZnVuY3Rpb24gKGN1cnJlbnQpIHtyZXR1cm4gdGhpcy5faXNNYWludGFpbmVkTm9kZShjdXJyZW50LnBhcmVudE5vZGUpIHx8IGN1cnJlbnQucGFyZW50Tm9kZSA9PT0gcE5vZGU7fS5iaW5kKHV0aWwpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlLmFwcGVuZENoaWxkKGFuY2VzdG9yQW5jaG9yTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gYW5jZXN0b3JBbmNob3JOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0Q29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXNzTm9kZSAmJiBjaGlsZCA9PT0gY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5lID0gcE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBfZ2V0TWFpbnRhaW5lZE5vZGUoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2Tm9kZSA9IHV0aWwuY3JlYXRlVGV4dE5vZGUoY29udGFpbmVyLm5vZGVUeXBlID09PSAxID8gJycgOiBjb250YWluZXIuc3Vic3RyaW5nRGF0YSgwLCBvZmZzZXQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSB1dGlsLmNyZWF0ZVRleHROb2RlKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gMSA/ICcnIDogY29udGFpbmVyLnN1YnN0cmluZ0RhdGEob2Zmc2V0LCAoY29udGFpbmVyLmxlbmd0aCAtIG9mZnNldCkpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmNob3JOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gX2dldE1haW50YWluZWROb2RlKGFuY2VzdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhICYmIGEucGFyZW50Tm9kZSAhPT0gbGluZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtID0gYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG0ucGFyZW50Tm9kZSAhPT0gbGluZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNlc3RvciA9IHAgPSBtLnBhcmVudE5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUobS5jaGlsZE5vZGVzWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKG0uY2hpbGROb2Rlc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5hcHBlbmRDaGlsZChwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IG0ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IGFuY2hvck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShwcmV2Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmFwcGVuZENoaWxkKHByZXZOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldkFuY2hvck5vZGUgPSBfZ2V0TWFpbnRhaW5lZE5vZGUoYW5jZXN0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFwcmV2QW5jaG9yTm9kZSkgYW5jaG9yTm9kZSA9IHByZXZBbmNob3JOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yTm9kZSkgbGluZSA9IGFuY2hvck5vZGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gYW5jZXN0b3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXdOb2RlICE9PSBsaW5lICYmIG5ld05vZGUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZOb2RlID0gdmFsaWRhdGlvbihuZXdOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlLm5vZGVUeXBlID09PSAxICYmIHZOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQucHVzaCh2Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gbmV3Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBwQ3VycmVudC5wb3AoKSB8fCBhbmNlc3RvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IG5ld05vZGUgPSBjaGlsZE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwQ3VycmVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gcEN1cnJlbnQucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlLmFwcGVuZENoaWxkKG5ld05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUgIT09IGFuY2VzdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUuYXBwZW5kQ2hpbGQoY2hpbGROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gbmV3SW5uZXJOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0JyZWFrKGNoaWxkKSkgbmV3SW5uZXJOb2RlLmFwcGVuZENoaWxkKGNoaWxkLmNsb25lTm9kZShmYWxzZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgPSB0ZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzc05vZGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB2Tm9kZSA9ICFwYXNzTm9kZSA/IGNoaWxkLmNsb25lTm9kZShmYWxzZSkgOiB2YWxpZGF0aW9uKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodk5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IuYXBwZW5kQ2hpbGQodk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEgJiYgIXV0aWwuaXNCcmVhayhjaGlsZCkpIGNvdmVyTm9kZSA9IHZOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRnVuYyhjaGlsZCwgY292ZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkoZWxlbWVudCwgcE5vZGUpO1xyXG5cclxuICAgICAgICAgICAgLy8gbm90IHJlbW92ZSB0YWdcclxuICAgICAgICAgICAgaWYgKGlzUmVtb3ZlTm9kZSAmJiAhaXNSZW1vdmVGb3JtYXQgJiYgIV9yZW1vdmVDaGVjay52KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yOiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogc3RhcnRDb24sXHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBzdGFydE9mZixcclxuICAgICAgICAgICAgICAgICAgICBlbmRDb250YWluZXI6IF9lbmRDb250YWluZXJcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlzUmVtb3ZlRm9ybWF0ID0gaXNSZW1vdmVGb3JtYXQgJiYgaXNSZW1vdmVOb2RlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzUmVtb3ZlRm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Ob2RlQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVtb3ZlTm9kZSA9IG5Ob2RlQXJyYXlbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJDaGlsZHJlbiA9IHJlbW92ZU5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IHJDaGlsZHJlblswXTtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAockNoaWxkcmVuWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmluc2VydEJlZm9yZShyQ2hpbGRyZW5bMF0sIHJlbW92ZU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0ocmVtb3ZlTm9kZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSBjb250YWluZXIgPSB0ZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1JlbW92ZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuTm9kZUFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyaXBSZW1vdmVOb2RlKG5Ob2RlQXJyYXlbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlzUmVtb3ZlRm9ybWF0ICYmIHBOb2RlLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gZWxlbWVudC5jaGlsZE5vZGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlRW1wdHlOb2RlKHBOb2RlLCBuZXdJbm5lck5vZGUsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UocE5vZGUudGV4dENvbnRlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gcE5vZGUuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIG5vZGUgY2hhbmdlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRzID0ge3M6IDAsIGU6IDB9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHV0aWwuZ2V0Tm9kZVBhdGgoY29udGFpbmVyLCBwTm9kZSwgb2Zmc2V0cyk7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gb2Zmc2V0cy5zO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHRhZyBtZXJnZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3T2Zmc2V0cyA9IHV0aWwubWVyZ2VTYW1lVGFncyhwTm9kZSwgW3BhdGhdLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHBOb2RlLCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIgPSB1dGlsLmdldE5vZGVGcm9tUGF0aChwYXRoLCBwTm9kZSk7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbmV3T2Zmc2V0c1swXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGFuY2VzdG9yOiBwTm9kZSxcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXHJcbiAgICAgICAgICAgICAgICBlbmRDb250YWluZXI6IF9lbmRDb250YWluZXJcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gd3JhcHMgbWlkIGxpbmVzIHNlbGVjdGVkIHRleHQuXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBub2RlIG9mIHRoZSBsaW5lIHRoYXQgY29udGFpbnMgdGhlIHNlbGVjdGVkIHRleHQgbm9kZS5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5ld0lubmVyTm9kZSBUaGUgZG9tIHRoYXQgd2lsbCB3cmFwIHRoZSBzZWxlY3RlZCB0ZXh0IGFyZWFcclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB2YWxpZGF0aW9uIENoZWNrIGlmIHRoZSBub2RlIHNob3VsZCBiZSBzdHJpcHBlZC5cclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzUmVtb3ZlRm9ybWF0IElzIHRoZSByZW1vdmUgYWxsIGZvcm1hdHMgY29tbWFuZD9cclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzUmVtb3ZlTm9kZSBcIm5ld0lubmVyTm9kZVwiIGlzIHJlbW92ZSBub2RlP1xyXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gX2VuZENvbnRhaW5lciBPZmZzZXQgbm9kZSBvZiBsYXN0IGxpbmUgYWxyZWFkeSBtb2RpZmllZCAoZW5kLmNvbnRhaW5lcilcclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSB7IGFuY2VzdG9yLCBlbmRDb250YWluZXI6IFwiSWYgZW5kIGNvbnRhaW5lciBpcyByZW5ld2VkLCByZXR1cm5lZCByZW5ld2VkIG5vZGVcIiB9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbm9kZUNoYW5nZV9taWRkbGVMaW5lOiBmdW5jdGlvbiAoZWxlbWVudCwgbmV3SW5uZXJOb2RlLCB2YWxpZGF0aW9uLCBpc1JlbW92ZUZvcm1hdCwgaXNSZW1vdmVOb2RlLCBfcmVtb3ZlQ2hlY2ssIF9lbmRDb250YWluZXIpIHtcclxuICAgICAgICAgICAgLy8gbm90IGFkZCB0YWdcclxuICAgICAgICAgICAgaWYgKCFpc1JlbW92ZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGVuZCBjb250YWluZXIgcGF0aFxyXG4gICAgICAgICAgICAgICAgbGV0IGVuZFBhdGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKF9lbmRDb250YWluZXIgJiYgZWxlbWVudC5jb250YWlucyhfZW5kQ29udGFpbmVyKSkgZW5kUGF0aCA9IHV0aWwuZ2V0Tm9kZVBhdGgoX2VuZENvbnRhaW5lciwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcE5vZGUgPSBlbGVtZW50LmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vZGVOYW1lID0gbmV3SW5uZXJOb2RlLm5vZGVOYW1lO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q3NzVGV4dCA9IG5ld0lubmVyTm9kZS5zdHlsZS5jc3NUZXh0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q2xhc3MgPSBuZXdJbm5lck5vZGUuY2xhc3NOYW1lO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IHRlbXBOb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgICAgICBsZXQgaSA9IDAsIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNoaWxkOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMykgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLm5vZGVOYW1lID09PSBuZXdOb2RlTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdHlsZS5jc3NUZXh0ICs9IG5ld0Nzc1RleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoY2hpbGQsIG5ld0NsYXNzKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF1dGlsLmlzQnJlYWsoY2hpbGQpICYmIHV0aWwuX2lzSWdub3JlTm9kZUNoYW5nZShjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsZW4gPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChsZW4gPiAwICYmIGkgPT09IGxlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdGVtcE5vZGUuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yOiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRDb250YWluZXI6IGVuZFBhdGggPyB1dGlsLmdldE5vZGVGcm9tUGF0aChlbmRQYXRoLCBlbGVtZW50KSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBhZGQgdGFnXHJcbiAgICAgICAgICAgIF9yZW1vdmVDaGVjay52ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IHBOb2RlID0gZWxlbWVudC5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCBuTm9kZUFycmF5ID0gW25ld0lubmVyTm9kZV07XHJcbiAgICAgICAgICAgIGxldCBub25lQ2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQsIGFuY2VzdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gY3VycmVudC5jaGlsZE5vZGVzO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjaGlsZE5vZGVzLmxlbmd0aCwgdk5vZGUsIGNsb25lQ2hpbGQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZCA9IGNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvdmVyTm9kZSA9IGFuY2VzdG9yO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNCcmVhayhjaGlsZCkgJiYgdXRpbC5faXNJZ25vcmVOb2RlQ2hhbmdlKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3SW5uZXJOb2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9uZUNoaWxkID0gY2hpbGQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5hcHBlbmRDaGlsZChjbG9uZUNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbk5vZGVBcnJheS5wdXNoKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gbmV3SW5uZXJOb2RlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kIGNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2VuZENvbnRhaW5lciAmJiBjaGlsZC5jb250YWlucyhfZW5kQ29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kUGF0aCA9IHV0aWwuZ2V0Tm9kZVBhdGgoX2VuZENvbnRhaW5lciwgY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VuZENvbnRhaW5lciA9IHV0aWwuZ2V0Tm9kZUZyb21QYXRoKGVuZFBhdGgsIGNsb25lQ2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2Tm9kZSA9IHZhbGlkYXRpb24oY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodk5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmVDaGFuZ2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmFwcGVuZENoaWxkKHZOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkgY292ZXJOb2RlID0gdk5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0JyZWFrKGNoaWxkKSkgcmVjdXJzaW9uRnVuYyhjaGlsZCwgY292ZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkoZWxlbWVudCwgbmV3SW5uZXJOb2RlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIG5vdCByZW1vdmUgdGFnXHJcbiAgICAgICAgICAgIGlmIChub25lQ2hhbmdlIHx8IChpc1JlbW92ZU5vZGUgJiYgIWlzUmVtb3ZlRm9ybWF0ICYmICFfcmVtb3ZlQ2hlY2sudikpIHJldHVybiB7IGFuY2VzdG9yOiBlbGVtZW50LCBlbmRDb250YWluZXI6IF9lbmRDb250YWluZXIgfTtcclxuXHJcbiAgICAgICAgICAgIHBOb2RlLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNSZW1vdmVGb3JtYXQgJiYgaXNSZW1vdmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Ob2RlQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVtb3ZlTm9kZSA9IG5Ob2RlQXJyYXlbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJDaGlsZHJlbiA9IHJlbW92ZU5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAockNoaWxkcmVuWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmluc2VydEJlZm9yZShyQ2hpbGRyZW5bMF0sIHJlbW92ZU5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0ocmVtb3ZlTm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNSZW1vdmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdJbm5lck5vZGUgPSBuZXdJbm5lck5vZGUuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbk5vZGVBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmlwUmVtb3ZlTm9kZShuTm9kZUFycmF5W2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVFbXB0eU5vZGUocE5vZGUsIG5ld0lubmVyTm9kZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB1dGlsLm1lcmdlU2FtZVRhZ3MocE5vZGUsIG51bGwsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgLy8gbm9kZSBjaGFuZ2VcclxuICAgICAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChwTm9kZSwgZWxlbWVudCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGFuY2VzdG9yOiBwTm9kZSwgZW5kQ29udGFpbmVyOiBfZW5kQ29udGFpbmVyIH07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIHdyYXBzIGxhc3QgbGluZSBzZWxlY3RlZCB0ZXh0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUaGUgbm9kZSBvZiB0aGUgbGluZSB0aGF0IGNvbnRhaW5zIHRoZSBzZWxlY3RlZCB0ZXh0IG5vZGUuXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBuZXdJbm5lck5vZGUgVGhlIGRvbSB0aGF0IHdpbGwgd3JhcCB0aGUgc2VsZWN0ZWQgdGV4dCBhcmVhXHJcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdmFsaWRhdGlvbiBDaGVjayBpZiB0aGUgbm9kZSBzaG91bGQgYmUgc3RyaXBwZWQuXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBlbmRDb24gVGhlIGVuZENvbnRhaW5lciBwcm9wZXJ0eSBvZiB0aGUgc2VsZWN0aW9uIG9iamVjdC5cclxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gZW5kT2ZmIFRoZSBlbmRPZmZzZXQgcHJvcGVydHkgb2YgdGhlIHNlbGVjdGlvbiBvYmplY3QuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc1JlbW92ZUZvcm1hdCBJcyB0aGUgcmVtb3ZlIGFsbCBmb3JtYXRzIGNvbW1hbmQ/XHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc1JlbW92ZU5vZGUgXCJuZXdJbm5lck5vZGVcIiBpcyByZW1vdmUgbm9kZT9cclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSB7IGFuY2VzdG9yLCBjb250YWluZXIsIG9mZnNldCB9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbm9kZUNoYW5nZV9lbmRMaW5lOiBmdW5jdGlvbiAoZWxlbWVudCwgbmV3SW5uZXJOb2RlLCB2YWxpZGF0aW9uLCBlbmRDb24sIGVuZE9mZiwgaXNSZW1vdmVGb3JtYXQsIGlzUmVtb3ZlTm9kZSwgX3JlbW92ZUNoZWNrLCBfZ2V0TWFpbnRhaW5lZE5vZGUsIF9pc01haW50YWluZWROb2RlKSB7XHJcbiAgICAgICAgICAgIC8vIG5vdCBhZGQgdGFnXHJcbiAgICAgICAgICAgIGxldCBwYXJlbnRDb24gPSBlbmRDb24ucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgd2hpbGUgKCFwYXJlbnRDb24ubmV4dFNpYmxpbmcgJiYgIXBhcmVudENvbi5wcmV2aW91c1NpYmxpbmcgJiYgIXV0aWwuaXNGb3JtYXRFbGVtZW50KHBhcmVudENvbi5wYXJlbnROb2RlKSAmJiAhdXRpbC5pc1d5c2l3eWdEaXYocGFyZW50Q29uLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Q29uLm5vZGVOYW1lID09PSBuZXdJbm5lck5vZGUubm9kZU5hbWUpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uID0gcGFyZW50Q29uLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaXNSZW1vdmVOb2RlICYmIHBhcmVudENvbi5ub2RlTmFtZSA9PT0gbmV3SW5uZXJOb2RlLm5vZGVOYW1lICYmICF1dGlsLmlzRm9ybWF0RWxlbWVudChwYXJlbnRDb24pICYmICFwYXJlbnRDb24ucHJldmlvdXNTaWJsaW5nICYmIHV0aWwub25seVplcm9XaWR0aFNwYWNlKGVuZENvbi50ZXh0Q29udGVudC5zbGljZShlbmRPZmYpKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNhbWVUYWcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgbGV0IGUgPSBlbmRDb24ubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2FtZVRhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZSA9IGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNhbWVUYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLmNvcHlUYWdBdHRyaWJ1dGVzKHBhcmVudENvbiwgbmV3SW5uZXJOb2RlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3I6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogZW5kQ29uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGVuZE9mZlxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGFkZCB0YWdcclxuICAgICAgICAgICAgX3JlbW92ZUNoZWNrLnYgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3QgZWwgPSBlbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCBuTm9kZUFycmF5ID0gW25ld0lubmVyTm9kZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHBOb2RlID0gZWxlbWVudC5jbG9uZU5vZGUoZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IGVuZENvbjtcclxuICAgICAgICAgICAgbGV0IG9mZnNldCA9IGVuZE9mZjtcclxuICAgICAgICAgICAgbGV0IHBhc3NOb2RlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBwQ3VycmVudCwgbmV3Tm9kZSwgYXBwZW5kTm9kZSwgYW5jaG9yTm9kZTtcclxuXHJcbiAgICAgICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jKGN1cnJlbnQsIGFuY2VzdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gY3VycmVudC5jaGlsZE5vZGVzO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBjaGlsZE5vZGVzLmxlbmd0aCAtIDEsIHZOb2RlOyAwIDw9IGk7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY292ZXJOb2RlID0gYW5jZXN0b3I7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXNzTm9kZSAmJiAhdXRpbC5pc0JyZWFrKGNoaWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLl9pc0lnbm9yZU5vZGVDaGFuZ2UoY2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xvbmVDaGlsZCA9IGNoaWxkLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5pbnNlcnRCZWZvcmUoY2xvbmVDaGlsZCwgYW5jZXN0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmluc2VydEJlZm9yZShuZXdJbm5lck5vZGUsIGNsb25lQ2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25GdW5jKGNoaWxkLCBjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmNob3JzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXdOb2RlLnBhcmVudE5vZGUgIT09IG51bGwgJiYgbmV3Tm9kZSAhPT0gZWwgJiYgbmV3Tm9kZSAhPT0gbmV3SW5uZXJOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Tm9kZSA9IHZhbGlkYXRpb24obmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodk5vZGUgJiYgbmV3Tm9kZS5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNNYWludGFpbmVkTm9kZShuZXdOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFuY2hvck5vZGUpIGFuY2hvcnMucHVzaCh2Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJlbnQucHVzaCh2Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG5ld05vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwQ3VycmVudCA9IHBDdXJyZW50LmNvbmNhdChhbmNob3JzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzVG9wTm9kZSA9IHBDdXJyZW50Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHBDdXJyZW50LnBvcCgpIHx8IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZSA9IGNoaWxkTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBDdXJyZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUgPSBwQ3VycmVudC5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUuYXBwZW5kQ2hpbGQobmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmROb2RlID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9pc01haW50YWluZWROb2RlKG5ld0lubmVyTm9kZS5wYXJlbnROb2RlKSAmJiAhX2lzTWFpbnRhaW5lZE5vZGUoY2hpbGROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5pbnNlcnRCZWZvcmUobmV3SW5uZXJOb2RlLCBwTm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFuY2hvck5vZGUgJiYgX2lzTWFpbnRhaW5lZE5vZGUoY2hpbGROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlID0gbmV3SW5uZXJOb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhQ2hpbGRyZW4gPSBjaGlsZE5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGEgPSAwLCBhTGVuID0gYUNoaWxkcmVuLmxlbmd0aDsgYSA8IGFMZW47IGErKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZS5hcHBlbmRDaGlsZChhQ2hpbGRyZW5bYV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLmFwcGVuZENoaWxkKG5ld0lubmVyTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTm9kZS5pbnNlcnRCZWZvcmUoY2hpbGROb2RlLCBwTm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0lubmVyTm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSBhbmNlc3RvciA9IG5ld05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGFuY2VzdG9yID0gbmV3SW5uZXJOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzVG9wTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlLmluc2VydEJlZm9yZShjaGlsZE5vZGUsIG5ld0lubmVyTm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gbmV3SW5uZXJOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yTm9kZSAmJiBjaGlsZC5ub2RlVHlwZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9nZXRNYWludGFpbmVkTm9kZShjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmNlc3RvckFuY2hvck5vZGUgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoYW5jZXN0b3IsIGZ1bmN0aW9uIChjdXJyZW50KSB7cmV0dXJuIHRoaXMuX2lzTWFpbnRhaW5lZE5vZGUoY3VycmVudC5wYXJlbnROb2RlKSB8fCBjdXJyZW50LnBhcmVudE5vZGUgPT09IHBOb2RlO30uYmluZCh1dGlsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZS5hcHBlbmRDaGlsZChhbmNlc3RvckFuY2hvck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IGFuY2VzdG9yQW5jaG9yTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmluc2VydEJlZm9yZShuZXdJbm5lck5vZGUsIHBOb2RlLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JOb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5kQ29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXNzTm9kZSAmJiBjaGlsZCA9PT0gY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBfZ2V0TWFpbnRhaW5lZE5vZGUoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZnRlck5vZGUgPSB1dGlsLmNyZWF0ZVRleHROb2RlKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gMSA/ICcnIDogY29udGFpbmVyLnN1YnN0cmluZ0RhdGEob2Zmc2V0LCAoY29udGFpbmVyLmxlbmd0aCAtIG9mZnNldCkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSB1dGlsLmNyZWF0ZVRleHROb2RlKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gMSA/ICcnIDogY29udGFpbmVyLnN1YnN0cmluZ0RhdGEoMCwgb2Zmc2V0KSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9yTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IGFuY2hvck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBfZ2V0TWFpbnRhaW5lZE5vZGUoYW5jZXN0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgJiYgYS5wYXJlbnROb2RlICE9PSBwTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtID0gYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG0ucGFyZW50Tm9kZSAhPT0gcE5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBwID0gbS5wYXJlbnROb2RlLmNsb25lTm9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKG0uY2hpbGROb2Rlc1swXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5hcHBlbmRDaGlsZChtLmNoaWxkTm9kZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0uYXBwZW5kQ2hpbGQocCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBtLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSwgbS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yTm9kZSA9IGFuY2hvck5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfaXNNYWludGFpbmVkTm9kZShuZXdJbm5lck5vZGUucGFyZW50Tm9kZSkgJiYgIWFuY2hvck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuYXBwZW5kQ2hpbGQobmV3SW5uZXJOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5Ob2RlQXJyYXkucHVzaChuZXdJbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwub25seVplcm9XaWR0aFNwYWNlKGFmdGVyTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmluc2VydEJlZm9yZShhZnRlck5vZGUsIGFuY2VzdG9yLmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlID0gYW5jZXN0b3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXdOb2RlICE9PSBwTm9kZSAmJiBuZXdOb2RlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Tm9kZSA9IF9pc01haW50YWluZWROb2RlKG5ld05vZGUpID8gbnVsbCA6IHZhbGlkYXRpb24obmV3Tm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodk5vZGUgJiYgbmV3Tm9kZS5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyZW50LnB1c2godk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG5ld05vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gcEN1cnJlbnQucG9wKCkgfHwgYW5jZXN0b3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUgPSBuZXdOb2RlID0gY2hpbGROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocEN1cnJlbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IHBDdXJyZW50LnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZS5hcHBlbmRDaGlsZChuZXdOb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUgPSBuZXdOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlICE9PSBhbmNlc3Rvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5uZXJOb2RlLmluc2VydEJlZm9yZShjaGlsZE5vZGUsIG5ld0lubmVyTm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gbmV3Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gbmV3SW5uZXJOb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0JyZWFrKGNoaWxkKSkgbmV3SW5uZXJOb2RlLmFwcGVuZENoaWxkKGNoaWxkLmNsb25lTm9kZShmYWxzZSkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuY2hvck5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUuaW5zZXJ0QmVmb3JlKG5ld0lubmVyTm9kZSwgYW5jaG9yTm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmluc2VydEJlZm9yZShhbmNob3JOb2RlLCBwTm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5vZGUuaW5zZXJ0QmVmb3JlKG5ld0lubmVyTm9kZSwgcE5vZGUuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IHRleHROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSB0ZXh0Tm9kZS5kYXRhLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzc05vZGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IuaW5zZXJ0QmVmb3JlKGNvbnRhaW5lciwgYW5jZXN0b3IuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdk5vZGUgPSAhcGFzc05vZGUgPyBjaGlsZC5jbG9uZU5vZGUoZmFsc2UpIDogdmFsaWRhdGlvbihjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmluc2VydEJlZm9yZSh2Tm9kZSwgYW5jZXN0b3IuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSAmJiAhdXRpbC5pc0JyZWFrKGNoaWxkKSkgY292ZXJOb2RlID0gdk5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25GdW5jKGNoaWxkLCBjb3Zlck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KShlbGVtZW50LCBwTm9kZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBub3QgcmVtb3ZlIHRhZ1xyXG4gICAgICAgICAgICBpZiAoaXNSZW1vdmVOb2RlICYmICFpc1JlbW92ZUZvcm1hdCAmJiAhX3JlbW92ZUNoZWNrLnYpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3I6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiBlbmRDb24sXHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBlbmRPZmZcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlzUmVtb3ZlRm9ybWF0ID0gaXNSZW1vdmVGb3JtYXQgJiYgaXNSZW1vdmVOb2RlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzUmVtb3ZlRm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5Ob2RlQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVtb3ZlTm9kZSA9IG5Ob2RlQXJyYXlbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJDaGlsZHJlbiA9IHJlbW92ZU5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dE5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChyQ2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE5vZGUgPSByQ2hpbGRyZW5bMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBOb2RlLmluc2VydEJlZm9yZSh0ZXh0Tm9kZSwgcmVtb3ZlTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShyZW1vdmVOb2RlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IG5Ob2RlQXJyYXkubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgPSB0ZXh0Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gdGV4dE5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc1JlbW92ZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIG5ld0lubmVyTm9kZSA9IG5ld0lubmVyTm9kZS5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuTm9kZUFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyaXBSZW1vdmVOb2RlKG5Ob2RlQXJyYXlbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlzUmVtb3ZlRm9ybWF0ICYmIHBOb2RlLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gZWxlbWVudC5jaGlsZE5vZGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghaXNSZW1vdmVOb2RlICYmIG5ld0lubmVyTm9kZS50ZXh0Q29udGVudC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUVtcHR5Tm9kZShwTm9kZSwgbnVsbCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogMFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVFbXB0eU5vZGUocE5vZGUsIG5ld0lubmVyTm9kZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShwTm9kZS50ZXh0Q29udGVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgPSBwTm9kZS5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGNvbnRhaW5lci50ZXh0Q29udGVudC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHV0aWwub25seVplcm9XaWR0aFNwYWNlKGNvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgPSBuZXdJbm5lck5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBub2RlIGNoYW5nZVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IHtzOiAwLCBlOiAwfTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSB1dGlsLmdldE5vZGVQYXRoKGNvbnRhaW5lciwgcE5vZGUsIG9mZnNldHMpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG9mZnNldHMucztcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB0YWcgbWVyZ2VcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld09mZnNldHMgPSB1dGlsLm1lcmdlU2FtZVRhZ3MocE5vZGUsIFtwYXRoXSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChwTm9kZSwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyID0gdXRpbC5nZXROb2RlRnJvbVBhdGgocGF0aCwgcE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG5ld09mZnNldHNbMF07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBhbmNlc3RvcjogcE5vZGUsXHJcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcclxuICAgICAgICAgICAgICAgIG9mZnNldDogY29udGFpbmVyLm5vZGVUeXBlID09PSAxICYmIG9mZnNldCA9PT0gMSA/IGNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCA6IG9mZnNldFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSdW4gcGx1Z2luIGNhbGxzIGFuZCBiYXNpYyBjb21tYW5kcy5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbWFuZCBDb21tYW5kIHN0cmluZ1xyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkaXNwbGF5IERpc3BsYXkgdHlwZSBzdHJpbmcgKCdjb21tYW5kJywgJ3N1Ym1lbnUnLCAnZGlhbG9nJywgJ2NvbnRhaW5lcicpXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXQgVGhlIGVsZW1lbnQgb2YgY29tbWFuZCBidXR0b25cclxuICAgICAgICAgKi9cclxuICAgICAgICBhY3Rpb25DYWxsOiBmdW5jdGlvbiAoY29tbWFuZCwgZGlzcGxheSwgdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIC8vIGNhbGwgcGx1Z2luc1xyXG4gICAgICAgICAgICBpZiAoZGlzcGxheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKC9tb3JlL2kudGVzdChkaXNwbGF5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT09IHRoaXMuX21vcmVMYXllckFjdGl2ZUJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXllciA9IGNvbnRleHQuZWxlbWVudC50b29sYmFyLnF1ZXJ5U2VsZWN0b3IoJy4nICsgY29tbWFuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXllcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX21vcmVMYXllckFjdGl2ZUJ1dHRvbikgdGhpcy5tb3JlTGF5ZXJPZmYoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3JlTGF5ZXJBY3RpdmVCdXR0b24gPSB0YXJnZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5fc2hvd1Rvb2xiYXJCYWxsb29uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5fc2hvd1Rvb2xiYXJJbmxpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKHRhcmdldCwgJ29uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5xdWVyeVNlbGVjdG9yKCcuJyArIHRoaXMuX21vcmVMYXllckFjdGl2ZUJ1dHRvbi5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vcmVMYXllck9mZigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9zaG93VG9vbGJhckJhbGxvb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9zaG93VG9vbGJhcklubGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoL2NvbnRhaW5lci8udGVzdChkaXNwbGF5KSAmJiAodGhpcy5fbWVudVRyYXlbY29tbWFuZF0gPT09IG51bGwgfHwgdGFyZ2V0ICE9PSB0aGlzLmNvbnRhaW5lckFjdGl2ZUJ1dHRvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxQbHVnaW4oY29tbWFuZCwgdGhpcy5jb250YWluZXJPbi5iaW5kKHRoaXMsIHRhcmdldCksIHRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUmVhZE9ubHkgJiYgdXRpbC5hcnJheUluY2x1ZGVzKHRoaXMucmVzaXppbmdEaXNhYmxlZEJ1dHRvbnMsIHRhcmdldCkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGlmICgvc3VibWVudS8udGVzdChkaXNwbGF5KSAmJiAodGhpcy5fbWVudVRyYXlbY29tbWFuZF0gPT09IG51bGwgfHwgdGFyZ2V0ICE9PSB0aGlzLnN1Ym1lbnVBY3RpdmVCdXR0b24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsUGx1Z2luKGNvbW1hbmQsIHRoaXMuc3VibWVudU9uLmJpbmQodGhpcywgdGFyZ2V0KSwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9kaWFsb2cvLnRlc3QoZGlzcGxheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxQbHVnaW4oY29tbWFuZCwgdGhpcy5wbHVnaW5zW2NvbW1hbmRdLm9wZW4uYmluZCh0aGlzKSwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9jb21tYW5kLy50ZXN0KGRpc3BsYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsUGx1Z2luKGNvbW1hbmQsIHRoaXMucGx1Z2luc1tjb21tYW5kXS5hY3Rpb24uYmluZCh0aGlzKSwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL2ZpbGVCcm93c2VyLy50ZXN0KGRpc3BsYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsUGx1Z2luKGNvbW1hbmQsIHRoaXMucGx1Z2luc1tjb21tYW5kXS5vcGVuLmJpbmQodGhpcywgbnVsbCksIHRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gLy8gZGVmYXVsdCBjb21tYW5kXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbW1hbmQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZEhhbmRsZXIodGFyZ2V0LCBjb21tYW5kKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKC9zdWJtZW51Ly50ZXN0KGRpc3BsYXkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1Ym1lbnVPZmYoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghL2NvbW1hbmQvLnRlc3QoZGlzcGxheSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VibWVudU9mZigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJPZmYoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlIGNvbW1hbmQgb2YgY29tbWFuZCBidXR0b24oQWxsIEJ1dHRvbnMgZXhjZXB0IHN1Ym1lbnUgYW5kIGRpYWxvZylcclxuICAgICAgICAgKiAoc2VsZWN0QWxsLCBjb2RlVmlldywgZnVsbFNjcmVlbiwgaW5kZW50LCBvdXRkZW50LCB1bmRvLCByZWRvLCByZW1vdmVGb3JtYXQsIHByaW50LCBwcmV2aWV3LCBzaG93QmxvY2tzLCBzYXZlLCBib2xkLCB1bmRlcmxpbmUsIGl0YWxpYywgc3RyaWtlLCBzdWJzY3JpcHQsIHN1cGVyc2NyaXB0LCBjb3B5LCBjdXQsIHBhc3RlKVxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudHxudWxsfSB0YXJnZXQgVGhlIGVsZW1lbnQgb2YgY29tbWFuZCBidXR0b25cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbWFuZCBQcm9wZXJ0eSBvZiBjb21tYW5kIGJ1dHRvbiAoZGF0YS12YWx1ZSlcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb21tYW5kSGFuZGxlcjogZnVuY3Rpb24gKHRhcmdldCwgY29tbWFuZCkge1xyXG4gICAgICAgICAgICBpZiAoY29yZS5pc1JlYWRPbmx5ICYmICEvY29weXxjdXR8c2VsZWN0QWxsfGNvZGVWaWV3fGZ1bGxTY3JlZW58cHJpbnR8cHJldmlld3xzaG93QmxvY2tzLy50ZXN0KGNvbW1hbmQpKSByZXR1cm47XHJcbiAgICAgICAgICAgIHN3aXRjaCAoY29tbWFuZCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnY29weSc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdjdXQnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY0NvbW1hbmQoY29tbWFuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdwYXN0ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdzZWxlY3RBbGwnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyT2ZmKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3lzaXd5ZyA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaXJzdCA9IHV0aWwuZ2V0Q2hpbGRFbGVtZW50KHd5c2l3eWcuZmlyc3RDaGlsZCwgZnVuY3Rpb24gKGN1cnJlbnQpIHsgcmV0dXJuIGN1cnJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDAgfHwgY3VycmVudC5ub2RlVHlwZSA9PT0gMzsgfSwgZmFsc2UpIHx8IHd5c2l3eWcuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdCA9IHV0aWwuZ2V0Q2hpbGRFbGVtZW50KHd5c2l3eWcubGFzdENoaWxkLCBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gY3VycmVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCB8fCBjdXJyZW50Lm5vZGVUeXBlID09PSAzOyB9LCB0cnVlKSB8fCB3eXNpd3lnLmxhc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0IHx8ICFsYXN0KSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNNZWRpYShmaXJzdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuZ2V0RmlsZUNvbXBvbmVudChmaXJzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyID0gdXRpbC5jcmVhdGVFbGVtZW50KCdCUicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSB1dGlsLmNyZWF0ZUVsZW1lbnQob3B0aW9ucy5kZWZhdWx0VGFnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LmFwcGVuZENoaWxkKGJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBpbmZvID8gaW5mby5jb21wb25lbnQgOiBmaXJzdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZm9ybWF0LCBmaXJzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gYnI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTWVkaWEobGFzdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnIgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0JSJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IHV0aWwuY3JlYXRlRWxlbWVudChvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQuYXBwZW5kQ2hpbGQoYnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3eXNpd3lnLmFwcGVuZENoaWxkKGZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPSBicjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuX3Nob3dUb29sYmFyQmFsbG9vbih0aGlzLnNldFJhbmdlKGZpcnN0LCAwLCBsYXN0LCBsYXN0LnRleHRDb250ZW50Lmxlbmd0aCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnY29kZVZpZXcnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlQ29kZVZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bGxTY3JlZW4nOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlRnVsbFNjcmVlbih0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnaW5kZW50JzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ291dGRlbnQnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZW50KGNvbW1hbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndW5kbyc6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnVuZG8oKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3JlZG8nOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5yZWRvKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdyZW1vdmVGb3JtYXQnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9ybWF0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncHJpbnQnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJpbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3ByZXZpZXcnOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnc2hvd0Jsb2Nrcyc6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVEaXNwbGF5QmxvY2tzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdkaXInOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlyKG9wdGlvbnMucnRsID8gJ2x0cicgOiAncnRsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdkaXJfbHRyJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERpcignbHRyJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdkaXJfcnRsJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERpcigncnRsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdzYXZlJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY2FsbEJhY2tTYXZlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY2FsbEJhY2tTYXZlKHRoaXMuZ2V0Q29udGVudHMoZmFsc2UpLCB0aGlzLl92YXJpYWJsZS5pc0NoYW5nZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdmFyaWFibGUuaXNDaGFuZ2VkICYmIHR5cGVvZiBmdW5jdGlvbnMuc2F2ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMuc2F2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdbU1VORURJVE9SLmNvcmUuY29tbWFuZEhhbmRsZXIuZmFpbF0gUGxlYXNlIHJlZ2lzdGVyIGNhbGwgYmFjayBmdW5jdGlvbiBpbiBjcmVhdGlvbiBvcHRpb24uIChjYWxsQmFja1NhdmUgOiBGdW5jdGlvbiknKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLmlzQ2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnRvb2wuc2F2ZSkgY29udGV4dC50b29sLnNhdmUuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdCA6IC8vICdTVFJPTkcnLCAnVScsICdFTScsICdERUwnLCAnU1VCJywgJ1NVUCcuLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBvcHRpb25zLl9kZWZhdWx0Q29tbWFuZFtjb21tYW5kLnRvTG93ZXJDYXNlKCldIHx8IGNvbW1hbmQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbW1hbmRNYXBbY29tbWFuZF0pIHRoaXMuY29tbWFuZE1hcFtjb21tYW5kXSA9IHRhcmdldDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZXNNYXAgPSB0aGlzLl92YXJpYWJsZS5jdXJyZW50Tm9kZXNNYXA7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY21kID0gbm9kZXNNYXAuaW5kZXhPZihjb21tYW5kKSA+IC0xID8gbnVsbCA6IHV0aWwuY3JlYXRlRWxlbWVudChjb21tYW5kKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVtb3ZlTm9kZSA9IGNvbW1hbmQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXlNVQiQvaS50ZXN0KGNvbW1hbmQpICYmIG5vZGVzTWFwLmluZGV4T2YoJ1NVUCcpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZSA9ICdTVVAnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL15TVVAkL2kudGVzdChjb21tYW5kKSAmJiBub2Rlc01hcC5pbmRleE9mKCdTVUInKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUgPSAnU1VCJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZUNoYW5nZShjbWQsIHRoaXMuX2NvbW1hbmRNYXBTdHlsZXNbY29tbWFuZF0gfHwgbnVsbCwgW3JlbW92ZU5vZGVdLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJlbW92ZSBmb3JtYXQgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByYW5nZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlbW92ZUZvcm1hdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGVDaGFuZ2UobnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRoaXMgbWV0aG9kIGltcGxlbWVudHMgaW5kZW50YXRpb24gdG8gc2VsZWN0ZWQgcmFuZ2UuXHJcbiAgICAgICAgICogU2V0dGVkIFwibWFyZ2luLWxlZnRcIiB0byBcIjI1cHhcIiBpbiB0aGUgdG9wIFwiUFwiIHRhZyBvZiB0aGUgcGFyYW1ldGVyIG5vZGUuXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1hbmQgU2VwYXJhdG9yIChcImluZGVudFwiIG9yIFwib3V0ZGVudFwiKVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGluZGVudDogZnVuY3Rpb24gKGNvbW1hbmQpIHtcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlTGluZXMgPSB0aGlzLmdldFNlbGVjdGVkRWxlbWVudHMobnVsbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHNoaWZ0ID0gJ2luZGVudCcgIT09IGNvbW1hbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hcmdpbkRpciA9IG9wdGlvbnMucnRsID8gJ21hcmdpblJpZ2h0JyA6ICdtYXJnaW5MZWZ0JztcclxuICAgICAgICAgICAgbGV0IHNjID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGxldCBlYyA9IHJhbmdlLmVuZENvbnRhaW5lcjtcclxuICAgICAgICAgICAgbGV0IHNvID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgIGxldCBlbyA9IHJhbmdlLmVuZE9mZnNldDtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByYW5nZUxpbmVzLmxlbmd0aCwgZiwgbWFyZ2luOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGYgPSByYW5nZUxpbmVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF1dGlsLmlzTGlzdENlbGwoZikgfHwgIXRoaXMucGx1Z2lucy5saXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luID0gL1xcZCsvLnRlc3QoZi5zdHlsZVttYXJnaW5EaXJdKSA/IHV0aWwuZ2V0TnVtYmVyKGYuc3R5bGVbbWFyZ2luRGlyXSwgMCkgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaGlmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4gLT0gMjU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luICs9IDI1O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnNldFN0eWxlKGYsIG1hcmdpbkRpciwgKG1hcmdpbiA8PSAwID8gJycgOiBtYXJnaW4gKyAncHgnKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaGlmdCB8fCBmLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbHMucHVzaChmKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGxpc3QgY2VsbHNcclxuICAgICAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5saXN0LmVkaXRJbnNpZGVMaXN0LmNhbGwodGhpcywgc2hpZnQsIGNlbGxzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lZmZlY3ROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShzYywgc28sIGVjLCBlbyk7XHJcblxyXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQWRkIG9yIHJlbW92ZSB0aGUgY2xhc3MgbmFtZSBvZiBcImJvZHlcIiBzbyB0aGF0IHRoZSBjb2RlIGJsb2NrIGlzIHZpc2libGVcclxuICAgICAgICAgKi9cclxuICAgICAgICB0b2dnbGVEaXNwbGF5QmxvY2tzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHd5c2l3eWcgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZztcclxuICAgICAgICAgICAgdXRpbC50b2dnbGVDbGFzcyh3eXNpd3lnLCAnc2Utc2hvdy1ibG9jaycpO1xyXG4gICAgICAgICAgICBpZiAodXRpbC5oYXNDbGFzcyh3eXNpd3lnLCAnc2Utc2hvdy1ibG9jaycpKSB7XHJcbiAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKHRoaXMuX3N0eWxlQ29tbWFuZE1hcC5zaG93QmxvY2tzLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKHRoaXMuX3N0eWxlQ29tbWFuZE1hcC5zaG93QmxvY2tzLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcmVzb3VyY2VzU3RhdGVDaGFuZ2UoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2hhbmdlcyB0byBjb2RlIHZpZXcgb3Igd3lzaXd5ZyB2aWV3XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdG9nZ2xlQ29kZVZpZXc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNDb2RlVmlldyA9IHRoaXMuX3ZhcmlhYmxlLmlzQ29kZVZpZXc7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuICAgICAgICAgICAgdXRpbC5zZXREaXNhYmxlZEJ1dHRvbnMoIWlzQ29kZVZpZXcsIHRoaXMuY29kZVZpZXdEaXNhYmxlZEJ1dHRvbnMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzQ29kZVZpZXcpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc05vbkVkaXRhYmxlKGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUpKSB0aGlzLl9zZXRDb2RlRGF0YVRvRWRpdG9yKCk7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuY29kZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5fY29kZU9yaWdpbkNzc1RleHQgPSB0aGlzLl92YXJpYWJsZS5fY29kZU9yaWdpbkNzc1RleHQucmVwbGFjZSgvKFxccz9kaXNwbGF5KFxccyspPzooXFxzKyk/KVthLXpBLVpdKyg/PTspLywgJ2Rpc3BsYXk6IG5vbmUnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhcmlhYmxlLl93eXNpd3lnT3JpZ2luQ3NzVGV4dCA9IHRoaXMuX3ZhcmlhYmxlLl93eXNpd3lnT3JpZ2luQ3NzVGV4dC5yZXBsYWNlKC8oXFxzP2Rpc3BsYXkoXFxzKyk/OihcXHMrKT8pW2EtekEtWl0rKD89OykvLCAnZGlzcGxheTogYmxvY2snKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWlnaHQgPT09ICdhdXRvJyAmJiAhb3B0aW9ucy5jb2RlTWlycm9yRWRpdG9yKSBjb250ZXh0LmVsZW1lbnQuY29kZS5zdHlsZS5oZWlnaHQgPSAnMHB4JztcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5pc0NvZGVWaWV3ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl92YXJpYWJsZS5pc0Z1bGxTY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RIaWRlVG9vbGJhciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgvYmFsbG9vbnxiYWxsb29uLWFsd2F5cy9pLnRlc3Qob3B0aW9ucy5tb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuX2Fycm93LnN0eWxlLmRpc3BsYXkgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNJbmxpbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNCYWxsb29uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX2hpZGVUb29sYmFyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fc3R5bGVDb21tYW5kTWFwLmNvZGVWaWV3LCAnYWN0aXZlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICAgICAgaWYgKCF1dGlsLmlzTm9uRWRpdGFibGUoY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaXN0b3J5Ll9yZXNldENhY2hpbmdCdXR0b24oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldEVkaXRvckRhdGFUb0NvZGVWaWV3KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5fY29kZU9yaWdpbkNzc1RleHQgPSB0aGlzLl92YXJpYWJsZS5fY29kZU9yaWdpbkNzc1RleHQucmVwbGFjZSgvKFxccz9kaXNwbGF5KFxccyspPzooXFxzKyk/KVthLXpBLVpdKyg/PTspLywgJ2Rpc3BsYXk6IGJsb2NrJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5fd3lzaXd5Z09yaWdpbkNzc1RleHQgPSB0aGlzLl92YXJpYWJsZS5fd3lzaXd5Z09yaWdpbkNzc1RleHQucmVwbGFjZSgvKFxccz9kaXNwbGF5KFxccyspPzooXFxzKyk/KVthLXpBLVpdKyg/PTspLywgJ2Rpc3BsYXk6IG5vbmUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFyaWFibGUuaXNGdWxsU2NyZWVuKSBjb250ZXh0LmVsZW1lbnQuY29kZS5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLmhlaWdodCA9PT0gJ2F1dG8nICYmICFvcHRpb25zLmNvZGVNaXJyb3JFZGl0b3IpIGNvbnRleHQuZWxlbWVudC5jb2RlLnN0eWxlLmhlaWdodCA9IGNvbnRleHQuZWxlbWVudC5jb2RlLnNjcm9sbEhlaWdodCA+IDAgPyAoY29udGV4dC5lbGVtZW50LmNvZGUuc2Nyb2xsSGVpZ2h0ICsgJ3B4JykgOiAnYXV0byc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29kZU1pcnJvckVkaXRvcikgb3B0aW9ucy5jb2RlTWlycm9yRWRpdG9yLnJlZnJlc2goKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YXJpYWJsZS5pc0NvZGVWaWV3ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3ZhcmlhYmxlLmlzRnVsbFNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdEhpZGVUb29sYmFyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNCYWxsb29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5fYXJyb3cuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnRvb2xiYXIuc3R5bGUubGVmdCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc0lubGluZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzQmFsbG9vbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5fc2hvd1Rvb2xiYXJJbmxpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX3JhbmdlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKHRoaXMuX3N0eWxlQ29tbWFuZE1hcC5jb2RlVmlldywgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1BsYWNlaG9sZGVyKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmVhZE9ubHkpIHV0aWwuc2V0RGlzYWJsZWRCdXR0b25zKHRydWUsIHRoaXMucmVzaXppbmdEaXNhYmxlZEJ1dHRvbnMpO1xyXG5cclxuICAgICAgICAgICAgLy8gdXNlciBldmVudFxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy50b2dnbGVDb2RlVmlldyA9PT0gJ2Z1bmN0aW9uJykgZnVuY3Rpb25zLnRvZ2dsZUNvZGVWaWV3KHRoaXMuX3ZhcmlhYmxlLmlzQ29kZVZpZXcsIHRoaXMpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0IHRoZSBkYXRhIG9mIHRoZSBjb2RlIHZpZXcgYW5kIHB1dCBpdCBpbiB0aGUgV1lTSVdZRyBhcmVhLlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3NldENvZGVEYXRhVG9FZGl0b3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgY29kZV9odG1sID0gdGhpcy5fZ2V0Q29kZVZpZXcoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmZ1bGxQYWdlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZURvY3VtZW50ID0gdGhpcy5fcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhjb2RlX2h0bWwsICd0ZXh0L2h0bWwnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5fX2FsbG93ZWRTY3JpcHRUYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkQ2hpbGRyZW4gPSBwYXJzZURvY3VtZW50LmhlYWQuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGhlYWRDaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoL15zY3JpcHQkL2kudGVzdChoZWFkQ2hpbGRyZW5baV0udGFnTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRG9jdW1lbnQuaGVhZC5yZW1vdmVDaGlsZChoZWFkQ2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tLCBsZW4tLTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhZGVycyA9IHBhcnNlRG9jdW1lbnQuaGVhZC5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlRG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yKCdsaW5rW3JlbD1cInN0eWxlc2hlZXRcIl0nKSB8fCAodGhpcy5vcHRpb25zLmhlaWdodCA9PT0gJ2F1dG8nICYmICFwYXJzZURvY3VtZW50LmhlYWQucXVlcnlTZWxlY3Rvcignc3R5bGUnKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzICs9IHV0aWwuX3NldElmcmFtZUNzc1RhZ3ModGhpcy5vcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl93ZC5oZWFkLmlubmVySFRNTCA9IGhlYWRlcnM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93ZC5ib2R5LmlubmVySFRNTCA9IHRoaXMuY29udmVydENvbnRlbnRzRm9yRWRpdG9yKHBhcnNlRG9jdW1lbnQuYm9keS5pbm5lckhUTUwpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gcGFyc2VEb2N1bWVudC5ib2R5LmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXR0cnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cnNbaV0ubmFtZSA9PT0gJ2NvbnRlbnRlZGl0YWJsZScpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3dkLmJvZHkuc2V0QXR0cmlidXRlKGF0dHJzW2ldLm5hbWUsIGF0dHJzW2ldLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghdXRpbC5oYXNDbGFzcyh0aGlzLl93ZC5ib2R5LCAnc3VuLWVkaXRvci1lZGl0YWJsZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWRpdGFibGVDbGFzc2VzID0gb3B0aW9ucy5fZWRpdGFibGVDbGFzcy5zcGxpdCgnICcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRpdGFibGVDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3ModGhpcy5fd2QuYm9keSwgb3B0aW9ucy5fZWRpdGFibGVDbGFzc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuaW5uZXJIVE1MID0gY29kZV9odG1sLmxlbmd0aCA+IDAgPyB0aGlzLmNvbnZlcnRDb250ZW50c0ZvckVkaXRvcihjb2RlX2h0bWwpIDogJzwnICsgb3B0aW9ucy5kZWZhdWx0VGFnICsgJz48YnI+PC8nICsgb3B0aW9ucy5kZWZhdWx0VGFnICsgJz4nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnQgdGhlIGRhdGEgb2YgdGhlIFdZU0lXWUcgYXJlYSBhbmQgcHV0IGl0IGluIHRoZSBjb2RlIHZpZXcgYXJlYS5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zZXRFZGl0b3JEYXRhVG9Db2RlVmlldzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlQ29udGVudHMgPSB0aGlzLmNvbnZlcnRIVE1MRm9yQ29kZVZpZXcoY29udGV4dC5lbGVtZW50Lnd5c2l3eWcsIGZhbHNlKTtcclxuICAgICAgICAgICAgbGV0IGNvZGVWYWx1ZSA9ICcnO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZnVsbFBhZ2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gdXRpbC5nZXRBdHRyaWJ1dGVzVG9TdHJpbmcodGhpcy5fd2QuYm9keSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICBjb2RlVmFsdWUgPSAnPCFET0NUWVBFIGh0bWw+XFxuPGh0bWw+XFxuJyArIHRoaXMuX3dkLmhlYWQub3V0ZXJIVE1MLnJlcGxhY2UoLz4oPyFcXG4pL2csICc+XFxuJykgKyAnPGJvZHkgJyArIGF0dHJzICsgJz5cXG4nICsgY29kZUNvbnRlbnRzICsgJzwvYm9keT5cXG48L2h0bWw+JztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvZGVWYWx1ZSA9IGNvZGVDb250ZW50cztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NldENvZGVWaWV3KGNvZGVWYWx1ZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENoYW5nZXMgdG8gZnVsbCBzY3JlZW4gb3IgZGVmYXVsdCBzY3JlZW5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR8bnVsbH0gZWxlbWVudCBmdWxsIHNjcmVlbiBidXR0b25cclxuICAgICAgICAgKi9cclxuICAgICAgICB0b2dnbGVGdWxsU2NyZWVuOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCB0b3BBcmVhID0gY29udGV4dC5lbGVtZW50LnRvcEFyZWE7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvb2xiYXIgPSBjb250ZXh0LmVsZW1lbnQudG9vbGJhcjtcclxuICAgICAgICAgICAgY29uc3QgZWRpdG9yQXJlYSA9IGNvbnRleHQuZWxlbWVudC5lZGl0b3JBcmVhO1xyXG4gICAgICAgICAgICBjb25zdCB3eXNpd3lnRnJhbWUgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lO1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlID0gY29udGV4dC5lbGVtZW50LmNvZGU7XHJcbiAgICAgICAgICAgIGNvbnN0IF92YXIgPSB0aGlzLl92YXJpYWJsZTtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgd2FzVG9vbGJhckhpZGRlbiA9ICh0b29sYmFyLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyB8fCAodGhpcy5faXNJbmxpbmUgJiYgIXRoaXMuX2lubGluZVRvb2xiYXJBdHRyLmlzU2hvdykpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFfdmFyLmlzRnVsbFNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgX3Zhci5pc0Z1bGxTY3JlZW4gPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIF92YXIuX2Z1bGxTY3JlZW5BdHRycy5pbmxpbmUgPSB0aGlzLl9pc0lubGluZTtcclxuICAgICAgICAgICAgICAgIF92YXIuX2Z1bGxTY3JlZW5BdHRycy5iYWxsb29uID0gdGhpcy5faXNCYWxsb29uO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0lubGluZSB8fCB0aGlzLl9pc0JhbGxvb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc0lubGluZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzQmFsbG9vbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghIW9wdGlvbnMudG9vbGJhckNvbnRhaW5lcikgY29udGV4dC5lbGVtZW50LnJlbGF0aXZlLmluc2VydEJlZm9yZSh0b29sYmFyLCBlZGl0b3JBcmVhKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0b3BBcmVhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcclxuICAgICAgICAgICAgICAgIHRvcEFyZWEuc3R5bGUudG9wID0gJzAnO1xyXG4gICAgICAgICAgICAgICAgdG9wQXJlYS5zdHlsZS5sZWZ0ID0gJzAnO1xyXG4gICAgICAgICAgICAgICAgdG9wQXJlYS5zdHlsZS53aWR0aCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgIHRvcEFyZWEuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0b3BBcmVhLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcclxuICAgICAgICAgICAgICAgIHRvcEFyZWEuc3R5bGUuekluZGV4ID0gJzIxNDc0ODM2NDcnO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmVsZW1lbnQuX3N0aWNreUR1bW15LnN0eWxlLmRpc3BsYXkgIT09ICgnbm9uZScgJiYgJycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3Zhci5fZnVsbFNjcmVlbkF0dHJzLnN0aWNreSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Ll9zdGlja3lEdW1teS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3ModG9vbGJhciwgJ3NlLXRvb2xiYXItc3RpY2t5Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgX3Zhci5fYm9keU92ZXJmbG93ID0gX2QuYm9keS5zdHlsZS5vdmVyZmxvdztcclxuICAgICAgICAgICAgICAgIF9kLmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcclxuXHJcbiAgICAgICAgICAgICAgICBfdmFyLl9lZGl0b3JBcmVhT3JpZ2luQ3NzVGV4dCA9IGVkaXRvckFyZWEuc3R5bGUuY3NzVGV4dDtcclxuICAgICAgICAgICAgICAgIF92YXIuX3d5c2l3eWdPcmlnaW5Dc3NUZXh0ID0gd3lzaXd5Z0ZyYW1lLnN0eWxlLmNzc1RleHQ7XHJcbiAgICAgICAgICAgICAgICBfdmFyLl9jb2RlT3JpZ2luQ3NzVGV4dCA9IGNvZGUuc3R5bGUuY3NzVGV4dDtcclxuXHJcbiAgICAgICAgICAgICAgICBlZGl0b3JBcmVhLnN0eWxlLmNzc1RleHQgPSB0b29sYmFyLnN0eWxlLmNzc1RleHQgPSAnJztcclxuICAgICAgICAgICAgICAgIHd5c2l3eWdGcmFtZS5zdHlsZS5jc3NUZXh0ID0gKHd5c2l3eWdGcmFtZS5zdHlsZS5jc3NUZXh0Lm1hdGNoKC9cXHM/ZGlzcGxheShcXHMrKT86KFxccyspP1thLXpBLVpdKzsvKSB8fCBbJyddKVswXSArIG9wdGlvbnMuX2VkaXRvclN0eWxlcy5lZGl0b3I7XHJcbiAgICAgICAgICAgICAgICBjb2RlLnN0eWxlLmNzc1RleHQgPSAoY29kZS5zdHlsZS5jc3NUZXh0Lm1hdGNoKC9cXHM/ZGlzcGxheShcXHMrKT86KFxccyspP1thLXpBLVpdKzsvKSB8fCBbJyddKVswXTtcclxuICAgICAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUud2lkdGggPSB3eXNpd3lnRnJhbWUuc3R5bGUuaGVpZ2h0ID0gY29kZS5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XHJcbiAgICAgICAgICAgICAgICB0b29sYmFyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcclxuICAgICAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgICAgICAgICAgX3Zhci5pbm5lckhlaWdodF9mdWxsU2NyZWVuID0gKF93LmlubmVySGVpZ2h0IC0gdG9vbGJhci5vZmZzZXRIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yQXJlYS5zdHlsZS5oZWlnaHQgPSAoX3Zhci5pbm5lckhlaWdodF9mdWxsU2NyZWVuIC0gb3B0aW9ucy5mdWxsU2NyZWVuT2Zmc2V0KSArICdweCc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHV0aWwuY2hhbmdlRWxlbWVudChlbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLCBpY29ucy5yZWR1Y3Rpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmlmcmFtZSAmJiBvcHRpb25zLmhlaWdodCA9PT0gJ2F1dG8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yQXJlYS5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pZnJhbWVBdXRvSGVpZ2h0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnRvcEFyZWEuc3R5bGUubWFyZ2luVG9wID0gb3B0aW9ucy5mdWxsU2NyZWVuT2Zmc2V0ICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3ModGhpcy5fc3R5bGVDb21tYW5kTWFwLmZ1bGxTY3JlZW4sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF92YXIuaXNGdWxsU2NyZWVuID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgd3lzaXd5Z0ZyYW1lLnN0eWxlLmNzc1RleHQgPSBfdmFyLl93eXNpd3lnT3JpZ2luQ3NzVGV4dDtcclxuICAgICAgICAgICAgICAgIGNvZGUuc3R5bGUuY3NzVGV4dCA9IF92YXIuX2NvZGVPcmlnaW5Dc3NUZXh0O1xyXG4gICAgICAgICAgICAgICAgdG9vbGJhci5zdHlsZS5jc3NUZXh0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICBlZGl0b3JBcmVhLnN0eWxlLmNzc1RleHQgPSBfdmFyLl9lZGl0b3JBcmVhT3JpZ2luQ3NzVGV4dDtcclxuICAgICAgICAgICAgICAgIHRvcEFyZWEuc3R5bGUuY3NzVGV4dCA9IF92YXIuX29yaWdpbkNzc1RleHQ7XHJcbiAgICAgICAgICAgICAgICBfZC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gX3Zhci5fYm9keU92ZXJmbG93O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmhlaWdodCA9PT0gJ2F1dG8nICYmICFvcHRpb25zLmNvZGVNaXJyb3JFZGl0b3IpIGV2ZW50Ll9jb2RlVmlld0F1dG9IZWlnaHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoISFvcHRpb25zLnRvb2xiYXJDb250YWluZXIpIG9wdGlvbnMudG9vbGJhckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0b29sYmFyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdGlja3lUb29sYmFyID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKHRvb2xiYXIsICdzZS10b29sYmFyLXN0aWNreScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfdmFyLl9mdWxsU2NyZWVuQXR0cnMuc3RpY2t5ICYmICFvcHRpb25zLnRvb2xiYXJDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdmFyLl9mdWxsU2NyZWVuQXR0cnMuc3RpY2t5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Ll9zdGlja3lEdW1teS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKHRvb2xiYXIsIFwic2UtdG9vbGJhci1zdGlja3lcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbmxpbmUgPSBfdmFyLl9mdWxsU2NyZWVuQXR0cnMuaW5saW5lO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNCYWxsb29uID0gX3Zhci5fZnVsbFNjcmVlbkF0dHJzLmJhbGxvb247XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNJbmxpbmUpIGV2ZW50Ll9zaG93VG9vbGJhcklubGluZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCEhb3B0aW9ucy50b29sYmFyQ29udGFpbmVyKSB1dGlsLnJlbW92ZUNsYXNzKHRvb2xiYXIsICdzZS10b29sYmFyLWJhbGxvb24nKTtcclxuXHJcbiAgICAgICAgICAgICAgICBldmVudC5vblNjcm9sbF93aW5kb3coKTtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KSB1dGlsLmNoYW5nZUVsZW1lbnQoZWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCwgaWNvbnMuZXhwYW5zaW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQudG9wQXJlYS5zdHlsZS5tYXJnaW5Ub3AgPSAnJztcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fc3R5bGVDb21tYW5kTWFwLmZ1bGxTY3JlZW4sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHdhc1Rvb2xiYXJIaWRkZW4pIGZ1bmN0aW9ucy50b29sYmFyLmhpZGUoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnRcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMudG9nZ2xlRnVsbFNjcmVlbiA9PT0gJ2Z1bmN0aW9uJykgZnVuY3Rpb25zLnRvZ2dsZUZ1bGxTY3JlZW4odGhpcy5fdmFyaWFibGUuaXNGdWxsU2NyZWVuLCB0aGlzKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUHJpbnRzIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBlZGl0b3IuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcHJpbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgaWZyYW1lID0gdXRpbC5jcmVhdGVFbGVtZW50KCdJRlJBTUUnKTtcclxuICAgICAgICAgICAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIF9kLmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzSFRNTCA9IG9wdGlvbnMucHJpbnRUZW1wbGF0ZSA/IG9wdGlvbnMucHJpbnRUZW1wbGF0ZS5yZXBsYWNlKC9cXHtcXHtcXHMqY29udGVudHNcXHMqXFx9XFx9L2ksIHRoaXMuZ2V0Q29udGVudHModHJ1ZSkpIDogdGhpcy5nZXRDb250ZW50cyh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3QgcHJpbnREb2N1bWVudCA9IHV0aWwuZ2V0SWZyYW1lRG9jdW1lbnQoaWZyYW1lKTtcclxuICAgICAgICAgICAgY29uc3Qgd0RvYyA9IHRoaXMuX3dkO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaWZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJ0cyA9IG9wdGlvbnMuX3ByaW50Q2xhc3MgIT09IG51bGwgPyAnY2xhc3M9XCInICsgb3B0aW9ucy5fcHJpbnRDbGFzcyArICdcIicgOiBvcHRpb25zLmZ1bGxQYWdlID8gdXRpbC5nZXRBdHRyaWJ1dGVzVG9TdHJpbmcod0RvYy5ib2R5LCBbJ2NvbnRlbnRlZGl0YWJsZSddKSA6ICdjbGFzcz1cIicgKyBvcHRpb25zLl9lZGl0YWJsZUNsYXNzICsgJ1wiJztcclxuXHJcbiAgICAgICAgICAgICAgICBwcmludERvY3VtZW50LndyaXRlKCcnICtcclxuICAgICAgICAgICAgICAgICAgICAnPCFET0NUWVBFIGh0bWw+PGh0bWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxoZWFkPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIHdEb2MuaGVhZC5pbm5lckhUTUwgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2hlYWQ+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxib2R5ICcgKyBhcnJ0cyArICc+JyArIGNvbnRlbnRzSFRNTCArICc8L2JvZHk+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvaHRtbD4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGlua3MgPSBfZC5oZWFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaW5rJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdHlsZXMgPSBfZC5oZWFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdHlsZScpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGxpbmtIVE1MID0gJyc7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gbGlua3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5rSFRNTCArPSBsaW5rc1tpXS5vdXRlckhUTUw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc3R5bGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlua0hUTUwgKz0gc3R5bGVzW2ldLm91dGVySFRNTDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwcmludERvY3VtZW50LndyaXRlKCcnICtcclxuICAgICAgICAgICAgICAgICAgICAnPCFET0NUWVBFIGh0bWw+PGh0bWw+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxoZWFkPicgK1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmtIVE1MICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9oZWFkPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8Ym9keSBjbGFzcz1cIicgKyAob3B0aW9ucy5fcHJpbnRDbGFzcyAhPT0gbnVsbCA/IG9wdGlvbnMuX3ByaW50Q2xhc3MgOiBvcHRpb25zLl9lZGl0YWJsZUNsYXNzKSArICdcIj4nICsgY29udGVudHNIVE1MICsgJzwvYm9keT4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPC9odG1sPidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgX3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmcmFtZS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIElFIG9yIEVkZ2UsIENocm9taXVtXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNJRV9FZGdlIHx8IHV0aWwuaXNDaHJvbWl1bSB8fCAhIV9kLmRvY3VtZW50TW9kZSB8fCAhIV93LlN0eWxlTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50LmV4ZWNDb21tYW5kKCdwcmludCcsIGZhbHNlLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cucHJpbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyIGJyb3dzZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93LnByaW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignW1NVTkVESVRPUi5jb3JlLnByaW50LmZhaWxdIGVycm9yOiAnICsgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShpZnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gT3BlbiB0aGUgcHJldmlldyB3aW5kb3cuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcHJldmlldzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb3JlLnN1Ym1lbnVPZmYoKTtcclxuICAgICAgICAgICAgY29yZS5jb250YWluZXJPZmYoKTtcclxuICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY29udGVudHNIVE1MID0gb3B0aW9ucy5wcmV2aWV3VGVtcGxhdGUgPyBvcHRpb25zLnByZXZpZXdUZW1wbGF0ZS5yZXBsYWNlKC9cXHtcXHtcXHMqY29udGVudHNcXHMqXFx9XFx9L2ksIHRoaXMuZ2V0Q29udGVudHModHJ1ZSkpIDogdGhpcy5nZXRDb250ZW50cyh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3Qgd2luZG93T2JqZWN0ID0gX3cub3BlbignJywgJ19ibGFuaycpO1xyXG4gICAgICAgICAgICB3aW5kb3dPYmplY3QubWltZVR5cGUgPSAndGV4dC9odG1sJztcclxuICAgICAgICAgICAgY29uc3Qgd0RvYyA9IHRoaXMuX3dkO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaWZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJ0cyA9IG9wdGlvbnMuX3ByaW50Q2xhc3MgIT09IG51bGwgPyAnY2xhc3M9XCInICsgb3B0aW9ucy5fcHJpbnRDbGFzcyArICdcIicgOiBvcHRpb25zLmZ1bGxQYWdlID8gdXRpbC5nZXRBdHRyaWJ1dGVzVG9TdHJpbmcod0RvYy5ib2R5LCBbJ2NvbnRlbnRlZGl0YWJsZSddKSA6ICdjbGFzcz1cIicgKyBvcHRpb25zLl9lZGl0YWJsZUNsYXNzICsgJ1wiJztcclxuXHJcbiAgICAgICAgICAgICAgICB3aW5kb3dPYmplY3QuZG9jdW1lbnQud3JpdGUoJycgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8IURPQ1RZUEUgaHRtbD48aHRtbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGhlYWQ+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgd0RvYy5oZWFkLmlubmVySFRNTCArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxzdHlsZT5ib2R5IHtvdmVyZmxvdzphdXRvICFpbXBvcnRhbnQ7IG1hcmdpbjogMTBweCBhdXRvICFpbXBvcnRhbnQ7IGhlaWdodDphdXRvICFpbXBvcnRhbnQ7IG91dGxpbmU6MXB4IGRhc2hlZCAjY2NjO308L3N0eWxlPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2hlYWQ+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxib2R5ICcgKyBhcnJ0cyArICc+JyArIGNvbnRlbnRzSFRNTCArICc8L2JvZHk+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvaHRtbD4nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGlua3MgPSBfZC5oZWFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaW5rJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdHlsZXMgPSBfZC5oZWFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdHlsZScpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGxpbmtIVE1MID0gJyc7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gbGlua3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5rSFRNTCArPSBsaW5rc1tpXS5vdXRlckhUTUw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc3R5bGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlua0hUTUwgKz0gc3R5bGVzW2ldLm91dGVySFRNTDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB3aW5kb3dPYmplY3QuZG9jdW1lbnQud3JpdGUoJycgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8IURPQ1RZUEUgaHRtbD48aHRtbD4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGhlYWQ+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiIC8+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSwgbWF4aW11bS1zY2FsZT0xXCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzx0aXRsZT4nICsgbGFuZy50b29sYmFyLnByZXZpZXcgKyAnPC90aXRsZT4nICtcclxuICAgICAgICAgICAgICAgICAgICBsaW5rSFRNTCArXHJcbiAgICAgICAgICAgICAgICAgICAgJzwvaGVhZD4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJvZHkgY2xhc3M9XCInICsgKG9wdGlvbnMuX3ByaW50Q2xhc3MgIT09IG51bGwgPyBvcHRpb25zLl9wcmludENsYXNzIDogb3B0aW9ucy5fZWRpdGFibGVDbGFzcykgKyAnXCIgc3R5bGU9XCJtYXJnaW46MTBweCBhdXRvICFpbXBvcnRhbnQ7IGhlaWdodDphdXRvICFpbXBvcnRhbnQ7IG91dGxpbmU6MXB4IGRhc2hlZCAjY2NjO1wiPicgKyBjb250ZW50c0hUTUwgKyAnPC9ib2R5PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8L2h0bWw+J1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTZXQgZGlyZWN0aW9uIHRvIFwicnRsXCIgb3IgXCJsdHJcIi5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGlyIFwicnRsXCIgb3IgXCJsdHJcIlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNldERpcjogZnVuY3Rpb24gKGRpcikge1xyXG4gICAgICAgICAgICBjb25zdCBydGwgPSBkaXIgPT09ICdydGwnO1xyXG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VEaXIgPSB0aGlzLl9wcmV2UnRsICE9PSBydGw7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXZSdGwgPSBvcHRpb25zLnJ0bCA9IHJ0bDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaGFuZ2VEaXIpIHtcclxuICAgICAgICAgICAgICAgIC8vIGFsaWduIGJ1dHRvbnNcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBsdWdpbnMuYWxpZ24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMuYWxpZ24uZXhjaGFuZ2VEaXIuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGluZGVudCBidXR0b25zXHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC50b29sLmluZGVudCkgdXRpbC5jaGFuZ2VFbGVtZW50KGNvbnRleHQudG9vbC5pbmRlbnQuZmlyc3RFbGVtZW50Q2hpbGQsIGljb25zLmluZGVudCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC50b29sLm91dGRlbnQpIHV0aWwuY2hhbmdlRWxlbWVudChjb250ZXh0LnRvb2wub3V0ZGVudC5maXJzdEVsZW1lbnRDaGlsZCwgaWNvbnMub3V0ZGVudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGVsID0gY29udGV4dC5lbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAocnRsKSB7XHJcbiAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKGVsLnRvcEFyZWEsICdzZS1ydGwnKTtcclxuICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoZWwud3lzaXd5Z0ZyYW1lLCAnc2UtcnRsJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKGVsLnRvcEFyZWEsICdzZS1ydGwnKTtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3MoZWwud3lzaXd5Z0ZyYW1lLCAnc2UtcnRsJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmVOb2RlcyA9IHV0aWwuZ2V0TGlzdENoaWxkcmVuKGVsLnd5c2l3eWcsIGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdXRpbC5pc0Zvcm1hdEVsZW1lbnQoY3VycmVudCkgJiYgKGN1cnJlbnQuc3R5bGUubWFyZ2luUmlnaHQgfHwgY3VycmVudC5zdHlsZS5tYXJnaW5MZWZ0IHx8IGN1cnJlbnQuc3R5bGUudGV4dEFsaWduKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gbGluZU5vZGVzLmxlbmd0aCwgbiwgbCwgcjsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBuID0gbGluZU5vZGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5kZW50IG1hcmdpblxyXG4gICAgICAgICAgICAgICAgciA9IG4uc3R5bGUubWFyZ2luUmlnaHQ7XHJcbiAgICAgICAgICAgICAgICBsID0gbi5zdHlsZS5tYXJnaW5MZWZ0O1xyXG4gICAgICAgICAgICAgICAgaWYgKHIgfHwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG4uc3R5bGUubWFyZ2luUmlnaHQgPSBsO1xyXG4gICAgICAgICAgICAgICAgICAgIG4uc3R5bGUubWFyZ2luTGVmdCA9IHI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyB0ZXh0IGFsaWduXHJcbiAgICAgICAgICAgICAgICByID0gbi5zdHlsZS50ZXh0QWxpZ247XHJcbiAgICAgICAgICAgICAgICBpZiAociA9PT0gJ2xlZnQnKSBuLnN0eWxlLnRleHRBbGlnbiA9ICdyaWdodCc7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyID09PSAncmlnaHQnKSBuLnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdG9vbCA9IGNvbnRleHQudG9vbDtcclxuICAgICAgICAgICAgaWYgKHRvb2wuZGlyKSB7XHJcbiAgICAgICAgICAgICAgICB1dGlsLmNoYW5nZVR4dCh0b29sLmRpci5xdWVyeVNlbGVjdG9yKCcuc2UtdG9vbHRpcC10ZXh0JyksIGxhbmcudG9vbGJhcltvcHRpb25zLnJ0bCA/ICdkaXJfbHRyJyA6ICdkaXJfcnRsJ10pO1xyXG4gICAgICAgICAgICAgICAgdXRpbC5jaGFuZ2VFbGVtZW50KHRvb2wuZGlyLmZpcnN0RWxlbWVudENoaWxkLCBpY29uc1tvcHRpb25zLnJ0bCA/ICdkaXJfbHRyJyA6ICdkaXJfcnRsJ10pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodG9vbC5kaXJfbHRyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocnRsKSB1dGlsLnJlbW92ZUNsYXNzKHRvb2wuZGlyX2x0ciwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB1dGlsLmFkZENsYXNzKHRvb2wuZGlyX2x0ciwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodG9vbC5kaXJfcnRsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocnRsKSB1dGlsLmFkZENsYXNzKHRvb2wuZGlyX3J0bCwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB1dGlsLnJlbW92ZUNsYXNzKHRvb2wuZGlyX3J0bCwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIEhUTUwgc3RyaW5nXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfSBodG1sIEhUTUwgc3RyaW5nXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0Q29udGVudHM6IGZ1bmN0aW9uIChodG1sKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUmFuZ2UoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IChodG1sID09PSBudWxsIHx8IGh0bWwgPT09IHVuZGVmaW5lZCkgPyAnJyA6IHRoaXMuY29udmVydENvbnRlbnRzRm9yRWRpdG9yKGh0bWwsIG51bGwsIG51bGwpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3ZhcmlhYmxlLmlzQ29kZVZpZXcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC53eXNpd3lnLmlubmVySFRNTCA9IGNvbnZlcnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0Q29tcG9uZW50cygpO1xyXG4gICAgICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnZlcnRIVE1MRm9yQ29kZVZpZXcoY29udmVydFZhbHVlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRDb2RlVmlldyh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgY29udGVudHMgb2YgdGhlIGlmcmFtZSdzIGhlYWQgdGFnIGFuZCBib2R5IHRhZyB3aGVuIHVzaW5nIHRoZSBcImlmcmFtZVwiIG9yIFwiZnVsbFBhZ2VcIiBvcHRpb24uXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGN0eCB7IGhlYWQ6IEhUTUwgc3RyaW5nLCBib2R5OiBIVE1MIHN0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBzZXRJZnJhbWVDb250ZW50czogZnVuY3Rpb24gKGN0eCkge1xyXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuaWZyYW1lKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChjdHguaGVhZCkgdGhpcy5fd2QuaGVhZC5pbm5lckhUTUwgPSB0aGlzLm9wdGlvbnMuX19hbGxvd2VkU2NyaXB0VGFnID8gY3R4LmhlYWQgOiBjdHguaGVhZC5yZXBsYWNlKHRoaXMuX19zY3JpcHRUYWdSZWdFeHAsICcnKTtcclxuICAgICAgICAgICAgaWYgKGN0eC5ib2R5KSB0aGlzLl93ZC5ib2R5LmlubmVySFRNTCA9IHRoaXMuY29udmVydENvbnRlbnRzRm9yRWRpdG9yKGN0eC5ib2R5KTtcclxuICAgICAgICAgICAgdGhpcy5fcmVzZXRDb21wb25lbnRzKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGN1cnJlbnQgY29udGVudHNcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IG9ubHlDb250ZW50cyBSZXR1cm4gb25seSB0aGUgY29udGVudHMgb2YgdGhlIGJvZHkgd2l0aG91dCBoZWFkZXJzIHdoZW4gdGhlIFwiZnVsbFBhZ2VcIiBvcHRpb24gaXMgdHJ1ZVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0Q29udGVudHM6IGZ1bmN0aW9uIChvbmx5Q29udGVudHMpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSB0aGlzLmNsZWFuSFRNTChjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5pbm5lckhUTUwsIG51bGwsIG51bGwpO1xyXG4gICAgICAgICAgICBjb25zdCByZW5kZXJIVE1MID0gdXRpbC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgICAgICAgcmVuZGVySFRNTC5pbm5lckhUTUwgPSBjb250ZW50cztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGVkaXRhYmxlRWxzID0gdXRpbC5nZXRMaXN0Q2hpbGRyZW4ocmVuZGVySFRNTCwgZnVuY3Rpb24gKGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50Lmhhc0F0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGVkaXRhYmxlRWxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBlZGl0YWJsZUVsc1tpXS5yZW1vdmVBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5mdWxsUGFnZSAmJiAhb25seUNvbnRlbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRycyA9IHV0aWwuZ2V0QXR0cmlidXRlc1RvU3RyaW5nKHRoaXMuX3dkLmJvZHksIFsnY29udGVudGVkaXRhYmxlJ10pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICc8IURPQ1RZUEUgaHRtbD48aHRtbD4nICsgdGhpcy5fd2QuaGVhZC5vdXRlckhUTUwgKyAnPGJvZHkgJyArIGF0dHJzICsgJz4nICsgcmVuZGVySFRNTC5pbm5lckhUTUwgKyAnPC9ib2R5PjwvaHRtbD4nO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlckhUTUwuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGN1cnJlbnQgY29udGVudHMgd2l0aCBjb250YWluaW5nIHBhcmVudCBkaXYoZGl2LnN1bi1lZGl0b3ItZWRpdGFibGUpLlxyXG4gICAgICAgICAqIDxkaXYgY2xhc3M9XCJzdW4tZWRpdG9yLWVkaXRhYmxlXCI+e2NvbnRlbnRzfTwvZGl2PlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gb25seUNvbnRlbnRzIFJldHVybiBvbmx5IHRoZSBjb250ZW50cyBvZiB0aGUgYm9keSB3aXRob3V0IGhlYWRlcnMgd2hlbiB0aGUgXCJmdWxsUGFnZVwiIG9wdGlvbiBpcyB0cnVlXHJcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRGdWxsQ29udGVudHM6IGZ1bmN0aW9uIChvbmx5Q29udGVudHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPVwic3VuLWVkaXRvci1lZGl0YWJsZScgKyAob3B0aW9ucy5ydGwgPyAnIHNlLXJ0bCcgOiAnJykgKyAnXCI+JyArIHRoaXMuZ2V0Q29udGVudHMob25seUNvbnRlbnRzKSArICc8L2Rpdj4nO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIEhUTUwgc3RyaW5nIGFjY29yZGluZyB0byB0YWcgdHlwZSBhbmQgY29uZmlndXJhdGlvbi5cclxuICAgICAgICAgKiBVc2Ugb25seSBcImNsZWFuSFRNTFwiXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBub2RlIE5vZGVcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlcXVpcmVGb3JtYXQgSWYgdHJ1ZSwgdGV4dCBub2RlcyB0aGF0IGRvIG5vdCBoYXZlIGEgZm9ybWF0IG5vZGUgaXMgd3JhcHBlZCB3aXRoIHRoZSBmb3JtYXQgdGFnLlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX21ha2VMaW5lOiBmdW5jdGlvbiAobm9kZSwgcmVxdWlyZUZvcm1hdCkge1xyXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VGFnID0gb3B0aW9ucy5kZWZhdWx0VGFnO1xyXG4gICAgICAgICAgICAvLyBlbGVtZW50XHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2Rpc2FsbG93ZWRUYWdOYW1lUmVnRXhwLnRlc3Qobm9kZS5ub2RlTmFtZSkpIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgIGlmICgvX19zZV9fdGFnLy50ZXN0KG5vZGUuY2xhc3NOYW1lKSkgcmV0dXJuIG5vZGUub3V0ZXJIVE1MO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoID0gdXRpbC5nZXRMaXN0Q2hpbGROb2Rlcyhub2RlLCBmdW5jdGlvbihjdXJyZW50KSB7IHJldHVybiB1dGlsLmlzU3BhbldpdGhvdXRBdHRyKGN1cnJlbnQpICYmICF1dGlsLmdldFBhcmVudEVsZW1lbnQoY3VycmVudCwgdXRpbC5pc05vdENoZWNraW5nTm9kZSk7IH0pIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNoLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hbaV0ub3V0ZXJIVE1MID0gY2hbaV0uaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghcmVxdWlyZUZvcm1hdCB8fCAodXRpbC5pc0Zvcm1hdEVsZW1lbnQobm9kZSkgfHwgdXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChub2RlKSB8fCB1dGlsLmlzQ29tcG9uZW50KG5vZGUpIHx8IHV0aWwuaXNGaWd1cmVzKG5vZGUpIHx8ICh1dGlsLmlzQW5jaG9yKG5vZGUpICYmIHV0aWwuaXNNZWRpYShub2RlLmZpcnN0RWxlbWVudENoaWxkKSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHV0aWwuaXNTcGFuV2l0aG91dEF0dHIobm9kZSkgPyBub2RlLmlubmVySFRNTCA6IG5vZGUub3V0ZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzwnICsgZGVmYXVsdFRhZyArICc+JyArICh1dGlsLmlzU3BhbldpdGhvdXRBdHRyKG5vZGUpID8gbm9kZS5pbm5lckhUTUwgOiBub2RlLm91dGVySFRNTCkgKyAnPC8nICsgZGVmYXVsdFRhZyArICc+JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyB0ZXh0XHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlcXVpcmVGb3JtYXQpIHJldHVybiB1dGlsLl9IVE1MQ29udmVydG9yKG5vZGUudGV4dENvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dEFycmF5ID0gbm9kZS50ZXh0Q29udGVudC5zcGxpdCgvXFxuL2cpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSAnJztcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCB0TGVuID0gdGV4dEFycmF5Lmxlbmd0aCwgdGV4dDsgaSA8IHRMZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0QXJyYXlbaV0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDApIGh0bWwgKz0gJzwnICsgZGVmYXVsdFRhZyArICc+JyArIHV0aWwuX0hUTUxDb252ZXJ0b3IodGV4dCkgKyAnPC8nICsgZGVmYXVsdFRhZyArICc+JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNvbW1lbnRzXHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSA4ICYmIHRoaXMuX2FsbG93SFRNTENvbW1lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJzwhLS0nICsgbm9kZS50ZXh0Q29udGVudC50cmltKCkgKyAnLS0+JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIGF0dHJpYnV0ZSB2YWx1ZXMgc3VjaCBhcyBzdHlsZSBhbmQgY29udmVydHMgdGFncyB0aGF0IGRvIG5vdCBjb25mb3JtIHRvIHRoZSBcImh0bWw1XCIgc3RhbmRhcmQuXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgXHJcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ30gSFRNTCBzdHJpbmdcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF90YWdDb252ZXJ0b3I6IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fZGlzYWxsb3dlZFRleHRUYWdzUmVnRXhwKSByZXR1cm4gdGV4dDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGVjID0gb3B0aW9ucy5fdGV4dFRhZ3NNYXA7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UodGhpcy5fZGlzYWxsb3dlZFRleHRUYWdzUmVnRXhwLCBmdW5jdGlvbiAobSwgdCwgbiwgcCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQgKyAodHlwZW9mIGVjW25dID09PSAnc3RyaW5nJyA/IGVjW25dIDogbikgKyAocCA/ICcgJyArIHAgOiAnJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBEZWxldGUgZGlzYWxsb3dlZCB0YWdzXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgSFRNTCBzdHJpbmdcclxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2RlbGV0ZURpc2FsbG93ZWRUYWdzOiBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgICAgICAgICBodG1sID0gaHRtbFxyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UodGhpcy5fX2Rpc2FsbG93ZWRUYWdzUmVnRXhwLCAnJylcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88W2EtejAtOV0rXFw6W2EtejAtOV0rW14+XlxcL10qPltePl0qPFxcL1thLXowLTldK1xcOlthLXowLTldKz4vZ2ksICcnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghL1xcYmZvbnRcXGIvaS50ZXN0KHRoaXMub3B0aW9ucy5fZWRpdG9yVGFnc1doaXRlbGlzdCkpIHtcclxuICAgICAgICAgICAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLyg8XFwvPylmb250KFxccz8pL2dpLCAnJDFzcGFuJDInKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZSh0aGlzLmVkaXRvclRhZ3NXaGl0ZWxpc3RSZWdFeHAsICcnKS5yZXBsYWNlKHRoaXMuZWRpdG9yVGFnc0JsYWNrbGlzdFJlZ0V4cCwgJycpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9jb252ZXJ0Rm9udFNpemU6IGZ1bmN0aW9uICh0bywgc2l6ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBtYXRoID0gdGhpcy5fdy5NYXRoO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNpemUubWF0Y2goLyhcXGQrKD86XFwuXFxkKyk/KSguKykvKTtcclxuICAgICAgICAgICAgY29uc3Qgc2l6ZU51bSA9IHZhbHVlID8gdmFsdWVbMV0gKiAxIDogdXRpbC5mb250VmFsdWVNYXBbc2l6ZV07XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb20gPSB2YWx1ZSA/IHZhbHVlWzJdIDogJ3JlbSc7XHJcbiAgICAgICAgICAgIGxldCBweFNpemUgPSBzaXplTnVtO1xyXG5cclxuICAgICAgICAgICAgaWYgKC9lbS8udGVzdChmcm9tKSkge1xyXG4gICAgICAgICAgICAgICAgcHhTaXplID0gbWF0aC5yb3VuZChzaXplTnVtIC8gMC4wNjI1KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcm9tID09PSAncHQnKSB7XHJcbiAgICAgICAgICAgICAgICBweFNpemUgPSBtYXRoLnJvdW5kKHNpemVOdW0gKiAxLjMzMyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZnJvbSA9PT0gJyUnKSB7XHJcbiAgICAgICAgICAgICAgICBweFNpemUgPSBzaXplTnVtIC8gMTAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKHRvKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdlbSc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdyZW0nOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnJSc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChweFNpemUgKiAwLjA2MjUpLnRvRml4ZWQoMikgKyB0bztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3B0JzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0aC5yb3VuZChweFNpemUgLyAxLjMzMykgKyB0bztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIHB4XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB4U2l6ZSArIHRvO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2NsZWFuU3R5bGU6IGZ1bmN0aW9uIChtLCB2LCBuYW1lKSB7XHJcbiAgICAgICAgICAgIGxldCBzdiA9IChtLm1hdGNoKC9zdHlsZVxccyo9XFxzKig/OlwifCcpW15cIiddKig/OlwifCcpLykgfHwgW10pWzBdO1xyXG4gICAgICAgICAgICBpZiAoL3NwYW4vaS50ZXN0KG5hbWUpICYmICFzdiAmJiAobS5tYXRjaCgvPFteXFxzXStcXHMoLispLykgfHwgW10pWzFdKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzaXplID0gKG0ubWF0Y2goL1xcc3NpemU9XCIoW15cIl0rKVwiL2kpIHx8IFtdKVsxXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhY2UgPSAobS5tYXRjaCgvXFxzZmFjZT1cIihbXlwiXSspXCIvaSkgfHwgW10pWzFdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSAobS5tYXRjaCgvXFxzY29sb3I9XCIoW15cIl0rKVwiL2kpIHx8IFtdKVsxXTtcclxuICAgICAgICAgICAgICAgIGlmIChzaXplIHx8IGZhY2UgfHwgY29sb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdiA9ICdzdHlsZT1cIicgKyAoc2l6ZSA/ICdmb250LXNpemU6JyArICh0aGlzLnV0aWwuZ2V0TnVtYmVyKHNpemUvMy4zMzMsIDEpKSArICdyZW07JyA6ICcnKSArIChmYWNlID8gJ2ZvbnQtZmFtaWx5OicgKyBmYWNlICsgJzsnIDogJycpICsgKGNvbG9yID8gJ2NvbG9yOicgKyBjb2xvciArICc7JyA6ICcnKSArICdcIic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF2KSB2ID0gW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IHN2LnJlcGxhY2UoLyZxdW90Oy9nLCAnJykubWF0Y2godGhpcy5fY2xlYW5TdHlsZVJlZ0V4cFtuYW1lXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3R5bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxvd2VkU3R5bGUgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc3R5bGUubGVuZ3RoLCByOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0eWxlW2ldLm1hdGNoKC8oW2EtekEtWjAtOS1dKykoOikoW15cIiddKykvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgJiYgIS9pbmhlcml0fGluaXRpYWx8cmV2ZXJ0fHVuc2V0L2kudGVzdChyWzNdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgayA9IHV0aWwua2ViYWJUb0NhbWVsQ2FzZShyWzFdLnRyaW0oKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gdGhpcy53d0NvbXB1dGVkU3R5bGVba10gPyB0aGlzLnd3Q29tcHV0ZWRTdHlsZVtrXS5yZXBsYWNlKC9cIi9nLCAnJykgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGMgPSByWzNdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZvbnRGYW1pbHknOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucGx1Z2lucy5mb250IHx8IG9wdGlvbnMuZm9udC5pbmRleE9mKGMpID09PSAtMSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZvbnRTaXplJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnBsdWdpbnMuZm9udFNpemUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NsZWFuU3R5bGVSZWdFeHAuZm9udFNpemVVbml0LnRlc3QoclswXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbMF0gPSByWzBdLnJlcGxhY2UoKHJbMF0ubWF0Y2goLzpcXHMqKFteO10rKS8pIHx8IFtdKVsxXSwgdGhpcy5fY29udmVydEZvbnRTaXplLmJpbmQodGhpcywgb3B0aW9ucy5mb250U2l6ZVVuaXQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjb2xvcic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5wbHVnaW5zLmZvbnRDb2xvciB8fCAvcmdiYVxcKChbMC05XStcXHMqLFxccyopezN9MFxcKXx3aW5kb3d0ZXh0L2kudGVzdChjKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JhY2tncm91bmRDb2xvcic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5wbHVnaW5zLmhpbGl0ZUNvbG9yIHx8IC9yZ2JhXFwoKFswLTldK1xccyosXFxzKil7M30wXFwpfHdpbmRvd3RleHQvaS50ZXN0KGMpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IGMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkU3R5bGUucHVzaChyWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dlZFN0eWxlLmxlbmd0aCA+IDApIHYucHVzaCgnc3R5bGU9XCInICsgYWxsb3dlZFN0eWxlLmpvaW4oJzsnKSArICdcIicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gVGFnIGFuZCB0YWcgYXR0cmlidXRlIGNoZWNrIFJlZ0V4cCBmdW5jdGlvbi4gKHVzZWQgYnkgXCJjbGVhbkhUTUxcIiBhbmQgXCJjb252ZXJ0Q29udGVudHNGb3JFZGl0b3JcIilcclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGxvd0xldmVsQ2hlY2sgUm93IGxldmVsIGNoZWNrXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG0gUmVnRXhwIHZhbHVlXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHQgUmVnRXhwIHZhbHVlXHJcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9jbGVhblRhZ3M6IGZ1bmN0aW9uIChsb3dMZXZlbENoZWNrLCBtLCB0KSB7XHJcbiAgICAgICAgICAgIGlmICgvXjxbYS16MC05XStcXDpbYS16MC05XSsvaS50ZXN0KG0pKSByZXR1cm4gbTtcclxuXHJcbiAgICAgICAgICAgIGxldCB2ID0gbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgdGFnTmFtZSA9IHQubWF0Y2goLyg/ITwpW2EtekEtWjAtOVxcLV0rLylbMF0udG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGJsYWNrbGlzdFxyXG4gICAgICAgICAgICBjb25zdCBiQXR0ciA9IHRoaXMuX2F0dHJpYnV0ZXNUYWdzQmxhY2tsaXN0W3RhZ05hbWVdO1xyXG4gICAgICAgICAgICBtID0gbS5yZXBsYWNlKC9cXHMoPzpvblthLXpdKylcXHMqPVxccyooXCIpW15cIl0qXFwxL2lnLCAnJyk7XHJcbiAgICAgICAgICAgIGlmIChiQXR0cikgbSA9IG0ucmVwbGFjZShiQXR0ciwgJycpO1xyXG4gICAgICAgICAgICBlbHNlIG0gPSBtLnJlcGxhY2UodGhpcy5fYXR0cmlidXRlc0JsYWNrbGlzdFJlZ0V4cCwgJycpO1xyXG5cclxuICAgICAgICAgICAgLy8gd2hpdGVsaXN0XHJcbiAgICAgICAgICAgIGNvbnN0IHdBdHRyID0gdGhpcy5fYXR0cmlidXRlc1RhZ3NXaGl0ZWxpc3RbdGFnTmFtZV07XHJcbiAgICAgICAgICAgIGlmICh3QXR0cikgdiA9IG0ubWF0Y2god0F0dHIpO1xyXG4gICAgICAgICAgICBlbHNlIHYgPSBtLm1hdGNoKGxvd0xldmVsQ2hlY2sgPyB0aGlzLl9hdHRyaWJ1dGVzV2hpdGVsaXN0UmVnRXhwIDogdGhpcy5fYXR0cmlidXRlc1doaXRlbGlzdFJlZ0V4cF9hbGxfZGF0YSk7XHJcblxyXG4gICAgICAgICAgICAvLyBhdHRyaWJ1dGVcclxuICAgICAgICAgICAgaWYgKGxvd0xldmVsQ2hlY2sgfHwgdGFnTmFtZSA9PT0gJ3NwYW4nIHx8IHRhZ05hbWUgPT09ICdsaScgfHwgIHRoaXMuX2NsZWFuU3R5bGVSZWdFeHBbdGFnTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIGlmICh0YWdOYW1lID09PSAnYScpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdiA9IG0ubWF0Y2goLyg/Oig/OmlkfG5hbWUpXFxzKj1cXHMqKD86XCJ8JylbXlwiJ10qKD86XCJ8JykpL2cpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXYpIHYgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdi5wdXNoKHN2WzBdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF2IHx8ICEvc3R5bGU9L2kudGVzdCh2LnRvU3RyaW5nKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhZ05hbWUgPT09ICdzcGFuJyB8fCB0YWdOYW1lID09PSAnbGknKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB0aGlzLl9jbGVhblN0eWxlKG0sIHYsICdzcGFuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBpZiAodGhpcy5fY2xlYW5TdHlsZVJlZ0V4cFt0YWdOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gdGhpcy5fY2xlYW5TdHlsZShtLCB2LCB0YWdOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9eKFB8RElWfEhbMS02XXxQUkUpJC9pLnRlc3QodGFnTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHRoaXMuX2NsZWFuU3R5bGUobSwgdiwgJ2Zvcm1hdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN2ID0gbS5tYXRjaCgvc3R5bGVcXHMqPVxccyooPzpcInwnKVteXCInXSooPzpcInwnKS8pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN2ICYmICF2KSB2ID0gW3N2WzBdXTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN2ICYmICF2LnNvbWUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIC9ec3R5bGUvLnRlc3Qodi50cmltKCkpOyB9KSkgdi5wdXNoKHN2WzBdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gZmlndXJlXHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzRmlndXJlcyh0YWdOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3YgPSBtLm1hdGNoKC9zdHlsZVxccyo9XFxzKig/OlwifCcpW15cIiddKig/OlwifCcpLyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXYpIHYgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmIChzdikgdi5wdXNoKHN2WzBdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB2Lmxlbmd0aCwgYTsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGxvd0xldmVsQ2hlY2sgJiYgL15jbGFzcz1cIig/IShfX3NlX198c2UtfGthdGV4KSkvLnRlc3QodltpXS50cmltKCkpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBhID0gKC9eKD86aHJlZnxzcmMpXFxzKj1cXHMqKCd8XCJ8XFxzKSpqYXZhc2NyaXB0XFxzKlxcOi9pLnRlc3QodltpXS50cmltKCkpID8gJycgOiB2W2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB0ICs9ICgvXlxccy8udGVzdChhKSA/ICcnIDogJyAnKSArIGE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmVzIGlmIGZvcm1hdHRpbmcgaXMgcmVxdWlyZWQgYW5kIHJldHVybnMgYSBkb21UcmVlXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBkb20gZG9jdW1lbnRGcmFnbWVudFxyXG4gICAgICAgICAqIEByZXR1cm5zIHtFbGVtZW50fVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2VkaXRGb3JtYXQ6IGZ1bmN0aW9uIChkb20pIHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gJycsIGY7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXBUcmVlID0gZG9tLmNoaWxkTm9kZXM7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGVtcFRyZWUubGVuZ3RoLCBuOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG4gPSB0ZW1wVHJlZVtpXTtcclxuICAgICAgICAgICAgICAgIGlmICAobi5ub2RlVHlwZSA9PT0gOCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICc8IS0tICcgKyBuLnRleHRDb250ZW50ICsgJyAtLT4nO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdXRpbC5pc0Zvcm1hdEVsZW1lbnQobikgJiYgIXV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQobikgJiYgIXV0aWwuaXNDb21wb25lbnQobikgJiYgIS9tZXRhL2kudGVzdChuLm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZikgZiA9IHV0aWwuY3JlYXRlRWxlbWVudChvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzVGV4dFN0eWxlRWxlbWVudChuKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAobikucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmLmFwcGVuZENoaWxkKG4pO1xyXG4gICAgICAgICAgICAgICAgICAgIGktLTsgbGVuLS07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGYub3V0ZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gbi5vdXRlckhUTUw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChmKSB2YWx1ZSArPSBmLm91dGVySFRNTDtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBfZC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh2YWx1ZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2NvbnZlcnRMaXN0Q2VsbDogZnVuY3Rpb24gKGRvbVRyZWUpIHtcclxuICAgICAgICAgICAgbGV0IGh0bWwgPSAnJztcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBkb21UcmVlLmxlbmd0aCwgbm9kZTsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlID0gZG9tVHJlZVtpXTtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0KG5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gbm9kZS5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1dGlsLmlzTGlzdENlbGwobm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSBub2RlLm91dGVySFRNTDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KG5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxsaT4nICsobm9kZS5pbm5lckhUTUwudHJpbSgpIHx8ICc8YnI+JykgKyAnPC9saT4nO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChub2RlKSAmJiAhdXRpbC5pc1RhYmxlKG5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gdGhpcy5fY29udmVydExpc3RDZWxsKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxsaT4nICsgbm9kZS5vdXRlckhUTUwgKyAnPC9saT4nO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPGxpPicgKyAobm9kZS50ZXh0Q29udGVudCB8fCAnPGJyPicpICsgJzwvbGk+JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGh0bWw7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2lzRm9ybWF0RGF0YTogZnVuY3Rpb24gKGRvbVRyZWUpIHtcclxuICAgICAgICAgICAgbGV0IHJlcXVpcmVGb3JtYXQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBkb21UcmVlLmxlbmd0aCwgdDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0ID0gZG9tVHJlZVtpXTtcclxuICAgICAgICAgICAgICAgIGlmICh0Lm5vZGVUeXBlID09PSAxICYmICF1dGlsLmlzVGV4dFN0eWxlRWxlbWVudCh0KSAmJiAhdXRpbC5pc0JyZWFrKHQpICYmICF0aGlzLl9fZGlzYWxsb3dlZFRhZ05hbWVSZWdFeHAudGVzdCh0Lm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVGb3JtYXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZUZvcm1hdDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgY2xlYW4gSFRNTCBjb2RlIGZvciBlZGl0b3JcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gaHRtbCBIVE1MIHN0cmluZ1xyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cHxudWxsfSB3aGl0ZWxpc3QgUmVndWxhciBleHByZXNzaW9uIG9mIGFsbG93ZWQgdGFncy5cclxuICAgICAgICAgKiBSZWdFeHAgb2JqZWN0IGlzIGNyZWF0ZSBieSB1dGlsLmNyZWF0ZVRhZ3NXaGl0ZWxpc3QgbWV0aG9kLiAoY29yZS5wYXN0ZVRhZ3NXaGl0ZWxpc3RSZWdFeHApXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfG51bGx9IGJsYWNrbGlzdCBSZWd1bGFyIGV4cHJlc3Npb24gb2YgZGlzYWxsb3dlZCB0YWdzLlxyXG4gICAgICAgICAqIFJlZ0V4cCBvYmplY3QgaXMgY3JlYXRlIGJ5IHV0aWwuY3JlYXRlVGFnc0JsYWNrbGlzdCBtZXRob2QuIChjb3JlLnBhc3RlVGFnc0JsYWNrbGlzdFJlZ0V4cClcclxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsZWFuSFRNTDogZnVuY3Rpb24gKGh0bWwsIHdoaXRlbGlzdCwgYmxhY2tsaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5zdHJpY3RNb2RlKSByZXR1cm4gdXRpbC5odG1sQ29tcHJlc3MoaHRtbCk7XHJcblxyXG4gICAgICAgICAgICBodG1sID0gdGhpcy5fZGVsZXRlRGlzYWxsb3dlZFRhZ3ModGhpcy5fcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh1dGlsLmh0bWxDb21wcmVzcyhodG1sKSwgJ3RleHQvaHRtbCcpLmJvZHkuaW5uZXJIVE1MKS5yZXBsYWNlKC8oPFthLXpBLVowLTlcXC1dKylbXj5dKig/PT4pL2csIHRoaXMuX2NsZWFuVGFncy5iaW5kKHRoaXMsIHRydWUpKS5yZXBsYWNlKC88YnJcXC8/PiQvaSwgJycpO1xyXG4gICAgICAgICAgICBjb25zdCBkb20gPSBfZC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChodG1sKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHV0aWwuX2NvbnNpc3RlbmN5Q2hlY2tPZkhUTUwoZG9tLCB0aGlzLl9odG1sQ2hlY2tXaGl0ZWxpc3RSZWdFeHAsIHRoaXMuX2h0bWxDaGVja0JsYWNrbGlzdFJlZ0V4cCwgdGhpcy5fY2xhc3NOYW1lRmlsdGVyLCBvcHRpb25zLnN0cmljdEhUTUxWYWxpZGF0aW9uKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1NVTkVESVRPUi5jbGVhbkhUTUwuY29uc2lzdGVuY3lDaGVjay5mYWlsXSAnICsgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYW5hZ2VkVGFnc0luZm8gJiYgdGhpcy5tYW5hZ2VkVGFnc0luZm8ucXVlcnkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRDb21wTGlzdCA9IGRvbS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMubWFuYWdlZFRhZ3NJbmZvLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0ZXh0Q29tcExpc3QubGVuZ3RoLCBpbml0TWV0aG9kLCBjbGFzc0xpc3Q7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTGlzdCA9IFtdLnNsaWNlLmNhbGwodGV4dENvbXBMaXN0W2ldLmNsYXNzTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNMZW4gPSBjbGFzc0xpc3QubGVuZ3RoOyBjIDwgY0xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRNZXRob2QgPSB0aGlzLm1hbmFnZWRUYWdzSW5mby5tYXBbY2xhc3NMaXN0W2NdXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRNZXRob2QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRNZXRob2QodGV4dENvbXBMaXN0W2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZG9tVHJlZSA9IGRvbS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICBsZXQgY2xlYW5IVE1MID0gJyc7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVGb3JtYXQgPSB0aGlzLl9pc0Zvcm1hdERhdGEoZG9tVHJlZSk7XHJcblxyXG4gICAgICAgICAgICBpZihyZXF1aXJlRm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICBkb21UcmVlID0gdGhpcy5fZWRpdEZvcm1hdChkb20pLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBkb21UcmVlLmxlbmd0aCwgdDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0ID0gZG9tVHJlZVtpXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fYWxsb3dlZFNjcmlwdFJlZ0V4cC50ZXN0KHQubm9kZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5IVE1MICs9IHQub3V0ZXJIVE1MO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2xlYW5IVE1MICs9IHRoaXMuX21ha2VMaW5lKHQsIHJlcXVpcmVGb3JtYXQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjbGVhbkhUTUwgPSB1dGlsLmh0bWxSZW1vdmVXaGl0ZVNwYWNlKGNsZWFuSFRNTCk7XHJcbiAgICAgICAgICAgIGlmICghY2xlYW5IVE1MKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhbkhUTUwgPSBodG1sO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHdoaXRlbGlzdCkgY2xlYW5IVE1MID0gY2xlYW5IVE1MLnJlcGxhY2UodHlwZW9mIHdoaXRlbGlzdCA9PT0gJ3N0cmluZycgPyB1dGlsLmNyZWF0ZVRhZ3NXaGl0ZWxpc3Qod2hpdGVsaXN0KSA6IHdoaXRlbGlzdCwgJycpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJsYWNrbGlzdCkgY2xlYW5IVE1MID0gY2xlYW5IVE1MLnJlcGxhY2UodHlwZW9mIGJsYWNrbGlzdCA9PT0gJ3N0cmluZycgPyB1dGlsLmNyZWF0ZVRhZ3NCbGFja2xpc3QoYmxhY2tsaXN0KSA6IGJsYWNrbGlzdCwgJycpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFnQ29udmVydG9yKGNsZWFuSFRNTCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGNvbnRlbnRzIGludG8gYSBmb3JtYXQgdGhhdCBjYW4gYmUgcGxhY2VkIGluIGFuIGVkaXRvclxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50cyBjb250ZW50c1xyXG4gICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29udmVydENvbnRlbnRzRm9yRWRpdG9yOiBmdW5jdGlvbiAoY29udGVudHMpIHtcclxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnN0cmljdE1vZGUpIHJldHVybiB1dGlsLmh0bWxDb21wcmVzcyhjb250ZW50cyk7XHJcblxyXG4gICAgICAgICAgICBjb250ZW50cyA9IHRoaXMuX2RlbGV0ZURpc2FsbG93ZWRUYWdzKHRoaXMuX3BhcnNlci5wYXJzZUZyb21TdHJpbmcodXRpbC5odG1sQ29tcHJlc3MoY29udGVudHMpLCAndGV4dC9odG1sJykuYm9keS5pbm5lckhUTUwpLnJlcGxhY2UoLyg8W2EtekEtWjAtOVxcLV0rKVtePl0qKD89PikvZywgdGhpcy5fY2xlYW5UYWdzLmJpbmQodGhpcywgdHJ1ZSkpO1xyXG4gICAgICAgICAgICBjb25zdCBkb20gPSBfZC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb250ZW50cyk7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdXRpbC5fY29uc2lzdGVuY3lDaGVja09mSFRNTChkb20sIHRoaXMuX2h0bWxDaGVja1doaXRlbGlzdFJlZ0V4cCwgdGhpcy5faHRtbENoZWNrQmxhY2tsaXN0UmVnRXhwLCB0aGlzLl9jbGFzc05hbWVGaWx0ZXIsIG9wdGlvbnMuc3RyaWN0SFRNTFZhbGlkYXRpb24pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdbU1VORURJVE9SLmNvbnZlcnRDb250ZW50c0ZvckVkaXRvci5jb25zaXN0ZW5jeUNoZWNrLmZhaWxdICcgKyBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1hbmFnZWRUYWdzSW5mbyAmJiB0aGlzLm1hbmFnZWRUYWdzSW5mby5xdWVyeSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dENvbXBMaXN0ID0gZG9tLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5tYW5hZ2VkVGFnc0luZm8ucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRleHRDb21wTGlzdC5sZW5ndGgsIGluaXRNZXRob2QsIGNsYXNzTGlzdDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NMaXN0ID0gW10uc2xpY2UuY2FsbCh0ZXh0Q29tcExpc3RbaV0uY2xhc3NMaXN0KTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IGNsYXNzTGlzdC5sZW5ndGg7IGMgPCBjTGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE1ldGhvZCA9IHRoaXMubWFuYWdlZFRhZ3NJbmZvLm1hcFtjbGFzc0xpc3RbY11dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5pdE1ldGhvZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE1ldGhvZCh0ZXh0Q29tcExpc3RbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRvbVRyZWUgPSBkb20uY2hpbGROb2RlcztcclxuICAgICAgICAgICAgbGV0IGNsZWFuSFRNTCA9ICcnLCBwID0gbnVsbDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIHQ7IGkgPCBkb21UcmVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0ID0gZG9tVHJlZVtpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2FsbG93ZWRTY3JpcHRSZWdFeHAudGVzdCh0Lm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFuSFRNTCArPSB0Lm91dGVySFRNTDtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNGb3JtYXRFbGVtZW50KHQpICYmICF1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KHQpICYmICF1dGlsLmlzQ29tcG9uZW50KHQpICYmICF1dGlsLmlzRmlndXJlcyh0KSAmJiB0Lm5vZGVUeXBlICE9PSA4ICYmICEvX19zZV9fdGFnLy50ZXN0KHQuY2xhc3NOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcCkgcCA9IHV0aWwuY3JlYXRlRWxlbWVudChvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHAuYXBwZW5kQ2hpbGQodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaS0tO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkb21UcmVlW2kgKyAxXSAmJiAhdXRpbC5pc0Zvcm1hdEVsZW1lbnQoZG9tVHJlZVtpICsgMV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHApIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhbkhUTUwgKz0gdGhpcy5fbWFrZUxpbmUocCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjbGVhbkhUTUwgKz0gdGhpcy5fbWFrZUxpbmUodCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHApIGNsZWFuSFRNTCArPSB0aGlzLl9tYWtlTGluZShwLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjbGVhbkhUTUwubGVuZ3RoID09PSAwKSByZXR1cm4gJzwnICsgb3B0aW9ucy5kZWZhdWx0VGFnICsgJz48YnI+PC8nICsgb3B0aW9ucy5kZWZhdWx0VGFnICsgJz4nO1xyXG5cclxuICAgICAgICAgICAgY2xlYW5IVE1MID0gdXRpbC5odG1sUmVtb3ZlV2hpdGVTcGFjZShjbGVhbkhUTUwpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFnQ29udmVydG9yKGNsZWFuSFRNTCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHd5c2l3eWcgYXJlYSBlbGVtZW50IGludG8gYSBmb3JtYXQgdGhhdCBjYW4gYmUgcGxhY2VkIGluIGFuIGVkaXRvciBvZiBjb2RlIHZpZXcgbW9kZVxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudHxTdHJpbmd9IGh0bWwgV1lTSVdZRyBlbGVtZW50IChjb250ZXh0LmVsZW1lbnQud3lzaXd5Zykgb3IgSFRNTCBzdHJpbmcuXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBjb21wIElmIHRydWUsIGRvZXMgbm90IGxpbmUgYnJlYWsgYW5kIGluZGVudGF0aW9uIG9mIHRhZ3MuXHJcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb252ZXJ0SFRNTEZvckNvZGVWaWV3OiBmdW5jdGlvbiAoaHRtbCwgY29tcCkge1xyXG4gICAgICAgICAgICBsZXQgcmV0dXJuSFRNTCA9ICcnO1xyXG4gICAgICAgICAgICBjb25zdCB3UmVnRXhwID0gX3cuUmVnRXhwO1xyXG4gICAgICAgICAgICBjb25zdCBiclJlZyA9IG5ldyB3UmVnRXhwKCdeKEJMT0NLUVVPVEV8UFJFfFRBQkxFfFRIRUFEfFRCT0RZfFRSfFRIfFREfE9MfFVMfElNR3xJRlJBTUV8VklERU98QVVESU98RklHVVJFfEZJR0NBUFRJT058SFJ8QlJ8Q0FOVkFTfFNFTEVDVCkkJywgJ2knKTtcclxuICAgICAgICAgICAgY29uc3Qgd0RvYyA9IHR5cGVvZiBodG1sID09PSAnc3RyaW5nJyA/IF9kLmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGh0bWwpIDogaHRtbDtcclxuICAgICAgICAgICAgY29uc3QgaXNGb3JtYXQgPSBmdW5jdGlvbiAoY3VycmVudCkgeyByZXR1cm4gdGhpcy5pc0Zvcm1hdEVsZW1lbnQoY3VycmVudCkgfHwgdGhpcy5pc0NvbXBvbmVudChjdXJyZW50KTsgfS5iaW5kKHV0aWwpO1xyXG4gICAgICAgICAgICBjb25zdCBickNoYXIgPSBjb21wID8gJycgOiAnXFxuJztcclxuXHJcbiAgICAgICAgICAgIGxldCBpbmRlbnRTaXplID0gY29tcCA/IDAgOiB0aGlzLl92YXJpYWJsZS5jb2RlSW5kZW50ICogMTtcclxuICAgICAgICAgICAgaW5kZW50U2l6ZSA9IGluZGVudFNpemUgPiAwID8gbmV3IF93LkFycmF5KGluZGVudFNpemUgKyAxKS5qb2luKCcgJykgOiAnJztcclxuXHJcbiAgICAgICAgICAgIChmdW5jdGlvbiByZWN1cnNpb25GdW5jIChlbGVtZW50LCBpbmRlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudFJlZ1Rlc3QgPSBiclJlZy50ZXN0KGVsZW1lbnQubm9kZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudEluZGVudCA9IChlbGVtZW50UmVnVGVzdCA/IGluZGVudCA6ICcnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2hpbGRyZW4ubGVuZ3RoLCBub2RlLCBiciwgbGluZUJSLCBub2RlUmVnVGVzdCwgdGFnLCB0YWdJbmRlbnQ7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgICAgICBub2RlUmVnVGVzdCA9IGJyUmVnLnRlc3Qobm9kZS5ub2RlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnIgPSBub2RlUmVnVGVzdCA/IGJyQ2hhciA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVCUiA9IGlzRm9ybWF0KG5vZGUpICYmICFlbGVtZW50UmVnVGVzdCAmJiAhL14oVEh8VEQpJC9pLnRlc3QoZWxlbWVudC5ub2RlTmFtZSkgPyBickNoYXIgOiAnJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuSFRNTCArPSAnXFxuPCEtLSAnICsgbm9kZS50ZXh0Q29udGVudC50cmltKCkgKyAnIC0tPicgKyBicjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0xpc3Qobm9kZS5wYXJlbnRFbGVtZW50KSkgcmV0dXJuSFRNTCArPSB1dGlsLl9IVE1MQ29udmVydG9yKC9eXFxuKyQvLnRlc3Qobm9kZS5kYXRhKSA/ICcnIDogbm9kZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkhUTUwgKz0gKC9eSFIkL2kudGVzdChub2RlLm5vZGVOYW1lKSA/IGJyQ2hhciA6ICcnKSArICgvXlBSRSQvaS50ZXN0KG5vZGUucGFyZW50RWxlbWVudC5ub2RlTmFtZSkgJiYgL15CUiQvaS50ZXN0KG5vZGUubm9kZU5hbWUpID8gJycgOiBlbGVtZW50SW5kZW50KSArIG5vZGUub3V0ZXJIVE1MICsgYnI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLm91dGVySFRNTCkgeyAvLyBJRVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5IVE1MICs9IG5ldyBfdy5YTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnID0gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdJbmRlbnQgPSBlbGVtZW50SW5kZW50IHx8IG5vZGVSZWdUZXN0ID8gaW5kZW50IDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkhUTUwgKz0gKGxpbmVCUiB8fCAoZWxlbWVudFJlZ1Rlc3QgPyAnJyA6IGJyKSkgKyB0YWdJbmRlbnQgKyBub2RlLm91dGVySFRNTC5tYXRjaCh3UmVnRXhwKCc8JyArIHRhZyArICdbXj5dKj4nLCAnaScpKVswXSArIGJyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25GdW5jKG5vZGUsIGluZGVudCArIGluZGVudFNpemUsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuSFRNTCArPSAoL1xcbiQvLnRlc3QocmV0dXJuSFRNTCkgPyB0YWdJbmRlbnQgOiAnJykgKyAnPC8nICsgdGFnICsgJz4nICsgKGxpbmVCUiB8fCBiciB8fCBlbGVtZW50UmVnVGVzdCA/IGJyQ2hhciA6ICcnIHx8IC9eKFRIfFREKSQvaS50ZXN0KG5vZGUubm9kZU5hbWUpID8gYnJDaGFyIDogJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSh3RG9jLCAnJykpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJldHVybkhUTUwudHJpbSgpICsgYnJDaGFyO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBBZGQgYW4gZXZlbnQgdG8gZG9jdW1lbnQuXHJcbiAgICAgICAgICogV2hlbiBjcmVhdGVkIGFzIGFuIElmcmFtZSwgdGhlIHNhbWUgZXZlbnQgaXMgYWRkZWQgdG8gdGhlIGRvY3VtZW50IGluIHRoZSBJZnJhbWUuXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgRXZlbnQgdHlwZVxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEV2ZW50IGxpc3RlbmVyXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSB1c2VDYXB0dXJlIFVzZSBldmVudCBjYXB0dXJlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYWRkRG9jRXZlbnQ6IGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkge1xyXG4gICAgICAgICAgICBfZC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaWZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93ZC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZW1vdmUgZXZlbnRzIGZyb20gZG9jdW1lbnQuXHJcbiAgICAgICAgICogV2hlbiBjcmVhdGVkIGFzIGFuIElmcmFtZSwgdGhlIGV2ZW50IG9mIHRoZSBkb2N1bWVudCBpbnNpZGUgdGhlIElmcmFtZSBpcyBhbHNvIHJlbW92ZWQuXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgRXZlbnQgdHlwZVxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEV2ZW50IGxpc3RlbmVyXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVtb3ZlRG9jRXZlbnQ6IGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lcikge1xyXG4gICAgICAgICAgICBfZC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaWZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93ZC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgY3VycmVudCBudW1iZXIgb2YgY2hhcmFjdGVycyBpcyBjb3VudGVkIGFuZCBkaXNwbGF5ZWQuXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGlucHV0VGV4dCBUZXh0IGFkZGVkLlxyXG4gICAgICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2NoYXJDb3VudDogZnVuY3Rpb24gKGlucHV0VGV4dCkge1xyXG4gICAgICAgICAgICBjb25zdCBtYXhDaGFyQ291bnQgPSBvcHRpb25zLm1heENoYXJDb3VudDtcclxuICAgICAgICAgICAgY29uc3QgY291bnRUeXBlID0gb3B0aW9ucy5jaGFyQ291bnRlclR5cGU7XHJcbiAgICAgICAgICAgIGxldCBuZXh0Q2hhckNvdW50ID0gMDtcclxuICAgICAgICAgICAgaWYgKCEhaW5wdXRUZXh0KSBuZXh0Q2hhckNvdW50ID0gdGhpcy5nZXRDaGFyTGVuZ3RoKGlucHV0VGV4dCwgY291bnRUeXBlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NldENoYXJDb3VudCgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1heENoYXJDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxldCBvdmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IGZ1bmN0aW9ucy5nZXRDaGFyQ291bnQoY291bnRUeXBlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPiBtYXhDaGFyQ291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBvdmVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dENoYXJDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdG9yUmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZE9mZiA9IHJhbmdlLmVuZE9mZnNldCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmdldFNlbGVjdGlvbk5vZGUoKS50ZXh0Q29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2xpY2VQb3NpdGlvbiA9IHJhbmdlLmVuZE9mZnNldCAtIChjb3VudCAtIG1heENoYXJDb3VudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNlbGVjdGlvbk5vZGUoKS50ZXh0Q29udGVudCA9IHRleHQuc2xpY2UoMCwgc2xpY2VQb3NpdGlvbiA8IDAgPyAwIDogc2xpY2VQb3NpdGlvbikgKyB0ZXh0LnNsaWNlKHJhbmdlLmVuZE9mZnNldCwgdGV4dC5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKHJhbmdlLmVuZENvbnRhaW5lciwgZW5kT2ZmLCByYW5nZS5lbmRDb250YWluZXIsIGVuZE9mZik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoY291bnQgKyBuZXh0Q2hhckNvdW50KSA+IG1heENoYXJDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG92ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvdmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsbENvdW50ZXJCbGluaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Q2hhckNvdW50ID4gMCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gV2hlbiBcImVsZW1lbnRcIiBpcyBhZGRlZCwgaWYgaXQgaXMgZ3JlYXRlciB0aGFuIFwib3B0aW9ucy5tYXhDaGFyQ291bnRcIiwgZmFsc2UgaXMgcmV0dXJuZWQuXHJcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfFN0cmluZ30gZWxlbWVudCBFbGVtZW50IG5vZGUgb3IgU3RyaW5nLlxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfG51bGx9IGNoYXJDb3VudGVyVHlwZSBjaGFyQ291bnRlclR5cGUuIElmIGl0IGlzIG51bGwsIHRoZSBvcHRpb25zLmNoYXJDb3VudGVyVHlwZVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNoZWNrQ2hhckNvdW50OiBmdW5jdGlvbiAoZWxlbWVudCwgY2hhckNvdW50ZXJUeXBlKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm1heENoYXJDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY291bnRUeXBlID0gY2hhckNvdW50ZXJUeXBlIHx8IG9wdGlvbnMuY2hhckNvdW50ZXJUeXBlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5nZXRDaGFyTGVuZ3RoKCh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgPyBlbGVtZW50IDogKHRoaXMuX2NoYXJUeXBlSFRNTCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSAxKSA/IGVsZW1lbnQub3V0ZXJIVE1MIDogZWxlbWVudC50ZXh0Q29udGVudCksIGNvdW50VHlwZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID4gMCAmJiBsZW5ndGggKyBmdW5jdGlvbnMuZ2V0Q2hhckNvdW50KGNvdW50VHlwZSkgPiBvcHRpb25zLm1heENoYXJDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxDb3VudGVyQmxpbmsoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjb250ZW50LlxyXG4gICAgICAgICAqIERlcGVuZGluZyBvbiB0aGUgb3B0aW9uLCB0aGUgbGVuZ3RoIG9mIHRoZSBjaGFyYWN0ZXIgaXMgdGFrZW4uIChjaGFyQ291bnRlclR5cGUpXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbnRlbnQgQ29udGVudCB0byBjb3VudFxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjaGFyQ291bnRlclR5cGUgb3B0aW9ucy5jaGFyQ291bnRlclR5cGVcclxuICAgICAgICAgKiBAcmV0dXJucyB7TnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldENoYXJMZW5ndGg6IGZ1bmN0aW9uIChjb250ZW50LCBjaGFyQ291bnRlclR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC9ieXRlLy50ZXN0KGNoYXJDb3VudGVyVHlwZSkgPyB1dGlsLmdldEJ5dGVMZW5ndGgoY29udGVudCkgOiBjb250ZW50Lmxlbmd0aDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmVzZXQgYnV0dG9ucyBvZiB0aGUgcmVzcG9uc2l2ZSB0b29sYmFyLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlc2V0UmVzcG9uc2l2ZVRvb2xiYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2l2ZVNpemUgPSBldmVudC5fcmVzcG9uc2l2ZUJ1dHRvblNpemU7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zaXZlU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHcgPSAwO1xyXG4gICAgICAgICAgICAgICAgaWYgKChjb3JlLl9pc0JhbGxvb24gfHwgY29yZS5faXNJbmxpbmUpICYmIG9wdGlvbnMudG9vbGJhcldpZHRoID09PSAnYXV0bycpIHtcclxuICAgICAgICAgICAgICAgICAgICB3ID0gY29udGV4dC5lbGVtZW50LnRvcEFyZWEub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHcgPSBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2l2ZVdpZHRoID0gJ2RlZmF1bHQnO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDEsIGxlbiA9IHJlc3BvbnNpdmVTaXplLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHcgPCByZXNwb25zaXZlU2l6ZVtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaXZlV2lkdGggPSByZXNwb25zaXZlU2l6ZVtpXSArICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50Ll9yZXNwb25zaXZlQ3VycmVudFNpemUgIT09IHJlc3BvbnNpdmVXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9yZXNwb25zaXZlQ3VycmVudFNpemUgPSByZXNwb25zaXZlV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zLnNldFRvb2xiYXJCdXR0b25zKGV2ZW50Ll9yZXNwb25zaXZlQnV0dG9uc1tyZXNwb25zaXZlV2lkdGhdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTZXQgdGhlIGNoYXIgY291bnQgdG8gY2hhckNvdW50ZXIgZWxlbWVudCB0ZXh0Q29udGVudC5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zZXRDaGFyQ291bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHQuZWxlbWVudC5jaGFyQ291bnRlcikge1xyXG4gICAgICAgICAgICAgICAgX3cuc2V0VGltZW91dChmdW5jdGlvbiAoZnVuY3Rpb25zLCBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGV4dENvbnRlbnQgJiYgZnVuY3Rpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dENvbnRlbnQgPSBmdW5jdGlvbnMuZ2V0Q2hhckNvdW50KG9wdGlvbnMuY2hhckNvdW50ZXJUeXBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQoY29udGV4dC5lbGVtZW50LmNoYXJDb3VudGVyLCBmdW5jdGlvbnMsIG9wdGlvbnMpLCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgY2hhcmFjdGVyIGNvdW50ZXIgYmxpbmtzLlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2NhbGxDb3VudGVyQmxpbms6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgY2hhcldyYXBwZXIgPSBjb250ZXh0LmVsZW1lbnQuY2hhcldyYXBwZXI7XHJcbiAgICAgICAgICAgIGlmIChjaGFyV3JhcHBlciAmJiAhdXRpbC5oYXNDbGFzcyhjaGFyV3JhcHBlciwgJ3NlLWJsaW5rJykpIHtcclxuICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoY2hhcldyYXBwZXIsICdzZS1ibGluaycpO1xyXG4gICAgICAgICAgICAgICAgX3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyhjaGFyV3JhcHBlciwgJ3NlLWJsaW5rJyk7XHJcbiAgICAgICAgICAgICAgICB9LCA2MDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENoZWNrIHRoZSBjb21wb25lbnRzIHN1Y2ggYXMgaW1hZ2UgYW5kIHZpZGVvIGFuZCBtb2RpZnkgdGhlbSBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdC5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9jaGVja0NvbXBvbmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2ZpbGVJbmZvUGx1Z2luc0NoZWNrLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9maWxlSW5mb1BsdWdpbnNDaGVja1tpXSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemUgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBjb21wb25lbnRzLlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3Jlc2V0Q29tcG9uZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5fZmlsZUluZm9QbHVnaW5zUmVzZXQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVJbmZvUGx1Z2luc1Jlc2V0W2ldKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2V0IG1ldGhvZCBpbiB0aGUgY29kZSB2aWV3IGFyZWFcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgSFRNTCBzdHJpbmdcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zZXRDb2RlVmlldzogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNvZGVNaXJyb3JFZGl0b3IpIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMuY29kZU1pcnJvckVkaXRvci5nZXREb2MoKS5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuY29kZS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldCBtZXRob2QgaW4gdGhlIGNvZGUgdmlldyBhcmVhXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfZ2V0Q29kZVZpZXc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29kZU1pcnJvckVkaXRvciA/IG9wdGlvbnMuY29kZU1pcnJvckVkaXRvci5nZXREb2MoKS5nZXRWYWx1ZSgpIDogY29udGV4dC5lbGVtZW50LmNvZGUudmFsdWU7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIHJlbW92ZSBjbGFzcywgZGlzcGxheSB0ZXh0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8bnVsbH0gaWdub3JlZExpc3QgSWdvbnJlZCBidXR0b24gbGlzdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9zZXRLZXlFZmZlY3Q6IGZ1bmN0aW9uIChpZ25vcmVkTGlzdCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb21tYW5kTWFwID0gdGhpcy5jb21tYW5kTWFwO1xyXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVQbHVnaW5zID0gdGhpcy5hY3RpdmVQbHVnaW5zO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIGNvbW1hbmRNYXApIHtcclxuICAgICAgICAgICAgICAgIGlmIChpZ25vcmVkTGlzdC5pbmRleE9mKGtleSkgPiAtMSB8fCAhdXRpbC5oYXNPd24oY29tbWFuZE1hcCwga2V5KSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlUGx1Z2lucy5pbmRleE9mKGtleSkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbnNba2V5XS5hY3RpdmUuY2FsbCh0aGlzLCBudWxsKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZE1hcC5PVVRERU5UICYmIC9eT1VUREVOVCQvaS50ZXN0KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNJbXBvcnRhbnREaXNhYmxlZChjb21tYW5kTWFwLk9VVERFTlQpKSBjb21tYW5kTWFwLk9VVERFTlQuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kTWFwLklOREVOVCAmJiAvXklOREVOVCQvaS50ZXN0KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNJbXBvcnRhbnREaXNhYmxlZChjb21tYW5kTWFwLklOREVOVCkpIGNvbW1hbmRNYXAuSU5ERU5ULnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyhjb21tYW5kTWFwW2tleV0sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXogY29yZSB2YXJpYWJsZVxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVsb2FkIElzIHJlbG9vYWQ/XHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IF9pbml0SFRNTCBpbml0aWFsIGh0bWwgc3RyaW5nXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfaW5pdDogZnVuY3Rpb24gKHJlbG9hZCwgX2luaXRIVE1MKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdSZWdFeHAgPSBfdy5SZWdFeHA7XHJcbiAgICAgICAgICAgIHRoaXMuX3d3ID0gb3B0aW9ucy5pZnJhbWUgPyBjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLmNvbnRlbnRXaW5kb3cgOiBfdztcclxuICAgICAgICAgICAgdGhpcy5fd2QgPSBfZDtcclxuICAgICAgICAgICAgdGhpcy5fY2hhclR5cGVIVE1MID0gb3B0aW9ucy5jaGFyQ291bnRlclR5cGUgPT09ICdieXRlLWh0bWwnO1xyXG4gICAgICAgICAgICB0aGlzLnd3Q29tcHV0ZWRTdHlsZSA9IF93LmdldENvbXB1dGVkU3R5bGUoY29udGV4dC5lbGVtZW50Lnd5c2l3eWcpO1xyXG4gICAgICAgICAgICB0aGlzLl9lZGl0b3JIZWlnaHQgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLm9mZnNldEhlaWdodDtcclxuICAgICAgICAgICAgdGhpcy5fZWRpdG9ySGVpZ2h0UGFkZGluZyA9IHV0aWwuZ2V0TnVtYmVyKHRoaXMud3dDb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctdG9wJykpICsgdXRpbC5nZXROdW1iZXIodGhpcy53d0NvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1ib3R0b20nKSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsYXNzTmFtZUZpbHRlciA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXN0KHYpID8gdiA6ICcnO1xyXG4gICAgICAgICAgICB9LmJpbmQob3B0aW9ucy5hbGxvd2VkQ2xhc3NOYW1lcyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzUHJlZml4ID0gKG9wdGlvbnMuX19hbGxvd2VkU2NyaXB0VGFnID8gJycgOiAnc2NyaXB0fCcpO1xyXG4gICAgICAgICAgICB0aGlzLl9fc2NyaXB0VGFnUmVnRXhwID0gbmV3IHdSZWdFeHAoJzwoc2NyaXB0KVtePl0qPihbXFxcXHNcXFxcU10qPyk8XFxcXC9cXFxcMT58PHNjcmlwdFtePl0qXFxcXC8/PicsICdnaScpO1xyXG4gICAgICAgICAgICB0aGlzLl9fZGlzYWxsb3dlZFRhZ3NSZWdFeHAgPSBuZXcgd1JlZ0V4cCgnPCgnICsgc1ByZWZpeCArICdzdHlsZSlbXj5dKj4oW1xcXFxzXFxcXFNdKj8pPFxcXFwvXFxcXDE+fDwoJyArIHNQcmVmaXggKyAnc3R5bGUpW14+XSpcXFxcLz8+JywgJ2dpJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX19kaXNhbGxvd2VkVGFnTmFtZVJlZ0V4cCA9IG5ldyB3UmVnRXhwKCdeKCcgKyBzUHJlZml4ICsgJ21ldGF8bGlua3xzdHlsZXxbYS16XStcXDpbYS16XSspJCcsICdpJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX19hbGxvd2VkU2NyaXB0UmVnRXhwID0gbmV3IHdSZWdFeHAoJ14nICsgKG9wdGlvbnMuX19hbGxvd2VkU2NyaXB0VGFnID8gJ3NjcmlwdCcgOiAnJykgKyAnJCcsICdpJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuaWZyYW1lICYmIHR5cGVvZiBfdy5TaGFkb3dSb290ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGQgPSBjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLnNoYWRvd1Jvb3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hhZG93Um9vdCA9IGNoaWxkLnNoYWRvd1Jvb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBfdy5TaGFkb3dSb290KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoYWRvd1Jvb3QgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zaGFkb3dSb290KSB0aGlzLl9zaGFkb3dSb290Q29udHJvbGxlckV2ZW50VGFyZ2V0ID0gW107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHNldCBkaXNhbGxvdyB0ZXh0IG5vZGVzXHJcbiAgICAgICAgICAgIGNvbnN0IGRpc2FsbG93VGV4dFRhZ3MgPSBfdy5PYmplY3Qua2V5cyhvcHRpb25zLl90ZXh0VGFnc01hcCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsbG93VGV4dFRhZ3MgPSAhb3B0aW9ucy5hZGRUYWdzV2hpdGVsaXN0ID8gW10gOiBvcHRpb25zLmFkZFRhZ3NXaGl0ZWxpc3Quc3BsaXQoJ3wnKS5maWx0ZXIoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIC9ifGl8aW5zfHN8c3RyaWtlL2kudGVzdCh2KTsgfSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsb3dUZXh0VGFncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgZGlzYWxsb3dUZXh0VGFncy5zcGxpY2UoZGlzYWxsb3dUZXh0VGFncy5pbmRleE9mKGFsbG93VGV4dFRhZ3NbaV0udG9Mb3dlckNhc2UoKSksIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2Rpc2FsbG93ZWRUZXh0VGFnc1JlZ0V4cCA9IGRpc2FsbG93VGV4dFRhZ3MubGVuZ3RoID09PSAwID8gbnVsbCA6IG5ldyB3UmVnRXhwKCcoPFxcXFwvPykoJyArIGRpc2FsbG93VGV4dFRhZ3Muam9pbignfCcpICsgJylcXFxcYlxcXFxzKihbXj5ePF0rKT9cXFxccyooPz0+KScsICdnaScpO1xyXG5cclxuICAgICAgICAgICAgLy8gc2V0IHdoaXRlbGlzdFxyXG4gICAgICAgICAgICBjb25zdCBnZXRSZWdMaXN0ID0gZnVuY3Rpb24gKHN0ciwgc3RyMikgeyByZXR1cm4gIXN0ciA/ICdeJyA6IChzdHIgPT09ICcqJyA/ICdbYS16LV0rJyA6ICghc3RyMiA/IHN0ciA6IChzdHIgKyAnfCcgKyBzdHIyKSkpOyB9O1xyXG4gICAgICAgICAgICAvLyB0YWdzXHJcbiAgICAgICAgICAgIGNvbnN0IHZpZGVvQXR0ciA9ICd8Y29udHJvbHN8YXV0b3BsYXl8bG9vcHxtdXRlZHxwb3N0ZXJ8cHJlbG9hZHxwbGF5c2lubGluZSc7XHJcbiAgICAgICAgICAgIGNvbnN0IGlmcmFtZUF0dHIgPSAnfGFsbG93ZnVsbHNjcmVlbnxzYW5kYm94fGxvYWRpbmd8YWxsb3d8cmVmZXJyZXJwb2xpY3l8ZnJhbWVib3JkZXJ8c2Nyb2xsaW5nJztcclxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEF0dHIgPSAnY29udGVudGVkaXRhYmxlfGNvbHNwYW58cm93c3Bhbnx0YXJnZXR8aHJlZnxkb3dubG9hZHxyZWx8c3JjfGFsdHxjbGFzc3x0eXBlfG9yaWdpbi1zaXplJyArIHZpZGVvQXR0ciArIGlmcmFtZUF0dHI7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFBdHRyID0gJ2RhdGEtZm9ybWF0fGRhdGEtc2l6ZXxkYXRhLWZpbGUtc2l6ZXxkYXRhLWZpbGUtbmFtZXxkYXRhLW9yaWdpbnxkYXRhLWFsaWdufGRhdGEtaW1hZ2UtbGlua3xkYXRhLXJvdGF0ZXxkYXRhLXByb3BvcnRpb258ZGF0YS1wZXJjZW50YWdlfGRhdGEtZXhwfGRhdGEtZm9udC1zaXplJztcclxuICAgICAgICAgICAgdGhpcy5fYWxsb3dIVE1MQ29tbWVudHMgPSBvcHRpb25zLl9lZGl0b3JUYWdzV2hpdGVsaXN0LmluZGV4T2YoJy8vJykgPiAtMSB8fCBvcHRpb25zLl9lZGl0b3JUYWdzV2hpdGVsaXN0ID09PSAnKic7XHJcbiAgICAgICAgICAgIC8vIGh0bWwgY2hlY2tcclxuICAgICAgICAgICAgdGhpcy5faHRtbENoZWNrV2hpdGVsaXN0UmVnRXhwID0gbmV3IHdSZWdFeHAoJ14oJyArIGdldFJlZ0xpc3Qob3B0aW9ucy5fZWRpdG9yVGFnc1doaXRlbGlzdC5yZXBsYWNlKCd8Ly8nLCAnJyksICcnKSArICcpJCcsICdpJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2h0bWxDaGVja0JsYWNrbGlzdFJlZ0V4cCA9IG5ldyB3UmVnRXhwKCdeKCcgKyAob3B0aW9ucy50YWdzQmxhY2tsaXN0IHx8ICdeJykgKyAnKSQnLCAnaScpO1xyXG4gICAgICAgICAgICAvLyB0YWdzXHJcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yVGFnc1doaXRlbGlzdFJlZ0V4cCA9IHV0aWwuY3JlYXRlVGFnc1doaXRlbGlzdChnZXRSZWdMaXN0KG9wdGlvbnMuX2VkaXRvclRhZ3NXaGl0ZWxpc3QucmVwbGFjZSgnfC8vJywgJ3w8IS0tfC0tPicpLCAnJykpO1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvclRhZ3NCbGFja2xpc3RSZWdFeHAgPSB1dGlsLmNyZWF0ZVRhZ3NCbGFja2xpc3Qob3B0aW9ucy50YWdzQmxhY2tsaXN0LnJlcGxhY2UoJ3wvLycsICd8PCEtLXwtLT4nKSk7XHJcbiAgICAgICAgICAgIC8vIHBhc3RlIHRhZ3NcclxuICAgICAgICAgICAgdGhpcy5wYXN0ZVRhZ3NXaGl0ZWxpc3RSZWdFeHAgPSB1dGlsLmNyZWF0ZVRhZ3NXaGl0ZWxpc3QoZ2V0UmVnTGlzdChvcHRpb25zLnBhc3RlVGFnc1doaXRlbGlzdCwgJycpKTtcclxuICAgICAgICAgICAgdGhpcy5wYXN0ZVRhZ3NCbGFja2xpc3RSZWdFeHAgPSB1dGlsLmNyZWF0ZVRhZ3NCbGFja2xpc3Qob3B0aW9ucy5wYXN0ZVRhZ3NCbGFja2xpc3QpO1xyXG4gICAgICAgICAgICAvLyBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgIGNvbnN0IHJlZ0VuZFN0ciA9ICdcXFxccyo9XFxcXHMqKFxcXCIpW15cXFwiXSpcXFxcMSc7XHJcbiAgICAgICAgICAgIGNvbnN0IF93QXR0ciA9IG9wdGlvbnMuYXR0cmlidXRlc1doaXRlbGlzdDtcclxuICAgICAgICAgICAgbGV0IHRhZ3NBdHRyID0ge307XHJcbiAgICAgICAgICAgIGxldCBhbGxBdHRyID0gJyc7XHJcbiAgICAgICAgICAgIGlmICghIV93QXR0cikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayBpbiBfd0F0dHIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaGFzT3duKF93QXR0ciwgaykgfHwgL15vblthLXpdKyQvaS50ZXN0KF93QXR0cltrXSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrID09PSAnYWxsJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxBdHRyID0gZ2V0UmVnTGlzdChfd0F0dHJba10sIGRlZmF1bHRBdHRyKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdzQXR0cltrXSA9IG5ldyB3UmVnRXhwKCdcXFxccyg/OicgKyBnZXRSZWdMaXN0KF93QXR0cltrXSwgZGVmYXVsdEF0dHIpICsgJyknICsgcmVnRW5kU3RyLCAnaWcnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2F0dHJpYnV0ZXNXaGl0ZWxpc3RSZWdFeHAgPSBuZXcgd1JlZ0V4cCgnXFxcXHMoPzonICsgKGFsbEF0dHIgfHwgZGVmYXVsdEF0dHIgKyAnfCcgKyBkYXRhQXR0cikgKyAnKScgKyByZWdFbmRTdHIsICdpZycpO1xyXG4gICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzV2hpdGVsaXN0UmVnRXhwX2FsbF9kYXRhID0gbmV3IHdSZWdFeHAoJ1xcXFxzKD86JyArICgoYWxsQXR0ciB8fCBkZWZhdWx0QXR0cikgKyAnfGRhdGEtW2EtejAtOVxcXFwtXSsnKSArICcpJyArIHJlZ0VuZFN0ciwgJ2lnJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2F0dHJpYnV0ZXNUYWdzV2hpdGVsaXN0ID0gdGFnc0F0dHI7XHJcblxyXG4gICAgICAgICAgICAvLyBibGFja2xpc3RcclxuICAgICAgICAgICAgY29uc3QgX2JBdHRyID0gb3B0aW9ucy5hdHRyaWJ1dGVzQmxhY2tsaXN0O1xyXG4gICAgICAgICAgICB0YWdzQXR0ciA9IHt9O1xyXG4gICAgICAgICAgICBhbGxBdHRyID0gJyc7XHJcbiAgICAgICAgICAgIGlmICghIV9iQXR0cikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayBpbiBfYkF0dHIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaGFzT3duKF9iQXR0ciwgaykpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrID09PSAnYWxsJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxBdHRyID0gZ2V0UmVnTGlzdChfYkF0dHJba10sICcnKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdzQXR0cltrXSA9IG5ldyB3UmVnRXhwKCdcXFxccyg/OicgKyBnZXRSZWdMaXN0KF9iQXR0cltrXSwgJycpICsgJyknICsgcmVnRW5kU3RyLCAnaWcnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2F0dHJpYnV0ZXNCbGFja2xpc3RSZWdFeHAgPSBuZXcgd1JlZ0V4cCgnXFxcXHMoPzonICsgKGFsbEF0dHIgfHwgJ14nKSArICcpJyArIHJlZ0VuZFN0ciwgJ2lnJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2F0dHJpYnV0ZXNUYWdzQmxhY2tsaXN0ID0gdGFnc0F0dHI7XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgbW9kZXNcclxuICAgICAgICAgICAgdGhpcy5faXNJbmxpbmUgPSAvaW5saW5lL2kudGVzdChvcHRpb25zLm1vZGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9pc0JhbGxvb24gPSAvYmFsbG9vbnxiYWxsb29uLWFsd2F5cy9pLnRlc3Qob3B0aW9ucy5tb2RlKTtcclxuICAgICAgICAgICAgdGhpcy5faXNCYWxsb29uQWx3YXlzID0gL2JhbGxvb24tYWx3YXlzL2kudGVzdChvcHRpb25zLm1vZGUpO1xyXG5cclxuICAgICAgICAgICAgLy8gY2FjaGluZyBidXR0b25zXHJcbiAgICAgICAgICAgIHRoaXMuX2NhY2hpbmdCdXR0b25zKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBmaWxlIGNvbXBvbmVudHNcclxuICAgICAgICAgICAgdGhpcy5fZmlsZUluZm9QbHVnaW5zQ2hlY2sgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5fZmlsZUluZm9QbHVnaW5zUmVzZXQgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vIHRleHQgY29tcG9uZW50c1xyXG4gICAgICAgICAgICB0aGlzLm1hbmFnZWRUYWdzSW5mbyA9IHsgcXVlcnk6ICcnLCBtYXA6IHt9IH07XHJcbiAgICAgICAgICAgIGNvbnN0IG1hbmFnZWRDbGFzcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8gQ29tbWFuZCBhbmQgZmlsZSBwbHVnaW5zIHJlZ2lzdHJhdGlvblxyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVBsdWdpbnMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5fZmlsZU1hbmFnZXIudGFncyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLl9maWxlTWFuYWdlci5wbHVnaW5NYXAgPSB7fTtcclxuXHJcbiAgICAgICAgICAgIGxldCBmaWxlUGx1Z2luUmVnRXhwID0gW107XHJcbiAgICAgICAgICAgIGxldCBwbHVnaW4sIGJ1dHRvbjtcclxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIHBsdWdpbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdXRpbC5oYXNPd24ocGx1Z2lucywga2V5KSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBwbHVnaW4gPSBwbHVnaW5zW2tleV07XHJcbiAgICAgICAgICAgICAgICBidXR0b24gPSBwbHVnaW5DYWxsQnV0dG9uc1trZXldO1xyXG4gICAgICAgICAgICAgICAgaWYgKChwbHVnaW4uYWN0aXZlIHx8IHBsdWdpbi5hY3Rpb24pICYmIGJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbFBsdWdpbihrZXksIG51bGwsIGJ1dHRvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5jaGVja0ZpbGVJbmZvID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBwbHVnaW4ucmVzZXRGaWxlSW5mbyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbFBsdWdpbihrZXksIG51bGwsIGJ1dHRvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZUluZm9QbHVnaW5zQ2hlY2sucHVzaChwbHVnaW4uY2hlY2tGaWxlSW5mby5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlSW5mb1BsdWdpbnNSZXNldC5wdXNoKHBsdWdpbi5yZXNldEZpbGVJbmZvLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKF93LkFycmF5LmlzQXJyYXkocGx1Z2luLmZpbGVUYWdzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVUYWdzID0gcGx1Z2luLmZpbGVUYWdzO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbFBsdWdpbihrZXksIG51bGwsIGJ1dHRvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZU1hbmFnZXIudGFncyA9IHRoaXMuX2ZpbGVNYW5hZ2VyLnRhZ3MuY29uY2F0KGZpbGVUYWdzKTtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlUGx1Z2luUmVnRXhwLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB0YWcgPSAwLCB0TGVuID0gZmlsZVRhZ3MubGVuZ3RoOyB0YWcgPCB0TGVuOyB0YWcrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlTWFuYWdlci5wbHVnaW5NYXBbZmlsZVRhZ3NbdGFnXS50b0xvd2VyQ2FzZSgpXSA9IGtleTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocGx1Z2luLm1hbmFnZWRUYWdzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5mbyA9IHBsdWdpbi5tYW5hZ2VkVGFncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZWRDbGFzcy5wdXNoKCcuJyArIGluZm8uY2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hbmFnZWRUYWdzSW5mby5tYXBbaW5mby5jbGFzc05hbWVdID0gaW5mby5tZXRob2QuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5tYW5hZ2VkVGFnc0luZm8ucXVlcnkgPSBtYW5hZ2VkQ2xhc3MudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgdGhpcy5fZmlsZU1hbmFnZXIucXVlcnlTdHJpbmcgPSB0aGlzLl9maWxlTWFuYWdlci50YWdzLmpvaW4oJywnKTtcclxuICAgICAgICAgICAgdGhpcy5fZmlsZU1hbmFnZXIucmVnRXhwID0gbmV3IHdSZWdFeHAoJ14oJyArICAodGhpcy5fZmlsZU1hbmFnZXIudGFncy5qb2luKCd8JykgfHwgJ14nKSArICcpJCcsICdpJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZpbGVNYW5hZ2VyLnBsdWdpblJlZ0V4cCA9IG5ldyB3UmVnRXhwKCdeKCcgKyAgKGZpbGVQbHVnaW5SZWdFeHAubGVuZ3RoID09PSAwID8gJ14nIDogZmlsZVBsdWdpblJlZ0V4cC5qb2luKCd8JykpICsgJykkJywgJ2knKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGNhY2hlIGVkaXRvcidzIGVsZW1lbnRcclxuICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuX29yaWdpbkNzc1RleHQgPSBjb250ZXh0LmVsZW1lbnQudG9wQXJlYS5zdHlsZS5jc3NUZXh0O1xyXG4gICAgICAgICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IGNvbnRleHQuZWxlbWVudC5wbGFjZWhvbGRlcjtcclxuICAgICAgICAgICAgdGhpcy5fbGluZUJyZWFrZXIgPSBjb250ZXh0LmVsZW1lbnQubGluZUJyZWFrZXI7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpbmVCcmVha2VyQnV0dG9uID0gdGhpcy5fbGluZUJyZWFrZXIucXVlcnlTZWxlY3RvcignYnV0dG9uJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBFeGN1dGUgaGlzdG9yeSBmdW5jdGlvblxyXG4gICAgICAgICAgICB0aGlzLmhpc3RvcnkgPSBfaGlzdG9yeSh0aGlzLCB0aGlzLl9vbkNoYW5nZV9oaXN0b3J5U3RhY2suYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgICAgICAvLyByZWdpc3RlciBub3RpY2UgbW9kdWxlXHJcbiAgICAgICAgICAgIHRoaXMuYWRkTW9kdWxlKFtfbm90aWNlXSk7XHJcblxyXG4gICAgICAgICAgICAvLyBJbml0LCB2YWxpZGF0ZVxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pZnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3dkID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5jb250ZW50RG9jdW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZyA9IHRoaXMuX3dkLmJvZHk7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5fZWRpdG9yU3R5bGVzLmVkaXRvcikgY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuc3R5bGUuY3NzVGV4dCA9IG9wdGlvbnMuX2VkaXRvclN0eWxlcy5lZGl0b3I7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWlnaHQgPT09ICdhdXRvJykgdGhpcy5faWZyYW1lQXV0byA9IHRoaXMuX3dkLmJvZHk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2luaXRXeXNpd3lnQXJlYShyZWxvYWQsIF9pbml0SFRNTCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhY2hpbmcgYmFzaWMgYnV0dG9ucyB0byB1c2VcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9jYWNoaW5nQnV0dG9uczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvZGVWaWV3RGlzYWJsZWRCdXR0b25zID0gY29udGV4dC5lbGVtZW50Ll9idXR0b25UcmF5LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZS1tZW51LWxpc3QgYnV0dG9uW2RhdGEtZGlzcGxheV06bm90KFtjbGFzc349XCJzZS1jb2RlLXZpZXctZW5hYmxlZFwiXSk6bm90KFtkYXRhLWRpc3BsYXk9XCJNT1JFXCJdKScpO1xyXG4gICAgICAgICAgICB0aGlzLnJlc2l6aW5nRGlzYWJsZWRCdXR0b25zID0gY29udGV4dC5lbGVtZW50Ll9idXR0b25UcmF5LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZS1tZW51LWxpc3QgYnV0dG9uW2RhdGEtZGlzcGxheV06bm90KFtjbGFzc349XCJzZS1yZXNpemluZy1lbmFibGVkXCJdKTpub3QoW2RhdGEtZGlzcGxheT1cIk1PUkVcIl0pJyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0b29sID0gY29udGV4dC50b29sO1xyXG4gICAgICAgICAgICBjb25zdCBjb21tYW5kTWFwID0gdGhpcy5jb21tYW5kTWFwO1xyXG4gICAgICAgICAgICBjb21tYW5kTWFwLklOREVOVCA9IHRvb2wuaW5kZW50O1xyXG4gICAgICAgICAgICBjb21tYW5kTWFwLk9VVERFTlQgPSB0b29sLm91dGRlbnQ7XHJcbiAgICAgICAgICAgIGNvbW1hbmRNYXBbb3B0aW9ucy50ZXh0VGFncy5ib2xkLnRvVXBwZXJDYXNlKCldID0gdG9vbC5ib2xkO1xyXG4gICAgICAgICAgICBjb21tYW5kTWFwW29wdGlvbnMudGV4dFRhZ3MudW5kZXJsaW5lLnRvVXBwZXJDYXNlKCldID0gdG9vbC51bmRlcmxpbmU7XHJcbiAgICAgICAgICAgIGNvbW1hbmRNYXBbb3B0aW9ucy50ZXh0VGFncy5pdGFsaWMudG9VcHBlckNhc2UoKV0gPSB0b29sLml0YWxpYztcclxuICAgICAgICAgICAgY29tbWFuZE1hcFtvcHRpb25zLnRleHRUYWdzLnN0cmlrZS50b1VwcGVyQ2FzZSgpXSA9IHRvb2wuc3RyaWtlO1xyXG4gICAgICAgICAgICBjb21tYW5kTWFwW29wdGlvbnMudGV4dFRhZ3Muc3ViLnRvVXBwZXJDYXNlKCldID0gdG9vbC5zdWJzY3JpcHQ7XHJcbiAgICAgICAgICAgIGNvbW1hbmRNYXBbb3B0aW9ucy50ZXh0VGFncy5zdXAudG9VcHBlckNhc2UoKV0gPSB0b29sLnN1cGVyc2NyaXB0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc3R5bGVDb21tYW5kTWFwID0ge1xyXG4gICAgICAgICAgICAgICAgZnVsbFNjcmVlbjogdG9vbC5mdWxsU2NyZWVuLFxyXG4gICAgICAgICAgICAgICAgc2hvd0Jsb2NrczogdG9vbC5zaG93QmxvY2tzLFxyXG4gICAgICAgICAgICAgICAgY29kZVZpZXc6IHRvb2wuY29kZVZpZXdcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NhdmVCdXR0b25TdGF0ZXMoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6IHd5c2l3eWcgYXJlYSAoT25seSBjYWxsZWQgZnJvbSBjb3JlLl9pbml0KVxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVsb2FkIElzIHJlbG9vYWQ/XHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IF9pbml0SFRNTCBpbml0aWFsIGh0bWwgc3RyaW5nXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfaW5pdFd5c2l3eWdBcmVhOiBmdW5jdGlvbiAocmVsb2FkLCBfaW5pdEhUTUwpIHtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWcuaW5uZXJIVE1MID0gcmVsb2FkID8gX2luaXRIVE1MIDogdGhpcy5jb252ZXJ0Q29udGVudHNGb3JFZGl0b3IoKHR5cGVvZiBfaW5pdEhUTUwgPT09ICdzdHJpbmcnID8gX2luaXRIVE1MIDogL15URVhUQVJFQSQvaS50ZXN0KGNvbnRleHQuZWxlbWVudC5vcmlnaW5FbGVtZW50Lm5vZGVOYW1lKSA/IGNvbnRleHQuZWxlbWVudC5vcmlnaW5FbGVtZW50LnZhbHVlIDogY29udGV4dC5lbGVtZW50Lm9yaWdpbkVsZW1lbnQuaW5uZXJIVE1MKSB8fCAnJyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhbGxlZCB3aGVuIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIHRhZ3MgaW4gdGhlIHd5c2l3eWcgcmVnaW9uLlxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3Jlc291cmNlc1N0YXRlQ2hhbmdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lmcmFtZUF1dG9IZWlnaHQoKTtcclxuICAgICAgICAgICAgdGhpcy5fY2hlY2tQbGFjZWhvbGRlcigpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQgd2hlbiBhZnRlciBleGVjdXRlIFwiaGlzdG9yeS5wdXNoXCJcclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9vbkNoYW5nZV9oaXN0b3J5U3RhY2s6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzRm9jdXMpIGV2ZW50Ll9hcHBseVRhZ0VmZmVjdHMoKTtcclxuICAgICAgICAgICAgdGhpcy5fdmFyaWFibGUuaXNDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHQudG9vbC5zYXZlKSBjb250ZXh0LnRvb2wuc2F2ZS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnRcclxuICAgICAgICAgICAgaWYgKGZ1bmN0aW9ucy5vbkNoYW5nZSkgZnVuY3Rpb25zLm9uQ2hhbmdlKHRoaXMuZ2V0Q29udGVudHModHJ1ZSksIHRoaXMpO1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50LnRvb2xiYXIuc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJykgZXZlbnQuX3Nob3dUb29sYmFyQmFsbG9vbigpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBNb2RpZnkgdGhlIGhlaWdodCB2YWx1ZSBvZiB0aGUgaWZyYW1lIHdoZW4gdGhlIGhlaWdodCBvZiB0aGUgaWZyYW1lIGlzIGF1dG9tYXRpYy5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9pZnJhbWVBdXRvSGVpZ2h0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pZnJhbWVBdXRvKSB7XHJcbiAgICAgICAgICAgICAgICBfdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoID0gY29yZS5faWZyYW1lQXV0by5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5zdHlsZS5oZWlnaHQgPSBoICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNSZXNpemVPYnNlcnZlclN1cHBvcnRlZCkgY29yZS5fX2NhbGxSZXNpemVGdW5jdGlvbihoLCBudWxsKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF1dGlsLmlzUmVzaXplT2JzZXJ2ZXJTdXBwb3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvcmUuX19jYWxsUmVzaXplRnVuY3Rpb24oY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5vZmZzZXRIZWlnaHQsIG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX19jYWxsUmVzaXplRnVuY3Rpb246IGZ1bmN0aW9uIChoLCByZXNpemVPYnNlcnZlckVudHJ5KSB7XHJcbiAgICAgICAgICAgIGggPSBoID09PSAtMSA/IChyZXNpemVPYnNlcnZlckVudHJ5LmJvcmRlckJveFNpemUgJiYgcmVzaXplT2JzZXJ2ZXJFbnRyeS5ib3JkZXJCb3hTaXplWzBdID8gcmVzaXplT2JzZXJ2ZXJFbnRyeS5ib3JkZXJCb3hTaXplWzBdLmJsb2NrU2l6ZSA6IChyZXNpemVPYnNlcnZlckVudHJ5LmNvbnRlbnRSZWN0LmhlaWdodCArIHRoaXMuX2VkaXRvckhlaWdodFBhZGRpbmcpKSA6IGg7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9lZGl0b3JIZWlnaHQgIT09IGgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLm9uUmVzaXplRWRpdG9yID09PSAnZnVuY3Rpb24nKSBmdW5jdGlvbnMub25SZXNpemVFZGl0b3IoaCwgdGhpcy5fZWRpdG9ySGVpZ2h0LCBjb3JlLCByZXNpemVPYnNlcnZlckVudHJ5KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRvckhlaWdodCA9IGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2V0IGRpc3BsYXkgcHJvcGVydHkgd2hlbiB0aGVyZSBpcyBwbGFjZWhvbGRlci5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9jaGVja1BsYWNlaG9sZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wbGFjZWhvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhcmlhYmxlLmlzQ29kZVZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wbGFjZWhvbGRlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB3eXNpd3lnID0gY29udGV4dC5lbGVtZW50Lnd5c2l3eWc7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwub25seVplcm9XaWR0aFNwYWNlKHd5c2l3eWcudGV4dENvbnRlbnQpIHx8IHd5c2l3eWcucXVlcnlTZWxlY3Rvcih1dGlsLl9hbGxvd2VkRW1wdHlOb2RlTGlzdCkgfHwgKHd5c2l3eWcuaW5uZXJUZXh0Lm1hdGNoKC9cXG4vZykgfHwgJycpLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wbGFjZWhvbGRlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wbGFjZWhvbGRlci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJZiB0aGVyZSBpcyBubyBkZWZhdWx0IGZvcm1hdCwgYWRkIGEgZm9ybWF0IGFuZCBtb3ZlIFwic2VsZWN0aW9uXCIuXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8bnVsbH0gZm9ybWF0TmFtZSBGb3JtYXQgdGFnIG5hbWUgKGRlZmF1bHQ6ICdQJylcclxuICAgICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfG51bGx9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfc2V0RGVmYXVsdEZvcm1hdDogZnVuY3Rpb24gKGZvcm1hdE5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVNYW5hZ2VyLnBsdWdpblJlZ0V4cC50ZXN0KHRoaXMuY3VycmVudENvbnRyb2xsZXJOYW1lKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1vbkNvbiA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydENvbiA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xyXG4gICAgICAgICAgICBjb25zdCByYW5nZUVsID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoY29tbW9uQ29uLCBudWxsKTtcclxuICAgICAgICAgICAgbGV0IGZvY3VzTm9kZSwgb2Zmc2V0LCBmb3JtYXQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWxlQ29tcG9uZW50ID0gdXRpbC5nZXRQYXJlbnRFbGVtZW50KGNvbW1vbkNvbiwgdXRpbC5pc0NvbXBvbmVudCk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlQ29tcG9uZW50ICYmICF1dGlsLmlzVGFibGUoZmlsZUNvbXBvbmVudCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb21tb25Db24ubm9kZVR5cGUgPT09IDEgJiYgY29tbW9uQ29uLmdldEF0dHJpYnV0ZSgnZGF0YS1zZS1lbWJlZCcpID09PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlbCA9IGNvbW1vbkNvbi5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNGb3JtYXRFbGVtZW50KGVsKSkgZWwgPSB0aGlzLmFwcGVuZEZvcm1hdFRhZyhjb21tb25Db24sIG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKGVsLmZpcnN0Q2hpbGQsIDAsIGVsLmZpcnN0Q2hpbGQsIDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoKHV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQoc3RhcnRDb24pIHx8IHV0aWwuaXNXeXNpd3lnRGl2KHN0YXJ0Q29uKSkgJiYgKHV0aWwuaXNDb21wb25lbnQoc3RhcnRDb24uY2hpbGRyZW5bcmFuZ2Uuc3RhcnRPZmZzZXRdKSB8fCB1dGlsLmlzQ29tcG9uZW50KHN0YXJ0Q29uLmNoaWxkcmVuW3JhbmdlLnN0YXJ0T2Zmc2V0IC0gMV0pKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodXRpbC5nZXRQYXJlbnRFbGVtZW50KGNvbW1vbkNvbiwgdXRpbC5pc05vdENoZWNraW5nTm9kZSkpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJhbmdlRWwpIHtcclxuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHV0aWwuY3JlYXRlRWxlbWVudChmb3JtYXROYW1lIHx8IG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICBmb3JtYXQuaW5uZXJIVE1MID0gcmFuZ2VFbC5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybWF0LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSBmb3JtYXQuaW5uZXJIVE1MID0gdXRpbC56ZXJvV2lkdGhTcGFjZTtcclxuXHJcbiAgICAgICAgICAgICAgICByYW5nZUVsLmlubmVySFRNTCA9IGZvcm1hdC5vdXRlckhUTUw7XHJcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSByYW5nZUVsLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICBmb2N1c05vZGUgPSB1dGlsLmdldEVkZ2VDaGlsZE5vZGVzKGZvcm1hdCwgbnVsbCkuc2M7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFmb2N1c05vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c05vZGUgPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdC5pbnNlcnRCZWZvcmUoZm9jdXNOb2RlLCBmb3JtYXQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gZm9jdXNOb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2UoZm9jdXNOb2RlLCBvZmZzZXQsIGZvY3VzTm9kZSwgb2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYodXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChjb21tb25Db24pICYmIChjb21tb25Db24uY2hpbGROb2Rlcy5sZW5ndGggPD0gMSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBiciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29tbW9uQ29uLmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICYmIHV0aWwuaXNCcmVhayhjb21tb25Db24uZmlyc3RDaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBiciA9IGNvbW1vbkNvbi5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBiciA9IHV0aWwuY3JlYXRlVGV4dE5vZGUodXRpbC56ZXJvV2lkdGhTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uQ29uLmFwcGVuZENoaWxkKGJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKGJyLCAxLCBiciwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29tbW9uQ29uLm5vZGVUeXBlID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gdXRpbC5jcmVhdGVFbGVtZW50KGZvcm1hdE5hbWUgfHwgb3B0aW9ucy5kZWZhdWx0VGFnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb21tb25Db24ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZm9ybWF0LCBjb21tb25Db24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdC5hcHBlbmRDaGlsZChjb21tb25Db24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzV3lzaXd5Z0Rpdihjb21tb25Db24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gdXRpbC5jcmVhdGVFbGVtZW50KGZvcm1hdE5hbWUgfHwgb3B0aW9ucy5kZWZhdWx0VGFnKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQuaW5uZXJIVE1MID0gY29tbW9uQ29uLmlubmVySFRNTDtcclxuICAgICAgICAgICAgICAgICAgICBjb21tb25Db24uaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uQ29uLmFwcGVuZENoaWxkKGZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZmZlY3ROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlKGZvcm1hdCwgMSwgZm9ybWF0LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0JyZWFrKGZvcm1hdC5uZXh0U2libGluZykpIHV0aWwucmVtb3ZlSXRlbShmb3JtYXQubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzQnJlYWsoZm9ybWF0LnByZXZpb3VzU2libGluZykpIHV0aWwucmVtb3ZlSXRlbShmb3JtYXQucHJldmlvdXNTaWJsaW5nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0JyZWFrKGZvY3VzTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB6ZXJvV2lkdGggPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh6ZXJvV2lkdGgsIGZvY3VzTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNOb2RlID0gemVyb1dpZHRoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWNDb21tYW5kKCdmb3JtYXRCbG9jaycsIGZhbHNlLCAoZm9ybWF0TmFtZSB8fCBvcHRpb25zLmRlZmF1bHRUYWcpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlUmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRvclJhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVmZmVjdE5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0JyZWFrKGZvcm1hdC5uZXh0U2libGluZykpIHV0aWwucmVtb3ZlSXRlbShmb3JtYXQubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayhmb3JtYXQucHJldmlvdXNTaWJsaW5nKSkgdXRpbC5yZW1vdmVJdGVtKGZvcm1hdC5wcmV2aW91c1NpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayhmb2N1c05vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgemVyb1dpZHRoID0gdXRpbC5jcmVhdGVUZXh0Tm9kZSh1dGlsLnplcm9XaWR0aFNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c05vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoemVyb1dpZHRoLCBmb2N1c05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzTm9kZSA9IHplcm9XaWR0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lZmZlY3ROb2RlID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdGFydENvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShzdGFydENvbiwgMSwgc3RhcnRDb24sIDEpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVGb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemF0aW9uIGFmdGVyIFwic2V0T3B0aW9uc1wiXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGVsIGNvbnRleHQuZWxlbWVudFxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBfaW5pdEhUTUwgSW5pdGlhbCBodG1sIHN0cmluZ1xyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3NldE9wdGlvbnNJbml0OiBmdW5jdGlvbiAoZWwsIF9pbml0SFRNTCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0ID0gX0NvbnRleHQoZWwub3JpZ2luRWxlbWVudCwgdGhpcy5fZ2V0Q29uc3RydWN0ZWQoZWwpLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50c0luZm9SZXNldCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2VkaXRvckluaXQodHJ1ZSwgX2luaXRIVE1MKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6IGVkaXRvclxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gcmVsb2FkIElzIHJlbG9vYWQ/XHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IF9pbml0SFRNTCBpbml0aWFsIGh0bWwgc3RyaW5nXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfZWRpdG9ySW5pdDogZnVuY3Rpb24gKHJlbG9hZCwgX2luaXRIVE1MKSB7XHJcbiAgICAgICAgICAgIC8vIGluaXRpYWxpemUgY29yZSBhbmQgYWRkIGV2ZW50IGxpc3RlbmVyc1xyXG4gICAgICAgICAgICB0aGlzLl9pbml0KHJlbG9hZCwgX2luaXRIVE1MKTtcclxuICAgICAgICAgICAgZXZlbnQuX2FkZEV2ZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldENoYXJDb3VudCgpO1xyXG4gICAgICAgICAgICBldmVudC5fb2ZmU3RpY2t5VG9vbGJhcigpO1xyXG4gICAgICAgICAgICBldmVudC5vblJlc2l6ZV93aW5kb3coKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHRvb2xiYXIgdmlzaWJpbGl0eVxyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XHJcbiAgICAgICAgICAgIC8vIHdpc3l3aWcgYXR0cmlidXRlc1xyXG4gICAgICAgICAgICBjb25zdCBhdHRyID0gb3B0aW9ucy5mcmFtZUF0dHJidXRlcztcclxuICAgICAgICAgICAgZm9yIChsZXQgayBpbiBhdHRyKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5zZXRBdHRyaWJ1dGUoaywgYXR0cltrXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrQ29tcG9uZW50cygpO1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRzSW5mb0luaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50c0luZm9SZXNldCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnJlc2V0KHRydWUpO1xyXG5cclxuICAgICAgICAgICAgX3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvcmUuX3Jlc291cmNlc1N0YXRlQ2hhbmdlICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gb2JzZXJ2ZXJcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC5fcmVzaXplT2JzZXJ2ZXIpIGV2ZW50Ll9yZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50Ll90b29sYmFyT2JzZXJ2ZXIpIGV2ZW50Ll90b29sYmFyT2JzZXJ2ZXIub2JzZXJ2ZShjb250ZXh0LmVsZW1lbnQuX3Rvb2xiYXJTaGFkb3cpO1xyXG4gICAgICAgICAgICAgICAgLy8gcmVzb3VyY2Ugc3RhdGVcclxuICAgICAgICAgICAgICAgIGNvcmUuX3Jlc291cmNlc1N0YXRlQ2hhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyB1c2VyIGV2ZW50XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5vbmxvYWQgPT09ICdmdW5jdGlvbicpIGZ1bmN0aW9ucy5vbmxvYWQoY29yZSwgcmVsb2FkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSBhbmQgcmV0dXJuIGFuIG9iamVjdCB0byBjYWNoZSB0aGUgbmV3IGNvbnRleHQuXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0RWwgY29udGV4dC5lbGVtZW50XHJcbiAgICAgICAgICogQHJldHVybnMge09iamVjdH1cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9nZXRDb25zdHJ1Y3RlZDogZnVuY3Rpb24gKGNvbnRleHRFbCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgX3RvcDogY29udGV4dEVsLnRvcEFyZWEsXHJcbiAgICAgICAgICAgICAgICBfcmVsYXRpdmU6IGNvbnRleHRFbC5yZWxhdGl2ZSxcclxuICAgICAgICAgICAgICAgIF90b29sQmFyOiBjb250ZXh0RWwudG9vbGJhcixcclxuICAgICAgICAgICAgICAgIF90b29sYmFyU2hhZG93OiBjb250ZXh0RWwuX3Rvb2xiYXJTaGFkb3csXHJcbiAgICAgICAgICAgICAgICBfbWVudVRyYXk6IGNvbnRleHRFbC5fbWVudVRyYXksXHJcbiAgICAgICAgICAgICAgICBfZWRpdG9yQXJlYTogY29udGV4dEVsLmVkaXRvckFyZWEsXHJcbiAgICAgICAgICAgICAgICBfd3lzaXd5Z0FyZWE6IGNvbnRleHRFbC53eXNpd3lnRnJhbWUsXHJcbiAgICAgICAgICAgICAgICBfY29kZUFyZWE6IGNvbnRleHRFbC5jb2RlLFxyXG4gICAgICAgICAgICAgICAgX3BsYWNlaG9sZGVyOiBjb250ZXh0RWwucGxhY2Vob2xkZXIsXHJcbiAgICAgICAgICAgICAgICBfcmVzaXppbmdCYXI6IGNvbnRleHRFbC5yZXNpemluZ0JhcixcclxuICAgICAgICAgICAgICAgIF9uYXZpZ2F0aW9uOiBjb250ZXh0RWwubmF2aWdhdGlvbixcclxuICAgICAgICAgICAgICAgIF9jaGFyQ291bnRlcjogY29udGV4dEVsLmNoYXJDb3VudGVyLFxyXG4gICAgICAgICAgICAgICAgX2NoYXJXcmFwcGVyOiBjb250ZXh0RWwuY2hhcldyYXBwZXIsXHJcbiAgICAgICAgICAgICAgICBfbG9hZGluZzogY29udGV4dEVsLmxvYWRpbmcsXHJcbiAgICAgICAgICAgICAgICBfbGluZUJyZWFrZXI6IGNvbnRleHRFbC5saW5lQnJlYWtlcixcclxuICAgICAgICAgICAgICAgIF9saW5lQnJlYWtlcl90OiBjb250ZXh0RWwubGluZUJyZWFrZXJfdCxcclxuICAgICAgICAgICAgICAgIF9saW5lQnJlYWtlcl9iOiBjb250ZXh0RWwubGluZUJyZWFrZXJfYixcclxuICAgICAgICAgICAgICAgIF9yZXNpemVCYWNrOiBjb250ZXh0RWwucmVzaXplQmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgIF9zdGlja3lEdW1teTogY29udGV4dEVsLl9zdGlja3lEdW1teSxcclxuICAgICAgICAgICAgICAgIF9hcnJvdzogY29udGV4dEVsLl9hcnJvd1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gZXZlbnQgZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgY29uc3QgZXZlbnQgPSB7XHJcbiAgICAgICAgX0lFaXNDb21wb3Npbmc6IGZhbHNlLCAvLyBJbiBJRSwgdGhlcmUgaXMgbm8gXCJlLmlzQ29tcG9zaW5nXCIgaW4gdGhlIGtleS11cCBldmVudC5cclxuICAgICAgICBfbGluZUJyZWFrZXJCaW5kOiBudWxsLFxyXG4gICAgICAgIF9yZXNwb25zaXZlQ3VycmVudFNpemU6ICdkZWZhdWx0JyxcclxuICAgICAgICBfcmVzcG9uc2l2ZUJ1dHRvblNpemU6IG51bGwsXHJcbiAgICAgICAgX3Jlc3BvbnNpdmVCdXR0b25zOiBudWxsLFxyXG4gICAgICAgIF9kZWxldGVLZXlDb2RlOiBuZXcgX3cuUmVnRXhwKCdeKDh8NDYpJCcpLFxyXG4gICAgICAgIF9jdXJzb3JNb3ZlS2V5Q29kZTogbmV3IF93LlJlZ0V4cCgnXig4fDNbMi05XXw0MHw0NikkJyksXHJcbiAgICAgICAgX2RpcmVjdGlvbktleUNvZGU6IG5ldyBfdy5SZWdFeHAoJ14oOHwxM3wzWzItOV18NDB8NDYpJCcpLFxyXG4gICAgICAgIF9ub25UZXh0S2V5Q29kZTogbmV3IF93LlJlZ0V4cCgnXig4fDEzfDFbNi05XXwyMHwyN3wzWzMtOV18NDB8NDV8NDZ8MTFbMi05XXwxMlswLTNdfDE0NHwxNDUpJCcpLFxyXG4gICAgICAgIF9oaXN0b3J5SWdub3JlS2V5Q29kZTogbmV3IF93LlJlZ0V4cCgnXigxWzYtOV18MjB8Mjd8M1szLTldfDQwfDQ1fDExWzItOV18MTJbMC0zXXwxNDR8MTQ1KSQnKSxcclxuICAgICAgICBfb25CdXR0b25zQ2hlY2s6IG5ldyBfdy5SZWdFeHAoJ14oJyArIF93Lk9iamVjdC5rZXlzKG9wdGlvbnMuX3RleHRUYWdzTWFwKS5qb2luKCd8JykgKyAnKSQnLCAnaScpLFxyXG4gICAgICAgIF9mcm9udFplcm9XaWR0aFJlZzogbmV3IF93LlJlZ0V4cCh1dGlsLnplcm9XaWR0aFNwYWNlICsgJysnLCAnJyksXHJcbiAgICAgICAgX2tleUNvZGVTaG9ydGN1dDoge1xyXG4gICAgICAgICAgICA2NTogJ0EnLFxyXG4gICAgICAgICAgICA2NjogJ0InLFxyXG4gICAgICAgICAgICA4MzogJ1MnLFxyXG4gICAgICAgICAgICA4NTogJ1UnLFxyXG4gICAgICAgICAgICA3MzogJ0knLFxyXG4gICAgICAgICAgICA4OTogJ1knLFxyXG4gICAgICAgICAgICA5MDogJ1onLFxyXG4gICAgICAgICAgICAyMTk6ICdbJyxcclxuICAgICAgICAgICAgMjIxOiAnXSdcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfc2hvcnRjdXRDb21tYW5kOiBmdW5jdGlvbiAoa2V5Q29kZSwgc2hpZnQpIHtcclxuICAgICAgICAgICAgbGV0IGNvbW1hbmQgPSBudWxsO1xyXG4gICAgICAgICAgICBjb25zdCBrZXlTdHIgPSBldmVudC5fa2V5Q29kZVNob3J0Y3V0W2tleUNvZGVdO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChrZXlTdHIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0EnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAnc2VsZWN0QWxsJztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ0InOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZignYm9sZCcpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gJ2JvbGQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1MnOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaGlmdCAmJiBvcHRpb25zLnNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZignc3RyaWtlJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAnc3RyaWtlJztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzaGlmdCAmJiBvcHRpb25zLnNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZignc2F2ZScpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gJ3NhdmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1UnOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3J0Y3V0c0Rpc2FibGUuaW5kZXhPZigndW5kZXJsaW5lJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAndW5kZXJsaW5lJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdJJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ2l0YWxpYycpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gJ2l0YWxpYyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnWic6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvcnRjdXRzRGlzYWJsZS5pbmRleE9mKCd1bmRvJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGlmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9ICdyZWRvJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAndW5kbyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdZJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ3VuZG8nKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9ICdyZWRvJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdbJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ2luZGVudCcpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gb3B0aW9ucy5ydGwgPyAnaW5kZW50JyA6ICdvdXRkZW50JztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICddJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zaG9ydGN1dHNEaXNhYmxlLmluZGV4T2YoJ2luZGVudCcpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gb3B0aW9ucy5ydGwgPyAnb3V0ZGVudCcgOiAnaW5kZW50JztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghY29tbWFuZCkgcmV0dXJuICEha2V5U3RyO1xyXG5cclxuICAgICAgICAgICAgY29yZS5jb21tYW5kSGFuZGxlcihjb3JlLmNvbW1hbmRNYXBbY29tbWFuZF0sIGNvbW1hbmQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfYXBwbHlUYWdFZmZlY3RzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh1dGlsLmhhc0NsYXNzKGNvbnRleHQuZWxlbWVudC53eXNpd3lnLCAnc2UtcmVhZC1vbmx5JykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHNlbGVjdGlvbk5vZGUgPSBjb3JlLmdldFNlbGVjdGlvbk5vZGUoKTtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk5vZGUgPT09IGNvcmUuZWZmZWN0Tm9kZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb3JlLmVmZmVjdE5vZGUgPSBzZWxlY3Rpb25Ob2RlO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbWFyZ2luRGlyID0gb3B0aW9ucy5ydGwgPyAnbWFyZ2luUmlnaHQnIDogJ21hcmdpbkxlZnQnO1xyXG4gICAgICAgICAgICBjb25zdCBjb21tYW5kTWFwID0gY29yZS5jb21tYW5kTWFwO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc09uQ2hlY2sgPSBldmVudC5fb25CdXR0b25zQ2hlY2s7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRNYXBOb2RlcyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Tm9kZXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZVBsdWdpbnMgPSBjb3JlLmFjdGl2ZVBsdWdpbnM7XHJcbiAgICAgICAgICAgIGNvbnN0IGNMZW4gPSBhY3RpdmVQbHVnaW5zLmxlbmd0aDtcclxuICAgICAgICAgICAgbGV0IG5vZGVOYW1lID0gJyc7XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAoc2VsZWN0aW9uTm9kZS5maXJzdENoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ob2RlID0gc2VsZWN0aW9uTm9kZS5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtZW50ID0gc2VsZWN0aW9uTm9kZTsgIXV0aWwuaXNXeXNpd3lnRGl2KGVsZW1lbnQpOyBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubm9kZVR5cGUgIT09IDEgfHwgdXRpbC5pc0JyZWFrKGVsZW1lbnQpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudE5vZGVzLnB1c2gobm9kZU5hbWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8qIEFjdGl2ZSBwbHVnaW5zICovXHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvcmUuaXNSZWFkT25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBuYW1lOyBjIDwgY0xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBhY3RpdmVQbHVnaW5zW2NdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZE1hcE5vZGVzLmluZGV4T2YobmFtZSkgPT09IC0xICYmIHBsdWdpbnNbbmFtZV0uYWN0aXZlLmNhbGwoY29yZSwgZWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRNYXBOb2Rlcy5wdXNoKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChlbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qIE91dGRlbnQgKi9cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZE1hcE5vZGVzLmluZGV4T2YoJ09VVERFTlQnKSA9PT0gLTEgJiYgY29tbWFuZE1hcC5PVVRERU5UICYmICF1dGlsLmlzSW1wb3J0YW50RGlzYWJsZWQoY29tbWFuZE1hcC5PVVRERU5UKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3RDZWxsKGVsZW1lbnQpIHx8IChlbGVtZW50LnN0eWxlW21hcmdpbkRpcl0gJiYgdXRpbC5nZXROdW1iZXIoZWxlbWVudC5zdHlsZVttYXJnaW5EaXJdLCAwKSA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kTWFwTm9kZXMucHVzaCgnT1VUREVOVCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcC5PVVRERU5ULnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLyogSW5kZW50ICovXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRNYXBOb2Rlcy5pbmRleE9mKCdJTkRFTlQnKSA9PT0gLTEgJiYgY29tbWFuZE1hcC5JTkRFTlQgJiYgIXV0aWwuaXNJbXBvcnRhbnREaXNhYmxlZChjb21tYW5kTWFwLklOREVOVCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcE5vZGVzLnB1c2goJ0lOREVOVCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3RDZWxsKGVsZW1lbnQpICYmICFlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRNYXAuSU5ERU5ULnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRNYXAuSU5ERU5ULnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIGRlZmF1bHQgYWN0aXZlIGJ1dHRvbnMgW3N0cm9uZywgaW5zLCBlbSwgZGVsLCBzdWIsIHN1cF0gKi9cclxuICAgICAgICAgICAgICAgIGlmIChjbGFzc09uQ2hlY2sgJiYgY2xhc3NPbkNoZWNrLnRlc3Qobm9kZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcE5vZGVzLnB1c2gobm9kZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoY29tbWFuZE1hcFtub2RlTmFtZV0sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29yZS5fc2V0S2V5RWZmZWN0KGNvbW1hbmRNYXBOb2Rlcyk7XHJcblxyXG4gICAgICAgICAgICAvKiogc2F2ZSBjdXJyZW50IG5vZGVzICovXHJcbiAgICAgICAgICAgIGNvcmUuX3ZhcmlhYmxlLmN1cnJlbnROb2RlcyA9IGN1cnJlbnROb2Rlcy5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgIGNvcmUuX3ZhcmlhYmxlLmN1cnJlbnROb2Rlc01hcCA9IGNvbW1hbmRNYXBOb2RlcztcclxuXHJcbiAgICAgICAgICAgIC8qKiAgRGlzcGxheXMgdGhlIGN1cnJlbnQgbm9kZSBzdHJ1Y3R1cmUgdG8gcmVzaXppbmdCYXIgKi9cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvd1BhdGhMYWJlbCkgY29udGV4dC5lbGVtZW50Lm5hdmlnYXRpb24udGV4dENvbnRlbnQgPSBjb3JlLl92YXJpYWJsZS5jdXJyZW50Tm9kZXMuam9pbignID4gJyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2J1dHRvbnNFdmVudEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgICAgICAgICAgaWYgKGNvcmUuX2JpbmRDb250cm9sbGVyc09mZikgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgIGlmICgvXihpbnB1dHx0ZXh0YXJlYXxzZWxlY3R8b3B0aW9uKSQvaS50ZXN0KHRhcmdldC5ub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvcmUuX2FudGlCbHVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1dGlsLmdldFBhcmVudEVsZW1lbnQodGFyZ2V0LCAnLnNlLXN1Ym1lbnUnKSkge1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGNvcmUuX25vdEhpZGVUb29sYmFyID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb21tYW5kID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gdGFyZ2V0LmNsYXNzTmFtZTtcclxuXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoIWNvbW1hbmQgJiYgIS9zZS1tZW51LWxpc3QvLnRlc3QoY2xhc3NOYW1lKSAmJiAhL3N1bi1lZGl0b3ItY29tbW9uLy50ZXN0KGNsYXNzTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gdGFyZ2V0LmNsYXNzTmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZCA9PT0gY29yZS5fc3VibWVudU5hbWUgfHwgY29tbWFuZCA9PT0gY29yZS5fY29udGFpbmVyTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhZGRHbG9iYWxFdmVudDogZnVuY3Rpb24gKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgY29yZS5fd3cuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29yZS5fdy5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcjogbGlzdGVuZXIsXHJcbiAgICAgICAgICAgICAgICB1c2VDYXB0dXJlOiB1c2VDYXB0dXJlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuICAgIFxyXG4gICAgICAgIHJlbW92ZUdsb2JhbEV2ZW50OiBmdW5jdGlvbiAodHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpIHtcclxuICAgICAgICAgICAgaWYgKCF0eXBlKSByZXR1cm47XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgbGlzdGVuZXIgPSB0eXBlLmxpc3RlbmVyO1xyXG4gICAgICAgICAgICAgICAgdXNlQ2FwdHVyZSA9IHR5cGUudXNlQ2FwdHVyZTtcclxuICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLnR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaWZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjb3JlLl93dy5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb3JlLl93LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uQ2xpY2tfdG9vbGJhcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgbGV0IHRhcmdldCA9IGUudGFyZ2V0O1xyXG4gICAgICAgICAgICBsZXQgZGlzcGxheSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGlzcGxheScpO1xyXG4gICAgICAgICAgICBsZXQgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xyXG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gdGFyZ2V0LmNsYXNzTmFtZTtcclxuICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKHRhcmdldC5wYXJlbnROb2RlICYmICFjb21tYW5kICYmICEvc2UtbWVudS1saXN0Ly50ZXN0KGNsYXNzTmFtZSkgJiYgIS9zZS10b29sYmFyLy50ZXN0KGNsYXNzTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpO1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGlzcGxheScpO1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gdGFyZ2V0LmNsYXNzTmFtZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFjb21tYW5kICYmICFkaXNwbGF5KSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQuZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvcmUuYWN0aW9uQ2FsbChjb21tYW5kLCBkaXNwbGF5LCB0YXJnZXQpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9fc2VsZWN0aW9uU3luY0V2ZW50OiBudWxsLFxyXG4gICAgICAgIG9uTW91c2VEb3duX3d5c2l3eWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLmlzUmVhZE9ubHkgfHwgdXRpbC5pc05vbkVkaXRhYmxlKGNvbnRleHQuZWxlbWVudC53eXNpd3lnKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodXRpbC5faXNFeGNsdWRlU2VsZWN0aW9uRWxlbWVudChlLnRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZXZlbnQucmVtb3ZlR2xvYmFsRXZlbnQoZXZlbnQuX19zZWxlY3Rpb25TeW5jRXZlbnQpO1xyXG4gICAgICAgICAgICBldmVudC5fX3NlbGVjdGlvblN5bmNFdmVudCA9IGV2ZW50LmFkZEdsb2JhbEV2ZW50KCdtb3VzZXVwJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29yZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuX2VkaXRvclJhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBldmVudC5yZW1vdmVHbG9iYWxFdmVudChldmVudC5fX3NlbGVjdGlvblN5bmNFdmVudCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gdXNlciBldmVudFxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5vbk1vdXNlRG93biA9PT0gJ2Z1bmN0aW9uJyAmJiBmdW5jdGlvbnMub25Nb3VzZURvd24oZSwgY29yZSkgPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0YWJsZUNlbGwgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoZS50YXJnZXQsIHV0aWwuaXNDZWxsKTtcclxuICAgICAgICAgICAgaWYgKHRhYmxlQ2VsbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVQbHVnaW4gPSBjb3JlLnBsdWdpbnMudGFibGU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGFibGVQbHVnaW4gJiYgdGFibGVDZWxsICE9PSB0YWJsZVBsdWdpbi5fZml4ZWRDZWxsICYmICF0YWJsZVBsdWdpbi5fc2hpZnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLmNhbGxQbHVnaW4oJ3RhYmxlJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVBsdWdpbi5vblRhYmxlQ2VsbE11bHRpU2VsZWN0LmNhbGwoY29yZSwgdGFibGVDZWxsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb3JlLl9pc0JhbGxvb24pIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50Ll9oaWRlVG9vbGJhcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25DbGlja193eXNpd3lnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAvLyBpZiAodXRpbC5oYXNDbGFzcyhjb250ZXh0LmVsZW1lbnQud3lzaXd5ZywgJ3NlLXJlYWQtb25seScpKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlLnRhcmdldDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb3JlLmlzUmVhZE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzQW5jaG9yKHRhcmdldEVsZW1lbnQpKXtcclxuICAgICAgICAgICAgICAgICAgICBfdy5vcGVuKHRhcmdldEVsZW1lbnQuaHJlZiwgdGFyZ2V0RWxlbWVudC50YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXRpbC5pc05vbkVkaXRhYmxlKGNvbnRleHQuZWxlbWVudC53eXNpd3lnKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgLy8gdXNlciBldmVudFxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5vbkNsaWNrID09PSAnZnVuY3Rpb24nICYmIGZ1bmN0aW9ucy5vbkNsaWNrKGUsIGNvcmUpID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZUNvbXBvbmVudEluZm8gPSBjb3JlLmdldEZpbGVDb21wb25lbnQodGFyZ2V0RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlQ29tcG9uZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgY29yZS5zZWxlY3RDb21wb25lbnQoZmlsZUNvbXBvbmVudEluZm8udGFyZ2V0LCBmaWxlQ29tcG9uZW50SW5mby5wbHVnaW5OYW1lKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlnY2FwdGlvbiA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudCh0YXJnZXRFbGVtZW50LCAnRklHQ0FQVElPTicpO1xyXG4gICAgICAgICAgICBpZiAoZmlnY2FwdGlvbiAmJiB1dGlsLmlzTm9uRWRpdGFibGUoZmlnY2FwdGlvbikpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGZpZ2NhcHRpb24uZm9jdXMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29yZS5faXNJbmxpbmUgJiYgIWNvcmUuX2lubGluZVRvb2xiYXJBdHRyLmlzU2hvdykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9zaG93VG9vbGJhcklubGluZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWRlVG9vbGJhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX2hpZGVUb29sYmFyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZ2NhcHRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIGhpZGVUb29sYmFyKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmaWdjYXB0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBoaWRlVG9vbGJhcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvcmUuX2VkaXRvclJhbmdlKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZS5kZXRhaWwgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgIGxldCByYW5nZSA9IGNvcmUuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChyYW5nZS5lbmRDb250YWluZXIpICYmIHJhbmdlLmVuZE9mZnNldCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gY29yZS5zZXRSYW5nZShyYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRPZmZzZXQsIHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5zdGFydENvbnRhaW5lci5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuX3JhbmdlSW5mbyhyYW5nZSwgY29yZS5nZXRTZWxlY3Rpb24oKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbk5vZGUgPSBjb3JlLmdldFNlbGVjdGlvbk5vZGUoKTtcclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0RWwgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQoc2VsZWN0aW9uTm9kZSwgbnVsbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlRWwgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChzZWxlY3Rpb25Ob2RlLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb25Ob2RlRGVlcGVzdEZpcnN0Q2hpbGQgPSBzZWxlY3Rpb25Ob2RlO1xyXG4gICAgICAgICAgICB3aGlsZSAoc2VsZWN0aW9uTm9kZURlZXBlc3RGaXJzdENoaWxkICYmIHNlbGVjdGlvbk5vZGVEZWVwZXN0Rmlyc3RDaGlsZC5maXJzdENoaWxkKSBzZWxlY3Rpb25Ob2RlRGVlcGVzdEZpcnN0Q2hpbGQgPSBzZWxlY3Rpb25Ob2RlRGVlcGVzdEZpcnN0Q2hpbGQuZmlyc3RDaGlsZDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ29tcG9uZW50SW5mbyA9IGNvcmUuZ2V0RmlsZUNvbXBvbmVudChzZWxlY3Rpb25Ob2RlRGVlcGVzdEZpcnN0Q2hpbGQpO1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRDb21wb25lbnRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IGNvcmUuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgIGlmICghcmFuZ2VFbCAmJiByYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyKSBjb3JlLnNlbGVjdENvbXBvbmVudChzZWxlY3RlZENvbXBvbmVudEluZm8udGFyZ2V0LCBzZWxlY3RlZENvbXBvbmVudEluZm8ucGx1Z2luTmFtZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29yZS5jdXJyZW50RmlsZUNvbXBvbmVudEluZm8pIGNvcmUuY29udHJvbGxlcnNPZmYoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghZm9ybWF0RWwgJiYgIXV0aWwuaXNOb25FZGl0YWJsZSh0YXJnZXRFbGVtZW50KSAmJiAhdXRpbC5pc0xpc3QocmFuZ2VFbCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gY29yZS5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChyYW5nZS5zdGFydENvbnRhaW5lcikgPT09IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChyYW5nZS5lbmRDb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0KHJhbmdlRWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb0xpID0gdXRpbC5jcmVhdGVFbGVtZW50KCdMSScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2TGkgPSBzZWxlY3Rpb25Ob2RlLm5leHRFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgb0xpLmFwcGVuZENoaWxkKHNlbGVjdGlvbk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZUVsLmluc2VydEJlZm9yZShvTGksIHByZXZMaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF1dGlsLmlzV3lzaXd5Z0RpdihzZWxlY3Rpb25Ob2RlKSAmJiAhdXRpbC5pc0NvbXBvbmVudChzZWxlY3Rpb25Ob2RlKSAmJiAoIXV0aWwuaXNUYWJsZShzZWxlY3Rpb25Ob2RlKSB8fCB1dGlsLmlzQ2VsbChzZWxlY3Rpb25Ob2RlKSkgJiYgY29yZS5fc2V0RGVmYXVsdEZvcm1hdCh1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KHJhbmdlRWwpID8gJ0RJVicgOiBvcHRpb25zLmRlZmF1bHRUYWcpICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9hcHBseVRhZ0VmZmVjdHMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5fYXBwbHlUYWdFZmZlY3RzKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb3JlLl9pc0JhbGxvb24pIF93LnNldFRpbWVvdXQoZXZlbnQuX3RvZ2dsZVRvb2xiYXJCYWxsb29uKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfYmFsbG9vbkRlbGF5OiBudWxsLFxyXG4gICAgICAgIF9zaG93VG9vbGJhckJhbGxvb25EZWxheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuX2JhbGxvb25EZWxheSkge1xyXG4gICAgICAgICAgICAgICAgX3cuY2xlYXJUaW1lb3V0KGV2ZW50Ll9iYWxsb29uRGVsYXkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBldmVudC5fYmFsbG9vbkRlbGF5ID0gX3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBfdy5jbGVhclRpbWVvdXQodGhpcy5fYmFsbG9vbkRlbGF5KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2JhbGxvb25EZWxheSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93VG9vbGJhckJhbGxvb24oKTtcclxuICAgICAgICAgICAgfS5iaW5kKGV2ZW50KSwgMzUwKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfdG9nZ2xlVG9vbGJhckJhbGxvb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKGNvcmUpIHtcclxuICAgICAgICAgICAgICAgIGNvcmUuX2VkaXRvclJhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IGNvcmUuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb3JlLl9iaW5kQ29udHJvbGxlcnNPZmYgfHwgKCFjb3JlLl9pc0JhbGxvb25BbHdheXMgJiYgcmFuZ2UuY29sbGFwc2VkKSkgZXZlbnQuX2hpZGVUb29sYmFyKCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGV2ZW50Ll9zaG93VG9vbGJhckJhbGxvb24ocmFuZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3Nob3dUb29sYmFyQmFsbG9vbjogZnVuY3Rpb24gKHJhbmdlT2JqKSB7XHJcbiAgICAgICAgICAgIGlmICghY29yZS5faXNCYWxsb29uKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHJhbmdlT2JqIHx8IGNvcmUuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgY29uc3QgdG9vbGJhciA9IGNvbnRleHQuZWxlbWVudC50b29sYmFyO1xyXG4gICAgICAgICAgICBjb25zdCB0b3BBcmVhID0gY29udGV4dC5lbGVtZW50LnRvcEFyZWE7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGNvcmUuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgaXNEaXJUb3A7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLl9pc0JhbGxvb25BbHdheXMgJiYgcmFuZ2UuY29sbGFwc2VkKSB7XHJcbiAgICAgICAgICAgICAgICBpc0RpclRvcCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmZvY3VzTm9kZSA9PT0gc2VsZWN0aW9uLmFuY2hvck5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGlzRGlyVG9wID0gc2VsZWN0aW9uLmZvY3VzT2Zmc2V0IDwgc2VsZWN0aW9uLmFuY2hvck9mZnNldDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB1dGlsLmdldExpc3RDaGlsZE5vZGVzKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLCBudWxsKTtcclxuICAgICAgICAgICAgICAgIGlzRGlyVG9wID0gdXRpbC5nZXRBcnJheUluZGV4KGNoaWxkTm9kZXMsIHNlbGVjdGlvbi5mb2N1c05vZGUpIDwgdXRpbC5nZXRBcnJheUluZGV4KGNoaWxkTm9kZXMsIHNlbGVjdGlvbi5hbmNob3JOb2RlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcclxuICAgICAgICAgICAgcmVjdHMgPSByZWN0c1tpc0RpclRvcCA/IDAgOiByZWN0cy5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdsb2JhbFNjcm9sbCA9IGNvcmUuZ2V0R2xvYmFsU2Nyb2xsT2Zmc2V0KCk7XHJcbiAgICAgICAgICAgIGxldCBzY3JvbGxMZWZ0ID0gZ2xvYmFsU2Nyb2xsLmxlZnQ7XHJcbiAgICAgICAgICAgIGxldCBzY3JvbGxUb3AgPSBnbG9iYWxTY3JvbGwudG9wO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZWRpdG9yV2lkdGggPSB0b3BBcmVhLm9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZXZlbnQuX2dldEVkaXRvck9mZnNldHMobnVsbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0aWNreVRvcCA9IG9mZnNldHMudG9wO1xyXG4gICAgICAgICAgICBjb25zdCBlZGl0b3JMZWZ0ID0gb2Zmc2V0cy5sZWZ0O1xyXG5cclxuICAgICAgICAgICAgdG9vbGJhci5zdHlsZS50b3AgPSAnLTEwMDAwcHgnO1xyXG4gICAgICAgICAgICB0b29sYmFyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgICAgICAgdG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHJcbiAgICAgICAgICAgIGlmICghcmVjdHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBjb3JlLmdldFNlbGVjdGlvbk5vZGUoKTtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChub2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHplcm9XaWR0aCA9IHV0aWwuY3JlYXRlVGV4dE5vZGUodXRpbC56ZXJvV2lkdGhTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5pbnNlcnROb2RlKHplcm9XaWR0aCwgbnVsbCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UoemVyb1dpZHRoLCAxLCB6ZXJvV2lkdGgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuX2VkaXRvclJhbmdlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdHMgPSBjb3JlLmdldFJhbmdlKCkuZ2V0Q2xpZW50UmVjdHMoKTtcclxuICAgICAgICAgICAgICAgICAgICByZWN0cyA9IHJlY3RzW2lzRGlyVG9wID8gMCA6IHJlY3RzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghcmVjdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlT2Zmc2V0ID0gdXRpbC5nZXRPZmZzZXQobm9kZSwgY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdHMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IG5vZGVPZmZzZXQubGVmdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBub2RlT2Zmc2V0LnRvcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IG5vZGVPZmZzZXQubGVmdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tOiBub2RlT2Zmc2V0LnRvcCArIG5vZGUub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub1RleHQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbExlZnQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcCA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaXNEaXJUb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBhcnJvd01hcmdpbiA9IF93Lk1hdGgucm91bmQoY29udGV4dC5lbGVtZW50Ll9hcnJvdy5vZmZzZXRXaWR0aCAvIDIpO1xyXG4gICAgICAgICAgICBjb25zdCB0b29sYmFyV2lkdGggPSB0b29sYmFyLm9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICBjb25zdCB0b29sYmFySGVpZ2h0ID0gdG9vbGJhci5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGlmcmFtZVJlY3RzID0gL2lmcmFtZS9pLnRlc3QoY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5ub2RlTmFtZSkgPyBjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLmdldENsaWVudFJlY3RzKClbMF0gOiBudWxsO1xyXG4gICAgICAgICAgICBpZiAoaWZyYW1lUmVjdHMpIHtcclxuICAgICAgICAgICAgICAgIHJlY3RzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHJlY3RzLmxlZnQgKyBpZnJhbWVSZWN0cy5sZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogcmVjdHMudG9wICsgaWZyYW1lUmVjdHMudG9wLFxyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiByZWN0cy5yaWdodCArIGlmcmFtZVJlY3RzLnJpZ2h0IC0gaWZyYW1lUmVjdHMud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiByZWN0cy5ib3R0b20gKyBpZnJhbWVSZWN0cy5ib3R0b20gLSBpZnJhbWVSZWN0cy5oZWlnaHRcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGV2ZW50Ll9zZXRUb29sYmFyT2Zmc2V0KGlzRGlyVG9wLCByZWN0cywgdG9vbGJhciwgZWRpdG9yTGVmdCwgZWRpdG9yV2lkdGgsIHNjcm9sbExlZnQsIHNjcm9sbFRvcCwgc3RpY2t5VG9wLCBhcnJvd01hcmdpbik7XHJcbiAgICAgICAgICAgIGlmICh0b29sYmFyV2lkdGggIT09IHRvb2xiYXIub2Zmc2V0V2lkdGggfHwgdG9vbGJhckhlaWdodCAhPT0gdG9vbGJhci5vZmZzZXRIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50Ll9zZXRUb29sYmFyT2Zmc2V0KGlzRGlyVG9wLCByZWN0cywgdG9vbGJhciwgZWRpdG9yTGVmdCwgZWRpdG9yV2lkdGgsIHNjcm9sbExlZnQsIHNjcm9sbFRvcCwgc3RpY2t5VG9wLCBhcnJvd01hcmdpbik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRvb2xiYXJDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRvclBhcmVudCA9IHRvcEFyZWEucGFyZW50RWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGFpbmVyID0gb3B0aW9ucy50b29sYmFyQ29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgbGV0IGxlZnQgPSBjb250YWluZXIub2Zmc2V0TGVmdDtcclxuICAgICAgICAgICAgICAgIGxldCB0b3AgPSBjb250YWluZXIub2Zmc2V0VG9wO1xyXG5cclxuICAgICAgICAgICAgICAgIHdoaWxlKCFjb250YWluZXIucGFyZW50RWxlbWVudC5jb250YWlucyhlZGl0b3JQYXJlbnQpIHx8ICEvXihCT0RZfEhUTUwpJC9pLnRlc3QoY29udGFpbmVyLnBhcmVudEVsZW1lbnQubm9kZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLm9mZnNldFBhcmVudDtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0ICs9IGNvbnRhaW5lci5vZmZzZXRMZWZ0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRvcCArPSBjb250YWluZXIub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUubGVmdCA9ICh0b29sYmFyLm9mZnNldExlZnQgLSBsZWZ0ICsgdG9wQXJlYS5vZmZzZXRMZWZ0KSArICdweCc7XHJcbiAgICAgICAgICAgICAgICB0b29sYmFyLnN0eWxlLnRvcCA9ICh0b29sYmFyLm9mZnNldFRvcCAtIHRvcCArIHRvcEFyZWEub2Zmc2V0VG9wKSArICdweCc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUudmlzaWJpbGl0eSA9ICcnO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9zZXRUb29sYmFyT2Zmc2V0OiBmdW5jdGlvbiAoaXNEaXJUb3AsIHJlY3RzLCB0b29sYmFyLCBlZGl0b3JMZWZ0LCBlZGl0b3JXaWR0aCwgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wLCBzdGlja3lUb3AsIGFycm93TWFyZ2luKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b29sYmFyV2lkdGggPSB0b29sYmFyLm9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICBjb25zdCB0b29sYmFySGVpZ2h0ID0gcmVjdHMubm9UZXh0ICYmICFpc0RpclRvcCA/IDAgOiB0b29sYmFyLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFic29sdXRlTGVmdCA9IChpc0RpclRvcCA/IHJlY3RzLmxlZnQgOiByZWN0cy5yaWdodCkgLSBlZGl0b3JMZWZ0IC0gKHRvb2xiYXJXaWR0aCAvIDIpICsgc2Nyb2xsTGVmdDtcclxuICAgICAgICAgICAgY29uc3Qgb3ZlclJpZ2h0ID0gYWJzb2x1dGVMZWZ0ICsgdG9vbGJhcldpZHRoIC0gZWRpdG9yV2lkdGg7XHJcblxyXG4gICAgICAgICAgICBsZXQgdCA9IChpc0RpclRvcCA/IHJlY3RzLnRvcCAtIHRvb2xiYXJIZWlnaHQgLSBhcnJvd01hcmdpbiA6IHJlY3RzLmJvdHRvbSArIGFycm93TWFyZ2luKSAtIChyZWN0cy5ub1RleHQgPyAwIDogc3RpY2t5VG9wKSArIHNjcm9sbFRvcDtcclxuICAgICAgICAgICAgbGV0IGwgPSBhYnNvbHV0ZUxlZnQgPCAwID8gcGFkZGluZyA6IG92ZXJSaWdodCA8IDAgPyBhYnNvbHV0ZUxlZnQgOiBhYnNvbHV0ZUxlZnQgLSBvdmVyUmlnaHQgLSBwYWRkaW5nIC0gMTtcclxuXHJcbiAgICAgICAgICAgIGxldCByZXNldFRvcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBzcGFjZSA9IHQgKyAoaXNEaXJUb3AgPyAoZXZlbnQuX2dldEVkaXRvck9mZnNldHMobnVsbCkudG9wKSA6ICh0b29sYmFyLm9mZnNldEhlaWdodCAtIGNvbnRleHQuZWxlbWVudC53eXNpd3lnLm9mZnNldEhlaWdodCkpO1xyXG4gICAgICAgICAgICBpZiAoIWlzRGlyVG9wICYmIHNwYWNlID4gMCAmJiBldmVudC5fZ2V0UGFnZUJvdHRvbVNwYWNlKCkgPCBzcGFjZSkge1xyXG4gICAgICAgICAgICAgICAgaXNEaXJUb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmVzZXRUb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzRGlyVG9wICYmIF9kLmRvY3VtZW50RWxlbWVudC5vZmZzZXRUb3AgPiBzcGFjZSkge1xyXG4gICAgICAgICAgICAgICAgaXNEaXJUb3AgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJlc2V0VG9wID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJlc2V0VG9wKSB0ID0gKGlzRGlyVG9wID8gcmVjdHMudG9wIC0gdG9vbGJhckhlaWdodCAtIGFycm93TWFyZ2luIDogcmVjdHMuYm90dG9tICsgYXJyb3dNYXJnaW4pIC0gKHJlY3RzLm5vVGV4dCA/IDAgOiBzdGlja3lUb3ApICsgc2Nyb2xsVG9wO1xyXG5cclxuICAgICAgICAgICAgdG9vbGJhci5zdHlsZS5sZWZ0ID0gX3cuTWF0aC5mbG9vcihsKSArICdweCc7XHJcbiAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUudG9wID0gX3cuTWF0aC5mbG9vcih0KSArICdweCc7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNEaXJUb3ApIHtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3MoY29udGV4dC5lbGVtZW50Ll9hcnJvdywgJ3NlLWFycm93LXVwJyk7XHJcbiAgICAgICAgICAgICAgICB1dGlsLmFkZENsYXNzKGNvbnRleHQuZWxlbWVudC5fYXJyb3csICdzZS1hcnJvdy1kb3duJyk7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuX2Fycm93LnN0eWxlLnRvcCA9IHRvb2xiYXJIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyhjb250ZXh0LmVsZW1lbnQuX2Fycm93LCAnc2UtYXJyb3ctZG93bicpO1xyXG4gICAgICAgICAgICAgICAgdXRpbC5hZGRDbGFzcyhjb250ZXh0LmVsZW1lbnQuX2Fycm93LCAnc2UtYXJyb3ctdXAnKTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5fYXJyb3cuc3R5bGUudG9wID0gLWFycm93TWFyZ2luICsgJ3B4JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgYXJyb3dfbGVmdCA9IF93Lk1hdGguZmxvb3IoKHRvb2xiYXJXaWR0aCAvIDIpICsgKGFic29sdXRlTGVmdCAtIGwpKTtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50Ll9hcnJvdy5zdHlsZS5sZWZ0ID0gKGFycm93X2xlZnQgKyBhcnJvd01hcmdpbiA+IHRvb2xiYXIub2Zmc2V0V2lkdGggPyB0b29sYmFyLm9mZnNldFdpZHRoIC0gYXJyb3dNYXJnaW4gOiBhcnJvd19sZWZ0IDwgYXJyb3dNYXJnaW4gPyBhcnJvd01hcmdpbiA6IGFycm93X2xlZnQpICsgJ3B4JztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfc2hvd1Rvb2xiYXJJbmxpbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCFjb3JlLl9pc0lubGluZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdG9vbGJhciA9IGNvbnRleHQuZWxlbWVudC50b29sYmFyO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy50b29sYmFyQ29udGFpbmVyKSB0b29sYmFyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcclxuICAgICAgICAgICAgZWxzZSB0b29sYmFyLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuXHJcbiAgICAgICAgICAgIHRvb2xiYXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgICAgICAgICB0b29sYmFyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICBjb3JlLl9pbmxpbmVUb29sYmFyQXR0ci53aWR0aCA9IHRvb2xiYXIuc3R5bGUud2lkdGggPSBvcHRpb25zLnRvb2xiYXJXaWR0aDtcclxuICAgICAgICAgICAgY29yZS5faW5saW5lVG9vbGJhckF0dHIudG9wID0gdG9vbGJhci5zdHlsZS50b3AgPSAob3B0aW9ucy50b29sYmFyQ29udGFpbmVyID8gMCA6ICgtMSAtIHRvb2xiYXIub2Zmc2V0SGVpZ2h0KSkgKyAncHgnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMuc2hvd0lubGluZSA9PT0gJ2Z1bmN0aW9uJykgZnVuY3Rpb25zLnNob3dJbmxpbmUodG9vbGJhciwgY29udGV4dCwgY29yZSk7XHJcblxyXG4gICAgICAgICAgICBldmVudC5vblNjcm9sbF93aW5kb3coKTtcclxuICAgICAgICAgICAgY29yZS5faW5saW5lVG9vbGJhckF0dHIuaXNTaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdG9vbGJhci5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2hpZGVUb29sYmFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghY29yZS5fbm90SGlkZVRvb2xiYXIgJiYgIWNvcmUuX3ZhcmlhYmxlLmlzRnVsbFNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnRvb2xiYXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIGNvcmUuX2lubGluZVRvb2xiYXJBdHRyLmlzU2hvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25JbnB1dF93eXNpd3lnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoL0FVRElPLy50ZXN0KGUudGFyZ2V0Lm5vZGVOYW1lKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoY29yZS5pc1JlYWRPbmx5IHx8IGNvcmUuaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGNvcmUuaGlzdG9yeS5nbyhjb3JlLmhpc3RvcnkuZ2V0Q3VycmVudEluZGV4KCkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IGNvcmUuZ2V0UmFuZ2UoKTtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uTm9kZSA9IGNvcmUuZ2V0U2VsZWN0aW9uTm9kZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXRFbCA9IHV0aWwuZ2V0Rm9ybWF0RWxlbWVudChzZWxlY3Rpb25Ob2RlLCBudWxsKTtcclxuICAgICAgICAgICAgaWYgKCFmb3JtYXRFbCAmJiByYW5nZS5jb2xsYXBzZWQgJiYgIXV0aWwuaXNDb21wb25lbnQoc2VsZWN0aW9uTm9kZSkgJiYgIXV0aWwuaXNMaXN0KHNlbGVjdGlvbk5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZUVsID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoZm9ybWF0RWwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgY29yZS5fc2V0RGVmYXVsdEZvcm1hdCh1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KHJhbmdlRWwpID8gJ0RJVicgOiBvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb3JlLl9lZGl0b3JSYW5nZSgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IChlLmRhdGEgPT09IG51bGwgPyAnJyA6IGUuZGF0YSA9PT0gdW5kZWZpbmVkID8gJyAnIDogZS5kYXRhKSB8fCAnJztcclxuICAgICAgICAgICAgaWYgKCFjb3JlLl9jaGFyQ291bnQoZGF0YSkpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnRcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMub25JbnB1dCA9PT0gJ2Z1bmN0aW9uJyAmJiBmdW5jdGlvbnMub25JbnB1dChlLCBjb3JlKSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgY29yZS5oaXN0b3J5LnB1c2godHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2lzVW5lZGl0YWJsZU5vZGU6IGZ1bmN0aW9uIChyYW5nZSwgaXNGcm9udCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBpc0Zyb250ID8gcmFuZ2Uuc3RhcnRDb250YWluZXIgOiByYW5nZS5lbmRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGlzRnJvbnQgPyByYW5nZS5zdGFydE9mZnNldCA6IHJhbmdlLmVuZE9mZnNldDtcclxuICAgICAgICAgICAgY29uc3Qgc2libGluZ0tleSA9IGlzRnJvbnQgPyAncHJldmlvdXNTaWJsaW5nJyA6ICduZXh0U2libGluZyc7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzRWxlbWVudCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gMTtcclxuICAgICAgICAgICAgbGV0IHNpYmxpbmdOb2RlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgc2libGluZ05vZGUgPSBldmVudC5faXNVbmVkaXRhYmxlTm9kZV9nZXRTaWJsaW5nKGNvbnRhaW5lci5jaGlsZE5vZGVzW29mZnNldF0sIHNpYmxpbmdLZXksIGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2libGluZ05vZGUgJiYgc2libGluZ05vZGUubm9kZVR5cGUgPT09IDEgJiYgc2libGluZ05vZGUuZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSA9PT0gJ2ZhbHNlJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNpYmxpbmdOb2RlID0gZXZlbnQuX2lzVW5lZGl0YWJsZU5vZGVfZ2V0U2libGluZyhjb250YWluZXIsIHNpYmxpbmdLZXksIGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29yZS5pc0VkZ2VQb2ludChjb250YWluZXIsIG9mZnNldCwgaXNGcm9udCA/ICdzdGFydCcgOiAnZW5kJykgJiYgKHNpYmxpbmdOb2RlICYmIHNpYmxpbmdOb2RlLm5vZGVUeXBlID09PSAxICYmIHNpYmxpbmdOb2RlLmdldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJykgPT09ICdmYWxzZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2lzVW5lZGl0YWJsZU5vZGVfZ2V0U2libGluZzogZnVuY3Rpb24gKHNlbGVjdE5vZGUsIHNpYmxpbmdLZXksIGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICBpZiAoIXNlbGVjdE5vZGUpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICBsZXQgc2libGluZ05vZGUgPSBzZWxlY3ROb2RlW3NpYmxpbmdLZXldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFzaWJsaW5nTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgc2libGluZ05vZGUgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQoY29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgIHNpYmxpbmdOb2RlID0gc2libGluZ05vZGUgPyBzaWJsaW5nTm9kZVtzaWJsaW5nS2V5XSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2libGluZ05vZGUgJiYgIXV0aWwuaXNDb21wb25lbnQoc2libGluZ05vZGUpKSBzaWJsaW5nTm9kZSA9IHNpYmxpbmdLZXkgPT09ICdwcmV2aW91c1NpYmxpbmcnID8gc2libGluZ05vZGUuZmlyc3RDaGlsZCA6IHNpYmxpbmdOb2RlLmxhc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzaWJsaW5nTm9kZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfb25TaG9ydGN1dEtleTogZmFsc2UsXHJcbiAgICAgICAgb25LZXlEb3duX3d5c2l3eWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb25Ob2RlID0gY29yZS5nZXRTZWxlY3Rpb25Ob2RlKCk7XHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzSW5wdXRFbGVtZW50KHNlbGVjdGlvbk5vZGUpKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBrZXlDb2RlID0gZS5rZXlDb2RlO1xyXG4gICAgICAgICAgICBjb25zdCBzaGlmdCA9IGUuc2hpZnRLZXk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN0cmwgPSBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5IHx8IGtleUNvZGUgPT09IDkxIHx8IGtleUNvZGUgPT09IDkyIHx8IGtleUNvZGUgPT09IDIyNDtcclxuICAgICAgICAgICAgY29uc3QgYWx0ID0gZS5hbHRLZXk7XHJcbiAgICAgICAgICAgIGV2ZW50Ll9JRWlzQ29tcG9zaW5nID0ga2V5Q29kZSA9PT0gMjI5O1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjdHJsICYmIGNvcmUuaXNSZWFkT25seSAmJiAhZXZlbnQuX2N1cnNvck1vdmVLZXlDb2RlLnRlc3Qoa2V5Q29kZSkpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29yZS5zdWJtZW51T2ZmKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29yZS5faXNCYWxsb29uKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5faGlkZVRvb2xiYXIoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gdXNlciBldmVudFxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5vbktleURvd24gPT09ICdmdW5jdGlvbicgJiYgZnVuY3Rpb25zLm9uS2V5RG93bihlLCBjb3JlKSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIC8qKiBTaG9ydGN1dHMgKi9cclxuICAgICAgICAgICAgaWYgKGN0cmwgJiYgZXZlbnQuX3Nob3J0Y3V0Q29tbWFuZChrZXlDb2RlLCBzaGlmdCkpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50Ll9vblNob3J0Y3V0S2V5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuX29uU2hvcnRjdXRLZXkpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50Ll9vblNob3J0Y3V0S2V5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKiBkZWZhdWx0IGtleSBhY3Rpb24gKi9cclxuICAgICAgICAgICAgaWYgKGtleUNvZGUgPT09IDEzICYmIHV0aWwuaXNGb3JtYXRFbGVtZW50KGNvcmUuZ2V0UmFuZ2UoKS5zdGFydENvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgIGNvcmUuX3Jlc2V0UmFuZ2VUb1RleHROb2RlKCk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ob2RlID0gY29yZS5nZXRTZWxlY3Rpb25Ob2RlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gY29yZS5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RSYW5nZSA9ICFyYW5nZS5jb2xsYXBzZWQgfHwgcmFuZ2Uuc3RhcnRDb250YWluZXIgIT09IHJhbmdlLmVuZENvbnRhaW5lcjtcclxuICAgICAgICAgICAgY29uc3QgZmlsZUNvbXBvbmVudE5hbWUgPSBjb3JlLl9maWxlTWFuYWdlci5wbHVnaW5SZWdFeHAudGVzdChjb3JlLmN1cnJlbnRDb250cm9sbGVyTmFtZSkgPyBjb3JlLmN1cnJlbnRDb250cm9sbGVyTmFtZSA6ICcnO1xyXG4gICAgICAgICAgICBsZXQgZm9ybWF0RWwgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQoc2VsZWN0aW9uTm9kZSwgbnVsbCkgfHwgc2VsZWN0aW9uTm9kZTtcclxuICAgICAgICAgICAgbGV0IHJhbmdlRWwgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChmb3JtYXRFbCwgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpc0Fycm93S2V5ID0gLzM3fDM4fDM5fDQwLy50ZXN0KGUua2V5Q29kZSk7XHJcbiAgICAgICAgICAgIGlmIChpc0Fycm93S2V5ICYmIGV2ZW50Ll9vbktleURvd25fd3lzaXd5Z19hcnJvd0tleShlKSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5Q29kZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSA4OiAvKiogYmFja3NwYWNlIGtleSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VsZWN0UmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVDb21wb25lbnROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5wbHVnaW5zW2ZpbGVDb21wb25lbnROYW1lXS5kZXN0cm95LmNhbGwoY29yZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdFJhbmdlICYmIGV2ZW50Ll9oYXJkRGVsZXRlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0Zvcm1hdEVsZW1lbnQoZm9ybWF0RWwpICYmICFjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5maXJzdEVsZW1lbnRDaGlsZCAmJiAhdXRpbC5pc0NvbXBvbmVudChzZWxlY3Rpb25Ob2RlKSAmJiBjb3JlLl9zZXREZWZhdWx0Rm9ybWF0KG9wdGlvbnMuZGVmYXVsdFRhZykgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdFJhbmdlICYmICFmb3JtYXRFbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nICYmIChyYW5nZS5zdGFydE9mZnNldCA9PT0gMCAmJiAhc2VsZWN0aW9uTm9kZS5wcmV2aW91c1NpYmxpbmcgJiYgIXV0aWwuaXNMaXN0Q2VsbChmb3JtYXRFbCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHV0aWwuaXNGb3JtYXRFbGVtZW50KGZvcm1hdEVsKSAmJiAoIXV0aWwuaXNGcmVlRm9ybWF0RWxlbWVudChmb3JtYXRFbCkgfHwgdXRpbC5pc0Nsb3N1cmVGcmVlRm9ybWF0RWxlbWVudChmb3JtYXRFbCkpKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xvc3VyZSByYW5nZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0Nsb3N1cmVSYW5nZUZvcm1hdEVsZW1lbnQoZm9ybWF0RWwucGFyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFpbnRhaW4gZGVmYXVsdCBmb3JtYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNXeXNpd3lnRGl2KGZvcm1hdEVsLnBhcmVudE5vZGUpICYmIGZvcm1hdEVsLmNoaWxkTm9kZXMubGVuZ3RoIDw9IDEgJiYgKCFmb3JtYXRFbC5maXJzdENoaWxkIHx8IHV0aWwub25seVplcm9XaWR0aFNwYWNlKGZvcm1hdEVsLnRleHRDb250ZW50KSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdEVsLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09IG9wdGlvbnMuZGVmYXVsdFRhZy50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RWwuaW5uZXJIVE1MID0gJzxicj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gZm9ybWF0RWwuYXR0cmlidXRlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYXR0cnNbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RWwucmVtb3ZlQXR0cmlidXRlKGF0dHJzWzBdLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZvcm1hdCA9IHV0aWwuY3JlYXRlRWxlbWVudChvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGb3JtYXQuaW5uZXJIVE1MID0gJzxicj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEVsLnBhcmVudEVsZW1lbnQucmVwbGFjZUNoaWxkKGRlZmF1bHRGb3JtYXQsIGZvcm1hdEVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLm5hdGl2ZUZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNsZWFuIHJlbW92ZSB0YWdcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydENvbiA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXRFbCAmJiAhZm9ybWF0RWwucHJldmlvdXNFbGVtZW50U2libGluZyAmJiByYW5nZS5zdGFydE9mZnNldCA9PT0gMCAmJiBzdGFydENvbi5ub2RlVHlwZSA9PT0gMyAmJiAhdXRpbC5pc0Zvcm1hdEVsZW1lbnQoc3RhcnRDb24ucGFyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByZXYgPSBzdGFydENvbi5wYXJlbnROb2RlLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHN0YXJ0Q29uLnBhcmVudE5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IHV0aWwuY3JlYXRlRWxlbWVudCgnQlInKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRFbC5hcHBlbmRDaGlsZChwcmV2KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IG5leHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb24gPSBzdGFydENvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoZm9ybWF0RWwuY29udGFpbnMoY29uKSAmJiAhY29uLnByZXZpb3VzU2libGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uID0gY29uLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9ybWF0RWwuY29udGFpbnMoY29uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRDb24udGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbUFsbFBhcmVudHMoc3RhcnRDb24sIG51bGwsIGZvcm1hdEVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyB0YWdbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuX2lzVW5lZGl0YWJsZU5vZGUocmFuZ2UsIHRydWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBmb3JtYXQgYXR0cmlidXRlc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VsZWN0UmFuZ2UgJiYgY29yZS5faXNFZGdlRm9ybWF0KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5zdGFydE9mZnNldCwgJ3N0YXJ0JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNGb3JtYXRFbGVtZW50KGZvcm1hdEVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLl9mb3JtYXRBdHRyc1RlbXAgPSBmb3JtYXRFbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG5lc3RlZCBsaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbW9uQ29uID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0RWwgPSB1dGlsLmdldEZvcm1hdEVsZW1lbnQocmFuZ2Uuc3RhcnRDb250YWluZXIsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlRWwgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChmb3JtYXRFbCwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlRWwgJiYgZm9ybWF0RWwgJiYgIXV0aWwuaXNDZWxsKHJhbmdlRWwpICYmICEvXkZJR0NBUFRJT04kL2kudGVzdChyYW5nZUVsLm5vZGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3RDZWxsKGZvcm1hdEVsKSAmJiB1dGlsLmlzTGlzdChyYW5nZUVsKSAmJiAodXRpbC5pc0xpc3RDZWxsKHJhbmdlRWwucGFyZW50Tm9kZSkgfHwgZm9ybWF0RWwucHJldmlvdXNFbGVtZW50U2libGluZykgJiYgKHNlbGVjdGlvbk5vZGUgPT09IGZvcm1hdEVsIHx8IChzZWxlY3Rpb25Ob2RlLm5vZGVUeXBlID09PSAzICYmICghc2VsZWN0aW9uTm9kZS5wcmV2aW91c1NpYmxpbmcgfHwgdXRpbC5pc0xpc3Qoc2VsZWN0aW9uTm9kZS5wcmV2aW91c1NpYmxpbmcpKSkpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXRpbC5nZXRGb3JtYXRFbGVtZW50KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCBudWxsKSAhPT0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHJhbmdlLmVuZENvbnRhaW5lciwgbnVsbCkgPyByYW5nZUVsLmNvbnRhaW5zKHJhbmdlLnN0YXJ0Q29udGFpbmVyKSA6IChyYW5nZS5zdGFydE9mZnNldCA9PT0gMCAgJiYgcmFuZ2UuY29sbGFwc2VkKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydENvbnRhaW5lciAhPT0gcmFuZ2UuZW5kQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnJlbW92ZU5vZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShyYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoLCByYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuaGlzdG9yeS5wdXNoKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IGZvcm1hdEVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgfHwgcmFuZ2VFbC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdENlbGwocHJldikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByZXZMYXN0ID0gcHJldjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2LmNvbnRhaW5zKGZvcm1hdEVsKSAmJiB1dGlsLmlzTGlzdENlbGwocHJldkxhc3QpICYmIHV0aWwuaXNMaXN0KHByZXZMYXN0Lmxhc3RFbGVtZW50Q2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2TGFzdCA9IHByZXZMYXN0Lmxhc3RFbGVtZW50Q2hpbGQubGFzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh1dGlsLmlzTGlzdENlbGwocHJldkxhc3QpICYmIHV0aWwuaXNMaXN0KHByZXZMYXN0Lmxhc3RFbGVtZW50Q2hpbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldkxhc3QgPSBwcmV2TGFzdC5sYXN0RWxlbWVudENoaWxkICYmIHByZXZMYXN0Lmxhc3RFbGVtZW50Q2hpbGQubGFzdEVsZW1lbnRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBwcmV2TGFzdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbiA9IHByZXYgPT09IHJhbmdlRWwucGFyZW50Tm9kZSA/IHJhbmdlRWwucHJldmlvdXNTaWJsaW5nIDogcHJldi5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24gPSB1dGlsLmNyZWF0ZVRleHROb2RlKHV0aWwuemVyb1dpZHRoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VFbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjb24sIHJhbmdlRWwucGFyZW50Tm9kZS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBjb24ubm9kZVR5cGUgPT09IDMgPyBjb24udGV4dENvbnRlbnQubGVuZ3RoIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBmb3JtYXRFbC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWZ0ZXIgPSBjb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZCA9IGNoaWxkcmVuWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGNoaWxkID0gY2hpbGRyZW5bMF0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Lmluc2VydEJlZm9yZShjaGlsZCwgYWZ0ZXIubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGZvcm1hdEVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlRWwuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB1dGlsLnJlbW92ZUl0ZW0ocmFuZ2VFbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKGNvbiwgb2Zmc2V0LCBjb24sIG9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5oaXN0b3J5LnB1c2godHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXRhY2ggcmFuZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RSYW5nZSAmJiByYW5nZS5zdGFydE9mZnNldCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRldGFjaCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29tbSA9IGNvbW1vbkNvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjb21tICYmIGNvbW0gIT09IHJhbmdlRWwgJiYgIXV0aWwuaXNXeXNpd3lnRGl2KGNvbW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW0ucHJldmlvdXNTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21tLnByZXZpb3VzU2libGluZy5ub2RlVHlwZSA9PT0gMSB8fCAhdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoY29tbS5wcmV2aW91c1NpYmxpbmcudGV4dENvbnRlbnQudHJpbSgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWNoID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tID0gY29tbS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXRhY2ggJiYgcmFuZ2VFbC5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuZGV0YWNoUmFuZ2VGb3JtYXRFbGVtZW50KHJhbmdlRWwsICh1dGlsLmlzTGlzdENlbGwoZm9ybWF0RWwpID8gW2Zvcm1hdEVsXSA6IG51bGwpLCBudWxsLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLmhpc3RvcnkucHVzaCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RSYW5nZSAmJiBmb3JtYXRFbCAmJiAocmFuZ2Uuc3RhcnRPZmZzZXQgPT09IDAgfHwgKHNlbGVjdGlvbk5vZGUgPT09IGZvcm1hdEVsID8gISFmb3JtYXRFbC5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0XSA6IGZhbHNlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNMaXN0ID0gdXRpbC5pc0xpc3RDZWxsKGZvcm1hdEVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsID0gc2VsZWN0aW9uTm9kZSA9PT0gZm9ybWF0RWwgPyBmb3JtYXRFbC5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0XSA6IHNlbGVjdGlvbk5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXYgPSBpc0xpc3QgPyBzZWwucHJldmlvdXNTaWJsaW5nIDogZm9ybWF0RWwucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3QgZmlsZSBjb21wb25lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlWldTID0gaXNMaXN0IHx8IChjb21tb25Db24ubm9kZVR5cGUgPT09IDMgfHwgdXRpbC5pc0JyZWFrKGNvbW1vbkNvbikpICYmICFjb21tb25Db24ucHJldmlvdXNTaWJsaW5nICYmIHJhbmdlLnN0YXJ0T2Zmc2V0ID09PSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsICYmICgoaXNMaXN0IHx8ICFzZWwucHJldmlvdXNTaWJsaW5nKSkgJiYgKChjb21tb25Db24gJiYgdXRpbC5pc0NvbXBvbmVudChjb21tb25Db24ucHJldmlvdXNTaWJsaW5nKSkgfHwgKGlnbm9yZVpXUyAmJiB1dGlsLmlzQ29tcG9uZW50KHByZXYpKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVDb21wb25lbnRJbmZvID0gY29yZS5nZXRGaWxlQ29tcG9uZW50KHByZXYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVDb21wb25lbnRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTGlzdCkgdXRpbC5yZW1vdmVJdGVtKHNlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0RWwudGV4dENvbnRlbnQubGVuZ3RoID09PSAwKSB1dGlsLnJlbW92ZUl0ZW0oZm9ybWF0RWwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29yZS5zZWxlY3RDb21wb25lbnQoZmlsZUNvbXBvbmVudEluZm8udGFyZ2V0LCBmaWxlQ29tcG9uZW50SW5mby5wbHVnaW5OYW1lKSA9PT0gZmFsc2UpIGNvcmUuYmx1cigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1dGlsLmlzQ29tcG9uZW50KHByZXYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHByZXYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlIG5vbkVkaXRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWwgJiYgdXRpbC5pc05vbkVkaXRhYmxlKHNlbC5wcmV2aW91c1NpYmxpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHNlbC5wcmV2aW91c1NpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0NjogLyoqIGRlbGV0ZSBrZXkgKi9cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZUNvbXBvbmVudE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnBsdWdpbnNbZmlsZUNvbXBvbmVudE5hbWVdLmRlc3Ryb3kuY2FsbChjb3JlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0UmFuZ2UgJiYgZXZlbnQuX2hhcmREZWxldGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RSYW5nZSAmJiBjb3JlLl9pc0VkZ2VGb3JtYXQocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQsICdlbmQnKSAmJiAhZm9ybWF0RWwubmV4dFNpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyB0YWdbY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIl1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuX2lzVW5lZGl0YWJsZU5vZGUocmFuZ2UsIGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh1dGlsLmlzRm9ybWF0RWxlbWVudChzZWxlY3Rpb25Ob2RlKSB8fCBzZWxlY3Rpb25Ob2RlLm5leHRTaWJsaW5nID09PSBudWxsIHx8ICh1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShzZWxlY3Rpb25Ob2RlLm5leHRTaWJsaW5nKSAmJiBzZWxlY3Rpb25Ob2RlLm5leHRTaWJsaW5nLm5leHRTaWJsaW5nID09PSBudWxsKSkgJiYgcmFuZ2Uuc3RhcnRPZmZzZXQgPT09IHNlbGVjdGlvbk5vZGUudGV4dENvbnRlbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRFbCA9IGZvcm1hdEVsLm5leHRFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0RWwpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0NvbXBvbmVudChuZXh0RWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwub25seVplcm9XaWR0aFNwYWNlKGZvcm1hdEVsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShmb3JtYXRFbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGFibGUgY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNUYWJsZShuZXh0RWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjZWxsID0gdXRpbC5nZXRDaGlsZEVsZW1lbnQobmV4dEVsLCB1dGlsLmlzQ2VsbCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsID0gY2VsbC5maXJzdEVsZW1lbnRDaGlsZCB8fCBjZWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKGNlbGwsIDAsIGNlbGwsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0IGZpbGUgY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlQ29tcG9uZW50SW5mbyA9IGNvcmUuZ2V0RmlsZUNvbXBvbmVudChuZXh0RWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVDb21wb25lbnRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29yZS5zZWxlY3RDb21wb25lbnQoZmlsZUNvbXBvbmVudEluZm8udGFyZ2V0LCBmaWxlQ29tcG9uZW50SW5mby5wbHVnaW5OYW1lKSA9PT0gZmFsc2UpIGNvcmUuYmx1cigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1dGlsLmlzQ29tcG9uZW50KG5leHRFbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShuZXh0RWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdFJhbmdlICYmIChjb3JlLmlzRWRnZVBvaW50KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KSB8fCAoc2VsZWN0aW9uTm9kZSA9PT0gZm9ybWF0RWwgPyAhIWZvcm1hdEVsLmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdIDogZmFsc2UpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWwgPSBzZWxlY3Rpb25Ob2RlID09PSBmb3JtYXRFbCA/IGZvcm1hdEVsLmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdIHx8IHNlbGVjdGlvbk5vZGUgOiBzZWxlY3Rpb25Ob2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGUgbm9uRWRpdGFibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbCAmJiB1dGlsLmlzTm9uRWRpdGFibGUoc2VsLm5leHRTaWJsaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShzZWwubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXRpbC5pc0NvbXBvbmVudChzZWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKHNlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9ybWF0IGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdFJhbmdlICYmIGNvcmUuX2lzRWRnZUZvcm1hdChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCwgJ2VuZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChmb3JtYXRFbC5uZXh0RWxlbWVudFNpYmxpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLl9mb3JtYXRBdHRyc1RlbXAgPSBmb3JtYXRFbC5hdHRyaWJ1dGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBuZXN0ZWQgbGlzdFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdEVsID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICByYW5nZUVsID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoZm9ybWF0RWwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdENlbGwoZm9ybWF0RWwpICYmIHV0aWwuaXNMaXN0KHJhbmdlRWwpICYmIChzZWxlY3Rpb25Ob2RlID09PSBmb3JtYXRFbCB8fCAoc2VsZWN0aW9uTm9kZS5ub2RlVHlwZSA9PT0gMyAmJiAoIXNlbGVjdGlvbk5vZGUubmV4dFNpYmxpbmcgfHwgdXRpbC5pc0xpc3Qoc2VsZWN0aW9uTm9kZS5uZXh0U2libGluZykpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh1dGlsLmdldEZvcm1hdEVsZW1lbnQocmFuZ2Uuc3RhcnRDb250YWluZXIsIG51bGwpICE9PSB1dGlsLmdldEZvcm1hdEVsZW1lbnQocmFuZ2UuZW5kQ29udGFpbmVyLCBudWxsKSA/IHJhbmdlRWwuY29udGFpbnMocmFuZ2UuZW5kQ29udGFpbmVyKSA6IChyYW5nZS5lbmRPZmZzZXQgPT09IHNlbGVjdGlvbk5vZGUudGV4dENvbnRlbnQubGVuZ3RoICYmIHJhbmdlLmNvbGxhcHNlZCkpKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0Q29udGFpbmVyICE9PSByYW5nZS5lbmRDb250YWluZXIpIGNvcmUucmVtb3ZlTm9kZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHQgPSB1dGlsLmdldEFycmF5SXRlbShmb3JtYXRFbC5jaGlsZHJlbiwgdXRpbC5pc0xpc3QsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IG5leHQgfHwgZm9ybWF0RWwubmV4dEVsZW1lbnRTaWJsaW5nIHx8IChyYW5nZUVsLnBhcmVudE5vZGUgPyByYW5nZUVsLnBhcmVudE5vZGUubmV4dEVsZW1lbnRTaWJsaW5nIDogbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmICh1dGlsLmlzTGlzdChuZXh0KSB8fCB1dGlsLmdldEFycmF5SXRlbShuZXh0LmNoaWxkcmVuLCB1dGlsLmlzTGlzdCwgZmFsc2UpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb24sIGNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0KG5leHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBuZXh0LmZpcnN0RWxlbWVudENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGQuY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24gPSBjaGlsZHJlblswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RWwuaW5zZXJ0QmVmb3JlKGNoaWxkcmVuWzBdLCBuZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uID0gbmV4dC5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gbmV4dC5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGlsZHJlblswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRFbC5hcHBlbmRDaGlsZChjaGlsZHJlblswXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShuZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UoY29uLCAwLCBjb24sIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5oaXN0b3J5LnB1c2godHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgOTogLyoqIHRhYiBrZXkgKi9cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZUNvbXBvbmVudE5hbWUgfHwgb3B0aW9ucy50YWJEaXNhYmxlKSBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0cmwgfHwgYWx0IHx8IHV0aWwuaXNXeXNpd3lnRGl2KHNlbGVjdGlvbk5vZGUpKSBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNFZGdlID0gKCFyYW5nZS5jb2xsYXBzZWQgfHwgY29yZS5pc0VkZ2VQb2ludChyYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRPZmZzZXQpKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEZvcm1hdHMgPSBjb3JlLmdldFNlbGVjdGVkRWxlbWVudHMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uTm9kZSA9IGNvcmUuZ2V0U2VsZWN0aW9uTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmVzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZjID0gdXRpbC5pc0xpc3RDZWxsKHNlbGVjdGVkRm9ybWF0c1swXSksIGxjID0gdXRpbC5pc0xpc3RDZWxsKHNlbGVjdGVkRm9ybWF0c1tzZWxlY3RlZEZvcm1hdHMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByID0ge3NjOiByYW5nZS5zdGFydENvbnRhaW5lciwgc286IHJhbmdlLnN0YXJ0T2Zmc2V0LCBlYzogcmFuZ2UuZW5kQ29udGFpbmVyLCBlbzogcmFuZ2UuZW5kT2Zmc2V0fTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2VsZWN0ZWRGb3JtYXRzLmxlbmd0aCwgZjsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBzZWxlY3RlZEZvcm1hdHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzTGlzdENlbGwoZikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZi5wcmV2aW91c0VsZW1lbnRTaWJsaW5nICYmICFzaGlmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxscy5wdXNoKGYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaChmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTmVzdGVkIGxpc3RcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbHMubGVuZ3RoID4gMCAmJiBpc0VkZ2UgJiYgY29yZS5wbHVnaW5zLmxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgciA9IGNvcmUucGx1Z2lucy5saXN0LmVkaXRJbnNpZGVMaXN0LmNhbGwoY29yZSwgc2hpZnQsIGNlbGxzKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0YWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZUNlbGwgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0aW9uTm9kZSwgdXRpbC5pc0NlbGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVDZWxsICYmIGlzRWRnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGUgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQodGFibGVDZWxsLCAndGFibGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gdXRpbC5nZXRMaXN0Q2hpbGRyZW4odGFibGUsIHV0aWwuaXNDZWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZHggPSBzaGlmdCA/IHV0aWwucHJldklkeChjZWxscywgdGFibGVDZWxsKSA6IHV0aWwubmV4dElkeChjZWxscywgdGFibGVDZWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWR4ID09PSBjZWxscy5sZW5ndGggJiYgIXNoaWZ0KSBpZHggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkeCA9PT0gLTEgJiYgc2hpZnQpIGlkeCA9IGNlbGxzLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1vdmVDZWxsID0gY2VsbHNbaWR4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW92ZUNlbGwpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZUNlbGwgPSBtb3ZlQ2VsbC5maXJzdEVsZW1lbnRDaGlsZCB8fCBtb3ZlQ2VsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UobW92ZUNlbGwsIDAsIG1vdmVDZWxsLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChjZWxscyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZjID0gbGMgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTGluZXMgdGFiKDQpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaGlmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFiVGV4dCA9IHV0aWwuY3JlYXRlVGV4dE5vZGUobmV3IF93LkFycmF5KGNvcmUuX3ZhcmlhYmxlLnRhYlNpemUgKyAxKS5qb2luKCdcXHUwMEEwJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29yZS5pbnNlcnROb2RlKHRhYlRleHQsIG51bGwsIHRydWUpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLnNjID0gdGFiVGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5zbyA9IHRhYlRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuZWMgPSB0YWJUZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmVvID0gdGFiVGV4dC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsZW4gPSBsaW5lcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBjaGlsZDsgaSA8PSBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGxpbmVzW2ldLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGQpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNCcmVhayhjaGlsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW2ldLmluc2VydEJlZm9yZSh0YWJUZXh0LmNsb25lTm9kZShmYWxzZSksIGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnRleHRDb250ZW50ID0gdGFiVGV4dC50ZXh0Q29udGVudCArIGNoaWxkLnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENoaWxkID0gdXRpbC5nZXRDaGlsZEVsZW1lbnQobGluZXNbMF0sICd0ZXh0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZENoaWxkID0gdXRpbC5nZXRDaGlsZEVsZW1lbnQobGluZXNbbGVuXSwgJ3RleHQnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZjICYmIGZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5zYyA9IGZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuc28gPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxjICYmIGVuZENoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuZWMgPSBlbmRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5lbyA9IGVuZENoaWxkLnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsZW4gPSBsaW5lcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxpbmU7IGkgPD0gbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZXNbaV0uY2hpbGROb2RlcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY0xlbiA9IGxpbmUubGVuZ3RoLCBjaGlsZDsgYyA8IGNMZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGxpbmVbY107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGQpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoY2hpbGQpKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXlxcc3sxLDR9JC8udGVzdChjaGlsZC50ZXh0Q29udGVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL15cXHN7MSw0fS8udGVzdChjaGlsZC50ZXh0Q29udGVudCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnRleHRDb250ZW50ID0gY2hpbGQudGV4dENvbnRlbnQucmVwbGFjZSgvXlxcc3sxLDR9LywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IHV0aWwuZ2V0Q2hpbGRFbGVtZW50KGxpbmVzWzBdLCAndGV4dCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZENoaWxkID0gdXRpbC5nZXRDaGlsZEVsZW1lbnQobGluZXNbbGVuXSwgJ3RleHQnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmMgJiYgZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuc2MgPSBmaXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuc28gPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsYyAmJiBlbmRDaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuZWMgPSBlbmRDaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmVvID0gZW5kQ2hpbGQudGV4dENvbnRlbnQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKHIuc2MsIHIuc28sIHIuZWMsIHIuZW8pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgICAgICAgICBjb3JlLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMzogLyoqIGVudGVyIGtleSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVudGVyIGxvZ2luIHN0YXJ0XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJlZUZvcm1hdEVsID0gdXRpbC5nZXRGcmVlRm9ybWF0RWxlbWVudChzZWxlY3Rpb25Ob2RlLCBudWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvcmUuX2NoYXJUeXBlSFRNTCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW50ZXJIVE1MID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIXNoaWZ0ICYmIGZyZWVGb3JtYXRFbCkgfHwgc2hpZnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGVySFRNTCA9ICc8YnI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGVySFRNTCA9ICc8JyArIGZvcm1hdEVsLm5vZGVOYW1lICsgJz48YnI+PC8nICsgZm9ybWF0RWwubm9kZU5hbWUgKyAnPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29yZS5jaGVja0NoYXJDb3VudChlbnRlckhUTUwsICdieXRlLWh0bWwnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNoaWZ0ICYmICFmaWxlQ29tcG9uZW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXRFbmRFZGdlID0gY29yZS5faXNFZGdlRm9ybWF0KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0LCAnZW5kJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdFN0YXJ0RWRnZSA9IGNvcmUuX2lzRWRnZUZvcm1hdChyYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRPZmZzZXQsICdzdGFydCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGRlZmF1bHQgZm9ybWF0IGxpbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdEVuZEVkZ2UgJiYgKC9eSFsxLTZdJC9pLnRlc3QoZm9ybWF0RWwubm9kZU5hbWUpIHx8IC9eSFIkL2kudGVzdChmb3JtYXRFbC5ub2RlTmFtZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5fZW50ZXJQcmV2ZW50KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Rm9ybWF0ID0gY29yZS5hcHBlbmRGb3JtYXRUYWcoZm9ybWF0RWwsIG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdEVuZEVkZ2UgJiYgZm9ybWF0RW5kRWRnZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGZvcm1hdEVuZEVkZ2UucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5uZXJOb2RlID0gdGVtcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShmb3JtYXRFbmRFZGdlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRlbXAuYXBwZW5kQ2hpbGQoZm9ybWF0RW5kRWRnZS5wb3AoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Zvcm1hdC5hcHBlbmRDaGlsZChpbm5lck5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSAhdGVtcCA/IG5ld0Zvcm1hdC5maXJzdENoaWxkIDogdGVtcC5hcHBlbmRDaGlsZChuZXdGb3JtYXQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0JyZWFrKHRlbXApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgemVyb1dpZHRoID0gdXRpbC5jcmVhdGVUZXh0Tm9kZSh1dGlsLnplcm9XaWR0aFNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHplcm9XaWR0aCwgdGVtcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZSh6ZXJvV2lkdGgsIDEsIHplcm9XaWR0aCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UodGVtcCwgMCwgdGVtcCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyYW5nZUVsICYmIGZvcm1hdEVsICYmICF1dGlsLmlzQ2VsbChyYW5nZUVsKSAmJiAhL15GSUdDQVBUSU9OJC9pLnRlc3QocmFuZ2VFbC5ub2RlTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gY29yZS5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29yZS5pc0VkZ2VQb2ludChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCkgJiYgdXRpbC5pc0xpc3Qoc2VsZWN0aW9uTm9kZS5uZXh0U2libGluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5fZW50ZXJQcmV2ZW50KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0VsID0gdXRpbC5jcmVhdGVFbGVtZW50KCdMSScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyID0gdXRpbC5jcmVhdGVFbGVtZW50KCdCUicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0VsLmFwcGVuZENoaWxkKGJyKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0RWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3RWwsIGZvcm1hdEVsLm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWwuYXBwZW5kQ2hpbGQoc2VsZWN0aW9uTm9kZS5uZXh0U2libGluZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UoYnIsIDEsIGJyLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSAzID8gIXJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5leHRFbGVtZW50U2libGluZyA6IHRydWUpICYmIHV0aWwub25seVplcm9XaWR0aFNwYWNlKGZvcm1hdEVsLmlubmVyVGV4dC50cmltKCkpICYmICF1dGlsLmlzTGlzdENlbGwoZm9ybWF0RWwubmV4dEVsZW1lbnRTaWJsaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9lbnRlclByZXZlbnQoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0VsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0Q2VsbChyYW5nZUVsLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudExpID0gZm9ybWF0RWwucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZUVsID0gcGFyZW50TGkucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3TGlzdENlbGwgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0xJJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0xpc3RDZWxsLmlubmVySFRNTCA9ICc8YnI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb3B5VGFnQXR0cmlidXRlcyhuZXdMaXN0Q2VsbCwgZm9ybWF0RWwsIG9wdGlvbnMubGluZUF0dHJSZXNldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0VsID0gbmV3TGlzdENlbGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlRWwuaW5zZXJ0QmVmb3JlKG5ld0VsLCBwYXJlbnRMaS5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0Zvcm1hdCA9IHV0aWwuaXNDZWxsKHJhbmdlRWwucGFyZW50Tm9kZSkgPyAnRElWJyA6IHV0aWwuaXNMaXN0KHJhbmdlRWwucGFyZW50Tm9kZSkgPyAnTEknIDogKHV0aWwuaXNGb3JtYXRFbGVtZW50KHJhbmdlRWwubmV4dEVsZW1lbnRTaWJsaW5nKSAmJiAhdXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChyYW5nZUVsLm5leHRFbGVtZW50U2libGluZykpID8gcmFuZ2VFbC5uZXh0RWxlbWVudFNpYmxpbmcubm9kZU5hbWUgOiAodXRpbC5pc0Zvcm1hdEVsZW1lbnQocmFuZ2VFbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSAmJiAhdXRpbC5pc1JhbmdlRm9ybWF0RWxlbWVudChyYW5nZUVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpKSA/IHJhbmdlRWwucHJldmlvdXNFbGVtZW50U2libGluZy5ub2RlTmFtZSA6IG9wdGlvbnMuZGVmYXVsdFRhZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWwgPSB1dGlsLmNyZWF0ZUVsZW1lbnQobmV3Rm9ybWF0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb3B5VGFnQXR0cmlidXRlcyhuZXdFbCwgZm9ybWF0RWwsIG9wdGlvbnMubGluZUF0dHJSZXNldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2UgPSBjb3JlLmRldGFjaFJhbmdlRm9ybWF0RWxlbWVudChyYW5nZUVsLCBbZm9ybWF0RWxdLCBudWxsLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5jYy5pbnNlcnRCZWZvcmUobmV3RWwsIGVkZ2UuZWMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWwuaW5uZXJIVE1MID0gJzxicj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbUFsbFBhcmVudHMoZm9ybWF0RWwsIG51bGwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UobmV3RWwsIDEsIG5ld0VsLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyZWVGb3JtYXRFbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX2VudGVyUHJldmVudChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkZvcm1hdCA9IHNlbGVjdGlvbk5vZGUgPT09IGZyZWVGb3JtYXRFbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdTZWxlY3Rpb24gPSBjb3JlLmdldFNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBzZWxlY3Rpb25Ob2RlLmNoaWxkTm9kZXMsIG9mZnNldCA9IHdTZWxlY3Rpb24uZm9jdXNPZmZzZXQsIHByZXYgPSBzZWxlY3Rpb25Ob2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcsIG5leHQgPSBzZWxlY3Rpb25Ob2RlLm5leHRTaWJsaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0Nsb3N1cmVGcmVlRm9ybWF0RWxlbWVudChmcmVlRm9ybWF0RWwpICYmICEhY2hpbGRyZW4gJiYgKChzZWxlY3Rpb25Gb3JtYXQgJiYgcmFuZ2UuY29sbGFwc2VkICYmIGNoaWxkcmVuLmxlbmd0aCAtIDEgPD0gb2Zmc2V0ICsgMSAmJiB1dGlsLmlzQnJlYWsoY2hpbGRyZW5bb2Zmc2V0XSkgJiYgKCFjaGlsZHJlbltvZmZzZXQgKyAxXSB8fCAoKCFjaGlsZHJlbltvZmZzZXQgKyAyXSB8fCB1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShjaGlsZHJlbltvZmZzZXQgKyAyXS50ZXh0Q29udGVudCkpICYmIGNoaWxkcmVuW29mZnNldCArIDFdLm5vZGVUeXBlID09PSAzICYmIHV0aWwub25seVplcm9XaWR0aFNwYWNlKGNoaWxkcmVuW29mZnNldCArIDFdLnRleHRDb250ZW50KSkpICYmICBvZmZzZXQgPiAwICYmIHV0aWwuaXNCcmVhayhjaGlsZHJlbltvZmZzZXQgLSAxXSkpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFzZWxlY3Rpb25Gb3JtYXQgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2Uoc2VsZWN0aW9uTm9kZS50ZXh0Q29udGVudCkgJiYgdXRpbC5pc0JyZWFrKHByZXYpICYmICh1dGlsLmlzQnJlYWsocHJldi5wcmV2aW91c1NpYmxpbmcpIHx8ICF1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShwcmV2LnByZXZpb3VzU2libGluZy50ZXh0Q29udGVudCkpICYmICghbmV4dCB8fCAoIXV0aWwuaXNCcmVhayhuZXh0KSAmJiB1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShuZXh0LnRleHRDb250ZW50KSkpKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uRm9ybWF0KSB1dGlsLnJlbW92ZUl0ZW0oY2hpbGRyZW5bb2Zmc2V0IC0gMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgdXRpbC5yZW1vdmVJdGVtKHNlbGVjdGlvbk5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0VsID0gY29yZS5hcHBlbmRGb3JtYXRUYWcoZnJlZUZvcm1hdEVsLCAodXRpbC5pc0Zvcm1hdEVsZW1lbnQoZnJlZUZvcm1hdEVsLm5leHRFbGVtZW50U2libGluZykgJiYgIXV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQoZnJlZUZvcm1hdEVsLm5leHRFbGVtZW50U2libGluZykpID8gZnJlZUZvcm1hdEVsLm5leHRFbGVtZW50U2libGluZyA6IG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29weUZvcm1hdEF0dHJpYnV0ZXMobmV3RWwsIGZyZWVGb3JtYXRFbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShuZXdFbCwgMSwgbmV3RWwsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Gb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMuaW5zZXJ0SFRNTCgoKHJhbmdlLmNvbGxhcHNlZCAmJiB1dGlsLmlzQnJlYWsocmFuZ2Uuc3RhcnRDb250YWluZXIuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldCAtIDFdKSkgPyAnPGJyPicgOiAnPGJyPjxicj4nKSwgdHJ1ZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9jdXNOb2RlID0gd1NlbGVjdGlvbi5mb2N1c05vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd09mZnNldCA9IHdTZWxlY3Rpb24uZm9jdXNPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyZWVGb3JtYXRFbCA9PT0gZm9jdXNOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzTm9kZSA9IGZvY3VzTm9kZS5jaGlsZE5vZGVzW3dPZmZzZXQgLSBvZmZzZXQgPiAxID8gd09mZnNldCAtIDEgOiB3T2Zmc2V0XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UoZm9jdXNOb2RlLCAxLCBmb2N1c05vZGUsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb2N1c05leHQgPSB3U2VsZWN0aW9uLmZvY3VzTm9kZS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiciA9IHV0aWwuY3JlYXRlRWxlbWVudCgnQlInKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLmluc2VydE5vZGUoYnIsIG51bGwsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJQcmV2ID0gYnIucHJldmlvdXNTaWJsaW5nLCBick5leHQgPSBici5uZXh0U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNCcmVhayhmb2N1c05leHQpICYmICF1dGlsLmlzQnJlYWsoYnJQcmV2KSAmJiAoIWJyTmV4dCB8fCB1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShick5leHQpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBici5wYXJlbnROb2RlLmluc2VydEJlZm9yZShici5jbG9uZU5vZGUoZmFsc2UpLCBicik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UoYnIsIDEsIGJyLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKGJyTmV4dCwgMCwgYnJOZXh0LCAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX29uU2hvcnRjdXRLZXkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldCBmb3JtYXQgYXR0cnMgLSBlZGdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb2xsYXBzZWQgJiYgKGZvcm1hdFN0YXJ0RWRnZSB8fCBmb3JtYXRFbmRFZGdlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX2VudGVyUHJldmVudChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvY3VzQlIgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0JSJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdGb3JtYXQgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoZm9ybWF0RWwubm9kZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb3B5VGFnQXR0cmlidXRlcyhuZXdGb3JtYXQsIGZvcm1hdEVsLCBvcHRpb25zLmxpbmVBdHRyUmVzZXQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZCA9IGZvY3VzQlI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1dGlsLmlzQnJlYWsoc2VsZWN0aW9uTm9kZSkgJiYgc2VsZWN0aW9uTm9kZS5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmID0gc2VsZWN0aW9uTm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLmFwcGVuZENoaWxkKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBmO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ob2RlID0gc2VsZWN0aW9uTm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZShmb3JtYXRFbCAhPT0gc2VsZWN0aW9uTm9kZSAmJiBmb3JtYXRFbC5jb250YWlucyhzZWxlY3Rpb25Ob2RlKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Rm9ybWF0LmFwcGVuZENoaWxkKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEVsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld0Zvcm1hdCwgZm9ybWF0U3RhcnRFZGdlICYmICFmb3JtYXRFbmRFZGdlID8gZm9ybWF0RWwgOiBmb3JtYXRFbC5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdEVuZEVkZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKGZvY3VzQlIsIDEsIGZvY3VzQlIsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0RWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0VsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTXVsdGlMaW5lID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCBudWxsKSAhPT0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHJhbmdlLmVuZENvbnRhaW5lciwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Rm9ybWF0ID0gZm9ybWF0RWwuY2xvbmVOb2RlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdGb3JtYXQuaW5uZXJIVE1MID0gJzxicj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1vbkNvbiA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBjb21tb25Db24gPT09IHJhbmdlLnN0YXJ0Q29udGFpbmVyICYmIGNvbW1vbkNvbiA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyICYmIHV0aWwub25seVplcm9XaWR0aFNwYWNlKGNvbW1vbkNvbikgPyByYW5nZSA6IGNvcmUucmVtb3ZlTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0VsID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHIuY29udGFpbmVyLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld0VsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzV3lzaXd5Z0RpdihyLmNvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9lbnRlclByZXZlbnQoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5hcHBlbmRDaGlsZChuZXdGb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWwgPSBuZXdGb3JtYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNvcHlUYWdBdHRyaWJ1dGVzKG5ld0VsLCBmb3JtYXRFbCwgb3B0aW9ucy5saW5lQXR0clJlc2V0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UobmV3RWwsIG9mZnNldCwgbmV3RWwsIG9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lclJhbmdlID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoci5jb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0VsID0gbmV3RWwuY29udGFpbnMoaW5uZXJSYW5nZSkgPyB1dGlsLmdldENoaWxkRWxlbWVudChpbm5lclJhbmdlLCB1dGlsLmdldEZvcm1hdEVsZW1lbnQuYmluZCh1dGlsKSkgOiBuZXdFbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNdWx0aUxpbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdEVuZEVkZ2UgJiYgIWZvcm1hdFN0YXJ0RWRnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Rm9ybWF0LCAoIXIucHJldkNvbnRhaW5lciB8fCByLmNvbnRhaW5lciA9PT0gci5wcmV2Q29udGFpbmVyKSA/IG5ld0VsLm5leHRFbGVtZW50U2libGluZyA6IG5ld0VsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0VsID0gbmV3Rm9ybWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHIub2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdFN0YXJ0RWRnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBFbCA9IG5ld0VsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld0Zvcm1hdCwgbmV3RWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXRFbmRFZGdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0VsID0gdGVtcEVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXRFbmRFZGdlICYmIGZvcm1hdFN0YXJ0RWRnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Rm9ybWF0LCAoci5wcmV2Q29udGFpbmVyICYmIHIuY29udGFpbmVyID09PSByLnByZXZDb250YWluZXIpID8gbmV3RWwubmV4dEVsZW1lbnRTaWJsaW5nIDogbmV3RWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWwgPSBuZXdGb3JtYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWwgPSB1dGlsLnNwbGl0RWxlbWVudChyLmNvbnRhaW5lciwgci5vZmZzZXQsIHV0aWwuZ2V0RWxlbWVudERlcHRoKGZvcm1hdEVsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLm9ubHlaZXJvV2lkdGhTcGFjZShmb3JtYXRFbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWwgPSBjb3JlLmFwcGVuZEZvcm1hdFRhZyhmb3JtYXRFbCwgZm9ybWF0RWwuY2xvbmVOb2RlKGZhbHNlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWwgPSB1dGlsLnNwbGl0RWxlbWVudChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCwgdXRpbC5nZXRFbGVtZW50RGVwdGgoZm9ybWF0RWwpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuX2VudGVyUHJldmVudChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29weVRhZ0F0dHJpYnV0ZXMobmV3RWwsIGZvcm1hdEVsLCBvcHRpb25zLmxpbmVBdHRyUmVzZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShuZXdFbCwgb2Zmc2V0LCBuZXdFbCwgb2Zmc2V0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdFJhbmdlKSBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlRWwgJiYgdXRpbC5nZXRQYXJlbnRFbGVtZW50KHJhbmdlRWwsICdGSUdDQVBUSU9OJykgJiYgdXRpbC5nZXRQYXJlbnRFbGVtZW50KHJhbmdlRWwsIHV0aWwuaXNMaXN0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5fZW50ZXJQcmV2ZW50KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRFbCA9IGNvcmUuYXBwZW5kRm9ybWF0VGFnKGZvcm1hdEVsLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShmb3JtYXRFbCwgMCwgZm9ybWF0RWwsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVDb21wb25lbnROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5jb250YWluZXJPZmYoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcENvbnRleHQgPSBjb250ZXh0W2ZpbGVDb21wb25lbnROYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gY29tcENvbnRleHQuX2NvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2libGluZyA9IGNvbnRhaW5lci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nIHx8IGNvbnRhaW5lci5uZXh0RWxlbWVudFNpYmxpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3RWwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0xpc3RDZWxsKGNvbnRhaW5lci5wYXJlbnROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWwgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0JSJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFbCA9IHV0aWwuY3JlYXRlRWxlbWVudCgodXRpbC5pc0Zvcm1hdEVsZW1lbnQoc2libGluZykgJiYgIXV0aWwuaXNSYW5nZUZvcm1hdEVsZW1lbnQoc2libGluZykpID8gc2libGluZy5ub2RlTmFtZSA6IG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFbC5pbm5lckhUTUwgPSAnPGJyPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGlmdCkgY29udGFpbmVyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld0VsLCBjb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGNvbnRhaW5lci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdFbCwgY29udGFpbmVyLm5leHRFbGVtZW50U2libGluZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlLmNhbGxQbHVnaW4oZmlsZUNvbXBvbmVudE5hbWUsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3JlLnNlbGVjdENvbXBvbmVudChjb21wQ29udGV4dC5fZWxlbWVudCwgZmlsZUNvbXBvbmVudE5hbWUpID09PSBmYWxzZSkgY29yZS5ibHVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI3OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlQ29tcG9uZW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUuY29udHJvbGxlcnNPZmYoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuY3VycmVudEZpbGVDb21wb25lbnRJbmZvKSBjb3JlLmNvbnRyb2xsZXJzT2ZmKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2hpZnQgJiYga2V5Q29kZSA9PT0gMTYpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZVBsdWdpbiA9IGNvcmUucGx1Z2lucy50YWJsZTtcclxuICAgICAgICAgICAgICAgIGlmICh0YWJsZVBsdWdpbiAmJiAhdGFibGVQbHVnaW4uX3NoaWZ0ICYmICF0YWJsZVBsdWdpbi5fcmVmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChmb3JtYXRFbCwgdXRpbC5pc0NlbGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjZWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlUGx1Z2luLm9uVGFibGVDZWxsTXVsdGlTZWxlY3QuY2FsbChjb3JlLCBjZWxsLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzaGlmdCAmJiAodXRpbC5pc09TWF9JT1MgPyBhbHQgOiBjdHJsKSAmJiBrZXlDb2RlID09PSAzMikge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ic3AgPSBjb3JlLmluc2VydE5vZGUodXRpbC5jcmVhdGVUZXh0Tm9kZSgnXFx1MDBhMCcpKTtcclxuICAgICAgICAgICAgICAgIGlmIChuYnNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShuYnNwLCBuYnNwLmxlbmd0aCwgbmJzcCwgbmJzcC5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNJRSAmJiAhY3RybCAmJiAhYWx0ICYmICFzZWxlY3RSYW5nZSAmJiAhZXZlbnQuX25vblRleHRLZXlDb2RlLnRlc3Qoa2V5Q29kZSkgJiYgdXRpbC5pc0JyZWFrKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgemVyb1dpZHRoID0gdXRpbC5jcmVhdGVUZXh0Tm9kZSh1dGlsLnplcm9XaWR0aFNwYWNlKTtcclxuICAgICAgICAgICAgICAgIGNvcmUuaW5zZXJ0Tm9kZSh6ZXJvV2lkdGgsIG51bGwsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGNvcmUuc2V0UmFuZ2UoemVyb1dpZHRoLCAxLCB6ZXJvV2lkdGgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlbnQuX2RpcmVjdGlvbktleUNvZGUudGVzdChrZXlDb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgX3cuc2V0VGltZW91dChjb3JlLl9lZGl0b3JSYW5nZS5iaW5kKGNvcmUpLCAwKTtcclxuICAgICAgICAgICAgICAgIGV2ZW50Ll9hcHBseVRhZ0VmZmVjdHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9vbktleURvd25fd3lzaXd5Z19hcnJvd0tleTogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHJldHVybjsgLy8gc2hpZnRrZXkgbmVlZHMoPykgb3RoZXIgY3VzdG9tIGhhbmRsZXIuIFRoaXMgb25lIG1heSBiZSBhZGFwdGVkIChpbiAnc2VsZWN0Tm9kZSguLi4pJyksIGJ1dCBub3QgZm9yIHRhYmxlXHJcblxyXG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uTm9kZSA9IGNvcmUuZ2V0U2VsZWN0aW9uTm9kZSgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0Tm9kZSA9IGZ1bmN0aW9uIChub2RlLCBvZmZzZXQpIHtcclxuICAgICAgICAgICAgICAgIGlmICghb2Zmc2V0KSBvZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29tcG9uZW50SW5mbyA9IGNvcmUuZ2V0RmlsZUNvbXBvbmVudChub2RlKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5zZWxlY3RDb21wb25lbnQoY29tcG9uZW50SW5mby50YXJnZXQsIGNvbXBvbmVudEluZm8ucGx1Z2luTmFtZSk7ICAgLy8gbW9yZSByZXNwb25zaXZlIGZvciBrZXkgaG9sZG5lc3NcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShub2RlLCBvZmZzZXQsIG5vZGUsIG9mZnNldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdGFibGUgPSB1dGlsLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0aW9uTm9kZSwgJ3RhYmxlJyk7XHJcbiAgICAgICAgICAgIGlmICh0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFJvdyA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChzZWxlY3Rpb25Ob2RlLCAndHInKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDZWxsID0gdXRpbC5nZXRQYXJlbnRFbGVtZW50KHNlbGVjdGlvbk5vZGUsICd0ZCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50Q2VsbEZpcnN0Tm9kZSA9IGN1cnJlbnRDZWxsO1xyXG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRDZWxsTGFzdE5vZGUgPSBjdXJyZW50Q2VsbDtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q2VsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Q2VsbEZpcnN0Tm9kZSAmJiBjdXJyZW50Q2VsbEZpcnN0Tm9kZS5maXJzdENoaWxkKSBjdXJyZW50Q2VsbEZpcnN0Tm9kZSA9IGN1cnJlbnRDZWxsRmlyc3ROb2RlLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRDZWxsTGFzdE5vZGUgJiYgY3VycmVudENlbGxMYXN0Tm9kZS5sYXN0Q2hpbGQpIGN1cnJlbnRDZWxsTGFzdE5vZGUgPSBjdXJyZW50Q2VsbExhc3ROb2RlLmxhc3RDaGlsZDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0aW9uTm9kZURlZXBlc3RGaXJzdENoaWxkID0gc2VsZWN0aW9uTm9kZTtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChzZWxlY3Rpb25Ob2RlRGVlcGVzdEZpcnN0Q2hpbGQgJiYgc2VsZWN0aW9uTm9kZURlZXBlc3RGaXJzdENoaWxkLmZpcnN0Q2hpbGQpIHNlbGVjdGlvbk5vZGVEZWVwZXN0Rmlyc3RDaGlsZCA9IHNlbGVjdGlvbk5vZGVEZWVwZXN0Rmlyc3RDaGlsZC5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNDZWxsRmlyc3ROb2RlID0gKHNlbGVjdGlvbk5vZGVEZWVwZXN0Rmlyc3RDaGlsZCA9PT0gY3VycmVudENlbGxGaXJzdE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNDZWxsTGFzdE5vZGUgPSAoc2VsZWN0aW9uTm9kZURlZXBlc3RGaXJzdENoaWxkID09PSBjdXJyZW50Q2VsbExhc3ROb2RlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgc2libGluZ1RvU2V0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGxldCBvZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMzggJiYgaXNDZWxsRmlyc3ROb2RlKSB7IC8vIFVQXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNSb3cgPSBjdXJyZW50Um93ICYmIGN1cnJlbnRSb3cucHJldmlvdXNFbGVtZW50U2libGluZztcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNSb3cpIHNpYmxpbmdUb1NldCA9IHByZXZpb3VzUm93LmNoaWxkcmVuW2N1cnJlbnRDZWxsLmNlbGxJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBzaWJsaW5nVG9TZXQgPSB1dGlsLmdldFByZXZpb3VzRGVlcGVzdE5vZGUodGFibGUsIGNvcmUuY29udGV4dC5lbGVtZW50Lnd5c2l3eWcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc2libGluZ1RvU2V0ICYmIHNpYmxpbmdUb1NldC5sYXN0Q2hpbGQpIHNpYmxpbmdUb1NldCA9IHNpYmxpbmdUb1NldC5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmdUb1NldCkgb2Zmc2V0ID0gc2libGluZ1RvU2V0LnRleHRDb250ZW50Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09PSA0MCAmJiBpc0NlbGxMYXN0Tm9kZSkgeyAgLy8gRE9XTlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRSb3cgPSBjdXJyZW50Um93ICYmIGN1cnJlbnRSb3cubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Um93KSBzaWJsaW5nVG9TZXQgPSBuZXh0Um93LmNoaWxkcmVuW2N1cnJlbnRDZWxsLmNlbGxJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBzaWJsaW5nVG9TZXQgPSB1dGlsLmdldE5leHREZWVwZXN0Tm9kZSh0YWJsZSwgY29yZS5jb250ZXh0LmVsZW1lbnQud3lzaXd5Zyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChzaWJsaW5nVG9TZXQgJiYgc2libGluZ1RvU2V0LmZpcnN0Q2hpbGQpIHNpYmxpbmdUb1NldCA9IHNpYmxpbmdUb1NldC5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nVG9TZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3ROb2RlKHNpYmxpbmdUb1NldCwgb2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEluZm8gPSBjb3JlLmdldEZpbGVDb21wb25lbnQoc2VsZWN0aW9uTm9kZSk7XHJcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RQcmV2aW91cyA9IC8zN3wzOC8udGVzdChlLmtleUNvZGUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0TmV4dCA9IC8zOXw0MC8udGVzdChlLmtleUNvZGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RQcmV2aW91cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRGVlcGVzdE5vZGUgPSB1dGlsLmdldFByZXZpb3VzRGVlcGVzdE5vZGUoY29tcG9uZW50SW5mby50YXJnZXQsIGNvcmUuY29udGV4dC5lbGVtZW50Lnd5c2l3eWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdE5vZGUocHJldmlvdXNEZWVwZXN0Tm9kZSwgcHJldmlvdXNEZWVwZXN0Tm9kZSAmJiBwcmV2aW91c0RlZXBlc3ROb2RlLnRleHRDb250ZW50Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdE5leHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RGVlcGVzdE5vZGUgPSB1dGlsLmdldE5leHREZWVwZXN0Tm9kZShjb21wb25lbnRJbmZvLnRhcmdldCwgY29yZS5jb250ZXh0LmVsZW1lbnQud3lzaXd5Zyk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0Tm9kZShuZXh0RGVlcGVzdE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uS2V5VXBfd3lzaXd5ZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Ll9vblNob3J0Y3V0S2V5KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb3JlLl9lZGl0b3JSYW5nZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBrZXlDb2RlID0gZS5rZXlDb2RlO1xyXG4gICAgICAgICAgICBjb25zdCBjdHJsID0gZS5jdHJsS2V5IHx8IGUubWV0YUtleSB8fCBrZXlDb2RlID09PSA5MSB8fCBrZXlDb2RlID09PSA5MiB8fCBrZXlDb2RlID09PSAyMjQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsdCA9IGUuYWx0S2V5O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuaXNSZWFkT25seSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjdHJsICYmIGV2ZW50Ll9jdXJzb3JNb3ZlS2V5Q29kZS50ZXN0KGtleUNvZGUpKSBldmVudC5fYXBwbHlUYWdFZmZlY3RzKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gY29yZS5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uTm9kZSA9IGNvcmUuZ2V0U2VsZWN0aW9uTm9kZSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuX2lzQmFsbG9vbiAmJiAoKGNvcmUuX2lzQmFsbG9vbkFsd2F5cyAmJiBrZXlDb2RlICE9PSAyNykgfHwgIXJhbmdlLmNvbGxhcHNlZCkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb3JlLl9pc0JhbGxvb25BbHdheXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5Q29kZSAhPT0gMjcpIGV2ZW50Ll9zaG93VG9vbGJhckJhbGxvb25EZWxheSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5fc2hvd1Rvb2xiYXJCYWxsb29uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uTm9kZURlZXBlc3RGaXJzdENoaWxkID0gc2VsZWN0aW9uTm9kZTtcclxuICAgICAgICAgICAgd2hpbGUgKHNlbGVjdGlvbk5vZGVEZWVwZXN0Rmlyc3RDaGlsZCAmJiBzZWxlY3Rpb25Ob2RlRGVlcGVzdEZpcnN0Q2hpbGQuZmlyc3RDaGlsZCkgc2VsZWN0aW9uTm9kZURlZXBlc3RGaXJzdENoaWxkID0gc2VsZWN0aW9uTm9kZURlZXBlc3RGaXJzdENoaWxkLmZpcnN0Q2hpbGQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvbXBvbmVudEluZm8gPSBjb3JlLmdldEZpbGVDb21wb25lbnQoc2VsZWN0aW9uTm9kZURlZXBlc3RGaXJzdENoaWxkKTtcclxuICAgICAgICAgICAgaWYgKCEoZS5rZXlDb2RlID09PSAxNiB8fCBlLnNoaWZ0S2V5KSAmJiBzZWxlY3RlZENvbXBvbmVudEluZm8pIGNvcmUuc2VsZWN0Q29tcG9uZW50KHNlbGVjdGVkQ29tcG9uZW50SW5mby50YXJnZXQsIHNlbGVjdGVkQ29tcG9uZW50SW5mby5wbHVnaW5OYW1lKTtcclxuXHJcbiAgICAgICAgICAgIC8qKiB3aGVuIGZvcm1hdCB0YWcgZGVsZXRlZCAqL1xyXG4gICAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0gOCAmJiB1dGlsLmlzV3lzaXd5Z0RpdihzZWxlY3Rpb25Ob2RlKSAmJiBzZWxlY3Rpb25Ob2RlLnRleHRDb250ZW50ID09PSAnJyAmJiBzZWxlY3Rpb25Ob2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ob2RlLmlubmVySFRNTCA9ICcnO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG9Gb3JtYXRUYWcgPSB1dGlsLmNyZWF0ZUVsZW1lbnQodXRpbC5pc0Zvcm1hdEVsZW1lbnQoY29yZS5fdmFyaWFibGUuY3VycmVudE5vZGVzWzBdKSA/IGNvcmUuX3ZhcmlhYmxlLmN1cnJlbnROb2Rlc1swXSA6IG9wdGlvbnMuZGVmYXVsdFRhZyk7XHJcbiAgICAgICAgICAgICAgICBvRm9ybWF0VGFnLmlubmVySFRNTCA9ICc8YnI+JztcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ob2RlLmFwcGVuZENoaWxkKG9Gb3JtYXRUYWcpO1xyXG4gICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZShvRm9ybWF0VGFnLCAwLCBvRm9ybWF0VGFnLCAwKTtcclxuICAgICAgICAgICAgICAgIGV2ZW50Ll9hcHBseVRhZ0VmZmVjdHMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb3JlLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdEVsID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KHNlbGVjdGlvbk5vZGUsIG51bGwpO1xyXG4gICAgICAgICAgICBjb25zdCByYW5nZUVsID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoc2VsZWN0aW9uTm9kZSwgbnVsbCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gY29yZS5fZm9ybWF0QXR0cnNUZW1wO1xyXG5cclxuICAgICAgICAgICAgaWYgKGF0dHJzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXR0cnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0gMTMgJiYgL15pZCQvaS50ZXN0KGF0dHJzW2ldLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEVsLnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdEVsLnNldEF0dHJpYnV0ZShhdHRyc1tpXS5uYW1lLCBhdHRyc1tpXS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb3JlLl9mb3JtYXRBdHRyc1RlbXAgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWZvcm1hdEVsICYmIHJhbmdlLmNvbGxhcHNlZCAmJiAhdXRpbC5pc0NvbXBvbmVudChzZWxlY3Rpb25Ob2RlKSAmJiAhdXRpbC5pc0xpc3Qoc2VsZWN0aW9uTm9kZSkgJiYgY29yZS5fc2V0RGVmYXVsdEZvcm1hdCh1dGlsLmlzUmFuZ2VGb3JtYXRFbGVtZW50KHJhbmdlRWwpID8gJ0RJVicgOiBvcHRpb25zLmRlZmF1bHRUYWcpICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ob2RlID0gY29yZS5nZXRTZWxlY3Rpb25Ob2RlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRleHRLZXkgPSAhY3RybCAmJiAhYWx0ICYmICFldmVudC5fbm9uVGV4dEtleUNvZGUudGVzdChrZXlDb2RlKTtcclxuICAgICAgICAgICAgaWYgKHRleHRLZXkgJiYgc2VsZWN0aW9uTm9kZS5ub2RlVHlwZSA9PT0gMyAmJiB1dGlsLnplcm9XaWR0aFJlZ0V4cC50ZXN0KHNlbGVjdGlvbk5vZGUudGV4dENvbnRlbnQpICYmICEoZS5pc0NvbXBvc2luZyAhPT0gdW5kZWZpbmVkID8gZS5pc0NvbXBvc2luZyA6IGV2ZW50Ll9JRWlzQ29tcG9zaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNvID0gcmFuZ2Uuc3RhcnRPZmZzZXQsIGVvID0gcmFuZ2UuZW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZnJvbnRaZXJvV2lkdGhDbnQgPSAoc2VsZWN0aW9uTm9kZS50ZXh0Q29udGVudC5zdWJzdHJpbmcoMCwgZW8pLm1hdGNoKGV2ZW50Ll9mcm9udFplcm9XaWR0aFJlZykgfHwgJycpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHNvID0gcmFuZ2Uuc3RhcnRPZmZzZXQgLSBmcm9udFplcm9XaWR0aENudDtcclxuICAgICAgICAgICAgICAgIGVvID0gcmFuZ2UuZW5kT2Zmc2V0IC0gZnJvbnRaZXJvV2lkdGhDbnQ7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ob2RlLnRleHRDb250ZW50ID0gc2VsZWN0aW9uTm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKHV0aWwuemVyb1dpZHRoUmVnRXhwLCAnJyk7XHJcbiAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKHNlbGVjdGlvbk5vZGUsIHNvIDwgMCA/IDAgOiBzbywgc2VsZWN0aW9uTm9kZSwgZW8gPCAwID8gMCA6IGVvKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGV2ZW50Ll9kZWxldGVLZXlDb2RlLnRlc3Qoa2V5Q29kZSkgJiYgZm9ybWF0RWwgJiYgdXRpbC5vbmx5WmVyb1dpZHRoU3BhY2UoZm9ybWF0RWwudGV4dENvbnRlbnQpICYmICFmb3JtYXRFbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtYXRFbC5pbm5lckhUTUwgPSAnPGJyPic7XHJcbiAgICAgICAgICAgICAgICBjb3JlLnNldFJhbmdlKGZvcm1hdEVsLCAwLCBmb3JtYXRFbCwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvcmUuX2NoYXJDb3VudCgnJyk7XHJcblxyXG4gICAgICAgICAgICAvLyB1c2VyIGV2ZW50XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLm9uS2V5VXAgPT09ICdmdW5jdGlvbicgJiYgZnVuY3Rpb25zLm9uS2V5VXAoZSwgY29yZSkgPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgIGlmICghY3RybCAmJiAhYWx0ICYmICFldmVudC5faGlzdG9yeUlnbm9yZUtleUNvZGUudGVzdChrZXlDb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgY29yZS5oaXN0b3J5LnB1c2godHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvblNjcm9sbF93eXNpd3lnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBjb3JlLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLl9pc0JhbGxvb24pIGV2ZW50Ll9oaWRlVG9vbGJhcigpO1xyXG5cclxuICAgICAgICAgICAgLy8gdXNlciBldmVudFxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5vblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykgZnVuY3Rpb25zLm9uU2Nyb2xsKGUsIGNvcmUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uRm9jdXNfd3lzaXd5ZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKGNvcmUuX2FudGlCbHVyKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvcmUuaGFzRm9jdXMgPSB0cnVlO1xyXG4gICAgICAgICAgICBfdy5zZXRUaW1lb3V0KGV2ZW50Ll9hcHBseVRhZ0VmZmVjdHMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuX2lzSW5saW5lKSBldmVudC5fc2hvd1Rvb2xiYXJJbmxpbmUoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnRcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMub25Gb2N1cyA9PT0gJ2Z1bmN0aW9uJykgZnVuY3Rpb25zLm9uRm9jdXMoZSwgY29yZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25CbHVyX3d5c2l3eWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLl9hbnRpQmx1ciB8fCBjb3JlLl92YXJpYWJsZS5pc0NvZGVWaWV3KSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvcmUuaGFzRm9jdXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29yZS5lZmZlY3ROb2RlID0gbnVsbDtcclxuICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICBpZiAoY29yZS5faXNJbmxpbmUgfHwgY29yZS5faXNCYWxsb29uKSBldmVudC5faGlkZVRvb2xiYXIoKTtcclxuXHJcbiAgICAgICAgICAgIGNvcmUuX3NldEtleUVmZmVjdChbXSk7XHJcblxyXG4gICAgICAgICAgICBjb3JlLl92YXJpYWJsZS5jdXJyZW50Tm9kZXMgPSBbXTtcclxuICAgICAgICAgICAgY29yZS5fdmFyaWFibGUuY3VycmVudE5vZGVzTWFwID0gW107XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3dQYXRoTGFiZWwpIGNvbnRleHQuZWxlbWVudC5uYXZpZ2F0aW9uLnRleHRDb250ZW50ID0gJyc7XHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnRcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMub25CbHVyID09PSAnZnVuY3Rpb24nKSBmdW5jdGlvbnMub25CbHVyKGUsIGNvcmUsdGhpcyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25Nb3VzZURvd25fcmVzaXppbmdCYXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICBjb3JlLnN1Ym1lbnVPZmYoKTtcclxuICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG5cclxuICAgICAgICAgICAgY29yZS5fdmFyaWFibGUucmVzaXplQ2xpZW50WSA9IGUuY2xpZW50WTtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnJlc2l6ZUJhY2tncm91bmQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBjbG9zdXJlRnVuYygpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5yZXNpemVCYWNrZ3JvdW5kLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICBfZC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBldmVudC5fcmVzaXplX2VkaXRvcik7XHJcbiAgICAgICAgICAgICAgICBfZC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgY2xvc3VyZUZ1bmMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBfZC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBldmVudC5fcmVzaXplX2VkaXRvcik7XHJcbiAgICAgICAgICAgIF9kLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBjbG9zdXJlRnVuYyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3Jlc2l6ZV9lZGl0b3I6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZUludGVydmFsID0gY29udGV4dC5lbGVtZW50LmVkaXRvckFyZWEub2Zmc2V0SGVpZ2h0ICsgKGUuY2xpZW50WSAtIGNvcmUuX3ZhcmlhYmxlLnJlc2l6ZUNsaWVudFkpO1xyXG4gICAgICAgICAgICBjb25zdCBoID0gKHJlc2l6ZUludGVydmFsIDwgY29yZS5fdmFyaWFibGUubWluUmVzaXppbmdTaXplID8gY29yZS5fdmFyaWFibGUubWluUmVzaXppbmdTaXplIDogcmVzaXplSW50ZXJ2YWwpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLnN0eWxlLmhlaWdodCA9IGNvbnRleHQuZWxlbWVudC5jb2RlLnN0eWxlLmhlaWdodCA9IGggKyAncHgnO1xyXG4gICAgICAgICAgICBjb3JlLl92YXJpYWJsZS5yZXNpemVDbGllbnRZID0gZS5jbGllbnRZO1xyXG4gICAgICAgICAgICBpZiAoIXV0aWwuaXNSZXNpemVPYnNlcnZlclN1cHBvcnRlZCkgY29yZS5fX2NhbGxSZXNpemVGdW5jdGlvbihoLCBudWxsKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvblJlc2l6ZV93aW5kb3c6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCF1dGlsLmlzUmVzaXplT2JzZXJ2ZXJTdXBwb3J0ZWQpIGNvcmUucmVzZXRSZXNwb25zaXZlVG9vbGJhcigpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdG9vbGJhciA9IGNvbnRleHQuZWxlbWVudC50b29sYmFyO1xyXG4gICAgICAgICAgICBjb25zdCBpc1Rvb2xiYXJIaWRkZW4gPSAodG9vbGJhci5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgfHwgKGNvcmUuX2lzSW5saW5lICYmICFjb3JlLl9pbmxpbmVUb29sYmFyQXR0ci5pc1Nob3cpKTtcclxuICAgICAgICAgICAgaWYgKHRvb2xiYXIub2Zmc2V0V2lkdGggPT09IDAgJiYgIWlzVG9vbGJhckhpZGRlbikgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRleHQuZmlsZUJyb3dzZXIgJiYgY29udGV4dC5maWxlQnJvd3Nlci5hcmVhLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jaycpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsZUJyb3dzZXIuYm9keS5zdHlsZS5tYXhIZWlnaHQgPSAoX3cuaW5uZXJIZWlnaHQgLSBjb250ZXh0LmZpbGVCcm93c2VyLmhlYWRlci5vZmZzZXRIZWlnaHQgLSA1MCkgKyAncHgnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY29yZS5zdWJtZW51QWN0aXZlQnV0dG9uICYmIGNvcmUuc3VibWVudSkge1xyXG4gICAgICAgICAgICAgICAgY29yZS5fc2V0TWVudVBvc2l0aW9uKGNvcmUuc3VibWVudUFjdGl2ZUJ1dHRvbiwgY29yZS5zdWJtZW51KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuX3ZhcmlhYmxlLmlzRnVsbFNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgY29yZS5fdmFyaWFibGUuaW5uZXJIZWlnaHRfZnVsbFNjcmVlbiArPSAoX3cuaW5uZXJIZWlnaHQgLSB0b29sYmFyLm9mZnNldEhlaWdodCkgLSBjb3JlLl92YXJpYWJsZS5pbm5lckhlaWdodF9mdWxsU2NyZWVuO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmVkaXRvckFyZWEuc3R5bGUuaGVpZ2h0ID0gY29yZS5fdmFyaWFibGUuaW5uZXJIZWlnaHRfZnVsbFNjcmVlbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb3JlLl92YXJpYWJsZS5pc0NvZGVWaWV3ICYmIGNvcmUuX2lzSW5saW5lKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5fc2hvd1Rvb2xiYXJJbmxpbmUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29yZS5faWZyYW1lQXV0b0hlaWdodCgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvcmUuX3N0aWNreSkge1xyXG4gICAgICAgICAgICAgICAgdG9vbGJhci5zdHlsZS53aWR0aCA9IChjb250ZXh0LmVsZW1lbnQudG9wQXJlYS5vZmZzZXRXaWR0aCAtIDIpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIGV2ZW50Lm9uU2Nyb2xsX3dpbmRvdygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25TY3JvbGxfd2luZG93OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLl92YXJpYWJsZS5pc0Z1bGxTY3JlZW4gfHwgY29udGV4dC5lbGVtZW50LnRvb2xiYXIub2Zmc2V0V2lkdGggPT09IDAgfHwgb3B0aW9ucy5zdGlja3lUb29sYmFyIDwgMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3QgZWRpdG9ySGVpZ2h0ID0gZWxlbWVudC5lZGl0b3JBcmVhLm9mZnNldEhlaWdodDtcclxuICAgICAgICAgICAgY29uc3QgeSA9ICh0aGlzLnNjcm9sbFkgfHwgX2QuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkgKyBvcHRpb25zLnN0aWNreVRvb2xiYXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvclRvcCA9IGV2ZW50Ll9nZXRFZGl0b3JPZmZzZXRzKG9wdGlvbnMudG9vbGJhckNvbnRhaW5lcikudG9wIC0gKGNvcmUuX2lzSW5saW5lID8gZWxlbWVudC50b29sYmFyLm9mZnNldEhlaWdodCA6IDApO1xyXG4gICAgICAgICAgICBjb25zdCBpbmxpbmVPZmZzZXQgPSBjb3JlLl9pc0lubGluZSAmJiAoeSAtIGVkaXRvclRvcCkgPiAwID8geSAtIGVkaXRvclRvcCAtIGNvbnRleHQuZWxlbWVudC50b29sYmFyLm9mZnNldEhlaWdodCA6IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoeSA8IGVkaXRvclRvcCkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX29mZlN0aWNreVRvb2xiYXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh5ICsgY29yZS5fdmFyaWFibGUubWluUmVzaXppbmdTaXplID49IGVkaXRvckhlaWdodCArIGVkaXRvclRvcCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjb3JlLl9zdGlja3kpIGV2ZW50Ll9vblN0aWNreVRvb2xiYXIoaW5saW5lT2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQudG9vbGJhci5zdHlsZS50b3AgPSAoaW5saW5lT2Zmc2V0ICsgZWRpdG9ySGVpZ2h0ICsgZWRpdG9yVG9wICsgb3B0aW9ucy5zdGlja3lUb29sYmFyIC0geSAtIGNvcmUuX3ZhcmlhYmxlLm1pblJlc2l6aW5nU2l6ZSkgKyAncHgnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHkgPj0gZWRpdG9yVG9wKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5fb25TdGlja3lUb29sYmFyKGlubGluZU9mZnNldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfZ2V0RWRpdG9yT2Zmc2V0czogZnVuY3Rpb24gKGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICBsZXQgb2Zmc2V0RWwgPSBjb250YWluZXIgfHwgY29udGV4dC5lbGVtZW50LnRvcEFyZWE7XHJcbiAgICAgICAgICAgIGxldCB0ID0gMCwgbCA9IDAsIHMgPSAwO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKG9mZnNldEVsKSB7XHJcbiAgICAgICAgICAgICAgICB0ICs9IG9mZnNldEVsLm9mZnNldFRvcDtcclxuICAgICAgICAgICAgICAgIGwgKz0gb2Zmc2V0RWwub2Zmc2V0TGVmdDtcclxuICAgICAgICAgICAgICAgIHMgKz0gb2Zmc2V0RWwuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0RWwgPSBvZmZzZXRFbC5vZmZzZXRQYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB0b3A6IHQsXHJcbiAgICAgICAgICAgICAgICBsZWZ0OiBsLFxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsOiBzXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2dldFBhZ2VCb3R0b21TcGFjZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gX2QuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCAtIChldmVudC5fZ2V0RWRpdG9yT2Zmc2V0cyhudWxsKS50b3AgKyBjb250ZXh0LmVsZW1lbnQudG9wQXJlYS5vZmZzZXRIZWlnaHQpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9vblN0aWNreVRvb2xiYXI6IGZ1bmN0aW9uIChpbmxpbmVPZmZzZXQpIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgIGlmICghY29yZS5faXNJbmxpbmUgJiYgIW9wdGlvbnMudG9vbGJhckNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5fc3RpY2t5RHVtbXkuc3R5bGUuaGVpZ2h0ID0gZWxlbWVudC50b29sYmFyLm9mZnNldEhlaWdodCArICdweCc7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50Ll9zdGlja3lEdW1teS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxlbWVudC50b29sYmFyLnN0eWxlLnRvcCA9IChvcHRpb25zLnN0aWNreVRvb2xiYXIgKyBpbmxpbmVPZmZzZXQpICsgJ3B4JztcclxuICAgICAgICAgICAgZWxlbWVudC50b29sYmFyLnN0eWxlLndpZHRoID0gY29yZS5faXNJbmxpbmUgPyBjb3JlLl9pbmxpbmVUb29sYmFyQXR0ci53aWR0aCA6IGVsZW1lbnQudG9vbGJhci5vZmZzZXRXaWR0aCArICdweCc7XHJcbiAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoZWxlbWVudC50b29sYmFyLCAnc2UtdG9vbGJhci1zdGlja3knKTtcclxuICAgICAgICAgICAgY29yZS5fc3RpY2t5ID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfb2ZmU3RpY2t5VG9vbGJhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgZWxlbWVudC5fc3RpY2t5RHVtbXkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgZWxlbWVudC50b29sYmFyLnN0eWxlLnRvcCA9IGNvcmUuX2lzSW5saW5lID8gY29yZS5faW5saW5lVG9vbGJhckF0dHIudG9wIDogJyc7XHJcbiAgICAgICAgICAgIGVsZW1lbnQudG9vbGJhci5zdHlsZS53aWR0aCA9IGNvcmUuX2lzSW5saW5lID8gY29yZS5faW5saW5lVG9vbGJhckF0dHIud2lkdGggOiAnJztcclxuICAgICAgICAgICAgZWxlbWVudC5lZGl0b3JBcmVhLnN0eWxlLm1hcmdpblRvcCA9ICcnO1xyXG5cclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyhlbGVtZW50LnRvb2xiYXIsICdzZS10b29sYmFyLXN0aWNreScpO1xyXG4gICAgICAgICAgICBjb3JlLl9zdGlja3kgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfY29kZVZpZXdBdXRvSGVpZ2h0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLl92YXJpYWJsZS5pc0Z1bGxTY3JlZW4pIHJldHVybjtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUuc3R5bGUuaGVpZ2h0ID0gY29udGV4dC5lbGVtZW50LmNvZGUuc2Nyb2xsSGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvLyBGaXJlRm94IC0gdGFibGUgZGVsZXRlLCBDaHJvbWUgLSBpbWFnZSwgdmlkZW8sIGF1ZGlvXHJcbiAgICAgICAgX2hhcmREZWxldGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBjb3JlLmdldFJhbmdlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGVjID0gcmFuZ2UuZW5kQ29udGFpbmVyO1xyXG5cclxuICAgICAgICAgICAgLy8gdGFibGVcclxuICAgICAgICAgICAgY29uc3Qgc0NlbGwgPSB1dGlsLmdldFJhbmdlRm9ybWF0RWxlbWVudChzYyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVDZWxsID0gdXRpbC5nZXRSYW5nZUZvcm1hdEVsZW1lbnQoZWMpO1xyXG4gICAgICAgICAgICBjb25zdCBzSXNDZWxsID0gdXRpbC5pc0NlbGwoc0NlbGwpO1xyXG4gICAgICAgICAgICBjb25zdCBlSXNDZWxsID0gdXRpbC5pc0NlbGwoZUNlbGwpO1xyXG4gICAgICAgICAgICBjb25zdCBhbmNlc3RvciA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xyXG4gICAgICAgICAgICBpZiAoKChzSXNDZWxsICYmICFzQ2VsbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nICYmICFzQ2VsbC5wYXJlbnRFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHx8IChlSXNDZWxsICYmICFlQ2VsbC5uZXh0RWxlbWVudFNpYmxpbmcgJiYgIWVDZWxsLnBhcmVudEVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSkgJiYgc0NlbGwgIT09IGVDZWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNJc0NlbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0odXRpbC5nZXRQYXJlbnRFbGVtZW50KGVDZWxsLCBmdW5jdGlvbihjdXJyZW50KSB7cmV0dXJuIGFuY2VzdG9yID09PSBjdXJyZW50LnBhcmVudE5vZGU7fSkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZUlzQ2VsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbSh1dGlsLmdldFBhcmVudEVsZW1lbnQoc0NlbGwsIGZ1bmN0aW9uKGN1cnJlbnQpIHtyZXR1cm4gYW5jZXN0b3IgPT09IGN1cnJlbnQucGFyZW50Tm9kZTt9KSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbSh1dGlsLmdldFBhcmVudEVsZW1lbnQoc0NlbGwsIGZ1bmN0aW9uKGN1cnJlbnQpIHtyZXR1cm4gYW5jZXN0b3IgPT09IGN1cnJlbnQucGFyZW50Tm9kZTt9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5uYXRpdmVGb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBjb21wb25lbnRcclxuICAgICAgICAgICAgY29uc3Qgc0NvbXAgPSBzYy5ub2RlVHlwZSA9PT0gMSA/IHV0aWwuZ2V0UGFyZW50RWxlbWVudChzYywgJy5zZS1jb21wb25lbnQnKSA6IG51bGw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVDb21wID0gZWMubm9kZVR5cGUgPT09IDEgPyB1dGlsLmdldFBhcmVudEVsZW1lbnQoZWMsICcuc2UtY29tcG9uZW50JykgOiBudWxsO1xyXG4gICAgICAgICAgICBpZiAoc0NvbXApIHV0aWwucmVtb3ZlSXRlbShzQ29tcCk7XHJcbiAgICAgICAgICAgIGlmIChlQ29tcCkgdXRpbC5yZW1vdmVJdGVtKGVDb21wKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvblBhc3RlX3d5c2l3eWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSB1dGlsLmlzSUUgPyBfdy5jbGlwYm9hcmREYXRhIDogZS5jbGlwYm9hcmREYXRhO1xyXG4gICAgICAgICAgICBpZiAoIWNsaXBib2FyZERhdGEpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuX2RhdGFUcmFuc2ZlckFjdGlvbigncGFzdGUnLCBlLCBjbGlwYm9hcmREYXRhKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfc2V0Q2xpcGJvYXJkQ29tcG9uZW50OiBmdW5jdGlvbiAoZSwgaW5mbywgY2xpcGJvYXJkRGF0YSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGNsaXBib2FyZERhdGEuc2V0RGF0YSgndGV4dC9odG1sJywgaW5mby5jb21wb25lbnQub3V0ZXJIVE1MKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvbkNvcHlfd3lzaXd5ZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IHV0aWwuaXNJRSA/IF93LmNsaXBib2FyZERhdGEgOiBlLmNsaXBib2FyZERhdGE7XHJcblxyXG4gICAgICAgICAgICAvLyB1c2VyIGV2ZW50XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLm9uQ29weSA9PT0gJ2Z1bmN0aW9uJyAmJiBmdW5jdGlvbnMub25Db3B5KGUsIGNsaXBib2FyZERhdGEsIGNvcmUpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgaW5mbyA9IGNvcmUuY3VycmVudEZpbGVDb21wb25lbnRJbmZvO1xyXG4gICAgICAgICAgICBpZiAoaW5mbyAmJiAhdXRpbC5pc0lFKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5fc2V0Q2xpcGJvYXJkQ29tcG9uZW50KGUsIGluZm8sIGNsaXBib2FyZERhdGEpO1xyXG4gICAgICAgICAgICAgICAgdXRpbC5hZGRDbGFzcyhpbmZvLmNvbXBvbmVudCwgJ3NlLWNvbXBvbmVudC1jb3B5Jyk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb3B5IGVmZmVjdFxyXG4gICAgICAgICAgICAgICAgX3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyhpbmZvLmNvbXBvbmVudCwgJ3NlLWNvbXBvbmVudC1jb3B5Jyk7XHJcbiAgICAgICAgICAgICAgICB9LCAxNTApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25TYXZlX3d5c2l3eWc6IGZ1bmN0aW9uIChjb250ZW50KSB7XHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnRcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jdGlvbnMub25TYXZlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbnMub25TYXZlKGNvbnRlbnQsIGNvcmUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgb25DdXRfd3lzaXd5ZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IHV0aWwuaXNJRSA/IF93LmNsaXBib2FyZERhdGEgOiBlLmNsaXBib2FyZERhdGE7XHJcblxyXG4gICAgICAgICAgICAvLyB1c2VyIGV2ZW50XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuY3Rpb25zLm9uQ3V0ID09PSAnZnVuY3Rpb24nICYmIGZ1bmN0aW9ucy5vbkN1dChlLCBjbGlwYm9hcmREYXRhLCBjb3JlKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBjb3JlLmN1cnJlbnRGaWxlQ29tcG9uZW50SW5mbztcclxuICAgICAgICAgICAgaWYgKGluZm8gJiYgIXV0aWwuaXNJRSkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX3NldENsaXBib2FyZENvbXBvbmVudChlLCBpbmZvLCBjbGlwYm9hcmREYXRhKTtcclxuICAgICAgICAgICAgICAgIHV0aWwucmVtb3ZlSXRlbShpbmZvLmNvbXBvbmVudCk7XHJcbiAgICAgICAgICAgICAgICBjb3JlLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIF93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICAgICAgY29yZS5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBvbkRyb3Bfd3lzaXd5ZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKGNvcmUuaXNSZWFkT25seSB8fCB1dGlsLmlzSUUpIHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFUcmFuc2ZlciA9IGUuZGF0YVRyYW5zZmVyO1xyXG4gICAgICAgICAgICBpZiAoIWRhdGFUcmFuc2ZlcikgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgICAgICBldmVudC5fc2V0RHJvcExvY2F0aW9uU2VsZWN0aW9uKGUpO1xyXG4gICAgICAgICAgICBjb3JlLnJlbW92ZU5vZGUoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyhjb3JlLmN1cnJlbnRDb250cm9sbGVyVGFyZ2V0KSkgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50Ll9kYXRhVHJhbnNmZXJBY3Rpb24oJ2Ryb3AnLCBlLCBkYXRhVHJhbnNmZXIpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9zZXREcm9wTG9jYXRpb25TZWxlY3Rpb246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0geyBzdGFydENvbnRhaW5lcjogbnVsbCwgc3RhcnRPZmZzZXQ6IG51bGwsIGVuZENvbnRhaW5lcjogbnVsbCwgZW5kT2Zmc2V0OiBudWxsIH07XHJcblxyXG4gICAgICAgICAgICBsZXQgciA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChlLnJhbmdlUGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lciA9IGUucmFuZ2VQYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICByYW5nZS5zdGFydE9mZnNldCA9IGUucmFuZ2VPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICByYW5nZS5lbmRDb250YWluZXIgPSBlLnJhbmdlUGFyZW50O1xyXG4gICAgICAgICAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID0gZS5yYW5nZU9mZnNldDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb3JlLl93ZC5jYXJldFJhbmdlRnJvbVBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICByID0gY29yZS5fd2QuY2FyZXRSYW5nZUZyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByID0gY29yZS5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyKSB7XHJcbiAgICAgICAgICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lciA9IHIuc3RhcnRDb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICByYW5nZS5zdGFydE9mZnNldCA9IHIuc3RhcnRPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICByYW5nZS5lbmRDb250YWluZXIgPSByLmVuZENvbnRhaW5lcjtcclxuICAgICAgICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCA9IHIuZW5kT2Zmc2V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdXRpbC5nZXRQYXJlbnRFbGVtZW50KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCB1dGlsLmlzQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lciA9IGNvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgICAgICByYW5nZS5zdGFydE9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyID0gY29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29yZS5zZXRSYW5nZShyYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRPZmZzZXQsIHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfZGF0YVRyYW5zZmVyQWN0aW9uOiBmdW5jdGlvbiAodHlwZSwgZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBsZXQgcGxhaW5UZXh0LCBjbGVhbkRhdGE7XHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzSUUpIHtcclxuICAgICAgICAgICAgICAgIHBsYWluVGV4dCA9IGRhdGEuZ2V0RGF0YSgnVGV4dCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gY29yZS5nZXRSYW5nZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcERpdiA9IHV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wUmFuZ2UgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2M6IHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvOiByYW5nZS5zdGFydE9mZnNldCxcclxuICAgICAgICAgICAgICAgICAgICBlYzogcmFuZ2UuZW5kQ29udGFpbmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIGVvOiByYW5nZS5lbmRPZmZzZXRcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdGVtcERpdi5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGVtcERpdi5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MDsgbGVmdDowOyB3aWR0aDoxcHg7IGhlaWdodDoxcHg7IG92ZXJmbG93OmhpZGRlbjsnO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5yZWxhdGl2ZS5hcHBlbmRDaGlsZCh0ZW1wRGl2KTtcclxuICAgICAgICAgICAgICAgIHRlbXBEaXYuZm9jdXMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBfdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhbkRhdGEgPSB0ZW1wRGl2LmlubmVySFRNTDtcclxuICAgICAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUl0ZW0odGVtcERpdik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5zZXRSYW5nZSh0ZW1wUmFuZ2Uuc2MsIHRlbXBSYW5nZS5zbywgdGVtcFJhbmdlLmVjLCB0ZW1wUmFuZ2UuZW8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9zZXRDbGlwYm9hcmREYXRhKHR5cGUsIGUsIHBsYWluVGV4dCwgY2xlYW5EYXRhLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcGxhaW5UZXh0ID0gZGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XHJcbiAgICAgICAgICAgICAgICBjbGVhbkRhdGEgPSBkYXRhLmdldERhdGEoJ3RleHQvaHRtbCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50Ll9zZXRDbGlwYm9hcmREYXRhKHR5cGUsIGUsIHBsYWluVGV4dCwgY2xlYW5EYXRhLCBkYXRhKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfc2V0Q2xpcGJvYXJkRGF0YTogZnVuY3Rpb24gKHR5cGUsIGUsIHBsYWluVGV4dCwgY2xlYW5EYXRhLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIC8vIE1TIHdvcmQsIE9uZU5vZGUsIEV4Y2VsXHJcbiAgICAgICAgICAgIGNvbnN0IE1TRGF0YSA9IC9jbGFzcz1bXCInXSpNc28oTm9ybWFsfExpc3QpL2kudGVzdChjbGVhbkRhdGEpIHx8IC9jb250ZW50PVtcIiddKldvcmQuRG9jdW1lbnQvaS50ZXN0KGNsZWFuRGF0YSkgfHwgL2NvbnRlbnQ9W1wiJ10qT25lTm90ZS5GaWxlL2kudGVzdChjbGVhbkRhdGEpIHx8IC9jb250ZW50PVtcIiddKkV4Y2VsLlNoZWV0L2kudGVzdChjbGVhbkRhdGEpO1xyXG4gICAgICAgICAgICBjb25zdCBvbmx5VGV4dCA9ICFjbGVhbkRhdGE7XHJcblxyXG4gICAgICAgICAgICBpZiAoIW9ubHlUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhbkRhdGEgPSBjbGVhbkRhdGEucmVwbGFjZSgvXjxodG1sPlxccj9cXG4/PGJvZHk+XFxyP1xcbj9cXHgzQyEtLVN0YXJ0RnJhZ21lbnQtLVxcPnxcXHgzQyEtLUVuZEZyYWdtZW50LS0+XFxyP1xcbj88XFwvYm9keVxcPlxccj9cXG4/PFxcL2h0bWw+JC9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoTVNEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYW5EYXRhID0gY2xlYW5EYXRhLnJlcGxhY2UoL1xcbi9nLCAnICcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBsYWluVGV4dCA9IHBsYWluVGV4dC5yZXBsYWNlKC9cXG4vZywgJyAnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNsZWFuRGF0YSA9IGNvcmUuY2xlYW5IVE1MKGNsZWFuRGF0YSwgY29yZS5wYXN0ZVRhZ3NXaGl0ZWxpc3RSZWdFeHAsIGNvcmUucGFzdGVUYWdzQmxhY2tsaXN0UmVnRXhwKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNsZWFuRGF0YSA9IHV0aWwuX0hUTUxDb252ZXJ0b3IocGxhaW5UZXh0KS5yZXBsYWNlKC9cXG4vZywgJzxicj4nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgbWF4Q2hhckNvdW50ID0gY29yZS5fY2hhckNvdW50KGNvcmUuX2NoYXJUeXBlSFRNTCA/IGNsZWFuRGF0YSA6IHBsYWluVGV4dCk7XHJcbiAgICAgICAgICAgIC8vIHVzZXIgZXZlbnQgLSBwYXN0ZVxyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3Bhc3RlJyAmJiB0eXBlb2YgZnVuY3Rpb25zLm9uUGFzdGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZnVuY3Rpb25zLm9uUGFzdGUoZSwgY2xlYW5EYXRhLCBtYXhDaGFyQ291bnQsIGNvcmUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhbkRhdGEgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyB1c2VyIGV2ZW50IC0gZHJvcFxyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2Ryb3AnICYmIHR5cGVvZiBmdW5jdGlvbnMub25Ecm9wID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZ1bmN0aW9ucy5vbkRyb3AoZSwgY2xlYW5EYXRhLCBtYXhDaGFyQ291bnQsIGNvcmUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhbkRhdGEgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gZmlsZXNcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBkYXRhLmZpbGVzO1xyXG4gICAgICAgICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCAmJiAhTVNEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoL15pbWFnZS8udGVzdChmaWxlc1swXS50eXBlKSAmJiBjb3JlLnBsdWdpbnMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMuaW5zZXJ0SW1hZ2UoZmlsZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1heENoYXJDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY2xlYW5EYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbnMuaW5zZXJ0SFRNTChjbGVhbkRhdGEsIHRydWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG9uTW91c2VNb3ZlX3d5c2l3eWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLmlzRGlzYWJsZWQgfHwgY29yZS5pc1JlYWRPbmx5KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHV0aWwuZ2V0UGFyZW50RWxlbWVudChlLnRhcmdldCwgdXRpbC5pc0NvbXBvbmVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmVCcmVha2VyU3R5bGUgPSBjb3JlLl9saW5lQnJlYWtlci5zdHlsZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQgJiYgIWNvcmUuY3VycmVudENvbnRyb2xsZXJOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdHhFbCA9IGNvbnRleHQuZWxlbWVudDtcclxuICAgICAgICAgICAgICAgIGxldCBzY3JvbGxUb3AgPSAwO1xyXG4gICAgICAgICAgICAgICAgbGV0IGVsID0gY3R4RWwud3lzaXd5ZztcclxuICAgICAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb3AgKz0gZWwuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGVsICYmICEvXihCT0RZfEhUTUwpJC9pLnRlc3QoZWwubm9kZU5hbWUpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB3U2Nyb2xsID0gY3R4RWwud3lzaXd5Zy5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZXZlbnQuX2dldEVkaXRvck9mZnNldHMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRUb3AgPSB1dGlsLmdldE9mZnNldChjb21wb25lbnQsIGN0eEVsLnd5c2l3eWdGcmFtZSkudG9wICsgd1Njcm9sbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBlLnBhZ2VZICsgc2Nyb2xsVG9wICsgKG9wdGlvbnMuaWZyYW1lICYmICFvcHRpb25zLnRvb2xiYXJDb250YWluZXIgPyBjdHhFbC50b29sYmFyLm9mZnNldEhlaWdodCA6IDApO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IGNvbXBvbmVudFRvcCArIChvcHRpb25zLmlmcmFtZSA/IHNjcm9sbFRvcCA6IG9mZnNldHMudG9wKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc0xpc3QgPSB1dGlsLmlzTGlzdENlbGwoY29tcG9uZW50LnBhcmVudE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGRpciA9ICcnLCB0b3AgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmICgoaXNMaXN0ID8gIWNvbXBvbmVudC5wcmV2aW91c1NpYmxpbmcgOiAhdXRpbC5pc0Zvcm1hdEVsZW1lbnQoY29tcG9uZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpKSAmJiB5IDwgKGMgKyAyMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b3AgPSBjb21wb25lbnRUb3A7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyID0gJ3QnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoaXNMaXN0ID8gIWNvbXBvbmVudC5uZXh0U2libGluZyA6ICF1dGlsLmlzRm9ybWF0RWxlbWVudChjb21wb25lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSkgJiYgeSA+IChjICsgY29tcG9uZW50Lm9mZnNldEhlaWdodCAtIDIwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvcCA9IGNvbXBvbmVudFRvcCArIGNvbXBvbmVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyID0gJ2InO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5lQnJlYWtlclN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvcmUuX3ZhcmlhYmxlLl9saW5lQnJlYWtDb21wID0gY29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgY29yZS5fdmFyaWFibGUuX2xpbmVCcmVha0RpciA9IGRpcjtcclxuICAgICAgICAgICAgICAgIGxpbmVCcmVha2VyU3R5bGUudG9wID0gKHRvcCAtIHdTY3JvbGwpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIGNvcmUuX2xpbmVCcmVha2VyQnV0dG9uLnN0eWxlLmxlZnQgPSAodXRpbC5nZXRPZmZzZXQoY29tcG9uZW50KS5sZWZ0ICsgKGNvbXBvbmVudC5vZmZzZXRXaWR0aCAvIDIpIC0gMTUpICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIGxpbmVCcmVha2VyU3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIH0gLy8gb2ZmIGxpbmUgYnJlYWtlclxyXG4gICAgICAgICAgICBlbHNlIGlmIChsaW5lQnJlYWtlclN0eWxlLmRpc3BsYXkgIT09ICdub25lJykge1xyXG4gICAgICAgICAgICAgICAgbGluZUJyZWFrZXJTdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2VudGVyUHJldmVudDogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBpZiAoIXV0aWwuaXNNb2JpbGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvcmUuX19mb2N1c1RlbXAuZm9jdXMoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfb25Nb3VzZURvd25fbGluZUJyZWFrOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX29uTGluZUJyZWFrOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb3JlLl92YXJpYWJsZS5fbGluZUJyZWFrQ29tcDtcclxuICAgICAgICAgICAgY29uc3QgZGlyID0gIXRoaXMgPyBjb3JlLl92YXJpYWJsZS5fbGluZUJyZWFrRGlyIDogdGhpcztcclxuICAgICAgICAgICAgY29uc3QgaXNMaXN0ID0gdXRpbC5pc0xpc3RDZWxsKGNvbXBvbmVudC5wYXJlbnROb2RlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IHV0aWwuY3JlYXRlRWxlbWVudChpc0xpc3QgPyAnQlInIDogdXRpbC5pc0NlbGwoY29tcG9uZW50LnBhcmVudE5vZGUpID8gJ0RJVicgOiBvcHRpb25zLmRlZmF1bHRUYWcpO1xyXG4gICAgICAgICAgICBpZiAoIWlzTGlzdCkgZm9ybWF0LmlubmVySFRNTCA9ICc8YnI+JztcclxuXHJcbiAgICAgICAgICAgIGlmIChjb3JlLl9jaGFyVHlwZUhUTUwgJiYgIWNvcmUuY2hlY2tDaGFyQ291bnQoZm9ybWF0Lm91dGVySFRNTCwgJ2J5dGUtaHRtbCcpKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb21wb25lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZm9ybWF0LCBkaXIgPT09ICd0JyA/IGNvbXBvbmVudCA6IGNvbXBvbmVudC5uZXh0U2libGluZyk7XHJcbiAgICAgICAgICAgIGNvcmUuX2xpbmVCcmVha2VyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGNvcmUuX3ZhcmlhYmxlLl9saW5lQnJlYWtDb21wID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzRWwgPSBpc0xpc3QgPyBmb3JtYXQgOiBmb3JtYXQuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgY29yZS5zZXRSYW5nZShmb2N1c0VsLCAxLCBmb2N1c0VsLCAxKTtcclxuICAgICAgICAgICAgLy8gaGlzdG9yeSBzdGFja1xyXG4gICAgICAgICAgICBjb3JlLmhpc3RvcnkucHVzaChmYWxzZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX3Jlc2l6ZU9ic2VydmVyOiBudWxsLFxyXG4gICAgICAgIF90b29sYmFyT2JzZXJ2ZXI6IG51bGwsXHJcbiAgICAgICAgX2FkZEV2ZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50V3lzaXd5ZyA9IG9wdGlvbnMuaWZyYW1lID8gY29yZS5fd3cgOiBjb250ZXh0LmVsZW1lbnQud3lzaXd5ZztcclxuICAgICAgICAgICAgaWYgKHV0aWwuaXNSZXNpemVPYnNlcnZlclN1cHBvcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBuZXcgX3cuUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24oZW50cmllcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmUuX19jYWxsUmVzaXplRnVuY3Rpb24oLTEsIGVudHJpZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKiB0b29sYmFyIGV2ZW50ICovXHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC50b29sYmFyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGV2ZW50Ll9idXR0b25zRXZlbnRIYW5kbGVyLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5fbWVudVRyYXkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZXZlbnQuX2J1dHRvbnNFdmVudEhhbmRsZXIsIGZhbHNlKTtcclxuICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnRvb2xiYXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudC5vbkNsaWNrX3Rvb2xiYXIsIGZhbHNlKTtcclxuICAgICAgICAgICAgLyoqIGVkaXRvciBhcmVhICovXHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBldmVudC5vbk1vdXNlRG93bl93eXNpd3lnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50Lm9uQ2xpY2tfd3lzaXd5ZywgZmFsc2UpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcuYWRkRXZlbnRMaXN0ZW5lcih1dGlsLmlzSUUgPyAndGV4dGlucHV0JyA6ICdpbnB1dCcsIGV2ZW50Lm9uSW5wdXRfd3lzaXd5ZywgZmFsc2UpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGV2ZW50Lm9uS2V5RG93bl93eXNpd3lnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIGV2ZW50Lm9uS2V5VXBfd3lzaXd5ZywgZmFsc2UpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBldmVudC5vblBhc3RlX3d5c2l3eWcsIGZhbHNlKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLmFkZEV2ZW50TGlzdGVuZXIoJ2NvcHknLCBldmVudC5vbkNvcHlfd3lzaXd5ZywgZmFsc2UpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcuYWRkRXZlbnRMaXN0ZW5lcignY3V0JywgZXZlbnQub25DdXRfd3lzaXd5ZywgZmFsc2UpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIGV2ZW50Lm9uRHJvcF93eXNpd3lnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBldmVudC5vblNjcm9sbF93eXNpd3lnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGV2ZW50Lm9uRm9jdXNfd3lzaXd5ZywgZmFsc2UpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIGV2ZW50Lm9uQmx1cl93eXNpd3lnLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAvKiogbGluZSBicmVha2VyICovXHJcbiAgICAgICAgICAgIGV2ZW50Ll9saW5lQnJlYWtlckJpbmQgPSB7IGE6IGV2ZW50Ll9vbkxpbmVCcmVhay5iaW5kKCcnKSwgdDogZXZlbnQuX29uTGluZUJyZWFrLmJpbmQoJ3QnKSwgYjogZXZlbnQuX29uTGluZUJyZWFrLmJpbmQoJ2InKSB9O1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZXZlbnQub25Nb3VzZU1vdmVfd3lzaXd5ZywgZmFsc2UpO1xyXG4gICAgICAgICAgICBjb3JlLl9saW5lQnJlYWtlckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBldmVudC5fb25Nb3VzZURvd25fbGluZUJyZWFrLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvcmUuX2xpbmVCcmVha2VyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQuX2xpbmVCcmVha2VyQmluZC5hLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5saW5lQnJlYWtlcl90LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGV2ZW50Ll9saW5lQnJlYWtlckJpbmQudCwgZmFsc2UpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQubGluZUJyZWFrZXJfYi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBldmVudC5fbGluZUJyZWFrZXJCaW5kLmIsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIC8qKiBFdmVudHMgYXJlIHJlZ2lzdGVyZWQgbW9iaWxlLiAgKi9cclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBldmVudC5vbk1vdXNlRG93bl93eXNpd3lnLCB7cGFzc2l2ZTogdHJ1ZSwgdXNlQ2FwdHVyZTogZmFsc2V9KTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZXZlbnQub25DbGlja193eXNpd3lnLCB7cGFzc2l2ZTogdHJ1ZSwgdXNlQ2FwdHVyZTogZmFsc2V9KTtcclxuXHJcbiAgICAgICAgICAgIC8qKiBjb2RlIHZpZXcgYXJlYSBhdXRvIGxpbmUgKi9cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGVpZ2h0ID09PSAnYXV0bycgJiYgIW9wdGlvbnMuY29kZU1pcnJvckVkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGV2ZW50Ll9jb2RlVmlld0F1dG9IZWlnaHQsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgZXZlbnQuX2NvZGVWaWV3QXV0b0hlaWdodCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBldmVudC5fY29kZVZpZXdBdXRvSGVpZ2h0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKiByZXNpemluZ0JhciAqL1xyXG4gICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50LnJlc2l6aW5nQmFyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoL1xcZCsvLnRlc3Qob3B0aW9ucy5oZWlnaHQpICYmIG9wdGlvbnMucmVzaXplRW5hYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnJlc2l6aW5nQmFyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGV2ZW50Lm9uTW91c2VEb3duX3Jlc2l6aW5nQmFyLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoY29udGV4dC5lbGVtZW50LnJlc2l6aW5nQmFyLCAnc2UtcmVzaXppbmctbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiogc2V0IHJlc3BvbnNlIHRvb2xiYXIgKi9cclxuICAgICAgICAgICAgZXZlbnQuX3NldFJlc3BvbnNpdmVUb29sYmFyKCk7XHJcblxyXG4gICAgICAgICAgICAvKiogcmVzcG9uc2l2ZSB0b29sYmFyIG9ic2VydmVyICovXHJcbiAgICAgICAgICAgIGlmICh1dGlsLmlzUmVzaXplT2JzZXJ2ZXJTdXBwb3J0ZWQpIHRoaXMuX3Rvb2xiYXJPYnNlcnZlciA9IG5ldyBfdy5SZXNpemVPYnNlcnZlcihjb3JlLnJlc2V0UmVzcG9uc2l2ZVRvb2xiYXIpO1xyXG5cclxuICAgICAgICAgICAgLyoqIHdpbmRvdyBldmVudCAqL1xyXG4gICAgICAgICAgICBfdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBldmVudC5vblJlc2l6ZV93aW5kb3csIGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RpY2t5VG9vbGJhciA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBfdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBldmVudC5vblNjcm9sbF93aW5kb3csIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9yZW1vdmVFdmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBldmVudFd5c2l3eWcgPSBvcHRpb25zLmlmcmFtZSA/IGNvcmUuX3d3IDogY29udGV4dC5lbGVtZW50Lnd5c2l3eWc7XHJcblxyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBldmVudC5fYnV0dG9uc0V2ZW50SGFuZGxlcik7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5fbWVudVRyYXkucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZXZlbnQuX2J1dHRvbnNFdmVudEhhbmRsZXIpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50Lm9uQ2xpY2tfdG9vbGJhcik7XHJcblxyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZXZlbnQub25Nb3VzZURvd25fd3lzaXd5Zyk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50Lm9uQ2xpY2tfd3lzaXd5Zyk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5yZW1vdmVFdmVudExpc3RlbmVyKHV0aWwuaXNJRSA/ICd0ZXh0aW5wdXQnIDogJ2lucHV0JywgZXZlbnQub25JbnB1dF93eXNpd3lnKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBldmVudC5vbktleURvd25fd3lzaXd5Zyk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIGV2ZW50Lm9uS2V5VXBfd3lzaXd5Zyk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXN0ZScsIGV2ZW50Lm9uUGFzdGVfd3lzaXd5Zyk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdjb3B5JywgZXZlbnQub25Db3B5X3d5c2l3eWcpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcucmVtb3ZlRXZlbnRMaXN0ZW5lcignY3V0JywgZXZlbnQub25DdXRfd3lzaXd5Zyk7XHJcbiAgICAgICAgICAgIGV2ZW50V3lzaXd5Zy5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgZXZlbnQub25Ecm9wX3d5c2l3eWcpO1xyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZXZlbnQub25TY3JvbGxfd3lzaXd5Zyk7XHJcblxyXG4gICAgICAgICAgICBldmVudFd5c2l3eWcucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZXZlbnQub25Nb3VzZU1vdmVfd3lzaXd5Zyk7XHJcbiAgICAgICAgICAgIGNvcmUuX2xpbmVCcmVha2VyQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGV2ZW50Ll9vbk1vdXNlRG93bl9saW5lQnJlYWspO1xyXG4gICAgICAgICAgICBjb3JlLl9saW5lQnJlYWtlckJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50Ll9saW5lQnJlYWtlckJpbmQuYSk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5saW5lQnJlYWtlcl90LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGV2ZW50Ll9saW5lQnJlYWtlckJpbmQudCk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5saW5lQnJlYWtlcl9iLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGV2ZW50Ll9saW5lQnJlYWtlckJpbmQuYik7XHJcbiAgICAgICAgICAgIGV2ZW50Ll9saW5lQnJlYWtlckJpbmQgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBldmVudC5vbk1vdXNlRG93bl93eXNpd3lnLCB7cGFzc2l2ZTogdHJ1ZSwgdXNlQ2FwdHVyZTogZmFsc2V9KTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgZXZlbnQub25DbGlja193eXNpd3lnLCB7cGFzc2l2ZTogdHJ1ZSwgdXNlQ2FwdHVyZTogZmFsc2V9KTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgZXZlbnQub25Gb2N1c193eXNpd3lnKTtcclxuICAgICAgICAgICAgZXZlbnRXeXNpd3lnLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBldmVudC5vbkJsdXJfd3lzaXd5Zyk7XHJcblxyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuY29kZS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZXZlbnQuX2NvZGVWaWV3QXV0b0hlaWdodCk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgZXZlbnQuX2NvZGVWaWV3QXV0b0hlaWdodCk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZXZlbnQuX2NvZGVWaWV3QXV0b0hlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29udGV4dC5lbGVtZW50LnJlc2l6aW5nQmFyKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQucmVzaXppbmdCYXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZXZlbnQub25Nb3VzZURvd25fcmVzaXppbmdCYXIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlbnQuX3Jlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5fcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuX3Jlc2l6ZU9ic2VydmVyID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGV2ZW50Ll90b29sYmFyT2JzZXJ2ZXIpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50Ll90b29sYmFyT2JzZXJ2ZXIudW5vYnNlcnZlKGNvbnRleHQuZWxlbWVudC5fdG9vbGJhclNoYWRvdyk7XHJcbiAgICAgICAgICAgICAgICBldmVudC5fdG9vbGJhck9ic2VydmVyID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgX3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZXZlbnQub25SZXNpemVfd2luZG93KTtcclxuICAgICAgICAgICAgX3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZXZlbnQub25TY3JvbGxfd2luZG93KTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfc2V0UmVzcG9uc2l2ZVRvb2xiYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKF9yZXNwb25zaXZlQnV0dG9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIF9yZXNwb25zaXZlQnV0dG9ucyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGV2ZW50Ll9yZXNwb25zaXZlQ3VycmVudFNpemUgPSAnZGVmYXVsdCc7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpemVBcnJheSA9IGV2ZW50Ll9yZXNwb25zaXZlQnV0dG9uU2l6ZSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBidXR0b25zT2JqID0gZXZlbnQuX3Jlc3BvbnNpdmVCdXR0b25zID0ge2RlZmF1bHQ6IF9yZXNwb25zaXZlQnV0dG9uc1swXX07XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxLCBsZW4gPSBfcmVzcG9uc2l2ZUJ1dHRvbnMubGVuZ3RoLCBzaXplLCBidXR0b25Hcm91cDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBidXR0b25Hcm91cCA9IF9yZXNwb25zaXZlQnV0dG9uc1tpXTtcclxuICAgICAgICAgICAgICAgIHNpemUgPSBidXR0b25Hcm91cFswXSAqIDE7XHJcbiAgICAgICAgICAgICAgICBzaXplQXJyYXkucHVzaChzaXplKTtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnNPYmpbc2l6ZV0gPSBidXR0b25Hcm91cFsxXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2l6ZUFycmF5LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KS51bnNoaWZ0KCdkZWZhdWx0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKiogZnVuY3Rpb25zICovXHJcbiAgICBjb25zdCBmdW5jdGlvbnMgPSB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvcmUsIFV0aWwgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29yZTogY29yZSxcclxuICAgICAgICB1dGlsOiB1dGlsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgZnVuY3Rpb25zXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGUgRXZlbnQgT2JqZWN0XHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICBvbmxvYWQ6IG51bGwsXHJcbiAgICAgICAgb25TY3JvbGw6IG51bGwsXHJcbiAgICAgICAgb25Nb3VzZURvd246IG51bGwsXHJcbiAgICAgICAgb25DbGljazogbnVsbCxcclxuICAgICAgICBvbklucHV0OiBudWxsLFxyXG4gICAgICAgIG9uS2V5RG93bjogbnVsbCxcclxuICAgICAgICBvbktleVVwOiBudWxsLFxyXG4gICAgICAgIG9uQ29weTogbnVsbCxcclxuICAgICAgICBvbkN1dDogbnVsbCxcclxuICAgICAgICBvbkZvY3VzOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgZnVuY3Rpb25zXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGUgRXZlbnQgT2JqZWN0XHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudHMgQ3VycmVudCBjb250ZW50c1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uQmx1cjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IGZ1bmN0aW9uc1xyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50cyBDdXJyZW50IGNvbnRlbnRzXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICBvbkNoYW5nZTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IGZ1bmN0aW9uc1xyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50cyBDdXJyZW50IGNvbnRlbnRzXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICBvblNhdmU6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudCBmdW5jdGlvbnMgKGRyb3AsIHBhc3RlKVxyXG4gICAgICAgICAqIFdoZW4gZmFsc2UgaXMgcmV0dXJuZWQsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHN0b3BwZWQuXHJcbiAgICAgICAgICogSWYgdGhlIHN0cmluZyBpcyByZXR1cm5lZCwgdGhlIGNsZWFuRGF0YSB2YWx1ZSBpcyBtb2RpZmllZCB0byB0aGUgcmV0dXJuIHZhbHVlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBlIEV2ZW50IG9iamVjdC5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2xlYW5EYXRhIEhUTUwgc3RyaW5nIG1vZGlmaWVkIGZvciBlZGl0b3IgZm9ybWF0LlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gbWF4Q2hhcnRDb3VudCBvcHRpb24gKHRydWUgaWYgbWF4IGNoYXJhY3RlciBpcyBleGNlZWRlZClcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqIEByZXR1cm5zIHtCb29sZWFufFN0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBvbkRyb3A6IG51bGwsXHJcbiAgICAgICAgb25QYXN0ZTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhbGxlZCBqdXN0IGJlZm9yZSB0aGUgaW5saW5lIHRvb2xiYXIgaXMgcG9zaXRpb25lZCBhbmQgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4uXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSB0b29sYmFyIFRvb2xiYXIgRWxlbWVudFxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IFRoZSBlZGl0b3IncyBjb250ZXh0IG9iamVjdCAoZWRpdG9yLmdldENvbnRleHQoKSlcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNob3dJbmxpbmU6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQganVzdCBhZnRlciB0aGUgY29udHJvbGxlciBpcyBwb3NpdGlvbmVkIGFuZCBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbi5cclxuICAgICAgICAgKiBjb250cm9sbGVyIC0gZWRpdGluZyBlbGVtZW50cyBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbiBbaW1hZ2UgcmVzaXppbmcsIHRhYmxlIGVkaXRvciwgbGluayBlZGl0b3IuLl1dXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBsdWdpbiB0aGF0IGNhbGxlZCB0aGUgY29udHJvbGxlclxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGNvbnRyb2xsZXJzIEFycmF5IG9mIENvbnRyb2xsZXIgZWxlbWVudHNcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNob3dDb250cm9sbGVyOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQW4gZXZlbnQgd2hlbiB0b2dnbGluZyBiZXR3ZWVuIGNvZGUgdmlldyBhbmQgd3lzaXd5ZyB2aWV3LlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNDb2RlVmlldyBXaGV0aGVyIHRoZSBjdXJyZW50IGNvZGUgdmlldyBtb2RlXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICB0b2dnbGVDb2RlVmlldzogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEFuIGV2ZW50IHdoZW4gdG9nZ2xpbmcgZnVsbCBzY3JlZW4uXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc0Z1bGxTY3JlZW4gV2hldGhlciB0aGUgY3VycmVudCBmdWxsIHNjcmVlbiBtb2RlXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICB0b2dnbGVGdWxsU2NyZWVuOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSXQgcmVwbGFjZXMgdGhlIGRlZmF1bHQgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdGhlIGltYWdlIHVwbG9hZFxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZSBSZXNwb25zZSBvYmplY3RcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5mbyBJbnB1dCBpbmZvcm1hdGlvblxyXG4gICAgICAgICAqIC0gbGlua1ZhbHVlOiBMaW5rIHVybCB2YWx1ZVxyXG4gICAgICAgICAqIC0gbGlua05ld1dpbmRvdzogT3BlbiBpbiBuZXcgd2luZG93IENoZWNrIFZhbHVlXHJcbiAgICAgICAgICogLSBpbnB1dFdpZHRoOiBWYWx1ZSBvZiB3aWR0aCBpbnB1dFxyXG4gICAgICAgICAqIC0gaW5wdXRIZWlnaHQ6IFZhbHVlIG9mIGhlaWdodCBpbnB1dFxyXG4gICAgICAgICAqIC0gYWxpZ246IEFsaWduIENoZWNrIFZhbHVlXHJcbiAgICAgICAgICogLSBpc1VwZGF0ZTogVXBkYXRlIGltYWdlIGlmIHRydWUsIGNyZWF0ZSBpbWFnZSBpZiBmYWxzZVxyXG4gICAgICAgICAqIC0gZWxlbWVudDogSWYgaXNVcGRhdGUgaXMgdHJ1ZSwgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpbWFnZS5cclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGltYWdlVXBsb2FkSGFuZGxlcjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEl0IHJlcGxhY2VzIHRoZSBkZWZhdWx0IGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHRoZSB2aWRlbyB1cGxvYWRcclxuICAgICAgICAgKiBAcGFyYW0geG1sSHR0cCB4bWxIdHRwUmVxdWVzdCBvYmplY3RcclxuICAgICAgICAgKiBAcGFyYW0gaW5mbyBJbnB1dCBpbmZvcm1hdGlvblxyXG4gICAgICAgICAqIC0gaW5wdXRXaWR0aDogVmFsdWUgb2Ygd2lkdGggaW5wdXRcclxuICAgICAgICAgKiAtIGlucHV0SGVpZ2h0OiBWYWx1ZSBvZiBoZWlnaHQgaW5wdXRcclxuICAgICAgICAgKiAtIGFsaWduOiBBbGlnbiBDaGVjayBWYWx1ZVxyXG4gICAgICAgICAqIC0gaXNVcGRhdGU6IFVwZGF0ZSB2aWRlbyBpZiB0cnVlLCBjcmVhdGUgdmlkZW8gaWYgZmFsc2VcclxuICAgICAgICAgKiAtIGVsZW1lbnQ6IElmIGlzVXBkYXRlIGlzIHRydWUsIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdmlkZW8uXHJcbiAgICAgICAgICogQHBhcmFtIGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICB2aWRlb1VwbG9hZEhhbmRsZXI6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJdCByZXBsYWNlcyB0aGUgZGVmYXVsdCBjYWxsYmFjayBmdW5jdGlvbiBvZiB0aGUgYXVkaW8gdXBsb2FkXHJcbiAgICAgICAgICogQHBhcmFtIHhtbEh0dHAgeG1sSHR0cFJlcXVlc3Qgb2JqZWN0XHJcbiAgICAgICAgICogQHBhcmFtIGluZm8gSW5wdXQgaW5mb3JtYXRpb25cclxuICAgICAgICAgKiAtIGlzVXBkYXRlOiBVcGRhdGUgYXVkaW8gaWYgdHJ1ZSwgY3JlYXRlIGF1ZGlvIGlmIGZhbHNlXHJcbiAgICAgICAgICogLSBlbGVtZW50OiBJZiBpc1VwZGF0ZSBpcyB0cnVlLCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGF1ZGlvLlxyXG4gICAgICAgICAqIEBwYXJhbSBjb3JlIENvcmUgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXVkaW9VcGxvYWRIYW5kbGVyOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIGJlZm9yZSB0aGUgaW1hZ2UgaXMgdXBsb2FkZWRcclxuICAgICAgICAgKiBJZiB0cnVlIGlzIHJldHVybmVkLCB0aGUgaW50ZXJuYWwgdXBsb2FkIHByb2Nlc3MgcnVucyBub3JtYWxseS5cclxuICAgICAgICAgKiBJZiBmYWxzZSBpcyByZXR1cm5lZCwgbm8gaW1hZ2UgdXBsb2FkIGlzIHBlcmZvcm1lZC5cclxuICAgICAgICAgKiBJZiBuZXcgZmlsZUxpc3QgYXJlIHJldHVybmVkLCAgcmVwbGFjZWQgdGhlIHByZXZpb3VzIGZpbGVMaXN0XHJcbiAgICAgICAgICogSWYgdW5kZWZpbmVkIGlzIHJldHVybmVkLCBpdCB3YWl0cyB1bnRpbCBcInVwbG9hZEhhbmRsZXJcIiBpcyBleGVjdXRlZC5cclxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBmaWxlcyBGaWxlcyBhcnJheVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbmZvIGluZm86IHtcclxuICAgICAgICAgKiAtIGxpbmtWYWx1ZTogTGluayB1cmwgdmFsdWVcclxuICAgICAgICAgKiAtIGxpbmtOZXdXaW5kb3c6IE9wZW4gaW4gbmV3IHdpbmRvdyBDaGVjayBWYWx1ZVxyXG4gICAgICAgICAqIC0gaW5wdXRXaWR0aDogVmFsdWUgb2Ygd2lkdGggaW5wdXRcclxuICAgICAgICAgKiAtIGlucHV0SGVpZ2h0OiBWYWx1ZSBvZiBoZWlnaHQgaW5wdXRcclxuICAgICAgICAgKiAtIGFsaWduOiBBbGlnbiBDaGVjayBWYWx1ZVxyXG4gICAgICAgICAqIC0gaXNVcGRhdGU6IFVwZGF0ZSBpbWFnZSBpZiB0cnVlLCBjcmVhdGUgaW1hZ2UgaWYgZmFsc2VcclxuICAgICAgICAgKiAtIGVsZW1lbnQ6IElmIGlzVXBkYXRlIGlzIHRydWUsIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaW1hZ2UuXHJcbiAgICAgICAgICogfVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb3JlIENvcmUgb2JqZWN0XHJcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBsb2FkSGFuZGxlciBJZiB1bmRlZmluZWQgaXMgcmV0dXJuZWQsIGl0IHdhaXRzIHVudGlsIFwidXBsb2FkSGFuZGxlclwiIGlzIGV4ZWN1dGVkLlxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgIFwidXBsb2FkSGFuZGxlclwiIGlzIGFuIHVwbG9hZCBmdW5jdGlvbiB3aXRoIFwiY29yZVwiIGFuZCBcImluZm9cIiBib3VuZC5cclxuICAgICAgICAgKiAgICAgICAgICAgICAgICBbdXBsb2FkIGZpbGVzXSA6IHVwbG9hZEhhbmRsZXIoZmlsZXMgb3IgW25ldyBGaWxlKC4uLiksXSlcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICBbZXJyb3JdICAgICAgICA6IHVwbG9hZEhhbmRsZXIoXCJFcnJvciBtZXNzYWdlXCIpXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgW0p1c3QgZmluaXNoXSAgOiB1cGxvYWRIYW5kbGVyKClcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICBbZGlyZWN0bHkgcmVnaXN0ZXJdIDogdXBsb2FkSGFuZGxlcihyZXNwb25zZSkgLy8gU2FtZSBmb3JtYXQgYXMgXCJpbWFnZVVwbG9hZFVybFwiIHJlc3BvbnNlXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4KSB7XHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFwiZXJyb3JNZXNzYWdlXCI6IFwiaW5zZXJ0IGVycm9yIG1lc3NhZ2VcIixcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZXN1bHRcIjogWyB7IFwidXJsXCI6IFwiLi4uXCIsIFwibmFtZVwiOiBcIi4uLlwiLCBcInNpemVcIjogXCI5OTlcIiB9LCBdXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbnxBcnJheXx1bmRlZmluZWR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25JbWFnZVVwbG9hZEJlZm9yZTogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIGJlZm9yZSB0aGUgdmlkZW8gaXMgdXBsb2FkZWRcclxuICAgICAgICAgKiBJZiB0cnVlIGlzIHJldHVybmVkLCB0aGUgaW50ZXJuYWwgdXBsb2FkIHByb2Nlc3MgcnVucyBub3JtYWxseS5cclxuICAgICAgICAgKiBJZiBmYWxzZSBpcyByZXR1cm5lZCwgbm8gdmlkZW8oaWZyYW1lLCB2aWRlbykgdXBsb2FkIGlzIHBlcmZvcm1lZC5cclxuICAgICAgICAgKiBJZiBuZXcgZmlsZUxpc3QgYXJlIHJldHVybmVkLCAgcmVwbGFjZWQgdGhlIHByZXZpb3VzIGZpbGVMaXN0XHJcbiAgICAgICAgICogSWYgdW5kZWZpbmVkIGlzIHJldHVybmVkLCBpdCB3YWl0cyB1bnRpbCBcInVwbG9hZEhhbmRsZXJcIiBpcyBleGVjdXRlZC5cclxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBmaWxlcyBGaWxlcyBhcnJheVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbmZvIGluZm86IHtcclxuICAgICAgICAgKiAtIGlucHV0V2lkdGg6IFZhbHVlIG9mIHdpZHRoIGlucHV0XHJcbiAgICAgICAgICogLSBpbnB1dEhlaWdodDogVmFsdWUgb2YgaGVpZ2h0IGlucHV0XHJcbiAgICAgICAgICogLSBhbGlnbjogQWxpZ24gQ2hlY2sgVmFsdWVcclxuICAgICAgICAgKiAtIGlzVXBkYXRlOiBVcGRhdGUgdmlkZW8gaWYgdHJ1ZSwgY3JlYXRlIHZpZGVvIGlmIGZhbHNlXHJcbiAgICAgICAgICogLSBlbGVtZW50OiBJZiBpc1VwZGF0ZSBpcyB0cnVlLCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHZpZGVvLlxyXG4gICAgICAgICAqIH1cclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHVwbG9hZEhhbmRsZXIgSWYgdW5kZWZpbmVkIGlzIHJldHVybmVkLCBpdCB3YWl0cyB1bnRpbCBcInVwbG9hZEhhbmRsZXJcIiBpcyBleGVjdXRlZC5cclxuICAgICAgICAgKiAgICAgICAgICAgICAgICBcInVwbG9hZEhhbmRsZXJcIiBpcyBhbiB1cGxvYWQgZnVuY3Rpb24gd2l0aCBcImNvcmVcIiBhbmQgXCJpbmZvXCIgYm91bmQuXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgW3VwbG9hZCBmaWxlc10gOiB1cGxvYWRIYW5kbGVyKGZpbGVzIG9yIFtuZXcgRmlsZSguLi4pLF0pXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgW2Vycm9yXSAgICAgICAgOiB1cGxvYWRIYW5kbGVyKFwiRXJyb3IgbWVzc2FnZVwiKVxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgIFtKdXN0IGZpbmlzaF0gIDogdXBsb2FkSGFuZGxlcigpXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgW2RpcmVjdGx5IHJlZ2lzdGVyXSA6IHVwbG9hZEhhbmRsZXIocmVzcG9uc2UpIC8vIFNhbWUgZm9ybWF0IGFzIFwidmlkZW9VcGxvYWRVcmxcIiByZXNwb25zZVxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleCkge1xyXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBcImVycm9yTWVzc2FnZVwiOiBcImluc2VydCBlcnJvciBtZXNzYWdlXCIsXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVzdWx0XCI6IFsgeyBcInVybFwiOiBcIi4uLlwiLCBcIm5hbWVcIjogXCIuLi5cIiwgXCJzaXplXCI6IFwiOTk5XCIgfSwgXVxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICogQHJldHVybnMge0Jvb2xlYW58QXJyYXl8dW5kZWZpbmVkfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uVmlkZW9VcGxvYWRCZWZvcmU6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhbGxlZCBiZWZvcmUgdGhlIGF1ZGlvIGlzIHVwbG9hZGVkXHJcbiAgICAgICAgICogSWYgdHJ1ZSBpcyByZXR1cm5lZCwgdGhlIGludGVybmFsIHVwbG9hZCBwcm9jZXNzIHJ1bnMgbm9ybWFsbHkuXHJcbiAgICAgICAgICogSWYgZmFsc2UgaXMgcmV0dXJuZWQsIG5vIGF1ZGlvIHVwbG9hZCBpcyBwZXJmb3JtZWQuXHJcbiAgICAgICAgICogSWYgbmV3IGZpbGVMaXN0IGFyZSByZXR1cm5lZCwgIHJlcGxhY2VkIHRoZSBwcmV2aW91cyBmaWxlTGlzdFxyXG4gICAgICAgICAqIElmIHVuZGVmaW5lZCBpcyByZXR1cm5lZCwgaXQgd2FpdHMgdW50aWwgXCJ1cGxvYWRIYW5kbGVyXCIgaXMgZXhlY3V0ZWQuXHJcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gZmlsZXMgRmlsZXMgYXJyYXlcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5mbyBpbmZvOiB7XHJcbiAgICAgICAgICogLSBpc1VwZGF0ZTogVXBkYXRlIGF1ZGlvIGlmIHRydWUsIGNyZWF0ZSBhdWRpbyBpZiBmYWxzZVxyXG4gICAgICAgICAqIC0gZWxlbWVudDogSWYgaXNVcGRhdGUgaXMgdHJ1ZSwgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBhdWRpby5cclxuICAgICAgICAgKiB9XHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3RcclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGxvYWRIYW5kbGVyIElmIHVuZGVmaW5lZCBpcyByZXR1cm5lZCwgaXQgd2FpdHMgdW50aWwgXCJ1cGxvYWRIYW5kbGVyXCIgaXMgZXhlY3V0ZWQuXHJcbiAgICAgICAgICogICAgICAgICAgICAgICAgXCJ1cGxvYWRIYW5kbGVyXCIgaXMgYW4gdXBsb2FkIGZ1bmN0aW9uIHdpdGggXCJjb3JlXCIgYW5kIFwiaW5mb1wiIGJvdW5kLlxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgIFt1cGxvYWQgZmlsZXNdIDogdXBsb2FkSGFuZGxlcihmaWxlcyBvciBbbmV3IEZpbGUoLi4uKSxdKVxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgIFtlcnJvcl0gICAgICAgIDogdXBsb2FkSGFuZGxlcihcIkVycm9yIG1lc3NhZ2VcIilcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICBbSnVzdCBmaW5pc2hdICA6IHVwbG9hZEhhbmRsZXIoKVxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgIFtkaXJlY3RseSByZWdpc3Rlcl0gOiB1cGxvYWRIYW5kbGVyKHJlc3BvbnNlKSAvLyBTYW1lIGZvcm1hdCBhcyBcImF1ZGlvVXBsb2FkVXJsXCIgcmVzcG9uc2VcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXgpIHtcclxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXCJlcnJvck1lc3NhZ2VcIjogXCJpbnNlcnQgZXJyb3IgbWVzc2FnZVwiLFxyXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlc3VsdFwiOiBbIHsgXCJ1cmxcIjogXCIuLi5cIiwgXCJuYW1lXCI6IFwiLi4uXCIsIFwic2l6ZVwiOiBcIjk5OVwiIH0sIF1cclxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtCb29sZWFufEFycmF5fHVuZGVmaW5lZH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvbkF1ZGlvVXBsb2FkQmVmb3JlOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIHdoZW4gdGhlIGltYWdlIGlzIHVwbG9hZGVkLCB1cGRhdGVkLCBkZWxldGVkXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSB0YXJnZXRFbGVtZW50IFRhcmdldCBlbGVtZW50XHJcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4IFVwbG9hZGVkIGluZGV4XHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHN0YXRlIFVwbG9hZCBzdGF0dXMgKCdjcmVhdGUnLCAndXBkYXRlJywgJ2RlbGV0ZScpXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGluZm8gSW1hZ2UgaW5mbyBvYmplY3RcclxuICAgICAgICAgKiAtIGluZGV4OiBkYXRhIGluZGV4XHJcbiAgICAgICAgICogLSBuYW1lOiBmaWxlIG5hbWVcclxuICAgICAgICAgKiAtIHNpemU6IGZpbGUgc2l6ZVxyXG4gICAgICAgICAqIC0gc2VsZWN0OiBzZWxlY3QgZnVuY3Rpb25cclxuICAgICAgICAgKiAtIGRlbGV0ZTogZGVsZXRlIGZ1bmN0aW9uXHJcbiAgICAgICAgICogLSBlbGVtZW50OiB0YXJnZXQgZWxlbWVudFxyXG4gICAgICAgICAqIC0gc3JjOiBzcmMgYXR0cmlidXRlIG9mIHRhZ1xyXG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSByZW1haW5pbmdGaWxlc0NvdW50IENvdW50IG9mIHJlbWFpbmluZyBmaWxlcyB0byB1cGxvYWQgKDAgd2hlbiBhZGRlZCBhcyBhIHVybClcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uSW1hZ2VVcGxvYWQ6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIHdoZW4gdGhlIHZpZGVvKGlmcmFtZSwgdmlkZW8pIGlzIGlzIHVwbG9hZGVkLCB1cGRhdGVkLCBkZWxldGVkXHJcbiAgICAgICAgKiAtLSBhcmd1bWVudHMgaXMgc2FtZSBcIm9uSW1hZ2VVcGxvYWRcIiAtLVxyXG4gICAgICAgICovXHJcbiAgICAgICAgb25WaWRlb1VwbG9hZDogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQgd2hlbiB0aGUgYXVkaW8gaXMgaXMgdXBsb2FkZWQsIHVwZGF0ZWQsIGRlbGV0ZWRcclxuICAgICAgICAqIC0tIGFyZ3VtZW50cyBpcyBzYW1lIFwib25JbWFnZVVwbG9hZFwiIC0tXHJcbiAgICAgICAgKi9cclxuICAgICAgICBvbkF1ZGlvVXBsb2FkOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIHdoZW4gdGhlIGltYWdlIGlzIHVwbG9hZCBmYWlsZWRcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXJyb3JNZXNzYWdlIEVycm9yIG1lc3NhZ2VcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVzdWx0IFJlc3BvbnNlIE9iamVjdFxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb3JlIENvcmUgb2JqZWN0XHJcbiAgICAgICAgICogQHJldHVybnMge0Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25JbWFnZVVwbG9hZEVycm9yOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQgd2hlbiB0aGUgdmlkZW8oaWZyYW1lLCB2aWRlbykgdXBsb2FkIGZhaWxlZFxyXG4gICAgICAgICAqIC0tIGFyZ3VtZW50cyBpcyBzYW1lIFwib25JbWFnZVVwbG9hZEVycm9yXCIgLS1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvblZpZGVvVXBsb2FkRXJyb3I6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhbGxlZCB3aGVuIHRoZSBhdWRpbyB1cGxvYWQgZmFpbGVkXHJcbiAgICAgICAgICogLS0gYXJndW1lbnRzIGlzIHNhbWUgXCJvbkltYWdlVXBsb2FkRXJyb3JcIiAtLVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uQXVkaW9VcGxvYWRFcnJvcjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhbGxlZCB3aGVuIHRoZSBlZGl0b3IgaXMgcmVzaXplZCB1c2luZyB0aGUgYm90dG9tIGJhclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uUmVzaXplRWRpdG9yOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2FsbGVkIGFmdGVyIHRoZSBcInNldFRvb2xiYXJCdXR0b25zXCIgaW52b2NhdGlvbi5cclxuICAgICAgICAgKiBDYW4gYmUgdXNlZCB0byB0d2VhayBidXR0b25zIHByb3BlcnRpZXMgKHVzZWZ1bCBmb3IgY3VzdG9tIGJ1dHRvbnMpXHJcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYnV0dG9uTGlzdCBCdXR0b24gbGlzdCBcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29yZSBDb3JlIG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uU2V0VG9vbGJhckJ1dHRvbnM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXNldCB0aGUgYnV0dG9ucyBvbiB0aGUgdG9vbGJhci4gKEVkaXRvciBpcyBub3QgcmVsb2FkZWQpXHJcbiAgICAgICAgICogWW91IGNhbm5vdCBzZXQgYSBuZXcgcGx1Z2luIGZvciB0aGUgYnV0dG9uLlxyXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGJ1dHRvbkxpc3QgQnV0dG9uIGxpc3QgXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0VG9vbGJhckJ1dHRvbnM6IGZ1bmN0aW9uIChidXR0b25MaXN0KSB7XHJcbiAgICAgICAgICAgIGNvcmUuc3VibWVudU9mZigpO1xyXG4gICAgICAgICAgICBjb3JlLmNvbnRhaW5lck9mZigpO1xyXG4gICAgICAgICAgICBjb3JlLm1vcmVMYXllck9mZigpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbmV3VG9vbGJhciA9IF9Db25zdHJ1Y3Rvci5fY3JlYXRlVG9vbEJhcihfZCwgYnV0dG9uTGlzdCwgY29yZS5wbHVnaW5zLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgX3Jlc3BvbnNpdmVCdXR0b25zID0gbmV3VG9vbGJhci5yZXNwb25zaXZlQnV0dG9ucztcclxuICAgICAgICAgICAgZXZlbnQuX3NldFJlc3BvbnNpdmVUb29sYmFyKCk7XHJcblxyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQudG9vbGJhci5yZXBsYWNlQ2hpbGQobmV3VG9vbGJhci5fYnV0dG9uVHJheSwgY29udGV4dC5lbGVtZW50Ll9idXR0b25UcmF5KTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IF9Db250ZXh0KGNvbnRleHQuZWxlbWVudC5vcmlnaW5FbGVtZW50LCBjb3JlLl9nZXRDb25zdHJ1Y3RlZChjb250ZXh0LmVsZW1lbnQpLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudCA9IG5ld0NvbnRleHQuZWxlbWVudDtcclxuICAgICAgICAgICAgY29udGV4dC50b29sID0gbmV3Q29udGV4dC50b29sO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pZnJhbWUpIGNvbnRleHQuZWxlbWVudC53eXNpd3lnID0gY29yZS5fd2QuYm9keTtcclxuXHJcbiAgICAgICAgICAgIGNvcmUuX3JlY292ZXJCdXR0b25TdGF0ZXMoKTtcclxuICAgICAgICAgICAgY29yZS5fY2FjaGluZ0J1dHRvbnMoKTtcclxuICAgICAgICAgICAgY29yZS5oaXN0b3J5Ll9yZXNldENhY2hpbmdCdXR0b24oKTtcclxuXHJcbiAgICAgICAgICAgIGNvcmUuZWZmZWN0Tm9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLmhhc0ZvY3VzKSBldmVudC5fYXBwbHlUYWdFZmZlY3RzKCk7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLmlzUmVhZE9ubHkpIHV0aWwuc2V0RGlzYWJsZWRCdXR0b25zKHRydWUsIGNvcmUucmVzaXppbmdEaXNhYmxlZEJ1dHRvbnMpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmN0aW9ucy5vblNldFRvb2xiYXJCdXR0b25zID09PSAnZnVuY3Rpb24nKSBmdW5jdGlvbnMub25TZXRUb29sYmFyQnV0dG9ucyhuZXdUb29sYmFyLl9idXR0b25UcmF5LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpLCBjb3JlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQWRkIG9yIHJlc2V0IG9wdGlvbiBwcm9wZXJ0eSAoRWRpdG9yIGlzIHJlbG9hZGVkKVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBfb3B0aW9ucyBPcHRpb25zXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0T3B0aW9uczogZnVuY3Rpb24gKF9vcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGV2ZW50Ll9yZW1vdmVFdmVudCgpO1xyXG4gICAgICAgICAgICBjb3JlLl9yZXNldENvbXBvbmVudHMoKTtcclxuXHJcbiAgICAgICAgICAgIHV0aWwucmVtb3ZlQ2xhc3MoY29yZS5fc3R5bGVDb21tYW5kTWFwLnNob3dCbG9ja3MsICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVDbGFzcyhjb3JlLl9zdHlsZUNvbW1hbmRNYXAuY29kZVZpZXcsICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgY29yZS5fdmFyaWFibGUuaXNDb2RlVmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb3JlLl9pZnJhbWVBdXRvID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGNvcmUucGx1Z2lucyA9IF9vcHRpb25zLnBsdWdpbnMgfHwgY29yZS5wbHVnaW5zO1xyXG4gICAgICAgICAgICBjb25zdCBtZXJnZU9wdGlvbnMgPSBbb3B0aW9ucywgX29wdGlvbnNdLnJlZHVjZShmdW5jdGlvbiAoaW5pdCwgb3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gb3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1dGlsLmhhc093bihvcHRpb24sIGtleSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdwbHVnaW5zJyAmJiBvcHRpb25ba2V5XSAmJiBpbml0W2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbml0W2tleV0sIG8gPSBvcHRpb25ba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkubGVuZ3RoID8gaSA6IF93Lk9iamVjdC5rZXlzKGkpLm1hcChmdW5jdGlvbihuYW1lKSB7IHJldHVybiBpW25hbWVdOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbyA9IG8ubGVuZ3RoID8gbyA6IF93Lk9iamVjdC5rZXlzKG8pLm1hcChmdW5jdGlvbihuYW1lKSB7IHJldHVybiBvW25hbWVdOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdFtrZXldID0gKG8uZmlsdGVyKGZ1bmN0aW9uKHZhbCkgeyByZXR1cm4gaS5pbmRleE9mKHZhbCkgPT09IC0xOyB9KSkuY29uY2F0KGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRba2V5XSA9IG9wdGlvbltrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBpbml0O1xyXG4gICAgICAgICAgICB9LCB7fSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBlbCA9IGNvbnRleHQuZWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3QgX2luaXRIVE1MID0gZWwud3lzaXd5Zy5pbm5lckhUTUw7XHJcblxyXG4gICAgICAgICAgICAvLyBzZXQgb3B0aW9uXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnMgPSBfQ29uc3RydWN0b3IuX3NldE9wdGlvbnMobWVyZ2VPcHRpb25zLCBjb250ZXh0LCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb25zLmNhbGxCdXR0b25zKSB7XHJcbiAgICAgICAgICAgICAgICBwbHVnaW5DYWxsQnV0dG9ucyA9IGNvbnMuY2FsbEJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICBjb3JlLmluaXRQbHVnaW5zID0ge307XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb25zLnBsdWdpbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvcmUucGx1Z2lucyA9IHBsdWdpbnMgPSBjb25zLnBsdWdpbnM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHJlc2V0IGNvbnRleHRcclxuICAgICAgICAgICAgaWYgKGVsLl9tZW51VHJheS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHRoaXMuX21lbnVUcmF5ID0ge307XHJcbiAgICAgICAgICAgIF9yZXNwb25zaXZlQnV0dG9ucyA9IGNvbnMudG9vbGJhci5yZXNwb25zaXZlQnV0dG9ucztcclxuICAgICAgICAgICAgY29yZS5vcHRpb25zID0gb3B0aW9ucyA9IG1lcmdlT3B0aW9ucztcclxuICAgICAgICAgICAgY29yZS5sYW5nID0gbGFuZyA9IG9wdGlvbnMubGFuZztcclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgZWwud3lzaXd5Z0ZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5fc2V0SWZyYW1lRG9jdW1lbnQodGhpcywgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5fc2V0T3B0aW9uc0luaXQoZWwsIF9pbml0SFRNTCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWwuZWRpdG9yQXJlYS5hcHBlbmRDaGlsZChlbC53eXNpd3lnRnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgY29yZS5fc2V0T3B0aW9uc0luaXQoZWwsIF9pbml0SFRNTCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2V0IFwib3B0aW9ucy5kZWZhdWx0U3R5bGVcIiBzdHlsZS5cclxuICAgICAgICAgKiBEZWZpbmUgdGhlIHN0eWxlIG9mIHRoZSBlZGl0IGFyZWFcclxuICAgICAgICAgKiBJdCBjYW4gYWxzbyBiZSBkZWZpbmVkIHdpdGggdGhlIFwic2V0T3B0aW9uc1wiIG1ldGhvZCwgYnV0IHRoZSBcInNldERlZmF1bHRTdHlsZVwiIG1ldGhvZCBkb2VzIG5vdCByZW5kZXIgdGhlIGVkaXRvciBhZ2Fpbi5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3R5bGUgU3R5bGUgc3RyaW5nXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0RGVmYXVsdFN0eWxlOiBmdW5jdGlvbiAoc3R5bGUpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3U3R5bGVzID0gb3B0aW9ucy5fZWRpdG9yU3R5bGVzID0gdXRpbC5fc2V0RGVmYXVsdE9wdGlvblN0eWxlKG9wdGlvbnMsIHN0eWxlKTtcclxuICAgICAgICAgICAgY29uc3QgZWwgPSBjb250ZXh0LmVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICAvLyB0b3AgYXJlYVxyXG4gICAgICAgICAgICBlbC50b3BBcmVhLnN0eWxlLmNzc1RleHQgPSBuZXdTdHlsZXMudG9wO1xyXG4gICAgICAgICAgICAvLyBjb2RlIHZpZXdcclxuICAgICAgICAgICAgZWwuY29kZS5zdHlsZS5jc3NUZXh0ID0gb3B0aW9ucy5fZWRpdG9yU3R5bGVzLmZyYW1lO1xyXG4gICAgICAgICAgICBlbC5jb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmhlaWdodCA9PT0gJ2F1dG8nKSB7XHJcbiAgICAgICAgICAgICAgICBlbC5jb2RlLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbC5jb2RlLnN0eWxlLm92ZXJmbG93ID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gd3lzaXd5ZyBmcmFtZVxyXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuaWZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBlbC53eXNpd3lnRnJhbWUuc3R5bGUuY3NzVGV4dCA9IG5ld1N0eWxlcy5mcmFtZSArIG5ld1N0eWxlcy5lZGl0b3I7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbC53eXNpd3lnRnJhbWUuc3R5bGUuY3NzVGV4dCA9IG5ld1N0eWxlcy5mcmFtZTtcclxuICAgICAgICAgICAgICAgIGVsLnd5c2l3eWcuc3R5bGUuY3NzVGV4dCA9IG5ld1N0eWxlcy5lZGl0b3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gT3BlbiBhIG5vdGljZSBhcmVhXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgTm90aWNlIG1lc3NhZ2VcclxuICAgICAgICAgKi9cclxuICAgICAgICBub3RpY2VPcGVuOiBmdW5jdGlvbiAobWVzc2FnZSkge1xyXG4gICAgICAgICAgICBjb3JlLm5vdGljZS5vcGVuLmNhbGwoY29yZSwgbWVzc2FnZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENsb3NlIGEgbm90aWNlIGFyZWFcclxuICAgICAgICAgKi9cclxuICAgICAgICBub3RpY2VDbG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb3JlLm5vdGljZS5jbG9zZS5jYWxsKGNvcmUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDb3B5aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgZWRpdG9yIHRvIHRoZSBvcmlnaW5hbCB0ZXh0YXJlYSBhbmQgZXhlY3V0ZSBvblNhdmUgY2FsbGJhY2tcclxuICAgICAgICAgKiAqIG5vdCB3b3JraW5nIGR1cmluZyBlbmFibGVkIGNvZGVWaWV3IG1vZGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBzYXZlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gY29yZS5nZXRDb250ZW50cyhmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5vcmlnaW5FbGVtZW50LnZhbHVlID0gY29udGVudHM7XHJcbiAgICAgICAgICAgIGV2ZW50Lm9uU2F2ZV93eXNpd3lnKGNvbnRlbnRzLCBjb3JlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgc3VuZWRpdG9yJ3MgY29udGV4dCBvYmplY3QuIENvbnRhaW5zIHNldHRpbmdzLCBwbHVnaW5zLCBhbmQgY2FjaGVkIGVsZW1lbnQgb2JqZWN0c1xyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0Q29udGV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgY29udGVudHMgb2YgdGhlIHN1bmVkaXRvclxyXG4gICAgICAgICAqICogbm90IHdvcmtpbmcgZHVyaW5nIGVuYWJsZWQgY29kZVZpZXcgbW9kZVxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gb25seUNvbnRlbnRzIC0gUmV0dXJuIG9ubHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBib2R5IHdpdGhvdXQgaGVhZGVycyB3aGVuIHRoZSBcImZ1bGxQYWdlXCIgb3B0aW9uIGlzIHRydWVcclxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldENvbnRlbnRzOiBmdW5jdGlvbiAob25seUNvbnRlbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3JlLmdldENvbnRlbnRzKG9ubHlDb250ZW50cyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldHMgb25seSB0aGUgdGV4dCBvZiB0aGUgc3VuZWRpdG9yIGNvbnRlbnRzXHJcbiAgICAgICAgICogKiBub3Qgd29ya2luZyBkdXJpbmcgZW5hYmxlZCBjb2RlVmlldyBtb2RlXHJcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRUZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy50ZXh0Q29udGVudDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0IHRoZSBlZGl0b3IncyBudW1iZXIgb2YgY2hhcmFjdGVycyBvciBiaW5hcnkgZGF0YSBzaXplLlxyXG4gICAgICAgICAqIFlvdSBjYW4gdXNlIHRoZSBcImNoYXJDb3VudGVyVHlwZVwiIG9wdGlvbiBmb3JtYXQuXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8bnVsbH0gY2hhckNvdW50ZXJUeXBlIG9wdGlvbnMgLSBjaGFyQ291bnRlclR5cGUgKCdjaGFyJywgJ2J5dGUnLCAnYnl0ZS1odG1sJylcclxuICAgICAgICAgKiBJZiBhcmd1bWVudCBpcyBubyB2YWx1ZSwgdGhlIGN1cnJlbnRseSBzZXQgXCJjaGFyQ291bnRlclR5cGVcIiBvcHRpb24gaXMgdXNlZC5cclxuICAgICAgICAgKiBAcmV0dXJucyB7TnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldENoYXJDb3VudDogZnVuY3Rpb24gKGNoYXJDb3VudGVyVHlwZSkge1xyXG4gICAgICAgICAgICBjaGFyQ291bnRlclR5cGUgPSB0eXBlb2YgY2hhckNvdW50ZXJUeXBlID09PSAnc3RyaW5nJyA/IGNoYXJDb3VudGVyVHlwZSA6IG9wdGlvbnMuY2hhckNvdW50ZXJUeXBlO1xyXG4gICAgICAgICAgICByZXR1cm4gY29yZS5nZXRDaGFyTGVuZ3RoKChjb3JlLl9jaGFyVHlwZUhUTUwgPyBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5pbm5lckhUTUwgOiBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy50ZXh0Q29udGVudCksIGNoYXJDb3VudGVyVHlwZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldHMgdXBsb2FkZWQgaW1hZ2VzIGluZm9ybWF0aW9uc1xyXG4gICAgICAgICAqIC0gaW5kZXg6IGRhdGEgaW5kZXhcclxuICAgICAgICAgKiAtIG5hbWU6IGZpbGUgbmFtZVxyXG4gICAgICAgICAqIC0gc2l6ZTogZmlsZSBzaXplXHJcbiAgICAgICAgICogLSBzZWxlY3Q6IHNlbGVjdCBmdW5jdGlvblxyXG4gICAgICAgICAqIC0gZGVsZXRlOiBkZWxldGUgZnVuY3Rpb25cclxuICAgICAgICAgKiAtIGVsZW1lbnQ6IHRhcmdldCBlbGVtZW50XHJcbiAgICAgICAgICogLSBzcmM6IHNyYyBhdHRyaWJ1dGUgb2YgdGFnXHJcbiAgICAgICAgICogQHJldHVybnMge0FycmF5fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldEltYWdlc0luZm86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuaW1hZ2UgPyBjb250ZXh0LmltYWdlLl9pbmZvTGlzdCA6IFtdO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIHVwbG9hZGVkIGZpbGVzKHBsdWdpbiB1c2luZyBmaWxlTWFuYWdlcikgaW5mb3JtYXRpb24gbGlzdC5cclxuICAgICAgICAgKiBpbWFnZTogW2ltZ10sIHZpZGVvOiBbdmlkZW8sIGlmcmFtZV0sIGF1ZGlvOiBbYXVkaW9dXHJcbiAgICAgICAgICogV2hlbiB0aGUgYXJndW1lbnQgdmFsdWUgaXMgJ2ltYWdlJywgaXQgaXMgdGhlIHNhbWUgZnVuY3Rpb24gYXMgXCJnZXRJbWFnZXNJbmZvXCIuXHJcbiAgICAgICAgICogLSBpbmRleDogZGF0YSBpbmRleFxyXG4gICAgICAgICAqIC0gbmFtZTogZmlsZSBuYW1lXHJcbiAgICAgICAgICogLSBzaXplOiBmaWxlIHNpemVcclxuICAgICAgICAgKiAtIHNlbGVjdDogc2VsZWN0IGZ1bmN0aW9uXHJcbiAgICAgICAgICogLSBkZWxldGU6IGRlbGV0ZSBmdW5jdGlvblxyXG4gICAgICAgICAqIC0gZWxlbWVudDogdGFyZ2V0IGVsZW1lbnRcclxuICAgICAgICAgKiAtIHNyYzogc3JjIGF0dHJpYnV0ZSBvZiB0YWdcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZSBQbHVnaW4gbmFtZSAoaW1hZ2UsIHZpZGVvLCBhdWRpbylcclxuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0RmlsZXNJbmZvOiBmdW5jdGlvbiAocGx1Z2luTmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dFtwbHVnaW5OYW1lXSA/IGNvbnRleHRbcGx1Z2luTmFtZV0uX2luZm9MaXN0IDogW107XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFVwbG9hZCBpbWFnZXMgdXNpbmcgaW1hZ2UgcGx1Z2luXHJcbiAgICAgICAgICogQHBhcmFtIHtGaWxlTGlzdH0gZmlsZXMgRmlsZUxpc3RcclxuICAgICAgICAgKi9cclxuICAgICAgICBpbnNlcnRJbWFnZTogZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgIGlmICghY29yZS5wbHVnaW5zLmltYWdlIHx8ICFmaWxlcykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjb3JlLmluaXRQbHVnaW5zLmltYWdlKSBjb3JlLmNhbGxQbHVnaW4oJ2ltYWdlJywgY29yZS5wbHVnaW5zLmltYWdlLnN1Ym1pdEFjdGlvbi5iaW5kKGNvcmUsIGZpbGVzKSwgbnVsbCk7XHJcbiAgICAgICAgICAgIGVsc2UgY29yZS5wbHVnaW5zLmltYWdlLnN1Ym1pdEFjdGlvbi5jYWxsKGNvcmUsIGZpbGVzKTtcclxuICAgICAgICAgICAgY29yZS5mb2N1cygpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBJbnNlcnRzIGFuIEhUTUwgZWxlbWVudCBvciBIVE1MIHN0cmluZyBvciBwbGFpbiBzdHJpbmcgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fFN0cmluZ30gaHRtbCBIVE1MIEVsZW1lbnQgb3IgSFRNTCBzdHJpbmcgb3IgcGxhaW4gc3RyaW5nXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBub3RDbGVhbmluZ0RhdGEgSWYgdHJ1ZSwgaW5zZXJ0cyB0aGUgSFRNTCBzdHJpbmcgd2l0aG91dCByZWZpbmluZyBpdCB3aXRoIGNvcmUuY2xlYW5IVE1MLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gY2hlY2tDaGFyQ291bnQgSWYgdHJ1ZSwgaWYgXCJvcHRpb25zLm1heENoYXJDb3VudFwiIGlzIGV4Y2VlZGVkIHdoZW4gXCJlbGVtZW50XCIgaXMgYWRkZWQsIG51bGwgaXMgcmV0dXJuZWQgd2l0aG91dCBhZGRpdGlvbi5cclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJhbmdlU2VsZWN0aW9uIElmIHRydWUsIHJhbmdlIHNlbGVjdCB0aGUgaW5zZXJ0ZWQgbm9kZS5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpbnNlcnRIVE1MOiBmdW5jdGlvbiAoaHRtbCwgbm90Q2xlYW5pbmdEYXRhLCBjaGVja0NoYXJDb3VudCwgcmFuZ2VTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKCFjb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLmNvbnRhaW5zKGNvcmUuZ2V0U2VsZWN0aW9uKCkuZm9jdXNOb2RlKSkgY29yZS5mb2N1cygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBodG1sID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub3RDbGVhbmluZ0RhdGEpIGh0bWwgPSBjb3JlLmNsZWFuSFRNTChodG1sLCBudWxsLCBudWxsKTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNMaXN0Q2VsbCh1dGlsLmdldEZvcm1hdEVsZW1lbnQoY29yZS5nZXRTZWxlY3Rpb25Ob2RlKCksIG51bGwpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb20gPSBfZC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChodG1sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tVHJlZSA9IGRvbS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29yZS5faXNGb3JtYXREYXRhKGRvbVRyZWUpKSBodG1sID0gY29yZS5fY29udmVydExpc3RDZWxsKGRvbVRyZWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tID0gX2QuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tVHJlZSA9IGRvbS5jaGlsZE5vZGVzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tDaGFyQ291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IGNvcmUuX2NoYXJUeXBlSFRNTCA/ICdvdXRlckhUTUwnIDogJ3RleHRDb250ZW50JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrSFRNTCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZG9tVHJlZS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tIVE1MICs9IGRvbVRyZWVbaV1bdHlwZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb3JlLmNoZWNrQ2hhckNvdW50KGNoZWNrSFRNTCwgbnVsbCkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjLCBhLCB0LCBwcmV2LCBmaXJzdENvbjtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGMgPSBkb21UcmVlWzBdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAmJiBwcmV2Lm5vZGVUeXBlID09PSAzICYmIGEgJiYgYS5ub2RlVHlwZSA9PT0gMSAmJiB1dGlsLmlzQnJlYWsoYykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBjO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGNvcmUuaW5zZXJ0Tm9kZShjLCBhLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSB0LmNvbnRhaW5lciB8fCB0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0Q29uKSBmaXJzdENvbiA9IHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBjO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYubm9kZVR5cGUgPT09IDMgJiYgYS5ub2RlVHlwZSA9PT0gMSkgYSA9IHByZXY7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gYS5ub2RlVHlwZSA9PT0gMyA/ICh0LmVuZE9mZnNldCB8fCBhLnRleHRDb250ZW50Lmxlbmd0aCk6IGEuY2hpbGROb2Rlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlU2VsZWN0aW9uKSBjb3JlLnNldFJhbmdlKGZpcnN0Q29uLmNvbnRhaW5lciB8fCBmaXJzdENvbiwgZmlyc3RDb24uc3RhcnRPZmZzZXQgfHwgMCwgYSwgb2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGNvcmUuc2V0UmFuZ2UoYSwgb2Zmc2V0LCBhLCBvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29yZS5pc0Rpc2FibGVkIHx8IGNvcmUuaXNSZWFkT25seSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1NVTkVESVRPUi5pbnNlcnRIVE1MLmZhaWxdICcgKyBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBodG1sKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzQ29tcG9uZW50KGh0bWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5pbnNlcnRDb21wb25lbnQoaHRtbCwgZmFsc2UsIGNoZWNrQ2hhckNvdW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhZnRlck5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzRm9ybWF0RWxlbWVudChodG1sKSB8fCB1dGlsLmlzTWVkaWEoaHRtbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOb2RlID0gdXRpbC5nZXRGb3JtYXRFbGVtZW50KGNvcmUuZ2V0U2VsZWN0aW9uTm9kZSgpLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZS5pbnNlcnROb2RlKGh0bWwsIGFmdGVyTm9kZSwgY2hlY2tDaGFyQ291bnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb3JlLmVmZmVjdE5vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICBjb3JlLmZvY3VzKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgIGNvcmUuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGUgc3VuZWRpdG9yXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfSBjb250ZW50cyBDb250ZW50cyB0byBJbnB1dFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNldENvbnRlbnRzOiBmdW5jdGlvbiAoY29udGVudHMpIHtcclxuICAgICAgICAgICAgY29yZS5zZXRDb250ZW50cyhjb250ZW50cyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEFkZCBjb250ZW50cyB0byB0aGUgc3VuZWRpdG9yXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbnRlbnRzIENvbnRlbnRzIHRvIElucHV0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXBwZW5kQ29udGVudHM6IGZ1bmN0aW9uIChjb250ZW50cykge1xyXG4gICAgICAgICAgICBjb25zdCBjb252ZXJ0VmFsdWUgPSBjb3JlLmNvbnZlcnRDb250ZW50c0ZvckVkaXRvcihjb250ZW50cyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvcmUuX3ZhcmlhYmxlLmlzQ29kZVZpZXcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXAgPSB1dGlsLmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xyXG4gICAgICAgICAgICAgICAgdGVtcC5pbm5lckhUTUwgPSBjb252ZXJ0VmFsdWU7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgd3lzaXd5ZyA9IGNvbnRleHQuZWxlbWVudC53eXNpd3lnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0ZW1wLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHd5c2l3eWcuYXBwZW5kQ2hpbGQoY2hpbGRyZW5baV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcmUuX3NldENvZGVWaWV3KGNvcmUuX2dldENvZGVWaWV3KCkgKyAnXFxuJyArIGNvcmUuY29udmVydEhUTUxGb3JDb2RlVmlldyhjb252ZXJ0VmFsdWUsIGZhbHNlKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgICAgY29yZS5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTd2l0Y2ggdG8gb3Igb2ZmIFwiUmVhZE9ubHlcIiBtb2RlLlxyXG4gICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gdmFsdWUgXCJyZWFkT25seVwiIGJvb2xlYW4gdmFsdWUuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVhZE9ubHk6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBjb3JlLmlzUmVhZE9ubHkgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHV0aWwuc2V0RGlzYWJsZWRCdXR0b25zKCEhdmFsdWUsIGNvcmUucmVzaXppbmdEaXNhYmxlZEJ1dHRvbnMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogb2ZmIG1lbnVzICovXHJcbiAgICAgICAgICAgICAgICBjb3JlLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29yZS5zdWJtZW51QWN0aXZlQnV0dG9uICYmIGNvcmUuc3VibWVudUFjdGl2ZUJ1dHRvbi5kaXNhYmxlZCkgY29yZS5zdWJtZW51T2ZmKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29yZS5fbW9yZUxheWVyQWN0aXZlQnV0dG9uICYmIGNvcmUuX21vcmVMYXllckFjdGl2ZUJ1dHRvbi5kaXNhYmxlZCkgY29yZS5tb3JlTGF5ZXJPZmYoKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb3JlLmNvbnRhaW5lckFjdGl2ZUJ1dHRvbiAmJiBjb3JlLmNvbnRhaW5lckFjdGl2ZUJ1dHRvbi5kaXNhYmxlZCkgY29yZS5jb250YWluZXJPZmYoKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb3JlLm1vZGFsRm9ybSkgY29yZS5wbHVnaW5zLmRpYWxvZy5jbG9zZS5jYWxsKGNvcmUpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5jb2RlLnNldEF0dHJpYnV0ZShcInJlYWRPbmx5XCIsIFwidHJ1ZVwiKTtcclxuICAgICAgICAgICAgICAgIHV0aWwuYWRkQ2xhc3MoY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZSwgJ3NlLXJlYWQtb25seScpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUucmVtb3ZlQXR0cmlidXRlKFwicmVhZE9ubHlcIik7XHJcbiAgICAgICAgICAgICAgICB1dGlsLnJlbW92ZUNsYXNzKGNvbnRleHQuZWxlbWVudC53eXNpd3lnRnJhbWUsICdzZS1yZWFkLW9ubHknKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29kZU1pcnJvckVkaXRvcikgb3B0aW9ucy5jb2RlTWlycm9yRWRpdG9yLnNldE9wdGlvbigncmVhZE9ubHknLCAhIXZhbHVlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRGlzYWJsZSB0aGUgc3VuZWRpdG9yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGlzYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvb2xiYXIuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnd5c2l3eWcuZGlzYWJsZSgpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBQcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuMC4wIHZlcnNpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGUoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gRW5hYmxlIHRoZSBzdW5lZGl0b3JcclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmFibGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy50b29sYmFyLmVuYWJsZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnd5c2l3eWcuZW5hYmxlKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy4wLjAgdmVyc2lvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuYWJsZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5lbmFibGUoKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2hvdyB0aGUgc3VuZWRpdG9yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2hvdzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCB0b3BBcmVhU3R5bGUgPSBjb250ZXh0LmVsZW1lbnQudG9wQXJlYS5zdHlsZTtcclxuICAgICAgICAgICAgaWYgKHRvcEFyZWFTdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHRvcEFyZWFTdHlsZS5kaXNwbGF5ID0gb3B0aW9ucy5kaXNwbGF5O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBIaWRlIHRoZSBzdW5lZGl0b3JcclxuICAgICAgICAgKi9cclxuICAgICAgICBoaWRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC50b3BBcmVhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERlc3Ryb3kgdGhlIHN1bmVkaXRvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgLyoqIG9mZiBtZW51cyAqL1xyXG4gICAgICAgICAgICBjb3JlLnN1Ym1lbnVPZmYoKTtcclxuICAgICAgICAgICAgY29yZS5jb250YWluZXJPZmYoKTtcclxuICAgICAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICBpZiAoY29yZS5ub3RpY2UpIGNvcmUubm90aWNlLmNsb3NlLmNhbGwoY29yZSk7XHJcbiAgICAgICAgICAgIGlmIChjb3JlLm1vZGFsRm9ybSkgY29yZS5wbHVnaW5zLmRpYWxvZy5jbG9zZS5jYWxsKGNvcmUpO1xyXG5cclxuICAgICAgICAgICAgLyoqIHJlbW92ZSBoaXN0b3J5ICovXHJcbiAgICAgICAgICAgIGNvcmUuaGlzdG9yeS5fZGVzdHJveSgpO1xyXG5cclxuICAgICAgICAgICAgLyoqIHJlbW92ZSBldmVudCBsaXN0ZW5lcnMgKi9cclxuICAgICAgICAgICAgZXZlbnQuX3JlbW92ZUV2ZW50KCk7XHJcblxyXG4gICAgICAgICAgICAvKiogcmVtb3ZlIGVsZW1lbnQgKi9cclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGNvbnRleHQuZWxlbWVudC50b29sYmFyKTtcclxuICAgICAgICAgICAgdXRpbC5yZW1vdmVJdGVtKGNvbnRleHQuZWxlbWVudC50b3BBcmVhKTtcclxuXHJcbiAgICAgICAgICAgIC8qKiByZW1vdmUgb2JqZWN0IHJlZmVyZW5jZSAqL1xyXG4gICAgICAgICAgICBmb3IgKGxldCBrIGluIGNvcmUuZnVuY3Rpb25zKSB7IGlmICh1dGlsLmhhc093bihjb3JlLCBrKSkgZGVsZXRlIGNvcmUuZnVuY3Rpb25zW2tdOyB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGsgaW4gY29yZSkgeyBpZiAodXRpbC5oYXNPd24oY29yZSwgaykpIGRlbGV0ZSBjb3JlW2tdOyB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGsgaW4gZXZlbnQpIHsgaWYgKHV0aWwuaGFzT3duKGV2ZW50LCBrKSkgZGVsZXRlIGV2ZW50W2tdOyB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGsgaW4gY29udGV4dCkgeyBpZiAodXRpbC5oYXNPd24oY29udGV4dCwgaykpIGRlbGV0ZSBjb250ZXh0W2tdOyB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGsgaW4gcGx1Z2luQ2FsbEJ1dHRvbnMpIHsgaWYgKHV0aWwuaGFzT3duKHBsdWdpbkNhbGxCdXR0b25zLCBrKSkgZGVsZXRlIHBsdWdpbkNhbGxCdXR0b25zW2tdOyB9XHJcblxyXG4gICAgICAgICAgICAvKiogcmVtb3ZlIHVzZXIgb2JqZWN0ICovXHJcbiAgICAgICAgICAgIGZvciAobGV0IGsgaW4gdGhpcykgeyBpZiAodXRpbC5oYXNPd24odGhpcywgaykpIGRlbGV0ZSB0aGlzW2tdOyB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRvb2xiYXIgbWV0aG9kc1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRvb2xiYXI6IHtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEBkZXNjcmlwdGlvbiBEaXNhYmxlIHRoZSB0b29sYmFyXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBkaXNhYmxlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogb2ZmIG1lbnVzICovXHJcbiAgICAgICAgICAgICAgICBjb3JlLnN1Ym1lbnVPZmYoKTtcclxuICAgICAgICAgICAgICAgIGNvcmUubW9yZUxheWVyT2ZmKCk7XHJcbiAgICAgICAgICAgICAgICBjb3JlLmNvbnRhaW5lck9mZigpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQudG9vbC5jb3Zlci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBAZGVzY3JpcHRpb24gUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjAuMCB2ZXJzaW9uXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQGRlc2NyaXB0aW9uIEVuYWJsZSB0aGUgdG9vbGJhclxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnRvb2wuY292ZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBAZGVzY3JpcHRpb24gUHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjAuMCB2ZXJzaW9uXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBlbmFibGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZSgpO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEBkZXNjcmlwdGlvbiBTaG93IHRoZSB0b29sYmFyXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBzaG93OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29yZS5faXNJbmxpbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5fc2hvd1Rvb2xiYXJJbmxpbmUoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnRvb2xiYXIuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC5fc3RpY2t5RHVtbXkuc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGV2ZW50Lm9uUmVzaXplX3dpbmRvdygpO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEBkZXNjcmlwdGlvbiBIaWRlIHRoZSB0b29sYmFyXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBoaWRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29yZS5faXNJbmxpbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5faGlkZVRvb2xiYXIoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LnRvb2xiYXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuX3N0aWNreUR1bW15LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgZXZlbnQub25SZXNpemVfd2luZG93KCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFd5c2l3eWcgbWV0aG9kc1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHd5c2l3eWc6IHtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEBkZXNjcmlwdGlvbiBEaXNhYmxlIHRoZSB3eXNpd3lnIGFyZWFcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGRpc2FibGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBvZmYgbWVudXMgKi9cclxuICAgICAgICAgICAgICAgIGNvcmUuY29udHJvbGxlcnNPZmYoKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb3JlLm1vZGFsRm9ybSkgY29yZS5wbHVnaW5zLmRpYWxvZy5jbG9zZS5jYWxsKGNvcmUpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZWxlbWVudC53eXNpd3lnLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgY29yZS5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jb2RlTWlycm9yRWRpdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb2RlTWlycm9yRWRpdG9yLnNldE9wdGlvbigncmVhZE9ubHknLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbGVtZW50LmNvZGUuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEBkZXNjcmlwdGlvbiBFbmFibGUgdGhlIHd5c2l3eWcgYXJlYVxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQud3lzaXd5Zy5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgY29yZS5pc0Rpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29kZU1pcnJvckVkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29kZU1pcnJvckVkaXRvci5zZXRPcHRpb24oJ3JlYWRPbmx5JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQuY29kZS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKioqKioqKioqKioqIENvcmUgaW5pdCAqKioqKioqKioqKiovXHJcbiAgICAvLyBmdW5jdGlvbnNcclxuICAgIGNvcmUuZnVuY3Rpb25zID0gZnVuY3Rpb25zO1xyXG4gICAgY29yZS5vcHRpb25zID0gb3B0aW9ucztcclxuXHJcbiAgICAvLyBDcmVhdGUgdG8gc2libGluZyBub2RlXHJcbiAgICBsZXQgY29udGV4dEVsID0gY29udGV4dC5lbGVtZW50O1xyXG4gICAgbGV0IG9yaWdpbkVsID0gY29udGV4dEVsLm9yaWdpbkVsZW1lbnQ7XHJcbiAgICBsZXQgdG9wRWwgPSBjb250ZXh0RWwudG9wQXJlYTtcclxuICAgIG9yaWdpbkVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICB0b3BFbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHJcbiAgICAvLyBpbml0XHJcbiAgICBpZiAob3B0aW9ucy5pZnJhbWUpIHtcclxuICAgICAgICBjb250ZXh0RWwud3lzaXd5Z0ZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHV0aWwuX3NldElmcmFtZURvY3VtZW50KHRoaXMsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBjb3JlLl9lZGl0b3JJbml0KGZhbHNlLCBvcHRpb25zLnZhbHVlKTtcclxuICAgICAgICAgICAgb3B0aW9ucy52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW5zZXJ0IGVkaXRvciBlbGVtZW50XHJcbiAgICBpZiAodHlwZW9mIG9yaWdpbkVsLm5leHRFbGVtZW50U2libGluZyA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBvcmlnaW5FbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0b3BFbCwgb3JpZ2luRWwubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3JpZ2luRWwucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0b3BFbCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29udGV4dEVsLmVkaXRvckFyZWEuYXBwZW5kQ2hpbGQoY29udGV4dEVsLnd5c2l3eWdGcmFtZSk7XHJcbiAgICBjb250ZXh0RWwgPSBvcmlnaW5FbCA9IHRvcEVsID0gbnVsbDtcclxuXHJcbiAgICAvLyBpbml0XHJcbiAgICBpZiAoIW9wdGlvbnMuaWZyYW1lKSB7XHJcbiAgICAgICAgY29yZS5fZWRpdG9ySW5pdChmYWxzZSwgb3B0aW9ucy52YWx1ZSk7XHJcbiAgICAgICAgb3B0aW9ucy52YWx1ZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9ucztcclxufSIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTkgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoY29yZSwgY2hhbmdlKSB7XHJcbiAgICBjb25zdCBfdyA9IGNvcmUuX3c7XHJcbiAgICBjb25zdCB1dGlsID0gY29yZS51dGlsO1xyXG4gICAgY29uc3QgZGVsYXlUaW1lID0gY29yZS5vcHRpb25zLmhpc3RvcnlTdGFja0RlbGF5VGltZTtcclxuICAgIGxldCBlZGl0b3IgPSBjb3JlLmNvbnRleHQuZWxlbWVudDtcclxuICAgIGxldCB1bmRvID0gY29yZS5jb250ZXh0LnRvb2wudW5kbztcclxuICAgIGxldCByZWRvID0gY29yZS5jb250ZXh0LnRvb2wucmVkbztcclxuXHJcbiAgICBsZXQgcHVzaERlbGF5ID0gbnVsbDtcclxuICAgIGxldCBzdGFja0luZGV4ID0gMDtcclxuICAgIGxldCBzdGFjayA9IFtdO1xyXG5cclxuICAgIGZ1bmN0aW9uIHNldENvbnRlbnRzRnJvbVN0YWNrICgpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gc3RhY2tbc3RhY2tJbmRleF07XHJcbiAgICAgICAgZWRpdG9yLnd5c2l3eWcuaW5uZXJIVE1MID0gaXRlbS5jb250ZW50cztcclxuXHJcbiAgICAgICAgY29yZS5zZXRSYW5nZSh1dGlsLmdldE5vZGVGcm9tUGF0aChpdGVtLnMucGF0aCwgZWRpdG9yLnd5c2l3eWcpLCBpdGVtLnMub2Zmc2V0LCB1dGlsLmdldE5vZGVGcm9tUGF0aChpdGVtLmUucGF0aCwgZWRpdG9yLnd5c2l3eWcpLCBpdGVtLmUub2Zmc2V0KTtcclxuICAgICAgICBjb3JlLmZvY3VzKCk7XHJcblxyXG4gICAgICAgIGlmIChzdGFjay5sZW5ndGggPD0gMSkge1xyXG4gICAgICAgICAgICBpZiAodW5kbykgdW5kby5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmIChyZWRvKSByZWRvLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc3RhY2tJbmRleCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuZG8pIHVuZG8uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlZG8pIHJlZG8ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrSW5kZXggPT09IHN0YWNrLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmRvKSB1bmRvLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZWRvKSByZWRvLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmRvKSB1bmRvLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZWRvKSByZWRvLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29yZS5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgIGNvcmUuX2NoZWNrQ29tcG9uZW50cygpO1xyXG4gICAgICAgIGNvcmUuX3NldENoYXJDb3VudCgpO1xyXG4gICAgICAgIGNvcmUuX3Jlc291cmNlc1N0YXRlQ2hhbmdlKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gb25DaGFuZ2VcclxuICAgICAgICBjaGFuZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwdXNoU3RhY2sgKCkge1xyXG4gICAgICAgIGNvcmUuX2NoZWNrQ29tcG9uZW50cygpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBlZGl0b3Iud3lzaXd5Zy5pbm5lckhUTUw7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50IHx8ICghIXN0YWNrW3N0YWNrSW5kZXhdICYmIGN1cnJlbnQgPT09IHN0YWNrW3N0YWNrSW5kZXhdLmNvbnRlbnRzKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBzdGFja0luZGV4Kys7XHJcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBjb3JlLl92YXJpYWJsZS5fcmFuZ2U7XHJcblxyXG4gICAgICAgIGlmIChzdGFjay5sZW5ndGggPiBzdGFja0luZGV4KSB7XHJcbiAgICAgICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UoMCwgc3RhY2tJbmRleCk7XHJcbiAgICAgICAgICAgIGlmIChyZWRvKSByZWRvLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmFuZ2UpIHtcclxuICAgICAgICAgICAgc3RhY2tbc3RhY2tJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50czogY3VycmVudCxcclxuICAgICAgICAgICAgICAgIHM6IHsgcGF0aDogWzAsIDBdLCBvZmZzZXQ6IFswLCAwXSB9LFxyXG4gICAgICAgICAgICAgICAgZTogeyBwYXRoOiAwLCBvZmZzZXQ6IDAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0YWNrW3N0YWNrSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgICAgY29udGVudHM6IGN1cnJlbnQsXHJcbiAgICAgICAgICAgICAgICBzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogdXRpbC5nZXROb2RlUGF0aChyYW5nZS5zdGFydENvbnRhaW5lciwgbnVsbCwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiByYW5nZS5zdGFydE9mZnNldFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoOiB1dGlsLmdldE5vZGVQYXRoKHJhbmdlLmVuZENvbnRhaW5lciwgbnVsbCwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiByYW5nZS5lbmRPZmZzZXRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGFja0luZGV4ID09PSAxICYmIHVuZG8pIHVuZG8ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xyXG5cclxuICAgICAgICBjb3JlLl9zZXRDaGFyQ291bnQoKTtcclxuICAgICAgICAvLyBvbkNoYW5nZVxyXG4gICAgICAgIGNoYW5nZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEhpc3Rvcnkgc3RhY2tcclxuICAgICAgICAgKi9cclxuICAgICAgICBzdGFjazogc3RhY2ssXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBTYXZpbmcgdGhlIGN1cnJlbnQgc3RhdHVzIHRvIHRoZSBoaXN0b3J5IG9iamVjdCBzdGFja1xyXG4gICAgICAgICAqIElmIFwiZGVsYXlcIiBpcyB0cnVlLCBpdCB3aWxsIGJlIHNhdmVkIGFmdGVyIChvcHRpb25zLmhpc3RvcnlTdGFja0RlbGF5VGltZSB8fCA0MDApIG1pbGlzZWNvbmRzXHJcbiAgICAgICAgICogSWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZ2FpbiB3aXRoIHRoZSBcImRlbGF5XCIgYXJndW1lbnQgdHJ1ZSBiZWZvcmUgaXQgaXMgc2F2ZWQsIHRoZSBkZWxheSB0aW1lIGlzIHJlbmV3YWxcclxuICAgICAgICAgKiBZb3UgY2FuIHNwZWNpZnkgdGhlIGRlbGF5IHRpbWUgYnkgc2VuZGluZyBhIG51bWJlci5cclxuICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfSBkZWxheSBJZiB0cnVlLCBBZGQgc3RhY2sgd2l0aG91dCBkZWxheSB0aW1lLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHB1c2g6IGZ1bmN0aW9uIChkZWxheSkge1xyXG4gICAgICAgICAgICBfdy5zZXRUaW1lb3V0KGNvcmUuX3Jlc291cmNlc1N0YXRlQ2hhbmdlLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICBjb25zdCB0aW1lID0gdHlwZW9mIGRlbGF5ID09PSAnbnVtYmVyJyA/IChkZWxheSA+IDAgPyBkZWxheSA6IDApIDogKCFkZWxheSA/IDAgOiBkZWxheVRpbWUpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKCF0aW1lIHx8IHB1c2hEZWxheSkge1xyXG4gICAgICAgICAgICAgICAgX3cuY2xlYXJUaW1lb3V0KHB1c2hEZWxheSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBwdXNoU3RhY2soKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHB1c2hEZWxheSA9IF93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgX3cuY2xlYXJUaW1lb3V0KHB1c2hEZWxheSk7XHJcbiAgICAgICAgICAgICAgICBwdXNoRGVsYXkgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgcHVzaFN0YWNrKCk7XHJcbiAgICAgICAgICAgIH0sIHRpbWUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBVbmRvIGZ1bmN0aW9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdW5kbzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoc3RhY2tJbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHN0YWNrSW5kZXgtLTtcclxuICAgICAgICAgICAgICAgIHNldENvbnRlbnRzRnJvbVN0YWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmVkbyBmdW5jdGlvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlZG86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCAtIDEgPiBzdGFja0luZGV4KSB7XHJcbiAgICAgICAgICAgICAgICBzdGFja0luZGV4Kys7XHJcbiAgICAgICAgICAgICAgICBzZXRDb250ZW50c0Zyb21TdGFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdvIHRvIHRoZSBoaXN0b3J5IHN0YWNrIGZvciB0aGF0IGluZGV4LlxyXG4gICAgICAgICAqIElmIFwiaW5kZXhcIiBpcyAtMSwgZ28gdG8gdGhlIGxhc3Qgc3RhY2tcclxuICAgICAgICAgKi9cclxuICAgICAgICBnbzogZnVuY3Rpb24gKGluZGV4KSB7XHJcbiAgICAgICAgICAgIHN0YWNrSW5kZXggPSBpbmRleCA8IDAgPyAoc3RhY2subGVuZ3RoIC0gMSkgOiBpbmRleDtcclxuICAgICAgICAgICAgc2V0Q29udGVudHNGcm9tU3RhY2soKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gR2V0IHRoZSBjdXJyZW50IGhpc3Rvcnkgc3RhY2sgaW5kZXguXHJcbiAgICAgICAgICogQHJldHVybnMge051bWJlcn0gQ3VycmVudCBTdGFjayBpbmRleFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldEN1cnJlbnRJbmRleDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhY2tJbmRleDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXNldCB0aGUgaGlzdG9yeSBvYmplY3RcclxuICAgICAgICAgKi9cclxuICAgICAgICByZXNldDogZnVuY3Rpb24gKGlnbm9yZUNoYW5nZUV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmICh1bmRvKSB1bmRvLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKHJlZG8pIHJlZG8uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICBjb3JlLl92YXJpYWJsZS5pc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKGNvcmUuY29udGV4dC50b29sLnNhdmUpIGNvcmUuY29udGV4dC50b29sLnNhdmUuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgc3RhY2suc3BsaWNlKDApO1xyXG4gICAgICAgICAgICBzdGFja0luZGV4ID0gMDtcclxuXHJcbiAgICAgICAgICAgIC8vIHB1c2hTdGFja1xyXG4gICAgICAgICAgICBzdGFja1tzdGFja0luZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnRzOiBjb3JlLmdldENvbnRlbnRzKHRydWUpLFxyXG4gICAgICAgICAgICAgICAgczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFswLCAwXSxcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDBcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogWzAsIDBdLFxyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogMFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKCFpZ25vcmVDaGFuZ2VFdmVudCkgY2hhbmdlKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJlc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgYnV0dG9ucyB0byBmaXQgdGhlIGN1cnJlbnQgc3RhY2suXHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfcmVzZXRDYWNoaW5nQnV0dG9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGVkaXRvciA9IGNvcmUuY29udGV4dC5lbGVtZW50O1xyXG4gICAgICAgICAgICB1bmRvID0gY29yZS5jb250ZXh0LnRvb2wudW5kbztcclxuICAgICAgICAgICAgcmVkbyA9IGNvcmUuY29udGV4dC50b29sLnJlZG87XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RhY2tJbmRleCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuZG8pIHVuZG8uc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlZG8gJiYgc3RhY2tJbmRleCA9PT0gc3RhY2subGVuZ3RoIC0gMSkgcmVkby5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBjb3JlLl92YXJpYWJsZS5pc0NoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChjb3JlLmNvbnRleHQudG9vbC5zYXZlKSBjb3JlLmNvbnRleHQudG9vbC5zYXZlLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFja0luZGV4ID09PSBzdGFjay5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVkbykgcmVkby5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlIGFsbCBzdGFja3MgYW5kIHJlbW92ZSB0aGUgdGltZW91dCBmdW5jdGlvbi5cclxuICAgICAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9kZXN0cm95OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChwdXNoRGVsYXkpIF93LmNsZWFyVGltZW91dChwdXNoRGVsYXkpO1xyXG4gICAgICAgICAgICBzdGFjayA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufSIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmltcG9ydCAnLi9hc3NldHMvY3NzL3N1bmVkaXRvci5jc3MnO1xyXG5pbXBvcnQgJy4vYXNzZXRzL2Nzcy9zdW5lZGl0b3ItY29udGVudHMuY3NzJztcclxuXHJcbmltcG9ydCBwbHVnaW5zIGZyb20gJy4vcGx1Z2lucyc7XHJcbmltcG9ydCBzdW5lZGl0b3IgZnJvbSAnLi9zdW5lZGl0b3InO1xyXG5cclxuaWYgKCF3aW5kb3cuU1VORURJVE9SKSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnU1VORURJVE9SJywge1xyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgICAgaW5pdDogc3VuZWRpdG9yLmluaXQsXHJcbiAgICAgICAgICAgIGNyZWF0ZTogc3VuZWRpdG9yLmluaXQoe1xyXG4gICAgICAgICAgICAgICAgcGx1Z2luczogcGx1Z2luc1xyXG4gICAgICAgICAgICB9KS5jcmVhdGVcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSIsIi8qXHJcbiAqIHd5c2l3eWcgd2ViIGVkaXRvclxyXG4gKlxyXG4gKiBzdW5lZGl0b3IuanNcclxuICogQ29weXJpZ2h0IDIwMTcgSmlIb25nIExlZS5cclxuICogTUlUIGxpY2Vuc2UuXHJcbiAqL1xyXG4ndXNlIHN0cmljdCc7XHJcblxyXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xyXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XHJcbiAgICAgICAgICAgIGZhY3RvcnkoZ2xvYmFsLCB0cnVlKSA6XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICh3KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXcuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NVTkVESVRPUl9NT0RVTEVTIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhY3Rvcnkodyk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZhY3RvcnkoZ2xvYmFsKTtcclxuICAgIH1cclxufSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uICh3aW5kb3csIG5vR2xvYmFsKSB7XHJcbiAgICBjb25zdCBjb21wb25lbnQgPSB7XHJcbiAgICAgICAgbmFtZTogJ2NvbXBvbmVudCcsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZSBhIGNvbnRhaW5lciBmb3IgdGhlIHJlc2l6aW5nIGNvbXBvbmVudCBhbmQgaW5zZXJ0IHRoZSBlbGVtZW50LlxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gY292ZXIgQ292ZXIgZWxlbWVudCAoRklHVVJFKVxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjbGFzc05hbWUgQ2xhc3MgbmFtZSBvZiBjb250YWluZXIgKGZpeGVkOiBzZS1jb21wb25lbnQpXHJcbiAgICAgICAgICogQHJldHVybnMge0VsZW1lbnR9IENyZWF0ZWQgY29udGFpbmVyIGVsZW1lbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICBzZXRfY29udGFpbmVyOiBmdW5jdGlvbiAoY292ZXIsIGNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSAnc2UtY29tcG9uZW50ICcgKyBjbGFzc05hbWU7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChjb3Zlcik7XHJcbiAgICBcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ292ZXIgdGhlIHRhcmdldCBlbGVtZW50IHdpdGggYSBGSUdVUkUgZWxlbWVudC5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGFyZ2V0IGVsZW1lbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICBzZXRfY292ZXI6IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdmVyID0gdGhpcy51dGlsLmNyZWF0ZUVsZW1lbnQoJ0ZJR1VSRScpO1xyXG4gICAgICAgICAgICBjb3Zlci5hcHBlbmRDaGlsZChlbGVtZW50KTtcclxuICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gY292ZXI7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJldHVybiBIVE1MIHN0cmluZyBvZiBjYXB0aW9uKEZJR0NBUFRJT04pIGVsZW1lbnRcclxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNyZWF0ZV9jYXB0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhcHRpb24gPSB0aGlzLnV0aWwuY3JlYXRlRWxlbWVudCgnRklHQ0FQVElPTicpO1xyXG4gICAgICAgICAgICBjYXB0aW9uLmlubmVySFRNTCA9ICc8ZGl2PicgKyB0aGlzLmxhbmcuZGlhbG9nQm94LmNhcHRpb24gKyAnPC9kaXY+JztcclxuICAgICAgICAgICAgcmV0dXJuIGNhcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodHlwZW9mIG5vR2xvYmFsID09PSB0eXBlb2YgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKCF3aW5kb3cuU1VORURJVE9SX01PRFVMRVMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ1NVTkVESVRPUl9NT0RVTEVTJywge1xyXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZToge31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNVTkVESVRPUl9NT0RVTEVTLCAnY29tcG9uZW50Jywge1xyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHZhbHVlOiBjb21wb25lbnRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29tcG9uZW50O1xyXG59KSk7IiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XHJcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cclxuICAgICAgICAgICAgZmFjdG9yeShnbG9iYWwsIHRydWUpIDpcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHcpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdy5kb2N1bWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU1VORURJVE9SX01PRFVMRVMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeSh3KTtcclxuICAgICAgICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmFjdG9yeShnbG9iYWwpO1xyXG4gICAgfVxyXG59KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24gKHdpbmRvdywgbm9HbG9iYWwpIHtcclxuICAgIGNvbnN0IHJlc2l6aW5nID0ge1xyXG4gICAgICAgIG5hbWU6ICdyZXNpemluZycsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENvbnN0cnVjdG9yXHJcbiAgICAgICAgICogUmVxdWlyZSBjb250ZXh0IHByb3BlcnRpZXMgd2hlbiByZXNpemluZyBtb2R1bGVcclxuICAgICAgICAgICAgaW5wdXRYOiBFbGVtZW50LFxyXG4gICAgICAgICAgICBpbnB1dFk6IEVsZW1lbnQsXHJcbiAgICAgICAgICAgIF9jb250YWluZXI6IG51bGwsXHJcbiAgICAgICAgICAgIF9jb3ZlcjogbnVsbCxcclxuICAgICAgICAgICAgX2VsZW1lbnQ6IG51bGwsXHJcbiAgICAgICAgICAgIF9lbGVtZW50X3c6IDEsXHJcbiAgICAgICAgICAgIF9lbGVtZW50X2g6IDEsXHJcbiAgICAgICAgICAgIF9lbGVtZW50X2w6IDAsXHJcbiAgICAgICAgICAgIF9lbGVtZW50X3Q6IDAsXHJcbiAgICAgICAgICAgIF9kZWZhdWx0U2l6ZVg6ICdhdXRvJyxcclxuICAgICAgICAgICAgX2RlZmF1bHRTaXplWTogJ2F1dG8nLFxyXG4gICAgICAgICAgICBfb3JpZ2luX3c6IGNvcmUub3B0aW9ucy5pbWFnZVdpZHRoID09PSAnYXV0bycgPyAnJyA6IGNvcmUub3B0aW9ucy5pbWFnZVdpZHRoLFxyXG4gICAgICAgICAgICBfb3JpZ2luX2g6IGNvcmUub3B0aW9ucy5pbWFnZUhlaWdodCA9PT0gJ2F1dG8nID8gJycgOiBjb3JlLm9wdGlvbnMuaW1hZ2VIZWlnaHQsXHJcbiAgICAgICAgICAgIF9wcm9wb3J0aW9uQ2hlY2tlZDogdHJ1ZSxcclxuICAgICAgICAgICAgLy8gLS0gc2VsZWN0IGZ1bmN0aW9uIC0tXHJcbiAgICAgICAgICAgIF9yZXNpemluZzogY29yZS5vcHRpb25zLmltYWdlUmVzaXppbmcsXHJcbiAgICAgICAgICAgIF9yZXNpemVEb3RIaWRlOiAhY29yZS5vcHRpb25zLmltYWdlSGVpZ2h0U2hvdyxcclxuICAgICAgICAgICAgX3JvdGF0aW9uOiBjb3JlLm9wdGlvbnMuaW1hZ2VSb3RhdGlvbixcclxuICAgICAgICAgICAgX29ubHlQZXJjZW50YWdlOiBjb3JlLm9wdGlvbnMuaW1hZ2VTaXplT25seVBlcmNlbnRhZ2UsXHJcbiAgICAgICAgICAgIF9yYXRpbzogZmFsc2UsXHJcbiAgICAgICAgICAgIF9yYXRpb1g6IDEsXHJcbiAgICAgICAgICAgIF9yYXRpb1k6IDFcclxuICAgICAgICAgICAgX2NhcHRpb25TaG93OiB0cnVlLFxyXG4gICAgICAgICAgICAvLyAtLSB3aGVuIHVzZWQgY2FwdGlvbiAoX2NhcHRpb25TaG93OiB0cnVlKSAtLVxyXG4gICAgICAgICAgICBfY2FwdGlvbjogbnVsbCxcclxuICAgICAgICAgICAgX2NhcHRpb25DaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgY2FwdGlvbkNoZWNrRWw6IG51bGwsXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvcmUgQ29yZSBvYmplY3QgXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYWRkOiBmdW5jdGlvbiAoY29yZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpY29ucyA9IGNvcmUuaWNvbnM7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBjb3JlLmNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQucmVzaXppbmcgPSB7XHJcbiAgICAgICAgICAgICAgICBfcmVzaXplQ2xpZW50WDogMCxcclxuICAgICAgICAgICAgICAgIF9yZXNpemVDbGllbnRZOiAwLFxyXG4gICAgICAgICAgICAgICAgX3Jlc2l6ZV9wbHVnaW46ICcnLFxyXG4gICAgICAgICAgICAgICAgX3Jlc2l6ZV93OiAwLFxyXG4gICAgICAgICAgICAgICAgX3Jlc2l6ZV9oOiAwLFxyXG4gICAgICAgICAgICAgICAgX29yaWdpbl93OiAwLFxyXG4gICAgICAgICAgICAgICAgX29yaWdpbl9oOiAwLFxyXG4gICAgICAgICAgICAgICAgX3JvdGF0ZVZlcnRpY2FsOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIF9yZXNpemVfZGlyZWN0aW9uOiAnJyxcclxuICAgICAgICAgICAgICAgIF9tb3ZlX3BhdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBfaXNDaGFuZ2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYWxpZ25JY29uczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhc2ljOiBpY29ucy5hbGlnbl9qdXN0aWZ5LFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IGljb25zLmFsaWduX2xlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IGljb25zLmFsaWduX3JpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIGNlbnRlcjogaWNvbnMuYWxpZ25fY2VudGVyXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAvKiogcmVzaXplIGNvbnRyb2xsZXIsIGJ1dHRvbiAqL1xyXG4gICAgICAgICAgICBsZXQgcmVzaXplX2Rpdl9jb250YWluZXIgPSB0aGlzLnNldENvbnRyb2xsZXJfcmVzaXplKGNvcmUpO1xyXG4gICAgICAgICAgICBjb250ZXh0LnJlc2l6aW5nLnJlc2l6ZUNvbnRhaW5lciA9IHJlc2l6ZV9kaXZfY29udGFpbmVyO1xyXG5cclxuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5yZXNpemVEaXYgPSByZXNpemVfZGl2X2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuc2UtbW9kYWwtcmVzaXplJyk7XHJcbiAgICAgICAgICAgIGNvbnRleHQucmVzaXppbmcucmVzaXplRG90ID0gcmVzaXplX2Rpdl9jb250YWluZXIucXVlcnlTZWxlY3RvcignLnNlLXJlc2l6ZS1kb3QnKTtcclxuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5yZXNpemVEaXNwbGF5ID0gcmVzaXplX2Rpdl9jb250YWluZXIucXVlcnlTZWxlY3RvcignLnNlLXJlc2l6ZS1kaXNwbGF5Jyk7XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVzaXplX2J1dHRvbiA9IHRoaXMuc2V0Q29udHJvbGxlcl9idXR0b24oY29yZSk7XHJcbiAgICAgICAgICAgIGNvbnRleHQucmVzaXppbmcucmVzaXplQnV0dG9uID0gcmVzaXplX2J1dHRvbjtcclxuXHJcbiAgICAgICAgICAgIGxldCByZXNpemVfaGFuZGxlcyA9IGNvbnRleHQucmVzaXppbmcucmVzaXplSGFuZGxlcyA9IGNvbnRleHQucmVzaXppbmcucmVzaXplRG90LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NwYW4nKTtcclxuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5yZXNpemVCdXR0b25Hcm91cCA9IHJlc2l6ZV9idXR0b24ucXVlcnlTZWxlY3RvcignLl9zZV9yZXNpemluZ19idG5fZ3JvdXAnKTtcclxuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5yb3RhdGlvbkJ1dHRvbnMgPSByZXNpemVfYnV0dG9uLnF1ZXJ5U2VsZWN0b3JBbGwoJy5fc2VfcmVzaXppbmdfYnRuX2dyb3VwIC5fc2Vfcm90YXRpb24nKTtcclxuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5wZXJjZW50YWdlQnV0dG9ucyA9IHJlc2l6ZV9idXR0b24ucXVlcnlTZWxlY3RvckFsbCgnLl9zZV9yZXNpemluZ19idG5fZ3JvdXAgLl9zZV9wZXJjZW50YWdlJyk7XHJcblxyXG4gICAgICAgICAgICBjb250ZXh0LnJlc2l6aW5nLmFsaWduTWVudSA9IHJlc2l6ZV9idXR0b24ucXVlcnlTZWxlY3RvcignLnNlLXJlc2l6aW5nLWFsaWduLWxpc3QnKTtcclxuICAgICAgICAgICAgY29udGV4dC5yZXNpemluZy5hbGlnbk1lbnVMaXN0ID0gY29udGV4dC5yZXNpemluZy5hbGlnbk1lbnUucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uJyk7XHJcblxyXG4gICAgICAgICAgICBjb250ZXh0LnJlc2l6aW5nLmFsaWduQnV0dG9uID0gcmVzaXplX2J1dHRvbi5xdWVyeVNlbGVjdG9yKCcuX3NlX3Jlc2l6aW5nX2FsaWduX2J1dHRvbicpO1xyXG4gICAgICAgICAgICBjb250ZXh0LnJlc2l6aW5nLmF1dG9TaXplQnV0dG9uID0gcmVzaXplX2J1dHRvbi5xdWVyeVNlbGVjdG9yKCcuX3NlX3Jlc2l6aW5nX2J0bl9ncm91cCAuX3NlX2F1dG9fc2l6ZScpO1xyXG4gICAgICAgICAgICBjb250ZXh0LnJlc2l6aW5nLmNhcHRpb25CdXR0b24gPSByZXNpemVfYnV0dG9uLnF1ZXJ5U2VsZWN0b3IoJy5fc2VfcmVzaXppbmdfY2FwdGlvbl9idXR0b24nKTtcclxuXHJcbiAgICAgICAgICAgIC8qKiBhZGQgZXZlbnQgbGlzdGVuZXJzICovXHJcbiAgICAgICAgICAgIHJlc2l6ZV9kaXZfY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7IGUucHJldmVudERlZmF1bHQoKTsgfSk7XHJcbiAgICAgICAgICAgIHJlc2l6ZV9oYW5kbGVzWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fcmVzaXplX2hhbmRsZS5iaW5kKGNvcmUpKTtcclxuICAgICAgICAgICAgcmVzaXplX2hhbmRsZXNbMV0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93bl9yZXNpemVfaGFuZGxlLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICByZXNpemVfaGFuZGxlc1syXS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duX3Jlc2l6ZV9oYW5kbGUuYmluZChjb3JlKSk7XHJcbiAgICAgICAgICAgIHJlc2l6ZV9oYW5kbGVzWzNdLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fcmVzaXplX2hhbmRsZS5iaW5kKGNvcmUpKTtcclxuICAgICAgICAgICAgcmVzaXplX2hhbmRsZXNbNF0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93bl9yZXNpemVfaGFuZGxlLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICByZXNpemVfaGFuZGxlc1s1XS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duX3Jlc2l6ZV9oYW5kbGUuYmluZChjb3JlKSk7XHJcbiAgICAgICAgICAgIHJlc2l6ZV9oYW5kbGVzWzZdLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fcmVzaXplX2hhbmRsZS5iaW5kKGNvcmUpKTtcclxuICAgICAgICAgICAgcmVzaXplX2hhbmRsZXNbN10uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vbk1vdXNlRG93bl9yZXNpemVfaGFuZGxlLmJpbmQoY29yZSkpO1xyXG4gICAgICAgICAgICByZXNpemVfYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrX3Jlc2l6ZUJ1dHRvbi5iaW5kKGNvcmUpKTtcclxuXHJcbiAgICAgICAgICAgIC8qKiBhcHBlbmQgaHRtbCAqL1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQucmVsYXRpdmUuYXBwZW5kQ2hpbGQocmVzaXplX2Rpdl9jb250YWluZXIpO1xyXG4gICAgICAgICAgICBjb250ZXh0LmVsZW1lbnQucmVsYXRpdmUuYXBwZW5kQ2hpbGQocmVzaXplX2J1dHRvbik7XHJcblxyXG4gICAgICAgICAgICAvKiogZW1wdHkgbWVtb3J5ICovXHJcbiAgICAgICAgICAgIHJlc2l6ZV9kaXZfY29udGFpbmVyID0gbnVsbCwgcmVzaXplX2J1dHRvbiA9IG51bGwsIHJlc2l6ZV9oYW5kbGVzID0gbnVsbDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKiogcmVzaXplIGNvbnRyb2xsZXIsIGJ1dHRvbiAoaW1hZ2UsIGlmcmFtZSwgdmlkZW8pICovXHJcbiAgICAgICAgc2V0Q29udHJvbGxlcl9yZXNpemU6IGZ1bmN0aW9uIChjb3JlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZV9jb250YWluZXIgPSBjb3JlLnV0aWwuY3JlYXRlRWxlbWVudCgnRElWJyk7XHJcblxyXG4gICAgICAgICAgICByZXNpemVfY29udGFpbmVyLmNsYXNzTmFtZSA9ICdzZS1jb250cm9sbGVyIHNlLXJlc2l6aW5nLWNvbnRhaW5lcic7XHJcbiAgICAgICAgICAgIHJlc2l6ZV9jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgcmVzaXplX2NvbnRhaW5lci5pbm5lckhUTUwgPSAnJyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLW1vZGFsLXJlc2l6ZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1yZXNpemUtZG90XCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJ0bFwiPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInRyXCI+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiYmxcIj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJiclwiPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImx3XCI+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwidGhcIj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJyd1wiPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImJoXCI+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1yZXNpemUtZGlzcGxheVwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2Pic7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzaXplX2NvbnRhaW5lcjtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBzZXRDb250cm9sbGVyX2J1dHRvbjogZnVuY3Rpb24gKGNvcmUpIHtcclxuICAgICAgICAgICAgY29uc3QgbGFuZyA9IGNvcmUubGFuZztcclxuICAgICAgICAgICAgY29uc3QgaWNvbnMgPSBjb3JlLmljb25zO1xyXG4gICAgICAgICAgICBjb25zdCByZXNpemVfYnV0dG9uID0gY29yZS51dGlsLmNyZWF0ZUVsZW1lbnQoXCJESVZcIik7XHJcblxyXG4gICAgICAgICAgICByZXNpemVfYnV0dG9uLmNsYXNzTmFtZSA9IFwic2UtY29udHJvbGxlciBzZS1jb250cm9sbGVyLXJlc2l6aW5nXCI7XHJcbiAgICAgICAgICAgIHJlc2l6ZV9idXR0b24uaW5uZXJIVE1MID0gJycgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1hcnJvdyBzZS1hcnJvdy11cFwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzZS1idG4tZ3JvdXAgX3NlX3Jlc2l6aW5nX2J0bl9ncm91cFwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cInBlcmNlbnRcIiBkYXRhLXZhbHVlPVwiMVwiIGNsYXNzPVwic2UtdG9vbHRpcCBfc2VfcGVyY2VudGFnZVwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxzcGFuPjEwMCU8L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLnJlc2l6ZTEwMCArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cInBlcmNlbnRcIiBkYXRhLXZhbHVlPVwiMC43NVwiIGNsYXNzPVwic2UtdG9vbHRpcCBfc2VfcGVyY2VudGFnZVwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxzcGFuPjc1JTwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIucmVzaXplNzUgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJwZXJjZW50XCIgZGF0YS12YWx1ZT1cIjAuNVwiIGNsYXNzPVwic2UtdG9vbHRpcCBfc2VfcGVyY2VudGFnZVwiPicgK1xyXG4gICAgICAgICAgICAgICAgJzxzcGFuPjUwJTwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmNvbnRyb2xsZXIucmVzaXplNTAgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJhdXRvXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcCBfc2VfYXV0b19zaXplXCI+JyArXHJcbiAgICAgICAgICAgICAgICBpY29ucy5hdXRvX3NpemUgK1xyXG4gICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5hdXRvU2l6ZSArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cInJvdGF0ZVwiIGRhdGEtdmFsdWU9XCItOTBcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwIF9zZV9yb3RhdGlvblwiPicgK1xyXG4gICAgICAgICAgICAgICAgaWNvbnMucm90YXRlX2xlZnQgK1xyXG4gICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5yb3RhdGVMZWZ0ICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwicm90YXRlXCIgZGF0YS12YWx1ZT1cIjkwXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcCBfc2Vfcm90YXRpb25cIj4nICtcclxuICAgICAgICAgICAgICAgIGljb25zLnJvdGF0ZV9yaWdodCArXHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLnJvdGF0ZVJpZ2h0ICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWJ0bi1ncm91cFwiIHN0eWxlPVwicGFkZGluZy10b3A6IDA7XCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwibWlycm9yXCIgZGF0YS12YWx1ZT1cImhcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICBpY29ucy5taXJyb3JfaG9yaXpvbnRhbCArXHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLm1pcnJvckhvcml6b250YWwgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJtaXJyb3JcIiBkYXRhLXZhbHVlPVwidlwiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXBcIj4nICtcclxuICAgICAgICAgICAgICAgIGljb25zLm1pcnJvcl92ZXJ0aWNhbCArXHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLm1pcnJvclZlcnRpY2FsICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1jb21tYW5kPVwib25hbGlnblwiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXAgX3NlX3Jlc2l6aW5nX2FsaWduX2J1dHRvblwiPicgK1xyXG4gICAgICAgICAgICAgICAgaWNvbnMuYWxpZ25fanVzdGlmeSArXHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy50b29sYmFyLmFsaWduICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWJ0bi1ncm91cC1zdWIgc3VuLWVkaXRvci1jb21tb24gc2UtbGlzdC1sYXllciBzZS1yZXNpemluZy1hbGlnbi1saXN0XCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNlLWxpc3QtaW5uZXJcIj4nICtcclxuICAgICAgICAgICAgICAgICc8dWwgY2xhc3M9XCJzZS1saXN0LWJhc2ljXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGxpPjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3Qgc2UtdG9vbHRpcFwiIGRhdGEtY29tbWFuZD1cImFsaWduXCIgZGF0YS12YWx1ZT1cImJhc2ljXCI+JyArXHJcbiAgICAgICAgICAgICAgICBpY29ucy5hbGlnbl9qdXN0aWZ5ICtcclxuICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmRpYWxvZ0JveC5iYXNpYyArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPjwvbGk+JyArXHJcbiAgICAgICAgICAgICAgICAnPGxpPjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2UtYnRuLWxpc3Qgc2UtdG9vbHRpcFwiIGRhdGEtY29tbWFuZD1cImFsaWduXCIgZGF0YS12YWx1ZT1cImxlZnRcIj4nICtcclxuICAgICAgICAgICAgICAgIGljb25zLmFsaWduX2xlZnQgK1xyXG4gICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuZGlhbG9nQm94LmxlZnQgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj48L2xpPicgK1xyXG4gICAgICAgICAgICAgICAgJzxsaT48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlLWJ0bi1saXN0IHNlLXRvb2x0aXBcIiBkYXRhLWNvbW1hbmQ9XCJhbGlnblwiIGRhdGEtdmFsdWU9XCJjZW50ZXJcIj4nICtcclxuICAgICAgICAgICAgICAgIGljb25zLmFsaWduX2NlbnRlciArXHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5kaWFsb2dCb3guY2VudGVyICsgJzwvc3Bhbj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICAgICAnPC9idXR0b24+PC9saT4nICtcclxuICAgICAgICAgICAgICAgICc8bGk+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzZS1idG4tbGlzdCBzZS10b29sdGlwXCIgZGF0YS1jb21tYW5kPVwiYWxpZ25cIiBkYXRhLXZhbHVlPVwicmlnaHRcIj4nICtcclxuICAgICAgICAgICAgICAgIGljb25zLmFsaWduX3JpZ2h0ICtcclxuICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtaW5uZXJcIj48c3BhbiBjbGFzcz1cInNlLXRvb2x0aXAtdGV4dFwiPicgKyBsYW5nLmRpYWxvZ0JveC5yaWdodCArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPjwvbGk+JyArXHJcbiAgICAgICAgICAgICAgICAnPC91bD4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJjYXB0aW9uXCIgY2xhc3M9XCJzZS1idG4gc2UtdG9vbHRpcCBfc2VfcmVzaXppbmdfY2FwdGlvbl9idXR0b25cIj4nICtcclxuICAgICAgICAgICAgICAgIGljb25zLmNhcHRpb24gK1xyXG4gICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuZGlhbG9nQm94LmNhcHRpb24gKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJyZXZlcnRcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICBpY29ucy5yZXZlcnQgK1xyXG4gICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuZGlhbG9nQm94LnJldmVydEJ1dHRvbiArICc8L3NwYW4+PC9zcGFuPicgK1xyXG4gICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xyXG4gICAgICAgICAgICAgICAgJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY29tbWFuZD1cInVwZGF0ZVwiIGNsYXNzPVwic2UtYnRuIHNlLXRvb2x0aXBcIj4nICtcclxuICAgICAgICAgICAgICAgIGljb25zLm1vZGlmeSArXHJcbiAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLWlubmVyXCI+PHNwYW4gY2xhc3M9XCJzZS10b29sdGlwLXRleHRcIj4nICsgbGFuZy5jb250cm9sbGVyLmVkaXQgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWNvbW1hbmQ9XCJkZWxldGVcIiBjbGFzcz1cInNlLWJ0biBzZS10b29sdGlwXCI+JyArXHJcbiAgICAgICAgICAgICAgICBpY29ucy5kZWxldGUgK1xyXG4gICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC1pbm5lclwiPjxzcGFuIGNsYXNzPVwic2UtdG9vbHRpcC10ZXh0XCI+JyArIGxhbmcuY29udHJvbGxlci5yZW1vdmUgKyAnPC9zcGFuPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlc2l6ZV9idXR0b247XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIHdpZHRoIHNpemVcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFBsdWdpbiBjb250ZXh0IG9iamVjdCBvZiBwbHVnaW4gKGNvcmUuY29udGV4dFtwbHVnaW5dKVxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUYXJnZXQgZWxlbWVudFxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gY292ZXIgQ292ZXIgZWxlbWVudCAoRklHVVJFKVxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyIENvbnRhaW5lciBlbGVtZW50IChESVYuc2UtY29tcG9uZW50KVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX21vZHVsZV9nZXRTaXplWDogZnVuY3Rpb24gKGNvbnRleHRQbHVnaW4sIGVsZW1lbnQsIGNvdmVyLCBjb250YWluZXIpIHtcclxuICAgICAgICAgICAgaWYgKCFlbGVtZW50KSBlbGVtZW50ID0gY29udGV4dFBsdWdpbi5fZWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKCFjb3ZlcikgY292ZXIgPSBjb250ZXh0UGx1Z2luLl9jb3ZlcjtcclxuICAgICAgICAgICAgaWYgKCFjb250YWluZXIpIGNvbnRhaW5lciA9IGNvbnRleHRQbHVnaW4uX2NvbnRhaW5lcjtcclxuXHJcbiAgICAgICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuICEvJSQvLnRlc3QoZWxlbWVudC5zdHlsZS53aWR0aCkgPyBlbGVtZW50LnN0eWxlLndpZHRoIDogKChjb250YWluZXIgJiYgdGhpcy51dGlsLmdldE51bWJlcihjb250YWluZXIuc3R5bGUud2lkdGgsIDIpKSB8fCAxMDApICsgJyUnO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBoZWlnaHQgc2l6ZVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0UGx1Z2luIGNvbnRleHQgb2JqZWN0IG9mIHBsdWdpbiAoY29yZS5jb250ZXh0W3BsdWdpbl0pXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRhcmdldCBlbGVtZW50XHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBjb3ZlciBDb3ZlciBlbGVtZW50IChGSUdVUkUpXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXIgQ29udGFpbmVyIGVsZW1lbnQgKERJVi5zZS1jb21wb25lbnQpXHJcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBfbW9kdWxlX2dldFNpemVZOiBmdW5jdGlvbiAoY29udGV4dFBsdWdpbiwgZWxlbWVudCwgY292ZXIsIGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQpIGVsZW1lbnQgPSBjb250ZXh0UGx1Z2luLl9lbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoIWNvdmVyKSBjb3ZlciA9IGNvbnRleHRQbHVnaW4uX2NvdmVyO1xyXG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5lcikgY29udGFpbmVyID0gY29udGV4dFBsdWdpbi5fY29udGFpbmVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjb250YWluZXIgfHwgIWNvdmVyKSByZXR1cm4gKGVsZW1lbnQgJiYgZWxlbWVudC5zdHlsZS5oZWlnaHQpIHx8ICcnO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXRpbC5nZXROdW1iZXIoY292ZXIuc3R5bGUucGFkZGluZ0JvdHRvbSwgMCkgPiAwICYmICF0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsID8gY292ZXIuc3R5bGUuaGVpZ2h0IDogKCEvJSQvLnRlc3QoZWxlbWVudC5zdHlsZS5oZWlnaHQpIHx8ICEvJSQvLnRlc3QoZWxlbWVudC5zdHlsZS53aWR0aCkgPyBlbGVtZW50LnN0eWxlLmhlaWdodCA6ICgoY29udGFpbmVyICYmIHRoaXMudXRpbC5nZXROdW1iZXIoY29udGFpbmVyLnN0eWxlLmhlaWdodCwgMikpIHx8IDEwMCkgKyAnJScpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDYWxsZWQgYXQgdGhlIFwib3Blbk1vZGlmeVwiIHRvIHB1dCB0aGUgc2l6ZSBvZiB0aGUgY3VycmVudCB0YXJnZXQgaW50byB0aGUgc2l6ZSBpbnB1dCBlbGVtZW50LlxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0UGx1Z2luIGNvbnRleHQgb2JqZWN0IG9mIHBsdWdpbiAoY29yZS5jb250ZXh0W3BsdWdpbl0pXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHBsdWdpbk9iaiBQbHVnaW4gb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX21vZHVsZV9zZXRNb2RpZnlJbnB1dFNpemU6IGZ1bmN0aW9uIChjb250ZXh0UGx1Z2luLCBwbHVnaW5PYmopIHtcclxuICAgICAgICAgICAgY29uc3QgcGVyY2VudGFnZVJvdGF0aW9uID0gY29udGV4dFBsdWdpbi5fb25seVBlcmNlbnRhZ2UgJiYgdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbDtcclxuICAgICAgICAgICAgY29udGV4dFBsdWdpbi5wcm9wb3J0aW9uLmNoZWNrZWQgPSBjb250ZXh0UGx1Z2luLl9wcm9wb3J0aW9uQ2hlY2tlZCA9IGNvbnRleHRQbHVnaW4uX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXByb3BvcnRpb24nKSAhPT0gJ2ZhbHNlJztcclxuXHJcbiAgICAgICAgICAgIGxldCB4ID0gcGVyY2VudGFnZVJvdGF0aW9uID8gJycgOiB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9nZXRTaXplWC5jYWxsKHRoaXMsIGNvbnRleHRQbHVnaW4pO1xyXG4gICAgICAgICAgICBpZiAoeCA9PT0gY29udGV4dFBsdWdpbi5fZGVmYXVsdFNpemVYKSB4ID0gJyc7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0UGx1Z2luLl9vbmx5UGVyY2VudGFnZSkgeCA9IHRoaXMudXRpbC5nZXROdW1iZXIoeCwgMik7XHJcbiAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uaW5wdXRYLnZhbHVlID0geDtcclxuICAgICAgICAgICAgcGx1Z2luT2JqLnNldElucHV0U2l6ZS5jYWxsKHRoaXMsICd4Jyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbnRleHRQbHVnaW4uX29ubHlQZXJjZW50YWdlKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgeSA9IHBlcmNlbnRhZ2VSb3RhdGlvbiA/ICcnIDogdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfZ2V0U2l6ZVkuY2FsbCh0aGlzLCBjb250ZXh0UGx1Z2luKTtcclxuICAgICAgICAgICAgICAgIGlmICh5ID09PSBjb250ZXh0UGx1Z2luLl9kZWZhdWx0U2l6ZVkpIHkgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0UGx1Z2luLl9vbmx5UGVyY2VudGFnZSkgeSA9IHRoaXMudXRpbC5nZXROdW1iZXIoeSwgMik7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0UGx1Z2luLmlucHV0WS52YWx1ZSA9IHk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uaW5wdXRYLmRpc2FibGVkID0gcGVyY2VudGFnZVJvdGF0aW9uID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICBjb250ZXh0UGx1Z2luLmlucHV0WS5kaXNhYmxlZCA9IHBlcmNlbnRhZ2VSb3RhdGlvbiA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgY29udGV4dFBsdWdpbi5wcm9wb3J0aW9uLmRpc2FibGVkID0gcGVyY2VudGFnZVJvdGF0aW9uID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgcGx1Z2luT2JqLnNldFJhdGlvLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIEl0IGlzIGNhbGxlZCBpbiBcInNldElucHV0U2l6ZVwiIChpbnB1dCB0YWcga2V5dXBFdmVudCksIFxyXG4gICAgICAgICAqIGNoZWNrcyB0aGUgdmFsdWUgZW50ZXJlZCBpbiB0aGUgaW5wdXQgdGFnLCBcclxuICAgICAgICAgKiBjYWxjdWxhdGVzIHRoZSByYXRpbywgYW5kIHNldHMgdGhlIGNhbGN1bGF0ZWQgdmFsdWUgaW4gdGhlIGlucHV0IHRhZyBvZiB0aGUgb3Bwb3NpdGUgc2l6ZS5cclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFBsdWdpbiBjb250ZXh0IG9iamVjdCBvZiBwbHVnaW4gKGNvcmUuY29udGV4dFtwbHVnaW5dKVxyXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB4eSAneCc6IHdpZHRoLCAneSc6IGhlaWdodFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9tb2R1bGVfc2V0SW5wdXRTaXplOiBmdW5jdGlvbiAoY29udGV4dFBsdWdpbiwgeHkpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRleHRQbHVnaW4uX29ubHlQZXJjZW50YWdlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeHkgPT09ICd4JyAmJiBjb250ZXh0UGx1Z2luLmlucHV0WC52YWx1ZSA+IDEwMCkgY29udGV4dFBsdWdpbi5pbnB1dFgudmFsdWUgPSAxMDA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0UGx1Z2luLnByb3BvcnRpb24uY2hlY2tlZCAmJiBjb250ZXh0UGx1Z2luLl9yYXRpbyAmJiAvXFxkLy50ZXN0KGNvbnRleHRQbHVnaW4uaW5wdXRYLnZhbHVlKSAmJiAvXFxkLy50ZXN0KGNvbnRleHRQbHVnaW4uaW5wdXRZLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeFVuaXQgPSBjb250ZXh0UGx1Z2luLmlucHV0WC52YWx1ZS5yZXBsYWNlKC9cXGQrfFxcLi9nLCAnJykgfHwgY29udGV4dFBsdWdpbi5zaXplVW5pdDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHlVbml0ID0gY29udGV4dFBsdWdpbi5pbnB1dFkudmFsdWUucmVwbGFjZSgvXFxkK3xcXC4vZywgJycpIHx8IGNvbnRleHRQbHVnaW4uc2l6ZVVuaXQ7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHhVbml0ICE9PSB5VW5pdCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlYyA9IHhVbml0ID09PSAnJScgPyAyIDogMDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoeHkgPT09ICd4Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uaW5wdXRZLnZhbHVlID0gdGhpcy51dGlsLmdldE51bWJlcihjb250ZXh0UGx1Z2luLl9yYXRpb1kgKiB0aGlzLnV0aWwuZ2V0TnVtYmVyKGNvbnRleHRQbHVnaW4uaW5wdXRYLnZhbHVlLCBkZWMpLCBkZWMpICsgeVVuaXQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uaW5wdXRYLnZhbHVlID0gdGhpcy51dGlsLmdldE51bWJlcihjb250ZXh0UGx1Z2luLl9yYXRpb1ggKiB0aGlzLnV0aWwuZ2V0TnVtYmVyKGNvbnRleHRQbHVnaW4uaW5wdXRZLnZhbHVlLCBkZWMpLCBkZWMpICsgeFVuaXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSXQgaXMgY2FsbGVkIGluIFwic2V0UmF0aW9cIiAoaW5wdXQgYW5kIHByb3BvcnRpb25DaGVjayB0YWdzIGNoYW5nZUV2ZW50KSwgXHJcbiAgICAgICAgICogY2hlY2tzIHRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgdGFnLCBjYWxjdWxhdGVzIHRoZSByYXRpbywgYW5kIHJlc2V0cyBpdCBpbiB0aGUgaW5wdXQgdGFnLlxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0UGx1Z2luIGNvbnRleHQgb2JqZWN0IG9mIHBsdWdpbiAoY29yZS5jb250ZXh0W3BsdWdpbl0pXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX21vZHVsZV9zZXRSYXRpbzogZnVuY3Rpb24gKGNvbnRleHRQbHVnaW4pIHtcclxuICAgICAgICAgICAgY29uc3QgeFZhbHVlID0gY29udGV4dFBsdWdpbi5pbnB1dFgudmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHlWYWx1ZSA9IGNvbnRleHRQbHVnaW4uaW5wdXRZLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRleHRQbHVnaW4ucHJvcG9ydGlvbi5jaGVja2VkICYmIC9cXGQrLy50ZXN0KHhWYWx1ZSkgJiYgL1xcZCsvLnRlc3QoeVZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeFVuaXQgPSB4VmFsdWUucmVwbGFjZSgvXFxkK3xcXC4vZywgJycpIHx8IGNvbnRleHRQbHVnaW4uc2l6ZVVuaXQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB5VW5pdCA9IHlWYWx1ZS5yZXBsYWNlKC9cXGQrfFxcLi9nLCAnJykgfHwgY29udGV4dFBsdWdpbi5zaXplVW5pdDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoeFVuaXQgIT09IHlVbml0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFBsdWdpbi5fcmF0aW8gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbnRleHRQbHVnaW4uX3JhdGlvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeCA9IHRoaXMudXRpbC5nZXROdW1iZXIoeFZhbHVlLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0gdGhpcy51dGlsLmdldE51bWJlcih5VmFsdWUsIDApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0UGx1Z2luLl9yYXRpbyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFBsdWdpbi5fcmF0aW9YID0geCAvIHk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFBsdWdpbi5fcmF0aW9ZID0geSAvIHg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0UGx1Z2luLl9yYXRpbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFJldmVydCBzaXplIG9mIGVsZW1lbnQgdG8gb3JpZ2luIHNpemUgKHBsdWdpbi5fb3JpZ2luX3csIHBsdWdpbi5fb3JpZ2luX2gpXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRQbHVnaW4gY29udGV4dCBvYmplY3Qgb2YgcGx1Z2luIChjb3JlLmNvbnRleHRbcGx1Z2luXSlcclxuICAgICAgICAgKi9cclxuICAgICAgICBfbW9kdWxlX3NpemVSZXZlcnQ6IGZ1bmN0aW9uIChjb250ZXh0UGx1Z2luKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZXh0UGx1Z2luLl9vbmx5UGVyY2VudGFnZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dFBsdWdpbi5pbnB1dFgudmFsdWUgPSBjb250ZXh0UGx1Z2luLl9vcmlnaW5fdyA+IDEwMCA/IDEwMCA6IGNvbnRleHRQbHVnaW4uX29yaWdpbl93O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dFBsdWdpbi5pbnB1dFgudmFsdWUgPSBjb250ZXh0UGx1Z2luLl9vcmlnaW5fdztcclxuICAgICAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uaW5wdXRZLnZhbHVlID0gY29udGV4dFBsdWdpbi5fb3JpZ2luX2g7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2F2ZSB0aGUgc2l6ZSBkYXRhIChlbGVtZW50LnNldEF0dHJpYnV0ZShcImRhdGEtc2l6ZVwiKSlcclxuICAgICAgICAgKiBVc2VkIGF0IHRoZSBcInNldFNpemVcIiBtZXRob2RcclxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFBsdWdpbiBjb250ZXh0IG9iamVjdCBvZiBwbHVnaW4gKGNvcmUuY29udGV4dFtwbHVnaW5dKVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9tb2R1bGVfc2F2ZUN1cnJlbnRTaXplOiBmdW5jdGlvbiAoY29udGV4dFBsdWdpbikge1xyXG4gICAgICAgICAgICBjb25zdCB4ID0gdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfZ2V0U2l6ZVguY2FsbCh0aGlzLCBjb250ZXh0UGx1Z2luKTtcclxuICAgICAgICAgICAgY29uc3QgeSA9IHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX2dldFNpemVZLmNhbGwodGhpcywgY29udGV4dFBsdWdpbik7XHJcbiAgICAgICAgICAgIC8vIGFkZCB0b28gd2lkdGgsIGhlaWdodCBhdHRyaWJ1dGVcclxuICAgICAgICAgICAgY29udGV4dFBsdWdpbi5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgeC5yZXBsYWNlKCdweCcsICcnKSk7XHJcbiAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCB5LnJlcGxhY2UoJ3B4JywgJycpKTtcclxuICAgICAgICAgICAgY29udGV4dFBsdWdpbi5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2l6ZScsIHggKyAnLCcgKyB5KTtcclxuICAgICAgICAgICAgaWYgKCEhY29udGV4dFBsdWdpbi5fdmlkZW9SYXRpbykgY29udGV4dFBsdWdpbi5fdmlkZW9SYXRpbyA9IHk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIENhbGwgdGhlIHJlc2l6aW5nIG1vZHVsZVxyXG4gICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0RWxlbWVudCBSZXNpemluZyB0YXJnZXQgZWxlbWVudFxyXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwbHVnaW4gUGx1Z2luIG5hbWVcclxuICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBTaXplIG9mIHJlc2l6aW5nIGRpdiB7dywgaCwgdCwgbH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjYWxsX2NvbnRyb2xsZXJfcmVzaXplOiBmdW5jdGlvbiAodGFyZ2V0RWxlbWVudCwgcGx1Z2luKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRSZXNpemluZyA9IHRoaXMuY29udGV4dC5yZXNpemluZztcclxuICAgICAgICAgICAgY29uc3QgY29udGV4dFBsdWdpbiA9IHRoaXMuY29udGV4dFtwbHVnaW5dO1xyXG4gICAgICAgICAgICBjb250ZXh0UmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW4gPSBwbHVnaW47XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXNpemVDb250YWluZXIgPSBjb250ZXh0UmVzaXppbmcucmVzaXplQ29udGFpbmVyO1xyXG4gICAgICAgICAgICBjb25zdCByZXNpemVEaXYgPSBjb250ZXh0UmVzaXppbmcucmVzaXplRGl2O1xyXG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLnV0aWwuZ2V0T2Zmc2V0KHRhcmdldEVsZW1lbnQsIHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gY29udGV4dFJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbCA9IC9eKDkwfDI3MCkkLy50ZXN0KE1hdGguYWJzKHRhcmdldEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdGF0ZScpKS50b1N0cmluZygpKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHcgPSBpc1ZlcnRpY2FsID8gdGFyZ2V0RWxlbWVudC5vZmZzZXRIZWlnaHQgOiB0YXJnZXRFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICBjb25zdCBoID0gaXNWZXJ0aWNhbCA/IHRhcmdldEVsZW1lbnQub2Zmc2V0V2lkdGggOiB0YXJnZXRFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICAgICAgY29uc3QgdCA9IG9mZnNldC50b3A7XHJcbiAgICAgICAgICAgIGNvbnN0IGwgPSBvZmZzZXQubGVmdCAtIHRoaXMuY29udGV4dC5lbGVtZW50Lnd5c2l3eWdGcmFtZS5zY3JvbGxMZWZ0O1xyXG5cclxuICAgICAgICAgICAgcmVzaXplQ29udGFpbmVyLnN0eWxlLnRvcCA9IHQgKyAncHgnO1xyXG4gICAgICAgICAgICByZXNpemVDb250YWluZXIuc3R5bGUubGVmdCA9IGwgKyAncHgnO1xyXG4gICAgICAgICAgICByZXNpemVDb250YWluZXIuc3R5bGUud2lkdGggPSB3ICsgJ3B4JztcclxuICAgICAgICAgICAgcmVzaXplQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGggKyAncHgnO1xyXG5cclxuICAgICAgICAgICAgcmVzaXplRGl2LnN0eWxlLnRvcCA9ICcwcHgnO1xyXG4gICAgICAgICAgICByZXNpemVEaXYuc3R5bGUubGVmdCA9ICcwcHgnO1xyXG4gICAgICAgICAgICByZXNpemVEaXYuc3R5bGUud2lkdGggPSAgdyArICdweCc7XHJcbiAgICAgICAgICAgIHJlc2l6ZURpdi5zdHlsZS5oZWlnaHQgPSAgaCArICdweCc7XHJcblxyXG4gICAgICAgICAgICBsZXQgYWxpZ24gPSB0YXJnZXRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1hbGlnbicpIHx8ICdiYXNpYyc7XHJcbiAgICAgICAgICAgIGFsaWduID0gYWxpZ24gPT09ICdub25lJyA/ICdiYXNpYycgOiBhbGlnbjtcclxuXHJcbiAgICAgICAgICAgIC8vIHRleHRcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQodGFyZ2V0RWxlbWVudCwgdGhpcy51dGlsLmlzQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgY29uc3QgY292ZXIgPSB0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudCh0YXJnZXRFbGVtZW50LCAnRklHVVJFJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlYID0gdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9tb2R1bGVfZ2V0U2l6ZVguY2FsbCh0aGlzLCBjb250ZXh0UGx1Z2luLCB0YXJnZXRFbGVtZW50LCBjb3ZlciwgY29udGFpbmVyKSB8fCAnYXV0byc7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlZID0gY29udGV4dFBsdWdpbi5fb25seVBlcmNlbnRhZ2UgJiYgcGx1Z2luID09PSAnaW1hZ2UnID8gJycgOiAnLCAnICsgKHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX2dldFNpemVZLmNhbGwodGhpcywgY29udGV4dFBsdWdpbiwgdGFyZ2V0RWxlbWVudCwgY292ZXIsIGNvbnRhaW5lcikgfHwgJ2F1dG8nKTtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmNoYW5nZVR4dChjb250ZXh0UmVzaXppbmcucmVzaXplRGlzcGxheSwgdGhpcy5sYW5nLmRpYWxvZ0JveFthbGlnbl0gKyAnICgnICsgZGlzcGxheVggKyBkaXNwbGF5WSArICcpJyk7XHJcblxyXG4gICAgICAgICAgICAvLyByZXNpemluZyBkaXNwbGF5XHJcbiAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5yZXNpemVCdXR0b25Hcm91cC5zdHlsZS5kaXNwbGF5ID0gY29udGV4dFBsdWdpbi5fcmVzaXppbmcgPyAnJyA6ICdub25lJztcclxuICAgICAgICAgICAgY29uc3QgcmVzaXplRG90U2hvdyA9IGNvbnRleHRQbHVnaW4uX3Jlc2l6aW5nICYmICFjb250ZXh0UGx1Z2luLl9yZXNpemVEb3RIaWRlICYmICFjb250ZXh0UGx1Z2luLl9vbmx5UGVyY2VudGFnZSA/ICdmbGV4JyA6ICdub25lJztcclxuICAgICAgICAgICAgY29uc3QgcmVzaXplSGFuZGxlcyA9IGNvbnRleHRSZXNpemluZy5yZXNpemVIYW5kbGVzO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmVzaXplSGFuZGxlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmVzaXplSGFuZGxlc1tpXS5zdHlsZS5kaXNwbGF5ID0gcmVzaXplRG90U2hvdztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRleHRQbHVnaW4uX3Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3RhdGlvbnMgPSBjb250ZXh0UmVzaXppbmcucm90YXRpb25CdXR0b25zO1xyXG4gICAgICAgICAgICAgICAgcm90YXRpb25zWzBdLnN0eWxlLmRpc3BsYXkgPSByb3RhdGlvbnNbMV0uc3R5bGUuZGlzcGxheSA9IGNvbnRleHRQbHVnaW4uX3JvdGF0aW9uID8gJycgOiAnbm9uZSc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGFsaWduIGljb25cclxuICAgICAgICAgICAgaWYgKGNvbnRleHRQbHVnaW4uX2FsaWduSGlkZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLmFsaWduQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0UmVzaXppbmcuYWxpZ25CdXR0b24uc3R5bGUuZGlzcGxheSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWxpZ25MaXN0ID0gY29udGV4dFJlc2l6aW5nLmFsaWduTWVudUxpc3Q7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlRWxlbWVudChjb250ZXh0UmVzaXppbmcuYWxpZ25CdXR0b24uZmlyc3RFbGVtZW50Q2hpbGQsIGNvbnRleHRSZXNpemluZy5hbGlnbkljb25zW2FsaWduXSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYWxpZ25MaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsaWduTGlzdFtpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSA9PT0gYWxpZ24pIHRoaXMudXRpbC5hZGRDbGFzcyhhbGlnbkxpc3RbaV0sICdvbicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGFsaWduTGlzdFtpXSwgJ29uJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHBlcmNlbnRhZ2UgYWN0aXZlXHJcbiAgICAgICAgICAgIGNvbnN0IHBCdXR0b25zID0gY29udGV4dFJlc2l6aW5nLnBlcmNlbnRhZ2VCdXR0b25zO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IC8lJC8udGVzdCh0YXJnZXRFbGVtZW50LnN0eWxlLndpZHRoKSAmJiAvJSQvLnRlc3QoY29udGFpbmVyLnN0eWxlLndpZHRoKSA/ICh0aGlzLnV0aWwuZ2V0TnVtYmVyKGNvbnRhaW5lci5zdHlsZS53aWR0aCwgMCkgLyAxMDApICsgJycgOiAnJyA7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwQnV0dG9ucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBCdXR0b25zW2ldLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhwQnV0dG9uc1tpXSwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwucmVtb3ZlQ2xhc3MocEJ1dHRvbnNbaV0sICdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gY2FwdGlvbiBkaXNwbGF5LCBhY3RpdmVcclxuICAgICAgICAgICAgaWYgKCFjb250ZXh0UGx1Z2luLl9jYXB0aW9uU2hvdykge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLmNhcHRpb25CdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5jYXB0aW9uQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnV0aWwuZ2V0Q2hpbGRFbGVtZW50KHRhcmdldEVsZW1lbnQucGFyZW50Tm9kZSwgJ2ZpZ2NhcHRpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhjb250ZXh0UmVzaXppbmcuY2FwdGlvbkJ1dHRvbiwgJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRQbHVnaW4uX2NhcHRpb25DaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnJlbW92ZUNsYXNzKGNvbnRleHRSZXNpemluZy5jYXB0aW9uQnV0dG9uLCAnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFBsdWdpbi5fY2FwdGlvbkNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzaXplQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYWRkT2Zmc2V0ID0ge2xlZnQ6IDAsIHRvcDogNTB9O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgYWRkT2Zmc2V0LmxlZnQgLT0gdGhpcy5jb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLnBhcmVudEVsZW1lbnQub2Zmc2V0TGVmdDtcclxuICAgICAgICAgICAgICAgIGFkZE9mZnNldC50b3AgLT0gdGhpcy5jb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLnBhcmVudEVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xsZXJQb3NpdGlvbihjb250ZXh0UmVzaXppbmcucmVzaXplQnV0dG9uLCByZXNpemVDb250YWluZXIsICdib3R0b20nLCBhZGRPZmZzZXQpO1xyXG4gICAgICAgICAgICBjb25zdCBvbkNvbnRyb2xzT2ZmID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsLnNldERpc2FibGVkQnV0dG9ucy5jYWxsKHRoaXMudXRpbCwgZmFsc2UsIHRoaXMucmVzaXppbmdEaXNhYmxlZEJ1dHRvbnMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaXN0b3J5Ll9yZXNldENhY2hpbmdCdXR0b24oKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09uKHJlc2l6ZUNvbnRhaW5lciwgY29udGV4dFJlc2l6aW5nLnJlc2l6ZUJ1dHRvbiwgb25Db250cm9sc09mZi5iaW5kKHRoaXMpLCB0YXJnZXRFbGVtZW50LCBwbHVnaW4pO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuc2V0RGlzYWJsZWRCdXR0b25zKHRydWUsIHRoaXMucmVzaXppbmdEaXNhYmxlZEJ1dHRvbnMpO1xyXG5cclxuICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLl9yZXNpemVfdyA9IHc7XHJcbiAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5fcmVzaXplX2ggPSBoO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luU2l6ZSA9ICh0YXJnZXRFbGVtZW50LmdldEF0dHJpYnV0ZSgnb3JpZ2luLXNpemUnKSB8fCAnJykuc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLl9vcmlnaW5fdyA9IG9yaWdpblNpemVbMF0gfHwgdGFyZ2V0RWxlbWVudC5uYXR1cmFsV2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5fb3JpZ2luX2ggPSBvcmlnaW5TaXplWzFdIHx8IHRhcmdldEVsZW1lbnQubmF0dXJhbEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB3OiB3LFxyXG4gICAgICAgICAgICAgICAgaDogaCxcclxuICAgICAgICAgICAgICAgIHQ6IHQsXHJcbiAgICAgICAgICAgICAgICBsOiBsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2Nsb3NlQWxpZ25NZW51OiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gT3BlbiBhbGlnbiBzdWJtZW51IG9mIG1vZHVsZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9wZW5BbGlnbk1lbnU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgYWxpZ25CdXR0b24gPSB0aGlzLmNvbnRleHQucmVzaXppbmcuYWxpZ25CdXR0b247XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5hZGRDbGFzcyhhbGlnbkJ1dHRvbiwgJ29uJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZXNpemluZy5hbGlnbk1lbnUuc3R5bGUudG9wID0gKGFsaWduQnV0dG9uLm9mZnNldFRvcCArIGFsaWduQnV0dG9uLm9mZnNldEhlaWdodCkgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucmVzaXppbmcuYWxpZ25NZW51LnN0eWxlLmxlZnQgPSAoYWxpZ25CdXR0b24ub2Zmc2V0TGVmdCAtIGFsaWduQnV0dG9uLm9mZnNldFdpZHRoIC8gMikgKyAncHgnO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucmVzaXppbmcuYWxpZ25NZW51LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9jbG9zZUFsaWduTWVudSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbC5yZW1vdmVDbGFzcyh0aGlzLmNvbnRleHQucmVzaXppbmcuYWxpZ25CdXR0b24sICdvbicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LnJlc2l6aW5nLmFsaWduTWVudS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEb2NFdmVudCgnY2xpY2snLCB0aGlzLnBsdWdpbnMucmVzaXppbmcuX2Nsb3NlQWxpZ25NZW51KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5fY2xvc2VBbGlnbk1lbnUgPSBudWxsO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZERvY0V2ZW50KCdjbGljaycsIHRoaXMucGx1Z2lucy5yZXNpemluZy5fY2xvc2VBbGlnbk1lbnUpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBDbGljayBldmVudCBvZiByZXNpemluZyB0b29sYmFyXHJcbiAgICAgICAgICogUGVyZm9ybXMgdGhlIGFjdGlvbiBvZiB0aGUgY2xpY2tlZCB0b29sYmFyIGJ1dHRvbi5cclxuICAgICAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUgRXZlbnQgb2JqZWN0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25DbGlja19yZXNpemVCdXR0b246IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29tbWFuZCcpIHx8IHRhcmdldC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb21tYW5kJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbW1hbmQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpIHx8IHRhcmdldC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcGx1Z2luTmFtZSA9IHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbjtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB0aGlzLmNvbnRleHRbcGx1Z2luTmFtZV07XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRFbCA9IGN1cnJlbnRDb250ZXh0Ll9lbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TW9kdWxlID0gdGhpcy5wbHVnaW5zW3BsdWdpbk5hbWVdO1xyXG5cclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBsdWdpbnMucmVzaXppbmcuX2Nsb3NlQWxpZ25NZW51ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX2Nsb3NlQWxpZ25NZW51KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZCA9PT0gJ29uYWxpZ24nKSByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoY29tbWFuZCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnYXV0byc6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLnJlc2V0VHJhbnNmb3JtLmNhbGwodGhpcywgY29udGV4dEVsKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlLnNldEF1dG9TaXplLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQoY29udGV4dEVsLCBwbHVnaW5OYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3BlcmNlbnQnOlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwZXJjZW50WSA9IHRoaXMucGx1Z2lucy5yZXNpemluZy5fbW9kdWxlX2dldFNpemVZLmNhbGwodGhpcywgY3VycmVudENvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBjb250ZXh0RWwuZ2V0QXR0cmlidXRlKCdkYXRhLXBlcmNlbnRhZ2UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmNlbnRhZ2UpIHBlcmNlbnRZID0gcGVyY2VudGFnZS5zcGxpdCgnLCcpWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLnJlc2V0VHJhbnNmb3JtLmNhbGwodGhpcywgY29udGV4dEVsKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlLnNldFBlcmNlbnRTaXplLmNhbGwodGhpcywgKHZhbHVlICogMTAwKSwgKHRoaXMudXRpbC5nZXROdW1iZXIocGVyY2VudFksIDApID09PSBudWxsIHx8ICEvJSQvLnRlc3QocGVyY2VudFkpKSA/ICcnIDogcGVyY2VudFkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGNvbnRleHRFbCwgcGx1Z2luTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdtaXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBjb250ZXh0RWwuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdGF0ZScpIHx8ICcwJztcclxuICAgICAgICAgICAgICAgICAgICBsZXQgeCA9IGNvbnRleHRFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlWCcpIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB5ID0gY29udGV4dEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1yb3RhdGVZJykgfHwgJyc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgodmFsdWUgPT09ICdoJyAmJiAhdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbCkgfHwgKHZhbHVlID09PSAndicgJiYgdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHkgPyAnJyA6ICcxODAnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4ID8gJycgOiAnMTgwJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRFbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlWCcsIHgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRFbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlWScsIHkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuX3NldFRyYW5zRm9ybShjb250ZXh0RWwsIHIsIHgsIHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncm90YXRlJzpcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0UmVzaXppbmcgPSB0aGlzLmNvbnRleHQucmVzaXppbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2xvcGUgPSAoY29udGV4dEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1yb3RhdGUnKSAqIDEpICsgKHZhbHVlICogMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVnID0gdGhpcy5fdy5NYXRoLmFicyhzbG9wZSkgPj0gMzYwID8gMCA6IHNsb3BlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0RWwuc2V0QXR0cmlidXRlKCdkYXRhLXJvdGF0ZScsIGRlZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbCA9IC9eKDkwfDI3MCkkLy50ZXN0KHRoaXMuX3cuTWF0aC5hYnMoZGVnKS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuc2V0VHJhbnNmb3JtU2l6ZS5jYWxsKHRoaXMsIGNvbnRleHRFbCwgbnVsbCwgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KGNvbnRleHRFbCwgcGx1Z2luTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdvbmFsaWduJzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcub3BlbkFsaWduTWVudS5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2FsaWduJzpcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGlnblZhbHVlID0gdmFsdWUgPT09ICdiYXNpYycgPyAnbm9uZScgOiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlLnNldEFsaWduLmNhbGwodGhpcywgYWxpZ25WYWx1ZSwgbnVsbCwgbnVsbCwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQoY29udGV4dEVsLCBwbHVnaW5OYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2NhcHRpb24nOlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcHRpb24gPSAhY3VycmVudENvbnRleHQuX2NhcHRpb25DaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNb2R1bGUub3Blbk1vZGlmeS5jYWxsKHRoaXMsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0Ll9jYXB0aW9uQ2hlY2tlZCA9IGN1cnJlbnRDb250ZXh0LmNhcHRpb25DaGVja0VsLmNoZWNrZWQgPSBjYXB0aW9uO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlLnVwZGF0ZV9pbWFnZS5jYWxsKHRoaXMsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXB0aW9uVGV4dCA9IHRoaXMudXRpbC5nZXRDaGlsZEVsZW1lbnQoY3VycmVudENvbnRleHQuX2NhcHRpb24sIGZ1bmN0aW9uIChjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudC5ub2RlVHlwZSA9PT0gMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhcHRpb25UZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29udGV4dC5fY2FwdGlvbi5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5nZShjYXB0aW9uVGV4dCwgMCwgY2FwdGlvblRleHQsIGNhcHRpb25UZXh0LnRleHRDb250ZW50Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcnNPZmYoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdENvbXBvbmVudChjb250ZXh0RWwsIHBsdWdpbk5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlLm9wZW5Nb2RpZnkuY2FsbCh0aGlzLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncmV2ZXJ0JzpcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlLnNldE9yaWdpblNpemUuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdENvbXBvbmVudChjb250ZXh0RWwsIHBsdWdpbk5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndXBkYXRlJzpcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TW9kdWxlLm9wZW5Nb2RpZnkuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdkZWxldGUnOlxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNb2R1bGUuZGVzdHJveS5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGZhbHNlKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZSB0aGUgdHJhbnNmb3JtIHN0eWxlIChyb3RhdGlvbikgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRhcmdldCBlbGVtZW50XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVzZXRUcmFuc2Zvcm06IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2l6ZScpIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbicpIHx8ICcnKS5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLm1heFdpZHRoID0gJyc7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gJyc7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gJyc7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXJvdGF0ZScsICcnKTtcclxuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlWCcsICcnKTtcclxuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlWScsICcnKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1t0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW5dLnNldFNpemUuY2FsbCh0aGlzLCBzaXplWzBdID8gc2l6ZVswXSA6ICdhdXRvJywgc2l6ZVsxXSA/IHNpemVbMV0gOiAnJywgdHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNldCB0aGUgdHJhbnNmb3JtIHN0eWxlIChyb3RhdGlvbikgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRhcmdldCBlbGVtZW50XHJcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ8bnVsbH0gd2lkdGggRWxlbWVudCdzIHdpZHRoIHNpemVcclxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcnxudWxsfSBoZWlnaHQgRWxlbWVudCdzIGhlaWdodCBzaXplXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0VHJhbnNmb3JtU2l6ZTogZnVuY3Rpb24gKGVsZW1lbnQsIHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICAgICAgbGV0IHBlcmNlbnRhZ2UgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wZXJjZW50YWdlJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsO1xyXG4gICAgICAgICAgICBjb25zdCBkZWcgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1yb3RhdGUnKSAqIDE7XHJcbiAgICAgICAgICAgIGxldCB0cmFuc09yaWdpbiA9ICcnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBlcmNlbnRhZ2UgJiYgIWlzVmVydGljYWwpIHtcclxuICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2UgPSBwZXJjZW50YWdlLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGVyY2VudGFnZVswXSA9PT0gJ2F1dG8nICYmIHBlcmNlbnRhZ2VbMV0gPT09ICdhdXRvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc1t0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW5dLnNldEF1dG9TaXplLmNhbGwodGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc1t0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW5dLnNldFBlcmNlbnRTaXplLmNhbGwodGhpcywgcGVyY2VudGFnZVswXSwgcGVyY2VudGFnZVsxXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb3ZlciA9IHRoaXMudXRpbC5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsICdGSUdVUkUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRXID0gd2lkdGggfHwgZWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldEggPSBoZWlnaHQgfHwgZWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3ID0gKGlzVmVydGljYWwgPyBvZmZzZXRIIDogb2Zmc2V0VykgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaCA9IChpc1ZlcnRpY2FsID8gb2Zmc2V0VyA6IG9mZnNldEgpICsgJ3B4JztcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnNbdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfcGx1Z2luXS5jYW5jZWxQZXJjZW50QXR0ci5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zW3RoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbl0uc2V0U2l6ZS5jYWxsKHRoaXMsIG9mZnNldFcgKyAncHgnLCBvZmZzZXRIICsgJ3B4JywgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY292ZXIuc3R5bGUud2lkdGggPSB3O1xyXG4gICAgICAgICAgICAgICAgY292ZXIuc3R5bGUuaGVpZ2h0ID0gKCEhdGhpcy5jb250ZXh0W3RoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbl0uX2NhcHRpb24gPyAnJyA6IGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRyYW5zVyA9IChvZmZzZXRXIC8gMikgKyAncHggJyArIChvZmZzZXRXIC8gMikgKyAncHggMCc7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRyYW5zSCA9IChvZmZzZXRIIC8gMikgKyAncHggJyArIChvZmZzZXRIIC8gMikgKyAncHggMCc7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNPcmlnaW4gPSBkZWcgPT09IDkwIHx8IGRlZyA9PT0gLTI3MCA/IHRyYW5zSCA6IHRyYW5zVztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSB0cmFuc09yaWdpbjtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnJlc2l6aW5nLl9zZXRUcmFuc0Zvcm0oZWxlbWVudCwgZGVnLnRvU3RyaW5nKCksIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvdGF0ZVgnKSB8fCAnJywgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcm90YXRlWScpIHx8ICcnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsKSBlbGVtZW50LnN0eWxlLm1heFdpZHRoID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBlbHNlIGVsZW1lbnQuc3R5bGUubWF4V2lkdGggPSAnJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5yZXNpemluZy5zZXRDYXB0aW9uUG9zaXRpb24uY2FsbCh0aGlzLCBlbGVtZW50KTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfc2V0VHJhbnNGb3JtOiBmdW5jdGlvbiAoZWxlbWVudCwgciwgeCwgeSkge1xyXG4gICAgICAgICAgICBsZXQgd2lkdGggPSAoZWxlbWVudC5vZmZzZXRXaWR0aCAtIGVsZW1lbnQub2Zmc2V0SGVpZ2h0KSAqICgvLS8udGVzdChyKSA/IDEgOiAtMSk7XHJcbiAgICAgICAgICAgIGxldCB0cmFuc2xhdGUgPSAnJztcclxuXHJcbiAgICAgICAgICAgIGlmICgvWzEtOV0vLnRlc3QocikgJiYgKHggfHwgeSkpIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSA9IHggPyAnWScgOiAnWCc7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnOTAnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgPSB4ICYmIHkgPyAnWCcgOiB5ID8gdHJhbnNsYXRlIDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzI3MCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoICo9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgPSB4ICYmIHkgPyAnWScgOiB4ID8gdHJhbnNsYXRlIDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJy05MCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSA9IHggJiYgeSA/ICdZJyA6IHggPyB0cmFuc2xhdGUgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnLTI3MCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoICo9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgPSB4ICYmIHkgPyAnWCcgOiB5ID8gdHJhbnNsYXRlIDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAociAlIDE4MCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5tYXhXaWR0aCA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9ICdyb3RhdGUoJyArIHIgKyAnZGVnKScgKyAoeCA/ICcgcm90YXRlWCgnICsgeCArICdkZWcpJyA6ICcnKSArICh5ID8gJyByb3RhdGVZKCcgKyB5ICsgJ2RlZyknIDogJycpICsgKHRyYW5zbGF0ZSA/ICcgdHJhbnNsYXRlJyArIHRyYW5zbGF0ZSArICcoJyArIHdpZHRoICsgJ3B4KScgOiAnJyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIFRoZSBwb3NpdGlvbiBvZiB0aGUgY2FwdGlvbiBpcyBzZXQgYXV0b21hdGljYWxseS5cclxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGFyZ2V0IGVsZW1lbnQgKG5vdCBjYXB0aW9uIGVsZW1lbnQpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0Q2FwdGlvblBvc2l0aW9uOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWdjYXB0aW9uID0gdGhpcy51dGlsLmdldENoaWxkRWxlbWVudCh0aGlzLnV0aWwuZ2V0UGFyZW50RWxlbWVudChlbGVtZW50LCAnRklHVVJFJyksICdGSUdDQVBUSU9OJyk7XHJcbiAgICAgICAgICAgIGlmIChmaWdjYXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBmaWdjYXB0aW9uLnN0eWxlLm1hcmdpblRvcCA9ICh0aGlzLmNvbnRleHQucmVzaXppbmcuX3JvdGF0ZVZlcnRpY2FsID8gZWxlbWVudC5vZmZzZXRXaWR0aCAtIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IDogMCkgKyAncHgnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIE1vdXNlIGRvd24gZXZlbnQgb2YgcmVzaXplIGhhbmRsZXNcclxuICAgICAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGUgRXZlbnQgb2JqZWN0IFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uTW91c2VEb3duX3Jlc2l6ZV9oYW5kbGU6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRSZXNpemluZyA9IHRoaXMuY29udGV4dC5yZXNpemluZztcclxuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gY29udGV4dFJlc2l6aW5nLl9yZXNpemVfZGlyZWN0aW9uID0gZS50YXJnZXQuY2xhc3NMaXN0WzBdO1xyXG5cclxuICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLl9yZXNpemVDbGllbnRYID0gZS5jbGllbnRYO1xyXG4gICAgICAgICAgICBjb250ZXh0UmVzaXppbmcuX3Jlc2l6ZUNsaWVudFkgPSBlLmNsaWVudFk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5lbGVtZW50LnJlc2l6ZUJhY2tncm91bmQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5yZXNpemVCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLnJlc2l6ZURpdi5zdHlsZS5mbG9hdCA9IC9sLy50ZXN0KGRpcmVjdGlvbikgPyAncmlnaHQnIDogL3IvLnRlc3QoZGlyZWN0aW9uKSA/ICdsZWZ0JyA6ICdub25lJztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNsb3N1cmVGdW5jX2JpbmQgPSBmdW5jdGlvbiBjbG9zdXJlRnVuYyhlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS50eXBlID09PSAna2V5ZG93bicgJiYgZS5rZXlDb2RlICE9PSAyNykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5nZSA9IGNvbnRleHRSZXNpemluZy5faXNDaGFuZ2U7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0UmVzaXppbmcuX2lzQ2hhbmdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEb2NFdmVudCgnbW91c2Vtb3ZlJywgcmVzaXppbmdfZWxlbWVudF9iaW5kKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRG9jRXZlbnQoJ21vdXNldXAnLCBjbG9zdXJlRnVuY19iaW5kKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRG9jRXZlbnQoJ2tleWRvd24nLCBjbG9zdXJlRnVuY19iaW5kKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZS50eXBlID09PSAna2V5ZG93bicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJzT2ZmKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmVsZW1lbnQucmVzaXplQmFja2dyb3VuZC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc1t0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW5dLmluaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZWxlbWVudCByZXNpemVcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnMucmVzaXppbmcuY2FuY2VsX2NvbnRyb2xsZXJfcmVzaXplLmNhbGwodGhpcywgZGlyZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBoaXN0b3J5IHN0YWNrXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZSkgdGhpcy5oaXN0b3J5LnB1c2goZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXNpemluZ19lbGVtZW50X2JpbmQgPSB0aGlzLnBsdWdpbnMucmVzaXppbmcucmVzaXppbmdfZWxlbWVudC5iaW5kKHRoaXMsIGNvbnRleHRSZXNpemluZywgZGlyZWN0aW9uLCB0aGlzLmNvbnRleHRbY29udGV4dFJlc2l6aW5nLl9yZXNpemVfcGx1Z2luXSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRG9jRXZlbnQoJ21vdXNlbW92ZScsIHJlc2l6aW5nX2VsZW1lbnRfYmluZCk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRG9jRXZlbnQoJ21vdXNldXAnLCBjbG9zdXJlRnVuY19iaW5kKTtcclxuICAgICAgICAgICAgdGhpcy5hZGREb2NFdmVudCgna2V5ZG93bicsIGNsb3N1cmVGdW5jX2JpbmQpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBNb3VzZSBtb3ZlIGV2ZW50IGFmdGVyIGNhbGwgXCJvbk1vdXNlRG93bl9yZXNpemVfaGFuZGxlXCIgb2YgcmVzaXplIGhhbmRsZXNcclxuICAgICAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgbW9kdWxlJ3MgXCJkaXZcIiBpcyBhZGp1c3RlZCBhY2NvcmRpbmcgdG8gdGhlIG1vdXNlIG1vdmUgZXZlbnQuXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRSZXNpemluZyBcImNvcmUuY29udGV4dC5yZXNpemluZ1wiIG9iamVjdCAoYmluZGluZyBhcmd1bWVudClcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGlyZWN0aW9uIERpcmVjdGlvbiAoXCJ0bFwiLCBcInRyXCIsIFwiYmxcIiwgXCJiclwiLCBcImx3XCIsIFwidGhcIiwgXCJyd1wiLCBcImJoXCIpIChiaW5kaW5nIGFyZ3VtZW50KVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwbHVnaW4gXCJjb3JlLmNvbnRleHRbY3VycmVudFBsdWdpbl1cIiBvYmplY3QgKGJpbmRpbmcgYXJndW1lbnQpXHJcbiAgICAgICAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBlIEV2ZW50IG9iamVjdFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlc2l6aW5nX2VsZW1lbnQ6IGZ1bmN0aW9uIChjb250ZXh0UmVzaXppbmcsIGRpcmVjdGlvbiwgcGx1Z2luLCBlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsaWVudFggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsaWVudFkgPSBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVzdWx0VyA9IHBsdWdpbi5fZWxlbWVudF93O1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0SCA9IHBsdWdpbi5fZWxlbWVudF9oO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdyA9IHBsdWdpbi5fZWxlbWVudF93ICsgKC9yLy50ZXN0KGRpcmVjdGlvbikgPyBjbGllbnRYIC0gY29udGV4dFJlc2l6aW5nLl9yZXNpemVDbGllbnRYIDogY29udGV4dFJlc2l6aW5nLl9yZXNpemVDbGllbnRYIC0gY2xpZW50WCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGggPSBwbHVnaW4uX2VsZW1lbnRfaCArICgvYi8udGVzdChkaXJlY3Rpb24pID8gY2xpZW50WSAtIGNvbnRleHRSZXNpemluZy5fcmVzaXplQ2xpZW50WSA6IGNvbnRleHRSZXNpemluZy5fcmVzaXplQ2xpZW50WSAtIGNsaWVudFkpO1xyXG4gICAgICAgICAgICBjb25zdCB3aCA9ICgocGx1Z2luLl9lbGVtZW50X2ggLyBwbHVnaW4uX2VsZW1lbnRfdykgKiB3KTtcclxuXHJcbiAgICAgICAgICAgIGlmICgvdC8udGVzdChkaXJlY3Rpb24pKSBjb250ZXh0UmVzaXppbmcucmVzaXplRGl2LnN0eWxlLnRvcCA9IChwbHVnaW4uX2VsZW1lbnRfaCAtICgvaC8udGVzdChkaXJlY3Rpb24pID8gaCA6IHdoKSkgKyAncHgnO1xyXG4gICAgICAgICAgICBpZiAoL2wvLnRlc3QoZGlyZWN0aW9uKSkgY29udGV4dFJlc2l6aW5nLnJlc2l6ZURpdi5zdHlsZS5sZWZ0ID0gKHBsdWdpbi5fZWxlbWVudF93IC0gdykgKyAncHgnO1xyXG5cclxuICAgICAgICAgICAgaWYgKC9yfGwvLnRlc3QoZGlyZWN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLnJlc2l6ZURpdi5zdHlsZS53aWR0aCA9IHcgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0VyA9IHc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICgvXih0fGIpW15oXSQvLnRlc3QoZGlyZWN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLnJlc2l6ZURpdi5zdHlsZS5oZWlnaHQgPSB3aCArICdweCc7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRIID0gd2g7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoL14odHxiKWgkLy50ZXN0KGRpcmVjdGlvbikpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5yZXNpemVEaXYuc3R5bGUuaGVpZ2h0ID0gaCArICdweCc7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRIID0gaDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29udGV4dFJlc2l6aW5nLl9yZXNpemVfdyA9IHJlc3VsdFc7XHJcbiAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5fcmVzaXplX2ggPSByZXN1bHRIO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuY2hhbmdlVHh0KGNvbnRleHRSZXNpemluZy5yZXNpemVEaXNwbGF5LCB0aGlzLl93Lk1hdGgucm91bmQocmVzdWx0VykgKyAnIHggJyArIHRoaXMuX3cuTWF0aC5yb3VuZChyZXN1bHRIKSk7XHJcbiAgICAgICAgICAgIGNvbnRleHRSZXNpemluZy5faXNDaGFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXNpemUgdGhlIGVsZW1lbnQgdG8gdGhlIHNpemUgb2YgdGhlIFwiZGl2XCIgYWRqdXN0ZWQgaW4gdGhlIFwicmVzaXppbmdfZWxlbWVudFwiIG1ldGhvZC5cclxuICAgICAgICAgKiBDYWxsZWQgYXQgdGhlIG1vdXNlLXVwIGV2ZW50IHJlZ2lzdGVyZWQgaW4gXCJvbk1vdXNlRG93bl9yZXNpemVfaGFuZGxlXCIuXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGRpcmVjdGlvbiBEaXJlY3Rpb24gKFwidGxcIiwgXCJ0clwiLCBcImJsXCIsIFwiYnJcIiwgXCJsd1wiLCBcInRoXCIsIFwicndcIiwgXCJiaFwiKVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNhbmNlbF9jb250cm9sbGVyX3Jlc2l6ZTogZnVuY3Rpb24gKGRpcmVjdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yb3RhdGVWZXJ0aWNhbDtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyc09mZigpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZWxlbWVudC5yZXNpemVCYWNrZ3JvdW5kLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblxyXG4gICAgICAgICAgICBsZXQgdyA9IHRoaXMuX3cuTWF0aC5yb3VuZChpc1ZlcnRpY2FsID8gdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfaCA6IHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3cpO1xyXG4gICAgICAgICAgICBsZXQgaCA9IHRoaXMuX3cuTWF0aC5yb3VuZChpc1ZlcnRpY2FsID8gdGhpcy5jb250ZXh0LnJlc2l6aW5nLl9yZXNpemVfdyA6IHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX2gpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFpc1ZlcnRpY2FsICYmICEvJSQvLnRlc3QodykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAxNjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0ID0gdGhpcy5jb250ZXh0LmVsZW1lbnQud3lzaXd5Z0ZyYW1lLmNsaWVudFdpZHRoIC0gKHBhZGRpbmcgKiAyKSAtIDI7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXRpbC5nZXROdW1iZXIodywgMCkgPiBsaW1pdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGggPSB0aGlzLl93Lk1hdGgucm91bmQoKGggLyB3KSAqIGxpbWl0KTtcclxuICAgICAgICAgICAgICAgICAgICB3ID0gbGltaXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbk5hbWUgPSB0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW47XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc1twbHVnaW5OYW1lXS5zZXRTaXplLmNhbGwodGhpcywgdywgaCwgZmFsc2UsIGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB0aGlzLnBsdWdpbnMucmVzaXppbmcuc2V0VHJhbnNmb3JtU2l6ZS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dFt0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW5dLl9lbGVtZW50LCB3LCBoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KHRoaXMuY29udGV4dFtwbHVnaW5OYW1lXS5fZWxlbWVudCwgcGx1Z2luTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodHlwZW9mIG5vR2xvYmFsID09PSB0eXBlb2YgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKCF3aW5kb3cuU1VORURJVE9SX01PRFVMRVMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ1NVTkVESVRPUl9NT0RVTEVTJywge1xyXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZToge31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNVTkVESVRPUl9NT0RVTEVTLCAncmVzaXppbmcnLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsdWU6IHJlc2l6aW5nXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc2l6aW5nO1xyXG59KSk7IiwiLypcclxuICogd3lzaXd5ZyB3ZWIgZWRpdG9yXHJcbiAqXHJcbiAqIHN1bmVkaXRvci5qc1xyXG4gKiBDb3B5cmlnaHQgMjAxNyBKaUhvbmcgTGVlLlxyXG4gKiBNSVQgbGljZW5zZS5cclxuICovXHJcbid1c2Ugc3RyaWN0JztcclxuXHJcbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XHJcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cclxuICAgICAgICAgICAgZmFjdG9yeShnbG9iYWwsIHRydWUpIDpcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHcpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdy5kb2N1bWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU1VORURJVE9SX01PRFVMRVMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFjdG9yeSh3KTtcclxuICAgICAgICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmFjdG9yeShnbG9iYWwpO1xyXG4gICAgfVxyXG59KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24gKHdpbmRvdywgbm9HbG9iYWwpIHtcclxuICAgIGNvbnN0IGZpbGVNYW5hZ2VyID0ge1xyXG4gICAgICAgIG5hbWU6ICdmaWxlTWFuYWdlcicsXHJcbiAgICAgICAgX3htbEh0dHA6IG51bGwsXHJcblxyXG4gICAgICAgIF9jaGVja01lZGlhQ29tcG9uZW50OiBmdW5jdGlvbiAodGFnKSB7XHJcbiAgICAgICAgICAgIGlmICgvSU1HfElGUkFNRXxWSURFT3xBVURJTy9pLnRlc3QodGFnLnRhZ05hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gL0ZJR1VSRS9pLnRlc3QodGFnLnBhcmVudEVsZW1lbnQubm9kZU5hbWUpIHx8IC9GSUdVUkUvaS50ZXN0KHRhZy5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQubm9kZU5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBVcGxvYWQgdGhlIGZpbGUgdG8gdGhlIHNlcnZlci5cclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXBsb2FkVXJsIFVwbG9hZCBzZXJ2ZXIgdXJsXHJcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R8bnVsbH0gdXBsb2FkSGVhZGVyIFJlcXVlc3QgaGVhZGVyXHJcbiAgICAgICAgICogQHBhcmFtIHtGb3JtRGF0YX0gZm9ybURhdGEgRm9ybURhdGEgaW4gYm9keVxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gY2FsbEJhY2sgU3VjY2VzcyBjYWxsIGJhY2sgZnVuY3Rpb25cclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IGVycm9yQ2FsbEJhY2sgRXJyb3IgY2FsbCBiYWNrIGZ1bmN0aW9uXHJcbiAgICAgICAgICogQGV4YW1wbGUgdGhpcy5wbHVnaW5zLmZpbGVNYW5hZ2VyLnVwbG9hZC5jYWxsKHRoaXMsIGltYWdlVXBsb2FkVXJsLCB0aGlzLm9wdGlvbnMuaW1hZ2VVcGxvYWRIZWFkZXIsIGZvcm1EYXRhLCB0aGlzLnBsdWdpbnMuaW1hZ2UuY2FsbEJhY2tfaW1nVXBsb2FkLmJpbmQodGhpcywgaW5mbyksIHRoaXMuZnVuY3Rpb25zLm9uSW1hZ2VVcGxvYWRFcnJvcik7XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdXBsb2FkOiBmdW5jdGlvbiAodXBsb2FkVXJsLCB1cGxvYWRIZWFkZXIsIGZvcm1EYXRhLCBjYWxsQmFjaywgZXJyb3JDYWxsQmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQbHVnaW4gPSB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IHhtbEh0dHAgPSBmaWxlUGx1Z2luLl94bWxIdHRwID0gdGhpcy51dGlsLmdldFhNTEh0dHBSZXF1ZXN0KCk7XHJcblxyXG4gICAgICAgICAgICB4bWxIdHRwLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZpbGVQbHVnaW4uX2NhbGxCYWNrVXBsb2FkLmJpbmQodGhpcywgeG1sSHR0cCwgY2FsbEJhY2ssIGVycm9yQ2FsbEJhY2spO1xyXG4gICAgICAgICAgICB4bWxIdHRwLm9wZW4oJ3Bvc3QnLCB1cGxvYWRVcmwsIHRydWUpO1xyXG4gICAgICAgICAgICBpZih1cGxvYWRIZWFkZXIgIT09IG51bGwgJiYgdHlwZW9mIHVwbG9hZEhlYWRlciA9PT0gJ29iamVjdCcgJiYgdGhpcy5fdy5PYmplY3Qua2V5cyh1cGxvYWRIZWFkZXIpLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBrZXkgaW4gdXBsb2FkSGVhZGVyKXtcclxuICAgICAgICAgICAgICAgICAgICB4bWxIdHRwLnNldFJlcXVlc3RIZWFkZXIoa2V5LCB1cGxvYWRIZWFkZXJba2V5XSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgeG1sSHR0cC5zZW5kKGZvcm1EYXRhKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfY2FsbEJhY2tVcGxvYWQ6IGZ1bmN0aW9uICh4bWxIdHRwLCBjYWxsQmFjaywgZXJyb3JDYWxsQmFjaykge1xyXG4gICAgICAgICAgICBpZiAoeG1sSHR0cC5yZWFkeVN0YXRlID09PSA0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeG1sSHR0cC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxCYWNrKHhtbEh0dHApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1tTVU5FRElUT1IuZmlsZU1hbmFnZXIudXBsb2FkLmNhbGxCYWNrLmZhaWxdIGNhdXNlIDogXCInICsgZS5tZXNzYWdlICsgJ1wiJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUxvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBleGNlcHRpb25cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9ICF4bWxIdHRwLnJlc3BvbnNlVGV4dCA/IHhtbEh0dHAgOiBKU09OLnBhcnNlKHhtbEh0dHAucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVycm9yQ2FsbEJhY2sgIT09ICdmdW5jdGlvbicgfHwgZXJyb3JDYWxsQmFjaygnJywgcmVzLCB0aGlzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSAnW1NVTkVESVRPUi5maWxlTWFuYWdlci51cGxvYWQuc2VydmVyRXhjZXB0aW9uXSBzdGF0dXM6ICcgKyB4bWxIdHRwLnN0YXR1cyArICcsIHJlc3BvbnNlOiAnICsgKHJlcy5lcnJvck1lc3NhZ2UgfHwgeG1sSHR0cC5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZ1bmN0aW9ucy5ub3RpY2VPcGVuKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tlIHRoZSBmaWxlJ3MgaW5mb3JtYXRpb24gYW5kIG1vZGlmeSB0aGUgdGFnIHRoYXQgZG9lcyBub3QgZml0IHRoZSBmb3JtYXQuXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBsdWdpbk5hbWUgUGx1Z2luIG5hbWVcclxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSB0YWdOYW1lcyBUYWcgYXJyYXkgdG8gY2hlY2tcclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHVwbG9hZEV2ZW50SGFuZGxlciBFdmVudCBoYW5kbGVyIHRvIHByb2Nlc3MgdXBkYXRlZCBmaWxlIGluZm8gYWZ0ZXIgY2hlY2tpbmcgKHVzZWQgaW4gXCJzZXRJbmZvXCIpXHJcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kaWZ5SGFuZGxlciBBIGZ1bmN0aW9uIHRvIG1vZGlmeSBhIHRhZyB0aGF0IGRvZXMgbm90IGZpdCB0aGUgZm9ybWF0IChBcmd1bWVudCB2YWx1ZTogVGFnIGVsZW1lbnQpXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSByZXNpemluZyBUcnVlIGlmIHRoZSBwbHVnaW4gaXMgdXNpbmcgYSByZXNpemluZyBtb2R1bGVcclxuICAgICAgICAgKiBAZXhhbXBsZSBcclxuICAgICAgICAgKiBjb25zdCBtb2RpZnlIYW5kbGVyID0gZnVuY3Rpb24gKHRhZykge1xyXG4gICAgICAgICAqICAgICAgaW1hZ2VQbHVnaW4ub25Nb2RpZnlNb2RlLmNhbGwodGhpcywgdGFnLCBudWxsKTtcclxuICAgICAgICAgKiAgICAgIGltYWdlUGx1Z2luLm9wZW5Nb2RpZnkuY2FsbCh0aGlzLCB0cnVlKTtcclxuICAgICAgICAgKiAgICAgIGltYWdlUGx1Z2luLnVwZGF0ZV9pbWFnZS5jYWxsKHRoaXMsIHRydWUsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgKiAgfS5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAqICB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXIuY2hlY2tJbmZvLmNhbGwodGhpcywgJ2ltYWdlJywgWydpbWcnXSwgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZCwgbW9kaWZ5SGFuZGxlciwgdHJ1ZSk7XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2hlY2tJbmZvOiBmdW5jdGlvbiAocGx1Z2luTmFtZSwgdGFnTmFtZXMsIHVwbG9hZEV2ZW50SGFuZGxlciwgbW9kaWZ5SGFuZGxlciwgcmVzaXppbmcpIHtcclxuICAgICAgICAgICAgbGV0IHRhZ3MgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRhZ05hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0YWdzID0gdGFncy5jb25jYXQoW10uc2xpY2UuY2FsbCh0aGlzLmNvbnRleHQuZWxlbWVudC53eXNpd3lnLnF1ZXJ5U2VsZWN0b3JBbGwodGFnTmFtZXNbaV0gKyAnOm5vdChbZGF0YS1zZS1lbWJlZD1cInRydWVcIl0pJykpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZU1hbmFnZXJQbHVnaW4gPSB0aGlzLnBsdWdpbnMuZmlsZU1hbmFnZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHRbcGx1Z2luTmFtZV07XHJcbiAgICAgICAgICAgIGNvbnN0IGluZm9MaXN0ID0gY29udGV4dC5faW5mb0xpc3Q7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldEZpbGVJbmZvID0gZmlsZU1hbmFnZXJQbHVnaW4uc2V0SW5mby5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRhZ3MubGVuZ3RoID09PSBpbmZvTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJlc2V0XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tcG9uZW50c0luZm9SZXNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0YWdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbGVJbmZvKHBsdWdpbk5hbWUsIHRhZ3NbaV0sIHVwbG9hZEV2ZW50SGFuZGxlciwgbnVsbCwgcmVzaXppbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5mb1VwZGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpbmZvTGlzdC5sZW5ndGgsIGluZm87IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmZvID0gaW5mb0xpc3RbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWdzLmZpbHRlcihmdW5jdGlvbiAodCkgeyByZXR1cm4gaW5mby5zcmMgPT09IHQuc3JjICYmIGluZm8uaW5kZXgudG9TdHJpbmcoKSA9PT0gdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXgnKTsgfSkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHBhc3NcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm9VcGRhdGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gY2hlY2tcclxuICAgICAgICAgICAgY29uc3QgX3Jlc2l6ZV9wbHVnaW4gPSByZXNpemluZyA/IHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbiA6ICcnO1xyXG4gICAgICAgICAgICBpZiAocmVzaXppbmcpIHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbiA9IHBsdWdpbk5hbWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUYWdzID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGluZm9JbmRleCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaW5mb0xpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGluZm9JbmRleFtpXSA9IGluZm9MaXN0W2ldLmluZGV4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnRleHQuX191cGRhdGVUYWdzID0gdGFncztcclxuXHJcbiAgICAgICAgICAgIHdoaWxlICh0YWdzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRhZyA9IHRhZ3Muc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQodGFnLCB0aGlzLnV0aWwuaXNNZWRpYUNvbXBvbmVudCkgfHwgIWZpbGVNYW5hZ2VyUGx1Z2luLl9jaGVja01lZGlhQ29tcG9uZW50KHRhZykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFncy5wdXNoKGNvbnRleHQuX2luZm9JbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kaWZ5SGFuZGxlcih0YWcpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGFnLmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRleCcpIHx8IGluZm9JbmRleC5pbmRleE9mKHRhZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXgnKSAqIDEpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYWdzLnB1c2goY29udGV4dC5faW5mb0luZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB0YWcucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWluZGV4Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0RmlsZUluZm8ocGx1Z2luTmFtZSwgdGFnLCB1cGxvYWRFdmVudEhhbmRsZXIsIG51bGwsIHJlc2l6aW5nKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhZ3MucHVzaCh0YWcuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4JykgKiAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGRhdGFJbmRleDsgaSA8IGluZm9MaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhSW5kZXggPSBpbmZvTGlzdFtpXS5pbmRleDtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGFncy5pbmRleE9mKGRhdGFJbmRleCkgPiAtMSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5mb0xpc3Quc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGxvYWRFdmVudEhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHVwbG9hZEV2ZW50SGFuZGxlcihudWxsLCBkYXRhSW5kZXgsICdkZWxldGUnLCBudWxsLCAwLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIGktLTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJlc2l6aW5nKSB0aGlzLmNvbnRleHQucmVzaXppbmcuX3Jlc2l6ZV9wbHVnaW4gPSBfcmVzaXplX3BsdWdpbjtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlIGluZm8gb2JqZWN0IG9mIGZpbGUgYW5kIGFkZCBpdCB0byBcIl9pbmZvTGlzdFwiICh0aGlzLmNvbnRleHRbcGx1Z2luTmFtZV0uX2luZm9MaXN0W10pXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBsdWdpbk5hbWUgUGx1Z2luIG5hbWUgXHJcbiAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFxyXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb258bnVsbH0gdXBsb2FkRXZlbnRIYW5kbGVyIEV2ZW50IGhhbmRsZXIgdG8gcHJvY2VzcyB1cGRhdGVkIGZpbGUgaW5mbyAoY3JlYXRlZCBpbiBzZXRJbmZvKVxyXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bGx9IGZpbGUgXHJcbiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSByZXNpemluZyBUcnVlIGlmIHRoZSBwbHVnaW4gaXMgdXNpbmcgYSByZXNpemluZyBtb2R1bGVcclxuICAgICAgICAgKiBAZXhhbXBsZSBcclxuICAgICAgICAgKiB1cGxvYWRDYWxsQmFjayB7Li4gZmlsZSA9IHsgbmFtZTogZmlsZUxpc3RbaV0ubmFtZSwgc2l6ZTogZmlsZUxpc3RbaV0uc2l6ZSB9O1xyXG4gICAgICAgICAqIHRoaXMucGx1Z2lucy5maWxlTWFuYWdlci5zZXRJbmZvLmNhbGwodGhpcywgJ2ltYWdlJywgb0ltZywgdGhpcy5mdW5jdGlvbnMub25JbWFnZVVwbG9hZCwgZmlsZSwgdHJ1ZSk7XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2V0SW5mbzogZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGVsZW1lbnQsIHVwbG9hZEV2ZW50SGFuZGxlciwgZmlsZSwgcmVzaXppbmcpIHtcclxuICAgICAgICAgICAgY29uc3QgX3Jlc2l6ZV9wbHVnaW4gPSByZXNpemluZyA/IHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbiA6ICcnO1xyXG4gICAgICAgICAgICBpZiAocmVzaXppbmcpIHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbiA9IHBsdWdpbk5hbWU7XHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgcGxndWluID0gdGhpcy5wbHVnaW5zW3BsdWdpbk5hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0W3BsdWdpbk5hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCBpbmZvTGlzdCA9IGNvbnRleHQuX2luZm9MaXN0O1xyXG4gICAgICAgICAgICBsZXQgZGF0YUluZGV4ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaW5kZXgnKTtcclxuICAgICAgICAgICAgbGV0IGluZm8gPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSAnJztcclxuXHJcbiAgICAgICAgICAgIGlmICghZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgZmlsZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWZpbGUtbmFtZScpIHx8ICh0eXBlb2YgZWxlbWVudC5zcmMgPT09ICdzdHJpbmcnID8gZWxlbWVudC5zcmMuc3BsaXQoJy8nKS5wb3AoKSA6ICcnKSxcclxuICAgICAgICAgICAgICAgICAgICAnc2l6ZSc6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWZpbGUtc2l6ZScpIHx8IDBcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAvLyBjcmVhdGVcclxuICAgICAgICAgICAgaWYgKCFkYXRhSW5kZXggfHwgdGhpcy5fY29tcG9uZW50c0luZm9Jbml0KSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZSA9ICdjcmVhdGUnO1xyXG4gICAgICAgICAgICAgICAgZGF0YUluZGV4ID0gY29udGV4dC5faW5mb0luZGV4Kys7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWluZGV4JywgZGF0YUluZGV4KTtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWZpbGUtbmFtZScsIGZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1maWxlLXNpemUnLCBmaWxlLnNpemUpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpbmZvID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNyYzogZWxlbWVudC5zcmMsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGRhdGFJbmRleCAqIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IGZpbGUuc2l6ZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaW5mb0xpc3QucHVzaChpbmZvKTtcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gdXBkYXRlXHJcbiAgICAgICAgICAgICAgICBzdGF0ZSA9ICd1cGRhdGUnO1xyXG4gICAgICAgICAgICAgICAgZGF0YUluZGV4ICo9IDE7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpbmZvTGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhSW5kZXggPT09IGluZm9MaXN0W2ldLmluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZm8gPSBpbmZvTGlzdFtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhSW5kZXggPSBjb250ZXh0Ll9pbmZvSW5kZXgrKztcclxuICAgICAgICAgICAgICAgICAgICBpbmZvID0geyBpbmRleDogZGF0YUluZGV4IH07XHJcbiAgICAgICAgICAgICAgICAgICAgaW5mb0xpc3QucHVzaChpbmZvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaW5mby5zcmMgPSBlbGVtZW50LnNyYztcclxuICAgICAgICAgICAgICAgIGluZm8ubmFtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1maWxlLW5hbWVcIik7XHJcbiAgICAgICAgICAgICAgICBpbmZvLnNpemUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtZmlsZS1zaXplXCIpICogMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgIC8vIG1ldGhvZCBiaW5kXHJcbiAgICAgICAgICAgIGluZm8uZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGluZm8uZGVsZXRlID0gcGxndWluLmRlc3Ryb3kuYmluZCh0aGlzLCBlbGVtZW50KTtcclxuICAgICAgICAgICAgaW5mby5zZWxlY3QgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3cuc2V0VGltZW91dChwbGd1aW4uc2VsZWN0LmJpbmQodGhpcywgZWxlbWVudCkpO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcywgZWxlbWVudCk7XHJcbiAgICBcclxuICAgICAgICAgICAgaWYgKHJlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuZ2V0QXR0cmlidXRlKCdvcmlnaW4tc2l6ZScpICYmIGVsZW1lbnQubmF0dXJhbFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ29yaWdpbi1zaXplJywgZWxlbWVudC5uYXR1cmFsV2lkdGggKyAnLCcgKyBlbGVtZW50Lm5hdHVyYWxIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgdGhpcy51dGlsLmlzTWVkaWFDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdmVyID0gdGhpcy51dGlsLmdldFBhcmVudEVsZW1lbnQoZWxlbWVudCwgJ0ZJR1VSRScpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHcgPSB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9nZXRTaXplWC5jYWxsKHRoaXMsIGNvbnRleHQsIGVsZW1lbnQsIGNvdmVyLCBjb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGggPSB0aGlzLnBsdWdpbnMucmVzaXppbmcuX21vZHVsZV9nZXRTaXplWS5jYWxsKHRoaXMsIGNvbnRleHQsIGVsZW1lbnQsIGNvdmVyLCBjb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbicsIHcgKyAnLCcgKyBoKTtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1zaXplJywgdyArICcsJyArIGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LnN0eWxlLndpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zaXplJykgfHwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZ2luJykgfHwgJycpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGxndWluLm9uTW9kaWZ5TW9kZS5jYWxsKHRoaXMsIGVsZW1lbnQsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBsZ3Vpbi5hcHBseVNpemUuY2FsbCh0aGlzLCBzaXplWzBdLCBzaXplWzFdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZXNpemluZy5fcmVzaXplX3BsdWdpbiA9IF9yZXNpemVfcGx1Z2luO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHVwbG9hZEV2ZW50SGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykgdXBsb2FkRXZlbnRIYW5kbGVyKGVsZW1lbnQsIGRhdGFJbmRleCwgc3RhdGUsIGluZm8sIC0tY29udGV4dC5fdXBsb2FkRmlsZUxlbmd0aCA8IDAgPyAwIDogY29udGV4dC5fdXBsb2FkRmlsZUxlbmd0aCwgdGhpcyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIERlbGV0ZSBpbmZvIG9iamVjdCBhdCBcIl9pbmZvTGlzdFwiXHJcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBsdWdpbk5hbWUgUGx1Z2luIG5hbWUgXHJcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IGluZGV4IGluZGV4IG9mIGluZm8gb2JqZWN0ICh0aGlzLmNvbnRleHRbcGx1Z2luTmFtZV0uX2luZm9MaXN0W10uaW5kZXgpXHJcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbnxudWxsfSB1cGxvYWRFdmVudEhhbmRsZXIgRXZlbnQgaGFuZGxlciB0byBwcm9jZXNzIHVwZGF0ZWQgZmlsZSBpbmZvIChjcmVhdGVkIGluIHNldEluZm8pXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGVsZXRlSW5mbzogZnVuY3Rpb24gKHBsdWdpbk5hbWUsIGluZGV4LCB1cGxvYWRFdmVudEhhbmRsZXIpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZm9MaXN0ID0gdGhpcy5jb250ZXh0W3BsdWdpbk5hbWVdLl9pbmZvTGlzdDtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGluZm9MaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBpbmZvTGlzdFtpXS5pbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlzdC5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdXBsb2FkRXZlbnRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB1cGxvYWRFdmVudEhhbmRsZXIobnVsbCwgaW5kZXgsICdkZWxldGUnLCBudWxsLCAwLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBSZXNldCBpbmZvIG9iamVjdCBhbmQgXCJfaW5mb0xpc3QgPSBbXVwiLCBcIl9pbmZvSW5kZXggPSAwXCJcclxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZSBQbHVnaW4gbmFtZSBcclxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufG51bGx9IHVwbG9hZEV2ZW50SGFuZGxlciBFdmVudCBoYW5kbGVyIHRvIHByb2Nlc3MgdXBkYXRlZCBmaWxlIGluZm8gKGNyZWF0ZWQgaW4gc2V0SW5mbylcclxuICAgICAgICAgKi9cclxuICAgICAgICByZXNldEluZm86IGZ1bmN0aW9uIChwbHVnaW5OYW1lLCB1cGxvYWRFdmVudEhhbmRsZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dFtwbHVnaW5OYW1lXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdXBsb2FkRXZlbnRIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmZvTGlzdCA9IGNvbnRleHQuX2luZm9MaXN0O1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGluZm9MaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkRXZlbnRIYW5kbGVyKG51bGwsIGluZm9MaXN0W2ldLmluZGV4LCAnZGVsZXRlJywgbnVsbCwgMCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRleHQuX2luZm9MaXN0ID0gW107XHJcbiAgICAgICAgICAgIGNvbnRleHQuX2luZm9JbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodHlwZW9mIG5vR2xvYmFsID09PSB0eXBlb2YgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKCF3aW5kb3cuU1VORURJVE9SX01PRFVMRVMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ1NVTkVESVRPUl9NT0RVTEVTJywge1xyXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZToge31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNVTkVESVRPUl9NT0RVTEVTLCAnZmlsZU1hbmFnZXInLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgdmFsdWU6IGZpbGVNYW5hZ2VyXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbGVNYW5hZ2VyO1xyXG59KSk7Il0sInNvdXJjZVJvb3QiOiIifQ==