PageSourceSearch

https://www.niauk.org/wp-content/themes/rouge-wp-start-theme/js/global-scripts.min.js

js niauk.org collected 2026-10-02 04:09:22 UTC 662,148 bytes, 2 lines download raw bytes

1jQuery(document).ready(function(s){var o,n,r,a,l;jQuery(document).on("sf:ajaxfinish",function(e,t){var i=parseInt(jQuery(".navigation.pagination .current").text()),o=jQuery('input[name="_sft_content_types[]"]:checked').val();i&&1<i||o&&""!==o?jQuery(".the-hub__featured").parent("a").hide(0):jQuery(".the-hub__featured").parent("a").show(0)}),s(window).scroll((o=function(e){0<window.scrollY?s(".site-header").addClass("scroll"):s(".site-header").removeClass("scroll")},(n=250)||(n=250),function(){var e=r||this,t=+new Date,i=arguments;a&&t<a+n?(clearTimeout(l),l=setTimeout(function(){a=t,o.apply(e,i)},n)):(a=t,o.apply(e,i))})),s("#search-filter-form-340 .sf-input-select").selectpicker(),s("#home-hero-slider").slick({dots:!0,arrows:!1,infinite:!0,speed:400,autoplay:!1,autoplaySpeed:6e3,fade:!0,lazyLoad:"ondemand",pauseOnHover:!1}),s(".mega-dropdown-toggle").on("click",function(){var e=s(this).text();s("body").hasClass("logged-in")&&"Logged In"==e.trim()&&(e="Member Hub"),s(this).siblings(".dropdown-menu").find(".fixed-nav__heading").html(e)}
1),s("button.navbar-toggler").on("click",function(e){s(".site-header").toggleClass("open")}),s(window).width()<1335&&s("#primary-navigation .dropdown .mega-dropdown-toggle").on("click",function(e){var t=s(this).siblings(".dropdown-menu:not(.show)");s(this).parent().toggleClass("open"),t.slideToggle(),s(".dropdown-menu.show").slideToggle()}),s(function(){s(".lazy").lazy(),s(".lazy-hero").lazy({afterLoad:function(e){s(".line-mask").addClass("line-mask--animated")}})}),s(".line-mask--animate").length&&setTimeout(function(){s(".line-mask--animate").addClass("line-mask--animated")},400),s(".lines-container").on("inview",function(e,t){t&&s(this).addClass("lines-container--animated")}),s(".testimonial-block--standard").on("inview",function(e,t){t&&s(this).addClass("testimonial-block--standard--animated")}),s(".content-image-blocks").on("inview",function(e,t){t&&s(this).addClass("content-image-blocks--animated")}),s(".page-template-template-members-directory .quick-links ").on("inview",function(e,t){t?s(".member-directory--filterable").addClass("overflow-hidden"):s(".member-directory--filterable").removeClass("overflow-hidden")}),s('[role="region"], .content-image-blocks__section').on("inview",function(e,t){t&&s(this).addClass("fadein")}),s('a[href^="tel:"]').attr("href",function(e,t){return t.replace(/\(0\)|\s+/g,"")}),s("#hub-slider").slick({dots:!0,arrows:!0,infinite:!0,slidesToShow:4,slidesToScroll:2,speed:300,autoplay:!0,autoplaySpeed:6e3,lazyLoad:"ondemand",pauseOnHover:!1,responsive:[{breakpoint:1523,settings:{slidesToShow:3}},{breakpoint:1100,settings:{slidesToShow:2}},{breakpoint:768,settings:{slidesToShow:1,dots:!1}}]}),s("#testimonial-block__slider").slick({slidesToShow:3,slidesToScroll:1,speed:300,infinite:!0,autoplay:!0,autoplaySpeed:6e3,arrows:!0,dots:!0,responsive:[{breakpoint:1550,settings:{slidesToShow:2}},{breakpoint:768,settings:{slidesToShow:1}}]}),s(".site-search").on("click",function(){s(".site-search__modal").toggleClass("show"),s(".modal-overlay").toggleClass("modal-overlay-show"),s(".site-header").toggleClass("site-header-modal"),s(".menu-item > a").toggleClass("modal-open"),s("body").toggleClass("modal-open")}),s(".modal-overlay").on("click",function(){s("body").removeClass("modal-open"),s(".modal-overlay").removeClass("modal-overlay-show"),s(".menu-item > a").removeClass("modal-open"),s(".site-search__modal").removeClass("show"),s(".site-header").removeClass("site-header-modal")}),s(".video-container__play").click(function(){var e=s(this),t=e.attr("data-video-code");e.parents(".video-container").html(t),s('.video-container iframe[src^="https://www.youtube.com"]')&&(s(".video-container iframe")[0].src+="?feature=oembed&autoplay=1")}),s(document).on("sf:ajaxfinish",".searchandfilter",function(){s(".the-hub__grid").find(".sticky").length<2&&s(".the-hub__grid").find(".sticky").addClass("sticky--override")}),s("#filter-toggle").on("click",function(){s(this).siblings(".searchandfilter").slideToggle(),s(this).toggleClass("open")}),s("img.svg").each(function(){var i=s(this),o=i.attr("id"),n=i.attr("class"),e=i.attr("src");s.get(e,function(e){var t=s(e).find("svg");void 0!==o&&(t=t.attr("id",o)),void 0!==n&&(t=t.attr("class",n+" replaced-svg")),t=t.removeAttr("xmlns:a"),i.replaceWith(t)})})}),function(I,f){"use strict";function r(w,b,k,e,t){function i(){var n,s,r,a;y=1<I.devicePixelRatio,k=o(k),0<=b.delay&&setTimeout(function(){l(!0)},b.delay),(b.delay<0||b.combined)&&(e.e=(n=b.throttle,s=function(e){"resize"===e.type&&(S=C=-1),l(e.all)},a=0,function(e,t){function i(){a=+new Date,s.call(w,e)}var o=+new Date-a;r&&clearTimeout(r),n<o||!b.enableThrottle||t?i():r=setTimeout(i,n-o)}),e.a=function(e){e=o(e),k.push.apply(k,e)},e.g=function(){return k=D(k).filter(function(){return!D(this).data(b.loadedName)})},e.f=function(e){for(var t=0;t<e.length;t++){var i=k.filter(function(){return this===e[t]});i.length&&l(!1,i)}},l(),D(b.appendScroll).on("scroll."+t+" resize."+t,e.e))}function o(e){for(var t=b.defaultImage,i=b.placeholder,o=b.imageBase,n=b.srcsetAttribute,s=b.loaderAttribute,r=b._f||{},a=0,l=(e=D(e).filter(function(){var e=D(this),t=_(this);return!e.data(b.handledName)&&(e.attr(b.attribute)||e.attr(n)||e.attr(s)||r[t]!==f)}).data("plugin_"+b.name,w)).length;a<l;a++){var d=D(e[a]),c=_(e[a]),u=d.attr(b.imageBaseAttribute)||o;c===A&&u&&d.attr(n)&&d.attr(n,p(d.attr(n),u)),r[c]===f||d.attr(s)||d.attr(s,r[c]),c===A&&t&&!d.attr(O)?d.attr(O,t):c===A||!i||d.css(P)&&"none"!==d.css(P)||d.css(P,"url('"+i+"')")}return e}function l(e,t){if(k.length){for(var i=t||k,o=!1,n=b.imageBase||"",s=b.srcsetAttribute,r=b.handledName,a=0;a<i.length;a++)if(e||t||(f=i[a],void 0,h=f.getBoundingClientRect(),m=b.scrollDirection,v=b.threshold,g=(0<=C?C:C=D(I).height())+v>h.top&&-v<h.bottom,y=(0<=S?S:S=D(I).width())+v>h.left&&-v<h.right,"vertical"===m?g:"horizontal"===m?y:g&&y)){var l=D(i[a]),d=_(i[a]),c=l.attr(b.attribute),u=l.attr(b.imageBaseAttribute)||n,p=l.attr(b.loaderAttribute);l.data(r)||b.visibleOnly&&!l.is(":visible")||!((c||l.attr(s))&&(d===A&&(u+c!==l.attr(O)||l.attr(s)!==l.attr(j))||d!==A&&u+c!==l.css(P))||p)||(o=!0,l.data(r,!0),T(l,d,u,p))}var f,h,m,v,g,y;o&&(k=D(k).filter(function(){return!D(this).data(r)}))}else b.autoDestroy&&w.destroy()}function T(t,e,i,o){++g;var n=function(){v("onError",t),m(),n=D.noop};v("beforeLoad",t);var s=b.attribute,r=b.srcsetAttribute,a=b.sizesAttribute,l=b.retinaAttribute,d=b.removeAttribute,c=b.loadedName,u=t.attr(l);if(o){var p=function(){d&&t.removeAttr(b.loaderAttribute),t.data(c,!0),v(x,t),setTimeout(m,1),p=D.noop};t.off($).one($,n).one(E,p),v(o,t,function(e){e?(t.off(E),p()):(t.off($),n())})||t.trigger($)}else{var f=D(new Image);f.one($,n).one(E,function(){t.hide(),e===A?t.attr(L,f.attr(L)).attr(j,f.attr(j)).attr(O,f.attr(O)):t.css(P,"url('"+f.attr(O)+"')"),t[b.effect](b.effectTime),d&&(t.removeAttr(s+" "+r+" "+l+" "+b.imageBaseAttribute),a!==L&&t.removeAttr(a)),t.data(c,!0),v(x,t),f.remove(),m()});var h=(y&&u?u:t.attr(s))||"";f.attr(L,t.attr(a)).attr(j,t.attr(r)).attr(O,h?i+h:null),f.complete&&f.trigger(E)}}function _(e){return e.tagName.toLowerCase()}function p(e,t){if(t){var i=e.split(",");e="";for(var o=0,n=i.length;o<n;o++)e+=t+i[o].trim()+(o!==n-1?",":"")}return e}function m(){--g,k.length||g||v("onFinishedAll")}function v(e,t,i){return!!(e=b[e])&&(e.apply(w,[].slice.call(arguments,1
1)),!0)}var g=0,S=-1,C=-1,y=!1,x="afterLoad",E="load",$="error",A="img",O="src",j="srcset",L="sizes",P="background-image";"event"===b.bind||n?i():D(I).on(E+"."+t,i)}function d(e,t){var i=this,o=D.extend({},i.config,t),n={},s=o.name+"-"+ ++a;return i.config=function(e,t){return t===f?o[e]:(o[e]=t,i)},i.addItems=function(e){return n.a&&n.a("string"===D.type(e)?D(e):e),i},i.getItems=function(){return n.g?n.g():{}},i.update=function(e){return n.e&&n.e({},!e),i},i.force=function(e){return n.f&&n.f("string"===D.type(e)?D(e):e),i},i.loadAll=function(){return n.e&&n.e({all:!0},!0),i},i.destroy=function(){return D(o.appendScroll).off("."+s,n.e),D(I).off("."+s),n={},f},r(i,o,e,n,s),o.chainable?e:i}var D=I.jQuery||I.Zepto,a=0,n=!1;D.fn.Lazy=D.fn.lazy=function(e){return new d(this,e)},D.Lazy=D.lazy=function(e,t,i){if(D.isFunction(t)&&(i=t,t=[]),D.isFunction(i)){e=D.isArray(e)?e:[e],t=D.isArray(t)?t:[t];for(var o=d.prototype.config,n=o._f||(o._f={}),s=0,r=e.length;s<r;s++)(o[e[s]]===f||D.isFunction(o[e[s]]))&&(o[e[s]]=i);for(var a=0,l=t.length;a<l;a++)n[t[a]]=e[0]}},d.prototype.config={name:"lazy",chainable:!0,autoDestroy:!0,bind:"load",threshold:500,visibleOnly:!1,appendScroll:I,scrollDirection:"both",imageBase:null,defaultImage:"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==",placeholder:null,delay:-1,combined:!1,attribute:"data-src",srcsetAttribute:"data-srcset",sizesAttribute:"data-sizes",retinaAttribute:"data-retina",loaderAttribute:"data-loader",imageBaseAttribute:"data-imagebase",removeAttribute:!0,handledName:"handled",loadedName:"loaded",effect:"show",effectTime:0,enableThrottle:!0,throttle:250,beforeLoad:f,afterLoad:f,onError:f,onFinishedAll:f},D(I).on("load",function(){n=!0})}(window),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e(require("jquery")):e(jQuery)}(function(c){function t(){if(f.length){var e=0,t=c.map(f,function(e){var t=e.data.selector,i=e.$element;return t?i.find(t):i});for(u=u||(d=l=a=void 0,(d={height:m.innerHeight,width:m.innerWidth}).height||((a=h.compatMode)||!c.support.boxModel)&&(d={height:(l="CSS1Compat"===a?v:h.body).clientHeight,width:l.clientWidth}),d),p=p||{top:m.pageYOffset||v.scrollTop||h.body.scrollTop,left:m.pageXOffset||v.scrollLeft||h.body.scrollLeft};e<f.length;e++)if(c.contains(v,t[e][0])){var i=c(t[e]),o=i[0].offsetHeight,n=i[0].offsetWidth,s=i.offset(),r=i.data("inview");if(!p||!u)return;s.top+o>p.top&&s.top<p.top+u.height&&s.left+n>p.left&&s.left<p.left+u.width?r||i.data("inview",!0).trigger("inview",[!0]):r&&i.data("inview",!1).trigger("inview",[!1])}}var a,l,d}var u,p,o,f=[],h=document,m=window,v=h.documentElement;c.event.special.inview={add:function(e){f.push({data:e,$element:c(this),element:this}),!o&&f.length&&(o=setInterval(t,250))},remove:function(e){for(var t=0;t<f.length;t++){var i=f[t];if(i.element===this&&i.data.guid===e.guid){f.splice(t,1);break}}f.length||(clearInterval(o),o=null)}},c(m).on("scroll resize scrollstop",function(){u=p=null}),!v.addEventListener&&v.attachEvent&&v.attachEvent("onfocusin",function(){p=null})}),jQuery(document).ready(function(i){if(i("body").hasClass("page-template-template-form")){function e(e){""!==e.val()&&null!==e.val()&&e.is(":valid")?e.closest(".frm_form_field").addClass("valid-input"):e.closest(".frm_form_field").removeClass("valid-input")}function t(e){""!==e.val()&&null!==e.val()&&void 0!==e.val()&&"Other"!==e.val()?e.closest(".frm_form_field").addClass("valid-input"):e.closest(".frm_form_field").removeClass("valid-input")}function o(e){""!==e.val()&&null!==e.val()&&e.is(":valid")?e.closest(".frm_form_field").addClass("valid-input"):e.closest(".frm_form_field").removeClass("valid-input")}function n(e){""!==e.val()&&null!==e.val()&&void 0!==e.val()&&e.is(":checked")?e.closest(".frm_form_field").addClass("valid-input"):e.closest(".frm_form_field").removeClass("valid-input")}function s(e){""!==e.val()&&null!==e.val()&&void 0!==e.val()&&e.is(":checked")?e.closest(".frm_form_field").addClass("valid-input"):e.closest(".frm_form_field").removeClass("val
1id-input");var t=e.attr("name");i('.frm_forms input[name="'+t+'"]').each(function(){i(this).is(":checked")&&i(this).closest(".frm_form_field").addClass("valid-input")})}i('.frm_form_field input[type="tel"]').each(function(){null==i(this).val()||null==i(this).val()||i(this).val()}),i('.frm_forms input[type!="radio"][type!="checkbox"]').on("change",function(){window.dispatchEvent(new Event("resize")),e(i(this))}),i(".frm_forms textarea").on("change",function(){window.dispatchEvent(new Event("resize")),e(i(this))}),i(".frm_forms select").on("change",function(){window.dispatchEvent(new Event("resize")),t(i(this))}),i(".frm_forms .frm_other_input").on("change",function(){window.dispatchEvent(new Event("resize")),o(i(this))}),i('.frm_forms input[type="radio"]').on("change",function(){window.dispatchEvent(new Event("resize")),n(i(this))}),i('.frm_forms input[type="checkbox"]').on("change",function(){window.dispatchEvent(new Event("resize")),s(i(this))}),i('.frm_forms input[type!="radio"][type!="checkbox"]').each(function(){e(i(this))}),i(".frm_forms select").each(function(){t(i(this))}),i(".frm_forms .frm_other_input").each(function(){o(i(this))}),i('.frm_forms input[type="radio"]').each(function(){n(i(this))}),i('.frm_forms input[type="checkbox"]').each(function(){s(i(this))})}i(".frm_radio").click(function(){i(".frm_radio").removeClass("blue-border"),i(this).addClass("blue-border")})}),jQuery(document).on("ready",function(){!function(e){if(e){var i=document.createElement("div");i.setAttribute("class","search-results"),i.setAttribute("id","search-results"),i.style.position="absolute",i.style.backgroundColor="transparent",i.style.width="100%",e.parentNode.insertBefore(i,e.nextSibling);var o,n=document.createElement("div");n.setAttribute("id","loading-spinner"),n.style.display="none",n.innerHTML='<div class="spinner"></div>',e.parentNode.insertBefore(n,i),e.addEventListener("input",function(){var t=this.value;clearTimeout(o),o=setTimeout(function(){if(0<t.length){n.style.display="block",i.style.display="none";var e={action:"live_search",query:encodeURIComponent(t)};console.log("prior to ajax"),console.log(e),jQuery.ajax({type:"post",url:live_search_object.ajax_url,data:e,success:function(e){n.style.display="none",function(e,t){if(t.innerHTML="",console.log(e),0===e.length)console.log("results 0"),t.classList.remove("open"),t.classList.add("close"),t.innerHTML="<li>No results found</li>";else{console.log("results 1"),t.classList.remove("close"),t.classList.add("open"),t.style.display="block";var i=document.createElement("div");i.id="search-results-container";var n=document.createElement("ul");n.classList.add("search-results-list"),n.id="search-results-list",n.style.listStyleType="none",i.appendChild(n),t.appendChild(i),e.forEach(function(e){var t=document.createElement("li");if(t.className="search-result-item",0==e.ID||"0"==e.ID)""!==e.post_link?t.innerHTML='<a class="view-all" href="'+e.post_link+'" target="_self">'+e.post_title+"</a>":t.innerHTML='<div class="no-result">'+e.post_title+"</div>";else{var i="_self",o=e.post_title;!e.post_type||"regulatory_docs"!=e.post_type&&"vitol-documents"!=e.post_type&&"vitol-brasil-document"!=e.post_type||(i="_blank",o+=' (PDF) <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 15L3.75 8.75L5.5 6.9375L8.75 10.1875V0H11.25V10.1875L14.5 6.9375L16.25 8.75L10 15ZM2.5 20C1.8125 20 1.22396 19.7552 0.734375 19.2656C0.244792 18.776 0 18.1875 0 17.5V13.75H2.5V17.5H17.5V13.75H20V17.5C20 18.1875 19.7552 18.776 19.2656 19.2656C18.776 19.7552 18.1875 20 17.5 20H2.5Z" fill="white"/></svg>'),t.innerHTML='<a class="search-result-link" href="'+e.post_link+'" target="'+i+'">'+o+"</a>"}n.appendChild(t)})}}(e.data,i)},error:function(e){}})}else i.innerHTML="",0==t.length&&(i.style.display="none")},500,t)})}}(document.getElementById("search-field"))}),function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"undefined"!=typeof exports?module.exports=e(require("jquery")):e(jQuery)}(function(d){"use strict";var n,r=window.Slick||{};n=0,(r=function(e,t){var i,o=this;o.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:d(e),appendDots:d(e),arrows:!0,asNavFor:null,prevArrow:'<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',nextArrow:'<button class="slick-next" aria-label="Next" type="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(e,t){return d('<button type="button" />').text(t+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,focusOnChange:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},o.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,scrolling:!1,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,
vendor: 9,324 bytes, line 1
1sliding:!1,slideOffset:0,swipeLeft:null,swiping:!1,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},d.extend(o,o.initials),o.activeBreakpoint=null,o.animType=null,o.animProp=null,o.breakpoints=[],o.breakpointSettings=[],o.cssTransitions=!1,o.focussed=!1,o.interrupted=!1,o.hidden="hidden",o.paused=!0,o.positionProp=null,o.respondTo=null,o.rowCount=1,o.shouldClick=!0,o.$slider=d(e),o.$slidesCache=null,o.transformType=null,o.transitionType=null,o.visibilityChange="visibilitychange",o.windowWidth=0,o.windowTimer=null,i=d(e).data("slick")||{},o.options=d.extend({},o.defaults,t,i),o.currentSlide=o.options.initialSlide,o.originalSettings=o.options,void 0!==document.mozHidden?(o.hidden="mozHidden",o.visibilityChange="mozvisibilitychange"):void 0!==document.webkitHidden&&(o.hidden="webkitHidden",o.visibilityChange="webkitvisibilitychange"),o.autoPlay=d.proxy(o.autoPlay,o),o.autoPlayClear=d.proxy(o.autoPlayClear,o),o.autoPlayIterator=d.proxy(o.autoPlayIterator,o),o.changeSlide=d.proxy(o.changeSlide,o),o.clickHandler=d.proxy(o.clickHandler,o),o.selectHandler=d.proxy(o.selectHandler,o),o.setPosition=d.proxy(o.setPosition,o),o.swipeHandler=d.proxy(o.swipeHandler,o),o.dragHandler=d.proxy(o.dragHandler,o),o.keyHandler=d.proxy(o.keyHandler,o),o.instanceUid=n++,o.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,o.registerBreakpoints(),o.init(!0)}).prototype.activateADA=function(){this.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},r.prototype.addSlide=r.prototype.slickAdd=function(e,t,i){var o=this;if("boolean"==typeof t)i=t,t=null;else if(t<0||t>=o.slideCount)return!1;o.unload(),"number"==typeof t?0===t&&0===o.$slides.length?d(e).appendTo(o.$slideTrack):i?d(e).insertBefore(o.$slides.eq(t)):d(e).insertAfter(o.$slides.eq(t)):!0===i?d(e).prependTo(o.$slideTrack):d(e).appendTo(o.$slideTrack),o.$slides=o.$slideTrack.children(this.options.slide),o.$slideTrack.children(this.options.slide).detach(),o.$slideTrack.append(o.$slides),o.$slides.each(function(e,t){d(t).attr("data-slick-index",e)}),o.$slidesCache=o.$slides,o.reinit()},r.prototype.animateHeight=function(){var e=this;if(1===e.options.slidesToShow&&!0===e.options.adaptiveHeight&&!1===e.options.vertical){var t=e.$slides.eq(e.currentSlide).outerHeight(!0);e.$list.animate({height:t},e.options.speed)}},r.prototype.animateSlide=function(e,t){var i={},o=this;o.animateHeight(),!0===o.options.rtl&&!1===o.options.vertical&&(e=-e),!1===o.transformsEnabled?!1===o.options.vertical?o.$slideTrack.animate({left:e},o.options.speed,o.options.easing,t):o.$slideTrack.animate({top:e},o.options.speed,o.options.easing,t):!1===o.cssTransitions?(!0===o.options.rtl&&(o.currentLeft=-o.currentLeft),d({animStart:o.currentLeft}).animate({animStart:e},{duration:o.options.speed,easing:o.options.easing,step:function(e){e=Math.ceil(e),!1===o.options.vertical?i[o.animType]="translate("+e+"px, 0px)":i[o.animType]="translate(0px,"+e+"px)",o.$slideTrack.css(i)},complete:function(){t&&t.call()}})):(o.applyTransition(),e=Math.ceil(e),!1===o.options.vertical?i[o.animType]="translate3d("+e+"px, 0px, 0px)":i[o.animType]="translate3d(0px,"+e+"px, 0px)",o.$slideTrack.css(i),t&&setTimeout(function(){o.disableTransition(),t.call()},o.options.speed))},r.prototype.getNavTarget=function(){var e=this.options.asNavFor;return e&&null!==e&&(e=d(e).not(this.$slider)),e},r.prototype.asNavFor=function(t){var e=this.getNavTarget();null!==e&&"object"==typeof e&&e.each(function(){var e=d(this).slick("getSlick");e.unslicked||e.slideHandler(t,!0)})},r.prototype.applyTransition=function(e){var t=this,i={};!1===t.options.fade?i[t.transitionType]=t.transformType+" "+t.options.speed+"ms "+t.options.cssEase:i[t.transitionType]="opacity "+t.options.speed+"ms "+t.options.cssEase,!1===t.options.fade?t.$slideTrack.css(i):t.$slides.eq(e).css(i)},r.prototype.autoPlay=function(){var e=this;e.autoPlayClear(),e.slideCount>e.options.slidesToShow&&(e.autoPlayTimer=setInterval(e.autoPlayIterator,e.options.autoplaySpeed))},r.prototype.autoPlayClear=function(){this.autoPlayTimer&&clearInterval(this.autoPlayTimer)},r.prototype.autoPlayIterator=function(){var e=this,t=e.currentSlide+e.options.slidesToScroll;e.paused||e.interrupted||e.focussed||(!1===e.options.infinite&&(1===e.direction&&e.currentSlide+1===e.slideCount-1?e.direction=0:0===e.direction&&(t=e.currentSlide-e.options.slidesToScroll,e.currentSlide-1==0&&(e.direction=1))),e.slideHandler(t))},r.prototype.buildArrows=function(){var e=this;!0===e.options.arrows&&(e.$prevArrow=d(e.options.prevArrow).addClass("slick-arrow"),e.$nextArrow=d(e.options.nextArrow).addClass("slick-arrow"),e.slideCount>e.options.slidesToShow?(e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.prependTo(e.options.appendArrows),e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.appendTo(e.options.appendArrows),!0!==e.options.infinite&&e.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},r.prototype.buildDots=function(){var e,t,i=this;if(!0===i.options.dots&&i.slideCount>i.options.slidesToShow){for(i.$slider.addClass("slick-dotted"),t=d("<ul />").addClass(i.options.dotsClass),e=0;e<=i.getDotCount();e+=1)t.append(d("<li />").append(i.options.customPaging.call(this,i,e)));i.$dots=t.appendTo(i.options.appendDots),i.$dots.find("li").first().addClass("slick-active")}},r.prototype.buildOut=function(){var e=this;e.$slides=e.$slider.children(e.options.slide+":not(.slick-cloned)").addClass("slick-slide"),e.slideCount=e.$slides.length,e.$slides.each(function(e,t){d(t).attr("data-slick-index",e).data("originalStyling",d(t).attr("style")||"")}),e.$slider.addClass("slick-slider"),e.$slideTrack=0===e.slideCount?d('<div class="slick-track"/>').appendTo(e.$slider):e.$slides.wrapAll('<div class="slick-track"/>').parent(),e.$list=e.$slideTrack.wrap('<div class="slick-list"/>').parent(),e.$slideTrack.css("opacity",0),!0!==e.options.centerMode&&!0!==e.options.swipeToSlide||(e.options.slidesToScroll=1),d("img[data-lazy]",e.$slider).not("[src]").addClass("slick-loading"),e.setupInfinite(),e.buildArrows(),e.buildDots(),e.updateDots(),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),!0===e.options.draggable&&e.$list.addClass("draggable")},r.prototype.buildRows=function(){var e,t,i,o,n,s,r,a=this;if(o=document.createDocumentFragment(),s=a.$slider.children(),0<a.options.rows){for(r=a.options.slidesPerRow*a.options.rows,n=Math.ceil(s.length/r),e=0;e<n;e++){var l=document.createElement("div");for(t=0;t<a.options.rows;t++){var d=document.createElement("div");for(i=0;i<a.options.slidesPerRow;i++){var c=e*r+(t*a.options.slidesPerRow+i);s.get(c)&&d.appendChild(s.get(c))}l.appendChild(d)}o.appendChild(l)}a.$slider.empty().append(o),a.$slider.children().children().children().css({width:100/a.options.slidesPerRow+"%",display:"inline-block"})}},r.prototype.checkResponsive=function(e,t){var i,o,n,s=this,r=!1,a=s.$slider.width(),l=window.innerWidth||d(window).width();if("window"===s.respondTo?n=l:"slider"===s.respondTo?n=a:"min"===s.respondTo&&(n=Math.min(l,a)),s.options.responsive&&s.options.responsive.length&&null!==s.options.responsive){for(i in o=null,s.breakpoints)s.breakpoints.hasOwnProperty(i)&&(!1===s.originalSettings.mobileFirst?n<s.breakpoints[i]&&(o=s.breakpoints[i]):n>s.breakpoints[i]&&(o=s.breakpoints[i]));null!==o?null!==s.activeBreakpoint?(o!==s.activeBreakpoint||t)&&(s.activeBreakpoint=o,"unslick"===s.breakpointSettings[o]?s.unslick(o):(s.options=d.extend({},s.originalSettings,s.breakpointSettings[o]),!0===e&&(s.currentSlide=s.options.initialSlide),s.refresh(e)),r=o):(s.activeBreakpoint=o,"unslick"===s.breakpointSettings[o]?s.unslick(o):(s.options=d.extend({},s.originalSettings,s.breakpointSettings[o]),!0===e&&(s.currentSlide=s.options.initialSlide),s.refresh(e)),r=o):null!==s.activeBreakpoint&&(s.activeBreakpoint=null,s.options=s.originalSettings,!0===e&&(s.currentSlide=s.options.initialSlide),s.refresh(e),r=o),e||!1===r||s.$slider.trigger("breakpoint",[s,r])}},r.prototype.changeSlide=function(e,t){var i,o,n=this,s=d(e.currentTarget);switch(s.is("a")&&e.preventDefault(),s.is("li")||(s=s.closest("li")),i=n.slideCount%n.options.slidesToScroll!=0?0:(n.slideCount-n.currentSlide)%n.options.slidesToScroll,e.data.message){case"previous":o=0===i?n.options.slidesToScroll:n.options.slidesToShow-i,n.slideCount>n.options.slidesToShow&&n.slideHandler(n.currentSlide-o,!1,t);break;case"next":o=0===i?n.options.slidesToScroll:i,n.slideCount>n.options.slidesToShow&&n.slideHandler(n.currentSlide+o,!1,t);break;case"index":var r=0===e.data.index?0:e.data.index||s.index()*n.options.slidesToScroll;n.slideHandler(n.checkNavigable(r),!1,t),s.children().trigger("focus");break;default:return}},r.prototype.checkNavigable=function(e){var t,i;if(i=0,e>(t=this.getNavigableIndexes())[t.length-1])e=t[t.length-1];else for(var o in t){if(e<t[o]){e=i;break}i=t[o]}return e},r.prototype.cleanUpEvents=function(){var e=this;e.options.dots&&null!==e.$dots&&(d("li",e.$dots).off("click.slick",e.changeSlide).off("mouseenter.slick",d.proxy(e.interrupt,e,!0)).off("mouseleave.
1slick",d.proxy(e.interrupt,e,!1)),!0===e.options.accessibility&&e.$dots.off("keydown.slick",e.keyHandler)),e.$slider.off("focus.slick blur.slick"),!0===e.options.arrows&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow&&e.$prevArrow.off("click.slick",e.changeSlide),e.$nextArrow&&e.$nextArrow.off("click.slick",e.changeSlide),!0===e.options.accessibility&&(e.$prevArrow&&e.$prevArrow.off("keydown.slick",e.keyHandler),e.$nextArrow&&e.$nextArrow.off("keydown.slick",e.keyHandler))),e.$list.off("touchstart.slick mousedown.slick",e.swipeHandler),e.$list.off("touchmove.slick mousemove.slick",e.swipeHandler),e.$list.off("touchend.slick mouseup.slick",e.swipeHandler),e.$list.off("touchcancel.slick mouseleave.slick",e.swipeHandler),e.$list.off("click.slick",e.clickHandler),d(document).off(e.visibilityChange,e.visibility),e.cleanUpSlideEvents(),!0===e.options.accessibility&&e.$list.off("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&d(e.$slideTrack).children().off("click.slick",e.selectHandler),d(window).off("orientationchange.slick.slick-"+e.instanceUid,e.orientationChange),d(window).off("resize.slick.slick-"+e.instanceUid,e.resize),d("[draggable!=true]",e.$slideTrack).off("dragstart",e.preventDefault),d(window).off("load.slick.slick-"+e.instanceUid,e.setPosition)},r.prototype.cleanUpSlideEvents=function(){var e=this;e.$list.off("mouseenter.slick",d.proxy(e.interrupt,e,!0)),e.$list.off("mouseleave.slick",d.proxy(e.interrupt,e,!1))},r.prototype.cleanUpRows=function(){var e;0<this.options.rows&&((e=this.$slides.children().children()).removeAttr("style"),this.$slider.empty().append(e))},r.prototype.clickHandler=function(e){!1===this.shouldClick&&(e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault())},r.prototype.destroy=function(e){var t=this;t.autoPlayClear(),t.touchObject={},t.cleanUpEvents(),d(".slick-cloned",t.$slider).detach(),t.$dots&&t.$dots.remove(),t.$prevArrow&&t.$prevArrow.length&&(t.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.prevArrow)&&t.$prevArrow.remove()),t.$nextArrow&&t.$nextArrow.length&&(t.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.nextArrow)&&t.$nextArrow.remove()),t.$slides&&(t.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){d(this).attr("style",d(this).data("originalStyling"))}),t.$slideTrack.children(this.options.slide).detach(),t.$slideTrack.detach(),t.$list.detach(),t.$slider.append(t.$slides)),t.cleanUpRows(),t.$slider.removeClass("slick-slider"),t.$slider.removeClass("slick-initialized"),t.$slider.removeClass("slick-dotted"),t.unslicked=!0,e||t.$slider.trigger("destroy",[t])},r.prototype.disableTransition=function(e){var t={};t[this.transitionType]="",!1===this.options.fade?this.$slideTrack.css(t):this.$slides.eq(e).css(t)},r.prototype.fadeSlide=function(e,t){var i=this;!1===i.cssTransitions?(i.$slides.eq(e).css({zIndex:i.options.zIndex}),i.$slides.eq(e).animate({opacity:1},i.options.speed,i.options.easing,t)):(i.applyTransition(e),i.$slides.eq(e).css({opacity:1,zIndex:i.options.zIndex}),t&&setTimeout(function(){i.disableTransition(e),t.call()},i.options.speed))},r.prototype.fadeSlideOut=function(e){var t=this;!1===t.cssTransitions?t.$slides.eq(e).animate({opacity:0,zIndex:t.options.zIndex-2},t.options.speed,t.options.easing):(t.applyTransition(e),t.$slides.eq(e).css({opacity:0,zIndex:t.options.zIndex-2}))},r.prototype.filterSlides=r.prototype.slickFilter=function(e){var t=this;null!==e&&(t.$slidesCache=t.$slides,t.unload(),t.$slideTrack.children(this.options.slide).detach(),t.$slidesCache.filter(e).appendTo(t.$slideTrack),t.reinit())},r.prototype.focusHandler=function(){var i=this;i.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick","*",function(e){e.stopImmediatePropagation();var t=d(this);setTimeout(function(){i.options.pauseOnFocus&&(i.focussed=t.is(":focus"),i.autoPlay())}
1,0)})},r.prototype.getCurrent=r.prototype.slickCurrentSlide=function(){return this.currentSlide},r.prototype.getDotCount=function(){var e=this,t=0,i=0,o=0;if(!0===e.options.infinite)if(e.slideCount<=e.options.slidesToShow)++o;else for(;t<e.slideCount;)++o,t=i+e.options.slidesToScroll,i+=e.options.slidesToScroll<=e.options.slidesToShow?e.options.slidesToScroll:e.options.slidesToShow;else if(!0===e.options.centerMode)o=e.slideCount;else if(e.options.asNavFor)for(;t<e.slideCount;)++o,t=i+e.options.slidesToScroll,i+=e.options.slidesToScroll<=e.options.slidesToShow?e.options.slidesToScroll:e.options.slidesToShow;else o=1+Math.ceil((e.slideCount-e.options.slidesToShow)/e.options.slidesToScroll);return o-1},r.prototype.getLeft=function(e){var t,i,o,n,s=this,r=0;return s.slideOffset=0,i=s.$slides.first().outerHeight(!0),!0===s.options.infinite?(s.slideCount>s.options.slidesToShow&&(s.slideOffset=s.slideWidth*s.options.slidesToShow*-1,n=-1,!0===s.options.vertical&&!0===s.options.centerMode&&(2===s.options.slidesToShow?n=-1.5:1===s.options.slidesToShow&&(n=-2)),r=i*s.options.slidesToShow*n),s.slideCount%s.options.slidesToScroll!=0&&e+s.options.slidesToScroll>s.slideCount&&s.slideCount>s.options.slidesToShow&&(e>s.slideCount?(s.slideOffset=(s.options.slidesToShow-(e-s.slideCount))*s.slideWidth*-1,r=(s.options.slidesToShow-(e-s.slideCount))*i*-1):(s.slideOffset=s.slideCount%s.options.slidesToScroll*s.slideWidth*-1,r=s.slideCount%s.options.slidesToScroll*i*-1))):e+s.options.slidesToShow>s.slideCount&&(s.slideOffset=(e+s.options.slidesToShow-s.slideCount)*s.slideWidth,r=(e+s.options.slidesToShow-s.slideCount)*i),s.slideCount<=s.options.slidesToShow&&(r=s.slideOffset=0),!0===s.options.centerMode&&s.slideCount<=s.options.slidesToShow?s.slideOffset=s.slideWidth*Math.floor(s.options.slidesToShow)/2-s.slideWidth*s.slideCount/2:!0===s.options.centerMode&&!0===s.options.infinite?s.slideOffset+=s.slideWidth*Math.floor(s.options.slidesToShow/2)-s.slideWidth:!0===s.options.centerMode&&(s.slideOffset=0,s.slideOffset+=s.slideWidth*Math.floor(s.options.slidesToShow/2)),t=!1===s.options.vertical?e*s.slideWidth*-1+s.slideOffset:e*i*-1+r,!0===s.options.variableWidth&&(o=s.slideCount<=s.options.slidesToShow||!1===s.options.infinite?s.$slideTrack.children(".slick-slide").eq(e):s.$slideTrack.children(".slick-slide").eq(e+s.options.slidesToShow),t=!0===s.options.rtl?o[0]?-1*(s.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,!0===s.options.centerMode&&(o=s.slideCount<=s.options.slidesToShow||!1===s.options.infinite?s.$slideTrack.children(".slick-slide").eq(e):s.$slideTrack.children(".slick-slide").eq(e+s.options.slidesToShow+1),t=!0===s.options.rtl?o[0]?-1*(s.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,t+=(s.$list.width()-o.outerWidth())/2)),t},r.prototype.getOption=r.prototype.slickGetOption=function(e){return this.options[e]},r.prototype.getNavigableIndexes=function(){var e,t=this,i=0,o=0,n=[];for(!1===t.options.infinite?e=t.slideCount:(i=-1*t.options.slidesToScroll,o=-1*t.options.slidesToScroll,e=2*t.slideCount);i<e;)n.push(i),i=o+t.options.slidesToScroll,o+=t.options.slidesToScroll<=t.options.slidesToShow?t.options.slidesToScroll:t.options.slidesToShow;return n},r.prototype.getSlick=function(){return this},r.prototype.getSlideCount=function(){var i,o,n=this;return o=!0===n.options.centerMode?n.slideWidth*Math.floor(n.options.slidesToShow/2):0,!0===n.options.swipeToSlide?(n.$slideTrack.find(".slick-slide").each(function(e,t){if(t.offsetLeft-o+d(t).outerWidth()/2>-1*n.swipeLeft)return i=t,!1}),Math.abs(d(i).attr("data-slick-index")-n.currentSlide)||1):n.options.slidesToScroll},r.prototype.goTo=r.prototype.slickGoTo=function(e,t){this.changeSlide({data:{message:"index",index:parseInt(e)}},t)},r.prototype.init=function(e){var t=this;d(t.$slider).hasClass("slick-initialized")||(d(t.$slider).addClass("slick-initialized"),t.buildRows(),t.buildOut(),t.setProps(),t.startLoad(),t.loadSlider(),t.initializeEvents(),t.updateArrows(),t.updateDots(),t.checkResponsive(!0),t.focusHandler()),e&&t.$slider.trigger("init",[t]),!0===t.options.accessibility&&t.initADA(),t.options.autoplay&&(t.paused=!1,t.autoPlay())},r.prototype.initADA=function(){var o=this,i=Math.ceil(o.slideCount/o.options.slidesToShow),n=o.getNavigableIndexes().filter(function(e){return 0<=e&&e<o.slideCount});o.$slides.add(o.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),null!==o.$dots&&(o.$slides.not(o.$slideTrack.find(".slick-cloned")).each(function(e){var t=n.indexOf(e);if(d(this).attr({role:"tabpanel",id:"slick-slide"+o.instanceUid+e,tabindex:-1}),-1!==t){var i="slick-slide-control"+o.instanceUid+t;d("#"+i).length&&d(this).attr({"aria-describedby":i})}}),o.$dots.attr("role","tablist").find("li").each(function(e){var t=n[e];d(this).attr({role:"presentation"}),d(this).find("button").first().attr({role:"tab",id:"slick-slide-control"+o.instanceUid+e,"aria-controls":"slick-slide"+o.instanceUid+t,"aria-label":e+1+" of "+i,"aria-selected":null,tabindex:"-1"})}).eq(o.currentSlide).find("button").attr({"aria-selected":"true",tabindex:"0"}).end());for(var e=o.currentSlide,t=e+o.options.slidesToShow;e<t;e++)o.options.focusOnChange?o.$slides.eq(e).attr({tabindex:"0"}):o.$slides.eq(e).removeAttr("tabindex");o.activateADA()},r.prototype.initArrowEvents=function(){var e=this;!0===e.options.arrows&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},e.changeSlide),e.$nextArrow.off("click.slick").on("click.slick",{message:"next"},e.changeSlide),!0===e.options.accessibility&&(e.$prevArrow.on("keydown.slick",e.keyHandler),e.$nextArrow.on("keydown.slick",e.keyHandler)))},r.prototype.initDotEvents=function(){var e=this;!0===e.options.dots&&e.slideCount>e.options.slidesToShow&&(d("li",e.$dots).on("click.slick",{message:"index"},e.changeSlide),!0===e.options.accessibility&&e.$dots.on("keydown.slick",e.keyHandler)),!0===e.options.dots&&!0===e.options.pauseOnDotsHover&&e.slideCount>e.options.slidesToShow&&d("li",e.$dots).on("mouseenter.slick",d.proxy(e.interrupt,e,!0)).on("mouseleave.
1slick",d.proxy(e.interrupt,e,!1))},r.prototype.initSlideEvents=function(){var e=this;e.options.pauseOnHover&&(e.$list.on("mouseenter.slick",d.proxy(e.interrupt,e,!0)),e.$list.on("mouseleave.slick",d.proxy(e.interrupt,e,!1)))},r.prototype.initializeEvents=function(){var e=this;e.initArrowEvents(),e.initDotEvents(),e.initSlideEvents(),e.$list.on("touchstart.slick mousedown.slick",{action:"start"},e.swipeHandler),e.$list.on("touchmove.slick mousemove.slick",{action:"move"},e.swipeHandler),e.$list.on("touchend.slick mouseup.slick",{action:"end"},e.swipeHandler),e.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},e.swipeHandler),e.$list.on("click.slick",e.clickHandler),d(document).on(e.visibilityChange,d.proxy(e.visibility,e)),!0===e.options.accessibility&&e.$list.on("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&d(e.$slideTrack).children().on("click.slick",e.selectHandler),d(window).on("orientationchange.slick.slick-"+e.instanceUid,d.proxy(e.orientationChange,e)),d(window).on("resize.slick.slick-"+e.instanceUid,d.proxy(e.resize,e)),d("[draggable!=true]",e.$slideTrack).on("dragstart",e.preventDefault),d(window).on("load.slick.slick-"+e.instanceUid,e.setPosition),d(e.setPosition)},r.prototype.initUI=function(){var e=this;!0===e.options.arrows&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow.show(),e.$nextArrow.show()),!0===e.options.dots&&e.slideCount>e.options.slidesToShow&&e.$dots.show()},r.prototype.keyHandler=function(e){var t=this;e.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===e.keyCode&&!0===t.options.accessibility?t.changeSlide({data:{message:!0===t.options.rtl?"next":"previous"}}):39===e.keyCode&&!0===t.options.accessibility&&t.changeSlide({data:{message:!0===t.options.rtl?"previous":"next"}}))},r.prototype.lazyLoad=function(){var e,t,i,s=this;function o(e){d("img[data-lazy]",e).each(function(){var e=d(this),t=d(this).attr("data-lazy"),i=d(this).attr("data-srcset"),o=d(this).attr("data-sizes")||s.$slider.attr("data-sizes"),n=document.createElement("img");n.onload=function(){e.animate({opacity:0}
vendor: 7,040 bytes, line 1
1,100,function(){i&&(e.attr("srcset",i),o&&e.attr("sizes",o)),e.attr("src",t).animate({opacity:1},200,function(){e.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading")}),s.$slider.trigger("lazyLoaded",[s,e,t])})},n.onerror=function(){e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),s.$slider.trigger("lazyLoadError",[s,e,t])},n.src=t})}if(!0===s.options.centerMode?!0===s.options.infinite?i=(t=s.currentSlide+(s.options.slidesToShow/2+1))+s.options.slidesToShow+2:(t=Math.max(0,s.currentSlide-(s.options.slidesToShow/2+1)),i=s.options.slidesToShow/2+1+2+s.currentSlide):(t=s.options.infinite?s.options.slidesToShow+s.currentSlide:s.currentSlide,i=Math.ceil(t+s.options.slidesToShow),!0===s.options.fade&&(0<t&&t--,i<=s.slideCount&&i++)),e=s.$slider.find(".slick-slide").slice(t,i),"anticipated"===s.options.lazyLoad)for(var n=t-1,r=i,a=s.$slider.find(".slick-slide"),l=0;l<s.options.slidesToScroll;l++)n<0&&(n=s.slideCount-1),e=(e=e.add(a.eq(n))).add(a.eq(r)),n--,r++;o(e),s.slideCount<=s.options.slidesToShow?o(s.$slider.find(".slick-slide")):s.currentSlide>=s.slideCount-s.options.slidesToShow?o(s.$slider.find(".slick-cloned").slice(0,s.options.slidesToShow)):0===s.currentSlide&&o(s.$slider.find(".slick-cloned").slice(-1*s.options.slidesToShow))},r.prototype.loadSlider=function(){var e=this;e.setPosition(),e.$slideTrack.css({opacity:1}),e.$slider.removeClass("slick-loading"),e.initUI(),"progressive"===e.options.lazyLoad&&e.progressiveLazyLoad()},r.prototype.next=r.prototype.slickNext=function(){this.changeSlide({data:{message:"next"}})},r.prototype.orientationChange=function(){this.checkResponsive(),this.setPosition()},r.prototype.pause=r.prototype.slickPause=function(){this.autoPlayClear(),this.paused=!0},r.prototype.play=r.prototype.slickPlay=function(){var e=this;e.autoPlay(),e.options.autoplay=!0,e.paused=!1,e.focussed=!1,e.interrupted=!1},r.prototype.postSlide=function(e){var t=this;t.unslicked||(t.$slider.trigger("afterChange",[t,e]),t.animating=!1,t.slideCount>t.options.slidesToShow&&t.setPosition(),t.swipeLeft=null,t.options.autoplay&&t.autoPlay(),!0===t.options.accessibility&&(t.initADA(),t.options.focusOnChange&&d(t.$slides.get(t.currentSlide)).attr("tabindex",0).focus()))},r.prototype.prev=r.prototype.slickPrev=function(){this.changeSlide({data:{message:"previous"}})},r.prototype.preventDefault=function(e){e.preventDefault()},r.prototype.progressiveLazyLoad=function(e){e=e||1;var t,i,o,n,s,r=this,a=d("img[data-lazy]",r.$slider);a.length?(t=a.first(),i=t.attr("data-lazy"),o=t.attr("data-srcset"),n=t.attr("data-sizes")||r.$slider.attr("data-sizes"),(s=document.createElement("img")).onload=function(){o&&(t.attr("srcset",o),n&&t.attr("sizes",n)),t.attr("src",i).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"),!0===r.options.adaptiveHeight&&r.setPosition(),r.$slider.trigger("lazyLoaded",[r,t,i]),r.progressiveLazyLoad()},s.onerror=function(){e<3?setTimeout(function(){r.progressiveLazyLoad(e+1)},500):(t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),r.$slider.trigger("lazyLoadError",[r,t,i]),r.progressiveLazyLoad())},s.src=i):r.$slider.trigger("allImagesLoaded",[r])},r.prototype.refresh=function(e){var t,i,o=this;i=o.slideCount-o.options.slidesToShow,!o.options.infinite&&o.currentSlide>i&&(o.currentSlide=i),o.slideCount<=o.options.slidesToShow&&(o.currentSlide=0),t=o.currentSlide,o.destroy(!0),d.extend(o,o.initials,{currentSlide:t}),o.init(),e||o.changeSlide({data:{message:"index",index:t}},!1)},r.prototype.registerBreakpoints=function(){var e,t,i,o=this,n=o.options.responsive||null;if("array"===d.type(n)&&n.length){for(e in o.respondTo=o.options.respondTo||"window",n)if(i=o.breakpoints.length-1,n.hasOwnProperty(e)){for(t=n[e].breakpoint;0<=i;)o.breakpoints[i]&&o.breakpoints[i]===t&&o.breakpoints.splice(i,1),i--;o.breakpoints.push(t),o.breakpointSettings[t]=n[e].settings}o.breakpoints.sort(function(e,t){return o.options.mobileFirst?e-t:t-e})}},r.prototype.reinit=function(){var e=this;e.$slides=e.$slideTrack.children(e.options.slide).addClass("slick-slide"),e.slideCount=e.$slides.length,e.currentSlide>=e.slideCount&&0!==e.currentSlide&&(e.currentSlide=e.currentSlide-e.options.slidesToScroll),e.slideCount<=e.options.slidesToShow&&(e.currentSlide=0),e.registerBreakpoints(),e.setProps(),e.setupInfinite(),e.buildArrows(),e.updateArrows(),e.initArrowEvents(),e.buildDots(),e.updateDots(),e.initDotEvents(),e.cleanUpSlideEvents(),e.initSlideEvents(),e.checkResponsive(!1,!0),!0===e.options.focusOnSelect&&d(e.$slideTrack).children().on("click.slick",e.selectHandler),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),e.setPosition(),e.focusHandler(),e.paused=!e.options.autoplay,e.autoPlay(),e.$slider.trigger("reInit",[e])},r.prototype.resize=function(){var e=this;d(window).width()!==e.windowWidth&&(clearTimeout(e.windowDelay),e.windowDelay=window.setTimeout(function(){e.windowWidth=d(window).width(),e.checkResponsive(),e.unslicked||e.setPosition()},50))},r.prototype.removeSlide=r.prototype.slickRemove=function(e,t,i){var o=this;if(e="boolean"==typeof e?!0===(t=e)?0:o.slideCount-1:!0===t?--e:e,o.slideCount<1||e<0||e>o.slideCount-1)return!1;o.unload(),!0===i?o.$slideTrack.children().remove():o.$slideTrack.children(this.options.slide).eq(e).remove(),o.$slides=o.$slideTrack.children(this.options.slide),o.$slideTrack.children(this.options.slide).detach(),o.$slideTrack.append(o.$slides),o.$slidesCache=o.$slides,o.reinit()},r.prototype.setCSS=function(e){var t,i,o=this,n={};!0===o.options.rtl&&(e=-e),t="left"==o.positionProp?Math.ceil(e)+"px":"0px",i="top"==o.positionProp?Math.ceil(e)+"px":"0px",n[o.positionProp]=e,!1===o.transformsEnabled||(n={},!1===o.cssTransitions?n[o.animType]="translate("+t+", "+i+")":n[o.animType]="translate3d("+t+", "+i+", 0px)"),o.$slideTrack.css(n)},r.prototype.setDimensions=function(){var e=this;!1===e.options.vertical?!0===e.options.centerMode&&e.$list.css({padding:"0px "+e.options.centerPadding}):(e.$list.height(e.$slides.first().outerHeight(!0)*e.options.slidesToShow),!0===e.options.centerMode&&e.$list.css({padding:e.options.centerPadding+" 0px"})),e.listWidth=e.$list.width(),e.listHeight=e.$list.height(),!1===e.options.vertical&&!1===e.options.variableWidth?(e.slideWidth=Math.ceil(e.listWidth/e.options.slidesToShow),e.$slideTrack.width(Math.ceil(e.slideWidth*e.$slideTrack.children(".slick-slide").length))):!0===e.options.variableWidth?e.$slideTrack.width(5e3*e.slideCount):(e.slideWidth=Math.ceil(e.listWidth),e.$slideTrack.height(Math.ceil(e.$slides.first().outerHeight(!0)*e.$slideTrack.children(".slick-slide").length)));var t=e.$slides.first().outerWidth(!0)-e.$slides.first().width();!1===e.options.variableWidth&&e.$slideTrack.children(".slick-slide").width(e.slideWidth-t)},r.prototype.setFade=function(){var i,o=this;o.$slides.each(function(e,t){i=o.slideWidth*e*-1,!0===o.options.rtl?d(t).css({position:"relative",right:i,top:0,zIndex:o.options.zIndex-2,opacity:0}
1):d(t).css({position:"relative",left:i,top:0,zIndex:o.options.zIndex-2,opacity:0})}),o.$slides.eq(o.currentSlide).css({zIndex:o.options.zIndex-1,opacity:1})},r.prototype.setHeight=function(){var e=this;if(1===e.options.slidesToShow&&!0===e.options.adaptiveHeight&&!1===e.options.vertical){var t=e.$slides.eq(e.currentSlide).outerHeight(!0);e.$list.css("height",t)}},r.prototype.setOption=r.prototype.slickSetOption=function(){var e,t,i,o,n,s=this,r=!1;if("object"===d.type(arguments[0])?(i=arguments[0],r=arguments[1],n="multiple"):"string"===d.type(arguments[0])&&(i=arguments[0],o=arguments[1],r=arguments[2],"responsive"===arguments[0]&&"array"===d.type(arguments[1])?n="responsive":void 0!==arguments[1]&&(n="single")),"single"===n)s.options[i]=o;else if("multiple"===n)d.each(i,function(e,t){s.options[e]=t});else if("responsive"===n)for(t in o)if("array"!==d.type(s.options.responsive))s.options.responsive=[o[t]];else{for(e=s.options.responsive.length-1;0<=e;)s.options.responsive[e].breakpoint===o[t].breakpoint&&s.options.responsive.splice(e,1),e--;s.options.responsive.push(o[t])}r&&(s.unload(),s.reinit())},r.prototype.setPosition=function(){var e=this;e.setDimensions(),e.setHeight(),!1===e.options.fade?e.setCSS(e.getLeft(e.currentSlide)):e.setFade(),e.$slider.trigger("setPosition",[e])},r.prototype.setProps=function(){var e=this,t=document.body.style;e.positionProp=!0===e.options.vertical?"top":"left","top"===e.positionProp?e.$slider.addClass("slick-vertical"):e.$slider.removeClass("slick-vertical"),void 0===t.WebkitTransition&&void 0===t.MozTransition&&void 0===t.msTransition||!0===e.options.useCSS&&(e.cssTransitions=!0),e.options.fade&&("number"==typeof e.options.zIndex?e.options.zIndex<3&&(e.options.zIndex=3):e.options.zIndex=e.defaults.zIndex),void 0!==t.OTransform&&(e.animType="OTransform",e.transformType="-o-transform",e.transitionType="OTransition",void 0===t.perspectiveProperty&&void 0===t.webkitPerspective&&(e.animType=!1)),void 0!==t.MozTransform&&(e.animType="MozTransform",e.transformType="-moz-transform",e.transitionType="MozTransition",void 0===t.perspectiveProperty&&void 0===t.MozPerspective&&(e.animType=!1)),void 0!==t.webkitTransform&&(e.animType="webkitTransform",e.transformType="-webkit-transform",e.transitionType="webkitTransition",void 0===t.perspectiveProperty&&void 0===t.webkitPerspective&&(e.animType=!1)),void 0!==t.msTransform&&(e.animType="msTransform",e.transformType="-ms-transform",e.transitionType="msTransition",void 0===t.msTransform&&(e.animType=!1)),void 0!==t.transform&&!1!==e.animType&&(e.animType="transform",e.transformType="transform",e.transitionType="transition"),e.transformsEnabled=e.options.useTransform&&null!==e.animType&&!1!==e.animType},r.prototype.setSlideClasses=function(e){var t,i,o,n,s=this;if(i=s.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),s.$slides.eq(e).addClass("slick-current"),!0===s.options.centerMode){var r=s.options.slidesToShow%2==0?1:0;t=Math.floor(s.options.slidesToShow/2),!0===s.options.infinite&&(t<=e&&e<=s.slideCount-1-t?s.$slides.slice(e-t+r,e+t+1).addClass("slick-active").attr("aria-hidden","false"):(o=s.options.slidesToShow+e,i.slice(o-t+1+r,o+t+2).addClass("slick-active").attr("aria-hidden","false")),0===e?i.eq(i.length-1-s.options.slidesToShow).addClass("slick-center"):e===s.slideCount-1&&i.eq(s.options.slidesToShow).addClass("slick-center")),s.$slides.eq(e).addClass("slick-center")}else 0<=e&&e<=s.slideCount-s.options.slidesToShow?s.$slides.slice(e,e+s.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):i.length<=s.options.slidesToShow?i.addClass("slick-active").attr("aria-hidden","false"):(n=s.slideCount%s.options.slidesToShow,o=!0===s.options.infinite?s.options.slidesToShow+e:e,s.options.slidesToShow==s.options.slidesToScroll&&s.slideCount-e<s.options.slidesToShow?i.slice(o-(s.options.slidesToShow-n),o+n).addClass("slick-active").attr("aria-hidden","false"):i.slice(o,o+s.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"));"ondemand"!==s.options.lazyLoad&&"anticipated"!==s.options.lazyLoad||s.lazyLoad()},r.prototype.setupInfinite=function(){var e,t,i,o=this;if(!0===o.options.fade&&(o.options.centerMode=!1),!0===o.options.infinite&&!1===o.options.fade&&(t=null,o.slideCount>o.options.slidesToShow)){for(i=!0===o.options.centerMode?o.options.slidesToShow+1:o.options.slidesToShow,e=o.slideCount;e>o.slideCount-i;e-=1)t=e-1,d(o.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t-o.slideCount).prependTo(o.$slideTrack).addClass("slick-cloned");for(e=0;e<i+o.slideCount;e+=1)t=e,d(o.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t+o.slideCount).appendTo(o.$slideTrack).addClass("slick-cloned");o.$slideTrack.find(".slick-cloned").find("[id]").each(function(){d(this).attr("id","")})}},r.prototype.interrupt=function(e){e||this.autoPlay(),this.interrupted=e},r.prototype.selectHandler=function(e){var t=d(e.target).is(".slick-slide")?d(e.target):d(e.target).parents(".slick-slide"),i=parseInt(t.attr("data-slick-index"));i||(i=0),this.slideCount<=this.options.slidesToShow?this.slideHandler(i,!1,!0):this.slideHandler(i)},r.prototype.slideHandler=function(e,t,i){var o,n,s,r,a,l,d=this;if(t=t||!1,!(!0===d.animating&&!0===d.options.waitForAnimate||!0===d.options.fade&&d.currentSlide===e))if(!1===t&&d.asNavFor(e),o=e,a=d.getLeft(o),r=d.getLeft(d.currentSlide),d.currentLeft=null===d.swipeLeft?r:d.swipeLeft,!1===d.options.infinite&&!1===d.options.centerMode&&(e<0||e>d.getDotCount()*d.options.slidesToScroll))!1===d.options.fade&&(o=d.currentSlide,!0!==i&&d.slideCount>d.options.slidesToShow?d.animateSlide(r,function(){d.postSlide(o)}):d.postSlide(o));else if(!1===d.options.infinite&&!0===d.options.centerMode&&(e<0||e>d.slideCount-d.options.slidesToScroll))!1===d.options.fade&&(o=d.currentSlide,!0!==i&&d.slideCount>d.options.slidesToShow?d.animateSlide(r,function(){d.postSlide(o)}):d.postSlide(o));else{if(d.options.autoplay&&clearInterval(d.autoPlayTimer),n=o<0?d.slideCount%d.options.slidesToScroll!=0?d.slideCount-d.slideCount%d.options.slidesToScroll:d.slideCount+
vendor: 5,091 bytes, line 1
1o:o>=d.slideCount?d.slideCount%d.options.slidesToScroll!=0?0:o-d.slideCount:o,d.animating=!0,d.$slider.trigger("beforeChange",[d,d.currentSlide,n]),s=d.currentSlide,d.currentSlide=n,d.setSlideClasses(d.currentSlide),d.options.asNavFor&&(l=(l=d.getNavTarget()).slick("getSlick")).slideCount<=l.options.slidesToShow&&l.setSlideClasses(d.currentSlide),d.updateDots(),d.updateArrows(),!0===d.options.fade)return!0!==i?(d.fadeSlideOut(s),d.fadeSlide(n,function(){d.postSlide(n)})):d.postSlide(n),void d.animateHeight();!0!==i&&d.slideCount>d.options.slidesToShow?d.animateSlide(a,function(){d.postSlide(n)}):d.postSlide(n)}},r.prototype.startLoad=function(){var e=this;!0===e.options.arrows&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow.hide(),e.$nextArrow.hide()),!0===e.options.dots&&e.slideCount>e.options.slidesToShow&&e.$dots.hide(),e.$slider.addClass("slick-loading")},r.prototype.swipeDirection=function(){var e,t,i,o,n=this;return e=n.touchObject.startX-n.touchObject.curX,t=n.touchObject.startY-n.touchObject.curY,i=Math.atan2(t,e),(o=Math.round(180*i/Math.PI))<0&&(o=360-Math.abs(o)),o<=45&&0<=o?!1===n.options.rtl?"left":"right":o<=360&&315<=o?!1===n.options.rtl?"left":"right":135<=o&&o<=225?!1===n.options.rtl?"right":"left":!0===n.options.verticalSwiping?35<=o&&o<=135?"down":"up":"vertical"},r.prototype.swipeEnd=function(e){var t,i,o=this;if(o.dragging=!1,o.swiping=!1,o.scrolling)return o.scrolling=!1;if(o.interrupted=!1,o.shouldClick=!(10<o.touchObject.swipeLength),void 0===o.touchObject.curX)return!1;if(!0===o.touchObject.edgeHit&&o.$slider.trigger("edge",[o,o.swipeDirection()]),o.touchObject.swipeLength>=o.touchObject.minSwipe){switch(i=o.swipeDirection()){case"left":case"down":t=o.options.swipeToSlide?o.checkNavigable(o.currentSlide+o.getSlideCount()):o.currentSlide+o.getSlideCount(),o.currentDirection=0;break;case"right":case"up":t=o.options.swipeToSlide?o.checkNavigable(o.currentSlide-o.getSlideCount()):o.currentSlide-o.getSlideCount(),o.currentDirection=1}"vertical"!=i&&(o.slideHandler(t),o.touchObject={},o.$slider.trigger("swipe",[o,i]))}else o.touchObject.startX!==o.touchObject.curX&&(o.slideHandler(o.currentSlide),o.touchObject={})},r.prototype.swipeHandler=function(e){var t=this;if(!(!1===t.options.swipe||"ontouchend"in document&&!1===t.options.swipe||!1===t.options.draggable&&-1!==e.type.indexOf("mouse")))switch(t.touchObject.fingerCount=e.originalEvent&&void 0!==e.originalEvent.touches?e.originalEvent.touches.length:1,t.touchObject.minSwipe=t.listWidth/t.options.touchThreshold,!0===t.options.verticalSwiping&&(t.touchObject.minSwipe=t.listHeight/t.options.touchThreshold),e.data.action){case"start":t.swipeStart(e);break;case"move":t.swipeMove(e);break;case"end":t.swipeEnd(e)}},r.prototype.swipeMove=function(e){var t,i,o,n,s,r,a=this;return s=void 0!==e.originalEvent?e.originalEvent.touches:null,!(!a.dragging||a.scrolling||s&&1!==s.length)&&(t=a.getLeft(a.currentSlide),a.touchObject.curX=void 0!==s?s[0].pageX:e.clientX,a.touchObject.curY=void 0!==s?s[0].pageY:e.clientY,a.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(a.touchObject.curX-a.touchObject.startX,2))),r=Math.round(Math.sqrt(Math.pow(a.touchObject.curY-a.touchObject.startY,2))),!a.options.verticalSwiping&&!a.swiping&&4<r?(a.scrolling=!0,!1):(!0===a.options.verticalSwiping&&(a.touchObject.swipeLength=r),i=a.swipeDirection(),void 0!==e.originalEvent&&4<a.touchObject.swipeLength&&(a.swiping=!0,e.preventDefault()),n=(!1===a.options.rtl?1:-1)*(a.touchObject.curX>a.touchObject.startX?1:-1),!0===a.options.verticalSwiping&&(n=a.touchObject.curY>a.touchObject.startY?1:-1),o=a.touchObject.swipeLength,(a.touchObject.edgeHit=!1)===a.options.infinite&&(0===a.currentSlide&&"right"===i||a.currentSlide>=a.getDotCount()&&"left"===i)&&(o=a.touchObject.swipeLength*a.options.edgeFriction,a.touchObject.edgeHit=!0),!1===a.options.vertical?a.swipeLeft=t+o*n:a.swipeLeft=t+o*(a.$list.height()/a.listWidth)*n,!0===a.options.verticalSwiping&&(a.swipeLeft=t+o*n),!0!==a.options.fade&&!1!==a.options.touchMove&&(!0===a.animating?(a.swipeLeft=null,!1):void a.setCSS(a.swipeLeft))))},r.prototype.swipeStart=function(e){var t,i=this;if(i.interrupted=!0,1!==i.touchObject.fingerCount||i.slideCount<=i.options.slidesToShow)return i.touchObject={},!1;void 0!==e.originalEvent&&void 0!==e.originalEvent.touches&&(t=e.originalEvent.touches[0]),i.touchObject.startX=i.touchObject.curX=void 0!==t?t.pageX:e.clientX,i.touchObject.startY=i.touchObject.curY=void 0!==t?t.pageY:e.clientY,i.dragging=!0},r.prototype.unfilterSlides=r.prototype.slickUnfilter=function(){var e=this;null!==e.$slidesCache&&(e.unload(),e.$slideTrack.children(this.options.slide).detach(),e.$slidesCache.appendTo(e.$slideTrack),e.reinit())},r.prototype.unload=function(){var e=this;d(".slick-cloned",e.$slider).remove(),e.$dots&&e.$dots.remove(),e.$prevArrow&&e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.remove(),e.$nextArrow&&e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.remove(),e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")}
1,r.prototype.unslick=function(e){this.$slider.trigger("unslick",[this,e]),this.destroy()},r.prototype.updateArrows=function(){var e=this;Math.floor(e.options.slidesToShow/2),!0===e.options.arrows&&e.slideCount>e.options.slidesToShow&&!e.options.infinite&&(e.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),e.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===e.currentSlide?(e.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),e.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):e.currentSlide>=e.slideCount-e.options.slidesToShow&&!1===e.options.centerMode?(e.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),e.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):e.currentSlide>=e.slideCount-1&&!0===e.options.centerMode&&(e.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),e.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},r.prototype.updateDots=function(){var e=this;null!==e.$dots&&(e.$dots.find("li").removeClass("slick-active").end(),e.$dots.find("li").eq(Math.floor(e.currentSlide/e.options.slidesToScroll)).addClass("slick-active"))},r.prototype.visibility=function(){this.options.autoplay&&(document[this.hidden]?this.interrupted=!0:this.interrupted=!1)},d.fn.slick=function(){var e,t,i=this,o=arguments[0],n=Array.prototype.slice.call(arguments,1),s=i.length;for(e=0;e<s;e++)if("object"==typeof o||void 0===o?i[e].slick=new r(i[e],o):t=i[e].slick[o].apply(i[e].slick,n),void 0!==t)return t;return i}}),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Popper=t()}(this,function(){"use strict";var i="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,o=function(){for(var e=["Edge","Trident","Firefox"],t=0;t<e.length;t+=1)if(i&&0<=navigator.userAgent.indexOf(e[t]))return 1;return 0}();var r=i&&window.Promise?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},o))}};function a(e){return e&&"[object Function]"==={}.toString.call(e)}function b(e,t){if(1!==e.nodeType)return[];var i=e.ownerDocument.defaultView.getComputedStyle(e,null);return t?i[t]:i}function f(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}function h(e){if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body}var t=b(e),i=t.overflow,o=t.overflowX,n=t.overflowY;return/(auto|scroll|overlay)/.test(i+n+o)?e:h(f(e))}function m(e){return e&&e.referenceNode?e.referenceNode:e}var t=i&&!(!window.MSInputMethodContext||!document.documentMode),n=i&&/MSIE 10/.test(navigator.userAgent);function v(e){return 11===e?t:10===e?n:t||n}function P(e){if(!e)return document.documentElement;for(var t=v(10)?document.body:null,i=e.offsetParent||null;i===t&&e.nextElementSibling;)i=(e=e.nextElementSibling).offsetParent;var o=i&&i.nodeName;return o&&"BODY"!==o&&"HTML"!==o?-1!==["TH","TD","TABLE"].indexOf(i.nodeName)&&"static"===b(i,"position")?P(i):i:e?e.ownerDocument.documentElement:document.documentElement}function c(e){return null!==e.parentNode?c(e.parentNode):e}function g(e,t){if(!(e&&e.nodeType&&t&&t.nodeType))return document.documentElement;var i=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,o=i?e:t,n=i?t:e,s=document.createRange();s.setStart(o,0),s.setEnd(n,0);var r,a,l=s.commonAncestorContainer;if(e!==l&&t!==l||o.contains(n))return"BODY"===(a=(r=l).nodeName)||"HTML"!==a&&P(r.firstElementChild)!==r?P(l):l;var d=c(e);return d.host?g(d.host,t):g(e,c(t).host)}function y(e){var t="top"===(1<arguments.length&&void 0!==arguments[1]?arguments[1]:"top")?"scrollTop":"scrollLeft",i=e.nodeName;if("BODY"===i||"HTML"===i){var o=e.ownerDocument.documentElement;return(e.ownerDocument.scrollingElement||o)[t]}return e[t]}function u(e,t){var i="x"===t?"Left":"Top",o="Left"===i?"Right":"Bottom";return parseFloat(e["border"+i+"Width"])+parseFloat(e["border"+o+"Width"])}function s(e,t,i,o){return Math.max(t["offset"+e],t["scroll"+e],i["client"+e],i["offset"+e],i["scroll"+e],v(10)?parseInt(i["offset"+e])+parseInt(o["margin"+("Height"===e?"Top":"Left")])+parseInt(o["margin"+("Height"===e?"Bottom":"Right")]):0)}function w(e){var t=e.body,i=e.documentElement,o=v(10)&&getComputedStyle(i);return{height:s("Height",t,i,o),width:s("Width",t,i,o)}}var l=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e=function(){function o(e,t){for(var i=0;i<t.length;i++){var o=t[i];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(e,t,i){return t&&o(e.prototype,t),i&&o(e,i),e}}(),k=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},I=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(e[o]=i[o])}return e};function T(e){return I({},e,{right:e.left+e.width,bottom:e.top+e.height})}function D(e){var t={};try{if(v(10)){t=e.getBoundingClientRect();
vendor: 5,209 bytes, line 1
1var i=y(e,"top"),o=y(e,"left");t.top+=i,t.left+=o,t.bottom+=i,t.right+=o}else t=e.getBoundingClientRect()}catch(e){}var n={left:t.left,top:t.top,width:t.right-t.left,height:t.bottom-t.top},s="HTML"===e.nodeName?w(e.ownerDocument):{},r=s.width||e.clientWidth||n.width,a=s.height||e.clientHeight||n.height,l=e.offsetWidth-r,d=e.offsetHeight-a;if(l||d){var c=b(e);l-=u(c,"x"),d-=u(c,"y"),n.width-=l,n.height-=d}return T(n)}function _(e,t){var i=2<arguments.length&&void 0!==arguments[2]&&arguments[2],o=v(10),n="HTML"===t.nodeName,s=D(e),r=D(t),a=h(e),l=b(t),d=parseFloat(l.borderTopWidth),c=parseFloat(l.borderLeftWidth);i&&n&&(r.top=Math.max(r.top,0),r.left=Math.max(r.left,0));var u=T({top:s.top-r.top-d,left:s.left-r.left-c,width:s.width,height:s.height});if(u.marginTop=0,u.marginLeft=0,!o&&n){var p=parseFloat(l.marginTop),f=parseFloat(l.marginLeft);u.top-=d-p,u.bottom-=d-p,u.left-=c-f,u.right-=c-f,u.marginTop=p,u.marginLeft=f}return(o&&!i?t.contains(a):t===a&&"BODY"!==a.nodeName)&&(u=function(e,t){var i=2<arguments.length&&void 0!==arguments[2]&&arguments[2],o=y(t,"top"),n=y(t,"left"),s=i?-1:1;return e.top+=o*s,e.bottom+=o*s,e.left+=n*s,e.right+=n*s,e}(u,t)),u}function S(e){if(!e||!e.parentElement||v())return document.documentElement;for(var t=e.parentElement;t&&"none"===b(t,"transform");)t=t.parentElement;return t||document.documentElement}function p(e,t,i,o){var n=4<arguments.length&&void 0!==arguments[4]&&arguments[4],s={top:0,left:0},r=n?S(e):g(e,m(t));if("viewport"===o)s=function(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],i=e.ownerDocument.documentElement,o=_(e,i),n=Math.max(i.clientWidth,window.innerWidth||0),s=Math.max(i.clientHeight,window.innerHeight||0),r=t?0:y(i),a=t?0:y(i,"left");return T({top:r-o.top+o.marginTop,left:a-o.left+o.marginLeft,width:n,height:s})}(r,n);else{var a=void 0;"scrollParent"===o?"BODY"===(a=h(f(t))).nodeName&&(a=e.ownerDocument.documentElement):a="window"===o?e.ownerDocument.documentElement:o;var l=_(a,r,n);if("HTML"!==a.nodeName||function e(t){var i=t.nodeName;if("BODY"===i||"HTML"===i)return!1;if("fixed"===b(t,"position"))return!0;var o=f(t);return!!o&&e(o)}(r))s=l;else{var d=w(e.ownerDocument),c=d.height,u=d.width;s.top+=l.top-l.marginTop,s.bottom=c+l.top,s.left+=l.left-l.marginLeft,s.right=u+l.left}}var p="number"==typeof(i=i||0);return s.left+=p?i:i.left||0,s.top+=p?i:i.top||0,s.right-=p?i:i.right||0,s.bottom-=p?i:i.bottom||0,s}function d(e,t,o,i,n){var s=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf("auto"))return e;var r=p(o,i,s,n),a={top:{width:r.width,height:t.top-r.top},right:{width:r.right-t.right,height:r.height},bottom:{width:r.width,height:r.bottom-t.bottom},left:{width:t.left-r.left,height:r.height}},l=Object.keys(a).map(function(e){return I({key:e},a[e],{area:(t=a[e],t.width*t.height)});var t}).sort(function(e,t){return t.area-e.area}),d=l.filter(function(e){var t=e.width,i=e.height;return t>=o.clientWidth&&i>=o.clientHeight}),c=0<d.length?d[0].key:l[0].key,u=e.split("-")[1];return c+(u?"-"+u:"")}function C(e,t,i){var o=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return _(i,o?S(t):g(t,m(i)),o)}function x(e){var t=e.ownerDocument.defaultView.getComputedStyle(e),i=parseFloat(t.marginTop||0)+parseFloat(t.marginBottom||0),o=parseFloat(t.marginLeft||0)+parseFloat(t.marginRight||0);return{width:e.offsetWidth+o,height:e.offsetHeight+i}}function E(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function $(e,t,i){i=i.split("-")[0];var o=x(e),n={width:o.width,height:o.height},s=-1!==["right","left"].indexOf(i),r=s?"top":"left",a=s?"left":"top",l=s?"height":"width",d=s?"width":"height";return n[r]=t[r]+t[l]/2-o[l]/2,n[a]=i===a?t[a]-o[d]:t[E(a)],n}function N(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function A(e,i,t){return(void 0===t?e:e.slice(0,function(e,t,i){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===i});var o=N(e,function(e){return e[t]===i});return e.indexOf(o)}(e,"name",t))).forEach(function(e){e.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var t=e.function||e.fn;e.enabled&&a(t)&&(i.offsets.popper=T(i.offsets.popper),i.offsets.reference=T(i.offsets.reference),i=t(i,e))}),i}function O(e,i){return e.some(function(e){var t=e.name;return e.enabled&&t===i})}function H(e){for(var t=[!1,"ms","Webkit","Moz","O"],i=e.charAt(0).toUpperCase()+e.slice(1),o=0;o<t.length;o++){var n=t[o],s=n?""+n+i:e;if(void 0!==document.body.style[s])return s}return null}function j(e){var t=e.ownerDocument;return t?t.defaultView:window}function L(e,t,i,o){i.updateBound=o,j(e).addEventListener("resize",i.updateBound,{passive:!0});var n=h(e);return function e(t,i,o,n){var s="BODY"===t.nodeName,r=s?t.ownerDocument.defaultView:t;r.addEventListener(i,o,{passive:!0}),s||e(h(r.parentNode),i,o,n),n.push(r)}(n,"scroll",i.updateBound,i.scrollParents),i.scrollElement=n,i.eventsEnabled=!0,i}function M(){var e,t;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(e=this.reference,t=this.state,j(e).removeEventListener("resize",t.updateBound),t.scrollParents.forEac
vendor: 9,040 bytes, line 1
1h(function(e){e.removeEventListener("scroll",t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t))}function z(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function q(i,o){Object.keys(o).forEach(function(e){var t="";-1!==["width","height","top","right","bottom","left"].indexOf(e)&&z(o[e])&&(t="px"),i.style[e]=o[e]+t})}var F=i&&/Firefox/i.test(navigator.userAgent);function W(e,t,i){var o=N(e,function(e){return e.name===t}),n=!!o&&e.some(function(e){return e.name===i&&e.enabled&&e.order<o.order});if(!n){var s="`"+t+"`",r="`"+i+"`";console.warn(r+" modifier is required by "+s+" modifier in order to work, be sure to include it before "+s+"!")}return n}var B=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],R=B.slice(3);function U(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],i=R.indexOf(e),o=R.slice(i+1).concat(R.slice(0,i));return t?o.reverse():o}var Q={FLIP:"flip",CLOCKWISE:"clockwise",COUNTERCLOCKWISE:"counterclockwise"};function X(e,n,s,t){var r=[0,0],a=-1!==["right","left"].indexOf(t),i=e.split(/(\+|\-)/).map(function(e){return e.trim()}),o=i.indexOf(N(i,function(e){return-1!==e.search(/,|\s/)}));i[o]&&-1===i[o].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,d=-1!==o?[i.slice(0,o).concat([i[o].split(l)[0]]),[i[o].split(l)[1]].concat(i.slice(o+1))]:[i];return(d=d.map(function(e,t){var i=(1===t?!a:a)?"height":"width",o=!1;return e.reduce(function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,o=!0,e):o?(e[e.length-1]+=t,o=!1,e):e.concat(t)},[]).map(function(e){return function(e,t,i,o){var n=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),s=+n[1],r=n[2];if(!s)return e;if(0===r.indexOf("%")){var a=void 0;switch(r){case"%p":a=i;break;case"%":case"%r":default:a=o}return T(a)[t]/100*s}if("vh"===r||"vw"===r)return("vh"===r?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*s;return s}(e,i,n,s)})})).forEach(function(i,o){i.forEach(function(e,t){z(e)&&(r[o]+=e*("-"===i[t-1]?-1:1))})}),r}var Y={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,i=t.split("-")[0],o=t.split("-")[1];if(o){var n=e.offsets,s=n.reference,r=n.popper,a=-1!==["bottom","top"].indexOf(i),l=a?"left":"top",d=a?"width":"height",c={start:k({},l,s[l]),end:k({},l,s[l]+s[d]-r[d])};e.offsets.popper=I({},r,c[o])}return e}},offset:{order:200,enabled:!0,fn:function(e,t){var i=t.offset,o=e.placement,n=e.offsets,s=n.popper,r=n.reference,a=o.split("-")[0],l=void 0;return l=z(+i)?[+i,0]:X(i,s,r,a),"left"===a?(s.top+=l[0],s.left-=l[1]):"right"===a?(s.top+=l[0],s.left+=l[1]):"top"===a?(s.left+=l[0],s.top-=l[1]):"bottom"===a&&(s.left+=l[0],s.top+=l[1]),e.popper=s,e},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,o){var t=o.boundariesElement||P(e.instance.popper);e.instance.reference===t&&(t=P(t));var i=H("transform"),n=e.instance.popper.style,s=n.top,r=n.left,a=n[i];n.top="",n.left="",n[i]="";var l=p(e.instance.popper,e.instance.reference,o.padding,t,e.positionFixed);n.top=s,n.left=r,n[i]=a,o.boundaries=l;var d=o.priority,c=e.offsets.popper,u={primary:function(e){var t=c[e];return c[e]<l[e]&&!o.escapeWithReference&&(t=Math.max(c[e],l[e])),k({},e,t)},secondary:function(e){var t="right"===e?"left":"top",i=c[t];return c[e]>l[e]&&!o.escapeWithReference&&(i=Math.min(c[t],l[e]-("right"===e?c.width:c.height))),k({},t,i)}};return d.forEach(function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";c=I({},c,u[t](e))}),e.offsets.popper=c,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,i=t.popper,o=t.reference,n=e.placement.split("-")[0],s=Math.floor,r=-1!==["top","bottom"].indexOf(n),a=r?"right":"bottom",l=r?"left":"top",d=r?"width":"height";return i[a]<s(o[l])&&(e.offsets.popper[l]=s(o[l])-i[d]),i[l]>s(o[a])&&(e.offsets.popper[l]=s(o[a])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var i;if(!W(e.instance.modifiers,"arrow","keepTogether"))return e;var o=t.element;if("string"==typeof o){if(!(o=e.instance.popper.querySelector(o)))return e}else if(!e.instance.popper.contains(o))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var n=e.placement.split("-")[0],s=e.offsets,r=s.popper,a=s.reference,l=-1!==["left","right"].indexOf(n),d=l?"height":"width",c=l?"Top":"Left",u=c.toLowerCase(),p=l?"left":"top",f=l?"bottom":"right",h=x(o)[d];a[f]-h<r[u]&&(e.offsets.popper[u]-=r[u]-(a[f]-h)),a[u]+h>r[f]&&(e.offsets.popper[u]+=a[u]+h-r[f]),e.offsets.popper=T(e.offsets.popper);var m=a[u]+a[d]/2-h/2,v=b(e.instance.popper),g=parseFloat(v["margin"+c]),y=parseFloat(v["border"+c+"Width"]),w=m-e.offsets.popper[u]-g-y;return w=Math.max(Math.min(r[d]-h,w),0),e.arrowElement=o,e.offsets.arrow=(k(i={},u,Math.round(w)),k(i,p,""),i),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(v,g){if(O(v.instance.modifiers,"inner"))return v;if(v.flipped&&v.placement===v.originalPlacement)return v;var y=p(v.instance.popper,v.instance.reference,g.padding,g.boundariesElement,v.positionFixed),w=v.placement.split("-")[0],b=E(w),k=v.placement.split("-")[1]||"",T=[];switch(g.behavior){case Q.FLIP:T=[w,b];break;case Q.CLOCKWISE:T=U(w);break;case Q.COUNTERCLOCKWISE:T=U(w,!0);break;default:T=g.behavior}return T.forEach(function(e,t){if(w!==e||T.length===t+1)return v;w=v.placement.split("-")[0],b=E(w);var i,o=v.offsets.popper,n=v.offsets.reference,s=Math.floor,r="left"===w&&s(o.right)>s(n.left)||"right"===w&&s(o.left)<s(n.right)||"top"===w&&s(o.bottom)>s(n.top)||"bottom"===w&&s(o.top)<s(n.bottom),a=s(o.left)<s(y.left),l=s(o.right)>s(y.right),d=s(o.top)<s(y.top),c=s(o.bottom)>s(y.bottom),u="left"===w&&a||"right"===w&&l||"top"===w&&d||"bottom"===w&&c,p=-1!==["top","bottom"].indexOf(w),f=!!g.flipVariations&&(p&&"start"===k&&a||p&&"end"===k&&l||!p&&"start"===k&&d||!p&&"end"===k&&c),h=!!g.flipVariationsByContent&&(p&&"start"===k&&l||p&&"end"===k&&a||!p&&"start"===k&&c||!p&&"end"===k&&d),m=f||h;(r||u||m)&&(v.flipped=!0,(r||u)&&(w=T[t+1]),m&&(k="end"===(i=k)?"start":"start"===i?"end":i),v.placement=w+(k?"-"+k:""),v.offsets.popper=I({},v.offsets.popper,$(v.instance.popper,v.offsets.reference,v.placement)),v=A(v.instance.modifiers,v,"flip"))}),v},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,i=t.split("-")[0],o=e.offsets,n=o.popper,s=o.reference,r=-1!==["left","right"].indexOf(i),a=-1===["top","left"].indexOf(i);return n[r?"left":"top"]=s[i]-(a?n[r?"width":"height"]:0),e.placement=E(t),e.offsets.popper=T(n),e}},hide:{order:800,enabled:!0,fn:function(e){if(!W(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,i=N(e.instance.modifiers,function(e){return"preventOverflow"===e.name}).boundaries;if(t.bottom<i.top||t.left>i.right||t.top>i.bottom||t.right<i.left){if(!0===e.hide)return e;e.hide=!0,e.attributes["x-out-of-boundaries"]=""}else{if(!1===e.hide)return e;e.hide=!1,e.attributes["x-out-of-boundaries"]=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var i=t.x,o=t.y,n=e.offsets.popper,s=N(e.instance.modifiers,function(e){return"applyStyle"===e.name}).gpuAcceleration;void 0!==s&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var r,a,l,d,c,u,p,f,h,m,v,g,y,w,b=void 0!==s?s:t.gpuAcceleration,k=P(e.instance.popper),T=D(k),_={position:n.position},S=(r=e,a=window.devicePixelRatio<2||!F,l=r.offsets,d=l.popper,c=l.reference,u=Math.round,p=Math.floor,f=function(e){return e},h=u(c.width),m=u(d.width),v=-1!==["left","right"].indexOf(r.placement),g=-1!==r.placement.indexOf("-"),w=a?u:f,{left:(y=a?v||g||h%2==m%2?u:p:f)(h%2==1&&m%2==1&&!g&&a?d.left-1:d.left),top:w(d.top),bottom:w(d.bottom),right:y(d.right)}),C="bottom"===i?"top":"bottom",x="right"===o?"left":"right",E=H("transform"),$=void 0,A=void 0;if(A="bottom"===C?"HTML"===k.nodeName?-k.clientHeight+S.bottom:-T.height+S.bottom:S.top,$="right"===x?"HTML"===k.nodeName?-k.clientWidth+S.right:-T.width+S.right:S.left,b&&E)_[E]="translate3d("+$+"px, "+A+"px, 0)",_[C]=0,_[x]=0,_.willChange="transform";else{var O="bottom"===C?-1:1,j="right"===x?-1:1;_[C]=A*O,_[x]=$*j,_.willChange=C+", "+x}var L={"x-placement":e.placement};return e.attributes=I({},L,e.attributes),e.styles=I({},_,e.styles),e.arrowStyles=I({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(e){var t,i;return q(e.instance.popper,e.styles),t=e.instance.popper,i=e.attributes,Object.keys(i).forEac
1h(function(e){!1!==i[e]?t.setAttribute(e,i[e]):t.removeAttribute(e)}),e.arrowElement&&Object.keys(e.arrowStyles).length&&q(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,i,o,n){var s=C(n,t,e,i.positionFixed),r=d(i.placement,s,t,e,i.modifiers.flip.boundariesElement,i.modifiers.flip.padding);return t.setAttribute("x-placement",r),q(t,{position:i.positionFixed?"fixed":"absolute"}),i},gpuAcceleration:void 0}}},V=function(){function s(e,t){var i=this,o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};l(this,s),this.scheduleUpdate=function(){return requestAnimationFrame(i.update)},this.update=r(this.update.bind(this)),this.options=I({},s.Defaults,o),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=t&&t.jquery?t[0]:t,this.options.modifiers={},Object.keys(I({},s.Defaults.modifiers,o.modifiers)).forEach(function(e){i.options.modifiers[e]=I({},s.Defaults.modifiers[e]||{},o.modifiers?o.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return I({name:e},i.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(e){e.enabled&&a(e.onLoad)&&e.onLoad(i.reference,i.popper,i.options,e,i.state)}),this.update();var n=this.options.eventsEnabled;n&&this.enableEventListeners(),this.state.eventsEnabled=n}return e(s,[{key:"update",value:function(){return function(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=C(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=d(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=$(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=A(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}.call(this)}},{key:"destroy",value:function(){return function(){return this.state.isDestroyed=!0,O(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[H("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}.call(this)}},{key:"enableEventListeners",value:function(){return function(){this.state.eventsEnabled||(this.state=L(this.reference,this.options,this.state,this.scheduleUpdate))}.call(this)}},{key:"disableEventListeners",value:function(){return M.call(this)}}]),s}();return V.Utils=("undefined"!=typeof window?window:global).PopperUtils,V.placements=B,V.Defaults=Y,V}),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).Util=t(e.jQuery)}(this,function(e){"use strict";var s=function(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}(e),t="transitionend";function i(e){var t=this,i=!1;return s.default(this).one(l.TRANSITION_END,function(){i=!0}),setTimeout(function(){i||l.triggerTransitionEnd(t)},e),this}var l={TRANSITION_END:"bsTransitionEnd",getUID:function(e){for(;e+=~~(1e6*Math.random()),document.getElementById(e););return e},getSelectorFromElement:function(e){var t=e.getAttribute("data-target");if(!t||"#"===t){var i=e.getAttribute("href");t=i&&"#"!==i?i.trim():""}try{return document.querySelector(t)?t:null}catch(e){return null}},getTransitionDurationFromElement:function(e){if(!e)return 0;var t=s.default(e).css("transition-duration"),i=s.default(e).css("transition-delay"),o=parseFloat(t),n=parseFloat(i);return o||n?(t=t.split(",")[0],i=i.split(",")[0],1e3*(parseFloat(t)+parseFloat(i))):0},reflow:function(e){return e.offsetHeight},triggerTransitionEnd:function(e){s.default(e).trigger(t)},supportsTransitionEnd:function(){return Boolean(t)},isElement:function(e){return(e[0]||e).nodeType},typeCheckConfig:function(e,t,i){for(var o in i)if(Object.prototype.hasOwnProperty.call(i,o)){var n=i[o],s=t[o],r=s&&l.isElement(s)?"element":null==(a=s)?""+a:{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(n).test(r))throw new Error(e.toUpperCase()+': Option "'+o+'" provided type "'+r+'" but expected type "'+n+'".')}var a},findShadowRoot:function(e){if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){var t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?l.findShadowRoot(e.parentNode):null},jQueryDetection:function(){if(void 0===s.default)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var e=s.default.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1===e[0]&&9===e[1]&&e[2]<1||4<=e[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};return l.jQueryDetection(),s.default.fn.emulateTransitionEnd=i,s.default.event.special[l.TRANSITION_END]={bindType:t,delegateType:t,handle:function(e){if(s.default(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}},l}),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("jquery"),require("popper.js"),require("./util.js")):"function"==typeof define&&define.amd?define(["jquery","popper.js","./util"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).Dropdown=t(e.jQuery,e.Popper,e.Util)}(this,function(e,t,i){"use strict";function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=o(e),s=o(t),r=o(i);function n(e,t){for(var i=0;i<t.length;i++){var o=t[i];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function a(){return(a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(e[o]=i[o])}return e}).apply(this,arguments)}var l="dropdown",u="bs.dropdown",p="."+u,d=".data-api",f=c.default.fn[l],h=new RegExp("38|40|27"),m="hide"+p,v="hidden"+p,g="click"+p+d,y="keydown"+p+d,w="disabled",b="show",k="dropdown-menu-right",T='[data-toggle="dropdown"]',_=".dropdown-menu",S={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null}
1,C={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},x=function(){function d(e,t){this._element=e,this._popper=null,this._config=this._getConfig(t),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var e,t,i,o=d.prototype;return o.toggle=function(){if(!this._element.disabled&&!c.default(this._element).hasClass(w)){var e=c.default(this._menu).hasClass(b);d._clearMenus(),e||this.show(!0)}},o.show=function(e){if(void 0===e&&(e=!1),!(this._element.disabled||c.default(this._element).hasClass(w)||c.default(this._menu).hasClass(b))){var t={relatedTarget:this._element},i=c.default.Event("show.bs.dropdown",t),o=d._getParentFromElement(this._element);if(c.default(o).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar&&e){if(void 0===s.default)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");var n=this._element;"parent"===this._config.reference?n=o:r.default.isElement(this._config.reference)&&(n=this._config.reference,void 0!==this._config.reference.jquery&&(n=this._config.reference[0])),"scrollParent"!==this._config.boundary&&c.default(o).addClass("position-static"),this._popper=new s.default(n,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===c.default(o).closest(".navbar-nav").length&&c.default(document.body).children().on("mouseover",null,c.default.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),c.default(this._menu).toggleClass(b),c.default(o).toggleClass(b).trigger(c.default.Event("shown.bs.dropdown",t))}}},o.hide=function(){if(!this._element.disabled&&!c.default(this._element).hasClass(w)&&c.default(this._menu).hasClass(b)){var e={relatedTarget:this._element},t=c.default.Event(m,e),i=d._getParentFromElement(this._element);c.default(i).trigger(t),t.isDefaultPrevented()||(this._popper&&this._popper.destroy(),c.default(this._menu).toggleClass(b),c.default(i).toggleClass(b).trigger(c.default.Event(v,e)))}},o.dispose=function(){c.default.removeData(this._element,u),c.default(this._element).off(p),this._element=null,(this._menu=null)!==this._popper&&(this._popper.destroy(),this._popper=null)},o.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},o._addEventListeners=function(){var t=this;c.default(this._element).on("click.bs.dropdown",function(e){e.preventDefault(),e.stopPropagation(),t.toggle()})},o._getConfig=function(e){return e=a({},this.constructor.Default,c.default(this._element).data(),e),r.default.typeCheckConfig(l,e,this.constructor.DefaultType),e},o._getMenuElement=function(){if(!this._menu){var e=d._getParentFromElement(this._element);e&&(this._menu=e.querySelector(_))}return this._menu},o._getPlacement=function(){var e=c.default(this._element.parentNode),t="bottom-start";return e.hasClass("dropup")?t=c.default(this._menu).hasClass(k)?"top-end":"top-start":e.hasClass("dropright")?t="right-start":e.hasClass("dropleft")?t="left-start":c.default(this._menu).hasClass(k)&&(t="bottom-end"),t},o._detectNavbar=function(){return 0<c.default(this._element).closest(".navbar").length},o._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=a({},e.offsets,t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},o._getPopperConfig=function(){var e={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(e.modifiers.applyStyle={enabled:!1}),a({},e,this._config.popperConfig)},d._jQueryInterface=function(t){return this.each(function(){var e=c.default(this).data(u);if(e||(e=new d(this,"object"==typeof t?t:null),c.default(this).data(u,e)),"string"==typeof t){if(void 0===e[t])throw new TypeError('No method named "'+t+'"');e[t]()}})},d._clearMenus=function(e){if(!e||3!==e.which&&("keyup"!==e.type||9===e.which))for(var t=[].slice.call(document.querySelectorAll(T)),i=0,o=t.length;i<o;i++){var n=d._getParentFromElement(t[i]),s=c.default(t[i]).data(u),r={relatedTarget:t[i]};if(e&&"click"===e.type&&(r.clickEvent=e),s){var a=s._menu;if(c.default(n).hasClass(b)&&!(e&&("click"===e.type&&/input|textarea/i.test(e.target.tagName)||"keyup"===e.type&&9===e.which)&&c.default.contains(n,e.target))){var l=c.default.Event(m,r);c.default(n).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&c.default(document.body).children().off("mouseover",null,c.default.noop),t[i].setAttribute("aria-expanded","fal
1se"),s._popper&&s._popper.destroy(),c.default(a).removeClass(b),c.default(n).removeClass(b).trigger(c.default.Event(v,r)))}}}},d._getParentFromElement=function(e){var t,i=r.default.getSelectorFromElement(e);return i&&(t=document.querySelector(i)),t||e.parentNode},d._dataApiKeydownHandler=function(e){if((/input|textarea/i.test(e.target.tagName)?!(32===e.which||27!==e.which&&(40!==e.which&&38!==e.which||c.default(e.target).closest(_).length)):h.test(e.which))&&!this.disabled&&!c.default(this).hasClass(w)){var t=d._getParentFromElement(this),i=c.default(t).hasClass(b);if(i||27!==e.which){if(e.preventDefault(),e.stopPropagation(),!i||27===e.which||32===e.which)return 27===e.which&&c.default(t.querySelector(T)).trigger("focus"),void c.default(this).trigger("click");var o=[].slice.call(t.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter(function(e){return c.default(e).is(":visible")});if(0!==o.length){var n=o.indexOf(e.target);38===e.which&&0<n&&n--,40===e.which&&n<o.length-1&&n++,n<0&&(n=0),o[n].focus()}}}},e=d,i=[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return S}},{key:"DefaultType",get:function(){return C}}],(t=null)&&n(e.prototype,t),i&&n(e,i),d}();return c.default(document).on(y,T,x._dataApiKeydownHandler).on(y,_,x._dataApiKeydownHandler).on(g+" keyup.bs.dropdown.data-api",x._clearMenus).on(g,T,function(e){e.preventDefault(),e.stopPropagation(),x._jQueryInterface.call(c.default(this),"toggle")}).on(g,".dropdown form",function(e){e.stopPropagation()}),c.default.fn[l]=x._jQueryInterface,c.default.fn[l].Constructor=x,c.default.fn[l].noConflict=function(){return c.default.fn[l]=f,x._jQueryInterface},x}),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("jquery"),require("./util.js")):"function"==typeof define&&define.amd?define(["jquery","./util"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).Collapse=t(e.jQuery,e.Util)}(this,function(e,t){"use strict";function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=i(e),d=i(t);function n(e,t){for(var i=0;i<t.length;i++){var o=t[i];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function s(){return(s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(e[o]=i[o])}return e}).apply(this,arguments)}var r="collapse",c="bs.collapse",o=l.default.fn[r],u={toggle:!0,parent:""},p={toggle:"boolean",parent:"(string|element)"},f="show",h="collapse",m="collapsing",v="collapsed",g='[data-toggle="collapse"]',a=function(){function a(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var i=[].slice.call(document.querySelectorAll(g)),o=0,n=i.length;o<n;o++){var s=i[o],r=d.default.getSelectorFromElement(s),a=[].slice.call(document.querySelectorAll(r)).filter(function(e){return e===t});null!==r&&0<a.length&&(this._selector=r,this._triggerArray.push(s))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var e,t,i,o=a.prototype;return o.toggle=function(){l.default(this._element).hasClass(f)?this.hide():this.show()},o.show=function(){var e,t,i=this;if(!this._isTransitioning&&!l.default(this._element).hasClass(f)&&(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter(function(e){return"string"==typeof i._config.parent?e.getAttribute("data-parent")===i._config.parent:e.classList.contains(h)})).length&&(e=null),!(e&&(t=l.default(e).not(this._selector).data(c))&&t._isTransitioning))){var o=l.default.Event("show.bs.collapse");if(l.default(this._element).trigger(o),!o.isDefaultPrevented()){e&&(a._jQueryInterface.call(l.default(e).not(this._selector),"hide"),t||l.default(e).data(c,null));var n=this._getDimension();l.default(this._element).removeClass(h).addClass(m),this._element.style[n]=0,this._triggerArray.length&&l.default(this._triggerArray).removeClass(v).attr("aria-expanded",!0),this.setTransitioning(!0);var s="scroll"+(n[0].toUpperCase()+n.slice(1)),r=d.default.getTransitionDurationFromElement(this._element);l.default(this._element).one(d.default.TRANSITION_END,function(){l.default(i._element).removeClass(m).addClass(h+" "+f),i._element.style[n]="",i.setTransitioning(!1),l.default(i._element).trigger("shown.bs.collapse")}).emulateTransitionEnd(r),this._element.style[n]=this._element[s]+"px"}}},o.hide=function(){var e=this;if(!this._isTransitioning&&l.default(this._element).hasClass(f)){var t=l.default.Event("hide.bs.collapse");if(l.default(this._element).trigger(t),!t.isDefaultPrevented()){var i=this._getDimension();this._element.style[i]=this._element.getBoundingClientRect()[i]+"px",d.default.reflow(this._element),l.default(this._element).addClass(m).removeClass(h+" "+f);var o=this._triggerArray.length;if(0<o)for(var n=0;n<o;n++){var s=this._triggerArray[n],r=d.default.getSelectorFromElement(s);if(null!==r)l.default([].slice.call(document.querySelectorAll(r))).hasClass(f)||l.default(s).addClass(v).attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[i]="";var a=d.default.getTransitionDurationFromElement(this._element);l.default(this._element).one(d.default.TRANSITION_END,function(){e.setTransitioning(!1),l.default(e._element).removeClass(m).addClass(h).trigger("hidden.bs.collapse")}).emulateTransitionEnd(a)}}},o.setTransitioning=function(e){this._isTransitioning=e},o.dispose=function(){l.default.removeData(this._element,c),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},o._getConfig=function(e){return(e=s({},u,e)).toggle=Boolean(e.toggle),d.default.typeCheckConfig(r,e,p),e},o._getDimension=function(){return l.default(this._element).hasClass("width")?"width":"height"},o._getParent=function(){var e,i=this;d.default.isElement(this._config.parent)?(e=this._config.parent,void 0!==this._config.parent.jquery&&(e=this._config.parent[0])):e=document.querySelector(this._config.parent);var t='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',o=[].slice.call(e.querySelectorAll(t));return l.default(o).each(function(e,t){i._addAriaAndCollapsedClass(a._getTargetFromElement(t),[t])}),e},o._addAriaAndCollapsedClass=function(e,t){var i=l.default(e).hasClass(f);t.length&&l.default(t).toggleClass(v,!i).attr("aria-expanded",i)},a._getTargetFromElement=function(e){var t=d.default.getSelectorFromElement(e);return t?document.querySelector(t):null},a._jQueryInterface=function(o){return this.each(function(){var e=l.default(this),t=e.data(c),i=s({},u,e.data(),"object"==typeof o&&o?o:{});if(!t&&i.toggle&&"string"==typeof o&&/show|hide/.test(o)&&(i.toggle=!1),t||(t=new a(this,i),e.data(c,t)),"string"==typeof o){if(void 0===t[o])throw new TypeError('No method n
1amed "'+o+'"');t[o]()}})},e=a,i=[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return u}}],(t=null)&&n(e.prototype,t),i&&n(e,i),a}();return l.default(document).on("click.bs.collapse.data-api",g,function(e){"A"===e.currentTarget.tagName&&e.preventDefault();var i=l.default(this),t=d.default.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(t));l.default(o).each(function(){var e=l.default(this),t=e.data(c)?"toggle":i.data();a._jQueryInterface.call(e,t)})}),l.default.fn[r]=a._jQueryInterface,l.default.fn[r].Constructor=a,l.default.fn[r].noConflict=function(){return l.default.fn[r]=o,a._jQueryInterface},a}),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("jquery"),require("./util.js")):"function"==typeof define&&define.amd?define(["jquery","./util"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).Carousel=t(e.jQuery,e.Util)}(this,function(e,t){"use strict";function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=i(e),h=i(t);function n(e,t){for(var i=0;i<t.length;i++){var o=t[i];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function r(){return(r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(e[o]=i[o])}return e}).apply(this,arguments)}var a="carousel",l="bs.carousel",d="."+l,o=f.default.fn[a],c={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},u={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},m="next",p="prev",v="slid"+d,g="active",y=".active.carousel-item",w=".carousel-indicators",b={TOUCH:"touch",PEN:"pen"},s=function(){function s(e,t){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(t),this._element=e,this._indicatorsElement=this._element.querySelector(w),this._touchSupported="ontouchstart"in document.documentElement||0<navigator.maxTouchPoints,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var e,t,i,o=s.prototype;return o.next=function(){this._isSliding||this._slide(m)},o.nextWhenVisible=function(){var e=f.default(this._element);!document.hidden&&e.is(":visible")&&"hidden"!==e.css("visibility")&&this.next()},o.prev=function(){this._isSliding||this._slide(p)},o.pause=function(e){e||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(h.default.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},o.cycle=function(e){e||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},o.to=function(e){var t=this;this._activeElement=this._element.querySelector(y);var i=this._getItemIndex(this._activeElement);if(!(e>this._items.length-1||e<0))if(this._isSliding)f.default(this._element).one(v,function(){return t.to(e)});else{if(i===e)return this.pause(),void this.cycle();var o=i<e?m:p;this._slide(o,this._items[e])}},o.dispose=function(){f.default(this._element).off(d),f.default.removeData(this._element,l),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},o._getConfig=function(e){return e=r({},c,e),h.default.typeCheckConfig(a,e,u),e},o._handleSwipe=function(){var e=Math.abs(this.touchDeltaX);if(!(e<=40)){var t=e/this.touchDeltaX;(this.touchDeltaX=0)<t&&this.prev(),t<0&&this.next()}},o._addEventListeners=function(){var t=this;this._config.keyboard&&f.default(this._element).on("keydown.bs.carousel",function(e){return t._keydown(e)}),"hover"===this._config.pause&&f.default(this._element).on("mouseenter.bs.carousel",function(e){return t.pause(e)}).on("mouseleave.bs.carousel",function(e){return t.cycle(e)}),this._config.touch&&this._addTouchEventListeners()},o._addTouchEventListeners=function(){var i=this;if(this._touchSupported){var t=function(e){i._pointerEvent&&b[e.originalEvent.pointerType.toUpperCase()]?i.touchStartX=e.originalEvent.clientX:i._pointerEvent||(i.touchStartX=e.originalEvent.touches[0].clientX)},o=function(e){i._pointerEvent&&b[e.originalEvent.pointerType.toUpperCase()]&&(i.touchDeltaX=e.originalEvent.clientX-i.touchStartX),i._handleSwipe(),"hover"===i._config.pause&&(i.pause(),i.touchTimeout&&clearTimeout(i.touchTimeout),i.touchTimeout=setTimeout(function(e){return i.cycle(e)},500+i._config.interval))};f.default(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.c
1arousel",function(e){return e.preventDefault()}),this._pointerEvent?(f.default(this._element).on("pointerdown.bs.carousel",function(e){return t(e)}),f.default(this._element).on("pointerup.bs.carousel",function(e){return o(e)}),this._element.classList.add("pointer-event")):(f.default(this._element).on("touchstart.bs.carousel",function(e){return t(e)}),f.default(this._element).on("touchmove.bs.carousel",function(e){var t;(t=e).originalEvent.touches&&1<t.originalEvent.touches.length?i.touchDeltaX=0:i.touchDeltaX=t.originalEvent.touches[0].clientX-i.touchStartX}),f.default(this._element).on("touchend.bs.carousel",function(e){return o(e)}))}},o._keydown=function(e){if(!/input|textarea/i.test(e.target.tagName))switch(e.which){case 37:e.preventDefault(),this.prev();break;case 39:e.preventDefault(),this.next()}},o._getItemIndex=function(e){return this._items=e&&e.parentNode?[].slice.call(e.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(e)},o._getItemByDirection=function(e,t){var i=e===m,o=e===p,n=this._getItemIndex(t),s=this._items.length-1;if((o&&0===n||i&&n===s)&&!this._config.wrap)return t;var r=(n+(e===p?-1:1))%this._items.length;return-1===r?this._items[this._items.length-1]:this._items[r]},o._triggerSlideEvent=function(e,t){var i=this._getItemIndex(e),o=this._getItemIndex(this._element.querySelector(y)),n=f.default.Event("slide.bs.carousel",{relatedTarget:e,direction:t,from:o,to:i});return f.default(this._element).trigger(n),n},o._setActiveIndicatorElement=function(e){if(this._indicatorsElement){var t=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));f.default(t).removeClass(g);var i=this._indicatorsElement.children[this._getItemIndex(e)];i&&f.default(i).addClass(g)}},o._updateInterval=function(){var e=this._activeElement||this._element.querySelector(y);if(e){var t=parseInt(e.getAttribute("data-interval"),10);t?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=t):this._config.interval=this._config.defaultInterval||this._config.interval}},o._slide=function(e,t){var i,o,n,s=this,r=this._element.querySelector(y),a=this._getItemIndex(r),l=t||r&&this._getItemByDirection(e,r),d=this._getItemIndex(l),c=Boolean(this._interval);if(e===m?(i="carousel-item-left",o="carousel-item-next",n="left"):(i="carousel-item-right",o="carousel-item-prev",n="right"),l&&f.default(l).hasClass(g))this._isSliding=!1;else if(!this._triggerSlideEvent(l,n).isDefaultPrevented()&&r&&l){this._isSliding=!0,c&&this.pause(),this._setActiveIndicatorElement(l),this._activeElement=l;var u=f.default.Event(v,{relatedTarget:l,direction:n,from:a,to:d});if(f.default(this._element).hasClass("slide")){f.default(l).addClass(o),h.default.reflow(l),f.default(r).addClass(i),f.default(l).addClass(i);var p=h.default.getTransitionDurationFromElement(r);f.default(r).one(h.default.TRANSITION_END,function(){f.default(l).removeClass(i+" "+o).addClass(g),f.default(r).removeClass(g+" "+o+" "+i),s._isSliding=!1,setTimeout(function(){return f.default(s._element).trigger(u)},0)}).emulateTransitionEnd(p)}else f.default(r).removeClass(g),f.default(l).addClass(g),this._isSliding=!1,f.default(this._element).trigger(u);c&&this.cycle()}},s._jQueryInterface=function(o){return this.each(function(){var e=f.default(this).data(l),t=r({},c,f.default(this).data());"object"==typeof o&&(t=r({},t,o));var i="string"==typeof o?o:t.slide;if(e||(e=new s(this,t),f.default(this).data(l,e)),"number"==typeof o)e.to(o);else if("string"==typeof i){if(void 0===e[i])throw new TypeError('No method named "'+i+'"');e[i]()}else t.interval&&t.ride&&(e.pause(),e.cycle())})},s._dataApiClickHandler=function(e){var t=h.default.getSelectorFromElement(this);if(t){var i=f.default(t)[0];if(i&&f.default(i).hasClass("carousel")){var o=r({},f.default(i).data(),f.default(this).data()),n=this.getAttribute("data-slide-to");n&&(o.interval=!1),s._jQueryInterface.call(f.default(i),o),n&&f.default(i).data(l).to(n),e.preventDefault()}}},e=s,i=[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return c}}],(t=null)&&n(e.prototype,t),i&&n(e,i),s}();return f.default(document).on("click.bs.carousel.data-api","[data-sli
1de], [data-slide-to]",s._dataApiClickHandler),f.default(window).on("load.bs.carousel.data-api",function(){for(var e=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),t=0,i=e.length;t<i;t++){var o=f.default(e[t]);s._jQueryInterface.call(o,o.data())}}),f.default.fn[a]=s._jQueryInterface,f.default.fn[a].Constructor=s,f.default.fn[a].noConflict=function(){return f.default.fn[a]=o,s._jQueryInterface},s}),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("jquery"),require("./util.js")):"function"==typeof define&&define.amd?define(["jquery","./util"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).Tab=t(e.jQuery,e.Util)}(this,function(e,t){"use strict";function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=i(e),c=i(t);function s(e,t){for(var i=0;i<t.length;i++){var o=t[i];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}var r="bs.tab",o=d.default.fn.tab,u="active",p=".active",f="> li > .active",n=function(){function o(e){this._element=e}var e,t,i,n=o.prototype;return n.show=function(){var i=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&d.default(this._element).hasClass(u)||d.default(this._element).hasClass("disabled"))){var e,o,t=d.default(this._element).closest(".nav, .list-group")[0],n=c.default.getSelectorFromElement(this._element);if(t){var s="UL"===t.nodeName||"OL"===t.nodeName?f:p;o=(o=d.default.makeArray(d.default(t).find(s)))[o.length-1]}var r=d.default.Event("hide.bs.tab",{relatedTarget:this._element}),a=d.default.Event("show.bs.tab",{relatedTarget:o});if(o&&d.default(o).trigger(r),d.default(this._element).trigger(a),!a.isDefaultPrevented()&&!r.isDefaultPrevented()){n&&(e=document.querySelector(n)),this._activate(this._element,t);var l=function(){var e=d.default.Event("hidden.bs.tab",{relatedTarget:i._element}),t=d.default.Event("shown.bs.tab",{relatedTarget:o});d.default(o).trigger(e),d.default(i._element).trigger(t)};e?this._activate(e,e.parentNode,l):l()}}},n.dispose=function(){d.default.removeData(this._element,r),this._element=null},n._activate=function(e,t,i){var o=this,n=(!t||"UL"!==t.nodeName&&"OL"!==t.nodeName?d.default(t).children(p):d.default(t).find(f))[0],s=i&&n&&d.default(n).hasClass("fade"),r=function(){return o._transitionComplete(e,n,i)};if(n&&s){var a=c.default.getTransitionDurationFromElement(n);d.default(n).removeClass("show").one(c.default.TRANSITION_END,r).emulateTransitionEnd(a)}else r()},n._transitionComplete=function(e,t,i){if(t){d.default(t).removeClass(u);var o=d.default(t.parentNode).find("> .dropdown-menu .active")[0];o&&d.default(o).removeClass(u),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!1)}if(d.default(e).addClass(u),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!0),c.default.reflow(e),e.classList.contains("fade")&&e.classList.add("show"),e.parentNode&&d.default(e.parentNode).hasClass("dropdown-menu")){var n=d.default(e).closest(".dropdown")[0];if(n){var s=[].slice.call(n.querySelectorAll(".dropdown-toggle"));d.default(s).addClass(u)}e.setAttribute("aria-expanded",!0)}i&&i()},o._jQueryInterface=function(i){return this.each(function(){var e=d.default(this),t=e.data(r);if(t||(t=new o(this),e.data(r,t)),"string"==typeof i){if(void 0===t[i])throw new TypeError('No method named "'+i+'"');t[i]()}})},e=o,i=[{key:"VERSION",get:function(){return"4.6.0"}}],(t=null)&&s(e.prototype,t),i&&s(e,i),o}();return d.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',function(e){e.preventDefault(),n._jQueryInterface.call(d.default(this),"show")}),d.default.fn.tab=n._jQueryInterface,d.default.fn.tab.Constructor=n,d.default.fn.tab.noConflict=function(){return d.default.fn.tab=o,n._jQueryInterface},n});
2//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImN1c3RvbS5qcyIsInNlYXJjaC5qcyIsInNsaWNrLmpzIiwicG9wcGVyLmpzIiwidXRpbC5qcyIsImRyb3Bkb3duLmpzIiwiY29sbGFwc2UuanMiLCJjYXJvdXNlbC5qcyIsInRhYi5qcyJdLCJuYW1lcyI6WyJqUXVlcnkiLCJkb2N1bWVudCIsInJlYWR5IiwiJCIsImZuIiwidGhyZXNoaG9sZCIsInNjb3BlIiwibGFzdCIsImRlZmVyVGltZXIiLCJvbiIsImV2ZW50Iiwic2VhcmNoRmlsdGVyIiwiY3VycmVudFBhZ2UiLCJwYXJzZUludCIsInRleHQiLCJzZWxlY3RlZENhdGVnb3J5VmFsdWUiLCJ2YWwiLCJwYXJlbnQiLCJoaWRlIiwic2hvdyIsIndpbmRvdyIsInNjcm9sbCIsInNjcm9sbFkiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwiY29udGV4dCIsInRoaXMiLCJub3ciLCJEYXRlIiwiYXJncyIsImFyZ3VtZW50cyIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJhcHBseSIsInNlbGVjdHBpY2tlciIsInNsaWNrIiwiZG90cyIsImFycm93cyIsImluZmluaXRlIiwic3BlZWQiLCJhdXRvcGxheSIsImF1dG9wbGF5U3BlZWQiLCJmYWRlIiwibGF6eUxvYWQiLCJwYXVzZU9uSG92ZXIiLCJtZW51VGV4dCIsImhhc0NsYXNzIiwidHJpbSIsInNpYmxpbmdzIiwiZmluZCIsImh0bWwiLCJ0b2dnbGVDbGFzcyIsIndpZHRoIiwibmF2Iiwic2xpZGVUb2dnbGUiLCJsYXp5IiwiYWZ0ZXJMb2FkIiwi
2ZWxlbWVudCIsImxlbmd0aCIsImlzSW5WaWV3IiwiYXR0ciIsIl8iLCJ2IiwicmVwbGFjZSIsInNsaWRlc1RvU2hvdyIsInNsaWRlc1RvU2Nyb2xsIiwicmVzcG9uc2l2ZSIsImJyZWFrcG9pbnQiLCJzZXR0aW5ncyIsImNsaWNrIiwiYnV0dG9uIiwidmlkZW8iLCJwYXJlbnRzIiwic3JjIiwiZWFjaCIsIiRpbWciLCJpbWdJRCIsImltZ0NsYXNzIiwiaW1nVVJMIiwiZ2V0IiwiZGF0YSIsIiRzdmciLCJyZW1vdmVBdHRyIiwicmVwbGFjZVdpdGgiLCJ0IiwiZSIsInIiLCJhIiwiaSIsInUiLCJsIiwiZiIsIm4iLCJMIiwiZGV2aWNlUGl4ZWxSYXRpbyIsImMiLCJkZWxheSIsInMiLCJjb21iaW5lZCIsInRocm90dGxlIiwidHlwZSIsInciLCJCIiwiYWxsIiwibyIsImNhbGwiLCJlbmFibGVUaHJvdHRsZSIsInB1c2giLCJnIiwiZmlsdGVyIiwibG9hZGVkTmFtZSIsImFwcGVuZFNjcm9sbCIsImRlZmF1bHRJbWFnZSIsInBsYWNlaG9sZGVyIiwiaW1hZ2VCYXNlIiwic3Jjc2V0QXR0cmlidXRlIiwibG9hZGVyQXR0cmlidXRlIiwiX2YiLCJkIiwibSIsImhhbmRsZWROYW1lIiwiYXR0cmlidXRlIiwibmFtZSIsIkEiLCJoIiwiaW1hZ2VCYXNlQXR0cmlidXRlIiwiTiIsImIiLCJFIiwiY3NzIiwiTyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbERpcmVjdGlvbiIsInRocmVzaG9sZCIsImhlaWdodCIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsInAiLCJ2aXNpYmxlT25seSIsImlzIiwiRiIsImF1dG9EZXN0cm95IiwiZGVzdHJveSIsInoiLCJ5Iiwibm9vcCIsInNpemVzQXR0cmlidXRlIiwicmV0aW5hQXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwiVCIsIm9mZiIsIkkiLCJvbmUiLCJEIiwidHJpZ2dlciIsIkltYWdlIiwiQyIsImVmZmVjdCIsImVmZmVjdFRpbWUiLCJyZW1vdmUiLCJjb21wbGV0ZSIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsInNwbGl0Iiwic2xpY2UiLCJiaW5kIiwiZXh0ZW5kIiwiY29uZmlnIiwiYWRkSXRlbXMiLCJnZXRJdGVtcyIsInVwZGF0ZSIsImZvcmNlIiwibG9hZEFsbCIsImNoYWluYWJsZSIsIlplcHRvIiwiTGF6eSIsImlzRnVuY3Rpb24iLCJpc0FycmF5IiwicHJvdG90eXBlIiwiYmVmb3JlTG9hZCIsIm9uRXJyb3IiLCJvbkZpbmlzaGVkQWxsIiwiZGVmaW5lIiwiYW1kIiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJrIiwibWFwIiwic2VsZWN0b3IiLCIkZWxlbWVudCIsImlubmVySGVpZ2h0IiwiaW5uZXJXaWR0aCIsImNvbXBhdE1vZGUiLCJzdXBwb3J0IiwiYm94TW9kZWwiLCJib2R5IiwiY2xpZW50SGVpZ2h0IiwiY2xpZW50V2lkdGgiLCJwYWdlWU9mZnNldCIsInNjcm9sbFRvcCIsInBhZ2VYT2Zmc2V0Iiwic2Nyb2xsTGVmdCIsImNvbnRhaW5zIiwib2Zmc2V0SGVpZ2h0Iiwib2Zmc2V0V2lkdGgiLCJvZmZzZXQiLCJkb2N1bWVudEVsZW1lbnQiLCJzcGVjaWFsIiwiaW52aWV3IiwiYWRkIiwic2V0SW50ZXJ2YWwiLCJ
2ndWlkIiwic3BsaWNlIiwiY2xlYXJJbnRlcnZhbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsImNoZWNrSW5wdXRWYWxpZCIsIiRmaWVsZCIsImNsb3Nlc3QiLCJjaGVja1NlbGVjdElucHV0VmFsaWQiLCIkc2VsZWN0RmllbGQiLCJ1bmRlZmluZWQiLCJjaGVja090aGVySW5wdXRWYWxpZCIsImNoZWNrUmFkaW9JbnB1dFZhbGlkIiwiJHJhZGlvRmllbGQiLCJjaGVja0NoZWNrYm94SW5wdXRWYWxpZCIsIiRjaGVja2JveEZpZWxkIiwiZGlzcGF0Y2hFdmVudCIsIkV2ZW50Iiwic2VhcmNoQmFyIiwicmVzdWx0c0NvbnRhaW5lciIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsInBvc2l0aW9uIiwiYmFja2dyb3VuZENvbG9yIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsIm5leHRTaWJsaW5nIiwiZGVib3VuY2UiLCJzcGlubmVyIiwiZGlzcGxheSIsImlubmVySFRNTCIsInNlYXJjaFF1ZXJ5IiwidmFsdWUiLCJhY3Rpb24iLCJxdWVyeSIsImVuY29kZVVSSUNvbXBvbmVudCIsImNvbnNvbGUiLCJsb2ciLCJhamF4IiwidXJsIiwibGl2ZV9zZWFyY2hfb2JqZWN0IiwiYWpheF91cmwiLCJzdWNjZXNzIiwicmVzcG9uc2UiLCJyZXN1bHRzIiwiY29udGFpbmVyIiwiY2xhc3NMaXN0Iiwic2VhcmNoUmVzdWx0c0NvbnRhaW5lciIsImlkIiwicmVzdWx0c0xpc3QiLCJsaXN0U3R5bGVUeXBlIiwiYXBwZW5kQ2hpbGQiLCJmb3JFYWNoIiwicmVzdWx0IiwibGlzdEl0ZW0iLCJjbGFzc05hbWUiLCJJRCIsInBvc3RfbGluayIsInBvc3RfdGl0bGUiLCJ0YXJnZXQiLCJwb3N0X3R5cGUiLCJkaXNwbGF5U2VhcmNoUmVzdWx0cyIsImVycm9yIiwiaW5pdGlhbGl6ZVByZWRpY3RpdmVTZWFyY2giLCJnZXRFbGVtZW50QnlJZCIsImZhY3RvcnkiLCJpbnN0YW5jZVVpZCIsIlNsaWNrIiwiZGF0YVNldHRpbmdzIiwiZGVmYXVsdHMiLCJhY2Nlc3NpYmlsaXR5IiwiYWRhcHRpdmVIZWlnaHQiLCJhcHBlbmRBcnJvd3MiLCJhcHBlbmREb3RzIiwiYXNOYXZGb3IiLCJwcmV2QXJyb3ciLCJuZXh0QXJyb3ciLCJjZW50ZXJNb2RlIiwiY2VudGVyUGFkZGluZyIsImNzc0Vhc2UiLCJjdXN0b21QYWdpbmciLCJzbGlkZXIiLCJkb3RzQ2xhc3MiLCJkcmFnZ2FibGUiLCJlYXNpbmciLCJlZGdlRnJpY3Rpb24iLCJmb2N1c09uU2VsZWN0IiwiZm9jdXNPbkNoYW5nZSIsImluaXRpYWxTbGlkZSIsIm1vYmlsZUZpcnN0IiwicGF1c2VPbkZvY3VzIiwicGF1c2VPbkRvdHNIb3ZlciIsInJlc3BvbmRUbyIsInJvd3MiLCJydGwiLCJzbGlkZSIsInNsaWRlc1BlclJvdyIsInN3aXBlIiwic3dpcGVUb1NsaWRlIiwidG91Y2hNb3ZlIiwidG91Y2hUaHJlc2hvbGQiLCJ1c2VDU1MiLCJ1c2VUcmFuc2Zvcm0iLCJ2YXJpYWJsZVdpZHRoIiwidmVydGljYWwiLCJ2ZXJ0aWNhbFN3aXBpbmciLCJ3YWl0Rm9yQW5pbWF0ZSIsInpJbmRleCIsImluaXRpYWxzIiwiYW5pbWF0aW5nIiwiZHJhZ2dpbmciLCJhdXRvUGxheVRpbWVyIiwiY3VycmVudERpcmVjdGlvbiIsImN1cnJlbnRMZWZ0IiwiY3VycmVudFNsaWRlIiwiZGlyZWN0aW9uIiwiJGRvdHMiLCJsaXN0V2lkdGgiLCJsaXN0SGVpZ2h0IiwibG9hZEluZGV4IiwiJG5leHRBcnJvdyIsIiRwcmV2QXJyb3ciLCJzY3JvbGxpbmciLCJzbGlkZUNvdW50Iiwic2xpZGVXaWR0aCIsIiRzbGlkZVRyYWNrIiwiJHNsaWRlcyIsInNsaWRpbmciLCJzbGlkZU9mZnNldCIsInN3aXBlTGVmdCIsInN3aXBpbmciLCIkbGlzdCIsInRvdWNoT2JqZWN0IiwidHJhbnNmb3Jtc0VuYWJsZWQiLCJ1bnNsaWNrZWQiLCJhY3RpdmVCcmVha3BvaW50IiwiYW5pbVR5cGUiLCJhbmltUHJvcCIsImJyZWFrcG9pbnRzIiwiYnJlYWtwb2ludFNldHRpbmdzIiwiY3NzVHJhbnNpdGlvbnMiLCJmb2N1c3NlZCIsImludGVycnVwdGVkIiwiaGlkZGVuIiwicGF1c2VkIiwicG9zaXRpb25Qcm9wIiwicm93Q291bnQiLCJzaG91bGRDbGljayIsIiRzbGlkZXIiLCIkc2xpZGVzQ2FjaGUiLCJ0cmFuc2Zvcm1UeXBlIiwidHJhbnNpdGlvblR5cGUiLCJ2aXNpYmlsaXR5Q2hhbmdlIiwid2luZG93V2lkdGgiLCJ3aW5kb3dUaW1lciIsIm9wdGlvbnMiLCJvcmlnaW5hbFNldHRpbmdzIiwibW96SGlkZGVuIiwid2Via2l0SGlkZGVuIiwiYXV0b1BsYXkiLCJwcm94eSIsImF1dG9QbGF5Q2xlYXIiLCJhdXRvUGxheUl0ZXJhdG9yIiwiY2hhbmdlU2xpZGUiLCJjbGlja0hhbmRsZXIiLCJzZWxlY3RIYW5kbGVyIiwic2V0UG9zaXRpb24iLCJzd2lwZUhhbmRsZXIiLCJkcmFnSGFuZGxlciIsImtleUhhbmRsZXIiLCJodG1sRXhwciIsInJlZ2lzdGVyQnJlYWtwb2ludHMiLCJpbml0IiwiYWN0aXZhdGVBREEiLCJhcmlhLWhpZGRlbiIsInRhYmluZGV4IiwiYWRkU2xpZGUiLCJzbGlja0FkZCIsIm1hcmt1cCIsImluZGV4IiwiYWRkQmVmb3JlIiwidW5sb2FkIiwiYXBwZW5kVG8iLCJlcSIsImluc2VydEFmdGVyIiwicHJlcGVuZFRvIiwiY2hpbGRyZW4iLCJkZXRhY2giLCJhcHBlbmQiLCJyZWluaXQiLCJhbmltYXRlSGVpZ2h0IiwidGFyZ2V0SGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJhbmltYXRlIiwiYW5pbWF0ZVNsaWRlIiwidGFyZ2V0TGVmdCIsImNhbGxiYWNrIiwiYW5pbVByb3BzIiwiYW5pbVN0YXJ0IiwiZHVyYXRpb24iLCJzdGVwIiwiTWF0aCIsImNlaWwiLCJhcHBseVRyYW5zaXRpb24iLCJkaXNhYmxlVHJhbnNpdGlvbiIsImdldE5hdlRhcmdldCIsIm5vdCIsInNsaWRlSGFuZGxlciIsInRyYW5zaXRpb24iLCJzbGlkZVRvIiwiYnVpbGRBcnJvd3MiLCJ0ZXN0IiwiYXJpYS1kaXNhYmxlZCIsImJ1aWxkRG90cyIsImRvdCIsImdldERvdENvdW50IiwiZmlyc3QiLCJidWlsZE91dCIsIndyYXBBbGwiLCJ3cmFwIiwic2V0dXBJbmZpbml0ZSIsInVwZGF0ZURvdHMiLCJzZXRTbGlkZUNsYXNzZXMiLCJidWlsZFJvd3MiLCJuZXdTbGlkZXMiLCJudW1PZlNsaWRlcyIsIm9yaWdpbmFsU2xpZGVzIiwic2xpZGVzUGVyU2VjdGlvbiIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJyb3ciLCJlbXB0eSIsImNoZWNrUmVzcG9uc2l2ZSIsImluaXRpYWwiLCJmb3JjZVVwZGF0ZSIsInRhcmdldEJyZWFrcG9pbnQiLCJyZXNwb25kVG9XaWR0aCIsInRyaWdnZXJCcmVha3BvaW50Iiwic2xpZGVyV2lkdGgiLCJtaW4iLCJoYXNPd25Qcm9wZXJ0eSIsInVuc2xpY2siLCJyZWZyZXNoIiwiZG9udEFuaW1hdGUiLCJpbmRleE9mZnNldCIsIiR0YXJnZXQiLCJ
2jdXJyZW50VGFyZ2V0IiwicHJldmVudERlZmF1bHQiLCJtZXNzYWdlIiwiY2hlY2tOYXZpZ2FibGUiLCJuYXZpZ2FibGVzIiwicHJldk5hdmlnYWJsZSIsImdldE5hdmlnYWJsZUluZGV4ZXMiLCJjbGVhblVwRXZlbnRzIiwiaW50ZXJydXB0IiwidmlzaWJpbGl0eSIsImNsZWFuVXBTbGlkZUV2ZW50cyIsIm9yaWVudGF0aW9uQ2hhbmdlIiwicmVzaXplIiwiY2xlYW5VcFJvd3MiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJzdG9wUHJvcGFnYXRpb24iLCJmYWRlU2xpZGUiLCJzbGlkZUluZGV4Iiwib3BhY2l0eSIsImZhZGVTbGlkZU91dCIsImZpbHRlclNsaWRlcyIsInNsaWNrRmlsdGVyIiwiZm9jdXNIYW5kbGVyIiwiJHNmIiwiZ2V0Q3VycmVudCIsInNsaWNrQ3VycmVudFNsaWRlIiwiYnJlYWtQb2ludCIsImNvdW50ZXIiLCJwYWdlclF0eSIsImdldExlZnQiLCJ2ZXJ0aWNhbEhlaWdodCIsInRhcmdldFNsaWRlIiwiY29lZiIsInZlcnRpY2FsT2Zmc2V0IiwiZmxvb3IiLCJvZmZzZXRMZWZ0Iiwib3V0ZXJXaWR0aCIsImdldE9wdGlvbiIsInNsaWNrR2V0T3B0aW9uIiwib3B0aW9uIiwibWF4IiwiaW5kZXhlcyIsImdldFNsaWNrIiwiZ2V0U2xpZGVDb3VudCIsInN3aXBlZFNsaWRlIiwiY2VudGVyT2Zmc2V0IiwiYWJzIiwiZ29UbyIsInNsaWNrR29UbyIsImNyZWF0aW9uIiwic2V0UHJvcHMiLCJzdGFydExvYWQiLCJsb2FkU2xpZGVyIiwiaW5pdGlhbGl6ZUV2ZW50cyIsInVwZGF0ZUFycm93cyIsImluaXRBREEiLCJudW1Eb3RHcm91cHMiLCJ0YWJDb250cm9sSW5kZXhlcyIsInNsaWRlQ29udHJvbEluZGV4IiwiaW5kZXhPZiIsInJvbGUiLCJhcmlhQnV0dG9uQ29udHJvbCIsImFyaWEtZGVzY3JpYmVkYnkiLCJtYXBwZWRTbGlkZUluZGV4IiwiYXJpYS1jb250cm9scyIsImFyaWEtbGFiZWwiLCJhcmlhLXNlbGVjdGVkIiwiZW5kIiwiaW5pdEFycm93RXZlbnRzIiwiaW5pdERvdEV2ZW50cyIsImluaXRTbGlkZUV2ZW50cyIsImluaXRVSSIsIm1hdGNoIiwia2V5Q29kZSIsImxvYWRSYW5nZSIsInJhbmdlU3RhcnQiLCJyYW5nZUVuZCIsImxvYWRJbWFnZXMiLCJpbWFnZXNTY29wZSIsImltYWdlIiwiaW1hZ2VTb3VyY2UiLCJpbWFnZVNyY1NldCIsImltYWdlU2l6ZXMiLCJpbWFnZVRvTG9hZCIsIm9ubG9hZCIsIm9uZXJyb3IiLCJwcmV2U2xpZGUiLCJuZXh0U2xpZGUiLCJwcm9ncmVzc2l2ZUxhenlMb2FkIiwibmV4dCIsInNsaWNrTmV4dCIsInBhdXNlIiwic2xpY2tQYXVzZSIsInBsYXkiLCJzbGlja1BsYXkiLCJwb3N0U2xpZGUiLCJmb2N1cyIsInByZXYiLCJzbGlja1ByZXYiLCJ0cnlDb3VudCIsIiRpbWdzVG9Mb2FkIiwiaW5pdGlhbGl6aW5nIiwibGFzdFZpc2libGVJbmRleCIsImN1cnJlbnRCcmVha3BvaW50IiwicmVzcG9uc2l2ZVNldHRpbmdzIiwic29ydCIsIndpbmRvd0RlbGF5IiwicmVtb3ZlU2xpZGUiLCJzbGlja1JlbW92ZSIsInJlbW92ZUJlZm9yZSIsInJlbW92ZUFsbCIsInNldENTUyIsIngiLCJwb3NpdGlvblByb3BzIiwic2V0RGltZW5zaW9ucyIsInBhZGRpbmciLCJzZXRGYWRlIiwic2V0SGVpZ2h0Iiwic2V0T3B0aW9uIiwic2xpY2tTZXRPcHRpb24iLCJpdGVtIiwib3B0IiwiYm9keVN0eWxlIiwiV2Via2l0VHJhbnNpdGlvbiIsIk1velRyYW5zaXRpb24iLCJtc1RyYW5zaXRpb24iLCJPVHJhbnNmb3JtIiwicGVyc3BlY3RpdmVQcm9wZXJ0eSIsIndlYmtpdFBlcnNwZWN0aXZlIiwiTW96VHJhbnNmb3JtIiwiTW96UGVyc3BlY3RpdmUiLCJ3ZWJraXRUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSIsInRyYW5zZm9ybSIsImFsbFNsaWRlcyIsInJlbWFpbmRlciIsImV2ZW5Db2VmIiwiaW5maW5pdGVDb3VudCIsImNsb25lIiwidG9nZ2xlIiwidGFyZ2V0RWxlbWVudCIsInN5bmMiLCJhbmltU2xpZGUiLCJvbGRTbGlkZSIsInNsaWRlTGVmdCIsIm5hdlRhcmdldCIsInN3aXBlRGlyZWN0aW9uIiwieERpc3QiLCJ5RGlzdCIsInN3aXBlQW5nbGUiLCJzdGFydFgiLCJjdXJYIiwic3RhcnRZIiwiY3VyWSIsImF0YW4yIiwicm91bmQiLCJQSSIsInN3aXBlRW5kIiwic3dpcGVMZW5ndGgiLCJlZGdlSGl0IiwibWluU3dpcGUiLCJmaW5nZXJDb3VudCIsIm9yaWdpbmFsRXZlbnQiLCJ0b3VjaGVzIiwic3dpcGVTdGFydCIsInN3aXBlTW92ZSIsImN1ckxlZnQiLCJwb3NpdGlvbk9mZnNldCIsInZlcnRpY2FsU3dpcGVMZW5ndGgiLCJwYWdlWCIsImNsaWVudFgiLCJwYWdlWSIsImNsaWVudFkiLCJzcXJ0IiwicG93IiwidW5maWx0ZXJTbGlkZXMiLCJzbGlja1VuZmlsdGVyIiwiZnJvbUJyZWFrcG9pbnQiLCJyZXQiLCJBcnJheSIsImdsb2JhbCIsIlBvcHBlciIsImlzQnJvd3NlciIsIm5hdmlnYXRvciIsInRpbWVvdXREdXJhdGlvbiIsImxvbmdlclRpbWVvdXRCcm93c2VycyIsInVzZXJBZ2VudCIsIlByb21pc2UiLCJjYWxsZWQiLCJyZXNvbHZlIiwidGhlbiIsInNjaGVkdWxlZCIsImZ1bmN0aW9uVG9DaGVjayIsInRvU3RyaW5nIiwiZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5IiwicHJvcGVydHkiLCJub2RlVHlwZSIsIm93bmVyRG9jdW1lbnQiLCJkZWZhdWx0VmlldyIsImdldENvbXB1dGVkU3R5bGUiLCJnZXRQYXJlbnROb2RlIiwibm9kZU5hbWUiLCJob3N0IiwiZ2V0U2Nyb2xsUGFyZW50IiwiX2dldFN0eWxlQ29tcHV0ZWRQcm9wIiwib3ZlcmZsb3ciLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJnZXRSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlIiwicmVmZXJlbmNlTm9kZSIsImlzSUUxMSIsIk1TSW5wdXRNZXRob2RDb250ZXh0IiwiZG9jdW1lbnRNb2RlIiwiaXNJRTEwIiwiaXNJRSIsInZlcnNpb24iLCJnZXRPZmZzZXRQYXJlbnQiLCJub09mZnNldFBhcmVudCIsIm9mZnNldFBhcmVudCIsIm5leHRFbGVtZW50U2libGluZyIsImdldFJvb3QiLCJub2RlIiwiZmluZENvbW1vbk9mZnNldFBhcmVudCIsImVsZW1lbnQxIiwiZWxlbWVudDIiLCJvcmRlciIsImNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIiwiTm9kZSIsIkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORyIsInN0YXJ0IiwicmFuZ2UiLCJjcmVhdGVSYW5nZSIsInNldFN0YXJ0Iiwic2V0RW5kIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImVsZW1lbnQ
2xcm9vdCIsImdldFNjcm9sbCIsInVwcGVyU2lkZSIsInNjcm9sbGluZ0VsZW1lbnQiLCJnZXRCb3JkZXJzU2l6ZSIsInN0eWxlcyIsImF4aXMiLCJzaWRlQSIsInNpZGVCIiwicGFyc2VGbG9hdCIsImdldFNpemUiLCJjb21wdXRlZFN0eWxlIiwiZ2V0V2luZG93U2l6ZXMiLCJjbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJUeXBlRXJyb3IiLCJjcmVhdGVDbGFzcyIsImRlZmluZVByb3BlcnRpZXMiLCJwcm9wcyIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImtleSIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsIm9iaiIsIl9leHRlbmRzIiwiYXNzaWduIiwic291cmNlIiwiZ2V0Q2xpZW50UmVjdCIsIm9mZnNldHMiLCJyZWN0Iiwic2l6ZXMiLCJob3JpelNjcm9sbGJhciIsInZlcnRTY3JvbGxiYXIiLCJnZXRPZmZzZXRSZWN0UmVsYXRpdmVUb0FyYml0cmFyeU5vZGUiLCJmaXhlZFBvc2l0aW9uIiwiaXNIVE1MIiwiY2hpbGRyZW5SZWN0IiwicGFyZW50UmVjdCIsInNjcm9sbFBhcmVudCIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIiwibWFyZ2luVG9wIiwibWFyZ2luTGVmdCIsInN1YnRyYWN0IiwibW9kaWZpZXIiLCJpbmNsdWRlU2Nyb2xsIiwiZ2V0Rml4ZWRQb3NpdGlvbk9mZnNldFBhcmVudCIsInBhcmVudEVsZW1lbnQiLCJlbCIsImdldEJvdW5kYXJpZXMiLCJwb3BwZXIiLCJib3VuZGFyaWVzRWxlbWVudCIsImJvdW5kYXJpZXMiLCJleGNsdWRlU2Nyb2xsIiwicmVsYXRpdmVPZmZzZXQiLCJnZXRWaWV3cG9ydE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJ0Yml0cmFyeU5vZGUiLCJib3VuZGFyaWVzTm9kZSIsImlzRml4ZWQiLCJfZ2V0V2luZG93U2l6ZXMiLCJpc1BhZGRpbmdOdW1iZXIiLCJjb21wdXRlQXV0b1BsYWNlbWVudCIsInBsYWNlbWVudCIsInJlZlJlY3QiLCJyZWN0cyIsInNvcnRlZEFyZWFzIiwia2V5cyIsImFyZWEiLCJfcmVmIiwiZmlsdGVyZWRBcmVhcyIsIl9yZWYyIiwiY29tcHV0ZWRQbGFjZW1lbnQiLCJ2YXJpYXRpb24iLCJnZXRSZWZlcmVuY2VPZmZzZXRzIiwic3RhdGUiLCJnZXRPdXRlclNpemVzIiwibWFyZ2luQm90dG9tIiwibWFyZ2luUmlnaHQiLCJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsImhhc2giLCJtYXRjaGVkIiwiZ2V0UG9wcGVyT2Zmc2V0cyIsInJlZmVyZW5jZU9mZnNldHMiLCJwb3BwZXJSZWN0IiwicG9wcGVyT2Zmc2V0cyIsImlzSG9yaXoiLCJtYWluU2lkZSIsInNlY29uZGFyeVNpZGUiLCJtZWFzdXJlbWVudCIsInNlY29uZGFyeU1lYXN1cmVtZW50IiwiYXJyIiwiY2hlY2siLCJydW5Nb2RpZmllcnMiLCJtb2RpZmllcnMiLCJlbmRzIiwicHJvcCIsImZpbmRJbmRleCIsImN1ciIsIndhcm4iLCJlbmFibGVkIiwiaXNNb2RpZmllckVuYWJsZWQiLCJtb2RpZmllck5hbWUiLCJzb21lIiwiZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lIiwicHJlZml4ZXMiLCJ1cHBlclByb3AiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInByZWZpeCIsInRvQ2hlY2siLCJnZXRXaW5kb3ciLCJzZXR1cEV2ZW50TGlzdGVuZXJzIiwidXBkYXRlQm91bmQiLCJwYXNzaXZlIiwic2Nyb2xsRWxlbWVudCIsImF0dGFjaFRvU2Nyb2xsUGFyZW50cyIsInNjcm9sbFBhcmVudHMiLCJpc0JvZHkiLCJldmVudHNFbmFibGVkIiwiZGlzYWJsZUV2ZW50TGlzdGVuZXJzIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJzY2hlZHVsZVVwZGF0ZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJpc051bWVyaWMiLCJpc05hTiIsImlzRmluaXRlIiwic2V0U3R5bGVzIiwidW5pdCIsImlzRmlyZWZveCIsImlzTW9kaWZpZXJSZXF1aXJlZCIsInJlcXVlc3RpbmdOYW1lIiwicmVxdWVzdGVkTmFtZSIsInJlcXVlc3RpbmciLCJpc1JlcXVpcmVkIiwiX3JlcXVlc3RpbmciLCJyZXF1ZXN0ZWQiLCJwbGFjZW1lbnRzIiwidmFsaWRQbGFjZW1lbnRzIiwiY2xvY2t3aXNlIiwiY29uY2F0IiwicmV2ZXJzZSIsIkJFSEFWSU9SUyIsIkZMSVAiLCJDTE9DS1dJU0UiLCJDT1VOVEVSQ0xPQ0tXSVNFIiwicGFyc2VPZmZzZXQiLCJiYXNlUGxhY2VtZW50IiwidXNlSGVpZ2h0IiwiZnJhZ21lbnRzIiwiZnJhZyIsImRpdmlkZXIiLCJzZWFyY2giLCJzcGxpdFJlZ2V4Iiwib3BzIiwib3AiLCJtZXJnZVdpdGhQcmV2aW91cyIsInJlZHVjZSIsInN0ciIsInRvVmFsdWUiLCJpbmRleDIiLCJEZWZhdWx0cyIsInBvc2l0aW9uRml4ZWQiLCJyZW1vdmVPbkRlc3Ryb3kiLCJvbkNyZWF0ZSIsIm9uVXBkYXRlIiwic2hpZnQiLCJzaGlmdHZhcmlhdGlvbiIsIl9kYXRhJG9mZnNldHMiLCJpc1ZlcnRpY2FsIiwic2lkZSIsInNoaWZ0T2Zmc2V0cyIsInByZXZlbnRPdmVyZmxvdyIsInRyYW5zZm9ybVByb3AiLCJwb3BwZXJTdHlsZXMiLCJwcmlvcml0eSIsInByaW1hcnkiLCJlc2NhcGVXaXRoUmVmZXJlbmNlIiwic2Vjb25kYXJ5Iiwia2VlcFRvZ2V0aGVyIiwib3BTaWRlIiwiYXJyb3ciLCJfZGF0YSRvZmZzZXRzJGFycm93IiwiYXJyb3dFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsImxlbiIsInNpZGVDYXBpdGFsaXplZCIsImFsdFNpZGUiLCJhcnJvd0VsZW1lbnRTaXplIiwiY2VudGVyIiwicG9wcGVyTWFyZ2luU2lkZSIsInBvcHBlckJvcmRlclNpZGUiLCJzaWRlVmFsdWUiLCJmbGlwIiwiZmxpcHBlZCIsIm9yaWdpbmFsUGxhY2VtZW50IiwicGxhY2VtZW50T3Bwb3NpdGUiLCJmbGlwT3JkZXIiLCJiZWhhdmlvciIsInJlZk9mZnNldHMiLCJvdmVybGFwc1JlZiIsIm92ZXJmbG93c0xlZnQiLCJvdmVyZmxvd3NSaWdodCIsIm92ZXJmbG93c1RvcCIsIm92ZXJmbG93c0JvdHRvbSIsIm92ZXJmbG93c0JvdW5kYXJpZXMiLCJmbGlwcGVkVmFyaWF0aW9uQnlSZWYiLCJmbGlwVmFyaWF0aW9ucyIsImZsaXBwZWRWYXJpYXRpb25CeUNvbnRlbnQiLCJmbGlwVmFyaWF0aW9uc0J5Q29udGVudCIsImZsaXBwZWRWYXJpYXRpb24iLCJpbm5lciIsInN1YnRyYWN0TGVuZ3RoIiwiYm91bmQiLCJhdHRyaWJ1dGVzIiwiY29tcHV0ZVN0eWxlIiwibGVnYWN5R3B1QWNjZWxlcmF0aW9uT3B0aW9uIiwiZ3B1QWNjZWxlcmF0aW9uIiwic2hvdWxkUm91bmQiLCJub1JvdW5kIiwicmVmZXJlbmNlV2lkdGgiLCJwb3BwZXJXaWR0aCIsImlzVmFyaWF0aW9uIiwiaG9yaXpvbn
2RhbFRvSW50ZWdlciIsInZlcnRpY2FsVG9JbnRlZ2VyIiwib2Zmc2V0UGFyZW50UmVjdCIsInByZWZpeGVkUHJvcGVydHkiLCJ3aWxsQ2hhbmdlIiwiaW52ZXJ0VG9wIiwiaW52ZXJ0TGVmdCIsIngtcGxhY2VtZW50IiwiYXJyb3dTdHlsZXMiLCJhcHBseVN0eWxlIiwib25Mb2FkIiwibW9kaWZpZXJPcHRpb25zIiwiX3RoaXMiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJpc0Rlc3Ryb3llZCIsImlzQ3JlYXRlZCIsImpxdWVyeSIsImVuYWJsZUV2ZW50TGlzdGVuZXJzIiwicmVtb3ZlQ2hpbGQiLCJVdGlscyIsIlBvcHBlclV0aWxzIiwiZ2xvYmFsVGhpcyIsInNlbGYiLCJVdGlsIiwiJF9fZGVmYXVsdCIsImRlZmF1bHQiLCJfaW50ZXJvcERlZmF1bHRMZWdhY3kiLCJUUkFOU0lUSU9OX0VORCIsInRyYW5zaXRpb25FbmRFbXVsYXRvciIsInRyaWdnZXJUcmFuc2l0aW9uRW5kIiwiZ2V0VUlEIiwicmFuZG9tIiwiZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCIsImdldEF0dHJpYnV0ZSIsImhyZWZBdHRyIiwiZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQiLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJ0cmFuc2l0aW9uRGVsYXkiLCJmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiIsImZsb2F0VHJhbnNpdGlvbkRlbGF5IiwicmVmbG93Iiwic3VwcG9ydHNUcmFuc2l0aW9uRW5kIiwiQm9vbGVhbiIsImlzRWxlbWVudCIsInR5cGVDaGVja0NvbmZpZyIsImNvbXBvbmVudE5hbWUiLCJjb25maWdUeXBlcyIsImV4cGVjdGVkVHlwZXMiLCJ2YWx1ZVR5cGUiLCJSZWdFeHAiLCJFcnJvciIsImZpbmRTaGFkb3dSb290IiwiYXR0YWNoU2hhZG93IiwiZ2V0Um9vdE5vZGUiLCJyb290IiwiU2hhZG93Um9vdCIsImpRdWVyeURldGVjdGlvbiIsImVtdWxhdGVUcmFuc2l0aW9uRW5kIiwiYmluZFR5cGUiLCJkZWxlZ2F0ZVR5cGUiLCJoYW5kbGUiLCJoYW5kbGVPYmoiLCJoYW5kbGVyIiwiRHJvcGRvd24iLCJQb3BwZXJfX2RlZmF1bHQiLCJVdGlsX19kZWZhdWx0IiwiX2RlZmluZVByb3BlcnRpZXMiLCJOQU1FIiwiREFUQV9LRVkiLCJFVkVOVF9LRVkiLCJEQVRBX0FQSV9LRVkiLCJKUVVFUllfTk9fQ09ORkxJQ1QiLCJSRUdFWFBfS0VZRE9XTiIsIkFSUk9XX1VQX0tFWUNPREUiLCJFVkVOVF9ISURFIiwiRVZFTlRfSElEREVOIiwiRVZFTlRfQ0xJQ0tfREFUQV9BUEkiLCJFVkVOVF9LRVlET1dOX0RBVEFfQVBJIiwiQ0xBU1NfTkFNRV9ESVNBQkxFRCIsIkNMQVNTX05BTUVfU0hPVyIsIkNMQVNTX05BTUVfTUVOVVJJR0hUIiwiU0VMRUNUT1JfREFUQV9UT0dHTEUiLCJTRUxFQ1RPUl9NRU5VIiwiRGVmYXVsdCIsImJvdW5kYXJ5IiwicG9wcGVyQ29uZmlnIiwiRGVmYXVsdFR5cGUiLCJfZWxlbWVudCIsIl9wb3BwZXIiLCJfY29uZmlnIiwiX2dldENvbmZpZyIsIl9tZW51IiwiX2dldE1lbnVFbGVtZW50IiwiX2luTmF2YmFyIiwiX2RldGVjdE5hdmJhciIsIl9hZGRFdmVudExpc3RlbmVycyIsIl9wcm90byIsImRpc2FibGVkIiwiaXNBY3RpdmUiLCJfY2xlYXJNZW51cyIsInVzZVBvcHBlciIsInJlbGF0ZWRUYXJnZXQiLCJzaG93RXZlbnQiLCJfZ2V0UGFyZW50RnJvbUVsZW1lbnQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJyZWZlcmVuY2VFbGVtZW50IiwiX2dldFBvcHBlckNvbmZpZyIsImhpZGVFdmVudCIsImRpc3Bvc2UiLCJyZW1vdmVEYXRhIiwiY29uc3RydWN0b3IiLCJfZ2V0UGxhY2VtZW50IiwiJHBhcmVudERyb3Bkb3duIiwiX2dldE9mZnNldCIsIl90aGlzMiIsIl9qUXVlcnlJbnRlcmZhY2UiLCJ3aGljaCIsInRvZ2dsZXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2xpY2tFdmVudCIsImRyb3Bkb3duTWVudSIsIl9kYXRhQXBpS2V5ZG93bkhhbmRsZXIiLCJpdGVtcyIsIm5vQ29uZmxpY3QiLCJDb2xsYXBzZSIsIkNMQVNTX05BTUVfQ09MTEFQU0UiLCJDTEFTU19OQU1FX0NPTExBUFNJTkciLCJDTEFTU19OQU1FX0NPTExBUFNFRCIsIl9pc1RyYW5zaXRpb25pbmciLCJfdHJpZ2dlckFycmF5IiwidG9nZ2xlTGlzdCIsImVsZW0iLCJmaWx0ZXJFbGVtZW50IiwiZm91bmRFbGVtIiwiX3NlbGVjdG9yIiwiX3BhcmVudCIsIl9nZXRQYXJlbnQiLCJfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzIiwiYWN0aXZlcyIsImFjdGl2ZXNEYXRhIiwic3RhcnRFdmVudCIsImRpbWVuc2lvbiIsIl9nZXREaW1lbnNpb24iLCJzZXRUcmFuc2l0aW9uaW5nIiwic2Nyb2xsU2l6ZSIsInRyaWdnZXJBcnJheUxlbmd0aCIsImlzVHJhbnNpdGlvbmluZyIsIl90aGlzMyIsIl9nZXRUYXJnZXRGcm9tRWxlbWVudCIsInRyaWdnZXJBcnJheSIsImlzT3BlbiIsIiR0cmlnZ2VyIiwic2VsZWN0b3JzIiwiQ2Fyb3VzZWwiLCJpbnRlcnZhbCIsImtleWJvYXJkIiwidG91Y2giLCJESVJFQ1RJT05fTkVYVCIsIkRJUkVDVElPTl9QUkVWIiwiRVZFTlRfU0xJRCIsIkNMQVNTX05BTUVfQUNUSVZF
2IiwiU0VMRUNUT1JfQUNUSVZFX0lURU0iLCJTRUxFQ1RPUl9JTkRJQ0FUT1JTIiwiUG9pbnRlclR5cGUiLCJUT1VDSCIsIlBFTiIsIl9pdGVtcyIsIl9pbnRlcnZhbCIsIl9hY3RpdmVFbGVtZW50IiwiX2lzUGF1c2VkIiwiX2lzU2xpZGluZyIsInRvdWNoVGltZW91dCIsInRvdWNoU3RhcnRYIiwidG91Y2hEZWx0YVgiLCJfaW5kaWNhdG9yc0VsZW1lbnQiLCJfdG91Y2hTdXBwb3J0ZWQiLCJtYXhUb3VjaFBvaW50cyIsIl9wb2ludGVyRXZlbnQiLCJQb2ludGVyRXZlbnQiLCJNU1BvaW50ZXJFdmVudCIsIl9zbGlkZSIsIm5leHRXaGVuVmlzaWJsZSIsImN5Y2xlIiwiX3VwZGF0ZUludGVydmFsIiwidmlzaWJpbGl0eVN0YXRlIiwidG8iLCJhY3RpdmVJbmRleCIsIl9nZXRJdGVtSW5kZXgiLCJfaGFuZGxlU3dpcGUiLCJhYnNEZWx0YXgiLCJfa2V5ZG93biIsIl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzIiwicG9pbnRlclR5cGUiLCJfZ2V0SXRlbUJ5RGlyZWN0aW9uIiwiYWN0aXZlRWxlbWVudCIsImlzTmV4dERpcmVjdGlvbiIsImlzUHJldkRpcmVjdGlvbiIsImxhc3RJdGVtSW5kZXgiLCJpdGVtSW5kZXgiLCJfdHJpZ2dlclNsaWRlRXZlbnQiLCJldmVudERpcmVjdGlvbk5hbWUiLCJ0YXJnZXRJbmRleCIsImZyb21JbmRleCIsInNsaWRlRXZlbnQiLCJmcm9tIiwiX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQiLCJpbmRpY2F0b3JzIiwibmV4dEluZGljYXRvciIsImVsZW1lbnRJbnRlcnZhbCIsImRlZmF1bHRJbnRlcnZhbCIsImRpcmVjdGlvbmFsQ2xhc3NOYW1lIiwib3JkZXJDbGFzc05hbWUiLCJfdGhpczQiLCJhY3RpdmVFbGVtZW50SW5kZXgiLCJuZXh0RWxlbWVudCIsIm5leHRFbGVtZW50SW5kZXgiLCJpc0N5Y2xpbmciLCJzbGlkRXZlbnQiLCJyaWRlIiwiX2RhdGFBcGlDbGlja0hhbmRsZXIiLCJjYXJvdXNlbHMiLCIkY2Fyb3VzZWwiLCJUYWIiLCJTRUxFQ1RPUl9BQ1RJVkUiLCJTRUxFQ1RPUl9BQ1RJVkVfVUwiLCJFTEVNRU5UX05PREUiLCJwcmV2aW91cyIsImxpc3RFbGVtZW50IiwiaXRlbVNlbGVjdG9yIiwibWFrZUFycmF5IiwiX2FjdGl2YXRlIiwiaGlkZGVuRXZlbnQiLCJzaG93bkV2ZW50IiwiYWN0aXZlIiwiX3RyYW5zaXRpb25Db21wbGV0ZSIsImRyb3Bkb3duQ2hpbGQiLCJkcm9wZG93bkVsZW1lbnQiLCJkcm9wZG93blRvZ2dsZUxpc3QiLCIkdGhpcyJdLCJtYXBwaW5ncyI6IkFBQUFBLE9BQUFDLFVBQUFDLE1BQUEsU0FBQUMsR0FxQkEsSUFBQUMsRUFBQUMsRUFBQUMsRUFFQUMsRUFDQUMsRUF0QkFSLE9BQUFDLFVBQUFRLEdBQUEsZ0JBQUEsU0FBQUMsRUFBQUMsR0FFQSxJQUFBQyxFQUFBQyxTQUFBYixPQUFBLG1DQUFBYyxRQUNBQyxFQUFBZixPQUFBLDhDQUFBZ0IsTUFHQUosR0FBQSxFQUFBQSxHQUFBRyxHQUFBLEtBQUFBLEVBR0FmLE9BQUEsc0JBQUFpQixPQUFBLEtBQUFDLEtBQUEsR0FJQWxCLE9BQUEsc0JBQUFpQixPQUFBLEtBQUFFLEtBQUEsS0E4QkFoQixFQUFBaUIsUUFBQUMsUUF4QkFqQixFQXdCQSxTQUFBTSxHQUNBLEVBQUFVLE9BQUFFLFFBQ0FuQixFQUFBLGdCQUFBb0IsU0FBQSxVQUVBcEIsRUFBQSxnQkFBQXFCLFlBQUEsWUE1QkFuQixFQThCQSxPQTdCQUEsRUFBQSxLQUdBLFdBQ0EsSUFBQW9CLEVBQUFuQixHQUFBb0IsS0FFQUMsR0FBQSxJQUFBQyxLQUNBQyxFQUFBQyxVQUNBdkIsR0FBQW9CLEVBQUFwQixFQUFBRixHQUVBMEIsYUFBQXZCLEdBQ0FBLEVBQUF3QixXQUFBLFdBQ0F6QixFQUFBb0IsRUFDQXZCLEVBQUE2QixNQUFBUixFQUFBSSxJQUNBeEIsS0FFQUUsRUFBQW9CLEVBQ0F2QixFQUFBNkIsTUFBQVIsRUF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
2FBQXROLEVBQUEsUUFBQTE1QixNQUNBc0QsRUFBQTBqQyxFQUFBMWpDLEtBQUFnNUIsR0FPQSxHQUxBaDVCLElBQ0FBLEVBQUEsSUFBQTBpQyxFQUFBaG1DLE1BQ0FnbkMsRUFBQTFqQyxLQUFBZzVCLEVBQUFoNUIsSUFHQSxpQkFBQXlGLEVBQUEsQ0FDQSxRQUFBLElBQUF6RixFQUFBeUYsR0FDQSxNQUFBLElBQUFnaUIsVUFBQSxvQkFBQWhpQixFQUFBLEtBR0F6RixFQUFBeUYsU0FoTUEraEIsRUFxTUFrYixFQXJNQXJhLElBc01BRixJQUFBLFVBQ0Fwb0IsSUFBQSxXQUNBLE1BM0xBLFlBYkFxb0IsRUFxTUEsT0FwTUEwUSxFQUFBdFIsRUFBQXBoQixVQUFBZ2lCLEdBQ0FDLEdBQUF5USxFQUFBdFIsRUFBQWEsR0EwTUFxYSxFQW5LQSxHQStMQSxPQW5CQXRNLEVBQUEsUUFBQW43QixVQUFBUSxHQS9MQSx3QkFVQSxrRUFxTEEsU0FBQUMsR0FDQUEsRUFBQW1jLGlCQUVBNnFCLEVBQUEzRyxpQkFBQXQ2QixLQUFBMjBCLEVBQUEsUUFBQTE1QixNQUFBLFVBUUEwNUIsRUFBQSxRQUFBaDdCLEdBQUEsSUFBQXNuQyxFQUFBM0csaUJBQ0EzRixFQUFBLFFBQUFoN0IsR0FBQSxJQUFBb3NCLFlBQUFrYixFQUVBdE0sRUFBQSxRQUFBaDdCLEdBQUEsSUFBQW1oQyxXQUFBLFdBRUEsT0FEQW5HLEVBQUEsUUFBQWg3QixHQUFBLElBQUErOUIsRUFDQXVKLEVBQUEzRyxrQkFHQTJHIiwiZmlsZSI6Imdsb2JhbC1zY3JpcHRzLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCQpIHtcblxuXHRqUXVlcnkoZG9jdW1lbnQpLm9uKCdzZjphamF4ZmluaXNoJywgZnVuY3Rpb24oZXZlbnQsIHNlYXJjaEZpbHRlcikge1xuXG5cdCAgICB2YXIgY3VycmVudFBhZ2UgPSBwYXJzZUludCggalF1ZXJ5KCcubmF2aWdhdGlvbi5wYWdpbmF0aW9uIC5jdXJyZW50JykudGV4dCgpICk7XG5cdCAgICB2YXIgc2VsZWN0ZWRDYXRlZ29yeVZhbHVlID0galF1ZXJ5KCdpbnB1dFtuYW1lPVwiX3NmdF9jb250ZW50X3R5cGVzW11cIl06Y2hlY2tlZCcpLnZhbCgpO1xuXG5cdCAgICAvLyBDb21iaW5lZCBpZiBzdGF0ZW1lbnQgd2l0aCBPUiBjb25kaXRpb25zXG5cdCAgICBpZiAoIChjdXJyZW50UGFnZSAmJiBjdXJyZW50UGFnZSA+IDEpIHx8IChzZWxlY3RlZENhdGVnb3J5VmFsdWUgJiYgc2VsZWN0ZWRDYXRlZ29yeVZhbHVlICE9PSAnJykgKVxuXHQgICAge1xuXG5cdCAgICAgICAgalF1ZXJ5KCcudGhlLWh1Yl9fZmVhdHVyZWQnKS5wYXJlbnQoJ2EnKS5oaWRlKDApO1xuXG5cdCAgICB9IGVsc2Uge1xuXG5cdCAgICAgICAgalF1ZXJ5KCcudGhlLWh1Yl9fZmVhdHVyZWQnKS5wYXJlbnQoJ2EnKS5zaG93KDApO1xuXG5cdCAgICB9XG5cblx0fSk7XG5cblx0ZnVuY3Rpb24gdGhyb3R0bGUoZm4sIHRocmVzaGhvbGQsIHNjb3BlKSB7XG5cdCAgdGhyZXNoaG9sZCB8fCAodGhyZXNoaG9sZCA9IDI1MCk7XG5cdCAgdmFyIGxhc3QsXG5cdCAgICAgIGRlZmVyVGltZXI7XG5cdCAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0ICAgIHZhciBjb250ZXh0ID0gc2NvcGUgfHwgdGhpcztcblxuXHQgICAgdmFyIG5vdyA9ICtuZXcgRGF0ZSxcblx0ICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuXHQgICAgaWYgKGxhc3QgJiYgbm93IDwgbGFzdCArIHRocmVzaGhvbGQpIHtcblx0ICAgICAgLy8gaG9sZCBvbiB0byBpdFxuXHQgICAgICBjbGVhclRpbWVvdXQoZGVmZXJUaW1lcik7XG5cdCAgICAgIGRlZmVyVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBsYXN0ID0gbm93O1xuXHQgICAgICAgIGZuLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuXHQgICAgICB9LCB0aHJlc2hob2xkKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGxhc3QgPSBub3c7XG5cdCAgICAgIGZuLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuXHQgICAgfVxuXHQgIH07XG5cdH1cblxuXHQvL1Nocmlua3MgdGhlIG5hdiBpZiBub3QgYXQgdGhlIHRvcCBvZiB0aGUgcGFnZS5cblx0JCh3aW5kb3cpLnNjcm9sbCh0aHJvdHRsZShmdW5jdGlvbihldmVudCl7XG5cdFx0aWYod2luZG93LnNjcm9sbFkgPiAwKXtcblx0XHRcdCQoJy5zaXRlLWhlYWRlcicpLmFkZENsYXNzKCdzY3JvbGwnKTtcblx0XHR9ZWxzZXtcblx0XHRcdCQoJy5zaXRlLWhlYWRlcicpLnJlbW92ZUNsYXNzKCdzY3JvbGwnKTtcblx0XHR9XG5cdH0sIDI1MCkpXG5cblxuXHQkKCcjc2VhcmNoLWZpbHRlci1mb3JtLTM0MCAuc2YtaW5wdXQtc2VsZWN0Jykuc2VsZWN0cGlja2VyKCk7XG5cblxuXHQvLyBTTElDSyBTTElERVJcblx0JCgnI2hvbWUtaGVyby1zbGlkZXInKS5zbGljayh7XG5cdFx0ZG90czogdHJ1ZSxcblx0XHRhcnJvd3M6IGZhbHNlLFxuXHRcdGluZmluaXRlOiB0cnVlLFxuXHRcdHNwZWVkOiA0MDAsXG5cdFx0YXV0b3BsYXk6IGZhbHNlLFxuXHRcdGF1dG9wbGF5U3BlZWQ6IDYwMDAsXG5cdFx0ZmFkZTogdHJ1ZSxcblx0XHRsYXp5TG9hZDogJ29uZGVtYW5kJyxcblx0XHRwYXVzZU9uSG92ZXI6IGZhbHNlXG5cdH0pO1xuXG5cdC8vIEJPT1RTVFJBUCBNRU5VXG5cdCQoXCIubWVnYS1kcm9wZG93bi10b2dnbGVcIikub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIG1lbnVUZXh0ID0gJCh0aGlzKS50ZXh0KCk7XG5cdFx0aWYgKCQoJ2JvZHknKS5oYXNDbGFzcygnbG9nZ2VkLWluJykgJiYgbWVudVRleHQudHJpbSgpID09IFwiTG9nZ2VkIEluXCIpeyBtZW51VGV4dCA9IFwiTWVtYmVyIEh1YlwiIH07XG5cdFx0JCh0aGlzKS5zaWJsaW5ncygnLmRyb3Bkb3duLW1lbnUnKS5maW5kKCcuZml4ZWQtbmF2X19oZWFkaW5nJykuaHRtbChtZW51VGV4dCk7XG5cdH0pO1xuXG5cdC8vICQoJy5kcm9wZG93bj5hW3RpdGxlKj1Mb2dnZWRdJylbMF0udGl0bGUgPSAnTWVtYmVycyBBcmVhJztcblx0Ly8gJCgnLmZpeGVkLW5hdl9faGVhZGluZzpudGgtY2hpbGQoMyknKS5odG1sKCk7XG5cblx0Ly8gJCgnLmZpeGVkLW5hdl9faGVhZGluZycpLnRleHQoJCgnLm1lZ2EtZHJvcGRvd24tdG9nZ2xlJykudGV4dCgpKTtcblx0Ly8gJCgnLmZpeGVkLW5hdl9faGVhZGluZycpXG5cblx0Ly8gY29uc29sZS5sb2coJCgnLmZpeGVkLW5hdl9faGVhZGluZycpLmh0bWwoKSk7XG5cdC8vIGNvbnNvbGUubG9nKCQoJy5tZWdhLWRyb3Bkb3duLXRvZ2dsZScpLnRleHQoKSk7XG5cblx0JChcImJ1dHRvbi5uYXZiYXItdG9nZ2xlclwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdCQoXCIuc2l0ZS1oZWFkZXJcIikudG9nZ2xlQ2xhc3MoXCJvcGVuXCIpO1xuXHR9KTtcblxuXHRpZiAoJCh3aW5kb3cpLndpZHRoKCkgPCAxMzM1KSB7XG5cdFx0JCgnI3ByaW1hcnktbmF2aWdhdGlvbiAuZHJvcGRvd24gLm1lZ2EtZHJvcGRvd24tdG9nZ2xlJykub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdHZhciBuYXYgPSAkKHRoaXMpLnNpYmxpbmdzKCcuZHJvcGRvd24tbWVudTpub3QoLnNob3cpJyk7XG5cdFx0XHQkKHRoaXMpLnBhcmVudCgpLnRvZ2dsZUNsYXNzKCdvcGVuJyk7XG5cdFx0XHRuYXYuc2xpZGVUb2dnbGUoKTtcblxuXHRcdFx0JCgnLmRyb3Bkb3duLW1lbnUuc2hvdycpLnNsaWRlVG9nZ2xlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQkKGZ1bmN0aW9uICgpIHtcblx0XHQkKCcubGF6eScpLmxhenkoKTtcblx0XHQkKCcubGF6eS1oZXJvJykubGF6eSh7XG5cdFx0XHRhZnRlckxvYWQ6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0XHRcdCQoJy5saW5lLW1hc2snKS5hZGRDbGFzcygnbGluZS1tYXNrLS1hbmltYXRlZCcpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblxuXHRpZiAoJCgnLmxpbmUtbWFzay0tYW5pbWF0ZScpLmxlbmd0aCkge1xuXHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0JCgnLmxpbmUtbWFzay0tYW5pbWF0ZScpLmFkZENsYXNzKCdsaW5lLW1hc2stLWFuaW1hdGVkJyk7XG5cdFx0fSwgNDAwKTtcblx0fVxuXG5cdCQoJy5saW5lcy1jb250YWluZXInKS5vbignaW52aWV3JywgZnVuY3Rpb24gKGV2ZW50LCBpc0luVmlldykge1xuXHRcdGlmIChpc0luVmlldykge1xuXHRcdFx0JCh0aGlzKS5hZGRDbGFzcygnbGluZXMtY29udGFpbmVyLS1hbmltYXRlZCcpO1xuXHRcdH1cblx0fSk7XG5cblx0JCgnLnRlc3RpbW9uaWFsLWJsb2NrLS1zdGFuZGFyZCcpLm9uKCdpbnZpZXcnLCBmdW5jdGlvbiAoZXZlbnQsIGlzSW5WaWV3KSB7XG5cdFx0aWYgKGlzSW5WaWV3KSB7XG5cdFx0XHQkKHRoaXMpLmFkZENsYXNzKCd0ZXN0aW1vbmlhbC1ibG9jay0tc3RhbmRhcmQtLWFuaW1hdGVkJyk7XG5cdFx0fVxuXHR9KTtcblxuXHQkKCcuY29udGVudC1pbWFnZS1ibG9ja3MnKS5vbignaW52aWV3JywgZnVuY3Rpb24gKGV2ZW50LCBpc0luVmlldykge1xuXHRcdGlmIChpc0luVmlldykge1xuXHRcdFx0JCh0aGlzKS5hZGRDbGFzcygnY29udGVudC1pbWFnZS1ibG9ja3MtLWFuaW1hdGVkJyk7XG5cdFx0fVxuXHR9KTtcblxuXHQkKCcucGFnZS10ZW1wbGF0ZS10ZW1wbGF0ZS1tZW1iZXJzLWRpcmVjdG9yeSAucXVpY2stbGlua3MgJykub24oJ2ludmlldycsIGZ1bmN0aW9uIChldmVudCwgaXNJblZpZXcpIHtcblx0XHRpZiAoaXNJblZpZXcpIHtcblx0XHRcdCQoJy5tZW1iZXItZGlyZWN0b3J5LS1maWx0ZXJhYmxlJykuYWRkQ2xhc3MoJ292ZXJmbG93LWhpZGRlbicpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkKCcubWVtYmVyLWRpcmVjdG9yeS0tZmlsdGVyYWJsZScpLnJlbW92ZUNsYXNzKCdvdmVyZmxvdy1oaWRkZW4nKTtcblx0XHR9XG5cdH0pO1xuXG5cdCQoJ1tyb2xlPVwicmVnaW9uXCJdLCAuY29udGVudC1pbWFnZS1ibG9ja3NfX3NlY3Rpb24nKS5vbignaW52aWV3JywgZnVuY3Rpb24gKGV2ZW50LCBpc0luVmlldykge1xuXHRcdGlmIChpc0luVmlldykge1xuXHRcdFx0JCh0aGlzKS5hZGRDbGFzcygnZmFkZWluJyk7XG5cdFx0fVxuXHR9KTtcblxuXHQvKiBSZW1vdmUgYWxsIHNwYWNlcyBpbiB0ZWw6IGhyZWYgbGlua3Mgc28gY2xpY2sgdG8gY2FsbCB3b3JrcyAqL1xuXHQkKCdhW2hyZWZePVwidGVsOlwiXScpLmF0dHIoJ2hyZWYnLCBmdW5jdGlvbiAoXywgdikge1xuXHRcdHJldHVybi
2B2LnJlcGxhY2UoL1xcKDBcXCl8XFxzKy9nLCAnJylcblx0fSk7XG5cblx0JCgnI2h1Yi1zbGlkZXInKS5zbGljayh7XG5cdFx0ZG90czogdHJ1ZSxcblx0XHRhcnJvd3M6IHRydWUsXG5cdFx0aW5maW5pdGU6IHRydWUsXG5cdFx0c2xpZGVzVG9TaG93OiA0LFxuXHRcdHNsaWRlc1RvU2Nyb2xsOiAyLFxuXHRcdHNwZWVkOiAzMDAsXG5cdFx0YXV0b3BsYXk6IHRydWUsXG5cdFx0YXV0b3BsYXlTcGVlZDogNjAwMCxcblx0XHRsYXp5TG9hZDogJ29uZGVtYW5kJyxcblx0XHRwYXVzZU9uSG92ZXI6IGZhbHNlLFxuXHRcdHJlc3BvbnNpdmU6IFtcblx0XHRcdHtcblx0XHRcdFx0YnJlYWtwb2ludDogMTUyMyxcblx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRzbGlkZXNUb1Nob3c6IDNcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0YnJlYWtwb2ludDogMTEwMCxcblx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRzbGlkZXNUb1Nob3c6IDJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0YnJlYWtwb2ludDogNzY4LFxuXHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdHNsaWRlc1RvU2hvdzogMSxcblx0XHRcdFx0XHRkb3RzOiBmYWxzZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XVxuXHR9KTtcblxuXHQkKCcjdGVzdGltb25pYWwtYmxvY2tfX3NsaWRlcicpLnNsaWNrKHtcblx0XHRzbGlkZXNUb1Nob3c6IDMsXG5cdFx0c2xpZGVzVG9TY3JvbGw6IDEsXG5cdFx0c3BlZWQ6IDMwMCxcblx0XHRpbmZpbml0ZTogdHJ1ZSxcblx0XHRhdXRvcGxheTogdHJ1ZSxcblx0XHRhdXRvcGxheVNwZWVkOiA2MDAwLFxuXHRcdGFycm93czogdHJ1ZSxcblx0XHRkb3RzOiB0cnVlLFxuXHRcdHJlc3BvbnNpdmU6IFtcblx0XHRcdHtcblx0XHRcdFx0YnJlYWtwb2ludDogMTU1MCxcblx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRzbGlkZXNUb1Nob3c6IDJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0YnJlYWtwb2ludDogNzY4LFxuXHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdHNsaWRlc1RvU2hvdzogMVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XVxuXHR9KTtcblxuXHQvLyBTRUFSQ0ggVE9HR0xFXG5cdCQoXCIuc2l0ZS1zZWFyY2hcIikub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XG5cdFx0JCgnLnNpdGUtc2VhcmNoX19tb2RhbCcpLnRvZ2dsZUNsYXNzKCdzaG93Jyk7XG5cdFx0JCgnLm1vZGFsLW92ZXJsYXknKS50b2dnbGVDbGFzcygnbW9kYWwtb3ZlcmxheS1zaG93Jyk7XG5cdFx0JCgnLnNpdGUtaGVhZGVyJykudG9nZ2xlQ2xhc3MoJ3NpdGUtaGVhZGVyLW1vZGFsJyk7XG5cdFx0JCgnLm1lbnUtaXRlbSA+IGEnKS50b2dnbGVDbGFzcygnbW9kYWwtb3BlbicpO1xuXHRcdCQoJ2JvZHknKS50b2dnbGVDbGFzcygnbW9kYWwtb3BlbicpO1xuXHR9KTtcblxuXHQkKFwiLm1vZGFsLW92ZXJsYXlcIikub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XG5cdFx0JCgnYm9keScpLnJlbW92ZUNsYXNzKCdtb2RhbC1vcGVuJyk7XG5cdFx0JCgnLm1vZGFsLW92ZXJsYXknKS5yZW1vdmVDbGFzcygnbW9kYWwtb3ZlcmxheS1zaG93Jyk7XG5cdFx0JCgnLm1lbnUtaXRlbSA+IGEnKS5yZW1vdmVDbGFzcygnbW9kYWwtb3BlbicpO1xuXHRcdCQoJy5zaXRlLXNlYXJjaF9fbW9kYWwnKS5yZW1vdmVDbGFzcygnc2hvdycpO1xuXHRcdCQoJy5zaXRlLWhlYWRlcicpLnJlbW92ZUNsYXNzKCdzaXRlLWhlYWRlci1tb2RhbCcpO1xuXHR9KTtcblx0XG5cblx0Ly8gVklERU8gUExBWSAvIENPVkVSXG5cdCQoJy52aWRlby1jb250YWluZXJfX3BsYXknKS5jbGljayhmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIGJ1dHRvbiA9ICQodGhpcyk7XG5cdFx0dmFyIHZpZGVvID0gYnV0dG9uLmF0dHIoJ2RhdGEtdmlkZW8tY29kZScpO1xuXHRcdGJ1dHRvbi5wYXJlbnRzKCcudmlkZW8tY29udGFpbmVyJykuaHRtbCh2aWRlbyk7XG5cdFx0Ly8kKGJ1dHRvbikuaGlkZSgpO1xuXHRcdGlmICgkKCcudmlkZW8tY29udGFpbmVyIGlmcmFtZVtzcmNePVwiaHR0cHM6Ly93d3cueW91dHViZS5jb21cIl0nKSkge1xuXHRcdFx0JCgnLnZpZGVvLWNvbnRhaW5lciBpZnJhbWUnKVswXS5zcmMgKz0gXCI/ZmVhdHVyZT1vZW1iZWQmYXV0b3BsYXk9MVwiO1xuXHRcdH07XG5cdH0pO1xuXG5cdC8vIEhVQiBTVElDS1kgUE9TVCBBSkFYIE9WRVJSSURFXG5cdCQoZG9jdW1lbnQpLm9uKFwic2Y6YWpheGZpbmlzaFwiLCBcIi5zZWFyY2hhbmRmaWx0ZXJcIiwgZnVuY3Rpb24gKCkge1xuXHRcdHZhciBjb3VudCA9ICQoJy50aGUtaHViX19ncmlkJykuZmluZCgnLnN0aWNreScpLmxlbmd0aDtcblx0XHRpZiAoY291bnQgPCAyKSB7XG5cdFx0XHQkKCcudGhlLWh1Yl9fZ3JpZCcpLmZpbmQoJy5zdGlja3knKS5hZGRDbGFzcygnc3RpY2t5LS1vdmVycmlkZScpO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gVE9HR0xFIEhVQiBGSUxURVJTXG5cdCQoJyNmaWx0ZXItdG9nZ2xlJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuXHRcdC8vICQodGhpcykuc2libGluZ3MoJy5zZWFyY2hhbmRmaWx0ZXInKS50b2dnbGVDbGFzcygnc2VhcmNoYW5kZmlsdGVyLS1vcGVuJyk7XG5cdFx0JCh0aGlzKS5zaWJsaW5ncygnLnNlYXJjaGFuZGZpbHRlcicpLnNsaWRlVG9nZ2xlKCk7XG5cdFx0JCh0aGlzKS50b2dnbGVDbGFzcygnb3BlbicpO1xuXHR9KTtcblxuXHQvLyBSRVBMQUNFIEFMTCBTVkcgSU1BR0VTIFdJVEggSU5MSU5FIFNWR1xuXHQkKCdpbWcuc3ZnJykuZWFjaChmdW5jdGlvbiAoKSB7XG5cdFx0dmFyICRpbWcgPSAkKHRoaXMpO1xuXHRcdHZhciBpbWdJRCA9ICRpbWcuYXR0cignaWQnKTtcblx0XHR2YXIgaW1nQ2xhc3MgPSAkaW1nLmF0dHIoJ2NsYXNzJyk7XG5cdFx0dmFyIGltZ1VSTCA9ICRpbWcuYXR0cignc3JjJyk7XG5cblx0XHQkLmdldChpbWdVUkwsIGZ1bmN0aW9uIChkYXRhKSB7XG5cdFx0XHQvL0dldCB0aGUgU1ZHIHRhZywgaWdub3JlIHRoZSByZXN0XG5cdFx0XHR2YXIgJHN2ZyA9ICQoZGF0YSkuZmluZCgnc3ZnJyk7XG5cdFx0XHQvL0FkZCByZXBsYWNlZCBpbWFnZSdzIElEIHRvIHRoZSBuZXcgU1ZHXG5cdFx0XHRpZiAodHlwZW9mIGltZ0lEICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0XHQkc3ZnID0gJHN2Zy5hdHRyKCdpZCcsIGltZ0lEKTtcblx0XHRcdH1cblx0XHRcdC8vQWRkIHJlcGxhY2VkIGltYWdlJ3MgY2xhc3NlcyB0byB0aGUgbmV3IFNWR1xuXHRcdFx0aWYgKHR5cGVvZiBpbWdDbGFzcyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0JHN2ZyA9ICRzdmcuYXR0cignY2xhc3MnLCBpbWdDbGFzcyArICcgcmVwbGFjZWQtc3ZnJyk7XG5cdFx0XHR9XG5cdFx0XHQvL1JlbW92ZSBhbnkgaW52YWxpZCBYTUwgdGFncyBhcyBwZXIgaHR0cDp2YWxpZGF0b3IudzMub3JnXG5cdFx0XHQkc3ZnID0gJHN2Zy5yZW1vdmVBdHRyKCd4bWxuczphJyk7XG5cdFx0XHQvLyBSZXBsYWNlIGltYWdlIHdpdGggbmV3IFNWR1xuXHRcdFx0JGltZy5yZXBsYWNlV2l0aCgkc3ZnKTtcblx0XHR9KTtcblx0fSk7XG59
2KTtcblxuXG4vKiEgalF1ZXJ5ICYgWmVwdG8gTGF6eSB2MS43LjEwIC0gaHR0cDovL2pxdWVyeS5laXNiZWhyLmRlL2xhenkgLSBNSVQmR1BMLTIuMCBsaWNlbnNlIC0gQ29weXJpZ2h0IDIwMTItMjAxOCBEYW5pZWwgJ0Vpc2JlaHInIEtlcm4gKi9cbiFmdW5jdGlvbiAodCwgZSkgeyBcInVzZSBzdHJpY3RcIjsgZnVuY3Rpb24gcihyLCBhLCBpLCB1LCBsKSB7IGZ1bmN0aW9uIGYoKSB7IEwgPSB0LmRldmljZVBpeGVsUmF0aW8gPiAxLCBpID0gYyhpKSwgYS5kZWxheSA+PSAwICYmIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzKCEwKSB9LCBhLmRlbGF5KSwgKGEuZGVsYXkgPCAwIHx8IGEuY29tYmluZWQpICYmICh1LmUgPSB2KGEudGhyb3R0bGUsIGZ1bmN0aW9uICh0KSB7IFwicmVzaXplXCIgPT09IHQudHlwZSAmJiAodyA9IEIgPSAtMSksIHModC5hbGwpIH0pLCB1LmEgPSBmdW5jdGlvbiAodCkgeyB0ID0gYyh0KSwgaS5wdXNoLmFwcGx5KGksIHQpIH0sIHUuZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGkgPSBuKGkpLmZpbHRlcihmdW5jdGlvbiAoKSB7IHJldHVybiAhbih0aGlzKS5kYXRhKGEubG9hZGVkTmFtZSkgfSkgfSwgdS5mID0gZnVuY3Rpb24gKHQpIHsgZm9yICh2YXIgZSA9IDA7IGUgPCB0Lmxlbmd0aDsgZSsrKSB7IHZhciByID0gaS5maWx0ZXIoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcyA9PT0gdFtlXSB9KTsgci5sZW5ndGggJiYgcyghMSwgcikgfSB9LCBzKCksIG4oYS5hcHBlbmRTY3JvbGwpLm9uKFwic2Nyb2xsLlwiICsgbCArIFwiIHJlc2l6ZS5cIiArIGwsIHUuZSkpIH0gZnVuY3Rpb24gYyh0KSB7IHZhciBpID0gYS5kZWZhdWx0SW1hZ2UsIG8gPSBhLnBsYWNlaG9sZGVyLCB1ID0gYS5pbWFnZUJhc2UsIGwgPSBhLnNyY3NldEF0dHJpYnV0ZSwgZiA9IGEubG9hZGVyQXR0cmlidXRlLCBjID0gYS5fZiB8fCB7fTsgdCA9IG4odCkuZmlsdGVyKGZ1bmN0aW9uICgpIHsgdmFyIHQgPSBuKHRoaXMpLCByID0gbSh0aGlzKTsgcmV0dXJuICF0LmRhdGEoYS5oYW5kbGVkTmFtZSkgJiYgKHQuYXR0cihhLmF0dHJpYnV0ZSkgfHwgdC5hdHRyKGwpIHx8IHQuYXR0cihmKSB8fCBjW3JdICE9PSBlKSB9KS5kYXRhKFwicGx1Z2luX1wiICsgYS5uYW1lLCByKTsgZm9yICh2YXIgcyA9IDAsIGQgPSB0Lmxlbmd0aDsgcyA8IGQ7IHMrKykgeyB2YXIgQSA9IG4odFtzXSksIGcgPSBtKHRbc10pLCBoID0gQS5hdHRyKGEuaW1hZ2VCYXNlQXR0cmlidXRlKSB8fCB1OyBnID09PSBOICYmIGggJiYgQS5hdHRyKGwpICYmIEEuYXR0cihsLCBiKEEuYXR0cihsKSwgaCkpLCBjW2ddID09PSBlIHx8IEEuYXR0cihmKSB8fCBBLmF0dHIoZiwgY1tnXSksIGcgPT09IE4gJiYgaSAmJiAhQS5hdHRyKEUpID8gQS5hdHRyKEUsIGkpIDogZyA9PT0gTiB8fCAhbyB8fCBBLmNzcyhPKSAmJiBcIm5vbmVcIiAhPT0gQS5jc3MoTykgfHwgQS5jc3MoTywgXCJ1cmwoJ1wiICsgbyArIFwiJylcIikgfSByZXR1cm4gdCB9IGZ1bmN0aW9uIHModCwgZSkgeyBpZiAoIWkubGVuZ3RoKSByZXR1cm4gdm9pZCAoYS5hdXRvRGVzdHJveSAmJiByLmRlc3Ryb3koKSk7IGZvciAodmFyIG8gPSBlIHx8IGksIHUgPSAhMSwgbCA9IGEuaW1hZ2VCYXNlIHx8IFwiXCIsIGYgPSBhLnNyY3NldEF0dHJpYnV0ZSwgYyA9IGEuaGFuZGxlZE5hbWUsIHMgPSAwOyBzIDwgby5sZW5ndGg7IHMrKylpZiAodCB8fCBlIHx8IEEob1tzXSkpIHsgdmFyIGcgPSBuKG9bc10pLCBoID0gbShvW3NdKSwgYiA9IGcuYXR0cihhLmF0dHJpYnV0ZSksIHYgPSBnLmF0dHIoYS5pbWFnZUJhc2VBdHRyaWJ1dGUpIHx8IGwsIHAgPSBnLmF0dHIoYS5sb2FkZXJBdHRyaWJ1dGUpOyBnLmRhdGEoYykgfHwgYS52aXNpYmxlT25seSAmJiAhZy5pcyhcIjp2aXNpYmxlXCIpIHx8ICEoKGIgfHwgZy5hdHRyKGYpKSAmJiAoaCA9PT0gTiAmJiAodiArIGIgIT09IGcuYXR0cihFKSB8fCBnLmF0dHIoZikgIT09IGcuYXR0cihGKSkgfHwgaCAhPT0gTiAmJiB2ICsgYiAhPT0gZy5jc3MoTykpIHx8IHApIHx8ICh1ID0gITAsIGcuZGF0YShjLCAhMCksIGQoZywgaCwgdiwgcCkpIH0gdSAmJiAoaSA9IG4oaSkuZmlsdGVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuICFuKHRoaXMpLmRhdGEoYykgfSkpIH0gZnVuY3Rpb24gZCh0LCBlLCByLCBpKSB7ICsrejsgdmFyIG8gPSBmdW5jdGlvbiAoKSB7IHkoXCJvbkVycm9yXCIsIHQpLCBwKCksIG8gPSBuLm5vb3AgfTsgeShcImJlZm9yZUxvYWRcIiwgdCk7IHZhciB1ID0gYS5hdHRyaWJ1dGUsIGwgPSBhLnNyY3NldEF0dHJpYnV0ZSwgZiA9IGEuc2l6ZXNBdHRyaWJ1dGUsIGMgPSBhLnJldGluYUF0dHJpYnV0ZSwgcyA9IGEucmVtb3ZlQXR0cmlidXRlLCBkID0gYS5sb2FkZWROYW1lLCBBID0gdC5hdHRyKGMpOyBpZiAoaSkgeyB2YXIgZyA9IGZ1bmN0aW9uICgpIHsgcyAmJiB0LnJlbW92ZUF0dHIoYS5sb2FkZXJBdHRyaWJ1dGUpLCB0LmRhdGEoZCwgITApLCB5KFQsIHQpLCBzZXRUaW1lb3V0KHAsIDEpLCBnID0gbi5ub29wIH07IHQub2ZmKEkpLm9uZShJLCBvKS5vbmUoRCwgZyksIHkoaSwgdCwgZnVuY3Rpb24gKGUpIHsgZSA/ICh0Lm9mZihEKSwgZygpKSA6ICh0Lm9mZihJKSwgbygpKSB9KSB8fCB0LnRyaWdnZXIoSSkgfSBlbHNlIHsgdmFyIGggPSBuKG5ldyBJbWFnZSk7IGgub25lKEksIG8pLm9uZShELCBmdW5jdGlvbiAoKSB7IHQuaGlkZSgpLCBlID09PSBOID8gdC5hdHRyKEMsIGguYXR0cihDKSkuYXR0cihGLCBoLmF0dHIoRikpLmF0dHIoRSwgaC5hdHRyKEUpKSA6IHQuY3NzKE8sIFwidXJsKCdcIiArIGguYXR0cihFKSArIFwiJylcIiksIHRbYS5lZmZlY3RdKGEuZWZmZWN0VGltZSksIHMgJiYgKHQucmVtb3ZlQXR0cih1ICsgXCIgXCIgKyBsICsgXCIgXCIgKyBjICsgXCIgXCIgKyBhLmltYWdlQmFzZUF0dHJpYnV0ZSksIGYgIT09IEMgJiYgdC5yZW1vdmVBdHRyKGYpKSwgdC5kYXRhKGQsICEwKSwgeShULCB0KSwgaC5yZW1vdmUoKSwgcCgpIH0pOyB2YXIgbSA9IChMICYmIEEgPyBBIDogdC5hdHRyKHUpKSB8fCBcIlwiOyBoLmF0dHIoQywgdC5hdHRyKGYpKS5hdHRyKEYsIHQuYXR0cihsKSkuYXR0cihFLCBtID8gciArIG0gOiBudWxsKSwgaC5jb21wbGV0ZSAmJiBoLnRyaWdnZXIoRCkgfSB9IGZ1bmN0aW9uIEEodCkgeyB2YXIgZSA9IHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIHIgPSBhLnNjcm9sbERpcmVjdGlvbiwgbiA9IGEudGhyZXNob2xkLCBpID0gaCgpICsgbiA+IGUudG9wICYmIC1uIDwgZS5ib3R0b20sIG8gPSBnKCkgKyBuID4gZS5sZWZ0ICYmIC1uIDwgZS5yaWdodDsgcmV0dXJuIFwidmVydGljYWxcIiA9PT0gciA/IGkgOiBcImhvcml6b250YWxcIiA9PT0gciA/IG8gOiBpICYmIG8gfSBmdW5jdGlvbiBnKCkgeyByZXR1cm4gdyA+PSAwID8gdyA6IHcgPSBuKHQpLndpZHRoKCkgfSBmdW5jdGlvbiBoKCkgeyByZXR1cm4gQiA+PSAwID8gQiA6IEIgPSBuKHQpLmhlaWdodCgpIH0gZnVuY3Rpb24gbSh0KSB7IHJldHVybi
2B0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSB9IGZ1bmN0aW9uIGIodCwgZSkgeyBpZiAoZSkgeyB2YXIgciA9IHQuc3BsaXQoXCIsXCIpOyB0ID0gXCJcIjsgZm9yICh2YXIgYSA9IDAsIG4gPSByLmxlbmd0aDsgYSA8IG47IGErKyl0ICs9IGUgKyByW2FdLnRyaW0oKSArIChhICE9PSBuIC0gMSA/IFwiLFwiIDogXCJcIikgfSByZXR1cm4gdCB9IGZ1bmN0aW9uIHYodCwgZSkgeyB2YXIgbiwgaSA9IDA7IHJldHVybiBmdW5jdGlvbiAobywgdSkgeyBmdW5jdGlvbiBsKCkgeyBpID0gK25ldyBEYXRlLCBlLmNhbGwociwgbykgfSB2YXIgZiA9ICtuZXcgRGF0ZSAtIGk7IG4gJiYgY2xlYXJUaW1lb3V0KG4pLCBmID4gdCB8fCAhYS5lbmFibGVUaHJvdHRsZSB8fCB1ID8gbCgpIDogbiA9IHNldFRpbWVvdXQobCwgdCAtIGYpIH0gfSBmdW5jdGlvbiBwKCkgeyAtLXosIGkubGVuZ3RoIHx8IHogfHwgeShcIm9uRmluaXNoZWRBbGxcIikgfSBmdW5jdGlvbiB5KHQsIGUsIG4pIHsgcmV0dXJuICEhKHQgPSBhW3RdKSAmJiAodC5hcHBseShyLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpLCAhMCkgfSB2YXIgeiA9IDAsIHcgPSAtMSwgQiA9IC0xLCBMID0gITEsIFQgPSBcImFmdGVyTG9hZFwiLCBEID0gXCJsb2FkXCIsIEkgPSBcImVycm9yXCIsIE4gPSBcImltZ1wiLCBFID0gXCJzcmNcIiwgRiA9IFwic3Jjc2V0XCIsIEMgPSBcInNpemVzXCIsIE8gPSBcImJhY2tncm91bmQtaW1hZ2VcIjsgXCJldmVudFwiID09PSBhLmJpbmQgfHwgbyA/IGYoKSA6IG4odCkub24oRCArIFwiLlwiICsgbCwgZikgfSBmdW5jdGlvbiBhKGEsIG8pIHsgdmFyIHUgPSB0aGlzLCBsID0gbi5leHRlbmQoe30sIHUuY29uZmlnLCBvKSwgZiA9IHt9LCBjID0gbC5uYW1lICsgXCItXCIgKyArK2k7IHJldHVybiB1LmNvbmZpZyA9IGZ1bmN0aW9uICh0LCByKSB7IHJldHVybiByID09PSBlID8gbFt0XSA6IChsW3RdID0gciwgdSkgfSwgdS5hZGRJdGVtcyA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiBmLmEgJiYgZi5hKFwic3RyaW5nXCIgPT09IG4udHlwZSh0KSA/IG4odCkgOiB0KSwgdSB9LCB1LmdldEl0ZW1zID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZi5nID8gZi5nKCkgOiB7fSB9LCB1LnVwZGF0ZSA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiBmLmUgJiYgZi5lKHt9LCAhdCksIHUgfSwgdS5mb3JjZSA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiBmLmYgJiYgZi5mKFwic3RyaW5nXCIgPT09IG4udHlwZSh0KSA/IG4odCkgOiB0KSwgdSB9LCB1LmxvYWRBbGwgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmLmUgJiYgZi5lKHsgYWxsOiAhMCB9LCAhMCksIHUgfSwgdS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbihsLmFwcGVuZFNjcm9sbCkub2ZmKFwiLlwiICsgYywgZi5lKSwgbih0KS5vZmYoXCIuXCIgKyBjKSwgZiA9IHt9LCBlIH0sIHIodSwgbCwgYSwgZiwgYyksIGwuY2hhaW5hYmxlID8gYSA6IHUgfSB2YXIgbiA9IHQualF1ZXJ5IHx8IHQuWmVwdG8sIGkgPSAwLCBvID0gITE7IG4uZm4uTGF6eSA9IG4uZm4ubGF6eSA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiBuZXcgYSh0aGlzLCB0KSB9LCBuLkxhenkgPSBuLmxhenkgPSBmdW5jdGlvbiAodCwgciwgaSkgeyBpZiAobi5pc0Z1bmN0aW9uKHIpICYmIChpID0gciwgciA9IFtdKSwgbi5pc0Z1bmN0aW9uKGkpKSB7IHQgPSBuLmlzQXJyYXkodCkgPyB0IDogW3RdLCByID0gbi5pc0FycmF5KHIpID8gciA6IFtyXTsgZm9yICh2YXIgbyA9IGEucHJvdG90eXBlLmNvbmZpZywgdSA9IG8uX2YgfHwgKG8uX2YgPSB7fSksIGwgPSAwLCBmID0gdC5sZW5ndGg7IGwgPCBmOyBsKyspKG9bdFtsXV0gPT09IGUgfHwgbi5pc0Z1bmN0aW9uKG9bdFtsXV0pKSAmJiAob1t0W2xdXSA9IGkpOyBmb3IgKHZhciBjID0gMCwgcyA9IHIubGVuZ3RoOyBjIDwgczsgYysrKXVbcltjXV0gPSB0WzBdIH0gfSwgYS5wcm90b3R5cGUuY29uZmlnID0geyBuYW1lOiBcImxhenlcIiwgY2hhaW5hYmxlOiAhMCwgYXV0b0Rlc3Ryb3k6ICEwLCBiaW5kOiBcImxvYWRcIiwgdGhyZXNob2xkOiA1MDAsIHZpc2libGVPbmx5OiAhMSwgYXBwZW5kU2Nyb2xsOiB0LCBzY3JvbGxEaXJlY3Rpb246IFwiYm90aFwiLCBpbWFnZUJhc2U6IG51bGwsIGRlZmF1bHRJbWFnZTogXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFQLy8vd0FBQUNINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQ1JBRUFPdz09XCIsIHBsYWNlaG9sZGVyOiBudWxsLCBkZWxheTogLTEsIGNvbWJpbmVkOiAhMSwgYXR0cmlidXRlOiBcImRhdGEtc3JjXCIsIHNyY3NldEF0dHJpYnV0ZTogXCJkYXRhLXNyY3NldFwiLCBzaXplc0F0dHJpYnV0ZTogXCJkYXRhLXNpemVzXCIsIHJldGluYUF0dHJpYnV0ZTogXCJkYXRhLXJldGluYVwiLCBsb2FkZXJBdHRyaWJ1dGU6IFwiZGF0YS1sb2FkZXJcIiwgaW1hZ2VCYXNlQXR0cmlidXRlOiBcImRhdGEtaW1hZ2ViYXNlXCIsIHJlbW92ZUF0dHJpYnV0ZTogITAsIGhhbmRsZWROYW1lOiBcImhhbmRsZWRcIiwgbG9hZGVkTmFtZTogXCJsb2FkZWRcIiwgZWZmZWN0OiBcInNob3dcIiwgZWZmZWN0VGltZTogMCwgZW5hYmxlVGhyb3R0bGU6ICEwLCB0aHJvdHRsZTogMjUwLCBiZWZvcmVMb2FkOiBlLCBhZnRlckxvYWQ6IGUsIG9uRXJyb3I6IGUsIG9uRmluaXNoZWRBbGw6IGUgfSwgbih0KS5vbihcImxvYWRcIiwgZnVuY3Rpb24gKCkgeyBvID0gITAgfSkgfSh3aW5kb3cpO1xuXG4vKiBJcyBpbiB2aWV3IHNjcmlwdCAtIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm90b25ldC9qcXVlcnkuaW52aWV3ICovXG4hZnVuY3Rpb24gKGEpIHsgXCJmdW5jdGlvblwiID09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbXCJqcXVlcnlcIl0sIGEpIDogXCJvYmplY3RcIiA9PSB0eXBlb2YgZXhwb3J0cyA/IG1vZHVsZS5leHBvcnRzID0gYShyZXF1aXJlKFwianF1ZXJ5XCIpKSA6IGEoalF1ZXJ5KSB9KGZ1bmN0aW9uIChhKSB7IGZ1bmN0aW9uIGkoKSB7IHZhciBiLCBjLCBkID0geyBoZWlnaHQ6IGYuaW5uZXJIZWlnaHQsIHdpZHRoOiBmLmlubmVyV2lkdGggfTsgcmV0dXJuIGQuaGVpZ2h0IHx8IChiID0gZS5jb21wYXRNb2RlLCAoYiB8fCAhYS5zdXBwb3J0LmJveE1vZGVsKSAmJiAoYyA9IFwiQ1NTMUNvbXBhdFwiID09PSBiID8gZyA6IGUuYm9keSwgZCA9IHsgaGVpZ2h0OiBjLmNsaWVudE
2hlaWdodCwgd2lkdGg6IGMuY2xpZW50V2lkdGggfSkpLCBkIH0gZnVuY3Rpb24gaigpIHsgcmV0dXJuIHsgdG9wOiBmLnBhZ2VZT2Zmc2V0IHx8IGcuc2Nyb2xsVG9wIHx8IGUuYm9keS5zY3JvbGxUb3AsIGxlZnQ6IGYucGFnZVhPZmZzZXQgfHwgZy5zY3JvbGxMZWZ0IHx8IGUuYm9keS5zY3JvbGxMZWZ0IH0gfSBmdW5jdGlvbiBrKCkgeyBpZiAoYi5sZW5ndGgpIHsgdmFyIGUgPSAwLCBmID0gYS5tYXAoYiwgZnVuY3Rpb24gKGEpIHsgdmFyIGIgPSBhLmRhdGEuc2VsZWN0b3IsIGMgPSBhLiRlbGVtZW50OyByZXR1cm4gYiA/IGMuZmluZChiKSA6IGMgfSk7IGZvciAoYyA9IGMgfHwgaSgpLCBkID0gZCB8fCBqKCk7IGUgPCBiLmxlbmd0aDsgZSsrKWlmIChhLmNvbnRhaW5zKGcsIGZbZV1bMF0pKSB7IHZhciBoID0gYShmW2VdKSwgayA9IHsgaGVpZ2h0OiBoWzBdLm9mZnNldEhlaWdodCwgd2lkdGg6IGhbMF0ub2Zmc2V0V2lkdGggfSwgbCA9IGgub2Zmc2V0KCksIG0gPSBoLmRhdGEoXCJpbnZpZXdcIik7IGlmICghZCB8fCAhYykgcmV0dXJuOyBsLnRvcCArIGsuaGVpZ2h0ID4gZC50b3AgJiYgbC50b3AgPCBkLnRvcCArIGMuaGVpZ2h0ICYmIGwubGVmdCArIGsud2lkdGggPiBkLmxlZnQgJiYgbC5sZWZ0IDwgZC5sZWZ0ICsgYy53aWR0aCA/IG0gfHwgaC5kYXRhKFwiaW52aWV3XCIsICEwKS50cmlnZ2VyKFwiaW52aWV3XCIsIFshMF0pIDogbSAmJiBoLmRhdGEoXCJpbnZpZXdcIiwgITEpLnRyaWdnZXIoXCJpbnZpZXdcIiwgWyExXSkgfSB9IH0gdmFyIGMsIGQsIGgsIGIgPSBbXSwgZSA9IGRvY3VtZW50LCBmID0gd2luZG93LCBnID0gZS5kb2N1bWVudEVsZW1lbnQ7IGEuZXZlbnQuc3BlY2lhbC5pbnZpZXcgPSB7IGFkZDogZnVuY3Rpb24gKGMpIHsgYi5wdXNoKHsgZGF0YTogYywgJGVsZW1lbnQ6IGEodGhpcyksIGVsZW1lbnQ6IHRoaXMgfSksICFoICYmIGIubGVuZ3RoICYmIChoID0gc2V0SW50ZXJ2YWwoaywgMjUwKSkgfSwgcmVtb3ZlOiBmdW5jdGlvbiAoYSkgeyBmb3IgKHZhciBjID0gMDsgYyA8IGIubGVuZ3RoOyBjKyspIHsgdmFyIGQgPSBiW2NdOyBpZiAoZC5lbGVtZW50ID09PSB0aGlzICYmIGQuZGF0YS5ndWlkID09PSBhLmd1aWQpIHsgYi5zcGxpY2UoYywgMSk7IGJyZWFrIH0gfSBiLmxlbmd0aCB8fCAoY2xlYXJJbnRlcnZhbChoKSwgaCA9IG51bGwpIH0gfSwgYShmKS5vbihcInNjcm9sbCByZXNpemUgc2Nyb2xsc3RvcFwiLCBmdW5jdGlvbiAoKSB7IGMgPSBkID0gbnVsbCB9KSwgIWcuYWRkRXZlbnRMaXN0ZW5lciAmJiBnLmF0dGFjaEV2ZW50ICYmIGcuYXR0YWNoRXZlbnQoXCJvbmZvY3VzaW5cIiwgZnVuY3Rpb24gKCkgeyBkID0gbnVsbCB9KSB9KTtcblxualF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigkKXtcblx0XG4gICAgLy8gdmFsaWQgaW5wdXQgdHJhY2tlcnNcblx0Ly8gb25seSBydW4gb24gYm9keS5wYWdlLXRlbXBsYXRlLXRlbXBsYXRlLWZvcm1cblx0aWYoICQoJ2JvZHknKS5oYXNDbGFzcygncGFnZS10ZW1wbGF0ZS10ZW1wbGF0ZS1mb3JtJykgKSB7XG5cblx0ICAgIC8vIEZPUk0gVkFMSURBVElPTiBcblx0ICAgICQoJy5mcm1fZm9ybV9maWVsZCBpbnB1dFt0eXBlPVwidGVsXCJdJykuZWFjaChmdW5jdGlvbigpIHtcblx0ICAgICAgICBpZiggJCh0aGlzKS52YWwoKSA9PSB1bmRlZmluZWQgfHwgJCh0aGlzKS52YWwoKSA9PSBudWxsIHx8ICQodGhpcykudmFsKCkgPT0gJycgKSB7XG5cdCAgICAgICAgICAgIFxuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvLyBPVEhFUiBQTEFDRUhPTERFUlxuXHQgICAgLy8gJCgnLmZybV9vdGhlcl9pbnB1dCcpLmF0dHIoJ3BsYWNlaG9sZG
2VyJywgJ0VudGVyIG90aGVyIG9wdGlvbicpXG5cblx0XHQvLyBGT1JNIFRFWFQgVElDS1xuXHQgICAgJCgnLmZybV9mb3JtcyBpbnB1dFt0eXBlIT1cInJhZGlvXCJdW3R5cGUhPVwiY2hlY2tib3hcIl0nKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7IFxuXHQgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpO1xuXHQgICAgICAgIGNoZWNrSW5wdXRWYWxpZCgkKHRoaXMpKTtcblx0ICAgIH0pO1xuXG5cdCAgICAvLyBGT1JNIFRFWFRBUkVBIFRJQ0tcblx0ICAgICQoJy5mcm1fZm9ybXMgdGV4dGFyZWEnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7IFxuXHQgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpO1xuXHQgICAgICAgIGNoZWNrSW5wdXRWYWxpZCgkKHRoaXMpKTtcblx0ICAgIH0pO1xuXHQgICAgXG5cdCAgICAvLyBGT1JNIFNFTEVDVCBUSUNLXG5cdCAgICAkKCcuZnJtX2Zvcm1zIHNlbGVjdCcpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcblx0ICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Jlc2l6ZScpKTtcblx0ICAgICAgICBjaGVja1NlbGVjdElucHV0VmFsaWQoJCh0aGlzKSk7XG5cdCAgICB9KTtcblxuXHQgICAgLy8gRk9STSBPVEhFUiBJTlBVVCBUSUNLXG5cdCAgICAkKCcuZnJtX2Zvcm1zIC5mcm1fb3RoZXJfaW5wdXQnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSk7XG5cdCAgICAgICAgY2hlY2tPdGhlcklucHV0VmFsaWQoJCh0aGlzKSk7XG5cdCAgICB9KTtcblxuXHQgICAgLy8gRk9STSBSQURJTyBUSUNLXG5cdCAgICAkKCcuZnJtX2Zvcm1zIGlucHV0W3R5cGU9XCJyYWRpb1wiXScpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcblx0ICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Jlc2l6ZScpKTtcblx0ICAgICAgICBjaGVja1JhZGlvSW5wdXRWYWxpZCgkKHRoaXMpKTtcblx0ICAgIH0pO1xuXG5cdCAgICAvLyBGT1JNIENIRUNLQk9YIFRJQ0tcblx0ICAgICQoJy5mcm1fZm9ybXMgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpO1xuXHQgICAgICAgIGNoZWNrQ2hlY2tib3hJbnB1dFZhbGlkKCQodGhpcykpO1xuXHQgICAgfSk7XG5cdCAgICBcblx0ICAgIC8vIEZPUk0gVElDS1MgT04gTE9BRFxuXHQgICAgJCgnLmZybV9mb3JtcyBpbnB1dFt0eXBlIT1cInJhZGlvXCJdW3R5cGUhPVwiY2hlY2tib3hcIl0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIGNoZWNrSW5wdXRWYWxpZCgkKHRoaXMpKTtcblx0ICAgIH0pO1xuXHQgICAgJCgnLmZybV9mb3JtcyBzZWxlY3QnKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIGNoZWNrU2VsZWN0SW5wdXRWYWxpZCgkKHRoaXMpKTtcblx0ICAgIH0pO1xuXHQgICAgJCgnLmZybV9mb3JtcyAuZnJtX290aGVyX2lucHV0JykuZWFjaChmdW5jdGlvbigpIHtcblx0ICAgICAgICBjaGVja090aGVySW5wdXRWYWxpZCgkKHRoaXMpKTtcblx0ICAgIH0pO1xuXHQgICAgJCgnLmZybV9mb3JtcyBpbnB1dFt0eXBlPVwicmFkaW9cIl0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHQgICAgICAgIGNoZWNrUmFkaW9JbnB1dFZhbGlkKCQodGhpcykpO1xuXHQgICAgfSk7XG5cdCAgICAkKCcuZnJtX2Zvcm1zIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXScpLmVhY2goZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgY2hlY2tDaGVja2JveElucHV0VmFsaWQoJCh0aGlzKSk7XG5cdCAgICB9KTtcblxuXHQgICAgZnVuY3Rpb24gY2hlY2tJbnB1dFZhbGlkKCRmaWVsZCkge1xuXHQgICAgICAgIGlmKCAkZmllbGQudmFsKCkgIT09ICcnICYmICRmaWVsZC52YWwoKSAhPT0gbnVsbCAmJiAkZmllbGQuaXMoJzp2YWxpZCcpICkge1xuXHQgICAgICAgICAgICAkZmllbGQuY2xvc2VzdCgnLmZybV9mb3JtX2ZpZWxkJykuYWRkQ2xhc3MoJ3ZhbGlkLWlucHV0Jyk7XG5cdCAgICAgICAgfWVsc2V7XG5cdCAgICAgICAgICAgICRmaWVsZC5jbG9zZXN0KCcuZnJtX2Zvcm1fZmllbGQnKS5yZW1vdmVDbGFzcygndmFsaWQtaW5wdXQnKTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGNoZWNrU2VsZWN0SW5wdXRWYWxpZCgkc2VsZWN0RmllbGQpIHtcblx0ICAgICAgICBpZiggJHNlbGVjdEZpZWxkLnZhbCgpICE9PSAnJyAmJiAkc2VsZWN0RmllbGQudmFsKCkgIT09IG51bGwgJiYgJHNlbGVjdEZpZWxkLnZhbCgpICE9PSB1bmRlZmluZWQgJiYgJHNlbGVjdEZpZWxkLnZhbCgpICE9PSAnT3RoZXInICkge1xuXHQgICAgICAgICAgICAkc2VsZWN0RmllbGQuY2xvc2VzdCgnLmZybV9mb3JtX2ZpZWxkJykuYWRkQ2xhc3MoJ3ZhbGlkLWlucHV0Jyk7XG5cdCAgICAgICAgfWVsc2V7XG5cdCAgICAgICAgICAgICRzZWxlY3RGaWVsZC5jbG9zZXN0KCcuZnJtX2Zvcm1fZmllbGQnKS5yZW1vdmVDbGFzcygndmFsaWQtaW5wdXQnKTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGNoZWNrT3RoZXJJbnB1dFZhbGlkKCRmaWVsZCkge1xuXHQgICAgICAgIGlmKCAkZmllbGQudmFsKCkgIT09ICcnICYmICRmaWVsZC52YWwoKSAhPT0gbnVsbCAmJiAkZmllbGQuaXMoJzp2YWxpZCcpICkge1xuXHQgICAgICAgICAgICAkZmllbGQuY2xvc2VzdCgnLmZybV9mb3JtX2ZpZWxkJykuYWRkQ2xhc3MoJ3ZhbGlkLWlucHV0Jyk7XG5cdCAgICAgICAgfWVsc2V7XG5cdCAgICAgICAgICAgICRmaWVsZC5jbG9zZXN0KCcuZnJtX2Zvcm1fZmllbGQnKS5yZW1vdmVDbGFzcygndmFsaWQtaW5wdXQnKTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGNoZWNrUmFkaW9JbnB1dFZhbGlkKCRyYWRpb0ZpZWxkKSB7XG5cdCAgICAgICAgaWYoICRyYWRpb0ZpZWxkLnZhbCgpICE9PSAnJyAmJiAkcmFkaW9GaWVsZC52YWwoKSAhPT0gbnVsbCAmJiAkcmFkaW9GaWVsZC52YWwoKSAhPT0gdW5kZWZpbmVkICYmICRyYWRpb0ZpZWxkLmlzKCc6Y2hlY2tlZCcpICkge1xuXHQgICAgICAgICAgICAkcmFkaW9GaWVsZC5jbG9zZXN0KCcuZnJtX2Zvcm1fZmllbGQnKS5hZGRDbGFzcygndmFsaWQtaW5wdXQnKTtcblx0ICAgICAgICB9ZWxzZXtcblx0ICAgICAgICAgICAgJHJhZGlvRmllbGQuY2xvc2VzdCgnLmZybV9mb3JtX2ZpZWxkJykucmVtb3ZlQ2xhc3MoJ3ZhbGlkLWlucHV0Jyk7XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBjaGVja0NoZWNrYm94SW5wdXRWYWxpZCgkY2hlY2tib3hGaWVsZCkge1xuXHQgICAgICAgIGlmKCAkY2hlY2tib3hGaWVsZC52YWwoKSAhPT0gJycgJiYgJGNoZWNrYm94RmllbGQudmFsKCkgIT09IG51bGwgJiYgJGNoZWNrYm94RmllbGQudmFsKCkgIT09IHVuZGVmaW5lZCAmJiAkY2hlY2tib3hGaWVsZC5pcygnOmNoZWNrZWQnKSApIHtcblx0ICAgICAgICAgICAgJGNoZWNrYm94RmllbGQuY2xvc2VzdCgnLmZybV9mb3JtX2ZpZWxkJykuYWRkQ2xhc3MoJ3ZhbGlkLWlucHV0Jyk7XG5cdCAgICAgICAgfWVsc2V7XG5cdCAgICAgICAgICAgICRjaGVja2JveEZpZWxkLmNsb3Nlc3QoJy5mcm1fZm9ybV9maWVsZCcpLnJlbW92ZUNsYXNzKCd2YWxpZC1pbnB1dCcpO1xuXHQgICAgICAgI
2H1cblx0ICAgICAgICB2YXIgbmFtZSA9ICRjaGVja2JveEZpZWxkLmF0dHIoJ25hbWUnKTtcblx0ICAgICAgICAkKCcuZnJtX2Zvcm1zIGlucHV0W25hbWU9XCInICsgbmFtZSArICdcIl0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICBpZiggJCh0aGlzKS5pcygnOmNoZWNrZWQnKSApIHtcblx0ICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLmZybV9mb3JtX2ZpZWxkJykuYWRkQ2xhc3MoJ3ZhbGlkLWlucHV0Jyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9KVxuXHQgICAgfVxuXG5cdH1cblxuXHQvLyAkKCcuZnJtX3JhZGlvJykuY2xpY2soZnVuY3Rpb24oKSB7XHRcblx0Ly8gXHQkKHRoaXMpLmFkZENsYXNzKCdibHVlLWJvcmRlcicpO1x0XHRcblx0Ly8gfSk7XG5cdCQoXCIuZnJtX3JhZGlvXCIpLmNsaWNrKGZ1bmN0aW9uKCl7XG5cdFx0JChcIi5mcm1fcmFkaW9cIikucmVtb3ZlQ2xhc3MoXCJibHVlLWJvcmRlclwiKTtcblx0XHQkKHRoaXMpLmFkZENsYXNzKFwiYmx1ZS1ib3JkZXJcIik7XG5cdH0pO1xuXG59KTtcblxuIiwialF1ZXJ5KGRvY3VtZW50KS5vbigncmVhZHknLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvLyBIYW5kbGUgbXVsdGlwbGUgc2VhcmNoIGJhcnNcclxuICAgIHZhciBzZWFyY2hCYXIxID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlYXJjaC1maWVsZCcpOyAvLyBUaGUgc2VhcmNoIGJhciBvbiB5b3VyIG1haW4gcGFnZVxyXG4gICAgLy8gdmFyIHNlYXJjaEJhcjIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncycpOyAvLyBUaGUgc2VhcmNoIGJhciBvbiB5b3VyIHNlYXJjaC5waHAgcGFnZVxyXG4gICAgLy8gdmFyIHNlYXJjaEJhcjMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY3VzdG9tLW1lZGlhLXNlYXJjaCBsaS5zZi1maWVsZC1zZWFyY2ggaW5wdXQnKTsgLy8gVGhlIHNlYXJjaCBiYXIgb24geW91ciBzZWFyY2gucGhwIHBhZ2VcclxuXHJcbiAgICAvLyBGdW5jdGlvbiB0byBpbml0aWFsaXplIHByZWRpY3RpdmUgc2VhcmNoXHJcbiAgICBmdW5jdGlvbiBpbml0aWFsaXplUHJlZGljdGl2ZVNlYXJjaChzZWFyY2hCYXIpIHtcclxuICAgICAgICBpZiAoIXNlYXJjaEJhcikgcmV0dXJuOyAvLyBJZiB0aGUgc2VhcmNoIGJhciBkb2VzIG5vdCBleGlzdCwgZG8gbm90aGluZ1xyXG5cclxuICAgICAgICB2Y
2XIgcmVzdWx0c0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHJlc3VsdHNDb250YWluZXIuc2V0QXR0cmlidXRlKCdjbGFzcycsICdzZWFyY2gtcmVzdWx0cycpO1xyXG4gICAgICAgIHJlc3VsdHNDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsICdzZWFyY2gtcmVzdWx0cycpO1xyXG4gICAgICAgIHJlc3VsdHNDb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICAgIHJlc3VsdHNDb250YWluZXIuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3RyYW5zcGFyZW50JztcclxuICAgICAgICByZXN1bHRzQ29udGFpbmVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICAgICAgc2VhcmNoQmFyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHJlc3VsdHNDb250YWluZXIsIHNlYXJjaEJhci5uZXh0U2libGluZyk7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBzcGlubmVyIGVsZW1lbnRcclxuICAgICAgICB2YXIgc3Bpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHNwaW5uZXIuc2V0QXR0cmlidXRlKCdpZCcsICdsb2FkaW5nLXNwaW5uZXInKTtcclxuICAgICAgICBzcGlubmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7IC8vIEhpZGRlbiBieSBkZWZhdWx0XHJcbiAgICAgICAgc3Bpbm5lci5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj4nOyAvLyBTaW1wbGUgc3Bpbm5lciBkaXZcclxuICAgICAgICBzZWFyY2hCYXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc3Bpbm5lciwgcmVzdWx0c0NvbnRhaW5lcik7XHJcblxyXG4gICAgICAgIHZhciBkZWJvdW5jZTtcclxuICAgICAgICBzZWFyY2hCYXIuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBzZWFyY2hRdWVyeSA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVib3VuY2UpO1xyXG4gICAgICAgICAgICBkZWJvdW5jZSA9IHNldFRpbWVvdXQoIFxyXG4gICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNlYXJjaFF1ZXJ5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBzcGlubmVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOyAvLyBTaG93IHNwaW5uZXJcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7IC8vIEhpZGUgdGhlIHJlc3VsdHMgY29udGFpbmVyXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2gobGl2ZV9zZWFyY2hfb2JqZWN0LmFqYXhfdXJsICsgJz9xdWVyeT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHNlYXJjaFF1ZXJ5KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgLy8gSGlkZSBzcGlubmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5U2VhcmNoUmVzdWx0cyhkYXRhLCByZXN1bHRzQ29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbm5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyAvLyBIaWRlIHNwaW5uZXIgb24gZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2xpdmVfc2VhcmNoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnk6IGVuY29kZVVSSUNvbXBvbmVudChzZWFyY2hRdWVyeSksXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3ByaW9yIHRvIGFqYXgnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAncG9zdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbGl2ZV9zZWFyY2hfb2JqZWN0LmFqYXhfdXJsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2UpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGlubmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7IC8vIEhpZGUgc3Bpbm5lclxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlTZWFyY2hSZXN1bHRzKCByZXNwb25zZS5kYXRhLCByZXN1bHRzQ29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihyZXNwb25zZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvIG5vdGhpbmdcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0c0NvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoUXVlcnkubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c0NvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyAvLyBIaWRlIHRoZSByZXN1bHRzIGNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgI
2H1cclxuICAgICAgICAgICAgICAgIH1cclxuIFxyXG4gICAgICAgICAgICAgIH0sIDUwMCwgc2VhcmNoUXVlcnlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBmb3IgYm90aCBzZWFyY2ggYmFyc1xyXG4gICAgaW5pdGlhbGl6ZVByZWRpY3RpdmVTZWFyY2goc2VhcmNoQmFyMSk7XHJcbiAgICAvLyBpbml0aWFsaXplUHJlZGljdGl2ZVNlYXJjaChzZWFyY2hCYXIyKTtcclxuICAgIC8vIGluaXRpYWxpemVQcmVkaWN0aXZlU2VhcmNoKHNlYXJjaEJhcjMpO1xyXG5cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gZGlzcGxheVNlYXJjaFJlc3VsdHMocmVzdWx0cywgY29udGFpbmVyKSB7XHJcbiAgICAgICAgLy8gQ2xlYXIgcHJldmlvdXMgcmVzdWx0c1xyXG4gICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzKTtcclxuICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgcmVzdWx0c1xyXG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygncmVzdWx0cyAwJyk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdjbG9zZScpO1xyXG4gICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gJzxsaT5ObyByZXN1bHRzIGZvdW5kPC9saT4nO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZXN1bHRzIDEnKTtcclxuICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2Nsb3NlJyk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuXHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgc2VhcmNoIHJlc3VsdHMgY29udGFpbmVyXHJcbiAgICAgICAgICAgIHZhciBzZWFyY2hSZXN1bHRzQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgIHNlYXJjaFJlc3VsdHNDb250YWluZXIuaWQgPSAnc2VhcmNoLXJlc3VsdHMtY29udGFpbmVyJztcclxuXHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIGxpc3QgdG8gZGlzcGxheSB0aGUgcmVzdWx0c1xyXG4gICAgICAgICAgICB2Y
2XIgcmVzdWx0c0xpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpO1xyXG4gICAgICAgICAgICByZXN1bHRzTGlzdC5jbGFzc0xpc3QuYWRkKCAnc2VhcmNoLXJlc3VsdHMtbGlzdCcgKTtcclxuICAgICAgICAgICAgcmVzdWx0c0xpc3QuaWQgPSAnc2VhcmNoLXJlc3VsdHMtbGlzdCc7XHJcbiAgICAgICAgICAgIHJlc3VsdHNMaXN0LnN0eWxlLmxpc3RTdHlsZVR5cGUgPSAnbm9uZSc7IC8vIFJlbW92ZSBidWxsZXQgcG9pbnRzXHJcblxyXG4gICAgICAgICAgICAvLyBBcHBlbmQgdGhlIHJlc3VsdHMgbGlzdCB0byB0aGUgc2VhcmNoIHJlc3VsdHMgY29udGFpbmVyXHJcbiAgICAgICAgICAgIHNlYXJjaFJlc3VsdHNDb250YWluZXIuYXBwZW5kQ2hpbGQocmVzdWx0c0xpc3QpO1xyXG5cclxuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHNlYXJjaFJlc3VsdHNDb250YWluZXIpO1xyXG5cclxuICAgICAgICAgICAgLy8gQXBwZW5kIGVhY2ggcmVzdWx0IGFzIGEgbGlzdCBpdGVtXHJcbiAgICAgICAgICAgIHJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbihyZXN1bHQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbGlzdEl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOyAvLyBDcmVhdGUgPGxpPiBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICBsaXN0SXRlbS5jbGFzc05hbWUgPSAnc2VhcmNoLXJlc3VsdC1pdGVtJzsgLy8gQWRkIGEgY2xhc3MgZm9yIHN0eWxpbmdcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIHRoZSBcIm5vIHJlc3VsdHNcIiBvdXRwdXRcclxuICAgICAgICAgICAgICAgIGlmKCByZXN1bHQuSUQgPT0gMCB8fCByZXN1bHQuSUQgPT0gJzAnICkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiggcmVzdWx0LnBvc3RfbGluayAhPT0gJycgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJ2aWV3LWFsbFwiIGhyZWY9XCInICsgcmVzdWx0LnBvc3RfbGluayArICdcIiB0YXJnZXQ9XCJfc2VsZlwiPicgKyByZXN1bHQucG9zdF90aXRsZSArICc8L2E+JzsgLy8gQ3JlYXRlIGEgbGlua1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwibm8tcmVzdWx0XCI+JyArIHJlc3VsdC5wb3N0X3RpdGxlICsgJzwvZGl2Pic7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9ICdfc2VsZic7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc3RfdGl0bGUgPSByZXN1bHQucG9zdF90aXRsZTtcclxuICAgICAgICAgICAgICAgICAgICB2Y
2XIgZG93bmxvYWRfc3ZnID0gJzxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTAgMTVMMy43NSA4Ljc1TDUuNSA2LjkzNzVMOC43NSAxMC4xODc1VjBIMTEuMjVWMTAuMTg3NUwxNC41IDYuOTM3NUwxNi4yNSA4Ljc1TDEwIDE1Wk0yLjUgMjBDMS44MTI1IDIwIDEuMjIzOTYgMTkuNzU1MiAwLjczNDM3NSAxOS4yNjU2QzAuMjQ0NzkyIDE4Ljc3NiAwIDE4LjE4NzUgMCAxNy41VjEzLjc1SDIuNVYxNy41SDE3LjVWMTMuNzVIMjBWMTcuNUMyMCAxOC4xODc1IDE5Ljc1NTIgMTguNzc2IDE5LjI2NTYgMTkuMjY1NkMxOC43NzYgMTkuNzU1MiAxOC4xODc1IDIwIDE3LjUgMjBIMi41WlwiIGZpbGw9XCJ3aGl0ZVwiLz48L3N2Zz4nO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiggcmVzdWx0LnBvc3RfdHlwZSAmJiAoIHJlc3VsdC5wb3N0X3R5cGUgPT0gJ3JlZ3VsYXRvcnlfZG9jcycgfHwgcmVzdWx0LnBvc3RfdHlwZSA9PSAndml0b2wtZG9jdW1lbnRzJyB8fCByZXN1bHQucG9zdF90eXBlID09ICd2aXRvbC1icmFzaWwtZG9jdW1lbnQnICkgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9ICdfYmxhbmsnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3N0X3RpdGxlID0gcG9zdF90aXRsZSArICcgKFBERikgJyArIGRvd25sb2FkX3N2ZztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cInNlYXJjaC1yZXN1bHQtbGlua1wiIGhyZWY9XCInICsgcmVzdWx0LnBvc3RfbGluayArICdcIiB0YXJnZXQ9XCInICsgdGFyZ2V0ICsgJ1wiPicgKyBwb3N0X3RpdGxlICsgJzwvYT4nOyAvLyBDcmVhdGUgYSBsaW5rIGZvciBlYWNoIHJlc3VsdFxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXN1bHRzTGlzdC5hcHBlbmRDaGlsZChsaXN0SXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG59KTsiLCIvKlxuICAgICBfIF8gICAgICBfICAgICAgIF9cbiBfX198IChfKSBfX198IHwgX18gIChfKV9fX1xuLyBfX3wgfCB8LyBfX3wgfC8gLyAgfCAvIF9ffFxuXFxfXyBcXCB8IHwgKF9ffCAgIDwgXyB8IFxcX18gXFxcbnxfX18vX3xffFxcX19ffF98XFxfKF8pLyB8X19fL1xuICAgICAgICAgICAgICAgICAgIHxfXy9cblxuIFZlcnNpb246IDEuOC4xXG4gIEF1dGhvcjogS2VuIFdoZWVsZXJcbiBXZWJzaXRlOiBodHRwOi8va2Vud2hlZWxlci5naXRodWIuaW9cbiAgICBEb2NzOiBodHRwOi8va2Vud2hlZWxlci5naXRodWIuaW8vc2xpY2tcbiAgICBSZXBvOiBodHRwOi8vZ2l0aHViLmNvbS9rZW53aGVlbGVyL3NsaWNrXG4gIElzc3VlczogaHR0cDovL2dpdGh1Yi5jb20va2Vud2hlZWxlci9zbGljay9pc3N1ZXNcblxuICovXG4vKiBnbG9iYWwgd2luZG93LCBkb2N1bWVudCwgZGVmaW5lLCBqUXVlcnksIHNldEludGVydmFsLCBjbGVhckludGVydmFsICovXG47KGZ1bmN0aW9uKGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoWydqcXVlcnknXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ2pxdWVyeScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmYWN0b3J5KGpRdWVyeSk7XG4gICAgfVxuXG59KGZ1bmN0aW9uKCQpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgdmFyIFNsaWNrID0gd2luZG93LlNsaWNrIHx8IHt9O1xuXG4gICAgU2xpY2sgPSAoZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIGluc3RhbmNlVWlkID0gMDtcblxuICAgICAgICBmdW5jdGlvbiBTbGljayhlbGVtZW50LCBzZXR0aW5ncykge1xuXG4gICAgICAgICAgICB2Y
2XIgXyA9IHRoaXMsIGRhdGFTZXR0aW5ncztcblxuICAgICAgICAgICAgXy5kZWZhdWx0cyA9IHtcbiAgICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGFkYXB0aXZlSGVpZ2h0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhcHBlbmRBcnJvd3M6ICQoZWxlbWVudCksXG4gICAgICAgICAgICAgICAgYXBwZW5kRG90czogJChlbGVtZW50KSxcbiAgICAgICAgICAgICAgICBhcnJvd3M6IHRydWUsXG4gICAgICAgICAgICAgICAgYXNOYXZGb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgcHJldkFycm93OiAnPGJ1dHRvbiBjbGFzcz1cInNsaWNrLXByZXZcIiBhcmlhLWxhYmVsPVwiUHJldmlvdXNcIiB0eXBlPVwiYnV0dG9uXCI+UHJldmlvdXM8L2J1dHRvbj4nLFxuICAgICAgICAgICAgICAgIG5leHRBcnJvdzogJzxidXR0b24gY2xhc3M9XCJzbGljay1uZXh0XCIgYXJpYS1sYWJlbD1cIk5leHRcIiB0eXBlPVwiYnV0dG9uXCI+TmV4dDwvYnV0dG9uPicsXG4gICAgICAgICAgICAgICAgYXV0b3BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGF1dG9wbGF5U3BlZWQ6IDMwMDAsXG4gICAgICAgICAgICAgICAgY2VudGVyTW9kZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY2VudGVyUGFkZGluZzogJzUwcHgnLFxuICAgICAgICAgICAgICAgIGNzc0Vhc2U6ICdlYXNlJyxcbiAgICAgICAgICAgICAgICBjdXN0b21QYWdpbmc6IGZ1bmN0aW9uKHNsaWRlciwgaSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgLz4nKS50ZXh0KGkgKyAxKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRvdHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRvdHNDbGFzczogJ3NsaWNrLWRvdHMnLFxuICAgICAgICAgICAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlYXNpbmc6ICdsaW5lYXInLFxuICAgICAgICAgICAgICAgIGVkZ2VGcmljdGlvbjogMC4zNSxcbiAgICAgICAgICAgICAgICBmYWRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmb2N1c09uU2VsZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmb2N1c09uQ2hhbmdlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbmZpbml0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbml0aWFsU2xpZGU6IDAsXG4gICAgICAgICAgICAgICAgbGF6eUxvYWQ6ICdvbmRlbWFuZCcsXG4gICAgICAgICAgICAgICAgbW9iaWxlRmlyc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBhdXNlT25Ib3ZlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXVzZU9uRm9jdXM6IHRydWUsXG4gICAgICAgICAgICAgICAgcGF1c2VPbkRvdHNIb3ZlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzcG9uZFRvOiAnd2luZG93JyxcbiAgICAgICAgICAgICAgICByZXNwb25zaXZlOiBudWxsLFxuICAgICAgICAgICAgICAgIHJvd3M6IDEsXG4gICAgICAgICAgICAgICAgcnRsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzbGlkZTogJycsXG4gICAgICAgICAgICAgICAgc2xpZGVzUGVyUm93OiAxLFxuICAgICAgICAgICAgICAgIHNsaWRlc1RvU2hvdzogMSxcbiAgICAgICAgICAgICAgICBzbGlkZXNUb1Njcm9sbDogMSxcbiAgICAgICAgICAgICAgICBzcGVlZDogNTAwLFxuICAgICAgICAgICAgICAgIHN3aXBlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHN3aXBlVG9TbGlkZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdG91Y2hNb3ZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvdWNoVGhyZXNob2xkOiA1LFxuICAgICAgICAgICAgICAgIHVzZUNTUzogdHJ1ZSxcbiAgICAgICAgICAgICAgICB1c2VUcmFuc2Zvcm06IHRydWUsXG4gICAgICAgICAgICAgICAgdmFyaWFibGVXaWR0aDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmVydGljYWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsU3dpcGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgd2FpdEZvckFuaW1hdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgekluZGV4OiAxMDAwXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBfLmluaXRpYWxzID0ge1xuICAgICAgICAgICAgICAgIGFuaW1hdGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgZHJhZ2dpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGF1dG9QbGF5VGltZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgY3VycmVudERpcmVjdGlvbjogMCxcbiAgICAgICAgICAgICAgICBjdXJyZW50TGVmdDogbnVsbCxcbiAgICAgICAgICAgICAgICBjdXJyZW50U2xpZGU6IDAsXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAxLFxuICAgICAgICAgICAgICAgICRkb3RzOiBudWxsLFxuICAgICAgICAgICAgICAgIGxpc3RXaWR0aDogbnVsbCxcbiAgICAgICAgICAgICAgICBsaXN0SGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgIGxvYWRJbmRleDogMCxcbiAgICAgICAgICAgICAgICAkbmV4dEFycm93OiBudWxsLFxuICAgICAgICAgICAgICAgICRwcmV2QXJyb3c6IG51bGwsXG4gICAgICAgICAgICAgICAgc2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzbGlkZUNvdW50OiBudWxsLFxuICAgICAgICAgICAgICAgIHNsaWRlV2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgJHNsaWRlVHJhY2s6IG51bGwsXG4gICAgICAgICAgICAgICAgJHNsaWRlczogbnVsbCxcbiAgICAgICAgICAgICAgICBzbGlkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzbGlkZU9mZnNldDogMCxcbiAgICAgICAgICAgICAgICBzd2lwZUxlZnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgc3dpcGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJGxpc3Q6IG51bGwsXG4gICAgICAgICAgICAgICAgdG91Y2hPYmplY3Q6IHt9LFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybXNFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB1bnNsaWNrZWQ6IGZhbHNlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAkLmV4dGVuZChfLCBfLmluaXRpYWxzKTtcblxuICAgICAgICAgICAgXy5hY3RpdmVCcmVha3BvaW50ID0gbnVsbDtcbiAgICAgICAgICAgIF8uYW5pbVR5cGUgPSBudWxsO1xuICAgICAgICAgICAgXy5hbmltUHJvcCA9IG51bGw7XG4gICAgICAgICAgICBfLmJyZWFrcG9pbnRzID0gW107XG4gICAgICAgICAgICBfLmJyZWFrcG9pbnRTZXR0aW5ncyA9IFtdO1xuICAgICAgICAgICAgXy5jc3NUcmFuc2l0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgXy5mb2N1c3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgXy5pbnRlcnJ1cHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgXy5oaWRkZW4gPSAnaGlkZGVuJztcbiAgICAgICAgICAgIF8ucGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIF8ucG9zaXRpb25Qcm9wID0gbnVsbDtcbiAgICAgICAgICAgIF8ucmVzcG9uZFRvID0gbnVsbDtcbiAgICAgICAgICAgIF8ucm93Q291bnQgPSAxO1xuICAgICAgICAgICAgXy5zaG91bGRDbGljayA9IHRydWU7XG4gICAgICAgICAgICBfLiRzbGlkZXIgPSAkKGVsZW1lbnQpO1xuICAgICAgICAgICAgXy4kc2xpZGVzQ2FjaGUgPSBudWxsO1xuICAgICAgICAgICAgXy50cmFuc2Zvcm1UeXBlID0gbnVsbDtcbiAgICAgICAgICAgIF8udHJhbnNpdGlvblR5cGUgPSBudWxsO1xuICAgICAgICAgICAgXy52aXNpYmlsaXR5Q2hhbmdlID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgICAgICAgICAgXy53aW5kb3dXaWR0aCA9IDA7XG4gICAgICAgICAgICBfLndpbmRvd1RpbWVyID0gbnVsbDtcblxuICAgICAgICAgICAgZGF0YVNldHRpbmdzID0gJChlbGVtZW50KS5kYXRhKCdzbGljaycpIHx8IHt9O1xuXG4gICAgICAgICAgICBfLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgXy5kZWZhdWx0cywgc2V0dGluZ3MsIGRhdGFTZXR0aW5ncyk7XG5cbiAgICAgICAgICAgIF8uY3VycmVudFNsaWRlID0gXy5vcHRpb25zLmluaXRpYWxTbGlkZTtcblxuICAgICAgICAgICAgXy5vcmlnaW5hbFNldHRpbmdzID0gXy5vcHRpb25zO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50Lm1vekhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBfLmhpZGRlbiA9ICdtb3pIaWRkZW4nO1xuICAgICAgICAgICAgICAgIF8udmlzaWJpbGl0eUNoYW5nZSA9ICdtb3p2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICAgICAgICAgI
2H0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LndlYmtpdEhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBfLmhpZGRlbiA9ICd3ZWJraXRIaWRkZW4nO1xuICAgICAgICAgICAgICAgIF8udmlzaWJpbGl0eUNoYW5nZSA9ICd3ZWJraXR2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgXy5hdXRvUGxheSA9ICQucHJveHkoXy5hdXRvUGxheSwgXyk7XG4gICAgICAgICAgICBfLmF1dG9QbGF5Q2xlYXIgPSAkLnByb3h5KF8uYXV0b1BsYXlDbGVhciwgXyk7XG4gICAgICAgICAgICBfLmF1dG9QbGF5SXRlcmF0b3IgPSAkLnByb3h5KF8uYXV0b1BsYXlJdGVyYXRvciwgXyk7XG4gICAgICAgICAgICBfLmNoYW5nZVNsaWRlID0gJC5wcm94eShfLmNoYW5nZVNsaWRlLCBfKTtcbiAgICAgICAgICAgIF8uY2xpY2tIYW5kbGVyID0gJC5wcm94eShfLmNsaWNrSGFuZGxlciwgXyk7XG4gICAgICAgICAgICBfLnNlbGVjdEhhbmRsZXIgPSAkLnByb3h5KF8uc2VsZWN0SGFuZGxlciwgXyk7XG4gICAgICAgICAgICBfLnNldFBvc2l0aW9uID0gJC5wcm94eShfLnNldFBvc2l0aW9uLCBfKTtcbiAgICAgICAgICAgIF8uc3dpcGVIYW5kbGVyID0gJC5wcm94eShfLnN3aXBlSGFuZGxlciwgXyk7XG4gICAgICAgICAgICBfLmRyYWdIYW5kbGVyID0gJC5wcm94eShfLmRyYWdIYW5kbGVyLCBfKTtcbiAgICAgICAgICAgIF8ua2V5SGFuZGxlciA9ICQucHJveHkoXy5rZXlIYW5kbGVyLCBfKTtcblxuICAgICAgICAgICAgXy5pbnN0YW5jZVVpZCA9IGluc3RhbmNlVWlkKys7XG5cbiAgICAgICAgICAgIC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXG4gICAgICAgICAgICAvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAobXVzdCBzdGFydCB3aXRoIDwpXG4gICAgICAgICAgICAvLyBFeHRyYWN0ZWQgZnJvbSBqUXVlcnkgdjEuMTEgc291cmNlXG4gICAgICAgICAgICBfLmh0bWxFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qKSQvO1xuXG5cbiAgICAgICAgICAgIF8ucmVnaXN0ZXJCcmVha3BvaW50cygpO1xuICAgICAgICAgICAgXy5pbml0KHRydWUpO1xuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU2xpY2s7XG5cbiAgICB9KCkpO1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmFjdGl2YXRlQURBID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBfLiRzbGlkZVRyYWNrLmZpbmQoJy5zbGljay1hY3RpdmUnKS5hdHRyKHtcbiAgICAgICAgICAgICdhcmlhLWh
2pZGRlbic6ICdmYWxzZSdcbiAgICAgICAgfSkuZmluZCgnYSwgaW5wdXQsIGJ1dHRvbiwgc2VsZWN0JykuYXR0cih7XG4gICAgICAgICAgICAndGFiaW5kZXgnOiAnMCdcbiAgICAgICAgfSk7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmFkZFNsaWRlID0gU2xpY2sucHJvdG90eXBlLnNsaWNrQWRkID0gZnVuY3Rpb24obWFya3VwLCBpbmRleCwgYWRkQmVmb3JlKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmICh0eXBlb2YoaW5kZXgpID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGFkZEJlZm9yZSA9IGluZGV4O1xuICAgICAgICAgICAgaW5kZXggPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGluZGV4IDwgMCB8fCAoaW5kZXggPj0gXy5zbGlkZUNvdW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgXy51bmxvYWQoKTtcblxuICAgICAgICBpZiAodHlwZW9mKGluZGV4KSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBfLiRzbGlkZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgJChtYXJrdXApLmFwcGVuZFRvKF8uJHNsaWRlVHJhY2spO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhZGRCZWZvcmUpIHtcbiAgICAgICAgICAgICAgICAkKG1hcmt1cCkuaW5zZXJ0QmVmb3JlKF8uJHNsaWRlcy5lcShpbmRleCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKG1hcmt1cCkuaW5zZXJ0QWZ0ZXIoXy4kc2xpZGVzLmVxKGluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYWRkQmVmb3JlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgJChtYXJrdXApLnByZXBlbmRUbyhfLiRzbGlkZVRyYWNrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJChtYXJrdXApLmFwcGVuZFRvKF8uJHNsaWRlVHJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgXy4kc2xpZGVzID0gXy4kc2xpZGVUcmFjay5jaGlsZHJlbih0aGlzLm9wdGlvbnMuc2xpZGUpO1xuXG4gICAgICAgIF8uJHNsaWRlVHJhY2suY2hpbGRyZW4odGhpcy5vcHRpb25zLnNsaWRlKS5kZXRhY2goKTtcblxuICAgICAgICBfLiRzbGlkZVRyYWNrLmFwcGVuZChfLiRzbGlkZXMpO1xuXG4gICAgICAgIF8uJHNsaWRlcy5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgICAgICAkKGVsZW1lbnQpLmF0dHIoJ2RhdGEtc2xpY2staW5kZXgnLCBpbmRleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF8uJHNsaWRlc0NhY2hlID0gXy4kc2xpZGVzO1xuXG4gICAgICAgIF8ucmVpbml0KCk7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmFuaW1hdGVIZWlnaHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuICAgICAgICBpZiAoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyA9PT0gMSAmJiBfLm9wdGlvbnMuYWRhcHRpdmVIZWlnaHQgPT09IHRydWUgJiYgXy5vcHRpb25zLnZlcnRpY2FsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdmFyIHRhcmdldEhlaWdodCA9IF8uJHNsaWRlcy5lcShfLmN1cnJlbnRTbGlkZSkub3V0ZXJIZWlnaHQodHJ1ZSk7XG4gICAgICAgICAgICBfLiRsaXN0LmFuaW1hdGUoe1xuICAgICAgICAgICAgICAgIGhlaWdodDogdGFyZ2V0SGVpZ2h0XG4gICAgICAgICAgICB9LCBfLm9wdGlvbnMuc3BlZWQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5hbmltYXRlU2xpZGUgPSBmdW5jdGlvbih0YXJnZXRMZWZ0LCBjYWxsYmFjaykge1xuXG4gICAgICAgIHZhciBhbmltUHJvcHMgP
2SB7fSxcbiAgICAgICAgICAgIF8gPSB0aGlzO1xuXG4gICAgICAgIF8uYW5pbWF0ZUhlaWdodCgpO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMucnRsID09PSB0cnVlICYmIF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRhcmdldExlZnQgPSAtdGFyZ2V0TGVmdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy50cmFuc2Zvcm1zRW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmIChfLm9wdGlvbnMudmVydGljYWwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5hbmltYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogdGFyZ2V0TGVmdFxuICAgICAgICAgICAgICAgIH0sIF8ub3B0aW9ucy5zcGVlZCwgXy5vcHRpb25zLmVhc2luZywgY2FsbGJhY2spO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmFuaW1hdGUoe1xuICAgICAgICAgICAgICAgICAgICB0b3A6IHRhcmdldExlZnRcbiAgICAgICAgICAgICAgICB9LCBfLm9wdGlvbnMuc3BlZWQsIF8ub3B0aW9ucy5lYXNpbmcsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBpZiAoXy5jc3NUcmFuc2l0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoXy5vcHRpb25zLnJ0bCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfLmN1cnJlbnRMZWZ0ID0gLShfLmN1cnJlbnRMZWZ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJCh7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1TdGFydDogXy5jdXJyZW50TGVmdFxuICAgICAgICAgICAgICAgIH0pLmFuaW1hdGUoe1xuICAgICAgICAgICAgICAgICAgICBhbmltU3RhcnQ6IHRhcmdldExlZnRcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBfLm9wdGlvbnMuc3BlZWQsXG4gICAgICAgICAgICAgICAgICAgIGVhc2luZzogXy5vcHRpb25zLmVhc2luZyxcbiAgICAgICAgICAgICAgICAgICAgc3RlcDogZnVuY3Rpb24obm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub3cgPSBNYXRoLmNlaWwobm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLm9wdGlvbnMudmVydGljYWwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbVByb3BzW18uYW5pbVR5cGVdID0gJ3RyYW5zbGF0ZSgnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm93ICsgJ3B4LCAwcHgpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmNzcyhhbmltUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltUHJvcHNbXy5hbmltVHlwZV0gPSAndHJhbnNsYXRlKDBweCwnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm93ICsgJ3B4KSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5jc3MoYW5pbVByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBfLmFwcGx5VHJhbnNpdGlvbigpO1xuICAgICAgICAgICAgICAgIHRhcmdldExlZnQgPSBNYXRoLmNlaWwodGFyZ2V0TGVmdCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBhbmltUHJvcHNbXy5hbmltVHlwZV0gPSAndHJhbnNsYXRlM2QoJyArIHRhcmdldExlZnQgKyAncHgsIDBweCwgMHB4KSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYW5pbVByb3BzW18uYW5pbVR5cGVdID0gJ3RyYW5zbGF0ZTNkKDBweCwnICsgdGFyZ2V0TGVmdCArICdweCwgMHB4KSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKGFuaW1Qcm9wcyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgXy5kaXNhYmxlVHJhbnNpdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIF8ub3B0aW9ucy5zcGVlZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5nZXROYXZUYXJnZXQgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXMsXG4gICAgICAgICAgICBhc05hdkZvciA9IF8ub3B0aW9ucy5hc05hdkZvcjtcblxuICAgICAgICBpZiAoIGFzTmF2Rm9yICYmIGFzTmF2Rm9yICE9PSBudWxsICkge1xuICAgICAgICAgICAgYXNOYXZGb3IgPSAkKGFzTmF2Rm9yKS5ub3QoXy4kc2xpZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc05hdkZvcjtcblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuYXNOYXZGb3IgPSBmdW5jdGlvbihpbmRleCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgIGFzTmF2Rm9yID0gXy5nZXROYXZUYXJnZXQoKTtcblxuICAgICAgICBpZiAoIGFzTmF2Rm9yICE9PSBudWxsICYmIHR5cGVvZiBhc05hdkZvciA9PT0gJ29iamVjdCcgKSB7XG4gICAgICAgICAgICBhc05hdkZvci5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSAkKHRoaXMpLnNsaWNrKCdnZXRTbGljaycpO1xuICAgICAgICAgICAgICAgIGlmKCF0YXJnZXQudW5zbGlja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5zbGlkZUhhbmRsZXIoaW5kZXgsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmFwcGx5VHJhbnNpdGlvbiA9IGZ1bmN0aW9uKHNsaWRlKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgdHJhbnNpdGlvbiA9IHt9O1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZmFkZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRyYW5zaXRpb25bXy50cmFuc2l0aW9uVHlwZV0gPSBfLnRyYW5zZm9ybVR5cGUgKyAnICcgKyBfLm9wdGlvbnMuc3BlZWQgKyAnbXMgJyArIF8ub3B0aW9ucy5jc3NFYXNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJhbnNpdGlvbltfLnRyYW5zaXRpb25UeXBlXSA9ICdvcGFjaXR5ICcgKyBfLm9wdGlvbnMuc3BlZWQgKyAnbXMgJyArIF8ub3B0aW9ucy5jc3NFYXNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5mYWRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5jc3ModHJhbnNpdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfLiRzbGlkZXMuZXEoc2xpZGUpLmNzcyh0cmFuc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5hdXRvUGxheSA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBfLmF1dG9QbGF5Q2xlYXIoKTtcblxuICAgICAgICBpZiAoIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKSB7XG4gICAgICAgICAgICBfLmF1dG9QbGF5VGltZXIgPSBzZXRJbnRlcnZhbCggXy5hdXRvUGxheUl0ZXJhdG9yLCBfLm9wdGlvbnMuYXV0b3BsYXlTcGVlZCApO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmF1dG9QbGF5Q2xlYXIgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKF8uYXV0b1BsYXlUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChfLmF1dG9QbGF5VGltZXIpO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmF1dG9QbGF5SXRlcmF0b3IgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXMsXG4gICAgICAgICAgICBzbGlkZVRvID0gXy5jdXJyZW50U2xpZGUgKyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGw7XG5cbiAgICAgICAgaWYgKCAhXy5wYXVzZWQgJiYgIV8uaW50ZXJydXB0ZWQgJiYgIV8uZm9jdXNzZWQgKSB7XG5cbiAgICAgICAgICAgIGlmICggXy5vcHRpb25zLmluZmluaXRlID09PSBmYWxzZSApIHtcblxuICAgICAgICAgICAgICAgIGlmICggXy5kaXJlY3Rpb24gPT09IDEgJiYgKCBfLmN1cnJlbnRTbGlkZSArIDEgKSA9PT0gKCBfLnNsaWRlQ291bnQgLSAxICkpIHtcbiAgICAgICAgICAgICAgICAgICAgXy5kaXJlY3Rpb24gPSAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBfLmRpcmVjdGlvbiA9PT0gMCApIHtcblxuICAgICAgICAgICAgICAgICAgICBzbGlkZVRvID0gXy5jdXJyZW50U2xpZGUgLSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGw7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCBfLmN1cnJlbnRTbGlkZSAtIDEgPT09IDAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfLmRpcmVjdGlvbiA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfLnNsaWRlSGFuZGxlciggc2xpZGVUbyApO1xuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuYnVpbGRBcnJvd3MgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5hcnJvd3MgPT09IHRydWUgKSB7XG5cbiAgICAgICAgICAgIF8uJHByZXZBcnJvdyA9ICQoXy5vcHRpb25zLnByZXZBcnJvdykuYWRkQ2xhc3MoJ3NsaWNrLWFycm93Jyk7XG4gICAgICAgICAgICBfLiRuZXh0QXJyb3cgPSAkKF8ub3B0aW9ucy5uZXh0QXJyb3cpLmFkZENsYXNzKCdzbGljay1hcnJvdycpO1xuXG4gICAgICAgICAgICBpZiggXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyApIHtcblxuICAgICAgICAgICAgICAgIF8uJHByZXZBcnJvdy5yZW1vdmVDbGFzcygnc2xpY2staGlkZGVuJykucmVtb3ZlQXR0cignYXJpYS1oaWRkZW4gdGFiaW5kZXgnKTtcbiAgICAgICAgICAgICAgICBfLiRuZXh0QXJyb3cucmVtb3ZlQ2xhc3MoJ3NsaWNrLWhpZGRlbicpLnJlbW92ZUF0dHIoJ2FyaWEtaGlkZGVuIHRhYmluZGV4Jyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoXy5odG1sRXhwci50ZXN0KF8ub3B0aW9ucy5wcmV2QXJyb3cpKSB7XG4gICAgICAgICAgICAgICAgICAgIF8uJHByZXZBcnJvdy5wcmVwZW5kVG8oXy5vcHRpb25zLmFwcGVuZEFycm93cyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKF8uaHRtbEV4cHIudGVzdChfLm9wdGlvbnMubmV4dEFycm93KSkge1xuICAgICAgICAgICAgICAgICAgICBfLiRuZXh0QXJyb3cuYXBwZW5kVG8oXy5vcHRpb25zLmFwcGVuZEFycm93cyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBfLiRwcmV2QXJyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stZGlzYWJsZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIF8uJHByZXZBcnJvdy5hZGQoIF8uJG5leHRBcnJvdyApXG5cbiAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdzbGljay1oaWRkZW4nKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cih7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYXJpYS1kaXNhYmxlZCc6ICd0cnVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0YWJpbmRleCc6ICctMSdcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmJ1aWxkRG90cyA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgIGksIGRvdDtcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmRvdHMgPT09IHRydWUgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuXG4gICAgICAgICAgICBfLiRzbGlkZXIuYWRkQ2xhc3MoJ3NsaWNrLWRvdHRlZCcpO1xuXG4gICAgICAgICAgICBkb3QgPSAkKCc8dWwgLz4nKS5hZGRDbGFzcyhfLm9wdGlvbnMuZG90c0NsYXNzKTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBfLmdldERvdENvdW50KCk7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIGRvdC5hcHBlbmQoJCgnPGxpIC8+JykuYXBwZW5kKF8ub3B0aW9ucy5jdXN0b21QYWdpbmcuY2FsbCh0aGlzLCBfLCBpKSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfLiRkb3RzID0gZG90LmFwcGVuZFRvKF8ub3B0aW9ucy5hcHBlbmREb3RzKTtcblxuICAgICAgICAgICAgXy4kZG90cy5maW5kKCdsaScpLmZpcnN0KCkuYWRkQ2xhc3MoJ3NsaWNrLWFjdGl2ZScpO1xuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuYnVpbGRPdXQgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXM7XG5cbiAgICAgICAgXy4kc2xpZGVzID1cbiAgICAgICAgICAgIF8uJHNsaWRlclxuICAgICAgICAgICAgICAgIC5jaGlsZHJlbiggXy5vcHRpb25zLnNsaWRlICsgJzpub3QoLnNsaWNrLWNsb25lZCknKVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stc2xpZGUnKTtcblxuICAgICAgICBfLnNsaWRlQ291bnQgPSBfLiRzbGlkZXMubGVuZ3RoO1xuXG4gICAgICAgIF8uJHNsaWRlcy5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgICAgICAkKGVsZW1lbnQpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ2RhdGEtc2xpY2staW5kZXgnLCBpbmRleClcbiAgICAgICAgICAgICAgICAuZGF0YSgnb3JpZ2luYWxTdHlsaW5nJywgJChlbGVtZW50KS5hdHRyKCdzdHlsZScpIHx8ICcnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgXy4kc2xpZGVyLmFkZENsYXNzKCdzbGljay1zbGlkZXInKTtcblxuICAgICAgICBfLiRzbGlkZVRyYWNrID0gKF8uc2xpZGVDb3VudCA9PT0gMCkgP1xuICAgICAgICAgICAgJCgnPGRpdiBjbGFzcz1cInNsaWNrLXRyYWNrXCIvPicpLmFwcGVuZFRvKF8uJHNsaWRlcikgOlxuICAgICAgICAgICAgXy4kc2xpZGVzLndyYXBBbGwoJzxkaXYgY2xhc3M9XCJzbGljay10cmFja1wiLz4nKS5wYXJlbnQoKTtcblxuICAgICAgICBfLiRsaXN0ID0gXy4kc2xpZGVUcmFjay53cmFwKFxuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzbGljay1saXN0XCIvPicpLnBhcmVudCgpO1xuICAgICAgICBfLiRzbGlkZVRyYWNrLmNzcygnb3BhY2l0eScsIDApO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gdHJ1ZSB8fCBfLm9wdGlvbnMuc3dpcGVUb1NsaWRlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgJCgnaW1nW2RhdGEtbGF6eV0nLCBfLiRzbGlkZXIpLm5vdCgnW3NyY10nKS5hZGRDbGFzcygnc2xpY2stbG9hZGluZycpO1xuXG4gICAgICAgIF8uc2V0dXBJbmZpbml0ZSgpO1xuXG4gICAgICAgIF8uYnVpbGRBcnJvd3MoKTtcblxuICAgICAgICBfLmJ1aWxkRG90cygpO1xuXG4gICAgICAgIF8udXBkYXRlRG90cygpO1xuXG5cbiAgICAgICAgXy5zZXRTbGlkZUNsYXNzZXModHlwZW9mIF8uY3VycmVudFNsaWRlID09PSAnbnVtYmVyJyA/IF8uY3VycmVudFNsaWRlIDogMCk7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5kcmFnZ2FibGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIF8uJGxpc3QuYWRkQ2xhc3MoJ2RyYWdnYWJsZScpO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmJ1aWxkUm93cyA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcywgYSwgYiwgYywgbmV3U2xpZGVzLCBudW1PZlNsaWRlcywgb3JpZ2luYWxTbGlkZXMsc2xpZGVzUGVyU2VjdGlvbjtcblxuICAgICAgICBuZXdTbGlkZXMgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgIG9yaWdpbmFsU2xpZGVzID0gXy4kc2xpZGVyLmNoaWxkcmVuKCk7XG5cbiAgICAgICAgaWYoXy5vcHRpb25zLnJvd3MgPiAwKSB7XG5cbiAgICAgICAgICAgIHNsaWRlc1BlclNlY3Rpb24gPSBfLm9wdGlvbnMuc2xpZGVzUGVyUm93ICogXy5vcHRpb25zLnJvd3M7XG4gICAgICAgICAgICBudW1PZlNsaWRlcyA9IE1hdGguY2VpbChcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFNsaWRlcy5sZW5ndGggLyBzbGlkZXNQZXJTZWN0aW9uXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBmb3IoYSA9IDA7IGEgPCBudW1PZlNsaWRlczsgYSsrKXtcbiAgICAgICAgICAgICAgICB2Y
2XIgc2xpZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBmb3IoYiA9IDA7IGIgPCBfLm9wdGlvbnMucm93czsgYisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGMgPSAwOyBjIDwgXy5vcHRpb25zLnNsaWRlc1BlclJvdzsgYysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gKGEgKiBzbGlkZXNQZXJTZWN0aW9uICsgKChiICogXy5vcHRpb25zLnNsaWRlc1BlclJvdykgKyBjKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxTbGlkZXMuZ2V0KHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cuYXBwZW5kQ2hpbGQob3JpZ2luYWxTbGlkZXMuZ2V0KHRhcmdldCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlLmFwcGVuZENoaWxkKHJvdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld1NsaWRlcy5hcHBlbmRDaGlsZChzbGlkZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF8uJHNsaWRlci5lbXB0eSgpLmFwcGVuZChuZXdTbGlkZXMpO1xuICAgICAgICAgICAgXy4kc2xpZGVyLmNoaWxkcmVuKCkuY2hpbGRyZW4oKS5jaGlsZHJlbigpXG4gICAgICAgICAgICAgICAgLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICd3aWR0aCc6KDEwMCAvIF8ub3B0aW9ucy5zbGlkZXNQZXJSb3cpICsgJyUnLFxuICAgICAgICAgICAgICAgICAgICAnZGlzcGxheSc6ICdpbmxpbmUtYmxvY2snXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5jaGVja1Jlc3BvbnNpdmUgPSBmdW5jdGlvbihpbml0aWFsLCBmb3JjZVVwZGF0ZSkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgIGJyZWFrcG9pbnQsIHRhcmdldEJyZWFrcG9pbnQsIHJlc3BvbmRUb1dpZHRoLCB0cmlnZ2VyQnJlYWtwb2ludCA9IGZhbHNlO1xuICAgICAgICB2Y
2XIgc2xpZGVyV2lkdGggPSBfLiRzbGlkZXIud2lkdGgoKTtcbiAgICAgICAgdmFyIHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgJCh3aW5kb3cpLndpZHRoKCk7XG5cbiAgICAgICAgaWYgKF8ucmVzcG9uZFRvID09PSAnd2luZG93Jykge1xuICAgICAgICAgICAgcmVzcG9uZFRvV2lkdGggPSB3aW5kb3dXaWR0aDtcbiAgICAgICAgfSBlbHNlIGlmIChfLnJlc3BvbmRUbyA9PT0gJ3NsaWRlcicpIHtcbiAgICAgICAgICAgIHJlc3BvbmRUb1dpZHRoID0gc2xpZGVyV2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoXy5yZXNwb25kVG8gPT09ICdtaW4nKSB7XG4gICAgICAgICAgICByZXNwb25kVG9XaWR0aCA9IE1hdGgubWluKHdpbmRvd1dpZHRoLCBzbGlkZXJXaWR0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIF8ub3B0aW9ucy5yZXNwb25zaXZlICYmXG4gICAgICAgICAgICBfLm9wdGlvbnMucmVzcG9uc2l2ZS5sZW5ndGggJiZcbiAgICAgICAgICAgIF8ub3B0aW9ucy5yZXNwb25zaXZlICE9PSBudWxsKSB7XG5cbiAgICAgICAgICAgIHRhcmdldEJyZWFrcG9pbnQgPSBudWxsO1xuXG4gICAgICAgICAgICBmb3IgKGJyZWFrcG9pbnQgaW4gXy5icmVha3BvaW50cykge1xuICAgICAgICAgICAgICAgIGlmIChfLmJyZWFrcG9pbnRzLmhhc093blByb3BlcnR5KGJyZWFrcG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfLm9yaWdpbmFsU2V0dGluZ3MubW9iaWxlRmlyc3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uZFRvV2lkdGggPCBfLmJyZWFrcG9pbnRzW2JyZWFrcG9pbnRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnJlYWtwb2ludCA9IF8uYnJlYWtwb2ludHNbYnJlYWtwb2ludF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uZFRvV2lkdGggPiBfLmJyZWFrcG9pbnRzW2JyZWFrcG9pbnRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnJlYWtwb2ludCA9IF8uYnJlYWtwb2ludHNbYnJlYWtwb2ludF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXRCcmVha3BvaW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKF8uYWN0aXZlQnJlYWtwb2ludCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0QnJlYWtwb2ludCAhPT0gXy5hY3RpdmVCcmVha3BvaW50IHx8IGZvcmNlVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfLmFjdGl2ZUJyZWFrcG9pbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEJyZWFrcG9pbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy5icmVha3BvaW50U2V0dGluZ3NbdGFyZ2V0QnJlYWtwb2ludF0gPT09ICd1bnNsaWNrJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8udW5zbGljayh0YXJnZXRCcmVha3BvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5vcHRpb25zID0gJC5leHRlbmQoe30sIF8ub3JpZ2luYWxTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5icmVha3BvaW50U2V0dGluZ3NbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCcmVha3BvaW50XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRpYWwgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5jdXJyZW50U2xpZGUgPSBfLm9wdGlvbnMuaW5pdGlhbFNsaWRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLnJlZnJlc2goaW5pdGlhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyQnJlYWtwb2ludCA9IHRhcmdldEJyZWFrcG9pbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfLmFjdGl2ZUJyZWFrcG9pbnQgPSB0YXJnZXRCcmVha3BvaW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoXy5icmVha3BvaW50U2V0dGluZ3NbdGFyZ2V0QnJlYWtwb2ludF0gPT09ICd1bnNsaWNrJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgXy51bnNsaWNrKHRhcmdldEJyZWFrcG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgXy5vcHRpb25zID0gJC5leHRlbmQoe30sIF8ub3JpZ2luYWxTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmJyZWFrcG9pbnRTZXR0aW5nc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnJlYWtwb2ludF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRpYWwgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmN1cnJlbnRTbGlkZSA9IF8ub3B0aW9ucy5pbml0aWFsU2xpZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfLnJlZnJlc2goaW5pdGlhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckJyZWFrcG9pbnQgPSB0YXJnZXRCcmVha3BvaW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKF8uYWN0aXZlQnJlYWtwb2ludCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBfLmFjdGl2ZUJyZWFrcG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBfLm9wdGlvbnMgPSBfLm9yaWdpbmFsU2V0dGluZ3M7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbml0aWFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfLmN1cnJlbnRTbGlkZSA9IF8ub3B0aW9ucy5pbml0aWFsU2xpZGU7XG4gICAgICAgICAgICAgICAgICAgI
2H1cbiAgICAgICAgICAgICAgICAgICAgXy5yZWZyZXNoKGluaXRpYWwpO1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyQnJlYWtwb2ludCA9IHRhcmdldEJyZWFrcG9pbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBvbmx5IHRyaWdnZXIgYnJlYWtwb2ludHMgZHVyaW5nIGFuIGFjdHVhbCBicmVhay4gbm90IG9uIGluaXRpYWxpemUuXG4gICAgICAgICAgICBpZiggIWluaXRpYWwgJiYgdHJpZ2dlckJyZWFrcG9pbnQgIT09IGZhbHNlICkge1xuICAgICAgICAgICAgICAgIF8uJHNsaWRlci50cmlnZ2VyKCdicmVha3BvaW50JywgW18sIHRyaWdnZXJCcmVha3BvaW50XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuY2hhbmdlU2xpZGUgPSBmdW5jdGlvbihldmVudCwgZG9udEFuaW1hdGUpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXMsXG4gICAgICAgICAgICAkdGFyZ2V0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KSxcbiAgICAgICAgICAgIGluZGV4T2Zmc2V0LCBzbGlkZU9mZnNldCwgdW5ldmVuT2Zmc2V0O1xuXG4gICAgICAgIC8vIElmIHRhcmdldCBpcyBhIGxpbmssIHByZXZlbnQgZGVmYXVsdCBhY3Rpb24uXG4gICAgICAgIGlmKCR0YXJnZXQuaXMoJ2EnKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRhcmdldCBpcyBub3QgdGhlIDxsaT4gZWxlbWVudCAoaWU6IGEgY2hpbGQpLCBmaW5kIHRoZSA8bGk+LlxuICAgICAgICBpZighJHRhcmdldC5pcygnbGknKSkge1xuICAgICAgICAgICAgJHRhcmdldCA9ICR0YXJnZXQuY2xvc2VzdCgnbGknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVuZXZlbk9mZnNldCA9IChfLnNsaWRlQ291bnQgJSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgIT09IDApO1xuICAgICAgICBpbmRleE9mZnNldCA9IHVuZXZlbk9mZnNldCA/IDAgOiAoXy5zbGlkZUNvdW50IC0gXy5jdXJyZW50U2xpZGUpICUgXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsO1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQuZGF0YS5tZXNzYWdlKSB7XG5cbiAgICAgICAgICAgIGNhc2UgJ3ByZXZpb3VzJzpcbiAgICAgICAgICAgICAgICBzbGlkZU9mZnNldCA9IGluZGV4T2Zmc2V0ID09PSAwID8gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsIDogXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAtIGluZGV4T2Zmc2V0O1xuICAgICAgICAgICAgICAgIGlmIChfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XG4gICAgICAgICAgICAgICAgICAgIF8uc2xpZGVIYW5kbGVyKF8uY3VycmVudFNsaWRlIC0gc2xpZGVPZmZzZXQsIGZhbHNlLCBkb250QW5pbWF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICduZXh0JzpcbiAgICAgICAgICAgICAgICBzbGlkZU9mZnNldCA9IGluZGV4T2Zmc2V0ID09PSAwID8gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsIDogaW5kZXhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgaWYgKF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgICAgICAgICAgICAgICAgXy5zbGlkZUhhbmRsZXIoXy5jdXJyZW50U2xpZGUgKyBzbGlkZU9mZnNldCwgZmFsc2UsIGRvbnRBbmltYXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2luZGV4JzpcbiAgICAgICAgICAgICAgICB2Y
2XIgaW5kZXggPSBldmVudC5kYXRhLmluZGV4ID09PSAwID8gMCA6XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuaW5kZXggfHwgJHRhcmdldC5pbmRleCgpICogXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsO1xuXG4gICAgICAgICAgICAgICAgXy5zbGlkZUhhbmRsZXIoXy5jaGVja05hdmlnYWJsZShpbmRleCksIGZhbHNlLCBkb250QW5pbWF0ZSk7XG4gICAgICAgICAgICAgICAgJHRhcmdldC5jaGlsZHJlbigpLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmNoZWNrTmF2aWdhYmxlID0gZnVuY3Rpb24oaW5kZXgpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXMsXG4gICAgICAgICAgICBuYXZpZ2FibGVzLCBwcmV2TmF2aWdhYmxlO1xuXG4gICAgICAgIG5hdmlnYWJsZXMgPSBfLmdldE5hdmlnYWJsZUluZGV4ZXMoKTtcbiAgICAgICAgcHJldk5hdmlnYWJsZSA9IDA7XG4gICAgICAgIGlmIChpbmRleCA+IG5hdmlnYWJsZXNbbmF2aWdhYmxlcy5sZW5ndGggLSAxXSkge1xuICAgICAgICAgICAgaW5kZXggPSBuYXZpZ2FibGVzW25hdmlnYWJsZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKHZhciBuIGluIG5hdmlnYWJsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBuYXZpZ2FibGVzW25dKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcHJldk5hdmlnYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByZXZOYXZpZ2FibGUgPSBuYXZpZ2FibGVzW25dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuY2xlYW5VcEV2ZW50cyA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmRvdHMgJiYgXy4kZG90cyAhPT0gbnVsbCkge1xuXG4gICAgICAgICAgICAkKCdsaScsIF8uJGRvdHMpXG4gICAgICAgICAgICAgICAgLm9mZignY2xpY2suc2xpY2snLCBfLmNoYW5nZVNsaWRlKVxuICAgICAgICAgICAgICAgIC5vZmYoJ21vdXNlZW50ZXIuc2xpY2snLCAkLnByb3h5KF8uaW50ZXJydXB0LCBfLCB0cnVlKSlcbiAgICAgICAgICAgICAgICAub2ZmKCdtb3VzZWxlYXZlLnNsaWNrJywgJC5wcm94eShfLmludGVycnVwdCwgXywgZmFsc2UpKTtcblxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5hY2Nlc3NpYmlsaXR5ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgXy4kZG90cy5vZmYoJ2tleWRvd24uc2xpY2snLCBfLmtleUhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgXy4kc2xpZGVyLm9mZignZm9jdXMuc2xpY2sgYmx1ci5zbGljaycpO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuYXJyb3dzID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgICAgICAgIF8uJHByZXZBcnJvdyAmJiBfLiRwcmV2QXJyb3cub2ZmKCdjbGljay5zbGljaycsIF8uY2hhbmdlU2xpZGUpO1xuICAgICAgICAgICAgXy4kbmV4dEFycm93ICYmIF8uJG5leHRBcnJvdy5vZmYoJ2NsaWNrLnNsaWNrJywgXy5jaGFuZ2VTbGlkZSk7XG5cbiAgICAgICAgICAgIGlmIChfLm9wdGlvbnMuYWNjZXNzaWJpbGl0eSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIF8uJHByZXZBcnJvdyAmJiBfLiRwcmV2QXJyb3cub2ZmKCdrZXlkb3duLnNsaWNrJywgXy5rZXlIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICBfLiRuZXh0QXJyb3cgJiYgXy4kbmV4dEFycm93Lm9mZigna2V5ZG93bi5zbGljaycsIF8ua2V5SGFuZGxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfLiRsaXN0Lm9mZigndG91Y2hzdGFydC5zbGljayBtb3VzZWRvd24uc2xpY2snLCBfLnN3aXBlSGFuZGxlcik7XG4gICAgICAgIF8uJGxpc3Qub2ZmKCd0b3VjaG1vdmUuc2xpY2sgbW91c2Vtb3ZlLnNsaWNrJywgXy5zd2lwZUhhbmRsZXIpO1xuICAgICAgICBfLiRsaXN0Lm9mZigndG91Y2hlbmQuc2xpY2sgbW91c2V1cC5zbGljaycsIF8uc3dpcGVIYW5kbGVyKTtcbiAgICAgICAgXy4kbGlzdC5vZmYoJ3RvdWNoY2FuY2VsLnNsaWNrIG1vdXNlbGVhdmUuc2xpY2snLCBfLnN3aXBlSGFuZGxlcik7XG5cbiAgICAgICAgXy4kbGlzdC5vZmYoJ2NsaWNrLnNsaWNrJywgXy5jbGlja0hhbmRsZXIpO1xuXG4gICAgICAgICQoZG9jdW1lbnQpLm9mZihfLnZpc2liaWxpdHlDaGFuZ2UsIF8udmlzaWJpbGl0eSk7XG5cbiAgICAgICAgXy5jbGVhblVwU2xpZGVFdmVudHMoKTtcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmFjY2Vzc2liaWxpdHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIF8uJGxpc3Qub2ZmKCdrZXlkb3duLnNsaWNrJywgXy5rZXlIYW5kbGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZm9jdXNPblNlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgJChfLiRzbGlkZVRyYWNrKS5jaGlsZHJlbigpLm9mZignY2xpY2suc2xpY2snLCBfLnNlbGVjdEhhbmRsZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgJCh3aW5kb3cpLm9mZignb3JpZW50YXRpb25jaGFuZ2Uuc2xpY2suc2xpY2stJyArIF8uaW5zdGFuY2VVaWQsIF8ub3JpZW50YXRpb25DaGFuZ2UpO1xuXG4gICAgICAgICQod2luZG93KS5vZmYoJ3Jlc2l6ZS5zbGljay5zbGljay0nICsgXy5pbnN0YW5jZVVpZCwgXy5yZXNpemUpO1xuXG4gICAgICAgICQoJ1tkcmFnZ2FibGUhPXRydWVdJywgXy4kc2xpZGVUcmFjaykub2ZmKCdkcmFnc3RhcnQnLCBfLnByZXZlbnREZWZhdWx0KTtcblxuICAgICAgICAkKHdpbmRvdykub2ZmKCdsb2FkLnNsaWNrLnNsaWNrLScgKyBfLmluc3RhbmNlVWlkLCBfLnNldFBvc2l0aW9uKTtcblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuY2xlYW5VcFNsaWRlRXZlbnRzID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIF8uJGxpc3Qub2ZmKCdtb3VzZWVudGVyLnNsaWNrJywgJC5wcm94eShfLmludGVycnVwdCwgXywgdHJ1ZSkpO1xuICAgICAgICBfLiRsaXN0Lm9mZignbW91c2VsZWF2ZS5zbGljaycsICQucHJveHkoXy5pbnRlcnJ1cHQsIF8sIGZhbHNlKSk7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmNsZWFuVXBSb3dzID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLCBvcmlnaW5hbFNsaWRlcztcblxuICAgICAgICBpZihfLm9wdGlvbnMucm93cyA+IDApIHtcbiAgICAgICAgICAgIG9yaWdpbmFsU2xpZGVzID0gXy4kc2xpZGVzLmNoaWxkcmVuKCkuY2hpbGRyZW4oKTtcbiAgICAgICAgICAgIG9yaWdpbmFsU2xpZGVzLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG4gICAgICAgICAgICBfLiRzbGlkZXIuZW1wdHkoKS5hcHBlbmQob3JpZ2luYWxTbGlkZXMpO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmIChfLnNob3VsZENsaWNrID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbn
2REZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKHJlZnJlc2gpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG5cbiAgICAgICAgXy5hdXRvUGxheUNsZWFyKCk7XG5cbiAgICAgICAgXy50b3VjaE9iamVjdCA9IHt9O1xuXG4gICAgICAgIF8uY2xlYW5VcEV2ZW50cygpO1xuXG4gICAgICAgICQoJy5zbGljay1jbG9uZWQnLCBfLiRzbGlkZXIpLmRldGFjaCgpO1xuXG4gICAgICAgIGlmIChfLiRkb3RzKSB7XG4gICAgICAgICAgICBfLiRkb3RzLnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCBfLiRwcmV2QXJyb3cgJiYgXy4kcHJldkFycm93Lmxlbmd0aCApIHtcblxuICAgICAgICAgICAgXy4kcHJldkFycm93XG4gICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdzbGljay1kaXNhYmxlZCBzbGljay1hcnJvdyBzbGljay1oaWRkZW4nKVxuICAgICAgICAgICAgICAgIC5yZW1vdmVBdHRyKCdhcmlhLWhpZGRlbiBhcmlhLWRpc2FibGVkIHRhYmluZGV4JylcbiAgICAgICAgICAgICAgICAuY3NzKCdkaXNwbGF5JywnJyk7XG5cbiAgICAgICAgICAgIGlmICggXy5odG1sRXhwci50ZXN0KCBfLm9wdGlvbnMucHJldkFycm93ICkpIHtcbiAgICAgICAgICAgICAgICBfLiRwcmV2QXJyb3cucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIF8uJG5leHRBcnJvdyAmJiBfLiRuZXh0QXJyb3cubGVuZ3RoICkge1xuXG4gICAgICAgICAgICBfLiRuZXh0QXJyb3dcbiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NsaWNrLWRpc2FibGVkIHNsaWNrLWFycm93IHNsaWNrLWhpZGRlbicpXG4gICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2FyaWEtaGlkZGVuIGFyaWEtZGlzYWJsZWQgdGFiaW5kZXgnKVxuICAgICAgICAgICAgICAgIC5jc3MoJ2Rpc3BsYXknLCcnKTtcblxuICAgICAgICAgICAgaWYgKCBfLmh0bWxFeHByLnRlc3QoIF8ub3B0aW9ucy5uZXh0QXJyb3cgKSkge1xuICAgICAgICAgICAgICAgIF8uJG5leHRBcnJvdy5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKF8uJHNsaWRlcykge1xuXG4gICAgICAgICAgICBfLiRzbGlkZXNcbiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NsaWNrLXNsaWRlIHNsaWNrLWFjdGl2ZSBzbGljay1jZW50ZXIgc2xpY2stdmlzaWJsZSBzbGljay1jdXJyZW50JylcbiAgICAgICAgICAgICAgICAucmVtb3ZlQXR0cignYXJpYS1oaWRkZW4nKVxuICAgICAgICAgICAgICAgIC5yZW1vdmVBdHRyKCdkYXRhLXNsaWNrLWluZGV4JylcbiAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ3N0eWxlJywgJCh0aGlzKS5kYXRhKCdvcmlnaW5hbFN0eWxpbmcnKSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY2hpbGRyZW4odGhpcy5vcHRpb25zLnNsaWRlKS5kZXRhY2goKTtcblxuICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5kZXRhY2goKTtcblxuICAgICAgICAgICAgXy4kbGlzdC5kZXRhY2goKTtcblxuICAgICAgICAgICAgXy4kc2xpZGVyLmFwcGVuZChfLiRzbGlkZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgXy5jbGVhblVwUm93cygpO1xuXG4gICAgICAgIF8uJHNsaWRlci5yZW1vdmVDbGFzcygnc2xpY2stc2xpZGVyJyk7XG4gICAgICAgIF8uJHNsaWRlci5yZW1vdmVDbGFzcygnc2xpY2staW5pdGlhbGl6ZWQnKTtcbiAgICAgICAgXy4kc2xpZGVyLnJlbW92ZUNsYXNzKCdzbGljay1kb3R0ZWQnKTtcblxuICAgICAgICBfLnVuc2xpY2tlZCA9IHRydWU7XG5cbiAgICAgICAgaWYoIXJlZnJlc2gpIHtcbiAgICAgICAgICAgIF8uJHNsaWRlci50cmlnZ2VyKCdkZXN0cm95JywgW19dKTtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5kaXNhYmxlVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKHNsaWRlKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgdHJhbnNpdGlvbiA9IHt9O1xuXG4gICAgICAgIHRyYW5zaXRpb25bXy50cmFuc2l0aW9uVHlwZV0gPSAnJztcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmZhZGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmNzcyh0cmFuc2l0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF8uJHNsaWRlcy5lcShzbGlkZSkuY3NzKHRyYW5zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmZhZGVTbGlkZSA9IGZ1bmN0aW9uKHNsaWRlSW5kZXgsIGNhbGxiYWNrKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmIChfLmNzc1RyYW5zaXRpb25zID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICBfLiRzbGlkZXMuZXEoc2xpZGVJbmRleCkuY3NzKHtcbiAgICAgICAgICAgICAgICB6SW5kZXg6IF8ub3B0aW9ucy56SW5kZXhcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBfLiRzbGlkZXMuZXEoc2xpZGVJbmRleCkuYW5pbWF0ZSh7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMVxuICAgICAgICAgICAgfSwgXy5vcHRpb25zLnNwZWVkLCBfLm9wdGlvbnMuZWFzaW5nLCBjYWxsYmFjayk7XG5cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgXy5hcHBseVRyYW5zaXRpb24oc2xpZGVJbmRleCk7XG5cbiAgICAgICAgICAgIF8uJHNsaWRlcy5lcShzbGlkZUluZGV4KS5jc3Moe1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgICAgICAgekluZGV4OiBfLm9wdGlvbnMuekluZGV4XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgICAgICBfLmRpc2FibGVUcmFuc2l0aW9uKHNsaWRlSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoKTtcbiAgICAgICAgICAgICAgICB9LCBfLm9wdGlvbnMuc3BlZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgI
2H1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuZmFkZVNsaWRlT3V0ID0gZnVuY3Rpb24oc2xpZGVJbmRleCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBpZiAoXy5jc3NUcmFuc2l0aW9ucyA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgXy4kc2xpZGVzLmVxKHNsaWRlSW5kZXgpLmFuaW1hdGUoe1xuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgICAgICAgekluZGV4OiBfLm9wdGlvbnMuekluZGV4IC0gMlxuICAgICAgICAgICAgfSwgXy5vcHRpb25zLnNwZWVkLCBfLm9wdGlvbnMuZWFzaW5nKTtcblxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBfLmFwcGx5VHJhbnNpdGlvbihzbGlkZUluZGV4KTtcblxuICAgICAgICAgICAgXy4kc2xpZGVzLmVxKHNsaWRlSW5kZXgpLmNzcyh7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICAgICAgICB6SW5kZXg6IF8ub3B0aW9ucy56SW5kZXggLSAyXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmZpbHRlclNsaWRlcyA9IFNsaWNrLnByb3RvdHlwZS5zbGlja0ZpbHRlciA9IGZ1bmN0aW9uKGZpbHRlcikge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBpZiAoZmlsdGVyICE9PSBudWxsKSB7XG5cbiAgICAgICAgICAgIF8uJHNsaWRlc0NhY2hlID0gXy4kc2xpZGVzO1xuXG4gICAgICAgICAgICBfLnVubG9hZCgpO1xuXG4gICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKHRoaXMub3B0aW9ucy5zbGlkZSkuZGV0YWNoKCk7XG5cbiAgICAgICAgICAgIF8uJHNsaWRlc0NhY2hlLmZpbHRlcihmaWx0ZXIpLmFwcGVuZFRvKF8uJHNsaWRlVHJhY2spO1xuXG4gICAgICAgICAgICBfLnJlaW5pdCgpO1xuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuZm9jdXNIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIF8uJHNsaWRlclxuICAgICAgICAgICAgLm9mZignZm9jdXMuc2xpY2sgYmx1ci5zbGljaycpXG4gICAgICAgICAgICAub24oJ2ZvY3VzLnNsaWNrIGJsdXIuc2xpY2snLCAnKicsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdmFyICRzZiA9ICQodGhpcyk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICBpZiggXy5vcHRpb25zLnBhdXNlT25Gb2N1cyApIHtcbiAgICAgICAgICAgICAgICAgICAgXy5mb2N1c3NlZCA9ICRzZi5pcygnOmZvY3VzJyk7XG4gICAgICAgICAgICAgICAgICAgIF8uYXV0b1BsYXkoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sIDApO1xuXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuZ2V0Q3VycmVudCA9IFNsaWNrLnByb3RvdHlwZS5zbGlja0N1cnJlbnRTbGlkZSA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcbiAgICAgICAgcmV0dXJuIF8uY3VycmVudFNsaWRlO1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5nZXREb3RDb3VudCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICB2Y
2XIgYnJlYWtQb2ludCA9IDA7XG4gICAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgICAgdmFyIHBhZ2VyUXR5ID0gMDtcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoXy5zbGlkZUNvdW50IDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgICAgICAgICAgICAgKytwYWdlclF0eTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGJyZWFrUG9pbnQgPCBfLnNsaWRlQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgKytwYWdlclF0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGNvdW50ZXIgKyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGw7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIgKz0gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsIDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgPyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgOiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcGFnZXJRdHkgPSBfLnNsaWRlQ291bnQ7XG4gICAgICAgIH0gZWxzZSBpZighXy5vcHRpb25zLmFzTmF2Rm9yKSB7XG4gICAgICAgICAgICBwYWdlclF0eSA9IDEgKyBNYXRoLmNlaWwoKF8uc2xpZGVDb3VudCAtIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIC8gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsKTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgd2hpbGUgKGJyZWFrUG9pbnQgPCBfLnNsaWRlQ291bnQpIHtcbiAgICAgICAgICAgICAgICArK3BhZ2VyUXR5O1xuICAgICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBjb3VudGVyICsgXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsO1xuICAgICAgICAgICAgICAgIGNvdW50ZXIgKz0gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsIDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgPyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgOiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhZ2VyUXR5IC0gMTtcblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuZ2V0TGVmdCA9IGZ1bmN0aW9uKHNsaWRlSW5kZXgpIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXMsXG4gICAgICAgICAgICB0YXJnZXRMZWZ0LFxuICAgICAgICAgICAgdmVydGljYWxIZWlnaHQsXG4gICAgICAgICAgICB2ZXJ0aWNhbE9mZnNldCA9IDAsXG4gICAgICAgICAgICB0YXJnZXRTbGlkZSxcbiAgICAgICAgICAgIGNvZWY7XG5cbiAgICAgICAgXy5zbGlkZU9mZnNldCA9IDA7XG4gICAgICAgIHZlcnRpY2FsSGVpZ2h0ID0gXy4kc2xpZGVzLmZpcnN0KCkub3V0ZXJIZWlnaHQodHJ1ZSk7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgICAgICAgICAgICBfLnNsaWRlT2Zmc2V0ID0gKF8uc2xpZGVXaWR0aCAqIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpICogLTE7XG4gICAgICAgICAgICAgICAgY29lZiA9IC0xXG5cbiAgICAgICAgICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsID09PSB0cnVlICYmIF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfLm9wdGlvbnMuc2xpZGVzVG9TaG93ID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2VmID0gLTEuNTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfLm9wdGlvbnMuc2xpZGVzVG9TaG93ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2VmID0gLTJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbE9mZnNldCA9ICh2ZXJ0aWNhbEhlaWdodCAqIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpICogY29lZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLnNsaWRlQ291bnQgJSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgIT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoc2xpZGVJbmRleCArIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCA+IF8uc2xpZGVDb3VudCAmJiBfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzbGlkZUluZGV4ID4gXy5zbGlkZUNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfLnNsaWRlT2Zmc2V0ID0gKChfLm9wdGlvbnMuc2xpZGVzVG9TaG93IC0gKHNsaWRlSW5kZXggLSBfLnNsaWRlQ291bnQpKSAqIF8uc2xpZGVXaWR0aCkgKiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gKChfLm9wdGlvbnMuc2xpZGVzVG9TaG93IC0gKHNsaWRlSW5kZXggLSBfLnNsaWRlQ291bnQpKSAqIHZlcnRpY2FsSGVpZ2h0KSAqIC0xO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgXy5zbGlkZU9mZnNldCA9ICgoXy5zbGlkZUNvdW50ICUgXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsKSAqIF8uc2xpZGVXaWR0aCkgKiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gKChfLnNsaWRlQ291bnQgJSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwpICogdmVydGljYWxIZWlnaHQpICogLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2xpZGVJbmRleCArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgPiBfLnNsaWRlQ291bnQpIHtcbiAgICAgICAgICAgICAgICBfLnNsaWRlT2Zmc2V0ID0gKChzbGlkZUluZGV4ICsgXy5vcHRpb25zLnNsaWRlc1RvU2hvdykgLSBfLnNsaWRlQ291bnQpICogXy5zbGlkZVdpZHRoO1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gKChzbGlkZUluZGV4ICsgXy5vcHRpb25zLnNsaWRlc1RvU2hvdykgLSBfLnNsaWRlQ291bnQpICogdmVydGljYWxIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXy5zbGlkZUNvdW50IDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgICAgICAgIF8uc2xpZGVPZmZzZXQgPSAwO1xuICAgICAgICAgICAgdmVydGljYWxPZmZzZXQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA8PSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XG4gICAgICAgICAgICBfLnNsaWRlT2Zmc2V0ID0gKChfLnNsaWRlV2lkdGggKiBNYXRoLmZsb29yKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpKSAvIDIpIC0gKChfLnNsaWRlV2lkdGggKiBfLnNsaWRlQ291bnQpIC8gMik7XG4gICAgICAgIH0gZWxzZSBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUgJiYgXy5vcHRpb25zLmluZmluaXRlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBfLnNsaWRlT2Zmc2V0ICs9IF8uc2xpZGVXaWR0aCAqIE1hdGguZmxvb3IoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAvIDIpIC0gXy5zbGlkZVdpZHRoO1xuICAgICAgICB9IGVsc2UgaWYgKF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBfLnNsaWRlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIF8uc2xpZGVPZmZzZXQgKz0gXy5zbGlkZVdpZHRoICogTWF0aC5mbG9vcihfLm9wdGlvbnMuc2xpZGVzVG9TaG93IC8gMik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGFyZ2V0TGVmdCA9ICgoc2xpZGVJbmRleCAqIF8uc2xpZGVXaWR0aCkgKiAtMSkgKyBfLnNsaWRlT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0TGVmdCA9ICgoc2xpZGVJbmRleCAqIHZlcnRpY2FsSGVpZ2h0KSAqIC0xKSArIHZlcnRpY2FsT2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy52YXJpYWJsZVdpZHRoID09PSB0cnVlKSB7XG5cbiAgICAgICAgICAgIGlmIChfLnNsaWRlQ291bnQgPD0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyB8fCBfLm9wdGlvbnMuaW5maW5pdGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0U2xpZGUgPSBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKCcuc2xpY2st
2c2xpZGUnKS5lcShzbGlkZUluZGV4KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0U2xpZGUgPSBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKCcuc2xpY2stc2xpZGUnKS5lcShzbGlkZUluZGV4ICsgXy5vcHRpb25zLnNsaWRlc1RvU2hvdyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChfLm9wdGlvbnMucnRsID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldFNsaWRlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldExlZnQgPSAoXy4kc2xpZGVUcmFjay53aWR0aCgpIC0gdGFyZ2V0U2xpZGVbMF0ub2Zmc2V0TGVmdCAtIHRhcmdldFNsaWRlLndpZHRoKCkpICogLTE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TGVmdCA9ICAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0TGVmdCA9IHRhcmdldFNsaWRlWzBdID8gdGFyZ2V0U2xpZGVbMF0ub2Zmc2V0TGVmdCAqIC0xIDogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKF8uc2xpZGVDb3VudCA8PSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93IHx8IF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U2xpZGUgPSBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKCcuc2xpY2stc2xpZGUnKS5lcShzbGlkZUluZGV4KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRTbGlkZSA9IF8uJHNsaWRlVHJhY2suY2hpbGRyZW4oJy5zbGljay1zbGlkZScpLmVxKHNsaWRlSW5kZXggKyBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5ydGwgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldFNsaWRlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRMZWZ0ID0gKF8uJHNsaWRlVHJhY2sud2lkdGgoKSAtIHRhcmdldFNsaWRlWzBdLm9mZnNldExlZnQgLSB0YXJnZXRTbGlkZS53aWR0aCgpKSAqIC0xO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TGVmdCA9ICAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TGVmdCA9IHRhcmdldFNsaWRlWzBdID8gdGFyZ2V0U2xpZGVbMF0ub2Zmc2V0TGVmdCAqIC0xIDogMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0YXJnZXRMZWZ0ICs9IChfLiRsaXN0LndpZHRoKCkgLSB0YXJnZXRTbGlkZS5vdXRlcldpZHRoKCkpIC8gMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXRMZWZ0O1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5nZXRPcHRpb24gPSBTbGljay5wcm90b3R5cGUuc2xpY2tHZXRPcHRpb24gPSBmdW5jdGlvbihvcHRpb24pIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXM7XG5cbiAgICAgICAgcmV0dXJuIF8ub3B0aW9uc1tvcHRpb25dO1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5nZXROYXZpZ2FibGVJbmRleGVzID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgYnJlYWtQb2ludCA9IDAsXG4gICAgICAgICAgICBjb3VudGVyID0gMCxcbiAgICAgICAgICAgIGluZGV4ZXMgPSBbXSxcbiAgICAgICAgICAgIG1heDtcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgbWF4ID0gXy5zbGlkZUNvdW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCAqIC0xO1xuICAgICAgICAgICAgY291bnRlciA9IF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCAqIC0xO1xuICAgICAgICAgICAgbWF4ID0gXy5zbGlkZUNvdW50ICogMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChicmVha1BvaW50IDwgbWF4KSB7XG4gICAgICAgICAgICBpbmRleGVzLnB1c2goYnJlYWtQb2ludCk7XG4gICAgICAgICAgICBicmVha1BvaW50ID0gY291bnRlciArIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbDtcbiAgICAgICAgICAgIGNvdW50ZXIgKz0gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsIDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgPyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgOiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZGV4ZXM7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmdldFNsaWNrID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmdldFNsaWRlQ291bnQgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXMsXG4gICAgICAgICAgICBzbGlkZXNUcmF2ZXJzZWQsIHN3aXBlZFNsaWRlLCBjZW50ZXJPZmZzZXQ7XG5cbiAgICAgICAgY2VudGVyT2Zmc2V0ID0gXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUgPyBfLnNsaWRlV2lkdGggKiBNYXRoLmZsb29yKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgLyAyKSA6IDA7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5zd2lwZVRvU2xpZGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suZmluZCgnLnNsaWNrLXNsaWRlJykuZWFjaChmdW5jdGlvbihpbmRleCwgc2xpZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2xpZGUub2Zmc2V0TGVmdCAtIGNlbnRlck9mZnNldCArICgkKHNsaWRlKS5vdXRlcldpZHRoKCkgLyAyKSA+IChfLnN3aXBlTGVmdCAqIC0xKSkge1xuICAgICAgICAgICAgICAgICAgICBzd2lwZWRTbGlkZSA9IHNsaWRlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNsaWRlc1RyYXZlcnNlZCA9IE1hdGguYWJzKCQoc3dpcGVkU2xpZGUpLmF0dHIoJ2RhdGEtc2xpY2staW5kZXgnKSAtIF8uY3VycmVudFNsaWRlKSB8fCAxO1xuXG4gICAgICAgICAgICByZXR1cm4gc2xpZGVzVHJhdmVyc2VkO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmdvVG8gPSBTbGljay5wcm90b3R5cGUuc2xpY2tHb1RvID0gZnVuY3Rpb24oc2xpZGUsIGRvbnRBbmltYXRlKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIF8uY2hhbmdlU2xpZGUoe1xuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbmRleCcsXG4gICAgICAgICAgICAgICAgaW5kZXg6IHBhcnNlSW50KHNsaWRlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBkb250QW5pbWF0ZSk7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihjcmVhdGlvbikge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBpZiAoISQoXy4kc2xpZGVyKS5oYXNDbGFzcygnc2xpY2staW5pdGlhbGl6ZWQnKSkge1xuXG4gICAgICAgICAgICAkKF8uJHNsaWRlcikuYWRkQ2xhc3MoJ3NsaWNrLWluaXRpYWxpemVkJyk7XG5cbiAgICAgICAgICAgIF8uYnVpbGRSb3dzKCk7XG4gICAgICAgICAgICBfLmJ1aWxkT3V0KCk7XG4gICAgICAgICAgICBfLnNldFByb3BzKCk7XG4gICAgICAgICAgICBfLnN0YXJ0TG9hZCgpO1xuICAgICAgICAgICAgXy5sb2FkU2xpZGVyKCk7XG4gICAgICAgICAgICBfLmluaXRpYWxpemVFdmVudHMoKTtcbiAgICAgICAgICAgIF8udXBkYXRlQXJyb3dzKCk7XG4gICAgICAgICAgICBfLnVwZGF0ZURvdHMoKTtcbiAgICAgICAgICAgIF8uY2hlY2tSZXNwb25zaXZlKHRydWUpO1xuICAgICAgICAgICAgXy5mb2N1c0hhbmRsZXIoKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNyZWF0aW9uKSB7XG4gICAgICAgICAgICBfLiRzbGlkZXIudHJpZ2dlcignaW5pdCcsIFtfXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXy5vcHRpb25zLmFjY2Vzc2liaWxpdHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIF8uaW5pdEFEQSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCBfLm9wdGlvbnMuYXV0b3BsYXkgKSB7XG5cbiAgICAgICAgICAgIF8ucGF1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICBfLmF1dG9QbGF5KCk7XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5pbml0QURBID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgICAgICBudW1Eb3RHcm91cHMgPSBNYXRoLmNlaWwoXy5zbGlkZUNvdW50IC8gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyksXG4gICAgICAgICAgICAgICAgdGFiQ29udHJvbEluZGV4ZXMgPSBfLmdldE5hdmlnYWJsZUluZGV4ZXMoKS5maWx0ZXIoZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodmFsID49IDApICYmICh2YWwgPCBfLnNsaWRlQ291bnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIF8uJHNsaWRlcy5hZGQoXy4kc2xpZGVUcmFjay5maW5kKCcuc2xpY2stY2xvbmVkJykpLmF0dHIoe1xuICAgICAgICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnLFxuICAgICAgICAgICAgJ3RhYmluZGV4JzogJy0xJ1xuICAgICAgICB9KS5maW5kKCdhLCBpbnB1dCwgYnV0dG9uLCBzZWxlY3QnKS5hdHRyKHtcbiAgICAgICAgICAgICd0YWJpbmRleCc6ICctMSdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKF8uJGRvdHMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIF8uJHNsaWRlcy5ub3QoXy4kc2xpZGVUcmFjay5maW5kKCcuc2xpY2stY2xvbmVkJykpLmVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgICAgICAgICAgIHZhciBzbGlkZUNvbnRyb2xJbmRleCA9IHRhYkNvbnRyb2xJbmRleGVzLmluZGV4T2YoaSk7XG5cbiAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoe1xuICAgICAgICAgICAgICAgICAgICAncm9sZSc6ICd0YWJwYW5lbCcsXG4gICAgICAgICAgICAgICAgICAgICdpZCc6ICdzbGljay1zbGlkZScgKyBfLmluc3RhbmNlVWlkICsgaSxcbiAgICAgICAgICAgICAgICAgICAgJ3RhYmluZGV4JzogLTFcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChzbGlkZUNvbnRyb2xJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICB2Y
2XIgYXJpYUJ1dHRvbkNvbnRyb2wgPSAnc2xpY2stc2xpZGUtY29udHJvbCcgKyBfLmluc3RhbmNlVWlkICsgc2xpZGVDb250cm9sSW5kZXhcbiAgICAgICAgICAgICAgICAgICBpZiAoJCgnIycgKyBhcmlhQnV0dG9uQ29udHJvbCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogYXJpYUJ1dHRvbkNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgXy4kZG90cy5hdHRyKCdyb2xlJywgJ3RhYmxpc3QnKS5maW5kKCdsaScpLmVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgICAgICAgICAgIHZhciBtYXBwZWRTbGlkZUluZGV4ID0gdGFiQ29udHJvbEluZGV4ZXNbaV07XG5cbiAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoe1xuICAgICAgICAgICAgICAgICAgICAncm9sZSc6ICdwcmVzZW50YXRpb24nXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJ2J1dHRvbicpLmZpcnN0KCkuYXR0cih7XG4gICAgICAgICAgICAgICAgICAgICdyb2xlJzogJ3RhYicsXG4gICAgICAgICAgICAgICAgICAgICdpZCc6ICdzbGljay1zbGlkZS1jb250cm9sJyArIF8uaW5zdGFuY2VVaWQgKyBpLFxuICAgICAgICAgICAgICAgICAgICAnYXJpYS1jb250cm9scyc6ICdzbGljay1zbGlkZScgKyBfLmluc3RhbmNlVWlkICsgbWFwcGVkU2xpZGVJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiAoaSArIDEpICsgJyBvZiAnICsgbnVtRG90R3JvdXBzLFxuICAgICAgICAgICAgICAgICAgICAnYXJpYS1zZWxlY3RlZCc6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICd0YWJpbmRleCc6ICctMSdcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSkuZXEoXy5jdXJyZW50U2xpZGUpLmZpbmQoJ2J1dHRvbicpLmF0dHIoe1xuICAgICAgICAgICAgICAgICdhcmlhLXNlbGVjdGVkJzogJ3RydWUnLFxuICAgICAgICAgICAgICAgICd0YWJpbmRleCc6ICcwJ1xuICAgICAgICAgICAgfSkuZW5kKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpPV8uY3VycmVudFNsaWRlLCBtYXg9aStfLm9wdGlvbnMuc2xpZGVzVG9TaG93OyBpIDwgbWF4OyBpKyspIHtcbiAgICAgICAgICBpZiAoXy5vcHRpb25zLmZvY3VzT25DaGFuZ2UpIHtcbiAgICAgICAgICAgIF8uJHNsaWRlcy5lcShpKS5hdHRyKHsndGFiaW5kZXgnOiAnMCd9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgXy4kc2xpZGVzLmVxKGkpLnJlbW92ZUF0dHIoJ3RhYmluZGV4Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgXy5hY3RpdmF0ZUFEQSgpO1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5pbml0QXJyb3dFdmVudHMgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5hcnJvd3MgPT09IHRydWUgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuICAgICAgICAgICAgXy4kcHJldkFycm93XG4gICAgICAgICAgICAgICAub2ZmKCdjbGljay5zbGljaycpXG4gICAgICAgICAgICAgICAub24oJ2NsaWNrLnNsaWNrJywge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAncHJldmlvdXMnXG4gICAgICAgICAgICAgICB9LCBfLmNoYW5nZVNsaWRlKTtcbiAgICAgICAgICAgIF8uJG5leHRBcnJvd1xuICAgICAgICAgICAgICAgLm9mZignY2xpY2suc2xpY2snKVxuICAgICAgICAgICAgICAgLm9uKCdjbGljay5zbGljaycsIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ25leHQnXG4gICAgICAgICAgICAgICB9LCBfLmNoYW5nZVNsaWRlKTtcblxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5hY2Nlc3NpYmlsaXR5ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgXy4kcHJldkFycm93Lm9uKCdrZXlkb3duLnNsaWNrJywgXy5rZXlIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICBfLiRuZXh0QXJyb3cub24oJ2tleWRvd24uc2xpY2snLCBfLmtleUhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLmluaXREb3RFdmVudHMgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5kb3RzID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgICAgICAgICQoJ2xpJywgXy4kZG90cykub24oJ2NsaWNrLnNsaWNrJywge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbmRleCdcbiAgICAgICAgICAgIH0sIF8uY2hhbmdlU2xpZGUpO1xuXG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLmFjY2Vzc2liaWxpdHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBfLiRkb3RzLm9uKCdrZXlkb3duLnNsaWNrJywgXy5rZXlIYW5kbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZG90cyA9PT0gdHJ1ZSAmJiBfLm9wdGlvbnMucGF1c2VPbkRvdHNIb3ZlciA9PT0gdHJ1ZSAmJiBfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XG5cbiAgICAgICAgICAgICQoJ2xpJywgXy4kZG90cylcbiAgICAgICAgICAgICAgICAub24oJ21vdXNlZW50ZXIuc2xpY2snLCAkLnByb3h5KF8uaW50ZXJydXB0LCBfLCB0cnVlKSlcbiAgICAgICAgICAgICAgICAub24oJ21vdXNlbGVhdmUuc2xpY2snLCAkLnByb3h5KF8uaW50ZXJydXB0LCBfLCBmYWxzZSkpO1xuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuaW5pdFNsaWRlRXZlbnRzID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmICggXy5vcHRpb25zLnBhdXNlT25Ib3ZlciApIHtcblxuICAgICAgICAgICAgXy4kbGlzdC5vbignbW91c2VlbnRlci5zbGljaycsICQucHJveHkoXy5pbnRlcnJ1cHQsIF8sIHRydWUpKTtcbiAgICAgICAgICAgIF8uJGxpc3Qub24oJ21vdXNlbGVhdmUuc2xpY2snLCAkLnByb3h5KF8uaW50ZXJydXB0LCBfLCBmYWxzZSkpO1xuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuaW5pdGlhbGl6ZUV2ZW50cyA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBfLmluaXRBcnJvd0V2ZW50cygpO1xuXG4gICAgICAgIF8uaW5pdERvdEV2ZW50cygpO1xuICAgICAgICBfLmluaXRTbGlkZUV2ZW50cygpO1xuXG4gICAgICAgIF8uJGxpc3Qub24oJ3RvdWNoc3RhcnQuc2xpY2sgbW91c2Vkb3duLnNsaWNrJywge1xuICAgICAgICAgICAgYWN0aW9uOiAnc3RhcnQnXG4gICAgICAgIH0sIF8uc3dpcGVIYW5kbGVyKTtcbiAgICAgICAgXy4kbGlzdC5vbigndG91Y2htb3ZlLnNsaWNrIG1vdXNlbW92ZS5zbGljaycsIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ21vdmUnXG4gICAgICAgIH0sIF8uc3dpcGVIYW5kbGVyKTtcbiAgICAgICAgXy4kbGlzdC5vbigndG91Y2hlbmQuc2xpY2sgbW91c2V1cC5zbGljaycsIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ2VuZCdcbiAgICAgICAgfSwgXy5zd2lwZUhhbmRsZXIpO1xuICAgICAgICBfLiRsaXN0Lm9uKCd0b3VjaGNhbmNlbC5zbGljayBtb3VzZWxlYXZlLnNsaWNrJywge1xuICAgICAgICAgICAgYWN0aW9uOiAnZW5kJ1xuICAgICAgICB9LCBfLnN3aXBlSGFuZGxlcik7XG5cbiAgICAgICAgXy4kbGlzdC5vbignY2xpY2suc2xpY2snLCBfLmNsaWNrSGFuZGxlcik7XG5cbiAgICAgICAgJChkb2N1bWVudCkub24oXy52aXNpYmlsaXR5Q2hhbmdlLCAkLnByb3h5KF8udmlzaWJpbGl0eSwgXykpO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuYWNjZXNzaWJpbGl0eSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgXy4kbGlzdC5vbigna2V5ZG93bi5zbGljaycsIF8ua2V5SGFuZGxlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXy5vcHRpb25zLmZvY3VzT25TZWxlY3QgPT09IHRydWUpIHtcbiAgICAgICAgICAgICQoXy4kc2xpZGVUcmFjaykuY2hpbGRyZW4oKS5vbignY2xpY2suc2xpY2snLCBfLnNlbGVjdEhhbmRsZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgJCh3aW5kb3cpLm9uKCdvcmllbnRhdGlvbmNoYW5nZS5zbGljay5zbGljay0nICsgXy5pbnN0YW5jZVVpZCwgJC5wcm94eShfLm9yaWVudGF0aW9uQ2hhbmdlLCBfKSk7XG5cbiAgICAgICAgJCh3aW5kb3cpLm9uKCdyZXNpemUuc2xpY2suc2xpY2stJyArIF8uaW5zdGFuY2VVaWQsICQucHJveHkoXy5yZXNpemUsIF8pKTtcblxuICAgICAgICAkKCdbZHJhZ2dhYmxlIT10cnVlXScsIF8uJHNsaWRlVHJhY2spLm9uKCdkcmFnc3RhcnQnLCBfLnByZXZlbnREZWZhdWx0KTtcblxuICAgICAgICAkKHdpbmRvdykub24oJ2xvYWQuc2xpY2suc2xpY2stJyArIF8uaW5zdGFuY2VVaWQsIF8uc2V0UG9zaXRpb24pO1xuICAgICAgICAkKF8uc2V0UG9zaXRpb24pO1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5pbml0VUkgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5hcnJvd3MgPT09IHRydWUgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuXG4gICAgICAgICAgICBfLiRwcmV2QXJyb3cuc2hvdygpO1xuICAgICAgICAgICAgXy4kbmV4dEFycm93LnNob3coKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5kb3RzID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcblxuICAgICAgICAgICAgXy4kZG90cy5zaG93KCk7XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5rZXlIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG4gICAgICAgICAvL0RvbnQgc2xpZGUgaWYgdGhlIGN1cnNvciBpcyBpbnNpZGUgdGhlIGZvcm0gZmllbGRzIGFuZCBhcnJvdyBrZXlzIGFyZSBwcmVzc2VkXG4gICAgICAgIGlmKCFldmVudC50YXJnZXQudGFnTmFtZS5tYXRjaCgnVEVYVEFSRUF8SU5QVVR8U0VMRUNUJykpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAzNyAmJiBfLm9wdGlvbnMuYWNjZXNzaWJpbGl0eSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIF8uY2hhbmdlU2xpZGUoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBfLm9wdGlvbnMucnRsID09PSB0cnVlID8gJ25leHQnIDogICdwcmV2aW91cydcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSAzOSAmJiBfLm9wdGlvbnMuYWNjZXNzaWJpbGl0eSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIF8uY2hhbmdlU2xpZGUoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBfLm9wdGlvbnMucnRsID09PSB0cnVlID8gJ3ByZXZpb3VzJyA6ICduZXh0J1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUubGF6eUxvYWQgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXMsXG4gICAgICAgICAgICBsb2FkUmFuZ2UsIGNsb25lUmFuZ2UsIHJhbmdlU3RhcnQsIHJhbmdlRW5kO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRJbWFnZXMoaW1hZ2VzU2NvcGUpIHtcblxuICAgICAgICAgICAgJCgnaW1nW2RhdGEtbGF6eV0nLCBpbWFnZXNTY29wZSkuZWFjaChmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9ICQodGhpcyksXG4gICAgICAgICAgICAgICAgICAgIGltYWdlU291cmNlID0gJCh0aGlzKS5hdHRyKCdkYXRhLWxhenknKSxcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VTcmNTZXQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtc3Jjc2V0JyksXG4gICAgICAgICAgICAgICAgICAgIGltYWdlU2l6ZXMgID0gJCh0aGlzKS5hdHRyKCdkYXRhLXNpemVzJykgfHwgXy4kc2xpZGVyLmF0dHIoJ2RhdGEtc2l6ZXMnKSxcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VUb0xvYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcblxuICAgICAgICAgICAgICAgIGltYWdlVG9Mb2FkLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAuYW5pbWF0ZSh7IG9wYWNpdHk6IDAgfSwgMTAwLCBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZVNyY1NldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3NyY3NldCcsIGltYWdlU3JjU2V0ICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlU2l6ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3NpemVzJywgaW1hZ2VTaXplcyApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ3NyYycsIGltYWdlU291cmNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYW5pbWF0ZSh7IG9wYWNpdHk6IDEgfSwgMjAwLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtbGF6eSBkYXRhLXNyY3NldCBkYXRhLXNpemVzJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NsaWNrLWxvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ2xhenlMb2FkZWQnLCBbXywgaW1hZ2UsIGltYWdlU291cmNlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpbWFnZVRvTG9hZC5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVBdHRyKCAnZGF0YS1sYXp5JyApXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoICdzbGljay1sb2FkaW5nJyApXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoICdzbGljay1sYXp5bG9hZC1lcnJvcicgKTtcblxuICAgICAgICAgICAgICAgICAgICBfLiRzbGlkZXIudHJpZ2dlcignbGF6eUxvYWRFcnJvcicsIFsgXywgaW1hZ2UsIGltYWdlU291cmNlIF0pO1xuXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGltYWdlVG9Mb2FkLnNyYyA9IGltYWdlU291cmNlO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2VTdGFydCA9IF8uY3VycmVudFNsaWRlICsgKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgLyAyICsgMSk7XG4gICAgICAgICAgICAgICAgcmFuZ2VFbmQgPSByYW5nZVN0YXJ0ICsgXy5vcHRpb25zLnNsaWRlc1RvU2hvdyArIDI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJhbmdlU3RhcnQgPSBNYXRoLm1heCgwLCBfLmN1cnJlbnRTbGlkZSAtIChfLm9wdGlvbnMuc2xpZGVzVG9TaG93IC8gMiArIDEpKTtcbiAgICAgICAgICAgICAgICByYW5nZUVuZCA9IDIgKyAoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAvIDIgKyAxKSArIF8uY3VycmVudFNsaWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmFuZ2VTdGFydCA9IF8ub3B0aW9ucy5pbmZpbml0ZSA/IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKyBfLmN1cnJlbnRTbGlkZSA6IF8uY3VycmVudFNsaWRlO1xuICAgICAgICAgICAgcmFuZ2VFbmQgPSBNYXRoLmNlaWwocmFuZ2VTdGFydCArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpO1xuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5mYWRlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlU3RhcnQgPiAwKSByYW5nZVN0YXJ0LS07XG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlRW5kIDw9IF8uc2xpZGVDb3VudCkgcmFuZ2VFbmQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvYWRSYW5nZSA9IF8uJHNsaWRlci5maW5kKCcuc2xpY2stc2xpZGUnKS5zbGljZShyYW5nZVN0YXJ0LCByYW5nZUVuZCk7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5sYXp5TG9hZCA9PT0gJ2FudGljaXBhdGVkJykge1xuICAgICAgICAgICAgdmFyIHByZXZTbGlkZSA9IHJhbmdlU3RhcnQgLSAxLFxuICAgICAgICAgICAgICAgIG5leHRTbGlkZSA9IHJhbmdlRW5kLFxuICAgICAgICAgICAgICAgICRzbGlkZXMgPSBfLiRzbGlkZXIuZmluZCgnLnNsaWNrLXNsaWRlJyk7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldlNsaWRlIDwgMCkgcHJldlNsaWRlID0gXy5zbGlkZUNvdW50IC0gMTtcbiAgICAgICAgICAgICAgICBsb2FkUmFuZ2UgPSBsb2FkUmFuZ2UuYWRkKCRzbGlkZXMuZXEocHJldlNsaWRlKSk7XG4gICAgICAgICAgICAgICAgbG9hZFJhbmdlID0gbG9hZFJhbmdlLmFkZCgkc2xpZGVzLmVxKG5leHRTbGlkZSkpO1xuICAgICAgICAgICAgICAgI
2HByZXZTbGlkZS0tO1xuICAgICAgICAgICAgICAgIG5leHRTbGlkZSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbG9hZEltYWdlcyhsb2FkUmFuZ2UpO1xuXG4gICAgICAgIGlmIChfLnNsaWRlQ291bnQgPD0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuICAgICAgICAgICAgY2xvbmVSYW5nZSA9IF8uJHNsaWRlci5maW5kKCcuc2xpY2stc2xpZGUnKTtcbiAgICAgICAgICAgIGxvYWRJbWFnZXMoY2xvbmVSYW5nZSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICBpZiAoXy5jdXJyZW50U2xpZGUgPj0gXy5zbGlkZUNvdW50IC0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuICAgICAgICAgICAgY2xvbmVSYW5nZSA9IF8uJHNsaWRlci5maW5kKCcuc2xpY2stY2xvbmVkJykuc2xpY2UoMCwgXy5vcHRpb25zLnNsaWRlc1RvU2hvdyk7XG4gICAgICAgICAgICBsb2FkSW1hZ2VzKGNsb25lUmFuZ2UpO1xuICAgICAgICB9IGVsc2UgaWYgKF8uY3VycmVudFNsaWRlID09PSAwKSB7XG4gICAgICAgICAgICBjbG9uZVJhbmdlID0gXy4kc2xpZGVyLmZpbmQoJy5zbGljay1jbG9uZWQnKS5zbGljZShfLm9wdGlvbnMuc2xpZGVzVG9TaG93ICogLTEpO1xuICAgICAgICAgICAgbG9hZEltYWdlcyhjbG9uZVJhbmdlKTtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5sb2FkU2xpZGVyID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIF8uc2V0UG9zaXRpb24oKTtcblxuICAgICAgICBfLiRzbGlkZVRyYWNrLmNzcyh7XG4gICAgICAgICAgICBvcGFjaXR5OiAxXG4gICAgICAgIH0pO1xuXG4gICAgICAgIF8uJHNsaWRlci5yZW1vdmVDbGFzcygnc2xpY2stbG9hZGluZycpO1xuXG4gICAgICAgIF8uaW5pdFVJKCk7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5sYXp5TG9hZCA9PT0gJ3Byb2dyZXNzaXZlJykge1xuICAgICAgICAgICAgXy5wcm9ncmVzc2l2ZUxhenlMb2FkKCk7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUubmV4dCA9IFNsaWNrLnByb3RvdHlwZS5zbGlja05leHQgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXM7XG5cbiAgICAgICAgXy5jaGFuZ2VTbGlkZSh7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ25leHQnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5vcmllbnRhdGlvbkNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBfLmNoZWNrUmVzcG9uc2l2ZSgpO1xuICAgICAgICBfLnNldFBvc2l0aW9uKCk7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnBhdXNlID0gU2xpY2sucHJvdG90eXBlLnNsaWNrUGF1c2UgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG5cbiAgICAgICAgXy5hdXRvUGxheUNsZWFyKCk7XG4gICAgICAgIF8ucGF1c2VkID0gdHJ1ZTtcblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUucGxheSA9IFNsaWNrLnByb3RvdHlwZS5zbGlja1BsYXkgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG5cbiAgICAgICAgXy5hdXRvUGxheSgpO1xuICAgICAgICBfLm9wdGlvbnMuYXV0b3BsYXkgPSB0cnVlO1xuICAgICAgICBfLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICBfLmZvY3Vzc2VkID0gZmFsc2U7XG4gICAgICAgIF8uaW50ZXJydXB0ZWQgPSBmYWxzZTtcblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUucG9zdFNsaWRlID0gZnVuY3Rpb24oaW5kZXgpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG5cbiAgICAgICAgaWYoICFfLnVuc2xpY2tlZCApIHtcblxuICAgICAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ2FmdGVyQ2hhbmdlJywgW18sIGluZGV4XSk7XG5cbiAgICAgICAgICAgIF8uYW5pbWF0aW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XG4gICAgICAgICAgICAgICAgXy5zZXRQb3NpdGlvbigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBfLnN3aXBlTGVmdCA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmICggXy5vcHRpb25zLmF1dG9wbGF5ICkge1xuICAgICAgICAgICAgICAgIF8uYXV0b1BsYXkoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5hY2Nlc3NpYmlsaXR5ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgXy5pbml0QURBKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoXy5vcHRpb25zLmZvY3VzT25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRjdXJyZW50U2xpZGUgPSAkKF8uJHNsaWRlcy5nZXQoXy5jdXJyZW50U2xpZGUpKTtcbiAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRTbGlkZS5hdHRyKCd0YWJpbmRleCcsIDApLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUucHJldiA9IFNsaWNrLnByb3RvdHlwZS5zbGlja1ByZXYgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXM7XG5cbiAgICAgICAgXy5jaGFuZ2VTbGlkZSh7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ3ByZXZpb3VzJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnByb2dyZXNzaXZlTGF6eUxvYWQgPSBmdW5jdGlvbiggdHJ5Q291bnQgKSB7XG5cbiAgICAgICAgdHJ5Q291bnQgPSB0cnlDb3VudCB8fCAxO1xuXG4gICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgICRpbWdzVG9Mb2FkID0gJCggJ2ltZ1tkYXRhLWxhenldJywgXy4kc2xpZGVyICksXG4gICAgICAgICAgICBpbWFnZSxcbiAgICAgICAgICAgIGltYWdlU291cmNlLFxuICAgICAgICAgICAgaW1hZ2VTcmNTZXQsXG4gICAgICAgICAgICBpbWFnZVNpemVzLFxuICAgICAgICAgICAgaW1hZ2VUb0xvYWQ7XG5cbiAgICAgICAgaWYgKCAkaW1nc1RvTG9hZC5sZW5ndGggKSB7XG5cbiAgICAgICAgICAgIGltYWdlID0gJGltZ3NUb0xvYWQuZmlyc3QoKTtcbiAgICAgICAgICAgIGltYWdlU291cmNlID0gaW1hZ2UuYXR0cignZGF0YS1sYXp5Jyk7XG4gICAgICAgICAgICBpbWFnZVNyY1NldCA9IGltYWdlLmF0dHIoJ2RhdGEtc3Jjc2V0Jyk7XG4gICAgICAgICAgICBpbWFnZVNpemVzICA9IGltYWdlLmF0dHIoJ2RhdGEtc2l6ZXMnKSB8fCBfLiRzbGlkZXIuYXR0cignZGF0YS1zaXplcycpO1xuICAgICAgICAgICAgaW1hZ2VUb0xvYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcblxuICAgICAgICAgICAgaW1hZ2VUb0xvYWQub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VTcmNTZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdzcmNzZXQnLCBpbWFnZVNyY1NldCApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZVNpemVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdzaXplcycsIGltYWdlU2l6ZXMgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGltYWdlXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCAnc3JjJywgaW1hZ2VTb3VyY2UgKVxuICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQXR0cignZGF0YS1sYXp5IGRhdGEtc3Jjc2V0IGRhdGEtc2l6ZXMnKVxuICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NsaWNrLWxvYWRpbmcnKTtcblxuICAgICAgICAgICAgICAgIGlmICggXy5vcHRpb25zLmFkYXB0aXZlSGVpZ2h0ID09PSB0cnVlICkge1xuICAgICAgICAgICAgICAgICAgICBfLnNldFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ2xhenlMb2FkZWQnLCBbIF8sIGltYWdlLCBpbWFnZVNvdXJjZSBdKTtcbiAgICAgICAgICAgICAgICBfLnByb2dyZXNzaXZlTGF6eUxvYWQoKTtcblxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaW1hZ2VUb0xvYWQub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgaWYgKCB0cnlDb3VudCA8IDMgKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIHRyeSB0byBsb2FkIHRoZSBpbWFnZSAzIHRpbWVzLFxuICAgICAgICAgICAgICAgICAgICAgKiBsZWF2ZSBhIHNsaWdodCBkZWxheSBzbyB3ZSBkb24ndCBnZXRcbiAgICAgICAgICAgICAgICAgICAgICogc2VydmVycyBibG9ja2luZyB0aGUgcmVxdWVzdC5cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgXy5wcm9ncmVzc2l2ZUxhenlMb2FkKCB0cnlDb3VudCArIDEgKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgNTAwICk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgICAgIGltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQXR0ciggJ2RhdGEtbGF6eScgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCAnc2xpY2stbG9hZGluZycgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCAnc2xpY2stbGF6eWxvYWQtZXJyb3InICk7XG5cbiAgICAgICAgICAgICAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ2xhenlMb2FkRXJyb3InLCBbIF8sIGltYWdlLCBpbWFnZVNvdXJjZSBdKTtcblxuICAgICAgICAgICAgICAgICAgICBfLnByb2dyZXNzaXZlTGF6eUxvYWQoKTtcblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaW1hZ2VUb0xvYWQuc3JjID0gaW1hZ2VTb3VyY2U7XG5cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ2FsbEltYWdlc0xvYWRlZCcsIFsgXyBdKTtcblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiggaW5pdGlhbGl6aW5nICkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcywgY3VycmVudFNsaWRlLCBsYXN0VmlzaWJsZUluZGV4O1xuXG4gICAgICAgIGxhc3RWaXNpYmxlSW5kZXggPSBfLnNsaWRlQ291bnQgLSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93O1xuXG4gICAgICAgIC8vIGluIG5vbi1pbmZpbml0ZSBzbGlkZXJzLCB3ZSBkb24ndCB3YW50IHRvIGdvIHBhc3QgdGhlXG4gICAgICAgIC8vIGxhc3QgdmlzaWJsZSBpbmRleC5cbiAgICAgICAgaWYoICFfLm9wdGlvbnMuaW5maW5pdGUgJiYgKCBfLmN1cnJlbnRTbGlkZSA+IGxhc3RWaXNpYmxlSW5kZXggKSkge1xuICAgICAgICAgICAgXy5jdXJyZW50U2xpZGUgPSBsYXN0VmlzaWJsZUluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgbGVzcyBzbGlkZXMgdGhhbiB0byBzaG93LCBnbyB0byBzdGFydC5cbiAgICAgICAgaWYgKCBfLnNsaWRlQ291bnQgPD0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyApIHtcbiAgICAgICAgICAgIF8uY3VycmVudFNsaWRlID0gMDtcblxuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFNsaWRlID0gXy5jdXJyZW50U2xpZGU7XG5cbiAgICAgICAgXy5kZXN0cm95KHRydWUpO1xuXG4gICAgICAgICQuZXh0ZW5kKF8sIF8uaW5pdGlhbHMsIHsgY3VycmVudFNsaWRlOiBjdXJyZW50U2xpZGUgfSk7XG5cbiAgICAgICAgXy5pbml0KCk7XG5cbiAgICAgICAgaWYoICFpbml0aWFsaXppbmcgKSB7XG5cbiAgICAgICAgICAgIF8uY2hhbmdlU2xpZGUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2luZGV4JyxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRTbGlkZVxuICAgICAgICAgICAgICAgI
2H1cbiAgICAgICAgICAgIH0sIGZhbHNlKTtcblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnJlZ2lzdGVyQnJlYWtwb2ludHMgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXMsIGJyZWFrcG9pbnQsIGN1cnJlbnRCcmVha3BvaW50LCBsLFxuICAgICAgICAgICAgcmVzcG9uc2l2ZVNldHRpbmdzID0gXy5vcHRpb25zLnJlc3BvbnNpdmUgfHwgbnVsbDtcblxuICAgICAgICBpZiAoICQudHlwZShyZXNwb25zaXZlU2V0dGluZ3MpID09PSAnYXJyYXknICYmIHJlc3BvbnNpdmVTZXR0aW5ncy5sZW5ndGggKSB7XG5cbiAgICAgICAgICAgIF8ucmVzcG9uZFRvID0gXy5vcHRpb25zLnJlc3BvbmRUbyB8fCAnd2luZG93JztcblxuICAgICAgICAgICAgZm9yICggYnJlYWtwb2ludCBpbiByZXNwb25zaXZlU2V0dGluZ3MgKSB7XG5cbiAgICAgICAgICAgICAgICBsID0gXy5icmVha3BvaW50cy5sZW5ndGgtMTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zaXZlU2V0dGluZ3MuaGFzT3duUHJvcGVydHkoYnJlYWtwb2ludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEJyZWFrcG9pbnQgPSByZXNwb25zaXZlU2V0dGluZ3NbYnJlYWtwb2ludF0uYnJlYWtwb2ludDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIGJyZWFrcG9pbnRzIGFuZCBjdXQgb3V0IGFueSBleGlzdGluZ1xuICAgICAgICAgICAgICAgICAgICAvLyBvbmVzIHdpdGggdGhlIHNhbWUgYnJlYWtwb2ludCBudW1iZXIsIHdlIGRvbid0IHdhbnQgZHVwZXMuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKCBsID49IDAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiggXy5icmVha3BvaW50c1tsXSAmJiBfLmJyZWFrcG9pbnRzW2xdID09PSBjdXJyZW50QnJlYWtwb2ludCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmJyZWFrcG9pbnRzLnNwbGljZShsLDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbC0tO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgXy5icmVha3BvaW50cy5wdXNoKGN1cnJlbnRCcmVha3BvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgXy5icmVha3BvaW50U2V0dGluZ3NbY3VycmVudEJyZWFrcG9pbnRdID0gcmVzcG9uc2l2ZVNldHRpbmdzW2JyZWFrcG9pbnRdLnNldHRpbmdzO1xuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF8uYnJlYWtwb2ludHMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICggXy5vcHRpb25zLm1vYmlsZUZpcnN0ICkgPyBhLWIgOiBiLWE7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnJlaW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBfLiRzbGlkZXMgPVxuICAgICAgICAgICAgXy4kc2xpZGVUcmFja1xuICAgICAgICAgICAgICAgIC5jaGlsZHJlbihfLm9wdGlvbnMuc2xpZGUpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCdzbGljay1zbGlkZScpO1xuXG4gICAgICAgIF8uc2xpZGVDb3VudCA9IF8uJHNsaWRlcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKF8uY3VycmVudFNsaWRlID49IF8uc2xpZGVDb3VudCAmJiBfLmN1cnJlbnRTbGlkZSAhPT0gMCkge1xuICAgICAgICAgICAgXy5jdXJyZW50U2xpZGUgPSBfLmN1cnJlbnRTbGlkZSAtIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfLnNsaWRlQ291bnQgPD0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuICAgICAgICAgICAgXy5jdXJyZW50U2xpZGUgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgXy5yZWdpc3RlckJyZWFrcG9pbnRzKCk7XG5cbiAgICAgICAgXy5zZXRQcm9wcygpO1xuICAgICAgICBfLnNldHVwSW5maW5pdGUoKTtcbiAgICAgICAgXy5idWlsZEFycm93cygpO1xuICAgICAgICBfLnVwZGF0ZUFycm93cygpO1xuICAgICAgICBfLmluaXRBcnJvd0V2ZW50cygpO1xuICAgICAgICBfLmJ1aWxkRG90cygpO1xuICAgICAgICBfLnVwZGF0ZURvdHMoKTtcbiAgICAgICAgXy5pbml0RG90RXZlbnRzKCk7XG4gICAgICAgIF8uY2xlYW5VcFNsaWRlRXZlbnRzKCk7XG4gICAgICAgIF8uaW5pdFNsaWRlRXZlbnRzKCk7XG5cbiAgICAgICAgXy5jaGVja1Jlc3BvbnNpdmUoZmFsc2UsIHRydWUpO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZm9jdXNPblNlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgJChfLiRzbGlkZVRyYWNrKS5jaGlsZHJlbigpLm9uKCdjbGljay5zbGljaycsIF8uc2VsZWN0SGFuZGxlcik7XG4gICAgICAgIH1cblxuICAgICAgICBfLnNldFNsaWRlQ2xhc3Nlcyh0eXBlb2YgXy5jdXJyZW50U2xpZGUgPT09ICdudW1iZXInID8gXy5jdXJyZW50U2xpZGUgOiAwKTtcblxuICAgICAgICBfLnNldFBvc2l0aW9uKCk7XG4gICAgICAgIF8uZm9jdXNIYW5kbGVyKCk7XG5cbiAgICAgICAgXy5wYXVzZWQgPSAhXy5vcHRpb25zLmF1dG9wbGF5O1xuICAgICAgICBfLmF1dG9QbGF5KCk7XG5cbiAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ3JlSW5pdCcsIFtfXSk7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBpZiAoJCh3aW5kb3cpLndpZHRoKCkgIT09IF8ud2luZG93V2lkdGgpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChfLndpbmRvd0RlbGF5KTtcbiAgICAgICAgICAgIF8ud2luZG93RGVsYXkgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBfLndpbmRvd1dpZHRoID0gJCh3aW5kb3cpLndpZHRoKCk7XG4gICAgICAgICAgICAgICAgXy5jaGVja1Jlc3BvbnNpdmUoKTtcbiAgICAgICAgICAgICAgICBpZiggIV8udW5zbGlja2VkICkgeyBfLnNldFBvc2l0aW9uKCk7IH1cbiAgICAgICAgICAgI
2H0sIDUwKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUucmVtb3ZlU2xpZGUgPSBTbGljay5wcm90b3R5cGUuc2xpY2tSZW1vdmUgPSBmdW5jdGlvbihpbmRleCwgcmVtb3ZlQmVmb3JlLCByZW1vdmVBbGwpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHR5cGVvZihpbmRleCkgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmVtb3ZlQmVmb3JlID0gaW5kZXg7XG4gICAgICAgICAgICBpbmRleCA9IHJlbW92ZUJlZm9yZSA9PT0gdHJ1ZSA/IDAgOiBfLnNsaWRlQ291bnQgLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kZXggPSByZW1vdmVCZWZvcmUgPT09IHRydWUgPyAtLWluZGV4IDogaW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXy5zbGlkZUNvdW50IDwgMSB8fCBpbmRleCA8IDAgfHwgaW5kZXggPiBfLnNsaWRlQ291bnQgLSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBfLnVubG9hZCgpO1xuXG4gICAgICAgIGlmIChyZW1vdmVBbGwgPT09IHRydWUpIHtcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY2hpbGRyZW4oKS5yZW1vdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY2hpbGRyZW4odGhpcy5vcHRpb25zLnNsaWRlKS5lcShpbmRleCkucmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBfLiRzbGlkZXMgPSBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKHRoaXMub3B0aW9ucy5zbGlkZSk7XG5cbiAgICAgICAgXy4kc2xpZGVUcmFjay5jaGlsZHJlbih0aGlzLm9wdGlvbnMuc2xpZGUpLmRldGFjaCgpO1xuXG4gICAgICAgIF8uJHNsaWRlVHJhY2suYXBwZW5kKF8uJHNsaWRlcyk7XG5cbiAgICAgICAgXy4kc2xpZGVzQ2FjaGUgPSBfLiRzbGlkZXM7XG5cbiAgICAgICAgXy5yZWluaXQoKTtcblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuc2V0Q1NTID0gZnVuY3Rpb24ocG9zaXRpb24pIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXMsXG4gICAgICAgICAgICBwb3NpdGlvblByb3BzID0ge30sXG4gICAgICAgICAgICB4LCB5O1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMucnRsID09PSB0cnVlKSB7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IC1wb3NpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICB4ID0gXy5wb3NpdGlvblByb3AgPT0gJ2xlZnQnID8gTWF0aC5jZWlsKHBvc2l0aW9uKSArICdweCcgOiAnMHB4JztcbiAgICAgICAgeSA9IF8ucG9zaXRpb25Qcm9wID09ICd0b3AnID8gTWF0aC5jZWlsKHBvc2l0aW9uKSArICdweCcgOiAnMHB4JztcblxuICAgICAgICBwb3NpdGlvblByb3BzW18ucG9zaXRpb25Qcm9wXSA9IHBvc2l0aW9uO1xuXG4gICAgICAgIGlmIChfLnRyYW5zZm9ybXNFbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5jc3MocG9zaXRpb25Qcm9wcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb3NpdGlvblByb3BzID0ge307XG4gICAgICAgICAgICBpZiAoXy5jc3NUcmFuc2l0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvblByb3BzW18uYW5pbVR5cGVdID0gJ3RyYW5zbGF0ZSgnICsgeCArICcsICcgKyB5ICsgJyknO1xuICAgICAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKHBvc2l0aW9uUHJvcHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvblByb3BzW18uYW5pbVR5cGVdID0gJ3RyYW5zbGF0ZTNkKCcgKyB4ICsgJywgJyArIHkgKyAnLCAwcHgpJztcbiAgICAgICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmNzcyhwb3NpdGlvblByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5zZXREaW1lbnNpb25zID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMudmVydGljYWwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBfLiRsaXN0LmNzcyh7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICgnMHB4ICcgKyBfLm9wdGlvbnMuY2VudGVyUGFkZGluZylcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF8uJGxpc3QuaGVpZ2h0KF8uJHNsaWRlcy5maXJzdCgpLm91dGVySGVpZ2h0KHRydWUpICogXy5vcHRpb25zLnNsaWRlc1RvU2hvdyk7XG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBfLiRsaXN0LmNzcyh7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IChfLm9wdGlvbnMuY2VudGVyUGFkZGluZyArICcgMHB4JylcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF8ubGlzdFdpZHRoID0gXy4kbGlzdC53aWR0aCgpO1xuICAgICAgICBfLmxpc3RIZWlnaHQgPSBfLiRsaXN0LmhlaWdodCgpO1xuXG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UgJiYgXy5vcHRpb25zLnZhcmlhYmxlV2lkdGggPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBfLnNsaWRlV2lkdGggPSBNYXRoLmNlaWwoXy5saXN0V2lkdGggLyBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KTtcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2sud2lkdGgoTWF0aC5jZWlsKChfLnNsaWRlV2lkdGggKiBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKCcuc2xpY2stc2xpZGUnKS5sZW5ndGgpKSk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChfLm9wdGlvbnMudmFyaWFibGVXaWR0aCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgXy4kc2xpZGVUcmFjay53aWR0aCg1MDAwICogXy5zbGlkZUNvdW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF8uc2xpZGVXaWR0aCA9IE1hdGguY2VpbChfLmxpc3RXaWR0aCk7XG4gICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmhlaWdodChNYXRoLmNlaWwoKF8uJHNsaWRlcy5maXJzdCgpLm91dGVySGVpZ2h0KHRydWUpICogXy4kc2xpZGVUcmFjay5jaGlsZHJlbignLnNsaWNrLXNsaWRlJykubGVuZ3RoKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG9mZnNldCA9IF8uJHNsaWRlcy5maXJzdCgpLm91dGVyV2lkdGgodHJ1ZSkgLSBfLiRzbGlkZXMuZmlyc3QoKS53aWR0aCgpO1xuICAgICAgICBpZiAoXy5vcHRpb25zLnZhcmlhYmxlV2lkdGggPT09IGZhbHNlKSBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKCcuc2xpY2stc2xpZGUnKS53aWR0aChfLnNsaWRlV2lkdGggLSBvZmZzZXQpO1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5zZXRGYWRlID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgdGFyZ2V0TGVmdDtcblxuICAgICAgICBfLiRzbGlkZXMuZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkge1xuICAgICAgICAgICAgdGFyZ2V0TGVmdCA9IChfLnNsaWRlV2lkdGggKiBpbmRleCkgKiAtMTtcbiAgICAgICAgICAgIGlmIChfLm9wdGlvbnMucnRsID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgJChlbGVtZW50KS5jc3Moe1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IHRhcmdldExlZnQsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICAgICAgekluZGV4OiBfLm9wdGlvbnMuekluZGV4IC0gMixcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkKGVsZW1lbnQpLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiB0YXJnZXRMZWZ0LFxuICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgIHpJbmRleDogXy5vcHRpb25zLnpJbmRleCAtIDIsXG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgI
2H1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgXy4kc2xpZGVzLmVxKF8uY3VycmVudFNsaWRlKS5jc3Moe1xuICAgICAgICAgICAgekluZGV4OiBfLm9wdGlvbnMuekluZGV4IC0gMSxcbiAgICAgICAgICAgIG9wYWNpdHk6IDFcbiAgICAgICAgfSk7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnNldEhlaWdodCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBpZiAoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyA9PT0gMSAmJiBfLm9wdGlvbnMuYWRhcHRpdmVIZWlnaHQgPT09IHRydWUgJiYgXy5vcHRpb25zLnZlcnRpY2FsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdmFyIHRhcmdldEhlaWdodCA9IF8uJHNsaWRlcy5lcShfLmN1cnJlbnRTbGlkZSkub3V0ZXJIZWlnaHQodHJ1ZSk7XG4gICAgICAgICAgICBfLiRsaXN0LmNzcygnaGVpZ2h0JywgdGFyZ2V0SGVpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5zZXRPcHRpb24gPVxuICAgIFNsaWNrLnByb3RvdHlwZS5zbGlja1NldE9wdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhY2NlcHRzIGFyZ3VtZW50cyBpbiBmb3JtYXQgb2Y6XG4gICAgICAgICAqXG4gICAgICAgICAqICAtIGZvciBjaGFuZ2luZyBhIHNpbmdsZSBvcHRpb24ncyB2YWx1ZTpcbiAgICAgICAgICogICAgIC5zbGljayhcInNldE9wdGlvblwiLCBvcHRpb24sIHZhbHVlLCByZWZyZXNoIClcbiAgICAgICAgICpcbiAgICAgICAgICogIC0gZm9yIGNoYW5naW5nIGEgc2V0IG9mIHJlc3BvbnNpdmUgb3B0aW9uczpcbiAgICAgICAgICogICAgIC5zbGljayhcInNldE9wdGlvblwiLCAncmVzcG9uc2l2ZScsIFt7fSwgLi4uXSwgcmVmcmVzaCApXG4gICAgICAgICAqXG4gICAgICAgICAqICAtIGZvciB1cGRhdGluZyBtdWx0aXBsZSB2YWx1ZXMgYXQgb25jZSAobm90IHJlc3BvbnNpdmUpXG4gICAgICAgICAqICAgICAuc2xpY2soXCJzZXRPcHRpb25cIiwgeyAnb3B0aW9uJzogdmFsdWUsIC4uLiB9LCByZWZyZXNoIClcbiAgICAgICAgICovXG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLCBsLCBpdGVtLCBvcHRpb24sIHZhbHVlLCByZWZyZXNoID0gZmFsc2UsIHR5cGU7XG5cbiAgICAgICAgaWYoICQudHlwZSggYXJndW1lbnRzWzBdICkgPT09ICdvYmplY3QnICkge1xuXG4gICAgICAgICAgICBvcHRpb24gPSAgYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgcmVmcmVzaCA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgICAgIHR5cGUgPSAnbXVsdGlwbGUnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoICQudHlwZSggYXJndW1lbnRzWzBdICkgPT09ICdzdHJpbmcnICkge1xuXG4gICAgICAgICAgICBvcHRpb24gPSAgYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgdmFsdWUgPSBhcmd1bWVudHNbMV07XG4gICAgICAgICAgICByZWZyZXNoID0gYXJndW1lbnRzWzJdO1xuXG4gICAgICAgICAgICBpZiAoIGFyZ3VtZW50c1swXSA9PT0gJ3Jlc3BvbnNpdmUnICYmICQudHlwZSggYXJndW1lbnRzWzFdICkgPT09ICdhcnJheScgKSB7XG5cbiAgICAgICAgICAgICAgICB0eXBlID0gJ3Jlc3BvbnNpdmUnO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgYXJndW1lbnRzWzFdICE9PSAndW5kZWZpbmVkJyApIHtcblxuICAgICAgICAgICAgICAgIHR5cGUgPSAnc2luZ2xlJztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIHR5cGUgPT09ICdzaW5nbGUnICkge1xuXG4gICAgICAgICAgICBfLm9wdGlvbnNbb3B0aW9uXSA9IHZhbHVlO1xuXG5cbiAgICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0gJ211bHRpcGxlJyApIHtcblxuICAgICAgICAgICAgJC5lYWNoKCBvcHRpb24gLCBmdW5jdGlvbiggb3B0LCB2YWwgKSB7XG5cbiAgICAgICAgICAgICAgICBfLm9wdGlvbnNbb3B0XSA9IHZhbDtcblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlID09PSAncmVzcG9uc2l2ZScgKSB7XG5cbiAgICAgICAgICAgIGZvciAoIGl0ZW0gaW4gdmFsdWUgKSB7XG5cbiAgICAgICAgICAgICAgICBpZiggJC50eXBlKCBfLm9wdGlvbnMucmVzcG9uc2l2ZSApICE9PSAnYXJyYXknICkge1xuXG4gICAgICAgICAgICAgICAgICAgIF8ub3B0aW9ucy5yZXNwb25zaXZlID0gWyB2YWx1ZVtpdGVtXSBdO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICBsID0gXy5vcHRpb25zLnJlc3BvbnNpdmUubGVuZ3RoLTE7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSByZXNwb25zaXZlIG9iamVjdCBhbmQgc3BsaWNlIG91dCBkdXBsaWNhdGVzLlxuICAgICAgICAgICAgICAgICAgICB3aGlsZSggbCA+PSAwICkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiggXy5vcHRpb25zLnJlc3BvbnNpdmVbbF0uYnJlYWtwb2ludCA9PT0gdmFsdWVbaXRlbV0uYnJlYWtwb2ludCApIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ub3B0aW9ucy5yZXNwb25zaXZlLnNwbGljZShsLDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGwtLTtcblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgXy5vcHRpb25zLnJlc3BvbnNpdmUucHVzaCggdmFsdWVbaXRlbV0gKTtcblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIHJlZnJlc2ggKSB7XG5cbiAgICAgICAgICAgIF8udW5sb2FkKCk7XG4gICAgICAgICAgICBfLnJlaW5pdCgpO1xuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuc2V0UG9zaXRpb24gPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXM7XG5cbiAgICAgICAgXy5zZXREaW1lbnNpb25zKCk7XG5cbiAgICAgICAgXy5zZXRIZWlnaHQoKTtcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmZhZGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBfLnNldENTUyhfLmdldExlZnQoXy5jdXJyZW50U2xpZGUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF8uc2V0RmFkZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ3NldFBvc2l0aW9uJywgW19dKTtcblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuc2V0UHJvcHMgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2YXIgXyA9IHRoaXMsXG4gICAgICAgICAgICBib2R5U3R5bGUgPSBkb2N1bWVudC5ib2R5LnN0eWxlO1xuXG4gICAgICAgIF8ucG9zaXRpb25Qcm9wID0gXy5vcHRpb25zLnZlcnRpY2FsID09PSB0cnVlID8gJ3RvcCcgOiAnbGVmdCc7XG5cbiAgICAgICAgaWYgKF8ucG9zaXRpb25Qcm9wID09PSAndG9wJykge1xuICAgICAgICAgICAgXy4kc2xpZGVyLmFkZENsYXNzKCdzbGljay12ZXJ0aWNhbCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgXy4kc2xpZGVyLnJlbW92ZUNsYXNzKCdzbGljay12ZXJ0aWNhbCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJvZHlTdHlsZS5XZWJraXRUcmFuc2l0aW9uICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGJvZHlTdHlsZS5Nb3pUcmFuc2l0aW9uICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGJvZHlTdHlsZS5tc1RyYW5zaXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy51c2VDU1MgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBfLmNzc1RyYW5zaXRpb25zID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICggXy5vcHRpb25zLmZhZGUgKSB7XG4gICAgICAgICAgICBpZiAoIHR5cGVvZiBfLm9wdGlvbnMuekluZGV4ID09PSAnbnVtYmVyJyApIHtcbiAgICAgICAgICAgICAgICBpZiggXy5vcHRpb25zLnpJbmRleCA8IDMgKSB7XG4gICAgICAgICAgICAgICAgICAgIF8ub3B0aW9ucy56SW5kZXggPSAzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgXy5vcHRpb25zLnpJbmRleCA9IF8uZGVmYXVsdHMuekluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJvZHlTdHlsZS5PVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIF8uYW5pbVR5cGUgPSAnT1RyYW5zZm9ybSc7XG4gICAgICAgICAgICBfLnRyYW5zZm9ybVR5cGUgPSAnLW8tdHJhbnNmb3JtJztcbiAgICAgICAgICAgIF8udHJhbnNpdGlvblR5cGUgPSAnT1RyYW5zaXRpb24nO1xuICAgICAgICAgICAgaWYgKGJvZHlTdHlsZS5wZXJzcGVjdGl2ZVByb3BlcnR5ID09PSB1bmRlZmluZWQgJiYgYm9keVN0eWxlLndlYmtpdFBlcnNwZWN0aXZlID09PSB1bmRlZmluZWQpIF8uYW5pbVR5cGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keVN0eWxlLk1velRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBfLmFuaW1UeXBlID0gJ01velRyYW5zZm9ybSc7XG4gICAgICAgICAgICBfLnRyYW5zZm9ybVR5cGUgPSAnLW1vei10cmFuc2Zvcm0nO1xuICAgICAgICAgICAgXy50cmFuc2l0aW9uVHlwZSA9ICdNb3pUcmFuc2l0aW9uJztcbiAgICAgICAgICAgIGlmIChib2R5U3R5bGUucGVyc3BlY3RpdmVQcm9wZXJ0eSA9PT0gdW5kZWZpbmVkICYmIGJvZHlTdHlsZS5Nb3pQZXJzcGVjdGl2ZSA9PT0gdW5kZWZpbmVkKSBfLmFuaW1UeXBlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJvZHlTdHlsZS53ZWJraXRUcmFuc2Zvcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgXy5hbmltVHlwZSA9ICd3ZWJraXRUcmFuc2Zvcm0nO1xuICAgICAgICAgICAgXy50cmFuc2Zvcm1UeXBlID0gJy13ZWJraXQtdHJhbnNmb3JtJztcbiAgICAgICAgICAgIF8udHJhbnNpdGlvblR5cGUgPSAnd2Via2l0VHJhbnNpdGlvbic7XG4gICAgICAgICAgICBpZiAoYm9keVN0eWxlLnBlcnNwZWN0aXZlUHJvcGVydHkgPT09IHVuZGVmaW5lZCAmJiBib2R5U3R5bGUud2Via2l0UGVyc3BlY3RpdmUgPT09IHVuZGVmaW5lZCkgXy5hbmltVHlwZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChib2R5U3R5bGUubXNUcmFuc2Zvcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgXy5hbmltVHlwZSA9ICdtc1RyYW5zZm9ybSc7XG4gICAgICAgICAgICBfLnRyYW5zZm9ybVR5cGUgPSAnLW1zLXRyYW5zZm9ybSc7XG4gICAgICAgICAgICBfLnRyYW5zaXRpb25UeXBlID0gJ21zVHJhbnNpdGlvbic7XG4gICAgICAgICAgICBpZiAoYm9keVN0eWxlLm1zVHJhbnNmb3JtID09PSB1bmRlZmluZWQpIF8uYW5pbVR5cGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9keVN0eWxlLnRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkICYmIF8uYW5pbVR5cGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBfLmFuaW1UeXBlID0gJ3RyYW5zZm9ybSc7XG4gICAgICAgICAgICBfLnRyYW5zZm9ybVR5cGUgPSAndHJhbnNmb3JtJztcbiAgICAgICAgICAgIF8udHJhbnNpdGlvblR5cGUgPSAndHJhbnNpdGlvbic7XG4gICAgICAgIH1cbiAgICAgICAgXy50cmFuc2Zvcm1zRW5hYmxlZCA9IF8ub3B0aW9ucy51c2VUcmFuc2Zvcm0gJiYgKF8uYW5pbVR5cGUgIT09IG51bGwgJiYgXy5hbmltVHlwZSAhPT0gZmFsc2UpO1xuICAgIH07XG5cblxuICAgIFNsaWNrLnByb3RvdHlwZS5zZXRTbGlkZUNsYXNzZXMgPSBmdW5jdGlvbihpbmRleCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgIGNlbnRlck9mZnNldCwgYWxsU2xpZGVzLCBpbmRleE9mZnNldCwgcmVtYWluZGVyO1xuXG4gICAgICAgIGFsbFNsaWRlcyA9IF8uJHNsaWRlclxuICAgICAgICAgICAgLmZpbmQoJy5zbGljay1zbGlkZScpXG4gICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NsaWNrLWFjdGl2ZSBzbGljay1jZW50ZXIgc2xpY2stY3VycmVudCcpXG4gICAgICAgICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuXG4gICAgICAgIF8uJHNsaWRlc1xuICAgICAgICAgICAgLmVxKGluZGV4KVxuICAgICAgICAgICAgLmFkZENsYXNzKCdzbGljay1jdXJyZW50Jyk7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlKSB7XG5cbiAgICAgICAgICAgI
2HZhciBldmVuQ29lZiA9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgJSAyID09PSAwID8gMSA6IDA7XG5cbiAgICAgICAgICAgIGNlbnRlck9mZnNldCA9IE1hdGguZmxvb3IoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAvIDIpO1xuXG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSB0cnVlKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY2VudGVyT2Zmc2V0ICYmIGluZGV4IDw9IChfLnNsaWRlQ291bnQgLSAxKSAtIGNlbnRlck9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICBfLiRzbGlkZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZShpbmRleCAtIGNlbnRlck9mZnNldCArIGV2ZW5Db2VmLCBpbmRleCArIGNlbnRlck9mZnNldCArIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3NsaWNrLWFjdGl2ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaW5kZXhPZmZzZXQgPSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ICsgaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIGFsbFNsaWRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGluZGV4T2Zmc2V0IC0gY2VudGVyT2Zmc2V0ICsgMSArIGV2ZW5Db2VmLCBpbmRleE9mZnNldCArIGNlbnRlck9mZnNldCArIDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3NsaWNrLWFjdGl2ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGFsbFNsaWRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLmVxKGFsbFNsaWRlcy5sZW5ndGggLSAxIC0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stY2VudGVyJyk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09PSBfLnNsaWRlQ291bnQgLSAxKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgYWxsU2xpZGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAuZXEoXy5vcHRpb25zLnNsaWRlc1RvU2hvdylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stY2VudGVyJyk7XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgXy4kc2xpZGVzXG4gICAgICAgICAgICAgICAgLmVxKGluZGV4KVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stY2VudGVyJyk7XG5cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gKF8uc2xpZGVDb3VudCAtIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpKSB7XG5cbiAgICAgICAgICAgICAgICBfLiRzbGlkZXNcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGluZGV4LCBpbmRleCArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stYWN0aXZlJylcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxsU2xpZGVzLmxlbmd0aCA8PSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XG5cbiAgICAgICAgICAgICAgICBhbGxTbGlkZXNcbiAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdzbGljay1hY3RpdmUnKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIHJlbWFpbmRlciA9IF8uc2xpZGVDb3VudCAlIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3c7XG4gICAgICAgICAgICAgICAgaW5kZXhPZmZzZXQgPSBfLm9wdGlvbnMuaW5maW5pdGUgPT09IHRydWUgPyBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ICsgaW5kZXggOiBpbmRleDtcblxuICAgICAgICAgICAgICAgIGlmIChfLm9wdGlvbnMuc2xpZGVzVG9TaG93ID09IF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCAmJiAoXy5zbGlkZUNvdW50IC0gaW5kZXgpIDwgXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuXG4gICAgICAgICAgICAgICAgICAgIGFsbFNsaWRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGluZGV4T2Zmc2V0IC0gKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgLSByZW1haW5kZXIpLCBpbmRleE9mZnNldCArIHJlbWFpbmRlcilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stYWN0aXZlJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdhcmlhLWh
2pZGRlbicsICdmYWxzZScpO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICBhbGxTbGlkZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZShpbmRleE9mZnNldCwgaW5kZXhPZmZzZXQgKyBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdzbGljay1hY3RpdmUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5sYXp5TG9hZCA9PT0gJ29uZGVtYW5kJyB8fCBfLm9wdGlvbnMubGF6eUxvYWQgPT09ICdhbnRpY2lwYXRlZCcpIHtcbiAgICAgICAgICAgIF8ubGF6eUxvYWQoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuc2V0dXBJbmZpbml0ZSA9IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgIGksIHNsaWRlSW5kZXgsIGluZmluaXRlQ291bnQ7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5mYWRlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBfLm9wdGlvbnMuY2VudGVyTW9kZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gdHJ1ZSAmJiBfLm9wdGlvbnMuZmFkZSA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgc2xpZGVJbmRleCA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5maW5pdGVDb3VudCA9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKyAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGluZmluaXRlQ291bnQgPSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAoaSA9IF8uc2xpZGVDb3VudDsgaSA+IChfLnNsaWRlQ291bnQgLVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5maW5pdGVDb3VudCk7IGkgLT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBzbGlkZUluZGV4ID0gaSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICQoXy4kc2xpZGVzW3NsaWRlSW5kZXhdKS5jbG9uZSh0cnVlKS5hdHRyKCdpZCcsICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2RhdGEtc2xpY2staW5kZXgnLCBzbGlkZUluZGV4IC0gXy5zbGlkZUNvdW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnByZXBlbmRUbyhfLiRzbGlkZVRyYWNrKS5hZGRDbGFzcygnc2xpY2stY2xvbmVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbmZpbml0ZUNvdW50ICArIF8uc2xpZGVDb3VudDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICAkKF8uJHNsaWRlc1tzbGlkZUluZGV4XSkuY2xvbmUodHJ1ZSkuYXR0cignaWQnLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdkYXRhLXNsaWNrLWluZGV4Jywgc2xpZGVJbmRleCArIF8uc2xpZGVDb3VudClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhfLiRzbGlkZVRyYWNrKS5hZGRDbGFzcygnc2xpY2stY2xvbmVkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suZmluZCgnLnNsaWNrLWNsb25lZCcpLmZpbmQoJ1tpZF0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2lkJywgJycpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5pbnRlcnJ1cHQgPSBmdW5jdGlvbiggdG9nZ2xlICkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcztcblxuICAgICAgICBpZiggIXRvZ2dsZSApIHtcbiAgICAgICAgICAgIF8uYXV0b1BsYXkoKTtcbiAgICAgICAgfVxuICAgICAgICBfLmludGVycnVwdGVkID0gdG9nZ2xlO1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5zZWxlY3RIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXM7XG5cbiAgICAgICAgdmFyIHRhcmdldEVsZW1lbnQgPVxuICAgICAgICAgICAgJChldmVudC50YXJnZXQpLmlzKCcuc2xpY2stc2xpZGUnKSA/XG4gICAgICAgICAgICAgICAgJChldmVudC50YXJnZXQpIDpcbiAgICAgICAgICAgICAgICAkKGV2ZW50LnRhcmdldCkucGFyZW50cygnLnNsaWNrLXNsaWRlJyk7XG5cbiAgICAgICAgdmFyIGluZGV4ID0gcGFyc2VJbnQodGFyZ2V0RWxlbWVudC5hdHRyKCdkYXRhLXNsaWNrLWluZGV4JykpO1xuXG4gICAgICAgIGlmICghaW5kZXgpIGluZGV4ID0gMDtcblxuICAgICAgICBpZiAoXy5zbGlkZUNvdW50IDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcblxuICAgICAgICAgICAgXy5zbGlkZUhhbmRsZXIoaW5kZXgsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB9XG5cbiAgICAgICAgXy5zbGlkZUhhbmRsZXIoaW5kZXgpO1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5zbGlkZUhhbmRsZXIgPSBmdW5jdGlvbihpbmRleCwgc3luYywgZG9udEFuaW1hdGUpIHtcblxuICAgICAgICB2YXIgdGFyZ2V0U2xpZGUsIGFuaW1TbGlkZSwgb2xkU2xpZGUsIHNsaWRlTGVmdCwgdGFyZ2V0TGVmdCA9IG51bGwsXG4gICAgICAgICAgICBfID0gdGhpcywgbmF2VGFyZ2V0O1xuXG4gICAgICAgIHN5bmMgPSBzeW5jIHx8IGZhbHNlO1xuXG4gICAgICAgIGlmIChfLmFuaW1hdGluZyA9PT0gdHJ1ZSAmJiBfLm9wdGlvbnMud2FpdEZvckFuaW1hdGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZmFkZSA9PT0gdHJ1ZSAmJiBfLmN1cnJlbnRTbGlkZSA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzeW5jID09PSBmYWxzZSkge1xuICAgICAgICAgICAgXy5hc05hdkZvcihpbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXRTbGlkZSA9IGluZGV4O1xuICAgICAgICB0YXJnZXRMZWZ0ID0gXy5nZXRMZWZ0KHRhcmdldFNsaWRlKTtcbiAgICAgICAgc2xpZGVMZWZ0ID0gXy5nZXRMZWZ0KF8uY3VycmVudFNsaWRlKTtcblxuICAgICAgICBfLmN1cnJlbnRMZWZ0ID0gXy5zd2lwZUxlZnQgPT09IG51bGwgPyBzbGlkZUxlZnQgOiBfLnN3aXBlTGVmdDtcblxuICAgICAgICBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSBmYWxzZSAmJiBfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gZmFsc2UgJiYgKGluZGV4IDwgMCB8fCBpbmRleCA+IF8uZ2V0RG90Q291bnQoKSAqIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCkpIHtcbiAgICAgICAgICAgIGlmIChfLm9wdGlvbnMuZmFkZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRTbGlkZSA9IF8uY3VycmVudFNsaWRlO1xuICAgICAgICAgICAgICAgIGlmIChkb250QW5pbWF0ZSAhPT0gdHJ1ZSAmJiBfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XG4gICAgICAgICAgICAgICAgICAgIF8uYW5pbWF0ZVNsaWRlKHNsaWRlTGVmdCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfLnBvc3RTbGlkZSh0YXJnZXRTbGlkZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF8ucG9zdFNsaWRlKHRhcmdldFNsaWRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSBmYWxzZSAmJiBfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gdHJ1ZSAmJiAoaW5kZXggPCAwIHx8IGluZGV4ID4gKF8uc2xpZGVDb3VudCAtIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCkpKSB7XG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLmZhZGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0U2xpZGUgPSBfLmN1cnJlbnRTbGlkZTtcbiAgICAgICAgICAgICAgICBpZiAoZG9udEFuaW1hdGUgIT09IHRydWUgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xuICAgICAgICAgICAgICAgICAgICBfLmFuaW1hdGVTbGlkZShzbGlkZUxlZnQsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgXy5wb3N0U2xpZGUodGFyZ2V0U2xpZGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfLnBvc3RTbGlkZSh0YXJnZXRTbGlkZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCBfLm9wdGlvbnMuYXV0b3BsYXkgKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKF8uYXV0b1BsYXlUaW1lcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFyZ2V0U2xpZGUgPCAwKSB7XG4gICAgICAgICAgICBpZiAoXy5zbGlkZUNvdW50ICUgXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgYW5pbVNsaWRlID0gXy5zbGlkZUNvdW50IC0gKF8uc2xpZGVDb3VudCAlIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFuaW1TbGlkZSA9IF8uc2xpZGVDb3VudCArIHRhcmdldFNsaWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFNsaWRlID49IF8uc2xpZGVDb3VudCkge1xuICAgICAgICAgICAgaWYgKF8uc2xpZGVDb3VudCAlIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGFuaW1TbGlkZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFuaW1TbGlkZSA9IHRhcmdldFNsaWRlIC0gXy5zbGlkZUNvdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5pbVNsaWRlID0gdGFyZ2V0U2xpZGU7XG4gICAgICAgIH1cblxuICAgICAgICBfLmFuaW1hdGluZyA9IHRydWU7XG5cbiAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ2JlZm9yZUNoYW5nZScsIFtfLCBfLmN1cnJlbnRTbGlkZSwgYW5pbVNsaWRlXSk7XG5cbiAgICAgICAgb2xkU2xpZGUgPSBfLmN1cnJlbnRTbGlkZTtcbiAgICAgICAgXy5jdXJyZW50U2xpZGUgPSBhbmltU2xpZGU7XG5cbiAgICAgICAgXy5zZXRTbGlkZUNsYXNzZXMoXy5jdXJyZW50U2xpZGUpO1xuXG4gICAgICAgIGlmICggXy5vcHRpb25zLmFzTmF2Rm9yICkge1xuXG4gICAgICAgICAgICBuYXZUYXJnZXQgPSBfLmdldE5hdlRhcmdldCgpO1xuICAgICAgICAgICAgbmF2VGFyZ2V0ID0gbmF2VGFyZ2V0LnNsaWNrKCdnZXRTbGljaycpO1xuXG4gICAgICAgICAgICBpZiAoIG5hdlRhcmdldC5zbGlkZUNvdW50IDw9IG5hdlRhcmdldC5vcHRpb25zLnNsaWRlc1RvU2hvdyApIHtcbiAgICAgICAgICAgICAgICBuYXZUYXJnZXQuc2V0U2xpZGVDbGFzc2VzKF8uY3VycmVudFNsaWRlKTtcbiAgICAgICAgICAgI
2H1cblxuICAgICAgICB9XG5cbiAgICAgICAgXy51cGRhdGVEb3RzKCk7XG4gICAgICAgIF8udXBkYXRlQXJyb3dzKCk7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy5mYWRlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoZG9udEFuaW1hdGUgIT09IHRydWUpIHtcblxuICAgICAgICAgICAgICAgIF8uZmFkZVNsaWRlT3V0KG9sZFNsaWRlKTtcblxuICAgICAgICAgICAgICAgIF8uZmFkZVNsaWRlKGFuaW1TbGlkZSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIF8ucG9zdFNsaWRlKGFuaW1TbGlkZSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgXy5wb3N0U2xpZGUoYW5pbVNsaWRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF8uYW5pbWF0ZUhlaWdodCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRvbnRBbmltYXRlICE9PSB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgICAgICAgIF8uYW5pbWF0ZVNsaWRlKHRhcmdldExlZnQsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIF8ucG9zdFNsaWRlKGFuaW1TbGlkZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF8ucG9zdFNsaWRlKGFuaW1TbGlkZSk7XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuc3RhcnRMb2FkID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuYXJyb3dzID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcblxuICAgICAgICAgICAgXy4kcHJldkFycm93LmhpZGUoKTtcbiAgICAgICAgICAgIF8uJG5leHRBcnJvdy5oaWRlKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZG90cyA9PT0gdHJ1ZSAmJiBfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XG5cbiAgICAgICAgICAgIF8uJGRvdHMuaGlkZSgpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBfLiRzbGlkZXIuYWRkQ2xhc3MoJ3NsaWNrLWxvYWRpbmcnKTtcblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuc3dpcGVEaXJlY3Rpb24gPSBmdW5jdGlvbigpIHtcblxuICAgICAgICB2Y
2XIgeERpc3QsIHlEaXN0LCByLCBzd2lwZUFuZ2xlLCBfID0gdGhpcztcblxuICAgICAgICB4RGlzdCA9IF8udG91Y2hPYmplY3Quc3RhcnRYIC0gXy50b3VjaE9iamVjdC5jdXJYO1xuICAgICAgICB5RGlzdCA9IF8udG91Y2hPYmplY3Quc3RhcnRZIC0gXy50b3VjaE9iamVjdC5jdXJZO1xuICAgICAgICByID0gTWF0aC5hdGFuMih5RGlzdCwgeERpc3QpO1xuXG4gICAgICAgIHN3aXBlQW5nbGUgPSBNYXRoLnJvdW5kKHIgKiAxODAgLyBNYXRoLlBJKTtcbiAgICAgICAgaWYgKHN3aXBlQW5nbGUgPCAwKSB7XG4gICAgICAgICAgICBzd2lwZUFuZ2xlID0gMzYwIC0gTWF0aC5hYnMoc3dpcGVBbmdsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHN3aXBlQW5nbGUgPD0gNDUpICYmIChzd2lwZUFuZ2xlID49IDApKSB7XG4gICAgICAgICAgICByZXR1cm4gKF8ub3B0aW9ucy5ydGwgPT09IGZhbHNlID8gJ2xlZnQnIDogJ3JpZ2h0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChzd2lwZUFuZ2xlIDw9IDM2MCkgJiYgKHN3aXBlQW5nbGUgPj0gMzE1KSkge1xuICAgICAgICAgICAgcmV0dXJuIChfLm9wdGlvbnMucnRsID09PSBmYWxzZSA/ICdsZWZ0JyA6ICdyaWdodCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoc3dpcGVBbmdsZSA+PSAxMzUpICYmIChzd2lwZUFuZ2xlIDw9IDIyNSkpIHtcbiAgICAgICAgICAgIHJldHVybiAoXy5vcHRpb25zLnJ0bCA9PT0gZmFsc2UgPyAncmlnaHQnIDogJ2xlZnQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsU3dpcGluZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKChzd2lwZUFuZ2xlID49IDM1KSAmJiAoc3dpcGVBbmdsZSA8PSAxMzUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkb3duJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd1cCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJ3ZlcnRpY2FsJztcblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuc3dpcGVFbmQgPSBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgIHNsaWRlQ291bnQsXG4gICAgICAgICAgICBkaXJlY3Rpb247XG5cbiAgICAgICAgXy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICBfLnN3aXBpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAoXy5zY3JvbGxpbmcpIHtcbiAgICAgICAgICAgIF8uc2Nyb2xsaW5nID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBfLmludGVycnVwdGVkID0gZmFsc2U7XG4gICAgICAgIF8uc2hvdWxkQ2xpY2sgPSAoIF8udG91Y2hPYmplY3Quc3dpcGVMZW5ndGggPiAxMCApID8gZmFsc2UgOiB0cnVlO1xuXG4gICAgICAgIGlmICggXy50b3VjaE9iamVjdC5jdXJYID09PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIF8udG91Y2hPYmplY3QuZWRnZUhpdCA9PT0gdHJ1ZSApIHtcbiAgICAgICAgICAgIF8uJHNsaWRlci50cmlnZ2VyKCdlZGdlJywgW18sIF8uc3dpcGVEaXJlY3Rpb24oKSBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICggXy50b3VjaE9iamVjdC5zd2lwZUxlbmd0aCA+PSBfLnRvdWNoT2JqZWN0Lm1pblN3aXBlICkge1xuXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBfLnN3aXBlRGlyZWN0aW9uKCk7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoIGRpcmVjdGlvbiApIHtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rvd24nOlxuXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlQ291bnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgXy5vcHRpb25zLnN3aXBlVG9TbGlkZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5jaGVja05hdmlnYWJsZSggXy5jdXJyZW50U2xpZGUgKyBfLmdldFNsaWRlQ291bnQoKSApIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmN1cnJlbnRTbGlkZSArIF8uZ2V0U2xpZGVDb3VudCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIF8uY3VycmVudERpcmVjdGlvbiA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndXAnOlxuXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlQ291bnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgXy5vcHRpb25zLnN3aXBlVG9TbGlkZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5jaGVja05hdmlnYWJsZSggXy5jdXJyZW50U2xpZGUgLSBfLmdldFNsaWRlQ291bnQoKSApIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmN1cnJlbnRTbGlkZSAtIF8uZ2V0U2xpZGVDb3VudCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIF8uY3VycmVudERpcmVjdGlvbiA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuXG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoIGRpcmVjdGlvbiAhPSAndmVydGljYWwnICkge1xuXG4gICAgICAgICAgICAgICAgXy5zbGlkZUhhbmRsZXIoIHNsaWRlQ291bnQgKTtcbiAgICAgICAgICAgICAgICBfLnRvdWNoT2JqZWN0ID0ge307XG4gICAgICAgICAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ3N3aXBlJywgW18sIGRpcmVjdGlvbiBdKTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIGlmICggXy50b3VjaE9iamVjdC5zdGFydFggIT09IF8udG91Y2hPYmplY3QuY3VyWCApIHtcblxuICAgICAgICAgICAgICAgIF8uc2xpZGVIYW5kbGVyKCBfLmN1cnJlbnRTbGlkZSApO1xuICAgICAgICAgICAgICAgIF8udG91Y2hPYmplY3QgPSB7fTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUuc3dpcGVIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQpIHtcblxuICAgICAgICB2Y
2XIgXyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKChfLm9wdGlvbnMuc3dpcGUgPT09IGZhbHNlKSB8fCAoJ29udG91Y2hlbmQnIGluIGRvY3VtZW50ICYmIF8ub3B0aW9ucy5zd2lwZSA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoXy5vcHRpb25zLmRyYWdnYWJsZSA9PT0gZmFsc2UgJiYgZXZlbnQudHlwZS5pbmRleE9mKCdtb3VzZScpICE9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgXy50b3VjaE9iamVjdC5maW5nZXJDb3VudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQgJiYgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzLmxlbmd0aCA6IDE7XG5cbiAgICAgICAgXy50b3VjaE9iamVjdC5taW5Td2lwZSA9IF8ubGlzdFdpZHRoIC8gXy5vcHRpb25zXG4gICAgICAgICAgICAudG91Y2hUaHJlc2hvbGQ7XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy52ZXJ0aWNhbFN3aXBpbmcgPT09IHRydWUpIHtcbiAgICAgICAgICAgIF8udG91Y2hPYmplY3QubWluU3dpcGUgPSBfLmxpc3RIZWlnaHQgLyBfLm9wdGlvbnNcbiAgICAgICAgICAgICAgICAudG91Y2hUaHJlc2hvbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmRhdGEuYWN0aW9uKSB7XG5cbiAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICAgICAgICBfLnN3aXBlU3RhcnQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdtb3ZlJzpcbiAgICAgICAgICAgICAgICBfLnN3aXBlTW92ZShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgXy5zd2lwZUVuZChldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS5zd2lwZU1vdmUgPSBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgIGVkZ2VXYXNIaXQgPSBmYWxzZSxcbiAgICAgICAgICAgIGN1ckxlZnQsIHN3aXBlRGlyZWN0aW9uLCBzd2lwZUxlbmd0aCwgcG9zaXRpb25PZmZzZXQsIHRvdWNoZXMsIHZlcnRpY2FsU3dpcGVMZW5ndGg7XG5cbiAgICAgICAgdG91Y2hlcyA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQgIT09IHVuZGVmaW5lZCA/IGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlcyA6IG51bGw7XG5cbiAgICAgICAgaWYgKCFfLmRyYWdnaW5nIHx8IF8uc2Nyb2xsaW5nIHx8IHRvdWNoZXMgJiYgdG91Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1ckxlZnQgPSBfLmdldExlZnQoXy5jdXJyZW50U2xpZGUpO1xuXG4gICAgICAgIF8udG91Y2hPYmplY3QuY3VyWCA9IHRvdWNoZXMgIT09IHVuZGVmaW5lZCA/IHRvdWNoZXNbMF0ucGFnZVggOiBldmVudC5jbGllbnRYO1xuICAgICAgICBfLnRvdWNoT2JqZWN0LmN1clkgPSB0b3VjaGVzICE9PSB1bmRlZmluZWQgPyB0b3VjaGVzWzBdLnBhZ2VZIDogZXZlbnQuY2xpZW50WTtcblxuICAgICAgICBfLnRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoID0gTWF0aC5yb3VuZChNYXRoLnNxcnQoXG4gICAgICAgICAgICBNYXRoLnBvdyhfLnRvdWNoT2JqZWN0LmN1clggLSBfLnRvdWNoT2JqZWN0LnN0YXJ0WCwgMikpKTtcblxuICAgICAgICB2ZXJ0aWNhbFN3aXBlTGVuZ3RoID0gTWF0aC5yb3VuZChNYXRoLnNxcnQoXG4gICAgICAgICAgICBNYXRoLnBvdyhfLnRvdWNoT2JqZWN0LmN1clkgLSBfLnRvdWNoT2JqZWN0LnN0YXJ0WSwgMikpKTtcblxuICAgICAgICBpZiAoIV8ub3B0aW9ucy52ZXJ0aWNhbFN3aXBpbmcgJiYgIV8uc3dpcGluZyAmJiB2ZXJ0aWNhbFN3aXBlTGVuZ3RoID4gNCkge1xuICAgICAgICAgICAgXy5zY3JvbGxpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy52ZXJ0aWNhbFN3aXBpbmcgPT09IHRydWUpIHtcbiAgICAgICAgICAgIF8udG91Y2hPYmplY3Quc3dpcGVMZW5ndGggPSB2ZXJ0aWNhbFN3aXBlTGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpcGVEaXJlY3Rpb24gPSBfLnN3aXBlRGlyZWN0aW9uKCk7XG5cbiAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQgIT09IHVuZGVmaW5lZCAmJiBfLnRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoID4gNCkge1xuICAgICAgICAgICAgXy5zd2lwaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBwb3NpdGlvbk9mZnNldCA9IChfLm9wdGlvbnMucnRsID09PSBmYWxzZSA/IDEgOiAtMSkgKiAoXy50b3VjaE9iamVjdC5jdXJYID4gXy50b3VjaE9iamVjdC5zdGFydFggPyAxIDogLTEpO1xuICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsU3dpcGluZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcG9zaXRpb25PZmZzZXQgPSBfLnRvdWNoT2JqZWN0LmN1clkgPiBfLnRvdWNoT2JqZWN0LnN0YXJ0WSA/IDEgOiAtMTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgc3dpcGVMZW5ndGggPSBfLnRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoO1xuXG4gICAgICAgIF8udG91Y2hPYmplY3QuZWRnZUhpdCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuaW5maW5pdGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoKF8uY3VycmVudFNsaWRlID09PSAwICYmIHN3aXBlRGlyZWN0aW9uID09PSAncmlnaHQnKSB8fCAoXy5jdXJyZW50U2xpZGUgPj0gXy5nZXREb3RDb3VudCgpICYmIHN3aXBlRGlyZWN0aW9uID09PSAnbGVmdCcpKSB7XG4gICAgICAgICAgICAgICAgc3dpcGVMZW5ndGggPSBfLnRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoICogXy5vcHRpb25zLmVkZ2VGcmljdGlvbjtcbiAgICAgICAgICAgICAgICBfLnRvdWNoT2JqZWN0LmVkZ2VIaXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIF8uc3dpcGVMZWZ0ID0gY3VyTGVmdCArIHN3aXBlTGVuZ3RoICogcG9zaXRpb25PZmZzZXQ7XG4gICAgICAgI
2H0gZWxzZSB7XG4gICAgICAgICAgICBfLnN3aXBlTGVmdCA9IGN1ckxlZnQgKyAoc3dpcGVMZW5ndGggKiAoXy4kbGlzdC5oZWlnaHQoKSAvIF8ubGlzdFdpZHRoKSkgKiBwb3NpdGlvbk9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsU3dpcGluZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgXy5zd2lwZUxlZnQgPSBjdXJMZWZ0ICsgc3dpcGVMZW5ndGggKiBwb3NpdGlvbk9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZmFkZSA9PT0gdHJ1ZSB8fCBfLm9wdGlvbnMudG91Y2hNb3ZlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8uYW5pbWF0aW5nID09PSB0cnVlKSB7XG4gICAgICAgICAgICBfLnN3aXBlTGVmdCA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBfLnNldENTUyhfLnN3aXBlTGVmdCk7XG5cbiAgICB9O1xuXG4gICAgU2xpY2sucHJvdG90eXBlLnN3aXBlU3RhcnQgPSBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICAgIHZhciBfID0gdGhpcyxcbiAgICAgICAgICAgIHRvdWNoZXM7XG5cbiAgICAgICAgXy5pbnRlcnJ1cHRlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKF8udG91Y2hPYmplY3QuZmluZ2VyQ291bnQgIT09IDEgfHwgXy5zbGlkZUNvdW50IDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcbiAgICAgICAgICAgIF8udG91Y2hPYmplY3QgPSB7fTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRvdWNoZXMgPSBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF07XG4gICAgICAgIH1cblxuICAgICAgICBfLnRvdWNoT2JqZWN0LnN0YXJ0WCA9IF8udG91Y2hPYmplY3QuY3VyWCA9IHRvdWNoZXMgIT09IHVuZGVmaW5lZCA/IHRvdWNoZXMucGFnZVggOiBldmVudC5jbGllbnRYO1xuICAgICAgICBfLnRvdWNoT2JqZWN0LnN0YXJ0WSA9IF8udG91Y2hPYmplY3QuY3VyWSA9IHRvdWNoZXMgIT09IHVuZGVmaW5lZCA/IHRvdWNoZXMucGFnZVkgOiBldmVudC5jbGllbnRZO1xuXG4gICAgICAgIF8uZHJhZ2dpbmcgPSB0cnVlO1xuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS51bmZpbHRlclNsaWRlcyA9IFNsaWNrLnByb3RvdHlwZS5zbGlja1VuZmlsdGVyID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmIChfLiRzbGlkZXNDYWNoZSAhPT0gbnVsbCkge1xuXG4gICAgICAgICAgICBfLnVubG9hZCgpO1xuXG4gICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKHRoaXMub3B0aW9ucy5zbGlkZSkuZGV0YWNoKCk7XG5cbiAgICAgICAgICAgIF8uJHNsaWRlc0NhY2hlLmFwcGVuZFRvKF8uJHNsaWRlVHJhY2spO1xuXG4gICAgICAgICAgICBfLnJlaW5pdCgpO1xuXG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUudW5sb2FkID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgICQoJy5zbGljay1jbG9uZWQnLCBfLiRzbGlkZXIpLnJlbW92ZSgpO1xuXG4gICAgICAgIGlmIChfLiRkb3RzKSB7XG4gICAgICAgICAgICBfLiRkb3RzLnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF8uJHByZXZBcnJvdyAmJiBfLmh0bWxFeHByLnRlc3QoXy5vcHRpb25zLnByZXZBcnJvdykpIHtcbiAgICAgICAgICAgIF8uJHByZXZBcnJvdy5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfLiRuZXh0QXJyb3cgJiYgXy5odG1sRXhwci50ZXN0KF8ub3B0aW9ucy5uZXh0QXJyb3cpKSB7XG4gICAgICAgICAgICBfLiRuZXh0QXJyb3cucmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBfLiRzbGlkZXNcbiAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2xpY2stc2xpZGUgc2xpY2stYWN0aXZlIHNsaWNrLXZpc2libGUgc2xpY2stY3VycmVudCcpXG4gICAgICAgICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpXG4gICAgICAgICAgICAuY3NzKCd3aWR0aCcsICcnKTtcblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUudW5zbGljayA9IGZ1bmN0aW9uKGZyb21CcmVha3BvaW50KSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuICAgICAgICBfLiRzbGlkZXIudHJpZ2dlcigndW5zbGljaycsIFtfLCBmcm9tQnJlYWtwb2ludF0pO1xuICAgICAgICBfLmRlc3Ryb3koKTtcblxuICAgIH07XG5cbiAgICBTbGljay5wcm90b3R5cGUudXBkYXRlQXJyb3dzID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgY2VudGVyT2Zmc2V0O1xuXG4gICAgICAgIGNlbnRlck9mZnNldCA9IE1hdGguZmxvb3IoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAvIDIpO1xuXG4gICAgICAgIGlmICggXy5vcHRpb25zLmFycm93cyA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAmJlxuICAgICAgICAgICAgIV8ub3B0aW9ucy5pbmZpbml0ZSApIHtcblxuICAgICAgICAgICAgXy4kcHJldkFycm93LnJlbW92ZUNsYXNzKCdzbGljay1kaXNhYmxlZCcpLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgIF8uJG5leHRBcnJvdy5yZW1vdmVDbGFzcygnc2xpY2stZGlzYWJsZWQnKS5hdHRyKCdhcmlhLWRpc2FibGVkJywgJ2ZhbHNlJyk7XG5cbiAgICAgICAgICAgIGlmIChfLmN1cnJlbnRTbGlkZSA9PT0gMCkge1xuXG4gICAgICAgICAgICAgICAgXy4kcHJldkFycm93LmFkZENsYXNzKCdzbGljay1kaXNhYmxlZCcpLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIF8uJG5leHRBcnJvdy5yZW1vdmVDbGFzcygnc2xpY2stZGlzYWJsZWQnKS5hdHRyKCdhcmlhLWRpc2FibGVkJywgJ2ZhbHNlJyk7XG5cbiAgICAgICAgICAgI
2H0gZWxzZSBpZiAoXy5jdXJyZW50U2xpZGUgPj0gXy5zbGlkZUNvdW50IC0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAmJiBfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIF8uJG5leHRBcnJvdy5hZGRDbGFzcygnc2xpY2stZGlzYWJsZWQnKS5hdHRyKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBfLiRwcmV2QXJyb3cucmVtb3ZlQ2xhc3MoJ3NsaWNrLWRpc2FibGVkJykuYXR0cignYXJpYS1kaXNhYmxlZCcsICdmYWxzZScpO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKF8uY3VycmVudFNsaWRlID49IF8uc2xpZGVDb3VudCAtIDEgJiYgXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUpIHtcblxuICAgICAgICAgICAgICAgIF8uJG5leHRBcnJvdy5hZGRDbGFzcygnc2xpY2stZGlzYWJsZWQnKS5hdHRyKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBfLiRwcmV2QXJyb3cucmVtb3ZlQ2xhc3MoJ3NsaWNrLWRpc2FibGVkJykuYXR0cignYXJpYS1kaXNhYmxlZCcsICdmYWxzZScpO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS51cGRhdGVEb3RzID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmIChfLiRkb3RzICE9PSBudWxsKSB7XG5cbiAgICAgICAgICAgIF8uJGRvdHNcbiAgICAgICAgICAgICAgICAuZmluZCgnbGknKVxuICAgICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NsaWNrLWFjdGl2ZScpXG4gICAgICAgICAgICAgICAgICAgIC5lbmQoKTtcblxuICAgICAgICAgICAgXy4kZG90c1xuICAgICAgICAgICAgICAgIC5maW5kKCdsaScpXG4gICAgICAgICAgICAgICAgLmVxKE1hdGguZmxvb3IoXy5jdXJyZW50U2xpZGUgLyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwpKVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stYWN0aXZlJyk7XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIFNsaWNrLnByb3RvdHlwZS52aXNpYmlsaXR5ID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgdmFyIF8gPSB0aGlzO1xuXG4gICAgICAgIGlmICggXy5vcHRpb25zLmF1dG9wbGF5ICkge1xuXG4gICAgICAgICAgICBpZiAoIGRvY3VtZW50W18uaGlkZGVuXSApIHtcblxuICAgICAgICAgICAgICAgIF8uaW50ZXJydXB0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgXy5pbnRlcnJ1cHRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgICQuZm4uc2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIF8gPSB0aGlzLFxuICAgICAgICAgICAgb3B0ID0gYXJndW1lbnRzWzBdLFxuICAgICAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSksXG4gICAgICAgICAgICBsID0gXy5sZW5ndGgsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcmV0O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdCA9PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb3B0ID09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgIF9baV0uc2xpY2sgPSBuZXcgU2xpY2soX1tpXSwgb3B0KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXQgPSBfW2ldLnNsaWNrW29wdF0uYXBwbHkoX1tpXS5zbGljaywgYXJncyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJldCAhPSAndW5kZWZpbmVkJykgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXztcbiAgICB9O1xuXG59KSk7XG4iLCIvKiohXG4gKiBAZmlsZU92ZXJ2aWV3IEtpY2thc3MgbGlicmFyeSB0byBjcmVhdGUgYW5kIHBsYWNlIHBvcHBlcnMgbmVhciB0aGVpciByZWZlcmVuY2UgZWxlbWVudHMuXG4gKiBAdmVyc2lvbiAxLjE2LjFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgRmVkZXJpY28gWml2b2xvIGFuZCBjb250cmlidXRvcnNcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuXHR0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG5cdHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG5cdChnbG9iYWwuUG9wcGVyID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNCcm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJztcblxudmFyIHRpbWVvdXREdXJhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxvbmdlclRpbWVvdXRCcm93c2VycyA9IFsnRWRnZScsICdUcmlkZW50JywgJ0ZpcmVmb3gnXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25nZXJUaW1lb3V0QnJvd3NlcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoaXNCcm93c2VyICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihsb25nZXJUaW1lb3V0QnJvd3NlcnNbaV0pID49IDApIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn0oKTtcblxuZnVuY3Rpb24gbWljcm90YXNrRGVib3VuY2UoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICB3aW5kb3cuUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsZWQgPSBmYWxzZTtcbiAgICAgIGZuKCk7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRhc2tEZWJvdW5jZShmbikge1xuICB2YXIgc2NoZWR1bGVkID0gZmFsc2U7XG4gIHJldHVybi
2BmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzY2hlZHVsZWQpIHtcbiAgICAgIHNjaGVkdWxlZCA9IHRydWU7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgIGZuKCk7XG4gICAgICB9LCB0aW1lb3V0RHVyYXRpb24pO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIHN1cHBvcnRzTWljcm9UYXNrcyA9IGlzQnJvd3NlciAmJiB3aW5kb3cuUHJvbWlzZTtcblxuLyoqXG4qIENyZWF0ZSBhIGRlYm91bmNlZCB2ZXJzaW9uIG9mIGEgbWV0aG9kLCB0aGF0J3MgYXN5bmNocm9ub3VzbHkgZGVmZXJyZWRcbiogYnV0IGNhbGxlZCBpbiB0aGUgbWluaW11bSB0aW1lIHBvc3NpYmxlLlxuKlxuKiBAbWV0aG9kXG4qIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiogQGFyZ3VtZW50IHtGdW5jdGlvbn0gZm5cbiogQHJldHVybnMge0Z1bmN0aW9ufVxuKi9cbnZhciBkZWJvdW5jZSA9IHN1cHBvcnRzTWljcm9UYXNrcyA/IG1pY3JvdGFza0RlYm91bmNlIDogdGFza0RlYm91bmNlO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhIGZ1bmN0aW9uXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0FueX0gZnVuY3Rpb25Ub0NoZWNrIC0gdmFyaWFibGUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSBhbnN3ZXIgdG86IGlzIGEgZnVuY3Rpb24/XG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oZnVuY3Rpb25Ub0NoZWNrKSB7XG4gIHZhciBnZXRUeXBlID0ge307XG4gIHJldHVybiBmdW5jdGlvblRvQ2hlY2sgJiYgZ2V0VHlwZS50b1N0cmluZy5jYWxsKGZ1bmN0aW9uVG9DaGVjaykgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogR2V0IENTUyBjb21wdXRlZCBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFZW1lbnR9IGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgaWYgKGVsZW1lbnQubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgdmFyIHdpbmRvdyA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgdmFyIGNzcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpO1xuICByZXR1cm4gcHJvcGVydHkgPyBjc3NbcHJvcGVydHldIDogY3NzO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhcmVudE5vZGUgb3IgdGhlIGhvc3Qgb2YgdGhlIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHBhcmVudFxuICovXG5mdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIHJldHVybiBlbGVtZW50LnBhcmVudE5vZGUgfHwgZWxlbWVudC5ob3N0O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHNjcm9sbGluZyBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IHNjcm9sbCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gUmV0dXJuIGJvZHksIGBnZXRTY3JvbGxgIHdpbGwgdGFrZSBjYXJlIHRvIGdldCB0aGUgY29ycmVjdCBgc2Nyb2xsVG9wYCBmcm9tIGl0XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgc3dpdGNoIChlbGVtZW50Lm5vZGVOYW1lKSB7XG4gICAgY2FzZSAnSFRNTCc6XG4gICAgY2FzZSAnQk9EWSc6XG4gICAgICByZXR1cm4gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgIHJldHVybiBlbGVtZW50LmJvZHk7XG4gIH1cblxuICAvLyBGaXJlZm94IHdhbnQgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcblxuICB2YXIgX2dldFN0eWxlQ29tcHV0ZWRQcm9wID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0U3R5bGVDb21wdXRlZFByb3Aub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldFN0eWxlQ29tcHV0ZWRQcm9wLm92ZXJmbG93WTtcblxuICBpZiAoLyhhdXRvfHNjcm9sbHxvdmVybGF5KS8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVmZXJlbmNlIG5vZGUgb2YgdGhlIHJlZmVyZW5jZSBvYmplY3QsIG9yIHRoZSByZWZlcmVuY2Ugb2JqZWN0IGl0c2VsZi5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IHJlZmVyZW5jZSAtIHRoZSByZWZlcmVuY2UgZWxlbWVudCAodGhlIHBvcHBlciB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoaXMpXG4gKiBAcmV0dXJucyB7RWxlbWVudH0gcGFyZW50XG4gKi9cbmZ1bmN0aW9uIGdldFJlZmVyZW5jZU5vZGUocmVmZXJlbmNlKSB7XG4gIHJldHVybiByZWZlcmVuY2UgJiYgcmVmZXJlbmNlLnJlZmVyZW5jZU5vZGUgPyByZWZlcmVuY2UucmVmZXJlbmNlTm9kZSA6IHJlZmVyZW5jZTtcbn1cblxudmFyIGlzSUUxMSA9IGlzQnJvd3NlciAmJiAhISh3aW5kb3cuTVNJbnB1dE1ldGhvZENvbnRleHQgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTtcbnZhciBpc0lFMTAgPSBpc0Jyb3dzZXIgJiYgL01TSUUgMTAvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgYnJvd3NlciBpcyBJbnRlcm5ldCBFeHBsb3JlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtOdW1iZXJ9IHZlcnNpb24gdG8gY2hlY2tcbiAqIEByZXR1cm5zIHtCb29sZWFufSBpc0lFXG4gKi9cbmZ1bmN0aW9uIGlzSUUodmVyc2lvbikge1xuICBpZiAodmVyc2lvbiA9PT0gMTEpIHtcbiAgICByZXR1cm4gaXNJRTExO1xuICB9XG4gIGlmICh2ZXJzaW9uID09PSAxMCkge1xuICAgIHJldHVybi
2Bpc0lFMTA7XG4gIH1cbiAgcmV0dXJuIGlzSUUxMSB8fCBpc0lFMTA7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb2Zmc2V0IHBhcmVudCBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RWxlbWVudH0gb2Zmc2V0IHBhcmVudFxuICovXG5mdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG5cbiAgdmFyIG5vT2Zmc2V0UGFyZW50ID0gaXNJRSgxMCkgPyBkb2N1bWVudC5ib2R5IDogbnVsbDtcblxuICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuICB2YXIgb2Zmc2V0UGFyZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQgfHwgbnVsbDtcbiAgLy8gU2tpcCBoaWRkZW4gZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhbiBvZmZzZXRQYXJlbnRcbiAgd2hpbGUgKG9mZnNldFBhcmVudCA9PT0gbm9PZmZzZXRQYXJlbnQgJiYgZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSAoZWxlbWVudCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKS5vZmZzZXRQYXJlbnQ7XG4gIH1cblxuICB2YXIgbm9kZU5hbWUgPSBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50Lm5vZGVOYW1lO1xuXG4gIGlmICghbm9kZU5hbWUgfHwgbm9kZU5hbWUgPT09ICdCT0RZJyB8fCBub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQgPyBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG5cbiAgLy8gLm9mZnNldFBhcmVudCB3aWxsIHJldHVybiB0aGUgY2xvc2VzdCBUSCwgVEQgb3IgVEFCTEUgaW4gY2FzZVxuICAvLyBubyBvZmZzZXRQYXJlbnQgaXMgcHJlc2VudCwgSSBoYXRlIHRoaXMgam9iLi4uXG4gIGlmIChbJ1RIJywgJ1REJywgJ1RBQkxFJ10uaW5kZXhPZihvZmZzZXRQYXJlbnQubm9kZU5hbWUpICE9PSAtMSAmJiBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkob2Zmc2V0UGFyZW50LCAncG9zaXRpb24nKSA9PT0gJ3N0YXRpYycpIHtcbiAgICByZXR1cm4gZ2V0T2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50O1xufVxuXG5mdW5jdGlvbiBpc09mZnNldENvbnRhaW5lcihlbGVtZW50KSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWU7XG5cbiAgaWYgKG5vZGVOYW1lID09PSAnQk9EWScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG5vZGVOYW1lID09PSAnSFRNTCcgfHwgZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQpID09PSBlbGVtZW50O1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSByb290IG5vZGUgKGRvY3VtZW50LCBzaGFkb3dET00gcm9vdCkgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gbm9kZVxuICogQHJldHVybnMge0VsZW1lbnR9IHJvb3Qgbm9kZVxuICovXG5mdW5jdGlvbiBnZXRSb290KG5vZGUpIHtcbiAgaWYgKG5vZGUucGFyZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIHJldHVybiBnZXRSb290KG5vZGUucGFyZW50Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgb2Zmc2V0IHBhcmVudCBjb21tb24gdG8gdGhlIHR3byBwcm92aWRlZCBub2Rlc1xuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50MVxuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50MlxuICogQHJldHVybnMge0VsZW1lbnR9IGNvbW1vbiBvZmZzZXQgcGFyZW50XG4gKi9cbmZ1bmN0aW9uIGZpbmRDb21tb25PZmZzZXRQYXJlbnQoZWxlbWVudDEsIGVsZW1lbnQyKSB7XG4gIC8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIHRvIGF2b2lkIGVycm9ycyBpbiBjYXNlIG9uZSBvZiB0aGUgZWxlbWVudHMgaXNuJ3QgZGVmaW5lZCBmb3IgYW55IHJlYXNvblxuICBpZiAoIWVsZW1lbnQxIHx8ICFlbGVtZW50MS5ub2RlVHlwZSB8fCAhZWxlbWVudDIgfHwgIWVsZW1lbnQyLm5vZGVUeXBlKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIC8vIEhlcmUgd2UgbWFrZSBzdXJlIHRvIGdpdmUgYXMgXCJzdGFydFwiIHRoZSBlbGVtZW50IHRoYXQgY29tZXMgZmlyc3QgaW4gdGhlIERPTVxuICB2YXIgb3JkZXIgPSBlbGVtZW50MS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlbGVtZW50MikgJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORztcbiAgdmFyIHN0YXJ0ID0gb3JkZXIgPyBlbGVtZW50MSA6IGVsZW1lbnQyO1xuICB2YXIgZW5kID0gb3JkZXIgPyBlbGVtZW50MiA6IGVsZW1lbnQxO1xuXG4gIC8vIEdldCBjb21tb24gYW5jZXN0b3IgY29udGFpbmVyXG4gIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0LCAwKTtcbiAgcmFuZ2Uuc2V0RW5kKGVuZCwgMCk7XG4gIHZhciBjb21tb25BbmNlc3RvckNvbnRhaW5lciA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xuXG4gIC8vIEJvdGggbm9kZXMgYXJlIGluc2lkZSAjZG9jdW1lbnRcblxuICBpZiAoZWxlbWVudDEgIT09IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyICYmIGVsZW1lbnQyICE9PSBjb21tb25BbmNlc3RvckNvbnRhaW5lciB8fCBzdGFydC5jb250YWlucyhlbmQpKSB7XG4gICAgaWYgKGlzT2Zmc2V0Q29udGFpbmVyKGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSkge1xuICAgICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRPZmZzZXRQYXJlbnQoY29tbW9uQW5jZXN0b3JDb250YWluZXIpO1xuICB9XG5cbiAgLy8gb25lIG9mIHRoZSBub2RlcyBpcyBpbnNpZGUgc2hhZG93RE9NLCBmaW5kIHdoaWNoIG9uZVxuICB2YXIgZWxlbWVudDFyb290ID0gZ2V0Um9vdChlbGVtZW50MSk7XG4gIGlmIChlbGVtZW50MXJvb3QuaG9zdCkge1xuICAgIHJldHVybi
2BmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQxcm9vdC5ob3N0LCBlbGVtZW50Mik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpbmRDb21tb25PZmZzZXRQYXJlbnQoZWxlbWVudDEsIGdldFJvb3QoZWxlbWVudDIpLmhvc3QpO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgc2Nyb2xsIHZhbHVlIG9mIHRoZSBnaXZlbiBlbGVtZW50IGluIHRoZSBnaXZlbiBzaWRlICh0b3AgYW5kIGxlZnQpXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBzaWRlIGB0b3BgIG9yIGBsZWZ0YFxuICogQHJldHVybnMge251bWJlcn0gYW1vdW50IG9mIHNjcm9sbGVkIHBpeGVsc1xuICovXG5mdW5jdGlvbiBnZXRTY3JvbGwoZWxlbWVudCkge1xuICB2YXIgc2lkZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ3RvcCc7XG5cbiAgdmFyIHVwcGVyU2lkZSA9IHNpZGUgPT09ICd0b3AnID8gJ3Njcm9sbFRvcCcgOiAnc2Nyb2xsTGVmdCc7XG4gIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWU7XG5cbiAgaWYgKG5vZGVOYW1lID09PSAnQk9EWScgfHwgbm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHZhciBodG1sID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICB2YXIgc2Nyb2xsaW5nRWxlbWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50IHx8IGh0bWw7XG4gICAgcmV0dXJuIHNjcm9sbGluZ0VsZW1lbnRbdXBwZXJTaWRlXTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50W3VwcGVyU2lkZV07XG59XG5cbi8qXG4gKiBTdW0gb3Igc3VidHJhY3QgdGhlIGVsZW1lbnQgc2Nyb2xsIHZhbHVlcyAobGVmdCBhbmQgdG9wKSBmcm9tIGEgZ2l2ZW4gcmVjdCBvYmplY3RcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWN0IC0gUmVjdCBvYmplY3QgeW91IHdhbnQgdG8gY2hhbmdlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgZnJvbSB0aGUgZnVuY3Rpb24gcmVhZHMgdGhlIHNjcm9sbCB2YWx1ZXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gc3VidHJhY3QgLSBzZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byBzdWJ0cmFjdCB0aGUgc2Nyb2xsIHZhbHVlc1xuICogQHJldHVybiB7T2JqZWN0fSByZWN0IC0gVGhlIG1vZGlmaWVyIHJlY3Qgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGluY2x1ZGVTY3JvbGwocmVjdCwgZWxlbWVudCkge1xuICB2YXIgc3VidHJhY3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuXG4gIHZhciBzY3JvbGxUb3AgPSBnZXRTY3JvbGwoZWxlbWVudCwgJ3RvcCcpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IGdldFNjcm9sbChlbGVtZW50LCAnbGVmdCcpO1xuICB2YXIgbW9kaWZpZXIgPSBzdWJ0cmFjdCA/IC0xIDogMTtcbiAgcmVjdC50b3AgKz0gc2Nyb2xsVG9wICogbW9kaWZpZXI7XG4gIHJlY3QuYm90dG9tICs9IHNjcm9sbFRvcCAqIG1vZGlmaWVyO1xuICByZWN0LmxlZnQgKz0gc2Nyb2xsTGVmdCAqIG1vZGlmaWVyO1xuICByZWN0LnJpZ2h0ICs9IHNjcm9sbExlZnQgKiBtb2RpZmllcjtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbi8qXG4gKiBIZWxwZXIgdG8gZGV0ZWN0IGJvcmRlcnMgb2YgYSBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0NTU1N0eWxlRGVjbGFyYXRpb259IHN0eWxlc1xuICogUmVzdWx0IG9mIGBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHlgIG9uIHRoZSBnaXZlbiBlbGVtZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gYXhpcyAtIGB4YCBvciBgeWBcbiAqIEByZXR1cm4ge251bWJlcn0gYm9yZGVycyAtIFRoZSBib3JkZXJzIHNpemUgb2YgdGhlIGdpdmVuIGF4aXNcbiAqL1xuXG5mdW5jdGlvbiBnZXRCb3JkZXJzU2l6ZShzdHlsZXMsIGF4aXMpIHtcbiAgdmFyIHNpZGVBID0gYXhpcyA9PT0gJ3gnID8gJ0xlZnQnIDogJ1RvcCc7XG4gIHZhciBzaWRlQiA9IHNpZGVBID09PSAnTGVmdCcgPyAnUmlnaHQnIDogJ0JvdHRvbSc7XG5cbiAgcmV0dXJuIHBhcnNlRmxvYXQoc3R5bGVzWydib3JkZXInICsgc2lkZUEgKyAnV2lkdGgnXSkgKyBwYXJzZUZsb2F0KHN0eWxlc1snYm9yZGVyJyArIHNpZGVCICsgJ1dpZHRoJ10pO1xufVxuXG5mdW5jdGlvbiBnZXRTaXplKGF4aXMsIGJvZHksIGh0bWwsIGNvbXB1dGVkU3R5bGUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KGJvZHlbJ29mZnNldCcgKyBheGlzXSwgYm9keVsnc2Nyb2xsJyArIGF4aXNdLCBodG1sWydjbGllbnQnICsgYXhpc10sIGh0bWxbJ29mZnNldCcgKyBheGlzXSwgaHRtbFsnc2Nyb2xsJyArIGF4aXNdLCBpc0lFKDEwKSA/IHBhcnNlSW50KGh0bWxbJ29mZnNldCcgKyBheGlzXSkgKyBwYXJzZUludChjb21wdXRlZFN0eWxlWydtYXJnaW4nICsgKGF4aXMgPT09ICdIZWlnaHQnID8gJ1RvcCcgOiAnTGVmdCcpXSkgKyBwYXJzZUludChjb21wdXRlZFN0eWxlWydtYXJnaW4nICsgKGF4aXMgPT09ICdIZWlnaHQnID8gJ0JvdHRvbScgOiAnUmlnaHQnKV0pIDogMCk7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd1NpemVzKGRvY3VtZW50KSB7XG4gIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgdmFyIGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciBjb21wdXRlZFN0eWxlID0gaXNJRSgxMCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShodG1sKTtcblxuICByZXR1cm4ge1xuICAgIGhlaWdodDogZ2V0U2l6ZSgnSGVpZ2h0JywgYm9keSwgaHRtbCwgY29tcHV0ZWRTdHlsZSksXG4gICAgd2lkdGg6IGdldFNpemUoJ1dpZHRoJywgYm9keSwgaHRtbCwgY29tcHV0ZWRTdHlsZSlcbiAgfTtcbn1cblxudmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cbnZhciBjcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci
253cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTtcblxuXG5cblxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG4vKipcbiAqIEdpdmVuIGVsZW1lbnQgb2Zmc2V0cywgZ2VuZXJhdGUgYW4gb3V0cHV0IHNpbWlsYXIgdG8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge09iamVjdH0gb2Zmc2V0c1xuICogQHJldHVybnMge09iamVjdH0gQ2xpZW50UmVjdCBsaWtlIG91dHB1dFxuICovXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0KG9mZnNldHMpIHtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvZmZzZXRzLCB7XG4gICAgcmlnaHQ6IG9mZnNldHMubGVmdCArIG9mZnNldHMud2lkdGgsXG4gICAgYm90dG9tOiBvZmZzZXRzLnRvcCArIG9mZnNldHMuaGVpZ2h0XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBib3VuZGluZyBjbGllbnQgcmVjdCBvZiBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtPYmplY3R9IGNsaWVudCByZWN0XG4gKi9cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0ge307XG5cbiAgLy8gSUUxMCAxMCBGSVg6IFBsZWFzZSwgZG9uJ3QgYXNrLCB0aGUgZWxlbWVudCBpc24ndFxuICAvLyBjb25zaWRlcmVkIGluIERPTSBpbiBzb21lIGNpcmN1bXN0YW5jZXMuLi5cbiAgLy8gVGhpcyBpc24ndCByZXByb2R1Y2libGUgaW4gSUUxMCBjb21wYXRpYmlsaXR5IG1vZGUgb2YgSUUxMVxuICB0cnkge1xuICAgIGlmIChpc0lFKDEwKSkge1xuICAgICAgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2Y
2XIgc2Nyb2xsVG9wID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICd0b3AnKTtcbiAgICAgIHZhciBzY3JvbGxMZWZ0ID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICdsZWZ0Jyk7XG4gICAgICByZWN0LnRvcCArPSBzY3JvbGxUb3A7XG4gICAgICByZWN0LmxlZnQgKz0gc2Nyb2xsTGVmdDtcbiAgICAgIHJlY3QuYm90dG9tICs9IHNjcm9sbFRvcDtcbiAgICAgIHJlY3QucmlnaHQgKz0gc2Nyb2xsTGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSB7XG4gICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgIHRvcDogcmVjdC50b3AsXG4gICAgd2lkdGg6IHJlY3QucmlnaHQgLSByZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiByZWN0LmJvdHRvbSAtIHJlY3QudG9wXG4gIH07XG5cbiAgLy8gc3VidHJhY3Qgc2Nyb2xsYmFyIHNpemUgZnJvbSBzaXplc1xuICB2YXIgc2l6ZXMgPSBlbGVtZW50Lm5vZGVOYW1lID09PSAnSFRNTCcgPyBnZXRXaW5kb3dTaXplcyhlbGVtZW50Lm93bmVyRG9jdW1lbnQpIDoge307XG4gIHZhciB3aWR0aCA9IHNpemVzLndpZHRoIHx8IGVsZW1lbnQuY2xpZW50V2lkdGggfHwgcmVzdWx0LndpZHRoO1xuICB2YXIgaGVpZ2h0ID0gc2l6ZXMuaGVpZ2h0IHx8IGVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IHJlc3VsdC5oZWlnaHQ7XG5cbiAgdmFyIGhvcml6U2Nyb2xsYmFyID0gZWxlbWVudC5vZmZzZXRXaWR0aCAtIHdpZHRoO1xuICB2YXIgdmVydFNjcm9sbGJhciA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gaGVpZ2h0O1xuXG4gIC8vIGlmIGFuIGh5cG90aGV0aWNhbCBzY3JvbGxiYXIgaXMgZGV0ZWN0ZWQsIHdlIG11c3QgYmUgc3VyZSBpdCdzIG5vdCBhIGBib3JkZXJgXG4gIC8vIHdlIG1ha2UgdGhpcyBjaGVjayBjb25kaXRpb25hbCBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICBpZiAoaG9yaXpTY3JvbGxiYXIgfHwgdmVydFNjcm9sbGJhcikge1xuICAgIHZhciBzdHlsZXMgPSBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCk7XG4gICAgaG9yaXpTY3JvbGxiYXIgLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAneCcpO1xuICAgIHZlcnRTY3JvbGxiYXIgLT0gZ2V0Qm9yZGVyc1NpemUoc3R5bGVzLCAneScpO1xuXG4gICAgcmVzdWx0LndpZHRoIC09IGhvcml6U2Nyb2xsYmFyO1xuICAgIHJlc3VsdC5oZWlnaHQgLT0gdmVydFNjcm9sbGJhcjtcbiAgfVxuXG4gIHJldHVybiBnZXRDbGllbnRSZWN0KHJlc3VsdCk7XG59XG5cbmZ1bmN0aW9uIGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShjaGlsZHJlbiwgcGFyZW50KSB7XG4gIHZhciBmaXhlZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICB2YXIgaXNJRTEwID0gaXNJRSgxMCk7XG4gIHZhciBpc0hUTUwgPSBwYXJlbnQubm9kZU5hbWUgPT09ICdIVE1MJztcbiAgdmFyIGNoaWxkcmVuUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChjaGlsZHJlbik7XG4gIHZhciBwYXJlbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHBhcmVudCk7XG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoY2hpbGRyZW4pO1xuXG4gIHZhciBzdHlsZXMgPSBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkocGFyZW50KTtcbiAgdmFyIGJvcmRlclRvcFdpZHRoID0gcGFyc2VGbG9hdChzdHlsZXMuYm9yZGVyVG9wV2lkdGgpO1xuICB2YXIgYm9yZGVyTGVmdFdpZHRoID0gcGFyc2VGbG9hdChzdHlsZXMuYm9yZGVyTGVmdFdpZHRoKTtcblxuICAvLyBJbiBjYXNlcyB3aGVyZSB0aGUgcGFyZW50IGlzIGZpeGVkLCB3ZSBtdXN0IGlnbm9yZSBuZWdhdGl2ZSBzY3JvbGwgaW4gb2Zmc2V0IGNhbGNcbiAgaWYgKGZpeGVkUG9zaXRpb24gJiYgaXNIVE1MKSB7XG4gICAgcGFyZW50UmVjdC50b3AgPSBNYXRoLm1heChwYXJlbnRSZWN0LnRvcCwgMCk7XG4gICAgcGFyZW50UmVjdC5sZWZ0ID0gTWF0aC5tYXgocGFyZW50UmVjdC5sZWZ0LCAwKTtcbiAgfVxuICB2YXIgb2Zmc2V0cyA9IGdldENsaWVudFJlY3Qoe1xuICAgIHRvcDogY2hpbGRyZW5SZWN0LnRvcCAtIHBhcmVudFJlY3QudG9wIC0gYm9yZGVyVG9wV2lkdGgsXG4gICAgbGVmdDogY2hpbGRyZW5SZWN0LmxlZnQgLSBwYXJlbnRSZWN0LmxlZnQgLSBib3JkZXJMZWZ0V2lkdGgsXG4gICAgd2lkdGg6IGNoaWxkcmVuUmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IGNoaWxkcmVuUmVjdC5oZWlnaHRcbiAgfSk7XG4gIG9mZnNldHMubWFyZ2luVG9wID0gMDtcbiAgb2Zmc2V0cy5tYXJnaW5MZWZ0ID0gMDtcblxuICAvLyBTdWJ0cmFjdCBtYXJnaW5zIG9mIGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGl0J3MgYmVpbmcgdXNlZCBhcyBwYXJlbnRcbiAgLy8gd2UgZG8gdGhpcyBvbmx5IG9uIEhUTUwgYmVjYXVzZSBpdCdzIHRoZSBvbmx5IGVsZW1lbnQgdGhhdCBiZWhhdmVzXG4gIC8vIGRpZmZlcmVudGx5IHdoZW4gbWFyZ2lucyBhcmUgYXBwbGllZCB0byBpdC4gVGhlIG1hcmdpbnMgYXJlIGluY2x1ZGVkIGluXG4gIC8vIHRoZSBib3ggb2YgdGhlIGRvY3VtZW50RWxlbWVudCwgaW4gdGhlIG90aGVyIGNhc2VzIG5vdC5cbiAgaWYgKCFpc0lFMTAgJiYgaXNIVE1MKSB7XG4gICAgdmFyIG1hcmdpblRvcCA9IHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpblRvcCk7XG4gICAgdmFyIG1hcmdpbkxlZnQgPSBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5MZWZ0KTtcblxuICAgIG9mZnNldHMudG9wIC09IGJvcmRlclRvcFdpZHRoIC0gbWFyZ2luVG9wO1xuICAgIG9mZnNldHMuYm90dG9tIC09IGJvcmRlclRvcFdpZHRoIC0gbWFyZ2luVG9wO1xuICAgIG9mZnNldHMubGVmdCAtPSBib3JkZXJMZWZ0V2lkdGggLSBtYXJnaW5MZWZ0O1xuICAgIG9mZnNldHMucmlnaHQgLT0gYm9yZGVyTGVmdFdpZHRoIC0gbWFyZ2luTGVmdDtcblxuICAgIC8vIEF0dGFjaCBtYXJnaW5Ub3AgYW5kIG1hcmdpbkxlZnQgYmVjYXVzZSBpbiBzb21lIGNpcmN1bXN0YW5jZXMgd2UgbWF5IG5lZWQgdGhlbVxuICAgIG9mZnNldHMubWFyZ2luVG9wID0gbWFy
2Z2luVG9wO1xuICAgIG9mZnNldHMubWFyZ2luTGVmdCA9IG1hcmdpbkxlZnQ7XG4gIH1cblxuICBpZiAoaXNJRTEwICYmICFmaXhlZFBvc2l0aW9uID8gcGFyZW50LmNvbnRhaW5zKHNjcm9sbFBhcmVudCkgOiBwYXJlbnQgPT09IHNjcm9sbFBhcmVudCAmJiBzY3JvbGxQYXJlbnQubm9kZU5hbWUgIT09ICdCT0RZJykge1xuICAgIG9mZnNldHMgPSBpbmNsdWRlU2Nyb2xsKG9mZnNldHMsIHBhcmVudCk7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0cztcbn1cblxuZnVuY3Rpb24gZ2V0Vmlld3BvcnRPZmZzZXRSZWN0UmVsYXRpdmVUb0FydGJpdHJhcnlOb2RlKGVsZW1lbnQpIHtcbiAgdmFyIGV4Y2x1ZGVTY3JvbGwgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gIHZhciBodG1sID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgdmFyIHJlbGF0aXZlT2Zmc2V0ID0gZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlKGVsZW1lbnQsIGh0bWwpO1xuICB2YXIgd2lkdGggPSBNYXRoLm1heChodG1sLmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTtcbiAgdmFyIGhlaWdodCA9IE1hdGgubWF4KGh0bWwuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7XG5cbiAgdmFyIHNjcm9sbFRvcCA9ICFleGNsdWRlU2Nyb2xsID8gZ2V0U2Nyb2xsKGh0bWwpIDogMDtcbiAgdmFyIHNjcm9sbExlZnQgPSAhZXhjbHVkZVNjcm9sbCA/IGdldFNjcm9sbChodG1sLCAnbGVmdCcpIDogMDtcblxuICB2YXIgb2Zmc2V0ID0ge1xuICAgIHRvcDogc2Nyb2xsVG9wIC0gcmVsYXRpdmVPZmZzZXQudG9wICsgcmVsYXRpdmVPZmZzZXQubWFyZ2luVG9wLFxuICAgIGxlZnQ6IHNjcm9sbExlZnQgLSByZWxhdGl2ZU9mZnNldC5sZWZ0ICsgcmVsYXRpdmVPZmZzZXQubWFyZ2luTGVmdCxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcblxuICByZXR1cm4gZ2V0Q2xpZW50UmVjdChvZmZzZXQpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlzIGZpeGVkIG9yIGlzIGluc2lkZSBhIGZpeGVkIHBhcmVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGN1c3RvbUNvbnRhaW5lclxuICogQHJldHVybnMge0Jvb2xlYW59IGFuc3dlciB0byBcImlzRml4ZWQ/XCJcbiAqL1xuZnVuY3Rpb24gaXNGaXhlZChlbGVtZW50KSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWU7XG4gIGlmIChub2RlTmFtZSA9PT0gJ0JPRFknIHx8IG5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbGVtZW50LCAncG9zaXRpb24nKSA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBwYXJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc0ZpeGVkKHBhcmVudE5vZGUpO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBmaXJzdCBwYXJlbnQgb2YgYW4gZWxlbWVudCB0aGF0IGhhcyBhIHRyYW5zZm9ybWVkIHByb3BlcnR5IGRlZmluZWRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge0VsZW1lbnR9IGZpcnN0IHRyYW5zZm9ybWVkIHBhcmVudCBvciBkb2N1bWVudEVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBnZXRGaXhlZFBvc2l0aW9uT2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gVGhpcyBjaGVjayBpcyBuZWVkZWQgdG8gYXZvaWQgZXJyb3JzIGluIGNhc2Ugb25lIG9mIHRoZSBlbGVtZW50cyBpc24ndCBkZWZpbmVkIGZvciBhbnkgcmVhc29uXG4gIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5wYXJlbnRFbGVtZW50IHx8IGlzSUUoKSkge1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cbiAgdmFyIGVsID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB3aGlsZSAoZWwgJiYgZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsLCAndHJhbnNmb3JtJykgPT09ICdub25lJykge1xuICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcbiAgfVxuICByZXR1cm4gZWwgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xufVxuXG4vKipcbiAqIENvbXB1dGVkIHRoZSBib3VuZGFyaWVzIGxpbWl0cyBhbmQgcmV0dXJuIHRoZW1cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcmVmZXJlbmNlXG4gKiBAcGFyYW0ge251bWJlcn0gcGFkZGluZ1xuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gYm91bmRhcmllc0VsZW1lbnQgLSBFbGVtZW50IHVzZWQgdG8gZGVmaW5lIHRoZSBib3VuZGFyaWVzXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGZpeGVkUG9zaXRpb24gLSBJcyBpbiBmaXhlZCBwb3NpdGlvbiBtb2RlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBDb29yZGluYXRlcyBvZiB0aGUgYm91bmRhcmllc1xuICovXG5mdW5jdGlvbiBnZXRCb3VuZGFyaWVzKHBvcHBlciwgcmVmZXJlbmNlLCBwYWRkaW5nLCBib3VuZGFyaWVzRWxlbWVudCkge1xuICB2YXIgZml4ZWRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogZmFsc2U7XG5cbiAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcblxuICB2YXIgYm91bmRhcmllcyA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBmaXhlZFBvc2l0aW9uID8gZ2V0Rml4ZWRQb3NpdGlvbk9mZnNldFBhcmVudChwb3BwZXIpIDogZmluZENvbW1vbk9mZnNldFBhcmVudChwb3BwZXIsIGdldFJlZmVyZW5jZU5vZGUocmVmZXJlbmNlKSk7XG5cbiAgLy8gSGFuZGxlIHZpZXdwb3J0IGNhc2VcbiAgaWYgKGJvdW5kYXJpZXNFbGVtZW50ID09PSAndmlld3BvcnQnKSB7XG4gICAgYm91bmRhcmllcyA9IGdldFZpZXdwb3J0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcnRiaXRyYXJ5Tm9kZShvZmZzZXRQYXJlbnQsIGZpeGVkUG9zaXRpb24pO1xuICB9IGVsc2Uge1xuICAgIC8vIEhhbmRsZSBvdGhlciBjYXNlcyBiYXNlZCBvbiBET00gZWxlbWVudCB1c2VkIGFzIGJvdW5kYXJpZXNcbiAgICB2YXIgYm91bmRhcmllc05vZGUgPSB2b2lkIDA7XG4gICAgaWYgKGJvdW5kYXJpZXNFbGVtZW50ID09PSAnc2Nyb2xsUGFyZW50Jykge1xuICAgICAgYm91bmRhcmllc05vZGUgPSBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShyZWZlcmVuY2UpKTtcbiAgICAgIGlmIChib3VuZGFyaWVzTm9kZS5ub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgIGJvdW5kYXJpZXNOb2RlID0gcG9wcGVyLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYm91bmRhcmllc0VsZW1lbnQgPT09ICd3aW5kb3cnKSB7XG4gICAgICBib3VuZGFyaWVzTm9kZSA9IHBvcHBlci5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgYm91bmRhcmllc05vZGUgPSBib3VuZGFyaWVzRWxlbWVudDtcbiAgICB9XG5cbiAgICB2YXIgb2Zmc2V0cyA9IGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShib3VuZGFyaWVzTm9kZSwgb2Zmc2V0UGFyZW50LCBmaXhlZFBvc2l0aW9uKTtcblxuICAgIC8vIEluIGNhc2Ugb2YgSFRNTCwgd2UgbmVlZCBhIGRpZmZlcmVudCBjb21wdXRhdGlvblxuICAgIGlmIChib3VuZGFyaWVzTm9kZS5ub2RlTmFtZSA9PT0gJ0hUTUwnICYmICFpc0ZpeGVkKG9mZnNldFBhcmVudCkpIHtcbiAgICAgIHZhciBfZ2V0V2luZG93U2l6ZXMgPSBnZXRXaW5kb3dTaXplcyhwb3BwZXIub3duZXJEb2N1bWVudCksXG4gICAgICAgICAgaGVpZ2h0ID0gX2dldFdpbmRvd1NpemVzLmhlaWdodCxcbiAgICAgICAgICB3aWR0aCA9IF9nZXRXaW5kb3dTaXplcy53aWR0aDtcblxuICAgICAgYm91bmRhcmllcy
250b3AgKz0gb2Zmc2V0cy50b3AgLSBvZmZzZXRzLm1hcmdpblRvcDtcbiAgICAgIGJvdW5kYXJpZXMuYm90dG9tID0gaGVpZ2h0ICsgb2Zmc2V0cy50b3A7XG4gICAgICBib3VuZGFyaWVzLmxlZnQgKz0gb2Zmc2V0cy5sZWZ0IC0gb2Zmc2V0cy5tYXJnaW5MZWZ0O1xuICAgICAgYm91bmRhcmllcy5yaWdodCA9IHdpZHRoICsgb2Zmc2V0cy5sZWZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb3IgYWxsIHRoZSBvdGhlciBET00gZWxlbWVudHMsIHRoaXMgb25lIGlzIGdvb2RcbiAgICAgIGJvdW5kYXJpZXMgPSBvZmZzZXRzO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBwYWRkaW5nc1xuICBwYWRkaW5nID0gcGFkZGluZyB8fCAwO1xuICB2YXIgaXNQYWRkaW5nTnVtYmVyID0gdHlwZW9mIHBhZGRpbmcgPT09ICdudW1iZXInO1xuICBib3VuZGFyaWVzLmxlZnQgKz0gaXNQYWRkaW5nTnVtYmVyID8gcGFkZGluZyA6IHBhZGRpbmcubGVmdCB8fCAwO1xuICBib3VuZGFyaWVzLnRvcCArPSBpc1BhZGRpbmdOdW1iZXIgPyBwYWRkaW5nIDogcGFkZGluZy50b3AgfHwgMDtcbiAgYm91bmRhcmllcy5yaWdodCAtPSBpc1BhZGRpbmdOdW1iZXIgPyBwYWRkaW5nIDogcGFkZGluZy5yaWdodCB8fCAwO1xuICBib3VuZGFyaWVzLmJvdHRvbSAtPSBpc1BhZGRpbmdOdW1iZXIgPyBwYWRkaW5nIDogcGFkZGluZy5ib3R0b20gfHwgMDtcblxuICByZXR1cm4gYm91bmRhcmllcztcbn1cblxuZnVuY3Rpb24gZ2V0QXJlYShfcmVmKSB7XG4gIHZhciB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICBoZWlnaHQgPSBfcmVmLmhlaWdodDtcblxuICByZXR1cm4gd2lkdGggKiBoZWlnaHQ7XG59XG5cbi8qKlxuICogVXRpbGl0eSB1c2VkIHRvIHRyYW5zZm9ybSB0aGUgYGF1dG9gIHBsYWNlbWVudCB0byB0aGUgcGxhY2VtZW50IHdpdGggbW9yZVxuICogYXZhaWxhYmxlIHNwYWNlLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQocGxhY2VtZW50LCByZWZSZWN0LCBwb3BwZXIsIHJlZmVyZW5jZSwgYm91bmRhcmllc0VsZW1lbnQpIHtcbiAgdmFyIHBhZGRpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IDA7XG5cbiAgaWYgKHBsYWNlbWVudC5pbmRleE9mKCdhdXRvJykgPT09IC0xKSB7XG4gICAgcmV0dXJuIHBsYWNlbWVudDtcbiAgfVxuXG4gIHZhciBib3VuZGFyaWVzID0gZ2V0Qm91bmRhcmllcyhwb3BwZXIsIHJlZmVyZW5jZSwgcGFkZGluZywgYm91bmRhcmllc0VsZW1lbnQpO1xuXG4gIHZhciByZWN0cyA9IHtcbiAgICB0b3A6IHtcbiAgICAgIHdpZHRoOiBib3VuZGFyaWVzLndpZHRoLFxuICAgICAgaGVpZ2h0OiByZWZSZWN0LnRvcCAtIGJvdW5kYXJpZXMudG9wXG4gICAgfSxcbiAgICByaWdodDoge1xuICAgICAgd2lkdGg6IGJvdW5kYXJpZXMucmlnaHQgLSByZWZSZWN0LnJpZ2h0LFxuICAgICAgaGVpZ2h0OiBib3VuZGFyaWVzLmhlaWdodFxuICAgIH0sXG4gICAgYm90dG9tOiB7XG4gICAgICB3aWR0aDogYm91bmRhcmllcy53aWR0aCxcbiAgICAgIGhlaWdodDogYm91bmRhcmllcy5ib3R0b20gLSByZWZSZWN0LmJvdHRvbVxuICAgIH0sXG4gICAgbGVmdDoge1xuICAgICAgd2lkdGg6IHJlZlJlY3QubGVmdCAtIGJvdW5kYXJpZXMubGVmdCxcbiAgICAgIGhlaWdodDogYm91bmRhcmllcy5oZWlnaHRcbiAgICB9XG4gIH07XG5cbiAgdmFyIHNvcnRlZEFyZWFzID0gT2JqZWN0LmtleXMocmVjdHMpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICAgIGtleToga2V5XG4gICAgfSwgcmVjdHNba2V5XSwge1xuICAgICAgYXJlYTogZ2V0QXJlYShyZWN0c1trZXldKVxuICAgIH0pO1xuICB9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGIuYXJlYSAtIGEuYXJlYTtcbiAgfSk7XG5cbiAgdmFyIGZpbHRlcmVkQXJlYXMgPSBzb3J0ZWRBcmVhcy5maWx0ZXIoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgdmFyIHdpZHRoID0gX3JlZjIud2lkdGgsXG4gICAgICAgIGhlaWdodCA9IF9yZWYyLmhlaWdodDtcbiAgICByZXR1cm4gd2lkdGggPj0gcG9wcGVyLmNsaWVudFdpZHRoICYmIGhlaWdodCA+PSBwb3BwZXIuY2xpZW50SGVpZ2h0O1xuICB9KTtcblxuICB2YXIgY29tcHV0ZWRQbGFjZW1lbnQgPSBmaWx0ZXJlZEFyZWFzLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZEFyZWFzWzBdLmtleSA6IHNvcnRlZEFyZWFzWzBdLmtleTtcblxuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG5cbiAgcmV0dXJuIGNvbXB1dGVkUGxhY2VtZW50ICsgKHZhcmlhdGlvbiA/ICctJyArIHZhcmlhdGlvbiA6ICcnKTtcbn1cblxuLyoqXG4gKiBHZXQgb2Zmc2V0cyB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtFbGVtZW50fSBwb3BwZXIgLSB0aGUgcG9wcGVyIGVsZW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudH0gcmVmZXJlbmNlIC0gdGhlIHJlZmVyZW5jZSBlbGVtZW50ICh0aGUgcG9wcGVyIHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhpcylcbiAqIEBwYXJhbSB7RWxlbWVudH0gZml4ZWRQb3NpdGlvbiAtIGlzIGluIGZpeGVkIHBvc2l0aW9uIG1vZGVcbiAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBvZmZzZXRzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGdldFJlZmVyZW5jZU9mZnNldHMoc3RhdGUsIHBvcHBlciwgcmVmZXJlbmNlKSB7XG4gIHZhciBmaXhlZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBudWxsO1xuXG4gIHZhciBjb21tb25PZmZzZXRQYXJlbnQgPSBmaXhlZFBvc2l0aW9uID8gZ2V0Rml4ZWRQb3NpdGlvbk9mZnNldFBhcmVudChwb3BwZXIpIDogZmluZENvbW1vbk9mZnNldFBhcmVudChwb3BwZXIsIGdldFJlZmVyZW5jZU5vZGUocmVmZXJlbmNlKSk7XG4gIHJldHVybi
2BnZXRPZmZzZXRSZWN0UmVsYXRpdmVUb0FyYml0cmFyeU5vZGUocmVmZXJlbmNlLCBjb21tb25PZmZzZXRQYXJlbnQsIGZpeGVkUG9zaXRpb24pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgb3V0ZXIgc2l6ZXMgb2YgdGhlIGdpdmVuIGVsZW1lbnQgKG9mZnNldCBzaXplICsgbWFyZ2lucylcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge09iamVjdH0gb2JqZWN0IGNvbnRhaW5pbmcgd2lkdGggYW5kIGhlaWdodCBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGdldE91dGVyU2l6ZXMoZWxlbWVudCkge1xuICB2YXIgd2luZG93ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICB2YXIgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHZhciB4ID0gcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luVG9wIHx8IDApICsgcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luQm90dG9tIHx8IDApO1xuICB2YXIgeSA9IHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpbkxlZnQgfHwgMCkgKyBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5SaWdodCB8fCAwKTtcbiAgdmFyIHJlc3VsdCA9IHtcbiAgICB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCArIHksXG4gICAgaGVpZ2h0OiBlbGVtZW50Lm9mZnNldEhlaWdodCArIHhcbiAgfTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG9wcG9zaXRlIHBsYWNlbWVudCBvZiB0aGUgZ2l2ZW4gb25lXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gcGxhY2VtZW50XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBmbGlwcGVkIHBsYWNlbWVudFxuICovXG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgdmFyIGhhc2ggPSB7IGxlZnQ6ICdyaWdodCcsIHJpZ2h0OiAnbGVmdCcsIGJvdHRvbTogJ3RvcCcsIHRvcDogJ2JvdHRvbScgfTtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IG9mZnNldHMgdG8gdGhlIHBvcHBlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtPYmplY3R9IHBvc2l0aW9uIC0gQ1NTIHBvc2l0aW9uIHRoZSBQb3BwZXIgd2lsbCBnZXQgYXBwbGllZFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wcGVyIC0gdGhlIHBvcHBlciBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gcmVmZXJlbmNlT2Zmc2V0cyAtIHRoZSByZWZlcmVuY2Ugb2Zmc2V0cyAodGhlIHBvcHBlciB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoaXMpXG4gKiBAcGFyYW0ge1N0cmluZ30gcGxhY2VtZW50IC0gb25lIG9mIHRoZSB2YWxpZCBwbGFjZW1lbnQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gcG9wcGVyT2Zmc2V0cyAtIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBvZmZzZXRzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGdldFBvcHBlck9mZnNldHMocG9wcGVyLCByZWZlcmVuY2VPZmZzZXRzLCBwbGFjZW1lbnQpIHtcbiAgcGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG5cbiAgLy8gR2V0IHBvcHBlciBub2RlIHNpemVzXG4gIHZhciBwb3BwZXJSZWN0ID0gZ2V0T3V0ZXJTaXplcyhwb3BwZXIpO1xuXG4gIC8vIEFkZCBwb3NpdGlvbiwgd2lkdGggYW5kIGhlaWdodCB0byBvdXIgb2Zmc2V0cyBvYmplY3RcbiAgdmFyIHBvcHBlck9mZnNldHMgPSB7XG4gICAgd2lkdGg6IHBvcHBlclJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiBwb3BwZXJSZWN0LmhlaWdodFxuICB9O1xuXG4gIC8vIGRlcGVuZGluZyBieSB0aGUgcG9wcGVyIHBsYWNlbWVudCB3ZSBoYXZlIHRvIGNvbXB1dGUgaXRzIG9mZnNldHMgc2xpZ2h0bHkgZGlmZmVyZW50bHlcbiAgdmFyIGlzSG9yaXogPSBbJ3JpZ2h0JywgJ2xlZnQnXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuICB2YXIgbWFpblNpZGUgPSBpc0hvcml6ID8gJ3RvcCcgOiAnbGVmdCc7XG4gIHZhciBzZWNvbmRhcnlTaWRlID0gaXNIb3JpeiA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgbWVhc3VyZW1lbnQgPSBpc0hvcml6ID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICB2YXIgc2Vjb25kYXJ5TWVhc3VyZW1lbnQgPSAhaXNIb3JpeiA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICBwb3BwZXJPZmZzZXRzW21haW5TaWRlXSA9IHJlZmVyZW5jZU9mZnNldHNbbWFpblNpZGVdICsgcmVmZXJlbmNlT2Zmc2V0c1ttZWFzdXJlbWVudF0gLyAyIC0gcG9wcGVyUmVjdFttZWFzdXJlbWVudF0gLyAyO1xuICBpZiAocGxhY2VtZW50ID09PSBzZWNvbmRhcnlTaWRlKSB7XG4gICAgcG9wcGVyT2Zmc2V0c1tzZWNvbmRhcnlTaWRlXSA9IHJlZmVyZW5jZU9mZnNldHNbc2Vjb25kYXJ5U2lkZV0gLSBwb3BwZXJSZWN0W3NlY29uZGFyeU1lYXN1cmVtZW50XTtcbiAgfSBlbHNlIHtcbiAgICBwb3BwZXJPZmZzZXRzW3NlY29uZGFyeVNpZGVdID0gcmVmZXJlbmNlT2Zmc2V0c1tnZXRPcHBvc2l0ZVBsYWNlbWVudChzZWNvbmRhcnlTaWRlKV07XG4gIH1cblxuICByZXR1cm4gcG9wcGVyT2Zmc2V0cztcbn1cblxuLyoqXG4gKiBNaW1pY3MgdGhlIGBmaW5kYCBtZXRob2Qgb2YgQXJyYXlcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7QXJyYXl9IGFyclxuICogQGFyZ3VtZW50IHByb3BcbiAqIEBhcmd1bWVudCB2YWx1ZVxuICogQHJldHVybnMgaW5kZXggb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmluZChhcnIsIGNoZWNrKSB7XG4gIC8vIHVzZSBuYXRpdmUgZmluZCBpZiBzdXBwb3J0ZWRcbiAgaWYgKEFycmF5LnByb3RvdHlwZS5maW5kKSB7XG4gICAgcmV0dXJuIGFyci5maW5kKGNoZWNrKTtcbiAgfVxuXG4gIC8vIHVzZSBgZmlsdGVyYCB0byBvYnRhaW4gdGhlIHNhbWUgYmVoYXZpb3Igb2YgYGZpbmRgXG4gIHJldHVybi
2BhcnIuZmlsdGVyKGNoZWNrKVswXTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBtYXRjaGluZyBvYmplY3RcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7QXJyYXl9IGFyclxuICogQGFyZ3VtZW50IHByb3BcbiAqIEBhcmd1bWVudCB2YWx1ZVxuICogQHJldHVybnMgaW5kZXggb3IgLTFcbiAqL1xuZnVuY3Rpb24gZmluZEluZGV4KGFyciwgcHJvcCwgdmFsdWUpIHtcbiAgLy8gdXNlIG5hdGl2ZSBmaW5kSW5kZXggaWYgc3VwcG9ydGVkXG4gIGlmIChBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KSB7XG4gICAgcmV0dXJuIGFyci5maW5kSW5kZXgoZnVuY3Rpb24gKGN1cikge1xuICAgICAgcmV0dXJuIGN1cltwcm9wXSA9PT0gdmFsdWU7XG4gICAgfSk7XG4gIH1cblxuICAvLyB1c2UgYGZpbmRgICsgYGluZGV4T2ZgIGlmIGBmaW5kSW5kZXhgIGlzbid0IHN1cHBvcnRlZFxuICB2YXIgbWF0Y2ggPSBmaW5kKGFyciwgZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmpbcHJvcF0gPT09IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIGFyci5pbmRleE9mKG1hdGNoKTtcbn1cblxuLyoqXG4gKiBMb29wIHRyb3VnaCB0aGUgbGlzdCBvZiBtb2RpZmllcnMgYW5kIHJ1biB0aGVtIGluIG9yZGVyLFxuICogZWFjaCBvZiB0aGVtIHdpbGwgdGhlbiBlZGl0IHRoZSBkYXRhIG9iamVjdC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7ZGF0YU9iamVjdH0gZGF0YVxuICogQHBhcmFtIHtBcnJheX0gbW9kaWZpZXJzXG4gKiBAcGFyYW0ge1N0cmluZ30gZW5kcyAtIE9wdGlvbmFsIG1vZGlmaWVyIG5hbWUgdXNlZCBhcyBzdG9wcGVyXG4gKiBAcmV0dXJucyB7ZGF0YU9iamVjdH1cbiAqL1xuZnVuY3Rpb24gcnVuTW9kaWZpZXJzKG1vZGlmaWVycywgZGF0YSwgZW5kcykge1xuICB2YXIgbW9kaWZpZXJzVG9SdW4gPSBlbmRzID09PSB1bmRlZmluZWQgPyBtb2RpZmllcnMgOiBtb2RpZmllcnMuc2xpY2UoMCwgZmluZEluZGV4KG1vZGlmaWVycywgJ25hbWUnLCBlbmRzKSk7XG5cbiAgbW9kaWZpZXJzVG9SdW4uZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAobW9kaWZpZXJbJ2Z1bmN0aW9uJ10pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZG90LW5vdGF0aW9uXG4gICAgICBjb25zb2xlLndhcm4oJ2Btb2RpZmllci5mdW5jdGlvbmAgaXMgZGVwcmVjYXRlZCwgdXNlIGBtb2RpZmllci5mbmAhJyk7XG4gICAgfVxuICAgIHZhciBmbiA9IG1vZGlmaWVyWydmdW5jdGlvbiddIHx8IG1vZGlmaWVyLmZuOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgIGlmIChtb2RpZmllci5lbmFibGVkICYmIGlzRnVuY3Rpb24oZm4pKSB7XG4gICAgICAvLyBBZGQgcHJvcGVydGllcyB0byBvZmZzZXRzIHRvIG1ha2UgdGhlbSBhIGNvbXBsZXRlIGNsaWVudFJlY3Qgb2JqZWN0XG4gICAgICAvLyB3ZSBkbyB0aGlzIGJlZm9yZSBlYWNoIG1vZGlmaWVyIHRvIG1ha2Ugc3VyZSB0aGUgcHJldmlvdXMgb25lIGRvZXNuJ3RcbiAgICAgIC8vIG1lc3Mgd2l0aCB0aGVzZSB2YWx1ZXNcbiAgICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuICAgICAgZGF0YS5vZmZzZXRzLnJlZmVyZW5jZSA9IGdldENsaWVudFJlY3QoZGF0YS5vZmZzZXRzLnJlZmVyZW5jZSk7XG5cbiAgICAgIGRhdGEgPSBmbihkYXRhLCBtb2RpZmllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wcGVyLCBjb21wdXRpbmcgdGhlIG5ldyBvZmZzZXRzIGFuZCBhcHBseWluZ1xuICogdGhlIG5ldyBzdHlsZS48YnIgLz5cbiAqIFByZWZlciBgc2NoZWR1bGVVcGRhdGVgIG92ZXIgYHVwZGF0ZWAgYmVjYXVzZSBvZiBwZXJmb3JtYW5jZSByZWFzb25zLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiB1cGRhdGUoKSB7XG4gIC8vIGlmIHBvcHBlciBpcyBkZXN0cm95ZWQsIGRvbid0IHBlcmZvcm0gYW55IGZ1cnRoZXIgdXBkYXRlXG4gIGlmICh0aGlzLnN0YXRlLmlzRGVzdHJveWVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGRhdGEgPSB7XG4gICAgaW5zdGFuY2U6IHRoaXMsXG4gICAgc3R5bGVzOiB7fSxcbiAgICBhcnJvd1N0eWxlczoge30sXG4gICAgYXR0cmlidXRlczoge30sXG4gICAgZmxpcHBlZDogZmFsc2UsXG4gICAgb2Zmc2V0czoge31cbiAgfTtcblxuICAvLyBjb21wdXRlIHJlZmVyZW5jZSBlbGVtZW50IG9mZnNldHNcbiAgZGF0YS5vZmZzZXRzLnJlZmVyZW5jZSA9IGdldFJlZmVyZW5jZU9mZnNldHModGhpcy5zdGF0ZSwgdGhpcy5wb3BwZXIsIHRoaXMucmVmZXJlbmNlLCB0aGlzLm9wdGlvbnMucG9zaXRpb25GaXhlZCk7XG5cbiAgLy8gY29tcHV0ZSBhdXRvIHBsYWNlbWVudCwgc3RvcmUgcGxhY2VtZW50IGluc2lkZSB0aGUgZGF0YSBvYmplY3QsXG4gIC8vIG1vZGlmaWVycyB3aWxsIGJlIGFibGUgdG8gZWRpdCBgcGxhY2VtZW50YCBpZiBuZWVkZWRcbiAgLy8gYW5kIHJlZmVyIHRvIG9yaWdpbmFsUGxhY2VtZW50IHRvIGtub3cgdGhlIG9yaWdpbmFsIHZhbHVlXG4gIGRhdGEucGxhY2VtZW50ID0gY29tcHV0ZUF1dG9QbGFjZW1lbnQodGhpcy5vcHRpb25zLnBsYWNlbWVudCwgZGF0YS5vZmZzZXRzLnJlZmVyZW5jZSwgdGhpcy5wb3BwZXIsIHRoaXMucmVmZXJlbmNlLCB0aGlzLm9wdGlvbnMubW9kaWZpZXJzLmZsaXAuYm91bmRhcmllc0VsZW1lbnQsIHRoaXMub3B0aW9ucy5tb2RpZmllcnMuZmxpcC5wYWRkaW5nKTtcblxuICAvLyBzdG9yZSB0aGUgY29tcHV0ZWQgcGxhY2VtZW50IGluc2lkZSBgb3JpZ2luYWxQbGFjZW1lbnRgXG4gIGRhdGEub3JpZ2luYWxQbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcblxuICBkYXRhLnBvc2l0aW9uRml4ZWQgPSB0aGlzLm9wdGlvbnMucG9zaXRpb25GaXhlZDtcblxuICAvLyBjb21wdXRlIHRoZSBwb3BwZXIgb2Zmc2V0c1xuICBkYXRhLm9mZnNldHMucG9wcGVyID0gZ2V0UG9wcGVyT2Zmc2V0cyh0aGlzLnBvcHBlciwgZGF0YS5vZmZzZXRzLnJlZmVyZW5jZSwgZGF0YS5wbGFjZW1lbnQpO1xuXG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIucG9zaXRpb24gPSB0aGlzLm9wdGlvbnMucG9zaXRpb25GaXhlZCA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnO1xuXG4gIC8vIHJ1biB0aGUgbW9kaWZpZXJzXG4gIGRhdGEgPSBydW5Nb2RpZmllcnModGhpcy5tb2RpZmllcnMsIGRhdGEpO1xuXG4gIC8vIHRoZSBmaXJzdCBgdXBkYXRlYCB3aWxsIGNhbGwgYG9uQ3JlYXRlYCBjYWxsYmFja1xuICAvLyB0aGUgb3RoZXIgb25lcyB3aWxsIGNhbGwgYG9uVXBkYXRlYCBjYWxsYmFja1xuICBpZiAoIXRoaXMuc3RhdGUuaXNDcmVhdGVkKSB7XG4gICAgdGhpcy5zdGF0ZS5pc0NyZWF0ZWQgPSB0cnVlO1xuICAgIHRoaXMub3B0aW9ucy5vbkNyZWF0ZShkYXRhKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm9wdGlvbnMub25VcGRhdGUoZGF0YSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgdXNlZCB0byBrbm93IGlmIHRoZSBnaXZlbiBtb2RpZmllciBpcyBlbmFibGVkLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTW9kaWZpZXJFbmFibGVkKG1vZGlmaWVycywgbW9kaWZpZXJOYW1lKSB7XG4gIHJldHVybi
2Btb2RpZmllcnMuc29tZShmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgICBlbmFibGVkID0gX3JlZi5lbmFibGVkO1xuICAgIHJldHVybiBlbmFibGVkICYmIG5hbWUgPT09IG1vZGlmaWVyTmFtZTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwcmVmaXhlZCBzdXBwb3J0ZWQgcHJvcGVydHkgbmFtZVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtTdHJpbmd9IHByb3BlcnR5IChjYW1lbENhc2UpXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBwcmVmaXhlZCBwcm9wZXJ0eSAoY2FtZWxDYXNlIG9yIFBhc2NhbENhc2UsIGRlcGVuZGluZyBvbiB0aGUgdmVuZG9yIHByZWZpeClcbiAqL1xuZnVuY3Rpb24gZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKHByb3BlcnR5KSB7XG4gIHZhciBwcmVmaXhlcyA9IFtmYWxzZSwgJ21zJywgJ1dlYmtpdCcsICdNb3onLCAnTyddO1xuICB2YXIgdXBwZXJQcm9wID0gcHJvcGVydHkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zbGljZSgxKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByZWZpeGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHByZWZpeCA9IHByZWZpeGVzW2ldO1xuICAgIHZhciB0b0NoZWNrID0gcHJlZml4ID8gJycgKyBwcmVmaXggKyB1cHBlclByb3AgOiBwcm9wZXJ0eTtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50LmJvZHkuc3R5bGVbdG9DaGVja10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdG9DaGVjaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIHBvcHBlci5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgdGhpcy5zdGF0ZS5pc0Rlc3Ryb3llZCA9IHRydWU7XG5cbiAgLy8gdG91Y2ggRE9NIG9ubHkgaWYgYGFwcGx5U3R5bGVgIG1vZGlmaWVyIGlzIGVuYWJsZWRcbiAgaWYgKGlzTW9kaWZpZXJFbmFibGVkKHRoaXMubW9kaWZpZXJzLCAnYXBwbHlTdHlsZScpKSB7XG4gICAgdGhpcy5wb3BwZXIucmVtb3ZlQXR0cmlidXRlKCd4LXBsYWNlbWVudCcpO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLnBvc2l0aW9uID0gJyc7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGUudG9wID0gJyc7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGUubGVmdCA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLnJpZ2h0ID0gJyc7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGUuYm90dG9tID0gJyc7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGUud2lsbENoYW5nZSA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlW2dldFN1cHBvcnRlZFByb3BlcnR5TmFtZSgndHJhbnNmb3JtJyldID0gJyc7XG4gIH1cblxuICB0aGlzLmRpc2FibGVFdmVudExpc3RlbmVycygpO1xuXG4gIC8vIHJlbW92ZSB0aGUgcG9wcGVyIGlmIHVzZXIgZXhwbGljaXRseSBhc2tlZCBmb3IgdGhlIGRlbGV0aW9uIG9uIGRlc3Ryb3lcbiAgLy8gZG8gbm90IHVzZSBgcmVtb3ZlYCBiZWNhdXNlIElFMTEgZG9lc24ndCBzdXBwb3J0IGl0XG4gIGlmICh0aGlzLm9wdGlvbnMucmVtb3ZlT25EZXN0cm95KSB7XG4gICAgdGhpcy5wb3BwZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBvcHBlcik7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogR2V0IHRoZSB3aW5kb3cgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50XG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtXaW5kb3d9XG4gKi9cbmZ1bmN0aW9uIGdldFdpbmRvdyhlbGVtZW50KSB7XG4gIHZhciBvd25lckRvY3VtZW50ID0gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgOiB3aW5kb3c7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFRvU2Nyb2xsUGFyZW50cyhzY3JvbGxQYXJlbnQsIGV2ZW50LCBjYWxsYmFjaywgc2Nyb2xsUGFyZW50cykge1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50Lm5vZGVOYW1lID09PSAnQk9EWSc7XG4gIHZhciB0YXJnZXQgPSBpc0JvZHkgPyBzY3JvbGxQYXJlbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyA6IHNjcm9sbFBhcmVudDtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrLCB7IHBhc3NpdmU6IHRydWUgfSk7XG5cbiAgaWYgKCFpc0JvZHkpIHtcbiAgICBhdHRhY2hUb1Njcm9sbFBhcmVudHMoZ2V0U2Nyb2xsUGFyZW50KH
2RhcmdldC5wYXJlbnROb2RlKSwgZXZlbnQsIGNhbGxiYWNrLCBzY3JvbGxQYXJlbnRzKTtcbiAgfVxuICBzY3JvbGxQYXJlbnRzLnB1c2godGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBTZXR1cCBuZWVkZWQgZXZlbnQgbGlzdGVuZXJzIHVzZWQgdG8gdXBkYXRlIHRoZSBwb3BwZXIgcG9zaXRpb25cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNldHVwRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBvcHRpb25zLCBzdGF0ZSwgdXBkYXRlQm91bmQpIHtcbiAgLy8gUmVzaXplIGV2ZW50IGxpc3RlbmVyIG9uIHdpbmRvd1xuICBzdGF0ZS51cGRhdGVCb3VuZCA9IHVwZGF0ZUJvdW5kO1xuICBnZXRXaW5kb3cocmVmZXJlbmNlKS5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzdGF0ZS51cGRhdGVCb3VuZCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG4gIC8vIFNjcm9sbCBldmVudCBsaXN0ZW5lciBvbiBzY3JvbGwgcGFyZW50c1xuICB2YXIgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbFBhcmVudChyZWZlcmVuY2UpO1xuICBhdHRhY2hUb1Njcm9sbFBhcmVudHMoc2Nyb2xsRWxlbWVudCwgJ3Njcm9sbCcsIHN0YXRlLnVwZGF0ZUJvdW5kLCBzdGF0ZS5zY3JvbGxQYXJlbnRzKTtcbiAgc3RhdGUuc2Nyb2xsRWxlbWVudCA9IHNjcm9sbEVsZW1lbnQ7XG4gIHN0YXRlLmV2ZW50c0VuYWJsZWQgPSB0cnVlO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBJdCB3aWxsIGFkZCByZXNpemUvc2Nyb2xsIGV2ZW50cyBhbmQgc3RhcnQgcmVjYWxjdWxhdGluZ1xuICogcG9zaXRpb24gb2YgdGhlIHBvcHBlciBlbGVtZW50IHdoZW4gdGhleSBhcmUgdHJpZ2dlcmVkLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBlbmFibGVFdmVudExpc3RlbmVycygpIHtcbiAgaWYgKCF0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQpIHtcbiAgICB0aGlzLnN0YXRlID0gc2V0dXBFdmVudExpc3RlbmVycyh0aGlzLnJlZmVyZW5jZSwgdGhpcy5vcHRpb25zLCB0aGlzLnN0YXRlLCB0aGlzLnNjaGVkdWxlVXBkYXRlKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMgdXNlZCB0byB1cGRhdGUgdGhlIHBvcHBlciBwb3NpdGlvblxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcnMocmVmZXJlbmNlLCBzdGF0ZSkge1xuICAvLyBSZW1vdmUgcmVzaXplIGV2ZW50IGxpc3RlbmVyIG9uIHdpbmRvd1xuICBnZXRXaW5kb3cocmVmZXJlbmNlKS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzdGF0ZS51cGRhdGVCb3VuZCk7XG5cbiAgLy8gUmVtb3ZlIHNjcm9sbCBldmVudCBsaXN0ZW5lciBvbiBzY3JvbGwgcGFyZW50c1xuICBzdGF0ZS5zY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzdGF0ZS51cGRhdGVCb3VuZCk7XG4gIH0pO1xuXG4gIC8vIFJlc2V0IHN0YXRlXG4gIHN0YXRlLnVwZGF0ZUJvdW5kID0gbnVsbDtcbiAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IFtdO1xuICBzdGF0ZS5zY3JvbGxFbGVtZW50ID0gbnVsbDtcbiAgc3RhdGUuZXZlbnRzRW5hYmxlZCA9IGZhbHNlO1xuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogSXQgd2lsbCByZW1vdmUgcmVzaXplL3Njcm9sbCBldmVudHMgYW5kIHdvbid0IHJlY2FsY3VsYXRlIHBvcHBlciBwb3NpdGlvblxuICogd2hlbiB0aGV5IGFyZSB0cmlnZ2VyZWQuIEl0IGFsc28gd29uJ3QgdHJpZ2dlciBgb25VcGRhdGVgIGNhbGxiYWNrIGFueW1vcmUsXG4gKiB1bmxlc3MgeW91IGNhbGwgYHVwZGF0ZWAgbWV0aG9kIG1hbnVhbGx5LlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBkaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICh0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQpIHtcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNjaGVkdWxlVXBkYXRlKTtcbiAgICB0aGlzLnN0YXRlID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5yZWZlcmVuY2UsIHRoaXMuc3RhdGUpO1xuICB9XG59XG5cbi8qKlxuICogVGVsbHMgaWYgYSBnaXZlbiBpbnB1dCBpcyBhIG51bWJlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHsqfSBpbnB1dCB0byBjaGVja1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNOdW1lcmljKG4pIHtcbiAgcmV0dXJuIG4gIT09ICcnICYmICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIHN0eWxlIHRvIHRoZSBnaXZlbiBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYXBwbHkgdGhlIHN0eWxlIHRvXG4gKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzXG4gKiBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBzZXRTdHlsZXMoZWxlbWVudCwgc3R5bGVzKSB7XG4gIE9iamVjdC5rZXlzKHN0eWxlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgIHZhciB1bml0ID0gJyc7XG4gICAgLy8gYWRkIHVuaXQgaWYgdGhlIHZhbHVlIGlzIG51bWVyaWMgYW5kIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nXG4gICAgaWYgKFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLmluZGV4T2YocHJvcCkgIT09IC0xICYmIGlzTnVtZXJpYyhzdHlsZXNbcHJvcF0pKSB7XG4gICAgICB1bml0ID0gJ3B4JztcbiAgICB9XG4gICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IHN0eWxlc1twcm9wXSArIHVuaXQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgYXR0cmlidXRlcyB0byB0aGUgZ2l2ZW4gcG9wcGVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0Vs
2ZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFwcGx5IHRoZSBhdHRyaWJ1dGVzIHRvXG4gKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzXG4gKiBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIGF0dHJpYnV0ZXMpIHtcbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbcHJvcF07XG4gICAgaWYgKHZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUocHJvcCwgYXR0cmlidXRlc1twcm9wXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YS5zdHlsZXMgLSBMaXN0IG9mIHN0eWxlIHByb3BlcnRpZXMgLSB2YWx1ZXMgdG8gYXBwbHkgdG8gcG9wcGVyIGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhLmF0dHJpYnV0ZXMgLSBMaXN0IG9mIGF0dHJpYnV0ZSBwcm9wZXJ0aWVzIC0gdmFsdWVzIHRvIGFwcGx5IHRvIHBvcHBlciBlbGVtZW50XG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc2FtZSBkYXRhIG9iamVjdFxuICovXG5mdW5jdGlvbiBhcHBseVN0eWxlKGRhdGEpIHtcbiAgLy8gYW55IHByb3BlcnR5IHByZXNlbnQgaW4gYGRhdGEuc3R5bGVzYCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlcixcbiAgLy8gaW4gdGhpcyB3YXkgd2UgY2FuIG1ha2UgdGhlIDNyZCBwYXJ0eSBtb2RpZmllcnMgYWRkIGN1c3RvbSBzdHlsZXMgdG8gaXRcbiAgLy8gQmUgYXdhcmUsIG1vZGlmaWVycyBjb3VsZCBvdmVycmlkZSB0aGUgcHJvcGVydGllcyBkZWZpbmVkIGluIHRoZSBwcmV2aW91c1xuICAvLyBsaW5lcyBvZiB0aGlzIG1vZGlmaWVyIVxuICBzZXRTdHlsZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuc3R5bGVzKTtcblxuICAvLyBhbnkgcHJvcGVydHkgcHJlc2VudCBpbiBgZGF0YS5hdHRyaWJ1dGVzYCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlcixcbiAgLy8gdGhleSB3aWxsIGJlIHNldCBhcyBIVE1MIGF0dHJpYnV0ZXMgb2YgdGhlIGVsZW1lbnRcbiAgc2V0QXR0cmlidXRlcyhkYXRhLmluc3RhbmNlLnBvcHBlciwgZGF0YS5hdHRyaWJ1dGVzKTtcblxuICAvLyBpZiBhcnJvd0VsZW1lbnQgaXMgZGVmaW5lZCBhbmQgYXJyb3dTdHlsZXMgaGFzIHNvbWUgcHJvcGVydGllc1xuICBpZiAoZGF0YS5hcnJvd0VsZW1lbnQgJiYgT2JqZWN0LmtleXMoZGF0YS5hcnJvd1N0eWxlcykubGVuZ3RoKSB7XG4gICAgc2V0U3R5bGVzKGRhdGEuYXJyb3dFbGVtZW50LCBkYXRhLmFycm93U3R5bGVzKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFNldCB0aGUgeC1wbGFjZW1lbnQgYXR0cmlidXRlIGJlZm9yZSBldmVyeXRoaW5nIGVsc2UgYmVjYXVzZSBpdCBjb3VsZCBiZSB1c2VkXG4gKiB0byBhZGQgbWFyZ2lucyB0byB0aGUgcG9wcGVyIG1hcmdpbnMgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCB0byBnZXQgdGhlXG4gKiBjb3JyZWN0IHBvcHBlciBvZmZzZXRzLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIFRoZSBIVE1MIGVsZW1lbnQgdXNlZCBhcyBwb3BwZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUG9wcGVyLmpzIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gYXBwbHlTdHlsZU9uTG9hZChyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucywgbW9kaWZpZXJPcHRpb25zLCBzdGF0ZSkge1xuICAvLyBjb21wdXRlIHJlZmVyZW5jZSBlbGVtZW50IG9mZnNldHNcbiAgdmFyIHJlZmVyZW5jZU9mZnNldHMgPSBnZXRSZWZlcmVuY2VPZmZzZXRzKHN0YXRlLCBwb3BwZXIsIHJlZmVyZW5jZSwgb3B0aW9ucy5wb3NpdGlvbkZpeGVkKTtcblxuICAvLyBjb21wdXRlIGF1dG8gcGxhY2VtZW50LCBzdG9yZSBwbGFjZW1lbnQgaW5zaWRlIHRoZSBkYXRhIG9iamVjdCxcbiAgLy8gbW9kaWZpZXJzIHdpbGwgYmUgYWJsZSB0byBlZGl0IGBwbGFjZW1lbnRgIGlmIG5lZWRlZFxuICAvLyBhbmQgcmVmZXIgdG8gb3JpZ2luYWxQbGFjZW1lbnQgdG8ga25vdyB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgdmFyIHBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KG9wdGlvbnMucGxhY2VtZW50LCByZWZlcmVuY2VPZmZzZXRzLCBwb3BwZXIsIHJlZmVyZW5jZSwgb3B0aW9ucy5tb2RpZmllcnMuZmxpcC5ib3VuZGFyaWVzRWxlbWVudCwgb3B0aW9ucy5tb2RpZmllcnMuZmxpcC5wYWRkaW5nKTtcblxuICBwb3BwZXIuc2V0QXR0cmlidXRlKCd4LXBsYWNlbWVudCcsIHBsYWNlbWVudCk7XG5cbiAgLy8gQXBwbHkgYHBvc2l0aW9uYCB0byBwb3BwZXIgYmVmb3JlIGFueXRoaW5nIGVsc2UgYmVjYXVzZVxuICAvLyB3aXRob3V0IHRoZSBwb3NpdGlvbiBhcHBsaWVkIHdlIGNhbid0IGd1YXJhbnRlZSBjb3JyZWN0IGNvbXB1dGF0aW9uc1xuICBzZXRTdHlsZXMocG9wcGVyLCB7IHBvc2l0aW9uOiBvcHRpb25zLnBvc2l0aW9uRml4ZWQgPyAnZml4ZWQnIDogJ2Fic29sdXRlJyB9KTtcblxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7Qm9vbGVhbn0gc2hvdWxkUm91bmQgLSBJZiB0aGUgb2Zmc2V0cyBzaG91bGQgYmUgcm91bmRlZCBhdCBhbGxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBwb3BwZXIncyBwb3NpdGlvbiBvZmZzZXRzIHJvdW5kZWRcbiAqXG4gKiBUaGUgdGFsZSBvZiBwaXhlbC1wZXJmZWN0IHBvc2l0aW9uaW5nLiBJdCdzIHN0aWxsIG5vdCAxMDAlIHBlcmZlY3QsIGJ1dCBhc1xuICogZ29vZCBhcyBpdCBjYW4gYmUgd2l0aGluIHJlYXNvbi5cbiAqIERpc2N1c3Npb24gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL0ZlelZyYXN0YS9wb3BwZXIuanMvcHVsbC83MTVcbiAqXG4gKiBMb3cgRFBJIHNjcmVlbnMgY2F1c2UgYSBwb3BwZXIgdG8gYmUgYmx1cnJ5IGlmIG5vdCB1c2luZyBmdWxsIHBpeGVscyAoU2FmYXJpXG4gKiBhcyB3ZWxsIG9uIEhpZ2ggRFBJIHNjcmVlbnMpLlxuICpcbiAqIEZpcmVmb3ggcHJlZmVycyBubyByb3VuZGluZyBmb3IgcG9zaXRpb25pbmcgYW5kIGRvZXMgbm90IGhhdmUgYmx1cnJpbmVzcyBvblxuICogaGlnaCBEUEkgc2NyZWVucy5cbiAqXG4gKiBPbmx5IGhvcml6b250YWwgcGxhY2VtZW50IGFuZCBsZWZ0L3JpZ2h0IHZhbHVlcyBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIGdldFJvdW5kZWRPZmZzZXRzKGRhdGEsIHNob3VsZFJvdW5kKSB7XG4gIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXIsXG4gICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZTtcbiAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgIGZsb29yID0gTWF0aC5mbG9vcjtcblxuICB2Y
2XIgbm9Sb3VuZCA9IGZ1bmN0aW9uIG5vUm91bmQodikge1xuICAgIHJldHVybiB2O1xuICB9O1xuXG4gIHZhciByZWZlcmVuY2VXaWR0aCA9IHJvdW5kKHJlZmVyZW5jZS53aWR0aCk7XG4gIHZhciBwb3BwZXJXaWR0aCA9IHJvdW5kKHBvcHBlci53aWR0aCk7XG5cbiAgdmFyIGlzVmVydGljYWwgPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKGRhdGEucGxhY2VtZW50KSAhPT0gLTE7XG4gIHZhciBpc1ZhcmlhdGlvbiA9IGRhdGEucGxhY2VtZW50LmluZGV4T2YoJy0nKSAhPT0gLTE7XG4gIHZhciBzYW1lV2lkdGhQYXJpdHkgPSByZWZlcmVuY2VXaWR0aCAlIDIgPT09IHBvcHBlcldpZHRoICUgMjtcbiAgdmFyIGJvdGhPZGRXaWR0aCA9IHJlZmVyZW5jZVdpZHRoICUgMiA9PT0gMSAmJiBwb3BwZXJXaWR0aCAlIDIgPT09IDE7XG5cbiAgdmFyIGhvcml6b250YWxUb0ludGVnZXIgPSAhc2hvdWxkUm91bmQgPyBub1JvdW5kIDogaXNWZXJ0aWNhbCB8fCBpc1ZhcmlhdGlvbiB8fCBzYW1lV2lkdGhQYXJpdHkgPyByb3VuZCA6IGZsb29yO1xuICB2YXIgdmVydGljYWxUb0ludGVnZXIgPSAhc2hvdWxkUm91bmQgPyBub1JvdW5kIDogcm91bmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiBob3Jpem9udGFsVG9JbnRlZ2VyKGJvdGhPZGRXaWR0aCAmJiAhaXNWYXJpYXRpb24gJiYgc2hvdWxkUm91bmQgPyBwb3BwZXIubGVmdCAtIDEgOiBwb3BwZXIubGVmdCksXG4gICAgdG9wOiB2ZXJ0aWNhbFRvSW50ZWdlcihwb3BwZXIudG9wKSxcbiAgICBib3R0b206IHZlcnRpY2FsVG9JbnRlZ2VyKHBvcHBlci5ib3R0b20pLFxuICAgIHJpZ2h0OiBob3Jpem9udGFsVG9JbnRlZ2VyKHBvcHBlci5yaWdodClcbiAgfTtcbn1cblxudmFyIGlzRmlyZWZveCA9IGlzQnJvd3NlciAmJiAvRmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZShkYXRhLCBvcHRpb25zKSB7XG4gIHZhciB4ID0gb3B0aW9ucy54LFxuICAgICAgeSA9IG9wdGlvbnMueTtcbiAgdmFyIHBvcHBlciA9IGRhdGEub2Zmc2V0cy5wb3BwZXI7XG5cbiAgLy8gUmVtb3ZlIHRoaXMgbGVnYWN5IHN1cHBvcnQgaW4gUG9wcGVyLmpzIHYyXG5cbiAgdmFyIGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiA9IGZpbmQoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsIGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIHJldHVybiBtb2RpZmllci5uYW1lID09PSAnYXBwbHlTdHlsZSc7XG4gIH0pLmdwdUFjY2VsZXJhdGlvbjtcbiAgaWYgKGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc29sZS53YXJuKCdXQVJOSU5HOiBgZ3B1QWNjZWxlcmF0aW9uYCBvcHRpb24gbW92ZWQgdG8gYGNvbXB1dGVTdHlsZWAgbW9kaWZpZXIgYW5kIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgUG9wcGVyLmpzIScpO1xuICB9XG4gIHZhciBncHVBY2NlbGVyYXRpb24gPSBsZWdhY3lHcHVBY2NlbGVyYXRpb25PcHRpb24gIT09IHVuZGVmaW5lZCA/IGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiA6IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uO1xuXG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQoZGF0YS5pbnN0YW5jZS5wb3BwZXIpO1xuICB2YXIgb2Zmc2V0UGFyZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuXG4gIC8vIFN0eWxlc1xuICB2YXIgc3R5bGVzID0ge1xuICAgIHBvc2l0aW9uOiBwb3BwZXIucG9zaXRpb25cbiAgfTtcblxuICB2YXIgb2Zmc2V0cyA9IGdldFJvdW5kZWRPZmZzZXRzKGRhdGEsIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDwgMiB8fCAhaXNGaXJlZm94KTtcblxuICB2YXIgc2lkZUEgPSB4ID09PSAnYm90dG9tJyA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gIHZhciBzaWRlQiA9IHkgPT09ICdyaWdodCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuXG4gIC8vIGlmIGdwdUFjY2VsZXJhdGlvbiBpcyBzZXQgdG8gYHRydWVgIGFuZCB0cmFuc2Zvcm0gaXMgc3VwcG9ydGVkLFxuICAvLyAgd2UgdXNlIGB0cmFuc2xhdGUzZGAgdG8gYXBwbHkgdGhlIHBvc2l0aW9uIHRvIHRoZSBwb3BwZXIgd2VcbiAgLy8gYXV0b21hdGljYWxseSB1c2UgdGhlIHN1cHBvcnRlZCBwcmVmaXhlZCB2ZXJzaW9uIGlmIG5lZWRlZFxuICB2YXIgcHJlZml4ZWRQcm9wZXJ0eSA9IGdldFN1cHBvcnRlZFByb3BlcnR5TmFtZSgndHJhbnNmb3JtJyk7XG5cbiAgLy8gbm93LCBsZXQncyBtYWtlIGEgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoaXMgY29kZSBjbG9zZWx5ICh3dGY/KVxuICAvLyBJZiB0aGUgY29udGVudCBvZiB0aGUgcG9wcGVyIGdyb3dzIG9uY2UgaXQncyBiZWVuIHBvc2l0aW9uZWQsIGl0XG4gIC8vIG1heSBoYXBwZW4gdGhhdCB0aGUgcG9wcGVyIGdldHMgbWlzcGxhY2VkIGJlY2F1c2Ugb2YgdGhlIG5ldyBjb250ZW50XG4gIC8vIG92ZXJmbG93aW5nIGl0cyByZWZlcmVuY2UgZWxlbWVudFxuICAvLyBUbyBhdm9pZCB0aGlzIHByb2JsZW0sIHdlIHByb3ZpZGUgdHdvIG9wdGlvbnMgKHggYW5kIHkpLCB3aGljaCBhbGxvd1xuICAvLyB0aGUgY29uc3VtZXIgdG8gZGVmaW5lIHRoZSBvZmZzZXQgb3JpZ2luLlxuICAvLyBJZiB3ZSBwb3NpdGlvbiBhIHBvcHBlciBvbiB0b3Agb2YgYSByZWZlcmVuY2UgZWxlbWVudCwgd2UgY2FuIHNldFxuICAvLyBgeGAgdG8gYHRvcGAgdG8gbWFrZSB0aGUgcG9wcGVyIGdyb3cgdG93YXJkcyBpdHMgdG9wIGluc3RlYWQgb2ZcbiAgLy8gaXRzIGJvdHRvbS5cbiAgdmFyIGxlZnQgPSB2b2lkIDAsXG4gICAgICB0b3AgPSB2b2lkIDA7XG4gIGlmIChzaWRlQSA9PT0gJ2JvdHRvbScpIHtcbiAgICAvLyB3aGVuIG9mZnNldFBhcmVudCBpcyA8aHRtbD4gdGhlIHBvc2l0aW9uaW5nIGlzIHJlbGF0aXZlIHRvIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbiAoZXhjbHVkaW5nIHRoZSBzY3JvbGxiYXIpXG4gICAgLy8gYW5kIG5vdCB0aGUgYm90dG9tIG9mIHRoZSBodG1sIGVsZW1lbnRcbiAgICBpZiAob2Zmc2V0UGFyZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgIHRvcCA9IC1vZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0ICsgb2Zmc2V0cy5ib3R0b207XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvcCA9IC1vZmZzZXRQYXJlbnRSZWN0LmhlaWdodCArIG9mZnNldHMuYm90dG9tO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0b3AgPSBvZmZzZXRzLnRvcDtcbiAgfVxuICBpZiAoc2lkZUIgPT09ICdyaWdodCcpIHtcbiAgICBpZiAob2Zmc2V0UGFyZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgIGxlZnQgPSAtb2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoICsgb2Zmc2V0cy5yaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGVmdCA9IC1vZmZzZXRQYXJlbnRSZWN0LndpZHR
2oICsgb2Zmc2V0cy5yaWdodDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVmdCA9IG9mZnNldHMubGVmdDtcbiAgfVxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uICYmIHByZWZpeGVkUHJvcGVydHkpIHtcbiAgICBzdHlsZXNbcHJlZml4ZWRQcm9wZXJ0eV0gPSAndHJhbnNsYXRlM2QoJyArIGxlZnQgKyAncHgsICcgKyB0b3AgKyAncHgsIDApJztcbiAgICBzdHlsZXNbc2lkZUFdID0gMDtcbiAgICBzdHlsZXNbc2lkZUJdID0gMDtcbiAgICBzdHlsZXMud2lsbENoYW5nZSA9ICd0cmFuc2Zvcm0nO1xuICB9IGVsc2Uge1xuICAgIC8vIG90aHdlcmlzZSwgd2UgdXNlIHRoZSBzdGFuZGFyZCBgdG9wYCwgYGxlZnRgLCBgYm90dG9tYCBhbmQgYHJpZ2h0YCBwcm9wZXJ0aWVzXG4gICAgdmFyIGludmVydFRvcCA9IHNpZGVBID09PSAnYm90dG9tJyA/IC0xIDogMTtcbiAgICB2YXIgaW52ZXJ0TGVmdCA9IHNpZGVCID09PSAncmlnaHQnID8gLTEgOiAxO1xuICAgIHN0eWxlc1tzaWRlQV0gPSB0b3AgKiBpbnZlcnRUb3A7XG4gICAgc3R5bGVzW3NpZGVCXSA9IGxlZnQgKiBpbnZlcnRMZWZ0O1xuICAgIHN0eWxlcy53aWxsQ2hhbmdlID0gc2lkZUEgKyAnLCAnICsgc2lkZUI7XG4gIH1cblxuICAvLyBBdHRyaWJ1dGVzXG4gIHZhciBhdHRyaWJ1dGVzID0ge1xuICAgICd4LXBsYWNlbWVudCc6IGRhdGEucGxhY2VtZW50XG4gIH07XG5cbiAgLy8gVXBkYXRlIGBkYXRhYCBhdHRyaWJ1dGVzLCBzdHlsZXMgYW5kIGFycm93U3R5bGVzXG4gIGRhdGEuYXR0cmlidXRlcyA9IF9leHRlbmRzKHt9LCBhdHRyaWJ1dGVzLCBkYXRhLmF0dHJpYnV0ZXMpO1xuICBkYXRhLnN0eWxlcyA9IF9leHRlbmRzKHt9LCBzdHlsZXMsIGRhdGEuc3R5bGVzKTtcbiAgZGF0YS5hcnJvd1N0eWxlcyA9IF9leHRlbmRzKHt9LCBkYXRhLm9mZnNldHMuYXJyb3csIGRhdGEuYXJyb3dTdHlsZXMpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEhlbHBlciB1c2VkIHRvIGtub3cgaWYgdGhlIGdpdmVuIG1vZGlmaWVyIGRlcGVuZHMgZnJvbSBhbm90aGVyIG9uZS48YnIgLz5cbiAqIEl0IGNoZWNrcyBpZiB0aGUgbmVlZGVkIG1vZGlmaWVyIGlzIGxpc3RlZCBhbmQgZW5hYmxlZC5cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVycyAtIGxpc3Qgb2YgbW9kaWZpZXJzXG4gKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdGluZ05hbWUgLSBuYW1lIG9mIHJlcXVlc3RpbmcgbW9kaWZpZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0ZWROYW1lIC0gbmFtZSBvZiByZXF1ZXN0ZWQgbW9kaWZpZXJcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vZGlmaWVyUmVxdWlyZWQobW9kaWZpZXJzLCByZXF1ZXN0aW5nTmFtZSwgcmVxdWVzdGVkTmFtZSkge1xuICB2YXIgcmVxdWVzdGluZyA9IGZpbmQobW9kaWZpZXJzLCBmdW5jdGlvbiAoX3JlZikge1xuICAgIHZhciBuYW1lID0gX3JlZi5uYW1lO1xuICAgIHJldHVybiBuYW1lID09PSByZXF1ZXN0aW5nTmFtZTtcbiAgfSk7XG5cbiAgdmFyIGlzUmVxdWlyZWQgPSAhIXJlcXVlc3RpbmcgJiYgbW9kaWZpZXJzLnNvbWUoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgcmV0dXJuIG1vZGlmaWVyLm5hbWUgPT09IHJlcXVlc3RlZE5hbWUgJiYgbW9kaWZpZXIuZW5hYmxlZCAmJiBtb2RpZmllci5vcmRlciA8IHJlcXVlc3Rpbmcub3JkZXI7XG4gIH0pO1xuXG4gIGlmICghaXNSZXF1aXJlZCkge1xuICAgIHZhciBfcmVxdWVzdGluZyA9ICdgJyArIHJlcXVlc3RpbmdOYW1lICsgJ2AnO1xuICAgIHZhciByZXF1ZXN0ZWQgPSAnYCcgKyByZXF1ZXN0ZWROYW1lICsgJ2AnO1xuICAgIGNvbnNvbGUud2FybihyZXF1ZXN0ZWQgKyAnIG1vZGlmaWVyIGlzIHJlcXVpcmVkIGJ5ICcgKyBfcmVxdWVzdGluZyArICcgbW9kaWZpZXIgaW4gb3JkZXIgdG8gd29yaywgYmUgc3VyZSB0byBpbmNsdWRlIGl0IGJlZm9yZSAnICsgX3JlcXVlc3RpbmcgKyAnIScpO1xuICB9XG4gIHJldHVybiBpc1JlcXVpcmVkO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gYXJyb3coZGF0YSwgb3B0aW9ucykge1xuICB2YXIgX2RhdGEkb2Zmc2V0cyRhcnJvdztcblxuICAvLyBhcnJvdyBkZXBlbmRzIG9uIGtlZXBUb2dldGhlciBpbiBvcmRlciB0byB3b3JrXG4gIGlmICghaXNNb2RpZmllclJlcXVpcmVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnYXJyb3cnLCAna2VlcFRvZ2V0aGVyJykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBhcnJvd0VsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQ7XG5cbiAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIGEgc3RyaW5nLCBzdXBwb3NlIGl0J3MgYSBDU1Mgc2VsZWN0b3JcbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gZGF0YS5pbnN0YW5jZS5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgLy8gaWYgYXJyb3dFbGVtZW50IGlzIG5vdCBmb3VuZCwgZG9uJ3QgcnVuIHRoZSBtb2RpZmllclxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgdGhlIGFycm93RWxlbWVudCBpc24ndCBhIHF1ZXJ5IHNlbGVjdG9yIHdlIG11c3QgY2hlY2sgdGhhdCB0aGVcbiAgICAvLyBwcm92aWRlZCBET00gbm9kZSBpcyBjaGlsZCBvZiBpdHMgcG9wcGVyIG5vZGVcbiAgICBpZiAoIWRhdGEuaW5zdGFuY2UucG9wcGVyLmNvbnRhaW5zKGFycm93RWxlbWVudCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignV0FSTklORzogYGFycm93LmVsZW1lbnRgIG11c3QgYmUgY2hpbGQgb2YgaXRzIHBvcHBlciBlbGVtZW50IScpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXIsXG4gICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZTtcblxuICB2Y
2XIgaXNWZXJ0aWNhbCA9IFsnbGVmdCcsICdyaWdodCddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gIHZhciBzaWRlQ2FwaXRhbGl6ZWQgPSBpc1ZlcnRpY2FsID8gJ1RvcCcgOiAnTGVmdCc7XG4gIHZhciBzaWRlID0gc2lkZUNhcGl0YWxpemVkLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBhbHRTaWRlID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICB2YXIgb3BTaWRlID0gaXNWZXJ0aWNhbCA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgdmFyIGFycm93RWxlbWVudFNpemUgPSBnZXRPdXRlclNpemVzKGFycm93RWxlbWVudClbbGVuXTtcblxuICAvL1xuICAvLyBleHRlbmRzIGtlZXBUb2dldGhlciBiZWhhdmlvciBtYWtpbmcgc3VyZSB0aGUgcG9wcGVyIGFuZCBpdHNcbiAgLy8gcmVmZXJlbmNlIGhhdmUgZW5vdWdoIHBpeGVscyBpbiBjb25qdW5jdGlvblxuICAvL1xuXG4gIC8vIHRvcC9sZWZ0IHNpZGVcbiAgaWYgKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dFbGVtZW50U2l6ZSA8IHBvcHBlcltzaWRlXSkge1xuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gLT0gcG9wcGVyW3NpZGVdIC0gKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dFbGVtZW50U2l6ZSk7XG4gIH1cbiAgLy8gYm90dG9tL3JpZ2h0IHNpZGVcbiAgaWYgKHJlZmVyZW5jZVtzaWRlXSArIGFycm93RWxlbWVudFNpemUgPiBwb3BwZXJbb3BTaWRlXSkge1xuICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gKz0gcmVmZXJlbmNlW3NpZGVdICsgYXJyb3dFbGVtZW50U2l6ZSAtIHBvcHBlcltvcFNpZGVdO1xuICB9XG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuXG4gIC8vIGNvbXB1dGUgY2VudGVyIG9mIHRoZSBwb3BwZXJcbiAgdmFyIGNlbnRlciA9IHJlZmVyZW5jZVtzaWRlXSArIHJlZmVyZW5jZVtsZW5dIC8gMiAtIGFycm93RWxlbWVudFNpemUgLyAyO1xuXG4gIC8vIENvbXB1dGUgdGhlIHNpZGVWYWx1ZSB1c2luZyB0aGUgdXBkYXRlZCBwb3BwZXIgb2Zmc2V0c1xuICAvLyB0YWtlIHBvcHBlciBtYXJnaW4gaW4gYWNjb3VudCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdGhpcyBpbmZvIGF2YWlsYWJsZVxuICB2YXIgY3NzID0gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGRhdGEuaW5zdGFuY2UucG9wcGVyKTtcbiAgdmFyIHBvcHBlck1hcmdpblNpZGUgPSBwYXJzZUZsb2F0KGNzc1snbWFyZ2luJyArIHNpZGVDYXBpdGFsaXplZF0pO1xuICB2YXIgcG9wcGVyQm9yZGVyU2lkZSA9IHBhcnNlRmxvYXQoY3NzWydib3JkZXInICsgc2lkZUNhcGl0YWxpemVkICsgJ1dpZHRoJ10pO1xuICB2YXIgc2lkZVZhbHVlID0gY2VudGVyIC0gZGF0YS5vZmZzZXRzLnBvcHBlcltzaWRlXSAtIHBvcHBlck1hcmdpblNpZGUgLSBwb3BwZXJCb3JkZXJTaWRlO1xuXG4gIC8vIHByZXZlbnQgYXJyb3dFbGVtZW50IGZyb20gYmVpbmcgcGxhY2VkIG5vdCBjb250aWd1b3VzbHkgdG8gaXRzIHBvcHBlclxuICBzaWRlVmFsdWUgPSBNYXRoLm1heChNYXRoLm1pbihwb3BwZXJbbGVuXSAtIGFycm93RWxlbWVudFNpemUsIHNpZGVWYWx1ZSksIDApO1xuXG4gIGRhdGEuYXJyb3dFbGVtZW50ID0gYXJyb3dFbGVtZW50O1xuICBkYXRhLm9mZnNldHMuYXJyb3cgPSAoX2RhdGEkb2Zmc2V0cyRhcnJvdyA9IHt9LCBkZWZpbmVQcm9wZXJ0eShfZGF0YSRvZmZzZXRzJGFycm93LCBzaWRlLCBNYXRoLnJvdW5kKHNpZGVWYWx1ZSkpLCBkZWZpbmVQcm9wZXJ0eShfZGF0YSRvZmZzZXRzJGFycm93LCBhbHRTaWRlLCAnJyksIF9kYXRhJG9mZnNldHMkYXJyb3cpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEdldCB0aGUgb3Bwb3NpdGUgcGxhY2VtZW50IHZhcmlhdGlvbiBvZiB0aGUgZ2l2ZW4gb25lXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gcGxhY2VtZW50IHZhcmlhdGlvblxuICogQHJldHVybnMge1N0cmluZ30gZmxpcHBlZCBwbGFjZW1lbnQgdmFyaWF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uKHZhcmlhdGlvbikge1xuICBpZiAodmFyaWF0aW9uID09PSAnZW5kJykge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9IGVsc2UgaWYgKHZhcmlhdGlvbiA9PT0gJ3N0YXJ0Jykge1xuICAgIHJldHVybiAnZW5kJztcbiAgfVxuICByZXR1cm4gdmFyaWF0aW9uO1xufVxuXG4vKipcbiAqIExpc3Qgb2YgYWNjZXB0ZWQgcGxhY2VtZW50cyB0byB1c2UgYXMgdmFsdWVzIG9mIHRoZSBgcGxhY2VtZW50YCBvcHRpb24uPGJyIC8+XG4gKiBWYWxpZCBwbGFjZW1lbnRzIGFyZTpcbiAqIC0gYGF1dG9gXG4gKiAtIGB0b3BgXG4gKiAtIGByaWdodGBcbiAqIC0gYGJvdHRvbWBcbiAqIC0gYGxlZnRgXG4gKlxuICogRWFjaCBwbGFjZW1lbnQgY2FuIGhhdmUgYSB2YXJpYXRpb24gZnJvbSB0aGlzIGxpc3Q6XG4gKiAtIGAtc3RhcnRgXG4gKiAtIGAtZW5kYFxuICpcbiAqIFZhcmlhdGlvbnMgYXJlIGludGVycHJldGVkIGVhc2lseSBpZiB5b3UgdGhpbmsgb2YgdGhlbSBhcyB0aGUgbGVmdCB0byByaWdodFxuICogd3JpdHRlbiBsYW5ndWFnZXMuIEhvcml6b250YWxseSAoYHRvcGAgYW5kIGBib3R0b21gKSwgYHN0YXJ0YCBpcyBsZWZ0IGFuZCBgZW5kYFxuICogaXMgcmlnaHQuPGJyIC8+XG4gKiBWZXJ0aWNhbGx5IChgbGVmdGAgYW5kIGByaWdodGApLCBgc3RhcnRgIGlzIHRvcCBhbmQgYGVuZGAgaXMgYm90dG9tLlxuICpcbiAqIFNvbWUgdmFsaWQgZXhhbXBsZXMgYXJlOlxuICogLSBgdG9wLWVuZGAgKG9uIHRvcCBvZiByZWZlcmVuY2UsIHJpZ2h0IGFsaWduZWQpXG4gKiAtIGByaWdodC1zdGFydGAgKG9uIHJpZ2h0IG9mIHJlZmVyZW5jZSwgdG9wIGFsaWduZWQpXG4gKiAtIGBib3R0b21gIChvbiBib3R0b20sIGNlbnRlcmVkKVxuICogLSBgYXV0by1lbmRgIChvbiB0aGUgc2lkZSB3aXRoIG1vcmUgc3BhY2UgYXZhaWxhYmxlLCBhbGlnbm1lbnQgZGVwZW5kcyBieSBwbGFjZW1lbnQpXG4gKlxuICogQHN0YXRpY1xuICogQHR5cGUge0FycmF5fVxuICogQGVudW0ge1N0cmluZ31cbiAqIEByZWFkb25seVxuICogQG1ldGhvZCBwbGFjZW1lbnRzXG4gKiBAbWVtYmVyb2YgUG9wcGVyXG4gKi9cbnZhciBwbGFjZW1lbnRzID0gWydhdXRvLXN0YXJ0JywgJ2F1dG8nLCAnYXV0by1lbmQnLCAndG9wLXN0YXJ0JywgJ3RvcCcsICd0b3AtZW5kJywgJ3JpZ2h0LXN0YXJ0JywgJ3JpZ2h0JywgJ3JpZ2h0LWVuZCcsICdib3R0b20tZW5kJywgJ2JvdHRvbScsICdib3R0b20tc3RhcnQnLCAnbGVmdC1lbmQnLCAnbGVmdCcsICdsZWZ0LXN0YXJ0J107XG5cbi8vIEdldCByaWQgb2YgYGF1dG9gIGBhdXRvLXN0YXJ0YCBhbmQgYGF1dG8tZW5kYFxudmFyIHZhbGlkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMuc2xpY2UoMyk7XG5cbi8qKlxuICogR2l2ZW4gYW4gaW5pdGlhbCBwbGFjZW1lbnQsIHJldHVybnMgYWxsIHRoZSBzdWJzZXF1ZW50IHBsYWNlbWVudHNcbiAqIGNsb2Nrd2lzZSAob3IgY291bnRlci1jbG9ja3dpc2UpLlxuICpcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwbGFjZW1lbnQgLSBBIHZhbGlkIHBsYWNlbWVudCAoaXQgYWNjZXB0cyB2YXJpYXRpb25zKVxuICogQGFyZ3VtZW50IHtCb29sZWFufSBjb3VudGVyIC0gU2V0IHRvIHRydWUgdG8gd2FsayB0aGUgcGxhY2VtZW50cyBjb3VudGVyY2xvY2t3aXNlXG4gKiBAcmV0dXJucyB7QXJyYXl9IHBsYWNlbWVudHMgaW5jbHVkaW5nIHRoZWlyIHZhcmlhdGlvbnNcbiAqL1xuZnVuY3Rpb24gY2xvY2t3aXNlKHBsYWNlbWVudCkge1xuICB2YXIgY291bnRlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG5cbiAgdmFyIGluZGV4ID0gdmFsaWRQbGFjZW1lbnRzLmluZGV4T2YocGxhY2VtZW50KTtcbiAgdmFyIGFyciA9IHZhbGlkUGxhY2VtZW50cy5zbGljZShpbmRleCArIDEpLmNvbmNhdCh2YWxpZFBsYWNlbWVudHMuc2xpY2UoMCwgaW5kZXgpKTtcbiAgcmV0dXJuIGNvdW50ZXIgPyBhcnIucmV2ZXJzZSgpIDogYXJyO1xufVxuXG52YXIgQkVIQVZJT1JTID0ge1xuICBGTElQOiAnZmxpcCcsXG4gIENMT0NLV0lTRTogJ2Nsb2Nrd2lzZScsXG4gIENPVU5URVJDTE9DS1dJU0U6ICdjb3VudGVyY2xvY2t3aXNlJ1xufTtcblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09
2iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGZsaXAoZGF0YSwgb3B0aW9ucykge1xuICAvLyBpZiBgaW5uZXJgIG1vZGlmaWVyIGlzIGVuYWJsZWQsIHdlIGNhbid0IHVzZSB0aGUgYGZsaXBgIG1vZGlmaWVyXG4gIGlmIChpc01vZGlmaWVyRW5hYmxlZChkYXRhLmluc3RhbmNlLm1vZGlmaWVycywgJ2lubmVyJykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGlmIChkYXRhLmZsaXBwZWQgJiYgZGF0YS5wbGFjZW1lbnQgPT09IGRhdGEub3JpZ2luYWxQbGFjZW1lbnQpIHtcbiAgICAvLyBzZWVtcyBsaWtlIGZsaXAgaXMgdHJ5aW5nIHRvIGxvb3AsIHByb2JhYmx5IHRoZXJlJ3Mgbm90IGVub3VnaCBzcGFjZSBvbiBhbnkgb2YgdGhlIGZsaXBwYWJsZSBzaWRlc1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgdmFyIGJvdW5kYXJpZXMgPSBnZXRCb3VuZGFyaWVzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBkYXRhLmluc3RhbmNlLnJlZmVyZW5jZSwgb3B0aW9ucy5wYWRkaW5nLCBvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50LCBkYXRhLnBvc2l0aW9uRml4ZWQpO1xuXG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgcGxhY2VtZW50T3Bwb3NpdGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVsxXSB8fCAnJztcblxuICB2YXIgZmxpcE9yZGVyID0gW107XG5cbiAgc3dpdGNoIChvcHRpb25zLmJlaGF2aW9yKSB7XG4gICAgY2FzZSBCRUhBVklPUlMuRkxJUDpcbiAgICAgIGZsaXBPcmRlciA9IFtwbGFjZW1lbnQsIHBsYWNlbWVudE9wcG9zaXRlXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQkVIQVZJT1JTLkNMT0NLV0lTRTpcbiAgICAgIGZsaXBPcmRlciA9IGNsb2Nrd2lzZShwbGFjZW1lbnQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBCRUhBVklPUlMuQ09VTlRFUkNMT0NLV0lTRTpcbiAgICAgIGZsaXBPcmRlciA9IGNsb2Nrd2lzZShwbGFjZW1lbnQsIHRydWUpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGZsaXBPcmRlciA9IG9wdGlvbnMuYmVoYXZpb3I7XG4gIH1cblxuICBmbGlwT3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoc3RlcCwgaW5kZXgpIHtcbiAgICBpZiAocGxhY2VtZW50ICE9PSBzdGVwIHx8IGZsaXBPcmRlci5sZW5ndGggPT09IGluZGV4ICsgMSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgICBwbGFjZW1lbnRPcHBvc2l0ZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgICB2YXIgcG9wcGVyT2Zmc2V0cyA9IGRhdGEub2Zmc2V0cy5wb3BwZXI7XG4gICAgdmFyIHJlZk9mZnNldHMgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuXG4gICAgLy8gdXNpbmcgZmxvb3IgYmVjYXVzZSB0aGUgcmVmZXJlbmNlIG9mZnNldHMgbWF5IGNvbnRhaW4gZGVjaW1hbHMgd2UgYXJlIG5vdCBnb2luZyB0byBjb25zaWRlciBoZXJlXG4gICAgdmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbiAgICB2YXIgb3ZlcmxhcHNSZWYgPSBwbGFjZW1lbnQgPT09ICdsZWZ0JyAmJiBmbG9vcihwb3BwZXJPZmZzZXRzLnJpZ2h0KSA+IGZsb29yKHJlZk9mZnNldHMubGVmdCkgfHwgcGxhY2VtZW50ID09PSAncmlnaHQnICYmIGZsb29yKHBvcHBlck9mZnNldHMubGVmdCkgPCBmbG9vcihyZWZPZmZzZXRzLnJpZ2h0KSB8fCBwbGFjZW1lbnQgPT09ICd0b3AnICYmIGZsb29yKHBvcHBlck9mZnNldHMuYm90dG9tKSA+IGZsb29yKHJlZk9mZnNldHMudG9wKSB8fCBwbGFjZW1lbnQgPT09ICdib3R0b20nICYmIGZsb29yKHBvcHBlck9mZnNldHMudG9wKSA8IGZsb29yKHJlZk9mZnNldHMuYm90dG9tKTtcblxuICAgIHZhciBvdmVyZmxvd3NMZWZ0ID0gZmxvb3IocG9wcGVyT2Zmc2V0cy5sZWZ0KSA8IGZsb29yKGJvdW5kYXJpZXMubGVmdCk7XG4gICAgdmFyIG92ZXJmbG93c1JpZ2h0ID0gZmxvb3IocG9wcGVyT2Zmc2V0cy5yaWdodCkgPiBmbG9vcihib3VuZGFyaWVzLnJpZ2h0KTtcbiAgICB2YXIgb3ZlcmZsb3dzVG9wID0gZmxvb3IocG9wcGVyT2Zmc2V0cy50b3ApIDwgZmxvb3IoYm91bmRhcmllcy50b3ApO1xuICAgIHZhciBvdmVyZmxvd3NCb3R0b20gPSBmbG9vcihwb3BwZXJPZmZzZXRzLmJvdHRvbSkgPiBmbG9vcihib3VuZGFyaWVzLmJvdHRvbSk7XG5cbiAgICB2YXIgb3ZlcmZsb3dzQm91bmRhcmllcyA9IHBsYWNlbWVudCA9PT0gJ2xlZnQnICYmIG92ZXJmbG93c0xlZnQgfHwgcGxhY2VtZW50ID09PSAncmlnaHQnICYmIG92ZXJmbG93c1JpZ2h0IHx8IHBsYWNlbWVudCA9PT0gJ3RvcCcgJiYgb3ZlcmZsb3dzVG9wIHx8IHBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiYgb3ZlcmZsb3dzQm90dG9tO1xuXG4gICAgLy8gZmxpcCB0aGUgdmFyaWF0aW9uIGlmIHJlcXVpcmVkXG4gICAgdmFyIGlzVmVydGljYWwgPSBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuXG4gICAgLy8gZmxpcHMgdmFyaWF0aW9uIGlmIHJlZmVyZW5jZSBlbGVtZW50IG92ZXJmbG93cyBib3VuZGFyaWVzXG4gICAgdmFyIGZsaXBwZWRWYXJpYXRpb25CeVJlZiA9ICEhb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyAmJiAoaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzTGVmdCB8fCBpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ2VuZCcgJiYgb3ZlcmZsb3dzUmlnaHQgfHwgIWlzVmVydGljYWwgJiYgdmFyaWF0aW9uID09PSAnc3RhcnQnICYmIG92ZXJmbG93c1RvcCB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdlbmQnICYmIG92ZXJmbG93c0JvdHRvbSk7XG5cbiAgICAvLyBmbGlwcyB2YXJpYXRpb24gaWYgcG9wcGVyIGNvbnRlbnQgb3ZlcmZsb3dzIGJvdW5kYXJpZXNcbiAgICB2YXIgZmxpcHBlZFZhcmlhdGlvbkJ5Q29udGVudCA9ICEhb3B0aW9ucy5mbGlwVmFyaWF0aW9uc0J5Q29udGVudCAmJiAoaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdzdGFydCcgJiYgb3ZlcmZsb3dzUmlnaHQgfHwgaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdlbmQnICYmIG92ZXJmbG93c0xlZnQgfHwgIWlzVmVydGljYWwgJiYgdmFyaWF0aW9uID09PSAnc3RhcnQnICYmIG92ZXJmbG93c0JvdHRvbSB8fCAhaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdlbmQnICYmIG92ZXJmbG93c1RvcCk7XG5cbiAgICB2YXIgZmxpcHBlZFZhcmlhdGlvbiA9IGZsaXBwZWRWYXJpYXRpb25CeVJlZiB8fCBmbGlwcGVkVmFyaWF0aW9uQnlDb250ZW50O1xuXG4gICAgaWYgKG92ZXJsYXBzUmVmIHx8IG92ZXJmbG93c0JvdW5kYXJpZXMgfHwgZmxpcHBlZFZhcmlhdGlvbikge1xuICAgICAgLy8gdGhpcyBib29sZWFuIHRvIGRldGVjdCBhbnkgZmxpcCBsb29wXG4gICAgICBkYXRhLmZsaXBwZWQgPSB0cnVlO1xuXG4gICAgICBpZiAob3ZlcmxhcHNSZWYgfHwgb3ZlcmZsb3dzQm91bmRhcmllcykge1xuICAgICAgICBwbGFjZW1lbnQgPSBmbGlwT3JkZXJbaW5kZXggKyAxXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZsaXBwZWRWYXJpYXRpb24pIHtcbiAgICAgICAgdmFyaWF0aW9uID0gZ2V0T3Bwb3NpdGVWYXJpYXRpb24odmFyaWF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgZGF0YS5wbGFjZW1lbnQgPSBwbGFjZW1lbnQgKyAodmFyaWF0aW9uID8gJy0nICsgdmFyaWF0aW9uIDogJycpO1xuXG4gICAgICAvLyB0aGlzIG9iamVjdCBjb250YWlucyBgcG9zaXRpb25gLCB3ZSB3YW50IHRvIHByZXNlcnZlIGl0IGFsb25nIHdpdGhcbiAgICAgIC8vIGFueSBhZGRpdGlvbmFsIHByb3BlcnR5IHdlIG1heSBhZGQgaW4gdGhlIGZ1dHVyZVxuICAgICAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IF9leHRlbmRzKHt9LCBkYXRhLm9mZnNldHMucG9wcGVyLCBnZXRQb3BwZXJPZmZzZXRzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBkYXRhLm9mZnNldHMucmVmZXJlbmNlLCBkYXRhLnBsYWNlbWVudCkpO1xuXG4gICAgICBkYXRhID0gcnVuTW9kaWZpZXJzKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCBkYXRhLCAnZmxpcCcpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybi
2BkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24ga2VlcFRvZ2V0aGVyKGRhdGEpIHtcbiAgdmFyIF9kYXRhJG9mZnNldHMgPSBkYXRhLm9mZnNldHMsXG4gICAgICBwb3BwZXIgPSBfZGF0YSRvZmZzZXRzLnBvcHBlcixcbiAgICAgIHJlZmVyZW5jZSA9IF9kYXRhJG9mZnNldHMucmVmZXJlbmNlO1xuXG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICB2YXIgaXNWZXJ0aWNhbCA9IFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG4gIHZhciBzaWRlID0gaXNWZXJ0aWNhbCA/ICdyaWdodCcgOiAnYm90dG9tJztcbiAgdmFyIG9wU2lkZSA9IGlzVmVydGljYWwgPyAnbGVmdCcgOiAndG9wJztcbiAgdmFyIG1lYXN1cmVtZW50ID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcblxuICBpZiAocG9wcGVyW3NpZGVdIDwgZmxvb3IocmVmZXJlbmNlW29wU2lkZV0pKSB7XG4gICAgZGF0YS5vZmZzZXRzLnBvcHBlcltvcFNpZGVdID0gZmxvb3IocmVmZXJlbmNlW29wU2lkZV0pIC0gcG9wcGVyW21lYXN1cmVtZW50XTtcbiAgfVxuICBpZiAocG9wcGVyW29wU2lkZV0gPiBmbG9vcihyZWZlcmVuY2Vbc2lkZV0pKSB7XG4gICAgZGF0YS5vZmZzZXRzLnBvcHBlcltvcFNpZGVdID0gZmxvb3IocmVmZXJlbmNlW3NpZGVdKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdmFsdWUgKyB1bml0IGludG8gYSBweCB2YWx1ZSBudW1iZXJcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIHttb2RpZmllcnN+b2Zmc2V0fVxuICogQHByaXZhdGVcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBzdHIgLSBWYWx1ZSArIHVuaXQgc3RyaW5nXG4gKiBAYXJndW1lbnQge1N0cmluZ30gbWVhc3VyZW1lbnQgLSBgaGVpZ2h0YCBvciBgd2lkdGhgXG4gKiBAYXJndW1lbnQge09iamVjdH0gcG9wcGVyT2Zmc2V0c1xuICogQGFyZ3VtZW50IHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHNcbiAqIEByZXR1cm5zIHtOdW1iZXJ8U3RyaW5nfVxuICogVmFsdWUgaW4gcGl4ZWxzLCBvciBvcmlnaW5hbCBzdHJpbmcgaWYgbm8gdmFsdWVzIHdlcmUgZXh0cmFjdGVkXG4gKi9cbmZ1bmN0aW9uIHRvVmFsdWUoc3RyLCBtZWFzdXJlbWVudCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cykge1xuICAvLyBzZXBhcmF0ZSB2YWx1ZSBmcm9tIHVuaXRcbiAgdmFyIHNwbGl0ID0gc3RyLm1hdGNoKC8oKD86XFwtfFxcKyk/XFxkKlxcLj9cXGQqKSguKikvKTtcbiAgdmFyIHZhbHVlID0gK3NwbGl0WzFdO1xuICB2YXIgdW5pdCA9IHNwbGl0WzJdO1xuXG4gIC8vIElmIGl0J3Mgbm90IGEgbnVtYmVyIGl0J3MgYW4gb3BlcmF0b3IsIEkgZ3Vlc3NcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBpZiAodW5pdC5pbmRleE9mKCclJykgPT09IDApIHtcbiAgICB2YXIgZWxlbWVudCA9IHZvaWQgMDtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJyVwJzpcbiAgICAgICAgZWxlbWVudCA9IHBvcHBlck9mZnNldHM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnJSc6XG4gICAgICBjYXNlICclcic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBlbGVtZW50ID0gcmVmZXJlbmNlT2Zmc2V0cztcbiAgICB9XG5cbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3QoZWxlbWVudCk7XG4gICAgcmV0dXJuIHJlY3RbbWVhc3VyZW1lbnRdIC8gMTAwICogdmFsdWU7XG4gIH0gZWxzZSBpZiAodW5pdCA9PT0gJ3ZoJyB8fCB1bml0ID09PSAndncnKSB7XG4gICAgLy8gaWYgaXMgYSB2aCBvciB2dywgd2UgY2FsY3VsYXRlIHRoZSBzaXplIGJhc2VkIG9uIHRoZSB2aWV3cG9ydFxuICAgIHZhciBzaXplID0gdm9pZCAwO1xuICAgIGlmICh1bml0ID09PSAndmgnKSB7XG4gICAgICBzaXplID0gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaXplID0gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpemUgLyAxMDAgKiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiBpcyBhbiBleHBsaWNpdCBwaXhlbCB1bml0LCB3ZSBnZXQgcmlkIG9mIHRoZSB1bml0IGFuZCBrZWVwIHRoZSB2YWx1ZVxuICAgIC8vIGlmIGlzIGFuIGltcGxpY2l0IHVuaXQsIGl0J3MgcHgsIGFuZCB3ZSByZXR1cm4ganVzdCB0aGUgdmFsdWVcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhbiBgb2Zmc2V0YCBzdHJpbmcgdG8gZXh0cmFwb2xhdGUgYHhgIGFuZCBgeWAgbnVtZXJpYyBvZmZzZXRzLlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2Yge21vZGlmaWVyc35vZmZzZXR9XG4gKiBAcHJpdmF0ZVxuICogQGFyZ3VtZW50IHtTdHJpbmd9IG9mZnNldFxuICogQGFyZ3VtZW50IHtPYmplY3R9IHBvcHBlck9mZnNldHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSByZWZlcmVuY2VPZmZzZXRzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gYmFzZVBsYWNlbWVudFxuICogQHJldHVybnMge0FycmF5fSBhIHR3byBjZWxscyBhcnJheSB3aXRoIHggYW5kIHkgb2Zmc2V0cyBpbiBudW1iZXJzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT2Zmc2V0KG9mZnNldCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cywgYmFzZVBsYWNlbWVudCkge1xuICB2YXIgb2Zmc2V0cyA9IFswLCAwXTtcblxuICAvLyBVc2UgaGVpZ2h0IGlmIHBsYWNlbWVudCBpcyBsZWZ0IG9yIHJpZ2h0IGFuZCBpbmRleCBpcyA
2wIG90aGVyd2lzZSB1c2Ugd2lkdGhcbiAgLy8gaW4gdGhpcyB3YXkgdGhlIGZpcnN0IG9mZnNldCB3aWxsIHVzZSBhbiBheGlzIGFuZCB0aGUgc2Vjb25kIG9uZVxuICAvLyB3aWxsIHVzZSB0aGUgb3RoZXIgb25lXG4gIHZhciB1c2VIZWlnaHQgPSBbJ3JpZ2h0JywgJ2xlZnQnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAvLyBTcGxpdCB0aGUgb2Zmc2V0IHN0cmluZyB0byBvYnRhaW4gYSBsaXN0IG9mIHZhbHVlcyBhbmQgb3BlcmFuZHNcbiAgLy8gVGhlIHJlZ2V4IGFkZHJlc3NlcyB2YWx1ZXMgd2l0aCB0aGUgcGx1cyBvciBtaW51cyBzaWduIGluIGZyb250ICgrMTAsIC0yMCwgZXRjKVxuICB2YXIgZnJhZ21lbnRzID0gb2Zmc2V0LnNwbGl0KC8oXFwrfFxcLSkvKS5tYXAoZnVuY3Rpb24gKGZyYWcpIHtcbiAgICByZXR1cm4gZnJhZy50cmltKCk7XG4gIH0pO1xuXG4gIC8vIERldGVjdCBpZiB0aGUgb2Zmc2V0IHN0cmluZyBjb250YWlucyBhIHBhaXIgb2YgdmFsdWVzIG9yIGEgc2luZ2xlIG9uZVxuICAvLyB0aGV5IGNvdWxkIGJlIHNlcGFyYXRlZCBieSBjb21tYSBvciBzcGFjZVxuICB2YXIgZGl2aWRlciA9IGZyYWdtZW50cy5pbmRleE9mKGZpbmQoZnJhZ21lbnRzLCBmdW5jdGlvbiAoZnJhZykge1xuICAgIHJldHVybiBmcmFnLnNlYXJjaCgvLHxcXHMvKSAhPT0gLTE7XG4gIH0pKTtcblxuICBpZiAoZnJhZ21lbnRzW2RpdmlkZXJdICYmIGZyYWdtZW50c1tkaXZpZGVyXS5pbmRleE9mKCcsJykgPT09IC0xKSB7XG4gICAgY29uc29sZS53YXJuKCdPZmZzZXRzIHNlcGFyYXRlZCBieSB3aGl0ZSBzcGFjZShzKSBhcmUgZGVwcmVjYXRlZCwgdXNlIGEgY29tbWEgKCwpIGluc3RlYWQuJyk7XG4gIH1cblxuICAvLyBJZiBkaXZpZGVyIGlzIGZvdW5kLCB3ZSBkaXZpZGUgdGhlIGxpc3Qgb2YgdmFsdWVzIGFuZCBvcGVyYW5kcyB0byBkaXZpZGVcbiAgLy8gdGhlbSBieSBvZnNldCBYIGFuZCBZLlxuICB2YXIgc3BsaXRSZWdleCA9IC9cXHMqLFxccyp8XFxzKy87XG4gIHZhciBvcHMgPSBkaXZpZGVyICE9PSAtMSA/IFtmcmFnbWVudHMuc2xpY2UoMCwgZGl2aWRlcikuY29uY2F0KFtmcmFnbWVudHNbZGl2aWRlcl0uc3BsaXQoc3BsaXRSZWdleClbMF1dKSwgW2ZyYWdtZW50c1tkaXZpZGVyXS5zcGxpdChzcGxpdFJlZ2V4KVsxXV0uY29uY2F0KGZyYWdtZW50cy5zbGljZShkaXZpZGVyICsgMSkpXSA6IFtmcmFnbWVudHNdO1xuXG4gIC8vIENvbnZlcnQgdGhlIHZhbHVlcyB3aXRoIHVuaXRzIHRvIGFic29sdXRlIHBpeGVscyB0byBhbGxvdyBvdXIgY29tcHV0YXRpb25zXG4gIG9wcyA9IG9wcy5tYXAoZnVuY3Rpb24gKG9wLCBpbmRleCkge1xuICAgIC8vIE1vc3Qgb2YgdGhlIHVuaXRzIHJlbHkgb24gdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBwb3BwZXJcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSAoaW5kZXggPT09IDEgPyAhdXNlSGVpZ2h0IDogdXNlSGVpZ2h0KSA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgbWVyZ2VXaXRoUHJldmlvdXMgPSBmYWxzZTtcbiAgICByZXR1cm4gb3BcbiAgICAvLyBUaGlzIGFnZ3JlZ2F0ZXMgYW55IGArYCBvciBgLWAgc2lnbiB0aGF0IGFyZW4ndCBjb25zaWRlcmVkIG9wZXJhdG9yc1xuICAgIC8vIGUuZy46IDEwICsgKzUgPT4gWzEwLCArLCArNV1cbiAgICAucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICBpZiAoYVthLmxlbmd0aCAtIDFdID09PSAnJyAmJiBbJysnLCAnLSddLmluZGV4T2YoYikgIT09IC0xKSB7XG4gICAgICAgIGFbYS5sZW5ndGggLSAxXSA9IGI7XG4gICAgICAgIG1lcmdlV2l0aFByZXZpb3VzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9IGVsc2UgaWYgKG1lcmdlV2l0aFByZXZpb3VzKSB7XG4gICAgICAgIGFbYS5sZW5ndGggLSAxXSArPSBiO1xuICAgICAgICBtZXJnZVdpdGhQcmV2aW91cyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICAgIH1cbiAgICB9LCBbXSlcbiAgICAvLyBIZXJlIHdlIGNvbnZlcnQgdGhlIHN0cmluZyB2YWx1ZXMgaW50byBudW1iZXIgdmFsdWVzIChpbiBweClcbiAgICAubWFwKGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHJldHVybiB0b1ZhbHVlKHN0ciwgbWVhc3VyZW1lbnQsIHBvcHBlck9mZnNldHMsIHJlZmVyZW5jZU9mZnNldHMpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBMb29wIHRyb3VnaCB0aGUgb2Zmc2V0cyBhcnJheXMgYW5kIGV4ZWN1dGUgdGhlIG9wZXJhdGlvbnNcbiAgb3BzLmZvckVhY2goZnVuY3Rpb24gKG9wLCBpbmRleCkge1xuICAgIG9wLmZvckVhY2goZnVuY3Rpb24gKGZyYWcsIGluZGV4Mikge1xuICAgICAgaWYgKGlzTnVtZXJpYyhmcmFnKSkge1xuICAgICAgICBvZmZzZXRzW2luZGV4XSArPSBmcmFnICogKG9wW2luZGV4MiAtIDFdID09PSAnLScgPyAtMSA6IDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG9mZnNldHM7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQGFyZ3VtZW50IHtOdW1iZXJ8U3RyaW5nfSBvcHRpb25zLm9mZnNldD0wXG4gKiBUaGUgb2Zmc2V0IHZhbHVlIGFzIGRlc2NyaWJlZCBpbiB0aGUgbW9kaWZpZXIgZGVzY3JpcHRpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gb2Zmc2V0KGRhdGEsIF9yZWYpIHtcbiAgdmFyIG9mZnNldCA9IF9yZWYub2Zmc2V0O1xuICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQsXG4gICAgICBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXIsXG4gICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZTtcblxuICB2Y
2XIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuXG4gIHZhciBvZmZzZXRzID0gdm9pZCAwO1xuICBpZiAoaXNOdW1lcmljKCtvZmZzZXQpKSB7XG4gICAgb2Zmc2V0cyA9IFsrb2Zmc2V0LCAwXTtcbiAgfSBlbHNlIHtcbiAgICBvZmZzZXRzID0gcGFyc2VPZmZzZXQob2Zmc2V0LCBwb3BwZXIsIHJlZmVyZW5jZSwgYmFzZVBsYWNlbWVudCk7XG4gIH1cblxuICBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ2xlZnQnKSB7XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci5sZWZ0IC09IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ3JpZ2h0Jykge1xuICAgIHBvcHBlci50b3AgKz0gb2Zmc2V0c1swXTtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzFdO1xuICB9IGVsc2UgaWYgKGJhc2VQbGFjZW1lbnQgPT09ICd0b3AnKSB7XG4gICAgcG9wcGVyLmxlZnQgKz0gb2Zmc2V0c1swXTtcbiAgICBwb3BwZXIudG9wIC09IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ2JvdHRvbScpIHtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci50b3AgKz0gb2Zmc2V0c1sxXTtcbiAgfVxuXG4gIGRhdGEucG9wcGVyID0gcG9wcGVyO1xuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KGRhdGEsIG9wdGlvbnMpIHtcbiAgdmFyIGJvdW5kYXJpZXNFbGVtZW50ID0gb3B0aW9ucy5ib3VuZGFyaWVzRWxlbWVudCB8fCBnZXRPZmZzZXRQYXJlbnQoZGF0YS5pbnN0YW5jZS5wb3BwZXIpO1xuXG4gIC8vIElmIG9mZnNldFBhcmVudCBpcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQsIHdlIHJlYWxseSB3YW50IHRvXG4gIC8vIGdvIG9uZSBzdGVwIHVwIGFuZCB1c2UgdGhlIG5leHQgb2Zmc2V0UGFyZW50IGFzIHJlZmVyZW5jZSB0b1xuICAvLyBhdm9pZCB0byBtYWtlIHRoaXMgbW9kaWZpZXIgY29tcGxldGVseSB1c2VsZXNzIGFuZCBsb29rIGxpa2UgYnJva2VuXG4gIGlmIChkYXRhLmluc3RhbmNlLnJlZmVyZW5jZSA9PT0gYm91bmRhcmllc0VsZW1lbnQpIHtcbiAgICBib3VuZGFyaWVzRWxlbWVudCA9IGdldE9mZnNldFBhcmVudChib3VuZGFyaWVzRWxlbWVudCk7XG4gIH1cblxuICAvLyBOT1RFOiBET00gYWNjZXNzIGhlcmVcbiAgLy8gcmVzZXRzIHRoZSBwb3BwZXIncyBwb3NpdGlvbiBzbyB0aGF0IHRoZSBkb2N1bWVudCBzaXplIGNhbiBiZSBjYWxjdWxhdGVkIGV4Y2x1ZGluZ1xuICAvLyB0aGUgc2l6ZSBvZiB0aGUgcG9wcGVyIGVsZW1lbnQgaXRzZWxmXG4gIHZhciB0cmFuc2Zvcm1Qcm9wID0gZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKCd0cmFuc2Zvcm0nKTtcbiAgdmFyIHBvcHBlclN0eWxlcyA9IGRhdGEuaW5zdGFuY2UucG9wcGVyLnN0eWxlOyAvLyBhc3NpZ25tZW50IHRvIGhlbHAgbWluaWZpY2F0aW9uXG4gIHZhciB0b3AgPSBwb3BwZXJTdHlsZXMudG9wLFxuICAgICAgbGVmdCA9IHBvcHBlclN0eWxlcy5sZWZ0LFxuICAgICAgdHJhbnNmb3JtID0gcG9wcGVyU3R5bGVzW3RyYW5zZm9ybVByb3BdO1xuXG4gIHBvcHBlclN0eWxlcy50b3AgPSAnJztcbiAgcG9wcGVyU3R5bGVzLmxlZnQgPSAnJztcbiAgcG9wcGVyU3R5bGVzW3RyYW5zZm9ybVByb3BdID0gJyc7XG5cbiAgdmFyIGJvdW5kYXJpZXMgPSBnZXRCb3VuZGFyaWVzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBkYXRhLmluc3RhbmNlLnJlZmVyZW5jZSwgb3B0aW9ucy5wYWRkaW5nLCBib3VuZGFyaWVzRWxlbWVudCwgZGF0YS5wb3NpdGlvbkZpeGVkKTtcblxuICAvLyBOT1RFOiBET00gYWNjZXNzIGhlcmVcbiAgLy8gcmVzdG9yZXMgdGhlIG9yaWdpbmFsIHN0eWxlIHByb3BlcnRpZXMgYWZ0ZXIgdGhlIG9mZnNldHMgaGF2ZSBiZWVuIGNvbXB1dGVkXG4gIHBvcHBlclN0eWxlcy50b3AgPSB0b3A7XG4gIHBvcHBlclN0eWxlcy5sZWZ0ID0gbGVmdDtcbiAgcG9wcGVyU3R5bGVzW3RyYW5zZm9ybVByb3BdID0gdHJhbnNmb3JtO1xuXG4gIG9wdGlvbnMuYm91bmRhcmllcyA9IGJvdW5kYXJpZXM7XG5cbiAgdmFyIG9yZGVyID0gb3B0aW9ucy5wcmlvcml0eTtcbiAgdmFyIHBvcHBlciA9IGRhdGEub2Zmc2V0cy5wb3BwZXI7XG5cbiAgdmFyIGNoZWNrID0ge1xuICAgIHByaW1hcnk6IGZ1bmN0aW9uIHByaW1hcnkocGxhY2VtZW50KSB7XG4gICAgICB2Y
2XIgdmFsdWUgPSBwb3BwZXJbcGxhY2VtZW50XTtcbiAgICAgIGlmIChwb3BwZXJbcGxhY2VtZW50XSA8IGJvdW5kYXJpZXNbcGxhY2VtZW50XSAmJiAhb3B0aW9ucy5lc2NhcGVXaXRoUmVmZXJlbmNlKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5tYXgocG9wcGVyW3BsYWNlbWVudF0sIGJvdW5kYXJpZXNbcGxhY2VtZW50XSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoe30sIHBsYWNlbWVudCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2Vjb25kYXJ5OiBmdW5jdGlvbiBzZWNvbmRhcnkocGxhY2VtZW50KSB7XG4gICAgICB2YXIgbWFpblNpZGUgPSBwbGFjZW1lbnQgPT09ICdyaWdodCcgPyAnbGVmdCcgOiAndG9wJztcbiAgICAgIHZhciB2YWx1ZSA9IHBvcHBlclttYWluU2lkZV07XG4gICAgICBpZiAocG9wcGVyW3BsYWNlbWVudF0gPiBib3VuZGFyaWVzW3BsYWNlbWVudF0gJiYgIW9wdGlvbnMuZXNjYXBlV2l0aFJlZmVyZW5jZSkge1xuICAgICAgICB2YWx1ZSA9IE1hdGgubWluKHBvcHBlclttYWluU2lkZV0sIGJvdW5kYXJpZXNbcGxhY2VtZW50XSAtIChwbGFjZW1lbnQgPT09ICdyaWdodCcgPyBwb3BwZXIud2lkdGggOiBwb3BwZXIuaGVpZ2h0KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoe30sIG1haW5TaWRlLCB2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIG9yZGVyLmZvckVhY2goZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHZhciBzaWRlID0gWydsZWZ0JywgJ3RvcCddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTEgPyAncHJpbWFyeScgOiAnc2Vjb25kYXJ5JztcbiAgICBwb3BwZXIgPSBfZXh0ZW5kcyh7fSwgcG9wcGVyLCBjaGVja1tzaWRlXShwbGFjZW1lbnQpKTtcbiAgfSk7XG5cbiAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IHBvcHBlcjtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gc2hpZnQoZGF0YSkge1xuICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBzaGlmdHZhcmlhdGlvbiA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xuXG4gIC8vIGlmIHNoaWZ0IHNoaWZ0dmFyaWF0aW9uIGlzIHNwZWNpZmllZCwgcnVuIHRoZSBtb2RpZmllclxuICBpZiAoc2hpZnR2YXJpYXRpb24pIHtcbiAgICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2UsXG4gICAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyO1xuXG4gICAgdmFyIGlzVmVydGljYWwgPSBbJ2JvdHRvbScsICd0b3AnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcbiAgICB2YXIgc2lkZSA9IGlzVmVydGljYWwgPyAnbGVmdCcgOiAndG9wJztcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuXG4gICAgdmFyIHNoaWZ0T2Zmc2V0cyA9IHtcbiAgICAgIHN0YXJ0OiBkZWZpbmVQcm9wZXJ0eSh7fSwgc2lkZSwgcmVmZXJlbmNlW3NpZGVdKSxcbiAgICAgIGVuZDogZGVmaW5lUHJvcGVydHkoe30sIHNpZGUsIHJlZmVyZW5jZVtzaWRlXSArIHJlZmVyZW5jZVttZWFzdXJlbWVudF0gLSBwb3BwZXJbbWVhc3VyZW1lbnRdKVxuICAgIH07XG5cbiAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gX2V4dGVuZHMoe30sIHBvcHBlciwgc2hpZnRPZmZzZXRzW3NoaWZ0dmFyaWF0aW9uXSk7XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGhpZGUoZGF0YSkge1xuICBpZiAoIWlzTW9kaWZpZXJSZXF1aXJlZChkYXRhLmluc3RhbmNlLm1vZGlmaWVycywgJ2hpZGUnLCAncHJldmVudE92ZXJmbG93JykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciByZWZSZWN0ID0gZGF0YS5vZmZzZXRzLnJlZmVyZW5jZTtcbiAgdmFyIGJvdW5kID0gZmluZChkYXRhLmluc3RhbmNlLm1vZGlmaWVycywgZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgcmV0dXJuIG1vZGlmaWVyLm5hbWUgPT09ICdwcmV2ZW50T3ZlcmZsb3cnO1xuICB9KS5ib3VuZGFyaWVzO1xuXG4gIGlmIChyZWZSZWN0LmJvdHRvbSA8IGJvdW5kLnRvcCB8fCByZWZSZWN0LmxlZnQgPiBib3VuZC5yaWdodCB8fCByZWZSZWN0LnRvcCA+IGJvdW5kLmJvdHRvbSB8fCByZWZSZWN0LnJpZ2h0IDwgYm91bmQubGVmdCkge1xuICAgIC8vIEF2b2lkIHVubmVjZXNzYXJ5IERPTSBhY2Nlc3MgaWYgdmlzaWJpbGl0eSBoYXNuJ3QgY2hhbmdlZFxuICAgIGlmIChkYXRhLmhpZGUgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGRhdGEuaGlkZSA9IHRydWU7XG4gICAgZGF0YS5hdHRyaWJ1dGVzWyd4LW91dC1vZi1ib3VuZGFyaWVzJ10gPSAnJztcbiAgfSBlbHNlIHtcbiAgICAvLyBBdm9pZCB1bm5lY2Vzc2FyeSBET00gYWNjZXNzIGlmIHZpc2liaWxpdHkgaGFzbid0IGNoYW5nZWRcbiAgICBpZiAoZGF0YS5oaWRlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgZGF0YS5oaWRlID0gZmFsc2U7XG4gICAgZGF0YS5hdHRyaWJ1dGVzWy
2d4LW91dC1vZi1ib3VuZGFyaWVzJ10gPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBpbm5lcihkYXRhKSB7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIF9kYXRhJG9mZnNldHMgPSBkYXRhLm9mZnNldHMsXG4gICAgICBwb3BwZXIgPSBfZGF0YSRvZmZzZXRzLnBvcHBlcixcbiAgICAgIHJlZmVyZW5jZSA9IF9kYXRhJG9mZnNldHMucmVmZXJlbmNlO1xuXG4gIHZhciBpc0hvcml6ID0gWydsZWZ0JywgJ3JpZ2h0J10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgdmFyIHN1YnRyYWN0TGVuZ3RoID0gWyd0b3AnLCAnbGVmdCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPT09IC0xO1xuXG4gIHBvcHBlcltpc0hvcml6ID8gJ2xlZnQnIDogJ3RvcCddID0gcmVmZXJlbmNlW2Jhc2VQbGFjZW1lbnRdIC0gKHN1YnRyYWN0TGVuZ3RoID8gcG9wcGVyW2lzSG9yaXogPyAnd2lkdGgnIDogJ2hlaWdodCddIDogMCk7XG5cbiAgZGF0YS5wbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICBkYXRhLm9mZnNldHMucG9wcGVyID0gZ2V0Q2xpZW50UmVjdChwb3BwZXIpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIE1vZGlmaWVyIGZ1bmN0aW9uLCBlYWNoIG1vZGlmaWVyIGNhbiBoYXZlIGEgZnVuY3Rpb24gb2YgdGhpcyB0eXBlIGFzc2lnbmVkXG4gKiB0byBpdHMgYGZuYCBwcm9wZXJ0eS48YnIgLz5cbiAqIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIHVwZGF0ZSwgdGhpcyBtZWFucyB0aGF0IHlvdSBtdXN0XG4gKiBtYWtlIHN1cmUgdGhleSBhcmUgcGVyZm9ybWFudCBlbm91Z2ggdG8gYXZvaWQgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuXG4gKlxuICogQGZ1bmN0aW9uIE1vZGlmaWVyRm5cbiAqIEBhcmd1bWVudCB7ZGF0YU9iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7ZGF0YU9iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5cbi8qKlxuICogTW9kaWZpZXJzIGFyZSBwbHVnaW5zIHVzZWQgdG8gYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIHlvdXIgcG9wcGVycy48YnIgLz5cbiAqIFBvcHBlci5qcyB1c2VzIGEgc2V0IG9mIDkgbW9kaWZpZXJzIHRvIHByb3ZpZGUgYWxsIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXRpZXNcbiAqIG5lZWRlZCBieSB0aGUgbGlicmFyeS5cbiAqXG4gKiBVc3VhbGx5IHlvdSBkb24ndCB3YW50IHRvIG92ZXJyaWRlIHRoZSBgb3JkZXJgLCBgZm5gIGFuZCBgb25Mb2FkYCBwcm9wcy5cbiAqIEFsbCB0aGUgb3RoZXIgcHJvcGVydGllcyBhcmUgY29uZmlndXJhdGlvbnMgdGhhdCBjb3VsZCBiZSB0d2Vha2VkLlxuICogQG5hbWVzcGFjZSBtb2RpZmllcnNcbiAqL1xudmFyIG1vZGlmaWVycyA9IHtcbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gc2hpZnQgdGhlIHBvcHBlciBvbiB0aGUgc3RhcnQgb3IgZW5kIG9mIGl0cyByZWZlcmVuY2VcbiAgICogZWxlbWVudC48YnIgLz5cbiAgICogSXQgd2lsbCByZWFkIHRoZSB2YXJpYXRpb24gb2YgdGhlIGBwbGFjZW1lbnRgIHByb3BlcnR5LjxiciAvPlxuICAgKiBJdCBjYW4gYmUgb25lIGVpdGhlciBgLWVuZGAgb3IgYC1zdGFydGAuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBzaGlmdDoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj0xMDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDEwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IHNoaWZ0XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRoZSBgb2Zmc2V0YCBtb2RpZmllciBjYW4gc2hpZnQgeW91ciBwb3BwZXIgb24gYm90aCBpdHMgYXhpcy5cbiAgICpcbiAgICogSXQgYWNjZXB0cyB0aGUgZm9sbG93aW5nIHVuaXRzOlxuICAgKiAtIGBweGAgb3IgdW5pdC1sZXNzLCBpbnRlcnByZXRlZCBhcyBwaXhlbHNcbiAgICogLSBgJWAgb3IgYCVyYCwgcGVyY2VudGFnZSByZWxhdGl2ZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudFxuICAgKiAtIGAlcGAsIHBlcmNlbnRhZ2UgcmVsYXRpdmUgdG8gdGhlIGxlbmd0aCBvZiB0aGUgcG9wcGVyIGVsZW1lbnRcbiAgICogLSBgdndgLCBDU1Mgdmlld3BvcnQgd2lkdGggdW5pdFxuICAgKiAtIGB2aGAsIENTUyB2aWV3cG9ydCBoZWlnaHQgdW5pdFxuICAgKlxuICAgKiBGb3IgbGVuZ3RoIGlzIGludGVuZGVkIHRoZSBtYWluIGF4aXMgcmVsYXRpdmUgdG8gdGhlIHBsYWNlbWVudCBvZiB0aGUgcG9wcGVyLjxiciAvPlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlIHBsYWNlbWVudCBpcyBgdG9wYCBvciBgYm90dG9tYCwgdGhlIGxlbmd0aCB3aWxsIGJlIHRoZVxuICAgKiBgd2lkdGhgLiBJbiBjYXNlIG9mIGBsZWZ0YCBvciBgcmlnaHRgLCBpdCB3aWxsIGJlIHRoZSBgaGVpZ2h0YC5cbiAgICpcbiAgICogWW91IGNhbiBwcm92aWRlIGEgc2luZ2xlIHZhbHVlIChhcyBgTnVtYmVyYCBvciBgU3RyaW5nYCksIG9yIGEgcGFpciBvZiB2YWx1ZXNcbiAgICogYXMgYFN0cmluZ2AgZGl2aWRlZCBieSBhIGNvbW1hIG9yIG9uZSAob3IgbW9yZSkgd2hpdGUgc3BhY2VzLjxiciAvPlxuICAgKiBUaGUgbGF0dGVyIGlzIGEgZGVwcmVjYXRlZCBtZXRob2QgYmVjYXVzZSBpdCBsZWFkcyB0byBjb25mdXNpb24gYW5kIHdpbGwgYmVcbiAgICogcmVtb3ZlZCBpbiB2Mi48YnIgLz5cbiAgICogQWRkaXRpb25hbGx5LCBpdCBhY2NlcHRzIGFkZGl0aW9ucyBhbmQgc3VidHJhY3Rpb25zIGJldHdlZW4gZGlmZmVyZW50IHVuaXRzLlxuICAgKiBOb3RlIHRoYXQgbXVsdGlwbGljYXRpb25zIGFuZCBkaXZpc2lvbnMgYXJlbid0IHN1cHBvcnRlZC5cbiAgICpcbiAgICogVmFsaWQgZXhhbXBsZXMgYXJlOlxuICAgKiBgYGBcbiAgICogMTBcbiAgICogJzEwJSdcbiAgICogJzEwLCAxMCdcbiAgICogJzEwJSwgMTAnXG4gICAqICcxMCArIDEwJSdcbiAgICogJzEwIC0gNXZoICsgMyUnXG4gICAqICctMTBweCArIDV2aCwgNXB4IC0gNiUnXG4gICAqIGBgYFxuICAgKiA+ICoqTkIqKjogSWYgeW91IGRlc2lyZSB0byBhcHBseSBvZmZzZXRzIHRvIHlvdXIgcG9wcGVycyBpbiBhIHdheSB0aGF0IG1heSBtYWtlIHRoZW0gb3ZlcmxhcFxuICAgKiA+IHdpdGggdGhlaXIgcmVmZXJlbmNlIGVsZW1lbnQsIHVuZm9ydHVuYXRlbHksIHlvdSB3aWxsIGhhdmUgdG8gZGlzYWJsZSB0aGUgYGZsaXBgIG1vZGlmaWVyLlxuICAgKiA+IFlvdSBjYW4gcmVhZCBtb3JlIG9uIHRoaXMgYXQgdGhpcyBbaXNzdWVdKGh0dHBzOi8vZ2l0aHViLmNvbS9GZXpWcmFzdGEvcG9wcGVyLmpzL2lzc3Vlcy8zNzMpLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgb2Zmc2V0OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTIwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogMjAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogb2Zmc2V0LFxuICAgIC8qKiBAcHJvcCB7TnVtYmVyfFN0cmluZ30gb2Zmc2V0PTBcbiAgICAgKiBUaGUgb2Zmc2V0IHZhbHVlIGFzIGRlc2NyaWJlZCBpbiB0aGUgbW9kaWZpZXIgZGVzY3JpcHRpb25cbiAgICAgKi9cbiAgICBvZmZzZXQ6IDBcbiAgfSxcblxuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBwcmV2ZW50IHRoZSBwb3BwZXIgZnJvbSBiZWluZyBwb3NpdGlvbmVkIG91dHNpZGUgdGhlIGJvdW5kYXJ5LlxuICAgKlxuICAgKiBBIHNjZW5hcmlvIGV4aXN0cyB3aGVyZSB0aGUgcmVmZXJlbmNlIGl0c2VsZiBpcyBub3Qgd2l0aGluIHRoZSBib3VuZGFyaWVzLjxiciAvPlxuICAgKiBXZSBjYW4gc2F5IGl0IGhhcyBcImVzY2FwZWQgdGhlIGJvdW5kYXJpZXNcIiDigJQgb3IganVzdCBcImVzY2FwZWRcIi48YnIgLz5cbiAgICogSW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIHBvcHBlciBzaG91bGQgZWl0aGVyOlxuICAgKlxuICAgKiAtIGRldGFjaCBmcm9tIHRoZSByZWZlcmVuY2UgYW5kIHJlbWFpbiBcInRyYXBwZWRcIiBpbiB0aGUgYm91bmRhcmllcywgb3JcbiAgICogLSBpZiBpdCBzaG91bGQgaWdub3JlIHRoZSBib3VuZGFyeSBhbmQgXCJlc2NhcGUgd2l0aCBpdHMgcmVmZXJlbmNlXCJcbiAgICpcbiAgICogV2hlbiBgZXNjYXBlV2l0aFJlZmVyZW5jZWAgaXMgc2V0IHRvYHRydWVgIGFuZCByZWZlcmVuY2UgaXMgY29tcGxldGVseVxuICAgKiBvdXRzaWRlIGl0cyBib3VuZGFyaWVzLCB0aGUgcG9wcGVyIHdpbGwgb3ZlcmZsb3cgKG9yIGNvbXBsZXRlbHkgbGVhdmUpXG4gICAqIHRoZSBib3VuZGFyaWVzIGluIG9yZGVyIHRvIHJlbWFpbiBhdHRhY2hlZCB0byB0aGUgZWRnZSBvZiB0aGUgcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgcHJldmVudE92ZXJmbG93OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTMwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogMzAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogcHJldmVudE92ZXJmbG93LFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtBcnJheX0gW3ByaW9yaXR5P
2VsnbGVmdCcsJ3JpZ2h0JywndG9wJywnYm90dG9tJ11dXG4gICAgICogUG9wcGVyIHdpbGwgdHJ5IHRvIHByZXZlbnQgb3ZlcmZsb3cgZm9sbG93aW5nIHRoZXNlIHByaW9yaXRpZXMgYnkgZGVmYXVsdCxcbiAgICAgKiB0aGVuLCBpdCBjb3VsZCBvdmVyZmxvdyBvbiB0aGUgbGVmdCBhbmQgb24gdG9wIG9mIHRoZSBgYm91bmRhcmllc0VsZW1lbnRgXG4gICAgICovXG4gICAgcHJpb3JpdHk6IFsnbGVmdCcsICdyaWdodCcsICd0b3AnLCAnYm90dG9tJ10sXG4gICAgLyoqXG4gICAgICogQHByb3Age251bWJlcn0gcGFkZGluZz01XG4gICAgICogQW1vdW50IG9mIHBpeGVsIHVzZWQgdG8gZGVmaW5lIGEgbWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBib3VuZGFyaWVzXG4gICAgICogYW5kIHRoZSBwb3BwZXIuIFRoaXMgbWFrZXMgc3VyZSB0aGUgcG9wcGVyIGFsd2F5cyBoYXMgYSBsaXR0bGUgcGFkZGluZ1xuICAgICAqIGJldHdlZW4gdGhlIGVkZ2VzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cbiAgICBwYWRkaW5nOiA1LFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50PSdzY3JvbGxQYXJlbnQnXG4gICAgICogQm91bmRhcmllcyB1c2VkIGJ5IHRoZSBtb2RpZmllci4gQ2FuIGJlIGBzY3JvbGxQYXJlbnRgLCBgd2luZG93YCxcbiAgICAgKiBgdmlld3BvcnRgIG9yIGFueSBET00gZWxlbWVudC5cbiAgICAgKi9cbiAgICBib3VuZGFyaWVzRWxlbWVudDogJ3Njcm9sbFBhcmVudCdcbiAgfSxcblxuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBtYWtlIHN1cmUgdGhlIHJlZmVyZW5jZSBhbmQgaXRzIHBvcHBlciBzdGF5IG5lYXIgZWFjaCBvdGhlclxuICAgKiB3aXRob3V0IGxlYXZpbmcgYW55IGdhcCBiZXR3ZWVuIHRoZSB0d28uIEVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gdGhlIGFycm93IGlzXG4gICAqIGVuYWJsZWQgYW5kIHlvdSB3YW50IHRvIGVuc3VyZSB0aGF0IGl0IHBvaW50cyB0byBpdHMgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEl0IGNhcmVzIG9ubHkgYWJvdXQgdGhlIGZpcnN0IGF4aXMuIFlvdSBjYW4gc3RpbGwgaGF2ZSBwb3BwZXJzIHdpdGggbWFyZ2luXG4gICAqIGJldHdlZW4gdGhlIHBvcHBlciBhbmQgaXRzIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAga2VlcFRvZ2V0aGVyOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTQwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogNDAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjoga2VlcFRvZ2V0aGVyXG4gIH0sXG5cbiAgLyoqXG4gICAqIFRoaXMgbW9kaWZpZXIgaXMgdXNlZCB0byBtb3ZlIHRoZSBgYXJyb3dFbGVtZW50YCBvZiB0aGUgcG9wcGVyIHRvIG1ha2VcbiAgICogc3VyZSBpdCBpcyBwb3NpdGlvbmVkIGJldHdlZW4gdGhlIHJlZmVyZW5jZSBlbGVtZW50IGFuZCBpdHMgcG9wcGVyIGVsZW1lbnQuXG4gICAqIEl0IHdpbGwgcmVhZCB0aGUgb3V0ZXIgc2l6ZSBvZiB0aGUgYGFycm93RWxlbWVudGAgbm9kZSB0byBkZXRlY3QgaG93IG1hbnlcbiAgICogcGl4ZWxzIG9mIGNvbmp1bmN0aW9uIGFyZSBuZWVkZWQuXG4gICAqXG4gICAqIEl0IGhhcyBubyBlZmZlY3QgaWYgbm8gYGFycm93RWxlbWVudGAgaXMgcHJvdmlkZWQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBhcnJvdzoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj01MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDUwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGFycm93LFxuICAgIC8qKiBAcHJvcCB7U3RyaW5nfEhUTUxFbGVtZW50fSBlbGVtZW50PSdbeC1hcnJvd10nIC0gU2VsZWN0b3Igb3Igbm9kZSB1c2VkIGFzIGFycm93ICovXG4gICAgZWxlbWVudDogJ1t4LWFycm93XSdcbiAgfSxcblxuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBmbGlwIHRoZSBwb3BwZXIncyBwbGFjZW1lbnQgd2hlbiBpdCBzdGFydHMgdG8gb3ZlcmxhcCBpdHNcbiAgICogcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgcHJldmVudE92ZXJmbG93YCBtb2RpZmllciBiZWZvcmUgaXQgaW4gb3JkZXIgdG8gd29yay5cbiAgICpcbiAgICogKipOT1RFOioqIHRoaXMgbW9kaWZpZXIgd2lsbCBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlIGFuZCB3aWxsXG4gICAqIHJlc3RhcnQgaXQgaWYgaXQgZGV0ZWN0cyB0aGUgbmVlZCB0byBmbGlwIHRoZSBwbGFjZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBmbGlwOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTYwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogNjAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogZmxpcCxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7U3RyaW5nfEFycmF5fSBiZWhhdmlvcj0nZmxpcCdcbiAgICAgKiBUaGUgYmVoYXZpb3IgdXNlZCB0byBjaGFuZ2UgdGhlIHBvcHBlcidzIHBsYWNlbWVudC4gSXQgY2FuIGJlIG9uZSBvZlxuICAgICAqIGBmbGlwYCwgYGNsb2Nrd2lzZWAsIGBjb3VudGVyY2xvY2t3aXNlYCBvciBhbiBhcnJheSB3aXRoIGEgbGlzdCBvZiB2YWxpZFxuICAgICAqIHBsYWNlbWVudHMgKHdpdGggb3B0aW9uYWwgdmFyaWF0aW9ucylcbiAgICAgKi9cbiAgICBiZWhhdmlvcjogJ2ZsaXAnLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtudW1iZXJ9IHBhZGRpbmc9NVxuICAgICAqIFRoZSBwb3BwZXIgd2lsbCBmbGlwIGlmIGl0IGhpdHMgdGhlIGVkZ2VzIG9mIHRoZSBgYm91bmRhcmllc0VsZW1lbnRgXG4gICAgICovXG4gICAgcGFkZGluZzogNSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7U3RyaW5nfEhUTUxFbGVtZW50fSBib3VuZGFyaWVzRWxlbWVudD0ndmlld3BvcnQnXG4gICAgICogVGhlIGVsZW1lbnQgd2hpY2ggd2lsbCBkZWZpbmUgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHBvcHBlciBwb3NpdGlvbi5cbiAgICAgKiBUaGUgcG9wcGVyIHdpbGwgbmV2ZXIgYmUgcGxhY2VkIG91dHNpZGUgb2YgdGhlIGRlZmluZWQgYm91bmRhcmllc1xuICAgICAqIChleGNlcHQgaWYgYGtlZXBUb2dldGhlcmAgaXMgZW5hYmxlZClcbiAgICAgKi9cbiAgICBib3VuZGFyaWVzRWxlbWVudDogJ3ZpZXdwb3J0JyxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7Qm9vbGVhbn0gZmxpcFZhcmlhdGlvbnM9ZmFsc2VcbiAgICAgKiBUaGUgcG9wcGVyIHdpbGwgc3dpdGNoIHBsYWNlbWVudCB2Y
2XJpYXRpb24gYmV0d2VlbiBgLXN0YXJ0YCBhbmQgYC1lbmRgIHdoZW5cbiAgICAgKiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgb3ZlcmxhcHMgaXRzIGJvdW5kYXJpZXMuXG4gICAgICpcbiAgICAgKiBUaGUgb3JpZ2luYWwgcGxhY2VtZW50IHNob3VsZCBoYXZlIGEgc2V0IHZhcmlhdGlvbi5cbiAgICAgKi9cbiAgICBmbGlwVmFyaWF0aW9uczogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQHByb3Age0Jvb2xlYW59IGZsaXBWYXJpYXRpb25zQnlDb250ZW50PWZhbHNlXG4gICAgICogVGhlIHBvcHBlciB3aWxsIHN3aXRjaCBwbGFjZW1lbnQgdmFyaWF0aW9uIGJldHdlZW4gYC1zdGFydGAgYW5kIGAtZW5kYCB3aGVuXG4gICAgICogdGhlIHBvcHBlciBlbGVtZW50IG92ZXJsYXBzIGl0cyByZWZlcmVuY2UgYm91bmRhcmllcy5cbiAgICAgKlxuICAgICAqIFRoZSBvcmlnaW5hbCBwbGFjZW1lbnQgc2hvdWxkIGhhdmUgYSBzZXQgdmFyaWF0aW9uLlxuICAgICAqL1xuICAgIGZsaXBWYXJpYXRpb25zQnlDb250ZW50OiBmYWxzZVxuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2UgdGhlIHBvcHBlciBmbG93IHRvd2FyZCB0aGUgaW5uZXIgb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB3aGVuIHRoaXMgbW9kaWZpZXIgaXMgZGlzYWJsZWQsIHRoZSBwb3BwZXIgd2lsbCBiZSBwbGFjZWQgb3V0c2lkZVxuICAgKiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBpbm5lcjoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj03MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDcwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9ZmFsc2UgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogaW5uZXJcbiAgfSxcblxuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBoaWRlIHRoZSBwb3BwZXIgd2hlbiBpdHMgcmVmZXJlbmNlIGVsZW1lbnQgaXMgb3V0c2lkZSBvZiB0aGVcbiAgICogcG9wcGVyIGJvdW5kYXJpZXMuIEl0IHdpbGwgc2V0IGEgYHgtb3V0LW9mLWJvdW5kYXJpZXNgIGF0dHJpYnV0ZSB3aGljaCBjYW5cbiAgICogYmUgdXNlZCB0byBoaWRlIHdpdGggYSBDU1Mgc2VsZWN0b3IgdGhlIHBvcHBlciB3aGVuIGl0cyByZWZlcmVuY2UgaXNcbiAgICogb3V0IG9mIGJvdW5kYXJpZXMuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgcHJldmVudE92ZXJmbG93YCBtb2RpZmllciBiZWZvcmUgaXQgaW4gb3JkZXIgdG8gd29yay5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGhpZGU6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9ODAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA4MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBoaWRlXG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIHRoZSBzdHlsZSB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyIGVsZW1lbnQgdG8gZ2V0c1xuICAgKiBwcm9wZXJseSBwb3NpdGlvbmVkLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBtb2RpZmllciB3aWxsIG5vdCB0b3VjaCB0aGUgRE9NLCBpdCBqdXN0IHByZXBhcmVzIHRoZSBzdHlsZXNcbiAgICogc28gdGhhdCBgYXBwbHlTdHlsZWAgbW9kaWZpZXIgY2FuIGFwcGx5IGl0LiBUaGlzIHNlcGFyYXRpb24gaXMgdXNlZnVsXG4gICAqIGluIGNhc2UgeW91IG5lZWQgdG8gcmVwbGFjZSBgYXBwbHlTdHlsZWAgd2l0aCBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogVGhpcyBtb2RpZmllciBoYXMgYDg1MGAgYXMgYG9yZGVyYCB2YWx1ZSB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAqIHdpdGggcHJldmlvdXMgdmVyc2lvbnMgb2YgUG9wcGVyLmpzLiBFeHBlY3QgdGhlIG1vZGlmaWVycyBvcmRlcmluZyBtZXRob2RcbiAgICogdG8gY2hhbmdlIGluIGZ1dHVyZSBtYWpvciB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeS5cbiAgICpcbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGNvbXB1dGVTdHlsZToge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj04NTAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDg1MCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGNvbXB1dGVTdHlsZSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7Qm9vbGVhbn0gZ3B1QWNjZWxlcmF0aW9uPXRydWVcbiAgICAgKiBJZiB0cnVlLCBpdCB1c2VzIHRoZSBDU1MgM0QgdHJhbnNmb3JtYXRpb24gdG8gcG9zaXRpb24gdGhlIHBvcHBlci5cbiAgICAgKiBPdGhlcndpc2UsIGl0IHdpbGwgdXNlIHRoZSBgdG9wYCBhbmQgYGxlZnRgIHByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBncHVBY2NlbGVyYXRpb246IHRydWUsXG4gICAgLyoqXG4gICAgICogQHByb3Age3N0cmluZ30gW3g9J2JvdHRvbSddXG4gICAgICogV2hlcmUgdG8gYW5jaG9yIHRoZSBYIGF4aXMgKGBib3R0b21gIG9yIGB0b3BgKS4gQUtBIFggb2Zmc2V0IG9yaWdpbi5cbiAgICAgKiBDaGFuZ2UgdGhpcyBpZiB5b3VyIHBvcHBlciBzaG91bGQgZ3JvdyBpbiBhIGRpcmVjdGlvbiBkaWZmZXJlbnQgZnJvbSBgYm90dG9tYFxuICAgICAqL1xuICAgIHg6ICdib3R0b20nLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtzdHJpbmd9IFt4PSdsZWZ0J11cbiAgICAgKiBXaGVyZSB0byBhbmNob3IgdGhlIFkgYXhpcyAoYGxlZnRgIG9yIGByaWdodGApLiBBS0EgWSBvZmZzZXQgb3JpZ2luLlxuICAgICAqIENoYW5nZSB0aGlzIGlmIHlvdXIgcG9wcGVyIHNob3VsZCBncm93IGluIGEgZGlyZWN0aW9uIGRpZmZlcmVudCBmcm9tIGByaWdodGBcbiAgICAgKi9cbiAgICB5OiAncmlnaHQnXG4gIH0sXG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIGNvbXB1dGVkIHN0eWxlcyB0byB0aGUgcG9wcGVyIGVsZW1lbnQuXG4gICAqXG4gICAqIEFsbCB0aGUgRE9NIG1hbmlwdWxhdGlvbnMgYXJlIGxpbWl0ZWQgdG8gdGhpcyBtb2RpZmllci4gVGhpcyBpcyB1c2VmdWwgaW4gY2FzZVxuICAgKiB5b3Ugd2FudCB0byBpbnRlZ3JhdGUgUG9wcGVyLmpzIGluc2lkZSBhIGZyYW1ld29yayBvciB2aWV3IGxpYnJhcnkgYW5kIHlvdVxuICAgKiB3YW50IHRvIGRlbGVnYXRlIGFsbCB0aGUgRE9NIG1hbmlwdWxhdGlvbnMgdG8gaXQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCBpZiB5b3UgZGlzYWJsZSB0aGlzIG1vZGlmaWVyLCB5b3UgbXVzdCBtYWtlIHN1cmUgdGhlIHBvcHBlciBlbGVtZW50XG4gICAqIGhhcyBpdHMgcG9zaXRpb24gc2V0IHRvIGBhYnNvbHV0ZWAgYmVmb3JlIFBvcHBlci5qcyBjYW4gZG8gaXRzIHdvcmshXG4gICAqXG4gICAqIEp1c3QgZGlzYWJsZSB0aGlzIG1vZGlmaWVyIGFuZCBkZWZpbmUgeW91ciBvd24gdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCBlZmZlY3QuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBhc
2HBseVN0eWxlOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTkwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogOTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogYXBwbHlTdHlsZSxcbiAgICAvKiogQHByb3Age0Z1bmN0aW9ufSAqL1xuICAgIG9uTG9hZDogYXBwbHlTdHlsZU9uTG9hZCxcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDEuMTAuMCwgdGhlIHByb3BlcnR5IG1vdmVkIHRvIGBjb21wdXRlU3R5bGVgIG1vZGlmaWVyXG4gICAgICogQHByb3Age0Jvb2xlYW59IGdwdUFjY2VsZXJhdGlvbj10cnVlXG4gICAgICogSWYgdHJ1ZSwgaXQgdXNlcyB0aGUgQ1NTIDNEIHRyYW5zZm9ybWF0aW9uIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXIuXG4gICAgICogT3RoZXJ3aXNlLCBpdCB3aWxsIHVzZSB0aGUgYHRvcGAgYW5kIGBsZWZ0YCBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiB1bmRlZmluZWRcbiAgfVxufTtcblxuLyoqXG4gKiBUaGUgYGRhdGFPYmplY3RgIGlzIGFuIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCBieSBQb3BwZXIuanMuXG4gKiBUaGlzIG9iamVjdCBpcyBwYXNzZWQgdG8gbW9kaWZpZXJzIGFuZCB0byB0aGUgYG9uQ3JlYXRlYCBhbmQgYG9uVXBkYXRlYCBjYWxsYmFja3MuXG4gKiBAbmFtZSBkYXRhT2JqZWN0XG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5pbnN0YW5jZSBUaGUgUG9wcGVyLmpzIGluc3RhbmNlXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZGF0YS5wbGFjZW1lbnQgUGxhY2VtZW50IGFwcGxpZWQgdG8gcG9wcGVyXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZGF0YS5vcmlnaW5hbFBsYWNlbWVudCBQbGFjZW1lbnQgb3JpZ2luYWxseSBkZWZpbmVkIG9uIGluaXRcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZGF0YS5mbGlwcGVkIFRydWUgaWYgcG9wcGVyIGhhcyBiZWVuIGZsaXBwZWQgYnkgZmxpcCBtb2RpZmllclxuICogQHByb3BlcnR5IHtCb29sZWFufSBkYXRhLmhpZGUgVHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgaXMgb3V0IG9mIGJvdW5kYXJpZXMsIHVzZWZ1bCB0byBrbm93IHdoZW4gdG8gaGlkZSB0aGUgcG9wcGVyXG4gKiBAcHJvcGVydHkge0hUTUxFbGVtZW50fSBkYXRhLmFycm93RWxlbWVudCBOb2RlIHVzZWQgYXMgYXJyb3cgYnkgYXJyb3cgbW9kaWZpZXJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLnN0eWxlcyB
2BbnkgQ1NTIHByb3BlcnR5IGRlZmluZWQgaGVyZSB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlci4gSXQgZXhwZWN0cyB0aGUgSmF2YVNjcmlwdCBub21lbmNsYXR1cmUgKGVnLiBgbWFyZ2luQm90dG9tYClcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLmFycm93U3R5bGVzIEFueSBDU1MgcHJvcGVydHkgZGVmaW5lZCBoZXJlIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyIGFycm93LiBJdCBleHBlY3RzIHRoZSBKYXZhU2NyaXB0IG5vbWVuY2xhdHVyZSAoZWcuIGBtYXJnaW5Cb3R0b21gKVxuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEuYm91bmRhcmllcyBPZmZzZXRzIG9mIHRoZSBwb3BwZXIgYm91bmRhcmllc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cyBUaGUgbWVhc3VyZW1lbnRzIG9mIHBvcHBlciwgcmVmZXJlbmNlIGFuZCBhcnJvdyBlbGVtZW50c1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cy5wb3BwZXIgYHRvcGAsIGBsZWZ0YCwgYHdpZHRoYCwgYGhlaWdodGAgdmFsdWVzXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzLnJlZmVyZW5jZSBgdG9wYCwgYGxlZnRgLCBgd2lkdGhgLCBgaGVpZ2h0YCB2YWx1ZXNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLm9mZnNldHMuYXJyb3ddIGB0b3BgIGFuZCBgbGVmdGAgb2Zmc2V0cywgb25seSBvbmUgb2YgdGhlbSB3aWxsIGJlIGRpZmZlcmVudCBmcm9tIDBcbiAqL1xuXG4vKipcbiAqIERlZmF1bHQgb3B0aW9ucyBwcm92aWRlZCB0byBQb3BwZXIuanMgY29uc3RydWN0b3IuPGJyIC8+XG4gKiBUaGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgYG9wdGlvbnNgIGFyZ3VtZW50IG9mIFBvcHBlci5qcy48YnIgLz5cbiAqIFRvIG92ZXJyaWRlIGFuIG9wdGlvbiwgc2ltcGx5IHBhc3MgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWVcbiAqIHN0cnVjdHVyZSBvZiB0aGUgYG9wdGlvbnNgIG9iamVjdCwgYXMgdGhlIDNyZCBhcmd1bWVudC4gRm9yIGV4YW1wbGU6XG4gKiBgYGBcbiAqIG5ldyBQb3BwZXIocmVmLCBwb3AsIHtcbiAqICAgbW9kaWZpZXJzOiB7XG4gKiAgICAgcHJldmVudE92ZXJmbG93OiB7IGVuYWJsZWQ6IGZhbHNlIH1cbiAqICAgfVxuICogfSlcbiAqIGBgYFxuICogQHR5cGUge09iamVjdH1cbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xudmFyIERlZmF1bHRzID0ge1xuICAvKipcbiAgICogUG9wcGVyJ3MgcGxhY2VtZW50LlxuICAgKiBAcHJvcCB7UG9wcGVyLnBsYWNlbWVudHN9IHBsYWNlbWVudD0nYm90dG9tJ1xuICAgKi9cbiAgcGxhY2VtZW50OiAnYm90dG9tJyxcblxuICAvKipcbiAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCBwb3BwZXIgdG8gcG9zaXRpb24gaXQgc2VsZiBpbiAnZml4ZWQnIG1vZGVcbiAgICogQHByb3Age0Jvb2xlYW59IHBvc2l0aW9uRml4ZWQ9ZmFsc2VcbiAgICovXG4gIHBvc2l0aW9uRml4ZWQ6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGV2ZW50cyAocmVzaXplLCBzY3JvbGwpIGFyZSBpbml0aWFsbHkgZW5hYmxlZC5cbiAgICogQHByb3Age0Jvb2xlYW59IGV2ZW50c0VuYWJsZWQ9dHJ1ZVxuICAgKi9cbiAgZXZlbnRzRW5hYmxlZDogdHJ1ZSxcblxuICAvKipcbiAgICogU2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gYXV0b21hdGljYWxseSByZW1vdmUgdGhlIHBvcHBlciB3aGVuXG4gICAqIHlvdSBjYWxsIHRoZSBgZGVzdHJveWAgbWV0aG9kLlxuICAgKiBAcHJvcCB7Qm9vbGVhbn0gcmVtb3ZlT25EZXN0cm95PWZhbHNlXG4gICAqL1xuICByZW1vdmVPbkRlc3Ryb3k6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgcG9wcGVyIGlzIGNyZWF0ZWQuPGJyIC8+XG4gICAqIEJ5IGRlZmF1bHQsIGl0IGlzIHNldCB0byBuby1vcC48YnIgLz5cbiAgICogQWNjZXNzIFBvcHBlci5qcyBpbnN0YW5jZSB3aXRoIGBkYXRhLmluc3RhbmNlYC5cbiAgICogQHByb3Age29uQ3JlYXRlfVxuICAgKi9cbiAgb25DcmVhdGU6IGZ1bmN0aW9uIG9uQ3JlYXRlKCkge30sXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBwb3BwZXIgaXMgdXBkYXRlZC4gVGhpcyBjYWxsYmFjayBpcyBub3QgY2FsbGVkXG4gICAqIG9uIHRoZSBpbml0aWFsaXphdGlvbi9jcmVhdGlvbiBvZiB0aGUgcG9wcGVyLCBidXQgb25seSBvbiBzdWJzZXF1ZW50XG4gICAqIHVwZGF0ZXMuPGJyIC8+XG4gICAqIEJ5IGRlZmF1bHQsIGl0IGlzIHNldCB0byBuby1vcC48YnIgLz5cbiAgICogQWNjZXNzIFBvcHBlci5qcyBpbnN0YW5jZSB3aXRoIGBkYXRhLmluc3RhbmNlYC5cbiAgICogQHByb3Age29uVXBkYXRlfVxuICAgKi9cbiAgb25VcGRhdGU6IGZ1bmN0aW9uIG9uVXBkYXRlKCkge30sXG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgbW9kaWZpZXJzIHVzZWQgdG8gbW9kaWZ5IHRoZSBvZmZzZXRzIGJlZm9yZSB0aGV5IGFyZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIuXG4gICAqIFRoZXkgcHJvdmlkZSBtb3N0IG9mIHRoZSBmdW5jdGlvbmFsaXRpZXMgb2YgUG9wcGVyLmpzLlxuICAgKiBAcHJvcCB7bW9kaWZpZXJzfVxuICAgKi9cbiAgbW9kaWZpZXJzOiBtb2RpZmllcnNcbn07XG5cbi8qKlxuICogQGNhbGxiYWNrIG9uQ3JlYXRlXG4gKiBAcGFyYW0ge2RhdGFPYmplY3R9IGRhdGFcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBvblVwZGF0ZVxuICogQHBhcmFtIHtkYXRhT2JqZWN0fSBkYXRhXG4gKi9cblxuLy8gVXRpbHNcbi8vIE1ldGhvZHNcbnZhciBQb3BwZXIgPSBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IFBvcHBlci5qcyBpbnN0YW5jZS5cbiAgICogQGNsYXNzIFBvcHBlclxuICAgKiBAcGFyYW0ge0VsZW1lbnR8cmVmZXJlbmNlT2JqZWN0fSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIGVsZW1lbnQgdXNlZCB0byBwb3NpdGlvbiB0aGUgcG9wcGVyXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcG9wcGVyIC0gVGhlIEhUTUwgLyBYTUwgZWxlbWVudCB1c2VkIGFzIHRoZSBwb3BwZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBZb3VyIGN1c3RvbSBvcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBvbmVzIGRlZmluZWQgaW4gW0RlZmF1bHRzXSgjZGVmYXVsdHMpXG4gICAqIEByZXR1cm4ge09iamVjdH0gaW5zdGFuY2UgLSBUaGUgZ2VuZXJhdGVkIFBvcHBlci5qcyBpbnN0YW5jZVxuICAgKi9cbiAgZnVuY3Rpb24gUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgI
2HZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBQb3BwZXIpO1xuXG4gICAgdGhpcy5zY2hlZHVsZVVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMudXBkYXRlKTtcbiAgICB9O1xuXG4gICAgLy8gbWFrZSB1cGRhdGUoKSBkZWJvdW5jZWQsIHNvIHRoYXQgaXQgb25seSBydW5zIGF0IG1vc3Qgb25jZS1wZXItdGlja1xuICAgIHRoaXMudXBkYXRlID0gZGVib3VuY2UodGhpcy51cGRhdGUuYmluZCh0aGlzKSk7XG5cbiAgICAvLyB3aXRoIHt9IHdlIGNyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCB0aGUgb3B0aW9ucyBpbnNpZGUgaXRcbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgUG9wcGVyLkRlZmF1bHRzLCBvcHRpb25zKTtcblxuICAgIC8vIGluaXQgc3RhdGVcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNEZXN0cm95ZWQ6IGZhbHNlLFxuICAgICAgaXNDcmVhdGVkOiBmYWxzZSxcbiAgICAgIHNjcm9sbFBhcmVudHM6IFtdXG4gICAgfTtcblxuICAgIC8vIGdldCByZWZlcmVuY2UgYW5kIHBvcHBlciBlbGVtZW50cyAoYWxsb3cgalF1ZXJ5IHdyYXBwZXJzKVxuICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlICYmIHJlZmVyZW5jZS5qcXVlcnkgPyByZWZlcmVuY2VbMF0gOiByZWZlcmVuY2U7XG4gICAgdGhpcy5wb3BwZXIgPSBwb3BwZXIgJiYgcG9wcGVyLmpxdWVyeSA/IHBvcHBlclswXSA6IHBvcHBlcjtcblxuICAgIC8vIERlZXAgbWVyZ2UgbW9kaWZpZXJzIG9wdGlvbnNcbiAgICB0aGlzLm9wdGlvbnMubW9kaWZpZXJzID0ge307XG4gICAgT2JqZWN0LmtleXMoX2V4dGVuZHMoe30sIFBvcHBlci5EZWZhdWx0cy5tb2RpZmllcnMsIG9wdGlvbnMubW9kaWZpZXJzKSkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgX3RoaXMub3B0aW9ucy5tb2RpZmllcnNbbmFtZV0gPSBfZXh0ZW5kcyh7fSwgUG9wcGVyLkRlZmF1bHRzLm1vZGlmaWVyc1tuYW1lXSB8fCB7fSwgb3B0aW9ucy5tb2RpZmllcnMgPyBvcHRpb25zLm1vZGlmaWVyc1tuYW1lXSA6IHt9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlZmFjdG9yaW5nIG1vZGlmaWVycycgbGlzdCAoT2JqZWN0ID0+IEFycmF5KVxuICAgIHRoaXMubW9kaWZpZXJzID0gT2JqZWN0LmtleXModGhpcy5vcHRpb25zLm1vZGlmaWVycykubWFwKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgICBuYW1lOiBuYW1lXG4gICAgICB9LCBfdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tuYW1lXSk7XG4gICAgfSlcbiAgICAvLyBzb3J0IHRoZSBtb2RpZmllcnMgYnkgb3JkZXJcbiAgICAuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEub3JkZXIgLSBiLm9yZGVyO1xuICAgIH0pO1xuXG4gICAgLy8gbW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSB3aGVuIFBvcHBlci5qcyBnZXQgaW5pdGVkXG4gICAgLy8gc3VjaCBjb2RlIGlzIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG9yZGVyIG9mIGl0cyBtb2RpZmllclxuICAgIC8vIHRoZXkgY291bGQgYWRkIG5ldyBwcm9wZXJ0aWVzIHRvIHRoZWlyIG9wdGlvbnMgY29uZmlndXJhdGlvblxuICAgIC8vIEJFIEFXQVJFOiBkb24ndCBhZGQgb3B0aW9ucyB0byBgb3B0aW9ucy5tb2RpZmllcnMubmFtZWAgYnV0IHRvIGBtb2RpZmllck9wdGlvbnNgIVxuICAgIHRoaXMubW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyT3B0aW9ucykge1xuICAgICAgaWYgKG1vZGlmaWVyT3B0aW9ucy5lbmFibGVkICYmIGlzRnVuY3Rpb24obW9kaWZpZXJPcHRpb25zLm9uTG9hZCkpIHtcbiAgICAgICAgbW9kaWZpZXJPcHRpb25zLm9uTG9hZChfdGhpcy5yZWZlcmVuY2UsIF90aGlzLnBvcHBlciwgX3RoaXMub3B0aW9ucywgbW9kaWZpZXJPcHRpb25zLCBfdGhpcy5zdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBmaXJlIHRoZSBmaXJzdCB1cGRhdGUgdG8gcG9zaXRpb24gdGhlIHBvcHBlciBpbiB0aGUgcmlnaHQgcGxhY2VcbiAgICB0aGlzLnVwZGF0ZSgpO1xuXG4gICAgdmFyIGV2ZW50c0VuYWJsZWQgPSB0aGlzLm9wdGlvbnMuZXZlbnRzRW5hYmxlZDtcbiAgICBpZiAoZXZlbnRzRW5hYmxlZCkge1xuICAgICAgLy8gc2V0dXAgZXZlbnQgbGlzdGVuZXJzLCB0aGV5IHdpbGwgdGFrZSBjYXJlIG9mIHVwZGF0ZSB0aGUgcG9zaXRpb24gaW4gc3BlY2lmaWMgc2l0dWF0aW9uc1xuICAgICAgdGhpcy5lbmFibGVFdmVudExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUuZXZlbnRzRW5hYmxlZCA9IGV2ZW50c0VuYWJsZWQ7XG4gIH1cblxuICAvLyBXZSBjYW4ndCB1c2UgY2xhc3MgcHJvcGVydGllcyBiZWNhdXNlIHRoZXkgZG9uJ3QgZ2V0IGxpc3RlZCBpbiB0aGVcbiAgLy8gY2xhc3MgcHJvdG90eXBlIGFuZCBicmVhayBzdHVmZiBsaWtlIFNpbm9uIHN0dWJzXG5cblxuICBjcmVhdGVDbGFzcyhQb3BwZXIsIFt7XG4gICAga2V5OiAndXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlJCQxKCkge1xuICAgICAgcmV0dXJuIHVwZGF0ZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2Rlc3Ryb3knLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95JCQxKCkge1xuICAgICAgcmV0dXJuIGRlc3Ryb3kuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdlbmFibGVFdmVudExpc3RlbmVycycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVuYWJsZUV2ZW50TGlzdGVuZXJzJCQxKCkge1xuICAgICAgcmV0dXJuIGVuYWJsZUV2ZW50TGlzdGVuZXJzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZGlzYWJsZUV2ZW50TGlzdGVuZXJzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGlzYWJsZUV2ZW50TGlzdGVuZXJzJCQxKCkge1xuICAgICAgcmV0dXJuIGRpc2FibGVFdmVudExpc3RlbmVycy5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNjaGVkdWxlcyBhbiB1cGRhdGUuIEl0IHdpbGwgcnVuIG9uIHRoZSBuZXh0IFVJIHVwZGF0ZSBhdmFpbGFibGUuXG4gICAgICogQG1ldGhvZCBzY2hlZHVsZVVwZGF0ZVxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKi9cblxuXG4gICAgLyoqXG4gICAgICogQ29sbGVjdGlvbiBvZiB1dGlsaXRpZXMgdXNlZnVsIHdoZW4gd3JpdGluZyBjdXN0b20gbW9kaWZpZXJzLlxuICAgICAqIFN0YXJ0aW5nIGZyb20gdmVyc2lvbiAxLjcsIHRoaXMgbWV0aG9kIGlzIGF2YWlsYWJsZSBvbmx5IGlmIHlvdVxuICAgICAqIGluY2x1ZGUgYHBvcHBlci11dGlscy5qc2AgYmVmb3JlIGBwb3BwZXIuanNgLlxuICAgICAqXG4gICAgICogKipERVBSRUNBVElPTioqOiBUaGlzIHdheSB0byBhY2Nlc3MgUG9wcGVyVXRpbHMgaXMgZGVwcmVjYXRlZFxuICAgICAqIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjIhIFVzZSB0aGUgUG9wcGVyVXRpbHMgbW9kdWxlIGRpcmVjdGx5IGluc3RlYWQuXG4gICAgICogRHVlIHRvIH
2RoZSBoaWdoIGluc3RhYmlsaXR5IG9mIHRoZSBtZXRob2RzIGNvbnRhaW5lZCBpbiBVdGlscywgd2UgY2FuJ3RcbiAgICAgKiBndWFyYW50ZWUgdGhlbSB0byBmb2xsb3cgc2VtdmVyLiBVc2UgdGhlbSBhdCB5b3VyIG93biByaXNrIVxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjhcbiAgICAgKiBAbWVtYmVyIFV0aWxzXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqL1xuXG4gIH1dKTtcbiAgcmV0dXJuIFBvcHBlcjtcbn0oKTtcblxuLyoqXG4gKiBUaGUgYHJlZmVyZW5jZU9iamVjdGAgaXMgYW4gb2JqZWN0IHRoYXQgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGNvbXBhdGlibGUgd2l0aCBQb3BwZXIuanNcbiAqIGFuZCBsZXRzIHlvdSB1c2UgaXQgYXMgcmVwbGFjZW1lbnQgb2YgYSByZWFsIERPTSBub2RlLjxiciAvPlxuICogWW91IGNhbiB1c2UgdGhpcyBtZXRob2QgdG8gcG9zaXRpb24gYSBwb3BwZXIgcmVsYXRpdmVseSB0byBhIHNldCBvZiBjb29yZGluYXRlc1xuICogaW4gY2FzZSB5b3UgZG9uJ3QgaGF2ZSBhIERPTSBub2RlIHRvIHVzZSBhcyByZWZlcmVuY2UuXG4gKlxuICogYGBgXG4gKiBuZXcgUG9wcGVyKHJlZmVyZW5jZU9iamVjdCwgcG9wcGVyTm9kZSk7XG4gKiBgYGBcbiAqXG4gKiBOQjogVGhpcyBmZWF0dXJlIGlzbid0IHN1cHBvcnRlZCBpbiBJbnRlcm5ldCBFeHBsb3JlciAxMC5cbiAqIEBuYW1lIHJlZmVyZW5jZU9iamVjdFxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZGF0YS5nZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc2V0IG9mIGNvb3JkaW5hdGVzIGNvbXBhdGlibGUgd2l0aCB0aGUgbmF0aXZlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIG1ldGhvZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkYXRhLmNsaWVudFdpZHRoXG4gKiBBbiBFUzYgZ2V0dGVyIHRoYXQgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSB2aXJ0dWFsIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRhdGEuY2xpZW50SGVpZ2h0XG4gKiBBbiBFUzYgZ2V0dGVyIHRoYXQgd2lsbCByZXR1cm4gdGhlIGhlaWdodCBvZiB0aGUgdmlydHVhbCByZWZlcmVuY2UgZWxlbWVudC5cbiAqL1xuXG5cblBvcHBlci5VdGlscyA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbCkuUG9wcGVyVXRpbHM7XG5Qb3BwZXIucGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG5Qb3BwZXIuRGVmYXVsdHMgPSBEZWZhdWx0cztcblxucmV0dXJuIFBvcHBlcjtcblxufSkpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBvcHBlci5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCB1dGlsLmpzIHY0LjYuMCAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDIxIFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLlV0aWwgPSBmYWN0b3J5KGdsb2JhbC5qUXVlcnkpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgkKSB7ICd1c2Ugc3RyaWN0JztcblxuICBmdW5jdGlvbiBfaW50ZXJvcERlZmF1bHRMZWdhY3kgKGUpIHsgcmV0dXJuIGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICdkZWZhdWx0JyBpbiBlID8gZSA6IHsgJ2RlZmF1bHQnOiBlIH07IH1cblxuICB2YXIgJF9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koJCk7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCAodjQuNi4wKTogdXRpbC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogUHJpdmF0ZSBUcmFuc2l0aW9uRW5kIEhlbHBlcnNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBUUkFOU0lUSU9OX0VORCA9ICd0cmFuc2l0aW9uZW5kJztcbiAgdmFyIE1BWF9VSUQgPSAxMDAwMDAwO1xuICB2YXIgTUlMTElTRUNPTkRTX01VTFRJUExJRVIgPSAxMDAwOyAvLyBTaG91dG91dCBBbmd1c0Nyb2xsIChodHRwczovL2dvby5nbC9weHdRR3ApXG5cbiAgZnVuY3Rpb24gdG9UeXBlKG9iaikge1xuICAgIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBcIlwiICsgb2JqO1xuICAgIH1cblxuICAgIHJldHVybiB7fS50b1N0cmluZy5jYWxsKG9iaikubWF0Y2goL1xccyhbYS16XSspL2kpWzFdLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTcGVjaWFsVHJhbnNpdGlvbkVuZEV2ZW50KCkge1xuICAgIHJldHVybi
2B7XG4gICAgICBiaW5kVHlwZTogVFJBTlNJVElPTl9FTkQsXG4gICAgICBkZWxlZ2F0ZVR5cGU6IFRSQU5TSVRJT05fRU5ELFxuICAgICAgaGFuZGxlOiBmdW5jdGlvbiBoYW5kbGUoZXZlbnQpIHtcbiAgICAgICAgaWYgKCRfX2RlZmF1bHRbJ2RlZmF1bHQnXShldmVudC50YXJnZXQpLmlzKHRoaXMpKSB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kRW11bGF0b3IoZHVyYXRpb24pIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzKS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIFV0aWwudHJpZ2dlclRyYW5zaXRpb25FbmQoX3RoaXMpO1xuICAgICAgfVxuICAgIH0sIGR1cmF0aW9uKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFRyYW5zaXRpb25FbmRTdXBwb3J0KCkge1xuICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXS5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZCA9IHRyYW5zaXRpb25FbmRFbXVsYXRvcjtcbiAgICAkX19kZWZhdWx0WydkZWZhdWx0J10uZXZlbnQuc3BlY2lhbFtVdGlsLlRSQU5TSVRJT05fRU5EXSA9IGdldFNwZWNpYWxUcmFuc2l0aW9uRW5kRXZlbnQoKTtcbiAgfVxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogUHVibGljIFV0aWwgQXBpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgdmFyIFV0aWwgPSB7XG4gICAgVFJBTlNJVElPTl9FTkQ6ICdic1RyYW5zaXRpb25FbmQnLFxuICAgIGdldFVJRDogZnVuY3Rpb24gZ2V0VUlEKHByZWZpeCkge1xuICAgICAgZG8ge1xuICAgICAgICBwcmVmaXggKz0gfn4oTWF0aC5yYW5kb20oKSAqIE1BWF9VSUQpOyAvLyBcIn5+XCIgYWN0cyBsaWtlIGEgZmFzdGVyIE1hdGguZmxvb3IoKSBoZXJlXG4gICAgICB9IHdoaWxlIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmVmaXgpKTtcblxuICAgICAgcmV0dXJuIHByZWZpeDtcbiAgICB9LFxuICAgIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQ6IGZ1bmN0aW9uIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0Jyk7XG5cbiAgICAgIGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09ICcjJykge1xuICAgICAgICB2Y
2XIgaHJlZkF0dHIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgICBzZWxlY3RvciA9IGhyZWZBdHRyICYmIGhyZWZBdHRyICE9PSAnIycgPyBocmVmQXR0ci50cmltKCkgOiAnJztcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpID8gc2VsZWN0b3IgOiBudWxsO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50OiBmdW5jdGlvbiBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChlbGVtZW50KSB7XG4gICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IC8vIEdldCB0cmFuc2l0aW9uLWR1cmF0aW9uIG9mIHRoZSBlbGVtZW50XG5cblxuICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShlbGVtZW50KS5jc3MoJ3RyYW5zaXRpb24tZHVyYXRpb24nKTtcbiAgICAgIHZhciB0cmFuc2l0aW9uRGVsYXkgPSAkX19kZWZhdWx0WydkZWZhdWx0J10oZWxlbWVudCkuY3NzKCd0cmFuc2l0aW9uLWRlbGF5Jyk7XG4gICAgICB2YXIgZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gPSBwYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB2YXIgZmxvYXRUcmFuc2l0aW9uRGVsYXkgPSBwYXJzZUZsb2F0KHRyYW5zaXRpb25EZWxheSk7IC8vIFJldHVybiAwIGlmIGVsZW1lbnQgb3IgdHJhbnNpdGlvbiBkdXJhdGlvbiBpcyBub3QgZm91bmRcblxuICAgICAgaWYgKCFmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiAmJiAhZmxvYXRUcmFuc2l0aW9uRGVsYXkpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IC8vIElmIG11bHRpcGxlIGR1cmF0aW9ucyBhcmUgZGVmaW5lZCwgdGFrZSB0aGUgZmlyc3RcblxuXG4gICAgICB0cmFuc2l0aW9uRHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb24uc3BsaXQoJywnKVswXTtcbiAgICAgIHRyYW5zaXRpb25EZWxheSA9IHRyYW5zaXRpb25EZWxheS5zcGxpdCgnLCcpWzBdO1xuICAgICAgcmV0dXJuIChwYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbikgKyBwYXJzZUZsb2F0KHRyYW5zaXRpb25EZWxheSkpICogTUlMTElTRUNPTkRTX01VTFRJUExJRVI7XG4gICAgfSxcbiAgICByZWZsb3c6IGZ1bmN0aW9uIHJlZmxvdyhlbGVtZW50KSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgfSxcbiAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gdHJpZ2dlclRyYW5zaXRpb25FbmQoZWxlbWVudCkge1xuICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKGVsZW1lbnQpLnRyaWdnZXIoVFJBTlNJVElPTl9FTkQpO1xuICAgIH0sXG4gICAgc3VwcG9ydHNUcmFuc2l0aW9uRW5kOiBmdW5jdGlvbiBzdXBwb3J0c1RyYW5zaXRpb25FbmQoKSB7XG4gICAgICByZXR1cm4gQm9vbGVhbihUUkFOU0lUSU9OX0VORCk7XG4gICAgfSxcbiAgICBpc0VsZW1lbnQ6IGZ1bmN0aW9uIGlzRWxlbWVudChvYmopIHtcbiAgICAgIHJldHVybiAob2JqWzBdIHx8IG9iaikubm9kZVR5cGU7XG4gICAgfSxcbiAgICB0eXBlQ2hlY2tDb25maWc6IGZ1bmN0aW9uIHR5cGVDaGVja0NvbmZpZyhjb21wb25lbnROYW1lLCBjb25maWcsIGNvbmZpZ1R5cGVzKSB7XG4gICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBjb25maWdUeXBlcykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZ1R5cGVzLCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgICB2Y
2XIgZXhwZWN0ZWRUeXBlcyA9IGNvbmZpZ1R5cGVzW3Byb3BlcnR5XTtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBjb25maWdbcHJvcGVydHldO1xuICAgICAgICAgIHZhciB2YWx1ZVR5cGUgPSB2YWx1ZSAmJiBVdGlsLmlzRWxlbWVudCh2YWx1ZSkgPyAnZWxlbWVudCcgOiB0b1R5cGUodmFsdWUpO1xuXG4gICAgICAgICAgaWYgKCFuZXcgUmVnRXhwKGV4cGVjdGVkVHlwZXMpLnRlc3QodmFsdWVUeXBlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNvbXBvbmVudE5hbWUudG9VcHBlckNhc2UoKSArIFwiOiBcIiArIChcIk9wdGlvbiBcXFwiXCIgKyBwcm9wZXJ0eSArIFwiXFxcIiBwcm92aWRlZCB0eXBlIFxcXCJcIiArIHZhbHVlVHlwZSArIFwiXFxcIiBcIikgKyAoXCJidXQgZXhwZWN0ZWQgdHlwZSBcXFwiXCIgKyBleHBlY3RlZFR5cGVzICsgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBmaW5kU2hhZG93Um9vdDogZnVuY3Rpb24gZmluZFNoYWRvd1Jvb3QoZWxlbWVudCkge1xuICAgICAgaWYgKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXR0YWNoU2hhZG93KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSAvLyBDYW4gZmluZCB0aGUgc2hhZG93IHJvb3Qgb3RoZXJ3aXNlIGl0J2xsIHJldHVybiB0aGUgZG9jdW1lbnRcblxuXG4gICAgICBpZiAodHlwZW9mIGVsZW1lbnQuZ2V0Um9vdE5vZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIHJvb3QgPSBlbGVtZW50LmdldFJvb3ROb2RlKCk7XG4gICAgICAgIHJldHVybiByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICB9IC8vIHdoZW4gd2UgZG9uJ3QgZmluZCBhIHNoYWRvdyByb290XG5cblxuICAgICAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBVdGlsLmZpbmRTaGFkb3dSb290KGVsZW1lbnQucGFyZW50Tm9kZSk7XG4gICAgfSxcbiAgICBqUXVlcnlEZXRlY3Rpb246IGZ1bmN0aW9uIGpRdWVyeURldGVjdGlvbigpIHtcbiAgICAgIGlmICh0eXBlb2YgJF9fZGVmYXVsdFsnZGVmYXVsdCddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5LiBqUXVlcnkgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgQm9vdHN0cmFwXFwncyBKYXZhU2NyaXB0LicpO1xuICAgICAgfVxuXG4gICAgICB2Y
2XIgdmVyc2lvbiA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXS5mbi5qcXVlcnkuc3BsaXQoJyAnKVswXS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG1pbk1ham9yID0gMTtcbiAgICAgIHZhciBsdE1ham9yID0gMjtcbiAgICAgIHZhciBtaW5NaW5vciA9IDk7XG4gICAgICB2YXIgbWluUGF0Y2ggPSAxO1xuICAgICAgdmFyIG1heE1ham9yID0gNDtcblxuICAgICAgaWYgKHZlcnNpb25bMF0gPCBsdE1ham9yICYmIHZlcnNpb25bMV0gPCBtaW5NaW5vciB8fCB2ZXJzaW9uWzBdID09PSBtaW5NYWpvciAmJiB2ZXJzaW9uWzFdID09PSBtaW5NaW5vciAmJiB2ZXJzaW9uWzJdIDwgbWluUGF0Y2ggfHwgdmVyc2lvblswXSA+PSBtYXhNYWpvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBhdCBsZWFzdCBqUXVlcnkgdjEuOS4xIGJ1dCBsZXNzIHRoYW4gdjQuMC4wJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBVdGlsLmpRdWVyeURldGVjdGlvbigpO1xuICBzZXRUcmFuc2l0aW9uRW5kU3VwcG9ydCgpO1xuXG4gIHJldHVybiBVdGlsO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbC5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBkcm9wZG93bi5qcyB2NC42LjAgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyMSBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ2pxdWVyeScpLCByZXF1aXJlKCdwb3BwZXIuanMnKSwgcmVxdWlyZSgnLi91dGlsLmpzJykpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnanF1ZXJ5JywgJ3BvcHBlci5qcycsICcuL3V0aWwnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuRHJvcGRvd24gPSBmYWN0b3J5KGdsb2JhbC5qUXVlcnksIGdsb2JhbC5Qb3BwZXIsIGdsb2JhbC5VdGlsKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoJCwgUG9wcGVyLCBVdGlsKSB7ICd1c2Ugc3RyaWN0JztcblxuICBmdW5jdGlvbiBfaW50ZXJvcERlZmF1bHRMZWdhY3kgKGUpIHsgcmV0dXJuIGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICdkZWZhdWx0JyBpbiBlID8gZSA6IHsgJ2RlZmF1bHQnOiBlIH07IH1cblxuICB2YXIgJF9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koJCk7XG4gIHZhciBQb3BwZXJfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KFBvcHBlcik7XG4gIHZhciBVdGlsX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShVdGlsKTtcblxuICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci
253cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH1cblxuICBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FID0gJ2Ryb3Bkb3duJztcbiAgdmFyIFZFUlNJT04gPSAnNC42LjAnO1xuICB2YXIgREFUQV9LRVkgPSAnYnMuZHJvcGRvd24nO1xuICB2YXIgRVZFTlRfS0VZID0gXCIuXCIgKyBEQVRBX0tFWTtcbiAgdmFyIERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJF9fZGVmYXVsdFsnZGVmYXVsdCddLmZuW05BTUVdO1xuICB2YXIgRVNDQVBFX0tFWUNPREUgPSAyNzsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgRXNjYXBlIChFc2MpIGtleVxuXG4gIHZhciBTUEFDRV9LRVlDT0RFID0gMzI7IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIHNwYWNlIGtleVxuXG4gIHZhciBUQUJfS0VZQ09ERSA9IDk7IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIHRhYiBrZXlcblxuICB2YXIgQVJST1dfVVBfS0VZQ09ERSA9IDM4OyAvLyBLZXlib2FyZEV2ZW50LndoaWNoIHZhbHVlIGZvciB1cCBhcnJvdyBrZXlcblxuICB2YXIgQVJST1dfRE9XTl9LRVlDT0RFID0gNDA7IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIGRvd24gYXJyb3cga2V5XG5cbiAgdmFyIFJJR0hUX01PVVNFX0JVVFRPTl9XSElDSCA9IDM7IC8vIE1vdXNlRXZlbnQud2hpY2ggdmFsdWUgZm9yIHRoZSByaWdodCBidXR0b24gKGFzc3VtaW5nIGEgcmlnaHQtaGFuZGVkIG1vdXNlKVxuXG4gIHZhciBSRUdFWFBfS0VZRE9XTiA9IG5ldyBSZWdFeHAoQVJST1dfVVBfS0VZQ09ERSArIFwifFwiICsgQVJST1dfRE9XTl9LRVlDT0RFICsgXCJ8XCIgKyBFU0NBUEVfS0VZQ09ERSk7XG4gIHZhciBFVkVOVF9ISURFID0gXCJoaWRlXCIgKyBFVkVOVF9LRVk7XG4gIHZhciBFVkVOVF9ISURERU4gPSBcImhpZGRlblwiICsgRVZFTlRfS0VZO1xuICB2YXIgRVZFTlRfU0hPVyA9IFwic2hvd1wiICsgRVZFTlRfS0VZO1xuICB2YXIgRVZFTlRfU0hPV04gPSBcInNob3duXCIgKyBFVkVOVF9LRVk7XG4gIHZhciBFVkVOVF9DTElDSyA9IFwiY2xpY2tcIiArIEVWRU5UX0tFWTtcbiAgdmFyIEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gXCJjbGlja1wiICsgRVZFTlRfS0VZICsgREFUQV9BUElfS0VZO1xuICB2YXIgRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSA9IFwia2V5ZG93blwiICsgRVZFTlRfS0VZICsgREFUQV9BUElfS0VZO1xuICB2YXIgRVZFTlRfS0VZVVBfREFUQV9BUEkgPSBcImtleXVwXCIgKyBFVkVOVF9LRVkgKyBEQVRBX0FQSV9LRVk7XG4gIHZhciBDTEFTU19OQU1FX0RJU0FCTEVEID0gJ2Rpc2FibGVkJztcbiAgdmFyIENMQVNTX05BTUVfU0hPVyA9ICdzaG93JztcbiAgdmFyIENMQVNTX05BTUVfRFJPUFVQID0gJ2Ryb3B1cCc7XG4gIHZhciBDTEFTU19OQU1FX0RST1BSSUdIVCA9ICdkcm9wcmlnaHQnO1xuICB2YXIgQ0xBU1NfTkFNRV9EUk9QTEVGVCA9ICdkcm9wbGVmdCc7XG4gIHZhciBDTEFTU19OQU1FX01FTlVSSUdIVCA9ICdkcm9wZG93bi1tZW51LXJpZ2h0JztcbiAgdmFyIENMQVNTX05BTUVfUE9TSVRJT05fU1RBVElDID0gJ3Bvc2l0aW9uLXN0YXRpYyc7XG4gIHZhciBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXSc7XG4gIHZhciBTRUxFQ1RPUl9GT1JNX0NISUxEID0gJy5kcm9wZG93biBmb3JtJztcbiAgdmFyIFNFTEVDVE9SX01FTlUgPSAnLmRyb3Bkb3duLW1lbnUnO1xuICB2YXIgU0VMRUNUT1JfTkFWQkFSX05BViA9ICcubmF2YmFyLW5hdic7XG4gIHZhciBTRUxFQ1RPUl9WSVNJQkxFX0lURU1TID0gJy5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpJztcbiAgdmFyIFBMQUNFTUVOVF9UT1AgPSAndG9wLXN0YXJ0JztcbiAgdmFyIFBMQUNFTUVOVF9UT1BFTkQgPSAndG9wLWVuZCc7XG4gIHZhciBQTEFDRU1FTlRfQk9UVE9NID0gJ2JvdHRvbS1zdGFydCc7XG4gIHZhciBQTEFDRU1FTlRfQk9UVE9NRU5EID0gJ2JvdHRvbS1lbmQnO1xuICB2YXIgUExBQ0VNRU5UX1JJR0hUID0gJ3JpZ2h0LXN0YXJ0JztcbiAgdmFyIFBMQUNFTUVOVF9MRUZUID0gJ2xlZnQtc3RhcnQnO1xuICB2YXIgRGVmYXVsdCA9IHtcbiAgICBvZmZzZXQ6IDAsXG4gICAgZmxpcDogdHJ1ZSxcbiAgICBib3VuZGFyeTogJ3Njcm9sbFBhcmVudCcsXG4gICAgcmVmZXJlbmNlOiAndG9nZ2xlJyxcbiAgICBkaXNwbGF5OiAnZHluYW1pYycsXG4gICAgcG9wcGVyQ29uZmlnOiBudWxsXG4gIH07XG4gIHZhciBEZWZhdWx0VHlwZSA9IHtcbiAgICBvZmZzZXQ6ICcobnVtYmVyfHN0cmluZ3xmdW5jdGlvbiknLFxuICAgIGZsaXA6ICdib29sZWFuJyxcbiAgICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICAgIHJlZmVyZW5jZTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICAgIGRpc3BsYXk6ICdzdHJpbmcnLFxuICAgIHBvcHBlckNvbmZpZzogJyhudWxsfG9iamVjdCknXG4gIH07XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIERyb3Bkb3duID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEcm9wZG93bihlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fcG9wcGVyID0gbnVsbDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgdGhpcy5fbWVudSA9IHRoaXMuX2dldE1lbnVFbGVtZW50KCk7XG4gICAgICB0aGlzLl9pbk5hdmJhciA9IHRoaXMuX2RldGVjdE
25hdmJhcigpO1xuXG4gICAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICB2YXIgX3Byb3RvID0gRHJvcGRvd24ucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZSgpIHtcbiAgICAgIGlmICh0aGlzLl9lbGVtZW50LmRpc2FibGVkIHx8ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDTEFTU19OQU1FX0RJU0FCTEVEKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBpc0FjdGl2ZSA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9tZW51KS5oYXNDbGFzcyhDTEFTU19OQU1FX1NIT1cpO1xuXG4gICAgICBEcm9wZG93bi5fY2xlYXJNZW51cygpO1xuXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNob3codHJ1ZSk7XG4gICAgfTtcblxuICAgIF9wcm90by5zaG93ID0gZnVuY3Rpb24gc2hvdyh1c2VQb3BwZXIpIHtcbiAgICAgIGlmICh1c2VQb3BwZXIgPT09IHZvaWQgMCkge1xuICAgICAgICB1c2VQb3BwZXIgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2VsZW1lbnQuZGlzYWJsZWQgfHwgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENMQVNTX05BTUVfRElTQUJMRUQpIHx8ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9tZW51KS5oYXNDbGFzcyhDTEFTU19OQU1FX1NIT1cpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgIH07XG4gICAgICB2Y
2XIgc2hvd0V2ZW50ID0gJF9fZGVmYXVsdFsnZGVmYXVsdCddLkV2ZW50KEVWRU5UX1NIT1csIHJlbGF0ZWRUYXJnZXQpO1xuXG4gICAgICB2YXIgcGFyZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO1xuXG4gICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10ocGFyZW50KS50cmlnZ2VyKHNob3dFdmVudCk7XG5cbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBUb3RhbGx5IGRpc2FibGUgUG9wcGVyIGZvciBEcm9wZG93bnMgaW4gTmF2YmFyXG5cblxuICAgICAgaWYgKCF0aGlzLl9pbk5hdmJhciAmJiB1c2VQb3BwZXIpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIGZvciBQb3BwZXIgZGVwZW5kZW5jeVxuICAgICAgICAgKiBQb3BwZXIgLSBodHRwczovL3BvcHBlci5qcy5vcmdcbiAgICAgICAgICovXG4gICAgICAgIGlmICh0eXBlb2YgUG9wcGVyX19kZWZhdWx0WydkZWZhdWx0J10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwXFwncyBkcm9wZG93bnMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZyknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcblxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ3BhcmVudCcpIHtcbiAgICAgICAgICByZWZlcmVuY2VFbGVtZW50ID0gcGFyZW50O1xuICAgICAgICB9IGVsc2UgaWYgKFV0aWxfX2RlZmF1bHRbJ2RlZmF1bHQnXS5pc0VsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSkpIHtcbiAgICAgICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fY29uZmlnLnJlZmVyZW5jZTsgLy8gQ2hlY2sgaWYgaXQncyBqUXVlcnkgZWxlbWVudFxuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9jb25maWcucmVmZXJlbmNlLmpxdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9jb25maWcucmVmZXJlbmNlWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBJZiBib3VuZGFyeSBpcyBub3QgYHNjcm9sbFBhcmVudGAsIHRoZW4gc2V0IHBvc2l0aW9uIHRvIGBzdGF0aWNgXG4gICAgICAgIC8vIHRvIGFsbG93IHRoZSBtZW51IHRvIFwiZXNjYXBlXCIgdGhlIHNjcm9sbCBwYXJlbnQncyBib3VuZGFyaWVzXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMjQyNTFcblxuXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuYm91bmRhcnkgIT09ICdzY3JvbGxQYXJlbnQnKSB7XG4gICAgICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHBhcmVudCkuYWRkQ2xhc3MoQ0xBU1NfTkFNRV9QT1NJVElPTl9TVEFUSUMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcG9wcGVyID0gbmV3IFBvcHBlcl9fZGVmYXVsdFsnZGVmYXVsdCddKHJlZmVyZW5jZUVsZW1lbnQsIHRoaXMuX21lbnUsIHRoaXMuX2dldFBvcHBlckNvbmZpZygpKTtcbiAgICAgIH0gLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBjaGlsZHJlbjtcbiAgICAgIC8vIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb2YgYnJva2VuIGV2ZW50IGRlbGVnYXRpb24gb24gaU9TXG4gICAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcblxuXG4gICAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShwYXJlbnQpLmNsb3Nlc3QoU0VMRUNUT1JfTkFWQkFSX05BVikubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9uKCdtb3VzZW92ZXInLCBudWxsLCAkX19kZWZhdWx0WydkZWZhdWx0J10ubm9vcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcblxuICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMuX21lbnUpLnRvZ2dsZUNsYXNzKENMQVNTX05BTUVfU0hPVyk7XG4gICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10ocGFyZW50KS50b2dnbGVDbGFzcyhDTEFTU19OQU1FX1NIT1cpLnRyaWdnZXIoJF9fZGVmYXVsdFsnZGVmYXVsdCddLkV2ZW50KEVWRU5UX1NIT1dOLCByZWxhdGVkVGFyZ2V0KSk7XG4gICAgfTtcblxuICAgIF9wcm90by5oaWRlID0gZnVuY3Rpb24gaGlkZSgpIHtcbiAgICAgIGlmICh0aGlzLl9lbGVtZW50LmRpc2FibGVkIHx8ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDTEFTU19OQU1FX0RJU0FCTEVEKSB8fCAhJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMuX21lbnUpLmhhc0NsYXNzKENMQVNTX05BTUVfU0hPVykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2Y
2XIgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgICAgfTtcbiAgICAgIHZhciBoaWRlRXZlbnQgPSAkX19kZWZhdWx0WydkZWZhdWx0J10uRXZlbnQoRVZFTlRfSElERSwgcmVsYXRlZFRhcmdldCk7XG5cbiAgICAgIHZhciBwYXJlbnQgPSBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG5cbiAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShwYXJlbnQpLnRyaWdnZXIoaGlkZUV2ZW50KTtcblxuICAgICAgaWYgKGhpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICAgIH1cblxuICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMuX21lbnUpLnRvZ2dsZUNsYXNzKENMQVNTX05BTUVfU0hPVyk7XG4gICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10ocGFyZW50KS50b2dnbGVDbGFzcyhDTEFTU19OQU1FX1NIT1cpLnRyaWdnZXIoJF9fZGVmYXVsdFsnZGVmYXVsdCddLkV2ZW50KEVWRU5UX0hJRERFTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10ucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCBEQVRBX0tFWSk7XG4gICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10odGhpcy5fZWxlbWVudCkub2ZmKEVWRU5UX0tFWSk7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX21lbnUgPSBudWxsO1xuXG4gICAgICBpZiAodGhpcy5fcG9wcGVyICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XG5cbiAgICAgICAgdGhpcy5fcG9wcGVyID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuX2luTmF2YmFyID0gdGhpcy5fZGV0ZWN0TmF2YmFyKCk7XG5cbiAgICAgIGlmICh0aGlzLl9wb3BwZXIgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcG9wcGVyLnNjaGVkdWxlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9hZGRFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS5vbihFVkVOVF9DTElDSywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIF90aGlzLnRvZ2dsZSgpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIGNvbmZpZyA9IF9leHRlbmRzKHt9LCB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQsICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS5kYXRhKCksIGNvbmZpZyk7XG4gICAgICBVdGlsX19kZWZhdWx0WydkZWZhdWx0J10udHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSk7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldE1lbnVFbGVtZW50ID0gZnVuY3Rpb24gX2dldE1lbnVFbGVtZW50KCkge1xuICAgICAgaWYgKCF0aGlzLl9tZW51KSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7XG5cbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgIHRoaXMuX21lbnUgPSBwYXJlbnQucXVlcnlTZWxlY3RvcihTRUxFQ1RPUl9NRU5VKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fbWVudTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRQbGFjZW1lbnQgPSBmdW5jdGlvbiBfZ2V0UGxhY2VtZW50KCkge1xuICAgICAgdmFyICRwYXJlbnREcm9wZG93biA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUpO1xuICAgICAgdmFyIHBsYWNlbWVudCA9IFBMQUNFTUVOVF9CT1RUT007IC8vIEhhbmRsZSBkcm9wdXBcblxuICAgICAgaWYgKCRwYXJlbnREcm9wZG93bi5oYXNDbGFzcyhDTEFTU19OQU1FX0RST1BVUCkpIHtcbiAgICAgICAgcGxhY2VtZW50ID0gJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMuX21lbnUpLmhhc0NsYXNzKENMQVNTX05BTUVfTUVOVVJJR0hUKSA/IFBMQUNFTUVOVF9UT1BFTkQgOiBQTEFDRU1FTlRfVE9QO1xuICAgICAgfSBlbHNlIGlmICgkcGFyZW50RHJvcGRvd24uaGFzQ2xhc3MoQ0xBU1NfTkFNRV9EUk9QUklHSFQpKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IFBMQUNFTUVOVF9SSUdIVDtcbiAgICAgIH0gZWxzZSBpZiAoJHBhcmVudERyb3Bkb3duLmhhc0NsYXNzKENMQVNTX05BTUVfRFJPUExFRlQpKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IFBMQUNFTUVOVF9MRUZUO1xuICAgICAgfSBlbHNlIGlmICgkX19kZWZhdWx0WydkZWZhdWx0J10odGhpcy5fbWVudSkuaGFzQ2xhc3MoQ0xBU1NfTkFNRV9NRU5VUklHSFQpKSB7XG4gICAgICAgIHBsYWNlbWVudCA9IFBMQUNFTUVOVF9CT1RUT01FTkQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwbGFjZW1lbnQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fZGV0ZWN0TmF2YmFyID0gZnVuY3Rpb24gX2RldGVjdE5hdmJhcigpIHtcbiAgICAgIHJldHVybiAkX19kZWZhdWx0WydkZWZhdWx0J10odGhpcy5fZWxlbWVudCkuY2xvc2VzdCgnLm5hdmJhcicpLmxlbmd0aCA+IDA7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0T2Zmc2V0ID0gZnVuY3Rpb24gX2dldE9mZnNldCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2Y
2XIgb2Zmc2V0ID0ge307XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fY29uZmlnLm9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvZmZzZXQuZm4gPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGRhdGEub2Zmc2V0cyA9IF9leHRlbmRzKHt9LCBkYXRhLm9mZnNldHMsIF90aGlzMi5fY29uZmlnLm9mZnNldChkYXRhLm9mZnNldHMsIF90aGlzMi5fZWxlbWVudCkgfHwge30pO1xuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2Zmc2V0Lm9mZnNldCA9IHRoaXMuX2NvbmZpZy5vZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0UG9wcGVyQ29uZmlnID0gZnVuY3Rpb24gX2dldFBvcHBlckNvbmZpZygpIHtcbiAgICAgIHZhciBwb3BwZXJDb25maWcgPSB7XG4gICAgICAgIHBsYWNlbWVudDogdGhpcy5fZ2V0UGxhY2VtZW50KCksXG4gICAgICAgIG1vZGlmaWVyczoge1xuICAgICAgICAgIG9mZnNldDogdGhpcy5fZ2V0T2Zmc2V0KCksXG4gICAgICAgICAgZmxpcDoge1xuICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5fY29uZmlnLmZsaXBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByZXZlbnRPdmVyZmxvdzoge1xuICAgICAgICAgICAgYm91bmRhcmllc0VsZW1lbnQ6IHRoaXMuX2NvbmZpZy5ib3VuZGFyeVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTsgLy8gRGlzYWJsZSBQb3BwZXIgaWYgd2UgaGF2ZSBhIHN0YXRpYyBkaXNwbGF5XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuZGlzcGxheSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgcG9wcGVyQ29uZmlnLm1vZGlmaWVycy5hcHBseVN0eWxlID0ge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgcG9wcGVyQ29uZmlnLCB0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnKTtcbiAgICB9IC8vIFN0YXRpY1xuICAgIDtcblxuICAgIERyb3Bkb3duLl9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYXRhID0gJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMpLmRhdGEoREFUQV9LRVkpO1xuXG4gICAgICAgIHZhciBfY29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsO1xuXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgRHJvcGRvd24odGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMpLmRhdGEoREFUQV9LRVksIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gbWV0aG9kIG5hbWVkIFxcXCJcIiArIGNvbmZpZyArIFwiXFxcIlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIERyb3Bkb3duLl9jbGVhck1lbnVzID0gZnVuY3Rpb24gX2NsZWFyTWVudXMoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudCAmJiAoZXZlbnQud2hpY2ggPT09IFJJR0hUX01PVVNFX0JVVFRPTl9XSElDSCB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LndoaWNoICE9PSBUQUJfS0VZQ09ERSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2Y
2XIgdG9nZ2xlcyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChTRUxFQ1RPUl9EQVRBX1RPR0dMRSkpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG9nZ2xlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgcGFyZW50ID0gRHJvcGRvd24uX2dldFBhcmVudEZyb21FbGVtZW50KHRvZ2dsZXNbaV0pO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRvZ2dsZXNbaV0pLmRhdGEoREFUQV9LRVkpO1xuICAgICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0OiB0b2dnbGVzW2ldXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0LmNsaWNrRXZlbnQgPSBldmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRyb3Bkb3duTWVudSA9IGNvbnRleHQuX21lbnU7XG5cbiAgICAgICAgaWYgKCEkX19kZWZhdWx0WydkZWZhdWx0J10ocGFyZW50KS5oYXNDbGFzcyhDTEFTU19OQU1FX1NIT1cpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQgJiYgKGV2ZW50LnR5cGUgPT09ICdjbGljaycgJiYgL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC53aGljaCA9PT0gVEFCX0tFWUNPREUpICYmICRfX2RlZmF1bHRbJ2RlZmF1bHQnXS5jb250YWlucyhwYXJlbnQsIGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoaWRlRXZlbnQgPSAkX19kZWZhdWx0WydkZWZhdWx0J10uRXZlbnQoRVZFTlRfSElERSwgcmVsYXRlZFRhcmdldCk7XG4gICAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShwYXJlbnQpLnRyaWdnZXIoaGlkZUV2ZW50KTtcblxuICAgICAgICBpZiAoaGlkZUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIHJlbW92ZSB0aGUgZXh0cmFcbiAgICAgICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcblxuXG4gICAgICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10oZG9jdW1lbnQuYm9keSkuY2hpbGRyZW4oKS5vZmYoJ21vdXNlb3ZlcicsIG51bGwsICRfX2RlZmF1bHRbJ2RlZmF1bHQnXS5ub29wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvZ2dsZXNbaV0uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG5cbiAgICAgICAgaWYgKGNvbnRleHQuX3BvcHBlcikge1xuICAgICAgICAgIGNvbnRleHQuX3BvcHBlci5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10oZHJvcGRvd25NZW51KS5yZW1vdmVDbGFzcyhDTEFTU19OQU1FX1NIT1cpO1xuICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10ocGFyZW50KS5yZW1vdmVDbGFzcyhDTEFTU19OQU1FX1NIT1cpLnRyaWdnZXIoJF9fZGVmYXVsdFsnZGVmYXVsdCddLkV2ZW50KEVWRU5UX0hJRERFTiwgcmVsYXRlZFRhcmdldCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0UGFyZW50RnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgdmFyIHBhcmVudDtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWxfX2RlZmF1bHRbJ2RlZmF1bHQnXS5nZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgcGFyZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJlbnQgfHwgZWxlbWVudC5wYXJlbnROb2RlO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgICA7XG5cbiAgICBEcm9wZG93bi5fZGF0YUFwaUtleWRvd25IYW5kbGVyID0gZnVuY3Rpb24gX2RhdGFBcGlLZXlkb3duSGFuZGxlcihldmVudCkge1xuICAgICAgLy8gSWYgbm90IGlucHV0L3RleHRhcmVhOlxuICAgICAgLy8gIC0gQW5kIG5vdCBhIGtleSBpbiBSRUdFWFBfS0VZRE9XTiA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgICAvLyBJZiBpbnB1dC90ZXh0YXJlYTpcbiAgICAgIC8vICAtIElmIHNwYWNlIGtleSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgICAvLyAgLSBJZiBrZXkgaXMgb3RoZXIgdGhhbiBlc2NhcGVcbiAgICAgIC8vICAgIC0gSWYga2V5IGlzIG5vdCB1cCBvciBkb3duID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcbiAgICAgIC8vICAgIC0gSWYgdHJpZ2dlciBpbnNpZGUgdGhlIG1lbnUgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgICAgaWYgKC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpID8gZXZlbnQud2hpY2ggPT09IFNQQUNFX0tFWUNPREUgfHwgZXZlbnQud2hpY2ggIT09IEVTQ0FQRV9LRVlDT0RFICYmIChldmVudC53aGljaCAhPT0gQVJST1dfRE9XTl9LRVlDT0RFICYmIGV2ZW50LndoaWNoICE9PSBBUlJPV19VUF9LRVlDT0RFIHx8ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShldmVudC50YXJnZXQpLmNsb3Nlc3QoU0VMRUNUT1JfTUVOVSkubGVuZ3RoKSA6ICFSRUdFWFBfS0VZRE9XTi50ZXN0KGV2ZW50LndoaWNoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzKS5oYXNDbGFzcyhDTEFTU19OQU1FX0RJU0FCTEVEKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXJlbnQgPSBEcm9wZG93bi5fZ2V0UGFyZW50RnJvbUVsZW1lbnQodGhpcyk7XG5cbiAgICAgIHZhciBpc0FjdGl2ZSA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShwYXJlbnQpLmhhc0NsYXNzKENMQVNTX05BTUVfU0hPVyk7XG5cbiAgICAgIGlmICghaXNBY3RpdmUgJiYgZXZlbnQud2hpY2ggPT09IEVTQ0FQRV9LRVlDT0RFKSB7XG4gICAgICAgI
2HJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICBpZiAoIWlzQWN0aXZlIHx8IGV2ZW50LndoaWNoID09PSBFU0NBUEVfS0VZQ09ERSB8fCBldmVudC53aGljaCA9PT0gU1BBQ0VfS0VZQ09ERSkge1xuICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT09IEVTQ0FQRV9LRVlDT0RFKSB7XG4gICAgICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHBhcmVudC5xdWVyeVNlbGVjdG9yKFNFTEVDVE9SX0RBVEFfVE9HR0xFKSkudHJpZ2dlcignZm9jdXMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzKS50cmlnZ2VyKCdjbGljaycpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVtcyA9IFtdLnNsaWNlLmNhbGwocGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU0VMRUNUT1JfVklTSUJMRV9JVEVNUykpLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gJF9fZGVmYXVsdFsnZGVmYXVsdCddKGl0ZW0pLmlzKCc6dmlzaWJsZScpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5kZXggPSBpdGVtcy5pbmRleE9mKGV2ZW50LnRhcmdldCk7XG5cbiAgICAgIGlmIChldmVudC53aGljaCA9PT0gQVJST1dfVVBfS0VZQ09ERSAmJiBpbmRleCA+IDApIHtcbiAgICAgICAgLy8gVXBcbiAgICAgICAgaW5kZXgtLTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LndoaWNoID09PSBBUlJPV19ET1dOX0tFWUNPREUgJiYgaW5kZXggPCBpdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIC8vIERvd25cbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICBpbmRleCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGl0ZW1zW2luZGV4XS5mb2N1cygpO1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoRHJvcGRvd24sIG51bGwsIFt7XG4gICAgICBrZXk6IFwiVkVSU0lPTlwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBWRVJTSU9OO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleTogXCJEZWZhdWx0XCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHQ7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiBcIkRlZmF1bHRUeXBlXCIsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIERlZmF1bHRUeXBlO1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBEcm9wZG93bjtcbiAgfSgpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShkb2N1bWVudCkub24oRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIERyb3Bkb3duLl9kYXRhQXBpS2V5ZG93bkhhbmRsZXIpLm9uKEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX01FTlUsIERyb3Bkb3duLl9kYXRhQXBpS2V5ZG93bkhhbmRsZXIpLm9uKEVWRU5UX0NMSUNLX0RBVEFfQVBJICsgXCIgXCIgKyBFVkVOVF9LRVlVUF9EQVRBX0FQSSwgRHJvcGRvd24uX2NsZWFyTWVudXMpLm9uKEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIERyb3Bkb3duLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkX19kZWZhdWx0WydkZWZhdWx0J10odGhpcyksICd0b2dnbGUnKTtcbiAgfSkub24oRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0ZPUk1fQ0hJTEQsIGZ1bmN0aW9uIChlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogalF1ZXJ5XG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICAkX19kZWZhdWx0WydkZWZhdWx0J10uZm5bTkFNRV0gPSBEcm9wZG93bi5falF1ZXJ5SW50ZXJmYWNlO1xuICAkX19kZWZhdWx0WydkZWZhdWx0J10uZm5bTkFNRV0uQ29uc3RydWN0b3IgPSBEcm9wZG93bjtcblxuICAkX19kZWZhdWx0WydkZWZhdWx0J10uZm5bTkFNRV0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkX19kZWZhdWx0WydkZWZhdWx0J10uZm5bTkFNRV0gPSBKUVVFUllfTk9fQ09ORkxJQ1Q7XG4gICAgcmV0dXJuIERyb3Bkb3duLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgcmV0dXJuIERyb3Bkb3duO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZHJvcGRvd24uanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgY29sbGFwc2UuanMgdjQuNi4wIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjEgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdqcXVlcnknKSwgcmVxdWlyZSgnLi91dGlsLmpzJykpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnanF1ZXJ5JywgJy4vdXRpbCddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgP
2SB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5Db2xsYXBzZSA9IGZhY3RvcnkoZ2xvYmFsLmpRdWVyeSwgZ2xvYmFsLlV0aWwpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgkLCBVdGlsKSB7ICd1c2Ugc3RyaWN0JztcblxuICBmdW5jdGlvbiBfaW50ZXJvcERlZmF1bHRMZWdhY3kgKGUpIHsgcmV0dXJuIGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICdkZWZhdWx0JyBpbiBlID8gZSA6IHsgJ2RlZmF1bHQnOiBlIH07IH1cblxuICB2YXIgJF9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koJCk7XG4gIHZhciBVdGlsX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShVdGlsKTtcblxuICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH1cblxuICBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDb25zdGFudHNcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIHZhciBOQU1FID0gJ2NvbGxhcHNlJztcbiAgdmFyIFZFUlNJT04gPSAnNC42LjAnO1xuICB2YXIgREFUQV9LRVkgPSAnYnMuY29sbGFwc2UnO1xuICB2YXIgRVZFTlRfS0VZID0gXCIuXCIgKyBEQVRBX0tFWTtcbiAgdmFyIERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJF9fZGVmYXVsdFsnZGVmYXVsdCddLmZuW05BTUVdO1xuICB2YXIgRGVmYXVsdCA9IHtcbiAgICB0b2dnbGU6IHRydWUsXG4gICAgcGFyZW50OiAnJ1xuICB9O1xuICB2YXIgRGVmYXVsdFR5cGUgPSB7XG4gICAgdG9nZ2xlOiAnYm9vbGVhbicsXG4gICAgcGFyZW50OiAnKHN0cmluZ3xlbGVtZW50KSdcbiAgfTtcbiAgdmFyIEVWRU5UX1NIT1cgPSBcInNob3dcIiArIEVWRU5UX0tFWTtcbiAgdmFyIEVWRU5UX1NIT1dOID0gXCJzaG93blwiICsgRVZFTlRfS0VZO1xuICB2YXIgRVZFTlRfSElERSA9IFwiaGlkZVwiICsgRVZFTlRfS0VZO1xuICB2YXIgRVZFTlRfSElEREVOID0gXCJoaWRkZW5cIiArIEVWRU5UX0tFWTtcbiAgdmFyIEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gXCJjbGlja1wiICsgRVZFTlRfS0VZICsgREFUQV9BUElfS0VZO1xuICB2YXIgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnO1xuICB2YXIgQ0xBU1NfTkFNRV9DT0xMQVBTRSA9ICdjb2xsYXBzZSc7XG4gIHZhciBDTEFTU19OQU1FX0NPTExBUFNJTkcgPSAnY29sbGFwc2luZyc7XG4gIHZhciBDTEFTU19OQU1FX0NPTExBUFNFRCA9ICdjb2xsYXBzZWQnO1xuICB2YXIgRElNRU5TSU9OX1dJRFRIID0gJ3dpZHRoJztcbiAgdmFyIERJTUVOU0lPTl9IRUlHSFQgPSAnaGVpZ2h0JztcbiAgdmFyIFNFTEVDVE9SX0FDVElWRVMgPSAnLnNob3csIC5jb2xsYXBzaW5nJztcbiAgdmFyIFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdJztcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDbGFzcyBEZWZpbml0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICB2YXIgQ29sbGFwc2UgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbGxhcHNlKGVsZW1lbnQsIGNvbmZpZykge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCJdW2hy
2ZWY9XFxcIiNcIiArIGVsZW1lbnQuaWQgKyBcIlxcXCJdLFwiICsgKFwiW2RhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCJdW2RhdGEtdGFyZ2V0PVxcXCIjXCIgKyBlbGVtZW50LmlkICsgXCJcXFwiXVwiKSkpO1xuICAgICAgdmFyIHRvZ2dsZUxpc3QgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU0VMRUNUT1JfREFUQV9UT0dHTEUpKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRvZ2dsZUxpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmFyIGVsZW0gPSB0b2dnbGVMaXN0W2ldO1xuICAgICAgICB2YXIgc2VsZWN0b3IgPSBVdGlsX19kZWZhdWx0WydkZWZhdWx0J10uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtKTtcbiAgICAgICAgdmFyIGZpbHRlckVsZW1lbnQgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKS5maWx0ZXIoZnVuY3Rpb24gKGZvdW5kRWxlbSkge1xuICAgICAgICAgIHJldHVybiBmb3VuZEVsZW0gPT09IGVsZW1lbnQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChzZWxlY3RvciAhPT0gbnVsbCAmJiBmaWx0ZXJFbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RvciA9IHNlbGVjdG9yO1xuXG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckFycmF5LnB1c2goZWxlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fY29uZmlnLnBhcmVudCA/IHRoaXMuX2dldFBhcmVudCgpIDogbnVsbDtcblxuICAgICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl9lbGVtZW50LCB0aGlzLl90cmlnZ2VyQXJyYXkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLnRvZ2dsZSkge1xuICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgfVxuICAgIH0gLy8gR2V0dGVyc1xuXG5cbiAgICB2YXIgX3Byb3RvID0gQ29sbGFwc2UucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLnRvZ2dsZSA9IGZ1bmN0aW9uIHRvZ2dsZSgpIHtcbiAgICAgIGlmICgkX19kZWZhdWx0WydkZWZhdWx0J10odGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ0xBU1NfTkFNRV9TSE9XKSkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uc2hvdyA9IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICB2Y
2XIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDTEFTU19OQU1FX1NIT1cpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGFjdGl2ZXM7XG4gICAgICB2YXIgYWN0aXZlc0RhdGE7XG5cbiAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHtcbiAgICAgICAgYWN0aXZlcyA9IFtdLnNsaWNlLmNhbGwodGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU0VMRUNUT1JfQUNUSVZFUykpLmZpbHRlcihmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgX3RoaXMuX2NvbmZpZy5wYXJlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFyZW50JykgPT09IF90aGlzLl9jb25maWcucGFyZW50O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBlbGVtLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0NPTExBUFNFKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGFjdGl2ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgYWN0aXZlcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZXMpIHtcbiAgICAgICAgYWN0aXZlc0RhdGEgPSAkX19kZWZhdWx0WydkZWZhdWx0J10oYWN0aXZlcykubm90KHRoaXMuX3NlbGVjdG9yKS5kYXRhKERBVEFfS0VZKTtcblxuICAgICAgICBpZiAoYWN0aXZlc0RhdGEgJiYgYWN0aXZlc0RhdGEuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2Y
2XIgc3RhcnRFdmVudCA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXS5FdmVudChFVkVOVF9TSE9XKTtcbiAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHN0YXJ0RXZlbnQpO1xuXG4gICAgICBpZiAoc3RhcnRFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChhY3RpdmVzKSB7XG4gICAgICAgIENvbGxhcHNlLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkX19kZWZhdWx0WydkZWZhdWx0J10oYWN0aXZlcykubm90KHRoaXMuX3NlbGVjdG9yKSwgJ2hpZGUnKTtcblxuICAgICAgICBpZiAoIWFjdGl2ZXNEYXRhKSB7XG4gICAgICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKGFjdGl2ZXMpLmRhdGEoREFUQV9LRVksIG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKTtcblxuICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKENMQVNTX05BTUVfQ09MTEFQU0UpLmFkZENsYXNzKENMQVNTX05BTUVfQ09MTEFQU0lORyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAwO1xuXG4gICAgICBpZiAodGhpcy5fdHJpZ2dlckFycmF5Lmxlbmd0aCkge1xuICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10odGhpcy5fdHJpZ2dlckFycmF5KS5yZW1vdmVDbGFzcyhDTEFTU19OQU1FX0NPTExBUFNFRCkuYXR0cignYXJpYS1leHBhbmRlZCcsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFRyYW5zaXRpb25pbmcodHJ1ZSk7XG5cbiAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10oX3RoaXMuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKENMQVNTX05BTUVfQ09MTEFQU0lORykuYWRkQ2xhc3MoQ0xBU1NfTkFNRV9DT0xMQVBTRSArIFwiIFwiICsgQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICAgICAgX3RoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuXG4gICAgICAgIF90aGlzLnNldFRyYW5zaXRpb25pbmcoZmFsc2UpO1xuXG4gICAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShfdGhpcy5fZWxlbWVudCkudHJpZ2dlcihFVkVOVF9TSE9XTik7XG4gICAgICB9O1xuXG4gICAgICB2Y
2XIgY2FwaXRhbGl6ZWREaW1lbnNpb24gPSBkaW1lbnNpb25bMF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSgxKTtcbiAgICAgIHZhciBzY3JvbGxTaXplID0gXCJzY3JvbGxcIiArIGNhcGl0YWxpemVkRGltZW5zaW9uO1xuICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWxfX2RlZmF1bHRbJ2RlZmF1bHQnXS5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbF9fZGVmYXVsdFsnZGVmYXVsdCddLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IHRoaXMuX2VsZW1lbnRbc2Nyb2xsU2l6ZV0gKyBcInB4XCI7XG4gICAgfTtcblxuICAgIF9wcm90by5oaWRlID0gZnVuY3Rpb24gaGlkZSgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8ICEkX19kZWZhdWx0WydkZWZhdWx0J10odGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoQ0xBU1NfTkFNRV9TSE9XKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydEV2ZW50ID0gJF9fZGVmYXVsdFsnZGVmYXVsdCddLkV2ZW50KEVWRU5UX0hJREUpO1xuICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc3RhcnRFdmVudCk7XG5cbiAgICAgIGlmIChzdGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpO1xuXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSB0aGlzLl9lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2RpbWVuc2lvbl0gKyBcInB4XCI7XG4gICAgICBVdGlsX19kZWZhdWx0WydkZWZhdWx0J10ucmVmbG93KHRoaXMuX2VsZW1lbnQpO1xuICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMuX2VsZW1lbnQpLmFkZENsYXNzKENMQVNTX05BTUVfQ09MTEFQU0lORykucmVtb3ZlQ2xhc3MoQ0xBU1NfTkFNRV9DT0xMQVBTRSArIFwiIFwiICsgQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICAgIHZhciB0cmlnZ2VyQXJyYXlMZW5ndGggPSB0aGlzLl90cmlnZ2VyQXJyYXkubGVuZ3RoO1xuXG4gICAgICBpZiAodHJpZ2dlckFycmF5TGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyaWdnZXJBcnJheUxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHRyaWdnZXIgPSB0aGlzLl90cmlnZ2VyQXJyYXlbaV07XG4gICAgICAgICAgdmFyIHNlbGVjdG9yID0gVXRpbF9fZGVmYXVsdFsnZGVmYXVsdCddLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodHJpZ2dlcik7XG5cbiAgICAgICAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciAkZWxlbSA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKSk7XG5cbiAgICAgICAgICAgIGlmICghJGVsZW0uaGFzQ2xhc3MoQ0xBU1NfTkFNRV9TSE9XKSkge1xuICAgICAgICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10odHJpZ2dlcikuYWRkQ2xhc3MoQ0xBU1NfTkFNRV9DT0xMQVBTRUQpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0VHJhbnNpdGlvbmluZyh0cnVlKTtcblxuICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgIF90aGlzMi5zZXRUcmFuc2l0aW9uaW5nKGZhbHNlKTtcblxuICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10oX3RoaXMyLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhDTEFTU19OQU1FX0NPTExBUFNJTkcpLmFkZENsYXNzKENMQVNTX05BTUVfQ09MTEFQU0UpLnRyaWdnZXIoRVZFTlRfSElEREVOKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbiA9IFV0aWxfX2RlZmF1bHRbJ2RlZmF1bHQnXS5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS5vbmUoVXRpbF9fZGVmYXVsdFsnZGVmYXVsdCddLlRSQU5TSVRJT05fRU5ELCBjb21wbGV0ZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNldFRyYW5zaXRpb25pbmcgPSBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uaW5nKGlzVHJhbnNpdGlvbmluZykge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gaXNUcmFuc2l0aW9uaW5nO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZGlzcG9zZSA9IGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10ucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCBEQVRBX0tFWSk7XG4gICAgICB0aGlzLl9jb25maWcgPSBudWxsO1xuICAgICAgdGhpcy5fcGFyZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IG51bGw7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRDb25maWcgPSBmdW5jdGlvbiBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgY29uZmlnID0gX2V4dGVuZHMoe30sIERlZmF1bHQsIGNvbmZpZyk7XG4gICAgICBjb25maWcudG9nZ2xlID0gQm9vbGVhbihjb25maWcudG9nZ2xlKTsgLy8gQ29lcmNlIHN0cmluZyB2YWx1ZXNcblxuICAgICAgVXRpbF9fZGVmYXVsdFsnZGVmYXVsdCddLnR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKTtcbiAgICAgIHJldHVybi
2Bjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0RGltZW5zaW9uID0gZnVuY3Rpb24gX2dldERpbWVuc2lvbigpIHtcbiAgICAgIHZhciBoYXNXaWR0aCA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhESU1FTlNJT05fV0lEVEgpO1xuICAgICAgcmV0dXJuIGhhc1dpZHRoID8gRElNRU5TSU9OX1dJRFRIIDogRElNRU5TSU9OX0hFSUdIVDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRQYXJlbnQgPSBmdW5jdGlvbiBfZ2V0UGFyZW50KCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBwYXJlbnQ7XG5cbiAgICAgIGlmIChVdGlsX19kZWZhdWx0WydkZWZhdWx0J10uaXNFbGVtZW50KHRoaXMuX2NvbmZpZy5wYXJlbnQpKSB7XG4gICAgICAgIHBhcmVudCA9IHRoaXMuX2NvbmZpZy5wYXJlbnQ7IC8vIEl0J3MgYSBqUXVlcnkgb2JqZWN0XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9jb25maWcucGFyZW50LmpxdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBwYXJlbnQgPSB0aGlzLl9jb25maWcucGFyZW50WzBdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuX2NvbmZpZy5wYXJlbnQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VsZWN0b3IgPSBcIltkYXRhLXRvZ2dsZT1cXFwiY29sbGFwc2VcXFwiXVtkYXRhLXBhcmVudD1cXFwiXCIgKyB0aGlzLl9jb25maWcucGFyZW50ICsgXCJcXFwiXVwiO1xuICAgICAgdmFyIGNoaWxkcmVuID0gW10uc2xpY2UuY2FsbChwYXJlbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpO1xuICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKGNoaWxkcmVuKS5lYWNoKGZ1bmN0aW9uIChpLCBlbGVtZW50KSB7XG4gICAgICAgIF90aGlzMy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKENvbGxhcHNlLl9nZXRUYXJnZXRGcm9tRWxlbWVudChlbGVtZW50KSwgW2VsZW1lbnRdKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MgPSBmdW5jdGlvbiBfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKGVsZW1lbnQsIHRyaWdnZXJBcnJheSkge1xuICAgICAgdmFyIGlzT3BlbiA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShlbGVtZW50KS5oYXNDbGFzcyhDTEFTU19OQU1FX1NIT1cpO1xuXG4gICAgICBpZiAodHJpZ2dlckFycmF5Lmxlbmd0aCkge1xuICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10odHJpZ2dlckFycmF5KS50b2dnbGVDbGFzcyhDTEFTU19OQU1FX0NPTExBUFNFRCwgIWlzT3BlbikuYXR0cignYXJpYS1leHBhbmRlZCcsIGlzT3Blbik7XG4gICAgICB9XG4gICAgfSAvLyBTdGF0aWNcbiAgICA7XG5cbiAgICBDb2xsYXBzZS5fZ2V0VGFyZ2V0RnJvbUVsZW1lbnQgPSBmdW5jdGlvbiBfZ2V0VGFyZ2V0RnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gVXRpbF9fZGVmYXVsdFsnZGVmYXVsdCddLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICByZXR1cm4gc2VsZWN0b3IgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSA6IG51bGw7XG4gICAgfTtcblxuICAgIENvbGxhcHNlLl9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciAkZWxlbWVudCA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzKTtcbiAgICAgICAgdmFyIGRhdGEgPSAkZWxlbWVudC5kYXRhKERBVEFfS0VZKTtcblxuICAgICAgICB2Y
2XIgX2NvbmZpZyA9IF9leHRlbmRzKHt9LCBEZWZhdWx0LCAkZWxlbWVudC5kYXRhKCksIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KTtcblxuICAgICAgICBpZiAoIWRhdGEgJiYgX2NvbmZpZy50b2dnbGUgJiYgdHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycgJiYgL3Nob3d8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICAgICAgX2NvbmZpZy50b2dnbGUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgQ29sbGFwc2UodGhpcywgX2NvbmZpZyk7XG4gICAgICAgICAgJGVsZW1lbnQuZGF0YShEQVRBX0tFWSwgZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgY29uZmlnICsgXCJcXFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX2NyZWF0ZUNsYXNzKENvbGxhcHNlLCBudWxsLCBbe1xuICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gVkVSU0lPTjtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0O1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBDb2xsYXBzZTtcbiAgfSgpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShkb2N1bWVudCkub24oRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBwcmV2ZW50RGVmYXVsdCBvbmx5IGZvciA8YT4gZWxlbWVudHMgKHdoaWNoIGNoYW5nZSB0aGUgVVJMKSBub3QgaW5zaWRlIHRoZSBjb2xsYXBzaWJsZSBlbGVtZW50XG4gICAgaWYgKGV2ZW50LmN1cnJlbnRUYXJnZXQudGFnTmFtZSA9PT0gJ0EnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhciAkdHJpZ2dlciA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzKTtcbiAgICB2YXIgc2VsZWN0b3IgPSBVdGlsX19kZWZhdWx0WydkZWZhdWx0J10uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzKTtcbiAgICB2YXIgc2VsZWN0b3JzID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7XG4gICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHNlbGVjdG9ycykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2Y
2XIgJHRhcmdldCA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzKTtcbiAgICAgIHZhciBkYXRhID0gJHRhcmdldC5kYXRhKERBVEFfS0VZKTtcbiAgICAgIHZhciBjb25maWcgPSBkYXRhID8gJ3RvZ2dsZScgOiAkdHJpZ2dlci5kYXRhKCk7XG5cbiAgICAgIENvbGxhcHNlLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkdGFyZ2V0LCBjb25maWcpO1xuICAgIH0pO1xuICB9KTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBqUXVlcnlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gICRfX2RlZmF1bHRbJ2RlZmF1bHQnXS5mbltOQU1FXSA9IENvbGxhcHNlLl9qUXVlcnlJbnRlcmZhY2U7XG4gICRfX2RlZmF1bHRbJ2RlZmF1bHQnXS5mbltOQU1FXS5Db25zdHJ1Y3RvciA9IENvbGxhcHNlO1xuXG4gICRfX2RlZmF1bHRbJ2RlZmF1bHQnXS5mbltOQU1FXS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXS5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICByZXR1cm4gQ29sbGFwc2UuX2pRdWVyeUludGVyZmFjZTtcbiAgfTtcblxuICByZXR1cm4gQ29sbGFwc2U7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb2xsYXBzZS5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBjYXJvdXNlbC5qcyB2NC42LjAgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyMSBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ2pxdWVyeScpLCByZXF1aXJlKCcuL3V0aWwuanMnKSkgOlxuICB0eX
2Blb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydqcXVlcnknLCAnLi91dGlsJ10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLkNhcm91c2VsID0gZmFjdG9yeShnbG9iYWwualF1ZXJ5LCBnbG9iYWwuVXRpbCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCQsIFV0aWwpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIGZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdExlZ2FjeSAoZSkgeyByZXR1cm4gZSAmJiB0eXBlb2YgZSA9PT0gJ29iamVjdCcgJiYgJ2RlZmF1bHQnIGluIGUgPyBlIDogeyAnZGVmYXVsdCc6IGUgfTsgfVxuXG4gIHZhciAkX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeSgkKTtcbiAgdmFyIFV0aWxfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KFV0aWwpO1xuXG4gIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICAgIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2Y
2XIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIENvbnN0YW50c1xuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIE5BTUUgPSAnY2Fyb3VzZWwnO1xuICB2YXIgVkVSU0lPTiA9ICc0LjYuMCc7XG4gIHZhciBEQVRBX0tFWSA9ICdicy5jYXJvdXNlbCc7XG4gIHZhciBFVkVOVF9LRVkgPSBcIi5cIiArIERBVEFfS0VZO1xuICB2YXIgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSc7XG4gIHZhciBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkX19kZWZhdWx0WydkZWZhdWx0J10uZm5bTkFNRV07XG4gIHZhciBBUlJPV19MRUZUX0tFWUNPREUgPSAzNzsgLy8gS2V5Ym9hcmRFdmVudC53aGljaCB2YWx1ZSBmb3IgbGVmdCBhcnJvdyBrZXlcblxuICB2YXIgQVJST1dfUklHSFRfS0VZQ09ERSA9IDM5OyAvLyBLZXlib2FyZEV2ZW50LndoaWNoIHZhbHVlIGZvciByaWdodCBhcnJvdyBrZXlcblxuICB2YXIgVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCA9IDUwMDsgLy8gVGltZSBmb3IgbW91c2UgY29tcGF0IGV2ZW50cyB0byBmaXJlIGFmdGVyIHRvdWNoXG5cbiAgdmFyIFNXSVBFX1RIUkVTSE9MRCA9IDQwO1xuICB2YXIgRGVmYXVsdCA9IHtcbiAgICBpbnRlcnZhbDogNTAwMCxcbiAgICBrZXlib2FyZDogdHJ1ZSxcbiAgICBzbGlkZTogZmFsc2UsXG4gICAgcGF1c2U6ICdob3ZlcicsXG4gICAgd3JhcDogdHJ1ZSxcbiAgICB0b3VjaDogdHJ1ZVxuICB9O1xuICB2YXIgRGVmYXVsdFR5cGUgPSB7XG4gICAgaW50ZXJ2YWw6ICcobnVtYmVyfGJvb2xlYW4pJyxcbiAgICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICAgIHNsaWRlOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gICAgcGF1c2U6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgICB3cmFwOiAnYm9vbGVhbicsXG4gICAgdG91Y2g6ICdib29sZWFuJ1xuICB9O1xuICB2YXIgRElSRUNUSU9OX05FWFQgPSAnbmV4dCc7XG4gIHZhciBESVJFQ1RJT05fUFJFViA9ICdwcmV2JztcbiAgdmFyIERJUkVDVElPTl9MRUZUID0gJ2xlZnQnO1xuICB2YXIgRElSRUNUSU9OX1JJR0hUID0gJ3JpZ2h0JztcbiAgdmFyIEVWRU5UX1NMSURFID0gXCJzbGlkZVwiICsgRVZFTlRfS0VZO1xuICB2YXIgRVZFTlRfU0xJRCA9IFwic2xpZFwiICsgRVZFTlRfS0VZO1xuICB2YXIgRVZFTlRfS0VZRE9XTiA9IFwia2V5ZG93blwiICsgRVZFTlRfS0VZO1xuICB2YXIgRVZFTlRfTU9VU0VFTlRFUiA9IFwibW91c2VlbnRlclwiICsgRVZFTlRfS0VZO1xuICB2YXIgRVZFTlRfTU9VU0VMRUFWRSA9IFwibW91c2VsZWF2ZVwiICsgRVZFTlRfS0VZO1xuICB2YXIgRVZFTlRfVE9VQ0hTVEFSVCA9IFwidG91Y2hzdGFydFwiICsgRVZFTlRfS0VZO1xuICB2YXIgRVZFTlRfVE9VQ0hNT1ZFID0gXCJ0b3VjaG1vdmVcIiArIEVWRU5UX0tFWTtcbiAgdmFyIEVWRU5UX1RPVUNIRU5EID0gXCJ0b3VjaGVuZFwiICsgRVZFTlRfS0VZO1xuICB2YXIgRVZFTlRfUE9JTlRFUkRPV04gPSBcInBvaW50ZXJkb3duXCIgKyBFVkVOVF9LRVk7XG4gIHZhciBFVkVOVF9QT0lOVEVSVVAgPSBcInBvaW50ZXJ1cFwiICsgRVZFTlRfS0VZO1xuICB2YXIgRVZFTlRfRFJBR19TVEFSVCA9IFwiZHJhZ3N0YXJ0XCIgKyBFVkVOVF9LRVk7XG4gIHZhciBFVkVOVF9MT0FEX0RBVEFfQVBJID0gXCJsb2FkXCIgKyBFVkVOVF9LRVkgKyBEQVRBX0FQSV9LRVk7XG4gIHZhciBFVkVOVF9DTElDS19EQVRBX0FQSSA9IFwiY2xpY2tcIiArIEVWRU5UX0tFWSArIERBVEFfQVBJX0tFWTtcbiAgdmFyIENMQVNTX05BTUVfQ0FST1VTRUwgPSAnY2Fyb3VzZWwnO1xuICB2YXIgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJztcbiAgdmFyIENMQVNTX05BTUVfU0xJREUgPSAnc2xpZGUnO1xuICB2YXIgQ0xBU1NfTkFNRV9SSUdIVCA9ICdjYXJvdXNlbC1pdGVtLXJpZ2h0JztcbiAgdmFyIENMQVNTX05BTUVfTEVGVCA9ICdjYXJvdXNlbC1pdGVtLWxlZnQnO1xuICB2YXIgQ0xBU1NfTkFNRV9ORVhUID0gJ2Nhcm91c2VsLWl0ZW0tbmV4dCc7XG4gIHZhciBDTEFTU19OQU1FX1BSRVYgPSAnY2Fyb3VzZWwtaXRlbS1wcmV2JztcbiAgdmFyIENMQVNTX05BTUVfUE9JTlRFUl9FVkVOVCA9ICdwb2ludGVyLWV2ZW50JztcbiAgdmFyIFNFTEVDVE9SX0FDVElWRSA9ICcuYWN0aXZlJztcbiAgdmFyIFNFTEVDVE9SX0FDVElWRV9JVEVNID0gJy5hY3RpdmUuY2Fyb3VzZWwtaXRlbSc7XG4gIHZhciBTRUxFQ1RPUl9JVEVNID0gJy5jYXJvdXNlbC1pdGVtJztcbiAgdmFyIFNFTEVDVE9SX0lURU1fSU1HID0gJy5jYXJvdXNlbC1pdGVtIGltZyc7XG4gIHZhciBTRUxFQ1RPUl9ORVhUX1BSRVYgPSAnLmNhcm91c2VsLWl0ZW0tbmV4dCwgLmNhcm91c2VsLWl0ZW0tcHJldic7XG4gIHZhciBTRUxFQ1RPUl9JTkRJQ0FUT1JTID0gJy5jYXJvdXNlbC1pbmRpY2F0b3JzJztcbiAgdmFyIFNFTEVDVE9SX0RBVEFfU0xJREUgPSAnW2RhdGEtc2xpZGVdLCBbZGF0YS1zbGlkZS10b10nO1xuICB2YXIgU0VMRUNUT1JfREFUQV9SSURFID0gJ1tkYXRhLXJpZGU9XCJjYXJvdXNlbFwiXSc7XG4gIHZhciBQb2ludGVyVHlwZSA9IHtcbiAgICBUT1VDSDogJ3RvdWNoJyxcbiAgICBQRU46ICdwZW4nXG4gIH07XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQ2xhc3MgRGVmaW5pdGlvblxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgdmFyIENhcm91c2VsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDYXJvdXNlbChlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIHRoaXMuX2l0ZW
21zID0gbnVsbDtcbiAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcbiAgICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5faXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy50b3VjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgdGhpcy50b3VjaFN0YXJ0WCA9IDA7XG4gICAgICB0aGlzLnRvdWNoRGVsdGFYID0gMDtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTRUxFQ1RPUl9JTkRJQ0FUT1JTKTtcbiAgICAgIHRoaXMuX3RvdWNoU3VwcG9ydGVkID0gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDA7XG4gICAgICB0aGlzLl9wb2ludGVyRXZlbnQgPSBCb29sZWFuKHdpbmRvdy5Qb2ludGVyRXZlbnQgfHwgd2luZG93Lk1TUG9pbnRlckV2ZW50KTtcblxuICAgICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9IC8vIEdldHRlcnNcblxuXG4gICAgdmFyIF9wcm90byA9IENhcm91c2VsLnByb3RvdHlwZTtcblxuICAgIC8vIFB1YmxpY1xuICAgIF9wcm90by5uZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGlmICghdGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICAgIHRoaXMuX3NsaWRlKERJUkVDVElPTl9ORVhUKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLm5leHRXaGVuVmlzaWJsZSA9IGZ1bmN0aW9uIG5leHRXaGVuVmlzaWJsZSgpIHtcbiAgICAgIHZhciAkZWxlbWVudCA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KTsgLy8gRG9uJ3QgY2FsbCBuZXh0IHdoZW4gdGhlIHBhZ2UgaXNuJ3QgdmlzaWJsZVxuICAgICAgLy8gb3IgdGhlIGNhcm91c2VsIG9yIGl0cyBwYXJlbnQgaXNuJ3QgdmlzaWJsZVxuXG4gICAgICBpZiAoIWRvY3VtZW50LmhpZGRlbiAmJiAkZWxlbWVudC5pcygnOnZpc2libGUnKSAmJiAkZWxlbWVudC5jc3MoJ3Zpc2liaWxpdHknKSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5wcmV2ID0gZnVuY3Rpb24gcHJldigpIHtcbiAgICAgIGlmICghdGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICAgIHRoaXMuX3NsaWRlKERJUkVDVElPTl9QUkVWKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLnBhdXNlID0gZnVuY3Rpb24gcGF1c2UoZXZlbnQpIHtcbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgdGhpcy5faXNQYXVzZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNFTEVDVE9SX05FWFRfUFJFVikpIHtcbiAgICAgICAgVXRpbF9fZGVmYXVsdFsnZGVmYXVsdCddLnRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpO1xuICAgICAgICB0aGlzLmN5Y2xlKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKTtcbiAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmN5Y2xlID0gZnVuY3Rpb24gY3ljbGUoZXZlbnQpIHtcbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgdGhpcy5faXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2ludGVydmFsKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuaW50ZXJ2YWwgJiYgIXRoaXMuX2lzUGF1c2VkKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUludGVydmFsKCk7XG5cbiAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID8gdGhpcy5uZXh0V2hlblZpc2libGUgOiB0aGlzLm5leHQpLmJpbmQodGhpcyksIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by50byA9IGZ1bmN0aW9uIHRvKGluZGV4KSB7XG4gICAgICB2Y
2XIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gdGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNFTEVDVE9SX0FDVElWRV9JVEVNKTtcblxuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2FjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICBpZiAoaW5kZXggPiB0aGlzLl9pdGVtcy5sZW5ndGggLSAxIHx8IGluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMuX2VsZW1lbnQpLm9uZShFVkVOVF9TTElELCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzLnRvKGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZUluZGV4ID09PSBpbmRleCkge1xuICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgIHRoaXMuY3ljbGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlyZWN0aW9uID0gaW5kZXggPiBhY3RpdmVJbmRleCA/IERJUkVDVElPTl9ORVhUIDogRElSRUNUSU9OX1BSRVY7XG5cbiAgICAgIHRoaXMuX3NsaWRlKGRpcmVjdGlvbiwgdGhpcy5faXRlbXNbaW5kZXhdKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMuX2VsZW1lbnQpLm9mZihFVkVOVF9LRVkpO1xuICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkpO1xuICAgICAgdGhpcy5faXRlbXMgPSBudWxsO1xuICAgICAgdGhpcy5fY29uZmlnID0gbnVsbDtcbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgICAgdGhpcy5faXNQYXVzZWQgPSBudWxsO1xuICAgICAgdGhpcy5faXNTbGlkaW5nID0gbnVsbDtcbiAgICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSBudWxsO1xuICAgIH0gLy8gUHJpdmF0ZVxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0Q29uZmlnID0gZnVuY3Rpb24gX2dldENvbmZpZyhjb25maWcpIHtcbiAgICAgIGNvbmZpZyA9IF9leHRlbmRzKHt9LCBEZWZhdWx0LCBjb25maWcpO1xuICAgICAgVXRpbF9fZGVmYXVsdFsnZGVmYXVsdCddLnR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfTtcblxuICAgIF9wcm90by5faGFuZGxlU3dpcGUgPSBmdW5jdGlvbiBfaGFuZGxlU3dpcGUoKSB7XG4gICAgICB2Y
2XIgYWJzRGVsdGF4ID0gTWF0aC5hYnModGhpcy50b3VjaERlbHRhWCk7XG5cbiAgICAgIGlmIChhYnNEZWx0YXggPD0gU1dJUEVfVEhSRVNIT0xEKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGRpcmVjdGlvbiA9IGFic0RlbHRheCAvIHRoaXMudG91Y2hEZWx0YVg7XG4gICAgICB0aGlzLnRvdWNoRGVsdGFYID0gMDsgLy8gc3dpcGUgbGVmdFxuXG4gICAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgICB0aGlzLnByZXYoKTtcbiAgICAgIH0gLy8gc3dpcGUgcmlnaHRcblxuXG4gICAgICBpZiAoZGlyZWN0aW9uIDwgMCkge1xuICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLl9hZGRFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS5vbihFVkVOVF9LRVlET1dOLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLl9rZXlkb3duKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgPT09ICdob3ZlcicpIHtcbiAgICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMuX2VsZW1lbnQpLm9uKEVWRU5UX01PVVNFRU5URVIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIucGF1c2UoZXZlbnQpO1xuICAgICAgICB9KS5vbihFVkVOVF9NT1VTRUxFQVZFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLmN5Y2xlKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcudG91Y2gpIHtcbiAgICAgICAgdGhpcy5fYWRkVG91Y2hFdmVudExpc3RlbmVycygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiBfYWRkVG91Y2hFdmVudExpc3RlbmVycygpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMuX3RvdWNoU3VwcG9ydGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0ID0gZnVuY3Rpb24gc3RhcnQoZXZlbnQpIHtcbiAgICAgICAgaWYgKF90aGlzMy5fcG9pbnRlckV2ZW50ICYmIFBvaW50ZXJUeXBlW2V2ZW50Lm9yaWdpbmFsRXZlbnQucG9pbnRlclR5cGUudG9VcHBlckNhc2UoKV0pIHtcbiAgICAgICAgICBfdGhpczMudG91Y2hTdGFydFggPSBldmVudC5vcmlnaW5hbEV2ZW50LmNsaWVudFg7XG4gICAgICAgIH0gZWxzZSBpZiAoIV90aGlzMy5fcG9pbnRlckV2ZW50KSB7XG4gICAgICAgICAgX3RoaXMzLnRvdWNoU3RhcnRYID0gZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHZhciBtb3ZlID0gZnVuY3Rpb24gbW92ZShldmVudCkge1xuICAgICAgICAvLyBlbnN1cmUgc3dpcGluZyB3aXRoIG9uZSB0b3VjaCBhbmQgbm90IHBpbmNoaW5nXG4gICAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgJiYgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBfdGhpczMudG91Y2hEZWx0YVggPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzMy50b3VjaERlbHRhWCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5jbGllbnRYIC0gX3RoaXMzLnRvdWNoU3RhcnRYO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB2Y
2XIgZW5kID0gZnVuY3Rpb24gZW5kKGV2ZW50KSB7XG4gICAgICAgIGlmIChfdGhpczMuX3BvaW50ZXJFdmVudCAmJiBQb2ludGVyVHlwZVtldmVudC5vcmlnaW5hbEV2ZW50LnBvaW50ZXJUeXBlLnRvVXBwZXJDYXNlKCldKSB7XG4gICAgICAgICAgX3RoaXMzLnRvdWNoRGVsdGFYID0gZXZlbnQub3JpZ2luYWxFdmVudC5jbGllbnRYIC0gX3RoaXMzLnRvdWNoU3RhcnRYO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMzLl9oYW5kbGVTd2lwZSgpO1xuXG4gICAgICAgIGlmIChfdGhpczMuX2NvbmZpZy5wYXVzZSA9PT0gJ2hvdmVyJykge1xuICAgICAgICAgIC8vIElmIGl0J3MgYSB0b3VjaC1lbmFibGVkIGRldmljZSwgbW91c2VlbnRlci9sZWF2ZSBhcmUgZmlyZWQgYXNcbiAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSBtb3VzZSBjb21wYXRpYmlsaXR5IGV2ZW50cyBvbiBmaXJzdCB0YXAgLSB0aGUgY2Fyb3VzZWxcbiAgICAgICAgICAvLyB3b3VsZCBzdG9wIGN5Y2xpbmcgdW50aWwgdXNlciB0YXBwZWQgb3V0IG9mIGl0O1xuICAgICAgICAgIC8vIGhlcmUsIHdlIGxpc3RlbiBmb3IgdG91Y2hlbmQsIGV4cGxpY2l0bHkgcGF1c2UgdGhlIGNhcm91c2VsXG4gICAgICAgICAgLy8gKGFzIGlmIGl0J3MgdGhlIHNlY29uZCB0aW1lIHdlIHRhcCBvbiBpdCwgbW91c2VlbnRlciBjb21wYXQgZXZlbnRcbiAgICAgICAgICAvLyBpcyBOT1QgZmlyZWQpIGFuZCBhZnRlciBhIHRpbWVvdXQgKHRvIGFsbG93IGZvciBtb3VzZSBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgLy8gZXZlbnRzIHRvIGZpcmUpIHdlIGV4cGxpY2l0bHkgcmVzdGFydCBjeWNsaW5nXG4gICAgICAgICAgX3RoaXMzLnBhdXNlKCk7XG5cbiAgICAgICAgICBpZiAoX3RoaXMzLnRvdWNoVGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KF90aGlzMy50b3VjaFRpbWVvdXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90aGlzMy50b3VjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5jeWNsZShldmVudCk7XG4gICAgICAgICAgfSwgVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCArIF90aGlzMy5fY29uZmlnLmludGVydmFsKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTRUxFQ1RPUl9JVEVNX0lNRykpLm9uKEVWRU5UX0RSQUdfU1RBUlQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuX3BvaW50ZXJFdmVudCkge1xuICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10odGhpcy5fZWxlbWVudCkub24oRVZFTlRfUE9JTlRFUkRPV04sIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBzdGFydChldmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10odGhpcy5fZWxlbWVudCkub24oRVZFTlRfUE9JTlRFUlVQLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gZW5kKGV2ZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfUE9JTlRFUl9FVkVOVCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10odGhpcy5fZWxlbWVudCkub24oRVZFTlRfVE9VQ0hTVEFSVCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXJ0KGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS5vbihFVkVOVF9UT1VDSE1PVkUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBtb3ZlKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS5vbihFVkVOVF9UT1VDSEVORCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGVuZChldmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX2tleWRvd24gPSBmdW5jdGlvbiBfa2V5ZG93bihldmVudCkge1xuICAgICAgaWYgKC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChldmVudC53aGljaCkge1xuICAgICAgICBjYXNlIEFSUk9XX0xFRlRfS0VZQ09ERTpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMucHJldigpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQVJST1dfUklHSFRfS0VZQ09ERTpcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldEl0ZW1JbmRleCA9IGZ1bmN0aW9uIF9nZXRJdGVtSW5kZXgoZWxlbWVudCkge1xuICAgICAgdGhpcy5faXRlbXMgPSBlbGVtZW50ICYmIGVsZW1lbnQucGFyZW50Tm9kZSA/IFtdLnNsaWNlLmNhbGwoZWxlbWVudC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoU0VMRUNUT1JfSVRFTSkpIDogW107XG4gICAgICByZXR1cm4gdGhpcy5faXRlbXMuaW5kZXhPZihlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRJdGVtQnlEaXJlY3Rpb24gPSBmdW5jdGlvbiBfZ2V0SXRlbUJ5RGlyZWN0aW9uKGRpcmVjdGlvbiwgYWN0aXZlRWxlbWVudCkge1xuICAgICAgdmFyIGlzTmV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX05FWFQ7XG4gICAgICB2Y
2XIgaXNQcmV2RGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSBESVJFQ1RJT05fUFJFVjtcblxuICAgICAgdmFyIGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICB2YXIgbGFzdEl0ZW1JbmRleCA9IHRoaXMuX2l0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgaXNHb2luZ1RvV3JhcCA9IGlzUHJldkRpcmVjdGlvbiAmJiBhY3RpdmVJbmRleCA9PT0gMCB8fCBpc05leHREaXJlY3Rpb24gJiYgYWN0aXZlSW5kZXggPT09IGxhc3RJdGVtSW5kZXg7XG5cbiAgICAgIGlmIChpc0dvaW5nVG9XcmFwICYmICF0aGlzLl9jb25maWcud3JhcCkge1xuICAgICAgICByZXR1cm4gYWN0aXZlRWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgdmFyIGRlbHRhID0gZGlyZWN0aW9uID09PSBESVJFQ1RJT05fUFJFViA/IC0xIDogMTtcbiAgICAgIHZhciBpdGVtSW5kZXggPSAoYWN0aXZlSW5kZXggKyBkZWx0YSkgJSB0aGlzLl9pdGVtcy5sZW5ndGg7XG4gICAgICByZXR1cm4gaXRlbUluZGV4ID09PSAtMSA/IHRoaXMuX2l0ZW1zW3RoaXMuX2l0ZW1zLmxlbmd0aCAtIDFdIDogdGhpcy5faXRlbXNbaXRlbUluZGV4XTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl90cmlnZ2VyU2xpZGVFdmVudCA9IGZ1bmN0aW9uIF90cmlnZ2VyU2xpZGVFdmVudChyZWxhdGVkVGFyZ2V0LCBldmVudERpcmVjdGlvbk5hbWUpIHtcbiAgICAgIHZhciB0YXJnZXRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChyZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgdmFyIGZyb21JbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU0VMRUNUT1JfQUNUSVZFX0lURU0pKTtcblxuICAgICAgdmFyIHNsaWRlRXZlbnQgPSAkX19kZWZhdWx0WydkZWZhdWx0J10uRXZlbnQoRVZFTlRfU0xJREUsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogcmVsYXRlZFRhcmdldCxcbiAgICAgICAgZGlyZWN0aW9uOiBldmVudERpcmVjdGlvbk5hbWUsXG4gICAgICAgIGZyb206IGZyb21JbmRleCxcbiAgICAgICAgdG86IHRhcmdldEluZGV4XG4gICAgICB9KTtcbiAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNsaWRlRXZlbnQpO1xuICAgICAgcmV0dXJuIHNsaWRlRXZlbnQ7XG4gICAgfTtcblxuICAgIF9wcm90by5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudCA9IGZ1bmN0aW9uIF9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCkge1xuICAgICAgICB2Y
2XIgaW5kaWNhdG9ycyA9IFtdLnNsaWNlLmNhbGwodGhpcy5faW5kaWNhdG9yc0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTRUxFQ1RPUl9BQ1RJVkUpKTtcbiAgICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKGluZGljYXRvcnMpLnJlbW92ZUNsYXNzKENMQVNTX05BTUVfQUNUSVZFKTtcblxuICAgICAgICB2YXIgbmV4dEluZGljYXRvciA9IHRoaXMuX2luZGljYXRvcnNFbGVtZW50LmNoaWxkcmVuW3RoaXMuX2dldEl0ZW1JbmRleChlbGVtZW50KV07XG5cbiAgICAgICAgaWYgKG5leHRJbmRpY2F0b3IpIHtcbiAgICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10obmV4dEluZGljYXRvcikuYWRkQ2xhc3MoQ0xBU1NfTkFNRV9BQ1RJVkUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5fdXBkYXRlSW50ZXJ2YWwgPSBmdW5jdGlvbiBfdXBkYXRlSW50ZXJ2YWwoKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHRoaXMuX2FjdGl2ZUVsZW1lbnQgfHwgdGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNFTEVDVE9SX0FDVElWRV9JVEVNKTtcblxuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGVsZW1lbnRJbnRlcnZhbCA9IHBhcnNlSW50KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWludGVydmFsJyksIDEwKTtcblxuICAgICAgaWYgKGVsZW1lbnRJbnRlcnZhbCkge1xuICAgICAgICB0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsID0gdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbCB8fCB0aGlzLl9jb25maWcuaW50ZXJ2YWw7XG4gICAgICAgIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCA9IGVsZW1lbnRJbnRlcnZhbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCA9IHRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmludGVydmFsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX3NsaWRlID0gZnVuY3Rpb24gX3NsaWRlKGRpcmVjdGlvbiwgZWxlbWVudCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBhY3RpdmVFbGVtZW50ID0gdGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNFTEVDVE9SX0FDVElWRV9JVEVNKTtcblxuICAgICAgdmFyIGFjdGl2ZUVsZW1lbnRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChhY3RpdmVFbGVtZW50KTtcblxuICAgICAgdmFyIG5leHRFbGVtZW50ID0gZWxlbWVudCB8fCBhY3RpdmVFbGVtZW50ICYmIHRoaXMuX2dldEl0ZW1CeURpcmVjdGlvbihkaXJlY3Rpb24sIGFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICB2Y
2XIgbmV4dEVsZW1lbnRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChuZXh0RWxlbWVudCk7XG5cbiAgICAgIHZhciBpc0N5Y2xpbmcgPSBCb29sZWFuKHRoaXMuX2ludGVydmFsKTtcbiAgICAgIHZhciBkaXJlY3Rpb25hbENsYXNzTmFtZTtcbiAgICAgIHZhciBvcmRlckNsYXNzTmFtZTtcbiAgICAgIHZhciBldmVudERpcmVjdGlvbk5hbWU7XG5cbiAgICAgIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9ORVhUKSB7XG4gICAgICAgIGRpcmVjdGlvbmFsQ2xhc3NOYW1lID0gQ0xBU1NfTkFNRV9MRUZUO1xuICAgICAgICBvcmRlckNsYXNzTmFtZSA9IENMQVNTX05BTUVfTkVYVDtcbiAgICAgICAgZXZlbnREaXJlY3Rpb25OYW1lID0gRElSRUNUSU9OX0xFRlQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IENMQVNTX05BTUVfUklHSFQ7XG4gICAgICAgIG9yZGVyQ2xhc3NOYW1lID0gQ0xBU1NfTkFNRV9QUkVWO1xuICAgICAgICBldmVudERpcmVjdGlvbk5hbWUgPSBESVJFQ1RJT05fUklHSFQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0RWxlbWVudCAmJiAkX19kZWZhdWx0WydkZWZhdWx0J10obmV4dEVsZW1lbnQpLmhhc0NsYXNzKENMQVNTX05BTUVfQUNUSVZFKSkge1xuICAgICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2xpZGVFdmVudCA9IHRoaXMuX3RyaWdnZXJTbGlkZUV2ZW50KG5leHRFbGVtZW50LCBldmVudERpcmVjdGlvbk5hbWUpO1xuXG4gICAgICBpZiAoc2xpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghYWN0aXZlRWxlbWVudCB8fCAhbmV4dEVsZW1lbnQpIHtcbiAgICAgICAgLy8gU29tZSB3ZWlyZG5lc3MgaXMgaGFwcGVuaW5nLCBzbyB3ZSBiYWlsXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNTbGlkaW5nID0gdHJ1ZTtcblxuICAgICAgaWYgKGlzQ3ljbGluZykge1xuICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQobmV4dEVsZW1lbnQpO1xuXG4gICAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgICB2Y
2XIgc2xpZEV2ZW50ID0gJF9fZGVmYXVsdFsnZGVmYXVsdCddLkV2ZW50KEVWRU5UX1NMSUQsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogbmV4dEVsZW1lbnQsXG4gICAgICAgIGRpcmVjdGlvbjogZXZlbnREaXJlY3Rpb25OYW1lLFxuICAgICAgICBmcm9tOiBhY3RpdmVFbGVtZW50SW5kZXgsXG4gICAgICAgIHRvOiBuZXh0RWxlbWVudEluZGV4XG4gICAgICB9KTtcblxuICAgICAgaWYgKCRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDTEFTU19OQU1FX1NMSURFKSkge1xuICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10obmV4dEVsZW1lbnQpLmFkZENsYXNzKG9yZGVyQ2xhc3NOYW1lKTtcbiAgICAgICAgVXRpbF9fZGVmYXVsdFsnZGVmYXVsdCddLnJlZmxvdyhuZXh0RWxlbWVudCk7XG4gICAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShhY3RpdmVFbGVtZW50KS5hZGRDbGFzcyhkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShuZXh0RWxlbWVudCkuYWRkQ2xhc3MoZGlyZWN0aW9uYWxDbGFzc05hbWUpO1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbF9fZGVmYXVsdFsnZGVmYXVsdCddLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGFjdGl2ZUVsZW1lbnQpO1xuICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10oYWN0aXZlRWxlbWVudCkub25lKFV0aWxfX2RlZmF1bHRbJ2RlZmF1bHQnXS5UUkFOU0lUSU9OX0VORCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShuZXh0RWxlbWVudCkucmVtb3ZlQ2xhc3MoZGlyZWN0aW9uYWxDbGFzc05hbWUgKyBcIiBcIiArIG9yZGVyQ2xhc3NOYW1lKS5hZGRDbGFzcyhDTEFTU19OQU1FX0FDVElWRSk7XG4gICAgICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENMQVNTX05BTUVfQUNUSVZF
2ICsgXCIgXCIgKyBvcmRlckNsYXNzTmFtZSArIFwiIFwiICsgZGlyZWN0aW9uYWxDbGFzc05hbWUpO1xuICAgICAgICAgIF90aGlzNC5faXNTbGlkaW5nID0gZmFsc2U7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJF9fZGVmYXVsdFsnZGVmYXVsdCddKF90aGlzNC5fZWxlbWVudCkudHJpZ2dlcihzbGlkRXZlbnQpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENMQVNTX05BTUVfQUNUSVZFKTtcbiAgICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKG5leHRFbGVtZW50KS5hZGRDbGFzcyhDTEFTU19OQU1FX0FDVElWRSk7XG4gICAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10odGhpcy5fZWxlbWVudCkudHJpZ2dlcihzbGlkRXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNDeWNsaW5nKSB7XG4gICAgICAgIHRoaXMuY3ljbGUoKTtcbiAgICAgIH1cbiAgICB9IC8vIFN0YXRpY1xuICAgIDtcblxuICAgIENhcm91c2VsLl9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYXRhID0gJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMpLmRhdGEoREFUQV9LRVkpO1xuXG4gICAgICAgIHZhciBfY29uZmlnID0gX2V4dGVuZHMoe30sIERlZmF1bHQsICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzKS5kYXRhKCkpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIF9jb25maWcgPSBfZXh0ZW5kcyh7fSwgX2NvbmZpZywgY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhY3Rpb24gPSB0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyA/IGNvbmZpZyA6IF9jb25maWcuc2xpZGU7XG5cbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IG5ldyBDYXJvdXNlbCh0aGlzLCBfY29uZmlnKTtcbiAgICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10odGhpcykuZGF0YShEQVRBX0tFWSwgZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBkYXRhLnRvKGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbYWN0aW9uXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyBtZXRob2QgbmFtZWQgXFxcIlwiICsgYWN0aW9uICsgXCJcXFwiXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbYWN0aW9uXSgpO1xuICAgICAgICB9IGVsc2UgaWYgKF9jb25maWcuaW50ZXJ2YWwgJiYgX2NvbmZpZy5yaWRlKSB7XG4gICAgICAgICAgZGF0YS5wYXVzZSgpO1xuICAgICAgICAgIGRhdGEuY3ljbGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIENhcm91c2VsLl9kYXRhQXBpQ2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gX2RhdGFBcGlDbGlja0hhbmRsZXIoZXZlbnQpIHtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWxfX2RlZmF1bHRbJ2RlZmF1bHQnXS5nZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMpO1xuXG4gICAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHRhcmdldCA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShzZWxlY3RvcilbMF07XG5cbiAgICAgIGlmICghdGFyZ2V0IHx8ICEkX19kZWZhdWx0WydkZWZhdWx0J10odGFyZ2V0KS5oYXNDbGFzcyhDTEFTU19OQU1FX0NBUk9VU0VMKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjb25maWcgPSBfZXh0ZW5kcyh7fSwgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRhcmdldCkuZGF0YSgpLCAkX19kZWZhdWx0WydkZWZhdWx0J10odGhpcykuZGF0YSgpKTtcblxuICAgICAgdmFyIHNsaWRlSW5kZXggPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1zbGlkZS10bycpO1xuXG4gICAgICBpZiAoc2xpZGVJbmRleCkge1xuICAgICAgICBjb25maWcuaW50ZXJ2YWwgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgQ2Fyb3VzZWwuX2pRdWVyeUludGVyZmFjZS5jYWxsKCRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0YXJnZXQpLCBjb25maWcpO1xuXG4gICAgICBpZiAoc2xpZGVJbmRleCkge1xuICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10odGFyZ2V0KS5kYXRhKERBVEFfS0VZKS50byhzbGlkZUluZGV4KTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuXG4gICAgX2NyZWF0ZUNsYXNzKENhcm91c2VsLCBudWxsLCBbe1xuICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gVkVSU0lPTjtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6IFwiRGVmYXVsdFwiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBEZWZhdWx0O1xuICAgICAgfVxuICAgIH1dKTtcblxuICAgIHJldHVybiBDYXJvdXNlbDtcbiAgfSgpO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShkb2N1bWVudCkub24oRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfU0xJREUsIENhcm91c2VsLl9kYXRhQXBpQ2xpY2tIYW5kbGVyKTtcbiAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHdpbmRvdykub24oRVZFTlRfTE9BRF9EQVRBX0FQSSwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBjYXJvdXNlbHMgPSBbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoU0VMRUNUT1JfREFUQV9SSURFKSk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY2Fyb3VzZWxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2Y
2XIgJGNhcm91c2VsID0gJF9fZGVmYXVsdFsnZGVmYXVsdCddKGNhcm91c2Vsc1tpXSk7XG5cbiAgICAgIENhcm91c2VsLl9qUXVlcnlJbnRlcmZhY2UuY2FsbCgkY2Fyb3VzZWwsICRjYXJvdXNlbC5kYXRhKCkpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogalF1ZXJ5XG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICAkX19kZWZhdWx0WydkZWZhdWx0J10uZm5bTkFNRV0gPSBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlO1xuICAkX19kZWZhdWx0WydkZWZhdWx0J10uZm5bTkFNRV0uQ29uc3RydWN0b3IgPSBDYXJvdXNlbDtcblxuICAkX19kZWZhdWx0WydkZWZhdWx0J10uZm5bTkFNRV0ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkX19kZWZhdWx0WydkZWZhdWx0J10uZm5bTkFNRV0gPSBKUVVFUllfTk9fQ09ORkxJQ1Q7XG4gICAgcmV0dXJuIENhcm91c2VsLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgcmV0dXJuIENhcm91c2VsO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2Fyb3VzZWwuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgdGFiLmpzIHY0LjYuMCAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDIxIFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JyksIHJlcXVpcmUoJy4vdXRpbC5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2pxdWVyeScsICcuL3V0aWwnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuVGFiID0gZmFjdG9yeShnbG9iYWwualF1ZXJ5LCBnbG9iYWwuVXRpbCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCQsIFV0aWwpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIGZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdExlZ2FjeSAoZSkgeyByZXR1cm4gZSAmJiB0eXBlb2YgZSA9PT0gJ29iamVjdCcgJiYgJ2RlZmF1bHQnIGluIGUgPyBlIDogeyAnZGVmYXVsdCc6IGUgfTsgfVxuXG4gIHZhciAkX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeSgkKTtcbiAgdmFyIFV0aWxfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KFV0aWwpO1xuXG4gIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2Y
2XIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQ29uc3RhbnRzXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICB2YXIgTkFNRSA9ICd0YWInO1xuICB2YXIgVkVSU0lPTiA9ICc0LjYuMCc7XG4gIHZhciBEQVRBX0tFWSA9ICdicy50YWInO1xuICB2YXIgRVZFTlRfS0VZID0gXCIuXCIgKyBEQVRBX0tFWTtcbiAgdmFyIERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuICB2YXIgSlFVRVJZX05PX0NPTkZMSUNUID0gJF9fZGVmYXVsdFsnZGVmYXVsdCddLmZuW05BTUVdO1xuICB2YXIgRVZFTlRfSElERSA9IFwiaGlkZVwiICsgRVZFTlRfS0VZO1xuICB2YXIgRVZFTlRfSElEREVOID0gXCJoaWRkZW5cIiArIEVWRU5UX0tFWTtcbiAgdmFyIEVWRU5UX1NIT1cgPSBcInNob3dcIiArIEVWRU5UX0tFWTtcbiAgdmFyIEVWRU5UX1NIT1dOID0gXCJzaG93blwiICsgRVZFTlRfS0VZO1xuICB2YXIgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBcImNsaWNrXCIgKyBFVkVOVF9LRVkgKyBEQVRBX0FQSV9LRVk7XG4gIHZhciBDTEFTU19OQU1FX0RST1BET1dOX01FTlUgPSAnZHJvcGRvd24tbWVudSc7XG4gIHZhciBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnO1xuICB2YXIgQ0xBU1NfTkFNRV9ESVNBQkxFRCA9ICdkaXNhYmxlZCc7XG4gIHZhciBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSc7XG4gIHZhciBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdyc7XG4gIHZhciBTRUxFQ1RPUl9EUk9QRE9XTiA9ICcuZHJvcGRvd24nO1xuICB2YXIgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVAgPSAnLm5hdiwgLmxpc3QtZ3JvdXAnO1xuICB2YXIgU0VMRUNUT1JfQUNUSVZFID0gJy5hY3RpdmUnO1xuICB2YXIgU0VMRUNUT1JfQUNUSVZFX1VMID0gJz4gbGkgPiAuYWN0aXZlJztcbiAgdmFyIFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLXRvZ2dsZT1cInRhYlwiXSwgW2RhdGEtdG9nZ2xlPVwicGlsbFwiXSwgW2RhdGEtdG9nZ2xlPVwibGlzdFwiXSc7XG4gIHZhciBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSAnLmRyb3Bkb3duLXRvZ2dsZSc7XG4gIHZhciBTRUxFQ1RPUl9EUk9QRE9XTl9BQ1RJVkVfQ0hJTEQgPSAnPiAuZHJvcGRvd24tbWVudSAuYWN0aXZlJztcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBDbGFzcyBEZWZpbml0aW9uXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICB2YXIgVGFiID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUYWIoZWxlbWVudCkge1xuICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfSAvLyBHZXR0ZXJzXG5cblxuICAgIHZhciBfcHJvdG8gPSBUYWIucHJvdG90eXBlO1xuXG4gICAgLy8gUHVibGljXG4gICAgX3Byb3RvLnNob3cgPSBmdW5jdGlvbiBzaG93KCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSAmJiB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhDTEFTU19OQU1FX0FDVElWRSkgfHwgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENMQVNTX05BTUVfRElTQUJMRUQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHRhcmdldDtcbiAgICAgIHZhciBwcmV2aW91cztcbiAgICAgIHZhciBsaXN0RWxlbWVudCA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS5jbG9zZXN0KFNFTEVDVE9SX05BVl9MSVNUX0dST1VQKVswXTtcbiAgICAgIHZhciBzZWxlY3RvciA9IFV0aWxfX2RlZmF1bHRbJ2RlZmF1bHQnXS5nZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO1xuXG4gICAgICBpZiAobGlzdEVsZW1lbnQpIHtcbiAgICAgICAgdmFyIGl0ZW1TZWxlY3RvciA9IGxpc3RFbGVtZW50Lm5vZGVOYW1lID09PSAnVUwnIHx8IGxpc3RFbGVtZW50Lm5vZGVOYW1lID09PSAnT0wnID8gU0VMRUNUT1JfQUNUSVZFX1VMIDogU0VMRUNUT1JfQUNUSVZFO1xuICAgICAgICBwcmV2aW91cyA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXS5tYWtlQXJyYXkoJF9fZGVmYXVsdFsnZGVmYXVsdCddKGxpc3RFbGVtZW50KS5maW5kKGl0ZW1TZWxlY3RvcikpO1xuICAgICAgICBwcmV2aW91cyA9IHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdO1xuICAgICAgfVxuXG4gICAgICB2Y
2XIgaGlkZUV2ZW50ID0gJF9fZGVmYXVsdFsnZGVmYXVsdCddLkV2ZW50KEVWRU5UX0hJREUsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgICAgfSk7XG4gICAgICB2YXIgc2hvd0V2ZW50ID0gJF9fZGVmYXVsdFsnZGVmYXVsdCddLkV2ZW50KEVWRU5UX1NIT1csIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogcHJldmlvdXNcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKHByZXZpb3VzKS50cmlnZ2VyKGhpZGVFdmVudCk7XG4gICAgICB9XG5cbiAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHNob3dFdmVudCk7XG5cbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgfHwgaGlkZUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgIHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9hY3RpdmF0ZSh0aGlzLl9lbGVtZW50LCBsaXN0RWxlbWVudCk7XG5cbiAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICB2YXIgaGlkZGVuRXZlbnQgPSAkX19kZWZhdWx0WydkZWZhdWx0J10uRXZlbnQoRVZFTlRfSElEREVOLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogX3RoaXMuX2VsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBzaG93bkV2ZW50ID0gJF9fZGVmYXVsdFsnZGVmYXVsdCddLkV2ZW50KEVWRU5UX1NIT1dOLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldDogcHJldmlvdXNcbiAgICAgICAgfSk7XG4gICAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShwcmV2aW91cykudHJpZ2dlcihoaWRkZW5FdmVudCk7XG4gICAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShfdGhpcy5fZWxlbWVudCkudHJpZ2dlcihzaG93bkV2ZW50KTtcbiAgICAgIH07XG5cbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGUodGFyZ2V0LCB0YXJnZXQucGFyZW50Tm9kZSwgY29tcGxldGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLmRpc3Bvc2UgPSBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgICAgJF9fZGVmYXVsdFsnZGVmYXVsdCddLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkpO1xuICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gICAgfSAvLyBQcml2YXRlXG4gICAgO1xuXG4gICAgX3Byb3RvLl9hY3RpdmF0ZSA9IGZ1bmN0aW9uIF9hY3RpdmF0ZShlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gICAgICB2Y
2XIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIGFjdGl2ZUVsZW1lbnRzID0gY29udGFpbmVyICYmIChjb250YWluZXIubm9kZU5hbWUgPT09ICdVTCcgfHwgY29udGFpbmVyLm5vZGVOYW1lID09PSAnT0wnKSA/ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShjb250YWluZXIpLmZpbmQoU0VMRUNUT1JfQUNUSVZFX1VMKSA6ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShjb250YWluZXIpLmNoaWxkcmVuKFNFTEVDVE9SX0FDVElWRSk7XG4gICAgICB2YXIgYWN0aXZlID0gYWN0aXZlRWxlbWVudHNbMF07XG4gICAgICB2YXIgaXNUcmFuc2l0aW9uaW5nID0gY2FsbGJhY2sgJiYgYWN0aXZlICYmICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShhY3RpdmUpLmhhc0NsYXNzKENMQVNTX05BTUVfRkFERSk7XG5cbiAgICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uIGNvbXBsZXRlKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLl90cmFuc2l0aW9uQ29tcGxldGUoZWxlbWVudCwgYWN0aXZlLCBjYWxsYmFjayk7XG4gICAgICB9O1xuXG4gICAgICBpZiAoYWN0aXZlICYmIGlzVHJhbnNpdGlvbmluZykge1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkR1cmF0aW9uID0gVXRpbF9fZGVmYXVsdFsnZGVmYXVsdCddLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGFjdGl2ZSk7XG4gICAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShhY3RpdmUpLnJlbW92ZUNsYXNzKENMQVNTX05BTUVfU0hPVykub25lKFV0aWxfX2RlZmF1bHRbJ2RlZmF1bHQnXS5UUkFOU0lUSU9OX0VORCwgY29tcGxldGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8uX3RyYW5zaXRpb25Db21wbGV0ZSA9IGZ1bmN0aW9uIF90cmFuc2l0aW9uQ29tcGxldGUoZWxlbWVudCwgYWN0aXZlLCBjYWxsYmFjaykge1xuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10oYWN0aXZlKS5yZW1vdmVDbGFzcyhDTEFTU19OQU1FX0FDVElWRSk7XG4gICAgICAgIHZhciBkcm9wZG93bkNoaWxkID0gJF9fZGVmYXVsdFsnZGVmYXVsdCddKGFjdGl2ZS5wYXJlbnROb2RlKS5maW5kKFNFTEVDVE9SX0RST1BET1dOX0FDVElWRV9DSElMRClbMF07XG5cbiAgICAgICAgaWYgKGRyb3Bkb3duQ2hpbGQpIHtcbiAgICAgICAgICAkX19kZWZhdWx0WydkZWZhdWx0J10oZHJvcGRvd25DaGlsZCkucmVtb3ZlQ2xhc3MoQ0xBU1NfTkFNRV9BQ1RJVkUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2ZS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3RhYicpIHtcbiAgICAgICAgICBhY3RpdmUuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShlbGVtZW50KS5hZGRDbGFzcyhDTEFTU19OQU1FX0FDVElWRSk7XG5cbiAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgncm9sZScpID09PSAndGFiJykge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICBVdGlsX19kZWZhdWx0WydkZWZhdWx0J10ucmVmbG93KGVsZW1lbnQpO1xuXG4gICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKSkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZW1lbnQucGFyZW50Tm9kZSAmJiAkX19kZWZhdWx0WydkZWZhdWx0J10oZWxlbWVudC5wYXJlbnROb2RlKS5oYXNDbGFzcyhDTEFTU19OQU1FX0RST1BET1dOX01FTlUpKSB7XG4gICAgICAgIHZhciBkcm9wZG93bkVsZW1lbnQgPSAkX19kZWZhdWx0WydkZWZhdWx0J10oZWxlbWVudCkuY2xvc2VzdChTRUxFQ1RPUl9EUk9QRE9XTilbMF07XG5cbiAgICAgICAgaWYgKGRyb3Bkb3duRWxlbWVudCkge1xuICAgICAgICAgIHZhciBkcm9wZG93blRvZ2dsZUxpc3QgPSBbXS5zbGljZS5jYWxsKGRyb3Bkb3duRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSkpO1xuICAgICAgICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXShkcm9wZG93blRvZ2dsZUxpc3QpLmFkZENsYXNzKENMQVNTX05BTUVfQUNUSVZFKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH0gLy8gU3RhdGljXG4gICAgO1xuXG4gICAgVGFiLl9qUXVlcnlJbnRlcmZhY2UgPSBmdW5jdGlvbiBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciAkdGhpcyA9ICRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzKTtcbiAgICAgICAgdmFyIGRhdGEgPSAkdGhpcy5kYXRhKERBVEFfS0VZKTtcblxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0gbmV3IFRhYih0aGlzKTtcbiAgICAgICAgICAkdGhpcy5kYXRhKERBVEFfS0VZLCBkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIG1ldGhvZCBuYW1lZCBcXFwiXCIgKyBjb25maWcgKyBcIlxcXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoVGFiLCBudWxsLCBbe1xuICAgICAga2V5OiBcIlZFUlNJT05cIixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gVkVSU0lPTjtcbiAgICAgIH1cbiAgICB9XSk7XG5cbiAgICByZXR1cm4gVGFiO1xuICB9KCk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgJF9fZGVmYXVsdFsnZGVmYXVsdCddKGRvY3VtZW50KS5vbihFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbn
2REZWZhdWx0KCk7XG5cbiAgICBUYWIuX2pRdWVyeUludGVyZmFjZS5jYWxsKCRfX2RlZmF1bHRbJ2RlZmF1bHQnXSh0aGlzKSwgJ3Nob3cnKTtcbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogalF1ZXJ5XG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICAkX19kZWZhdWx0WydkZWZhdWx0J10uZm5bTkFNRV0gPSBUYWIuX2pRdWVyeUludGVyZmFjZTtcbiAgJF9fZGVmYXVsdFsnZGVmYXVsdCddLmZuW05BTUVdLkNvbnN0cnVjdG9yID0gVGFiO1xuXG4gICRfX2RlZmF1bHRbJ2RlZmF1bHQnXS5mbltOQU1FXS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICRfX2RlZmF1bHRbJ2RlZmF1bHQnXS5mbltOQU1FXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICByZXR1cm4gVGFiLl9qUXVlcnlJbnRlcmZhY2U7XG4gIH07XG5cbiAgcmV0dXJuIFRhYjtcblxufSkpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRhYi5qcy5tYXBcbiJdfQ==

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.