1!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ExternalTracking=t():e.ExternalTracking=t()}("undefined"!=typeof self?self:this,(()=>(()=>{"use strict";var e={11:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.unsafeStringify=void 0;const n=r(746),i=[];for(let e=0;e<256;++e)i.push((e+256).toString(16).slice(1));function o(e,t=0){return(i[e[t+0]]+i[e[t+1]]+i[e[t+2]]+i[e[t+3]]+"-"+i[e[t+4]]+i[e[t+5]]+"-"+i[e[t+6]]+i[e[t+7]]+"-"+i[e[t+8]]+i[e[t+9]]+"-"+i[e[t+10]]+i[e[t+11]]+i[e[t+12]]+i[e[t+13]]+i[e[t+14]]+i[e[t+15]]).toLowerCase()}t.unsafeStringify=o,t.default=function(e,t=0){const r=o(e,t);if(!(0,n.default)(r))throw TypeError("Stringified UUID is invalid");return r}},24:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.startTimeTracking=t.TimeOnPageTracker=void 0;const n=r(910),i=r(266),o=r(976),s=r(867),a=r(244);var l=r(244);Object.defineProperty(t,"TimeOnPageTracker",{enumerable:!0,get:function(){return l.TimeOnPageTracker}}),t.startTimeTracking=e=>{if(!e||"undefined"==typeof window)return;const t=window.setInterval((()=>{try{const r=(0,s.getTrackingContext)(e);if(!r)return;window.clearInterval(t);const i=new a.TimeOnPageTracker((e=>(0,o.sendTimeSpentEvent)(e,r))),l=window;l[n.GLOBAL_TRACKING_KEY]=l[n.GLOBAL_TRACKING_KEY]||{},l[n.GLOBAL_TRACKING_KEY].timeTracker=i}catch(e){i.logger.error("Error in time tracking",e),window.clearInterval(t)}}),300)}},67:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.cleanLabelText=t.getFieldsetLegend=t.getContainerLabel=t.getCombinedLabel=t.getSubLabel=t.getMainLabel=t.isCompoundField=t.isGravityFormsField=void 0;var n=r(780);Object.defineProperty(t,"isGravityFormsField",{enumerable:!0,get:function(){return n.isGravityFormsField}}),Object.defineProperty(t,"isCompoundField",{enumerable:!0,get:function(){return n.isCompoundField}}),Object.defineProperty(t,"getMainLabel",{enumerable:!0,get:function(){return n.getMainLabel}}),Object.defineProperty(t,"getSubLabel",{enumerable:!0,get:function(){return n.getSubLabel}}),Object.defineProperty(t,"getCombinedLabel",{enumerable:!0,get:function(){return n.getCombinedLabel}}),Object.defineProperty(t,"getContainerLabel",{enumerable:!0,get:function(){return n.getContainerLabel}}),Object.defineProperty(t,"getFieldsetLegend",{enumerable:!0,get:function(){return n.getFieldsetLegend}}),Object.defineProperty(t,"cleanLabelText",{enumerable:!0,get:function(){return n.cleanLabelText}})},110:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ExternalTracker=void 0;const n=r(436),i=r(716),o=r(266),s=r(910);t.ExternalTracker=class{constructor(e){if(this.state={initialized:!1,trackingId:e.trackingId},this.apiClient=new n.ApiClient(e.trackingId,e.apiEndpoint),e.debug){const e=window;e[s.GLOBAL_TRACKING_KEY]=e[s.GLOBAL_TRACKING_KEY]||{},e[s.GLOBAL_TRACKING_KEY].debug=!0}o.logger.log("ExternalTracker created with config:",e),this.init()}
1async init(){if(this.state.initialized)o.logger.warn("Tracker already initialized");else try{this.state.sessionId=(0,o.generateSessionId)(),(0,o.storeSessionIdInCookie)(this.state.trackingId,this.state.sessionId),this.apiClient.setTrackingContext(this.state.sessionId),(0,i.startPageTracking)((async e=>{e.properties={...e.properties,sessionId:this.state.sessionId},await this.sendEvent(e)})),(0,i.startFormTracking)((async e=>{e.properties={...e.properties,sessionId:this.state.sessionId},await this.apiClient.submitForm(e)})),this.state.initialized=!0,o.logger.log("Tracker initialized successfully with sessionId:",this.state.sessionId)}catch(e){throw o.logger.error("Failed to initialize tracker:",e),e}}async sendEvent(e){var t;this.state.userId&&(e.properties={...e.properties,userId:this.state.userId,...this.state.userProperties});const r=(null===(t=null==e?void 0:e.properties)||void 0===t?void 0:t.deviceType)||(0,o.getDeviceType)();e.properties={...e.properties,sessionId:this.state.sessionId,deviceType:r},await this.apiClient.sendEvent(e)}}},129:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createTracker=void 0;const n=r(110),i=r(266),o=r(479);t.createTracker=e=>{if(!(0,o.validateConfig)(e)){const e=new Error("Invalid tracking configuration provided");throw i.logger.critical("Failed to create tracker:",e),e}try{const t=new n.ExternalTracker(e);return i.logger.log("Tracker created successfully with ID:",e.trackingId),t}catch(e){throw i.logger.critical("Error creating tracker:",e),e}}},156:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),i=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0});const o=r(850),s=r(24),a=r(266);i(r(574),t),(()=>{try{const e=(0,o.initializeFromScript)();e?(a.logger.log("Tracking initialized successfully"),(0,s.startTimeTracking)(e)):(a.logger.critical("External Tracking failed to initialize"),a.logger.critical("Make sure to include data-tracking-id in your script tag"))}catch(e){a.logger.critical("Initialization failed:",e)}})()},168:function(e,t,r){var n,i=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var i=Object.getOwnPropertyDescriptor(t,r);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,i)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||(n=function(e){return n=Object.getOwnPropertyNames||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r);return t},n(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r=n(e),s=0;s<r.length;s++)"default"!==r[s]&&i(t,e,r[s]);return o(t,e),t});Object.defineProperty(t,"__esModule",{value:!0}),t.cleanLabelText=t.isGravityFormsField=t.getGravityFormsCombinedLabel=t.GravityForms=void 0,t.GravityForms=s(r(67));var a=r(67);Object.defineProperty(t,"getGravityFormsCombinedLabel",{enumerable:!0,get:function(){return a.getCombinedLabel}}),Object.defineProperty(t,"isGravityFormsField",{enumerable:!0,get:function(){return a.isGravityFormsField}}),Object.defineProperty(t,"cleanLabelText",{enumerable:!0,get:function(){return a.cleanLabelText}})},182:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.version=t.validate=t.v7=t.v6ToV1=t.v6=t.v5=t.v4=t.v3=t.v1ToV6=t.v1=t.stringify=t.parse=t.NIL=t.MAX=void 0;var n=r(196);Object.defineProperty(t,"MAX",{enumerable:!0,get:function(){return n.default}});var i=r(465);Object.defineProperty(t,"NIL",{enumerable:!0,get:function(){return i.default}});var o=r(797);Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return o.default}});var s=r(11);Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return s.default}});var a=r(425);Object.defineProperty(t,"v1",{enumerable:!0,get:function(){return a.default}});var l=r(568);Object.defineProperty(t,"v1ToV6",{enumerable:!0,get:function(){return l.default}});var c=r(591);Object.defineProperty(t,"v3",{enumerable:!0,get:function(){return c.default}});var d=r(286);Object.defineProperty(t,"v4",{enumerable:!0,get:function(){return d.default}});var u=r(557);Object.defineProperty(t,"v5",{enumerable:!0,get:function(){return u.default}});var f=r(356);Object.defineProperty(t,"v6",{enumerable:!0,get:function(){return f.default}});var g=r(268);Object.defineProperty(t,"v6ToV1",{enumerable:!0,get:function(){return g.default}});var m=r(299);Object.defineProperty(t,"v7",{enumerable:!0,get:function(){return m.default}});var p=r(746);Object.defineProperty(t,"validate",{enumerable:!0,get:function(){return p.default}});var v=r(770);Object.defineProperty(t,"version",{enumerable:!0,get:function(){return v.default}})},196:(e,t)=>
1{Object.defineProperty(t,"__esModule",{value:!0}),t.default="ffffffff-ffff-ffff-ffff-ffffffffffff"},244:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.TimeOnPageTracker=void 0;const n=r(266),i=18e5,o=["pointerdown","pointermove","keydown","scroll","touchstart","touchmove"];t.TimeOnPageTracker=class{constructor(e){this.activeTimeMs=0,this.updateTimer=null,this.isIdle=!1,this.destroyed=!1,this.flushed=!1,this.sessionExpired=!1,this.onActivity=()=>{if(this.destroyed)return;const e=Date.now();this.sessionExpired&&(this.sessionStart=e,this.lastTick=e,this.activeTimeMs=0,this.flushed=!1,this.sessionExpired=!1),this.lastActivityAt=e,this.isIdle=!1},this.onVisibilityChange=()=>{document.hidden?this.checkTimeout():this.onActivity()},this.onUnload=()=>{this.destroyed||this.emitUpdate()},this.tick=()=>{if(this.destroyed)return;const e=Date.now();this.isIdle=e-this.lastActivityAt>=i,document.hidden||this.isIdle||(this.activeTimeMs+=e-this.lastTick),this.lastTick=e,this.checkTimeout()};const t=Date.now();this.onSessionComplete=e,this.sessionStart=t,this.lastActivityAt=t,this.lastTick=t,this.bind()}bind(){try{o.forEach((e=>window.addEventListener(e,this.onActivity,{passive:!0}))),document.addEventListener("visibilitychange",this.onVisibilityChange),window.addEventListener("beforeunload",this.onUnload,{capture:!0}),window.addEventListener("pagehide",this.onUnload,{capture:!0}),this.updateTimer=window.setInterval(this.tick,1e3)}catch(e){n.logger.error("Failed to bind event listeners",e)}}checkTimeout(){Date.now()-this.lastActivityAt>=i&&(this.emitUpdate(),this.sessionExpired=!0)}emitUpdate(){if(this.destroyed||this.flushed)return;this.flushed=!0;const e=Date.now();document.hidden||this.isIdle||(this.activeTimeMs+=e-this.lastTick),this.lastTick=e,this.onSessionComplete({sessionStart:this.sessionStart,sessionEnd:e,timeSpentMs:Math.max(0,Math.round(this.activeTimeMs))})}destroy(){this.destroyed||(this.destroyed=!0,o.forEach((e=>window.removeEventListener(e,this.onActivity))),document.removeEventListener("visibilitychange",this.onVisibilityChange),window.removeEventListener("beforeunload",this.onUnload),window.removeEventListener("pagehide",this.onUnload),this.updateTimer&&window.clearInterval(this.updateTimer))}}},266:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getFormIdentifier=t.getFormattedTimezone=t.getLocalTimeZoneOffset=t.getLocalTimeZone=t.getPageMetadata=t.getDeviceType=t.debounce=t.setInStorage=t.getFromStorage=t.getSessionIdFromCookie=t.storeSessionIdInCookie=t.getUserData=t.storeUserData=t.setCookie=t.getCookie=t.generateSessionId=t.isPasswordLikeField=t.containsPassword=t.parseFormData=t.logger=void 0;const n=r(182),i=r(628);var o=r(628);Object.defineProperty(t,"logger",{enumerable:!0,get:function(){return o.logger}});var s=r(952);Object.defineProperty(t,"parseFormData",{enumerable:!0,get:function(){return s.parseFormData}});var a=r(378);Object.defineProperty(t,"containsPassword",{enumerable:!0,get:function(){return a.containsPassword}}),Object.defineProperty(t,"isPasswordLikeField",{enumerable:!0,get:function(){return a.isPasswordLikeField}}),t.generateSessionId=()=>(0,n.v4)(),t.getCookie=e=>{var t;try{const r=`; ${document.cookie}`.split(`; ${e}=`);if(2===r.length)return(null===(t=r.pop())||void 0===t?void 0:t.split(";").shift())||null}catch(e){i.logger.error("Error getting cookie:",e)}return null},t.setCookie=(e,t,r)=>{try{const n=new Date;n.setTime(n.getTime()+24*r*60*60*1e3);const i=`expires=${n.toUTCString()}`;document.cookie=`${e}=${t};${i};path=/;SameSite=Lax`}catch(e){i.logger.error("Error setting cookie:",e)}},t.storeUserData=e=>{try{"undefined"!=typeof window&&window.localStorage&&window.localStorage.setItem("_ud",JSON.stringify(e))}catch(e){i.logger.error("Error storing user data:",e)}},t.getUserData=()=>{try{if("undefined"!=typeof window&&window.localStorage){const e=window.localStorage.getItem("_ud");if(!e)return null;const t=JSON.parse(e);if(t&&"object"==typeof t&&"customer_id"in t){const e=t.customer_id;if(null!=e){const r=String(e).trim();r&&(t.contactId=r)}}return t}}catch(e){i.logger.error("Error getting user data:",e)}return null},t.storeSessionIdInCookie=(e,r)=>{const n=`lc_session_${e}`;if((0,t.setCookie)(n,r,1),(0,t.getCookie)(n)!==r)try{"undefined"!=typeof window&&window.sessionStorage&&(window.sessionStorage.setItem(n,r),i.logger.api(`SessionId stored in sessionStorage (cookie fallback): ${r}`))}catch(e){i.logger.error("Both cookie and sessionStorage failed for sessionId storage",e)}else i.logger.api(`SessionId stored in cookie: ${r}`)},t.getSessionIdFromCookie=e=>{const r=`lc_session_${e}`,n=(0,t.getCookie)(r);if(n)return n;try{if("undefined"!=typeof window&&window.sessionStorage){const e=window.sessionStorage.getItem(r);if(e)return i.logger.api(`SessionId retrieved from sessionStorage (cookie fallback): ${e}`),e}}catch(e){i.logger.error("Both cookie and sessionStorage failed for sessionId retrieval",e)}return null},t.getFromStorage=e=>{try{if("undefined"!=typeof window&&window.localStorage)return window.localStorage.getItem(e)}catch(e){i.logger.error("Error getting from storage:",e)}return null},t.setInStorage=(e,t)=>
1{try{"undefined"!=typeof window&&window.localStorage&&window.localStorage.setItem(e,t)}catch(e){i.logger.error("Error setting in storage:",e)}},t.debounce=(e,t)=>{let r;return function(...n){clearTimeout(r),r=setTimeout((()=>{clearTimeout(r),e(...n)}),t)}},t.getDeviceType=()=>{const e="undefined"!=typeof navigator?navigator:void 0,t=((null==e?void 0:e.userAgent)||"").toLowerCase(),r=(null==e?void 0:e.maxTouchPoints)||0,n=null==e?void 0:e.userAgentData,i=!0===(null==n?void 0:n.mobile);return t.includes("ipad")||t.includes("tablet")||t.includes("android")&&!t.includes("mobile")||t.includes("macintosh")&&r>1?"tablet":i||t.includes("mobi")||t.includes("iphone")||t.includes("ipod")||t.includes("android")&&t.includes("mobile")?"mobile":"desktop"},t.getPageMetadata=()=>({title:document.title,url:window.location.href,path:window.location.pathname,referrer:document.referrer,userAgent:navigator.userAgent}),t.getLocalTimeZone=()=>Intl.DateTimeFormat().resolvedOptions().timeZone,t.getLocalTimeZoneOffset=()=>{const e=(new Date).toString().match(/([A-Z]+[\+-][0-9]{2})([0-9]{2})/);return e?`(${e[1]}:${e[2]})`:""},t.getFormattedTimezone=()=>`${(0,t.getLocalTimeZone)()} ${(0,t.getLocalTimeZoneOffset)()}`;const l=[".gform_wrapper",".gf_browser_chrome",".wpcf7",".wpcf7-form",".with_frm_style",".frm_forms_container",".frm-show-form",'[id^="frm_form_"]',".fluentform",".ff-el-form--container",".everest-forms",".happyforms",".happyforms-form",".happyforms-form-wrap",".nf-form-cont",".ninja-forms-form-wrap",".wpforms-container",".wpforms-form-container",".elementor-widget-form",".elementor-form"],c=(e,t)=>{var r;return(null===(r=e.getAttribute(t))||void 0===r?void 0:r.trim())||void 0},d=e=>{var t,r;const n=e.closest(".gform_wrapper, .gf_browser_chrome");if(n){const e=n.querySelector(".gform_title"),r=null===(t=null==e?void 0:e.textContent)||void 0===t?void 0:t.trim();if(r)return r}const i=e.querySelector("h1, h2, h3, h4, legend");if(null===(r=null==i?void 0:i.textContent)||void 0===r?void 0:r.trim())return i.textContent.trim();const o=e.getAttribute("data-title")||e.getAttribute("aria-label");return(null==o?void 0:o.trim())?o.trim():void 0};t.getFormIdentifier=e=>{try{let r=null;if(r="undefined"!=typeof HTMLFormElement&&e instanceof HTMLFormElement?e:e&&"querySelector"in e?e.querySelector("form"):document.querySelector("form"),!r)return;if(t=r,l.some((e=>!!t.closest(e)))){return d(r)||(e=>c(e,"name")||c(e,"id")||c(e,"data-formid")||c(e,"data-name"))(r)||"Unidentified Form"}const n=(e=>c(e,"id")||c(e,"name")||c(e,"data-formid")||c(e,"data-name"))(r);if(n)return n;return d(r)||"Unidentified Form"}catch(e){return void i.logger.error("Error getting form identifier:",e)}var t}},268:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});const n=r(797),i=r(11);t.default=function(e){const t=(r="string"==typeof e?(0,n.default)(e):e,Uint8Array.of((15&r[3])<<4|r[4]>>4&15,(15&r[4])<<4|(240&r[5])>>4,(15&r[5])<<4|15&r[6],r[7],(15&r[1])<<4|(240&r[2])>>4,(15&r[2])<<4|(240&r[3])>>4,16|(240&r[0])>>4,(15&r[0])<<4|(240&r[1])>>4,r[8],r[9],r[10],r[11],r[12],r[13],r[14],r[15]));var r;return"string"==typeof e?(0,i.unsafeStringify)(t):t}},286:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});const n=r(779),i=r(291),o=r(11);t.default=function(e,t,r){if(n.default.randomUUID&&!t&&!e)return n.default.randomUUID();const s=(e=e||{}).random??e.rng?.()??(0,i.default)();if(s.length<16)throw new Error("Random bytes length must be >= 16");if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,t){if((r=r||0)<0||r+16>t.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let e=0;e<16;++e)t[r+e]=s[e];return t}return(0,o.unsafeStringify)(s)}},291:(e,t)=>{let r;Object.defineProperty(t,"__esModule",{value:!0});const n=new Uint8Array(16);t.default=function(){if(!r){if("undefined"==typeof crypto||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");r=crypto.getRandomValues.bind(crypto)}return r(n)}},299:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.updateV7State=void 0;const n=r(291),i=r(11),o={};function s(e,t,r){return e.msecs??=-1/0,e.seq??=0,t>e.msecs?(e.seq=r[6]<<23|r[7]<<16|r[8]<<8|r[9],e.msecs=t):(e.seq=e.seq+1|0,0===e.seq&&e.msecs++),e}function a(e,t,r,n,i=0){if(e.length<16)throw new Error("Random bytes length must be >= 16");if(n){if(i<0||i+16>n.length)throw new RangeError(`UUID byte range ${i}:${i+15} is out of buffer bounds`)}else n=new Uint8Array(16),i=0;return t??=Date.now(),r??=127*e[6]<<24|e[7]<<16|e[8]<<8|e[9],n[i++]=t/1099511627776&255,n[i++]=t/4294967296&255,n[i++]=t/16777216&255,n[i++]=t/65536&255,n[i++]=t/256&255,n[i++]=255&t,n[i++]=112|r>>>28&15,n[i++]=r>>>20&255,n[i++]=128|r>>>14&63,n[i++]=r>>>6&255,n[i++]=r<<2&255|3&e[10],n[i++]=e[11],n[i++]=e[12],n[i++]=e[13],n[i++]=e[14],n[i++]=e[15],n}t.updateV7State=s,t.default=function(e,t,r){let l;if(e)l=a(e.random??e.rng?.()??(0,n.default)(),e.msecs,e.seq,t,r);else{const e=Date.now(),i=(0,n.default)();s(o,e,i),l=a(i,o.msecs,o.seq,t,r)}return t??(0,i.unsafeStringify)(l)}},338:(e,t)=>
1{function r(e){return 14+(e+64>>>9<<4)+1}function n(e,t){const r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function i(e,t,r,i,o,s){return n((a=n(n(t,e),n(i,s)))<<(l=o)|a>>>32-l,r);var a,l}function o(e,t,r,n,o,s,a){return i(t&r|~t&n,e,t,o,s,a)}function s(e,t,r,n,o,s,a){return i(t&n|r&~n,e,t,o,s,a)}function a(e,t,r,n,o,s,a){return i(t^r^n,e,t,o,s,a)}function l(e,t,r,n,o,s,a){return i(r^(t|~n),e,t,o,s,a)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return function(e){const t=new Uint8Array(4*e.length);for(let r=0;r<4*e.length;r++)t[r]=e[r>>2]>>>r%4*8&255;return t}(function(e,t){const i=new Uint32Array(r(t)).fill(0);i.set(e),i[t>>5]|=128<<t%32,i[i.length-1]=t,e=i;let c=1732584193,d=-271733879,u=-1732584194,f=271733878;for(let t=0;t<e.length;t+=16){const r=c,i=d,g=u,m=f;c=o(c,d,u,f,e[t],7,-680876936),f=o(f,c,d,u,e[t+1],12,-389564586),u=o(u,f,c,d,e[t+2],17,606105819),d=o(d,u,f,c,e[t+3],22,-1044525330),c=o(c,d,u,f,e[t+4],7,-176418897),f=o(f,c,d,u,e[t+5],12,1200080426),u=o(u,f,c,d,e[t+6],17,-1473231341),d=o(d,u,f,c,e[t+7],22,-45705983),c=o(c,d,u,f,e[t+8],7,1770035416),f=o(f,c,d,u,e[t+9],12,-1958414417),u=o(u,f,c,d,e[t+10],17,-42063),d=o(d,u,f,c,e[t+11],22,-1990404162),c=o(c,d,u,f,e[t+12],7,1804603682),f=o(f,c,d,u,e[t+13],12,-40341101),u=o(u,f,c,d,e[t+14],17,-1502002290),d=o(d,u,f,c,e[t+15],22,1236535329),c=s(c,d,u,f,e[t+1],5,-165796510),f=s(f,c,d,u,e[t+6],9,-1069501632),u=s(u,f,c,d,e[t+11],14,643717713),d=s(d,u,f,c,e[t],20,-373897302),c=s(c,d,u,f,e[t+5],5,-701558691),f=s(f,c,d,u,e[t+10],9,38016083),u=s(u,f,c,d,e[t+15],14,-660478335),d=s(d,u,f,c,e[t+4],20,-405537848),c=s(c,d,u,f,e[t+9],5,568446438),f=s(f,c,d,u,e[t+14],9,-1019803690),u=s(u,f,c,d,e[t+3],14,-187363961),d=s(d,u,f,c,e[t+8],20,1163531501),c=s(c,d,u,f,e[t+13],5,-1444681467),f=s(f,c,d,u,e[t+2],9,-51403784),u=s(u,f,c,d,e[t+7],14,1735328473),d=s(d,u,f,c,e[t+12],20,-1926607734),c=a(c,d,u,f,e[t+5],4,-378558),f=a(f,c,d,u,e[t+8],11,-2022574463),u=a(u,f,c,d,e[t+11],16,1839030562),d=a(d,u,f,c,e[t+14],23,-35309556),c=a(c,d,u,f,e[t+1],4,-1530992060),f=a(f,c,d,u,e[t+4],11,1272893353),u=a(u,f,c,d,e[t+7],16,-155497632),d=a(d,u,f,c,e[t+10],23,-1094730640),c=a(c,d,u,f,e[t+13],4,681279174),f=a(f,c,d,u,e[t],11,-358537222),u=a(u,f,c,d,e[t+3],16,-722521979),d=a(d,u,f,c,e[t+6],23,76029189),c=a(c,d,u,f,e[t+9],4,-640364487),f=a(f,c,d,u,e[t+12],11,-421815835),u=a(u,f,c,d,e[t+15],16,530742520),d=a(d,u,f,c,e[t+2],23,-995338651),c=l(c,d,u,f,e[t],6,-198630844),f=l(f,c,d,u,e[t+7],10,1126891415),u=l(u,f,c,d,e[t+14],15,-1416354905),d=l(d,u,f,c,e[t+5],21,-57434055),c=l(c,d,u,f,e[t+12],6,1700485571),f=l(f,c,d,u,e[t+3],10,-1894986606),u=l(u,f,c,d,e[t+10],15,-1051523),d=l(d,u,f,c,e[t+1],21,-2054922799),c=l(c,d,u,f,e[t+8],6,1873313359),f=l(f,c,d,u,e[t+15],10,-30611744),u=l(u,f,c,d,e[t+6],15,-1560198380),d=l(d,u,f,c,e[t+13],21,1309151649),c=l(c,d,u,f,e[t+4],6,-145523070),f=l(f,c,d,u,e[t+11],10,-1120210379),u=l(u,f,c,d,e[t+2],15,718787259),d=l(d,u,f,c,e[t+9],21,-343485551),c=n(c,r),d=n(d,i),u=n(u,g),f=n(f,m)}return Uint32Array.of(c,d,u,f)}(function(e){if(0===e.length)return new Uint32Array;const t=new Uint32Array(r(8*e.length)).fill(0);for(let r=0;r<e.length;r++)t[r>>2]|=(255&e[r])<<r%4*8;return t}(e),8*e.length))}},356:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});const n=r(11),i=r(425),o=r(568);t.default=function(e,t,r){e??={},r??=0;let s=(0,i.default)({...e,_v6:!0},new Uint8Array(16));if(s=(0,o.default)(s),t){for(let e=0;e<16;e++)t[r+e]=s[e];return t}return(0,n.unsafeStringify)(s)}},378:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isPasswordLikeField=t.containsPassword=void 0,t.containsPassword=e=>{var t,r,n;try{return!!(null===(n=null===(t=null==e?void 0:e.toLowerCase)||void 0===t?void 0:(r=t.call(e)).includes)||void 0===n?void 0:n.call(r,"password"))}catch(e){return!1}},t.isPasswordLikeField=(e,r)=>(0,t.containsPassword)(null==e?void 0:e.type)||(0,t.containsPassword)(null==e?void 0:e.name)||(0,t.containsPassword)(null==e?void 0:e.id)||(0,t.containsPassword)(null==e?void 0:e.placeholder)||(0,t.containsPassword)(r)},425:(e,t,r)=>
1{Object.defineProperty(t,"__esModule",{value:!0}),t.updateV1State=void 0;const n=r(291),i=r(11),o={};function s(e,t,r){return e.msecs??=-1/0,e.nsecs??=0,t===e.msecs?(e.nsecs++,e.nsecs>=1e4&&(e.node=void 0,e.nsecs=0)):t>e.msecs?e.nsecs=0:t<e.msecs&&(e.node=void 0),e.node||(e.node=r.slice(10,16),e.node[0]|=1,e.clockseq=16383&(r[8]<<8|r[9])),e.msecs=t,e}function a(e,t,r,n,i,o,s=0){if(e.length<16)throw new Error("Random bytes length must be >= 16");if(o){if(s<0||s+16>o.length)throw new RangeError(`UUID byte range ${s}:${s+15} is out of buffer bounds`)}else o=new Uint8Array(16),s=0;t??=Date.now(),r??=0,n??=16383&(e[8]<<8|e[9]),i??=e.slice(10,16);const a=(1e4*(268435455&(t+=122192928e5))+r)%4294967296;o[s++]=a>>>24&255,o[s++]=a>>>16&255,o[s++]=a>>>8&255,o[s++]=255&a;const l=t/4294967296*1e4&268435455;o[s++]=l>>>8&255,o[s++]=255&l,o[s++]=l>>>24&15|16,o[s++]=l>>>16&255,o[s++]=n>>>8|128,o[s++]=255&n;for(let e=0;e<6;++e)o[s++]=i[e];return o}t.updateV1State=s,t.default=function(e,t,r){let l;const c=e?._v6??!1;if(e){const t=Object.keys(e);1===t.length&&"_v6"===t[0]&&(e=void 0)}if(e)l=a(e.random??e.rng?.()??(0,n.default)(),e.msecs,e.nsecs,e.clockseq,e.node,t,r);else{const e=Date.now(),i=(0,n.default)();s(o,e,i),l=a(i,o.msecs,o.nsecs,c?void 0:o.clockseq,c?void 0:o.node,t,r)}return t??(0,i.unsafeStringify)(l)}},436:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ApiClient=void 0;const n=r(574),i=r(266),o=r(963),s=r(910);t.ApiClient=class{constructor(e,t){this.trackingId=e,this.apiEndpoint=t||this.determineApiEndpoint();const r={maxEventsPerSecond:5,maxRetries:3,retryDelayMs:1e3,maxQueueSize:100};this.eventQueue=new o.EventQueue(r),this.eventQueue.setSender((async e=>{await this.sendEventDirectly(e)})),i.logger.log("ApiClient initialized with rate limit:",r.maxEventsPerSecond,"events per second")}determineApiEndpoint(){try{const e=document.querySelector(`script[src*="${s.SCRIPT_BASENAME}"]`);if(null==e?void 0:e.src){const t=e.src;return i.logger.api("Script source detected:",t),t.includes("staging")?(i.logger.api("Staging environment detected, using staging API endpoint"),s.API_ENDPOINTS.staging):t.includes("localhost")?(i.logger.api("Localhost environment detected, using localhost API endpoint"),s.API_ENDPOINTS.local):(i.logger.api("Production environment detected, using production API endpoint"),s.API_ENDPOINTS.production)}return i.logger.api("No script tag found, defaulting to production API endpoint"),s.API_ENDPOINTS.production}catch(e){return i.logger.error("Error determining API endpoint:",e),i.logger.api("Falling back to production API endpoint due to error"),s.API_ENDPOINTS.production}}setTrackingContext(e){this.sessionId=e}async sendEvent(e){var t;try{e.properties={...e.properties,deviceType:(null===(t=null==e?void 0:e.properties)||void 0===t?void 0:t.deviceType)||(0,i.getDeviceType)()};const r=this.sessionId||(0,i.getSessionIdFromCookie)(this.trackingId),o=(0,i.getUserData)();let s={...e};if(e.type===n.EventType.FORM_SUBMISSION&&"formData"in e){const t=e,r={...t,formData:{...t.formData,Timezone:(0,i.getFormattedTimezone)()}};s=r,i.logger.api("Enhanced form data with timezone:",{timezone:r.formData.Timezone})}const a={...s,trackingId:this.trackingId,sessionId:r,contactId:null==o?void 0:o.contactId,userId:null==o?void 0:o.userId};i.logger.api("Queueing event payload:",{type:s.type,sessionId:r,trackingId:this.trackingId}),await this.eventQueue.enqueue(a,void 0,e.type===n.EventType.FORM_SUBMISSION),i.logger.api("Event queued successfully:",s.type)}catch(e){i.logger.error("Error queueing event:",e)}}async sendEventDirectly(e){const t=`${this.apiEndpoint}/external-tracking/events`;if(e&&e.files&&"undefined"!=typeof FormData)try{const r=new FormData,{files:n,...o}=e;r.append("event",JSON.stringify(o)),Object.keys(n).forEach((e=>{const t=n[e];(Array.isArray(t)?t:[t]).forEach((t=>{try{t instanceof File&&r.append(e,t)}catch(e){}}))}));const s=await fetch(t,{method:"POST",body:r});if(!s.ok)throw new Error(`Failed to send event: ${s.statusText}`);return void i.logger.api("Event sent successfully (multipart):",e.type)}catch(e){i.logger.error("Error sending multipart event, falling back to JSON:",e)}const r=JSON.stringify(e),o=e.type===n.EventType.FORM_SUBMISSION&&
1!e.files&&new Blob([r]).size<65536,s=await fetch(t,{keepalive:o,method:"POST",headers:{"Content-Type":"application/json"},body:r});if(!s.ok)throw new Error(`Failed to send event: ${s.statusText}`);i.logger.api("Event sent successfully:",e.type)}async submitForm(e){try{i.logger.api("Form submission:",e.formData),await this.sendEvent(e)}catch(e){i.logger.error("Error submitting form:",e)}}}},465:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default="00000000-0000-0000-0000-000000000000"},479:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.validateConfig=t.getConfigFromScriptAttributes=void 0;const n=r(266),i=r(910);t.getConfigFromScriptAttributes=()=>{try{const e=document.currentScript||document.querySelector(`script[src*="${i.SCRIPT_BASENAME}"]`);if(!e)return n.logger.warn("Could not find script tag for configuration"),null;const t=e.getAttribute("data-debug");if("true"===t){const e=window;e[i.GLOBAL_TRACKING_KEY]=e[i.GLOBAL_TRACKING_KEY]||{},e[i.GLOBAL_TRACKING_KEY].debug=!0}const r=e.getAttribute("data-tracking-id");if(!r)return n.logger.critical("Required data-tracking-id attribute not found"),n.logger.critical('Please add data-tracking-id="your-tracking-id" to the script tag'),null;const o={trackingId:r};"true"===t&&(o.debug=!0);
1const s=e.getAttribute("data-api-endpoint");return s&&(o.apiEndpoint=s),n.logger.log("Configuration loaded from script attributes:",o),o}catch(e){return n.logger.critical("Error reading script attributes:",e),null}},t.validateConfig=e=>e&&"object"==typeof e?e.trackingId&&"string"==typeof e.trackingId?e.apiEndpoint&&"string"!=typeof e.apiEndpoint?(n.logger.critical("Invalid configuration: apiEndpoint must be a string"),!1):!e.debug||"boolean"==typeof e.debug||(n.logger.critical("Invalid configuration: debug must be a boolean"),!1):(n.logger.critical("Invalid configuration: trackingId must be a non-empty string"),!1):(n.logger.critical("Invalid configuration: must be an object"),!1)},557:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=void 0;const n=r(829),i=r(988);var o=r(988);function s(e,t,r,o){return(0,i.default)(80,n.default,e,t,r,o)}Object.defineProperty(t,"DNS",{enumerable:!0,get:function(){return o.DNS}}),Object.defineProperty(t,"URL",{enumerable:!0,get:function(){return o.URL}}),s.DNS=i.DNS,s.URL=i.URL,t.default=s},568:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});const n=r(797),i=r(11);t.default=function(e){const t=(r="string"==typeof e?(0,n.default)(e):e,Uint8Array.of((15&r[6])<<4|r[7]>>4&15,(15&r[7])<<4|(240&r[4])>>4,(15&r[4])<<4|(240&r[5])>>4,(15&r[5])<<4|(240&r[0])>>4,(15&r[0])<<4|(240&r[1])>>4,(15&r[1])<<4|(240&r[2])>>4,96|15&r[2],r[3],r[8],r[9],r[10],r[11],r[12],r[13],r[14],r[15]));var r;return"string"==typeof e?(0,i.unsafeStringify)(t):t}},574:(e,t)=>
1{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.EventType=void 0,function(e){e.SCRIPT_PAGE_VIEW="external_script_page_view",e.FORM_SUBMISSION="external_form_submission"}(r||(t.EventType=r={}))},591:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=void 0;const n=r(338),i=r(988);var o=r(988);function s(e,t,r,o){return(0,i.default)(48,n.default,e,t,r,o)}Object.defineProperty(t,"DNS",{enumerable:!0,get:function(){return o.DNS}}),Object.defineProperty(t,"URL",{enumerable:!0,get:function(){return o.URL}}),s.DNS=i.DNS,s.URL=i.URL,t.default=s},628:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.logger=void 0;const n=r(910);t.logger={api:(e,...t)=>{i()&&console.log(`${n.LOGGER_PREFIX} ${e}`,...t)},error:(e,...t)=>{i()&&console.error(`${n.LOGGER_PREFIX} ${e}`,...t)},critical:(e,...t)=>{console.error(`${n.LOGGER_ERROR_PREFIX} ${e}`,...t)},log:(e,...t)=>{i()&&console.log(`${n.LOGGER_PREFIX} ${e}`,...t)},warn:(e,...t)=>{i()&&console.warn(`${n.LOGGER_PREFIX} ${e}`,...t)}};const i=()=>{var e;if("undefined"==typeof window)return!1;const t=window;return Boolean(null===(e=null==t?void 0:t[n.GLOBAL_TRACKING_KEY])||void 0===e?void 0:e.debug)}},697:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i},716:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.startFormTracking=t.startPageTracking=void 0;const n=r(574),i=r(266),o=new WeakSet;let s=null;t.startPageTracking=e=>{i.logger.log("Tracking initial page view");const t=(0,i.getPageMetadata)(),r=(0,i.getFormIdentifier)();e({type:n.EventType.SCRIPT_PAGE_VIEW,timestamp:Date.now(),...t,...r?{formId:r}:{}})},t.startFormTracking=e=>{i.logger.log("Starting form submission tracking");const t=new WeakMap;let r=!1;const n=()=>{var e;const n=window.gform;!r&&(null===(e=null==n?void 0:n.utils)||void 0===e?void 0:e.addAsyncFilter)&&(n.utils.addAsyncFilter("gform/submission/submission_started",(e=>{var r;try{"submit"===e.submissionType&&e.form instanceof HTMLFormElement&&(l(e.form),null===(r=t.get(e.form))||void 0===r||r())}catch(e){i.logger.error("Error tracking Gravity Forms submission:",e)}return e})),r=!0)},l=r=>{if(o.has(r))return;let s,l=!1,c=!1,d=!1;const u=(t=!1)=>{l||(l=!0,t||(i.logger.log("Form submit event captured"),a(r,e),c&&(d=!0)),setTimeout((()=>{l=!1}),1e3))};t.set(r,(()=>{clearTimeout(s),u(d),c=!1,d=!1})),r.addEventListener("submit",(()=>u()),{capture:!0});const f=r.querySelectorAll('button[type="submit"], input[type="submit"], [data-submission-type="submit"]');f.forEach((e=>{e.addEventListener("click",(()=>{n(),clearTimeout(s),c=!0,d=!1,i.logger.log("Submit button click detected"),s=setTimeout((()=>u()),50)}),{capture:!0})})),o.add(r);const g=(0,i.getFormIdentifier)(r)||"Unidentified Form";i.logger.log("Tracking form:",g,`(${f.length} submit button(s))`)},c=e=>{const t=e.querySelectorAll("form");i.logger.log(`Found ${t.length} form(s) in document`),t.forEach((e=>l(e)))},d=()=>{s||"undefined"==typeof MutationObserver||(s=new MutationObserver((e=>{e.forEach((e=>{Array.from(e.addedNodes).forEach((e=>{if(e instanceof Element)return e instanceof HTMLFormElement?(i.logger.log("Dynamic form detected via MutationObserver"),void l(e)):void e.querySelectorAll("form").forEach((e=>{i.logger.log("Nested dynamic form detected via MutationObserver"),l(e)}))}))}))})),s.observe(document.body,{childList:!0,subtree:!0}),i.logger.log("MutationObserver initialized for dynamic form detection"))};n(),document.addEventListener("gform/theme/scripts_loaded",n),c(document),document.body?d():document.addEventListener("DOMContentLoaded",(()=>{c(document),d()}))};const a=(e,t)=>{try{const{fieldData:r,fieldLabels:o,files:s}=(0,i.parseFormData)(e),a=(0,i.getPageMetadata)(),l={type:n.EventType.FORM_SUBMISSION,timestamp:Date.now(),formId:(0,i.getFormIdentifier)(e)||"Unidentified Form",formData:r,formLabels:o,...s&&Object.keys(s).length?{files:s}:{},...a};t(l),i.logger.log("Form submission tracked:",l.formId)}catch(e){i.logger.error("Error tracking form submission:",e)}}},746:(e,t,r)=>
1{Object.defineProperty(t,"__esModule",{value:!0});const n=r(697);t.default=function(e){return"string"==typeof e&&n.default.test(e)}},770:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});const n=r(746);t.default=function(e){if(!(0,n.default)(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}},779:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0});const r="undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);t.default={randomUUID:r}},780:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getFieldsetLegend=t.getContainerLabel=t.getCombinedLabel=t.isCompoundField=t.getSubLabel=t.getMainLabel=t.cleanLabelText=t.isGravityFormsField=void 0;const n=r(628),i="gfield",o="gfield_label",s=/\s*\(Required\)\s*/gi,a=/\s*\*\s*$/g;t.isGravityFormsField=e=>null!==e.closest(`.${i}`),t.cleanLabelText=e=>e.replace(s,"").replace(a,"").trim(),t.getMainLabel=e=>{var r,s,a,l;try{const n=e.closest(`.${i}`);if(!n)return"";const c=e.closest("fieldset");if((null==c?void 0:c.classList.contains(i))&&c){const e=c.querySelector("legend");if(e)return(0,t.cleanLabelText)(null!==(s=null===(r=e.textContent)||void 0===r?void 0:r.trim())&&void 0!==s?s:"")}const d=n.querySelector(`label.${o}`);if(d)return(0,t.cleanLabelText)(null!==(l=null===(a=d.textContent)||void 0===a?void 0:a.trim())&&void 0!==l?l:"")}catch(e){n.logger.error("Error extracting Gravity Forms main label:",e)}return""},t.getSubLabel=(e,t)=>{var r,i;if(!t.id)return"";try{const n=e.querySelector(`label[for="${t.id}"]`);if(n)return null!==(i=null===(r=n.textContent)||void 0===r?void 0:r.trim())&&void 0!==i?i:""}catch(e){n.logger.error("Error extracting Gravity Forms sub-label:",e)}return""},t.isCompoundField=e=>{var t;const r=e.closest("fieldset");return null!==(t=null==r?void 0:r.classList.contains(i))&&void 0!==t&&t},t.getCombinedLabel=(e,r)=>{if(!(0,t.isGravityFormsField)(r))return"";if((0,t.isCompoundField)(r)){const n=(0,t.getSubLabel)(e,r);if(n)return n}return(0,t.getMainLabel)(r)},t.getContainerLabel=e=>{var r,s;try{const n=e.closest(`.${i}`);if(!n)return"";const a=n.querySelector(`.${o}, .gform-field-label:not(.gform-field-label--type-sub)`);if(a)return(0,t.cleanLabelText)(null!==(s=null===(r=a.textContent)||void 0===r?void 0:r.trim())&&void 0!==s?s:"")}catch(e){n.logger.error("Error extracting Gravity Forms container label:",e)}return""},t.getFieldsetLegend=e=>{var r,i;try{const n=e.closest("fieldset");if(!n)return"";const o=n.querySelector("legend");if(o)return(0,t.cleanLabelText)(null!==(i=null===(r=o.textContent)||void 0===r?void 0:r.trim())&&void 0!==i?i:"")}catch(e){n.logger.error("Error extracting fieldset legend:",e)}return""}},797:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0});const n=r(746);t.default=function(e){if(!(0,n.default)(e))throw TypeError("Invalid UUID");let t;return Uint8Array.of((t=parseInt(e.slice(0,8),16))>>>24,t>>>16&255,t>>>8&255,255&t,(t=parseInt(e.slice(9,13),16))>>>8,255&t,(t=parseInt(e.slice(14,18),16))>>>8,255&t,(t=parseInt(e.slice(19,23),16))>>>8,255&t,(t=parseInt(e.slice(24,36),16))/1099511627776&255,t/4294967296&255,t>>>24&255,t>>>16&255,t>>>8&255,255&t)}},829:(e,t)=>
1{function r(e,t,r,n){switch(e){case 0:return t&r^~t&n;case 1:case 3:return t^r^n;case 2:return t&r^t&n^r&n}}function n(e,t){return e<<t|e>>>32-t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){const t=[1518500249,1859775393,2400959708,3395469782],i=[1732584193,4023233417,2562383102,271733878,3285377520],o=new Uint8Array(e.length+1);o.set(e),o[e.length]=128;const s=(e=o).length/4+2,a=Math.ceil(s/16),l=new Array(a);for(let t=0;t<a;++t){const r=new Uint32Array(16);for(let n=0;n<16;++n)r[n]=e[64*t+4*n]<<24|e[64*t+4*n+1]<<16|e[64*t+4*n+2]<<8|e[64*t+4*n+3];l[t]=r}l[a-1][14]=8*(e.length-1)/Math.pow(2,32),l[a-1][14]=Math.floor(l[a-1][14]),l[a-1][15]=8*(e.length-1)&4294967295;for(let e=0;e<a;++e){const o=new Uint32Array(80);for(let t=0;t<16;++t)o[t]=l[e][t];for(let e=16;e<80;++e)o[e]=n(o[e-3]^o[e-8]^o[e-14]^o[e-16],1);let s=i[0],a=i[1],c=i[2],d=i[3],u=i[4];for(let e=0;e<80;++e){const i=Math.floor(e/20),l=n(s,5)+r(i,a,c,d)+u+t[i]+o[e]>>>0;u=d,d=c,c=n(a,30)>>>0,a=s,s=l}i[0]=i[0]+s>>>0,i[1]=i[1]+a>>>0,i[2]=i[2]+c>>>0,i[3]=i[3]+d>>>0,i[4]=i[4]+u>>>0}return Uint8Array.of(i[0]>>24,i[0]>>16,i[0]>>8,i[0],i[1]>>24,i[1]>>16,i[1]>>8,i[1],i[2]>>24,i[2]>>16,i[2]>>8,i[2],i[3]>>24,i[3]>>16,i[3]>>8,i[3],i[4]>>24,i[4]>>16,i[4]>>8,i[4])}},850:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.initializeFromScript=void 0;const n=r(266),i=r(479),o=r(129),s=r(910);t.initializeFromScript=()=>{try{const e=(0,i.getConfigFromScriptAttributes)();if(!e)return n.logger.critical("Failed to initialize: invalid or missing script attributes"),null;n.logger.log("Initializing from script attributes");try{const t=(0,o.createTracker)(e),r=window;return r[s.GLOBAL_TRACKING_KEY]=r[s.GLOBAL_TRACKING_KEY]||{},r[s.GLOBAL_TRACKING_KEY].tracker=t,r[s.GLOBAL_TRACKING_KEY].config=e,n.logger.log("Tracker initialized successfully"),t}catch(e){return n.logger.critical("Failed to create tracker:",e),null}}catch(e){return n.logger.critical("Error during initialization:",e),null}}},867:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getTrackingContext=void 0;const n=r(266);t.getTrackingContext=e=>{try{const{state:t,apiClient:r}=e,i=(0,n.getUserData)();return(null==t?void 0:t.trackingId)&&(null==t?void 0:t.sessionId)&&(null==r?void 0:r.apiEndpoint)?{trackingId:t.trackingId,sessionId:t.sessionId,apiEndpoint:r.apiEndpoint,contactId:null==i?void 0:i.contactId,userId:null==i?void 0:i.userId}:null}catch(e){return n.logger.error("Failed to resolve tracking context",e),null}}},910:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SCRIPT_BASENAME=t.GLOBAL_TRACKING_KEY=t.LOGGER_ERROR_PREFIX=t.LOGGER_PREFIX=t.API_ENDPOINTS=void 0,t.API_ENDPOINTS={production:"https://backend.leadconnectorhq.com",staging:"https://staging.backend.leadconnectorhq.com",local:"http://localhost:6100"},t.LOGGER_PREFIX="[LC Tracking]",t.LOGGER_ERROR_PREFIX="[LC Tracking ERROR]",t.GLOBAL_TRACKING_KEY="_lcTracking",t.SCRIPT_BASENAME="external-tracking"},952:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.parseFormData=void 0;const n=r(378),i=r(628),o=r(168);t.parseFormData=e=>{var t,r;const o=new FormData(e),a={},c={},d={},u=new Set;try{for(const e of(null===(r=(t=o).keys)||void 0===r?void 0:r.call(t))||[])u.add(String(e))}catch(e){i.logger.error("Error iterating FormData keys; falling back to FormData.forEach",e),o.forEach(((e,t)=>u.add(t)))}u.forEach((t=>{var r,n;const s=(e=>{var t,r;try{const n=null===(r=(t=o).getAll)||void 0===r?void 0:r.call(t,e);if(Array.isArray(n))return n}catch(e){i.logger.error("Error calling FormData.getAll; falling back to manual collection",e)}const n=[];return o.forEach(((t,r)=>{r===e&&n.push(t)})),n})(t),l=`[name="${(e=>{var t;try{return(null===(t=window.CSS)||void 0===t?void 0:t.escape)?window.CSS.escape(e):e.replace(/([#.;:!+\-\[\]\(\)\{\}])/g,"\\$1")}catch(t){return i.logger.error("Error escaping CSS selector; using unescaped value",t),e}})(t)}"]`,c=e.querySelectorAll(l),u=c[0],f=((null==u?void 0:u.tagName)||"").toLowerCase(),g=(null===(n=null===(r=null==u?void 0:u.type)||void 0===r?void 0:r.toLowerCase)||void 0===n?void 0:n.call(r))||"",m="select"===f&&!0===(null==u?void 0:u.multiple);if("input"===f&&"hidden"===g)return;const p=t=>{var r,n,o;const s=String(t.value);if(!/^\d+$/.test(s))return s;try{const i=t.closest("label");if(i){const e=i.cloneNode(!0);e.querySelectorAll("input").forEach((e=>e.remove()));const t=null===(r=e.textContent)||void 0===r?void 0:r.trim();if(t)return t}if(t.id){const r=e.querySelector(`label[for="${t.id}"]`);if(null===(n=null==r?void 0:r.textContent)||void 0===n?void 0:n.trim())return r.textContent.trim()}const s=t.nextSibling;if(null===(o=null==s?void 0:s.textContent)||void 0===o?void 0:o.trim())return s.textContent.trim()}catch(e){i.logger.error("Error resolving option text from DOM",e)}return s},v=(e,t)=>
1{var r;if(!/^\d+$/.test(t))return t;const n=Array.from(e.options).find((e=>e.value===t));return(null===(r=null==n?void 0:n.textContent)||void 0===r?void 0:r.trim())||t};if("input"!==f||"checkbox"!==g)if("input"!==f||"radio"!==g)if(m){const e=u;a[t]=s.map((t=>v(e,String(t))))}else if("select"!==f){if("input"===f&&"file"===g){const e=[],r=[];return s.forEach((t=>{try{if("undefined"!=typeof File&&t instanceof File){const n=(t.name||"").trim(),o="number"==typeof t.size?t.size:0;if(!n&&0===o)return;e.push(t),r.push((e=>{try{if("undefined"!=typeof File&&e instanceof File)return{filename:e.name||"uploaded_file",size:"number"==typeof e.size?e.size:void 0,type:(null==e?void 0:e.type)||void 0}}catch(e){i.logger.error("Error mapping file metadata",e)}return e})(t))}}catch(e){i.logger.error("Error processing file input value",e)}})),e.length&&(d[t]=e),void(r.length>1?a[t]=r:a[t]=r[0]||null)}if(s.length>1)a[t]=s.map((e=>String(e)));else{const e=s[0],r=void 0===e?void 0:String(e);a[t]=""===r?null:r}}else{const e=u,r=s[0];a[t]=void 0===r?null:v(e,String(r))}else{const e=Array.from(c).find((e=>e.checked));a[t]=e?p(e):void 0}else{const e=Array.from(c).filter((e=>e.checked));e.length>1?a[t]=e.map((e=>p(e))):1===e.length?a[t]=p(e[0]):a[t]=s.length>1&&[]}}));try{const t=e.querySelectorAll('input[type="checkbox"][name]'),r={};for(let e=0;e<t.length;e++){const n=t[e],i=n.name;i&&!n.disabled&&(r[i]=(r[i]||0)+1)}Object.keys(r).forEach((e=>{e in a||(a[e]=r[e]>1&&[])}))}catch(e){i.logger.error("Error normalizing unchecked checkbox values",e)}try{const t=e.querySelectorAll("select[multiple][name]");for(let e=0;e<t.length;e++){const r=t[e],n=r.name;n&&!r.disabled&&(n in a||(a[n]=[]))}}catch(e){i.logger.error("Error normalizing empty multi-select values",e)}try{Object.keys(a).forEach((e=>{const t=a[e];if("string"==typeof t&&/signature/i.test(e)){const r=t.trim();r.startsWith("data:image")&&(a[e]={type:"signature",dataUrl:r})}}))}catch(e){i.logger.error("Error normalizing signature fields",e)}const f=e.querySelectorAll("input, select, textarea");for(let t=0;t<f.length;t++){const r=f[t],i=r.name;if(!s(r,i,a))continue;const o=l(e,r);(0,n.isPasswordLikeField)(r,o)?i in a&&delete a[i]:o&&(c[i]=o)}try{if("terms_and_conditions"in a&&!0===a.terms_and_conditions){const e=c.terms_and_conditions;a.terms_and_conditions=e||!0}}catch(e){i.logger.error("Error applying terms_and_conditions label mapping; falling back to raw value",e)}return{fieldData:a,fieldLabels:c,files:d}};const s=(e,t,r)=>!!t&&!e.disabled&&"hidden"!==e.type&&!!a(e)&&t in r,a=e=>{var t;try{const r=window.getComputedStyle(e);return!("none"===r.display||"hidden"===r.visibility||"0"===(null!==(t=r.opacity)&&void 0!==t?t:"1"))}catch(e){return i.logger.error("Error checking form field visibility",e),!0}},l=(e,t)=>{const r=(0,o.getGravityFormsCombinedLabel)(e,t);if(r)return r;const n=c(e,t);if(n)return(0,o.cleanLabelText)(n);const i=d(t);if(i)return(0,o.cleanLabelText)(i);const s=u(t);if(s)return(0,o.cleanLabelText)(s);const a=o.GravityForms.getContainerLabel(t);if(a)return a;return o.GravityForms.getFieldsetLegend(t)||""},c=(e,t)=>{var r;if(!t.id)return"";const n=e.querySelector(`label[for="${t.id}"]`);return n&&(null===(r=n.textContent)||void 0===r?void 0:r.trim())||""},d=e=>{var t;const r=e.closest("label");if(!r)return"";const n=r.cloneNode(!0),i=n.querySelectorAll("input, select, textarea");for(let e=0;e<i.length;e++)i[e].remove();return(null===(t=n.textContent)||void 0===t?void 0:t.trim())||""},u=e=>{var t;let r=e.previousElementSibling;for(;r;){if("LABEL"===r.tagName)return(null===(t=r.textContent)||void 0===t?void 0:t.trim())||"";r=r.previousElementSibling}return""}},963:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.EventQueue=void 0;const n=r(266);t.EventQueue=class{constructor(e){this.queue=[],this.processing=!1,this.eventTimes=[],this.eventIdCounter=0,this.config={maxEventsPerSecond:e.maxEventsPerSecond||5,maxRetries:e.maxRetries||3,retryDelayMs:e.retryDelayMs||1e3,maxQueueSize:e.maxQueueSize||100},n.logger.log("EventQueue initialized with config:",this.config)}async enqueue(e,t=this.config.maxRetries,r=!1){return new Promise(((i,o)=>{const s={id:"event_"+ ++this.eventIdCounter,payload:e,timestamp:Date.now(),retryCount:0,maxRetries:t};if(s.resolve=i,s.reject=o,r&&this.canSendEvent())return this.recordEventTime(),void this.sendEvent(s).then(i,(e=>{t<=0?o(e):(s.retryCount=1,setTimeout((()=>{this.queue.unshift(s),this.processing||this.processQueue()}),this.config.retryDelayMs))}));this.queue.length>=this.config.maxQueueSize&&(n.logger.warn("Queue is full, dropping oldest event"),this.queue.shift()),this.queue.push(s),n.logger.log(`Event ${s.id} added to queue. Queue length: ${this.queue.length}`),this.processing||this.processQueue()}))}async processQueue(){var e,t;if(!this.processing&&0!==this.queue.length){for(this.processing=!0,n.logger.log("Starting queue processing");this.queue.length>0;){const r=this.queue[0];if(this.canSendEvent())try{this.queue.shift(),this.recordEventTime(),await this.sendEvent(r),n.logger.log(`Event ${r.id} processed successfully`),(null==r?void 0:r.resolve)&&r.resolve()}catch(i){n.logger.error(`Error processing event ${r.id}:`,i),(null!==(e=null==r?void 0:r.retryCount)&&void 0!==e?e:0)<(null!==(t=null==r?void 0:r.maxRetries)&&void 0!==t?t:0)?(r.retryCount++,n.logger.log(`Retrying event ${r.id} (attempt ${r.retryCount}/${r.maxRetries})`),setTimeout((()=>{this.queue.unshift(r),this.processing||this.processQueue()}),this.config.retryDelayMs*r.retryCount)):(n.logger.error(`Event ${r.id} failed after ${r.maxRetries} retries`),(null==r?void 0:r.reject)&&r.reject(i))}else await this.waitForRateLimit()}this.processing=!1,n.logger.log("Queue processing completed")}}canSendEvent(){return this.cleanupOldEventTimes(),this.eventTimes.length<this.config.maxEventsPerSecond}recordEventTime(){this.eventTimes.push(Date.now())}cleanupOldEventTimes(){const e=Date.now()-1e3;this.eventTimes=this.eventTimes.filter((t=>t>e))}async waitForRateLimit(){const e=this.calculateWaitTime();n.logger.log(`Rate limit reached, waiting ${e}ms`),await new Promise((t=>setTimeout(t,e)))}calculateWaitTime(){if(0===this.eventTimes.length)return 0;const e=this.eventTimes[0],t=Date.now()-e;return Math.max(0,1e3-t)+10}async sendEvent(e){throw new Error("sendEvent method not implemented")}setSender(e){this.sendEvent=async t=>{await e(t.payload)}}getStatus(){return this.cleanupOldEventTimes(),{queueLength:this.queue.length,processing:this.processing,eventsInLastSecond:this.eventTimes.length,maxEventsPerSecond:this.config.maxEventsPerSecond}}clear(){this.queue.forEach((e=>{(null==e?void 0:e.reject)&&e.reject(new Error("Queue cleared"))})),this.queue=[],this.eventTimes=[],n.logger.log("Queue cleared")}}},976:(e,t,r)=>
1{Object.defineProperty(t,"__esModule",{value:!0}),t.sendTimeSpentEvent=void 0;const n=r(266);t.sendTimeSpentEvent=(e,t)=>{try{const r=(0,n.getUserData)(),i={type:"external_page_time_spent",timestamp:e.sessionEnd,url:window.location.href,referrer:document.referrer,title:document.title,path:window.location.pathname,userAgent:navigator.userAgent,sessionId:t.sessionId,trackingId:t.trackingId,contactId:t.contactId||(null==r?void 0:r.contactId),userId:t.userId||(null==r?void 0:r.userId),properties:{sessionStart:e.sessionStart,sessionEnd:e.sessionEnd,timeSpentMs:e.timeSpentMs,formIdentifier:(0,n.getFormIdentifier)(),deviceType:(0,n.getDeviceType)()}},o=`${t.apiEndpoint}/external-tracking/events`;fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i),keepalive:!0}).catch((e=>n.logger.error("Failed to send time spent event",e)))}catch(e){n.logger.error("Failed to dispatch time spent event",e)}}},988:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=t.stringToBytes=void 0;const n=r(797),i=r(11);function o(e){e=unescape(encodeURIComponent(e));const t=new Uint8Array(e.length);for(let r=0;r<e.length;++r)t[r]=e.charCodeAt(r);return t}t.stringToBytes=o,t.DNS="6ba7b810-9dad-11d1-80b4-00c04fd430c8",t.URL="6ba7b811-9dad-11d1-80b4-00c04fd430c8",t.default=function(e,t,r,s,a,l){const c="string"==typeof r?o(r):r,d="string"==typeof s?(0,n.default)(s):s;if("string"==typeof s&&(s=(0,n.default)(s)),16!==s?.length)throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let u=new Uint8Array(16+c.length);if(u.set(d),u.set(c,d.length),u=t(u),u[6]=15&u[6]|e,u[8]=63&u[8]|128,a){l=l||0;for(let e=0;e<16;++e)a[l+e]=u[e];return a}return(0,i.unsafeStringify)(u)}}},t={},r=function r(n){var i=t[n];if(void 0!==i)return i.exports;var o=t[n]={exports:{}};return e[n].call(o.exports,o,o.exports,r),o.exports}(156);return r.default})())); 2//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFHQyxFQUFHTixFQUFFL1AsRUFBSSxHQUFJLEdBQUksV0FDcENxUSxFQUFJSyxFQUFNTCxFQUFHTSxFQUFHQyxFQUFHUixFQUFHTCxFQUFFL1AsRUFBSSxHQUFJLElBQUssWUFDckNvUSxFQUFJTSxFQUFNTixFQUFHQyxFQUFHTSxFQUFHQyxFQUFHYixFQUFFL1AsRUFBSSxHQUFJLEdBQUksV0FDcEM0USxFQUFJRixFQUFNRSxFQUFHUixFQUFHQyxFQUFHTSxFQUFHWixFQUFFL1AsRUFBSSxHQUFJLEdBQUksWUFDcEMyUSxFQUFJRCxFQUFNQyxFQUFHQyxFQUFHUixFQUFHQyxFQUFHTixFQUFFL1AsRUFBSSxHQUFJLElBQUssWUFDckNxUSxFQUFJSyxFQUFNTCxFQUFHTSxFQUFHQyxFQUFHUixFQUFHTCxFQUFFL1AsRUFBSSxHQUFJLElBQUssVUFDckNvUSxFQUFJTSxFQUFNTixFQUFHQyxFQUFHTSxFQUFHQyxFQUFHYixFQUFFL1AsRUFBSSxHQUFJLEVBQUcsWUFDbkM0USxFQUFJRixFQUFNRSxFQUFHUixFQUFHQyxFQUFHTSxFQUFHWixFQUFFL1AsRUFBSSxHQUFJLElBQUssWUFDckMyUSxFQUFJRCxFQUFNQyxFQUFHQyxFQUFHUixFQUFHQyxFQUFHTixFQUFFL1AsRUFBSSxJQUFLLElBQUssT0FDdENxUSxFQUFJSyxFQUFNTCxFQUFHTSxFQUFHQyxFQUFHUixFQUFHTCxFQUFFL1AsRUFBSSxJQUFLLElBQUssWUFDdENvUSxFQUFJTSxFQUFNTixFQUFHQyxFQUFHTSxFQUFHQyxFQUFHYixFQUFFL1AsRUFBSSxJQUFLLEVBQUcsWUFDcEM0USxFQUFJRixFQUFNRSxFQUFHUixFQUFHQyxFQUFHTSxFQUFHWixFQUFFL1AsRUFBSSxJQUFLLElBQUssVUFDdEMyUSxFQUFJRCxFQUFNQyxFQUFHQyxFQUFHUixFQUFHQyxFQUFHTixFQUFFL1AsRUFBSSxJQUFLLElBQUssWUFDdENxUSxFQUFJSyxFQUFNTCxFQUFHTSxFQUFHQyxFQUFHUixFQUFHTCxFQUFFL1AsRUFBSSxJQUFLLEdBQUksWUFDckNvUSxFQUFJUyxFQUFNVCxFQUFHQyxFQUFHTSxFQUFHQyxFQUFHYixFQUFFL1AsRUFBSSxHQUFJLEdBQUksV0FDcEM0USxFQUFJQyxFQUFNRCxFQUFHUixFQUFHQyxFQUFHTSxFQUFHWixFQUFFL1AsRUFBSSxHQUFJLEdBQUksWUFDcEMyUSxFQUFJRSxFQUFNRixFQUFHQyxFQUFHUixFQUFHQyxFQUFHTixFQUFFL1AsRUFBSSxJQUFLLEdBQUksV0FDckNxUSxFQUFJUSxFQUFNUixFQUFHTSxFQUFHQyxFQUFHUixFQUFHTCxFQUFFL1AsR0FBSSxJQUFLLFdBQ2pDb1EsRUFBSVMsRUFBTVQsRUFBR0MsRUFBR00sRUFBR0MsRUFBR2IsRUFBRS9QLEVBQUksR0FBSSxHQUFJLFdBQ3BDNFEsRUFBSUMsRUFBTUQsRUFBR1IsRUFBR0MsRUFBR00sRUFBR1osRUFBRS9QLEVBQUksSUFBSyxFQUFHLFVBQ3BDMlEsRUFBSUUsRUFBTUYsRUFBR0MsRUFBR1IsRUFBR0MsRUFBR04sRUFBRS9QLEVBQUksSUFBSyxJQUFLLFdBQ3RDcVEsRUFBSVEsRUFBTVIsRUFBR00sRUFBR0MsRUFBR1IsRUFBR0wsRUFBRS9QLEVBQUksR0FBSSxJQUFLLFdBQ3JDb1EsRUFBSVMsRUFBTVQsRUFBR0MsRUFBR00sRUFBR0MsRUFBR2IsRUFBRS9QLEVBQUksR0FBSSxFQUFHLFdBQ25DNFEsRUFBSUMsRUFBTUQsRUFBR1IsRUFBR0MsRUFBR00sRUFBR1osRUFBRS9QLEVBQUksSUFBSyxHQUFJLFlBQ3JDMlEsRUFBSUUsRUFBTUYsRUFBR0MsRUFBR1IsRUFBR0MsRUFBR04sRUFBRS9QLEVBQUksR0FBSSxJQUFLLFdBQ3JDcVEsRUFBSVEsRUFBTVIsRUFBR00sRUFBR0MsRUFBR1IsRUFBR0wsRUFBRS9QLEVBQUksR0FBSSxHQUFJLFlBQ3BDb1EsRUFBSVMsRUFBTVQsRUFBR0MsRUFBR00sRUFBR0MsRUFBR2IsRUFBRS9QLEVBQUksSUFBSyxHQUFJLFlBQ3JDNFEsRUFBSUMsRUFBTUQsRUFBR1IsRUFBR0MsRUFBR00sRUFBR1osRUFBRS9QLEVBQUks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CLEVBQXFCdWlCLEVBQWN2aUIsR0FBU0EsRUFDaEU2aUIsRUFBc0MsaUJBQWRwTSxHQUF5QixFQUFJL1EsRUFBVzlFLFNBQVM2VixHQUFhQSxFQUk1RixHQUh5QixpQkFBZEEsSUFDUEEsR0FBWSxFQUFJL1EsRUFBVzlFLFNBQVM2VixJQUVkLEtBQXRCQSxHQUFXeE4sT0FDWCxNQUFNcEksVUFBVSxvRUFFcEIsSUFBSWtQLEVBQVEsSUFBSW5CLFdBQVcsR0FBS2dVLEVBQVczWixRQU0zQyxHQUxBOEcsRUFBTTJCLElBQUltUixHQUNWOVMsRUFBTTJCLElBQUlrUixFQUFZQyxFQUFlNVosUUFDckM4RyxFQUFRNFMsRUFBSzVTLEdBQ2JBLEVBQU0sR0FBaUIsR0FBWEEsRUFBTSxHQUFhdEwsRUFDL0JzTCxFQU
2FNLEdBQWlCLEdBQVhBLEVBQU0sR0FBYSxJQUMzQmQsRUFBSyxDQUNMeE8sRUFBU0EsR0FBVSxFQUNuQixJQUFLLElBQUlMLEVBQUksRUFBR0EsRUFBSSxLQUFNQSxFQUN0QjZPLEVBQUl4TyxFQUFTTCxHQUFLMlAsRUFBTTNQLEdBRTVCLE9BQU82TyxDQUNYLENBQ0EsT0FBTyxFQUFJdEosRUFBZTFGLGlCQUFpQjhQLEVBQy9DLEMsR0N0Q0krUyxFQUEyQixDQUFDLEVDRTVCQyxFRENKLFNBQVNDLEVBQW9CQyxHQUU1QixJQUFJQyxFQUFlSixFQUF5QkcsR0FDNUMsUUFBcUJwWCxJQUFqQnFYLEVBQ0gsT0FBT0EsRUFBYTFqQixRQUdyQixJQUFJQyxFQUFTcWpCLEVBQXlCRyxHQUFZLENBR2pEempCLFFBQVMsQ0FBQyxHQU9YLE9BSEEyakIsRUFBb0JGLEdBQVVHLEtBQUszakIsRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU3dqQixHQUdwRXZqQixFQUFPRCxPQUNmLENDbkIwQndqQixDQUFvQixLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvaGVscGVycy90aW1lLXRyYWNraW5nL2luZGV4LnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvaGVscGVycy9mb3JtLWJ1aWxkZXJzL2dyYXZpdHktZm9ybXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL3NyYy9jb3JlL3RyYWNrZXIudHMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL3NyYy9jb25maWcvZmFjdG9yeS50cyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vc3JjL2luZGV4LnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvaGVscGVycy9mb3JtLWJ1aWxkZXJzL2luZGV4LnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL2luZGV4LmpzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL21heC5qcyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vc3JjL2hlbHBlcnMvdGltZS10cmFja2luZy90cmFja2VyLnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvdXRpbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvdjZUb1YxLmpzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL3Y0LmpzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL3JuZy5qcyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9janMtYnJvd3Nlci92Ny5qcyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9janMtYnJvd3Nlci9tZDUuanMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvdjYuanMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL3NyYy91dGlscy9maWVsZC11dGlscy50cyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9janMtYnJvd3Nlci92MS5qcyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vc3JjL2FwaS9jbGllbnQudHMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvbmlsLmpzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvY29uZmlnL3NjcmlwdC1jb25maWcudHMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvdjUuanMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvdjFUb1Y2LmpzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvdHlwZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvdjMuanMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL3NyYy91dGlscy9sb2dnZXIudHMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvcmVnZXguanMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL3NyYy9ldmVudHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvdmFsaWRhdGUuanMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9janMtYnJvd3Nlci9uYXRpdmUuanMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL3NyYy9oZWxwZXJzL2Zvcm0tYnVpbGRlcnMvZ3Jhdml0eS1mb3Jtcy9sYWJlbC1leHRyYWN0b3IudHMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvcGFyc2UuanMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvc2hhMS5qcyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vc3JjL2NvcmUvYXV0by1pbml0LnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvaGVscGVycy90aW1lLXRyYWNraW5nL2NvbnRleHQudHMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL3NyYy9jb25maWcvY29tbW9uLnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvdXRpbHMvZm9ybS1wYXJzZXIudHMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL3NyYy9jb3JlL3F1ZXVlLXN5c3RlbS50cyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vc3JjL2hlbHBlcnMvdGltZS10cmFja2luZy9hcGkudHMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvdjM1LmpzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiRXh0ZXJuYWxUcmFja2luZ1wiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJFeHRlcm5hbFRyYWNraW5nXCJdID0gZmFjdG9yeSgpO1xufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsICgpID0+IHtcbnJldHVybiAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudW5zYWZlU3RyaW5naWZ5ID0gdm9pZCAwO1xuY29uc3QgdmFsaWRhdGVfanNfMSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpO1xuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gICAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmc
2oMTYpLnNsaWNlKDEpKTtcbn1cbmZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgICByZXR1cm4gKGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMF1dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxXV0gK1xuICAgICAgICBieXRlVG9IZXhbYXJyW29mZnNldCArIDJdXSArXG4gICAgICAgIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgM11dICtcbiAgICAgICAgJy0nICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA0XV0gK1xuICAgICAgICBieXRlVG9IZXhbYXJyW29mZnNldCArIDVdXSArXG4gICAgICAgICctJyArXG4gICAgICAgIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNl1dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA3XV0gK1xuICAgICAgICAnLScgK1xuICAgICAgICBieXRlVG9IZXhbYXJyW29mZnNldCArIDhdXSArXG4gICAgICAgIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOV1dICtcbiAgICAgICAgJy0nICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMF1dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMV1dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMl1dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxM11dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNF1dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNV1dKS50b0xvd2VyQ2FzZSgpO1xufVxuZXhwb3J0cy51bnNhZmVTdHJpbmdpZnkgPSB1bnNhZmVTdHJpbmdpZnk7XG5mdW5jdGlvbiBzdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gICAgY29uc3QgdXVpZCA9IHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCk7XG4gICAgaWYgKCEoMCwgdmFsaWRhdGVfanNfMS5kZWZhdWx0KSh1dWlkKSkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdXVpZDtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHN0cmluZ2lmeTtcbiIsImltcG9ydCB7IEdMT0JBTF9UUkFDS0lOR19LRVkgfSBmcm9tICcuLi8uLi9jb25maWcvY29tbW9uJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IHNlbmRUaW1lU3BlbnRFdmVudCB9IGZyb20gJy4vYXBpJztcbmltcG9ydCB7IGdldFRyYWNraW5nQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyBUaW1lT25QYWdlVHJhY2tlciB9IGZyb20gJy4vdHJhY2tlcic7XG5cbmV4cG9ydCB0eXBlIHsgU2Vzc2lvblRpbWluZywgVHJhY2tpbmdDb250ZXh0IH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgeyBUaW1lT25QYWdlVHJhY2tlciB9IGZyb20gJy4vdHJhY2tlcic7XG5cbi8qKlxuICogU3RhcnRzIHRpbWUtb24tcGFnZSB0cmFja2luZyBmb3IgYSBnaXZlbiB0cmFja2VyIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBjb25zdCBzdGFydFRpbWVUcmFja2luZyA9ICh0cmFja2VyOiB1bmtub3duKTogdm9pZCA9PiB7XG4gIGlmICghdHJhY2tlciB8fCB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuXG4gIGNvbnN0IGludGVydmFsSWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gZ2V0VHJhY2tpbmdDb250ZXh0KHRyYWNrZXIpO1xuICAgICAgaWYgKCFjb250ZXh0KSByZXR1cm47XG5cbiAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsSWQpO1xuXG4gICAgICBjb25zdCB0aW1lVHJhY2tlciA9IG5ldyBUaW1lT25QYWdlVHJhY2tlcigodGltaW5nKSA9PiBzZW5kVGltZVNwZW50RXZlbnQodGltaW5nLCBjb250ZXh0KSk7XG5cbiAgICAgIGNvbnN0IHcgPSB3aW5kb3cgYXMgYW55O1xuICAgICAgd1tHTE9CQUxfVFJBQ0tJTkdfS0VZXSA9IHdbR0xPQkFMX1RSQUNLSU5HX0tFWV0gfHwge307XG4gICAgICB3W0dMT0JBTF9UUkFDS0lOR19LRVldLnRpbWVUcmFja2VyID0gdGltZVRyYWNrZXI7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgaW4gdGltZSB0cmFja2luZycsIGVycm9yKTtcbiAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgIH1cbiAgfSwgMzAwKTtcbn07XG4iLCIvKipcbiAqIEdyYXZpdHkgRm9ybXMgTW9kdWxlXG4gKiBcbiAqIFByb3ZpZGVzIHV0aWxpdGllcyBmb3IgZXh0cmFjdGluZyBsYWJlbHMgZnJvbSBHcmF2aXR5IEZvcm1zIFdvcmRQcmVzcyBwbHVnaW4uXG4gKiBcbiAqIEBtb2R1bGUgZ3Jhdml0eS1mb3Jtc1xuICovXG5cbi8vIFR5cGVzXG5leHBvcnQgdHlwZSB7IEZvcm1JbnB1dEVsZW1lbnQgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gTGFiZWwgZXh0cmFjdGlvbiB1dGlsaXRpZXNcbmV4cG9ydCB7XG4gIGlzR3Jhdml0eUZvcm1zRmllbGQsXG4gIGlzQ29tcG91bmRGaWVsZCxcbiAgZ2V0TWFpbkxhYmVsLFxuICBnZXRTdWJMYWJlbCxcbiAgZ2V0Q29tYmluZWRMYWJlbCxcbiAgZ2V0Q29udGFpbmVyTGFiZWwsXG4gIGdldEZpZWxkc2V0TGVnZW5kLFxuICBjbGVhbkxhYmVsVGV4dCxcbn0gZnJvbSAnLi9sYWJlbC1leHRyYWN0b3InO1xuIiwiaW1wb3J0IHsgXG4gIFRyYWNraW5nQ29uZmlnLCBcbiAgVHJhY2tpbmdTdGF0ZSwgXG4gIFRyYWNraW5nRXZlbnQsXG4gIFBhZ2VWaWV3RXZlbnQsXG4gIEZvcm1TdWJtaXNzaW9uRXZlbnRcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQXBpQ2xpZW50IH0gZnJvbSAnLi4vYXBpL2NsaWVudCc7XG5pbXBvcnQgeyBzdGFydFBhZ2VUcmFja2luZywgc3RhcnRGb3JtVHJhY2tpbmcgfSBmcm9tICcuLi9ldmVudHMnO1xuaW1wb3J0IHsgXG4gIGxvZ2dlciwgXG4gIGdlbmVyYXRlU2Vzc2lvbklkLFxuICBzdG9yZVNlc3Npb25JZEluQ29va2llLFxuICBnZXREZXZpY2VUeXBlXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEdMT0JBTF9UUkFDS0lOR19LRVkgfSBmcm9tICcuLi9jb25maWcvY29tbW9uJztcblxuLyoqXG4gKiBNYWluIGV4dGVybmFsIHRyYWNraW5nIGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBFeHRlcm5hbFRyYWNrZXIge1xuICBwcml2YXRlIHN0YXRlOiBUcmFja2luZ1N0YXRlO1xuICBwcml2YXRlIGFwaUNsaWVudDogQXBpQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogVHJhY2tpbmdDb25maWcpIHtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLFxuICAgICAgdHJhY2tpbmdJZDogY29uZmlnLnRyYWNraW5nSWQsXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmFwaUNsaWVudCA9IG5ldyBBcGlDbGllbnQoY29uZmlnLnRyYWNraW5nSWQsIGNvbmZpZy5hcGlFbmRwb2ludCk7XG5cbiAgICAvLyBTZXQgZGVidWcgbW9kZVxuICAgIGlmIChjb25maWcuZGVidWcpIHtcbiAgICAgIGNvbnN0IHcgPSB3aW5kb3cgYXMgYW55O1xuICAgICAgd1tHTE9CQUxfVFJBQ0tJTkdfS0VZXSA9IHdbR0xPQkFMX1RSQUNLSU5HX0tFWV0gfHwge307XG4gICAgICB3W0dMT0JBTF9UUkFDS0lOR19LRVldLmRlYnVnID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsb2dnZXIubG9nKCdFeHRlcm5hbFRyYWNrZXIgY3JlYXRlZCB3aXRoIGNvbmZpZzonLCBjb25maWcpO1xuICAgIFxuICAgIC8vIEF1dG8taW5p
2dGlhbGl6ZVxuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYWNrZXJcbiAgICovXG4gIGFzeW5jIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdUcmFja2VyIGFscmVhZHkgaW5pdGlhbGl6ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2VuZXJhdGUgbmV3IHNlc3Npb25JZCBmb3IgZWFjaCBzZXNzaW9uIGFuZCBzdG9yZSBpbiBjb29raWVcbiAgICAgIHRoaXMuc3RhdGUuc2Vzc2lvbklkID0gZ2VuZXJhdGVTZXNzaW9uSWQoKTtcbiAgICAgIHN0b3JlU2Vzc2lvbklkSW5Db29raWUodGhpcy5zdGF0ZS50cmFja2luZ0lkLCB0aGlzLnN0YXRlLnNlc3Npb25JZCk7XG4gICAgICBcbiAgICAgIC8vIFNldCB0cmFja2luZyBjb250ZXh0IG9uIEFQSSBjbGllbnQgd2l0aCBzZXNzaW9uSWRcbiAgICAgIHRoaXMuYXBpQ2xpZW50LnNldFRyYWNraW5nQ29udGV4dCh0aGlzLnN0YXRlLnNlc3Npb25JZCk7XG4gICAgICBcbiAgICAgIC8vIFNldHVwIGF1dG9tYXRpYyB0cmFja2luZyAoc3RhcnRzIGltbWVkaWF0ZWx5IHVwb24gZnVuY3Rpb24gY2FsbClcbiAgICAgIHN0YXJ0UGFnZVRyYWNraW5nKGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICAvLyBBZGQgc2Vzc2lvbklkIHRvIGFsbCBldmVudHNcbiAgICAgICAgZXZlbnQucHJvcGVydGllcyA9IHtcbiAgICAgICAgICAuLi5ldmVudC5wcm9wZXJ0aWVzLFxuICAgICAgICAgIHNlc3Npb25JZDogdGhpcy5zdGF0ZS5zZXNzaW9uSWQsXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHRoaXMuc2VuZEV2ZW50KGV2ZW50KTtcbiAgICAgIH0pO1xuXG4gICAgICBzdGFydEZvcm1UcmFja2luZyhhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgLy8gQWRkIHNlc3Npb25JZCB0byBmb3JtIHN1Ym1pc3Npb25zXG4gICAgICAgIGV2ZW50LnByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllcyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc3RhdGUuc2Vzc2lvbklkLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCB0aGlzLmFwaUNsaWVudC5zdWJtaXRGb3JtKGV2ZW50KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnN0YXRlLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIGxvZ2dlci5sb2coJ1RyYWNrZXIgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5IHdpdGggc2Vzc2lvbklkOicsIHRoaXMuc3RhdGUuc2Vzc2lvbklkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSB0cmFja2VyOicsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGV2ZW50IHRvIEFQSVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzZW5kRXZlbnQoZXZlbnQ6IFRyYWNraW5nRXZlbnQgfCBQYWdlVmlld0V2ZW50IHwgRm9ybVN1Ym1pc3Npb25FdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIEFkZCB1c2VyIGNvbnRleHQgaWYgYXZhaWxhYmxlXG4gICAgaWYgKHRoaXMuc3RhdGUudXNlcklkKSB7XG4gICAgICBldmVudC5wcm9wZXJ0aWVzID0ge1xuICAgICAgICAuLi5ldmVudC5wcm9wZXJ0aWVzLFxuICAgICAgICB1c2VySWQ6IHRoaXMuc3RhdGUudXNlcklkLFxuICAgICAgICAuLi50aGlzLnN0YXRlLnVzZXJQcm9wZXJ0aWVzLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBkZXZpY2UgdHlwZSB0byBldmVudCBwcm9wZXJ0aWVzIGZvciBkb3duc3RyZWFtIGFuYWx5dGljcy5cbiAgICBjb25zdCBkZXZpY2VUeXBlID0gZXZlbnQ/LnByb3BlcnRpZXM/LmRldmljZVR5cGUgfHwgZ2V0RGV2aWNlVHlwZSgpO1xuXG4gICAgLy8gRW5zdXJlIHNlc3Npb25JZCBpcyBzZXRcbiAgICBldmVudC5wcm9wZXJ0aWVzID0ge1xuICAgICAgLi4uZXZlbnQucHJvcGVydGllcyxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5zdGF0ZS5zZXNzaW9uSWQsXG4gICAgICBkZXZpY2VUeXBlLFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLmFwaUNsaWVudC5zZW5kRXZlbnQoZXZlbnQpO1xuICB9XG59IFxuIiwiaW1wb3J0IHsgRXh0ZXJuYWxUcmFja2VyIH0gZnJvbSAnLi4vY29yZS90cmFja2VyJztcbmltcG9ydCB7IFRyYWNraW5nQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVDb25maWcgfSBmcm9tICcuL3NjcmlwdC1jb25maWcnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW5kIGluaXRpYWxpemVzIGEgbmV3IEV4dGVybmFsVHJhY2tlciBpbnN0YW5jZVxuICogXG4gKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSB0cmFja2VyXG4gKiBAcmV0dXJucyBFeHRlcm5hbFRyYWNrZXIgaW5zdGFuY2VcbiAqIEB0aHJvd3MgRXJyb3IgaWYgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkXG4gKiBcbiAqIExvZ2ljIGZsb3c6XG4gKiAxLiBWYWxpZGF0ZSB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvblxuICogMi4gQ3JlYXRlIG5ldyBFeHRlcm5hbFRyYWNrZXIgaW5zdGFuY2VcbiAqIDMuIExvZyBzdWNjZXNzZnVsIGNyZWF0aW9uXG4gKiA0LiBSZXR1cm4gdGhlIHRyYWNrZXIgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVRyYWNrZXIgPSAoY29uZmlnOiBUcmFja2luZ0NvbmZpZyk6IEV4dGVybmFsVHJhY2tlciA9PiB7XG4gIC8vIFZhbGlkYXRlIGNvbmZpZ3VyYXRpb24gYmVmb3JlIGNyZWF0aW5nIHRyYWNrZXJcbiAgaWYgKCF2YWxpZGF0ZUNvbmZpZyhjb25maWcpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ0ludmFsaWQgdHJhY2tpbmcgY29uZmlndXJhdGlvbiBwcm92aWRlZCcpO1xuICAgIGxvZ2dlci5jcml0aWNhbCgnRmFpbGVkIHRvIGNyZWF0ZSB0cmFja2VyOicsIGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gQ3JlYXRlIHRyYWNrZXIgaW5zdGFuY2VcbiAgICBjb25zdCB0cmFja2VyID0gbmV3IEV4dGVybmFsVHJhY2tlcihjb25maWcpO1xuICAgIFxuICAgIGxvZ2dlci5sb2coJ1RyYWNrZXIgY3JlYXRlZCBzdWNjZXNzZnVsbHkgd2l0aCBJRDonLCBjb25maWcudHJhY2tpbmdJZCk7XG4gICAgcmV0dXJuIHRyYWNrZXI7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmNyaXRpY2FsKCdFcnJvciBjcmVhdGluZyB0cmFja2VyOicsIGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuICIsImltcG9ydCB7
2IGluaXRpYWxpemVGcm9tU2NyaXB0IH0gZnJvbSAnLi9jb3JlL2F1dG8taW5pdCc7XG5pbXBvcnQgeyBzdGFydFRpbWVUcmFja2luZyB9IGZyb20gJy4vaGVscGVycy90aW1lLXRyYWNraW5nJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBNYWluIGluaXRpYWxpemF0aW9uIG9yY2hlc3RyYXRvclxuICogXG4gKiBJbml0aWFsaXplcyB0aGUgZXh0ZXJuYWwgdHJhY2tpbmcgc3lzdGVtIGZyb20gc2NyaXB0IGF0dHJpYnV0ZXNcbiAqIGFuZCBzdGFydHMgdGltZS1vbi1wYWdlIHRyYWNraW5nIGlmIHN1Y2Nlc3NmdWwuXG4gKi9cbmNvbnN0IGluaXRpYWxpemUgPSAoKTogdm9pZCA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdHJhY2tlciA9IGluaXRpYWxpemVGcm9tU2NyaXB0KCk7XG4gICAgXG4gICAgaWYgKHRyYWNrZXIpIHtcbiAgICAgIGxvZ2dlci5sb2coJ1RyYWNraW5nIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgc3RhcnRUaW1lVHJhY2tpbmcodHJhY2tlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5jcml0aWNhbCgnRXh0ZXJuYWwgVHJhY2tpbmcgZmFpbGVkIHRvIGluaXRpYWxpemUnKTtcbiAgICAgIGxvZ2dlci5jcml0aWNhbCgnTWFrZSBzdXJlIHRvIGluY2x1ZGUgZGF0YS10cmFja2luZy1pZCBpbiB5b3VyIHNjcmlwdCB0YWcnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmNyaXRpY2FsKCdJbml0aWFsaXphdGlvbiBmYWlsZWQ6JywgZXJyb3IpO1xuICB9XG59O1xuXG4vLyBFeGVjdXRlIGluaXRpYWxpemF0aW9uXG5pbml0aWFsaXplKCk7XG5cbi8vIEV4dGVuZCB3aW5kb3cgaW50ZXJmYWNlIGZvciBUeXBlU2NyaXB0XG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfVxufSIsIi8qKlxuICogRm9ybSBCdWlsZGVycyBNb2R1bGVcbiAqIFxuICogUHJvdmlkZXMgdXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGggdmFyaW91cyBmb3JtIGJ1aWxkZXIgcGx1Z2lucy5cbiAqIEVhY2ggZm9ybSBidWlsZGVyIGhhcyBpdHMgb3duIG1vZHVsZSB3aXRoIHNwZWNpYWxpemVkIGxhYmVsIGV4dHJhY3Rpb25cbiAqIGFuZCBmaWVsZCB0cmFuc2Zvcm1hdGlvbiBsb2dpYy5cbiAqIFxuICogU3VwcG9ydGVkIEZvcm0gQnVpbGRlcnM6XG4gKiAtIEdyYXZpdHkgRm9ybXMgKFdvcmRQcmVzcyBwbHVnaW4pXG4gKiBcbiAqIEBtb2R1bGUgZm9ybS1idWlsZGVyc1xuICovXG5cbi8vIEdyYXZpdHkgRm9ybXNcbmV4cG9ydCAqIGFzIEdyYXZpdHlGb3JtcyBmcm9tICcuL2dyYXZpdHktZm9ybXMnO1xuXG4vLyBSZS1leHBvcnQgY29tbW9ubHkgdXNlZCB1dGlsaXRpZXMgZnJvbSBHcmF2aXR5IEZvcm1zXG5leHBvcnQgeyBcbiAgZ2V0Q29tYmluZWRMYWJlbCBhcyBnZXRHcmF2aXR5Rm9ybXNDb21iaW5lZExhYmVsLFxuICBpc0dyYXZpdHlGb3Jtc0ZpZWxkLFxuICBjbGVhbkxhYmVsVGV4dCxcbn0gZnJvbSAnLi9ncmF2aXR5LWZvcm1zJztcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy52ZXJzaW9uID0gZXhwb3J0cy52YWxpZGF0ZSA9IGV4cG9ydHMudjcgPSBleHBvcnRzLnY2VG9WMSA9IGV4cG9ydHMudjYgPSBleHBvcnRzLnY1ID0gZXhwb3J0cy52NCA9IGV4cG9ydHMudjMgPSBleHBvcnRzLnYxVG9WNiA9IGV4cG9ydHMudjEgPSBleHBvcnRzLnN0cmluZ2lmeSA9IGV4cG9ydHMucGFyc2UgPSBleHBvcnRzLk5JTCA9IGV4cG9ydHMuTUFYID0gdm9pZCAwO1xudmFyIG1heF9qc18xID0gcmVxdWlyZShcIi4vbWF4LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTUFYXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXhfanNfMS5kZWZhdWx0OyB9IH0pO1xudmFyIG5pbF9qc18xID0gcmVxdWlyZShcIi4vbmlsLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTklMXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuaWxfanNfMS5kZWZhdWx0OyB9IH0pO1xudmFyIHBhcnNlX2pzXzEgPSByZXF1aXJlKFwiLi9wYXJzZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYXJzZV9qc18xLmRlZmF1bHQ7IH0gfSk7XG52YXIgc3RyaW5naWZ5X2pzXzEgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0cmluZ2lmeV9qc18xLmRlZmF1bHQ7IH0gfSk7XG52YXIgdjFfanNfMSA9IHJlcXVpcmUoXCIuL3YxLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjFcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHYxX2pzXzEuZGVmYXVsdDsgfSB9KTtcbnZhciB2MVRvVjZfanNfMSA9IHJlcXVpcmUoXCIuL3YxVG9WNi5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInYxVG9WNlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdjFUb1Y2X2pzXzEuZGVmYXVsdDsgfSB9KTtcbnZhciB2M19qc18xID0gcmVxdWlyZShcIi4vdjMuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2M1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdjNfanNfMS5kZWZhdWx0OyB9IH0pO1xudmFyIHY0X2pzXzEgPSByZXF1aXJlKFwiLi92NC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInY0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybi
2B2NF9qc18xLmRlZmF1bHQ7IH0gfSk7XG52YXIgdjVfanNfMSA9IHJlcXVpcmUoXCIuL3Y1LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHY1X2pzXzEuZGVmYXVsdDsgfSB9KTtcbnZhciB2Nl9qc18xID0gcmVxdWlyZShcIi4vdjYuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2NlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdjZfanNfMS5kZWZhdWx0OyB9IH0pO1xudmFyIHY2VG9WMV9qc18xID0gcmVxdWlyZShcIi4vdjZUb1YxLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjZUb1YxXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2NlRvVjFfanNfMS5kZWZhdWx0OyB9IH0pO1xudmFyIHY3X2pzXzEgPSByZXF1aXJlKFwiLi92Ny5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInY3XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2N19qc18xLmRlZmF1bHQ7IH0gfSk7XG52YXIgdmFsaWRhdGVfanNfMSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFsaWRhdGVcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbGlkYXRlX2pzXzEuZGVmYXVsdDsgfSB9KTtcbnZhciB2ZXJzaW9uX2pzXzEgPSByZXF1aXJlKFwiLi92ZXJzaW9uLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmVyc2lvblwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdmVyc2lvbl9qc18xLmRlZmF1bHQ7IH0gfSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZGVmYXVsdCA9ICdmZmZmZmZmZi1mZmZmLWZmZmYtZmZmZi1mZmZmZmZmZmZmZmYnO1xuIiwiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uVGltaW5nIH0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IFVQREFURV9JTlRFUlZBTF9NUyA9IDEwMDA7XG5jb25zdCBJTkFDVElWSVRZX01TID0gMzAgKiA2MCAqIDEwMDA7XG5jb25zdCBBQ1RJVklUWV9FVkVOVFMgPSBbJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJtb3ZlJywgJ2tleWRvd24nLCAnc2Nyb2xsJywgJ3RvdWNoc3RhcnQnLCAndG91Y2htb3ZlJ107XG5cbi8qKlxuICogTGlnaHR3ZWlnaHQgZW5nYWdlbWVudCB0cmFja2VyIHRvIGNhcHR1cmUgYWN0aXZlIHRpbWUgb24gcGFnZVxuICovXG5leHBvcnQgY2xhc3MgVGltZU9uUGFnZVRyYWNrZXIge1xuICBwcml2YXRlIHNlc3Npb25TdGFydDogbnVtYmVyO1xuICBwcml2YXRlIGxhc3RBY3Rpdml0eUF0OiBudW1iZXI7XG4gIHByaXZhdGUgbGFzdFRpY2s6IG51bWJlcjtcbiAgcHJpdmF0ZSBhY3RpdmVUaW1lTXMgPSAwO1xuICBwcml2YXRlIHVwZGF0ZVRpbWVyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0lkbGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkZXN0cm95ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBmbHVzaGVkID0gZmFsc2U7XG4gIHByaXZhdGUgc2Vzc2lvbkV4cGlyZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvblNlc3Npb25Db21wbGV0ZTogKHRpbWluZzogU2Vzc2lvblRpbWluZykgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihvbkNvbXBsZXRlOiAodGltaW5nOiBTZXNzaW9uVGltaW5nKSA9PiB2b2lkKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLm9uU2Vzc2lvbkNvbXBsZXRlID0gb25Db21wbGV0ZTtcbiAgICB0aGlzLnNlc3Npb25TdGFydCA9IG5vdztcbiAgICB0aGlzLmxhc3RBY3Rpdml0eUF0ID0gbm93O1xuICAgIHRoaXMubGFzdFRpY2sgPSBub3c7XG4gICAgdGhpcy5iaW5kKCk7XG4gIH1cblxuICBwcml2YXRlIGJpbmQoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIEFDVElWSVRZX0VWRU5UUy5mb3JFYWNoKChldnQpID0+XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGV2dCwgdGhpcy5vbkFjdGl2aXR5LCB7IHBhc3NpdmU6IHRydWUgfSksXG4gICAgICApO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCB0aGlzLm9uVW5sb2FkLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncGFnZWhpZGUnLCB0aGlzLm9uVW5sb2FkLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICB0aGlzLnVwZGF0ZVRpbWVyID0gd2luZG93LnNldEludGVydmFsKHRoaXMudGljaywgVVBEQVRFX0lOVEVSVkFMX01TKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYmluZCBldmVudCBsaXN0ZW5lcnMnLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkFjdGl2aXR5ID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBpZiAodGhpcy5zZXNzaW9uRXhwaXJlZCkge1xuICAgICAgdGhpcy5zZXNzaW9uU3RhcnQgPSBub3c7XG4gICAgICB0aGlzLmxhc3RUaWNrID0gbm93O1xuICAgICAgdGhpcy5hY3RpdmVUaW1lTXMgPSAwO1xuICAgICAgdGhpcy5mbHVzaGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnNlc3Npb25FeHBpcmVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0QWN0aXZpdHlBdCA9IG5vdztcbiAgICB0aGlzLmlzSWRsZSA9IGZhbHNlO1xuICB9O1xuXG4gIHByaXZhdGUgb25WaXNpYmlsaXR5Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgIGRvY3VtZW50LmhpZGRlbiA/IHRoaXMuY2hlY2tUaW1lb3V0KCkgOiB0aGlzLm9uQWN0aXZpdHkoKTtcbiAgfTtcblxuICBwcml2YXRlIGNoZWNrVGltZW91dCgpOiB2b2lkIHtcbiAgICBpZiAoRGF0ZS
25ub3coKSAtIHRoaXMubGFzdEFjdGl2aXR5QXQgPj0gSU5BQ1RJVklUWV9NUykge1xuICAgICAgdGhpcy5lbWl0VXBkYXRlKCk7XG4gICAgICB0aGlzLnNlc3Npb25FeHBpcmVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uVW5sb2FkID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5kZXN0cm95ZWQpIHRoaXMuZW1pdFVwZGF0ZSgpO1xuICB9O1xuXG4gIHByaXZhdGUgdGljayA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVybjtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5pc0lkbGUgPSBub3cgLSB0aGlzLmxhc3RBY3Rpdml0eUF0ID49IElOQUNUSVZJVFlfTVM7XG5cbiAgICBpZiAoIWRvY3VtZW50LmhpZGRlbiAmJiAhdGhpcy5pc0lkbGUpIHtcbiAgICAgIHRoaXMuYWN0aXZlVGltZU1zICs9IG5vdyAtIHRoaXMubGFzdFRpY2s7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0VGljayA9IG5vdztcbiAgICB0aGlzLmNoZWNrVGltZW91dCgpO1xuICB9O1xuXG4gIHByaXZhdGUgZW1pdFVwZGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQgfHwgdGhpcy5mbHVzaGVkKSByZXR1cm47XG4gICAgdGhpcy5mbHVzaGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IHNlc3Npb25FbmQgPSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKCFkb2N1bWVudC5oaWRkZW4gJiYgIXRoaXMuaXNJZGxlKSB7XG4gICAgICB0aGlzLmFjdGl2ZVRpbWVNcyArPSBzZXNzaW9uRW5kIC0gdGhpcy5sYXN0VGljaztcbiAgICB9XG4gICAgdGhpcy5sYXN0VGljayA9IHNlc3Npb25FbmQ7XG5cbiAgICB0aGlzLm9uU2Vzc2lvbkNvbXBsZXRlKHtcbiAgICAgIHNlc3Npb25TdGFydDogdGhpcy5zZXNzaW9uU3RhcnQsXG4gICAgICBzZXNzaW9uRW5kLFxuICAgICAgdGltZVNwZW50TXM6IE1hdGgubWF4KDAsIE1hdGgucm91bmQodGhpcy5hY3RpdmVUaW1lTXMpKSxcbiAgICB9KTtcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuXG4gICAgQUNUSVZJVFlfRVZFTlRTLmZvckVhY2goKGV2dCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0LCB0aGlzLm9uQWN0aXZpdHkpKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgdGhpcy5vblZpc2liaWxpdHlDaGFuZ2UpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCB0aGlzLm9uVW5sb2FkKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGFnZWhpZGUnLCB0aGlzLm9uVW5sb2FkKTtcbiAgICBpZiAodGhpcy51cGRhdGVUaW1lcikgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVUaW1lcik7XG4gIH1cbn1cbiIsImltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuXG4vLyBSZS1leHBvcnQgZnJvbSBzcGVjaWFsaXplZCBtb2R1bGVzXG5leHBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5leHBvcnQgeyBwYXJzZUZvcm1EYXRhLCB0eXBlIEZvcm1QYXJzZVJlc3VsdCB9IGZyb20gJy4vZm9ybS1wYXJzZXInO1xuZXhwb3J0IHsgY29udGFpbnNQYXNzd29yZCwgaXNQYXNzd29yZExpa2VGaWVsZCB9IGZyb20gJy4vZmllbGQtdXRpbHMnO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgVVVJRCB2NCBmb3Igc2Vzc2lvbklkXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVNlc3Npb25JZCA9ICgpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gdXVpZHY0KCk7XG59O1xuXG4vKipcbiAqIEdldCBjb29raWUgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvb2tpZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YWx1ZSA9IGA7ICR7ZG9jdW1lbnQuY29va2llfWA7XG4gICAgY29uc3QgcGFydHMgPSB2YWx1ZS5zcGxpdChgOyAke25hbWV9PWApO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHJldHVybiBwYXJ0cy5wb3AoKT8uc3BsaXQoJzsnKS5zaGlmdCgpIHx8IG51bGw7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdFcnJvciBnZXR0aW5nIGNvb2tpZTonLCBlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbi8qKlxuICogU2V0IGNvb2tpZSB2YWx1ZVxuICovXG5leHBvcnQgY29uc3Qgc2V0Q29va2llID0gKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgZGF5czogbnVtYmVyKTogdm9pZCA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgKGRheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7XG4gICAgY29uc3QgZXhwaXJlcyA9IGBleHBpcmVzPSR7ZGF0ZS50b1VUQ1N0cmluZygpfWA7XG4gICAgZG9jdW1lbnQuY29va2llID0gYCR7bmFtZX09JHt2YWx1ZX07JHtleHBpcmVzfTtwYXRoPS87U2FtZVNpdGU9TGF4YDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5lcnJvcignRXJyb3Igc2V0dGluZyBjb29raWU6JywgZSk7XG4gIH1cbn07XG5cbi8qKlxuICogU3RvcmUgdXNlciBkYXRhIGluIGxvY2FsU3RvcmFnZSAoc2ltaWxhciB0byBfdWQgaW4gRm9ybUNvbXBvbmVudClcbiAqL1xuZXhwb3J0IGNvbnN0IHN0b3JlVXNlckRhdGEgPSAoZGF0YTogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQgPT4ge1xuICB0cnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubG9jYWxTdG9yYWdlKSB7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ191ZCcsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIHN0b3JpbmcgdXNlciBkYXRhOicsIGUpO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCB1c2VyIGRhdGEgZnJvbSBsb2NhbFN0b3JhZ2VcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFVzZXJEYXRhID0gKCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsID0+IHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2FsU3RvcmFnZSkge1xuICAgICAgY29uc3QgZGF0YSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnX3VkJyk7XG4gICAgICBpZiAoIWRhdGEpIHJldHVybi
2BudWxsO1xuXG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGRhdGEpIGFzIFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgICAgIGlmIChwYXJzZWQgJiYgdHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgJ2N1c3RvbWVyX2lkJyBpbiBwYXJzZWQpIHtcbiAgICAgICAgY29uc3QgY2lkID0gKHBhcnNlZCBhcyBhbnkpLmN1c3RvbWVyX2lkO1xuICAgICAgICBpZiAoY2lkICE9PSB1bmRlZmluZWQgJiYgY2lkICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IFN0cmluZyhjaWQpLnRyaW0oKTtcbiAgICAgICAgICBpZiAobm9ybWFsaXplZCkge1xuICAgICAgICAgICAgKHBhcnNlZCBhcyBhbnkpLmNvbnRhY3RJZCA9IG5vcm1hbGl6ZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdFcnJvciBnZXR0aW5nIHVzZXIgZGF0YTonLCBlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbi8qKlxuICogU3RvcmUgc2Vzc2lvbklkIHdpdGggY29va2llIGZhbGxiYWNrIHRvIHNlc3Npb25TdG9yYWdlXG4gKi9cbmV4cG9ydCBjb25zdCBzdG9yZVNlc3Npb25JZEluQ29va2llID0gKHNlc3Npb25TY29wZUlkOiBzdHJpbmcsIHNlc3Npb25JZDogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGNvbnN0IGNvb2tpZU5hbWUgPSBgbGNfc2Vzc2lvbl8ke3Nlc3Npb25TY29wZUlkfWA7XG4gIFxuICAvLyBUcnkgY29va2llIGZpcnN0XG4gIHNldENvb2tpZShjb29raWVOYW1lLCBzZXNzaW9uSWQsIDEpO1xuICBcbiAgLy8gVmVyaWZ5IGNvb2tpZSB3b3JrZWQsIGlmIG5vdCBmYWxsYmFjayB0byBzZXNzaW9uU3RvcmFnZVxuICBjb25zdCB2ZXJpZmljYXRpb24gPSBnZXRDb29raWUoY29va2llTmFtZSk7XG4gIGlmICh2ZXJpZmljYXRpb24gIT09IHNlc3Npb25JZCkge1xuICAgIC8vIENvb2tpZSBmYWlsZWQsIHVzZSBzZXNzaW9uU3RvcmFnZSBhcyBmYWxsYmFja1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNlc3Npb25TdG9yYWdlKSB7XG4gICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGNvb2tpZU5hbWUsIHNlc3Npb25JZCk7XG4gICAgICAgIGxvZ2dlci5hcGkoYFNlc3Npb25JZCBzdG9yZWQgaW4gc2Vzc2lvblN0b3JhZ2UgKGNvb2tpZSBmYWxsYmFjayk6ICR7c2Vzc2lvbklkfWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignQm90aCBjb29raWUgYW5kIHNlc3Npb25TdG9yYWdlIGZhaWxlZCBmb3Igc2Vzc2lvbklkIHN0b3JhZ2UnLCBlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmFwaShgU2Vzc2lvbklkIHN0b3JlZCBpbiBjb29raWU6ICR7c2Vzc2lvbklkfWApO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCBzZXNzaW9uSWQgZnJvbSBjb29raWUgd2l0aCBzZXNzaW9uU3RvcmFnZSBmYWxsYmFja1xuICovXG5leHBvcnQgY29uc3QgZ2V0U2Vzc2lvbklkRnJvbUNvb2tpZSA9IChzZXNzaW9uU2NvcGVJZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGNvb2tpZU5hbWUgPSBgbGNfc2Vzc2lvbl8ke3Nlc3Npb25TY29wZUlkfWA7XG4gIFxuICAvLyBUcnkgY29va2llIGZpcnN0XG4gIGNvbnN0IGNvb2tpZVJlc3VsdCA9IGdldENvb2tpZShjb29raWVOYW1lKTtcbiAgaWYgKGNvb2tpZVJlc3VsdCkge1xuICAgIHJldHVybiBjb29raWVSZXN1bHQ7XG4gIH1cbiAgXG4gIC8vIEZhbGxiYWNrIHRvIHNlc3Npb25TdG9yYWdlXG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZSkge1xuICAgICAgY29uc3Qgc2Vzc2lvblN0b3JhZ2VSZXN1bHQgPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShjb29raWVOYW1lKTtcbiAgICAgIGlmIChzZXNzaW9uU3RvcmFnZVJlc3VsdCkge1xuICAgICAgICBsb2dnZXIuYXBpKGBTZXNzaW9uSWQgcmV0cmlldmVkIGZyb20gc2Vzc2lvblN0b3JhZ2UgKGNvb2tpZSBmYWxsYmFjayk6ICR7c2Vzc2lvblN0b3JhZ2VSZXN1bHR9YCk7XG4gICAgICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZVJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0JvdGggY29va2llIGFuZCBzZXNzaW9uU3RvcmFnZSBmYWlsZWQgZm9yIHNlc3Npb25JZCByZXRyaWV2YWwnLCBlKTtcbiAgfVxuICBcbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFNhZmUgbG9jYWxTdG9yYWdlIGdldHRlclxuICovXG5leHBvcnQgY29uc3QgZ2V0RnJvbVN0b3JhZ2UgPSAoa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2FsU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5lcnJvcignRXJyb3IgZ2V0dGluZyBmcm9tIHN0b3JhZ2U6JywgZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFNhZmUgbG9jYWxTdG9yYWdlIHNldHRlclxuICovXG5leHBvcnQgY29uc3Qgc2V0SW5TdG9yYWdlID0gKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIHNldHRpbmcgaW4gc3RvcmFnZTonLCBlKTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZWJvdW5jZSBmdW5jdGlvbiBmb3IgcGVyZm9ybWFuY2VcbiAqL1xuZXhwb3J0IGNvbnN0IGRlYm91bmNlID0gPFQgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueT4oXG4gIGZ1bmM6IFQsXG4gIHdhaXQ6IG51bWJlclxuKTogKCguLi5hcmdzOiBQYXJhbWV0ZXJzPFQ+KSA9PiB2b2lkKSA9PiB7XG4gIGxldCB0aW1lb3V0OiBOb2RlSlMuVGltZW91dDtcbiAgXG4gIHJldHVybi
2BmdW5jdGlvbiBleGVjdXRlZEZ1bmN0aW9uKC4uLmFyZ3M6IFBhcmFtZXRlcnM8VD4pIHtcbiAgICBjb25zdCBsYXRlciA9ICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGZ1bmMoLi4uYXJncyk7XG4gICAgfTtcbiAgICBcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICB9O1xufTtcblxuLyoqXG4gKiBHZXQgZGV2aWNlIHR5cGUgYmFzZWQgb24gdXNlciBhZ2VudCBhbmQgZGV2aWNlIGNhcGFiaWxpdGllc1xuICovXG5leHBvcnQgY29uc3QgZ2V0RGV2aWNlVHlwZSA9ICgpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBuYXYgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyA/IG5hdmlnYXRvciA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdWEgPSAobmF2Py51c2VyQWdlbnQgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IG1heFRvdWNoUG9pbnRzID0gbmF2Py5tYXhUb3VjaFBvaW50cyB8fCAwO1xuICBjb25zdCB1c2VyQWdlbnREYXRhID0gKG5hdiBhcyBhbnkpPy51c2VyQWdlbnREYXRhO1xuICBjb25zdCBpc01vYmlsZUhpbnQgPSB1c2VyQWdlbnREYXRhPy5tb2JpbGUgPT09IHRydWU7XG5cbiAgaWYgKFxuICAgIHVhLmluY2x1ZGVzKCdpcGFkJykgfHxcbiAgICB1YS5pbmNsdWRlcygndGFibGV0JykgfHxcbiAgICAodWEuaW5jbHVkZXMoJ2FuZHJvaWQnKSAmJiAhdWEuaW5jbHVkZXMoJ21vYmlsZScpKSB8fFxuICAgICh1YS5pbmNsdWRlcygnbWFjaW50b3NoJykgJiYgbWF4VG91Y2hQb2ludHMgPiAxKVxuICApIHtcbiAgICByZXR1cm4gJ3RhYmxldCc7XG4gIH1cblxuICBpZiAoXG4gICAgaXNNb2JpbGVIaW50IHx8XG4gICAgdWEuaW5jbHVkZXMoJ21vYmknKSB8fFxuICAgIHVhLmluY2x1ZGVzKCdpcGhvbmUnKSB8fFxuICAgIHVhLmluY2x1ZGVzKCdpcG9kJykgfHxcbiAgICAodWEuaW5jbHVkZXMoJ2FuZHJvaWQnKSAmJiB1YS5pbmNsdWRlcygnbW9iaWxlJykpXG4gICkge1xuICAgIHJldHVybiAnbW9iaWxlJztcbiAgfVxuXG4gIHJldHVybiAnZGVza3RvcCc7XG59O1xuXG4vKipcbiAqIEdldCBwYWdlIG1ldGFkYXRhXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQYWdlTWV0YWRhdGEgPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgdGl0bGU6IGRvY3VtZW50LnRpdGxlLFxuICAgIHVybDogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgcGF0aDogd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgIHJlZmVycmVyOiBkb2N1bWVudC5yZWZlcnJlcixcbiAgICB1c2VyQWdlbnQ6IG5hdmlnYXRvci51c2VyQWdlbnQsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWxUaW1lWm9uZSA9ICgpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldExvY2FsVGltZVpvbmVPZmZzZXQgPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbWF0Y2ggPSBuZXcgRGF0ZSgpLnRvU3RyaW5nKCkubWF0Y2goLyhbQS1aXStbXFwrLV1bMC05XXsyfSkoWzAtOV17Mn0pLyk7XG4gIHJldHVybiBtYXRjaCA/IGAoJHttYXRjaFsxXX06JHttYXRjaFsyXX0pYCA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZvcm1hdHRlZFRpbWV6b25lID0gKCk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBgJHtnZXRMb2NhbFRpbWVab25lKCl9ICR7Z2V0TG9jYWxUaW1lWm9uZU9mZnNldCgpfWA7XG59O1xuXG4vKipcbiAqIEZvcm0gYnVpbGRlcnMgLyB3cmFwcGVycyB3aGVyZSB3ZSBrZWVwIHRpdGxlLWZpcnN0IHJlc29sdXRpb24gKGhlYWRpbmdzLCBwbHVnaW4gdGl0bGVzKS5cbiAqIFBsYWluIGA8Zm9ybSBpZD1cIi4uLlwiPmAgd2l0aG91dCB0aGVzZSBhbmNlc3RvcnMgdXNlcyBpZC9uYW1lIGZpcnN0IHNvIGRlZmF1bHQgSFRNTFxuICogbWF0Y2hlcyBwcmlvciBleHBlY3RhdGlvbnMgYW5kIGlzIG5vdCBvdmVycmlkZGVuIGJ5IGFuIGlubmVyIGA8aDI+YCBldGMuXG4gKlxuICogU2VsZWN0b3JzIGFyZSBjaG9zZW4gZnJvbSBlYWNoIHBsdWdpbuKAmXMgdHlwaWNhbCBmcm9udC1lbmQgbWFya3VwIChzaG9ydGNvZGUvYmxvY2sgb3V0cHV0KS5cbiAqIElmIGEgYnVpbGRlciBpcyBtaXNzaW5nLCBhZGQgYSBzdGFibGUgd3JhcHBlciBjbGFzcyBmcm9tIHRoYXQgcGx1Z2lu4oCZcyByZW5kZXJlZCBIVE1MLlxuICovXG5jb25zdCBDVVNUT01fRk9STV9DT05URVhUX1NFTEVDVE9SUyA9IFtcbiAgLy8gR3Jhdml0eSBGb3Jtc1xuICAnLmdmb3JtX3dyYXBwZXInLFxuICAnLmdmX2Jyb3dzZXJfY2hyb21lJyxcbiAgLy8gQ29udGFjdCBGb3JtIDdcbiAgJy53cGNmNycsXG4gICcud3BjZjctZm9ybScsXG4gIC8vIEZvcm1pZGFibGUgRm9ybXMgKC53aXRoX2ZybV9zdHlsZSAvIGNvbnRhaW5lciAvIGZvcm0gY2xhc3MgZnJvbSB0aGVpciBkb2NzICYgZGVmYXVsdCBIVE1MKVxuICAnLndpdGhfZnJtX3N0eWxlJyxcbiAgJy5mcm1fZm9ybXNfY29udGFpbmVyJyxcbiAgJy5mcm0tc2hvdy1mb3JtJyxcbiAgJ1tpZF49XCJmcm1fZm9ybV9cIl0nLFxuICAvLyBGbHVlbnQgRm9ybXNcbiAgJy5mbHVlbnRmb3JtJyxcbiAgJy5mZi1lbC1mb3JtLS1jb250YWluZXInLFxuICAvLyBFdmVyZXN0IEZvcm1zIChkZWZhdWx0IHNob3J0Y29kZSB3cmFwcGVyIHBlciBkZXZlbG9wZXIuZXZlcmVzdGZvcm1zLm5ldClcbiAgJy5ldmVyZXN0LWZvcm1zJyxcbiAgLy8gSGFwcHlGb3JtcyAoY29tbW9uIGNsYXNzZXMgaW4gdGhlbWUvd2lkZ2V0IHdyYXBwZXJzOyBwbHVnaW4gdXNlcyBcImhhcHB5Zm9ybXNcIiBpbiBtYXJrdXApXG4gICcuaGFwcHlmb3JtcycsXG4gICcuaGFwcHlmb3Jtcy1mb3JtJyxcbiAgJy5oYXBweWZvcm1zLWZvcm0td3JhcCcsXG4gIC8vIE5pbmphIEZvcm1zXG4gICcubmYtZm9ybS1jb250JyxcbiAgJy5uaW5qYS1mb3Jtcy1mb3JtLXdyYXAnLFxuICAvLyBXUEZvcm1zXG4gICcud3Bmb3Jtcy1jb250YWluZXInLFxuICAnLndwZm9ybXMtZm9ybS1jb250YWluZXInLFxuICAvLyBFbGVtZW50b3IgZm9ybSB3aWRnZXRzXG4gICcuZWxlbWVudG9yLXdpZGdldC1mb3JtJyxcbiAgJy5lbGVtZW50b3ItZm9ybScsXG5dIGFzIGNvbnN0O1xuXG5jb25zdCBpc0N1c3RvbUZvcm1Db250ZXh0ID0gKGZvcm06IEVsZW1lbnQpOiBib29sZWFuID0+XG4gIENVU1RPTV9GT1JNX0NPTlRFWFRfU0VMRUNUT1JTLnNvbWUoKHNlbCkgPT4gISFmb3JtLmNsb3Nlc3Qoc2VsKSk7XG5cbmNvbnN0IHBpY2tGb3JtQXR0ciA9IChmb3JtOiBFbGVtZW50LCBhdHRyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCB2ID0gZm9ybS5nZXRBdHRyaWJ1dGUoYXR0cik/LnRyaW0oKTtcbiAgcmV0dXJuIHYgfHwgdW5kZWZpbmVkO1xufTtcblxuLyoqIEN1c3RvbSBidWlsZGVyczogdW5jaGFuZ2VkIGZhbGxiYWNrIG9yZGVyIChuYW1lIGJlZm9yZSBpZCkuICovXG5jb25zdCBnZXRFeHBsaWNpdEZvcm1BdHRyaWJ1dGVzTmFtZUZpcnN0ID0gKGZvcm06IEVsZW1lbnQpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT5cbiAgcGlja0Zvcm1BdHRyKGZvcm0sICduYW1lJykgfHxcbiAgcGlja0Zvcm1BdHRyKGZvcm0sICdpZCcpIHx8XG4gIHBpY2tGb3JtQXR0cihmb3JtLCAnZGF0YS1mb3JtaWQnKSB8fFxuICBwaWNrRm9ybUF0dHIoZm9ybSwgJ2RhdGEtbmFtZScpO1xuXG4vKiogUGxhaW4gSFRNTCBmb3JtczogcHJlZmVyIGlkIGxpa2UgY2xhc3NpYyBiZWhhdmlvciwgdGhlbiBuYW1lLiAqL1xuY29uc3QgZ2V0RXhwbGljaXRGb3JtQXR0cmlidXRlc0lkRmlyc3QgPSAoZm9ybTogRWxlbWVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PlxuICBwaWNrRm9ybUF0dHIoZm9ybSwgJ2lkJykgfHxcbiAgcGlja0Zvcm1BdHRyKGZvcm0sICduYW1lJykgfHxcbiAgcGlja0Zvcm1BdHRyKGZvcm0sICdkYXRhLWZvcm1pZCcpIHx8XG4gIHBpY2tGb3JtQXR0cihmb3JtLCAnZGF0YS1uYW1lJyk7XG5cbi8qKlxuICogRGVyaXZlIGEgc3RhYmxlIGlkZW50aWZpZXIgZm9yIGEgZm9ybSBlbGVtZW50LlxuICogU3VwcG9ydHMgc3RhbmRhcmQgZm9ybXMsIEdyYXZpdHkgRm9ybXMsIGFuZCBjb21tb24gV29yZFByZXNzIGZvcm0gcGx1Z2lucy5cbiAqXG4gKiBOb3RlOiBVc2VzIGdldEF0dHJpYnV0ZSgpIGluc3RlYWQgb2YgZGlyZWN0IHByb3BlcnR5IGFjY2VzcyBiZWNhdXNlXG4gKiBmb3JtIGVsZW1lbnRzIHdpdGggbmFtZT1cIm5hbWVcIiBvciBuYW1lPVwiaWRcIiBzaGFkb3cgdGhlIGZvcm0ncyBvd25cbiAqIG5hbWUvaWQgcHJvcGVydGllcyAoRE9NIHF1aXJrKS5cbiAqL1xuLyoqXG4gKiBFeHRyYWN0IGEgaHVtYW4tcmVhZGFibGUgZm9ybSB0aXRsZSBmcm9tIHRoZSBET00gc3Vycm91bmRpbmcgdGhlIGZvcm0gZWxlbWVudC5cbiAqIENoZWNrcyBHcmF2aXR5IEZvcm1zIGAuZ2Zvcm1fdGl0bGVgLCBjb21tb24gaGVhZGluZyBwYXR0ZXJucywgYW5kIGRhdGEgYXR0cmlidXRlcy5cbiAqL1xuY29uc3QgZXh0cmFjdEZvcm1UaXRsZSA9IChmb3JtOiBFbGVtZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3Qgd3JhcHBlciA9IGZvcm0uY2xvc2VzdCgnLmdmb3JtX3dyYXBwZXIsIC5nZl9icm93c2VyX2Nocm9tZScpO1xuICBpZiAod3JhcHBlcikge1xuICAgIGNvbnN0IHRpdGxlRWwgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy5nZm9ybV90aXRsZScpO1xuICAgIGNvbnN0IHRpdGxlID0gdGl0bGVFbD8udGV4dENvbnRlbnQ/LnRyaW0oKTtcbiAgICBpZiAodGl0bGUpIHJldHVybi
2B0aXRsZTtcbiAgfVxuXG4gIGNvbnN0IGludGVybmFsSGVhZGluZyA9IGZvcm0ucXVlcnlTZWxlY3RvcignaDEsIGgyLCBoMywgaDQsIGxlZ2VuZCcpO1xuICBpZiAoaW50ZXJuYWxIZWFkaW5nPy50ZXh0Q29udGVudD8udHJpbSgpKSB7XG4gICAgcmV0dXJuIGludGVybmFsSGVhZGluZy50ZXh0Q29udGVudC50cmltKCk7XG4gIH1cblxuICBjb25zdCBkYXRhVGl0bGUgPSBmb3JtLmdldEF0dHJpYnV0ZSgnZGF0YS10aXRsZScpIHx8IGZvcm0uZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJyk7XG4gIGlmIChkYXRhVGl0bGU/LnRyaW0oKSkgcmV0dXJuIGRhdGFUaXRsZS50cmltKCk7XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGb3JtSWRlbnRpZmllciA9IChcbiAgcm9vdD86IERvY3VtZW50IHwgRWxlbWVudCB8IEhUTUxGb3JtRWxlbWVudFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgdHJ5IHtcbiAgICBsZXQgdGFyZ2V0Rm9ybTogRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiBIVE1MRm9ybUVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHJvb3QgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQpIHtcbiAgICAgIHRhcmdldEZvcm0gPSByb290IGFzIEhUTUxGb3JtRWxlbWVudDtcbiAgICB9IGVsc2UgaWYgKHJvb3QgJiYgJ3F1ZXJ5U2VsZWN0b3InIGluIChyb290IGFzIGFueSkpIHtcbiAgICAgIHRhcmdldEZvcm0gPSAocm9vdCBhcyBEb2N1bWVudCB8IEVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0Rm9ybSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0nKTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldEZvcm0pIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNDdXN0b21Gb3JtQ29udGV4dCh0YXJnZXRGb3JtKSkge1xuICAgICAgY29uc3QgZm9ybVRpdGxlID0gZXh0cmFjdEZvcm1UaXRsZSh0YXJnZXRGb3JtKTtcbiAgICAgIGlmIChmb3JtVGl0bGUpIHJldHVybiBmb3JtVGl0bGU7XG4gICAgICByZXR1cm4gZ2V0RXhwbGljaXRGb3JtQXR0cmlidXRlc05hbWVGaXJzdCh0YXJnZXRGb3JtKSB8fCAnVW5pZGVudGlmaWVkIEZvcm0nO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQgSFRNTCBmb3JtczogcHJlZmVyIGlkICh0aGVuIG5hbWUpLCBub3QgYW4gaW5uZXIgaGVhZGluZywgdGhlbiB0aXRsZSBmYWxsYmFja1xuICAgIGNvbnN0IGV4cGxpY2l0ID0gZ2V0RXhwbGljaXRGb3JtQXR0cmlidXRlc0lkRmlyc3QodGFyZ2V0Rm9ybSk7XG4gICAgaWYgKGV4cGxpY2l0KSByZXR1cm4gZXhwbGljaXQ7XG5cbiAgICBjb25zdCBmb3JtVGl0bGUgPSBleHRyYWN0Rm9ybVRpdGxlKHRhcmdldEZvcm0pO1xuICAgIGlmIChmb3JtVGl0bGUpIHJldHVybiBmb3JtVGl0bGU7XG5cbiAgICByZXR1cm4gJ1VuaWRlbnRpZmllZCBGb3JtJztcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5lcnJvcignRXJyb3IgZ2V0dGluZyBmb3JtIGlkZW50aWZpZXI6JywgZSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcGFyc2VfanNfMSA9IHJlcXVpcmUoXCIuL3BhcnNlLmpzXCIpO1xuY29uc3Qgc3RyaW5naWZ5X2pzXzEgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG5mdW5jdGlvbiB2NlRvVjEodXVpZCkge1xuICAgIGNvbnN0IHY2Qnl0ZXMgPSB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgPyAoMCwgcGFyc2VfanNfMS5kZWZhdWx0KSh1dWlkKSA6IHV1aWQ7XG4gICAgY29uc3QgdjFCeXRlcyA9IF92NlRvVjEodjZCeXRlcyk7XG4gICAgcmV0dXJuIHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyA/ICgwLCBzdHJpbmdpZnlfanNfMS51bnNhZmVTdHJpbmdpZnkpKHYxQnl0ZXMpIDogdjFCeXRlcztcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHY2VG9WMTtcbmZ1bmN0aW9uIF92NlRvVjEodjZCeXRlcykge1xuICAgIHJldHVybiBVaW50OEFycmF5Lm9mKCgodjZCeXRlc1szXSAmIDB4MGYpIDw8IDQpIHwgKCh2NkJ5dGVzWzRdID4+IDQpICYgMHgwZiksICgodjZCeXRlc1s0XSAmIDB4MGYpIDw8IDQpIHwgKCh2NkJ5dGVzWzVdICYgMHhmMCkgPj4gNCksICgodjZCeXRlc1s1XSAmIDB4MGYpIDw8IDQpIHwgKHY2Qnl0ZXNbNl0gJiAweDBmKSwgdjZCeXRlc1s3XSwgKCh2NkJ5dGVzWzFdICYgMHgwZikgPDwgNCkgfCAoKHY2Qnl0ZXNbMl0gJiAweGYwKSA+PiA0KSwgKCh2NkJ5dGVzWzJdICYgMHgwZikgPDwgNCkgfCAoKHY2Qnl0ZXNbM10gJiAweGYwKSA+PiA0KSwgMHgxMCB8ICgodjZCeXRlc1swXSAmIDB4ZjApID4+IDQpLCAoKHY2Qnl0ZXNbMF0gJiAweDBmKSA8PCA0KSB8ICgodjZCeXRlc1sxXSAmIDB4ZjApID4+IDQpLCB2NkJ5dGVzWzhdLCB2NkJ5dGVzWzldLCB2NkJ5dGVzWzEwXSwgdjZCeXRlc1sxMV0sIHY2Qnl0ZXNbMTJdLCB2NkJ5dGVzWzEzXSwgdjZCeXRlc1sxNF0sIHY2Qnl0ZXNbMTVdKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgbmF0aXZlX2pzXzEgPSByZXF1aXJlKFwiLi9uYXRpdmUuanNcIik7XG5jb25zdCBybmdfanNfMSA9IHJlcXVpcmUoXCIuL3JuZy5qc1wiKTtcbmNvbnN0IHN0cmluZ2lmeV9qc18xID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgICBpZiAobmF0aXZlX2pzXzEuZGVmYXVsdC5yYW5kb21VVUlEICYmICFidWYgJiYgIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZV9qc18xLmRlZmF1bHQucmFuZG9tVVVJRCgpO1xuICAgIH1cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gPz8gb3B0aW9ucy5ybmc/LigpID8/ICgwLCBybmdfanNfMS5kZWZhdWx0KSgpO1xuICAgIGlmIChybmRzLmxlbmd0aCA8IDE2KSB7XG4gICAgICAgI
2HRocm93IG5ldyBFcnJvcignUmFuZG9tIGJ5dGVzIGxlbmd0aCBtdXN0IGJlID49IDE2Jyk7XG4gICAgfVxuICAgIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcbiAgICBybmRzWzhdID0gKHJuZHNbOF0gJiAweDNmKSB8IDB4ODA7XG4gICAgaWYgKGJ1Zikge1xuICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICsgMTYgPiBidWYubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVVVJRCBieXRlIHJhbmdlICR7b2Zmc2V0fToke29mZnNldCArIDE1fSBpcyBvdXQgb2YgYnVmZmVyIGJvdW5kc2ApO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgICAgICAgYnVmW29mZnNldCArIGldID0gcm5kc1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIHN0cmluZ2lmeV9qc18xLnVuc2FmZVN0cmluZ2lmeSkocm5kcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB2NDtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xubGV0IGdldFJhbmRvbVZhbHVlcztcbmNvbnN0IHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuZnVuY3Rpb24gcm5nKCkge1xuICAgIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY3J5cHRvID09PSAndW5kZWZpbmVkJyB8fCAhY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGdldFJhbmRvbVZhbHVlcyA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHJuZztcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51cGRhdGVWN1N0YXRlID0gdm9pZCAwO1xuY29uc3Qgcm5nX2pzXzEgPSByZXF1aXJlKFwiLi9ybmcuanNcIik7XG5jb25zdCBzdHJpbmdpZnlfanNfMSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcbmNvbnN0IF9zdGF0ZSA9IHt9O1xuZnVuY3Rpb24gdjcob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgICBsZXQgYnl0ZXM7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgYnl0ZXMgPSB2N0J5dGVzKG9wdGlvbnMucmFuZG9tID8/IG9wdGlvbnMucm5nPy4oKSA/PyAoMCwgcm5nX2pzXzEuZGVmYXVsdCkoKSwgb3B0aW9ucy5tc2Vjcywgb3B0aW9ucy5zZXEsIGJ1Ziwgb2Zmc2V0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IHJuZHMgPSAoMCwgcm5nX2pzXzEuZGVmYXVsdCkoKTtcbiAgICAgICAgdXBkYXRlVjdTdGF0ZShfc3RhdGUsIG5vdywgcm5kcyk7XG4gICAgICAgIGJ5dGVzID0gdjdCeXRlcyhybmRzLCBfc3RhdGUubXNlY3MsIF9zdGF0ZS5zZXEsIGJ1Ziwgb2Zmc2V0KTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZiA/PyAoMCwgc3RyaW5naWZ5X2pzXzEudW5zYWZlU3RyaW5naWZ5KShieXRlcyk7XG59XG5mdW5jdGlvbiB1cGRhdGVWN1N0YXRlKHN0YXRlLCBub3csIHJuZHMpIHtcbiAgICBzdGF0ZS5tc2VjcyA/Pz0gLUluZmluaXR5O1xuICAgIHN0YXRlLnNlcSA/Pz0gMDtcbiAgICBpZiAobm93ID4gc3RhdGUubXNlY3MpIHtcbiAgICAgICAgc3RhdGUuc2VxID0gKHJuZHNbNl0gPDwgMjMpIHwgKHJuZHNbN10gPDwgMTYpIHwgKHJuZHNbOF0gPDwgOCkgfCBybmRzWzldO1xuICAgICAgICBzdGF0ZS5tc2VjcyA9IG5vdztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN0YXRlLnNlcSA9IChzdGF0ZS5zZXEgKyAxKSB8IDA7XG4gICAgICAgIGlmIChzdGF0ZS5zZXEgPT09IDApIHtcbiAgICAgICAgICAgIHN0YXRlLm1zZWNzKys7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlO1xufVxuZXhwb3J0cy51cGRhdGVWN1N0YXRlID0gdXBkYXRlVjdTdGF0ZTtcbmZ1bmN0aW9uIHY3Qnl0ZXMocm5kcywgbXNlY3MsIHNlcSwgYnVmLCBvZmZzZXQgPSAwKSB7XG4gICAgaWYgKHJuZHMubGVuZ3RoIDwgMTYpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSYW5kb20gYnl0ZXMgbGVuZ3RoIG11c3QgYmUgPj0gMTYnKTtcbiAgICB9XG4gICAgaWYgKCFidWYpIHtcbiAgICAgICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgICAgICBvZmZzZXQgPSAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICsgMTYgPiBidWYubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVVVJRCBieXRlIHJhbmdlICR7b2Zmc2V0fToke29mZnNldCArIDE1fSBpcyBvdXQgb2YgYnVmZmVyIGJvdW5kc2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1zZWNzID8/PSBEYXRlLm5vdygpO1xuICAgIHNlcSA/Pz0gKChybmRzWzZdICogMHg3ZikgPDwgMjQpIHwgKHJuZHNbN10gPDwgMTYpIHwgKHJuZHNbOF0gPDwgOCkgfCBybmRzWzldO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAobXNlY3MgLyAweDEwMDAwMDAwMDAwKSAmIDB4ZmY7XG4gICAgYnVmW29mZnNldCsrXSA9IChtc2VjcyAvIDB4MTAwMDAwMDAwKSAmIDB4ZmY7XG4gICAgYnVmW29mZnNldCsrXSA9IChtc2VjcyAvIDB4MTAwMDAwMCkgJiAweGZmO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAobXNlY3MgLyAweDEwMDAwKSAmIDB4ZmY7XG4gICAgYnVmW29mZnNldCsrXSA9IChtc2VjcyAvIDB4MTAwKSAmIDB4ZmY7XG4gICAgYnVmW29mZnNldCsrXSA9IG1zZWNzICYgMHhmZjtcbiAgICBidWZbb2Zmc2V0KytdID0gMHg3MCB8ICgoc2VxID4+PiAyOCkgJiAweDBmKTtcbiAgICBidWZbb2Zmc2V0KytdID0gKHNlcSA+Pj4gMjApICYgMHhmZjtcbiAgICBidWZbb2Zmc2V0KytdID0gMHg4MCB8ICgoc2VxID4+PiAxNCkgJiAweDNmKTtcbiAgICBidWZbb2Zmc2V0KytdID0gKHNlcSA+Pj4gNikgJiAweGZmO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAoKHNlcSA8PCAyKSAmIDB4ZmYpIHwgKHJuZHNbMTBdICYgMHgwMyk7XG4gICAgYnVmW29mZnNldCsrXSA9IHJuZHNbMTFdO1xuICAgIGJ1ZltvZmZzZXQrK10gPSBybmRzWzEyXTtcbiAgICBidWZbb2Zmc2V0KytdID0gcm5kc1sxM107XG4gICAgYnVmW29mZnNldCsrXSA9IHJuZHNbMTRdO1xuICAgIGJ1ZltvZmZzZXQrK10gPSBybmRzWzE1XTtcbiAgICByZXR1cm4gYnVmO1xufVxuZXhwb3J0cy5kZWZh
2dWx0ID0gdjc7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIG1kNShieXRlcykge1xuICAgIGNvbnN0IHdvcmRzID0gdWludDhUb1VpbnQzMihieXRlcyk7XG4gICAgY29uc3QgbWQ1Qnl0ZXMgPSB3b3Jkc1RvTWQ1KHdvcmRzLCBieXRlcy5sZW5ndGggKiA4KTtcbiAgICByZXR1cm4gdWludDMyVG9VaW50OChtZDVCeXRlcyk7XG59XG5mdW5jdGlvbiB1aW50MzJUb1VpbnQ4KGlucHV0KSB7XG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShpbnB1dC5sZW5ndGggKiA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aCAqIDQ7IGkrKykge1xuICAgICAgICBieXRlc1tpXSA9IChpbnB1dFtpID4+IDJdID4+PiAoKGkgJSA0KSAqIDgpKSAmIDB4ZmY7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbn1cbmZ1bmN0aW9uIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aDgpIHtcbiAgICByZXR1cm4gKCgoaW5wdXRMZW5ndGg4ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0ICsgMTtcbn1cbmZ1bmN0aW9uIHdvcmRzVG9NZDUoeCwgbGVuKSB7XG4gICAgY29uc3QgeHBhZCA9IG5ldyBVaW50MzJBcnJheShnZXRPdXRwdXRMZW5ndGgobGVuKSkuZmlsbCgwKTtcbiAgICB4cGFkLnNldCh4KTtcbiAgICB4cGFkW2xlbiA+PiA1XSB8PSAweDgwIDw8IGxlbiAlIDMyO1xuICAgIHhwYWRbeHBhZC5sZW5ndGggLSAxXSA9IGxlbjtcbiAgICB4ID0geHBhZDtcbiAgICBsZXQgYSA9IDE3MzI1ODQxOTM7XG4gICAgbGV0IGIgPSAtMjcxNzMzODc5O1xuICAgIGxldCBjID0gLTE3MzI1ODQxOTQ7XG4gICAgbGV0IGQgPSAyNzE3MzM4Nzg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSArPSAxNikge1xuICAgICAgICBjb25zdCBvbGRhID0gYTtcbiAgICAgICAgY29uc3Qgb2xkYiA9IGI7XG4gICAgICAgIGNvbnN0IG9sZGMgPSBjO1xuICAgICAgICBjb25zdCBvbGRkID0gZDtcbiAgICAgICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaV0sIDcsIC02ODA4NzY5MzYpO1xuICAgICAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcbiAgICAgICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNywgNjA2MTA1ODE5KTtcbiAgICAgICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDNdLCAyMiwgLTEwNDQ1MjUzMzApO1xuICAgICAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgNF0sIDcsIC0xNzY0MTg4OTcpO1xuICAgICAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgNV0sIDEyLCAxMjAwMDgwNDI2KTtcbiAgICAgICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDZdLCAxNywgLTE0NzMyMzEzNDEpO1xuICAgICAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgN10sIDIyLCAtNDU3MDU5ODMpO1xuICAgICAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgOF0sIDcsIDE3NzAwMzU0MTYpO1xuICAgICAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgOV0sIDEyLCAtMTk1ODQxNDQxNyk7XG4gICAgICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE3LCAtNDIwNjMpO1xuICAgICAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgMTFdLCAyMiwgLTE5OTA0MDQxNjIpO1xuICAgICAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgMTJdLCA3LCAxODA0NjAzNjgyKTtcbiAgICAgICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDEzXSwgMTIsIC00MDM0MTEwMSk7XG4gICAgICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XG4gICAgICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAxNV0sIDIyLCAxMjM2NTM1MzI5KTtcbiAgICAgICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDFdLCA1LCAtMTY1Nzk2NTEwKTtcbiAgICAgICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDZdLCA5LCAtMTA2OTUwMTYzMik7XG4gICAgICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAxMV0sIDE0LCA2NDM3MTc3MTMpO1xuICAgICAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpXSwgMjAsIC0zNzM4OTczMDIpO1xuICAgICAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgNV0sIDUsIC03MDE1NTg2OTEpO1xuICAgICAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgMTBdLCA5LCAzODAxNjA4Myk7XG4gICAgICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE0LCAtNjYwNDc4MzM1KTtcbiAgICAgICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDRdLCAyMCwgLTQwNTUzNzg0OCk7XG4gICAgICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyA5XSwgNSwgNTY4NDQ2NDM4KTtcbiAgICAgICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDE0XSwgOSwgLTEwMTk4MDM2OTApO1xuICAgICAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgM10sIDE0LCAtMTg3MzYzOTYxKTtcbiAgICAgICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDhdLCAyMCwgMTE2MzUzMTUwMSk7XG4gICAgICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyAxM10sIDUsIC0xNDQ0NjgxNDY3KTtcbiAgICAgICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDJdLCA5LCAtNTE0MDM3ODQpO1xuICAgICAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgN10sIDE0LCAxNzM1MzI4NDczKTtcbiAgICAgICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDEyXSwgMjAsIC0xOTI2NjA3NzM0KTtcbiAgICAgICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA0LCAtMzc4NTU4KTtcbiAgICAgICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDhdLCAxMSwgLTIwMjI1NzQ0NjMpO1xuICAgICAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNiwgMTgzOTAzMDU2Mik7XG4gICAgICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxNF0sIDIzLCAtMzUzMDk1NTYpO1xuICAgICAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgMV0sIDQsIC0xNTMwOTkyMDYwKTtcbiAgICAgICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDRdLCAxMSwgMTI3Mjg5MzM1Myk7XG4gICAgICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTYsIC0xNTU0OTc2MzIpO1xuICAgICAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMTBdLCAyMywgLTEwOTQ3MzA2NDApO1xuICAgICAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgMTNdLCA0LCA2ODEyNzkxNzQpO1xuICAgICAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpXSwgMTEsIC0zNTg1MzcyMjIpO1xuICAgICAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgM10sIDE2LCAtNzIyNTIxOTc5KTtcbiAgICAgICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDZdLCAyMywgNzYwMjkxODkpO1xuICAgICAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgOV0sIDQsIC02NDAzNjQ0ODcpO1xuICAgICAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgMTJdLCAxMSwgLTQyMTgxNTgzNSk7XG4gICAgICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAxNV0sIDE2LCA1MzA3NDI1MjApO1xuICAgICAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcbiAgICAgICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaV0sIDYsIC0xOTg2MzA4NDQpO1xuICAgICAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgN10sIDEwLCAxMTI2ODkxNDE1KTtcbiAgICAgICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTUsIC0xNDE2MzU0OTA1KTtcbiAgICAgICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDVdLCAyMSwgLTU3NDM0MDU1KTtcbiAgICAgICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgNiwgMTcwMDQ4NTU3MSk7XG4gICAgICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcbiAgICAgICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDEwXSwgMTUsIC0xMDUxNTIzKTtcbiAgICAgICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDFdLCAyMSwgLTIwNTQ5MjI3OTkpO1xuICAgICAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgOF0sIDYsIDE4NzMzMTMzNTkpO1xuICAgICAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgMTVdLCAxMCwgLTMwNjExNzQ0KTtcbiAgICAgICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDZdLCAxNSwgLTE1NjAxOTgzODApO1xuICAgICAgICBiID0gbWQ1aWkoY
2iwgYywgZCwgYSwgeFtpICsgMTNdLCAyMSwgMTMwOTE1MTY0OSk7XG4gICAgICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyA0XSwgNiwgLTE0NTUyMzA3MCk7XG4gICAgICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAxMV0sIDEwLCAtMTEyMDIxMDM3OSk7XG4gICAgICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAyXSwgMTUsIDcxODc4NzI1OSk7XG4gICAgICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyA5XSwgMjEsIC0zNDM0ODU1NTEpO1xuICAgICAgICBhID0gc2FmZUFkZChhLCBvbGRhKTtcbiAgICAgICAgYiA9IHNhZmVBZGQoYiwgb2xkYik7XG4gICAgICAgIGMgPSBzYWZlQWRkKGMsIG9sZGMpO1xuICAgICAgICBkID0gc2FmZUFkZChkLCBvbGRkKTtcbiAgICB9XG4gICAgcmV0dXJuIFVpbnQzMkFycmF5Lm9mKGEsIGIsIGMsIGQpO1xufVxuZnVuY3Rpb24gdWludDhUb1VpbnQzMihpbnB1dCkge1xuICAgIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50MzJBcnJheSgpO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDMyQXJyYXkoZ2V0T3V0cHV0TGVuZ3RoKGlucHV0Lmxlbmd0aCAqIDgpKS5maWxsKDApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgb3V0cHV0W2kgPj4gMl0gfD0gKGlucHV0W2ldICYgMHhmZikgPDwgKChpICUgNCkgKiA4KTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cbmZ1bmN0aW9uIHNhZmVBZGQoeCwgeSkge1xuICAgIGNvbnN0IGxzdyA9ICh4ICYgMHhmZmZmKSArICh5ICYgMHhmZmZmKTtcbiAgICBjb25zdCBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAobHN3ID4+IDE2KTtcbiAgICByZXR1cm4gKG1zdyA8PCAxNikgfCAobHN3ICYgMHhmZmZmKTtcbn1cbmZ1bmN0aW9uIGJpdFJvdGF0ZUxlZnQobnVtLCBjbnQpIHtcbiAgICByZXR1cm4gKG51bSA8PCBjbnQpIHwgKG51bSA+Pj4gKDMyIC0gY250KSk7XG59XG5mdW5jdGlvbiBtZDVjbW4ocSwgYSwgYiwgeCwgcywgdCkge1xuICAgIHJldHVybiBzYWZlQWRkKGJpdFJvdGF0ZUxlZnQoc2FmZUFkZChzYWZlQWRkKGEsIHEpLCBzYWZlQWRkKHgsIHQpKSwgcyksIGIpO1xufVxuZnVuY3Rpb24gbWQ1ZmYoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgIHJldHVybiBtZDVjbW4oKGIgJiBjKSB8ICh+YiAmIGQpLCBhLCBiLCB4LCBzLCB0KTtcbn1cbmZ1bmN0aW9uIG1kNWdnKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4gbWQ1Y21uKChiICYgZCkgfCAoYyAmIH5kKSwgYSwgYiwgeCwgcywgdCk7XG59XG5mdW5jdGlvbiBtZDVoaChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgcmV0dXJuIG1kNWNtbihiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xufVxuZnVuY3Rpb24gbWQ1aWkoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgIHJldHVybiBtZDVjbW4oYyBeIChiIHwgfmQpLCBhLCBiLCB4LCBzLCB0KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IG1kNTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3Qgc3RyaW5naWZ5X2pzXzEgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG5jb25zdCB2MV9qc18xID0gcmVxdWlyZShcIi4vdjEuanNcIik7XG5jb25zdCB2MVRvVjZfanNfMSA9IHJlcXVpcmUoXCIuL3YxVG9WNi5qc1wiKTtcbmZ1bmN0aW9uIHY2KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgb3B0aW9ucyA/Pz0ge307XG4gICAgb2Zmc2V0ID8/PSAwO1xuICAgIGxldCBieXRlcyA9ICgwLCB2MV9qc18xLmRlZmF1bHQpKHsgLi4ub3B0aW9ucywgX3Y2OiB0cnVlIH0sIG5ldyBVaW50OEFycmF5KDE2KSk7XG4gICAgYnl0ZXMgPSAoMCwgdjFUb1Y2X2pzXzEuZGVmYXVsdCkoYnl0ZXMpO1xuICAgIGlmIChidWYpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICAgICAgICBidWZbb2Zmc2V0ICsgaV0gPSBieXRlc1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIHN0cmluZ2lmeV9qc18xLnVuc2FmZVN0cmluZ2lmeSkoYnl0ZXMpO1xufVxuZXhwb3J0cy5kZWZh
2dWx0ID0gdjY7XG4iLCIvKiogVXRpbGl0eTogY2FzZS1pbnNlbnNpdGl2ZSBjaGVjayBmb3IgdGhlIHdvcmQgXCJwYXNzd29yZFwiIHVzaW5nIG9wdGlvbmFsIGNoYWluaW5nICovXG5leHBvcnQgY29uc3QgY29udGFpbnNQYXNzd29yZCA9ICh2YWw/OiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhdmFsPy50b0xvd2VyQ2FzZT8uKCkuaW5jbHVkZXM/LigncGFzc3dvcmQnKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIGZpZWxkIHNob3VsZCBiZSB0cmVhdGVkIGFzIHBhc3N3b3JkLWxpa2UuXG4gKiBFdmFsdWF0ZXMgaW5wdXQudHlwZSwgaW5wdXQubmFtZSwgaW5wdXQuaWQsIGlucHV0LnBsYWNlaG9sZGVyIGFuZCBvcHRpb25hbCBsYWJlbCB0ZXh0LlxuICovXG5leHBvcnQgY29uc3QgaXNQYXNzd29yZExpa2VGaWVsZCA9IChcbiAgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQsXG4gIGxhYmVsVGV4dD86IHN0cmluZyB8IG51bGxcbik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKFxuICAgIGNvbnRhaW5zUGFzc3dvcmQoKGlucHV0IGFzIGFueSk/LnR5cGUpIHx8XG4gICAgY29udGFpbnNQYXNzd29yZCgoaW5wdXQgYXMgYW55KT8ubmFtZSkgfHxcbiAgICBjb250YWluc1Bhc3N3b3JkKChpbnB1dCBhcyBhbnkpPy5pZCkgfHxcbiAgICBjb250YWluc1Bhc3N3b3JkKChpbnB1dCBhcyBhbnkpPy5wbGFjZWhvbGRlcikgfHxcbiAgICBjb250YWluc1Bhc3N3b3JkKGxhYmVsVGV4dClcbiAgKTtcbn07XG5cbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy51cGRhdGVWMVN0YXRlID0gdm9pZCAwO1xuY29uc3Qgcm5nX2pzXzEgPSByZXF1aXJlKFwiLi9ybmcuanNcIik7XG5jb25zdCBzdHJpbmdpZnlfanNfMSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcbmNvbnN0IF9zdGF0ZSA9IHt9O1xuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgICBsZXQgYnl0ZXM7XG4gICAgY29uc3QgaXNWNiA9IG9wdGlvbnM/Ll92NiA/PyBmYWxzZTtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRpb25zS2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgICAgICBpZiAob3B0aW9uc0tleXMubGVuZ3RoID09PSAxICYmIG9wdGlvbnNLZXlzWzBdID09PSAnX3Y2Jykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBieXRlcyA9IHYxQnl0ZXMob3B0aW9ucy5yYW5kb20gPz8gb3B0aW9ucy5ybmc/LigpID8/ICgwLCBybmdfanNfMS5kZWZhdWx0KSgpLCBvcHRpb25zLm1zZWNzLCBvcHRpb25zLm5zZWNzLCBvcHRpb25zLmNsb2Nrc2VxLCBvcHRpb25zLm5vZGUsIGJ1Ziwgb2Zmc2V0KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IHJuZHMgPSAoMCwgcm5nX2pzXzEuZGVmYXVsdCkoKTtcbiAgICAgICAgdXBkYXRlVjFTdGF0ZShfc3RhdGUsIG5vdywgcm5kcyk7XG4gICAgICAgIGJ5dGVzID0gdjFCeXRlcyhybmRzLCBfc3RhdGUubXNlY3MsIF9zdGF0ZS5uc2VjcywgaXNWNiA/IHVuZGVmaW5lZCA6IF9zdGF0ZS5jbG9ja3NlcSwgaXNWNiA/IHVuZGVmaW5lZCA6IF9zdGF0ZS5ub2RlLCBidWYsIG9mZnNldCk7XG4gICAgfVxuICAgIHJldHVybiBidWYgPz8gKDAsIHN0cmluZ2lmeV9qc18xLnVuc2FmZVN0cmluZ2lmeSkoYnl0ZXMpO1xufVxuZnVuY3Rpb24gdXBkYXRlVjFTdGF0ZShzdGF0ZSwgbm93LCBybmRzKSB7XG4gICAgc3RhdGUubXNlY3MgPz89IC1JbmZpbml0eTtcbiAgICBzdGF0ZS5uc2VjcyA/Pz0gMDtcbiAgICBpZiAobm93ID09PSBzdGF0ZS5tc2Vjcykge1xuICAgICAgICBzdGF0ZS5uc2VjcysrO1xuICAgICAgICBpZiAoc3RhdGUubnNlY3MgPj0gMTAwMDApIHtcbiAgICAgICAgICAgIHN0YXRlLm5vZGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBzdGF0ZS5uc2VjcyA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAobm93ID4gc3RhdGUubXNlY3MpIHtcbiAgICAgICAgc3RhdGUubnNlY3MgPSAwO1xuICAgIH1cbiAgICBlbHNlIGlmIChub3cgPCBzdGF0ZS5tc2Vjcykge1xuICAgICAgICBzdGF0ZS5ub2RlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIXN0YXRlLm5vZGUpIHtcbiAgICAgICAgc3RhdGUubm9kZSA9IHJuZHMuc2xpY2UoMTAsIDE2KTtcbiAgICAgICAgc3RhdGUubm9kZVswXSB8PSAweDAxO1xuICAgICAgICBzdGF0ZS5jbG9ja3NlcSA9ICgocm5kc1s4XSA8PCA4KSB8IHJuZHNbOV0pICYgMHgzZmZmO1xuICAgIH1cbiAgICBzdGF0ZS5tc2VjcyA9IG5vdztcbiAgICByZXR1cm4gc3RhdGU7XG59XG5leHBvcnRzLnVwZGF0ZVYxU3RhdGUgPSB1cGRhdGVWMVN0YXRlO1xuZnVuY3Rpb24gdjFCeXRlcyhybmRzLCBtc2VjcywgbnNlY3MsIGNsb2Nrc2VxLCBub2Rl
2LCBidWYsIG9mZnNldCA9IDApIHtcbiAgICBpZiAocm5kcy5sZW5ndGggPCAxNikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JhbmRvbSBieXRlcyBsZW5ndGggbXVzdCBiZSA+PSAxNicpO1xuICAgIH1cbiAgICBpZiAoIWJ1Zikge1xuICAgICAgICBidWYgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgICAgIG9mZnNldCA9IDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgKyAxNiA+IGJ1Zi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBVVUlEIGJ5dGUgcmFuZ2UgJHtvZmZzZXR9OiR7b2Zmc2V0ICsgMTV9IGlzIG91dCBvZiBidWZmZXIgYm91bmRzYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbXNlY3MgPz89IERhdGUubm93KCk7XG4gICAgbnNlY3MgPz89IDA7XG4gICAgY2xvY2tzZXEgPz89ICgocm5kc1s4XSA8PCA4KSB8IHJuZHNbOV0pICYgMHgzZmZmO1xuICAgIG5vZGUgPz89IHJuZHMuc2xpY2UoMTAsIDE2KTtcbiAgICBtc2VjcyArPSAxMjIxOTI5MjgwMDAwMDtcbiAgICBjb25zdCB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcbiAgICBidWZbb2Zmc2V0KytdID0gKHRsID4+PiAyNCkgJiAweGZmO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAodGwgPj4+IDE2KSAmIDB4ZmY7XG4gICAgYnVmW29mZnNldCsrXSA9ICh0bCA+Pj4gOCkgJiAweGZmO1xuICAgIGJ1ZltvZmZzZXQrK10gPSB0bCAmIDB4ZmY7XG4gICAgY29uc3QgdG1oID0gKChtc2VjcyAvIDB4MTAwMDAwMDAwKSAqIDEwMDAwKSAmIDB4ZmZmZmZmZjtcbiAgICBidWZbb2Zmc2V0KytdID0gKHRtaCA+Pj4gOCkgJiAweGZmO1xuICAgIGJ1ZltvZmZzZXQrK10gPSB0bWggJiAweGZmO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAoKHRtaCA+Pj4gMjQpICYgMHhmKSB8IDB4MTA7XG4gICAgYnVmW29mZnNldCsrXSA9ICh0bWggPj4+IDE2KSAmIDB4ZmY7XG4gICAgYnVmW29mZnNldCsrXSA9IChjbG9ja3NlcSA+Pj4gOCkgfCAweDgwO1xuICAgIGJ1ZltvZmZzZXQrK10gPSBjbG9ja3NlcSAmIDB4ZmY7XG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCA2OyArK24pIHtcbiAgICAgICAgYnVmW29mZnNldCsrXSA9IG5vZGVbbl07XG4gICAgfVxuICAgIHJldHVybiBidWY7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB2MTtcbiIsImltcG9ydCB7XG4gIFRyYWNraW5nRXZlbnQsXG4gIEZvcm1TdWJtaXNzaW9uRXZlbnQsXG4gIEV2ZW50VHlwZSxcbn0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQge1xuICBsb2dnZXIsXG4gIGdldFNlc3Npb25JZEZyb21Db29raWUsXG4gIGdldFVzZXJEYXRhLFxuICBnZXRGb3JtYXR0ZWRUaW1lem9uZSxcbiAgZ2V0RGV2aWNlVHlwZSxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBFdmVudFF1ZXVlLCBRdWV1ZUNvbmZpZyB9IGZyb20gXCIuLi9jb3JlL3F1ZXVlLXN5c3RlbVwiO1xuaW1wb3J0IHsgQVBJX0VORFBPSU5UUywgU0NSSVBUX0JBU0VOQU1FIH0gZnJvbSBcIi4uL2NvbmZpZy9jb21tb25cIjtcblxuLy8gQm90IHByZXZlbnRpb24gY29uc3RhbnRzXG5jb25zdCBSQVRFX0xJTUlUX0VWRU5UU19QRVJfU0VDT05EID0gNTtcblxuLyoqXG4gKiBBUEkgQ2xpZW50IGZvciBleHRlcm5hbCB0cmFja2luZ1xuICovXG5leHBvcnQgY2xhc3MgQXBpQ2xpZW50IHtcbiAgcHJpdmF0ZSBhcGlFbmRwb2ludDogc3RyaW5nO1xuICBwcml2YXRlIHRyYWNraW5nSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgZXZlbnRRdWV1ZTogRXZlbnRRdWV1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB0cmFja2luZ0lkOiBzdHJpbmcsXG4gICAgYXBpRW5kcG9pbnQ/OiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy50cmFja2luZ0lkID0gdHJhY2tpbmdJZDtcbiAgICB0aGlzLmFwaUVuZHBvaW50ID0gYXBpRW5kcG9pbnQgfHwgdGhpcy5kZXRlcm1pbmVBcGlFbmRwb2ludCgpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdGhlIGV2ZW50IHF1ZXVlIHdpdGggYm90IHByZXZlbnRpb25cbiAgICBjb25zdCBxdWV1ZUNvbmZpZzogUXVldWVDb25maWcgPSB7XG4gICAgICBtYXhFdmVudHNQZXJTZWNvbmQ6IFJBVEVfTElNSVRfRVZFTlRTX1BFUl9TRUNPTkQsXG4gICAgICBtYXhSZXRyaWVzOiAzLFxuICAgICAgcmV0cnlEZWxheU1zOiAxMDAwLFxuICAgICAgbWF4UXVldWVTaXplOiAxMDAsXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmV2ZW50UXVldWUgPSBuZXcgRXZlbnRRdWV1ZShxdWV1ZUNvbmZpZyk7XG4gICAgXG4gICAgLy8gU2V0IHVwIHRoZSBxdWV1ZSBzZW5kZXIgdG8gdXNlIHRoZSBhY3R1YWwgQVBJIHNlbmRpbmcgbG9naWNcbiAgICB0aGlzLmV2ZW50UXVldWUuc2V0U2VuZGVyKGFzeW5jIChwYXlsb2FkOiBhbnkpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuc2VuZEV2ZW50RGlyZWN0bHkocGF5bG9hZCk7XG4gICAgfSk7XG4gICAgXG4gICAgbG9nZ2VyLmxvZygnQXBpQ2xpZW50IGluaXRpYWxpemVkIHdpdGggcmF0ZSBsaW1pdDonLCBxdWV1ZUNvbmZpZy5tYXhFdmVudHNQZXJTZWNvbmQsICdldmVudHMgcGVyIHNlY29uZCcpO1xuICB9XG5cbiAgXG5cbiAgLyoqXG4gICAqIERldGVybWluZSBBUEkgZW5kcG9pbnQgYmFzZWQgb24gc2NyaXB0IHNvdXJjZSBVUkxcbiAgICovXG4gIHByaXZhdGUgZGV0ZXJtaW5lQXBpRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgLy8gRmluZCB0aGUgY3VycmVudCBzY3JpcHQgdGFnIHRoYXQgbG9hZGVkIHRoaXMgdHJhY2tpbmcgc2NyaXB0XG4gICAgICBjb25zdCBjdXJyZW50U2NyaXB0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyYyo9XCIke1NDUklQVF9CQVNFTkFNRX1cIl1gKSBhcyBIVE1MU2NyaXB0RWxlbWVudDtcbiAgICAgIFxuICAgICAgaWYgKGN1cnJlbnRTY3JpcHQ/LnNyYykge1xuICAgICAgICBjb25zdCBzY3JpcHRTcmMgPSBjdXJyZW50U2NyaXB0LnNyYztcbiAgICAgICAgbG9nZ2VyLmFwaSgnU2NyaXB0IHNvdXJjZSBkZXRlY3RlZDonLCBzY3JpcHRTcmMpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgZm9yIHN0YWdpbmcgZW52aXJvbm1lbnRcbiAgICAgICAgaWYgKHNjcmlwdFNyYy5pbmNsdWRlcygnc3RhZ2luZycpKSB7XG4gICAgICAgICAgbG9nZ2VyLmFwaSgnU3RhZ2luZyBlbnZpcm9ubWVudCBkZXRlY3RlZCwgdXNpbmcgc3RhZ2luZyBBUEkgZW5kcG9pbnQnKTtcbiAgICAgICAgICByZXR1cm4gQVBJX0VORFBPSU5UUy5zdGFnaW5nO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBmb3IgbG9jYWxob3N0IGVudmlyb25tZW50XG4gICAgICAgIGlmIChzY3JpcHRTcmMuaW5jbHVkZXMoJ2xvY2FsaG9zdCcpKSB7XG4gICAgICAgICAgbG9nZ2VyLmFwaSgnTG9jYWxob3N0IGVudmlyb25tZW50IGRldGVjdGVkLCB1c2luZyBsb2NhbGhvc3QgQVBJIGVuZHBvaW50Jyk7XG4gICAgICAgICAgcmV0dXJuIEFQSV9FTkRQT0lOVFMubG9jYWw7XG4gICAgICAgI
2H1cbiAgICAgICAgXG4gICAgICAgIC8vIERlZmF1bHQgdG8gcHJvZHVjdGlvblxuICAgICAgICBsb2dnZXIuYXBpKCdQcm9kdWN0aW9uIGVudmlyb25tZW50IGRldGVjdGVkLCB1c2luZyBwcm9kdWN0aW9uIEFQSSBlbmRwb2ludCcpO1xuICAgICAgICByZXR1cm4gQVBJX0VORFBPSU5UUy5wcm9kdWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmFwaSgnTm8gc2NyaXB0IHRhZyBmb3VuZCwgZGVmYXVsdGluZyB0byBwcm9kdWN0aW9uIEFQSSBlbmRwb2ludCcpO1xuICAgICAgICByZXR1cm4gQVBJX0VORFBPSU5UUy5wcm9kdWN0aW9uO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGRldGVybWluaW5nIEFQSSBlbmRwb2ludDonLCBlcnJvcik7XG4gICAgICAvLyBGYWxsYmFjayB0byBwcm9kdWN0aW9uIGlmIGRldGVjdGlvbiBmYWlsc1xuICAgICAgbG9nZ2VyLmFwaSgnRmFsbGluZyBiYWNrIHRvIHByb2R1Y3Rpb24gQVBJIGVuZHBvaW50IGR1ZSB0byBlcnJvcicpO1xuICAgICAgcmV0dXJuIEFQSV9FTkRQT0lOVFMucHJvZHVjdGlvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRyYWNraW5nIGNvbnRleHQgZnJvbSB0cmFja2VyIHN0YXRlXG4gICAqL1xuICBzZXRUcmFja2luZ0NvbnRleHQoc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIHRyYWNraW5nIGV2ZW50IHRvIGJhY2tlbmQgKHF1ZXVlZCB3aXRoIHJhdGUgbGltaXRpbmcpXG4gICAqL1xuICBhc3luYyBzZW5kRXZlbnQoZXZlbnQ6IFRyYWNraW5nRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gRW5zdXJlIGRldmljZSB0eXBlIGlzIGNhcHR1cmVkIGNvbnNpc3RlbnRseSBmb3IgYWxsIGV2ZW50cy5cbiAgICAgIGV2ZW50LnByb3BlcnRpZXMgPSB7XG4gICAgICAgIC4uLmV2ZW50LnByb3BlcnRpZXMsXG4gICAgICAgIGRldmljZVR5cGU6IGV2ZW50Py5wcm9wZXJ0aWVzPy5kZXZpY2VUeXBlIHx8IGdldERldmljZVR5cGUoKSxcbiAgICAgIH07XG5cbiAgICAgIC8vIFVzZSBzZXNzaW9uSWQgZnJvbSB0cmFja2VyIHN0YXRlLCBmYWxsYmFjayB0byBjb29raWVcbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9XG4gICAgICAgIHRoaXMuc2Vzc2lvbklkIHx8IGdldFNlc3Npb25JZEZyb21Db29raWUodGhpcy50cmFja2luZ0lkKTtcbiAgICAgIGNvbnN0IHVzZXJEYXRhID0gZ2V0VXNlckRhdGEoKTtcblxuICAgICAgbGV0IGVuaGFuY2VkRXZlbnQ6IFRyYWNraW5nRXZlbnQgPSB7IC4uLmV2ZW50IH07XG5cbiAgICAgIC8vIEZvciBmb3JtIHN1Ym1pc3Npb25zLCBlbmhhbmNlIHdpdGggdGltZXpvbmVcbiAgICAgIGlmIChldmVudC50eXBlID09PSBFdmVudFR5cGUuRk9STV9TVUJNSVNTSU9OICYmIFwiZm9ybURhdGFcIiBpbiBldmVudCkge1xuICAgICAgICBjb25zdCBmb3JtRXZlbnQgPSBldmVudCBhcyBGb3Jt
2U3VibWlzc2lvbkV2ZW50O1xuXG4gICAgICAgIC8vIEFkZCB0aW1lem9uZSB0byBmb3JtIGRhdGFcbiAgICAgICAgY29uc3QgZW5oYW5jZWRGb3JtRXZlbnQ6IEZvcm1TdWJtaXNzaW9uRXZlbnQgPSB7XG4gICAgICAgICAgLi4uZm9ybUV2ZW50LFxuICAgICAgICAgIGZvcm1EYXRhOiB7XG4gICAgICAgICAgICAuLi5mb3JtRXZlbnQuZm9ybURhdGEsXG4gICAgICAgICAgICBUaW1lem9uZTogZ2V0Rm9ybWF0dGVkVGltZXpvbmUoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGVuaGFuY2VkRXZlbnQgPSBlbmhhbmNlZEZvcm1FdmVudDtcblxuICAgICAgICBsb2dnZXIuYXBpKFwiRW5oYW5jZWQgZm9ybSBkYXRhIHdpdGggdGltZXpvbmU6XCIsIHtcbiAgICAgICAgICB0aW1lem9uZTogZW5oYW5jZWRGb3JtRXZlbnQuZm9ybURhdGEuVGltZXpvbmUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAuLi5lbmhhbmNlZEV2ZW50LFxuICAgICAgICB0cmFja2luZ0lkOiB0aGlzLnRyYWNraW5nSWQsXG4gICAgICAgIHNlc3Npb25JZCwgLy8gVVVJRCBmb3Igc2Vzc2lvbiB0cmFja2luZ1xuICAgICAgICBjb250YWN0SWQ6IHVzZXJEYXRhPy5jb250YWN0SWQsIC8vIElmIGF2YWlsYWJsZSBmcm9tIHN0b3JlZCB1c2VyIGRhdGFcbiAgICAgICAgdXNlcklkOiB1c2VyRGF0YT8udXNlcklkLCAvLyBJZiBhdmFpbGFibGVcbiAgICAgIH07XG5cbiAgICAgIGxvZ2dlci5hcGkoXCJRdWV1ZWluZyBldmVudCBwYXlsb2FkOlwiLCB7XG4gICAgICAgIHR5cGU6IGVuaGFuY2VkRXZlbnQudHlwZSxcbiAgICAgICAgc2Vzc2lvbklkLCBcbiAgICAgICAgdHJhY2tpbmdJZDogdGhpcy50cmFja2luZ0lkLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEFkZCBldmVudCB0byBxdWV1ZSBmb3IgcmF0ZS1saW1pdGVkIHByb2Nlc3NpbmdcbiAgICAgIGF3YWl0IHRoaXMuZXZlbnRRdWV1ZS5lbnF1ZXVlKHBheWxvYWQsIHVuZGVmaW5lZCwgZXZlbnQudHlwZSA9PT0gRXZlbnRUeXBlLkZPUk1fU1VCTUlTU0lPTik7XG4gICAgICBcbiAgICAgIGxvZ2dlci5hcGkoXCJFdmVudCBxdWV1ZWQgc3VjY2Vzc2Z1bGx5OlwiLCBlbmhhbmNlZEV2ZW50LnR5cGUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciBxdWV1ZWluZyBldmVudDpcIiwgZXJyb3IpO1xuICAgICAgLy8gRG9uJ3QgdGhyb3cgLSB3ZSBkb24ndCB3YW50IHRyYWNraW5nIGVycm9ycyB0byBicmVhayB0aGUgdXNlcidzIHNpdGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZCB0cmFja2luZyBldmVudCBkaXJlY3RseSB0byBiYWNrZW5kIChieXBhc3NpbmcgcXVldWUpXG4gICAqIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBxdWV1ZSBzeXN0ZW1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VuZEV2ZW50RGlyZWN0bHkocGF5bG9hZDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHt0aGlzLmFwaUVuZHBvaW50fS9leHRlcm5hbC10cmFja2luZy9ldmVudHNgO1xuXG4gICAgLy8gSWYgcGF5bG9hZCBjb250YWlucyBmaWxlIHVwbG9hZHMgKGZyb20gZm9ybSBzdWJtaXNzaW9ucyksIHNlbmQgYXMgbXVsdGlwYXJ0L2Zvcm0tZGF0YVxuICAgIGlmIChwYXlsb2FkICYmIHBheWxvYWQuZmlsZXMgJiYgdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgY29uc3QgeyBmaWxlcywgLi4uZXZlbnRXaXRob3V0RmlsZXMgfSA9IHBheWxvYWQ7XG5cbiAgICAgICAgLy8gU2VyaWFsaXplIHRoZSBldmVudCAod2l0aG91dCBmaWxlcykgYXMgSlNPTlxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2V2ZW50JywgSlNPTi5zdHJpbmdpZnkoZXZlbnRXaXRob3V0RmlsZXMpKTtcblxuICAgICAgICAvLyBBcHBlbmQgZWFjaCBmaWxlIHVuZGVyIGl0cyBjb3JyZXNwb25kaW5nIGZpZWxkIG5hbWVcbiAgICAgICAgT2JqZWN0LmtleXMoZmlsZXMgYXMgUmVjb3JkPHN0cmluZywgYW55PikuZm9yRWFjaCgoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSAoZmlsZXMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbZmllbGROYW1lXTtcbiAgICAgICAgICBjb25zdCBsaXN0OiBGaWxlW10gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICAgICAgICBsaXN0LmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChmaWxlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmaWVsZE5hbWUsIGZpbGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgLy8gSWdub3JlIG5vbi1GaWxlIGVudHJpZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChlbmRwb2ludCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBldmVudDogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9nZ2VyLmFwaSgnRXZlbnQgc2VudCBzdWNjZXNzZnVsbHkgKG11bHRpcGFydCk6JywgcGF5bG9hZC50eXBlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBzZW5kaW5nIG11bHRpcGFydCBldmVudCwgZmFsbGluZyBiYWNrIHRvIEpTT046JywgZXJyb3IpO1xuICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gSlNPTiBwYXRoIGJlbG93XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBKU09OIHBhdGggKHBhZ2Ugdmlld3MsIG5vbi1maWxlIGV2ZW50cywgb3IgbXVsdGlwYXJ0IGZhbGxiYWNrKVxuICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTtcbiAgICAvLyBGZXRjaCBrZWVwYWxpdmUgaGFzIGEgNjQgS2lCIGJvZHkgYnVkZ2V0LiBQcmVzZXJ2ZSBub3JtYWwgdHJhbnNwb3J0IGZvclxuICAgIC8vIGxhcmdlIHBheWxvYWRzIGFuZCBmaWxlcyBpbnN0ZWFkIG9mIG1ha2luZyB0aG9zZSByZXF1ZXN0cyBmYWlsIGltbWVkaWF0ZWx5LlxuICAgIGNvbnN0IGtlZXBhbGl2ZSA9IHBheWxvYWQudHlwZSA9PT0gRXZlbnRUeXBlLkZPUk1fU1VCTUlTU0lPTiAmJlxuICAgICAgIXBheWxvYWQuZmlsZXMgJiYgbmV3IEJsb2IoW2JvZHldKS5zaXplIDwgNjQgKiAxMDI0O1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZW5kcG9pbnQsIHtcbiAgICAgIGtlZXBhbGl2ZSxcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICAgIGJvZHksXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIGV2ZW50OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmFwaShcIkV2ZW50IHNlbnQgc3VjY2Vzc2Z1bGx5OlwiLCBwYXlsb2FkLnR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdCBmb3JtIGRhdGFcbiAgICogU2VuZHMgZm9ybSBzdWJtaXNzaW9uIGV2ZW50cyB3aXRoIGVuaGFuY2VkIGRhdGFcbiAgICovXG4gIGFzeW5jIHN1Ym1pdEZvcm0oZXZlbnQ6IEZvcm1TdWJtaXNzaW9uRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgbG9nZ2VyLmFwaShcIkZvcm0gc3VibWlzc2lvbjpcIiwgZXZlbnQuZm9ybURhdGEpO1xuICAgICAgXG4gICAgICAvLyBTZW5kIGZvcm0gZGF0YSBhcyBhIHRyYWNraW5nIGV2ZW50XG4gICAgICBhd2FpdCB0aGlzLnNlbmRFdmVudChldmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIHN1Ym1pdHRpbmcgZm9ybTpcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbiIsImltcG9ydCB7
2IFRyYWNraW5nQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgR0xPQkFMX1RSQUNLSU5HX0tFWSwgU0NSSVBUX0JBU0VOQU1FIH0gZnJvbSAnLi9jb21tb24nO1xuXG4vKipcbiAqIFJlYWRzIGNvbmZpZ3VyYXRpb24gZnJvbSBzY3JpcHQgdGFnIGF0dHJpYnV0ZXNcbiAqIFxuICogQHJldHVybnMgVHJhY2tpbmdDb25maWcgaWYgdmFsaWQgYXR0cmlidXRlcyBmb3VuZCwgbnVsbCBvdGhlcndpc2VcbiAqIFxuICogTG9naWMgZmxvdzpcbiAqIDEuIEZpbmQgdGhlIGN1cnJlbnQgc2NyaXB0IHRhZyB1c2luZyBkb2N1bWVudC5jdXJyZW50U2NyaXB0IG9yIHNlbGVjdG9yXG4gKiAyLiBFeHRyYWN0IGRhdGEgYXR0cmlidXRlcyBmcm9tIHRoZSBzY3JpcHQgdGFnXG4gKiAzLiBWYWxpZGF0ZSByZXF1aXJlZCB0cmFja2luZ0lkIGF0dHJpYnV0ZVxuICogNC4gUGFyc2Ugb3B0aW9uYWwgY29uZmlndXJhdGlvbiBhdHRyaWJ1dGVzXG4gKiA1LiBSZXR1cm4gY29tcGxldGUgY29uZmlndXJhdGlvbiBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbmZpZ0Zyb21TY3JpcHRBdHRyaWJ1dGVzID0gKCk6IFRyYWNraW5nQ29uZmlnIHwgbnVsbCA9PiB7XG4gIHRyeSB7XG4gICAgLy8gRmluZCB0aGUgY3VycmVudCBzY3JpcHQgdGFnXG4gICAgY29uc3QgY3VycmVudFNjcmlwdCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgfHwgXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBzY3JpcHRbc3JjKj1cIiR7U0NSSVBUX0JBU0VOQU1FfVwiXWApO1xuICAgIFxuICAgIGlmICghY3VycmVudFNjcmlwdCkge1xuICAgICAgbG9nZ2VyLndhcm4oJ0NvdWxkIG5vdCBmaW5kIHNjcmlwdCB0YWcgZm9yIGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEVuYWJsZSBkZWJ1ZyBtb2RlIGVhcmx5IGlmIHNwZWNpZmllZCwgc28gd2UgY2FuIHNlZSB2YWxpZGF0aW9uIGVycm9yc1xuICAgIGNvbnN0IGRlYnVnID0gY3VycmVudFNjcmlwdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGVidWcnKTtcbiAgICBpZiAoZGVidWcgPT09ICd0cnVlJykge1xuICAgICAgY29uc3QgdyA9IHdpbmRvdyBhcyBhbnk7XG4gICAgICB3W0dMT0JBTF9UUkFDS0lOR19LRVldID0gd1tHTE9CQUxfVFJBQ0tJTkdfS0VZXSB8fCB7fTtcbiAgICAgIHdbR0xPQkFMX1RSQUNLSU5HX0tFWV0uZGVidWcgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFJlYWQgcmVxdWlyZWQgZGF0YSBhdHRyaWJ1dGVzXG4gICAgY29uc3QgdHJhY2tpbmdJZCA9IGN1cnJlbnRTY3JpcHQuZ2V0QXR0cmlidXRlKCdkYXRhLXRyYWNraW5nLWlkJyk7XG4gICAgXG4gICAgaWYgKCF0cmFja2luZ0lkKSB7XG4gICAgICBsb2dnZXIuY3JpdGljYWwoJ1JlcXVpcmVkIGRhdGEtdHJhY2tpbmctaWQgYXR0cmlidXRlIG5vdCBmb3VuZCcpO1xuICAgICAgbG9nZ2VyLmNyaXRpY2FsKCdQbGVhc2UgYWRkIGRhdGEtdHJhY2tpbmctaWQ9XCJ5b3VyLXRyYWNraW5nLWlkXCIgdG8gdGhlIHNjcmlwdCB0YWcnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZzogVHJhY2tpbmdDb25maWcgPSB7XG4gICAgICB0cmFja2luZ0lkLFxuICAgIH07XG5cbiAgICAvLyBBZGQgZGVidWcgdG8gY29uZmlnIGlmIGVuYWJsZWRcbiAgICBpZiAoZGVidWcgPT09ICd0cnVlJykge1xuICAgICAgY29uZmlnLmRlYnVnID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBvcHRpb25hbCBBUEkgZW5kcG9pbnQgYXR0cmlidXRlXG4gICAgY29uc3QgYXBpRW5kcG9pbnQgPSBjdXJyZW50U2NyaXB0LmdldEF0dHJpYnV0ZSgnZGF0YS1hcGktZW5kcG9pbnQnKTtcbiAgICBpZiAoYXBpRW5kcG9pbnQpIHtcbiAgICAgIGNvbmZpZy5hcGlFbmRwb2ludCA9IGFwaUVuZHBvaW50O1xuICAgIH1cblxuICAgIGxvZ2dlci5sb2coJ0NvbmZpZ3VyYXRpb24gbG9hZGVkIGZyb20gc2NyaXB0IGF0dHJpYnV0ZXM6JywgY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5jcml0aWNhbCgnRXJyb3IgcmVhZGluZyBzY3JpcHQgYXR0cmlidXRlczonLCBlcnJvcik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgdHJhY2tpbmcgY29uZmlndXJhdGlvbiBvYmplY3RcbiAqIFxuICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyBib29sZWFuIGluZGljYXRpbmcgaWYgY29uZmlndXJhdGlvbiBpcyB2YWxpZFxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVDb25maWcgPSAoY29uZmlnOiBUcmFja2luZ0NvbmZpZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWNvbmZpZyB8fCB0eXBlb2YgY29uZmlnICE9PSAnb2JqZWN0Jykge1xuICAgIGxvZ2dlci5jcml0aWNhbCgnSW52YWxpZCBjb25maWd1cmF0aW9uOiBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghY29uZmlnLnRyYWNraW5nSWQgfHwgdHlwZW9mIGNvbmZpZy50cmFja2luZ0lkICE9PSAnc3RyaW5nJykge1xuICAgIGxvZ2dlci5jcml0aWNhbCgnSW52YWxpZCBjb25maWd1cmF0aW9uOiB0cmFja2luZ0lkIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5hcGlFbmRwb2ludCAmJiB0eXBlb2YgY29uZmlnLmFwaUVuZHBvaW50ICE9PSAnc3RyaW5nJykge1xuICAgIGxvZ2dlci5jcml0aWNhbCgnSW52YWxpZCBjb25maWd1cmF0aW9uOiBhcGlFbmRwb2ludCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5kZWJ1ZyAmJiB0eXBlb2YgY29uZmlnLmRlYnVnICE9PSAnYm9vbGVhbicpIHtcbiAgICBsb2dnZXIuY3JpdGljYWwoJ0ludmFsaWQgY29uZmlndXJhdGlvbjogZGVidWcgbXVzdCBiZSBhIGJvb2xlYW4nKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07ICIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VUkwgPSBleHBvcnRzLkROUyA9IHZvaWQgMDtcbmNvbnN0IHNoYTFfanNfMSA9IHJlcXVpcmUoXCIuL3NoYTEuanNcIik7XG5jb25zdCB2MzVfanNfMSA9IHJlcXVpcmUoXCIuL3YzNS5qc1wiKTtcbnZhciB2MzVfanNfMiA9IHJlcXVpcmUoXCIuL3YzNS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkROU1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdjM1X2pzXzIuRE5TOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVVJMXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybi
2B2MzVfanNfMi5VUkw7IH0gfSk7XG5mdW5jdGlvbiB2NSh2YWx1ZSwgbmFtZXNwYWNlLCBidWYsIG9mZnNldCkge1xuICAgIHJldHVybiAoMCwgdjM1X2pzXzEuZGVmYXVsdCkoMHg1MCwgc2hhMV9qc18xLmRlZmF1bHQsIHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KTtcbn1cbnY1LkROUyA9IHYzNV9qc18xLkROUztcbnY1LlVSTCA9IHYzNV9qc18xLlVSTDtcbmV4cG9ydHMuZGVmYXVsdCA9IHY1O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBwYXJzZV9qc18xID0gcmVxdWlyZShcIi4vcGFyc2UuanNcIik7XG5jb25zdCBzdHJpbmdpZnlfanNfMSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcbmZ1bmN0aW9uIHYxVG9WNih1dWlkKSB7XG4gICAgY29uc3QgdjFCeXRlcyA9IHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyA/ICgwLCBwYXJzZV9qc18xLmRlZmF1bHQpKHV1aWQpIDogdXVpZDtcbiAgICBjb25zdCB2NkJ5dGVzID0gX3YxVG9WNih2MUJ5dGVzKTtcbiAgICByZXR1cm4gdHlwZW9mIHV1aWQgPT09ICdzdHJpbmcnID8gKDAsIHN0cmluZ2lmeV9qc18xLnVuc2FmZVN0cmluZ2lmeSkodjZCeXRlcykgOiB2NkJ5dGVzO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gdjFUb1Y2O1xuZnVuY3Rpb24gX3YxVG9WNih2MUJ5dGVzKSB7XG4gICAgcmV0dXJuIFVpbnQ4QXJyYXkub2YoKCh2MUJ5dGVzWzZdICYgMHgwZikgPDwgNCkgfCAoKHYxQnl0ZXNbN10gPj4gNCkgJiAweDBmKSwgKCh2MUJ5dGVzWzddICYgMHgwZikgPDwgNCkgfCAoKHYxQnl0ZXNbNF0gJiAweGYwKSA+PiA0KSwgKCh2MUJ5dGVzWzRdICYgMHgwZikgPDwgNCkgfCAoKHYxQnl0ZXNbNV0gJiAweGYwKSA+PiA0KSwgKCh2MUJ5dGVzWzVdICYgMHgwZikgPDwgNCkgfCAoKHYxQnl0ZXNbMF0gJiAweGYwKSA+PiA0KSwgKCh2MUJ5dGVzWzBdICYgMHgwZikgPDwgNCkgfCAoKHYxQnl0ZXNbMV0gJiAweGYwKSA+PiA0KSwgKCh2MUJ5dGVzWzFdICYgMHgwZikgPDwgNCkgfCAoKHYxQnl0ZXNbMl0gJiAweGYwKSA+PiA0KSwgMHg2MCB8ICh2MUJ5dGVzWzJdICYgMHgwZiksIHYxQnl0ZXNbM10sIHYxQnl0ZXNbOF0sIHYxQnl0ZXNbOV0sIHYxQnl0ZXNbMTBdLCB2MUJ5dGVzWzExXSwgdjFCeXRlc1sxMl0sIHYxQnl0ZXNbMTNdLCB2MUJ5dGVzWzE0XSwgdjFCeXRlc1sxNV0pO1xufVxuIiwiLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBleHRlcm5hbCB0cmFja2luZyBzeXN0ZW1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFja2luZ0NvbmZpZyB7XG4gIHRyYWNraW5nSWQ6IHN0cmluZztcbiAgYXBpRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGRlYnVnPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCB0cmFja2luZyBzdGF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNraW5nU3RhdGUge1xuICBpbml0aWFsaXplZDogYm9vbGVhbjtcbiAgdHJhY2tpbmdJZDogc3RyaW5nO1xuICB1c2VySWQ/OiBzdHJpbmc7XG4gIHVzZXJQcm9wZXJ0aWVzPzogVXNlclByb3BlcnRpZXM7XG4gIHNlc3Npb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCB0eXBlcyB0aGF0IGNhbiBiZSB0cmFja2VkXG4gKi9cbmV4cG9ydCBlbnVtIEV2ZW50VHlwZSB7XG4gIFNDUklQVF9QQUdFX1ZJRVcgPSAnZXh0ZXJuYWxfc2NyaXB0X3BhZ2VfdmlldycsXG4gIEZPUk1fU1VCTUlTU0lPTiA9ICdleHRlcm5hbF9mb3JtX3N1Ym1pc3Npb24nLFxufVxuXG4vKipcbiAqIEJhc2UgZXZlbnQgc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2tpbmdFdmVudCB7XG4gIHR5cGU6IEV2ZW50VHlwZTtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIHVybDogc3RyaW5nO1xuICByZWZlcnJlcjogc3RyaW5nO1xuICB1c2VyQWdlbnQ6IHN0cmluZztcbiAgcHJvcGVydGllcz86IEV2ZW50UHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBQYWdlIHZpZXcgZXZlbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdlVmlld0V2ZW50IGV4dGVuZHMgVHJhY2tpbmdFdmVudCB7XG4gIHR5cGU6IEV2ZW50VHlwZS5TQ1JJUFRfUEFHRV9WSUVXO1xuICB0aXRsZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIGZvcm1JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3JtIHN1Ym1pc3Npb24gZXZlbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtU3VibWlzc2lvbkV2ZW50IGV4dGVuZHMgVHJhY2tpbmdFdmVudCB7XG4gIHR5cGU6IEV2ZW50VHlwZS5GT1JNX1NVQk1JU1NJT047XG4gIGZvcm1JZDogc3RyaW5nO1xuICBmb3JtRGF0YTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZmlsZXM/OiBSZWNvcmQ8c3RyaW5nLCBGaWxlIHwgRmlsZVtdPjtcbiAgZm9ybUxhYmVscz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogQ3VzdG9tIGV2ZW50IHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFByb3BlcnRpZXMge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8qKlxuICogVXNlciBwcm9wZXJ0aWVzIGZvciBpZGVudGlmaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQcm9wZXJ0aWVzIHtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBob25lPzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbiBcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VUkwgPSBleHBvcnRzLkROUyA9IHZvaWQgMDtcbmNvbnN0IG1kNV9qc18xID0gcmVxdWlyZShcIi4vbWQ1LmpzXCIpO1xuY29uc3QgdjM1X2pzXzEgPSByZXF1aXJlKFwiLi92MzUuanNcIik7XG52YXIgdjM1X2pzXzIgPSByZXF1aXJlKFwiLi92MzUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJETlNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHYzNV9qc18yLkROUzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlVSTFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdjM1X2pzXzIuVVJMOyB9IH0pO1xuZnVuY3Rpb24gdjModmFsdWUsIG5hbWVzcGFjZSwgYnVmLCBvZmZzZXQpIHtcbiAgICByZXR1cm4gKDAsIHYzNV9qc18xLmRlZmF1bHQpKDB4MzAs
2IG1kNV9qc18xLmRlZmF1bHQsIHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KTtcbn1cbnYzLkROUyA9IHYzNV9qc18xLkROUztcbnYzLlVSTCA9IHYzNV9qc18xLlVSTDtcbmV4cG9ydHMuZGVmYXVsdCA9IHYzO1xuIiwiLyoqXG4gKiBTYWZlIGNvbnNvbGUgbG9nZ2VyIGZvciBkZWJ1ZyBtb2RlXG4gKiBPbmx5IGxvZ3Mgd2hlbiBkZWJ1ZyBtb2RlIGlzIGVuYWJsZWQgaW4gZ2xvYmFsIHRyYWNraW5nIGNvbmZpZ3VyYXRpb25cbiAqL1xuaW1wb3J0IHsgTE9HR0VSX0VSUk9SX1BSRUZJWCwgTE9HR0VSX1BSRUZJWCwgR0xPQkFMX1RSQUNLSU5HX0tFWSB9IGZyb20gJy4uL2NvbmZpZy9jb21tb24nO1xuXG5leHBvcnQgY29uc3QgbG9nZ2VyID0ge1xuICAvKipcbiAgICogTG9nIEFQSS1yZWxhdGVkIG1lc3NhZ2VzIChvbmx5IGluIGRlYnVnIG1vZGUpXG4gICAqIFxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIE1lc3NhZ2UgdG8gbG9nXG4gICAqIEBwYXJhbSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gbG9nXG4gICAqL1xuICBhcGk6IChtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgaWYgKGlzRGVidWdNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGAke0xPR0dFUl9QUkVGSVh9ICR7bWVzc2FnZX1gLCAuLi5hcmdzKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvZyBlcnJvciBtZXNzYWdlcyAob25seSBpbiBkZWJ1ZyBtb2RlKVxuICAgKiBcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBFcnJvciBtZXNzYWdlIHRvIGxvZ1xuICAgKiBAcGFyYW0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGxvZ1xuICAgKi9cbiAgZXJyb3I6IChtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgaWYgKGlzRGVidWdNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYCR7TE9HR0VSX1BSRUZJWH0gJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogTG9nIGNyaXRpY2FsIGVycm9ycyAoQUxXQVlTIHZpc2libGUsIHJlZ2FyZGxlc3Mgb2YgZGVidWcgbW9kZSlcbiAgICogXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gQ3JpdGljYWwgZXJyb3IgbWVzc2FnZSB0byBsb2dcbiAgICogQHBhcmFtIGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBsb2dcbiAgICovXG4gIGNyaXRpY2FsOiAobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoYCR7TE9HR0VSX0VSUk9SX1BSRUZJWH0gJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBMb2cgZ2VuZXJhbCBtZXNzYWdlcyAob25seSBpbiBkZWJ1ZyBtb2RlKVxuICAgKiBcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxvZ1xuICAgKiBAcGFyYW0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGxvZ1xuICAgKi9cbiAgbG9nOiAobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgIGlmIChpc0RlYnVnTW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmxvZyhgJHtMT0dHRVJfUFJFRklYfSAke21lc3NhZ2V9YCwgLi4uYXJncyk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBMb2cgd2FybmluZyBtZXNzYWdlcyAob25seSBpbiBkZWJ1ZyBtb2RlKVxuICAgKiBcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBXYXJuaW5nIG1lc3NhZ2UgdG8gbG9nXG4gICAqIEBwYXJhbSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gbG9nXG4gICAqL1xuICB3YXJuOiAobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgIGlmIChpc0RlYnVnTW9kZSgpKSB7XG4gICAgICBjb25zb2xlLndhcm4oYCR7TE9HR0VSX1BSRUZJWH0gJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfSxcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGRlYnVnIG1vZGUgaXMgZW5hYmxlZFxuICogXG4gKiBAcmV0dXJucyBib29sZWFuIGluZGljYXRpbmcgaWYgZGVidWcgbW9kZSBpcyBhY3RpdmVcbiAqL1xuY29uc3QgaXNEZWJ1Z01vZGUgPSAoKTogYm9vbGVhbiA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB3ID0gd2luZG93IGFzIGFueTtcbiAgcmV0dXJuIEJvb2xlYW4odz8uW0dMT0JBTF9UUkFDS0lOR19LRVldPy5kZWJ1Zyk7XG59O1xuXG4gIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSAvXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLThdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMHxmZmZmZmZmZi1mZmZmLWZmZmYtZmZmZi1mZmZmZmZmZmZmZmYpJC9pO1xuIiwiaW1wb3J0IHsgRXZlbnRUeXBlLCBQYWdlVmlld0V2ZW50LCBGb3JtU3VibWlzc2lvbkV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0UGFnZU1ldGFkYXRhLCBwYXJzZUZvcm1EYXRhLCBsb2dnZXIsIGdldEZvcm1JZGVudGlmaWVyIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKiogV2Vha1NldCB0byB0cmFjayBmb3JtcyB0aGF0IGFscmVhZHkgaGF2ZSBsaXN0ZW5lcnMgYXR0YWNoZWQgKi9cbmNvbnN0IHRyYWNrZWRGb3JtcyA9IG5ldyBXZWFrU2V0PEhUTUxGb3JtRWxlbWVudD4oKTtcblxuaW50ZXJmYWNlIEdyYXZpdHlTdWJtaXNzaW9uIHtcbiAgZm9ybTogSFRNTEZvcm1FbGVtZW50O1xuICBzdWJtaXNzaW9uVHlwZTogc3RyaW5nO1xufVxuXG50eXBlIEdyYXZpdHlGaWx0ZXIgPSAoZGF0YTogR3Jhdml0eVN1Ym1pc3Npb24pID0+IEdyYXZpdHlTdWJtaXNzaW9uO1xuXG4vKiogTXV0YXRpb25PYnNlcnZlciBpbnN0YW5jZSBmb3IgZHluYW1pYyBmb3JtIGRldGVjdGlvbiAqL1xubGV0IGZvcm1PYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB8IG51bGwgPSBudWxsO1xuXG4vKipcbiAqIFN0YXJ0IHBhZ2UgdHJhY2tpbmcgLSB0cmFja3MgdGhlIGluaXRpYWwgcGFnZSB2aWV3IGltbWVkaWF0ZWx5XG4gKi9cbmV4cG9ydCBjb25zdCBzdGFydFBhZ2VUcmFja2luZyA9IChjYWxsYmFjazogKGV2ZW50OiBQYWdlVmlld0V2ZW50KSA9PiB2b2lkKTogdm9pZCA9PiB7XG4gIGxvZ2dlci5sb2coJ1RyYWNraW5nIGluaXRpYWwgcGFnZSB2aWV3Jyk7XG4gIFxuICBjb25zdCBtZXRhZGF0YSA9IGdldFBhZ2VNZXRhZGF0YSgpO1xuICBjb25zdCBmb3JtSWQgPSBnZXRGb3JtSWRlbnRpZmllcigpO1xuICBjb25zdCBldmVudDogUGFnZVZpZXdFdmVudCA9IHtcbiAgICB0eX
2BlOiBFdmVudFR5cGUuU0NSSVBUX1BBR0VfVklFVyxcbiAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgLi4ubWV0YWRhdGEsXG4gICAgLi4uKGZvcm1JZCA/IHsgZm9ybUlkIH0gOiB7fSksXG4gIH07XG5cbiAgY2FsbGJhY2soZXZlbnQpO1xufTtcblxuLyoqXG4gKiBTdGFydCBmb3JtIHRyYWNraW5nIHdpdGggc3VwcG9ydCBmb3IgZHluYW1pY2FsbHkgcmVuZGVyZWQgZm9ybXNcbiAqIFxuICogVXNlcyBNdXRhdGlvbk9ic2VydmVyIHRvIGRldGVjdCBmb3JtcyBhZGRlZCB0byB0aGUgRE9NIGFmdGVyIGluaXRpYWwgcGFnZSBsb2FkLFxuICogd2hpY2ggaXMgZXNzZW50aWFsIGZvciBTUEFzIGFuZCBvdGhlciBhcHBzIHRoYXQgcmVuZGVyIGZvcm1zIGFzeW5jaHJvbm91c2x5LlxuICogXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBmb3JtIGlzIHN1Ym1pdHRlZFxuICovXG5leHBvcnQgY29uc3Qgc3RhcnRGb3JtVHJhY2tpbmcgPSAoY2FsbGJhY2s6IChldmVudDogRm9ybVN1Ym1pc3Npb25FdmVudCkgPT4gdm9pZCk6IHZvaWQgPT4ge1xuICBsb2dnZXIubG9nKCdTdGFydGluZyBmb3JtIHN1Ym1pc3Npb24gdHJhY2tpbmcnKTtcblxuICBjb25zdCBzdWJtaXNzaW9uSGFuZGxlcnMgPSBuZXcgV2Vha01hcDxIVE1MRm9ybUVsZW1lbnQsICgpID0+IHZvaWQ+KCk7XG4gIGxldCBncmF2aXR5RmlsdGVyUmVnaXN0ZXJlZCA9IGZhbHNlO1xuXG4gIC8vIEdyYXZpdHkgRm9ybXMgY2FsbHMgZm9ybS5zdWJtaXQoKSwgd2hpY2ggYnlwYXNzZXMgbmF0aXZlIHN1Ym1pdCBsaXN0ZW5lcnMuXG4gIC8vIEl0cyBzdWJtaXNzaW9uX3N0YXJ0ZWQgaG9vayBydW5zIGFmdGVyIHByZS1zdWJtaXNzaW9uIGZpbHRlcnMsIGJlZm9yZSBuYXZpZ2F0aW9uLlxuICBjb25zdCByZWdpc3RlckdyYXZpdHlGaWx0ZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgY29uc3QgZ2Zvcm0gPSAod2luZG93IGFzIFdpbmRvdyAmIHtcbiAgICAgIGdmb3JtPzogeyB1dGlscz86IHsgYWRkQXN5bmNGaWx0ZXI/OiAobmFtZTogc3RyaW5nLCBmaWx0ZXI6IEdyYXZpdHlGaWx0ZXIpID0+IHZvaWQgfSB9O1xuICAgIH0pLmdmb3JtO1xuICAgIGlmIChncmF2aXR5RmlsdGVyUmVnaXN0ZXJlZCB8fCAhZ2Zvcm0/LnV0aWxzPy5hZGRBc3luY0ZpbHRlcikgcmV0dXJuO1xuXG4gICAgZ2Zvcm0udXRpbHMuYWRkQXN5bmNGaWx0ZXIoJ2dmb3JtL3N1Ym1pc3Npb24vc3VibWlzc2lvbl9zdGFydGVkJywgKGRhdGEpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChkYXRhLnN1Ym1pc3Npb25UeXBlID09PSAnc3VibWl0JyAmJiBkYXRhLmZvcm0gaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgICBhdHRhY2hGb3JtTGlzdGVuZXIoZGF0YS5mb3JtKTtcbiAgICAgICAgICBzdWJtaXNzaW9uSGFuZGxlcnMuZ2V0KGRhdGEuZm9ybSk/LigpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBUcmFja2luZyBtdXN0IG5ldmVyIHJlamVjdCBHcmF2aXR5IEZvcm1zJyBhd2FpdGVkIHN1Ym1pc3Npb24gY2hhaW4uXG4gICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgdHJhY2tpbmcgR3Jhdml0eSBGb3JtcyBzdWJtaXNzaW9uOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICAgIGdyYXZpdHlGaWx0ZXJSZWdpc3RlcmVkID0gdHJ1ZTtcbiAgfTtcbiAgXG4gIC8qKlxuICAgKiBBdHRhY2ggc3VibWl0IGxpc3RlbmVyIHRvIGEgZm9ybSBlbGVtZW50XG4gICAqIFByZXZlbnRzIGR1cGxpY2F0ZSBsaXN0ZW5lcnMgdmlhIFdlYWtTZXQgdHJhY2tpbmdcbiAgICovXG4gIGNvbnN0IGF0dGFjaEZvcm1MaXN0ZW5lciA9IChmb3JtOiBIVE1MRm9ybUVsZW1lbnQpOiB2b2lkID0+IHtcbiAgICBpZiAodHJhY2tlZEZvcm1zLmhhcyhmb3JtKSkgcmV0dXJuO1xuICAgIFxuICAgIC8vIFRyYWNrIGlmIGZvcm0gaGFzIGJlZW4gc3VibWl0dGVkIHRvIHByZXZlbnQgZHVwbGljYXRlIGV2ZW50c1xuICAgIGxldCBmb3JtU3VibWl0dGVkID0gZmFsc2U7XG4gICAgbGV0IGNsaWNrRmFsbGJhY2tUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGNsaWNrUGVuZGluZyA9IGZhbHNlO1xuICAgIGxldCBjbGlja1N1Ym1pc3Npb25DYXB0dXJlZCA9IGZhbHNlO1xuICAgIFxuICAgIGNvbnN0IGhhbmRsZVN1Ym1pc3Npb24gPSAoYWxyZWFkeUNhcHR1cmVkID0gZmFsc2UpOiB2b2lkID0+IHtcbiAgICAgIGlmIChmb3JtU3VibWl0dGVkKSByZXR1cm47XG4gICAgICBmb3JtU3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIGlmICghYWxyZWFkeUNhcHR1cmVkKSB7XG4gICAgICAgIGxvZ2dlci5sb2coJ0Zvcm0gc3VibWl0IGV2ZW50IGNhcHR1cmVkJyk7XG4gICAgICAgIGhhbmRsZUZvcm1TdWJtaXQoZm9ybSwgY2FsbGJhY2spO1xuICAgICAgICBpZiAoY2xpY2tQZW5kaW5nKSBjbGlja1N1Ym1pc3Npb25DYXB0dXJlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICAvLyBSZXNldCBhZnRlciBhIHNob3J0IGRlbGF5IHRvIGFsbG93IGZvciByZS1zdWJtaXNzaW9uXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHsgZm9ybVN1Ym1pdHRlZCA9IGZhbHNlOyB9LCAxMDAwKTtcbiAgICB9O1xuICAgIFxuICAgIHN1Ym1pc3Npb25IYW5kbGVycy5zZXQoZm9ybSwgKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KGNsaWNrRmFsbGJhY2tUaW1lcik7XG4gICAgICAvLyBBc3luYyB2YWxpZGF0aW9uIGNhbiBvdXRsaXZlIHRoZSBvbmUtc2Vjb25kIGRlYm91bmNlLiBBIGZhbGxiYWNrIGNhcHR1cmVkXG4gICAgICAvLyBmb3IgdGhpcyBjbGljayBzdGlsbCByZXByZXNlbnRzIHRoZSBzYW1lIHN1Ym1pc3Npb24gd2hlbiB0aGUgaG9vayBhcnJpdmVzLlxuICAgICAgaGFuZGxlU3VibWlzc2lvbihjbGlja1N1Ym1pc3Npb25DYXB0dXJlZCk7XG4gICAgICBjbGlja1BlbmRpbmcgPSBmYWxzZTtcbiAgICAgIGNsaWNrU3VibWlzc2lvbkNhcHR1cmVkID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIG5hdGl2ZSBmb3JtIHN1Ym1pdCBldmVudCAoY2FwdHVyZSBwaGFzZSlcbiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsICgpID0+IGhhbmRsZVN1Ym1pc3Npb24oKSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIFxuICAgIC8vIEZhbGxiYWNrOiBMaXN0ZW4gZm9yIHN1Ym1pdCBidXR0b24gY2xpY2tzIChHcmF2aXR5IEZvcm1zIHVzZXMgb25jbGljayBoYW5kbGVyKVxuICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbnMgPSBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAnYnV0dG9uW3R5cGU9XCJzdWJtaXRcIl0sIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sIFtkYXRhLXN1Ym1pc3Npb24tdHlwZT1cInN1Ym1pdFwiXSdcbiAgICApO
21xuICAgIHN1Ym1pdEJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIHJlZ2lzdGVyR3Jhdml0eUZpbHRlcigpO1xuICAgICAgICBjbGVhclRpbWVvdXQoY2xpY2tGYWxsYmFja1RpbWVyKTtcbiAgICAgICAgY2xpY2tQZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgY2xpY2tTdWJtaXNzaW9uQ2FwdHVyZWQgPSBmYWxzZTtcbiAgICAgICAgbG9nZ2VyLmxvZygnU3VibWl0IGJ1dHRvbiBjbGljayBkZXRlY3RlZCcpO1xuICAgICAgICAvLyBTbWFsbCBkZWxheSB0byBsZXQgZm9ybSB2YWxpZGF0aW9uIHJ1biBmaXJzdFxuICAgICAgICBjbGlja0ZhbGxiYWNrVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGhhbmRsZVN1Ym1pc3Npb24oKSwgNTApO1xuICAgICAgfSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIHRyYWNrZWRGb3Jtcy5hZGQoZm9ybSk7XG4gICAgY29uc3QgZm9ybUlkZW50aWZpZXIgPSBnZXRGb3JtSWRlbnRpZmllcihmb3JtKSB8fCAnVW5pZGVudGlmaWVkIEZvcm0nO1xuICAgIGxvZ2dlci5sb2coJ1RyYWNraW5nIGZvcm06JywgZm9ybUlkZW50aWZpZXIsIGAoJHtzdWJtaXRCdXR0b25zLmxlbmd0aH0gc3VibWl0IGJ1dHRvbihzKSlgKTtcbiAgfTtcblxuICAvKipcbiAgICogRmluZCBhbmQgYXR0YWNoIGxpc3RlbmVycyB0byBhbGwgZm9ybXMgaW4gYSBnaXZlbiByb290IGVsZW1lbnRcbiAgICovXG4gIGNvbnN0IHRyYWNrRm9ybXNJbkVsZW1lbnQgPSAocm9vdDogRWxlbWVudCB8IERvY3VtZW50KTogdm9pZCA9PiB7XG4gICAgY29uc3QgZm9ybXMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2Zvcm0nKTtcbiAgICBsb2dnZXIubG9nKGBGb3VuZCAke2Zvcm1zLmxlbmd0aH0gZm9ybShzKSBpbiBkb2N1bWVudGApO1xuICAgIGZvcm1zLmZvckVhY2goKGZvcm0pID0+IGF0dGFjaEZvcm1MaXN0ZW5lcihmb3JtIGFzIEhUTUxGb3JtRWxlbWVudCkpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBNdXRhdGlvbk9ic2VydmVyIHRvIHdhdGNoIGZvciBkeW5hbWljYWxseSBhZGRlZCBmb3Jtc1xuICAgKi9cbiAgY29uc3QgaW5pdE9ic2VydmVyID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmIChmb3JtT2JzZXJ2ZXIgfHwgdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgXG4gICAgZm9ybU9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuICAgICAgbXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZGVkTm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLmFkZGVkTm9kZXMpO1xuICAgICAgICBhZGRlZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgYWRkZWQgbm9kZSBpcyBhIGZvcm1cbiAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCkge1xuICAgICAgICAgICAgbG9nZ2VyLmxvZygnRHluYW1pYyBmb3JtIGRldGVjdGVkIHZpYSBNdXRhdGlvbk9ic2VydmVyJyk7XG4gICAgICAgICAgICBhdHRhY2hGb3JtTGlzdGVuZXIobm9kZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIENoZWNrIGZvciBmb3JtcyBuZXN0ZWQgd2l0aGluIHRoZSBhZGRlZCBub2RlXG4gICAgICAgICAgY29uc3QgbmVzdGVkRm9ybXMgPSBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ2Zvcm0nKTtcbiAgICAgICAgICBuZXN0ZWRGb3Jtcy5mb3JFYWNoKChuZXN0ZWRGb3JtKSA9PiB7XG4gICAgICAgICAgICBsb2dnZXIubG9nKCdOZXN0ZWQgZHluYW1pYyBmb3JtIGRldGVjdGVkIHZpYSBNdXRhdGlvbk9ic2VydmVyJyk7XG4gICAgICAgICAgICBhdHRhY2hGb3JtTGlzdGVuZXIobmVzdGVkRm9ybSBhcyBIVE1MRm9ybUVsZW1lbnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZm9ybU9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwgeyBcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSwgXG4gICAgICBzdWJ0cmVlOiB0cnVlIFxuICAgIH0pO1xuICAgIGxvZ2dlci5sb2coJ011dGF0aW9uT2JzZXJ2ZXIgaW5pdGlhbGl6ZWQgZm9yIGR5bmFtaWMgZm9ybSBkZXRlY3Rpb24nKTtcbiAgfTtcblxuICByZWdpc3RlckdyYXZpdHlGaWx0ZXIoKTtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZ2Zvcm0vdGhlbWUvc2NyaXB0c19sb2FkZWQnLCByZWdpc3RlckdyYXZpdHlGaWx0ZXIpO1xuXG4gIC8vIFRyYWNrIGV4aXN0aW5nIGZvcm1zIG9uIHRoZSBwYWdlXG4gIHRyYWNrRm9ybXNJbkVsZW1lbnQoZG9jdW1lbnQpO1xuXG4gIC8vIFNldHVwIE11dGF0aW9uT2JzZXJ2ZXIgLSB3YWl0IGZvciBkb2N1bWVudC5ib2R5IGlmIG5vdCByZWFkeVxuICBpZiAoZG9jdW1lbnQuYm9keSkge1xuICAgIGluaXRPYnNlcnZlcigpO1xuICB9IGVsc2Uge1xuICAgIC8vIFdhaXQgZm9yIERPTSB0byBiZSByZWFkeSBiZWZvcmUgYXR0YWNoaW5nIG9ic2VydmVyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgICAgIHRyYWNrRm9ybXNJbkVsZW1lbnQoZG9jdW1lbnQpOyAvLyBSZS1jaGVjayBmb3IgZm9ybXNcbiAgICAgIGluaXRPYnNlcnZlcigpO1xuICAgIH0pO1xuICB9XG59O1xuXG4vKipcbiAqIEhhbmRsZSBmb3JtIHN1Ym1pc3Npb24gYW5kIGNyZWF0ZSB0cmFja2luZyBldmVudFxuICogXG4gKiBAcGFyYW0gZm9ybSAtIFRoZSBIVE1MIGZvcm0gZWxlbWVudCB0aGF0IHdhcyBzdWJtaXR0ZWRcbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUgdHJhY2tpbmcgZXZlbnRcbiAqL1xuY29uc3QgaGFuZGxlRm9ybVN1Ym1pdCA9IChmb3JtOiBIVE1MRm9ybUVsZW1lbnQsIGNhbGxiYWNrOiAoZXZlbnQ6IEZvcm1TdWJtaXNzaW9uRXZlbnQpID0+IHZvaWQpOiB2b2lkID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IGZpZWxkRGF0YSwgZmllbGRMYWJlbHMsIGZpbGVzIH0gPSBwYXJzZU
2Zvcm1EYXRhKGZvcm0pO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gZ2V0UGFnZU1ldGFkYXRhKCk7XG4gICAgXG4gICAgY29uc3QgdHJhY2tpbmdFdmVudDogRm9ybVN1Ym1pc3Npb25FdmVudCA9IHtcbiAgICAgIHR5cGU6IEV2ZW50VHlwZS5GT1JNX1NVQk1JU1NJT04sXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBmb3JtSWQ6IGdldEZvcm1JZGVudGlmaWVyKGZvcm0pIHx8ICdVbmlkZW50aWZpZWQgRm9ybScsXG4gICAgICBmb3JtRGF0YTogZmllbGREYXRhLFxuICAgICAgZm9ybUxhYmVsczogZmllbGRMYWJlbHMsXG4gICAgICAuLi4oZmlsZXMgJiYgT2JqZWN0LmtleXMoZmlsZXMpLmxlbmd0aCA/IHsgZmlsZXMgfSA6IHt9KSxcbiAgICAgIC4uLm1ldGFkYXRhLFxuICAgIH07XG5cbiAgICBjYWxsYmFjayh0cmFja2luZ0V2ZW50KTtcbiAgICBcbiAgICBsb2dnZXIubG9nKCdGb3JtIHN1Ym1pc3Npb24gdHJhY2tlZDonLCB0cmFja2luZ0V2ZW50LmZvcm1JZCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdFcnJvciB0cmFja2luZyBmb3JtIHN1Ym1pc3Npb246JywgZXJyb3IpO1xuICB9XG59OyBcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcmVnZXhfanNfMSA9IHJlcXVpcmUoXCIuL3JlZ2V4LmpzXCIpO1xuZnVuY3Rpb24gdmFsaWRhdGUodXVpZCkge1xuICAgIHJldHVybiB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgJiYgcmVnZXhfanNfMS5kZWZhdWx0LnRlc3QodXVpZCk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB2YWxpZGF0ZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdmFsaWRhdGVfanNfMSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpO1xuZnVuY3Rpb24gdmVyc2lvbih1dWlkKSB7XG4gICAgaWYgKCEoMCwgdmFsaWRhdGVfanNfMS5kZWZhdWx0KSh1dWlkKSkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ0ludmFsaWQgVVVJRCcpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQodXVpZC5zbGljZSgxNCwgMTUpLCAxNik7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB2ZXJzaW9uO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCByYW5kb21VVUlEID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLnJhbmRvbVVVSUQgJiYgY3J5cHRvLnJhbmRvbVVVSUQuYmluZChjcnlwdG8pO1xuZXhwb3J0cy5kZWZh
2dWx0ID0geyByYW5kb21VVUlEIH07XG4iLCIvKipcbiAqIEdyYXZpdHkgRm9ybXMgTGFiZWwgRXh0cmFjdG9yXG4gKiBcbiAqIFByb3ZpZGVzIGZ1bmN0aW9ucyB0byBleHRyYWN0IGZpZWxkIGxhYmVscyBmcm9tIEdyYXZpdHkgRm9ybXMgSFRNTCBzdHJ1Y3R1cmUuXG4gKiBIYW5kbGVzIGJvdGggc2ltcGxlIGZpZWxkcyBhbmQgY29tcG91bmQgZmllbGRzIChOYW1lLCBBZGRyZXNzLCBldGMuKS5cbiAqL1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHR5cGUgeyBGb3JtSW5wdXRFbGVtZW50IH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKiBDU1MgY2xhc3MgdXNlZCBieSBHcmF2aXR5IEZvcm1zIGZvciBmaWVsZCBjb250YWluZXJzICovXG5jb25zdCBHRklFTERfQ0xBU1MgPSAnZ2ZpZWxkJztcblxuLyoqIENTUyBjbGFzcyBmb3IgR3Jhdml0eSBGb3JtcyBmaWVsZCBsYWJlbHMgKi9cbmNvbnN0IEdGSUVMRF9MQUJFTF9DTEFTUyA9ICdnZmllbGRfbGFiZWwnO1xuXG4vKiogUmVnZXggdG8gc3RyaXAgXCIoUmVxdWlyZWQpXCIgdGV4dCBmcm9tIGxhYmVscyAqL1xuY29uc3QgUkVRVUlSRURfSU5ESUNBVE9SX1JFR0VYID0gL1xccypcXChSZXF1aXJlZFxcKVxccyovZ2k7XG5cbi8qKiBSZWdleCB0byBzdHJpcCBhc3RlcmlzayBpbmRpY2F0b3JzIGZyb20gbGFiZWxzICovXG5jb25zdCBBU1RFUklTS19JTkRJQ0FUT1JfUkVHRVggPSAvXFxzKlxcKlxccyokL2c7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGFuIGVsZW1lbnQgaXMgd2l0aGluIGEgR3Jhdml0eSBGb3JtcyBmaWVsZCBjb250YWluZXJcbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgLSBET00gZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiBlbGVtZW50IGlzIGluc2lkZSBhIC5nZmllbGQgY29udGFpbmVyXG4gKi9cbmV4cG9ydCBjb25zdCBpc0dyYXZpdHlGb3Jtc0ZpZWxkID0gKGVsZW1lbnQ6IEVsZW1lbnQpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGVsZW1lbnQuY2xvc2VzdChgLiR7R0ZJRUxEX0NMQVNTfWApICE9PSBudWxsO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIFwiKFJlcXVpcmVkKVwiIGFuZCBhc3RlcmlzayBpbmRpY2F0b3JzIGZyb20gbGFiZWwgdGV4dFxuICogXG4gKiBAcGFyYW0gdGV4dCAtIFJhdyBsYWJlbCB0ZXh0XG4gKiBAcmV0dXJucyBDbGVhbmVkIGxhYmVsIHRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFuTGFiZWxUZXh0ID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoUkVRVUlSRURfSU5ESUNBVE9SX1JFR0VYLCAnJylcbiAgICAucmVwbGFjZShBU1RFUklTS19JTkRJQ0FUT1JfUkVHRVgsICcnKVxuICAgIC50cmltKCk7XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBtYWluIGxhYmVsIGZvciBhIEdyYXZpdHkgRm9ybXMgZmllbGRcbiAqIEZvciBjb21wb3VuZCBmaWVsZHMsIHRoaXMgZ2V0cyB0aGUgcHJpbWFyeSBsYWJlbCAoZS5nLiwgXCJOYW1lXCIgZm9yIGEgbmFtZSBmaWVsZClcbiAqIFxuICogQHBhcmFtIGlucHV0IC0gRm9ybSBpbnB1dCBlbGVtZW50XG4gKiBAcmV0dXJucyBNYWluIGxhYmVsIHRleHQgb3IgZW1wdHkgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNYWluTGFiZWwgPSAoaW5wdXQ6IEZvcm1JbnB1dEVsZW1lbnQpOiBzdHJpbmcgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGdmaWVsZCA9IGlucHV0LmNsb3Nlc3QoYC4ke0dGSUVMRF9DTEFTU31gKTtcbiAgICBpZiAoIWdmaWVsZCkgcmV0dXJuICcnO1xuXG4gICAgLy8gQ2hlY2sgZm9yIGNvbXBvdW5kIGZpZWxkIChmaWVsZHNldCB3aXRoIGdmaWVsZCBjbGFzcylcbiAgICBjb25zdCBmaWVsZHNldCA9IGlucHV0LmNsb3Nlc3QoJ2ZpZWxkc2V0Jyk7XG4gICAgY29uc3QgaXNDb21wb3VuZEZpZWxkID0gZmllbGRzZXQ/LmNsYXNzTGlzdC5jb250YWlucyhHRklFTERfQ0xBU1MpO1xuXG4gICAgaWYgKGlzQ29tcG91bmRGaWVsZCAmJiBmaWVsZHNldCkge1xuICAgICAgLy8gRm9yIGNvbXBvdW5kIGZpZWxkcywgZ2V0IGxhYmVsIGZyb20gbGVnZW5kXG4gICAgICBjb25zdCBsZWdlbmQgPSBmaWVsZHNldC5xdWVyeVNlbGVjdG9yKCdsZWdlbmQnKTtcbiAgICAgIGlmIChsZWdlbmQpIHtcbiAgICAgICAgcmV0dXJuIGNsZWFuTGFiZWxUZXh0KGxlZ2VuZC50ZXh0Q29udGVudD8udHJpbSgpID8/ICcnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3Igc2ltcGxlIGZpZWxkcywgZ2V0IGxhYmVsIGZyb20gLmdmaWVsZF9sYWJlbFxuICAgIGNvbnN0IGxhYmVsRWwgPSBnZmllbGQucXVlcnlTZWxlY3RvcihgbGFiZWwuJHtHRklFTERfTEFCRUxfQ0xBU1N9YCk7XG4gICAgaWYgKGxhYmVsRWwpIHtcbiAgICAgIHJldHVybiBjbGVhbkxhYmVsVGV4dChsYWJlbEVsLnRleHRDb250ZW50Py50cmltKCkgPz8gJycpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGV4dHJhY3RpbmcgR3Jhdml0eSBGb3JtcyBtYWluIGxhYmVsOicsIGVycm9yKTtcbiAgfVxuXG4gIHJldHVybiAnJztcbn07XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIHN1Yi1sYWJlbCBmb3IgY29tcG91bmQgZmllbGRzIChlLmcuLCBcIkZpcnN0XCIsIFwiTGFzdFwiIGZvciBuYW1lIGZpZWxkcylcbiAqIFxuICogQHBhcmFtIGZvcm0gLSBQYXJlbnQgZm9ybSBlbGVtZW50XG4gKiBAcGFyYW0gaW5wdXQgLSBGb3JtIGlucHV0IGVsZW1lbnRcbiAqIEByZXR1cm5zIFN1Yi1sYWJlbCB0ZXh0IG9yIGVtcHR5IHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZ2V0U3ViTGFiZWwgPSAoZm9ybTogSFRNTEZvcm1FbGVtZW50LCBpbnB1dDogRm9ybUlucHV0RWxlbWVudCk6IHN0cmluZyA9PiB7XG4gIGlmICghaW5wdXQuaWQpIHJldHVybiAnJztcblxuICB0cnkge1xuICAgIGNvbnN0IHN1YkxhYmVsRWwgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoYGxhYmVsW2Zvcj1cIiR7aW5wdXQuaWR9XCJdYCk7XG4gICAgaWYgKHN1YkxhYmVsRWwpIHtcbiAgICAgIHJldHVybiBzdWJMYWJlbEVsLnRleHRDb250ZW50Py50cmltKCkgPz8gJyc7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcignRXJyb3IgZXh0cmFjdGluZyBHcmF2aXR5IEZvcm1zIHN1Yi1sYWJlbDonLCBlcnJvcik7XG4gIH1cblxuICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgYW4gaW5wdXQgaXMgcGFydCBvZiBhIGNvbXBvdW5kIGZpZWxkIChOYW1lLCBBZGRyZXNzLCBldGMuKVxuICogXG4gKiBAcGFyYW0gaW5wdXQgLSBGb3JtIGlucHV0IGVsZW1lbnRcbiAqIEByZXR1cm5zIFRydWUgaWYgaW5wdXQgaXMgaW4gYSBjb21wb3VuZCBmaWVsZFxuICovXG5leHBvcnQgY29uc3QgaXNDb21wb3VuZEZpZWxkID0gKGlucHV0OiBGb3JtSW5wdXRFbGVtZW50KTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGZpZWxkc2V0ID0gaW5wdXQuY2xvc2VzdCgnZmllbGRzZXQnKTtcbiAgcmV0dXJuIGZ
2pZWxkc2V0Py5jbGFzc0xpc3QuY29udGFpbnMoR0ZJRUxEX0NMQVNTKSA/PyBmYWxzZTtcbn07XG5cbi8qKlxuICogR2V0cyBsYWJlbCBmb3IgR3Jhdml0eSBGb3JtcyBmaWVsZHNcbiAqIEZvciBjb21wb3VuZCBmaWVsZHM6IHJldHVybnMgc3VibGFiZWwgb25seSAoZS5nLiwgXCJGaXJzdCBOYW1lXCIgLSBhZG1pbiBjYW4gY3VzdG9taXplKVxuICogRm9yIHNpbXBsZSBmaWVsZHM6IHJldHVybnMgdGhlIG1haW4gbGFiZWxcbiAqIFxuICogQHBhcmFtIGZvcm0gLSBQYXJlbnQgZm9ybSBlbGVtZW50XG4gKiBAcGFyYW0gaW5wdXQgLSBGb3JtIGlucHV0IGVsZW1lbnRcbiAqIEByZXR1cm5zIExhYmVsIHRleHQgb3IgZW1wdHkgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb21iaW5lZExhYmVsID0gKFxuICBmb3JtOiBIVE1MRm9ybUVsZW1lbnQsXG4gIGlucHV0OiBGb3JtSW5wdXRFbGVtZW50XG4pOiBzdHJpbmcgPT4ge1xuICAvLyBFYXJseSByZXR1cm4gaWYgbm90IGEgR3Jhdml0eSBGb3JtcyBmaWVsZFxuICBpZiAoIWlzR3Jhdml0eUZvcm1zRmllbGQoaW5wdXQpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLy8gRm9yIGNvbXBvdW5kIGZpZWxkcywgdXNlIHN1YmxhYmVsIG9ubHkgKGFkbWluIGN1c3RvbWl6ZXMgdGhlc2UgaW4gR3Jhdml0eSBGb3JtcylcbiAgaWYgKGlzQ29tcG91bmRGaWVsZChpbnB1dCkpIHtcbiAgICBjb25zdCBzdWJMYWJlbCA9IGdldFN1YkxhYmVsKGZvcm0sIGlucHV0KTtcbiAgICBpZiAoc3ViTGFiZWwpIHtcbiAgICAgIHJldHVybiBzdWJMYWJlbDtcbiAgICB9XG4gIH1cblxuICAvLyBGb3Igc2ltcGxlIGZpZWxkcywgdXNlIG1haW4gbGFiZWxcbiAgcmV0dXJuIGdldE1haW5MYWJlbChpbnB1dCk7XG59O1xuXG4vKipcbiAqIEdldHMgbGFiZWwgZnJvbSBHcmF2aXR5IEZvcm1zIGZpZWxkIGNvbnRhaW5lciAoZmFsbGJhY2sgbWV0aG9kKVxuICogRXhjbHVkZXMgc3ViLWxhYmVscyB0byBnZXQgdGhlIG1haW4gZmllbGQgbGFiZWwgb25seVxuICogXG4gKiBAcGFyYW0gaW5wdXQgLSBGb3JtIGlucHV0IGVsZW1lbnRcbiAqIEByZXR1cm5zIExhYmVsIHRleHQgb3IgZW1wdHkgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb250YWluZXJMYWJlbCA9IChpbnB1dDogRm9ybUlucHV0RWxlbWVudCk6IHN0cmluZyA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZmllbGRDb250YWluZXIgPSBpbnB1dC5jbG9zZXN0KGAuJHtHRklFTERfQ0xBU1N9YCk7XG4gICAgaWYgKCFmaWVsZENvbnRhaW5lcikgcmV0dXJuICcnO1xuXG4gICAgLy8gR3Jhdml0eSBGb3JtcyBsYWJlbCBzZWxlY3RvcnMgKGV4Y2x1ZGUgc3ViLWxhYmVscylcbiAgICBjb25zdCBsYWJlbCA9IGZpZWxkQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgLiR7R0ZJRUxEX0xBQkVMX0NMQVNTfSwgLmdmb3JtLWZpZWxkLWxhYmVsOm5vdCguZ2Zvcm0tZmllbGQtbGFiZWwtLXR5cGUtc3ViKWBcbiAgICApO1xuXG4gICAgaWYgKGxhYmVsKSB7XG4gICAgICByZXR1cm4gY2xlYW5MYWJlbFRleHQobGFiZWwudGV4dENvbnRlbnQ/LnRyaW0oKSA/PyAnJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcignRXJyb3IgZXh0cmFjdGluZyBHcmF2aXR5IEZvcm1zIGNvbnRhaW5lciBsYWJlbDonLCBlcnJvcik7XG4gIH1cblxuICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIEdldHMgbGFiZWwgZnJvbSBmaWVsZHNldCBsZWdlbmQgZWxlbWVudFxuICogVXNlZCBmb3IgY29tcG91bmQgZmllbGRzIChOYW1lLCBFbWFpbCB3aXRoIGNvbmZpcm1hdGlvbiwgZXRjLilcbiAqIFxuICogQHBhcmFtIGlucHV0IC0gRm9ybSBpbnB1dCBlbGVtZW50XG4gKiBAcmV0dXJucyBMZWdlbmQgdGV4dCBvciBlbXB0eSBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpZWxkc2V0TGVnZW5kID0gKGlucHV0OiBGb3JtSW5wdXRFbGVtZW50KTogc3RyaW5nID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBmaWVsZHNldCA9IGlucHV0LmNsb3Nlc3QoJ2ZpZWxkc2V0Jyk7XG4gICAgaWYgKCFmaWVsZHNldCkgcmV0dXJuICcnO1xuXG4gICAgY29uc3QgbGVnZW5kID0gZmllbGRzZXQucXVlcnlTZWxlY3RvcignbGVnZW5kJyk7XG4gICAgaWYgKGxlZ2VuZCkge1xuICAgICAgcmV0dXJuIGNsZWFuTGFiZWxUZXh0KGxlZ2VuZC50ZXh0Q29udGVudD8udHJpbSgpID8/ICcnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdFcnJvciBleHRyYWN0aW5nIGZpZWxkc2V0IGxlZ2VuZDonLCBlcnJvcik7XG4gIH1cblxuICByZXR1cm4gJyc7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB2YWxpZGF0ZV9qc18xID0gcmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIik7XG5mdW5jdGlvbiBwYXJzZSh1dWlkKSB7XG4gICAgaWYgKCEoMCwgdmFsaWRhdGVfanNfMS5kZWZhdWx0KSh1dWlkKSkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ0ludmFsaWQgVVVJRCcpO1xuICAgIH1cbiAgICBsZXQgdjtcbiAgICByZXR1cm4gVWludDhBcnJheS5vZigodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMCwgOCksIDE2KSkgPj4+IDI0LCAodiA+Pj4gMTYpICYgMHhmZiwgKHYgPj4+IDgpICYgMHhmZiwgdiAmIDB4ZmYsICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSg5LCAxMyksIDE2KSkgPj4+IDgsIHYgJiAweGZmLCAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMTQsIDE4KSwgMTYpKSA+Pj4gOCwgdiAmIDB4ZmYsICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgxOSwgMjMpLCAxNikpID4+PiA4LCB2ICYgMHhmZiwgKCh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgyNCwgMzYpLCAxNikpIC8gMHgxMDAwMDAwMDAwMCkgJiAweGZmLCAodiAvIDB4MTAwMDAwMDAwKSAmIDB4ZmYsICh2ID4+PiAyNCkgJiAweGZmLCAodiA+Pj4gMTYpICYgMHhmZiwgKHYgPj4+IDgpICYgMHhmZiwgdiAmIDB4ZmYpO1xufVxuZXhwb3J0cy5kZWZh
2dWx0ID0gcGFyc2U7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIGYocywgeCwgeSwgeikge1xuICAgIHN3aXRjaCAocykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gKHggJiB5KSBeICh+eCAmIHopO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4geCBeIHkgXiB6O1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gKHggJiB5KSBeICh4ICYgeikgXiAoeSAmIHopO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICByZXR1cm4geCBeIHkgXiB6O1xuICAgIH1cbn1cbmZ1bmN0aW9uIFJPVEwoeCwgbikge1xuICAgIHJldHVybiAoeCA8PCBuKSB8ICh4ID4+PiAoMzIgLSBuKSk7XG59XG5mdW5jdGlvbiBzaGExKGJ5dGVzKSB7XG4gICAgY29uc3QgSyA9IFsweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJiY2RjLCAweGNhNjJjMWQ2XTtcbiAgICBjb25zdCBIID0gWzB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjBdO1xuICAgIGNvbnN0IG5ld0J5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMubGVuZ3RoICsgMSk7XG4gICAgbmV3Qnl0ZXMuc2V0KGJ5dGVzKTtcbiAgICBuZXdCeXRlc1tieXRlcy5sZW5ndGhdID0gMHg4MDtcbiAgICBieXRlcyA9IG5ld0J5dGVzO1xuICAgIGNvbnN0IGwgPSBieXRlcy5sZW5ndGggLyA0ICsgMjtcbiAgICBjb25zdCBOID0gTWF0aC5jZWlsKGwgLyAxNik7XG4gICAgY29uc3QgTSA9IG5ldyBBcnJheShOKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE47ICsraSkge1xuICAgICAgICBjb25zdCBhcnIgPSBuZXcgVWludDMyQXJyYXkoMTYpO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgICAgICAgIGFycltqXSA9XG4gICAgICAgICAgICAgICAgKGJ5dGVzW2kgKiA2NCArIGogKiA0XSA8PCAyNCkgfFxuICAgICAgICAgICAgICAgICAgICAoYnl0ZXNbaSAqIDY0ICsgaiAqIDQgKyAxXSA8PCAxNikgfFxuICAgICAgICAgICAgICAgICAgICAoYnl0ZXNbaSAqIDY0ICsgaiAqIDQgKyAyXSA8PCA4KSB8XG4gICAgICAgICAgICAgICAgICAgIGJ5dGVzW2kgKiA2NCArIGogKiA0ICsgM107XG4gICAgICAgIH1cbiAgICAgICAgTVtpXSA9IGFycjtcbiAgICB9XG4gICAgTVtOIC0gMV1bMTRdID0gKChieXRlcy5sZW5ndGggLSAxKSAqIDgpIC8gTWF0aC5wb3coMiwgMzIpO1xuICAgIE1bTiAtIDFdWzE0XSA9IE1hdGguZmxvb3IoTVtOIC0gMV1bMTRdKTtcbiAgICBNW04gLSAxXVsxNV0gPSAoKGJ5dGVzLmxlbmd0aCAtIDEpICogOCkgJiAweGZmZmZmZmZmO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgKytpKSB7XG4gICAgICAgIGNvbnN0IFcgPSBuZXcgVWludDMyQXJyYXkoODApO1xuICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IDE2OyArK3QpIHtcbiAgICAgICAgICAgIFdbdF0gPSBNW2ldW3RdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IHQgPSAxNjsgdCA8IDgwOyArK3QpIHtcbiAgICAgICAgICAgIFdbdF0gPSBST1RMKFdbdCAtIDNdIF4gV1t0IC0gOF0gXiBXW3QgLSAxNF0gXiBXW3QgLSAxNl0sIDEpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhID0gSFswXTtcbiAgICAgICAgbGV0IGIgPSBIWzFdO1xuICAgICAgICBsZXQgYyA9IEhbMl07XG4gICAgICAgIGxldCBkID0gSFszXTtcbiAgICAgICAgbGV0IGUgPSBIWzRdO1xuICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IDgwOyArK3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSBNYXRoLmZsb29yKHQgLyAyMCk7XG4gICAgICAgICAgICBjb25zdCBUID0gKFJPVEwoYSwgNSkgKyBmKHMsIGIsIGMsIGQpICsgZSArIEtbc10gKyBXW3RdKSA+Pj4gMDtcbiAgICAgICAgICAgIGUgPSBkO1xuICAgICAgICAgICAgZCA9IGM7XG4gICAgICAgICAgICBjID0gUk9UTChiLCAzMCkgPj4+IDA7XG4gICAgICAgICAgICBiID0gYTtcbiAgICAgICAgICAgIGEgPSBUO1xuICAgICAgICB9XG4gICAgICAgIEhbMF0gPSAoSFswXSArIGEpID4+PiAwO1xuICAgICAgICBIWzFdID0gKEhbMV0gKyBiKSA+Pj4gMDtcbiAgICAgICAgSFsyXSA9IChIWzJdICsgYykgPj4+IDA7XG4gICAgICAgIEhbM10gPSAoSFszXSArIGQpID4+PiAwO1xuICAgICAgICBIWzRdID0gKEhbNF0gKyBlKSA+Pj4gMDtcbiAgICB9XG4gICAgcmV0dXJuIFVpbnQ4QXJyYXkub2YoSFswXSA+PiAyNCwgSFswXSA+PiAxNiwgSFswXSA+PiA4LCBIWzBdLCBIWzFdID4+IDI0LCBIWzFdID4+IDE2LCBIWzFdID4+IDgsIEhbMV0sIEhbMl0gPj4gMjQsIEhbMl0gPj4gMTYsIEhbMl0gPj4gOCwgSFsyXSwgSFszXSA+PiAyNCwgSFszXSA+PiAxNiwgSFszXSA+PiA4LCBIWzNdLCBIWzRdID4+IDI0LCBIWzRdID4+IDE2LCBIWzRdID4+IDgsIEhbNF0pO1xufVxuZXhwb3J0cy5kZWZh
2dWx0ID0gc2hhMTtcbiIsImltcG9ydCB7IEV4dGVybmFsVHJhY2tlciB9IGZyb20gJy4vdHJhY2tlcic7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBnZXRDb25maWdGcm9tU2NyaXB0QXR0cmlidXRlcyB9IGZyb20gJy4uL2NvbmZpZy9zY3JpcHQtY29uZmlnJztcbmltcG9ydCB7IGNyZWF0ZVRyYWNrZXIgfSBmcm9tICcuLi9jb25maWcvZmFjdG9yeSc7XG5pbXBvcnQgeyBHTE9CQUxfVFJBQ0tJTkdfS0VZIH0gZnJvbSAnLi4vY29uZmlnL2NvbW1vbic7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSB0cmFja2VyIGZyb20gc2NyaXB0IGF0dHJpYnV0ZXNcbiAqIFxuICogQHJldHVybnMgVHJhY2tlciBpbnN0YW5jZSBpZiBzdWNjZXNzZnVsLCBudWxsIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZUZyb21TY3JpcHQgPSAoKTogRXh0ZXJuYWxUcmFja2VyIHwgbnVsbCA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2NyaXB0Q29uZmlnID0gZ2V0Q29uZmlnRnJvbVNjcmlwdEF0dHJpYnV0ZXMoKTtcbiAgICBcbiAgICBpZiAoIXNjcmlwdENvbmZpZykge1xuICAgICAgbG9nZ2VyLmNyaXRpY2FsKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZTogaW52YWxpZCBvciBtaXNzaW5nIHNjcmlwdCBhdHRyaWJ1dGVzJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsb2dnZXIubG9nKCdJbml0aWFsaXppbmcgZnJvbSBzY3JpcHQgYXR0cmlidXRlcycpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmFja2VyID0gY3JlYXRlVHJhY2tlcihzY3JpcHRDb25maWcpO1xuICAgICAgXG4gICAgICAvLyBTdG9yZSBpbiBnbG9iYWwgdHJhY2tpbmcgb2JqZWN0XG4gICAgICBjb25zdCB3ID0gd2luZG93IGFzIGFueTtcbiAgICAgIHdbR0xPQkFMX1RSQUNLSU5HX0tFWV0gPSB3W0dMT0JBTF9UUkFDS0lOR19LRVldIHx8IHt9O1xuICAgICAgd1tHTE9CQUxfVFJBQ0tJTkdfS0VZXS50cmFja2VyID0gdHJhY2tlcjtcbiAgICAgIHdbR0xPQkFMX1RSQUNLSU5HX0tFWV0uY29uZmlnID0gc2NyaXB0Q29uZmlnO1xuICAgICAgXG4gICAgICBsb2dnZXIubG9nKCdUcmFja2VyIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgcmV0dXJuIHRyYWNrZXI7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5jcml0aWNhbCgnRmFpbGVkIHRvIGNyZWF0ZSB0cmFja2VyOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuY3JpdGljYWwoJ0Vycm9yIGR1cmluZyBpbml0aWFsaXphdGlvbjonLCBlcnJvcik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07ICIsImltcG9ydCB7IGdldFVzZXJEYXRhLCBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFRyYWNraW5nQ29udGV4dCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEV4dHJhY3RzIHRyYWNraW5nIGNvbnRleHQgZnJvbSB0cmFja2VyIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRUcmFja2luZ0NvbnRleHQgPSAodHJhY2tlcjogdW5rbm93bik6IFRyYWNraW5nQ29udGV4dCB8IG51bGwgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHsgc3RhdGUsIGFwaUNsaWVudCB9ID0gdHJhY2tlciBhcyBhbnk7XG4gICAgY29uc3QgdXNlckRhdGEgPSBnZXRVc2VyRGF0YSgpO1xuXG4gICAgaWYgKCFzdGF0ZT8udHJhY2tpbmdJZCB8fCAhc3RhdGU/LnNlc3Npb25JZCB8fCAhYXBpQ2xpZW50Py5hcGlFbmRwb2ludCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYWNraW5nSWQ6IHN0YXRlLnRyYWNraW5nSWQsXG4gICAgICBzZXNzaW9uSWQ6IHN0YXRlLnNlc3Npb25JZCxcbiAgICAgIGFwaUVuZHBvaW50OiBhcGlDbGllbnQuYXBpRW5kcG9pbnQsXG4gICAgICBjb250YWN0SWQ6IHVzZXJEYXRhPy5jb250YWN0SWQsXG4gICAgICB1c2VySWQ6IHVzZXJEYXRhPy51c2VySWQsXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIHRyYWNraW5nIGNvbnRleHQnLCBlcnJvcik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG4iLCIvKipcbiAqIENvbW1vbiBjb25zdGFudHMgc2hhcmVkIGFjcm9zcyB0aGUgdHJhY2tpbmcgbGlicmFyeVxuICovXG5cbmV4cG9ydCBjb25zdCBBUElfRU5EUE9JTlRTID0ge1xuICBwcm9kdWN0aW9uOiAnaHR0cHM6Ly9iYWNrZW5kLmxlYWRjb25uZWN0b3JocS5jb20nLFxuICBzdGFnaW5nOiAnaHR0cHM6Ly9zdGFnaW5nLmJhY2tlbmQubGVhZGNvbm5lY3RvcmhxLmNvbScsXG4gIGxvY2FsOiAnaHR0cDovL2xvY2FsaG9zdDo2MTAwJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBMT0dHRVJfUFJFRklYID0gJ1tMQyBUcmFja2luZ10nO1xuZXhwb3J0IGNvbnN0IExPR0dFUl9FUlJPUl9QUkVGSVggPSAnW0xDIFRyYWNraW5nIEVSUk9SXSc7XG5cbi8vIE5hbWUgb2YgdGhlIGdsb2JhbCB3aW5kb3cga2V5IGZvciB0b2dnbGVzIGFuZCByZWZlcmVuY2VzXG5leHBvcnQgY29uc3QgR0xPQkFMX1RSQUNLSU5HX0tFWSA9ICdfbGNUcmFja2luZyc7XG5cbi8vIFNjcmlwdCBiYXNlIG5hbWUgdG8gZGV0ZWN0IHJ1bm5pbmcgY29udGV4dFxuZXhwb3J0IGNvbnN0IFNDUklQVF9CQVNFTkFNRSA9ICdleHRlcm5hbC10cmFja2luZyc7XG5cblxuIiwiLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGZvcm0gcGFyc2luZyByZXN1bHRzXG4gKi9cbmltcG9ydCB7IGlzUGFzc3dvcmRMaWtlRmllbGQgfSBmcm9tICcuL2ZpZWxkLXV0aWxzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7XG4gIGdldEdyYXZpdHlGb3Jtc0NvbWJpbmVkTGFiZWwsXG4gIEdyYXZpdHlGb3JtcyxcbiAgY2xlYW5MYWJlbFRleHQsXG59IGZyb20gJy4uL2hlbHBlcnMvZm9ybS1idWlsZGVycyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVBhcnNlUmVzdWx0IHtcbiAgZmllbGREYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBmaWVsZExhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZmlsZXM6IFJlY29yZDxzdHJpbmcsIEZpbGVbXT47XG59XG5cbi8qKlxuICogUGFyc2UgZm9ybSBkYXRhIGZyb20gSFRNTCBmb3JtIGVsZW1lbnQgd2l0aCBsYWJlbCBhbmFseXNpc1xuICogT25seSBjYXB0dXJlcyB2aXN
2pYmxlLCBlbmFibGVkIGZpZWxkcyB3aXRoIG5hbWUgYXR0cmlidXRlc1xuICogXG4gKiBAcGFyYW0gZm9ybSAtIEhUTUwgZm9ybSBlbGVtZW50IHRvIHBhcnNlXG4gKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBmaWVsZCBkYXRhIGFuZCBsYWJlbHNcbiAqIFxuICogTG9naWMgZmxvdzpcbiAqIDEuIEV4dHJhY3QgZmllbGQgZGF0YSBmcm9tIGZvcm0gdXNpbmcgRm9ybURhdGEgQVBJXG4gKiAyLiBFeHRyYWN0IGZpZWxkIGxhYmVscyBieSBhbmFseXppbmcgZm9ybSBzdHJ1Y3R1cmVcbiAqIDMuIFJldHVybiBib3RoIGRhdGEgYW5kIGxhYmVscyBmb3IgY29tcGxldGUgZm9ybSBjb250ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZUZvcm1EYXRhID0gKGZvcm06IEhUTUxGb3JtRWxlbWVudCk6IEZvcm1QYXJzZVJlc3VsdCA9PiB7XG4gIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm0pO1xuICBjb25zdCBmaWVsZERhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgY29uc3QgZmllbGRMYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgY29uc3QgZmlsZXNCeUZpZWxkOiBSZWNvcmQ8c3RyaW5nLCBGaWxlW10+ID0ge307XG5cbiAgLy8gQnVpbGQgYSB1bmlxdWUgc2V0IG9mIGtleXMgcHJlc2VudCBpbiB0aGUgc3VibWl0dGVkIEZvcm1EYXRhXG4gIGNvbnN0IGtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgdHJ5IHtcbiAgICAvLyBGb3JtRGF0YS5rZXlzKCkgaXRlcmF0b3IgbWF5IGR1cGxpY2F0ZSBrZXlzOyBTZXQgbm9ybWFsaXplc1xuICAgIGZvciAoY29uc3Qga2V5IG9mIChmb3JtRGF0YSBhcyBhbnkpLmtleXM/LigpIHx8IFtdKSB7XG4gICAgICBrZXlzLmFkZChTdHJpbmcoa2V5KSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdFcnJvciBpdGVyYXRpbmcgRm9ybURhdGEga2V5czsgZmFsbGluZyBiYWNrIHRvIEZvcm1EYXRhLmZvckVhY2gnLCBlKTtcbiAgICAvLyBGYWxsYmFjazogaXRlcmF0ZSBlbnRyaWVzXG4gICAgZm9ybURhdGEuZm9yRWFjaCgoXywga2V5KSA9PiBrZXlzLmFkZChrZXkpKTtcbiAgfVxuXG4gIGNvbnN0IGdldEFsbFZhbHVlcyA9IChrZXk6IHN0cmluZyk6IGFueVtdID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsdWVzID0gKGZvcm1EYXRhIGFzIGFueSkuZ2V0QWxsPy4oa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHJldHVybiB2YWx1ZXM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjYWxsaW5nIEZvcm1EYXRhLmdldEFsbDsgZmFsbGluZyBiYWNrIHRvIG1hbnVhbCBjb2xsZWN0aW9uJywgZSk7XG4gICAgfVxuICAgIC8vIEZhbGxiYWNrOiBjb2xsZWN0IHZpYSBlbnRyaWVzXG4gICAgY29uc3QgY29sbGVjdGVkOiBhbnlbXSA9IFtdO1xuICAgIGZvcm1EYXRhLmZvckVhY2goKHZhbHVlLCBrKSA9PiB7XG4gICAgICBpZiAoayA9PT0ga2V5KSBjb2xsZWN0ZWQucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbGxlY3RlZDtcbiAgfTtcblxuICBjb25zdCBlc2NhcGVDc3MgPSAoczogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gQHRzLWlnbm9yZTogQ1NTIG5hbWVzcGFjZSBtYXkgbm90IGV4aXN0IGluIG9sZGVyIGVudmlyb25tZW50c1xuICAgICAgcmV0dXJuICh3aW5kb3cgYXMgYW55KS5DU1M/LmVzY2FwZSA/ICh3aW5kb3cgYXMgYW55KS5DU1MuZXNjYXBlKHMpIDogcy5yZXBsYWNlKC8oWyMuOzohK1xcLVxcW1xcXVxcKFxcKVxce1xcfV0pL2csICdcXFxcJDEnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGVzY2FwaW5nIENTUyBzZWxlY3RvcjsgdXNpbmcgdW5lc2NhcGVkIHZhbHVlJywgZSk7XG4gICAgICByZXR1cm4gcztcbiAgICB9XG4gIH07XG5cbiAgLy8gSW5mZXIgdmFsdWVzIHdpdGggYmV0dGVyIGhhbmRsaW5nIGZvciBtdWx0aS1zZWxlY3RzLCBjaGVja2JveCBncm91cHMsIHJhZGlvcyBhbmQgZmlsZXNcbiAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCB2YWx1ZXMgPSBnZXRBbGxWYWx1ZXMoa2V5KTtcblxuICAgIC8vIElkZW50aWZ5IGVsZW1lbnRzIGJ5IG5hbWVcbiAgICBjb25zdCBzZWxlY3RvciA9IGBbbmFtZT1cIiR7ZXNjYXBlQ3NzKGtleSl9XCJdYDtcbiAgICBjb25zdCBlbGVtZW50cyA9IGZvcm0ucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cbiAgICBjb25zdCBmaXJzdEVsID0gZWxlbWVudHNbMF0gYXNcbiAgICAgIHwgSFRNTElucHV0RWxlbWVudFxuICAgICAgfCBIVE1MU2VsZWN0RWxlbWVudFxuICAgICAgfCBIVE1MVGV4dEFyZWFFbGVtZW50XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0YWcgPSAoZmlyc3RFbD8udGFnTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCB0eXBlID0gKGZpcnN0RWwgYXMgSFRNTElucHV0RWxlbWVudCB8IHVuZGVmaW5lZCk/LnR5cGU/LnRvTG93ZXJDYXNlPy4oKSB8fCAnJztcbiAgICBjb25zdCBpc011bHRpcGxlU2VsZWN0ID0gdGFnID09PSAnc2VsZWN0JyAmJiAoZmlyc3RFbCBhcyBIVE1MU2VsZWN0RWxlbWVudCB8IHVuZGVmaW5lZCk/Lm11bHRpcGxlID09PSB0cnVlO1xuXG4gICAgLy8gU2tpcCBoaWRkZW4gZmllbGRzIChlLmcuLCBHcmF2aXR5IEZvcm1zIGludGVybmFsIGZpZWxkcyBsaWtlIGdmb3JtX3N1Ym1pdCwgc3RhdGVfMSwgZXRjLilcbiAgICBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBGaWxlIG9iamVjdHMgdG8gYSBzYWZlIG1ldGFkYXRhIG9iamVjdCBmb3Igc3VibWlzc2lvblxuICAgIGNvbnN0IG1hcEZpbGUgPSAodjogYW55KTogYW55ID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgRmlsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdiBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmlsZW5hbWU6IHYubmFtZSB8fCAndXBsb2FkZWRfZmlsZScsXG4gICAgICAgICAgICBzaXplOiB0eXBlb2Ygdi5zaXplID09PSAnbnVtYmVyJyA/IHYuc2l6ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgI
2HR5cGU6ICh2IGFzIGFueSk/LnR5cGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBtYXBwaW5nIGZpbGUgbWV0YWRhdGEnLCBlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2O1xuICAgIH07XG5cbiAgICAvLyBTb21lIGZvcm0gYnVpbGRlcnMgKEhhcHB5IEZvcm1zKSB1c2UgbnVtZXJpYyBpbmRpY2VzIGFzIG9wdGlvbiB2YWx1ZXMuXG4gICAgLy8gUmVzb2x2ZSB0byB0aGUgdmlzaWJsZSBsYWJlbCB0ZXh0IHNvIGRvd25zdHJlYW0gbWFwcGluZyByZWNlaXZlcyBtZWFuaW5nZnVsIGRhdGEuXG4gICAgY29uc3QgcmVzb2x2ZU9wdGlvblRleHQgPSAoZWw6IEhUTUxJbnB1dEVsZW1lbnQpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgcmF3ID0gU3RyaW5nKGVsLnZhbHVlKTtcbiAgICAgIGlmICghL15cXGQrJC8udGVzdChyYXcpKSByZXR1cm4gcmF3O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IGVsLmNsb3Nlc3QoJ2xhYmVsJyk7XG4gICAgICAgIGlmICh3cmFwcGVyKSB7XG4gICAgICAgICAgY29uc3QgY2xvbmUgPSB3cmFwcGVyLmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MTGFiZWxFbGVtZW50O1xuICAgICAgICAgIGNsb25lLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0JykuZm9yRWFjaCgoYykgPT4gYy5yZW1vdmUoKSk7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IGNsb25lLnRleHRDb250ZW50Py50cmltKCk7XG4gICAgICAgICAgaWYgKHRleHQpIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbC5pZCkge1xuICAgICAgICAgIGNvbnN0IGZvckxhYmVsID0gZm9ybS5xdWVyeVNlbGVjdG9yKGBsYWJlbFtmb3I9XCIke2VsLmlkfVwiXWApO1xuICAgICAgICAgIGlmIChmb3JMYWJlbD8udGV4dENvbnRlbnQ/LnRyaW0oKSkgcmV0dXJuIGZvckxhYmVsLnRleHRDb250ZW50IS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV4dCA9IGVsLm5leHRTaWJsaW5nO1xuICAgICAgICBpZiAobmV4dD8udGV4dENvbnRlbnQ/LnRyaW0oKSkgcmV0dXJuIG5leHQudGV4dENvbnRlbnQhLnRyaW0oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgbG9nZ2VyLmVycm9yKCdFcnJvciByZXNvbHZpbmcgb3B0aW9uIHRleHQgZnJvbSBET00nLCBlKTsgfVxuICAgICAgcmV0dXJuIHJhdztcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzb2x2ZVNlbGVjdFRleHQgPSAoc2VsOiBIVE1MU2VsZWN0RWxlbWVudCwgdmFsOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgaWYgKCEvXlxcZCskLy50ZXN0KHZhbCkpIHJldHVybiB2YWw7XG4gICAgICBjb25zdCBvcHQgPSBBcnJheS5mcm9tKHNlbC5vcHRpb25zKS5maW5kKChvKSA9PiBvLnZhbHVlID09PSB2YWwpO1xuICAgICAgcmV0dXJuIG9wdD8udGV4dENvbnRlbnQ/LnRyaW0oKSB8fCB2YWw7XG4gICAgfTtcblxuICAgIC8vIE5vcm1hbGl6ZSBjaGVja2JveC9yYWRpby9zZWxlY3QgYmVoYXZpb3JzXG4gICAgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICBjb25zdCBjaGVja2VkID0gQXJyYXkuZnJvbShlbGVtZW50cykuZmlsdGVyKFxuICAgICAgICAoZWwpID0+IChlbCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkLFxuICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50W107XG4gICAgICBpZiAoY2hlY2tlZC5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZpZWxkRGF0YVtrZXldID0gY2hlY2tlZC5tYXAoKGVsKSA9PiByZXNvbHZlT3B0aW9uVGV4dChlbCkpO1xuICAgICAgfSBlbHNlIGlmIChjaGVja2VkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmaWVsZERhdGFba2V5XSA9IHJlc29sdmVPcHRpb25UZXh0KGNoZWNrZWRbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmllbGREYXRhW2tleV0gPSB2YWx1ZXMubGVuZ3RoID4gMSA/IFtdIDogZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAncmFkaW8nKSB7XG4gICAgICBjb25zdCBjaGVja2VkID0gQXJyYXkuZnJvbShlbGVtZW50cykuZmluZChcbiAgICAgICAgKGVsKSA9PiAoZWwgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCxcbiAgICAgICkgYXMgSFRNTElucHV0RWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICAgIGZpZWxkRGF0YVtrZXldID0gY2hlY2tlZCA/IHJlc29sdmVPcHRpb25UZXh0KGNoZWNrZWQpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc011bHRpcGxlU2VsZWN0KSB7XG4gICAgICBjb25zdCBzZWwgPSBmaXJzdEVsIGFzIEhUTUxTZWxlY3RFbGVtZW50O1xuICAgICAgZmllbGREYXRhW2tleV0gPSB2YWx1ZXMubWFwKCh2KSA9PiByZXNvbHZlU2VsZWN0VGV4dChzZWwsIFN0cmluZyh2KSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICBjb25zdCBzZWwgPSBmaXJzdEVsIGFzIEhUTUxTZWxlY3RFbGVtZW50O1xuICAgICAgY29uc3QgcmF3ID0gdmFsdWVzWzBdO1xuICAgICAgZmllbGREYXRhW2tleV0gPSByYXcgPT09IHVuZGVmaW5lZCA/IG51bGwgOiByZXNvbHZlU2VsZWN0VGV4dChzZWwsIFN0cmluZyhyYXcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdmaWxlJykge1xuICAgICAgLy8gQ2FwdHVyZSByZWFsIEZpbGUgb2JqZWN0cyBzbyB3ZSBjYW4gc2VuZCBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgICBjb25zdCBmaWxlTGlzdDogRmlsZVtdID0gW107XG4gICAgICBjb25zdCBtZXRhTGlzdDogYW55W10gPSBbXTtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKCh2OiBhbnkpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodHlwZW9mIEZpbGUgIT09ICd1bmRlZmluZWQnICYmIHYgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gKHYubmFtZSB8fCAnJykudHJpbSgpO1xuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IHR5cGVvZiB2LnNpemUgPT09ICdudW1iZXInID8gdi5zaXplIDogMDtcbiAgICAgICAgICAgIC8vIFdoZW4gbm8gZmlsZSBpcyBzZWxlY3RlZCwgYnJvd3NlcnMgc3RpbGwgY3JlYXRlIGEgRmlsZSB3aXRoXG4gICAgICAgICAgICAvLyBlbXB0eSBuYW1lIGFuZCBzaXplIDAuIFRyZWF0IHR
2oYXQgYXMgXCJubyBmaWxlXCIgc28gd2UgZG9uJ3RcbiAgICAgICAgICAgIC8vIHNlbmQgYW4gZW1wdHkgYmluYXJ5IHBhcnQgdG8gdGhlIGJhY2tlbmQuXG4gICAgICAgICAgICBpZiAoIW5hbWUgJiYgc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWxlTGlzdC5wdXNoKHYgYXMgRmlsZSk7XG4gICAgICAgICAgICBtZXRhTGlzdC5wdXNoKG1hcEZpbGUodikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgcHJvY2Vzc2luZyBmaWxlIGlucHV0IHZhbHVlJywgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbGVMaXN0Lmxlbmd0aCkge1xuICAgICAgICBmaWxlc0J5RmllbGRba2V5XSA9IGZpbGVMaXN0O1xuICAgICAgfVxuICAgICAgLy8gUHJlc2VydmUgbGlnaHR3ZWlnaHQgbWV0YWRhdGEgaW4gZmllbGREYXRhIGZvciBtYXBwaW5nL1VJIHBhcml0eVxuICAgICAgaWYgKG1ldGFMaXN0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZmllbGREYXRhW2tleV0gPSBtZXRhTGlzdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpZWxkRGF0YVtrZXldID0gbWV0YUxpc3RbMF0gfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0IGJlaGF2aW9yOiBpZiBtdWx0aXBsZSB2YWx1ZXMgZm9yIHNhbWUga2V5IChlLmcuLCB0ZXh0IGJveCBsaXN0KSwgcmV0dXJuIGFycmF5XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPiAxKSB7XG4gICAgICBmaWVsZERhdGFba2V5XSA9IHZhbHVlcy5tYXAoKHYpID0+IFN0cmluZyh2KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJhdyA9IHZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHN0ciA9IHJhdyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogU3RyaW5nKHJhdyk7XG4gICAgICBmaWVsZERhdGFba2V5XSA9IHN0ciA9PT0gJycgPyBudWxsIDogc3RyO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gRW5zdXJlIHVuY2hlY2tlZCBzaW5nbGUgY2hlY2tib3hlcyBhcmUgY2FwdHVyZWQgYXMgZmFsc2UgYW5kIG11bHRpIGdyb3VwcyBhcyBbXVxuICB0cnkge1xuICAgIGNvbnN0IGFsbENoZWNrYm94ZXMgPSBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXVtuYW1lXScpO1xuICAgIGNvbnN0IHNlZW46IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbENoZWNrYm94ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVsID0gYWxsQ2hlY2tib3hlc1tpXSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgY29uc3QgbiA9IGVsLm5hbWU7XG4gICAgICBpZiAoIW4gfHwgZWwuZGlzYWJsZWQpIGNvbnRpbnVlO1xuICAgICAgc2VlbltuXSA9IChzZWVuW25dIHx8IDApICsgMTtcbiAgICB9XG4gICAgT2JqZWN0LmtleXMoc2VlbikuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgaWYgKCEobmFtZSBpbiBmaWVsZERhdGEpKSB7XG4gICAgICAgIGZpZWxkRGF0YVtuYW1lXSA9IHNlZW5bbmFtZV0gPiAxID8gW10gOiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5lcnJvcignRXJyb3Igbm9ybWFsaXppbmcgdW5jaGVja2VkIGNoZWNrYm94IHZhbHVlcycsIGUpO1xuICB9XG5cbiAgLy8gRW5zdXJlIGVtcHR5IG11bHRpLXNlbGVjdHMgYXJlIFtdXG4gIHRyeSB7XG4gICAgY29uc3QgbXVsdGlTZWxlY3RzID0gZm9ybS5xdWVyeVNlbGVjdG9yQWxsKCdzZWxlY3RbbXVsdGlwbGVdW25hbWVdJyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtdWx0aVNlbGVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVsID0gbXVsdGlTZWxlY3RzW2ldIGFzIEhUTUxTZWxlY3RFbGVtZW50O1xuICAgICAgY29uc3QgbiA9IGVsLm5hbWU7XG4gICAgICBpZiAoIW4gfHwgZWwuZGlzYWJsZWQpIGNvbnRpbnVlO1xuICAgICAgaWYgKCEobiBpbiBmaWVsZERhdGEpKSBmaWVsZERhdGFbbl0gPSBbXTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIG5vcm1hbGl6aW5nIGVtcHR5IG11bHRpLXNlbGVjdCB2YWx1ZXMnLCBlKTtcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBzaWduYXR1cmVzIGlmIHByZXNlbnQgYXMgYmFzZTY0IHN0cmluZ3NcbiAgdHJ5IHtcbiAgICBPYmplY3Qua2V5cyhmaWVsZERhdGEpLmZvckVhY2goKGspID0+IHtcbiAgICAgIGNvbnN0IHYgPSBmaWVsZERhdGFba107XG4gICAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9zaWduYXR1cmUvaS50ZXN0KGspKSB7XG4gICAgICAgIGNvbnN0IHMgPSB2LnRyaW0oKTtcbiAgICAgICAgaWYgKHMuc3RhcnRzV2l0aCgnZGF0YTppbWFnZScpKSB7XG4gICAgICAgICAgLy8gVXNlIGEgZGF0YVVybCBwcm9wZXJ0eSBzbyBkb3duc3RyZWFtIHNlcnZpY2VzXG4gICAgICAgICAgLy8gY2FuIHJlbGlhYmx5IGRldGVjdCBhbmQgcHJvY2VzcyB0aGUgc2lnbmF0dXJlLlxuICAgICAgICAgIGZpZWxkRGF0YVtrXSA9IHsgdHlwZTogJ3NpZ25hdHVyZScsIGRhdGFVcmw6IHMgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdFcnJvciBub3JtYWxpemluZyBzaWduYXR1cmUgZmllbGRzJywgZSk7XG4gIH1cblxuICAvLyBFeHRyYWN0IGZpZWxkIGxhYmVscyBmb3IgbWFwcGluZ1xuICBjb25zdCBpbnB1dHMgPSBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGlucHV0c1tpXTtcbiAgICBjb25zdCBpbnB1dCA9IGVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudCB8IEhUTUxTZWxlY3RFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICBjb25zdCBmaWVsZE5hbWUgPSBpbnB1dC5uYW1lO1xuXG4gICAgLy8gU2tpcCBpbnZhbGlkIG9yIGV4Y2x1ZGVkIGZpZWxkc1xuICAgIGlmICghc2hvdWxkSW5jbHVkZUZpZWxkKGlucHV0LCBmaWVsZE5hbWUsIGZpZWxkRGF0YSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3QgbGFiZWwgdG8gZXZhbHVhdGUgc2Vuc2l0aXZpdHkgYW5kIGZvciBtYXBwaW5nIGlmIG5vbi1zZW5zaXRpdmVcbiAgICBjb25zdCBsYWJlbFRleHQgPSBleHRyYWN0RmllbGRMYWJlbChmb3JtLCBpbnB1dCk7XG5cbiAgICBpZiAoaXNQYXNzd29yZExpa2VGaWVsZChpbnB1dCwgbGFiZWxUZXh0KSkge1xuICAgICAgLy8gUmVtb3ZlIGFueSBwcmV2aW91c2x5IGNhc
2HR1cmVkIHZhbHVlIGZvciB0aGlzIHNlbnNpdGl2ZSBmaWVsZFxuICAgICAgaWYgKGZpZWxkTmFtZSBpbiBmaWVsZERhdGEpIHtcbiAgICAgICAgZGVsZXRlIGZpZWxkRGF0YVtmaWVsZE5hbWVdO1xuICAgICAgfVxuICAgICAgLy8gRG8gbm90IHJlY29yZCBhIGxhYmVsIGZvciBzZW5zaXRpdmUgZmllbGRzXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IGxhYmVsIHRleHQgZm9yIHRoaXMgbm9uLXNlbnNpdGl2ZSBmaWVsZFxuICAgIGlmIChsYWJlbFRleHQpIHtcbiAgICAgIGZpZWxkTGFiZWxzW2ZpZWxkTmFtZV0gPSBsYWJlbFRleHQ7XG4gICAgfVxuICB9XG5cbiAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgdGVybXNfYW5kX2NvbmRpdGlvbnM6XG4gIC8vIGlmIHRoZSBjaGVja2JveCBpcyBjaGVja2VkLCBzZXQgaXRzIHZhbHVlIHRvIHRoZVxuICAvLyBjb3JyZXNwb25kaW5nIGxhYmVsIHRleHQgd2hlbiBhdmFpbGFibGUsIG90aGVyd2lzZVxuICAvLyBkZWZhdWx0IHRvIGJvb2xlYW4gdHJ1ZS5cbiAgdHJ5IHtcbiAgICBpZiAoJ3Rlcm1zX2FuZF9jb25kaXRpb25zJyBpbiBmaWVsZERhdGEpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBmaWVsZERhdGFbJ3Rlcm1zX2FuZF9jb25kaXRpb25zJ107XG4gICAgICBpZiAoY3VycmVudCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGZpZWxkTGFiZWxzWyd0ZXJtc19hbmRfY29uZGl0aW9ucyddO1xuICAgICAgICBmaWVsZERhdGFbJ3Rlcm1zX2FuZF9jb25kaXRpb25zJ10gPSBsYWJlbCB8fCB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5lcnJvcignRXJyb3IgYXBwbHlpbmcgdGVybXNfYW5kX2NvbmRpdGlvbnMgbGFiZWwgbWFwcGluZzsgZmFsbGluZyBiYWNrIHRvIHJhdyB2YWx1ZScsIGUpO1xuICB9XG5cbiAgLy8gUmV0dXJuIG9yaWdpbmFsIGZpZWxkIGRhdGEgd2l0aCBsYWJlbHMgLSBiYWNrZW5kIG1hdGNoZXMgYnkgbGFiZWwgZm9yIGZpZWxkIG1hcHBpbmdcbiAgcmV0dXJuIHsgZmllbGREYXRhLCBmaWVsZExhYmVscywgZmlsZXM6IGZpbGVzQnlGaWVsZCB9O1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgZmllbGQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGZvcm0gZGF0YVxuICogXG4gKiBAcGFyYW0gaW5wdXQgLSBIVE1MIGlucHV0IGVsZW1lbnRcbiAqIEBwYXJhbSBmaWVsZE5hbWUgLSBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgZmllbGRcbiAqIEBwYXJhbSBmaWVsZERhdGEgLSBDdXJyZW50IGZpZWxkIGRhdGEgb2JqZWN0XG4gKiBAcmV0dXJucyBib29sZWFuIGluZGljYXRpbmcgaWYgZmllbGQgc2hvdWxkIGJlIGluY2x1ZGVkXG4gKi9cbmNvbnN0IHNob3VsZEluY2x1ZGVGaWVsZCA9IChcbiAgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQsXG4gIGZpZWxkTmFtZTogc3RyaW5nLFxuICBmaWVsZERhdGE6IFJlY29yZDxzdHJpbmcsIGFueT5cbik6IGJvb2xlYW4gPT4ge1xuICAvLyBTa2lwIGZpZWxkcyB3aXRob3V0IG5hbWUgYXR0cmlidXRlXG4gIGlmICghZmllbGROYW1lKSByZXR1cm4gZmFsc2U7XG4gIFxuICAvLyBTa2lwIGhpZGRlbiBvciBkaXNhYmxlZCBpbnB1dHMgIFxuICBpZiAoaW5wdXQuZGlzYWJsZWQpIHJldHVybiBmYWxzZTtcbiAgaWYgKGlucHV0LnR5cGUgPT09ICdoaWRkZW4nKSByZXR1cm4gZmFsc2U7XG4gIFxuICAvLyBTa2lwIGludmlzaWJsZSBpbnB1dHNcbiAgaWYgKCFpc0ZpZWxkVmlzaWJsZShpbnB1dCkpIHJldHVybiBmYWxzZTtcbiAgXG4gIC8vIFNraXAgaWYgZmllbGQgaXMgbm90IGluIHRoZSBzdWJtaXR0ZWQgZm9ybSBkYXRhXG4gIGlmICghKGZpZWxkTmFtZSBpbiBmaWVsZERhdGEpKSByZXR1cm4gZmFsc2U7XG4gIFxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZm9ybSBmaWVsZCBpcyB2aXNpYmxlIHRvIHRoZSB1c2VyXG4gKiBcbiAqIEBwYXJhbSBpbnB1dCAtIEhUTUwgaW5wdXQgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGZpZWxkIGlzIHZpc2libGVcbiAqL1xuY29uc3QgaXNGaWVsZFZpc2libGUgPSAoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQpOiBib29sZWFuID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaW5wdXQpO1xuICAgIHJldHVybiAhKFxuICAgICAgY29tcHV0ZWRTdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgfHxcbiAgICAgIGNvbXB1dGVkU3R5bGUudmlzaWJpbGl0eSA9PT0gJ2hpZGRlbicgfHxcbiAgICAgIChjb21wdXRlZFN0eWxlLm9wYWNpdHkgPz8gJzEnKSA9PT0gJzAnXG4gICAgKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY2hlY2tpbmcgZm9ybSBmaWVsZCB2aXNpYmlsaXR5JywgZSk7XG4gICAgLy8gSWYgd2UgY2FuJ3QgZ2V0IGNvbXB1dGVkIHN0eWxlLCBhc3N1bWUgdmlzaWJsZVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIGxhYmVsIHRleHQgZm9yIGEgZm9ybSBmaWVsZCB1c2luZyBtdWx0aXBsZSBzdHJhdGVnaWVzXG4gKiBTdXBwb3J0czogR3Jhdml0eSBGb3JtcywgTmluamEgRm9ybXMsIGFuZCBzdGFuZGFyZCBIVE1MIGZvcm1zXG4gKiBcbiAqIEBwYXJhbSBmb3JtIC0gSFRNTCBmb3JtIGVsZW1lbnRcbiAqIEBwYXJhbSBpbnB1dCAtIEhUTUwgaW5wdXQgZWxlbWVudFxuICogQHJldHVybnMgTGFiZWwgdGV4dCBvciBlbXB0eSBzdHJpbmcgaWYgbm90IGZvdW5kXG4gKi9cbmNvbnN0IGV4dHJhY3RGaWVsZExhYmVsID0gKFxuICBmb3JtOiBIVE1MRm9ybUVsZW1lbnQsXG4gIGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFNlbGVjdEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50XG4pOiBzdHJpbmcgPT4ge1xuICAvLyBGb3IgR3Jhdml0eSBGb3JtcyBjb21wb3VuZCBmaWVsZHMsIHRyeSB0byBnZXQgc3VibGFiZWwgKGFscmVhZHkgY2xlYW5lZClcbiAgY29uc3QgZ3Jhdml0eUZvcm1zTGFiZWwgPSBnZXRHcmF2aXR5Rm9ybXNDb21iaW5lZExhYmVsKGZvcm0sIGlucHV0KTtcbiAgaWYgKGdyYXZpdHlGb3Jtc0xhYmVsKSByZXR1cm4gZ3Jhdml0eUZvcm1zTGFiZWw7XG4gIFxuICAvLyBUcnkgZXhwbGljaXQgbGFiZWwgYXNzb2NpYXRpb24gZmlyc3QgKHdvcmtzIHdpdGggc3RhbmRhcmQgaHRtbEZvciBwYXR0ZXJucylcbiAgY29uc3QgZm9yTGFiZWwgPSBnZXRMYWJlbEJ5Rm9yQXR0cmlidXRlKGZvcm0sIGlucHV0KTtcbiAgaWYgKGZvckxhYmVsKSByZXR1cm4gY2xlYW5MYWJlbFRleHQoZm9yTGFiZWwpO1xuICBcbiAgLy8gVHJ5IHBhcmVudCBsYWJlbCBlbGVtZW50XG4gIGNvbnN0IHBhcmVudExhYmVsID0gZ2V0UGFyZW50TGFiZWwoaW5wdXQpO1xuICBpZiAocGFyZW50TGFiZWwpIHJldHVybi
2BjbGVhbkxhYmVsVGV4dChwYXJlbnRMYWJlbCk7XG4gIFxuICAvLyBUcnkgYWRqYWNlbnQgbGFiZWwgKHByZXZpb3VzIHNpYmxpbmcpXG4gIGNvbnN0IGFkamFjZW50TGFiZWwgPSBnZXRBZGphY2VudExhYmVsKGlucHV0KTtcbiAgaWYgKGFkamFjZW50TGFiZWwpIHJldHVybiBjbGVhbkxhYmVsVGV4dChhZGphY2VudExhYmVsKTtcbiAgXG4gIC8vIFRyeSBHcmF2aXR5IEZvcm1zIGZpZWxkIGNvbnRhaW5lciBsYWJlbCAoZmFsbGJhY2ssIGFscmVhZHkgY2xlYW5lZClcbiAgY29uc3QgY29udGFpbmVyTGFiZWwgPSBHcmF2aXR5Rm9ybXMuZ2V0Q29udGFpbmVyTGFiZWwoaW5wdXQpO1xuICBpZiAoY29udGFpbmVyTGFiZWwpIHJldHVybiBjb250YWluZXJMYWJlbDtcbiAgXG4gIC8vIFRyeSBmaWVsZHNldCBsZWdlbmQgKEdyYXZpdHkgRm9ybXMgY29tcG91bmQgZmllbGRzLCBhbHJlYWR5IGNsZWFuZWQpXG4gIGNvbnN0IGxlZ2VuZExhYmVsID0gR3Jhdml0eUZvcm1zLmdldEZpZWxkc2V0TGVnZW5kKGlucHV0KTtcbiAgaWYgKGxlZ2VuZExhYmVsKSByZXR1cm4gbGVnZW5kTGFiZWw7XG4gIFxuICByZXR1cm4gJyc7XG59O1xuXG4vKipcbiAqIEdldHMgbGFiZWwgdGV4dCB1c2luZyAnZm9yJyBhdHRyaWJ1dGUgYXNzb2NpYXRpb25cbiAqIFxuICogQHBhcmFtIGZvcm0gLSBIVE1MIGZvcm0gZWxlbWVudFxuICogQHBhcmFtIGlucHV0IC0gSFRNTCBpbnB1dCBlbGVtZW50XG4gKiBAcmV0dXJucyBMYWJlbCB0ZXh0IG9yIGVtcHR5IHN0cmluZ1xuICovXG5jb25zdCBnZXRMYWJlbEJ5Rm9yQXR0cmlidXRlID0gKFxuICBmb3JtOiBIVE1MRm9ybUVsZW1lbnQsXG4gIGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFNlbGVjdEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50XG4pOiBzdHJpbmcgPT4ge1xuICBpZiAoIWlucHV0LmlkKSByZXR1cm4gJyc7XG4gIFxuICBjb25zdCBhc3NvY2lhdGVkTGFiZWwgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoYGxhYmVsW2Zvcj1cIiR7aW5wdXQuaWR9XCJdYCkgYXMgSFRNTExhYmVsRWxlbWVudDtcbiAgcmV0dXJuIGFzc29jaWF0ZWRMYWJlbCA/IChhc3NvY2lhdGVkTGFiZWwudGV4dENvbnRlbnQ/LnRyaW0oKSB8fCAnJykgOiAnJztcbn07XG5cbi8qKlxuICogR2V0cyBsYWJlbCB0ZXh0IGZyb20gcGFyZW50IGxhYmVsIGVsZW1lbnRcbiAqIFxuICogQHBhcmFtIGlucHV0IC0gSFRNTCBpbnB1dCBlbGVtZW50XG4gKiBAcmV0dXJucyBMYWJlbCB0ZXh0IG9yIGVtcHR5IHN0cmluZ1xuICovXG5jb25zdCBnZXRQYXJlbnRMYWJlbCA9IChpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IEhUTUxTZWxlY3RFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHBhcmVudExhYmVsID0gaW5wdXQuY2xvc2VzdCgnbGFiZWwnKSBhcyBIVE1MTGFiZWxFbGVtZW50O1xuICBpZiAoIXBhcmVudExhYmVsKSByZXR1cm4gJyc7XG4gIFxuICAvLyBDbG9uZSBhbmQgcmVtb3ZlIGNoaWxkIGlucHV0cyB0byBnZXQgY2xlYW4gbGFiZWwgdGV4dFxuICBjb25zdCBjbG9uZWRMYWJlbCA9IHBhcmVudExhYmVsLmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MTGFiZWxFbGVtZW50O1xuICBjb25zdCBjaGlsZElucHV0cyA9IGNsb25lZExhYmVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJyk7XG4gIGZvciAobGV0IGogPSAwOyBqIDwgY2hpbGRJbnB1dHMubGVuZ3RoOyBqKyspIHtcbiAgICBjaGlsZElucHV0c1tqXS5yZW1vdmUoKTtcbiAgfVxuICBcbiAgcmV0dXJuIGNsb25lZExhYmVsLnRleHRDb250ZW50Py50cmltKCkgfHwgJyc7XG59O1xuXG4vKipcbiAqIEdldHMgbGFiZWwgdGV4dCBmcm9tIGFkamFjZW50IGxhYmVsIGVsZW1lbnRcbiAqIFxuICogQHBhcmFtIGlucHV0IC0gSFRNTCBpbnB1dCBlbGVtZW50XG4gKiBAcmV0dXJucyBMYWJlbCB0ZXh0IG9yIGVtcHR5IHN0cmluZ1xuICovXG5jb25zdCBnZXRBZGphY2VudExhYmVsID0gKGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFNlbGVjdEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KTogc3RyaW5nID0+IHtcbiAgbGV0IHByZXZTaWJsaW5nID0gaW5wdXQucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgd2hpbGUgKHByZXZTaWJsaW5nKSB7XG4gICAgaWYgKHByZXZTaWJsaW5nLnRhZ05hbWUgPT09ICdMQUJFTCcpIHtcbiAgICAgIHJldHVybiBwcmV2U2libGluZy50ZXh0Q29udGVudD8udHJpbSgpIHx8ICcnO1xuICAgIH1cbiAgICBwcmV2U2libGluZyA9IHByZXZTaWJsaW5nLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gIH1cbiAgcmV0dXJuICcnO1xufTtcbiIsIi8qKlxuICogUXVldWUgc3lzdGVtIGZvciBib3QgcHJldmVudGlvbiB3aXRoIGNvbmZpZ3VyYWJsZSByYXRlIGxpbWl0aW5nXG4gKiBcbiAqIEBkZXNjcmlwdGlvbiBNYW5hZ2VzIGV2ZW50IHF1ZXVpbmcgYW5kIHJhdGUgbGltaXRpbmcgdG8gcHJldmVudCBib3QtbGlrZSBiZWhhdmlvclxuICogQGF1dGhvciBBc3Npc3RhbnRcbiAqL1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVkRXZlbnQge1xuICBpZDogc3RyaW5nO1xuICBwYXlsb2FkOiBhbnk7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICByZXRyeUNvdW50OiBudW1iZXI7XG4gIG1heFJldHJpZXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWV1ZUNvbmZpZyB7XG4gIG1heEV2ZW50c1BlclNlY29uZDogbnVtYmVyO1xuICBtYXhSZXRyaWVzOiBudW1iZXI7XG4gIHJldHJ5RGVsYXlNczogbnVtYmVyO1xuICBtYXhRdWV1ZVNpemU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFdmVudCBxdWV1ZSBzeXN0ZW0gd2l0aCByYXRlIGxpbWl0aW5nIGZvciBib3QgcHJldmVudGlvblxuICovXG5leHBvcnQgY2xhc3MgRXZlbnRRdWV1ZSB7XG4gIHByaXZhdGUgcXVldWU6IFF1ZXVlZEV2ZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBwcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgY29uZmlnOiBRdWV1ZUNvbmZpZztcbiAgcHJpdmF0ZSBldmVudFRpbWVzOiBudW1iZXJbXSA9IFtdO1xuICBwcml2YXRlIGV2ZW50SWRDb3VudGVyOiBudW1iZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogUXVldWVDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIG1heEV2ZW50c1BlclNlY29uZDogY29uZmlnLm1heEV2ZW50c1BlclNlY29uZCB8fCA1LCAvLyBGaXhlZCByYXRlIGxpbWl0IGZvciBib3QgcHJldmVudGlvblxuICAgICAgbWF4UmV0cmllczogY29uZmlnLm1heFJldHJpZXMgfHwgMyxcbiAgICAgIHJldHJ5RGVsYXlNczogY29uZmlnLnJldHJ5RGVsYXlNcyB8fCAxMDAwLFxuICAgICAgbWF4UXVldWVTaXplOiBjb25maWcubWF4UXVldWVTaXplIHx8IDEwMCxcbiAgICB9O1xuICAgIFxuICAgIGxvZ2dlci5sb2coJ0V2ZW50UXVldWUgaW5pdGlhbGl6ZWQgd2l0aCBjb25maWc6JywgdGhpcy5jb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBldmVudCB0byBxdWV1ZSBmb3IgcHJvY2Vzc2luZ1xuICAgKiBcbiAgICogQHBhcmFtIHBheWxvYWQgLSBFdmVudCBwYXlsb2FkIHRvIGJlIHNlbnRcbiAgICogQHBhcmFtIG1heFJldHJpZXMgLSBNYXhpbXVtIG51bWJlciBvZiByZXRyeSBhdHRlbXB0cyBmb3IgdGhpcyBldmVudFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBldmVudCBpcyBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XG4gICAqL1xuICBhc3luYyBlbnF1ZXVlKHBheWxvYWQ6IGFueSwgbWF4UmV0cmllczogbnVtYmVyID0gdGhpcy5jb25maWcubWF4UmV0cmllcywgaW1tZWRpYXRlID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgZXZlbnQ6IFF1ZXVlZEV2ZW50ID0ge1xuICAgICAgICBpZDogYGV2ZW50XyR7Kyt0aGlzLmV2ZW50SWRDb3VudGVyfWAsXG4gICAgICAgI
2HBheWxvYWQsXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgbWF4UmV0cmllcyxcbiAgICAgIH07XG5cbiAgICAgIC8vIEFkZCByZXNvbHZlL3JlamVjdCBjYWxsYmFja3MgdG8gZXZlbnQgZm9yIHByb21pc2UgaGFuZGxpbmdcbiAgICAgIChldmVudCBhcyBhbnkpLnJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgKGV2ZW50IGFzIGFueSkucmVqZWN0ID0gcmVqZWN0O1xuXG4gICAgICAvLyBOYXZpZ2F0aW9uLXRyaWdnZXJpbmcgc3VibWlzc2lvbnMgbXVzdCBub3Qgd2FpdCBmb3IgYW4gaW4tZmxpZ2h0IHBhZ2Ugdmlldy5cbiAgICAgIC8vIEtlZXAgdGhlIHNoYXJlZCByYXRlIGxpbWl0LCBhbmQgcmV1c2Ugbm9ybWFsIHJldHJ5IGhhbmRsaW5nIG9uIGZhaWx1cmUuXG4gICAgICBpZiAoaW1tZWRpYXRlICYmIHRoaXMuY2FuU2VuZEV2ZW50KCkpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFdmVudFRpbWUoKTtcbiAgICAgICAgdGhpcy5zZW5kRXZlbnQoZXZlbnQpLnRoZW4ocmVzb2x2ZSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKG1heFJldHJpZXMgPD0gMCkge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXZlbnQucmV0cnlDb3VudCA9IDE7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlLnVuc2hpZnQoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnByb2Nlc3NpbmcpIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICAgICAgfSwgdGhpcy5jb25maWcucmV0cnlEZWxheU1zKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgcXVldWUgaXMgZnVsbFxuICAgICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID49IHRoaXMuY29uZmlnLm1heFF1ZXVlU2l6ZSkge1xuICAgICAgICBsb2dnZXIud2FybignUXVldWUgaXMgZnVsbCwgZHJvcHBpbmcgb2xkZXN0IGV2ZW50Jyk7XG4gICAgICAgIHRoaXMucXVldWUuc2hpZnQoKTsgLy8gUmVtb3ZlIG9sZGVzdCBldmVudFxuICAgICAgfVxuXG4gICAgICB0aGlzLnF1ZXVlLnB1c2goZXZlbnQpO1xuICAgICAgbG9nZ2VyLmxvZyhgRXZlbnQgJHtldmVudC5pZH0gYWRkZWQgdG8gcXVldWUuIFF1ZXVlIGxlbmd0aDogJHt0aGlzLnF1ZXVlLmxlbmd0aH1gKTtcblxuICAgICAgLy8gU3RhcnQgcHJvY2Vzc2luZyBpZiBub3QgYWxyZWFkeSBydW5uaW5nXG4gICAgICBpZiAoIXRoaXMucHJvY2Vzc2luZykge1xuICAgICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgcXVldWVkIGV2ZW50cyB3aXRoIHJhdGUgbGltaXRpbmdcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1F1ZXVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnByb2Nlc3NpbmcgfHwgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NpbmcgPSB0cnVlO1xuICAgIGxvZ2dlci5sb2coJ1N0YXJ0aW5nIHF1ZXVlIHByb2Nlc3NpbmcnKTtcblxuICAgIHdoaWxlICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5xdWV1ZVswXTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgd2UgY2FuIHNlbmQgdGhpcyBldmVudCAocmF0ZSBsaW1pdGluZylcbiAgICAgIGlmICh0aGlzLmNhblNlbmRFdmVudCgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIGV2ZW50IGZyb20gcXVldWUgYmVmb3JlIHByb2Nlc3NpbmdcbiAgICAgICAgICB0aGlzLnF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gUmVjb3JkIHRoZSBldmVudCB0aW1lIGZvciByYXRlIGxpbWl0aW5nXG4gICAgICAgICAgdGhpcy5yZWNvcmRFdmVudFRpbWUoKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBldmVudFxuICAgICAgICAgIGF3YWl0IHRoaXMuc2VuZEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICBcbiAgICAgICAgICBsb2dnZXIubG9nKGBFdmVudCAke2V2ZW50LmlkfSBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5YCk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZVxuICAgICAgaWYgKChldmVudCBhcyBhbnkpPy5yZXNvbHZlKSB7XG4gICAgICAgICAgICAoZXZlbnQgYXMgYW55KS5yZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgRXJyb3IgcHJvY2Vzc2luZyBldmVudCAke2V2ZW50LmlkfTpgLCBlcnJvcik7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gSGFuZGxlIHJldHJ5IGxvZ2ljXG4gICAgICAgICAgaWYgKChldmVudD8ucmV0cnlDb3VudCA/PyAwKSA8IChldmVudD8ubWF4UmV0cmllcyA/PyAwKSkge1xuICAgICAgICAgICAgZXZlbnQucmV0cnlDb3VudCsrO1xuICAgICAgICAgICAgbG9nZ2VyLmxvZyhgUmV0cnlpbmcgZXZlbnQgJHtldmVudC5pZH0gKGF0dGVtcHQgJHtldmVudC5yZXRyeUNvdW50fS8ke2V2ZW50Lm1heFJldHJpZXN9KWApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBZGQgYmFjayB0byBxdWV1ZSB3aXRoIGRlbGF5XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5xdWV1ZS51bnNoaWZ0KGV2ZW50KTtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnByb2Nlc3NpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzLmNvbmZpZy5yZXRyeURlbGF5TXMgKiBldmVudC5yZXRyeUNvdW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBFdmVudCAke2V2ZW50LmlkfSBmYWlsZWQgYWZ0ZXIgJHtldmVudC5tYXhSZXRyaWVzfSByZXRyaWVzYCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFJlamVjdCB0aGUgcHJvbWlzZVxuICAgICAgICAgICAgaWYgKChldmVudCBhcyBhbnkpPy5yZWplY3QpIHtcbiAgICAgICAgICAgICAgKGV2ZW50IGFzIGFueSkucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgI
2H1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdhaXQgYmVmb3JlIGNoZWNraW5nIGFnYWluXG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclJhdGVMaW1pdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgIGxvZ2dlci5sb2coJ1F1ZXVlIHByb2Nlc3NpbmcgY29tcGxldGVkJyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgd2UgY2FuIHNlbmQgYW4gZXZlbnQgYmFzZWQgb24gcmF0ZSBsaW1pdGluZ1xuICAgKiBcbiAgICogQHJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIGV2ZW50IGNhbiBiZSBzZW50XG4gICAqL1xuICBwcml2YXRlIGNhblNlbmRFdmVudCgpOiBib29sZWFuIHtcbiAgICB0aGlzLmNsZWFudXBPbGRFdmVudFRpbWVzKCk7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnRUaW1lcy5sZW5ndGggPCB0aGlzLmNvbmZpZy5tYXhFdmVudHNQZXJTZWNvbmQ7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIHRoZSBjdXJyZW50IHRpbWUgZm9yIHJhdGUgbGltaXRpbmcgY2FsY3VsYXRpb25zXG4gICAqL1xuICBwcml2YXRlIHJlY29yZEV2ZW50VGltZSgpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50VGltZXMucHVzaChEYXRlLm5vdygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZXZlbnQgdGltZXMgb2xkZXIgdGhhbiAxIHNlY29uZFxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbnVwT2xkRXZlbnRUaW1lcygpOiB2b2lkIHtcbiAgICBjb25zdCBvbmVTZWNvbmRBZ28gPSBEYXRlLm5vdygpIC0gMTAwMDtcbiAgICB0aGlzLmV2ZW50VGltZXMgPSB0aGlzLmV2ZW50VGltZXMuZmlsdGVyKHRpbWUgPT4gdGltZSA+IG9uZVNlY29uZEFnbyk7XG4gIH1cblxuICAvKipcbiAgICogV2FpdCBmb3IgcmF0ZSBsaW1pdCB0byBhbGxvdyBuZXh0IGV2ZW50XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JSYXRlTGltaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgd2FpdFRpbWUgPSB0aGlzLmNhbGN1bGF0ZVdhaXRUaW1lKCk7XG4gICAgbG9nZ2VyLmxvZyhgUmF0ZSBsaW1pdCByZWFjaGVkLCB3YWl0aW5nICR7d2FpdFRpbWV9bXNgKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZS
2hyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgd2FpdFRpbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgaG93IGxvbmcgdG8gd2FpdCBiZWZvcmUgbmV4dCBldmVudCBjYW4gYmUgc2VudFxuICAgKiBcbiAgICogQHJldHVybnMgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0XG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZVdhaXRUaW1lKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuZXZlbnRUaW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IG9sZGVzdEV2ZW50VGltZSA9IHRoaXMuZXZlbnRUaW1lc1swXTtcbiAgICBjb25zdCB0aW1lU2luY2VPbGRlc3QgPSBEYXRlLm5vdygpIC0gb2xkZXN0RXZlbnRUaW1lO1xuICAgIGNvbnN0IHRpbWVUb1dhaXQgPSBNYXRoLm1heCgwLCAxMDAwIC0gdGltZVNpbmNlT2xkZXN0KTtcbiAgICBcbiAgICByZXR1cm4gdGltZVRvV2FpdCArIDEwOyAvLyBBZGQgc21hbGwgYnVmZmVyXG4gIH1cblxuICAvKipcbiAgICogU2VuZCBldmVudCB1c2luZyBwcm92aWRlZCBzZW5kZXIgZnVuY3Rpb25cbiAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4gb3IgaGF2ZSBzZW5kZXIgZnVuY3Rpb24gaW5qZWN0ZWRcbiAgICogXG4gICAqIEBwYXJhbSBfZXZlbnQgLSBFdmVudCB0byBzZW5kXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNlbmRFdmVudChfZXZlbnQ6IFF1ZXVlZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVGhpcyB3aWxsIGJlIGltcGxlbWVudGVkIGJ5IHRoZSBBcGlDbGllbnRcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlbmRFdmVudCBtZXRob2Qgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBldmVudCBzZW5kZXIgZnVuY3Rpb25cbiAgICogXG4gICAqIEBwYXJhbSBzZW5kZXIgLSBGdW5jdGlvbiB0byBzZW5kIGV2ZW50c1xuICAgKi9cbiAgc2V0U2VuZGVyKHNlbmRlcjogKHBheWxvYWQ6IGFueSkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICAgIHRoaXMuc2VuZEV2ZW50ID0gYXN5bmMgKGV2ZW50OiBRdWV1ZWRFdmVudCkgPT4ge1xuICAgICAgYXdhaXQgc2VuZGVyKGV2ZW50LnBheWxvYWQpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgcXVldWUgc3RhdHVzXG4gICAqIFxuICAgKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBxdWV1ZSBzdGF0aXN0aWNzXG4gICAqL1xuICBnZXRTdGF0dXMoKToge1xuICAgIHF1ZXVlTGVuZ3RoOiBudW1iZXI7XG4gICAgcHJvY2Vzc2luZzogYm9vbGVhbjtcbiAgICBldmVudHNJbkxhc3RTZWNvbmQ6IG51bWJlcjtcbiAgICBtYXhFdmVudHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgfSB7XG4gICAgdGhpcy5jbGVhbnVwT2xkRXZlbnRUaW1lcygpO1xuICAgIHJldHVybiB7XG4gICAgICBxdWV1ZUxlbmd0aDogdGhpcy5xdWV1ZS5sZW5ndGgsXG4gICAgICBwcm9jZXNzaW5nOiB0aGlzLnByb2Nlc3NpbmcsXG4gICAgICBldmVudHNJbkxhc3RTZWNvbmQ6IHRoaXMuZXZlbnRUaW1lcy5sZW5ndGgsXG4gICAgICBtYXhFdmVudHNQZXJTZWNvbmQ6IHRoaXMuY29uZmlnLm1heEV2ZW50c1BlclNlY29uZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBldmVudHMgZnJvbSBxdWV1ZVxuICAgKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5xdWV1ZS5mb3JFYWNoKGV2ZW50ID0+IHtcbiAgICAgIGlmICgoZXZlbnQgYXMgYW55KT8ucmVqZWN0KSB7XG4gICAgICAgIChldmVudCBhcyBhbnkpLnJlamVjdChuZXcgRXJyb3IoJ1F1ZXVlIGNsZWFyZWQnKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMuZXZlbnRUaW1lcyA9IFtdO1xuICAgIGxvZ2dlci5sb2coJ1F1ZXVlIGNsZWFyZWQnKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgZ2V0Rm9ybUlkZW50aWZpZXIsIGdldFVzZXJEYXRhLCBnZXREZXZpY2VUeXBlLCBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb25UaW1pbmcsIFRyYWNraW5nQ29udGV4dCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFNlbmRzIHRpbWUgc3BlbnQgZXZlbnQgdG8gdGhlIHRyYWNraW5nIEFQSVxuICovXG5leHBvcnQgY29uc3Qgc2VuZFRpbWVTcGVudEV2ZW50ID0gKHRpbWluZzogU2Vzc2lvblRpbWluZywgY29udGV4dDogVHJhY2tpbmdDb250ZXh0KTogdm9pZCA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdXNlckRhdGEgPSBnZXRVc2VyRGF0YSgpO1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICB0eXBlOiAnZXh0ZXJuYWxfcGFnZV90aW1lX3NwZW50JyxcbiAgICAgIHRpbWVzdGFtcDogdGltaW5nLnNlc3Npb25FbmQsXG4gICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgcmVmZXJyZXI6IGRvY3VtZW50LnJlZmVycmVyLFxuICAgICAgdGl0bGU6IGRvY3VtZW50LnRpdGxlLFxuICAgICAgcGF0aDogd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgdXNlckFnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxuICAgICAgc2Vzc2lvbklkOiBjb250ZXh0LnNlc3Npb25JZCxcbiAgICAgIHRyYWNraW5nSWQ6IGNvbnRleHQudHJhY2tpbmdJZCxcbiAgICAgIGNvbnRhY3RJZDogY29udGV4dC5jb250YWN0SWQgfHwgdXNlckRhdGE/LmNvbnRhY3RJZCxcbiAgICAgIHVzZXJJZDogY29udGV4dC51c2VySWQgfHwgdXNlckRhdGE/LnVzZXJJZCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgc2Vzc2lvblN0YXJ0OiB0aW1pbmcuc2Vzc2lvblN0YXJ0LFxuICAgICAgICBzZXNzaW9uRW5kOiB0aW1pbmcuc2Vzc2lvbkVuZCxcbiAgICAgICAgdGltZVNwZW50TXM6IHRpbWluZy50aW1lU3BlbnRNcyxcbiAgICAgICAgZm9ybUlkZW50aWZpZXI6IGdldEZvcm1JZGVudGlmaWVyKCksXG4gICAgICAgIGRldmljZVR5cGU6IGdldERldmljZVR5cGUoKSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7Y29udGV4dC5hcGlFbmRwb2ludH0vZXh0ZXJuYWwtdHJhY2tpbmcvZXZlbnRzYDtcblxuICAgIGZldGNoKGVuZHBvaW50LCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXG4gICAgICBrZWVwYWxpdmU6IHRydWUsXG4gICAgfSkuY2F0Y2goKGVycikgPT4gbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2VuZCB0aW1lIHNwZW50IGV2ZW50JywgZXJyKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGlzcGF0Y2ggdGltZSBzcGVudCBldmVudCcsIGVycm9yKTtcbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VUkwgPSBleHBvcnRzLkROUyA9IGV4cG9ydHMuc3RyaW5nVG9CeXRlcyA9IHZvaWQgMDtcbmNvbnN0IHBhcnNlX2pzXzEgPSByZXF1aXJlKFwiLi9wYXJzZS5qc1wiKTtcbmNvbnN0IHN0cmluZ2lmeV9qc18xID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhzdHIpIHtcbiAgICBzdHIgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7XG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShzdHIubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgICAgICBieXRlc1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXM7XG59XG5leHBvcnRzLnN0cmluZ1RvQnl0ZXMgPSBzdHJpbmdUb0J5dGVzO1xuZXhwb3J0cy5ETlMgPSAnNmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JztcbmV4cG9ydHMuVVJMID0gJzZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5mdW5jdGlvbiB2MzUodmVyc2lvbiwgaGFzaCwgdmFsdWUsIG5hbWVzcGFjZSwgYnVmLCBvZmZzZXQpIHtcbiAgICBjb25zdCB2YWx1ZUJ5dGVzID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHN0cmluZ1RvQnl0ZXModmFsdWUpIDogdmFsdWU7XG4gICAgY29uc3QgbmFtZXNwYWNlQnl0ZXMgPSB0eXBlb2YgbmFtZXNwYWNlID09PSAnc3RyaW5nJyA/ICgwLCBwYXJzZV9qc18xLmRlZmF1bHQpKG5hbWVzcGFjZSkgOiBuYW1lc3BhY2U7XG4gICAgaWYgKHR5cGVvZiBuYW1lc3BhY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG5hbWVzcGFjZSA9ICgwLCBwYXJzZV9qc18xLmRlZmF1bHQpKG5hbWVzcGFjZSk7XG4gICAgfVxuICAgIGlmIChuYW1lc3BhY2U/Lmxlbmd0aCAhPT0gMTYpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdOYW1lc3BhY2UgbXVzdCBiZSBhcnJheS1saWtlICgxNiBpdGVyYWJsZSBpbnRlZ2VyIHZhbHVlcywgMC0yNTUpJyk7XG4gICAgfVxuICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KDE2ICsgdmFsdWVCeXRlcy5sZW5ndGgpO1xuICAgIGJ5dGVzLnNldChuYW1lc3BhY2VCeXRlcyk7XG4gICAgYnl0ZXMuc2V0KHZhbHVlQnl0ZXMsIG5hbWVzcGFjZUJ5dGVzLmxlbmd0aCk7XG4gICAgYnl0ZXMgPSBoYXNoKGJ5dGVzKTtcbiAgICBieXRlc1s2XSA9IChieXRlc1s2XSAmIDB4MGYpIHwgdmVyc2lvbjtcbiAgICBieXRlc1s4XSA9IChieXRlc1s4XSAmIDB4M2YpIHwgMHg4MDtcbiAgICBpZiAoYnVmKSB7XG4gICAgICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IGJ5dGVzW2ldO1xuICAgICAgICB9XG4gICAgICAgI
2HJldHVybiBidWY7XG4gICAgfVxuICAgIHJldHVybiAoMCwgc3RyaW5naWZ5X2pzXzEudW5zYWZlU3RyaW5naWZ5KShieXRlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB2MzU7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Nik7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsInRoaXMiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwidW5zYWZlU3RyaW5naWZ5IiwidmFsaWRhdGVfanNfMSIsImJ5dGVUb0hleCIsImkiLCJwdXNoIiwidG9TdHJpbmciLCJzbGljZSIsImFyciIsIm9mZnNldCIsInRvTG93ZXJDYXNlIiwidXVpZCIsImRlZmF1bHQiLCJUeXBlRXJyb3IiLCJUaW1lT25QYWdlVHJhY2tlciIsInN0YXJ0VGltZVRyYWNraW5nIiwidHJhY2tlciIsIndpbmRvdyIsImludGVydmFsSWQiLCJzZXRJbnRlcnZhbCIsImNvbnRleHQiLCJnZXRUcmFja2luZ0NvbnRleHQiLCJjbGVhckludGVydmFsIiwidGltZVRyYWNrZXIiLCJ0aW1pbmciLCJzZW5kVGltZVNwZW50RXZlbnQiLCJ3IiwiR0xPQkFMX1RSQUNLSU5HX0tFWSIsImVycm9yIiwibG9nZ2VyIiwiaXNHcmF2aXR5Rm9ybXNGaWVsZCIsImlzQ29tcG91bmRGaWVsZCIsImdldCIsImdldE1haW5MYWJlbCIsImdldFN1YkxhYmVsIiwiZ2V0Q29tYmluZWRMYWJlbCIsImdldENvbnRhaW5lckxhYmVsIiwiZ2V0RmllbGRzZXRMZWdlbmQiLCJjbGVhbkxhYmVsVGV4dCIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwic3RhdGUiLCJpbml0aWFsaXplZCIsInRyYWNraW5nSWQiLCJhcGlDbGllbnQiLCJBcGlDbGllbnQiLCJhcGlFbmRwb2ludCIsImRlYnVnIiwibG9nIiwiaW5pdCIsIndhcm4iLCJzZXNzaW9uSWQiLCJnZW5lcmF0ZVNlc3Npb25JZCIsInN0b3JlU2Vzc2lvbklkSW5Db29raWUiLCJzZXRUcmFja2luZ0NvbnRleHQiLCJzdGFydFBhZ2VUcmFja2luZyIsImFzeW5jIiwiZXZlbnQiLCJwcm9wZXJ0aWVzIiwic2VuZEV2ZW50Iiwic3RhcnRGb3JtVHJhY2tpbmciLCJzdWJtaXRGb3JtIiwidXNlcklkIiwidXNlclByb3BlcnRpZXMiLCJkZXZpY2VUeXBlIiwiZ2V0RGV2aWNlVHlwZSIsImNyZWF0ZVRyYWNrZXIiLCJ2YWxpZGF0ZUNvbmZpZyIsIkVycm9yIiwiY3JpdGljYWwiLCJFeHRlcm5hbFRyYWNrZXIiLCJpbml0aWFsaXplRnJvbVNjcmlwdCIsImluaXRpYWxpemUiLCJ2ZXJzaW9uIiwidmFsaWRhdGUiLCJ2NyIsInY2VG9WMSIsInY2IiwidjUiLCJ2NCIsInYzIiwidjFUb1Y2IiwidjEiLCJzdHJpbmdpZnkiLCJwYXJzZSIsIk5JTCIsIk1BWCIsIm1heF9qc18xIiwiZW51bWVyYWJsZSIsIm5pbF9qc18xIiwicGFyc2VfanNfMSIsInN0cmluZ2lmeV9qc18xIiwidjFfanNfMSIsInYxVG9WNl9qc18xIiwidjNfanNfMSIsInY0X2pzXzEiLCJ2NV9qc18xIiwidjZfanNfMSIsInY2VG9WMV9qc18xIiwidjdfanNfMSIsInZlcnNpb25fanNfMSIsIklOQUNUSVZJVFlfTVMiLCJBQ1RJVklUWV9FVkVOVFMiLCJvbkNvbXBsZXRlIiwiYWN0aXZlVGltZU1zIiwidXBkYXRlVGltZXIiLCJpc0lkbGUiLCJkZXN0cm95ZWQiLCJmbHVzaGVkIiwic2Vzc2lvbkV4cGlyZWQiLCJvbkFjdGl2aXR5Iiwibm93IiwiRGF0ZSIsInNlc3Npb25TdGFydCIsImxhc3RUaWNrIiwibGFzdEFjdGl2aXR5QXQiLCJvblZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudCIsImhpZGRlbiIsImNoZWNrVGltZW91dCIsIm9uVW5sb2FkIiwiZW1pdFVwZGF0ZSIsInRpY2siLCJvblNlc3Npb25Db21wbGV0ZSIsImJpbmQiLCJmb3JFYWNoIiwiZXZ0IiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhc3NpdmUiLCJjYXB0dXJlIiwic2Vzc2lvbkVuZCIsInRpbWVTcGVudE1zIiwiTWF0aCIsIm1heCIsInJvdW5kIiwiZGVzdHJveSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJwYXJzZUZvcm1EYXRhIiwiY29udGFpbnNQYXNzd29yZCIsImlzUGFzc3dvcmRMaWtlRmllbGQiLCJnZXRDb29raWUiLCJuYW1lIiwicGFydHMiLCJjb29raWUiLCJzcGxpdCIsImxlbmd0aCIsInBvcCIsInNoaWZ0IiwiZSIsInNldENvb2tpZSIsImRheXMiLCJkYXRlIiwic2V0VGltZSIsImdldFRpbWUiLCJleHBpcmVzIiwidG9VVENTdHJpbmciLCJzdG9yZVVzZXJEYXRhIiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJKU09OIiwiZ2V0VXNlckRhdGEiLCJnZXRJdGVtIiwicGFyc2VkIiwiY2lkIiwiY3VzdG9tZXJfaWQiLCJub3JtYWxpem
2VkIiwiU3RyaW5nIiwidHJpbSIsImNvbnRhY3RJZCIsInNlc3Npb25TY29wZUlkIiwiY29va2llTmFtZSIsInNlc3Npb25TdG9yYWdlIiwiYXBpIiwiZ2V0U2Vzc2lvbklkRnJvbUNvb2tpZSIsImNvb2tpZVJlc3VsdCIsInNlc3Npb25TdG9yYWdlUmVzdWx0IiwiZ2V0RnJvbVN0b3JhZ2UiLCJrZXkiLCJzZXRJblN0b3JhZ2UiLCJkZWJvdW5jZSIsImZ1bmMiLCJ3YWl0IiwidGltZW91dCIsImFyZ3MiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwibmF2IiwibmF2aWdhdG9yIiwidW5kZWZpbmVkIiwidWEiLCJ1c2VyQWdlbnQiLCJtYXhUb3VjaFBvaW50cyIsInVzZXJBZ2VudERhdGEiLCJpc01vYmlsZUhpbnQiLCJtb2JpbGUiLCJpbmNsdWRlcyIsImdldFBhZ2VNZXRhZGF0YSIsInRpdGxlIiwidXJsIiwibG9jYXRpb24iLCJocmVmIiwicGF0aCIsInBhdGhuYW1lIiwicmVmZXJyZXIiLCJnZXRMb2NhbFRpbWVab25lIiwiSW50bCIsIkRhdGVUaW1lRm9ybWF0IiwicmVzb2x2ZWRPcHRpb25zIiwidGltZVpvbmUiLCJnZXRMb2NhbFRpbWVab25lT2Zmc2V0IiwibWF0Y2giLCJnZXRGb3JtYXR0ZWRUaW1lem9uZSIsIkNVU1RPTV9GT1JNX0NPTlRFWFRfU0VMRUNUT1JTIiwicGlja0Zvcm1BdHRyIiwiZm9ybSIsImF0dHIiLCJnZXRBdHRyaWJ1dGUiLCJleHRyYWN0Rm9ybVRpdGxlIiwid3JhcHBlciIsImNsb3Nlc3QiLCJ0aXRsZUVsIiwicXVlcnlTZWxlY3RvciIsInRleHRDb250ZW50IiwiaW50ZXJuYWxIZWFkaW5nIiwiZGF0YVRpdGxlIiwiZ2V0Rm9ybUlkZW50aWZpZXIiLCJ0YXJnZXRGb3JtIiwiSFRNTEZvcm1FbGVtZW50Iiwic29tZSIsInNlbCIsImdldEV4cGxpY2l0Rm9ybUF0dHJpYnV0ZXNOYW1lRmlyc3QiLCJleHBsaWNpdCIsImdldEV4cGxpY2l0Rm9ybUF0dHJpYnV0ZXNJZEZpcnN0IiwidjFCeXRlcyIsInY2Qnl0ZXMiLCJVaW50OEFycmF5Iiwib2YiLCJuYXRpdmVfanNfMSIsInJuZ19qc18xIiwib3B0aW9ucyIsImJ1ZiIsInJhbmRvbVVVSUQiLCJybmRzIiwicmFuZG9tIiwicm5nIiwiUmFuZ2VFcnJvciIsImdldFJhbmRvbVZhbHVlcyIsInJuZHM4IiwiY3J5cHRvIiwidXBkYXRlVjdTdGF0ZSIsIl9zdGF0ZSIsIm1zZWNzIiwic2VxIiwidjdCeXRlcyIsImJ5dGVzIiwiZ2V0T3V0cHV0TGVuZ3RoIiwiaW5wdXRMZW5ndGg4Iiwic2FmZUFkZCIsIngiLCJ5IiwibHN3IiwibWQ1Y21uIiwicSIsImEiLCJiIiwicyIsInQiLCJudW0iLCJjbnQiLCJtZDVmZiIsImMiLCJkIiwibWQ1Z2ciLCJtZDVoaCIsIm1kNWlpIiwiaW5wdXQiLCJ1aW50MzJUb1VpbnQ4IiwibGVuIiwieHBhZCIsIlVpbnQzMkFycmF5IiwiZmlsbCIsInNldCIsIm9sZGEiLCJvbGRiIiwib2xkYyIsIm9sZGQiLCJ3b3Jkc1RvTWQ1Iiwib3V0cHV0IiwidWludDhUb1VpbnQzMiIsIl92NiIsInZhbCIsImxhYmVsVGV4dCIsInR5cGUiLCJpZCIsInBsYWNlaG9sZGVyIiwidXBkYXRlVjFTdGF0ZSIsIm5zZWNzIiwibm9kZSIsImNsb2Nrc2VxIiwidGwiLCJ0bWgiLCJuIiwiaXNWNiIsIm9wdGlvbnNLZXlzIiwia2V5cyIsImRldGVybWluZUFwaUVuZHBvaW50IiwicXVldWVDb25maWciLCJtYXhFdmVudHNQZXJTZWNvbmQiLCJtYXhSZXRyaWVzIiwicmV0cnlEZWxheU1zIiwibWF4UXVldWVTaXplIiwiZXZlbnRRdWV1ZSIsIkV2ZW50UXVldWUiLCJzZXRTZW5kZXIiLCJwYXlsb2FkIiwic2VuZEV2ZW50RGlyZWN0bHkiLCJjdXJyZW50U2NyaXB0IiwiU0NSSVBUX0JBU0VOQU1FIiwic3JjIiwic2NyaXB0U3JjIiwiQVBJX0VORFBPSU5UUyIsInN0YWdpbmciLCJsb2NhbCIsInByb2R1Y3Rpb24iLCJ1c2VyRGF0YSIsImVuaGFuY2VkRXZlbnQiLCJFdmVudFR5cGUiLCJGT1JNX1NVQk1JU1NJT04iLCJmb3JtRXZlbnQiLCJlbmhhbmNlZEZvcm1FdmVudCIsImZvcm1EYXRhIiwiVGltZXpvbmUiLCJ0aW1lem9uZSIsImVucXVldWUiLCJlbmRwb2ludCIsImZpbGVzIiwiRm9ybURhdGEiLCJldmVudFdpdGhvdXRGaWxlcyIsImFwcGVuZCIsImZpZWxkTmFtZSIsIkFycmF5IiwiaXNBcnJheSIsImZpbGUiLCJGaWxlIiwicmVzcG9uc2UiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJvayIsInN0YXR1c1RleHQiLCJrZWVwYWxpdmUiLCJCbG9iIiwic2l6ZSIsImhlYWRlcnMiLCJnZXRDb25maWdGcm9tU2NyaXB0QXR0cmlidXRlcyIsIlVSTCIsIkROUyIsInNoYTFfanNfMSIsInYzNV9qc18xIiwidjM1X2pzXzIiLCJuYW1lc3BhY2UiLCJtZDVfanNfMSIsIm1lc3NhZ2UiLCJpc0RlYnVnTW9kZSIsImNvbnNvbGUiLCJMT0dHRVJfUFJFRklYIiwiTE9HR0VSX0VSUk9SX1BSRUZJWCIsIkJvb2xlYW4iLCJ0cmFja2VkRm9ybXMiLCJXZWFrU2V0IiwiZm9ybU9ic2VydmVyIiwiY2FsbGJhY2siLCJtZXRhZGF0YSIsImZvcm1JZCIsIlNDUklQVF9QQUdFX1ZJRVciLCJ0aW1lc3RhbXAiLCJzdWJtaXNzaW9uSGFuZGxlcnMiLCJXZWFrTWFwIiwiZ3Jhdml0eUZpbHRlclJlZ2lzdGVyZWQiLCJyZWdpc3RlckdyYXZpdHlGaWx0ZXIiLCJnZm9ybSIsInV0aWxzIiwiYWRkQXN5bmNGaWx0ZXIiLCJzdWJtaXNzaW9uVHlwZSIsImF0dGFjaEZvcm1MaXN0ZW5lciIsImhhcyIsImNsaWNrRmFsbGJhY2tUaW1lciIsImZvcm1TdWJtaXR0ZWQiLCJjbGlja1BlbmRpbmciLCJjbGlja1N1Ym1pc3Npb25DYXB0dXJlZCIsImhhbmRsZVN1Ym1pc3Npb24iLCJhbHJlYWR5Q2FwdHVyZWQiLCJoYW5kbGVGb3JtU3VibWl0Iiwic3VibWl0QnV0dG9ucyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJidXR0b24iLCJhZGQiLCJmb3JtSWRlbnRpZmllciIsInRyYWNrRm9ybXNJbkVsZW1lbnQiLCJmb3JtcyIsImluaXRPYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJtdXRhdGlvbiIsImZyb20iLCJhZGRlZE5vZGVzIiwiRWxlbWVudCIsIm5lc3RlZEZvcm0iLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsImZpZWxkRGF0YSIsImZpZWxkTGFiZWxzIiwidHJhY2tpbmdFdmVudCIsImZvcm1MYWJlbHMiLCJyZWdleF9qc18xIiwidGVzdCIsInBhcnNlSW50IiwiR0ZJRUxEX0NMQVNTIiwiR0ZJRUxEX0xBQkVMX0NMQVNTIiwiUkVRVUlSRURfSU5ESUNBVE9SX1JFR0VYIiwiQVNURVJJU0tfSU
25ESUNBVE9SX1JFR0VYIiwiZWxlbWVudCIsInRleHQiLCJyZXBsYWNlIiwiZ2ZpZWxkIiwiZmllbGRzZXQiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImxlZ2VuZCIsImxhYmVsRWwiLCJzdWJMYWJlbEVsIiwic3ViTGFiZWwiLCJmaWVsZENvbnRhaW5lciIsImxhYmVsIiwidiIsImYiLCJ6IiwiUk9UTCIsIksiLCJIIiwibmV3Qnl0ZXMiLCJsIiwiTiIsImNlaWwiLCJNIiwiaiIsInBvdyIsImZsb29yIiwiVyIsIlQiLCJzY3JpcHRDb25maWciLCJmaWxlc0J5RmllbGQiLCJTZXQiLCJfIiwidmFsdWVzIiwiZ2V0QWxsIiwiY29sbGVjdGVkIiwiayIsImdldEFsbFZhbHVlcyIsInNlbGVjdG9yIiwiQ1NTIiwiZXNjYXBlIiwiZXNjYXBlQ3NzIiwiZWxlbWVudHMiLCJmaXJzdEVsIiwidGFnIiwidGFnTmFtZSIsImlzTXVsdGlwbGVTZWxlY3QiLCJtdWx0aXBsZSIsInJlc29sdmVPcHRpb25UZXh0IiwiZWwiLCJyYXciLCJjbG9uZSIsImNsb25lTm9kZSIsInJlbW92ZSIsImZvckxhYmVsIiwibmV4dCIsIm5leHRTaWJsaW5nIiwicmVzb2x2ZVNlbGVjdFRleHQiLCJvcHQiLCJmaW5kIiwibyIsIm1hcCIsImZpbGVMaXN0IiwibWV0YUxpc3QiLCJmaWxlbmFtZSIsIm1hcEZpbGUiLCJzdHIiLCJjaGVja2VkIiwiZmlsdGVyIiwiYWxsQ2hlY2tib3hlcyIsInNlZW4iLCJkaXNhYmxlZCIsIm11bHRpU2VsZWN0cyIsInN0YXJ0c1dpdGgiLCJkYXRhVXJsIiwiaW5wdXRzIiwic2hvdWxkSW5jbHVkZUZpZWxkIiwiZXh0cmFjdEZpZWxkTGFiZWwiLCJpc0ZpZWxkVmlzaWJsZSIsImNvbXB1dGVkU3R5bGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiZGlzcGxheSIsInZpc2liaWxpdHkiLCJvcGFjaXR5IiwiZ3Jhdml0eUZvcm1zTGFiZWwiLCJnZXRHcmF2aXR5Rm9ybXNDb21iaW5lZExhYmVsIiwiZ2V0TGFiZWxCeUZvckF0dHJpYnV0ZSIsInBhcmVudExhYmVsIiwiZ2V0UGFyZW50TGFiZWwiLCJhZGphY2VudExhYmVsIiwiZ2V0QWRqYWNlbnRMYWJlbCIsImNvbnRhaW5lckxhYmVsIiwiR3Jhdml0eUZvcm1zIiwiYXNzb2NpYXRlZExhYmVsIiwiY2xvbmVkTGFiZWwiLCJjaGlsZElucHV0cyIsInByZXZTaWJsaW5nIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsInF1ZXVlIiwicHJvY2Vzc2luZyIsImV2ZW50VGltZXMiLCJldmVudElkQ291bnRlciIsImltbWVkaWF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmV0cnlDb3VudCIsImNhblNlbmRFdmVudCIsInJlY29yZEV2ZW50VGltZSIsInRoZW4iLCJ1bnNoaWZ0IiwicHJvY2Vzc1F1ZXVlIiwid2FpdEZvclJhdGVMaW1pdCIsImNsZWFudXBPbGRFdmVudFRpbWVzIiwib25lU2Vjb25kQWdvIiwidGltZSIsIndhaXRUaW1lIiwiY2FsY3VsYXRlV2FpdFRpbWUiLCJvbGRlc3RFdmVudFRpbWUiLCJ0aW1lU2luY2VPbGRlc3QiLCJfZXZlbnQiLCJzZW5kZXIiLCJnZXRTdGF0dXMiLCJxdWV1ZUxlbmd0aCIsImV2ZW50c0luTGFzdFNlY29uZCIsImNsZWFyIiwiY2F0Y2giLCJlcnIiLCJzdHJpbmdUb0J5dGVzIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjaGFyQ29kZUF0IiwiaGFzaCIsInZhbHVlQnl0ZXMiLCJuYW1lc3BhY2VCeXRlcyIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19leHBvcnRzX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiY2FsbCJdLCJzb3VyY2VSb290IjoiIn0=
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.