ibp-max 3.0.9 → 3.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/onesearch.js +2 -2
  2. package/package.json +1 -1
package/onesearch.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var l=t();for(var a in l)("object"==typeof exports?exports:e)[a]=l[a]}}(self,(()=>(()=>{var e={803:()=>{var e;(e=jQuery).fn.extend({OneSearch:function(t){var l=e.extend({ServiceUrl:"",OneSearchName:"",OneSearchDS:null,MinCharLimit:3,EnableCurrentLocation:!1,EnablePreList:!1,AutoSelectFirstItem:!1,ResultLimit:10,EnableTouch:!1,DataSource:null,DataSourceControl:null,ContainerCss:"",ItemCss:"",HighlightItemCss:"",Region:"US",Locale:"NONE",HelpText:"",AnimatePlaceholderText:!1,MultiSelect:!1,MultiSelectBoxId:"",MultiSelectShowHelpText:!0,MultiKeywordDelimiter:"",LoadingImageUrl:"",ParentContainer:"",BeforeCall:null,AfterCall:null,OnSuccess:null,OnError:null,OnSelect:null,OnTextChange:null,OnSearch:null,OnIncrementalSearch:null,OnMultiSelectRemove:null,SearchMode:"Database",TestMode:!1,StickyMode:!1,EnableCategoryView:!1},t),a=null,n=null,r=null,o=null,s="",c="",d=null,u=null,h=[],p=0,m=!1,v=!1;return this.each((function(){!function(i){if(l.StickyMode&&!l.TestMode&&(l.TestMode=!0),a=i,l.AutoSelectFirstItem&&(n=e('input[id="'+e(a).attr("id")+'_AUTO_ITEM"]')),e(a).attr("autocomplete","nope"),e(a).attr("name",e(a).attr("id").replace(/\$/gi,"_")+(new Date).valueOf()),window.onpopstate=function(t){e(a).attr("name",e(a).attr("id").replace(/\$/gi,"_")+(new Date).valueOf())},r=e("<div>").attr("id",e(a).attr("id")+"_OneSearch").css("position",l.EnableTouch?"relative":"absolute").css("top",b(e(a))).css("width",x(e(a))).css("display","none").addClass(l.ContainerCss).html(l.HelpText),""!=l.ParentContainer?e("#"+l.ParentContainer).append(r):r.insertAfter(e(a)),e(a).closest("div").click((function(t){"block"==e(a).css("display")&&""!=e(a).html()||"CloseArea"!=t.target.className&&(l.EnablePreList||setTimeout((function(){e(a).focus()}),500))})),l.MultiSelect&&(""!=l.MultiSelectBoxId&&(o=e("#"+l.MultiSelectBoxId)),null!=o&&""!=l.MultiSelectBoxCss&&o.addClass(l.MultiSelectBoxCss),l.MultiSelect&&e('input[type="hidden"][id^="'+e(a).attr("id")+'"]').each((function(){if(""!=e(this).val()){var t={},l=e(this).attr("id").split("_");t.rt=l[l.length-2],t.n=l[l.length-1],"True"==e(this).attr("data-label-lookup")?S(t.rt+"|"+t.n+"::"+e(this).val(),(function(l){var n="",i="";Array.isArray(l)&&(n=l.map((function(e){return e.l})).join(";"),i=l.map((function(e){return e.k})).join(";")),T(t,i,!0,n),e(a).val("")})):T(t,e(this).val(),!0)}}))),l.EnableCurrentLocation){var d=e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLAT"]').val(),g=e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLONG"]').val(),O=e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RDS"]').val();void 0!==d&&void 0!==g&&void 0!==O&&""!=d&&""!=g&&""!=O&&(v=!0)}e(a).keydown((function(t){switch(t.keyCode){case 9:case 13:l.AutoSelectFirstItem&&e(a).val().length>0?(p>0?C():y(0,!1,!0),m=!1):(C(),m=!1);break;case 38:_(-1);break;case 39:l.AutoSelectFirstItem&&(y(0,!1,!0),e(r).hide(),e(n).val(""));break;case 40:_(1);break;case 27:e(r).hide(),u=null,h=[],p=0}})),e(a).keypress((function(t){parseInt(r.css("width"))!=x(e(a))&&r.css("width",x(e(a))),parseInt(r.css("top"))!=b(e(a))&&r.css("top",b(e(a))),13==t.keyCode&&t.preventDefault()})),e(a).keyup((function(t){27!=t.keyCode&&(8!=t.keyCode&&46!=t.keyCode&&88!=t.keyCode&&86!=t.keyCode||0!=e(a).val().length||(T(null,null),l.AutoSelectFirstItem&&n.val("")),13==t.keyCode&&e(a).val().length>0&&!m?l.OnSearch&&l.OnSearch():13==t.keyCode&&e(a).val().length>0&&l.AutoSelectFirstItem?p>0?C():y(0,!1,!0):l.OnIncrementalSearch&&l.OnIncrementalSearch(),e(a).val().length>=l.MinCharLimit||l.EnablePreList||l.EnableCurrentLocation?e(r).show():e(r).hide(),13==t.keyCode&&e(r).hide(),e(a).val().indexOf(s)<0&&e(r).html(""),8!=t.keyCode&&46!=t.keyCode||(s="",c=""),s!=e(a).val()&&(l.OnTextChange&&l.OnTextChange(e(a).val()),T(null,null),s=e(a).val(),"none"!=e(r).css("display")&&(""!=l.LoadingImageUrl&&e(a).val().length>=l.MinCharLimit&&e(r).html('<img src="'+l.LoadingImageUrl+'" />'),setTimeout((function(){S()}),500))))})),e(a).focus((function(){if(parseInt(r.css("width"))!=x(e(a))&&r.css("width",x(e(a))),parseInt(r.css("top"))!=b(e(a))&&r.css("top",b(e(a))),l.MultiSelect)if(o.find("a.agora-onesearch-multi-sel-item-close").length>0){var n=e("<div>").html(e(o.html()));e(n).find("a.agora-onesearch-multi-sel-item-close").each((function(){e(this).attr("onclick","javascript:$('#"+t.MultiSelectBoxId+" #"+e(this).attr("id")+"').trigger('click')")})),l.MultiSelectShowHelpText?l.HelpText='<div style="padding:7px"><font style="color:red">You have already selected</font>'+(l.StickyMode?'<a class="CloseArea" href="javascript:void(0);" title="Click here to hide selected filters." onclick="$(\'#'+e(a).attr("id")+"_OneSearch').hide();\">Close</a>":"")+'<hr style="margin:0px 0px 7px 0px" />'+n.html()+"</div>":l.EnableCurrentLocation&&e(n).append(f())}else l.HelpText="",l.EnableCurrentLocation&&(0==e(r).find("[data-location-search]").length&&e(r).append(f()),e(r).show());l.EnablePreList?(S(),e(r).show()):!l.MultiSelect&&l.EnableCurrentLocation?(0==e(r).find("[data-location-search]").length&&e(r).append(f()),console.log(f()),e(r).show()):""!=l.HelpText&&""==e(a).val()&&(e(r).html(l.HelpText),parseInt(r.css("width"))!=x(e(a))&&r.css("width",x(e(a))),parseInt(r.css("top"))!=b(e(a))&&r.css("top",b(e(a))),e(r).show())})),e(a).blur((function(){l.AutoSelectFirstItem&&e(a).val().length>0&&!l.MultiSelect&&setTimeout((function(){var t=e(a).data("is-manual-select");void 0!==t&&0!=t||y(0,!0,!0),e(a).data("is-manual-select",!1)}),50),setTimeout((function(){l.TestMode?(e(r).find("[data-location-search]").length>0&&l.TestMode||l.StickyMode&&0==e(r).find("div.agora-onesearch-multi-sel-item-cont").length)&&(e(r).html(""),e(r).hide(),e(r).parent().removeClass("is-dirty")):(e(r).html(""),e(r).hide(),0==e(a).val().length&&e(r).parent().removeClass("is-dirty"))}),300)})),S(),1==l.AnimatePlaceholderText&&""==e(a).val()&&AnimatePlaceholderText(e(a),"",0)}(e(this))}));function f(){return l.EnableCurrentLocation&&(document.location.protocol.toLowerCase().indexOf("https")>-1||document.location.hostname.indexOf("localhost")>-1)?e("<a>").html('<i class="aga aga-location"></i>'+e(a).attr("EnableCurrentLocationLabel")).css("display","block").css("width","100%").css("padding","3px").css("color","red").attr("idx",-1).addClass("get-my-direction").attr("data-location-search","").mouseover((function(){e(this).css("background-color:red"),e(this).addClass(l.HighlightItemCss)})).click((function(){g(e(this).attr("idx"))})).on("tap",(function(){g(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(l.HighlightItemCss)})):null}function g(t){navigator.geolocation&&navigator.geolocation.getCurrentPosition((function(t){e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLAT"]').val(t.coords.latitude),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLONG"]').val(t.coords.longitude),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RDS"]').val(null!=e(a).attr("DefaultSearchRadius")&&"0"!=e(a).attr("DefaultSearchRadius")?e(a).attr("DefaultSearchRadius"):"5"),v=!0,l.OnSelect&&l.OnSelect({k:t.coords.latitude+"|"+t.coords.longitude,n:"IDCLATITUDE|IDCLONGITUDE",rt:"LOCATION"}),l.OnSuccess&&l.OnSuccess()})),y(t)}function S(t,o){(c!=e(a).val()||l.EnablePreList||null!=t)&&(null!=d&&d.abort(),e(a).val().length<l.MinCharLimit?s="":c=e(a).val(),null==t&&!l.EnablePreList&&e(a).val().length<l.MinCharLimit||(l.AutoSelectFirstItem&&(e(n).val(""),e(a).data("is-manual-select",!1)),_searchParam=e(a).val().length<l.MinCharLimit?"":e(a).val(),_searchKeyword=(e(a).val().length<l.MinCharLimit?"":e(a).val().replace(/#/g,"%23"))+"&t="+(new Date).getTime(),null!=t&&t.length>0&&(_searchParam=_searchKeyword="LOOKUP_LABEL::"+t),d=e.ajax({type:"POST",url:l.ServiceUrl+"?Keyword="+_searchKeyword,data:{Keyword:_searchParam,SearchMode:l.SearchMode,OneSearchName:l.OneSearchName,Region:l.Region,Locale:l.Locale,AdditionalWhere:e(a).attr("AdditionalWhere")},dataType:"json",success:function(n){if(null==t||null==o)if(u=n,p=0,e(r).html(""),null!=n&&0!=n.length){var s="",c="",d=null,h="",m="";for(i=0;i<n.length;i++){if(s=M(n[i].l,e(a).val()),null!=(c=L(l.OneSearchDS,n[i].rt,n[i].n))&&null!=c.ItemTemplate&&""!=c.ItemTemplate)s=(s=c.ItemTemplate.replace("{$l}",M(n[i].l,e(a).val()))).replace("{$d}",n[i].d);else if(null!=c&&c.ItemTemplates.length>0)for(j=0;j<c.ItemTemplates.length;j++)c.ItemTemplates[j].Locale==l.Locale&&(s=(s=c.ItemTemplates[j].Template.replace("{$l}",M(n[i].l,e(a).val()))).Template.replace("{$d}",n[i].d));d=e("<a>").html(s).css("display","block").css("width","100%").css("padding","3px").css("text-decoration","none").css("color","black").attr("idx",i).mouseover((function(){e(this).addClass(l.HighlightItemCss)})).mousedown((function(){e(a).data("is-manual-select",!0)})).click((function(){y(e(this).attr("idx"))})).on("tap",(function(){e(a).data("is-manual-select",!0),y(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(l.HighlightItemCss)})),0==i&&l.AutoSelectFirstItem&&O(i),l.EnableCategoryView?(m!=n[i].g&&((h=e("<div>").addClass("OneSearchBox-category-"+n[i].g)).append(e("<span>").html(n[i].g)),m=n[i].g),h.append(d),e(r).append(h),0==i&&e(r)[i].className.includes("OneSearchBox-")&&(e(r)[i].className=e(r)[i].className.replace(/\bOneSearchBox-[A-Za-z]*\b/g,"")),e(r).addClass("OneSearchBox-"+n[i].g)):e(r).append(d)}}else e(r).hide();else o(n)},statusCode:{404:function(){console.log("Service (agoraOneSearch) not found!")}}})))}function C(){if(!(null==u||u.length<p-1||p<=0)){var t,n="",i=L(l.OneSearchDS,u[p-1].rt,u[p-1].n);null!=i&&""!=i.ItemTemplate&&(n=null!=i.Selector&&null!=i.Selector&&"k"==i.Selector?u[p-1].k:u[p-1].l),t=u[p-1].l,l.MultiSelect?e(a).val(""):e(a).val(t),s=e(a).val(),T(u[p-1],n),l.AutoSelectFirstItem&&O(p-1),l.OnSelect&&l.OnSelect(u[p-1]),p=0,l.TestMode||e(r).html("")}}function y(t,i,o){var c="",d="";if(null!=i&&null!=i||(i=!1),null!=o&&null!=o||(o=!1),void 0!==u&&null!=u&&0!=u.length){var h=L(l.OneSearchDS,u[t].rt,u[t].n);null!=h&&""!=h.ItemTemplate&&(d=null!=h.Selector&&null!=h.Selector&&"k"==h.Selector?u[t].k:u[t].l),c=u[t].l,1!=o||c.toLowerCase().startsWith(e(a).val().toLowerCase())?(l.MultiSelect?(e(a).val(""),l.AutoSelectFirstItem&&e(n).val("")):(null!=h&&1!=h.SkipSelect?e(a).val(c):e(a).val(""),l.AutoSelectFirstItem&&e(n).val("")),s=e(a).val(),t>=0&&v&&(e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLAT"]').val(""),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RLONG"]').val(""),e('input[type="hidden"][id="'+e(a).attr("id")+'_GPS_RDS"]').val(""),e("#draw_search").click()),null!=h&&1!=h.SkipSelect&&T(u[t],d),l.OnSelect&&l.OnSelect(u[t]),l.TestMode||i||e(r).html(""),l.MultiSelect&&(l.EnablePreList||setTimeout((function(){e(a).focus()}),200))):e(n).val("")}}function O(t){var i="";if(null!=e(a).val()&&""!=e(a).val()&&void 0!==u&&null!=u&&0!=u.length){var r=L(l.OneSearchDS,u[t].rt,u[t].n);if(null!=r&&""!=r.ItemTemplate&&(null!=r.Selector&&null!=r.Selector&&"k"==r.Selector?u[t].k:u[t].l),(i=u[t].l).toLowerCase().replace(/\,/g,"").startsWith(e(a).val().toLowerCase().replace(/\,/g,""))){var o=new RegExp(e(a).val(),"ig");e(n).val(i.replace(o,e(a).val())),s=e(a).val()}else e(n).val("")}}function T(t,n,r,s){if(l.MultiSelect){if(null==t)return;var c=e("#"+e(a).attr("id")+"_"+t.rt+"_"+t.n),d=u=n.split(";");if(null!=s&&null!=s)var u=s.split(";");var h=L(l.OneSearchDS,t.rt,t.n);for(i=0;i<u.length&&null!=h;i++)if(!(u[i].length<2)&&(-1==(";"+c.val().toLowerCase()+";").indexOf(";"+u[i].toLowerCase()+";")||r)){r||c.val(c.val()+";"+u[i]);var p=e("<div>").addClass("agora-onesearch-multi-sel-item-cont").attr("id","multiitem"+e(a).attr("id")+"_"+t.rt+"_"+t.n+u[i].replace(/\ /g,"_").replace(/\-/g,"_").replace(/[^A-z0-9]/g,"_")).append(e("<a>").addClass("agora-onesearch-multi-sel-item-close").attr("title","Click here to hide this area filter.").attr("id","multiitem_close_"+e(a).attr("id")+"_"+t.rt+"_"+t.n+u[i].replace(/\ /g,"_").replace(/\-/g,"_").replace(/[^A-z0-9]/g,"_")).attr("val",d[i]).html('<i class="aga aga-close"></i>').click((function(){I(e(this),t,e(this).attr("val"))}))).append(e("<a>").html(h.MultiItemTemplate.replace("{$l}",null!=t&&null!=t.l?t.l:u[i]).replace("{$d}",null!=t&&null!=t.d?t.d:u[i])));o.append(p)}!r&&l.OnMultiSelectRemove&&l.OnMultiSelectRemove()}else{if(e('input[type="hidden"][id^="'+e(a).attr("id")+'"]').each((function(){e(this).val("")})),null==t)return;e("#"+e(a).attr("id")+"_"+t.rt+"_"+t.n).val(n)}}function I(t,n,i){var o=e("#"+e(a).attr("id")+"_"+n.rt+"_"+n.n);0!=o.val().indexOf(";")&&o.val(";"+o.val()),o.val(o.val().replace(";"+i,"")),e(t).parent().remove(),""!=o.val()&&0!=e(r).find("div.agora-onesearch-multi-sel-item-cont").length||(e(r).html(""),e(r).hide()),l.OnMultiSelectRemove&&l.OnMultiSelectRemove()}function _(t){m=!0,t>0?p<e(r).find("a").length&&p++:p>1&&p--,e(r).find("a").each((function(){e(this).removeClass(l.HighlightItemCss)})),e(r).find(l.EnableCategoryView?"a[idx="+p+"]":"a:nth-child("+p+")").addClass(l.HighlightItemCss)}function x(e){if(null==e||0==e.length)return 0;var t=e.width();return t+=parseInt(e.css("padding-left"),10)+parseInt(e.css("padding-right"),10),t+=parseInt(e.css("borderLeftWidth"),10)+parseInt(e.css("borderRightWidth"),10),""!=l.ParentContainer&&(t+=e.offset().left),t}function b(e){if(null==e||0==e.length)return 0;var t=e.height();return t+=parseInt(e.css("padding-top"),10)+parseInt(e.css("padding-bottom"),10),t+=parseInt(e.css("borderTopWidth"),10)+parseInt(e.css("borderBottomWidth"),10),t+=e.position().top,""!=l.ParentContainer&&(t+=e.offset().top),t}function L(e,t,l){if(null!=h[t+"_"+l])return h[t+"_"+l];for(k=0;k<e.RecordTypes.length;k++)for(j=0;e.RecordTypes[k].Name==t&&j<e.RecordTypes[k].Fields.length;j++)if(e.RecordTypes[k].Fields[j].Name==l)return h[t+"_"+l]=e.RecordTypes[k].Fields[j],e.RecordTypes[k].Fields[j];return null}function M(e,t){return e.replace(new RegExp("("+function(e){return(e+"").replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g,"\\$1")}(t)+")","gi"),"<strong>$1</strong>")}}})}},t={};function l(a){var n=t[a];if(void 0!==n)return n.exports;var i=t[a]={exports:{}};return e[a](i,i.exports,l),i.exports}l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{for(var a in t)l.o(t,a)&&!l.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};return(()=>{"use strict";l.r(a);l(803)})(),a})()));
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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c291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi4vLi4vQWdvcmEgNC4wL0lkY0dsb2JhbC5BZ29yYS5KYXZhU2NyaXB0LlBsdWdJbi9NYXhPbmVTZWFyY2guanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Il0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSB7XG5cdFx0dmFyIGEgPSBmYWN0b3J5KCk7XG5cdFx0Zm9yKHZhciBpIGluIGEpICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xuXHR9XG59KShzZWxmLCAoKSA9PiB7XG5yZXR1cm4gIiwi77u/KGZ1bmN0aW9uICgkKSB7XHJcblxyXG4gICAgLy9BdHRhY2ggdGhpcyBuZXcgbWV0aG9kIHRvIGpRdWVyeVxyXG4gICAgJC5mbi5leHRlbmQoe1xyXG5cclxuICAgICAgICAvL1RoaXMgaXMgd2hlcmUgeW91IHdyaXRlIHlvdXIgcGx1Z2luJ3MgbmFtZVxyXG4gICAgICAgIE9uZVNlYXJjaDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuXHJcbiAgICAgICAgICAgIC8vU2V0IHRoZSBkZWZhdWx0IHZhbHVlcywgdXNlIGNvbW1hIHRvIHNlcGFyYXRlIHRoZSBzZXR0aW5ncywgZXhhbXBsZTpcclxuICAgICAgICAgICAgdmFyIF9kZWZhdWx0cyA9IHtcclxuICAgICAgICAgICAgICAgIFNlcnZpY2VVcmw6ICcnLFxyXG4gICAgICAgICAgICAgICAgT25lU2VhcmNoTmFtZTogJycsXHJcbiAgICAgICAgICAgICAgICBPbmVTZWFyY2hEUzogbnVsbCxcclxuICAgICAgICAgICAgICAgIE1pbkNoYXJMaW1pdDogMyxcclxuICAgICAgICAgICAgICAgIEVuYWJsZUN1cnJlbnRMb2NhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBFbmFibGVQcmVMaXN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIEF1dG9TZWxlY3RGaXJzdEl0ZW06IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgUmVzdWx0TGltaXQ6IDEwLFxyXG4gICAgICAgICAgICAgICAgRW5hYmxlVG91Y2g6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgRGF0YVNvdXJjZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIERhdGFTb3VyY2VDb250cm9sOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgQ29udGFpbmVyQ3NzOiAnJyxcclxuICAgICAgICAgICAgICAgIEl0ZW1Dc3M6ICcnLFxyXG4gICAgICAgICAgICAgICAgSGlnaGxpZ2h0SXRlbUNzczogJycsXHJcbiAgICAgICAgICAgICAgICBSZWdpb246ICdVUycsXHJcbiAgICAgICAgICAgICAgICBMb2NhbGU6ICdOT05FJyxcclxuICAgICAgICAgICAgICAgIEhlbHBUZXh0OiAnJyxcclxuICAgICAgICAgICAgICAgIEFuaW1hdGVQbGFjZWhvbGRlclRleHQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgTXVsdGlTZWxlY3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgTXVsdGlTZWxlY3RCb3hJZDogJycsXHJcbiAgICAgICAgICAgICAgICBNdWx0aVNlbGVjdFNob3dIZWxwVGV4dDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIE11bHRpS2V5d29yZERlbGltaXRlcjogJycsXHJcbiAgICAgICAgICAgICAgICBMb2FkaW5nSW1hZ2VVcmw6ICcnLFxyXG4gICAgICAgICAgICAgICAgUGFyZW50Q29udGFpbmVyOiAnJyxcclxuICAgICAgICAgICAgICAgIEJlZm9yZUNhbGw6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBBZnRlckNhbGw6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPblN1Y2Nlc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPbkVycm9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgT25TZWxlY3Q6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPblRleHRDaGFuZ2U6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPblNlYXJjaDogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uSW5jcmVtZW50YWxTZWFyY2g6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPbk11bHRpU2VsZWN0UmVtb3ZlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgU2VhcmNoTW9kZTogJ0RhdGFiYXNlJywgLy8gQ2FjaGUsIERhdGFiYXNlLCBTbWFydFxyXG4gICAgICAgICAgICAgICAgVGVzdE1vZGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgU3RpY2t5TW9kZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBFbmFibGVDYXRlZ29yeVZpZXc6IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBfb3B0aW9ucyA9ICQuZXh0ZW5kKF9kZWZhdWx0cywgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHZhciBfdGFyZ2V0Q29udHJvbCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfdGFyZ2V0QXV0b0NvbnRyb2wgPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgX29uZVNlYXJjaEJveCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfTXVsdGlTZWxlY3RCb3ggPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgdmFyIF9sYXN0S2V5d29yZCA9ICcnO1xyXG4gICAgICAgICAgICB2YXIgX2xhc3RTZWFyY2h3b3JkID0gJyc7XHJcblxyXG4gICAgICAgICAgICB2YXIgX3JlcXVlc3QgPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgX3Jlc3Bvc2VDYWNoZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfaXRlbVRlcGxhdGVDYWNoZSA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgX2hpZ2hsaWdodElkeCA9IDA7XHJcblxyXG4gICAgICAgICAgICB2YXIgX2lzT25BcnJvd1NlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgX2lzTG9jYXRpb25TZXJhY2hFbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAvL0l0ZXJhdGUgb3ZlciB0aGUgY3VycmVudCBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50c1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIEluaXQoJCh0aGlzKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gSW5pdChvYmopIHtcclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5TdGlja3lNb2RlICYmICFfb3B0aW9ucy5UZXN0TW9kZSkgX29wdGlvbnMuVGVzdE1vZGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIF90YXJnZXRDb250cm9sID0gb2JqO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RhcmdldEF1dG9Db250cm9sID0gJCgnaW5wdXRbaWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfQVVUT19JVEVNXCJdJylcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBkaXNhYmxlIGJyb3dzZXIgYXV0b2NvbXBsZXRlIG9uIGlucHV0XHJcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TZWN1cmluZ195b3VyX3NpdGUvVHVybmluZ19vZmZfZm9ybV9hdXRvY29tcGxldGlvblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignYXV0b2NvbXBsZXRlJywgJ25vcGUnKTtcclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ25hbWUnLCAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpLnJlcGxhY2UoL1xcJC9naSwgJ18nKSArIChuZXcgRGF0ZSgpKS52YWx1ZU9mKCkpO1xyXG4gICAgICAgICAgICAgICAgd2luZG93Lm9ucG9wc3RhdGUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5hdHRyKCduYW1lJywgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKS5yZXBsYWNlKC9cXCQvZ2ksICdfJykgKyAobmV3IERhdGUoKSkudmFsdWVPZigpKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBfb25lU2VhcmNoQm94ID0gJCgnPGRpdj4nKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcsICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX09uZVNlYXJjaCcpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNzcygncG9zaXRpb24nLCAoX29wdGlvbnMuRW5hYmxlVG91Y2ggPyAncmVsYXRpdmUnIDogJ2Fic29sdXRlJykpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNzcygndG9wJywgZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKVxyXG4gICAgICAgICAgICAgICAgICAgIC5jc3MoJ3dpZHRoJywgZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNzcygnZGlzcGxheScsICdub25lJylcclxuICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoX29wdGlvbnMuQ29udGFpbmVyQ3NzKVxyXG4gICAgICAgICAgICAgICAgICAgIC5odG1sKF9vcHRpb25zLkhlbHBUZXh0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuUGFyZW50Q29udGFpbmVyICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBfb3B0aW9ucy5QYXJlbnRDb250YWluZXIpLmFwcGVuZChfb25lU2VhcmNoQm94KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5pbnNlcnRBZnRlcigkKF90YXJnZXRDb250cm9sKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuY2xvc2VzdCgnZGl2JykuY2xpY2soZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkuY3NzKCdkaXNwbGF5JykgPT0gJ2Jsb2NrJyAmJiAkKF90YXJnZXRDb250cm9sKS5odG1sKCkgIT0gJycpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuY2xhc3NOYW1lID09ICdDbG9zZUFyZWEnKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgLy9NZGxSZWxvYWRDb250cm9sU3RhdGUoJCh0aGlzKSwgJCh0aGlzKS5jbG9zZXN0KCdbZGF0YS1zZWFyY2hdJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghX29wdGlvbnMuRW5hYmxlUHJlTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0Qm94SWQgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX011bHRpU2VsZWN0Qm94ID0gJCgnIycgKyBfb3B0aW9ucy5NdWx0aVNlbGVjdEJveElkKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX011bHRpU2VsZWN0Qm94ICE9IG51bGwgJiYgX29wdGlvbnMuTXVsdGlTZWxlY3RCb3hDc3MgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX011bHRpU2VsZWN0Qm94LmFkZENsYXNzKF9vcHRpb25zLk11bHRpU2VsZWN0Qm94Q3NzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlbG9hZE11bHRpU2VsZWN0T25Mb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy9jaGVjayBpcyBsb2NhdGlvbiBzZWFyY2ggZW5hYmxlZFxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBsYXQgPSAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STEFUXCJdJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxuZyA9ICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JMT05HXCJdJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJkcyA9ICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JEU1wiXScpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGxhdCkgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIChsbmcpICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiAocmRzKSAhPSAndW5kZWZpbmVkJyAmJiBsYXQgIT0gJycgJiYgbG5nICE9ICcnICYmIHJkcyAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmtleWRvd24oZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGUua2V5Q29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDkgLyogdGFiICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzIC8qIGVudGVyICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0gJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaGlnaGxpZ2h0SWR4ID4gMCkgc2VsZWN0SGlnaGxpZ2h0ZWRJdGVtKCk7IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKDAsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2lzT25BcnJvd1NlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RIaWdobGlnaHRlZEl0ZW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXNPbkFycm93U2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FzZSAzNyAvKiBsZWZ0ICovOlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM4IC8qIHVwICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0SXRlbSgtMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOSAvKiByaWdodCAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0SXRlbSgwLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0MCAvKiBkb3duICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0SXRlbSgxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI3IC8qIGVzY2FwZSAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc3Bvc2VDYWNoZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbVRlcGxhdGVDYWNoZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2hpZ2hsaWdodElkeCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmtleXByZXNzKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcpKSAhPSBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfb25lU2VhcmNoQm94LmNzcygnd2lkdGgnLCBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygndG9wJykpICE9IGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfb25lU2VhcmNoQm94LmNzcygndG9wJywgZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmtleXVwKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAyNykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUua2V5Q29kZSA9PSA4IHx8IGUua2V5Q29kZSA9PSA0NiB8fCBlLmtleUNvZGUgPT0gODggfHwgZS5rZXlDb2RlID09IDg2KSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChudWxsLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIF90YXJnZXRBdXRvQ29udHJvbC52YWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9pZiAoZS5rZXlDb2RlID09IDEzICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgJChfb25lU2VhcmNoQm94KS5jc3MoJ2Rpc3BsYXknKSA9PSAnbm9uZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICBpZiAoX29wdGlvbnMuT25TZWFyY2gpIF9vcHRpb25zLk9uU2VhcmNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy99XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPiAwICYmICFfaXNPbkFycm93U2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5PblNlYXJjaCkgX29wdGlvbnMuT25TZWFyY2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PSAxMyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPiAwICYmIF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9oaWdobGlnaHRJZHggPiAwKSBzZWxlY3RIaWdobGlnaHRlZEl0ZW0oKTsgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKDAsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX29wdGlvbnMuT25JbmNyZW1lbnRhbFNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfb3B0aW9ucy5PbkluY3JlbWVudGFsU2VhcmNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID49IF9vcHRpb25zLk1pbkNoYXJMaW1pdCB8fCBfb3B0aW9ucy5FbmFibGVQcmVMaXN0IHx8IF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikgJChfb25lU2VhcmNoQm94KS5zaG93KCk7IGVsc2UgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkuaW5kZXhPZihfbGFzdEtleXdvcmQpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSA4IHx8IGUua2V5Q29kZSA9PSA0Nikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfbGFzdEtleXdvcmQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2xhc3RTZWFyY2h3b3JkID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBjaGFuZ2UgdGhlIGxhc3QgYW5kIGN1cnJlbnQgdmFsdWUgaW4gdGhlIGtleXdvcmQsIHRoZW4gbm8gbmVlZCB0byBjb250aW51ZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfbGFzdEtleXdvcmQgPT0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk9uVGV4dENoYW5nZSkgX29wdGlvbnMuT25UZXh0Q2hhbmdlKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgYXNzb2NpYXRlZCBjb250cm9scyBzaW5jZSB0aGUga2V5d29yZCBoYXMgYmVlbiBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICAgICAgYmluZEFzc29jaWF0ZUNvbnRyb2wobnVsbCwgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCBjdXJyZW50IHZhbHVlIG9mIHRoZSB0ZXh0IGJvb3ggYXMgbGFzdCB2YWx1ZS9rZXl3b3JkXHJcbiAgICAgICAgICAgICAgICAgICAgX2xhc3RLZXl3b3JkID0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBzdWdnZXN0aW9uIGJveCBpcyBoaWRkZW4gdGhlbiBubyBuZWVkIHRvIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQoX29uZVNlYXJjaEJveCkuY3NzKCdkaXNwbGF5JykgPT0gJ25vbmUnKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5Mb2FkaW5nSW1hZ2VVcmwgIT0gJycgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID49IF9vcHRpb25zLk1pbkNoYXJMaW1pdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJzxpbWcgc3JjPVwiJyArIF9vcHRpb25zLkxvYWRpbmdJbWFnZVVybCArICdcIiAvPicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEtleXdvcmQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuZm9jdXMoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJykpICE9IGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcsIGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnKSkgIT0gZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnLCBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX011bHRpU2VsZWN0Qm94LmZpbmQoJ2EuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNsb3NlJykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90ZW1wQ29udE11bHQgPSAkKCc8ZGl2PicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoJChfTXVsdGlTZWxlY3RCb3guaHRtbCgpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90ZW1wQ29udE11bHQpLmZpbmQoJ2EuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNsb3NlJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6JChcXCcjJyArIG9wdGlvbnMuTXVsdGlTZWxlY3RCb3hJZCArICcgIycgKyAkKHRoaXMpLmF0dHIoJ2lkJykgKyAnXFwnKS50cmlnZ2VyKFxcJ2NsaWNrXFwnKScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5NdWx0aVNlbGVjdFNob3dIZWxwVGV4dCkgX29wdGlvbnMuSGVscFRleHQgPSAnPGRpdiBzdHlsZT1cInBhZGRpbmc6N3B4XCI+PGZvbnQgc3R5bGU9XCJjb2xvcjpyZWRcIj5Zb3UgaGF2ZSBhbHJlYWR5IHNlbGVjdGVkPC9mb250PicgKyAoKF9vcHRpb25zLlN0aWNreU1vZGUpID8gJzxhIGNsYXNzPVwiQ2xvc2VBcmVhXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiB0aXRsZT1cIkNsaWNrIGhlcmUgdG8gaGlkZSBzZWxlY3RlZCBmaWx0ZXJzLlwiIG9uY2xpY2s9XCIkKFxcJyMnICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfT25lU2VhcmNoJyArICdcXCcpLmhpZGUoKTtcIj5DbG9zZTwvYT4nIDogJycpICsgJzxociBzdHlsZT1cIm1hcmdpbjowcHggMHB4IDdweCAwcHhcIiAvPicgKyBfdGVtcENvbnRNdWx0Lmh0bWwoKSArICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90ZW1wQ29udE11bHQpLmFwcGVuZChnZXRDdXJyZW50TG9jYXRpb25PYmplY3QoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX29wdGlvbnMuSGVscFRleHQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVDdXJyZW50TG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChfb25lU2VhcmNoQm94KS5maW5kKCdbZGF0YS1sb2NhdGlvbi1zZWFyY2hdJykubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuYXBwZW5kKGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZVByZUxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5d29yZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFfb3B0aW9ucy5NdWx0aVNlbGVjdCAmJiBfb3B0aW9ucy5FbmFibGVDdXJyZW50TG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQoX29uZVNlYXJjaEJveCkuZmluZCgnW2RhdGEtbG9jYXRpb24tc2VhcmNoXScpLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hcHBlbmQoZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhnZXRDdXJyZW50TG9jYXRpb25PYmplY3QoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX29wdGlvbnMuSGVscFRleHQgIT0gJycgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkgPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKF9vcHRpb25zLkhlbHBUZXh0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygnd2lkdGgnKSkgIT0gZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcsIGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcpKSAhPSBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnLCBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5ibHVyKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPiAwICYmICFfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc01hbnVhbFNlbGVjdCA9ICQoX3RhcmdldENvbnRyb2wpLmRhdGEoJ2lzLW1hbnVhbC1zZWxlY3QnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGlzTWFudWFsU2VsZWN0KSA9PSAndW5kZWZpbmVkJyB8fCBpc01hbnVhbFNlbGVjdCA9PSBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKDAsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuZGF0YSgnaXMtbWFudWFsLXNlbGVjdCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfb3B0aW9ucy5UZXN0TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaXMtZGlydHknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoJChfb25lU2VhcmNoQm94KS5maW5kKCdbZGF0YS1sb2NhdGlvbi1zZWFyY2hdJykubGVuZ3RoID4gMCAmJiBfb3B0aW9ucy5UZXN0TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaXMtZGlydHknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfb3B0aW9ucy5TdGlja3lNb2RlICYmICQoX29uZVNlYXJjaEJveCkuZmluZCgnZGl2LmFnb3JhLW9uZXNlYXJjaC1tdWx0aS1zZWwtaXRlbS1jb250JykubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2lzLWRpcnR5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2VhcmNoS2V5d29yZCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BbmltYXRlUGxhY2Vob2xkZXJUZXh0ID09IHRydWUgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkgPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICBBbmltYXRlUGxhY2Vob2xkZXJUZXh0KCQoX3RhcmdldENvbnRyb2wpLCAnJywgMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVDdXJyZW50TG9jYXRpb24gJiYgKGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignaHR0cHMnKSA+IC0xIHx8IGRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lLmluZGV4T2YoJ2xvY2FsaG9zdCcpID4gLTEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJzxhPicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5odG1sKCc8aSBjbGFzcz1cImFnYSBhZ2EtbG9jYXRpb25cIj48L2k+JyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ0VuYWJsZUN1cnJlbnRMb2NhdGlvbkxhYmVsJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygncGFkZGluZycsICczcHgnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdjb2xvcicsICdyZWQnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignaWR4JywgLTEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnZ2V0LW15LWRpcmVjdGlvbicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdkYXRhLWxvY2F0aW9uLXNlYXJjaCcsICcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubW91c2VvdmVyKGZ1bmN0aW9uICgpIHsgJCh0aGlzKS5jc3MoJ2JhY2tncm91bmQtY29sb3I6cmVkJyk7ICQodGhpcykuYWRkQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljayhmdW5jdGlvbiAoKSB7IHNlYXJjaE5lYXJieSgkKHRoaXMpLmF0dHIoJ2lkeCcpKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm9uKCd0YXAnLCBmdW5jdGlvbiAoKSB7IHNlYXJjaE5lYXJieSgkKHRoaXMpLmF0dHIoJ2lkeCcpKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm1vdXNlb3V0KGZ1bmN0aW9uICgpIHsgJCh0aGlzKS5yZW1vdmVDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTsgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gY2xlYXJOZWFyYnkoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX2lzTG9jYXRpb25TZXJhY2hFbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxBVFwiXScpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxPTkdcIl0nKS52YWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JEU1wiXScpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnI2RyYXdfc2VhcmNoJykuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoTmVhcmJ5KGlkeCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5nZW9sb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rpb24gKHBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JMQVRcIl0nKS52YWwocG9zaXRpb24uY29vcmRzLmxhdGl0dWRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxPTkdcIl0nKS52YWwocG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JEU1wiXScpLnZhbCgoJChfdGFyZ2V0Q29udHJvbCkuYXR0cignRGVmYXVsdFNlYXJjaFJhZGl1cycpICE9IG51bGwgJiYgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignRGVmYXVsdFNlYXJjaFJhZGl1cycpICE9ICcwJykgPyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdEZWZhdWx0U2VhcmNoUmFkaXVzJykgOiAnNScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuT25TZWxlY3QpIF9vcHRpb25zLk9uU2VsZWN0KHsgXCJrXCI6IHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZSArICd8JyArIHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUsIFwiblwiOiBcIklEQ0xBVElUVURFfElEQ0xPTkdJVFVERVwiLCBcInJ0XCI6IFwiTE9DQVRJT05cIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk9uU3VjY2VzcykgX29wdGlvbnMuT25TdWNjZXNzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oaWR4KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoS2V5d29yZChsb29rdXBMYWJlbCwgYWZ0ZXJTZWFyY2gpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfbGFzdFNlYXJjaHdvcmQgPT0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCkgJiYgIV9vcHRpb25zLkVuYWJsZVByZUxpc3QgJiYgbG9va3VwTGFiZWwgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFscmVhZHkgYSByZXF1ZXN0IG5vdCB5ZXQgY29tcGxldGVkIHRoZW4gdGhhdCBuZWVkIHRvIHN0b3AvYWJvcnQgYmVmb3JlIHN0YWFydGluZyBuZXcgb25lXHJcbiAgICAgICAgICAgICAgICBpZiAoX3JlcXVlc3QgIT0gbnVsbCkgX3JlcXVlc3QuYWJvcnQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoIDwgX29wdGlvbnMuTWluQ2hhckxpbWl0KSBfbGFzdEtleXdvcmQgPSAnJzsgZWxzZSBfbGFzdFNlYXJjaHdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobG9va3VwTGFiZWwgPT0gbnVsbCAmJiAhX29wdGlvbnMuRW5hYmxlUHJlTGlzdCAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPCBfb3B0aW9ucy5NaW5DaGFyTGltaXQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmRhdGEoJ2lzLW1hbnVhbC1zZWxlY3QnLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgX3NlYXJjaFBhcmFtID0gKCgkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPCBfb3B0aW9ucy5NaW5DaGFyTGltaXQpID8gJycgOiAkKF90YXJnZXRDb250cm9sKS52YWwoKSlcclxuICAgICAgICAgICAgICAgIF9zZWFyY2hLZXl3b3JkID0gKCgkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPCBfb3B0aW9ucy5NaW5DaGFyTGltaXQpID8gJycgOiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5yZXBsYWNlKC8jL2csICclMjMnKSkgKyAnJnQ9JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpXHJcbiAgICAgICAgICAgICAgICBpZiAobG9va3VwTGFiZWwgIT0gbnVsbCAmJiBsb29rdXBMYWJlbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3NlYXJjaFBhcmFtID0gX3NlYXJjaEtleXdvcmQgPSAnTE9PS1VQX0xBQkVMOjonICsgbG9va3VwTGFiZWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgX3JlcXVlc3QgPSAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IF9vcHRpb25zLlNlcnZpY2VVcmwgKyBcIj9LZXl3b3JkPVwiICsgX3NlYXJjaEtleXdvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogKHsgXCJLZXl3b3JkXCI6IF9zZWFyY2hQYXJhbSwgXCJTZWFyY2hNb2RlXCI6IF9vcHRpb25zLlNlYXJjaE1vZGUsIFwiT25lU2VhcmNoTmFtZVwiOiBfb3B0aW9ucy5PbmVTZWFyY2hOYW1lLCBcIlJlZ2lvblwiOiBfb3B0aW9ucy5SZWdpb24sIFwiTG9jYWxlXCI6IF9vcHRpb25zLkxvY2FsZSwgXCJBZGRpdGlvbmFsV2hlcmVcIjogJChfdGFyZ2V0Q29udHJvbCkuYXR0cignQWRkaXRpb25hbFdoZXJlJykgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9va3VwTGFiZWwgIT0gbnVsbCAmJiBhZnRlclNlYXJjaCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlclNlYXJjaChkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfcmVzcG9zZUNhY2hlID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2hpZ2hsaWdodElkeCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09IHVuZGVmaW5lZCB8fCBkYXRhLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVtRGF0YSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2ZpZWxkID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlbSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfY2F0ZWdvcnlpdGVtID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfY2F0ZW9nb3J5bmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtRGF0YSA9IGhpZ2hsaWdodEtleXdvcmQoZGF0YVtpXS5sLCAkKF90YXJnZXRDb250cm9sKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZmllbGQgPSBnZXRGaWVsZEpzb24oX29wdGlvbnMuT25lU2VhcmNoRFMsIGRhdGFbaV0ucnQsIGRhdGFbaV0ubik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maWVsZCAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGUgIT0gbnVsbCAmJiBfZmllbGQuSXRlbVRlbXBsYXRlICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1EYXRhID0gX2ZpZWxkLkl0ZW1UZW1wbGF0ZS5yZXBsYWNlKCd7JGx9JywgaGlnaGxpZ2h0S2V5d29yZChkYXRhW2ldLmwsICQoX3RhcmdldENvbnRyb2wpLnZhbCgpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1EYXRhID0gX2l0ZW1EYXRhLnJlcGxhY2UoJ3skZH0nLCBkYXRhW2ldLmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfZmllbGQgIT0gbnVsbCAmJiBfZmllbGQuSXRlbVRlbXBsYXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IF9maWVsZC5JdGVtVGVtcGxhdGVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmllbGQuSXRlbVRlbXBsYXRlc1tqXS5Mb2NhbGUgPT0gX29wdGlvbnMuTG9jYWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbURhdGEgPSBfZmllbGQuSXRlbVRlbXBsYXRlc1tqXS5UZW1wbGF0ZS5yZXBsYWNlKCd7JGx9JywgaGlnaGxpZ2h0S2V5d29yZChkYXRhW2ldLmwsICQoX3RhcmdldENvbnRyb2wpLnZhbCgpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbURhdGEgPSBfaXRlbURhdGEuVGVtcGxhdGUucmVwbGFjZSgneyRkfScsIGRhdGFbaV0uZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW0gPSAkKCc8YT4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5odG1sKF9pdGVtRGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdwYWRkaW5nJywgJzNweCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygndGV4dC1kZWNvcmF0aW9uJywgJ25vbmUnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ2NvbG9yJywgJ2JsYWNrJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignaWR4JywgaSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubW91c2VvdmVyKGZ1bmN0aW9uICgpIHsgJCh0aGlzKS5hZGRDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubW91c2Vkb3duKGZ1bmN0aW9uICgpIHsgJChfdGFyZ2V0Q29udHJvbCkuZGF0YSgnaXMtbWFudWFsLXNlbGVjdCcsIHRydWUpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljayhmdW5jdGlvbiAoKSB7IHNlbGVjdEl0ZW0oJCh0aGlzKS5hdHRyKCdpZHgnKSk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9uKCd0YXAnLCBmdW5jdGlvbiAoKSB7ICQoX3RhcmdldENvbnRyb2wpLmRhdGEoJ2lzLW1hbnVhbC1zZWxlY3QnLCB0cnVlKTsgc2VsZWN0SXRlbSgkKHRoaXMpLmF0dHIoJ2lkeCcpKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubW91c2VvdXQoZnVuY3Rpb24gKCkgeyAkKHRoaXMpLnJlbW92ZUNsYXNzKF9vcHRpb25zLkhpZ2hsaWdodEl0ZW1Dc3MpOyB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwICYmIF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvU2VsZWN0SXRlbShpLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuRW5hYmxlQ2F0ZWdvcnlWaWV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jYXRlb2dvcnluYW1lICE9IGRhdGFbaV0uZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2F0ZWdvcnlpdGVtID0gJCgnPGRpdj4nKS5hZGRDbGFzcygnT25lU2VhcmNoQm94LWNhdGVnb3J5LScrIGRhdGFbaV0uZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYXRlZ29yeWl0ZW0uYXBwZW5kICgkKCc8c3Bhbj4nKS5odG1sKGRhdGFbaV0uZykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2F0ZW9nb3J5bmFtZSA9IGRhdGFbaV0uZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhdGVnb3J5aXRlbS5hcHBlbmQoX2l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuYXBwZW5kKF9jYXRlZ29yeWl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDAgJiYgJChfb25lU2VhcmNoQm94KVtpXS5jbGFzc05hbWUuaW5jbHVkZXMoJ09uZVNlYXJjaEJveC0nKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KVtpXS5jbGFzc05hbWUgPSAkKF9vbmVTZWFyY2hCb3gpW2ldLmNsYXNzTmFtZS5yZXBsYWNlKC9cXGJPbmVTZWFyY2hCb3gtW0EtWmEtel0qXFxiL2csICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmFkZENsYXNzKCdPbmVTZWFyY2hCb3gtJyArIGRhdGFbaV0uZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmFwcGVuZChfaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDQwNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1NlcnZpY2UgKGFnb3JhT25lU2VhcmNoKSBub3QgZm91bmQhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzZWxlY3RIaWdobGlnaHRlZEl0ZW0oKSB7XHJcbiAgICAgICAgaWYgKF9yZXNwb3NlQ2FjaGUgPT0gbnVsbCB8fCBfcmVzcG9zZUNhY2hlLmxlbmd0aCA8IChfaGlnaGxpZ2h0SWR4IC0gMSkgfHwgX2hpZ2hsaWdodElkeCA8PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIHZhciBfbGFiZWwgPSAnJztcclxuICAgICAgICB2YXIgX3NlbGVjdGVkVmFsdWUgPSAnJztcclxuICAgICAgICB2YXIgX2ZpZWxkID0gZ2V0RmllbGRKc29uKF9vcHRpb25zLk9uZVNlYXJjaERTLCBfcmVzcG9zZUNhY2hlW19oaWdobGlnaHRJZHggLSAxXS5ydCwgX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0ubik7XHJcbiAgICAgICAgaWYgKF9maWVsZCAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGUgIT0gJycpIHtcclxuICAgICAgICAgICAgaWYgKF9maWVsZC5TZWxlY3RvciAhPSB1bmRlZmluZWQgJiYgX2ZpZWxkLlNlbGVjdG9yICE9IG51bGwgJiYgX2ZpZWxkLlNlbGVjdG9yID09ICdrJylcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0uaztcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgX3NlbGVjdGVkVmFsdWUgPSBfcmVzcG9zZUNhY2hlW19oaWdobGlnaHRJZHggLSAxXS5sO1xyXG4gICAgICAgIH1cclxuICAgICAgICBfbGFiZWwgPSBfcmVzcG9zZUNhY2hlW19oaWdobGlnaHRJZHggLSAxXS5sO1xyXG5cclxuICAgICAgICBpZiAoIV9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLnZhbChfbGFiZWwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgX2xhc3RLZXl3b3JkID0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCk7XHJcbiAgICAgICAgYmluZEFzc29jaWF0ZUNvbnRyb2woX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0sIF9zZWxlY3RlZFZhbHVlKTtcclxuICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkgYXV0b1NlbGVjdEl0ZW0oKF9oaWdobGlnaHRJZHggLSAxKSk7XHJcbiAgICAgICAgaWYgKF9vcHRpb25zLk9uU2VsZWN0KSBfb3B0aW9ucy5PblNlbGVjdChfcmVzcG9zZUNhY2hlW19oaWdobGlnaHRJZHggLSAxXSk7XHJcbiAgICAgICAgX2hpZ2hsaWdodElkeCA9IDA7XHJcbiAgICAgICAgaWYgKCFfb3B0aW9ucy5UZXN0TW9kZSkgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzZWxlY3RJdGVtKGlkeCwgbm9jbGVhciwgYXV0b1NlbGVjdCkge1xyXG4gICAgICAgIHZhciBfbGFiZWwgPSAnJztcclxuICAgICAgICB2YXIgX3NlbGVjdGVkVmFsdWUgPSAnJztcclxuICAgICAgICBpZiAobm9jbGVhciA9PSB1bmRlZmluZWQgfHwgbm9jbGVhciA9PSBudWxsKSBub2NsZWFyID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGF1dG9TZWxlY3QgPT0gdW5kZWZpbmVkIHx8IGF1dG9TZWxlY3QgPT0gbnVsbCkgYXV0b1NlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIChfcmVzcG9zZUNhY2hlKSA9PSAndW5kZWZpbmVkJyB8fCBfcmVzcG9zZUNhY2hlID09IG51bGwgfHwgX3Jlc3Bvc2VDYWNoZS5sZW5ndGggPT0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB2YXIgX2ZpZWxkID0gZ2V0RmllbGRKc29uKF9vcHRpb25zLk9uZVNlYXJjaERTLCBfcmVzcG9zZUNhY2hlW2lkeF0ucnQsIF9yZXNwb3NlQ2FjaGVbaWR4XS5uKTtcclxuICAgICAgICBpZiAoX2ZpZWxkICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZSAhPSAnJykge1xyXG4gICAgICAgICAgICBpZiAoX2ZpZWxkLlNlbGVjdG9yICE9IHVuZGVmaW5lZCAmJiBfZmllbGQuU2VsZWN0b3IgIT0gbnVsbCAmJiBfZmllbGQuU2VsZWN0b3IgPT0gJ2snKVxyXG4gICAgICAgICAgICAgICAgX3NlbGVjdGVkVmFsdWUgPSBfcmVzcG9zZUNhY2hlW2lkeF0uaztcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgX3NlbGVjdGVkVmFsdWUgPSBfcmVzcG9zZUNhY2hlW2lkeF0ubDtcclxuICAgICAgICB9XHJcbiAgICAgICAgX2xhYmVsID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLmw7XHJcblxyXG4gICAgICAgIGlmIChhdXRvU2VsZWN0ID09IHRydWUgJiYgIV9sYWJlbC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgaWYgKF9maWVsZCAhPSBudWxsICYmX2ZpZWxkLlNraXBTZWxlY3QgIT0gdHJ1ZSkgJChfdGFyZ2V0Q29udHJvbCkudmFsKF9sYWJlbCk7IGVsc2UgJChfdGFyZ2V0Q29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoJycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9sYXN0S2V5d29yZCA9ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkgY2xlYXJOZWFyYnkoKTtcclxuICAgICAgICBpZiAoX2ZpZWxkICE9IG51bGwgJiZfZmllbGQuU2tpcFNlbGVjdCAhPSB0cnVlKSBiaW5kQXNzb2NpYXRlQ29udHJvbChfcmVzcG9zZUNhY2hlW2lkeF0sIF9zZWxlY3RlZFZhbHVlKTtcclxuICAgICAgICBpZiAoX29wdGlvbnMuT25TZWxlY3QpIF9vcHRpb25zLk9uU2VsZWN0KF9yZXNwb3NlQ2FjaGVbaWR4XSk7XHJcbiAgICAgICAgaWYgKCFfb3B0aW9ucy5UZXN0TW9kZSAmJiAhbm9jbGVhcikgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIGlmICghX29wdGlvbnMuRW5hYmxlUHJlTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ICQoX3RhcmdldENvbnRyb2wpLmZvY3VzKCk7IH0sIDIwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYXV0b1NlbGVjdEl0ZW0oaWR4KSB7XHJcbiAgICAgICAgdmFyIF9sYWJlbCA9ICcnO1xyXG4gICAgICAgIHZhciBfc2VsZWN0ZWRWYWx1ZSA9ICcnO1xyXG4gICAgICAgIGlmICgkKF90YXJnZXRDb250cm9sKS52YWwoKSA9PSBudWxsIHx8ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpID09ICcnKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHR5cGVvZiAoX3Jlc3Bvc2VDYWNoZSkgPT0gJ3VuZGVmaW5lZCcgfHwgX3Jlc3Bvc2VDYWNoZSA9PSBudWxsIHx8IF9yZXNwb3NlQ2FjaGUubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgICAgICB2YXIgX2ZpZWxkID0gZ2V0RmllbGRKc29uKF9vcHRpb25zLk9uZVNlYXJjaERTLCBfcmVzcG9zZUNhY2hlW2lkeF0ucnQsIF9yZXNwb3NlQ2FjaGVbaWR4XS5uKTtcclxuICAgICAgICBpZiAoX2ZpZWxkICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZSAhPSAnJykge1xyXG4gICAgICAgICAgICBpZiAoX2ZpZWxkLlNlbGVjdG9yICE9IHVuZGVmaW5lZCAmJiBfZmllbGQuU2VsZWN0b3IgIT0gbnVsbCAmJiBfZmllbGQuU2VsZWN0b3IgPT0gJ2snKVxyXG4gICAgICAgICAgICAgICAgX3NlbGVjdGVkVmFsdWUgPSBfcmVzcG9zZUNhY2hlW2lkeF0uaztcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgX3NlbGVjdGVkVmFsdWUgPSBfcmVzcG9zZUNhY2hlW2lkeF0ubDtcclxuICAgICAgICB9XHJcbiAgICAgICAgX2xhYmVsID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLmw7XHJcblxyXG4gICAgICAgIGlmICghX2xhYmVsLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFwsL2csICcnKS5zdGFydHNXaXRoKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFwsL2csICcnKSkpIHtcclxuICAgICAgICAgICAgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICB2YXIgcmVnRXggPSBuZXcgUmVnRXhwKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLCBcImlnXCIpO1xyXG4gICAgICAgICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoX2xhYmVsLnJlcGxhY2UocmVnRXgsICQoX3RhcmdldENvbnRyb2wpLnZhbCgpKSk7XHJcblxyXG4gICAgICAgIF9sYXN0S2V5d29yZCA9ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlbG9hZE11bHRpU2VsZWN0T25Mb2FkKCkge1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuTXVsdGlTZWxlY3QpIHJldHVybjtcclxuXHJcbiAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZF49XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdcIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfaXRlbSA9IHt9OyAvL1t7IFwia1wiOiBcIkNoYXJsb3R0ZVwiLCBcImxcIjogXCJDaGFybG90dGUsIE5DXCIsIFwiblwiOiBcIkNJVFlcIiwgXCJydFwiOiBcIkNNTkNNTlwiIH1dXHJcbiAgICAgICAgICAgICAgICB2YXIgX2l0ZW1WYWx1ZSA9ICQodGhpcykuYXR0cignaWQnKS5zcGxpdCgnXycpO1xyXG4gICAgICAgICAgICAgICAgX2l0ZW0ucnQgPSBfaXRlbVZhbHVlW19pdGVtVmFsdWUubGVuZ3RoIC0gMl07XHJcbiAgICAgICAgICAgICAgICBfaXRlbS5uID0gX2l0ZW1WYWx1ZVtfaXRlbVZhbHVlLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ2RhdGEtbGFiZWwtbG9va3VwJykgPT0gJ1RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5d29yZChfaXRlbS5ydCArICd8JyArIF9pdGVtLm4gKyAnOjonICsgJCh0aGlzKS52YWwoKSwgZnVuY3Rpb24gKHJlc3VsdEpzb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9sYWJlbHMgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9rZXlzID0gJyc7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRKc29uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xhYmVscyA9IHJlc3VsdEpzb24ubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oJzsnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfa2V5cyA9IHJlc3VsdEpzb24ubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oJzsnKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRBc3NvY2lhdGVDb250cm9sKF9pdGVtLCBfa2V5cywgdHJ1ZSwgX2xhYmVscyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChfaXRlbSwgJCh0aGlzKS52YWwoKSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBiaW5kQXNzb2NpYXRlQ29udHJvbChpdGVtLCB2YWx1ZSwgaW5pdGlhbExvYWQsIGxhYmVscykge1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuTXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZF49XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdcIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcykudmFsKCcnKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgICAgJCgnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubikudmFsKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgICAgIHZhciBfY3RybE11bHRpRmllbGQgPSAkKCcjJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXycgKyBpdGVtLnJ0ICsgJ18nICsgaXRlbS5uKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBfdmFsdWVJdGVtcyA9IHZhbHVlLnNwbGl0KFwiO1wiKTtcclxuICAgICAgICAgICAgdmFyIF92YWx1ZUl0ZW1zQ2FycmllciA9IF92YWx1ZUl0ZW1zO1xyXG4gICAgICAgICAgICBpZiAobGFiZWxzICE9IG51bGwgJiYgbGFiZWxzICE9IHVuZGVmaW5lZCkgdmFyIF92YWx1ZUl0ZW1zID0gbGFiZWxzLnNwbGl0KFwiO1wiKTtcclxuICAgICAgICAgICAgdmFyIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgaXRlbS5ydCwgaXRlbS5uKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBfdmFsdWVJdGVtcy5sZW5ndGggJiYgX2ZpZWxkICE9IG51bGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKF92YWx1ZUl0ZW1zW2ldLmxlbmd0aCA8IDIpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCgnOycgKyBfY3RybE11bHRpRmllbGQudmFsKCkudG9Mb3dlckNhc2UoKSArICc7JykuaW5kZXhPZignOycgKyBfdmFsdWVJdGVtc1tpXS50b0xvd2VyQ2FzZSgpICsgJzsnKSA9PSAtMSB8fCBpbml0aWFsTG9hZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5pdGlhbExvYWQpIF9jdHJsTXVsdGlGaWVsZC52YWwoX2N0cmxNdWx0aUZpZWxkLnZhbCgpICsgJzsnICsgX3ZhbHVlSXRlbXNbaV0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgX211bHRpU2VsZWN0SXRlbSA9ICQoJzxkaXY+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdhZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY29udCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcsICdtdWx0aWl0ZW0nICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4gKyBfdmFsdWVJdGVtc1tpXS5yZXBsYWNlKC9cXCAvZywgJ18nKS5yZXBsYWNlKC9cXC0vZywgJ18nKS5yZXBsYWNlKC9bXkEtejAtOV0vZywgJ18nKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgkKCc8YT4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdhZ29yYS1vbmVzZWFyY2gtbXVsdGktc2VsLWl0ZW0tY2xvc2UnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3RpdGxlJywgJ0NsaWNrIGhlcmUgdG8gaGlkZSB0aGlzIGFyZWEgZmlsdGVyLicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignaWQnLCAnbXVsdGlpdGVtX2Nsb3NlXycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubiArIF92YWx1ZUl0ZW1zW2ldLnJlcGxhY2UoL1xcIC9nLCAnXycpLnJlcGxhY2UoL1xcLS9nLCAnXycpLnJlcGxhY2UoL1teQS16MC05XS9nLCAnXycpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3ZhbCcsIF92YWx1ZUl0ZW1zQ2FycmllcltpXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5odG1sKCc8aSBjbGFzcz1cImFnYSBhZ2EtY2xvc2VcIj48L2k+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRnJvbU11bHRpU2VsZWN0KCQodGhpcyksIGl0ZW0sICQodGhpcykuYXR0cigndmFsJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCQoJzxhPicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaHRtbChfZmllbGQuTXVsdGlJdGVtVGVtcGxhdGUucmVwbGFjZSgneyRsfScsIChpdGVtICE9IG51bGwgJiYgaXRlbS5sICE9IG51bGwpID8gaXRlbS5sIDogX3ZhbHVlSXRlbXNbaV0pLnJlcGxhY2UoJ3skZH0nLCAoaXRlbSAhPSBudWxsICYmIGl0ZW0uZCAhPSBudWxsKSA/IGl0ZW0uZCA6IF92YWx1ZUl0ZW1zW2ldKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBfTXVsdGlTZWxlY3RCb3guYXBwZW5kKF9tdWx0aVNlbGVjdEl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWluaXRpYWxMb2FkICYmIF9vcHRpb25zLk9uTXVsdGlTZWxlY3RSZW1vdmUpIF9vcHRpb25zLk9uTXVsdGlTZWxlY3RSZW1vdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaGFzTXVsdGlTZWxlY3RlZEl0ZW1zKCkge1xyXG4gICAgICAgIHJldHVybiAoX29wdGlvbnMuTXVsdGlTZWxlY3QgJiYgX011bHRpU2VsZWN0Qm94LmZpbmQoJ2EuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNsb3NlJykubGVuZ3RoID4gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcmVtb3ZlRnJvbU11bHRpU2VsZWN0KG1lLCBpdGVtLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBfY3RybE11bHRpRmllbGQgPSAkKCcjJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXycgKyBpdGVtLnJ0ICsgJ18nICsgaXRlbS5uKTtcclxuICAgICAgICBpZiAoX2N0cmxNdWx0aUZpZWxkLnZhbCgpLmluZGV4T2YoJzsnKSAhPSAwKSBfY3RybE11bHRpRmllbGQudmFsKCc7JyArIF9jdHJsTXVsdGlGaWVsZC52YWwoKSk7XHJcbiAgICAgICAgX2N0cmxNdWx0aUZpZWxkLnZhbChfY3RybE11bHRpRmllbGQudmFsKCkucmVwbGFjZSgnOycgKyB2YWx1ZSwgJycpKTtcclxuXHJcbiAgICAgICAgLy8kKCcjbXVsdGlpdGVtJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXycgKyBpdGVtLnJ0ICsgJ18nICsgaXRlbS5uICsgdmFsdWUucmVwbGFjZSgvXFwgL2csICdfJykucmVwbGFjZSgvXFwtL2csICdfJykpLnJlbW92ZSgpO1xyXG4gICAgICAgICQobWUpLnBhcmVudCgpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgICBpZiAoX2N0cmxNdWx0aUZpZWxkLnZhbCgpID09IFwiXCIgfHwgJChfb25lU2VhcmNoQm94KS5maW5kKCdkaXYuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNvbnQnKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5Pbk11bHRpU2VsZWN0UmVtb3ZlKSBfb3B0aW9ucy5Pbk11bHRpU2VsZWN0UmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIGhpZ2hsaWdodEl0ZW0oZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgX2lzT25BcnJvd1NlbGVjdGlvbiA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPiAwKSAvKmRvd24qLyB7XHJcbiAgICAgICAgICAgIGlmIChfaGlnaGxpZ2h0SWR4IDwgJChfb25lU2VhcmNoQm94KS5maW5kKCdhJykubGVuZ3RoKSBfaGlnaGxpZ2h0SWR4Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgLyp1cCovIHtcclxuICAgICAgICAgICAgaWYgKF9oaWdobGlnaHRJZHggPiAxKSBfaGlnaGxpZ2h0SWR4LS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoX29uZVNlYXJjaEJveCkuZmluZCgnYScpLmVhY2goZnVuY3Rpb24gKCkgeyAkKHRoaXMpLnJlbW92ZUNsYXNzKF9vcHRpb25zLkhpZ2hsaWdodEl0ZW1Dc3MpOyB9KTtcclxuICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmZpbmQoKF9vcHRpb25zLkVuYWJsZUNhdGVnb3J5VmlldykgPyAnYVtpZHg9JyArIF9oaWdobGlnaHRJZHggKyAnXScgOiAnYTpudGgtY2hpbGQoJyArIF9oaWdobGlnaHRJZHggKyAnKScpLmFkZENsYXNzKF9vcHRpb25zLkhpZ2hsaWdodEl0ZW1Dc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldFRvdGFsV2lkdGhPZkNvbnRyb2wob2JqZWN0KSB7XHJcblxyXG4gICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCB8fCBvYmplY3QubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3Qud2lkdGgoKTtcclxuICAgICAgICB2YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwicGFkZGluZy1sZWZ0XCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwicGFkZGluZy1yaWdodFwiKSwgMTApOyAvL1RvdGFsIFBhZGRpbmcgV2lkdGhcclxuICAgICAgICAvL3ZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJtYXJnaW4tbGVmdFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcIm1hcmdpbi1yaWdodFwiKSwgMTApOyAvL1RvdGFsIE1hcmdpbiBXaWR0aFxyXG4gICAgICAgIHZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJib3JkZXJSaWdodFdpZHRoXCIpLCAxMCk7IC8vVG90YWwgQm9yZGVyIFdpZHRoXHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5QYXJlbnRDb250YWluZXIgIT0gJycpIHtcclxuICAgICAgICAgICAgdmFsdWUgKz0gb2JqZWN0Lm9mZnNldCgpLmxlZnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2wob2JqZWN0KSB7XHJcblxyXG4gICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCB8fCBvYmplY3QubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3QuaGVpZ2h0KCk7XHJcbiAgICAgICAgdmFsdWUgKz0gcGFyc2VJbnQob2JqZWN0LmNzcyhcInBhZGRpbmctdG9wXCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwicGFkZGluZy1ib3R0b21cIiksIDEwKTsgLy9Ub3RhbCBQYWRkaW5nIFdpZHRoXHJcbiAgICAgICAgLy92YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwibWFyZ2luLXRvcFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcIm1hcmdpbi1ib3R0b21cIiksIDEwKTsgLy9Ub3RhbCBNYXJnaW4gV2lkdGhcclxuICAgICAgICB2YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwiYm9yZGVyVG9wV2lkdGhcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJib3JkZXJCb3R0b21XaWR0aFwiKSwgMTApOyAvL1RvdGFsIEJvcmRlciBXaWR0aFxyXG4gICAgICAgIHZhbHVlICs9IG9iamVjdC5wb3NpdGlvbigpLnRvcDtcclxuXHJcbiAgICAgICAgaWYgKF9vcHRpb25zLlBhcmVudENvbnRhaW5lciAhPSAnJykge1xyXG4gICAgICAgICAgICB2YWx1ZSArPSBvYmplY3Qub2Zmc2V0KCkudG9wO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldEZpZWxkSnNvbihvYmosIHJ0LCBmaWVsZE5hbWUpIHtcclxuICAgICAgICBpZiAoX2l0ZW1UZXBsYXRlQ2FjaGVbcnQgKyAnXycgKyBmaWVsZE5hbWVdICE9IG51bGwpIHJldHVybiBfaXRlbVRlcGxhdGVDYWNoZVtydCArICdfJyArIGZpZWxkTmFtZV07XHJcblxyXG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBvYmouUmVjb3JkVHlwZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgZm9yIChqID0gMDsgb2JqLlJlY29yZFR5cGVzW2tdLk5hbWUgPT0gcnQgJiYgaiA8IG9iai5SZWNvcmRUeXBlc1trXS5GaWVsZHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmouUmVjb3JkVHlwZXNba10uRmllbGRzW2pdLk5hbWUgPT0gZmllbGROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2l0ZW1UZXBsYXRlQ2FjaGVbcnQgKyAnXycgKyBmaWVsZE5hbWVdID0gb2JqLlJlY29yZFR5cGVzW2tdLkZpZWxkc1tqXTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLlJlY29yZFR5cGVzW2tdLkZpZWxkc1tqXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwcmVnX3F1b3RlKHN0cikge1xyXG4gICAgICAgIHJldHVybiAoc3RyICsgJycpLnJlcGxhY2UoLyhbXFxcXFxcLlxcK1xcKlxcP1xcW1xcXlxcXVxcJFxcKFxcKVxce1xcfVxcPVxcIVxcPFxcPlxcfFxcOl0pL2csIFwiXFxcXCQxXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGhpZ2hsaWdodEtleXdvcmQoc3RyLCBrZXl3b3JkKSB7XHJcbiAgICAgICAgLy9yZXR1cm4gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cChwcmVnX3F1b3RlKHRvKSwgJ2dpJyksIGJ5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXCIgKyBwcmVnX3F1b3RlKGtleXdvcmQpICsgXCIpXCIsICdnaScpLCBcIjxzdHJvbmc+JDE8L3N0cm9uZz5cIik7XHJcbiAgICB9XHJcbn1cclxufSk7XHJcbn0pKGpRdWVyeSk7XHJcblxyXG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07Il0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsImEiLCJpIiwic2VsZiIsIiQiLCJqUXVlcnkiLCJmbiIsImV4dGVuZCIsIk9uZVNlYXJjaCIsIm9wdGlvbnMiLCJfb3B0aW9ucyIsIlNlcnZpY2VVcmwiLCJPbmVTZWFyY2hOYW1lIiwiT25lU2VhcmNoRFMiLCJNaW5DaGFyTGltaXQiLCJFbmFibGVDdXJyZW50TG9jYXRpb24iLCJFbmFibGVQcmVMaXN0IiwiQXV0b1NlbGVjdEZpcnN0SXRlbSIsIlJlc3VsdExpbWl0IiwiRW5hYmxlVG91Y2giLCJEYXRhU291cmNlIiwiRGF0YVNvdXJjZUNvbnRyb2wiLCJDb250YWluZXJDc3MiLCJJdGVtQ3NzIiwiSGlnaGxpZ2h0SXRlbUNzcyIsIlJlZ2lvbiIsIkxvY2FsZSIsIkhlbHBUZXh0IiwiQW5pbWF0ZVBsYWNlaG9sZGVyVGV4dCIsIk11bHRpU2VsZWN0IiwiTXVsdGlTZWxlY3RCb3hJZCIsIk11bHRpU2VsZWN0U2hvd0hlbHBUZXh0IiwiTXVsdGlLZXl3b3JkRGVsaW1pdGVyIiwiTG9hZGluZ0ltYWdlVXJsIiwiUGFyZW50Q29udGFpbmVyIiwiQmVmb3JlQ2FsbCIsIkFmdGVyQ2FsbCIsIk9uU3VjY2VzcyIsIk9uRXJyb3IiLCJPblNlbGVjdCIsIk9uVGV4dENoYW5nZSIsIk9uU2VhcmNoIiwiT25JbmNyZW1lbnRhbFNlYXJjaCIsIk9uTXVsdGlTZWxlY3RSZW1vdmUiLCJTZWFyY2hNb2RlIiwiVGVzdE1vZGUiLCJTdGlja3lNb2RlIiwiRW5hYmxlQ2F0ZWdvcnlWaWV3IiwiX3RhcmdldENvbnRyb2wiLCJfdGFyZ2V0QXV0b0NvbnRyb2wiLCJfb25lU2VhcmNoQm94IiwiX011bHRpU2VsZWN0Qm94IiwiX2xhc3RLZXl3b3JkIiwiX2xhc3RTZWFyY2h3b3JkIiwiX3JlcXVlc3QiLCJfcmVzcG9zZUNhY2hlIiwiX2l0ZW1UZXBsYXRlQ2FjaGUiLCJfaGlnaGxpZ2h0SWR4IiwiX2lzT25BcnJvd1NlbGVjdGlvbiIsIl9pc0xvY2F0aW9uU2VyYWNoRW5hYmxlZCIsInRoaXMiLCJlYWNoIiwib2JqIiwiYXR0ciIsInJlcGxhY2UiLCJEYXRlIiwidmFsdWVPZiIsIndpbmRvdyIsIm9ucG9wc3RhdGUiLCJldmVudCIsImNzcyIsImdldFRvdGFsSGVpZ2h0T2ZDb250cm9sIiwiZ2V0VG90YWxXaWR0aE9mQ29udHJvbCIsImFkZENsYXNzIiwiaHRtbCIsImFwcGVuZCIsImluc2VydEFmdGVyIiwiY2xvc2VzdCIsImNsaWNrIiwiZSIsInRhcmdldCIsImNsYXNzTmFtZSIsInNldFRpbWVvdXQiLCJmb2N1cyIsIk11bHRpU2VsZWN0Qm94Q3NzIiwidmFsIiwiX2l0ZW0iLCJfaXRlbVZhbHVlIiwic3BsaXQiLCJydCIsImxlbmd0aCIsIm4iLCJzZWFyY2hLZXl3b3JkIiwicmVzdWx0SnNvbiIsIl9sYWJlbHMiLCJfa2V5cyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJsIiwiam9pbiIsImsiLCJiaW5kQXNzb2NpYXRlQ29udHJvbCIsImxhdCIsImxuZyIsInJkcyIsImtleWRvd24iLCJrZXlDb2RlIiwic2VsZWN0SGlnaGxpZ2h0ZWRJdGVtIiwic2VsZWN0SXRlbSIsImhpZ2hsaWdodEl0ZW0iLCJoaWRlIiwia2V5cHJlc3MiLCJwYXJzZUludCIsInByZXZlbnREZWZhdWx0Iiwia2V5dXAiLCJzaG93IiwiaW5kZXhPZiIsImZpbmQiLCJfdGVtcENvbnRNdWx0IiwiZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0IiwiY29uc29sZSIsImxvZyIsImJsdXIiLCJpc01hbnVhbFNlbGVjdCIsImRhdGEiLCJwYXJlbnQiLCJyZW1vdmVDbGFzcyIsIkluaXQiLCJkb2N1bWVudCIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJ0b0xvd2VyQ2FzZSIsImhvc3RuYW1lIiwibW91c2VvdmVyIiwic2VhcmNoTmVhcmJ5Iiwib24iLCJtb3VzZW91dCIsImlkeCIsIm5hdmlnYXRvciIsImdlb2xvY2F0aW9uIiwiZ2V0Q3VycmVudFBvc2l0aW9uIiwicG9zaXRpb24iLCJjb29yZHMiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsImxvb2t1cExhYmVsIiwiYWZ0ZXJTZWFyY2giLCJhYm9ydCIsIl9zZWFyY2hQYXJhbSIsIl9zZWFyY2hLZXl3b3JkIiwiZ2V0VGltZSIsImFqYXgiLCJ0eXBlIiwidXJsIiwiZGF0YVR5cGUiLCJzdWNjZXNzIiwidW5kZWZpbmVkIiwiX2l0ZW1EYXRhIiwiX2ZpZWxkIiwiX2NhdGVnb3J5aXRlbSIsIl9jYXRlb2dvcnluYW1lIiwiaGlnaGxpZ2h0S2V5d29yZCIsImdldEZpZWxkSnNvbiIsIkl0ZW1UZW1wbGF0ZSIsImQiLCJJdGVtVGVtcGxhdGVzIiwiaiIsIlRlbXBsYXRlIiwibW91c2Vkb3duIiwiYXV0b1NlbGVjdEl0ZW0iLCJnIiwiaW5jbHVkZXMiLCJzdGF0dXNDb2RlIiwiX2xhYmVsIiwiX3NlbGVjdGVkVmFsdWUiLCJTZWxlY3RvciIsIm5vY2xlYXIiLCJhdXRvU2VsZWN0Iiwic3RhcnRzV2l0aCIsIlNraXBTZWxlY3QiLCJyZWdFeCIsIlJlZ0V4cCIsInZhbHVlIiwiaW5pdGlhbExvYWQiLCJsYWJlbHMiLCJfY3RybE11bHRpRmllbGQiLCJfdmFsdWVJdGVtc0NhcnJpZXIiLCJfdmFsdWVJdGVtcyIsIl9tdWx0aVNlbGVjdEl0ZW0iLCJyZW1vdmVGcm9tTXVsdGlTZWxlY3QiLCJNdWx0aUl0ZW1UZW1wbGF0ZSIsIm1lIiwicmVtb3ZlIiwiZGlyZWN0aW9uIiwib2JqZWN0Iiwid2lkdGgiLCJvZmZzZXQiLCJsZWZ0IiwiaGVpZ2h0IiwidG9wIiwiZmllbGROYW1lIiwiUmVjb3JkVHlwZXMiLCJOYW1lIiwiRmllbGRzIiwic3RyIiwia2V5d29yZCIsInByZWdfcXVvdGUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImRlZmluaXRpb24iLCJrZXkiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicHJvcCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyJdLCJzb3VyY2VSb290IjoiIn0=
1
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var l=t();for(var a in l)("object"==typeof exports?exports:e)[a]=l[a]}}(self,(()=>(()=>{var e={803:()=>{var e;(e=jQuery).fn.extend({OneSearch:function(t){var l,a=e.extend({ServiceUrl:"",OneSearchName:"",OneSearchDS:null,MinCharLimit:3,EnableCurrentLocation:!1,EnablePreList:!1,AutoSelectFirstItem:!1,ResultLimit:10,EnableTouch:!1,DataSource:null,DataSourceControl:null,ContainerCss:"",ItemCss:"",HighlightItemCss:"",Region:"US",Locale:"NONE",HelpText:"",AnimatePlaceholderText:!1,MultiSelect:!1,MultiSelectBoxId:"",MultiSelectShowHelpText:!0,MultiKeywordDelimiter:"",LoadingImageUrl:"",ParentContainer:"",BeforeCall:null,AfterCall:null,OnSuccess:null,OnError:null,OnSelect:null,OnTextChange:null,OnSearch:null,OnIncrementalSearch:null,OnMultiSelectRemove:null,SearchMode:"Database",TestMode:!1,StickyMode:!1,EnableCategoryView:!1},t),n=null,r=null,o=null,s=null,c="",d="",u=null,h=null,p=[],m=0,v=!1,f=!1;return this.each((function(){!function(l){if(a.StickyMode&&!a.TestMode&&(a.TestMode=!0),n=l,a.AutoSelectFirstItem&&(r=e('input[id="'+e(n).attr("id")+'_AUTO_ITEM"]')),e(n).attr("autocomplete","nope"),e(n).attr("name",e(n).attr("id").replace(/\$/gi,"_")+(new Date).valueOf()),window.onpopstate=function(t){e(n).attr("name",e(n).attr("id").replace(/\$/gi,"_")+(new Date).valueOf())},o=e("<div>").attr("id",e(n).attr("id")+"_OneSearch").css("position",a.EnableTouch?"relative":"absolute").css("top",L(e(n))).css("width",b(e(n))).css("display","none").addClass(a.ContainerCss).html(a.HelpText),""!=a.ParentContainer?e("#"+a.ParentContainer).append(o):o.insertAfter(e(n)),e(n).closest("div").click((function(t){"block"==e(n).css("display")&&""!=e(n).html()||"CloseArea"!=t.target.className&&(a.EnablePreList||setTimeout((function(){e(n).focus()}),500))})),a.MultiSelect&&(""!=a.MultiSelectBoxId&&(s=e("#"+a.MultiSelectBoxId)),null!=s&&""!=a.MultiSelectBoxCss&&s.addClass(a.MultiSelectBoxCss),a.MultiSelect&&e('input[type="hidden"][id^="'+e(n).attr("id")+'"]').each((function(){if(""!=e(this).val()){var t={},l=e(this).attr("id").split("_");t.rt=l[l.length-2],t.n=l[l.length-1],"True"==e(this).attr("data-label-lookup")?C(t.rt+"|"+t.n+"::"+e(this).val(),(function(l){var a="",i="";Array.isArray(l)&&(a=l.map((function(e){return e.l})).join(";"),i=l.map((function(e){return e.k})).join(";")),I(t,i,!0,a),e(n).val("")})):I(t,e(this).val(),!0)}}))),a.EnableCurrentLocation){var i=e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLAT"]').val(),u=e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLONG"]').val(),S=e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RDS"]').val();void 0!==i&&void 0!==u&&void 0!==S&&""!=i&&""!=u&&""!=S&&(f=!0)}e(n).keydown((function(t){switch(t.keyCode){case 9:case 13:a.AutoSelectFirstItem&&e(n).val().length>0?(m>0?y():O(0,!1,!0),v=!1):(y(),v=!1);break;case 38:x(-1);break;case 39:a.AutoSelectFirstItem&&(O(0,!1,!0),e(o).hide(),e(r).val(""));break;case 40:x(1);break;case 27:e(o).hide(),h=null,p=[],m=0}})),e(n).keypress((function(t){parseInt(o.css("width"))!=b(e(n))&&o.css("width",b(e(n))),parseInt(o.css("top"))!=L(e(n))&&o.css("top",L(e(n))),13==t.keyCode&&t.preventDefault()})),e(n).keyup((function(t){27!=t.keyCode&&(8!=t.keyCode&&46!=t.keyCode&&88!=t.keyCode&&86!=t.keyCode||0!=e(n).val().length||(I(null,null),a.AutoSelectFirstItem&&r.val("")),13==t.keyCode&&e(n).val().length>0&&!v?a.OnSearch&&a.OnSearch():13==t.keyCode&&e(n).val().length>0&&a.AutoSelectFirstItem?m>0?y():O(0,!1,!0):a.OnIncrementalSearch&&a.OnIncrementalSearch(),e(n).val().length>=a.MinCharLimit||a.EnablePreList||a.EnableCurrentLocation?e(o).show():e(o).hide(),13==t.keyCode&&e(o).hide(),e(n).val().indexOf(c)<0&&e(o).html(""),8!=t.keyCode&&46!=t.keyCode||(c="",d=""),c!=e(n).val()&&(a.OnTextChange&&a.OnTextChange(e(n).val()),I(null,null),c=e(n).val(),"none"!=e(o).css("display")&&(""!=a.LoadingImageUrl&&e(n).val().length>=a.MinCharLimit&&e(o).html('<img src="'+a.LoadingImageUrl+'" />'),setTimeout((function(){C()}),500))))})),e(n).focus((function(){if(parseInt(o.css("width"))!=b(e(n))&&o.css("width",b(e(n))),parseInt(o.css("top"))!=L(e(n))&&o.css("top",L(e(n))),a.MultiSelect)if(s.find("a.agora-onesearch-multi-sel-item-close").length>0){var l=e("<div>").html(e(s.html()));e(l).find("a.agora-onesearch-multi-sel-item-close").each((function(){e(this).attr("onclick","javascript:$('#"+t.MultiSelectBoxId+" #"+e(this).attr("id")+"').trigger('click')")})),a.MultiSelectShowHelpText?a.HelpText='<div style="padding:7px"><font style="color:red">You have already selected</font>'+(a.StickyMode?'<a class="CloseArea" href="javascript:void(0);" title="Click here to hide selected filters." onclick="$(\'#'+e(n).attr("id")+"_OneSearch').hide();\">Close</a>":"")+'<hr style="margin:0px 0px 7px 0px" />'+l.html()+"</div>":a.EnableCurrentLocation&&e(l).append(g())}else a.HelpText="",a.EnableCurrentLocation&&(0==e(o).find("[data-location-search]").length&&e(o).append(g()),e(o).show());a.EnablePreList?(C(),e(o).show()):!a.MultiSelect&&a.EnableCurrentLocation?(0==e(o).find("[data-location-search]").length&&e(o).append(g()),console.log(g()),e(o).show()):""!=a.HelpText&&""==e(n).val()&&(e(o).html(a.HelpText),parseInt(o.css("width"))!=b(e(n))&&o.css("width",b(e(n))),parseInt(o.css("top"))!=L(e(n))&&o.css("top",L(e(n))),e(o).show())})),e(n).blur((function(){a.AutoSelectFirstItem&&e(n).val().length>0&&!a.MultiSelect&&setTimeout((function(){var t=e(n).data("is-manual-select");void 0!==t&&0!=t||O(0,!0,!0),e(n).data("is-manual-select",!1)}),50),setTimeout((function(){a.TestMode?(e(o).find("[data-location-search]").length>0&&a.TestMode||a.StickyMode&&0==e(o).find("div.agora-onesearch-multi-sel-item-cont").length)&&(e(o).html(""),e(o).hide(),e(o).parent().removeClass("is-dirty")):(e(o).html(""),e(o).hide(),0==e(n).val().length&&e(o).parent().removeClass("is-dirty"))}),300)})),C(),1==a.AnimatePlaceholderText&&""==e(n).val()&&AnimatePlaceholderText(e(n),"",0)}(e(this))}));function g(){return a.EnableCurrentLocation&&(document.location.protocol.toLowerCase().indexOf("https")>-1||document.location.hostname.indexOf("localhost")>-1)?e("<a>").html('<i class="aga aga-location"></i>'+e(n).attr("EnableCurrentLocationLabel")).css("display","block").css("width","100%").css("padding","3px").css("color","red").attr("idx",-1).addClass("get-my-direction").attr("data-location-search","").mouseover((function(){e(this).css("background-color:red"),e(this).addClass(a.HighlightItemCss)})).click((function(){S(e(this).attr("idx"))})).on("tap",(function(){S(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(a.HighlightItemCss)})):null}function S(t){navigator.geolocation&&navigator.geolocation.getCurrentPosition((function(t){e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLAT"]').val(t.coords.latitude),e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLONG"]').val(t.coords.longitude),e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RDS"]').val(null!=e(n).attr("DefaultSearchRadius")&&"0"!=e(n).attr("DefaultSearchRadius")?e(n).attr("DefaultSearchRadius"):"5"),f=!0,a.OnSelect&&a.OnSelect({k:t.coords.latitude+"|"+t.coords.longitude,n:"IDCLATITUDE|IDCLONGITUDE",rt:"LOCATION"}),a.OnSuccess&&a.OnSuccess()})),O(t)}function C(t,s){(d!=e(n).val()||a.EnablePreList||null!=t)&&(console.log(u),null!=u&&null==l&&u.abort(),l=null!=t?t:null,e(n).val().length<a.MinCharLimit?c="":d=e(n).val(),null==t&&!a.EnablePreList&&e(n).val().length<a.MinCharLimit||(a.AutoSelectFirstItem&&(e(r).val(""),e(n).data("is-manual-select",!1)),_searchParam=e(n).val().length<a.MinCharLimit?"":e(n).val(),_searchKeyword=(e(n).val().length<a.MinCharLimit?"":e(n).val().replace(/#/g,"%23"))+"&t="+(new Date).getTime(),null!=t&&t.length>0&&(_searchParam=_searchKeyword="LOOKUP_LABEL::"+t),u=e.ajax({type:"POST",url:a.ServiceUrl+"?Keyword="+_searchKeyword,data:{Keyword:_searchParam,SearchMode:a.SearchMode,OneSearchName:a.OneSearchName,Region:a.Region,Locale:a.Locale,AdditionalWhere:e(n).attr("AdditionalWhere")},dataType:"json",success:function(l){if(null==t||null==s)if(h=l,m=0,e(o).html(""),null!=l&&0!=l.length){var r="",c="",d=null,u="",p="";for(i=0;i<l.length;i++){if(r=w(l[i].l,e(n).val()),null!=(c=M(a.OneSearchDS,l[i].rt,l[i].n))&&null!=c.ItemTemplate&&""!=c.ItemTemplate)r=(r=c.ItemTemplate.replace("{$l}",w(l[i].l,e(n).val()))).replace("{$d}",l[i].d);else if(null!=c&&c.ItemTemplates.length>0)for(j=0;j<c.ItemTemplates.length;j++)c.ItemTemplates[j].Locale==a.Locale&&(r=(r=c.ItemTemplates[j].Template.replace("{$l}",w(l[i].l,e(n).val()))).Template.replace("{$d}",l[i].d));d=e("<a>").html(r).css("display","block").css("width","100%").css("padding","3px").css("text-decoration","none").css("color","black").attr("idx",i).mouseover((function(){e(this).addClass(a.HighlightItemCss)})).mousedown((function(){e(n).data("is-manual-select",!0)})).click((function(){O(e(this).attr("idx"))})).on("tap",(function(){e(n).data("is-manual-select",!0),O(e(this).attr("idx"))})).mouseout((function(){e(this).removeClass(a.HighlightItemCss)})),0==i&&a.AutoSelectFirstItem&&T(i),a.EnableCategoryView?(p!=l[i].g&&((u=e("<div>").addClass("OneSearchBox-category-"+l[i].g)).append(e("<span>").html(l[i].g)),p=l[i].g),u.append(d),e(o).append(u),0==i&&e(o)[i].className.includes("OneSearchBox-")&&(e(o)[i].className=e(o)[i].className.replace(/\bOneSearchBox-[A-Za-z]*\b/g,"")),e(o).addClass("OneSearchBox-"+l[i].g)):e(o).append(d)}}else e(o).hide();else s(l)},statusCode:{404:function(){console.log("Service (agoraOneSearch) not found!")}}})))}function y(){if(!(null==h||h.length<m-1||m<=0)){var t,l="",i=M(a.OneSearchDS,h[m-1].rt,h[m-1].n);null!=i&&""!=i.ItemTemplate&&(l=null!=i.Selector&&null!=i.Selector&&"k"==i.Selector?h[m-1].k:h[m-1].l),t=h[m-1].l,a.MultiSelect?e(n).val(""):e(n).val(t),c=e(n).val(),I(h[m-1],l),a.AutoSelectFirstItem&&T(m-1),a.OnSelect&&a.OnSelect(h[m-1]),m=0,a.TestMode||e(o).html("")}}function O(t,l,i){var s="",d="";if(null!=l&&null!=l||(l=!1),null!=i&&null!=i||(i=!1),void 0!==h&&null!=h&&0!=h.length){var u=M(a.OneSearchDS,h[t].rt,h[t].n);null!=u&&""!=u.ItemTemplate&&(d=null!=u.Selector&&null!=u.Selector&&"k"==u.Selector?h[t].k:h[t].l),s=h[t].l,1!=i||s.toLowerCase().startsWith(e(n).val().toLowerCase())?(a.MultiSelect?(e(n).val(""),a.AutoSelectFirstItem&&e(r).val("")):(null!=u&&1!=u.SkipSelect?e(n).val(s):e(n).val(""),a.AutoSelectFirstItem&&e(r).val("")),c=e(n).val(),t>=0&&f&&(e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLAT"]').val(""),e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RLONG"]').val(""),e('input[type="hidden"][id="'+e(n).attr("id")+'_GPS_RDS"]').val(""),e("#draw_search").click()),null!=u&&1!=u.SkipSelect&&I(h[t],d),a.OnSelect&&a.OnSelect(h[t]),a.TestMode||l||e(o).html(""),a.MultiSelect&&(a.EnablePreList||setTimeout((function(){e(n).focus()}),200))):e(r).val("")}}function T(t){var l="";if(null!=e(n).val()&&""!=e(n).val()&&void 0!==h&&null!=h&&0!=h.length){var i=M(a.OneSearchDS,h[t].rt,h[t].n);if(null!=i&&""!=i.ItemTemplate&&(null!=i.Selector&&null!=i.Selector&&"k"==i.Selector?h[t].k:h[t].l),(l=h[t].l).toLowerCase().replace(/\,/g,"").startsWith(e(n).val().toLowerCase().replace(/\,/g,""))){var o=new RegExp(e(n).val(),"ig");e(r).val(l.replace(o,e(n).val())),c=e(n).val()}else e(r).val("")}}function I(t,l,r,o){if(a.MultiSelect){if(null==t)return;var c=e("#"+e(n).attr("id")+"_"+t.rt+"_"+t.n),d=u=l.split(";");if(null!=o&&null!=o)var u=o.split(";");var h=M(a.OneSearchDS,t.rt,t.n);for(i=0;i<u.length&&null!=h;i++)if(!(u[i].length<2)&&(-1==(";"+c.val().toLowerCase()+";").indexOf(";"+u[i].toLowerCase()+";")||r)){r||c.val(c.val()+";"+u[i]);var p=e("<div>").addClass("agora-onesearch-multi-sel-item-cont").attr("id","multiitem"+e(n).attr("id")+"_"+t.rt+"_"+t.n+u[i].replace(/\ /g,"_").replace(/\-/g,"_").replace(/[^A-z0-9]/g,"_")).append(e("<a>").addClass("agora-onesearch-multi-sel-item-close").attr("title","Click here to hide this area filter.").attr("id","multiitem_close_"+e(n).attr("id")+"_"+t.rt+"_"+t.n+u[i].replace(/\ /g,"_").replace(/\-/g,"_").replace(/[^A-z0-9]/g,"_")).attr("val",d[i]).html('<i class="aga aga-close"></i>').click((function(){_(e(this),t,e(this).attr("val"))}))).append(e("<a>").html(h.MultiItemTemplate.replace("{$l}",null!=t&&null!=t.l?t.l:u[i]).replace("{$d}",null!=t&&null!=t.d?t.d:u[i])));s.append(p)}!r&&a.OnMultiSelectRemove&&a.OnMultiSelectRemove()}else{if(e('input[type="hidden"][id^="'+e(n).attr("id")+'"]').each((function(){e(this).val("")})),null==t)return;e("#"+e(n).attr("id")+"_"+t.rt+"_"+t.n).val(l)}}function _(t,l,i){var r=e("#"+e(n).attr("id")+"_"+l.rt+"_"+l.n);0!=r.val().indexOf(";")&&r.val(";"+r.val()),r.val(r.val().replace(";"+i,"")),e(t).parent().remove(),""!=r.val()&&0!=e(o).find("div.agora-onesearch-multi-sel-item-cont").length||(e(o).html(""),e(o).hide()),a.OnMultiSelectRemove&&a.OnMultiSelectRemove()}function x(t){v=!0,t>0?m<e(o).find("a").length&&m++:m>1&&m--,e(o).find("a").each((function(){e(this).removeClass(a.HighlightItemCss)})),e(o).find(a.EnableCategoryView?"a[idx="+m+"]":"a:nth-child("+m+")").addClass(a.HighlightItemCss)}function b(e){if(null==e||0==e.length)return 0;var t=e.width();return t+=parseInt(e.css("padding-left"),10)+parseInt(e.css("padding-right"),10),t+=parseInt(e.css("borderLeftWidth"),10)+parseInt(e.css("borderRightWidth"),10),""!=a.ParentContainer&&(t+=e.offset().left),t}function L(e){if(null==e||0==e.length)return 0;var t=e.height();return t+=parseInt(e.css("padding-top"),10)+parseInt(e.css("padding-bottom"),10),t+=parseInt(e.css("borderTopWidth"),10)+parseInt(e.css("borderBottomWidth"),10),t+=e.position().top,""!=a.ParentContainer&&(t+=e.offset().top),t}function M(e,t,l){if(null!=p[t+"_"+l])return p[t+"_"+l];for(k=0;k<e.RecordTypes.length;k++)for(j=0;e.RecordTypes[k].Name==t&&j<e.RecordTypes[k].Fields.length;j++)if(e.RecordTypes[k].Fields[j].Name==l)return p[t+"_"+l]=e.RecordTypes[k].Fields[j],e.RecordTypes[k].Fields[j];return null}function w(e,t){return e.replace(new RegExp("("+function(e){return(e+"").replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g,"\\$1")}(t)+")","gi"),"<strong>$1</strong>")}}})}},t={};function l(a){var n=t[a];if(void 0!==n)return n.exports;var i=t[a]={exports:{}};return e[a](i,i.exports,l),i.exports}l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{for(var a in t)l.o(t,a)&&!l.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};return(()=>{"use strict";l.r(a);l(803)})(),a})()));
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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T0MsWUFBYSxDQUFFN0MsTUFBTyxXQUU3RG1DLE9BQU9DLGVBQWVoTyxFQUFTLGFBQWMsQ0FBRTRMLE9BQU8sR0FBTyxFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vLi4vLi4vQWdvcmEgNC4wL0lkY0dsb2JhbC5BZ29yYS5KYXZhU2NyaXB0LlBsdWdJbi9NYXhPbmVTZWFyY2guanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Il0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSB7XG5cdFx0dmFyIGEgPSBmYWN0b3J5KCk7XG5cdFx0Zm9yKHZhciBpIGluIGEpICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBleHBvcnRzIDogcm9vdClbaV0gPSBhW2ldO1xuXHR9XG59KShzZWxmLCAoKSA9PiB7XG5yZXR1cm4gIiwi77u/KGZ1bmN0aW9uICgkKSB7XHJcblxyXG4gICAgLy9BdHRhY2ggdGhpcyBuZXcgbWV0aG9kIHRvIGpRdWVyeVxyXG4gICAgJC5mbi5leHRlbmQoe1xyXG5cclxuICAgICAgICAvL1RoaXMgaXMgd2hlcmUgeW91IHdyaXRlIHlvdXIgcGx1Z2luJ3MgbmFtZVxyXG4gICAgICAgIE9uZVNlYXJjaDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuXHJcbiAgICAgICAgICAgIC8vU2V0IHRoZSBkZWZhdWx0IHZhbHVlcywgdXNlIGNvbW1hIHRvIHNlcGFyYXRlIHRoZSBzZXR0aW5ncywgZXhhbXBsZTpcclxuICAgICAgICAgICAgdmFyIF9kZWZhdWx0cyA9IHtcclxuICAgICAgICAgICAgICAgIFNlcnZpY2VVcmw6ICcnLFxyXG4gICAgICAgICAgICAgICAgT25lU2VhcmNoTmFtZTogJycsXHJcbiAgICAgICAgICAgICAgICBPbmVTZWFyY2hEUzogbnVsbCxcclxuICAgICAgICAgICAgICAgIE1pbkNoYXJMaW1pdDogMyxcclxuICAgICAgICAgICAgICAgIEVuYWJsZUN1cnJlbnRMb2NhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBFbmFibGVQcmVMaXN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIEF1dG9TZWxlY3RGaXJzdEl0ZW06IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgUmVzdWx0TGltaXQ6IDEwLFxyXG4gICAgICAgICAgICAgICAgRW5hYmxlVG91Y2g6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgRGF0YVNvdXJjZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIERhdGFTb3VyY2VDb250cm9sOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgQ29udGFpbmVyQ3NzOiAnJyxcclxuICAgICAgICAgICAgICAgIEl0ZW1Dc3M6ICcnLFxyXG4gICAgICAgICAgICAgICAgSGlnaGxpZ2h0SXRlbUNzczogJycsXHJcbiAgICAgICAgICAgICAgICBSZWdpb246ICdVUycsXHJcbiAgICAgICAgICAgICAgICBMb2NhbGU6ICdOT05FJyxcclxuICAgICAgICAgICAgICAgIEhlbHBUZXh0OiAnJyxcclxuICAgICAgICAgICAgICAgIEFuaW1hdGVQbGFjZWhvbGRlclRleHQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgTXVsdGlTZWxlY3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgTXVsdGlTZWxlY3RCb3hJZDogJycsXHJcbiAgICAgICAgICAgICAgICBNdWx0aVNlbGVjdFNob3dIZWxwVGV4dDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIE11bHRpS2V5d29yZERlbGltaXRlcjogJycsXHJcbiAgICAgICAgICAgICAgICBMb2FkaW5nSW1hZ2VVcmw6ICcnLFxyXG4gICAgICAgICAgICAgICAgUGFyZW50Q29udGFpbmVyOiAnJyxcclxuICAgICAgICAgICAgICAgIEJlZm9yZUNhbGw6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBBZnRlckNhbGw6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPblN1Y2Nlc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPbkVycm9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgT25TZWxlY3Q6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPblRleHRDaGFuZ2U6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPblNlYXJjaDogbnVsbCxcclxuICAgICAgICAgICAgICAgIE9uSW5jcmVtZW50YWxTZWFyY2g6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBPbk11bHRpU2VsZWN0UmVtb3ZlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgU2VhcmNoTW9kZTogJ0RhdGFiYXNlJywgLy8gQ2FjaGUsIERhdGFiYXNlLCBTbWFydFxyXG4gICAgICAgICAgICAgICAgVGVzdE1vZGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgU3RpY2t5TW9kZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBFbmFibGVDYXRlZ29yeVZpZXc6IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBfb3B0aW9ucyA9ICQuZXh0ZW5kKF9kZWZhdWx0cywgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHZhciBfdGFyZ2V0Q29udHJvbCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfdGFyZ2V0QXV0b0NvbnRyb2wgPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgX29uZVNlYXJjaEJveCA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfTXVsdGlTZWxlY3RCb3ggPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgdmFyIF9sYXN0S2V5d29yZCA9ICcnO1xyXG4gICAgICAgICAgICB2YXIgX2xhc3RTZWFyY2h3b3JkID0gJyc7XHJcblxyXG4gICAgICAgICAgICB2YXIgX3JlcXVlc3QgPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgX3Jlc3Bvc2VDYWNoZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHZhciBfaXRlbVRlcGxhdGVDYWNoZSA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgX2hpZ2hsaWdodElkeCA9IDA7XHJcblxyXG4gICAgICAgICAgICB2YXIgX2lzT25BcnJvd1NlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgX2lzTG9jYXRpb25TZXJhY2hFbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAvL0l0ZXJhdGUgb3ZlciB0aGUgY3VycmVudCBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50c1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIEluaXQoJCh0aGlzKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gSW5pdChvYmopIHtcclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5TdGlja3lNb2RlICYmICFfb3B0aW9ucy5UZXN0TW9kZSkgX29wdGlvbnMuVGVzdE1vZGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIF90YXJnZXRDb250cm9sID0gb2JqO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RhcmdldEF1dG9Db250cm9sID0gJCgnaW5wdXRbaWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfQVVUT19JVEVNXCJdJylcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBkaXNhYmxlIGJyb3dzZXIgYXV0b2NvbXBsZXRlIG9uIGlucHV0XHJcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TZWN1cml0eS9TZWN1cmluZ195b3VyX3NpdGUvVHVybmluZ19vZmZfZm9ybV9hdXRvY29tcGxldGlvblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignYXV0b2NvbXBsZXRlJywgJ25vcGUnKTtcclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ25hbWUnLCAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpLnJlcGxhY2UoL1xcJC9naSwgJ18nKSArIChuZXcgRGF0ZSgpKS52YWx1ZU9mKCkpO1xyXG4gICAgICAgICAgICAgICAgd2luZG93Lm9ucG9wc3RhdGUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5hdHRyKCduYW1lJywgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKS5yZXBsYWNlKC9cXCQvZ2ksICdfJykgKyAobmV3IERhdGUoKSkudmFsdWVPZigpKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBfb25lU2VhcmNoQm94ID0gJCgnPGRpdj4nKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcsICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX09uZVNlYXJjaCcpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNzcygncG9zaXRpb24nLCAoX29wdGlvbnMuRW5hYmxlVG91Y2ggPyAncmVsYXRpdmUnIDogJ2Fic29sdXRlJykpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNzcygndG9wJywgZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKVxyXG4gICAgICAgICAgICAgICAgICAgIC5jc3MoJ3dpZHRoJywgZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNzcygnZGlzcGxheScsICdub25lJylcclxuICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoX29wdGlvbnMuQ29udGFpbmVyQ3NzKVxyXG4gICAgICAgICAgICAgICAgICAgIC5odG1sKF9vcHRpb25zLkhlbHBUZXh0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuUGFyZW50Q29udGFpbmVyICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBfb3B0aW9ucy5QYXJlbnRDb250YWluZXIpLmFwcGVuZChfb25lU2VhcmNoQm94KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX29uZVNlYXJjaEJveC5pbnNlcnRBZnRlcigkKF90YXJnZXRDb250cm9sKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuY2xvc2VzdCgnZGl2JykuY2xpY2soZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkuY3NzKCdkaXNwbGF5JykgPT0gJ2Jsb2NrJyAmJiAkKF90YXJnZXRDb250cm9sKS5odG1sKCkgIT0gJycpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuY2xhc3NOYW1lID09ICdDbG9zZUFyZWEnKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgLy9NZGxSZWxvYWRDb250cm9sU3RhdGUoJCh0aGlzKSwgJCh0aGlzKS5jbG9zZXN0KCdbZGF0YS1zZWFyY2hdJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghX29wdGlvbnMuRW5hYmxlUHJlTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk11bHRpU2VsZWN0Qm94SWQgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX011bHRpU2VsZWN0Qm94ID0gJCgnIycgKyBfb3B0aW9ucy5NdWx0aVNlbGVjdEJveElkKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX011bHRpU2VsZWN0Qm94ICE9IG51bGwgJiYgX29wdGlvbnMuTXVsdGlTZWxlY3RCb3hDc3MgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX011bHRpU2VsZWN0Qm94LmFkZENsYXNzKF9vcHRpb25zLk11bHRpU2VsZWN0Qm94Q3NzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlbG9hZE11bHRpU2VsZWN0T25Mb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy9jaGVjayBpcyBsb2NhdGlvbiBzZWFyY2ggZW5hYmxlZFxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBsYXQgPSAkKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdW2lkPVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnX0dQU19STEFUXCJdJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxuZyA9ICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JMT05HXCJdJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJkcyA9ICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JEU1wiXScpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGxhdCkgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIChsbmcpICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiAocmRzKSAhPSAndW5kZWZpbmVkJyAmJiBsYXQgIT0gJycgJiYgbG5nICE9ICcnICYmIHJkcyAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmtleWRvd24oZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGUua2V5Q29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDkgLyogdGFiICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzIC8qIGVudGVyICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0gJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaGlnaGxpZ2h0SWR4ID4gMCkgc2VsZWN0SGlnaGxpZ2h0ZWRJdGVtKCk7IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKDAsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2lzT25BcnJvd1NlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RIaWdobGlnaHRlZEl0ZW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXNPbkFycm93U2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FzZSAzNyAvKiBsZWZ0ICovOlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM4IC8qIHVwICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0SXRlbSgtMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOSAvKiByaWdodCAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0SXRlbSgwLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0MCAvKiBkb3duICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0SXRlbSgxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI3IC8qIGVzY2FwZSAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc3Bvc2VDYWNoZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbVRlcGxhdGVDYWNoZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2hpZ2hsaWdodElkeCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmtleXByZXNzKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcpKSAhPSBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfb25lU2VhcmNoQm94LmNzcygnd2lkdGgnLCBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygndG9wJykpICE9IGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKCQoX3RhcmdldENvbnRyb2wpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfb25lU2VhcmNoQm94LmNzcygndG9wJywgZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICQoX3RhcmdldENvbnRyb2wpLmtleXVwKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAyNykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGUua2V5Q29kZSA9PSA4IHx8IGUua2V5Q29kZSA9PSA0NiB8fCBlLmtleUNvZGUgPT0gODggfHwgZS5rZXlDb2RlID09IDg2KSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChudWxsLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIF90YXJnZXRBdXRvQ29udHJvbC52YWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9pZiAoZS5rZXlDb2RlID09IDEzICYmICQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA+IDAgJiYgJChfb25lU2VhcmNoQm94KS5jc3MoJ2Rpc3BsYXknKSA9PSAnbm9uZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICBpZiAoX29wdGlvbnMuT25TZWFyY2gpIF9vcHRpb25zLk9uU2VhcmNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy99XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPiAwICYmICFfaXNPbkFycm93U2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5PblNlYXJjaCkgX29wdGlvbnMuT25TZWFyY2goKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PSAxMyAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPiAwICYmIF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9oaWdobGlnaHRJZHggPiAwKSBzZWxlY3RIaWdobGlnaHRlZEl0ZW0oKTsgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKDAsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX29wdGlvbnMuT25JbmNyZW1lbnRhbFNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfb3B0aW9ucy5PbkluY3JlbWVudGFsU2VhcmNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID49IF9vcHRpb25zLk1pbkNoYXJMaW1pdCB8fCBfb3B0aW9ucy5FbmFibGVQcmVMaXN0IHx8IF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikgJChfb25lU2VhcmNoQm94KS5zaG93KCk7IGVsc2UgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkuaW5kZXhPZihfbGFzdEtleXdvcmQpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PSA4IHx8IGUua2V5Q29kZSA9PSA0Nikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfbGFzdEtleXdvcmQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2xhc3RTZWFyY2h3b3JkID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBjaGFuZ2UgdGhlIGxhc3QgYW5kIGN1cnJlbnQgdmFsdWUgaW4gdGhlIGtleXdvcmQsIHRoZW4gbm8gbmVlZCB0byBjb250aW51ZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfbGFzdEtleXdvcmQgPT0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk9uVGV4dENoYW5nZSkgX29wdGlvbnMuT25UZXh0Q2hhbmdlKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgYXNzb2NpYXRlZCBjb250cm9scyBzaW5jZSB0aGUga2V5d29yZCBoYXMgYmVlbiBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICAgICAgYmluZEFzc29jaWF0ZUNvbnRyb2wobnVsbCwgbnVsbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCBjdXJyZW50IHZhbHVlIG9mIHRoZSB0ZXh0IGJvb3ggYXMgbGFzdCB2YWx1ZS9rZXl3b3JkXHJcbiAgICAgICAgICAgICAgICAgICAgX2xhc3RLZXl3b3JkID0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBzdWdnZXN0aW9uIGJveCBpcyBoaWRkZW4gdGhlbiBubyBuZWVkIHRvIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQoX29uZVNlYXJjaEJveCkuY3NzKCdkaXNwbGF5JykgPT0gJ25vbmUnKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5Mb2FkaW5nSW1hZ2VVcmwgIT0gJycgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoID49IF9vcHRpb25zLk1pbkNoYXJMaW1pdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJzxpbWcgc3JjPVwiJyArIF9vcHRpb25zLkxvYWRpbmdJbWFnZVVybCArICdcIiAvPicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEtleXdvcmQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuZm9jdXMoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3dpZHRoJykpICE9IGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcsIGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnKSkgIT0gZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnLCBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX011bHRpU2VsZWN0Qm94LmZpbmQoJ2EuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNsb3NlJykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90ZW1wQ29udE11bHQgPSAkKCc8ZGl2PicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoJChfTXVsdGlTZWxlY3RCb3guaHRtbCgpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90ZW1wQ29udE11bHQpLmZpbmQoJ2EuYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNsb3NlJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6JChcXCcjJyArIG9wdGlvbnMuTXVsdGlTZWxlY3RCb3hJZCArICcgIycgKyAkKHRoaXMpLmF0dHIoJ2lkJykgKyAnXFwnKS50cmlnZ2VyKFxcJ2NsaWNrXFwnKScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5NdWx0aVNlbGVjdFNob3dIZWxwVGV4dCkgX29wdGlvbnMuSGVscFRleHQgPSAnPGRpdiBzdHlsZT1cInBhZGRpbmc6N3B4XCI+PGZvbnQgc3R5bGU9XCJjb2xvcjpyZWRcIj5Zb3UgaGF2ZSBhbHJlYWR5IHNlbGVjdGVkPC9mb250PicgKyAoKF9vcHRpb25zLlN0aWNreU1vZGUpID8gJzxhIGNsYXNzPVwiQ2xvc2VBcmVhXCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiB0aXRsZT1cIkNsaWNrIGhlcmUgdG8gaGlkZSBzZWxlY3RlZCBmaWx0ZXJzLlwiIG9uY2xpY2s9XCIkKFxcJyMnICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfT25lU2VhcmNoJyArICdcXCcpLmhpZGUoKTtcIj5DbG9zZTwvYT4nIDogJycpICsgJzxociBzdHlsZT1cIm1hcmdpbjowcHggMHB4IDdweCAwcHhcIiAvPicgKyBfdGVtcENvbnRNdWx0Lmh0bWwoKSArICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUN1cnJlbnRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF90ZW1wQ29udE11bHQpLmFwcGVuZChnZXRDdXJyZW50TG9jYXRpb25PYmplY3QoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX29wdGlvbnMuSGVscFRleHQgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVDdXJyZW50TG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJChfb25lU2VhcmNoQm94KS5maW5kKCdbZGF0YS1sb2NhdGlvbi1zZWFyY2hdJykubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuYXBwZW5kKGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZVByZUxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoS2V5d29yZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFfb3B0aW9ucy5NdWx0aVNlbGVjdCAmJiBfb3B0aW9ucy5FbmFibGVDdXJyZW50TG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQoX29uZVNlYXJjaEJveCkuZmluZCgnW2RhdGEtbG9jYXRpb24tc2VhcmNoXScpLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hcHBlbmQoZ2V0Q3VycmVudExvY2F0aW9uT2JqZWN0KCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhnZXRDdXJyZW50TG9jYXRpb25PYmplY3QoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX29wdGlvbnMuSGVscFRleHQgIT0gJycgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkgPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKF9vcHRpb25zLkhlbHBUZXh0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChfb25lU2VhcmNoQm94LmNzcygnd2lkdGgnKSkgIT0gZ2V0VG90YWxXaWR0aE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd3aWR0aCcsIGdldFRvdGFsV2lkdGhPZkNvbnRyb2woJChfdGFyZ2V0Q29udHJvbCkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoX29uZVNlYXJjaEJveC5jc3MoJ3RvcCcpKSAhPSBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vbmVTZWFyY2hCb3guY3NzKCd0b3AnLCBnZXRUb3RhbEhlaWdodE9mQ29udHJvbCgkKF90YXJnZXRDb250cm9sKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5ibHVyKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSAmJiAkKF90YXJnZXRDb250cm9sKS52YWwoKS5sZW5ndGggPiAwICYmICFfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc01hbnVhbFNlbGVjdCA9ICQoX3RhcmdldENvbnRyb2wpLmRhdGEoJ2lzLW1hbnVhbC1zZWxlY3QnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGlzTWFudWFsU2VsZWN0KSA9PSAndW5kZWZpbmVkJyB8fCBpc01hbnVhbFNlbGVjdCA9PSBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJdGVtKDAsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfdGFyZ2V0Q29udHJvbCkuZGF0YSgnaXMtbWFudWFsLXNlbGVjdCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfb3B0aW9ucy5UZXN0TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaXMtZGlydHknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoJChfb25lU2VhcmNoQm94KS5maW5kKCdbZGF0YS1sb2NhdGlvbi1zZWFyY2hdJykubGVuZ3RoID4gMCAmJiBfb3B0aW9ucy5UZXN0TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaXMtZGlydHknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfb3B0aW9ucy5TdGlja3lNb2RlICYmICQoX29uZVNlYXJjaEJveCkuZmluZCgnZGl2LmFnb3JhLW9uZXNlYXJjaC1tdWx0aS1zZWwtaXRlbS1jb250JykubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveCkucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2lzLWRpcnR5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2VhcmNoS2V5d29yZCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BbmltYXRlUGxhY2Vob2xkZXJUZXh0ID09IHRydWUgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkgPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICBBbmltYXRlUGxhY2Vob2xkZXJUZXh0KCQoX3RhcmdldENvbnRyb2wpLCAnJywgMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhdGlvbk9iamVjdCgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfb3B0aW9ucy5FbmFibGVDdXJyZW50TG9jYXRpb24gJiYgKGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignaHR0cHMnKSA+IC0xIHx8IGRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lLmluZGV4T2YoJ2xvY2FsaG9zdCcpID4gLTEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJzxhPicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5odG1sKCc8aSBjbGFzcz1cImFnYSBhZ2EtbG9jYXRpb25cIj48L2k+JyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ0VuYWJsZUN1cnJlbnRMb2NhdGlvbkxhYmVsJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygncGFkZGluZycsICczcHgnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdjb2xvcicsICdyZWQnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignaWR4JywgLTEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnZ2V0LW15LWRpcmVjdGlvbicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdkYXRhLWxvY2F0aW9uLXNlYXJjaCcsICcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubW91c2VvdmVyKGZ1bmN0aW9uICgpIHsgJCh0aGlzKS5jc3MoJ2JhY2tncm91bmQtY29sb3I6cmVkJyk7ICQodGhpcykuYWRkQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljayhmdW5jdGlvbiAoKSB7IHNlYXJjaE5lYXJieSgkKHRoaXMpLmF0dHIoJ2lkeCcpKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm9uKCd0YXAnLCBmdW5jdGlvbiAoKSB7IHNlYXJjaE5lYXJieSgkKHRoaXMpLmF0dHIoJ2lkeCcpKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm1vdXNlb3V0KGZ1bmN0aW9uICgpIHsgJCh0aGlzKS5yZW1vdmVDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTsgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gY2xlYXJOZWFyYnkoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX2lzTG9jYXRpb25TZXJhY2hFbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxBVFwiXScpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxPTkdcIl0nKS52YWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JEU1wiXScpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnI2RyYXdfc2VhcmNoJykuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoTmVhcmJ5KGlkeCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5nZW9sb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rpb24gKHBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JMQVRcIl0nKS52YWwocG9zaXRpb24uY29vcmRzLmxhdGl0dWRlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXVtpZD1cIicgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ19HUFNfUkxPTkdcIl0nKS52YWwocG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWQ9XCInICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfR1BTX1JEU1wiXScpLnZhbCgoJChfdGFyZ2V0Q29udHJvbCkuYXR0cignRGVmYXVsdFNlYXJjaFJhZGl1cycpICE9IG51bGwgJiYgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignRGVmYXVsdFNlYXJjaFJhZGl1cycpICE9ICcwJykgPyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdEZWZhdWx0U2VhcmNoUmFkaXVzJykgOiAnNScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaXNMb2NhdGlvblNlcmFjaEVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX29wdGlvbnMuT25TZWxlY3QpIF9vcHRpb25zLk9uU2VsZWN0KHsgXCJrXCI6IHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZSArICd8JyArIHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUsIFwiblwiOiBcIklEQ0xBVElUVURFfElEQ0xPTkdJVFVERVwiLCBcInJ0XCI6IFwiTE9DQVRJT05cIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLk9uU3VjY2VzcykgX29wdGlvbnMuT25TdWNjZXNzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0oaWR4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcHJldmlvdXNsb29rdXBsYWJlbD1udWxsO1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBzZWFyY2hLZXl3b3JkKGxvb2t1cExhYmVsLCBhZnRlclNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgIGlmIChfbGFzdFNlYXJjaHdvcmQgPT0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCkgJiYgIV9vcHRpb25zLkVuYWJsZVByZUxpc3QgJiYgbG9va3VwTGFiZWwgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coX3JlcXVlc3QpXHJcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhbHJlYWR5IGEgcmVxdWVzdCBub3QgeWV0IGNvbXBsZXRlZCB0aGVuIHRoYXQgbmVlZCB0byBzdG9wL2Fib3J0IGJlZm9yZSBzdGFhcnRpbmcgbmV3IG9uZVxyXG4gICAgICAgICAgICAgICAgaWYgKF9yZXF1ZXN0ICE9IG51bGwgJiYgcHJldmlvdXNsb29rdXBsYWJlbCA9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIF9yZXF1ZXN0LmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9va3VwTGFiZWwgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2xvb2t1cGxhYmVsID0gbG9va3VwTGFiZWw7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNsb29rdXBsYWJlbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLmxlbmd0aCA8IF9vcHRpb25zLk1pbkNoYXJMaW1pdCkgX2xhc3RLZXl3b3JkID0gJyc7IGVsc2UgX2xhc3RTZWFyY2h3b3JkID0gJChfdGFyZ2V0Q29udHJvbCkudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGxvb2t1cExhYmVsID09IG51bGwgJiYgIV9vcHRpb25zLkVuYWJsZVByZUxpc3QgJiYgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoIDwgX29wdGlvbnMuTWluQ2hhckxpbWl0KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF9zZWFyY2hQYXJhbSA9ICgoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoIDwgX29wdGlvbnMuTWluQ2hhckxpbWl0KSA/ICcnIDogJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpXHJcbiAgICAgICAgICAgICAgICBfc2VhcmNoS2V5d29yZCA9ICgoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkubGVuZ3RoIDwgX29wdGlvbnMuTWluQ2hhckxpbWl0KSA/ICcnIDogJChfdGFyZ2V0Q29udHJvbCkudmFsKCkucmVwbGFjZSgvIy9nLCAnJTIzJykpICsgJyZ0PScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxyXG4gICAgICAgICAgICAgICAgaWYgKGxvb2t1cExhYmVsICE9IG51bGwgJiYgbG9va3VwTGFiZWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9zZWFyY2hQYXJhbSA9IF9zZWFyY2hLZXl3b3JkID0gJ0xPT0tVUF9MQUJFTDo6JyArIGxvb2t1cExhYmVsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF9yZXF1ZXN0ID0gJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBfb3B0aW9ucy5TZXJ2aWNlVXJsICsgXCI/S2V5d29yZD1cIiArIF9zZWFyY2hLZXl3b3JkLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6ICh7IFwiS2V5d29yZFwiOiBfc2VhcmNoUGFyYW0sIFwiU2VhcmNoTW9kZVwiOiBfb3B0aW9ucy5TZWFyY2hNb2RlLCBcIk9uZVNlYXJjaE5hbWVcIjogX29wdGlvbnMuT25lU2VhcmNoTmFtZSwgXCJSZWdpb25cIjogX29wdGlvbnMuUmVnaW9uLCBcIkxvY2FsZVwiOiBfb3B0aW9ucy5Mb2NhbGUsIFwiQWRkaXRpb25hbFdoZXJlXCI6ICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ0FkZGl0aW9uYWxXaGVyZScpIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvb2t1cExhYmVsICE9IG51bGwgJiYgYWZ0ZXJTZWFyY2ggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJTZWFyY2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc3Bvc2VDYWNoZSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9oaWdobGlnaHRJZHggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmh0bWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQgfHwgZGF0YS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlbURhdGEgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9maWVsZCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZW0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2NhdGVnb3J5aXRlbSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2NhdGVvZ29yeW5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlbURhdGEgPSBoaWdobGlnaHRLZXl3b3JkKGRhdGFbaV0ubCwgJChfdGFyZ2V0Q29udHJvbCkudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ZpZWxkID0gZ2V0RmllbGRKc29uKF9vcHRpb25zLk9uZVNlYXJjaERTLCBkYXRhW2ldLnJ0LCBkYXRhW2ldLm4pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJiBfZmllbGQuSXRlbVRlbXBsYXRlICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtRGF0YSA9IF9maWVsZC5JdGVtVGVtcGxhdGUucmVwbGFjZSgneyRsfScsIGhpZ2hsaWdodEtleXdvcmQoZGF0YVtpXS5sLCAkKF90YXJnZXRDb250cm9sKS52YWwoKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtRGF0YSA9IF9pdGVtRGF0YS5yZXBsYWNlKCd7JGR9JywgZGF0YVtpXS5kKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX2ZpZWxkICE9IG51bGwgJiYgX2ZpZWxkLkl0ZW1UZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBfZmllbGQuSXRlbVRlbXBsYXRlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpZWxkLkl0ZW1UZW1wbGF0ZXNbal0uTG9jYWxlID09IF9vcHRpb25zLkxvY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1EYXRhID0gX2ZpZWxkLkl0ZW1UZW1wbGF0ZXNbal0uVGVtcGxhdGUucmVwbGFjZSgneyRsfScsIGhpZ2hsaWdodEtleXdvcmQoZGF0YVtpXS5sLCAkKF90YXJnZXRDb250cm9sKS52YWwoKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZW1EYXRhID0gX2l0ZW1EYXRhLlRlbXBsYXRlLnJlcGxhY2UoJ3skZH0nLCBkYXRhW2ldLmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtID0gJCgnPGE+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaHRtbChfaXRlbURhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnZGlzcGxheScsICdibG9jaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNzcygncGFkZGluZycsICczcHgnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jc3MoJ3RleHQtZGVjb3JhdGlvbicsICdub25lJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdjb2xvcicsICdibGFjaycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2lkeCcsIGkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1vdXNlb3ZlcihmdW5jdGlvbiAoKSB7ICQodGhpcykuYWRkQ2xhc3MoX29wdGlvbnMuSGlnaGxpZ2h0SXRlbUNzcyk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1vdXNlZG93bihmdW5jdGlvbiAoKSB7ICQoX3RhcmdldENvbnRyb2wpLmRhdGEoJ2lzLW1hbnVhbC1zZWxlY3QnLCB0cnVlKTsgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2xpY2soZnVuY3Rpb24gKCkgeyBzZWxlY3RJdGVtKCQodGhpcykuYXR0cignaWR4JykpOyB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vbigndGFwJywgZnVuY3Rpb24gKCkgeyAkKF90YXJnZXRDb250cm9sKS5kYXRhKCdpcy1tYW51YWwtc2VsZWN0JywgdHJ1ZSk7IHNlbGVjdEl0ZW0oJCh0aGlzKS5hdHRyKCdpZHgnKSk7IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1vdXNlb3V0KGZ1bmN0aW9uICgpIHsgJCh0aGlzKS5yZW1vdmVDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTsgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCAmJiBfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1NlbGVjdEl0ZW0oaSwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLkVuYWJsZUNhdGVnb3J5Vmlldykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfY2F0ZW9nb3J5bmFtZSAhPSBkYXRhW2ldLmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhdGVnb3J5aXRlbSA9ICQoJzxkaXY+JykuYWRkQ2xhc3MoJ09uZVNlYXJjaEJveC1jYXRlZ29yeS0nKyBkYXRhW2ldLmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2F0ZWdvcnlpdGVtLmFwcGVuZCAoJCgnPHNwYW4+JykuaHRtbChkYXRhW2ldLmcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhdGVvZ29yeW5hbWUgPSBkYXRhW2ldLmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYXRlZ29yeWl0ZW0uYXBwZW5kKF9pdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmFwcGVuZChfY2F0ZWdvcnlpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwICYmICQoX29uZVNlYXJjaEJveClbaV0uY2xhc3NOYW1lLmluY2x1ZGVzKCdPbmVTZWFyY2hCb3gtJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX29uZVNlYXJjaEJveClbaV0uY2xhc3NOYW1lID0gJChfb25lU2VhcmNoQm94KVtpXS5jbGFzc05hbWUucmVwbGFjZSgvXFxiT25lU2VhcmNoQm94LVtBLVphLXpdKlxcYi9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hZGRDbGFzcygnT25lU2VhcmNoQm94LScgKyBkYXRhW2ldLmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5hcHBlbmQoX2l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA0MDQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZXJ2aWNlIChhZ29yYU9uZVNlYXJjaCkgbm90IGZvdW5kIScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2VsZWN0SGlnaGxpZ2h0ZWRJdGVtKCkge1xyXG4gICAgICAgIGlmIChfcmVzcG9zZUNhY2hlID09IG51bGwgfHwgX3Jlc3Bvc2VDYWNoZS5sZW5ndGggPCAoX2hpZ2hsaWdodElkeCAtIDEpIHx8IF9oaWdobGlnaHRJZHggPD0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB2YXIgX2xhYmVsID0gJyc7XHJcbiAgICAgICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gJyc7XHJcbiAgICAgICAgdmFyIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0ucnQsIF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLm4pO1xyXG4gICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJiBfZmllbGQuSXRlbVRlbXBsYXRlICE9ICcnKSB7XHJcbiAgICAgICAgICAgIGlmIChfZmllbGQuU2VsZWN0b3IgIT0gdW5kZWZpbmVkICYmIF9maWVsZC5TZWxlY3RvciAhPSBudWxsICYmIF9maWVsZC5TZWxlY3RvciA9PSAnaycpXHJcbiAgICAgICAgICAgICAgICBfc2VsZWN0ZWRWYWx1ZSA9IF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLms7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0ubDtcclxuICAgICAgICB9XHJcbiAgICAgICAgX2xhYmVsID0gX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0ubDtcclxuXHJcbiAgICAgICAgaWYgKCFfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS52YWwoX2xhYmVsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS52YWwoJycpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIF9sYXN0S2V5d29yZCA9ICQoX3RhcmdldENvbnRyb2wpLnZhbCgpO1xyXG4gICAgICAgIGJpbmRBc3NvY2lhdGVDb250cm9sKF9yZXNwb3NlQ2FjaGVbX2hpZ2hsaWdodElkeCAtIDFdLCBfc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgaWYgKF9vcHRpb25zLkF1dG9TZWxlY3RGaXJzdEl0ZW0pIGF1dG9TZWxlY3RJdGVtKChfaGlnaGxpZ2h0SWR4IC0gMSkpO1xyXG4gICAgICAgIGlmIChfb3B0aW9ucy5PblNlbGVjdCkgX29wdGlvbnMuT25TZWxlY3QoX3Jlc3Bvc2VDYWNoZVtfaGlnaGxpZ2h0SWR4IC0gMV0pO1xyXG4gICAgICAgIF9oaWdobGlnaHRJZHggPSAwO1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuVGVzdE1vZGUpICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2VsZWN0SXRlbShpZHgsIG5vY2xlYXIsIGF1dG9TZWxlY3QpIHtcclxuICAgICAgICB2YXIgX2xhYmVsID0gJyc7XHJcbiAgICAgICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gJyc7XHJcbiAgICAgICAgaWYgKG5vY2xlYXIgPT0gdW5kZWZpbmVkIHx8IG5vY2xlYXIgPT0gbnVsbCkgbm9jbGVhciA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChhdXRvU2VsZWN0ID09IHVuZGVmaW5lZCB8fCBhdXRvU2VsZWN0ID09IG51bGwpIGF1dG9TZWxlY3QgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiAoX3Jlc3Bvc2VDYWNoZSkgPT0gJ3VuZGVmaW5lZCcgfHwgX3Jlc3Bvc2VDYWNoZSA9PSBudWxsIHx8IF9yZXNwb3NlQ2FjaGUubGVuZ3RoID09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgX3Jlc3Bvc2VDYWNoZVtpZHhdLnJ0LCBfcmVzcG9zZUNhY2hlW2lkeF0ubik7XHJcbiAgICAgICAgaWYgKF9maWVsZCAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGUgIT0gJycpIHtcclxuICAgICAgICAgICAgaWYgKF9maWVsZC5TZWxlY3RvciAhPSB1bmRlZmluZWQgJiYgX2ZpZWxkLlNlbGVjdG9yICE9IG51bGwgJiYgX2ZpZWxkLlNlbGVjdG9yID09ICdrJylcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLms7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9sYWJlbCA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5sO1xyXG5cclxuICAgICAgICBpZiAoYXV0b1NlbGVjdCA9PSB0cnVlICYmICFfbGFiZWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCQoX3RhcmdldENvbnRyb2wpLnZhbCgpLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIV9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChfZmllbGQgIT0gbnVsbCAmJl9maWVsZC5Ta2lwU2VsZWN0ICE9IHRydWUpICQoX3RhcmdldENvbnRyb2wpLnZhbChfbGFiZWwpOyBlbHNlICQoX3RhcmdldENvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgIGlmIChfb3B0aW9ucy5BdXRvU2VsZWN0Rmlyc3RJdGVtKSAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKCcnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICBpZiAoX29wdGlvbnMuQXV0b1NlbGVjdEZpcnN0SXRlbSkgJChfdGFyZ2V0QXV0b0NvbnRyb2wpLnZhbCgnJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfbGFzdEtleXdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIGNsZWFyTmVhcmJ5KCk7XHJcbiAgICAgICAgaWYgKF9maWVsZCAhPSBudWxsICYmX2ZpZWxkLlNraXBTZWxlY3QgIT0gdHJ1ZSkgYmluZEFzc29jaWF0ZUNvbnRyb2woX3Jlc3Bvc2VDYWNoZVtpZHhdLCBfc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgaWYgKF9vcHRpb25zLk9uU2VsZWN0KSBfb3B0aW9ucy5PblNlbGVjdChfcmVzcG9zZUNhY2hlW2lkeF0pO1xyXG4gICAgICAgIGlmICghX29wdGlvbnMuVGVzdE1vZGUgJiYgIW5vY2xlYXIpICQoX29uZVNlYXJjaEJveCkuaHRtbCgnJyk7XHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5NdWx0aVNlbGVjdCkge1xyXG4gICAgICAgICAgICBpZiAoIV9vcHRpb25zLkVuYWJsZVByZUxpc3QpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAkKF90YXJnZXRDb250cm9sKS5mb2N1cygpOyB9LCAyMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGF1dG9TZWxlY3RJdGVtKGlkeCkge1xyXG4gICAgICAgIHZhciBfbGFiZWwgPSAnJztcclxuICAgICAgICB2YXIgX3NlbGVjdGVkVmFsdWUgPSAnJztcclxuICAgICAgICBpZiAoJChfdGFyZ2V0Q29udHJvbCkudmFsKCkgPT0gbnVsbCB8fCAkKF90YXJnZXRDb250cm9sKS52YWwoKSA9PSAnJykgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0eXBlb2YgKF9yZXNwb3NlQ2FjaGUpID09ICd1bmRlZmluZWQnIHx8IF9yZXNwb3NlQ2FjaGUgPT0gbnVsbCB8fCBfcmVzcG9zZUNhY2hlLmxlbmd0aCA9PSAwKSByZXR1cm47XHJcbiAgICAgICAgdmFyIF9maWVsZCA9IGdldEZpZWxkSnNvbihfb3B0aW9ucy5PbmVTZWFyY2hEUywgX3Jlc3Bvc2VDYWNoZVtpZHhdLnJ0LCBfcmVzcG9zZUNhY2hlW2lkeF0ubik7XHJcbiAgICAgICAgaWYgKF9maWVsZCAhPSBudWxsICYmIF9maWVsZC5JdGVtVGVtcGxhdGUgIT0gJycpIHtcclxuICAgICAgICAgICAgaWYgKF9maWVsZC5TZWxlY3RvciAhPSB1bmRlZmluZWQgJiYgX2ZpZWxkLlNlbGVjdG9yICE9IG51bGwgJiYgX2ZpZWxkLlNlbGVjdG9yID09ICdrJylcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLms7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIF9zZWxlY3RlZFZhbHVlID0gX3Jlc3Bvc2VDYWNoZVtpZHhdLmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9sYWJlbCA9IF9yZXNwb3NlQ2FjaGVbaWR4XS5sO1xyXG5cclxuICAgICAgICBpZiAoIV9sYWJlbC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcLC9nLCAnJykuc3RhcnRzV2l0aCgkKF90YXJnZXRDb250cm9sKS52YWwoKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcLC9nLCAnJykpKSB7XHJcbiAgICAgICAgICAgICQoX3RhcmdldEF1dG9Db250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgdmFyIHJlZ0V4ID0gbmV3IFJlZ0V4cCgkKF90YXJnZXRDb250cm9sKS52YWwoKSwgXCJpZ1wiKTtcclxuICAgICAgICAkKF90YXJnZXRBdXRvQ29udHJvbCkudmFsKF9sYWJlbC5yZXBsYWNlKHJlZ0V4LCAkKF90YXJnZXRDb250cm9sKS52YWwoKSkpO1xyXG5cclxuICAgICAgICBfbGFzdEtleXdvcmQgPSAkKF90YXJnZXRDb250cm9sKS52YWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZWxvYWRNdWx0aVNlbGVjdE9uTG9hZCgpIHtcclxuICAgICAgICBpZiAoIV9vcHRpb25zLk11bHRpU2VsZWN0KSByZXR1cm47XHJcblxyXG4gICAgICAgICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWRePVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXCJdJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2l0ZW0gPSB7fTsgLy9beyBcImtcIjogXCJDaGFybG90dGVcIiwgXCJsXCI6IFwiQ2hhcmxvdHRlLCBOQ1wiLCBcIm5cIjogXCJDSVRZXCIsIFwicnRcIjogXCJDTU5DTU5cIiB9XVxyXG4gICAgICAgICAgICAgICAgdmFyIF9pdGVtVmFsdWUgPSAkKHRoaXMpLmF0dHIoJ2lkJykuc3BsaXQoJ18nKTtcclxuICAgICAgICAgICAgICAgIF9pdGVtLnJ0ID0gX2l0ZW1WYWx1ZVtfaXRlbVZhbHVlLmxlbmd0aCAtIDJdO1xyXG4gICAgICAgICAgICAgICAgX2l0ZW0ubiA9IF9pdGVtVmFsdWVbX2l0ZW1WYWx1ZS5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdkYXRhLWxhYmVsLWxvb2t1cCcpID09ICdUcnVlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEtleXdvcmQoX2l0ZW0ucnQgKyAnfCcgKyBfaXRlbS5uICsgJzo6JyArICQodGhpcykudmFsKCksIGZ1bmN0aW9uIChyZXN1bHRKc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbGFiZWxzID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfa2V5cyA9ICcnOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0SnNvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sYWJlbHMgPSByZXN1bHRKc29uLm1hcChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCc7Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2tleXMgPSByZXN1bHRKc29uLm1hcChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLms7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCc7Jyk7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kQXNzb2NpYXRlQ29udHJvbChfaXRlbSwgX2tleXMsIHRydWUsIF9sYWJlbHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKF90YXJnZXRDb250cm9sKS52YWwoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmluZEFzc29jaWF0ZUNvbnRyb2woX2l0ZW0sICQodGhpcykudmFsKCksIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYmluZEFzc29jaWF0ZUNvbnRyb2woaXRlbSwgdmFsdWUsIGluaXRpYWxMb2FkLCBsYWJlbHMpIHtcclxuICAgICAgICBpZiAoIV9vcHRpb25zLk11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgICQoJ2lucHV0W3R5cGU9XCJoaWRkZW5cIl1baWRePVwiJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXCJdJykuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnZhbCgnJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgICAgICQoJyMnICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4pLnZhbCh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgICAgICB2YXIgX2N0cmxNdWx0aUZpZWxkID0gJCgnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubik7XHJcblxyXG4gICAgICAgICAgICB2YXIgX3ZhbHVlSXRlbXMgPSB2YWx1ZS5zcGxpdChcIjtcIik7XHJcbiAgICAgICAgICAgIHZhciBfdmFsdWVJdGVtc0NhcnJpZXIgPSBfdmFsdWVJdGVtcztcclxuICAgICAgICAgICAgaWYgKGxhYmVscyAhPSBudWxsICYmIGxhYmVscyAhPSB1bmRlZmluZWQpIHZhciBfdmFsdWVJdGVtcyA9IGxhYmVscy5zcGxpdChcIjtcIik7XHJcbiAgICAgICAgICAgIHZhciBfZmllbGQgPSBnZXRGaWVsZEpzb24oX29wdGlvbnMuT25lU2VhcmNoRFMsIGl0ZW0ucnQsIGl0ZW0ubik7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgX3ZhbHVlSXRlbXMubGVuZ3RoICYmIF9maWVsZCAhPSBudWxsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChfdmFsdWVJdGVtc1tpXS5sZW5ndGggPCAyKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGlmICgoJzsnICsgX2N0cmxNdWx0aUZpZWxkLnZhbCgpLnRvTG93ZXJDYXNlKCkgKyAnOycpLmluZGV4T2YoJzsnICsgX3ZhbHVlSXRlbXNbaV0udG9Mb3dlckNhc2UoKSArICc7JykgPT0gLTEgfHwgaW5pdGlhbExvYWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluaXRpYWxMb2FkKSBfY3RybE11bHRpRmllbGQudmFsKF9jdHJsTXVsdGlGaWVsZC52YWwoKSArICc7JyArIF92YWx1ZUl0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9tdWx0aVNlbGVjdEl0ZW0gPSAkKCc8ZGl2PicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNvbnQnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignaWQnLCAnbXVsdGlpdGVtJyArICQoX3RhcmdldENvbnRyb2wpLmF0dHIoJ2lkJykgKyAnXycgKyBpdGVtLnJ0ICsgJ18nICsgaXRlbS5uICsgX3ZhbHVlSXRlbXNbaV0ucmVwbGFjZSgvXFwgL2csICdfJykucmVwbGFjZSgvXFwtL2csICdfJykucmVwbGFjZSgvW15BLXowLTldL2csICdfJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoJCgnPGE+JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnYWdvcmEtb25lc2VhcmNoLW11bHRpLXNlbC1pdGVtLWNsb3NlJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd0aXRsZScsICdDbGljayBoZXJlIHRvIGhpZGUgdGhpcyBhcmVhIGZpbHRlci4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2lkJywgJ211bHRpaXRlbV9jbG9zZV8nICsgJChfdGFyZ2V0Q29udHJvbCkuYXR0cignaWQnKSArICdfJyArIGl0ZW0ucnQgKyAnXycgKyBpdGVtLm4gKyBfdmFsdWVJdGVtc1tpXS5yZXBsYWNlKC9cXCAvZywgJ18nKS5yZXBsYWNlKC9cXC0vZywgJ18nKS5yZXBsYWNlKC9bXkEtejAtOV0vZywgJ18nKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd2YWwnLCBfdmFsdWVJdGVtc0NhcnJpZXJbaV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaHRtbCgnPGkgY2xhc3M9XCJhZ2EgYWdhLWNsb3NlXCI+PC9pPicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2xpY2soZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUZyb21NdWx0aVNlbGVjdCgkKHRoaXMpLCBpdGVtLCAkKHRoaXMpLmF0dHIoJ3ZhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgkKCc8YT4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwoX2ZpZWxkLk11bHRpSXRlbVRlbXBsYXRlLnJlcGxhY2UoJ3skbH0nLCAoaXRlbSAhPSBudWxsICYmIGl0ZW0ubCAhPSBudWxsKSA/IGl0ZW0ubCA6IF92YWx1ZUl0ZW1zW2ldKS5yZXBsYWNlKCd7JGR9JywgKGl0ZW0gIT0gbnVsbCAmJiBpdGVtLmQgIT0gbnVsbCkgPyBpdGVtLmQgOiBfdmFsdWVJdGVtc1tpXSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgX011bHRpU2VsZWN0Qm94LmFwcGVuZChfbXVsdGlTZWxlY3RJdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFpbml0aWFsTG9hZCAmJiBfb3B0aW9ucy5Pbk11bHRpU2VsZWN0UmVtb3ZlKSBfb3B0aW9ucy5Pbk11bHRpU2VsZWN0UmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGhhc011bHRpU2VsZWN0ZWRJdGVtcygpIHtcclxuICAgICAgICByZXR1cm4gKF9vcHRpb25zLk11bHRpU2VsZWN0ICYmIF9NdWx0aVNlbGVjdEJveC5maW5kKCdhLmFnb3JhLW9uZXNlYXJjaC1tdWx0aS1zZWwtaXRlbS1jbG9zZScpLmxlbmd0aCA+IDApO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlbW92ZUZyb21NdWx0aVNlbGVjdChtZSwgaXRlbSwgdmFsdWUpIHtcclxuICAgICAgICB2YXIgX2N0cmxNdWx0aUZpZWxkID0gJCgnIycgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubik7XHJcbiAgICAgICAgaWYgKF9jdHJsTXVsdGlGaWVsZC52YWwoKS5pbmRleE9mKCc7JykgIT0gMCkgX2N0cmxNdWx0aUZpZWxkLnZhbCgnOycgKyBfY3RybE11bHRpRmllbGQudmFsKCkpO1xyXG4gICAgICAgIF9jdHJsTXVsdGlGaWVsZC52YWwoX2N0cmxNdWx0aUZpZWxkLnZhbCgpLnJlcGxhY2UoJzsnICsgdmFsdWUsICcnKSk7XHJcblxyXG4gICAgICAgIC8vJCgnI211bHRpaXRlbScgKyAkKF90YXJnZXRDb250cm9sKS5hdHRyKCdpZCcpICsgJ18nICsgaXRlbS5ydCArICdfJyArIGl0ZW0ubiArIHZhbHVlLnJlcGxhY2UoL1xcIC9nLCAnXycpLnJlcGxhY2UoL1xcLS9nLCAnXycpKS5yZW1vdmUoKTtcclxuICAgICAgICAkKG1lKS5wYXJlbnQoKS5yZW1vdmUoKTtcclxuXHJcbiAgICAgICAgaWYgKF9jdHJsTXVsdGlGaWVsZC52YWwoKSA9PSBcIlwiIHx8ICQoX29uZVNlYXJjaEJveCkuZmluZCgnZGl2LmFnb3JhLW9uZXNlYXJjaC1tdWx0aS1zZWwtaXRlbS1jb250JykubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5odG1sKCcnKTtcclxuICAgICAgICAgICAgJChfb25lU2VhcmNoQm94KS5oaWRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuT25NdWx0aVNlbGVjdFJlbW92ZSkgX29wdGlvbnMuT25NdWx0aVNlbGVjdFJlbW92ZSgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBmdW5jdGlvbiBoaWdobGlnaHRJdGVtKGRpcmVjdGlvbikge1xyXG4gICAgICAgIF9pc09uQXJyb3dTZWxlY3Rpb24gPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoZGlyZWN0aW9uID4gMCkgLypkb3duKi8ge1xyXG4gICAgICAgICAgICBpZiAoX2hpZ2hsaWdodElkeCA8ICQoX29uZVNlYXJjaEJveCkuZmluZCgnYScpLmxlbmd0aCkgX2hpZ2hsaWdodElkeCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIC8qdXAqLyB7XHJcbiAgICAgICAgICAgIGlmIChfaGlnaGxpZ2h0SWR4ID4gMSkgX2hpZ2hsaWdodElkeC0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkKF9vbmVTZWFyY2hCb3gpLmZpbmQoJ2EnKS5lYWNoKGZ1bmN0aW9uICgpIHsgJCh0aGlzKS5yZW1vdmVDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTsgfSk7XHJcbiAgICAgICAgJChfb25lU2VhcmNoQm94KS5maW5kKChfb3B0aW9ucy5FbmFibGVDYXRlZ29yeVZpZXcpID8gJ2FbaWR4PScgKyBfaGlnaGxpZ2h0SWR4ICsgJ10nIDogJ2E6bnRoLWNoaWxkKCcgKyBfaGlnaGxpZ2h0SWR4ICsgJyknKS5hZGRDbGFzcyhfb3B0aW9ucy5IaWdobGlnaHRJdGVtQ3NzKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRUb3RhbFdpZHRoT2ZDb250cm9sKG9iamVjdCkge1xyXG5cclxuICAgICAgICBpZiAob2JqZWN0ID09IG51bGwgfHwgb2JqZWN0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0LndpZHRoKCk7XHJcbiAgICAgICAgdmFsdWUgKz0gcGFyc2VJbnQob2JqZWN0LmNzcyhcInBhZGRpbmctbGVmdFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcInBhZGRpbmctcmlnaHRcIiksIDEwKTsgLy9Ub3RhbCBQYWRkaW5nIFdpZHRoXHJcbiAgICAgICAgLy92YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwibWFyZ2luLWxlZnRcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJtYXJnaW4tcmlnaHRcIiksIDEwKTsgLy9Ub3RhbCBNYXJnaW4gV2lkdGhcclxuICAgICAgICB2YWx1ZSArPSBwYXJzZUludChvYmplY3QuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwiYm9yZGVyUmlnaHRXaWR0aFwiKSwgMTApOyAvL1RvdGFsIEJvcmRlciBXaWR0aFxyXG5cclxuICAgICAgICBpZiAoX29wdGlvbnMuUGFyZW50Q29udGFpbmVyICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHZhbHVlICs9IG9iamVjdC5vZmZzZXQoKS5sZWZ0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldFRvdGFsSGVpZ2h0T2ZDb250cm9sKG9iamVjdCkge1xyXG5cclxuICAgICAgICBpZiAob2JqZWN0ID09IG51bGwgfHwgb2JqZWN0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0LmhlaWdodCgpO1xyXG4gICAgICAgIHZhbHVlICs9IHBhcnNlSW50KG9iamVjdC5jc3MoXCJwYWRkaW5nLXRvcFwiKSwgMTApICsgcGFyc2VJbnQob2JqZWN0LmNzcyhcInBhZGRpbmctYm90dG9tXCIpLCAxMCk7IC8vVG90YWwgUGFkZGluZyBXaWR0aFxyXG4gICAgICAgIC8vdmFsdWUgKz0gcGFyc2VJbnQob2JqZWN0LmNzcyhcIm1hcmdpbi10b3BcIiksIDEwKSArIHBhcnNlSW50KG9iamVjdC5jc3MoXCJtYXJnaW4tYm90dG9tXCIpLCAxMCk7IC8vVG90YWwgTWFyZ2luIFdpZHRoXHJcbiAgICAgICAgdmFsdWUgKz0gcGFyc2VJbnQob2JqZWN0LmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLCAxMCkgKyBwYXJzZUludChvYmplY3QuY3NzKFwiYm9yZGVyQm90dG9tV2lkdGhcIiksIDEwKTsgLy9Ub3RhbCBCb3JkZXIgV2lkdGhcclxuICAgICAgICB2YWx1ZSArPSBvYmplY3QucG9zaXRpb24oKS50b3A7XHJcblxyXG4gICAgICAgIGlmIChfb3B0aW9ucy5QYXJlbnRDb250YWluZXIgIT0gJycpIHtcclxuICAgICAgICAgICAgdmFsdWUgKz0gb2JqZWN0Lm9mZnNldCgpLnRvcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRGaWVsZEpzb24ob2JqLCBydCwgZmllbGROYW1lKSB7XHJcbiAgICAgICAgaWYgKF9pdGVtVGVwbGF0ZUNhY2hlW3J0ICsgJ18nICsgZmllbGROYW1lXSAhPSBudWxsKSByZXR1cm4gX2l0ZW1UZXBsYXRlQ2FjaGVbcnQgKyAnXycgKyBmaWVsZE5hbWVdO1xyXG5cclxuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgb2JqLlJlY29yZFR5cGVzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IG9iai5SZWNvcmRUeXBlc1trXS5OYW1lID09IHJ0ICYmIGogPCBvYmouUmVjb3JkVHlwZXNba10uRmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLlJlY29yZFR5cGVzW2tdLkZpZWxkc1tqXS5OYW1lID09IGZpZWxkTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pdGVtVGVwbGF0ZUNhY2hlW3J0ICsgJ18nICsgZmllbGROYW1lXSA9IG9iai5SZWNvcmRUeXBlc1trXS5GaWVsZHNbal07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iai5SZWNvcmRUeXBlc1trXS5GaWVsZHNbal07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcHJlZ19xdW90ZShzdHIpIHtcclxuICAgICAgICByZXR1cm4gKHN0ciArICcnKS5yZXBsYWNlKC8oW1xcXFxcXC5cXCtcXCpcXD9cXFtcXF5cXF1cXCRcXChcXClcXHtcXH1cXD1cXCFcXDxcXD5cXHxcXDpdKS9nLCBcIlxcXFwkMVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBoaWdobGlnaHRLZXl3b3JkKHN0ciwga2V5d29yZCkge1xyXG4gICAgICAgIC8vcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAocHJlZ19xdW90ZSh0byksICdnaScpLCBieSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZShuZXcgUmVnRXhwKFwiKFwiICsgcHJlZ19xdW90ZShrZXl3b3JkKSArIFwiKVwiLCAnZ2knKSwgXCI8c3Ryb25nPiQxPC9zdHJvbmc+XCIpO1xyXG4gICAgfVxyXG59XHJcbn0pO1xyXG59KShqUXVlcnkpO1xyXG5cclxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJhIiwiaSIsInNlbGYiLCIkIiwialF1ZXJ5IiwiZm4iLCJleHRlbmQiLCJPbmVTZWFyY2giLCJvcHRpb25zIiwicHJldmlvdXNsb29rdXBsYWJlbCIsIl9vcHRpb25zIiwiU2VydmljZVVybCIsIk9uZVNlYXJjaE5hbWUiLCJPbmVTZWFyY2hEUyIsIk1pbkNoYXJMaW1pdCIsIkVuYWJsZUN1cnJlbnRMb2NhdGlvbiIsIkVuYWJsZVByZUxpc3QiLCJBdXRvU2VsZWN0Rmlyc3RJdGVtIiwiUmVzdWx0TGltaXQiLCJFbmFibGVUb3VjaCIsIkRhdGFTb3VyY2UiLCJEYXRhU291cmNlQ29udHJvbCIsIkNvbnRhaW5lckNzcyIsIkl0ZW1Dc3MiLCJIaWdobGlnaHRJdGVtQ3NzIiwiUmVnaW9uIiwiTG9jYWxlIiwiSGVscFRleHQiLCJBbmltYXRlUGxhY2Vob2xkZXJUZXh0IiwiTXVsdGlTZWxlY3QiLCJNdWx0aVNlbGVjdEJveElkIiwiTXVsdGlTZWxlY3RTaG93SGVscFRleHQiLCJNdWx0aUtleXdvcmREZWxpbWl0ZXIiLCJMb2FkaW5nSW1hZ2VVcmwiLCJQYXJlbnRDb250YWluZXIiLCJCZWZvcmVDYWxsIiwiQWZ0ZXJDYWxsIiwiT25TdWNjZXNzIiwiT25FcnJvciIsIk9uU2VsZWN0IiwiT25UZXh0Q2hhbmdlIiwiT25TZWFyY2giLCJPbkluY3JlbWVudGFsU2VhcmNoIiwiT25NdWx0aVNlbGVjdFJlbW92ZSIsIlNlYXJjaE1vZGUiLCJUZXN0TW9kZSIsIlN0aWNreU1vZGUiLCJFbmFibGVDYXRlZ29yeVZpZXciLCJfdGFyZ2V0Q29udHJvbCIsIl90YXJnZXRBdXRvQ29udHJvbCIsIl9vbmVTZWFyY2hCb3giLCJfTXVsdGlTZWxlY3RCb3giLCJfbGFzdEtleXdvcmQiLCJfbGFzdFNlYXJjaHdvcmQiLCJfcmVxdWVzdCIsIl9yZXNwb3NlQ2FjaGUiLCJfaXRlbVRlcGxhdGVDYWNoZSIsIl9oaWdobGlnaHRJZHgiLCJfaXNPbkFycm93U2VsZWN0aW9uIiwiX2lzTG9jYXRpb25TZXJhY2hFbmFibGVkIiwidGhpcyIsImVhY2giLCJvYmoiLCJhdHRyIiwicmVwbGFjZSIsIkRhdGUiLCJ2YWx1ZU9mIiwid2luZG93Iiwib25wb3BzdGF0ZSIsImV2ZW50IiwiY3NzIiwiZ2V0VG90YWxIZWlnaHRPZkNvbnRyb2wiLCJnZXRUb3RhbFdpZHRoT2ZDb250cm9sIiwiYWRkQ2xhc3MiLCJodG1sIiwiYXBwZW5kIiwiaW5zZXJ0QWZ0ZXIiLCJjbG9zZXN0IiwiY2xpY2siLCJlIiwidGFyZ2V0IiwiY2xhc3NOYW1lIiwic2V0VGltZW91dCIsImZvY3VzIiwiTXVsdGlTZWxlY3RCb3hDc3MiLCJ2YWwiLCJfaXRlbSIsIl9pdGVtVmFsdWUiLCJzcGxpdCIsInJ0IiwibGVuZ3RoIiwibiIsInNlYXJjaEtleXdvcmQiLCJyZXN1bHRKc29uIiwiX2xhYmVscyIsIl9rZXlzIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsImwiLCJqb2luIiwiayIsImJpbmRBc3NvY2lhdGVDb250cm9sIiwibGF0IiwibG5nIiwicmRzIiwia2V5ZG93biIsImtleUNvZGUiLCJzZWxlY3RIaWdobGlnaHRlZEl0ZW0iLCJzZWxlY3RJdGVtIiwiaGlnaGxpZ2h0SXRlbSIsImhpZGUiLCJrZXlwcmVzcyIsInBhcnNlSW50IiwicHJldmVudERlZmF1bHQiLCJrZXl1cCIsInNob3ciLCJpbmRleE9mIiwiZmluZCIsIl90ZW1wQ29udE11bHQiLCJnZXRDdXJyZW50TG9jYXRpb25PYmplY3QiLCJjb25zb2xlIiwibG9nIiwiYmx1ciIsImlzTWFudWFsU2VsZWN0IiwiZGF0YSIsInBhcmVudCIsInJlbW92ZUNsYXNzIiwiSW5pdCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJwcm90b2NvbCIsInRvTG93ZXJDYXNlIiwiaG9zdG5hbWUiLCJtb3VzZW92ZXIiLCJzZWFyY2hOZWFyYnkiLCJvbiIsIm1vdXNlb3V0IiwiaWR4IiwibmF2aWdhdG9yIiwiZ2VvbG9jYXRpb24iLCJnZXRDdXJyZW50UG9zaXRpb24iLCJwb3NpdGlvbiIsImNvb3JkcyIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwibG9va3VwTGFiZWwiLCJhZnRlclNlYXJjaCIsImFib3J0IiwiX3NlYXJjaFBhcmFtIiwiX3NlYXJjaEtleXdvcmQiLCJnZXRUaW1lIiwiYWpheCIsInR5cGUiLCJ1cmwiLCJkYXRhVHlwZSIsInN1Y2Nlc3MiLCJ1bmRlZmluZWQiLCJfaXRlbURhdGEiLCJfZmllbGQiLCJfY2F0ZWdvcnlpdGVtIiwiX2NhdGVvZ29yeW5hbWUiLCJoaWdobGlnaHRLZXl3b3JkIiwiZ2V0RmllbGRKc29uIiwiSXRlbVRlbXBsYXRlIiwiZCIsIkl0ZW1UZW1wbGF0ZXMiLCJqIiwiVGVtcGxhdGUiLCJtb3VzZWRvd24iLCJhdXRvU2VsZWN0SXRlbSIsImciLCJpbmNsdWRlcyIsInN0YXR1c0NvZGUiLCJfbGFiZWwiLCJfc2VsZWN0ZWRWYWx1ZSIsIlNlbGVjdG9yIiwibm9jbGVhciIsImF1dG9TZWxlY3QiLCJzdGFydHNXaXRoIiwiU2tpcFNlbGVjdCIsInJlZ0V4IiwiUmVnRXhwIiwidmFsdWUiLCJpbml0aWFsTG9hZCIsImxhYmVscyIsIl9jdHJsTXVsdGlGaWVsZCIsIl92YWx1ZUl0ZW1zQ2FycmllciIsIl92YWx1ZUl0ZW1zIiwiX211bHRpU2VsZWN0SXRlbSIsInJlbW92ZUZyb21NdWx0aVNlbGVjdCIsIk11bHRpSXRlbVRlbXBsYXRlIiwibWUiLCJyZW1vdmUiLCJkaXJlY3Rpb24iLCJvYmplY3QiLCJ3aWR0aCIsIm9mZnNldCIsImxlZnQiLCJoZWlnaHQiLCJ0b3AiLCJmaWVsZE5hbWUiLCJSZWNvcmRUeXBlcyIsIk5hbWUiLCJGaWVsZHMiLCJzdHIiLCJrZXl3b3JkIiwicHJlZ19xdW90ZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJnZXR0ZXIiLCJfX2VzTW9kdWxlIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIl0sInNvdXJjZVJvb3QiOiIifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ibp-max",
3
- "version": "3.0.9",
3
+ "version": "3.0.10",
4
4
  "description": "Style & JS optimized",
5
5
  "main": "index.js",
6
6
  "scripts": {