PageSourceSearch

https://links.tradiewebguys.com.au/js/external-tracking.js

js tradiewebguys.com.au collected 2026-10-04 05:23:44 UTC 266,789 bytes, 2 lines download raw bytes

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),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=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!r.ok)throw new Error(`Failed to send event: ${r.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)=>
1{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);const 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=t=>{if(o.has(t))return;let r=!1;const n=()=>{r||(r=!0,i.logger.log("Form submit event captured"),a(t,e),setTimeout((()=>{r=!1}),1e3))};t.addEventListener("submit",n,{capture:!0});const s=t.querySelectorAll('button[type="submit"], input[type="submit"], [data-submission-type="submit"]');s.forEach((e=>{e.addEventListener("click",(()=>{i.logger.log("Submit button click detected"),setTimeout(n,50)}),{capture:!0})})),o.add(t);const l=(0,i.getFormIdentifier)(t)||"Unidentified Form";i.logger.log("Tracking form:",l,`(${s.length} submit button(s))`)},r=e=>{const r=e.querySelectorAll("form");i.logger.log(`Found ${r.length} form(s) in document`),r.forEach((e=>t(e)))},n=()=>{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 t(e)):void e.querySelectorAll("form").forEach((e=>{i.logger.log("Nested dynamic form detected via MutationObserver"),t(e)}))}))}))})),s.observe(document.body,{childList:!0,subtree:!0}),i.logger.log("MutationObserver initialized for dynamic form detection"))};r(document),document.body?n():document.addEventListener("DOMContentLoaded",(()=>{r(document),n()}))};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)=>{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)=>
1{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){return new Promise(((r,i)=>{this.queue.length>=this.config.maxQueueSize&&(n.logger.warn("Queue is full, dropping oldest event"),this.queue.shift());const o={id:"event_"+ ++this.eventIdCounter,payload:e,timestamp:Date.now(),retryCount:0,maxRetries:t};o.resolve=r,o.reject=i,this.queue.push(o),n.logger.log(`Event ${o.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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QUFHQyxFQUFHTixFQUFFL1AsRUFBSSxHQUFJLEdBQUksV0FDcENxUSxFQUFJSyxFQUFNTCxFQUFHTSxFQUFHQyxFQUFHUixFQUFHTCxFQUFFL1AsRUFBSSxHQUFJLElBQUssWUFDckNvUSxFQUFJTSxFQUFNTixFQUFHQyxFQUFHTSxFQUFHQyxFQUFHYixFQUFFL1AsRUFBSSxHQUFJLEdBQUksV0FDcEM0USxFQUFJRixFQUFNRSxFQUFHUixFQUFHQyxFQUFHTSxFQUFHWixFQUFFL1AsRUFBSSxHQUFJLEdBQUksWUFDcEMyUSxFQUFJRCxFQUFNQyxFQUFHQyxFQUFHUixFQUFHQyxFQUFHTixFQUFFL1AsRUFBSSxHQUFJLElBQUssWUFDckNxUSxFQUFJSyxFQUFNTCxFQUFHTSxFQUFHQyxFQUFHUixFQUFHTCxFQUFFL1AsRUFBSSxHQUFJLElBQUssVUFDckNvUSxFQUFJTSxFQUFNTixFQUFHQyxFQUFHTSxFQUFHQyxFQUFHYixFQUFFL1AsRUFBSSxHQUFJLEVBQUcsWUFDbkM0USxFQUFJRixFQUFNRSxFQUFHUixFQUFHQyxFQUFHTSxFQUFHWixFQUFFL1AsRUFBSSxHQUFJLElBQUssWUFDckMyUSxFQUFJRCxFQUFNQyxFQUFHQyxFQUFHUixFQUFHQyxFQUFHTixFQUFFL1AsRUFBSSxJQUFLLElBQUssT0FDdENxUSxFQUFJSyxFQUFNTCxFQUFHTSxFQUFHQyxFQUFHUixFQUFHTCxFQUFFL1AsRUFBSSxJQUFLLElBQUssWUFDdENvUSxFQUFJTSxFQUFNTixFQUFHQyxFQUFHTSxFQUFHQyxFQUFHYixFQUFFL1AsRUFBSSxJQUFLLEVBQUcsWUFDcEM0USxFQUFJRixFQUFNRSxFQUFHUixFQUFHQyxFQUFHTSxFQUFHWixFQUFFL1AsRUFBSSxJQUFLLElBQUssVUFDdEMyUSxFQUFJRCxFQUFNQyxFQUFHQyxFQUFHUixFQUFHQyxFQUFHTixFQUFFL1AsRUFBSSxJQUFLLElBQUssWUFDdENxUSxFQUFJSyxFQUFNTCxFQUFHTSxFQUFHQyxFQUFHUixFQUFHTCxFQUFFL1AsRUFBSSxJQUFLLEdBQUksWUFDckNvUSxFQUFJUyxFQUFNVCxFQUFHQyxFQUFHTSxFQUFHQyxFQUFHYixFQUFFL1AsRUFBSSxHQUFJLEdBQUksV0FDcEM0USxFQUFJQyxFQUFNRCxFQUFHUixFQUFHQyxFQUFHTSxFQUFHWixFQUFFL1AsRUFBSSxHQUFJLEdBQUksWUFDcEMyUSxFQUFJRSxFQUFNRixFQUFHQyxFQUFHUixFQUFHQyxFQUFHTixFQUFFL1AsRUFBSSxJQUFLLEdBQUksV0FDckNxUSxFQUFJUSxFQUFNUixFQUFHTSxFQUFHQyxFQUFHUixFQUFHTCxFQUFFL1AsR0FBSSxJQUFLLFdBQ2pDb1EsRUFBSVMsRUFBTVQsRUFBR0MsRUFBR00sRUFBR0MsRUFBR2IsRUFBRS9QLEVBQUksR0FBSSxHQUFJLFdBQ3BDNFEsRUFBSUMsRUFBTUQsRUFBR1IsRUFBR0MsRUFBR00sRUFBR1osRUFBRS9QLEVBQUksSUFBSyxFQUFHLFVBQ3BDMlEsRUFBSUUsRUFBTUYsRUFBR0MsRUFBR1IsRUFBR0MsRUFBR04sRUFBRS9QLEVBQUksSUFBSyxJQUFLLFdBQ3RDcVEsRUFBSVEsRUFBTVIsRUFBR00sRUFBR0MsRUFBR1IsRUFBR0wsRUFBRS9QLEVBQUksR0FBSSxJQUFLLFdBQ3JDb1EsRUFBSVMsRUFBTVQsRUFBR0MsRUFBR00sRUFBR0MsRUFBR2IsRUFBRS9QLEVBQUksR0FBSSxFQUFHLFdBQ25DNFEsRUFBSUMsRUFBTUQsRUFBR1IsRUFBR0MsRUFBR00sRUFBR1osRUFBRS9QLEVBQUksSUFBSyxHQUFJLFlBQ3JDMlEsRUFBSUUsRUFBTUYsRUFBR0MsRUFBR1IsRUFBR0MsRUFBR04sRUFBRS9QLEVBQUksR0FBSSxJQUFLLFdBQ3JDcVEsRUFBSVEsRUFBTVIsRUFBR00sRUFBR0MsRUFBR1IsRUFBR0wsRUFBRS9QLEVBQUksR0FBSSxHQUFJLFlBQ3BDb1EsRUFBSVMsRUFBTVQsRUFBR0MsRUFBR00sRUFBR0MsRUFBR2IsRUFBRS9QLEVBQUksSUFBSyxHQUFJLFlBQ3JDNFEsRUFBSUMsRUFBTUQsRUFBR1IsRUFBR0MsRUFBR00sRUFBR1osRUFBRS9QLEVBQUksR0FBSSxHQUFJLFVBQ3BDMlEsRUFBSUUsRUFBTUYsRUFBR0MsRUFBR1IsRUFBR0MsRUFBR04sRUFBRS9QLEVBQUksR0FBSSxHQUFJLFlBQ3BDcVEsRUFBSVEsRUFBTVIsRUFBR00sRUFBR0MsRUFBR1IsRUFBR0wsRUFBRS9QLEVBQUksSUFBSyxJQUFLLFlBQ3RDb1EsRUFBSVUsRUFBTVYsRUFBR0MsRUFBR00sRUFBR0MsRUFBR2IsRUFBRS9QLEVBQUksR0FBSSxHQUFJLFFBQ3BDNFEsRUFBSUUsRUFBTUYsRUFBR1IsRUFBR0MsRUFBR00sRUFBR1osRUFBRS9QLEVBQUksR0FBSSxJQUFLLFlBQ3JDMlEsRUFBSUcsRUFBTUgsRUFBR0MsRUFBR1IsRUFBR0MsRUFBR04sRUFBRS9QLEVBQUksSUFBSyxHQUFJLFlBQ3JDcVEsRUFBSVMsRUFBTVQsRUFBR00sRUFBR0MsRUFBR1IsRUFBR0wsRUFBRS9QLEVBQUksSUFBSyxJQUFLLFVBQ3RDb1EsRUFBSVUsRUFBTVYsRUFBR0MsRUFBR00sRUFBR0MsRUFBR2IsRUFBRS9QLEVBQUksR0FBSSxHQUFJLFlBQ3BDNFEsRUFBSUUsRUFBTUYsRUFBR1IsRUFBR0MsRUFBR00sRUFBR1osRUFBRS9QLEVBQUksR0FBSSxHQUFJLFlBQ3BDMlEsRUFBSUcsRUFBTUgsRUFBR0MsRUFBR1IsRUFBR0MsRUFBR04sRUFBRS9QLEVBQUksR0FBSSxJQUFLLFdBQ3JDcVEsRUFBSVMsRUFBTVQsRUFBR00sRUFBR0MsRUFBR1IsRUFBR0wsRUFBRS9QLEVBQUksSUFBSyxJQUFLLFlBQ3RDb1EsRUFBSVUsRUFBTVYsRUFBR0MsRUFBR00sRUFBR0MsRUFBR2IsRUFBRS9QLEVBQUksSUFBSyxFQUFHLFdBQ3BDNFEsRUFBSUUsRUFBTUYsRUFBR1IsRUFBR0MsRUFBR00sRUFBR1osRUFBRS9QLEdBQUksSUFBSyxXQUNqQzJRLEVBQUlHLEVBQU1ILEVBQUdDLEVBQUdSLEVBQUdDLEVBQUdOLEVBQUUvUCxFQUFJLEdBQUksSUFBSyxXQUNyQ3FRLEVBQUlTLEVBQU1ULEVBQUdNLEVBQUdDLEVBQUdSLEVBQUdMLEVBQUUvUCxFQUFJLEdBQUksR0FBSSxVQUNwQ29RLEVBQUlVLEVBQU1WLEVBQUdDLEVBQUdNLEVBQUdDLEVBQUdiLEVBQUUvUCxFQUFJLEdBQUksR0FBSSxXQUNwQzRRLEVBQUlFLEVBQU1GLEVBQUdSLEVBQUdDLEVBQUdNLEVBQUdaLEVBQUUvUCxFQUFJLElBQUssSUFBSyxXQUN0QzJRLEVBQUlHLEVBQU1ILEVBQUdDLEVBQUdSLEVBQUdDLEVBQUdOLEVBQUUvUCxFQUFJLElBQUssR0FBSSxXQUNyQ3FRLEVBQUlTLEVBQU1ULEVBQUdNLEVBQUdDLEVBQUdSLEVBQUdMLEVBQUUvUCxFQUFJLEdBQUksSUFBSyxXQUNyQ29RLEVBQUlXLEVBQU1YLEVBQUdDLEVBQUdNLEVBQUdDLEVBQUdiLEVBQUUvUCxHQUFJLEdBQUksV0FDaEM0USxFQUFJRyxFQUFNSCxFQUFHUixFQUFHQyxFQUFHTSxFQUFHWixFQUFFL1AsRUFBSSxHQUFJLEdBQUksWUFDcEMyUSxFQUFJSSxFQUFNSixFQUFHQyxFQUFHUixFQUFHQyxFQUFHTixFQUFFL1AsRUFBSSxJQUFLLElBQUssWUFDdENxUSxFQUFJVSxFQUFNVixFQUFHTSxFQUFHQyxFQUFHUixFQUFHTCxFQUFFL1AsRUFBSSxHQUFJLElBQUssVUFDckNvUSxFQUFJVyxFQUFNWCxFQUFHQyxFQUFHTSxFQUFHQyxFQUFHYixFQUFFL1AsRUFBSSxJQUFLLEVBQUcsWUFDcEM0USxFQUFJRyxFQUFNSCxFQUFHUixFQUFHQyxFQUFHTSxFQUFHWixFQUFFL1AsRUFBSSxHQUFJLElBQUssWUFDckMyUSxFQUFJSSxFQUFNSixFQUFHQyxFQUFHUixFQUFHQyxFQUFHTixFQUFFL1AsRUFBSSxJQUFLLElBQUssU0FDdENxUSxFQUFJVSxFQUFNVixFQUFHTSxFQUFHQyxFQUFHUixFQUFHTCxFQUFFL1AsRUFBSSxHQUFJLElBQUssWUFDckNvUSxFQUFJVyxFQUFNWCxFQUFHQyxFQUFHTSxFQUFHQyxFQUFHYixFQUFFL1AsRUFBSSxHQUFJLEVBQUcsWUFDbkM0USxFQUFJRyxFQUFNSCxFQUFHUixFQUFHQyxFQUFHTSxFQUFHWixFQUFFL1AsRUFBSSxJQUFLLElBQUssVUFDdEMyUSxFQUFJSSxFQUFNSixFQUFHQyxFQUFHUixFQUFHQyxFQUFHTixFQUFFL1AsRUFBSSxHQUFJLElBQUssWUFDckNxUSxFQUFJVSxFQUFNVixFQUFHTSxFQUFHQyxFQUFHUixFQUFHTCxFQUFFL1AsRUFBSSxJQUFLLEdBQUksWUFDckNvUSxFQUFJVyxFQUFNWCxFQUFHQyxFQUFHTSxFQUFHQyxFQUFHYixFQUFFL1AsRUFBSSxHQUFJLEdBQUksV0FDcEM0USxFQUFJRyxFQUFNSCxFQUFHUixFQUFHQyxFQUFHTSxFQUFHWixFQUFFL1AsRUFBSSxJQUFLLElBQUssWUFDdEMyUSxFQUFJSSxFQUFNSixFQUFHQyxFQUFHUixFQUFHQyxFQUFHTixFQUFFL1AsRUFBSSxHQUFJLEdBQUksV0FDcENxUSxFQUFJVSxFQUFNVixFQUFHTSxFQUFHQyxFQUFHUixFQUFHTCxFQUFFL1AsRUFBSSxHQUFJLElBQUssV0FDckNvUSxFQUFJTixFQUFRTSxFQUFHbUIsR0FDZmxCLEVBQUlQLEVBQVFPLEVBQUdtQixHQUNmYixFQUFJYixFQUFRYSxFQUFHYyxHQUNmYixFQUFJZCxFQUFRYyxFQUFHYyxFQUNuQixDQUNBLE9BQU9OLFlBQVkzQyxHQUFHMkIsRUFBR0MsRUFBR00sRUFBR0MsRUFDbkMsQ0FsR3FCZSxDQW1HckIsU0FBdUJYLEdBQ25CLEdBQXFCLElBQWpCQSxFQUFNbkksT0FDTixPQUFPLElBQUl1SSxZQUVmLE1BQU1RLEVBQVMsSUFBSVIsWUFBWXhCLEVBQStCLEVBQWZvQixFQUFNbkksU0FBYXdJLEtBQUssR0FDdkUsSUFBSyxJQUFJclIsRUFBSSxFQUFHQSxFQUFJZ1IsRUFBTW5JLE9BQVE3SSxJQUM5QjRSLEVBQU81UixHQUFLLEtBQWtCLElBQVhnUixFQUFNaFIsS0FBZ0JBLEVBQUksRUFBSyxFQUV0RCxPQUFPNFIsQ0FDWCxDQTd
2Ha0JDLENBQWNsQyxHQUNzQixFQUFmQSxFQUFNOUcsUUFFN0MsQyxnQkNMQW5KLE9BQU9DLGVBQWVQLEVBQVMsYUFBYyxDQUFFUSxPQUFPLElBQ3RELE1BQU0yRixFQUFpQixFQUFRLElBQ3pCQyxFQUFVLEVBQVEsS0FDbEJDLEVBQWMsRUFBUSxLQWM1QnJHLEVBQUEsUUFiQSxTQUFZd1AsRUFBU0MsRUFBS3hPLEdBQ3RCdU8sSUFBWSxDQUFDLEVBQ2J2TyxJQUFXLEVBQ1gsSUFBSXNQLEdBQVEsRUFBSW5LLEVBQVFoRixTQUFTLElBQUtvTyxFQUFTa0QsS0FBSyxHQUFRLElBQUl0RCxXQUFXLEtBRTNFLEdBREFtQixHQUFRLEVBQUlsSyxFQUFZakYsU0FBU21QLEdBQzdCZCxFQUFLLENBQ0wsSUFBSyxJQUFJN08sRUFBSSxFQUFHQSxFQUFJLEdBQUlBLElBQ3BCNk8sRUFBSXhPLEVBQVNMLEdBQUsyUCxFQUFNM1AsR0FFNUIsT0FBTzZPLENBQ1gsQ0FDQSxPQUFPLEVBQUl0SixFQUFlMUYsaUJBQWlCOFAsRUFDL0MsQywrR0NoQmEsRUFBQXJILGlCQUFvQnlKLEksVUFDL0IsSUFDRSxTQUFzQyxRQUE3QixFQUFnQixRQUFoQixFQUFBQSxhQUFHLEVBQUhBLEVBQUt6UixtQkFBVywyQkFBSzBMLGdCQUFRLHNCQUFHLFlBQzNDLENBQUUsU0FDQSxPQUFPLENBQ1QsR0FPVyxFQUFBekQsb0JBQXNCLENBQ2pDeUksRUFDQWdCLEtBR0UsSUFBQTFKLGtCQUFrQjBJLGFBQUssRUFBTEEsRUFBZWlCLFFBQ2pDLElBQUEzSixrQkFBa0IwSSxhQUFLLEVBQUxBLEVBQWV2SSxRQUNqQyxJQUFBSCxrQkFBa0IwSSxhQUFLLEVBQUxBLEVBQWVrQixNQUNqQyxJQUFBNUosa0JBQWtCMEksYUFBSyxFQUFMQSxFQUFlbUIsZUFDakMsSUFBQTdKLGtCQUFpQjBKLEUsZ0JDckJyQnRTLE9BQU9DLGVBQWVQLEVBQVMsYUFBYyxDQUFFUSxPQUFPLElBQ3REUixFQUFRZ1QsbUJBQWdCLEVBQ3hCLE1BQU16RCxFQUFXLEVBQVEsS0FDbkJwSixFQUFpQixFQUFRLElBQ3pCZ0ssRUFBUyxDQUFDLEVBcUJoQixTQUFTNkMsRUFBYy9QLEVBQU9zRSxFQUFLb0ksR0FzQi9CLE9BckJBMU0sRUFBTW1OLFNBQVUsSUFDaEJuTixFQUFNZ1EsUUFBVSxFQUNaMUwsSUFBUXRFLEVBQU1tTixPQUNkbk4sRUFBTWdRLFFBQ0ZoUSxFQUFNZ1EsT0FBUyxNQUNmaFEsRUFBTWlRLFVBQU83RyxFQUNicEosRUFBTWdRLE1BQVEsSUFHYjFMLEVBQU10RSxFQUFNbU4sTUFDakJuTixFQUFNZ1EsTUFBUSxFQUVUMUwsRUFBTXRFLEVBQU1tTixRQUNqQm5OLEVBQU1pUSxVQUFPN0csR0FFWnBKLEVBQU1pUSxPQUNQalEsRUFBTWlRLEtBQU92RCxFQUFLNU8sTUFBTSxHQUFJLElBQzVCa0MsRUFBTWlRLEtBQUssSUFBTSxFQUNqQmpRLEVBQU1rUSxTQUF3QyxPQUEzQnhELEVBQUssSUFBTSxFQUFLQSxFQUFLLEtBRTVDMU0sRUFBTW1OLE1BQVE3SSxFQUNQdEUsQ0FDWCxDQUVBLFNBQVNpTSxFQUFRUyxFQUFNUyxFQUFPNkMsRUFBT0UsRUFBVUQsRUFBTXpELEVBQUt4TyxFQUFTLEdBQy9ELEdBQUkwTyxFQUFLbEcsT0FBUyxHQUNkLE1BQU0sSUFBSTdFLE1BQU0scUNBRXBCLEdBQUs2SyxHQUtELEdBQUl4TyxFQUFTLEdBQUtBLEVBQVMsR0FBS3dPLEVBQUloRyxPQUNoQyxNQUFNLElBQUlxRyxXQUFXLG1CQUFtQjdPLEtBQVVBLEVBQVMsbUNBTC9Ed08sRUFBTSxJQUFJTCxXQUFXLElBQ3JCbk8sRUFBUyxFQU9ibVAsSUFBVTVJLEtBQUtELE1BQ2YwTCxJQUFVLEVBQ1ZFLElBQTBDLE9BQTNCeEQsRUFBSyxJQUFNLEVBQUtBLEVBQUssSUFDcEN1RCxJQUFTdkQsRUFBSzVPLE1BQU0sR0FBSSxJQUV4QixNQUFNcVMsR0FBNEIsS0FBYixXQURyQmhELEdBQVMsY0FDaUM2QyxHQUFTLFdBQ25EeEQsRUFBSXhPLEtBQWFtUyxJQUFPLEdBQU0sSUFDOUIzRCxFQUFJeE8sS0FBYW1TLElBQU8sR0FBTSxJQUM5QjNELEVBQUl4TyxLQUFhbVMsSUFBTyxFQUFLLElBQzdCM0QsRUFBSXhPLEtBQWlCLElBQUxtUyxFQUNoQixNQUFNQyxFQUFRakQsRUFBUSxXQUFlLElBQVMsVUFDOUNYLEVBQUl4TyxLQUFhb1MsSUFBUSxFQUFLLElBQzlCNUQsRUFBSXhPLEtBQWtCLElBQU5vUyxFQUNoQjVELEVBQUl4TyxLQUFjb1MsSUFBUSxHQUFNLEdBQU8sR0FDdkM1RCxFQUFJeE8sS0FBYW9TLElBQVEsR0FBTSxJQUMvQjVELEVBQUl4TyxLQUFha1MsSUFBYSxFQUFLLElBQ25DMUQsRUFBSXhPLEtBQXVCLElBQVhrUyxFQUNoQixJQUFLLElBQUlHLEVBQUksRUFBR0EsRUFBSSxJQUFLQSxFQUNyQjdELEVBQUl4TyxLQUFZaVMsRUFBS0ksR0FFekIsT0FBTzdELENBQ1gsQ0FuQ0F6UCxFQUFRZ1QsY0FBZ0JBLEVBb0N4QmhULEVBQUEsUUFoRkEsU0FBWXdQLEVBQVNDLEVBQUt4TyxHQUN0QixJQUFJc1AsRUFDSixNQUFNZ0QsRUFBTy9ELEdBQVNrRCxNQUFPLEVBQzdCLEdBQUlsRCxFQUFTLENBQ1QsTUFBTWdFLEVBQWNsVCxPQUFPbVQsS0FBS2pFLEdBQ0wsSUFBdkJnRSxFQUFZL0osUUFBbUMsUUFBbkIrSixFQUFZLEtBQ3hDaEUsT0FBVW5ELEVBRWxCLENBQ0EsR0FBSW1ELEVBQ0FlLEVBQVFyQixFQUFRTSxFQUFRSSxRQUFVSixFQUFRSyxVQUFXLEVBQUlOLEVBQVNuTyxXQUFZb08sRUFBUVksTUFBT1osRUFBUXlELE1BQU96RCxFQUFRMkQsU0FBVTNELEVBQVEwRCxLQUFNekQsRUFBS3hPLE9BRWhKLENBQ0QsTUFBTXNHLEVBQU1DLEtBQUtELE1BQ1hvSSxHQUFPLEVBQUlKLEVBQVNuTyxXQUMxQjRSLEVBQWM3QyxFQUFRNUksRUFBS29JLEdBQzNCWSxFQUFRckIsRUFBUVMsRUFBTVEsRUFBT0MsTUFBT0QsRUFBTzhDLE1BQU9NLE9BQU9sSCxFQUFZOEQsRUFBT2dELFNBQVVJLE9BQU9sSCxFQUFZOEQsRUFBTytDLEtBQU16RCxFQUFLeE8sRUFDL0gsQ0FDQSxPQUFPd08sSUFBTyxFQUFJdEosRUFBZTFGLGlCQUFpQjhQLEVBQ3RELEMsb0ZDekJBLGVBS0EsU0FPQSxTQUNBLFNBUUEsa0JBTUUsV0FBQXhOLENBQ0VJLEVBQ0FHLEdBRUFqRCxLQUFLOEMsV0FBYUEsRUFDbEI5QyxLQUFLaUQsWUFBY0EsR0FBZWpELEtBQUtxVCx1QkFHdkMsTUFBTUMsRUFBMkIsQ0FDL0JDLG1CQXBCK0IsRUFxQi9CQyxXQUFZLEVBQ1pDLGFBQWMsSUFDZEMsYUFBYyxLQUdoQjFULEtBQUsyVCxXQUFhLElBQUksRUFBQUMsV0FBV04sR0FHakN0VCxLQUFLMlQsV0FBV0UsV0FBVWxRLE1BQU9tUSxVQUN6QjlULEtBQUsrVCxrQkFBa0JELE1BRy9CLEVBQUE5UixPQUFPbUIsSUFBSSx5Q0FBMENtUSxFQUFZQyxtQkFBb0Isb0JBQ3ZGLENBT1Esb0JBQUFGLEdBQ04sSUFFRSxNQUFNVyxFQUFnQnhNLFNBQVN5RyxjQUFjLGdCQUFnQixFQUFBZ0cscUJBRTdELEdBQUlELGFBQWEsRUFBYkEsRUFBZUUsSUFBSyxDQUN0QixNQUFNQyxFQUFZSCxFQUFjRSxJQUloQyxPQUhBLEVBQUFsUyxPQUFPZ0osSUFBSSwwQkFBMkJtSixHQUdsQ0EsRUFBVTVILFNBQVMsWUFDckIsRUFBQXZLLE9BQU9nSixJQUFJLDREQUNKLEVBQUFvSixjQUFjQyxTQUluQkYsRUFBVTVILFNBQVMsY0FDckIsRUFBQXZLLE9BQU9nSixJQUFJLGdFQUNKLEVBQUFvSixjQUFjRSxRQUl2QixFQUFBdFMsT0FBT2dKLElBQUksa0VBQ0osRUFBQW9KLGNBQWNHLFdBQ3ZCLENBRUUsT0FEQSxFQUFBdlMsT0FBT2dKLElBQUksOERBQ0osRUFBQW9KLGNBQWNHLFVBRXpCLENBQUUsTUFBT3hTLEdBSVAsT0FIQSxFQUFBQyxPQUFPRCxNQUFNLGtDQUFtQ0EsR0FFaEQsRUFBQUMsT0FBT2dKLElBQUksd0RBQ0osRUFBQW9KLGNBQWNHLFVBQ3ZCLENBQ0YsQ0FLQSxrQkFBQTlRLENBQW1CSCxHQUNqQnRELEtBQUtzRCxVQUFZQSxDQUNuQixDQUtBLGVBQU1RLENBQVVGLEcsTUFDZCxJQUVFQSxFQUFNQyxXQUFhLElBQ2RELEVBQU1DLFdBQ1RNLFlBQTZCLFFBQWpCLEVBQUFQLGFBQUssRUFBTEEsRUFBT0Msa0JBQVUsZUFBRU0sY0FBYyxJQUFBQyxrQkFJL0MsTUFBTWQsRUFDSnRELEtBQUtzRCxZQUFhLElBQUEySCx3QkFBdUJqTCxLQUFLOEMsWUFDMUMwUixHQUFXLElBQUFwSyxlQUVqQixJQUFJcUssRUFBK0IsSUFBSzdRLEdBR3hDLEdBQUlBLEVBQU00TyxPQUFTLEVBQUFrQyxVQUFVQyxpQkFBbUIsYUFBYy9RLEVBQU8sQ0FDbkUsTUFBTWdSLEVBQVloUixFQUdaaVIsRUFBeUMsSUFDMUNELEVBQ0hFLFNBQVUsSUFDTEYs
2RUFBVUUsU0FDYkMsVUFBVSxJQUFBeEgsMEJBSWRrSCxFQUFnQkksRUFFaEIsRUFBQTdTLE9BQU9nSixJQUFJLG9DQUFxQyxDQUM5Q2dLLFNBQVVILEVBQWtCQyxTQUFTQyxVQUV6QyxDQUVBLE1BQU1qQixFQUFVLElBQ1hXLEVBQ0gzUixXQUFZOUMsS0FBSzhDLFdBQ2pCUSxZQUNBc0gsVUFBVzRKLGFBQVEsRUFBUkEsRUFBVTVKLFVBQ3JCM0csT0FBUXVRLGFBQVEsRUFBUkEsRUFBVXZRLFFBR3BCLEVBQUFqQyxPQUFPZ0osSUFBSSwwQkFBMkIsQ0FDcEN3SCxLQUFNaUMsRUFBY2pDLEtBQ3BCbFAsWUFDQVIsV0FBWTlDLEtBQUs4QyxtQkFJYjlDLEtBQUsyVCxXQUFXc0IsUUFBUW5CLEdBRTlCLEVBQUE5UixPQUFPZ0osSUFBSSw2QkFBOEJ5SixFQUFjakMsS0FDekQsQ0FBRSxNQUFPelEsR0FDUCxFQUFBQyxPQUFPRCxNQUFNLHdCQUF5QkEsRUFFeEMsQ0FDRixDQU1RLHVCQUFNZ1MsQ0FBa0JELEdBQzlCLE1BQU1vQixFQUFXLEdBQUdsVixLQUFLaUQsdUNBR3pCLEdBQUk2USxHQUFXQSxFQUFRcUIsT0FBNkIsb0JBQWJDLFNBQ3JDLElBQ0UsTUFBTU4sRUFBVyxJQUFJTSxVQUNmLE1BQUVELEtBQVVFLEdBQXNCdkIsRUFHeENnQixFQUFTUSxPQUFPLFFBQVNuTCxLQUFLN0UsVUFBVStQLElBR3hDcFYsT0FBT21ULEtBQUsrQixHQUE4Qm5OLFNBQVN1TixJQUNqRCxNQUFNcFYsRUFBU2dWLEVBQThCSSxJQUN4QkMsTUFBTUMsUUFBUXRWLEdBQVNBLEVBQVEsQ0FBQ0EsSUFDaEQ2SCxTQUFTME4sSUFDWixJQUNNQSxhQUFnQkMsTUFDbEJiLEVBQVNRLE9BQU9DLEVBQVdHLEVBRS9CLENBQUUsU0FFRixRQUlKLE1BQU1FLFFBQWlCQyxNQUFNWCxFQUFVLENBQ3JDWSxPQUFRLE9BQ1JDLEtBQU1qQixJQUdSLElBQUtjLEVBQVNJLEdBQ1osTUFBTSxJQUFJelIsTUFBTSx5QkFBeUJxUixFQUFTSyxjQUlwRCxZQURBLEVBQUFqVSxPQUFPZ0osSUFBSSx1Q0FBd0M4SSxFQUFRdEIsS0FFN0QsQ0FBRSxNQUFPelEsR0FDUCxFQUFBQyxPQUFPRCxNQUFNLHVEQUF3REEsRUFFdkUsQ0FJRixNQUFNNlQsUUFBaUJDLE1BQU1YLEVBQVUsQ0FDckNZLE9BQVEsT0FDUkksUUFBUyxDQUNQLGVBQWdCLG9CQUVsQkgsS0FBTTVMLEtBQUs3RSxVQUFVd08sS0FHdkIsSUFBSzhCLEVBQVNJLEdBQ1osTUFBTSxJQUFJelIsTUFBTSx5QkFBeUJxUixFQUFTSyxjQUdwRCxFQUFBalUsT0FBT2dKLElBQUksMkJBQTRCOEksRUFBUXRCLEtBQ2pELENBTUEsZ0JBQU14TyxDQUFXSixHQUNmLElBQ0UsRUFBQTVCLE9BQU9nSixJQUFJLG1CQUFvQnBILEVBQU1rUixnQkFHL0I5VSxLQUFLOEQsVUFBVUYsRUFDdkIsQ0FBRSxNQUFPN0IsR0FDUCxFQUFBQyxPQUFPRCxNQUFNLHlCQUEwQkEsRUFDekMsQ0FDRixFLGNDOU9GOUIsT0FBT0MsZUFBZVAsRUFBUyxhQUFjLENBQUVRLE9BQU8sSUFDdERSLEVBQUEsUUFBa0Isc0MseUhDRGxCLGVBQ0EsU0FjYSxFQUFBd1csOEJBQWdDLEtBQzNDLElBRUUsTUFBTW5DLEVBQWdCeE0sU0FBU3dNLGVBQzdCeE0sU0FBU3lHLGNBQWMsZ0JBQWdCLEVBQUFnRyxxQkFFekMsSUFBS0QsRUFFSCxPQURBLEVBQUFoUyxPQUFPcUIsS0FBSywrQ0FDTCxLQUlULE1BQU1ILEVBQVE4USxFQUFjcEcsYUFBYSxjQUN6QyxHQUFjLFNBQVYxSyxFQUFrQixDQUNwQixNQUFNckIsRUFBSVQsT0FDVlMsRUFBRSxFQUFBQyxxQkFBdUJELEVBQUUsRUFBQUMsc0JBQXdCLENBQUMsRUFDcERELEVBQUUsRUFBQUMscUJBQXFCb0IsT0FBUSxDQUNqQyxDQUdBLE1BQU1KLEVBQWFrUixFQUFjcEcsYUFBYSxvQkFFOUMsSUFBSzlLLEVBR0gsT0FGQSxFQUFBZCxPQUFPd0MsU0FBUyxpREFDaEIsRUFBQXhDLE9BQU93QyxTQUFTLG9FQUNULEtBR1QsTUFBTTdCLEVBQXlCLENBQzdCRyxjQUlZLFNBQVZJLElBQ0ZQLEVBQU9PLE9BQVEsR0FJakIsTUFBTUQsRUFBYytRLEVBQWNwRyxhQUFhLHFCQU0vQyxPQUxJM0ssSUFDRk4sRUFBT00sWUFBY0EsR0FHdkIsRUFBQWpCLE9BQU9tQixJQUFJLCtDQUFnRFIsR0FDcERBLENBQ1QsQ0FBRSxNQUFPWixHQUVQLE9BREEsRUFBQUMsT0FBT3dDLFNBQVMsbUNBQW9DekMsR0FDN0MsSUFDVCxHQVNXLEVBQUF1QyxlQUFrQjNCLEdBQ3hCQSxHQUE0QixpQkFBWEEsRUFLakJBLEVBQU9HLFlBQTJDLGlCQUF0QkgsRUFBT0csV0FLcENILEVBQU9NLGFBQTZDLGlCQUF2Qk4sRUFBT00sYUFDdEMsRUFBQWpCLE9BQU93QyxTQUFTLHdEQUNULElBR0w3QixFQUFPTyxPQUFpQyxrQkFBakJQLEVBQU9PLFFBQ2hDLEVBQUFsQixPQUFPd0MsU0FBUyxtREFDVCxJQVhQLEVBQUF4QyxPQUFPd0MsU0FBUyxpRUFDVCxJQU5QLEVBQUF4QyxPQUFPd0MsU0FBUyw2Q0FDVCxFLGdCQzNFWHZFLE9BQU9DLGVBQWVQLEVBQVMsYUFBYyxDQUFFUSxPQUFPLElBQ3REUixFQUFReVcsSUFBTXpXLEVBQVEwVyxTQUFNLEVBQzVCLE1BQU1DLEVBQVksRUFBUSxLQUNwQkMsRUFBVyxFQUFRLEtBQ3pCLElBQUlDLEVBQVcsRUFBUSxLQUd2QixTQUFTdlIsRUFBRzlFLEVBQU9zVyxFQUFXckgsRUFBS3hPLEdBQy9CLE9BQU8sRUFBSTJWLEVBQVN4VixTQUFTLEdBQU11VixFQUFVdlYsUUFBU1osRUFBT3NXLEVBQVdySCxFQUFLeE8sRUFDakYsQ0FKQVgsT0FBT0MsZUFBZVAsRUFBUyxNQUFPLENBQUVnRyxZQUFZLEVBQU14RCxJQUFLLFdBQWMsT0FBT3FVLEVBQVNILEdBQUssSUFDbEdwVyxPQUFPQyxlQUFlUCxFQUFTLE1BQU8sQ0FBRWdHLFlBQVksRUFBTXhELElBQUssV0FBYyxPQUFPcVUsRUFBU0osR0FBSyxJQUlsR25SLEVBQUdvUixJQUFNRSxFQUFTRixJQUNsQnBSLEVBQUdtUixJQUFNRyxFQUFTSCxJQUNsQnpXLEVBQUEsUUFBa0JzRixDLGdCQ1psQmhGLE9BQU9DLGVBQWVQLEVBQVMsYUFBYyxDQUFFUSxPQUFPLElBQ3RELE1BQU0wRixFQUFhLEVBQVEsS0FDckJDLEVBQWlCLEVBQVEsSUFNL0JuRyxFQUFBLFFBTEEsU0FBZ0JtQixHQUNaLE1BQ01nTyxHQUlPRCxFQUxtQixpQkFBVC9OLEdBQW9CLEVBQUkrRSxFQUFXOUUsU0FBU0QsR0FBUUEsRUFNcEVpTyxXQUFXQyxJQUFrQixHQUFiSCxFQUFRLEtBQWMsRUFBT0EsRUFBUSxJQUFNLEVBQUssSUFBc0IsR0FBYkEsRUFBUSxLQUFjLEdBQW9CLElBQWJBLEVBQVEsS0FBYyxHQUFtQixHQUFiQSxFQUFRLEtBQWMsR0FBb0IsSUFBYkEsRUFBUSxLQUFjLEdBQW1CLEdBQWJBLEVBQVEsS0FBYyxHQUFvQixJQUFiQSxFQUFRLEtBQWMsR0FBbUIsR0FBYkEsRUFBUSxLQUFjLEdBQW9CLElBQWJBLEVBQVEsS0FBYyxHQUFtQixHQUFiQSxFQUFRLEtBQWMsR0FBb0IsSUFBYkEsRUFBUSxLQUFjLEVBQUksR0FBcUIsR0FBYkEsRUFBUSxHQUFZQSxFQUFRLEdBQUlBLEVBQVEsR0FBSUEsRUFBUSxHQUFJQSxFQUFRLElBQUtBLEVBQVEsSUFBS0EsRUFBUSxJQUFLQSxFQUFRLElBQUtBLEVBQVEsSUFBS0EsRUFBUSxNQUR4ZixJQUFpQkEsRUFIYixNQUF1QixpQkFBVC9OLEdBQW9CLEVBQUlnRixFQUFlMUYsaUJBQWlCME8sR0FBV0EsQ0FDckYsQyxjQ2VBLElBQVk0RixFLG9FQUFaLFNBQVlBLEdBQ1YsK0NBQ0EsNENBQ0QsQ0FIRCxDQUFZQSxJQUFTLFlBQVRBLEVBQVMsSSxnQkN0QnJCelUsT0FBT0MsZUFBZVAsRUFBUyxhQUFjLENBQUVRLE9BQU8sSUFDdERSLEVBQVF5VyxJQUFNelcsRUFBUTBXLFNBQU0sRUFDNUIsTUFBTUssRUFBVyxFQUFRLEtBQ25CSCxFQUFXLEVBQVEsS0FDekIsSUFBSUMsRUFBVyxFQUFRLEtBR3ZCLFNBQVNyUixFQUFHaEYsRUFBT3NXLEVBQVdySCxFQUFLeE8sR0FDL0IsT0FBTyxFQUFJMlYsRUFBU3hWLFNBQVMsR0FBTTJWLEVBQVMzVixRQUFTWixFQUFPc1csRUFBV3JILEVBQUt4TyxFQUNoRixDQUpBWCxPQUFPQyxlQUFlUCxFQUFTLE1BQU8sQ0FBRWdHLFlBQVksRUFBTXhELElBQUssV0FBYyxPQUFPcVUsRUFBU0gsR0FBSyxJQUNsR3BXLE9BQU9DLGVBQWVQLEVBQVMsTUFBTyxDQUFFZ0csWUFBWSxFQUFNeEQsSUFBSyxXQUFjLE9BQU9xVSxFQUFTSixHQUFLLElBSWxHalIsRUFBR2tSLElBQU1FLEVBQVNGLElBQ2xCbFIsRUFBR2lSLElBQU1HLEVBQVNILElBQ2xCelcsRUFBQSxRQUFrQndGLEMsaUZDVGxCLGVBRWEsRUFBQW5ELE9BQVMsQ0FPcEJnSixJQUFLLENBQUMyTCxLQUFvQmhMLEtBQ3BCaUwsS0FDRkMsUUFBUTFULElBQUksR0FBRyxFQUFBMlQsaUJBQWlCSCxPQUFjaEwsSUFVbEQ1SixNQUFPLENBQUM0VSxLQUFvQmhMLEtBQ3RCaUwsS0FDRkMsUUFBUTlVLE1BQU0sR0FBRyxFQUFBK1UsaUJBQWlCSCxPQUFjaEwsSUFVcERuSCxTQUFVLENBQUNtUyxLQUFvQmhMLEtBQzdCa0wsUUFBUTlVLE1BQU0sR0FBRyxFQUFBZ1YsdUJBQXVCSixPQUFjaEwsSUFTeER4SSxJQUFLLENBQUN3VCxLQUFvQmhMLEtBQ3BCaUwsS0FDRkMsUUFBUTFULElBQUksR0FBRyxFQUFBMlQsaUJBQWlCSCxPQUFjaEwsSUFVbER0SSxLQUFNLENBQUNzVCxLQUFvQmhMLEtBQ3JCaUwsS0FDRkMsUUFBUXhULEtBQUssR0FBRyxFQUFBeVQsaUJBQWlCSCxPQUFjaEwsS0FVckQsTUFBTWlMLEVBQWMsSyxNQUNsQixHQUFzQixvQkFBWHhWLE9BQXdCLE9BQU8sRUFDMUMsTUFBTVMsRUFBSVQsT0FDVixPQUFPNFYsUUFBZ0MsUUFBeEIsRUFBQW5WLGFBQUMsRUFBREEsRUFBSSxFQUFBQyw0QkFBb0IsZUFBRW9CLE8sY0N6RTNDakQsT0FBT0MsZUFBZVAsRUFBUyxhQUFjLENBQUVRLE9BQU8sSUFDdERSLEVBQUEsUUFBa0IsMEosZ0hDRmxCLGVBQ0EsU0FHTXNYLEVBQWUsSUFBSUMsUUFHekIsSUFBSUMsRUFBd0MsS0FLL0IsRUFBQXpULGtCQUFxQjBULElBQ2hDLEVBQUFwVixPQUFPbUIsSUFBSSw4QkFFWCxNQUFNa1UsR0FBVyxJQUFBN0ssbUJBQ1g4SyxHQUFTLElBQUFqSixxQkFRZitJLEVBUDZCLENBQzNCNUUsS0FBTSxFQUFBa0MsVUFBVTZDLGlCQUNoQkMsVUFBV3JRLEtBQUtELFNBQ2JtUSxLQUNDQyxFQUFTLENBQUVBLFVBQVcsQ0FBQyxLQWNsQixFQUFBdlQsa0JBQXFCcVQsSUFDaEMsRUFBQXBWLE9BQU9tQixJQUFJLHFDQU1YLE1BQU1zVSxFQUFzQi9KLElBQzFCLEdBQUl1SixFQUFhUyxJQUFJaEssR0FBTyxPQUc1QixJQUFJaUssR0FBZ0IsRU
2FFcEIsTUFBTUMsRUFBbUIsS0FDbkJELElBQ0pBLEdBQWdCLEVBQ2hCLEVBQUEzVixPQUFPbUIsSUFBSSw4QkFDWDBVLEVBQWlCbkssRUFBTTBKLEdBRXZCdkwsWUFBVyxLQUFROEwsR0FBZ0IsSUFBVSxPQUkvQ2pLLEVBQUt4RixpQkFBaUIsU0FBVTBQLEVBQWtCLENBQUV4UCxTQUFTLElBRzdELE1BQU0wUCxFQUFnQnBLLEVBQUtxSyxpQkFDekIsZ0ZBRUZELEVBQWM5UCxTQUFTZ1EsSUFDckJBLEVBQU85UCxpQkFBaUIsU0FBUyxLQUMvQixFQUFBbEcsT0FBT21CLElBQUksZ0NBRVgwSSxXQUFXK0wsRUFBa0IsTUFDNUIsQ0FBRXhQLFNBQVMsT0FHaEI2TyxFQUFhZ0IsSUFBSXZLLEdBQ2pCLE1BQU13SyxHQUFpQixJQUFBN0osbUJBQWtCWCxJQUFTLG9CQUNsRCxFQUFBMUwsT0FBT21CLElBQUksaUJBQWtCK1UsRUFBZ0IsSUFBSUosRUFBYzFPLDZCQU0zRCtPLEVBQXVCMVksSUFDM0IsTUFBTTJZLEVBQVEzWSxFQUFLc1ksaUJBQWlCLFFBQ3BDLEVBQUEvVixPQUFPbUIsSUFBSSxTQUFTaVYsRUFBTWhQLDhCQUMxQmdQLEVBQU1wUSxTQUFTMEYsR0FBUytKLEVBQW1CL0osTUFNdkMySyxFQUFlLEtBQ2ZsQixHQUE0QyxvQkFBckJtQixtQkFFM0JuQixFQUFlLElBQUltQixrQkFBa0JDLElBQ25DQSxFQUFVdlEsU0FBU3dRLElBQ0VoRCxNQUFNaUQsS0FBS0QsRUFBU0UsWUFDNUIxUSxTQUFTNkssSUFDbEIsR0FBTUEsYUFBZ0I4RixRQUd0QixPQUFJOUYsYUFBZ0J0RSxpQkFDbEIsRUFBQXZNLE9BQU9tQixJQUFJLG1EQUNYc1UsRUFBbUI1RSxTQUtEQSxFQUFLa0YsaUJBQWlCLFFBQzlCL1AsU0FBUzRRLElBQ25CLEVBQUE1VyxPQUFPbUIsSUFBSSxxREFDWHNVLEVBQW1CbUIsZUFNM0J6QixFQUFhMEIsUUFBUXJSLFNBQVN1TyxLQUFNLENBQ2xDK0MsV0FBVyxFQUNYQyxTQUFTLElBRVgsRUFBQS9XLE9BQU9tQixJQUFJLDZEQUliZ1YsRUFBb0IzUSxVQUdoQkEsU0FBU3VPLEtBQ1hzQyxJQUdBN1EsU0FBU1UsaUJBQWlCLG9CQUFvQixLQUM1Q2lRLEVBQW9CM1EsVUFDcEI2USxRQVdOLE1BQU1SLEVBQW1CLENBQUNuSyxFQUF1QjBKLEtBQy9DLElBQ0UsTUFBTSxVQUFFNEIsRUFBUyxZQUFFQyxFQUFXLE1BQUU5RCxJQUFVLElBQUF2TSxlQUFjOEUsR0FDbEQySixHQUFXLElBQUE3SyxtQkFFWDBNLEVBQXFDLENBQ3pDMUcsS0FBTSxFQUFBa0MsVUFBVUMsZ0JBQ2hCNkMsVUFBV3JRLEtBQUtELE1BQ2hCb1EsUUFBUSxJQUFBakosbUJBQWtCWCxJQUFTLG9CQUNuQ29ILFNBQVVrRSxFQUNWRyxXQUFZRixLQUNSOUQsR0FBU2xWLE9BQU9tVCxLQUFLK0IsR0FBTy9MLE9BQVMsQ0FBRStMLFNBQVUsQ0FBQyxLQUNuRGtDLEdBR0xELEVBQVM4QixHQUVULEVBQUFsWCxPQUFPbUIsSUFBSSwyQkFBNEIrVixFQUFjNUIsT0FDdkQsQ0FBRSxNQUFPdlYsR0FDUCxFQUFBQyxPQUFPRCxNQUFNLGtDQUFtQ0EsRUFDbEQsRSxnQkNsS0Y5QixPQUFPQyxlQUFlUCxFQUFTLGFBQWMsQ0FBRVEsT0FBTyxJQUN0RCxNQUFNaVosRUFBYSxFQUFRLEtBSTNCelosRUFBQSxRQUhBLFNBQWtCbUIsR0FDZCxNQUF1QixpQkFBVEEsR0FBcUJzWSxFQUFXclksUUFBUXNZLEtBQUt2WSxFQUMvRCxDLGdCQ0pBYixPQUFPQyxlQUFlUCxFQUFTLGFBQWMsQ0FBRVEsT0FBTyxJQUN0RCxNQUFNRSxFQUFnQixFQUFRLEtBTzlCVixFQUFBLFFBTkEsU0FBaUJtQixHQUNiLEtBQUssRUFBSVQsRUFBY1UsU0FBU0QsR0FDNUIsTUFBTUUsVUFBVSxnQkFFcEIsT0FBT3NZLFNBQVN4WSxFQUFLSixNQUFNLEdBQUksSUFBSyxHQUN4QyxDLGNDUEFULE9BQU9DLGVBQWVQLEVBQVMsYUFBYyxDQUFFUSxPQUFPLElBQ3RELE1BQU1rUCxFQUErQixvQkFBWE8sUUFBMEJBLE9BQU9QLFlBQWNPLE9BQU9QLFdBQVd0SCxLQUFLNkgsUUFDaEdqUSxFQUFBLFFBQWtCLENBQUUwUCxhLHlOQ0lwQixlQUlNa0ssRUFBZSxTQUdmQyxFQUFxQixlQUdyQkMsRUFBMkIsdUJBRzNCQyxFQUEyQixhQVFwQixFQUFBelgsb0JBQXVCMFgsR0FDYSxPQUF4Q0EsRUFBUTVMLFFBQVEsSUFBSXdMLEtBU2hCLEVBQUE5VyxlQUFrQm1YLEdBQ3RCQSxFQUNKQyxRQUFRSixFQUEwQixJQUNsQ0ksUUFBUUgsRUFBMEIsSUFDbEMvTyxPQVVRLEVBQUF2SSxhQUFnQm1QLEksWUFDM0IsSUFDRSxNQUFNdUksRUFBU3ZJLEVBQU14RCxRQUFRLElBQUl3TCxLQUNqQyxJQUFLTyxFQUFRLE1BQU8sR0FHcEIsTUFBTUMsRUFBV3hJLEVBQU14RCxRQUFRLFlBRy9CLElBRndCZ00sY
2UFBUSxFQUFSQSxFQUFVQyxVQUFVQyxTQUFTVixLQUU5QlEsRUFBVSxDQUUvQixNQUFNRyxFQUFTSCxFQUFTOUwsY0FBYyxVQUN0QyxHQUFJaU0sRUFDRixPQUFPLElBQUF6WCxnQkFBeUMsUUFBMUIsRUFBa0IsUUFBbEIsRUFBQXlYLEVBQU9oTSxtQkFBVyxlQUFFdkQsY0FBTSxRQUFJLEdBRXhELENBR0EsTUFBTXdQLEVBQVVMLEVBQU83TCxjQUFjLFNBQVN1TCxLQUM5QyxHQUFJVyxFQUNGLE9BQU8sSUFBQTFYLGdCQUEwQyxRQUEzQixFQUFtQixRQUFuQixFQUFBMFgsRUFBUWpNLG1CQUFXLGVBQUV2RCxjQUFNLFFBQUksR0FFekQsQ0FBRSxNQUFPNUksR0FDUCxFQUFBQyxPQUFPRCxNQUFNLDZDQUE4Q0EsRUFDN0QsQ0FFQSxNQUFPLElBVUksRUFBQU0sWUFBYyxDQUFDcUwsRUFBdUI2RCxLLFFBQ2pELElBQUtBLEVBQU1rQixHQUFJLE1BQU8sR0FFdEIsSUFDRSxNQUFNMkgsRUFBYTFNLEVBQUtPLGNBQWMsY0FBY3NELEVBQU1rQixRQUMxRCxHQUFJMkgsRUFDRixPQUFxQyxRQUE5QixFQUFzQixRQUF0QixFQUFBQSxFQUFXbE0sbUJBQVcsZUFBRXZELGNBQU0sUUFBSSxFQUU3QyxDQUFFLE1BQU81SSxHQUNQLEVBQUFDLE9BQU9ELE1BQU0sNENBQTZDQSxFQUM1RCxDQUVBLE1BQU8sSUFTSSxFQUFBRyxnQkFBbUJxUCxJLE1BQzlCLE1BQU13SSxFQUFXeEksRUFBTXhELFFBQVEsWUFDL0IsT0FBaUQsUUFBMUMsRUFBQWdNLGFBQVEsRUFBUkEsRUFBVUMsVUFBVUMsU0FBU1YsVUFBYSxVQVl0QyxFQUFBalgsaUJBQW1CLENBQzlCb0wsRUFDQTZELEtBR0EsS0FBSyxJQUFBdFAscUJBQW9Cc1AsR0FDdkIsTUFBTyxHQUlULElBQUksSUFBQXJQLGlCQUFnQnFQLEdBQVEsQ0FDMUIsTUFBTThJLEdBQVcsSUFBQWhZLGFBQVlxTCxFQUFNNkQsR0FDbkMsR0FBSThJLEVBQ0YsT0FBT0EsQ0FFWCxDQUdBLE9BQU8sSUFBQWpZLGNBQWFtUCxJQVVULEVBQUFoUCxrQkFBcUJnUCxJLFFBQ2hDLElBQ0UsTUFBTStJLEVBQWlCL0ksRUFBTXhELFFBQVEsSUFBSXdMLEtBQ3pDLElBQUtlLEVBQWdCLE1BQU8sR0FHNUIsTUFBTUMsRUFBUUQsRUFBZXJNLGNBQzNCLElBQUl1TCwyREFHTixHQUFJZSxFQUNGLE9BQU8sSUFBQTlYLGdCQUF3QyxRQUF6QixFQUFpQixRQUFqQixFQUFBOFgsRUFBTXJNLG1CQUFXLGVBQUV2RCxjQUFNLFFBQUksR0FFdkQsQ0FBRSxNQUFPNUksR0FDUCxFQUFBQyxPQUFPRCxNQUFNLGtEQUFtREEsRUFDbEUsQ0FFQSxNQUFPLElBVUksRUFBQVMsa0JBQXFCK08sSSxRQUNoQyxJQUNFLE1BQU13SSxFQUFXeEksRUFBTXhELFFBQVEsWUFDL0IsSUFBS2dNLEVBQVUsTUFBTyxHQUV0QixNQUFNRyxFQUFTSCxFQUFTOUwsY0FBYyxVQUN0QyxHQUFJaU0sRUFDRixPQUFPLElBQUF6WCxnQkFBeUMsUUFBMUIsRUFBa0IsUUFBbEIsRUFBQXlYLEVBQU9oTSxtQkFBVyxlQUFFdkQsY0FBTSxRQUFJLEdBRXhELENBQUUsTUFBTzVJLEdBQ1AsRUFBQUMsT0FBT0QsTUFBTSxvQ0FBcUNBLEVBQ3BELENBRUEsTUFBTyxHLGdCQzlMVDlCLE9BQU9DLGVBQWVQLEVBQVMsYUFBYyxDQUFFUSxPQUFPLElBQ3RELE1BQU1FLEVBQWdCLEVBQVEsS0FROUJWLEVBQUEsUUFQQSxTQUFlbUIsR0FDWCxLQUFLLEVBQUlULEVBQWNVLFNBQVNELEdBQzVCLE1BQU1FLFVBQVUsZ0JBRXBCLElBQUl3WixFQUNKLE9BQU96TCxXQUFXQyxJQUFJd0wsRUFBSWxCLFNBQVN4WSxFQUFLSixNQUFNLEVBQUcsR0FBSSxPQUFTLEdBQUs4WixJQUFNLEdBQU0sSUFBT0EsSUFBTSxFQUFLLElBQVUsSUFBSkEsR0FBV0EsRUFBSWxCLFNBQVN4WSxFQUFLSixNQUFNLEVBQUcsSUFBSyxPQUFTLEVBQU8sSUFBSjhaLEdBQVdBLEVBQUlsQixTQUFTeFksRUFBS0osTUFBTSxHQUFJLElBQUssT0FBUyxFQUFPLElBQUo4WixHQUFXQSxFQUFJbEIsU0FBU3hZLEVBQUtKLE1BQU0sR0FBSSxJQUFLLE9BQVMsRUFBTyxJQUFKOFosR0FBWUEsRUFBSWxCLFNBQVN4WSxFQUFLSixNQUFNLEdBQUksSUFBSyxLQUFPLGNBQWlCLElBQU84WixFQUFJLFdBQWUsSUFBT0EsSUFBTSxHQUFNLElBQU9BLElBQU0sR0FBTSxJQUFPQSxJQUFNLEVBQUssSUFBVSxJQUFKQSxFQUMvYSxDLGNDUEEsU0FBU0MsRUFBRTVKLEVBQUdQLEVBQUdDLEVBQUdtSyxHQUNoQixPQUFRN0osR0FDSixLQUFLLEVBQ0QsT0FBUVAsRUFBSUMsR0FBT0QsRUFBSW9LLEVBQzNCLEtBQUssRUFJTCxLQUFLLEVBQ0QsT0FBT3BLLEVBQUlDLEVBQUltSyxFQUhuQixLQUFLLEVBQ0QsT0FBUXBLLEVBQUlDLEVBQU1ELEVBQUlvSyxFQUFNbkssRUFBSW1LLEVBSTVDLENBQ0EsU0FBU0MsRUFBS3JLLEVBQUcyQyxHQUNiLE9BQVEzQyxHQUFLMkMsRUFBTTNDLElBQU8sR0FBSzJDLENBQ25DLENBZkFoVCxPQUFPQyxlQUFlUCxFQUFTLGFBQWMsQ0FBRVEsT0FBTyxJQXNFdERSLEVBQUEsUUF0REEsU0FBY3VRLEdBQ1YsTUFBTTBLLEVBQUksQ0FBQyxXQUFZLFdBQVksV0FBWSxZQUN6Q0MsRUFBSSxDQUFDLFdBQVksV0FBWSxXQUFZLFVBQVksWUFDckRDLEVBQVcsSUFBSS9MLFdBQVdtQixFQUFNOUcsT0FBUyxHQUMvQzBSLEVBQVNqSixJQUFJM0IsR0FDYjRLLEVBQVM1SyxFQUFNOUcsUUFBVSxJQUV6QixNQUFNMlIsR0FETjdLLEVBQVE0SyxHQUNRMVIsT0FBUyxFQUFJLEVBQ3ZCNFIsRUFBSXpTLEtBQUswUyxLQUFLRixFQUFJLElBQ2xCRyxFQUFJLElBQUkxRixNQUFNd0YsR0FDcEIsSUFBSyxJQUFJemEsRUFBSSxFQUFHQSxFQUFJeWEsSUFBS3phLEVBQUcsQ0FDeEIsTUFBTUksRUFBTSxJQUFJZ1IsWUFBWSxJQUM1QixJQUFLLElBQUl3SixFQUFJLEVBQUdBLEVBQUksS0FBTUEsRUFDdEJ4YSxFQUFJd2EsR0FDQ2pMLEVBQVUsR0FBSjNQLEVBQWEsRUFBSjRhLElBQVUsR0FDckJqTCxFQUFVLEdBQUozUCxFQUFhLEVBQUo0YSxFQUFRLElBQU0sR0FDN0JqTCxFQUFVLEdBQUozUCxFQUFhLEVBQUo0YSxFQUFRLElBQU0sRUFDOUJqTCxFQUFVLEdBQUozUCxFQUFhLEVBQUo0YSxFQUFRLEdBRW5DRCxFQUFFM2EsR0FBS0ksQ0FDWCxDQUNBdWEsRU
2FBRUYsRUFBSSxHQUFHLElBQTRCLEdBQXBCOUssRUFBTTlHLE9BQVMsR0FBVWIsS0FBSzZTLElBQUksRUFBRyxJQUN0REYsRUFBRUYsRUFBSSxHQUFHLElBQU16UyxLQUFLOFMsTUFBTUgsRUFBRUYsRUFBSSxHQUFHLEtBQ25DRSxFQUFFRixFQUFJLEdBQUcsSUFBNEIsR0FBcEI5SyxFQUFNOUcsT0FBUyxHQUFVLFdBQzFDLElBQUssSUFBSTdJLEVBQUksRUFBR0EsRUFBSXlhLElBQUt6YSxFQUFHLENBQ3hCLE1BQU0rYSxFQUFJLElBQUkzSixZQUFZLElBQzFCLElBQUssSUFBSWIsRUFBSSxFQUFHQSxFQUFJLEtBQU1BLEVBQ3RCd0ssRUFBRXhLLEdBQUtvSyxFQUFFM2EsR0FBR3VRLEdBRWhCLElBQUssSUFBSUEsRUFBSSxHQUFJQSxFQUFJLEtBQU1BLEVBQ3ZCd0ssRUFBRXhLLEdBQUs2SixFQUFLVyxFQUFFeEssRUFBSSxHQUFLd0ssRUFBRXhLLEVBQUksR0FBS3dLLEVBQUV4SyxFQUFJLElBQU13SyxFQUFFeEssRUFBSSxJQUFLLEdBRTdELElBQUlILEVBQUlrSyxFQUFFLEdBQ05qSyxFQUFJaUssRUFBRSxHQUNOM0osRUFBSTJKLEVBQUUsR0FDTjFKLEVBQUkwSixFQUFFLEdBQ050UixFQUFJc1IsRUFBRSxHQUNWLElBQUssSUFBSS9KLEVBQUksRUFBR0EsRUFBSSxLQUFNQSxFQUFHLENBQ3pCLE1BQU1ELEVBQUl0SSxLQUFLOFMsTUFBTXZLLEVBQUksSUFDbkJ5SyxFQUFLWixFQUFLaEssRUFBRyxHQUFLOEosRUFBRTVKLEVBQUdELEVBQUdNLEVBQUdDLEdBQUs1SCxFQUFJcVIsRUFBRS9KLEdBQUt5SyxFQUFFeEssS0FBUSxFQUM3RHZILEVBQUk0SCxFQUNKQSxFQUFJRCxFQUNKQSxFQUFJeUosRUFBSy9KLEVBQUcsTUFBUSxFQUNwQkEsRUFBSUQsRUFDSkEsRUFBSTRLLENBQ1IsQ0FDQVYsRUFBRSxHQUFNQSxFQUFFLEdBQUtsSyxJQUFPLEVBQ3RCa0ssRUFBRSxHQUFNQSxFQUFFLEdBQUtqSyxJQUFPLEVBQ3RCaUssRUFBRSxHQUFNQSxFQUFFLEdBQUszSixJQUFPLEVBQ3RCMkosRUFBRSxHQU
2FNQSxFQUFFLEdBQUsxSixJQUFPLEVBQ3RCMEosRUFBRSxHQUFNQSxFQUFFLEdBQUt0UixJQUFPLENBQzFCLENBQ0EsT0FBT3dGLFdBQVdDLEdBQUc2TCxFQUFFLElBQU0sR0FBSUEsRUFBRSxJQUFNLEdBQUlBLEVBQUUsSUFBTSxFQUFHQSxFQUFFLEdBQUlBLEVBQUUsSUFBTSxHQUFJQSxFQUFFLElBQU0sR0FBSUEsRUFBRSxJQUFNLEVBQUdBLEVBQUUsR0FBSUEsRUFBRSxJQUFNLEdBQUlBLEVBQUUsSUFBTSxHQUFJQSxFQUFFLElBQU0sRUFBR0EsRUFBRSxHQUFJQSxFQUFFLElBQU0sR0FBSUEsRUFBRSxJQUFNLEdBQUlBLEVBQUUsSUFBTSxFQUFHQSxFQUFFLEdBQUlBLEVBQUUsSUFBTSxHQUFJQSxFQUFFLElBQU0sR0FBSUEsRUFBRSxJQUFNLEVBQUdBLEVBQUUsR0FDbE8sQywrRkNyRUEsZUFDQSxTQUNBLFNBQ0EsU0FPYSxFQUFBblcscUJBQXVCLEtBQ2xDLElBQ0UsTUFBTThXLEdBQWUsSUFBQXJGLGlDQUVyQixJQUFLcUYsRUFFSCxPQURBLEVBQUF4WixPQUFPd0MsU0FBUyw4REFDVCxLQUdULEVBQUF4QyxPQUFPbUIsSUFBSSx1Q0FFWCxJQUNFLE1BQU1oQyxHQUFVLElBQUFrRCxlQUFjbVgsR0FHeEIzWixFQUFJVCxPQU1WLE9BTEFTLEVBQUUsRUFBQUMscUJBQXVCRCxFQUFFLEVBQUFDLHNCQUF3QixDQUFDLEVBQ3BERCxFQUFFLEVBQUFDLHFCQUFxQlgsUUFBVUEsRUFDakNVLEVBQUUsRUFBQUMscUJBQXFCYSxPQUFTNlksRUFFaEMsRUFBQXhaLE9BQU9tQixJQUFJLG9DQUNKaEMsQ0FDVCxDQUFFLE1BQU9ZLEdBRVAsT0FEQSxFQUFBQyxPQUFPd0MsU0FBUyw0QkFBNkJ6QyxHQUN0QyxJQUNULENBQ0YsQ0FBRSxNQUFPQSxHQUVQLE9BREEsRUFBQUMsT0FBT3dDLFNBQVMsK0JBQWdDekMsR0FDekMsSUFDVCxFLDZGQ3hDRixlQU1hLEVBQUFQLG1CQUFzQkwsSUFDakMsSUFDRSxNQUFNLE1BQUV5QixFQUFLLFVBQUVHLEdBQWM1QixFQUN2QnFULEdBQVcsSUFBQXBLLGVBRWpCLE9BQUt4SCxhQUFLLEVBQUxBLEVBQU9FLGNBQWVGLGFBQUssRUFBTEEsRUFBT1UsYUFBY1AsYUFBUyxFQUFUQSxFQUFXRSxhQUlwRCxDQUNMSCxXQUFZRixFQUFNRSxXQUNsQlEsVUFBV1YsRUFBTVUsVUFDakJMLFlBQWFGLEVBQVVFLFlBQ3ZCMkgsVUFBVzRKLGFBQVEsRUFBUkEsRUFBVTVKLFVBQ3JCM0csT0FBUXVRLGFBQVEsRUFBUkEsRUFBVXZRLFFBUlgsSUFVWCxDQUFFLE1BQU9sQyxHQUVQLE9BREEsRUFBQUMsT0FBT0QsTUFBTSxxQ0FBc0NBLEdBQzVDLElBQ1QsRSxvS0NyQlcsRUFBQXFTLGNBQWdCLENBQzNCRyxXQUFZLHNDQUNaRixRQUFTLDhDQUNUQyxNQUFPLHlCQUdJLEVBQUF3QyxjQUFnQixnQkFDaEIsRUFBQUMsb0JBQXNCLHNCQUd0QixFQUFBalYsb0JBQXNCLGNBR3RCLEVBQUFtUyxnQkFBa0IsbUIsd0ZDZC9CLGVBQ0EsU0FDQSxTQXdCYSxFQUFBckwsY0FBaUI4RSxJLFFBQzVCLE1BQU1vSCxFQUFXLElBQUlNLFNBQVMxSCxHQUN4QnNMLEVBQWlDLENBQUMsRUFDbENDLEVBQXNDLENBQUMsRUFDdkN3QyxFQUF1QyxDQUFDLEVBR3hDckksRUFBTyxJQUFJc0ksSUFDakIsSUFFRSxJQUFLLE1BQU1yUSxLQUE2QixRQUF0QixLQUFDeUosR0FBaUIxQixZQUFJLHlCQUFRLEdBQzlDQSxFQUFLNkUsSUFBSXZOLE9BQU9XLEdBRXBCLENBQUUsTUFBTzlCLEdBQ1AsRUFBQXZILE9BQU9ELE1BQU0sa0VBQW1Fd0gsR0FFaEZ1TCxFQUFTOU0sU0FBUSxDQUFDMlQsRUFBR3RRLElBQVErSCxFQUFLNkUsSUFBSTVNLElBQ3hDLENBNEJBK0gsRUFBS3BMLFNBQVNxRCxJLFFBQ1osTUFBTXVRLEVBM0JhLENBQUN2USxJLFFBQ3BCLElBQ0UsTUFBTXVRLEVBQWlDLFFBQXZCLEdBQUQsRUFBQzlHLEdBQWlCK0csY0FBTSxzQkFBR3hRLEdBQzFDLEdBQUltSyxNQUFNQyxRQUFRbUcsR0FBUyxPQUFPQSxDQUNwQyxDQUFFLE1BQU9yUyxHQUNQLEVBQUF2SCxPQUFPRCxNQUFNLG1FQUFvRXdILEVBQ25GLENBRUEsTUFBTXVTLEVBQW1CLEdBSXpCLE9BSEFoSCxFQUFTOU0sU0FBUSxDQUFDN0gsRUFBTzRiLEtBQ25CQSxJQUFNMVEsR0FBS3lRLEVBQVV0YixLQUFLTCxNQUV6QjJiLEdBZVFFLENBQWEzUSxHQUd0QjRRLEVBQVcsVUFmRCxDQUFDcEwsSSxNQUNqQixJQUVFLE9BQTBCLFFBQW5CLEVBQUN6UCxPQUFlOGEsV0FBRyxlQUFFQyxRQUFVL2EsT0FBZThhLElBQUlDLE9BQU90TCxHQUFLQSxFQUFFZ0osUUFBUSw0QkFBNkIsT0FDOUcsQ0FBRSxNQUFPdFEsR0FFUCxPQURBLEVBQUF2SCxPQUFPRCxNQUFNLHFEQUFzRHdILEdBQzVEc0gsQ0FDVCxHQVEyQnVMLENBQVUvUSxPQUMvQmdSLEVBQVczTyxFQUFLcUssaUJBQWlCa0UsR0FFakNLLEVBQVVELEVBQVMsR0FLbkJFLElBQU9ELGFBQU8sRUFBUEEsRUFBU0UsVUFBVyxJQUFJM2IsY0FDL0IyUixHQUFtRSxRQUE1RCxFQUErQyxRQUEvQyxFQUFDOEosYUFBTyxFQUFQQSxFQUEwQzlKLFlBQUksZUFBRTNSLG1CQUFXLHlCQUFRLEdBQzNFNGIsRUFBMkIsV0FBUkYsSUFBNkUsS0FBeERELGFBQU8sRUFBUEEsRUFBMkNJLFVBR3pGLEdBQVksVUFBUkgsR0FBNEIsV0FBVC9KLEVBQ3JCLE9BSUYsTUFpQk1tSyxFQUFxQkMsSSxVQUN6QixNQUFNQyxFQUFNblMsT0FBT2tTLEVBQUd6YyxPQUN0QixJQUFLLFFBQVFrWixLQUFLd0QsR0FBTSxPQUFPQSxFQUMvQixJQUNFLE1BQU0vTyxFQUFVOE8sRUFBRzdPLFFBQVEsU0FDM0IsR0FBSUQsRUFBUyxDQUNYLE1BQU1nUCxFQUFRaFAsRUFBUWlQLFdBQVUsR0FDaENELEVBQU0vRSxpQkFBaUIsU0FBUy9QLFNBQVNrSixHQUFNQSxFQUFFOEwsV0FDakQsTUFBTXBELEVBQXdCLFFBQWpCLEVBQUFrRCxFQUFNNU8sbUJBQVcsZUFBRXZELE9BQ2hDLEdBQUlpUCxFQUFNLE9BQU9BLENBQ25CLENBQ0EsR0FBSWdELEVBQUduSyxHQUFJLENBQ1QsTUFBTXdLLEVBQVd2UCxFQUFLTyxjQUFjLGNBQWMyTyxFQUFHbkssUUFDckQsR0FBeUIsUUFBckIsRUFBQXdLLGFBQVEsRUFBUkEsRUFBVS9PLG1CQUFXLGVBQUV2RCxPQUFRLE9BQU9zUyxFQUFTL08sWUFBYXZELE1BQ2xFLENBQ0EsTUFBTXVTLEVBQU9OLEVBQUdPLFlBQ2hCLEdBQXFCLFFBQWpCLEVBQUFELGFBQUksRUFBSkEsRUFBTWhQLG1CQUFXLGVBQUV2RCxPQUFRLE9BQU91UyxFQUFLaFAsWUFBYXZELE1BQzFELENBQUUsTUFBT3BCLEdBQUssRUFBQXZILE9BQU9ELE1BQU0sdUNBQXdDd0gsRUFBSSxDQUN2RSxPQUFPc1QsR0FHSE8sRUFBb0IsQ0FBQzNPLEVBQXdCNkQsSyxNQUNqRCxJQUFLLFFBQVErRyxLQUFLL0csR0FBTSxPQUFPQSxFQUMvQixNQUFNK0ssRUFBTTdILE1BQU1pRCxLQUFLaEssRUFBSVUsU0FBU21PLE1BQU1DLEdBQU1BLEVBQUVwZCxRQUFVbVMsSUFDNUQsT0FBdUIsUUFBaEIsRUFBQStLLGFBQUcsRUFBSEEsRUFBS25QLG1CQUFXLGVBQUV2RCxTQUFVMkgsR0FJckMsR0FBWSxVQUFSaUssR0FBNEIsYUFBVC9KLEVBY3ZCLEdBQVksVUFBUitKLEd
2BQTRCLFVBQVQvSixFQVF2QixHQUFJaUssRUFBSixDQUNFLE1BQU1oTyxFQUFNNk4sRUFDWnRELEVBQVUzTixHQUFPdVEsRUFBTzRCLEtBQUtoRCxHQUFNNEMsRUFBa0IzTyxFQUFLL0QsT0FBTzhQLEtBRW5FLE1BRUEsR0FBWSxXQUFSK0IsRUFBSixDQU9BLEdBQVksVUFBUkEsR0FBNEIsU0FBVC9KLEVBQWlCLENBRXRDLE1BQU1pTCxFQUFtQixHQUNuQkMsRUFBa0IsR0E0QnhCLE9BM0JBOUIsRUFBTzVULFNBQVN3UyxJQUNkLElBQ0UsR0FBb0Isb0JBQVQ3RSxNQUF3QjZFLGFBQWE3RSxLQUFNLENBQ3BELE1BQU0zTSxHQUFRd1IsRUFBRXhSLE1BQVEsSUFBSTJCLE9BQ3RCZ1QsRUFBeUIsaUJBQVhuRCxFQUFFbUQsS0FBb0JuRCxFQUFFbUQsS0FBTyxFQUluRCxJQUFLM1UsR0FBaUIsSUFBVDJVLEVBQ1gsT0FFRkYsRUFBU2pkLEtBQUtnYSxHQUNka0QsRUFBU2xkLEtBaEdELENBQUNnYSxJQUNmLElBQ0UsR0FBb0Isb0JBQVQ3RSxNQUF3QjZFLGFBQWE3RSxLQUM5QyxNQUFPLENBQ0xpSSxTQUFVcEQsRUFBRXhSLE1BQVEsZ0JBQ3BCMlUsS0FBd0IsaUJBQVhuRCxFQUFFbUQsS0FBb0JuRCxFQUFFbUQsVUFBTzNSLEVBQzVDd0csTUFBT2dJLGFBQUMsRUFBREEsRUFBV2hJLFlBQVF4RyxFQUdoQyxDQUFFLE1BQU96QyxHQUNQLEVBQUF2SCxPQUFPRCxNQUFNLDhCQUErQndILEVBQzlDLENBQ0EsT0FBT2lSLEdBb0ZhcUQsQ0FBUXJELEdBQ3hCLENBQ0YsQ0FBRSxNQUFPalIsR0FDUCxFQUFBdkgsT0FBT0QsTUFBTSxvQ0FBcUN3SCxFQUNwRCxLQUVFa1UsRUFBU3JVLFNBQ1hxUyxFQUFhcFEsR0FBT29TLFFBR2xCQyxFQUFTdFUsT0FBUyxFQUNwQjRQLEVBQVUzTixHQUFPcVMsRUFFakIxRSxFQUFVM04sR0FBT3FTLEVBQVMsSUFBTSxLQUdwQyxDQUdBLEdBQUk5QixFQUFPeFMsT0FBUyxFQUNsQjRQLEVBQVUzTixHQUFPdVEsRUFBTzRCLEtBQUtoRCxHQUFNOVAsT0FBTzhQLFNBQ3JDLENBQ0wsTUFBTXFDLEVBQU1qQixFQUFPLEdBQ2JrQyxPQUFjOVIsSUFBUjZRLE9BQW9CN1EsRUFBWXRCLE9BQU9tUyxHQUNuRDdELEVBQVUzTixHQUFlLEtBQVJ5UyxFQUFhLEtBQU9BLENBQ3ZDLENBM0NBLEtBTEEsQ0FDRSxNQUFNclAsRUFBTTZOLEVBQ05PLEVBQU1qQixFQUFPLEdBQ25CNUMsRUFBVTNOLFFBQWVXLElBQVI2USxFQUFvQixLQUFPTyxFQUFrQjNPLEVBQUsvRCxPQUFPbVMsR0FFNUUsS0FuQkEsQ0FDRSxNQUFNa0IsRUFBVXZJLE1BQU1pRCxLQUFLNEQsR0FBVWlCLE1BQ2xDVixHQUFRQSxFQUF3Qm1CLFVBRW5DL0UsRUFBVTNOLEdBQU8wUyxFQUFVcEIsRUFBa0JvQixRQUFXL1IsQ0FFMUQsS0FwQkEsQ0FDRSxNQUFNK1IsRUFBVXZJLE1BQU1pRCxLQUFLNEQsR0FBVTJCLFFBQ2xDcEIsR0FBUUEsRUFBd0JtQixVQUUvQkEsRUFBUTNVLE9BQVMsRUFDbkI0UCxFQUFVM04sR0FBTzBTLEVBQVFQLEtBQUtaLEdBQU9ELEVBQWtCQyxLQUMzQixJQUFuQm1CLEVBQVEzVSxPQUNqQjRQLEVBQVUzTixHQUFPc1IsRUFBa0JvQixFQUFRLElBRTNDL0UsRUFBVTNOLEdBQU91USxFQUFPeFMsT0FBUyxHQUFJLEVBR3pDLEtBb0VGLElBQ0UsTUFBTTZVLEVBQWdCdlEsRUFBS3FLLGlCQUFpQixnQ0FDdENtRyxFQUErQixDQUFDLEVBQ3RDLElBQUssSUFBSTNkLEVBQUksRUFBR0EsRUFBSTBkLEVBQWM3VSxPQUFRN0ksSUFBSyxDQUM3QyxNQUFNcWMsRUFBS3FCLEVBQWMxZCxHQUNuQjBTLEVBQUkySixFQUFHNVQsS0FDUmlLLElBQUsySixFQUFHdUIsV0FDYkQsRUFBS2pMLElBQU1pTCxFQUFLakwsSUFBTSxHQUFLLEVBQzdCLENBQ0FoVCxPQUFPbVQsS0FBSzhLLEdBQU1sVyxTQUFTZ0IsSUFDbkJBLEtBQVFnUSxJQUNaQSxFQUFVaFEsR0FBUWtWLEVBQUtsVixHQUFRLEdBQUksTUFHekMsQ0FBRSxNQUFPTyxHQUNQLEVBQUF2SCxPQUFPRCxNQUFNLDhDQUErQ3dILEVBQzlELENBR0EsSUFDRSxNQUFNNlUsRUFBZTFRLEVBQUtxSyxpQkFBaUIsMEJBQzNDLElBQUssSUFBSXhYLEVBQUksRUFBR0EsRUFBSTZkLEVBQWFoVixPQUFRN0ksSUFBSyxDQUM1QyxNQUFNcWMsRUFBS3dCLEVBQWE3ZCxHQUNsQjBTLEVBQUkySixFQUFHNVQsS0FDUmlLLElBQUsySixFQUFHdUIsV0FDUGxMLEtBQUsrRixJQUFZQSxFQUFVL0YsR0FBSyxJQUN4QyxDQUNGLENBQUUsTUFBTzFKLEdBQ1AsRUFBQXZILE9BQU9ELE1BQU0sOENBQStDd0gsRUFDOUQsQ0FHQSxJQUNFdEosT0FBT21ULEtBQUs0RixHQUFXaFIsU0FBUytULElBQzlCLE1BQU12QixFQUFJeEIsRUFBVStDLEdBQ3BCLEdBQWlCLGlCQUFOdkIsR0FBa0IsYUFBYW5CLEtBQUswQyxHQUFJLENBQ2pELE1BQU1sTCxFQUFJMkosRUFBRTdQLE9BQ1JrRyxFQUFFd04sV0FBVyxnQkFHZnJGLEVBQVUrQyxHQUFLLENBQUV2SixLQUFNLFlBQWE4TCxRQUFTek4sR0FFakQsSUFFSixDQUFFLE1BQU90SCxHQUNQLEVBQUF2SCxPQUFPRCxNQUFNLHFDQUFzQ3dILEVBQ3JELENBR0EsTUFBTWdWLEVBQVM3USxFQUFLcUssaUJBQWlCLDJCQUNyQyxJQUFLLElBQUl4WCxFQUFJLEVBQUdBLEVBQUlnZSxFQUFPblYsT0FBUTdJLElBQUssQ0FDdEMsTUFDTWdSLEVBRFVnTixFQUFPaGUsR0FFakJnVixFQUFZaEUsRUFBTXZJLEtBR3hCLElBQUt3VixFQUFtQmpOLEVBQU9nRSxFQUFXeUQsR0FDeEMsU0FJRixNQUFNekcsRUFBWWtNLEVBQWtCL1EsRUFBTTZELElBRXRDLElBQUF6SSxxQkFBb0J5SSxFQUFPZ0IsR0FFekJnRCxLQUFheUQsVUFDUkEsRUFBVXpELEdBT2pCaEQsSUFDRjBHLEVBQVkxRCxHQUFhaEQsRUFFN0IsQ0FNQSxJQUNFLEdBQUkseUJBQTBCeUcsSUFFWixJQURBQSxFQUFnQyxxQkFDMUIsQ0FDcEIsTUFBTXVCLEVBQVF0QixFQUFrQyxxQkFDaERELEVBQWdDLHFCQUFJdUIsSUFBUyxDQUMvQyxDQUVKLENBQUUsTUFBT2hSLEdBQ1AsRUFBQXZILE9BQU9ELE1BQU0sK0VBQWdGd0gsRUFDL0YsQ0FHQSxNQUFPLENBQUV5UCxZQUFXQyxjQUFhOUQsTUFBT3NHLElBVzFDLE1BQU0rQyxFQUFxQixDQUN6QmpOLEVBQ0FnRSxFQUNBeUQsTUFHS3pELElBR0RoRSxFQUFNNE0sVUFDUyxXQUFmNU0sRUFBTWlCLFFBR0xrTSxFQUFlbk4sSUFHZGd
2FLEtBQWF5RCxFQVdmMEYsRUFBa0JuTixJLE1BQ3RCLElBQ0UsTUFBTW9OLEVBQWdCdmQsT0FBT3dkLGlCQUFpQnJOLEdBQzlDLFFBQzRCLFNBQTFCb04sRUFBY0UsU0FDZSxXQUE3QkYsRUFBY0csWUFDcUIsT0FBYixRQUFyQixFQUFBSCxFQUFjSSxlQUFPLFFBQUksS0FFOUIsQ0FBRSxNQUFPeFYsR0FHUCxPQUZBLEVBQUF2SCxPQUFPRCxNQUFNLHVDQUF3Q3dILElBRTlDLENBQ1QsR0FXSWtWLEVBQW9CLENBQ3hCL1EsRUFDQTZELEtBR0EsTUFBTXlOLEdBQW9CLElBQUFDLDhCQUE2QnZSLEVBQU02RCxHQUM3RCxHQUFJeU4sRUFBbUIsT0FBT0EsRUFHOUIsTUFBTS9CLEVBQVdpQyxFQUF1QnhSLEVBQU02RCxHQUM5QyxHQUFJMEwsRUFBVSxPQUFPLElBQUF4YSxnQkFBZXdhLEdBR3BDLE1BQU1rQyxFQUFjQyxFQUFlN04sR0FDbkMsR0FBSTROLEVBQWEsT0FBTyxJQUFBMWMsZ0JBQWUwYyxHQUd2QyxNQUFNRSxFQUFnQkMsRUFBaUIvTixHQUN2QyxHQUFJOE4sRUFBZSxPQUFPLElBQUE1YyxnQkFBZTRjLEdBR3pDLE1BQU1FLEVBQWlCLEVBQUFDLGFBQWFqZCxrQkFBa0JnUCxHQUN0RCxHQUFJZ08sRUFBZ0IsT0FBT0EsRUFJM0IsT0FEb0IsRUFBQUMsYUFBYWhkLGtCQUFrQitPLElBRzVDLElBVUgyTixFQUF5QixDQUM3QnhSLEVBQ0E2RCxLLE1BRUEsSUFBS0EsRUFBTWtCLEdBQUksTUFBTyxHQUV0QixNQUFNZ04sRUFBa0IvUixFQUFLTyxjQUFjLGNBQWNzRCxFQUFNa0IsUUFDL0QsT0FBT2dOLElBQThDLFFBQTNCLEVBQUFBLEVBQWdCdlIsbUJBQVcsZUFBRXZELFNBQWdCLElBU25FeVUsRUFBa0I3TixJLE1BQ3RCLE1BQU00TixFQUFjNU4sRUFBTXhELFFBQVEsU0FDbEMsSUFBS29SLEVBQWEsTUFBTyxHQUd6QixNQUFNTyxFQUFjUCxFQUFZcEMsV0FBVSxHQUNwQzRDLEVBQWNELEVBQVkzSCxpQkFBaUIsMkJBQ2pELElBQUssSUFBSW9ELEVBQUksRUFBR0EsRUFBSXdFLEVBQVl2VyxPQUFRK1IsSUFDdEN3RSxFQUFZeEUsR0FBRzZCLFNBR2pCLE9BQThCLFFBQXZCLEVBQUEwQyxFQUFZeFIsbUJBQVcsZUFBRXZELFNBQVUsSUFTdEMyVSxFQUFvQi9OLEksTUFDeEIsSUFBSXFPLEVBQWNyTyxFQUFNc08sdUJBQ3hCLEtBQU9ELEdBQWEsQ0FDbEIsR0FBNEIsVUFBeEJBLEVBQVlwRCxRQUNkLE9BQThCLFFBQXZCLEVBQUFvRCxFQUFZMVIsbUJBQVcsZUFBRXZELFNBQVUsR0FFNUNpVixFQUFjQSxFQUFZQyxzQkFDNUIsQ0FDQSxNQUFPLEcscUZDcGNULGVBb0JBLG1CQU9FLFdBQUFuZCxDQUFZQyxHQU5KLEtBQUFtZCxNQUF1QixHQUN2QixLQUFBQyxZQUFzQixFQUV0QixLQUFBQyxXQUF1QixHQUN2QixLQUFBQyxlQUF5QixFQUcvQmpnQixLQUFLMkMsT0FBUyxDQUNaNFEsbUJBQW9CNVEsRUFBTzRRLG9CQUFzQixFQUNqREMsV0FBWTdRLEVBQU82USxZQUFjLEVBQ2pDQyxhQUFjOVEsRUFBTzhRLGNBQWdCLElBQ3JDQyxhQUFjL1EsRUFBTytRLGNBQWdCLEtBR3ZDLEVBQUExUixPQUFPbUIsSUFBSSxzQ0FBdUNuRCxLQUFLMkMsT0FDekQsQ0FTQSxhQUFNc1MsQ0FBUW5CLEVBQWNOLEVBQXFCeFQsS0FBSzJDLE9BQU82USxZQUMzRCxPQUFPLElBQUkwTSxTQUFRLENBQUNDLEVBQVNDLEtBRXZCcGdCLEtBQUs4ZixNQUFNMVcsUUFBVXBKLEtBQUsyQyxPQUFPK1EsZUFDbkMsRUFBQTFSLE9BQU9xQixLQUFLLHdDQUNackQsS0FBSzhmLE1BQU14VyxTQUdiLE1BQU0xRixFQUFxQixDQUN6QjZPLEdBQUksWUFBV3pTLEtBQUtpZ0IsZUFDcEJuTSxVQUNBMEQsVUFBV3JRLEtBQUtELE1BQ2hCbVosV0FBWSxFQUNaN00sY0FJRDVQLEVBQWN1YyxRQUFVQSxFQUN4QnZjLEVBQWN3YyxPQUFTQSxFQUV4QnBnQixLQUFLOGYsTUFBTXRmLEtBQUtvRCxHQUNoQixFQUFBNUIsT0FBT21CLElBQUksU0FBU1MsRUFBTTZPLG9DQUFvQ3pTLEtBQUs4ZixNQUFNMVcsVUFHcEVwSixLQUFLK2YsWUFDUi9mLEtBQUtzZ0IsaUJBR1gsQ0FLUSxrQkFBTUEsRyxRQUNaLElBQUl0Z0IsS0FBSytmLFlBQW9DLElBQXRCL2YsS0FBSzhmLE1BQU0xVyxPQUFsQyxDQU9BLElBSEFwSixLQUFLK2YsWUFBYSxFQUNsQixFQUFBL2QsT0FBT21CLElBQUksNkJBRUpuRCxLQUFLOGYsTUFBTTFXLE9BQVMsR0FBRyxDQUM1QixNQUFNeEYsRUFBUTVELEtBQUs4ZixNQUFNLEdBR3pCLEdBQUk5ZixLQUFLdWdCLGVBQ1AsSUFFRXZnQixLQUFLOGYsTUFBTXhXLFFBR1h0SixLQUFLd2dCLHdCQUdDeGdCLEtBQUs4RCxVQUFVRixHQUVyQixFQUFBNUIsT0FBT21CLElBQUksU0FBU1MsRUFBTTZPLDhCQUd6QjdPLGFBQUssRUFBTEEsRUFBZXVjLFVBQ2J2YyxFQUFjdWMsU0FFbkIsQ0FBRSxNQUFPcGUsR0FDUCxFQUFBQyxPQUFPRCxNQUFNLDBCQUEwQjZCLEVBQU02TyxNQUFPMVEsSUFHOUIsUUFBakIsRUFBQTZCLGFBQUssRUFBTEEsRUFBT3ljLGtCQUFVLFFBQUksSUFBdUIsUUFBakIsRUFBQXpjLGFBQUssRUFBTEEsRUFBTzRQLGtCQUFVLFFBQUksSUFDbkQ1UCxFQUFNeWMsYUFDTixFQUFBcmUsT0FBT21CLElBQUksa0JBQWtCUyxFQUFNNk8sZUFBZTdPLEVBQU15YyxjQUFjemMsRUFBTTRQLGVBRzVFM0gsWUFBVyxLQUNUN0wsS0FBSzhmLE1BQU1XLFFBQVE3YyxHQUNkNUQsS0FBSytmLFlBQ1IvZixLQUFLc2dCLGlCQUVOdGdCLEtBQUsyQyxPQUFPOFEsYUFBZTdQLEVBQU15YyxjQUVwQyxFQUFBcmUsT0FBT0QsTUFBTSxTQUFTNkIsRUFBTTZPLG1CQUFtQjdPLEVBQU00UCx1QkFHaEQ1UCxhQUFLLEVBQUxBLEVBQWV3YyxTQUNqQnhjLEVBQWN3YyxPQUFPcmUsR0FHNUIsWUFHTS9CLEtBQUswZ0Isa0JBRWYsQ0FFQTFnQixLQUFLK2YsWUFBYSxFQUNsQixFQUFBL2QsT0FBT21CLElBQUksNkJBekRYLENBMERGLENBT1EsWUFBQW9kLEdBRU4sT0FEQXZnQixLQUFLMmdCLHVCQUNFM2dCLEtBQUtnZ0IsV0FBVzVXLE9BQVNwSixLQUFLMkMsT0FBTzRRLGtCQUM5QyxDQUtRLGVBQUFpTixHQUNOeGdCLEtBQUtnZ0IsV0FBV3hmLEtBQUsyRyxLQUFLRCxNQUM1QixDQUtRLG9CQUFBeVosR0FDTixNQUFNQyxFQUFlelosS0FBS0QsTUFBUSxJQUNsQ2xILEtBQUtnZ0IsV0FBYWhnQixLQUFLZ2dCLFdBQVdoQyxRQUFPNkMsR0FBUUEsRUFBT0QsR0FDMUQsQ0FLUSxzQkFBTUYsR0FDWixNQUFNSSxFQUFXOWdCLEtBQUsrZ0Isb0JBQ3RCLEVBQUEvZSxPQUFPbUIsSUFBSSwrQkFBK0IyZCxhQUNwQyxJQUFJW
2ixTQUFRQyxHQUFXdFUsV0FBV3NVLEVBQVNXLElBQ25ELENBT1EsaUJBQUFDLEdBQ04sR0FBK0IsSUFBM0IvZ0IsS0FBS2dnQixXQUFXNVcsT0FDbEIsT0FBTyxFQUdULE1BQU00WCxFQUFrQmhoQixLQUFLZ2dCLFdBQVcsR0FDbENpQixFQUFrQjlaLEtBQUtELE1BQVE4WixFQUdyQyxPQUZtQnpZLEtBQUtDLElBQUksRUFBRyxJQUFPeVksR0FFbEIsRUFDdEIsQ0FRUSxlQUFNbmQsQ0FBVW9kLEdBRXRCLE1BQU0sSUFBSTNjLE1BQU0sbUNBQ2xCLENBT0EsU0FBQXNQLENBQVVzTixHQUNSbmhCLEtBQUs4RCxVQUFZSCxNQUFPQyxVQUNoQnVkLEVBQU92ZCxFQUFNa1EsU0FFdkIsQ0FPQSxTQUFBc04sR0FPRSxPQURBcGhCLEtBQUsyZ0IsdUJBQ0UsQ0FDTFUsWUFBYXJoQixLQUFLOGYsTUFBTTFXLE9BQ3hCMlcsV0FBWS9mLEtBQUsrZixXQUNqQnVCLG1CQUFvQnRoQixLQUFLZ2dCLFdBQVc1VyxPQUNwQ21LLG1CQUFvQnZULEtBQUsyQyxPQUFPNFEsbUJBRXBDLENBS0EsS0FBQWdPLEdBQ0V2aEIsS0FBSzhmLE1BQU05WCxTQUFRcEUsS0FDWkEsYUFBSyxFQUFMQSxFQUFld2MsU0FDakJ4YyxFQUFjd2MsT0FBTyxJQUFJN2IsTUFBTSxxQkFHcEN2RSxLQUFLOGYsTUFBUSxHQUNiOWYsS0FBS2dnQixXQUFhLEdBQ2xCLEVBQUFoZSxPQUFPbUIsSUFBSSxnQkFDYixFLDZGQzdQRixlQU1hLEVBQUF2QixtQkFBcUIsQ0FBQ0QsRUFBdUJKLEtBQ3hELElBQ0UsTUFBTWlULEdBQVcsSUFBQXBLLGVBQ1gwSixFQUFVLENBQ2R0QixLQUFNLDJCQUNOZ0YsVUFBVzdWLEVBQU8wRyxXQUNsQnFFLElBQUt0TCxPQUFPdUwsU0FBU0MsS0FDckJHLFNBQVV2RixTQUFTdUYsU0FDbkJOLE1BQU9qRixTQUFTaUYsTUFDaEJJLEtBQU16TCxPQUFPdUwsU0FBU0csU0FDdEJaLFVBQVdILFVBQVVHLFVBQ3JCNUksVUFBVy9CLEVBQVErQixVQUNuQlIsV0FBWXZCLEVBQVF1QixXQUNwQjhILFVBQVdySixFQUFRcUosWUFBYTRKLGFBQVEsRUFBUkEsRUFBVTVKLFdBQzFDM0csT0FBUTFDLEVBQVEwQyxTQUFVdVEsYUFBUSxFQUFSQSxFQUFVdlEsUUFDcENKLFdBQVksQ0FDVnVELGFBQWN6RixFQUFPeUYsYUFDckJpQixXQUFZMUcsRUFBTzBHLFdBQ25CQyxZQUFhM0csRUFBTzJHLFlBQ3BCNFAsZ0JBQWdCLElBQUE3SixxQkFDaEJsSyxZQUFZLElBQUFDLG1CQUlWOFEsRUFBVyxHQUFHM1QsRUFBUTBCLHVDQUU1QjRTLE1BQU1YLEVBQVUsQ0FDZFksT0FBUSxPQUNSSSxRQUFTLENBQUUsZUFBZ0Isb0JBQzNCSCxLQUFNNUwsS0FBSzdFLFVBQVV3TyxHQUNyQjBOLFdBQVcsSUFDVkMsT0FBT0MsR0FBUSxFQUFBMWYsT0FBT0QsTUFBTSxrQ0FBbUMyZixJQUNwRSxDQUFFLE1BQU8zZixHQUNQLEVBQUFDLE9BQU9ELE1BQU0sc0NBQXVDQSxFQUN0RCxFLGdCQ3ZDRjlCLE9BQU9DLGVBQWVQLEVBQVMsYUFBYyxDQUFFUSxPQUFPLElBQ3REUixFQUFReVcsSUFBTXpXLEVBQVEwVyxJQUFNMVcsRUFBUWdpQixtQkFBZ0IsRUFDcEQsTUFBTTliLEVBQWEsRUFBUSxLQUNyQkMsRUFBaUIsRUFBUSxJQUMvQixTQUFTNmIsRUFBYzdELEdBQ25CQSxFQUFNOEQsU0FBU0MsbUJBQW1CL0QsSUFDbEMsTUFBTTVOLEVBQVEsSUFBSW5CLFdBQVcrTyxFQUFJMVUsUUFDakMsSUFBSyxJQUFJN0ksRUFBSSxFQUFHQSxFQUFJdWQsRUFBSTFVLFNBQVU3SSxFQUM5QjJQLEVBQU0zUCxHQUFLdWQsRUFBSWdFLFdBQVd2aEIsR0FFOUIsT0FBTzJQLENBQ1gsQ0FDQXZRLEVBQVFnaUIsY0FBZ0JBLEVBQ3hCaGlCLEVBQVEwVyxJQUFNLHVDQUNkMVcsRUFBUXlXLElBQU0sdUNBeUJkelcsRUFBQSxRQXhCQSxTQUFhaUYsRUFBU21kLEVBQU01aEIsRUFBT3NXLEVBQVdySCxFQUFLeE8sR0FDL0MsTUFBTW9oQixFQUE4QixpQkFBVjdoQixFQUFxQndoQixFQUFjeGhCLEdBQVNBLEVBQ2hFOGhCLEVBQXNDLGlCQUFkeEwsR0FBeUIsRUFBSTVRLEVBQVc5RSxTQUFTMFYsR0FBYUEsRUFJNUYsR0FIeUIsaUJBQWRBLElBQ1BBLEdBQVksRUFBSTVRLEVBQVc5RSxTQUFTMFYsSUFFZCxLQUF0QkEsR0FBV3JOLE9BQ1gsTUFBTXBJLFVBQVUsb0VBRXBCLElBQUlrUCxFQUFRLElBQUluQixXQUFXLEdBQUtpVCxFQUFXNVksUUFNM0MsR0FMQThHLEVBQU0yQixJQUFJb1EsR0FDVi9SLEVBQU0yQixJQUFJbVEsRUFBWUMsRUFBZTdZLFFBQ3JDOEcsRUFBUTZSLEVBQUs3UixHQUNiQSxFQUFNLEdBQWlCLEdBQVhBLEVBQU0sR0FBYXRMLEVBQy9Cc0wsRUFBTSxHQUFpQixHQUFYQSxFQUFNLEdBQWEsSUFDM0JkLEVBQUssQ0FDTHhPLEVBQVNBLEdBQVUsRUFDbkIsSUFBSyxJQUFJTCxFQUFJLEVBQUdBLEVBQUksS0FBTUEsRUFDdEI2TyxFQUFJeE8sRUFBU0wsR0FBSzJQLEVBQU0zUCxHQUU1QixPQUFPNk8sQ0FDWCxDQUNBLE9BQU8sRUFBSXRKLEVBQWUxRixpQkFBaUI4UCxFQUMvQyxDLEdDdENJZ1MsRUFBMkIsQ0FBQyxFQ0U1QkMsRURDSixTQUFTQyxFQUFvQkMsR0FFNUIsSUFBSUMsRUFBZUosRUFBeUJHLEdBQzVDLFFBQXFCclcsSUFBakJzVyxFQUNILE9BQU9BLEVBQWEzaUIsUUFHckIsSUFBSUMsRUFBU3NpQixFQUF5QkcsR0FBWSxDQUdqRDFpQixRQUFTLENBQUMsR0FPWCxPQUhBNGlCLEVBQW9CRixHQUFVRyxLQUFLNWlCLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVN5aUIsR0FHcEV4aUIsRUFBT0QsT0FDZixDQ25CMEJ5aUIsQ0FBb0IsSyIsInNvdXJjZXMiOlsid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vc3JjL2hlbHBlcnMvdGltZS10cmFja2luZy9pbmRleC50cyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vc3JjL2hlbHBlcnMvZm9ybS1idWlsZGVycy9ncmF2aXR5LWZvcm1zL2luZGV4LnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvY29yZS90cmFja2VyLnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvY29uZmlnL2ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vc3JjL2hlbHBlcnMvZm9ybS1idWlsZGVycy9pbmRleC50cyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9janMtYnJvd3Nlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9janMtYnJvd3Nlci9tYXguanMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL3NyYy9oZWxwZXJzL3RpbWUtdHJhY2tpbmcvdHJhY2tlci50cyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vc3JjL3V0aWxzL2luZGV4LnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL3Y2VG9WMS5qcyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9janMtYnJvd3Nlci92NC5qcyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9janMtYnJvd3Nlci9ybmcuanMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvdjcuanMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvbWQ1LmpzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL3Y2LmpzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvdXRpbHMvZmllbGQtdXRpbHMudHMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvdjEuanMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL3NyYy9hcGkvY2xpZW50LnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL25pbC5qcyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vc3JjL2NvbmZpZy9zY3JpcHQtY29uZmlnLnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL3Y1LmpzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL3YxVG9WNi5qcyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vc3JjL3R5cGVzL2luZGV4LnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL3YzLmpzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvdXRpbHMvbG9nZ2VyLnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL3JlZ2V4LmpzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvZXZlbnRzL2luZGV4LnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL3ZhbGlkYXRlLmpzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL3ZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY2pzLWJyb3dzZXIvbmF0aXZlLmpzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvaGVscGVycy9mb3JtLWJ1aWxkZXJzL2dyYXZpdHktZm9ybXMvbGFiZWwtZXh0cmFjdG9yLnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL3BhcnNlLmpzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL3NoYTEuanMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL3NyYy9jb3JlL2F1dG8taW5p
2dC50cyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vc3JjL2hlbHBlcnMvdGltZS10cmFja2luZy9jb250ZXh0LnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvY29uZmlnL2NvbW1vbi50cyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nLy4vc3JjL3V0aWxzL2Zvcm0tcGFyc2VyLnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9zcmMvY29yZS9xdWV1ZS1zeXN0ZW0udHMiLCJ3ZWJwYWNrOi8vRXh0ZXJuYWxUcmFja2luZy8uL3NyYy9oZWxwZXJzL3RpbWUtdHJhY2tpbmcvYXBpLnRzIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2Nqcy1icm93c2VyL3YzNS5qcyIsIndlYnBhY2s6Ly9FeHRlcm5hbFRyYWNraW5nL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0V4dGVybmFsVHJhY2tpbmcvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkV4dGVybmFsVHJhY2tpbmdcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiRXh0ZXJuYWxUcmFja2luZ1wiXSA9IGZhY3RvcnkoKTtcbn0pKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB0aGlzLCAoKSA9PiB7XG5yZXR1cm4gIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnVuc2FmZVN0cmluZ2lmeSA9IHZvaWQgMDtcbmNvbnN0IHZhbGlkYXRlX2pzXzEgPSByZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKTtcbmNvbnN0IGJ5dGVUb0hleCA9IFtdO1xuZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5mdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gICAgcmV0dXJuIChieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArXG4gICAgICAgIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gK1xuICAgICAgICBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArXG4gICAgICAgICctJyArXG4gICAgICAgIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gK1xuICAgICAgICAnLScgK1xuICAgICAgICBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArXG4gICAgICAgIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICtcbiAgICAgICAgJy0nICtcbiAgICAgICAgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gK1xuICAgICAgICBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArXG4gICAgICAgICctJyArXG4gICAgICAgIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArXG4gICAgICAgIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArXG4gICAgICAgIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArXG4gICAgICAgIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArXG4gICAgICAgIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArXG4gICAgICAgIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXSkudG9Mb3dlckNhc2UoKTtcbn1cbmV4cG9ydHMudW5zYWZlU3RyaW5naWZ5ID0gdW5zYWZlU3RyaW5naWZ5O1xuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICAgIGNvbnN0IHV1aWQgPSB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQpO1xuICAgIGlmICghKDAsIHZhbGlkYXRlX2pzXzEuZGVmYXVsdCkodXVpZCkpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHV1aWQ7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzdHJpbmdpZnk7XG4iLCJpbXBvcnQgeyBHTE9CQUxfVFJBQ0tJTkdfS0VZIH0gZnJvbSAnLi4vLi4vY29uZmlnL2NvbW1vbic7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBzZW5kVGltZVNwZW50RXZlbnQgfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBnZXRUcmFja2luZ0NvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgVGltZU9uUGFnZVRyYWNrZXIgfSBmcm9tICcuL3RyYWNrZXInO1xuXG5leHBvcnQgdHlwZSB7IFNlc3Npb25UaW1pbmcsIFRyYWNraW5nQ29udGV4dCB9IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IHsgVGltZU9uUGFnZVRyYWNrZXIgfSBmcm9tICcuL3RyYWNrZXInO1xuXG4vKipcbiAqIFN0YXJ0cyB0aW1lLW9uLXBhZ2UgdHJhY2tpbmcgZm9yIGEgZ2l2ZW4gdHJhY2tlciBpbnN0YW5jZVxuICovXG5leHBvcnQgY29uc3Qgc3RhcnRUaW1lVHJhY2tpbmcgPSAodHJhY2tlcjogdW5rbm93bik6IHZvaWQgPT4ge1xuICBpZiAoIXRyYWNrZXIgfHwgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICBjb25zdCBpbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGV4dCA9IGdldFRyYWNraW5nQ29udGV4dCh0cmFja2VyKTtcbiAgICAgIGlmICghY29udGV4dCkgcmV0dXJuO1xuXG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcblxuICAgICAgY29uc3QgdGltZVRyYWNrZXIgPSBuZXcgVGltZU9uUGFnZVRyYWNrZXIoKHRpbWluZykgPT4gc2VuZFRpbWVTcGVudEV2ZW50KHRpbWluZywgY29udGV4dCkpO1xuXG4gICAgICBjb25zdCB3ID0gd2luZG93IGFzIGFueTtcbiAgICAgIHdbR0xPQkFMX1RSQUNLSU5HX0tFWV0gPSB3W0dMT0JBTF9UUkFDS0lOR19LRVldIHx8IHt9O1xuICAgICAgd1tHTE9CQUxfVFJBQ0tJTkdfS0VZXS50aW1lVHJhY2tlciA9IHRpbWVUcmFja2VyO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGluIHRpbWUgdHJhY2tpbmcnLCBlcnJvcik7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICB9XG4gI
2H0sIDMwMCk7XG59O1xuIiwiLyoqXG4gKiBHcmF2aXR5IEZvcm1zIE1vZHVsZVxuICogXG4gKiBQcm92aWRlcyB1dGlsaXRpZXMgZm9yIGV4dHJhY3RpbmcgbGFiZWxzIGZyb20gR3Jhdml0eSBGb3JtcyBXb3JkUHJlc3MgcGx1Z2luLlxuICogXG4gKiBAbW9kdWxlIGdyYXZpdHktZm9ybXNcbiAqL1xuXG4vLyBUeXBlc1xuZXhwb3J0IHR5cGUgeyBGb3JtSW5wdXRFbGVtZW50IH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIExhYmVsIGV4dHJhY3Rpb24gdXRpbGl0aWVzXG5leHBvcnQge1xuICBpc0dyYXZpdHlGb3Jtc0ZpZWxkLFxuICBpc0NvbXBvdW5kRmllbGQsXG4gIGdldE1haW5MYWJlbCxcbiAgZ2V0U3ViTGFiZWwsXG4gIGdldENvbWJpbmVkTGFiZWwsXG4gIGdldENvbnRhaW5lckxhYmVsLFxuICBnZXRGaWVsZHNldExlZ2VuZCxcbiAgY2xlYW5MYWJlbFRleHQsXG59IGZyb20gJy4vbGFiZWwtZXh0cmFjdG9yJztcbiIsImltcG9ydCB7IFxuICBUcmFja2luZ0NvbmZpZywgXG4gIFRyYWNraW5nU3RhdGUsIFxuICBUcmFja2luZ0V2ZW50LFxuICBQYWdlVmlld0V2ZW50LFxuICBGb3JtU3VibWlzc2lvbkV2ZW50XG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4uL2FwaS9jbGllbnQnO1xuaW1wb3J0IHsgc3RhcnRQYWdlVHJhY2tpbmcsIHN0YXJ0Rm9ybVRyYWNraW5nIH0gZnJvbSAnLi4vZXZlbnRzJztcbmltcG9ydCB7IFxuICBsb2dnZXIsIFxuICBnZW5lcmF0ZVNlc3Npb25JZCxcbiAgc3RvcmVTZXNzaW9uSWRJbkNvb2tpZSxcbiAgZ2V0RGV2aWNlVHlwZVxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBHTE9CQUxfVFJBQ0tJTkdfS0VZIH0gZnJvbSAnLi4vY29uZmlnL2NvbW1vbic7XG5cbi8qKlxuICogTWFpbiBleHRlcm5hbCB0cmFja2luZyBjbGFzc1xuICovXG5leHBvcnQgY2xhc3MgRXh0ZXJuYWxUcmFja2VyIHtcbiAgcHJpdmF0ZSBzdGF0ZTogVHJhY2tpbmdTdGF0ZTtcbiAgcHJpdmF0ZSBhcGlDbGllbnQ6IEFwaUNsaWVudDtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IFRyYWNraW5nQ29uZmlnKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgICAgIHRyYWNraW5nSWQ6IGNvbmZpZy50cmFja2luZ0lkLFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5hcGlDbGllbnQgPSBuZXcgQXBpQ2xpZW50KGNvbmZpZy50cmFja2luZ0lkLCBjb25maWcuYXBpRW5kcG9pbnQpO1xuXG4gICAgLy8gU2V0IGRlYnVnIG1vZGVcbiAgICBpZiAoY29uZmlnLmRlYnVnKSB7XG4gICAgICBjb25zdCB3ID0gd2luZG93IGFzIGFueTtcbiAgICAgIHdbR0xPQkFMX1RSQUNLSU5HX0tFWV0gPSB3W0dMT0JBTF9UUkFDS0lOR19LRVldIHx8IHt9O1xuICAgICAgd1tHTE9CQUxfVFJBQ0tJTkdfS0VZXS5kZWJ1ZyA9IHRydWU7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmxvZygnRXh0ZXJuYWxUcmFja2VyIGNyZWF0ZWQgd2l0aCBjb25maWc6JywgY29uZmlnKTtcbiAgICBcbiAgICAvLyBBdXRvLWluaXRpYWxpemVcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFja2VyXG4gICAqL1xuICBhc3luYyBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0YXRlLmluaXRpYWxpemVkKSB7XG4gICAgICBsb2dnZXIud2FybignVHJhY2tlciBhbHJlYWR5IGluaXRpYWxpemVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEdlbmVyYXRlIG5ldyBzZXNzaW9uSWQgZm9yIGVhY2ggc2Vzc2lvbiBhbmQgc3RvcmUgaW4gY29va2llXG4gICAgICB0aGlzLnN0YXRlLnNlc3Npb25JZCA9IGdlbmVyYXRlU2Vzc2lvbklkKCk7XG4gICAgICBzdG9yZVNlc3Npb25JZEluQ29va2llKHRoaXMuc3RhdGUudHJhY2tpbmdJZCwgdGhpcy5zdGF0ZS5zZXNzaW9uSWQpO1xuICAgICAgXG4gICAgICAvLyBTZXQgdHJhY2tpbmcgY29udGV4dCBvbiBBUEkgY2xpZW50IHdpdGggc2Vzc2lvbklkXG4gICAgICB0aGlzLmFwaUNsaWVudC5zZXRUcmFja2luZ0NvbnRleHQodGhpcy5zdGF0ZS5zZXNzaW9uSWQpO1xuICAgICAgXG4gICAgICAvLyBTZXR1cCBhdXRvbWF0aWMgdHJhY2tpbmcgKHN0YXJ0cyBpbW1lZGlhdGVseSB1cG9uIGZ1bmN0aW9uIGNhbGwpXG4gICAgICBzdGFydFBhZ2VUcmFja2luZyhhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgLy8gQWRkIHNlc3Npb25JZCB0byBhbGwgZXZlbnRzXG4gICAgICAgIGV2ZW50LnByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllcyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc3RhdGUuc2Vzc2lvbklkLFxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCB0aGlzLnNlbmRFdmVudChldmVudCk7XG4gICAgICB9KTtcblxuICAgICAgc3RhcnRGb3JtVHJhY2tpbmcoYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIC8vIEFkZCBzZXNzaW9uSWQgdG8gZm9ybSBzdWJtaXNzaW9uc1xuICAgICAgICBldmVudC5wcm9wZXJ0aWVzID0ge1xuICAgICAgICAgIC4uLmV2ZW50LnByb3BlcnRpZXMsXG4gICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLnN0YXRlLnNlc3Npb25JZCxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5hcGlDbGllbnQuc3VibWl0Rm9ybShldmVudCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zdGF0ZS5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICBsb2dnZXIubG9nKCdUcmFja2VyIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSB3aXRoIHNlc3Npb25JZDonLCB0aGlzLnN0YXRlLnNlc3Npb25JZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGluaXRpYWxpemUgdHJhY2tlcjonLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBldmVudCB0byBBUElcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VuZEV2ZW50KGV2ZW50OiBUcmFja2luZ0V2ZW50IHwgUGFnZVZpZXdFdmVudCB8IEZvcm1TdWJtaXNzaW9uRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBZGQgdXNlciBjb250ZXh0IGlmIGF2YWlsYWJsZVxuICAgIGlmICh0aGlzLnN0YXRlLnVzZXJJZCkge1xuICAgICAgZXZlbnQucHJvcGVydGllcyA9IHtcbiAgICAgICAgLi4uZXZlbnQucHJvcGVydGllcyxcbiAgICAgICAgdXNlcklkOiB0aGlzLnN0YXRlLnVzZXJJZCxcbiAgICAgICAgLi4udGhpcy5zdGF0ZS51c2VyUHJvcGVydGllcyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgZGV2aWNlIHR5cGUgdG8gZXZlbnQgcHJv
2cGVydGllcyBmb3IgZG93bnN0cmVhbSBhbmFseXRpY3MuXG4gICAgY29uc3QgZGV2aWNlVHlwZSA9IGV2ZW50Py5wcm9wZXJ0aWVzPy5kZXZpY2VUeXBlIHx8IGdldERldmljZVR5cGUoKTtcblxuICAgIC8vIEVuc3VyZSBzZXNzaW9uSWQgaXMgc2V0XG4gICAgZXZlbnQucHJvcGVydGllcyA9IHtcbiAgICAgIC4uLmV2ZW50LnByb3BlcnRpZXMsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuc3RhdGUuc2Vzc2lvbklkLFxuICAgICAgZGV2aWNlVHlwZSxcbiAgICB9O1xuXG4gICAgYXdhaXQgdGhpcy5hcGlDbGllbnQuc2VuZEV2ZW50KGV2ZW50KTtcbiAgfVxufSBcbiIsImltcG9ydCB7IEV4dGVybmFsVHJhY2tlciB9IGZyb20gJy4uL2NvcmUvdHJhY2tlcic7XG5pbXBvcnQgeyBUcmFja2luZ0NvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IHZhbGlkYXRlQ29uZmlnIH0gZnJvbSAnLi9zY3JpcHQtY29uZmlnJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuZCBpbml0aWFsaXplcyBhIG5ldyBFeHRlcm5hbFRyYWNrZXIgaW5zdGFuY2VcbiAqIFxuICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgdHJhY2tlclxuICogQHJldHVybnMgRXh0ZXJuYWxUcmFja2VyIGluc3RhbmNlXG4gKiBAdGhyb3dzIEVycm9yIGlmIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZFxuICogXG4gKiBMb2dpYyBmbG93OlxuICogMS4gVmFsaWRhdGUgdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb25cbiAqIDIuIENyZWF0ZSBuZXcgRXh0ZXJuYWxUcmFja2VyIGluc3RhbmNlXG4gKiAzLiBMb2cgc3VjY2Vzc2Z1bCBjcmVhdGlvblxuICogNC4gUmV0dXJuIHRoZSB0cmFja2VyIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVUcmFja2VyID0gKGNvbmZpZzogVHJhY2tpbmdDb25maWcpOiBFeHRlcm5hbFRyYWNrZXIgPT4ge1xuICAvLyBWYWxpZGF0ZSBjb25maWd1cmF0aW9uIGJlZm9yZSBjcmVhdGluZyB0cmFja2VyXG4gIGlmICghdmFsaWRhdGVDb25maWcoY29uZmlnKSkge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdJbnZhbGlkIHRyYWNraW5nIGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQnKTtcbiAgICBsb2dnZXIuY3JpdGljYWwoJ0ZhaWxlZCB0byBjcmVhdGUgdHJhY2tlcjonLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIENyZWF0ZSB0cmFja2VyIGluc3RhbmNlXG4gICAgY29uc3QgdHJhY2tlciA9IG5ldyBFeHRlcm5hbFRyYWNrZXIoY29uZmlnKTtcbiAgICBcbiAgICBsb2dnZXIubG9nKCdUcmFja2VyIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5IHdpdGggSUQ6JywgY29uZmlnLnRyYWNraW5nSWQpO1xuICAgIHJldHVybiB0cmFja2VyO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5jcml0aWNhbCgnRXJyb3IgY3JlYXRpbmcgdHJhY2tlcjonLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbiAiLCJpbXBvcnQgeyBpbml0aWFsaXplRnJvbVNjcmlwdCB9IGZyb20gJy4vY29yZS9hdXRvLWluaXQnO1xuaW1wb3J0IHsgc3RhcnRUaW1lVHJhY2tpbmcgfSBmcm9tICcuL2hlbHBlcnMvdGltZS10cmFja2luZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogTWFpbiBpbml0aWFsaXphdGlvbiBvcmNoZXN0cmF0b3JcbiAqIFxuICogSW5pdGlhbGl6ZXMgdGhlIGV4dGVybmFsIHRyYWNraW5nIHN5c3RlbSBmcm9tIHNjcmlwdCBhdHRyaWJ1dGVzXG4gKiBhbmQgc3RhcnRzIHRpbWUtb24tcGFnZSB0cmFja2luZyBpZiBzdWNjZXNzZnVsLlxuICovXG5jb25zdCBpbml0aWFsaXplID0gKCk6IHZvaWQgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHRyYWNrZXIgPSBpbml0aWFsaXplRnJvbVNjcmlwdCgpO1xuICAgIFxuICAgIGlmICh0cmFja2VyKSB7XG4gICAgICBsb2dnZXIubG9nKCdUcmFja2luZyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIHN0YXJ0VGltZVRyYWNraW5nKHRyYWNrZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuY3JpdGljYWwoJ0V4dGVybmFsIFRyYWNraW5nIGZhaWxlZCB0byBpbml0aWFsaXplJyk7XG4gICAgICBsb2dnZXIuY3JpdGljYWwoJ01ha2Ugc3VyZSB0byBpbmNsdWRlIGRhdGEtdHJhY2tpbmctaWQgaW4geW91ciBzY3JpcHQgdGFnJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5jcml0aWNhbCgnSW5pdGlhbGl6YXRpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgfVxufTtcblxuLy8gRXhlY3V0ZSBpbml0aWFsaXphdGlvblxuaW5pdGlhbGl6ZSgpO1xuXG4vLyBFeHRlbmQgd2luZG93IGludGVyZmFjZSBmb3IgVHlwZVNjcmlwdFxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH1cbn0iLCIvKipcbiAqIEZvcm0gQnVpbGRlcnMgTW9kdWxlXG4gKiBcbiAqIFByb3ZpZGVzIHV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIHZhcmlvdXMgZm9ybSBidWlsZGVyIHBsdWdpbnMuXG4gKiBFYWNoIGZvcm0gYnVpbGRlciBoYXMgaXRzIG93biBtb2R1bGUgd2l0aCBzcGVjaWFsaXplZCBsYWJlbCBleHRyYWN0aW9uXG4gKiBhbmQgZmllbGQgdHJhbnNmb3JtYXRpb24gbG9naWMuXG4gKiBcbiAqIFN1cHBvcnRlZCBGb3JtIEJ1aWxkZXJzOlxuICogLSBHcmF2aXR5IEZvcm1zIChXb3JkUHJlc3MgcGx1Z2luKVxuICogXG4gKiBAbW9kdWxlIGZvcm0tYnVpbGRlcnNcbiAqL1xuXG4vLyBHcmF2aXR5IEZvcm1zXG5leHBvcnQgKiBhcyBHcmF2aXR5Rm9ybXMgZnJvbSAnLi9ncmF2aXR5LWZvcm1zJztcblxuLy8gUmUtZXhwb3J0IGNvbW1vbmx5IHVzZWQgdXRpbGl0aWVzIGZyb20gR3Jhdml0eSBGb3Jtc1xuZXhwb3J0IHsgXG4gIGdldENvbWJpbmVkTGFiZWwgYXMgZ2V0R3Jhdml0eUZvcm1zQ29tYmluZWRMYWJlbCxcbiAgaXNHcmF2aXR5Rm9ybXNGaWVsZCxcbiAgY2xlYW5MYWJlbFRleHQsXG59IGZyb20gJy4vZ3Jhdml0eS1mb3Jtcyc7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudmVyc2lvbiA9IGV4cG9ydHMudmFsaWRhdGUgPSBleHBvcnRzLnY3ID0gZXhwb3J0cy52NlRvVjEgPSBleHBvcnRzLnY2ID0gZXhwb3J0cy52NSA9IGV4cG9ydHMudjQgPSBleHBvcnRzLnYzID0gZXhwb3J0cy52MVRvVjYgPSBleHBvcnRzLnYxID0gZXhwb3J0cy5zdHJpbmdpZnkgPSBleHBvcnRzLnBhcnNlID0gZXhwb3J0cy5OSUwgPSBleHBvcnRzLk1BWCA9IHZvaWQgMDtcbnZhciBtYXhfanNfMSA9IHJlcXVpcmUoXCIuL21heC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk1BWFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWF4X2pzXzEuZGVmYXVsdDsgfSB9KTtcbnZhciBuaWxfanNfMSA9IHJlcXVpcmUoXCIuL25pbC5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5JTFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmlsX2pzXzEuZGVmYXVsdDsgfSB9KTtcbnZhciBwYXJzZV9qc18xID0gcmVxdWlyZShcIi4vcGFyc2UuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gcGFyc2VfanNfMS5kZWZh
2dWx0OyB9IH0pO1xudmFyIHN0cmluZ2lmeV9qc18xID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzdHJpbmdpZnlfanNfMS5kZWZhdWx0OyB9IH0pO1xudmFyIHYxX2pzXzEgPSByZXF1aXJlKFwiLi92MS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInYxXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2MV9qc18xLmRlZmF1bHQ7IH0gfSk7XG52YXIgdjFUb1Y2X2pzXzEgPSByZXF1aXJlKFwiLi92MVRvVjYuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2MVRvVjZcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHYxVG9WNl9qc18xLmRlZmF1bHQ7IH0gfSk7XG52YXIgdjNfanNfMSA9IHJlcXVpcmUoXCIuL3YzLmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHYzX2pzXzEuZGVmYXVsdDsgfSB9KTtcbnZhciB2NF9qc18xID0gcmVxdWlyZShcIi4vdjQuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2NFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdjRfanNfMS5kZWZhdWx0OyB9IH0pO1xudmFyIHY1X2pzXzEgPSByZXF1aXJlKFwiLi92NS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInY1XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2NV9qc18xLmRlZmF1bHQ7IH0gfSk7XG52YXIgdjZfanNfMSA9IHJlcXVpcmUoXCIuL3Y2LmpzXCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjZcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHY2X2pzXzEuZGVmYXVsdDsgfSB9KTtcbnZhciB2NlRvVjFfanNfMSA9IHJlcXVpcmUoXCIuL3Y2VG9WMS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInY2VG9WMVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdjZUb1YxX2pzXzEuZGVmYXVsdDsgfSB9KTtcbnZhciB2N19qc18xID0gcmVxdWlyZShcIi4vdjcuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2N1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdjdfanNfMS5kZWZhdWx0OyB9IH0pO1xudmFyIHZhbGlkYXRlX2pzXzEgPSByZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhbGlkYXRlXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWxpZGF0ZV9qc18xLmRlZmF1bHQ7IH0gfSk7XG52YXIgdmVyc2lvbl9qc18xID0gcmVxdWlyZShcIi4vdmVyc2lvbi5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZlcnNpb25cIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZlcnNpb25fanNfMS5kZWZhdWx0OyB9IH0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSAnZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmJztcbiIsImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgU2Vzc2lvblRpbWluZyB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBVUERBVEVfSU5URVJWQUxfTVMgPSAxMDAwO1xuY29uc3QgSU5BQ1RJVklUWV9NUyA9IDMwICogNjAgKiAxMDAwO1xuY29uc3QgQUNUSVZJVFlfRVZFTlRTID0gWydwb2ludGVyZG93bicsICdwb2ludGVybW92ZScsICdrZXlkb3duJywgJ3Njcm9sbCcsICd0b3VjaHN0YXJ0JywgJ3RvdWNobW92ZSddO1xuXG4vKipcbiAqIExpZ2h0d2VpZ2h0IGVuZ2FnZW1lbnQgdHJhY2tlciB0byBjYXB0dXJlIGFjdGl2ZSB0aW1lIG9uIHBhZ2VcbiAqL1xuZXhwb3J0IGNsYXNzIFRpbWVPblBhZ2VUcmFja2VyIHtcbiAgcHJpdmF0ZSBzZXNzaW9uU3RhcnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBsYXN0QWN0aXZpdHlBdDogbnVtYmVyO1xuICBwcml2YXRlIGxhc3RUaWNrOiBudW1iZXI7XG4gIHByaXZhdGUgYWN0aXZlVGltZU1zID0gMDtcbiAgcHJpdmF0ZSB1cGRhdGVUaW1lcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaXNJZGxlID0gZmFsc2U7XG4gIHByaXZhdGUgZGVzdHJveWVkID0gZmFsc2U7XG4gIHByaXZhdGUgZmx1c2hlZCA9IGZhbHNlO1xuICBwcml2YXRlIHNlc3Npb25FeHBpcmVkID0gZmFsc2U7XG4gIHByaXZhdGUgb25TZXNzaW9uQ29tcGxldGU6ICh0aW1pbmc6IFNlc3Npb25UaW1pbmcpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3Iob25Db21wbGV0ZTogKHRpbWluZzogU2Vzc2lvblRpbWluZykgPT4gdm9pZCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgdGhpcy5vblNlc3Npb25Db21wbGV0ZSA9IG9uQ29tcGxldGU7XG4gICAgdGhpcy5zZXNzaW9uU3RhcnQgPSBub3c7XG4gICAgdGhpcy5sYXN0QWN0aXZpdHlBdCA9IG5vdztcbiAgICB0aGlzLmxhc3RUaWNrID0gbm93O1xuICAgIHRoaXMuYmluZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBBQ1RJVklUWV9FVkVOVFMuZm9yRWFjaCgoZXZ0KSA9PlxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihldnQsIHRoaXMub25BY3Rpdml0eSwgeyBwYXNzaXZlOiB0cnVlIH0pLFxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCB0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgdGhpcy5vblVubG9hZCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgdGhpcy5vblVubG9hZCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgdGhpcy51cGRhdGVUaW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLnRpY2ssIFVQREFURV9JTlRFUlZBTF9NUyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGJpbmQgZXZlbnQgbGlzdGVuZXJzJywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25BY3Rpdml0eSA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVybjtcbiAgICBjb25zdCBub3cgP
2SBEYXRlLm5vdygpO1xuXG4gICAgaWYgKHRoaXMuc2Vzc2lvbkV4cGlyZWQpIHtcbiAgICAgIHRoaXMuc2Vzc2lvblN0YXJ0ID0gbm93O1xuICAgICAgdGhpcy5sYXN0VGljayA9IG5vdztcbiAgICAgIHRoaXMuYWN0aXZlVGltZU1zID0gMDtcbiAgICAgIHRoaXMuZmx1c2hlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXNzaW9uRXhwaXJlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMubGFzdEFjdGl2aXR5QXQgPSBub3c7XG4gICAgdGhpcy5pc0lkbGUgPSBmYWxzZTtcbiAgfTtcblxuICBwcml2YXRlIG9uVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICBkb2N1bWVudC5oaWRkZW4gPyB0aGlzLmNoZWNrVGltZW91dCgpIDogdGhpcy5vbkFjdGl2aXR5KCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBjaGVja1RpbWVvdXQoKTogdm9pZCB7XG4gICAgaWYgKERhdGUubm93KCkgLSB0aGlzLmxhc3RBY3Rpdml0eUF0ID49IElOQUNUSVZJVFlfTVMpIHtcbiAgICAgIHRoaXMuZW1pdFVwZGF0ZSgpO1xuICAgICAgdGhpcy5zZXNzaW9uRXhwaXJlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvblVubG9hZCA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIXRoaXMuZGVzdHJveWVkKSB0aGlzLmVtaXRVcGRhdGUoKTtcbiAgfTtcblxuICBwcml2YXRlIHRpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm47XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuaXNJZGxlID0gbm93IC0gdGhpcy5sYXN0QWN0aXZpdHlBdCA+PSBJTkFDVElWSVRZX01TO1xuXG4gICAgaWYgKCFkb2N1bWVudC5oaWRkZW4gJiYgIXRoaXMuaXNJZGxlKSB7XG4gICAgICB0aGlzLmFjdGl2ZVRpbWVNcyArPSBub3cgLSB0aGlzLmxhc3RUaWNrO1xuICAgIH1cblxuICAgIHRoaXMubGFzdFRpY2sgPSBub3c7XG4gICAgdGhpcy5jaGVja1RpbWVvdXQoKTtcbiAgfTtcblxuICBwcml2YXRlIGVtaXRVcGRhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkIHx8IHRoaXMuZmx1c2hlZCkgcmV0dXJuO1xuICAgIHRoaXMuZmx1c2hlZCA9IHRydWU7XG5cbiAgICBjb25zdCBzZXNzaW9uRW5kID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmICF0aGlzLmlzSWRsZSkge1xuICAgICAgdGhpcy5hY3RpdmVUaW1lTXMgKz0gc2Vzc2lvbkVuZCAtIHRoaXMubGFzdFRpY2s7XG4gICAgfVxuICAgIHRoaXMubGFzdFRpY2sgPSBzZXNzaW9uRW5kO1xuXG4gICAgdGhpcy5vblNlc3Npb25Db21wbGV0ZSh7XG4gICAgICBzZXNzaW9uU3RhcnQ6IHRoaXMuc2Vzc2lvblN0YXJ0LFxuICAgICAgc2Vzc2lvbkVuZCxcbiAgICAgIHRpbWVTcGVudE1zOiBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKHRoaXMuYWN0aXZlVGltZU1zKSksXG4gICAgfSk7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcblxuICAgIEFDVElWSVRZX0VWRU5UUy5mb3JFYWNoKChldnQpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKGV2dCwgdGhpcy5vbkFjdGl2aXR5KSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgdGhpcy5vblVubG9hZCk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgdGhpcy5vblVubG9hZCk7XG4gICAgaWYgKHRoaXMudXBkYXRlVGltZXIpIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMudXBkYXRlVGltZXIpO1xuICB9XG59XG4iLCJpbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcblxuLy8gUmUtZXhwb3J0IGZyb20gc3BlY2lhbGl6ZWQgbW9kdWxlc1xuZXhwb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuZXhwb3J0IHsgcGFyc2VGb3JtRGF0YSwgdHlwZSBGb3JtUGFyc2VSZXN1bHQgfSBmcm9tICcuL2Zvcm0tcGFyc2VyJztcbmV4cG9ydCB7IGNvbnRhaW5zUGFzc3dvcmQsIGlzUGFzc3dvcmRMaWtlRmllbGQgfSBmcm9tICcuL2ZpZWxkLXV0aWxzJztcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIFVVSUQgdjQgZm9yIHNlc3Npb25JZFxuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVTZXNzaW9uSWQgPSAoKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIHV1aWR2NCgpO1xufTtcblxuLyoqXG4gKiBHZXQgY29va2llIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb29raWUgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdmFsdWUgPSBgOyAke2RvY3VtZW50LmNvb2tpZX1gO1xuICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoYDsgJHtuYW1lfT1gKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XG4gICAgICByZXR1cm4gcGFydHMucG9wKCk/LnNwbGl0KCc7Jykuc2hpZnQoKSB8fCBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5lcnJvcignRXJyb3IgZ2V0dGluZyBjb29raWU6JywgZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFNldCBjb29raWUgdmFsdWVcbiAqL1xuZXhwb3J0IGNvbnN0IHNldENvb2tpZSA9IChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGRheXM6IG51bWJlcik6IHZvaWQgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIChkYXlzICogMjQgKiA2MCAqIDYwICogMTAwMCkpO1xuICAgIGNvbnN0IGV4cGlyZXMgPSBgZXhwaXJlcz0ke2RhdGUudG9VVENTdHJpbmcoKX1gO1xuICAgIGRvY3VtZW50LmNvb2tpZSA9IGAke25hbWV9PSR7dmFsdWV9OyR7ZXhwaXJlc307cGF0aD0vO1NhbWVTaXRlPUxheGA7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIHNldHRpbmcgY29va2llOicsIGUpO1xuICB9XG59O1xuXG4vKipcbiAqIFN0b3JlIHVzZXIgZGF0YSBpbiBsb2NhbFN0b3JhZ2UgKHNpbWlsYXIgdG8gX3VkIGluIEZvcm1Db21wb25lbnQpXG4gKi9cbmV4cG9ydCBjb25zdCBzdG9yZVVzZXJEYXRhID0gKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkID0+IHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2FsU3RvcmFnZSkge1xuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdfdWQnLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdFcnJvciBzdG9yaW5nIHVzZXIgZGF0YTonLCBlKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgdXNlciBkYXRhIGZyb20gbG9jYWxTdG9yYWdlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRVc2VyRGF0YSA9ICgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ191ZCcpO1xuICAgICAgaWYgKCFkYXRhKSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShkYXRhKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O
21xuXG4gICAgICBpZiAocGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnICYmICdjdXN0b21lcl9pZCcgaW4gcGFyc2VkKSB7XG4gICAgICAgIGNvbnN0IGNpZCA9IChwYXJzZWQgYXMgYW55KS5jdXN0b21lcl9pZDtcbiAgICAgICAgaWYgKGNpZCAhPT0gdW5kZWZpbmVkICYmIGNpZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBTdHJpbmcoY2lkKS50cmltKCk7XG4gICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpIHtcbiAgICAgICAgICAgIChwYXJzZWQgYXMgYW55KS5jb250YWN0SWQgPSBub3JtYWxpemVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ2dlci5lcnJvcignRXJyb3IgZ2V0dGluZyB1c2VyIGRhdGE6JywgZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFN0b3JlIHNlc3Npb25JZCB3aXRoIGNvb2tpZSBmYWxsYmFjayB0byBzZXNzaW9uU3RvcmFnZVxuICovXG5leHBvcnQgY29uc3Qgc3RvcmVTZXNzaW9uSWRJbkNvb2tpZSA9IChzZXNzaW9uU2NvcGVJZDogc3RyaW5nLCBzZXNzaW9uSWQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBjb25zdCBjb29raWVOYW1lID0gYGxjX3Nlc3Npb25fJHtzZXNzaW9uU2NvcGVJZH1gO1xuICBcbiAgLy8gVHJ5IGNvb2tpZSBmaXJzdFxuICBzZXRDb29raWUoY29va2llTmFtZSwgc2Vzc2lvbklkLCAxKTtcbiAgXG4gIC8vIFZlcmlmeSBjb29raWUgd29ya2VkLCBpZiBub3QgZmFsbGJhY2sgdG8gc2Vzc2lvblN0b3JhZ2VcbiAgY29uc3QgdmVyaWZpY2F0aW9uID0gZ2V0Q29va2llKGNvb2tpZU5hbWUpO1xuICBpZiAodmVyaWZpY2F0aW9uICE9PSBzZXNzaW9uSWQpIHtcbiAgICAvLyBDb29raWUgZmFpbGVkLCB1c2Ugc2Vzc2lvblN0b3JhZ2UgYXMgZmFsbGJhY2tcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZSkge1xuICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShjb29raWVOYW1lLCBzZXNzaW9uSWQpO1xuICAgICAgICBsb2dnZXIuYXBpKGBTZXNzaW9uSWQgc3RvcmVkIGluIHNlc3Npb25TdG9yYWdlIChjb29raWUgZmFsbGJhY2spOiAke3Nlc3Npb25JZH1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0JvdGggY29va2llIGFuZCBzZXNzaW9uU3RvcmFnZSBmYWlsZWQgZm9yIHNlc3Npb25JZCBzdG9yYWdlJywgZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxvZ2dlci5hcGkoYFNlc3Npb25JZCBzdG9yZWQgaW4gY29va2llOiAke3Nlc3Npb25JZH1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgc2Vzc2lvbklkIGZyb20gY29va2llIHdpdGggc2Vzc2lvblN0b3JhZ2UgZmFsbGJhY2tcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlc3Npb25JZEZyb21Db29raWUgPSAoc2Vzc2lvblNjb3BlSWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCBjb29raWVOYW1lID0gYGxjX3Nlc3Npb25fJHtzZXNzaW9uU2NvcGVJZH1gO1xuICBcbiAgLy8gVHJ5IGNvb2tpZSBmaXJzdFxuICBjb25zdCBjb29raWVSZXN1bHQgPSBnZXRDb29raWUoY29va2llTmFtZSk7XG4gIGlmIChjb29raWVSZXN1bHQpIHtcbiAgICByZXR1cm4gY29va2llUmVzdWx0O1xuICB9XG4gIFxuICAvLyBGYWxsYmFjayB0byBzZXNzaW9uU3RvcmFnZVxuICB0cnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHtcbiAgICAgIGNvbnN0IHNlc3Npb25TdG9yYWdlUmVzdWx0ID0gd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oY29va2llTmFtZSk7XG4gICAgICBpZiAoc2Vzc2lvblN0b3JhZ2VSZXN1bHQpIHtcbiAgICAgICAgbG9nZ2VyLmFwaShgU2Vzc2lvbklkIHJldHJpZXZlZCBmcm9tIHNlc3Npb25TdG9yYWdlIChjb29raWUgZmFsbGJhY2spOiAke3Nlc3Npb25TdG9yYWdlUmVzdWx0fWApO1xuICAgICAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2VSZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdCb3RoIGNvb2tpZSBhbmQgc2Vzc2lvblN0b3JhZ2UgZmFpbGVkIGZvciBzZXNzaW9uSWQgcmV0cmlldmFsJywgZSk7XG4gIH1cbiAgXG4gIHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBTYWZlIGxvY2FsU3RvcmFnZSBnZXR0ZXJcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZyb21TdG9yYWdlID0gKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGdldHRpbmcgZnJvbSBzdG9yYWdlOicsIGUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBTYWZlIGxvY2FsU3RvcmFnZSBzZXR0ZXJcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEluU3RvcmFnZSA9IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQgPT4ge1xuICB0cnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubG9jYWxTdG9yYWdlKSB7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdFcnJvciBzZXR0aW5nIGluIHN0b3JhZ2U6JywgZSk7XG4gIH1cbn07XG5cbi8qKlxuICogRGVib3VuY2UgZnVuY3Rpb24gZm9yIHBlcmZvcm1hbmNlXG4gKi9cbmV4cG9ydCBjb25zdCBkZWJvdW5jZSA9IDxUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk+KFxuICBmdW5jOiBULFxuICB3YWl0OiBudW1iZXJcbik6ICgoLi4uYXJnczogUGFyYW1ldGVyczxUPikgPT4gdm9pZCkgPT4ge1xuICBsZXQgdGltZW91dDogTm9kZUpTLlRpbWVvdXQ7XG4gIFxuICByZXR1cm4gZnVuY3Rpb24gZXhlY3V0ZWRGdW5jdGlvbiguLi5hcmdzOiBQYXJhbWV0ZXJzPFQ+KSB7XG4gICAgY29uc3QgbGF0ZXIgPSAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBmdW5jKC4uLmFyZ3MpO1xuICAgIH07XG4gICAgXG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgP
2SBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgfTtcbn07XG5cbi8qKlxuICogR2V0IGRldmljZSB0eXBlIGJhc2VkIG9uIHVzZXIgYWdlbnQgYW5kIGRldmljZSBjYXBhYmlsaXRpZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERldmljZVR5cGUgPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbmF2ID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHVhID0gKG5hdj8udXNlckFnZW50IHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBtYXhUb3VjaFBvaW50cyA9IG5hdj8ubWF4VG91Y2hQb2ludHMgfHwgMDtcbiAgY29uc3QgdXNlckFnZW50RGF0YSA9IChuYXYgYXMgYW55KT8udXNlckFnZW50RGF0YTtcbiAgY29uc3QgaXNNb2JpbGVIaW50ID0gdXNlckFnZW50RGF0YT8ubW9iaWxlID09PSB0cnVlO1xuXG4gIGlmIChcbiAgICB1YS5pbmNsdWRlcygnaXBhZCcpIHx8XG4gICAgdWEuaW5jbHVkZXMoJ3RhYmxldCcpIHx8XG4gICAgKHVhLmluY2x1ZGVzKCdhbmRyb2lkJykgJiYgIXVhLmluY2x1ZGVzKCdtb2JpbGUnKSkgfHxcbiAgICAodWEuaW5jbHVkZXMoJ21hY2ludG9zaCcpICYmIG1heFRvdWNoUG9pbnRzID4gMSlcbiAgKSB7XG4gICAgcmV0dXJuICd0YWJsZXQnO1xuICB9XG5cbiAgaWYgKFxuICAgIGlzTW9iaWxlSGludCB8fFxuICAgIHVhLmluY2x1ZGVzKCdtb2JpJykgfHxcbiAgICB1YS5pbmNsdWRlcygnaXBob25lJykgfHxcbiAgICB1YS5pbmNsdWRlcygnaXBvZCcpIHx8XG4gICAgKHVhLmluY2x1ZGVzKCdhbmRyb2lkJykgJiYgdWEuaW5jbHVkZXMoJ21vYmlsZScpKVxuICApIHtcbiAgICByZXR1cm4gJ21vYmlsZSc7XG4gIH1cblxuICByZXR1cm4gJ2Rlc2t0b3AnO1xufTtcblxuLyoqXG4gKiBHZXQgcGFnZSBtZXRhZGF0YVxuICovXG5leHBvcnQgY29uc3QgZ2V0UGFnZU1ldGFkYXRhID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiBkb2N1bWVudC50aXRsZSxcbiAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgIHBhdGg6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICByZWZlcnJlcjogZG9jdW1lbnQucmVmZXJyZXIsXG4gICAgdXNlckFnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldExvY2FsVGltZVpvbmUgPSAoKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbFRpbWVab25lT2Zmc2V0ID0gKCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IG1hdGNoID0gbmV3IERhdGUoKS50b1N0cmluZygpLm1hdGNoKC8oW0EtWl0rW1xcKy1dWzAtOV17Mn0pKFswLTldezJ9KS8pO1xuICByZXR1cm4gbWF0Y2ggPyBgKCR7bWF0Y2hbMV19OiR7bWF0Y2hbMl19KWAgOiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGb3JtYXR0ZWRUaW1lem9uZSA9ICgpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gYCR7Z2V0TG9jYWxUaW1lWm9uZSgpfSAke2dldExvY2FsVGltZVpvbmVPZmZzZXQoKX1gO1xufTtcblxuLyoqXG4gKiBGb3JtIGJ1aWxkZXJzIC8gd3JhcHBlcnMgd2hlcmUgd2Uga2VlcCB0aXRsZS1maXJzdCByZXNvbHV0aW9uIChoZWFkaW5ncywgcGx1Z2luIHRpdGxlcykuXG4gKiBQbGFpbiBgPGZvcm0gaWQ9XCIuLi5cIj5gIHdpdGhvdXQgdGhlc2UgYW5jZXN0b3JzIHVzZXMgaWQvbmFtZSBmaXJzdCBzbyBkZWZhdWx0IEhUTUxcbiAqIG1hdGNoZXMgcHJpb3IgZXhwZWN0YXRpb25zIGFuZCBpcyBub3Qgb3ZlcnJpZGRlbiBieSBhbiBpbm5lciBgPGgyPmAgZXRjLlxuICpcbiAqIFNlbGVjdG9ycyBhcmUgY2hvc2VuIGZyb20gZWFjaCBwbHVnaW7igJlzIHR5cGljYWwgZnJvbnQtZW5kIG1hcmt1cCAoc2hvcnRjb2RlL2Jsb2NrIG91dHB1dCkuXG4gKiBJZiBhIGJ1aWxkZXIgaXMgbWlzc2luZywgYWRkIGEgc3RhYmxlIHdyYXBwZXIgY2xhc3MgZnJvbSB0aGF0IHBsdWdpbuKAmXMgcmVuZGVyZWQgSFRNTC5cbiAqL1xuY29uc3QgQ1VTVE9NX0ZPUk1fQ09OVEVYVF9TRUxFQ1RPUlMgPSBbXG4gIC8vIEdyYXZpdHkgRm9ybXNcbiAgJy5nZm9ybV93cmFwcGVyJyxcbiAgJy5nZl9icm93c2VyX2Nocm9tZScsXG4gIC8vIENvbnRhY3QgRm9ybSA3XG4gICcud3BjZjcnLFxuICAnLndwY2Y3LWZvcm0nLFxuICAvLyBGb3JtaWRhYmxlIEZvcm1zICgud2l0aF9mcm1fc3R5bGUgLyBjb250YWluZXIgLyBmb3JtIGNsYXNzIGZyb20gdGhlaXIgZG9jcyAmIGRlZmF1bHQgSFRNTClcbiAgJy53aXRoX2ZybV9zdHlsZScsXG4gICcuZnJtX2Zvcm1zX2NvbnRhaW5lcicsXG4gICcuZnJtLXNob3ctZm9ybScsXG4gICdbaWRePVwiZnJtX2Zvcm1fXCJdJyxcbiAgLy8gRmx1ZW50IEZvcm1zXG4gICcuZmx1ZW50Zm9ybScsXG4gICcuZmYtZWwtZm9ybS0tY29udGFpbmVyJyxcbiAgLy8gRXZlcmVzdCBGb3JtcyAoZGVmYXVsdCBzaG9ydGNvZGUgd3JhcHBlciBwZXIgZGV2ZWxvcGVyLmV2ZXJlc3Rmb3Jtcy5uZXQpXG4gICcuZXZlcmVzdC1mb3JtcycsXG4gIC8vIEhhcHB5Rm9ybXMgKGNvbW1vbiBjbGFzc2VzIGluIHRoZW1lL3dpZGdldCB3cmFwcGVyczsgcGx1Z2luIHVzZXMgXCJoYXBweWZvcm1zXCIgaW4gbWFya3VwKVxuICAnLmhhcHB5Zm9ybXMnLFxuICAnLmhhcHB5Zm9ybXMtZm9ybScsXG4gICcuaGFwcHlmb3Jtcy1mb3JtLXdyYXAnLFxuICAvLyBOaW5qYSBGb3Jtc1xuICAnLm5mLWZvcm0tY29udCcsXG4gICcubmluamEtZm9ybXMtZm9ybS13cmFwJyxcbiAgLy8gV1BGb3Jtc1xuICAnLndwZm9ybXMtY29udGFpbmVyJyxcbiAgJy53cGZvcm1zLWZvcm0tY29udGFpbmVyJyxcbiAgLy8gRWxlbWVudG9yIGZvcm0gd2lkZ2V0c1xuICAnLmVsZW1lbnRvci13aWRnZXQtZm9ybScsXG4gICcuZWxlbWVudG9yLWZvcm0nLFxuXSBhcyBjb25zdDtcblxuY29uc3QgaXNDdXN0b21Gb3JtQ29udGV4dCA9IChmb3JtOiBFbGVtZW50KTogYm9vbGVhbiA9PlxuICBDVVNUT01fRk9STV9DT05URVhUX1NFTEVDVE9SUy5zb21lKChzZWwpID0+ICEhZm9ybS5jbG9zZXN0KHNlbCkpO1xuXG5jb25zdCBwaWNrRm9ybUF0dHIgPSAoZm9ybTogRWxlbWVudCwgYXR0cjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgdiA9IGZvcm0uZ2V0QXR0cmlidXRlKGF0dHIpPy50cmltKCk7XG4gIHJldHVybi
2B2IHx8IHVuZGVmaW5lZDtcbn07XG5cbi8qKiBDdXN0b20gYnVpbGRlcnM6IHVuY2hhbmdlZCBmYWxsYmFjayBvcmRlciAobmFtZSBiZWZvcmUgaWQpLiAqL1xuY29uc3QgZ2V0RXhwbGljaXRGb3JtQXR0cmlidXRlc05hbWVGaXJzdCA9IChmb3JtOiBFbGVtZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkID0+XG4gIHBpY2tGb3JtQXR0cihmb3JtLCAnbmFtZScpIHx8XG4gIHBpY2tGb3JtQXR0cihmb3JtLCAnaWQnKSB8fFxuICBwaWNrRm9ybUF0dHIoZm9ybSwgJ2RhdGEtZm9ybWlkJykgfHxcbiAgcGlja0Zvcm1BdHRyKGZvcm0sICdkYXRhLW5hbWUnKTtcblxuLyoqIFBsYWluIEhUTUwgZm9ybXM6IHByZWZlciBpZCBsaWtlIGNsYXNzaWMgYmVoYXZpb3IsIHRoZW4gbmFtZS4gKi9cbmNvbnN0IGdldEV4cGxpY2l0Rm9ybUF0dHJpYnV0ZXNJZEZpcnN0ID0gKGZvcm06IEVsZW1lbnQpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT5cbiAgcGlja0Zvcm1BdHRyKGZvcm0sICdpZCcpIHx8XG4gIHBpY2tGb3JtQXR0cihmb3JtLCAnbmFtZScpIHx8XG4gIHBpY2tGb3JtQXR0cihmb3JtLCAnZGF0YS1mb3JtaWQnKSB8fFxuICBwaWNrRm9ybUF0dHIoZm9ybSwgJ2RhdGEtbmFtZScpO1xuXG4vKipcbiAqIERlcml2ZSBhIHN0YWJsZSBpZGVudGlmaWVyIGZvciBhIGZvcm0gZWxlbWVudC5cbiAqIFN1cHBvcnRzIHN0YW5kYXJkIGZvcm1zLCBHcmF2aXR5IEZvcm1zLCBhbmQgY29tbW9uIFdvcmRQcmVzcyBmb3JtIHBsdWdpbnMuXG4gKlxuICogTm90ZTogVXNlcyBnZXRBdHRyaWJ1dGUoKSBpbnN0ZWFkIG9mIGRpcmVjdCBwcm9wZXJ0eSBhY2Nlc3MgYmVjYXVzZVxuICogZm9ybSBlbGVtZW50cyB3aXRoIG5hbWU9XCJuYW1lXCIgb3IgbmFtZT1cImlkXCIgc2hhZG93IHRoZSBmb3JtJ3Mgb3duXG4gKiBuYW1lL2lkIHByb3BlcnRpZXMgKERPTSBxdWlyaykuXG4gKi9cbi8qKlxuICogRXh0cmFjdCBhIGh1bWFuLXJlYWRhYmxlIGZvcm0gdGl0bGUgZnJvbSB0aGUgRE9NIHN1cnJvdW5kaW5nIHRoZSBmb3JtIGVsZW1lbnQuXG4gKiBDaGVja3MgR3Jhdml0eSBGb3JtcyBgLmdmb3JtX3RpdGxlYCwgY29tbW9uIGhlYWRpbmcgcGF0dGVybnMsIGFuZCBkYXRhIGF0dHJpYnV0ZXMuXG4gKi9cbmNvbnN0IGV4dHJhY3RGb3JtVGl0bGUgPSAoZm9ybTogRWxlbWVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHdyYXBwZXIgPSBmb3JtLmNsb3Nlc3QoJy5nZm9ybV93cmFwcGVyLCAuZ2ZfYnJvd3Nlcl9jaHJvbWUnKTtcbiAgaWYgKHdyYXBwZXIpIHtcbiAgICBjb25zdCB0aXRsZUVsID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKCcuZ2Zvcm1fdGl0bGUnKTtcbiAgICBjb25zdCB0aXRsZSA9IHRpdGxlRWw/LnRleHRDb250ZW50Py50cmltKCk7XG4gICAgaWYgKHRpdGxlKSByZXR1cm4gdGl0bGU7XG4gIH1cblxuICBjb25zdCBpbnRlcm5hbEhlYWRpbmcgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2gxLCBoMiwgaDMsIGg0LCBsZWdlbmQnKTtcbiAgaWYgKGludGVybmFsSGVhZGluZz8udGV4dENvbnRlbnQ/LnRyaW0oKSkge1xuICAgIHJldHVybiBpbnRlcm5hbEhlYWRpbmcudGV4dENvbnRlbnQudHJpbSgpO1xuICB9XG5cbiAgY29uc3QgZGF0YVRpdGxlID0gZm9ybS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGl0bGUnKSB8fCBmb3JtLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpO1xuICBpZiAoZGF0YVRpdGxlPy50cmltKCkpIHJldHVybiBkYXRhVGl0bGUudHJpbSgpO1xuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rm9ybUlkZW50aWZpZXIgPSAoXG4gIHJvb3Q/OiBEb2N1bWVudCB8IEVsZW1lbnQgfCBIVE1MRm9ybUVsZW1lbnRcbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIHRyeSB7XG4gICAgbGV0IHRhcmdldEZvcm06IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0eXBlb2YgSFRNTEZvcm1FbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiByb290IGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50KSB7XG4gICAgICB0YXJnZXRGb3JtID0gcm9vdCBhcyBIVE1MRm9ybUVsZW1lbnQ7XG4gICAgfSBlbHNlIGlmIChyb290ICYmICdxdWVyeVNlbGVjdG9yJyBpbiAocm9vdCBhcyBhbnkpKSB7XG4gICAgICB0YXJnZXRGb3JtID0gKHJvb3QgYXMgRG9jdW1lbnQgfCBFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCdmb3JtJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldEZvcm0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdmb3JtJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRGb3JtKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzQ3VzdG9tRm9ybUNvbnRleHQodGFyZ2V0Rm9ybSkpIHtcbiAgICAgIGNvbnN0IGZvcm1UaXRsZSA9IGV4dHJhY3RGb3JtVGl0bGUodGFyZ2V0Rm9ybSk7XG4gICAgICBpZiAoZm9ybVRpdGxlKSByZXR1cm4gZm9ybVRpdGxlO1xuICAgICAgcmV0dXJuIGdldEV4cGxpY2l0Rm9ybUF0dHJpYnV0ZXNOYW1lRmlyc3QodGFyZ2V0Rm9ybSkgfHwgJ1VuaWRlbnRpZmllZCBGb3JtJztcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0IEhUTUwgZm9ybXM6IHByZWZlciBpZCAodGhlbiBuYW1lKSwgbm90IGFuIGlubmVyIGhlYWRpbmcsIHRoZW4gdGl0bGUgZmFsbGJhY2tcbiAgICBjb25zdCBleHBsaWNpdCA9IGdldEV4cGxpY2l0Rm9ybUF0dHJpYnV0ZXNJZEZpcnN0KHRhcmdldEZvcm0pO1xuICAgIGlmIChleHBsaWNpdCkgcmV0dXJuIGV4cGxpY2l0O1xuXG4gICAgY29uc3QgZm9ybVRpdGxlID0gZXh0cmFjdEZvcm1UaXRsZSh0YXJnZXRGb3JtKTtcbiAgICBpZiAoZm9ybVRpdGxlKSByZXR1cm4gZm9ybVRpdGxlO1xuXG4gICAgcmV0dXJuICdVbmlkZW50aWZpZWQgRm9ybSc7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGdldHRpbmcgZm9ybSBpZGVudGlmaWVyOicsIGUpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHBhcnNlX2pzXzEgPSByZXF1aXJlKFwiLi9wYXJzZS5qc1wiKTtcbmNvbnN0IHN0cmluZ2lmeV9qc18xID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuZnVuY3Rpb24gdjZUb1YxKHV1aWQpIHtcbiAgICBjb25zdCB2NkJ5dGVzID0gdHlwZW9mIHV1aWQgPT09ICdzdHJpbmcnID8gKDAsIHBhcnNlX2pzXzEuZGVmYXVsdCkodXVpZCkgOiB1dWlkO1xuICAgIGNvbnN0IHYxQnl0ZXMgPSBfdjZUb1YxKHY2Qnl0ZXMpO1xuICAgIHJldHVybi
2B0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgPyAoMCwgc3RyaW5naWZ5X2pzXzEudW5zYWZlU3RyaW5naWZ5KSh2MUJ5dGVzKSA6IHYxQnl0ZXM7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB2NlRvVjE7XG5mdW5jdGlvbiBfdjZUb1YxKHY2Qnl0ZXMpIHtcbiAgICByZXR1cm4gVWludDhBcnJheS5vZigoKHY2Qnl0ZXNbM10gJiAweDBmKSA8PCA0KSB8ICgodjZCeXRlc1s0XSA+PiA0KSAmIDB4MGYpLCAoKHY2Qnl0ZXNbNF0gJiAweDBmKSA8PCA0KSB8ICgodjZCeXRlc1s1XSAmIDB4ZjApID4+IDQpLCAoKHY2Qnl0ZXNbNV0gJiAweDBmKSA8PCA0KSB8ICh2NkJ5dGVzWzZdICYgMHgwZiksIHY2Qnl0ZXNbN10sICgodjZCeXRlc1sxXSAmIDB4MGYpIDw8IDQpIHwgKCh2NkJ5dGVzWzJdICYgMHhmMCkgPj4gNCksICgodjZCeXRlc1syXSAmIDB4MGYpIDw8IDQpIHwgKCh2NkJ5dGVzWzNdICYgMHhmMCkgPj4gNCksIDB4MTAgfCAoKHY2Qnl0ZXNbMF0gJiAweGYwKSA+PiA0KSwgKCh2NkJ5dGVzWzBdICYgMHgwZikgPDwgNCkgfCAoKHY2Qnl0ZXNbMV0gJiAweGYwKSA+PiA0KSwgdjZCeXRlc1s4XSwgdjZCeXRlc1s5XSwgdjZCeXRlc1sxMF0sIHY2Qnl0ZXNbMTFdLCB2NkJ5dGVzWzEyXSwgdjZCeXRlc1sxM10sIHY2Qnl0ZXNbMTRdLCB2NkJ5dGVzWzE1XSk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IG5hdGl2ZV9qc18xID0gcmVxdWlyZShcIi4vbmF0aXZlLmpzXCIpO1xuY29uc3Qgcm5nX2pzXzEgPSByZXF1aXJlKFwiLi9ybmcuanNcIik7XG5jb25zdCBzdHJpbmdpZnlfanNfMSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgaWYgKG5hdGl2ZV9qc18xLmRlZmF1bHQucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVfanNfMS5kZWZhdWx0LnJhbmRvbVVVSUQoKTtcbiAgICB9XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgY29uc3Qgcm5kcyA9IG9wdGlvbnMucmFuZG9tID8/IG9wdGlvbnMucm5nPy4oKSA/PyAoMCwgcm5nX2pzXzEuZGVmYXVsdCkoKTtcbiAgICBpZiAocm5kcy5sZW5ndGggPCAxNikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JhbmRvbSBieXRlcyBsZW5ndGggbXVzdCBiZSA+PSAxNicpO1xuICAgIH1cbiAgICBybmRzWzZdID0gKHJuZHNbNl0gJiAweDBmKSB8IDB4NDA7XG4gICAgcm5kc1s4XSA9IChybmRzWzhdICYgMHgzZikgfCAweDgwO1xuICAgIGlmIChidWYpIHtcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCArIDE2ID4gYnVmLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFVVSUQgYnl0ZSByYW5nZSAke29mZnNldH06JHtvZmZzZXQgKyAxNX0gaXMgb3V0IG9mIGJ1ZmZlciBib3VuZHNgKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBzdHJpbmdpZnlfanNfMS51bnNhZmVTdHJpbmdpZnkpKHJuZHMpO1xufVxuZXhwb3J0cy5kZWZh
2dWx0ID0gdjQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmxldCBnZXRSYW5kb21WYWx1ZXM7XG5jb25zdCBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbmZ1bmN0aW9uIHJuZygpIHtcbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgICBpZiAodHlwZW9mIGNyeXB0byA9PT0gJ3VuZGVmaW5lZCcgfHwgIWNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRSYW5kb21WYWx1ZXMgPSBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKTtcbiAgICB9XG4gICAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBybmc7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudXBkYXRlVjdTdGF0ZSA9IHZvaWQgMDtcbmNvbnN0IHJuZ19qc18xID0gcmVxdWlyZShcIi4vcm5nLmpzXCIpO1xuY29uc3Qgc3RyaW5naWZ5X2pzXzEgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG5jb25zdCBfc3RhdGUgPSB7fTtcbmZ1bmN0aW9uIHY3KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgbGV0IGJ5dGVzO1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGJ5dGVzID0gdjdCeXRlcyhvcHRpb25zLnJhbmRvbSA/PyBvcHRpb25zLnJuZz8uKCkgPz8gKDAsIHJuZ19qc18xLmRlZmF1bHQpKCksIG9wdGlvbnMubXNlY3MsIG9wdGlvbnMuc2VxLCBidWYsIG9mZnNldCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBybmRzID0gKDAsIHJuZ19qc18xLmRlZmF1bHQpKCk7XG4gICAgICAgIHVwZGF0ZVY3U3RhdGUoX3N0YXRlLCBub3csIHJuZHMpO1xuICAgICAgICBieXRlcyA9IHY3Qnl0ZXMocm5kcywgX3N0YXRlLm1zZWNzLCBfc3RhdGUuc2VxLCBidWYsIG9mZnNldCk7XG4gICAgfVxuICAgIHJldHVybiBidWYgPz8gKDAsIHN0cmluZ2lmeV9qc18xLnVuc2FmZVN0cmluZ2lmeSkoYnl0ZXMpO1xufVxuZnVuY3Rpb24gdXBkYXRlVjdTdGF0ZShzdGF0ZSwgbm93LCBybmRzKSB7XG4gICAgc3RhdGUubXNlY3MgPz89IC1JbmZpbml0eTtcbiAgICBzdGF0ZS5zZXEgPz89IDA7XG4gICAgaWYgKG5vdyA+IHN0YXRlLm1zZWNzKSB7XG4gICAgICAgIHN0YXRlLnNlcSA9IChybmRzWzZdIDw8IDIzKSB8IChybmRzWzddIDw8IDE2KSB8IChybmRzWzhdIDw8IDgpIHwgcm5kc1s5XTtcbiAgICAgICAgc3RhdGUubXNlY3MgPSBub3c7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzdGF0ZS5zZXEgPSAoc3RhdGUuc2VxICsgMSkgfCAwO1xuICAgICAgICBpZiAoc3RhdGUuc2VxID09PSAwKSB7XG4gICAgICAgICAgICBzdGF0ZS5tc2VjcysrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZTtcbn1cbmV4cG9ydHMudXBkYXRlVjdTdGF0ZSA9IHVwZGF0ZVY3U3RhdGU7XG5mdW5jdGlvbiB2N0J5dGVzKHJuZHMsIG1zZWNzLCBzZXEsIGJ1Ziwgb2Zmc2V0ID0gMCkge1xuICAgIGlmIChybmRzLmxlbmd0aCA8IDE2KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmFuZG9tIGJ5dGVzIGxlbmd0aCBtdXN0IGJlID49IDE2Jyk7XG4gICAgfVxuICAgIGlmICghYnVmKSB7XG4gICAgICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICAgICAgb2Zmc2V0ID0gMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCArIDE2ID4gYnVmLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFVVSUQgYnl0ZSByYW5nZSAke29mZnNldH06JHtvZmZzZXQgKyAxNX0gaXMgb3V0IG9mIGJ1ZmZlciBib3VuZHNgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtc2VjcyA/Pz0gRGF0ZS5ub3coKTtcbiAgICBzZXEgPz89ICgocm5kc1s2XSAqIDB4N2YpIDw8IDI0KSB8IChybmRzWzddIDw8IDE2KSB8IChybmRzWzhdIDw8IDgpIHwgcm5kc1s5XTtcbiAgICBidWZbb2Zmc2V0KytdID0gKG1zZWNzIC8gMHgxMDAwMDAwMDAwMCkgJiAweGZmO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAobXNlY3MgLyAweDEwMDAwMDAwMCkgJiAweGZmO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAobXNlY3MgLyAweDEwMDAwMDApICYgMHhmZjtcbiAgICBidWZbb2Zmc2V0KytdID0gKG1zZWNzIC8gMHgxMDAwMCkgJiAweGZmO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAobXNlY3MgLyAweDEwMCkgJiAweGZmO1xuICAgIGJ1ZltvZmZzZXQrK10gPSBtc2VjcyAmIDB4ZmY7XG4gICAgYnVmW29mZnNldCsrXSA9IDB4NzAgfCAoKHNlcSA+Pj4gMjgpICYgMHgwZik7XG4gICAgYnVmW29mZnNldCsrXSA9IChzZXEgPj4+IDIwKSAmIDB4ZmY7XG4gICAgYnVmW29mZnNldCsrXSA9IDB4ODAgfCAoKHNlcSA+Pj4gMTQpICYgMHgzZik7XG4gICAgYnVmW29mZnNldCsrXSA9IChzZXEgPj4+IDYpICYgMHhmZjtcbiAgICBidWZbb2Zmc2V0KytdID0gKChzZXEgPDwgMikgJiAweGZmKSB8IChybmRzWzEwXSAmIDB4MDMpO1xuICAgIGJ1ZltvZmZzZXQrK10gPSBybmRzWzExXTtcbiAgICBidWZbb2Zmc2V0KytdID0gcm5kc1sxMl07XG4gICAgYnVmW29mZnNldCsrXSA9IHJuZHNbMTNdO1xuICAgIGJ1ZltvZmZzZXQrK10gPSBybmRzWzE0XTtcbiAgICBidWZbb2Zmc2V0KytdID0gcm5kc1sxNV07XG4gICAgcmV0dXJuIGJ1Zjtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHY3O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBtZDUoY
2nl0ZXMpIHtcbiAgICBjb25zdCB3b3JkcyA9IHVpbnQ4VG9VaW50MzIoYnl0ZXMpO1xuICAgIGNvbnN0IG1kNUJ5dGVzID0gd29yZHNUb01kNSh3b3JkcywgYnl0ZXMubGVuZ3RoICogOCk7XG4gICAgcmV0dXJuIHVpbnQzMlRvVWludDgobWQ1Qnl0ZXMpO1xufVxuZnVuY3Rpb24gdWludDMyVG9VaW50OChpbnB1dCkge1xuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXQubGVuZ3RoICogNCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGggKiA0OyBpKyspIHtcbiAgICAgICAgYnl0ZXNbaV0gPSAoaW5wdXRbaSA+PiAyXSA+Pj4gKChpICUgNCkgKiA4KSkgJiAweGZmO1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXM7XG59XG5mdW5jdGlvbiBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGg4KSB7XG4gICAgcmV0dXJuICgoKGlucHV0TGVuZ3RoOCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNCArIDE7XG59XG5mdW5jdGlvbiB3b3Jkc1RvTWQ1KHgsIGxlbikge1xuICAgIGNvbnN0IHhwYWQgPSBuZXcgVWludDMyQXJyYXkoZ2V0T3V0cHV0TGVuZ3RoKGxlbikpLmZpbGwoMCk7XG4gICAgeHBhZC5zZXQoeCk7XG4gICAgeHBhZFtsZW4gPj4gNV0gfD0gMHg4MCA8PCBsZW4gJSAzMjtcbiAgICB4cGFkW3hwYWQubGVuZ3RoIC0gMV0gPSBsZW47XG4gICAgeCA9IHhwYWQ7XG4gICAgbGV0IGEgPSAxNzMyNTg0MTkzO1xuICAgIGxldCBiID0gLTI3MTczMzg3OTtcbiAgICBsZXQgYyA9IC0xNzMyNTg0MTk0O1xuICAgIGxldCBkID0gMjcxNzMzODc4O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkgKz0gMTYpIHtcbiAgICAgICAgY29uc3Qgb2xkYSA9IGE7XG4gICAgICAgIGNvbnN0IG9sZGIgPSBiO1xuICAgICAgICBjb25zdCBvbGRjID0gYztcbiAgICAgICAgY29uc3Qgb2xkZCA9IGQ7XG4gICAgICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2ldLCA3LCAtNjgwODc2OTM2KTtcbiAgICAgICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDFdLCAxMiwgLTM4OTU2NDU4Nik7XG4gICAgICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAyXSwgMTcsIDYwNjEwNTgxOSk7XG4gICAgICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAzXSwgMjIsIC0xMDQ0NTI1MzMwKTtcbiAgICAgICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA3LCAtMTc2NDE4ODk3KTtcbiAgICAgICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDVdLCAxMiwgMTIwMDA4MDQyNik7XG4gICAgICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTcsIC0xNDczMjMxMzQxKTtcbiAgICAgICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDddLCAyMiwgLTQ1NzA1OTgzKTtcbiAgICAgICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDhdLCA3LCAxNzcwMDM1NDE2KTtcbiAgICAgICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xuICAgICAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNywgLTQyMDYzKTtcbiAgICAgICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDExXSwgMjIsIC0xOTkwNDA0MTYyKTtcbiAgICAgICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDEyXSwgNywgMTgwNDYwMzY4Mik7XG4gICAgICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyAxM10sIDEyLCAtNDAzNDExMDEpO1xuICAgICAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMTRdLCAxNywgLTE1MDIwMDIyOTApO1xuICAgICAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgMTVdLCAyMiwgMTIzNjUzNTMyOSk7XG4gICAgICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNSwgLTE2NTc5NjUxMCk7XG4gICAgICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyA2XSwgOSwgLTEwNjk1MDE2MzIpO1xuICAgICAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTFdLCAxNCwgNjQzNzE3NzEzKTtcbiAgICAgICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaV0sIDIwLCAtMzczODk3MzAyKTtcbiAgICAgICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA1LCAtNzAxNTU4NjkxKTtcbiAgICAgICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDEwXSwgOSwgMzgwMTYwODMpO1xuICAgICAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNCwgLTY2MDQ3ODMzNSk7XG4gICAgICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xuICAgICAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgOV0sIDUsIDU2ODQ0NjQzOCk7XG4gICAgICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAxNF0sIDksIC0xMDE5ODAzNjkwKTtcbiAgICAgICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNCwgLTE4NzM2Mzk2MSk7XG4gICAgICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyA4XSwgMjAsIDExNjM1MzE1MDEpO1xuICAgICAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgMTNdLCA1LCAtMTQ0NDY4MTQ2Nyk7XG4gICAgICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAyXSwgOSwgLTUxNDAzNzg0KTtcbiAgICAgICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDddLCAxNCwgMTczNTMyODQ3Myk7XG4gICAgICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyAxMl0sIDIwLCAtMTkyNjYwNzczNCk7XG4gICAgICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyA1XSwgNCwgLTM3ODU1OCk7XG4gICAgICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcbiAgICAgICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTYsIDE4MzkwMzA1NjIpO1xuICAgICAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMTRdLCAyMywgLTM1MzA5NTU2KTtcbiAgICAgICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDFdLCA0LCAtMTUzMDk5MjA2MCk7XG4gICAgICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyA0XSwgMTEsIDEyNzI4OTMzNTMpO1xuICAgICAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgN10sIDE2LCAtMTU1NDk3NjMyKTtcbiAgICAgICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcbiAgICAgICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNCwgNjgxMjc5MTc0KTtcbiAgICAgICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaV0sIDExLCAtMzU4NTM3MjIyKTtcbiAgICAgICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNiwgLTcyMjUyMTk3OSk7XG4gICAgICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyA2XSwgMjMsIDc2MDI5MTg5KTtcbiAgICAgICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDldLCA0LCAtNjQwMzY0NDg3KTtcbiAgICAgICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDEyXSwgMTEsIC00MjE4MTU4MzUpO1xuICAgICAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNiwgNTMwNzQyNTIwKTtcbiAgICAgICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDJdLCAyMywgLTk5NTMzODY1MSk7XG4gICAgICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2ldLCA2LCAtMTk4NjMwODQ0KTtcbiAgICAgICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDddLCAxMCwgMTEyNjg5MTQxNSk7XG4gICAgICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE1LCAtMTQxNjM1NDkwNSk7XG4gICAgICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyA1XSwgMjEsIC01NzQzNDA1NSk7XG4gICAgICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDYsIDE3MDA0ODU1NzEpO1xuICAgICAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgM10sIDEwLCAtMTg5NDk4NjYwNik7XG4gICAgICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAxMF0sIDE1LCAtMTA1MTUyMyk7XG4gICAgICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyAxXSwgMjEsIC0yMDU0OTIyNz
2k5KTtcbiAgICAgICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDhdLCA2LCAxODczMzEzMzU5KTtcbiAgICAgICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDE1XSwgMTAsIC0zMDYxMTc0NCk7XG4gICAgICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTUsIC0xNTYwMTk4MzgwKTtcbiAgICAgICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDEzXSwgMjEsIDEzMDkxNTE2NDkpO1xuICAgICAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgNF0sIDYsIC0xNDU1MjMwNzApO1xuICAgICAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgMTFdLCAxMCwgLTExMjAyMTAzNzkpO1xuICAgICAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMl0sIDE1LCA3MTg3ODcyNTkpO1xuICAgICAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgOV0sIDIxLCAtMzQzNDg1NTUxKTtcbiAgICAgICAgYSA9IHNhZmVBZGQoYSwgb2xkYSk7XG4gICAgICAgIGIgPSBzYWZlQWRkKGIsIG9sZGIpO1xuICAgICAgICBjID0gc2FmZUFkZChjLCBvbGRjKTtcbiAgICAgICAgZCA9IHNhZmVBZGQoZCwgb2xkZCk7XG4gICAgfVxuICAgIHJldHVybiBVaW50MzJBcnJheS5vZihhLCBiLCBjLCBkKTtcbn1cbmZ1bmN0aW9uIHVpbnQ4VG9VaW50MzIoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDMyQXJyYXkoKTtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFVpbnQzMkFycmF5KGdldE91dHB1dExlbmd0aChpbnB1dC5sZW5ndGggKiA4KSkuZmlsbCgwKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG91dHB1dFtpID4+IDJdIHw9IChpbnB1dFtpXSAmIDB4ZmYpIDw8ICgoaSAlIDQpICogOCk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5mdW5jdGlvbiBzYWZlQWRkKHgsIHkpIHtcbiAgICBjb25zdCBsc3cgPSAoeCAmIDB4ZmZmZikgKyAoeSAmIDB4ZmZmZik7XG4gICAgY29uc3QgbXN3ID0gKHggPj4gMTYpICsgKHkgPj4gMTYpICsgKGxzdyA+PiAxNik7XG4gICAgcmV0dXJuIChtc3cgPDwgMTYpIHwgKGxzdyAmIDB4ZmZmZik7XG59XG5mdW5jdGlvbiBiaXRSb3RhdGVMZWZ0KG51bSwgY250KSB7XG4gICAgcmV0dXJuIChudW0gPDwgY250KSB8IChudW0gPj4+ICgzMiAtIGNudCkpO1xufVxuZnVuY3Rpb24gbWQ1Y21uKHEsIGEsIGIsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4gc2FmZUFkZChiaXRSb3RhdGVMZWZ0KHNhZmVBZGQoc2FmZUFkZChhLCBxKSwgc2FmZUFkZCh4LCB0KSksIHMpLCBiKTtcbn1cbmZ1bmN0aW9uIG1kNWZmKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4gbWQ1Y21uKChiICYgYykgfCAofmIgJiBkKSwgYSwgYiwgeCwgcywgdCk7XG59XG5mdW5jdGlvbiBtZDVnZyhhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgcmV0dXJuIG1kNWNtbigoYiAmIGQpIHwgKGMgJiB+ZCksIGEsIGIsIHgsIHMsIHQpO1xufVxuZnVuY3Rpb24gbWQ1aGgoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgIHJldHVybiBtZDVjbW4oYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KTtcbn1cbmZ1bmN0aW9uIG1kNWlpKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4gbWQ1Y21uKGMgXiAoYiB8IH5kKSwgYSwgYiwgeCwgcywgdCk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBtZDU7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHN0cmluZ2lmeV9qc18xID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuY29uc3QgdjFfanNfMSA9IHJlcXVpcmUoXCIuL3YxLmpzXCIpO1xuY29uc3QgdjFUb1Y2X2pzXzEgPSByZXF1aXJlKFwiLi92MVRvVjYuanNcIik7XG5mdW5jdGlvbiB2NihvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICAgIG9wdGlvbnMgPz89IHt9O1xuICAgIG9mZnNldCA/Pz0gMDtcbiAgICBsZXQgYnl0ZXMgPSAoMCwgdjFfanNfMS5kZWZhdWx0KSh7IC4uLm9wdGlvbnMsIF92NjogdHJ1ZSB9LCBuZXcgVWludDhBcnJheSgxNikpO1xuICAgIGJ5dGVzID0gKDAsIHYxVG9WNl9qc18xLmRlZmF1bHQpKGJ5dGVzKTtcbiAgICBpZiAoYnVmKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgICAgICAgICAgYnVmW29mZnNldCArIGldID0gYnl0ZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBzdHJpbmdpZnlfanNfMS51bnNhZmVTdHJpbmdpZnkpKGJ5dGVzKTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHY2O1xuIiwiLyoqIFV0aWxpdHk6IGNhc2UtaW5zZW5zaXRpdmUgY2hlY2sgZm9yIHRoZSB3b3JkIFwicGFzc3dvcmRcIiB1c2luZyBvcHRpb25hbCBjaGFpbmluZyAqL1xuZXhwb3J0IGNvbnN0IGNvbnRhaW5zUGFzc3dvcmQgPSAodmFsPzogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4gPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAhIXZhbD8udG9Mb3dlckNhc2U/LigpLmluY2x1ZGVzPy4oJ3Bhc3N3b3JkJyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSBmaWVsZCBzaG91bGQgYmUgdHJlYXRlZCBhcyBwYXNzd29yZC1saWtlLlxuICogRXZhbHVhdGVzIGlucHV0LnR5cGUsIGlucHV0Lm5hbWUsIGlucHV0LmlkLCBpbnB1dC5wbGFjZWhvbGRlciBhbmQgb3B0aW9uYWwgbGFiZWwgdGV4dC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzUGFzc3dvcmRMaWtlRmllbGQgPSAoXG4gIGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFNlbGVjdEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50LFxuICBsYWJlbFRleHQ/OiBzdHJpbmcgfCBudWxsXG4pOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIChcbiAgICBjb250YWluc1Bhc3N3b3JkKChpbnB1dCBhcyBhbnkpPy50eXBlKSB8fFxuICAgIGNvbnRhaW5zUGFzc3dvcmQoKGlucHV0IGFzIGFueSk/Lm5hbWUpIHx8XG4gICAgY29udGFpbnNQYXNzd29yZCgoaW5wdXQgYXMgYW55KT8uaWQpIHx8XG4gICAgY29udGFpbnNQYXNzd29yZCgoaW5wdXQgYXMgYW55KT8ucGxhY2Vob2xkZXIpIHx8XG4gICAgY29udGFpbnNQYXNzd29yZChsYWJlbFRleHQpXG4gICk7XG59O1xuXG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudXBkYXRlVjFTdGF0ZSA9IHZvaWQgMDtcbmNvbnN0IHJuZ19qc18xID0gcmVxdWlyZShcIi4vcm5nLmpzXCIpO1xuY29uc3Qgc3RyaW5naWZ5X2pzXzEgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG5jb25zdCBfc3RhdGUgPSB7fTtcbmZ1bmN0aW9uIHYxKG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgbGV0IGJ5dGVzO1xuICAgIGNvbnN0IGlzVjYgPSBvcHRpb25zPy5fdjYgPz8gZmFsc2U7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uc0tleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnNLZXlzLmxlbmd0aCA9PT0gMSAmJi
2BvcHRpb25zS2V5c1swXSA9PT0gJ192NicpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgYnl0ZXMgPSB2MUJ5dGVzKG9wdGlvbnMucmFuZG9tID8/IG9wdGlvbnMucm5nPy4oKSA/PyAoMCwgcm5nX2pzXzEuZGVmYXVsdCkoKSwgb3B0aW9ucy5tc2Vjcywgb3B0aW9ucy5uc2Vjcywgb3B0aW9ucy5jbG9ja3NlcSwgb3B0aW9ucy5ub2RlLCBidWYsIG9mZnNldCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBybmRzID0gKDAsIHJuZ19qc18xLmRlZmF1bHQpKCk7XG4gICAgICAgIHVwZGF0ZVYxU3RhdGUoX3N0YXRlLCBub3csIHJuZHMpO1xuICAgICAgICBieXRlcyA9IHYxQnl0ZXMocm5kcywgX3N0YXRlLm1zZWNzLCBfc3RhdGUubnNlY3MsIGlzVjYgPyB1bmRlZmluZWQgOiBfc3RhdGUuY2xvY2tzZXEsIGlzVjYgPyB1bmRlZmluZWQgOiBfc3RhdGUubm9kZSwgYnVmLCBvZmZzZXQpO1xuICAgIH1cbiAgICByZXR1cm4gYnVmID8/ICgwLCBzdHJpbmdpZnlfanNfMS51bnNhZmVTdHJpbmdpZnkpKGJ5dGVzKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVYxU3RhdGUoc3RhdGUsIG5vdywgcm5kcykge1xuICAgIHN0YXRlLm1zZWNzID8/PSAtSW5maW5pdHk7XG4gICAgc3RhdGUubnNlY3MgPz89IDA7XG4gICAgaWYgKG5vdyA9PT0gc3RhdGUubXNlY3MpIHtcbiAgICAgICAgc3RhdGUubnNlY3MrKztcbiAgICAgICAgaWYgKHN0YXRlLm5zZWNzID49IDEwMDAwKSB7XG4gICAgICAgICAgICBzdGF0ZS5ub2RlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgc3RhdGUubnNlY3MgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vdyA+IHN0YXRlLm1zZWNzKSB7XG4gICAgICAgIHN0YXRlLm5zZWNzID0gMDtcbiAgICB9XG4gICAgZWxzZSBpZiAobm93IDwgc3RhdGUubXNlY3MpIHtcbiAgICAgICAgc3RhdGUubm9kZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCFzdGF0ZS5ub2RlKSB7XG4gICAgICAgIHN0YXRlLm5vZGUgPSBybmRzLnNsaWNlKDEwLCAxNik7XG4gICAgICAgIHN0YXRlLm5vZGVbMF0gfD0gMHgwMTtcbiAgICAgICAgc3RhdGUuY2xvY2tzZXEgPSAoKHJuZHNbOF0gPDwgOCkgfCBybmRzWzldKSAmIDB4M2ZmZjtcbiAgICB9XG4gICAgc3RhdGUubXNlY3MgPSBub3c7XG4gICAgcmV0dXJuIHN0YXRlO1xufVxuZXhwb3J0cy51cGRhdGVWMVN0YXRlID0gdXBkYXRlVjFTdGF0ZTtcbmZ1bmN0aW9uIHYxQnl0ZXMocm5kcywgbXNlY3MsIG5zZWNzLCBjbG9ja3NlcSwgbm9kZSwgYnVmLCBvZmZzZXQgPSAwKSB7XG4gICAgaWYgKHJuZHMubGVuZ3RoIDwgMTYpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSYW5kb20gYnl0ZXMgbGVuZ3RoIG11c3QgYmUgPj0gMTYnKTtcbiAgICB9XG4gICAgaWYgKCFidWYpIHtcbiAgICAgICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgICAgICBvZmZzZXQgPSAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICsgMTYgPiBidWYubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVVVJRCBieXRlIHJhbmdlICR7b2Zmc2V0fToke29mZnNldCArIDE1fSBpcyBvdXQgb2YgYnVmZmVyIGJvdW5kc2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1zZWNzID8/PSBEYXRlLm5vdygpO1xuICAgIG5zZWNzID8/PSAwO1xuICAgIGNsb2Nrc2VxID8/PSAoKHJuZHNbOF0gPDwgOCkgfCBybmRzWzldKSAmIDB4M2ZmZjtcbiAgICBub2RlID8/PSBybmRzLnNsaWNlKDEwLCAxNik7XG4gICAgbXNlY3MgKz0gMTIyMTkyOTI4MDAwMDA7XG4gICAgY29uc3QgdGwgPSAoKG1zZWNzICYgMHhmZmZmZmZmKSAqIDEwMDAwICsgbnNlY3MpICUgMHgxMDAwMDAwMDA7XG4gICAgYnVmW29mZnNldCsrXSA9ICh0bCA+Pj4gMjQpICYgMHhmZjtcbiAgICBidWZbb2Zmc2V0KytdID0gKHRsID4+PiAxNikgJiAweGZmO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAodGwgPj4+IDgpICYgMHhmZjtcbiAgICBidWZbb2Zmc2V0KytdID0gdGwgJiAweGZmO1xuICAgIGNvbnN0IHRtaCA9ICgobXNlY3MgLyAweDEwMDAwMDAwMCkgKiAxMDAwMCkgJiAweGZmZmZmZmY7XG4gICAgYnVmW29mZnNldCsrXSA9ICh0bWggPj4+IDgpICYgMHhmZjtcbiAgICBidWZbb2Zmc2V0KytdID0gdG1oICYgMHhmZjtcbiAgICBidWZbb2Zmc2V0KytdID0gKCh0bWggPj4+IDI0KSAmIDB4ZikgfCAweDEwO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAodG1oID4+PiAxNikgJiAweGZmO1xuICAgIGJ1ZltvZmZzZXQrK10gPSAoY2xvY2tzZXEgPj4+IDgpIHwgMHg4MDtcbiAgICBidWZbb2Zmc2V0KytdID0gY2xvY2tzZXEgJiAweGZmO1xuICAgIGZvciAobGV0IG4gPSAwOyBuIDwgNjsgKytuKSB7XG4gICAgICAgIGJ1ZltvZmZzZXQrK10gPSBub2RlW25dO1xuICAgIH1cbiAgICByZXR1cm4gYnVmO1xufVxuZXhwb3J0cy5kZWZh
2dWx0ID0gdjE7XG4iLCJpbXBvcnQge1xuICBUcmFja2luZ0V2ZW50LFxuICBGb3JtU3VibWlzc2lvbkV2ZW50LFxuICBFdmVudFR5cGUsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgbG9nZ2VyLFxuICBnZXRTZXNzaW9uSWRGcm9tQ29va2llLFxuICBnZXRVc2VyRGF0YSxcbiAgZ2V0Rm9ybWF0dGVkVGltZXpvbmUsXG4gIGdldERldmljZVR5cGUsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgRXZlbnRRdWV1ZSwgUXVldWVDb25maWcgfSBmcm9tIFwiLi4vY29yZS9xdWV1ZS1zeXN0ZW1cIjtcbmltcG9ydCB7IEFQSV9FTkRQT0lOVFMsIFNDUklQVF9CQVNFTkFNRSB9IGZyb20gXCIuLi9jb25maWcvY29tbW9uXCI7XG5cbi8vIEJvdCBwcmV2ZW50aW9uIGNvbnN0YW50c1xuY29uc3QgUkFURV9MSU1JVF9FVkVOVFNfUEVSX1NFQ09ORCA9IDU7XG5cbi8qKlxuICogQVBJIENsaWVudCBmb3IgZXh0ZXJuYWwgdHJhY2tpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUNsaWVudCB7XG4gIHByaXZhdGUgYXBpRW5kcG9pbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSB0cmFja2luZ0lkOiBzdHJpbmc7XG4gIHByaXZhdGUgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBwcml2YXRlIGV2ZW50UXVldWU6IEV2ZW50UXVldWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdHJhY2tpbmdJZDogc3RyaW5nLFxuICAgIGFwaUVuZHBvaW50Pzogc3RyaW5nXG4gICkge1xuICAgIHRoaXMudHJhY2tpbmdJZCA9IHRyYWNraW5nSWQ7XG4gICAgdGhpcy5hcGlFbmRwb2ludCA9IGFwaUVuZHBvaW50IHx8IHRoaXMuZGV0ZXJtaW5lQXBpRW5kcG9pbnQoKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHRoZSBldmVudCBxdWV1ZSB3aXRoIGJvdCBwcmV2ZW50aW9uXG4gICAgY29uc3QgcXVldWVDb25maWc6IFF1ZXVlQ29uZmlnID0ge1xuICAgICAgbWF4RXZlbnRzUGVyU2Vjb25kOiBSQVRFX0xJTUlUX0VWRU5UU19QRVJfU0VDT05ELFxuICAgICAgbWF4UmV0cmllczogMyxcbiAgICAgIHJldHJ5RGVsYXlNczogMTAwMCxcbiAgICAgIG1heFF1ZXVlU2l6ZTogMTAwLFxuICAgIH07XG4gICAgXG4gICAgdGhpcy5ldmVudFF1ZXVlID0gbmV3IEV2ZW50UXVldWUocXVldWVDb25maWcpO1xuICAgIFxuICAgIC8vIFNldCB1cCB0aGUgcXVldWUgc2VuZGVyIHRvIHVzZSB0aGUgYWN0dWFsIEFQSSBzZW5kaW5nIGxvZ2ljXG4gICAgdGhpcy5ldmVudFF1ZXVlLnNldFNlbmRlcihhc3luYyAocGF5bG9hZDogYW55KSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnNlbmRFdmVudERpcmVjdGx5KHBheWxvYWQpO1xuICAgIH0pO1xuICAgIFxuICAgIGxvZ2dlci5sb2coJ0FwaUNsaWVudCBpbml0aWFsaXplZCB3aXRoIHJhdGUgbGltaXQ6JywgcXVldWVDb25maWcubWF4RXZlbnRzUGVyU2Vjb25kLCAnZXZlbnRzIHBlciBzZWNvbmQnKTtcbiAgfVxuXG4gIFxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgQVBJIGVuZHBvaW50IGJhc2VkIG9uIHNjcmlwdCBzb3VyY2UgVVJMXG4gICAqL1xuICBwcml2YXRlIGRldGVybWluZUFwaUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZpbmQgdGhlIGN1cnJlbnQgc2NyaXB0IHRhZyB0aGF0IGxvYWRlZCB0aGlzIHRyYWNraW5nIHNjcmlwdFxuICAgICAgY29uc3QgY3VycmVudFNjcmlwdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmMqPVwiJHtTQ1JJUFRfQkFTRU5BTUV9XCJdYCkgYXMgSFRNTFNjcmlwdEVsZW1lbnQ7XG4gICAgICBcbiAgICAgIGlmIChjdXJyZW50U2NyaXB0Py5zcmMpIHtcbiAgICAgICAgY29uc3Qgc2NyaXB0U3JjID0gY3VycmVudFNjcmlwdC5zcmM7XG4gICAgICAgIGxvZ2dlci5hcGkoJ1NjcmlwdCBzb3VyY2UgZGV0ZWN0ZWQ6Jywgc2NyaXB0U3JjKTtcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGZvciBzdGFnaW5nIGVudmlyb25tZW50XG4gICAgICAgIGlmIChzY3JpcHRTcmMuaW5jbHVkZXMoJ3N0YWdpbmcnKSkge1xuICAgICAgICAgIGxvZ2dlci5hcGkoJ1N0YWdpbmcgZW52aXJvbm1lbnQgZGV0ZWN0ZWQsIHVzaW5nIHN0YWdpbmcgQVBJIGVuZHBvaW50Jyk7XG4gICAgICAgICAgcmV0dXJuIEFQSV9FTkRQT0lOVFMuc3RhZ2luZztcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGxvY2FsaG9zdCBlbnZpcm9ubWVudFxuICAgICAgICBpZiAoc2NyaXB0U3JjLmluY2x1ZGVzKCdsb2NhbGhvc3QnKSkge1xuICAgICAgICAgIGxvZ2dlci5hcGkoJ0xvY2FsaG9zdCBlbnZpcm9ubWVudCBkZXRlY3RlZCwgdXNpbmcgbG9jYWxob3N0IEFQSSBlbmRwb2ludCcpO1xuICAgICAgICAgIHJldHVybiBBUElfRU5EUE9JTlRTLmxvY2FsO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBEZWZhdWx0IHRvIHByb2R1Y3Rpb25cbiAgICAgICAgbG9nZ2VyLmFwaSgnUHJvZHVjdGlvbiBlbnZpcm9ubWVudCBkZXRlY3RlZCwgdXNpbmcgcHJvZHVjdGlvbiBBUEkgZW5kcG9pbnQnKTtcbiAgICAgICAgcmV0dXJuIEFQSV9FTkRQT0lOVFMucHJvZHVjdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5hcGkoJ05vIHNjcmlwdCB0YWcgZm91bmQsIGRlZmF1bHRpbmcgdG8gcHJvZHVjdGlvbiBBUEkgZW5kcG9pbnQnKTtcbiAgICAgICAgcmV0dXJuIEFQSV9FTkRQT0lOVFMucHJvZHVjdGlvbjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBkZXRlcm1pbmluZyBBUEkgZW5kcG9pbnQ6JywgZXJyb3IpO1xuICAgICAgLy8gRmFsbGJhY2sgdG8gcHJvZHVjdGlvbiBpZiBkZXRlY3Rpb24gZmFpbHNcbiAgICAgIGxvZ2dlci5hcGkoJ0ZhbGxpbmcgYmFjayB0byBwcm9kdWN0aW9uIEFQSSBlbmRwb2ludCBkdWUgdG8gZXJyb3InKTtcbiAgICAgIHJldHVybiBBUElfRU5EUE9JTlRTLnByb2R1Y3Rpb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0cmFja2luZyBjb250ZXh0IGZyb20gdHJhY2tlciBzdGF0ZVxuICAgKi9cbiAgc2V0VHJhY2tpbmdDb250ZXh0KHNlc3Npb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCB0cmFja2luZyBldmVudCB0byBiYWNrZW5kIChxdWV1ZWQgd2l0aCByYXRlIGxpbWl0aW5nKVxuICAgKi9cbiAgYXN5bmMgc2VuZEV2ZW50KGV2ZW50OiBUcmFja2luZ0V2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuc3VyZSBkZXZpY2UgdHlwZSBpcyBjYXB0dXJlZCBjb25zaXN0ZW50bHkgZm9yIGFsbCBldmVudHMuXG4gICAgICBldmVudC5wcm9wZXJ0aWVzID0ge1xuICAgICAgICAuLi5ldmVudC5wcm9wZXJ0aWVzLFxuICAgICAgICBkZXZpY2VUeXBlOiBldmVudD8ucHJvcGVydGllcz8uZGV2aWNlVHlwZSB8fCBnZXREZXZpY2VUeXBlKCksXG4gICAgICB9O1xuXG4gICAgICAvLyBVc2Ugc2Vzc2lvbklkIGZyb20gdHJhY2tlciBzdGF0ZSwgZmFsbGJhY2sgdG8gY29va2llXG4gICAgICBjb25zdCBzZXNzaW9uSWQgPVxuICAgICAgICB0aGlzLnNlc3Npb25JZCB8fCBnZXRTZXNzaW9uSWRGcm9tQ29va2llKHRoaXMudHJhY2tpbmdJZCk7XG4gICAgICBjb25zdCB1c2VyRGF0YSA9IGdldFVzZXJEYXRhKCk7XG5cbiAgICAgIGxldCBlbmhhbmNlZEV2ZW50OiBUcmFja2luZ0V2ZW50ID0geyAuLi5ldmVudCB9O1xuXG4gICAgICAvLyBGb3IgZm9ybSBzdWJtaXNzaW9ucywgZW5oYW5jZSB3aXRoIHRpbWV6b25lXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gRXZlbnRUeXBlLkZPUk1fU1VCTUlTU0lPTiAmJiBcImZvcm1EYXRhXCIgaW4gZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZm9ybUV2ZW50ID0gZXZlbnQgYXMgRm9ybVN1Ym1pc3Npb25FdmVudDtcblxuICAgICAgICAvLyBBZGQgdGltZXpvbmUgdG8gZm9ybSBkYXRhXG4gICAgICAgIGNvbnN0IGVuaGFuY2VkRm9ybUV2ZW50OiBGb3JtU3VibWlzc2lvbkV2ZW50ID0ge1xuICAgICAgICAgIC4uLmZvcm1FdmVudCxcbiAgICAgICAgICBmb3JtRGF0YToge1xuICAgICAgICAgICAgLi4uZm9ybUV2ZW50LmZvcm1EYXRhLFxuICAgICAgICAgICAgVGltZXpvbmU6IGdldEZvcm1hdHRlZF
2RpbWV6b25lKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBlbmhhbmNlZEV2ZW50ID0gZW5oYW5jZWRGb3JtRXZlbnQ7XG5cbiAgICAgICAgbG9nZ2VyLmFwaShcIkVuaGFuY2VkIGZvcm0gZGF0YSB3aXRoIHRpbWV6b25lOlwiLCB7XG4gICAgICAgICAgdGltZXpvbmU6IGVuaGFuY2VkRm9ybUV2ZW50LmZvcm1EYXRhLlRpbWV6b25lLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgLi4uZW5oYW5jZWRFdmVudCxcbiAgICAgICAgdHJhY2tpbmdJZDogdGhpcy50cmFja2luZ0lkLFxuICAgICAgICBzZXNzaW9uSWQsIC8vIFVVSUQgZm9yIHNlc3Npb24gdHJhY2tpbmdcbiAgICAgICAgY29udGFjdElkOiB1c2VyRGF0YT8uY29udGFjdElkLCAvLyBJZiBhdmFpbGFibGUgZnJvbSBzdG9yZWQgdXNlciBkYXRhXG4gICAgICAgIHVzZXJJZDogdXNlckRhdGE/LnVzZXJJZCwgLy8gSWYgYXZhaWxhYmxlXG4gICAgICB9O1xuXG4gICAgICBsb2dnZXIuYXBpKFwiUXVldWVpbmcgZXZlbnQgcGF5bG9hZDpcIiwge1xuICAgICAgICB0eXBlOiBlbmhhbmNlZEV2ZW50LnR5cGUsXG4gICAgICAgIHNlc3Npb25JZCwgXG4gICAgICAgIHRyYWNraW5nSWQ6IHRoaXMudHJhY2tpbmdJZCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgZXZlbnQgdG8gcXVldWUgZm9yIHJhdGUtbGltaXRlZCBwcm9jZXNzaW5nXG4gICAgICBhd2FpdCB0aGlzLmV2ZW50UXVldWUuZW5xdWV1ZShwYXlsb2FkKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmFwaShcIkV2ZW50IHF1ZXVlZCBzdWNjZXNzZnVsbHk6XCIsIGVuaGFuY2VkRXZlbnQudHlwZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIHF1ZXVlaW5nIGV2ZW50OlwiLCBlcnJvcik7XG4gICAgICAvLyBEb24ndCB0aHJvdyAtIHdlIGRvbid0IHdhbnQgdHJhY2tpbmcgZXJyb3JzIHRvIGJyZWFrIHRoZSB1c2VyJ3Mgc2l0ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIHRyYWNraW5nIGV2ZW50IGRpcmVjdGx5IHRvIGJhY2tlbmQgKGJ5cGFzc2luZyBxdWV1ZSlcbiAgICogVGhpcyBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIHF1ZXVlIHN5c3RlbVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzZW5kRXZlbnREaXJlY3RseShwYXlsb2FkOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke3RoaXMuYXBpRW5kcG9pbnR9L2V4dGVybmFsLXRyYWNraW5nL2V2ZW50c2A7XG5cbiAgICAvLyBJZiBwYXlsb2FkIGNvbnRhaW5zIGZpbGUgdXBsb2FkcyAoZnJvbSBmb3JtIHN1Ym1pc3Npb25zKSwgc2VuZCBhcyBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC5maWxlcyAmJiB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBjb25zdCB7IGZpbGVzLCAuLi5ldmVudFdpdGhvdXRGaWxlcyB9ID0gcGF5bG9hZDtcblxuICAgICAgICAvLyBTZXJpYWxpemUgdGhlIGV2ZW50ICh3aXRob3V0IGZpbGVzKSBhcyBKU09OXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZXZlbnQnLCBKU09OLnN0cmluZ2lmeShldmVudFdpdGhvdXRGaWxlcykpO1xuXG4gICAgICAgIC8vIEFwcGVuZCBlYWNoIGZpbGUgdW5kZXIgaXRzIGNvcnJlc3BvbmRpbmcgZmllbGQgbmFtZVxuICAgICAgICBPYmplY3Qua2V5cyhmaWxlcyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KS5mb3JFYWNoKChmaWVsZE5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IChmaWxlcyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtmaWVsZE5hbWVdO1xuICAgICAgICAgIGNvbnN0IGxpc3Q6IEZpbGVbXSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICAgIGxpc3QuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKGZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZpZWxkTmFtZSwgZmlsZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAvLyBJZ25vcmUgbm9uLUZpbGUgZW50cmllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGVuZHBvaW50LCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIGV2ZW50OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2dnZXIuYXBpKCdFdmVudCBzZW50IHN1Y2Nlc3NmdWxseSAobXVsdGlwYXJ0KTonLCBwYXlsb2FkLnR5cGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIHNlbmRpbmcgbXVsdGlwYXJ0IGV2ZW50LCBmYWxsaW5nIGJhY2sgdG8gSlNPTjonLCBlcnJvcik7XG4gICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBKU09OIHBhdGggYmVsb3dcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0IEpTT04gcGF0aCAocGFnZSB2aWV3cywgbm9uLWZpbGUgZXZlbnRzLCBvciBtdWx0aXBhcnQgZmFsbGJhY2spXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChlbmRwb2ludCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIGV2ZW50OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmFwaShcIkV2ZW50IHNlbnQgc3VjY2Vzc2Z1bGx5OlwiLCBwYXlsb2FkLnR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdCBmb3JtIGRhdGFcbiAgICogU2VuZHMgZm9ybSBzdWJtaXNzaW9uIGV2ZW50cyB3aXRoIGVuaGFuY2VkIGRhdGFcbiAgICovXG4gIGFzeW5jIHN1Ym1pdEZvcm0oZXZlbnQ6IEZvcm1TdWJtaXNzaW9uRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgbG9nZ2VyLmFwaShcIkZvcm0gc3VibWlzc2lvbjpcIiwgZXZlbnQuZm9ybURhdGEpO1xuICAgICAgXG4gICAgICAvLyBTZW5kIGZvcm0gZGF0YSBhcyBhIHRyYWNraW5nIGV2ZW50XG4gICAgICBhd2FpdCB0aGlzLnNlbmRFdmVudChldmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIHN1Ym1pdHRpbmcgZm9ybTpcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbiIsImltcG9ydCB7
2IFRyYWNraW5nQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgR0xPQkFMX1RSQUNLSU5HX0tFWSwgU0NSSVBUX0JBU0VOQU1FIH0gZnJvbSAnLi9jb21tb24nO1xuXG4vKipcbiAqIFJlYWRzIGNvbmZpZ3VyYXRpb24gZnJvbSBzY3JpcHQgdGFnIGF0dHJpYnV0ZXNcbiAqIFxuICogQHJldHVybnMgVHJhY2tpbmdDb25maWcgaWYgdmFsaWQgYXR0cmlidXRlcyBmb3VuZCwgbnVsbCBvdGhlcndpc2VcbiAqIFxuICogTG9naWMgZmxvdzpcbiAqIDEuIEZpbmQgdGhlIGN1cnJlbnQgc2NyaXB0IHRhZyB1c2luZyBkb2N1bWVudC5jdXJyZW50U2NyaXB0IG9yIHNlbGVjdG9yXG4gKiAyLiBFeHRyYWN0IGRhdGEgYXR0cmlidXRlcyBmcm9tIHRoZSBzY3JpcHQgdGFnXG4gKiAzLiBWYWxpZGF0ZSByZXF1aXJlZCB0cmFja2luZ0lkIGF0dHJpYnV0ZVxuICogNC4gUGFyc2Ugb3B0aW9uYWwgY29uZmlndXJhdGlvbiBhdHRyaWJ1dGVzXG4gKiA1LiBSZXR1cm4gY29tcGxldGUgY29uZmlndXJhdGlvbiBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbmZpZ0Zyb21TY3JpcHRBdHRyaWJ1dGVzID0gKCk6IFRyYWNraW5nQ29uZmlnIHwgbnVsbCA9PiB7XG4gIHRyeSB7XG4gICAgLy8gRmluZCB0aGUgY3VycmVudCBzY3JpcHQgdGFnXG4gICAgY29uc3QgY3VycmVudFNjcmlwdCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgfHwgXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBzY3JpcHRbc3JjKj1cIiR7U0NSSVBUX0JBU0VOQU1FfVwiXWApO1xuICAgIFxuICAgIGlmICghY3VycmVudFNjcmlwdCkge1xuICAgICAgbG9nZ2VyLndhcm4oJ0NvdWxkIG5vdCBmaW5kIHNjcmlwdCB0YWcgZm9yIGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEVuYWJsZSBkZWJ1ZyBtb2RlIGVhcmx5IGlmIHNwZWNpZmllZCwgc28gd2UgY2FuIHNlZSB2YWxpZGF0aW9uIGVycm9yc1xuICAgIGNvbnN0IGRlYnVnID0gY3VycmVudFNjcmlwdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGVidWcnKTtcbiAgICBpZiAoZGVidWcgPT09ICd0cnVlJykge1xuICAgICAgY29uc3QgdyA9IHdpbmRvdyBhcyBhbnk7XG4gICAgICB3W0dMT0JBTF9UUkFDS0lOR19LRVldID0gd1tHTE9CQUxfVFJBQ0tJTkdfS0VZXSB8fCB7fTtcbiAgICAgIHdbR0xPQkFMX1RSQUNLSU5HX0tFWV0uZGVidWcgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFJlYWQgcmVxdWlyZWQgZGF0YSBhdHRyaWJ1dGVzXG4gICAgY29uc3QgdHJhY2tpbmdJZCA9IGN1cnJlbnRTY3JpcHQuZ2V0QXR0cmlidXRlKCdkYXRhLXRyYWNraW5nLWlkJyk7XG4gICAgXG4gICAgaWYgKCF0cmFja2luZ0lkKSB7XG4gICAgICBsb2dnZXIuY3JpdGljYWwoJ1JlcXVpcmVkIGRhdGEtdHJhY2tpbmctaWQgYXR0cmlidXRlIG5vdCBmb3VuZCcpO1xuICAgICAgbG9nZ2VyLmNyaXRpY2FsKCdQbGVhc2UgYWRkIGRhdGEtdHJhY2tpbmctaWQ9XCJ5b3VyLXRyYWNraW5nLWlkXCIgdG8gdGhlIHNjcmlwdCB0YWcnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZzogVHJhY2tpbmdDb25maWcgPSB7XG4gICAgICB0cmFja2luZ0lkLFxuICAgIH07XG5cbiAgICAvLyBBZGQgZGVidWcgdG8gY29uZmlnIGlmIGVuYWJsZWRcbiAgICBpZiAoZGVidWcgPT09ICd0cnVlJykge1xuICAgICAgY29uZmlnLmRlYnVnID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBvcHRpb25hbCBBUEkgZW5kcG9pbnQgYXR0cmlidXRlXG4gICAgY29uc3QgYXBpRW5kcG9pbnQgPSBjdXJyZW50U2NyaXB0LmdldEF0dHJpYnV0ZSgnZGF0YS1hcGktZW5kcG9pbnQnKTtcbiAgICBpZiAoYXBpRW5kcG9pbnQpIHtcbiAgICAgIGNvbmZpZy5hcGlFbmRwb2ludCA9IGFwaUVuZHBvaW50O1xuICAgIH1cblxuICAgIGxvZ2dlci5sb2coJ0NvbmZpZ3VyYXRpb24gbG9hZGVkIGZyb20gc2NyaXB0IGF0dHJpYnV0ZXM6JywgY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5jcml0aWNhbCgnRXJyb3IgcmVhZGluZyBzY3JpcHQgYXR0cmlidXRlczonLCBlcnJvcik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgdHJhY2tpbmcgY29uZmlndXJhdGlvbiBvYmplY3RcbiAqIFxuICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyBib29sZWFuIGluZGljYXRpbmcgaWYgY29uZmlndXJhdGlvbiBpcyB2YWxpZFxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVDb25maWcgPSAoY29uZmlnOiBUcmFja2luZ0NvbmZpZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWNvbmZpZyB8fCB0eXBlb2YgY29uZmlnICE9PSAnb2JqZWN0Jykge1xuICAgIGxvZ2dlci5jcml0aWNhbCgnSW52YWxpZCBjb25maWd1cmF0aW9uOiBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghY29uZmlnLnRyYWNraW5nSWQgfHwgdHlwZW9mIGNvbmZpZy50cmFja2luZ0lkICE9PSAnc3RyaW5nJykge1xuICAgIGxvZ2dlci5jcml0aWNhbCgnSW52YWxpZCBjb25maWd1cmF0aW9uOiB0cmFja2luZ0lkIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5hcGlFbmRwb2ludCAmJiB0eXBlb2YgY29uZmlnLmFwaUVuZHBvaW50ICE9PSAnc3RyaW5nJykge1xuICAgIGxvZ2dlci5jcml0aWNhbCgnSW52YWxpZCBjb25maWd1cmF0aW9uOiBhcGlFbmRwb2ludCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5kZWJ1ZyAmJiB0eXBlb2YgY29uZmlnLmRlYnVnICE9PSAnYm9vbGVhbicpIHtcbiAgICBsb2dnZXIuY3JpdGljYWwoJ0ludmFsaWQgY29uZmlndXJhdGlvbjogZGVidWcgbXVzdCBiZSBhIGJvb2xlYW4nKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07ICIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VUkwgPSBleHBvcnRzLkROUyA9IHZvaWQgMDtcbmNvbnN0IHNoYTFfanNfMSA9IHJlcXVpcmUoXCIuL3NoYTEuanNcIik7XG5jb25zdCB2MzVfanNfMSA9IHJlcXVpcmUoXCIuL3YzNS5qc1wiKTtcbnZhciB2MzVfanNfMiA9IHJlcXVpcmUoXCIuL3YzNS5qc1wiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkROU1wiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdjM1X2pzXzIuRE5TOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVVJMXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybi
2B2MzVfanNfMi5VUkw7IH0gfSk7XG5mdW5jdGlvbiB2NSh2YWx1ZSwgbmFtZXNwYWNlLCBidWYsIG9mZnNldCkge1xuICAgIHJldHVybiAoMCwgdjM1X2pzXzEuZGVmYXVsdCkoMHg1MCwgc2hhMV9qc18xLmRlZmF1bHQsIHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KTtcbn1cbnY1LkROUyA9IHYzNV9qc18xLkROUztcbnY1LlVSTCA9IHYzNV9qc18xLlVSTDtcbmV4cG9ydHMuZGVmYXVsdCA9IHY1O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBwYXJzZV9qc18xID0gcmVxdWlyZShcIi4vcGFyc2UuanNcIik7XG5jb25zdCBzdHJpbmdpZnlfanNfMSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcbmZ1bmN0aW9uIHYxVG9WNih1dWlkKSB7XG4gICAgY29uc3QgdjFCeXRlcyA9IHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyA/ICgwLCBwYXJzZV9qc18xLmRlZmF1bHQpKHV1aWQpIDogdXVpZDtcbiAgICBjb25zdCB2NkJ5dGVzID0gX3YxVG9WNih2MUJ5dGVzKTtcbiAgICByZXR1cm4gdHlwZW9mIHV1aWQgPT09ICdzdHJpbmcnID8gKDAsIHN0cmluZ2lmeV9qc18xLnVuc2FmZVN0cmluZ2lmeSkodjZCeXRlcykgOiB2NkJ5dGVzO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gdjFUb1Y2O1xuZnVuY3Rpb24gX3YxVG9WNih2MUJ5dGVzKSB7XG4gICAgcmV0dXJuIFVpbnQ4QXJyYXkub2YoKCh2MUJ5dGVzWzZdICYgMHgwZikgPDwgNCkgfCAoKHYxQnl0ZXNbN10gPj4gNCkgJiAweDBmKSwgKCh2MUJ5dGVzWzddICYgMHgwZikgPDwgNCkgfCAoKHYxQnl0ZXNbNF0gJiAweGYwKSA+PiA0KSwgKCh2MUJ5dGVzWzRdICYgMHgwZikgPDwgNCkgfCAoKHYxQnl0ZXNbNV0gJiAweGYwKSA+PiA0KSwgKCh2MUJ5dGVzWzVdICYgMHgwZikgPDwgNCkgfCAoKHYxQnl0ZXNbMF0gJiAweGYwKSA+PiA0KSwgKCh2MUJ5dGVzWzBdICYgMHgwZikgPDwgNCkgfCAoKHYxQnl0ZXNbMV0gJiAweGYwKSA+PiA0KSwgKCh2MUJ5dGVzWzFdICYgMHgwZikgPDwgNCkgfCAoKHYxQnl0ZXNbMl0gJiAweGYwKSA+PiA0KSwgMHg2MCB8ICh2MUJ5dGVzWzJdICYgMHgwZiksIHYxQnl0ZXNbM10sIHYxQnl0ZXNbOF0sIHYxQnl0ZXNbOV0sIHYxQnl0ZXNbMTBdLCB2MUJ5dGVzWzExXSwgdjFCeXRlc1sxMl0sIHYxQnl0ZXNbMTNdLCB2MUJ5dGVzWzE0XSwgdjFCeXRlc1sxNV0pO1xufVxuIiwiLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBleHRlcm5hbCB0cmFja2luZyBzeXN0ZW1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFja2luZ0NvbmZpZyB7XG4gIHRyYWNraW5nSWQ6IHN0cmluZztcbiAgYXBpRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIGRlYnVnPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCB0cmFja2luZyBzdGF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNraW5nU3RhdGUge1xuICBpbml0aWFsaXplZDogYm9vbGVhbjtcbiAgdHJhY2tpbmdJZDogc3RyaW5nO1xuICB1c2VySWQ/OiBzdHJpbmc7XG4gIHVzZXJQcm9wZXJ0aWVzPzogVXNlclByb3BlcnRpZXM7XG4gIHNlc3Npb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCB0eXBlcyB0aGF0IGNhbiBiZSB0cmFja2VkXG4gKi9cbmV4cG9ydCBlbnVtIEV2ZW50VHlwZSB7XG4gIFNDUklQVF9QQUdFX1ZJRVcgPSAnZXh0ZXJuYWxfc2NyaXB0X3BhZ2VfdmlldycsXG4gIEZPUk1fU1VCTUlTU0lPTiA9ICdleHRlcm5hbF9mb3JtX3N1Ym1pc3Npb24nLFxufVxuXG4vKipcbiAqIEJhc2UgZXZlbnQgc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2tpbmdFdmVudCB7XG4gIHR5cGU6IEV2ZW50VHlwZTtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIHVybDogc3RyaW5nO1xuICByZWZlcnJlcjogc3RyaW5nO1xuICB1c2VyQWdlbnQ6IHN0cmluZztcbiAgcHJvcGVydGllcz86IEV2ZW50UHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBQYWdlIHZpZXcgZXZlbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdlVmlld0V2ZW50IGV4dGVuZHMgVHJhY2tpbmdFdmVudCB7XG4gIHR5cGU6IEV2ZW50VHlwZS5TQ1JJUFRfUEFHRV9WSUVXO1xuICB0aXRsZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIGZvcm1JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3JtIHN1Ym1pc3Npb24gZXZlbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtU3VibWlzc2lvbkV2ZW50IGV4dGVuZHMgVHJhY2tpbmdFdmVudCB7XG4gIHR5cGU6IEV2ZW50VHlwZS5GT1JNX1NVQk1JU1NJT047XG4gIGZvcm1JZDogc3RyaW5nO1xuICBmb3JtRGF0YTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZmlsZXM/OiBSZWNvcmQ8c3RyaW5nLCBGaWxlIHwgRmlsZVtdPjtcbiAgZm9ybUxhYmVscz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogQ3VzdG9tIGV2ZW50IHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFByb3BlcnRpZXMge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8qKlxuICogVXNlciBwcm9wZXJ0aWVzIGZvciBpZGVudGlmaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQcm9wZXJ0aWVzIHtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBob25lPzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbiBcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VUkwgPSBleHBvcnRzLkROUyA9IHZvaWQgMDtcbmNvbnN0IG1kNV9qc18xID0gcmVxdWlyZShcIi4vbWQ1LmpzXCIpO1xuY29uc3QgdjM1X2pzXzEgPSByZXF1aXJlKFwiLi92MzUuanNcIik7XG52YXIgdjM1X2pzXzIgPSByZXF1aXJlKFwiLi92MzUuanNcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJETlNcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHYzNV9qc18yLkROUzsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlVSTFwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdjM1X2pzXzIuVVJMOyB9IH0pO1xuZnVuY3Rpb24gdjModmFsdWUsIG5hbWVzcGFjZSwgYnVmLCBvZmZzZXQpIHtcbiAgICByZXR1cm4gKDAsIHYzNV9qc18xLmRlZmF1bHQpKDB4MzAs
2IG1kNV9qc18xLmRlZmF1bHQsIHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KTtcbn1cbnYzLkROUyA9IHYzNV9qc18xLkROUztcbnYzLlVSTCA9IHYzNV9qc18xLlVSTDtcbmV4cG9ydHMuZGVmYXVsdCA9IHYzO1xuIiwiLyoqXG4gKiBTYWZlIGNvbnNvbGUgbG9nZ2VyIGZvciBkZWJ1ZyBtb2RlXG4gKiBPbmx5IGxvZ3Mgd2hlbiBkZWJ1ZyBtb2RlIGlzIGVuYWJsZWQgaW4gZ2xvYmFsIHRyYWNraW5nIGNvbmZpZ3VyYXRpb25cbiAqL1xuaW1wb3J0IHsgTE9HR0VSX0VSUk9SX1BSRUZJWCwgTE9HR0VSX1BSRUZJWCwgR0xPQkFMX1RSQUNLSU5HX0tFWSB9IGZyb20gJy4uL2NvbmZpZy9jb21tb24nO1xuXG5leHBvcnQgY29uc3QgbG9nZ2VyID0ge1xuICAvKipcbiAgICogTG9nIEFQSS1yZWxhdGVkIG1lc3NhZ2VzIChvbmx5IGluIGRlYnVnIG1vZGUpXG4gICAqIFxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIE1lc3NhZ2UgdG8gbG9nXG4gICAqIEBwYXJhbSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gbG9nXG4gICAqL1xuICBhcGk6IChtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgaWYgKGlzRGVidWdNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGAke0xPR0dFUl9QUkVGSVh9ICR7bWVzc2FnZX1gLCAuLi5hcmdzKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvZyBlcnJvciBtZXNzYWdlcyAob25seSBpbiBkZWJ1ZyBtb2RlKVxuICAgKiBcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBFcnJvciBtZXNzYWdlIHRvIGxvZ1xuICAgKiBAcGFyYW0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGxvZ1xuICAgKi9cbiAgZXJyb3I6IChtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgaWYgKGlzRGVidWdNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYCR7TE9HR0VSX1BSRUZJWH0gJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogTG9nIGNyaXRpY2FsIGVycm9ycyAoQUxXQVlTIHZpc2libGUsIHJlZ2FyZGxlc3Mgb2YgZGVidWcgbW9kZSlcbiAgICogXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gQ3JpdGljYWwgZXJyb3IgbWVzc2FnZSB0byBsb2dcbiAgICogQHBhcmFtIGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBsb2dcbiAgICovXG4gIGNyaXRpY2FsOiAobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoYCR7TE9HR0VSX0VSUk9SX1BSRUZJWH0gJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBMb2cgZ2VuZXJhbCBtZXNzYWdlcyAob25seSBpbiBkZWJ1ZyBtb2RlKVxuICAgKiBcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxvZ1xuICAgKiBAcGFyYW0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGxvZ1xuICAgKi9cbiAgbG9nOiAobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgIGlmIChpc0RlYnVnTW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmxvZyhgJHtMT0dHRVJfUFJFRklYfSAke21lc3NhZ2V9YCwgLi4uYXJncyk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBMb2cgd2FybmluZyBtZXNzYWdlcyAob25seSBpbiBkZWJ1ZyBtb2RlKVxuICAgKiBcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBXYXJuaW5nIG1lc3NhZ2UgdG8gbG9nXG4gICAqIEBwYXJhbSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gbG9nXG4gICAqL1xuICB3YXJuOiAobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgIGlmIChpc0RlYnVnTW9kZSgpKSB7XG4gICAgICBjb25zb2xlLndhcm4oYCR7TE9HR0VSX1BSRUZJWH0gJHttZXNzYWdlfWAsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfSxcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGRlYnVnIG1vZGUgaXMgZW5hYmxlZFxuICogXG4gKiBAcmV0dXJucyBib29sZWFuIGluZGljYXRpbmcgaWYgZGVidWcgbW9kZSBpcyBhY3RpdmVcbiAqL1xuY29uc3QgaXNEZWJ1Z01vZGUgPSAoKTogYm9vbGVhbiA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB3ID0gd2luZG93IGFzIGFueTtcbiAgcmV0dXJuIEJvb2xlYW4odz8uW0dMT0JBTF9UUkFDS0lOR19LRVldPy5kZWJ1Zyk7XG59O1xuXG4gIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmRlZmF1bHQgPSAvXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLThdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMHxmZmZmZmZmZi1mZmZmLWZmZmYtZmZmZi1mZmZmZmZmZmZmZmYpJC9pO1xuIiwiaW1wb3J0IHsgRXZlbnRUeXBlLCBQYWdlVmlld0V2ZW50LCBGb3JtU3VibWlzc2lvbkV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0UGFnZU1ldGFkYXRhLCBwYXJzZUZvcm1EYXRhLCBsb2dnZXIsIGdldEZvcm1JZGVudGlmaWVyIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKiogV2Vha1NldCB0byB0cmFjayBmb3JtcyB0aGF0IGFscmVhZHkgaGF2ZSBsaXN0ZW5lcnMgYXR0YWNoZWQgKi9cbmNvbnN0IHRyYWNrZWRGb3JtcyA9IG5ldyBXZWFrU2V0PEhUTUxGb3JtRWxlbWVudD4oKTtcblxuLyoqIE11dGF0aW9uT2JzZXJ2ZXIgaW5zdGFuY2UgZm9yIGR5bmFtaWMgZm9ybSBkZXRlY3Rpb24gKi9cbmxldCBmb3JtT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcblxuLyoqXG4gKiBTdGFydCBwYWdlIHRyYWNraW5nIC0gdHJhY2tzIHRoZSBpbml0aWFsIHBhZ2UgdmlldyBpbW1lZGlhdGVseVxuICovXG5leHBvcnQgY29uc3Qgc3RhcnRQYWdlVHJhY2tpbmcgPSAoY2FsbGJhY2s6IChldmVudDogUGFnZVZpZXdFdmVudCkgPT4gdm9pZCk6IHZvaWQgPT4ge1xuICBsb2dnZXIubG9nKCdUcmFja2luZyBpbml0aWFsIHBhZ2UgdmlldycpO1xuICBcbiAgY29uc3QgbWV0YWRhdGEgPSBnZXRQYWdlTWV0YWRhdGEoKTtcbiAgY29uc3QgZm9ybUlkID0gZ2V0Rm9ybUlkZW50aWZpZXIoKTtcbiAgY29uc3QgZXZlbnQ6IFBhZ2VWaWV3RXZlbnQgPSB7XG4gICAgdHlwZTogRXZlbnRUeXBlLlNDUklQVF9QQUdFX1ZJRVcsXG4gICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgIC4uLm1ldGFkYXRhLFxuICAgIC4uLihmb3JtSWQgPyB7IGZvcm1JZCB9IDoge30pLFxuICB9O1xuXG4gIGNhbGxiYWNrKGV2ZW50KTtcbn07XG5cbi8qKlxuICogU3RhcnQgZm9ybSB0cmFja2luZyB3aXRoIHN1cHBvcnQgZm9yIGR5bmFtaWNhbGx5IHJlbmRlcmVkIGZvcm1zXG4gKiBcbiAqIFVzZXMgTXV0YXRpb25PYnNlcnZlciB0byBkZXRlY3QgZm9ybXMgYWRkZWQgdG8gdGhlIERPTSBhZnRlciBpbml0aWFsIHBhZ2UgbG9hZCxcbiAqIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgU1BBcyBhbmQgb3RoZXIgYXBwcyB0aGF0IHJlbmRlciBmb3JtcyBhc3luY2hyb25vdXNseS5cbiAqIFxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGEgZm9ybSBpcyBzdWJtaXR0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHN0YXJ0Rm9ybVRyYWNraW5nID0gKGNhbGxiYWNrOiAoZXZlbnQ6IEZvcm1TdWJtaXNzaW9uRXZlbnQpID0+IHZvaWQpOiB2b2lkID0+IHtcbiAgbG9nZ2VyLmxvZygnU3RhcnRpbmcgZm9ybSBzdWJtaXNzaW9uIHRyYWNraW5nJyk7XG4gIFxuICAvKipcbiAgICogQXR0YWNoIHN1Ym1pdCBsaXN0ZW5lciB0byBhIGZvcm0gZWxlbWVudFxuICAgKiBQcmV2ZW50cyBkdXBsaWNhdGUgbGlzdGVuZXJzIHZpYSBXZWFrU2V0IHRyYWNraW5nXG4gICAqL1xuICBjb25zdCBhdHRhY2hGb3JtTGlzdGVuZXIgPSAoZm9ybTogSFRNTEZvcm1FbGVtZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKHRyYWNrZWRGb3Jtcy5oYXMoZm9ybSkpIHJldHVybjtcbiAgICBcbiAgICAvLyBUcmFjayBpZiBmb3JtIGhhcyBiZWVuIHN1Ym1pdHRlZCB0byBwcmV2ZW50IGR1cGxpY2F0ZSBldmVudHNcbiAgICBsZXQgZm9ybVN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgIFxuICAgIGNvbnN0IGhhbmRsZVN1Ym1pc3Npb24gPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAoZm9ybVN1Ym1pdHRlZCkgcmV0dXJuO1xuICAgICAgZm9ybVN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICBsb2dnZXIubG9nKCdGb3JtIHN1Ym1pdCBldmVudCBjYXB0dXJlZCcpO1xuICAgICAgaGFuZGxlRm9ybVN1Ym1pdChmb3JtLCBjYWxsYmFjayk7XG4gICAgICAvLyBSZXNldCBhZnRlciBhIHNob3J0IGRlbGF5IHRvIGFsbG93IGZvciByZS1zdWJtaXNzaW9uXG4gICAgICBzZXRUaW
21lb3V0KCgpID0+IHsgZm9ybVN1Ym1pdHRlZCA9IGZhbHNlOyB9LCAxMDAwKTtcbiAgICB9O1xuICAgIFxuICAgIC8vIExpc3RlbiBmb3IgbmF0aXZlIGZvcm0gc3VibWl0IGV2ZW50IChjYXB0dXJlIHBoYXNlKVxuICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgaGFuZGxlU3VibWlzc2lvbiwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIFxuICAgIC8vIEZhbGxiYWNrOiBMaXN0ZW4gZm9yIHN1Ym1pdCBidXR0b24gY2xpY2tzIChHcmF2aXR5IEZvcm1zIHVzZXMgb25jbGljayBoYW5kbGVyKVxuICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbnMgPSBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAnYnV0dG9uW3R5cGU9XCJzdWJtaXRcIl0sIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0sIFtkYXRhLXN1Ym1pc3Npb24tdHlwZT1cInN1Ym1pdFwiXSdcbiAgICApO1xuICAgIHN1Ym1pdEJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIGxvZ2dlci5sb2coJ1N1Ym1pdCBidXR0b24gY2xpY2sgZGV0ZWN0ZWQnKTtcbiAgICAgICAgLy8gU21hbGwgZGVsYXkgdG8gbGV0IGZvcm0gdmFsaWRhdGlvbiBydW4gZmlyc3RcbiAgICAgICAgc2V0VGltZW91dChoYW5kbGVTdWJtaXNzaW9uLCA1MCk7XG4gICAgICB9LCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgdHJhY2tlZEZvcm1zLmFkZChmb3JtKTtcbiAgICBjb25zdCBmb3JtSWRlbnRpZmllciA9IGdldEZvcm1JZGVudGlmaWVyKGZvcm0pIHx8ICdVbmlkZW50aWZpZWQgRm9ybSc7XG4gICAgbG9nZ2VyLmxvZygnVHJhY2tpbmcgZm9ybTonLCBmb3JtSWRlbnRpZmllciwgYCgke3N1Ym1pdEJ1dHRvbnMubGVuZ3RofSBzdWJtaXQgYnV0dG9uKHMpKWApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGaW5kIGFuZCBhdHRhY2ggbGlzdGVuZXJzIHRvIGFsbCBmb3JtcyBpbiBhIGdpdmVuIHJvb3QgZWxlbWVudFxuICAgKi9cbiAgY29uc3QgdHJhY2tGb3Jtc0luRWxlbWVudCA9IChyb290OiBFbGVtZW50IHwgRG9jdW1lbnQpOiB2b2lkID0+IHtcbiAgICBjb25zdCBmb3JtcyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCgnZm9ybScpO1xuICAgIGxvZ2dlci5sb2coYEZvdW5kICR7Zm9ybXMubGVuZ3RofSBmb3JtKHMpIGluIGRvY3VtZW50YCk7XG4gICAgZm9ybXMuZm9yRWFjaCgoZm9ybSkgPT4gYXR0YWNoRm9ybUxpc3RlbmVyKGZvcm0gYXMgSFRNTEZvcm1FbGVtZW50KSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIE11dGF0aW9uT2JzZXJ2ZXIgdG8gd2F0Y2ggZm9yIGR5bmFtaWNhbGx5IGFkZGVkIGZvcm1zXG4gICAqL1xuICBjb25zdCBpbml0T2JzZXJ2ZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKGZvcm1PYnNlcnZlciB8fCB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICBcbiAgICBmb3JtT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG4gICAgICBtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgYWRkZWROb2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24uYWRkZWROb2Rlcyk7XG4gICAgICAgIGFkZGVkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBhZGRlZCBub2RlIGlzIGEgZm9ybVxuICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50KSB7XG4gICAgICAgICAgICBsb2dnZXIubG9nKCdEeW5hbWljIGZvcm0gZGV0ZWN0ZWQgdmlhIE11dGF0aW9uT2JzZXJ2ZXInKTtcbiAgICAgICAgICAgIGF0dGFjaEZvcm1MaXN0ZW5lcihub2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIGZvcm1zIG5lc3RlZCB3aXRoaW4gdGhlIGFkZGVkIG5vZGVcbiAgICAgICAgICBjb25zdCBuZXN0ZWRGb3JtcyA9IG5vZGUucXVlcnlTZWxlY3RvckFsbCgnZm9ybScpO1xuICAgICAgICAgIG5lc3RlZEZvcm1zLmZvckVhY2goKG5lc3RlZEZvcm0pID0+IHtcbiAgICAgICAgICAgIGxvZ2dlci5sb2coJ05lc3RlZCBkeW5hbWljIGZvcm0gZGV0ZWN0ZWQgdmlhIE11dGF0aW9uT2JzZXJ2ZXInKTtcbiAgICAgICAgICAgIGF0dGFjaEZvcm1MaXN0ZW5lcihuZXN0ZWRGb3JtIGFzIEhUTUxGb3JtRWxlbWVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBmb3JtT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7IFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLCBcbiAgICAgIHN1YnRyZWU6IHRydWUgXG4gICAgfSk7XG4gICAgbG9nZ2VyLmxvZygnTXV0YXRpb25PYnNlcnZlciBpbml0aWFsaXplZCBmb3IgZHluYW1pYyBmb3JtIGRldGVjdGlvbicpO1xuICB9O1xuXG4gIC8vIFRyYWNrIGV4aXN0aW5nIGZvcm1zIG9uIHRoZSBwYWdlXG4gIHRyYWNrRm9ybXNJbkVsZW1lbnQoZG9jdW1lbnQpO1xuXG4gIC8vIFNldHVwIE11dGF0aW9uT2JzZXJ2ZXIgLSB3YWl0IGZvciBkb2N1bWVudC5ib2R5IGlmIG5vdCByZWFkeVxuICBpZiAoZG9jdW1lbnQuYm9keSkge1xuICAgIGluaXRPYnNlcnZlcigpO1xuICB9IGVsc2Uge1xuICAgIC8vIFdhaXQgZm9yIERPTSB0byBiZSByZWFkeSBiZWZvcmUgYXR0YWNoaW5nIG9ic2VydmVyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+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+IHtcbiAgbGV0IHByZXZTaWJsaW5nID0gaW5wdXQucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgd2hpbGUgKHByZXZTaWJsaW5nKSB7XG4gICAgaWYgKHByZXZTaWJsaW5nLnRhZ05hbWUgPT09ICdMQUJFTCcpIHtcbiAgICAgIHJldHVybiBwcmV2U2libGluZy50ZXh0Q29udGVudD8udHJpbSgpIHx8ICcnO1xuICAgIH1cbiAgICBwcmV2U2libGluZyA9IHByZXZTaWJsaW5nLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gIH1cbiAgcmV0dXJuICcnO1xufTtcbiIsIi8qKlxuICogUXVldWUgc3lzdGVtIGZvciBib3QgcHJldmVudGlvbiB3aXRoIGNvbmZpZ3VyYWJsZSByYXRlIGxpbWl0aW5nXG4gKiBcbiAqIEBkZXNjcmlwdGlvbiBNYW5hZ2VzIGV2ZW50IHF1ZXVpbmcgYW5kIHJhdGUgbGltaXRpbmcgdG8gcHJldmVudCBib3QtbGlrZSBiZWhhdmlvclxuICogQGF1dGhvciBBc3Npc3RhbnRcbiAqL1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVkRXZlbnQge1xuICBpZDogc3RyaW5nO1xuICBwYXlsb2FkOiBhbnk7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICByZXRyeUNvdW50OiBudW1iZXI7XG4gIG1heFJldHJpZXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWV1ZUNvbmZpZyB7XG4gIG1heEV2ZW50c1BlclNlY29uZDogbnVtYmVyO1xuICBtYXhSZXRyaWVzOiBudW1iZXI7XG4gIHJldHJ5RGVsYXlNczogbnVtYmVyO1xuICBtYXhRdWV1ZVNpemU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFdmVudCBxdWV1ZSBzeXN0ZW0gd2l0aCByYXRlIGxpbWl0aW5nIGZvciBib3QgcHJldmVudGlvblxuICovXG5leHBvcnQgY2xhc3MgRXZlbnRRdWV1ZSB7XG4gIHByaXZhdGUgcXVldWU6IFF1ZXVlZEV2ZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBwcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgY29uZmlnOiBRdWV1ZUNvbmZpZztcbiAgcHJpdmF0ZSBldmVudFRpbWVzOiBudW1iZXJbXSA9IFtdO1xuICBwcml2YXRlIGV2ZW50SWRDb3VudGVyOiBudW1iZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogUXVldWVDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIG1heEV2ZW50c1BlclNlY29uZDogY29uZmlnLm1heEV2ZW50c1BlclNlY29uZCB8fCA1LCAvLyBGaXhlZCByYXRlIGxpbWl0IGZvciBib3QgcHJldmVudGlvblxuICAgICAgbWF4UmV0cmllczogY29uZmlnLm1heFJldHJpZXMgfHwgMyxcbiAgICAgIHJldHJ5RGVsYXlNczogY29uZmlnLnJldHJ5RGVsYXlNcyB8fCAxMDAwLFxuICAgICAgbWF4UXVldWVTaXplOiBjb25maWcubWF4UXVldWVTaXplIHx8IDEwMCxcbiAgICB9O1xuICAgIFxuICAgIGxvZ2dlci5sb2coJ0V2ZW50UXVldWUgaW5pdGlhbGl6ZWQgd2l0aCBjb25maWc6JywgdGhpcy5jb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBldmVudCB0byBxdWV1ZSBmb3IgcHJvY2Vzc2luZ1xuICAgKiBcbiAgICogQHBhcmFtIHBheWxvYWQgLSBFdmVudCBwYXlsb2FkIHRvIGJlIHNlbnRcbiAgICogQHBhcmFtIG1heFJldHJpZXMgLSBNYXhpbXVtIG51bWJlciBvZiByZXRyeSBhdHRlbXB0cyBmb3IgdGhpcyBldmVudFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBldmVudCBpcyBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XG4gICAqL1xuICBhc3luYyBlbnF1ZXVlKHBheWxvYWQ6IGFueSwgbWF4UmV0cmllczogbnVtYmVyID0gdGhpcy5jb25maWcubWF4UmV0cmllcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybi
2BuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBDaGVjayBpZiBxdWV1ZSBpcyBmdWxsXG4gICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPj0gdGhpcy5jb25maWcubWF4UXVldWVTaXplKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdRdWV1ZSBpcyBmdWxsLCBkcm9wcGluZyBvbGRlc3QgZXZlbnQnKTtcbiAgICAgICAgdGhpcy5xdWV1ZS5zaGlmdCgpOyAvLyBSZW1vdmUgb2xkZXN0IGV2ZW50XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV2ZW50OiBRdWV1ZWRFdmVudCA9IHtcbiAgICAgICAgaWQ6IGBldmVudF8keysrdGhpcy5ldmVudElkQ291bnRlcn1gLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgIG1heFJldHJpZXMsXG4gICAgICB9O1xuXG4gICAgICAvLyBBZGQgcmVzb2x2ZS9yZWplY3QgY2FsbGJhY2tzIHRvIGV2ZW50IGZvciBwcm9taXNlIGhhbmRsaW5nXG4gICAgICAoZXZlbnQgYXMgYW55KS5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIChldmVudCBhcyBhbnkpLnJlamVjdCA9IHJlamVjdDtcblxuICAgICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICAgIGxvZ2dlci5sb2coYEV2ZW50ICR7ZXZlbnQuaWR9IGFkZGVkIHRvIHF1ZXVlLiBRdWV1ZSBsZW5ndGg6ICR7dGhpcy5xdWV1ZS5sZW5ndGh9YCk7XG5cbiAgICAgIC8vIFN0YXJ0IHByb2Nlc3NpbmcgaWYgbm90IGFscmVhZHkgcnVubmluZ1xuICAgICAgaWYgKCF0aGlzLnByb2Nlc3NpbmcpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHF1ZXVlZCBldmVudHMgd2l0aCByYXRlIGxpbWl0aW5nXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NRdWV1ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5wcm9jZXNzaW5nIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZTtcbiAgICBsb2dnZXIubG9nKCdTdGFydGluZyBxdWV1ZSBwcm9jZXNzaW5nJyk7XG5cbiAgICB3aGlsZSAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBldmVudCA9IHRoaXMucXVldWVbMF07XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiBzZW5kIHRoaXMgZXZlbnQgKHJhdGUgbGltaXRpbmcpXG4gICAgICBpZiAodGhpcy5jYW5TZW5kRXZlbnQoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFJlbW92ZSBldmVudCBmcm9tIHF1ZXVlIGJlZm9yZSBwcm9jZXNzaW5nXG4gICAgICAgICAgdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFJlY29yZCB0aGUgZXZlbnQgdGltZSBmb3IgcmF0ZSBsaW1pdGluZ1xuICAgICAgICAgIHRoaXMucmVjb3JkRXZlbnRUaW1lKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gUHJvY2VzcyB0aGUgZXZlbnRcbiAgICAgICAgICBhd2FpdCB0aGlzLnNlbmRFdmVudChldmVudCk7XG4gICAgICAgICAgXG4gICAgICAgICAgbG9nZ2VyLmxvZyhgRXZlbnQgJHtldmVudC5pZH0gcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseWApO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFJlc29sdmUgdGhlIHByb21pc2VcbiAgICAgIGlmICgoZXZlbnQgYXMgYW55KT8ucmVzb2x2ZSkge1xuICAgICAgICAgICAgKGV2ZW50IGFzIGFueSkucmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIHByb2Nlc3NpbmcgZXZlbnQgJHtldmVudC5pZH06YCwgZXJyb3IpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEhhbmRsZSByZXRyeSBsb2dpY1xuICAgICAgICAgIGlmICgoZXZlbnQ/LnJldHJ5Q291bnQgPz8gMCkgPCAoZXZlbnQ/Lm1heFJldHJpZXMgPz8gMCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnJldHJ5Q291bnQrKztcbiAgICAgICAgICAgIGxvZ2dlci5sb2coYFJldHJ5aW5nIGV2ZW50ICR7ZXZlbnQuaWR9IChhdHRlbXB0ICR7ZXZlbnQucmV0cnlDb3VudH0vJHtldmVudC5tYXhSZXRyaWVzfSlgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQWRkIGJhY2sgdG8gcXVldWUgd2l0aCBkZWxheVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMucXVldWUudW5zaGlmdChldmVudCk7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5wcm9jZXNzaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcy5jb25maWcucmV0cnlEZWxheU1zICogZXZlbnQucmV0cnlDb3VudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgRXZlbnQgJHtldmVudC5pZH0gZmFpbGVkIGFmdGVyICR7ZXZlbnQubWF4UmV0cmllc30gcmV0cmllc2ApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBSZWplY3QgdGhlIHByb21pc2VcbiAgICAgICAgICAgIGlmICgoZXZlbnQgYXMgYW55KT8ucmVqZWN0KSB7XG4gICAgICAgICAgICAgIChldmVudCBhcyBhbnkpLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXYWl0IGJlZm9yZSBjaGVja2luZyBhZ2FpblxuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JSYXRlTGltaXQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICBsb2dnZXIubG9nKCdRdWV1ZSBwcm9jZXNzaW5nIGNvbXBsZXRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHdlIGNhbiBzZW5kIGFuIGV2ZW50IGJhc2VkIG9uIHJhdGUgbGltaXRpbmdcbiAgICogXG4gICAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBldmVudCBjYW4gYmUgc2VudFxuICAgKi9cbiAgcHJpdmF0ZSBjYW5TZW5kRXZlbnQoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5jbGVhbnVwT2xkRXZlbnRUaW1lcygpO1xuICAgIHJldHVybi
2B0aGlzLmV2ZW50VGltZXMubGVuZ3RoIDwgdGhpcy5jb25maWcubWF4RXZlbnRzUGVyU2Vjb25kO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCB0aGUgY3VycmVudCB0aW1lIGZvciByYXRlIGxpbWl0aW5nIGNhbGN1bGF0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSByZWNvcmRFdmVudFRpbWUoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudFRpbWVzLnB1c2goRGF0ZS5ub3coKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGV2ZW50IHRpbWVzIG9sZGVyIHRoYW4gMSBzZWNvbmRcbiAgICovXG4gIHByaXZhdGUgY2xlYW51cE9sZEV2ZW50VGltZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgb25lU2Vjb25kQWdvID0gRGF0ZS5ub3coKSAtIDEwMDA7XG4gICAgdGhpcy5ldmVudFRpbWVzID0gdGhpcy5ldmVudFRpbWVzLmZpbHRlcih0aW1lID0+IHRpbWUgPiBvbmVTZWNvbmRBZ28pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhaXQgZm9yIHJhdGUgbGltaXQgdG8gYWxsb3cgbmV4dCBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yUmF0ZUxpbWl0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHdhaXRUaW1lID0gdGhpcy5jYWxjdWxhdGVXYWl0VGltZSgpO1xuICAgIGxvZ2dlci5sb2coYFJhdGUgbGltaXQgcmVhY2hlZCwgd2FpdGluZyAke3dhaXRUaW1lfW1zYCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHdhaXRUaW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGhvdyBsb25nIHRvIHdhaXQgYmVmb3JlIG5leHQgZXZlbnQgY2FuIGJlIHNlbnRcbiAgICogXG4gICAqIEByZXR1cm5zIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdFxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVXYWl0VGltZSgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmV2ZW50VGltZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRlc3RFdmVudFRpbWUgPSB0aGlzLmV2ZW50VGltZXNbMF07XG4gICAgY29uc3QgdGltZVNpbmNlT2xkZXN0ID0gRGF0ZS5ub3coKSAtIG9sZGVzdEV2ZW50VGltZTtcbiAgICBjb25zdCB0aW1lVG9XYWl0ID0gTWF0aC5tYXgoMCwgMTAwMCAtIHRpbWVTaW5jZU9sZGVzdCk7XG4gICAgXG4gICAgcmV0dXJuIHRpbWVUb1dhaXQgKyAxMDsgLy8gQWRkIHNtYWxsIGJ1ZmZlclxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgZXZlbnQgdXNpbmcgcHJvdmlkZWQgc2VuZGVyIGZ1bmN0aW9uXG4gICAqIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBvdmVycmlkZGVuIG9yIGhhdmUgc2VuZGVyIGZ1bmN0aW9uIGluamVjdGVkXG4gICAqIFxuICAgKiBAcGFyYW0gX2V2ZW50IC0gRXZlbnQgdG8gc2VuZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzZW5kRXZlbnQoX2V2ZW50OiBRdWV1ZWRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRoaXMgd2lsbCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgQXBpQ2xpZW50XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZW5kRXZlbnQgbWV0aG9kIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZXZlbnQgc2VuZGVyIGZ1bmN0aW9uXG4gICAqIFxuICAgKiBAcGFyYW0gc2VuZGVyIC0gRnVuY3Rpb24gdG8gc2VuZCBldmVudHNcbiAgICovXG4gIHNldFNlbmRlcihzZW5kZXI6IChwYXlsb2FkOiBhbnkpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICB0aGlzLnNlbmRFdmVudCA9IGFzeW5jIChldmVudDogUXVldWVkRXZlbnQpID0+IHtcbiAgICAgIGF3YWl0IHNlbmRlcihldmVudC5wYXlsb2FkKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IHF1ZXVlIHN0YXR1c1xuICAgKiBcbiAgICogQHJldHVybnMgT2JqZWN0IHdpdGggcXVldWUgc3RhdGlzdGljc1xuICAgKi9cbiAgZ2V0U3RhdHVzKCk6IHtcbiAgICBxdWV1ZUxlbmd0aDogbnVtYmVyO1xuICAgIHByb2Nlc3Npbmc6IGJvb2xlYW47XG4gICAgZXZlbnRzSW5MYXN0U2Vjb25kOiBudW1iZXI7XG4gICAgbWF4RXZlbnRzUGVyU2Vjb25kOiBudW1iZXI7XG4gIH0ge1xuICAgIHRoaXMuY2xlYW51cE9sZEV2ZW50VGltZXMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgcXVldWVMZW5ndGg6IHRoaXMucXVldWUubGVuZ3RoLFxuICAgICAgcHJvY2Vzc2luZzogdGhpcy5wcm9jZXNzaW5nLFxuICAgICAgZXZlbnRzSW5MYXN0U2Vjb25kOiB0aGlzLmV2ZW50VGltZXMubGVuZ3RoLFxuICAgICAgbWF4RXZlbnRzUGVyU2Vjb25kOiB0aGlzLmNvbmZpZy5tYXhFdmVudHNQZXJTZWNvbmQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgZXZlbnRzIGZyb20gcXVldWVcbiAgICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMucXVldWUuZm9yRWFjaChldmVudCA9PiB7XG4gICAgICBpZiAoKGV2ZW50IGFzIGFueSk/LnJlamVjdCkge1xuICAgICAgICAoZXZlbnQgYXMgYW55KS5yZWplY3QobmV3IEVycm9yKCdRdWV1ZSBjbGVhcmVkJykpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICB0aGlzLmV2ZW50VGltZXMgPSBbXTtcbiAgICBsb2dnZXIubG9nKCdRdWV1ZSBjbGVhcmVkJyk7XG4gIH1cbn0gIiwiaW1wb3J0IHsgZ2V0Rm9ybUlkZW50aWZpZXIsIGdldFVzZXJEYXRhLCBnZXREZXZpY2VUeXBlLCBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFNlc3Npb25UaW1pbmcsIFRyYWNraW5nQ29udGV4dCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFNlbmRzIHRpbWUgc3BlbnQgZXZlbnQgdG8gdGhlIHRyYWNraW5nIEFQSVxuICovXG5leHBvcnQgY29uc3Qgc2VuZFRpbWVTcGVudEV2ZW50ID0gKHRpbWluZzogU2Vzc2lvblRpbWluZywgY29udGV4dDogVHJhY2tpbmdDb250ZXh0KTogdm9pZCA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdXNlckRhdGEgPSBnZXRVc2VyRGF0YSgpO1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICB0eXBlOiAnZXh0ZXJuYWxfcGFnZV90aW1lX3NwZW50JyxcbiAgICAgIHRpbWVzdGFtcDogdGltaW5nLnNlc3Npb25FbmQsXG4gICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgcmVmZXJyZXI6IGRvY3VtZW50LnJlZmVycmVyLFxuICAgICAgdGl0bGU6IGRvY3VtZW50LnRpdGxlLFxuICAgICAgcGF0aDogd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgdXNlckFnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxuICAgICAgc2Vzc2lvbklkOiBjb250ZXh0LnNlc3Npb25JZCxcbiAgICAgIHRyYWNraW5nSWQ6IGNvbnRleHQudHJhY2tpbmdJZCxcbiAgICAgIGNvbnRhY3RJZDogY29udGV4dC5jb250YWN0SWQgfHwgdXNlckRhdGE/LmNvbnRhY3RJZCxcbiAgICAgIHVzZXJJZDogY29udGV4dC51c2VySWQgfHwgdXNlckRhdGE/LnVzZXJJZCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgc2Vzc2lvblN0YXJ0OiB0aW1pbmcuc2Vzc2lvblN0YXJ0LFxuICAgICAgICBzZXNzaW9uRW5kOiB0aW1pbmcuc2Vzc2lvbkVuZCxcbiAgICAgICAgdGltZVNwZW50TXM6IHRpbWluZy50aW1lU3BlbnRNcyxcbiAgICAgICAgZm9ybUlkZW50aWZpZXI6IGdldEZvcm1JZGVudGlmaWVyKCksXG4gICAgICAgIGRldmljZVR5cGU6IGdldERldmljZVR5cGUoKSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7Y29udGV4dC5hcGlFbmRwb2ludH0vZXh0ZXJuYWwtdHJhY2tpbmcvZXZlbnRzYDtcblxuICAgIGZldGNoKGVuZHBvaW50LCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXG4gICAgICBrZWVwYWxpdmU6IHRydWUsXG4gICAgfSkuY2F0Y2goKGVycikgPT4gbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2VuZCB0aW1lIHNwZW50IGV2ZW50JywgZXJyKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGlzcGF0Y2ggdGltZSBzcGVudCBldmVudCcsIGVycm9yKTtcbiAgfVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VUkwgPSBleHBvcnRzLkROUyA9IGV4cG9ydHMuc3RyaW5nVG9CeXRlcyA9IHZvaWQgMDtcbmNvbnN0IHBhcnNlX2pzXzEgPSByZXF1aXJlKFwiLi9wYXJzZS5qc1wiKTtcbmNvbnN0IHN0cmluZ2lmeV9qc18xID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhzdHIpIHtcbiAgICBzdHIgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7XG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShzdHIubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgICAgICBieXRlc1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXM7XG59XG5leHBvcnRzLnN0cmluZ1RvQnl0ZXMgPSBzdHJpbmdUb0J5dGVzO1xuZXhwb3J0cy5ETlMgPSAnNmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JztcbmV4cG9ydHMuVVJMID0gJzZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5mdW5jdGlvbiB2MzUodmVyc2lvbiwgaGFzaCwgdmFsdWUsIG5hbWVzcGFjZSwgYnVmLCBvZmZzZXQpIHtcbiAgICBjb25zdCB2YWx1ZUJ5dGVzID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHN0cmluZ1RvQnl0ZXModmFsdWUpIDogdmFsdWU7XG4gICAgY29uc3QgbmFtZXNwYWNlQnl0ZXMgPSB0eXBlb2YgbmFtZXNwYWNlID09PSAnc3RyaW5nJyA/ICgwLCBwYXJzZV9qc18xLmRlZmF1bHQpKG5hbWVzcGFjZSkgOiBuYW1lc3BhY2U7XG4gICAgaWYgKHR5cGVvZiBuYW1lc3BhY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG5hbWVzcGFjZSA9ICgwLCBwYXJzZV9qc18xLmRlZmF1bHQpKG5hbWVzcGFjZSk7XG4gICAgfVxuICAgIGlmIChuYW1lc3BhY2U/Lmxlbmd0aCAhPT0gMTYpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdOYW1lc3BhY2UgbXVzdCBiZSBhcnJheS1saWtlICgxNiBpdGVyYWJsZSBpbnRlZ2VyIHZhbHVlcywgMC0yNTUpJyk7XG4gICAgfVxuICAgIGxldCBieXRlcyA9IG5ldyBVaW50OEFycmF5KDE2ICsgdmFsdWVCeXRlcy5sZW5ndGgpO1xuICAgIGJ5dGVzLnNldChuYW1lc3BhY2VCeXRlcyk7XG4gICAgYnl0ZXMuc2V0KHZhbHVlQnl0ZXMsIG5hbWVzcGFjZUJ5dGVzLmxlbmd0aCk7XG4gICAgYnl0ZXMgPSBoYXNoKGJ5dGVzKTtcbiAgICBieXRlc1s2XSA9IChieXRlc1s2XSAmIDB4MGYpIHwgdmVyc2lvbjtcbiAgICBieXRlc1s4XSA9IChieXRlc1s4XSAmIDB4M2YpIHwgMHg4MDtcbiAgICBpZiAoYnVmKSB7XG4gICAgICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgICAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IGJ5dGVzW2ldO1xuICAgICAgICB9XG4gICAgICAgI
2HJldHVybiBidWY7XG4gICAgfVxuICAgIHJldHVybiAoMCwgc3RyaW5naWZ5X2pzXzEudW5zYWZlU3RyaW5naWZ5KShieXRlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB2MzU7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Nik7XG4iXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsInRoaXMiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwidW5zYWZlU3RyaW5naWZ5IiwidmFsaWRhdGVfanNfMSIsImJ5dGVUb0hleCIsImkiLCJwdXNoIiwidG9TdHJpbmciLCJzbGljZSIsImFyciIsIm9mZnNldCIsInRvTG93ZXJDYXNlIiwidXVpZCIsImRlZmF1bHQiLCJUeXBlRXJyb3IiLCJUaW1lT25QYWdlVHJhY2tlciIsInN0YXJ0VGltZVRyYWNraW5nIiwidHJhY2tlciIsIndpbmRvdyIsImludGVydmFsSWQiLCJzZXRJbnRlcnZhbCIsImNvbnRleHQiLCJnZXRUcmFja2luZ0NvbnRleHQiLCJjbGVhckludGVydmFsIiwidGltZVRyYWNrZXIiLCJ0aW1pbmciLCJzZW5kVGltZVNwZW50RXZlbnQiLCJ3IiwiR0xPQkFMX1RSQUNLSU5HX0tFWSIsImVycm9yIiwibG9nZ2VyIiwiaXNHcmF2aXR5Rm9ybXNGaWVsZCIsImlzQ29tcG91bmRGaWVsZCIsImdldCIsImdldE1haW5MYWJlbCIsImdldFN1YkxhYmVsIiwiZ2V0Q29tYmluZWRMYWJlbCIsImdldENvbnRhaW5lckxhYmVsIiwiZ2V0RmllbGRzZXRMZWdlbmQiLCJjbGVhbkxhYmVsVGV4dCIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwic3RhdGUiLCJpbml0aWFsaXplZCIsInRyYWNraW5nSWQiLCJhcGlDbGllbnQiLCJBcGlDbGllbnQiLCJhcGlFbmRwb2ludCIsImRlYnVnIiwibG9nIiwiaW5pdCIsIndhcm4iLCJzZXNzaW9uSWQiLCJnZW5lcmF0ZVNlc3Npb25JZCIsInN0b3JlU2Vzc2lvbklkSW5Db29raWUiLCJzZXRUcmFja2luZ0NvbnRleHQiLCJzdGFydFBhZ2VUcmFja2luZyIsImFzeW5jIiwiZXZlbnQiLCJwcm9wZXJ0aWVzIiwic2VuZEV2ZW50Iiwic3RhcnRGb3JtVHJhY2tpbmciLCJzdWJtaXRGb3JtIiwidXNlcklkIiwidXNlclByb3BlcnRpZXMiLCJkZXZpY2VUeXBlIiwiZ2V0RGV2aWNlVHlwZSIsImNyZWF0ZVRyYWNrZXIiLCJ2YWxpZGF0ZUNvbmZpZyIsIkVycm9yIiwiY3JpdGljYWwiLCJFeHRlcm5hbFRyYWNrZXIiLCJpbml0aWFsaXplRnJvbVNjcmlwdCIsImluaXRpYWxpemUiLCJ2ZXJzaW9uIiwidmFsaWRhdGUiLCJ2NyIsInY2VG9WMSIsInY2IiwidjUiLCJ2NCIsInYzIiwidjFUb1Y2IiwidjEiLCJzdHJpbmdpZnkiLCJwYXJzZSIsIk5JTCIsIk1BWCIsIm1heF9qc18xIiwiZW51bWVyYWJsZSIsIm5pbF9qc18xIiwicGFyc2VfanNfMSIsInN0cmluZ2lmeV9qc18xIiwidjFfanNfMSIsInYxVG9WNl9qc18xIiwidjNfanNfMSIsInY0X2pzXzEiLCJ2NV9qc18xIiwidjZfanNfMSIsInY2VG9WMV9qc18xIiwidjdfanNfMSIsInZlcnNpb25fanNfMSIsIklOQUNUSVZJVFlfTVMiLCJBQ1RJVklUWV9FVkVOVFMiLCJvbkNvbXBsZXRlIiwiYWN0aXZlVGltZU1zIiwidXBkYXRlVGltZXIiLCJpc0lkbGUiLCJkZXN0cm95ZWQiLCJmbHVzaGVkIiwic2Vzc2lvbkV4cGlyZWQiLCJvbkFjdGl2aXR5Iiwibm93IiwiRGF0ZSIsInNlc3Npb25TdGFydCIsImxhc3RUaWNrIiwibGFzdEFjdGl2aXR5QXQiLCJvblZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudCIsImhpZGRlbiIsImNoZWNrVGltZW91dCIsIm9uVW5sb2FkIiwiZW1pdFVwZGF0ZSIsInRpY2siLCJvblNlc3Npb25Db21wbGV0ZSIsImJpbmQiLCJmb3JFYWNoIiwiZXZ0IiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhc3NpdmUiLCJjYXB0dXJlIiwic2Vzc2lvbkVuZCIsInRpbWVTcGVudE1zIiwiTWF0aCIsIm1heCIsInJvdW5kIiwiZGVzdHJveSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJwYXJzZUZvcm1EYXRhIiwiY29udGFpbnNQYXNzd29yZCIsImlzUGFzc3dvcmRMaWtlRmllbGQiLCJnZXRDb29raWUiLCJuYW1lIiwicGFydHMiLCJjb29raWUiLCJzcGxpdCIsImxlbmd0aCIsInBvcCIsInNoaWZ0IiwiZSIsInNldENvb2tpZSIsImRheXMiLCJkYXRlIiwic2V0VGltZSIsImdldFRpbWUiLCJleHBpcmVzIiwidG9VVENTdHJpbmciLCJzdG9yZVVzZXJEYXRhIiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJKU09OIiwiZ2V0VXNlckRhdGEiLCJnZXRJdGVtIiwicGFyc2VkIiwiY2lkIiwiY3VzdG9tZXJfaWQiLCJub3JtYWxpem
2VkIiwiU3RyaW5nIiwidHJpbSIsImNvbnRhY3RJZCIsInNlc3Npb25TY29wZUlkIiwiY29va2llTmFtZSIsInNlc3Npb25TdG9yYWdlIiwiYXBpIiwiZ2V0U2Vzc2lvbklkRnJvbUNvb2tpZSIsImNvb2tpZVJlc3VsdCIsInNlc3Npb25TdG9yYWdlUmVzdWx0IiwiZ2V0RnJvbVN0b3JhZ2UiLCJrZXkiLCJzZXRJblN0b3JhZ2UiLCJkZWJvdW5jZSIsImZ1bmMiLCJ3YWl0IiwidGltZW91dCIsImFyZ3MiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwibmF2IiwibmF2aWdhdG9yIiwidW5kZWZpbmVkIiwidWEiLCJ1c2VyQWdlbnQiLCJtYXhUb3VjaFBvaW50cyIsInVzZXJBZ2VudERhdGEiLCJpc01vYmlsZUhpbnQiLCJtb2JpbGUiLCJpbmNsdWRlcyIsImdldFBhZ2VNZXRhZGF0YSIsInRpdGxlIiwidXJsIiwibG9jYXRpb24iLCJocmVmIiwicGF0aCIsInBhdGhuYW1lIiwicmVmZXJyZXIiLCJnZXRMb2NhbFRpbWVab25lIiwiSW50bCIsIkRhdGVUaW1lRm9ybWF0IiwicmVzb2x2ZWRPcHRpb25zIiwidGltZVpvbmUiLCJnZXRMb2NhbFRpbWVab25lT2Zmc2V0IiwibWF0Y2giLCJnZXRGb3JtYXR0ZWRUaW1lem9uZSIsIkNVU1RPTV9GT1JNX0NPTlRFWFRfU0VMRUNUT1JTIiwicGlja0Zvcm1BdHRyIiwiZm9ybSIsImF0dHIiLCJnZXRBdHRyaWJ1dGUiLCJleHRyYWN0Rm9ybVRpdGxlIiwid3JhcHBlciIsImNsb3Nlc3QiLCJ0aXRsZUVsIiwicXVlcnlTZWxlY3RvciIsInRleHRDb250ZW50IiwiaW50ZXJuYWxIZWFkaW5nIiwiZGF0YVRpdGxlIiwiZ2V0Rm9ybUlkZW50aWZpZXIiLCJ0YXJnZXRGb3JtIiwiSFRNTEZvcm1FbGVtZW50Iiwic29tZSIsInNlbCIsImdldEV4cGxpY2l0Rm9ybUF0dHJpYnV0ZXNOYW1lRmlyc3QiLCJleHBsaWNpdCIsImdldEV4cGxpY2l0Rm9ybUF0dHJpYnV0ZXNJZEZpcnN0IiwidjFCeXRlcyIsInY2Qnl0ZXMiLCJVaW50OEFycmF5Iiwib2YiLCJuYXRpdmVfanNfMSIsInJuZ19qc18xIiwib3B0aW9ucyIsImJ1ZiIsInJhbmRvbVVVSUQiLCJybmRzIiwicmFuZG9tIiwicm5nIiwiUmFuZ2VFcnJvciIsImdldFJhbmRvbVZhbHVlcyIsInJuZHM4IiwiY3J5cHRvIiwidXBkYXRlVjdTdGF0ZSIsIl9zdGF0ZSIsIm1zZWNzIiwic2VxIiwidjdCeXRlcyIsImJ5dGVzIiwiZ2V0T3V0cHV0TGVuZ3RoIiwiaW5wdXRMZW5ndGg4Iiwic2FmZUFkZCIsIngiLCJ5IiwibHN3IiwibWQ1Y21uIiwicSIsImEiLCJiIiwicyIsInQiLCJudW0iLCJjbnQiLCJtZDVmZiIsImMiLCJkIiwibWQ1Z2ciLCJtZDVoaCIsIm1kNWlpIiwiaW5wdXQiLCJ1aW50MzJUb1VpbnQ4IiwibGVuIiwieHBhZCIsIlVpbnQzMkFycmF5IiwiZmlsbCIsInNldCIsIm9sZGEiLCJvbGRiIiwib2xkYyIsIm9sZGQiLCJ3b3Jkc1RvTWQ1Iiwib3V0cHV0IiwidWludDhUb1VpbnQzMiIsIl92NiIsInZhbCIsImxhYmVsVGV4dCIsInR5cGUiLCJpZCIsInBsYWNlaG9sZGVyIiwidXBkYXRlVjFTdGF0ZSIsIm5zZWNzIiwibm9kZSIsImNsb2Nrc2VxIiwidGwiLCJ0bWgiLCJuIiwiaXNWNiIsIm9wdGlvbnNLZXlzIiwia2V5cyIsImRldGVybWluZUFwaUVuZHBvaW50IiwicXVldWVDb25maWciLCJtYXhFdmVudHNQZXJTZWNvbmQiLCJtYXhSZXRyaWVzIiwicmV0cnlEZWxheU1zIiwibWF4UXVldWVTaXplIiwiZXZlbnRRdWV1ZSIsIkV2ZW50UXVldWUiLCJzZXRTZW5kZXIiLCJwYXlsb2FkIiwic2VuZEV2ZW50RGlyZWN0bHkiLCJjdXJyZW50U2NyaXB0IiwiU0NSSVBUX0JBU0VOQU1FIiwic3JjIiwic2NyaXB0U3JjIiwiQVBJX0VORFBPSU5UUyIsInN0YWdpbmciLCJsb2NhbCIsInByb2R1Y3Rpb24iLCJ1c2VyRGF0YSIsImVuaGFuY2VkRXZlbnQiLCJFdmVudFR5cGUiLCJGT1JNX1NVQk1JU1NJT04iLCJmb3JtRXZlbnQiLCJlbmhhbmNlZEZvcm1FdmVudCIsImZvcm1EYXRhIiwiVGltZXpvbmUiLCJ0aW1lem9uZSIsImVucXVldWUiLCJlbmRwb2ludCIsImZpbGVzIiwiRm9ybURhdGEiLCJldmVudFdpdGhvdXRGaWxlcyIsImFwcGVuZCIsImZpZWxkTmFtZSIsIkFycmF5IiwiaXNBcnJheSIsImZpbGUiLCJGaWxlIiwicmVzcG9uc2UiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJvayIsInN0YXR1c1RleHQiLCJoZWFkZXJzIiwiZ2V0Q29uZmlnRnJvbVNjcmlwdEF0dHJpYnV0ZXMiLCJVUkwiLCJETlMiLCJzaGExX2pzXzEiLCJ2MzVfanNfMSIsInYzNV9qc18yIiwibmFtZXNwYWNlIiwibWQ1X2pzXzEiLCJtZXNzYWdlIiwiaXNEZWJ1Z01vZGUiLCJjb25zb2xlIiwiTE9HR0VSX1BSRUZJWCIsIkxPR0dFUl9FUlJPUl9QUkVGSVgiLCJCb29sZWFuIiwidHJhY2tlZEZvcm1zIiwiV2Vha1NldCIsImZvcm1PYnNlcnZlciIsImNhbGxiYWNrIiwibWV0YWRhdGEiLCJmb3JtSWQiLCJTQ1JJUFRfUEFHRV9WSUVXIiwidGltZXN0YW1wIiwiYXR0YWNoRm9ybUxpc3RlbmVyIiwiaGFzIiwiZm9ybVN1Ym1pdHRlZCIsImhhbmRsZVN1Ym1pc3Npb24iLCJoYW5kbGVGb3JtU3VibWl0Iiwic3VibWl0QnV0dG9ucyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJidXR0b24iLCJhZGQiLCJmb3JtSWRlbnRpZmllciIsInRyYWNrRm9ybXNJbkVsZW1lbnQiLCJmb3JtcyIsImluaXRPYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJtdXRhdGlvbiIsImZyb20iLCJhZGRlZE5vZGVzIiwiRWxlbWVudCIsIm5lc3RlZEZvcm0iLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsImZpZWxkRGF0YSIsImZpZWxkTGFiZWxzIiwidHJhY2tpbmdFdmVudCIsImZvcm1MYWJlbHMiLCJyZWdleF9qc18xIiwidGVzdCIsInBhcnNlSW50IiwiR0ZJRUxEX0NMQVNTIiwiR0ZJRUxEX0xBQkVMX0NMQVNTIiwiUkVRVUlSRURfSU5ESUNBVE9SX1JFR0VYIiwiQVNURVJJU0tfSU5ESUNBVE9SX1JFR0VYIiwiZWxlbWVudCIsInRleHQiLCJyZXBsYWNlIiwiZ2ZpZWxkIiwiZmllbGRzZXQiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImxlZ2VuZCIsImxhYmVsRWwiLCJzdWJMYWJlbEVsIiwic3ViTGFiZWwiLCJmaWVsZENvbnRhaW5lciIsImxhYmVsIiwidiIsImYiLCJ6IiwiUk9UTCIsIksiLCJIIiwibmV3Qnl0ZXMiLCJsIiwiTiIsImNlaWwiLCJNIiwiaiIsInBvdyIsImZsb29yIiwiVyIsIlQiLCJzY3JpcHRDb25maWciLCJmaWxlc0J5RmllbGQiLCJTZXQiLCJfIiwidmFsdWVzIiwiZ2V0QWxsIiwiY29sbGVjdGVkIiwiayIsImdldEFsbFZhbHVlcyIsInNlbGVjdG9yIiwiQ1NTIiwiZXNjYXBlIiwiZXNjYXBlQ3NzIiwiZWxlbWVudHMiLCJmaXJzdEVsIiwidGFnIiwidGFnTmFtZSIsImlzTXVsdGlwbGVTZWxlY3QiLCJtdWx0aXBsZSIsInJlc29sdmVPcHRpb25UZXh0IiwiZWwiLCJyYXciLCJjbG9uZSIsImNsb25lTm9kZSIsInJlbW92ZSIsImZvckxhYmVsIiwibmV4dCIsIm5leHRTaWJsaW5nIiwicmVzb2x2ZVNlbGVjdFRleHQiLCJvcHQiLCJmaW5kIiwibyIsIm1hcCIsImZpbGVMaXN0IiwibWV0YUxpc3QiLCJzaXplIiwiZmlsZW5hbWUiLCJtYXBGaWxlIiwic3RyIiwiY2hlY2tlZCIsImZpbHRlciIsImFsbENoZWNrYm94ZXMiLCJzZWVuIiwiZGlzYWJsZWQiLCJtdWx0aVNlbGVjdHMiLCJzdGFydHNXaXRoIiwiZGF0YVVybCIsImlucHV0cyIsInNob3VsZEluY2x1ZGVGaWVsZCIsImV4dHJhY3RGaWVsZExhYmVsIiwiaXNGaWVsZFZpc2libGUiLCJjb21wdXRlZFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRpc3BsYXkiLCJ2aXNpYmlsaXR5Iiwib3BhY2l0eSIsImdyYXZpdHlGb3Jtc0xhYmVsIiwiZ2V0R3Jhdml0eUZvcm1zQ29tYmluZWRMYWJlbCIsImdldExhYmVsQnlGb3JBdHRyaWJ1dGUiLCJwYXJlbnRMYWJlbCIsImdldFBhcmVudExhYmVsIiwiYWRqYWNlbnRMYWJlbCIsImdldEFkamFjZW50TGFiZWwiLCJjb250YWluZXJMYWJlbC
2IsIkdyYXZpdHlGb3JtcyIsImFzc29jaWF0ZWRMYWJlbCIsImNsb25lZExhYmVsIiwiY2hpbGRJbnB1dHMiLCJwcmV2U2libGluZyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJxdWV1ZSIsInByb2Nlc3NpbmciLCJldmVudFRpbWVzIiwiZXZlbnRJZENvdW50ZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJldHJ5Q291bnQiLCJwcm9jZXNzUXVldWUiLCJjYW5TZW5kRXZlbnQiLCJyZWNvcmRFdmVudFRpbWUiLCJ1bnNoaWZ0Iiwid2FpdEZvclJhdGVMaW1pdCIsImNsZWFudXBPbGRFdmVudFRpbWVzIiwib25lU2Vjb25kQWdvIiwidGltZSIsIndhaXRUaW1lIiwiY2FsY3VsYXRlV2FpdFRpbWUiLCJvbGRlc3RFdmVudFRpbWUiLCJ0aW1lU2luY2VPbGRlc3QiLCJfZXZlbnQiLCJzZW5kZXIiLCJnZXRTdGF0dXMiLCJxdWV1ZUxlbmd0aCIsImV2ZW50c0luTGFzdFNlY29uZCIsImNsZWFyIiwia2VlcGFsaXZlIiwiY2F0Y2giLCJlcnIiLCJzdHJpbmdUb0J5dGVzIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjaGFyQ29kZUF0IiwiaGFzaCIsInZhbHVlQnl0ZXMiLCJuYW1lc3BhY2VCeXRlcyIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19leHBvcnRzX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiY2FsbCJdLCJzb3VyY2VSb290IjoiIn0=

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.