1import{E as f}from"./clientlib-dependencies/resources/EntryPoint.Dd1dpATN.js";import{c as p}from"./clientlib-dependencies/resources/check-media.sWiu1TO7.js";import{d}from"./clientlib-dependencies/resources/disclaimer.DDM37GU5.js";import{a as h}from"./clientlib-dependencies/resources/analytics.CRggQR67.js";import{b as u,a as g}from"./clientlib-dependencies/resources/mlpHelper.BKXM-Kif.js";class v{constructor({el:e}){this.el=e,this.elements={colorizerImage:e.querySelector(".colorizer-image"),visImage:e.querySelector(".colorizer-image vis-image"),colorizerRotateControls:e.querySelector(".colorizer-rotate-controls"),colorizerSwatches:e.querySelector(".colorizer-swatches"),colorizerControls:e.querySelector(".colorizer-controls"),colorizerOptions:e.querySelector(".colorizer-options"),colorNameContainer:e.querySelector(".colorizer-color-name"),visSelect:e.querySelector("vis-select"),visSelectGroup:e.querySelector(".colorizer-swatches vis-selector-group")},this.state={swatchIndex:0,imageRotateIndex:Number(e.dataset.startingFrame-1||0),isDragging:!1,dragStartX:0,selectedOptionValue:null},this.data={masterColorList:[],models:[]},this.hasGradeSpecs=e.querySelector(".colorizer-vehicle-specs"),this.handleDrag=this.handleDrag.bind(this),this.handleDragStart=this.handleDragStart.bind(this),this.handleDragEnd=this.handleDragEnd.bind(this),this.hasGradeSpecs?this.el.addEventListener("colorizer:populate",async s=>{const{series:t,grade:i,year:r,startingColor:a,cachedDataPromise:o}=s.detail,n=u({pagePath:g(),series:t,grade:i,year:r});try{await this.#r(n,a,o)}finally{this.el.dispatchEvent(new CustomEvent("colorizer:ready",{bubbles:!0}))}}):this.#r(),d(e)}get availableColors(){if(!this.data.masterColorList.length)return[];const e=this.state.selectedOptionValue||this.data.models[0]?.value;return this.data.masterColorList.filter(s=>{if(Array.isArray(s.images))return!0;const t=e||Object.keys(s.images)[0];return s.images?.[t]!==void 0})}get currentColor(){return this.state.swatchIndex>=this.availableColors.length?this.availableColors[0]:this.availableColors[this.state.swatchIndex]}get currentImageList(){if(!this.currentColor)return[];const e=this.state.selectedOptionValue||this.data.models[0]?.value;return this.#l(this.currentColor,e)}#o(e,s=100){let t=0;return(...i)=>{const r=Date.now();r-t<s||(t=r,e.apply(this,i))}}#t(e,s,t){let r=s+(e==="left"?1:-1);return r>=t?r=0:r<0&&(r=t-1),r}#l(e,s){const t=e.images;if(Array.isArray(t))return t;if(typeof t=="object"&&t!==null){if(s&&t[s])return t[s];const i=Object.keys(t);if(i.length>0)return t[i[0]]}return[]}async#n(e=null,s=null){const t=!!this.elements.visSelect;let i=null;if(!s)if(e)i=e;else{const{modelNode:r}=this.el.dataset;if(!r)throw new Error("data-model-node attribute is required");i=u({pagePath:g(),modelNode:r,simple:!t})}this.data.masterColorList=[],this.data.models=[],this.state.selectedOptionValue=null;try{let r;if(s)r=await s;else{const o=await fetch(i);if(!o.ok)throw new Error(`Failed to fetch: ${o.status}`);r=await o.json()}const{vehicleData:a}=r;t?this.#c(a):this.data.masterColorList=a.colors}catch(r){console.error("Colorizer data load failed:",r)}}#c(e){this.data.models=[...new Set(e.models.map(t=>t.grade))].map((t,i)=>({id:String(i),label:t,value:t})),this.data.models.length>0&&(this.state.selectedOptionValue=this.data.models[0].value);const s={};e.models.forEach(t=>{t.colors.forEach(i=>{const{colorName:r,hex:a,hex2:o,images:n}=i;s[r]||(s[r]={colorName:r,hex:a,hex2:o,images:{}}),s[r].images[t.grade]=n})}),this.data.masterColorList=Object.values(s)}#s(){if(this.hasGradeSpecs)return;this.availableColors.length>12?p(s=>{this.#i(s)},"48em"):this.#i(!0)}async#r(e=null,s=null,t=null){try{await this.#n(e,t)}catch(r){console.error("Colorizer: Failed to fetch data",r);return}this.#s(),this.#a(),this.hasGradeSpecs||(this.#h(),this.#d()),this.elements.visSelect&&this.#g();let i=0;if(s){const r=l=>String(l).replace("#","").trim().toUpperCase(),a=r(s.hex1),o=s.hex2?r(s.hex2):null,n=this.availableColors.findIndex(l=>{const c=r(l.hex),m=l.hex2?r(l.hex2):null;return a===c&&o===m});n!==-1&&(i=n)}this.#e(i)}#i(e){const{colorizerSwatches:s,colorizerControls:t}=this.elements,i=Math.ceil(this.availableColors.length/10),r=i-1,a=t.querySelector("vis-carousel-selectors");if(!a||(e?(s.classList.remove("colorizer-swatch-carousel"),s.style.removeProperty("--width-multiplier"),s.style.removeProperty("--carousel-index")):(s.classList.add("colorizer-swatch-carousel"),s.style.setProperty("--width-multiplier",i)),a.totalSlides=i,t.setAttribute("aria-hidden",e),this._hasCarouselListeners))return;let o=0;const n=l=>{s.style.setProperty("--carousel-index",l),o=l,a.currentSlideIndex=l};a.addEventListener("viscarouselselectors-bulletclick",l=>{if(o!==l.detail.index){const c=o<l.detail.index?"color select right arrow":"color select left arrow";h("fireWithContext","aa-link",l.currentTarget,{link_text:c,link_type_title:c,link_button_action:`${c} link`,link_type:"button"})}n(l.detail.index)}),a.addEventListener("viscarouselselectors-previousclick",l=>{o>0&&n(o-1),h("fireWithContext","aa-link",l.currentTarget,{link_text:"color select left arrow",link_type_title:"color select left arrow",link_button_action:"color select left arrow link",link_type:"button"})}),a.addEventListener("viscarouselselectors-nextclick",l=>{o<r&&n(o+1),h("fireWithContext","aa-link",l.currentTarget,{link_text:"color select right arrow",link_type_title:"color select right arrow",link_button_action:"color select right arrow link",link_type:"button"})}),this._hasCarouselListeners=!0}handleDrag(e){if(!this.state.isDragging)return;const s=e.type==="touchmove"?e.touches[0].clientX:e.clientX,t=s-this.state.dragStartX,i=this.currentImageList;if(Math.abs(t)<10)return;const r=t>0?"right":"left",a=this.state.imageRotateIndex;this.state.imageRotateIndex=this.#t(r,this.state.imageRotateIndex,i.length),this.elements.visImage.src=i[this.state.imageRotateIndex],a!==this.state.imageRotateIndex&&h("fireWithContext","aa-link",this.el,{link_text:`${r} swipe`,link_type_title:`${r} swipe`,link_button_action:`${r} swipe link`,link_type:"button"}),this.state.dragStartX=s}handleDragStart(e){e.type==="mousedown"&&e.button!==0||(this.state.isDragging=!0,this.state.dragStartX=e.type==="touchstart"?e.touches[0].clientX:e.clientX,this.elements.visImage.classList.add("dragging"))}handleDragEnd(){this.state.isDragging&&(this.state.isDragging=!1,this.elements.visImage.classList.remove("dragging"))}#h(){const e=this.#o(this.handleDrag,100);this.el.addEventListener("mousedown",this.handleDragStart),this.el.addEventListener("touchstart",this.handleDragStart,{passive:!0}),this.el.addEventListener("mousemove",e),this.el.addEventListener("touchmove",e,{passive:!0}),this.el.addEventListener("mouseup",this.handleDragEnd),this.el.addEventListener("touchend",this.handleDragEnd)}#d(){const{colorizerRotateControls:e}=this.elements;e.querySelectorAll("button").forEach(s=>{s.addEventListener("click",t=>{const i=t.currentTarget.classList.contains("rotate-left")?"left":"right",r=this.currentImageList;this.state.imageRotateIndex=this.#t(i,this.state.imageRotateIndex,r.length),this.elements.visImage.src=r[this.state.imageRotateIndex]})})}#a(){const{visSelectGroup:e}=this.elements;e.innerHTML="",this._hasGroupListener||(e.addEventListener("visselectorgroup-change",s=>{const t=s.detail?.selection;if(!t||t.length===0)return;const[i]=t,r=this.availableColors.findIndex(a=>{const o=String(a.hex).replace("#","").trim().toUpperCase(),n=a.hex2?String(a.hex2).replace("#","").trim().toUpperCase():null;return(n?`${o}|${n}`:o)===i});r!==-1&&this.state.swatchIndex!==r&&this.#e(r)}
1),this._hasGroupListener=!0),this.availableColors.forEach((s,t)=>{const i=document.createElement("vis-color-selector");i.hex1=s.hex,i.label=s.colorName,s.hex2&&(i.hex2=s.hex2),i.dataset.aaAction="aa-link",i.dataset.aaLinkButtonAction="color select link",i.setAttribute("aria-label",s.colorName),i.dataset.aaLinkCount=this.availableColors.length,i.dataset.aaLinkIndex=t+1,i.dataset.aaListItemIndex=t+1,i.dataset.aaListResultCount=this.availableColors.length,t===0&&(i.selected=!0),i.addEventListener("viscolorselector-click",r=>{if(!r.detail.selected){setTimeout(()=>{i.selected=!0},20);return}}),e.appendChild(i)})}#u(){const{colorNameContainer:e}=this.elements,s=this.currentColor;if(!s)return;const t=e.querySelector("vis-typography");t.innerHTML=s.colorName,d(e)}#e(e){let s=this.availableColors[e];if(s||([s]=this.availableColors,e=0),!s)return;this.state.swatchIndex=e;const t=this.currentImageList,i=s.backgroundImage;if(this.state.imageRotateIndex>=t.length&&(this.state.imageRotateIndex=0),t.length>0){const r=t[this.state.imageRotateIndex];r&&(this.elements.visImage.src=r)}this.#u(),this.elements.visSelectGroup.querySelectorAll("vis-color-selector").forEach((r,a)=>{r.selected=a===e}),this.el.classList.toggle("colorizer-background-image",!!i),i&&!this.hasGradeSpecs?this.el.style.setProperty("--colorizer-background-image",`url('${i}')`):this.el.style.removeProperty("--colorizer-background-image")}#g(){const{visSelect:e}=this.elements,[s]=this.data.models;e.options=this.data.models,e.placeholderVariant="no_placeholder_with_value",e.value=s?.value,e.addEventListener("visselect-change",t=>{t.detail&&(this.state.selectedOptionValue=t.detail.value!==void 0?t.detail.value:t.detail,this.#a(),this.#s(),this.#e(0),h("fireWithContext","aa-link",t.currentTarget,{link_text:t.detail,series_grade:t.detail,link_type:"Select"}))})}}f(v,".colorizer-container"); 2//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50bGliLWNvbG9yaXplci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY29sb3JpemVyL2pzL2NvbG9yaXplci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJy4uL2Nzcy9jb2xvcml6ZXIuY3NzJztcbmltcG9ydCB7RW50cnlQb2ludH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9FbnRyeVBvaW50JztcbmltcG9ydCBjaGVja01lZGlhIGZyb20gJy4uLy4uLy4uL3V0aWwvY2hlY2stbWVkaWEnO1xuaW1wb3J0IGRpc2NsYWltZXIgZnJvbSAnLi4vLi4vLi4vdXRpbC9kaXNjbGFpbWVyJztcbmltcG9ydCBhbmFseXRpY3MgZnJvbSAnLi4vLi4vLi4vdXRpbC9hbmFseXRpY3MnO1xuaW1wb3J0IHtidWlsZENvbG9yaXplclNlcnZsZXRVcmwsIGdldEFjdHVhbFBhZ2VQYXRofSBmcm9tICcuLi8uLi8uLi91dGlsL21scEhlbHBlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbG9yaXplciB7XG5cdGNvbnN0cnVjdG9yKHsgZWwgfSkge1xuXHRcdHRoaXMuZWwgPSBlbDtcblxuXHRcdHRoaXMuZWxlbWVudHMgPSB7XG5cdFx0XHRjb2xvcml6ZXJJbWFnZTogZWwucXVlcnlTZWxlY3RvcignLmNvbG9yaXplci1pbWFnZScpLFxuXHRcdFx0dmlzSW1hZ2U6IGVsLnF1ZXJ5U2VsZWN0b3IoJy5jb2xvcml6ZXItaW1hZ2UgdmlzLWltYWdlJyksXG5cdFx0XHRjb2xvcml6ZXJSb3RhdGVDb250cm9sczogZWwucXVlcnlTZWxlY3RvcignLmNvbG9yaXplci1yb3RhdGUtY29udHJvbHMnKSxcblx0XHRcdGNvbG9yaXplclN3YXRjaGVzOiBlbC5xdWVyeVNlbGVjdG9yKCcuY29sb3JpemVyLXN3YXRjaGVzJyksXG5cdFx0XHRjb2xvcml6ZXJDb250cm9sczogZWwucXVlcnlTZWxlY3RvcignLmNvbG9yaXplci1jb250cm9scycpLFxuXHRcdFx0Y29sb3JpemVyT3B0aW9uczogZWwucXVlcnlTZWxlY3RvcignLmNvbG9yaXplci1vcHRpb25zJyksXG5cdFx0XHRjb2xvck5hbWVDb250YWluZXI6IGVsLnF1ZXJ5U2VsZWN0b3IoJy5jb2xvcml6ZXItY29sb3ItbmFtZScpLFxuXHRcdFx0dmlzU2VsZWN0OiBlbC5xdWVyeVNlbGVjdG9yKCd2aXMtc2VsZWN0JyksXG5cdFx0XHR2aXNTZWxlY3RHcm91cDogZWwucXVlcnlTZWxlY3RvcignLmNvbG9yaXplci1zd2F0Y2hlcyB2aXMtc2VsZWN0b3ItZ3JvdXAnKSxcblx0XHR9O1xuXG5cdFx0dGhpcy5zdGF0ZSA9IHtcblx0XHRcdHN3YXRjaEluZGV4OiAwLFxuXHRcdFx0aW1hZ2VSb3RhdGVJbmRleDogTnVtYmVyKChlbC5kYXRhc2V0LnN0YXJ0aW5nRnJhbWUgLSAxKSB8fCAwKSxcblx0XHRcdGlzRHJhZ2dpbmc6IGZhbHNlLFxuXHRcdFx0ZHJhZ1N0YXJ0WDogMCxcblx0XHRcdHNlbGVjdGVkT3B0aW9uVmFsdWU6IG51bGwsXG5cdFx0fTtcblxuXHRcdHRoaXMuZGF0YSA9IHtcblx0XHRcdG1hc3RlckNvbG9yTGlzdDogW10sXG5cdFx0XHRtb2RlbHM6IFtdLFxuXHRcdH07XG5cblx0XHR0aGlzLmhhc0dyYWRlU3BlY3MgPSBlbC5xdWVyeVNlbGVjdG9yKCcuY29sb3JpemVyLXZlaGljbGUtc3BlY3MnKTtcblxuXHRcdC8vIEJpbmQgbWV0aG9kcyBmb3IgZXZlbnQgbGlzdGVuZXJzXG5cdFx0dGhpcy5oYW5kbGVEcmFnID0gdGhpcy5oYW5kbGVEcmFnLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5oYW5kbGVEcmFnU3RhcnQgPSB0aGlzLmhhbmRsZURyYWdTdGFydC5iaW5kKHRoaXMpO1xuXHRcdHRoaXMuaGFuZGxlRHJhZ0VuZCA9IHRoaXMuaGFuZGxlRHJhZ0VuZC5iaW5kKHRoaXMpO1xuXG5cdFx0aWYgKHRoaXMuaGFzR3JhZGVTcGVjcykge1xuXHRcdFx0dGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKCdjb2xvcml6ZXI6cG9wdWxhdGUnLCBhc3luYyAoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgeyBzZXJpZXMsIGdyYWRlLCB5ZWFyLCBzdGFydGluZ0NvbG9yLCBjYWNoZWREYXRhUHJvbWlzZSB9ID0gZXZlbnQuZGV0YWlsO1xuXHRcdFx0XHRjb25zdCBncmFkZUVuZHBvaW50ID0gYnVpbGRDb2xvcml6ZXJTZXJ2bGV0VXJsKHtcblx0XHRcdFx0XHRwYWdlUGF0aDogZ2V0QWN0dWFsUGFnZVBhdGgoKSxcblx0XHRcdFx0XHRzZXJpZXMsXG5cdFx0XHRcdFx0Z3JhZGUsXG5cdFx0XHRcdFx0eWVhcixcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLiNpbml0KGdyYWRlRW5kcG9pbnQsIHN0YXJ0aW5nQ29sb3IsIGNhY2hlZERhdGFQcm9taXNlKTtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHR0aGlzLmVsLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjb2xvcml6ZXI6cmVhZHknLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy4jaW5pdCgpO1xuXHRcdH1cblxuXHRcdGRpc2NsYWltZXIoZWwpO1xuXHR9XG5cblx0Ly8gLS0tIEdldHRlcnMgJiBTZXR0ZXJzIC0tLVxuXG5cdGdldCBhdmFpbGFibGVDb2xvcnMoKSB7XG5cdFx0aWYgKCF0aGlzLmRhdGEubWFzdGVyQ29sb3JMaXN0Lmxlbmd0aCkgcmV0dXJuIFtdO1xuXG5cdFx0Y29uc3QgY3VycmVudEdyYWRlID0gdGhpcy5zdGF0ZS5zZWxlY3RlZE9wdGlvblZhbHVlIHx8IHRoaXMuZGF0YS5tb2RlbHNbMF0/LnZhbHVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5tYXN0ZXJDb2xvckxpc3QuZmlsdGVyKGNvbG9yID0+IHtcblx0XHRcdGlmIChBcnJheS5pc0FycmF
25KGNvbG9yLmltYWdlcykpIHJldHVybiB0cnVlO1xuXG5cdFx0XHRjb25zdCBncmFkZUtleSA9IGN1cnJlbnRHcmFkZSB8fCBPYmplY3Qua2V5cyhjb2xvci5pbWFnZXMpWzBdO1xuXG5cdFx0XHRyZXR1cm4gY29sb3IuaW1hZ2VzPy5bZ3JhZGVLZXldICE9PSB1bmRlZmluZWQ7XG5cdFx0fSk7XG5cdH1cblxuXHRnZXQgY3VycmVudENvbG9yKCkge1xuXHRcdGlmICh0aGlzLnN0YXRlLnN3YXRjaEluZGV4ID49IHRoaXMuYXZhaWxhYmxlQ29sb3JzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXZhaWxhYmxlQ29sb3JzWzBdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5hdmFpbGFibGVDb2xvcnNbdGhpcy5zdGF0ZS5zd2F0Y2hJbmRleF07XG5cdH1cblxuXHRnZXQgY3VycmVudEltYWdlTGlzdCgpIHtcblx0XHRpZiAoIXRoaXMuY3VycmVudENvbG9yKSByZXR1cm4gW107XG5cblx0XHRjb25zdCBjdXJyZW50R3JhZGUgPSB0aGlzLnN0YXRlLnNlbGVjdGVkT3B0aW9uVmFsdWUgfHwgdGhpcy5kYXRhLm1vZGVsc1swXT8udmFsdWU7XG5cdFx0cmV0dXJuIHRoaXMuI2dldEltYWdlTGlzdCh0aGlzLmN1cnJlbnRDb2xvciwgY3VycmVudEdyYWRlKTtcblx0fVxuXG5cdC8vIC0tLSBQcml2YXRlIEhlbHBlciBNZXRob2RzIC0tLVxuXG5cdCN0aHJvdHRsZShmdW5jLCBkZWxheSA9IDEwMCkge1xuXHRcdGxldCBsYXN0Q2FsbCA9IDA7XG5cdFx0cmV0dXJuICguLi5hcmdzKSA9PiB7XG5cdFx0XHRjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXHRcdFx0aWYgKG5vdyAtIGxhc3RDYWxsIDwgZGVsYXkpIHJldHVybjtcblx0XHRcdGxhc3RDYWxsID0gbm93O1xuXHRcdFx0ZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9O1xuXHR9XG5cblx0I3JvdGF0ZUltYWdlSW5kZXgoZGlyZWN0aW9uLCBjdXJyZW50SW5kZXgsIGltYWdlc0xlbmd0aCkge1xuXHRcdGNvbnN0IGluY3JlbWVudCA9IGRpcmVjdGlvbiA9PT0gJ2xlZnQnID8gMSA6IC0xO1xuXHRcdGxldCBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggKyBpbmNyZW1lbnQ7XG5cdFx0aWYgKG5leHRJbmRleCA+PSBpbWFnZXNMZW5ndGgpIG5leHRJbmRleCA9IDA7XG5cdFx0ZWxzZSBpZiAobmV4dEluZGV4IDwgMCkgbmV4dEluZGV4ID0gaW1hZ2VzTGVuZ3RoIC0gMTtcblx0XHRyZXR1cm4gbmV4dEluZGV4O1xuXHR9XG5cblx0I2dldEltYWdlTGlzdChjb2xvckRhdGEsIHNlbGVjdGVkT3B0aW9uKSB7XG5cdFx0Y29uc3QgaW1hZ2VMaXN0ID0gY29sb3JEYXRhLmltYWdlcztcblx0XHRpZiAoQXJyYXkuaXNBcnJheShpbWFnZUxpc3QpKSByZXR1cm4gaW1hZ2VMaXN0O1xuXG5cdFx0aWYgKHR5cGVvZiBpbWFnZUxpc3QgPT09ICdvYmplY3QnICYmIGltYWdlTGlzdCAhPT0gbnVsbCkge1xuXHRcdFx0aWYgKHNlbGVjdGVkT3B0aW9uICYmIGltYWdlTGlzdFtzZWxlY3RlZE9wdGlvbl0pIHJldHVybiBpbWFnZUxpc3Rbc2VsZWN0ZWRPcHRpb25dO1xuXG5cdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW1hZ2VMaXN0KTtcblx0XHRcdGlmIChrZXlzLmxlbmd0aCA+IDApIHJldHVybiBpbWFnZUxpc3Rba2V5c1swXV07XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8vIC0tLSBJbml0aWFsaXphdGlvbiAmIExvZ2ljIC0tLVxuXG5cdGFzeW5jICNmZXRjaERhdGEoZ3JhZGVFbmRwb2ludCA9IG51bGwsIGNhY2hlZERhdGFQcm9taXNlID0gbnVsbCkge1xuXHRcdGNvbnN0IGhhc1NlbGVjdEZpZWxkID0gISF0aGlzLmVsZW1lbnRzLnZpc1NlbGVjdDtcblx0XHRsZXQgZW5kcG9pbnQgPSBudWxsO1xuXG5cdFx0aWYgKCFjYWNoZWREYXRhUHJvbWlzZSkge1xuXHRcdFx0aWYgKGdyYWRlRW5kcG9pbnQpIHtcblx0XHRcdFx0ZW5kcG9pbnQgPSBncmFkZUVuZHBvaW50O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgeyBtb2RlbE5vZGUgfSA9IHRoaXMuZWwuZGF0YXNldDtcblx0XHRcdFx0aWYgKCFtb2RlbE5vZGUpIHRocm93IG5ldyBFcnJvcignZGF0YS1tb2RlbC1ub2RlIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCcpO1xuXHRcdFx0XHRlbmRwb2ludCA9IGJ1aWxkQ29sb3JpemVyU2VydmxldFVybCh7XG5cdFx0XHRcdFx0cGFnZVBhdGg6IGdldEFjdHVhbFBhZ2VQYXRoKCksXG5cdFx0XHRcdFx0bW9kZWxOb2RlLFxuXHRcdFx0XHRcdHNpbXBsZTogIWhhc1NlbGVjdEZpZWxkLFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZXNldCBzdGF0ZSBiZWZvcmUgZXZlcnkgZmV0Y2ggdG8gcHJldmVudCBzdGFsZSBkYXRhIGZyb20gYSBwcmV2aW91c1xuXHRcdC8vIGNhcmQgYmxlZWRpbmcgdGhyb3VnaCB3aGVuIHRoZSByZXF1ZXN0IGlzIGJsb2NrZWQgb3IgZmFpbHNcblx0XHR0aGlzLmRhdGEubWFzdGVyQ29sb3JMaXN0ID0gW107XG5cdFx0dGhpcy5kYXRhLm1vZGVscyA9IFtdO1xuXHRcdHRoaXMuc3RhdGUuc2VsZWN0ZWRPcHRpb25WYWx1ZSA9IG51bGw7XG5cblx0XHR0cnkge1xuXHRcdFx0bGV0IGpzb247XG5cblx0XHRcdGlmIChjYWNoZWREYXRhUHJvbWlzZSkge1xuXHRcdFx0XHRqc29uID0gYXdhaXQgY2FjaGVkRGF0YVByb21pc2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGVuZHBvaW50KTtcblx0XHRcdFx0aWYgKCFyZXNwb25zZS5vaykgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2g6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuXHRcdFx0XHRqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB7IHZlaGljbGVEYXRhIH0gPSBqc29uO1xuXG5cdFx0XHRpZiAoaGFzU2VsZWN0RmllbGQpIHtcblx0XHRcdFx0dGhpcy4jcHJvY2Vzc0RhdGEodmVoaWNsZURhdGEpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5kYXRhLm1hc3RlckNvbG9yTGlzdCA9IHZlaGljbGVEYXRhLmNvbG9ycztcblx0XHRcdH1cblxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdDb2xvcml6ZXIgZGF0YSBsb2FkIGZhaWxlZDonLCBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0I3Byb2Nlc3NEYXRhKHZlaGljbGVEYXRhKSB7XG5cdFx0dGhpcy5kYXRhLm1vZGVscyA9IFsuLi5uZXcgU2V0KHZlaGljbGVEYXRhLm1vZGVscy5tYXAoKG0pID0+IG0uZ3JhZGUpKV0ubWFwKChncmFkZSwgaW5kZXgpID0+ICh7XG5cdFx0XHRpZDogU3RyaW5nKGluZGV4KSxcblx0XHRcdGxhYmVsOiBncmFkZSxcblx0XHRcdHZhbHVlOiBncmFkZSxcblx0XHR9KSk7XG5cblx0XHRpZiAodGhpcy5kYXRhLm1vZGVscy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnN0YXRlLnNlbGVjdGVkT3B0aW9uVmFsdWUgPSB0aGlzLmRhdGEubW9kZWxzWzBdLnZhbHVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbG9yTWFwID0ge307XG5cblx0XHR2ZWhpY2xlRGF0YS5tb2RlbHMuZm9yRWFjaCgobW9kZWwpID0+IHtcblx0XHRcdG1vZGVsLmNvbG9ycy5mb3JFYWNoKChjb2xvcikgPT4ge1xuXHRcdFx0XHRjb25zdCB7IGNvbG9yTmFtZSwgaGV4LCBoZXgyLCBpbWFnZXMgfSA9IGNvbG9yO1xuXG5cdFx0XHRcdGlmICghY29sb3JNYXBbY29sb3JOYW1lXSkge1xuXHRcdFx0XHRcdGNvbG9yTWFwW2NvbG9yTmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRjb2xvck5hbWUsXG5cdFx0XHRcdFx0XHRoZXgsXG5cdFx0XHRcdFx0XHRoZXgyLFxuXHRcdFx0XHRcdFx0aW1hZ2VzOiB7fSxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbG9yTWFwW2NvbG9yTmFtZV0uaW1hZ2VzW21vZGVsLmdyYWRlXSA9IGltYWdlcztcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5kYXRhLm1hc3RlckNvbG9yTGlzdCA9IE9iamVjdC52YWx1ZXMoY29sb3JNYXApO1xuXHR9XG5cblx0I3VwZGF0ZUNhcm91c2VsU3RhdGUoKSB7XG5cdFx0aWYgKHRoaXMuaGFzR3JhZGVTcGVjcykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5lZWRzQ2Fyb3VzZWwgPSB0aGlzLmF2YWlsYWJsZUNvbG9ycy5sZW5ndGggPiAxMjtcblxuXHRcdGlmIChuZWVkc0Nhcm91c2VsKSB7XG5cdFx0XHRjaGVja01lZGlhKChpc0Rlc2t0b3ApID0+IHtcblx0XHRcdFx0dGhpcy4jc2V0dXBTd2F0Y2hDYXJvdXNlbChpc0Rlc2t0b3ApO1xuXHRcdFx0fSwgJzQ4ZW0nKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy4jc2V0dXBTd2F0Y2hDYXJvdXNlbCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyAjaW5pdChncmFkZUVuZHBvaW50ID0gbnVsbCwgc3RhcnRpbmdDb2xvciA9IG51bGwsIGNhY2hlZERhdGFQcm9taXNlID0gbnVsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCB0aGlzLiNmZXRjaERhdGEoZ3JhZGVFbmRwb2ludCwgY2FjaGVkRGF0YVByb21pc2UpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdDb2xvcml6ZXI6IEZhaWxlZCB0byBmZXRjaCBkYXRhJywgZXJyb3IpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuI3VwZGF0ZUNhcm91c2VsU3RhdGUoKTtcblx0XHR0aGlzLiNpbml0U3dhdGNoRXZlbnRzKCk7XG5cblx0XHRpZiAoIXRoaXMuaGFzR3JhZGVTcGVjcykge1xuXHRcdFx0dGhpcy4jaW5pdERyYWdFdmVudHMoKTtcblx0XHRcdHRoaXMuI2luaXRSb3RhdGVDb250cm9sRXZlbn
2RzKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZWxlbWVudHMudmlzU2VsZWN0KSB7XG5cdFx0XHR0aGlzLiNpbml0U2VsZWN0b3JFdmVudHMoKTtcblx0XHR9XG5cblx0XHRsZXQgaW5pdGlhbEluZGV4ID0gMDtcblx0XHRpZiAoc3RhcnRpbmdDb2xvcikge1xuXHRcdFx0Y29uc3QgZm9ybWF0ZUNvbG9yID0gKGNvbG9yKSA9PiB7XG5cdFx0XHRcdHJldHVybiBTdHJpbmcoY29sb3IpLnJlcGxhY2UoJyMnLCAnJykudHJpbSgpLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc3RhcnRpbmdIZXgxID0gZm9ybWF0ZUNvbG9yKHN0YXJ0aW5nQ29sb3IuaGV4MSk7XG5cdFx0XHRjb25zdCBzdGFydGluZ0hleDIgPSBzdGFydGluZ0NvbG9yLmhleDIgPyBmb3JtYXRlQ29sb3Ioc3RhcnRpbmdDb2xvci5oZXgyKSA6IG51bGw7XG5cdFx0XHRjb25zdCBtYXRjaGVkSW5kZXggPSB0aGlzLmF2YWlsYWJsZUNvbG9ycy5maW5kSW5kZXgoKGNvbG9yKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbG9ySDEgPSBmb3JtYXRlQ29sb3IoY29sb3IuaGV4KTtcblx0XHRcdFx0Y29uc3QgY29sb3JIMiA9IGNvbG9yLmhleDIgPyBmb3JtYXRlQ29sb3IoY29sb3IuaGV4MikgOiBudWxsO1xuXG5cdFx0XHRcdHJldHVybiBzdGFydGluZ0hleDEgPT09IGNvbG9ySDEgJiYgc3RhcnRpbmdIZXgyID09PSBjb2xvckgyO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAobWF0Y2hlZEluZGV4ICE9PSAtMSkge1xuXHRcdFx0XHRpbml0aWFsSW5kZXggPSBtYXRjaGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy4jdXBkYXRlQ29sb3IoaW5pdGlhbEluZGV4KTtcblx0fVxuXG5cdCNzZXR1cFN3YXRjaENhcm91c2VsKGlzRGVza3RvcCkge1xuXHRcdGNvbnN0IHsgY29sb3JpemVyU3dhdGNoZXMsIGNvbG9yaXplckNvbnRyb2xzIH0gPSB0aGlzLmVsZW1lbnRzO1xuXHRcdGNvbnN0IHRvdGFsU2xpZGVzID0gTWF0aC5jZWlsKHRoaXMuYXZhaWxhYmxlQ29sb3JzLmxlbmd0aCAvIDEwKTtcblx0XHRjb25zdCBsYXN0SW5kZXggPSB0b3RhbFNsaWRlcyAtIDE7XG5cdFx0Y29uc3QgdmlzQ2Fyb3VzZWxTZWxlY3RvcnMgPSBjb2xvcml6ZXJDb250cm9scy5xdWVyeVNlbGVjdG9yKCd2aXMtY2Fyb3VzZWwtc2VsZWN0b3JzJyk7XG5cblx0XHRpZiAoIXZpc0Nhcm91c2VsU2VsZWN0b3JzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCFpc0Rlc2t0b3ApIHtcblx0XHRcdGNvbG9yaXplclN3YXRjaGVzLmNsYXNzTGlzdC5hZGQoJ2NvbG9yaXplci1zd2F0Y2gtY2Fyb3VzZWwnKTtcblx0XHRcdGNvbG9yaXplclN3YXRjaGVzLnN0eWxlLnNldFByb3BlcnR5KCctLXdpZHRoLW11bHRpcGxpZXInLCB0b3RhbFNsaWRlcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbG9yaXplclN3YXRjaGVzLmNsYXNzTGlzdC5yZW1vdmUoJ2NvbG9yaXplci1zd2F0Y2gtY2Fyb3VzZWwnKTtcblx0XHRcdGNvbG9yaXplclN3YXRjaGVzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCctLXdpZHRoLW11bHRpcGxpZXInKTtcblx0XHRcdGNvbG9yaXplclN3YXRjaGVzLnN0eWxlLnJlbW92ZVByb3BlcnR5KCctLWNhcm91c2VsLWluZGV4Jyk7XG5cdFx0fVxuXG5cdFx0dmlzQ2Fyb3VzZWxTZWxlY3RvcnMudG90YWxTbGlkZXMgPSB0b3RhbFNsaWRlcztcblx0XHRjb2xvcml6ZXJDb250cm9scy5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgaXNEZXNrdG9wKTtcblxuXHRcdGlmICh0aGlzLl9oYXNDYXJvdXNlbExpc3RlbmVycykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCBzd2F0Y2hDYXJvdXNlbEluZGV4ID0gMDtcblxuXHRcdGNvbnN0IHVwZGF0ZUluZGV4ID0gaW5kZXggPT4ge1xuXHRcdFx0Y29sb3JpemVyU3dhdGNoZXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tY2Fyb3VzZWwtaW5kZXgnLCBpbmRleCk7XG5cdFx0XHRzd2F0Y2hDYXJvdXNlbEluZGV4ID0gaW5kZXg7XG5cdFx0XHR2aXNDYXJvdXNlbFNlbGVjdG9ycy5jdXJyZW50U2xpZGVJbmRleCA9IGluZGV4O1xuXHRcdH07XG5cblx0XHR2aXNDYXJvdXNlbFNlbGVjdG9ycy5hZGRFdmVudExpc3RlbmVyKCd2aXNjYXJvdXNlbHNlbGVjdG9ycy1idWxsZXRjbGljaycsIChldmVudCkgPT4ge1xuXHRcdFx0aWYoc3dhdGNoQ2Fyb3VzZWxJbmRleCAhPT0gZXZlbnQuZGV0YWlsLmluZGV4KSB7XG5cdFx0XHRcdGNvbnN0IGRpcmVjdGlvbiA9IHN3YXRjaENhcm91c2VsSW5kZXggPCBldmVudC5kZXRhaWwuaW5kZXggPyAnY29sb3Igc2VsZWN0IHJpZ2h0IGFycm93JyA6ICdjb2xvciBzZWxlY3QgbGVmdCBhcnJvdyc7XG5cdFx0XHRcdGFuYWx5dGljcyhcblx0XHRcdFx0XHQnZmlyZVdpdGhDb250ZXh0Jyxcblx0XHRcdFx0XHQnYWEtbGluaycsXG5cdFx0XHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsaW5rX3RleHQ6IGRpcmVjdGlvbixcblx0XHRcdFx0XHRcdGxpbmtfdHlwZV90aXRsZTogZGlyZWN0aW9uLFxuXHRcdFx0XHRcdFx0bGlua19idXR0b25fYWN0aW9uOiBgJHtkaXJlY3Rpb259IGxpbmtgLFxuXHRcdFx0XHRcdFx0bGlua190eXBlOiAnYnV0dG9uJyxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVJbmRleChldmVudC5kZXRhaWwuaW5kZXgpO1xuXHRcdH0pO1xuXG5cdFx0dmlzQ2Fyb3VzZWxTZWxlY3RvcnMuYWRkRXZlbnRMaXN0ZW5lcigndmlzY2Fyb3VzZWxzZWxlY3RvcnMtcHJldmlvdXNjbGljaycsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKHN3YXRjaENhcm91c2VsSW5kZXggPiAwKSB1cGRhdGVJbmRleChzd2F0Y2hDYXJvdXNlbEluZGV4IC0gMSk7XG5cdFx0XHRhbmFseXRpY3MoXG5cdFx0XHRcdCdmaXJlV2l0aENvbnRleHQnLFxuXHRcdFx0XHQnYWEtbGluaycsXG5cdFx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsaW5rX3RleHQ6IGBjb2xvciBzZWxlY3QgbGVmdCBhcnJvd2AsXG5cdFx0XHRcdFx0bGlua190eXBlX3RpdGxlOiBgY29sb3Igc2VsZWN0IGxlZnQgYXJyb3dgLFxuXHRcdFx0XHRcdGxpbmtfYnV0dG9uX2FjdGlvbjogYGNvbG9yIHNlbGVjdCBsZWZ0IGFycm93IGxpbmtgLFxuXHRcdFx0XHRcdGxpbmtfdHlwZTogJ2J1dHRvbicsXG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fSk7XG5cblx0XHR2aXNDYXJvdXNlbFNlbGVjdG9ycy5hZGR
2FdmVudExpc3RlbmVyKCd2aXNjYXJvdXNlbHNlbGVjdG9ycy1uZXh0Y2xpY2snLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChzd2F0Y2hDYXJvdXNlbEluZGV4IDwgbGFzdEluZGV4KSB1cGRhdGVJbmRleChzd2F0Y2hDYXJvdXNlbEluZGV4ICsgMSk7XG5cdFx0XHRhbmFseXRpY3MoXG5cdFx0XHRcdCdmaXJlV2l0aENvbnRleHQnLFxuXHRcdFx0XHQnYWEtbGluaycsXG5cdFx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsaW5rX3RleHQ6IGBjb2xvciBzZWxlY3QgcmlnaHQgYXJyb3dgLFxuXHRcdFx0XHRcdGxpbmtfdHlwZV90aXRsZTogYGNvbG9yIHNlbGVjdCByaWdodCBhcnJvd2AsXG5cdFx0XHRcdFx0bGlua19idXR0b25fYWN0aW9uOiBgY29sb3Igc2VsZWN0IHJpZ2h0IGFycm93IGxpbmtgLFxuXHRcdFx0XHRcdGxpbmtfdHlwZTogJ2J1dHRvbicsXG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLl9oYXNDYXJvdXNlbExpc3RlbmVycyA9IHRydWU7XG5cdH1cblxuXHQvLyAtLS0gRHJhZyBFdmVudCBIYW5kbGVycyAtLS1cblxuXHRoYW5kbGVEcmFnKGV2ZW50KSB7XG5cdFx0aWYgKCF0aGlzLnN0YXRlLmlzRHJhZ2dpbmcpIHJldHVybjtcblxuXHRcdGNvbnN0IGN1cnJlbnRYID0gZXZlbnQudHlwZSA9PT0gJ3RvdWNobW92ZScgPyBldmVudC50b3VjaGVzWzBdLmNsaWVudFggOiBldmVudC5jbGllbnRYO1xuXHRcdGNvbnN0IGRpc3RhbmNlWCA9IGN1cnJlbnRYIC0gdGhpcy5zdGF0ZS5kcmFnU3RhcnRYO1xuXG5cdFx0Y29uc3QgY3VycmVudEltYWdlcyA9IHRoaXMuY3VycmVudEltYWdlTGlzdDtcblxuXHRcdGlmIChNYXRoLmFicyhkaXN0YW5jZVgpIDwgMTApIHJldHVybjtcblxuXHRcdGNvbnN0IGRyYWdEaXJlY3Rpb24gPSBkaXN0YW5jZVggPiAwID8gJ3JpZ2h0JyA6ICdsZWZ0Jztcblx0XHRjb25zdCBwcmV2aW91c0luZGV4ID0gdGhpcy5zdGF0ZS5pbWFnZVJvdGF0ZUluZGV4O1xuXG5cdFx0dGhpcy5zdGF0ZS5pbWFnZVJvdGF0ZUluZGV4ID0gdGhpcy4jcm90YXRlSW1hZ2VJbmRleChkcmFnRGlyZWN0aW9uLCB0aGlzLnN0YXRlLmltYWdlUm90YXRlSW5kZXgsIGN1cnJlbnRJbWFnZXMubGVuZ3RoKTtcblxuXHRcdC8vIERpcmVjdCBwcm9wZXJ0eSB1cGRhdGVcblx0XHR0aGlzLmVsZW1lbnRzLnZpc0ltYWdlLnNyYyA9IGN1cnJlbnRJbWFnZXNbdGhpcy5zdGF0ZS5pbWFnZVJvdGF0ZUluZGV4XTtcblxuXHRcdC8vIEZpcmUgYW5hbHl0aWNzIHdoZW4gcm90YXRpb24gb2NjdXJzXG5cdFx0aWYgKHByZXZpb3VzSW5kZXggIT09IHRoaXMuc3RhdGUuaW1hZ2VSb3RhdGVJbmRleCkge1xuXHRcdFx0YW5hbHl0aWNzKFxuXHRcdFx0XHQnZmlyZVdpdGhDb250ZXh0Jyxcblx0XHRcdFx0J2FhLWxpbmsnLFxuXHRcdFx0XHR0aGlzLmVsLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGlua190ZXh0OiBgJHtkcmFnRGlyZWN0aW9ufSBzd2lwZWAsXG5cdFx0XHRcdFx0bGlua190eXBlX3RpdGxlOiBgJHtkcmFnRGlyZWN0aW9ufSBzd2lwZWAsXG5cdFx0XHRcdFx0bGlua19idXR0b25fYWN0aW9uOiBgJHtkcmFnRGlyZWN0aW9ufSBzd2lwZSBsaW5rYCxcblx0XHRcdFx0XHRsaW5rX3R5cGU6ICdidXR0b24nLFxuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RhdGUuZHJhZ1N0YXJ0WCA9IGN1cnJlbnRYO1xuXHR9XG5cblx0aGFuZGxlRHJhZ1N0YXJ0KGV2ZW50KSB7XG5cdFx0aWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nICYmIGV2ZW50LmJ1dHRvbiAhPT0gMCkgcmV0dXJuO1xuXHRcdHRoaXMuc3RhdGUuaXNEcmFnZ2luZyA9IHRydWU7XG5cdFx0dGhpcy5zdGF0ZS5kcmFnU3RhcnRYID0gZXZlbnQudHlwZSA9PT0gJ3RvdWNoc3RhcnQnID8gZXZlbnQudG91Y2hlc1swXS5jbGllbnRYIDogZXZlbnQuY2xpZW50WDtcblx0XHR0aGlzLmVsZW1lbnRzLnZpc0ltYWdlLmNsYXNzTGlzdC5hZGQoJ2RyYWdnaW5nJyk7XG5cdH1cblxuXHRoYW5kbGVEcmFnRW5kKCkge1xuXHRcdGlmICh0aGlzLnN0YXRlLmlzRHJhZ2dpbmcpIHtcblx0XHRcdHRoaXMuc3RhdGUuaXNEcmFnZ2luZyA9IGZhbHNlO1xuXHRcdFx0dGhpcy5lbGVtZW50cy52aXNJbWFnZS5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnZ2luZycpO1xuXHRcdH1cblx0fVxuXG5cdCNpbml0RHJhZ0V2ZW50cygpIHtcblx0XHRjb25zdCB0aHJvdHRsZWREcmFnSGFuZGxlciA9IHRoaXMuI3Rocm90dGxlKHRoaXMuaGFuZGxlRHJhZywgMTAwKTtcblxuXHRcdHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5oYW5kbGVEcmFnU3RhcnQpO1xuXHRcdHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuaGFuZGxlRHJhZ1N0YXJ0LCB7IHBhc3NpdmU6IHRydWUgfSk7XG5cdFx0dGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aHJvdHRsZWREcmFnSGFuZGxlcik7XG5cdFx0dGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aHJvdHRsZWREcmFnSGFuZGxlciwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXHRcdHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuaGFuZGxlRHJhZ0VuZCk7XG5cdFx0dGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMuaGFuZGxlRHJhZ0VuZCk7XG5cdH1cblxuXHQjaW5pdFJvdGF0ZUNvbnRyb2xFdmVudHMoKSB7XG5cdFx0Y29uc3QgeyBjb2xvcml6ZXJSb3RhdGVDb250cm9scyB9ID0gdGhpcy5lbGVtZW50cztcblxuXHRcdGNvbG9yaXplclJvdGF0ZUNvbnRyb2xzLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuXHRcdFx0YnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRpcmVjdGlvbiA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdyb3RhdGUtbGVmdCcpID8gJ2xlZnQnIDogJ3JpZ2h0Jztcblx0XHRcdFx0Y29uc3QgY3VycmVudEltYWdlcyA9IHRoaXMuY3VycmVudEltYWdlTGlzdDtcblxuXHRcdFx0XHR0aGlzLnN0YXRlLmltYWdlUm90YXRlSW5kZXggPSB0aGlzLiNyb3RhdGVJbWFnZUluZGV4KGRpcmVjdGlvbiwgdGhpcy5zdGF0ZS5pbWFnZVJvdGF0ZUluZGV4LCBjdXJyZW50SW1hZ2VzLmxlbmd0aCk7XG5cblx0XHRcdFx0Ly8gRGlyZWN0IHByb3BlcnR5IHVwZGF0ZVxuXHRcdFx0XHR0aGlzLmVsZW1lbnRzLnZpc0ltYWdlLnNyYyA9IGN1cnJlbnRJbWFnZXNbdGhpcy5zdGF0ZS5pbWFnZVJvdGF0ZUluZGV4XTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0I2luaXRTd2F0Y2h
2FdmVudHMoKSB7XG5cdFx0Y29uc3QgeyB2aXNTZWxlY3RHcm91cCB9ID0gdGhpcy5lbGVtZW50cztcblx0XHR2aXNTZWxlY3RHcm91cC5pbm5lckhUTUwgPSAnJztcblxuXHRcdGlmICghdGhpcy5faGFzR3JvdXBMaXN0ZW5lcikge1xuXHRcdFx0dmlzU2VsZWN0R3JvdXAuYWRkRXZlbnRMaXN0ZW5lcigndmlzc2VsZWN0b3Jncm91cC1jaGFuZ2UnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gZXZlbnQuZGV0YWlsPy5zZWxlY3Rpb247XG5cblx0XHRcdFx0aWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IFtzZWxlY3RlZFZhbHVlXSA9IHNlbGVjdGlvbjtcblx0XHRcdFx0Y29uc3QgbWF0Y2hlZEluZGV4ID0gdGhpcy5hdmFpbGFibGVDb2xvcnMuZmluZEluZGV4KChjb2xvcikgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGgxID0gU3RyaW5nKGNvbG9yLmhleCkucmVwbGFjZSgnIycsICcnKS50cmltKCkudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0XHRjb25zdCBoMiA9IGNvbG9yLmhleDIgPyBTdHJpbmcoY29sb3IuaGV4MikucmVwbGFjZSgnIycsICcnKS50cmltKCkudG9VcHBlckNhc2UoKSA6IG51bGw7XG5cdFx0XHRcdFx0Y29uc3QgZm9ybWF0dGVkU3RyID0gaDIgPyBgJHtoMX18JHtoMn1gIDogaDE7XG5cblx0XHRcdFx0XHRyZXR1cm4gZm9ybWF0dGVkU3RyID09PSBzZWxlY3RlZFZhbHVlO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAobWF0Y2hlZEluZGV4ICE9PSAtMSAmJiB0aGlzLnN0YXRlLnN3YXRjaEluZGV4ICE9PSBtYXRjaGVkSW5kZXgpIHtcblx0XHRcdFx0XHR0aGlzLiN1cGRhdGVDb2xvcihtYXRjaGVkSW5kZXgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5faGFzR3JvdXBMaXN0ZW5lciA9IHRydWU7XG5cdFx0fVxuXG5cdFx0dGhpcy5hdmFpbGFibGVDb2xvcnMuZm9yRWFjaCgoY29sb3IsIGluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBjb2xvclNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Zpcy1jb2xvci1zZWxlY3RvcicpO1xuXG5cdFx0XHRjb2xvclNlbGVjdC5oZXgxID0gY29sb3IuaGV4O1xuXHRcdFx0Y29sb3JTZWxlY3QubGFiZWwgPSBjb2xvci5jb2xvck5hbWU7XG5cdFx0XHRpZiAoY29sb3IuaGV4MikgY29sb3JTZWxlY3QuaGV4MiA9IGNvbG9yLmhleDI7XG5cdFx0XHRjb2xvclNlbGVjdC5kYXRhc2V0LmFhQWN0aW9uID0gJ2FhLWxpbmsnO1xuXHRcdFx0Y29sb3JTZWxlY3QuZGF0YXNldC5hYUxpbmtCdXR0b25BY3Rpb24gPSAnY29sb3Igc2VsZWN0IGxpbmsnO1xuXHRcdFx0Y29sb3JTZWxlY3Quc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgY29sb3IuY29sb3JOYW1lKTtcblx0XHRcdGNvbG9yU2VsZWN0LmRhdGFzZXQuYWFMaW5rQ291bnQgPSB0aGlzLmF2YWlsYWJsZUNvbG9ycy5sZW5ndGg7XG5cdFx0XHRjb2xvclNlbGVjdC5kYXRhc2V0LmFhTGlua0luZGV4ID0gaW5kZXggKyAxO1xuXHRcdFx0Y29sb3JTZWxlY3QuZGF0YXNldC5hYUxpc3RJdGVtSW5kZXggPSBpbmRleCArIDE7XG5cdFx0XHRjb2xvclNlbGVjdC5kYXRhc2V0LmFhTGlzdFJlc3VsdENvdW50ID0gdGhpcy5hdmFpbGFibGVDb2xvcnMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoaW5kZXggPT09IDApIHtcblx0XHRcdFx0Y29sb3JTZWxlY3Quc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb2xvclNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCd2aXNjb2xvcnNlbGVjdG9yLWNsaWNrJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICghZXZlbnQuZGV0YWlsLnNlbGVjdGVkKSB7XG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb2xvclNlbGVjdC5zZWxlY3RlZCA9IHRydWU7XG5cdFx0XHRcdFx0fSwgMjApO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHZpc1NlbGVjdEdyb3VwLmFwcGVuZENoaWxkKGNvbG9yU2VsZWN0KTtcblx0XHR9KTtcblx0fVxuXG5cdCN1cGRhdGVDb2xvck5hbWUoKSB7XG5cdFx0Y29uc3QgeyBjb2xvck5hbWVDb250YWluZXIgfSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgbmV3Q29sb3IgPSB0aGlzLmN1cnJlbnRDb2xvcjtcblxuXHRcdGlmICghbmV3Q29sb3IpIHJldHVybjtcblxuXHRcdGNvbnN0IGNvbG9yUGFyYWdyYXBoID0gY29sb3JOYW1lQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3Zpcy10eXBvZ3JhcGh5Jyk7XG5cblx0XHRjb2xvclBhcmFncmFwaC5pbm5lckhUTUwgPSBuZXdDb2xvci5jb2xvck5hbWU7XG5cdFx0ZGlzY2xhaW1lcihjb2xvck5hbWVDb250YWluZXIpO1xuXHR9XG5cblx0I3VwZGF0ZUNvbG9yKGluZGV4KSB7XG5cdFx0bGV0IG5ld0NvbG9yID0gdGhpcy5hdmFpbGFibGVDb2xvcnNbaW5kZXhdO1xuXHRcdGlmICghbmV3Q29sb3IpIHtcblx0XHRcdFtuZXdDb2xvcl0gPSB0aGlzLmF2YWlsYWJsZUNvbG9ycztcblx0XHRcdGluZGV4ID0gMDtcblx0XHR9XG5cdFx0aWYgKCFuZXdDb2xvcikgcmV0dXJuO1xuXG5cdFx0dGhpcy5zdGF0ZS5zd2F0Y2hJbmRleCA9IGluZGV4O1xuXG5cdFx0Y29uc3QgY3VycmVudEltYWdlcyA9IHRoaXMuY3VycmVudEltYWdlTGlzdDtcblx0XHRjb25zdCBiZ0ltYWdlID0gbmV3Q29sb3IuYmFja2dyb3VuZEltYWdlO1xuXG5cdFx0Ly8gSWYgdGhlIG5ldyBjb2xvciBoYXMgZmV3ZXIgZnJhbWVzICh1bmxpa2VseSBidXQgcG9zc2libGUpLCByZXNldCB0byAwXG5cdFx0aWYgKHRoaXMuc3RhdGUuaW1hZ2VSb3RhdGVJbmRleCA+PSBjdXJyZW50SW1hZ2VzLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5zdGF0ZS5pbWFnZVJvdGF0ZUluZGV4ID0gMDtcblx0XHR9XG5cblx0XHRpZiAoY3VycmVudEltYWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBuZXdTcmMgPSBjdXJyZW50SW1hZ2VzW3RoaXMuc3RhdGUuaW1hZ2VSb3RhdGVJbmRleF07XG5cdFx0XHRpZiAobmV3U3JjKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudHMudmlzSW1hZ2Uuc3JjID0gbmV3U3JjO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuI3VwZGF0ZUNvbG9yTmFtZSgpO1xuXHRcdHRoaXMuZWxlbWVudHMudmlzU2VsZWN0R3JvdXAucXVlcnlTZWxlY3RvckFsbCgndmlzLWNvbG9yLXNlbGVjdG9yJykuZm9yRWFjaCgoc3dhdGNoLCBpKSA9PiB7XG5cdFx0XHRzd2F0Y2guc2VsZWN0ZWQgPSBpID09PSBpbmRleDtcblx0XHR9KTtcblxuXHRcdHRoaXMuZWwuY2xhc3NMaXN0LnRvZ2dsZSgnY29sb3JpemVyLWJhY2tncm91bmQtaW1hZ2UnLCAhIWJnSW1hZ2UpO1xuXHRcdGlmIChiZ0ltYWdlICYmICF0aGlzLmhhc0dyYWRlU3BlY3MpIHtcblx0XHRcdHRoaXMuZWwuc3R5bGUuc2V0UHJvcGVydHkoJy0tY29sb3JpemVyLWJhY2tncm91bmQtaW1hZ2UnLCBgdXJ
2sKCcke2JnSW1hZ2V9JylgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5lbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnLS1jb2xvcml6ZXItYmFja2dyb3VuZC1pbWFnZScpO1xuXHRcdH1cblx0fVxuXG5cdCNpbml0U2VsZWN0b3JFdmVudHMoKSB7XG5cdFx0Y29uc3QgeyB2aXNTZWxlY3QgfSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0Y29uc3QgW2ZpcnN0TW9kZWxdID0gdGhpcy5kYXRhLm1vZGVscztcblxuXHRcdHZpc1NlbGVjdC5vcHRpb25zID0gdGhpcy5kYXRhLm1vZGVscztcblx0XHR2aXNTZWxlY3QucGxhY2Vob2xkZXJWYXJpYW50ID0gJ25vX3BsYWNlaG9sZGVyX3dpdGhfdmFsdWUnO1xuXHRcdHZpc1NlbGVjdC52YWx1ZSA9IGZpcnN0TW9kZWw/LnZhbHVlO1xuXG5cblx0XHR2aXNTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcigndmlzc2VsZWN0LWNoYW5nZScsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKGV2ZW50LmRldGFpbCkge1xuXHRcdFx0XHR0aGlzLnN0YXRlLnNlbGVjdGVkT3B0aW9uVmFsdWUgPSBldmVudC5kZXRhaWwudmFsdWUgIT09IHVuZGVmaW5lZCA/IGV2ZW50LmRldGFpbC52YWx1ZSA6IGV2ZW50LmRldGFpbDtcblx0XHRcdFx0dGhpcy4jaW5pdFN3YXRjaEV2ZW50cygpO1xuXHRcdFx0XHR0aGlzLiN1cGRhdGVDYXJvdXNlbFN0YXRlKCk7XG5cdFx0XHRcdHRoaXMuI3VwZGF0ZUNvbG9yKDApO1xuXG5cdFx0XHRcdGFuYWx5dGljcyhcblx0XHRcdFx0XHQnZmlyZVdpdGhDb250ZXh0Jyxcblx0XHRcdFx0XHQnYWEtbGluaycsXG5cdFx0XHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsaW5rX3RleHQ6IGV2ZW50LmRldGFpbCxcblx0XHRcdFx0XHRcdHNlcmllc19ncmFkZTogZXZlbnQuZGV0YWlsLFxuXHRcdFx0XHRcdFx0bGlua190eXBlOiAnU2VsZWN0J1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuXG5FbnRyeVBvaW50KENvbG9yaXplciwgJy5jb2xvcml6ZXItY29udGFpbmVyJyk7XG4iXSwibmFtZXMiOlsiQ29sb3JpemVyIiwiZWwiLCJldmVudCIsInNlcmllcyIsImdyYWRlIiwieWVhciIsInN0YXJ0aW5nQ29sb3IiLCJjYWNoZWREYXRhUHJvbWlzZSIsImdyYWRlRW5kcG9pbnQiLCJidWlsZENvbG9yaXplclNlcnZsZXRVcmwiLCJnZXRBY3R1YWxQYWdlUGF0aCIsIiNpbml0IiwiZGlzY2xhaW1lciIsImN1cnJlbnRHcmFkZSIsImNvbG9yIiwiZ3JhZGVLZXkiLCIjZ2V0SW1hZ2VMaXN0IiwiI3Rocm90dGxlIiwiZnVuYyIsImRlbGF5IiwibGFzdENhbGwiLCJhcmdzIiwibm93IiwiI3JvdGF0ZUltYWdlSW5kZXgiLCJkaXJlY3Rpb24iLCJjdXJyZW50SW5kZXgiLCJpbWFnZXNMZW5ndGgiLCJuZXh0SW5kZXgiLCJjb2xvckRhdGEiLCJzZWxlY3RlZE9wdGlvbiIsImltYWdlTGlzdCIsImtleXMiLCIjZmV0Y2hEYXRhIiwiaGFzU2VsZWN0RmllbGQiLCJlbmRwb2ludCIsIm1vZGVsTm9kZSIsImpzb24iLCJyZXNwb25zZSIsInZlaGljbGVEYXRhIiwiI3Byb2Nlc3NEYXRhIiwiZXJyb3IiLCJtIiwiaW5kZXgiLCJjb2xvck1hcCIsIm1vZGVsIiwiY29sb3JOYW1lIiwiaGV4IiwiaGV4MiIsImltYWdlcyIsIiN1cGRhdGVDYXJvdXNlbFN0YXRlIiwiY2hlY2tNZWRpYSIsImlzRGVza3RvcCIsIiNzZXR1cFN3YXRjaENhcm91c2VsIiwiI2luaXRTd2F0Y2hFdmVudHMiLCIjaW5pdERyYWdFdmVudHMiLCIjaW5pdFJvdGF0ZUNvbnRyb2xFdmVudHMiLCIjaW5pdFNlbGVjdG9yRXZlbnRzIiwiaW5pdGlhbEluZGV4IiwiZm9ybWF0ZUNvbG9yIiwic3RhcnRpbmdIZXgxIiwic3RhcnRpbmdIZXgyIiwibWF0Y2hlZEluZGV4IiwiY29sb3JIMSIsImNvbG9ySDIiLCIjdXBkYXRlQ29sb3IiLCJjb2xvcml6ZXJTd2F0Y2hlcyIsImNvbG9yaXplckNvbnRyb2xzIiwidG90YWxTbGlkZXMiLCJsYXN0SW5kZXgiLCJ2aXNDYXJvdXNlbFNlbGVjdG9ycyIsInN3YXRjaENhcm91c2VsSW5kZXgiLCJ1cGRhdGVJbmRleCIsImFuYWx5dGljcyIsImN1cnJlbnRYIiwiZGlzdGFuY2VYIiwiY3VycmVudEltYWdlcyIsImRyYWdEaXJlY3Rpb24iLCJwcmV2aW91c0luZGV4IiwidGhyb3R0bGVkRHJhZ0hhbmRsZXIiLCJjb2xvcml6ZXJSb3RhdGVDb250cm9scyIsImJ1dHRvbiIsInZpc1NlbGVjdEdyb3VwIiwic2VsZWN0aW9uIiwic2VsZWN0ZWRWYWx1ZSIsImgxIiwiaDIiLCJjb2xvclNlbGVjdCIsIiN1cGRhdGVDb2xvck5hbWUiLCJjb2xvck5hbWVDb250YWluZXIiLCJuZXdDb2xvciIsImNvbG9yUGFyYWdyYXBoIiwiYmdJbWFnZSIsIm5ld1NyYyIsInN3YXRjaCIsImkiLCJ2aXNTZWxlY3QiLCJmaXJzdE1vZGVsIiwiRW50cnlQb2ludCJdLCJtYXBwaW5ncyI6InVZQU9lLE1BQU1BLENBQVUsQ0FDOUIsWUFBWSxDQUFFLEdBQUFDLEdBQU0sQ0FDbkIsS0FBSyxHQUFLQSxFQUVWLEtBQUssU0FBVyxDQUNmLGVBQWdCQSxFQUFHLGNBQWMsa0JBQWtCLEVBQ25ELFNBQVVBLEVBQUcsY0FBYyw0QkFBNEIsRUFDdkQsd0JBQXlCQSxFQUFHLGNBQWMsNEJBQTRCLEVBQ3RFLGtCQUFtQkEsRUFBRyxjQUFjLHFCQUFxQixFQUN6RCxrQkFBbUJBLEVBQUcsY0FBYyxxQkFBcUIsRUFDekQsaUJBQWtCQSxFQUFHLGNBQWMsb0JBQW9CLEVBQ3ZELG1CQUFvQkEsRUFBRyxjQUFjLHVC
2QUF1QixFQUM1RCxVQUFXQSxFQUFHLGNBQWMsWUFBWSxFQUN4QyxlQUFnQkEsRUFBRyxjQUFjLHdDQUF3QyxDQUM1RSxFQUVFLEtBQUssTUFBUSxDQUNaLFlBQWEsRUFDYixpQkFBa0IsT0FBUUEsRUFBRyxRQUFRLGNBQWdCLEdBQU0sQ0FBQyxFQUM1RCxXQUFZLEdBQ1osV0FBWSxFQUNaLG9CQUFxQixJQUN4QixFQUVFLEtBQUssS0FBTyxDQUNYLGdCQUFpQixDQUFBLEVBQ2pCLE9BQVEsQ0FBQSxDQUNYLEVBRUUsS0FBSyxjQUFnQkEsRUFBRyxjQUFjLDBCQUEwQixFQUdoRSxLQUFLLFdBQWEsS0FBSyxXQUFXLEtBQUssSUFBSSxFQUMzQyxLQUFLLGdCQUFrQixLQUFLLGdCQUFnQixLQUFLLElBQUksRUFDckQsS0FBSyxjQUFnQixLQUFLLGNBQWMsS0FBSyxJQUFJLEVBRTdDLEtBQUssY0FDUixLQUFLLEdBQUcsaUJBQWlCLHFCQUFzQixNQUFPQyxHQUFVLENBQy9ELEtBQU0sQ0FBRSxPQUFBQyxFQUFRLE1BQUFDLEVBQU8sS0FBQUMsRUFBTSxjQUFBQyxFQUFlLGtCQUFBQyxDQUFpQixFQUFLTCxFQUFNLE9BQ2xFTSxFQUFnQkMsRUFBeUIsQ0FDOUMsU0FBVUMsRUFBaUIsRUFDM0IsT0FBQVAsRUFDQSxNQUFBQyxFQUNBLEtBQUFDLENBQ0wsQ0FBSyxFQUVELEdBQUksQ0FDSCxNQUFNLEtBQUtNLEdBQU1ILEVBQWVGLEVBQWVDLENBQWlCLENBQ2pFLFFBQUMsQ0FDQSxLQUFLLEdBQUcsY0FBYyxJQUFJLFlBQVksa0JBQW1CLENBQUUsUUFBUyxFQUFJLENBQUUsQ0FBQyxDQUM1RSxDQUNELENBQUMsRUFFRCxLQUFLSSxHQUFLLEVBR1hDLEVBQVdYLENBQUUsQ0FDZCxDQUlBLElBQUksaUJBQWtCLENBQ3JCLEdBQUksQ0FBQyxLQUFLLEtBQUssZ0JBQWdCLE9BQVEsTUFBTyxDQUFBLEVBRTlDLE1BQU1ZLEVBQWUsS0FBSyxNQUFNLHFCQUF1QixLQUFLLEtBQUssT0FBTyxDQUFDLEdBQUcsTUFFNUU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
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.