mirror of
https://github.com/gosticks/PiPer.git
synced 2025-10-16 11:55:42 +00:00
36 lines
130 KiB
JavaScript
36 lines
130 KiB
JavaScript
var a;a||(a=!0,(()=>{'use strict';const d=console.error.bind(console,"[PiPer] ");let f=null;function g(){const a=new XMLHttpRequest;a.open("GET",chrome.runtime.getURL("scripts/fix.js"));a.onload=function(){const b=document.createElement("script");b.setAttribute("type","module");b.appendChild(document.createTextNode(a.responseText));document.head.appendChild(b)};a.send()};const l=[];function m(a){n(a)?(a=document.createElement("script"),a.textContent="document.exitPictureInPicture()",document.head.appendChild(a),a.remove()):(a.removeAttribute("disablepictureinpicture"),a.requestPictureInPicture())}function p(a){-1==l.indexOf(a)&&l.push(a)}function r(a){var b=f.a(!0);if(a==b){b=n(a);var c=l.slice();for(let e;e=c.pop();)e(a,b)}}function n(a){return a.hasAttribute("data-playing-picture-in-picture")}
|
|
function t(a){const b=a.target;b.setAttribute("data-playing-picture-in-picture",!0);r(b);b.addEventListener("leavepictureinpicture",function(){b.removeAttribute("data-playing-picture-in-picture");r(b)},{once:!0})};const u={"button-title":{en:"Open Picture in Picture mode",de:"Bild-in-Bild starten",nl:"Beeld in beeld starten",fr:"D\u00e9marrer Image dans l\u2019image"}};function v(){var a=navigator.language.substring(0,2);const b=u["button-title"];if(b&&(a=b[a]||b.en))return a;d("No localized string found for key 'button-title'");return""};let w=null;
|
|
function x(a){if(!w){w=document.createElement(f.i||"button");w.id="PiPer_button";w.title=v();var b=f.f;b&&(w.style.cssText=b);if(b=f.g)w.className=b;const e=document.createElement("img");e.style.width=e.style.height="100%";if(b=f.h)e.style.transform=`scale(${b})`;w.appendChild(e);b=f.s;var c=f.o;b||(b="default",c="default-exit");const k=chrome.runtime.getURL(`images/${b}.svg`);e.src=k;if(c){const h=chrome.runtime.getURL(`images/${c}.svg`);p(function(q,C){e.src=C?h:k})}if(b=f.j)c=document.createElement("style"),c.appendChild(document.createTextNode(`#${"PiPer_button"}:hover{${b}}`)),
|
|
w.appendChild(c);w.addEventListener("click",function(h){h.preventDefault();(h=f.a(!0))?m(h):d("Unable to find video")})}a.insertBefore(w,f.c?f.c(a):null)};function y(a){let b=document;for(const c of a)if(b=(b=b.querySelector(c))&&b.shadowRoot,!b)return null;return b};function z(){function a(e){let k=null;return function(h){const q=k?document.getElementById(k):null;if(q&&!h)return q;if(h=e())h.id||(h.id="PiPer_"+b++),k=h.id;return h}}let b=0;const c=f;c.b=a(c.b);c.a=a(c.a);c.m&&(c.m=a(c.m))};const A={"9now":{g:"vjs-control vjs-button",j:"filter:brightness(50%) sepia(1) hue-rotate(167deg) saturate(253%) brightness(104%)",c:function(a){return a.querySelector(".vjs-fullscreen-control")},b:function(){return document.querySelector(".vjs-control-bar")},h:.7,f:"order:999999;cursor:pointer;height:44px;width:40px",m:function(){const a=f.a();return a&&a.parentElement.querySelector(".vjs-text-track-display")},a:function(){return document.querySelector("video.vjs-tech")}},aktualne:{g:"jw-icon jw-icon-inline jw-button-color jw-reset jw-icon-logo",
|
|
i:"div",j:"filter:brightness(50%) sepia(1) hue-rotate(311deg) saturate(550%) brightness(49%)!important",c:function(a){return a.lastChild},b:function(){return document.querySelector(".jw-controlbar-right-group")},f:"width:38px;filter:brightness(80%)",a:function(){return document.querySelector("video.jw-video")}},amazon:{j:"opacity:1!important",c:function(a){return a.querySelector(".fullscreenButtonWrapper")},b:function(){const a=document.getElementById("dv-web-player");return a&&a.querySelector(".hideableTopButtons")},
|
|
f:"position:relative;left:8px;width:3vw;height:2vw;min-width:35px;min-height:24px;border:0;padding:0;background-color:transparent;opacity:.8",m:function(){const a=document.getElementById("dv-web-player");return a&&a.querySelector(".captions")},a:function(){const a=document.querySelector(".rendererContainer");return a&&a.querySelector('video[width="100%"]')}},apple:{g:"footer__control hydrated",i:"div",j:"opacity:.8!important",c:function(a){return a.lastChild},b:function(){var a=y(["apple-tv-plus-player",
|
|
"amp-video-player-internal"]);if(a&&(a=a.querySelector("amp-playback-controls-full-screen")))return a.parentElement},f:"transition:opacity .15s;cursor:pointer;opacity:.9",a:function(){const a=y(["apple-tv-plus-player","amp-video-player-internal","amp-video-player"]);if(a)return a.querySelector("video")}},bbc:{b:function(){return null},m:function(){return document.querySelector(".p_subtitlesContainer")},a:function(){return document.querySelector("#mediaContainer video[src]")}},ceskatelevize:{g:"videoButtonShell dontHideControls cursorPointer focusableBtn",
|
|
i:"div",j:"filter:brightness(50%) sepia(1) hue-rotate(170deg) saturate(250%) brightness(90%)",c:function(){return document.getElementById("fullScreenShell")},h:1.2,f:"width:18px;height:18px;display:inline-block",b:function(){return document.getElementById("videoButtons")},a:function(){return document.getElementById("video")}},crunchyroll:{g:"vjs-control vjs-button",j:"opacity:1!important",h:.6,f:"position:absolute;right:100px;opacity:.75;cursor:pointer",b:function(){return document.querySelector(".vjs-control-bar")},
|
|
a:function(){return document.getElementById("player_html5_api")}},curiositystream:{g:"vjs-control vjs-button",l:function(){},j:"opacity:1!important",c:function(a){return a.lastChild},b:function(){const a=document.getElementById("main-player");return a&&a.querySelector(".vjs-control-bar")},h:.7,f:"opacity:.8;cursor:pointer",a:function(){return document.getElementById("main-player_html5_api")}},dazn:{f:"\n width: 1.5rem;\n height: 1.5rem;\n color: white;\n background: transparent;\n position: relative;\n border: none;\n outline: none;\n border-radius: 0;\n cursor: pointer;\n -webkit-appearance: none;\n margin: 0.5rem;\n z-index: 1;\n ",
|
|
c:function(a){const b=document.querySelector('div[data-test-id^="PLAYER_LIVE_INDICATOR"]');return b?b:a.lastChild},b:function(){return document.querySelector('div[data-test-id^="PLAYER_BAR"]')},a:function(){return document.querySelector('div[data-test-id^="PLAYER_SOLUTION"] video')}},disneyplus:{g:"control-icon-btn",c:function(){return document.querySelector(".fullscreen-icon")},b:function(){return document.querySelector(".controls__right")},a:function(){return document.querySelector("video[src]")}},
|
|
espn:{g:"media-icon",l:function(){const a=w,b=a.title;a.title="";const c=document.createElement("div");c.className="control-tooltip";c.style.cssText="right:0;bottom:35px;transition:bottom .2s ease-out";c.textContent=b;a.appendChild(c);a.addEventListener("mouseover",function(){a.classList.add("displaying");c.style.bottom="75px"});a.addEventListener("mouseout",function(){a.classList.remove("displaying");c.style.bottom="35px"})},i:"div",c:function(a){return a.lastChild},b:function(){return document.querySelector(".controls-right-horizontal")},
|
|
h:.7,f:"width:44px;height:44px;order:4",m:function(){return document.querySelector(".text-track-display")},a:function(){return document.querySelector("video.js-video-content")}},eurosportplayer:{i:"div",j:"opacity:1!important",b:function(){return document.querySelector(".controls-bar-right-section")},h:.9,f:"height:100%;margin-right:15px;opacity:.8;cursor:pointer",a:function(){return document.querySelector(".video-player__screen")}},fubo:{i:"div",c:function(a){return a.lastChild},b:function(){return document.querySelector(".css-ja7yk7")},
|
|
h:1.25,f:"height:24px;width:25px;margin:8px 10px 12px;cursor:pointer",a:function(){return document.getElementById("bitmovinplayer-video-video")}},giantbomb:{g:"av-chrome-control",i:"div",c:function(a){return a.querySelector(".js-vid-pin-wrap").nextSibling},b:function(){return document.querySelector(".av-controls--right")},h:.7,f:"height:100%;width:30px;opacity:1;cursor:pointer",a:function(){return document.querySelector('video[id^="video_js-vid-player"]')}},hulu:{l:function(){const a=w,b=a.title;
|
|
a.title="";const c=document.createElement("div");c.className="button-tool-tips";c.style.cssText="white-space:nowrap;padding:0 5px;right:0";c.textContent=b.toUpperCase();a.appendChild(c);a.addEventListener("mouseover",function(){c.style.display="block"});a.addEventListener("mouseout",function(){c.style.display="none"})},i:"div",j:"opacity:1!important",c:function(){return document.querySelector(".controls__view-mode-button")},b:function(){return document.querySelector("#dash-player-container .controls__menus-right")},
|
|
f:"opacity:.7;cursor:pointer;width:24px",m:function(){return document.querySelector(".closed-caption-outband")},a:function(){return document.querySelector(".video-player")}},littlethings:{g:"jw-icon jw-icon-inline jw-button-color jw-reset jw-icon-logo",i:"div",c:function(a){return a.lastChild},b:function(){return document.querySelector(".jw-controlbar-right-group")},f:"width:38px",a:function(){return document.querySelector("video.jw-video")}},mashable:{g:"jw-icon jw-icon-inline jw-button-color jw-reset jw-icon-logo",
|
|
i:"div",c:function(a){return a.lastChild},b:function(){return document.querySelector(".jw-controlbar-right-group")},f:"top:-2px;width:38px",a:function(){return document.querySelector("video.jw-video")}},metacafe:{i:"div",c:function(a){return a.lastChild},b:function(){return document.querySelector("#player_place .tray")},h:.85,a:function(){return document.querySelector("#player_place video")}},mixer:{g:"control",i:"div",j:"background:rgba(255,255,255,.08)",c:function(a){return a.lastChild.previousSibling},
|
|
b:function(){return document.querySelector(".control-container .toolbar .right")},h:.65,f:"width:36px;height:36px;border-radius:50%;cursor:pointer",a:function(){return document.querySelector(".control-container + video")}},mlb:{h:.7,f:"border:0;background:0 0;filter:brightness(80%)",j:"filter:brightness(120%)!important",b:function(){return document.querySelector(".bottom-controls-right")},c:function(a){return a.lastChild},a:function(){return document.querySelector(".mlbtv-media-player video")}},netflix:{g:"touchable PlayerControls--control-element nfp-button-control default-control-button",
|
|
j:"transform:scale(1.2)",c:function(a){return a.lastChild},b:function(){return document.querySelector(".PlayerControlsNeo__button-control-row")},h:.7,f:"min-width:2.3em",m:function(){const a=f.a();return a&&a.parentElement.querySelector(".player-timedtext")},a:function(){return document.querySelector(".VideoContainer video")}},ocs:{g:"footer-elt fltr",c:function(a){return a.querySelector("#togglePlay")},b:function(){return document.querySelector(".footer-block:last-child")},h:1.2,f:"display:block;width:25px;height:18px;margin-right:10px;margin-bottom:-10px;padding:0;border:0;background-color:transparent",
|
|
a:function(){return document.getElementById("LgyVideoPlayer")}},openload:{g:"vjs-control vjs-button",c:function(a){return a.lastChild},b:function(){return document.querySelector(".vjs-control-bar")},h:.6,f:"left:5px;cursor:pointer",a:function(){return document.getElementById("olvideo_html5_api")}},panopto:{g:"media-icon",l:function(){const a=w,b=a.title;a.title="";const c=document.createElement("div");c.className="control-tooltip";c.style.cssText="right:0;bottom:35px;transition:bottom .2s ease-out";
|
|
c.textContent=b;a.appendChild(c);a.addEventListener("mouseover",function(){a.classList.add("displaying");c.style.bottom="75px"});a.addEventListener("mouseout",function(){a.classList.remove("displaying");c.style.bottom="35px"})},i:"div",c:function(a){return a.lastChild},b:function(){return document.querySelector("#transportControls")},h:.7,f:"width:44px;height:44px;order:4",a:function(){return document.querySelector("video#primaryVideo")}},pbs:{g:"jw-icon jw-icon-inline jw-button-color jw-reset",l:function(){document.querySelector(".jw-icon-fullscreen").addEventListener("click",
|
|
function(){const a=f.a();n(a)&&m(a)})},i:"div",j:"opacity:1!important",c:function(a){return a.lastChild},b:function(){return document.querySelector(".jw-button-container")},h:.6,f:"opacity:.8",a:function(){return document.querySelector(".jw-video")}},periscope:{g:"Pill Pill--withIcon",i:"span",j:"opacity:.8!important;filter:brightness(125%)!important",c:function(a){return a.querySelector(".ShareBroadcast").nextSibling},b:function(){return document.querySelector(".VideoOverlayRedesign-BottomBar-Right")},
|
|
h:.6,f:"opacity:.5;filter:brightness(200%)",a:function(){return document.querySelector(".Video video")}},plex:{l:function(){g()},j:"opacity:1!important",c:function(a){return a.lastChild},b:function(){const a=document.querySelector('div[class^="FullPlayerTopControls-topControls"]');return a&&a.lastChild},h:2,f:"position:relative;top:-3px;width:30px;padding:10px;border:0;background:0 0;opacity:.7;outline:0;text-shadow:0 0 4px rgba(0,0,0,.45)",m:function(){return document.querySelector(".libjass-subs")},
|
|
a:function(){return document.querySelector('video[class^="HTMLMedia-mediaElement"]')}},seznam:{g:"sznp-ui-widget-box",i:"div",j:"transform:scale(1.05)",c:function(a){return a.lastChild},b:function(){return document.querySelector(".sznp-ui-ctrl-panel-layout-wrapper")},h:.75,f:"cursor:pointer",a:function(){return document.querySelector(".sznp-ui-tech-video-wrapper video")}},streamable:{l:function(){const a=document.getElementById("player-progress"),b=window.getComputedStyle(a);w.style.right=b.right;
|
|
a.style.right=parseInt(b.right,10)+40+"px"},i:"div",j:"opacity:1!important",b:function(){return document.querySelector(".player-controls-right")},f:"position:absolute;bottom:10px;height:26px;width:26px;cursor:pointer;opacity:.9;filter:drop-shadow(rgba(0,0,0,.5) 0 0 2px)",a:function(){return document.getElementById("video-player-tag")}},ted:{g:"z-i:0 pos:r bottom:0 hover/bg:white.7 b-r:.1 p:1 cur:p",i:"div",c:function(a){return a.lastChild},b:function(){return document.querySelector('[aria-controls="video1"]').parentElement.parentElement},
|
|
l:function(){const a=w.querySelector("img");a.classList.add("w:2");a.classList.add("h:2")},a:function(){return document.querySelector('video[id^="ted-player-"]')}},theonion:{g:"jw-icon jw-icon-inline jw-button-color jw-reset jw-icon-logo",i:"div",c:function(a){return a.lastChild},b:function(){return document.querySelector(".jw-controlbar-right-group")},f:"top:-2px;left:10px;width:38px",a:function(){return document.querySelector("video.jw-video")}},twitch:{g:"tw-border-bottom-left-radius-medium tw-border-bottom-right-radius-medium tw-border-top-left-radius-medium tw-border-top-right-radius-medium tw-button-icon tw-button-icon--overlay tw-core-button tw-core-button--overlay tw-inline-flex tw-relative tw-tooltip-wrapper",
|
|
l:function(){var a=w;const b=a.title;a.title="";const c=document.createElement("div");c.className="tw-tooltip tw-tooltip--align-right tw-tooltip--up";c.appendChild(document.createTextNode(b));a.appendChild(c);(a=document.querySelector("[data-a-target='player-fullscreen-button']"))&&a.addEventListener("click",function(){const e=f.a();n(e)&&m(e)})},c:function(a){return a.lastChild},b:function(){return document.querySelector(".player-controls__right-control-group,.player-buttons-right")},h:.8,m:function(){return document.querySelector(".player-captions-container")},
|
|
a:function(){return document.querySelector("video[src]")}},udemy:{g:"btn",j:"opacity:1!important",c:function(){return document.querySelector('button[aria-label="Fullscreen"]')},b:function(){return document.querySelector('div[class^="control-bar--control-bar--"]')},h:.8,f:"width:3em;height:3em;padding:0;opacity:.8",m:function(){return document.querySelector('div[class^="captions-display--captions-container"]')},a:function(){return document.querySelector("video.vjs-tech")}},ustream:{g:"component shown",
|
|
i:"div",j:"opacity:1!important;filter:drop-shadow(0 0 5px rgba(255,255,255,.5))",c:function(a){return a.lastChild},h:.8,f:"opacity:.7",b:function(){return document.getElementById("controlPanelRight")},a:function(){return document.querySelector("#ViewerContainer video")}},vevo:{g:"player-control",c:function(a){return a.lastChild},b:function(){return document.querySelector("#control-bar .right-controls")},h:.7,f:"border:0;background:0 0",a:function(){return document.getElementById("html5-player")}},
|
|
vice:{g:"vp__controls__icon__popup__container",i:"div",c:function(a){return a.lastChild},b:function(){return document.querySelector(".vp__controls__icons")},h:.6,f:"top:-11px",a:function(){return document.querySelector("video.jw-video")}},vid:{c:function(a){return a.lastChild},b:function(){return document.querySelector(".vjs-control-bar")},h:.7,f:"position:relative;top:-2px;left:9px;padding:0;margin:0",a:function(){return document.getElementById("video_player_html5_api")}},vijf:{g:"vjs-control vjs-button",
|
|
l:function(){document.getElementsByClassName("vjs-fullscreen-control")[0].style.order=10},b:function(){return document.getElementsByClassName("vjs-control-bar")[0]},f:"text-indent:0!important;margin-left:10px;order:9",a:function(){return document.querySelector('video[preload="metadata"]')}},vk:{g:"videoplayer_btn",i:"div",c:function(){return document.querySelector("div.videoplayer_btn_fullscreen")},f:"width:24px;height:45px;padding:0 8px",b:function(){return document.querySelector("div.videoplayer_controls")},
|
|
a:function(){return document.querySelector("video.videoplayer_media_provider")}},vrt:{g:"vuplay-control",c:function(a){return a.lastChild},b:function(){return document.getElementsByClassName("vuplay-control-right")[0]},m:function(){return document.querySelector(".theoplayer-texttracks")},f:"width:30px;height:47px;padding:0;position:relative;top:-9px;right:8px",a:function(){return document.querySelector('video[preload="metadata"]')}},vrv:{g:"vjs-control vjs-button",l:function(){w.nextSibling.addEventListener("click",
|
|
function(){const a=f.a();n(a)&&m(a)});g()},j:"opacity:1!important",c:function(a){return a.lastChild},b:function(){return document.querySelector(".vjs-control-bar")},h:.6,f:"position:absolute;right:114px;width:50px;cursor:pointer;opacity:.6",m:function(){return document.querySelector(".libjass-subs")},a:function(){return document.getElementById("player_html5_api")}},yeloplay:{g:"button",l:function(){f.b().style.width="210px"},j:"opacity:1!important",c:function(){return document.getElementsByTagName("player-fullscreen-button")[0]},
|
|
b:function(){return document.getElementsByClassName("buttons")[0]},h:.8,f:"margin-left:10px;width:50px;cursor:pointer;opacity:.8;height:40px!important;margin-bottom:0!important",a:function(){return document.querySelector("video[src]")}},youtube:{g:"ytp-button",l:function(){const a=w,b=a.nextSibling,c=a.title,e=b.title;a.title="";a.addEventListener("mouseover",function(){b.title=c;b.dispatchEvent(new Event("mouseover"))});a.addEventListener("mouseout",function(){b.dispatchEvent(new Event("mouseout"));
|
|
b.title=e});g()},c:function(a){return a.lastChild},b:function(){return document.querySelector(".ytp-right-controls")},h:.68,m:function(){return document.querySelector(".caption-window")},a:function(){return document.querySelector("video.html5-main-video")}}};A.primevideo=A.amazon;A.oload=A.openload;A.pscp=A.periscope;A.stream=A.seznam;A.vier=A.vijf;A.zes=A.vijf;A.youtu=A.youtube;function B(){const a=f;var b=document.getElementsByTagName("video");for(let c=0,e;e=b[c];c++)e.addEventListener("enterpictureinpicture",t);!document.getElementById("PiPer_button")&&(b=a.b())&&(x(b),a.l&&a.l())}const D=32400==location.port?"plex":(location.hostname.match(/([^.]+)\.(?:com?\.)?[^.]+$/)||[])[1];D in A&&(f=A[D],z(),(new MutationObserver(B)).observe(document,{childList:!0,subtree:!0}),B());})());
|
|
//# sourceMappingURL=data:application/json;base64,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QUFWbkMsQ0FhWixDQVhBYixDQUFBLEVBV0EsQ0FKQSxDQURpQnFELElBQUlDLGdCQUFKRCxDQUFxQlIsQ0FBckJRLENBQ2pCLEVBQVNFLE9BQVQsQ0FBaUJ0SSxRQUFqQixDQUEyQixDQUN6QnVJLFVBQVcsQ0FBQSxDQURjLENBRXpCQyxRQUFTLENBQUEsQ0FGZ0IsQ0FBM0IsQ0FJQSxDQUFBWixDQUFBLEVBZkY7IiwKInNvdXJjZXMiOlsiLi9sb2dnZXIuanMiLCIuL2NvbW1vbi5qcyIsIi4vdmlkZW8uanMiLCIuL2xvY2FsaXphdGlvbi5qcyIsIi4vYnV0dG9uLmpzIiwiLi9yZXNvdXJjZXMvYXBwbGUuanMiLCIuL2NhY2hlLmpzIiwiLi9yZXNvdXJjZXMvaW5kZXguanMiLCIuL3Jlc291cmNlcy85bm93LmpzIiwiLi9yZXNvdXJjZXMvYWt0dWFsbmUuanMiLCIuL3Jlc291cmNlcy9hbWF6b24uanMiLCIuL3Jlc291cmNlcy9iYmMuanMiLCIuL3Jlc291cmNlcy9jZXNrYXRlbGV2aXplLmpzIiwiLi9yZXNvdXJjZXMvY3J1bmNoeXJvbGwuanMiLCIuL3Jlc291cmNlcy9jdXJpb3NpdHlzdHJlYW0uanMiLCIuL3Jlc291cmNlcy9kYXpuLmpzIiwiLi9yZXNvdXJjZXMvZGlzbmV5cGx1cy5qcyIsIi4vcmVzb3VyY2VzL2VzcG4uanMiLCIuL3Jlc291cmNlcy9ldXJvc3BvcnRwbGF5ZXIuanMiLCIuL3Jlc291cmNlcy9mdWJvdHYuanMiLCIuL3Jlc291cmNlcy9naWFudGJvbWIuanMiLCIuL3Jlc291cmNlcy9odWx1LmpzIiwiLi9yZXNvdXJjZXMvbGl0dGxldGhpbmdzLmpzIiwiLi9yZXNvdXJjZXMvbWFzaGFibGUuanMiLCIuL3Jlc291cmNlcy9tZXRhY2FmZS5qcyIsIi4vcmVzb3VyY2VzL21peGVyLmpzIiwiLi9yZXNvdXJjZXMvbWxiLmpzIiwiLi9yZXNvdXJjZXMvbmV0ZmxpeC5qcyIsIi4vcmVzb3VyY2VzL29jcy5qcyIsIi4vcmVzb3VyY2VzL29wZW5sb2FkLmpzIiwiLi9yZXNvdXJjZXMvcGFub3B0by5qcyIsIi4vcmVzb3VyY2VzL3Bicy5qcyIsIi4vcmVzb3VyY2VzL3BlcmlzY29wZS5qcyIsIi4vcmVzb3VyY2VzL3BsZXguanMiLCIuL3Jlc291cmNlcy9zZXpuYW0uanMiLCIuL3Jlc291cmNlcy9zdHJlYW1hYmxlLmpzIiwiLi9yZXNvdXJjZXMvdGVkLmpzIiwiLi9yZXNvdXJjZXMvdGhlb25pb24uanMiLCIuL3Jlc291cmNlcy90d2l0Y2guanMiLCIuL3Jlc291cmNlcy91ZGVteS5qcyIsIi4vcmVzb3VyY2VzL3VzdHJlYW0uanMiLCIuL3Jlc291cmNlcy92ZXZvLmpzIiwiLi9yZXNvdXJjZXMvdmljZS5qcyIsIi4vcmVzb3VyY2VzL3ZpZC5qcyIsIi4vcmVzb3VyY2VzL3ZpZXJ2aWpmemVzLmpzIiwiLi9yZXNvdXJjZXMvdmsuanMiLCIuL3Jlc291cmNlcy92cnQuanMiLCIuL3Jlc291cmNlcy92cnYuanMiLCIuL3Jlc291cmNlcy95ZWxvcGxheS5qcyIsIi4vcmVzb3VyY2VzL3lvdXR1YmUuanMiLCIuL21haW4uanMiXSwKInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExPR0dJTkdfTEVWRUwgfSBmcm9tICcuL2RlZmluZXMuanMnXG5cbmNvbnN0IGxvZ2dpbmdQcmVmaXggPSAnW1BpUGVyXSAnO1xuXG4vKiogQGVudW0ge251bWJlcn0gLSBFbnVtIGZvciBsb2dnaW5nIGxldmVsICovXG5leHBvcnQgY29uc3QgTG9nZ2luZ0xldmVsID0ge1xuICBBTEw6IDAsXG4gIFRSQUNFOiAxMCxcbiAgSU5GTzogMjAsXG4gIFdBUk5JTkc6IDMwLFxuICBFUlJPUjogNDAsXG59O1xuXG4vKipcbiAqIExvZ3Mgc3RhY2sgdHJhY2UgdG8gY29uc29sZVxuICovXG5leHBvcnQgY29uc3QgdHJhY2UgPSAoTG9nZ2luZ0xldmVsLlRSQUNFID49IExPR0dJTkdfTEVWRUwpID8gXG4gICAgY29uc29sZS50cmFjZS5iaW5kKGNvbnNvbGUpIDogZnVuY3Rpb24oKXt9O1xuXG4vKipcbiAqIExvZ3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlIHRvIGNvbnNvbGVcbiAqL1xuZXhwb3J0IGNvbnN0IGluZm8gPSAoTG9nZ2luZ0xldmVsLklORk8gPj0gTE9HR0lOR19MRVZFTCkgPyBcbiAgICBjb25zb2xlLmluZm8uYmluZChjb25zb2xlLCBsb2dnaW5nUHJlZml4KSA6IGZ1bmN0aW9uKCl7fTtcbiAgICBcbi8qKlxuICogTG9ncyB3YXJuaW5nIG1lc3NhZ2UgdG8gY29uc29sZVxuICovXG5leHBvcnQgY29uc3Qgd2FybiA9IChMb2dnaW5nTGV2ZWwuV0FSTklORyA+PSBMT0dHSU5HX0xFVkVMKSA/IFxuICAgIGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUsIGxvZ2dpbmdQcmVmaXgpIDogZnVuY3Rpb24oKXt9O1xuICAgIFxuLyoqXG4gKiBMb2dzIGVycm9yIG1lc3NhZ2UgdG8gY29uc29sZVxuICovXG5leHBvcnQgY29uc3QgZXJyb3IgPSAoTG9nZ2luZ0xldmVsLkVSUk9SID49IExPR0dJTkdfTEVWRUwpID8gXG4gICAgY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsIGxvZ2dpbmdQcmVmaXgpIDogZnVuY3Rpb24oKXt9O1xuIiwiaW1wb3J0IHsgQlJPV1NFUiB9IGZyb20gJy4vZGVmaW5lcy5qcydcbmltcG9ydCB7IHdhcm4gfSBmcm9tICcuL2xvZ2dlci5qcydcblxuLyoqIEBlbnVtIHtudW1iZXJ9IC0gRW51bSBmb3IgYnJvd3NlciAqL1xuZXhwb3J0IGNvbnN0IEJyb3dzZXIgPSB7XG4gIFVOS05PV046IDAsXG4gIFNBRkFSSTogMSxcbiAgQ0hST01FOiAyLFxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGN1cnJlbnQgd2ViIGJyb3dzZXJcbiAqXG4gKiBAcmV0dXJuIHtCcm93c2VyfSBcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJyb3dzZXIgPSBmdW5jdGlvbigpIHtcbiAgaWYgKEJST1dTRVIgIT0gQnJvd3Nlci5VTktOT1dOKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7QnJvd3Nlcn0gKi8gKEJST1dTRVIpO1xuICB9XG4gIGlmICgvU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmIC9BcHBsZS8udGVzdChuYXZpZ2F0b3IudmVuZG9yKSkge1xuICAgIHJldHVybiBCcm93c2VyLlNBRkFSSTtcbiAgfVxuICBpZiAoL0Nocm9tZS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvR29vZ2xlLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpKSB7XG4gICAgcmV0dXJuIEJyb3dzZXIuQ0hST01FO1xuICB9XG4gIHJldHVybiBCcm93c2VyLlVOS05PV047XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHt7XG4gKiAgIGJ1dHRvbkNsYXNzTmFtZTogKHN0cmluZ3x1bmRlZmluZWQpLFxuICogICBidXR0b25EaWRBcHBlYXI6IChmdW5jdGlvbigpOnVuZGVmaW5lZHx1bmRlZmluZWQpLFxuICogICBidXR0b25FbGVtZW50VHlwZTogKHN0cmluZ3x1bmRlZmluZWQpLFxuICogICBidXR0b25FeGl0SW1hZ2U6IChzdHJpbmd8dW5kZWZpbmVkKSxcbiAqICAgYnV0dG9uSG92ZXJTdHlsZTogKHN0cmluZ3x1bmRlZmluZWQpLFxuICogICBidXR0b25JbWFnZTogKHN0cmluZ3x1bmRlZmluZWQpLFxuICogICBidXR0b25JbnNlcnRCZWZvcmU6IChmdW5jdGlvbihFbGVtZW50KTo/Tm9kZXx1bmRlZmluZWQpLFxuICogICBidXR0b25QYXJlbnQ6IGZ1bmN0aW9uKGJvb2xlYW49KTo/RWxlbWVudCxcbiAqICAgYnV0dG9uU2NhbGU6IChudW1iZXJ8dW5kZWZpbmVkKSxcbiAqICAgYnV0dG9uU3R5bGU6IChzdHJpbmd8dW5kZWZpbmVkKSxcbiAqICAgY2FwdGlvbkVsZW1lbnQ6IChmdW5jdGlvbihib29sZWFuPSk6P0VsZW1lbnR8dW5kZWZpbmVkKSxcbiAqICAgdmlkZW9FbGVtZW50OiBmdW5jdGlvbihib29sZWFuPSk6P0VsZW1lbnQsXG4gKiB9fVxuICovXG5sZXQgUGlwZXJSZXNvdXJjZTtcblxubGV0IC8qKiA/UGlwZXJSZXNvdXJjZSAqLyBjdXJyZW50UmVzb3VyY2UgPSBudWxsO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnQgcmVzb3VyY2VcbiAqXG4gKiBAcmV0dXJuIHs/UGlwZXJSZXNvdXJjZX1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFJlc291cmNlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBjdXJyZW50UmVzb3VyY2U7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGN1cnJlbnQgcmVzb3VyY2VcbiAqXG4gKiBAcGFyYW0gez9QaXBlclJlc291cmNlfSByZXNvdXJjZSAtIGEgcmVzb3VyY2UgdG8gc2V0IGFzIGN1cnJlbnQgcmVzb3VyY2VcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFJlc291cmNlID0gZnVuY3Rpb24ocmVzb3VyY2UpIHtcbiAgY3VycmVudFJlc291cmNlID0gcmVzb3VyY2U7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgcmVsYXRpdmUgcGF0aCB3aXRoaW4gYW4gZXh0ZW5zaW9uIHRvIGEgZnVsbHktcXVhbGlmaWVkIFVSTFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gYSBwYXRoIHRvIGEgcmVzb3VyY2VcbiAqIEByZXR1cm4ge3N0cmluZ30gXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHRlbnNpb25VUkwgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHN3aXRjaCAoZ2V0QnJvd3NlcigpKSB7XG4gICAgY2FzZSBCcm93c2VyLlNBRkFSSTpcbiAgICAgIHJldHVybiBzYWZhcmkuZXh0ZW5zaW9uLmJhc2VVUkkgKyBwYXRoO1xuICAgIGNhc2UgQnJvd3Nlci5DSFJPTUU6XG4gICAgICByZXR1cm4gY2hyb21lLnJ1bnRpbWUuZ2V0VVJMKHBhdGgpO1xuICAgIGNhc2UgQnJvd3Nlci5VTktOT1dOOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGF0aDtcbiAgfVxufTtcblxuLyoqXG4gKiBBcHBsaWVzIGZpeCB0byBieXBhc3MgYmFja2dyb3VuZCBET00gdGltZXIgdGhyb3R0bGluZ1xuICovXG5leHBvcnQgY29uc3QgYnlwYXNzQmFja2dyb3VuZFRpbWVyVGhyb3R0bGluZyA9IGZ1bmN0aW9uKCkge1xuXG4gIC8vIElzc3VlIHdhcm5pbmcgZm9yIHVubmVjZXNzYXJ5IHVzZSBvZiBiYWNrZ3JvdW5kIHRpbWVyIHRocm90dGxpbmdcbiAgaWYgKCFjdXJyZW50UmVzb3VyY2UuY2FwdGlvbkVsZW1lbnQpIHtcbiAgICB3YXJuKCdVbm5lY2Vzc2FyeSBieXBhc3Npbmcgb2YgYmFja2dyb3VuZCB0aW1lciB0aHJvdHRsaW5nIG9uIHBhZ2Ugd2l0aG91dCBjYXB0aW9uIHN1cHBvcnQnKTtcbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgcmVxdWVzdC5vcGVuKCdHRVQnLCBnZXRFeHRlbnNpb25VUkwoJ3NjcmlwdHMvZml4LmpzJykpO1xuICByZXF1ZXN0Lm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnbW9kdWxlJyk7XG4gICAgc2NyaXB0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlcXVlc3QucmVzcG9uc2VUZXh0KSk7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICB9O1xuICByZXF1ZXN0LnNlbmQoKTtcbn07XG4iLCJpbXBvcnQgeyBpbmZvIH0gZnJvbSAnLi9sb2dnZXIuanMnXG5pbXBvcnQgeyBCcm93c2VyLCBnZXRCcm93c2VyLCBnZXRSZXNvdXJjZSB9IGZyb20gJy4vY29tbW9uLmpzJ1xuXG5jb25zdCBDSFJPTUVfUExBWUlOR19QSVBfQVRUUklCVVRFID0gJ2RhdGEtcGxheWluZy1waWN0dXJlLWluLXBpY3R1cmUnO1xuXG5jb25zdCAvKiogIUFycmF5PGZ1bmN0aW9uKEhUTUxWaWRlb0VsZW1lbnQsIGJvb2xlYW4pPiAqLyBldmVudExpc3RlbmVycyA9IFtdO1xuXG4vKipcbiAqIFRvZ2dsZXMgdmlkZW8gUGljdHVyZSBpbiBQaWN0dXJlXG4gKlxuICogQHBhcmFtIHtIVE1MVmlkZW9FbGVtZW50fSB2aWRlbyAtIHZpZGVvIGVsZW1lbnQgdG8gdG9nZ2xlIFBpY3R1cmUgaW4gUGljdHVyZSBtb2RlXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlID0gZnVuY3Rpb24odmlkZW8pIHtcbiAgY29uc3QgcGxheWluZ1BpY3R1cmVJblBpY3R1cmUgPSB2aWRlb1BsYXlpbmdQaWN0dXJlSW5QaWN0dXJlKHZpZGVvKTtcbiAgc3dpdGNoIChnZXRCcm93c2VyKCkpIHtcbiAgICBjYXNlIEJyb3dzZXIuU0FGQVJJOlxuICAgICAgaWYgKHBsYXlpbmdQaWN0dXJlSW5QaWN0dXJlKSB7XG4gICAgICBcdHZpZGVvLndlYmtpdFNldFByZXNlbnRhdGlvbk1vZGUoJ2lubGluZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlkZW8ud2Via2l0U2V0UHJlc2VudGF0aW9uTW9kZSgncGljdHVyZS1pbi1waWN0dXJlJyk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIEJyb3dzZXIuQ0hST01FOlxuICAgICAgaWYgKHBsYXlpbmdQaWN0dXJlSW5QaWN0dXJlKSB7XG4gICAgICAgIC8vIFdvcmthcm91bmQgQ2hyb21lIGNvbnRlbnQgc2NyaXB0cyBiZWluZyB1bmFibGUgdG8gY2FsbCAnZXhpdFBpY3R1cmVJblBpY3R1cmUnIGRpcmVjdGx5XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICBzY3JpcHQudGV4dENvbnRlbnQgPSAnZG9jdW1lbnQuZXhpdFBpY3R1cmVJblBpY3R1cmUoKSc7XG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgc2NyaXB0LnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yY2UgZW5hYmxlIFBpY3R1cmUgaW4gUGljdHVyZSBtb2RlIHN1cHBvcnRcbiAgICAgICAgdmlkZW8ucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlcGljdHVyZWlucGljdHVyZScpO1xuICAgICAgICBcbiAgICAgICAgdmlkZW8ucmVxdWVzdFBpY3R1cmVJblBpY3R1cmUoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQnJvd3Nlci5VTktOT1dOOlxuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxufTtcblxuLyoqXG4gKiBBZGRzIGEgUGljdHVyZSBpbiBQaWN0dXJlIGV2ZW50IGxpc3RlbmVyXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbihIVE1MVmlkZW9FbGVtZW50LCBib29sZWFuKX0gbGlzdGVuZXIgLSBhbiBldmVudCBsaXN0ZW5lciB0byBhZGRcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZFBpY3R1cmVJblBpY3R1cmVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgY29uc3QgaW5kZXggPSBldmVudExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgZXZlbnRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICBpZiAoZ2V0QnJvd3NlcigpID09IEJyb3dzZXIuU0FGQVJJKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0cHJlc2VudGF0aW9ubW9kZWNoYW5nZWQnLCB2aWRlb1ByZXNlbnRhdGlvbk1vZGVDaGFuZ2VkLCB7XG4gICAgICBjYXB0dXJlOiB0cnVlLFxuICAgIH0pO1xuICB9XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgYSBQaWN0dXJlIGluIFBpY3R1cmUgZXZlbnQgbGlzdGVuZXJcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKEhUTUxWaWRlb0VsZW1lbnQsYm9vbGVhbil9IGxpc3RlbmVyIC0gYW4gZXZlbnQgbGlzdGVuZXIgdG8gcmVtb3ZlXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVQaWN0dXJlSW5QaWN0dXJlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gIGNvbnN0IGluZGV4ID0gZXZlbnRMaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gIGlmIChpbmRleCA+IC0xKSB7XG4gICAgZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxuICBcbiAgaWYgKGdldEJyb3dzZXIoKSA9PSBCcm93c2VyLlNBRkFSSSAmJiBldmVudExpc3RlbmVycy5sZW5ndGggPT0gMCkge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmtpdHByZXNlbnRhdGlvbm1vZGVjaGFuZ2VkJywgdmlkZW9QcmVzZW50YXRpb25Nb2RlQ2hhbmdlZCk7ICAgIFxuICB9XG59O1xuXG4vKipcbiAqIERpc3BhdGNoZXMgYSBQaWN0dXJlIGluIFBpY3R1cmUgZXZlbnRcbiAqXG4gKiBAcGFyYW0ge0hUTUxWaWRlb0VsZW1lbnR9IHZpZGVvIC0gdGFyZ2V0IHZpZGVvIGVsZW1lbnRcbiAqL1xuY29uc3QgZGlzcGF0Y2hQaWN0dXJlSW5QaWN0dXJlRXZlbnQgPSBmdW5jdGlvbih2aWRlbykge1xuICBcbiAgLy8gSWdub3JlIGV2ZW50cyBmcm9tIG90aGVyIHZpZGVvIGVsZW1lbnRzIGUuZy4gYWR2ZXJ0c1xuICBjb25zdCBleHBlY3RlZFZpZGVvID0gZ2V0UmVzb3VyY2UoKS52aWRlb0VsZW1lbnQodHJ1ZSk7XG4gIGlmICh2aWRlbyAhPSBleHBlY3RlZFZpZGVvKSByZXR1cm47XG5cbiAgY29uc3QgaXNQbGF5aW5nUGljdHVyZUluUGljdHVyZSA9IHZpZGVvUGxheWluZ1BpY3R1cmVJblBpY3R1cmUodmlkZW8pO1xuICBpZiAoaXNQbGF5aW5nUGljdHVyZUluUGljdHVyZSkge1xuICAgIGluZm8oJ1ZpZGVvIGVudGVyaW5nIFBpY3R1cmUgaW4gUGljdHVyZSBtb2RlJyk7XG4gIH0gZWxzZSB7XG4gICAgaW5mbygnVmlkZW8gbGVhdmluZyBQaWN0dXJlIGluIFBpY3R1cmUgbW9kZScpO1xuICB9XG5cbiAgLy8gQ2FsbCBldmVudCBsaXN0ZW5lcnMgdXNpbmcgYSBjb3B5IHRvIHByZXZlbnQgcG9zc2libGl0eSBvZiBlbmRsZXNzIGxvb3BpbmdcbiAgY29uc3QgZXZlbnRMaXN0ZW5lcnNDb3B5ID0gZXZlbnRMaXN0ZW5lcnMuc2xpY2UoKTtcbiAgZm9yIChsZXQgbGlzdGVuZXI7IGxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcnNDb3B5LnBvcCgpOykge1xuICAgIGxpc3RlbmVyKHZpZGVvLCBpc1BsYXlpbmdQaWN0dXJlSW5QaWN0dXJlKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoZXMgYSBQaWN0dXJlIGluIFBpY3R1cmUgZXZlbnQgZm9yIGV2ZXJ5ICd3ZWJraXRwcmVzZW50YXRpb25tb2RlY2hhbmdlZCcgZXZlbnRcbiAqXG4gKiBAcGFyYW0geyFFdmVudH0gZXZlbnQgLSBhIHdlYmtpdHByZXNlbnRhdGlvbm1vZGVjaGFuZ2VkIGV2ZW50XG4gKi9cbmNvbnN0IHZpZGVvUHJlc2VudGF0aW9uTW9kZUNoYW5nZWQgPSBmdW5jdGlvbihldmVudCkge1xuICBjb25zdCB2aWRlbyA9ICAvKiogQHR5cGUge0hUTUxWaWRlb0VsZW1lbnR9ICovIChldmVudC50YXJnZXQpO1xuICBkaXNwYXRjaFBpY3R1cmVJblBpY3R1cmVFdmVudCh2aWRlbyk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB2aWRlbyBpcyBwbGF5aW5nIFBpY3R1cmUgaW4gUGljdHVyZVxuICpcbiAqIEBwYXJhbSB7SFRNTFZpZGVvRWxlbWVudH0gdmlkZW8gLSB2aWRlbyBlbGVtZW50IHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFxuICovXG5leHBvcnQgY29uc3QgdmlkZW9QbGF5aW5nUGljdHVyZUluUGljdHVyZSA9IGZ1bmN0aW9uKHZpZGVvKSB7XG4gIHN3aXRjaCAoZ2V0QnJvd3NlcigpKSB7XG4gICAgY2FzZSBCcm93c2VyLlNBRkFSSTpcbiAgICAgIHJldHVybiB2aWRlby53ZWJraXRQcmVzZW50YXRpb25Nb2RlID09ICdwaWN0dXJlLWluLXBpY3R1cmUnO1xuICAgIGNhc2UgQnJvd3Nlci5DSFJPTUU6XG4gICAgICByZXR1cm4gdmlkZW8uaGFzQXR0cmlidXRlKENIUk9NRV9QTEFZSU5HX1BJUF9BVFRSSUJVVEUpO1xuICAgIGNhc2UgQnJvd3Nlci5VTktOT1dOOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogU2V0cyBQaWN0dXJlIGluIFBpY3R1cmUgYXR0cmlidXRlIGFuZCB0b2dnbGVzIGNhcHRpb25zIG9uIGVudGVyaW5nIFBpY3R1cmUgaW4gUGljdHVyZSBtb2RlXG4gKlxuICogQHBhcmFtIHshRXZlbnR9IGV2ZW50IC0gYW4gZW50ZXJwaWN0dXJlaW5waWN0dXJlIGV2ZW50XG4gKi9cbmNvbnN0IHZpZGVvRGlkRW50ZXJQaWN0dXJlSW5QaWN0dXJlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgY29uc3QgdmlkZW8gPSAvKiogQHR5cGUge0hUTUxWaWRlb0VsZW1lbnR9ICovIChldmVudC50YXJnZXQpO1xuXG4gIC8vIFNldCBwbGF5aW5nIGluIFBpY3R1cmUgaW4gUGljdHVyZSBtb2RlIGF0dHJpYnV0ZSBhbmQgZGlzcGF0Y2ggZXZlbnRcbiAgdmlkZW8uc2V0QXR0cmlidXRlKENIUk9NRV9QTEFZSU5HX1BJUF9BVFRSSUJVVEUsIHRydWUpO1xuICBkaXNwYXRjaFBpY3R1cmVJblBpY3R1cmVFdmVudCh2aWRlbyk7XG5cbiAgLy8gUmVtb3ZlIFBpY3R1cmUgaW4gUGljdHVyZSBhdHRyaWJ1dGUgYW5kIGRpc3BhdGNoIGV2ZW50IG9uIGxlYXZpbmcgUGljdHVyZSBpbiBQaWN0dXJlIG1vZGVcbiAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbGVhdmVwaWN0dXJlaW5waWN0dXJlJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2aWRlby5yZW1vdmVBdHRyaWJ1dGUoQ0hST01FX1BMQVlJTkdfUElQX0FUVFJJQlVURSk7XG4gICAgZGlzcGF0Y2hQaWN0dXJlSW5QaWN0dXJlRXZlbnQodmlkZW8pO1xuICB9LCB7IG9uY2U6IHRydWUgfSk7XG59O1xuXG4vKipcbiAqIEFkZHMgUGljdHVyZSBpbiBQaWN0dXJlIGV2ZW50IGxpc3RlbmVycyB0byBhbGwgdmlkZW8gZWxlbWVudHNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZFZpZGVvRWxlbWVudExpc3RlbmVycyA9IGZ1bmN0aW9uKCkge1xuICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd2aWRlbycpO1xuICBmb3IgKGxldCBpbmRleCA9IDAsIGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50c1tpbmRleF07IGluZGV4KyspIHtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2VudGVycGljdHVyZWlucGljdHVyZScsIHZpZGVvRGlkRW50ZXJQaWN0dXJlSW5QaWN0dXJlKTtcbiAgfVxufTtcbiIsImltcG9ydCB7IGVycm9yIH0gZnJvbSAnLi9sb2dnZXIuanMnXG5cbmNvbnN0IGxvY2FsaXphdGlvbnMgPSB7fTtcblxubG9jYWxpemF0aW9uc1snYnV0dG9uLXRpdGxlJ10gPSB7XG4gICdlbic6ICdPcGVuIFBpY3R1cmUgaW4gUGljdHVyZSBtb2RlJyxcbiAgJ2RlJzogJ0JpbGQtaW4tQmlsZCBzdGFydGVuJyxcbiAgJ25sJzogJ0JlZWxkIGluIGJlZWxkIHN0YXJ0ZW4nLFxuICAnZnInOiAnRFx1MDBlOW1hcnJlciBJbWFnZSBkYW5zIGxcdTIwMTlpbWFnZScsXG59O1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy8gU2V0IEVuZ2xpc2ggYXMgdGhlIGRlZmF1bHQgZmFsbGJhY2sgbGFuZ3VhZ2VcbmNvbnN0IGRlZmF1bHRMYW5ndWFnZSA9ICdlbic7XG5cbi8qKlxuICogUmV0dXJucyBhIGxvY2FsaXplZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgZGVzaWduYXRlZCBieSB0aGUgc3BlY2lmaWVkIGtleVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSB0aGUga2V5IGZvciBhIHN0cmluZyBcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbGFuZ3VhZ2UgLSB0d28tbGV0dGVyIElTTyA2MzktMSBsYW5ndWFnZSBjb2RlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBsb2NhbGl6ZWRTdHJpbmcgPSBmdW5jdGlvbihrZXksIGxhbmd1YWdlID0gbmF2aWdhdG9yLmxhbmd1YWdlLnN1YnN0cmluZygwLCAyKSkge1xuICBcbiAgLy8gR2V0IGFsbCBsb2NhbGl6YXRpb25zIGZvciBrZXlcbiAgY29uc3QgLyoqIE9iamVjdDxzdHJpbmcsc3RyaW5nPiAqLyBsb2NhbGl6YXRpb25zRm9yS2V5ID0gbG9jYWxpemF0aW9uc1trZXldO1xuICBpZiAobG9jYWxpemF0aW9uc0ZvcktleSkge1xuICAgIFxuICAgIC8vIEdldCB0aGUgdXNlcnMgc3BlY2lmaWMgbG9jYWxpemF0aW9uIG9yIGZhbGxiYWNrIHRvIGRlZmF1bHQgbGFuZ3VhZ2VcbiAgICBsZXQgc3RyaW5nID0gbG9jYWxpemF0aW9uc0ZvcktleVtsYW5ndWFnZV0gfHwgbG9jYWxpemF0aW9uc0ZvcktleVtkZWZhdWx0TGFuZ3VhZ2VdO1xuICAgIGlmIChzdHJpbmcpIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgXG4gIGVycm9yKGBObyBsb2NhbGl6ZWQgc3RyaW5nIGZvdW5kIGZvciBrZXkgJyR7a2V5fSdgKTtcbiAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgbG9jYWxpemVkIHZlcnNpb24gb2YgdGhlIHN0cmluZyBkZXNpZ25hdGVkIGJ5IHRoZSBzcGVjaWZpZWQga2V5IHdpdGggdGFncyByZXBsYWNlZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSB0aGUga2V5IGZvciBhIHN0cmluZyBcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8c3RyaW5nPj59IHJlcGxhY2VtZW50cyAtIGFuIGFycmF5IG9mIGFycmF5cyBjb250YWluaW5nIHBhaXJzIG9mIHRhZ3MgYW5kIHRoZWlyIHJlcGxhY2VtZW50XG4gKiBAcGFyYW0ge3N0cmluZz19IGxhbmd1YWdlIC0gdHdvLWxldHRlciBJU08gNjM5LTEgbGFuZ3VhZ2UgY29kZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgbG9jYWxpemVkU3RyaW5nV2l0aFJlcGxhY2VtZW50cyA9IGZ1bmN0aW9uKGtleSwgcmVwbGFjZW1lbnRzLCBsYW5ndWFnZSkge1xuICBcbiAgbGV0IHN0cmluZyA9IGxvY2FsaXplZFN0cmluZyhrZXksIGxhbmd1YWdlKTtcbiAgXG4gIC8vIFJlcGxhY2UgdGFncyBvZiB0aGUgZm9ybSBbWFhYXSB3aXRoIGRpcmVjdGVkIHJlcGxhY2VtZW50cyBpZiBuZWVkZWRcbiAgZm9yIChsZXQgaW5kZXggPSByZXBsYWNlbWVudHMubGVuZ3RoOyBpbmRleC0tOyApIHtcbiAgICBsZXQgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudHNbaW5kZXhdO1xuICAgIFxuICAgIC8vIEVuc3VyZSB0YWdzIGRvIG5vdCBjb250YWluIHNwZWNpYWwgY2hhcmFjdGVycyAodGhpcyBnZXRzIG9wdGltaXNlZCBhd2F5IGFzIG9wcG9zZWQgdG8gZXNjYXBpbmcgdGhlIHRhZ3Mgd2l0aCB0aGUgYXNzb2NpYXRlZCBwZXJmb3JtYW5jZSBjb3N0KVxuICAgIGlmICgvW14tXzAtOWEtekEtWlxcL10vLnRlc3QocmVwbGFjZW1lbnRbMF0pKSB7XG4gICAgICBlcnJvcihgSW52YWxpZCBjaGFyYWN0ZXJzIHVzZWQgaW4gbG9jYWxpemVkIHN0cmluZyB0YWcgJyR7cmVwbGFjZW1lbnRbMF19J2ApO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxbJHtyZXBsYWNlbWVudFswXX1cXFxcXWAsICdnJyk7XG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXgsIHJlcGxhY2VtZW50WzFdKTtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59O1xuIiwiaW1wb3J0IHsgaW5mbywgZXJyb3IgfSBmcm9tICcuL2xvZ2dlci5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRFeHRlbnNpb25VUkwgfSBmcm9tICcuL2NvbW1vbi5qcydcbmltcG9ydCB7IHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUsIGFkZFBpY3R1cmVJblBpY3R1cmVFdmVudExpc3RlbmVyIH0gZnJvbSAnLi92aWRlby5qcydcbmltcG9ydCB7IGxvY2FsaXplZFN0cmluZyB9IGZyb20gJy4vbG9jYWxpemF0aW9uLmpzJ1xuXG5jb25zdCBCVVRUT05fSUQgPSAnUGlQZXJfYnV0dG9uJztcblxubGV0IC8qKiA/SFRNTEVsZW1lbnQgKi8gYnV0dG9uID0gbnVsbDtcblxuLyoqXG4gKiBJbmplY3RzIFBpY3R1cmUgaW4gUGljdHVyZSBidXR0b24gaW50byB3ZWJwYWdlXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBwYXJlbnQgLSBFbGVtZW50IGJ1dHRvbiB3aWxsIGJlIGluc2VydGVkIGludG9cbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEJ1dHRvbiA9IGZ1bmN0aW9uKHBhcmVudCkge1xuXG4gIC8vIENyZWF0ZSBidXR0b24gaWYgbmVlZGVkXG4gIGlmICghYnV0dG9uKSB7XG4gICAgY29uc3QgYnV0dG9uRWxlbWVudFR5cGUgPSBnZXRSZXNvdXJjZSgpLmJ1dHRvbkVsZW1lbnRUeXBlIHx8ICdidXR0b24nO1xuICAgIGJ1dHRvbiA9IC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovIChkb2N1bWVudC5jcmVhdGVFbGVtZW50KGJ1dHRvbkVsZW1lbnRUeXBlKSk7XG5cbiAgICAvLyBTZXQgYnV0dG9uIHByb3BlcnRpZXNcbiAgICBidXR0b24uaWQgPSBCVVRUT05fSUQ7XG4gICAgYnV0dG9uLnRpdGxlID0gbG9jYWxpemVkU3RyaW5nKCdidXR0b24tdGl0bGUnKTtcbiAgICBjb25zdCBidXR0b25TdHlsZSA9IGdldFJlc291cmNlKCkuYnV0dG9uU3R5bGU7XG4gICAgaWYgKGJ1dHRvblN0eWxlKSBidXR0b24uc3R5bGUuY3NzVGV4dCA9IGJ1dHRvblN0eWxlO1xuICAgIGNvbnN0IGJ1dHRvbkNsYXNzTmFtZSA9IGdldFJlc291cmNlKCkuYnV0dG9uQ2xhc3NOYW1lO1xuICAgIGlmIChidXR0b25DbGFzc05hbWUpIGJ1dHRvbi5jbGFzc05hbWUgPSBidXR0b25DbGFzc05hbWU7XG5cbiAgICAvLyBBZGQgc2NhbGVkIGltYWdlIHRvIGJ1dHRvblxuICAgIGNvbnN0IGltYWdlID0gLyoqIEB0eXBlIHtIVE1MSW1hZ2VFbGVtZW50fSAqLyAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJykpO1xuICAgIGltYWdlLnN0eWxlLndpZHRoID0gaW1hZ2Uuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgIGNvbnN0IGJ1dHRvblNjYWxlID0gZ2V0UmVzb3VyY2UoKS5idXR0b25TY2FsZTtcbiAgICBpZiAoYnV0dG9uU2NhbGUpIGltYWdlLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgke2J1dHRvblNjYWxlfSlgO1xuICAgIGJ1dHRvbi5hcHBlbmRDaGlsZChpbWFnZSk7XG5cbiAgICAvLyBTZXQgaW1hZ2UgcGF0aHNcbiAgICBsZXQgYnV0dG9uSW1hZ2UgPSBnZXRSZXNvdXJjZSgpLmJ1dHRvbkltYWdlO1xuICAgIGxldCBidXR0b25FeGl0SW1hZ2UgPSBnZXRSZXNvdXJjZSgpLmJ1dHRvbkV4aXRJbWFnZTtcbiAgICBpZiAoIWJ1dHRvbkltYWdlKSB7XG4gICAgICBidXR0b25JbWFnZSA9ICdkZWZhdWx0JztcbiAgICAgIGJ1dHRvbkV4aXRJbWFnZSA9ICdkZWZhdWx0LWV4aXQnO1xuICAgIH1cbiAgICBjb25zdCBidXR0b25JbWFnZVVSTCA9IGdldEV4dGVuc2lvblVSTChgaW1hZ2VzLyR7YnV0dG9uSW1hZ2V9LnN2Z2ApO1xuICAgIGltYWdlLnNyYyA9IGJ1dHRvbkltYWdlVVJMO1xuICAgIGlmIChidXR0b25FeGl0SW1hZ2UpIHtcbiAgICAgIGNvbnN0IGJ1dHRvbkV4aXRJbWFnZVVSTCA9IGdldEV4dGVuc2lvblVSTChgaW1hZ2VzLyR7YnV0dG9uRXhpdEltYWdlfS5zdmdgKTtcbiAgICAgIGFkZFBpY3R1cmVJblBpY3R1cmVFdmVudExpc3RlbmVyKGZ1bmN0aW9uKHZpZGVvLCBpc1BsYXlpbmdQaWN0dXJlSW5QaWN0dXJlKSB7XG4gICAgICAgIGltYWdlLnNyYyA9IChpc1BsYXlpbmdQaWN0dXJlSW5QaWN0dXJlKSA/IGJ1dHRvbkV4aXRJbWFnZVVSTCA6IGJ1dHRvbkltYWdlVVJMO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGhvdmVyIHN0eWxlIHRvIGJ1dHRvbiAoYSBuZXN0ZWQgc3R5bGVzaGVldCBpcyB1c2VkIHRvIGF2b2lkIHRyYWNraW5nIGFub3RoZXIgZWxlbWVudClcbiAgICBjb25zdCBidXR0b25Ib3ZlclN0eWxlID0gZ2V0UmVzb3VyY2UoKS5idXR0b25Ib3ZlclN0eWxlO1xuICAgIGlmIChidXR0b25Ib3ZlclN0eWxlKSB7XG4gICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBjb25zdCBjc3MgPSBgIyR7QlVUVE9OX0lEfTpob3Zlcnske2J1dHRvbkhvdmVyU3R5bGV9fWA7XG4gICAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICAgIGJ1dHRvbi5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuXG4gICAgLy8gVG9nZ2xlIFBpY3R1cmUgaW4gUGljdHVyZSBtb2RlIHdoZW4gYnV0dG9uIGlzIGNsaWNrZWRcbiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgLy8gR2V0IHRoZSB2aWRlbyBlbGVtZW50IGFuZCBieXBhc3MgY2FjaGluZyB0byBhY2NvbW9kYXRlIGZvciB0aGUgdW5kZXJseWluZyB2aWRlbyBjaGFuZ2luZyAoZS5nLiBwcmUtcm9sbCBhZHZlcnRzKSBcbiAgICAgIGNvbnN0IHZpZGVvID0gLyoqIEB0eXBlIHs/SFRNTFZpZGVvRWxlbWVudH0gKi8gKGdldFJlc291cmNlKCkudmlkZW9FbGVtZW50KHRydWUpKTtcbiAgICAgIGlmICghdmlkZW8pIHtcbiAgICAgICAgZXJyb3IoJ1VuYWJsZSB0byBmaW5kIHZpZGVvJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9nZ2xlUGljdHVyZUluUGljdHVyZSh2aWRlbyk7XG4gICAgfSk7XG5cbiAgICBpbmZvKCdQaWN0dXJlIGluIFBpY3R1cmUgYnV0dG9uIGNyZWF0ZWQnKTtcbiAgfVxuXG4gIC8vIEluamVjdCBidXR0b24gaW50byBjb3JyZWN0IHBsYWNlXG4gIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBnZXRSZXNvdXJjZSgpLmJ1dHRvbkluc2VydEJlZm9yZSA/IGdldFJlc291cmNlKCkuYnV0dG9uSW5zZXJ0QmVmb3JlKHBhcmVudCkgOiBudWxsO1xuICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGJ1dHRvbiwgcmVmZXJlbmNlTm9kZSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIFBpY3R1cmUgaW4gUGljdHVyZSBidXR0b24gZWxlbWVudFxuICpcbiAqIEByZXR1cm4gez9IVE1MRWxlbWVudH1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJ1dHRvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gYnV0dG9uO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgUGljdHVyZSBpbiBQaWN0dXJlIGJ1dHRvbiBpcyBpbmplY3RlZCBpbnRvIHBhZ2VcbiAqXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgY2hlY2tCdXR0b24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQlVUVE9OX0lEKTtcbn07XG4iLCJleHBvcnQgY29uc3QgZG9tYWluID0gJ2FwcGxlJztcblxuLyoqXG4gKiBSZXR1cm5zIG5lc3RlZCBzaGFkb3cgcm9vdFxuICpcbiAqIEBwYXJhbSB7IUFycmF5PHN0cmluZz59IHNlbGVjdG9yc1xuICogQHJldHVybiB7P1NoYWRvd1Jvb3R9XG4gKi9cbmNvbnN0IGdldE5lc3RlZFNoYWRvd1Jvb3QgPSBmdW5jdGlvbihzZWxlY3RvcnMpIHtcbiAgbGV0IGRvbSA9IGRvY3VtZW50O1xuICBmb3IgKGNvbnN0IHNlbGVjdG9yIG9mIHNlbGVjdG9ycykge1xuICAgIGRvbSA9IC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovIChkb20ucXVlcnlTZWxlY3RvcihzZWxlY3RvcikpO1xuICAgIGRvbSA9IGRvbSAmJiBkb20uc2hhZG93Um9vdDtcbiAgICBpZiAoIWRvbSkgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIC8qKiBAdHlwZSB7U2hhZG93Um9vdH0gKi8gKGRvbSk7XG59XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZSA9IHtcbiAgYnV0dG9uQ2xhc3NOYW1lOiAnZm9vdGVyX19jb250cm9sIGh5ZHJhdGVkJyxcbiAgYnV0dG9uRWxlbWVudFR5cGU6ICdkaXYnLFxuICBidXR0b25Ib3ZlclN0eWxlOiBgb3BhY2l0eTouOCFpbXBvcnRhbnRgLFxuICBidXR0b25JbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKC8qKiBFbGVtZW50ICovIHBhcmVudCkge1xuICAgIHJldHVybiBwYXJlbnQubGFzdENoaWxkO1xuICB9LFxuICBidXR0b25QYXJlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGludGVybmFsID0gZ2V0TmVzdGVkU2hhZG93Um9vdChbXCJhcHBsZS10di1wbHVzLXBsYXllclwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW1wLXZpZGVvLXBsYXllci1pbnRlcm5hbFwiXSk7XG4gICAgaWYgKCFpbnRlcm5hbCkgcmV0dXJuO1xuICAgIGNvbnN0IGZ1bGxzY3JlZW5CdXR0b24gPSBpbnRlcm5hbC5xdWVyeVNlbGVjdG9yKFwiYW1wLXBsYXliYWNrLWNvbnRyb2xzLWZ1bGwtc2NyZWVuXCIpO1xuICAgIGlmICghZnVsbHNjcmVlbkJ1dHRvbikgcmV0dXJuO1xuICAgIHJldHVybiBmdWxsc2NyZWVuQnV0dG9uLnBhcmVudEVsZW1lbnQ7XG4gIH0sXG4gIGJ1dHRvblN0eWxlOiBgdHJhbnNpdGlvbjpvcGFjaXR5IC4xNXM7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eTouOWAsXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgdmlkZW8gPSBnZXROZXN0ZWRTaGFkb3dSb290KFtcImFwcGxlLXR2LXBsdXMtcGxheWVyXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhbXAtdmlkZW8tcGxheWVyLWludGVybmFsXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhbXAtdmlkZW8tcGxheWVyXCJdKTtcbiAgICBpZiAoIXZpZGVvKSByZXR1cm47XG4gICAgcmV0dXJuIHZpZGVvLnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvJyk7XG4gIH0sXG59O1xuIiwiaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuL2NvbW1vbi5qcydcblxuLyoqXG4gKiBJbml0aWFsaXNlcyBjYWNoaW5nIGZvciBidXR0b24sIHZpZGVvLCBhbmQgY2FwdGlvbiBlbGVtZW50c1xuICovXG5leHBvcnQgY29uc3QgaW5pdGlhbGlzZUNhY2hlcyA9IGZ1bmN0aW9uKCkge1xuXG4gIC8vIFJldHVybiBhIHVuaXF1ZSBpZFxuICBsZXQgdW5pcXVlSWRDb3VudGVyID0gMDtcbiAgY29uc3QgLyoqIGZ1bmN0aW9uKCk6c3RyaW5nICovIHVuaXF1ZUlkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdQaVBlcl8nICsgdW5pcXVlSWRDb3VudGVyKys7XG4gIH07XG5cbiAgLyoqXG4gICAqIFdyYXBzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVsZW1lbnQgdG8gcHJvdmlkZSBmYXN0ZXIgbG9va3VwcyBieSBpZFxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGJvb2xlYW49KTo/RWxlbWVudH0gZWxlbWVudEZ1bmN0aW9uXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9uKGJvb2xlYW49KTo/RWxlbWVudH0gXG4gICAqL1xuICBjb25zdCBjYWNoZUVsZW1lbnRXcmFwcGVyID0gZnVuY3Rpb24oZWxlbWVudEZ1bmN0aW9uKSB7XG4gICAgbGV0IC8qKiA/c3RyaW5nICovIGNhY2hlZEVsZW1lbnRJZCA9IG51bGw7XG5cbiAgICByZXR1cm4gLyoqIGZ1bmN0aW9uKCk6P0VsZW1lbnQgKi8gZnVuY3Rpb24oLyoqIGJvb2xlYW49ICovIGJ5cGFzc0NhY2hlKSB7XG5cbiAgICAgIC8vIFJldHVybiBlbGVtZW50IGJ5IGlkIGlmIHBvc3NpYmxlXG4gICAgICBjb25zdCBjYWNoZWRFbGVtZW50ID0gY2FjaGVkRWxlbWVudElkID8gXG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2FjaGVkRWxlbWVudElkKSA6IG51bGw7XG4gICAgICBpZiAoY2FjaGVkRWxlbWVudCAmJiAhYnlwYXNzQ2FjaGUpIHJldHVybiBjYWNoZWRFbGVtZW50O1xuXG4gICAgICAvLyBDYWxsIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIHRvIGdldCB0aGUgZWxlbWVudFxuICAgICAgY29uc3QgdW5jYWNoZWRFbGVtZW50ID0gZWxlbWVudEZ1bmN0aW9uKCk7XG4gICAgICBpZiAodW5jYWNoZWRFbGVtZW50KSB7XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgbmF0aXZlIGlkIG90aGVyd2lzZSBhc3NpZ24gYSB1bmlxdWUgaWRcbiAgICAgICAgaWYgKCF1bmNhY2hlZEVsZW1lbnQuaWQpIHVuY2FjaGVkRWxlbWVudC5pZCA9IHVuaXF1ZUlkKCk7XG4gICAgICAgIGNhY2hlZEVsZW1lbnRJZCA9IHVuY2FjaGVkRWxlbWVudC5pZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmNhY2hlZEVsZW1lbnQ7XG4gICAgfTtcbiAgfTtcblxuICAvLyBXcmFwIHRoZSBidXR0b24sIHZpZGVvLCBhbmQgY2FwdGlvbiBlbGVtZW50c1xuICBjb25zdCBjdXJyZW50UmVzb3VyY2UgPSBnZXRSZXNvdXJjZSgpO1xuICBjdXJyZW50UmVzb3VyY2UuYnV0dG9uUGFyZW50ID0gY2FjaGVFbGVtZW50V3JhcHBlcihjdXJyZW50UmVzb3VyY2UuYnV0dG9uUGFyZW50KTtcbiAgY3VycmVudFJlc291cmNlLnZpZGVvRWxlbWVudCA9IGNhY2hlRWxlbWVudFdyYXBwZXIoY3VycmVudFJlc291cmNlLnZpZGVvRWxlbWVudCk7XG4gIGlmIChjdXJyZW50UmVzb3VyY2UuY2FwdGlvbkVsZW1lbnQpIHtcbiAgICBjdXJyZW50UmVzb3VyY2UuY2FwdGlvbkVsZW1lbnQgPSBjYWNoZUVsZW1lbnRXcmFwcGVyKGN1cnJlbnRSZXNvdXJjZS5jYXB0aW9uRWxlbWVudCk7XG4gIH1cbn07XG4iLCIvKiogQXV0by1nZW5lcmF0ZWQgZmlsZSAqKi9cblxuaW1wb3J0ICogYXMgcjEgZnJvbSBcIi4vOW5vdy5qc1wiO1xuaW1wb3J0ICogYXMgcjIgZnJvbSBcIi4vYWt0dWFsbmUuanNcIjtcbmltcG9ydCAqIGFzIHIzIGZyb20gXCIuL2FtYXpvbi5qc1wiO1xuaW1wb3J0ICogYXMgcjQgZnJvbSBcIi4vYXBwbGUuanNcIjtcbmltcG9ydCAqIGFzIHI1IGZyb20gXCIuL2JiYy5qc1wiO1xuaW1wb3J0ICogYXMgcjYgZnJvbSBcIi4vY2Vza2F0ZWxldml6ZS5qc1wiO1xuaW1wb3J0ICogYXMgcjcgZnJvbSBcIi4vY3J1bmNoeXJvbGwuanNcIjtcbmltcG9ydCAqIGFzIHI4IGZyb20gXCIuL2N1cmlvc2l0eXN0cmVhbS5qc1wiO1xuaW1wb3J0ICogYXMgcjkgZnJvbSBcIi4vZGF6bi5qc1wiO1xuaW1wb3J0ICogYXMgcjEwIGZyb20gXCIuL2Rpc25leXBsdXMuanNcIjtcbmltcG9ydCAqIGFzIHIxMSBmcm9tIFwiLi9lc3BuLmpzXCI7XG5pbXBvcnQgKiBhcyByMTIgZnJvbSBcIi4vZXVyb3Nwb3J0cGxheWVyLmpzXCI7XG5pbXBvcnQgKiBhcyByMTMgZnJvbSBcIi4vZnVib3R2LmpzXCI7XG5pbXBvcnQgKiBhcyByMTQgZnJvbSBcIi4vZ2lhbnRib21iLmpzXCI7XG5pbXBvcnQgKiBhcyByMTUgZnJvbSBcIi4vaHVsdS5qc1wiO1xuaW1wb3J0ICogYXMgcjE2IGZyb20gXCIuL2xpdHRsZXRoaW5ncy5qc1wiO1xuaW1wb3J0ICogYXMgcjE3IGZyb20gXCIuL21hc2hhYmxlLmpzXCI7XG5pbXBvcnQgKiBhcyByMTggZnJvbSBcIi4vbWV0YWNhZmUuanNcIjtcbmltcG9ydCAqIGFzIHIxOSBmcm9tIFwiLi9taXhlci5qc1wiO1xuaW1wb3J0ICogYXMgcjIwIGZyb20gXCIuL21sYi5qc1wiO1xuaW1wb3J0ICogYXMgcjIxIGZyb20gXCIuL25ldGZsaXguanNcIjtcbmltcG9ydCAqIGFzIHIyMiBmcm9tIFwiLi9vY3MuanNcIjtcbmltcG9ydCAqIGFzIHIyMyBmcm9tIFwiLi9vcGVubG9hZC5qc1wiO1xuaW1wb3J0ICogYXMgcjI0IGZyb20gXCIuL3Bhbm9wdG8uanNcIjtcbmltcG9ydCAqIGFzIHIyNSBmcm9tIFwiLi9wYnMuanNcIjtcbmltcG9ydCAqIGFzIHIyNiBmcm9tIFwiLi9wZXJpc2NvcGUuanNcIjtcbmltcG9ydCAqIGFzIHIyNyBmcm9tIFwiLi9wbGV4LmpzXCI7XG5pbXBvcnQgKiBhcyByMjggZnJvbSBcIi4vc2V6bmFtLmpzXCI7XG5pbXBvcnQgKiBhcyByMjkgZnJvbSBcIi4vc3RyZWFtYWJsZS5qc1wiO1xuaW1wb3J0ICogYXMgcjMwIGZyb20gXCIuL3RlZC5qc1wiO1xuaW1wb3J0ICogYXMgcjMxIGZyb20gXCIuL3RoZW9uaW9uLmpzXCI7XG5pbXBvcnQgKiBhcyByMzIgZnJvbSBcIi4vdHdpdGNoLmpzXCI7XG5pbXBvcnQgKiBhcyByMzMgZnJvbSBcIi4vdWRlbXkuanNcIjtcbmltcG9ydCAqIGFzIHIzNCBmcm9tIFwiLi91c3RyZWFtLmpzXCI7XG5pbXBvcnQgKiBhcyByMzUgZnJvbSBcIi4vdmV2by5qc1wiO1xuaW1wb3J0ICogYXMgcjM2IGZyb20gXCIuL3ZpY2UuanNcIjtcbmltcG9ydCAqIGFzIHIzNyBmcm9tIFwiLi92aWQuanNcIjtcbmltcG9ydCAqIGFzIHIzOCBmcm9tIFwiLi92aWVydmlqZnplcy5qc1wiO1xuaW1wb3J0ICogYXMgcjM5IGZyb20gXCIuL3ZrLmpzXCI7XG5pbXBvcnQgKiBhcyByNDAgZnJvbSBcIi4vdnJ0LmpzXCI7XG5pbXBvcnQgKiBhcyByNDEgZnJvbSBcIi4vdnJ2LmpzXCI7XG5pbXBvcnQgKiBhcyByNDIgZnJvbSBcIi4veWVsb3BsYXkuanNcIjtcbmltcG9ydCAqIGFzIHI0MyBmcm9tIFwiLi95b3V0dWJlLmpzXCI7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZXMgPSB7fTtcblxucmVzb3VyY2VzW3IxLmRvbWFpbl0gPSByMS5yZXNvdXJjZTtcbnJlc291cmNlc1tyMi5kb21haW5dID0gcjIucmVzb3VyY2U7XG5yZXNvdXJjZXNbJ2FtYXpvbiddID0gcjMucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjQuZG9tYWluXSA9IHI0LnJlc291cmNlO1xucmVzb3VyY2VzW3I1LmRvbWFpbl0gPSByNS5yZXNvdXJjZTtcbnJlc291cmNlc1tyNi5kb21haW5dID0gcjYucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjcuZG9tYWluXSA9IHI3LnJlc291cmNlO1xucmVzb3VyY2VzW3I4LmRvbWFpbl0gPSByOC5yZXNvdXJjZTtcbnJlc291cmNlc1tyOS5kb21haW5dID0gcjkucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjEwLmRvbWFpbl0gPSByMTAucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjExLmRvbWFpbl0gPSByMTEucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjEyLmRvbWFpbl0gPSByMTIucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjEzLmRvbWFpbl0gPSByMTMucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjE0LmRvbWFpbl0gPSByMTQucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjE1LmRvbWFpbl0gPSByMTUucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjE2LmRvbWFpbl0gPSByMTYucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjE3LmRvbWFpbl0gPSByMTcucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjE4LmRvbWFpbl0gPSByMTgucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjE5LmRvbWFpbl0gPSByMTkucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjIwLmRvbWFpbl0gPSByMjAucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjIxLmRvbWFpbl0gPSByMjEucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjIyLmRvbWFpbl0gPSByMjIucmVzb3VyY2U7XG5yZXNvdXJjZXNbJ29wZW5sb2FkJ10gPSByMjMucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjI0LmRvbWFpbl0gPSByMjQucmVzb3VyY2U7XG5yZXNvdXJjZXNbcjI1LmRvbWFpbl0gPSByMjUucmVzb3VyY2U7XG5yZXNvdXJjZXNbJ3BlcmlzY29wZSddID0gcjI2LnJlc291cmNlO1xucmVzb3VyY2VzW3IyNy5kb21haW5dID0gcjI3LnJlc291cmNlO1xucmVzb3VyY2VzWydzZXpuYW0nXSA9IHIyOC5yZXNvdXJjZTtcbnJlc291cmNlc1tyMjkuZG9tYWluXSA9IHIyOS5yZXNvdXJjZTtcbnJlc291cmNlc1tyMzAuZG9tYWluXSA9IHIzMC5yZXNvdXJjZTtcbnJlc291cmNlc1tyMzEuZG9tYWluXSA9IHIzMS5yZXNvdXJjZTtcbnJlc291cmNlc1tyMzIuZG9tYWluXSA9IHIzMi5yZXNvdXJjZTtcbnJlc291cmNlc1tyMzMuZG9tYWluXSA9IHIzMy5yZXNvdXJjZTtcbnJlc291cmNlc1tyMzQuZG9tYWluXSA9IHIzNC5yZXNvdXJjZTtcbnJlc291cmNlc1tyMzUuZG9tYWluXSA9IHIzNS5yZXNvdXJjZTtcbnJlc291cmNlc1tyMzYuZG9tYWluXSA9IHIzNi5yZXNvdXJjZTtcbnJlc291cmNlc1tyMzcuZG9tYWluXSA9IHIzNy5yZXNvdXJjZTtcbnJlc291cmNlc1sndmlqZiddID0gcjM4LnJlc291cmNlO1xucmVzb3VyY2VzW3IzOS5kb21haW5dID0gcjM5LnJlc291cmNlO1xucmVzb3VyY2VzW3I0MC5kb21haW5dID0gcjQwLnJlc291cmNlO1xucmVzb3VyY2VzW3I0MS5kb21haW5dID0gcjQxLnJlc291cmNlO1xucmVzb3VyY2VzW3I0Mi5kb21haW5dID0gcjQyLnJlc291cmNlO1xucmVzb3VyY2VzWyd5b3V0dWJlJ10gPSByNDMucmVzb3VyY2U7XG5cbnJlc291cmNlc1sncHJpbWV2aWRlbyddID0gcmVzb3VyY2VzWydhbWF6b24nXTtcbnJlc291cmNlc1snb2xvYWQnXSA9IHJlc291cmNlc1snb3BlbmxvYWQnXTtcbnJlc291cmNlc1sncHNjcCddID0gcmVzb3VyY2VzWydwZXJpc2NvcGUnXTtcbnJlc291cmNlc1snc3RyZWFtJ10gPSByZXNvdXJjZXNbJ3Nlem5hbSddO1xucmVzb3VyY2VzWyd2aWVyJ10gPSByZXNvdXJjZXNbJ3ZpamYnXTtcbnJlc291cmNlc1snemVzJ10gPSByZXNvdXJjZXNbJ3ZpamYnXTtcbnJlc291cmNlc1sneW91dHUnXSA9IHJlc291cmNlc1sneW91dHViZSddO1xuIiwiaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLy4uL2NvbW1vbi5qcydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9ICc5bm93JztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25DbGFzc05hbWU6ICd2anMtY29udHJvbCB2anMtYnV0dG9uJyxcbiAgYnV0dG9uSG92ZXJTdHlsZTogYGZpbHRlcjpicmlnaHRuZXNzKDUwJSkgc2VwaWEoMSkgaHVlLXJvdGF0ZSgxNjdkZWcpIHNhdHVyYXRlKDI1MyUpIGJyaWdodG5lc3MoMTA0JSlgLFxuICBidXR0b25JbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKC8qKiBFbGVtZW50ICovIHBhcmVudCkge1xuICAgIHJldHVybiBwYXJlbnQucXVlcnlTZWxlY3RvcignLnZqcy1mdWxsc2NyZWVuLWNvbnRyb2wnKTtcbiAgfSxcbiAgYnV0dG9uUGFyZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnZqcy1jb250cm9sLWJhcicpO1xuICB9LFxuICBidXR0b25TY2FsZTogMC43LFxuICBidXR0b25TdHlsZTogYG9yZGVyOjk5OTk5OTtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6NDRweDt3aWR0aDo0MHB4YCxcbiAgY2FwdGlvbkVsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGUgPSBnZXRSZXNvdXJjZSgpLnZpZGVvRWxlbWVudCgpO1xuICAgIHJldHVybiBlICYmIGUucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudmpzLXRleHQtdHJhY2stZGlzcGxheScpO1xuICB9LFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd2aWRlby52anMtdGVjaCcpO1xuICB9LFxufTtcbiIsImV4cG9ydCBjb25zdCBkb21haW4gPSAnYWt0dWFsbmUnO1xuXG5leHBvcnQgY29uc3QgcmVzb3VyY2UgPSB7XG4gIGJ1dHRvbkNsYXNzTmFtZTogJ2p3LWljb24ganctaWNvbi1pbmxpbmUganctYnV0dG9uLWNvbG9yIGp3LXJlc2V0IGp3LWljb24tbG9nbycsXG4gIGJ1dHRvbkVsZW1lbnRUeXBlOiAnZGl2JyxcbiAgYnV0dG9uSG92ZXJTdHlsZTogYGZpbHRlcjpicmlnaHRuZXNzKDUwJSkgc2VwaWEoMSkgaHVlLXJvdGF0ZSgzMTFkZWcpIHNhdHVyYXRlKDU1MCUpIGJyaWdodG5lc3MoNDklKSFpbXBvcnRhbnRgLFxuICBidXR0b25JbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKC8qKiBFbGVtZW50ICovIHBhcmVudCkge1xuICAgIHJldHVybiBwYXJlbnQubGFzdENoaWxkO1xuICB9LFxuICBidXR0b25QYXJlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanctY29udHJvbGJhci1yaWdodC1ncm91cCcpO1xuICB9LFxuICBidXR0b25TdHlsZTogYHdpZHRoOjM4cHg7ZmlsdGVyOmJyaWdodG5lc3MoODAlKWAsXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvLmp3LXZpZGVvJyk7XG4gIH0sXG59O1xuIiwiZXhwb3J0IGNvbnN0IGRvbWFpbiA9IFsnYW1hem9uJywgJ3ByaW1ldmlkZW8nXTtcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25Ib3ZlclN0eWxlOiBgb3BhY2l0eToxIWltcG9ydGFudGAsXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gICAgcmV0dXJuIHBhcmVudC5xdWVyeVNlbGVjdG9yKCcuZnVsbHNjcmVlbkJ1dHRvbldyYXBwZXInKTtcbiAgfSxcbiAgYnV0dG9uUGFyZW50OiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R2LXdlYi1wbGF5ZXInKTtcbiAgICByZXR1cm4gZSAmJiBlLnF1ZXJ5U2VsZWN0b3IoJy5oaWRlYWJsZVRvcEJ1dHRvbnMnKTtcbiAgfSxcbiAgYnV0dG9uU3R5bGU6IGBwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjhweDt3aWR0aDozdnc7aGVpZ2h0OjJ2dzttaW4td2lkdGg6MzVweDttaW4taGVpZ2h0OjI0cHg7Ym9yZGVyOjA7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7b3BhY2l0eTouOGAsXG4gIGNhcHRpb25FbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R2LXdlYi1wbGF5ZXInKTtcbiAgICByZXR1cm4gZSAmJiBlLnF1ZXJ5U2VsZWN0b3IoJy5jYXB0aW9ucycpO1xuICB9LFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucmVuZGVyZXJDb250YWluZXInKTtcbiAgICByZXR1cm4gZSAmJiBlLnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvW3dpZHRoPVwiMTAwJVwiXScpO1xuICB9LFxufTtcbiIsImV4cG9ydCBjb25zdCBkb21haW4gPSAnYmJjJztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25QYXJlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9LFxuICBjYXB0aW9uRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wX3N1YnRpdGxlc0NvbnRhaW5lcicpO1xuICB9LFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbWVkaWFDb250YWluZXIgdmlkZW9bc3JjXScpO1xuICB9LFxufTtcbiIsImV4cG9ydCBjb25zdCBkb21haW4gPSAnY2Vza2F0ZWxldml6ZSc7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZSA9IHtcbiAgYnV0dG9uQ2xhc3NOYW1lOiAndmlkZW9CdXR0b25TaGVsbCBkb250SGlkZUNvbnRyb2xzIGN1cnNvclBvaW50ZXIgZm9jdXNhYmxlQnRuJyxcbiAgYnV0dG9uRWxlbWVudFR5cGU6ICdkaXYnLFxuICBidXR0b25Ib3ZlclN0eWxlOiBgZmlsdGVyOmJyaWdodG5lc3MoNTAlKSBzZXBpYSgxKSBodWUtcm90YXRlKDE3MGRlZykgc2F0dXJhdGUoMjUwJSkgYnJpZ2h0bmVzcyg5MCUpYCxcbiAgYnV0dG9uSW5zZXJ0QmVmb3JlOiBmdW5jdGlvbigvKiogRWxlbWVudCAqLyBwYXJlbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Z1bGxTY3JlZW5TaGVsbCcpO1xuICB9LFxuICBidXR0b25TY2FsZTogMS4yLFxuICBidXR0b25TdHlsZTogYHdpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7ZGlzcGxheTppbmxpbmUtYmxvY2tgLFxuICBidXR0b25QYXJlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmlkZW9CdXR0b25zJyk7XG4gIH0sXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aWRlbycpO1xuICB9LFxufTtcbiIsImV4cG9ydCBjb25zdCBkb21haW4gPSAnY3J1bmNoeXJvbGwnO1xuXG5leHBvcnQgY29uc3QgcmVzb3VyY2UgPSB7XG4gIGJ1dHRvbkNsYXNzTmFtZTogJ3Zqcy1jb250cm9sIHZqcy1idXR0b24nLFxuICBidXR0b25Ib3ZlclN0eWxlOiBgb3BhY2l0eToxIWltcG9ydGFudGAsXG4gIGJ1dHRvblNjYWxlOiAwLjYsXG4gIGJ1dHRvblN0eWxlOiBgcG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTAwcHg7b3BhY2l0eTouNzU7Y3Vyc29yOnBvaW50ZXJgLFxuICBidXR0b25QYXJlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudmpzLWNvbnRyb2wtYmFyJyk7XG4gIH0sXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGF5ZXJfaHRtbDVfYXBpJyk7XG4gIH0sXG59O1xuIiwiaW1wb3J0IHsgQnJvd3NlciwgZ2V0QnJvd3NlciwgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLy4uL2NvbW1vbi5qcydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9ICdjdXJpb3NpdHlzdHJlYW0nO1xuXG5leHBvcnQgY29uc3QgcmVzb3VyY2UgPSB7XG4gIGJ1dHRvbkNsYXNzTmFtZTogJ3Zqcy1jb250cm9sIHZqcy1idXR0b24nLFxuICBidXR0b25EaWRBcHBlYXI6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChnZXRCcm93c2VyKCkgIT0gQnJvd3Nlci5TQUZBUkkpIHJldHVybjtcbiAgICBjb25zdCB2aWRlbyA9IC8qKiBAdHlwZSB7P0hUTUxWaWRlb0VsZW1lbnR9ICovIChnZXRSZXNvdXJjZSgpLnZpZGVvRWxlbWVudCgpKTtcbiAgICBjb25zdCB2aWRlb0NvbnRhaW5lciA9IHZpZGVvLnBhcmVudEVsZW1lbnQ7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0YmVnaW5mdWxsc2NyZWVuJywgZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSBNYXRoLmZsb29yKDEwMCAqIHZpZGVvLnZpZGVvSGVpZ2h0IC8gdmlkZW8udmlkZW9XaWR0aCkgKyAndncnO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdmlkZW8udmlkZW9IZWlnaHQgKyAncHgnO1xuICAgICAgdmlkZW9Db250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoJ2hlaWdodCcsIGhlaWdodCwgJ2ltcG9ydGFudCcpO1xuICAgICAgdmlkZW9Db250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoJ21heC1oZWlnaHQnLCBtYXhIZWlnaHQpO1xuICAgIH0pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdGVuZGZ1bGxzY3JlZW4nLCBmdW5jdGlvbigpIHtcbiAgICAgIHZpZGVvQ29udGFpbmVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdoZWlnaHQnKTtcbiAgICAgIHZpZGVvQ29udGFpbmVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdtYXgtaGVpZ2h0Jyk7XG4gICAgfSk7XG4gIH0sXG4gIGJ1dHRvbkhvdmVyU3R5bGU6IGBvcGFjaXR5OjEhaW1wb3J0YW50YCxcbiAgYnV0dG9uSW5zZXJ0QmVmb3JlOiBmdW5jdGlvbigvKiogRWxlbWVudCAqLyBwYXJlbnQpIHtcbiAgICByZXR1cm4gcGFyZW50Lmxhc3RDaGlsZDtcbiAgfSxcbiAgYnV0dG9uUGFyZW50OiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4tcGxheWVyJyk7XG4gICAgcmV0dXJuIGUgJiYgZS5xdWVyeVNlbGVjdG9yKCcudmpzLWNvbnRyb2wtYmFyJyk7XG4gIH0sXG4gIGJ1dHRvblNjYWxlOiAwLjcsXG4gIGJ1dHRvblN0eWxlOiBgb3BhY2l0eTouODtjdXJzb3I6cG9pbnRlcmAsXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluLXBsYXllcl9odG1sNV9hcGknKTtcbiAgfSxcbn07XG4iLCJleHBvcnQgY29uc3QgZG9tYWluID0gJ2Rhem4nO1xuXG5leHBvcnQgY29uc3QgcmVzb3VyY2UgPSB7XG4gIGJ1dHRvblN0eWxlOiAoYFxuICAgIHdpZHRoOiAxLjVyZW07XG4gICAgaGVpZ2h0OiAxLjVyZW07XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgbWFyZ2luOiAwLjVyZW07XG4gICAgei1pbmRleDogMTtcbiAgYCksXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gIFx0Ly8gVGhlIExpdmUgaW5kaWNhdG9yIG1pZ2h0IG1vdmUvY292ZXIgdGhlIFBpUCBidXR0b24sIGp1c3QgcGxhY2UgdGhlIFBpUCBidXR0b24gYmVmb3JlIGl0XG4gIFx0Y29uc3QgbGl2ZUluZGljYXRvciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2RpdltkYXRhLXRlc3QtaWRePVwiUExBWUVSX0xJVkVfSU5ESUNBVE9SXCJdJyk7XG4gIFx0aWYgKGxpdmVJbmRpY2F0b3IpIHtcbiAgICAgIHJldHVybiBsaXZlSW5kaWNhdG9yO1xuICBcdH1cbiAgICByZXR1cm4gcGFyZW50Lmxhc3RDaGlsZDtcbiAgfSxcbiAgYnV0dG9uUGFyZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2W2RhdGEtdGVzdC1pZF49XCJQTEFZRVJfQkFSXCJdJyk7XHRcbiAgfSxcbiAgdmlkZW9FbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2W2RhdGEtdGVzdC1pZF49XCJQTEFZRVJfU09MVVRJT05cIl0gdmlkZW8nKTtcbiAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBkb21haW4gPSAnZGlzbmV5cGx1cyc7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZSA9IHtcbiAgYnV0dG9uQ2xhc3NOYW1lOiAnY29udHJvbC1pY29uLWJ0bicsXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5mdWxsc2NyZWVuLWljb24nKTtcbiAgfSxcbiAgYnV0dG9uUGFyZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvbnRyb2xzX19yaWdodCcpO1xuICB9LFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd2aWRlb1tzcmNdJyk7XG4gIH0sXG59O1xuIiwiaW1wb3J0IHsgZ2V0QnV0dG9uIH0gZnJvbSAnLi8uLi9idXR0b24uanMnXG5cbmV4cG9ydCBjb25zdCBkb21haW4gPSAnZXNwbic7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZSA9IHtcbiAgYnV0dG9uQ2xhc3NOYW1lOiAnbWVkaWEtaWNvbicsXG4gIGJ1dHRvbkRpZEFwcGVhcjogZnVuY3Rpb24oKSB7XG4gICAgLy8gR2V0IGxvY2FsaXplZCBidXR0b24gdGl0bGUgYW5kIGhpZGUgZGVmYXVsdCB0b29sdGlwXG4gICAgY29uc3QgYnV0dG9uID0gZ2V0QnV0dG9uKCk7XG4gICAgY29uc3QgLyoqIHN0cmluZyAqLyB0aXRsZSA9IGJ1dHRvbi50aXRsZTtcbiAgICBidXR0b24udGl0bGUgPSAnJztcblxuICAgIC8vIENyZWF0ZSBzdHlsaXplZCB0b29sdGlwIGFuZCBhZGQgdG8gRE9NXG4gICAgY29uc3QgdG9vbHRpcCA9IC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovIChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgdG9vbHRpcC5jbGFzc05hbWUgPSAnY29udHJvbC10b29sdGlwJztcbiAgICB0b29sdGlwLnN0eWxlLmNzc1RleHQgPSBgcmlnaHQ6MDtib3R0b206MzVweDt0cmFuc2l0aW9uOmJvdHRvbSAuMnMgZWFzZS1vdXRgO1xuICAgIHRvb2x0aXAudGV4dENvbnRlbnQgPSB0aXRsZTtcbiAgICBidXR0b24uYXBwZW5kQ2hpbGQodG9vbHRpcCk7XG5cbiAgICAvLyBEaXNwbGF5IHN0eWxpemVkIHRvb2x0aXAgb24gbW91c2VvdmVyXG4gICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGZ1bmN0aW9uKCkge1xuICAgICAgYnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2Rpc3BsYXlpbmcnKTtcbiAgICAgIHRvb2x0aXAuc3R5bGUuYm90dG9tID0gJzc1cHgnO1xuICAgIH0pO1xuICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIGZ1bmN0aW9uKCkge1xuICAgICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc3BsYXlpbmcnKTtcbiAgICAgIHRvb2x0aXAuc3R5bGUuYm90dG9tID0gJzM1cHgnO1xuICAgIH0pO1xuICB9LFxuICBidXR0b25FbGVtZW50VHlwZTogJ2RpdicsXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gICAgcmV0dXJuIHBhcmVudC5sYXN0Q2hpbGQ7XG4gIH0sXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250cm9scy1yaWdodC1ob3Jpem9udGFsJyk7XG4gIH0sXG4gIGJ1dHRvblNjYWxlOiAwLjcsXG4gIGJ1dHRvblN0eWxlOiBgd2lkdGg6NDRweDtoZWlnaHQ6NDRweDtvcmRlcjo0YCxcbiAgY2FwdGlvbkVsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudGV4dC10cmFjay1kaXNwbGF5Jyk7XG4gIH0sXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvLmpzLXZpZGVvLWNvbnRlbnQnKTtcbiAgfSxcbn07XG4iLCJleHBvcnQgY29uc3QgZG9tYWluID0gJ2V1cm9zcG9ydHBsYXllcic7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZSA9IHtcbiAgYnV0dG9uRWxlbWVudFR5cGU6ICdkaXYnLFxuICBidXR0b25Ib3ZlclN0eWxlOiBgb3BhY2l0eToxIWltcG9ydGFudGAsXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250cm9scy1iYXItcmlnaHQtc2VjdGlvbicpO1xuICB9LFxuICBidXR0b25TY2FsZTogMC45LFxuICBidXR0b25TdHlsZTogYGhlaWdodDoxMDAlO21hcmdpbi1yaWdodDoxNXB4O29wYWNpdHk6Ljg7Y3Vyc29yOnBvaW50ZXJgLFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudmlkZW8tcGxheWVyX19zY3JlZW4nKTtcbiAgfSxcbn07XG4iLCJleHBvcnQgY29uc3QgZG9tYWluID0gJ2Z1Ym8nO1xuXG5leHBvcnQgY29uc3QgcmVzb3VyY2UgPSB7XG4gIGJ1dHRvbkVsZW1lbnRUeXBlOiAnZGl2JyxcbiAgYnV0dG9uSW5zZXJ0QmVmb3JlOiBmdW5jdGlvbigvKiogRWxlbWVudCAqLyBwYXJlbnQpIHtcbiAgICByZXR1cm4gcGFyZW50Lmxhc3RDaGlsZDtcbiAgfSxcbiAgYnV0dG9uUGFyZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNzcy1qYTd5azcnKTtcbiAgfSxcbiAgYnV0dG9uU2NhbGU6IDEuMjUsXG4gIGJ1dHRvblN0eWxlOiBgaGVpZ2h0OjI0cHg7d2lkdGg6MjVweDttYXJnaW46OHB4IDEwcHggMTJweDtjdXJzb3I6cG9pbnRlcmAsXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiaXRtb3ZpbnBsYXllci12aWRlby12aWRlbycpO1xuICB9LFxufTtcbiIsImV4cG9ydCBjb25zdCBkb21haW4gPSAnZ2lhbnRib21iJztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25DbGFzc05hbWU6ICdhdi1jaHJvbWUtY29udHJvbCcsXG4gIGJ1dHRvbkVsZW1lbnRUeXBlOiAnZGl2JyxcbiAgYnV0dG9uSW5zZXJ0QmVmb3JlOiBmdW5jdGlvbigvKiogRWxlbWVudCAqLyBwYXJlbnQpIHtcbiAgICByZXR1cm4gcGFyZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy12aWQtcGluLXdyYXAnKS5uZXh0U2libGluZztcbiAgfSxcbiAgYnV0dG9uUGFyZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmF2LWNvbnRyb2xzLS1yaWdodCcpO1xuICB9LFxuICBidXR0b25TY2FsZTogMC43LFxuICBidXR0b25TdHlsZTogYGhlaWdodDoxMDAlO3dpZHRoOjMwcHg7b3BhY2l0eToxO2N1cnNvcjpwb2ludGVyYCxcbiAgdmlkZW9FbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndmlkZW9baWRePVwidmlkZW9fanMtdmlkLXBsYXllclwiXScpO1xuICB9XG59O1xuIiwiaW1wb3J0IHsgZ2V0QnV0dG9uIH0gZnJvbSAnLi8uLi9idXR0b24uanMnXG5cbmV4cG9ydCBjb25zdCBkb21haW4gPSAnaHVsdSc7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZSA9IHtcbiAgYnV0dG9uRGlkQXBwZWFyOiBmdW5jdGlvbigpIHtcbiAgICBcbiAgICAvLyBHZXQgbG9jYWxpemVkIGJ1dHRvbiB0aXRsZSBhbmQgaGlkZSBkZWZhdWx0IHRvb2x0aXBcbiAgICBjb25zdCBidXR0b24gPSBnZXRCdXR0b24oKTtcbiAgICBjb25zdCAvKiogc3RyaW5nICovIHRpdGxlID0gYnV0dG9uLnRpdGxlO1xuICAgIGJ1dHRvbi50aXRsZSA9ICcnO1xuICAgIFxuICAgIC8vIENyZWF0ZSBzdHlsaXplZCB0b29sdGlwIGFuZCBhZGQgdG8gRE9NXG4gICAgY29uc3QgdG9vbHRpcCA9IC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovIChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgdG9vbHRpcC5jbGFzc05hbWUgPSAnYnV0dG9uLXRvb2wtdGlwcyc7XG4gICAgdG9vbHRpcC5zdHlsZS5jc3NUZXh0ID0gYHdoaXRlLXNwYWNlOm5vd3JhcDtwYWRkaW5nOjAgNXB4O3JpZ2h0OjBgO1xuICAgIHRvb2x0aXAudGV4dENvbnRlbnQgPSB0aXRsZS50b1VwcGVyQ2FzZSgpO1xuICAgIGJ1dHRvbi5hcHBlbmRDaGlsZCh0b29sdGlwKTtcbiAgICBcbiAgICAvLyBEaXNwbGF5IHN0eWxpemVkIHRvb2x0aXAgb24gbW91c2VvdmVyXG4gICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGZ1bmN0aW9uKCkge1xuICAgICAgdG9vbHRpcC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9KTtcbiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBmdW5jdGlvbigpIHtcbiAgICAgIHRvb2x0aXAuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9KTtcbiAgfSxcbiAgYnV0dG9uRWxlbWVudFR5cGU6ICdkaXYnLFxuICBidXR0b25Ib3ZlclN0eWxlOiBgb3BhY2l0eToxIWltcG9ydGFudGAsXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250cm9sc19fdmlldy1tb2RlLWJ1dHRvbicpO1xuICB9LFxuICBidXR0b25QYXJlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZGFzaC1wbGF5ZXItY29udGFpbmVyIC5jb250cm9sc19fbWVudXMtcmlnaHQnKTtcbiAgfSxcbiAgYnV0dG9uU3R5bGU6IGBvcGFjaXR5Oi43O2N1cnNvcjpwb2ludGVyO3dpZHRoOjI0cHhgLFxuICBjYXB0aW9uRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jbG9zZWQtY2FwdGlvbi1vdXRiYW5kJyk7XG4gIH0sXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy52aWRlby1wbGF5ZXInKTtcbiAgfSxcbn07XG4iLCJleHBvcnQgY29uc3QgZG9tYWluID0gJ2xpdHRsZXRoaW5ncyc7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZSA9IHtcbiAgYnV0dG9uQ2xhc3NOYW1lOiAnanctaWNvbiBqdy1pY29uLWlubGluZSBqdy1idXR0b24tY29sb3IganctcmVzZXQganctaWNvbi1sb2dvJyxcbiAgYnV0dG9uRWxlbWVudFR5cGU6ICdkaXYnLFxuICBidXR0b25JbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKC8qKiBFbGVtZW50ICovIHBhcmVudCkge1xuICAgIHJldHVybiBwYXJlbnQubGFzdENoaWxkO1xuICB9LFxuICBidXR0b25QYXJlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanctY29udHJvbGJhci1yaWdodC1ncm91cCcpO1xuICB9LFxuICBidXR0b25TdHlsZTogYHdpZHRoOjM4cHhgLFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd2aWRlby5qdy12aWRlbycpO1xuICB9LFxufTtcbiIsImV4cG9ydCBjb25zdCBkb21haW4gPSAnbWFzaGFibGUnO1xuXG5leHBvcnQgY29uc3QgcmVzb3VyY2UgPSB7XG4gIGJ1dHRvbkNsYXNzTmFtZTogJ2p3LWljb24ganctaWNvbi1pbmxpbmUganctYnV0dG9uLWNvbG9yIGp3LXJlc2V0IGp3LWljb24tbG9nbycsXG4gIGJ1dHRvbkVsZW1lbnRUeXBlOiAnZGl2JyxcbiAgYnV0dG9uSW5zZXJ0QmVmb3JlOiBmdW5jdGlvbigvKiogRWxlbWVudCAqLyBwYXJlbnQpIHtcbiAgICByZXR1cm4gcGFyZW50Lmxhc3RDaGlsZDtcbiAgfSxcbiAgYnV0dG9uUGFyZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmp3LWNvbnRyb2xiYXItcmlnaHQtZ3JvdXAnKTtcbiAgfSxcbiAgYnV0dG9uU3R5bGU6IGB0b3A6LTJweDt3aWR0aDozOHB4YCxcbiAgdmlkZW9FbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndmlkZW8uanctdmlkZW8nKTtcbiAgfSxcbn07XG4iLCJleHBvcnQgY29uc3QgZG9tYWluID0gJ21ldGFjYWZlJztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25FbGVtZW50VHlwZTogJ2RpdicsXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gICAgcmV0dXJuIHBhcmVudC5sYXN0Q2hpbGQ7XG4gIH0sXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwbGF5ZXJfcGxhY2UgLnRyYXknKTtcbiAgfSxcbiAgYnV0dG9uU2NhbGU6IDAuODUsXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwbGF5ZXJfcGxhY2UgdmlkZW8nKTtcbiAgfSxcbn07XG4iLCJleHBvcnQgY29uc3QgZG9tYWluID0gJ21peGVyJztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25DbGFzc05hbWU6ICdjb250cm9sJyxcbiAgYnV0dG9uRWxlbWVudFR5cGU6ICdkaXYnLFxuICBidXR0b25Ib3ZlclN0eWxlOiBgYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wOClgLFxuICBidXR0b25JbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKC8qKiBFbGVtZW50ICovIHBhcmVudCkge1xuICAgIHJldHVybiBwYXJlbnQubGFzdENoaWxkLnByZXZpb3VzU2libGluZztcbiAgfSxcbiAgYnV0dG9uUGFyZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvbnRyb2wtY29udGFpbmVyIC50b29sYmFyIC5yaWdodCcpO1xuICB9LFxuICBidXR0b25TY2FsZTogMC42NSxcbiAgYnV0dG9uU3R5bGU6IGB3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpwb2ludGVyYCxcbiAgdmlkZW9FbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvbnRyb2wtY29udGFpbmVyICsgdmlkZW8nKTtcbiAgfSxcbn07XG4iLCJleHBvcnQgY29uc3QgZG9tYWluID0gJ21sYic7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZSA9IHtcbiAgYnV0dG9uU2NhbGU6IDAuNyxcbiAgYnV0dG9uU3R5bGU6IGBib3JkZXI6MDtiYWNrZ3JvdW5kOjAgMDtmaWx0ZXI6YnJpZ2h0bmVzcyg4MCUpYCxcbiAgYnV0dG9uSG92ZXJTdHlsZTogYGZpbHRlcjpicmlnaHRuZXNzKDEyMCUpIWltcG9ydGFudGAsXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ib3R0b20tY29udHJvbHMtcmlnaHQnKTtcbiAgfSxcbiAgYnV0dG9uSW5zZXJ0QmVmb3JlOiBmdW5jdGlvbigvKiogRWxlbWVudCAqLyBwYXJlbnQpIHtcbiAgICByZXR1cm4gcGFyZW50Lmxhc3RDaGlsZDtcbiAgfSxcbiAgdmlkZW9FbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1sYnR2LW1lZGlhLXBsYXllciB2aWRlbycpO1xuICB9LFxufTtcbiIsImltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi8uLi9jb21tb24uanMnXG5cbmV4cG9ydCBjb25zdCBkb21haW4gPSAnbmV0ZmxpeCc7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZSA9IHtcbiAgYnV0dG9uQ2xhc3NOYW1lOiAndG91Y2hhYmxlIFBsYXllckNvbnRyb2xzLS1jb250cm9sLWVsZW1lbnQgbmZwLWJ1dHRvbi1jb250cm9sIGRlZmF1bHQtY29udHJvbC1idXR0b24nLFxuICBidXR0b25Ib3ZlclN0eWxlOiBgdHJhbnNmb3JtOnNjYWxlKDEuMilgLFxuICBidXR0b25JbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKC8qKiBFbGVtZW50ICovIHBhcmVudCkge1xuICAgIHJldHVybiBwYXJlbnQubGFzdENoaWxkO1xuICB9LFxuICBidXR0b25QYXJlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuUGxheWVyQ29udHJvbHNOZW9fX2J1dHRvbi1jb250cm9sLXJvdycpOyBcbiAgfSxcbiAgYnV0dG9uU2NhbGU6IDAuNyxcbiAgYnV0dG9uU3R5bGU6IGBtaW4td2lkdGg6Mi4zZW1gLFxuICBjYXB0aW9uRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgZSA9IGdldFJlc291cmNlKCkudmlkZW9FbGVtZW50KCk7XG4gICAgcmV0dXJuIGUgJiYgZS5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wbGF5ZXItdGltZWR0ZXh0Jyk7XG4gIH0sXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5WaWRlb0NvbnRhaW5lciB2aWRlbycpO1xuICB9LFxufTtcbiIsImV4cG9ydCBjb25zdCBkb21haW4gPSAnb2NzJztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25DbGFzc05hbWU6ICdmb290ZXItZWx0IGZsdHInLFxuICBidXR0b25JbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKC8qKiBFbGVtZW50ICovIHBhcmVudCkge1xuICAgIHJldHVybiBwYXJlbnQucXVlcnlTZWxlY3RvcignI3RvZ2dsZVBsYXknKTtcbiAgfSxcbiAgYnV0dG9uUGFyZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmZvb3Rlci1ibG9jazpsYXN0LWNoaWxkJyk7XG4gIH0sXG4gIGJ1dHRvblNjYWxlOiAxLjIsXG4gIGJ1dHRvblN0eWxlOiBgZGlzcGxheTpibG9jazt3aWR0aDoyNXB4O2hlaWdodDoxOHB4O21hcmdpbi1yaWdodDoxMHB4O21hcmdpbi1ib3R0b206LTEwcHg7cGFkZGluZzowO2JvcmRlcjowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnRgLFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTGd5VmlkZW9QbGF5ZXInKTtcbiAgfSxcbn07XG4iLCJleHBvcnQgY29uc3QgZG9tYWluID0gWydvcGVubG9hZCcsICdvbG9hZCddO1xuXG5leHBvcnQgY29uc3QgcmVzb3VyY2UgPSB7XG4gIGJ1dHRvbkNsYXNzTmFtZTogJ3Zqcy1jb250cm9sIHZqcy1idXR0b24nLFxuICBidXR0b25JbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKC8qKiBFbGVtZW50ICovIHBhcmVudCkge1xuICAgIHJldHVybiBwYXJlbnQubGFzdENoaWxkO1xuICB9LFxuICBidXR0b25QYXJlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudmpzLWNvbnRyb2wtYmFyJyk7XG4gIH0sXG4gIGJ1dHRvblNjYWxlOiAwLjYsXG4gIGJ1dHRvblN0eWxlOiBgbGVmdDo1cHg7Y3Vyc29yOnBvaW50ZXJgLFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb2x2aWRlb19odG1sNV9hcGknKTtcbiAgfSxcbn07XG4iLCJpbXBvcnQgeyBnZXRCdXR0b24gfSBmcm9tICcuLy4uL2J1dHRvbi5qcydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9ICdwYW5vcHRvJztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICAgIGJ1dHRvbkNsYXNzTmFtZTogJ21lZGlhLWljb24nLFxuICAgIGJ1dHRvbkRpZEFwcGVhcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBHZXQgbG9jYWxpemVkIGJ1dHRvbiB0aXRsZSBhbmQgaGlkZSBkZWZhdWx0IHRvb2x0aXBcbiAgICAgICAgY29uc3QgYnV0dG9uID0gZ2V0QnV0dG9uKCk7XG4gICAgICAgIGNvbnN0IC8qKiBzdHJpbmcgKi8gdGl0bGUgPSBidXR0b24udGl0bGU7XG4gICAgICAgIGJ1dHRvbi50aXRsZSA9ICcnO1xuXG4gICAgICAgIC8vIENyZWF0ZSBzdHlsaXplZCB0b29sdGlwIGFuZCBhZGQgdG8gRE9NXG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSAvKiogQHR5cGUge0hUTUxFbGVtZW50fSAqLyAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgICAgICB0b29sdGlwLmNsYXNzTmFtZSA9ICdjb250cm9sLXRvb2x0aXAnO1xuICAgICAgICB0b29sdGlwLnN0eWxlLmNzc1RleHQgPSBgcmlnaHQ6MDtib3R0b206MzVweDt0cmFuc2l0aW9uOmJvdHRvbSAuMnMgZWFzZS1vdXRgO1xuICAgICAgICB0b29sdGlwLnRleHRDb250ZW50ID0gdGl0bGU7XG4gICAgICAgIGJ1dHRvbi5hcHBlbmRDaGlsZCh0b29sdGlwKTtcblxuICAgICAgICAvLyBEaXNwbGF5IHN0eWxpemVkIHRvb2x0aXAgb24gbW91c2VvdmVyXG4gICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZCgnZGlzcGxheWluZycpO1xuICAgICAgICAgICAgdG9vbHRpcC5zdHlsZS5ib3R0b20gPSAnNzVweCc7XG4gICAgICAgIH0pO1xuICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBidXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnZGlzcGxheWluZycpO1xuICAgICAgICAgICAgdG9vbHRpcC5zdHlsZS5ib3R0b20gPSAnMzVweCc7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgYnV0dG9uRWxlbWVudFR5cGU6ICdkaXYnLFxuICAgIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24gKC8qKiBFbGVtZW50ICovIHBhcmVudCkge1xuICAgICAgICByZXR1cm4gcGFyZW50Lmxhc3RDaGlsZDtcbiAgICB9LFxuICAgIGJ1dHRvblBhcmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3RyYW5zcG9ydENvbnRyb2xzJyk7XG4gICAgfSxcbiAgICBidXR0b25TY2FsZTogMC43LFxuICAgIGJ1dHRvblN0eWxlOiBgd2lkdGg6NDRweDtoZWlnaHQ6NDRweDtvcmRlcjo0YCxcbiAgICAvLyBjYXB0aW9uRWxlbWVudDogZnVuY3Rpb24gKCkge1xuICAgIC8vICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRleHQtdHJhY2stZGlzcGxheScpO1xuICAgIC8vIH0sXG4gICAgdmlkZW9FbGVtZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd2aWRlbyNwcmltYXJ5VmlkZW8nKTtcbiAgICB9LFxufTtcbiIsImltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi8uLi9jb21tb24uanMnXG5pbXBvcnQgeyB2aWRlb1BsYXlpbmdQaWN0dXJlSW5QaWN0dXJlLCB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlIH0gZnJvbSAnLi8uLi92aWRlby5qcydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9ICdwYnMnO1xuXG5leHBvcnQgY29uc3QgcmVzb3VyY2UgPSB7XG4gIGJ1dHRvbkNsYXNzTmFtZTogJ2p3LWljb24ganctaWNvbi1pbmxpbmUganctYnV0dG9uLWNvbG9yIGp3LXJlc2V0JyxcbiAgYnV0dG9uRGlkQXBwZWFyOiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBmdWxsc2NyZWVuQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmp3LWljb24tZnVsbHNjcmVlbicpO1xuICAgIGZ1bGxzY3JlZW5CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IHZpZGVvID0gLyoqIEB0eXBlIHs/SFRNTFZpZGVvRWxlbWVudH0gKi8gKGdldFJlc291cmNlKCkudmlkZW9FbGVtZW50KCkpO1xuICAgICAgaWYgKHZpZGVvUGxheWluZ1BpY3R1cmVJblBpY3R1cmUodmlkZW8pKSB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHZpZGVvKTtcbiAgICB9KTtcbiAgfSxcbiAgYnV0dG9uRWxlbWVudFR5cGU6ICdkaXYnLFxuICBidXR0b25Ib3ZlclN0eWxlOiBgb3BhY2l0eToxIWltcG9ydGFudGAsXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gICAgcmV0dXJuIHBhcmVudC5sYXN0Q2hpbGQ7XG4gIH0sXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qdy1idXR0b24tY29udGFpbmVyJyk7XG4gIH0sXG4gIGJ1dHRvblNjYWxlOiAwLjYsXG4gIGJ1dHRvblN0eWxlOiBgb3BhY2l0eTouOGAsXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qdy12aWRlbycpO1xuICB9LFxufTtcbiIsImV4cG9ydCBjb25zdCBkb21haW4gPSBbJ3BlcmlzY29wZScsICdwc2NwJ107XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZSA9IHtcbiAgYnV0dG9uQ2xhc3NOYW1lOiAnUGlsbCBQaWxsLS13aXRoSWNvbicsXG4gIGJ1dHRvbkVsZW1lbnRUeXBlOiAnc3BhbicsXG4gIGJ1dHRvbkhvdmVyU3R5bGU6IGBvcGFjaXR5Oi44IWltcG9ydGFudDtmaWx0ZXI6YnJpZ2h0bmVzcygxMjUlKSFpbXBvcnRhbnRgLFxuICBidXR0b25JbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKC8qKiBFbGVtZW50ICovIHBhcmVudCkge1xuICAgIHJldHVybiBwYXJlbnQucXVlcnlTZWxlY3RvcignLlNoYXJlQnJvYWRjYXN0JykubmV4dFNpYmxpbmc7XG4gIH0sXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5WaWRlb092ZXJsYXlSZWRlc2lnbi1Cb3R0b21CYXItUmlnaHQnKTtcbiAgfSxcbiAgYnV0dG9uU2NhbGU6IDAuNixcbiAgYnV0dG9uU3R5bGU6IGBvcGFjaXR5Oi41O2ZpbHRlcjpicmlnaHRuZXNzKDIwMCUpYCxcbiAgdmlkZW9FbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLlZpZGVvIHZpZGVvJyk7XG4gIH0sXG59O1xuIiwiaW1wb3J0IHsgYnlwYXNzQmFja2dyb3VuZFRpbWVyVGhyb3R0bGluZyB9IGZyb20gJy4vLi4vY29tbW9uLmpzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0gJ3BsZXgnO1xuXG5leHBvcnQgY29uc3QgcmVzb3VyY2UgPSB7XG4gIGJ1dHRvbkRpZEFwcGVhcjogZnVuY3Rpb24oKSB7XG4gICAgYnlwYXNzQmFja2dyb3VuZFRpbWVyVGhyb3R0bGluZygpO1xuICB9LFxuICBidXR0b25Ib3ZlclN0eWxlOiBgb3BhY2l0eToxIWltcG9ydGFudGAsXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gICAgcmV0dXJuIHBhcmVudC5sYXN0Q2hpbGQ7XG4gIH0sXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2RpdltjbGFzc149XCJGdWxsUGxheWVyVG9wQ29udHJvbHMtdG9wQ29udHJvbHNcIl0nKTtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHs/RWxlbWVudH0gKi8gKGUgJiYgZS5sYXN0Q2hpbGQpO1xuICB9LFxuICBidXR0b25TY2FsZTogMixcbiAgYnV0dG9uU3R5bGU6IGBwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTNweDt3aWR0aDozMHB4O3BhZGRpbmc6MTBweDtib3JkZXI6MDtiYWNrZ3JvdW5kOjAgMDtvcGFjaXR5Oi43O291dGxpbmU6MDt0ZXh0LXNoYWRvdzowIDAgNHB4IHJnYmEoMCwwLDAsLjQ1KWAsXG4gIGNhcHRpb25FbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxpYmphc3Mtc3VicycpO1xuICB9LFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd2aWRlb1tjbGFzc149XCJIVE1MTWVkaWEtbWVkaWFFbGVtZW50XCJdJyk7XG4gIH0sXG59O1xuIiwiZXhwb3J0IGNvbnN0IGRvbWFpbiA9IFsnc2V6bmFtJywgJ3N0cmVhbSddO1xuXG5leHBvcnQgY29uc3QgcmVzb3VyY2UgPSB7XG4gIGJ1dHRvbkNsYXNzTmFtZTogJ3N6bnAtdWktd2lkZ2V0LWJveCcsXG4gIGJ1dHRvbkVsZW1lbnRUeXBlOiAnZGl2JyxcbiAgYnV0dG9uSG92ZXJTdHlsZTogYHRyYW5zZm9ybTpzY2FsZSgxLjA1KWAsXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gICAgcmV0dXJuIHBhcmVudC5sYXN0Q2hpbGQ7XG4gIH0sXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zem5wLXVpLWN0cmwtcGFuZWwtbGF5b3V0LXdyYXBwZXInKTtcbiAgfSxcbiAgYnV0dG9uU2NhbGU6IDAuNzUsXG4gIGJ1dHRvblN0eWxlOiBgY3Vyc29yOnBvaW50ZXJgLFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc3pucC11aS10ZWNoLXZpZGVvLXdyYXBwZXIgdmlkZW8nKTtcbiAgfSxcbn07XG4iLCJpbXBvcnQgeyBnZXRCdXR0b24gfSBmcm9tICcuLy4uL2J1dHRvbi5qcydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9ICdzdHJlYW1hYmxlJztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25EaWRBcHBlYXI6IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IHByb2dyZXNzQmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BsYXllci1wcm9ncmVzcycpO1xuICAgIGNvbnN0IHByb2dyZXNzQmFyU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwcm9ncmVzc0Jhcik7XG4gICAgZ2V0QnV0dG9uKCkuc3R5bGUucmlnaHQgPSBwcm9ncmVzc0JhclN0eWxlLnJpZ2h0O1xuICAgIHByb2dyZXNzQmFyLnN0eWxlLnJpZ2h0ID0gKHBhcnNlSW50KHByb2dyZXNzQmFyU3R5bGUucmlnaHQsIDEwKSArIDQwKSArICdweCc7XG4gIH0sXG4gIGJ1dHRvbkVsZW1lbnRUeXBlOiAnZGl2JyxcbiAgYnV0dG9uSG92ZXJTdHlsZTogYG9wYWNpdHk6MSFpbXBvcnRhbnRgLFxuICBidXR0b25QYXJlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucGxheWVyLWNvbnRyb2xzLXJpZ2h0Jyk7XG4gIH0sXG4gIGJ1dHRvblN0eWxlOiBgcG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjEwcHg7aGVpZ2h0OjI2cHg7d2lkdGg6MjZweDtjdXJzb3I6cG9pbnRlcjtvcGFjaXR5Oi45O2ZpbHRlcjpkcm9wLXNoYWRvdyhyZ2JhKDAsMCwwLC41KSAwIDAgMnB4KWAsXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aWRlby1wbGF5ZXItdGFnJyk7XG4gIH0sXG59O1xuIiwiaW1wb3J0IHsgZ2V0QnV0dG9uIH0gZnJvbSAnLi8uLi9idXR0b24uanMnXG5cbmV4cG9ydCBjb25zdCBkb21haW4gPSAndGVkJztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25DbGFzc05hbWU6ICd6LWk6MCBwb3M6ciBib3R0b206MCBob3Zlci9iZzp3aGl0ZS43IGItcjouMSBwOjEgY3VyOnAnLFxuICBidXR0b25FbGVtZW50VHlwZTogJ2RpdicsXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gICAgcmV0dXJuIHBhcmVudC5sYXN0Q2hpbGQ7XG4gIH0sXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgcGxheUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1thcmlhLWNvbnRyb2xzPVwidmlkZW8xXCJdJyk7XG4gICAgcmV0dXJuIHBsYXlCdXR0b24ucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICB9LFxuICBidXR0b25EaWRBcHBlYXI6IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGltZyA9IGdldEJ1dHRvbigpLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xuICAgIGltZy5jbGFzc0xpc3QuYWRkKCd3OjInKTtcbiAgICBpbWcuY2xhc3NMaXN0LmFkZCgnaDoyJyk7XG4gIH0sXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvW2lkXj1cInRlZC1wbGF5ZXItXCJdJyk7XG4gIH1cbn07XG4iLCJleHBvcnQgY29uc3QgZG9tYWluID0gJ3RoZW9uaW9uJztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25DbGFzc05hbWU6ICdqdy1pY29uIGp3LWljb24taW5saW5lIGp3LWJ1dHRvbi1jb2xvciBqdy1yZXNldCBqdy1pY29uLWxvZ28nLFxuICBidXR0b25FbGVtZW50VHlwZTogJ2RpdicsXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gICAgcmV0dXJuIHBhcmVudC5sYXN0Q2hpbGQ7XG4gIH0sXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qdy1jb250cm9sYmFyLXJpZ2h0LWdyb3VwJyk7XG4gIH0sXG4gIGJ1dHRvblN0eWxlOiBgdG9wOi0ycHg7bGVmdDoxMHB4O3dpZHRoOjM4cHhgLFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd2aWRlby5qdy12aWRlbycpO1xuICB9LFxufTtcbiIsImltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi8uLi9jb21tb24uanMnXG5pbXBvcnQgeyBnZXRCdXR0b24gfSBmcm9tICcuLy4uL2J1dHRvbi5qcydcbmltcG9ydCB7IHZpZGVvUGxheWluZ1BpY3R1cmVJblBpY3R1cmUsIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUgfSBmcm9tICcuLy4uL3ZpZGVvLmpzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0gJ3R3aXRjaCc7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZSA9IHtcbiAgYnV0dG9uQ2xhc3NOYW1lOiAndHctYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cy1tZWRpdW0gdHctYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMtbWVkaXVtIHR3LWJvcmRlci10b3AtbGVmdC1yYWRpdXMtbWVkaXVtIHR3LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzLW1lZGl1bSB0dy1idXR0b24taWNvbiB0dy1idXR0b24taWNvbi0tb3ZlcmxheSB0dy1jb3JlLWJ1dHRvbiB0dy1jb3JlLWJ1dHRvbi0tb3ZlcmxheSB0dy1pbmxpbmUtZmxleCB0dy1yZWxhdGl2ZSB0dy10b29sdGlwLXdyYXBwZXInLFxuICBidXR0b25EaWRBcHBlYXI6IGZ1bmN0aW9uKCkge1xuICAgIC8vIEFkZCB0b29sdGlwXG4gICAgY29uc3QgYnV0dG9uID0gZ2V0QnV0dG9uKCk7XG4gICAgY29uc3QgdGl0bGUgPSBidXR0b24udGl0bGU7XG4gICAgYnV0dG9uLnRpdGxlID0gJyc7XG4gICAgY29uc3QgdG9vbHRpcCA9IC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovIChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgdG9vbHRpcC5jbGFzc05hbWUgPSAndHctdG9vbHRpcCB0dy10b29sdGlwLS1hbGlnbi1yaWdodCB0dy10b29sdGlwLS11cCc7XG4gICAgdG9vbHRpcC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aXRsZSkpO1xuICAgIGJ1dHRvbi5hcHBlbmRDaGlsZCh0b29sdGlwKTtcbiAgICBcbiAgICAvLyBGaXggaXNzdWVzIHdpdGggZnVsbHNjcmVlbiB3aGVuIGFjdGl2YXRlZCB3aGlsZSB2aWRlbyBwbGF5aW5nIFBpY3R1cmUtaW4tUGljdHVyZVxuICAgIGNvbnN0IGZ1bGxzY3JlZW5CdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtYS10YXJnZXQ9J3BsYXllci1mdWxsc2NyZWVuLWJ1dHRvbiddXCIpO1xuICAgIGlmICghZnVsbHNjcmVlbkJ1dHRvbikgcmV0dXJuO1xuICAgIGZ1bGxzY3JlZW5CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IHZpZGVvID0gLyoqIEB0eXBlIHs/SFRNTFZpZGVvRWxlbWVudH0gKi8gKGdldFJlc291cmNlKCkudmlkZW9FbGVtZW50KCkpO1xuICAgICAgaWYgKHZpZGVvUGxheWluZ1BpY3R1cmVJblBpY3R1cmUodmlkZW8pKSB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlKHZpZGVvKTtcbiAgICB9KTtcbiAgfSxcbiAgYnV0dG9uSW5zZXJ0QmVmb3JlOiBmdW5jdGlvbigvKiogRWxlbWVudCAqLyBwYXJlbnQpIHtcbiAgICByZXR1cm4gcGFyZW50Lmxhc3RDaGlsZDtcbiAgfSxcbiAgYnV0dG9uUGFyZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBsYXllci1jb250cm9sc19fcmlnaHQtY29udHJvbC1ncm91cCwucGxheWVyLWJ1dHRvbnMtcmlnaHQnKTtcbiAgfSxcbiAgYnV0dG9uU2NhbGU6IDAuOCxcbiAgY2FwdGlvbkVsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucGxheWVyLWNhcHRpb25zLWNvbnRhaW5lcicpO1xuICB9LFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd2aWRlb1tzcmNdJyk7XG4gIH0sXG59O1xuIiwiaW1wb3J0IHsgZ2V0QnV0dG9uIH0gZnJvbSAnLi8uLi9idXR0b24uanMnXG5cbmV4cG9ydCBjb25zdCBkb21haW4gPSAndWRlbXknO1xuXG5leHBvcnQgY29uc3QgcmVzb3VyY2UgPSB7XG4gIGJ1dHRvbkNsYXNzTmFtZTogJ2J0bicsXG4gIGJ1dHRvbkhvdmVyU3R5bGU6IGBvcGFjaXR5OjEhaW1wb3J0YW50YCxcbiAgYnV0dG9uSW5zZXJ0QmVmb3JlOiBmdW5jdGlvbigvKiogRWxlbWVudCAqLyBwYXJlbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYnV0dG9uW2FyaWEtbGFiZWw9XCJGdWxsc2NyZWVuXCJdJyk7XG4gIH0sXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2RpdltjbGFzc149XCJjb250cm9sLWJhci0tY29udHJvbC1iYXItLVwiXScpO1xuICB9LFxuICBidXR0b25TY2FsZTogMC44LFxuICBidXR0b25TdHlsZTogYHdpZHRoOjNlbTtoZWlnaHQ6M2VtO3BhZGRpbmc6MDtvcGFjaXR5Oi44YCxcbiAgY2FwdGlvbkVsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXZbY2xhc3NePVwiY2FwdGlvbnMtZGlzcGxheS0tY2FwdGlvbnMtY29udGFpbmVyXCJdJyk7XG4gIH0sXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvLnZqcy10ZWNoJyk7XG4gIH0sXG59O1xuIiwiZXhwb3J0IGNvbnN0IGRvbWFpbiA9ICd1c3RyZWFtJztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25DbGFzc05hbWU6ICdjb21wb25lbnQgc2hvd24nLFxuICBidXR0b25FbGVtZW50VHlwZTogJ2RpdicsXG4gIGJ1dHRvbkhvdmVyU3R5bGU6IGBvcGFjaXR5OjEhaW1wb3J0YW50O2ZpbHRlcjpkcm9wLXNoYWRvdygwIDAgNXB4IHJnYmEoMjU1LDI1NSwyNTUsLjUpKWAsXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gICAgcmV0dXJuIHBhcmVudC5sYXN0Q2hpbGQ7XG4gIH0sXG4gIGJ1dHRvblNjYWxlOiAwLjgsXG4gIGJ1dHRvblN0eWxlOiBgb3BhY2l0eTouN2AsXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cm9sUGFuZWxSaWdodCcpO1xuICB9LFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjVmlld2VyQ29udGFpbmVyIHZpZGVvJyk7XG4gIH0sXG59O1xuIiwiZXhwb3J0IGNvbnN0IGRvbWFpbiA9ICd2ZXZvJztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25DbGFzc05hbWU6ICdwbGF5ZXItY29udHJvbCcsXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gICAgcmV0dXJuIHBhcmVudC5sYXN0Q2hpbGQ7XG4gIH0sXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjb250cm9sLWJhciAucmlnaHQtY29udHJvbHMnKTtcbiAgfSxcbiAgYnV0dG9uU2NhbGU6IDAuNyxcbiAgYnV0dG9uU3R5bGU6IGBib3JkZXI6MDtiYWNrZ3JvdW5kOjAgMGAsXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdodG1sNS1wbGF5ZXInKTtcbiAgfSxcbn07XG4iLCJleHBvcnQgY29uc3QgZG9tYWluID0gJ3ZpY2UnO1xuXG5leHBvcnQgY29uc3QgcmVzb3VyY2UgPSB7XG4gIGJ1dHRvbkNsYXNzTmFtZTogJ3ZwX19jb250cm9sc19faWNvbl9fcG9wdXBfX2NvbnRhaW5lcicsXG4gIGJ1dHRvbkVsZW1lbnRUeXBlOiAnZGl2JyxcbiAgYnV0dG9uSW5zZXJ0QmVmb3JlOiBmdW5jdGlvbigvKiogRWxlbWVudCAqLyBwYXJlbnQpIHtcbiAgICByZXR1cm4gcGFyZW50Lmxhc3RDaGlsZDtcbiAgfSxcbiAgYnV0dG9uUGFyZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnZwX19jb250cm9sc19faWNvbnMnKTtcbiAgfSxcbiAgYnV0dG9uU2NhbGU6IDAuNixcbiAgYnV0dG9uU3R5bGU6IGB0b3A6LTExcHhgLFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd2aWRlby5qdy12aWRlbycpO1xuICB9LFxufTtcbiIsImV4cG9ydCBjb25zdCBkb21haW4gPSAndmlkJztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25JbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKC8qKiBFbGVtZW50ICovIHBhcmVudCkge1xuICAgIHJldHVybiBwYXJlbnQubGFzdENoaWxkO1xuICB9LFxuICBidXR0b25QYXJlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudmpzLWNvbnRyb2wtYmFyJyk7XG4gIH0sXG4gIGJ1dHRvblNjYWxlOiAwLjcsXG4gIGJ1dHRvblN0eWxlOiBgcG9zaXRpb246cmVsYXRpdmU7dG9wOi0ycHg7bGVmdDo5cHg7cGFkZGluZzowO21hcmdpbjowYCxcbiAgdmlkZW9FbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZGVvX3BsYXllcl9odG1sNV9hcGknKTtcbiAgfSxcbn07XG4iLCJpbXBvcnQgeyBnZXRCdXR0b24gfSBmcm9tICcuLy4uL2J1dHRvbi5qcydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9IFsndmlqZicsICd2aWVyJywgJ3plcyddO1xuXG5leHBvcnQgY29uc3QgcmVzb3VyY2UgPSB7XG4gIGJ1dHRvbkNsYXNzTmFtZTogJ3Zqcy1jb250cm9sIHZqcy1idXR0b24nLFxuICBidXR0b25EaWRBcHBlYXI6IGZ1bmN0aW9uKCkge1xuICAgIC8vIE1vdmUgZnVsbHNjcmVlbiBidXR0b24gdG8gdGhlIHJpZ2h0IHNvIHRoZSBwaXAgYnV0dG9uIGFwcGVhcnMgbGVmdCBvZiBpdFxuICAgIGNvbnN0IGZ1bGxTY3JlZW5CdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2anMtZnVsbHNjcmVlbi1jb250cm9sJylbMF07XG4gICAgZnVsbFNjcmVlbkJ1dHRvbi5zdHlsZS5vcmRlciA9IDEwO1xuICB9LFxuICBidXR0b25QYXJlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd2anMtY29udHJvbC1iYXInKVswXTtcbiAgfSxcbiAgYnV0dG9uU3R5bGU6IGB0ZXh0LWluZGVudDowIWltcG9ydGFudDttYXJnaW4tbGVmdDoxMHB4O29yZGVyOjlgLFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd2aWRlb1twcmVsb2FkPVwibWV0YWRhdGFcIl0nKTtcbiAgfSxcbn07XG4iLCJleHBvcnQgY29uc3QgZG9tYWluID0gJ3ZrJztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25DbGFzc05hbWU6ICd2aWRlb3BsYXllcl9idG4nLFxuICBidXR0b25FbGVtZW50VHlwZTogJ2RpdicsXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Rpdi52aWRlb3BsYXllcl9idG5fZnVsbHNjcmVlbicpO1xuICB9LFxuICBidXR0b25TdHlsZTogYHdpZHRoOjI0cHg7aGVpZ2h0OjQ1cHg7cGFkZGluZzowIDhweGAsXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Rpdi52aWRlb3BsYXllcl9jb250cm9scycpO1xuICB9LFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd2aWRlby52aWRlb3BsYXllcl9tZWRpYV9wcm92aWRlcicpO1xuICB9LFxufTtcbiIsImV4cG9ydCBjb25zdCBkb21haW4gPSAndnJ0JztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25DbGFzc05hbWU6ICd2dXBsYXktY29udHJvbCcsXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gICAgcmV0dXJuIHBhcmVudC5sYXN0Q2hpbGQ7XG4gIH0sXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3Z1cGxheS1jb250cm9sLXJpZ2h0JylbMF07XG4gIH0sXG4gIGNhcHRpb25FbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRoZW9wbGF5ZXItdGV4dHRyYWNrcycpO1xuICB9LFxuICBidXR0b25TdHlsZTogYHdpZHRoOjMwcHg7aGVpZ2h0OjQ3cHg7cGFkZGluZzowO3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotOXB4O3JpZ2h0OjhweGAsXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvW3ByZWxvYWQ9XCJtZXRhZGF0YVwiXScpO1xuICB9LFxufTtcbiIsImltcG9ydCB7IGdldFJlc291cmNlLCBieXBhc3NCYWNrZ3JvdW5kVGltZXJUaHJvdHRsaW5nIH0gZnJvbSAnLi8uLi9jb21tb24uanMnXG5pbXBvcnQgeyBnZXRCdXR0b24gfSBmcm9tICcuLy4uL2J1dHRvbi5qcydcbmltcG9ydCB7IHZpZGVvUGxheWluZ1BpY3R1cmVJblBpY3R1cmUsIHRvZ2dsZVBpY3R1cmVJblBpY3R1cmUgfSBmcm9tICcuLy4uL3ZpZGVvLmpzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0gJ3Zydic7XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZSA9IHtcbiAgYnV0dG9uQ2xhc3NOYW1lOiAndmpzLWNvbnRyb2wgdmpzLWJ1dHRvbicsXG4gIGJ1dHRvbkRpZEFwcGVhcjogZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgbmVpZ2hib3VyQnV0dG9uID0gZ2V0QnV0dG9uKCkubmV4dFNpYmxpbmc7XG4gICAgbmVpZ2hib3VyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCB2aWRlbyA9IC8qKiBAdHlwZSB7P0hUTUxWaWRlb0VsZW1lbnR9ICovIChnZXRSZXNvdXJjZSgpLnZpZGVvRWxlbWVudCgpKTtcbiAgICAgIGlmICh2aWRlb1BsYXlpbmdQaWN0dXJlSW5QaWN0dXJlKHZpZGVvKSkgdG9nZ2xlUGljdHVyZUluUGljdHVyZSh2aWRlbyk7XG4gICAgfSk7XG4gICAgYnlwYXNzQmFja2dyb3VuZFRpbWVyVGhyb3R0bGluZygpO1xuICB9LFxuICBidXR0b25Ib3ZlclN0eWxlOiBgb3BhY2l0eToxIWltcG9ydGFudGAsXG4gIGJ1dHRvbkluc2VydEJlZm9yZTogZnVuY3Rpb24oLyoqIEVsZW1lbnQgKi8gcGFyZW50KSB7XG4gICAgcmV0dXJuIHBhcmVudC5sYXN0Q2hpbGQ7XG4gIH0sXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy52anMtY29udHJvbC1iYXInKTtcbiAgfSxcbiAgYnV0dG9uU2NhbGU6IDAuNixcbiAgYnV0dG9uU3R5bGU6IGBwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMTRweDt3aWR0aDo1MHB4O2N1cnNvcjpwb2ludGVyO29wYWNpdHk6LjZgLFxuICBjYXB0aW9uRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5saWJqYXNzLXN1YnMnKTtcbiAgfSxcbiAgdmlkZW9FbGVtZW50OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BsYXllcl9odG1sNV9hcGknKTtcbiAgfSxcbn07XG4iLCJpbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vLi4vY29tbW9uLmpzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0gJ3llbG9wbGF5JztcblxuZXhwb3J0IGNvbnN0IHJlc291cmNlID0ge1xuICBidXR0b25DbGFzc05hbWU6ICdidXR0b24nLFxuICBidXR0b25EaWRBcHBlYXI6IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IGdldFJlc291cmNlKCkuYnV0dG9uUGFyZW50KCk7XG4gICAgcGFyZW50LnN0eWxlLndpZHRoID0gJzIxMHB4JztcbiAgfSxcbiAgYnV0dG9uSG92ZXJTdHlsZTogYG9wYWNpdHk6MSFpbXBvcnRhbnRgLFxuICBidXR0b25JbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKC8qKiBFbGVtZW50ICovIHBhcmVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgncGxheWVyLWZ1bGxzY3JlZW4tYnV0dG9uJylbMF07XG4gIH0sXG4gIGJ1dHRvblBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2J1dHRvbnMnKVswXTtcbiAgfSxcbiAgYnV0dG9uU2NhbGU6IDAuOCxcbiAgYnV0dG9uU3R5bGU6IGBtYXJnaW4tbGVmdDoxMHB4O3dpZHRoOjUwcHg7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eTouODtoZWlnaHQ6NDBweCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudGAsXG4gIHZpZGVvRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvW3NyY10nKTtcbiAgfSxcbn07XG4iLCJpbXBvcnQgeyBCcm93c2VyLCBnZXRCcm93c2VyLCBnZXRSZXNvdXJjZSwgYnlwYXNzQmFja2dyb3VuZFRpbWVyVGhyb3R0bGluZyB9IGZyb20gJy4vLi4vY29tbW9uLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uIH0gZnJvbSAnLi8uLi9idXR0b24uanMnXG5pbXBvcnQgeyBlbmFibGVDYXB0aW9ucywgZGlzYWJsZUNhcHRpb25zLCBzaG91bGRQcm9jZXNzQ2FwdGlvbnMgfSBmcm9tICcuLy4uL2NhcHRpb25zLmpzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0gWyd5b3V0dWJlJywgJ3lvdXR1J107XG5cbmV4cG9ydCBjb25zdCByZXNvdXJjZSA9IHtcbiAgYnV0dG9uQ2xhc3NOYW1lOiAneXRwLWJ1dHRvbicsXG4gIGJ1dHRvbkRpZEFwcGVhcjogZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgYnV0dG9uID0gZ2V0QnV0dG9uKCk7XG4gICAgY29uc3QgbmVpZ2hib3VyQnV0dG9uID0gLyoqIEB0eXBlIHs/SFRNTEVsZW1lbnR9ICovIChidXR0b24ubmV4dFNpYmxpbmcpO1xuICAgIGNvbnN0IC8qKiBzdHJpbmcgKi8gdGl0bGUgPSBidXR0b24udGl0bGU7XG4gICAgY29uc3QgLyoqIHN0cmluZyAqLyBuZWlnaGJvdXJUaXRsZSA9IG5laWdoYm91ckJ1dHRvbi50aXRsZTtcbiAgICBidXR0b24udGl0bGUgPSAnJztcbiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgZnVuY3Rpb24oKSB7XG4gICAgICBuZWlnaGJvdXJCdXR0b24udGl0bGUgPSB0aXRsZTtcbiAgICAgIG5laWdoYm91ckJ1dHRvbi5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnbW91c2VvdmVyJykpO1xuICAgIH0pO1xuICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIGZ1bmN0aW9uKCkge1xuICAgICAgbmVpZ2hib3VyQnV0dG9uLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdtb3VzZW91dCcpKTtcbiAgICAgIG5laWdoYm91ckJ1dHRvbi50aXRsZSA9IG5laWdoYm91clRpdGxlO1xuICAgIH0pO1xuICAgIGJ5cGFzc0JhY2tncm91bmRUaW1lclRocm90dGxpbmcoKTtcblxuICAgIC8vIFdvcmthcm91bmQgU2FmYXJpIGJ1Zzsgb2xkIGNhcHRpb25zIHBlcnNpc3QgaW4gUGljdHVyZSBpbiBQaWN0dXJlIG1vZGUgd2hlbiBNZWRpYVNvdXJjZSBidWZmZXJzIGNoYW5nZVxuICAgIGlmIChnZXRCcm93c2VyKCkgPT0gQnJvd3Nlci5TQUZBUkkpIHtcbiAgICAgIGNvbnN0IHZpZGVvID0gLyoqIEB0eXBlIHs/SFRNTFZpZGVvRWxlbWVudH0gKi8gKGdldFJlc291cmNlKCkudmlkZW9FbGVtZW50KCkpO1xuICAgICAgbGV0IGNhcHRpb25zVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgY29uc3QgbmF2aWdhdGVTdGFydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjYXB0aW9uc1Zpc2libGUgPSBzaG91bGRQcm9jZXNzQ2FwdGlvbnMoKTtcbiAgICAgICAgaWYgKGNhcHRpb25zVmlzaWJsZSkgZGlzYWJsZUNhcHRpb25zKCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgbmF2aWdhdGVGaW5pc2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKGNhcHRpb25zVmlzaWJsZSkgZW5hYmxlQ2FwdGlvbnMoKTtcbiAgICAgIH07XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc3BmcmVxdWVzdCcsIG5hdmlnYXRlU3RhcnQpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3NwZmRvbmUnLCBuYXZpZ2F0ZUZpbmlzaCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigneXQtbmF2aWdhdGUtc3RhcnQnLCBuYXZpZ2F0ZVN0YXJ0KTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd5dC1uYXZpZ2F0ZS1maW5pc2gnLCBuYXZpZ2F0ZUZpbmlzaCk7XG4gICAgfVxuICB9LFxuICBidXR0b25JbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKC8qKiBFbGVtZW50ICovIHBhcmVudCkge1xuICAgIHJldHVybiBwYXJlbnQubGFzdENoaWxkO1xuICB9LFxuICBidXR0b25QYXJlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcueXRwLXJpZ2h0LWNvbnRyb2xzJyk7XG4gIH0sXG4gIGJ1dHRvblNjYWxlOiAwLjY4LFxuICBjYXB0aW9uRWxlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jYXB0aW9uLXdpbmRvdycpO1xuICB9LFxuICB2aWRlb0VsZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd2aWRlby5odG1sNS1tYWluLXZpZGVvJyk7XG4gIH0sXG59O1xuIiwiaW1wb3J0IHsgaW5mbyB9IGZyb20gJy4vbG9nZ2VyLmpzJ1xuaW1wb3J0IHsgQnJvd3NlciwgZ2V0QnJvd3NlciwgZ2V0UmVzb3VyY2UsIHNldFJlc291cmNlIH0gZnJvbSAnLi9jb21tb24uanMnXG5pbXBvcnQgeyBhZGRWaWRlb0VsZW1lbnRMaXN0ZW5lcnMgfSBmcm9tICcuL3ZpZGVvLmpzJ1xuaW1wb3J0IHsgcmVzb3VyY2VzIH0gZnJvbSAnLi9yZXNvdXJjZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgY2hlY2tCdXR0b24sIGFkZEJ1dHRvbiB9IGZyb20gJy4vYnV0dG9uLmpzJ1xuaW1wb3J0IHsgc2hvdWxkUHJvY2Vzc0NhcHRpb25zLCBlbmFibGVDYXB0aW9ucywgcHJvY2Vzc0NhcHRpb25zLCBhZGRWaWRlb0NhcHRpb25UcmFja3MgfSBmcm9tICcuL2NhcHRpb25zLmpzJ1xuaW1wb3J0IHsgaW5pdGlhbGlzZUNhY2hlcyB9IGZyb20gJy4vY2FjaGUuanMnXG5cbi8qKlxuICogVHJhY2tzIGluamVjdGVkIGJ1dHRvbiBhbmQgY2FwdGlvbnNcbiAqL1xuY29uc3QgbXV0YXRpb25PYnNlcnZlciA9IGZ1bmN0aW9uKCkge1xuICBjb25zdCBjdXJyZW50UmVzb3VyY2UgPSBnZXRSZXNvdXJjZSgpO1xuXG4gIC8vIFByb2Nlc3MgdmlkZW8gY2FwdGlvbnMgaWYgbmVlZGVkXG4gIGlmIChzaG91bGRQcm9jZXNzQ2FwdGlvbnMoKSkgcHJvY2Vzc0NhcHRpb25zKCk7XG5cbiAgLy8gV29ya2Fyb3VuZCBDaHJvbWUncyBsYWNrIG9mIGFuIGVudGVyaW5nIFBpY3R1cmUgaW4gUGljdHVyZSBtb2RlIGV2ZW50IGJ5IG1vbml0b3JpbmcgYWxsIHZpZGVvIGVsZW1lbnRzXG4gIGlmIChnZXRCcm93c2VyKCkgPT0gQnJvd3Nlci5DSFJPTUUpIGFkZFZpZGVvRWxlbWVudExpc3RlbmVycygpO1xuXG4gIC8vIFdvcmthcm91bmQgU2FmYXJpIGJ1ZzsgY2FwdGlvbnMgYXJlIG5vdCBkaXNwbGF5ZWQgaWYgdGhlIHRyYWNrIGlzIGFkZGVkIGFmdGVyIHRoZSB2aWRlbyBoYXMgbG9hZGVkXG4gIGlmIChnZXRCcm93c2VyKCkgPT0gQnJvd3Nlci5TQUZBUkkgJiYgY3VycmVudFJlc291cmNlLmNhcHRpb25FbGVtZW50KSBhZGRWaWRlb0NhcHRpb25UcmFja3MoKTtcblxuICAvLyBUcnkgYWRkaW5nIHRoZSBidXR0b24gdG8gdGhlIHBhZ2UgaWYgbmVlZGVkXG4gIGlmIChjaGVja0J1dHRvbigpKSByZXR1cm47XG4gIGNvbnN0IGJ1dHRvblBhcmVudCA9IGN1cnJlbnRSZXNvdXJjZS5idXR0b25QYXJlbnQoKTtcbiAgaWYgKGJ1dHRvblBhcmVudCkge1xuICAgIGFkZEJ1dHRvbihidXR0b25QYXJlbnQpO1xuICAgIGlmIChjdXJyZW50UmVzb3VyY2UuYnV0dG9uRGlkQXBwZWFyKSBjdXJyZW50UmVzb3VyY2UuYnV0dG9uRGlkQXBwZWFyKCk7XG4gICAgaW5mbygnUGljdHVyZSBpbiBQaWN0dXJlIGJ1dHRvbiBhZGRlZCB0byB3ZWJwYWdlJyk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmlyc3Qgbm9uLXB1YmxpYyBzdWJkb21haW4gZnJvbSB0aGUgY3VycmVudCBkb21haW4gbmFtZVxuICpcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmNvbnN0IGdldEN1cnJlbnREb21haW5OYW1lID0gZnVuY3Rpb24oKSB7XG5cbiAgLy8gU3BlY2lhbCBjYXNlIGZvciBsb2NhbCBQbGV4IE1lZGlhIFNlcnZlciBhY2Nlc3MgdGhhdCBhbHdheXMgdXNlcyBwb3J0IDMyNDAwXG4gIGlmIChsb2NhdGlvbi5wb3J0ID09IDMyNDAwKSB7XG4gICAgcmV0dXJuICdwbGV4JztcbiAgfSBlbHNlIHtcbiAgICAvLyBSZW1vdmUgc3ViZG9tYWluIGFuZCBwdWJsaWMgc3VmZml4IChmYXIgZnJvbSBjb21wcmVoZW5zaXZlIGFzIG9ubHkgcmVtb3ZlcyAuWCBhbmQgLmNvLlkpXG4gICAgcmV0dXJuIChsb2NhdGlvbi5ob3N0bmFtZS5tYXRjaCgvKFteLl0rKVxcLig/OmNvbT9cXC4pP1teLl0rJC8pIHx8IFtdKVsxXTtcbiAgfVxufTtcblxuY29uc3QgZG9tYWluTmFtZSA9IGdldEN1cnJlbnREb21haW5OYW1lKCk7XG5cbmlmIChkb21haW5OYW1lIGluIHJlc291cmNlcykge1xuICBpbmZvKGBNYXRjaGVkIHNpdGUgJHtkb21haW5OYW1lfSAoJHtsb2NhdGlvbn0pYCk7XG4gIHNldFJlc291cmNlKHJlc291cmNlc1tkb21haW5OYW1lXSk7XG5cbiAgaW5pdGlhbGlzZUNhY2hlcygpO1xuXG4gIGlmIChnZXRCcm93c2VyKCkgPT0gQnJvd3Nlci5TQUZBUkkpIHtcbiAgICBlbmFibGVDYXB0aW9ucyh0cnVlKTtcbiAgfVxuXG4gIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobXV0YXRpb25PYnNlcnZlcik7XG4gIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQsIHtcbiAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgc3VidHJlZTogdHJ1ZSxcbiAgfSk7XG4gIG11dGF0aW9uT2JzZXJ2ZXIoKTtcbn1cbiJdLAoibmFtZXMiOlsiZXJyb3IiLCJjb25zb2xlIiwiYmluZCIsImxvZ2dpbmdQcmVmaXgiLCJjdXJyZW50UmVzb3VyY2UiLCJieXBhc3NCYWNrZ3JvdW5kVGltZXJUaHJvdHRsaW5nIiwicmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsImNocm9tZSIsInJ1bnRpbWUiLCJnZXRVUkwiLCJwYXRoIiwib25sb2FkIiwicmVxdWVzdC5vbmxvYWQiLCJzY3JpcHQiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImNyZWF0ZVRleHROb2RlIiwicmVzcG9uc2VUZXh0IiwiaGVhZCIsInNlbmQiLCJldmVudExpc3RlbmVycyIsInRvZ2dsZVBpY3R1cmVJblBpY3R1cmUiLCJ2aWRlbyIsInZpZGVvUGxheWluZ1BpY3R1cmVJblBpY3R1cmUiLCJwbGF5aW5nUGljdHVyZUluUGljdHVyZSIsInRleHRDb250ZW50IiwicmVtb3ZlIiwicmVtb3ZlQXR0cmlidXRlIiwicmVxdWVzdFBpY3R1cmVJblBpY3R1cmUiLCJhZGRQaWN0dXJlSW5QaWN0dXJlRXZlbnRMaXN0ZW5lciIsImxpc3RlbmVyIiwiaW5kZXgiLCJpbmRleE9mIiwicHVzaCIsImRpc3BhdGNoUGljdHVyZUluUGljdHVyZUV2ZW50IiwiZXhwZWN0ZWRWaWRlbyIsInZpZGVvRWxlbWVudCIsImlzUGxheWluZ1BpY3R1cmVJblBpY3R1cmUiLCJldmVudExpc3RlbmVyc0NvcHkiLCJzbGljZSIsInBvcCIsImhhc0F0dHJpYnV0ZSIsIkNIUk9NRV9QTEFZSU5HX1BJUF9BVFRSSUJVVEUiLCJ2aWRlb0RpZEVudGVyUGljdHVyZUluUGljdHVyZSIsImV2ZW50IiwidGFyZ2V0IiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uY2UiLCJsb2NhbGl6YXRpb25zIiwibG9jYWxpemVkU3RyaW5nIiwibGFuZ3VhZ2UiLCJuYXZpZ2F0b3IiLCJzdWJzdHJpbmciLCJsb2NhbGl6YXRpb25zRm9yS2V5Iiwia2V5Iiwic3RyaW5nIiwiZGVmYXVsdExhbmd1YWdlIiwiYnV0dG9uIiwiYWRkQnV0dG9uIiwicGFyZW50IiwiYnV0dG9uRWxlbWVudFR5cGUiLCJpZCIsIkJVVFRPTl9JRCIsInRpdGxlIiwiYnV0dG9uU3R5bGUiLCJzdHlsZSIsImNzc1RleHQiLCJidXR0b25DbGFzc05hbWUiLCJjbGFzc05hbWUiLCJpbWFnZSIsIndpZHRoIiwiaGVpZ2h0IiwiYnV0dG9uU2NhbGUiLCJ0cmFuc2Zvcm0iLCJidXR0b25JbWFnZSIsImJ1dHRvbkV4aXRJbWFnZSIsImJ1dHRvbkltYWdlVVJMIiwic3JjIiwiYnV0dG9uRXhpdEltYWdlVVJMIiwiYnV0dG9uSG92ZXJTdHlsZSIsImNzcyIsInByZXZlbnREZWZhdWx0IiwiaW5zZXJ0QmVmb3JlIiwicmVmZXJlbmNlTm9kZSIsImJ1dHRvbkluc2VydEJlZm9yZSIsImdldE5lc3RlZFNoYWRvd1Jvb3QiLCJzZWxlY3RvcnMiLCJkb20iLCJzZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3IiLCJzaGFkb3dSb290IiwiaW5pdGlhbGlzZUNhY2hlcyIsImNhY2hlRWxlbWVudFdyYXBwZXIiLCJlbGVtZW50RnVuY3Rpb24iLCJjYWNoZWRFbGVtZW50SWQiLCJieXBhc3NDYWNoZSIsImNhY2hlZEVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInVuY2FjaGVkRWxlbWVudCIsInVuaXF1ZUlkQ291bnRlciIsImJ1dHRvblBhcmVudCIsImNhcHRpb25FbGVtZW50IiwicmVzb3VyY2VzIiwiZG9tYWluIiwicmVzb3VyY2UiLCJlIiwicGFyZW50RWxlbWVudCIsImxhc3RDaGlsZCIsImludGVybmFsIiwiZnVsbHNjcmVlbkJ1dHRvbiIsImJ1dHRvbkRpZEFwcGVhciIsImxpdmVJbmRpY2F0b3IiLCJ0b29sdGlwIiwiY2xhc3NMaXN0IiwiYWRkIiwiYm90dG9tIiwibmV4dFNpYmxpbmciLCJ0b1VwcGVyQ2FzZSIsImRpc3BsYXkiLCJwcmV2aW91c1NpYmxpbmciLCJwcm9ncmVzc0JhciIsInByb2dyZXNzQmFyU3R5bGUiLCJ3aW5kb3ciLCJnZXRDb21wdXRlZFN0eWxlIiwicmlnaHQiLCJwYXJzZUludCIsInBsYXlCdXR0b24iLCJpbWciLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiZnVsbFNjcmVlbkJ1dHRvbiIsIm9yZGVyIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJuZWlnaGJvdXJCdXR0b24iLCJuZWlnaGJvdXJUaXRsZSIsImRpc3BhdGNoRXZlbnQiLCJFdmVudCIsIm11dGF0aW9uT2JzZXJ2ZXIiLCJlbGVtZW50cyIsImVsZW1lbnQiLCJkb21haW5OYW1lIiwibG9jYXRpb24iLCJwb3J0IiwiaG9zdG5hbWUiLCJtYXRjaCIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIl0KfQo=
|