1/*! For license information please see ma-liste.min.js.LICENSE.txt */ 2(()=>{var e={
2"../../../../../plugins/mill-apidae/blocks/ApidaeListe/assets/src/components/list.js":(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={components:{pagination:n("../../../../../plugins/mill-apidae/blocks/ApidaeListe/assets/src/components/pagination.js").default},template:'\n <div class="apidae-list">\n <div class="apidae-list-noresults" v-if="objects.length === 0">{{ settings.labels.no_results }}</div>\n <div class="apidae-list-pages">\n <div class="apidae-list-page display">\n <article v-for="(object, index) of objectsNonSimplified" v-html="object.html + object.custom_html"\n @mouseenter="mouseOverObject(object)" @mouseleave="mouseOverObject(object)"\n v-if="isInCurrentPage(index)" :class="itemClass(object)">\n </article>\n </div>\n </div>\n\n\n <template v-if="currentPage === ( numberOfPage - 1) && outOfMap.length === 0 && objectsSimplified.length > 0">\n <div class="apidae-list-non-adherents">\n <article v-for="(object, index) of objectsSimplified" v-html="object.html + object.custom_html">\n </article>\n </div>\n </template>\n\n <pagination :numberOfPage="numberOfPage" :currentPage="currentPage" v-on:page-change="pageSelected"\n v-if="numberOfPage"></pagination>\n\n </div>',props:["settings","objects","numberParPage","defaultPage","outOfMap"],data:()=>({currentPage:0}),computed:{numberOfPage:function(){return this.currentPage=0,Math.ceil(this.objectsNonSimplified.length/this.numberParPage)},objectsNonSimplified(){return"end_simplified"===this.settings.non_adherents?this.objects.filter((e=>e.adherent)):this.objects},objectsSimplified(){return"end_simplified"===this.settings.non_adherents?this.objects.filter((e=>!e.adherent)):[]}},mounted(){if(jQuery("body").on("click",".apidae-wishlist",this.wishListAction),this.defaultPage){let e=Number(this.defaultPage);this.isInCurrentPage(e)&&this.pageSelected(e)}},watch:{objects:function(){this.currentPage=0}},update(){},methods:{wishListAction:function(e){e.preventDefault(),e.stopPropagation();var t=jQuery(e.target).closest(".sit-item-link"),n=t.parent().hasClass("wishlist_in"),r={action:"apidae",security:theme_values.security,controller:"PublicAjax",method:"addToWishList",params:{id:t.data("sitid"),is_in:n,page:theme_values.page}};jQuery.post(theme_values.ajax_url,r).fail((()=>{alert("Désolé, une erreur est survenue")})).done((e=>{!0===e.success?(jQuery("#wish-list-menu").text(e.datas.nb),!1===n?this.$emit("changeWishList",t.data("sitid"),1):this.$emit("changeWishList",t.data("sitid"),0)):alert("Désolé, une erreur est survenue")}))},itemClass:function(e){return 1===e.wishlist?"item-card sit-item wishlist_in":"item-card sit-item"},isInCurrentPage(e){var t=this.currentPage*this.numberParPage,n=this.numberParPage+this.currentPage*this.numberParPage;return e>=t&&e<n},mouseOverObject(e){e.hover=!e.hover,this.$emit("hoverListItem",e)},pageSelected(e){this.currentPage=e,this.$emit("page-change")}}}},
2"../../../../../plugins/mill-apidae/blocks/ApidaeListe/assets/src/components/map.js":(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={template:'\n <div class="apidae-map-wrapper" id="apidae-map-wrapper">\n <div id="apidae-mapbox" class="apidae-mapbox">\n <div class="apidae-map-render" :id="\'map-render-\'+id"></div>\n <div class="apidae-map-follow" v-if="displayMode === \'mixte\'">\n <input type="checkbox" name="apidae-followmapmoves" value="1" id="apidae-followmapmoves"\n v-model="filterOnMove" @change="changeFilterOnMove"/>\n <label for="apidae-followmapmoves">Actualiser la recherche quand je déplace la carte</label>\n </div>\n </div>\n </div>\n ',props:["objects","displayMode","settings","defaultLat","defaultLng","defaultZoom","id"],data:()=>({filterOnMove:!1,map:null,icon:null,markers:[],markersGroup:[],watchObjectChange:!0}),watch:{objects:async function(){this.watchObjectChange&&(await this.addMarkers(),this.filterOnMove||this.centerMap())}},computed:{objectsNonSimplified(){return this.objects.filter((e=>e.adherent))}},mounted(){this.createMap(),this.settings.defaultFollowOnMove&&(this.filterOnMove=!0,this.changeFilterOnMove())},methods:{updateSize(){setTimeout((()=>{this.map.invalidateSize(!0)}),150)},async createMap(){var e=48.866667;this.defaultLat?e=parseFloat(this.defaultLat):void 0!==this.settings.map&&void 0!==this.settings.map.default_center&&void 0!==this.settings.map.default_center.lat&&(e=parseFloat(this.settings.map.default_center.lat));var t=2.333333;this.defaultLng?t=parseFloat(this.defaultLng):void 0!==this.settings.map&&void 0!==this.settings.map.default_center&&void 0!==this.settings.map.default_center.lng&&(t=parseFloat(this.settings.map.default_center.lng));var n=9;this.defaultZoom&&(n=parseInt(this.defaultZoom)),this.map=L.map("map-render-"+this.id).setView([e,t],n),"object"==typeof this.settings&&"object"==typeof this.settings.map&&(this.icon=L.divIcon({className:"sit-map-marker",html:this.settings.map.icon.svg,iconAnchor:[Number(this.settings.map.icon.width)/2,Number(this.settings.map.icon.height)],iconSize:[Number(this.settings.map.icon.width),Number(this.settings.map.icon.height)],popupAnchor:[0,-28]}),L.tileLayer(this.settings.map.tiles_url,this.settings.map.tiles_datas).addTo(this.map),this.map.scrollWheelZoom.disable(),this.map.on("click",(()=>{this.map.scrollWheelZoom.enable()})),this.map.on("mouseout",(()=>{this.map.scrollWheelZoom.disable()})),await this.addMarkers(),this.defaultLat||this.defaultLng||this.defaultZoom?(this.filterOnMove=!0,this.mapMove()):this.centerMap()),this.map.on("moveend",this.mapMove)},mapMove(e){if(this.filterOnMove){var t=[],n=this.map.getBounds();for(var r of this.objects)this.inBounds(r,n)||t.push(r);this.emitEventFilterMover(t)}},changeFilterOnMove(){this.filterOnMove||this.emitEventFilterMover([])},emitEventFilterMover(e){this.$emit("map-filter",e)},removeAllMarkers(){for(var e of this.markers)e.remove();this.markers=[]},hoverMarker(e){var t=this.markers.find((t=>t.object.id===e.id));t&&(e.trace?(t.eachLayer((t=>{console.log(t.constructor.name),!0===e.hover?(void 0!==t.bringToFront&&t.bringToFront(),t.getElement().classList.add("marker_hover")):t.getElement().classList.remove("marker_hover")})),void 0!==t.flag&&(!0===e.hover?(jQuery("#apidae-mapbox").addClass("trace_hovered"),void 0!==t.flag.setZIndexOffset&&t.flag.setZIndexOffset(100),t.flag.getElement().classList.add("marker_hover")):(jQuery("#apidae-mapbox").removeClass("trace_hovered"),void 0!==t.flag.setZIndexOffset&&t.flag.setZIndexOffset(1),t.flag.getElement().classList.remove("marker_hover")))):!0===e.hover?(t.setZIndexOffset(100),void 0!==t.setZIndexOffset&&t.setZIndexOffset(100),t.getElement().classList.add("marker_hover")):(void 0!==t.setZIndexOffset&&t.setZIndexOffset(1),t.getElement().classList.remove("marker_hover")))},async addMarkers(){let e=[];this.removeAllMarkers();var t={};this.icon&&(t={icon:this.icon});for(let r of this.objectsNonSimplified)if(r.trace){if(r.trace_ext)if("gpx"===r.trace_ext){let t=new Promise(((e,t)=>{let n=omnivore.gpx(r.trace).on("ready",(()=>{n.eachLayer((e=>{e.bindPopup('<article class="item-card sit-item">'+r.html+"</article>")})),n.object=r,this.markers.push(n),e()})).on("error",(()=>{e()})).addTo(this.map);n.on("mouseover",(()=>{n.eachLayer((e=>{void 0!==e.bringToFront&&e.bringToFront(),e.getElement().classList.add("marker_hover")}))})),n.on("mouseout",(()=>{n.eachLayer((e=>{e.getElement().classList.remove("marker_hover")}))}))}));e.push(t)}else if("kml"===r.trace_ext){let t=new Promise(((e,t)=>{let n=omnivore.kml(r.trace).on("ready",(()=>{n.eachLayer((e=>{e.bindPopup('<article class="item-card sit-item">'+r.html+"</article>")})),n.object=r,this.markers.push(n),e()})).on("error",(()=>{e()})).addTo(this.map);n.on("mouseover",(()=>{n.eachLayer((e=>{void 0!==e.bringToFront&&e.bringToFront(),e.getElement().classList.add("marker_hover")}))})),n.on("mouseout",(()=>{n.eachLayer((e=>{e.getElement().classList.remove("marker_hover")}))}))}));e.push(t)}}else if(0!==Number(r.lat)&&0!==Number(r.lng)){var n=L.marker([r.lat,r.lng],t).addTo(this.map);n.object=r;n.bindPopup('<article class="item-card sit-item">'+r.html+"</article>"),this.markers.push(n)}await Promise.all(e)},centerMap(){if(this.markers&&this.markers.length>0){var e=new L.featureGroup(this.markers);this.map.fitBounds(e.getBounds())}},async forceMapFilterMove(){this.watchObjectChange=!1,this.filterOnMove=!1,await this.addMarkers(),this.centerMap(),this.watchObjectChange=!0},inBounds(e,t){var n=(e.lng-t._northEast.lng)*(e.lng-t._southWest.lng)<0,r=(e.lat-t._northEast.lat)*(e.lat-t._southWest.lat)<0;return n&&r}}}},
2"../../../../../plugins/mill-apidae/blocks/ApidaeListe/assets/src/components/nbresults.js":(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={template:'\n <div class="apidae-nbresults"><span class="nbresults" v-html="returnNbResults"></span></div>\n ',props:["returnNbResults"]}},
2"../../../../../plugins/mill-apidae/blocks/ApidaeListe/assets/src/components/pagination.js":(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={template:'\n <div class="apidae-pagination" v-if="numberOfPage > 1">\n <a href="javascript:void(0)" :class="isPrevBtnActive"><span class="apidae-pagination-prevnext-btn-icon iconed"\n @click="pagePrevious()"></span></a>\n \n <div class="apidae-pagination-links">\n <template v-for="n in pagesliste">\n <template v-if="n === \'separator\'">\n <span class="pagination-separator">...</span>\n </template>\n <template v-else>\n <a href="javascript:void(0)"\n :class="{ \'active\' : (n === ( currentPage + 1 ) ), \'apidae-pagination-page\' : true }"\n @click="pageClicked(n)"><span>{{ n }}</span></a>\n </template>\n </template>\n\n </div>\n\n <a href="javascript:void(0)" :class="isNextBtnActive"><span class="apidae-pagination-prevnext-btn-icon iconed"\n @click="pageNext()"></span></a>\n\n </div>\n ',props:["numberOfPage","currentPage"],computed:{pagesliste(){let e=4;if(this.currentPage+1<e){this.numberOfPage<e&&(e=this.numberOfPage);let t=[];for(let n=1;n<=e;n++)t.push(n);return this.numberOfPage>e&&(t.push("separator"),t.push(this.numberOfPage)),t}if(this.currentPage>this.numberOfPage-e&&this.numberOfPage>e){this.numberOfPage<e&&(e=this.numberOfPage);let t=[],n=0;for(let r=0;r<e;r++)t.unshift(this.numberOfPage-r),n++;return t.unshift("separator"),t.unshift(1),t}if(this.numberOfPage>e){let e=this.currentPage+1;return[1,"separator",e-1,e,e+1,"separator",this.numberOfPage]}return[]},isPrevBtnActive(){var e="apidae-pagination-prevnext-btn prev";return 0===this.currentPage&&(e+=" inactive"),e},isNextBtnActive(){var e="apidae-pagination-prevnext-btn next";return this.currentPage===this.numberOfPage-1&&(e+=" inactive"),e}},methods:{pageClicked(e){if(e<=this.numberOfPage&&e>=0){var t=jQuery(".apidae-topbar").offset().top+"px";jQuery("html,body").animate({scrollTop:t}),this.$emit("page-change",e-1)}},pagePrevious(){var e=this.currentPage;this.pageClicked(e)},pageNext(){var e=this.currentPage+2;this.pageClicked(e)}}}},
2"../../../../../plugins/mill-apidae/blocks/ApidaeListe/assets/src/components/switcher.js":(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={components:{"switcher-button":n("../../../../../plugins/mill-apidae/blocks/ApidaeListe/assets/src/components/switcherButton.js").default},template:'\n <div class="apidae-display-switcher">\n <a href="javascript:void(0)" id="apidae-filter-btn" class="icon icon-filter" v-if="filters.length > 0" @click="showFilters()">{{settings.labels.filter_btn_label}}</a>\n <ul>\n <switcher-button v-for="mode of modes" v-if="enableModes.includes(mode)" actif="" @click="modeChange(mode)" :mode="mode"\n :actif="selectedMode===mode" :key="mode"></switcher-button>\n </ul>\n </div>\n ',props:["selectedMode","enableModes","settings","filters"],data:()=>({modes:["list","map","mixte"]}),methods:{modeChange(e){this.$emit("mode-change",e)},showFilters(){this.$emit("show-filters")}}}},
2"../../../../../plugins/mill-apidae/blocks/ApidaeListe/assets/src/components/switcherButton.js":(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={template:'\n <li :class="{\'active-mode\' : actif}">\n <a @click="click" class="apidae-display-switcher-mode iconed" :data-mode="mode" :id="\'display-\'+mode">\n {{ modesLabels[mode] }}\n </a>\n </li>\n ',props:["mode","actif"],data:()=>({modesLabels:{mixte:"Mixte",list:"Liste",map:"Carte"}}),methods:{click(){this.$emit("click")}}}},
2"./components/filter.js":(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n("./node_modules/vue-flatpickr-component/dist/vue-flatpickr.js"),a=n.n(r),i=n("./node_modules/flatpickr/dist/l10n/fr.js");const o={components:{"flat-pickr":a()},template:'\n <div>\n <template v-if="field.type === \'checkbox\'">\n <p>\n <input :id="uuid" type="checkbox" @change="valueChange()" v-model="field.value">\n <label :for="uuid">{{field.label}}</label>\n </p>\n </template>\n <template v-if="field.mode === \'select\'">\n <div class="select-wrapper">\n <select :id="uuid" @change="valueChange()" v-model="field.value">\n <option :value="field.all_label">{{field.all_label}}</option>\n <option v-for="option of field.options" :value="option.label":key="option.label">{{option.label}}</option>\n </select>\n\n </div>\n </template>\n \n <template v-if="field.mode === \'dates\'">\n <div class="dates-inputs" v-if="flatpickerInit">\n <span class="date-wrapper iconed">\n <flat-pickr v-model="date_debut" :config="debutOption" @on-change="dateDebutChange" placeholder="Date de début"/>\n </span>\n <span class="date-wrapper iconed">\n <flat-pickr v-model="date_fin" :config="finOption" @on-change="dateFinChange" placeholder="Date de fin"/>\n </span>\n </div>\n </template>\n\n <template v-if="field.mode === \'range\'">\n <div class="range-wrapper">\n <div :id="\'range_\'+uuid"></div>\n </div>\n </template>\n\t <template v-if="field.type === \'jours\'">\n <div class="checkboxes">\n\t\t <p v-for="jour of field.jours">\n\t\t\t<input :id="uuid" type="checkbox" @change="valueChange()" v-model="field.value">\n\t\t\t<label :for="uuid">{{jour}}</label>\n\t\t </p>\n </div>\n\t </template>\n\n\n </div>\n ',props:["field"],data:()=>({uuid:null,slider:null,date_debut:null,date_fin:null,date_fin_min:null,flatpickerInit:!1,debutOption:{},finOption:{}}),mounted(){this.uuid=this.uuidv4(),this.field.date_debut&&(this.date_debut=this.field.date_debut,this.date_fin_min=this.field.date_fin_min),this.field.date_fin&&(this.date_fin=this.field.date_fin),this.debutOption=this.getDefaultDatePickerOption(),this.finOption=this.getDefaultDatePickerOption(),this.flatpickerInit=!0},updated(){"range"===this.field.mode&&this.createSlider()},methods:{dateDebutChange(e,t,n){this.finOption.minDate=t,this.date_debut=t,this.valueChange()},dateFinChange(e,t,n){this.date_fin=t,this.valueChange()},getDefaultDatePickerOption:()=>({locale:i.French,altFormat:"d/m/Y",altInput:!0,dateFormat:"Y-m-d",minDate:new Date,maxDate:null}),reset(){"range"===this.field.mode?(this.slider&&(this.slider.destroy(),this.slider=null,this.date_debut=null,this.date_fin=null,this.date_fin_min=null),this.createSlider()):"dates"===this.field.mode&&(this.date_debut=null,this.date_fin=null)},returnTimeInHour(e){var t=e/60;if(t<1)return e+"min";var n,r=e-60*Math.floor(t);return 0==parseInt(r)?r="":parseInt(r)<10&&(r="0"+parseInt(r)),n=Math.floor(t)+"h",isNaN(parseInt(r))||(n+=parseInt(r)),n},formatRangeValue(e){switch(this.field.type){case"distance":return parseInt(e)+"km";case"denivele":return parseInt(e)+"m";case"duree":return this.returnTimeInHour(e)+"";case"tarifs":return parseInt(e)+"â¬";default:return parseInt(e)+""}},createSlider(){if(null===this.slider){jQuery("#range_"+this.uuid).append('<div ref="'+this.uuid+'" id="'+this.uuid+'"></div>');var e=document.getElementById(this.uuid);if(console.log(this.field),e){var t=this.field.min;this.field.start&&(t=this.field.start);var n=this.field.max;this.field.end&&(n=this.field.end),this.slider=noUiSlider.create(e,{start:[t,n],connect:!0,step:this.field.max>1e3?10:1,format:{decimals:0,to:this.formatRangeValue,from:e=>Number(e.replace(",-",""))},range:{min:Math.floor(this.field.min),max:Math.ceil(this.field.max)}}),this.slider.on("change",this.valueChange)}}},valueChange(){if(console.log("valueChange"),console.log(this.date_debut,this.date_fin),"dates"===this.field.mode){if(this.date_debut&&(this.date_fin_min=this.date_debut),console.log("ON PASSE DATES"),this.date_debut&&this.date_fin){var e=this.date_debut.split("/"),t=this.date_fin.split("/"),n=Date.parse(e[0],e[1]-1,e[2]);Date.parse(t[0],t[1]-1,t[2])<n&&(this.date_fin_min=this.date_debut,this.$refs.endDate.value=null,this.date_fin=null)}}else if("range"===this.field.mode){var r=this.slider.get(!0);this.field.start=parseInt(r[0]),this.field.end=parseInt(r[1])}"dates"===this.field.mode&&(this.field.date_debut=this.date_debut,this.field.date_fin=this.date_fin),this.$emit("value-change",this.field)},uuidv4:()=>([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(e=>(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)))}}},
2"./components/filters.js":(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n("./components/filter.js"),a=n("./components/filtersButton.js");const i={components:{myfilter:r.default,"filters-button":a.default},template:'\n <div class="apidae-filters-wrapper">\n \n <div class="apidae-filters">\n <div class="filters-groups">\n <div class="filters-group" v-for="(filter, key) of filters">\n <div :class="\'filter toggable mode_\'+filter.mode">\n <p class="label"><a href="javascript:void(0)">{{filter.label}}</a></p>\n <template v-if="filter.mode === \'checkbox\'">\n <div class="checkboxes to-toggle">\n <myfilter :ref="\'filter_\'+key" v-for="field of filter.options" :key="filter.id+\'_\'+field.label" :field="field" v-on:value-change="valueChange" ></myfilter>\n </div>\n </template>\n <template v-else>\n <div class="selector to-toggle">\n <myfilter :ref="\'filter_\'+key" :field="filter" v-on:value-change="valueChange"></myfilter>\n </div>\n </template>\n </div>\n </div>\n </div>\n \n <div class="filters-submit">\n\t\t\t\t<a class="btn" href="javascript:void(0)" @click="closeFilters" id="btn_apply_filters">{{settings.labels.applyFilters}} ({{nbPreviewFilters}})</a>\n <a href="javascript:void(0)" v-if="settings.useResetBtn" @click="reset" class="apidae-filters-reset">{{settings.labels.filter_reset}}</a>\n </div>\n \n <a href="javascript:void(0)" class="close-apidae-filters icon icon-close" @click="closeFilters"><span></span></a>\n </div>\n \n </div>\n ',props:["filters","settings","nbPreviewFilters"],data:()=>({}),computed:{},mounted(){},methods:{closeFilters(){this.$emit("show-filters")},valueChange(e){this.$emit("value-change",e)},validateFilter(){this.$emit("validate-filters")},reset(){for(var[e,t]of Object.entries(this.$refs))t[0].reset();this.$emit("filters-reset")}}}},
2"./components/filtersButton.js":(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={template:'\n <div>\n <button @click="click">{{text}}</button>\n </div>\n ',props:["text"],data:()=>({uuid:null}),mounted(){},methods:{click(){this.$emit("click")}}}},
vendor: 44,257 bytes, line 2
2"./node_modules/flatpickr/dist/esm/index.js":(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>m});var r=n("./node_modules/flatpickr/dist/esm/types/options.js"),a=n("./node_modules/flatpickr/dist/esm/l10n/default.js"),i=n("./node_modules/flatpickr/dist/esm/utils/index.js"),o=n("./node_modules/flatpickr/dist/esm/utils/dom.js"),s=n("./node_modules/flatpickr/dist/esm/utils/dates.js"),c=n("./node_modules/flatpickr/dist/esm/utils/formatting.js"),l=(n("./node_modules/flatpickr/dist/esm/utils/polyfills.js"),function(){return l=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e},l.apply(this,arguments)}),u=function(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),a=0;for(t=0;t<n;t++)for(var i=arguments[t],o=0,s=i.length;o<s;o++,a++)r[a]=i[o];return r},d=300;function f(e,t){var n={config:l(l({},r.defaults),v.defaultConfig),l10n:a.default};function f(){var e;return(null===(e=n.calendarContainer)||void 0===e?void 0:e.getRootNode()).activeElement||document.activeElement}function p(e){return e.bind(n)}function m(){var e=n.config;!1===e.weekNumbers&&1===e.showMonths||!0!==e.noCalendar&&window.requestAnimationFrame((function(){if(void 0!==n.calendarContainer&&(n.calendarContainer.style.visibility="hidden",n.calendarContainer.style.display="block"),void 0!==n.daysContainer){var t=(n.days.offsetWidth+1)*e.showMonths;n.daysContainer.style.width=t+"px",n.calendarContainer.style.width=t+(void 0!==n.weekWrapper?n.weekWrapper.offsetWidth:0)+"px",n.calendarContainer.style.removeProperty("visibility"),n.calendarContainer.style.removeProperty("display")}}))}function h(e){if(0===n.selectedDates.length){var t=void 0===n.config.minDate||(0,s.compareDates)(new Date,n.config.minDate)>=0?new Date:new Date(n.config.minDate.getTime()),r=(0,s.getDefaultHours)(n.config);t.setHours(r.hours,r.minutes,r.seconds,t.getMilliseconds()),n.selectedDates=[t],n.latestSelectedDateObj=t}void 0!==e&&"blur"!==e.type&&function(e){e.preventDefault();var t="keydown"===e.type,r=(0,o.getEventTarget)(e),a=r;void 0!==n.amPM&&r===n.amPM&&(n.amPM.textContent=n.l10n.amPM[(0,i.int)(n.amPM.textContent===n.l10n.amPM[0])]);var s=parseFloat(a.getAttribute("min")),c=parseFloat(a.getAttribute("max")),l=parseFloat(a.getAttribute("step")),u=parseInt(a.value,10),d=e.delta||(t?38===e.which?1:-1:0),f=u+l*d;if(void 0!==a.value&&2===a.value.length){var p=a===n.hourElement,v=a===n.minuteElement;f<s?(f=c+f+(0,i.int)(!p)+((0,i.int)(p)&&(0,i.int)(!n.amPM)),v&&D(void 0,-1,n.hourElement)):f>c&&(f=a===n.hourElement?f-c-(0,i.int)(!n.amPM):s,v&&D(void 0,1,n.hourElement)),n.amPM&&p&&(1===l?f+u===23:Math.abs(f-u)>l)&&(n.amPM.textContent=n.l10n.amPM[(0,i.int)(n.amPM.textContent===n.l10n.amPM[0])]),a.value=(0,i.pad)(f)}}(e);var a=n._input.value;g(),le(),n._input.value!==a&&n._debouncedChange()}function g(){if(void 0!==n.hourElement&&void 0!==n.minuteElement){var e,t,r=(parseInt(n.hourElement.value.slice(-2),10)||0)%24,a=(parseInt(n.minuteElement.value,10)||0)%60,o=void 0!==n.secondElement?(parseInt(n.secondElement.value,10)||0)%60:0;void 0!==n.amPM&&(e=r,t=n.amPM.textContent,r=e%12+12*(0,i.int)(t===n.l10n.amPM[1]));var c=void 0!==n.config.minTime||n.config.minDate&&n.minDateHasTime&&n.latestSelectedDateObj&&0===(0,s.compareDates)(n.latestSelectedDateObj,n.config.minDate,!0),l=void 0!==n.config.maxTime||n.config.maxDate&&n.maxDateHasTime&&n.latestSelectedDateObj&&0===(0,s.compareDates)(n.latestSelectedDateObj,n.config.maxDate,!0);if(void 0!==n.config.maxTime&&void 0!==n.config.minTime&&n.config.minTime>n.config.maxTime){var u=(0,s.calculateSecondsSinceMidnight)(n.config.minTime.getHours(),n.config.minTime.getMinutes(),n.config.minTime.getSeconds()),d=(0,s.calculateSecondsSinceMidnight)(n.config.maxTime.getHours(),n.config.maxTime.getMinutes(),n.config.maxTime.getSeconds()),f=(0,s.calculateSecondsSinceMidnight)(r,a,o);if(f>d&&f<u){var p=(0,s.parseSeconds)(u);r=p[0],a=p[1],o=p[2]}}else{if(l){var v=void 0!==n.config.maxTime?n.config.maxTime:n.config.maxDate;(r=Math.min(r,v.getHours()))===v.getHours()&&(a=Math.min(a,v.getMinutes())),a===v.getMinutes()&&(o=Math.min(o,v.getSeconds()))}if(c){var m=void 0!==n.config.minTime?n.config.minTime:n.config.minDate;(r=Math.max(r,m.getHours()))===m.getHours()&&a<m.getMinutes()&&(a=m.getMinutes()),a===m.getMinutes()&&(o=Math.max(o,m.getSeconds()))}}b(r,a,o)}}function y(e){var t=e||n.latestSelectedDateObj;t&&t instanceof Date&&b(t.getHours(),t.getMinutes(),t.getSeconds())}function b(e,t,r){void 0!==n.latestSelectedDateObj&&n.latestSelectedDateObj.setHours(e%24,t,r||0,0),n.hourElement&&n.minuteElement&&!n.isMobile&&(n.hourElement.value=(0,i.pad)(n.config.time_24hr?e:(12+e)%12+12*(0,i.int)(e%12==0)),n.minuteElement.value=(0,i.pad)(t),void 0!==n.amPM&&(n.amPM.textContent=n.l10n.amPM[(0,i.int)(e>=12)]),void 0!==n.secondElement&&(n.secondElement.value=(0,i.pad)(r)))}function _(e){var t=(0,o.getEventTarget)(e),n=parseInt(t.value)+(e.delta||0);(n/1e3>1||"Enter"===e.key&&!/[^\d]/.test(n.toString()))&&H(n)}function w(e,t,r,a){return t instanceof Array?t.forEach((function(t){return w(e,t,r,a)})):e instanceof Array?e.forEach((function(e){return w(e,t,r,a)})):(e.addEventListener(t,r,a),void n._handlers.push({remove:function(){return e.removeEventListener(t,r,a)}}))}function C(){ae("onChange")}function k(e,t){var r=void 0!==e?n.parseDate(e):n.latestSelectedDateObj||(n.config.minDate&&n.config.minDate>n.now?n.config.minDate:n.config.maxDate&&n.config.maxDate<n.now?n.config.maxDate:n.now),a=n.currentYear,i=n.currentMonth;try{void 0!==r&&(n.currentYear=r.getFullYear(),n.currentMonth=r.getMonth())}catch(e){e.message="Invalid date supplied: "+r,n.config.errorHandler(e)}t&&n.currentYear!==a&&(ae("onYearChange"),E()),!t||n.currentYear===a&&n.currentMonth===i||ae("onMonthChange"),n.redraw()}function x(e){var t=(0,o.getEventTarget)(e);~t.className.indexOf("arrow")&&D(e,t.classList.contains("arrowUp")?1:-1)}function D(e,t,n){var r=e&&(0,o.getEventTarget)(e),a=n||r&&r.parentNode&&r.parentNode.firstChild,i=ie("increment");i.delta=t,a&&a.dispatchEvent(i)}function M(e,t,r,a){var i=Y(t,!0),c=(0,o.createElement)("span",e,t.getDate().toString());return c.dateObj=t,c.$i=a,c.setAttribute("aria-label",n.formatDate(t,n.config.ariaDateFormat)),-1===e.indexOf("hidden")&&0===(0,s.compareDates)(t,n.now)&&(n.todayDateElem=c,c.classList.add("today"),c.setAttribute("aria-current","date")),i?(c.tabIndex=-1,oe(t)&&(c.classList.add("selected"),n.selectedDateElem=c,"range"===n.config.mode&&((0,o.toggleClass)(c,"startRange",n.selectedDates[0]&&0===(0,s.compareDates)(t,n.selectedDates[0],!0)),(0,o.toggleClass)(c,"endRange",n.selectedDates[1]&&0===(0,s.compareDates)(t,n.selectedDates[1],!0)),"nextMonthDay"===e&&c.classList.add("inRange")))):c.classList.add("flatpickr-disabled"),"range"===n.config.mode&&function(e){return!("range"!==n.config.mode||n.selectedDates.length<2)&&((0,s.compareDates)(e,n.selectedDates[0])>=0&&(0,s.compareDates)(e,n.selectedDates[1])<=0)}(t)&&!oe(t)&&c.classList.add("inRange"),n.weekNumbers&&1===n.config.showMonths&&"prevMonthDay"!==e&&a%7==6&&n.weekNumbers.insertAdjacentHTML("beforeend","<span class='flatpickr-day'>"+n.config.getWeek(t)+"</span>"),ae("onDayCreate",c),c}function O(e){e.focus(),"range"===n.config.mode&&W(e)}function S(e){for(var t=e>0?0:n.config.showMonths-1,r=e>0?n.config.showMonths:-1,a=t;a!=r;a+=e)for(var i=n.daysContainer.children[a],o=e>0?0:i.children.length-1,s=e>0?i.children.length:-1,c=o;c!=s;c+=e){var l=i.children[c];if(-1===l.className.indexOf("hidden")&&Y(l.dateObj))return l}}function j(e,t){var r=f(),a=U(r||document.body),i=void 0!==e?e:a?r:void 0!==n.selectedDateElem&&U(n.selectedDateElem)?n.selectedDateElem:void 0!==n.todayDateElem&&U(n.todayDateElem)?n.todayDateElem:S(t>0?1:-1);void 0===i?n._input.focus():a?function(e,t){for(var r=-1===e.className.indexOf("Month")?e.dateObj.getMonth():n.currentMonth,a=t>0?n.config.showMonths:-1,i=t>0?1:-1,o=r-n.currentMonth;o!=a;o+=i)for(var s=n.daysContainer.children[o],c=r-n.currentMonth===o?e.$i+t:t<0?s.children.length-1:0,l=s.children.length,u=c;u>=0&&u<l&&u!=(t>0?l:-1);u+=i){var d=s.children[u];if(-1===d.className.indexOf("hidden")&&Y(d.dateObj)&&Math.abs(e.$i-u)>=Math.abs(t))return O(d)}n.changeMonth(i),j(S(i),0)}(i,t):O(i)}function T(e,t){for(var r=(new Date(e,t,1).getDay()-n.l10n.firstDayOfWeek+7)%7,a=n.utils.getDaysInMonth((t-1+12)%12,e),i=n.utils.getDaysInMonth(t,e),s=window.document.createDocumentFragment(),c=n.config.showMonths>1,l=c?"prevMonthDay hidden":"prevMonthDay",u=c?"nextMonthDay hidden":"nextMonthDay",d=a+1-r,f=0;d<=a;d++,f++)s.appendChild(M("flatpickr-day "+l,new Date(e,t-1,d),0,f));for(d=1;d<=i;d++,f++)s.appendChild(M("flatpickr-day",new Date(e,t,d),0,f));for(var p=i+1;p<=42-r&&(1===n.config.showMonths||f%7!=0);p++,f++)s.appendChild(M("flatpickr-day "+u,new Date(e,t+1,p%i),0,f));var v=(0,o.createElement)("div","dayContainer");return v.appendChild(s),v}function $(){if(void 0!==n.daysContainer){(0,o.clearNode)(n.daysContainer),n.weekNumbers&&(0,o.clearNode)(n.weekNumbers);for(var e=document.createDocumentFragment(),t=0;t<n.config.showMonths;t++){var r=new Date(n.currentYear,n.currentMonth,1);r.setMonth(n.currentMonth+t),e.appendChild(T(r.getFullYear(),r.getMonth()))}n.daysContainer.appendChild(e),n.days=n.daysContainer.firstChild,"range"===n.config.mode&&1===n.selectedDates.length&&W()}}function E(){if(!(n.config.showMonths>1||"dropdown"!==n.config.monthSelectorType)){var e=function(e){return!(void 0!==n.config.minDate&&n.currentYear===n.config.minDate.getFullYear()&&e<n.config.minDate.getMonth())&&!(void 0!==n.config.maxDate&&n.currentYear===n.config.maxDate.getFullYear()&&e>n.config.maxDate.getMonth())};n.monthsDropdownContainer.tabIndex=-1,n.monthsDropdownContainer.innerHTML="";for(var t=0;t<12;t++)if(e(t)){var r=(0,o.createElement)("option","flatpickr-monthDropdown-month");r.value=new Date(n.currentYear,t).getMonth().toString(),r.textContent=(0,c.monthToStr)(t,n.config.shorthandCurrentMonth,n.l10n),r.tabIndex=-1,n.currentMonth===t&&(r.selected=!0),n.monthsDropdownContainer.appendChild(r)}}}function A(){var e,t=(0,o.createElement)("div","flatpickr-month"),r=window.document.createDocumentFragment();n.config.showMonths>1||"static"===n.config.monthSelectorType?e=(0,o.createElement)("span","cur-month"):(n.monthsDropdownContainer=(0,o.createElement)("select","flatpickr-monthDropdown-months"),n.monthsDropdownContainer.setAttribute("aria-label",n.l10n.monthAriaLabel),w(n.monthsDropdownContainer,"change",(function(e){var t=(0,o.getEventTarget)(e),r=parseInt(t.value,10);n.changeMonth(r-n.currentMonth),ae("onMonthChange")})),E(),e=n.monthsDropdownContainer);var a=(0,o.createNumberInput)("cur-year",{tabindex:"-1"}),i=a.getElementsByTagName("input")[0];i.setAttribute("aria-label",n.l10n.yearAriaLabel),n.config.minDate&&i.setAttribute("min",n.config.minDate.getFullYear().toString()),n.config.maxDate&&(i.setAttribute("max",n.config.maxDate.getFullYear().toString()),i.disabled=!!n.config.minDate&&n.config.minDate.getFullYear()===n.config.maxDate.getFullYear());var s=(0,o.createElement)("div","flatpickr-current-month");return s.appendChild(e),s.appendChild(a),r.appendChild(s),t.appendChild(r),{container:t,yearElement:i,monthElement:e}}function P(){(0,o.clearNode)(n.monthNav),n.monthNav.appendChild(n.prevMonthNav),n.config.showMonths&&(n.yearElements=[],n.monthElements=[]);for(var e=n.config.showMonths;e--;){var t=A();n.yearElements.push(t.yearElement),n.monthElements.push(t.monthElement),n.monthNav.appendChild(t.container)}n.monthNav.appendChild(n.nextMonthNav)}function I(){n.weekdayContainer?(0,o.clearNode)(n.weekdayContainer):n.weekdayContainer=(0,o.createElement)("div","flatpickr-weekdays");for(var e=n.config.showMonths;e--;){var t=(0,o.createElement)("div","flatpickr-weekdaycontainer");n.weekdayContainer.appendChild(t)}return F(),n.weekdayContainer}function F(){if(n.weekdayContainer){var e=n.l10n.firstDayOfWeek,t=u(n.l10n.weekdays.shorthand);e>0&&e<t.length&&(t=u(t.splice(e,t.length),t.splice(0,e)));for(var r=n.config.showMonths;r--;)n.weekdayContainer.children[r].innerHTML="\n <span class='flatpickr-weekday'>\n "+t.join("</span><span class='flatpickr-weekday'>")+"\n </span>\n "}}function N(e,t){void 0===t&&(t=!0);var r=t?e:e-n.currentMonth;r<0&&!0===n._hidePrevMonthArrow||r>0&&!0===n._hideNextMonthArrow||(n.currentMonth+=r,(n.currentMonth<0||n.currentMonth>11)&&(n.currentYear+=n.currentMonth>11?1:-1,n.currentMonth=(n.currentMonth+12)%12,ae("onYearChange"),E()),$(),ae("onMonthChange"),se())}function L(e){return n.calendarContainer.contains(e)}function R(e){if(n.isOpen&&!n.config.inline){var t=(0,o.getEventTarget)(e),r=L(t),a=!(t===n.input||t===n.altInput||n.element.contains(t)||e.path&&e.path.indexOf&&(~e.path.indexOf(n.input)||~e.path.indexOf(n.altInput)))&&!r&&!L(e.relatedTarget),i=!n.config.ignoredFocusElements.some((function(e){return e.contains(t)}));a&&i&&(n.config.allowInput&&n.setDate(n._input.value,!1,n.config.altInput?n.config.altFormat:n.config.dateFormat),void 0!==n.timeContainer&&void 0!==n.minuteElement&&void 0!==n.hourElement&&""!==n.input.value&&void 0!==n.input.value&&h(),n.close(),n.config&&"range"===n.config.mode&&1===n.selectedDates.length&&n.clear(!1))}}function H(e){if(!(!e||n.config.minDate&&e<n.config.minDate.getFullYear()||n.config.maxDate&&e>n.config.maxDate.getFullYear())){var t=e,r=n.currentYear!==t;n.currentYear=t||n.currentYear,n.config.maxDate&&n.currentYear===n.config.maxDate.getFullYear()?n.currentMonth=Math.min(n.config.maxDate.getMonth(),n.currentMonth):n.config.minDate&&n.currentYear===n.config.minDate.getFullYear()&&(n.currentMonth=Math.max(n.config.minDate.getMonth(),n.currentMonth)),r&&(n.redraw(),ae("onYearChange"),E())}}function Y(e,t){var r;void 0===t&&(t=!0);var a=n.parseDate(e,void 0,t);if(n.config.minDate&&a&&(0,s.compareDates)(a,n.config.minDate,void 0!==t?t:!n.minDateHasTime)<0||n.config.maxDate&&a&&(0,s.compareDates)(a,n.config.maxDate,void 0!==t?t:!n.maxDateHasTime)>0)return!1;if(!n.config.enable&&0===n.config.disable.length)return!0;if(void 0===a)return!1;for(var i=!!n.config.enable,o=null!==(r=n.config.enable)&&void 0!==r?r:n.config.disable,c=0,l=void 0;c<o.length;c++){if("function"==typeof(l=o[c])&&l(a))return i;if(l instanceof Date&&void 0!==a&&l.getTime()===a.getTime())return i;if("string"==typeof l){var u=n.parseDate(l,void 0,!0);return u&&u.getTime()===a.getTime()?i:!i}if("object"==typeof l&&void 0!==a&&l.from&&l.to&&a.getTime()>=l.from.getTime()&&a.getTime()<=l.to.getTime())return i}return!i}function U(e){return void 0!==n.daysContainer&&(-1===e.className.indexOf("hidden")&&-1===e.className.indexOf("flatpickr-disabled")&&n.daysContainer.contains(e))}function B(e){var t=e.target===n._input,r=n._input.value.trimEnd()!==ce();!t||!r||e.relatedTarget&&L(e.relatedTarget)||n.setDate(n._input.value,!0,e.target===n.altInput?n.config.altFormat:n.config.dateFormat)}function V(t){var r=(0,o.getEventTarget)(t),a=n.config.wrap?e.contains(r):r===n._input,i=n.config.allowInput,s=n.isOpen&&(!i||!a),c=n.config.inline&&a&&!i;if(13===t.keyCode&&a){if(i)return n.setDate(n._input.value,!0,r===n.altInput?n.config.altFormat:n.config.dateFormat),n.close(),r.blur();n.open()}else if(L(r)||s||c){var l=!!n.timeContainer&&n.timeContainer.contains(r);switch(t.keyCode){case 13:l?(t.preventDefault(),h(),G()):X(t);break;case 27:t.preventDefault(),G();break;case 8:case 46:a&&!n.config.allowInput&&(t.preventDefault(),n.clear());break;case 37:case 39:if(l||a)n.hourElement&&n.hourElement.focus();else{t.preventDefault();var u=f();if(void 0!==n.daysContainer&&(!1===i||u&&U(u))){var d=39===t.keyCode?1:-1;t.ctrlKey?(t.stopPropagation(),N(d),j(S(1),0)):j(void 0,d)}}break;case 38:case 40:t.preventDefault();var p=40===t.keyCode?1:-1;n.daysContainer&&void 0!==r.$i||r===n.input||r===n.altInput?t.ctrlKey?(t.stopPropagation(),H(n.currentYear-p),j(S(1),0)):l||j(void 0,7*p):r===n.currentYearElement?H(n.currentYear-p):n.config.enableTime&&(!l&&n.hourElement&&n.hourElement.focus(),h(t),n._debouncedChange());break;case 9:if(l){var v=[n.hourElement,n.minuteElement,n.secondElement,n.amPM].concat(n.pluginElements).filter((function(e){return e})),m=v.indexOf(r);if(-1!==m){var y=v[m+(t.shiftKey?-1:1)];t.preventDefault(),(y||n._input).focus()}}else!n.config.noCalendar&&n.daysContainer&&n.daysContainer.contains(r)&&t.shiftKey&&(t.preventDefault(),n._input.focus())}}if(void 0!==n.amPM&&r===n.amPM)switch(t.key){case n.l10n.amPM[0].charAt(0):case n.l10n.amPM[0].charAt(0).toLowerCase():n.amPM.textContent=n.l10n.amPM[0],g(),le();break;case n.l10n.amPM[1].charAt(0):case n.l10n.amPM[1].charAt(0).toLowerCase():n.amPM.textContent=n.l10n.amPM[1],g(),le()}(a||L(r))&&ae("onKeyDown",t)}function W(e,t){if(void 0===t&&(t="flatpickr-day"),1===n.selectedDates.length&&(!e||e.classList.contains(t)&&!e.classList.contains("flatpickr-disabled"))){for(var r=e?e.dateObj.getTime():n.days.firstElementChild.dateObj.getTime(),a=n.parseDate(n.selectedDates[0],void 0,!0).getTime(),i=Math.min(r,n.selectedDates[0].getTime()),o=Math.max(r,n.selectedDates[0].getTime()),c=!1,l=0,u=0,d=i;d<o;d+=s.duration.DAY)Y(new Date(d),!0)||(c=c||d>i&&d<o,d<a&&(!l||d>l)?l=d:d>a&&(!u||d<u)&&(u=d));Array.from(n.rContainer.querySelectorAll("*:nth-child(-n+"+n.config.showMonths+") > ."+t)).forEach((function(t){var i=t.dateObj.getTime(),o=l>0&&i<l||u>0&&i>u;if(o)return t.classList.add("notAllowed"),void["inRange","startRange","endRange"].forEach((function(e){t.classList.remove(e)}));c&&!o||(["startRange","inRange","endRange","notAllowed"].forEach((function(e){t.classList.remove(e)})),void 0!==e&&(e.classList.add(r<=n.selectedDates[0].getTime()?"startRange":"endRange"),a<r&&i===a?t.classList.add("startRange"):a>r&&i===a&&t.classList.add("endRange"),i>=l&&(0===u||i<=u)&&(0,s.isBetween)(i,a,r)&&t.classList.add("inRange")))}))}}function z(){!n.isOpen||n.config.static||n.config.inline||q()}function K(e){return function(t){var r=n.config["_"+e+"Date"]=n.parseDate(t,n.config.dateFormat),a=n.config["_"+("min"===e?"max":"min")+"Date"];void 0!==r&&(n["min"===e?"minDateHasTime":"maxDateHasTime"]=r.getHours()>0||r.getMinutes()>0||r.getSeconds()>0),n.selectedDates&&(n.selectedDates=n.selectedDates.filter((function(e){return Y(e)})),n.selectedDates.length||"min"!==e||y(r),le()),n.daysContainer&&(Q(),void 0!==r?n.currentYearElement[e]=r.getFullYear().toString():n.currentYearElement.removeAttribute(e),n.currentYearElement.disabled=!!a&&void 0!==r&&a.getFullYear()===r.getFullYear())}}function J(){return n.config.wrap?e.querySelector("[data-input]"):e}function Z(){"object"!=typeof n.config.locale&&void 0===v.l10ns[n.config.locale]&&n.config.errorHandler(new Error("flatpickr: invalid locale "+n.config.locale)),n.l10n=l(l({},v.l10ns.default),"object"==typeof n.config.locale?n.config.locale:"default"!==n.config.locale?v.l10ns[n.config.locale]:void 0),c.tokenRegex.D="("+n.l10n.weekdays.shorthand.join("|")+")",c.tokenRegex.l="("+n.l10n.weekdays.longhand.join("|")+")",c.tokenRegex.M="("+n.l10n.months.shorthand.join("|")+")",c.tokenRegex.F="("+n.l10n.months.longhand.join("|")+")",c.tokenRegex.K="("+n.l10n.amPM[0]+"|"+n.l10n.amPM[1]+"|"+n.l10n.amPM[0].toLowerCase()+"|"+n.l10n.amPM[1].toLowerCase()+")",void 0===l(l({},t),JSON.parse(JSON.stringify(e.dataset||{}))).time_24hr&&void 0===v.defaultConfig.time_24hr&&(n.config.time_24hr=n.l10n.time_24hr),n.formatDate=(0,s.createDateFormatter)(n),n.parseDate=(0,s.createDateParser)({config:n.config,l10n:n.l10n})}function q(e){if("function"!=typeof n.config.position){if(void 0!==n.calendarContainer){ae("onPreCalendarPosition");var t=e||n._positionElement,r=Array.prototype.reduce.call(n.calendarContainer.children,(function(e,t){return e+t.offsetHeight}),0),a=n.calendarContainer.offsetWidth,i=n.config.position.split(" "),s=i[0],c=i.length>1?i[1]:null,l=t.getBoundingClientRect(),u=window.innerHeight-l.bottom,d="above"===s||"below"!==s&&u<r&&l.top>r,f=window.pageYOffset+l.top+(d?-r-2:t.offsetHeight+2);if((0,o.toggleClass)(n.calendarContainer,"arrowTop",!d),(0,o.toggleClass)(n.calendarContainer,"arrowBottom",d),!n.config.inline){var p=window.pageXOffset+l.left,v=!1,m=!1;"center"===c?(p-=(a-l.width)/2,v=!0):"right"===c&&(p-=a-l.width,m=!0),(0,o.toggleClass)(n.calendarContainer,"arrowLeft",!v&&!m),(0,o.toggleClass)(n.calendarContainer,"arrowCenter",v),(0,o.toggleClass)(n.calendarContainer,"arrowRight",m);var h=window.document.body.offsetWidth-(window.pageXOffset+l.right),g=p+a>window.document.body.offsetWidth,y=h+a>window.document.body.offsetWidth;if((0,o.toggleClass)(n.calendarContainer,"rightMost",g),!n.config.static)if(n.calendarContainer.style.top=f+"px",g)if(y){var b=function(){for(var e=null,t=0;t<document.styleSheets.length;t++){var n=document.styleSheets[t];if(n.cssRules){try{n.cssRules}catch(e){continue}e=n;break}}return null!=e?e:(r=document.createElement("style"),document.head.appendChild(r),r.sheet);var r}();if(void 0===b)return;var _=window.document.body.offsetWidth,w=Math.max(0,_/2-a/2),C=b.cssRules.length,k="{left:"+l.left+"px;right:auto;}";(0,o.toggleClass)(n.calendarContainer,"rightMost",!1),(0,o.toggleClass)(n.calendarContainer,"centerMost",!0),b.insertRule(".flatpickr-calendar.centerMost:before,.flatpickr-calendar.centerMost:after"+k,C),n.calendarContainer.style.left=w+"px",n.calendarContainer.style.right="auto"}else n.calendarContainer.style.left="auto",n.calendarContainer.style.right=h+"px";else n.calendarContainer.style.left=p+"px",n.calendarContainer.style.right="auto"}}}else n.config.position(n,e)}function Q(){n.config.noCalendar||n.isMobile||(E(),se(),$())}function G(){n._input.focus(),-1!==window.navigator.userAgent.indexOf("MSIE")||void 0!==navigator.msMaxTouchPoints?setTimeout(n.close,0):n.close()}function X(e){e.preventDefault(),e.stopPropagation();var t=(0,o.findParent)((0,o.getEventTarget)(e),(function(e){return e.classList&&e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled")&&!e.classList.contains("notAllowed")}));if(void 0!==t){var r=t,a=n.latestSelectedDateObj=new Date(r.dateObj.getTime()),i=(a.getMonth()<n.currentMonth||a.getMonth()>n.currentMonth+n.config.showMonths-1)&&"range"!==n.config.mode;if(n.selectedDateElem=r,"single"===n.config.mode)n.selectedDates=[a];else if("multiple"===n.config.mode){var c=oe(a);c?n.selectedDates.splice(parseInt(c),1):n.selectedDates.push(a)}else"range"===n.config.mode&&(2===n.selectedDates.length&&n.clear(!1,!1),n.latestSelectedDateObj=a,n.selectedDates.push(a),0!==(0,s.compareDates)(a,n.selectedDates[0],!0)&&n.selectedDates.sort((function(e,t){return e.getTime()-t.getTime()})));if(g(),i){var l=n.currentYear!==a.getFullYear();n.currentYear=a.getFullYear(),n.currentMonth=a.getMonth(),l&&(ae("onYearChange"),E()),ae("onMonthChange")}if(se(),$(),le(),i||"range"===n.config.mode||1!==n.config.showMonths?void 0!==n.selectedDateElem&&void 0===n.hourElement&&n.selectedDateElem&&n.selectedDateElem.focus():O(r),void 0!==n.hourElement&&void 0!==n.hourElement&&n.hourElement.focus(),n.config.closeOnSelect){var u="single"===n.config.mode&&!n.config.enableTime,d="range"===n.config.mode&&2===n.selectedDates.length&&!n.config.enableTime;(u||d)&&G()}C()}}n.parseDate=(0,s.createDateParser)({config:n.config,l10n:n.l10n}),n._handlers=[],n.pluginElements=[],n.loadedPlugins=[],n._bind=w,n._setHoursFromDate=y,n._positionCalendar=q,n.changeMonth=N,n.changeYear=H,n.clear=function(e,t){void 0===e&&(e=!0);void 0===t&&(t=!0);n.input.value="",void 0!==n.altInput&&(n.altInput.value="");void 0!==n.mobileInput&&(n.mobileInput.value="");n.selectedDates=[],n.latestSelectedDateObj=void 0,!0===t&&(n.currentYear=n._initialDate.getFullYear(),n.currentMonth=n._initialDate.getMonth());if(!0===n.config.enableTime){var r=(0,s.getDefaultHours)(n.config);b(r.hours,r.minutes,r.seconds)}n.redraw(),e&&ae("onChange")},n.close=function(){n.isOpen=!1,n.isMobile||(void 0!==n.calendarContainer&&n.calendarContainer.classList.remove("open"),void 0!==n._input&&n._input.classList.remove("active"));ae("onClose")},n.onMouseOver=W,n._createElement=o.createElement,n.createDay=M,n.destroy=function(){void 0!==n.config&&ae("onDestroy");for(var e=n._handlers.length;e--;)n._handlers[e].remove();if(n._handlers=[],n.mobileInput)n.mobileInput.parentNode&&n.mobileInput.parentNode.removeChild(n.mobileInput),n.mobileInput=void 0;else if(n.calendarContainer&&n.calendarContainer.parentNode)if(n.config.static&&n.calendarContainer.parentNode){var t=n.calendarContainer.parentNode;if(t.lastChild&&t.removeChild(t.lastChild),t.parentNode){for(;t.firstChild;)t.parentNode.insertBefore(t.firstChild,t);t.parentNode.removeChild(t)}}else n.calendarContainer.parentNode.removeChild(n.calendarContainer);n.altInput&&(n.input.type="text",n.altInput.parentNode&&n.altInput.parentNode.removeChild(n.altInput),delete n.altInput);n.input&&(n.input.type=n.input._type,n.input.classList.remove("flatpickr-input"),n.input.removeAttribute("readonly"));["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach((function(e){try{delete n[e]}catch(e){}}))},n.isEnabled=Y,n.jumpToDate=k,n.updateValue=le,n.open=function(e,t){void 0===t&&(t=n._positionElement);if(!0===n.isMobile){if(e){e.preventDefault();var r=(0,o.getEventTarget)(e);r&&r.blur()}return void 0!==n.mobileInput&&(n.mobileInput.focus(),n.mobileInput.click()),void ae("onOpen")}if(n._input.disabled||n.config.inline)return;var a=n.isOpen;n.isOpen=!0,a||(n.calendarContainer.classList.add("open"),n._input.classList.add("active"),ae("onOpen"),q(t));!0===n.config.enableTime&&!0===n.config.noCalendar&&(!1!==n.config.allowInput||void 0!==e&&n.timeContainer.contains(e.relatedTarget)||setTimeout((function(){return n.hourElement.select()}),50))},n.redraw=Q,n.set=function(e,t){if(null!==e&&"object"==typeof e)for(var a in Object.assign(n.config,e),e)void 0!==ee[a]&&ee[a].forEach((function(e){return e()}));else n.config[e]=t,void 0!==ee[e]?ee[e].forEach((function(e){return e()})):r.HOOKS.indexOf(e)>-1&&(n.config[e]=(0,i.arrayify)(t));n.redraw(),le(!0)},n.setDate=function(e,t,r){void 0===t&&(t=!1);void 0===r&&(r=n.config.dateFormat);if(0!==e&&!e||e instanceof Array&&0===e.length)return n.clear(t);te(e,r),n.latestSelectedDateObj=n.selectedDates[n.selectedDates.length-1],n.redraw(),k(void 0,t),y(),0===n.selectedDates.length&&n.clear(!1);le(t),t&&ae("onChange")},n.toggle=function(e){if(!0===n.isOpen)return n.close();n.open(e)};var ee={locale:[Z,F],showMonths:[P,m,I],minDate:[k],maxDate:[k],positionElement:[re],clickOpens:[function(){!0===n.config.clickOpens?(w(n._input,"focus",n.open),w(n._input,"click",n.open)):(n._input.removeEventListener("focus",n.open),n._input.removeEventListener("click",n.open))}]};function te(e,t){var r=[];if(e instanceof Array)r=e.map((function(e){return n.parseDate(e,t)}));else if(e instanceof Date||"number"==typeof e)r=[n.parseDate(e,t)];else if("string"==typeof e)switch(n.config.mode){case"single":case"time":r=[n.parseDate(e,t)];break;case"multiple":r=e.split(n.config.conjunction).map((function(e){return n.parseDate(e,t)}));break;case"range":r=e.split(n.l10n.rangeSeparator).map((function(e){return n.parseDate(e,t)}))}else n.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));n.selectedDates=n.config.allowInvalidPreload?r:r.filter((function(e){return e instanceof Date&&Y(e,!1)})),"range"===n.config.mode&&n.selectedDates.sort((function(e,t){return e.getTime()-t.getTime()}))}function ne(e){return e.slice().map((function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?n.parseDate(e,void 0,!0):e&&"object"==typeof e&&e.from&&e.to?{from:n.parseDate(e.from,void 0),to:n.parseDate(e.to,void 0)}:e})).filter((function(e){return e}))}function re(){n._positionElement=n.config.positionElement||n._input}function ae(e,t){if(void 0!==n.config){var r=n.config[e];if(void 0!==r&&r.length>0)for(var a=0;r[a]&&a<r.length;a++)r[a](n.selectedDates,n.input.value,n,t);"onChange"===e&&(n.input.dispatchEvent(ie("change")),n.input.dispatchEvent(ie("input")))}}function ie(e){var t=document.createEvent("Event");return t.initEvent(e,!0,!0),t}function oe(e){for(var t=0;t<n.selectedDates.length;t++){var r=n.selectedDates[t];if(r instanceof Date&&0===(0,s.compareDates)(r,e))return""+t}return!1}function se(){n.config.noCalendar||n.isMobile||!n.monthNav||(n.yearElements.forEach((function(e,t){var r=new Date(n.currentYear,n.currentMonth,1);r.setMonth(n.currentMonth+t),n.config.showMonths>1||"static"===n.config.monthSelectorType?n.monthElements[t].textContent=(0,c.monthToStr)(r.getMonth(),n.config.shorthandCurrentMonth,n.l10n)+" ":n.monthsDropdownContainer.value=r.getMonth().toString(),e.value=r.getFullYear().toString()})),n._hidePrevMonthArrow=void 0!==n.config.minDate&&(n.currentYear===n.config.minDate.getFullYear()?n.currentMonth<=n.config.minDate.getMonth():n.currentYear<n.config.minDate.getFullYear()),n._hideNextMonthArrow=void 0!==n.config.maxDate&&(n.currentYear===n.config.maxDate.getFullYear()?n.currentMonth+1>n.config.maxDate.getMonth():n.currentYear>n.config.maxDate.getFullYear()))}function ce(e){var t=e||(n.config.altInput?n.config.altFormat:n.config.dateFormat);return n.selectedDates.map((function(e){return n.formatDate(e,t)})).filter((function(e,t,r){return"range"!==n.config.mode||n.config.enableTime||r.indexOf(e)===t})).join("range"!==n.config.mode?n.config.conjunction:n.l10n.rangeSeparator)}function le(e){void 0===e&&(e=!0),void 0!==n.mobileInput&&n.mobileFormatStr&&(n.mobileInput.value=void 0!==n.latestSelectedDateObj?n.formatDate(n.latestSelectedDateObj,n.mobileFormatStr):""),n.input.value=ce(n.config.dateFormat),void 0!==n.altInput&&(n.altInput.value=ce(n.config.altFormat)),!1!==e&&ae("onValueUpdate")}function ue(e){var t=(0,o.getEventTarget)(e),r=n.prevMonthNav.contains(t),a=n.nextMonthNav.contains(t);r||a?N(r?-1:1):n.yearElements.indexOf(t)>=0?t.select():t.classList.contains("arrowUp")?n.changeYear(n.currentYear+1):t.classList.contains("arrowDown")&&n.changeYear(n.currentYear-1)}return function(){n.element=n.input=e,n.isOpen=!1,function(){var a=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],o=l(l({},JSON.parse(JSON.stringify(e.dataset||{}))),t),s={};n.config.parseDate=o.parseDate,n.config.formatDate=o.formatDate,Object.defineProperty(n.config,"enable",{get:function(){return n.config._enable},set:function(e){n.config._enable=ne(e)}}),Object.defineProperty(n.config,"disable",{get:function(){return n.config._disable},set:function(e){n.config._disable=ne(e)}});var c="time"===o.mode;if(!o.dateFormat&&(o.enableTime||c)){var u=v.defaultConfig.dateFormat||r.defaults.dateFormat;s.dateFormat=o.noCalendar||c?"H:i"+(o.enableSeconds?":S":""):u+" H:i"+(o.enableSeconds?":S":"")}if(o.altInput&&(o.enableTime||c)&&!o.altFormat){var d=v.defaultConfig.altFormat||r.defaults.altFormat;s.altFormat=o.noCalendar||c?"h:i"+(o.enableSeconds?":S K":" K"):d+" h:i"+(o.enableSeconds?":S":"")+" K"}Object.defineProperty(n.config,"minDate",{get:function(){return n.config._minDate},set:K("min")}),Object.defineProperty(n.config,"maxDate",{get:function(){return n.config._maxDate},set:K("max")});var f=function(e){return function(t){n.config["min"===e?"_minTime":"_maxTime"]=n.parseDate(t,"H:i:S")}};Object.defineProperty(n.config,"minTime",{get:function(){return n.config._minTime},set:f("min")}),Object.defineProperty(n.config,"maxTime",{get:function(){return n.config._maxTime},set:f("max")}),"time"===o.mode&&(n.config.noCalendar=!0,n.config.enableTime=!0);Object.assign(n.config,s,o);for(var m=0;m<a.length;m++)n.config[a[m]]=!0===n.config[a[m]]||"true"===n.config[a[m]];r.HOOKS.filter((function(e){return void 0!==n.config[e]})).forEach((function(e){n.config[e]=(0,i.arrayify)(n.config[e]||[]).map(p)})),n.isMobile=!n.config.disableMobile&&!n.config.inline&&"single"===n.config.mode&&!n.config.disable.length&&!n.config.enable&&!n.config.weekNumbers&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);for(m=0;m<n.config.plugins.length;m++){var h=n.config.plugins[m](n)||{};for(var g in h)r.HOOKS.indexOf(g)>-1?n.config[g]=(0,i.arrayify)(h[g]).map(p).concat(n.config[g]):void 0===o[g]&&(n.config[g]=h[g])}o.altInputClass||(n.config.altInputClass=J().className+" "+n.config.altInputClass);ae("onParseConfig")}(),Z(),function(){if(n.input=J(),!n.input)return void n.config.errorHandler(new Error("Invalid input element specified"));n.input._type=n.input.type,n.input.type="text",n.input.classList.add("flatpickr-input"),n._input=n.input,n.config.altInput&&(n.altInput=(0,o.createElement)(n.input.nodeName,n.config.altInputClass),n._input=n.altInput,n.altInput.placeholder=n.input.placeholder,n.altInput.disabled=n.input.disabled,n.altInput.required=n.input.required,n.altInput.tabIndex=n.input.tabIndex,n.altInput.type="text",n.input.setAttribute("type","hidden"),!n.config.static&&n.input.parentNode&&n.input.parentNode.insertBefore(n.altInput,n.input.nextSibling));n.config.allowInput||n._input.setAttribute("readonly","readonly");re()}(),function(){n.selectedDates=[],n.now=n.parseDate(n.config.now)||new Date;var e=n.config.defaultDate||("INPUT"!==n.input.nodeName&&"TEXTAREA"!==n.input.nodeName||!n.input.placeholder||n.input.value!==n.input.placeholder?n.input.value:null);e&&te(e,n.config.dateFormat);n._initialDate=n.selectedDates.length>0?n.selectedDates[0]:n.config.minDate&&n.config.minDate.getTime()>n.now.getTime()?n.config.minDate:n.config.maxDate&&n.config.maxDate.getTime()<n.now.getTime()?n.config.maxDate:n.now,n.currentYear=n._initialDate.getFullYear(),n.currentMonth=n._initialDate.getMonth(),n.selectedDates.length>0&&(n.latestSelectedDateObj=n.selectedDates[0]);void 0!==n.config.minTime&&(n.config.minTime=n.parseDate(n.config.minTime,"H:i"));void 0!==n.config.maxTime&&(n.config.maxTime=n.parseDate(n.config.maxTime,"H:i"));n.minDateHasTime=!!n.config.minDate&&(n.config.minDate.getHours()>0||n.config.minDate.getMinutes()>0||n.config.minDate.getSeconds()>0),n.maxDateHasTime=!!n.config.maxDate&&(n.config.maxDate.getHours()>0||n.config.maxDate.getMinutes()>0||n.config.maxDate.getSeconds()>0)}(),n.utils={getDaysInMonth:function(e,t){return void 0===e&&(e=n.currentMonth),void 0===t&&(t=n.currentYear),1===e&&(t%4==0&&t%100!=0||t%400==0)?29:n.l10n.daysInMonth[e]}},n.isMobile||function(){var e=window.document.createDocumentFragment();if(n.calendarContainer=(0,o.createElement)("div","flatpickr-calendar"),n.calendarContainer.tabIndex=-1,!n.config.noCalendar){if(e.appendChild((n.monthNav=(0,o.createElement)("div","flatpickr-months"),n.yearElements=[],n.monthElements=[],n.prevMonthNav=(0,o.createElement)("span","flatpickr-prev-month"),n.prevMonthNav.innerHTML=n.config.prevArrow,n.nextMonthNav=(0,o.createElement)("span","flatpickr-next-month"),n.nextMonthNav.innerHTML=n.config.nextArrow,P(),Object.defineProperty(n,"_hidePrevMonthArrow",{get:function(){return n.__hidePrevMonthArrow},set:function(e){n.__hidePrevMonthArrow!==e&&((0,o.toggleClass)(n.prevMonthNav,"flatpickr-disabled",e),n.__hidePrevMonthArrow=e)}}),Object.defineProperty(n,"_hideNextMonthArrow",{get:function(){return n.__hideNextMonthArrow},set:function(e){n.__hideNextMonthArrow!==e&&((0,o.toggleClass)(n.nextMonthNav,"flatpickr-disabled",e),n.__hideNextMonthArrow=e)}}),n.currentYearElement=n.yearElements[0],se(),n.monthNav)),n.innerContainer=(0,o.createElement)("div","flatpickr-innerContainer"),n.config.weekNumbers){var t=function(){n.calendarContainer.classList.add("hasWeeks");var e=(0,o.createElement)("div","flatpickr-weekwrapper");e.appendChild((0,o.createElement)("span","flatpickr-weekday",n.l10n.weekAbbreviation));var t=(0,o.createElement)("div","flatpickr-weeks");return e.appendChild(t),{weekWrapper:e,weekNumbers:t}}(),r=t.weekWrapper,a=t.weekNumbers;n.innerContainer.appendChild(r),n.weekNumbers=a,n.weekWrapper=r}n.rContainer=(0,o.createElement)("div","flatpickr-rContainer"),n.rContainer.appendChild(I()),n.daysContainer||(n.daysContainer=(0,o.createElement)("div","flatpickr-days"),n.daysContainer.tabIndex=-1),$(),n.rContainer.appendChild(n.daysContainer),n.innerContainer.appendChild(n.rContainer),e.appendChild(n.innerContainer)}n.config.enableTime&&e.appendChild(function(){n.calendarContainer.classList.add("hasTime"),n.config.noCalendar&&n.calendarContainer.classList.add("noCalendar");var e=(0,s.getDefaultHours)(n.config);n.timeContainer=(0,o.createElement)("div","flatpickr-time"),n.timeContainer.tabIndex=-1;var t=(0,o.createElement)("span","flatpickr-time-separator",":"),r=(0,o.createNumberInput)("flatpickr-hour",{"aria-label":n.l10n.hourAriaLabel});n.hourElement=r.getElementsByTagName("input")[0];var a=(0,o.createNumberInput)("flatpickr-minute",{"aria-label":n.l10n.minuteAriaLabel});n.minuteElement=a.getElementsByTagName("input")[0],n.hourElement.tabIndex=n.minuteElement.tabIndex=-1,n.hourElement.value=(0,i.pad)(n.latestSelectedDateObj?n.latestSelectedDateObj.getHours():n.config.time_24hr?e.hours:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(e.hours)),n.minuteElement.value=(0,i.pad)(n.latestSelectedDateObj?n.latestSelectedDateObj.getMinutes():e.minutes),n.hourElement.setAttribute("step",n.config.hourIncrement.toString()),n.minuteElement.setAttribute("step",n.config.minuteIncrement.toString()),n.hourElement.setAttribute("min",n.config.time_24hr?"0":"1"),n.hourElement.setAttribute("max",n.config.time_24hr?"23":"12"),n.hourElement.setAttribute("maxlength","2"),n.minuteElement.setAttribute("min","0"),n.minuteElement.setAttribute("max","59"),n.minuteElement.setAttribute("maxlength","2"),n.timeContainer.appendChild(r),n.timeContainer.appendChild(t),n.timeContainer.appendChild(a),n.config.time_24hr&&n.timeContainer.classList.add("time24hr");if(n.config.enableSeconds){n.timeContainer.classList.add("hasSeconds");var c=(0,o.createNumberInput)("flatpickr-second");n.secondElement=c.getElementsByTagName("input")[0],n.secondElement.value=(0,i.pad)(n.latestSelectedDateObj?n.latestSelectedDateObj.getSeconds():e.seconds),n.secondElement.setAttribute("step",n.minuteElement.getAttribute("step")),n.secondElement.setAttribute("min","0"),n.secondElement.setAttribute("max","59"),n.secondElement.setAttribute("maxlength","2"),n.timeContainer.appendChild((0,o.createElement)("span","flatpickr-time-separator",":")),n.timeContainer.appendChild(c)}n.config.time_24hr||(n.amPM=(0,o.createElement)("span","flatpickr-am-pm",n.l10n.amPM[(0,i.int)((n.latestSelectedDateObj?n.hourElement.value:n.config.defaultHour)>11)]),n.amPM.title=n.l10n.toggleTitle,n.amPM.tabIndex=-1,n.timeContainer.appendChild(n.amPM));return n.timeContainer}());(0,o.toggleClass)(n.calendarContainer,"rangeMode","range"===n.config.mode),(0,o.toggleClass)(n.calendarContainer,"animate",!0===n.config.animate),(0,o.toggleClass)(n.calendarContainer,"multiMonth",n.config.showMonths>1),n.calendarContainer.appendChild(e);var c=void 0!==n.config.appendTo&&void 0!==n.config.appendTo.nodeType;if((n.config.inline||n.config.static)&&(n.calendarContainer.classList.add(n.config.inline?"inline":"static"),n.config.inline&&(!c&&n.element.parentNode?n.element.parentNode.insertBefore(n.calendarContainer,n._input.nextSibling):void 0!==n.config.appendTo&&n.config.appendTo.appendChild(n.calendarContainer)),n.config.static)){var l=(0,o.createElement)("div","flatpickr-wrapper");n.element.parentNode&&n.element.parentNode.insertBefore(l,n.element),l.appendChild(n.element),n.altInput&&l.appendChild(n.altInput),l.appendChild(n.calendarContainer)}n.config.static||n.config.inline||(void 0!==n.config.appendTo?n.config.appendTo:window.document.body).appendChild(n.calendarContainer)}(),function(){n.config.wrap&&["open","close","toggle","clear"].forEach((function(e){Array.prototype.forEach.call(n.element.querySelectorAll("[data-"+e+"]"),(function(t){return w(t,"click",n[e])}))}));if(n.isMobile)return void function(){var e=n.config.enableTime?n.config.noCalendar?"time":"datetime-local":"date";n.mobileInput=(0,o.createElement)("input",n.input.className+" flatpickr-mobile"),n.mobileInput.tabIndex=1,n.mobileInput.type=e,n.mobileInput.disabled=n.input.disabled,n.mobileInput.required=n.input.required,n.mobileInput.placeholder=n.input.placeholder,n.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",n.selectedDates.length>0&&(n.mobileInput.defaultValue=n.mobileInput.value=n.formatDate(n.selectedDates[0],n.mobileFormatStr));n.config.minDate&&(n.mobileInput.min=n.formatDate(n.config.minDate,"Y-m-d"));n.config.maxDate&&(n.mobileInput.max=n.formatDate(n.config.maxDate,"Y-m-d"));n.input.getAttribute("step")&&(n.mobileInput.step=String(n.input.getAttribute("step")));n.input.type="hidden",void 0!==n.altInput&&(n.altInput.type="hidden");try{n.input.parentNode&&n.input.parentNode.insertBefore(n.mobileInput,n.input.nextSibling)}catch(e){}w(n.mobileInput,"change",(function(e){n.setDate((0,o.getEventTarget)(e).value,!1,n.mobileFormatStr),ae("onChange"),ae("onClose")}))}();var e=(0,i.debounce)(z,50);n._debouncedChange=(0,i.debounce)(C,d),n.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&w(n.daysContainer,"mouseover",(function(e){"range"===n.config.mode&&W((0,o.getEventTarget)(e))}));w(n._input,"keydown",V),void 0!==n.calendarContainer&&w(n.calendarContainer,"keydown",V);n.config.inline||n.config.static||w(window,"resize",e);void 0!==window.ontouchstart?w(window.document,"touchstart",R):w(window.document,"mousedown",R);w(window.document,"focus",R,{capture:!0}),!0===n.config.clickOpens&&(w(n._input,"focus",n.open),w(n._input,"click",n.open));void 0!==n.daysContainer&&(w(n.monthNav,"click",ue),w(n.monthNav,["keyup","increment"],_),w(n.daysContainer,"click",X));if(void 0!==n.timeContainer&&void 0!==n.minuteElement&&void 0!==n.hourElement){var t=function(e){return(0,o.getEventTarget)(e).select()};w(n.timeContainer,["increment"],h),w(n.timeContainer,"blur",h,{capture:!0}),w(n.timeContainer,"click",x),w([n.hourElement,n.minuteElement],["focus","click"],t),void 0!==n.secondElement&&w(n.secondElement,"focus",(function(){return n.secondElement&&n.secondElement.select()})),void 0!==n.amPM&&w(n.amPM,"click",(function(e){h(e)}))}n.config.allowInput&&w(n._input,"blur",B)}(),(n.selectedDates.length||n.config.noCalendar)&&(n.config.enableTime&&y(n.config.noCalendar?n.latestSelectedDateObj:void 0),le(!1)),m();var a=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!n.isMobile&&a&&q(),ae("onReady")}(),n}function p(e,t){for(var n=Array.prototype.slice.call(e).filter((function(e){return e instanceof HTMLElement})),r=[],a=0;a<n.length;a++){var i=n[a];try{if(null!==i.getAttribute("data-fp-omit"))continue;void 0!==i._flatpickr&&(i._flatpickr.destroy(),i._flatpickr=void 0),i._flatpickr=f(i,t||{}),r.push(i._flatpickr)}catch(e){console.error(e)}}return 1===r.length?r[0]:r}"undefined"!=typeof HTMLElement&&"undefined"!=typeof HTMLCollection&&"undefined"!=typeof NodeList&&(HTMLCollection.prototype.flatpickr=NodeList.prototype.flatpickr=function(e){return p(this,e)},HTMLElement.prototype.flatpickr=function(e){return p([this],e)});var v=function(e,t){return"string"==typeof e?p(window.document.querySelectorAll(e),t):e instanceof Node?p([e],t):p(e,t)};v.defaultConfig={},v.l10ns={en:l({},a.default),default:l({},a.default)},v.localize=function(e){v.l10ns.default=l(l({},v.l10ns.default),e)},v.setDefaults=function(e){v.defaultConfig=l(l({},v.defaultConfig),e)},v.parseDate=(0,s.createDateParser)({}),v.formatDate=(0,s.createDateFormatter)({}),v.compareDates=s.compareDates,"undefined"!=typeof jQuery&&void 0!==jQuery.fn&&(jQuery.fn.flatpickr=function(e){return p(this,e)}),Date.prototype.fp_incr=function(e){return new Date(this.getFullYear(),this.getMonth(),this.getDate()+("string"==typeof e?parseInt(e,10):e))},"undefined"!=typeof window&&(window.flatpickr=v);const m=v},
vendor: 938 bytes, line 2
2"./node_modules/flatpickr/dist/esm/l10n/default.js":(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a,english:()=>r});var r={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var t=e%100;if(t>3&&t<21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",monthAriaLabel:"Month",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1};const a=r},
vendor: 1,964 bytes, line 2
2"./node_modules/flatpickr/dist/esm/types/options.js":(e,t,n)=>{"use strict";n.r(t),n.d(t,{HOOKS:()=>r,defaults:()=>a});var r=["onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition"],a={_disable:[],allowInput:!1,allowInvalidPreload:!1,altFormat:"F j, Y",altInput:!1,altInputClass:"form-control input",animate:"object"==typeof window&&-1===window.navigator.userAgent.indexOf("MSIE"),ariaDateFormat:"F j, Y",autoFillDefaultTime:!0,clickOpens:!0,closeOnSelect:!0,conjunction:", ",dateFormat:"Y-m-d",defaultHour:12,defaultMinute:0,defaultSeconds:0,disable:[],disableMobile:!1,enableSeconds:!1,enableTime:!1,errorHandler:function(e){return"undefined"!=typeof console&&console.warn(e)},getWeek:function(e){var t=new Date(e.getTime());t.setHours(0,0,0,0),t.setDate(t.getDate()+3-(t.getDay()+6)%7);var n=new Date(t.getFullYear(),0,4);return 1+Math.round(((t.getTime()-n.getTime())/864e5-3+(n.getDay()+6)%7)/7)},hourIncrement:1,ignoredFocusElements:[],inline:!1,locale:"default",minuteIncrement:5,mode:"single",monthSelectorType:"dropdown",nextArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1}},
vendor: 2,734 bytes, line 2
2"./node_modules/flatpickr/dist/esm/utils/dates.js":(e,t,n)=>{"use strict";n.r(t),n.d(t,{calculateSecondsSinceMidnight:()=>d,compareDates:()=>c,compareTimes:()=>l,createDateFormatter:()=>o,createDateParser:()=>s,duration:()=>p,getDefaultHours:()=>v,isBetween:()=>u,parseSeconds:()=>f});var r=n("./node_modules/flatpickr/dist/esm/utils/formatting.js"),a=n("./node_modules/flatpickr/dist/esm/types/options.js"),i=n("./node_modules/flatpickr/dist/esm/l10n/default.js"),o=function(e){var t=e.config,n=void 0===t?a.defaults:t,o=e.l10n,s=void 0===o?i.english:o,c=e.isMobile,l=void 0!==c&&c;return function(e,t,a){var i=a||s;return void 0===n.formatDate||l?t.split("").map((function(t,a,o){return r.formats[t]&&"\\"!==o[a-1]?r.formats[t](e,i,n):"\\"!==t?t:""})).join(""):n.formatDate(e,t,i)}},s=function(e){var t=e.config,n=void 0===t?a.defaults:t,o=e.l10n,s=void 0===o?i.english:o;return function(e,t,i,o){if(0===e||e){var c,l=o||s,u=e;if(e instanceof Date)c=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)c=new Date(e);else if("string"==typeof e){var d=t||(n||a.defaults).dateFormat,f=String(e).trim();if("today"===f)c=new Date,i=!0;else if(n&&n.parseDate)c=n.parseDate(e,d);else if(/Z$/.test(f)||/GMT$/.test(f))c=new Date(e);else{for(var p=void 0,v=[],m=0,h=0,g="";m<d.length;m++){var y=d[m],b="\\"===y,_="\\"===d[m-1]||b;if(r.tokenRegex[y]&&!_){g+=r.tokenRegex[y];var w=new RegExp(g).exec(e);w&&(p=!0)&&v["Y"!==y?"push":"unshift"]({fn:r.revFormat[y],val:w[++h]})}else b||(g+=".")}c=n&&n.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0),v.forEach((function(e){var t=e.fn,n=e.val;return c=t(c,n,l)||c})),c=p?c:void 0}}if(c instanceof Date&&!isNaN(c.getTime()))return!0===i&&c.setHours(0,0,0,0),c;n.errorHandler(new Error("Invalid date provided: "+u))}}};function c(e,t,n){return void 0===n&&(n=!0),!1!==n?new Date(e.getTime()).setHours(0,0,0,0)-new Date(t.getTime()).setHours(0,0,0,0):e.getTime()-t.getTime()}function l(e,t){return 3600*(e.getHours()-t.getHours())+60*(e.getMinutes()-t.getMinutes())+e.getSeconds()-t.getSeconds()}var u=function(e,t,n){return e>Math.min(t,n)&&e<Math.max(t,n)},d=function(e,t,n){return 3600*e+60*t+n},f=function(e){var t=Math.floor(e/3600),n=(e-3600*t)/60;return[t,n,e-3600*t-60*n]},p={DAY:864e5};function v(e){var t=e.defaultHour,n=e.defaultMinute,r=e.defaultSeconds;if(void 0!==e.minDate){var a=e.minDate.getHours(),i=e.minDate.getMinutes(),o=e.minDate.getSeconds();t<a&&(t=a),t===a&&n<i&&(n=i),t===a&&n===i&&r<o&&(r=e.minDate.getSeconds())}if(void 0!==e.maxDate){var s=e.maxDate.getHours(),c=e.maxDate.getMinutes();(t=Math.min(t,s))===s&&(n=Math.min(c,n)),t===s&&n===c&&(r=e.maxDate.getSeconds())}return{hours:t,minutes:n,seconds:r}}},
vendor: 977 bytes, line 2
2"./node_modules/flatpickr/dist/esm/utils/dom.js":(e,t,n)=>{"use strict";function r(e,t,n){if(!0===n)return e.classList.add(t);e.classList.remove(t)}function a(e,t,n){var r=window.document.createElement(e);return t=t||"",n=n||"",r.className=t,void 0!==n&&(r.textContent=n),r}function i(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function o(e,t){return t(e)?e:e.parentNode?o(e.parentNode,t):void 0}function s(e,t){var n=a("div","numInputWrapper"),r=a("input","numInput "+e),i=a("span","arrowUp"),o=a("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?r.type="number":(r.type="text",r.pattern="\\d*"),void 0!==t)for(var s in t)r.setAttribute(s,t[s]);return n.appendChild(r),n.appendChild(i),n.appendChild(o),n}function c(e){try{return"function"==typeof e.composedPath?e.composedPath()[0]:e.target}catch(t){return e.target}}n.r(t),n.d(t,{clearNode:()=>i,createElement:()=>a,createNumberInput:()=>s,findParent:()=>o,getEventTarget:()=>c,toggleClass:()=>r})},
vendor: 2,836 bytes, line 2
2"./node_modules/flatpickr/dist/esm/utils/formatting.js":(e,t,n)=>{"use strict";n.r(t),n.d(t,{formats:()=>c,monthToStr:()=>i,revFormat:()=>o,tokenRegex:()=>s});var r=n("./node_modules/flatpickr/dist/esm/utils/index.js"),a=function(){},i=function(e,t,n){return n.months[t?"shorthand":"longhand"][e]},o={D:a,F:function(e,t,n){e.setMonth(n.months.longhand.indexOf(t))},G:function(e,t){e.setHours((e.getHours()>=12?12:0)+parseFloat(t))},H:function(e,t){e.setHours(parseFloat(t))},J:function(e,t){e.setDate(parseFloat(t))},K:function(e,t,n){e.setHours(e.getHours()%12+12*(0,r.int)(new RegExp(n.amPM[1],"i").test(t)))},M:function(e,t,n){e.setMonth(n.months.shorthand.indexOf(t))},S:function(e,t){e.setSeconds(parseFloat(t))},U:function(e,t){return new Date(1e3*parseFloat(t))},W:function(e,t,n){var r=parseInt(t),a=new Date(e.getFullYear(),0,2+7*(r-1),0,0,0,0);return a.setDate(a.getDate()-a.getDay()+n.firstDayOfWeek),a},Y:function(e,t){e.setFullYear(parseFloat(t))},Z:function(e,t){return new Date(t)},d:function(e,t){e.setDate(parseFloat(t))},h:function(e,t){e.setHours((e.getHours()>=12?12:0)+parseFloat(t))},i:function(e,t){e.setMinutes(parseFloat(t))},j:function(e,t){e.setDate(parseFloat(t))},l:a,m:function(e,t){e.setMonth(parseFloat(t)-1)},n:function(e,t){e.setMonth(parseFloat(t)-1)},s:function(e,t){e.setSeconds(parseFloat(t))},u:function(e,t){return new Date(parseFloat(t))},w:a,y:function(e,t){e.setFullYear(2e3+parseFloat(t))}},s={D:"",F:"",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},c={Z:function(e){return e.toISOString()},D:function(e,t,n){return t.weekdays.shorthand[c.w(e,t,n)]},F:function(e,t,n){return i(c.n(e,t,n)-1,!1,t)},G:function(e,t,n){return(0,r.pad)(c.h(e,t,n))},H:function(e){return(0,r.pad)(e.getHours())},J:function(e,t){return void 0!==t.ordinal?e.getDate()+t.ordinal(e.getDate()):e.getDate()},K:function(e,t){return t.amPM[(0,r.int)(e.getHours()>11)]},M:function(e,t){return i(e.getMonth(),!0,t)},S:function(e){return(0,r.pad)(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,t,n){return n.getWeek(e)},Y:function(e){return(0,r.pad)(e.getFullYear(),4)},d:function(e){return(0,r.pad)(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return(0,r.pad)(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,t){return t.weekdays.longhand[e.getDay()]},m:function(e){return(0,r.pad)(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}}},
vendor: 422 bytes, line 2
2"./node_modules/flatpickr/dist/esm/utils/index.js":(e,t,n)=>{"use strict";n.r(t),n.d(t,{arrayify:()=>o,debounce:()=>i,int:()=>a,pad:()=>r});var r=function(e,t){return void 0===t&&(t=2),("000"+e).slice(-1*t)},a=function(e){return!0===e?1:0};function i(e,t){var n;return function(){var r=this,a=arguments;clearTimeout(n),n=setTimeout((function(){return e.apply(r,a)}),t)}}var o=function(e){return e instanceof Array?e:[e]}},
vendor: 388 bytes, line 2
2"./node_modules/flatpickr/dist/esm/utils/polyfills.js":()=>{"use strict";"function"!=typeof Object.assign&&(Object.assign=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];if(!e)throw TypeError("Cannot convert undefined or null to object");for(var r=function(t){t&&Object.keys(t).forEach((function(n){return e[n]=t[n]}))},a=0,i=t;a<i.length;a++){r(i[a])}return e})},
vendor: 846 bytes, line 2
2"./node_modules/flatpickr/dist/l10n/fr.js":function(e,t){!function(e){"use strict";var t="undefined"!=typeof window&&void 0!==window.flatpickr?window.flatpickr:{l10ns:{}},n={firstDayOfWeek:1,weekdays:{shorthand:["dim","lun","mar","mer","jeu","ven","sam"],longhand:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"]},months:{shorthand:["janv","févr","mars","avr","mai","juin","juil","août","sept","oct","nov","déc"],longhand:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"]},ordinal:function(e){return e>1?"":"er"},rangeSeparator:" au ",weekAbbreviation:"Sem",scrollTitle:"Défiler pour augmenter la valeur",toggleTitle:"Cliquer pour basculer",time_24hr:!0};t.l10ns.fr=n;var r=t.l10ns;e.French=n,e.default=r,Object.defineProperty(e,"__esModule",{value:!0})}(t)},
vendor: 3,184 bytes, line 2
2"./node_modules/vue-flatpickr-component/dist/vue-flatpickr.js":function(e,t,n){var r;r=e=>(()=>{"use strict";var t={311:t=>{t.exports=e}},n={};function r(e){var a=n[e];if(void 0!==a)return a.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var a={};return(()=>{r.d(a,{default:()=>d});var e=r(311),t=r.n(e),n=["onChange","onClose","onDestroy","onMonthChange","onOpen","onYearChange"];function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var o=function(e){return e&&e.length?e:null},s=function(e){return i({},e)},c=n.concat(["onValueUpdate","onDayCreate","onParseConfig","onReady","onPreCalendarPosition","onKeyDown"]),l=["locale","showMonths"];const u={name:"flat-pickr",render:function(e){return e("input",{attrs:{type:"text","data-input":!0},props:{disabled:this.disabled},on:{input:this.onInput}})},props:{value:{default:null,required:!0,validator:function(e){return null===e||e instanceof Date||"string"==typeof e||e instanceof String||e instanceof Array||"number"==typeof e}},config:{type:Object,default:function(){return{wrap:!1,defaultDate:null}}},events:{type:Array,default:function(){return n}},disabled:{type:Boolean,default:!1}},data:function(){return{fp:null}},mounted:function(){var e=this;if(!this.fp){var n=s(this.config);this.events.forEach((function(r){var a,i=t().defaultConfig[r]||[];n[r]=(a=n[r]||[],a instanceof Array?a:[a]).concat(i,(function(){for(var t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];var i;e.$emit.apply(e,[(i=r,i.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase())].concat(n))}))})),n.defaultDate=this.value||n.defaultDate,this.fp=new(t())(this.getElem(),n),this.fpInput().addEventListener("blur",this.onBlur),this.$on("on-close",this.onClose),this.$watch("disabled",this.watchDisabled,{immediate:!0})}},methods:{getElem:function(){return this.config.wrap?this.$el.parentNode:this.$el},onInput:function(e){var t=this,n=e.target;this.$nextTick((function(){t.$emit("input",o(n.value))}))},fpInput:function(){return this.fp.altInput||this.fp.input},onBlur:function(e){this.$emit("blur",o(e.target.value))},onClose:function(e,t){this.$emit("input",o(t))},watchDisabled:function(e){e?this.fpInput().setAttribute("disabled",e):this.fpInput().removeAttribute("disabled")}},watch:{config:{deep:!0,handler:function(e){var t=this,n=s(e);c.forEach((function(e){delete n[e]})),this.fp.set(n),l.forEach((function(e){void 0!==n[e]&&t.fp.set(e,n[e])}))}},value:function(e){e!==o(this.$el.value)&&this.fp&&this.fp.setDate(e,!0)}},beforeDestroy:function(){this.fp&&(this.fpInput().removeEventListener("blur",this.onBlur),this.fp.destroy(),this.fp=null)},install:function(e,t){var n="flat-pickr";"string"==typeof t&&(n=t),e.component(n,u)}},d=u})(),a=a.default})(),e.exports=r(n("./node_modules/flatpickr/dist/esm/index.js"))},
vendor: 137,669 bytes, line 2
2"./node_modules/vue/dist/vue.js":function(e,t,n){e.exports=function(){"use strict";var e=Object.freeze({}),t=Array.isArray;function r(e){return null==e}function a(e){return null!=e}function i(e){return!0===e}function o(e){return!1===e}function s(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function c(e){return"function"==typeof e}function l(e){return null!==e&&"object"==typeof e}var u=Object.prototype.toString;function d(e){return u.call(e).slice(8,-1)}function f(e){return"[object Object]"===u.call(e)}function p(e){return"[object RegExp]"===u.call(e)}function v(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function m(e){return a(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function h(e){return null==e?"":Array.isArray(e)||f(e)&&e.toString===u?JSON.stringify(e,g,2):String(e)}function g(e,t){return t&&t.__v_isRef?t.value:t}function y(e){var t=parseFloat(e);return isNaN(t)?e:t}function b(e,t){for(var n=Object.create(null),r=e.split(","),a=0;a<r.length;a++)n[r[a]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}var _=b("slot,component",!0),w=b("key,ref,slot,slot-scope,is");function C(e,t){var n=e.length;if(n){if(t===e[n-1])return void(e.length=n-1);var r=e.indexOf(t);if(r>-1)return e.splice(r,1)}}var k=Object.prototype.hasOwnProperty;function x(e,t){return k.call(e,t)}function D(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var M=/-(\w)/g,O=D((function(e){return e.replace(M,(function(e,t){return t?t.toUpperCase():""}))})),S=D((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),j=/\B([A-Z])/g,T=D((function(e){return e.replace(j,"-$1").toLowerCase()}));function $(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function E(e,t){return e.bind(t)}var A=Function.prototype.bind?E:$;function P(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function I(e,t){for(var n in t)e[n]=t[n];return e}function F(e){for(var t={},n=0;n<e.length;n++)e[n]&&I(t,e[n]);return t}function N(e,t,n){}var L=function(e,t,n){return!1},R=function(e){return e};function H(e){return e.reduce((function(e,t){return e.concat(t.staticKeys||[])}),[]).join(",")}function Y(e,t){if(e===t)return!0;var n=l(e),r=l(t);if(!n||!r)return!n&&!r&&String(e)===String(t);try{var a=Array.isArray(e),i=Array.isArray(t);if(a&&i)return e.length===t.length&&e.every((function(e,n){return Y(e,t[n])}));if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(a||i)return!1;var o=Object.keys(e),s=Object.keys(t);return o.length===s.length&&o.every((function(n){return Y(e[n],t[n])}))}catch(e){return!1}}function U(e,t){for(var n=0;n<e.length;n++)if(Y(e[n],t))return n;return-1}function B(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments))}}function V(e,t){return e===t?0===e&&1/e!=1/t:e==e||t==t}var W="data-server-rendered",z=["component","directive","filter"],K=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch","renderTracked","renderTriggered"],J={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!0,devtools:!0,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:L,isReservedAttr:L,isUnknownElement:L,getTagNamespace:N,parsePlatformTagName:R,mustUseProp:L,async:!0,_lifecycleHooks:K},Z=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function q(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function Q(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var G=new RegExp("[^".concat(Z.source,".$_\\d]"));function X(e){if(!G.test(e)){var t=e.split(".");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}var ee="__proto__"in{},te="undefined"!=typeof window,ne=te&&window.navigator.userAgent.toLowerCase(),re=ne&&/msie|trident/.test(ne),ae=ne&&ne.indexOf("msie 9.0")>0,ie=ne&&ne.indexOf("edge/")>0;ne&&ne.indexOf("android");var oe=ne&&/iphone|ipad|ipod|ios/.test(ne);ne&&/chrome\/\d+/.test(ne),ne&&/phantomjs/.test(ne);var se,ce=ne&&ne.match(/firefox\/(\d+)/),le={}.watch,ue=!1;if(te)try{var de={};Object.defineProperty(de,"passive",{get:function(){ue=!0}}),window.addEventListener("test-passive",null,de)}catch(e){}var fe=function(){return void 0===se&&(se=!te&&void 0!==n.g&&n.g.process&&"server"===n.g.process.env.VUE_ENV),se},pe=te&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ve(e){return"function"==typeof e&&/native code/.test(e.toString())}var me,he="undefined"!=typeof Symbol&&ve(Symbol)&&"undefined"!=typeof Reflect&&ve(Reflect.ownKeys);me="undefined"!=typeof Set&&ve(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ge=null;function ye(){return ge&&{proxy:ge}}function be(e){void 0===e&&(e=null),e||ge&&ge._scope.off(),ge=e,e&&e._scope.on()}var _e,we=function(){function e(e,t,n,r,a,i,o,s){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=a,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=o,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(e.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),e}(),Ce=function(e){void 0===e&&(e="");var t=new we;return t.text=e,t.isComment=!0,t};function ke(e){return new we(void 0,void 0,void 0,String(e))}function xe(e){var t=new we(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.asyncMeta=e.asyncMeta,t.isCloned=!0,t}var De=b("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,require"),Me=function(e,t){ii('Property or method "'.concat(t,'" is not defined on the instance but ')+"referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.",e)},Oe=function(e,t){ii('Property "'.concat(t,'" must be accessed with "$data.').concat(t,'" because ')+'properties starting with "$" or "_" are not proxied in the Vue instance to prevent conflicts with Vue internals. See: https://v2.vuejs.org/v2/api/#data',e)},Se="undefined"!=typeof Proxy&&ve(Proxy);if(Se){var je=b("stop,prevent,self,ctrl,shift,alt,meta,exact");J.keyCodes=new Proxy(J.keyCodes,{set:function(e,t,n){return je(t)?(ii("Avoid overwriting built-in modifier in config.keyCodes: .".concat(t)),!1):(e[t]=n,!0)}})}var Te={has:function(e,t){var n=t in e,r=De(t)||"string"==typeof t&&"_"===t.charAt(0)&&!(t in e.$data);return n||r||(t in e.$data?Oe(e,t):Me(e,t)),n||!r}},$e={get:function(e,t){return"string"!=typeof t||t in e||(t in e.$data?Oe(e,t):Me(e,t)),e[t]}};_e=function(e){if(Se){var t=e.$options,n=t.render&&t.render._withStripped?$e:Te;e._renderProxy=new Proxy(e,n)}else e._renderProxy=e};var Ee=function(){return Ee=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e},Ee.apply(this,arguments)};"function"==typeof SuppressedError&&SuppressedError;var Ae=0,Pe=[],Ie=function(){for(var e=0;e<Pe.length;e++){var t=Pe[e];t.subs=t.subs.filter((function(e){return e})),t._pending=!1}Pe.length=0},Fe=function(){function e(){this._pending=!1,this.id=Ae++,this.subs=[]}return e.prototype.addSub=function(e){this.subs.push(e)},e.prototype.removeSub=function(e){this.subs[this.subs.indexOf(e)]=null,this._pending||(this._pending=!0,Pe.push(this))},e.prototype.depend=function(t){e.target&&(e.target.addDep(this),t&&e.target.onTrack&&e.target.onTrack(Ee({effect:e.target},t)))},e.prototype.notify=function(e){var t=this.subs.filter((function(e){return e}));J.async||t.sort((function(e,t){return e.id-t.id}));for(var n=0,r=t.length;n<r;n++){var a=t[n];e&&a.onTrigger&&a.onTrigger(Ee({effect:t[n]},e)),a.update()}},e}();Fe.target=null;var Ne=[];function Le(e){Ne.push(e),Fe.target=e}function Re(){Ne.pop(),Fe.target=Ne[Ne.length-1]}var He=Array.prototype,Ye=Object.create(He);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(e){var t=He[e];Q(Ye,e,(function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var a,i=t.apply(this,n),o=this.__ob__;switch(e){case"push":case"unshift":a=n;break;case"splice":a=n.slice(2)}return a&&o.observeArray(a),o.dep.notify({type:"array mutation",target:this,key:e}),i}))}));var Ue=Object.getOwnPropertyNames(Ye),Be={},Ve=!0;function We(e){Ve=e}var ze={notify:N,depend:N,addSub:N,removeSub:N},Ke=function(){function e(e,n,r){if(void 0===n&&(n=!1),void 0===r&&(r=!1),this.value=e,this.shallow=n,this.mock=r,this.dep=r?ze:new Fe,this.vmCount=0,Q(e,"__ob__",this),t(e)){if(!r)if(ee)e.__proto__=Ye;else for(var a=0,i=Ue.length;a<i;a++)Q(e,s=Ue[a],Ye[s]);n||this.observeArray(e)}else{var o=Object.keys(e);for(a=0;a<o.length;a++){var s;Ze(e,s=o[a],Be,void 0,n,r)}}}return e.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)Je(e[t],!1,this.mock)},e}();function Je(e,n,r){return e&&x(e,"__ob__")&&e.__ob__ instanceof Ke?e.__ob__:!Ve||!r&&fe()||!t(e)&&!f(e)||!Object.isExtensible(e)||e.__v_skip||ut(e)||e instanceof we?void 0:new Ke(e,n,r)}function Ze(e,n,r,a,i,o,s){void 0===s&&(s=!1);var c=new Fe,l=Object.getOwnPropertyDescriptor(e,n);if(!l||!1!==l.configurable){var u=l&&l.get,d=l&&l.set;u&&!d||r!==Be&&2!==arguments.length||(r=e[n]);var f=i?r&&r.__ob__:Je(r,!1,o);return Object.defineProperty(e,n,{enumerable:!0,configurable:!0,get:function(){var a=u?u.call(e):r;return Fe.target&&(c.depend({target:e,type:"get",key:n}),f&&(f.dep.depend(),t(a)&&Ge(a))),ut(a)&&!i?a.value:a},set:function(t){var s=u?u.call(e):r;if(V(s,t)){if(a&&a(),d)d.call(e,t);else{if(u)return;if(!i&&ut(s)&&!ut(t))return void(s.value=t);r=t}f=i?t&&t.__ob__:Je(t,!1,o),c.notify({type:"set",target:e,key:n,newValue:t,oldValue:s})}}}),c}}function qe(e,n,a){if((r(e)||s(e))&&ii("Cannot set reactive property on undefined, null, or primitive value: ".concat(e)),!at(e)){var i=e.__ob__;return t(e)&&v(n)?(e.length=Math.max(e.length,n),e.splice(n,1,a),i&&!i.shallow&&i.mock&&Je(a,!1,!0),a):n in e&&!(n in Object.prototype)?(e[n]=a,a):e._isVue||i&&i.vmCount?(ii("Avoid adding reactive properties to a Vue instance or its root $data at runtime - declare it upfront in the data option."),a):i?(Ze(i.value,n,a,void 0,i.shallow,i.mock),i.dep.notify({type:"add",target:e,key:n,newValue:a,oldValue:void 0}),a):(e[n]=a,a)}ii('Set operation on key "'.concat(n,'" failed: target is readonly.'))}function Qe(e,n){if((r(e)||s(e))&&ii("Cannot delete reactive property on undefined, null, or primitive value: ".concat(e)),t(e)&&v(n))e.splice(n,1);else{var a=e.__ob__;e._isVue||a&&a.vmCount?ii("Avoid deleting properties on a Vue instance or its root $data - just set it to null."):at(e)?ii('Delete operation on key "'.concat(n,'" failed: target is readonly.')):x(e,n)&&(delete e[n],a&&a.dep.notify({type:"delete",target:e,key:n}))}}function Ge(e){for(var n=void 0,r=0,a=e.length;r<a;r++)(n=e[r])&&n.__ob__&&n.__ob__.dep.depend(),t(n)&&Ge(n)}function Xe(e){return tt(e,!1),e}function et(e){return tt(e,!0),Q(e,"__v_isShallow",!0),e}function tt(e,n){if(!at(e)){t(e)&&ii("Avoid using Array as root value for ".concat(n?"shallowReactive()":"reactive()"," as it cannot be tracked in watch() or watchEffect(). Use ").concat(n?"shallowRef()":"ref()"," instead. This is a Vue-2-only limitation."));var r=e&&e.__ob__;r&&r.shallow!==n&&ii("Target is already a ".concat(r.shallow?"":"non-","shallow reactive object, and cannot be converted to ").concat(n?"":"non-","shallow.")),Je(e,n,fe())||((null==e||s(e))&&ii("value cannot be made reactive: ".concat(String(e))),ct(e)&&ii("Vue 2 does not support reactive collection types such as Map or Set."))}}function nt(e){return at(e)?nt(e.__v_raw):!(!e||!e.__ob__)}function rt(e){return!(!e||!e.__v_isShallow)}function at(e){return!(!e||!e.__v_isReadonly)}function it(e){return nt(e)||at(e)}function ot(e){var t=e&&e.__v_raw;return t?ot(t):e}function st(e){return Object.isExtensible(e)&&Q(e,"__v_skip",!0),e}function ct(e){var t=d(e);return"Map"===t||"WeakMap"===t||"Set"===t||"WeakSet"===t}var lt="__v_isRef";function ut(e){return!(!e||!0!==e.__v_isRef)}function dt(e){return pt(e,!1)}function ft(e){return pt(e,!0)}function pt(e,t){if(ut(e))return e;var n={};return Q(n,lt,!0),Q(n,"__v_isShallow",t),Q(n,"dep",Ze(n,"value",e,null,t,fe())),n}function vt(e){e.dep||ii("received object is not a triggerable ref."),e.dep&&e.dep.notify({type:"set",target:e,key:"value"})}function mt(e){return ut(e)?e.value:e}function ht(e){if(nt(e))return e;for(var t={},n=Object.keys(e),r=0;r<n.length;r++)gt(t,e,n[r]);return t}function gt(e,t,n){Object.defineProperty(e,n,{enumerable:!0,configurable:!0,get:function(){var e=t[n];if(ut(e))return e.value;var r=e&&e.__ob__;return r&&r.dep.depend(),e},set:function(e){var r=t[n];ut(r)&&!ut(e)?r.value=e:t[n]=e}})}function yt(e){var t=new Fe,n=e((function(){t.depend({target:i,type:"get",key:"value"})}),(function(){t.notify({target:i,type:"set",key:"value"})})),r=n.get,a=n.set,i={get value(){return r()},set value(e){a(e)}};return Q(i,lt,!0),i}function bt(e){nt(e)||ii("toRefs() expects a reactive object but received a plain one.");var n=t(e)?new Array(e.length):{};for(var r in e)n[r]=_t(e,r);return n}function _t(e,t,n){var r=e[t];if(ut(r))return r;var a={get value(){var r=e[t];return void 0===r?n:r},set value(n){e[t]=n}};return Q(a,lt,!0),a}var wt,Ct,kt="__v_rawToReadonly",xt="__v_rawToShallowReadonly";function Dt(e){return Mt(e,!1)}function Mt(e,n){if(!f(e))return t(e)?ii("Vue 2 does not support readonly arrays."):ct(e)?ii("Vue 2 does not support readonly collection types such as Map or Set."):ii("value cannot be made readonly: ".concat(typeof e)),e;if(Object.isExtensible(e)||ii("Vue 2 does not support creating readonly proxy for non-extensible object."),at(e))return e;var r=n?xt:kt,a=e[r];if(a)return a;var i=Object.create(Object.getPrototypeOf(e));Q(e,r,i),Q(i,"__v_isReadonly",!0),Q(i,"__v_raw",e),ut(e)&&Q(i,lt,!0),(n||rt(e))&&Q(i,"__v_isShallow",!0);for(var o=Object.keys(e),s=0;s<o.length;s++)Ot(i,e,o[s],n);return i}function Ot(e,t,n,r){Object.defineProperty(e,n,{enumerable:!0,configurable:!0,get:function(){var e=t[n];return r||!f(e)?e:Dt(e)},set:function(){ii('Set operation on key "'.concat(n,'" failed: target is readonly.'))}})}function St(e){return Mt(e,!0)}function jt(e,t){var n,r,a=c(e);a?(n=e,r=function(){ii("Write operation failed: computed value is readonly")}):(n=e.get,r=e.set);var i=fe()?null:new wa(ge,n,N,{lazy:!0});i&&t&&(i.onTrack=t.onTrack,i.onTrigger=t.onTrigger);var o={effect:i,get value(){return i?(i.dirty&&i.evaluate(),Fe.target&&(Fe.target.onTrack&&Fe.target.onTrack({effect:Fe.target,target:o,type:"get",key:"value"}),i.depend()),i.value):n()},set value(e){r(e)}};return Q(o,lt,!0),Q(o,"__v_isReadonly",a),o}var Tt=te&&window.performance;Tt&&Tt.mark&&Tt.measure&&Tt.clearMarks&&Tt.clearMeasures&&(wt=function(e){return Tt.mark(e)},Ct=function(e,t,n){Tt.measure(e,t,n),Tt.clearMarks(t),Tt.clearMarks(n)});var $t=D((function(e){var t="&"===e.charAt(0),n="~"===(e=t?e.slice(1):e).charAt(0),r="!"===(e=n?e.slice(1):e).charAt(0);return{name:e=r?e.slice(1):e,once:n,capture:r,passive:t}}));function Et(e,n){function r(){var e=r.fns;if(!t(e))return Fr(e,null,arguments,n,"v-on handler");for(var a=e.slice(),i=0;i<a.length;i++)Fr(a[i],null,arguments,n,"v-on handler")}return r.fns=e,r}function At(e,t,n,a,o,s){var c,l,u,d;for(c in e)l=e[c],u=t[c],d=$t(c),r(l)?ii('Invalid handler for event "'.concat(d.name,'": got ')+String(l),s):r(u)?(r(l.fns)&&(l=e[c]=Et(l,s)),i(d.once)&&(l=e[c]=o(d.name,l,d.capture)),n(d.name,l,d.capture,d.passive,d.params)):l!==u&&(u.fns=l,e[c]=u);for(c in t)r(e[c])&&a((d=$t(c)).name,t[c],d.capture)}function Pt(e,t,n){var o;e instanceof we&&(e=e.data.hook||(e.data.hook={}));var s=e[t];function c(){n.apply(this,arguments),C(o.fns,c)}r(s)?o=Et([c]):a(s.fns)&&i(s.merged)?(o=s).fns.push(c):o=Et([s,c]),o.merged=!0,e[t]=o}function It(e,t,n){var i=t.options.props;if(!r(i)){var o={},s=e.attrs,c=e.props;if(a(s)||a(c))for(var l in i){var u=T(l),d=l.toLowerCase();l!==d&&s&&x(s,d)&&oi('Prop "'.concat(d,'" is passed to component ')+"".concat(ai(n||t),", but the declared prop name is")+' "'.concat(l,'". ')+"Note that HTML attributes are case-insensitive and camelCased props need to use their kebab-case equivalents when using in-DOM "+'templates. You should probably use "'.concat(u,'" instead of "').concat(l,'".')),Ft(o,c,l,u,!0)||Ft(o,s,l,u,!1)}return o}}function Ft(e,t,n,r,i){if(a(t)){if(x(t,n))return e[n]=t[n],i||delete t[n],!0;if(x(t,r))return e[n]=t[r],i||delete t[r],!0}return!1}function Nt(e){for(var n=0;n<e.length;n++)if(t(e[n]))return Array.prototype.concat.apply([],e);return e}function Lt(e){return s(e)?[ke(e)]:t(e)?Ht(e):void 0}function Rt(e){return a(e)&&a(e.text)&&o(e.isComment)}function Ht(e,n){var o,c,l,u,d=[];for(o=0;o<e.length;o++)r(c=e[o])||"boolean"==typeof c||(u=d[l=d.length-1],t(c)?c.length>0&&(Rt((c=Ht(c,"".concat(n||"","_").concat(o)))[0])&&Rt(u)&&(d[l]=ke(u.text+c[0].text),c.shift()),d.push.apply(d,c)):s(c)?Rt(u)?d[l]=ke(u.text+c):""!==c&&d.push(ke(c)):Rt(c)&&Rt(u)?d[l]=ke(u.text+c.text):(i(e._isVList)&&a(c.tag)&&r(c.key)&&a(n)&&(c.key="__vlist".concat(n,"_").concat(o,"__")),d.push(c)));return d}var Yt=1,Ut=2;function Bt(e,n,r,a,o,c){return(t(r)||s(r))&&(o=a,a=r,r=void 0),i(c)&&(o=Ut),Vt(e,n,r,a,o)}function Vt(e,n,r,i,o){if(a(r)&&a(r.__ob__))return ii("Avoid using observed data object as vnode data: ".concat(JSON.stringify(r),"\n")+"Always create fresh vnode data objects in each render!",e),Ce();if(a(r)&&a(r.is)&&(n=r.is),!n)return Ce();var l,u;if(a(r)&&a(r.key)&&!s(r.key)&&ii("Avoid using non-primitive value as key, use string/number value instead.",e),t(i)&&c(i[0])&&((r=r||{}).scopedSlots={default:i[0]},i.length=0),o===Ut?i=Lt(i):o===Yt&&(i=Nt(i)),"string"==typeof n){var d=void 0;u=e.$vnode&&e.$vnode.ns||J.getTagNamespace(n),J.isReservedTag(n)?(a(r)&&a(r.nativeOn)&&"component"!==r.tag&&ii("The .native modifier for v-on is only valid on components but it was used on <".concat(n,">."),e),l=new we(J.parsePlatformTagName(n),r,i,void 0,void 0,e)):l=r&&r.pre||!a(d=Di(e.$options,"components",n))?new we(n,r,i,void 0,void 0,e):Ga(d,r,e,i,n)}else l=Ga(n,r,e,i);return t(l)?l:a(l)?(a(u)&&Wt(l,u),a(r)&&zt(r),l):Ce()}function Wt(e,t,n){if(e.ns=t,"foreignObject"===e.tag&&(t=void 0,n=!0),a(e.children))for(var o=0,s=e.children.length;o<s;o++){var c=e.children[o];a(c.tag)&&(r(c.ns)||i(n)&&"svg"!==c.tag)&&Wt(c,t,n)}}function zt(e){l(e.style)&&ya(e.style),l(e.class)&&ya(e.class)}function Kt(e,n){var r,i,o,s,c=null;if(t(e)||"string"==typeof e)for(c=new Array(e.length),r=0,i=e.length;r<i;r++)c[r]=n(e[r],r);else if("number"==typeof e)for(c=new Array(e),r=0;r<e;r++)c[r]=n(r+1,r);else if(l(e))if(he&&e[Symbol.iterator]){c=[];for(var u=e[Symbol.iterator](),d=u.next();!d.done;)c.push(n(d.value,c.length)),d=u.next()}else for(o=Object.keys(e),c=new Array(o.length),r=0,i=o.length;r<i;r++)s=o[r],c[r]=n(e[s],s,r);return a(c)||(c=[]),c._isVList=!0,c}function Jt(e,t,n,r){var a,i=this.$scopedSlots[e];i?(n=n||{},r&&(l(r)||ii("slot v-bind without argument expects an Object",this),n=I(I({},r),n)),a=i(n)||(c(t)?t():t)):a=this.$slots[e]||(c(t)?t():t);var o=n&&n.slot;return o?this.$createElement("template",{slot:o},a):a}function Zt(e){return Di(this.$options,"filters",e,!0)||R}function qt(e,n){return t(e)?-1===e.indexOf(n):e!==n}function Qt(e,t,n,r,a){var i=J.keyCodes[t]||n;return a&&r&&!J.keyCodes[t]?qt(a,r):i?qt(i,e):r?T(r)!==t:void 0===e}function Gt(e,n,r,a,i){if(r)if(l(r)){t(r)&&(r=F(r));var o=void 0,s=function(t){if("class"===t||"style"===t||w(t))o=e;else{var s=e.attrs&&e.attrs.type;o=a||J.mustUseProp(n,s,t)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={})}var c=O(t),l=T(t);c in o||l in o||(o[t]=r[t],i&&((e.on||(e.on={}))["update:".concat(t)]=function(e){r[t]=e}))};for(var c in r)s(c)}else ii("v-bind without argument expects an Object or Array value",this);return e}function Xt(e,t){var n=this._staticTrees||(this._staticTrees=[]),r=n[e];return r&&!t||tn(r=n[e]=this.$options.staticRenderFns[e].call(this._renderProxy,this._c,this),"__static__".concat(e),!1),r}function en(e,t,n){return tn(e,"__once__".concat(t).concat(n?"_".concat(n):""),!0),e}function tn(e,n,r){if(t(e))for(var a=0;a<e.length;a++)e[a]&&"string"!=typeof e[a]&&nn(e[a],"".concat(n,"_").concat(a),r);else nn(e,n,r)}function nn(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}function rn(e,t){if(t)if(f(t)){var n=e.on=e.on?I({},e.on):{};for(var r in t){var a=n[r],i=t[r];n[r]=a?[].concat(a,i):i}}else ii("v-on without argument expects an Object value",this);return e}function an(e,n,r,a){n=n||{$stable:!r};for(var i=0;i<e.length;i++){var o=e[i];t(o)?an(o,n,r):o&&(o.proxy&&(o.fn.proxy=!0),n[o.key]=o.fn)}return a&&(n.$key=a),n}function on(e,t){for(var n=0;n<t.length;n+=2){var r=t[n];"string"==typeof r&&r?e[t[n]]=t[n+1]:""!==r&&null!==r&&ii("Invalid value for dynamic directive argument (expected string or null): ".concat(r),this)}return e}function sn(e,t){return"string"==typeof e?t+e:e}function cn(e){e._o=en,e._n=y,e._s=h,e._l=Kt,e._t=Jt,e._q=Y,e._i=U,e._m=Xt,e._f=Zt,e._k=Qt,e._b=Gt,e._v=ke,e._e=Ce,e._u=an,e._g=rn,e._d=on,e._p=sn}function ln(e,t){if(!e||!e.length)return{};for(var n={},r=0,a=e.length;r<a;r++){var i=e[r],o=i.data;if(o&&o.attrs&&o.attrs.slot&&delete o.attrs.slot,i.context!==t&&i.fnContext!==t||!o||null==o.slot)(n.default||(n.default=[])).push(i);else{var s=o.slot,c=n[s]||(n[s]=[]);"template"===i.tag?c.push.apply(c,i.children||[]):c.push(i)}}for(var l in n)n[l].every(un)&&delete n[l];return n}function un(e){return e.isComment&&!e.asyncFactory||" "===e.text}function dn(e){return e.isComment&&e.asyncFactory}function fn(t,n,r,a){var i,o=Object.keys(r).length>0,s=n?!!n.$stable:!o,c=n&&n.$key;if(n){if(n._normalized)return n._normalized;if(s&&a&&a!==e&&c===a.$key&&!o&&!a.$hasNormal)return a;for(var l in i={},n)n[l]&&"$"!==l[0]&&(i[l]=pn(t,r,l,n[l]))}else i={};for(var u in r)u in i||(i[u]=vn(r,u));return n&&Object.isExtensible(n)&&(n._normalized=i),Q(i,"$stable",s),Q(i,"$key",c),Q(i,"$hasNormal",o),i}function pn(e,n,r,a){var i=function(){var n=ge;be(e);var r=arguments.length?a.apply(null,arguments):a({}),i=(r=r&&"object"==typeof r&&!t(r)?[r]:Lt(r))&&r[0];return be(n),r&&(!i||1===r.length&&i.isComment&&!dn(i))?void 0:r};return a.proxy&&Object.defineProperty(n,r,{get:i,enumerable:!0,configurable:!0}),i}function vn(e,t){return function(){return e[t]}}function mn(e){var t=e.$options,n=t.setup;if(n){var r=e._setupContext=hn(e);be(e),Le();var a=Fr(n,null,[e._props||et({}),r],e,"setup");if(Re(),be(),c(a))t.render=a;else if(l(a))if(a instanceof we&&ii("setup() should not return VNodes directly - return a render function instead."),e._setupState=a,a.__sfc){var i=e._setupProxy={};for(var o in a)"__sfc"!==o&>(i,a,o)}else for(var o in a)q(o)?ii("Avoid using variables that start with _ or $ in setup()."):gt(e,a,o);else void 0!==a&&ii("setup() should return an object. Received: ".concat(null===a?"null":typeof a))}}function hn(t){var n=!1;return{get attrs(){if(!t._attrsProxy){var n=t._attrsProxy={};Q(n,"_v_attr_proxy",!0),gn(n,t.$attrs,e,t,"$attrs")}return t._attrsProxy},get listeners(){return t._listenersProxy||gn(t._listenersProxy={},t.$listeners,e,t,"$listeners"),t._listenersProxy},get slots(){return bn(t)},emit:A(t.$emit,t),expose:function(e){n&&ii("expose() should be called only once per setup().",t),n=!0,e&&Object.keys(e).forEach((function(n){return gt(t,e,n)}))}}}function gn(e,t,n,r,a){var i=!1;for(var o in t)o in e?t[o]!==n[o]&&(i=!0):(i=!0,yn(e,o,r,a));for(var o in e)o in t||(i=!0,delete e[o]);return i}function yn(e,t,n,r){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){return n[r][t]}})}function bn(e){return e._slotsProxy||_n(e._slotsProxy={},e.$scopedSlots),e._slotsProxy}function _n(e,t){for(var n in t)e[n]=t[n];for(var n in e)n in t||delete e[n]}function wn(){return xn().slots}function Cn(){return xn().attrs}function kn(){return xn().listeners}function xn(){ge||ii("useContext() called without active instance.");var e=ge;return e._setupContext||(e._setupContext=hn(e))}function Dn(e,n){var r=t(e)?e.reduce((function(e,t){return e[t]={},e}),{}):e;for(var a in n){var i=r[a];i?t(i)||c(i)?r[a]={type:i,default:n[a]}:i.default=n[a]:null===i?r[a]={default:n[a]}:ii('props default key "'.concat(a,'" has no corresponding declaration.'))}return r}function Mn(t){t._vnode=null,t._staticTrees=null;var n=t.$options,r=t.$vnode=n._parentVnode,a=r&&r.context;t.$slots=ln(n._renderChildren,a),t.$scopedSlots=r?fn(t.$parent,r.data.scopedSlots,t.$slots):e,t._c=function(e,n,r,a){return Bt(t,e,n,r,a,!1)},t.$createElement=function(e,n,r,a){return Bt(t,e,n,r,a,!0)};var i=r&&r.data;Ze(t,"$attrs",i&&i.attrs||e,(function(){!Kn&&ii("$attrs is readonly.",t)}),!0),Ze(t,"$listeners",n._parentListeners||e,(function(){!Kn&&ii("$listeners is readonly.",t)}),!0)}var On,Sn,jn=null;function Tn(e){cn(e.prototype),e.prototype.$nextTick=function(e){return Jr(e,this)},e.prototype._render=function(){var e=this,n=e.$options,r=n.render,a=n._parentVnode;a&&e._isMounted&&(e.$scopedSlots=fn(e.$parent,a.data.scopedSlots,e.$slots,e.$scopedSlots),e._slotsProxy&&_n(e._slotsProxy,e.$scopedSlots)),e.$vnode=a;var i,o=ge,s=jn;try{be(e),jn=e,i=r.call(e._renderProxy,e.$createElement)}catch(t){if(Ir(t,e,"render"),e.$options.renderError)try{i=e.$options.renderError.call(e._renderProxy,e.$createElement,t)}catch(t){Ir(t,e,"renderError"),i=e._vnode}else i=e._vnode}finally{jn=s,be(o)}return t(i)&&1===i.length&&(i=i[0]),i instanceof we||(t(i)&&ii("Multiple root nodes returned from render function. Render function should return a single root node.",e),i=Ce()),i.parent=a,i}}function $n(e,t){return(e.__esModule||he&&"Module"===e[Symbol.toStringTag])&&(e=e.default),l(e)?t.extend(e):e}function En(e,t,n,r,a){var i=Ce();return i.asyncFactory=e,i.asyncMeta={data:t,context:n,children:r,tag:a},i}function An(e,t){if(i(e.error)&&a(e.errorComp))return e.errorComp;if(a(e.resolved))return e.resolved;var n=jn;if(n&&a(e.owners)&&-1===e.owners.indexOf(n)&&e.owners.push(n),i(e.loading)&&a(e.loadingComp))return e.loadingComp;if(n&&!a(e.owners)){var o=e.owners=[n],s=!0,c=null,u=null;n.$on("hook:destroyed",(function(){return C(o,n)}));var d=function(e){for(var t=0,n=o.length;t<n;t++)o[t].$forceUpdate();e&&(o.length=0,null!==c&&(clearTimeout(c),c=null),null!==u&&(clearTimeout(u),u=null))},f=B((function(n){e.resolved=$n(n,t),s?o.length=0:d(!0)})),p=B((function(t){ii("Failed to resolve async component: ".concat(String(e))+(t?"\nReason: ".concat(t):"")),a(e.errorComp)&&(e.error=!0,d(!0))})),v=e(f,p);return l(v)&&(m(v)?r(e.resolved)&&v.then(f,p):m(v.component)&&(v.component.then(f,p),a(v.error)&&(e.errorComp=$n(v.error,t)),a(v.loading)&&(e.loadingComp=$n(v.loading,t),0===v.delay?e.loading=!0:c=setTimeout((function(){c=null,r(e.resolved)&&r(e.error)&&(e.loading=!0,d(!1))}),v.delay||200)),a(v.timeout)&&(u=setTimeout((function(){u=null,r(e.resolved)&&p("timeout (".concat(v.timeout,"ms)"))}),v.timeout)))),s=!1,e.loading?e.loadingComp:e.resolved}}function Pn(e){if(t(e))for(var n=0;n<e.length;n++){var r=e[n];if(a(r)&&(a(r.componentOptions)||dn(r)))return r}}function In(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&Rn(e,t)}function Fn(e,t){On.$on(e,t)}function Nn(e,t){On.$off(e,t)}function Ln(e,t){var n=On;return function r(){null!==t.apply(null,arguments)&&n.$off(e,r)}}function Rn(e,t,n){On=e,At(t,n||{},Fn,Nn,Ln,e),On=void 0}function Hn(e){var n=/^hook:/;e.prototype.$on=function(e,r){var a=this;if(t(e))for(var i=0,o=e.length;i<o;i++)a.$on(e[i],r);else(a._events[e]||(a._events[e]=[])).push(r),n.test(e)&&(a._hasHookEvent=!0);return a},e.prototype.$once=function(e,t){var n=this;function r(){n.$off(e,r),t.apply(n,arguments)}return r.fn=t,n.$on(e,r),n},e.prototype.$off=function(e,n){var r=this;if(!arguments.length)return r._events=Object.create(null),r;if(t(e)){for(var a=0,i=e.length;a<i;a++)r.$off(e[a],n);return r}var o,s=r._events[e];if(!s)return r;if(!n)return r._events[e]=null,r;for(var c=s.length;c--;)if((o=s[c])===n||o.fn===n){s.splice(c,1);break}return r},e.prototype.$emit=function(e){var t=this,n=e.toLowerCase();n!==e&&t._events[n]&&oi('Event "'.concat(n,'" is emitted in component ')+"".concat(ai(t),' but the handler is registered for "').concat(e,'". ')+"Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. "+'You should probably use "'.concat(T(e),'" instead of "').concat(e,'".'));var r=t._events[e];if(r){r=r.length>1?P(r):r;for(var a=P(arguments,1),i='event handler for "'.concat(e,'"'),o=0,s=r.length;o<s;o++)Fr(r[o],t,a,t,i)}return t}}var Yn=function(){function e(e){void 0===e&&(e=!1),this.detached=e,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Sn,!e&&Sn&&(this.index=(Sn.scopes||(Sn.scopes=[])).push(this)-1)}return e.prototype.run=function(e){if(this.active){var t=Sn;try{return Sn=this,e()}finally{Sn=t}}else ii("cannot run an inactive effect scope.")},e.prototype.on=function(){Sn=this},e.prototype.off=function(){Sn=this.parent},e.prototype.stop=function(e){if(this.active){var t=void 0,n=void 0;for(t=0,n=this.effects.length;t<n;t++)this.effects[t].teardown();for(t=0,n=this.cleanups.length;t<n;t++)this.cleanups[t]();if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].stop(!0);if(!this.detached&&this.parent&&!e){var r=this.parent.scopes.pop();r&&r!==this&&(this.parent.scopes[this.index]=r,r.index=this.index)}this.parent=void 0,this.active=!1}},e}();function Un(e){return new Yn(e)}function Bn(e,t){void 0===t&&(t=Sn),t&&t.active&&t.effects.push(e)}function Vn(){return Sn}function Wn(e){Sn?Sn.cleanups.push(e):ii("onScopeDispose() is called when there is no active effect scope to be associated with.")}var zn=null,Kn=!1;function Jn(e){var t=zn;return zn=e,function(){zn=t}}function Zn(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._provided=n?n._provided:Object.create(null),e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}function qn(e){e.prototype._update=function(e,t){var n=this,r=n.$el,a=n._vnode,i=Jn(n);n._vnode=e,n.$el=a?n.__patch__(a,e):n.__patch__(n.$el,e,t,!1),i(),r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n);for(var o=n;o&&o.$vnode&&o.$parent&&o.$vnode===o.$parent._vnode;)o.$parent.$el=o.$el,o=o.$parent},e.prototype.$forceUpdate=function(){var e=this;e._watcher&&e._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){nr(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||C(t.$children,e),e._scope.stop(),e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,e.__patch__(e._vnode,null),nr(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.$vnode&&(e.$vnode.parent=null)}}}function Qn(e,t,n){var r;e.$el=t,e.$options.render||(e.$options.render=Ce,e.$options.template&&"#"!==e.$options.template.charAt(0)||e.$options.el||t?ii("You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.",e):ii("Failed to mount component: template or render function not defined.",e)),nr(e,"beforeMount"),r=J.performance&&wt?function(){var t=e._name,r=e._uid,a="vue-perf-start:".concat(r),i="vue-perf-end:".concat(r);wt(a);var o=e._render();wt(i),Ct("vue ".concat(t," render"),a,i),wt(a),e._update(o,n),wt(i),Ct("vue ".concat(t," patch"),a,i)}:function(){e._update(e._render(),n)};var a={before:function(){e._isMounted&&!e._isDestroyed&&nr(e,"beforeUpdate")},onTrack:function(t){return nr(e,"renderTracked",[t])},onTrigger:function(t){return nr(e,"renderTriggered",[t])}};new wa(e,r,N,a,!0),n=!1;var i=e._preWatchers;if(i)for(var o=0;o<i.length;o++)i[o].run();return null==e.$vnode&&(e._isMounted=!0,nr(e,"mounted")),e}function Gn(t,n,r,a,i){Kn=!0;var o=a.data.scopedSlots,s=t.$scopedSlots,c=!!(o&&!o.$stable||s!==e&&!s.$stable||o&&t.$scopedSlots.$key!==o.$key||!o&&t.$scopedSlots.$key),l=!!(i||t.$options._renderChildren||c),u=t.$vnode;t.$options._parentVnode=a,t.$vnode=a,t._vnode&&(t._vnode.parent=a),t.$options._renderChildren=i;var d=a.data.attrs||e;t._attrsProxy&&gn(t._attrsProxy,d,u.data&&u.data.attrs||e,t,"$attrs")&&(l=!0),t.$attrs=d,r=r||e;var f=t.$options._parentListeners;if(t._listenersProxy&&gn(t._listenersProxy,r,f||e,t,"$listeners"),t.$listeners=t.$options._parentListeners=r,Rn(t,r,f),n&&t.$options.props){We(!1);for(var p=t._props,v=t.$options._propKeys||[],m=0;m<v.length;m++){var h=v[m],g=t.$options.props;p[h]=Mi(h,g,n,t)}We(!0),t.$options.propsData=n}l&&(t.$slots=ln(i,a.context),t.$forceUpdate()),Kn=!1}function Xn(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function er(e,t){if(t){if(e._directInactive=!1,Xn(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var n=0;n<e.$children.length;n++)er(e.$children[n]);nr(e,"activated")}}function tr(e,t){if(!(t&&(e._directInactive=!0,Xn(e))||e._inactive)){e._inactive=!0;for(var n=0;n<e.$children.length;n++)tr(e.$children[n]);nr(e,"deactivated")}}function nr(e,t,n,r){void 0===r&&(r=!0),Le();var a=ge,i=Vn();r&&be(e);var o=e.$options[t],s="".concat(t," hook");if(o)for(var c=0,l=o.length;c<l;c++)Fr(o[c],e,n||null,e,s);e._hasHookEvent&&e.$emit("hook:"+t),r&&(be(a),i&&i.on()),Re()}var rr=100,ar=[],ir=[],or={},sr={},cr=!1,lr=!1,ur=0;function dr(){ur=ar.length=ir.length=0,or={},sr={},cr=lr=!1}var fr=0,pr=Date.now;if(te&&!re){var vr=window.performance;vr&&"function"==typeof vr.now&&pr()>document.createEvent("Event").timeStamp&&(pr=function(){return vr.now()})}var mr=function(e,t){if(e.post){if(!t.post)return 1}else if(t.post)return-1;return e.id-t.id};function hr(){var e,t;for(fr=pr(),lr=!0,ar.sort(mr),ur=0;ur<ar.length;ur++)if((e=ar[ur]).before&&e.before(),t=e.id,or[t]=null,e.run(),null!=or[t]&&(sr[t]=(sr[t]||0)+1,sr[t]>rr)){ii("You may have an infinite update loop "+(e.user?'in watcher with expression "'.concat(e.expression,'"'):"in a component render function."),e.vm);break}var n=ir.slice(),r=ar.slice();dr(),br(n),gr(r),Ie(),pe&&J.devtools&&pe.emit("flush")}function gr(e){for(var t=e.length;t--;){var n=e[t],r=n.vm;r&&r._watcher===n&&r._isMounted&&!r._isDestroyed&&nr(r,"updated")}}function yr(e){e._inactive=!1,ir.push(e)}function br(e){for(var t=0;t<e.length;t++)e[t]._inactive=!0,er(e[t],!0)}function _r(e){var t=e.id;if(null==or[t]&&(e!==Fe.target||!e.noRecurse)){if(or[t]=!0,lr){for(var n=ar.length-1;n>ur&&ar[n].id>e.id;)n--;ar.splice(n+1,0,e)}else ar.push(e);if(!cr){if(cr=!0,!J.async)return void hr();Jr(hr)}}}var wr="watcher",Cr="".concat(wr," callback"),kr="".concat(wr," getter"),xr="".concat(wr," cleanup");function Dr(e,t){return Tr(e,null,t)}function Mr(e,t){return Tr(e,null,Ee(Ee({},t),{flush:"post"}))}function Or(e,t){return Tr(e,null,Ee(Ee({},t),{flush:"sync"}))}var Sr={};function jr(e,t,n){return"function"!=typeof t&&ii("`watch(fn, options?)` signature has been moved to a separate API. Use `watchEffect(fn, options?)` instead. `watch` now only supports `watch(source, cb, options?) signature."),Tr(e,t,n)}function Tr(n,r,a){var i=void 0===a?e:a,o=i.immediate,s=i.deep,l=i.flush,u=void 0===l?"pre":l,d=i.onTrack,f=i.onTrigger;r||(void 0!==o&&ii('watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.'),void 0!==s&&ii('watch() "deep" option is only respected when using the watch(source, callback, options?) signature.'));var p,v,m=function(e){ii("Invalid watch source: ".concat(e,". A watch source can only be a getter/effect ")+"function, a ref, a reactive object, or an array of these types.")},h=ge,g=function(e,t,n){void 0===n&&(n=null);var r=Fr(e,null,n,h,t);return s&&r&&r.__ob__&&r.__ob__.dep.depend(),r},y=!1,b=!1;if(ut(n)?(p=function(){return n.value},y=rt(n)):nt(n)?(p=function(){return n.__ob__.dep.depend(),n},s=!0):t(n)?(b=!0,y=n.some((function(e){return nt(e)||rt(e)})),p=function(){return n.map((function(e){return ut(e)?e.value:nt(e)?(e.__ob__.dep.depend(),ya(e)):c(e)?g(e,kr):void m(e)}))}):c(n)?p=r?function(){return g(n,kr)}:function(){if(!h||!h._isDestroyed)return v&&v(),g(n,wr,[w])}:(p=N,m(n)),r&&s){var _=p;p=function(){return ya(_())}}var w=function(e){v=C.onStop=function(){g(e,xr)}};if(fe())return w=N,r?o&&g(r,Cr,[p(),b?[]:void 0,w]):p(),N;var C=new wa(ge,p,N,{lazy:!0});C.noRecurse=!r;var k=b?[]:Sr;return C.run=function(){if(C.active)if(r){var e=C.get();(s||y||(b?e.some((function(e,t){return V(e,k[t])})):V(e,k)))&&(v&&v(),g(r,Cr,[e,k===Sr?void 0:k,w]),k=e)}else C.get()},"sync"===u?C.update=C.run:"post"===u?(C.post=!0,C.update=function(){return _r(C)}):C.update=function(){if(h&&h===ge&&!h._isMounted){var e=h._preWatchers||(h._preWatchers=[]);e.indexOf(C)<0&&e.push(C)}else _r(C)},C.onTrack=d,C.onTrigger=f,r?o?C.run():k=C.get():"post"===u&&h?h.$once("hook:mounted",(function(){return C.get()})):C.get(),function(){C.teardown()}}function $r(e,t){ge?Er(ge)[e]=t:ii("provide() can only be used inside setup().")}function Er(e){var t=e._provided,n=e.$parent&&e.$parent._provided;return n===t?e._provided=Object.create(n):t}function Ar(e,t,n){void 0===n&&(n=!1);var r=ge;if(r){var a=r.$parent&&r.$parent._provided;if(a&&e in a)return a[e];if(arguments.length>1)return n&&c(t)?t.call(r):t;ii('injection "'.concat(String(e),'" not found.'))}else ii("inject() can only be used inside setup() or functional components.")}function Pr(e,t,n){return ge||ii("globally imported h() can only be invoked when there is an active component instance, e.g. synchronously in a component's render or setup function."),Bt(ge,e,t,n,2,!0)}function Ir(e,t,n){Le();try{if(t)for(var r=t;r=r.$parent;){var a=r.$options.errorCaptured;if(a)for(var i=0;i<a.length;i++)try{if(!1===a[i].call(r,e,t,n))return}catch(e){Nr(e,r,"errorCaptured hook")}}Nr(e,t,n)}finally{Re()}}function Fr(e,t,n,r,a){var i;try{(i=n?e.apply(t,n):e.call(t))&&!i._isVue&&m(i)&&!i._handled&&(i.catch((function(e){return Ir(e,r,a+" (Promise/async)")})),i._handled=!0)}catch(e){Ir(e,r,a)}return i}function Nr(e,t,n){if(J.errorHandler)try{return J.errorHandler.call(null,e,t,n)}catch(t){t!==e&&Lr(t,null,"config.errorHandler")}Lr(e,t,n)}function Lr(e,t,n){if(ii("Error in ".concat(n,': "').concat(e.toString(),'"'),t),!te||"undefined"==typeof console)throw e;console.error(e)}var Rr,Hr=!1,Yr=[],Ur=!1;function Br(){Ur=!1;var e=Yr.slice(0);Yr.length=0;for(var t=0;t<e.length;t++)e[t]()}if("undefined"!=typeof Promise&&ve(Promise)){var Vr=Promise.resolve();Rr=function(){Vr.then(Br),oe&&setTimeout(N)},Hr=!0}else if(re||"undefined"==typeof MutationObserver||!ve(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())Rr="undefined"!=typeof setImmediate&&ve(setImmediate)?function(){setImmediate(Br)}:function(){setTimeout(Br,0)};else{var Wr=1,zr=new MutationObserver(Br),Kr=document.createTextNode(String(Wr));zr.observe(Kr,{characterData:!0}),Rr=function(){Wr=(Wr+1)%2,Kr.data=String(Wr)},Hr=!0}function Jr(e,t){var n;if(Yr.push((function(){if(e)try{e.call(t)}catch(e){Ir(e,t,"nextTick")}else n&&n(t)})),Ur||(Ur=!0,Rr()),!e&&"undefined"!=typeof Promise)return new Promise((function(e){n=e}))}function Zr(t){return ii("useCssModule() is not supported in the global build."),e}function qr(e){if(te){var t=ge;t?Mr((function(){var n=t.$el,r=e(t,t._setupProxy);if(n&&1===n.nodeType){var a=n.style;for(var i in r)a.setProperty("--".concat(i),r[i])}})):ii("useCssVars is called without current active component instance.")}}function Qr(e){c(e)&&(e={loader:e});var t=e.loader,n=e.loadingComponent,r=e.errorComponent,a=e.delay,i=void 0===a?200:a,o=e.timeout,s=e.suspensible,u=void 0!==s&&s,d=e.onError;u&&ii("The suspensible option for async components is not supported in Vue2. It is ignored.");var f=null,p=0,v=function(){return p++,f=null,m()},m=function(){var e;return f||(e=f=t().catch((function(e){if(e=e instanceof Error?e:new Error(String(e)),d)return new Promise((function(t,n){d(e,(function(){return t(v())}),(function(){return n(e)}),p+1)}));throw e})).then((function(t){if(e!==f&&f)return f;if(t||ii("Async component loader resolved to undefined. If you are using retry(), make sure to return its return value."),t&&(t.__esModule||"Module"===t[Symbol.toStringTag])&&(t=t.default),t&&!l(t)&&!c(t))throw new Error("Invalid async component load result: ".concat(t));return t})))};return function(){return{component:m(),delay:i,timeout:o,error:r,loading:n}}}function Gr(e){return function(t,n){if(void 0===n&&(n=ge),n)return ea(n,e,t);ii("".concat(Xr(e)," is called when there is no active component instance to be ")+"associated with. Lifecycle injection APIs can only be used during execution of setup().")}}function Xr(e){return"beforeDestroy"===e?e="beforeUnmount":"destroyed"===e&&(e="unmounted"),"on".concat(e[0].toUpperCase()+e.slice(1))}function ea(e,t,n){var r=e.$options;r[t]=vi(r[t],n)}var ta=Gr("beforeMount"),na=Gr("mounted"),ra=Gr("beforeUpdate"),aa=Gr("updated"),ia=Gr("beforeDestroy"),oa=Gr("destroyed"),sa=Gr("activated"),ca=Gr("deactivated"),la=Gr("serverPrefetch"),ua=Gr("renderTracked"),da=Gr("renderTriggered"),fa=Gr("errorCaptured");function pa(e,t){void 0===t&&(t=ge),fa(e,t)}var va="2.7.16";function ma(e){return e}var ha=Object.freeze({__proto__:null,version:va,defineComponent:ma,ref:dt,shallowRef:ft,isRef:ut,toRef:_t,toRefs:bt,unref:mt,proxyRefs:ht,customRef:yt,triggerRef:vt,reactive:Xe,isReactive:nt,isReadonly:at,isShallow:rt,isProxy:it,shallowReactive:et,markRaw:st,toRaw:ot,readonly:Dt,shallowReadonly:St,computed:jt,watch:jr,watchEffect:Dr,watchPostEffect:Mr,watchSyncEffect:Or,EffectScope:Yn,effectScope:Un,onScopeDispose:Wn,getCurrentScope:Vn,provide:$r,inject:Ar,h:Pr,getCurrentInstance:ye,useSlots:wn,useAttrs:Cn,useListeners:kn,mergeDefaults:Dn,nextTick:Jr,set:qe,del:Qe,useCssModule:Zr,useCssVars:qr,defineAsyncComponent:Qr,onBeforeMount:ta,onMounted:na,onBeforeUpdate:ra,onUpdated:aa,onBeforeUnmount:ia,onUnmounted:oa,onActivated:sa,onDeactivated:ca,onServerPrefetch:la,onRenderTracked:ua,onRenderTriggered:da,onErrorCaptured:pa}),ga=new me;function ya(e){return ba(e,ga),ga.clear(),e}function ba(e,n){var r,a,i=t(e);if(!(!i&&!l(e)||e.__v_skip||Object.isFrozen(e)||e instanceof we)){if(e.__ob__){var o=e.__ob__.dep.id;if(n.has(o))return;n.add(o)}if(i)for(r=e.length;r--;)ba(e[r],n);else if(ut(e))ba(e.value,n);else for(r=(a=Object.keys(e)).length;r--;)ba(e[a[r]],n)}}var _a=0,wa=function(){function e(e,t,n,r,a){Bn(this,Sn&&!Sn._vm?Sn:e?e._scope:void 0),(this.vm=e)&&a&&(e._watcher=this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before,this.onTrack=r.onTrack,this.onTrigger=r.onTrigger):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++_a,this.active=!0,this.post=!1,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new me,this.newDepIds=new me,this.expression=t.toString(),c(t)?this.getter=t:(this.getter=X(t),this.getter||(this.getter=N,ii('Failed watching path: "'.concat(t,'" ')+"Watcher only accepts simple dot-delimited paths. For full control, use a function instead.",e))),this.value=this.lazy?void 0:this.get()}return e.prototype.get=function(){var e;Le(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(e){if(!this.user)throw e;Ir(e,t,'getter for watcher "'.concat(this.expression,'"'))}finally{this.deep&&ya(e),Re(),this.cleanupDeps()}return e},e.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},e.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},e.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():_r(this)},e.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||l(e)||this.deep){var t=this.value;if(this.value=e,this.user){var n='callback for watcher "'.concat(this.expression,'"');Fr(this.cb,this.vm,[e,t],this.vm,n)}else this.cb.call(this.vm,e,t)}}},e.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},e.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},e.prototype.teardown=function(){if(this.vm&&!this.vm._isBeingDestroyed&&C(this.vm._scope.effects,this),this.active){for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1,this.onStop&&this.onStop()}},e}(),Ca={enumerable:!0,configurable:!0,get:N,set:N};function ka(e,t,n){Ca.get=function(){return this[t][n]},Ca.set=function(e){this[t][n]=e},Object.defineProperty(e,n,Ca)}function xa(e){var t=e.$options;if(t.props&&Da(e,t.props),mn(e),t.methods&&Aa(e,t.methods),t.data)Ma(e);else{var n=Je(e._data={});n&&n.vmCount++}t.computed&&ja(e,t.computed),t.watch&&t.watch!==le&&Pa(e,t.watch)}function Da(e,t){var n=e.$options.propsData||{},r=e._props=et({}),a=e.$options._propKeys=[],i=!e.$parent;i||We(!1);var o=function(o){a.push(o);var s=Mi(o,t,n,e),c=T(o);(w(c)||J.isReservedAttr(c))&&ii('"'.concat(c,'" is a reserved attribute and cannot be used as component prop.'),e),Ze(r,o,s,(function(){i||Kn||ii("Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's "+'value. Prop being mutated: "'.concat(o,'"'),e)}),!0),o in e||ka(e,"_props",o)};for(var s in t)o(s);We(!0)}function Ma(e){var t=e.$options.data;f(t=e._data=c(t)?Oa(t,e):t||{})||(t={},ii("data functions should return an object:\nhttps://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function",e));for(var n=Object.keys(t),r=e.$options.props,a=e.$options.methods,i=n.length;i--;){var o=n[i];a&&x(a,o)&&ii('Method "'.concat(o,'" has already been defined as a data property.'),e),r&&x(r,o)?ii('The data property "'.concat(o,'" is already declared as a prop. ')+"Use prop default value instead.",e):q(o)||ka(e,"_data",o)}var s=Je(t);s&&s.vmCount++}function Oa(e,t){Le();try{return e.call(t,t)}catch(e){return Ir(e,t,"data()"),{}}finally{Re()}}var Sa={lazy:!0};function ja(e,t){var n=e._computedWatchers=Object.create(null),r=fe();for(var a in t){var i=t[a],o=c(i)?i:i.get;null==o&&ii('Getter is missing for computed property "'.concat(a,'".'),e),r||(n[a]=new wa(e,o||N,N,Sa)),a in e?a in e.$data?ii('The computed property "'.concat(a,'" is already defined in data.'),e):e.$options.props&&a in e.$options.props?ii('The computed property "'.concat(a,'" is already defined as a prop.'),e):e.$options.methods&&a in e.$options.methods&&ii('The computed property "'.concat(a,'" is already defined as a method.'),e):Ta(e,a,i)}}function Ta(e,t,n){var r=!fe();c(n)?(Ca.get=r?$a(t):Ea(n),Ca.set=N):(Ca.get=n.get?r&&!1!==n.cache?$a(t):Ea(n.get):N,Ca.set=n.set||N),Ca.set===N&&(Ca.set=function(){ii('Computed property "'.concat(t,'" was assigned to but it has no setter.'),this)}),Object.defineProperty(e,t,Ca)}function $a(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),Fe.target&&(Fe.target.onTrack&&Fe.target.onTrack({effect:Fe.target,target:this,type:"get",key:e}),t.depend()),t.value}}function Ea(e){return function(){return e.call(this,this)}}function Aa(e,t){var n=e.$options.props;for(var r in t)"function"!=typeof t[r]&&ii('Method "'.concat(r,'" has type "').concat(typeof t[r],'" in the component definition. ')+"Did you reference the function correctly?",e),n&&x(n,r)&&ii('Method "'.concat(r,'" has already been defined as a prop.'),e),r in e&&q(r)&&ii('Method "'.concat(r,'" conflicts with an existing Vue instance method. ')+"Avoid defining component methods that start with _ or $."),e[r]="function"!=typeof t[r]?N:A(t[r],e)}function Pa(e,n){for(var r in n){var a=n[r];if(t(a))for(var i=0;i<a.length;i++)Ia(e,r,a[i]);else Ia(e,r,a)}}function Ia(e,t,n,r){return f(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}function Fa(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};t.set=function(){ii("Avoid replacing instance root $data. Use nested data properties instead.",this)},n.set=function(){ii("$props is readonly.",this)},Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=qe,e.prototype.$delete=Qe,e.prototype.$watch=function(e,t,n){var r=this;if(f(t))return Ia(r,e,t,n);(n=n||{}).user=!0;var a=new wa(r,e,t,n);if(n.immediate){var i='callback for immediate watcher "'.concat(a.expression,'"');Le(),Fr(t,r,[a.value],r,i),Re()}return function(){a.teardown()}}}function Na(e){var t=e.$options.provide;if(t){var n=c(t)?t.call(e):t;if(!l(n))return;for(var r=Er(e),a=he?Reflect.ownKeys(n):Object.keys(n),i=0;i<a.length;i++){var o=a[i];Object.defineProperty(r,o,Object.getOwnPropertyDescriptor(n,o))}}}function La(e){var t=Ra(e.$options.inject,e);t&&(We(!1),Object.keys(t).forEach((function(n){Ze(e,n,t[n],(function(){ii("Avoid mutating an injected value directly since the changes will be overwritten whenever the provided component re-renders. "+'injection being mutated: "'.concat(n,'"'),e)}))})),We(!0))}function Ra(e,t){if(e){for(var n=Object.create(null),r=he?Reflect.ownKeys(e):Object.keys(e),a=0;a<r.length;a++){var i=r[a];if("__ob__"!==i){var o=e[i].from;if(o in t._provided)n[i]=t._provided[o];else if("default"in e[i]){var s=e[i].default;n[i]=c(s)?s.call(t):s}else ii('Injection "'.concat(i,'" not found'),t)}}return n}}var Ha=0;function Ya(e){e.prototype._init=function(e){var t,n,r=this;r._uid=Ha++,J.performance&&wt&&(t="vue-perf-start:".concat(r._uid),n="vue-perf-end:".concat(r._uid),wt(t)),r._isVue=!0,r.__v_skip=!0,r._scope=new Yn(!0),r._scope.parent=void 0,r._scope._vm=!0,e&&e._isComponent?Ua(r,e):r.$options=xi(Ba(r.constructor),e||{},r),_e(r),r._self=r,Zn(r),In(r),Mn(r),nr(r,"beforeCreate",void 0,!1),La(r),xa(r),Na(r),nr(r,"created"),J.performance&&wt&&(r._name=ai(r,!1),wt(n),Ct("vue ".concat(r._name," init"),t,n)),r.$options.el&&r.$mount(r.$options.el)}}function Ua(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var a=r.componentOptions;n.propsData=a.propsData,n._parentListeners=a.listeners,n._renderChildren=a.children,n._componentTag=a.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}function Ba(e){var t=e.options;if(e.super){var n=Ba(e.super);if(n!==e.superOptions){e.superOptions=n;var r=Va(e);r&&I(e.extendOptions,r),(t=e.options=xi(n,e.extendOptions)).name&&(t.components[t.name]=e)}}return t}function Va(e){var t,n=e.options,r=e.sealedOptions;for(var a in n)n[a]!==r[a]&&(t||(t={}),t[a]=n[a]);return t}function Wa(n,r,a,o,s){var c,l=this,u=s.options;x(o,"_uid")?(c=Object.create(o))._original=o:(c=o,o=o._original);var d=i(u._compiled),f=!d;this.data=n,this.props=r,this.children=a,this.parent=o,this.listeners=n.on||e,this.injections=Ra(u.inject,o),this.slots=function(){return l.$slots||fn(o,n.scopedSlots,l.$slots=ln(a,o)),l.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return fn(o,n.scopedSlots,this.slots())}}),d&&(this.$options=u,this.$slots=this.slots(),this.$scopedSlots=fn(o,n.scopedSlots,this.$slots)),u._scopeId?this._c=function(e,n,r,a){var i=Bt(c,e,n,r,a,f);return i&&!t(i)&&(i.fnScopeId=u._scopeId,i.fnContext=o),i}:this._c=function(e,t,n,r){return Bt(c,e,t,n,r,f)}}function za(n,r,i,o,s){var c=n.options,l={},u=c.props;if(a(u))for(var d in u)l[d]=Mi(d,u,r||e);else a(i.attrs)&&Ja(l,i.attrs),a(i.props)&&Ja(l,i.props);var f=new Wa(i,l,s,o,n),p=c.render.call(null,f._c,f);if(p instanceof we)return Ka(p,i,f.parent,c,f);if(t(p)){for(var v=Lt(p)||[],m=new Array(v.length),h=0;h<v.length;h++)m[h]=Ka(v[h],i,f.parent,c,f);return m}}function Ka(e,t,n,r,a){var i=xe(e);return i.fnContext=n,i.fnOptions=r,(i.devtoolsMeta=i.devtoolsMeta||{}).renderContext=a,t.slot&&((i.data||(i.data={})).slot=t.slot),i}function Ja(e,t){for(var n in t)e[O(n)]=t[n]}function Za(e){return e.name||e.__name||e._componentTag}cn(Wa.prototype);var qa={init:function(e,t){if(e.componentInstance&&!e.componentInstance._isDestroyed&&e.data.keepAlive){var n=e;qa.prepatch(n,n)}else(e.componentInstance=Xa(e,zn)).$mount(t?e.elm:void 0,t)},prepatch:function(e,t){var n=t.componentOptions;Gn(t.componentInstance=e.componentInstance,n.propsData,n.listeners,t,n.children)},insert:function(e){var t=e.context,n=e.componentInstance;n._isMounted||(n._isMounted=!0,nr(n,"mounted")),e.data.keepAlive&&(t._isMounted?yr(n):er(n,!0))},destroy:function(e){var t=e.componentInstance;t._isDestroyed||(e.data.keepAlive?tr(t,!0):t.$destroy())}},Qa=Object.keys(qa);function Ga(e,t,n,o,s){if(!r(e)){var c=n.$options._base;if(l(e)&&(e=c.extend(e)),"function"==typeof e){var u;if(r(e.cid)&&void 0===(e=An(u=e,c)))return En(u,t,n,o,s);t=t||{},Ba(e),a(t.model)&&ni(e.options,t);var d=It(t,e,s);if(i(e.options.functional))return za(e,d,t,n,o);var f=t.on;if(t.on=t.nativeOn,i(e.options.abstract)){var p=t.slot;t={},p&&(t.slot=p)}ei(t);var v=Za(e.options)||s;return new we("vue-component-".concat(e.cid).concat(v?"-".concat(v):""),t,void 0,void 0,void 0,n,{Ctor:e,propsData:d,listeners:f,tag:s,children:o},u)}ii("Invalid Component definition: ".concat(String(e)),n)}}function Xa(e,t){var n={_isComponent:!0,_parentVnode:e,parent:t},r=e.data.inlineTemplate;return a(r)&&(n.render=r.render,n.staticRenderFns=r.staticRenderFns),new e.componentOptions.Ctor(n)}function ei(e){for(var t=e.hook||(e.hook={}),n=0;n<Qa.length;n++){var r=Qa[n],a=t[r],i=qa[r];a===i||a&&a._merged||(t[r]=a?ti(i,a):i)}}function ti(e,t){var n=function(n,r){e(n,r),t(n,r)};return n._merged=!0,n}function ni(e,n){var r=e.model&&e.model.prop||"value",i=e.model&&e.model.event||"input";(n.attrs||(n.attrs={}))[r]=n.model.value;var o=n.on||(n.on={}),s=o[i],c=n.model.callback;a(s)?(t(s)?-1===s.indexOf(c):s!==c)&&(o[i]=[c].concat(s)):o[i]=c}var ri,ai,ii=N,oi=N,si="undefined"!=typeof console,ci=/(?:^|[-_])(\w)/g,li=function(e){return e.replace(ci,(function(e){return e.toUpperCase()})).replace(/[-_]/g,"")};ii=function(e,t){void 0===t&&(t=ge);var n=t?ri(t):"";J.warnHandler?J.warnHandler.call(null,e,t,n):si&&!J.silent&&console.error("[Vue warn]: ".concat(e).concat(n))},oi=function(e,t){si&&!J.silent&&console.warn("[Vue tip]: ".concat(e)+(t?ri(t):""))},ai=function(e,t){if(e.$root===e)return"<Root>";var n=c(e)&&null!=e.cid?e.options:e._isVue?e.$options||e.constructor.options:e,r=Za(n),a=n.__file;if(!r&&a){var i=a.match(/([^/\\]+)\.vue$/);r=i&&i[1]}return(r?"<".concat(li(r),">"):"<Anonymous>")+(a&&!1!==t?" at ".concat(a):"")};var ui=function(e,t){for(var n="";t;)t%2==1&&(n+=e),t>1&&(e+=e),t>>=1;return n};ri=function(e){if(e._isVue&&e.$parent){for(var n=[],r=0;e;){if(n.length>0){var a=n[n.length-1];if(a.constructor===e.constructor){r++,e=e.$parent;continue}r>0&&(n[n.length-1]=[a,r],r=0)}n.push(e),e=e.$parent}return"\n\nfound in\n\n"+n.map((function(e,n){return"".concat(0===n?"---\x3e ":ui(" ",5+2*n)).concat(t(e)?"".concat(ai(e[0]),"... (").concat(e[1]," recursive calls)"):ai(e))})).join("\n")}return"\n\n(found in ".concat(ai(e),")")};var di=J.optionMergeStrategies;function fi(e,t,n){if(void 0===n&&(n=!0),!t)return e;for(var r,a,i,o=he?Reflect.ownKeys(t):Object.keys(t),s=0;s<o.length;s++)"__ob__"!==(r=o[s])&&(a=e[r],i=t[r],n&&x(e,r)?a!==i&&f(a)&&f(i)&&fi(a,i):qe(e,r,i));return e}function pi(e,t,n){return n?function(){var r=c(t)?t.call(n,n):t,a=c(e)?e.call(n,n):e;return r?fi(r,a):a}:t?e?function(){return fi(c(t)?t.call(this,this):t,c(e)?e.call(this,this):e)}:t:e}function vi(e,n){var r=n?e?e.concat(n):t(n)?n:[n]:e;return r?mi(r):r}function mi(e){for(var t=[],n=0;n<e.length;n++)-1===t.indexOf(e[n])&&t.push(e[n]);return t}function hi(e,t,n,r){var a=Object.create(e||null);return t?(ki(r,t,n),I(a,t)):a}di.el=di.propsData=function(e,t,n,r){return n||ii('option "'.concat(r,'" can only be used during instance ')+"creation with the `new` keyword."),gi(e,t)},di.data=function(e,t,n){return n?pi(e,t,n):t&&"function"!=typeof t?(ii('The "data" option should be a function that returns a per-instance value in component definitions.',n),e):pi(e,t)},K.forEach((function(e){di[e]=vi})),z.forEach((function(e){di[e+"s"]=hi})),di.watch=function(e,n,r,a){if(e===le&&(e=void 0),n===le&&(n=void 0),!n)return Object.create(e||null);if(ki(a,n,r),!e)return n;var i={};for(var o in I(i,e),n){var s=i[o],c=n[o];s&&!t(s)&&(s=[s]),i[o]=s?s.concat(c):t(c)?c:[c]}return i},di.props=di.methods=di.inject=di.computed=function(e,t,n,r){if(t&&ki(r,t,n),!e)return t;var a=Object.create(null);return I(a,e),t&&I(a,t),a},di.provide=function(e,t){return e?function(){var n=Object.create(null);return fi(n,c(e)?e.call(this):e),t&&fi(n,c(t)?t.call(this):t,!1),n}:t};var gi=function(e,t){return void 0===t?e:t};function yi(e){for(var t in e.components)bi(t)}function bi(e){new RegExp("^[a-zA-Z][\\-\\.0-9_".concat(Z.source,"]*$")).test(e)||ii('Invalid component name: "'+e+'". Component names should conform to valid custom element name in html5 specification.'),(_(e)||J.isReservedTag(e))&&ii("Do not use built-in or reserved HTML elements as component id: "+e)}function _i(e,n){var r=e.props;if(r){var a,i,o={};if(t(r))for(a=r.length;a--;)"string"==typeof(i=r[a])?o[O(i)]={type:null}:ii("props must be strings when using array syntax.");else if(f(r))for(var s in r)i=r[s],o[O(s)]=f(i)?i:{type:i};else ii('Invalid value for option "props": expected an Array or an Object, '+"but got ".concat(d(r),"."),n);e.props=o}}function wi(e,n){var r=e.inject;if(r){var a=e.inject={};if(t(r))for(var i=0;i<r.length;i++)a[r[i]]={from:r[i]};else if(f(r))for(var o in r){var s=r[o];a[o]=f(s)?I({from:o},s):{from:s}}else ii('Invalid value for option "inject": expected an Array or an Object, '+"but got ".concat(d(r),"."),n)}}function Ci(e){var t=e.directives;if(t)for(var n in t){var r=t[n];c(r)&&(t[n]={bind:r,update:r})}}function ki(e,t,n){f(t)||ii('Invalid value for option "'.concat(e,'": expected an Object, ')+"but got ".concat(d(t),"."),n)}function xi(e,t,n){if(yi(t),c(t)&&(t=t.options),_i(t,n),wi(t,n),Ci(t),!t._base&&(t.extends&&(e=xi(e,t.extends,n)),t.mixins))for(var r=0,a=t.mixins.length;r<a;r++)e=xi(e,t.mixins[r],n);var i,o={};for(i in e)s(i);for(i in t)x(e,i)||s(i);function s(r){var a=di[r]||gi;o[r]=a(e[r],t[r],n,r)}return o}function Di(e,t,n,r){if("string"==typeof n){var a=e[t];if(x(a,n))return a[n];var i=O(n);if(x(a,i))return a[i];var o=S(i);if(x(a,o))return a[o];var s=a[n]||a[i]||a[o];return r&&!s&&ii("Failed to resolve "+t.slice(0,-1)+": "+n),s}}function Mi(e,t,n,r){var a=t[e],i=!x(n,e),o=n[e],s=Pi(Boolean,a.type);if(s>-1)if(i&&!x(a,"default"))o=!1;else if(""===o||o===T(e)){var c=Pi(String,a.type);(c<0||s<c)&&(o=!0)}if(void 0===o){o=Oi(r,a,e);var l=Ve;We(!0),Je(o),We(l)}return Si(a,e,o,r,i),o}function Oi(e,t,n){if(x(t,"default")){var r=t.default;return l(r)&&ii('Invalid default value for prop "'+n+'": Props with type Object/Array must use a factory function to return the default value.',e),e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e._props[n]?e._props[n]:c(r)&&"Function"!==Ei(t.type)?r.call(e):r}}function Si(e,n,r,a,i){if(e.required&&i)ii('Missing required prop: "'+n+'"',a);else if(null!=r||e.required){var o=e.type,s=!o||!0===o,c=[];if(o){t(o)||(o=[o]);for(var l=0;l<o.length&&!s;l++){var u=Ti(r,o[l],a);c.push(u.expectedType||""),s=u.valid}}var d=c.some((function(e){return e}));if(s||!d){var f=e.validator;f&&(f(r)||ii('Invalid prop: custom validator check failed for prop "'+n+'".',a))}else ii(Ii(n,r,c),a)}}var ji=/^(String|Number|Boolean|Function|Symbol|BigInt)$/;function Ti(e,n,r){var a,i=Ei(n);if(ji.test(i)){var o=typeof e;(a=o===i.toLowerCase())||"object"!==o||(a=e instanceof n)}else if("Object"===i)a=f(e);else if("Array"===i)a=t(e);else try{a=e instanceof n}catch(e){ii('Invalid prop type: "'+String(n)+'" is not a constructor',r),a=!1}return{valid:a,expectedType:i}}var $i=/^\s*function (\w+)/;function Ei(e){var t=e&&e.toString().match($i);return t?t[1]:""}function Ai(e,t){return Ei(e)===Ei(t)}function Pi(e,n){if(!t(n))return Ai(n,e)?0:-1;for(var r=0,a=n.length;r<a;r++)if(Ai(n[r],e))return r;return-1}function Ii(e,t,n){var r='Invalid prop: type check failed for prop "'.concat(e,'".')+" Expected ".concat(n.map(S).join(", ")),a=n[0],i=d(t);return 1===n.length&&Li(a)&&Li(typeof t)&&!Ri(a,i)&&(r+=" with value ".concat(Fi(t,a))),r+=", got ".concat(i," "),Li(i)&&(r+="with value ".concat(Fi(t,i),".")),r}function Fi(e,t){return"String"===t?'"'.concat(e,'"'):"".concat("Number"===t?Number(e):e)}var Ni=["string","number","boolean"];function Li(e){return Ni.some((function(t){return e.toLowerCase()===t}))}function Ri(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return e.some((function(e){return"boolean"===e.toLowerCase()}))}function Hi(e){this instanceof Hi||ii("Vue is a constructor and should be called with the `new` keyword"),this._init(e)}function Yi(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=P(arguments,1);return n.unshift(this),c(e.install)?e.install.apply(e,n):c(e)&&e.apply(null,n),t.push(e),this}}function Ui(e){e.mixin=function(e){return this.options=xi(this.options,e),this}}function Bi(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,a=e._Ctor||(e._Ctor={});if(a[r])return a[r];var i=Za(e)||Za(n.options);i&&bi(i);var o=function(e){this._init(e)};return o.prototype=Object.create(n.prototype),o.prototype.constructor=o,o.cid=t++,o.options=xi(n.options,e),o.super=n,o.options.props&&Vi(o),o.options.computed&&Wi(o),o.extend=n.extend,o.mixin=n.mixin,o.use=n.use,z.forEach((function(e){o[e]=n[e]})),i&&(o.options.components[i]=o),o.superOptions=n.options,o.extendOptions=e,o.sealedOptions=I({},o.options),a[r]=o,o}}function Vi(e){var t=e.options.props;for(var n in t)ka(e.prototype,"_props",n)}function Wi(e){var t=e.options.computed;for(var n in t)Ta(e.prototype,n,t[n])}function zi(e){z.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&bi(e),"component"===t&&f(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&c(n)&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}function Ki(e){return e&&(Za(e.Ctor.options)||e.tag)}function Ji(e,n){return t(e)?e.indexOf(n)>-1:"string"==typeof e?e.split(",").indexOf(n)>-1:!!p(e)&&e.test(n)}function Zi(e,t){var n=e.cache,r=e.keys,a=e._vnode,i=e.$vnode;for(var o in n){var s=n[o];if(s){var c=s.name;c&&!t(c)&&qi(n,o,r,a)}}i.componentOptions.children=void 0}function qi(e,t,n,r){var a=e[t];!a||r&&a.tag===r.tag||a.componentInstance.$destroy(),e[t]=null,C(n,t)}Ya(Hi),Fa(Hi),Hn(Hi),qn(Hi),Tn(Hi);var Qi=[String,RegExp,Array],Gi={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:Qi,exclude:Qi,max:[String,Number]},methods:{cacheVNode:function(){var e=this,t=e.cache,n=e.keys,r=e.vnodeToCache,a=e.keyToCache;if(r){var i=r.tag,o=r.componentInstance,s=r.componentOptions;t[a]={name:Ki(s),tag:i,componentInstance:o},n.push(a),this.max&&n.length>parseInt(this.max)&&qi(t,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)qi(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch("include",(function(t){Zi(e,(function(e){return Ji(t,e)}))})),this.$watch("exclude",(function(t){Zi(e,(function(e){return!Ji(t,e)}))}))},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,t=Pn(e),n=t&&t.componentOptions;if(n){var r=Ki(n),a=this,i=a.include,o=a.exclude;if(i&&(!r||!Ji(i,r))||o&&r&&Ji(o,r))return t;var s=this,c=s.cache,l=s.keys,u=null==t.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):t.key;c[u]?(t.componentInstance=c[u].componentInstance,C(l,u),l.push(u)):(this.vnodeToCache=t,this.keyToCache=u),t.data.keepAlive=!0}return t||e&&e[0]}}};function Xi(e){var t={get:function(){return J},set:function(){ii("Do not replace the Vue.config object, set individual fields instead.")}};Object.defineProperty(e,"config",t),e.util={warn:ii,extend:I,mergeOptions:xi,defineReactive:Ze},e.set=qe,e.delete=Qe,e.nextTick=Jr,e.observable=function(e){return Je(e),e},e.options=Object.create(null),z.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,I(e.options.components,Gi),Yi(e),Ui(e),Bi(e),zi(e)}Xi(Hi),Object.defineProperty(Hi.prototype,"$isServer",{get:fe}),Object.defineProperty(Hi.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Hi,"FunctionalRenderContext",{value:Wa}),Hi.version=va;var eo=b("style,class"),to=b("input,textarea,option,select,progress"),no=function(e,t,n){return"value"===n&&to(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},ro=b("contenteditable,draggable,spellcheck"),ao=b("events,caret,typing,plaintext-only"),io=function(e,t){return uo(t)||"false"===t?"false":"contenteditable"===e&&ao(t)?t:"true"},oo=b("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),so="http://www.w3.org/1999/xlink",co=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},lo=function(e){return co(e)?e.slice(6,e.length):""},uo=function(e){return null==e||!1===e};function fo(e){for(var t=e.data,n=e,r=e;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(t=po(r.data,t));for(;a(n=n.parent);)n&&n.data&&(t=po(t,n.data));return vo(t.staticClass,t.class)}function po(e,t){return{staticClass:mo(e.staticClass,t.staticClass),class:a(e.class)?[e.class,t.class]:t.class}}function vo(e,t){return a(e)||a(t)?mo(e,ho(t)):""}function mo(e,t){return e?t?e+" "+t:e:t||""}function ho(e){return Array.isArray(e)?go(e):l(e)?yo(e):"string"==typeof e?e:""}function go(e){for(var t,n="",r=0,i=e.length;r<i;r++)a(t=ho(e[r]))&&""!==t&&(n&&(n+=" "),n+=t);return n}function yo(e){var t="";for(var n in e)e[n]&&(t&&(t+=" "),t+=n);return t}var bo={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},_o=b("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),wo=b("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Co=function(e){return"pre"===e},ko=function(e){return _o(e)||wo(e)};function xo(e){return wo(e)?"svg":"math"===e?"math":void 0}var Do=Object.create(null);function Mo(e){if(!te)return!0;if(ko(e))return!1;if(e=e.toLowerCase(),null!=Do[e])return Do[e];var t=document.createElement(e);return e.indexOf("-")>-1?Do[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Do[e]=/HTMLUnknownElement/.test(t.toString())}var Oo=b("text,number,password,search,email,tel,url");function So(e){if("string"==typeof e){var t=document.querySelector(e);return t||(ii("Cannot find element: "+e),document.createElement("div"))}return e}function jo(e,t){var n=document.createElement(e);return"select"!==e||t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute("multiple","multiple"),n}function To(e,t){return document.createElementNS(bo[e],t)}function $o(e){return document.createTextNode(e)}function Eo(e){return document.createComment(e)}function Ao(e,t,n){e.insertBefore(t,n)}function Po(e,t){e.removeChild(t)}function Io(e,t){e.appendChild(t)}function Fo(e){return e.parentNode}function No(e){return e.nextSibling}function Lo(e){return e.tagName}function Ro(e,t){e.textContent=t}function Ho(e,t){e.setAttribute(t,"")}var Yo=Object.freeze({__proto__:null,createElement:jo,createElementNS:To,createTextNode:$o,createComment:Eo,insertBefore:Ao,removeChild:Po,appendChild:Io,parentNode:Fo,nextSibling:No,tagName:Lo,setTextContent:Ro,setStyleScope:Ho}),Uo={create:function(e,t){Bo(t)},update:function(e,t){e.data.ref!==t.data.ref&&(Bo(e,!0),Bo(t))},destroy:function(e){Bo(e,!0)}};function Bo(e,n){var r=e.data.ref;if(a(r)){var i=e.context,o=e.componentInstance||e.elm,s=n?null:o,l=n?void 0:o;if(c(r))Fr(r,i,[s],i,"template ref function");else{var u=e.data.refInFor,d="string"==typeof r||"number"==typeof r,f=ut(r),p=i.$refs;if(d||f)if(u){var v=d?p[r]:r.value;n?t(v)&&C(v,o):t(v)?v.includes(o)||v.push(o):d?(p[r]=[o],Vo(i,r,p[r])):r.value=[o]}else if(d){if(n&&p[r]!==o)return;p[r]=l,Vo(i,r,s)}else if(f){if(n&&r.value!==o)return;r.value=s}else ii("Invalid template ref type: ".concat(typeof r))}}}function Vo(e,t,n){var r=e._setupState;r&&x(r,t)&&(ut(r[t])?r[t].value=n:r[t]=n)}var Wo=new we("",{},[]),zo=["create","activate","update","remove","destroy"];function Ko(e,t){return e.key===t.key&&e.asyncFactory===t.asyncFactory&&(e.tag===t.tag&&e.isComment===t.isComment&&a(e.data)===a(t.data)&&Jo(e,t)||i(e.isAsyncPlaceholder)&&r(t.asyncFactory.error))}function Jo(e,t){if("input"!==e.tag)return!0;var n,r=a(n=e.data)&&a(n=n.attrs)&&n.type,i=a(n=t.data)&&a(n=n.attrs)&&n.type;return r===i||Oo(r)&&Oo(i)}function Zo(e,t,n){var r,i,o={};for(r=t;r<=n;++r)a(i=e[r].key)&&(o[i]=r);return o}function qo(e){var n,o,c={},l=e.modules,u=e.nodeOps;for(n=0;n<zo.length;++n)for(c[zo[n]]=[],o=0;o<l.length;++o)a(l[o][zo[n]])&&c[zo[n]].push(l[o][zo[n]]);function d(e){return new we(u.tagName(e).toLowerCase(),{},[],void 0,e)}function f(e,t){function n(){0==--n.listeners&&v(e)}return n.listeners=t,n}function v(e){var t=u.parentNode(e);a(t)&&u.removeChild(t,e)}function m(e,t){return!t&&!e.ns&&!(J.ignoredElements.length&&J.ignoredElements.some((function(t){return p(t)?t.test(e.tag):t===e.tag})))&&J.isUnknownElement(e.tag)}var h=0;function g(e,t,n,r,o,s,c){if(a(e.elm)&&a(s)&&(e=s[c]=xe(e)),e.isRootInsert=!o,!y(e,t,n,r)){var l=e.data,d=e.children,f=e.tag;a(f)?(l&&l.pre&&h++,m(e,h)&&ii("Unknown custom element: <"+f+'> - did you register the component correctly? For recursive components, make sure to provide the "name" option.',e.context),e.elm=e.ns?u.createElementNS(e.ns,f):u.createElement(f,e),M(e),k(e,d,t),a(l)&&D(e,t),C(n,e.elm,r),l&&l.pre&&h--):i(e.isComment)?(e.elm=u.createComment(e.text),C(n,e.elm,r)):(e.elm=u.createTextNode(e.text),C(n,e.elm,r))}}function y(e,t,n,r){var o=e.data;if(a(o)){var s=a(e.componentInstance)&&o.keepAlive;if(a(o=o.hook)&&a(o=o.init)&&o(e,!1),a(e.componentInstance))return _(e,t),C(n,e.elm,r),i(s)&&w(e,t,n,r),!0}}function _(e,t){a(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,x(e)?(D(e,t),M(e)):(Bo(e),t.push(e))}function w(e,t,n,r){for(var i,o=e;o.componentInstance;)if(a(i=(o=o.componentInstance._vnode).data)&&a(i=i.transition)){for(i=0;i<c.activate.length;++i)c.activate[i](Wo,o);t.push(o);break}C(n,e.elm,r)}function C(e,t,n){a(e)&&(a(n)?u.parentNode(n)===e&&u.insertBefore(e,t,n):u.appendChild(e,t))}function k(e,n,r){if(t(n)){E(n);for(var a=0;a<n.length;++a)g(n[a],r,e.elm,null,!0,n,a)}else s(e.text)&&u.appendChild(e.elm,u.createTextNode(String(e.text)))}function x(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return a(e.tag)}function D(e,t){for(var r=0;r<c.create.length;++r)c.create[r](Wo,e);a(n=e.data.hook)&&(a(n.create)&&n.create(Wo,e),a(n.insert)&&t.push(e))}function M(e){var t;if(a(t=e.fnScopeId))u.setStyleScope(e.elm,t);else for(var n=e;n;)a(t=n.context)&&a(t=t.$options._scopeId)&&u.setStyleScope(e.elm,t),n=n.parent;a(t=zn)&&t!==e.context&&t!==e.fnContext&&a(t=t.$options._scopeId)&&u.setStyleScope(e.elm,t)}function O(e,t,n,r,a,i){for(;r<=a;++r)g(n[r],i,e,t,!1,n,r)}function S(e){var t,n,r=e.data;if(a(r))for(a(t=r.hook)&&a(t=t.destroy)&&t(e),t=0;t<c.destroy.length;++t)c.destroy[t](e);if(a(t=e.children))for(n=0;n<e.children.length;++n)S(e.children[n])}function j(e,t,n){for(;t<=n;++t){var r=e[t];a(r)&&(a(r.tag)?(T(r),S(r)):v(r.elm))}}function T(e,t){if(a(t)||a(e.data)){var n,r=c.remove.length+1;for(a(t)?t.listeners+=r:t=f(e.elm,r),a(n=e.componentInstance)&&a(n=n._vnode)&&a(n.data)&&T(n,t),n=0;n<c.remove.length;++n)c.remove[n](e,t);a(n=e.data.hook)&&a(n=n.remove)?n(e,t):t()}else v(e.elm)}function $(e,t,n,i,o){var s,c,l,d=0,f=0,p=t.length-1,v=t[0],m=t[p],h=n.length-1,y=n[0],b=n[h],_=!o;for(E(n);d<=p&&f<=h;)r(v)?v=t[++d]:r(m)?m=t[--p]:Ko(v,y)?(P(v,y,i,n,f),v=t[++d],y=n[++f]):Ko(m,b)?(P(m,b,i,n,h),m=t[--p],b=n[--h]):Ko(v,b)?(P(v,b,i,n,h),_&&u.insertBefore(e,v.elm,u.nextSibling(m.elm)),v=t[++d],b=n[--h]):Ko(m,y)?(P(m,y,i,n,f),_&&u.insertBefore(e,m.elm,v.elm),m=t[--p],y=n[++f]):(r(s)&&(s=Zo(t,d,p)),r(c=a(y.key)?s[y.key]:A(y,t,d,p))?g(y,i,e,v.elm,!1,n,f):Ko(l=t[c],y)?(P(l,y,i,n,f),t[c]=void 0,_&&u.insertBefore(e,l.elm,v.elm)):g(y,i,e,v.elm,!1,n,f),y=n[++f]);d>p?O(e,r(n[h+1])?null:n[h+1].elm,n,f,h,i):f>h&&j(t,d,p)}function E(e){for(var t={},n=0;n<e.length;n++){var r=e[n],i=r.key;a(i)&&(t[i]?ii("Duplicate keys detected: '".concat(i,"'. This may cause an update error."),r.context):t[i]=!0)}}function A(e,t,n,r){for(var i=n;i<r;i++){var o=t[i];if(a(o)&&Ko(e,o))return i}}function P(e,t,n,o,s,l){if(e!==t){a(t.elm)&&a(o)&&(t=o[s]=xe(t));var d=t.elm=e.elm;if(i(e.isAsyncPlaceholder))a(t.asyncFactory.resolved)?L(e.elm,t,n):t.isAsyncPlaceholder=!0;else if(i(t.isStatic)&&i(e.isStatic)&&t.key===e.key&&(i(t.isCloned)||i(t.isOnce)))t.componentInstance=e.componentInstance;else{var f,p=t.data;a(p)&&a(f=p.hook)&&a(f=f.prepatch)&&f(e,t);var v=e.children,m=t.children;if(a(p)&&x(t)){for(f=0;f<c.update.length;++f)c.update[f](e,t);a(f=p.hook)&&a(f=f.update)&&f(e,t)}r(t.text)?a(v)&&a(m)?v!==m&&$(d,v,m,n,l):a(m)?(E(m),a(e.text)&&u.setTextContent(d,""),O(d,null,m,0,m.length-1,n)):a(v)?j(v,0,v.length-1):a(e.text)&&u.setTextContent(d,""):e.text!==t.text&&u.setTextContent(d,t.text),a(p)&&a(f=p.hook)&&a(f=f.postpatch)&&f(e,t)}}}function I(e,t,n){if(i(n)&&a(e.parent))e.parent.data.pendingInsert=t;else for(var r=0;r<t.length;++r)t[r].data.hook.insert(t[r])}var F=!1,N=b("attrs,class,staticClass,staticStyle,key");function L(e,t,n,r){var o,s=t.tag,c=t.data,l=t.children;if(r=r||c&&c.pre,t.elm=e,i(t.isComment)&&a(t.asyncFactory))return t.isAsyncPlaceholder=!0,!0;if(!R(e,t,r))return!1;if(a(c)&&(a(o=c.hook)&&a(o=o.init)&&o(t,!0),a(o=t.componentInstance)))return _(t,n),!0;if(a(s)){if(a(l))if(e.hasChildNodes())if(a(o=c)&&a(o=o.domProps)&&a(o=o.innerHTML)){if(o!==e.innerHTML)return"undefined"==typeof console||F||(F=!0,console.warn("Parent: ",e),console.warn("server innerHTML: ",o),console.warn("client innerHTML: ",e.innerHTML)),!1}else{for(var u=!0,d=e.firstChild,f=0;f<l.length;f++){if(!d||!L(d,l[f],n,r)){u=!1;break}d=d.nextSibling}if(!u||d)return"undefined"==typeof console||F||(F=!0,console.warn("Parent: ",e),console.warn("Mismatching childNodes vs. VNodes: ",e.childNodes,l)),!1}else k(t,l,n);if(a(c)){var p=!1;for(var v in c)if(!N(v)){p=!0,D(t,n);break}!p&&c.class&&ya(c.class)}}else e.data!==t.text&&(e.data=t.text);return!0}function R(e,t,n){return a(t.tag)?0===t.tag.indexOf("vue-component")||!m(t,n)&&t.tag.toLowerCase()===(e.tagName&&e.tagName.toLowerCase()):e.nodeType===(t.isComment?8:3)}return function(e,t,n,o){if(!r(t)){var s=!1,l=[];if(r(e))s=!0,g(t,l);else{var f=a(e.nodeType);if(!f&&Ko(e,t))P(e,t,l,null,null,o);else{if(f){if(1===e.nodeType&&e.hasAttribute(W)&&(e.removeAttribute(W),n=!0),i(n)){if(L(e,t,l))return I(t,l,!0),e;ii("The client-side rendered virtual DOM tree is not matching server-rendered content. This is likely caused by incorrect HTML markup, for example nesting block-level elements inside <p>, or missing <tbody>. Bailing hydration and performing full client-side render.")}e=d(e)}var p=e.elm,v=u.parentNode(p);if(g(t,l,p._leaveCb?null:v,u.nextSibling(p)),a(t.parent))for(var m=t.parent,h=x(t);m;){for(var y=0;y<c.destroy.length;++y)c.destroy[y](m);if(m.elm=t.elm,h){for(var b=0;b<c.create.length;++b)c.create[b](Wo,m);var _=m.data.hook.insert;if(_.merged)for(var w=_.fns.slice(1),C=0;C<w.length;C++)w[C]()}else Bo(m);m=m.parent}a(v)?j([e],0,0):a(e.tag)&&S(e)}}return I(t,l,s),t.elm}a(e)&&S(e)}}var Qo={create:Go,update:Go,destroy:function(e){Go(e,Wo)}};function Go(e,t){(e.data.directives||t.data.directives)&&Xo(e,t)}function Xo(e,t){var n,r,a,i=e===Wo,o=t===Wo,s=ts(e.data.directives,e.context),c=ts(t.data.directives,t.context),l=[],u=[];for(n in c)r=s[n],a=c[n],r?(a.oldValue=r.value,a.oldArg=r.arg,rs(a,"update",t,e),a.def&&a.def.componentUpdated&&u.push(a)):(rs(a,"bind",t,e),a.def&&a.def.inserted&&l.push(a));if(l.length){var d=function(){for(var n=0;n<l.length;n++)rs(l[n],"inserted",t,e)};i?Pt(t,"insert",d):d()}if(u.length&&Pt(t,"postpatch",(function(){for(var n=0;n<u.length;n++)rs(u[n],"componentUpdated",t,e)})),!i)for(n in s)c[n]||rs(s[n],"unbind",e,e,o)}var es=Object.create(null);function ts(e,t){var n,r,a=Object.create(null);if(!e)return a;for(n=0;n<e.length;n++){if((r=e[n]).modifiers||(r.modifiers=es),a[ns(r)]=r,t._setupState&&t._setupState.__sfc){var i=r.def||Di(t,"_setupState","v-"+r.name);r.def="function"==typeof i?{bind:i,update:i}:i}r.def=r.def||Di(t.$options,"directives",r.name,!0)}return a}function ns(e){return e.rawName||"".concat(e.name,".").concat(Object.keys(e.modifiers||{}).join("."))}function rs(e,t,n,r,a){var i=e.def&&e.def[t];if(i)try{i(n.elm,e,n,r,a)}catch(r){Ir(r,n.context,"directive ".concat(e.name," ").concat(t," hook"))}}var as=[Uo,Qo];function is(e,t){var n=t.componentOptions;if(!(a(n)&&!1===n.Ctor.options.inheritAttrs||r(e.data.attrs)&&r(t.data.attrs))){var o,s,c=t.elm,l=e.data.attrs||{},u=t.data.attrs||{};for(o in(a(u.__ob__)||i(u._v_attr_proxy))&&(u=t.data.attrs=I({},u)),u)s=u[o],l[o]!==s&&os(c,o,s,t.data.pre);for(o in(re||ie)&&u.value!==l.value&&os(c,"value",u.value),l)r(u[o])&&(co(o)?c.removeAttributeNS(so,lo(o)):ro(o)||c.removeAttribute(o))}}function os(e,t,n,r){r||e.tagName.indexOf("-")>-1?ss(e,t,n):oo(t)?uo(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):ro(t)?e.setAttribute(t,io(t,n)):co(t)?uo(n)?e.removeAttributeNS(so,lo(t)):e.setAttributeNS(so,t,n):ss(e,t,n)}function ss(e,t,n){if(uo(n))e.removeAttribute(t);else{if(re&&!ae&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var cs={create:is,update:is};function ls(e,t){var n=t.elm,i=t.data,o=e.data;if(!(r(i.staticClass)&&r(i.class)&&(r(o)||r(o.staticClass)&&r(o.class)))){var s=fo(t),c=n._transitionClasses;a(c)&&(s=mo(s,ho(c))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var us,ds,fs,ps,vs,ms,hs,gs={create:ls,update:ls},ys=/[\w).+\-_$\]]/;function bs(e){var t,n,r,a,i,o=!1,s=!1,c=!1,l=!1,u=0,d=0,f=0,p=0;for(r=0;r<e.length;r++)if(n=t,t=e.charCodeAt(r),o)39===t&&92!==n&&(o=!1);else if(s)34===t&&92!==n&&(s=!1);else if(c)96===t&&92!==n&&(c=!1);else if(l)47===t&&92!==n&&(l=!1);else if(124!==t||124===e.charCodeAt(r+1)||124===e.charCodeAt(r-1)||u||d||f){switch(t){case 34:s=!0;break;case 39:o=!0;break;case 96:c=!0;break;case 40:f++;break;case 41:f--;break;case 91:d++;break;case 93:d--;break;case 123:u++;break;case 125:u--}if(47===t){for(var v=r-1,m=void 0;v>=0&&" "===(m=e.charAt(v));v--);m&&ys.test(m)||(l=!0)}}else void 0===a?(p=r+1,a=e.slice(0,r).trim()):h();function h(){(i||(i=[])).push(e.slice(p,r).trim()),p=r+1}if(void 0===a?a=e.slice(0,r).trim():0!==p&&h(),i)for(r=0;r<i.length;r++)a=_s(a,i[r]);return a}function _s(e,t){var n=t.indexOf("(");if(n<0)return'_f("'.concat(t,'")(').concat(e,")");var r=t.slice(0,n),a=t.slice(n+1);return'_f("'.concat(r,'")(').concat(e).concat(")"!==a?","+a:a)}function ws(e,t){console.error("[Vue compiler]: ".concat(e))}function Cs(e,t){return e?e.map((function(e){return e[t]})).filter((function(e){return e})):[]}function ks(e,t,n,r,a){(e.props||(e.props=[])).push(As({name:t,value:n,dynamic:a},r)),e.plain=!1}function xs(e,t,n,r,a){(a?e.dynamicAttrs||(e.dynamicAttrs=[]):e.attrs||(e.attrs=[])).push(As({name:t,value:n,dynamic:a},r)),e.plain=!1}function Ds(e,t,n,r){e.attrsMap[t]=n,e.attrsList.push(As({name:t,value:n},r))}function Ms(e,t,n,r,a,i,o,s){(e.directives||(e.directives=[])).push(As({name:t,rawName:n,value:r,arg:a,isDynamicArg:i,modifiers:o},s)),e.plain=!1}function Os(e,t,n){return n?"_p(".concat(t,',"').concat(e,'")'):e+t}function Ss(t,n,r,a,i,o,s,c){var l;a=a||e,o&&a.prevent&&a.passive&&o("passive and prevent can't be used together. Passive handler can't prevent default event.",s),a.right?c?n="(".concat(n,")==='click'?'contextmenu':(").concat(n,")"):"click"===n&&(n="contextmenu",delete a.right):a.middle&&(c?n="(".concat(n,")==='click'?'mouseup':(").concat(n,")"):"click"===n&&(n="mouseup")),a.capture&&(delete a.capture,n=Os("!",n,c)),a.once&&(delete a.once,n=Os("~",n,c)),a.passive&&(delete a.passive,n=Os("&",n,c)),a.native?(delete a.native,l=t.nativeEvents||(t.nativeEvents={})):l=t.events||(t.events={});var u=As({value:r.trim(),dynamic:c},s);a!==e&&(u.modifiers=a);var d=l[n];Array.isArray(d)?i?d.unshift(u):d.push(u):l[n]=d?i?[u,d]:[d,u]:u,t.plain=!1}function js(e,t){return e.rawAttrsMap[":"+t]||e.rawAttrsMap["v-bind:"+t]||e.rawAttrsMap[t]}function Ts(e,t,n){var r=$s(e,":"+t)||$s(e,"v-bind:"+t);if(null!=r)return bs(r);if(!1!==n){var a=$s(e,t);if(null!=a)return JSON.stringify(a)}}function $s(e,t,n){var r;if(null!=(r=e.attrsMap[t]))for(var a=e.attrsList,i=0,o=a.length;i<o;i++)if(a[i].name===t){a.splice(i,1);break}return n&&delete e.attrsMap[t],r}function Es(e,t){for(var n=e.attrsList,r=0,a=n.length;r<a;r++){var i=n[r];if(t.test(i.name))return n.splice(r,1),i}}function As(e,t){return t&&(null!=t.start&&(e.start=t.start),null!=t.end&&(e.end=t.end)),e}function Ps(e,t,n){var r=n||{},a=r.number,i="$$v",o=i;r.trim&&(o="(typeof ".concat(i," === 'string'")+"? ".concat(i,".trim()")+": ".concat(i,")")),a&&(o="_n(".concat(o,")"));var s=Is(t,o);e.model={value:"(".concat(t,")"),expression:JSON.stringify(t),callback:"function (".concat(i,") {").concat(s,"}")}}function Is(e,t){var n=Fs(e);return null===n.key?"".concat(e,"=").concat(t):"$set(".concat(n.exp,", ").concat(n.key,", ").concat(t,")")}function Fs(e){if(e=e.trim(),us=e.length,e.indexOf("[")<0||e.lastIndexOf("]")<us-1)return(ps=e.lastIndexOf("."))>-1?{exp:e.slice(0,ps),key:'"'+e.slice(ps+1)+'"'}:{exp:e,key:null};for(ds=e,ps=vs=ms=0;!Ls();)Rs(fs=Ns())?Ys(fs):91===fs&&Hs(fs);return{exp:e.slice(0,vs),key:e.slice(vs+1,ms)}}function Ns(){return ds.charCodeAt(++ps)}function Ls(){return ps>=us}function Rs(e){return 34===e||39===e}function Hs(e){var t=1;for(vs=ps;!Ls();)if(Rs(e=Ns()))Ys(e);else if(91===e&&t++,93===e&&t--,0===t){ms=ps;break}}function Ys(e){for(var t=e;!Ls()&&(e=Ns())!==t;);}var Us,Bs="__r",Vs="__c";function Ws(e,t,n){hs=n;var r=t.value,a=t.modifiers,i=e.tag,o=e.attrsMap.type;if("input"===i&&"file"===o&&hs("<".concat(e.tag,' v-model="').concat(r,'" type="file">:\n')+"File inputs are read only. Use a v-on:change listener instead.",e.rawAttrsMap["v-model"]),e.component)return Ps(e,r,a),!1;if("select"===i)Js(e,r,a);else if("input"===i&&"checkbox"===o)zs(e,r,a);else if("input"===i&&"radio"===o)Ks(e,r,a);else if("input"===i||"textarea"===i)Zs(e,r,a);else{if(!J.isReservedTag(i))return Ps(e,r,a),!1;hs("<".concat(e.tag,' v-model="').concat(r,'">: ')+"v-model is not supported on this element type. If you are working with contenteditable, it's recommended to wrap a library dedicated for that purpose inside a custom component.",e.rawAttrsMap["v-model"])}return!0}function zs(e,t,n){var r=n&&n.number,a=Ts(e,"value")||"null",i=Ts(e,"true-value")||"true",o=Ts(e,"false-value")||"false";ks(e,"checked","Array.isArray(".concat(t,")")+"?_i(".concat(t,",").concat(a,")>-1")+("true"===i?":(".concat(t,")"):":_q(".concat(t,",").concat(i,")"))),Ss(e,"change","var $$a=".concat(t,",")+"$$el=$event.target,"+"$$c=$$el.checked?(".concat(i,"):(").concat(o,");")+"if(Array.isArray($$a)){"+"var $$v=".concat(r?"_n("+a+")":a,",")+"$$i=_i($$a,$$v);"+"if($$el.checked){$$i<0&&(".concat(Is(t,"$$a.concat([$$v])"),")}")+"else{$$i>-1&&(".concat(Is(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))"),")}")+"}else{".concat(Is(t,"$$c"),"}"),null,!0)}function Ks(e,t,n){var r=n&&n.number,a=Ts(e,"value")||"null";a=r?"_n(".concat(a,")"):a,ks(e,"checked","_q(".concat(t,",").concat(a,")")),Ss(e,"change",Is(t,a),null,!0)}function Js(e,t,n){var r=n&&n.number,a='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;'+"return ".concat(r?"_n(val)":"val","})"),i="$event.target.multiple ? $$selectedVal : $$selectedVal[0]",o="var $$selectedVal = ".concat(a,";");Ss(e,"change",o="".concat(o," ").concat(Is(t,i)),null,!0)}function Zs(e,t,n){var r=e.attrsMap.type,a=e.attrsMap["v-bind:value"]||e.attrsMap[":value"],i=e.attrsMap["v-bind:type"]||e.attrsMap[":type"];if(a&&!i){var o=e.attrsMap["v-bind:value"]?"v-bind:value":":value";hs("".concat(o,'="').concat(a,'" conflicts with v-model on the same element ')+"because the latter already expands to a value binding internally",e.rawAttrsMap[o])}var s=n||{},c=s.lazy,l=s.number,u=s.trim,d=!c&&"range"!==r,f=c?"change":"range"===r?Bs:"input",p="$event.target.value";u&&(p="$event.target.value.trim()"),l&&(p="_n(".concat(p,")"));var v=Is(t,p);d&&(v="if($event.target.composing)return;".concat(v)),ks(e,"value","(".concat(t,")")),Ss(e,f,v,null,!0),(u||l)&&Ss(e,"blur","$forceUpdate()")}function qs(e){if(a(e[Bs])){var t=re?"change":"input";e[t]=[].concat(e[Bs],e[t]||[]),delete e[Bs]}a(e[Vs])&&(e.change=[].concat(e[Vs],e.change||[]),delete e[Vs])}function Qs(e,t,n){var r=Us;return function a(){null!==t.apply(null,arguments)&&ec(e,a,n,r)}}var Gs=Hr&&!(ce&&Number(ce[1])<=53);function Xs(e,t,n,r){if(Gs){var a=fr,i=t;t=i._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=a||e.timeStamp<=0||e.target.ownerDocument!==document)return i.apply(this,arguments)}}Us.addEventListener(e,t,ue?{capture:n,passive:r}:n)}function ec(e,t,n,r){(r||Us).removeEventListener(e,t._wrapper||t,n)}function tc(e,t){if(!r(e.data.on)||!r(t.data.on)){var n=t.data.on||{},a=e.data.on||{};Us=t.elm||e.elm,qs(n),At(n,a,Xs,ec,Qs,t.context),Us=void 0}}var nc,rc={create:tc,update:tc,destroy:function(e){return tc(e,Wo)}};function ac(e,t){if(!r(e.data.domProps)||!r(t.data.domProps)){var n,o,s=t.elm,c=e.data.domProps||{},l=t.data.domProps||{};for(n in(a(l.__ob__)||i(l._v_attr_proxy))&&(l=t.data.domProps=I({},l)),c)n in l||(s[n]="");for(n in l){if(o=l[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),o===c[n])continue;1===s.childNodes.length&&s.removeChild(s.childNodes[0])}if("value"===n&&"PROGRESS"!==s.tagName){s._value=o;var u=r(o)?"":String(o);ic(s,u)&&(s.value=u)}else if("innerHTML"===n&&wo(s.tagName)&&r(s.innerHTML)){(nc=nc||document.createElement("div")).innerHTML="<svg>".concat(o,"</svg>");for(var d=nc.firstChild;s.firstChild;)s.removeChild(s.firstChild);for(;d.firstChild;)s.appendChild(d.firstChild)}else if(o!==c[n])try{s[n]=o}catch(e){}}}}function ic(e,t){return!e.composing&&("OPTION"===e.tagName||oc(e,t)||sc(e,t))}function oc(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}function sc(e,t){var n=e.value,r=e._vModifiers;if(a(r)){if(r.number)return y(n)!==y(t);if(r.trim)return n.trim()!==t.trim()}return n!==t}var cc={create:ac,update:ac},lc=D((function(e){var t={},n=/;(?![^(]*\))/g,r=/:(.+)/;return e.split(n).forEach((function(e){if(e){var n=e.split(r);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}));function uc(e){var t=dc(e.style);return e.staticStyle?I(e.staticStyle,t):t}function dc(e){return Array.isArray(e)?F(e):"string"==typeof e?lc(e):e}function fc(e,t){var n,r={};if(t)for(var a=e;a.componentInstance;)(a=a.componentInstance._vnode)&&a.data&&(n=uc(a.data))&&I(r,n);(n=uc(e.data))&&I(r,n);for(var i=e;i=i.parent;)i.data&&(n=uc(i.data))&&I(r,n);return r}var pc,vc=/^--/,mc=/\s*!important$/,hc=function(e,t,n){if(vc.test(t))e.style.setProperty(t,n);else if(mc.test(n))e.style.setProperty(T(t),n.replace(mc,""),"important");else{var r=yc(t);if(Array.isArray(n))for(var a=0,i=n.length;a<i;a++)e.style[r]=n[a];else e.style[r]=n}},gc=["Webkit","Moz","ms"],yc=D((function(e){if(pc=pc||document.createElement("div").style,"filter"!==(e=O(e))&&e in pc)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<gc.length;n++){var r=gc[n]+t;if(r in pc)return r}}));function bc(e,t){var n=t.data,i=e.data;if(!(r(n.staticStyle)&&r(n.style)&&r(i.staticStyle)&&r(i.style))){var o,s,c=t.elm,l=i.staticStyle,u=i.normalizedStyle||i.style||{},d=l||u,f=dc(t.data.style)||{};t.data.normalizedStyle=a(f.__ob__)?I({},f):f;var p=fc(t,!0);for(s in d)r(p[s])&&hc(c,s,"");for(s in p)o=p[s],hc(c,s,null==o?"":o)}}var _c={create:bc,update:bc},wc=/\s+/;function Cc(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(wc).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" ".concat(e.getAttribute("class")||""," ");n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function kc(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(wc).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" ".concat(e.getAttribute("class")||""," "),r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function xc(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&I(t,Dc(e.name||"v")),I(t,e),t}return"string"==typeof e?Dc(e):void 0}}var Dc=D((function(e){return{enterClass:"".concat(e,"-enter"),enterToClass:"".concat(e,"-enter-to"),enterActiveClass:"".concat(e,"-enter-active"),leaveClass:"".concat(e,"-leave"),leaveToClass:"".concat(e,"-leave-to"),leaveActiveClass:"".concat(e,"-leave-active")}})),Mc=te&&!ae,Oc="transition",Sc="animation",jc="transition",Tc="transitionend",$c="animation",Ec="animationend";Mc&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(jc="WebkitTransition",Tc="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&($c="WebkitAnimation",Ec="webkitAnimationEnd"));var Ac=te?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Pc(e){Ac((function(){Ac(e)}))}function Ic(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),Cc(e,t))}function Fc(e,t){e._transitionClasses&&C(e._transitionClasses,t),kc(e,t)}function Nc(e,t,n){var r=Rc(e,t),a=r.type,i=r.timeout,o=r.propCount;if(!a)return n();var s=a===Oc?Tc:Ec,c=0,l=function(){e.removeEventListener(s,u),n()},u=function(t){t.target===e&&++c>=o&&l()};setTimeout((function(){c<o&&l()}),i+1),e.addEventListener(s,u)}var Lc=/\b(transform|all)(,|$)/;function Rc(e,t){var n,r=window.getComputedStyle(e),a=(r[jc+"Delay"]||"").split(", "),i=(r[jc+"Duration"]||"").split(", "),o=Hc(a,i),s=(r[$c+"Delay"]||"").split(", "),c=(r[$c+"Duration"]||"").split(", "),l=Hc(s,c),u=0,d=0;return t===Oc?o>0&&(n=Oc,u=o,d=i.length):t===Sc?l>0&&(n=Sc,u=l,d=c.length):d=(n=(u=Math.max(o,l))>0?o>l?Oc:Sc:null)?n===Oc?i.length:c.length:0,{type:n,timeout:u,propCount:d,hasTransform:n===Oc&&Lc.test(r[jc+"Property"])}}function Hc(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max.apply(null,t.map((function(t,n){return Yc(t)+Yc(e[n])})))}function Yc(e){return 1e3*Number(e.slice(0,-1).replace(",","."))}function Uc(e,t){var n=e.elm;a(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._leaveCb());var i=xc(e.data.transition);if(!r(i)&&!a(n._enterCb)&&1===n.nodeType){for(var o=i.css,s=i.type,u=i.enterClass,d=i.enterToClass,f=i.enterActiveClass,p=i.appearClass,v=i.appearToClass,m=i.appearActiveClass,h=i.beforeEnter,g=i.enter,b=i.afterEnter,_=i.enterCancelled,w=i.beforeAppear,C=i.appear,k=i.afterAppear,x=i.appearCancelled,D=i.duration,M=zn,O=zn.$vnode;O&&O.parent;)M=O.context,O=O.parent;var S=!M._isMounted||!e.isRootInsert;if(!S||C||""===C){var j=S&&p?p:u,T=S&&m?m:f,$=S&&v?v:d,E=S&&w||h,A=S&&c(C)?C:g,P=S&&k||b,I=S&&x||_,F=y(l(D)?D.enter:D);null!=F&&Vc(F,"enter",e);var N=!1!==o&&!ae,L=zc(A),R=n._enterCb=B((function(){N&&(Fc(n,$),Fc(n,T)),R.cancelled?(N&&Fc(n,j),I&&I(n)):P&&P(n),n._enterCb=null}));e.data.show||Pt(e,"insert",(function(){var t=n.parentNode,r=t&&t._pending&&t._pending[e.key];r&&r.tag===e.tag&&r.elm._leaveCb&&r.elm._leaveCb(),A&&A(n,R)})),E&&E(n),N&&(Ic(n,j),Ic(n,T),Pc((function(){Fc(n,j),R.cancelled||(Ic(n,$),L||(Wc(F)?setTimeout(R,F):Nc(n,s,R)))}))),e.data.show&&(t&&t(),A&&A(n,R)),N||L||R()}}}function Bc(e,t){var n=e.elm;a(n._enterCb)&&(n._enterCb.cancelled=!0,n._enterCb());var i=xc(e.data.transition);if(r(i)||1!==n.nodeType)return t();if(!a(n._leaveCb)){var o=i.css,s=i.type,c=i.leaveClass,u=i.leaveToClass,d=i.leaveActiveClass,f=i.beforeLeave,p=i.leave,v=i.afterLeave,m=i.leaveCancelled,h=i.delayLeave,g=i.duration,b=!1!==o&&!ae,_=zc(p),w=y(l(g)?g.leave:g);a(w)&&Vc(w,"leave",e);var C=n._leaveCb=B((function(){n.parentNode&&n.parentNode._pending&&(n.parentNode._pending[e.key]=null),b&&(Fc(n,u),Fc(n,d)),C.cancelled?(b&&Fc(n,c),m&&m(n)):(t(),v&&v(n)),n._leaveCb=null}));h?h(k):k()}function k(){C.cancelled||(!e.data.show&&n.parentNode&&((n.parentNode._pending||(n.parentNode._pending={}))[e.key]=e),f&&f(n),b&&(Ic(n,c),Ic(n,d),Pc((function(){Fc(n,c),C.cancelled||(Ic(n,u),_||(Wc(w)?setTimeout(C,w):Nc(n,s,C)))}))),p&&p(n,C),b||_||C())}}function Vc(e,t,n){"number"!=typeof e?ii("<transition> explicit ".concat(t," duration is not a valid number - ")+"got ".concat(JSON.stringify(e),"."),n.context):isNaN(e)&&ii("<transition> explicit ".concat(t," duration is NaN - ")+"the duration expression might be incorrect.",n.context)}function Wc(e){return"number"==typeof e&&!isNaN(e)}function zc(e){if(r(e))return!1;var t=e.fns;return a(t)?zc(Array.isArray(t)?t[0]:t):(e._length||e.length)>1}function Kc(e,t){!0!==t.data.show&&Uc(t)}var Jc=[cs,gs,rc,cc,_c,te?{create:Kc,activate:Kc,remove:function(e,t){!0!==e.data.show?Bc(e,t):t()}}:{}].concat(as),Zc=qo({nodeOps:Yo,modules:Jc});ae&&document.addEventListener("selectionchange",(function(){var e=document.activeElement;e&&e.vmodel&&rl(e,"input")}));var qc={inserted:function(e,t,n,r){"select"===n.tag?(r.elm&&!r.elm._vOptions?Pt(n,"postpatch",(function(){qc.componentUpdated(e,t,n)})):Qc(e,t,n.context),e._vOptions=[].map.call(e.options,el)):("textarea"===n.tag||Oo(e.type))&&(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener("compositionstart",tl),e.addEventListener("compositionend",nl),e.addEventListener("change",nl),ae&&(e.vmodel=!0)))},componentUpdated:function(e,t,n){if("select"===n.tag){Qc(e,t,n.context);var r=e._vOptions,a=e._vOptions=[].map.call(e.options,el);a.some((function(e,t){return!Y(e,r[t])}))&&(e.multiple?t.value.some((function(e){return Xc(e,a)})):t.value!==t.oldValue&&Xc(t.value,a))&&rl(e,"change")}}};function Qc(e,t,n){Gc(e,t,n),(re||ie)&&setTimeout((function(){Gc(e,t,n)}),0)}function Gc(e,t,n){var r=t.value,a=e.multiple;if(!a||Array.isArray(r)){for(var i,o,s=0,c=e.options.length;s<c;s++)if(o=e.options[s],a)i=U(r,el(o))>-1,o.selected!==i&&(o.selected=i);else if(Y(el(o),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));a||(e.selectedIndex=-1)}else ii('<select multiple v-model="'.concat(t.expression,'"> ')+"expects an Array value for its binding, but got ".concat(Object.prototype.toString.call(r).slice(8,-1)),n)}function Xc(e,t){return t.every((function(t){return!Y(t,e)}))}function el(e){return"_value"in e?e._value:e.value}function tl(e){e.target.composing=!0}function nl(e){e.target.composing&&(e.target.composing=!1,rl(e.target,"input"))}function rl(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function al(e){return!e.componentInstance||e.data&&e.data.transition?e:al(e.componentInstance._vnode)}var il={model:qc,show:{bind:function(e,t,n){var r=t.value,a=(n=al(n)).data&&n.data.transition,i=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&a?(n.data.show=!0,Uc(n,(function(){e.style.display=i}))):e.style.display=r?i:"none"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=al(n)).data&&n.data.transition?(n.data.show=!0,r?Uc(n,(function(){e.style.display=e.__vOriginalDisplay})):Bc(n,(function(){e.style.display="none"}))):e.style.display=r?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,r,a){a||(e.style.display=e.__vOriginalDisplay)}}},ol={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function sl(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?sl(Pn(t.children)):e}function cl(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var a=n._parentListeners;for(var r in a)t[O(r)]=a[r];return t}function ll(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}function ul(e){for(;e=e.parent;)if(e.data.transition)return!0}function dl(e,t){return t.key===e.key&&t.tag===e.tag}var fl=function(e){return e.tag||dn(e)},pl=function(e){return"show"===e.name},vl={name:"transition",props:ol,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(fl)).length){n.length>1&&ii("<transition> can only be used on a single element. Use <transition-group> for lists.",this.$parent);var r=this.mode;r&&"in-out"!==r&&"out-in"!==r&&ii("invalid <transition> mode: "+r,this.$parent);var a=n[0];if(ul(this.$vnode))return a;var i=sl(a);if(!i)return a;if(this._leaving)return ll(e,a);var o="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?o+"comment":o+i.tag:s(i.key)?0===String(i.key).indexOf(o)?i.key:o+i.key:i.key;var c=(i.data||(i.data={})).transition=cl(this),l=this._vnode,u=sl(l);if(i.data.directives&&i.data.directives.some(pl)&&(i.data.show=!0),u&&u.data&&!dl(i,u)&&!dn(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var d=u.data.transition=I({},c);if("out-in"===r)return this._leaving=!0,Pt(d,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),ll(e,a);if("in-out"===r){if(dn(i))return l;var f,p=function(){f()};Pt(c,"afterEnter",p),Pt(c,"enterCancelled",p),Pt(d,"delayLeave",(function(e){f=e}))}}return a}}},ml=I({tag:String,moveClass:String},ol);function hl(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function gl(e){e.data.newPos=e.elm.getBoundingClientRect()}function yl(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,a=t.top-n.top;if(r||a){e.data.moved=!0;var i=e.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(a,"px)"),i.transitionDuration="0s"}}delete ml.mode;var bl={Transition:vl,TransitionGroup:{props:ml,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var a=Jn(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,a(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,a=this.$slots.default||[],i=this.children=[],o=cl(this),s=0;s<a.length;s++)if((f=a[s]).tag)if(null!=f.key&&0!==String(f.key).indexOf("__vlist"))i.push(f),n[f.key]=f,(f.data||(f.data={})).transition=o;else{var c=f.componentOptions,l=c?Za(c.Ctor.options)||c.tag||"":f.tag;ii("<transition-group> children must be keyed: <".concat(l,">"))}if(r){var u=[],d=[];for(s=0;s<r.length;s++){var f;(f=r[s]).data.transition=o,f.data.pos=f.elm.getBoundingClientRect(),n[f.key]?u.push(f):d.push(f)}this.kept=e(t,null,u),this.removed=d}return e(t,null,i)},updated:function(){var e=this.prevChildren,t=this.moveClass||(this.name||"v")+"-move";e.length&&this.hasMove(e[0].elm,t)&&(e.forEach(hl),e.forEach(gl),e.forEach(yl),this._reflow=document.body.offsetHeight,e.forEach((function(e){if(e.data.moved){var n=e.elm,r=n.style;Ic(n,t),r.transform=r.WebkitTransform=r.transitionDuration="",n.addEventListener(Tc,n._moveCb=function e(r){r&&r.target!==n||r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(Tc,e),n._moveCb=null,Fc(n,t))})}})))},methods:{hasMove:function(e,t){if(!Mc)return!1;if(this._hasMove)return this._hasMove;var n=e.cloneNode();e._transitionClasses&&e._transitionClasses.forEach((function(e){kc(n,e)})),Cc(n,t),n.style.display="none",this.$el.appendChild(n);var r=Rc(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}}};Hi.config.mustUseProp=no,Hi.config.isReservedTag=ko,Hi.config.isReservedAttr=eo,Hi.config.getTagNamespace=xo,Hi.config.isUnknownElement=Mo,I(Hi.options.directives,il),I(Hi.options.components,bl),Hi.prototype.__patch__=te?Zc:N,Hi.prototype.$mount=function(e,t){return Qn(this,e=e&&te?So(e):void 0,t)},te&&setTimeout((function(){J.devtools&&(pe?pe.emit("init",Hi):console[console.info?"info":"log"]("Download the Vue Devtools extension for a better development experience:\nhttps://github.com/vuejs/vue-devtools")),!1!==J.productionTip&&"undefined"!=typeof console&&console[console.info?"info":"log"]("You are running Vue in development mode.\nMake sure to turn on production mode when deploying for production.\nSee more tips at https://vuejs.org/guide/deployment.html")}),0);var _l=/\{\{((?:.|\r?\n)+?)\}\}/g,wl=/[-.*+?^${}()|[\]\/\\]/g,Cl=D((function(e){var t=e[0].replace(wl,"\\$&"),n=e[1].replace(wl,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")}));function kl(e,t){var n=t?Cl(t):_l;if(n.test(e)){for(var r,a,i,o=[],s=[],c=n.lastIndex=0;r=n.exec(e);){(a=r.index)>c&&(s.push(i=e.slice(c,a)),o.push(JSON.stringify(i)));var l=bs(r[1].trim());o.push("_s(".concat(l,")")),s.push({"@binding":l}),c=a+r[0].length}return c<e.length&&(s.push(i=e.slice(c)),o.push(JSON.stringify(i))),{expression:o.join("+"),tokens:s}}}function xl(e,t){var n=t.warn||ws,r=$s(e,"class");r&&kl(r,t.delimiters)&&n('class="'.concat(r,'": ')+'Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead. For example, instead of <div class="{{ val }}">, use <div :class="val">.',e.rawAttrsMap.class),r&&(e.staticClass=JSON.stringify(r.replace(/\s+/g," ").trim()));var a=Ts(e,"class",!1);a&&(e.classBinding=a)}function Dl(e){var t="";return e.staticClass&&(t+="staticClass:".concat(e.staticClass,",")),e.classBinding&&(t+="class:".concat(e.classBinding,",")),t}var Ml={staticKeys:["staticClass"],transformNode:xl,genData:Dl};function Ol(e,t){var n=t.warn||ws,r=$s(e,"style");r&&(kl(r,t.delimiters)&&n('style="'.concat(r,'": ')+'Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead. For example, instead of <div style="{{ val }}">, use <div :style="val">.',e.rawAttrsMap.style),e.staticStyle=JSON.stringify(lc(r)));var a=Ts(e,"style",!1);a&&(e.styleBinding=a)}function Sl(e){var t="";return e.staticStyle&&(t+="staticStyle:".concat(e.staticStyle,",")),e.styleBinding&&(t+="style:(".concat(e.styleBinding,"),")),t}var jl,Tl={staticKeys:["staticStyle"],transformNode:Ol,genData:Sl},$l={decode:function(e){return(jl=jl||document.createElement("div")).innerHTML=e,jl.textContent}},El=b("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),Al=b("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),Pl=b("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Il=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Fl=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Nl="[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(Z.source,"]*"),Ll="((?:".concat(Nl,"\\:)?").concat(Nl,")"),Rl=new RegExp("^<".concat(Ll)),Hl=/^\s*(\/?)>/,Yl=new RegExp("^<\\/".concat(Ll,"[^>]*>")),Ul=/^<!DOCTYPE [^>]+>/i,Bl=/^<!\--/,Vl=/^<!\[/,Wl=b("script,style,textarea",!0),zl={},Kl={"<":"<",">":">",""":'"',"&":"&"," ":"\n","	":"\t","'":"'"},Jl=/&(?:lt|gt|quot|amp|#39);/g,Zl=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,ql=b("pre,textarea",!0),Ql=function(e,t){return e&&ql(e)&&"\n"===t[0]};function Gl(e,t){var n=t?Zl:Jl;return e.replace(n,(function(e){return Kl[e]}))}function Xl(e,t){for(var n,r,a=[],i=t.expectHTML,o=t.isUnaryTag||L,s=t.canBeLeftOpenTag||L,c=0,l=function(){if(n=e,r&&Wl(r)){var i=0,o=r.toLowerCase(),s=zl[o]||(zl[o]=new RegExp("([\\s\\S]*?)(</"+o+"[^>]*>)","i"));w=e.replace(s,(function(e,n,r){return i=r.length,Wl(o)||"noscript"===o||(n=n.replace(/<!\--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),Ql(o,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""})),c+=e.length-w.length,e=w,p(o,c-i,c)}else{var l=e.indexOf("<");if(0===l){if(Bl.test(e)){var v=e.indexOf("--\x3e");if(v>=0)return t.shouldKeepComment&&t.comment&&t.comment(e.substring(4,v),c,c+v+3),u(v+3),"continue"}if(Vl.test(e)){var m=e.indexOf("]>");if(m>=0)return u(m+2),"continue"}var h=e.match(Ul);if(h)return u(h[0].length),"continue";var g=e.match(Yl);if(g){var y=c;return u(g[0].length),p(g[1],y,c),"continue"}var b=d();if(b)return f(b),Ql(b.tagName,e)&&u(1),"continue"}var _=void 0,w=void 0,C=void 0;if(l>=0){for(w=e.slice(l);!(Yl.test(w)||Rl.test(w)||Bl.test(w)||Vl.test(w)||(C=w.indexOf("<",1))<0);)l+=C,w=e.slice(l);_=e.substring(0,l)}l<0&&(_=e),_&&u(_.length),t.chars&&_&&t.chars(_,c-_.length,c)}if(e===n)return t.chars&&t.chars(e),!a.length&&t.warn&&t.warn('Mal-formatted tag at end of template: "'.concat(e,'"'),{start:c+e.length}),"break"};e&&"break"!==l(););function u(t){c+=t,e=e.substring(t)}function d(){var t=e.match(Rl);if(t){var n={tagName:t[1],attrs:[],start:c};u(t[0].length);for(var r=void 0,a=void 0;!(r=e.match(Hl))&&(a=e.match(Fl)||e.match(Il));)a.start=c,u(a[0].length),a.end=c,n.attrs.push(a);if(r)return n.unarySlash=r[1],u(r[0].length),n.end=c,n}}function f(e){var n=e.tagName,c=e.unarySlash;i&&("p"===r&&Pl(n)&&p(r),s(n)&&r===n&&p(n));for(var l=o(n)||!!c,u=e.attrs.length,d=new Array(u),f=0;f<u;f++){var v=e.attrs[f],m=v[3]||v[4]||v[5]||"",h="a"===n&&"href"===v[1]?t.shouldDecodeNewlinesForHref:t.shouldDecodeNewlines;d[f]={name:v[1],value:Gl(m,h)},t.outputSourceRange&&(d[f].start=v.start+v[0].match(/^\s*/).length,d[f].end=v.end)}l||(a.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:d,start:e.start,end:e.end}),r=n),t.start&&t.start(n,d,l,e.start,e.end)}function p(e,n,i){var o,s;if(null==n&&(n=c),null==i&&(i=c),e)for(s=e.toLowerCase(),o=a.length-1;o>=0&&a[o].lowerCasedTag!==s;o--);else o=0;if(o>=0){for(var l=a.length-1;l>=o;l--)(l>o||!e)&&t.warn&&t.warn("tag <".concat(a[l].tag,"> has no matching end tag."),{start:a[l].start,end:a[l].end}),t.end&&t.end(a[l].tag,n,i);a.length=o,r=o&&a[o-1].tag}else"br"===s?t.start&&t.start(e,[],!0,n,i):"p"===s&&(t.start&&t.start(e,[],!1,n,i),t.end&&t.end(e,n,i))}p()}var eu,tu,nu,ru,au,iu,ou,su,cu,lu=/^@|^v-on:/,uu=/^v-|^@|^:|^#/,du=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,fu=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,pu=/^\(|\)$/g,vu=/^\[.*\]$/,mu=/:(.*)$/,hu=/^:|^\.|^v-bind:/,gu=/\.[^.\]]+(?=[^\]]*$)/g,yu=/^v-slot(:|$)|^#/,bu=/[\r\n]/,_u=/[ \f\t\r\n]+/g,wu=/[\s"'<>\/=]/,Cu=D($l.decode),ku="_empty_";function xu(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:Wu(t),rawAttrsMap:{},parent:n,children:[]}}function Du(e,t){eu=t.warn||ws,iu=t.isPreTag||L,ou=t.mustUseProp||L,su=t.getTagNamespace||L;var n=t.isReservedTag||L;cu=function(e){return!(!(e.component||e.attrsMap[":is"]||e.attrsMap["v-bind:is"])&&(e.attrsMap.is?n(e.attrsMap.is):n(e.tag)))},nu=Cs(t.modules,"transformNode"),ru=Cs(t.modules,"preTransformNode"),au=Cs(t.modules,"postTransformNode"),tu=t.delimiters;var r,a,i=[],o=!1!==t.preserveWhitespace,s=t.whitespace,c=!1,l=!1,u=!1;function d(e,t){u||(u=!0,eu(e,t))}function f(e){if(p(e),c||e.processed||(e=Su(e,t)),i.length||e===r||(r.if&&(e.elseif||e.else)?(v(e),Fu(r,{exp:e.elseif,block:e})):d("Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.",{start:e.start})),a&&!e.forbidden)if(e.elseif||e.else)Pu(e,a);else{if(e.slotScope){var n=e.slotTarget||'"default"';(a.scopedSlots||(a.scopedSlots={}))[n]=e}a.children.push(e),e.parent=a}e.children=e.children.filter((function(e){return!e.slotScope})),p(e),e.pre&&(c=!1),iu(e.tag)&&(l=!1);for(var o=0;o<au.length;o++)au[o](e,t)}function p(e){if(!l)for(var t=void 0;(t=e.children[e.children.length-1])&&3===t.type&&" "===t.text;)e.children.pop()}function v(e){"slot"!==e.tag&&"template"!==e.tag||d("Cannot use <".concat(e.tag,"> as component root element because it may ")+"contain multiple nodes.",{start:e.start}),e.attrsMap.hasOwnProperty("v-for")&&d("Cannot use v-for on stateful component root element because it renders multiple elements.",e.rawAttrsMap["v-for"])}return Xl(e,{warn:eu,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,n,o,s,u){var d=a&&a.ns||su(e);re&&"svg"===d&&(n=qu(n));var p=xu(e,n,a);d&&(p.ns=d),t.outputSourceRange&&(p.start=s,p.end=u,p.rawAttrsMap=p.attrsList.reduce((function(e,t){return e[t.name]=t,e}),{})),n.forEach((function(e){wu.test(e.name)&&eu("Invalid dynamic argument expression: attribute names cannot contain spaces, quotes, <, >, / or =.",t.outputSourceRange?{start:e.start+e.name.indexOf("["),end:e.start+e.name.length}:void 0)})),Ku(p)&&!fe()&&(p.forbidden=!0,eu("Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as "+"<".concat(e,">")+", as they will not be parsed.",{start:p.start}));for(var m=0;m<ru.length;m++)p=ru[m](p,t)||p;c||(Mu(p),p.pre&&(c=!0)),iu(p.tag)&&(l=!0),c?Ou(p):p.processed||($u(p),Au(p),Nu(p)),r||v(r=p),o?f(p):(a=p,i.push(p))},end:function(e,n,r){var o=i[i.length-1];i.length-=1,a=i[i.length-1],t.outputSourceRange&&(o.end=r),f(o)},chars:function(n,r,i){if(a){if(!re||"textarea"!==a.tag||a.attrsMap.placeholder!==n){var u=a.children;if(n=l||n.trim()?zu(a)?n:Cu(n):u.length?s?"condense"===s&&bu.test(n)?"":" ":o?" ":"":""){l||"condense"!==s||(n=n.replace(_u," "));var f=void 0,p=void 0;!c&&" "!==n&&(f=kl(n,tu))?p={type:2,expression:f.expression,tokens:f.tokens,text:n}:" "===n&&u.length&&" "===u[u.length-1].text||(p={type:3,text:n}),p&&(t.outputSourceRange&&(p.start=r,p.end=i),u.push(p))}}}else n===e?d("Component template requires a root element, rather than just text.",{start:r}):(n=n.trim())&&d('text "'.concat(n,'" outside root element will be ignored.'),{start:r})},comment:function(e,n,r){if(a){var i={type:3,text:e,isComment:!0};t.outputSourceRange&&(i.start=n,i.end=r),a.children.push(i)}}}),r}function Mu(e){null!=$s(e,"v-pre")&&(e.pre=!0)}function Ou(e){var t=e.attrsList,n=t.length;if(n)for(var r=e.attrs=new Array(n),a=0;a<n;a++)r[a]={name:t[a].name,value:JSON.stringify(t[a].value)},null!=t[a].start&&(r[a].start=t[a].start,r[a].end=t[a].end);else e.pre||(e.plain=!0)}function Su(e,t){ju(e),e.plain=!e.key&&!e.scopedSlots&&!e.attrsList.length,Tu(e),Lu(e),Hu(e),Yu(e);for(var n=0;n<nu.length;n++)e=nu[n](e,t)||e;return Uu(e),e}function ju(e){var t=Ts(e,"key");if(t){if("template"===e.tag&&eu("<template> cannot be keyed. Place the key on real elements instead.",js(e,"key")),e.for){var n=e.iterator2||e.iterator1,r=e.parent;n&&n===t&&r&&"transition-group"===r.tag&&eu("Do not use v-for index as key on <transition-group> children, this is the same as not using keys.",js(e,"key"),!0)}e.key=t}}function Tu(e){var t=Ts(e,"ref");t&&(e.ref=t,e.refInFor=Bu(e))}function $u(e){var t;if(t=$s(e,"v-for")){var n=Eu(t);n?I(e,n):eu("Invalid v-for expression: ".concat(t),e.rawAttrsMap["v-for"])}}function Eu(e){var t=e.match(du);if(t){var n={};n.for=t[2].trim();var r=t[1].trim().replace(pu,""),a=r.match(fu);return a?(n.alias=r.replace(fu,"").trim(),n.iterator1=a[1].trim(),a[2]&&(n.iterator2=a[2].trim())):n.alias=r,n}}function Au(e){var t=$s(e,"v-if");if(t)e.if=t,Fu(e,{exp:t,block:e});else{null!=$s(e,"v-else")&&(e.else=!0);var n=$s(e,"v-else-if");n&&(e.elseif=n)}}function Pu(e,t){var n=Iu(t.children);n&&n.if?Fu(n,{exp:e.elseif,block:e}):eu("v-".concat(e.elseif?'else-if="'+e.elseif+'"':"else"," ")+"used on element <".concat(e.tag,"> without corresponding v-if."),e.rawAttrsMap[e.elseif?"v-else-if":"v-else"])}function Iu(e){for(var t=e.length;t--;){if(1===e[t].type)return e[t];" "!==e[t].text&&eu('text "'.concat(e[t].text.trim(),'" between v-if and v-else(-if) ')+"will be ignored.",e[t]),e.pop()}}function Fu(e,t){e.ifConditions||(e.ifConditions=[]),e.ifConditions.push(t)}function Nu(e){null!=$s(e,"v-once")&&(e.once=!0)}function Lu(e){var t;"template"===e.tag?((t=$s(e,"scope"))&&eu('the "scope" attribute for scoped slots have been deprecated and replaced by "slot-scope" since 2.5. The new "slot-scope" attribute can also be used on plain elements in addition to <template> to denote scoped slots.',e.rawAttrsMap.scope,!0),e.slotScope=t||$s(e,"slot-scope")):(t=$s(e,"slot-scope"))&&(e.attrsMap["v-for"]&&eu("Ambiguous combined usage of slot-scope and v-for on <".concat(e.tag,"> ")+"(v-for takes higher priority). Use a wrapper <template> for the scoped slot to make it clearer.",e.rawAttrsMap["slot-scope"],!0),e.slotScope=t);var n,r=Ts(e,"slot");if(r&&(e.slotTarget='""'===r?'"default"':r,e.slotTargetDynamic=!(!e.attrsMap[":slot"]&&!e.attrsMap["v-bind:slot"]),"template"===e.tag||e.slotScope||xs(e,"slot",r,js(e,"slot"))),"template"===e.tag){if(n=Es(e,yu)){(e.slotTarget||e.slotScope)&&eu("Unexpected mixed usage of different slot syntaxes.",e),e.parent&&!cu(e.parent)&&eu("<template v-slot> can only appear at the root level inside the receiving component",e);var a=Ru(n),i=a.name,o=a.dynamic;e.slotTarget=i,e.slotTargetDynamic=o,e.slotScope=n.value||ku}}else if(n=Es(e,yu)){cu(e)||eu("v-slot can only be used on components or <template>.",n),(e.slotScope||e.slotTarget)&&eu("Unexpected mixed usage of different slot syntaxes.",e),e.scopedSlots&&eu("To avoid scope ambiguity, the default slot should also use <template> syntax when there are other named slots.",n);var s=e.scopedSlots||(e.scopedSlots={}),c=Ru(n),l=c.name,u=(o=c.dynamic,s[l]=xu("template",[],e));u.slotTarget=l,u.slotTargetDynamic=o,u.children=e.children.filter((function(e){if(!e.slotScope)return e.parent=u,!0})),u.slotScope=n.value||ku,e.children=[],e.plain=!1}}function Ru(e){var t=e.name.replace(yu,"");return t||("#"!==e.name[0]?t="default":eu("v-slot shorthand syntax requires a slot name.",e)),vu.test(t)?{name:t.slice(1,-1),dynamic:!0}:{name:'"'.concat(t,'"'),dynamic:!1}}function Hu(e){"slot"===e.tag&&(e.slotName=Ts(e,"name"),e.key&&eu("`key` does not work on <slot> because slots are abstract outlets and can possibly expand into multiple elements. Use the key on a wrapping element instead.",js(e,"key")))}function Yu(e){var t;(t=Ts(e,"is"))&&(e.component=t),null!=$s(e,"inline-template")&&(e.inlineTemplate=!0)}function Uu(e){var t,n,r,a,i,o,s,c,l=e.attrsList;for(t=0,n=l.length;t<n;t++)if(r=a=l[t].name,i=l[t].value,uu.test(r))if(e.hasBindings=!0,(o=Vu(r.replace(uu,"")))&&(r=r.replace(gu,"")),hu.test(r))r=r.replace(hu,""),i=bs(i),(c=vu.test(r))&&(r=r.slice(1,-1)),0===i.trim().length&&eu('The value for a v-bind expression cannot be empty. Found in "v-bind:'.concat(r,'"')),o&&(o.prop&&!c&&"innerHtml"===(r=O(r))&&(r="innerHTML"),o.camel&&!c&&(r=O(r)),o.sync&&(s=Is(i,"$event"),c?Ss(e,'"update:"+('.concat(r,")"),s,null,!1,eu,l[t],!0):(Ss(e,"update:".concat(O(r)),s,null,!1,eu,l[t]),T(r)!==O(r)&&Ss(e,"update:".concat(T(r)),s,null,!1,eu,l[t])))),o&&o.prop||!e.component&&ou(e.tag,e.attrsMap.type,r)?ks(e,r,i,l[t],c):xs(e,r,i,l[t],c);else if(lu.test(r))r=r.replace(lu,""),(c=vu.test(r))&&(r=r.slice(1,-1)),Ss(e,r,i,o,!1,eu,l[t],c);else{var u=(r=r.replace(uu,"")).match(mu),d=u&&u[1];c=!1,d&&(r=r.slice(0,-(d.length+1)),vu.test(d)&&(d=d.slice(1,-1),c=!0)),Ms(e,r,a,i,d,c,o,l[t]),"model"===r&&Qu(e,i)}else kl(i,tu)&&eu("".concat(r,'="').concat(i,'": ')+'Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead. For example, instead of <div id="{{ val }}">, use <div :id="val">.',l[t]),xs(e,r,JSON.stringify(i),l[t]),!e.component&&"muted"===r&&ou(e.tag,e.attrsMap.type,r)&&ks(e,r,"true",l[t])}function Bu(e){for(var t=e;t;){if(void 0!==t.for)return!0;t=t.parent}return!1}function Vu(e){var t=e.match(gu);if(t){var n={};return t.forEach((function(e){n[e.slice(1)]=!0})),n}}function Wu(e){for(var t={},n=0,r=e.length;n<r;n++)!t[e[n].name]||re||ie||eu("duplicate attribute: "+e[n].name,e[n]),t[e[n].name]=e[n].value;return t}function zu(e){return"script"===e.tag||"style"===e.tag}function Ku(e){return"style"===e.tag||"script"===e.tag&&(!e.attrsMap.type||"text/javascript"===e.attrsMap.type)}var Ju=/^xmlns:NS\d+/,Zu=/^NS\d+:/;function qu(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];Ju.test(r.name)||(r.name=r.name.replace(Zu,""),t.push(r))}return t}function Qu(e,t){for(var n=e;n;)n.for&&n.alias===t&&eu("<".concat(e.tag,' v-model="').concat(t,'">: ')+"You are binding v-model directly to a v-for iteration alias. This will not be able to modify the v-for source array because writing to the alias is like modifying a function local variable. Consider using an array of objects and use v-model on an object property instead.",e.rawAttrsMap["v-model"]),n=n.parent}function Gu(e,t){if("input"===e.tag){var n=e.attrsMap;if(!n["v-model"])return;var r=void 0;if((n[":type"]||n["v-bind:type"])&&(r=Ts(e,"type")),n.type||r||!n["v-bind"]||(r="(".concat(n["v-bind"],").type")),r){var a=$s(e,"v-if",!0),i=a?"&&(".concat(a,")"):"",o=null!=$s(e,"v-else",!0),s=$s(e,"v-else-if",!0),c=Xu(e);$u(c),Ds(c,"type","checkbox"),Su(c,t),c.processed=!0,c.if="(".concat(r,")==='checkbox'")+i,Fu(c,{exp:c.if,block:c});var l=Xu(e);$s(l,"v-for",!0),Ds(l,"type","radio"),Su(l,t),Fu(c,{exp:"(".concat(r,")==='radio'")+i,block:l});var u=Xu(e);return $s(u,"v-for",!0),Ds(u,":type",r),Su(u,t),Fu(c,{exp:a,block:u}),o?c.else=!0:s&&(c.elseif=s),c}}}function Xu(e){return xu(e.tag,e.attrsList.slice(),e.parent)}var ed=[Ml,Tl,{preTransformNode:Gu}];function td(e,t){t.value&&ks(e,"textContent","_s(".concat(t.value,")"),t)}function nd(e,t){t.value&&ks(e,"innerHTML","_s(".concat(t.value,")"),t)}var rd,ad,id={expectHTML:!0,modules:ed,directives:{model:Ws,text:td,html:nd},isPreTag:Co,isUnaryTag:El,mustUseProp:no,canBeLeftOpenTag:Al,isReservedTag:ko,getTagNamespace:xo,staticKeys:H(ed)},od=D(cd);function sd(e,t){e&&(rd=od(t.staticKeys||""),ad=t.isReservedTag||L,ld(e),ud(e,!1))}function cd(e){return b("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))}function ld(e){if(e.static=dd(e),1===e.type){if(!ad(e.tag)&&"slot"!==e.tag&&null==e.attrsMap["inline-template"])return;for(var t=0,n=e.children.length;t<n;t++){var r=e.children[t];ld(r),r.static||(e.static=!1)}if(e.ifConditions)for(t=1,n=e.ifConditions.length;t<n;t++){var a=e.ifConditions[t].block;ld(a),a.static||(e.static=!1)}}}function ud(e,t){if(1===e.type){if((e.static||e.once)&&(e.staticInFor=t),e.static&&e.children.length&&(1!==e.children.length||3!==e.children[0].type))return void(e.staticRoot=!0);if(e.staticRoot=!1,e.children)for(var n=0,r=e.children.length;n<r;n++)ud(e.children[n],t||!!e.for);if(e.ifConditions)for(n=1,r=e.ifConditions.length;n<r;n++)ud(e.ifConditions[n].block,t)}}function dd(e){return 2!==e.type&&(3===e.type||!(!e.pre&&(e.hasBindings||e.if||e.for||_(e.tag)||!ad(e.tag)||fd(e)||!Object.keys(e).every(rd))))}function fd(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}var pd=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,vd=/\([^)]*?\);*$/,md=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,hd={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},gd={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},yd=function(e){return"if(".concat(e,")return null;")},bd={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:yd("$event.target !== $event.currentTarget"),ctrl:yd("!$event.ctrlKey"),shift:yd("!$event.shiftKey"),alt:yd("!$event.altKey"),meta:yd("!$event.metaKey"),left:yd("'button' in $event && $event.button !== 0"),middle:yd("'button' in $event && $event.button !== 1"),right:yd("'button' in $event && $event.button !== 2")};function _d(e,t){var n=t?"nativeOn:":"on:",r="",a="";for(var i in e){var o=wd(e[i]);e[i]&&e[i].dynamic?a+="".concat(i,",").concat(o,","):r+='"'.concat(i,'":').concat(o,",")}return r="{".concat(r.slice(0,-1),"}"),a?n+"_d(".concat(r,",[").concat(a.slice(0,-1),"])"):n+r}function wd(e){if(!e)return"function(){}";if(Array.isArray(e))return"[".concat(e.map((function(e){return wd(e)})).join(","),"]");var t=md.test(e.value),n=pd.test(e.value),r=md.test(e.value.replace(vd,""));if(e.modifiers){var a="",i="",o=[],s=function(t){if(bd[t])i+=bd[t],hd[t]&&o.push(t);else if("exact"===t){var n=e.modifiers;i+=yd(["ctrl","shift","alt","meta"].filter((function(e){return!n[e]})).map((function(e){return"$event.".concat(e,"Key")})).join("||"))}else o.push(t)};for(var c in e.modifiers)s(c);o.length&&(a+=Cd(o)),i&&(a+=i);var l=t?"return ".concat(e.value,".apply(null, arguments)"):n?"return (".concat(e.value,").apply(null, arguments)"):r?"return ".concat(e.value):e.value;return"function($event){".concat(a).concat(l,"}")}return t||n?e.value:"function($event){".concat(r?"return ".concat(e.value):e.value,"}")}function Cd(e){return"if(!$event.type.indexOf('key')&&"+"".concat(e.map(kd).join("&&"),")return null;")}function kd(e){var t=parseInt(e,10);if(t)return"$event.keyCode!==".concat(t);var n=hd[e],r=gd[e];return"_k($event.keyCode,"+"".concat(JSON.stringify(e),",")+"".concat(JSON.stringify(n),",")+"$event.key,"+"".concat(JSON.stringify(r))+")"}function xd(e,t){t.modifiers&&ii("v-on without argument does not support modifiers."),e.wrapListeners=function(e){return"_g(".concat(e,",").concat(t.value,")")}}function Dd(e,t){e.wrapData=function(n){return"_b(".concat(n,",'").concat(e.tag,"',").concat(t.value,",").concat(t.modifiers&&t.modifiers.prop?"true":"false").concat(t.modifiers&&t.modifiers.sync?",true":"",")")}}var Md={on:xd,bind:Dd,cloak:N},Od=function(){function e(e){this.options=e,this.warn=e.warn||ws,this.transforms=Cs(e.modules,"transformCode"),this.dataGenFns=Cs(e.modules,"genData"),this.directives=I(I({},Md),e.directives);var t=e.isReservedTag||L;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1}return e}();function Sd(e,t){var n=new Od(t),r=e?"script"===e.tag?"null":jd(e,n):'_c("div")';return{render:"with(this){return ".concat(r,"}"),staticRenderFns:n.staticRenderFns}}function jd(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return $d(e,t);if(e.once&&!e.onceProcessed)return Ed(e,t);if(e.for&&!e.forProcessed)return Id(e,t);if(e.if&&!e.ifProcessed)return Ad(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return Zd(e,t);var n=void 0;if(e.component)n=qd(e.component,e,t);else{var r=void 0,a=t.maybeComponent(e);(!e.plain||e.pre&&a)&&(r=Fd(e,t));var i=void 0,o=t.options.bindings;a&&o&&!1!==o.__isScriptSetup&&(i=Td(o,e.tag)),i||(i="'".concat(e.tag,"'"));var s=e.inlineTemplate?null:Bd(e,t,!0);n="_c(".concat(i).concat(r?",".concat(r):"").concat(s?",".concat(s):"",")")}for(var c=0;c<t.transforms.length;c++)n=t.transforms[c](e,n);return n}return Bd(e,t)||"void 0"}function Td(e,t){var n=O(t),r=S(n),a=function(a){return e[t]===a?t:e[n]===a?n:e[r]===a?r:void 0},i=a("setup-const")||a("setup-reactive-const");if(i)return i;var o=a("setup-let")||a("setup-ref")||a("setup-maybe-ref");return o||void 0}function $d(e,t){e.staticProcessed=!0;var n=t.pre;return e.pre&&(t.pre=e.pre),t.staticRenderFns.push("with(this){return ".concat(jd(e,t),"}")),t.pre=n,"_m(".concat(t.staticRenderFns.length-1).concat(e.staticInFor?",true":"",")")}function Ed(e,t){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return Ad(e,t);if(e.staticInFor){for(var n="",r=e.parent;r;){if(r.for){n=r.key;break}r=r.parent}return n?"_o(".concat(jd(e,t),",").concat(t.onceId++,",").concat(n,")"):(t.warn("v-once can only be used inside v-for that is keyed. ",e.rawAttrsMap["v-once"]),jd(e,t))}return $d(e,t)}function Ad(e,t,n,r){return e.ifProcessed=!0,Pd(e.ifConditions.slice(),t,n,r)}function Pd(e,t,n,r){if(!e.length)return r||"_e()";var a=e.shift();return a.exp?"(".concat(a.exp,")?").concat(i(a.block),":").concat(Pd(e,t,n,r)):"".concat(i(a.block));function i(e){return n?n(e,t):e.once?Ed(e,t):jd(e,t)}}function Id(e,t,n,r){var a=e.for,i=e.alias,o=e.iterator1?",".concat(e.iterator1):"",s=e.iterator2?",".concat(e.iterator2):"";return t.maybeComponent(e)&&"slot"!==e.tag&&"template"!==e.tag&&!e.key&&t.warn("<".concat(e.tag,' v-for="').concat(i," in ").concat(a,'">: component lists rendered with ')+"v-for should have explicit keys. See https://v2.vuejs.org/v2/guide/list.html#key for more info.",e.rawAttrsMap["v-for"],!0),e.forProcessed=!0,"".concat(r||"_l","((").concat(a,"),")+"function(".concat(i).concat(o).concat(s,"){")+"return ".concat((n||jd)(e,t))+"})"}function Fd(e,t){var n="{",r=Nd(e,t);r&&(n+=r+","),e.key&&(n+="key:".concat(e.key,",")),e.ref&&(n+="ref:".concat(e.ref,",")),e.refInFor&&(n+="refInFor:true,"),e.pre&&(n+="pre:true,"),e.component&&(n+='tag:"'.concat(e.tag,'",'));for(var a=0;a<t.dataGenFns.length;a++)n+=t.dataGenFns[a](e);if(e.attrs&&(n+="attrs:".concat(Qd(e.attrs),",")),e.props&&(n+="domProps:".concat(Qd(e.props),",")),e.events&&(n+="".concat(_d(e.events,!1),",")),e.nativeEvents&&(n+="".concat(_d(e.nativeEvents,!0),",")),e.slotTarget&&!e.slotScope&&(n+="slot:".concat(e.slotTarget,",")),e.scopedSlots&&(n+="".concat(Rd(e,e.scopedSlots,t),",")),e.model&&(n+="model:{value:".concat(e.model.value,",callback:").concat(e.model.callback,",expression:").concat(e.model.expression,"},")),e.inlineTemplate){var i=Ld(e,t);i&&(n+="".concat(i,","))}return n=n.replace(/,$/,"")+"}",e.dynamicAttrs&&(n="_b(".concat(n,',"').concat(e.tag,'",').concat(Qd(e.dynamicAttrs),")")),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Nd(e,t){var n=e.directives;if(n){var r,a,i,o,s="directives:[",c=!1;for(r=0,a=n.length;r<a;r++){i=n[r],o=!0;var l=t.directives[i.name];l&&(o=!!l(e,i,t.warn)),o&&(c=!0,s+='{name:"'.concat(i.name,'",rawName:"').concat(i.rawName,'"').concat(i.value?",value:(".concat(i.value,"),expression:").concat(JSON.stringify(i.value)):"").concat(i.arg?",arg:".concat(i.isDynamicArg?i.arg:'"'.concat(i.arg,'"')):"").concat(i.modifiers?",modifiers:".concat(JSON.stringify(i.modifiers)):"","},"))}return c?s.slice(0,-1)+"]":void 0}}function Ld(e,t){var n=e.children[0];if(1===e.children.length&&1===n.type||t.warn("Inline-template components must have exactly one child element.",{start:e.start}),n&&1===n.type){var r=Sd(n,t.options);return"inlineTemplate:{render:function(){".concat(r.render,"},staticRenderFns:[").concat(r.staticRenderFns.map((function(e){return"function(){".concat(e,"}")})).join(","),"]}")}}function Rd(e,t,n){var r=e.for||Object.keys(t).some((function(e){var n=t[e];return n.slotTargetDynamic||n.if||n.for||Yd(n)})),a=!!e.if;if(!r)for(var i=e.parent;i;){if(i.slotScope&&i.slotScope!==ku||i.for){r=!0;break}i.if&&(a=!0),i=i.parent}var o=Object.keys(t).map((function(e){return Ud(t[e],n)})).join(",");return"scopedSlots:_u([".concat(o,"]").concat(r?",null,true":"").concat(!r&&a?",null,false,".concat(Hd(o)):"",")")}function Hd(e){for(var t=5381,n=e.length;n;)t=33*t^e.charCodeAt(--n);return t>>>0}function Yd(e){return 1===e.type&&("slot"===e.tag||e.children.some(Yd))}function Ud(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return Ad(e,t,Ud,"null");if(e.for&&!e.forProcessed)return Id(e,t,Ud);var r=e.slotScope===ku?"":String(e.slotScope),a="function(".concat(r,"){")+"return ".concat("template"===e.tag?e.if&&n?"(".concat(e.if,")?").concat(Bd(e,t)||"undefined",":undefined"):Bd(e,t)||"undefined":jd(e,t),"}"),i=r?"":",proxy:true";return"{key:".concat(e.slotTarget||'"default"',",fn:").concat(a).concat(i,"}")}function Bd(e,t,n,r,a){var i=e.children;if(i.length){var o=i[0];if(1===i.length&&o.for&&"template"!==o.tag&&"slot"!==o.tag){var s=n?t.maybeComponent(o)?",1":",0":"";return"".concat((r||jd)(o,t)).concat(s)}var c=n?Vd(i,t.maybeComponent):0,l=a||zd;return"[".concat(i.map((function(e){return l(e,t)})).join(","),"]").concat(c?",".concat(c):"")}}function Vd(e,t){for(var n=0,r=0;r<e.length;r++){var a=e[r];if(1===a.type){if(Wd(a)||a.ifConditions&&a.ifConditions.some((function(e){return Wd(e.block)}))){n=2;break}(t(a)||a.ifConditions&&a.ifConditions.some((function(e){return t(e.block)})))&&(n=1)}}return n}function Wd(e){return void 0!==e.for||"template"===e.tag||"slot"===e.tag}function zd(e,t){return 1===e.type?jd(e,t):3===e.type&&e.isComment?Jd(e):Kd(e)}function Kd(e){return"_v(".concat(2===e.type?e.expression:Gd(JSON.stringify(e.text)),")")}function Jd(e){return"_e(".concat(JSON.stringify(e.text),")")}function Zd(e,t){var n=e.slotName||'"default"',r=Bd(e,t),a="_t(".concat(n).concat(r?",function(){return ".concat(r,"}"):""),i=e.attrs||e.dynamicAttrs?Qd((e.attrs||[]).concat(e.dynamicAttrs||[]).map((function(e){return{name:O(e.name),value:e.value,dynamic:e.dynamic}}))):null,o=e.attrsMap["v-bind"];return!i&&!o||r||(a+=",null"),i&&(a+=",".concat(i)),o&&(a+="".concat(i?"":",null",",").concat(o)),a+")"}function qd(e,t,n){var r=t.inlineTemplate?null:Bd(t,n,!0);return"_c(".concat(e,",").concat(Fd(t,n)).concat(r?",".concat(r):"",")")}function Qd(e){for(var t="",n="",r=0;r<e.length;r++){var a=e[r],i=Gd(a.value);a.dynamic?n+="".concat(a.name,",").concat(i,","):t+='"'.concat(a.name,'":').concat(i,",")}return t="{".concat(t.slice(0,-1),"}"),n?"_d(".concat(t,",[").concat(n.slice(0,-1),"])"):t}function Gd(e){return e.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}var Xd=new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),ef=new RegExp("\\b"+"delete,typeof,void".split(",").join("\\s*\\([^\\)]*\\)|\\b")+"\\s*\\([^\\)]*\\)"),tf=/'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;function nf(e,t){e&&rf(e,t)}function rf(e,t){if(1===e.type){for(var n in e.attrsMap)if(uu.test(n)){var r=e.attrsMap[n];if(r){var a=e.rawAttrsMap[n];"v-for"===n?of(e,'v-for="'.concat(r,'"'),t,a):"v-slot"===n||"#"===n[0]?lf(r,"".concat(n,'="').concat(r,'"'),t,a):lu.test(n)?af(r,"".concat(n,'="').concat(r,'"'),t,a):cf(r,"".concat(n,'="').concat(r,'"'),t,a)}}if(e.children)for(var i=0;i<e.children.length;i++)rf(e.children[i],t)}else 2===e.type&&cf(e.expression,e.text,t,e)}function af(e,t,n,r){var a=e.replace(tf,""),i=a.match(ef);i&&"$"!==a.charAt(i.index-1)&&n("avoid using JavaScript unary operator as property name: "+'"'.concat(i[0],'" in expression ').concat(t.trim()),r),cf(e,t,n,r)}function of(e,t,n,r){cf(e.for||"",t,n,r),sf(e.alias,"v-for alias",t,n,r),sf(e.iterator1,"v-for iterator",t,n,r),sf(e.iterator2,"v-for iterator",t,n,r)}function sf(e,t,n,r,a){if("string"==typeof e)try{new Function("var ".concat(e,"=_"))}catch(i){r("invalid ".concat(t,' "').concat(e,'" in expression: ').concat(n.trim()),a)}}function cf(e,t,n,r){try{new Function("return ".concat(e))}catch(i){var a=e.replace(tf,"").match(Xd);n(a?"avoid using JavaScript keyword as property name: "+'"'.concat(a[0],'"\n Raw expression: ').concat(t.trim()):"invalid expression: ".concat(i.message," in\n\n")+" ".concat(e,"\n\n")+" Raw expression: ".concat(t.trim(),"\n"),r)}}function lf(e,t,n,r){try{new Function(e,"")}catch(a){n("invalid function parameter expression: ".concat(a.message," in\n\n")+" ".concat(e,"\n\n")+" Raw expression: ".concat(t.trim(),"\n"),r)}}var uf=2;function df(e,t,n){void 0===t&&(t=0),void 0===n&&(n=e.length);for(var r=e.split(/\r?\n/),a=0,i=[],o=0;o<r.length;o++)if((a+=r[o].length+1)>=t){for(var s=o-uf;s<=o+uf||n>a;s++)if(!(s<0||s>=r.length)){i.push("".concat(s+1).concat(ff(" ",3-String(s+1).length),"| ").concat(r[s]));var c=r[s].length;if(s===o){var l=t-(a-c)+1,u=n>a?c-l:n-t;i.push(" | "+ff(" ",l)+ff("^",u))}else if(s>o){if(n>a){var d=Math.min(n-a,c);i.push(" | "+ff("^",d))}a+=c+1}}break}return i.join("\n")}function ff(e,t){var n="";if(t>0)for(;1&t&&(n+=e),!((t>>>=1)<=0);)e+=e;return n}function pf(e,t){try{return new Function(e)}catch(n){return t.push({err:n,code:e}),N}}function vf(e){var t=Object.create(null);return function(n,r,a){var i=(r=I({},r)).warn||ii;delete r.warn;try{new Function("return 1")}catch(e){e.toString().match(/unsafe-eval|CSP/)&&i("It seems you are using the standalone build of Vue.js in an environment with Content Security Policy that prohibits unsafe-eval. The template compiler cannot work in this environment. Consider relaxing the policy to allow unsafe-eval or pre-compiling your templates into render functions.")}var o=r.delimiters?String(r.delimiters)+n:n;if(t[o])return t[o];var s=e(n,r);s.errors&&s.errors.length&&(r.outputSourceRange?s.errors.forEach((function(e){i("Error compiling template:\n\n".concat(e.msg,"\n\n")+df(n,e.start,e.end),a)})):i("Error compiling template:\n\n".concat(n,"\n\n")+s.errors.map((function(e){return"- ".concat(e)})).join("\n")+"\n",a)),s.tips&&s.tips.length&&(r.outputSourceRange?s.tips.forEach((function(e){return oi(e.msg,a)})):s.tips.forEach((function(e){return oi(e,a)})));var c={},l=[];return c.render=pf(s.render,l),c.staticRenderFns=s.staticRenderFns.map((function(e){return pf(e,l)})),s.errors&&s.errors.length||!l.length||i("Failed to generate render function:\n\n"+l.map((function(e){var t=e.err,n=e.code;return"".concat(t.toString()," in\n\n").concat(n,"\n")})).join("\n"),a),t[o]=c}}function mf(e){return function(t){function n(n,r){var a=Object.create(t),i=[],o=[],s=function(e,t,n){(n?o:i).push(e)};if(r){if(r.outputSourceRange){var c=n.match(/^\s*/)[0].length;s=function(e,t,n){var r="string"==typeof e?{msg:e}:e;t&&(null!=t.start&&(r.start=t.start+c),null!=t.end&&(r.end=t.end+c)),(n?o:i).push(r)}}for(var l in r.modules&&(a.modules=(t.modules||[]).concat(r.modules)),r.directives&&(a.directives=I(Object.create(t.directives||null),r.directives)),r)"modules"!==l&&"directives"!==l&&(a[l]=r[l])}a.warn=s;var u=e(n.trim(),a);return nf(u.ast,s),u.errors=i,u.tips=o,u}return{compile:n,compileToFunctions:vf(n)}}}var hf,gf=mf((function(e,t){var n=Du(e.trim(),t);!1!==t.optimize&&sd(n,t);var r=Sd(n,t);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}}))(id).compileToFunctions;function yf(e){return(hf=hf||document.createElement("div")).innerHTML=e?'<a href="\n"/>':'<div a="\n"/>',hf.innerHTML.indexOf(" ")>0}var bf=!!te&&yf(!1),_f=!!te&&yf(!0),wf=D((function(e){var t=So(e);return t&&t.innerHTML})),Cf=Hi.prototype.$mount;function kf(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}function xf(e,t){var n=new wa(ge,e,N,{sync:!0});t&&(n.update=function(){t((function(){return n.run()}))})}return Hi.prototype.$mount=function(e,t){if((e=e&&So(e))===document.body||e===document.documentElement)return ii("Do not mount Vue to <html> or <body> - mount to normal elements instead."),this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&((r=wf(r))||ii("Template element not found or is empty: ".concat(n.template),this));else{if(!r.nodeType)return ii("invalid template option:"+r,this),this;r=r.innerHTML}else e&&(r=kf(e));if(r){J.performance&&wt&&wt("compile");var a=gf(r,{outputSourceRange:!0,shouldDecodeNewlines:bf,shouldDecodeNewlinesForHref:_f,delimiters:n.delimiters,comments:n.comments},this),i=a.render,o=a.staticRenderFns;n.render=i,n.staticRenderFns=o,J.performance&&wt&&(wt("compile end"),Ct("vue ".concat(this._name," compile"),"compile","compile end"))}}return Cf.call(this,e,t)},Hi.compile=gf,I(Hi,ha),Hi.effect=xf,Hi}()},
vendor: 1,529 bytes, line 2
2"../../../../../plugins/mill-apidae/blocks/ApidaeListe/assets/src/libs/js.cookie.min.mjs":(e,t,n)=>{"use strict";function r(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}n.r(t),n.d(t,{default:()=>i});var a=function e(t,n){function a(e,a,i){if("undefined"!=typeof document){"number"==typeof(i=r({},n,i)).expires&&(i.expires=new Date(Date.now()+864e5*i.expires)),i.expires&&(i.expires=i.expires.toUTCString()),e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var o="";for(var s in i)i[s]&&(o+="; "+s,!0!==i[s]&&(o+="="+i[s].split(";")[0]));return document.cookie=e+"="+t.write(a,e)+o}}return Object.create({set:a,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var n=document.cookie?document.cookie.split("; "):[],r={},a=0;a<n.length;a++){var i=n[a].split("="),o=i.slice(1).join("=");try{var s=decodeURIComponent(i[0]);if(r[s]=t.read(o,s),e===s)break}catch(e){}}return e?r[e]:r}},remove:function(e,t){a(e,"",r({},t,{expires:-1}))},withAttributes:function(t){return e(this.converter,r({},this.attributes,t))},withConverter:function(t){return e(r({},this.converter,t),this.attributes)}},{attributes:{value:Object.freeze(n)},converter:{value:Object.freeze(t)}})}({read:function(e){return'"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"});const i=a}
2},t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r);var e=n("./node_modules/vue/dist/vue.js"),t=n.n(e),a=n("./components/filters.js"),i=n("../../../../../plugins/mill-apidae/blocks/ApidaeListe/assets/src/components/map.js"),o=n("../../../../../plugins/mill-apidae/blocks/ApidaeListe/assets/src/components/list.js"),s=n("../../../../../plugins/mill-apidae/blocks/ApidaeListe/assets/src/components/switcher.js"),c=n("../../../../../plugins/mill-apidae/blocks/ApidaeListe/assets/src/components/nbresults.js"),l=n("../../../../../plugins/mill-apidae/blocks/ApidaeListe/assets/src/libs/js.cookie.min.mjs");jQuery((function(e){let n=e(".apidae-list-app");n.each(((r,u)=>{let d=e(u).attr("id"),f=window[d];new(t())({el:"#"+d,components:{filters:a.default,mymap:i.default,list:o.default,switcher:s.default,nbresults:c.default},template:'\n\n <div :class="areFiltersDisplayed">\n <div class="apidae-list-top">\n <filters ref="filter" v-if="usedFilters.length > 0" :filters="usedFilters"\n v-on:value-change="fieldValueChange"\n v-on:filters-reset="resetAllFilter"\n :settings="settings"\n v-on:validate-filters="validateFilters" v-on:show-filters="showFilters" :nbPreviewFilters="numberObjects"></filters>\n <div class="apidae-topbar">\n <nbresults :returnNbResults="returnNbResults"></nbresults>\n <switcher :settings="settings" :filters="filters" :enableModes="enableModes"\n v-on:mode-change="modeChange" v-on:show-filters="showFilters"\n :selectedMode="displayMode"></switcher>\n </div>\n </div>\n \n <div class="legends">\n <div class="legend"><span class="icon icon-fav"></span><span>{{this.settings.labels.addToWishList}}</span></div>\n\t\t\t\t<div class="legend"><span class="icon icon-shaking-hands"></span><span>{{this.settings.labels.isAdherent}}</span></div>\n </div>\n\n <div :class="\'apidae-results-canvas apidae-results-displaymode-\'+displayMode">\n <list ref="list" v-on:page-change="changeUrl" :defaultPage="defaultPage" :settings="settings"\n :objects="displayObjects"\n :outOfMap="outOfMap"\n :numberParPage="numberParPage" v-on:hoverListItem="hoverItemFromList"\n v-on:changeWishList="wishListEvent"></list>\n <mymap :id="id" ref="map" :defaultLat="defaultLat" :defaultLng="defaultLng" :defaultZoom="defaultZoom"\n :objects="filtreObjects" :displayMode="displayMode" v-on:map-filter="mapFilter"\n :settings="settings"></mymap>\n </div>\n\n <div class="apidae-processing" v-if="loading"></div>\n\n </div>\n\n ',data:{id:d,enableModes:["list","mixte","map"],displayMode:"mixte",objects:[],filters:[],settings:[],tempFilters:[],tempObjects:[],outOfMap:[],defaultPage:!1,defaultLat:!1,defaultLng:!1,defaultZoom:!1,saveSearchInUrl:!0,cookieKey:!1,disableSaveSearch:!1,loading:!0,show_filters:!1},created:function(){if(this.loadObjects(),this.loadFilters(),jQuery("body").addClass("with-apidae-list"),this.settings=f.settings,void 0!==this.settings.saveSearchInUrl&&(this.saveSearchInUrl=this.settings.saveSearchInUrl),this.settings.enableModes&&(this.enableModes=this.settings.enableModes),this.settings.defaultMode&&(this.displayMode=this.settings.defaultMode),n.length>1&&(this.disableSaveSearch=!0),this.settings.post_id){let e=this.settings.post_id;this.cookieKey="apidae_liste_search_"+e+"_"+this.id}this.disableSaveSearch||this.parseUrl(),this.filterObjects(),this.tempFilters=JSON.parse(JSON.stringify(this.filters)),this.tempObjects=JSON.parse(JSON.stringify(this.objects)),this.loading=!1},computed:{filterDisposOn:function(){let e=!1;for(let t of this.filters)"dispos"===t.type&&t.date_debut&&t.date_fin&&(e=[t.date_debut,t.date_fin]);return e},returnNbResults:function(){if(this.settings&&this.settings.labels&&this.settings.labels.resultats){var e=this.numberObjects+" ";return e+=this.numberObjects>1?this.settings.labels.resultats.plural:this.settings.labels.resultats.singular}return""},areFiltersDisplayed:function(){return!0===this.show_filters?"filters-on":"filters-off"},usedFilters(){return this.settings.useValidationBtn?this.tempFilters:this.filters},numberObjects(){return this.displayObjects.length},numberOfTempsObjects(){return this.displayTempObjects.length},displayObjects:function(){return this.objects.filter((function(e){return!0===e.filterOk&&!0===e.mapOk}
2))},displayTempObjects:function(){return this.tempObjects.filter((function(e){return!0===e.filterOk&&!0===e.mapOk}))},filtreObjects:function(){return this.objects.filter((function(e){return!0===e.filterOk}))},numberParPage:function(){var e=this.objects.length;return this.settings&&this.settings.nb_per_page&&this.displayMode&&(e=this.settings.nb_per_page[this.displayMode]>0?this.settings.nb_per_page[this.displayMode]:this.objects.length),Number(e)}},methods:{hoverItemFromList(e){this.$refs.map.hoverMarker(e)},showFilters(){this.show_filters=!this.show_filters},modeChange(e){this.displayMode=e,"list"!==e&&this.$refs.map.updateSize(),this.changeUrl()},validateFilters(){this.filters=JSON.parse(JSON.stringify(this.tempFilters)),this.filterObjects("all")},fieldValueChange(e){"dispos"===e.type&&(e.needToCallAPI=!0),this.settings.useValidationBtn?this.filterTempsObjects(e):this.filterObjects(e)},mapFilter(e){for(var t of(this.outOfMap=e,this.objects))this.outOfMap.includes(t)?t.mapOk=!1:t.mapOk=!0;this.filterObjects()},wishListEvent(e,t){var n=this.objects.find((t=>t.id==e));n.wishlist=t,this.$refs.map.addMarkers()},async filtrer(e,t){for(var n of t)"dispos"===n.type&&await this.getDispoAvailabilities(n,e);for(var r of e)this.objectIsValidForFilter(r,t)?r.filterOk=!0:r.filterOk=!1,!1===this.filterDisposOn&&r.custom_html&&(r.custom_html="")},async getDispoAvailabilities(e,t){if((void 0===e.needToCallAPI||!0===e.needToCallAPI)&&e.date_debut&&e.date_fin){this.loading=!0;let n=[];for(let e of t)void 0!==e.os_ui?n.push({id:e.id,os_ui:e.os_ui}):n.push({id:e.id});if(t.length>0){let r={action:"apidae",security:f.ajax.security,controller:"PublicAjax",method:"getOSDispos",params:{objects:n,date_debut:e.date_debut,date_fin:e.date_fin}};await jQuery.post(f.ajax.ajaxurl,r).fail((function(){alert("Désolé, une erreur est survenue")})).done((n=>{if(n&&n.success&&n.datas){n.datas.ids_apidae_availables&&(e.items=n.datas.ids_apidae_availables);let a=[];n.datas.ids_os_availables&&(a=n.datas.ids_os_availables);for(let n of t)if(e.items.includes(n.id)){var r="";let e=a[n.id];if(e&&e.prix)r=`\n <span class="price">${this.settings.labels.dispos.a_partir_de.replace("%s",e.prix)}</span>\n `;r=`\n <span class="is-disponible">\n <span class="disponible">${this.settings.labels.dispos.disponible}</span>\n ${r}\n </span>\n `,n.custom_html=r}}e.needToCallAPI=!1,this.loading=!1}))}}},async filterObjects(e){let t=!1;if(e&&e.force_move)t=!0;else if("all"===e)for(let e of this.filters)e.force_move&&"select"===e.mode&&e.all_label!==e.value&&(t=!0);t?(this.outOfMap=[],this.$refs.map.forceMapFilterMove().then((async()=>{this.changeUrl(),await this.filtrer(this.objects,this.filters)}))):(this.changeUrl(),await this.filtrer(this.objects,this.filters))},async filterTempsObjects(e){await this.filtrer(this.tempObjects,this.tempFilters)},objectIsValidForFilter(e,t){var n=!1;for(var r of t)if("checkbox"===r.mode){if("and"===r.operator){var a=!1;for(var i of r.options)null!==i.value&&i.value&&(i.items.includes(e.id)||(a=!0));a&&(n=!0)}else if("or"===r.operator){var o=!1,s=!1;for(var i of r.options)null!==i.value&&i.value&&(o=!0,i.items.includes(e.id)&&(s=!0));o&&!1===s&&(n=!0)}}else if("select"===r.mode){if(null!==r.value&&r.value&&r.value!==r.all_label){var c=r.options.find((function(e){return e.label===r.value}));c&&(c.items.includes(e.id)||(n=!0))}}else if("dates"===r.type){this.isValideForDateFilter(r,e)||(n=!0)}else if("range"===r.mode){var l=!1;r.start&&parseFloat(r.start)!==parseFloat(r.min)&&(l=!0),r.end&&parseFloat(r.end)!==parseFloat(r.max)&&(l=!0),l&&(void 0===e[r.field]?n=!0:(r.start||(r.start=r.min),console.log(r),"object"==typeof e[r.field]?e[r.field].min<r.start&&(n=!0):e[r.field]<r.start&&(n=!0),r.end||(r.end=r.max),"object"==typeof e[r.field]?e[r.field].max>r.end&&(n=!0):e[r.field]>r.end&&(n=!0)))}else"dispos"===r.type&&r.date_debut&&r.date_fin&&r.items&&(r.items.includes(e.id)||(n=!0));return!n},isValideForDateFilter(e,t){if(!e.date_debut&&!e.date_fin)return!0;
2if(e.date_debut)var n=e.date_debut.split("/"),r=Date.parse(n[0],n[1]-1,n[2]);if(e.date_fin)var a=e.date_fin.split("/"),i=Date.parse(a[0],a[1]-1,a[2]);let o=!1;if(e.date_debut&&e.date_fin){if(t.ouvertures)for(let e of t.ouvertures){var s=e.du.split("/"),c=Date.parse(s[0],s[1]-1,s[2]);let t=e.au.split("/"),n=Date.parse(t[0],t[1]-1,t[2]),a=!0;if(n<r&&(a=!1),c>i&&(a=!1),a){let t=r;c>r&&(t=c);let a=i;n<i&&(a=n);const s=(a-t)/864e5;if(!(s<7)){o=!0;break}{let n=["DIMANCHE","LUNDI","MARDI","MERCREDI","JEUDI","VENDREDI","SAMEDI"],r=!1,a=new Date(t).getDay();for(let t=0;t<s+1;t++){let t=n[a];if(e.jours&&e.jours.includes(t)){r=!0;break}a++,a>6&&(a=0)}if(r){o=!0;break}}}}}else if(e.date_debut){if(t.ouvertures)for(let e of t.ouvertures){let t=e.au.split("/"),n=!0;if(Date.parse(t[0],t[1]-1,t[2])<r&&(n=!1),n){o=!0;break}}}else if(e.date_fin&&t.ouvertures)for(let e of t.ouvertures){let t=e.du.split("/"),n=!0;if(Date.parse(t[0],t[1]-1,t[2])>i&&(n=!1),n){o=!0;break}}return o},isValidForDate(e,t){if((e.date_debut||e.date_fin)&&!t.date_debut&&!t.date_fin)return!1;console.log(e,t);let n=!0;if(e.date_debut)var r=e.date_debut.split("/"),a=Date.parse(r[0],r[1]-1,r[2]);if(e.date_fin)var i=e.date_fin.split("/"),o=Date.parse(i[0],i[1]-1,i[2]);if(t.date_debut)var s=t.date_debut.split("/"),c=Date.parse(s[0],s[1]-1,s[2]);if(t.date_fin)var l=t.date_fin.split("/"),u=Date.parse(l[0],l[1]-1,l[2]);return e.date_debut&&e.date_fin?(t.date_fin&&u<a&&(n=!1),t.date_debut&&c>o&&(n=!1)):e.date_debut?t.date_fin&&u<a&&(n=!1):e.date_fin&&(t.date_debut?c>o&&(n=!1):n=!1),n},isIValideForDates(e,t){},resetAllFilter(){this.resetFilters(this.filters),this.resetFilters(this.tempFilters),this.filterObjects(),this.filterTempsObjects(),this.changeUrl()},resetFilters(e){for(var t of e)if("checkbox"===t.mode)for(var n of t.options)n.value=!1;else"select"===t.mode?t.value=t.all_label:"range"===t.mode?(t.start=t.min,t.end=t.max):"dates"===t.mode&&(t.date_debut=null,t.date_fin=null)},loadObjects(){if(void 0!==f&&f.objects&&Object.entries(f.objects).length>0){var e=[];for(const[t,n]of Object.entries(f.objects))n.id=Number(n.id),n.filterOk=!0,n.mapOk=!0,n.hover=!1,n.custom_html="",e.push(n);this.objects=e}},loadFilters(){if(void 0!==f&&f.filters&&Object.entries(f.filters).length>0){var e=[];for(const[n,r]of Object.entries(f.filters)){r.id=n;let a=[];for(const[e,t]of Object.entries(r.options))"checkbox"===r.mode&&(t.type=r.mode,t.value||(t.value=null)),a.push(t);if("select"!==r.mode||r.value||(r.value=r.all_label),"range"===r.mode){var t=this.getRangeMinMax(r);void 0!==t.min&&(r.min=t.min),void 0!==t.max&&(r.max=t.max)}r.options=a,e.push(r)}this.filters=e}},getRangeMinMax(e){var t=0,n=0;if(e.field)for(var r of this.objects){var a=r[e.field];a&&("object"==typeof a?(a.min<t&&(t=a.min),a.max>n&&(n=a.max)):((a<t||0==t)&&(t=a),a>n&&(n=a)))}return{min:t,max:n}},changeUrl(){if(!1===this.disableSaveSearch){let e=this.getFiltersUrl();this.saveSearchInUrl?history.replaceState(null,null,e):this.cookieKey&&l.default.set(this.cookieKey,e)}},getFiltersUrl(){let e=window.location.pathname;var t=e;const n=new RegExp(/.+?(?=\/[rpmd]\/)/);let r=e.match(n);r&&(t=r[0]+"/");var a="";for(var i of this.filters)if("checkbox"===i.mode){var o=[];for(let e of i.options)e.value&&o.push(this.slugify(e.label));o.length>0&&(a+=this.slugify(i.label)+"/",a+=o.join("-")+"/")}else"dates"===i.mode?(i.date_debut||i.date_fin)&&(a+=this.slugify(i.slug)+"/",i.date_debut&&(a+=this.slugify(i.date_debut)),a+="-",i.date_fin&&(a+=this.slugify(i.date_fin)),a+="/"):"range"===i.mode?!i.start&&!i.end||Number(i.start)===Number(i.min)&&Number(i.end)===Number(i.max)||(a+=this.slugify(i.label)+"/"+this.slugify(i.start)+"-"+this.slugify(i.end)+"/"):i.value!==i.all_label&&(a+=this.slugify(i.label)+"/"+this.slugify(i.value)+"/");if(""!==a&&(a="r/"+a),this.$refs.map&&this.$refs.map.filterOnMove){let e=this.$refs.map.map.getCenter(),t=this.$refs.map.map.getZoom();a=a+"m/"+e.lat+"/"+e.lng+"/"+t+"/"}if(this.displayMode){var s=!0;this.settings.defaultMode&&this.displayMode===this.settings.defaultMode&&(s=!1),s&&(a=a+"d/"+this.displayMode+"/")}if(this.$refs.list){let e=this.$refs.list.currentPage;e>0&&(a=a+"p/"+(e+1)+"/")}return a=t+a},parseUrl(){if(!1===this.disableSaveSearch){let r=window.location.pathname,a=l.default.get("from_fic
2he");if(!this.saveSearchInUrl){let e=l.default.get(this.cookieKey);void 0!==e&&a&&(r=e)}l.default.remove("from_fiche",{path:"/"});const i=new RegExp(/.+?(?=\/[rpmd]\/)/);let o=r.match(i);o&&o[0]+"/";const s=/\/r\/(?:(?!\/[mpd]\/).)+/;let c=r.match(s);if(c&&c.length>0){let r=c[0].split("/");for(var e=0;e<r.length;){let a=r[e],i=r[e+1];var t=this.filters.find((e=>this.slugify(e.label)===a||this.slugify(e.slug)===a));if(t)if("checkbox"===t.mode){let e=i.split("-");for(let r of e){var n=t.options.find((e=>this.slugify(e.label)===r));n&&(n.value=!0)}}else if("dates"===t.mode){let e=i.split("-");e[0]&&(t.date_debut=e[0].replace(/[_]/g,"-")),e[1]&&(t.date_fin=e[1].replace(/[_]/g,"-"))}else if("range"===t.mode){let e=i.split("-"),n=e[0],r=e[1];n&&(t.start=n),r&&(t.end=r)}else{let e=t.options.find((e=>this.slugify(e.label)===i));e&&(t.value=e.label)}e+=2}}const u=/\/p\/([0-9]+)/;let d=r.match(u);if(d&&d.length>1){let e=d[1];this.defaultPage=Number(e)-1}const f=/.*\/m\/([0-9./-]+)/;let p=r.match(f);if(p&&p.length>1){let e=p[1].split("/");if(e.length>2){let t=e[0],n=e[1],r=e[2];this.defaultLat=t,this.defaultLng=n,this.defaultZoom=r}}const v=/\/d\/([a-zA-Z]+)\//;let m=r.match(v);if(m&&m.length>1){let e=m[1];this.displayMode=e}}},slugify:e=>e=e.toString().normalize("NFD").replace(/[\u0300-\u036f]/g,"").toLowerCase().trim().replace(/[&\/\\#, +()$~%.'":*?<>{}-]/g,"_").replace(/\s+/g,"-").replace(/[^\w\-]+/g,"").replace(/\-\-+/g,"-")}})}))}))})()})(); 3//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWEtbGlzdGUubWluLmpzIiwibWFwcGluZ3MiOiI7d0pBRUEsU0FDSUEsV0FBWSxDQUNSQywwR0FBWSxTQUVoQkMsU0FBVSwwakNBd0JWQyxNQUFPLENBQUMsV0FBWSxVQUFXLGdCQUFpQixjQUFlLFlBQy9EQyxLQUFNLEtBQ0ssQ0FDSEMsWUFBYSxJQUdyQkMsU0FBVSxDQUNOQyxhQUFjLFdBR1YsT0FGQUMsS0FBS0gsWUFBYyxFQUVaSSxLQUFLQyxLQUFNRixLQUFLRyxxQkFBcUJDLE9BQVNKLEtBQUtLLGNBQzlELEVBQ0Esb0JBQUFGLEdBQ0ksTUFBb0MsbUJBQWhDSCxLQUFLTSxTQUFTQyxjQUNQUCxLQUFLUSxRQUFRQyxRQUFRQyxHQUNqQkEsRUFBSUMsV0FHUlgsS0FBS1EsT0FHcEIsRUFDQSxpQkFBQUksR0FDSSxNQUFvQyxtQkFBaENaLEtBQUtNLFNBQVNDLGNBQ1BQLEtBQUtRLFFBQVFDLFFBQVFDLElBQ2hCQSxFQUFJQyxXQUdULEVBRWYsR0FFSixPQUFBRSxHQUdJLEdBRkFDLE9BQU8sUUFBUUMsR0FBRyxRQUFTLG1CQUFvQmYsS0FBS2dCLGdCQUVoRGhCLEtBQUtpQixZQUFhLENBQ2xCLElBQUlDLEVBQU9DLE9BQU9uQixLQUFLaUIsYUFFbkJqQixLQUFLb0IsZ0JBQWdCRixJQUNyQmxCLEtBQUtxQixhQUFhSCxFQUUxQixDQUNKLEVBQ0FJLE1BQU8sQ0FDSGQsUUFBUyxXQUNMUixLQUFLSCxZQUFjLENBQ3ZCLEdBRUosTUFBQTBCLEdBQ0EsRUFDQUMsUUFBUyxDQUVMUixlQUFnQixTQUFVUyxHQUN0QkEsRUFBRUMsaUJBQ0ZELEVBQUVFLGtCQUNGLElBQ0lDLEVBRE1kLE9BQU9XLEVBQUVJLFFBQ0hDLFFBQVEsa0JBQ3BCQyxFQUFRSCxFQUFNSSxTQUFTQyxTQUFTLGVBQ2hDQyxFQUFlLENBQ1gsT0FBVSxTQUNWLFNBQVlDLGFBQWFDLFNBQ3pCLFdBQWMsYUFDZCxPQUFVLGdCQUNWLE9BQVUsQ0FDTixHQUFNUixFQUFNaEMsS0FBSyxTQUNqQixNQUFTbUMsRUFDVCxLQUFRSSxhQUFhakIsT0FJakNKLE9BQU91QixLQUFLRixhQUFhRyxTQUFVSixHQUM5QkssTUFBSyxLQUNGQyxNQUFNLGtDQUFrQyxJQUUzQ0MsTUFBTUMsS0FDc0IsSUFBckJBLEVBQVNDLFNBQ1Q3QixPQUFPLG1CQUFtQjhCLEtBQUtGLEVBQVNHLE1BQU1DLEtBQ2hDLElBQVZmLEVBRUEvQixLQUFLK0MsTUFBTSxpQkFBa0JuQixFQUFNaEMsS0FBSyxTQUFVLEdBR2xESSxLQUFLK0MsTUFBTSxpQkFBa0JuQixFQUFNaEMsS0FBSyxTQUFVLElBR3RENEMsTUFBTSxrQ0FDVixHQUVaLEVBQ0FRLFVBQVcsU0FBVUMsR0FDakIsT0FBNEIsSUFBcEJBLEVBQU9DLFNBQWtCLGlDQUFtQyxvQkFDeEUsRUFDQSxlQUFBOUIsQ0FBZ0IrQixHQUNaLElBQUlDLEVBQVNwRCxLQUFLSCxZQUFjRyxLQUFLSyxjQUNqQ2dELEVBQU1yRCxLQUFLSyxjQUFpQkwsS0FBS0gsWUFBY0csS0FBS0ssY0FHeEQsT0FBSThDLEdBQVNDLEdBQVNELEVBQVFFLENBS2xDLEVBQ0EsZUFBQUMsQ0FBZ0JMLEdBQ1pBLEVBQU9NLE9BQVNOLEVBQU9NLE1BQ3ZCdkQsS0FBSytDLE1BQU0sZ0JBQWlCRSxFQUNoQyxFQUVBLFlBQUE1QixDQUFhbUMsR0FDVHhELEtBQUtILFlBQWMyRCxFQUNuQnhELEtBQUsrQyxNQUFNLGNBQ2YsK0lDN0lSLFNBQ0lyRCxTQUFVLGlsQkFZVkMsTUFBTyxDQUFDLFVBQVcsY0FBZSxXQUFZLGFBQWMsYUFBYyxjQUFlLE1BQ3pGQyxLQUFNLEtBQ0ssQ0FDSDZELGNBQWMsRUFDZEMsSUFBSyxLQUNMQyxLQUFNLEtBQ05DLFFBQVMsR0FDVEMsYUFBYyxHQUVkQyxtQkFBbUIsSUFJM0J4QyxNQUFPLENBRUhkLFFBQVN1RCxpQkFFRC9ELEtBQUs4RCwwQkFFQzlELEtBQUtnRSxhQUVOaEUsS0FBS3lELGNBQ056RCxLQUFLaUUsWUFHakIsR0FFSm5FLFNBQVUsQ0FDTixvQkFBQUssR0FDSSxPQUFPSCxLQUFLUSxRQUFRQyxRQUFRQyxHQUNqQkEsRUFBSUMsVUFFbkIsR0FFSixPQUFBRSxHQUNJYixLQUFLa0UsWUFFRGxFLEtBQUtNLFNBQVM2RCxzQkFDZG5FLEtBQUt5RCxjQUFlLEVBQ3BCekQsS0FBS29FLHFCQUViLEVBRUE1QyxRQUFTLENBS0wsVUFBQTZDLEdBQ0lDLFlBQVcsS0FDUHRFLEtBQUswRCxJQUFJYSxnQkFBZSxFQUFLLEdBQzlCLElBQ1AsRUFFQSxlQUFNTCxHQUVGLElBQUlNLEVBQU0sVUFDTnhFLEtB
3QUt5RSxXQUNMRCxFQUFNRSxXQUFXMUUsS0FBS3lFLGlCQUVRLElBQXRCekUsS0FBS00sU0FBWSxVQUN1QixJQUFyQ04sS0FBS00sU0FBU29ELElBQWtCLHFCQUNTLElBQXpDMUQsS0FBS00sU0FBU29ELElBQUlpQixlQUFrQixNQUUvQ0gsRUFBTUUsV0FBVzFFLEtBQUtNLFNBQVNvRCxJQUFJaUIsZUFBZUgsTUFHdEQsSUFBSUksRUFBTSxTQUNONUUsS0FBSzZFLFdBQ0xELEVBQU1GLFdBQVcxRSxLQUFLNkUsaUJBRVEsSUFBdEI3RSxLQUFLTSxTQUFZLFVBQ3VCLElBQXJDTixLQUFLTSxTQUFTb0QsSUFBa0IscUJBQ1MsSUFBekMxRCxLQUFLTSxTQUFTb0QsSUFBSWlCLGVBQWtCLE1BRS9DQyxFQUFNRixXQUFXMUUsS0FBS00sU0FBU29ELElBQUlpQixlQUFlQyxNQUd0RCxJQUFJRSxFQUFPLEVBQ1A5RSxLQUFLK0UsY0FDTEQsRUFBT0UsU0FBU2hGLEtBQUsrRSxjQUd6Qi9FLEtBQUswRCxJQUFNdUIsRUFBRXZCLElBQUksY0FBZ0IxRCxLQUFLa0YsSUFBSUMsUUFBUSxDQUFDWCxFQUFLSSxHQUFNRSxHQUUvQixpQkFBbkI5RSxLQUFhLFVBQWlELGlCQUF2QkEsS0FBS00sU0FBWSxNQUNoRU4sS0FBSzJELEtBQU9zQixFQUFFRyxRQUFRLENBQ2xCQyxVQUFXLGlCQUNYQyxLQUFNdEYsS0FBS00sU0FBU29ELElBQUlDLEtBQUs0QixJQUM3QkMsV0FBWSxDQUFFckUsT0FBT25CLEtBQUtNLFNBQVNvRCxJQUFJQyxLQUFLOEIsT0FBUyxFQUFJdEUsT0FBT25CLEtBQUtNLFNBQVNvRCxJQUFJQyxLQUFLK0IsU0FDdkZDLFNBQVUsQ0FBQ3hFLE9BQU9uQixLQUFLTSxTQUFTb0QsSUFBSUMsS0FBSzhCLE9BQVF0RSxPQUFPbkIsS0FBS00sU0FBU29ELElBQUlDLEtBQUsrQixTQUMvRUUsWUFBYSxDQUFDLEdBQUksTUFHdEJYLEVBQUVZLFVBQVU3RixLQUFLTSxTQUFTb0QsSUFBSW9DLFVBQVc5RixLQUFLTSxTQUFTb0QsSUFBSXFDLGFBQWFDLE1BQU1oRyxLQUFLMEQsS0FDbkYxRCxLQUFLMEQsSUFBSXVDLGdCQUFnQkMsVUFDekJsRyxLQUFLMEQsSUFBSTNDLEdBQUcsU0FBUyxLQUNqQmYsS0FBSzBELElBQUl1QyxnQkFBZ0JFLFFBQVEsSUFFckNuRyxLQUFLMEQsSUFBSTNDLEdBQUcsWUFBWSxLQUNwQmYsS0FBSzBELElBQUl1QyxnQkFBZ0JDLFNBQVMsVUFHaENsRyxLQUFLZ0UsYUFFTmhFLEtBQUt5RSxZQUFlekUsS0FBSzZFLFlBQWU3RSxLQUFLK0UsYUFHOUMvRSxLQUFLeUQsY0FBZSxFQUNwQnpELEtBQUtvRyxXQUhMcEcsS0FBS2lFLGFBT2JqRSxLQUFLMEQsSUFBSTNDLEdBQUcsVUFBV2YsS0FBS29HLFFBQ2hDLEVBR0EsT0FBQUEsQ0FBUTNFLEdBQ0osR0FBSXpCLEtBQUt5RCxhQUFjLENBQ25CLElBQUk0QyxFQUFXLEdBQ1hDLEVBQVl0RyxLQUFLMEQsSUFBSTZDLFlBRXpCLElBQUssSUFBSXRELEtBQVVqRCxLQUFLUSxRQUdmUixLQUFLd0csU0FBU3ZELEVBQVFxRCxJQUN2QkQsRUFBU0ksS0FBS3hELEdBS3RCakQsS0FBSzBHLHFCQUFxQkwsRUFDOUIsQ0FDSixFQUVBLGtCQUFBakMsR0FDU3BFLEtBQUt5RCxjQUNOekQsS0FBSzBHLHFCQUFxQixHQUVsQyxFQUVBLG9CQUFBQSxDQUFxQkwsR0FDakJyRyxLQUFLK0MsTUFBTSxhQUFjc0QsRUFDN0IsRUFNQSxnQkFBQU0sR0FDSSxJQUFLLElBQUlDLEtBQVU1RyxLQUFLNEQsUUFDcEJnRCxFQUFPQyxTQUVYN0csS0FBSzRELFFBQVUsRUFDbkIsRUFFQSxXQUFBa0QsQ0FBWTdELEdBQ1IsSUFBSTJELEVBQVM1RyxLQUFLNEQsUUFBUW1ELE1BQU1DLEdBQ3JCQSxFQUFNL0QsT0FBT2lDLEtBQU9qQyxFQUFPaUMsS0FFbEMwQixJQUNJM0QsRUFBT2dFLE9BQ1BMLEVBQU9NLFdBQVdDLElBQ2RDLFFBQVFDLElBQUlGLEVBQU1HLFlBQVlDLE9BQ1QsSUFBakJ0RSxFQUFPTSxZQUM0QixJQUF2QjRELEVBQWtCLGNBQzFCQSxFQUFNSyxlQUNWTCxFQUFNTSxhQUFhQyxVQUFVQyxJQUFJLGlCQUVqQ1IsRUFBTU0sYUFBYUMsVUFBVWIsT0FBTyxlQUN4QyxTQUV3QixJQUFoQkQsRUFBVyxRQUNFLElBQWpCM0QsRUFBT00sT0FDUHpDLE9BQU8sa0JBQWtCOEcsU0FBUyxzQkFDVSxJQUFoQ2hCLEVBQU9pQixLQUFvQixpQkFDbkNqQixFQUFPaUIsS0FBS0MsZ0JBQWdCLEtBQ2hDbEIsRUFBT2lCLEtBQUtKLGFBQWFDLFVBQVVDLElBQUksa0JBRXZDN0csT0FBTyxrQkFBa0JpSCxZQUFZLHNCQUNPLElBQWhDbkIsRUFBT2lCLEtBQW9CLGlCQUNuQ2pCLEVBQU9pQixLQUFLQyxnQkFBZ0IsR0FDaENsQixFQUFPaUIsS0FBS0osYUFBYUMsVUFBVWIsT0FBTyxvQkFJN0IsSUFBakI1RCxFQUFPTSxPQUNQcUQsRUFBT2tCLGdCQUFnQixVQUNnQixJQUEzQmxCLEVBQXNCLGlCQUM5QkEsRUFBT2tCLGdCQUFnQixLQUMzQmxCLEVBQU9hLGFBQWFDLFVBQVVDLElBQUksdUJBRUssSUFBM0JmLEVBQXNCLGlCQUM5QkEsRUFBT2tCLGdCQUFnQixHQUMzQmxCLEVBQU9hLGFBQWFDLFVBQVViLE9BQU8saUJBS3JELEVBRUEsZ0JBQU03QyxHQUVGLElBQUlnRSxFQUFXLEdBRWZoSSxLQUFLMkcsbUJBRUwsSUFBSXNCLEVBQWdCLENBQUMsRUFDakJqSSxLQUFLMkQsT0FDTHNFLEVBQWdCLENBQUN0RSxLQUFNM0QsS0FBSzJELE9BSWhDLElBQUssSUFBSVYsS0FBVWpELEtBQUtHLHFCQUdwQixHQUFJOEMsRUFBT2dFLE9BQ1AsR0FBSWhFLEVBQU9pRixVQUNQLEdBQXlCLFFBQXJCakYsRUFBT2lGLFVBQXFCLENBRTVCLElBQUlDLEVBQVUsSUFBSUMsU0FBUSxDQUFDQyxFQUFTQyxLQUNoQyxJQUFJMUIsRUFBUzJCLFNBQVNDLElBQUl2RixFQUFPZ0UsT0FBT2xHLEdBQUcsU0FBUyxLQUNoRDZGLEVBQU9NLFdBQVdDLElBRWRBLEVBQU1zQixVQUFVLHVDQUE4Q3hGLEVBQU9xQyxLQUFPLGFBQWEsSUFJN0ZzQixFQUFPM0QsT0FBU0EsRUFFaEJqRCxLQUFLNEQsUUFBUTZDLEtBQUtHLEdBQ2xCeUIsR0FBUyxJQUVWdEgsR0FBRyxTQUFTLEtBQ1hzSCxHQUFTLElBQ1ZyQyxNQUFNaEcsS0FBSzBELEtBRWRrRCxFQUFPN0YsR0FBRyxhQUFhLEtBQ25CNkYsRUFBT00sV0FBV0MsU0FDcUIsSUFBdkJBLEVBQWtCLGNBQzFCQSxFQUFNSyxlQUNWTCxFQUFNTSxhQUFhQyxVQUFVQyxJQUFJLGVBQWUsR0FDbEQsSUFFTmYsRUFBTzdGLEdBQUcsWUFBWSxLQUNsQjZGLEVBQU9NLFdBQVdDLElBQ2RBLEVBQU1NLGFBQWFDLFVBQVViLE9BQU8sZUFBZSxHQUNyRCxHQUNKLElBR05tQixFQUFTdkIsS0FBSzBCLEVBR2xCLE1BQU8sR0FBeUIsUUFBckJsRixFQUFPaUYsVUFBcUIsQ0FFbkMsSUFBSUMsRUFBVSxJQUFJQyxTQUFRLENBQUNDLEVBQVNDLEtBRWhDLElBQUkxQixFQUFTMkIsU0FBU0csSUFBSXpGLEVBQU9nRSxPQUFPbEcsR0FBRyxTQUFTLEtBQ2hENkYsRUFBT00sV0FBV0MsSUFFZEEsRUFBTXNCLFVBQVUsdUNBQThDeEYsRUFBT3FDLEtBQU8sYUFBYSxJQUk3RnNCLEVBQU8zRCxPQUFTQSxFQUVoQmpELEtBQUs0RCxRQUFRNkMsS0FBS0csR0FDbEJ5QixHQUFTLElBRVZ0SCxHQUFHLFNBQVMsS0FDWHNILEdBQVMsSUFDVnJDLE1BQU1oRyxLQUFLMEQsS0FFZGtELEVBQU83RixHQUFHLGFBQWEsS0FDbkI2RixFQUFPTSxXQUFXQyxTQUNxQixJQUF2QkEsRUFBa0IsY0FDMUJBLEVBQU1LLGVBQ1ZMLEVBQU1NLGFBQWFDLFVBQVVDLElBQUksZUFBZSxHQUNsRCxJQUVOZixFQUFPN0YsR0FBRyxZQUFZLEtB
3Q2xCNkYsRUFBT00sV0FBV0MsSUFDZEEsRUFBTU0sYUFBYUMsVUFBVWIsT0FBTyxlQUFlLEdBQ3JELEdBQ0osSUFHTm1CLEVBQVN2QixLQUFLMEIsRUFFbEIsT0FJSixHQUEyQixJQUF2QmhILE9BQU84QixFQUFPdUIsTUFBcUMsSUFBdkJyRCxPQUFPOEIsRUFBTzJCLEtBQVksQ0FFdEQsSUFBSWdDLEVBQVMzQixFQUFFMkIsT0FBTyxDQUFDM0QsRUFBT3VCLElBQUt2QixFQUFPMkIsS0FBTXFELEdBQWVqQyxNQUFNaEcsS0FBSzBELEtBQzFFa0QsRUFBTzNELE9BQVNBLEVBSWhCMkQsRUFBTzZCLFVBQVUsdUNBQThDeEYsRUFBT3FDLEtBQU8sY0FFN0V0RixLQUFLNEQsUUFBUTZDLEtBQUtHLEVBQ3RCLE9BT0Z3QixRQUFRTyxJQUFJWCxFQUV0QixFQUVBLFNBQUEvRCxHQUNJLEdBQUlqRSxLQUFLNEQsU0FBVzVELEtBQUs0RCxRQUFReEQsT0FBUyxFQUFHLENBRXpDLElBQUl3SSxFQUFRLElBQUkzRCxFQUFFNEQsYUFBYTdJLEtBQUs0RCxTQUVwQzVELEtBQUswRCxJQUFJb0YsVUFBVUYsRUFBTXJDLFlBQzdCLENBQ0osRUFFQSx3QkFBTXdDLEdBQ0YvSSxLQUFLOEQsbUJBQW9CLEVBQ3pCOUQsS0FBS3lELGNBQWUsUUFFZHpELEtBQUtnRSxhQUVYaEUsS0FBS2lFLFlBQ0xqRSxLQUFLOEQsbUJBQW9CLENBRTdCLEVBTUEsUUFBQTBDLENBQVN3QyxFQUFPQyxHQUNaLElBQUlyRSxHQUFPb0UsRUFBTXBFLElBQU1xRSxFQUFPQyxXQUFXdEUsTUFBUW9FLEVBQU1wRSxJQUFNcUUsRUFBT0UsV0FBV3ZFLEtBQU8sRUFDbEZKLEdBQU93RSxFQUFNeEUsSUFBTXlFLEVBQU9DLFdBQVcxRSxNQUFRd0UsRUFBTXhFLElBQU15RSxFQUFPRSxXQUFXM0UsS0FBTyxFQUN0RixPQUFPSSxHQUFPSixDQUNsQixxSkNwV1IsU0FDSTlFLFNBQVUsNkdBR1ZDLE1BQU8sQ0FBQyxzS0NKWixTQUNJRCxTQUFVLGtpQ0F3QlZDLE1BQU8sQ0FBQyxlQUFnQixlQUV4QkcsU0FBVSxDQUVOLFVBQUFzSixHQUVJLElBQUlDLEVBQU0sRUFHVixHQUFLckosS0FBS0gsWUFBYyxFQUFLd0osRUFBSyxDQUUxQnJKLEtBQUtELGFBQWVzSixJQUNwQkEsRUFBTXJKLEtBQUtELGNBR2YsSUFBSXVKLEVBQVEsR0FFWixJQUFLLElBQUlDLEVBQUksRUFBR0EsR0FBS0YsRUFBS0UsSUFDdEJELEVBQU03QyxLQUFLOEMsR0FTZixPQUxJdkosS0FBS0QsYUFBZXNKLElBQ3BCQyxFQUFNN0MsS0FBSyxhQUNYNkMsRUFBTTdDLEtBQUt6RyxLQUFLRCxlQUdidUosQ0FHWCxDQUFPLEdBQUl0SixLQUFLSCxZQUFlRyxLQUFLRCxhQUFlc0osR0FBUXJKLEtBQUtELGFBQWVzSixFQUFLLENBRTVFckosS0FBS0QsYUFBZXNKLElBQ3BCQSxFQUFNckosS0FBS0QsY0FHZixJQUFJdUosRUFBUSxHQUVSRSxFQUFpQixFQUNyQixJQUFLLElBQUlELEVBQUksRUFBR0EsRUFBSUYsRUFBS0UsSUFDckJELEVBQU1HLFFBQVN6SixLQUFLRCxhQUFld0osR0FDbkNDLElBT0osT0FKQUYsRUFBTUcsUUFBUSxhQUNkSCxFQUFNRyxRQUFRLEdBR1BILENBQ1gsQ0FBTSxHQUFJdEosS0FBS0QsYUFBZXNKLEVBQUksQ0FDOUIsSUFBSUssRUFBVzFKLEtBQUtILFlBQWMsRUFhbEMsTUFWWSxDQUNSLEVBQ0EsWUFDQzZKLEVBQVUsRUFDWEEsRUFDQ0EsRUFBVSxFQUNYLFlBQ0ExSixLQUFLRCxhQUliLENBR0EsTUFBTyxFQUNYLEVBRUEsZUFBQTRKLEdBQ0ksSUFBSUMsRUFBWSxzQ0FJaEIsT0FIeUIsSUFBckI1SixLQUFLSCxjQUNMK0osR0FBYSxhQUVWQSxDQUNYLEVBRUEsZUFBQUMsR0FDSSxJQUFJRCxFQUFZLHNDQUloQixPQUhJNUosS0FBS0gsY0FBaUJHLEtBQUtELGFBQWUsSUFDMUM2SixHQUFhLGFBRVZBLENBQ1gsR0FJSnBJLFFBQVMsQ0FFTCxXQUFBc0ksQ0FBWXRHLEdBQ1IsR0FBSUEsR0FBV3hELEtBQUtELGNBQWdCeUQsR0FBVyxFQUFHLENBQzlDLElBQUl1RyxFQUFhakosT0FBTyxrQkFBa0JrSixTQUFTQyxJQUFNLEtBQ3pEbkosT0FBTyxhQUFhb0osUUFBUSxDQUFDQyxVQUFXSixJQUN4Qy9KLEtBQUsrQyxNQUFNLGNBQWdCUyxFQUFVLEVBQ3pDLENBRUosRUFFQSxZQUFBNEcsR0FDSSxJQUFJQyxFQUFXckssS0FBS0gsWUFDcEJHLEtBQUs4SixZQUFZTyxFQUNyQixFQUVBLFFBQUFDLEdBQ0ksSUFBSUQsRUFBV3JLLEtBQUtILFlBQWMsRUFDbENHLEtBQUs4SixZQUFZTyxFQUNyQixvSkNsSVIsU0FDSTdLLFdBQVksQ0FDUixxSEFBbUIsU0FFdkJFLFNBQVUsbWVBU1ZDLE1BQU8sQ0FBQyxlQUFnQixjQUFlLFdBQVksV0FDbkRDLEtBQU0sS0FDSyxDQUNIMkssTUFBTyxDQUFDLE9BQVEsTUFBTyxXQUcvQi9JLFFBQVMsQ0FFTCxVQUFBZ0osQ0FBV0MsR0FDUHpLLEtBQUsrQyxNQUFNLGNBQWUwSCxFQUM5QixFQUVBLFdBQUFDLEdBQ0kxSyxLQUFLK0MsTUFBTSxlQUNmLDBKQzdCUixTQUNJckQsU0FBVSxrT0FPVkMsTUFBTyxDQUFDLE9BQVEsU0FDaEJDLEtBQU0sS0FDSyxDQUNIK0ssWUFBYyxDQUFFQyxNQUFPLFFBQVNDLEtBQU8sUUFBU25ILElBQU0sV0FHOURsQyxRQUFTLENBRUwsS0FBQXNKLEdBQ0k5SyxLQUFLK0MsTUFBTSxRQUNmLG9OQ2ZSLFNBQ0l2RCxXQUFZLENBQUMsYUFBYyxLQUMzQkUsU0FBVSxtcURBOENWQyxNQUFPLENBQUMsU0FDUkMsS0FBTSxLQUNLLENBQ0htTCxLQUFNLEtBQ05DLE9BQVEsS0FDUkMsV0FBWSxLQUNaQyxTQUFVLEtBQ1ZDLGFBQWMsS0FFZEMsZ0JBQWlCLEVBRWpCQyxZQUFjLENBQUMsRUFDZkMsVUFBWSxDQUFDLElBR3JCLE9BQUF6SyxHQUNJYixLQUFLK0ssS0FBTy9LLEtBQUt1TCxTQUNidkwsS0FBS3dMLE1BQU1QLGFBQ1hqTCxLQUFLaUwsV0FBYWpMLEtBQUt3TCxNQUFNUCxXQUM3QmpMLEtBQUttTCxhQUFlbkwsS0FBS3dMLE1BQU1MLGNBRS9CbkwsS0FBS3dMLE1BQU1OLFdBQ1hsTCxLQUFLa0wsU0FBV2xMLEtBQUt3TCxNQUFNTixVQUcvQmxMLEtBQUtxTCxZQUFjckwsS0FBS3lMLDZCQUN4QnpMLEtBQUtzTCxVQUFZdEwsS0FBS3lMLDZCQUV0QnpMLEtBQUtvTCxnQkFBaUIsQ0FDMUIsRUFDQSxPQUFBTSxHQUM0QixVQUFwQjFMLEtBQUt3TCxNQUFNRyxNQUNYM0wsS0FBSzRMLGNBRWIsRUFDQXBLLFFBQVMsQ0FDTCxlQUFBcUssQ0FBZ0JDLEVBQWVDLEVBQVNDLEdBQ3BDaE0sS0FBS3NMLFVBQVVXLFFBQVVGLEVBQ3pCL0wsS0FBS2lMLFdBQWFjLEVBQ2xCL0wsS0FBS2tNLGFBQ1QsRUFFQSxhQUFBQyxDQUFjTCxFQUFlQyxFQUFTQyxHQUNsQ2hNLEtBQUtrTCxTQUFXYSxFQUNoQi9MLEtBQUtrTSxhQUNULEVBRUFULDJCQUEwQixLQUNmLENBQ0hXLE9BQVMsRUFBQUMsT0FDVEMsVUFBVyxRQUNYQyxVQUFVLEVBQ1ZDLFdBQVksUUFDWlAsUUFBUyxJQUFJUSxLQUNiQyxRQUFVLE9BR2xCLEtBQUFDLEdBQzRCLFVBQXBCM00sS0FBS3dMLE1BQU1HLE1BQ1AzTCxLQUFLZ0wsU0FDTGhMLEtBQUtnTCxPQUFPNEIsVUFDWjVNLEtBQUtnTCxPQUFTLEtBRWRoTCxLQUFLaUwsV0FBYSxLQUNsQmpMLEtBQUtrTCxTQUFXLEtBQ2hCbEwsS0FBS21MLGFBQWUsTUFJeEJuTCxLQUFLNEws
3Z0JBQ3FCLFVBQXBCNUwsS0FBS3dMLE1BQU1HLE9BR2pCM0wsS0FBS2lMLFdBQWEsS0FDbEJqTCxLQUFLa0wsU0FBVyxLQUV4QixFQUNBLGdCQUFBMkIsQ0FBaUJDLEdBQ2IsSUFBSUMsRUFBV0QsRUFBUSxHQUN2QixHQUFHQyxFQUFXLEVBRVYsT0FBT0QsRUFBTSxNQUliLElBQ0lFLEVBREFDLEVBQW9CSCxFQUFnQyxHQUF2QjdNLEtBQUtpTixNQUFNSCxHQVc1QyxPQVRrQyxHQUEvQi9ILFNBQVNpSSxHQUNSQSxFQUFvQixHQUNoQmpJLFNBQVNpSSxHQUFxQixLQUNsQ0EsRUFBb0IsSUFBTWpJLFNBQVNpSSxJQUV2Q0QsRUFBaUIvTSxLQUFLaU4sTUFBTUgsR0FBVSxJQUNqQ0ksTUFBT25JLFNBQVNpSSxNQUNqQkQsR0FBa0JoSSxTQUFTaUksSUFFeEJELENBRWYsRUFDQSxnQkFBQUksQ0FBaUJOLEdBQ2IsT0FBUTlNLEtBQUt3TCxNQUFNNkIsTUFFZixJQUFLLFdBQ0QsT0FBT3JJLFNBQVM4SCxHQUFRLEtBRTVCLElBQUssV0FDRCxPQUFPOUgsU0FBUzhILEdBQVEsSUFFNUIsSUFBSyxRQUNELE9BQU85TSxLQUFLNk0saUJBQWlCQyxHQUFRLEdBRXpDLElBQUssU0FDRCxPQUFPOUgsU0FBUzhILEdBQVEsSUFFNUIsUUFDSSxPQUFPOUgsU0FBUzhILEdBQVEsR0FHcEMsRUFDQSxZQUFBbEIsR0FFSSxHQUFvQixPQUFoQjVMLEtBQUtnTCxPQUFpQixDQUV0QmxLLE9BQU8sVUFBWWQsS0FBSytLLE1BQU11QyxPQUFPLGFBQWV0TixLQUFLK0ssS0FBTyxTQUFXL0ssS0FBSytLLEtBQU8sWUFHdkYsSUFBSUMsRUFBU3VDLFNBQVNDLGVBQWV4TixLQUFLK0ssTUFJMUMsR0FGQTNELFFBQVFDLElBQUtySCxLQUFLd0wsT0FFZFIsRUFBUSxDQUVSLElBQUk1SCxFQUFRcEQsS0FBS3dMLE1BQU1pQyxJQUNuQnpOLEtBQUt3TCxNQUFNcEksUUFDWEEsRUFBUXBELEtBQUt3TCxNQUFNcEksT0FFdkIsSUFBSUMsRUFBTXJELEtBQUt3TCxNQUFNbkMsSUFDakJySixLQUFLd0wsTUFBTW5JLE1BQ1hBLEVBQU1yRCxLQUFLd0wsTUFBTW5JLEtBR3JCckQsS0FBS2dMLE9BQVMwQyxXQUFXQyxPQUFPM0MsRUFBUSxDQUNwQzVILE1BQU8sQ0FBQ0EsRUFBT0MsR0FDZnVLLFNBQVMsRUFDVEMsS0FBUTdOLEtBQUt3TCxNQUFNbkMsSUFBTSxJQUFTLEdBQUssRUFDdkN5RSxPQUFRLENBQ0pDLFNBQVUsRUFDVkMsR0FBSWhPLEtBQUtvTixpQkFDVGEsS0FBT25CLEdBQ0kzTCxPQUFRMkwsRUFBTW9CLFFBQVEsS0FBTSxNQUczQ0MsTUFBTyxDQUNILElBQU9sTyxLQUFLaU4sTUFBT2xOLEtBQUt3TCxNQUFNaUMsS0FDOUIsSUFBT3hOLEtBQUtDLEtBQU1GLEtBQUt3TCxNQUFNbkMsUUFLckNySixLQUFLZ0wsT0FBT2pLLEdBQUcsU0FBVWYsS0FBS2tNLFlBQ2xDLENBQ0osQ0FDSixFQUNBLFdBQUFBLEdBR0ksR0FGQTlFLFFBQVFDLElBQUssZUFDYkQsUUFBUUMsSUFBS3JILEtBQUtpTCxXQUFZakwsS0FBS2tMLFVBQ1gsVUFBcEJsTCxLQUFLd0wsTUFBTUcsTUFPWCxHQUxJM0wsS0FBS2lMLGFBQ0xqTCxLQUFLbUwsYUFBZW5MLEtBQUtpTCxZQUU3QjdELFFBQVFDLElBQUssa0JBRVRySCxLQUFLaUwsWUFBY2pMLEtBQUtrTCxTQUFVLENBRWxDLElBQUlrRCxFQUFhcE8sS0FBS2lMLFdBQVdvRCxNQUFNLEtBQ25DQyxFQUFXdE8sS0FBS2tMLFNBQVNtRCxNQUFNLEtBRy9CRSxFQUFZOUIsS0FBSytCLE1BQU1KLEVBQVcsR0FBSUEsRUFBVyxHQUFLLEVBQUdBLEVBQVcsSUFDMUQzQixLQUFLK0IsTUFBTUYsRUFBUyxHQUFJQSxFQUFTLEdBQUssRUFBR0EsRUFBUyxJQUdsREMsSUFDVnZPLEtBQUttTCxhQUFlbkwsS0FBS2lMLFdBQ3pCakwsS0FBS3lPLE1BQU1DLFFBQVE1QixNQUFRLEtBQzNCOU0sS0FBS2tMLFNBQVcsS0FHeEIsT0FFRyxHQUF3QixVQUFwQmxMLEtB
3QUt3TCxNQUFNRyxLQUFrQixDQUVwQyxJQUFJbUIsRUFBUTlNLEtBQUtnTCxPQUFPMkQsS0FBSSxHQUM1QjNPLEtBQUt3TCxNQUFNcEksTUFBUTRCLFNBQVM4SCxFQUFNLElBQ2xDOU0sS0FBS3dMLE1BQU1uSSxJQUFNMkIsU0FBUzhILEVBQU0sR0FDcEMsQ0FFd0IsVUFBcEI5TSxLQUFLd0wsTUFBTUcsT0FDWDNMLEtBQUt3TCxNQUFNUCxXQUFhakwsS0FBS2lMLFdBQzdCakwsS0FBS3dMLE1BQU1OLFNBQVdsTCxLQUFLa0wsVUFHL0JsTCxLQUFLK0MsTUFBTSxlQUFnQi9DLEtBQUt3TCxNQUNwQyxFQUVBRCxPQUFNLEtBQ00sQ0FBQyxNQUFRLEtBQU8sS0FBTyxLQUFPLE1BQU0yQyxRQUFRLFVBQVVVLElBQ3pEQSxFQUFJQyxPQUFPQyxnQkFBZ0IsSUFBSUMsV0FBVyxJQUFJLEdBQUssSUFBTUgsRUFBSSxHQUFHSSxTQUFTLCtKQ2hRMUYsU0FDSXhQLFdBQWEsQ0FDVHlQLFNBQVUsVUFDVixpQkFBa0IsV0FFdEJ2UCxTQUFXLDJtREFnQ1hDLE1BQU8sQ0FBQyxVQUFXLFdBQVksb0JBQy9CQyxLQUFNLEtBQ0ssQ0FDUCxHQUVKRSxTQUFXLENBRVgsRUFDQSxPQUFBZSxHQUNBLEVBQ0FXLFFBQVUsQ0FHTixZQUFBME4sR0FDSWxQLEtBQUsrQyxNQUFNLGVBQ2YsRUFFQSxXQUFBbUosQ0FBWVYsR0FDUnhMLEtBQUsrQyxNQUFNLGVBQWdCeUksRUFDL0IsRUFFQSxjQUFBMkQsR0FDSW5QLEtBQUsrQyxNQUFNLG1CQUNmLEVBRUEsS0FBQTRKLEdBQ0ksSUFBSyxJQUFLeEosRUFBT2lNLEtBQVFDLE9BQU9DLFFBQVF0UCxLQUFLeU8sT0FDekNXLEVBQUksR0FBR3pDLFFBRVgzTSxLQUFLK0MsTUFBTSxnQkFDZiwwRkN0RVIsU0FDSXJELFNBQVUsb0ZBS1ZDLE1BQU8sQ0FBQyxRQUNSQyxLQUFNLEtBQ0ssQ0FDSG1MLEtBQU8sT0FHZixPQUFBbEssR0FFQSxFQUNBVyxRQUFVLENBQ04sS0FBQXNKLEdBQ0k5SyxLQUFLK0MsTUFBTSxRQUNmLGljQ2xCSndNLDZEQUFzQyxXQVN0QyxPQVJBQSxFQUFXRixPQUFPRyxRQUFVLFNBQVNDLEdBQ2pDLElBQUssSUFBSUMsRUFBR25HLEVBQUksRUFBR29HLEVBQUlDLFVBQVV4UCxPQUFRbUosRUFBSW9HLEVBQUdwRyxJQUU1QyxJQUFLLElBQUlzRyxLQURUSCxFQUFJRSxVQUFVckcsR0FDTzhGLE9BQU9TLFVBQVVDLGVBQWVDLEtBQUtOLEVBQUdHLEtBQ3pESixFQUFFSSxHQUFLSCxFQUFFRyxJQUVqQixPQUFPSixDQUNYLEVBQ09GLEVBQVNVLE1BQU1qUSxLQUFNNFAsVUFDaEMsR0FDSU0sRUFBa0QsV0FDbEQsSUFBSyxJQUFJUixFQUFJLEVBQUduRyxFQUFJLEVBQUc0RyxFQUFLUCxVQUFVeFAsT0FBUW1KLEVBQUk0RyxFQUFJNUcsSUFBS21HLEdBQUtFLFVBQVVyRyxHQUFHbkosT0FDeEUsSUFBSWdRLEVBQUlDLE1BQU1YLEdBQUlZLEVBQUksRUFBM0IsSUFBOEIvRyxFQUFJLEVBQUdBLEVBQUk0RyxFQUFJNUcsSUFDekMsSUFBSyxJQUFJZ0gsRUFBSVgsVUFBVXJHLEdBQUlpSCxFQUFJLEVBQUdDLEVBQUtGLEVBQUVuUSxPQUFRb1EsRUFBSUMsRUFBSUQsSUFBS0YsSUFDMURGLEVBQUVFLEdBQUtDLEVBQUVDLEdBQ2pCLE9BQU9KLENBQ1gsRUFRSU0sRUFBc0IsSUFDMUIsU0FBU0MsRUFBa0JDLEVBQVNDLEdBQ2hDLElBQUlDLEVBQU8sQ0FDUEMsT0FBUXhCLEVBQVNBLEVBQVMsQ0FBQyxFQUFHLFlBQWlCeUIsRUFBVUMsZUFDekRDLEtBQU0sV0E0RFYsU0FBU0MsSUFDTCxJQUFJQyxFQUNKLE9BQTJDLFFBQWpDQSxFQUFLTixFQUFLTyx5QkFBc0MsSUFBUEQsT0FBZ0IsRUFBU0EsRUFBR0UsZUFDMUVDLGVBQWlCaEUsU0FBU2dFLGFBQ25DLENBQ0EsU0FBU0MsRUFBZUMsR0FDcEIsT0FBT0EsRUFBR0MsS0FBS1osRUFDbkIsQ0FDQSxTQUFTYSxJQUNMLElBQUlaLEVBQVNELEVBQUtDLFFBQ1MsSUFBdkJBLEVBQU9hLGFBQStDLElBQXRCYixFQUFPYyxhQUdaLElBQXRCZCxFQUFPZSxZQUNaQyxPQUFPQyx1QkFBc0IsV0FLekIsUUFKK0JDLElBQTNCbkIsRUFBS08sb0JBQ0xQLEVBQUtPLGtCQUFrQmEsTUFBTUMsV0FBYSxTQUMxQ3JCLEVBQUtPLGtCQUFrQmEsTUFBTUUsUUFBVSxjQUVoQkgsSUFBdkJuQixFQUFLdUIsY0FBNkIsQ0FDbEMsSUFBSUMsR0FBYXhCLEVBQUt5QixLQUFLQyxZQUFjLEdBQUt6QixFQUFPYyxXQUNyRGYsRUFBS3VCLGNBQWNILE1BQU16TSxNQUFRNk0sRUFBWSxLQUM3Q3hCLEVBQUtPLGtCQUFrQmEsTUFBTXpNLE1BQ3pCNk0sUUFDMEJMLElBQXJCbkIsRUFBSzJCLFlBQ0EzQixFQUFLMkIsWUFBWUQsWUFDakIsR0FDTixLQUNSMUIsRUFBS08sa0JBQWtCYSxNQUFNUSxlQUFlLGNBQzVDNUIsRUFBS08sa0JBQWtCYSxNQUFNUSxlQUFlLFVBQ2hELENBQ0osR0FFUixDQUNBLFNBQVNDLEVBQVdsUixHQUNoQixHQUFrQyxJQUE5QnFQLEVBQUtoRixjQUFjMUwsT0FBYyxDQUNqQyxJQUFJd1MsT0FBc0NYLElBQXhCbkIsRUFBS0MsT0FBTzlFLFVBQzFCLElBQUE0RyxjQUFhLElBQUlwRyxLQUFRcUUsRUFBS0MsT0FBTzlFLFVBQVksRUFDL0MsSUFBSVEsS0FDSixJQUFJQSxLQUFLcUUsRUFBS0MsT0FBTzlFLFFBQVE2RyxXQUMvQkMsR0FBVyxJQUFBQyxpQkFBZ0JsQyxFQUFLQyxRQUNwQzZCLEVBQVlLLFNBQVNGLEVBQVNHLE1BQU9ILEVBQVNJLFFBQVNKLEVBQVNLLFFBQVNSLEVBQVlTLG1CQUNyRnZDLEVBQUtoRixjQUFnQixDQUFDOEcsR0FDdEI5QixFQUFLd0Msc0JBQXdCVixDQUNqQyxNQUNVWCxJQUFOeFEsR0FBOEIsU0FBWEEsRUFBRTRMLE1BeXdEN0IsU0FBcUI1TCxHQUNqQkEsRUFBRUMsaUJBQ0YsSUFBSTZSLEVBQXVCLFlBQVg5UixFQUFFNEwsS0FBb0JtRyxHQUFjLElBQUFDLGdCQUFlaFMsR0FBSWlTLEVBQVFGLE9BQzdEdkIsSUFBZG5CLEVBQUs2QyxNQUFzQkgsSUFBZ0IxQyxFQUFLNkMsT0FDaEQ3QyxFQUFLNkMsS0FBS0MsWUFDTjlDLEVBQUtJLEtBQUt5QyxNQUFLLElBQUFFLEtBQUkvQyxFQUFLNkMsS0FBS0MsY0FBZ0I5QyxFQUFLSSxLQUFLeUMsS0FBSyxNQUVwRSxJQUFJbEcsRUFBTS9JLFdBQVdnUCxFQUFNSSxhQUFhLFFBQVN6SyxFQUFNM0UsV0FBV2dQLEVBQU1JLGFBQWEsUUFBU2pHLEVBQU9uSixXQUFXZ1AsRUFBTUksYUFBYSxTQUFVQyxFQUFXL08sU0FBUzBPLEVBQU01RyxNQUFPLElBQUtrSCxFQUFRdlMsRUFBRXVTLFFBQ3hMVCxFQUF5QixLQUFaOVIsRUFBRXdTLE1BQWUsR0FBSyxFQUFLLEdBQ3pDQyxFQUFXSCxFQUFXbEcsRUFBT21HLEVBQ2pDLFFBQTJCLElBQWhCTixFQUFNNUcsT0FBZ0QsSUFBdkI0RyxFQUFNNUcsTUFBTTFNLE9BQWMsQ0FDaEUsSUFBSStULEVBQWFULElBQVU1QyxFQUFLc0QsWUFBYUMsRUFBZVgsSUFBVTVDLEVBQUt3RCxjQUN2RUosRUFBV3pHLEdBQ1h5RyxFQUNJN0ssRUFDSTZLLEdBQ0EsSUFBQUwsTUFBS00sS0FDSixJQUFBTixLQUFJTSxLQUFlLElBQUFOLE1BQUsvQyxFQUFLNkMsT0FDbENVLEdBQ0FFLE9BQWtCdEMsR0FBWSxFQUFHbkIsRUFBS3NELGNBRXJDRixFQUFXN0ssSUFDaEI2SyxFQUNJUixJQUFVNUMsRUFBS3NELFlBQWNGLEVBQVc3SyxHQUFNLElBQUF3SyxNQUFLL0MsRUFBSzZDLE1BQVFsRyxFQUNoRTRHLEdBQ0FFLE9BQWtCdEMsRUFBVyxFQUFHbkIsRUFBS3NELGNBRXpDdEQsRUFBSzZDLE1BQ0xRLElBQ1UsSUFBVHRHLEVBQ0txRyxFQUFXSCxJQUFhLEdBQ3hCOVQsS0FBS3VVLElBQUlOLEVBQVdILEdBQVlsRyxLQUN0Q2lELEVBQUs2QyxLQUFLQyxZQUNOOUMsRUFBS0ksS0FBS3lDLE1BQUssSUFBQUUsS0FBSS9DLEVBQUs2QyxLQUFLQyxjQUFnQjlDLEVBQUtJLEtBQUt5QyxLQUFLLE1BRXBFRCxFQUFNNUcsT0FBUSxJQUFBMkgsS0FBSVAsRUFDdEIsQ0FDSixDQTd5RFFRLENBQVlqVCxHQUVoQixJQUFJa1QsRUFBWTdELEVBQUs4RCxPQUFPOUgsTUFDNUIrSCxJQUNBQyxLQUNJaEUsRUFBSzhELE9BQU85SCxRQUFVNkgsR0FDdEI3RCxFQUFLaUUsa0JBRWIsQ0FhQSxTQUFTRixJQUNMLFFBQXlCNUMsSUFBckJuQixFQUFLc0Qsa0JBQW9EbkMsSUFBdkJuQixFQUFLd0QsY0FBM0MsQ0FFQSxJQWZtQlUsRUFBTXJCLEVBZXJCVCxHQUFTbE8sU0FBUzhMLEVBQUtzRCxZQUFZdEgsTUFBTW1JLE9BQU8sR0FBSSxLQUFPLEdBQUssR0FBSTlCLEdBQVduTyxTQUFTOEwsRUFBS3dELGNBQWN4SCxNQUFPLEtBQU8sR0FBSyxHQUFJc0csT0FBaUNuQixJQUF2Qm5CLEVBQUtvRSxlQUM5SWxRLFNBQVM4TCxFQUFLb0UsY0FBY3BJLE1BQU8sS0FBTyxHQUFLLEdBQ2hELE9BQ1ltRixJQUFkbkIsRUFBSzZDLE9BbEJVcUIsRUFtQk85QixFQW5CRFMsRUFtQlE3QyxFQUFLNkMsS0FBS0MsWUFBdkNWLEVBbEJJOEIsRUFBTyxHQUFNLElBQUssSUFBQW5CLEtBQUlGLElBQVM3QyxFQUFLSSxLQUFLeUMsS0FBSyxLQW9CdEQsSUFBSXdCLE9BQXdDbEQsSUFBeEJuQixFQUFLQyxPQUFPcUUsU0FDM0J0RSxFQUFLQyxPQUFPOUUsU0FDVDZFLEVBQUt1RSxnQkFDTHZFLEVBQUt3Qyx1QkFFRCxLQURKLElBQUFULGNBQWEvQixFQUFLd0Msc0JBQXVCeEMsRUFBS0MsT0FBTzlFLFNBQVMsR0FFbEVxSixPQUF3Q3JELElBQXhCbkIsRUFBS0MsT0FBT3dFLFNBQzNCekUsRUFBS0MsT0FBT3JFLFNBQ1RvRSxFQUFLMEUsZ0JBQ0wxRSxFQUFLd0MsdUJBRUQsS0FESixJQUFBVCxjQUFhL0IsRUFBS3dDLHNCQUF1QnhDLEVBQUtDLE9BQU9yRSxTQUFTLEdBRXRFLFFBQTRCdUYsSUFBeEJuQixFQUFLQyxPQUFPd0UsY0FDWXRELElBQXhCbkIsRUFBS0MsT0FBT3FFLFNBQ1p0RSxFQUFLQyxPQUFPcUUsUUFBVXRFLEVBQUtDLE9BQU93RSxRQUFTLENBQzNDLElBQUlFLEdBQVcsSUFBQUMsK0JBQThCNUUsRUFBS0MsT0FBT3FFLFFBQVFPLFdBQVk3RSxFQUFLQyxPQUFPcUUsUUFBUVEsYUFBYzlFLEVBQUtDLE9BQU9xRSxRQUFRUyxjQUMvSEMsR0FBVyxJQUFBSiwrQkFBOEI1RSxFQUFLQyxPQUFPd0UsUUFBUUksV0FBWTdFLEVBQUtDLE9BQU93RSxRQUFRSyxhQUFjOUUsRUFBS0MsT0FBT3dFLFFBQVFNLGNBQy9IRSxHQUFjLElBQUFMLCtCQUE4QnhDLEVBQU9DLEVBQVNDLEdBQ2hFLEdBQUkyQyxFQUFjRCxHQUFZQyxFQUFjTixFQUFVLENBQ2xELElBQUlPLEdBQVMsSUFBQUMsY0FBYV
3IsR0FDMUJ2QyxFQUFROEMsRUFBTyxHQUNmN0MsRUFBVTZDLEVBQU8sR0FDakI1QyxFQUFVNEMsRUFBTyxFQUNyQixDQUNKLEtBQ0ssQ0FDRCxHQUFJVixFQUFlLENBQ2YsSUFBSUMsT0FBa0N0RCxJQUF4Qm5CLEVBQUtDLE9BQU93RSxRQUNwQnpFLEVBQUtDLE9BQU93RSxRQUNaekUsRUFBS0MsT0FBT3JFLFNBQ2xCd0csRUFBUWpULEtBQUt3TixJQUFJeUYsRUFBT3FDLEVBQVFJLGVBQ2xCSixFQUFRSSxhQUNsQnhDLEVBQVVsVCxLQUFLd04sSUFBSTBGLEVBQVNvQyxFQUFRSyxlQUNwQ3pDLElBQVlvQyxFQUFRSyxlQUNwQnhDLEVBQVVuVCxLQUFLd04sSUFBSTJGLEVBQVNtQyxFQUFRTSxjQUM1QyxDQUNBLEdBQUlWLEVBQWUsQ0FDZixJQUFJQyxPQUFrQ25ELElBQXhCbkIsRUFBS0MsT0FBT3FFLFFBQ3BCdEUsRUFBS0MsT0FBT3FFLFFBQ1p0RSxFQUFLQyxPQUFPOUUsU0FDbEJpSCxFQUFRalQsS0FBS29KLElBQUk2SixFQUFPa0MsRUFBUU8sZUFDbEJQLEVBQVFPLFlBQWN4QyxFQUFVaUMsRUFBUVEsZUFDbER6QyxFQUFVaUMsRUFBUVEsY0FDbEJ6QyxJQUFZaUMsRUFBUVEsZUFDcEJ4QyxFQUFVblQsS0FBS29KLElBQUkrSixFQUFTZ0MsRUFBUVMsY0FDNUMsQ0FDSixDQUNBNUMsRUFBU0MsRUFBT0MsRUFBU0MsRUF0RGYsQ0F1RGQsQ0FDQSxTQUFTOEMsRUFBaUJDLEdBQ3RCLElBQUlDLEVBQU9ELEdBQVdyRixFQUFLd0Msc0JBQ3ZCOEMsR0FBUUEsYUFBZ0IzSixNQUN4QndHLEVBQVNtRCxFQUFLVCxXQUFZUyxFQUFLUixhQUFjUSxFQUFLUCxhQUUxRCxDQUNBLFNBQVM1QyxFQUFTQyxFQUFPQyxFQUFTQyxRQUNLbkIsSUFBL0JuQixFQUFLd0MsdUJBQ0x4QyxFQUFLd0Msc0JBQXNCTCxTQUFTQyxFQUFRLEdBQUlDLEVBQVNDLEdBQVcsRUFBRyxHQUV0RXRDLEVBQUtzRCxhQUFnQnRELEVBQUt3RCxnQkFBaUJ4RCxFQUFLdUYsV0FFckR2RixFQUFLc0QsWUFBWXRILE9BQVEsSUFBQTJILEtBQUszRCxFQUFLQyxPQUFPdUYsVUFFcENwRCxHQURFLEdBQUtBLEdBQVMsR0FBTSxJQUFLLElBQUFXLEtBQUlYLEVBQVEsSUFBTyxJQUVwRHBDLEVBQUt3RCxjQUFjeEgsT0FBUSxJQUFBMkgsS0FBSXRCLFFBQ2JsQixJQUFkbkIsRUFBSzZDLE9BQ0w3QyxFQUFLNkMsS0FBS0MsWUFBYzlDLEVBQUtJLEtBQUt5QyxNQUFLLElBQUFFLEtBQUlYLEdBQVMsV0FDN0JqQixJQUF2Qm5CLEVBQUtvRSxnQkFDTHBFLEVBQUtvRSxjQUFjcEksT0FBUSxJQUFBMkgsS0FBSXJCLElBQ3ZDLENBQ0EsU0FBU21ELEVBQVlDLEdBQ2pCLElBQUloRCxHQUFjLElBQUFDLGdCQUFlK0MsR0FDN0JDLEVBQU96UixTQUFTd08sRUFBWTFHLFFBQVUwSixFQUFNeEMsT0FBUyxJQUNyRHlDLEVBQU8sSUFBTyxHQUNDLFVBQWRELEVBQU1FLE1BQW9CLFFBQVFDLEtBQUtGLEVBQUt6SCxjQUM3QzRILEVBQVdILEVBRW5CLENBQ0EsU0FBUy9FLEVBQUtkLEVBQVM0RixFQUFPSyxFQUFTQyxHQUNuQyxPQUFJTixhQUFpQm5HLE1BQ1ZtRyxFQUFNTyxTQUFRLFNBQVVDLEdBQU0sT0FBT3RGLEVBQUtkLEVBQVNvRyxFQUFJSCxFQUFTQyxFQUFVLElBQ2pGbEcsYUFBbUJQLE1BQ1pPLEVBQVFtRyxTQUFRLFNBQVVFLEdBQU0sT0FBT3ZGLEVBQUt1RixFQUFJVCxFQUFPSyxFQUFTQyxFQUFVLEtBQ3JGbEcsRUFBUXNHLGlCQUFpQlYsRUFBT0ssRUFBU0MsUUFDekNoRyxFQUFLcUcsVUFBVTFRLEtBQUssQ0FDaEJJLE9BQVEsV0FBYyxPQUFPK0osRUFBUXdHLG9CQUFvQlosRUFBT0ssRUFBU0MsRUFBVSxJQUUzRixDQUNBLFNBQVNPLElBQ0xDLEdBQWEsV0FDakIsQ0E4REEsU0FBU0MsRUFBV0MsRUFBVUgsR0FDMUIsSUFBSUksT0FBc0J4RixJQUFidUYsRUFDUDFHLEVBQUs0RyxVQUFVRixHQUNmMUcsRUFBS3dDLHdCQUNGeEMsRUFBS0MsT0FBTzlFLFNBQVc2RSxFQUFLQyxPQUFPOUUsUUFBVTZFLEVBQUs2RyxJQUM3QzdHLEVBQUtDLE9BQU85RSxRQUNaNkUsRUFBS0MsT0FBT3JFLFNBQVdvRSxFQUFLQyxPQUFPckUsUUFBVW9FLEVBQUs2RyxJQUM5QzdHLEVBQUtDLE9BQU9yRSxRQUNab0UsRUFBSzZHLEtBQ25CQyxFQUFVOUcsRUFBSytHLFlBQ2ZDLEVBQVdoSCxFQUFLaUgsYUFDcEIsU0FDbUI5RixJQUFYd0YsSUFDQTNHLEVBQUsrRyxZQUFjSixFQUFPTyxjQUMxQmxILEVBQUtpSCxhQUFlTixFQUFPUSxXQUVuQyxDQUNBLE1BQU94VyxHQUNIQSxFQUFFeVcsUUFBVSwwQkFBNEJULEVBQ3hDM0csRUFBS0MsT0FBT29ILGFBQWExVyxFQUM3QixDQUNJNFYsR0FBaUJ2RyxFQUFLK0csY0FBZ0JELElBQ3RDTixHQUFhLGdCQUNiYyxNQUVBZixHQUNDdkcsRUFBSytHLGNBQWdCRCxHQUFXOUcsRUFBS2lILGVBQWlCRCxHQUN2RFIsR0FBYSxpQkFFakJ4RyxFQUFLdUgsUUFDVCxDQUNBLFNBQVNDLEVBQWM3VyxHQUNuQixJQUFJK1IsR0FBYyxJQUFBQyxnQkFBZWhTLElBQzVCK1IsRUFBWW5PLFVBQVVrVCxRQUFRLFVBQy9CaEUsRUFBa0I5UyxFQUFHK1IsRUFBWTlMLFVBQVU4USxTQUFTLFdBQWEsR0FBSyxFQUM5RSxDQUNBLFNBQVNqRSxFQUFrQjlTLEVBQUd1UyxFQUFPeUUsR0FDakMsSUFBSTVXLEVBQVNKLElBQUssSUFBQWdTLGdCQUFlaFMsR0FDN0JpUyxFQUFRK0UsR0FDUDVXLEdBQVVBLEVBQU82VyxZQUFjN1csRUFBTzZXLFdBQVdDLFdBQ2xEbkMsRUFBUW9DLEdBQVksYUFDeEJwQyxFQUFNeEMsTUFBUUEsRUFDZE4sR0FBU0EsRUFBTW1GLGNBQWNyQyxFQUNqQyxDQXlEQSxTQUFTc0MsRUFBVXpULEVBQVcrUSxFQUFNMkMsRUFBWXhQLEdBQzVDLElBQUl5UCxFQUFnQkMsRUFBVTdDLEdBQU0sR0FBTzhDLEdBQWEsSUFBQUMsZUFBYyxPQUFROVQsRUFBVytRLEVBQUtnRCxVQUFVcEssWUF1Q3hHLE9BdENBa0ssRUFBVy9DLFFBQVVDLEVBQ3JCOEMsRUFBV0csR0FBSzlQLEVBQ2hCMlAsRUFBV0ksYUFBYSxhQUFjeEksRUFBS3lJLFdBQVduRCxFQUFNdEYsRUFBS0MsT0FBT3lJLGtCQUNuQyxJQUFqQ25VLEVBQVVrVCxRQUFRLFdBQ2UsS0FBakMsSUFBQTFGLGNBQWF1RCxFQUFNdEYsRUFBSzZHLE9BQ3hCN0csRUFBSzJJLGNBQWdCUCxFQUNyQkEsRUFBV3hSLFVBQVVDLElBQUksU0FDekJ1UixFQUFXSSxhQUFhLGVBQWdCLFNBRXhDTixHQUNBRSxFQUFXUSxVQUFZLEVBQ25CQyxHQU
3FldkQsS0FDZjhDLEVBQVd4UixVQUFVQyxJQUFJLFlBQ3pCbUosRUFBSzhJLGlCQUFtQlYsRUFDQyxVQUFyQnBJLEVBQUtDLE9BQU9wRixRQUNaLElBQUFrTyxhQUFZWCxFQUFZLGFBQWNwSSxFQUFLaEYsY0FBYyxJQUNELEtBQXBELElBQUErRyxjQUFhdUQsRUFBTXRGLEVBQUtoRixjQUFjLElBQUksS0FDOUMsSUFBQStOLGFBQVlYLEVBQVksV0FBWXBJLEVBQUtoRixjQUFjLElBQ0MsS0FBcEQsSUFBQStHLGNBQWF1RCxFQUFNdEYsRUFBS2hGLGNBQWMsSUFBSSxJQUM1QixpQkFBZHpHLEdBQ0E2VCxFQUFXeFIsVUFBVUMsSUFBSSxjQUtyQ3VSLEVBQVd4UixVQUFVQyxJQUFJLHNCQUVKLFVBQXJCbUosRUFBS0MsT0FBT3BGLE1BazRDcEIsU0FBdUJ5SyxHQUNuQixRQUF5QixVQUFyQnRGLEVBQUtDLE9BQU9wRixNQUFvQm1GLEVBQUtoRixjQUFjMUwsT0FBUyxNQUV4RCxJQUFBeVMsY0FBYXVELEVBQU10RixFQUFLaEYsY0FBYyxLQUFPLElBQ2pELElBQUErRyxjQUFhdUQsRUFBTXRGLEVBQUtoRixjQUFjLEtBQU8sRUFDckQsQ0F0NENZZ08sQ0FBYzFELEtBQVV1RCxHQUFldkQsSUFDdkM4QyxFQUFXeFIsVUFBVUMsSUFBSSxXQUU3Qm1KLEVBQUtjLGFBQ3NCLElBQTNCZCxFQUFLQyxPQUFPYyxZQUNFLGlCQUFkeE0sR0FDQWtFLEVBQUksR0FBTSxHQUNWdUgsRUFBS2MsWUFBWW1JLG1CQUFtQixZQUFhLCtCQUFpQ2pKLEVBQUtDLE9BQU9pSixRQUFRNUQsR0FBUSxXQUVsSGtCLEdBQWEsY0FBZTRCLEdBQ3JCQSxDQUNYLENBQ0EsU0FBU2UsRUFBZUMsR0FDcEJBLEVBQVdDLFFBQ2MsVUFBckJySixFQUFLQyxPQUFPcEYsTUFDWnlPLEVBQVlGLEVBQ3BCLENBQ0EsU0FBU0csRUFBcUJyRyxHQUcxQixJQUZBLElBQUlzRyxFQUFhdEcsRUFBUSxFQUFJLEVBQUlsRCxFQUFLQyxPQUFPYyxXQUFhLEVBQ3REMEksRUFBV3ZHLEVBQVEsRUFBSWxELEVBQUtDLE9BQU9jLFlBQWMsRUFDNUMySSxFQUFJRixFQUFZRSxHQUFLRCxFQUFVQyxHQUFLeEcsRUFJekMsSUFIQSxJQUFJeUcsRUFBUTNKLEVBQUt1QixjQUFjcUksU0FBU0YsR0FDcENHLEVBQWEzRyxFQUFRLEVBQUksRUFBSXlHLEVBQU1DLFNBQVN0YSxPQUFTLEVBQ3JEd2EsRUFBVzVHLEVBQVEsRUFBSXlHLEVBQU1DLFNBQVN0YSxRQUFVLEVBQzNDbUosRUFBSW9SLEVBQVlwUixHQUFLcVIsRUFBVXJSLEdBQUt5SyxFQUFPLENBQ2hELElBQUlwRixFQUFJNkwsRUFBTUMsU0FBU25SLEdBQ3ZCLElBQXVDLElBQW5DcUYsRUFBRXZKLFVBQVVrVCxRQUFRLFdBQW9CVSxFQUFVckssRUFBRXVILFNBQ3BELE9BQU92SCxDQUNmLENBR1IsQ0EyQkEsU0FBU2lNLEVBQVduUixFQUFTTSxHQUN6QixJQUFJdUgsRUFBZ0JKLElBQ2hCMkosRUFBYUMsRUFBU3hKLEdBQWlCaEUsU0FBU3lOLE1BQ2hEQyxPQUF3QmhKLElBQVp2SSxFQUNWQSxFQUNBb1IsRUFDSXZKLE9BQzBCVSxJQUExQm5CLEVBQUs4SSxrQkFBa0NtQixFQUFTakssRUFBSzhJLGtCQUNqRDlJLEVBQUs4SSxzQkFDa0IzSCxJQUF2Qm5CLEVBQUsySSxlQUErQnNCLEVBQVNqSyxFQUFLMkksZUFDOUMzSSxFQUFLMkksY0FDTFksRUFBcUJyUSxFQUFTLEVBQUksR0FBSyxRQUN2Q2lJLElBQWRnSixFQUNBbkssRUFBSzhELE9BQU91RixRQUVOVyxFQXpDZCxTQUE2QnBSLEVBQVNzSyxHQU1sQyxJQUxBLElBQUlrSCxHQUFxRCxJQUF4Q3hSLEVBQVFyRSxVQUFVa1QsUUFBUSxTQUNyQzdPLEVBQVF5TSxRQUFROEIsV0FDaEJuSCxFQUFLaUgsYUFDUHdDLEVBQVd2RyxFQUFRLEVBQUlsRCxFQUFLQyxPQUFPYyxZQUFjLEVBQ2pEc0osRUFBWW5ILEVBQVEsRUFBSSxHQUFLLEVBQ3hCd0csRUFBSVUsRUFBYXBLLEVBQUtpSCxhQUFjeUMsR0FBS0QsRUFBVUMsR0FBS1csRUFRN0QsSUFQQSxJQUFJVixFQUFRM0osRUFBS3VCLGNBQWNxSSxTQUFTRixHQUNwQ0csRUFBYU8sRUFBYXBLLEVBQUtpSCxlQUFpQnlDLEVBQzlDOVEsRUFBUTJQLEdBQUtyRixFQUNiQSxFQUFRLEVBQ0p5RyxFQUFNQyxTQUFTdGEsT0FBUyxFQUN4QixFQUNOZ2IsRUFBZVgsRUFBTUMsU0FBU3RhLE9BQ3pCbUosRUFBSW9SLEVBQVlwUixHQUFLLEdBQUtBLEVBQUk2UixHQUFnQjdSLElBQU15SyxFQUFRLEVBQUlvSCxHQUFnQixHQUFJN1IsR0FBSzRSLEVBQVcsQ0FDekcsSUFBSXZNLEVBQUk2TCxFQUFNQyxTQUFTblIsR0FDdkIsSUFBdUMsSUFBbkNxRixFQUFFdkosVUFBVWtULFFBQVEsV0FDcEJVLEVBQVVySyxFQUFFdUgsVUFDWmxXLEtBQUt1VSxJQUFJOUssRUFBUTJQLEdBQUs5UCxJQUFNdEosS0FBS3VVLElBQUlSLEdBQ3JDLE9BQU9pRyxFQUFlckwsRUFDOUIsQ0FFSmtDLEVBQUt1SyxZQUFZRixHQUNqQk4sRUFBV1IsRUFBcUJjLEdBQVksRUFFaEQsQ0FvQlFHLENBQW9CTCxFQUFXalIsR0FIL0JpUSxFQUFlZ0IsRUFLdkIsQ0FDQSxTQUFTTSxFQUFlOUUsRUFBTWdFLEdBSzFCLElBSkEsSUFBSWUsR0FBZ0IsSUFBSS9PLEtBQUtnSyxFQUFNZ0UsRUFBTyxHQUFHZ0IsU0FBVzNLLEVBQUtJLEtBQUt3SyxlQUFpQixHQUFLLEVBQ3BGQyxFQUFnQjdLLEVBQUs4SyxNQUFNQyxnQkFBZ0JwQixFQUFRLEVBQUksSUFBTSxHQUFJaEUsR0FDakVxRixFQUFjaEwsRUFBSzhLLE1BQU1DLGVBQWVwQixFQUFPaEUsR0FBT2xFLEVBQU9SLE9BQU94RSxTQUFTd08seUJBQTBCQyxFQUFlbEwsRUFBS0MsT0FBT2MsV0FBYSxFQUFHb0ssRUFBb0JELEVBQWUsc0JBQXdCLGVBQWdCRSxFQUFvQkYsRUFBZSxzQkFBd0IsZUFDeFJHLEVBQVlSLEVBQWdCLEVBQUlILEVBQWNZLEVBQVcsRUFDdERELEdBQWFSLEVBQWVRLElBQWFDLElBQzVDN0osRUFBSzhKLFlBQVl2RCxFQUFVLGlCQUFtQm1ELEVBQW1CLElBQUl4UCxLQUFLZ0ssRUFBTWdFLEVBQVEsRUFBRzBCLEdBQVlBLEVBQVdDLElBRXRILElBQUtELEVBQVksRUFBR0EsR0FBYUwsRUFBYUssSUFBYUMsSUFDdkQ3SixFQUFLOEosWUFBWXZELEVBQVUsZ0JBQWlCLElBQUlyTSxLQUFLZ0ssRUFBTWdFLEVBQU8wQixHQUFZQSxFQUFXQyxJQUU3RixJQUFLLElBQUlFLEVBQVNSLEVBQWMsRUFBR1EsR0FBVSxHQUFLZCxJQUNsQixJQUEzQjFLLEVBQUtDLE9BQU9jLFlBQW9CdUssRUFBVyxHQUFNLEdBQUlFLElBQVVGLElBQ2hFN0osRUFBSzhKLFlBQVl2RCxFQUFVLGlCQUFtQm9ELEVBQW1CLElBQUl6UCxLQUFLZ0ssRUFBTWdFLEVBQVEsRUFBRzZCLEVBQVNSLEdBQWNRLEVBQVFGLElBRTlILElBQUlHLEdBQWUsSUFBQXBELGVBQWMsTUFBTyxnQkFFeEMsT0FEQW9ELEVBQWFGLFlBQVk5SixHQUNsQmdLLENBQ1gsQ0FDQSxTQUFTQyxJQUNMLFFBQTJCdkssSUFBdkJuQixFQUFLdUIsY0FBVCxFQUdBLElBQUFvSyxXQUFVM0wsRUFBS3VCLGVBQ1h2QixFQUFLYyxjQUNMLElBQUE2SyxXQUFVM0wsRUFBS2MsYUFFbkIsSUFEQSxJQUFJOEssRUFBT25QLFNBQVN3Tyx5QkFDWHhTLEVBQUksRUFBR0EsRUFBSXVILEVBQUtDLE9BQU9jLFdBQVl0SSxJQUFLLENBQzdDLElBQUlvVCxFQUFJLElBQUlsUSxLQUFLcUUsRUFBSytHLFlBQWEvRyxFQUFLaUgsYUF
3BYyxHQUN0RDRFLEVBQUVDLFNBQVM5TCxFQUFLaUgsYUFBZXhPLEdBQy9CbVQsRUFBS0wsWUFBWWQsRUFBZW9CLEVBQUUzRSxjQUFlMkUsRUFBRTFFLFlBQ3ZELENBQ0FuSCxFQUFLdUIsY0FBY2dLLFlBQVlLLEdBQy9CNUwsRUFBS3lCLEtBQU96QixFQUFLdUIsY0FBY3NHLFdBQ04sVUFBckI3SCxFQUFLQyxPQUFPcEYsTUFBa0QsSUFBOUJtRixFQUFLaEYsY0FBYzFMLFFBQ25EZ2EsR0FiSixDQWVKLENBQ0EsU0FBU2hDLElBQ0wsS0FBSXRILEVBQUtDLE9BQU9jLFdBQWEsR0FDUyxhQUFsQ2YsRUFBS0MsT0FBTzhMLG1CQURoQixDQUdBLElBQUlDLEVBQW1CLFNBQVVyQyxHQUM3QixhQUE0QnhJLElBQXhCbkIsRUFBS0MsT0FBTzlFLFNBQ1o2RSxFQUFLK0csY0FBZ0IvRyxFQUFLQyxPQUFPOUUsUUFBUStMLGVBQ3pDeUMsRUFBUTNKLEVBQUtDLE9BQU85RSxRQUFRZ00sb0JBR0NoRyxJQUF4Qm5CLEVBQUtDLE9BQU9yRSxTQUNqQm9FLEVBQUsrRyxjQUFnQi9HLEVBQUtDLE9BQU9yRSxRQUFRc0wsZUFDekN5QyxFQUFRM0osRUFBS0MsT0FBT3JFLFFBQVF1TCxXQUNwQyxFQUNBbkgsRUFBS2lNLHdCQUF3QnJELFVBQVksRUFDekM1SSxFQUFLaU0sd0JBQXdCQyxVQUFZLEdBQ3pDLElBQUssSUFBSXpULEVBQUksRUFBR0EsRUFBSSxHQUFJQSxJQUNwQixHQUFLdVQsRUFBaUJ2VCxHQUF0QixDQUVBLElBQUlrUixHQUFRLElBQUF0QixlQUFjLFNBQVUsaUNBQ3BDc0IsRUFBTTNOLE1BQVEsSUFBSUwsS0FBS3FFLEVBQUsrRyxZQUFhdE8sR0FBRzBPLFdBQVdqSixXQUN2RHlMLEVBQU03RyxhQUFjLElBQUFxSixZQUFXMVQsRUFBR3VILEVBQUtDLE9BQU9tTSxzQkFBdUJwTSxFQUFLSSxNQUMxRXVKLEVBQU1mLFVBQVksRUFDZDVJLEVBQUtpSCxlQUFpQnhPLElBQ3RCa1IsRUFBTTBDLFVBQVcsR0FFckJyTSxFQUFLaU0sd0JBQXdCVixZQUFZNUIsRUFSN0IsQ0FmTixDQXlCZCxDQUNBLFNBQVMyQyxJQUNMLElBRUlDLEVBRkFDLEdBQVksSUFBQW5FLGVBQWMsTUFBTyxtQkFDakNvRSxFQUFtQnhMLE9BQU94RSxTQUFTd08seUJBRW5DakwsRUFBS0MsT0FBT2MsV0FBYSxHQUNTLFdBQWxDZixFQUFLQyxPQUFPOEwsa0JBQ1pRLEdBQWUsSUFBQWxFLGVBQWMsT0FBUSxjQUdyQ3JJLEVBQUtpTSx5QkFBMEIsSUFBQTVELGVBQWMsU0FBVSxrQ0FDdkRySSxFQUFLaU0sd0JBQXdCekQsYUFBYSxhQUFjeEksRUFBS0ksS0FBS3NNLGdCQUNsRTlMLEVBQUtaLEVBQUtpTSx3QkFBeUIsVUFBVSxTQUFVdGIsR0FDbkQsSUFBSUksR0FBUyxJQUFBNFIsZ0JBQWVoUyxHQUN4QmdjLEVBQWdCelksU0FBU25ELEVBQU9pTCxNQUFPLElBQzNDZ0UsRUFBS3VLLFlBQVlvQyxFQUFnQjNNLEVBQUtpSCxjQUN0Q1QsR0FBYSxnQkFDakIsSUFDQWMsSUFDQWlGLEVBQWV2TSxFQUFLaU0seUJBRXhCLElBQUlXLEdBQVksSUFBQUMsbUJBQWtCLFdBQVksQ0FBRUMsU0FBVSxPQUN0REMsRUFBY0gsRUFBVUkscUJBQXFCLFNBQVMsR0FDMURELEVBQVl2RSxhQU
3FhLGFBQWN4SSxFQUFLSSxLQUFLNk0sZUFDN0NqTixFQUFLQyxPQUFPOUUsU0FDWjRSLEVBQVl2RSxhQUFhLE1BQU94SSxFQUFLQyxPQUFPOUUsUUFBUStMLGNBQWNoSixZQUVsRThCLEVBQUtDLE9BQU9yRSxVQUNabVIsRUFBWXZFLGFBQWEsTUFBT3hJLEVBQUtDLE9BQU9yRSxRQUFRc0wsY0FBY2hKLFlBQ2xFNk8sRUFBWUcsV0FDTmxOLEVBQUtDLE9BQU85RSxTQUNWNkUsRUFBS0MsT0FBTzlFLFFBQVErTCxnQkFBa0JsSCxFQUFLQyxPQUFPckUsUUFBUXNMLGVBRXRFLElBQUlELEdBQWUsSUFBQW9CLGVBQWMsTUFBTywyQkFLeEMsT0FKQXBCLEVBQWFzRSxZQUFZZ0IsR0FDekJ0RixFQUFhc0UsWUFBWXFCLEdBQ3pCSCxFQUFpQmxCLFlBQVl0RSxHQUM3QnVGLEVBQVVqQixZQUFZa0IsR0FDZixDQUNIRCxVQUFXQSxFQUNYTyxZQUFhQSxFQUNiUixhQUFjQSxFQUV0QixDQUNBLFNBQVNZLEtBQ0wsSUFBQXhCLFdBQVUzTCxFQUFLb04sVUFDZnBOLEVBQUtvTixTQUFTN0IsWUFBWXZMLEVBQUtxTixjQUMzQnJOLEVBQUtDLE9BQU9jLGFBQ1pmLEVBQUtzTixhQUFlLEdBQ3BCdE4sRUFBS3VOLGNBQWdCLElBRXpCLElBQUssSUFBSTdELEVBQUkxSixFQUFLQyxPQUFPYyxXQUFZMkksS0FBTSxDQUN2QyxJQUFJQyxFQUFRMkMsSUFDWnRNLEVBQUtzTixhQUFhM1gsS0FBS2dVLEVBQU1vRCxhQUM3Qi9NLEVBQUt1TixjQUFjNVgsS0FBS2dVLEVBQU00QyxjQUM5QnZNLEVBQUtvTixTQUFTN0IsWUFBWTVCLEVBQU02QyxVQUNwQyxDQUNBeE0sRUFBS29OLFNBQVM3QixZQUFZdkwsRUFBS3dOLGFBQ25DLENBOEZBLFNBQVNDLElBQ0F6TixFQUFLME4sa0JBR04sSUFBQS9CLFdBQVUzTCxFQUFLME4sa0JBRmYxTixFQUFLME4sa0JBQW1CLElBQUFyRixlQUFjLE1BQU8sc0JBR2pELElBQUssSUFBSTVQLEVBQUl1SCxFQUFLQyxPQUFPYyxXQUFZdEksS0FBTSxDQUN2QyxJQUFJK1QsR0FBWSxJQUFBbkUsZUFBYyxNQUFPLDhCQUNyQ3JJLEVBQUswTixpQkFBaUJuQyxZQUFZaUIsRUFDdEMsQ0FFQSxPQURBbUIsSUFDTzNOLEVBQUswTixnQkFDaEIsQ0FDQSxTQUFTQyxJQUNMLEdBQUszTixFQUFLME4saUJBQVYsQ0FHQSxJQUFJOUMsRUFBaUI1SyxFQUFLSSxLQUFLd0ssZUFDM0JnRCxFQUFXeE8sRUFBZVksRUFBS0ksS0FBS3dOLFNBQVNDLFdBQzdDakQsRUFBaUIsR0FBS0EsRUFBaUJnRCxFQUFTdGUsU0FDaERzZSxFQUFXeE8sRUFBZXdPLEVBQVNFLE9BQU9sRCxFQUFnQmdELEVBQVN0ZSxRQUFTc2UsRUFBU0UsT0FBTyxFQUFHbEQsS0FFbkcsSUFBSyxJQUFJblMsRUFBSXVILEVBQUtDLE9BQU9jLFdBQVl0SSxLQUNqQ3VILEVBQUswTixpQkFBaUI5RCxTQUFTblIsR0FBR3lULFVBQVkscURBQXVEMEIsRUFBU0csS0FBSywyQ0FBNkMseUJBUHBLLENBU0osQ0FZQSxTQUFTeEQsRUFBWXZPLEVBQU9nUyxRQUNQLElBQWJBLElBQXVCQSxHQUFXLEdBQ3RDLElBQUk5SyxFQUFROEssRUFBV2hTLEVBQVFBLEVBQVFnRSxFQUFLaUgsYUFDdkMvRCxFQUFRLElBQWtDLElBQTdCbEQsRUFBS2lPLHFCQUNsQi9LLEVBQVEsSUFBa0MsSUFBN0JsRCxFQUFLa08sc0JBRXZCbE8sRUFBS2lILGNBQWdCL0QsR0FDakJsRCxFQUFLaUgsYUFBZSxHQUFLakgsRUFBS2lILGFBQWUsTUFDN0NqSCxFQUFLK0csYUFBZS9HLEVBQUtpSCxhQUFlLEdBQUssR0FBSyxFQUNsRGpILEVBQUtpSCxjQUFnQmpILEVBQUtpSCxhQUFlLElBQU0sR0FDL0NULEdBQWEsZ0JBQ2JjLEtBRUpvRSxJQUNBbEYsR0FBYSxpQkFDYjJILEtBQ0osQ0E0R0EsU0FBU0MsRUFBZUMsR0FDcEIsT0FBT3JPLEVBQUtPLGtCQUFrQm1ILFNBQVMyRyxFQUMzQyxDQUNBLFNBQVNDLEVBQWMzZCxHQUNuQixHQUFJcVAsRUFBS3VPLFNBQVd2TyxFQUFLQyxPQUFPdU8sT0FBUSxDQUNwQyxJQUFJQyxHQUFnQixJQUFBOUwsZ0JBQWVoUyxHQUMvQitkLEVBQW9CTixFQUFlSyxHQVFuQ0UsSUFQVUYsSUFBa0J6TyxFQUFLNEMsT0FDakM2TCxJQUFrQnpPLEVBQUt2RSxVQUN2QnVFLEVBQUtGLFFBQVE0SCxTQUFTK0csSUFDckI5ZCxFQUFFaWUsTUFDQ2plLEVBQUVpZSxLQUFLbkgsV0FDTDlXLEVBQUVpZSxLQUFLbkgsUUFBUXpILEVBQUs0QyxTQUNqQmpTLEVBQUVpZSxLQUFLbkgsUUFBUXpILEVBQUt2RSxjQUU1QmlULElBQ0FOLEVBQWV6ZCxFQUFFa2UsZUFDbEJDLEdBQWE5TyxFQUFLQyxPQUFPOE8scUJBQXFCQyxNQUFLLFNBQVVYLEdBQzdELE9BQU9BLEVBQUszRyxTQUFTK0csRUFDekIsSUFDSUUsR0FBYUcsSUFDVDlPLEVBQUtDLE9BQU9nUCxZQUNaalAsRUFBS2tQLFFBQVFsUCxFQUFLOEQsT0FBTzlILE9BQU8sRUFBT2dFLEVBQUtDLE9BQU94RSxTQUM3Q3VFLEVBQUtDLE9BQU96RSxVQUNad0UsRUFBS0MsT0FBT3ZFLGlCQUVLeUYsSUFBdkJuQixFQUFLbVAsb0JBQ2tCaE8sSUFBdkJuQixFQUFLd0Qsb0JBQ2dCckMsSUFBckJuQixFQUFLc0QsYUFDZ0IsS0FBckJ0RCxFQUFLNEMsTUFBTTVHLFlBQ1VtRixJQUFyQm5CLEVBQUs0QyxNQUFNNUcsT0FDWDZGLElBRUo3QixFQUFLb1AsUUFDRHBQLEVBQUtDLFFBQ2dCLFVBQXJCRCxFQUFLQyxPQUFPcEYsTUFDa0IsSUFBOUJtRixFQUFLaEYsY0FBYzFMLFFBQ25CMFEsRUFBS3FQLE9BQU0sR0FFdkIsQ0FDSixDQUNBLFNBQVN2SixFQUFXd0osR0FDaEIsTUFBS0EsR0FDQXRQLEVBQUtDLE9BQU85RSxTQUFXbVUsRUFBVXRQLEVBQUtDLE9BQU85RSxRQUFRK0wsZUFDckRsSCxFQUFLQyxPQUFPckUsU0FBVzBULEVBQVV0UCxFQUFLQyxPQUFPckUsUUFBUXNMLGVBRjFELENBSUEsSUFBSXFJLEVBQWFELEVBQVNFLEVBQVl4UCxFQUFLK0csY0FBZ0J3SSxFQUMzRHZQLEVBQUsrRyxZQUFjd0ksR0FBY3ZQLEVBQUsrRyxZQUNsQy9HLEVBQUtDLE9BQU9yRSxTQUNab0UsRUFBSytHLGNBQWdCL0csRUFBS0MsT0FBT3JFLFFBQVFzTCxjQUN6Q2xILEVBQUtpSCxhQUFlOVgsS0FBS3dOLElBQUlxRCxFQUFLQyxPQUFPckUsUUFBUXVMLFdBQVluSCxFQUFLaUgsY0FFN0RqSCxFQUFLQyxPQUFPOUUsU0FDakI2RSxFQUFLK0csY0FBZ0IvRyxFQUFLQyxPQUFPOUUsUUFBUStMLGdCQUN6Q2xILEVBQUtpSCxhQUFlOVgsS0FBS29KLElBQUl5SCxFQUFLQyxPQUFPOUUsUUFBUWdNLFdBQVluSCxFQUFLaUgsZUFFbEV1SSxJQUNBeFAsRUFBS3VILFNBQ0xmLEdBQWEsZ0JBQ2JjLElBZE0sQ0FnQmQsQ0FDQSxTQUFTYSxFQUFVN0MsRUFBTW1LLEdBQ3JCLElBQUluUCxPQUNhLElBQWJtUCxJQUF1QkEsR0FBVyxHQUN0QyxJQUFJQyxFQUFjMVAsRUFBSzRHLFVBQVV0QixPQUFNbkUsRUFBV3NPLEdBQ2xELEdBQUt6UCxFQUFLQyxPQUFPOUUsU0FDYnVVLElBQ0EsSUFBQTNOLGNBQWEyTixFQUFhMVAsRUFBS0MsT0FBTzlFLGFBQXNCZ0csSUFBYnNPLEVBQXlCQSxHQUFZelAsRUFBS3VFLGdCQUFrQixHQUMxR3ZFLEVBQUtDLE9BQU9yRSxTQUNUOFQsSUFDQSxJQUFBM04sY0FBYTJOLEVBQWExUCxFQUFLQyxPQUFPckUsYUFBc0J1RixJQUFic08sRUFBeUJBLEdBQVl6UCxFQUFLMEUsZ0JBQWtCLEVBQy9HLE9BQU8sRUFDWCxJQUFLMUUsRUFBS0MsT0FBTzVLLFFBQXlDLElBQS9CMkssRUFBS0MsT0FBTzdLLFFBQVE5RixPQUMzQyxPQUFPLEVBQ1gsUUFBb0I2UixJQUF
3oQnVPLEVBQ0EsT0FBTyxFQUVYLElBREEsSUFBSUMsSUFBUzNQLEVBQUtDLE9BQU81SyxPQUFRdWEsRUFBc0MsUUFBN0J0UCxFQUFLTixFQUFLQyxPQUFPNUssY0FBMkIsSUFBUGlMLEVBQWdCQSxFQUFLTixFQUFLQyxPQUFPN0ssUUFDdkdxRCxFQUFJLEVBQUdvVCxPQUFJLEVBQVFwVCxFQUFJbVgsRUFBTXRnQixPQUFRbUosSUFBSyxDQUUvQyxHQUFpQixtQkFEakJvVCxFQUFJK0QsRUFBTW5YLEtBRU5vVCxFQUFFNkQsR0FDRixPQUFPQyxFQUNOLEdBQUk5RCxhQUFhbFEsV0FDRndGLElBQWhCdU8sR0FDQTdELEVBQUU3SixZQUFjME4sRUFBWTFOLFVBQzVCLE9BQU8yTixFQUNOLEdBQWlCLGlCQUFOOUQsRUFBZ0IsQ0FDNUIsSUFBSWdFLEVBQVM3UCxFQUFLNEcsVUFBVWlGLE9BQUcxSyxHQUFXLEdBQzFDLE9BQU8wTyxHQUFVQSxFQUFPN04sWUFBYzBOLEVBQVkxTixVQUM1QzJOLEdBQ0NBLENBQ1gsQ0FDSyxHQUFpQixpQkFBTjlELFFBQ0kxSyxJQUFoQnVPLEdBQ0E3RCxFQUFFMU8sTUFDRjBPLEVBQUUzTyxJQUNGd1MsRUFBWTFOLFdBQWE2SixFQUFFMU8sS0FBSzZFLFdBQ2hDME4sRUFBWTFOLFdBQWE2SixFQUFFM08sR0FBRzhFLFVBQzlCLE9BQU8yTixDQUNmLENBQ0EsT0FBUUEsQ0FDWixDQUNBLFNBQVMxRixFQUFTb0UsR0FDZCxZQUEyQmxOLElBQXZCbkIsRUFBS3VCLGlCQUN5QyxJQUF0QzhNLEVBQUs5WixVQUFVa1QsUUFBUSxZQUN1QixJQUFsRDRHLEVBQUs5WixVQUFVa1QsUUFBUSx1QkFDdkJ6SCxFQUFLdUIsY0FBY21HLFNBQVMyRyxHQUV4QyxDQUNBLFNBQVN5QixFQUFPbmYsR0FDWixJQUFJb2YsRUFBVXBmLEVBQUVJLFNBQVdpUCxFQUFLOEQsT0FDNUJrTSxFQUFlaFEsRUFBSzhELE9BQU85SCxNQUFNaVUsWUFBY0MsTUFDL0NILElBQ0FDLEdBQ0VyZixFQUFFa2UsZUFBaUJULEVBQWV6ZCxFQUFFa2UsZ0JBQ3RDN08sRUFBS2tQLFFBQVFsUCxFQUFLOEQsT0FBTzlILE9BQU8sRUFBTXJMLEVBQUVJLFNBQVdpUCxFQUFLdkUsU0FDbER1RSxFQUFLQyxPQUFPekUsVUFDWndFLEVBQUtDLE9BQU92RSxXQUUxQixDQUNBLFNBQVN5VSxFQUFVeGYsR0FDZixJQUFJK1IsR0FBYyxJQUFBQyxnQkFBZWhTLEdBQzdCb2YsRUFBVS9QLEVBQUtDLE9BQU9tUSxLQUNwQnRRLEVBQVE0SCxTQUFTaEYsR0FDakJBLElBQWdCMUMsRUFBSzhELE9BQ3ZCbUwsRUFBYWpQLEVBQUtDLE9BQU9nUCxXQUN6Qm9CLEVBQWVyUSxFQUFLdU8sVUFBWVUsSUFBZWMsR0FDL0NPLEVBQXFCdFEsRUFBS0MsT0FBT3VPLFFBQVV1QixJQUFZZCxFQUMzRCxHQUFrQixLQUFkdGUsRUFBRTRmLFNBQWtCUixFQUFTLENBQzdCLEdBQUlkLEVBS0EsT0FKQWpQLEVBQUtrUCxRQUFRbFAsRUFBSzhELE9BQU85SCxPQUFPLEVBQU0wRyxJQUFnQjFDLEVBQUt2RSxTQUNyRHVFLEVBQUtDLE9BQU96RSxVQUNad0UsRUFBS0MsT0FBT3ZFLFlBQ2xCc0UsRUFBS29QLFFBQ0UxTSxFQUFZOE4sT0FHbkJ4USxFQUFLeVEsTUFFYixNQUNLLEdBQUlyQyxFQUFlMUwsSUFDcEIyTixHQUNBQyxFQUFvQixDQUNwQixJQUFJSSxJQUFjMVEsRUFBS21QLGVBQ25CblAsRUFBS21QLGNBQWN6SCxTQUFTaEYsR0FDaEMsT0FBUS9SLEVBQUU0ZixTQUNOLEtBQUssR0FDR0csR0FDQS9mLEVBQUVDLGlCQUNGaVIsSUFDQThPLEtBR0FDLEVBQVdqZ0IsR0FDZixNQUNKLEtBQUssR0FDREEsRUFBRUMsaUJBQ0YrZixJQUNBLE1BQ0osS0FBSyxFQUNMLEtBQUssR0FDR1osSUFBWS9QLEVBQUtDLE9BQU9nUCxhQUN4QnRlLEVBQUVDLGlCQUNGb1AsRUFBS3FQLFNBRVQsTUFDSixLQUFLLEdBQ0wsS0FBSyxHQUNELEdBQUtxQixHQUFjWCxFQWdCVi9QLEVBQUtzRCxhQUNWdEQsRUFBS3NELFlBQVkrRixZQWpCTyxDQUN4QjFZLEVBQUVDLGlCQUNGLElBQUk2UCxFQUFnQkosSUFDcEIsUUFBMkJjLElBQXZCbkIsRUFBS3VCLGlCQUNXLElBQWYwTixHQUNJeE8sR0FBaUJ3SixFQUFTeEosSUFBa0IsQ0FDakQsSUFBSW9RLEVBQXdCLEtBQWRsZ0IsRUFBRTRmLFFBQWlCLEdBQUssRUFDakM1ZixFQUFFbWdCLFNBR0huZ0IsRUFBRUUsa0JBQ0YwWixFQUFZc0csR0FDWjlHLEVBQVdSLEVBQXFCLEdBQUksSUFKcENRLE9BQVc1SSxFQUFXMFAsRUFNOUIsQ0FDSixDQUdBLE1BQ0osS0FBSyxHQUNMLEtBQUssR0FDRGxnQixFQUFFQyxpQkFDRixJQUFJc1MsRUFBc0IsS0FBZHZTLEVBQUU0ZixRQUFpQixHQUFLLEVBQy9CdlEsRUFBS3VCLG9CQUNhSixJQUFuQnVCLEVBQVk2RixJQUNaN0YsSUFBZ0IxQyxFQUFLNEMsT0FDckJGLElBQWdCMUMsRUFBS3ZFLFNBQ2pCOUssRUFBRW1nQixTQUNGbmdCLEVBQUVFLGtCQUNGaVYsRUFBVzlGLEVBQUsrRyxZQUFjN0QsR0FDOUI2RyxFQUFXUixFQUFxQixHQUFJLElBRTlCbUgsR0FDTjNHLE9BQVc1SSxFQUFtQixFQUFSK0IsR0FFckJSLElBQWdCMUMsRUFBSytRLG1CQUMxQmpMLEVBQVc5RixFQUFLK0csWUFBYzdELEdBRXpCbEQsRUFBS0MsT0FBTytRLGNBQ1pOLEdBQWExUSxFQUFLc0QsYUFDbkJ0RCxFQUFLc0QsWUFBWStGLFFBQ3JCeEgsRUFBV2xSLEdBQ1hxUCxFQUFLaUUsb0JBRVQsTUFDSixLQUFLLEVBQ0QsR0FBSXlNLEVBQVcsQ0FDWCxJQUFJTyxFQUFRLENBQ1JqUixFQUFLc0QsWUFDTHRELEVBQUt3RCxjQUNMeEQsRUFBS29FLGNBQ0xwRSxFQUFLNkMsTUFFSnFPLE9BQU9sUixFQUFLbVIsZ0JBQ1p4aEIsUUFBTyxTQUFVeWhCLEdBQUssT0FBT0EsQ0FBRyxJQUNqQzNZLEVBQUl3WSxFQUFNeEosUUFBUS9FLEdBQ3RCLElBQVcsSUFBUGpLLEVBQVUsQ0FDVixJQUFJMUgsRUFBU2tnQixFQUFNeFksR0FBSzlILEVBQUUwZ0IsVUFBWSxFQUFJLElBQzFDMWdCLEVBQUVDLGtCQUNERyxHQUFVaVAsRUFBSzhELFFBQVF1RixPQUM1QixDQUNKLE1BQ1VySixFQUFLQyxPQUFPZSxZQUNsQmhCLEVBQUt1QixlQUNMdkIsRUFBS3VCLGNBQWNtRyxTQUFTaEYsSUFDNUIvUixFQUFFMGdCLFdBQ0YxZ0IsRUFBRUMsaUJBQ0ZvUCxFQUFLOEQsT0FBT3VGLFNBTTVCLENBQ0EsUUFBa0JsSSxJQUFkbkIsRUFBSzZDLE1BQXNCSCxJQUFnQjFDLEVBQUs2QyxLQUNoRCxPQUFRbFMsRUFBRWlWLEtBQ04sS0FBSzVGLEVBQUtJLEtBQUt5QyxLQUFLLEdBQUd5TyxPQUFPLEdBQzlCLEtBQUt0UixFQUFLSSxLQUFLeUMsS0FBSyxHQUFHeU8sT0FBTyxHQUFHQyxjQUM3QnZSLEVBQUs2QyxLQUFLQyxZQUFjOUMsRUFBS0ksS0FBS3lDLEtBQUssR0FDdkNrQixJQUNBQyxLQUNBLE1BQ0osS0FBS2hFLEVBQUtJLEtBQUt5QyxLQUFLLEdBQUd5TyxPQUFPLEdBQzlCLEtBQUt0UixFQUFLSSxLQUFLeUMsS0FBSyxHQUFHeU8sT0FBTyxHQUFHQyxjQUM3QnZSLEVBQUs2QyxLQUFLQyxZQUFjOUMsRUFBS0ksS0FBS3lDLEtBQUssR0FDdkNrQixJQUNBQyxNQUlSK0wsR0FBVzNCLEVBQWUxTCxLQUMxQjhELEdBQWEsWUFBYTdWLEVBRWxDLENBQ0EsU0FBUzJZLEVBQVkrRSxFQUFNbUQsR0FFdkIsUUFEa0IsSUFBZEEsSUFBd0JBLEVBQVksaUJBQ04sSUFBOUJ4UixFQUFLaEYsY0FBYzFMLFVBQ2xCK2UsR0FDS0EsRUFBS3pYLFVBQVU4USxTQUFTOEosS0FDdEJuRCxFQUFLelgsVUFBVThRLFNBQVMsdUJBSHBDLENBVUEsSUFMQSxJQUFJK0osRUFBWXBELEVBQ1ZBLEVBQUtoSixRQUFRckQsVUFDYmhDLEVBQUt5QixLQUFLaVEsa0JBQWtCck0sUUFBUXJELFVBQVcyUCxFQUFjM1IsRUFBSzRHLFVBQVU1RyxFQUFLaEYsY0FBYyxRQUFJbUcsR0FBVyxHQUFNYSxVQUFXNFAsRUFBaUJ6aUIsS0FBS3dOLElBQUk4
3VSxFQUFXelIsRUFBS2hGLGNBQWMsR0FBR2dILFdBQVk2UCxFQUFlMWlCLEtBQUtvSixJQUFJa1osRUFBV3pSLEVBQUtoRixjQUFjLEdBQUdnSCxXQUNqUThQLEdBQW1CLEVBQ25CQyxFQUFXLEVBQUdDLEVBQVcsRUFDcEJyVCxFQUFJaVQsRUFBZ0JqVCxFQUFJa1QsRUFBY2xULEdBQUssRUFBQXNULFNBQVNDLElBQ3BEL0osRUFBVSxJQUFJeE0sS0FBS2dELElBQUksS0FDeEJtVCxFQUNJQSxHQUFxQm5ULEVBQUlpVCxHQUFrQmpULEVBQUlrVCxFQUMvQ2xULEVBQUlnVCxLQUFpQkksR0FBWXBULEVBQUlvVCxHQUNyQ0EsRUFBV3BULEVBQ05BLEVBQUlnVCxLQUFpQkssR0FBWXJULEVBQUlxVCxLQUMxQ0EsRUFBV3JULElBR0ZZLE1BQU1wQyxLQUFLNkMsRUFBS21TLFdBQVdDLGlCQUFpQixrQkFBb0JwUyxFQUFLQyxPQUFPYyxXQUFhLFFBQVV5USxJQUN6R3ZMLFNBQVEsU0FBVW9NLEdBQzdCLElBQ0lDLEVBRE9ELEVBQVFoTixRQUNFckQsVUFDakJ1USxFQUFjUixFQUFXLEdBQUtPLEVBQVlQLEdBQ3pDQyxFQUFXLEdBQUtNLEVBQVlOLEVBQ2pDLEdBQUlPLEVBS0EsT0FKQUYsRUFBUXpiLFVBQVVDLElBQUksa0JBQ3RCLENBQUMsVUFBVyxhQUFjLFlBQVlvUCxTQUFRLFNBQVVuSSxHQUNwRHVVLEVBQVF6YixVQUFVYixPQUFPK0gsRUFDN0IsSUFHS2dVLElBQXFCUyxJQUU5QixDQUFDLGFBQWMsVUFBVyxXQUFZLGNBQWN0TSxTQUFRLFNBQVVuSSxHQUNsRXVVLEVBQVF6YixVQUFVYixPQUFPK0gsRUFDN0IsU0FDYXFELElBQVRrTixJQUNBQSxFQUFLelgsVUFBVUMsSUFBSTRhLEdBQWF6UixFQUFLaEYsY0FBYyxHQUFHZ0gsVUFDaEQsYUFDQSxZQUNGMlAsRUFBY0YsR0FBYWEsSUFBY1gsRUFDekNVLEVBQVF6YixVQUFVQyxJQUFJLGNBQ2pCOGEsRUFBY0YsR0FBYWEsSUFBY1gsR0FDOUNVLEVBQVF6YixVQUFVQyxJQUFJLFlBQ3RCeWIsR0FBYVAsSUFDQyxJQUFiQyxHQUFrQk0sR0FBYU4sS0FDaEMsSUFBQVEsV0FBVUYsRUFBV1gsRUFBYUYsSUFDbENZLEVBQVF6YixVQUFVQyxJQUFJLFlBRWxDLEdBL0NVLENBZ0RkLENBQ0EsU0FBUzRiLEtBQ0R6UyxFQUFLdU8sUUFBV3ZPLEVBQUtDLE9BQU95UyxRQUFXMVMsRUFBS0MsT0FBT3VPLFFBQ25EbUUsR0FDUixDQXFDQSxTQUFTQyxFQUFpQnJXLEdBQ3RCLE9BQU8sU0FBVStJLEdBQ2IsSUFBSUQsRUFBV3JGLEVBQUtDLE9BQU8sSUFBTTFELEVBQU8sUUFBVXlELEVBQUs0RyxVQUFVdEIsRUFBTXRGLEVBQUtDLE9BQU92RSxZQUMvRW1YLEVBQWlCN1MsRUFBS0MsT0FBTyxLQUFnQixRQUFUMUQsRUFBaUIsTUFBUSxPQUFTLGFBQzFENEUsSUFBWmtFLElBQ0FyRixFQUFjLFFBQVR6RCxFQUFpQixpQkFBbUIsa0JBQ3JDOEksRUFBUVIsV0FBYSxHQUNqQlEsRUFBUVAsYUFBZSxHQUN2Qk8sRUFBUU4sYUFBZSxHQUUvQi9FLEVBQUtoRixnQkFDTGdGLEVBQUtoRixjQUFnQmdGLEVBQUtoRixjQUFjckwsUUFBTyxTQUFVa2MsR0FBSyxPQUFPMUQsRUFBVTBELEVBQUksSUFDOUU3TCxFQUFLaEYsY0FBYzFMLFFBQW1CLFFBQVRpTixHQUM5QjZJLEVBQWlCQyxHQUNyQnJCLE1BRUFoRSxFQUFLdUIsZ0JBQ0xnRyxTQUNnQnBHLElBQVprRSxFQUNBckYsRUFBSytRLG1CQUFtQnhVLEdBQVE4SSxFQUFRNkIsY0FBY2hKLFdBRXREOEIsRUFBSytRLG1CQUFtQitCLGdCQUFnQnZXLEdBQzVDeUQsRUFBSytRLG1CQUFtQjdELFdBQ2xCMkYsUUFDYzFSLElBQVprRSxHQUNBd04sRUFBZTNMLGdCQUFrQjdCLEVBQVE2QixjQUV6RCxDQUNKLENBNEdBLFNBQVM2TCxJQUNMLE9BQU8vUyxFQUFLQyxPQUFPbVEsS0FDYnRRLEVBQVFrVCxjQUFjLGdCQUN0QmxULENBQ1YsQ0FDQSxTQUFTbVQsSUFDNkIsaUJBQXZCalQsRUFBS0MsT0FBTzNFLGFBQzRCLElBQXhDNEUsRUFBVWdULE1BQU1sVCxFQUFLQyxPQUFPM0UsU0FDbkMwRSxFQUFLQyxPQUFPb0gsYUFBYSxJQUFJOEwsTUFBTSw2QkFBK0JuVCxFQUFLQyxPQUFPM0UsU0FDbEYwRSxFQUFLSSxLQUFPM0IsRUFBU0EsRUFBUyxDQUFDLEVBQUd5QixFQUFVZ1QsTUFBTUUsU0FBeUMsaUJBQXZCcFQsRUFBS0MsT0FBTzNFLE9BQzFFMEUsRUFBS0MsT0FBTzNFLE9BQ1csWUFBdkIwRSxFQUFLQyxPQUFPM0UsT0FDUjRFLEVBQVVnVCxNQUFNbFQsRUFBS0MsT0FBTzNFLGFBQzVCNkYsR0FDVixFQUFBa1MsV0FBV0MsRUFBSSxJQUFNdFQsRUFBS0ksS0FBS3dOLFNBQVNDLFVBQVVFLEtBQUssS0FBTyxJQUM5RCxFQUFBc0YsV0FBV0UsRUFBSSxJQUFNdlQsRUFBS0ksS0FBS3dOLFNBQVM0RixTQUFTekYsS0FBSyxLQUFPLElBQzdELEVBQUFzRixXQUFXSSxFQUFJLElBQU16VCxFQUFLSSxLQUFLc1QsT0FBTzdGLFVBQVVFLEtBQUssS0FBTyxJQUM1RCxFQUFBc0YsV0FBV00sRUFBSSxJQUFNM1QsRUFBS0ksS0FBS3NULE9BQU9GLFNBQVN6RixLQUFLLEtBQU8sSUFDM0QsRUFBQXNGLFdBQVdPLEVBQUksSUFBTTVULEVBQUtJLEtBQUt5QyxLQUFLLEdBQUssSUFBTTdDLEVBQUtJLEtBQUt5QyxLQUFLLEdBQUssSUFBTTdDLEVBQUtJLEtBQUt5QyxLQUFLLEdBQUcwTyxjQUFnQixJQUFNdlIsRUFBS0ksS0FBS3lDLEtBQUssR0FBRzBPLGNBQWdCLFNBRXRIcFEsSUFEWjFDLEVBQVNBLEVBQVMsQ0FBQyxFQUFHc0IsR0FBaUI4VCxLQUFLblcsTUFBTW1XLEtBQUtDLFVBQVVoVSxFQUFRaVUsU0FBVyxDQUFDLEtBQ3ZGdk8sZ0JBQzJCckUsSUFBdENqQixFQUFVQyxjQUFjcUYsWUFDeEJ4RixFQUFLQyxPQUFPdUYsVUFBWXhGLEVBQUtJLEtBQUtvRixXQUV0Q3hGLEVBQUt5SSxZQUFhLElBQUF1TCxxQkFBb0JoVSxHQUN0Q0EsRUFBSzRHLFdBQVksSUFBQXFOLGtCQUFpQixDQUFFaFUsT0FBUUQsRUFBS0MsT0FBUUcsS0FBTUosRUFBS0ksTUFDeEUsQ0FDQSxTQUFTdVMsRUFBaUJ1QixHQUN0QixHQUFvQyxtQkFBekJsVSxFQUFLQyxPQUFPa1UsVUFHdkIsUUFBK0JoVCxJQUEzQm5CLEVBQUtPLGtCQUFULENBRUFpRyxHQUFhLHlCQUNiLElBQUk0TixFQUFrQkYsR0FBeUJsVSxFQUFLcVUsaUJBQ2hEQyxFQUFpQi9VLE1BQU1QLFVBQVV1VixPQUFPclYsS0FBS2MsRUFBS08sa0JBQWtCcUosVUFBVSxTQUFXNEssRUFBS0MsR0FBUyxPQUFPRCxFQUFNQyxFQUFNQyxZQUFlLEdBQUcsR0FBSUMsRUFBZ0IzVSxFQUFLTyxrQkFBa0JtQixZQU
3Fha1QsRUFBWTVVLEVBQUtDLE9BQU9rVSxTQUFTNVcsTUFBTSxLQUFNc1gsRUFBb0JELEVBQVUsR0FBSUUsRUFBc0JGLEVBQVV0bEIsT0FBUyxFQUFJc2xCLEVBQVUsR0FBSyxLQUFNRyxFQUFjWCxFQUFnQlksd0JBQXlCQyxFQUFxQmhVLE9BQU9pVSxZQUFjSCxFQUFZSSxPQUFRQyxFQUFrQyxVQUF0QlAsR0FDL2IsVUFBdEJBLEdBQ0dJLEVBQXFCWCxHQUNyQlMsRUFBWTViLElBQU1tYixFQUN0Qm5iLEVBQU04SCxPQUFPb1UsWUFDYk4sRUFBWTViLEtBQ1ZpYyxHQUFnRGQsRUFBaUIsRUFBckRGLEVBQWdCTSxhQUFlLEdBR2pELElBRkEsSUFBQTNMLGFBQVkvSSxFQUFLTyxrQkFBbUIsWUFBYTZVLElBQ2pELElBQUFyTSxhQUFZL0ksRUFBS08sa0JBQW1CLGNBQWU2VSxJQUMvQ3BWLEVBQUtDLE9BQU91TyxPQUFoQixDQUVBLElBQUk4RyxFQUFPclUsT0FBT3NVLFlBQWNSLEVBQVlPLEtBQ3hDRSxHQUFXLEVBQ1hDLEdBQVUsRUFDYyxXQUF4QlgsR0FDQVEsSUFBU1gsRUFBZ0JJLEVBQVlwZ0IsT0FBUyxFQUM5QzZnQixHQUFXLEdBRWtCLFVBQXhCVixJQUNMUSxHQUFRWCxFQUFnQkksRUFBWXBnQixNQUNwQzhnQixHQUFVLElBRWQsSUFBQTFNLGFBQVkvSSxFQUFLTyxrQkFBbUIsYUFBY2lWLElBQWFDLElBQy9ELElBQUExTSxhQUFZL0ksRUFBS08sa0JBQW1CLGNBQWVpVixJQUNuRCxJQUFBek0sYUFBWS9JLEVBQUtPLGtCQUFtQixhQUFja1YsR0FDbEQsSUFBSUMsRUFBUXpVLE9BQU94RSxTQUFTeU4sS0FBS3hJLGFBQzVCVCxPQUFPc1UsWUFBY1IsRUFBWVcsT0FDbENDLEVBQVlMLEVBQU9YLEVBQWdCMVQsT0FBT3hFLFNBQVN5TixLQUFLeEksWUFDeERrVSxFQUFhRixFQUFRZixFQUFnQjFULE9BQU94RSxTQUFTeU4sS0FBS3hJLFlBRTlELElBREEsSUFBQXFILGFBQVkvSSxFQUFLTyxrQkFBbUIsWUFBYW9WLElBQzdDM1YsRUFBS0MsT0FBT3lTLE9BR2hCLEdBREExUyxFQUFLTyxrQkFBa0JhLE1BQU1qSSxJQUFNQSxFQUFNLEtBQ3BDd2MsRUFJQSxHQUFLQyxFQUlMLENBQ0QsSUFBSUMsRUFnQlosV0FFSSxJQURBLElBQUlDLEVBQWdCLEtBQ1hyZCxFQUFJLEVBQUdBLEVBQUlnRSxTQUFTc1osWUFBWXptQixPQUFRbUosSUFBSyxDQUNsRCxJQUFJdWQsRUFBUXZaLFNBQVNzWixZQUFZdGQsR0FDakMsR0FBS3VkLEVBQU1DLFNBQVgsQ0FFQSxJQUNJRCxFQUFNQyxRQUNWLENBQ0EsTUFBT0MsR0FDSCxRQUNKLENBQ0FKLEVBQWdCRSxFQUNoQixLQVJZLENBU2hCLENBQ0EsT0FBd0IsTUFBakJGLEVBQXdCQSxHQUczQjFVLEVBQVEzRSxTQUFTNEwsY0FBYyxTQUNuQzVMLFNBQVMwWixLQUFLNUssWUFBWW5LLEdBQ25CQSxFQUFNNFUsT0FIakIsSUFDUTVVLENBRlIsQ0FoQ2tCZ1YsR0FDVixRQUFZalYsSUFBUjBVLEVBQ0EsT0FDSixJQUFJUSxFQUFZcFYsT0FBT3hFLFNBQVN5TixLQUFLeEksWUFDakM0VSxFQUFhbm5CLEtBQUtvSixJQUFJLEVBQUc4ZCxFQUFZLEVBQUkxQixFQUFnQixHQUd6RDRCLEVBQWNWLEVBQUlJLFNBQVMzbUIsT0FDM0JrbkIsRUFBYyxTQUFXekIsRUFBWU8sS0FBTyxtQkFDaEQsSUFBQXZNLGFBQVkvSSxFQUFLTyxrQkFBbUIsYUFBYSxJQUNqRCxJQUFBd0ksYUFBWS9JLEVBQUtPLGtCQUFtQixjQUFjLEdBQ2xEc1YsRUFBSVksV0FBV0MsNkVBQW1DRixFQUFhRCxHQUMvRHZXLEVBQUtPLGtCQUFrQmEsTUFBTWtVLEtBQU9nQixFQUFhLEtBQ2pEdFcsRUFBS08sa0JBQWtCYSxNQUFNc1UsTUFBUSxNQUN6QyxNQWxCSTFWLEVBQUtPLGtCQUFrQmEsTUFBTWtVLEtBQU8sT0FDcEN0VixFQUFLTyxrQkFBa0JhLE1BQU1zVSxNQUFRQSxFQUFRLFVBTDdDMVYsRUFBS08sa0JBQWtCYSxNQUFNa1UsS0FBT0EsRUFBTyxLQUMzQ3RWLEVBQUtPLGtCQUFrQmEsTUFBTXNVLE1BQVEsTUF6Qi9CLENBYkEsT0FITTFWLEVBQUtDLE9BQU9rVSxTQUFTblUsRUFBTWtVLEVBK0QvQyxDQXVCQSxTQUFTM00sSUFDRHZILEVBQUtDLE9BQU9lLFlBQWNoQixFQUFLdUYsV0FFbkMrQixJQUNBNkcsS0FDQXpDLElBQ0osQ0FDQSxTQUFTaUYsSUFDTDNRLEVBQUs4RCxPQUFPdUYsU0FDd0MsSUFBaERwSSxPQUFPMFYsVUFBVUMsVUFBVW5QLFFBQVEsY0FDSnRHLElBQS9Cd1YsVUFBVUUsaUJBQ1ZyakIsV0FBV3dNLEVBQUtvUCxNQUFPLEdBR3ZCcFAsRUFBS29QLE9BRWIsQ0FDQSxTQUFTd0IsRUFBV2pnQixHQUNoQkEsRUFBRUMsaUJBQ0ZELEVBQUVFLGtCQUNGLElBTUk4TixHQUFJLElBQUFtWSxhQUFXLElBQUFuVSxnQkFBZWhTLElBTmYsU0FBVW9tQixHQUN6QixPQUFPQSxFQUFJbmdCLFdBQ1BtZ0IsRUFBSW5nQixVQUFVOFEsU0FBUyxtQkFDdEJxUCxFQUFJbmdCLFVBQVU4USxTQUFTLHdCQUN2QnFQLEVBQUluZ0IsVUFBVThRLFNBQVMsYUFDaEMsSUFFQSxRQUFVdkcsSUFBTnhDLEVBQUosQ0FFQSxJQUFJNU4sRUFBUzROLEVBQ1RxWSxFQUFnQmhYLEVBQUt3QyxzQkFBd0IsSUFBSTdHLEtBQUs1SyxFQUFPc1UsUUFBUXJELFdBQ3JFaVYsR0FBcUJELEVBQWE3UCxXQUFhbkgsRUFBS2lILGNBQ3BEK1AsRUFBYTdQLFdBQ1RuSCxFQUFLaUgsYUFBZWpILEVBQUtDLE9BQU9jLFdBQWEsSUFDNUIsVUFBckJmLEVBQUtDLE9BQU9wRixLQUVoQixHQURBbUYsRUFBSzhJLGlCQUFtQi9YLEVBQ0MsV0FBckJpUCxFQUFLQyxPQUFPcEYsS0FDWm1GLEVBQUtoRixjQUFnQixDQUFDZ2MsUUFDckIsR0FBeUIsYUFBckJoWCxFQUFLQyxPQUFPcEYsS0FBcUIsQ0FDdEMsSUFBSXFjLEVBQWdCck8sR0FBZW1PLEdBQy9CRSxFQUNBbFgsRUFBS2hGLGNBQWM4UyxPQUFPNVosU0FBU2dqQixHQUFnQixHQUVuRGxYLEVBQUtoRixjQUFjckYsS0FBS3FoQixFQUNoQyxLQUM4QixVQUFyQmhYLEVBQUtDLE9BQU9wRixPQUNpQixJQUE5Qm1GLEVBQUtoRixjQUFjMUwsUUFDbkIwUSxFQUFLcVAsT0FBTSxHQUFPLEdBRXRCclAsRUFBS3dDLHNCQUF3QndVLEVBQzdCaFgsRUFBS2hGLGNBQWNyRixLQUFLcWhCLEdBQ3dDLEtBQTVELElBQUFqVixjQUFhaVYsRUFBY2hYLEVBQUtoRixjQUFjLElBQUksSUFDbERnRixFQUFLaEYsY0FBY21jLE1BQUssU0FBVTFYLEVBQUcyWCxHQUFLLE9BQU8zWCxFQUFFdUMsVUFBWW9WLEVBQUVwVixTQUFXLEtBR3BGLEdBREErQixJQUNJa1QsRUFBbUIsQ0FDbkIsSUFBSXpILEVBQVl4UCxFQUFLK0csY0FBZ0JpUSxFQUFhOVAsY0FDbERsSCxFQUFLK0csWUFBY2lRLEVBQWE5UCxjQUNoQ2xILEVBQUtpSCxhQUFlK1AsRUFBYTdQLFdBQzdCcUksSUFDQWhKLEdBQWEsZ0JBQ2JjLEtBRUpkLEdBQWEsZ0JBQ2pCLENBY0EsR0FiQTJILEtBQ0F6QyxJQUNBMUgsS0FDS2lULEdBQ29CLFVBQXJCalgsRUFBS0MsT0FBT3BGLE1BQ2UsSUFBM0JtRixFQUFLQyxPQUFPYyxnQkFFbUJJLElBQTFCbkIsRUFBSzhJLHVCQUNXM0gsSUFBckJuQixFQUFLc0QsYUFDTHRELEVBQUs4SSxrQkFBb0I5SSxFQUFLOEksaUJBQWlCTyxRQUgvQ0YsRUFBZXBZLFFBS01vUSxJQUFyQm5CLEVBQUtzRCxrQkFDZ0JuQyxJQUFyQm5CLEVBQUtzRCxhQUE2QnRELEVBQUtzRCxZQUFZK0YsUUFDbkRySixFQUFLQyxPQUFPb1gsY0FBZSxDQUMzQixJQUFJQyxFQUE4QixXQUFyQnRYLEVBQUtDLE9BQU9wRixPQUFzQm1GLEVBQUtDLE9BQU8rUSxXQUN2RDNULEVBQTZCLFVBQXJCMkMsRUFBS0MsT0FBT3BGLE1BQ1UsSUFBOUJtRixFQUFLaEYsY0FBYzFMLFNBQ2xCMFEsRUFBS0MsT0FBTytRLFlBQ2JzRyxHQUFVamEsSUFDVnNULEdBRVIsQ0FDQXBLLEdBM0RVLENBNERkLENBbmlEQXZHLEVBQUs0RyxXQUFZLElBQUFxTixrQkFBaUIsQ0FBRWhVLE9BQVFELEVBQUtDLE9BQVFHLEtB
3QU1KLEVBQUtJLE9BQ3BFSixFQUFLcUcsVUFBWSxHQUNqQnJHLEVBQUttUixlQUFpQixHQUN0Qm5SLEVBQUt1WCxjQUFnQixHQUNyQnZYLEVBQUt3WCxNQUFRNVcsRUFDYlosRUFBS3lYLGtCQUFvQnJTLEVBQ3pCcEYsRUFBSzBYLGtCQUFvQi9FLEVBQ3pCM1MsRUFBS3VLLFlBQWNBLEVBQ25CdkssRUFBSzhGLFdBQWFBLEVBQ2xCOUYsRUFBS3FQLE1Bc3ZCTCxTQUFlc0ksRUFBb0JDLFFBQ0osSUFBdkJELElBQWlDQSxHQUFxQixRQUN4QyxJQUFkQyxJQUF3QkEsR0FBWSxHQUN4QzVYLEVBQUs0QyxNQUFNNUcsTUFBUSxRQUNHbUYsSUFBbEJuQixFQUFLdkUsV0FDTHVFLEVBQUt2RSxTQUFTTyxNQUFRLFNBQ0RtRixJQUFyQm5CLEVBQUs2WCxjQUNMN1gsRUFBSzZYLFlBQVk3YixNQUFRLElBQzdCZ0UsRUFBS2hGLGNBQWdCLEdBQ3JCZ0YsRUFBS3dDLDJCQUF3QnJCLEdBQ1gsSUFBZHlXLElBQ0E1WCxFQUFLK0csWUFBYy9HLEVBQUs4WCxhQUFhNVEsY0FDckNsSCxFQUFLaUgsYUFBZWpILEVBQUs4WCxhQUFhM1EsWUFFMUMsSUFBK0IsSUFBM0JuSCxFQUFLQyxPQUFPK1EsV0FBcUIsQ0FDakMsSUFBSTFRLEdBQUssSUFBQTRCLGlCQUFnQmxDLEVBQUtDLFFBQzlCa0MsRUFEK0M3QixFQUFHOEIsTUFBaUI5QixFQUFHK0IsUUFBbUIvQixFQUFHZ0MsUUFFaEcsQ0FDQXRDLEVBQUt1SCxTQUNEb1EsR0FDQW5SLEdBQWEsV0FDckIsRUExd0JBeEcsRUFBS29QLE1BMndCTCxXQUNJcFAsRUFBS3VPLFFBQVMsRUFDVHZPLEVBQUt1RixnQkFDeUJwRSxJQUEzQm5CLEVBQUtPLG1CQUNMUCxFQUFLTyxrQkFBa0IzSixVQUFVYixPQUFPLGFBRXhCb0wsSUFBaEJuQixFQUFLOEQsUUFDTDlELEVBQUs4RCxPQUFPbE4sVUFBVWIsT0FBTyxXQUdyQ3lRLEdBQWEsVUFDakIsRUFyeEJBeEcsRUFBS3NKLFlBQWNBLEVBQ25CdEosRUFBSytYLGVBQWlCLEVBQUExUCxjQUN0QnJJLEVBQUtnSSxVQUFZQSxFQUNqQmhJLEVBQUtsRSxRQW14QkwsZ0JBQ3dCcUYsSUFBaEJuQixFQUFLQyxRQUNMdUcsR0FBYSxhQUNqQixJQUFLLElBQUkvTixFQUFJdUgsRUFBS3FHLFVBQVUvVyxPQUFRbUosS0FDaEN1SCxFQUFLcUcsVUFBVTVOLEdBQUcxQyxTQUd0QixHQURBaUssRUFBS3FHLFVBQVksR0FDYnJHLEVBQUs2WCxZQUNEN1gsRUFBSzZYLFlBQVlqUSxZQUNqQjVILEVBQUs2WCxZQUFZalEsV0FBV29RLFlBQVloWSxFQUFLNlgsYUFDakQ3WCxFQUFLNlgsaUJBQWMxVyxPQUVsQixHQUFJbkIsRUFBS08sbUJBQXFCUCxFQUFLTyxrQkFBa0JxSCxXQUN0RCxHQUFJNUgsRUFBS0MsT0FBT3lTLFFBQVUxUyxFQUFLTyxrQkFBa0JxSCxXQUFZLENBQ3pELElBQUlxUSxFQUFValksRUFBS08sa0JBQWtCcUgsV0FFckMsR0FEQXFRLEVBQVFDLFdBQWFELEVBQVFELFlBQVlDLEVBQVFDLFdBQzdDRCxFQUFRclEsV0FBWSxDQUNwQixLQUFPcVEsRUFBUXBRLFlBQ1hvUSxFQUFRclEsV0FBV3VRLGFBQWFGLEVBQVFwUSxXQUFZb1EsR0FDeERBLEVBQVFyUSxXQUFXb1EsWUFBWUMsRUFDbkMsQ0FDSixNQUVJalksRUFBS08sa0JBQWtCcUgsV0FBV29RLFlBQVloWSxFQUFLTyxtQkFFdkRQLEVBQUt2RSxXQUNMdUUsRUFBSzRDLE1BQU1yRyxLQUFPLE9BQ2R5RCxFQUFLdkUsU0FBU21NLFlBQ2Q1SCxFQUFLdkUsU0FBU21NLFdBQVdvUSxZQUFZaFksRUFBS3ZFLGlCQUN2Q3VFLEVBQUt2RSxVQUVadUUsRUFBSzRDLFFBQ0w1QyxFQUFLNEMsTUFBTXJHLEtBQU95RCxFQUFLNEMsTUFBTXdWLE1BQzdCcFksRUFBSzRDLE1BQU1oTSxVQUFVYixPQUFPLG1CQUM1QmlLLEVBQUs0QyxNQUFNa1EsZ0JBQWdCLGFBRS9CLENBQ0ksaUJBQ0Esd0JBQ0Esc0JBQ0Esc0JBQ0EsdUJBQ0EsdUJBQ0EsV0FDQSxTQUNBLG1CQUNBLGlCQUNBLGlCQUNBLE9BQ0EsZ0JBQ0EsU0FDQSxtQkFDQSxpQkFDQSxhQUNBLFdBQ0EsZ0JBQ0Esb0JBQ0EsbUJBQ0EsZUFDQSxlQUNBLDBCQUNBLHNCQUNBLHFCQUNBLHlCQUNBLG1CQUNBLFVBQ0Y3TSxTQUFRLFNBQVV6RyxHQUNoQixXQUNXUSxFQUFLUixFQUNoQixDQUNBLE1BQU82WSxHQUFLLENBQ2hCLEdBQ0osRUExMUJBclksRUFBS21JLFVBQVlBLEVBQ2pCbkksRUFBS3lHLFdBQWFBLEVBQ2xCekcsRUFBS2dFLFlBQWNBLEdBQ25CaEUsRUFBS3lRLEtBMHBDTCxTQUFjOWYsRUFBR3lqQixRQUNXLElBQXBCQSxJQUE4QkEsRUFBa0JwVSxFQUFLcVUsa0JBQ3pELElBQXNCLElBQWxCclUsRUFBS3VGLFNBQW1CLENBQ3hCLEdBQUk1VSxFQUFHLENBQ0hBLEVBQUVDLGlCQUNGLElBQUk4UixHQUFjLElBQUFDLGdCQUFlaFMsR0FDN0IrUixHQUNBQSxFQUFZOE4sTUFFcEIsQ0FNQSxZQUx5QnJQLElBQXJCbkIsRUFBSzZYLGNBQ0w3WCxFQUFLNlgsWUFBWXhPLFFBQ2pCckosRUFBSzZYLFlBQVk3ZCxjQUVyQndNLEdBQWEsU0FFakIsQ0FDSyxHQUFJeEcsRUFBSzhELE9BQU9vSixVQUFZbE4sRUFBS0MsT0FBT3VPLE9BQ3pDLE9BRUosSUFBSThKLEVBQVV0WSxFQUFLdU8sT0FDbkJ2TyxFQUFLdU8sUUFBUyxFQUNUK0osSUFDRHRZLEVBQUtPLGtCQUFrQjNKLFVBQVVDLElBQUksUUFDckNtSixFQUFLOEQsT0FBT2xOLFVBQVVDLElBQUksVUFDMUIyUCxHQUFhLFVBQ2JtTSxFQUFpQnlCLEtBRVUsSUFBM0JwVSxFQUFLQyxPQUFPK1EsYUFBa0QsSUFBM0JoUixFQUFLQyxPQUFPZSxjQUNoQixJQUEzQmhCLEVBQUtDLE9BQU9nUCxpQkFDTDlOLElBQU54USxHQUNJcVAsRUFBS21QLGNBQWN6SCxTQUFTL1csRUFBRWtlLGdCQUNuQ3JiLFlBQVcsV0FBYyxPQUFPd00sRUFBS3NELFlBQVlpVixRQUFVLEdBQUcsSUFHMUUsRUE1ckNBdlksRUFBS3VILE9BQVNBLEVBQ2R2SCxFQUFLd1ksSUFtaURMLFNBQWFDLEVBQVF6YyxHQUNqQixHQUFlLE9BQVh5YyxHQUFxQyxpQkFBWEEsRUFFMUIsSUFBSyxJQUFJN1MsS0FEVHJILE9BQU9HLE9BQU9zQixFQUFLQyxPQUFRd1ksR0FDWEEsT0FDV3RYLElBQW5CdVgsR0FBVTlTLElBQ1Y4UyxHQUFVOVMsR0FBS0ssU0FBUSxTQUFVbUwsR0FBSyxPQUFPQSxHQUFLLFNBSTFEcFIsRUFBS0MsT0FBT3dZLEdBQVV6YyxPQUNJbUYsSUFBdEJ1WCxHQUFVRCxHQUNWQyxHQUFVRCxHQUFReFMsU0FBUSxTQUFVbUwsR0FBSyxPQUFPQSxHQUFLLElBQ2hELEVBQUF1SCxNQUFNbFIsUUFBUWdSLElBQVcsSUFDOUJ6WSxFQUFLQyxPQUFPd1ksSUFBVSxJQUFBRyxVQUFTNWMsSUFFdkNnRSxFQUFLdUgsU0FDTHZELElBQVksRUFDaEIsRUFuakRBaEUsRUFBS2tQLFFBc2xETCxTQUFpQjVKLEVBQU1pQixFQUFldkosUUFDWixJQUFsQnVKLElBQTRCQSxHQU
3FnQixRQUNqQyxJQUFYdkosSUFBcUJBLEVBQVNnRCxFQUFLQyxPQUFPdkUsWUFDOUMsR0FBYyxJQUFUNEosSUFBZUEsR0FBVUEsYUFBZ0IvRixPQUF5QixJQUFoQitGLEVBQUtoVyxPQUN4RCxPQUFPMFEsRUFBS3FQLE1BQU05SSxHQUN0QnNTLEdBQWdCdlQsRUFBTXRJLEdBQ3RCZ0QsRUFBS3dDLHNCQUNEeEMsRUFBS2hGLGNBQWNnRixFQUFLaEYsY0FBYzFMLE9BQVMsR0FDbkQwUSxFQUFLdUgsU0FDTGQsT0FBV3RGLEVBQVdvRixHQUN0Qm5CLElBQ2tDLElBQTlCcEYsRUFBS2hGLGNBQWMxTCxRQUNuQjBRLEVBQUtxUCxPQUFNLEdBRWZyTCxHQUFZdUMsR0FDUkEsR0FDQUMsR0FBYSxXQUNyQixFQXRtREF4RyxFQUFLOFksT0EydURMLFNBQWdCbm9CLEdBQ1osSUFBb0IsSUFBaEJxUCxFQUFLdU8sT0FDTCxPQUFPdk8sRUFBS29QLFFBQ2hCcFAsRUFBS3lRLEtBQUs5ZixFQUNkLEVBak9BLElBQUkrbkIsR0FBWSxDQUNacGQsT0FBUSxDQUFDMlgsRUFBYXRGLEdBQ3RCNU0sV0FBWSxDQUFDb00sRUFBYXRNLEVBQWtCNE0sR0FDNUN0UyxRQUFTLENBQUNzTCxHQUNWN0ssUUFBUyxDQUFDNkssR0FDVjJOLGdCQUFpQixDQUFDMkUsSUFDbEJDLFdBQVksQ0FDUixZQUNtQyxJQUEzQmhaLEVBQUtDLE9BQU8rWSxZQUNacFksRUFBS1osRUFBSzhELE9BQVEsUUFBUzlELEVBQUt5USxNQUNoQzdQLEVBQUtaLEVBQUs4RCxPQUFRLFFBQVM5RCxFQUFLeVEsUUFHaEN6USxFQUFLOEQsT0FBT3dDLG9CQUFvQixRQUFTdEcsRUFBS3lRLE1BQzlDelEsRUFBSzhELE9BQU93QyxvQkFBb0IsUUFBU3RHLEVBQUt5USxNQUV0RCxJQXFCUixTQUFTb0ksR0FBZ0JJLEVBQVdqYyxHQUNoQyxJQUFJa2MsRUFBUSxHQUNaLEdBQUlELGFBQXFCMVosTUFDckIyWixFQUFRRCxFQUFVcm1CLEtBQUksU0FBVWlaLEdBQUssT0FBTzdMLEVBQUs0RyxVQUFVaUYsRUFBRzdPLEVBQVMsU0FDdEUsR0FBSWljLGFBQXFCdGQsTUFBNkIsaUJBQWRzZCxFQUN6Q0MsRUFBUSxDQUFDbFosRUFBSzRHLFVBQVVxUyxFQUFXamMsU0FDbEMsR0FBeUIsaUJBQWRpYyxFQUNaLE9BQVFqWixFQUFLQyxPQUFPcEYsTUFDaEIsSUFBSyxTQUNMLElBQUssT0FDRHFlLEVBQVEsQ0FBQ2xaLEVBQUs0RyxVQUFVcVMsRUFBV2pjLElBQ25DLE1BQ0osSUFBSyxXQUNEa2MsRUFBUUQsRUFDSDFiLE1BQU15QyxFQUFLQyxPQUFPa1osYUFDbEJ2bUIsS0FBSSxTQUFVMFMsR0FBUSxPQUFPdEYsRUFBSzRHLFVBQVV0QixFQUFNdEksRUFBUyxJQUNoRSxNQUNKLElBQUssUUFDRGtjLEVBQVFELEVBQ0gxYixNQUFNeUMsRUFBS0ksS0FBS2daLGdCQUNoQnhtQixLQUFJLFNBQVUwUyxHQUFRLE9BQU90RixFQUFLNEcsVUFBVXRCLEVBQU10SSxFQUFTLFNBT3hFZ0QsRUFBS0MsT0FBT29ILGFBQWEsSUFBSThMLE1BQU0sMEJBQTRCVSxLQUFLQyxVQUFVbUYsS0FDbEZqWixFQUFLaEYsY0FBaUJnRixFQUFLQyxPQUFPb1osb0JBQzVCSCxFQUNBQSxFQUFNdnBCLFFBQU8sU0FBVWtjLEdBQUssT0FBT0EsYUFBYWxRLE1BQVF3TSxFQUFVMEQsR0FBRyxFQUFRLElBQzFELFVBQXJCN0wsRUFBS0MsT0FBT3BGLE1BQ1ptRixFQUFLaEYsY0FBY21jLE1BQUssU0FBVTFYLEVBQUcyWCxHQUFLLE9BQU8zWCxFQUFFdUMsVUFBWW9WLEVBQUVwVixTQUFXLEdBQ3BGLENBbUJBLFNBQVNzWCxHQUFlQyxHQUNwQixPQUFPQSxFQUNGcFYsUUFDQXZSLEtBQUksU0FBVTRtQixHQUNmLE1BQW9CLGlCQUFUQSxHQUNTLGlCQUFUQSxHQUNQQSxhQUFnQjdkLEtBQ1RxRSxFQUFLNEcsVUFBVTRTLE9BQU1yWSxHQUFXLEdBRWxDcVksR0FDVyxpQkFBVEEsR0FDUEEsRUFBS3JjLE1BQ0xxYyxFQUFLdGMsR0FDRSxDQUNIQyxLQUFNNkMsRUFBSzRHLFVBQVU0UyxFQUFLcmMsVUFBTWdFLEdBQ2hDakUsR0FBSThDLEVBQUs0RyxVQUFVNFMsRUFBS3RjLFFBQUlpRSxJQUU3QnFZLENBQ1gsSUFDSzdwQixRQUFPLFNBQVV5aEIsR0FBSyxPQUFPQSxDQUFHLEdBQ3pDLENBb0VBLFNBQVMySCxLQUNML1ksRUFBS3FVLGlCQUFtQnJVLEVBQUtDLE9BQU9tVSxpQkFBbUJwVSxFQUFLOEQsTUFDaEUsQ0ErQ0EsU0FBUzBDLEdBQWFkLEVBQU81VyxHQUN6QixRQUFvQnFTLElBQWhCbkIsRUFBS0MsT0FBVCxDQUVBLElBQUl3WixFQUFRelosRUFBS0MsT0FBT3lGLEdBQ3hCLFFBQWN2RSxJQUFWc1ksR0FBdUJBLEVBQU1ucUIsT0FBUyxFQUN0QyxJQUFLLElBQUltSixFQUFJLEVBQUdnaEIsRUFBTWhoQixJQUFNQSxFQUFJZ2hCLEVBQU1ucUIsT0FBUW1KLElBQzFDZ2hCLEVBQU1oaEIsR0FBR3VILEVBQUtoRixjQUFlZ0YsRUFBSzRDLE1BQU01RyxNQUFPZ0UsRUFBTWxSLEdBRS9DLGFBQVY0VyxJQUNBMUYsRUFBSzRDLE1BQU1tRixjQUFjRCxHQUFZLFdBQ3JDOUgsRUFBSzRDLE1BQU1tRixjQUFjRCxHQUFZLFVBUi9CLENBVWQsQ0FDQSxTQUFTQSxHQUFZclIsR0FDakIsSUFBSTlGLEVBQUk4TCxTQUFTcUwsWUFBWSxTQUU3QixPQURBblgsRUFBRStvQixVQUFVampCLEdBQU0sR0FBTSxHQUNqQjlGLENBQ1gsQ0FDQSxTQUFTa1ksR0FBZXZELEdBQ3BCLElBQUssSUFBSTdNLEVBQUksRUFBR0EsRUFBSXVILEVBQUtoRixjQUFjMUwsT0FBUW1KLElBQUssQ0FDaEQsSUFBSXVlLEVBQWVoWCxFQUFLaEYsY0FBY3ZDLEdBQ3RDLEdBQUl1ZSxhQUF3QnJiLE1BQ2EsS0FBckMsSUFBQW9HLGNBQWFpVixFQUFjMVIsR0FDM0IsTUFBTyxHQUFLN00sQ0FDcEIsQ0FDQSxPQUFPLENBQ1gsQ0FPQSxTQUFTMFYsS0FDRG5PLEVBQUtDLE9BQU9lLFlBQWNoQixFQUFLdUYsV0FBYXZGLEVBQUtvTixXQUVyRHBOLEVBQUtzTixhQUFhckgsU0FBUSxTQUFVOEcsRUFBYXRVLEdBQzdDLElBQUlvVCxFQUFJLElBQUlsUSxLQUFLcUUsRUFBSytHLFlBQWEvRyxFQUFLaUgsYUFBYyxHQUN0RDRFLEVBQUVDLFNBQVM5TCxFQUFLaUgsYUFBZXhPLEdBQzNCdUgsRUFBS0MsT0FBT2MsV0FBYSxHQUNTLFdBQWxDZixFQUFLQyxPQUFPOEwsa0JBQ1ovTCxFQUFLdU4sY0FBYzlVLEdBQUdxSyxhQUNsQixJQUFBcUosWUFBV04sRUFBRTFFLFdBQVluSCxFQUFLQyxPQUFPbU0sc0JBQXVCcE0sRUFBS0ksTUFBUSxJQUc3RUosRUFBS2lNLHdCQUF3QmpRLE1BQVE2UCxFQUFFMUUsV0FBV2pKLFdBRXRENk8sRUFBWS9RLE1BQVE2UCxFQUFFM0UsY0FBY2hKLFVBQ3hDLElBQ0E4QixFQUFLaU8seUJBQ3VCOU0sSUFBeEJuQixFQUFLQyxPQUFPOUUsVUFDUDZFLEVBQUsrRyxjQUFnQi9HLEVBQUtDLE9BQU85RSxRQUFRK0wsY0FDcENsSCxFQUFLaUgsY0FBZ0JqSCxFQUFLQyxPQUFPOUUsUUFBUWdNLFdBQ3pDbkgsRUFBSytHLFlBQWMvRyxFQUFLQyxPQUFPOUUsUUFBUStMLGVBQ3JEbEgsRUFBS2tPLHlCQUN1Qi9NLElBQXhCbkIsRUFBS0MsT0FBT3JFLFVBQ1BvRSxFQUFLK0csY0FBZ0IvRyxFQUFLQyxPQUFPckUsUUFBUXNMLGNBQ3BDbEgsRUFBS2lILGFBQWUsRUFBSWpILEVBQUtDLE9BQU9yRSxRQUFRdUwsV0FDNUNuSCxFQUFLK0csWUFBYy9HLEVBQUtDLE9BQU9yRSxRQUFRc0wsZUFDekQsQ0FDQSxTQUFTZ0osR0FBV3lKLEdBQ2hCLElBQUkzYyxFQUFTMmMsSUFDUjNaLEVBQUtDLE9BQU94RSxTQUFXdUUsRUFBS0MsT0FBT3pFLFVBQVl3RSxFQUFLQyxPQUFPdkUsWUFDaEUsT0FBT3NFLEVBQUtoRixjQUNQcEksS0FBSSxTQUFVZ25CLEdBQVEsT0FBTzVaLEVBQUt5SSxXQUFXbVIsRUFBTTVjLEVBQVMsSUFDNURyTixRQUFPLFNBQVVrYyxFQUFHcFQsRUFBRzhnQixHQUN4QixNQUE0QixVQUFyQnZaLEVBQUtDLE9BQU9wRixNQUNmbUYsRUFBS0MsT0FBTytRLFlBQ1p1SSxFQUFJOVIsUUFBUW9FLEtBQU9wVCxDQUMzQixJQUNLc1YsS0FBMEIsVUFBckIvTixFQUFLQyxPQUFPcEYsS0FDaEJtRixFQUFLQyxPQUFPa1osWUFDWm5aLEVBQUtJLEtBQUtnWixlQUNwQixDQUNBLFNBQVNwVixHQUFZdUMsUUFDSyxJQUFsQkEsSUFBNEJBLEdBQWdCLFFBQ3ZCcEYsSUFBckJuQixFQUFLNlgsYUFBNkI3WCxFQUFLNlosa0JBQ3ZDN1osRUFBSzZYLFlBQVk3YixXQUNrQm1GLElBQS9CbkIsRUFBS3dDLHNCQUNDeEMsRUFBS3lJLFdBQVd6SSxFQUFLd0Msc0JBQXVCeEMsRUFBSzZaLGlCQUNqRCxJQUVkN1osRUFBSzRDLE1BQU01RyxNQUFRa1UsR0FBV2xRLEVBQUtDLE9BQU92RSxpQkFDcEJ5RixJQUFsQm5CLEVBQUt2RSxXQUNMdUUsRUFBS3ZFLFNBQVNPLE1BQVFrVSxHQUFXbFEsRUFBS0MsT0FBT3pFLGFBRTNCLElBQWxCK0ssR0FDQUMsR0FBYSxnQkFDckIsQ0FDQSxTQUFTc1QsR0FBZ0JucEIsR0FDckIsSUFBSStSLEdBQWMsSUFBQUMsZ0JBQWVoUyxHQUM3Qm9wQixFQUFjL1osRUFBS3FOLGFBQWEzRixTQUFTaEYsR0FDekNzWCxFQUFjaGEsRU
3FBS3dOLGFBQWE5RixTQUFTaEYsR0FDekNxWCxHQUFlQyxFQUNmelAsRUFBWXdQLEdBQWUsRUFBSSxHQUUxQi9aLEVBQUtzTixhQUFhN0YsUUFBUS9FLElBQWdCLEVBQy9DQSxFQUFZNlYsU0FFUDdWLEVBQVk5TCxVQUFVOFEsU0FBUyxXQUNwQzFILEVBQUs4RixXQUFXOUYsRUFBSytHLFlBQWMsR0FFOUJyRSxFQUFZOUwsVUFBVThRLFNBQVMsY0FDcEMxSCxFQUFLOEYsV0FBVzlGLEVBQUsrRyxZQUFjLEVBRTNDLENBd0NBLE9BcjNEQSxXQUNJL0csRUFBS0YsUUFBVUUsRUFBSzRDLE1BQVE5QyxFQUM1QkUsRUFBS3VPLFFBQVMsRUF5c0NsQixXQUNJLElBQUkwTCxFQUFXLENBQ1gsT0FDQSxjQUNBLGFBQ0Esc0JBQ0EsYUFDQSxZQUNBLGFBQ0EsYUFDQSxXQUNBLHdCQUNBLFNBQ0EsU0FDQSxnQkFDQSxpQkFFQUMsRUFBYXpiLEVBQVNBLEVBQVMsQ0FBQyxFQUFHb1YsS0FBS25XLE1BQU1tVyxLQUFLQyxVQUFVaFUsRUFBUWlVLFNBQVcsQ0FBQyxLQUFNaFUsR0FDdkZvYSxFQUFVLENBQUMsRUFDZm5hLEVBQUtDLE9BQU8yRyxVQUFZc1QsRUFBV3RULFVBQ25DNUcsRUFBS0MsT0FBT3dJLFdBQWF5UixFQUFXelIsV0FDcENsSyxPQUFPNmIsZUFBZXBhLEVBQUtDLE9BQVEsU0FBVSxDQUN6Q3BDLElBQUssV0FBYyxPQUFPbUMsRUFBS0MsT0FBT29hLE9BQVMsRUFDL0M3QixJQUFLLFNBQVVVLEdBQ1hsWixFQUFLQyxPQUFPb2EsUUFBVWYsR0FBZUosRUFDekMsSUFFSjNhLE9BQU82YixlQUFlcGEsRUFBS0MsT0FBUSxVQUFXLENBQzFDcEMsSUFBSyxXQUFjLE9BQU9tQyxFQUFLQyxPQUFPcWEsUUFBVSxFQUNoRDlCLElBQUssU0FBVVUsR0FDWGxaLEVBQUtDLE9BQU9xYSxTQUFXaEIsR0FBZUosRUFDMUMsSUFFSixJQUFJcUIsRUFBK0IsU0FBcEJMLEVBQVdyZixLQUMxQixJQUFLcWYsRUFBV3hlLGFBQWV3ZSxFQUFXbEosWUFBY3VKLEdBQVcsQ0FDL0QsSUFBSUMsRUFBb0J0YSxFQU
3FVQyxjQUFjekUsWUFBYyxXQUFlQSxXQUM3RXllLEVBQVF6ZSxXQUNKd2UsRUFBV2xaLFlBQWN1WixFQUNuQixPQUFTTCxFQUFXTyxjQUFnQixLQUFPLElBQzNDRCxFQUFvQixRQUFVTixFQUFXTyxjQUFnQixLQUFPLEdBQzlFLENBQ0EsR0FBSVAsRUFBV3plLFdBQ1Z5ZSxFQUFXbEosWUFBY3VKLEtBQ3pCTCxFQUFXMWUsVUFBVyxDQUN2QixJQUFJa2YsRUFBbUJ4YSxFQUFVQyxjQUFjM0UsV0FBYSxXQUFlQSxVQUMzRTJlLEVBQVEzZSxVQUNKMGUsRUFBV2xaLFlBQWN1WixFQUNuQixPQUFTTCxFQUFXTyxjQUFnQixPQUFTLE1BQzdDQyxFQUFvQixRQUFVUixFQUFXTyxjQUFnQixLQUFPLElBQU0sSUFDcEYsQ0FDQWxjLE9BQU82YixlQUFlcGEsRUFBS0MsT0FBUSxVQUFXLENBQzFDcEMsSUFBSyxXQUFjLE9BQU9tQyxFQUFLQyxPQUFPMGEsUUFBVSxFQUNoRG5DLElBQUs1RixFQUFpQixTQUUxQnJVLE9BQU82YixlQUFlcGEsRUFBS0MsT0FBUSxVQUFXLENBQzFDcEMsSUFBSyxXQUFjLE9BQU9tQyxFQUFLQyxPQUFPMmEsUUFBVSxFQUNoRHBDLElBQUs1RixFQUFpQixTQUUxQixJQUFJaUksRUFBbUIsU0FBVXRlLEdBQVEsT0FBTyxTQUFVdWUsR0FDdEQ5YSxFQUFLQyxPQUFnQixRQUFUMUQsRUFBaUIsV0FBYSxZQUFjeUQsRUFBSzRHLFVBQVVrVSxFQUFLLFFBQ2hGLENBQUcsRUFDSHZjLE9BQU82YixlQUFlcGEsRUFBS0MsT0FBUSxVQUFXLENBQzFDcEMsSUFBSyxXQUFjLE9BQU9tQyxFQUFLQyxPQUFPOGEsUUFBVSxFQUNoRHZDLElBQUtxQyxFQUFpQixTQUUxQnRjLE9BQU82YixlQUFlcGEsRUFBS0MsT0FBUSxVQUFXLENBQzFDcEMsSUFBSyxXQUFjLE9BQU9tQyxFQUFLQyxPQUFPK2EsUUFBVSxFQUNoRHhDLElBQUtxQyxFQUFpQixTQUVGLFNBQXBCWCxFQUFXcmYsT0FDWG1GLEVBQUtDLE9BQU9lLFlBQWEsRUFDekJoQixFQUFLQyxPQUFPK1EsWUFBYSxHQUU3QnpTLE9BQU9HLE9BQU9zQixFQUFLQyxPQUFRa2EsRUFBU0QsR0FDcEMsSUFBSyxJQUFJemhCLEVBQUksRUFBR0EsRUFBSXdoQixFQUFTM3FCLE9BQVFtSixJQUNqQ3VILEVBQUtDLE9BQU9nYSxFQUFTeGhCLEtBQ1ksSUFBN0J1SCxFQUFLQyxPQUFPZ2EsRUFBU3hoQixLQUNZLFNBQTdCdUgsRUFBS0MsT0FBT2dhLEVBQVN4aEIsSUFDakMsRUFBQWtnQixNQUFNaHBCLFFBQU8sU0FBVXNyQixHQUFRLFlBQTZCOVosSUFBdEJuQixFQUFLQyxPQUFPZ2IsRUFBcUIsSUFBR2hWLFNBQVEsU0FBVWdWLEdBQ3hGamIsRUFBS0MsT0FBT2diLElBQVEsSUFBQXJDLFVBQVM1WSxFQUFLQyxPQUFPZ2IsSUFBUyxJQUFJcm9CLElBQUk4TixFQUM5RCxJQUNBVixFQUFLdUYsVUFDQXZGLEVBQUtDLE9BQU9pYixnQkFDUmxiLEVBQUtDLE9BQU91TyxRQUNRLFdBQXJCeE8sRUFBS0MsT0FBT3BGLE9BQ1htRixFQUFLQyxPQUFPN0ssUUFBUTlGLFNBQ3BCMFEsRUFBS0MsT0FBTzVLLFNBQ1oySyxFQUFLQyxPQUFPYSxhQUNiLGlFQUFpRStFLEtBQUs4USxVQUFVQyxXQUN4RixJQUFTbmUsRUFBSSxFQUFHQSxFQUFJdUgsRUFBS0MsT0FBT2tiLFFBQVE3ckIsT0FBUW1KLElBQUssQ0FDakQsSUFBSTJpQixFQUFhcGIsRUFBS0MsT0FBT2tiLFFBQVExaUIsR0FBR3VILElBQVMsQ0FBQyxFQUNsRCxJQUFLLElBQUk0RixLQUFPd1YsRUFDUixFQUFBekMsTUFBTWxSLFFBQVE3QixJQUFRLEVBQ3RCNUYsRUFBS0MsT0FBTzJGLElBQU8sSUFBQWdULFVBQVN3QyxFQUFXeFYsSUFDbENoVCxJQUFJOE4sR0FDSndRLE9BQU9sUixFQUFLQyxPQUFPMkYsU0FFUSxJQUFwQnNVLEVBQVd0VSxLQUN2QjVGLEVBQUtDLE9BQU8yRixHQUFPd1YsRUFBV3hWLEdBRTFDLENBQ0tzVSxFQUFXbUIsZ0JBQ1pyYixFQUFLQyxPQUFPb2IsY0FDUnRJLElBQWV4ZSxVQUFZLElBQU15TCxFQUFLQyxPQUFPb2IsZUFFckQ3VSxHQUFhLGdCQUNqQixDQWx6Q0k4VSxHQUNBckksSUFxcERKLFdBRUksR0FEQWpULEVBQUs0QyxNQUFRbVEsS0FDUi9TLEVBQUs0QyxNQUVOLFlBREE1QyxFQUFLQyxPQUFPb0gsYUFBYSxJQUFJOEwsTUFBTSxvQ0FHdkNuVCxFQUFLNEMsTUFBTXdWLE1BQVFwWSxFQUFLNEMsTUFBTXJHLEtBQzlCeUQsRUFBSzRDLE1BQU1yRyxLQUFPLE9BQ2xCeUQsRUFBSzRDLE1BQU1oTSxVQUFVQyxJQUFJLG1CQUN6Qm1KLEVBQUs4RCxPQUFTOUQsRUFBSzRDLE1BQ2Y1QyxFQUFLQyxPQUFPeEUsV0FDWnVFLEVBQUt2RSxVQUFXLElBQUE0TSxlQUFjckksRUFBSzRDLE1BQU0yWSxTQUFVdmIsRUFBS0MsT0FBT29iLGVBQy9EcmIsRUFBSzhELE9BQVM5RCxFQUFLdkUsU0FDbkJ1RSxFQUFLdkUsU0FBUytmLFlBQWN4YixFQUFLNEMsTUFBTTRZLFlBQ3ZDeGIsRUFBS3ZFLFNBQVN5UixTQUFXbE4sRUFBSzRDLE1BQU1zSyxTQUNwQ2xOLEVBQUt2RSxTQUFTZ2dCLFNBQVd6YixFQUFLNEMsTUFBTTZZLFNBQ3BDemIsRUFBS3ZFLFNBQVNtTixTQUFXNUksRUFBSzRDLE1BQU1nRyxTQUNwQzVJLEVBQUt2RSxTQUFTYyxLQUFPLE9BQ3JCeUQsRUFBSzRDLE1BQU00RixhQUFhLE9BQVEsV0FDM0J4SSxFQUFLQyxPQUFPeVMsUUFBVTFTLEVBQUs0QyxNQUFNZ0YsWUFDbEM1SCxFQUFLNEMsTUFBTWdGLFdBQVd1USxhQUFhblksRUFBS3ZFLFNBQVV1RSxFQUFLNEMsTUFBTThZLGNBRWhFMWIsRUFBS0MsT0FBT2dQLFlBQ2JqUCxFQUFLOEQsT0FBTzBFLGFBQWEsV0FBWSxZQUN6Q3VRLElBQ0osQ0E3cURJNEMsR0EybURKLFdBQ0kzYixFQUFLaEYsY0FBZ0IsR0FDckJnRixFQUFLNkcsSUFBTTdHLEVBQUs0RyxVQUFVNUcsRUFBS0MsT0FBTzRHLE1BQVEsSUFBSWxMLEtBQ2xELElBQUlpZ0IsRUFBZ0I1YixFQUFLQyxPQUFPNkIsY0FDRixVQUF4QjlCLEVBQUs0QyxNQUFNMlksVUFDZSxhQUF4QnZiLEVBQUs0QyxNQUFNMlksV0FDWHZiLEVBQUs0QyxNQUFNNFksYUFDWHhiLEVBQUs0QyxNQUFNNUcsUUFBVWdFLEVBQUs0QyxNQUFNNFksWUFFOUJ4YixFQUFLNEMsTUFBTTVHLE1BRFgsTUFFTjRmLEdBQ0EvQyxHQUFnQitDLEVBQWU1YixFQUFLQyxPQUFPdkUsWUFDL0NzRSxFQUFLOFgsYUFDRDlYLEVBQUtoRixjQUFjMUwsT0FBUyxFQUN0QjBRLEVBQUtoRixjQUFjLEdBQ25CZ0YsRUFBS0MsT0FBTzlFLFNBQ1Y2RSxFQUFLQyxPQUFPOUUsUUFBUTZHLFVBQVloQyxFQUFLNkcsSUFBSTdFLFVBQ3ZDaEMsRUFBS0MsT0FBTzlFLFFBQ1o2RSxFQUFLQyxPQUFPckUsU0FDVm9FLEVBQUtDLE9BQU9yRSxRQUFRb0csVUFBWWhDLEVBQUs2RyxJQUFJN0UsVUFDdkNoQyxFQUFLQyxPQUFPckUsUUFDWm9FLEVBQUs2RyxJQUN2QjdHLEVBQUsrRyxZQUFjL0csRUFBSzhYLGFBQWE1USxjQUNyQ2xILEVBQUtpSCxhQUFlakgsRUFBSzhYLGFBQWEzUSxXQUNsQ25ILEVBQUtoRixjQUFjMUwsT0FBUyxJQUM1QjBRLEVBQUt3QyxzQkFBd0J4QyxFQUFLaEYsY0FBYyxTQUN4Qm1HLElBQXhCbkIsRUFBS0MsT0FBT3FFLFVBQ1p0RSxFQUFLQyxPQUFPcUUsUUFBVXRFLEVBQUs0RyxVQUFVNUcsRUFBS0MsT0FBT3FFLFFBQVMsYUFDbENuRCxJQUF4Qm5CLEVBQUtDLE9BQU93RSxVQUNaekUsRUFBS0MsT0FBT3dFLFFBQVV6RSxFQUFLNEcsVUFBVTVHLEVBQUtDLE9BQU93RSxRQUFTLFFBQzlEekUsRUFBS3VFLGlCQUNDdkUsRUFBS0MsT0FBTzlFLFVBQ1Q2RSxFQUFLQyxPQUFPOUUsUUFBUTBKLFdBQWEsR0FDOUI3RSxFQUFLQyxPQUFPOUUsUUFBUTJKLGFBQWUsR0FDbkM5RSxFQUFLQyxPQUFPOUUsUUFBUTRKLGFBQWUsR0FDL0MvRSxFQUFLMEUsaUJBQ0MxRSxFQUFLQyxPQUFPckUsVUFDVG9FLEVBQUtDLE9BQU9yRSxRQUFRaUosV0FBYSxHQUM5QjdFLEVBQUtDLE9BQU9yRSxRQUFRa0osYUFBZSxHQUNuQzlFLEVBQUtDLE9BQU9yRSxRQUFRbUosYUFBZSxFQUNuRCxDQWxwREk4
3VyxHQWhCQTdiLEVBQUs4SyxNQUFRLENBQ1RDLGVBQWdCLFNBQVVwQixFQUFPbVMsR0FHN0IsWUFGYyxJQUFWblMsSUFBb0JBLEVBQVEzSixFQUFLaUgsbUJBQzFCLElBQVA2VSxJQUFpQkEsRUFBSzliLEVBQUsrRyxhQUNqQixJQUFWNEMsSUFBaUJtUyxFQUFLLEdBQU0sR0FBS0EsRUFBSyxLQUFRLEdBQU1BLEVBQUssS0FBUSxHQUMxRCxHQUNKOWIsRUFBS0ksS0FBSzRLLFlBQVlyQixFQUNqQyxHQVdDM0osRUFBS3VGLFVBZ1NkLFdBQ0ksSUFBSXdXLEVBQVc5YSxPQUFPeEUsU0FBU3dPLHlCQUcvQixHQUZBakwsRUFBS08sbUJBQW9CLElBQUE4SCxlQUFjLE1BQU8sc0JBQzlDckksRUFBS08sa0JBQWtCcUksVUFBWSxHQUM5QjVJLEVBQUtDLE9BQU9lLFdBQVksQ0FHekIsR0FGQSthLEVBQVN4USxhQStSYnZMLEVBQUtvTixVQUFXLElBQUEvRSxlQUFjLE1BQU8sb0JBQ3JDckksRUFBS3NOLGFBQWUsR0FDcEJ0TixFQUFLdU4sY0FBZ0IsR0FDckJ2TixFQUFLcU4sY0FBZSxJQUFBaEYsZUFBYyxPQUFRLHdCQUMxQ3JJLEVBQUtxTixhQUFhbkIsVUFBWWxNLEVBQUtDLE9BQU8rYixVQUMxQ2hjLEVBQUt3TixjQUFlLElBQUFuRixlQUFjLE9BQVEsd0JBQzFDckksRUFBS3dOLGFBQWF0QixVQUFZbE0sRUFBS0MsT0FBT2djLFVBQzFDOU8sSUFDQTVPLE9BQU82YixlQUFlcGEsRUFBTSxzQkFBdUIsQ0FDL0NuQyxJQUFLLFdBQWMsT0FBT21DLEVBQUtrYyxvQkFBc0IsRUFDckQxRCxJQUFLLFNBQVU3SSxHQUNQM1AsRUFBS2tjLHVCQUF5QnZNLEtBQzlCLElBQUE1RyxhQUFZL0ksRUFBS3FOLGFBQWMscUJBQXNCc0MsR0FDckQzUCxFQUFLa2MscUJBQXVCdk0sRUFFcEMsSUFFSnBSLE9BQU82YixlQUFlcGEsRUFBTSxzQkFBdUIsQ0FDL0NuQyxJQUFLLFdBQWMsT0FBT21DLEVBQUttYyxvQkFBc0IsRUFDckQzRCxJQUFLLFNBQVU3SSxHQUNQM1AsRUFBS21jLHVCQUF5QnhNLEtBQzlCLElBQUE1RyxhQUFZL0ksRUFBS3dOLGFBQWMscUJBQXNCbUMsR0FDckQzUCxFQUFLbWMscUJBQXVCeE0sRUFFcEMsSUFFSjNQLEVBQUsrUSxtQk
3FBcUIvUSxFQUFLc04sYUFBYSxHQUM1Q2EsS0FDT25PLEVBQUtvTixXQTFUUnBOLEVBQUtvYyxnQkFBaUIsSUFBQS9ULGVBQWMsTUFBTyw0QkFDdkNySSxFQUFLQyxPQUFPYSxZQUFhLENBQ3pCLElBQUlSLEVBaVpoQixXQUNJTixFQUFLTyxrQkFBa0IzSixVQUFVQyxJQUFJLFlBQ3JDLElBQUk4SyxHQUFjLElBQUEwRyxlQUFjLE1BQU8seUJBQ3ZDMUcsRUFBWTRKLGFBQVksSUFBQWxELGVBQWMsT0FBUSxvQkFBcUJySSxFQUFLSSxLQUFLaWMsbUJBQzdFLElBQUl2YixHQUFjLElBQUF1SCxlQUFjLE1BQU8sbUJBRXZDLE9BREExRyxFQUFZNEosWUFBWXpLLEdBQ2pCLENBQ0hhLFlBQWFBLEVBQ2JiLFlBQWFBLEVBRXJCLENBM1pxQndiLEdBQWMzYSxFQUFjckIsRUFBR3FCLFlBQWFiLEVBQWNSLEVBQUdRLFlBQ3RFZCxFQUFLb2MsZUFBZTdRLFlBQVk1SixHQUNoQzNCLEVBQUtjLFlBQWNBLEVBQ25CZCxFQUFLMkIsWUFBY0EsQ0FDdkIsQ0FDQTNCLEVBQUttUyxZQUFhLElBQUE5SixlQUFjLE1BQU8sd0JBQ3ZDckksRUFBS21TLFdBQVc1RyxZQUFZa0MsS0FDdkJ6TixFQUFLdUIsZ0JBQ052QixFQUFLdUIsZUFBZ0IsSUFBQThHLGVBQWMsTUFBTyxrQkFDMUNySSxFQUFLdUIsY0FBY3FILFVBQVksR0FFbkM4QyxJQUNBMUwsRUFBS21TLFdBQVc1RyxZQUFZdkwsRUFBS3VCLGVBQ2pDdkIsRUFBS29jLGVBQWU3USxZQUFZdkwsRUFBS21TLFlBQ3JDNEosRUFBU3hRLFlBQVl2TCxFQUFLb2MsZUFDOUIsQ0FDSXBjLEVBQUtDLE9BQU8rUSxZQUNaK0ssRUFBU3hRLFlBeVNqQixXQUNJdkwsRUFBS08sa0JBQWtCM0osVUFBVUMsSUFBSSxXQUNqQ21KLEVBQUtDLE9BQU9lLFlBQ1poQixFQUFLTyxrQkFBa0IzSixVQUFVQyxJQUFJLGNBQ3pDLElBQUlvTCxHQUFXLElBQUFDLGlCQUFnQmxDLEVBQUtDLFFBQ3BDRCxFQUFLbVAsZUFBZ0IsSUFBQTlHLGVBQWMsTUFBTyxrQkFDMUNySSxFQUFLbVAsY0FBY3ZHLFVBQVksRUFDL0IsSUFBSTJULEdBQVksSUFBQWxVLGVBQWMsT0FBUSwyQkFBNEIsS0FDOURtVSxHQUFZLElBQUEzUCxtQkFBa0IsaUJBQWtCLENBQ2hELGFBQWM3TSxFQUFLSSxLQUFLcWMsZ0JBRTVCemMsRUFBS3NELFlBQWNrWixFQUFVeFAscUJBQXFCLFNBQVMsR0FDM0QsSUFBSTBQLEdBQWMsSUFBQTdQLG1CQUFrQixtQkFBb0IsQ0FDcEQsYUFBYzdNLEVBQUtJLEtBQUt1YyxrQkFFNUIzYyxFQUFLd0QsY0FBZ0JrWixFQUFZMVAscUJBQXFCLFNBQVMsR0FDL0RoTixFQUFLc0QsWUFBWXNGLFNBQVc1SSxFQUFLd0QsY0FBY29GLFVBQVksRUFDM0Q1SSxFQUFLc0QsWUFBWXRILE9BQVEsSUFBQTJILEtBQUkzRCxFQUFLd0Msc0JBQzVCeEMsRUFBS3dDLHNCQUFzQnFDLFdBQzNCN0UsRUFBS0MsT0FBT3VGLFVBQ1J2RCxFQUFTRyxNQTVpQnZCLFNBQXVCOEIsR0FDbkIsT0FBUUEsRUFBTyxJQUNYLEtBQUssRUFDTCxLQUFLLEdBQ0QsT0FBTyxHQUNYLFFBQ0ksT0FBT0EsRUFBTyxHQUUxQixDQXFpQmMwWSxDQUFjM2EsRUFBU0csUUFDakNwQyxFQUFLd0QsY0FBY3hILE9BQVEsSUFBQTJILEtBQUkzRCxFQUFLd0Msc0JBQzlCeEMsRUFBS3dDLHNCQUFzQnNDLGFBQzNCN0MsRUFBU0ksU0FDZnJDLEVBQUtzRCxZQUFZa0YsYUFBYSxPQUFReEksRUFBS0MsT0FBTzRjLGNBQWMzZSxZQUNoRThCLEVBQUt3RCxjQUFjZ0YsYUFBYSxPQUFReEksRUFBS0MsT0FBTzZjLGdCQUFnQjVlLFlBQ3BFOEIsRUFBS3NELFlBQVlrRixhQUFhLE1BQU94SSxFQUFLQyxPQUFPdUYsVUFBWSxJQUFNLEtBQ25FeEYsRUFBS3NELFlBQVlrRixhQUFhLE1BQU94SSxFQUFLQyxPQUFPdUYsVUFBWSxLQUFPLE1BQ3BFeEYsRUFBS3NELFlBQVlrRixhQUFhLFlBQWEsS0FDM0N4SSxFQUFLd0QsY0FBY2dGLGFBQWEsTUFBTyxLQUN2Q3hJLEVBQUt3RCxjQUFjZ0YsYUFBYSxNQUFPLE1BQ3ZDeEksRUFBS3dELGNBQWNnRixhQUFhLFlBQWEsS0FDN0N4SSxFQUFLbVAsY0FBYzVELFlBQVlpUixHQUMvQnhjLEVBQUttUCxjQUFjNUQsWUFBWWdSLEdBQy9CdmMsRUFBS21QLGNBQWM1RCxZQUFZbVIsR0FDM0IxYyxFQUFLQyxPQUFPdUYsV0FDWnhGLEVBQUttUCxjQUFjdlksVUFBVUMsSUFBSSxZQUNyQyxHQUFJbUosRUFBS0MsT0FBT3dhLGNBQWUsQ0FDM0J6YSxFQUFLbVAsY0FBY3ZZLFVBQVVDLElBQUksY0FDakMsSUFBSWttQixHQUFjLElBQUFsUSxtQkFB
3a0Isb0JBQ3BDN00sRUFBS29FLGNBQWdCMlksRUFBWS9QLHFCQUFxQixTQUFTLEdBQy9EaE4sRUFBS29FLGNBQWNwSSxPQUFRLElBQUEySCxLQUFJM0QsRUFBS3dDLHNCQUM5QnhDLEVBQUt3QyxzQkFBc0J1QyxhQUMzQjlDLEVBQVNLLFNBQ2Z0QyxFQUFLb0UsY0FBY29FLGFBQWEsT0FBUXhJLEVBQUt3RCxjQUFjUixhQUFhLFNBQ3hFaEQsRUFBS29FLGNBQWNvRSxhQUFhLE1BQU8sS0FDdkN4SSxFQUFLb0UsY0FBY29FLGFBQWEsTUFBTyxNQUN2Q3hJLEVBQUtvRSxjQUFjb0UsYUFBYSxZQUFhLEtBQzdDeEksRUFBS21QLGNBQWM1RCxhQUFZLElBQUFsRCxlQUFjLE9BQVEsMkJBQTRCLE1BQ2pGckksRUFBS21QLGNBQWM1RCxZQUFZd1IsRUFDbkMsQ0FDSy9jLEVBQUtDLE9BQU91RixZQUNieEYsRUFBSzZDLE1BQU8sSUFBQXdGLGVBQWMsT0FBUSxrQkFBbUJySSxFQUFLSSxLQUFLeUMsTUFBSyxJQUFBRSxNQUFLL0MsRUFBS3dDLHNCQUN4RXhDLEVBQUtzRCxZQUFZdEgsTUFDakJnRSxFQUFLQyxPQUFPK2MsYUFBZSxNQUNqQ2hkLEVBQUs2QyxLQUFLb2EsTUFBUWpkLEVBQUtJLEtBQUs4YyxZQUM1QmxkLEVBQUs2QyxLQUFLK0YsVUFBWSxFQUN0QjVJLEVBQUttUCxjQUFjNUQsWUFBWXZMLEVBQUs2QyxPQUV4QyxPQUFPN0MsRUFBS21QLGFBQ2hCLENBdFc2QmdPLEtBRXpCLElBQUFwVSxhQUFZL0ksRUFBS08sa0JBQW1CLFlBQWtDLFVBQXJCUCxFQUFLQyxPQUFPcEYsT0FDN0QsSUFBQWtPLGFBQVkvSSxFQUFLTyxrQkFBbUIsV0FBbUMsSUFBeEJQLEVBQUtDLE9BQU83RyxVQUMzRCxJQUFBMlAsYUFBWS9JLEVBQUtPLGtCQUFtQixhQUFjUCxFQUFLQyxPQUFPYyxXQUFhLEdBQzNFZixFQUFLTyxrQkFBa0JnTCxZQUFZd1EsR0FDbkMsSUFBSXFCLE9BQXdDamMsSUFBekJuQixFQUFLQyxPQUFPb2QsZUFDT2xjLElBQWxDbkIsRUFBS0MsT0FBT29kLFNBQVNDLFNBQ3pCLElBQUl0ZCxFQUFLQyxPQUFPdU8sUUFBVXhPLEVBQUtDLE9BQU95UyxVQUNsQzFTLEVBQUtPLGtCQUFrQjNKLFVBQVVDLElBQUltSixFQUFLQyxPQUFPdU8sT0FBUyxTQUFXLFVBQ2pFeE8sRUFBS0MsT0FBT3VPLFVBQ1A0TyxHQUFnQnBkLEVBQUtGLFFBQVE4SCxXQUM5QjVILEVBQUtGLFFBQVE4SCxXQUFXdVEsYUFBYW5ZLEVBQUtPLGtCQUFtQlAsRUFBSzhELE9BQU80WCxrQkFDM0N2YSxJQUF6Qm5CLEVBQUtDLE9BQU9vZCxVQUNqQnJkLEVBQUtDLE9BQU9vZCxTQUFTOVIsWUFBWXZMLEVBQUtPLG9CQUUxQ1AsRUFBS0MsT0FBT3lTLFFBQVEsQ0FDcEIsSUFBSXVGLEdBQVUsSUFBQTVQLGVBQWMsTUFBTyxxQkFDL0JySSxFQUFLRixRQUFROEgsWUFDYjVILEVBQUtGLFFBQVE4SCxXQUFXdVEsYUFBYUYsRUFBU2pZLEVBQUtGLFNBQ3ZEbVksRUFBUTFNLFlBQVl2TCxFQUFLRixTQUNyQkUsRUFBS3ZFLFVBQ0x3YyxFQUFRMU0sWUFBWXZMLEVBQUt2RSxVQUM3QndjLEVBQVExTSxZQUFZdkwsRUFBS08sa0JBQzdCLENBRUNQLEVBQUtDLE9BQU95UyxRQUFXMVMsRUFBS0MsT0FBT3VPLGNBQ1ZyTixJQUF6Qm5CLEVBQUtDLE9BQU9vZCxTQUNQcmQsRUFBS0MsT0FBT29kLFNBQ1pwYyxPQUFPeEUsU0FBU3lOLE1BQU1xQixZQUFZdkwsRUFBS08sa0JBQ3JELENBdFZRZ2QsR0FzTFIsV0FDUXZkLEVBQUtDLE9BQU9tUSxNQUNaLENBQUMsT0FBUSxRQUFTLFNBQVUsU0FBU25LLFNBQVEsU0FBVXVYLEdBQ25EamUsTUFBTVAsVUFBVWlILFFBQVEvRyxLQUFLYyxFQUFLRixRQUFRc1MsaUJBQWlCLFNBQVdvTCxFQUFNLE1BQU0sU0FBVXJYLEdBQ3hGLE9BQU92RixFQUFLdUYsRUFBSSxRQUFTbkcsRUFBS3dkLEdBQ2xDLEdBQ0osSUFFSixHQUFJeGQsRUFBS3VGLFNBRUwsWUE2K0NSLFdBQ0ksSUFBSWtZLEVBQVl6ZCxFQUFLQyxPQUFPK1EsV0FDdEJoUixFQUFLQyxPQUFPZSxXQUNSLE9BQ0EsaUJBQ0osT0FDTmhCLEVBQUs2WCxhQUFjLElBQUF4UCxlQUFjLFFBQVNySSxFQUFLNEMsTUFBTXJPLFVBQVkscUJBQ2pFeUwsRUFBSzZYLFlBQVlqUCxTQUFXLEVBQzVCNUksRUFBSzZYLFlBQVl0YixLQUFPa2hCLEVBQ3hCemQsRUFBSzZYLFlBQVkzSyxTQUFXbE4sRUFBSzRDLE1BQU1zSyxTQUN2Q2xOLEVBQUs2WCxZQUFZNEQsU0FBV3piLEVBQUs0QyxNQUFNNlksU0FDdkN6YixFQUFLNlgsWUFBWTJELFlBQWN4YixFQUFLNEMsTUFBTTRZLFlBQzFDeGIsRUFBSzZaLGdCQUNhLG1CQUFkNEQsRUFDTSxnQkFDYyxTQUFkQSxFQUNJLFFBQ0EsUUFDVnpkLEVBQUtoRixjQUFjMUwsT0FBUyxJQUM1QjBRLEVBQUs2WCxZQUFZNkYsYUFBZTFkLEVBQUs2WCxZQUFZN2IsTUFBUWdFLEVBQUt5SSxXQUFXekksRUFBS2hGLGNBQWMsR0FBSWdGLEVBQUs2WixrQkFFckc3WixFQUFLQyxPQUFPOUUsVUFDWjZFLEVBQUs2WCxZQUFZbGIsSUFBTXFELEVBQUt5SSxXQUFXekksRUFBS0MsT0FBTzlFLFFBQVMsVUFDNUQ2RSxFQUFLQyxPQUFPckUsVUFDWm9FLEVBQUs2WCxZQUFZdGYsSUFBTXlILEVBQUt5SSxXQUFXekksRUFBS0MsT0FBT3JFLFFBQVMsVUFDNURvRSxFQUFLNEMsTUFBTUksYUFBYSxVQUN4QmhELEVBQUs2WCxZQUFZOWEsS0FBTzRnQixPQUFPM2QsRUFBSzRDLE1BQU1JLGFBQWEsVUFDM0RoRCxFQUFLNEMsTUFBTXJHLEtBQU8sY0FDSTRFLElBQWxCbkIsRUFBS3ZFLFdBQ0x1RSxFQUFLdkUsU0FBU2MsS0FBTyxVQUN6QixJQUNReUQsRUFBSzRDLE1BQU1nRixZQUNYNUgsRUFBSzRDLE1BQU1nRixXQUFXdVEsYUFBYW5ZLEVBQUs2WCxZQUFhN1gsRUFBSzRDLE1BQU04WSxZQUN4RSxDQUNBLE1BQU9wYixHQUFNLENBQ2JNLEVBQUtaLEVBQUs2WCxZQUFhLFVBQVUsU0FBVWxuQixHQUN2Q3FQLEVBQUtrUCxTQUFRLElBQUF2TSxnQkFBZWhTLEdBQUdxTCxPQUFPLEVBQU9nRSxFQUFLNlosaUJBQ2xEclQsR0FBYSxZQUNiQSxHQUFhLFVBQ2pCLEdBQ0osQ0F0aERRb1gsR0FHSixJQUFJQyxHQUFrQixJQUFBQyxVQUFTckwsRUFBVSxJQUN6Q3pTLEVBQUtpRSxrQkFBbUIsSUFBQTZaLFVBQVN2WCxFQUFlM0csR0FDNUNJLEVBQUt1QixnQkFBa0Isb0JBQW9Cc0UsS0FBSzhRLFVBQVVDLFlBQzFEaFcsRUFBS1osRU
3FBS3VCLGNBQWUsYUFBYSxTQUFVNVEsR0FDbkIsVUFBckJxUCxFQUFLQyxPQUFPcEYsTUFDWnlPLEdBQVksSUFBQTNHLGdCQUFlaFMsR0FDbkMsSUFDSmlRLEVBQUtaLEVBQUs4RCxPQUFRLFVBQVdxTSxRQUNFaFAsSUFBM0JuQixFQUFLTyxtQkFDTEssRUFBS1osRUFBS08sa0JBQW1CLFVBQVc0UCxHQUV2Q25RLEVBQUtDLE9BQU91TyxRQUFXeE8sRUFBS0MsT0FBT3lTLFFBQ3BDOVIsRUFBS0ssT0FBUSxTQUFVNGMsUUFDQzFjLElBQXhCRixPQUFPOGMsYUFDUG5kLEVBQUtLLE9BQU94RSxTQUFVLGFBQWM2UixHQUVwQzFOLEVBQUtLLE9BQU94RSxTQUFVLFlBQWE2UixHQUN2QzFOLEVBQUtLLE9BQU94RSxTQUFVLFFBQVM2UixFQUFlLENBQUUwUCxTQUFTLEtBQzFCLElBQTNCaGUsRUFBS0MsT0FBTytZLGFBQ1pwWSxFQUFLWixFQUFLOEQsT0FBUSxRQUFTOUQsRUFBS3lRLE1BQ2hDN1AsRUFBS1osRUFBSzhELE9BQVEsUUFBUzlELEVBQUt5USxZQUVUdFAsSUFBdkJuQixFQUFLdUIsZ0JBQ0xYLEVBQUtaLEVBQUtvTixTQUFVLFFBQVMwTSxJQUM3QmxaLEVBQUtaLEVBQUtvTixTQUFVLENBQUMsUUFBUyxhQUFjM0gsR0FDNUM3RSxFQUFLWixFQUFLdUIsY0FBZSxRQUFTcVAsSUFFdEMsUUFBMkJ6UCxJQUF2Qm5CLEVBQUttUCxvQkFDa0JoTyxJQUF2Qm5CLEVBQUt3RCxvQkFDZ0JyQyxJQUFyQm5CLEVBQUtzRCxZQUEyQixDQUNoQyxJQUFJMmEsRUFBVSxTQUFVdHRCLEdBQ3BCLE9BQU8sSUFBQWdTLGdCQUFlaFMsR0FBRzRuQixRQUM3QixFQUNBM1gsRUFBS1osRUFBS21QLGNBQWUsQ0FBQyxhQUFjdE4sR0FDeENqQixFQUFLWixFQUFLbVAsY0FBZSxPQUFRdE4sRUFBWSxDQUFFbWMsU0FBUyxJQUN4RHBkLEVBQUtaLEVBQUttUCxjQUFlLFFBQVMzSCxHQUNsQzVHLEVBQUssQ0FBQ1osRUFBS3NELFlBQWF0RCxFQUFLd0QsZUFBZ0IsQ0FBQyxRQUFTLFNBQVV5YSxRQUN0QzljLElBQXZCbkIsRUFBS29FLGVBQ0x4RCxFQUFLWixFQUFLb0UsY0FBZSxTQUFTLFdBQWMsT0FBT3BFLEVBQUtvRSxlQUFpQnBFLEVBQUtvRSxjQUFjbVUsUUFBVSxTQUM1RnBYLElBQWRuQixFQUFLNkMsTUFDTGpDLEVBQUtaLEVBQUs2QyxLQUFNLFNBQVMsU0FBVWxTLEdBQy9Ca1IsRUFBV2xSLEVBQ2YsR0FFUixDQUNJcVAsRUFBS0MsT0FBT2dQLFlBQ1pyTyxFQUFLWixFQUFLOEQsT0FBUSxPQUFRZ00sRUFFbEMsQ0FqUElvTyxJQUNJbGUsRUFBS2hGLGNBQWMxTCxRQUFVMFEsRUFBS0MsT0FBT2UsY0FDckNoQixFQUFLQyxPQUFPK1EsWUFDWjVMLEVBQWlCcEYsRUFBS0MsT0FBT2UsV0FBYWhCLEVBQUt3QywyQkFBd0JyQixHQUUzRTZDLElBQVksSUFFaEJuRCxJQUNBLElBQUlzZCxFQUFXLGlDQUFpQ3RZLEtBQUs4USxVQUFVQyxZQUMxRDVXLEVBQUt1RixVQUFZNFksR0FDbEJ4TCxJQUVKbk0sR0FBYSxVQUNqQixDQTYxREE0WCxHQUNPcGUsQ0FDWCxDQUNBLFNBQVNxZSxFQUFXQyxFQUFVcmUsR0FLMUIsSUFKQSxJQUFJc2UsRUFBUWhmLE1BQU1QLFVBQVVtRixNQUN2QmpGLEtBQUtvZixHQUNMM3VCLFFBQU8sU0FBVXloQixHQUFLLE9BQU9BLGFBQWFvTixXQUFhLElBQ3hEQyxFQUFZLEdBQ1BobUIsRUFBSSxFQUFHQSxFQUFJOGxCLEVBQU1qdkIsT0FBUW1KLElBQUssQ0FDbkMsSUFBSWltQixFQUFPSCxFQUFNOWxCLEdBQ2pCLElBQ0ksR0FBMEMsT0FBdENpbUIsRUFBSzFiLGFBQWEsZ0JBQ2xCLGNBQ29CN0IsSUFBcEJ1ZCxFQUFLTCxhQUNMSyxFQUFLTCxXQUFXdmlCLFVBQ2hCNGlCLEVBQUtMLGdCQUFhbGQsR0FFdEJ1ZCxFQUFLTCxXQUFheGUsRUFBa0I2ZSxFQUFNemUsR0FBVSxDQUFDLEdBQ3JEd2UsRUFBVTlvQixLQUFLK29CLEVBQUtMLFdBQ3hCLENBQ0EsTUFBTzF0QixHQUNIMkYsUUFBUXFvQixNQUFNaHVCLEVBQ2xCLENBQ0osQ0FDQSxPQUE0QixJQUFyQjh0QixFQUFVbnZCLE9BQWVtdkIsRUFBVSxHQUFLQSxDQUNuRCxDQUMyQixvQkFBaEJELGFBQ21CLG9CQUFuQkksZ0JBQ2Esb0JBQWJDLFdBQ1BELGVBQWU1ZixVQUFVa0IsVUFBWTJlLFNBQVM3ZixVQUFVa0IsVUFBWSxTQUFVRCxHQUMxRSxPQUFPb2UsRUFBV252QixLQUFNK1EsRUFDNUIsRUFDQXVlLFlBQVl4ZixVQUFVa0IsVUFBWSxTQUFVRCxHQUN4QyxPQUFPb2UsRUFBVyxDQUFDbnZCLE1BQU8rUSxFQUM5QixHQUVKLElBQUlDLEVBQVksU0FBVTRlLEVBQVU3ZSxHQUNoQyxNQUF3QixpQkFBYjZlLEVBQ0FULEVBQVdwZCxPQUFPeEUsU0FBUzJWLGlCQUFpQjBNLEdBQVc3ZSxHQUV6RDZlLGFBQW9CQyxLQUNsQlYsRUFBVyxDQUFDUyxHQUFXN2UsR0FHdkJvZSxFQUFXUyxFQUFVN2UsRUFFcEMsRUFDQUMsRUFBVUMsY0FBZ0IsQ0FBQyxFQUMzQkQsRUFBVWdULE1BQVEsQ0FDZDhMLEdBQUl2Z0IsRUFBUyxDQUFDLEVBQUcsV0FDakIyVSxRQUFTM1UsRUFBUyxDQUFDLEVBQUcsWUFFMUJ5QixFQUFVK2UsU0FBVyxTQUFVN2UsR0FDM0JGLEVBQVVnVCxNQUFNRSxRQUFVM1UsRUFBU0EsRUFBUyxDQUFDLEVBQUd5QixFQUFVZ1QsTUFBTUUsU0FBVWhULEVBQzlFLEVBQ0FGLEVBQVVnZixZQUFjLFNBQVVqZixHQUM5QkMsRUFBVUMsY0FBZ0IxQixFQUFTQSxFQUFTLENBQUMsRUFBR3lCLEVBQVVDLGVBQWdCRixFQUM5RSxFQUNBQyxFQUFVMEcsV0FBWSxJQUFBcU4sa0JBQWlCLENBQUMsR0FDeEMvVCxFQUFVdUksWUFBYSxJQUFBdUwscUJBQW9CLENBQUMsR0FDNUM5VCxFQUFVNkIsYUFBZSxFQUFBQSxhQUNILG9CQUFYL1IsYUFBK0MsSUFBZEEsT0FBTzJRLEtBQy9DM1EsT0FBTzJRLEdBQUdULFVBQVksU0FBVUQsR0FDNUIsT0FBT29lLEVBQVdudkIsS0FBTStRLEVBQzVCLEdBRUp0RSxLQUFLcUQsVUFBVW1nQixRQUFVLFNBQVUxZCxHQUMvQixPQUFPLElBQUk5RixLQUFLek0sS0FBS2dZLGNBQWVoWSxLQUFLaVksV0FBWWpZLEtBQUtvWixXQUE2QixpQkFBVDdHLEVBQW9Cdk4sU0FBU3VOLEVBQU0sSUFBTUEsR0FDM0gsRUFDc0Isb0JBQVhSLFNBQ1BBLE9BQU9mLFVBQVlBLEdBRXZCLGtJQzcvRE8sSUFBSWtmLEVBQVUsQ0FDakJ4UixTQUFVLENBQ05DLFVBQVcsQ0FBQyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxPQUN0RDJGLFNBQVUsQ0FDTixTQUNBLFNBQ0EsVUFDQSxZQUNBLFdBQ0EsU0FDQSxhQUdSRSxPQUFRLENBQ0o3RixVQUFXLENBQ1AsTUFDQSxNQUNBLE1BQ0EsTUFDQSxNQUNBLE1BQ0EsTUFDQSxNQUNBLE1BQ0EsTUFDQSxNQUNBLE9BRUoyRixTQUFVLENBQ04sVUFDQSxXQUNBLFFBQ0EsUUFDQSxNQUNBLE9BQ0EsT0FDQSxTQUNBLFlBQ0EsVUFDQSxXQUNBLGFBR1J4
3SSxZQUFhLENBQUMsR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLElBQzFESixlQUFnQixFQUNoQnlVLFFBQVMsU0FBVUMsR0FDZixJQUFJMWdCLEVBQUkwZ0IsRUFBTSxJQUNkLEdBQUkxZ0IsRUFBSSxHQUFLQSxFQUFJLEdBQ2IsTUFBTyxLQUNYLE9BQVFBLEVBQUksSUFDUixLQUFLLEVBQ0QsTUFBTyxLQUNYLEtBQUssRUFDRCxNQUFPLEtBQ1gsS0FBSyxFQUNELE1BQU8sS0FDWCxRQUNJLE1BQU8sS0FFbkIsRUFDQXdhLGVBQWdCLE9BQ2hCaUQsaUJBQWtCLEtBQ2xCa0QsWUFBYSxzQkFDYnJDLFlBQWEsa0JBQ2JyYSxLQUFNLENBQUMsS0FBTSxNQUNib0ssY0FBZSxPQUNmUCxlQUFnQixRQUNoQitQLGNBQWUsT0FDZkUsZ0JBQWlCLFNBQ2pCblgsV0FBVyxHQUVmLGtJQ3ZFTyxJQUFJbVQsRUFBUSxDQUNmLFdBQ0EsVUFDQSxjQUNBLFlBQ0EsWUFDQSxnQkFDQSxTQUNBLGdCQUNBLFVBQ0EsZ0JBQ0EsZUFDQSx5QkFFTzFXLEVBQVcsQ0FDbEJxWSxTQUFVLEdBQ1ZyTCxZQUFZLEVBQ1pvSyxxQkFBcUIsRUFDckI3ZCxVQUFXLFNBQ1hDLFVBQVUsRUFDVjRmLGNBQWUscUJBQ2ZqaUIsUUFBMkIsaUJBQVg2SCxTQUNvQyxJQUFoREEsT0FBTzBWLFVBQVVDLFVBQVVuUCxRQUFRLFFBQ3ZDaUIsZUFBZ0IsU0FDaEI4VyxxQkFBcUIsRUFDckJ4RyxZQUFZLEVBQ1ozQixlQUFlLEVBQ2Y4QixZQUFhLEtBQ2J6ZCxXQUFZLFFBQ1pzaEIsWUFBYSxHQUNieUMsY0FBZSxFQUNmQyxlQUFnQixFQUNoQnRxQixRQUFTLEdBQ1Q4bEIsZUFBZSxFQUNmVCxlQUFlLEVBQ2Z6SixZQUFZLEVBQ1ozSixhQUFjLFNBQVU2TyxHQUNwQixNQUEwQixvQkFBWjVmLFNBQTJCQSxRQUFRcXBCLEtBQUt6SixFQUMxRCxFQUNBaE4sUUFBUyxTQUFVMFcsR0FDZixJQUFJdGEsRUFBTyxJQUFJM0osS0FBS2lrQixFQUFVNWQsV0FDOUJzRCxFQUFLbkQsU0FBUyxFQUFHLEVBQUcsRUFBRyxHQUN2Qm1ELEVBQUs0SixRQUFRNUosRUFBS2dELFVBQVksR0FBTWhELEVBQUtxRixTQUFXLEdBQUssR0FDekQsSUFBSWtWLEVBQVEsSUFBSWxrQixLQUFLMkosRUFBSzRCLGNBQWUsRUFBRyxHQUM1QyxPQUFRLEVBQ0ovWCxLQUFLMndCLFFBQVF4YSxFQUFLdEQsVUFBWTZkLEVBQU03ZCxXQUFhLE1BQzdDLEdBQ0U2ZCxFQUFNbFYsU0FBVyxHQUFLLEdBQ3hCLEVBQ1osRUFDQWtTLGNBQWUsRUFDZjlOLHFCQUFzQixHQUN0QlAsUUFBUSxFQUNSbFQsT0FBUSxVQUNSd2hCLGdCQUFpQixFQUNqQmppQixLQUFNLFNBQ05rUixrQkFBbUIsV0FDbkJrUSxVQUFXLHlPQUNYamIsWUFBWSxFQUNaNkYsSUFBSyxJQUFJbEwsS0FDVG9rQixTQUFVLEdBQ1ZDLFFBQVMsR0FDVEMsWUFBYSxHQUNiQyxVQUFXLEdBQ1gvUCxVQUFXLEdBQ1hnUSxjQUFlLEdBQ2ZDLE9BQVEsR0FDUkMsY0FBZSxHQUNmQyxRQUFTLEdBQ1RDLGNBQWUsR0FDZkMsYUFBYyxHQUNkQyxzQkFBdUIsR0FDdkJ0RixRQUFTLEdBQ1RoSCxTQUFVLE9BQ1ZDLHFCQUFpQmpULEVBQ2pCNmEsVUFBVyx1T0FDWDVQLHVCQUF1QixFQUN2QnJMLFdBQVksRUFDWjJSLFFBQVEsRUFDUmxOLFdBQVcsRUFDWDFFLGFBQWEsRUFDYnNQLE1BQU0scWRDOUVDNEQsRUFBc0IsU0FBVTFULEdBQ3ZDLElBQUlvZ0IsRUFBS3BnQixFQUFHTCxPQUFRQSxPQUFnQixJQUFQeWdCLEVBQWdCLEVBQUF6ZSxTQUFXeWUsRUFBSUMsRUFBS3JnQixFQUFHRixLQUFNQSxPQUFjLElBQVB1Z0IsRUFBZ0IsRUFBQXZCLFFBQVV1QixFQUFJQyxFQUFLdGdCLEVBQUdpRixTQUFVQSxPQUFrQixJQUFQcWIsR0FBd0JBLEVBQ3BLLE9BQU8sU0FBVXZiLEVBQVN3YixFQUFNQyxHQUM1QixJQUFJeGxCLEVBQVN3bEIsR0FBa0IxZ0IsRUFDL0IsWUFBMEJlLElBQXRCbEIsRUFBT3dJLFlBQTZCbEQsRUFHakNzYixFQUNGdGpCLE1BQU0sSUFDTjNLLEtBQUksU0FBVWtMLEVBQUdyRixFQUFHOGdCLEdBQ3JCLE9BQU8sRUFBQVksUUFBUXJjLElBQXFCLE9BQWZ5YixFQUFJOWdCLEVBQUksR0FDdkIsRUFBQTBoQixRQUFRcmMsR0FBR3VILEVBQVMvSixFQUFRMkUsR0FDdEIsT0FBTm5DLEVBQ0lBLEVBQ0EsRUFDZCxJQUNLaVEsS0FBSyxJQVhDOU4sRUFBT3dJLFdBQVdwRCxFQUFTd2IsRUFBTXZsQixFQVloRCxDQUNKLEVBQ1cyWSxFQUFtQixTQUFVM1QsR0FDcEMsSUFBSW9nQixFQUFLcGdCLEVBQUdMLE9BQVFBLE9BQWdCLElBQVB5Z0IsRUFBZ0IsRUFBQXplLFNBQVd5ZSxFQUFJQyxFQUFLcmdCLEVBQUdGLEtBQU1BLE9BQWMsSUFBUHVnQixFQUFnQixFQUFBdkIsUUFBVXVCLEVBQzNHLE9BQU8sU0FBVXJiLEVBQU15YixFQUFhdFIsRUFBVXVSLEdBQzFDLEdBQWEsSUFBVDFiLEdBQWVBLEVBQW5CLENBRUEsSUFDSTJiLEVBREEzbEIsRUFBUzBsQixHQUFnQjVnQixFQUV6QjhnQixFQUFXNWIsRUFDZixHQUFJQSxhQUFnQjNKLEtBQ2hCc2xCLEVBQWEsSUFBSXRsQixLQUFLMkosRUFBS3RELGdCQUMxQixHQUFvQixpQkFBVHNELFFBQ0tuRSxJQUFqQm1FLEVBQUs2YixRQUNMRixFQUFhLElBQUl0bEIsS0FBSzJKLFFBQ3JCLEdBQW9CLGlCQUFUQSxFQUFtQixDQUMvQixJQUFJdEksRUFBUytqQixJQUFnQjlnQixHQUFVLEVBQUFnQyxVQUFVdkcsV0FDN0MwbEIsRUFBVXpELE9BQU9yWSxHQUFNK2IsT0FDM0IsR0FBZ0IsVUFBWkQsRUFDQUgsRUFBYSxJQUFJdGxCLEtBQ2pCOFQsR0FBVyxPQUVWLEdBQUl4UCxHQUFVQSxFQUFPMkcsVUFDdEJxYSxFQUFhaGhCLEVBQU8yRyxVQUFVdEIsRUFBTXRJLFFBRW5DLEdBQUksS0FBSzZJLEtBQUt1YixJQUNmLE9BQU92YixLQUFLdWIsR0FDWkgsRUFBYSxJQUFJdGxCLEtBQUsySixPQUVyQixDQUVELElBREEsSUFBSWdjLE9BQVUsRUFBUUMsRUFBTSxHQUNuQjlvQixFQUFJLEVBQUcrb0IsRUFBYSxFQUFHQyxFQUFXLEdBQUlocEIsRUFBSXVFLEVBQU8xTixPQUFRbUosSUFBSyxDQUNuRSxJQUFJaXBCLEVBQVExa0IsRUFBT3ZFLEdBQ2ZrcEIsRUFBd0IsT0FBVkQsRUFDZEUsRUFBNEIsT0FBbEI1a0IsRUFBT3ZFLEVBQUksSUFBZWtwQixFQUN4QyxHQUFJLEVBQUF0TyxXQUFXcU8sS0FBV0UsRUFBUyxDQUMvQkgsR0FBWSxFQUFBcE8sV0FBV3FPLEdBQ3ZCLElBQUlHLEVBQVEsSUFBSUMsT0FBT0wsR0FBVU0sS0FBS3pjLEdBQ2xDdWMsSUFBVVAsR0FBVSxJQUNwQkMsRU
3FBYyxNQUFWRyxFQUFnQixPQUFTLFdBQVcsQ0FDcEMvZ0IsR0FBSSxFQUFBcWhCLFVBQVVOLEdBQ2Q1RyxJQUFLK0csSUFBUUwsSUFHekIsTUFDVUcsSUFDTkYsR0FBWSxJQUNwQixDQUNBUixFQUNLaGhCLEdBQVdBLEVBQU9lLFdBRWIsSUFBSXJGLE1BQUssSUFBSUEsTUFBT3dHLFNBQVMsRUFBRyxFQUFHLEVBQUcsSUFEdEMsSUFBSXhHLE1BQUssSUFBSUEsTUFBT3VMLGNBQWUsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBRTVEcWEsRUFBSXRiLFNBQVEsU0FBVTNGLEdBQ2xCLElBQUlLLEVBQUtMLEVBQUdLLEdBQUltYSxFQUFNeGEsRUFBR3dhLElBQ3pCLE9BQVFtRyxFQUFhdGdCLEVBQUdzZ0IsRUFBWW5HLEVBQUt4ZixJQUFXMmxCLENBQ3hELElBQ0FBLEVBQWFLLEVBQVVMLE9BQWE5ZixDQUN4QyxDQUNKLENBQ0EsR0FBTThmLGFBQXNCdGxCLE9BQVNVLE1BQU00a0IsRUFBV2pmLFdBTXRELE9BRmlCLElBQWJ5TixHQUNBd1IsRUFBVzllLFNBQVMsRUFBRyxFQUFHLEVBQUcsR0FDMUI4ZSxFQUxIaGhCLEVBQU9vSCxhQUFhLElBQUk4TCxNQUFNLDBCQUE0QitOLEdBdEQxQyxDQTREeEIsQ0FDSixFQUNPLFNBQVNuZixFQUFha2dCLEVBQU9DLEVBQU96UyxHQUV2QyxZQURpQixJQUFiQSxJQUF1QkEsR0FBVyxJQUNyQixJQUFiQSxFQUNRLElBQUk5VCxLQUFLc21CLEVBQU1qZ0IsV0FBV0csU0FBUyxFQUFHLEVBQUcsRUFBRyxHQUNoRCxJQUFJeEcsS0FBS3VtQixFQUFNbGdCLFdBQVdHLFNBQVMsRUFBRyxFQUFHLEVBQUcsR0FFN0M4ZixFQUFNamdCLFVBQVlrZ0IsRUFBTWxnQixTQUNuQyxDQUNPLFNBQVNtZ0IsRUFBYUYsRUFBT0MsR0FDaEMsT0FBUSxNQUFRRCxFQUFNcGQsV0FBYXFkLEVBQU1yZCxZQUNyQyxJQUFNb2QsRUFBTW5kLGFBQWVvZCxFQUFNcGQsY0FDakNtZCxFQUFNbGQsYUFDTm1kLEVBQU1uZCxZQUNkLENBQ08sSUFBSXlOLEVBQVksU0FBVTRQLEVBQUlDLEVBQUtDLEdBQ3RDLE9BQU9GLEVBQUtqekIsS0FBS3dOLElBQUkwbEIsRUFBS0MsSUFBUUYsRUFBS2p6QixLQUFLb0osSUFBSThwQixFQUFLQyxFQUN6RCxFQUNXMWQsRUFBZ0MsU0FBVXhDLEVBQU9DLEVBQVNDLEdBQ2pFLE9BQWUsS0FBUkYsRUFBeUIsR0FBVkMsRUFBZUMsQ0FDekMsRUFDVzZDLEVBQWUsU0FBVW9kLEdBQ2hDLElBQUluZ0IsRUFBUWpULEtBQUtpTixNQUFNbW1CLEVBQXVCLE1BQU9sZ0IsR0FBV2tnQixFQUErQixLQUFSbmdCLEdBQWdCLEdBQ3ZHLE1BQU8sQ0FBQ0EsRUFBT0MsRUFBU2tnQixFQUErQixLQUFSbmdCLEVBQXlCLEdBQVZDLEVBQ2xFLEVBQ1c0UCxFQUFXLENBQ2xCQyxJQUFLLE9BRUYsU0FBU2hRLEVBQWdCakMsR0FDNUIsSUFBSW1DLEVBQVFuQyxFQUFPK2MsWUFDZjNhLEVBQVVwQyxFQUFPd2YsY0FDakJuZCxFQUFVckMsRUFBT3lmLGVBQ3JCLFFBQXVCdmUsSUFBbkJsQixFQUFPOUUsUUFBdUIsQ0FDOUIsSUFBSXFuQixFQUFVdmlCLEVBQU85RSxRQUFRMEosV0FDekI0ZCxFQUFheGlCLEVBQU85RSxRQUFRMkosYUFDNUI0ZCxFQUFhemlCLEVBQU85RSxRQUFRNEosYUFDNUIzQyxFQUFRb2dCLElBQ1JwZ0IsRU
3FBUW9nQixHQUVScGdCLElBQVVvZ0IsR0FBV25nQixFQUFVb2dCLElBQy9CcGdCLEVBQVVvZ0IsR0FFVnJnQixJQUFVb2dCLEdBQVduZ0IsSUFBWW9nQixHQUFjbmdCLEVBQVVvZ0IsSUFDekRwZ0IsRUFBVXJDLEVBQU85RSxRQUFRNEosYUFDakMsQ0FDQSxRQUF1QjVELElBQW5CbEIsRUFBT3JFLFFBQXVCLENBQzlCLElBQUkrbUIsRUFBUTFpQixFQUFPckUsUUFBUWlKLFdBQ3ZCK2QsRUFBYTNpQixFQUFPckUsUUFBUWtKLGNBQ2hDMUMsRUFBUWpULEtBQUt3TixJQUFJeUYsRUFBT3VnQixNQUNWQSxJQUNWdGdCLEVBQVVsVCxLQUFLd04sSUFBSWltQixFQUFZdmdCLElBQy9CRCxJQUFVdWdCLEdBQVN0Z0IsSUFBWXVnQixJQUMvQnRnQixFQUFVckMsRUFBT3JFLFFBQVFtSixhQUNqQyxDQUNBLE1BQU8sQ0FBRTNDLE1BQU9BLEVBQU9DLFFBQVNBLEVBQVNDLFFBQVNBLEVBQ3RELDJFQzlJTyxTQUFTeUcsRUFBWXNGLEVBQU05WixFQUFXb2IsR0FDekMsSUFBYSxJQUFUQSxFQUNBLE9BQU90QixFQUFLelgsVUFBVUMsSUFBSXRDLEdBQzlCOFosRUFBS3pYLFVBQVViLE9BQU94QixFQUMxQixDQUNPLFNBQVM4VCxFQUFjd2EsRUFBS3R1QixFQUFXdXVCLEdBQzFDLElBQUlueUIsRUFBSXNRLE9BQU94RSxTQUFTNEwsY0FBY3dhLEdBTXRDLE9BTEF0dUIsRUFBWUEsR0FBYSxHQUN6QnV1QixFQUFVQSxHQUFXLEdBQ3JCbnlCLEVBQUU0RCxVQUFZQSxPQUNFNE0sSUFBWjJoQixJQUNBbnlCLEVBQUVtUyxZQUFjZ2dCLEdBQ2JueUIsQ0FDWCxDQUNPLFNBQVNnYixFQUFVK1MsR0FDdEIsS0FBT0EsRUFBSzdXLFlBQ1I2VyxFQUFLMUcsWUFBWTBHLEVBQUs3VyxXQUM5QixDQUNPLFNBQVNpUCxFQUFXNEgsRUFBTXFFLEdBQzdCLE9BQUlBLEVBQVVyRSxHQUNIQSxFQUNGQSxFQUFLOVcsV0FDSGtQLEVBQVc0SCxFQUFLOVcsV0FBWW1iLFFBRGxDLENBR1QsQ0FDTyxTQUFTbFcsRUFBa0JtVyxFQUFnQkMsR0FDOUMsSUFBSWhMLEVBQVU1UCxFQUFjLE1BQU8sbUJBQW9CNmEsRUFBVzdhLEVBQWMsUUFBUyxZQUFjMmEsR0FBaUJHLEVBQVU5YSxFQUFjLE9BQVEsV0FBWSthLEVBQVkvYSxFQUFjLE9BQVEsYUFRdE0sSUFQaUQsSUFBN0NzTyxVQUFVQyxVQUFVblAsUUFBUSxZQUM1QnliLEVBQVMzbUIsS0FBTyxVQUdoQjJtQixFQUFTM21CLEtBQU8sT0FDaEIybUIsRUFBU0csUUFBVSxhQUVWbGlCLElBQVQ4aEIsRUFDQSxJQUFLLElBQUlyZCxLQUFPcWQsRUFDWkMsRUFBUzFhLGFBQWE1QyxFQUFLcWQsRUFBS3JkLElBSXhDLE9BSEFxUyxFQUFRMU0sWUFBWTJYLEdBQ3BCakwsRUFBUTFNLFlBQVk0WCxHQUNwQmxMLEVBQVExTSxZQUFZNlgsR0FDYm5MLENBQ1gsQ0FDTyxTQUFTdFYsRUFBZStDLEdBQzNCLElBQ0ksTUFBa0MsbUJBQXZCQSxFQUFNNGQsYUFDRjVkLEVBQU00ZCxlQUNMLEdBRVQ1ZCxFQUFNM1UsTUFDakIsQ0FDQSxNQUFPNHRCLEdBQ0gsT0FBT2paLEVBQU0zVSxNQUNqQixDQUNKLGlXQ3BESXd5QixFQUFZLFdBQWdDLEVBQ3JDcFgsRUFBYSxTQUFVcVgsRUFBYTNWLEVBQVd2UyxHQUFVLE9BQU9BLEVBQU9vWSxPQUFPN0YsRUFBWSxZQUFjLFlBQVkyVixFQUFjLEVBQ2xJeEIsRUFBWSxDQUNuQjFPLEVBQUdpUSxFQUNINVAsRUFBRyxTQUFVdE8sRUFBU29lLEVBQVdub0IsR0FDN0IrSixFQUFReUcsU0FBU3hRLEVBQU9vWSxPQUFPRixTQUFTL0wsUUFBUWdjLEdBQ3BELEVBQ0FDLEVBQUcsU0FBVXJlLEVBQVNuQixHQUNsQm1CLEVBQVFsRCxVQUFVa0QsRUFBUVIsWUFBYyxHQUFLLEdBQUssR0FBS2pSLFdBQVdzUSxHQUN0RSxFQUNBeWYsRUFBRyxTQUFVdGUsRUFBU25CLEdBQ2xCbUIsRUFBUWxELFNBQVN2TyxXQUFXc1EsR0FDaEMsRUFDQTBmLEVBQUcsU0FBVXZlLEVBQVMwUixHQUNsQjFSLEVBQVE2SixRQUFRdGIsV0FBV21qQixHQUMvQixFQUNBbkQsRUFBRyxTQUFVdk8sRUFBU3hDLEVBQU12SCxHQUN4QitKLEVBQVFsRCxTQUFVa0QsRUFBUVIsV0FBYSxHQUNuQyxJQUFLLElBQUE5QixLQUFJLElBQUkrZSxPQUFPeG1CLEVBQU91SCxLQUFLLEdBQUksS0FBS2dELEtBQUtoRCxJQUN0RCxFQUNBNFEsRUFBRyxTQUFVcE8sRUFBU3dlLEVBQVl2b0IsR0FDOUIrSixFQUFReUcsU0FBU3hRLEVBQU9vWSxPQUFPN0YsVUFBVXBHLFFBQVFvYyxHQUNyRCxFQUNBQyxFQUFHLFNBQVV6ZSxFQUFTL0MsR0FDbEIrQyxFQUFRMGUsV0FBV253QixXQUFXME8sR0FDbEMsRUFDQTBoQixFQUFHLFNBQVUzTCxFQUFHNEwsR0FBZSxPQUFPLElBQUl0b0IsS0FBK0IsSUFBMUIvSCxXQUFXcXdCLEdBQXNCLEVBQ2hGQyxFQUFHLFNBQVU3ZSxFQUFTOGUsRUFBUzdvQixHQUMzQixJQUFJOG9CLEVBQWFsd0IsU0FBU2l3QixHQUN0QjdlLEVBQU8sSUFBSTNKLEtBQUswSixFQUFRNkIsY0FBZSxFQUFHLEVBQXVCLEdBQWxCa2QsRUFBYSxHQUFRLEVBQUcsRUFBRyxFQUFHLEdBRWpGLE9BREE5ZSxFQUFLNEosUUFBUTVKLEVBQUtnRCxVQUFZaEQsRUFBS3FGLFNBQVdyUCxFQUFPc1AsZ0JBQzlDdEYsQ0FDWCxFQUNBK2UsRUFBRyxTQUFVaGYsRUFBU00sR0FDbEJOLEVBQVFpZixZQUFZMXdCLFdBQVcrUixHQUNuQyxFQUNBNGUsRUFBRyxTQUFVbE0sRUFBR21NLEdBQVcsT0FBTyxJQUFJN29CLEtBQUs2b0IsRUFBVSxFQUNyRDNZLEVBQUcsU0FBVXhHLEVBQVMwUixHQUNsQjFSLEVBQVE2SixRQUFRdGIsV0FBV21qQixHQUMvQixFQUNBME4sRUFBRyxTQUFVcGYsRUFBU25CLEdBQ2xCbUIsRUFBUWxELFVBQVVrRCxFQUFRUixZQUFjLEdBQUssR0FBSyxHQUFLalIsV0FBV3NRLEdBQ3RFLEVBQ0F6TCxFQUFHLFNBQVU0TSxFQUFTaEQsR0FDbEJnRCxFQUFRcWYsV0FBVzl3QixXQUFXeU8sR0FDbEMsRUFDQTNDLEVBQUcsU0FBVTJGLEVBQVMwUixHQUNsQjFSLEVBQVE2SixRQUFRdGIsV0FBV21qQixHQUMvQixFQUNBeEQsRUFBR2dRLEVBQ0g3WixFQUFHLFNBQVVyRSxFQUFTc0UsR0FDbEJ0RSxFQUFReUcsU0FBU2xZLFdBQVcrVixHQUFTLEVBQ3pDLEVBQ0E5SyxFQUFHLFNBQVV3RyxFQUFTc0UsR0FDbEJ0RSxFQUFReUcsU0FBU2xZLFdBQVcrVixHQUFTLEVBQ3pDLEVBQ0EvSyxFQUFHLFNBQVV5RyxFQUFTL0MsR0FDbEIrQyxFQUFRMGUsV0FBV253QixXQUFXME8sR0FDbEMsRUFDQXFpQixFQUFHLFNBQVV0TSxFQU
3FHdU0sR0FDWixPQUFPLElBQUlqcEIsS0FBSy9ILFdBQVdneEIsR0FDL0IsRUFDQUMsRUFBR3RCLEVBQ0h1QixFQUFHLFNBQVV6ZixFQUFTTSxHQUNsQk4sRUFBUWlmLFlBQVksSUFBTzF3QixXQUFXK1IsR0FDMUMsR0FFTzBOLEVBQWEsQ0FDcEJDLEVBQUcsR0FDSEssRUFBRyxHQUNIK1AsRUFBRyxlQUNIQyxFQUFHLGVBQ0hDLEVBQUcsbUJBQ0hoUSxFQUFHLEdBQ0hILEVBQUcsR0FDSHFRLEVBQUcsZUFDSEUsRUFBRyxPQUNIRSxFQUFHLGVBQ0hHLEVBQUcsV0FDSEUsRUFBRyxPQUNIMVksRUFBRyxlQUNINFksRUFBRyxlQUNIaHNCLEVBQUcsZUFDSGlILEVBQUcsZUFDSDZULEVBQUcsR0FDSDdKLEVBQUcsZUFDSDdLLEVBQUcsZUFDSEQsRUFBRyxlQUNIK2xCLEVBQUcsT0FDSEUsRUFBRyxlQUNIQyxFQUFHLFlBRUkzSyxFQUFVLENBQ2pCb0ssRUFBRyxTQUFVamYsR0FBUSxPQUFPQSxFQUFLeWYsYUFBZSxFQUNoRHpSLEVBQUcsU0FBVWhPLEVBQU1oSyxFQUFRMEssR0FDdkIsT0FBTzFLLEVBQU9zUyxTQUFTQyxVQUFVc00sRUFBUTBLLEVBQUV2ZixFQUFNaEssRUFBUTBLLEdBQzdELEVBQ0EyTixFQUFHLFNBQVVyTyxFQUFNaEssRUFBUTBLLEdBQ3ZCLE9BQU9tRyxFQUFXZ08sRUFBUXRiLEVBQUV5RyxFQUFNaEssRUFBUTBLLEdBQVcsR0FBRyxFQUFPMUssRUFDbkUsRUFDQW9vQixFQUFHLFNBQVVwZSxFQUFNaEssRUFBUTBLLEdBQ3ZCLE9BQU8sSUFBQXJDLEtBQUl3VyxFQUFRc0ssRUFBRW5mLEVBQU1oSyxFQUFRMEssR0FDdkMsRUFDQTJkLEVBQUcsU0FBVXJlLEdBQVEsT0FBTyxJQUFBM0IsS0FBSTJCLEVBQUtULFdBQWEsRUFDbEQrZSxFQUFHLFNBQVV0ZSxFQUFNaEssR0FDZixZQUEwQjZGLElBQW5CN0YsRUFBTytqQixRQUNSL1osRUFBS2dELFVBQVloTixFQUFPK2pCLFFBQVEvWixFQUFLZ0QsV0FDckNoRCxFQUFLZ0QsU0FDZixFQUNBc0wsRUFBRyxTQUFVdE8sRUFBTWhLLEdBQVUsT0FBT0EsRUFBT3VILE1BQUssSUFBQUUsS0FBSXVDLEVBQUtULFdBQWEsSUFBTSxFQUM1RTRPLEVBQUcsU0FBVW5PLEVBQU1oSyxHQUNmLE9BQU82USxFQUFXN0csRUFBSzZCLFlBQVksRUFBTTdMLEVBQzdDLEVBQ0F3b0IsRUFBRyxTQUFVeGUsR0FBUSxPQUFPLElBQUEzQixLQUFJMkIsRUFBS1AsYUFBZSxFQUNwRGlmLEVBQUcsU0FBVTFlLEdBQVEsT0FBT0EsRUFBS3RELFVBQVksR0FBTSxFQUNuRGtpQixFQUFHLFNBQVU1ZSxFQUFNK1MsRUFBR3JTLEdBQ2xCLE9BQU9BLEVBQVFrRCxRQUFRNUQsRUFDM0IsRUFDQStlLEVBQUcsU0FBVS9lLEdBQVEsT0FBTyxJQUFBM0IsS0FBSTJCLEVBQUs0QixjQUFlLEVBQUksRUFDeEQyRSxFQUFHLFNBQVV2RyxHQUFRLE9BQU8sSUFBQTNCLEtBQUkyQixFQUFLZ0QsVUFBWSxFQUNqRG1jLEVBQUcsU0FBVW5mLEdBQVEsT0FBUUEsRUFBS1QsV0FBYSxHQUFLUyxFQUFLVCxXQUFhLEdBQUssRUFBSyxFQUNoRnBNLEVBQUcsU0FBVTZNLEdBQVEsT0FBTyxJQUFBM0IsS0FBSTJCLEVBQUtSLGFBQWUsRUFDcERwRixFQUFHLFNBQVU0RixHQUFRLE9BQU9BLEVBQUtnRCxTQUFXLEVBQzVDaUwsRUFBRyxTQUFVak8sRUFBTWhLLEdBQ2YsT0FBT0EsRUFBT3NTLFNBQVM0RixTQUFTbE8sRUFBS3FGLFNBQ3pDLEVBQ0FqQixFQUFHLFNBQVVwRSxHQUFRLE9BQU8sSUFBQTNCLEtBQUkyQixFQUFLNkIsV0FBYSxFQUFJLEVBQ3REdEksRUFBRyxTQUFVeUcsR0FBUSxPQUFPQSxFQUFLNkIsV0FBYSxDQUFHLEVBQ2pEdkksRUFBRyxTQUFVMEcsR0FBUSxPQUFPQSxFQUFLUCxZQUFjLEVBQy9DNGYsRUFBRyxTQUFVcmYsR0FBUSxPQUFPQSxFQUFLdEQsU0FBVyxFQUM1QzZpQixFQUFHLFNBQVV2ZixHQUFRLE9BQU9BLEVBQUtxRixRQUFVLEVBQzNDbWEsRUFBRyxTQUFVeGYsR0FBUSxPQUFPcVksT0FBT3JZLEVBQUs0QixlQUFlOGQsVUFBVSxFQUFJLGdKQ3BJbEUsSUFBSXJoQixFQUFNLFNBQVVzaEIsRUFBUTMxQixHQUUvQixZQURlLElBQVhBLElBQXFCQSxFQUFTLElBQzFCLE1BQVEyMUIsR0FBUTlnQixPQUFnQixFQUFWN1UsRUFDbEMsRUFDV3lULEVBQU0sU0FBVTRNLEdBQVEsT0FBaUIsSUFBVEEsRUFBZ0IsRUFBSSxDQUFJLEVBQzVELFNBQVNtTyxFQUFTbmQsRUFBSXVrQixHQUN6QixJQUFJdm1CLEVBQ0osT0FBTyxXQUNILElBQUl3bUIsRUFBUWoyQixLQUNSazJCLEVBQU90bUIsVUFDWHVtQixhQUFhMW1CLEdBQ2JBLEVBQUluTCxZQUFXLFdBQWMsT0FBT21OLEVBQUd4QixNQUFNZ21CLEVBQU9DLEVBQU8sR0FBR0YsRUFDbEUsQ0FDSixDQUNPLElBQUl0TSxFQUFXLFNBQVVocEIsR0FDNUIsT0FBT0EsYUFBZTJQLE1BQVEzUCxFQUFNLENBQUNBLEVBQ3pDLDRFQ2Y2QixtQkFBbEIyTyxPQUFPRyxTQUNkSCxPQUFPRyxPQUFTLFNBQVUzTixHQUV0QixJQURBLElBQUlxMEIsRUFBTyxHQUNGRSxFQUFLLEVBQUdBLEVBQUt4bUIsVUFBVXhQLE9BQVFnMkIsSUFDcENGLEVBQUtFLEVBQUssR0FBS3htQixVQUFVd21CLEdBRTdCLElBQUt2MEIsRUFDRCxNQUFNdzBCLFVBQVUsOENBT3BCLElBTEEsSUFBSUMsRUFBVSxTQUFVQyxHQUNoQkEsR0FDQWxuQixPQUFPbW5CLEtBQUtELEdBQVF4ZixTQUFRLFNBQVVMLEdBQU8sT0FBUTdVLEVBQU82VSxHQUFPNmYsRUFBTzdmLEVBQU8sR0FFekYsRUFDU3RGLEVBQUssRUFBR3FsQixFQUFTUCxFQUFNOWtCLEVBQUtxbEIsRUFBT3IyQixPQUFRZ1IsSUFBTSxDQUV0RGtsQixFQURhRyxFQUFPcmxCLEdBRXhCLENBQ0EsT0FBT3ZQLENBQ1gsOERDaEJJLFNBQVc2MEIsR0FBVyxhQUU1QixJQUFJQyxFQUF1QixvQkFBWDVrQixhQUErQ0UsSUFBckJGLE9BQU9mLFVBQzNDZSxPQUFPZixVQUNQLENBQ0VnVCxNQUFPLENBQUMsR0FFWjNYLEVBQVMsQ0FDVHFQLGVBQWdCLEVBQ2hCZ0QsU0FBVSxDQUNOQyxVQUFXLENBQUMsTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sT0FDdEQyRixTQUFVLENBQ04sV0FDQSxRQUNBLFFBQ0EsV0FDQSxRQUNBLFdBQ0EsV0FHUkUsT0FBUSxDQUNKN0YsVUFBVyxDQUNQLE9BQ0EsT0FDQSxPQUNBLE1BQ0EsTUFDQSxPQUNBLE9BQ0EsT0FDQSxPQUNBLE1BQ0EsTUFDQSxPQUVKMkYsU0FBVSxDQUNOLFVBQ0EsVUFDQSxPQUNBLFFBQ0EsTUFDQSxPQUNBLFVBQ0EsT0FDQSxZQUNBLFVBQ0EsV0FDQSxhQUdSNkwsUUFBUyxTQUFVQyxHQUNmLE9BQUlBLEVBQU0sRUFDQyxHQUNKLElBQ1gsRUFDQWxHLGVBQWdCLE9BQ2hCaUQsaUJBQWtCLE1BQ2xCa0QsWUFBYSxtQ0FDYnJDLFlBQWEsd0JBQ2IxWCxXQUFXLEdBRWZxZ0IsRUFBRzNTLE1BQU00UyxHQUFLdnFCLEVBQ2QsSUFBSXVxQixFQUFLRCxFQUFHM1MsTUFFWjBTLEVBQVFycUIsT0FBU0EsRUFDakJxcUIsRUFBUXhTLFFBQVUwUyxFQUVsQnZuQixPQUFPNmIsZUFBZXd
3MLEVBQVMsYUFBYyxDQUFFNXBCLE9BQU8sR0FFdkQsQ0F6RWdFK3BCLENBQVFILG1GQ0R6RSxJQUFpREcsSUFTdkNDLEdBQ00sTUFDTixhQUNBLElBQUlDLEVBQXNCLENBRTlCLElBQ0VDLElBRVJBLEVBQU9OLFFBQVVJLENBRVYsR0FLT0csRUFBMkIsQ0FBQyxFQUdoQyxTQUFTLEVBQW9CQyxHQUU1QixJQUFJQyxFQUFlRixFQUF5QkMsR0FDNUMsUUFBcUJqbEIsSUFBakJrbEIsRUFDSCxPQUFPQSxFQUFhVCxRQUdyQixJQUFJTSxFQUFTQyxFQUF5QkMsR0FBWSxDQUdqRFIsUUFBUyxDQUFDLEdBT1gsT0FIQUssRUFBb0JHLEdBQVVGLEVBQVFBLEVBQU9OLFFBQVMsR0FHL0NNLEVBQU9OLE9BQ2YsQ0FNQyxFQUFvQi9tQixFQUFLcW5CLElBQ3hCLElBQUlJLEVBQVNKLEdBQVVBLEVBQU9LLFdBQzdCLElBQU9MLEVBQWlCLFFBQ3hCLElBQU0sRUFFUCxPQURBLEVBQW9CcmEsRUFBRXlhLEVBQVEsQ0FBRTdtQixFQUFHNm1CLElBQzVCQSxDQUFNLEVBT2QsRUFBb0J6YSxFQUFJLENBQUMrWixFQUFTWSxLQUNqQyxJQUFJLElBQUk1Z0IsS0FBTzRnQixFQUNYLEVBQW9CQyxFQUFFRCxFQUFZNWdCLEtBQVMsRUFBb0I2Z0IsRUFBRWIsRUFBU2hnQixJQUM1RXJILE9BQU82YixlQUFld0wsRUFBU2hnQixFQUFLLENBQUU4Z0IsWUFBWSxFQUFNN29CLElBQUsyb0IsRUFBVzVnQixJQUUxRSxFQU1ELEVBQW9CNmdCLEVBQUksQ0FBQzcyQixFQUFLKzJCLElBQVVwb0IsT0FBT1MsVUFBVUMsZUFBZUMsS0FBS3RQLEVBQUsrMkIsR0FJN0YsSUFBSSxFQUFzQixDQUFDLEVBc1FqQixNQXBRVixNQUdBLEVBQW9COWEsRUFBRSxFQUFxQixDQUN6QyxRQUFXLElBQU0sSUFNbkIsSUFBSSthLEVBQXNCLEVBQW9CLEtBQzFDQyxFQUEwQyxFQUFvQmhvQixFQUFFK25CLEdBR2hFRSxFQUFpQixDQUFDLFdBQVksVUFBVyxZQUFhLGdCQUFpQixTQUFVLGdCQU1yRixTQUFTQyxJQUFpUyxPQUFwUkEsRUFBV3hvQixPQUFPRyxPQUFTSCxPQUFPRyxPQUFPa0MsT0FBUyxTQUFVN1AsR0FBVSxJQUFLLElBQUkwSCxFQUFJLEVBQUdBLEVBQUlxRyxVQUFVeFAsT0FBUW1KLElBQUssQ0FBRSxJQUFJZ3RCLEVBQVMzbUIsVUFBVXJHLEdBQUksSUFBSyxJQUFJbU4sS0FBTzZmLEVBQWNsbkIsT0FBT1MsVUFBVUMsZUFBZUMsS0FBS3VtQixFQUFRN2YsS0FBUTdVLEVBQU82VSxHQUFPNmYsRUFBTzdmLEdBQVUsQ0FBRSxPQUFPN1UsQ0FBUSxFQUFVZzJCLEVBQVM1bkIsTUFBTWpRLEtBQU00UCxVQUFZLENBQ2xWLElBTUlrb0IsRUFBVSxTQUFpQmhyQixHQUM3QixPQUFPQSxHQUFTQSxFQUFNMU0sT0FBUzBNLEVBQVEsSUFDekMsRUFDSWlyQixFQUFjLFNBQXFCcjNCLEdBQ3JDLE9BQU9tM0IsRUFBUyxDQUFDLEVBQUduM0IsRUFDdEIsRUFTSXMzQixFQUFZSixFQUFlNVYsT0F4QlYsQ0FBQyxnQkFBaUIsY0FBZSxnQkFBaUIsVUFBVyx3QkFBeUIsY0EyQnZHaVcsRUFBa0IsQ0FBQyxTQUFVLGNBQ0osTUFBTUMsRUFBWSxDQUM3QzN3QixLQUFNLGFBQ040d0IsT0FBUSxTQUFnQmxoQixHQUN0QixPQUFPQSxFQUFHLFFBQVMsQ0FDakJtaEIsTUFBTyxDQUNML3FCLEtBQU0sT0FDTixjQUFjLEdBRWhCMU4sTUFBTyxDQUNMcWUsU0FBVWhlLEtBQUtnZSxVQUVqQmpkLEdBQUksQ0FDRjJTLE1BQU8xVCxLQUFLcTRCLFVBR2xCLEVBQ0ExNEIsTUFBTyxDQUNMbU4sTUFBTyxDQUNMLFFBQVcsS0FDWHlmLFVBQVUsRUFDVitMLFVBQVcsU0FBbUJ4ckIsR0FDNUIsT0FBaUIsT0FBVkEsR0FBa0JBLGFBQWlCTCxNQUF5QixpQkFBVkssR0FBc0JBLGFBQWlCMmhCLFFBQVUzaEIsYUFBaUJ1RCxPQUEwQixpQkFBVnZELENBQzdJLEdBR0ZpRSxPQUFRLENBQ04xRCxLQUFNZ0MsT0FDTixRQUFXLFdBQ1QsTUF
3BTyxDQUNMNlIsTUFBTSxFQUNOdE8sWUFBYSxLQUVqQixHQUVGMmxCLE9BQVEsQ0FDTmxyQixLQUFNZ0QsTUFDTixRQUFXLFdBQ1QsT0FBT3VuQixDQUNULEdBRUY1WixTQUFVLENBQ1IzUSxLQUFNbXJCLFFBQ04sU0FBVyxJQUdmNTRCLEtBQU0sV0FDSixNQUFPLENBSUwrMkIsR0FBSSxLQUVSLEVBQ0E5MUIsUUFBUyxXQUNQLElBQUlvMUIsRUFBUWoyQixLQUdaLElBQUlBLEtBQUsyMkIsR0FBVCxDQUdBLElBQUk4QixFQUFhVixFQUFZLzNCLEtBQUsrUSxRQUNsQy9RLEtBQUt1NEIsT0FBT3hoQixTQUFRLFNBQVVnVixHQUU1QixJQXBGMkJyckIsRUFvRnZCZzRCLEVBQW1CZixJQUE4QjFtQixjQUFjOGEsSUFBUyxHQVc1RTBNLEVBQVcxTSxJQS9GZ0JyckIsRUErRkMrM0IsRUFBVzFNLElBQVMsR0E5RjdDcnJCLGFBQWUyUCxNQUFRM1AsRUFBTSxDQUFDQSxJQThGbUJzaEIsT0FBTzBXLEdBUnZDLFdBQ2xCLElBQUssSUFBSUMsRUFBTy9vQixVQUFVeFAsT0FBUTgxQixFQUFPLElBQUk3bEIsTUFBTXNvQixHQUFPQyxFQUFPLEVBQUdBLEVBQU9ELEVBQU1DLElBQy9FMUMsRUFBSzBDLEdBQVFocEIsVUFBVWdwQixHQTVGZCxJQUFzQkMsRUE4RmpDNUMsRUFBTWx6QixNQUFNa04sTUFBTWdtQixFQUFPLEVBOUZRNEMsRUE4Rk05TSxFQTdGdEM4TSxFQUFPM3FCLFFBQVEsa0JBQW1CLFNBQVNtVSxnQkE2RkVMLE9BQU9rVSxHQUN2RCxHQUlGLElBR0F1QyxFQUFXN2xCLFlBQWM1UyxLQUFLOE0sT0FBUzJyQixFQUFXN2xCLFlBR2xENVMsS0FBSzIyQixHQUFLLElBQUtnQixJQUFMLENBQW1DMzNCLEtBQUs4NEIsVUFBV0wsR0FHN0R6NEIsS0FBSys0QixVQUFVN2hCLGlCQUFpQixPQUFRbFgsS0FBSzRnQixRQUM3QzVnQixLQUFLZzVCLElBQUksV0FBWWg1QixLQUFLOHdCLFNBSTFCOXdCLEtBQUtpNUIsT0FBTyxXQUFZajVCLEtBQUtrNUIsY0FBZSxDQUMxQ0MsV0FBVyxHQWpDTSxDQW1DckIsRUFDQTMzQixRQUFTLENBS1BzM0IsUUFBUyxXQUNQLE9BQU85NEIsS0FBSytRLE9BQU9tUSxLQUFPbGhCLEtBQUtvNUIsSUFBSTFnQixXQUFhMVksS0FBS281QixHQUN2RCxFQU1BZixRQUFTLFNBQWlCN2hCLEdBQ3hCLElBQUk2aUIsRUFBU3I1QixLQUNUMFQsRUFBUThDLEVBQU0zVSxPQUVsQjdCLEtBQUtzNUIsV0FBVSxXQUNiRCxFQUFPdDJCLE1BQU0sUUFBUyswQixFQUFRcGtCLEVBQU01RyxPQUN0QyxHQUNGLEVBSUFpc0IsUUFBUyxXQUNQLE9BQU8vNEIsS0FBSzIyQixHQUFHcHFCLFVBQVl2TSxLQUFLMjJCLEdBQUdqakIsS0FDckMsRUFNQWtOLE9BQVEsU0FBZ0JwSyxHQUN0QnhXLEtBQUsrQyxNQUFNLE9BQVErMEIsRUFBUXRoQixFQUFNM1UsT0FBT2lMLE9BQzFDLEVBSUFna0IsUUFBUyxTQUFpQmhsQixFQUFlQyxHQUN2Qy9MLEtBQUsrQyxNQUFNLFFBQVMrMEIsRUFBUS9yQixHQUM5QixFQU1BbXRCLGNBQWUsU0FBdUJLLEdBQ2hDQSxFQUNGdjVCLEtBQUsrNEIsVUFBVXpmLGFBQWEsV0FBWWlnQixHQUV4Q3Y1QixLQUFLKzRCLFVBQVVuVixnQkFBZ0IsV0FFbkMsR0FFRnRpQixNQUFPLENBTUx5UCxPQUFRLENBQ055b0IsTUFBTSxFQUNOM2lCLFFBQVMsU0FBaUI0aUIsR0FDeEIsSUFBSUMsRUFBUzE1QixLQUNUeTRCLEVBQWFWLEVBQVkwQixHQUs3QnpCLEVBQVVqaEIsU0FBUSxTQUFVZ1YsVUFDbkIwTSxFQUFXMU0sRUFDcEIsSUFDQS9yQixLQUFLMjJCLEdBQUdyTixJQUFJbVAsR0FHWlIsRUFBZ0JsaEIsU0FBUSxTQUFVeFAsUUFDQSxJQUFyQmt4QixFQUFXbHhCLElBQ3BCbXlCLEVBQU8vQyxHQUFHck4sSUFBSS9oQixFQUFNa3hCLEVBQVdseEIsR0FFbkMsR0FDRixHQU9GdUYsTUFBTyxTQUFlb0gsR0FFaEJBLElBQWE0akIsRUFBUTkzQixLQUFLbzVCLElBQUl0c0IsUUFFbEM5TSxLQUFLMjJCLElBRUwzMkIsS0FBSzIyQixHQUFHM1csUUFBUTlMLEdBQVUsRUFDNUIsR0FLRnlsQixjQUFlLFdBRVQzNUIsS0FBSzIyQixLQUNQMzJCLEtBQUsrNEIsVUFBVTNoQixvQkFBb0IsT0FBUXBYLEtBQUs0Z0IsUUFDaEQ1Z0IsS0FBSzIyQixHQUFHL3BCLFVBQ1I1TSxLQUFLMjJCLEdBQUssS0FFZCxFQVVGdUIsUUFOYSxTQUFnQjBCLEVBQUtDLEdBQ2hDLElBQUl0eUIsRUFBTyxhQUVXLGlCQUFYc3lCLElBQXFCdHlCLEVBQU9zeUIsR0FDdkNELEVBQUkxQixVQUFVM3dCLEVBQU0yd0IsRUFDdEIsR0FFbUM0QixFQUFNLENBRXhDLEVBalFELEdBbVFBLEVBQXNCLEVBQTZCLE9BRXpDLEVBM1VNLEdBUmQ5QyxFQUFPTixRQUFVRyxFQUFRLEVBQVEsaUdDSThCRyxFQUFPTixRQUcvRCxXQUFlLGFBRXRCLElBQUlxRCxFQUFjMXFCLE9BQU8ycUIsT0FBTyxDQUFDLEdBQzdCQyxFQUFVNXBCLE1BQU00cEIsUUFHcEIsU0FBU0MsRUFBUUMsR0FDYixPQUFPQSxPQUNYLENBQ0EsU0FBU0MsRUFBTUQsR0FDWCxPQUFPQSxPQUNYLENBQ0EsU0FBU0UsRUFBT0YsR0FDWixPQUFhLElBQU5BLENBQ1gsQ0FDQSxTQUFTRyxFQUFRSCxHQUNiLE9BQWEsSUFBTkEsQ0FDWCxDQUlBLFNBQVNJLEVBQVl6dEIsR0FDakIsTUFBeUIsaUJBQVZBLEdBQ00saUJBQVZBLEdBRVUsaUJBQVZBLEdBQ1Usa0JBQVZBLENBQ2YsQ0FDQSxTQUFTMHRCLEVBQVcxdEIsR0FDaEIsTUFBd0IsbUJBQVZBLENBQ2xCLENBTUEsU0FBUzJ0QixFQUFTLzVCLEdBQ2QsT0FBZSxPQUFSQSxHQUErQixpQkFBUkEsQ0FDbEMsQ0FJQSxJQUFJZzZCLEVBQVlyckIsT0FBT1MsVUFBVWQsU0FDakMsU0FBUzJyQixFQUFVN3RCLEdBQ2YsT0FBTzR0QixFQUFVMXFCLEtBQUtsRCxHQUFPbUksTUFBTSxHQUFJLEVBQzNDLENBS0EsU0FBUzJsQixFQUFjbDZCLEdBQ25CLE1BQStCLG9CQUF4Qmc2QixFQUFVMXFCLEtBQUt0UCxFQUMxQixDQUNBLFNBQVNtNkIsRUFBU1YsR0FDZCxNQUE2QixvQkFBdEJPLEVBQVUxcUIsS0FBS21xQixFQUMxQixDQUlBLFNBQVNXLEVBQWtCbFAsR0FDdkIsSUFBSWpjLEVBQUlqTCxXQUFXK3BCLE9BQU83QyxJQUMxQixPQUFPamMsR0FBSyxHQUFLMVAsS0
3FBS2lOLE1BQU15QyxLQUFPQSxHQUFLb3JCLFNBQVNuUCxFQUNyRCxDQUNBLFNBQVNvUCxFQUFVcFAsR0FDZixPQUFRd08sRUFBTXhPLElBQ1UsbUJBQWJBLEVBQUlxUCxNQUNVLG1CQUFkclAsRUFBSXNQLEtBQ25CLENBSUEsU0FBU2xzQixFQUFTNGMsR0FDZCxPQUFjLE1BQVBBLEVBQ0QsR0FDQXZiLE1BQU00cEIsUUFBUXJPLElBQVNnUCxFQUFjaFAsSUFBUUEsRUFBSTVjLFdBQWEwckIsRUFDMUQvVixLQUFLQyxVQUFVZ0gsRUFBS3VQLEVBQVUsR0FDOUIxTSxPQUFPN0MsRUFDckIsQ0FDQSxTQUFTdVAsRUFBU3ZDLEVBQU1oTixHQUVwQixPQUFJQSxHQUFPQSxFQUFJd1AsVUFDSnhQLEVBQUk5ZSxNQUVSOGUsQ0FDWCxDQUtBLFNBQVN5UCxFQUFTelAsR0FDZCxJQUFJamMsRUFBSWpMLFdBQVdrbkIsR0FDbkIsT0FBT3plLE1BQU13QyxHQUFLaWMsRUFBTWpjLENBQzVCLENBS0EsU0FBUzJyQixFQUFRQyxFQUFLQyxHQUdsQixJQUZBLElBQUk5M0IsRUFBTTJMLE9BQU8xQixPQUFPLE1BQ3BCOUMsRUFBTzB3QixFQUFJbHRCLE1BQU0sS0FDWjlFLEVBQUksRUFBR0EsRUFBSXNCLEVBQUt6SyxPQUFRbUosSUFDN0I3RixFQUFJbUgsRUFBS3RCLEtBQU0sRUFFbkIsT0FBT2l5QixFQUFtQixTQUFVNVAsR0FBTyxPQUFPbG9CLEVBQUlrb0IsRUFBSXZKLGNBQWdCLEVBQUksU0FBVXVKLEdBQU8sT0FBT2xvQixFQUFJa29CLEVBQU0sQ0FDcEgsQ0FJQSxJQUFJNlAsRUFBZUgsRUFBUSxrQkFBa0IsR0FJekNJLEVBQXNCSixFQUFRLDhCQUlsQyxTQUFTSyxFQUFTdFIsRUFBS3VSLEdBQ25CLElBQUlDLEVBQU14UixFQUFJanFCLE9BQ2QsR0FBSXk3QixFQUFLLENBRUwsR0FBSUQsSUFBU3ZSLEVBQUl3UixFQUFNLEdBRW5CLFlBREF4UixFQUFJanFCLE9BQVN5N0IsRUFBTSxHQUd2QixJQUFJMTRCLEVBQVFrbkIsRUFBSTlSLFFBQVFxakIsR0FDeEIsR0FBSXo0QixHQUFTLEVBQ1QsT0FBT2tuQixFQUFJekwsT0FBT3piLEVBQU8sRUFFakMsQ0FDSixDQUlBLElBQUk0TSxFQUFpQlYsT0FBT1MsVUFBVUMsZUFDdEMsU0FBUytyQixFQUFPcDdCLEVBQUtnVyxHQUNqQixPQUFPM0csRUFBZUMsS0FBS3RQLEVBQUtnVyxFQUNwQyxDQUlBLFNBQVNxbEIsRUFBT3RxQixHQUNaLElBQUl1cUIsRUFBUTNzQixPQUFPMUIsT0FBTyxNQUMxQixPQUFPLFNBQWtCNHRCLEdBRXJCLE9BRFVTLEVBQU1ULEtBQ0RTLEVBQU1ULEdBQU85cEIsRUFBRzhwQixHQUNuQyxDQUNKLENBSUEsSUFBSVUsRUFBYSxTQUNiQyxFQUFXSCxHQUFPLFNBQVVSLEdBQzVCLE9BQU9BLEVBQUlydEIsUUFBUSt0QixHQU
3FZLFNBQVU5UyxFQUFHdmEsR0FBSyxPQUFRQSxFQUFJQSxFQUFFdXRCLGNBQWdCLEVBQUssR0FDeEYsSUFJSUMsRUFBYUwsR0FBTyxTQUFVUixHQUM5QixPQUFPQSxFQUFJblosT0FBTyxHQUFHK1osY0FBZ0JaLEVBQUl0bUIsTUFBTSxFQUNuRCxJQUlJb25CLEVBQWMsYUFDZEMsRUFBWVAsR0FBTyxTQUFVUixHQUM3QixPQUFPQSxFQUFJcnRCLFFBQVFtdUIsRUFBYSxPQUFPaGEsYUFDM0MsSUFTQSxTQUFTa2EsRUFBYTlxQixFQUFJK3FCLEdBQ3RCLFNBQVNDLEVBQVFsc0IsR0FDYixJQUFJOFQsRUFBSXpVLFVBQVV4UCxPQUNsQixPQUFPaWtCLEVBQ0RBLEVBQUksRUFDQTVTLEVBQUd4QixNQUFNdXNCLEVBQUs1c0IsV0FDZDZCLEVBQUd6QixLQUFLd3NCLEVBQUtqc0IsR0FDakJrQixFQUFHekIsS0FBS3dzQixFQUNsQixDQUVBLE9BREFDLEVBQVFDLFFBQVVqckIsRUFBR3JSLE9BQ2RxOEIsQ0FDWCxDQUNBLFNBQVNFLEVBQVdsckIsRUFBSStxQixHQUNwQixPQUFPL3FCLEVBQUdDLEtBQUs4cUIsRUFDbkIsQ0FFQSxJQUFJSSxFQUFTQyxTQUFTL3NCLFVBQVU0QixLQUFPaXJCLEVBQWFKLEVBSXBELFNBQVNPLEVBQVFqeUIsRUFBTXpILEdBQ25CQSxFQUFRQSxHQUFTLEVBR2pCLElBRkEsSUFBSW1HLEVBQUlzQixFQUFLekssT0FBU2dELEVBQ2xCMjVCLEVBQU0sSUFBSTFzQixNQUFNOUcsR0FDYkEsS0FDSHd6QixFQUFJeHpCLEdBQUtzQixFQUFLdEIsRUFBSW5HLEdBRXRCLE9BQU8yNUIsQ0FDWCxDQUlBLFNBQVNDLEVBQU9odkIsRUFBSWl2QixHQUNoQixJQUFLLElBQUl2bUIsS0FBT3VtQixFQUNaanZCLEVBQUcwSSxHQUFPdW1CLEVBQU12bUIsR0FFcEIsT0FBTzFJLENBQ1gsQ0FJQSxTQUFTa3ZCLEVBQVM3UyxHQUVkLElBREEsSUFBSThTLEVBQU0sQ0FBQyxFQUNGNXpCLEVBQUksRUFBR0EsRUFBSThnQixFQUFJanFCLE9BQVFtSixJQUN4QjhnQixFQUFJOWdCLElBQ0p5ekIsRUFBT0csRUFBSzlTLEVBQUk5Z0IsSUFHeEIsT0FBTzR6QixDQUNYLENBT0EsU0FBU0MsRUFBSzdzQixFQUFHMlgsRUFBR3RaLEdBQUssQ0FJekIsSUFBSXl1QixFQUFLLFNBQVU5c0IsRUFBRzJYLEVBQUd0WixHQUFLLE9BQU8sQ0FBTyxFQUt4QzB1QixFQUFXLFNBQVVuVSxHQUFLLE9BQU9BLENBQUcsRUFJeEMsU0FBU29VLEVBQWdCQyxHQUNyQixPQUFPQSxFQUNGblksUUFBTyxTQUFVbVIsRUFBTWhjLEdBQUssT0FBT2djLEVBQUt4VSxPQUFPeEgsRUFBRWlqQixZQUFjLEdBQUssR0FBRyxJQUN2RTVlLEtBQUssSUFDZCxDQUtBLFNBQVM2ZSxFQUFXbnRCLEVBQUcyWCxHQUNuQixHQUFJM1gsSUFBTTJYLEVBQ04sT0FBTyxFQUNYLElBQUl5VixFQUFZbEQsRUFBU2xxQixHQUNyQnF0QixFQUFZbkQsRUFBU3ZTLEdBQ3pCLElBQUl5VixJQUFhQyxFQStCWixPQUFLRCxJQUFjQyxHQUNiblAsT0FBT2xlLEtBQU9rZSxPQUFPdkcsR0EvQjVCLElBQ0ksSUFBSTJWLEVBQVd4dEIsTUFBTTRwQixRQUFRMXBCLEdBQ3pCdXRCLEVBQVd6dEIsTUFBTTRwQixRQUFRL1IsR0FDN0IsR0FBSTJWLEdBQVlDLEVBQ1osT0FBUXZ0QixFQUFFblEsU0FBVzhuQixFQUFFOW5CLFFBQ25CbVEsRUFBRXd0QixPQUFNLFNBQVV0OEIsRUFBRzhILEdBQ2pCLE9BQU9tMEIsRUFBV2o4QixFQUFHeW1CLEVBQUUzZSxHQUMzQixJQUVILEdBQUlnSCxhQUFhOUQsTUFBUXliLGFBQWF6YixLQUN2QyxPQUFPOEQsRUFBRXVDLFlBQWNvVixFQUFFcFYsVUFFeEIsR0FBSytxQixHQUFhQyxFQVVuQixPQUFPLEVBVFAsSUFBSUUsRUFBUTN1QixPQUFPbW5CLEtBQUtqbUIsR0FDcEIwdEIsRUFBUTV1QixPQUFPbW5CLEtBQUt0TyxHQUN4QixPQUFROFYsRUFBTTU5QixTQUFXNjlCLEVBQU03OUIsUUFDM0I0OUIsRUFBTUQsT0FBTSxTQUFVcm5CLEdBQ2xCLE9BQU9nbkIsRUFBV250QixFQUFFbUcsR0FBTXdSLEVBQUV4UixHQUNoQyxHQU1aLENBQ0EsTUFBT2pWLEdBRUgsT0FBTyxDQUNYLENBUVIsQ0FNQSxTQUFTeThCLEVBQWE3VCxFQUFLdUIsR0FDdkIsSUFBSyxJQUFJcmlCLEVBQUksRUFBR0EsRUFBSThnQixFQUFJanFCLE9BQVFtSixJQUM1QixHQUFJbTBCLEVBQVdyVCxFQUFJOWdCLEdBQUlxaUIsR0FDbkIsT0FBT3JpQixFQUVmLE9BQVEsQ0FDWixDQUlBLFNBQVM0MEIsRUFBSzFzQixHQUNWLElBQUkyc0IsR0FBUyxFQUNiLE9BQU8sV0FDRUEsSUFDREEsR0FBUyxFQUNUM3NCLEVBQUd4QixNQUFNalEsS0FBTTRQLFdBRXZCLENBQ0osQ0FFQSxTQUFTeXVCLEVBQVduYyxFQUFHMFQsR0FDbkIsT0FBSTFULElBQU0wVCxFQUNPLElBQU4xVCxHQUFXLEVBQUlBLEdBQU0sRUFBSTBULEVBR3pCMVQsR0FBTUEsR0FBSzBULEdBQU1BLENBRWhDLENBRUEsSUFBSTBJLEVBQVcsdUJBQ1hDLEVBQWMsQ0FBQyxZQUFhLFlBQWEsVUFDekNDLEVBQWtCLENBQ2xCLGVBQ0EsVUFDQSxjQUNBLFVBQ0EsZUFDQSxVQUNBLGdCQUNBLFlBQ0EsWUFDQSxjQUNBLGdCQUNBLGlCQUNBLGdCQUNBLG1CQUdBenRCLEVBQVMsQ0FLVDB0QixzQkFBdUJwdkIsT0FBTzFCLE9BQU8sTUFJckMrd0IsUUFBUSxFQUlSQyxlQUFlLEVBSWZDLFVBQVUsRUFJVkMsYUFBYSxFQUliMW1CLGFBQWMsS0FJZDJtQixZQUFhLEtBSWJDLGdCQUFpQixHQUtqQkMsU0FBVTN2QixPQUFPMUIsT0FBTyxNQUt4QnN4QixjQUFlNUIsRUFLZjZCLGVBQWdCN0IsRUFLaEI4QixpQkFBa0I5QixFQUlsQitCLGdCQUFpQmhDLEVBSWpCaUMscUJBQXNCL0IsRUFLdEJnQyxZQUFhakMsRUFLYnQ1QixPQUFPLEVBSVB3N0IsZ0JBQWlCZixHQVFqQmdCLEVBQWdCLDhKQUlwQixTQUFTQyxFQUFXbEUsR0FDaEIsSUFBSTNzQixHQUFLMnNCLEVBQU0sSUFBSW1FLFdBQVcsR0FDOUIsT0FBYSxLQUFOOXdCLEdBQW9CLEtBQU5BLENBQ3pCLENBSUEsU0FBUyt3QixFQUFJai9CLEVBQUtnVyxFQUFLa1YsRUFBSzRMLEdBQ3hCbm9CLE9BQU82YixlQUFleHFCLEVBQUtnVyxFQUFLLENBQzVCNUosTUFBTzhlLEVBQ1A0TCxhQUFjQSxFQUNkb0ksVUFBVSxFQUNWQyxjQUFjLEdBRXRCLENBSUEsSUFBSUMsRUFBUyxJQUFJbE4sT0FBTyxLQUFLNVEsT0FBT3dkLEVBQWNqSixPQUFRLFlBQzFELFNBQVN3SixFQUFVcmdCLEdBQ2YsSUFBSW9nQixFQUFPbnBCLEtBQUsrSSxHQUFoQixDQUdBLElBQUlzZ0IsRUFBV3RnQixFQUFLclIsTUFBTSxLQUMxQixPQUFPLFNBQVUzTixHQUNiLElBQUssSUFBSTZJLEVBQUksRUFBR0EsRUFBSXkyQixFQUFTNS9CLE9BQVFtSixJQUFLLENBQ3RDLElBQUs3SSxFQUNELE9BQ0
3pBLEVBQU1BLEVBQUlzL0IsRUFBU3oyQixHQUN2QixDQUNBLE9BQU83SSxDQUNYLENBVEEsQ0FVSixDQUdBLElBQUl1L0IsR0FBVyxhQUFlLENBQUMsRUFFM0JDLEdBQThCLG9CQUFYbnVCLE9BQ25Cb3VCLEdBQUtELElBQWFudUIsT0FBTzBWLFVBQVVDLFVBQVVyRixjQUM3QytkLEdBQU9ELElBQU0sZUFBZXhwQixLQUFLd3BCLElBQ2pDRSxHQUFRRixJQUFNQSxHQUFHNW5CLFFBQVEsWUFBYyxFQUN2QytuQixHQUFTSCxJQUFNQSxHQUFHNW5CLFFBQVEsU0FBVyxFQUN6QzRuQixJQUFNQSxHQUFHNW5CLFFBQVEsV0FDakIsSUFBSWdvQixHQUFRSixJQUFNLHVCQUF1QnhwQixLQUFLd3BCLElBQzlDQSxJQUFNLGNBQWN4cEIsS0FBS3dwQixJQUN6QkEsSUFBTSxZQUFZeHBCLEtBQUt3cEIsSUFDdkIsSUFvQklLLEdBcEJBQyxHQUFPTixJQUFNQSxHQUFHeE4sTUFBTSxrQkFHdEIrTixHQUFjLENBQUMsRUFBRXAvQixNQUNqQnEvQixJQUFrQixFQUN0QixHQUFJVCxHQUNBLElBQ0ksSUFBSW5NLEdBQU8sQ0FBQyxFQUNaMWtCLE9BQU82YixlQUFlNkksR0FBTSxVQUFXLENBQ25DcGxCLElBQUssV0FFRGd5QixJQUFrQixDQUN0QixJQUVKNXVCLE9BQU9tRixpQkFBaUIsZUFBZ0IsS0FBTTZjLEdBQ2xELENBQ0EsTUFBT3R5QixHQUFLLENBS2hCLElBQUltL0IsR0FBb0IsV0FhcEIsWUFaa0IzdUIsSUFBZHV1QixLQVNJQSxJQVBDTixTQUErQixJQUFYLEVBQUFXLEdBSWpCLEVBQUFBLEVBQWdCLFNBQXVDLFdBQWxDLEVBQUFBLEVBQWdCLFFBQUVDLElBQUlDLFNBTWhEUCxFQUNYLEVBRUk1QixHQUFXc0IsSUFBYW51QixPQUFPaXZCLDZCQUVuQyxTQUFTQyxHQUFTQyxHQUNkLE1BQXVCLG1CQUFUQSxHQUF1QixjQUFjdnFCLEtBQUt1cUIsRUFBS2x5QixXQUNqRSxDQUNBLElBSUlteUIsR0FKQUMsR0FBOEIsb0JBQVhDLFFBQ25CSixHQUFTSSxTQUNVLG9CQUFaQyxTQUNQTCxHQUFTSyxRQUFRQyxTQUlqQkosR0FGd0Msb0JBQVJLLEtBQXVCUCxHQUFTTyxLQUV6REEsSUFJZSxXQUNsQixTQUFTQSxJQUNMeGhDLEtBQUtzcEIsSUFBTWphLE9BQU8xQixPQUFPLEtBQzdCLENBVUEsT0FUQTZ6QixFQUFJMXhCLFVBQVUyeEIsSUFBTSxTQUFVL3FCLEdBQzFCLE9BQXlCLElBQWxCMVcsS0FBS3NwQixJQUFJNVMsRUFDcEIsRUFDQThxQixFQUFJMXhCLFVBQVVuSSxJQUFNLFNBQVUrTyxHQUMxQjFXLEtBQUtzcEIsSUFBSTVTLElBQU8sQ0FDcEIsRUFDQThxQixFQUFJMXhCLFVBQVVxUSxNQUFRLFdBQ2xCbmdCLEtBQUtzcEIsSUFBTWphLE9BQU8xQixPQUFPLEtBQzdCLEVBQ082ekIsQ0FDWCxDQWRxQixHQWlCekIsSUFBSUUsR0FBa0IsS0FRdEIsU0FBU0MsS0FDTCxPQUFPRCxJQUFtQixDQUFFRSxNQUFPRixHQUN2QyxDQUlBLFNBQVNHLEdBQW1CQyxRQUNiLElBQVBBLElBQWlCQSxFQUFLLE1BQ3JCQSxHQUNESixJQUFtQkEsR0FBZ0JLLE9BQU9DLE1BQzlDTixHQUFrQkksRUFDbEJBLEdBQU1BLEVBQUdDLE9BQU9oaEMsSUFDcEIsQ0FLQSxJQXNFSWtoQyxHQXRFQUMsR0FBdUIsV0FDdkIsU0FBU0EsRUFBTXZPLEVBQUsvekIsRUFBTThhLEVBQVU5WCxFQUFNdS9CLEVBQUtDLEVBQVNDLEVBQWtCQyxHQUN0RXRpQyxLQUFLMnpCLElBQU1BLEVBQ1gzekIsS0FBS0osS0FBT0EsRUFDWkksS0FBSzBhLFNBQVdBLEVBQ2hCMWEsS0FBSzRDLEtBQU9BLEVBQ1o1QyxLQUFLbWlDLElBQU1BLEVBQ1huaUMsS0FBS3VpQyxRQUFLdHdCLEVBQ1ZqUyxLQUFLb2lDLFFBQVVBLEVBQ2ZwaUMsS0FBS3dpQyxlQUFZdndCLEVBQ2pCalMsS0FBS3lpQyxlQUFZeHdCLEVBQ2pCalMsS0FBSzBpQyxlQUFZendCLEVBQ2pCalMsS0FBSzBXLElBQU05VyxHQUFRQSxFQUFLOFcsSUFDeEIxVyxLQUFLcWlDLGlCQUFtQkEsRUFDeEJyaUMsS0FBSzJpQyx1QkFBb0Ixd0IsRUFDekJqUyxLQUFLZ0MsWUFBU2lRLEVBQ2RqUyxLQUFLNGlDLEtBQU0sRUFDWDVpQyxLQUFLNmlDLFVBQVcsRUFDaEI3aUMsS0FBSzhpQyxjQUFlLEVBQ3BCOWlDLEtBQUsraUMsV0FBWSxFQUNqQi9pQyxLQUFLZ2pDLFVBQVcsRUFDaEJoakMsS0FBS2lqQyxRQUFTLEVBQ2RqakMsS0FBS3NpQyxhQUFlQSxFQUNwQnRpQyxLQUFLa2pDLGVBQVlqeEIsRUFDakJqUyxLQUFLbWpDLG9CQUFxQixDQUM5QixDQVVBLE9BVEE5ekIsT0FBTzZiLGVBQWVnWCxFQUFNcHlCLFVBQVcsUUFBUyxDQUc1Q25CLElBQUssV0FDRCxPQUFPM08sS0FBSzJpQyxpQkFDaEIsRUFDQW5MLFlBQVksRUFDWnFJLGNBQWMsSUFFWHFDLENBQ1gsQ0FwQzBCLEdBcUN0QmtCLEdBQW1CLFNBQVV4Z0MsUUFDaEIsSUFBVEEsSUFBbUJBLEVBQU8sSUFDOUIsSUFBSTRzQixFQUFPLElBQUkwUyxHQUdmLE9BRkExUyxFQUFLNXNCLEtBQU9BLEVBQ1o0c0IsRUFBS3VULFdBQVksRUFDVnZULENBQ1gsRUFDQSxTQUFTNlQsR0FBZ0J6WCxHQUNyQixPQUFPLElBQUlzVyxRQUFNandCLE9BQVdBLE9BQVdBLEVBQVd3YyxPQUFPN0MsR0FDN0QsQ0FLQSxTQUFTMFgsR0FBV0MsR0FDaEIsSUFBSUMsRUFBUyxJQUFJdEIsR0FBTXFCLEVBQU01UCxJQUFLNFAsRUFBTTNqQyxLQUl4QzJqQyxFQUFNN29CLFVBQVk2b0IsRUFBTTdvQixTQUFTekYsUUFBU3N1QixFQUFNM2dDLEtBQU0yZ0MsRUFBTXBCLElBQUtvQixFQUFNbkIsUUFBU21CLEVBQU1sQixpQkFBa0JrQixFQUFNakIsY0FVOUcsT0FUQWtCLEVBQU9qQixHQUFLZ0IsRUFBTWhCLEdBQ2xCaUIsRUFBT1gsU0FBV1UsRUFBTVYsU0FDeEJXLEVBQU85c0IsSUFBTTZzQixFQUFNN3NCLElBQ25COHNCLEVBQU9ULFVBQVlRLEVBQU1SLFVBQ3pCUyxFQUFPaEIsVUFBWWUsRUFBTWYsVUFDekJnQixFQUFPZixVQUFZYyxFQUFNZCxVQUN6QmUsRUFBT2QsVUFBWWEsRUFBTWIsVUFDekJjLEVBQU9OLFVBQVlLLEVBQU1MLFVBQ3pCTSxFQUFPUixVQUFXLEVBQ1hRLENBQ1gsQ0FLSSxJQUFJQyxHQUFtQm5JLEVBQVEsNE1BSzNCb0ksR0FBbUIsU0FBVTdoQyxFQUFRNlUsR0FDckNpdEIsR0FBTyx1QkFBd0IzaEIsT0FBT3RMLEVBQUsseUNBQXBDLGdQQUlrRjdVLEVBQzdGLEVBQ0kraEMsR0FBdUIsU0FBVS9oQyxFQUFRNlUsR0FDekNpdEIsR0FBTyxhQUFjM2hCLE9BQU90TCxFQUFLLG1DQUFxQ3NMLE9BQU90TCxFQUFLLGNBQTNFLDBKQUd1QzdVLEVBQ2xELEVBQ0lnaUMsR0FBOEIsb0JBQVZDLE9BQXlCN0MsR0FBUzZDLE9BQzFELEdBQUlELEdBQVksQ0FDWixJQUFJRSxHQUFzQnpJLEVBQVEsK0NBQ2xDdnFCLEVBQU9pdUIsU0FBVyxJQUFJOEUsTUFBTS95QixFQUFPaXVCLFNBQVUsQ0FDekMxVixJQUFLLFNBQVV6bkIsRUFBUTZVLEVBQUs1SixHQUN4QixPQUFJaTNCLEdBQW9CcnRCLElBQ3BCaXRCLEdBQU8sNERBQTREM2hCLE9BQU90TCxLQUNuRSxJQUdQN1UsRUFBTzZVLEdBQU81SixHQUNQLEVBRWYsR0FFUixDQUNBLElBQUlrM0IsR0FBZSxDQUNmdkMsSUFBSyxTQUFVNS9CLEVBQVE2VSxHQUNuQixJQUFJK3FCLEVBQU0vcUIsS0FBTzdVLEVBQ2JvaUMsRUFBWVIsR0FBaUIvc0IsSUFDYixpQkFBUkEsR0FDYyxNQUFsQkEsRUFBSTBMLE9BQU8sTUFDVDFMLEtBQU83VSxFQUFPcWlDLE9BT3hCLE9BTkt6QyxHQUFRd0MsSUFDTHZ0QixLQUFPN1UsRUFBT3FpQyxNQUNkTixHQUFxQi9oQyxFQUFRNlUsR0FFN0JndEIsR0FBaUI3aEMsRUFBUTZVLElBRTFCK3FCLElBQVF3QyxDQUNuQixHQUVBRSxHQUFlLENBQ2Z4MUIsSUFBSyxTQUFVOU0sRUFBUTZVLEdBT25CLE1BTm1CLGlCQUFSQSxHQU
3FzQkEsS0FBTzdVLElBQ2hDNlUsS0FBTzdVLEVBQU9xaUMsTUFDZE4sR0FBcUIvaEMsRUFBUTZVLEdBRTdCZ3RCLEdBQWlCN2hDLEVBQVE2VSxJQUUxQjdVLEVBQU82VSxFQUNsQixHQUVKdXJCLEdBQVksU0FBbUJILEdBQzNCLEdBQUkrQixHQUFZLENBRVosSUFBSS9zQixFQUFVZ3JCLEVBQUdzQyxTQUNiQyxFQUFXdnRCLEVBQVFxaEIsUUFBVXJoQixFQUFRcWhCLE9BQU9tTSxjQUFnQkgsR0FBZUgsR0FDL0VsQyxFQUFHeUMsYUFBZSxJQUFJVCxNQUFNaEMsRUFBSXVDLEVBQ3BDLE1BRUl2QyxFQUFHeUMsYUFBZXpDLENBRTFCLEVBa0JKLElBQUl2eUIsR0FBVyxXQVFYLE9BUEFBLEdBQVdGLE9BQU9HLFFBQVUsU0FBa0JDLEdBQzFDLElBQUssSUFBSUMsRUFBR25HLEVBQUksRUFBR29HLEVBQUlDLFVBQVV4UCxPQUFRbUosRUFBSW9HLEVBQUdwRyxJQUU1QyxJQUFLLElBQUlzRyxLQURUSCxFQUFJRSxVQUFVckcsR0FDTzhGLE9BQU9TLFVBQVVDLGVBQWVDLEtBQUtOLEVBQUdHLEtBQUlKLEVBQUVJLEdBQUtILEVBQUVHLElBRTlFLE9BQU9KLENBQ1gsRUFDT0YsR0FBU1UsTUFBTWpRLEtBQU00UCxVQUNoQyxFQUUyQixtQkFBcEI0MEIsaUJBQWlDQSxnQkFLeEMsSUFBSUMsR0FBUSxFQUNSQyxHQUFxQixHQUNyQkMsR0FBYyxXQUNkLElBQUssSUFBSXA3QixFQUFJLEVBQUdBLEVBQUltN0IsR0FBbUJ0a0MsT0FBUW1KLElBQUssQ0FDaEQsSUFBSXE3QixFQUFNRixHQUFtQm43QixHQUM3QnE3QixFQUFJQyxLQUFPRCxFQUFJQyxLQUFLcGtDLFFBQU8sU0FBVWlQLEdBQUssT0FBT0EsQ0FBRyxJQUNwRGsxQixFQUFJRSxVQUFXLENBQ25CLENBQ0FKLEdBQW1CdGtDLE9BQVMsQ0FDaEMsRUFNSTJrQyxHQUFxQixXQUNyQixTQUFTQSxJQUVML2tDLEtBQUs4a0MsVUFBVyxFQUNoQjlrQyxLQUFLa0YsR0FBS3UvQixLQUNWemtDLEtBQUs2a0MsS0FBTyxFQUNoQixDQXlDQSxPQXhDQUUsRUFBSWoxQixVQUFVazFCLE9BQVMsU0FBVUMsR0FDN0JqbEMsS0FBSzZrQyxLQUFLcCtCLEtBQUt3K0IsRUFDbkIsRUFDQUYsRUFBSWoxQixVQUFVbzFCLFVBQVksU0FBVUQsR0FLaENqbEMsS0FBSzZrQyxLQUFLN2tDLEtBQUs2a0MsS0FBS3RzQixRQUFRMHNCLElBQVEsS0FDL0JqbEMsS0FBSzhrQyxXQUNOOWtDLEtBQUs4a0MsVUFBVyxFQUNoQkosR0FBbUJqK0IsS0FBS3pHLE1BRWhDLEVBQ0Era0MsRUFBSWoxQixVQUFVcTFCLE9BQVMsU0FBVUMsR0FDekJMLEVBQUlsakMsU0FDSmtqQyxFQUFJbGpDLE9BQU93akMsT0FBT3JsQyxNQUNkb2xDLEdBQVFMLEVBQUlsakMsT0FBT3lqQyxTQUNuQlAsRUFBSWxqQyxPQUFPeWpDLFFBQVEvMUIsR0FBUyxDQUFFZzJCLE9BQVFSLEVBQUlsakMsUUFBVXVqQyxJQUdoRSxFQUNBTCxFQUFJajFCLFVBQVUwMUIsT0FBUyxTQUFVSixHQUU3QixJQUFJUCxFQUFPN2tDLEtBQUs2a0MsS0FBS3BrQyxRQUFPLFNBQVVpUCxHQUFLLE9BQU9BLENBQUcsSUFDaERxQixFQUFPaE4sT0FJUjhnQyxFQUFLNWMsTUFBSyxTQUFVMVgsRUFBRzJYLEdBQUssT0FBTzNYLEVBQUVyTCxHQUFLZ2pCLEVBQUVoakIsRUFBSSxJQUVwRCxJQUFLLElBQUlxRSxFQUFJLEVBQUc4YSxFQUFJd2dCLEVBQUt6a0MsT0FBUW1KLEVBQUk4YSxFQUFHOWEsSUFBSyxDQUN6QyxJQUFJMDdCLEVBQU1KLEVBQUt0N0IsR0FDWDY3QixHQUNBSCxFQUFJUSxXQUNBUixFQUFJUSxVQUFVbDJCLEdBQVMsQ0FBRWcyQixPQUFRVixFQUFLdDdCLElBQU02N0IsSUFFcERILEVBQUkxakMsUUFDUixDQUNKLEVBQ093akMsQ0FDWCxDQWhEd0IsR0FvRHhCQSxHQUFJbGpDLE9BQVMsS0FDYixJQUFJNmpDLEdBQWMsR0FDbEIsU0FBU0MsR0FBVzlqQyxHQUNoQjZqQyxHQUFZai9CLEtBQUs1RSxHQUNqQmtqQyxHQUFJbGpDLE9BQVNBLENBQ2pCLENBQ0EsU0FBUytqQyxLQUNMRixHQUFZRyxNQUNaZCxHQUFJbGpDLE9BQVM2akMsR0FBWUEsR0FBWXRsQyxPQUFTLEVBQ2xELENBTUEsSUFBSTBsQyxHQUFhejFCLE1BQU1QLFVBQ25CaTJCLEdBQWUxMkIsT0FBTzFCLE9BQU9tNEIsSUFDWixDQUNqQixPQUNBLE1BQ0EsUUFDQSxVQUNBLFNBQ0EsT0FDQSxXQUtXL3VCLFNBQVEsU0FBVWl2QixHQUU3QixJQUFJQyxFQUFXSCxHQUFXRSxHQUMxQnJHLEVBQUlvRyxHQUFjQyxHQUFRLFdBRXRCLElBREEsSUFBSTlQLEVBQU8sR0FDRkUsRUFBSyxFQUFHQSxFQUFLeG1CLFVBQVV4UCxPQUFRZzJCLElBQ3BDRixFQUFLRSxHQUFNeG1CLFVBQVV3bUIsR0FFekIsSUFFSThQLEVBRkFsd0IsRUFBU2l3QixFQUFTaDJCLE1BQU1qUSxLQUFNazJCLEdBQzlCaVEsRUFBS25tQyxLQUFLb21DLE9BRWQsT0FBUUosR0FDSixJQUFLLE9BQ0wsSUFBSyxVQUNERSxFQUFXaFEsRUFDWCxNQUNKLElBQUssU0FDRGdRLEVBQVdoUSxFQUFLamhCLE1BQU0sR0FhOUIsT0FWSWl4QixHQUNBQyxFQUFHRSxhQUFhSCxHQUdoQkMsRUFBR3ZCLElBQUlZLE9BQU8sQ0FDVm40QixLQUFNLGlCQUNOeEwsT0FBUTdCLEtBQ1IwVyxJQUFLc3ZCLElBR05od0IsQ0FDWCxHQUNKLElBRUEsSUFBSXN3QixHQUFZajNCLE9BQU9rM0Isb0JBQW9CUixJQUN2Q1MsR0FBbUIsQ0FBQyxFQUtwQkMsSUFBZ0IsRUFDcEIsU0FBU0MsR0FBZ0I1NUIsR0FDckIyNUIsR0FBZ0IzNUIsQ0FDcEIsQ0FFQSxJQUFJNjVCLEdBQVUsQ0FDVm5CLE9BQVFwSSxFQUNSK0gsT0FBUS9ILEVBQ1I0SCxPQUFRNUgsRUFDUjhILFVBQVc5SCxHQVFYd0osR0FBMEIsV0FDMUIsU0FBU0EsRUFBUzk1QixFQUFPKzVCLEVBQVNDLEdBVTlCLFFBVGdCLElBQVpELElBQXNCQSxHQUFVLFFBQ3ZCLElBQVRDLElBQW1CQSxHQUFPLEdBQzlCOW1DLEtBQUs4TSxNQUFRQSxFQUNiOU0sS0FBSzZtQyxRQUFVQSxFQUNmN21DLEtBQUs4bUMsS0FBT0EsRUFFWjltQyxLQUFLNGtDLElBQU1rQyxFQUFPSCxHQUFVLElBQUk1QixHQUNoQy9rQyxLQUFLK21DLFFBQVUsRUFDZnBILEVBQUk3eUIsRUFBTyxTQUFVOU0sTUFDakJpNkIsRUFBUW50QixHQUFRLENBQ2hCLElBQUtnNkIsRUFDRCxHQUFJN0csR0FDQW56QixFQUFNazZCLFVBQVlqQixRQUlsQixJQUFLLElBQUl4OEIsRUFBSSxFQUFHOGEsRUFBSWlpQixHQUFVbG1DLE9BQVFtSixFQUFJOGEsRUFBRzlhLElBRXpDbzJCLEVBQUk3eUIsRUFEQTRKLEVBQU00dkIsR0FBVS84QixHQUNKdzhCLEdBQWFydkIsSUFJcENtd0IsR0FDRDdtQyxLQUFLcW1DLGFBQWF2NUIsRUFFMUIsS0FPSSxLQUFJMHBCLEVBQU9ubkIsT0FBT21uQixLQUFLMXBCLEdBQ3ZCLElBQVN2RCxFQUFJLEVBQUdBLEVBQUlpdEIsRUFBS3AyQixPQUFRbUosSUFBSyxDQUNsQyxJQUFJbU4sRUFDSnV3QixHQUFlbjZCLEVBRFg0SixFQUFNOGYsRUFBS2p0QixHQUNZaTlCLFFBQWtCdjBCLEVBQVc0MEIsRUFBU0MsRUFDckUsQ0FKNkIsQ0FNckMsQ0FTQSxPQUxB
3RixFQUFTOTJCLFVBQVV1MkIsYUFBZSxTQUFVdjVCLEdBQ3hDLElBQUssSUFBSXZELEVBQUksRUFBRzhhLEVBQUl2WCxFQUFNMU0sT0FBUW1KLEVBQUk4YSxFQUFHOWEsSUFDckMyOUIsR0FBUXA2QixFQUFNdkQsSUFBSSxFQUFPdkosS0FBSzhtQyxLQUV0QyxFQUNPRixDQUNYLENBbEQ2QixHQXlEN0IsU0FBU00sR0FBUXA2QixFQUFPKzVCLEVBQVNNLEdBQzdCLE9BQUlyNkIsR0FBU2d2QixFQUFPaHZCLEVBQU8sV0FBYUEsRUFBTXM1QixrQkFBa0JRLEdBQ3JEOTVCLEVBQU1zNUIsUUFFYkssS0FDQ1UsR0FBc0J2RyxPQUN0QjNHLEVBQVFudEIsS0FBVTh0QixFQUFjOXRCLEtBQ2pDdUMsT0FBTyszQixhQUFhdDZCLElBQ25CQSxFQUFNdTZCLFVBQ05DLEdBQU14NkIsSUFDTEEsYUFBaUJvMUIsUUFOdkIsRUFPVyxJQUFJMEUsR0FBUzk1QixFQUFPKzVCLEVBQVNNLEVBRTVDLENBSUEsU0FBU0YsR0FBZXZtQyxFQUFLZ1csRUFBS2tWLEVBQUsyYixFQUFjVixFQUFTQyxFQUFNVSxRQUNuQyxJQUF6QkEsSUFBbUNBLEdBQXVCLEdBQzlELElBQUk1QyxFQUFNLElBQUlHLEdBQ1YwQyxFQUFXcDRCLE9BQU9xNEIseUJBQXlCaG5DLEVBQUtnVyxHQUNwRCxJQUFJK3dCLElBQXNDLElBQTFCQSxFQUFTNUgsYUFBekIsQ0FJQSxJQUFJekksRUFBU3FRLEdBQVlBLEVBQVM5NEIsSUFDOUJnNUIsRUFBU0YsR0FBWUEsRUFBU25lLElBQzVCOE4sSUFBVXVRLEdBQ1gvYixJQUFRNGEsSUFBeUMsSUFBckI1MkIsVUFBVXhQLFNBQ3ZDd3JCLEVBQU1sckIsRUFBSWdXLElBRWQsSUFBSWt4QixFQUFVZixFQUFVamIsR0FBT0EsRUFBSXdhLE9BQVNjLEdBQVF0YixHQUFLLEVBQU9rYixHQXlEaEUsT0F4REF6M0IsT0FBTzZiLGVBQWV4cUIsRUFBS2dXLEVBQUssQ0FDNUI4Z0IsWUFBWSxFQUNacUksY0FBYyxFQUNkbHhCLElBQUssV0FDRCxJQUFJN0IsRUFBUXNxQixFQUFTQSxFQUFPcG5CLEtBQUt0UCxHQUFPa3JCLEVBZ0J4QyxPQWZJbVosR0FBSWxqQyxTQUVBK2lDLEVBQUlPLE9BQU8sQ0FDUHRqQyxPQUFRbkIsRUFDUjJNLEtBQU0sTUFDTnFKLElBQUtBLElBR1RreEIsSUFDQUEsRUFBUWhELElBQUlPLFNBQ1JsTCxFQUFRbnRCLElBQ1IrNkIsR0FBWS82QixLQUlqQnc2QixHQUFNeDZCLEtBQVcrNUIsRUFBVS81QixFQUFNQSxNQUFRQSxDQUNwRCxFQUNBd2MsSUFBSyxTQUF3QndlLEdBQ3pCLElBQUloN0IsRUFBUXNxQixFQUFTQSxFQUFPcG5CLEtBQUt0UCxHQUFPa3JCLEVBQ3hDLEdBQUt5UyxFQUFXdnhCLEVBQU9nN0IsR0FBdkIsQ0FNQSxHQUhJUCxHQUNBQSxJQUVBSSxFQUNBQSxFQUFPMzNCLEtBQUt0UCxFQUFLb25DLE9BRWhCLElBQUkxUSxFQUVMLE9BRUMsSUFBS3lQLEdBQVdTLEdBQU14NkIsS0FBV3c2QixHQUFNUSxHQUV4QyxZQURBaDdCLEVBQU1BLE1BQVFnN0IsR0FJZGxjLEVBQU1rYyxDQUNWLENBQ0FGLEVBQVVmLEVBQVVpQixHQUFVQSxFQUFPMUIsT0FBU2MsR0FBUVksR0FBUSxFQUFPaEIsR0FFakVsQyxFQUFJWSxPQUFPLENBQ1BuNEIsS0FBTSxNQUNOeEwsT0FBUW5CLEVBQ1JnVyxJQUFLQSxFQUNMeEMsU0FBVTR6QixFQUNWQyxTQUFVajdCLEdBekJsQixDQTRCSixJQUVHODNCLENBakVQLENBa0VKLENBQ0EsU0FBU3RiLEdBQUl6bkIsRUFBUTZVLEVBQUtrVixHQUl0QixJQUhLc08sRUFBUXI0QixJQUFXMDRCLEVBQVkxNEIsS0FDaEM4aEMsR0FBTyx3RUFBd0UzaEIsT0FBT25nQixLQUV0Rm1tQyxHQUFXbm1DLEdBQWYsQ0FJQSxJQUFJc2tDLEVBQUt0a0MsRUFBT3VrQyxPQUNoQixPQUFJbk0sRUFBUXA0QixJQUFXaTVCLEVBQWtCcGtCLElBQ3JDN1UsRUFBT3pCLE9BQVNILEtBQUtvSixJQUFJeEgsRUFBT3pCLE9BQVFzVyxHQUN4QzdVLEVBQU8rYyxPQUFPbEksRUFBSyxFQUFHa1YsR0FFbEJ1YSxJQUFPQSxFQUFHVSxTQUFXVixFQUFHVyxNQUN4QkksR0FBUXRiLEdBQUssR0FBTyxHQUVqQkEsR0FFUGxWLEtBQU83VSxLQUFZNlUsS0FBT3JILE9BQU9TLFlBQ2pDak8sRUFBTzZVLEdBQU9rVixFQUNQQSxHQUVQL3BCLEVBQU9vbUMsUUFBVzlCLEdBQU1BLEVBQUdZLFNBQzNCcEQsR0FBTyw0SEFFQS9YLEdBRU51YSxHQUlMYyxHQUFlZCxFQUFHcjVCLE1BQU80SixFQUFLa1YsT0FBSzNaLEVBQVdrMEIsRUFBR1UsUUFBU1YsRUFBR1csTUFFekRYLEVBQUd2QixJQUFJWSxPQUFPLENBQ1ZuNEIsS0FBTSxNQUNOeEwsT0FBUUEsRUFDUjZVLElBQUtBLEVBQ0x4QyxTQUFVMFgsRUFDVm1jLGNBQVU5MUIsSUFHWDJaLElBYkgvcEIsRUFBTzZVLEdBQU9rVixFQUNQQSxFQXRCWCxDQUZJK1gsR0FBTyx5QkFBMEIzaEIsT0FBT3RMLEVBQUssaUNBcUNyRCxDQUNBLFNBQVN3eEIsR0FBSXJtQyxFQUFRNlUsR0FJakIsSUFIS3dqQixFQUFRcjRCLElBQVcwNEIsRUFBWTE0QixLQUNoQzhoQyxHQUFPLDJFQUEyRTNoQixPQUFPbmdCLElBRXpGbzRCLEVBQVFwNEIsSUFBV2k1QixFQUFrQnBrQixHQUNyQzdVLEVBQU8rYyxPQUFPbEksRUFBSyxPQUR2QixDQUlBLElBQUl5dkIsRUFBS3RrQyxFQUFPdWtDLE9BQ1p2a0MsRUFBT29tQyxRQUFXOUIsR0FBTUEsRUFBR1ksUUFDM0JwRCxHQUFPLHdGQUlQcUUsR0FBV25tQyxHQUNYOGhDLEdBQU8sNEJBQTZCM2hCLE9BQU90TCxFQUFLLGtDQUcvQ29sQixFQUFPajZCLEVBQVE2VSxZQUdiN1UsRUFBTzZVLEdBQ1R5dkIsR0FJREEsRUFBR3ZCLElBQUlZLE9BQU8sQ0FDVm40QixLQUFNLFNBQ054TCxPQUFRQSxFQUNSNlUsSUFBS0EsSUF0QmIsQ0F5QkosQ0FLQSxTQUFTbXhCLEdBQVkvNkIsR0FDakIsSUFBSyxJQUFJckwsT0FBSSxFQUFROEgsRUFBSSxFQUFHOGEsRUFBSXZYLEVBQU0xTSxPQUFRbUosRUFBSThhLEVBQUc5YSxLQUNqRDlILEVBQUlxTCxFQUFNdkQsS0FDRDlILEVBQUUya0MsUUFDUDNrQyxFQUFFMmtDLE9BQU94QixJQUFJTyxTQUVibEwsRUFBUXg0QixJQUNSb21DLEdBQVlwbUMsRUFHeEIsQ0FFQSxTQUFTMG1DLEdBQVN0bUMsR0FFZCxPQURBdW1DLEdBQWF2bUMsR0FBUSxHQUNkQSxDQUNYLENBTUEsU0FBU3dtQyxHQUFnQnhtQyxHQUdyQixPQUZBdW1DLEdBQWF2bUMsR0FBUSxHQUNyQjg5QixFQUFJOTlCLEVBQVEsaUJBQWdELEdBQ3JEQSxDQUNYLENBQ0EsU0FBU3VtQyxHQUFhdm1DLEVBQVFnbEMsR0FFMUIsSUFBS21CLEdBQVdubUMsR0FBUyxDQUVibzRCLEVBQVFwNEIsSUFDUjhoQyxHQUFPLHVDQUF1QzNoQixPQUFPNmtCLEVBQVUsb0JBQXNCLGFBQWMsOERBQThEN2tCLE9BQU82a0IsRUFBVSxlQUFpQixRQUFTLCtDQUVoTixJQUFJeUIsRUFBYXptQyxHQUFVQSxFQUFPdWtDLE9BQzlCa0MsR0FBY0EsRUFBV3pCLFVBQVlBLEdBQ3JDbEQsR0FBTyx1QkFBdUIzaEIsT0FBT3NtQixFQUFXekIsUUFBVSxHQUFLLE9BQVEsd0RBQXdEN2tCLE9BQU82a0IsRUFBVSxHQUFLLE9BQVEsYUFHNUpLLEdBQVFybEMsRUFBUWdsQyxFQUFTakcsU0FFaEIsTUFBVi8rQixHQUFrQjA0QixFQUFZMTRCLEtBQzlCOGhDLEdBQU8sa0NBQWtDM2hCLE9BQU95TSxPQUFPNXNCLEtBRXZEMG1DLEdBQWlCMW1DLElBQ2pCOGhDLEdBQU8sd0VBR25CLENBQ0osQ0FDQSxTQUFTNkUsR0FBVzE3QixHQUNoQixPQUFJazdCLEdBQVdsN0IsR0FDSjA3QixHQUFXMTdCLEVBQXVDLFlBRW5EQSxJQUFTQSxFQUFNczVCLE9BQzdCLENBQ0EsU0FBU3FDLEdBQVUzN0IsR0FDZixTQUFVQSxJQUFTQSxFQUFNNDdCLGNBQzdCLENBQ0EsU0FBU1YsR0FBV2w3QixHQUNoQixTQUFVQSxJQUFTQSxFQUFNNjdCLGVBQzdCLENBQ0EsU0FBU0MsR0FBUTk3QixHQUNiLE9BQU8wN0IsR0FBVzE3QixJQUFVazdCLEdBQVdsN0IsRUFDM0MsQ0FDQSxTQUFTKzdCLEdBQU1DLEdBQ1gsSUFBSWxHLEVBQU1rRyxHQUFZQSxFQUEwQyxRQUNoRSxPQUFPbEcsRUFBTWlHLEdBQU1qRyxHQUFPa0csQ0FDOUIsQ0FDQSxTQUFTQyxHQUFRajhCLEdBS2IsT0FISXVDLE9BQU8rM0IsYUFBYXQ2QixJQUNwQjZ5QixFQUFJN3lCLEVBQU8sWUFBcUMsR0FFN0NBLENBQ1gsQ0FJQSxTQUFTeTdCLEdBQWlCejdCLEdBQ3RCLElBQUlPLEVBQU9zdEIsRUFBVTd0QixHQUNyQixNQUFpQixRQUFUTyxHQUEyQixZQUFUQSxHQUErQixRQUFUQSxHQUEyQixZQUFUQSxDQUN0RSxDQUtBLElBQUkyN0IsR0FBVSxZQUNkLFNBQVMxQixHQU
3FNbDNCLEdBQ1gsU0FBVUEsSUFBcUIsSUFBaEJBLEVBQUVnckIsVUFDckIsQ0FDQSxTQUFTNk4sR0FBTW44QixHQUNYLE9BQU9vOEIsR0FBVXA4QixHQUFPLEVBQzVCLENBQ0EsU0FBU3E4QixHQUFXcjhCLEdBQ2hCLE9BQU9vOEIsR0FBVXA4QixHQUFPLEVBQzVCLENBQ0EsU0FBU284QixHQUFVRSxFQUFVdkMsR0FDekIsR0FBSVMsR0FBTThCLEdBQ04sT0FBT0EsRUFFWCxJQUFJaDZCLEVBQU0sQ0FBQyxFQUlYLE9BSEF1d0IsRUFBSXZ3QixFQUFLNDVCLElBQVMsR0FDbEJySixFQUFJdndCLEVBQUssZ0JBQWdEeTNCLEdBQ3pEbEgsRUFBSXZ3QixFQUFLLE1BQU82M0IsR0FBZTczQixFQUFLLFFBQVNnNkIsRUFBVSxLQUFNdkMsRUFBU2pHLE9BQy9EeHhCLENBQ1gsQ0FDQSxTQUFTaTZCLEdBQVdqNkIsR0FDWEEsRUFBSXcxQixLQUNMakIsR0FBTyw2Q0FHUHYwQixFQUFJdzFCLEtBQ0F4MUIsRUFBSXcxQixJQUFJWSxPQUFPLENBQ1huNEIsS0FBTSxNQUNOeEwsT0FBUXVOLEVBQ1JzSCxJQUFLLFNBR3JCLENBQ0EsU0FBUzR5QixHQUFNbDZCLEdBQ1gsT0FBT2s0QixHQUFNbDRCLEdBQU9BLEVBQUl0QyxNQUFRc0MsQ0FDcEMsQ0FDQSxTQUFTbTZCLEdBQVVDLEdBQ2YsR0FBSWhCLEdBQVdnQixHQUNYLE9BQU9BLEVBSVgsSUFGQSxJQUFJNUgsRUFBUSxDQUFDLEVBQ1RwTCxFQUFPbm5CLE9BQU9tbkIsS0FBS2dULEdBQ2RqZ0MsRUFBSSxFQUFHQSxFQUFJaXRCLEVBQUtwMkIsT0FBUW1KLElBQzdCa2dDLEdBQW1CN0gsRUFBTzRILEVBQWdCaFQsRUFBS2p0QixJQUVuRCxPQUFPcTRCLENBQ1gsQ0FDQSxTQUFTNkgsR0FBbUI1bkMsRUFBUTAwQixFQUFRN2YsR0FDeENySCxPQUFPNmIsZUFBZXJwQixFQUFRNlUsRUFBSyxDQUMvQjhnQixZQUFZLEVBQ1pxSSxjQUFjLEVBQ2RseEIsSUFBSyxXQUNELElBQUlpZCxFQUFNMkssRUFBTzdmLEdBQ2pCLEdBQUk0d0IsR0FBTTFiLEdBQ04sT0FBT0EsRUFBSTllLE1BR1gsSUFBSXE1QixFQUFLdmEsR0FBT0EsRUFBSXdhLE9BR3BCLE9BRklELEdBQ0FBLEVBQUd2QixJQUFJTyxTQUNKdlosQ0FFZixFQUNBdEMsSUFBSyxTQUFVeGMsR0FDWCxJQUFJaTdCLEVBQVd4UixFQUFPN2YsR0FDbEI0d0IsR0FBTVMsS0FBY1QsR0FBTXg2QixHQUMxQmk3QixFQUFTajdCLE1BQVFBLEVBR2pCeXBCLEVBQU83ZixHQUFPNUosQ0FFdEIsR0FFUixDQUNBLFNBQVM0OEIsR0FBVTdTLEdBQ2YsSUFBSStOLEVBQU0sSUFBSUcsR0FDVjN6QixFQUFLeWxCLEdBQVEsV0FFVCtOLEVBQUlPLE9BQU8sQ0FDUHRqQyxPQUFRdU4sRUFDUi9CLEtBQU0sTUFDTnFKLElBQUssU0FHakIsSUFBRyxXQUVLa3VCLEVBQUlZLE9BQU8sQ0FDUDNqQyxPQUFRdU4sRUFDUi9CLEtBQU0sTUFDTnFKLElBQUssU0FHakIsSUFBSS9ILEVBQU15QyxFQUFHekMsSUFBSzJhLEVBQU1sWSxFQUFHa1ksSUFDdkJsYSxFQUFNLENBQ04sU0FBSXRDLEdBQ0EsT0FBTzZCLEdBQ1gsRUFDQSxTQUFJN0IsQ0FBTWc3QixHQUNOeGUsRUFBSXdlLEVBQ1IsR0FHSixPQURBbkksRUFBSXZ3QixFQUFLNDVCLElBQVMsR0FDWDU1QixDQUNYLENBQ0EsU0FBU3U2QixHQUFPMW1DLEdBQ1B1bEMsR0FBV3ZsQyxJQUNaMGdDLEdBQU8sZ0VBRVgsSUFBSTVHLEVBQU05QyxFQUFRaDNCLEdBQVUsSUFBSW9OLE1BQU1wTixFQUFPN0MsUUFBVSxDQUFDLEVBQ3hELElBQUssSUFBSXNXLEtBQU96VCxFQUNaODVCLEVBQUlybUIsR0FBT2t6QixHQUFNM21DLEVBQVF5VCxHQUU3QixPQUFPcW1CLENBQ1gsQ0FDQSxTQUFTNk0sR0FBTTNtQyxFQUFReVQsRUFBSzhYLEdBQ3hCLElBQUk1QyxFQUFNM29CLEVBQU95VCxHQUNqQixHQUFJNHdCLEdBQU0xYixHQUNOLE9BQU9BLEVBRVgsSUFBSXhjLEVBQU0sQ0FDTixTQUFJdEMsR0FDQSxJQUFJOGUsRUFBTTNvQixFQUFPeVQsR0FDakIsWUFBZXpFLElBQVIyWixFQUFvQjRDLEVBQWU1QyxDQUM5QyxFQUNBLFNBQUk5ZSxDQUFNZzdCLEdBQ043a0MsRUFBT3lULEdBQU9veEIsQ0FDbEIsR0FHSixPQURBbkksRUFBSXZ3QixFQUFLNDVCLElBQVMsR0FDWDU1QixDQUNYLENBRUEsSUFpSUl5NkIsR0FDQUMsR0FsSUFDLEdBQW9CLG9CQUNwQkMsR0FBMkIsMkJBQy9CLFNBQVNDLEdBQVNwb0MsR0FDZCxPQUFPcW9DLEdBQWVyb0MsR0FBUSxFQUNsQyxDQUNBLFNBQVNxb0MsR0FBZXJvQyxFQUFRZ2xDLEdBQzVCLElBQUtqTSxFQUFjLzRCLEdBWWYsT0FWUW80QixFQUFRcDRCLEdBQ1I4aEMsR0FBTywyQ0FFRjRFLEdBQWlCMW1DLEdBQ3RCOGhDLEdBQU8sd0VBR1BBLEdBQU8sa0NBQWtDM2hCLGNBQWNuZ0IsSUFHeERBLEVBTVgsR0FKS3dOLE9BQU8rM0IsYUFBYXZsQyxJQUNyQjhoQyxHQUFPLDZFQUdQcUUsR0FBV25tQyxHQUNYLE9BQU9BLEVBR1gsSUFBSXNvQyxFQUFldEQsRUFBVW1ELEdBQTJCRCxHQUNwREssRUFBZ0J2b0MsRUFBT3NvQyxHQUMzQixHQUFJQyxFQUNBLE9BQU9BLEVBRVgsSUFBSXhJLEVBQVF2eUIsT0FBTzFCLE9BQU8wQixPQUFPZzdCLGVBQWV4b0MsSUFDaEQ4OUIsRUFBSTk5QixFQUFRc29DLEVBQWN2SSxHQUMxQmpDLEVBQUlpQyxFQUFPLGtCQUFrRCxHQUM3RGpDLEVBQUlpQyxFQUFPLFVBQW1DLy9CLEdBQzFDeWxDLEdBQU16bEMsSUFDTjg5QixFQUFJaUMsRUFBT29ILElBQVMsSUFFcEJuQyxHQUFXNEIsR0FBVTVtQyxLQUNyQjg5QixFQUFJaUMsRUFBTyxpQkFBZ0QsR0FHL0QsSUFEQSxJQUFJcEwsRUFBT25uQixPQUFPbW5CLEtBQUszMEIsR0FDZDBILEVBQUksRUFBR0EsRUFBSWl0QixFQUFLcDJCLE9BQVFtSixJQUM3QitnQyxHQUF1QjFJLEVBQU8vL0IsRU
3FBUTIwQixFQUFLanRCLEdBQUlzOUIsR0FFbkQsT0FBT2pGLENBQ1gsQ0FDQSxTQUFTMEksR0FBdUIxSSxFQUFPLy9CLEVBQVE2VSxFQUFLbXdCLEdBQ2hEeDNCLE9BQU82YixlQUFlMFcsRUFBT2xyQixFQUFLLENBQzlCOGdCLFlBQVksRUFDWnFJLGNBQWMsRUFDZGx4QixJQUFLLFdBQ0QsSUFBSWlkLEVBQU0vcEIsRUFBTzZVLEdBQ2pCLE9BQU9td0IsSUFBWWpNLEVBQWNoUCxHQUFPQSxFQUFNcWUsR0FBU3JlLEVBQzNELEVBQ0F0QyxJQUFLLFdBQ0RxYSxHQUFPLHlCQUEwQjNoQixPQUFPdEwsRUFBSyxpQ0FDakQsR0FFUixDQU9BLFNBQVM2ekIsR0FBZ0Ixb0MsR0FDckIsT0FBT3FvQyxHQUFlcm9DLEdBQVEsRUFDbEMsQ0FFQSxTQUFTL0IsR0FBUzBxQyxFQUFpQkMsR0FDL0IsSUFBSXJULEVBQ0F1USxFQUNBK0MsRUFBYWxRLEVBQVdnUSxHQUN4QkUsR0FDQXRULEVBQVNvVCxFQUNUN0MsRUFBUyxXQUNEaEUsR0FBTyxxREFDWCxJQUlKdk0sRUFBU29ULEVBQWdCNzdCLElBQ3pCZzVCLEVBQVM2QyxFQUFnQmxoQixLQUU3QixJQUFJcWhCLEVBQVUvSixLQUNSLEtBQ0EsSUFBSWdLLEdBQVFsSixHQUFpQnRLLEVBQVFnRyxFQUFNLENBQUV5TixNQUFNLElBQ3JERixHQUFXRixJQUNYRSxFQUFRckYsUUFBVW1GLEVBQWFuRixRQUMvQnFGLEVBQVFsRixVQUFZZ0YsRUFBYWhGLFdBRXJDLElBQUlyMkIsRUFBTSxDQUdObTJCLE9BQVFvRixFQUNSLFNBQUk3OUIsR0FDQSxPQUFJNjlCLEdBQ0lBLEVBQVFHLE9BQ1JILEVBQVFJLFdBRVJoRyxHQUFJbGpDLFNBQ0FrakMsR0FBSWxqQyxPQUFPeWpDLFNBQ1hQLEdBQUlsakMsT0FBT3lqQyxRQUFRLENBQ2ZDLE9BQVFSLEdBQUlsakMsT0FDWkEsT0FBUXVOLEVBQ1IvQixLQUFNLE1BQ05xSixJQUFLLFVBR2JpMEIsRUFBUXhGLFVBRUx3RixFQUFRNzlCLE9BR1JzcUIsR0FFZixFQUNBLFNBQUl0cUIsQ0FBTWc3QixHQUNOSCxFQUFPRyxFQUNYLEdBSUosT0FGQW5JLEVBQUl2d0IsRUFBSzQ1QixJQUFTLEdBQ2xCckosRUFBSXZ3QixFQUFLLGlCQUFrRHM3QixHQUNwRHQ3QixDQUNYLENBS0ksSUFBSTQ3QixHQUFTOUssSUFBYW51QixPQUFPOHNCLFlBRTdCbU0sSUFFQUEsR0FBT25CLE1BRVBtQixHQUFPbEIsU0FFUGtCLEdBQU9DLFlBRVBELEdBQU9FLGdCQUNQckIsR0FBTyxTQUFVbFcsR0FBTyxPQUFPcVgsR0FBT25CLEtBQUtsVyxFQUFNLEVBQ2pEbVcsR0FBVSxTQUFVdmlDLEVBQU00akMsRUFBVUMsR0FDaENKLEdBQU9sQixRQUFRdmlDLEVBQU00akMsRUFBVUMsR0FDL0JKLEdBQU9DLFdBQVdFLEdBQ2xCSCxHQUFPQyxXQUFXRyxFQUV0QixHQUlSLElBQUlDLEdBQWlCdFAsR0FBTyxTQUFVeDBCLEdBQ2xDLElBQUkrakMsRUFBNkIsTUFBbkIvakMsRUFBSzZhLE9BQU8sR0FFdEIrYixFQUEwQixPQUQ5QjUyQixFQUFPK2pDLEVBQVUvakMsRUFBSzBOLE1BQU0sR0FBSzFOLEdBQ2pCNmEsT0FBTyxHQUVuQjBNLEVBQTZCLE9BRGpDdm5CLEVBQU80MkIsRUFBTzUyQixFQUFLME4sTUFBTSxHQUFLMU4sR0FDWDZhLE9BQU8sR0FFMUIsTUFBTyxDQUNIN2EsS0FGSkEsRUFBT3VuQixFQUFVdm5CLEVBQUswTixNQUFNLEdBQUsxTixFQUc3QjQyQixLQUFNQSxFQUNOclAsUUFBU0EsRUFDVHdjLFFBQVNBLEVBRWpCLElBQ0EsU0FBU0MsR0FBZ0JDLEVBQUsxSixHQUMxQixTQUFTMkosSUFDTCxJQUFJRCxFQUFNQyxFQUFRRCxJQUNsQixJQUFJdlIsRUFBUXVSLEdBUVIsT0FBT0UsR0FBd0JGLEVBQUssS0FBTTU3QixVQUFXa3lCLEVBQUksZ0JBTnpELElBREEsSUFBSTBCLEVBQVNnSSxFQUFJdjJCLFFBQ1IxTCxFQUFJLEVBQUdBLEVBQUlpNkIsRUFBT3BqQyxPQUFRbUosSUFDL0JtaUMsR0FBd0JsSSxFQUFPajZCLEdBQUksS0FBTXFHLFVBQVdreUIsRUFBSSxlQU9wRSxDQUVBLE9BREEySixFQUFRRCxJQUFNQSxFQUNQQyxDQUNYLENBQ0EsU0FBU0UsR0FBZ0I1cUMsRUFBSTZxQyxFQUFPamtDLEVBQUtkLEVBQVFnbEMsRUFBbUIvSixHQUNoRSxJQUFJdjZCLEVBQU11a0MsRUFBS0MsRUFBS3YxQixFQUNwQixJQUFLalAsS0FBUXhHLEVBQ1QrcUMsRUFBTS9xQyxFQUFHd0csR0FDVHdrQyxFQUFNSCxFQUFNcmtDLEdBQ1ppUCxFQUFRNjBCLEdBQWU5akMsR0FDbkIyeUIsRUFBUTRSLEdBQ1JuSSxHQUFPLDhCQUErQjNoQixPQUFPeEwsRUFBTWpQLEtBQU0sV0FBY2tuQixPQUFPcWQsR0FBTWhLLEdBRS9FNUgsRUFBUTZSLElBQ1Q3UixFQUFRNFIsRUFBSU4sT0FDWk0sRUFBTS9xQyxFQUFHd0csR0FBUWdrQyxHQUFnQk8sRUFBS2hLLElBRXRDekgsRUFBTzdqQixFQUFNMm5CLFFBQ2IyTixFQUFNL3FDLEVBQUd3RyxHQUFRc2tDLEVBQWtCcjFCLEVBQU1qUCxLQUFNdWtDLEVBQUt0MUIsRUFBTXNZLFVBRTlEbm5CLEVBQUk2TyxFQUFNalAsS0FBTXVrQyxFQUFLdDFCLEVBQU1zWSxRQUFTdFksRUFBTTgwQixRQUFTOTBCLEVBQU1xakIsU0FFcERpUyxJQUFRQyxJQUNiQSxFQUFJUCxJQUFNTSxFQUNWL3FDLEVBQUd3RyxHQUFRd2tDLEdBR25CLElBQUt4a0MsS0FBUXFrQyxFQUNMMVIsRUFBUW41QixFQUFHd0csS0FFWFYsR0FEQTJQLEVBQVE2MEIsR0FBZTlqQyxJQUNWQSxLQUFNcWtDLEVBQU1ya0MsR0FBT2lQLEVBQU1zWSxRQUdsRCxDQUVBLFNBQVNrZCxHQUFlck0sRUFBS3NNLEVBQVNsZ0IsR0FJbEMsSUFBSTBmLEVBSEE5TCxhQUFldUMsS0FDZnZDLEVBQU1BLEVBQUkvL0IsS0FBS21zQixPQUFTNFQsRUFBSS8vQixLQUFLbXNCLEtBQU8sQ0FBQyxJQUc3QyxJQUFJbWdCLEVBQVV2TSxFQUFJc00sR0FDbEIsU0FBU0UsSUFDTHBnQixFQUFLOWIsTUFBTWpRLEtBQU00UCxXQUdqQityQixFQUFTOFAsRUFBUUQsSUFBS1csRUFDMUIsQ0FDSWpTLEVBQVFnUyxHQUVSVCxFQUFVRixHQUFnQixDQUFDWSxJQUl2Qi9SLEVBQU04UixFQUFRVixNQUFRblIsRUFBTzZSLEVBQVFFLFNBRXJDWCxFQUFVUyxHQUNGVixJQUFJL2tDLEtBQUswbEMsR0FJakJWLEVBQVVGLEdBQWdCLENBQUNXLEVBQVNDLElBRzVDVixFQUFRVyxRQUFTLEVBQ2pCek0sRUFBSXNNLEdBQVdSLENBQ25CLENBRUEsU0FBU1ksR0FBMEJ6c0MsRUFBTXNoQyxFQUFNdk4sR0FJM0MsSUFBSTJZLEVBQWNwTCxFQUFLcHFCLFFBQVFuWCxNQUMvQixJQUFJdTZCLEVBQVFvUyxHQU
3FaLENBR0EsSUFBSW5QLEVBQU0sQ0FBQyxFQUNQL0UsRUFBUXg0QixFQUFLdzRCLE1BQU96NEIsRUFBUUMsRUFBS0QsTUFDckMsR0FBSXk2QixFQUFNaEMsSUFBVWdDLEVBQU16NkIsR0FDdEIsSUFBSyxJQUFJK1csS0FBTzQxQixFQUFhLENBQ3pCLElBQUlDLEVBQVNqUSxFQUFVNWxCLEdBRWY4MUIsRUFBaUI5MUIsRUFBSTJMLGNBQ3JCM0wsSUFBUTgxQixHQUFrQnBVLEdBQVMwRCxFQUFPMUQsRUFBT29VLElBQ2pEQyxHQUFJLFNBQVV6cUIsT0FBT3dxQixFQUFnQiw2QkFDakMsR0FBR3hxQixPQUFPMHFCLEdBRVYvWSxHQUFPdU4sR0FBTyxtQ0FDZCxLQUFNbGYsT0FBT3RMLEVBQUssT0FKbEIsa0lBT0EsdUNBQXdDc0wsT0FBT3VxQixFQUFRLGtCQUFvQnZxQixPQUFPdEwsRUFBSyxPQUduR2kyQixHQUFVeFAsRUFBS3g5QixFQUFPK1csRUFBSzYxQixHQUFRLElBQy9CSSxHQUFVeFAsRUFBSy9FLEVBQU8xaEIsRUFBSzYxQixHQUFRLEVBQzNDLENBRUosT0FBT3BQLENBdkJQLENBd0JKLENBQ0EsU0FBU3dQLEdBQVV4UCxFQUFLeVAsRUFBTWwyQixFQUFLNjFCLEVBQVFNLEdBQ3ZDLEdBQUl6UyxFQUFNd1MsR0FBTyxDQUNiLEdBQUk5USxFQUFPOFEsRUFBTWwyQixHQUtiLE9BSkF5bUIsRUFBSXptQixHQUFPazJCLEVBQUtsMkIsR0FDWG0yQixVQUNNRCxFQUFLbDJCLElBRVQsRUFFTixHQUFJb2xCLEVBQU84USxFQUFNTCxHQUtsQixPQUpBcFAsRUFBSXptQixHQUFPazJCLEVBQUtMLEdBQ1hNLFVBQ01ELEVBQUtMLElBRVQsQ0FFZixDQUNBLE9BQU8sQ0FDWCxDQWFBLFNBQVNPLEdBQXdCcHlCLEdBQzdCLElBQUssSUFBSW5SLEVBQUksRUFBR0EsRUFBSW1SLEVBQVN0YSxPQUFRbUosSUFDakMsR0FBSTB3QixFQUFRdmYsRUFBU25SLElBQ2pCLE9BQU84RyxNQUFNUCxVQUFVa1MsT0FBTy9SLE1BQU0sR0FBSXlLLEdBR2hELE9BQU9BLENBQ1gsQ0FLQSxTQUFTcXlCLEdBQWtCcnlCLEdBQ3ZCLE9BQU82ZixFQUFZN2YsR0FDYixDQUFDMm9CLEdBQWdCM29CLElBQ2pCdWYsRUFBUXZmLEdBQ0pzeUIsR0FBdUJ0eUIsUUFDdkJ6SSxDQUNkLENBQ0EsU0FBU2c3QixHQUFXemQsR0FDaEIsT0FBTzRLLEVBQU01SyxJQUFTNEssRUFBTTVLLEVBQUs1c0IsT0FBUzAzQixFQUFROUssRUFBS3VULFVBQzNELENBQ0EsU0FBU2lLLEdBQXVCdHlCLEVBQVV3eUIsR0FDdEMsSUFDSTNqQyxFQUFHcUYsRUFBR3UrQixFQUFXQyxFQURqQmpRLEVBQU0sR0FFVixJQUFLNXpCLEVBQUksRUFBR0EsRUFBSW1SLEVBQVN0YSxPQUFRbUosSUFFekIyd0IsRUFESnRyQixFQUFJOEwsRUFBU25SLEtBQ2tCLGtCQUFOcUYsSUFHekJ3K0IsRUFBT2pRLEVBRFBnUSxFQUFZaFEsRUFBSS84QixPQUFTLEdBR3JCNjVCLEVBQVFyckIsR0FDSkEsRUFBRXhPLE9BQVMsSUFHUDZzQyxJQUZKcitCLEVBQUlvK0IsR0FBdUJwK0IsRUFBRyxHQUFHb1QsT0FBT2tyQixHQU
3FlLEdBQUksS0FBS2xyQixPQUFPelksS0FFdEQsS0FBTzBqQyxHQUFXRyxLQUMvQmpRLEVBQUlnUSxHQUFhOUosR0FBZ0IrSixFQUFLeHFDLEtBQU9nTSxFQUFFLEdBQUdoTSxNQUNsRGdNLEVBQUV5K0IsU0FFTmxRLEVBQUkxMkIsS0FBS3dKLE1BQU1rdEIsRUFBS3Z1QixJQUduQjJyQixFQUFZM3JCLEdBQ2JxK0IsR0FBV0csR0FJWGpRLEVBQUlnUSxHQUFhOUosR0FBZ0IrSixFQUFLeHFDLEtBQU9nTSxHQUVsQyxLQUFOQSxHQUVMdXVCLEVBQUkxMkIsS0FBSzQ4QixHQUFnQnowQixJQUl6QnErQixHQUFXcitCLElBQU1xK0IsR0FBV0csR0FFNUJqUSxFQUFJZ1EsR0FBYTlKLEdBQWdCK0osRUFBS3hxQyxLQUFPZ00sRUFBRWhNLE9BSTNDeTNCLEVBQU8zZixFQUFTNHlCLFdBQ2hCbFQsRUFBTXhyQixFQUFFK2tCLE1BQ1J1RyxFQUFRdHJCLEVBQUU4SCxNQUNWMGpCLEVBQU04UyxLQUNOdCtCLEVBQUU4SCxJQUFNLFVBQVVzTCxPQUFPa3JCLEVBQWEsS0FBS2xyQixPQUFPelksRUFBRyxPQUV6RDR6QixFQUFJMTJCLEtBQUttSSxLQUlyQixPQUFPdXVCLENBQ1gsQ0FFQSxJQUFJb1EsR0FBbUIsRUFDbkJDLEdBQW1CLEVBR3ZCLFNBQVNDLEdBQWdCckwsRUFBU3pPLEVBQUsvekIsRUFBTThhLEVBQVVnekIsRUFBbUJDLEdBU3RFLE9BUkkxVCxFQUFRcjZCLElBQVMyNkIsRUFBWTM2QixNQUM3Qjh0QyxFQUFvQmh6QixFQUNwQkEsRUFBVzlhLEVBQ1hBLE9BQU9xUyxHQUVQb29CLEVBQU9zVCxLQUNQRCxFQUFvQkYsSUFFakIza0IsR0FBZXVaLEVBQVN6TyxFQUFLL3pCLEVBQU04YSxFQUFVZ3pCLEVBQ3hELENBQ0EsU0FBUzdrQixHQUFldVosRUFBU3pPLEVBQUsvekIsRUFBTThhLEVBQVVnekIsR0FDbEQsR0FBSXRULEVBQU14NkIsSUFBU3c2QixFQUFNeDZCLEVBQUt3bUMsUUFFMUIsT0FEQXpDLEdBQU8sbURBQW1EM2hCLE9BQU8yQyxLQUFLQyxVQUFVaGxCLEdBQU8sTUFBUSx5REFBMER3aUMsR0FDbEpnQixLQU1YLEdBSEloSixFQUFNeDZCLElBQVN3NkIsRUFBTXg2QixFQUFLZ3VDLE1BQzFCamEsRUFBTS96QixFQUFLZ3VDLEtBRVZqYSxFQUVELE9BQU95UCxLQW1CWCxJQUFJRyxFQUFPaEIsRUFDWCxHQWpCSW5JLEVBQU14NkIsSUFBU3c2QixFQUFNeDZCLEVBQUs4VyxPQUFTNmpCLEVBQVkzNkIsRUFBSzhXLE1BQ3BEaXRCLEdBQU8sMkVBQ2lDdkIsR0FHeENuSSxFQUFRdmYsSUFBYThmLEVBQVc5ZixFQUFTLE9BQ3pDOWEsRUFBT0EsR0FBUSxDQUFDLEdBQ1hpdUMsWUFBYyxDQUFFM3BCLFFBQVN4SixFQUFTLElBQ3ZDQSxFQUFTdGEsT0FBUyxHQUVsQnN0QyxJQUFzQkYsR0FDdEI5eUIsRUFBV3F5QixHQUFrQnJ5QixHQUV4Qmd6QixJQUFzQkgsS0FDM0I3eUIsRUFBV295QixHQUF3QnB5QixJQUdwQixpQkFBUmlaLEVBQWtCLENBQ3pCLElBQUl1TixPQUFPLEVBQ1hxQixFQUFNSCxFQUFRMEwsUUFBVTFMLEVBQVEwTCxPQUFPdkwsSUFBT3h4QixFQUFPcXVCLGdCQUFnQnpMLEdBQ2pFNWlCLEVBQU9rdUIsY0FBY3RMLElBRWpCeUcsRUFBTXg2QixJQUNOdzZCLEVBQU14NkIsRUFBS211QyxXQUNFLGNBQWJudUMsRUFBSyt6QixLQUNMZ1EsR0FBTyxpRkFBaUYzaEIsT0FBTzJSLEVBQUssTUFBT3lPLEdBRS9HbUIsRUFBUSxJQUFJckIsR0FBTW54QixFQUFPc3VCLHFCQUFxQjFMLEdBQU0vekIsRUFBTThhLE9BQVV6SSxPQUFXQSxFQUFXbXdCLElBVzFGbUIsRUFUTzNqQyxHQUFTQSxFQUFLb3VDLE1BQ3JCNVQsRUFBTzhHLEVBQU8rTSxHQUFhN0wsRUFBUWdDLFNBQVUsYUFBY3pRLElBUW5ELElBQUl1TyxHQUFNdk8sRUFBSy96QixFQUFNOGEsT0FBVXpJLE9BQVdBLEVBQVdtd0IsR0FOckQ4TCxHQUFnQmhOLEVBQU10aEMsRUFBTXdpQyxFQUFTMW5CLEVBQVVpWixFQVEvRCxNQUdJNFAsRUFBUTJLLEdBQWdCdmEsRUFBSy96QixFQUFNd2lDLEVBQVMxbkIsR0FFaEQsT0FBSXVmLEVBQVFzSixHQUNEQSxFQUVGbkosRUFBTW1KLElBQ1BuSixFQUFNbUksSUFDTjRMLEdBQVE1SyxFQUFPaEIsR0FDZm5JLEVBQU14NkIsSUFDTnd1QyxHQUFxQnh1QyxHQUNsQjJqQyxHQUdBSCxJQUVmLENBQ0EsU0FBUytLLEdBQVE1SyxFQUFPaEIsRUFBSThMLEdBT3hCLEdBTkE5SyxFQUFNaEIsR0FBS0EsRUFDTyxrQkFBZGdCLEVBQU01UCxNQUVONE8sT0FBS3R3QixFQUNMbzhCLEdBQVEsR0FFUmpVLEVBQU1tSixFQUFNN29CLFVBQ1osSUFBSyxJQUFJblIsRUFBSSxFQUFHOGEsRUFBSWtmLEVBQU03b0IsU0FBU3RhLE9BQVFtSixFQUFJOGEsRUFBRzlhLElBQUssQ0FDbkQsSUFBSWdjLEVBQVFnZSxFQUFNN29CLFNBQVNuUixHQUN2QjZ3QixFQUFNN1UsRUFBTW9PLE9BQ1h1RyxFQUFRM1UsRUFBTWdkLEtBQVFsSSxFQUFPZ1UsSUFBd0IsUUFBZDlvQixFQUFNb08sTUFDOUN3YSxHQUFRNW9CLEVBQU9nZCxFQUFJOEwsRUFFM0IsQ0FFUixDQUlBLFNBQVNELEdBQXFCeHVDLEdBQ3RCNjZCLEVBQVM3NkIsRUFBS3NTLFFBQ2RvOEIsR0FBUzF1QyxFQUFLc1MsT0FFZHVvQixFQUFTNzZCLEVBQUsydUMsUUFDZEQsR0FBUzF1QyxFQUFLMnVDLE1BRXRCLENBS0EsU0FBU0MsR0FBVzVpQixFQUFLdU0sR0FDckIsSUFBZ0I1dUIsRUFBRzhhLEVBQUdtUyxFQUFNOWYsRUFBeEJxbUIsRUFBTSxLQUNWLEdBQUk5QyxFQUFRck8sSUFBdUIsaUJBQVJBLEVBRXZCLElBREFtUixFQUFNLElBQUkxc0IsTUFBTXViLEVBQUl4ckIsUUFDZm1KLEVBQUksRUFBRzhhLEVBQUl1SCxFQUFJeHJCLE9BQVFtSixFQUFJOGEsRUFBRzlhLElBQy9Cd3pCLEVBQUl4ekIsR0FBSzR1QixFQUFPdk0sRUFBSXJpQixHQUFJQSxRQUczQixHQUFtQixpQkFBUnFpQixFQUVaLElBREFtUixFQUFNLElBQUkxc0IsTUFBTXViLEdBQ1hyaUIsRUFBSSxFQUFHQSxFQUFJcWlCLEVBQUtyaUIsSUFDakJ3ekIsRUFBSXh6QixHQUFLNHVCLEVBQU81dUIsRUFBSSxFQUFHQSxRQUcxQixHQUFJa3hCLEVBQVM3TyxHQUNkLEdBQUl3VixJQUFheFYsRUFBSXlWLE9BQU9vTixVQUFXLENBQ25DMVIsRUFBTSxHQUdOLElBRkEsSUFBSTBSLEVBQVc3aUIsRUFBSXlWLE9BQU9vTixZQUN0Qno0QixFQUFTeTRCLEVBQVNDLFFBQ2QxNEIsRUFBT3ZULE1BQ1hzNkIsRUFBSXQyQixLQUFLMHhCLEVBQU9uaUIsRUFBT2xKLE1BQU9pd0IsRU
3FBSTM4QixTQUNsQzRWLEVBQVN5NEIsRUFBU0MsTUFFMUIsTUFJSSxJQUZBbFksRUFBT25uQixPQUFPbW5CLEtBQUs1SyxHQUNuQm1SLEVBQU0sSUFBSTFzQixNQUFNbW1CLEVBQUtwMkIsUUFDaEJtSixFQUFJLEVBQUc4YSxFQUFJbVMsRUFBS3AyQixPQUFRbUosRUFBSThhLEVBQUc5YSxJQUNoQ21OLEVBQU04ZixFQUFLanRCLEdBQ1h3ekIsRUFBSXh6QixHQUFLNHVCLEVBQU92TSxFQUFJbFYsR0FBTUEsRUFBS25OLEdBUTNDLE9BSks2d0IsRUFBTTJDLEtBQ1BBLEVBQU0sSUFFVkEsRUFBSXVRLFVBQVcsRUFDUnZRLENBQ1gsQ0FLQSxTQUFTNFIsR0FBV3BuQyxFQUFNcW5DLEVBQWdCanZDLEVBQU9rdkMsR0FDN0MsSUFDSXhmLEVBREF5ZixFQUFlOXVDLEtBQUsrdUMsYUFBYXhuQyxHQUVqQ3VuQyxHQUVBbnZDLEVBQVFBLEdBQVMsQ0FBQyxFQUNka3ZDLElBQ0twVSxFQUFTb1UsSUFDVmxMLEdBQU8saURBQWtEM2pDLE1BRTdETCxFQUFRcTlCLEVBQU9BLEVBQU8sQ0FBQyxFQUFHNlIsR0FBYWx2QyxJQUUzQzB2QixFQUNJeWYsRUFBYW52QyxLQUNSNjZCLEVBQVdvVSxHQUFrQkEsSUFBbUJBLElBR3pEdmYsRUFDSXJ2QixLQUFLZ3ZDLE9BQU96bkMsS0FDUGl6QixFQUFXb1UsR0FBa0JBLElBQW1CQSxHQUU3RCxJQUFJL3NDLEVBQVNsQyxHQUFTQSxFQUFNc3ZDLEtBQzVCLE9BQUlwdEMsRUFDTzdCLEtBQUtrdkMsZUFBZSxXQUFZLENBQUVELEtBQU1wdEMsR0FBVXd0QixHQUdsREEsQ0FFZixDQUtBLFNBQVM4ZixHQUFjanFDLEdBQ25CLE9BQU8rb0MsR0FBYWp1QyxLQUFLb2tDLFNBQVUsVUFBV2wvQixHQUFJLElBQVNvNEIsQ0FDL0QsQ0FFQSxTQUFTOFIsR0FBY0MsRUFBUUMsR0FDM0IsT0FBSXJWLEVBQVFvVixJQUMyQixJQUE1QkEsRUFBTzkyQixRQUFRKzJCLEdBR2ZELElBQVdDLENBRTFCLENBTUEsU0FBU0MsR0FBY0MsRUFBYzk0QixFQUFLKzRCLEVBQWdCQyxFQUFjQyxHQUNwRSxJQUFJQyxFQUFnQjcrQixFQUFPaXVCLFNBQVN0b0IsSUFBUSs0QixFQUM1QyxPQUFJRSxHQUFrQkQsSUFBaUIzK0IsRUFBT2l1QixTQUFTdG9CLEdBQzVDMDRCLEdBQWNPLEVBQWdCRCxHQUVoQ0UsRUFDRVIsR0FBY1EsRUFBZUosR0FFL0JFLEVBQ0VwVCxFQUFVb1QsS0FBa0JoNUIsT0FFZnpFLElBQWpCdTlCLENBQ1gsQ0FLQSxTQUFTSyxHQUFnQmp3QyxFQUFNK3pCLEVBQUs3bUIsRUFBT2dqQyxFQUFRQyxHQUMvQyxHQUFJampDLEVBQ0EsR0FBSzJ0QixFQUFTM3RCLEdBR1QsQ0FDR210QixFQUFRbnRCLEtBQ1JBLEVBQVFvd0IsRUFBU3B3QixJQUVyQixJQUFJOC9CLE9BQU8sRUFDUHRXLEVBQVUsU0FBVTVmLEdBQ3BCLEdBQVksVUFBUkEsR0FBMkIsVUFBUkEsR0FBbUJnbEIsRUFBb0JobEIsR0FDMURrMkIsRUFBT2h0QyxNQUVOLENBQ0QsSUFBSXlOLEVBQU96TixFQUFLdzRCLE9BQVN4NEIsRUFBS3c0QixNQUFNL3FCLEtBQ3BDdS9CLEVBQ0lrRCxHQUFVLytCLEVBQU91dUIsWUFBWTNMLEVBQUt0bUIsRUFBTXFKLEdBQ2xDOVcsRUFBS293QyxXQUFhcHdDLEVBQUtvd0MsU0FBVyxDQUFDLEdBQ25DcHdDLEVBQUt3NEIsUUFBVXg0QixFQUFLdzRCLE1BQVEsQ0FBQyxFQUMzQyxDQUNBLElBQUk2WCxFQUFlL1QsRUFBU3hsQixHQUN4Qnc1QixFQUFnQjVULEVBQVU1bEIsR0FDeEJ1NUIsS0FBZ0JyRCxHQUFXc0QsS0FBaUJ0RCxJQUM5Q0EsRUFBS2wyQixHQUFPNUosRUFBTTRKLEdBQ2RxNUIsS0FDU253QyxFQUFLbUIsS0FBT25CLEVBQUttQixHQUFLLENBQUMsSUFDN0IsVUFBVWloQixPQUFPdEwsSUFBUSxTQUFVeTVCLEdBQ2xDcmpDLEVBQU00SixHQUFPeTVCLENBQ2pCLEdBR1osRUFDQSxJQUFLLElBQUl6NUIsS0FBTzVKLEVBQ1p3cEIsRUFBUTVmLEVBRWhCLE1BakNJaXRCLEdBQU8sMkRBQTREM2pDLE1BbUMzRSxPQUFPSixDQUNYLENBS0EsU0FBU3d3QyxHQUFhanRDLEVBQU9rdEMsR0FDekIsSUFBSXRVLEVBQVMvN0IsS0FBS3N3QyxlQUFpQnR3QyxLQUFLc3dDLGFBQWUsSUFDbkRDLEVBQU94VSxFQUFPNTRCLEdBR2xCLE9BQUlvdEMsSUFBU0YsR0FNYkcsR0FGQUQsRUFBT3hVLEVBQU81NEIsR0FBU25ELEtBQUtva0MsU0FBU3FNLGdCQUFnQnR0QyxHQUFPNk0sS0FBS2hRLEtBQUt1a0MsYUFBY3ZrQyxLQUFLeXhCLEdBQUl6eEIsTUFFMUUsYUFBYWdpQixPQUFPN2UsSUFBUSxHQUxwQ290QyxDQU9mLENBS0EsU0FBU0csR0FBU0gsRUFBTXB0QyxFQUFPdVQsR0FFM0IsT0FEQTg1QixHQUFhRCxFQUFNLFdBQVd2dUIsT0FBTzdlLEdBQU82ZSxPQUFPdEwsRUFBTSxJQUFJc0wsT0FBT3RMLEdBQU8sS0FBSyxHQUN6RTY1QixDQUNYLENBQ0EsU0FBU0MsR0FBYUQsRUFBTTc1QixFQUFLdXNCLEdBQzdCLEdBQUloSixFQUFRc1csR0FDUixJQUFLLElBQUlobkMsRUFBSSxFQUFHQSxFQUFJZ25DLEVBQUtud0MsT0FBUW1KLElBQ3pCZ25DLEVBQUtobkMsSUFBeUIsaUJBQVpnbkMsRUFBS2huQyxJQUN2Qm9uQyxHQUFlSixFQUFLaG5DLEdBQUksR0FBR3lZLE9BQU90TCxFQUFLLEtBQUtzTCxPQUFPelksR0FBSTA1QixRQUsvRDBOLEdBQWVKLEVBQU03NUIsRUFBS3VzQixFQUVsQyxDQUNBLFNBQVMwTixHQUFlbmhCLEVBQU05WSxFQUFLdXNCLEdBQy9CelQsRUFBS3FULFVBQVcsRUFDaEJyVCxFQUFLOVksSUFBTUEsRUFDWDhZLEVBQUt5VCxPQUFTQSxDQUNsQixDQUVBLFNBQVMyTixHQUFvQmh4QyxFQUFNa04sR0FDL0IsR0FBSUEsRUFDQSxHQUFLOHRCLEVBQWM5dEIsR0FHZCxDQUNELElBQUkvTCxFQUFNbkIsRUFBS21CLEdBQUtuQixFQUFLbUIsR0FBS2k4QixFQUFPLENBQUMsRUFBR3A5QixFQUFLbUIsSUFBTSxDQUFDLEVBQ3JELElBQUssSUFBSTJWLEtBQU81SixFQUFPLENBQ25CLElBQUkrakMsRUFBVzl2QyxFQUFHMlYsR0FDZG82QixFQUFPaGtDLEVBQU00SixHQUNqQjNWLEVBQUcyVixHQUFPbTZCLEVBQVcsR0FBRzd1QixPQUFPNnVCLEVBQVVDLEdBQVFBLENBQ3JELENBQ0osTUFUSW5OLEdBQU8sZ0RBQWlEM2pDLE1BV2hFLE9BQU9KLENBQ1gsQ0FFQSxTQUFTbXhDLEdBQW1CdkYsRUFBS3JPLEVBRWpDNlQsRUFBZ0JDLEdBQ1o5VCxFQUFNQSxHQUFPLENBQUUrVCxTQUFVRixHQUN6QixJQUFLLElBQUl6bkMsRUFBSSxFQUFHQSxFQUFJaWlDLEVBQUlwckMsT0FBUW1KLElBQUssQ0FDakMsSUFBSTBsQyxFQUFPekQsRUFBSWppQyxHQUNYMHdCLEVBQVFnVixHQUNSOEIsR0FBbUI5QixFQUFNOVIsRUFBSzZULEdBRXpCL0IsSUFHREEsRUFBS3JOLFFB
3RUxxTixFQUFLeDlCLEdBQUdtd0IsT0FBUSxHQUVwQnpFLEVBQUk4UixFQUFLdjRCLEtBQU91NEIsRUFBS3g5QixHQUU3QixDQUlBLE9BSEl3L0IsSUFDQTlULEVBQUlnVSxLQUFPRixHQUVSOVQsQ0FDWCxDQUdBLFNBQVNpVSxHQUFnQkMsRUFBU0MsR0FDOUIsSUFBSyxJQUFJL25DLEVBQUksRUFBR0EsRUFBSStuQyxFQUFPbHhDLE9BQVFtSixHQUFLLEVBQUcsQ0FDdkMsSUFBSW1OLEVBQU00NkIsRUFBTy9uQyxHQUNFLGlCQUFSbU4sR0FBb0JBLEVBQzNCMjZCLEVBQVFDLEVBQU8vbkMsSUFBTStuQyxFQUFPL25DLEVBQUksR0FFbkIsS0FBUm1OLEdBQXNCLE9BQVJBLEdBRW5CaXRCLEdBQU8sMkVBQTJFM2hCLE9BQU90TCxHQUFNMVcsS0FFdkcsQ0FDQSxPQUFPcXhDLENBQ1gsQ0FJQSxTQUFTRSxHQUFnQnprQyxFQUFPMGtDLEdBQzVCLE1BQXdCLGlCQUFWMWtDLEVBQXFCMGtDLEVBQVMxa0MsRUFBUUEsQ0FDeEQsQ0FFQSxTQUFTMmtDLEdBQXFCNXZDLEdBQzFCQSxFQUFPNnZDLEdBQUtoQixHQUNaN3VDLEVBQU84dkMsR0FBS3RXLEVBQ1p4NUIsRUFBTyt2QyxHQUFLNWlDLEVBQ1puTixFQUFPZ3dDLEdBQUtyRCxHQUNaM3NDLEVBQU9pd0MsR0FBS25ELEdBQ1o5c0MsRUFBT2t3QyxHQUFLclUsRUFDWjc3QixFQUFPdTBCLEdBQUs4SCxFQUNacjhCLEVBQU9td0MsR0FBSzVCLEdBQ1p2dUMsRUFBT293QyxHQUFLOUMsR0FDWnR0QyxFQUFPcXdDLEdBQUszQyxHQUNaMXRDLEVBQU8ydkIsR0FBS3FlLEdBQ1podUMsRUFBT3N3QyxHQUFLOU8sR0FDWnhoQyxFQUFPdXdDLEdBQUtoUCxHQUNadmhDLEVBQU93d0MsR0FBS3RCLEdBQ1psdkMsRUFBT3l3QyxHQUFLMUIsR0FDWi91QyxFQUFPNnZCLEdBQUswZixHQUNadnZDLEVBQU8wd0MsR0FBS2hCLEVBQ2hCLENBS0EsU0FBU2lCLEdBQWE5M0IsRUFBVTBuQixHQUM1QixJQUFLMW5CLElBQWFBLEVBQVN0YSxPQUN2QixNQUFPLENBQUMsRUFHWixJQURBLElBQUlxeUMsRUFBUSxDQUFDLEVBQ0pscEMsRUFBSSxFQUFHOGEsRUFBSTNKLEVBQVN0YSxPQUFRbUosRUFBSThhLEVBQUc5YSxJQUFLLENBQzdDLElBQUlnYyxFQUFRN0ssRUFBU25SLEdBQ2pCM0osRUFBTzJsQixFQUFNM2xCLEtBT2pCLEdBTElBLEdBQVFBLEVBQUt3NEIsT0FBU3g0QixFQUFLdzRCLE1BQU02VyxhQUMxQnJ2QyxFQUFLdzRCLE1BQU02VyxLQUlqQjFwQixFQUFNNmMsVUFBWUEsR0FBVzdjLEVBQU1pZCxZQUFjSixJQUNsRHhpQyxHQUNhLE1BQWJBLEVBQUtxdkMsTUFXSndELEVBQU12dUIsVUFBWXV1QixFQUFNdnVCLFFBQVUsS0FBS3pkLEtBQUs4ZSxPQVgxQixDQUNuQixJQUFJbXRCLEVBQVM5eUMsRUFBS3F2QyxLQUNkQSxFQUFPd0QsRUFBTUMsS0FBWUQsRUFBTUMsR0FBVSxJQUMzQixhQUFkbnRCLEVBQU1vTyxJQUNOc2IsRUFBS3hvQyxLQUFLd0osTUFBTWcvQixFQUFNMXBCLEVBQU03SyxVQUFZLElBR3hDdTBCLEVBQUt4b0MsS0FBSzhlLEVBRWxCLENBSUosQ0FFQSxJQUFLLElBQUlvdEIsS0FBVUYsRUFDWEEsRUFBTUUsR0FBUTVVLE1BQU02VSxZQUNiSCxFQUFNRSxHQUdyQixPQUFPRixDQUNYLENBQ0EsU0FBU0csR0FBYXBqQixHQUNsQixPQUFRQSxFQUFLdVQsWUFBY3ZULEVBQUs4UyxjQUErQixNQUFkOVMsRUFBSzVzQixJQUMxRCxDQUVBLFNBQVN1Z0MsR0FBbUIzVCxHQUV4QixPQUFPQSxFQUFLdVQsV0FBYXZULEVBQUs4UyxZQUNsQyxDQUVBLFNBQVN1USxHQUFxQkMsRUFBU2pGLEVBQWFrRixFQUFhQyxHQUM3RCxJQUFJN1YsRUFDQThWLEVBQWlCNWpDLE9BQU9tbkIsS0FBS3VjLEdBQWEzeUMsT0FBUyxFQUNuRDh5QyxFQUFXckYsSUFBZ0JBLEVBQVlxRCxTQUFXK0IsRUFDbER2OEIsRUFBTW0zQixHQUFlQSxFQUFZc0QsS0FDckMsR0FBS3RELEVBR0EsSUFBSUEsRUFBWXNGLFlBRWpCLE9BQU90RixFQUFZc0YsWUFFbEIsR0FBSUQsR0FDTEYsR0FDQUEsSUFBb0JqWixHQUNwQnJqQixJQUFRczhCLEVBQWdCN0IsT0FDdkI4QixJQUNBRCxFQUFnQkksV0FHakIsT0FBT0osRUFJUCxJQUFLLElBQUlLLEtBRFRsVyxFQUFNLENBQUMsRUFDVzBRLEVBQ1ZBLEVBQVl3RixJQUF1QixNQUFiQSxFQUFNLEtBQzVCbFcsRUFBSWtXLEdBQVNDLEdBQW9CUixFQUFTQyxFQUFhTSxFQUFPeEYsRUFBWXdGLElBR3RGLE1BdkJJbFcsRUFBTSxDQUFDLEVBeUJYLElBQUssSUFBSW9XLEtBQVNSLEVBQ1JRLEtBQVNwVyxJQUNYQSxFQUFJb1csR0FBU0MsR0FBZ0JULEVBQWFRLElBV2xELE9BTkkxRixHQUFleCtCLE9BQU8rM0IsYUFBYXlHLEtBQ25DQSxFQUFZc0YsWUFBY2hXLEdBRTlCd0MsRUFBSXhDLEVBQUssVUFBVytWLEdBQ3BCdlQsRUFBSXhDLEVBQUssT0FBUXptQixHQUNqQmlwQixFQUFJeEMsRUFBSyxhQUFjOFYsR0FDaEI5VixDQUNYLENBQ0EsU0FBU21XLEdBQW9CeFIsRUFBSWlSLEVBQWFyOEIsRUFBS2pGLEdBQy9DLElBQUlnaUMsRUFBYSxXQUNiLElBQUkzSCxFQUFNcEssR0FDVkcsR0FBbUJDLEdBQ25CLElBQUkzRSxFQUFNdnRCLFVBQVV4UCxPQUFTcVIsRUFBR3hCLE1BQU0sS0FBTUwsV0FBYTZCLEVBQUcsQ0FBQyxHQUt6RDh4QixHQUpKcEcsRUFDSUEsR0FBc0IsaUJBQVJBLElBQXFCbEQsRUFBUWtELEdBQ3JDLENBQUNBLEdBQ0Q0UCxHQUFrQjVQLEtBQ1RBLEVBQUksR0FFdkIsT0FEQTBFLEdBQW1CaUssR0FDWjNPLEtBQ0RvRyxHQUNrQixJQUFmcEcsRUFBSS84QixRQUFnQm1qQyxFQUFNUixZQUFjSSxHQUFtQkksU0FDOUR0eEIsRUFDQWtyQixDQUNWLEVBV0EsT0FQSTFyQixFQUFHbXdCLE9BQ0h2eUIsT0FBTzZiLGVBQWU2bkIsRUFBYXI4QixFQUFLLENBQ3BDL0gsSUFBSzhrQyxFQUNMamMsWUFBWSxFQUNacUksY0FBYyxJQUdmNFQsQ0FDWCxDQUNBLFNBQVNELEdBQWdCZixFQUFPLzdCLEdBQzVCLE9BQU8sV0FBYyxPQUFPKzdCLEVBQU0vN0IsRUFBTSxDQUM1QyxDQUVBLFNBQVNnOUIsR0FBVTVSLEdBQ2YsSUFBSWhyQixFQUFVZ3JCLEVBQUdzQyxTQUNidVAsRUFBUTc4QixFQUFRNjhCLE1BQ3BCLEdBQUlBLEVBQU8sQ0FDUCxJQUFJblgsRUFBT3NGLEVBQUc4UixjQUFnQkMsR0FBbUIv
3UixHQUNqREQsR0FBbUJDLEdBQ25CNkQsS0FDQSxJQUFJbU8sRUFBY3BJLEdBQXdCaUksRUFBTyxLQUFNLENBQUM3UixFQUFHaVMsUUFBVTFMLEdBQWdCLENBQUMsR0FBSTdMLEdBQU1zRixFQUFJLFNBR3BHLEdBRkE4RCxLQUNBL0QsS0FDSXJILEVBQVdzWixHQUdYaDlCLEVBQVFxaEIsT0FBUzJiLE9BRWhCLEdBQUlyWixFQUFTcVosR0FRZCxHQU5JQSxhQUF1QjVSLElBQ3ZCeUIsR0FBTyxpRkFHWDdCLEVBQUdrUyxZQUFjRixFQUVaQSxFQUFZRyxNQVVaLENBRUQsSUFBSXJTLEVBQVNFLEVBQUdvUyxZQUFjLENBQUMsRUFDL0IsSUFBSyxJQUFJeDlCLEtBQU9vOUIsRUFDQSxVQUFScDlCLEdBQ0EreUIsR0FBbUI3SCxFQUFPa1MsRUFBYXA5QixFQUduRCxNQWpCSSxJQUFLLElBQUlBLEtBQU9vOUIsRUFDUHJVLEVBQVcvb0IsR0FJWml0QixHQUFPLDREQUhQOEYsR0FBbUIzSCxFQUFJZ1MsRUFBYXA5QixhQWlCM0J6RSxJQUFoQjZoQyxHQUNMblEsR0FBTyw4Q0FBOEMzaEIsT0FBdUIsT0FBaEI4eEIsRUFBdUIsY0FBZ0JBLEdBRTNHLENBQ0osQ0FDQSxTQUFTRCxHQUFtQi9SLEdBQ3hCLElBQUlxUyxHQUFlLEVBQ25CLE1BQU8sQ0FDSCxTQUFJL2IsR0FDQSxJQUFLMEosRUFBR3NTLFlBQWEsQ0FDakIsSUFBSXhTLEVBQVNFLEVBQUdzUyxZQUFjLENBQUMsRUFDL0J6VSxFQUFJaUMsRUFBTyxpQkFBaUIsR0FDNUJ5UyxHQUFlelMsRUFBT0UsRUFBR3dTLE9BQVF2YSxFQUFhK0gsRUFBSSxTQUN0RCxDQUNBLE9BQU9BLEVBQUdzUyxXQUNkLEVBQ0EsYUFBSUcsR0FLQSxPQUpLelMsRUFBRzBTLGlCQUVKSCxHQURhdlMsRUFBRzBTLGdCQUFrQixDQUFDLEVBQ2IxUyxFQUFHMlMsV0FBWTFhLEVBQWErSCxFQUFJLGNBRW5EQSxFQUFHMFMsZUFDZCxFQUNBLFNBQUkvQixHQUNBLE9BQU9pQyxHQUFlNVMsRUFDMUIsRUFDQTZTLEtBQU0vWCxFQUFPa0YsRUFBRy8rQixNQUFPKytCLEdBQ3ZCOFMsT0FBUSxTQUFVQyxHQUVOVixHQUNBeFEsR0FBTyxtREFBb0Q3QixHQUUvRHFTLEdBQWUsRUFFZlUsR0FDQXhsQyxPQUFPbW5CLEtBQUtxZSxHQUFTOTlCLFNBQVEsU0FBVUwsR0FDbkMsT0FBTyt5QixHQUFtQjNILEVBQUkrUyxFQUFTbitCLEVBQzNDLEdBRVIsRUFFUixDQUNBLFNBQVMyOUIsR0FBZXJtQyxFQUFJQyxFQUFNNm1DLEVBQU05b0MsRUFBVXFCLEdBQzlDLElBQUkwbkMsR0FBVSxFQUNkLElBQUssSUFBSXIrQixLQUFPekksRUFDTnlJLEtBQU8xSSxFQUlKQyxFQUFLeUksS0FBU28rQixFQUFLcCtCLEtBQ3hCcStCLEdBQVUsSUFKVkEsR0FBVSxFQUNWQyxHQUFnQmhuQyxFQUFJMEksRUFBSzFLLEVBQVVxQixJQU0zQyxJQUFLLElBQUlxSixLQUFPMUksRUFDTjBJLEtBQU96SSxJQUNUOG1DLEdBQVUsU0FDSC9tQyxFQUFHMEksSUFHbEIsT0FBT3ErQixDQUNYLENBQ0EsU0FBU0MsR0FBZ0JwVCxFQUFPbHJCLEVBQUsxSyxFQUFVcUIsR0FDM0NnQyxPQUFPNmIsZUFBZTBXLEVBQU9sckIsRUFBSyxDQUM5QjhnQixZQUFZLEVBQ1pxSSxjQUFjLEVBQ2RseEIsSUFBSyxXQUNELE9BQU8zQyxFQUFTcUIsR0FBTXFKLEVBQzFCLEdBRVIsQ0FDQSxTQUFTZytCLEdBQWU1UyxHQUlwQixPQUhLQSxFQUFHbVQsYUFDSkMsR0FBZ0JwVCxFQUFHbVQsWUFBYyxDQUFDLEVBQUluVCxFQUFHaU4sY0FFdENqTixFQUFHbVQsV0FDZCxDQUNBLFNBQVNDLEdBQWVsbkMsRUFBSUMsR0FDeEIsSUFBSyxJQUFJeUksS0FBT3pJLEVBQ1pELEVBQUcwSSxHQUFPekksRUFBS3lJLEdBRW5CLElBQUssSUFBSUEsS0FBTzFJLEVBQ04wSSxLQUFPekksVUFDRkQsRUFBRzBJLEVBR3RCLENBS0EsU0FBU3krQixLQUNMLE9BQU9DLEtBQWEzQyxLQUN4QixDQUtBLFNBQVM0QyxLQUNMLE9BQU9ELEtBQWFoZCxLQUN4QixDQU1BLFNBQVNrZCxLQUNMLE9BQU9GLEtBQWFiLFNBQ3hCLENBQ0EsU0FBU2EsS0FDQTFULElBQ0RpQyxHQUFPLGdEQUVYLElBQUk3QixFQUFLSixHQUNULE9BQU9JLEVBQUc4UixnQkFBa0I5UixFQUFHOFIsY0FBZ0JDLEdBQW1CL1IsR0FDdEUsQ0FNQSxTQUFTeVQsR0FBYzNTLEVBQUs3dkIsR0FDeEIsSUFBSXBULEVBQVFzNkIsRUFBUTJJLEdBQ2RBLEVBQUl2ZCxRQUFPLFNBQVVvdUIsRU
3FBWTVqQyxHQUFLLE9BQVM0akMsRUFBVzVqQyxHQUFLLENBQUMsRUFBSTRqQyxDQUFhLEdBQUcsQ0FBQyxHQUNyRjdRLEVBQ04sSUFBSyxJQUFJbHNCLEtBQU8zRCxFQUFVLENBQ3RCLElBQUl5aUMsRUFBTTcxQyxFQUFNK1csR0FDWjgrQixFQUNJdmIsRUFBUXViLElBQVFoYixFQUFXZ2IsR0FDM0I3MUMsRUFBTStXLEdBQU8sQ0FBRXJKLEtBQU1tb0MsRUFBS3R4QixRQUFTblIsRUFBUzJELElBRzVDOCtCLEVBQUl0eEIsUUFBVW5SLEVBQVMyRCxHQUdkLE9BQVI4K0IsRUFDTDcxQyxFQUFNK1csR0FBTyxDQUFFd04sUUFBU25SLEVBQVMyRCxJQUdqQ2l0QixHQUFPLHNCQUF1QjNoQixPQUFPdEwsRUFBSyx1Q0FFbEQsQ0FDQSxPQUFPL1csQ0FDWCxDQUVBLFNBQVM4MUMsR0FBVzNULEdBQ2hCQSxFQUFHNFQsT0FBUyxLQUNaNVQsRUFBR3dPLGFBQWUsS0FDbEIsSUFBSXg1QixFQUFVZ3JCLEVBQUdzQyxTQUNidVIsRUFBZTdULEVBQUdnTSxPQUFTaDNCLEVBQVE4K0IsYUFDbkNDLEVBQWdCRixHQUFlQSxFQUFZdlQsUUFDL0NOLEVBQUdrTixPQUFTd0QsR0FBYTE3QixFQUFRZy9CLGdCQUFpQkQsR0FDbEQvVCxFQUFHaU4sYUFBZTRHLEVBQ1o5QyxHQUFxQi9RLEVBQUdpVSxRQUFTSixFQUFZLzFDLEtBQUtpdUMsWUFBYS9MLEVBQUdrTixRQUNsRWpWLEVBTU4rSCxFQUFHclEsR0FBSyxTQUFVbGhCLEVBQUcyWCxFQUFHdFosRUFBRytOLEdBQUssT0FBTzh3QixHQUFnQjNMLEVBQUl2eEIsRUFBRzJYLEVBQUd0WixFQUFHK04sR0FBRyxFQUFRLEVBSS9FbWxCLEVBQUdvTixlQUFpQixTQUFVMytCLEVBQUcyWCxFQUFHdFosRUFBRytOLEdBQUssT0FBTzh3QixHQUFnQjNMLEVBQUl2eEIsRUFBRzJYLEVBQUd0WixFQUFHK04sR0FBRyxFQUFPLEVBRzFGLElBQUlxNUIsRUFBYUwsR0FBZUEsRUFBWS8xQyxLQUd4Q3FuQyxHQUFlbkYsRUFBSSxTQUFXa1UsR0FBY0EsRUFBVzVkLE9BQVUyQixHQUFhLFlBQ3pFa2MsSUFBNEJ0UyxHQUFPLHNCQUF1QjdCLEVBQy9ELElBQUcsR0FDSG1GLEdBQWVuRixFQUFJLGFBQWNockIsRUFBUW8vQixrQkFBb0JuYyxHQUFhLFlBQ3JFa2MsSUFBNEJ0UyxHQUFPLDBCQUEyQjdCLEVBQ25FLElBQUcsRUFFWCxDQUNBLElBMk1JcVUsR0E4R0FDLEdBelRBQyxHQUEyQixLQUMvQixTQUFTQyxHQUFZMWMsR0FFakI2WCxHQUFxQjdYLEVBQUk5cEIsV0FDekI4cEIsRUFBSTlwQixVQUFVd3BCLFVBQVksU0FBVTduQixHQUNoQyxPQUFPOGtDLEdBQVM5a0MsRUFBSXpSLEtBQ3hCLEVBQ0E0NUIsRUFBSTlwQixVQUFVMG1DLFFBQVUsV0FDcEIsSUFBSTFVLEVBQUs5aEMsS0FDTG9SLEVBQUswd0IsRUFBR3NDLFNBQVVqTSxFQUFTL21CLEVBQUcrbUIsT0FBUXlkLEVBQWV4a0MsRUFBR3drQyxhQUN4REEsR0FBZ0I5VCxFQUFHMlUsYUFDbkIzVSxFQUFHaU4sYUFBZThELEdBQXFCL1EsRUFBR2lVLFFBQVNILEVBQWFoMkMsS0FBS2l1QyxZQUFhL0wsRUFBR2tOLE9BQVFsTixFQUFHaU4sY0FDNUZqTixFQUFHbVQsYUFDSEMsR0FBZXBULEVBQUdtVCxZQUFhblQsRUFBR2lOLGVBSzFDak4sRUFBR2dNLE9BQVM4SCxFQUVaLElBRUlyUyxFQUZBbVQsRUFBV2hWLEdBQ1hpVixFQUFpQk4sR0FFckIsSUFDSXhVLEdBQW1CQyxHQUNuQnVVLEdBQTJCdlUsRUFDM0J5QixFQUFRcEwsRUFBT25vQixLQUFLOHhCLEVBQUd5QyxhQUFjekMsRUFBR29OLGVBQzVDLENBQ0EsTUFBT3p0QyxHQUtILEdBSkFtMUMsR0FBWW4xQyxFQUFHcWdDLEVBQUksVUFJZkEsRUFBR3NDLFNBQVN5UyxZQUNaLElBQ0l0VCxFQUFRekIsRUFBR3NDLFNBQVN5UyxZQUFZN21DLEtBQUs4eEIsRUFBR3lDLGFBQWN6QyxFQUFHb04sZUFBZ0J6dEMsRUFDN0UsQ0FDQSxNQUFPQSxHQUNIbTFDLEdBQVluMUMsRUFBR3FnQyxFQUFJLGVBQ25CeUIsRUFBUXpCLEVBQUc0VCxNQUNmLE1BR0FuUyxFQUFRekIsRUFBRzRULE1BRW5CLENBQ0EsUUFDSVcsR0FBMkJNLEVBQzNCOVUsR0FBbUI2VSxFQUN2QixDQWVBLE9BYkl6YyxFQUFRc0osSUFBMkIsSUFBakJBLEVBQU1uakMsU0FDeEJtakMsRUFBUUEsRUFBTSxJQUdaQSxhQUFpQnJCLEtBQ2ZqSSxFQUFRc0osSUFDUkksR0FBTyx1R0FDa0M3QixHQUU3Q3lCLEVBQVFILE1BR1pHLEVBQU12aEMsT0FBUzR6QyxFQUNSclMsQ0FDWCxDQUNKLENBRUEsU0FBU3VULEdBQVdDLEVBQU1DLEdBSXRCLE9BSElELEVBQUsxZixZQUFlK0osSUFBMEMsV0FBN0IyVixFQUFLMVYsT0FBTzRWLGdCQUM3Q0YsRUFBT0EsRUFBSzd5QixTQUVUdVcsRUFBU3NjLEdBQVFDLEVBQUtoYSxPQUFPK1osR0FBUUEsQ0FDaEQsQ0FDQSxTQUFTRyxHQUF1QnJnQixFQUFTajNCLEVBQU13aUMsRUFBUzFuQixFQUFVaVosR0FDOUQsSUFBSW5FLEVBQU80VCxLQUdYLE9BRkE1VCxFQUFLOFMsYUFBZXpMLEVBQ3BCckgsRUFBSzBULFVBQVksQ0FBRXRqQyxLQUFNQSxFQUFNd2lDLFFBQVNBLEVBQVMxbkIsU0FBVUEsRUFBVWlaLElBQUtBLEdBQ25FbkUsQ0FDWCxDQUNBLFNBQVMybkIsR0FBc0J0Z0IsRUFBU3VnQixHQUNwQyxHQUFJL2MsRUFBT3hELEVBQVFwSCxRQUFVMkssRUFBTXZELEVBQVF3Z0IsV0FDdkMsT0FBT3hnQixFQUFRd2dCLFVBRW5CLEdBQUlqZCxFQUFNdkQsRUFBUXlnQixVQUNkLE9BQU96Z0IsRUFBUXlnQixTQUVuQixJQUFJQyxFQUFRbEIsR0FLWixHQUpJa0IsR0FBU25kLEVBQU12RCxFQUFRMmdCLFVBQThDLElBQW5DM2dCLEVBQVEyZ0IsT0FBT2ovQixRQUFRZy9CLElBRXpEMWdCLEVBQVEyZ0IsT0FBTy93QyxLQUFLOHdDLEdBRXBCbGQsRUFBT3hELEVBQVE0Z0IsVUFBWXJkLEVBQU12RCxFQUFRNmdCLGFBQ3pDLE9BQU83Z0IsRUFBUTZnQixZQUVuQixHQUFJSCxJQUFVbmQsRUFBTXZELEVBQVEyZ0IsUUFBUyxDQUNqQyxJQUFJRyxFQUFZOWdCLEVBQVEyZ0IsT0FBUyxDQUFDRCxHQUM5QkssR0FBUyxFQUNUQyxFQUFpQixLQUNqQkMsRUFBaUIsS0FDckJQLEVBQU12ZSxJQUFJLGtCQUFrQixXQUFjLE9BQU8yQyxFQUFTZ2MsRUFBVUosRUFBUSxJQUM1RSxJQUFJUSxFQUFnQixTQUFVQyxHQUMxQixJQUFLLElBQUl6dUMsRUFBSSxFQUFHOGEsRUFBSXN6QixFQUFTdjNDLE9BQVFtSixFQUFJOGEsRUFBRzlhLElBQ3hDb3VDLEVBQVNwdUMsR0FBRzB1QyxlQUVaRCxJQUNBTCxFQUFTdjNDLE9BQVMsRUFDSyxPQUFuQnkzQyxJQUNBMWhCLGFBQWEwaEIsR0FDYkEsRUFBaUIsTUFFRSxPQUFuQkMsSUFDQTNoQixhQUFhMmhCLEdBQ2JBLEVBQWlCLE1BRzdCLEVBQ0l6dkMsRU
3FBVTgxQixHQUFLLFNBQVVoQixHQUV6QnRHLEVBQVF5Z0IsU0FBV1IsR0FBVzNaLEVBQUtpYSxHQUc5QlEsRUFJREQsRUFBU3YzQyxPQUFTLEVBSGxCMjNDLEdBQWMsRUFLdEIsSUFDSUcsRUFBVy9aLEdBQUssU0FBVWdhLEdBQzFCeFUsR0FBTyxzQ0FBc0MzaEIsT0FBT3lNLE9BQU9vSSxLQUNsRHNoQixFQUFTLGFBQWFuMkIsT0FBT20yQixHQUFVLEtBQzVDL2QsRUFBTXZELEVBQVF3Z0IsYUFDZHhnQixFQUFRcEgsT0FBUSxFQUNoQnNvQixHQUFjLEdBRXRCLElBQ0lLLEVBQVF2aEIsRUFBUXh1QixFQUFTNnZDLEdBMEM3QixPQXpDSXpkLEVBQVMyZCxLQUNMcGQsRUFBVW9kLEdBRU5sZSxFQUFRckQsRUFBUXlnQixXQUNoQmMsRUFBTW5kLEtBQUs1eUIsRUFBUzZ2QyxHQUduQmxkLEVBQVVvZCxFQUFNbGdCLGFBQ3JCa2dCLEVBQU1sZ0IsVUFBVStDLEtBQUs1eUIsRUFBUzZ2QyxHQUMxQjlkLEVBQU1nZSxFQUFNM29CLFNBQ1pvSCxFQUFRd2dCLFVBQVlQLEdBQVdzQixFQUFNM29CLE1BQU8ybkIsSUFFNUNoZCxFQUFNZ2UsRUFBTVgsV0FDWjVnQixFQUFRNmdCLFlBQWNaLEdBQVdzQixFQUFNWCxRQUFTTCxHQUM1QixJQUFoQmdCLEVBQU1DLE1BQ054aEIsRUFBUTRnQixTQUFVLEVBSWxCSSxFQUFpQnZ6QyxZQUFXLFdBQ3hCdXpDLEVBQWlCLEtBQ2IzZCxFQUFRckQsRUFBUXlnQixXQUFhcGQsRUFBUXJELEVBQVFwSCxTQUM3Q29ILEVBQVE0Z0IsU0FBVSxFQUNsQk0sR0FBYyxHQUV0QixHQUFHSyxFQUFNQyxPQUFTLE1BR3RCamUsRUFBTWdlLEVBQU1FLFdBRVpSLEVBQWlCeHpDLFlBQVcsV0FDeEJ3ekMsRUFBaUIsS0FDYjVkLEVBQVFyRCxFQUFReWdCLFdBQ2hCWSxFQUFTLFlBQVlsMkIsT0FBT28yQixFQUFNRSxRQUFTLE9BRW5ELEdBQUdGLEVBQU1FLFlBSXJCVixHQUFTLEVBRUYvZ0IsRUFBUTRnQixRQUFVNWdCLEVBQVE2Z0IsWUFBYzdnQixFQUFReWdCLFFBQzNELENBQ0osQ0FFQSxTQUFTaUIsR0FBdUI3OUIsR0FDNUIsR0FBSXVmLEVBQVF2ZixHQUNSLElBQUssSUFBSW5SLEVBQUksRUFBR0EsRUFBSW1SLEVBQVN0YSxPQUFRbUosSUFBSyxDQUN0QyxJQUFJcUYsRUFBSThMLEVBQVNuUixHQUNqQixHQUFJNndCLEVBQU14ckIsS0FBT3dyQixFQUFNeHJCLEVBQUV5ekIsbUJBQXFCYyxHQUFtQnYwQixJQUM3RCxPQUFPQSxDQUVmLENBRVIsQ0FFQSxTQUFTNHBDLEdBQVcxVyxHQUNoQkEsRUFBRzJXLFFBQVVwcEMsT0FBTzFCLE9BQU8sTUFDM0JtMEIsRUFBRzRXLGVBQWdCLEVBRW5CLElBQUluRSxFQUFZelMsRUFBR3NDLFNBQVM4UixpQkFDeEIzQixHQUNBb0UsR0FBeUI3VyxFQUFJeVMsRUFFckMsQ0FFQSxTQUFTcUUsR0FBTXBpQyxFQUFPL0UsR0FDbEIwa0MsR0FBU25kLElBQUl4aUIsRUFBTy9FLEVBQ3hCLENBQ0EsU0FBU29uQyxHQUFTcmlDLEVBQU8vRSxHQUNyQjBrQyxHQUFTMkMsS0FBS3RpQyxFQUFPL0UsRUFDekIsQ0FDQSxTQUFTc25DLEdBQW9CdmlDLEVBQU8vRSxHQUNoQyxJQUFJdW5DLEVBQVU3QyxHQUNkLE9BQU8sU0FBUzhDLElBRUEsT0FERnhuQyxFQUFHeEIsTUFBTSxLQUFNTCxZQUVyQm9wQyxFQUFRRixLQUFLdGlDLEVBQU95aUMsRUFFNUIsQ0FDSixDQUNBLFNBQVNOLEdBQXlCN1csRUFBSXlTLEVBQVcyRSxHQUM3Qy9DLEdBQVdyVSxFQUNYNkosR0FBZ0I0SSxFQUFXMkUsR0FBZ0IsQ0FBQyxFQUFHTixHQUFPQyxHQUFVRSxHQUFxQmpYLEdBQ3JGcVUsUUFBV2xrQyxDQUNmLENBQ0EsU0FBU2tuQyxHQUFZdmYsR0FDakIsSUFBSXdmLEVBQVMsU0FDYnhmLEVBQUk5cEIsVUFBVWtwQixJQUFNLFNBQVV4aUIsRUFBTy9FLEdBQ2pDLElBQUlxd0IsRUFBSzloQyxLQUNULEdBQUlpNkIsRUFBUXpqQixHQUNSLElBQUssSUFBSWpOLEVBQUksRUFBRzhhLEVBQUk3TixFQUFNcFcsT0FBUW1KLEVBQUk4YSxFQUFHOWEsSUFDckN1NEIsRUFBRzlJLElBQUl4aUIsRUFBTWpOLEdBQUlrSSxRQUlwQnF3QixFQUFHMlcsUUFBUWppQyxLQUFXc3JCLEVBQUcyVyxRQUFRamlDLEdBQVMsS0FBSy9QLEtBQUtnTCxHQUdqRDJuQyxFQUFPemlDLEtBQUtILEtBQ1pzckIsRUFBRzRXLGVBQWdCLEdBRzNCLE9BQU81VyxDQUNYLEVBQ0FsSSxFQUFJOXBCLFVBQVV1cEMsTUFBUSxTQUFVN2lDLEVBQU8vRSxHQUNuQyxJQUFJcXdCLEVBQUs5aEMsS0FDVCxTQUFTZSxJQUNMK2dDLEVBQUdnWCxLQUFLdGlDLEVBQU96VixHQUNmMFEsRUFBR3hCLE1BQU02eEIsRUFBSWx5QixVQUNqQixDQUdBLE9BRkE3TyxFQUFHMFEsR0FBS0EsRUFDUnF3QixFQUFHOUksSUFBSXhpQixFQUFPelYsR0FDUCtnQyxDQUNYLEVBQ0FsSSxFQUFJOXBCLFVBQVVncEMsS0FBTyxTQUFVdGlDLEVBQU8vRSxHQUNsQyxJQUFJcXdCLEVBQUs5aEMsS0FFVCxJQUFLNFAsVUFBVXhQLE9BRVgsT0FEQTBoQyxFQUFHMlcsUUFBVXBwQyxPQUFPMUIsT0FBTyxNQUNwQm0wQixFQUdYLEdBQUk3SCxFQUFRempCLEdBQVEsQ0FDaEIsSUFBSyxJQUFJOGlDLEVBQU0sRUFBR2oxQixFQUFJN04sRUFBTXBXLE9BQVFrNUMsRUFBTWoxQixFQUFHaTFCLElBQ3pDeFgsRUFBR2dYLEtBQUt0aUMsRUFBTThpQyxHQUFNN25DLEdBRXhCLE9BQU9xd0IsQ0FDWCxDQUVBLElBU0l5WCxFQVRBQyxFQUFNMVgsRUFBRzJXLFFBQVFqaUMsR0FDckIsSUFBS2dqQyxFQUNELE9BQU8xWCxFQUVYLElBQUtyd0IsRUFFRCxPQURBcXdCLEVBQUcyVyxRQUFRamlDLEdBQVMsS0FDYnNyQixFQUtYLElBREEsSUFBSXY0QixFQUFJaXdDLEVBQUlwNUMsT0FDTG1KLEtBRUgsSUFEQWd3QyxFQUFLQyxFQUFJandDLE1BQ0VrSSxHQUFNOG5DLEVBQUc5bkMsS0FBT0EsRUFBSSxDQUMzQituQyxFQUFJNTZCLE9BQU9yVixFQUFHLEdBQ2QsS0FDSixDQUVKLE9BQU91NEIsQ0FDWCxFQUNBbEksRUFBSTlwQixVQUFVL00sTUFBUSxTQUFVeVQsR0FDNUIsSUFBSXNyQixFQUFLOWhDLEtBRUR5NUMsRUFBaUJqakMsRUFBTTZMLGNBQ3ZCbzNCLElBQW1CampDLEdBQVNzckIsRUFBRzJXLFFBQVFnQixJQUN2Q2hOLEdBQUksVUFBV3pxQixPQUFPeTNCLEVBQWdCLDhCQUNsQyxHQUFHejNCLE9BQU8wcUIsR0FBb0I1SyxHQUFLLHdDQUF5QzlmLE9BQU94TCxFQUFPLE9BRDFGLHFJQUlBLDRCQUE2QndMLE9BQU9zYSxFQUFVOWxCLEdBQVEsa0JBQW9Cd0wsT0FBT3hMLEVBQU8sT0FHcEcsSUFBSWdqQyxFQUFNMVgsRUFBRzJXLFFBQVFqaUMsR0FDckIsR0FBSWdqQyxFQUFLLENBQ0xBLEVBQU1BLEVBQUlwNUMsT0FBUyxFQUFJMDhCLEVBQVEwYyxHQUFPQSxFQUd0QyxJQUZBLElBQUl0akIsRU
3FBTzRHLEVBQVFsdEIsVUFBVyxHQUMxQncxQixFQUFPLHNCQUF1QnBqQixPQUFPeEwsRUFBTyxLQUN2Q2pOLEVBQUksRUFBRzhhLEVBQUltMUIsRUFBSXA1QyxPQUFRbUosRUFBSThhLEVBQUc5YSxJQUNuQ21pQyxHQUF3QjhOLEVBQUlqd0MsR0FBSXU0QixFQUFJNUwsRUFBTTRMLEVBQUlzRCxFQUV0RCxDQUNBLE9BQU90RCxDQUNYLENBQ0osQ0FHQSxJQUFJNFgsR0FBNkIsV0FDN0IsU0FBU0EsRUFBWUMsUUFDQSxJQUFiQSxJQUF1QkEsR0FBVyxHQUN0QzM1QyxLQUFLMjVDLFNBQVdBLEVBSWhCMzVDLEtBQUs0NUMsUUFBUyxFQUlkNTVDLEtBQUs2NUMsUUFBVSxHQUlmNzVDLEtBQUs4NUMsU0FBVyxHQUNoQjk1QyxLQUFLZ0MsT0FBU28wQyxJQUNUdUQsR0FBWXZELEtBQ2JwMkMsS0FBS21ELE9BQ0FpekMsR0FBa0IyRCxTQUFXM0QsR0FBa0IyRCxPQUFTLEtBQUt0ekMsS0FBS3pHLE1BQVEsRUFFdkYsQ0F5REEsT0F4REEwNUMsRUFBWTVwQyxVQUFVa3FDLElBQU0sU0FBVXZvQyxHQUNsQyxHQUFJelIsS0FBSzQ1QyxPQUFRLENBQ2IsSUFBSUssRUFBcUI3RCxHQUN6QixJQUVJLE9BREFBLEdBQW9CcDJDLEtBQ2J5UixHQUNYLENBQ0EsUUFDSTJrQyxHQUFvQjZELENBQ3hCLENBQ0osTUFFSXRXLEdBQU8sdUNBRWYsRUFLQStWLEVBQVk1cEMsVUFBVS9PLEdBQUssV0FDdkJxMUMsR0FBb0JwMkMsSUFDeEIsRUFLQTA1QyxFQUFZNXBDLFVBQVVreUIsSUFBTSxXQUN4Qm9VLEdBQW9CcDJDLEtBQUtnQyxNQUM3QixFQUNBMDNDLEVBQVk1cEMsVUFBVW9xQyxLQUFPLFNBQVVDLEdBQ25DLEdBQUluNkMsS0FBSzQ1QyxPQUFRLENBQ2IsSUFBSXJ3QyxPQUFJLEVBQVE4YSxPQUFJLEVBQ3BCLElBQUs5YSxFQUFJLEVBQUc4YSxFQUFJcmtCLEtBQUs2NUMsUUFBUXo1QyxPQUFRbUosRUFBSThhLEVBQUc5YSxJQUN4Q3ZKLEtBQUs2NUMsUUFBUXR3QyxHQUFHNndDLFdBRXBCLElBQUs3d0MsRUFBSSxFQUFHOGEsRUFBSXJrQixLQUFLODVDLFNBQVMxNUMsT0FBUW1KLEVBQUk4YSxFQUFHOWEsSUFDekN2SixLQUFLODVDLFNBQVN2d0MsS0FFbEIsR0FBSXZKLEtBQUsrNUMsT0FDTCxJQUFLeHdDLEVBQUksRUFBRzhhLEVBQUlya0IsS0FBSys1QyxPQUFPMzVDLE9BQVFtSixFQUFJOGEsRUFBRzlhLElBQ3ZDdkosS0FBSys1QyxPQUFPeHdDLEdBQUcyd0MsTUFBSyxHQUk1QixJQUFLbDZDLEtBQUsyNUMsVUFBWTM1QyxLQUFLZ0MsU0FBV200QyxFQUFZLENBRTlDLElBQUkvTSxFQUFPcHRDLEtBQUtnQyxPQUFPKzNDLE9BQU9sVSxNQUMxQnVILEdBQVFBLElBQVNwdEMsT0FDakJBLEtBQUtnQyxPQUFPKzNDLE9BQU8vNUMsS0FBS21ELE9BQVNpcUMsRUFDakNBLEVBQUtqcUMsTUFBUW5ELEtBQUttRCxNQUUxQixDQUNBbkQsS0FBS2dDLFlBQVNpUSxFQUNkalMsS0FBSzQ1QyxRQUFTLENBQ2xCLENBQ0osRUFDT0YsQ0FDWCxDQS9FZ0MsR0FnRmhDLFNBQVNXLEdBQVlWLEdBQ2pCLE9BQU8sSUFBSUQsR0FBWUMsRUFDM0IsQ0FJQSxTQUFTVyxHQUFrQi9VLEVBQVFnVixRQUNqQixJQUFWQSxJQUFvQkEsRUFBUW5FLElBQzVCbUUsR0FBU0EsRUFBTVgsUUFDZlcsRUFBTVYsUUFBUXB6QyxLQUFLOCtCLEVBRTNCLENBQ0EsU0FBU2lWLEtBQ0wsT0FBT3BFLEVBQ1gsQ0FDQSxTQUFTcUUsR0FBZWhwQyxHQUNoQjJrQyxHQUNBQSxHQUFrQjBELFNBQVNyekMsS0FBS2dMLEdBR2hDa3lCLEdBQU8seUZBR2YsQ0FFQSxJQUFJK1csR0FBaUIsS0FDakJ6RSxJQUEyQixFQUMvQixTQUFTMEUsR0FBa0I3WSxHQUN2QixJQUFJOFksRUFBcUJGLEdBRXpCLE9BREFBLEdBQWlCNVksRUFDVixXQUNINFksR0FBaUJFLENBQ3JCLENBQ0osQ0FDQSxTQUFTQyxHQUFjL1ksR0FDbkIsSUFBSWhyQixFQUFVZ3JCLEVBQUdzQyxTQUVicGlDLEVBQVM4VSxFQUFROVUsT0FDckIsR0FBSUEsSUFBVzhVLEVBQVFna0MsU0FBVSxDQUM3QixLQUFPOTRDLEVBQU9vaUMsU0FBUzBXLFVBQVk5NEMsRUFBTyt6QyxTQUN0Qy96QyxFQUFTQSxFQUFPK3pDLFFBRXBCL3pDLEVBQU8rNEMsVUFBVXQwQyxLQUFLcTdCLEVBQzFCLENBQ0FBLEVBQUdpVSxRQUFVL3pDLEVBQ2I4L0IsRUFBR2taLE1BQVFoNUMsRUFBU0EsRUFBT2c1QyxNQUFRbFosRUFDbkNBLEVBQUdpWixVQUFZLEdBQ2ZqWixFQUFHcnpCLE1BQVEsQ0FBQyxFQUNacXpCLEVBQUdtWixVQUFZajVDLEVBQVNBLEVBQU9pNUMsVUFBWTVyQyxPQUFPMUIsT0FBTyxNQUN6RG0wQixFQUFHb1osU0FBVyxLQUNkcFosRUFBR3FaLFVBQVksS0FDZnJaLEVBQUdzWixpQkFBa0IsRUFDckJ0WixFQUFHMlUsWUFBYSxFQUNoQjNVLEVBQUd1WixjQUFlLEVBQ2xCdlosRUFBR3daLG1CQUFvQixDQUMzQixDQUNBLFNBQVNDLEdBQWUzaEIsR0FDcEJBLEVBQUk5cEIsVUFBVTByQyxRQUFVLFNBQVVqWSxFQUFPa1ksR0FDckMsSUFBSTNaLEVBQUs5aEMsS0FDTDA3QyxFQUFTNVosRUFBRzFJLElBQ1p1aUIsRUFBWTdaLEVBQUc0VCxPQUNma0csRUFBd0JqQixHQUFrQjdZLEdBQzlDQSxFQUFHNFQsT0FBU25TLEVBU1J6QixFQUFHMUksSUFORnVpQixFQU1RN1osRUFBRytaLFVBQVVGLEVBQVdwWSxHQUp4QnpCLEVBQUcrWixVQUFVL1osRUFBRzFJLElBQUttSyxFQUFPa1ksR0FBVyxHQU1wREcsSUFFSUYsSUFDQUEsRUFBT0ksUUFBVSxNQUVqQmhhLEVBQUcxSSxNQUNIMEksRUFBRzFJLElBQUkwaUIsUUFBVWhhLEdBSXJCLElBREEsSUFBSS9ZLEVBQVUrWSxFQUNQL1ksR0FDSEEsRUFBUStrQixRQUNSL2tCLEVBQVFndEIsU0FDUmh0QixFQUFRK2tCLFNBQVcva0IsRUFBUWd0QixRQUFRTCxRQUNuQzNzQixFQUFRZ3RCLFFBQVEzYyxJQUFNclEsRUFBUXFRLElBQzlCclEsRUFBVUEsRUFBUWd0QixPQUkxQixFQUNBbmMsRUFBSTlwQixVQUFVbW9DLGFBQWUsV0FDekIsSUFBSW5XLEVBQUs5aEMsS0FDTDhoQyxFQUFHb1osVUFDSHBaLEVBQUdvWixTQUFTMzVDLFFBRXBCLEVBQ0FxNEIsRUFBSTlwQixVQUFVaXNDLFNBQVcsV0FDckIsSUFBSWphLEVBQUs5aEMsS0FDVCxJQUFJOGhDLEVBQUd3WixrQkFBUCxDQUdBVSxHQUFXbGEsRUFBSSxpQkFDZkEsRUFBR3daLG1CQUFvQixFQUV2QixJQUFJdDVDLEVBQVM4L0IsRUFBR2lVLFNBQ1ovekMsR0FBV0EsRUFBT3M1QyxtQkFBc0J4WixFQUFHc0MsU0FBUzBXLFVBQ3BEbmYsRUFBUzM1QixFQUFPKzRDLFVBQVdqWixHQUkvQkEsRUFBR0MsT0FBT21ZLE9BR05wWSxFQUFHbWEsTUFBTTdWLFFBQ1R0RSxFQUFHbWEsTUFBTTdWLE9BQU9XLFVBR3BCakYsRUFBR3VaLGNBQWUsRUFFbEJ2WixFQUFHK1osVUFBVS9aLEVBQUc0VCxPQUFRLE1BRXhCc0csR0FBV2xhLEVBQUksYUFFZkEsRUFBR2dYLE9BRUNoWCxFQU
3FHMUksTUFDSDBJLEVBQUcxSSxJQUFJMGlCLFFBQVUsTUFHakJoYSxFQUFHZ00sU0FDSGhNLEVBQUdnTSxPQUFPOXJDLE9BQVMsS0E5QnZCLENBZ0NKLENBQ0osQ0FDQSxTQUFTazZDLEdBQWVwYSxFQUFJN3FCLEVBQUl3a0MsR0FvQjVCLElBQUlVLEVBbkJKcmEsRUFBRzFJLElBQU1uaUIsRUFDSjZxQixFQUFHc0MsU0FBU2pNLFNBRWIySixFQUFHc0MsU0FBU2pNLE9BQVNpTCxHQUdadEIsRUFBR3NDLFNBQVMxa0MsVUFBK0MsTUFBbkNvaUMsRUFBR3NDLFNBQVMxa0MsU0FBUzBpQixPQUFPLElBQ3JEMGYsRUFBR3NDLFNBQVNudEIsSUFDWkEsRUFDQTBzQixHQUFPLHdMQUVzRDdCLEdBRzdENkIsR0FBTyxzRUFBdUU3QixJQUkxRmthLEdBQVdsYSxFQUFJLGVBSVhxYSxFQURBcHJDLEVBQU84dEIsYUFBZWdMLEdBQ0osV0FDZCxJQUFJdGlDLEVBQU91NkIsRUFBR3NhLE1BQ1ZsM0MsRUFBSzQ4QixFQUFHdWEsS0FDUmxSLEVBQVcsa0JBQWtCbnBCLE9BQU85YyxHQUNwQ2ttQyxFQUFTLGdCQUFnQnBwQixPQUFPOWMsR0FDcEMya0MsR0FBS3NCLEdBQ0wsSUFBSTVILEVBQVF6QixFQUFHMFUsVUFDZjNNLEdBQUt1QixHQUNMdEIsR0FBUSxPQUFPOW5CLE9BQU96YSxFQUFNLFdBQVk0akMsRUFBVUMsR0FDbER2QixHQUFLc0IsR0FDTHJKLEVBQUcwWixRQUFRalksRUFBT2tZLEdBQ2xCNVIsR0FBS3VCLEdBQ0x0QixHQUFRLE9BQU85bkIsT0FBT3phLEVBQU0sVUFBVzRqQyxFQUFVQyxFQUNyRCxFQUdrQixXQUNkdEosRUFBRzBaLFFBQVExWixFQUFHMFUsVUFBV2lGLEVBQzdCLEVBRUosSUFBSWEsRUFBaUIsQ0FDakJDLE9BQVEsV0FDQXphLEVBQUcyVSxhQUFlM1UsRUFBR3VaLGNBQ3JCVyxHQUFXbGEsRUFBSSxlQUV2QixFQUdBd2EsUUFBeUIsU0FBVTc2QyxHQUFLLE9BQU91NkMsR0FBV2xhLEVBQUksZ0JBQWlCLENBQUNyZ0MsR0FBSyxFQUNyRjY2QyxVQUEyQixTQUFVNzZDLEdBQUssT0FBT3U2QyxHQUFXbGEsRUFBSSxrQkFBbUIsQ0FBQ3JnQyxHQUFLLEdBSzdGLElBQUltcEMsR0FBUTlJLEVBQUlxYSxFQUFpQi9lLEVBQU1rZixHQUFnQixHQUN2RGIsR0FBWSxFQUVaLElBQUllLEVBQWMxYSxFQUFHMmEsYUFDckIsR0FBSUQsRUFDQSxJQUFLLElBQUlqekMsRUFBSSxFQUFHQSxFQUFJaXpDLEVBQVlwOEMsT0FBUW1KLElBQ3BDaXpDLEVBQVlqekMsR0FBR3l3QyxNQVN2QixPQUppQixNQUFibFksRUFBR2dNLFNBQ0hoTSxFQUFHMlUsWUFBYSxFQUNoQnVGLEdBQVdsYSxFQUFJLFlBRVpBLENBQ1gsQ0FDQSxTQUFTNGEsR0FBcUI1YSxFQUFJNmEsRUFBV3BJLEVBQVdvQixFQUFhaUgsR0FFN0QzRyxJQUEyQixFQU8vQixJQUFJNEcsRUFBaUJsSCxFQUFZLzFDLEtBQUtpdUMsWUFDbENpUCxFQUFpQmhiLEVBQUdpTixhQUNwQmdPLEtBQTJCRixJQUFtQkEsRUFBZTNMLFNBQzVENEwsSUFBbUIvaUIsSUFBZ0IraUIsRUFBZTVMLFNBQ2xEMkwsR0FBa0IvYSxFQUFHaU4sYUFBYW9DLE9BQVMwTCxFQUFlMUwsT0FDekQwTCxHQUFrQi9hLEVBQUdpTixhQUFhb0MsTUFJcEM2TCxLQUFzQkosR0FDdEI5YSxFQUFHc0MsU0FBUzBSLGlCQUNaaUgsR0FDQUUsRUFBWW5iLEVBQUdnTSxPQUNuQmhNLEVBQUdzQyxTQUFTd1IsYUFBZUQsRUFDM0I3VCxFQUFHZ00sT0FBUzZILEVBQ1I3VCxFQUFHNFQsU0FFSDVULEVBQUc0VCxPQUFPMXpDLE9BQVMyekMsR0FFdkI3VCxFQUFHc0MsU0FBUzBSLGdCQUFrQjhHLEVBSTlCLElBQUl4a0IsRUFBUXVkLEVBQVkvMUMsS0FBS3c0QixPQUFTMkIsRUFDbEMrSCxFQUFHc1MsYUFHQ0MsR0FBZXZTLEVBQUdzUyxZQUFhaGMsRUFBUTZrQixFQUFVcjlDLE1BQVFxOUMsRUFBVXI5QyxLQUFLdzRCLE9BQVUyQixFQUFhK0gsRUFBSSxZQUNuR2tiLEdBQW1CLEdBRzNCbGIsRUFBR3dTLE9BQVNsYyxFQUVabWMsRUFBWUEsR0FBYXhhLEVBQ3pCLElBQUltakIsRUFBZ0JwYixFQUFHc0MsU0FBUzhSLGlCQU9oQyxHQU5JcFUsRUFBRzBTLGlCQUNISCxHQUFldlMsRUFBRzBTLGdCQUFpQkQsRUFBVzJJLEdBQWlCbmpCLEVBQWErSCxFQUFJLGNBRXBGQSxFQUFHMlMsV0FBYTNTLEVBQUdzQyxTQUFTOFIsaUJBQW1CM0IsRUFDL0NvRSxHQUF5QjdXLEVBQUl5UyxFQUFXMkksR0FFcENQLEdBQWE3YSxFQUFHc0MsU0FBU3prQyxNQUFPLENBQ2hDK21DLElBQWdCLEdBR2hCLElBRkEsSUFBSS9tQyxFQUFRbWlDLEVBQUdpUyxPQUNYb0osRUFBV3JiLEVBQUdzQyxTQUFTZ1osV0FBYSxHQUMvQjd6QyxFQUFJLEVBQUdBLEVBQUk0ekMsRUFBUy84QyxPQUFRbUosSUFBSyxDQUN0QyxJQUFJbU4sRUFBTXltQyxFQUFTNXpDLEdBQ2YraUMsRUFBY3hLLEVBQUdzQyxTQUFTemtDLE1BQzlCQSxFQUFNK1csR0FBTzJtQyxHQUFhM21DLEVBQUs0MUIsRUFBYXFRLEVBQVc3YSxFQUMzRCxDQUNBNEUsSUFBZ0IsR0FFaEI1RSxFQUFHc0MsU0FBU3VZLFVBQVlBLENBQzVCLENBRUlLLElBQ0FsYixFQUFHa04sT0FBU3dELEdBQWFvSyxFQUFnQmpILEVBQVl2VCxTQUNyRE4sRUFBR21XLGdCQUdIaEMsSUFBMkIsQ0FFbkMsQ0FDQSxTQUFTcUgsR0FBaUJ4YixHQUN0QixLQUFPQSxJQUFPQSxFQUFLQSxFQUFHaVUsVUFDbEIsR0FBSWpVLEVBQUdxWixVQUNILE9BQU8sRUFFZixPQUFPLENBQ1gsQ0FDQSxTQUFTb0MsR0FBdUJ6YixFQUFJMGIsR0FDaEMsR0FBSUEsR0FFQSxHQURBMWIsRUFBR3NaLGlCQUFrQixFQUNqQmtDLEdBQWlCeGIsR0FDakIsWUFHSCxHQUFJQSxFQUFHc1osZ0JBQ1IsT0FFSixHQUFJdFosRUFBR3FaLFdBQThCLE9BQWpCclosRUFBR3FaLFVBQW9CLENBQ3ZDclosRUFBR3FaLFdBQVksRUFDZixJQUFLLElBQUk1eEMsRUFBSSxFQUFHQSxFQUFJdTRCLEVBQUdpWixVQUFVMzZDLE9BQVFtSixJQUNyQ2cwQyxHQUF1QnpiLEVBQUdpWixVQUFVeHhDLElBRXhDeXlDLEdBQVdsYSxFQUFJLFlBQ25CLENBQ0osQ0FDQSxTQUFTMmIsR0FBeUIzYixFQUFJMGIsR0FDbEMsS0FBSUEsSUFDQTFiLEVBQUdzWixpQkFBa0IsRUFDakJrQyxHQUFpQnhiLEtBSXBCQSxFQUFHcVosV0FBVyxDQUNmclosRUFBR3FaLFdBQVksRUFDZixJQUFLLElBQUk1eEMsRUFBSSxFQUFHQSxFQUFJdTRCLEVBQUdpWixVQUFVMzZDLE9BQVFtSixJQUNyQ2swQyxHQU
3F5QjNiLEVBQUdpWixVQUFVeHhDLElBRTFDeXlDLEdBQVdsYSxFQUFJLGNBQ25CLENBQ0osQ0FDQSxTQUFTa2EsR0FBV2xhLEVBQUkvVixFQUFNbUssRUFBTXduQixRQUNiLElBQWZBLElBQXlCQSxHQUFhLEdBRTFDL1gsS0FDQSxJQUFJK1EsRUFBV2hWLEdBQ1hpYyxFQUFZbkQsS0FDaEJrRCxHQUFjN2IsR0FBbUJDLEdBQ2pDLElBQUl1QyxFQUFXdkMsRUFBR3NDLFNBQVNyWSxHQUN2QnFaLEVBQU8sR0FBR3BqQixPQUFPK0osRUFBTSxTQUMzQixHQUFJc1ksRUFDQSxJQUFLLElBQUk5NkIsRUFBSSxFQUFHaUgsRUFBSTZ6QixFQUFTamtDLE9BQVFtSixFQUFJaUgsRUFBR2pILElBQ3hDbWlDLEdBQXdCckgsRUFBUzk2QixHQUFJdTRCLEVBQUk1TCxHQUFRLEtBQU00TCxFQUFJc0QsR0FHL0R0RCxFQUFHNFcsZUFDSDVXLEVBQUcvK0IsTUFBTSxRQUFVZ3BCLEdBRW5CMnhCLElBQ0E3YixHQUFtQjZVLEdBQ25CaUgsR0FBYUEsRUFBVTU4QyxNQUUzQjZrQyxJQUNKLENBRUEsSUFBSWdZLEdBQW1CLElBQ25CQyxHQUFRLEdBQ1JDLEdBQW9CLEdBQ3BCcmMsR0FBTSxDQUFDLEVBQ1BzYyxHQUFXLENBQUMsRUFDWkMsSUFBVSxFQUNWQyxJQUFXLEVBQ1hDLEdBQVUsRUFJZCxTQUFTQyxLQUNMRCxHQUFVTCxHQUFNejlDLE9BQVMwOUMsR0FBa0IxOUMsT0FBUyxFQUNwRHFoQyxHQUFNLENBQUMsRUFFSHNjLEdBQVcsQ0FBQyxFQUVoQkMsR0FBVUMsSUFBVyxDQUN6QixDQU1BLElBQUlHLEdBQXdCLEVBRXhCQyxHQUFTNXhDLEtBQUtrTCxJQU9sQixHQUFJdW9CLEtBQWNFLEdBQU0sQ0FDcEIsSUFBSWtlLEdBQWdCdnNDLE9BQU84c0IsWUFDdkJ5ZixJQUM2QixtQkFBdEJBLEdBQWMzbUMsS0FDckIwbUMsS0FBVzl3QyxTQUFTcUwsWUFBWSxTQUFTMmxDLFlBS3pDRixHQUFTLFdBQWMsT0FBT0MsR0FBYzNtQyxLQUFPLEVBRTNELENBQ0EsSUFBSTZtQyxHQUFnQixTQUFVanVDLEVBQUcyWCxHQUM3QixHQUFJM1gsRUFBRWxPLE1BQ0YsSUFBSzZsQixFQUFFN2xCLEtBQ0gsT0FBTyxPQUVWLEdBQUk2bEIsRUFBRTdsQixLQUNQLE9BQVEsRUFFWixPQUFPa08sRUFBRXJMLEdBQUtnakIsRUFBRWhqQixFQUNwQixFQUlBLFNBQVN1NUMsS0FHTCxJQUFJOVQsRUFBU3psQyxFQVliLElBZEFrNUMsR0FBd0JDLEtBQ3hCSixJQUFXLEVBVVhKLEdBQU01MUIsS0FBS3UyQixJQUdOTixHQUFVLEVBQUdBLEdBQVVMLEdBQU16OUMsT0FBUTg5QyxLQVN0QyxJQVJBdlQsRUFBVWtULEdBQU1LLEtBQ0ozQixRQUNSNVIsRUFBUTRSLFNBRVpyM0MsRUFBS3lsQyxFQUFRemxDLEdBQ2J1OEIsR0FBSXY4QixHQUFNLEtBQ1Z5bEMsRUFBUXFQLE1BRU8sTUFBWHZZLEdBQUl2OEIsS0FDSjY0QyxHQUFTNzRDLElBQU82NEMsR0FBUzc0QyxJQUFPLEdBQUssRUFDakM2NEMsR0FBUzc0QyxHQUFNMDRDLElBQWtCLENBQ2pDamEsR0FBTyx5Q0FDRmdILEVBQVErVCxLQUNILCtCQUFnQzE4QixPQUFPMm9CLEVBQVFnVSxXQUFZLEtB
3QzNELG1DQUFvQ2hVLEVBQVE3SSxJQUN0RCxLQUNKLENBSVIsSUFBSThjLEVBQWlCZCxHQUFrQjdvQyxRQUNuQzRwQyxFQUFlaEIsR0FBTTVvQyxRQUN6QmtwQyxLQUVBVyxHQUFtQkYsR0FDbkJHLEdBQWlCRixHQUNqQmxhLEtBR0kvRixJQUFZN3RCLEVBQU82dEIsVUFDbkJBLEdBQVMrVixLQUFLLFFBRXRCLENBQ0EsU0FBU29LLEdBQWlCbEIsR0FFdEIsSUFEQSxJQUFJdDBDLEVBQUlzMEMsRUFBTXo5QyxPQUNQbUosS0FBSyxDQUNSLElBQUlvaEMsRUFBVWtULEVBQU10MEMsR0FDaEJ1NEIsRUFBSzZJLEVBQVE3SSxHQUNiQSxHQUFNQSxFQUFHb1osV0FBYXZRLEdBQVc3SSxFQUFHMlUsYUFBZTNVLEVBQUd1WixjQUN0RFcsR0FBV2xhLEVBQUksVUFFdkIsQ0FDSixDQUtBLFNBQVNrZCxHQUF3QmxkLEdBRzdCQSxFQUFHcVosV0FBWSxFQUNmMkMsR0FBa0JyM0MsS0FBS3E3QixFQUMzQixDQUNBLFNBQVNnZCxHQUFtQmpCLEdBQ3hCLElBQUssSUFBSXQwQyxFQUFJLEVBQUdBLEVBQUlzMEMsRUFBTXo5QyxPQUFRbUosSUFDOUJzMEMsRUFBTXQwQyxHQUFHNHhDLFdBQVksRUFDckJvQyxHQUF1Qk0sRUFBTXQwQyxJQUFJLEVBRXpDLENBTUEsU0FBUzAxQyxHQUFhdFUsR0FDbEIsSUFBSXpsQyxFQUFLeWxDLEVBQVF6bEMsR0FDakIsR0FBZSxNQUFYdThCLEdBQUl2OEIsS0FHSnlsQyxJQUFZNUYsR0FBSWxqQyxTQUFVOG9DLEVBQVF1VSxXQUF0QyxDQUlBLEdBREF6ZCxHQUFJdjhCLElBQU0sRUFDTCs0QyxHQUdBLENBSUQsSUFEQSxJQUFJMTBDLEVBQUlzMEMsR0FBTXo5QyxPQUFTLEVBQ2hCbUosRUFBSTIwQyxJQUFXTCxHQUFNdDBDLEdBQUdyRSxHQUFLeWxDLEVBQVF6bEMsSUFDeENxRSxJQUVKczBDLEdBQU1qL0IsT0FBT3JWLEVBQUksRUFBRyxFQUFHb2hDLEVBQzNCLE1BVklrVCxHQUFNcDNDLEtBQUtra0MsR0FZZixJQUFLcVQsR0FBUyxDQUVWLEdBREFBLElBQVUsR0FDTGp0QyxFQUFPaE4sTUFFUixZQURBMDZDLEtBR0psSSxHQUFTa0ksR0FDYixDQXRCQSxDQXVCSixDQUVBLElBQUlVLEdBQVUsVUFDVkMsR0FBYSxHQUFHcDlCLE9BQU9tOUIsR0FBUyxhQUNoQ0UsR0FBaUIsR0FBR3I5QixPQUFPbTlCLEdBQVMsV0FDcENHLEdBQWtCLEdBQUd0OUIsT0FBT205QixHQUFTLFlBRXpDLFNBQVNJLEdBQVloYSxFQUFRenVCLEdBQ3pCLE9BQU8wb0MsR0FBUWphLEVBQVEsS0FBTXp1QixFQUNqQyxDQUNBLFNBQVMyb0MsR0FBZ0JsYSxFQUFRenVCLEdBQzdCLE9BQU8wb0MsR0FBUWphLEVBQVEsS0FBT2gyQixHQUFTQSxHQUFTLENBQUMsRUFBR3VILEdBQVUsQ0FBRTRvQyxNQUFPLFNBQzNFLENBQ0EsU0FBU0MsR0FBZ0JwYSxFQUFRenVCLEdBQzdCLE9BQU8wb0MsR0FBUWphLEVBQVEsS0FBT2gyQixHQUFTQSxHQUFTLENBQUMsRUFBR3VILEdBQVUsQ0FBRTRvQyxNQUFPLFNBQzNFLENBRUEsSUFBSUUsR0FBd0IsQ0FBQyxFQUU3QixTQUFTdCtDLEdBQU1pMUIsRUFBUWdqQixFQUFJemlDLEdBTXZCLE1BTGtCLG1CQUFQeWlDLEdBQ1A1VixHQUFPLGdMQUlKNmIsR0FBUWpwQixFQUFRZ2pCLEVBQUl6aUMsRUFDL0IsQ0FDQSxTQUFTMG9DLEdBQVFqcEIsRUFBUWdqQixFQUFJbm9DLEdBQ3pCLElBQUlvZ0IsT0FBWSxJQUFQcGdCLEVBQWdCMm9CLEVBQWMzb0IsRUFBSStuQixFQUFZM0gsRUFBRzJILFVBQVdLLEVBQU9oSSxFQUFHZ0ksS0FBTS9ILEVBQUtELEVBQUdrdUIsTUFBT0EsT0FBZSxJQUFQanVCLEVBQWdCLE1BQVFBLEVBQUk2VCxFQUFVOVQsRUFBRzhULFFBQVNHLEVBQVlqVSxFQUFHaVUsVUFDeEs4VCxTQUNpQnRuQyxJQUFka25CLEdBQ0F3SyxHQUFPLGlIQUdFMXhCLElBQVR1bkIsR0FDQW1LLEdBQU8sd0dBSWYsSUFZSXZNLEVBNkRBeW9CLEVBekVBQyxFQUFvQixTQUFVcHdDLEdBQzlCaTBCLEdBQU8seUJBQXlCM2hCLE9BQU90UyxFQUFHLGlEQUN0QyxrRUFDUixFQUNJMUQsRUFBVzAxQixHQUNYMXhCLEVBQU8sU0FBVXlCLEVBQUlwRSxFQUFNNm9CLFFBQ2QsSUFBVEEsSUFBbUJBLEVBQU8sTUFDOUIsSUFBSWlILEVBQU11TyxHQUF3Qmo2QixFQUFJLEtBQU15a0IsRUFBTWxxQixFQUFVcUIsR0FHNUQsT0FGSW1zQixHQUFRMkQsR0FBT0EsRUFBSWlKLFFBQ25CakosRUFBSWlKLE9BQU94QixJQUFJTyxTQUNaaEksQ0FDWCxFQUVJNGlCLEdBQWUsRUFDZkMsR0FBZ0IsRUF1RHBCLEdBdERJMVksR0FBTS9RLElBQ05hLEVBQVMsV0FBYyxPQUFPYixFQUFPenBCLEtBQU8sRUFDNUNpekMsRUFBZXRYLEdBQVVsUyxJQUVwQmlTLEdBQVdqUyxJQUNoQmEsRUFBUyxXQUVMLE9BREFiLEVBQU82UCxPQUFPeEIsSUFBSU8sU0FDWDVPLENBQ1gsRUFDQWlELEdBQU8sR0FFRlMsRUFBUTFELElBQ2J5cEIsR0FBZ0IsRUFDaEJELEVBQWV4cEIsRUFBT3pXLE1BQUssU0FBVXBRLEdBQUssT0FBTzg0QixHQUFXOTRCLElBQU0rNEIsR0FBVS80QixFQUFJLElBQ2hGMG5CLEVBQVMsV0FDTCxPQUFPYixFQUFPN3lCLEtBQUksU0FBVWdNLEdBQ3hCLE9BQUk0M0IsR0FBTTUzQixHQUNDQSxFQUFFNUMsTUFFSjA3QixHQUFXOTRCLElBQ2hCQSxFQUFFMDJCLE9BQU94QixJQUFJTyxTQUNObUosR0FBUzUrQixJQUVYOHFCLEVBQVc5cUIsR0FDVE0sRUFBS04sRUFBRzJ2QyxTQUdmUyxFQUFrQnB3QyxFQUUxQixHQUNKLEdBRUs4cUIsRUFBV2pFLEdBR1phLEVBRkFtaUIsRUFFUyxXQUFjLE9BQU92cEMsRUFBS3VtQixFQUFROG9CLEdBQWlCLEVBSW5ELFdBQ0wsSUFBSXJ6QyxJQUFZQSxFQUFTcXZDLGFBTXpCLE9BSEl3RSxHQUNBQSxJQUVHN3ZDLEVBQUt1bUIsRUFBUTRvQixHQUFTLENBQUNjLEdBQ2xDLEdBSUo3b0IsRUFBU2dHLEVBQ1QwaUIsRUFBa0J2cEIsSUFFbEJnakIsR0FBTS9mLEVBQU0sQ0FDWixJQUFJMG1CLEVBQWU5b0IsRUFDbkJBLEVBQVMsV0FBYyxPQUFPa1gsR0FBUzRSLElBQWlCLENBQzVELENBRUEsSUFBSUQsRUFBWSxTQUFVeHVDLEdBQ3RCb3VDLEVBQVVsVixFQUFRd1YsT0FBUyxXQUN2Qm53QyxFQUFLeUIsRUFBSTZ0QyxHQUNiLENBQ0osRUFHQSxHQUFJMWUsS0FhQSxPQVhBcWYsRUFBWTdpQixFQUNQbWMsRUFHSXBnQixHQUNMbnBCLEVBQUt1cEMsRUFBSTZGLEdBQVksQ0FDakJob0IsSUFDQTRvQixFQUFnQixRQUFLL3RDLEVBQ3JCZ3VDLElBTko3b0IsSUFTR2dHLEVBRVgsSUFBSXVOLEVBQVUsSUFBSUMsR0FBUWxKLEdBQWlCdEssRUFBUWdHLEVBQU0sQ0FDckR5TixNQUFNLElBRVZGLEVBQVF1VSxXQUFhM0YsRUFDckIsSUFBSXhSLEVBQVdpWSxFQUFnQixHQUFLSixHQTBFcEMsT0F4RUFqVixFQUFRcVAsSUFBTSxXQUNWLEdBQUtyUCxFQUFRaVAsT0FHYixHQUFJTCxFQUFJLENBRUosSUFBSXJsQyxFQUFXeTJCLEVBQVFoOEIsT0FDbkI2cUIsR0FDQXVtQixJQUNDQyxFQUNLOXJDLEVBQVM0TCxNQUFLLFNBQVVxYSxFQU
3FHNXdCLEdBQ3pCLE9BQU84MEIsRUFBV2xFLEVBQUc0TixFQUFTeCtCLEdBQ2xDLElBQ0U4MEIsRUFBV25xQixFQUFVNnpCLE9BRXZCOFgsR0FDQUEsSUFFSjd2QyxFQUFLdXBDLEVBQUk2RixHQUFZLENBQ2pCbHJDLEVBRUE2ekIsSUFBYTZYLFFBQXdCM3RDLEVBQVk4MUIsRUFDakRrWSxJQUVKbFksRUFBVzd6QixFQUVuQixNQUdJeTJCLEVBQVFoOEIsS0FFaEIsRUFDYyxTQUFWK3dDLEVBQ0EvVSxFQUFRcHBDLE9BQVNvcEMsRUFBUXFQLElBRVYsU0FBVjBGLEdBQ0wvVSxFQUFRdG9DLE1BQU8sRUFDZnNvQyxFQUFRcHBDLE9BQVMsV0FBYyxPQUFPMDlDLEdBQWF0VSxFQUFVLEdBSTdEQSxFQUFRcHBDLE9BQVMsV0FDYixHQUFJeUssR0FBWUEsSUFBYTAxQixLQUFvQjExQixFQUFTeXFDLFdBQVksQ0FFbEUsSUFBSTJKLEVBQVNwMEMsRUFBU3l3QyxlQUFpQnp3QyxFQUFTeXdDLGFBQWUsSUFDM0QyRCxFQUFPN25DLFFBQVFveUIsR0FBVyxHQUMxQnlWLEVBQU8zNUMsS0FBS2trQyxFQUNwQixNQUVJc1UsR0FBYXRVLEVBRXJCLEVBR0FBLEVBQVFyRixRQUFVQSxFQUNsQnFGLEVBQVFsRixVQUFZQSxFQUdwQjhULEVBQ0lwZ0IsRUFDQXdSLEVBQVFxUCxNQUdSalMsRUFBVzRDLEVBQVFoOEIsTUFHUixTQUFWK3dDLEdBQW9CMXpDLEVBQ3pCQSxFQUFTcXRDLE1BQU0sZ0JBQWdCLFdBQWMsT0FBTzFPLEVBQVFoOEIsS0FBTyxJQUduRWc4QixFQUFRaDhCLE1BRUwsV0FDSGc4QixFQUFReVAsVUFDWixDQUNKLENBRUEsU0FBU2lHLEdBQVEzcEMsRUFBSzVKLEdBQ2I0MEIsR0FPRDRlLEdBQWdCNWUsSUFBaUJockIsR0FBTzVKLEVBTHBDNjJCLEdBQU8sNkNBT25CLENBQ0EsU0FBUzJjLEdBQWdCeGUsR0FNckIsSUFBSStPLEVBQVcvTyxFQUFHbVosVUFDZHNGLEVBQWlCemUsRUFBR2lVLFNBQVdqVSxFQUFHaVUsUUFBUWtGLFVBQzlDLE9BQUlzRixJQUFtQjFQLEVBQ1gvTyxFQUFHbVosVUFBWTVyQyxPQUFPMUIsT0FBTzR5QyxHQUc5QjFQLENBRWYsQ0FDQSxTQUFTMlAsR0FBTzlwQyxFQUFLOFgsRUFBY2l5QixRQUNELElBQTFCQSxJQUFvQ0EsR0FBd0IsR0FHaEUsSUFBSXowQyxFQUFXMDFCLEdBQ2YsR0FBSTExQixFQUFVLENBSVYsSUFBSTAwQyxFQUFXMTBDLEVBQVMrcEMsU0FBVy9wQyxFQUFTK3BDLFFBQVFrRixVQUNwRCxHQUFJeUYsR0FBWWhxQyxLQUFPZ3FDLEVBRW5CLE9BQU9BLEVBQVNocUMsR0FFZixHQUFJOUcsVUFBVXhQLE9BQVMsRUFDeEIsT0FBT3FnRCxHQUF5QmptQixFQUFXaE0sR0FDckNBLEVBQWF4ZSxLQUFLaEUsR0FDbEJ3aUIsRUFHTm1WLEdBQU8sY0FBZTNoQixPQUFPeU0sT0FBTy9YLEdBQU0sZ0JBRWxELE1BRUlpdEIsR0FBTyxxRUFFZixDQU1BLFNBQVNwTyxHQUFFbG9CLEVBQU0xTixFQUFPK2EsR0FLcEIsT0FKS2duQixJQUNEaUMsR0FBTyx1SkFHSjhKLEdBQWdCL0wsR0FBaUJyMEIsRUFBTTFOLEVBQU8rYSxFQUFVLEdBQUcsRUFDdEUsQ0FFQSxTQUFTazhCLEdBQVk1dkIsRUFBSzhhLEVBQUlzRCxHQUcxQk8sS0FDQSxJQUNJLEdBQUk3RCxFQUVBLElBREEsSUFBSWdLLEVBQU1oSyxFQUNGZ0ssRUFBTUEsRUFBSWlLLFNBQVUsQ0FDeEIsSUFBSXhyQixFQUFRdWhCLEVBQUkxSCxTQUFTdWMsY0FDekIsR0FBSXAyQixFQUNBLElBQUssSUFBSWhoQixFQUFJLEVBQUdBLEVBQUlnaEIsRUFBTW5xQixPQUFRbUosSUFDOUIsSUFFSSxJQURvRCxJQUF0Q2doQixFQUFNaGhCLEdBQUd5RyxLQUFLODdCLEVBQUs5a0IsRUFBSzhhLEVBQUlzRCxHQUV0QyxNQUNSLENBQ0EsTUFBTzNqQyxHQUNIbS9DLEdBQWtCbi9DLEVBQUdxcUMsRUFBSyxxQkFDOUIsQ0FHWixDQUVKOFUsR0FBa0I1NUIsRUFBSzhhLEVBQUlzRCxFQUMvQixDQUNBLFFBQ0lRLElBQ0osQ0FDSixDQUNBLFNBQVM4RixHQUF3QjcwQixFQUFTdXJCLEVBQVNsTSxFQUFNNEwsRUFBSXNELEdBQ3pELElBQUlqSSxFQUNKLEtBQ0lBLEVBQU1qSCxFQUFPcmYsRUFBUTVHLE1BQU1teUIsRUFBU2xNLEdBQVFyZixFQUFRN0csS0FBS295QixNQUM3Q2pGLEVBQUk4SyxRQUFVak4sRUFBVW1DLEtBQVNBLEVBQUkwakIsV0FDN0MxakIsRUFBSWpDLE9BQU0sU0FBVXo1QixHQUFLLE9BQU9tMUMsR0FBWW4xQyxFQUFHcWdDLEVBQUlzRCxFQUFPLG1CQUFxQixJQUMvRWpJLEVBQUkwakIsVUFBVyxFQUV2QixDQUNBLE1BQU9wL0MsR0FDSG0xQyxHQUFZbjFDLEVBQUdxZ0MsRUFBSXNELEVBQ3ZCLENBQ0EsT0FBT2pJLENBQ1gsQ0FDQSxTQUFTeWpCLEdBQWtCNTVCLEVBQUs4YSxFQUFJc0QsR0FDaEMsR0FBSXIwQixFQUFPb0gsYUFDUCxJQUNJLE9BQU9wSCxFQUFPb0gsYUFBYW5JLEtBQUssS0FBTWdYLEVBQUs4YSxFQUFJc0QsRUFDbkQsQ0FDQSxNQUFPM2pDLEdBR0NBLElBQU11bEIsR0FDTjg1QixHQUFTci9DLEVBQUcsS0FBTSxzQkFFMUIsQ0FFSnEvQyxHQUFTOTVCLEVBQUs4YSxFQUFJc0QsRUFDdEIsQ0FDQSxTQUFTMGIsR0FBUzk1QixFQUFLOGEsRUFBSXNELEdBS3ZCLEdBSEl6QixHQUFPLFlBQVkzaEIsT0FBT29qQixFQUFNLE9BQVFwakIsT0FBT2dGLEVBQUloWSxXQUFZLEtBQU84eUIsSUFHdEU1QixJQUFnQyxvQkFBWjk0QixRQUlwQixNQUFNNGYsRUFITjVmLFFBQVFxb0IsTUFBTXpJLEVBS3RCLENBR0EsSUFzQkkrNUIsR0F0QkFDLElBQW1CLEVBQ25CQyxHQUFZLEdBQ1pDLElBQVUsRUFDZCxTQUFTQyxLQUNMRCxJQUFVLEVBQ1YsSUFBSUUsRUFBU0gsR0FBVWhzQyxNQUFNLEdBQzdCZ3NDLEdBQVU3Z0QsT0FBUyxFQUNuQixJQUFLLElBQUltSixFQUFJLEVBQUdBLEVBQUk2M0MsRUFBT2hoRCxPQUFRbUosSUFDL0I2M0MsRUFBTzczQyxJQUVmLENBb0JBLEdBQXVCLG9CQUFabkIsU0FBMkI2NEIsR0FBUzc0QixTQUFVLENBQ3JELElBQUlpNUMsR0FBTWo1QyxRQUFRQyxVQUNsQjA0QyxHQUFZLFdBQ1JNLEdBQUlwbUIsS0FBS2ttQixJQU1MNWdCLElBQ0FqOEIsV0FBVzg0QixFQUNuQixFQUNBNGpCLElBQW1CLENBQ3ZCLE1BQ0ssR0FBSzVnQixJQUNzQixvQkFBckJraEIsbUJBQ05yZ0IsR0FBU3FnQixtQkFFMEIseUNBQWhDQSxpQkFBaUJ0eUMsV0FvQnJCK3hDLEdBSjZCLG9CQUFqQlEsY0FBZ0N0Z0IsR0FBU3Nn
3QixjQUl6QyxXQUNSQSxhQUFhSixHQUNqQixFQUlZLFdBQ1I3OEMsV0FBVzY4QyxHQUFnQixFQUMvQixNQTVCNkUsQ0FJN0UsSUFBSUssR0FBWSxFQUNaQyxHQUFXLElBQUlILGlCQUFpQkgsSUFDaENPLEdBQWFuMEMsU0FBU28wQyxlQUFlbHpCLE9BQU8reUIsS0FDaERDLEdBQVN2YSxRQUFRd2EsR0FBWSxDQUN6QkUsZUFBZSxJQUVuQmIsR0FBWSxXQUNSUyxJQUFhQSxHQUFZLEdBQUssRUFDOUJFLEdBQVc5aEQsS0FBTzZ1QixPQUFPK3lCLEdBQzdCLEVBQ0FSLElBQW1CLENBQ3ZCLENBa0JBLFNBQVN6SyxHQUFTZ0QsRUFBSS9jLEdBQ2xCLElBQUlxbEIsRUFtQkosR0FsQkFaLEdBQVV4NkMsTUFBSyxXQUNYLEdBQUk4eUMsRUFDQSxJQUNJQSxFQUFHdnBDLEtBQUt3c0IsRUFDWixDQUNBLE1BQU8vNkIsR0FDSG0xQyxHQUFZbjFDLEVBQUcrNkIsRUFBSyxXQUN4QixNQUVLcWxCLEdBQ0xBLEVBQVNybEIsRUFFakIsSUFDSzBrQixLQUNEQSxJQUFVLEVBQ1ZILE9BR0N4SCxHQUF5QixvQkFBWm54QyxRQUNkLE9BQU8sSUFBSUEsU0FBUSxTQUFVQyxHQUN6Qnc1QyxFQUFXeDVDLENBQ2YsR0FFUixDQUVBLFNBQVN5NUMsR0FBYXY2QyxHQU1kLE9BRklvOEIsR0FBTyx3REFFSjVKLENBRWYsQ0FNQSxTQUFTZ29CLEdBQVczcUIsR0FDaEIsR0FBSzhJLEdBQUwsQ0FFQSxJQUFJbDBCLEVBQVcwMUIsR0FDVjExQixFQUlMeXpDLElBQWdCLFdBQ1osSUFBSXhvQyxFQUFLakwsRUFBU290QixJQUNkNG9CLEVBQU81cUIsRUFBT3ByQixFQUFVQSxFQUFTa29DLGFBQ3JDLEdBQUlqOUIsR0FBc0IsSUFBaEJBLEVBQUdtWCxTQUFnQixDQUN6QixJQUFJbGMsRUFBUStFLEVBQUcvRSxNQUNmLElBQUssSUFBSXdFLEtBQU9zckMsRUFDWjl2QyxFQUFNK3ZDLFlBQVksS0FBS2pnQyxPQUFPdEwsR0FBTXNyQyxFQUFLdHJDLEdBRWpELENBQ0osSUFaSWl0QixHQUFPLGtFQUhELENBZ0JkLENBT0EsU0FBU3VlLEdBQXFCM3JCLEdBQ3RCaUUsRUFBV2pFLEtBQ1hBLEVBQVMsQ0FBRTRyQixPQUFRNXJCLElBRXZCLElBQUk0ckIsRUFBUzVyQixFQUFPNHJCLE9BQVFDLEVBQW1CN3JCLEVBQU82ckIsaUJBQWtCQyxFQUFpQjlyQixFQUFPOHJCLGVBQWdCanhDLEVBQUttbEIsRUFBTzhoQixNQUFPQSxPQUFlLElBQVBqbkMsRUFBZ0IsSUFBTUEsRUFBSWtuQyxFQUFVL2hCLEVBQU8raEIsUUFDdEw5bUIsRUFBSytFLEVBQU8rckIsWUFDWkEsT0FBcUIsSUFBUDl3QixHQUF3QkEsRUFDdEMrd0IsRUFBY2hzQixFQUFPaXNCLFFBQ2pCRixHQUNBM2UsR0FBTyx3RkFFWCxJQUFJOGUsRUFBaUIsS0FDakJDLEVBQVUsRUFDVkMsRUFBUSxXQUdSLE9BRkFELElBQ0FELEVBQWlCLEtBQ1ZHLEdBQ1gsRUFDSUEsRUFBTyxXQUNQLElBQUlDLEVBQ0osT0FBUUosSUFDSEksRUFBY0osRUFDWE4sSUFDS2puQixPQUFNLFNBQVVsVSxHQUVqQixHQURBQSxFQUFNQSxhQUFlL0MsTUFBUStDLEVBQU0sSUFBSS9DLE1BQU13SyxPQUFPekgsSUFDaER1N0IsRUFDQSxPQUFPLElBQUluNkMsU0FBUSxTQUFVQyxFQUFTQyxHQUdsQ2k2QyxFQUFZdjdCLEdBRkksV0FBYyxPQUFPM2UsRUFBUXM2QyxJQUFVLElBQ3hDLFdBQWMsT0FBT3I2QyxFQUFPMGUsRUFBTSxHQUNYMDdCLEVBQVUsRUFDcEQsSUFHQSxNQUFNMTdCLENBRWQsSUFDS2lVLE1BQUssU0FBVThiLEdBQ2hCLEdBQUk4TCxJQUFnQkosR0FBa0JBLEVBQ2xDLE9BQU9BLEVBV1gsR0FUSzFMLEdBQ0RwVCxHQUFPLGlIQUlQb1QsSUFDQ0EsRUFBSzFmLFlBQTJDLFdBQTdCMGYsRUFBSzFWLE9BQU80VixnQkFDaENGLEVBQU9BLEVBQUs3eUIsU0FFWjZ5QixJQUFTdGMsRUFBU3NjLEtBQVV2YyxFQUFXdWMsR0FDdkMsTUFBTSxJQUFJOXlCLE1BQU0sd0NBQXdDakMsT0FBTyswQixJQUVuRSxPQUFPQSxDQUNYLElBQ1osRUFDQSxPQUFPLFdBRUgsTUFBTyxDQUNIN2UsVUFGWTBxQixJQUdadkssTUFBT0EsRUFDUEMsUUFBU0EsRUFDVDdvQixNQUFPNHlCLEVBQ1A1SyxRQUFTMkssRUFFakIsQ0FDSixDQUVBLFNBQVNVLEdBQWdCQyxHQUNyQixPQUFPLFNBQVV0eEMsRUFBSTVQLEdBRWpCLFFBRGUsSUFBWEEsSUFBcUJBLEVBQVM2L0IsSUFDN0I3L0IsRUFNTCxPQUFPbWhELEdBQVduaEQsRUFBUWtoRCxFQUFVdHhDLEdBTGhDa3lCLEdBQU8sR0FBRzNoQixPQUFPaWhDLEdBQVdGLEdBQVcsZ0VBQWhDLDBGQU1mLENBQ0osQ0FDQSxTQUFTRSxHQUFXMTdDLEdBT2hCLE1BTmEsa0JBQVRBLEVBQ0FBLEVBQU8sZ0JBRU8sY0FBVEEsSUFDTEEsRUFBTyxhQUVKLEtBQUt5YSxPQUFPemEsRUFBSyxHQUFHNDBCLGNBQWdCNTBCLEVBQUswTixNQUFNLEdBQzFELENBQ0EsU0FBUyt0QyxHQUFXaDNDLEVBQVUrMkMsRUFBVXR4QyxHQUNwQyxJQUFJcUYsRUFBVTlLLEVBQVNvNEIsU0FDdkJ0dEIsRUFBUWlzQyxHQUFZRyxHQUFtQnBzQyxFQUFRaXNDLEd
3BQVd0eEMsRUFDOUQsQ0FDQSxJQUFJMHhDLEdBQWdCTCxHQUFnQixlQUNoQ00sR0FBWU4sR0FBZ0IsV0FDNUJPLEdBQWlCUCxHQUFnQixnQkFDakNRLEdBQVlSLEdBQWdCLFdBQzVCUyxHQUFrQlQsR0FBZ0IsaUJBQ2xDVSxHQUFjVixHQUFnQixhQUM5QlcsR0FBY1gsR0FBZ0IsYUFDOUJZLEdBQWdCWixHQUFnQixlQUNoQ2EsR0FBbUJiLEdBQWdCLGtCQUNuQ2MsR0FBa0JkLEdBQWdCLGlCQUNsQ2UsR0FBb0JmLEdBQWdCLG1CQUNwQ2dCLEdBQTBCaEIsR0FBZ0IsaUJBQzlDLFNBQVNpQixHQUFnQmg0QixFQUFNbHFCLFFBQ1osSUFBWEEsSUFBcUJBLEVBQVM2L0IsSUFDbENvaUIsR0FBd0IvM0IsRUFBTWxxQixFQUNsQyxDQUtBLElBQUltaUQsR0FBVSxTQUlkLFNBQVNDLEdBQWdCbnRDLEdBQ3JCLE9BQU9BLENBQ1gsQ0FFQSxJQUFJb3RDLEdBQW1CNzBDLE9BQU8ycUIsT0FBTyxDQUNuQ2dOLFVBQVcsS0FDWGdkLFFBQVNBLEdBQ1RDLGdCQUFpQkEsR0FDakI3MEMsSUFBSzY1QixHQUNMRSxXQUFZQSxHQUNaN0IsTUFBT0EsR0FDUHNDLE1BQU9BLEdBQ1BELE9BQVFBLEdBQ1JMLE1BQU9BLEdBQ1BDLFVBQVdBLEdBQ1hHLFVBQVdBLEdBQ1hMLFdBQVlBLEdBQ1psQixTQUFVQSxHQUNWSyxXQUFZQSxHQUNaUixXQUFZQSxHQUNaUyxVQUFXQSxHQUNYRyxRQUFTQSxHQUNUUCxnQkFBaUJBLEdBQ2pCVSxRQUFTQSxHQUNURixNQUFPQSxHQUNQb0IsU0FBVUEsR0FDVk0sZ0JBQWlCQSxHQUNqQnpxQyxTQUFVQSxHQUNWd0IsTUFBT0EsR0FDUGkrQyxZQUFhQSxHQUNiRSxnQkFBaUJBLEdBQ2pCRSxnQkFBaUJBLEdBQ2pCakcsWUFBYUEsR0FDYlcsWUFBYUEsR0FDYkksZUFBZ0JBLEdBQ2hCRCxnQkFBaUJBLEdBQ2pCNkYsUUFBU0EsR0FDVEcsT0FBUUEsR0FDUmpyQixFQUFHQSxHQUNIb00sbUJBQW9CQSxHQUNwQndULFNBQVVBLEdBQ1ZFLFNBQVVBLEdBQ1ZDLGFBQWNBLEdBQ2RDLGNBQWVBLEdBQ2ZnQixTQUFVQSxHQUNWanRCLElBQUtBLEdBQ0w0ZSxJQUFLQSxHQUNMNFosYUFBY0EsR0FDZEMsV0FBWUEsR0FDWkcscUJBQXNCQSxHQUN0QmlCLGNBQWVBLEdBQ2ZDLFVBQVd
3BLEdBQ1hDLGVBQWdCQSxHQUNoQkMsVUFBV0EsR0FDWEMsZ0JBQWlCQSxHQUNqQkMsWUFBYUEsR0FDYkMsWUFBYUEsR0FDYkMsY0FBZUEsR0FDZkMsaUJBQWtCQSxHQUNsQkMsZ0JBQWlCQSxHQUNqQkMsa0JBQW1CQSxHQUNuQkUsZ0JBQWlCQSxLQUdmSSxHQUFjLElBQUloakIsR0FNdEIsU0FBU21OLEdBQVMxaUIsR0FHZCxPQUZBdzRCLEdBQVV4NEIsRUFBS3U0QixJQUNmQSxHQUFZaGtDLFFBQ0x5TCxDQUNYLENBQ0EsU0FBU3c0QixHQUFVeDRCLEVBQUt5NEIsR0FDcEIsSUFBSTk2QyxFQUFHaXRCLEVBQ0g4dEIsRUFBTXJxQixFQUFRck8sR0FDbEIsTUFBTTA0QixJQUFRN3BCLEVBQVM3TyxJQUNuQkEsRUFBSXliLFVBQ0poNEIsT0FBT2sxQyxTQUFTMzRCLElBQ2hCQSxhQUFlc1csSUFIbkIsQ0FNQSxHQUFJdFcsRUFBSXdhLE9BQVEsQ0FDWixJQUFJb2UsRUFBUTU0QixFQUFJd2EsT0FBT3hCLElBQUkxL0IsR0FDM0IsR0FBSW0vQyxFQUFLNWlCLElBQUkraUIsR0FDVCxPQUVKSCxFQUFLMThDLElBQUk2OEMsRUFDYixDQUNBLEdBQUlGLEVBRUEsSUFEQS82QyxFQUFJcWlCLEVBQUl4ckIsT0FDRG1KLEtBQ0g2NkMsR0FBVXg0QixFQUFJcmlCLEdBQUk4NkMsUUFFckIsR0FBSS9jLEdBQU0xYixHQUNYdzRCLEdBQVV4NEIsRUFBSTllLE1BQU91M0MsUUFLckIsSUFEQTk2QyxHQURBaXRCLEVBQU9ubkIsT0FBT21uQixLQUFLNUssSUFDVnhyQixPQUNGbUosS0FDSDY2QyxHQUFVeDRCLEVBQUk0SyxFQUFLanRCLElBQUs4NkMsRUFwQmhDLENBc0JKLENBRUEsSUFBSUksR0FBUSxFQU9SN1osR0FBeUIsV0FDekIsU0FBU0EsRUFBUTlJLEVBQUk0aUIsRUFBU25MLEVBQUl6aUMsRUFBUzZ0QyxHQUN2Q3JLLEdBQWtCdDZDLEtBR2xCbzJDLEtBQXNCQSxHQUFrQndPLElBQ2xDeE8sR0FDQXRVLEVBQ0lBLEVBQUdDLFlBQ0g5dkIsSUFDTGpTLEtBQUs4aEMsR0FBS0EsSUFBTzZpQixJQUNsQjdpQixFQUFHb1osU0FBV2w3QyxNQUdkOFcsR0FDQTlXLEtBQUt3NUIsT0FBUzFpQixFQUFRMGlCLEtBQ3RCeDVCLEtBQUswK0MsT0FBUzVuQyxFQUFRNG5DLEtBQ3RCMStDLEtBQUs2cUMsT0FBUy96QixFQUFRK3pCLEtBQ3RCN3FDLEtBQUs2a0QsT0FBUy90QyxFQUFRK3RDLEtBQ3RCN2tELEtBQUt1OEMsT0FBU3psQyxFQUFReWxDLE9BRWxCdjhDLEtBQUtzbEMsUUFBVXh1QixFQUFRd3VCLFFBQ3ZCdGxDLEtBQUt5bEMsVUFBWTN1QixFQUFRMnVCLFdBSTdCemxDLEtBQUt3NUIsS0FBT3g1QixLQUFLMCtDLEtBQU8xK0MsS0FBSzZxQyxLQUFPN3FDLEtBQUs2a0QsTUFBTyxFQUVwRDdrRCxLQUFLdTVDLEdBQUtBLEVBQ1Z2NUMsS0FBS2tGLEtBQU91L0MsR0FDWnprRCxLQUFLNDVDLFFBQVMsRUFDZDU1QyxLQUFLcUMsTUFBTyxFQUNackMsS0FBSzhxQyxNQUFROXFDLEtBQUs2cUMsS0FDbEI3cUMsS0FBSzhrRCxLQUFPLEdBQ1o5a0QsS0FBSytrRCxRQUFVLEdBQ2Yva0QsS0FBS2dsRCxPQUFTLElBQUk3akIsR0FDbEJuaEMsS0FBS2lsRCxVQUFZLElBQUk5akIsR0FDckJuaEMsS0FBSzIrQyxXQUFhK0YsRUFBUTExQyxXQUV0Qndy
3QixFQUFXa3FCLEdBQ1gxa0QsS0FBS28zQixPQUFTc3RCLEdBR2Qxa0QsS0FBS28zQixPQUFTMkksRUFBVTJrQixHQUNuQjFrRCxLQUFLbzNCLFNBQ05wM0IsS0FBS28zQixPQUFTZ0csRUFDZHVHLEdBQU8sMEJBQTJCM2hCLE9BQU8waUMsRUFBUyxNQUEzQyw2RkFFOEM1aUIsS0FHN0Q5aEMsS0FBSzhNLE1BQVE5TSxLQUFLNnFDLFVBQU81NEIsRUFBWWpTLEtBQUsyTyxLQUM5QyxDQTRJQSxPQXhJQWk4QixFQUFROTZCLFVBQVVuQixJQUFNLFdBRXBCLElBQUk3QixFQURKNjRCLEdBQVczbEMsTUFFWCxJQUFJOGhDLEVBQUs5aEMsS0FBSzhoQyxHQUNkLElBQ0loMUIsRUFBUTlNLEtBQUtvM0IsT0FBT3BuQixLQUFLOHhCLEVBQUlBLEVBQ2pDLENBQ0EsTUFBT3JnQyxHQUNILElBQUl6QixLQUFLMCtDLEtBSUwsTUFBTWo5QyxFQUhObTFDLEdBQVluMUMsRUFBR3FnQyxFQUFJLHVCQUF3QjlmLE9BQU9oaUIsS0FBSzIrQyxXQUFZLEtBSzNFLENBQ0EsUUFHUTMrQyxLQUFLdzVCLE1BQ0w4VSxHQUFTeGhDLEdBRWI4NEIsS0FDQTVsQyxLQUFLMmtDLGFBQ1QsQ0FDQSxPQUFPNzNCLENBQ1gsRUFJQTg5QixFQUFROTZCLFVBQVV1MUIsT0FBUyxTQUFVVCxHQUNqQyxJQUFJMS9CLEVBQUswL0IsRUFBSTEvQixHQUNSbEYsS0FBS2lsRCxVQUFVeGpCLElBQUl2OEIsS0FDcEJsRixLQUFLaWxELFVBQVV0OUMsSUFBSXpDLEdBQ25CbEYsS0FBSytrRCxRQUFRdCtDLEtBQUttK0IsR0FDYjVrQyxLQUFLZ2xELE9BQU92akIsSUFBSXY4QixJQUNqQjAvQixFQUFJSSxPQUFPaGxDLE1BR3ZCLEVBSUE0cUMsRUFBUTk2QixVQUFVNjBCLFlBQWMsV0FFNUIsSUFEQSxJQUFJcDdCLEVBQUl2SixLQUFLOGtELEtBQUsxa0QsT0FDWG1KLEtBQUssQ0FDUixJQUFJcTdCLEVBQU01a0MsS0FBSzhrRCxLQUFLdjdDLEdBQ2Z2SixLQUFLaWxELFVBQVV4akIsSUFBSW1ELEVBQUkxL0IsS0FDeEIwL0IsRUFBSU0sVUFBVWxsQyxLQUV0QixDQUNBLElBQUlrbEQsRUFBTWxsRCxLQUFLZ2xELE9BQ2ZobEQsS0FBS2dsRCxPQUFTaGxELEtBQUtpbEQsVUFDbkJqbEQsS0FBS2lsRCxVQUFZQyxFQUNqQmxsRCxLQUFLaWxELFVBQVU5a0MsUUFDZitrQyxFQUFNbGxELEtBQUs4a0QsS0FDWDlrRCxLQUFLOGtELEtBQU85a0QsS0FBSytrRCxRQUNqQi9rRCxLQUFLK2tELFFBQVVHLEVBQ2ZsbEQsS0FBSytrRCxRQUFRM2tELE9BQVMsQ0FDMUIsRUFLQXdxQyxFQUFROTZCLFVBQVV2TyxPQUFTLFdBRW5CdkIsS0FBSzZxQyxLQUNMN3FDLEtBQUs4cUMsT0FBUSxFQUVSOXFDLEtBQUs2a0QsS0FDVjdrRCxLQUFLZzZDLE1BR0xpRixHQUFhai9DLEtBRXJCLEVBS0E0cUMsRUFBUTk2QixVQUFVa3FDLElBQU0sV0FDcEIsR0FBSWg2QyxLQUFLNDVDLE9BQVEsQ0FDYixJQUFJOXNDLEVBQVE5TSxLQUFLMk8sTUFDakIsR0FBSTdCLElBQVU5TSxLQUFLOE0sT0FJZjJ0QixFQUFTM3RCLElBQ1Q5TSxLQUFLdzVCLEtBQU0sQ0FFWCxJQUFJdU8sRUFBVy9uQyxLQUFLOE0sTUFFcEIsR0FEQTlNLEtBQUs4TSxNQUFRQSxFQUNUOU0sS0FBSzArQyxLQUFNLENBQ1gsSUFBSXRaLEVBQU8seUJBQTBCcGpCLE9BQU9oaUIsS0FBSzIrQyxXQUFZLEtB
3QzdEalQsR0FBd0IxckMsS0FBS3U1QyxHQUFJdjVDLEtBQUs4aEMsR0FBSSxDQUFDaDFCLEVBQU9pN0IsR0FBVy9uQyxLQUFLOGhDLEdBQUlzRCxFQUMxRSxNQUVJcGxDLEtBQUt1NUMsR0FBR3ZwQyxLQUFLaFEsS0FBSzhoQyxHQUFJaDFCLEVBQU9pN0IsRUFFckMsQ0FDSixDQUNKLEVBS0E2QyxFQUFROTZCLFVBQVVpN0IsU0FBVyxXQUN6Qi9xQyxLQUFLOE0sTUFBUTlNLEtBQUsyTyxNQUNsQjNPLEtBQUs4cUMsT0FBUSxDQUNqQixFQUlBRixFQUFROTZCLFVBQVVxMUIsT0FBUyxXQUV2QixJQURBLElBQUk1N0IsRUFBSXZKLEtBQUs4a0QsS0FBSzFrRCxPQUNYbUosS0FDSHZKLEtBQUs4a0QsS0FBS3Y3QyxHQUFHNDdCLFFBRXJCLEVBSUF5RixFQUFROTZCLFVBQVVzcUMsU0FBVyxXQUl6QixHQUhJcDZDLEtBQUs4aEMsS0FBTzloQyxLQUFLOGhDLEdBQUd3WixtQkFDcEIzZixFQUFTMzdCLEtBQUs4aEMsR0FBR0MsT0FBTzhYLFFBQVM3NUMsTUFFakNBLEtBQUs0NUMsT0FBUSxDQUViLElBREEsSUFBSXJ3QyxFQUFJdkosS0FBSzhrRCxLQUFLMWtELE9BQ1htSixLQUNIdkosS0FBSzhrRCxLQUFLdjdDLEdBQUcyN0IsVUFBVWxsQyxNQUUzQkEsS0FBSzQ1QyxRQUFTLEVBQ1Y1NUMsS0FBS21nRCxRQUNMbmdELEtBQUttZ0QsUUFFYixDQUNKLEVBQ092VixDQUNYLENBak00QixHQW1NeEJ1YSxHQUEyQixDQUMzQjN0QixZQUFZLEVBQ1pxSSxjQUFjLEVBQ2RseEIsSUFBS3l1QixFQUNMOVQsSUFBSzhULEdBRVQsU0FBU3dFLEdBQU0vL0IsRUFBUXVqRCxFQUFXMXVDLEdBQzlCeXVDLEdBQXlCeDJDLElBQU0sV0FDM0IsT0FBTzNPLEtBQUtvbEQsR0FBVzF1QyxFQUMzQixFQUNBeXVDLEdBQXlCNzdCLElBQU0sU0FBcUJzQyxHQUNoRDVyQixLQUFLb2xELEdBQVcxdUMsR0FBT2tWLENBQzNCLEVBQ0F2YyxPQUFPNmIsZUFBZXJwQixFQUFRNlUsRUFBS3l1QyxHQUN2QyxDQUNBLFNBQVNFLEdBQVV2akIsR0FDZixJQUFJL04sRUFBTytOLEVBQUdzQyxTQU9kLEdBTklyUSxFQUFLcDBCLE9BQ0wybEQsR0FBWXhqQixFQUFJL04sRUFBS3AwQixPQUV6Qit6QyxHQUFVNVIsR0FDTi9OLEVBQUt2eUIsU0FDTCtqRCxHQUFZempCLEVBQUkvTixFQUFLdnlCLFNBQ3JCdXlCLEVBQUtuMEIsS0FDTDRsRCxHQUFTMWpCLE9BRVIsQ0FDRCxJQUFJcUUsRUFBS2UsR0FBU3BGLEVBQUdtYSxNQUFRLENBQUMsR0FDOUI5VixHQUFNQSxFQUFHWSxTQUNiLENBQ0loVCxFQUFLajBCLFVBQ0wybEQsR0FBZT
3NqQixFQUFJL04sRUFBS2owQixVQUN4QmkwQixFQUFLenlCLE9BQVN5eUIsRUFBS3p5QixRQUFVby9CLElBQzdCZ2xCLEdBQVU1akIsRUFBSS9OLEVBQUt6eUIsTUFFM0IsQ0FDQSxTQUFTZ2tELEdBQVl4akIsRUFBSTZqQixHQUNyQixJQUFJaEosRUFBWTdhLEVBQUdzQyxTQUFTdVksV0FBYSxDQUFDLEVBQ3RDaDlDLEVBQVNtaUMsRUFBR2lTLE9BQVMxTCxHQUFnQixDQUFDLEdBR3RDN1IsRUFBUXNMLEVBQUdzQyxTQUFTZ1osVUFBWSxHQUNoQ3dJLEdBQVU5akIsRUFBR2lVLFFBRVo2UCxHQUNEbGYsSUFBZ0IsR0FFcEIsSUFBSXBRLEVBQVUsU0FBVTVmLEdBQ3BCOGYsRUFBSy92QixLQUFLaVEsR0FDVixJQUFJNUosRUFBUXV3QyxHQUFhM21DLEVBQUtpdkMsRUFBY2hKLEVBQVc3YSxHQUcvQ29PLEVBQWdCNVQsRUFBVTVsQixJQUMxQmdsQixFQUFvQndVLElBQ3BCbi9CLEVBQU9tdUIsZUFBZWdSLEtBQ3RCdk0sR0FBTyxJQUFLM2hCLE9BQU9rdUIsRUFBZSxtRUFBcUVwTyxHQUUzR21GLEdBQWV0bkMsRUFBTytXLEVBQUs1SixHQUFPLFdBQ3pCODRDLEdBQVczUCxJQUNadFMsR0FBTyw2S0FHSCwrQkFBZ0MzaEIsT0FBT3RMLEVBQUssS0FBT29yQixFQUUvRCxJQUFHLEdBS0RwckIsS0FBT29yQixHQUNURixHQUFNRSxFQUFJLFNBQVVwckIsRUFFNUIsRUFDQSxJQUFLLElBQUlBLEtBQU9pdkMsRUFDWnJ2QixFQUFRNWYsR0FFWmd3QixJQUFnQixFQUNwQixDQUNBLFNBQVM4ZSxHQUFTMWpCLEdBQ2QsSUFBSWxpQyxFQUFPa2lDLEVBQUdzQyxTQUFTeGtDLEtBRWxCZzdCLEVBRExoN0IsRUFBT2tpQyxFQUFHbWEsTUFBUXpoQixFQUFXNTZCLEdBQVFpbUQsR0FBUWptRCxFQUFNa2lDLEdBQU1saUMsR0FBUSxDQUFDLEtBRTlEQSxFQUFPLENBQUMsRUFDUitqQyxHQUFPLGlIQUMwRTdCLElBT3JGLElBSkEsSUFBSXRMLEVBQU9ubkIsT0FBT21uQixLQUFLNTJCLEdBQ25CRCxFQUFRbWlDLEVBQUdzQyxTQUFTemtDLE1BQ3BCNkIsRUFBVXNnQyxFQUFHc0MsU0FBUzVpQyxRQUN0QitILEVBQUlpdEIsRUFBS3AyQixPQUNObUosS0FBSyxDQUNSLElBQUltTixFQUFNOGYsRUFBS2p0QixHQUVQL0gsR0FBV3M2QixFQUFPdDZCLEVBQVNrVixJQUMzQml0QixHQUFPLFdBQVkzaEIsT0FBT3RMLEVBQUssa0RBQW9Eb3JCLEdBR3ZGbmlDLEdBQVNtOEIsRUFBT244QixFQUFPK1csR0FDdkJpdEIsR0FBTyxzQkFBdUIzaEIsT0FBT3RMLEVBQUsscUNBQ2xDLGtDQUFtQ29yQixHQUVyQ3JDLEVBQVcvb0IsSUFDakJrckIsR0FBTUUsRUFBSSxRQUFTcHJCLEVBRTNCLENBRUEsSUFBSXl2QixFQUFLZSxHQUFRdG5DLEdBQ2pCdW1DLEdBQU1BLEVBQUdZLFNBQ2IsQ0FDQSxTQUFTOGUsR0FBUWptRCxFQUFNa2lDLEdBRW5CNkQsS0FDQSxJQUNJLE9BQU8vbEMsRUFBS29RLEtBQUs4eEIsRUFBSUEsRUFDekIsQ0FDQSxNQUFPcmdDLEdBRUgsT0FEQW0xQyxHQUFZbjFDLEVBQUdxZ0MsRUFBSSxVQUNaLENBQUMsQ0FDWixDQUNBLFFBQ0k4RCxJQUNKLENBQ0osQ0FDQSxJQUFJa2dCLEdBQXlCLENBQUVqYixNQUFNLEdBQ3JDLFNBQVM0YSxHQUFlM2pCLEVBQUloaUMsR0FFeEIsSUFBSWltRCxFQUFZamtCLEVBQUdra0Isa0JBQW9CMzJDLE9BQU8xQixPQUFPLE1BRWpEczRDLEVBQVFybEIsS0FDWixJQUFLLElBQUlscUIsS0FBTzVXLEVBQVUsQ0FDdEIsSUFBSW9tRCxFQUFVcG1ELEVBQVM0VyxHQUNuQjBnQixFQUFTb0QsRU
3FBVzByQixHQUFXQSxFQUFVQSxFQUFRdjNDLElBQ3ZDLE1BQVZ5b0IsR0FDQXVNLEdBQU8sNENBQTZDM2hCLE9BQU90TCxFQUFLLE1BQVFvckIsR0FFdkVta0IsSUFFREYsRUFBU3J2QyxHQUFPLElBQUlrMEIsR0FBUTlJLEVBQUkxSyxHQUFVZ0csRUFBTUEsRUFBTTBvQixLQUtwRHB2QyxLQUFPb3JCLEVBSUxwckIsS0FBT29yQixFQUFHb0MsTUFDVlAsR0FBTywwQkFBMkIzaEIsT0FBT3RMLEVBQUssaUNBQW1Db3JCLEdBRTVFQSxFQUFHc0MsU0FBU3prQyxPQUFTK1csS0FBT29yQixFQUFHc0MsU0FBU3prQyxNQUM3Q2drQyxHQUFPLDBCQUEyQjNoQixPQUFPdEwsRUFBSyxtQ0FBcUNvckIsR0FFOUVBLEVBQUdzQyxTQUFTNWlDLFNBQVdrVixLQUFPb3JCLEVBQUdzQyxTQUFTNWlDLFNBQy9DbWlDLEdBQU8sMEJBQTJCM2hCLE9BQU90TCxFQUFLLHFDQUF1Q29yQixHQVZ6RnFrQixHQUFlcmtCLEVBQUlwckIsRUFBS3d2QyxFQWFoQyxDQUNKLENBQ0EsU0FBU0MsR0FBZXRrRCxFQUFRNlUsRUFBS3d2QyxHQUNqQyxJQUFJRSxHQUFleGxCLEtBQ2ZwRyxFQUFXMHJCLElBQ1hmLEdBQXlCeDJDLElBQU15M0MsRUFDekJDLEdBQXFCM3ZDLEdBQ3JCNHZDLEdBQW9CSixHQUMxQmYsR0FBeUI3N0IsSUFBTThULElBRy9CK25CLEdBQXlCeDJDLElBQU11M0MsRUFBUXYzQyxJQUNqQ3kzQyxJQUFpQyxJQUFsQkYsRUFBUWxxQixNQUNuQnFxQixHQUFxQjN2QyxHQUNyQjR2QyxHQUFvQkosRUFBUXYzQyxLQUNoQ3l1QixFQUNOK25CLEdBQXlCNzdCLElBQU00OEIsRUFBUTU4QixLQUFPOFQsR0FFOUMrbkIsR0FBeUI3N0IsTUFBUThULElBQ2pDK25CLEdBQXlCNzdCLElBQU0sV0FDM0JxYSxHQUFPLHNCQUF1QjNoQixPQUFPdEwsRUFBSywyQ0FBNkMxVyxLQUMzRixHQUVKcVAsT0FBTzZiLGVBQWVycEIsRUFBUTZVLEVBQUt5dUMsR0FDdkMsQ0FDQSxTQUFTa0IsR0FBcUIzdkMsR0FDMUIsT0FBTyxXQUNILElBQUlpMEIsRUFBVTNxQyxLQUFLZ21ELG1CQUFxQmhtRCxLQUFLZ21ELGtCQUFrQnR2QyxHQUMvRCxHQUFJaTBCLEVBZUEsT0FkSUEsRUFBUUcsT0FDUkgsRUFBUUksV0FFUmhHLEdBQUlsakMsU0FDQWtqQyxHQUFJbGpDLE9BQU95akMsU0FDWFAsR0FBSWxqQyxPQUFPeWpDLFFBQVEsQ0FDZkMsT0FBUVIsR0FBSWxqQyxPQUNaQSxPQUFRN0IsS0FDUnFOLEtBQU0sTUFDTnFKLElBQUtBLElBR2JpMEIsRUFBUXhGLFVBRUx3RixFQUFRNzlCLEtBRXZCLENBQ0osQ0FDQSxTQUFTdzVDLEdBQW9CNzBDLEdBQ3pCLE9BQU8sV0FDSCxPQUFPQSxFQUFHekIsS0FBS2hRLEtBQU1BLEtBQ3pCLENBQ0osQ0FDQSxTQUFTdWxELEdBQVl6akIsRUFBSXRnQyxHQUNyQixJQUFJN0IsRUFBUW1pQyxFQUFHc0MsU0FBU3prQyxNQUN4QixJQUFLLElBQUkrVyxLQUFPbFYsRUFFb0IsbUJBQWpCQSxFQUFRa1YsSUFDZml0QixHQUFPLFdBQVkzaEIsT0FBT3RMLEVBQUssZ0JBQWtCc0wsY0FBY3hnQixFQUFRa1YsR0FBTSxtQ0FDekUsNENBQTZDb3JCLEdBRWpEbmlDLEdBQVNtOEIsRUFBT244QixFQUFPK1csSUFDdkJpdEIsR0FBTyxXQUFZM2hCLE9BQU90TCxFQUFLLHlDQUEyQ29yQixHQUUxRXByQixLQUFPb3JCLEdBQU1yQyxFQUFXL29CLElBQ3hCaXRCLEdBQU8sV0FBWTNoQixPQUFPdEwsRUFBSyxzREFDM0IsNERBR1pvckIsRUFBR3ByQixHQUErQixtQkFBakJsVixFQUFRa1YsR0FBc0IwbUIsRUFBT1IsRUFBT3A3QixFQUFRa1YsR0FBTW9yQixFQUVuRixDQUNBLFNBQVM0akIsR0FBVTVqQixFQUFJeGdDLEdBQ25CLElBQUssSUFBSW9WLEtBQU9wVixFQUFPLENBQ25CLElBQUl1VixFQUFVdlYsRUFBTW9WLEdBQ3BCLEdBQUl1akIsRUFBUXBqQixHQUNSLElBQUssSUFBSXROLEVBQUksRUFBR0EsRUFBSXNOLEVBQVF6VyxPQUFRbUosSUFDaENnOUMsR0FBY3prQixFQUFJcHJCLEVBQUtHLEVBQVF0TixTQUluQ2c5QyxHQUFjemtCLEVBQUlwckIsRUFBS0csRUFFL0IsQ0FDSixDQUNBLFNBQVMwdkMsR0FBY3prQixFQUFJNGlCLEVBQVM3dEMsRUFBU0MsR0FRekMsT0FQSThqQixFQUFjL2pCLEtBQ2RDLEVBQVVELEVBQ1ZBLEVBQVVBLEVBQVFBLFNBRUMsaUJBQVpBLElBQ1BBLEVBQVVpckIsRUFBR2pyQixJQUVWaXJCLEVBQUc3SSxPQUFPeXJCLEVBQVM3dEMsRUFBU0MsRUFDdkMsQ0FDQSxTQUFTMHZDLEdBQVc1c0IsR0FJaEIsSUFBSTZzQixFQUFVLENBQ2RBLElBQWMsV0FDVixPQUFPem1ELEtBQUtpOEMsS0FDaEIsR0FDSXlLLEVBQVcsQ0FDZkEsSUFBZSxXQUNYLE9BQU8xbUQsS0FBSyt6QyxNQUNoQixHQUVJMFMsRUFBUW45QixJQUFNLFdBQ1ZxYSxHQUFPLDJFQUNvQzNqQyxLQUMvQyxFQUNBMG1ELEVBQVNwOUIsSUFBTSxXQUNYcWEsR0FBTyxzQkFBdUIzakMsS0FDbEMsRUFFSnFQLE9BQU82YixlQUFlME8sRUFBSTlwQixVQUFXLFFBQVMyMkMsR0FDOUNwM0MsT0FBTzZiLGVBQWUwTyxFQUFJOXBCLFVBQVcsU0FBVTQyQyxHQUMvQzlzQixFQUFJOXBCLFVBQVU2MkMsS0FBT3I5QixHQUNyQnNRLEVBQUk5cEIsVUFBVTgyQyxRQUFVMWUsR0FDeEJ0TyxFQUFJOXBCLFVBQVVtcEIsT0FBUyxTQUFVeXJCLEVBQVNuTCxFQUFJemlDLEdBQzFDLElBQUlnckIsRUFBSzloQyxLQUNULEdBQUk0NkIsRUFBYzJlLEdBQ2QsT0FBT2dOLEdBQWN6a0IsRUFBSTRpQixFQUFTbkwsRUFBSXppQyxJQUUxQ0EsRUFBVUEsR0FBVyxDQUFDLEdBQ2Q0bkMsTUFBTyxFQUNmLElBQUkvVCxFQUFVLElBQUlDLEdBQVE5SSxFQUFJNGlCLEVBQVNuTCxFQUFJemlDLEdBQzNDLEdBQUlBLEVBQVFxaUIsVUFBVyxDQUNuQixJQUFJaU0sRUFBTyxtQ0FBb0NwakIsT0FBTzJvQixFQUFRZ1UsV0FBWSxLQUMxRWhaLEtBQ0ErRixHQUF3QjZOLEVBQUl6WCxFQU
3FJLENBQUM2SSxFQUFRNzlCLE9BQVFnMUIsRUFBSXNELEdBQ3JEUSxJQUNKLENBQ0EsT0FBTyxXQUNIK0UsRUFBUXlQLFVBQ1osQ0FDSixDQUNKLENBRUEsU0FBU3lNLEdBQVkva0IsR0FDakIsSUFBSWdsQixFQUFnQmhsQixFQUFHc0MsU0FBU2ljLFFBQ2hDLEdBQUl5RyxFQUFlLENBQ2YsSUFBSUMsRUFBV3ZzQixFQUFXc3NCLEdBQ3BCQSxFQUFjOTJDLEtBQUs4eEIsR0FDbkJnbEIsRUFDTixJQUFLcnNCLEVBQVNzc0IsR0FDVixPQU1KLElBSkEsSUFBSXh3QixFQUFTK3BCLEdBQWdCeGUsR0FHekJ0TCxFQUFPNEssR0FBWUUsUUFBUUMsUUFBUXdsQixHQUFZMTNDLE9BQU9tbkIsS0FBS3V3QixHQUN0RHg5QyxFQUFJLEVBQUdBLEVBQUlpdEIsRUFBS3AyQixPQUFRbUosSUFBSyxDQUNsQyxJQUFJbU4sRUFBTThmLEVBQUtqdEIsR0FDZjhGLE9BQU82YixlQUFlcUwsRUFBUTdmLEVBQUtySCxPQUFPcTRCLHlCQUF5QnFmLEVBQVVyd0MsR0FDakYsQ0FDSixDQUNKLENBQ0EsU0FBU3N3QyxHQUFlbGxCLEdBQ3BCLElBQUk5ckIsRUFBU2l4QyxHQUFjbmxCLEVBQUdzQyxTQUFTb2MsT0FBUTFlLEdBQzNDOXJCLElBQ0Ewd0IsSUFBZ0IsR0FDaEJyM0IsT0FBT21uQixLQUFLeGdCLEdBQVFlLFNBQVEsU0FBVUwsR0FHOUJ1d0IsR0FBZW5GLEVBQUlwckIsRUFBS1YsRUFBT1UsSUFBTSxXQUNqQ2l0QixHQUFPLCtIQUVILDZCQUE4QjNoQixPQUFPdEwsRUFBSyxLQUFPb3JCLEVBQ3pELEdBRVIsSUFDQTRFLElBQWdCLEdBRXhCLENBQ0EsU0FBU3VnQixHQUFjekcsRUFBUTFlLEdBQzNCLEdBQUkwZSxFQUFRLENBSVIsSUFGQSxJQUFJeHFDLEVBQVMzRyxPQUFPMUIsT0FBTyxNQUN2QjZvQixFQUFPNEssR0FBWUUsUUFBUUMsUUFBUWlmLEdBQVVueEMsT0FBT21uQixLQUFLZ3FCLEdBQ3BEajNDLEVBQUksRUFBR0EsRUFBSWl0QixFQUFLcDJCLE9BQVFtSixJQUFLLENBQ2xDLElBQUltTixFQUFNOGYsRUFBS2p0QixHQUVmLEdBQVksV0FBUm1OLEVBQUosQ0FFQSxJQUFJd3dDLEVBQWExRyxFQUFPOXBDLEdBQUt6SSxLQUM3QixHQUFJaTVDLEtBQWNwbEIsRUFBR21aLFVBQ2pCamxDLEVBQU9VLEdBQU9vckIsRUFBR21aLFVBQVVpTSxRQUUxQixHQUFJLFlBQWExRyxFQUFPOXBDLEdBQU0sQ0FDL0IsSUFBSXl3QyxFQUFpQjNHLEVBQU85cEMsR0FBS3dOLFFBQ2pDbE8sRUFBT1UsR0FBTzhqQixFQUFXMnNCLEdBQ25CQSxFQUFlbjNDLEtBQUs4eEIsR0FDcEJxbEIsQ0FDVixNQUVJeGpCLEdBQU8sY0FBZTNoQixPQUFPdEwsRUFBSyxlQUFpQm9yQixFQVozQyxDQWNoQixDQUNBLE9BQU85ckIsQ0FDWCxDQUNKLENBRUEsSUFBSW94QyxHQUFNLEVBQ1YsU0FBU0MsR0FBWXp0QixHQUNqQkEsRUFBSTlwQixVQUFVdzNDLE1BQVEsU0FBVXh3QyxHQUM1QixJQUdJcTBCLEVBQVVDLEVBSFZ0SixFQUFLOWhDLEtBRVQ4aEMsRUFBR3VhLEtBQU8rSyxLQUdOcjJDLEVBQU84dEIsYUFBZWdMLEtBQ3RCc0IsRUFBVyxrQkFBa0JucEIsT0FBTzhmLEVBQUd1YSxNQUN2Q2pSLEVBQVMsZ0JBQWdCcHBCLE9BQU84ZixFQUFHdWEsTUFDbkN4UyxHQUFLc0IsSUFJVHJKLEVBQUdtRyxRQUFTLEVBRVpuRyxFQUFHdUYsVUFBVyxFQUVkdkYsRUFBR0MsT0FBUyxJQUFJMlgsSUFBWSxHQUc1
3QjVYLEVBQUdDLE9BQU8vL0IsWUFBU2lRLEVBQ25CNnZCLEVBQUdDLE9BQU82aUIsS0FBTSxFQUVaOXRDLEdBQVdBLEVBQVF5d0MsYUFJbkJDLEdBQXNCMWxCLEVBQUlockIsR0FHMUJnckIsRUFBR3NDLFNBQVdxakIsR0FBYUMsR0FBMEI1bEIsRUFBR3g2QixhQUFjd1AsR0FBVyxDQUFDLEVBQUdnckIsR0FJckZHLEdBQVVILEdBR2RBLEVBQUc2bEIsTUFBUTdsQixFQUNYK1ksR0FBYy9ZLEdBQ2QwVyxHQUFXMVcsR0FDWDJULEdBQVczVCxHQUNYa2EsR0FBV2xhLEVBQUksb0JBQWdCN3ZCLEdBQVcsR0FDMUMrMEMsR0FBZWxsQixHQUNmdWpCLEdBQVV2akIsR0FDVitrQixHQUFZL2tCLEdBQ1prYSxHQUFXbGEsRUFBSSxXQUVYL3dCLEVBQU84dEIsYUFBZWdMLEtBQ3RCL0gsRUFBR3NhLE1BQVExUCxHQUFvQjVLLEdBQUksR0FDbkMrSCxHQUFLdUIsR0FDTHRCLEdBQVEsT0FBTzluQixPQUFPOGYsRUFBR3NhLE1BQU8sU0FBVWpSLEVBQVVDLElBRXBEdEosRUFBR3NDLFNBQVNudEIsSUFDWjZxQixFQUFHOGxCLE9BQU85bEIsRUFBR3NDLFNBQVNudEIsR0FFOUIsQ0FDSixDQUNBLFNBQVN1d0MsR0FBc0IxbEIsRUFBSWhyQixHQUMvQixJQUFJaWQsRUFBUStOLEVBQUdzQyxTQUFXLzBCLE9BQU8xQixPQUFPbTBCLEVBQUd4NkIsWUFBWXdQLFNBRW5ENitCLEVBQWM3K0IsRUFBUTgrQixhQUMxQjdoQixFQUFLL3hCLE9BQVM4VSxFQUFROVUsT0FDdEIreEIsRUFBSzZoQixhQUFlRCxFQUNwQixJQUFJa1MsRUFBd0JsUyxFQUFZdFQsaUJBQ3hDdE8sRUFBSzRvQixVQUFZa0wsRUFBc0JsTCxVQUN2QzVvQixFQUFLbWlCLGlCQUFtQjJSLEVBQXNCdFQsVUFDOUN4Z0IsRUFBSytoQixnQkFBa0IrUixFQUFzQm50QyxTQUM3Q3FaLEVBQUsrekIsY0FBZ0JELEVBQXNCbDBCLElBQ3ZDN2MsRUFBUXFoQixTQUNScEUsRUFBS29FLE9BQVNyaEIsRUFBUXFoQixPQUN0QnBFLEVBQUswYyxnQkFBa0IzNUIsRUFBUTI1QixnQkFFdkMsQ0FDQSxTQUFTaVgsR0FBMEJ4bUIsR0FDL0IsSUFBSXBxQixFQUFVb3FCLEVBQUtwcUIsUUFDbkIsR0FBSW9xQixFQUFLNm1CLE1BQU8sQ0FDWixJQUFJQyxFQUFlTixHQUEwQnhtQixFQUFLNm1CLE9BRWxELEdBQUlDLElBRHFCOW1CLEVBQUs4bUIsYUFDVyxDQUdyQzltQixFQUFLOG1CLGFBQWVBLEVBRXBCLElBQUlDLEVBQWtCQyxHQUF1QmhuQixHQUV6QyttQixHQUNBanJCLEVBQU9rRSxFQUFLaW5CLGNBQWVGLElBRS9CbnhDLEVBQVVvcUIsRUFBS3BxQixRQUFVMndDLEdBQWFPLEVBQWM5bUIsRUFBS2luQixnQkFDN0M1Z0QsT0FDUnVQLEVBQVF0WCxXQUFXc1gsRUFBUXZQLE1BQVEyNUIsRUFFM0MsQ0FDSixDQUNBLE9BQU9wcUIsQ0FDWCxDQUNBLFNBQVNveEMsR0FBdUJobkIsR0FDNUIsSUFBSWtuQixFQUNBQyxFQUFTbm5CLEVBQUtwcUIsUUFDZHd4QyxFQUFTcG5CLEVBQUtxbkIsY0FDbEIsSUFBSyxJQUFJN3hDLEtBQU8yeEMsRUFDUkEsRUFBTzN4QyxLQUFTNHhDLEVBQU81eEMsS0FDbEIweEMsSUFDREEsRUFBVyxDQUFDLEdBQ2hCQSxFQUFTMXhDLEdBQU8yeEMsRUFBTzN4QyxJQUcvQixPQUFPMHhDLENBQ1gsQ0FFQSxTQUFTSSxHQUF3QjVvRCxFQUFNRCxFQUFPK2EsRUFBVTFZLEVBQVFrL0IsR0FDNUQsSUFJSXVuQixFQUpBeHlCLEVBQVFqMkIsS0FDUjhXLEVBQVVvcUIsRUFBS3BxQixRQUlmZ2xCLEVBQU85NUIsRUFBUSxTQUNmeW1ELEVBQVlwNUMsT0FBTzFCLE9BQU8zTCxJQUNoQjBtRCxVQUFZMW1ELEdBTXRCeW1ELEVBQVl6bUQsRUFFWkEsRUFBU0EsRUFBTzBtRCxXQUVwQixJQUFJQyxFQUFhdHVCLEVBQU92akIsRUFBUTh4QyxXQUM1QkMsR0FBcUJGLEVBQ3pCM29ELEtBQUtKLEtBQU9BLEVBQ1pJLEtBQUtMLE1BQVFBLEVBQ2JLLEtBQUswYSxTQUFXQSxFQUNoQjFhLEtBQUtnQyxPQUFTQSxFQUNkaEMsS0FBS3UwQyxVQUFZMzBDLEVBQUttQixJQUFNZzVCLEVBQzVCLzVCLEtBQUs4b0QsV0FBYTdCLEdBQWNud0MsRUFBUTBwQyxPQUFReCtDLEdBQ2hEaEMsS0FBS3l5QyxNQUFRLFdBSVQsT0FIS3hjLEVBQU0rWSxRQUNQNkQsR0FBcUI3d0MsRUFBUXBDLEVBQUtpdUMsWUFBYzVYLEVBQU0rWSxPQUFTd0QsR0FBYTkzQixFQUFVMVksSUFFbkZpMEIsRUFBTStZLE1BQ2pCLEVBQ0EzL0IsT0FBTzZiLGVBQWVsckIsS0FBTSxjQUFlLENBQ3ZDdzNCLFlBQVksRUFDWjdvQixJQUFLLFdBQ0QsT0FBT2trQyxHQUFxQjd3QyxFQUFRcEMsRUFBS2l1QyxZQUFhN3RDLEtBQUt5eUMsUUFDL0QsSUFHQWtXLElBRUEzb0QsS0FBS29rQyxTQUFXdHRCLEVBRWhCOVcsS0FBS2d2QyxPQUFTaHZDLEtBQUt5eUMsUUFDbkJ6eUMsS0FBSyt1QyxhQUFlOEQsR0FBcUI3d0MsRUFBUXBDLEVBQUtpdUMsWUFBYTd0QyxLQUFLZ3ZDLFNBRXhFbDRCLEVBQVFpeUMsU0FDUi9vRCxLQUFLeXhCLEdBQUssU0FBVWxoQixFQUFHMlgsRUFBR3RaLEVBQUcrTixHQUN6QixJQUFJNG1CLEVBQVFrSyxHQUFnQmdiLEVBQVdsNEMsRUFBRzJYLEVBQUd0WixFQUFHK04sRUFBR2tzQyxHQUtuRCxPQUpJdGxCLElBQVV0SixFQUFRc0osS0FDbEJBLEVBQU1iLFVBQVk1ckIsRUFBUWl5QyxTQUMxQnhsQixFQUFNZixVQUFZeGdDLEdBRWZ1aEMsQ0FDWCxFQUdBdmpDLEtBQUt5eEIsR0FBSyxTQUFVbGhCLEVBQUcyWCxFQUFHdFosRUFBRytOLEdBQ3pCLE9BQU84d0IsR0FBZ0JnYixFQUFXbDRDLEVBQUcyWCxFQUFHdFosRUFBRytOLEVBQUdrc0MsRUFDbEQsQ0FFUixDQUVBLFNBQVNHLEdBQTBCOW5CLEVBQU15YixFQUFXLzhDLEVBQU02b0QsRUFBVy90QyxHQUNqRSxJQUFJNUQsRUFBVW9xQixFQUFLcHFCLFFBQ2ZuWCxFQUFRLENBQUMsRUFDVDJzQyxFQUFjeDFCLEVBQVFuWCxNQUMxQixHQUFJeTZCLEVBQU1rUyxHQUNOLElBQUssSUFBSTUxQixLQUFPNDFCLEVBQ1ozc0MsRUFBTStXLEdBQU8ybUMsR0FBYTNtQyxFQUFLNDFCLEVBQWFxUSxHQUFhNWlCLFFBSXpESyxFQUFNeDZCLEVBQUt3NEIsUUFDWDZ3QixHQUFXdHBELEVBQU9DLEVBQUt3NEIsT0F
3DdkJnQyxFQUFNeDZCLEVBQUtELFFBQ1hzcEQsR0FBV3RwRCxFQUFPQyxFQUFLRCxPQUUvQixJQUFJazJDLEVBQWdCLElBQUkyUyxHQUF3QjVvRCxFQUFNRCxFQUFPK2EsRUFBVSt0QyxFQUFXdm5CLEdBQzlFcUMsRUFBUXpzQixFQUFRcWhCLE9BQU9ub0IsS0FBSyxLQUFNNmxDLEVBQWNwa0IsR0FBSW9rQixHQUN4RCxHQUFJdFMsYUFBaUJyQixHQUNqQixPQUFPZ25CLEdBQTZCM2xCLEVBQU8zakMsRUFBTWkyQyxFQUFjN3pDLE9BQVE4VSxFQUFTKytCLEdBRS9FLEdBQUk1YixFQUFRc0osR0FBUSxDQUdyQixJQUZBLElBQUk0bEIsRUFBU3BjLEdBQWtCeEosSUFBVSxHQUNyQ3BHLEVBQU0sSUFBSTlzQixNQUFNODRDLEVBQU8vb0QsUUFDbEJtSixFQUFJLEVBQUdBLEVBQUk0L0MsRUFBTy9vRCxPQUFRbUosSUFDL0I0ekIsRUFBSTV6QixHQUFLMi9DLEdBQTZCQyxFQUFPNS9DLEdBQUkzSixFQUFNaTJDLEVBQWM3ekMsT0FBUThVLEVBQVMrK0IsR0FFMUYsT0FBTzFZLENBQ1gsQ0FDSixDQUNBLFNBQVMrckIsR0FBNkIzbEIsRUFBTzNqQyxFQUFNNm9ELEVBQVczeEMsRUFBUysrQixHQUluRSxJQUFJdVQsRUFBUTlsQixHQUFXQyxHQVV2QixPQVRBNmxCLEVBQU01bUIsVUFBWWltQixFQUNsQlcsRUFBTTNtQixVQUFZM3JCLEdBRWJzeUMsRUFBTUMsYUFBZUQsRUFBTUMsY0FBZ0IsQ0FBQyxHQUFHeFQsY0FDNUNBLEVBRUpqMkMsRUFBS3F2QyxRQUNKbWEsRUFBTXhwRCxPQUFTd3BELEVBQU14cEQsS0FBTyxDQUFDLElBQUlxdkMsS0FBT3J2QyxFQUFLcXZDLE1BRTNDbWEsQ0FDWCxDQUNBLFNBQVNILEdBQVdqN0MsRUFBSUMsR0FDcEIsSUFBSyxJQUFJeUksS0FBT3pJLEVBQ1pELEVBQUdrdUIsRUFBU3hsQixJQUFRekksRUFBS3lJLEVBRWpDLENBRUEsU0FBUzR5QyxHQUFpQnh5QyxHQUN0QixPQUFPQSxFQUFRdlAsTUFBUXVQLEVBQVF5eUMsUUFBVXp5QyxFQUFRZ3hDLGFBQ3JELENBdERBclcsR0FBcUIrVyxHQUF3QjE0QyxXQXdEN0MsSUFBSTA1QyxHQUFzQixDQUN0QnQ2QixLQUFNLFNBQVVxVSxFQUFPa1ksR0FDbkIsR0FBSWxZLEVBQU1aLG9CQUNMWSxFQUFNWixrQkFBa0IwWSxjQUN6QjlYLEVBQU0zakMsS0FBSzZwRCxVQUFXLENBRXRCLElBQUlDLEVBQWNubUIsRUFDbEJpbUIsR0FBb0JHLFNBQVNELEVBQWFBLEVBQzlDLE1BRWlCbm1CLEVBQU1aLGtCQUFvQmluQixHQUFnQ3JtQixFQUFPbVgsS0FDeEVrTixPQUFPbk0sRUFBWWxZLEVBQU1wQixTQUFNbHdCLEVBQVd3cEMsRUFFeEQsRUFDQWtPLFNBQVUsU0FBVUUsRUFBVXRtQixHQUMxQixJQUFJenNCLEVBQVV5c0IsRUFBTWxCLGlCQUVwQnFhLEdBRGFuWixFQUFNWixrQkFBb0JrbkIsRUFBU2xuQixrQkFDcEI3ckIsRUFBUTZsQyxVQUNwQzdsQyxFQUFReTlCLFVBQ1JoUixFQUNBenNCLEVBQVE0RCxTQUVaLEVBQ0FvdkMsT0FBUSxTQUFVdm1CLEdBQ2QsSUFBSW5CLEVBQVVtQixFQUFNbkIsUUFBU08sRUFBb0JZLEVBQU1aLGtCQUNsREEsRUFBa0I4VCxhQUNuQjlULEVBQWtCOFQsWUFBYSxFQUMvQnVGLEdBQVdyWixFQUFtQixZQUU5QlksRUFBTTNqQyxLQUFLNnBELFlBQ1BybkIsRUFBUXFVLFdBTVJ1SSxHQUF3QnJjLEdBR3hCNGEsR0FBdUI1YSxHQUFtQixHQUd0RCxFQUNBLzFCLFFBQVMsU0FBVTIyQixHQUNmLElBQUlaLEVBQW9CWSxFQUFNWixrQkFDekJBLEVBQWtCMFksZUFDZDlYLEVBQU0zakMsS0FBSzZwRCxVQUlaaE0sR0FBeUI5YSxHQUFtQixHQUg1Q0EsRUFBa0JvWixXQU05QixHQUVBZ08sR0FBZTE2QyxPQUFPbW5CLEtBQUtnekIsSUFDL0IsU0FBU3RiLEdBQWdCaE4sRUFBTXRoQyxFQUFNd2lDLEVBQVMxbkIsRUFBVWlaLEdBQ3BELElBQUl1RyxFQUFRZ0gsR0FBWixDQUdBLElBQUlrVyxFQUFXaFYsRUFBUWdDLFNBQVM0bEIsTUFPaEMsR0FMSXZ2QixFQUFTeUcsS0FDVEEsRUFBT2tXLEVBQVNwYSxPQUFPa0UsSUFJUCxtQkFBVEEsRUFBWCxDQU9BLElBQUlvQixFQUVKLEdBQUlwSSxFQUFRZ0gsRUFBSytvQixXQUdBaDRDLEtBRGJpdkIsRUFBT2lXLEdBRFA3VSxFQUFlcEIsRUFDNEJrVyxJQUt2QyxPQUFPRixHQUF1QjVVLEVBQWMxaUMsRUFBTXdpQyxFQUFTMW5CLEVBQVVpWixHQUc3RS96QixFQUFPQSxHQUFRLENBQUMsRUFHaEI4bkQsR0FBMEJ4bUIsR0FFdEI5RyxFQUFNeDZCLEVBQUtzcUQsUUFFWEMsR0FBZWpwQixFQUFLcHFCLFFBQVNsWCxHQUlqQyxJQUFJKzhDLEVBQVl0USxHQUEwQnpzQyxFQUFNc2hDLEVBQU12TixHQUd0RCxHQUFJMEcsRUFBTzZHLEVBQUtwcUIsUUFBUXN6QyxZQUNwQixPQUFPcEIsR0FBMEI5bkIsRUFBTXliLEVBQVcvOEMsRUFBTXdpQyxFQUFTMW5CLEdBSXJFLElBQUk2NUIsRUFBWTMwQyxFQUFLbUIsR0FLckIsR0FGQW5CLEVBQUttQixHQUFLbkIsRUFBS211QyxTQUVYMVQsRUFBTzZHLEVBQUtwcUIsUUFBUWdrQyxVQUFXLENBSS9CLElBQUk3TCxFQUFPcnZDLEVBQUtxdkMsS0FDaEJydkMsRUFBTyxDQUFDLEVBQ0pxdkMsSUFDQXJ2QyxFQUFLcXZDLEtBQU9BLEVBRXBCLENBRUFvYixHQUFzQnpxRCxHQUd0QixJQUFJMkgsRUFBTytoRCxHQUFpQnBvQixFQUFLcHFCLFVBQVk2YyxFQU03QyxPQUxZLElBQUl1TyxHQUVoQixpQkFBaUJsZ0IsT0FBT2tmLEVBQUsrb0IsS0FBS2pvQyxPQUFPemEsRUFBTyxJQUFJeWEsT0FBT3phLEdBQVEsSUFBSzNILE9BQU1xUyxPQUFXQSxPQUFXQSxFQUFXbXdCLEVBRS9HLENBQUVsQixLQUFNQSxFQUFNeWIsVUFBV0EsRUFBV3BJLFVBQVdBLEVBQVc1Z0IsSUFBS0EsRUFBS2paLFNBQVVBLEdBQVk0bkIsRUF6RDFGLENBSFFxQixHQUFPLGlDQUFpQzNoQixPQUFPeU0sT0FBT3lTLElBQVFrQixFQVZ0RSxDQXdFSixDQUNBLFNBQVN3bkIsR0FFVHJtQixFQUVBdmhDLEdBQ0ksSUFBSThVLEVBQVUsQ0FDVnl3QyxjQUFjLEVBQ2QzUixhQUFjclMsRUFDZHZoQyxPQUFRQSxHQUdSc29ELEVBQWlCL21CLEVBQU0zakMsS0FBSzBxRCxlQUtoQyxPQUpJbHdCLEVBQU1rd0IsS0FDTnh6QyxFQUFRcWhCLE9BQVNteUIsRUFBZW55QixPQUNoQ3JoQixFQUFRMjVCLGdCQUFrQjZaLEVBQWU3WixpQkFFdEMsSUFBSWxOLEVBQU1sQixpQkFBaUJuQixLQUFLcHFCLEVBQzNDLENBQ0EsU0FBU3V6QyxHQUFzQnpxRCxHQUUzQixJQURBLElBQUkycUIsRUFBUTNxQixFQUFLbXNCLE9BQVNuc0IsRUFBS21zQixLQUFPLENBQUMsR0FDOUJ4aUIsRUFBSSxFQUFHQSxFQUFJd2dELEdBQWEzcEQsT0FBUW1KLElBQUssQ0FDMUMsSUFBSW1OLEVBQU1xekMsR0FBYXhnRCxHQUNuQnNuQyxFQUFXdG1CLEVBQU03VCxHQUNqQjZ6QyxFQUFVZixHQUFvQjl5QyxHQUU5Qm02QixJQUFhMFosR0FBYTFaLEdBQVlBLEVBQVMyWixVQUMvQ2pnQyxFQUFNN1QsR0FBT202QixFQUFXNFosR0FBVUYsRUFBUzFaLEdBQVkwWixFQUUvRCxDQUNKLENBQ0EsU0FBU0UsR0FBVUMsRU
3FBSUMsR0FDbkIsSUFBSXZlLEVBQVMsU0FBVTc3QixFQUFHMlgsR0FFdEJ3aUMsRUFBR242QyxFQUFHMlgsR0FDTnlpQyxFQUFHcDZDLEVBQUcyWCxFQUNWLEVBRUEsT0FEQWtrQixFQUFPb2UsU0FBVSxFQUNWcGUsQ0FDWCxDQUdBLFNBQVMrZCxHQUFlcnpDLEVBQVNsWCxHQUM3QixJQUFJNjNCLEVBQVEzZ0IsRUFBUW96QyxPQUFTcHpDLEVBQVFvekMsTUFBTXp5QixNQUFTLFFBQ2hEamhCLEVBQVNNLEVBQVFvekMsT0FBU3B6QyxFQUFRb3pDLE1BQU0xekMsT0FBVSxTQUNyRDVXLEVBQUt3NEIsUUFBVXg0QixFQUFLdzRCLE1BQVEsQ0FBQyxJQUFJWCxHQUFRNzNCLEVBQUtzcUQsTUFBTXA5QyxNQUNyRCxJQUFJL0wsRUFBS25CLEVBQUttQixLQUFPbkIsRUFBS21CLEdBQUssQ0FBQyxHQUM1Qjh2QyxFQUFXOXZDLEVBQUd5VixHQUNkbzBDLEVBQVdockQsRUFBS3NxRCxNQUFNVSxTQUN0Qnh3QixFQUFNeVcsSUFDRjVXLEVBQVE0VyxJQUMwQixJQUFoQ0EsRUFBU3Q0QixRQUFRcXlDLEdBQ2pCL1osSUFBYStaLEtBQ2Y3cEQsRUFBR3lWLEdBQVMsQ0FBQ28wQyxHQUFVNW9DLE9BQU82dUIsSUFJbEM5dkMsRUFBR3lWLEdBQVNvMEMsQ0FFcEIsQ0FFQSxJQUVJQyxHQUNBbmUsR0FIQS9JLEdBQVN2RyxFQUNUcVAsR0FBTXJQLEVBSUYwdEIsR0FBa0Msb0JBQVoxakQsUUFDdEIyakQsR0FBZSxrQkFDZkMsR0FBYSxTQUFVenZCLEdBQ3ZCLE9BQU9BLEVBQUlydEIsUUFBUTY4QyxJQUFjLFNBQVVuOEMsR0FBSyxPQUFPQSxFQUFFdXRCLGFBQWUsSUFBR2p1QixRQUFRLFFBQVMsR0FDaEcsRUFDQXkxQixHQUFTLFNBQVVzbkIsRUFBS25wQixRQUNULElBQVBBLElBQWlCQSxFQUFLSixJQUMxQixJQUFJejZCLEVBQVE2NkIsRUFBSytvQixHQUF1Qi9vQixHQUFNLEdBQzFDL3dCLEVBQU8rdEIsWUFDUC90QixFQUFPK3RCLFlBQVk5dUIsS0FBSyxLQUFNaTdDLEVBQUtucEIsRUFBSTc2QixHQUVsQzZqRCxLQUFpQi81QyxFQUFPMnRCLFFBQzdCdDNCLFFBQVFxb0IsTUFBTSxlQUFlek4sT0FBT2lwQyxHQUFLanBDLE9BQU8vYSxHQUV4RCxFQUNBd2xDLEdBQU0sU0FBVXdlLEVBQUtucEIsR0FDYmdwQixLQUFpQi81QyxFQUFPMnRCLFFBQ3hCdDNCLFFBQVFxcEIsS0FBSyxjQUFjek8sT0FBT2lwQyxJQUFRbnBCLEVBQUsrb0IsR0FBdUIvb0IsR0FBTSxJQUVwRixFQUNBNEssR0FBc0IsU0FBVTVLLEVBQUlvcEIsR0FDaEMsR0FBSXBwQixFQUFHa1osUUFBVWxaLEVBQ2IsTUFBTyxTQUVYLElBQUlockIsRUFBVTBqQixFQUFXc0gsSUFBaUIsTUFBVkEsRUFBR21vQixJQUM3Qm5vQixFQUFHaHJCLFFBQ0hnckIsRUFBR21HLE9BQ0NuRyxFQUFHc0MsVUFBWXRDLEVBQUd4NkIsWUFBWXdQLFFBQzlCZ3JCLEVBQ052NkIsRUFBTytoRCxHQUFpQnh5QyxHQUN4QnEwQyxFQUFPcjBDLEVBQVFzMEMsT0FDbkIsSUFBSzdqRCxHQUFRNGpELEVBQU0sQ0FDZixJQUFJeDRCLEVBQVF3NEIsRUFBS3g0QixNQUFNLG1CQUN2QnByQixFQUFPb3JCLEdBQVNBLEVBQU0sRUFDMUIsQ0FDQSxPQUFTcHJCLEVBQU8sSUFBSXlhLE9BQU9ncEMsR0FBV3pqRCxHQUFPLEtBQU8sZ0JBQy9DNGpELElBQXdCLElBQWhCRCxFQUF3QixPQUFPbHBDLE9BQU9tcEMsR0FBUSxHQUMvRCxFQUNBLElBQUlFLEdBQVcsU0FBVTl2QixFQUFLNXJCLEdBRTFCLElBREEsSUFBSXd0QixFQUFNLEdBQ0h4dEIsR0FDQ0EsRUFBSSxHQUFNLElBQ1Z3dEIsR0FBTzVCLEdBQ1A1ckIsRUFBSSxJQUNKNHJCLEdBQU9BLEdBQ1g1ckIsSUFBTSxFQUVWLE9BQU93dEIsQ0FDWCxFQUNBMHRCLEdBQXlCLFNBQVUvb0IsR0FDL0IsR0FBSUEsRUFBR21HLFFBQVVuRyxFQUFHaVUsUUFBUyxDQUd6QixJQUZBLElBQUl4RixFQUFPLEdBQ1ArYSxFQUEyQixFQUN4QnhwQixHQUFJLENBQ1AsR0FBSXlPLEVBQUtud0MsT0FBUyxFQUFHLENBQ2pCLElBQUlndEMsRUFBT21ELEVBQUtBLEVBQUtud0MsT0FBUyxHQUM5QixHQUFJZ3RDLEVBQUs5bEMsY0FBZ0J3NkIsRUFBR3g2QixZQUFhLENBQ3JDZ2tELElBQ0F4cEIsRUFBS0EsRUFBR2lVLFFBQ1IsUUFDSixDQUNTdVYsRUFBMkIsSUFDaEMvYSxFQUFLQSxFQUFLbndDLE9BQVMsR0FBSyxDQUFDZ3RDLEVBQU1rZSxHQUMvQkEsRUFBMkIsRU
3FFbkMsQ0FDQS9hLEVBQUs5cEMsS0FBS3E3QixHQUNWQSxFQUFLQSxFQUFHaVUsT0FDWixDQUNBLE1BQVEsbUJBQ0p4RixFQUNLN3NDLEtBQUksU0FBVW8rQixFQUFJdjRCLEdBQ25CLE1BQU8sR0FBR3lZLE9BQWEsSUFBTnpZLEVBQVUsV0FBVThoRCxHQUFTLElBQUssRUFBUSxFQUFKOWhELElBQVF5WSxPQUFPaVksRUFBUTZILEdBQ3hFLEdBQUc5ZixPQUFPMHFCLEdBQW9CNUssRUFBRyxJQUFLLFNBQVM5ZixPQUFPOGYsRUFBRyxHQUFJLHFCQUM3RDRLLEdBQW9CNUssR0FDOUIsSUFDS2pqQixLQUFLLEtBQ2xCLENBRUksTUFBTyxpQkFBaUJtRCxPQUFPMHFCLEdBQW9CNUssR0FBSyxJQUVoRSxFQVFKLElBQUl5cEIsR0FBU3g2QyxFQUFPMHRCLHNCQWdCcEIsU0FBUytzQixHQUFVeDlDLEVBQUlDLEVBQU13OUMsR0FFekIsUUFEa0IsSUFBZEEsSUFBd0JBLEdBQVksSUFDbkN4OUMsRUFDRCxPQUFPRCxFQUtYLElBSkEsSUFBSTBJLEVBQUtnMUMsRUFBT0MsRUFDWm4xQixFQUFPNEssR0FDTEUsUUFBUUMsUUFBUXR6QixHQUNoQm9CLE9BQU9tbkIsS0FBS3ZvQixHQUNUMUUsRUFBSSxFQUFHQSxFQUFJaXRCLEVBQUtwMkIsT0FBUW1KLElBR2pCLFlBRlptTixFQUFNOGYsRUFBS2p0QixNQUlYbWlELEVBQVExOUMsRUFBRzBJLEdBQ1hpMUMsRUFBVTE5QyxFQUFLeUksR0FDViswQyxHQUFjM3ZCLEVBQU85dEIsRUFBSTBJLEdBR3JCZzFDLElBQVVDLEdBQ2Yvd0IsRUFBYzh3QixJQUNkOXdCLEVBQWMrd0IsSUFDZEgsR0FBVUUsRUFBT0MsR0FMakJyaUMsR0FBSXRiLEVBQUkwSSxFQUFLaTFDLElBUXJCLE9BQU8zOUMsQ0FDWCxDQUlBLFNBQVM0OUMsR0FBY0MsRUFBV0MsRUFBVWhxQixHQUN4QyxPQUFLQSxFQWtCTSxXQUVILElBQUlpcUIsRUFBZXZ4QixFQUFXc3hCLEdBQ3hCQSxFQUFTOTdDLEtBQUs4eEIsRUFBSUEsR0FDbEJncUIsRUFDRkUsRUFBY3h4QixFQUFXcXhCLEdBQ3ZCQSxFQUFVNzdDLEtBQUs4eEIsRUFBSUEsR0FDbkIrcEIsRUFDTixPQUFJRSxFQUNPUCxHQUFVTyxFQUFjQyxHQUd4QkEsQ0FFZixFQTlCS0YsRUFHQUQsRUFRRSxXQUNILE9BQU9MLEdBQVVoeEIsRUFBV3N4QixHQUFZQSxFQUFTOTdDLEtBQUtoUSxLQUFNQSxNQUFROHJELEVBQVV0eEIsRUFBV3F4QixHQUFhQSxFQUFVNzdDLEtBQUtoUSxLQUFNQSxNQUFRNnJELEVBQ3ZJLEVBVFdDLEVBSEFELENBK0JuQixDQWdCQSxTQUFTM0ksR0FBbUIySSxFQUFXQyxHQUNuQyxJQUFJM3VCLEVBQU0ydUIsRUFDSkQsRUFDSUEsRUFBVTdwQyxPQUFPOHBDLEdBQ2pCN3hCLEVBQVE2eEIsR0FDSkEsRUFDQSxDQUFDQSxHQUNURCxFQUNOLE9BQU8xdUIsRUFBTTh1QixHQUFZOXVCLEdBQU9BLENBQ3BDLENBQ0EsU0FBUzh1QixHQUFZMWhDLEdBRWpCLElBREEsSUFBSTRTLEVBQU0sR0FDRDV6QixFQUFJLEVBQUdBLEVBQUlnaEIsRUFBTW5xQixPQUFRbUosS0FDQyxJQUEzQjR6QixFQUFJNWtCLFFBQVFnUyxFQUFNaGhCLEtBQ2xCNHpCLEVBQUkxMkIsS0FBSzhqQixFQUFNaGhCLElBR3ZCLE9BQU80ekIsQ0FDWCxDQVdBLFNBQVMrdUIsR0FBWUwsRUFBV0MsRUFBVWhxQixFQUFJcHJCLEdBQzFDLElBQUl5bUIsRUFBTTl0QixPQUFPMUIsT0FBT2srQyxHQUFhLE1BQ3JDLE9BQUlDLEdBQ0FLLEdBQWlCejFDLEVBQUtvMUMsRUFBVWhxQixHQUN6QjlFLEVBQU9HLEVBQUsydUIsSUFHWjN1QixDQUVmLENBaklJb3VCLEdBQU90MEMsR0FBS3MwQyxHQUFPNU8sVUFBWSxTQUFVMzZDLEVBQVF1akIsRUFBT3VjLEVBQUlwckIsR0FLeEQsT0FKS29yQixHQUNENkIsR0FBTyxXQUFZM2hCLE9BQU90TCxFQUFLLHVDQUMzQixvQ0FFRDAxQyxHQUFhcHFELEVBQVF1akIsRUFDaEMsRUFzRUpnbUMsR0FBTzNyRCxLQUFPLFNBQVVpc0QsRUFBV0MsRUFBVWhxQixHQUN6QyxPQUFLQSxFQVNFOHBCLEdBQWNDLEVBQVdDLEVBQVVocUIsR0FSbENncUIsR0FBZ0MsbUJBQWJBLEdBQ25Cbm9CLEdBQU8scUdBRWlCN0IsR0FDakIrcEIsR0FFSkQsR0FBY0MsRUFBV0MsRUFHeEMsRUF1QkF0dEIsRUFBZ0J6bkIsU0FBUSxTQUFVZ1YsR0FDOUJ3L0IsR0FBT3gvQixHQUFRbTNCLEVBQ25CLElBa0JBM2tCLEVBQVl4bkIsU0FBUSxTQUFVMUosR0FDMUJrK0MsR0FBT2wrQyxFQUFPLEtBQU82K0MsRUFDekIsSUFPQVgsR0FBT2pxRCxNQUFRLFNBQVV1cUQsRUFBV0MsRUFBVWhxQixFQUFJcHJCLEdBUzlDLEdBTkltMUMsSUFBY25yQixLQUNkbXJCLE9BQVk1NUMsR0FFWjY1QyxJQUFhcHJCLEtBQ2JvckIsT0FBVzc1QyxJQUVWNjVDLEVBQ0QsT0FBT3o4QyxPQUFPMUIsT0FBT2srQyxHQUFhLE1BSXRDLEdBRklNLEdBQWlCejFDLEVBQUtvMUMsRUFBVWhxQixJQUUvQitwQixFQUNELE9BQU9DLEVBQ1gsSUFBSS91QixFQUFNLENBQUMsRUFFWCxJQUFLLElBQUlzVyxLQURUclcsRUFBT0QsRUFBSzh1QixHQUNNQyxFQUFVLENBQ3hCLElBQUlPLEVBQVd0dkIsRUFBSXNXLEdBQ2Y5dEIsRUFBUXVtQyxFQUFTelksR0FDakJnWixJQUFhcHlCLEVBQVFveUIsS0FDckJBLEVBQVcsQ0FBQ0EsSUFFaEJ0dkIsRUFBSXNXLEdBQVNnWixFQUFXQSxFQUFTcnFDLE9BQU91RCxHQUFTMFUsRUFBUTFVLEdBQVNBLEVBQVEsQ0FBQ0EsRUFDL0UsQ0FDQSxPQUFPd1gsQ0FDWCxFQUlBd3VCLEdBQU81ckQsTUFDSDRyRCxHQUFPL3BELFFBQ0grcEQsR0FBTy9LLE9BQ0grSyxHQUFPenJELFNBQ0gsU0FBVStyRCxFQUFXQyxFQUFVaHFCLEVBQUlwckIsR0FJL0IsR0FISW8xQyxHQUNBSyxHQUFpQnoxQyxFQUFLbzFDLEVBQVVocUIsSUFFL0IrcEIsRUFDRCxPQUFPQyxFQUNYLElBQUkvdUIsRUFBTTF0QixPQUFPMUIsT0FBTyxNQUl4QixPQUhBcXZCLEVBQU9ELEVBQUs4dUIsR0FDUkMsR0FDQTl1QixFQUFPRCxFQUFLK3VCLEdBQ1QvdUIsQ0FDWCxFQUNoQnd1QixHQUFPbEwsUUFBVSxTQUFVd0wsRUFBV0MsR0FDbEMsT0FBS0QsRUFFRSxXQUNILElBQUk5dUIsRUFBTTF0QixPQUFPMUIsT0FBTyxNQU14QixPQUxBNjlDLEdBQVV6dUIsRUFBS3ZDLEVBQVdxeEIsR0FBYUEsRUFBVTc3QyxLQUFLaFEsTUFBUTZyRCxHQUMxREMsR0FDQU4sR0FBVXp1QixFQUFLdkMsRUFBV3N4QixHQUFZQSxFQUFTOTdDLEtBQUtoUSxNQUFROHJELEdBQVUsR0FHbkUvdUIsQ0FDWCxFQVRXK3VCLENBVWYsRUFJQSxJQUFJTSxHQUFlLFNBQVVQLEVBQVdDLEdBQ3BDLFlBQW9CNzVDLElBQWI2NUMsRUFBeUJELEVBQVlDLENBQ2hELEVBSUEsU0FBU1EsR0FBZ0J4MUMsR0FDckIsSUFBSyxJQUFJSixLQUFPSSxFQUFRdFgsV0FDcEIrc0QsR0FBc0I3MUMsRU
3FFOUIsQ0FDQSxTQUFTNjFDLEdBQXNCaGxELEdBQ3RCLElBQUlxckIsT0FBTyx1QkFBdUI1USxPQUFPd2QsRUFBY2pKLE9BQVEsUUFBUTVmLEtBQUtwUCxJQUM3RW84QixHQUFPLDRCQUNIcDhCLEVBREcsMkZBS1BrMEIsRUFBYWwwQixJQUFTd0osRUFBT2t1QixjQUFjMTNCLEtBQzNDbzhCLEdBQU8sa0VBRUhwOEIsRUFFWixDQUtBLFNBQVNpbEQsR0FBZTExQyxFQUFTZ3JCLEdBQzdCLElBQUluaUMsRUFBUW1YLEVBQVFuWCxNQUNwQixHQUFLQSxFQUFMLENBRUEsSUFDSTRKLEVBQUdxaUIsRUFESHVSLEVBQU0sQ0FBQyxFQUVYLEdBQUlsRCxFQUFRdDZCLEdBRVIsSUFEQTRKLEVBQUk1SixFQUFNUyxPQUNIbUosS0FFZ0IsaUJBRG5CcWlCLEVBQU1qc0IsRUFBTTRKLElBR1I0ekIsRUFET2pCLEVBQVN0USxJQUNKLENBQUV2ZSxLQUFNLE1BR3BCczJCLEdBQU8sdURBSWQsR0FBSS9JLEVBQWNqN0IsR0FDbkIsSUFBSyxJQUFJK1csS0FBTy9XLEVBQ1ppc0IsRUFBTWpzQixFQUFNK1csR0FFWnltQixFQURPakIsRUFBU3hsQixJQUNKa2tCLEVBQWNoUCxHQUFPQSxFQUFNLENBQUV2ZSxLQUFNdWUsUUFJbkQrWCxHQUFPLHFFQUNILFdBQVczaEIsT0FBTzJZLEVBQVVoN0IsR0FBUSxLQUFNbWlDLEdBRWxEaHJCLEVBQVFuWCxNQUFRdzlCLENBM0JOLENBNEJkLENBSUEsU0FBU3N2QixHQUFnQjMxQyxFQUFTZ3JCLEdBQzlCLElBQUkwZSxFQUFTMXBDLEVBQVEwcEMsT0FDckIsR0FBS0EsRUFBTCxDQUVBLElBQUkvTSxFQUFjMzhCLEVBQVEwcEMsT0FBUyxDQUFDLEVBQ3BDLEdBQUl2bUIsRUFBUXVtQixHQUNSLElBQUssSUFBSWozQyxFQUFJLEVBQUdBLEVBQUlpM0MsRUFBT3BnRCxPQUFRbUosSUFDL0JrcUMsRUFBVytNLEVBQU9qM0MsSUFBTSxDQUFFMEUsS0FBTXV5QyxFQUFPajNDLFNBRzFDLEdBQUlxeEIsRUFBYzRsQixHQUNuQixJQUFLLElBQUk5cEMsS0FBTzhwQyxFQUFRLENBQ3BCLElBQUk1MEIsRUFBTTQwQixFQUFPOXBDLEdBQ2pCKzhCLEVBQVcvOEIsR0FBT2trQixFQUFjaFAsR0FDMUJvUixFQUFPLENBQUUvdUIsS0FBTXlJLEdBQU9rVixHQUN0QixDQUFFM2QsS0FBTTJkLEVBQ2xCLE1BR0ErWCxHQUFPLHNFQUNILFdBQVczaEIsT0FBTzJZLEVBQVU2bEIsR0FBUyxLQUFNMWUsRUFqQnpDLENBbUJkLENBSUEsU0FBUzRxQixHQUFzQjUxQyxHQUMzQixJQUFJNjFDLEVBQU83MUMsRUFBUTgxQyxXQUNuQixHQUFJRCxFQUNBLElBQUssSUFBSWoyQyxLQUFPaTJDLEVBQU0sQ0FDbEIsSUFBSWh0QixFQUFNZ3RCLEVBQUtqMkMsR0FDWDhqQixFQUFXbUYsS0FDWGd0QixFQUFLajJDLEdBQU8sQ0FBRWhGLEtBQU1pdUIsRUFBS3ArQixPQUFRbytCLEdBRXpDLENBRVIsQ0FDQSxTQUFTd3NCLEdBQWlCNWtELEVBQU11RixFQUFPZzFCLEdBQzlCbEgsRUFBYzl0QixJQUNmNjJCLEdBQU8sNkJBQThCM2hCLE9BQU96YSxFQUFNLDJCQUM5QyxXQUFXeWEsT0FBTzJZLEVBQVU3dEIsR0FBUSxLQUFNZzFCLEVBRXRELENBS0EsU0FBUzJsQixHQUFhemxELEVBQVF1akIsRUFBT3VjLEdBZWpDLEdBYkl3cUIsR0FBZ0IvbUMsR0FFaEJpVixFQUFXalYsS0FFWEEsRUFBUUEsRUFBTXpPLFNBRWxCMDFDLEdBQWVqbkMsRUFBT3VjLEdBQ3RCMnFCLEdBQWdCbG5DLEVBQU91YyxHQUN2QjRxQixHQUFzQm5uQyxJQUtqQkEsRUFBTXlrQyxRQUNIemtDLEVBQU1zbkMsVUFDTjdxRCxFQUFTeWxELEdBQWF6bEQsRUFBUXVqQixFQUFNc25DLFFBQVMvcUIsSUFFN0N2YyxFQUFNdW5DLFFBQ04sSUFBSyxJQUFJdmpELEVBQUksRUFBRzhhLEVBQUlrQixFQUFNdW5DLE9BQU8xc0QsT0FBUW1KLEVBQUk4YSxFQUFHOWEsSUFDNUN2SCxFQUFTeWxELEdBQWF6bEQsRUFBUXVqQixFQUFNdW5DLE9BQU92akQsR0FBSXU0QixHQUkzRCxJQUNJcHJCLEVBREFJLEVBQVUsQ0FBQyxFQUVmLElBQUtKLEtBQU8xVSxFQUNSK3FELEVBQVdyMkMsR0FFZixJQUFLQSxLQUFPNk8sRUFDSHVXLEVBQU85NUIsRUFBUTBVLElBQ2hCcTJDLEVBQVdyMkMsR0FHbkIsU0FBU3EyQyxFQUFXcjJDLEdBQ2hCLElBQUlzMkMsRUFBUXpCLEdBQU83MEMsSUFBUTAxQyxHQUMzQnQxQyxFQUFRSixHQUFPczJDLEVBQU1ockQsRUFBTzBVLEdBQU02TyxFQUFNN08sR0FBTW9yQixFQUFJcHJCLEVBQ3RELENBQ0EsT0FBT0ksQ0FDWCxDQU1BLFNBQVNtM0IsR0FBYW4zQixFQUFTekosRUFBTW5JLEVBQUkrbkQsR0FFckMsR0FBa0IsaUJBQVAvbkQsRUFBWCxDQUdBLElBQUlnb0QsRUFBU3AyQyxFQUFRekosR0FFckIsR0FBSXl1QixFQUFPb3hCLEVBQVFob0QsR0FDZixPQUFPZ29ELEVBQU9ob0QsR0FDbEIsSUFBSWlvRCxFQUFjanhCLEVBQVNoM0IsR0FDM0IsR0FBSTQyQixFQUFPb3hCLEVBQVFDLEdBQ2YsT0FBT0QsRUFBT0MsR0FDbEIsSUFBSUMsRUFBZWh4QixFQUFXK3dCLEdBQzlCLEdBQUlyeEIsRUFBT294QixFQUFRRSxHQUNmLE9BQU9GLEVBQU9FLEdBRWxCLElBQUlqd0IsRUFBTSt2QixFQUFPaG9ELElBQU9nb0QsRUFBT0MsSUFBZ0JELEVBQU9FLEdBSXRELE9BSElILElBQWdCOXZCLEdBQ2hCd0csR0FBTyxxQkFBdUJ0MkIsRUFBSzRILE1BQU0sR0FBSSxHQUFLLEtBQU8vUCxHQUV0RGk0QixDQWhCUCxDQWlCSixDQUVBLFNBQVNrZ0IsR0FBYTNtQyxFQUFLNDFCLEVBQWFxUSxFQUFXN2EsR0FDL0MsSUFBSXJLLEVBQU82VSxFQUFZNTFCLEdBQ25CMjJDLEdBQVV2eEIsRUFBTzZnQixFQUFXam1DLEdBQzVCNUosRUFBUTZ2QyxFQUFVam1DLEdBRWxCNDJDLEVBQWVDLEdBQWEvMEIsUUFBU2YsRUFBS3BxQixNQUM5QyxHQUFJaWdELEdBQWdCLEVBQ2hCLEdBQUlELElBQVd2eEIsRUFBT3JFLEVBQU0sV0FDeEIzcUIsR0FBUSxPQUVQLEdBQWMsS0FBVkEsR0FBZ0JBLElBQVV3dkIsRUFBVTVsQixHQUFNLENBRy9DLElBQUk4MkMsRUFBY0QsR0FBYTkrQixPQUFRZ0osRUFBS3BxQixPQUN4Q21nRCxFQUFjLEdBQUtGLEVBQWVFLEtBQ2xDMWdELEdBQVEsRUFFaEIsQ0FHSixRQUFjbUYsSUFBVm5GLEVBQXFCLENBQ3JCQSxFQUFRMmdELEdBQW9CM3JCLEVBQUlySyxFQUFNL2dCLEdBR3RDLElBQUlnM0MsRUFBb0JqbkIsR0FDeEJDLElBQWdCLEdBQ2hCUSxHQUFRcDZCLEdBQ1I0NUIsR0FBZ0JnbkIsRUFDcEIsQ0FJQSxPQUZJQyxHQUFXbDJCLEVBQU0vZ0IsRUFBSzVKLEVBQU9nMUIsRUFBSXVyQixHQUU5QnZnRCxDQUNYLENBSUEsU0FBUzJnRCxHQUFvQjNyQixFQUFJckssRUFBTS9nQixHQUVuQyxHQUFLb2xCLEVBQU9yRSxFQUFNLFdBQWxCLENBR0EsSUFBSWtJLEVBQU1sSSxFQUFLdlQsUUFX
3ZixPQVRJdVcsRUFBU2tGLElBQ1RnRSxHQUFPLG1DQUNIanRCLEVBREcsMkZBSTZCb3JCLEdBSXBDQSxHQUNBQSxFQUFHc0MsU0FBU3VZLGdCQUNtQjFxQyxJQUEvQjZ2QixFQUFHc0MsU0FBU3VZLFVBQVVqbUMsU0FDSHpFLElBQW5CNnZCLEVBQUdpUyxPQUFPcjlCLEdBQ0hvckIsRUFBR2lTLE9BQU9yOUIsR0FJZDhqQixFQUFXbUYsSUFBK0IsYUFBdkJpdUIsR0FBUW4yQixFQUFLcHFCLE1BQ2pDc3lCLEVBQUkzdkIsS0FBSzh4QixHQUNUbkMsQ0F0Qk4sQ0F1QkosQ0FJQSxTQUFTZ3VCLEdBQVdsMkIsRUFBTWx3QixFQUFNdUYsRUFBT2cxQixFQUFJdXJCLEdBQ3ZDLEdBQUk1MUIsRUFBS2xMLFVBQVk4Z0MsRUFDakIxcEIsR0FBTywyQkFBNkJwOEIsRUFBTyxJQUFLdTZCLFFBR3BELEdBQWEsTUFBVGgxQixHQUFrQjJxQixFQUFLbEwsU0FBM0IsQ0FHQSxJQUFJbGYsRUFBT29xQixFQUFLcHFCLEtBQ1p3Z0QsR0FBU3hnRCxJQUFpQixJQUFUQSxFQUNqQnlnRCxFQUFnQixHQUNwQixHQUFJemdELEVBQU0sQ0FDRDRzQixFQUFRNXNCLEtBQ1RBLEVBQU8sQ0FBQ0EsSUFFWixJQUFLLElBQUk5RCxFQUFJLEVBQUdBLEVBQUk4RCxFQUFLak4sU0FBV3l0RCxFQUFPdGtELElBQUssQ0FDNUMsSUFBSXdrRCxFQUFlQyxHQUFXbGhELEVBQU9PLEVBQUs5RCxHQUFJdTRCLEdBQzlDZ3NCLEVBQWNybkQsS0FBS3NuRCxFQUFhRSxjQUFnQixJQUNoREosRUFBUUUsRUFBYUYsS0FDekIsQ0FDSixDQUNBLElBQUlLLEVBQW9CSixFQUFjaHVDLE1BQUssU0FBVXJRLEdBQUssT0FBT0EsQ0FBRyxJQUNwRSxHQUFLbytDLElBQVNLLEVBQWQsQ0FJQSxJQUFJNTFCLEVBQVliLEVBQUthLFVBQ2pCQSxJQUNLQSxFQUFVeHJCLElBQ1g2MkIsR0FBTyx5REFBMkRwOEIsRUFBTyxLQUFNdTZCLEdBSnZGLE1BRkk2QixHQUFPd3FCLEdBQXNCNW1ELEVBQU11RixFQUFPZ2hELEdBQWdCaHNCLEVBaEI5RCxDQXlCSixDQUNBLElBQUlzc0IsR0FBZ0IsbURBQ3BCLFNBQVNKLEdBQVdsaEQsRUFBT08sRUFBTXkwQixHQUM3QixJQUFJK3JCLEVBQ0FJLEVBQWVMLEdBQVF2Z0QsR0FDM0IsR0FBSStnRCxHQUFjejNDLEtBQUtzM0MsR0FBZSxDQUNsQyxJQUFJeCtDLFNBQVczQyxHQUNmK2dELEVBQVFwK0MsSUFBTXcrQyxFQUFhNXJDLGdCQUVQLFdBQU41UyxJQUNWbytDLEVBQVEvZ0QsYUFBaUJPLEVBRWpDLE1BQ0ssR0FBcUIsV0FBakI0Z0QsRUFDTEosRUFBUWp6QixFQUFjOXRCLFFBRXJCLEdBQXFCLFVBQWpCbWhELEVBQ0xKLEVBQVE1ekIsRUFBUW50QixRQUdoQixJQUNJK2dELEVBQVEvZ0QsYUFBaUJPLENBQzdCLENBQ0EsTUFBTzVMLEdBQ0hraUMsR0FBTyx1QkFBeUJsVixPQUFPcGhCLEdBQVEseUJBQTBCeTBCLEdBQ3pFK3JCLEdBQVEsQ0FDWixDQUVKLE1BQU8sQ0FDSEEsTUFBT0EsRUFDUEksYUFBY0EsRUFFdEIsQ0FDQSxJQUFJSSxHQUFzQixxQkFNMUIsU0FBU1QsR0FBUW44QyxHQUNiLElBQUlraEIsRUFBUWxoQixHQUFNQSxFQUFHekMsV0FBVzJqQixNQUFNMDdCLElBQ3RDLE9BQU8xN0IsRUFBUUEsRUFBTSxHQUFLLEVBQzlCLENBQ0EsU0FBUzI3QixHQUFXLzlDLEVBQUcyWCxHQUNuQixPQUFPMGxDLEdBQVFyOUMsS0FBT3E5QyxHQUFRMWxDLEVBQ2xDLENBQ0EsU0FBU3FsQyxHQUFhbGdELEVBQU15Z0QsR0FDeEIsSUFBSzd6QixFQUFRNnpCLEdBQ1QsT0FBT1EsR0FBV1IsRUFBZXpnRCxHQUFRLEdBQUssRUFFbEQsSUFBSyxJQUFJOUQsRUFBSSxFQUFHc3lCLEVBQU1peUIsRUFBYzF0RCxPQUFRbUosRUFBSXN5QixFQUFLdHlCLElBQ2pELEdBQUkra0QsR0FBV1IsRUFBY3ZrRCxHQUFJOEQsR0FDN0IsT0FBTzlELEVBR2YsT0FBUSxDQUNaLENBQ0EsU0FBUzRrRCxHQUFzQjVtRCxFQUFNdUYsRUFBT2doRCxHQUN4QyxJQUFJNTFDLEVBQVUsNkNBQThDOEosT0FBT3phLEVBQU0sTUFDckUsYUFBYXlhLE9BQU84ckMsRUFBY3BxRCxJQUFJMDRCLEdBQVl2ZCxLQUFLLE9BQ3ZEb3ZDLEVBQWVILEVBQWMsR0FDN0JTLEVBQWU1ekIsRUFBVTd0QixHQWE3QixPQVg2QixJQUF6QmdoRCxFQUFjMXRELFFBQ2RvdUQsR0FBYVAsSUFDYk8sVUFBb0IxaEQsS0FDbkIyaEQsR0FBVVIsRUFBY00sS0FDekJyMkMsR0FBVyxlQUFlOEosT0FBTzBzQyxHQUFXNWhELEVBQU9taEQsS0FFdkQvMUMsR0FBVyxTQUFTOEosT0FBT3VzQyxFQUFjLEtBRXJDQyxHQUFhRCxLQUNicjJDLEdBQVcsY0FBYzhKLE9BQU8wc0MsR0FBVzV
3oRCxFQUFPeWhELEdBQWUsTUFFOURyMkMsQ0FDWCxDQUNBLFNBQVN3MkMsR0FBVzVoRCxFQUFPTyxHQUN2QixNQUFhLFdBQVRBLEVBQ08sSUFBSzJVLE9BQU9sVixFQUFPLEtBR25CLEdBQUdrVixPQURJLFdBQVQzVSxFQUNZbE0sT0FBTzJMLEdBR1BBLEVBRXpCLENBQ0EsSUFBSTZoRCxHQUFtQixDQUFDLFNBQVUsU0FBVSxXQUM1QyxTQUFTSCxHQUFhMWhELEdBQ2xCLE9BQU82aEQsR0FBaUI3dUMsTUFBSyxTQUFVWCxHQUFRLE9BQU9yUyxFQUFNdVYsZ0JBQWtCbEQsQ0FBTSxHQUN4RixDQUNBLFNBQVNzdkMsS0FFTCxJQURBLElBQUl2NEIsRUFBTyxHQUNGRSxFQUFLLEVBQUdBLEVBQUt4bUIsVUFBVXhQLE9BQVFnMkIsSUFDcENGLEVBQUtFLEdBQU14bUIsVUFBVXdtQixHQUV6QixPQUFPRixFQUFLcFcsTUFBSyxTQUFVWCxHQUFRLE1BQThCLFlBQXZCQSxFQUFLa0QsYUFBNkIsR0FDaEYsQ0FFQSxTQUFTdVgsR0FBSTlpQixHQUNIOVcsZ0JBQWdCNDVCLElBQ2xCK0osR0FBTyxvRUFFWDNqQyxLQUFLc25ELE1BQU14d0MsRUFDZixDQVlBLFNBQVM4M0MsR0FBUWgxQixHQUNiQSxFQUFJaTFCLElBQU0sU0FBVUMsR0FDaEIsSUFBSUMsRUFBbUIvdUQsS0FBS2d2RCxvQkFBc0JodkQsS0FBS2d2RCxrQkFBb0IsSUFDM0UsR0FBSUQsRUFBaUJ4MkMsUUFBUXUyQyxJQUFXLEVBQ3BDLE9BQU85dUQsS0FHWCxJQUFJazJCLEVBQU80RyxFQUFRbHRCLFVBQVcsR0FTOUIsT0FSQXNtQixFQUFLenNCLFFBQVF6SixNQUNUdzZCLEVBQVdzMEIsRUFBT0csU0FDbEJILEVBQU9HLFFBQVFoL0MsTUFBTTYrQyxFQUFRNTRCLEdBRXhCc0UsRUFBV3MwQixJQUNoQkEsRUFBTzcrQyxNQUFNLEtBQU1pbUIsR0FFdkI2NEIsRUFBaUJ0b0QsS0FBS3FvRCxHQUNmOXVELElBQ1gsQ0FDSixDQUVBLFNBQVNrdkQsR0FBVXQxQixHQUNmQSxFQUFJdTFCLE1BQVEsU0FBVUEsR0FFbEIsT0FEQW52RCxLQUFLOFcsUUFBVTJ3QyxHQUFhem5ELEtBQUs4VyxRQUFTcTRDLEdBQ25DbnZELElBQ1gsQ0FDSixDQUVBLFNBQVNvdkQsR0FBV3gxQixHQU1oQkEsRUFBSXF3QixJQUFNLEVBQ1YsSUFBSUEsRUFBTSxFQUlWcndCLEVBQUlvRCxPQUFTLFNBQVVtckIsR0FDbkJBLEVBQWdCQSxHQUFpQixDQUFDLEVBQ2xDLElBQUlrSCxFQUFRcnZELEtBQ1JzdkQsRUFBVUQsRUFBTXBGLElBQ2hCc0YsRUFBY3BILEVBQWNxSCxRQUFVckgsRUFBY3FILE1BQVEsQ0FBQyxHQUNqRSxHQUFJRCxFQUFZRCxHQUNaLE9BQU9DLEVBQVlELEdBRXZCLElBQUkvbkQsRUFBTytoRCxHQUFpQm5CLElBQWtCbUIsR0FBaUIrRixFQUFNdjRDLFNBQ2pFdlAsR0FDQWdsRCxHQUFzQmhsRCxHQUUxQixJQUFJa29ELEVBQU0sU0FBc0IzNEMsR0FDNUI5VyxLQUFLc25ELE1BQU14d0MsRUFDZixFQW9DQSxPQW5DQTI0QyxFQUFJMy9DLFVBQVlULE9BQU8xQixPQUFPMGhELEVBQU12L0MsV0FDcEMyL0MsRUFBSTMvQyxVQUFVeEksWUFBY21vRCxFQUM1QkEsRUFBSXhGLElBQU1BLElBQ1Z3RixFQUFJMzRDLFFBQVUyd0MsR0FBYTRILEVBQU12NEMsUUFBU3F4QyxHQUMxQ3NILEVBQVcsTUFBSUosRUFJWEksRUFBSTM0QyxRQUFRblgsT0FDWit2RCxHQUFVRCxHQUVWQSxFQUFJMzRDLFFBQVFoWCxVQUNaNnZELEdBQWFGLEdBR2pCQSxFQUFJenlCLE9BQVNxeUIsRUFBTXJ5QixPQUNuQnl5QixFQUFJTixNQUFRRSxFQUFNRixNQUNsQk0sRUFBSVosSUFBTVEsRUFBTVIsSUFHaEJ0d0IsRUFBWXhuQixTQUFRLFNBQVUxSixHQUMxQm9pRCxFQUFJcGlELEdBQVFnaUQsRUFBTWhpRCxFQUN0QixJQUVJOUYsSUFDQWtvRCxFQUFJMzRDLFFBQVF0WCxXQUFXK0gsR0FBUWtvRCxHQUtuQ0EsRUFBSXpILGFBQWVxSCxFQUFNdjRDLFFBQ3pCMjRDLEVBQUl0SCxjQUFnQkEsRUFDcEJzSCxFQUFJbEgsY0FBZ0J2ckIsRUFBTyxDQUFDLEVBQUd5eUIsRUFBSTM0QyxTQUVuQ3k0QyxFQUFZRCxHQUFXRyxFQUNoQkEsQ0FDWCxDQUNKLENBQ0EsU0FBU0MsR0FBVUUsR0FDZixJQUFJandELEVBQVFpd0QsRUFBSzk0QyxRQUFRblgsTUFDekIsSUFBSyxJQUFJK1csS0FBTy9XLEVBQ1ppaUMsR0FBTWd1QixFQUFLOS9DLFVBQVcsU0FBVTRHLEVBRXhDLENBQ0EsU0FBU2k1QyxHQUFhQyxHQUNsQixJQUFJOXZELEVBQVc4dkQsRUFBSzk0QyxRQUFRaFgsU0FDNUIsSUFBSyxJQUFJNFcsS0FBTzVXLEVBQ1pxbUQsR0FBZXlKLEVBQUs5L0MsVUFBVzRHLEVBQUs1VyxFQUFTNFcsR0FFckQsQ0FFQSxTQUFTbTVDLEdBQW1CajJCLEdBSXhCMkUsRUFBWXhuQixTQUFRLFNBQVUxSixHQUUxQnVzQixFQUFJdnNCLEdBQVEsU0FBVW5JLEVBQUlveUIsR0FDdEIsT0FBS0EsR0FLWSxjQUFUanFCLEdBQ0FrL0MsR0FBc0JybkQsR0FFYixjQUFUbUksR0FBd0J1dEIsRUFBY3RELEtBRXRDQSxFQUFXL3ZCLEtBQU8rdkIsRUFBVy92QixNQUFRckMsRUFDckNveUIsRUFBYXQzQixLQUFLOFcsUUFBUWt6QyxNQUFNaHRCLE9BQU8xRixJQUU5QixjQUFUanFCLEdBQXdCbXRCLEVBQVdsRCxLQUNuQ0EsRUFBYSxDQUFFNWxCLEtBQU00bEIsRUFBWS8xQixPQUFRKzFCLElBRTdDdDNCLEtBQUs4VyxRQUFRekosRUFBTyxLQUFLbkksR0FBTW95QixFQUN4QkEsR0FoQkF0M0IsS0FBSzhXLFFBQVF6SixFQUFPLEtBQUtuSSxFQWtCeEMsQ0FDSixHQUNKLENBRUEsU0FBUzRxRCxHQUFrQi83QixHQUN2QixPQUFPQSxJQUFTdTFCLEdBQWlCdjFCLEVBQUttTixLQUFLcHFCLFVBQVlpZCxFQUFLSixJQUNoRSxDQUNBLFNBQVNvOEIsR0FBUTU3QixFQUFTNXNCLEdBQ3RCLE9BQUkweUIsRUFBUTlGLEdBQ0RBLEVBQVE1YixRQUFRaFIsSUFBUyxFQUVSLGlCQUFaNHNCLEVBQ0xBLEVBQVE5bEIsTUFBTSxLQUFLa0ssUUFBUWhSLElBQVMsSUFFdENzekIsRUFBUzFHLElBQ1BBLEVBQVF4ZCxLQUFLcFAsRUFJNUIsQ0FDQSxTQUFTeW9ELEdBQVdDLEVBQW1CeHZELEdBQ25DLElBQUl1N0IsRUFBUWkwQixFQUFrQmowQixNQUFPeEYsRUFBT3k1QixFQUFrQno1QixLQUFNa2YsRUFBU3VhLEVBQWtCdmEsT0FBUTVILEVBQVNtaUIsRUFBa0JuaUIsT0FDbEksSUFBSyxJQUFJcDNCLEtBQU9zbEIsRUFBTyxDQUNuQixJQUFJazBCLEVBQVFsMEIsRUFBTXRsQixHQUNsQixHQUFJdzVDLEVBQU8sQ0FDUCxJQUFJeGQsRUFBU3dkLEVBQU0zb0QsS0FDZm1yQyxJQUFXanlDLEVBQU9peUMsSUFDbEJ5ZCxHQUFnQm4wQixFQUFPdGxCLEVBQUs4ZixFQUFNa2YsRUFFMUMsQ0FDSixDQUNBNUgsRUFBT3pMLGlCQUFpQjNuQixjQUFXekksQ0FDdkMsQ0FDQSxTQUFTaytDLEdBQWdCbj
3BCLEVBQU90bEIsRUFBSzhmLEVBQU05c0IsR0FDdkMsSUFBSXdtRCxFQUFRbDBCLEVBQU10bEIsSUFDZHc1QyxHQUFXeG1ELEdBQVd3bUQsRUFBTXY4QixNQUFRanFCLEVBQVFpcUIsS0FFNUN1OEIsRUFBTXZ0QixrQkFBa0JvWixXQUU1Qi9mLEVBQU10bEIsR0FBTyxLQUNiaWxCLEVBQVNuRixFQUFNOWYsRUFDbkIsQ0FyTEEyd0MsR0FBWXp0QixJQUVaNHNCLEdBQVc1c0IsSUFFWHVmLEdBQVl2ZixJQUVaMmhCLEdBQWUzaEIsSUFFZjBjLEdBQVkxYyxJQThLWixJQUFJdzJCLEdBQWUsQ0FBQzNoQyxPQUFRbUUsT0FBUXZpQixPQTJGaENnZ0QsR0FBb0IsQ0FDcEJDLFVBMUZZLENBQ1ovb0QsS0FBTSxhQUNOdXpDLFVBQVUsRUFDVm43QyxNQUFPLENBQ0g0d0QsUUFBU0gsR0FDVEksUUFBU0osR0FDVC9tRCxJQUFLLENBQUNvbEIsT0FBUXR0QixTQUVsQkssUUFBUyxDQUNMaXZELFdBQVksV0FDUixJQUFJci9DLEVBQUtwUixLQUFNZzhCLEVBQVE1cUIsRUFBRzRxQixNQUFPeEYsRUFBT3BsQixFQUFHb2xCLEtBQU1rNkIsRUFBZXQvQyxFQUFHcy9DLGFBQWNDLEVBQWF2L0MsRUFBR3UvQyxXQUNqRyxHQUFJRCxFQUFjLENBQ2QsSUFBSS84QixFQUFNKzhCLEVBQWEvOEIsSUFBS2dQLEVBQW9CK3RCLEVBQWEvdEIsa0JBQW1CTixFQUFtQnF1QixFQUFhcnVCLGlCQUNoSHJHLEVBQU0yMEIsR0FBYyxDQUNoQnBwRCxLQUFNdW9ELEdBQWtCenRCLEdBQ3hCMU8sSUFBS0EsRUFDTGdQLGtCQUFtQkEsR0FFdkJuTSxFQUFLL3ZCLEtBQUtrcUQsR0FFTjN3RCxLQUFLcUosS0FBT210QixFQUFLcDJCLE9BQVM0RSxTQUFTaEYsS0FBS3FKLE1BQ3hDOG1ELEdBQWdCbjBCLEVBQU94RixFQUFLLEdBQUlBLEVBQU14MkIsS0FBSzAxQyxRQUUvQzExQyxLQUFLMHdELGFBQWUsSUFDeEIsQ0FDSixHQUVKRSxRQUFTLFdBQ0w1d0QsS0FBS2c4QixNQUFRM3NCLE9BQU8xQixPQUFPLE1BQzNCM04sS0FBS3cyQixLQUFPLEVBQ2hCLEVBQ0FxNkIsVUFBVyxXQUNQLElBQUssSUFBSW42QyxLQUFPMVcsS0FBS2c4QixNQUNqQm0wQixHQUFnQm53RCxLQUFLZzhCLE1BQU90bEIsRUFBSzFXLEtBQUt3MkIsS0FFOUMsRUFDQTMxQixRQUFTLFdBQ0wsSUFBSW8xQixFQUFRajJCLEtBQ1pBLEtBQUt5d0QsYUFDTHp3RCxLQUFLaTVCLE9BQU8sV0FBVyxTQUFVck4sR0FDN0Jva0MsR0FBVy81QixHQUFPLFNBQVUxdUIsR0FBUSxPQUFPd29ELEdBQVFua0MsRUFBS3JrQixFQUFPLEdBQ25FLElBQ0F2SCxLQUFLaTVCLE9BQU8sV0FBVyxTQUFVck4sR0FDN0Jva0MsR0FBVy81QixHQUFPLFNBQVUxdUIsR0FBUSxPQUFRd29ELEdBQVFua0MsRUFBS3JrQixFQUFPLEdBQ3BFLEdBQ0osRUFDQW1FLFFBQVMsV0FDTDFMLEtBQUt5d0QsWUFDVCxFQUNBdDRCLE9BQVEsV0FDSixJQUFJOFcsRUFBT2p2QyxLQUFLZ3ZDLE9BQU85cUIsUUFDbkJx
3ZixFQUFRZ1YsR0FBdUJ0SixHQUMvQjVNLEVBQW1Ca0IsR0FBU0EsRUFBTWxCLGlCQUN0QyxHQUFJQSxFQUFrQixDQUVsQixJQUFJc1EsRUFBU21kLEdBQWtCenRCLEdBQzNCanhCLEVBQUtwUixLQUFNdXdELEVBQVVuL0MsRUFBR20vQyxRQUFTQyxFQUFVcC9DLEVBQUdvL0MsUUFDbEQsR0FFQ0QsS0FBYTVkLElBQVdvZCxHQUFRUSxFQUFTNWQsS0FFckM2ZCxHQUFXN2QsR0FBVW9kLEdBQVFTLEVBQVM3ZCxHQUN2QyxPQUFPcFAsRUFFWCxJQUFJL1IsRUFBS3h4QixLQUFNZzhCLEVBQVF4SyxFQUFHd0ssTUFBT3hGLEVBQU9oRixFQUFHZ0YsS0FDdkM5ZixFQUFtQixNQUFiNnNCLEVBQU03c0IsSUFHUjJyQixFQUFpQm5CLEtBQUsrb0IsS0FDakI1bkIsRUFBaUIxTyxJQUFNLEtBQUszUixPQUFPcWdCLEVBQWlCMU8sS0FBTyxJQUNsRTRQLEVBQU03c0IsSUFDUnNsQixFQUFNdGxCLElBQ042c0IsRUFBTVosa0JBQW9CM0csRUFBTXRsQixHQUFLaXNCLGtCQUVyQ2hILEVBQVNuRixFQUFNOWYsR0FDZjhmLEVBQUsvdkIsS0FBS2lRLEtBSVYxVyxLQUFLMHdELGFBQWVudEIsRUFDcEJ2akMsS0FBSzJ3RCxXQUFhajZDLEdBR3RCNnNCLEVBQU0zakMsS0FBSzZwRCxXQUFZLENBQzNCLENBQ0EsT0FBT2xtQixHQUFVMEwsR0FBUUEsRUFBSyxFQUNsQyxJQU9KLFNBQVM2aEIsR0FBY2wzQixHQUVuQixJQUFJbTNCLEVBQVksQ0FDaEJBLElBQWdCLFdBQWMsT0FBT2hnRCxDQUFRLEVBRXpDZ2dELElBQWdCLFdBQ1pwdEIsR0FBTyx1RUFDWCxHQUVKdDBCLE9BQU82YixlQUFlME8sRUFBSyxTQUFVbTNCLEdBSXJDbjNCLEVBQUlvM0IsS0FBTyxDQUNQdmdDLEtBQU1rVCxHQUNOM0csT0FBUUEsRUFDUnlxQixhQUFjQSxHQUNkeGdCLGVBQWdCQSxJQUVwQnJOLEVBQUl0USxJQUFNQSxHQUNWc1EsRUFBSXEzQixPQUFTL29CLEdBQ2J0TyxFQUFJMmMsU0FBV0EsR0FFZjNjLEVBQUlzM0IsV0FBYSxTQUFVeHdELEdBRXZCLE9BREF3bUMsR0FBUXhtQyxHQUNEQSxDQUNYLEVBQ0FrNUIsRUFBSTlpQixRQUFVekgsT0FBTzFCLE9BQU8sTUFDNUI0d0IsRUFBWXhuQixTQUFRLFNBQVUxSixHQUMxQnVzQixFQUFJOWlCLFFBQVF6SixFQUFPLEtBQU9nQyxPQUFPMUIsT0FBTyxLQUM1QyxJQUdBaXNCLEVBQUk5aUIsUUFBUWt6QyxNQUFRcHdCLEVBQ3BCb0QsRUFBT3BELEVBQUk5aUIsUUFBUXRYLFdBQVk2d0QsSUFDL0J6QixHQUFRaDFCLEdBQ1JzMUIsR0FBVXQxQixHQUNWdzFCLEdBQVd4MUIsR0FDWGkyQixHQUFtQmoyQixFQUN2QixDQUVBazNCLEdBQWNsM0IsSUFDZHZxQixPQUFPNmIsZUFBZTBPLEdBQUk5cEIsVUFBVyxZQUFhLENBQzlDbkIsSUFBS2l5QixLQUVUdnhCLE9BQU82YixlQUFlME8sR0FBSTlwQixVQUFXLGNBQWUsQ0FDaERuQixJQUFLLFdBRUQsT0FBTzNPLEtBQUs4dEMsUUFBVTl0QyxLQUFLOHRDLE9BQU9xakIsVUFDdEMsSUFHSjloRCxPQUFPNmIsZUFBZTBPLEdBQUssMEJBQTJCLENBQ2xEOXNCLE1BQU8wN0MsS0FFWDV1QixHQUFJb3FCLFFBQVVBLEdBSWQsSUFBSTlrQixHQUFpQjVELEVBQVEsZUFFekI4MUIsR0FBYzkxQixFQUFRLHlDQUN0QmdFLEdBQWMsU0FBVTNMLEVBQUt0bUIsRUFBTWdrRCxHQUNuQyxNQUFrQixVQUFUQSxHQUFvQkQsR0FBWXo5QixJQUFpQixXQUFUdG1CLEdBQ25DLGFBQVRna0QsR0FBK0IsV0FBUjE5QixHQUNkLFlBQVQwOUIsR0FBOEIsVUFBUjE5QixHQUNiLFVBQVQwOUIsR0FBNEIsVUFBUjE5QixDQUM3QixFQUNJMjlCLEdBQW1CaDJCLEVBQVEsd0NBQzNCaTJCLEdBQThCajJCLEVBQVEsc0NBQ3RDazJCLEdBQXlCLFNBQVU5NkMsRUFBSzVKLEdBQ3hDLE9BQU8y
3a0QsR0FBaUIza0QsSUFBb0IsVUFBVkEsRUFDNUIsUUFFVSxvQkFBUjRKLEdBQTZCNjZDLEdBQTRCemtELEdBQ25EQSxFQUNBLE1BQ2xCLEVBQ0k0a0QsR0FBZ0JwMkIsRUFBUSw4WEFNeEJxMkIsR0FBVSwrQkFDVkMsR0FBVSxTQUFVcnFELEdBQ3BCLE1BQTBCLE1BQW5CQSxFQUFLNmEsT0FBTyxJQUFtQyxVQUFyQjdhLEVBQUswTixNQUFNLEVBQUcsRUFDbkQsRUFDSTQ4QyxHQUFlLFNBQVV0cUQsR0FDekIsT0FBT3FxRCxHQUFRcnFELEdBQVFBLEVBQUswTixNQUFNLEVBQUcxTixFQUFLbkgsUUFBVSxFQUN4RCxFQUNJcXhELEdBQW1CLFNBQVU3bEMsR0FDN0IsT0FBYyxNQUFQQSxJQUF1QixJQUFSQSxDQUMxQixFQUVBLFNBQVNrbUMsR0FBaUJ2dUIsR0FJdEIsSUFIQSxJQUFJM2pDLEVBQU8yakMsRUFBTTNqQyxLQUNiOFksRUFBYTZxQixFQUNid3VCLEVBQVl4dUIsRUFDVG5KLEVBQU0yM0IsRUFBVXB2QixxQkFDbkJvdkIsRUFBWUEsRUFBVXB2QixrQkFBa0IrUyxTQUN2QnFjLEVBQVVueUQsT0FDdkJBLEVBQU9veUQsR0FBZUQsRUFBVW55RCxLQUFNQSxJQUk5QyxLQUFPdzZCLEVBQU8xaEIsRUFBYUEsRUFBVzFXLFNBQzlCMFcsR0FBY0EsRUFBVzlZLE9BQ3pCQSxFQUFPb3lELEdBQWVweUQsRUFBTThZLEVBQVc5WSxPQUcvQyxPQUFPcXlELEdBQVlyeUQsRUFBS3N5RCxZQUFhdHlELEVBQUsydUMsTUFDOUMsQ0FDQSxTQUFTeWpCLEdBQWV6c0MsRUFBT3ZqQixHQUMzQixNQUFPLENBQ0hrd0QsWUFBYWx3QyxHQUFPdUQsRUFBTTJzQyxZQUFhbHdELEVBQU9rd0QsYUFDOUMzakIsTUFBT25VLEVBQU03VSxFQUFNZ3BCLE9BQVMsQ0FBQ2hwQixFQUFNZ3BCLE1BQU92c0MsRUFBT3VzQyxPQUFTdnNDLEVBQU91c0MsTUFFekUsQ0FDQSxTQUFTMGpCLEdBQVlDLEVBQWFDLEdBQzlCLE9BQUkvM0IsRUFBTTgzQixJQUFnQjkzQixFQUFNKzNCLEdBQ3JCbndDLEdBQU9rd0MsRUFBYUUsR0FBZUQsSUFHdkMsRU
3FDWCxDQUNBLFNBQVNud0MsR0FBT3pSLEVBQUcyWCxHQUNmLE9BQU8zWCxFQUFLMlgsRUFBSTNYLEVBQUksSUFBTTJYLEVBQUkzWCxFQUFLMlgsR0FBSyxFQUM1QyxDQUNBLFNBQVNrcUMsR0FBZXRsRCxHQUNwQixPQUFJdUQsTUFBTTRwQixRQUFRbnRCLEdBQ1B1bEQsR0FBZXZsRCxHQUV0QjJ0QixFQUFTM3RCLEdBQ0Z3bEQsR0FBZ0J4bEQsR0FFTixpQkFBVkEsRUFDQUEsRUFHSixFQUNYLENBQ0EsU0FBU3VsRCxHQUFldmxELEdBR3BCLElBRkEsSUFDSXlsRCxFQURBcDFCLEVBQU0sR0FFRDV6QixFQUFJLEVBQUc4YSxFQUFJdlgsRUFBTTFNLE9BQVFtSixFQUFJOGEsRUFBRzlhLElBQ2pDNndCLEVBQU9tNEIsRUFBY0gsR0FBZXRsRCxFQUFNdkQsTUFBeUIsS0FBaEJncEQsSUFDL0NwMUIsSUFDQUEsR0FBTyxLQUNYQSxHQUFPbzFCLEdBR2YsT0FBT3AxQixDQUNYLENBQ0EsU0FBU20xQixHQUFnQnhsRCxHQUNyQixJQUFJcXdCLEVBQU0sR0FDVixJQUFLLElBQUl6bUIsS0FBTzVKLEVBQ1JBLEVBQU00SixLQUNGeW1CLElBQ0FBLEdBQU8sS0FDWEEsR0FBT3ptQixHQUdmLE9BQU95bUIsQ0FDWCxDQUVBLElBQUlxMUIsR0FBZSxDQUNmanRELElBQUssNkJBQ0xrdEQsS0FBTSxzQ0FFTkMsR0FBWXAzQixFQUFRLHNuQkFhcEJxM0IsR0FBUXIzQixFQUFRLGtOQUVvRCxHQUNwRXMzQixHQUFXLFNBQVVqL0IsR0FBTyxNQUFlLFFBQVJBLENBQWUsRUFDbERzTCxHQUFnQixTQUFVdEwsR0FDMUIsT0FBTysrQixHQUFVLytCLElBQVFnL0IsR0FBTWgvQixFQUNuQyxFQUNBLFNBQVN5TCxHQUFnQnpMLEdBQ3JCLE9BQUlnL0IsR0FBTWgvQixHQUNDLE1BSUMsU0FBUkEsRUFDTyxZQURYLENBR0osQ0FDQSxJQUFJay9CLEdBQXNCeGpELE9BQU8xQixPQUFPLE1BQ3hDLFNBQVN3eEIsR0FBaUJ4TCxHQUV0QixJQUFLdU0sR0FDRCxPQUFPLEVBRVgsR0FBSWpCLEdBQWN0TCxHQUNkLE9BQU8sRUFJWCxHQUZBQSxFQUFNQSxFQUFJdFIsY0FFc0IsTUFBNUJ3d0MsR0FBb0JsL0IsR0FDcEIsT0FBT2svQixHQUFvQmwvQixHQUUvQixJQUFJMWMsRUFBSzFKLFNBQVM0TCxjQUFjd2EsR0FDaEMsT0FBSUEsRUFBSXBiLFFBQVEsTUFBUSxFQUVaczZDLEdBQW9CbC9CLEdBQ3hCMWMsRUFBRzNQLGNBQWdCeUssT0FBTytnRCxvQkFDdEI3N0MsRUFBRzNQLGNBQWdCeUssT0FBT3VkLFlBRzFCdWpDLEdBQW9CbC9CLEdBQU8scUJBQXFCaGQsS0FBS00sRUFBR2pJLFdBRXhFLENBQ0EsSUFBSStqRCxHQUFrQnozQixFQUFRLDZDQUs5QixTQUFTMDNCLEdBQU0vN0MsR0FDWCxHQUFrQixpQkFBUEEsRUFBaUIsQ0FDeEIsSUFBSWtHLEVBQVc1UCxTQUFTdVcsY0FBYzdNLEdBQ3RDLE9BQUtrRyxJQUNEd21CLEdBQU8sd0JBQTBCMXNCLEdBQzFCMUosU0FBUzRMLGNBQWMsT0FHdEMsQ0FFSSxPQUFPbEMsQ0FFZixDQUVBLFNBQVNrQyxHQUFjODVDLEVBQVMxdkIsR0FDNUIsSUFBSXBCLEVBQU01MEIsU0FBUzRMLGNBQWM4NUMsR0FDakMsTUFBZ0IsV0FBWkEsR0FJQTF2QixFQUFNM2pDLE1BQ04yakMsRUFBTTNqQyxLQUFLdzRCLFlBQ21Cbm1CLElBQTlCc3hCLEVBQU0zakMsS0FBS3c0QixNQUFNODZCLFVBQ2pCL3dCLEVBQUk3b0IsYUFBYSxXQUFZLFlBTnRCNm9CLENBU2YsQ0FDQSxTQUFTZ3hCLEdBQWdCQyxFQUFXSCxHQUNoQyxPQUFPMWxELFNBQVM0bEQsZ0JBQWdCWCxHQUFhWSxHQUFZSCxFQUM3RCxDQUNBLFNBQVN0UixHQUFlLytDLEdBQ3BCLE9BQU8ySyxTQUFTbzBDLGVBQWUvK0MsRUFDbkMsQ0FDQSxTQUFTeXdELEdBQWN6d0QsR0FDbkIsT0FBTzJLLFNBQVM4bEQsY0FBY3p3RCxFQUNsQyxDQUNBLFNBQVNxbUIsR0FBYXZRLEVBQVk0NkMsRUFBU0MsR0FDdkM3NkMsRUFBV3VRLGFBQWFxcUMsRUFBU0MsRUFDckMsQ0FDQSxTQUFTenFDLEdBQVkwRyxFQUFNakssR0FDdkJpSyxFQUFLMUcsWUFBWXZELEVBQ3JCLENBQ0EsU0FBU2xKLEdBQVltVCxFQUFNakssR0FDdkJpSyxFQUFLblQsWUFBWWtKLEVBQ3JCLENBQ0EsU0FBUzdNLEdBQVc4VyxHQUNoQixPQUFPQSxFQUFLOVcsVUFDaEIsQ0FDQSxTQUFTOFQsR0FBWWdELEdBQ2pCLE9BQU9BLEVBQUtoRCxXQUNoQixDQUNBLFNBQVN5bUMsR0FBUXpqQyxHQUNiLE9BQU9BLEVBQUt5akMsT0FDaEIsQ0FDQSxTQUFTTyxHQUFlaGtDLEVBQU01c0IsR0FDMUI0c0IsRUFBSzViLFlBQWNoUixDQUN2QixDQUNBLFNBQVM2d0QsR0FBY2prQyxFQUFNa2tDLEdBQ3pCbGtDLEVBQUtsVyxhQUFhbzZDLEVBQVMsR0FDL0IsQ0FFQSxJQUFJQyxHQUF1QnRrRCxPQUFPMnFCLE9BQU8sQ0FDdkNnTixVQUFXLEtBQ1g3dEIsY0FBZUEsR0FDZmc2QyxnQkFBaUJBLEdBQ2pCeFIsZUFBZ0JBLEdBQ2hCMFIsY0FBZUEsR0FDZnBxQyxhQUFjQSxHQUNkSCxZQUFhQSxHQUNiek0sWUFBYUEsR0FDYjNELFdBQVlBLEdBQ1o4VCxZQUFhQSxHQUNieW1DLFFBQVNBLEdBQ1RPLGVBQWdCQSxHQUNoQkMsY0FBZUEsS0FHYnJrRCxHQUFNLENBQ056QixPQUFRLFNBQVV3YixFQUFHb2EsR0FDakJxd0IsR0FBWXJ3QixFQUNoQixFQUNBaGlDLE9BQVEsU0FBVXNvRCxFQUFVdG1CLEdBQ3BCc21CLEVBQVNqcUQsS0FBS3dQLE1BQVFtMEIsRUFBTTNqQyxLQUFLd1AsTUFDakN3a0QsR0FBWS9KLEdBQVUsR0FDdEIrSixHQUFZcndCLEdBRXBCLEVBQ0EzMkIsUUFBUyxTQUFVMjJCLEdBQ2Zxd0IsR0FBWXJ3QixHQUFPLEVBQ3ZCLEdBRUosU0FBU3F3QixHQUFZcndCLEVBQU9zd0IsR0FDeEIsSUFBSXprRCxFQUFNbTBCLEVBQU0zakMsS0FBS3dQLElBQ3JCLEdBQUtnckIsRUFBTWhyQixHQUFYLENBRUEsSUFBSTB5QixFQUFLeUIsRUFBTW5CLFFBQ1gweEIsRUFBV3Z3QixFQUFNWixtQkFBcUJZLEVBQU1wQixJQUM1Q3IxQixFQUFRK21ELEVBQVksS0FBT0MsRUFDM0JDLEVBQWFGLE9BQVk1aEQsRUFBWTZoRCxFQUN6QyxHQU
3FJdDVCLEVBQVdwckIsR0FDWHM4QixHQUF3QnQ4QixFQUFLMHlCLEVBQUksQ0FBQ2gxQixHQUFRZzFCLEVBQUksNkJBRGxELENBSUEsSUFBSWt5QixFQUFRendCLEVBQU0zakMsS0FBS3EwRCxTQUNuQkMsRUFBMkIsaUJBQVI5a0QsR0FBbUMsaUJBQVJBLEVBQzlDK2tELEVBQVM3c0IsR0FBTWw0QixHQUNmZ2xELEVBQU90eUIsRUFBR3J6QixNQUNkLEdBQUl5bEQsR0FBYUMsRUFDYixHQUFJSCxFQUFPLENBQ1AsSUFBSW5qQixFQUFXcWpCLEVBQVlFLEVBQUtobEQsR0FBT0EsRUFBSXRDLE1BQ3ZDK21ELEVBQ0E1NUIsRUFBUTRXLElBQWFsVixFQUFTa1YsRUFBVWlqQixHQUduQzc1QixFQUFRNFcsR0FTSEEsRUFBU3dqQixTQUFTUCxJQUN4QmpqQixFQUFTcHFDLEtBQUtxdEQsR0FUVkksR0FDQUUsRUFBS2hsRCxHQUFPLENBQUMwa0QsR0FDYlEsR0FBWXh5QixFQUFJMXlCLEVBQUtnbEQsRUFBS2hsRCxLQUcxQkEsRUFBSXRDLE1BQVEsQ0FBQ2duRCxFQU83QixNQUNLLEdBQUlJLEVBQVcsQ0FDaEIsR0FBSUwsR0FBYU8sRUFBS2hsRCxLQUFTMGtELEVBQzNCLE9BRUpNLEVBQUtobEQsR0FBTzJrRCxFQUNaTyxHQUFZeHlCLEVBQUkxeUIsRUFBS3RDLEVBQ3pCLE1BQ0ssR0FBSXFuRCxFQUFRLENBQ2IsR0FBSU4sR0FBYXprRCxFQUFJdEMsUUFBVWduRCxFQUMzQixPQUVKMWtELEVBQUl0QyxNQUFRQSxDQUNoQixNQUVJNjJCLEdBQU8sOEJBQThCM2hCLGNBQWM1UyxHQXhDM0QsQ0FSVSxDQW1EZCxDQUNBLFNBQVNrbEQsR0FBWWxqRCxFQUFJc0YsRUFBS2tWLEdBQzFCLElBQUlvb0IsRUFBYzVpQyxFQUFHNGlDLFlBQ2pCQSxHQUFlbFksRUFBT2tZLEVBQWF0OUIsS0FDL0I0d0IsR0FBTTBNLEVBQVl0OUIsSUFDbEJzOUIsRUFBWXQ5QixHQUFLNUosTUFBUThlLEVBR3pCb29CLEVBQVl0OUIsR0FBT2tWLEVBRy9CLENBYUEsSUFBSTJvQyxHQUFZLElBQUlyeUIsR0FBTSxHQUFJLENBQUMsRUFBRyxJQUM5QjNYLEdBQVEsQ0FBQyxTQUFVLFdBQVksU0FBVSxTQUFVLFdBQ3ZELFNBQVNpcUMsR0FBVWprRCxFQUFHMlgsR0FDbEIsT0FBUTNYLEVBQUVtRyxNQUFRd1IsRUFBRXhSLEtBQ2hCbkcsRUFBRSt4QixlQUFpQnBhLEVBQUVvYSxlQUNuQi94QixFQUFFb2pCLE1BQVF6TCxFQUFFeUwsS0FDVnBqQixFQUFFd3lCLFlBQWM3YSxFQUFFNmEsV0FDbEIzSSxFQUFNN3BCLEVBQUUzUSxRQUFVdzZCLEVBQU1sUyxFQUFFdG9CLE9BQzFCNjBELEdBQWNsa0QsRUFBRzJYLElBQ2hCbVMsRUFBTzlwQixFQUFFNHlCLHFCQUF1QmpKLEVBQVFoUyxFQUFFb2EsYUFBYTdTLE9BQ3BFLENBQ0EsU0FBU2dsQyxHQUFjbGtELEVBQUcyWCxHQUN0QixHQUFjLFVBQVYzWCxFQUFFb2pCLElBQ0YsT0FBTyxFQUNYLElBQUlwcUIsRUFDQW1yRCxFQUFRdDZCLEVBQU83d0IsRUFBSWdILEVBQUUzUSxPQUFVdzZCLEVBQU83d0IsRUFBSUEsRUFBRTZ1QixRQUFXN3VCLEVBQUU4RCxLQUN6RHNuRCxFQUFRdjZCLEVBQU83d0IsRUFBSTJlLEVBQUV0b0IsT0FBVXc2QixFQUFPN3dCLEVBQUlBLEVBQUU2dUIsUUFBVzd1QixFQUFFOEQsS0FDN0QsT0FBT3FuRCxJQUFVQyxHQUFVNUIsR0FBZ0IyQixJQUFVM0IsR0FBZ0I0QixFQUN6RSxDQUNBLFNBQVNDLEdBQWtCbDZDLEVBQVVtNkMsRUFBVUMsR0FDM0MsSUFBSXZyRCxFQUFHbU4sRUFDSGhULEVBQU0sQ0FBQyxFQUNYLElBQUs2RixFQUFJc3JELEVBQVV0ckQsR0FBS3VyRCxJQUFVdnJELEVBRTFCNndCLEVBREoxakIsRUFBTWdFLEVBQVNuUixHQUFHbU4sT0FFZGhULEVBQUlnVCxHQUFPbk4sR0FFbkIsT0FBTzdGLENBQ1gsQ0FDQSxTQUFTcXhELEdBQW9CQyxHQUN6QixJQUFJenJELEVBQUdpSCxFQUNIZ3BDLEVBQU0sQ0FBQyxFQUNQaGMsRUFBVXczQixFQUFReDNCLFFBQVNtMkIsRUFBVXFCLEVBQVFyQixRQUNqRCxJQUFLcHFELEVBQUksRUFBR0EsRUFBSWdoQixHQUFNbnFCLFNBQVVtSixFQUU1QixJQURBaXdDLEVBQUlqdkIsR0FBTWhoQixJQUFNLEdBQ1hpSCxFQUFJLEVBQUdBLEVBQUlndEIsRUFBUXA5QixTQUFVb1EsRUFDMUI0cEIsRUFBTW9ELEVBQVFodEIsR0FBRytaLEdBQU1oaEIsTUFDdkJpd0MsRUFBSWp2QixHQUFNaGhCLElBQUk5QyxLQUFLKzJCLEVBQVFodEIsR0FBRytaLEdBQU1oaEIsS0FJaEQsU0FBUzByRCxFQUFZOXlCLEdBQ2pCLE9BQU8sSUFBSUQsR0FBTXl4QixFQUFRVixRQUFROXdCLEdBQUs5ZixjQUFlLENBQUMsRUFBRyxRQUFJcFEsRUFBV2t3QixFQUM1RSxDQUNBLFNBQVMreUIsRUFBV0MsRUFBVTVnQixHQUMxQixTQUFTMXRDLElBQ3NCLEtBQXJCQSxFQUFPMHRDLFdBQ1Q2Z0IsRUFBV0QsRUFFbkIsQ0FFQSxPQURBdHVELEVBQU8wdEMsVUFBWUEsRUFDWjF0QyxDQUNYLENBQ0EsU0FBU3V1RCxFQUFXbitDLEdBQ2hCLElBQUlqVixFQUFTMnhELEVBQVFqN0MsV0FBV3pCLEdBRTVCbWpCLEVBQU1wNEIsSUFDTjJ4RCxFQUFRN3FDLFlBQVk5bUIsRUFBUWlWLEVBRXBDLENBQ0EsU0FBU2tvQixFQUFpQm9FLEVBQU84eEIsR0FDN0IsT0FBU0EsSUFDSjl4QixFQUFNaEIsTUFDTHh4QixFQUFPZ3VCLGdCQUFnQjMrQixRQUNyQjJRLEVBQU9ndUIsZ0JBQWdCamYsTUFBSyxTQUFVdzFDLEdBQ2xDLE9BQU96NkIsRUFBU3k2QixHQUNWQSxFQUFPMytDLEtBQUs0c0IsRUFBTTVQLEtBQ2xCMmhDLElBQVcveEIsRUFBTTVQLEdBQzNCLE1BQ0o1aUIsRUFBT291QixpQkFBaUJvRSxFQUFNNVAsSUFDdEMsQ0FDQSxJQUFJNGhDLEVBQW9CLEVBQ3hCLFNBQVNDLEVBQVVqeUIsRUFBT2t5QixFQUFvQkMsRUFBV0MsRUFBUUMsRUFBUUMsRUFBWTF5RCxHQVVqRixHQVRJaTNCLEVBQU1tSixFQUFNcEIsTUFBUS9ILEVBQU15N0IsS0FNMUJ0eUIsRUFBUXN5QixFQUFXMXlELEdBQVNtZ0MsR0FBV0MsSUFFM0NBLEVBQU1ULGNBQWdCOHlCLEdBQ2xCMW5CLEVBQWdCM0ssRUFBT2t5QixFQUFvQkMsRUFBV0MsR0FBMUQsQ0FHQSxJQUFJLzFELEVBQU8yakMsRUFBTTNqQyxLQUNiOGEsRUFBVzZvQixFQUFNN29CLFNBQ2pCaVosRUFBTTRQLEVBQU01UCxJQUNaeUcsRUFBTXpHLElBRUUvekIsR0FBUUEsRUFBS291QyxLQUNidW5CLElBRUFwMkIsRUFBaUJvRSxFQUFPZ3lCLElBQ3hCNXhCLEdBQU8sNEJBQ0hoUSxFQURHLGtIQUl3QzRQLEVBQU1uQixTQUc3RG1CLEVBQU1wQixJQUFNb0IsRUFBTWhCLEdBQ1pveEIsRUFBUVIsZ0JBQWdCNXZCLEVBQU1oQixHQUFJNU8sR0FDbENnZ0MsRUFBUXg2QyxjQUFjd2EsRUFBSzRQLEdBQ2pDdXlCLEVBQVN2eUIsR0FDVHd5QixFQUFleHlCLEVBQU83b0IsRUFBVSs2QyxHQUM1QnI3QixFQUFNeDZCLElBQ05vMkQsRUFBa0J6eUIsRUFBT2t5QixHQUU3QjNMLEVBQU80TCxFQUFXbnlCLEVBQU1wQixJQUFLd3pCLEdBQ3pCLzFELEdBQVFBLEVBQUtvdUMsS0FDYnVuQixLQUdDbDdCLEVBQU9rSixFQUFNUixZQUNsQlEsRUFBTXBCLElBQU13eEIsRUFBUU4sY0FBYzl2QixFQUFNM2dDLE1BQ3hDa25ELEVBQU80TCxFQUFXbnlCLEVBQU1wQixJQUFLd3pCLEtBRzdCcHlCLEVBQU1wQixJQUFNd3hCLEVBQVFoUyxlQUFlcGUsRUFBTTNnQyxNQUN6Q2tuRCxFQUFPNEwsRUFBV255QixFQUFNcEIsSUFBS3d6QixHQXBDakMsQ0FzQ0osQ0FDQSxTQUFTem5CLEVBQWdCM0ssRUFBT2t5QixFQUFvQkMsRUFBV0MsR0FDM0QsSUFBSXBzRCxFQUFJZzZCLEVBQU0zakMsS0FDZCxHQUFJdzZCLEVBQU03d0IsR0FBSSxDQUNWLElBQUkwc0QsRUFBZ0I3N0IsRUFBTW1KLEVBQU1aLG9CQUFzQnA1QixFQUFFa2dELFVBUXhELEdBUElydkIsRUFBTzd3QixFQUFJQSxFQUFFd2lCLE9BQVVxTyxFQUFPN3dCLEVBQUlBLEVBQUUybEIsT0FDcEMzbEIsRUFBRWc2QixHQUFPLEdBTVRuSixFQUFNbUosRUFBTVosbUJBTVosT0FMQXV6QixFQUFjM3lCLEVBQU9reUIsR0FDckIzTCxFQUFPNEwsRUFBV255QixFQUFNcEIsSUFBS3d6QixHQUN6QnQ3QixFQUFPNDdCLElBQ1BFLEVBQW9CNXlCLEVBQU9reUIsRUFBb0JDLEVBQVdDLElBRXZELENBRWYsQ0FDSixDQUNBLFNBQVNPLEVBQWMzeUIsRUFBT2t5QixHQUN0QnI3QixFQUFNbUosRUFBTTNqQyxLQUFLdzJELGlCQUNqQlgsRUFBbUJodkQsS0FBS3dKLE1BQU13bEQsRUFBb0JseUIsRUFBTTNqQyxLQUFLdzJELGVBQzdEN3lCLEVBQU0zakMsS0FBS3cyRCxjQUFnQixNQUUvQjd5QixFQUFNcEIsSUFBTW9CLEVBQU1aLGtCQUFrQnZKLElBQ2hDaTlCLEVBQVk5eUIsSUFDWnl5QixFQUFrQnp5QixFQUFPa3lCLEdBQ3pCSyxFQUFTdnlCLEtBS1Rxd0IsR0FBWXJ3QixHQUVaa3lCLEVBQW1CaHZELEtBQUs4OEIsR0FFaEMsQ0FDQSxTQUFTNHlCLEVBQW9CNXlCLEVBQU9reUIsRUFBb0JDLEVBQVdDLEdBTy9ELElBTkEsSUFBSXBzRCxFQUtBK3NELEVBQVkveUIsRUFDVCt5QixFQUFVM3pCLG1CQUViLEdBQUl2SSxFQUFPN3dCLEdBRFgrc0QsRUFBWUEsRUFBVTN6QixrQkFBa0IrUyxRQUNmOTFDLE9BQVV3NkIsRU
3FBTzd3QixFQUFJQSxFQUFFZ3RELFlBQWMsQ0FDMUQsSUFBS2h0RCxFQUFJLEVBQUdBLEVBQUlpd0MsRUFBSWdkLFNBQVNwMkQsU0FBVW1KLEVBQ25DaXdDLEVBQUlnZCxTQUFTanRELEdBQUdnckQsR0FBVytCLEdBRS9CYixFQUFtQmh2RCxLQUFLNnZELEdBQ3hCLEtBQ0osQ0FJSnhNLEVBQU80TCxFQUFXbnlCLEVBQU1wQixJQUFLd3pCLEVBQ2pDLENBQ0EsU0FBUzdMLEVBQU85bkQsRUFBUW1nQyxFQUFLL3lCLEdBQ3JCZ3JCLEVBQU1wNEIsS0FDRm80QixFQUFNaHJCLEdBQ0Z1a0QsRUFBUWo3QyxXQUFXdEosS0FBU3BOLEdBQzVCMnhELEVBQVExcUMsYUFBYWpuQixFQUFRbWdDLEVBQUsveUIsR0FJdEN1a0QsRUFBUXQzQyxZQUFZcmEsRUFBUW1nQyxHQUd4QyxDQUNBLFNBQVM0ekIsRUFBZXh5QixFQUFPN29CLEVBQVUrNkMsR0FDckMsR0FBSXg3QixFQUFRdmYsR0FBVyxDQUVmKzdDLEVBQW1CLzdDLEdBRXZCLElBQUssSUFBSTQrQixFQUFNLEVBQUdBLEVBQU01K0IsRUFBU3RhLFNBQVVrNUMsRUFDdkNrYyxFQUFVOTZDLEVBQVM0K0IsR0FBTW1jLEVBQW9CbHlCLEVBQU1wQixJQUFLLE1BQU0sRUFBTXpuQixFQUFVNCtCLEVBRXRGLE1BQ1MvZSxFQUFZZ0osRUFBTTNnQyxPQUN2Qit3RCxFQUFRdDNDLFlBQVlrbkIsRUFBTXBCLElBQUt3eEIsRUFBUWhTLGVBQWVsekIsT0FBTzhVLEVBQU0zZ0MsT0FFM0UsQ0FDQSxTQUFTeXpELEVBQVk5eUIsR0FDakIsS0FBT0EsRUFBTVosbUJBQ1RZLEVBQVFBLEVBQU1aLGtCQUFrQitTLE9BRXBDLE9BQU90YixFQUFNbUosRUFBTTVQLElBQ3ZCLENBQ0EsU0FBU3FpQyxFQUFrQnp5QixFQUFPa3lCLEdBQzlCLElBQUssSUFBSWlCLEVBQU0sRUFBR0EsRUFBTWxkLEVBQUk3ckMsT0FBT3ZOLFNBQVVzMkQsRUFDekNsZCxFQUFJN3JDLE9BQU8rb0QsR0FBS25DLEdBQVdoeEIsR0FHM0JuSixFQURKN3dCLEVBQUlnNkIsRUFBTTNqQyxLQUFLbXNCLFFBRVBxTyxFQUFNN3dCLEVBQUVvRSxTQUNScEUsRUFBRW9FLE9BQU80bUQsR0FBV2h4QixHQUNwQm5KLEVBQU03d0IsRUFBRXVnRCxTQUNSMkwsRUFBbUJodkQsS0FBSzg4QixHQUVwQyxDQUlBLFNBQVN1eUIsRUFBU3Z5QixHQUNkLElBQUloNkIsRUFDSixHQUFJNndCLEVBQU83d0IsRUFBSWc2QixFQUFNYixXQUNqQml4QixFQUFRRixjQUFjbHdCLEVBQU1wQixJQUFLNTRCLFFBSWpDLElBREEsSUFBSW90RCxFQUFXcHpCLEVBQ1JvekIsR0FDQ3Y4QixFQUFPN3dCLEVBQUlvdEQsRUFBU3YwQixVQUFhaEksRUFBTzd3QixFQUFJQSxFQUFFNjZCLFNBQVMya0IsV0FDdkQ0SyxFQUFRRixjQUFjbHdCLEVBQU1wQixJQUFLNTRCLEdBRXJDb3RELEVBQVdBLEVBQVMzMEQsT0FJeEJvNEIsRUFBTzd3QixFQUFJbXhDLEtBQ1hueEMsSUFBTWc2QixFQUFNbkIsU0FDWjc0QixJQUFNZzZCLEVBQU1mLFdBQ1pwSSxFQUFPN3dCLEVBQUlBLEVBQUU2NkIsU0FBUzJrQixXQUN0QjRLLEVBQVFGLGNBQWNsd0IsRUFBTXBCLElBQUs1NEIsRUFFekMsQ0FDQSxTQUFTcXRELEVBQVVsQixFQUFXQyxFQUFReE0sRUFBUTBOLEVBQVUvQixFQUFRVyxHQUM1RCxLQUFPb0IsR0FBWS9CLElBQVUrQixFQUN6QnJCLEVBQVVyTSxFQUFPME4sR0FBV3BCLEVBQW9CQyxFQUFXQyxHQUFRLEVBQU94TSxFQUFRME4sRUFFMUYsQ0FDQSxTQUFTQyxFQUFrQnZ6QixHQUN2QixJQUFJaDZCLEVBQUdpSCxFQUNINVEsRUFBTzJqQyxFQUFNM2pDLEtBQ2pCLEdBQUl3NkIsRUFBTXg2QixHQUdOLElBRkl3NkIsRUFBTzd3QixFQUFJM0osRUFBS21zQixPQUFVcU8sRUFBTzd3QixFQUFJQSxFQUFFcUQsVUFDdkNyRCxFQUFFZzZCLEdBQ0RoNkIsRUFBSSxFQUFHQSxFQUFJaXdDLEVBQUk1c0MsUUFBUXhNLFNBQVVtSixFQUNsQ2l3QyxFQUFJNXNDLFFBQVFyRCxHQUFHZzZCLEdBRXZCLEdBQUluSixFQUFPN3dCLEVBQUlnNkIsRUFBTTdvQixVQUNqQixJQUFLbEssRUFBSSxFQUFHQSxFQUFJK3lCLEVBQU03b0IsU0FBU3RhLFNBQVVvUSxFQUNyQ3NtRCxFQUFrQnZ6QixFQUFNN29CLFNBQVNsSyxHQUc3QyxDQUNBLFNBQVN1bUQsRUFBYTVOLEVBQVEwTixFQUFVL0IsR0FDcEMsS0FBTytCLEdBQVkvQixJQUFVK0IsRUFBVSxDQUNuQyxJQUFJRyxFQUFLN04sRUFBTzBOLEdBQ1p6OEIsRUFBTTQ4QixLQUNGNThCLEVBQU00OEIsRUFBR3JqQyxNQUNUc2pDLEVBQTBCRCxHQUMxQkYsRUFBa0JFLElBSWxCNUIsRUFBVzRCLEVBQUc3MEIsS0FHMUIsQ0FDSixDQUNBLFNBQVM4MEIsRUFBMEIxekIsRUFBTzJ6QixHQUN0QyxHQUFJOThCLEVBQU04OEIsSUFBTzk4QixFQUFNbUosRUFBTTNqQyxNQUFPLENBQ2hDLElBQUl1M0QsRUFDQTVpQixFQUFZaUYsRUFBSTN5QyxPQUFPekcsT0FBUyxFQWdCcEMsSUFmSWc2QixFQUFNODhCLEdBR05BLEVBQUczaUIsV0FBYUEsRUFJaEIyaUIsRUFBS2hDLEVBQVczeEIsRUFBTXBCLElBQUtvUyxHQUczQm5hLEVBQU8rOEIsRUFBTTV6QixFQUFNWixvQkFDbkJ2SSxFQUFPKzhCLEVBQU1BLEVBQUl6aEIsU0FDakJ0YixFQUFNKzhCLEVBQUl2M0QsT0FDVnEzRCxFQUEwQkUsRUFBS0QsR0FFOUJDLEVBQU0sRUFBR0EsRUFBTTNkLEVBQUkzeUMsT0FBT3pHLFNBQVUrMkQsRUFDckMzZCxFQUFJM3lDLE9BQU9zd0QsR0FBSzV6QixFQUFPMnpCLEdBRXZCOThCLEVBQU8rOEIsRUFBTTV6QixFQUFNM2pDLEtBQUttc0IsT0FBVXFPLEVBQU8rOEIsRUFBTUEsRUFBSXR3RCxRQUNuRHN3RCxFQUFJNXpCLEVBQU8yekIsR0FHWEEsR0FFUixNQUVJOUIsRUFBVzd4QixFQUFNcEIsSUFFekIsQ0FDQSxTQUFTaTFCLEVBQWUxQixFQUFXMkIsRUFBT0MsRUFBTzdCLEVBQW9COEIsR0FDakUsSUFRSUMsRUFBYUMsRUFBVUMsRUFSdkJDLEVBQWMsRUFDZEMsRUFBYyxFQUNkQyxFQUFZUixFQUFNajNELE9BQVMsRUFDM0IwM0QsRUFBZ0JULEVBQU0sR0FDdEJVLEVBQWNWLEVBQU1RLEdBQ3BCRyxFQUFZVixFQUFNbDNELE9BQVMsRUFDM0I2M0QsRUFBZ0JYLEVBQU0sR0FDdEJZLEVBQWNaLEVBQU1VLEdBS3BCRyxHQUFXWixFQUlmLElBRklkLEVBQW1CYSxHQUVoQkssR0FBZUUsR0FBYUQsR0FBZUksR0FDMUM5OUIsRUFBUTQ5QixHQUNSQSxFQUFnQlQsSUFBUU0sR0FFbkJ6OUIsRUFBUTY5QixHQUNiQSxFQUFjVixJQUFRUSxHQUVqQnJELEdBQVVzRCxFQUFlRyxJQUM5QkcsRUFBV04sRUFBZUcsRUFBZXhDLEVBQW9CNkIsRUFBT00sR0FDcEVFLEVBQWdCVCxJQUFRTSxHQUN4Qk0sRUFBZ0JYLElBQVFNLElBRW5CcEQsR0FBVXVELEVBQWFHLElBQzVCRSxFQUFXTCxFQUFhRyxFQUFhekMsRUFBb0I2QixFQUFPVSxHQUNoRUQsRUFBY1YsSUFBUVEsR0FDdEJLLEVBQWNaLElBQVFVLElBRWpCeEQsR0FBVXNELEVBQWVJLElBRTlCRSxFQUFXTixFQUFlSSxFQUFhekMsRUFBb0I2QixFQUFPVSxHQUNsRUcsR0FDSXhFLEVBQVExcUMsYUFBYXlzQyxFQUFXb0MsRUFBYzMxQixJQUFLd3hCLEVBQVFubkMsWUFBWXVyQyxFQUFZNTFCLE1BQ3ZGMjFCLEVBQWdCVCxJQUFRTSxHQUN4Qk8sRUFBY1osSUFBUVUsSUFFakJ4RCxHQUFVdUQsRUFBYUUsSUFFNUJHLEVBQVdMLEVBQWFFLEVBQWV4QyxFQUFvQjZCLEVBQU9NLEdBQ2xFTyxHQUNJeEUsRUFBUTFxQyxhQUFheXNDLEVBQVdxQyxFQUFZNTFCLElBQUsyMUIsRUFBYzMxQixLQUNuRTQxQixFQUFjVixJQUFRUSxHQUN0QkksRUFBZ0JYLElBQVFNLEtBR3BCMTlCLEVBQVFzOUIsS0FDUkEsRUFBYzVDLEdBQWtCeUMsRUFBT00sRUFBYUUsSUFJcEQzOUIsRUFISnU5QixFQUFXcjlCLEVBQU02OUIsRUFBY3ZoRCxLQUN6QjhnRCxFQUFZUyxFQUFjdmhELEtBQzFCMmhELEVBQWFKLEVBQWVaLEVBQU9NLEVBQWFFLElBR2xEckMsRUFBVXlDLEVBQWV4QyxFQUFvQkMsRUFBV29DLEVBQWMzMUIsS0FBSyxFQUFPbTFCLEVBQU9NLEdBSXJGcEQsR0FESmtELEVBQWNMLEVBQU1JLEdBQ09RLElBQ3ZCRyxFQUFXVixFQUFhTyxFQUFleEMsRUFBb0I2QixFQUFPTSxHQUNsRVAsRUFBTUksUUFBWXhsRCxFQUNsQmttRCxHQUNJeEUsRUFBUTFxQyxhQUFheXNDLEVBQVdnQyxFQUFZdjFCLElBQUsyMUIsRUFBYzMxQixNQUluRXF6QixFQUFVeUMsRUFBZXhDLEVBQW9CQyxFQUFXb0MsRUFBYzMxQixLQUFLLEVBQU9tMUIsRUFBT00sR0FHakdLLEVBQWdCWCxJQUFRTSxJQUc1QkQsRUFBY0UsRUFFZGpCLEVBQVVsQixFQUREeDdCLEVBQVFvOUIsRUFBTVUsRUFBWSxJQUFNLEtBQU9WLEVBQU1VLEVBQVksR0FBRzcxQixJQUN4Q20xQixFQUFPTSxFQUFhSSxFQUFXdkMsR0FFdkRtQyxFQUFjSSxHQUNuQmpCLEVBQWFNLEVBQU9NLEVBQWFFLEVBRXpDLENBQ0EsU0FBU3BCLEVBQW1CLzdDLEdBRXhCLElBREEsSUFBSTQ5QyxFQUFXLENBQUMsRUFDUEMsRUFBTSxFQUFHQSxFQUFNNzlDLEVBQVN0YSxPQUFRbTRELElBQU8sQ0FDNUMsSUFBSWgxQixFQUFRN29CLEVBQVM2OUMsR0FDakI3aEQsRUFBTTZzQixFQUFNN3NCLElBQ1owakIsRUFBTTFqQixLQUNGNGhELEVBQVM1aEQsR0FDVGl0QixHQU
3FPLDZCQUE2QjNoQixPQUFPdEwsRUFBSyxzQ0FBdUM2c0IsRUFBTW5CLFNBRzdGazJCLEVBQVM1aEQsSUFBTyxFQUc1QixDQUNKLENBQ0EsU0FBUzJoRCxFQUFhN29DLEVBQU02bkMsRUFBT2owRCxFQUFPQyxHQUN0QyxJQUFLLElBQUltMUQsRUFBTXAxRCxFQUFPbzFELEVBQU1uMUQsRUFBS20xRCxJQUFPLENBQ3BDLElBQUk1cEQsRUFBSXlvRCxFQUFNbUIsR0FDZCxHQUFJcCtCLEVBQU14ckIsSUFBTTRsRCxHQUFVaGxDLEVBQU01Z0IsR0FDNUIsT0FBTzRwRCxDQUNmLENBQ0osQ0FDQSxTQUFTSixFQUFXdk8sRUFBVXRtQixFQUFPa3lCLEVBQW9CSSxFQUFZMXlELEVBQU9vMEQsR0FDeEUsR0FBSTFOLElBQWF0bUIsRUFBakIsQ0FHSW5KLEVBQU1tSixFQUFNcEIsTUFBUS9ILEVBQU15N0IsS0FFMUJ0eUIsRUFBUXN5QixFQUFXMXlELEdBQVNtZ0MsR0FBV0MsSUFFM0MsSUFBSXBCLEVBQU9vQixFQUFNcEIsSUFBTTBuQixFQUFTMW5CLElBQ2hDLEdBQUk5SCxFQUFPd3ZCLEVBQVMxbUIsb0JBQ1ovSSxFQUFNbUosRUFBTWpCLGFBQWFnVixVQUN6Qm1oQixFQUFRNU8sRUFBUzFuQixJQUFLb0IsRUFBT2t5QixHQUc3Qmx5QixFQUFNSixvQkFBcUIsT0FRbkMsR0FBSTlJLEVBQU9rSixFQUFNVixXQUNieEksRUFBT3d2QixFQUFTaG5CLFdBQ2hCVSxFQUFNN3NCLE1BQVFtekMsRUFBU256QyxNQUN0QjJqQixFQUFPa0osRUFBTVAsV0FBYTNJLEVBQU9rSixFQUFNTixTQUN4Q00sRUFBTVosa0JBQW9Ca25CLEVBQVNsbkIsc0JBSnZDLENBT0EsSUFBSXA1QixFQUNBM0osRUFBTzJqQyxFQUFNM2pDLEtBQ2J3NkIsRUFBTXg2QixJQUFTdzZCLEVBQU83d0IsRUFBSTNKLEVBQUttc0IsT0FBVXFPLEVBQU83d0IsRUFBSUEsRUFBRW9nRCxXQUN0RHBnRCxFQUFFc2dELEVBQVV0bUIsR0FFaEIsSUFBSTh6QixFQUFReE4sRUFBU252QyxTQUNqQnM4QyxFQUFLenpCLEVBQU03b0IsU0FDZixHQUFJMGYsRUFBTXg2QixJQUFTeTJELEVBQVk5eUIsR0FBUSxDQUNuQyxJQUFLaDZCLEVBQUksRUFBR0EsRUFBSWl3QyxFQUFJajRDLE9BQU9uQixTQUFVbUosRUFDakNpd0MsRUFBSWo0QyxPQUFPZ0ksR0FBR3NnRCxFQUFVdG1CLEdBQ3hCbkosRUFBTzd3QixFQUFJM0osRUFBS21zQixPQUFVcU8sRUFBTzd3QixFQUFJQSxFQUFFaEksU0FDdkNnSSxFQUFFc2dELEVBQVV0bUIsRUFDcEIsQ0FDSXJKLEVBQVFxSixFQUFNM2dDLE1BQ1Z3M0IsRUFBTWk5QixJQUFVajlCLEVBQU00OEIsR0FDbEJLLElBQVVMLEdBQ1ZJLEVBQWVqMUIsRUFBS2sxQixFQUFPTCxFQUFJdkIsRUFBb0I4QixHQUVsRG45QixFQUFNNDhCLElBRVBQLEVBQW1CTyxHQUVuQjU4QixFQUFNeXZCLEVBQVNqbkQsT0FDZit3RCxFQUFRSCxlQUFlcnhCLEVBQUssSUFDaEN5MEIsRUFBVXowQixFQUFLLEtBQU02MEIsRUFBSSxFQUFHQSxFQUFHNTJELE9BQVMsRUFBR3ExRCxJQUV0Q3I3QixFQUFNaTlCLEdBQ1hOLEVBQWFNLEVBQU8sRUFBR0EsRUFBTWozRCxPQUFTLEdBRWpDZzZCLEVBQU15dkIsRUFBU2puRCxPQUNwQit3RCxFQUFRSCxlQUFlcnhCLEVBQUssSUFHM0IwbkIsRUFBU2puRCxPQUFTMmdDLEVBQU0zZ0MsTUFDN0Ird0QsRUFBUUgsZUFBZXJ4QixFQUFLb0IsRUFBTTNnQyxNQUVsQ3czQixFQUFNeDZCLElBQ0Z3NkIsRUFBTzd3QixFQUFJM0osRUFBS21zQixPQUFVcU8sRUFBTzd3QixFQUFJQSxFQUFFbXZELFlBQ3ZDbnZELEVBQUVzZ0QsRUFBVXRtQixFQXZDcEIsQ0F6QkEsQ0FrRUosQ0FDQSxTQUFTbzFCLEVBQWlCcDFCLEVBQU9zYSxFQUFPK2EsR0FHcEMsR0FBSXYrQixFQUFPdStCLElBQVl4K0IsRUFBTW1KLEVBQU12aEMsUUFDL0J1aEMsRUFBTXZoQyxPQUFPcEMsS0FBS3cyRCxjQUFnQnZZLE9BR2xDLElBQUssSUFBSWdiLEVBQU0sRUFBR0EsRUFBTWhiLEVBQU16OUMsU0FBVXk0RCxFQUNwQ2hiLEVBQU1nYixHQUFLajVELEtBQUttc0IsS0FBSys5QixPQUFPak0sRUFBTWdiLEdBRzlDLENBQ0EsSUFBSUMsR0FBa0IsRUFLbEJDLEVBQW1CejlCLEVBQVEsMkNBRS9CLFNBQVNtOUIsRUFBUXQyQixFQUFLb0IsRUFBT2t5QixFQUFvQkosR0FDN0MsSUFBSTlyRCxFQUNBb3FCLEVBQU00UCxFQUFNNVAsSUFBSy96QixFQUFPMmpDLEVBQU0zakMsS0FBTThhLEVBQVc2b0IsRUFBTTdvQixTQUd6RCxHQUZBMjZDLEVBQVNBLEdBQVd6MUQsR0FBUUEsRUFBS291QyxJQUNqQ3pLLEVBQU1wQixJQUFNQSxFQUNSOUgsRUFBT2tKLEVBQU1SLFlBQWMzSSxFQUFNbUosRUFBTWpCLGNBRXZDLE9BREFpQixFQUFNSixvQkFBcUIsR0FDcEIsRUFJUCxJQUFLNjFCLEVBQWdCNzJCLEVBQUtvQixFQUFPOHhCLEdBQzdCLE9BQU8sRUFHZixHQUFJajdCLEVBQU14NkIsS0FDRnc2QixFQUFPN3dCLEVBQUkzSixFQUFLbXNCLE9BQVVxTyxFQUFPN3dCLEVBQUlBLEVBQUUybEIsT0FDdkMzbEIsRUFBRWc2QixHQUFPLEdBQ1RuSixFQUFPN3dCLEVBQUlnNkIsRUFBTVosb0JBR2pCLE9BREF1ekIsRUFBYzN5QixFQUFPa3lCLElBQ2QsRUFHZixHQUFJcjdCLEVBQU16RyxHQUFNLENBQ1osR0FBSXlHLEVBQU0xZixHQUVOLEdBQUt5bkIsRUFBSTgyQixnQkFLTCxHQUFJNytCLEVBQU83d0IsRUFBSTNKLElBQ1h3NkIsRUFBTzd3QixFQUFJQSxFQUFFeW1DLFdBQ2I1VixFQUFPN3dCLEVBQUlBLEVBQUV5VCxZQUNiLEdBQUl6VCxJQUFNNDRCLEVBQUlubEIsVUFTVixNQVB1QixvQkFBWjVWLFNBQ04weEQsSUFDREEsR0FBa0IsRUFDbEIxeEQsUUFBUXFwQixLQUFLLFdBQVkwUixHQUN6Qi82QixRQUFRcXBCLEtBQUsscUJBQXNCbG5CLEdBQ25DbkMsUUFBUXFwQixLQUFLLHFCQUFzQjBSLEVBQUlubEIsYUFFcEMsTUFHVixDQUlELElBRkEsSUFBSWs4QyxHQUFnQixFQUNoQm5ILEVBQVk1dkIsRUFBSXhwQixXQUNYd2dELEVBQU0sRUFBR0EsRUFBTXorQyxFQUFTdGEsT0FBUSs0RCxJQUFPLENBQzVDLElBQUtwSCxJQUNBMEcsRUFBUTFHLEVBQVdyM0MsRUFBU3krQyxHQUFNMUQsRUFBb0JKLEdBQVMsQ0FDaEU2RCxHQUFnQixFQUNoQixLQUNKLENBQ0FuSCxFQUFZQSxFQUFVdmxDLFdBQzFCLENBR0EsSUFBSzBzQyxHQUFpQm5ILEVBUWxCLE1BTnVCLG9CQUFaM3FELFNBQ04weEQsSUFDREEsR0FBa0IsRUFDbEIxeEQsUUFBUXFwQixLQUFLLFdBQVkwUixHQUN6Qi82QixRQUFRcXBCLEtBQUssc0NBQXVDMFIsRUFBSWkzQixXQUFZMStDLEtBRWpFLENBRWYsTUEzQ0FxN0MsRUFBZXh5QixFQUFPN29CLEVBQVUrNkMsR0E4Q3hDLEdBQUlyN0IsRUFBTXg2QixHQUFPLENBQ2IsSUFBSXk1RCxHQUFhLEVBQ2pCLElBQUssSUFBSTNpRCxLQUFPOVcsRUFDWixJQUFLbTVELEVBQWlCcmlELEdBQU0sQ0FDeEIyaUQsR0FBYSxFQUNickQsRUFBa0J6eUIsRUFBT2t5QixHQUN6QixLQUNKLEVBRUM0RCxHQUFjejVELEVBQVksT0FFM0IwdUMsR0FBUzF1QyxFQUFZLE1BRTdCLENBQ0osTUFDU3VpQyxFQUFJdmlDLE9BQVMyakMsRUFBTTNnQyxPQUN4QnUvQixFQUFJdmlDLEtBQU8yakMsRUFBTTNnQyxNQUVyQixPQUFPLENBQ1gsQ0FDQSxTQUFTbzJELEVBQWdCeHBDLEVBQU0rVCxFQUFPOHhCLEdBQ2xDLE9BQUlqN0IsRU
3FBTW1KLEVBQU01UCxLQUNtQyxJQUF2QzRQLEVBQU01UCxJQUFJcGIsUUFBUSxtQkFDcEI0bUIsRUFBaUJvRSxFQUFPOHhCLElBQ3RCOXhCLEVBQU01UCxJQUFJdFIsaUJBQ0xtTixFQUFLeWpDLFNBQVd6akMsRUFBS3lqQyxRQUFRNXdDLGVBR25DbU4sRUFBS3BCLFlBQWNtVixFQUFNUixVQUFZLEVBQUksRUFFeEQsQ0FDQSxPQUFPLFNBQWU4bUIsRUFBVXRtQixFQUFPa1ksRUFBVzhiLEdBQzlDLElBQUlyOUIsRUFBUXFKLEdBQVosQ0FLQSxJQUFJKzFCLEdBQWlCLEVBQ2pCN0QsRUFBcUIsR0FDekIsR0FBSXY3QixFQUFRMnZCLEdBRVJ5UCxHQUFpQixFQUNqQjlELEVBQVVqeUIsRUFBT2t5QixPQUVoQixDQUNELElBQUk4RCxFQUFnQm4vQixFQUFNeXZCLEVBQVN6N0IsVUFDbkMsSUFBS21yQyxHQUFpQi9FLEdBQVUzSyxFQUFVdG1CLEdBRXRDNjBCLEVBQVd2TyxFQUFVdG1CLEVBQU9reUIsRUFBb0IsS0FBTSxLQUFNOEIsT0FFM0QsQ0FDRCxHQUFJZ0MsRUFBZSxDQVFmLEdBSjBCLElBQXRCMVAsRUFBU3o3QixVQUFrQnk3QixFQUFTMlAsYUFBYWw3QixLQUNqRHVyQixFQUFTam1DLGdCQUFnQjBhLEdBQ3pCbWQsR0FBWSxHQUVacGhCLEVBQU9vaEIsR0FBWSxDQUNuQixHQUFJZ2QsRUFBUTVPLEVBQVV0bUIsRUFBT2t5QixHQUV6QixPQURBa0QsRUFBaUJwMUIsRUFBT2t5QixHQUFvQixHQUNyQzVMLEVBR1BsbUIsR0FBTyx3UUFNZixDQUdBa21CLEVBQVdvTCxFQUFZcEwsRUFDM0IsQ0FFQSxJQUFJNFAsRUFBUzVQLEVBQVMxbkIsSUFDbEJ1ekIsRUFBWS9CLEVBQVFqN0MsV0FBVytnRCxHQVFuQyxHQU5BakUsRUFBVWp5QixFQUFPa3lCLEVBSWpCZ0UsRUFBT0MsU0FBVyxLQUFPaEUsRUFBVy9CLEVBQVFubkMsWUFBWWl0QyxJQUVwRHIvQixFQUFNbUosRUFBTXZoQyxRQUdaLElBRkEsSUFBSTIwRCxFQUFXcHpCLEVBQU12aEMsT0FDakIyM0QsRUFBWXRELEVBQVk5eUIsR0FDckJvekIsR0FBVSxDQUNiLElBQUssSUFBSWlELEVBQU0sRUFBR0EsRUFBTXBnQixFQUFJNXNDLFFBQVF4TSxTQUFVdzVELEVBQzFDcGdCLEVBQUk1c0MsUUFBUWd0RCxHQUFLakQsR0FHckIsR0FEQUEsRUFBU3gwQixJQUFNb0IsRUFBTXBCLElBQ2pCdzNCLEVBQVcsQ0FDWCxJQUFLLElBQUlFLEVBQU0sRUFBR0EsRUFBTXJnQixFQUFJN3JDLE9BQU92TixTQUFVeTVELEVBQ3pDcmdCLEVBQUk3ckMsT0FBT2tzRCxHQUFLdEYsR0FBV29DLEdBSy9CLElBQUltRCxFQUFXbkQsRUFBUy8yRCxLQUFLbXNCLEtBQUsrOUIsT0FDbEMsR0FBSWdRLEVBQVMxdEIsT0FLVCxJQURBLElBQUk1SSxFQUFTczJCLEVBQVN0dUIsSUFBSXYyQixNQUFNLEdBQ3ZCOGtELEVBQU8sRUFBR0EsRUFBT3YyQixFQUFPcGpDLE9BQVEyNUQsSUFDckN2MkIsRUFBT3UyQixJQUduQixNQUVJbkcsR0FBWStDLEdBRWhCQSxFQUFXQSxFQUFTMzBELE1BQ3hCLENBR0FvNEIsRUFBTXM3QixHQUNOcUIsRUFBYSxDQUFDbE4sR0FBVyxFQUFHLEdBRXZCenZCLEVBQU15dkIsRUFBU2wyQixNQUNwQm1qQyxFQUFrQmpOLEVBRTFCLENBQ0osQ0FFQSxPQURBOE8sRUFBaUJwMUIsRUFBT2t5QixFQUFvQjZELEdBQ3JDLzFCLEVBQU1wQixHQTVGYixDQUhRL0gsRUFBTXl2QixJQUNOaU4sRUFBa0JqTixFQStGOUIsQ0FDSixDQUVBLElBQUltUSxHQUFlLENBQ2Zyc0QsT0FBUXNzRCxHQUNSMTRELE9BQVEwNEQsR0FDUnJ0RCxRQUFTLFNBQTBCMjJCLEdBRS9CMDJCLEdBQWlCMTJCLEVBQU9neEIsR0FDNUIsR0FFSixTQUFTMEYsR0FBaUJwUSxFQUFVdG1CLElBQzVCc21CLEVBQVNqcUQsS0FBS2d0RCxZQUFjcnBCLEVBQU0zakMsS0FBS2d0RCxhQUN2Q3BSLEdBQVFxTyxFQUFVdG1CLEVBRTFCLENBQ0EsU0FBU2lZLEdBQVFxTyxFQUFVdG1CLEdBQ3ZCLElBTUk3c0IsRUFBS3dqRCxFQUFRQyxFQU5iQyxFQUFXdlEsSUFBYTBLLEdBQ3hCOEYsRUFBWTkyQixJQUFVZ3hCLEdBQ3RCK0YsRUFBVUMsR0FBb0IxUSxFQUFTanFELEtBQUtndEQsV0FBWS9DLEVBQVN6bkIsU0FDakVvNEIsRUFBVUQsR0FBb0JoM0IsRUFBTTNqQyxLQUFLZ3RELFdBQVlycEIsRUFBTW5CLFNBQzNEcTRCLEVBQWlCLEdBQ2pCQyxFQUFvQixHQUV4QixJQUFLaGtELEtBQU84akQsRUFDUk4sRUFBU0ksRUFBUTVqRCxHQUNqQnlqRCxFQUFNSyxFQUFROWpELEdBQ1R3akQsR0FTREMsRUFBSXB5QixTQUFXbXlCLEVBQU9wdEQsTUFDdEJxdEQsRUFBSVEsT0FBU1QsRUFBT1UsSUFDcEJDLEdBQVNWLEVBQUssU0FBVTUyQixFQUFPc21CLEdBQzNCc1EsRUFBSXg2QixLQUFPdzZCLEVBQUl4NkIsSUFBSW03QixrQkFDbkJKLEVBQWtCajBELEtBQUswekQsS0FYM0JVLEdBQVNWLEVBQUssT0FBUTUyQixFQUFPc21CLEdBQ3pCc1EsRUFBSXg2QixLQUFPdzZCLEVBQUl4NkIsSUFBSXVHLFVBQ25CdTBCLEVBQWVoMEQsS0FBSzB6RCxJQWFoQyxHQUFJTSxFQUFlcjZELE9BQVEsQ0FDdkIsSUFBSTI2RCxFQUFhLFdBQ2IsSUFBSyxJQUFJeHhELEVBQUksRUFBR0EsRUFBSWt4RCxFQUFlcjZELE9BQVFtSixJQUN2Q3N4RCxHQUFTSixFQUFlbHhELEdBQUksV0FBWWc2QixFQUFPc21CLEVBRXZELEVBQ0l1USxFQUNBcHVCLEdBQWV6SSxFQUFPLFNBQVV3M0IsR0FHaENBLEdBRVIsQ0FRQSxHQVBJTCxFQUFrQnQ2RCxRQUNsQjRyQyxHQUFlekksRUFBTyxhQUFhLFdBQy9CLElBQUssSUFBSWg2QixFQUFJLEVBQUdBLEVBQUlteEQsRUFBa0J0NkQsT0FBUW1KLElBQzFDc3hELEdBQVNILEVBQWtCbnhELEdBQUksbUJBQW9CZzZCLEVBQU9zbUIsRUFFbEUsS0FFQ3VRLEVBQ0QsSUFBSzFqRCxLQUFPNGpELEVBQ0hFLEVBQVE5akQsSUFFVG1rRCxHQUFTUCxFQUFRNWpELEdBQU0sU0FBVW16QyxFQUFVQSxFQUFVd1EsRUFJckUsQ0FDQSxJQUFJVyxHQUFpQjNyRCxPQUFPMUIsT0FBTyxNQUNuQyxTQUFTNHNELEdBQW9CNU4sRUFBTTdxQixHQUMvQixJQUtJdjRCLEVBQUc0d0QsRUFMSGg5QixFQUFNOXRCLE9BQU8xQixPQUFPLE1BQ3hCLElBQUtnL0MsRUFFRCxPQUFPeHZCLEVBR1gsSUFBSzV6QixFQUFJLEVBQUdBLEVBQUlvakQsRUFBS3ZzRCxPQUFRbUosSUFBSyxDQU85QixJQU5BNHdELEVBQU14TixFQUFLcGpELElBQ0YweEQsWUFFTGQsRUFBSWMsVUFBWUQsSUFFcEI3OUIsRUFBSSs5QixHQU
3FjZixJQUFRQSxFQUN0QnI0QixFQUFHa1MsYUFBZWxTLEVBQUdrUyxZQUFZQyxNQUFPLENBQ3hDLElBQUlrbkIsRUFBV2hCLEVBQUl4NkIsS0FBT3NPLEdBQWFuTSxFQUFJLGNBQWUsS0FBT3E0QixFQUFJNXlELE1BRWpFNHlELEVBQUl4NkIsSUFEZ0IsbUJBQWJ3N0IsRUFDRyxDQUNOenBELEtBQU15cEQsRUFDTjU1RCxPQUFRNDVELEdBSUZBLENBRWxCLENBQ0FoQixFQUFJeDZCLElBQU13NkIsRUFBSXg2QixLQUFPc08sR0FBYW5NLEVBQUdzQyxTQUFVLGFBQWMrMUIsRUFBSTV5RCxNQUFNLEVBQzNFLENBRUEsT0FBTzQxQixDQUNYLENBQ0EsU0FBUys5QixHQUFjZixHQUNuQixPQUFRQSxFQUFJaUIsU0FBVyxHQUFHcDVDLE9BQU9tNEMsRUFBSTV5RCxLQUFNLEtBQUt5YSxPQUFPM1MsT0FBT21uQixLQUFLMmpDLEVBQUljLFdBQWEsQ0FBQyxHQUFHcDhDLEtBQUssS0FDakcsQ0FDQSxTQUFTZzhDLEdBQVNWLEVBQUtwdUMsRUFBTXdYLEVBQU9zbUIsRUFBVXdRLEdBQzFDLElBQUk1b0QsRUFBSzBvRCxFQUFJeDZCLEtBQU93NkIsRUFBSXg2QixJQUFJNVQsR0FDNUIsR0FBSXRhLEVBQ0EsSUFDSUEsRUFBRzh4QixFQUFNcEIsSUFBS2c0QixFQUFLNTJCLEVBQU9zbUIsRUFBVXdRLEVBQ3hDLENBQ0EsTUFBTzU0RCxHQUNIbTFDLEdBQVluMUMsRUFBRzhoQyxFQUFNbkIsUUFBUyxhQUFhcGdCLE9BQU9tNEMsRUFBSTV5RCxLQUFNLEtBQUt5YSxPQUFPK0osRUFBTSxTQUNsRixDQUVSLENBRUEsSUFBSXN2QyxHQUFjLENBQUNqc0QsR0FBSzRxRCxJQUV4QixTQUFTc0IsR0FBWXpSLEVBQVV0bUIsR0FDM0IsSUFBSXhQLEVBQU93UCxFQUFNbEIsaUJBQ2pCLEtBQUlqSSxFQUFNckcsS0FBNEMsSUFBbkNBLEVBQUttTixLQUFLcHFCLFFBQVF5a0QsY0FHakNyaEMsRUFBUTJ2QixFQUFTanFELEtBQUt3NEIsUUFBVThCLEVBQVFxSixFQUFNM2pDLEtBQUt3NEIsUUFBdkQsQ0FHQSxJQUFJMWhCLEVBQUtvMUIsRUFDTDNKLEVBQU1vQixFQUFNcEIsSUFDWnE1QixFQUFXM1IsRUFBU2pxRCxLQUFLdzRCLE9BQVMsQ0FBQyxFQUNuQ0EsRUFBUW1MLEVBQU0zakMsS0FBS3c0QixPQUFTLENBQUMsRUFLakMsSUFBSzFoQixLQUhEMGpCLEVBQU1oQyxFQUFNZ08sU0FBVy9MLEVBQU9qQyxFQUFNcWpDLGtCQUNwQ3JqQyxFQUFRbUwsRUFBTTNqQyxLQUFLdzRCLE1BQVE0RSxFQUFPLENBQUMsRUFBRzVFLElBRTlCQSxFQUNSMFQsRUFBTTFULEVBQU0xaEIsR0FDTjhrRCxFQUFTOWtELEtBQ0hvMUIsR0FDUjR2QixHQUFRdjVCLEVBQUt6ckIsRUFBS28xQixFQUFLdkksRUFBTTNqQyxLQUFLb3VDLEtBUzFDLElBQUt0M0IsS0FIQTBwQixJQUFRRSxLQUFXbEksRUFBTXRyQixRQUFVMHVELEVBQVMxdUQsT0FDN0M0dUQsR0FBUXY1QixFQUFLLFFBQVMvSixFQUFNdHJCLE9BRXBCMHVELEVBQ0p0aEMsRUFBUTlCLEVBQU0xaEIsTUFDVms3QyxHQUFRbDdDLEdBQ1J5ckIsRUFBSXc1QixrQkFBa0JoSyxHQUFTRSxHQUFhbjdDLElBRXRDNDZDLEdBQWlCNTZDLElBQ3ZCeXJCLEVBQUl2ZSxnQkFBZ0JsTixHQTVCaEMsQ0FnQ0osQ0FDQSxTQUFTZ2xELEdBQVF6a0QsRUFBSVAsRUFBSzVKLEVBQU84dUQsR0FDekJBLEdBQVcza0QsRUFBR2c4QyxRQUFRMTZDLFFBQVEsTUFBUSxFQUN0Q3NqRCxHQUFZNWtELEVBQUlQLEVBQUs1SixHQUVoQjRrRCxHQUFjaDdDLEdBR2YrNkMsR0FBaUIza0QsR0FDakJtSyxFQUFHMk0sZ0JBQWdCbE4sSUFLbkI1SixFQUFnQixvQkFBUjRKLEdBQTRDLFVBQWZPLEVBQUdnOEMsUUFBc0IsT0FBU3Y4QyxFQUN2RU8sRUFBR3FDLGFBQWE1QyxFQUFLNUosSUFHcEJ3a0QsR0FBaUI1NkMsR0FDdEJPLEVBQUdxQyxhQUFhNUMsRUFBSzg2QyxHQUF1Qjk2QyxFQUFLNUosSUFFNUM4a0QsR0FBUWw3QyxHQUNUKzZDLEdBQWlCM2tELEdBQ2pCbUssRUFBRzBrRCxrQkFBa0JoSyxHQUFTRSxHQUFhbjdDLElBRzNDTyxFQUFHNmtELGVBQWVuSyxHQUFTajdDLEVBQUs1SixHQUlwQyt1RCxHQUFZNWtELEVBQUlQLEVBQUs1SixFQUU3QixDQUNBLFNBQVMrdUQsR0FBWTVrRCxFQUFJUCxFQUFLNUosR0FDMUIsR0FBSTJrRCxHQUFpQjNrRCxHQUNqQm1LLEVBQUcyTSxnQkFBZ0JsTixPQUVsQixDQUtELEdBQUkwcEIsS0FDQ0MsSUFDYyxhQUFmcHBCLEVBQUdnOEMsU0FDSyxnQkFBUnY4QyxHQUNVLEtBQVY1SixJQUNDbUssRUFBRzhrRCxPQUFRLENBQ1osSUFBSUMsRUFBWSxTQUFVdjZELEdBQ3RCQSxFQUFFdzZELDJCQUNGaGxELEVBQUdHLG9CQUFvQixRQUFTNGtELEVBQ3BDLEVBQ0Eva0QsRUFBR0MsaUJBQWlCLFFBQVM4a0QsR0FFN0Iva0QsRUFBRzhrRCxRQUFTLENBQ2hCLENBQ0E5a0QsRUFBR3FDLGFBQWE1QyxFQUFLNUosRUFDekIsQ0FDSixDQUNBLElBQUlzckIsR0FBUSxDQUNSenFCLE9BQVEydEQsR0FDUi81RCxPQUFRKzVELElBR1osU0FBU1ksR0FBWXJTLEVBQVV0bUIsR0FDM0IsSUFBSXRzQixFQUFLc3NCLEVBQU1wQixJQUNYdmlDLEVBQU8yakMsRUFBTTNqQyxLQUNidThELEVBQVV0UyxFQUFTanFELEtBQ3ZCLEtBQUlzNkIsRUFBUXQ2QixFQUFLc3lELGNBQ2JoNEIsRUFBUXQ2QixFQUFLMnVDLFNBQ1pyVSxFQUFRaWlDLElBQ0pqaUMsRUFBUWlpQyxFQUFRakssY0FBZ0JoNEIsRUFBUWlpQyxFQUFRNXRCLFNBSHpELENBTUEsSUFBSTZ0
3QixFQUFNdEssR0FBaUJ2dUIsR0FFdkI4NEIsRUFBa0JwbEQsRUFBR3FsRCxtQkFDckJsaUMsRUFBTWlpQyxLQUNORCxFQUFNcDZDLEdBQU9vNkMsRUFBS2hLLEdBQWVpSyxLQUdqQ0QsSUFBUW5sRCxFQUFHc2xELGFBQ1h0bEQsRUFBR3FDLGFBQWEsUUFBUzhpRCxHQUN6Qm5sRCxFQUFHc2xELFdBQWFILEVBVnBCLENBWUosQ0FDQSxJQXFWSXZnQyxHQUFLTixHQUFLaWhDLEdBQUtyNUQsR0FBT3M1RCxHQUFlQyxHQTRFckNDLEdBamFBQyxHQUFVLENBQ1ZqdkQsT0FBUXV1RCxHQUNSMzZELE9BQVEyNkQsSUFHUlcsR0FBc0IsZ0JBQzFCLFNBQVNDLEdBQWFDLEdBQ2xCLElBUUludUQsRUFBR2ttQyxFQUFNdnJDLEVBQUdvMUMsRUFBWXFlLEVBUnhCQyxHQUFXLEVBQ1hDLEdBQVcsRUFDWEMsR0FBbUIsRUFDbkJDLEdBQVUsRUFDVkMsRUFBUSxFQUNSQyxFQUFTLEVBQ1RDLEVBQVEsRUFDUkMsRUFBa0IsRUFFdEIsSUFBS2owRCxFQUFJLEVBQUdBLEVBQUl3ekQsRUFBSTM4RCxPQUFRbUosSUFHeEIsR0FGQXVyQyxFQUFPbG1DLEVBQ1BBLEVBQUltdUQsRUFBSXI5QixXQUFXbjJCLEdBQ2YwekQsRUFDVSxLQUFOcnVELEdBQXVCLEtBQVRrbUMsSUFDZG1vQixHQUFXLFFBRWQsR0FBSUMsRUFDSyxLQUFOdHVELEdBQXVCLEtBQVRrbUMsSUFDZG9vQixHQUFXLFFBRWQsR0FBSUMsRUFDSyxLQUFOdnVELEdBQXVCLEtBQVRrbUMsSUFDZHFvQixHQUFtQixRQUV0QixHQUFJQyxFQUNLLEtBQU54dUQsR0FBdUIsS0FBVGttQyxJQUNkc29CLEdBQVUsUUFFYixHQUFVLE1BQU54dUQsR0FDcUIsTUFBMUJtdUQsRUFBSXI5QixXQUFXbjJCLEVBQUksSUFDTyxNQUExQnd6RCxFQUFJcjlCLFdBQVduMkIsRUFBSSxJQUNsQjh6RCxHQUNBQyxHQUNBQyxFQVVBLENBQ0QsT0FBUTN1RCxHQUNKLEtBQUssR0FDRHN1RCxHQUFXLEVBQ1gsTUFDSixLQUFLLEdBQ0RELEdBQVcsRUFDWCxNQUNKLEtBQUssR0FDREUsR0FBbUIsRUFDbkIsTUFDSixLQUFLLEdBQ0RJLElBQ0EsTUFDSixLQUFLLEdBQ0RBLElBQ0EsTUFDSixLQUFLLEdBQ0RELElBQ0EsTUFDSixLQUFLLEdBQ0RBLElBQ0EsTUFDSixLQUFLLElBQ0RELElBQ0EsTUFDSixLQUFLLElBQ0RBLElBR1IsR0FBVSxLQUFOenVELEVBQVksQ0FPWixJQUxBLElBQUk0QixFQUFJakgsRUFBSSxFQUNSc0csT0FFRixFQUVLVyxHQUFLLEdBRUUsT0FEVlgsRUFBSWt0RCxFQUFJMzZDLE9BQU81UixJQURKQSxLQUtWWCxHQUFNZ3RELEdBQW9CbG1ELEtBQUs5RyxLQUNoQ3V0RCxHQUFVLEVBRWxCLENBQ0osV0F2RHVCbnJELElBQWYwc0MsR0FFQTZlLEVBQWtCajBELEVBQUksRUFDdEJvMUMsRUFBYW9lLEVBQUk5bkQsTUFBTSxFQUFHMUwsR0FBRzRvQixRQUc3QnNyQyxJQXlEWixTQUFTQSxLQUNKVCxJQUFZQSxFQUFVLEtBQUt2MkQsS0FBS3MyRCxFQUFJOW5ELE1BQU11b0QsRUFBaUJqMEQsR0FBRzRvQixRQUMvRHFyQyxFQUFrQmowRCxFQUFJLENBQzFCLENBQ0EsUUFWbUIwSSxJQUFmMHNDLEVBQ0FBLEVBQWFvZSxFQUFJOW5ELE1BQU0sRUFBRzFMLEdBQUc0b0IsT0FFSixJQUFwQnFyQyxHQUNMQyxJQU1BVCxFQUNBLElBQUt6ekQsRUFBSSxFQUFHQSxFQUFJeXpELEVBQVE1OEQsT0FBUW1KLElBQzVCbzFDLEVBQWErZSxHQUFXL2UsRUFBWXFlLEVBQVF6ekQsSUFHcEQsT0FBT28xQyxDQUNYLENBQ0EsU0FBUytlLEdBQVdYLEVBQUt0OEQsR0FDckIsSUFBSThJLEVBQUk5SSxFQUFPOFgsUUFBUSxLQUN2QixHQUFJaFAsRUFBSSxFQUVKLE1BQU8sT0FBUXlZLE9BQU92aEIsRUFBUSxPQUFRdWhCLE9BQU8rNkMsRUFBSyxLQUdsRCxJQUFJcnFCLEVBQVNqeUMsRUFBT3dVLE1BQU0sRUFBRzFMLEdBQ3pCMnNCLEVBQU96MUIsRUFBT3dVLE1BQU0xTCxFQUFJLEdBQzVCLE1BQU8sT0FBUXlZLE9BQU8wd0IsRUFBUSxPQUFRMXdCLE9BQU8rNkMsR0FBSy82QyxPQUFnQixNQUFUa1UsRUFBZSxJQUFNQSxFQUFPQSxFQUU3RixDQUdBLFNBQVN5bkMsR0FBUzFTLEVBQUs5OEMsR0FDbkIvRyxRQUFRcW9CLE1BQU0sbUJBQW1Cek4sT0FBT2lwQyxHQUM1QyxDQUVBLFNBQVMyUyxHQUFvQnBnQyxFQUFTOW1CLEdBQ2xDLE9BQU84bUIsRUFBVUEsRUFBUTk1QixLQUFJLFNBQVU4VyxHQUFLLE9BQU9BLEVBQUU5RCxFQUFNLElBQUdqVyxRQUFPLFNBQVUwb0IsR0FBSyxPQUFPQSxDQUFHLElBQUssRUFDdkcsQ0FDQSxTQUFTMDBDLEdBQVE1bUQsRUFBSTFQLEVBQU11RixFQUFPcUIsRUFBTzJ2RCxJQUNwQzdtRCxFQUFHdFgsUUFBVXNYLEVBQUd0WCxNQUFRLEtBQUs4RyxLQUFLczNELEdBQWEsQ0FBRXgyRCxLQUFNQSxFQUFNdUYsTUFBT0EsRUFBT2d4RCxRQUFTQSxHQUFXM3ZELElBQ2hHOEksRUFBRyttRCxPQUFRLENBQ2YsQ0FDQSxTQUFTQyxHQUFRaG5ELEVBQUkxUCxFQUFNdUYsRUFBT3FCLEVBQU8ydkQsSUFDekJBLEVBQ043bUQsRUFBR2luRCxlQUFpQmpuRCxFQUFHaW5ELGFBQWUsSUFDdENqbkQsRUFBR21oQixRQUFVbmhCLEVBQUdtaEIsTUFBUSxLQUN4QjN4QixLQUFLczNELEdBQWEsQ0FBRXgyRCxLQUFNQSxFQUFNdUYsTUFBT0EsRUFBT2d4RCxRQUFTQSxHQUFXM3ZELElBQ3hFOEksRUFBRyttRCxPQUFRLENBQ2YsQ0FFQSxTQUFTRyxHQUFXbG5ELEVBQUkxUCxFQUFNdUYsRUFBT3FCLEdBQ2pDOEksRUFBR21uRCxTQUFTNzJELEdBQVF1RixFQUNwQm1LLEVBQUdvbkQsVUFBVTUzRCxLQUFLczNELEdBQWEsQ0FBRXgyRCxLQUFNQSxFQUFNdUYsTUFBT0EsR0FBU3FCLEdBQ2pFLENBQ0EsU0FBU213RCxHQUFhcm5ELEVBQUkxUCxFQUFNNnpELEVBQVN0dUQsRUFBTzh0RCxFQUFLMkQsRUFBY3RELEVBQVc5c0QsSUFDekU4SSxFQUFHMjFDLGFBQWUzMUMsRUFBRzIxQyxXQUFhLEtB
3QUtubUQsS0FBS3MzRCxHQUFhLENBQ3REeDJELEtBQU1BLEVBQ042ekQsUUFBU0EsRUFDVHR1RCxNQUFPQSxFQUNQOHRELElBQUtBLEVBQ0wyRCxhQUFjQSxFQUNkdEQsVUFBV0EsR0FDWjlzRCxJQUNIOEksRUFBRyttRCxPQUFRLENBQ2YsQ0FDQSxTQUFTUSxHQUFzQmh0QixFQUFRanFDLEVBQU11MkQsR0FDekMsT0FBT0EsRUFBVSxNQUFNOTdDLE9BQU96YSxFQUFNLE1BQU95YSxPQUFPd3ZCLEVBQVEsTUFBU0EsRUFBU2pxQyxDQUNoRixDQUNBLFNBQVNrM0QsR0FBV3huRCxFQUFJMVAsRUFBTXVGLEVBQU9tdUQsRUFBV3lELEVBQVdqdUMsRUFBTXRpQixFQUFPMnZELEdBMENwRSxJQUFJdmxDLEVBekNKMGlDLEVBQVlBLEdBQWFsaEMsRUFHckJ0SixHQUFRd3FDLEVBQVUwRCxTQUFXMUQsRUFBVTN2QixTQUN2QzdhLEVBQUssMkZBQytDdGlCLEdBS3BEOHNELEVBQVV6MEMsTUFDTnMzQyxFQUNBdjJELEVBQU8sSUFBSXlhLE9BQU96YSxFQUFNLCtCQUErQnlhLE9BQU96YSxFQUFNLEtBRXRELFVBQVRBLElBQ0xBLEVBQU8scUJBQ0EwekQsRUFBVXowQyxPQUdoQnkwQyxFQUFVMkQsU0FDWGQsRUFDQXYyRCxFQUFPLElBQUl5YSxPQUFPemEsRUFBTSwyQkFBMkJ5YSxPQUFPemEsRUFBTSxLQUVsRCxVQUFUQSxJQUNMQSxFQUFPLFlBSVgwekQsRUFBVW5zQyxpQkFDSG1zQyxFQUFVbnNDLFFBQ2pCdm5CLEVBQU9pM0QsR0FBc0IsSUFBS2ozRCxFQUFNdTJELElBRXhDN0MsRUFBVTk4QixjQUNIODhCLEVBQVU5OEIsS0FDakI1MkIsRUFBT2kzRCxHQUFzQixJQUFLajNELEVBQU11MkQsSUFHeEM3QyxFQUFVM3ZCLGlCQUNIMnZCLEVBQVUzdkIsUUFD
3akIvakMsRUFBT2kzRCxHQUFzQixJQUFLajNELEVBQU11MkQsSUFHeEM3QyxFQUFVNEQsZUFDSDVELEVBQVU0RCxPQUNqQnRtQyxFQUFTdGhCLEVBQUc2bkQsZUFBaUI3bkQsRUFBRzZuRCxhQUFlLENBQUMsSUFHaER2bUMsRUFBU3RoQixFQUFHc2hCLFNBQVd0aEIsRUFBR3NoQixPQUFTLENBQUMsR0FFeEMsSUFBSXdtQyxFQUFhaEIsR0FBYSxDQUFFanhELE1BQU9BLEVBQU1xbEIsT0FBUTJyQyxRQUFTQSxHQUFXM3ZELEdBQ3JFOHNELElBQWNsaEMsSUFDZGdsQyxFQUFXOUQsVUFBWUEsR0FFM0IsSUFBSTUyQixFQUFXOUwsRUFBT2h4QixHQUVsQjhJLE1BQU00cEIsUUFBUW9LLEdBQ2RxNkIsRUFBWXI2QixFQUFTNTZCLFFBQVFzMUQsR0FBYzE2QixFQUFTNTlCLEtBQUtzNEQsR0FHekR4bUMsRUFBT2h4QixHQURGODhCLEVBQ1VxNkIsRUFBWSxDQUFDSyxFQUFZMTZCLEdBQVksQ0FBQ0EsRUFBVTA2QixHQUdoREEsRUFFbkI5bkQsRUFBRyttRCxPQUFRLENBQ2YsQ0FDQSxTQUFTZ0IsR0FBa0IvbkQsRUFBSTFQLEdBQzNCLE9BQVEwUCxFQUFHZ29ELFlBQVksSUFBTTEzRCxJQUN6QjBQLEVBQUdnb0QsWUFBWSxVQUFZMTNELElBQzNCMFAsRUFBR2dvRCxZQUFZMTNELEVBQ3ZCLENBQ0EsU0FBUzIzRCxHQUFlam9ELEVBQUkxUCxFQUFNNDNELEdBQzlCLElBQUlDLEVBQWVDLEdBQWlCcG9ELEVBQUksSUFBTTFQLElBQVM4M0QsR0FBaUJwb0QsRUFBSSxVQUFZMVAsR0FDeEYsR0FBb0IsTUFBaEI2M0QsRUFDQSxPQUFPdEMsR0FBYXNDLEdBRW5CLElBQWtCLElBQWRELEVBQXFCLENBQzFCLElBQUlHLEVBQWNELEdBQWlCcG9ELEVBQUkxUCxHQUN2QyxHQUFtQixNQUFmKzNELEVBQ0EsT0FBTzM2QyxLQUFLQyxVQUFVMDZDLEVBRTlCLENBQ0osQ0FLQSxTQUFTRCxHQUFpQnBvRCxFQUFJMVAsRUFBTWc0RCxHQUNoQyxJQUFJM3pDLEVBQ0osR0FBaUMsT0FBNUJBLEVBQU0zVSxFQUFHbW5ELFNBQVM3MkQsSUFFbkIsSUFEQSxJQUFJc0QsRUFBT29NLEVBQUdvbkQsVUFDTDkwRCxFQUFJLEVBQUc4YSxFQUFJeFosRUFBS3pLLE9BQVFtSixFQUFJOGEsRUFBRzlhLElBQ3BDLEdBQUlzQixFQUFLdEIsR0FBR2hDLE9BQVNBLEVBQU0sQ0FDdkJzRCxFQUFLK1QsT0FBT3JWLEVBQUcsR0FDZixLQUNKLENBTVIsT0FISWcyRCxVQUNPdG9ELEVBQUdtbkQsU0FBUzcyRCxHQUVoQnFrQixDQUNYLENBQ0EsU0FBUzR6QyxHQUF3QnZvRCxFQUFJMVAsR0FFakMsSUFEQSxJQUFJc0QsRUFBT29NLEVBQUdvbkQsVUFDTDkwRCxFQUFJLEVBQUc4YSxFQUFJeFosRUFBS3pLLE9BQVFtSixFQUFJOGEsRUFBRzlhLElBQUssQ0FDekMsSUFBSThuRCxFQUFPeG1ELEVBQUt0QixHQUNoQixHQUFJaEMsRUFBS29QLEtBQUswNkMsRUFBSzlwRCxNQUVmLE9BREFzRCxFQUFLK1QsT0FBT3JWLEVBQUcsR0FDUjhuRCxDQUVmLENBQ0osQ0FDQSxTQUFTME0sR0FBYW5pQyxFQUFNenRCLEdBU3hCLE9BUklBLElBQ21CLE1BQWZBLEVBQU0vSyxRQUNOdzRCLEVBQUt4NEIsTUFBUStLLEVBQU0vSyxPQUVOLE1BQWIrSyxFQUFNOUssTUFDTnU0QixFQUFLdjRCLElBQU04SyxFQUFNOUssTUFHbEJ1NEIsQ0FDWCxDQUtBLFNBQVM2akMsR0FBa0J4b0QsRUFBSW5LLEVBQU9tdUQsR0FDbEMsSUFBSTdwRCxFQUFLNnBELEdBQWEsQ0FBQyxFQUFHbGxDLEVBQVMza0IsRUFBRzJrQixPQUNsQzJwQyxFQUFzQixNQUN0QkMsRUFBa0JELEVBRitCdHVELEVBQUcrZ0IsT0FJcER3dEMsRUFDSSxXQUFXMzlDLE9BQU8wOUMsRUFBcUIsaUJBQ25DLEtBQUsxOUMsT0FBTzA5QyxFQUFxQixXQUNqQyxLQUFLMTlDLE9BQU8wOUMsRUFBcUIsTUFFekMzcEMsSUFDQTRwQyxFQUFrQixNQUFNMzlDLE9BQU8yOUMsRUFBaUIsTUFFcEQsSUFBSUMsRUFBYUMsR0FBa0IveUQsRUFBTzZ5RCxHQUMxQzFvRCxFQUFHaXpDLE1BQVEsQ0FDUHA5QyxNQUFPLElBQUlrVixPQUFPbFYsRUFBTyxLQUN6QjZ4QyxXQUFZaDZCLEtBQUtDLFVBQVU5WCxHQUMzQjg5QyxTQUFVLGFBQWE1b0MsT0FBTzA5QyxFQUFxQixPQUFPMTlDLE9BQU80OUMsRUFBWSxLQUVyRixDQUlBLFNBQVNDLEdBQWtCL3lELEVBQU84eUQsR0FDOUIsSUFBSXppQyxFQUFNMmlDLEdBQVdoekQsR0FDckIsT0FBZ0IsT0FBWnF3QixFQUFJem1CLElBQ0csR0FBR3NMLE9BQU9sVixFQUFPLEtBQUtrVixPQUFPNDlDLEdBRzdCLFFBQVE1OUMsT0FBT21iLEVBQUk0L0IsSUFBSyxNQUFNLzZDLE9BQU9tYixFQUFJem1CLElBQUssTUFBTXNMLE9BQU80OUMsRUFBWSxJQUV0RixDQWdCQSxTQUFTRSxHQUFXbDBDLEdBS2hCLEdBRkFBLEVBQU1BLEVBQUl1RyxPQUNWMEosR0FBTWpRLEVBQUl4ckIsT0FDTndyQixFQUFJclQsUUFBUSxLQUFPLEdBQUtxVCxFQUFJbTBDLFlBQVksS0FBT2xrQyxHQUFNLEVBRXJELE9BREExNEIsR0FBUXlvQixFQUFJbTBDLFlBQVksT0FDWCxFQUNGLENBQ0hoRCxJQUFLbnhDLEVBQUkzVyxNQUFNLEVBQUc5UixJQUNsQnVULElBQUssSUFBTWtWLEVBQUkzVyxNQUFNOVIsR0FBUSxHQUFLLEtBSS9CLENBQ0g0NUQsSUFBS254QyxFQUNMbFYsSUFBSyxNQU1qQixJQUZBNmtCLEdBQU0zUCxFQUNOem9CLEdBQVFzNUQsR0FBZ0JDLEdBQW1CLEdBQ25Dc0QsTUFHQUMsR0FGSnpELEdBQU05dEIsTUFHRnd4QixHQUFZMUQsSUFFQyxLQUFSQSxJQUNMMkQsR0FBYTNELElBR3JCLE1BQU8sQ0FDSE8sSUFBS254QyxFQUFJM1csTUFBTSxFQUFHd25ELElBQ2xCL2xELElBQUtrVixFQUFJM1csTUFBTXduRCxHQUFnQixFQUFHQyxJQUUxQyxDQUNBLFNBQVNodUIsS0FDTCxPQUFPblQsR0FBSW1FLGFBQWF2OEIsR0FDNUIsQ0FDQSxTQUFTNjhELEtBQ0wsT0FBTzc4RCxJQUFTMDRCLEVBQ3BCLENBQ0EsU0FBU29rQyxHQUFjekQsR0FDbkIsT0FBZSxLQUFSQSxHQUF3QixLQUFSQSxDQUMzQixDQUNBLFNBQVMyRCxHQUFhM0QsR0FDbEIsSUFBSTRELEVBQVksRUFFaEIsSUFEQTNELEdBQWdCdDVELElBQ1I2OEQsTUFFSixHQUFJQyxHQURKekQsRUFBTTl0QixNQUVGd3hCLEdBQVkxRCxRQU9oQixHQUpZLEtBQVJBLEdBQ0E0RCxJQUNRLEtBQVI1RCxHQUNBNEQsSUFDYyxJQUFkQSxFQUFpQixDQUNqQjFELEdBQW1CdjVELEdBQ25CLEtBQ0osQ0FFUixDQUNBLFNBQVMrOEQsR0FBWTFELEdBRWpCLElBREEsSUFBSTZELEVBQWM3RCxHQUNWd0QsT0FDSnhELEVBQU05dEIsUUFDTTJ4QixJQUlwQixDQUtBLElBMklJeCtELEd
3BM0lBeStELEdBQWMsTUFDZEMsR0FBdUIsTUFDM0IsU0FBU0MsR0FBUXZwRCxFQUFJa2pELEVBQUtzRyxHQUN0QjlELEdBQVM4RCxFQUNULElBQUkzekQsRUFBUXF0RCxFQUFJcnRELE1BQ1ptdUQsRUFBWWQsRUFBSWMsVUFDaEJ0bkMsRUFBTTFjLEVBQUcwYyxJQUNUdG1CLEVBQU80SixFQUFHbW5ELFNBQVMvd0QsS0FTdkIsR0FMZ0IsVUFBUnNtQixHQUE0QixTQUFUdG1CLEdBQ25Cc3ZELEdBQU8sSUFBSTM2QyxPQUFPL0ssRUFBRzBjLElBQUssY0FBZTNSLE9BQU9sVixFQUFPLHFCQUNuRCxpRUFBa0VtSyxFQUFHZ29ELFlBQVksWUFHekZob0QsRUFBR2loQixVQUdILE9BRkF1bkMsR0FBa0J4b0QsRUFBSW5LLEVBQU9tdUQsSUFFdEIsRUFFTixHQUFZLFdBQVJ0bkMsRUFDTCtzQyxHQUFVenBELEVBQUluSyxFQUFPbXVELFFBRXBCLEdBQVksVUFBUnRuQyxHQUE0QixhQUFUdG1CLEVBQ3hCc3pELEdBQWlCMXBELEVBQUluSyxFQUFPbXVELFFBRTNCLEdBQVksVUFBUnRuQyxHQUE0QixVQUFUdG1CLEVBQ3hCdXpELEdBQWMzcEQsRUFBSW5LLEVBQU9tdUQsUUFFeEIsR0FBWSxVQUFSdG5DLEdBQTJCLGFBQVJBLEVBQ3hCa3RDLEdBQWdCNXBELEVBQUluSyxFQUFPbXVELE9BRTFCLEtBQUtscUQsRUFBT2t1QixjQUFjdEwsR0FHM0IsT0FGQThyQyxHQUFrQnhvRCxFQUFJbkssRUFBT211RCxJQUV0QixFQUdQMEIsR0FBTyxJQUFJMzZDLE9BQU8vSyxFQUFHMGMsSUFBSyxjQUFlM1IsT0FBT2xWLEVBQU8sUUFBaEQsbUxBR3FFbUssRUFBR2dvRCxZQUFZLFdBQy9GLENBRUEsT0FBTyxDQUNYLENBQ0EsU0FBUzBCLEdBQWlCMXBELEVBQUluSyxFQUFPbXVELEdBQ2pDLElBQUlsbEMsRUFBU2tsQyxHQUFhQSxFQUFVbGxDLE9BQ2hDK3FDLEVBQWU1QixHQUFlam9ELEVBQUksVUFBWSxPQUM5QzhwRCxFQUFtQjdCLEdBQWVqb0QsRUFBSSxlQUFpQixPQUN2RCtwRCxFQUFvQjlCLEdBQWVqb0QsRUFBSSxnQkFBa0IsUUFDN0Q0bUQsR0FBUTVtRCxFQUFJLFVBQVcsaUJBQWlCK0ssT0FBT2xWLEVBQU8sS0FDbEQsT0FBT2tWLE9BQU9sVixFQUFPLEtBQUtrVixPQUFPOCtDLEVBQWMsU0FDekIsU0FBckJDLEVBQ0ssS0FBSy8rQyxPQUFPbFYsRUFBTyxLQUNuQixPQUFPa1YsT0FBT2xWLEVBQU8sS0FBS2tWLE9BQU8rK0MsRUFBa0IsT0FDN0R0QyxHQUFXeG5ELEVBQUksU0FBVSxXQUFXK0ssT0FBT2xWLEVBQU8sS0FDOUMsc0JBQ0EscUJBQXFCa1YsT0FBTysrQyxFQUFrQixPQUFPLytDLE9BQU9nL0MsRUFBbUIsTUFDL0UsMEJBQ0EsV0FBV2gvQyxPQUFPK1QsRUFBUyxNQUFRK3FDLEVBQWUsSUFBTUEsRUFBYyxLQUN0RSxtQkFDQSw0QkFBNEI5K0MsT0FBTzY5QyxHQUFrQi95RCxFQUFPLHFCQUFzQixNQUNsRixpQkFBaUJrVixPQUFPNjlDLEdBQWtCL3lELEVBQU8sNkNBQThDLE1BQy9GLFNBQVNrVixPQUFPNjlDLEdBQWtCL3lELEVBQU8sT0FBUSxLQUFNLE1BQU0sRUFDckUsQ0FDQSxTQUFTOHpELEdBQWMzcEQsRUFBSW5LLEVBQU9tdUQsR0FDOUIsSUFBSWxsQyxFQUFTa2xDLEdBQWFBLEVBQVVsbEMsT0FDaEMrcUMsRUFBZTVCLEdBQWVqb0QsRUFBSSxVQUFZLE9BQ2xENnBELEVBQWUvcUMsRUFBUyxNQUFNL1QsT0FBTzgrQyxFQUFjLEtBQU9BLEVBQzFEakQsR0FBUTVtRCxFQUFJLFVBQVcsTUFBTStLLE9BQU9sVixFQUFPLEtBQUtrVixPQUFPOCtDLEVBQWMsTUFDckVyQyxHQUFXeG5ELEVBQUksU0FBVTRvRCxHQUFrQi95RCxFQUFPZzBELEdBQWUsTUFBTSxFQUMzRSxDQUNBLFNBQVNKLEdBQVV6cEQsRUFBSW5LLEVBQU9tdUQsR0FDMUIsSUFBSWxsQyxFQUFTa2xDLEdBQWFBLEVBQVVsbEMsT0FDaENrckMsRUFBYyxrSkFHZCxVQUFVai9DLE9BQU8rVCxFQUFTLFVBQVksTUFBTyxNQUM3QzZwQyxFQUFhLDREQUNic0IsRUFBTyx1QkFBdUJsL0MsT0FBT2kvQyxFQUFhLEtBRXREeEMsR0FBV3huRCxFQUFJLFNBRGZpcUQsRUFBTyxHQUFHbC9DLE9BQU9rL0MsRUFBTSxLQUFLbC9DLE9BQU82OUMsR0FBa0IveUQsRUFBTzh5RCxJQUM3QixNQUFNLEVBQ3pDLENBQ0EsU0FBU2lCLEdBQWdCNXBELEVBQUluSyxFQUFPbXVELEdBQ2hDLElBQUk1dEQsRUFBTzRKLEVBQUdtbkQsU0FBUy93RCxLQUlmOHpELEVBQVVscUQsRUFBR21uRCxTQUFTLGlCQUFtQm5uRCxFQUFHbW5ELFNBQVMsVUFDckRnRCxFQUFjbnFELEVBQUdtbkQsU0FBUyxnQkFBa0JubkQsRUFBR21uRCxTQUFTLFNBQzVELEdBQUkrQyxJQUFZQyxFQUFhLENBQ3pCLElBQUlDLEVBQVVwcUQsRUFBR21uRCxTQUFTLGdCQUFrQixlQUFpQixTQUM3RHpCLEdBQU8sR0FBRzM2QyxPQUFPcS9DLEVBQVMsTUFBT3IvQyxPQUFPbS9DLEVBQVMsaURBQzdDLG1FQUFvRWxxRCxFQUFHZ29ELFlBQVlvQyxHQUMzRixDQUVKLElBQUlqd0QsRUFBSzZwRCxHQUFhLENBQUMsRUFBR3B3QixFQUFPejVCLEVBQUd5NUIsS0FBTTlVLEVBQVMza0IsRUFBRzJrQixPQUFRNUQsRUFBTy9nQixFQUFHK2dCLEtBQ3BFbXZDLEdBQXdCejJCLEdBQWlCLFVBQVR4OUIsRUFDaENtSixFQUFRcTBCLEVBQU8sU0FBb0IsVUFBVHg5QixFQUFtQml6RCxHQUFjLFFBQzNEWCxFQUFrQixzQkFDbEJ4dEMsSUFDQXd0QyxFQUFrQiw4QkFFbEI1cEMsSUFDQTRwQyxFQUFrQixNQUFNMzlDLE9BQU8yOUMsRUFBaUIsTUFFcEQsSUFBSXVCLEVBQU9yQixHQUFrQi95RCxFQUFPNnlELEdBQ2hDMkIsSUFDQUosRUFBTyxxQ0FBcUNsL0MsT0FBT2svQyxJQUV2RHJELEdBQVE1bUQsRUFBSSxRQUFTLElBQUkrSyxPQUFPbFYsRUFBTyxNQUN2QzJ4RCxHQUFXeG5ELEVBQUlULEVBQU8wcUQsRUFBTSxNQUFNLElBQzlCL3VDLEdBQVE0RCxJQUNSMG9DLEdBQVd4bkQsRUFBSSxPQUFRLGlCQUUvQixDQU1BLFNBQVNzcUQsR0FBZ0J4Z0UsR0FFckIsR0FBSXE1QixFQUFNcjVCLEVBQUd1L0QsS0FBZSxDQUV4QixJQUFJa0IsRUFBVXBoQyxHQUFPLFNBQVcsUUFDaENyL0IsRUFBR3lnRSxHQUFXLEdBQUd4L0MsT0FBT2poQixFQUFHdS9ELElBQWN2L0QsRUFBR3lnRSxJQUFZLFdBQ2pEemdFLEVBQUd1L0QsR0FDZCxDQUlJbG1DLEVBQU1yNUIsRUFBR3cvRCxPQUNUeC9ELEVBQUcwZ0UsT0FBUyxHQUFHei9DLE9BQU9qaEIsRUFBR3cvRCxJQUF1QngvRCxFQUFHMGdFLFFBQVUsV0FDdEQxZ0UsRUFBR3cvRCxJQUVsQixDQUVBLFNBQVMxMEIsR0FBa0JyMUIsRUFBT0ssRUFBU2lZLEdBQ3ZDLElBQUlrcUIsRUFBVW4zQyxHQUNkLE9BQU8sU0FBU28zQyxJQUVBLE9BREZwaUMsRUFBUTVHLE1BQU0sS0FBTUwsWUFFMUIvSSxHQU
3FPMlAsRUFBT3lpQyxFQUFhbnFCLEVBQVNrcUIsRUFFNUMsQ0FDSixDQUlBLElBQUkwb0IsR0FBa0IxZ0IsTUFBc0J2Z0IsSUFBUXQvQixPQUFPcy9CLEdBQUssS0FBTyxJQUN2RSxTQUFTOTRCLEdBQUlKLEVBQU1zUCxFQUFTaVksRUFBU3djLEdBT2pDLEdBQUlvMkIsR0FBaUIsQ0FDakIsSUFBSUMsRUFBc0J2akIsR0FDdEJ3akIsRUFBYS9xRCxFQUVqQkEsRUFBVStxRCxFQUFXQyxTQUFXLFNBQVVwZ0UsR0FDdEMsR0FJQUEsRUFBRUksU0FBV0osRUFBRXFnRSxlQUVYcmdFLEVBQUU4OEMsV0FBYW9qQixHQUlmbGdFLEVBQUU4OEMsV0FBYSxHQUlmOThDLEVBQUVJLE9BQU9rZ0UsZ0JBQWtCeDBELFNBQzNCLE9BQU9xMEQsRUFBVzN4RCxNQUFNalEsS0FBTTRQLFVBRXRDLENBQ0osQ0FDQS9OLEdBQU9xVixpQkFBaUIzUCxFQUFNc1AsRUFBUzhwQixHQUFrQixDQUFFN1IsUUFBU0EsRUFBU3djLFFBQVNBLEdBQVl4YyxFQUN0RyxDQUNBLFNBQVNqb0IsR0FBT1UsRUFBTXNQLEVBQVNpWSxFQUFTa3FCLElBQ25DQSxHQUFXbjNDLElBQVF1VixvQkFBb0I3UCxFQUV4Q3NQLEVBQVFnckQsVUFBWWhyRCxFQUFTaVksRUFDakMsQ0FDQSxTQUFTa3pDLEdBQW1CblksRUFBVXRtQixHQUNsQyxJQUFJckosRUFBUTJ2QixFQUFTanFELEtBQUttQixNQUFPbTVCLEVBQVFxSixFQUFNM2pDLEtBQUttQixJQUFwRCxDQUdBLElBQUlBLEVBQUt3aUMsRUFBTTNqQyxLQUFLbUIsSUFBTSxDQUFDLEVBQ3ZCNnFDLEVBQVFpZSxFQUFTanFELEtBQUttQixJQUFNLENBQUMsRUFHakNjLEdBQVMwaEMsRUFBTXBCLEtBQU8wbkIsRUFBUzFuQixJQUMvQm8vQixHQUFnQnhnRSxHQUNoQjRxQyxHQUFnQjVxQyxFQUFJNnFDLEVBQU9qa0MsR0FBS2QsR0FBUWdsQyxHQUFtQnRJLEVBQU1uQixTQUNqRXZnQyxRQUFTb1EsQ0FSVCxDQVNKLENBQ0EsSUFPSWd3RCxHQVBBMXBDLEdBQVMsQ0FDVDVxQixPQUFRcTBELEdBQ1J6Z0UsT0FBUXlnRSxHQUVScDFELFFBQVMsU0FBVTIyQixHQUFTLE9BQU95K0IsR0FBbUJ6K0IsRUFBT2d4QixHQUFZLEdBSTdFLFNBQVMyTixHQUFlclksRUFBVXRtQixHQUM5QixJQUFJckosRUFBUTJ2QixFQUFTanFELEtBQUtvd0MsWUFBYTlWLEVBQVFxSixFQUFNM2pDLEtBQUtvd0MsVUFBMUQsQ0FHQSxJQUFJdDVCLEVBQUtvMUIsRUFDTDNKLEVBQU1vQixFQUFNcEIsSUFDWmdnQyxFQUFXdFksRUFBU2pxRCxLQUFLb3dDLFVBQVksQ0FBQyxFQUN0Q3J3QyxFQUFRNGpDLEVBQU0zakMsS0FBS293QyxVQUFZLENBQUMsRUFLcEMsSUFBS3Q1QixLQUhEMGpCLEVBQU16NkIsRUFBTXltQyxTQUFXL0wsRUFBTzE2QixFQUFNODdELGtCQUNwQzk3RCxFQUFRNGpDLEVBQU0zakMsS0FBS293QyxTQUFXaFQsRUFBTyxDQUFDLEVBQUdyOUIsSUFFakN3aUUsRUFDRnpyRCxLQUFPL1csSUFDVHdpQyxFQUFJenJCLEdBQU8sSUFHbkIsSUFBS0EsS0FBTy9XLEVBQU8sQ0FLZixHQUpBbXNDLEVBQU1uc0MsRUFBTStXLEdBSUEsZ0JBQVJBLEdBQWlDLGNBQVJBLEVBQXFCLENBRzlDLEdBRkk2c0IsRUFBTTdvQixXQUNONm9CLEVBQU03b0IsU0FBU3RhLE9BQVMsR0FDeEIwckMsSUFBUXEyQixFQUFTenJELEdBQ2pCLFNBRzBCLElBQTFCeXJCLEVBQUlpM0IsV0FBV2g1RCxRQUNmK2hDLEVBQUlyWixZQUFZcVosRUFBSWkzQixXQUFXLEdBRXZDLENBQ0EsR0FBWSxVQUFSMWlELEdBQW1DLGFBQWhCeXJCLEVBQUk4d0IsUUFBd0IsQ0FHL0M5d0IsRUFBSWlnQyxPQUFTdDJCLEVBRWIsSUFBSXUyQixFQUFTbm9DLEVBQVE0UixHQUFPLEdBQUtyZCxPQUFPcWQsR0FDcEN3MkIsR0FBa0JuZ0MsRUFBS2tnQyxLQUN2QmxnQyxFQUFJcjFCLE1BQVF1MUQsRUFFcEIsTUFDSyxHQUFZLGNBQVIzckQsR0FDTGk4QyxHQUFNeHdCLEVBQUk4d0IsVUFDVi80QixFQUFRaUksRUFBSW5sQixXQUFZLEVBRXhCaWxELEdBQWVBLElBQWdCMTBELFNBQVM0TCxjQUFjLFFBQ3pDNkQsVUFBWSxRQUFRZ0YsT0FBTzhwQixFQUFLLFVBRTdDLElBREEsSUFBSXZtQyxFQUFNMDhELEdBQWF0cEQsV0FDaEJ3cEIsRUFBSXhwQixZQUNQd3BCLEVBQUlyWixZQUFZcVosRUFBSXhwQixZQUV4QixLQUFPcFQsRUFBSW9ULFlBQ1B3cEIsRUFBSTlsQixZQUFZOVcsRUFBSW9ULFdBRTVCLE1BQ0ssR0FLTG16QixJQUFRcTJCLEVBQVN6ckQsR0FHYixJQUNJeXJCLEVBQUl6ckIsR0FBT28xQixDQUNmLENBQ0EsTUFBT3JxQyxHQUFLLENBRXBCLENBbkVBLENBb0VKLENBQ0EsU0FBUzZnRSxHQUFrQm5nQyxFQUFLb2dDLEdBQzVCLE9BRUNwZ0MsRUFBSXFnQyxZQUNnQixXQUFoQnJnQyxFQUFJOHdCLFNBQ0R3UCxHQUFxQnRnQyxFQUFLb2dDLElBQzFCRyxHQUFxQnZnQyxFQUFLb2dDLEdBQ3RDLENBQ0EsU0FBU0UsR0FBcUJ0Z0MsRUFBS29nQyxHQUcvQixJQUFJSSxHQUFhLEVBR2pCLElBQ0lBLEVBQWFwMUQsU0FBU2dFLGdCQUFrQjR3QixDQUM1QyxDQUNBLE1BQU8xZ0MsR0FBSyxDQUNaLE9BQU9raEUsR0FBY3hnQyxFQUFJcjFCLFFBQVV5MUQsQ0FDdkMsQ0FDQSxTQUFTRyxHQUFxQnZnQyxFQUFLMkYsR0FDL0IsSUFBSWg3QixFQUFRcTFCLEVBQUlyMUIsTUFDWm11RCxFQUFZOTRCLEVBQUl5Z0MsWUFDcEIsR0FBSXhvQyxFQUFNNmdDLEdBQVksQ0FDbEIsR0FBSUEsRUFBVWxsQyxPQUNWLE9BQU9zRixFQUFTdnVCLEtBQVd1dUIsRUFBU3lNLEdBRXhDLEdBQUltekIsRUFBVTlvQyxLQUNWLE9BQU9ybEIsRUFBTXFsQixTQUFXMlYsRUFBTzNWLE1BRXZDLENBQ0EsT0FBT3JsQixJQUFVZzdCLENBQ3JCLENBQ0EsSUFBSWtJLEdBQVcsQ0FDWHJpQyxPQUFRdTBELEdBQ1IzZ0UsT0FBUTJnRSxJQUdSVyxHQUFpQjltQyxHQUFPLFNBQVUrbUMsR0FDbEMsSUFBSTNsQyxFQUFNLENBQUMsRUFDUDRsQyxFQUFnQixnQkFDaEJDLEVBQW9CLFFBT3hCLE9BTkFGLEVBQVF6MEQsTUFBTTAwRCxHQUFlaHNELFNBQVEsU0FBVTZrQixHQUMzQyxHQUFJQSxFQUFNLENBQ04sSUFBSXNwQixFQUFNdHBCLEVBQUt2dEIsTUFBTTIwRCxHQUNyQjlkLEVBQUk5a0QsT0FBUyxJQUFNKzhCLEVBQUkrbkIsRUFBSSxHQUFHL3lCLFFBQVUreUIsRUFBSSxHQUFHL3lCLE9BQ25ELENBQ0osSUFDT2dMLENBQ1gsSUFFQSxTQUFTOGxDLEdBQW1CcmpFLEdBQ3hCLElBQUlzUyxFQUFRZ3hELEdBQXNCdGpFLEVBQUtzUyxPQUd2QyxPQUFPdFMsRUFBS3VqRSxZQU
3Fjbm1DLEVBQU9wOUIsRUFBS3VqRSxZQUFhanhELEdBQVNBLENBQ2hFLENBRUEsU0FBU2d4RCxHQUFzQkUsR0FDM0IsT0FBSS95RCxNQUFNNHBCLFFBQVFtcEMsR0FDUGxtQyxFQUFTa21DLEdBRVEsaUJBQWpCQSxFQUNBUCxHQUFlTyxHQUVuQkEsQ0FDWCxDQUtBLFNBQVNDLEdBQVM5L0IsRUFBTysvQixHQUNyQixJQUNJQyxFQURBcG1DLEVBQU0sQ0FBQyxFQUVYLEdBQUltbUMsRUFFQSxJQURBLElBQUl2UixFQUFZeHVCLEVBQ1R3dUIsRUFBVXB2QixvQkFDYm92QixFQUFZQSxFQUFVcHZCLGtCQUFrQitTLFNBRXBDcWMsRUFBVW55RCxPQUNUMmpFLEVBQVlOLEdBQW1CbFIsRUFBVW55RCxRQUMxQ285QixFQUFPRyxFQUFLb21DLElBSW5CQSxFQUFZTixHQUFtQjEvQixFQUFNM2pDLFFBQ3RDbzlCLEVBQU9HLEVBQUtvbUMsR0FJaEIsSUFGQSxJQUFJN3FELEVBQWE2cUIsRUFFVDdxQixFQUFhQSxFQUFXMVcsUUFDeEIwVyxFQUFXOVksT0FBUzJqRSxFQUFZTixHQUFtQnZxRCxFQUFXOVksUUFDOURvOUIsRUFBT0csRUFBS29tQyxHQUdwQixPQUFPcG1DLENBQ1gsQ0FFQSxJQTBCSXFtQyxHQTFCQUMsR0FBVyxNQUNYQyxHQUFjLGlCQUNkQyxHQUFVLFNBQVUxc0QsRUFBSTFQLEVBQU1xa0IsR0FFOUIsR0FBSTYzQyxHQUFTOXNELEtBQUtwUCxHQUNkMFAsRUFBRy9FLE1BQU0rdkMsWUFBWTE2QyxFQUFNcWtCLFFBRTFCLEdBQUk4M0MsR0FBWS9zRCxLQUFLaVYsR0FDdEIzVSxFQUFHL0UsTUFBTSt2QyxZQUFZM2xCLEVBQVUvMEIsR0FBT3FrQixFQUFJMWQsUUFBUXcxRCxHQUFhLElBQUssaUJBRW5FLENBQ0QsSUFBSUUsRUFBaUJDLEdBQVV0OEQsR0FDL0IsR0FBSThJLE1BQU00cEIsUUFBUXJPLEdBSWQsSUFBSyxJQUFJcmlCLEVBQUksRUFBR3N5QixFQUFNalEsRUFBSXhyQixPQUFRbUosRUFBSXN5QixFQUFLdHlCLElBQ3ZDME4sRUFBRy9FLE1BQU0weEQsR0FBa0JoNEMsRUFBSXJpQixRQUluQzBOLEVBQUcvRSxNQUFNMHhELEdBQWtCaDRDLENBRW5DLENBQ0osRUFDSWs0QyxHQUFjLENBQUMsU0FBVSxNQUFPLE1BRWhDRCxHQUFZOW5DLEdBQU8sU0FBVXRFLEdBRzdCLEdBRkErckMsR0FBYUEsSUFBY2oyRCxTQUFTNEwsY0FBYyxPQUFPakgsTUFFNUMsWUFEYnVsQixFQUFPeUUsRUFBU3pFLEtBQ1NBLEtBQVErckMsR0FDN0IsT0FBTy9yQyxFQUdYLElBREEsSUFBSXNzQyxFQUFVdHNDLEVBQUtyVixPQUFPLEdBQUcrWixjQUFnQjFFLEVBQUt4aUIsTUFBTSxHQUMvQzFMLEVBQUksRUFBR0EsRUFBSXU2RCxHQUFZMWpFLE9BQVFtSixJQUFLLENBQ3pDLElBQUltcEMsRUFBU294QixHQUFZdjZELEdBQUt3NkQsRUFDOUIsR0FBSXJ4QixLQUFVOHdCLEdBQ1YsT0FBTzl3QixDQUVmLENBQ0osSUFDQSxTQUFTc3hCLEdBQVluYSxFQUFVdG1CLEdBQzNCLElBQUkzakMsRUFBTzJqQyxFQUFNM2pDLEtBQ2J1OEQsRUFBVXRTLEVBQVNqcUQsS0FDdkIsS0FBSXM2QixFQUFRdDZCLEVBQUt1akUsY0FDYmpwQyxFQUFRdDZCLEVBQUtzUyxRQUNiZ29CLEVBQVFpaUMsRUFBUWdILGNBQ2hCanBDLEVBQVFpaUMsRUFBUWpxRCxRQUhwQixDQU1BLElBQUk0NUIsRUFBS3ZrQyxFQUNMMFAsRUFBS3NzQixFQUFNcEIsSUFDWDhoQyxFQUFpQjlILEVBQVFnSCxZQUN6QmUsRUFBa0IvSCxFQUFRZ0ksaUJBQW1CaEksRUFBUWpxRCxPQUFTLENBQUMsRUFFL0RreUQsRUFBV0gsR0FBa0JDLEVBQzdCaHlELEVBQVFneEQsR0FBc0IzL0IsRUFBTTNqQyxLQUFLc1MsUUFBVSxDQUFDLEVBSXhEcXhCLEVBQU0zakMsS0FBS3VrRSxnQkFBa0IvcEMsRUFBTWxvQixFQUFNazBCLFFBQVVwSixFQUFPLENBQUMsRUFBRzlxQixHQUFTQSxFQUN2RSxJQUFJbXlELEVBQVdoQixHQUFTOS9CLEdBQU8sR0FDL0IsSUFBS2g4QixLQUFRNjhELEVBQ0xscUMsRUFBUW1xQyxFQUFTOThELEtBQ2pCbzhELEdBQVExc0QsRUFBSTFQLEVBQU0sSUFHMUIsSUFBS0EsS0FBUTg4RCxFQUNUdjRCLEVBQU11NEIsRUFBUzk4RCxHQUVmbzhELEdBQVExc0QsRUFBSTFQLEVBQWEsTUFBUHVrQyxFQUFjLEdBQUtBLEVBckJ6QyxDQXVCSixDQUNBLElBQUl3NEIsR0FBVSxDQUNWMzJELE9BQVFxMkQsR0FDUnppRSxPQUFReWlFLElBR1JPLEdBQWlCLE1BS3JCLFNBQVMzOEQsR0FBU3FQLEVBQUltbEQsR0FFbEIsR0FBS0EsSUFBU0EsRUFBTUEsRUFBSWpxQyxRQUl4QixHQUFJbGIsRUFBR3ZQLFVBQ0MwMEQsRUFBSTdqRCxRQUFRLE1BQVEsRUFDcEI2akQsRUFBSS90RCxNQUFNazJELElBQWdCeHRELFNBQVEsU0FBVW5JLEdBQUssT0FBT3FJLEVBQUd2UCxVQUFVQyxJQUFJaUgsRUFBSSxJQUc3RXFJLEVBQUd2UCxVQUFVQyxJQUFJeTBELE9BR3BCLENBQ0QsSUFBSXR3QixFQUFNLElBQUk5cEIsT0FBTy9LLEVBQUduRCxhQUFhLFVBQVksR0FBSSxLQUNqRGc0QixFQUFJdnpCLFFBQVEsSUFBTTZqRCxFQUFNLEtBQU8sR0FDL0JubEQsRUFBR3FDLGFBQWEsU0FBVXd5QixFQUFNc3dCLEdBQUtqcUMsT0FFN0MsQ0FDSixDQUtBLFNBQVNwcUIsR0FBWWtQLEVBQUltbEQsR0FFckIsR0FBS0EsSUFBU0EsRUFBTUEsRUFBSWpxQyxRQUl4QixHQUFJbGIsRUFBR3ZQLFVBQ0MwMEQsRUFBSTdqRCxRQUFRLE1BQVEsRUFDcEI2akQsRUFBSS90RCxNQUFNazJELElBQWdCeHRELFNBQVEsU0FBVW5JLEdBQUssT0FBT3FJLEVBQUd2UCxVQUFVYixPQUFPK0gsRUFBSSxJQUdoRnFJLEVBQUd2UCxVQUFVYixPQUFPdTFELEdBRW5CbmxELEVBQUd2UCxVQUFVdEgsUUFDZ
3DZXLEVBQUcyTSxnQkFBZ0IsYUFHdEIsQ0FHRCxJQUZBLElBQUlrb0IsRUFBTSxJQUFJOXBCLE9BQU8vSyxFQUFHbkQsYUFBYSxVQUFZLEdBQUksS0FDakQwd0QsRUFBTSxJQUFNcEksRUFBTSxJQUNmdHdCLEVBQUl2ekIsUUFBUWlzRCxJQUFRLEdBQ3ZCMTRCLEVBQU1BLEVBQUk1OUIsUUFBUXMyRCxFQUFLLE1BRTNCMTRCLEVBQU1BLEVBQUkzWixRQUVObGIsRUFBR3FDLGFBQWEsUUFBU3d5QixHQUd6QjcwQixFQUFHMk0sZ0JBQWdCLFFBRTNCLENBQ0osQ0FFQSxTQUFTNmdELEdBQWtCOWtDLEdBQ3ZCLEdBQUtBLEVBQUwsQ0FJQSxHQUFtQixpQkFBUkEsRUFBa0IsQ0FDekIsSUFBSXhDLEVBQU0sQ0FBQyxFQUtYLE9BSmdCLElBQVp3QyxFQUFJK2tDLEtBQ0oxbkMsRUFBT0csRUFBS3duQyxHQUFrQmhsQyxFQUFJcDRCLE1BQVEsTUFFOUN5MUIsRUFBT0csRUFBS3dDLEdBQ0x4QyxDQUNYLENBQ0ssTUFBbUIsaUJBQVJ3QyxFQUNMZ2xDLEdBQWtCaGxDLFFBRHhCLENBVkwsQ0FhSixDQUNBLElBQUlnbEMsR0FBb0I1b0MsR0FBTyxTQUFVeDBCLEdBQ3JDLE1BQU8sQ0FDSHE5RCxXQUFZLEdBQUc1aUQsT0FBT3phLEVBQU0sVUFDNUJzOUQsYUFBYyxHQUFHN2lELE9BQU96YSxFQUFNLGFBQzlCdTlELGlCQUFrQixHQUFHOWlELE9BQU96YSxFQUFNLGlCQUNsQ3c5RCxXQUFZLEdBQUcvaUQsT0FBT3phLEVBQU0sVUFDNUJ5OUQsYUFBYyxHQUFHaGpELE9BQU96YSxFQUFNLGFBQzlCMDlELGlCQUFrQixHQUFHampELE9BQU96YSxFQUFNLGlCQUUxQyxJQUNJMjlELEdBQWdCaGxDLEtBQWNHLEdBQzlCOGtDLEdBQWEsYUFDYkMsR0FBWSxZQUVaQyxHQUFpQixhQUNqQkMsR0FBcUIsZ0JBQ3JCQyxHQUFnQixZQUNoQkMsR0FBb0IsZUFDcEJOLFVBRStCanpELElBQTNCRixPQUFPMHpELHNCQUMwQnh6RCxJQUFqQ0YsT0FBTzJ6RCx3QkFDUEwsR0FBaUIsbUJBQ2pCQyxHQUFxQiw0QkFFS3J6RCxJQUExQkYsT0FBTzR6RCxxQkFDeUIxekQsSUFBaENGLE9BQU82ekQsdUJBQ1BMLEdBQWdCLGtCQUNoQkMsR0FBb0IsdUJBSTVCLElBQUlLLEdBQU0zbEMsR0FDSm51QixPQUFPQyxzQkFDSEQsT0FBT0Msc0JBQXNCTixLQUFLSyxRQUNsQ3pOLFdBQ3VCLFNBQXFDbU4sR0FBTSxPQUFPQSxHQUFNLEVBQ3pGLFNBQVNxMEQsR0FBVXIwRCxHQUNmbzBELElBQUksV0FFQUEsR0FBSXAwRCxFQUNSLEdBQ0osQ0FDQSxTQUFTczBELEdBQW1COXVELEVBQUltbEQsR0FDNUIsSUFBSTRKLEVBQW9CL3VELEVBQUdxbEQscUJBQXVCcmxELEVBQUdxbEQsbUJBQXFCLElBQ3RFMEosRUFBa0J6dEQsUUFBUTZqRCxHQUFPLElBQ2pDNEosRUFBa0J2L0QsS0FBSzIxRCxHQUN2QngwRCxHQUFTcVAsRUFBSW1sRCxHQUVyQixDQUNBLFNBQVM2SixHQUFzQmh2RCxFQUFJbWxELEdBQzNCbmxELEVBQUdxbEQsb0JBQ0gzZ0MsRUFBUzFrQixFQUFHcWxELG1CQUFvQkYsR0FFcENyMEQsR0FBWWtQLEVBQUltbEQsRUFDcEIsQ0FDQSxTQUFTOEosR0FBbUJqdkQsRUFBSWczQyxFQUFjMVUsR0FDMUMsSUFBSW5vQyxFQUFLKzBELEdBQWtCbHZELEVBQUlnM0MsR0FBZTVnRCxFQUFPK0QsRUFBRy9ELEtBQU1pckMsRUFBVWxuQyxFQUFHa25DLFFBQVM4dEIsRUFBWWgxRCxFQUFHZzFELFVBQ25HLElBQUsvNEQsRUFDRCxPQUFPa3NDLElBQ1gsSUFBSS9pQyxFQUFRbkosSUFBUzgzRCxHQUFhRyxHQUFxQkUsR0FDbkRhLEVBQVEsRUFDUmhqRSxFQUFNLFdBQ040VCxFQUFHRyxvQkFBb0JaLEVBQU84dkQsR0FDOUIvc0IsR0FDSixFQUNJK3NCLEVBQVEsU0FBVTdrRSxHQUNkQSxFQUFFSSxTQUFXb1YsS0FDUG92RCxHQUFTRCxHQUNYL2lFLEdBR1osRUFDQWlCLFlBQVcsV0FDSCtoRSxFQUFRRCxHQUNSL2lFLEdBRVIsR0FBR2kxQyxFQUFVLEdBQ2JyaEMsRUFBR0MsaUJBQWlCVixFQUFPOHZELEVBQy9CLENBQ0EsSUFBSUMsR0FBYyx5QkFDbEIsU0FBU0osR0FBa0JsdkQsRUFBSWczQyxHQUMzQixJQVFJNWdELEVBUkFtNUQsRUFBU3owRCxPQUFPMDBELGlCQUFpQnh2RCxHQUVqQ3l2RCxHQUFvQkYsRUFBT25CLEdBQWlCLFVBQVksSUFBSWgzRCxNQUFNLE1BQ2xFczRELEdBQXVCSCxFQUFPbkIsR0FBaUIsYUFBZSxJQUFJaDNELE1BQU0sTUFDeEV1NEQsRUFBb0JDLEdBQVdILEVBQWtCQyxHQUNqREcsR0FBbUJOLEVBQU9qQixHQUFnQixVQUFZLElBQUlsM0QsTUFBTSxNQUNoRTA0RCxHQUFzQlAsRUFBT2pCLEdBQWdCLGFBQWUsSUFBSWwzRCxNQUFNLE1BQ3RFMjRELEVBQW1CSCxHQUFXQyxFQUFpQkMsR0FFL0N6dUIsRUFBVSxFQUNWOHRCLEVBQVksRUErQmhCLE9BN0JJblksSUFBaUJrWCxHQUNieUIsRUFBb0IsSUFDcEJ2NUQsRUFBTzgzRCxHQUNQN3NCLEVBQVVzdUIsRUFDVlIsRUFBWU8sRUFBb0J2bUUsUUFHL0I2dEQsSUFBaUJtWCxHQUNsQjRCLEVBQW1CLElBQ25CMzVELEVBQU8rM0QsR0FDUDlzQixFQUFVMHVCLEVBQ1ZaLEVBQVlXLEVBQW1CM21FLFFBV25DZ21FLEdBTkEvNEQsR0FEQWlyQyxFQUFVcjRDLEtBQUtvSixJQUFJdTlELEVBQW1CSSxJQUV4QixFQUNKSixFQUFvQkksRUFDaEI3QixHQUNBQyxHQUNKLE1BRUovM0QsSUFBUzgzRCxHQUNMd0IsRUFBb0J2bUUsT0FDcEIybUUsRUFBbUIzbUUsT0FDdkIsRUFHSCxDQUNIaU4sS0FBTUEsRUFDTmlyQyxRQUFTQSxFQUNUOHRCLFVBQVdBLEVBQ1hhLGFBTGU1NUQsSUFBUzgzRCxJQUFjb0IsR0FBWTV2RCxLQUFLNnZELEVBQU9uQixHQUFpQixhQU92RixDQUNBLFNBQVN3QixHQUFXSyxFQUFRQyxHQUV4QixLQUFPRCxFQUFPOW1FLE9BQVMrbUUsRUFBVS9tRSxRQUM3QjhtRSxFQUFTQSxFQUFPbGxELE9BQU9rbEQsR0FFM0IsT0FBT2puRSxLQUFLb0osSUFBSTRHLE1BQU0sS0FBTWszRCxFQUFVempFLEtBQUksU0FBVWlaLEVBQUdwVCxHQUNuRCxPQUFPNjlELEdBQUt6cUQsR0FBS3lxRCxHQUFLRixFQUFPMzlELEdBQ2pDLElBQ0osQ0FLQSxTQUFTNjlELEdBQUsxM0QsR0FDVixPQUFrRCxJQUEzQ3ZPLE9BQU91TyxFQUFFdUYsTUFBTSxHQUFJLEdBQUcvRyxRQUFRLElBQUssS0FDOUMsQ0FFQSxTQUFTbTVELEdBQU05akMsRUFBTytqQyxHQUNsQixJQUFJcndELEVBQUtzc0IsRUFBTXBCLElBRVgvSCxFQUFNbmpCLEVBQUd5aUQsWUFDVHppRCxFQUFHeWlELFNBQVM2TixXQUFZLEVBQ3hCdHdELEVBQUd5aUQsWUFFUCxJQUFJOTVELEVBQU82a0UsR0FBa0JsaEMsRUFBTTNqQyxLQUFLMjJELFlBQ3hDLElBQUlyOEIsRUFBUXQ2QixLQUlSdzZCLEVBQU1uakIsRUFBR3V3RCxXQUE2QixJQUFoQnZ3RCxFQUFHbVgsU0FBN0IsQ0FVQSxJQVBBLElBQUlzMkMsRUFBTTlrRSxFQUFLOGtFLElBQUtyM0QsRUFBT3pOLEVBQUt5TixLQUFNdTNELEVBQWFobEUsRUFBS2dsRSxXQUFZQyxFQUFlamxFLEVBQUtpbEUsYUFBY0MsRUFBbUJsbEUsRUFBS2tsRSxpQkFBa0IyQyxFQUFjN25FLEVBQUs2bkUsWUFBYUMsRUFBZ0I5bkUsRUFBSzhuRSxjQUFlQyxFQUFvQi9uRSxFQUFLK25FLGtCQUFtQkMsRUFBY2hvRSxFQUFLZ29FLFlBQWFQLEVBQVF6bkUsRUFBS3luRSxNQUFPUSxFQUFham9FLEVBQUtpb0UsV0FBWUMsRUFBaUJsb0UsRUFBS2tvRSxlQUFnQkMsRUFBZW5vRSxFQUFLbW9FLGFBQWNDLEVBQVNwb0UsRUFBS29vRSxPQUFRQyxFQUFjcm9FLEVBQUtxb0UsWUFBYUMsRUFBa0J0b0UsRUFBS3NvRSxnQkFBaUJubEQsRUFBV25qQixFQUFLbWpCLFNBS3BnQnFmLEVBQVVzWSxHQUNWeXRCLEVBQWlCenRCLEdBQWU1TSxPQUM3QnE2QixHQUFrQkEsRUFBZW5tRSxRQUNwQ29nQyxFQUFVK2xDLEVBQWUvbEMsUUFDekIrbEMsRUFBaUJBLEVBQWVubUUsT0FFcEMsSUFBSW9tRSxHQUFZaG1DLEVBQVFxVSxhQU
3FlbFQsRUFBTVQsYUFDN0MsSUFBSXNsQyxHQUFhSixHQUFxQixLQUFYQSxFQUEzQixDQUdBLElBQUlLLEVBQWFELEdBQVlYLEVBQWNBLEVBQWM3QyxFQUNyRDBELEVBQWNGLEdBQVlULEVBQW9CQSxFQUFvQjdDLEVBQ2xFeUQsRUFBVUgsR0FBWVYsRUFBZ0JBLEVBQWdCN0MsRUFDdEQyRCxFQUFrQkosR0FBV0wsR0FBOEJILEVBQzNEYSxFQUFZTCxHQUFZNXRDLEVBQVd3dEMsR0FBVUEsRUFBa0JYLEVBQy9EcUIsRUFBaUJOLEdBQVdILEdBQTRCSixFQUN4RGMsRUFBcUJQLEdBQ25CRixHQUNBSixFQUNGYyxFQUF3QnZ0QyxFQUFTWixFQUFTMVgsR0FBWUEsRUFBU3NrRCxNQUFRdGtELEdBQzlDLE1BQXpCNmxELEdBQ0FDLEdBQWNELEVBQXVCLFFBQVNybEMsR0FFbEQsSUFBSXVsQyxHQUFxQixJQUFScEUsSUFBa0Jya0MsR0FDL0Iwb0MsRUFBbUJDLEdBQXVCUCxHQUMxQ2x2QixFQUFNdGlDLEVBQUd1d0QsU0FBV3JwQyxHQUFLLFdBQ3JCMnFDLElBQ0E3QyxHQUFzQmh2RCxFQUFJc3hELEdBQzFCdEMsR0FBc0JodkQsRUFBSXF4RCxJQUcxQi91QixFQUFHZ3VCLFdBQ0N1QixHQUNBN0MsR0FBc0JodkQsRUFBSW94RCxHQUU5Qk0sR0FBc0JBLEVBQW1CMXhELElBR3pDeXhELEdBQWtCQSxFQUFlenhELEdBRXJDQSxFQUFHdXdELFNBQVcsSUFDbEIsSUFDS2prQyxFQUFNM2pDLEtBQUtxcEUsTUFFWmo5QixHQUFlekksRUFBTyxVQUFVLFdBQzVCLElBQUl2aEMsRUFBU2lWLEVBQUd5QixXQUNad3dELEVBQWNsbkUsR0FBVUEsRUFBTzhpQyxVQUFZOWlDLEVBQU84aUMsU0FBU3ZCLEVBQU03c0IsS0FDakV3eUQsR0FDQUEsRUFBWXYxQyxNQUFRNFAsRUFBTTVQLEtBQzFCdTFDLEVBQVkvbUMsSUFBSXUzQixVQUNoQndQLEVBQVkvbUMsSUFBSXUzQixXQUVwQitPLEdBQWFBLEVBQVV4eEQsRUFBSXNpQyxFQUMvQixJQUdKaXZCLEdBQW1CQSxFQUFnQnZ4RCxHQUMvQjZ4RCxJQUNBL0MsR0FBbUI5dUQsRUFBSW94RCxHQUN2QnRDLEdBQW1COXVELEVBQUlxeEQsR0FDdkJ4QyxJQUFVLFdBQ05HLEdBQXNCaHZELEVBQUlveEQsR0FFckI5dUIsRUFBR2d1QixZQUNKeEIsR0FBbUI5dUQsRUFBSXN4RCxHQUNsQlEsSUFDR0ksR0FBZ0JQLEdBQ2hCdGtFLFdBQVdpMUMsRUFBSXF2QixHQUdmMUMsR0FBbUJqdkQsRUFBSTVKLEVBQU1rc0MsSUFJN0MsS0FFQWhXLEVBQU0zakMsS0FBS3FwRSxPQUNYM0IsR0FBaUJBLElBQ2pCbUIsR0FBYUEsRUFBVXh4RCxFQUFJc2lDLElBRTFCdXZCLEdBQWVDLEdBQ2hCeHZCLEdBeEVKLENBZkEsQ0F5RkosQ0FDQSxTQUFTNnZCLEdBQU03bEMsRUFBTzJ6QixHQUNsQixJQUFJamdELEVBQUtzc0IsRUFBTXBCLElBRVgvSCxFQUFNbmpCLEVBQUd1d0QsWUFDVHZ3RCxFQUFHdXdELFNBQVNELFdBQVksRUFDeEJ0d0QsRUFBR3V3RCxZQUVQLElBQUk1bkUsRUFBTzZrRSxHQUFrQmxoQyxFQUFNM2pDLEtBQUsyMkQsWUFDeEMsR0FBSXI4QixFQUFRdDZCLElBQXlCLElBQWhCcVgsRUFBR21YLFNBQ3BCLE9BQU84b0MsSUFHWCxJQUFJOThCLEVBQU1uakIsRUFBR3lpRCxVQUFiLENBR0EsSUFBSWdMLEVBQU05a0UsRUFBSzhrRSxJQUFLcjNELEVBQU96TixFQUFLeU4sS0FBTTAzRCxFQUFhbmxFLEVBQUttbEUsV0
3FBWUMsRUFBZXBsRSxFQUFLb2xFLGFBQWNDLEVBQW1CcmxFLEVBQUtxbEUsaUJBQWtCb0UsRUFBY3pwRSxFQUFLeXBFLFlBQWFELEVBQVF4cEUsRUFBS3dwRSxNQUFPRSxFQUFhMXBFLEVBQUswcEUsV0FBWUMsRUFBaUIzcEUsRUFBSzJwRSxlQUFnQkMsRUFBYTVwRSxFQUFLNHBFLFdBQVl6bUQsRUFBV25qQixFQUFLbWpCLFNBQ2xUK2xELEdBQXFCLElBQVJwRSxJQUFrQnJrQyxHQUMvQjBvQyxFQUFtQkMsR0FBdUJJLEdBQzFDSyxFQUF3QnB1QyxFQUFTWixFQUFTMVgsR0FBWUEsRUFBU3FtRCxNQUFRcm1ELEdBQ3ZFcVgsRUFBTXF2QyxJQUNOWixHQUFjWSxFQUF1QixRQUFTbG1DLEdBRWxELElBQUlnVyxFQUFNdGlDLEVBQUd5aUQsU0FBV3Y3QixHQUFLLFdBQ3JCbG5CLEVBQUd5QixZQUFjekIsRUFBR3lCLFdBQVdvc0IsV0FDL0I3dEIsRUFBR3lCLFdBQVdvc0IsU0FBU3ZCLEVBQU03c0IsS0FBTyxNQUVwQ295RCxJQUNBN0MsR0FBc0JodkQsRUFBSSt0RCxHQUMxQmlCLEdBQXNCaHZELEVBQUlndUQsSUFHMUIxckIsRUFBR2d1QixXQUNDdUIsR0FDQTdDLEdBQXNCaHZELEVBQUk4dEQsR0FFOUJ3RSxHQUFrQkEsRUFBZXR5RCxLQUdqQ2lnRCxJQUNBb1MsR0FBY0EsRUFBV3J5RCxJQUU3QkEsRUFBR3lpRCxTQUFXLElBQ2xCLElBQ0k4UCxFQUNBQSxFQUFXRSxHQUdYQSxHQWpDSixDQW1DQSxTQUFTQSxJQUdEbndCLEVBQUdndUIsYUFJRmhrQyxFQUFNM2pDLEtBQUtxcEUsTUFBUWh5RCxFQUFHeUIsY0FDdEJ6QixFQUFHeUIsV0FBV29zQixXQUFhN3RCLEVBQUd5QixXQUFXb3NCLFNBQVcsQ0FBQyxJQUFJdkIsRUFBTTdzQixLQUM1RDZzQixHQUVSOGxDLEdBQWVBLEVBQVlweUQsR0FDdkI2eEQsSUFDQS9DLEdBQW1COXVELEVBQUk4dEQsR0FDdkJnQixHQUFtQjl1RCxFQUFJZ3VELEdBQ3ZCYSxJQUFVLFdBQ05HLEdBQXNCaHZELEVBQUk4dEQsR0FFckJ4ckIsRUFBR2d1QixZQUNKeEIsR0FBbUI5dUQsRUFBSSt0RCxHQUNsQitELElBQ0dJLEdBQWdCTSxHQUNoQm5sRSxXQUFXaTFDLEVBQUlrd0IsR0FHZnZELEdBQW1CanZELEVBQUk1SixFQUFNa3NDLElBSTdDLEtBRUo2dkIsR0FBU0EsRUFBTW55RCxFQUFJc2lDLEdBQ2R1dkIsR0FBZUMsR0FDaEJ4dkIsSUFFUixDQUNKLENBRUEsU0FBU3N2QixHQUFjajlDLEVBQUtya0IsRUFBTWc4QixHQUNYLGlCQUFSM1gsRUFDUCtYLEdBQU8seUJBQXlCM2hCLE9BQU96YSxFQUFNLHNDQUN6QyxPQUFPeWEsT0FBTzJDLEtBQUtDLFVBQVVnSCxHQUFNLEtBQU0yWCxFQUFNbkIsU0FFOUNqMUIsTUFBTXllLElBQ1grWCxHQUFPLHlCQUF5QjNoQixPQUFPemEsRUFBTSx1QkFDekMsOENBQStDZzhCLEVBQU1uQixRQUVqRSxDQUNBLFNBQVMrbUMsR0FBZ0J2OUMsR0FDckIsTUFBc0IsaUJBQVJBLElBQXFCemUsTUFBTXllLEVBQzdDLENBT0EsU0FBU285QyxHQUF1QnYzRCxHQUM1QixHQUFJeW9CLEVBQVF6b0IsR0FDUixPQUFPLEVBR1gsSUFBSWs0RCxFQUFhbDRELEVBQUcrNUIsSUFDcEIsT0FBSXBSLEVBQU11dkMsR0FFQ1gsR0FBdUIzNEQsTUFBTTRwQixRQUFRMHZDLEdBQWNBLEVBQVcsR0FBS0EsSUFJbEVsNEQsRUFBR2lyQixTQUFXanJCLEVBQUdyUixRQUFVLENBRTNDLENBQ0EsU0FBU3dwRSxHQUFPemdELEVBQUdvYSxJQUNTLElBQXBCQSxFQUFNM2pDLEtBQUtxcEUsTUFDWDVCLEdBQU05akMsRUFFZCxDQUNBLElBcUJJc21DLEdBSmtCLENBQUN6eEMsR0FBT3drQyxHQUFTcmtDLEdBQVF5WCxHQUFVczBCLEdBakJ4Q3BrQyxHQUNYLENBQ0V2eUIsT0FBUWk4RCxHQUNScFQsU0FBVW9ULEdBQ1YvaUUsT0FBUSxTQUFVMDhCLEVBQU8yekIsSUFFRyxJQUFwQjN6QixFQUFNM2pDLEtBQUtxcEUsS0FFWEcsR0FBTTdsQyxFQUFPMnpCLEdBR2JBLEdBRVIsR0FFRixDQUFDLEdBTXlCbDFDLE9BQU9xNUMsSUFDbkN5TyxHQUFRL1UsR0FBb0IsQ0FBRXBCLFFBQVNBLEdBQVNuMkIsUUFBU3FzQyxLQU96RHhwQyxJQUVBOXlCLFNBQVMySixpQkFBaUIsbUJBQW1CLFdBQ3pDLElBQUlELEVBQUsxSixTQUFTZ0UsY0FFZDBGLEdBQU1BLEVBQUc4eUQsUUFDVEMsR0FBUS95RCxFQUFJLFFBRXBCLElBRUosSUFBSWd6RCxHQUFZLENBQ1ovakMsU0FBVSxTQUFVanZCLEVBQUlvcUQsRUFBUzk5QixFQUFPc21CLEdBQ2xCLFdBQWR0bUIsRUFBTTVQLEtBRUZrMkIsRUFBUzFuQixNQUFRMG5CLEVBQVMxbkIsSUFBSStuQyxVQUM5QmwrQixHQUFlekksRUFBTyxhQUFhLFdBQy9CMG1DLEdBQVVuUCxpQkFBaUI3akQsRUFBSW9xRCxFQUFTOTlCLEVBQzVDLElBR0E0bUMsR0FBWWx6RCxFQUFJb3FELEVBQVM5OUIsRUFBTW5CLFNBRW5DbnJCLEVBQUdpekQsVUFBWSxHQUFHeG1FLElBQUlzTSxLQUFLaUgsRUFBR0gsUUFBU3N6RCxNQUVwQixhQUFkN21DLEVBQU01UCxLQUFzQm8vQixHQUFnQjk3QyxFQUFHNUosU0FDcEQ0SixFQUFHMnJELFlBQWN2QixFQUFRcEcsVUFDcEJvRyxFQUFRcEcsVUFBVXB3QixPQUNuQjV6QixFQUFHQyxpQkFBaUIsbUJBQW9CbXpELElBQ3hDcHpELEVBQUdDLGlCQUFpQixpQkFBa0JvekQsSUFLdENyekQsRUFBR0MsaUJBQWlCLFNBQVVvekQsSUFFMUJqcUMsS0FDQXBwQixFQUFHOHlELFFBQVMsSUFJNUIsRUFDQWpQLGlCQUFrQixTQUFVN2pELEVBQUlvcUQsRUFBUzk5QixHQUNyQyxHQUFrQixXQUFkQSxFQUFNNVAsSUFBa0IsQ0FDeEJ3MkMsR0FBWWx6RCxFQUFJb3FELEVBQVM5OUIsRUFBTW5CLFNBSy9CLElBQUltb0MsRUFBZ0J0ekQsRUFBR2l6RCxVQUNuQk0sRUFBZ0J2ekQsRUFBR2l6RCxVQUFZLEdBQUd4bUUsSUFBSXNNLEtBQUtpSCxFQUFHSCxRQUFTc3pELElBQ3ZESSxFQUFhMXFELE1BQUssU0FBVXlYLEVBQUdodUIsR0FBSyxPQUFRbTBCLEVBQVduRyxFQUFHZ3pDLEVBQWNoaEUsR0FBSyxNQUc3RDBOLEVBQUdpOEMsU0FDYm1PLEVBQVF2MEQsTUFBTWdULE1BQUssU0FBVXFhLEdBQUssT0FBT3N3QyxHQUFvQnR3QyxFQUFHcXdDLEVBQWUsSUFDL0VuSixFQUFRdjBELFFBQVV1MEQsRUFBUXQ1QixVQUN4QjBpQyxHQUFvQnBKLEVBQVF2MEQsTUFBTzA5RCxLQUV2Q1IsR0FBUS95RCxFQUFJLFNBR3hCLENBQ0osR0FFSixTQUFTa3pELEdBQVlsekQsRUFBSW9xRCxFQUFTdi9CLEdBQzlCNG9DLEdBQW9CenpELEVBQUlvcUQsRUFBU3YvQixJQUU3QjFCLElBQVFFLEtBQ1JoOEIsWUFBVyxXQUNQb21FLEd
3BQW9CenpELEVBQUlvcUQsRUFBU3YvQixFQUNyQyxHQUFHLEVBRVgsQ0FDQSxTQUFTNG9DLEdBQW9CenpELEVBQUlvcUQsRUFBU3YvQixHQUN0QyxJQUFJaDFCLEVBQVF1MEQsRUFBUXYwRCxNQUNoQjY5RCxFQUFhMXpELEVBQUdpOEMsU0FDcEIsSUFBSXlYLEdBQWV0NkQsTUFBTTRwQixRQUFRbnRCLEdBQWpDLENBUUEsSUFEQSxJQUFJcVEsRUFBVW9NLEVBQ0xoZ0IsRUFBSSxFQUFHOGEsRUFBSXBOLEVBQUdILFFBQVExVyxPQUFRbUosRUFBSThhLEVBQUc5YSxJQUUxQyxHQURBZ2dCLEVBQVN0UyxFQUFHSCxRQUFRdk4sR0FDaEJvaEUsRUFDQXh0RCxFQUFXK2dCLEVBQWFweEIsRUFBT3M5RCxHQUFTN2dELEtBQVksRUFDaERBLEVBQU9wTSxXQUFhQSxJQUNwQm9NLEVBQU9wTSxTQUFXQSxRQUl0QixHQUFJdWdCLEVBQVcwc0MsR0FBUzdnRCxHQUFTemMsR0FJN0IsWUFISW1LLEVBQUcrUSxnQkFBa0J6ZSxJQUNyQjBOLEVBQUcrUSxjQUFnQnplLElBTTlCb2hFLElBQ0QxekQsRUFBRytRLGVBQWlCLEVBcEJ4QixNQUxJMmIsR0FBTyw2QkFBOEIzaEIsT0FBT3EvQyxFQUFRMWlCLFdBQVksT0FDeEQsbURBQW1EMzhCLE9BQU8zUyxPQUFPUyxVQUFVZCxTQUN0RWdCLEtBQUtsRCxHQUNMbUksTUFBTSxHQUFJLElBQUs2c0IsRUF3QnBDLENBQ0EsU0FBUzJvQyxHQUFvQjM5RCxFQUFPZ0ssR0FDaEMsT0FBT0EsRUFBUWluQixPQUFNLFNBQVV4RyxHQUFLLE9BQVFtRyxFQUFXbkcsRUFBR3pxQixFQUFRLEdBQ3RFLENBQ0EsU0FBU3M5RCxHQUFTN2dELEdBQ2QsTUFBTyxXQUFZQSxFQUFTQSxFQUFPNjRDLE9BQVM3NEMsRUFBT3pjLEtBQ3ZELENBQ0EsU0FBU3U5RCxHQUFtQjVvRSxHQUN4QkEsRUFBRUksT0FBTzJnRSxXQUFZLENBQ3pCLENBQ0EsU0FBUzhILEdBQWlCN29FLEdBRWpCQSxFQUFFSSxPQUFPMmdFLFlBRWQvZ0UsRUFBRUksT0FBTzJnRSxXQUFZLEVBQ3JCd0gsR0FBUXZvRSxFQUFFSSxPQUFRLFNBQ3RCLENBQ0EsU0FBU21vRSxHQUFRL3lELEVBQUk1SixHQUNqQixJQUFJNUwsRUFBSThMLFNBQVNxTCxZQUFZLGNBQzdCblgsRUFBRStvQixVQUFVbmQsR0FBTSxHQUFNLEdBQ3hCNEosRUFBRzRCLGNBQWNwWCxFQUNyQixDQUdBLFNBQVNtcEUsR0FBV3JuQyxHQUVoQixPQUFPQSxFQUFNWixtQkFBdUJZLEVBQU0zakMsTUFBUzJqQyxFQUFNM2pDLEtBQUsyMkQsV0FFeERoekIsRUFEQXFuQyxHQUFXcm5DLEVBQU1aLGtCQUFrQitTLE9BRTdDLENBQ0EsSUFnREltMUIsR0FBcUIsQ0FDckIzZ0IsTUFBTytmLEdBQ1BoQixLQWxETyxDQUNQdjNELEtBQU0sU0FBVXVGLEVBQUk3RixFQUFJbXlCLEdBQ3BCLElBQUl6MkIsRUFBUXNFLEVBQUd0RSxNQUVYeXBELEdBREpoekIsRUFBUXFuQyxHQUFXcm5DLElBQ0kzakMsTUFBUTJqQyxFQUFNM2pDLEtBQUsyMkQsV0FDdEN1VSxFQUFtQjd6RCxFQUFHOHpELG1CQUNELFNBQXJCOXpELEVBQUcvRSxNQUFNRSxRQUFxQixHQUFLNkUsRUFBRy9FLE1BQU1FLFFBQzVDdEYsR0FBU3lwRCxHQUNUaHpCLEVBQU0zakMsS0FBS3FwRSxNQUFPLEVBQ2xCNUIsR0FBTTlqQyxHQUFPLFdBQ1R0c0IsRUFBRy9FLE1BQU1FLFFBQVUwNEQsQ0FDdkIsS0FHQTd6RCxFQUFHL0UsTUFBTUUsUUFBVXRGLEVBQVFnK0QsRUFBa0IsTUFFckQsRUFDQXZwRSxPQUFRLFNBQVUwVixFQUFJN0YsRUFBSW15QixHQUN0QixJQUFJejJCLEVBQVFzRSxFQUFHdEUsT0FFVkEsSUFGNEJzRSxFQUFHMjJCLFlBSXBDeEUsRUFBUXFuQyxHQUFXcm5DLElBQ0kzakMsTUFBUTJqQyxFQUFNM2pDLEtBQUsyMkQsWUFFdENoekIsRUFBTTNqQyxLQUFLcXBFLE1BQU8sRUFDZG44RCxFQUNBdTZELEdBQU05akMsR0FBTyxXQUNUdHNCLEVBQUcvRSxNQUFNRSxRQUFVNkUsRUFBRzh6RCxrQkFDMUIsSUFHQTNCLEdBQU03bEMsR0FBTyxXQUNUdHNCLEVBQUcvRSxNQUFNRSxRQUFVLE1BQ3ZCLEtBSUo2RSxFQUFHL0UsTUFBTUUsUUFBVXRGLEVBQVFtSyxFQUFHOHpELG1CQUFxQixPQUUzRCxFQUNBQyxPQUFRLFNBQVUvekQsRUFBSW9xRCxFQUFTOTlCLEVBQU9zbUIsRUFBVXdRLEdBQ3ZDQSxJQUNEcGpELEVBQUcvRSxNQUFNRSxRQUFVNkUsRUFBRzh6RCxtQkFFOUIsSUFTQUUsR0FBa0IsQ0FDbEIxakUsS0FBTWtuQixPQUNOdTVDLE9BQVF4dkMsUUFDUmtzQyxJQUFLbHNDLFFBQ0w3c0IsS0FBTThpQixPQUNOcGhCLEtBQU1vaEIsT0FDTm0yQyxXQUFZbjJDLE9BQ1pzMkMsV0FBWXQyQyxPQUNabzJDLGFBQWNwMkMsT0FDZHUyQyxhQUFjdjJDLE9BQ2RxMkMsaUJBQWtCcjJDLE9BQ2xCdzJDLGlCQUFrQngyQyxPQUNsQmc1QyxZQUFhaDVDLE9BQ2JrNUMsa0JBQW1CbDVDLE9BQ25CaTVDLGNBQWVqNUMsT0FDZjFMLFNBQVUsQ0FBQzVoQixPQUFRc3RCLE9BQVFwZixTQUkvQixTQUFTNjdELEdBQWEzbkMsR0FDbEIsSUFBSTRuQyxFQUFjNW5DLEdBQVNBLEVBQU1sQixpQkFDakMsT0FBSThvQyxHQUFlQSxFQUFZanFDLEtBQUtwcUIsUUFBUWdrQyxTQUNqQ293QixHQUFhM3lCLEdBQXVCNHlCLEVBQVl6d0QsV0FHaEQ2b0IsQ0FFZixDQUNBLFNBQVM2bkMsR0FBc0JyMEIsR0FDM0IsSUFBSW4zQyxFQUFPLENBQUMsRUFDUmtYLEVBQVVpZ0MsRU
3FBSzNTLFNBRW5CLElBQUssSUFBSTF0QixLQUFPSSxFQUFRNmxDLFVBQ3BCLzhDLEVBQUs4VyxHQUFPcWdDLEVBQUtyZ0MsR0FJckIsSUFBSTY5QixFQUFZejlCLEVBQVFvL0IsaUJBQ3hCLElBQUssSUFBSXgvQixLQUFPNjlCLEVBQ1ozMEMsRUFBS3M4QixFQUFTeGxCLElBQVE2OUIsRUFBVTc5QixHQUVwQyxPQUFPOVcsQ0FDWCxDQUNBLFNBQVMwc0IsR0FBWWlKLEVBQUc4MUMsR0FFcEIsR0FBSSxpQkFBaUIxMEQsS0FBSzAwRCxFQUFTMTNDLEtBQy9CLE9BQU80QixFQUFFLGFBQWMsQ0FDbkI1MUIsTUFBTzByRSxFQUFTaHBDLGlCQUFpQnNhLFdBRzdDLENBQ0EsU0FBUzJ1QixHQUFvQi9uQyxHQUN6QixLQUFRQSxFQUFRQSxFQUFNdmhDLFFBQ2xCLEdBQUl1aEMsRUFBTTNqQyxLQUFLMjJELFdBQ1gsT0FBTyxDQUduQixDQUNBLFNBQVNnVixHQUFZaG1ELEVBQU9pbUQsR0FDeEIsT0FBT0EsRUFBUzkwRCxNQUFRNk8sRUFBTTdPLEtBQU84MEQsRUFBUzczQyxNQUFRcE8sRUFBTW9PLEdBQ2hFLENBQ0EsSUFBSTgzQyxHQUFnQixTQUFVNzhELEdBQUssT0FBT0EsRUFBRStrQixLQUFPd1AsR0FBbUJ2MEIsRUFBSSxFQUN0RTg4RCxHQUFtQixTQUFVL3VELEdBQUssTUFBa0IsU0FBWEEsRUFBRXBWLElBQWlCLEVBQzVEb2tFLEdBQWEsQ0FDYnBrRSxLQUFNLGFBQ041SCxNQUFPc3JFLEdBQ1Bud0IsVUFBVSxFQUNWM2lCLE9BQVEsU0FBVTVDLEdBQ2QsSUFBSVUsRUFBUWoyQixLQUNSMGEsRUFBVzFhLEtBQUtndkMsT0FBTzlxQixRQUMzQixHQUFLeEosSUFJTEEsRUFBV0EsRUFBU2phLE9BQU9nckUsS0FFYnJyRSxPQUFkLENBSUlzYSxFQUFTdGEsT0FBUyxHQUNsQnVqQyxHQUFPLHVGQUM4QjNqQyxLQUFLKzFDLFNBRTlDLElBQUlwcUMsRUFBTzNMLEtBQUsyTCxLQUVaQSxHQUFpQixXQUFUQSxHQUE4QixXQUFUQSxHQUM3Qmc0QixHQUFPLDhCQUFnQ2g0QixFQUFNM0wsS0FBSysxQyxTQUV0RCxJQUFJczFCLEVBQVczd0QsRUFBUyxHQUd4QixHQUFJNHdELEdBQW9CdHJFLEtBQUs4dEMsUUFDekIsT0FBT3U5QixFQUlYLElBQUk5bEQsRUFBUTJsRCxHQUFhRyxHQUV6QixJQUFLOWxELEVBQ0QsT0FBTzhsRCxFQUVYLEdBQUlyckUsS0FBSzRyRSxTQUNMLE9BQU90L0MsR0FBWWlKLEVBQUc4MUMsR0FLMUIsSUFBSW5tRSxFQUFLLGdCQUFnQjhjLE9BQU9oaUIsS0FBS3E4QyxLQUFNLEtBQzNDOTJCLEVBQU03TyxJQUNXLE1BQWI2TyxFQUFNN08sSUFDQTZPLEVBQU13ZCxVQUNGNzlCLEVBQUssVUFDTEEsRUFBS3FnQixFQUFNb08sSUFDZjRHLEVBQVloVixFQUFNN08sS0FDb0IsSUFBbEMrWCxPQUFPbEosRUFBTTdPLEtBQUs2QixRQUFRclQsR0FDdEJxZ0IsRUFBTTdPLElBQ054UixFQUFLcWdCLEVBQU03TyxJQUNmNk8sRUFBTTdPLElBQ3BCLElBQUk5VyxHQUFTMmxCLEVBQU0zbEIsT0FBUzJsQixFQUFNM2xCLEtBQU8sQ0FBQyxJQUFJMjJELFdBQzFDNlUsR0FBc0JwckUsTUFDdEI2ckUsRUFBYzdyRSxLQUFLMDFDLE9BQ25CODFCLEVBQVdOLEdBQWFXLEdBTTVCLEdBSEl0bUQsRUFBTTNsQixLQUFLZ3RELFlBQWNybkMsRUFBTTNsQixLQUFLZ3RELFdBQVc5c0MsS0FBSzRyRCxNQUNwRG5tRCxFQUFNM2xCLEtBQUtxcEUsTUFBTyxHQUVsQnVDLEdBQ0FBLEVBQVM1ckUsT0FDUjJyRSxHQUFZaG1ELEVBQU9pbUQsS0FDbkJyb0MsR0FBbUJxb0MsTUFFbEJBLEVBQVM3b0Msb0JBQ1A2b0MsRUFBUzdvQyxrQkFBa0IrUyxPQUFPM1MsV0FBWSxDQUdsRCxJQUFJbzVCLEVBQVdxUCxFQUFTNXJFLEtBQUsyMkQsV0FBYXY1QixFQUFPLENBQUMsRUFBR3A5QixHQUVyRCxHQUFhLFdBQVQrTCxFQU9BLE9BTEEzTCxLQUFLNHJFLFVBQVcsRUFDaEI1L0IsR0FBZW13QixFQUFTLGNBQWMsV0FDbENsbUMsRUFBTTIxQyxVQUFXLEVBQ2pCMzFDLEVBQU1naUIsY0FDVixJQUNPM3JCLEdBQVlpSixFQUFHODFDLEdBRXJCLEdBQWEsV0FBVDEvRCxFQUFtQixDQUN4QixHQUFJdzNCLEdBQW1CNWQsR0FDbkIsT0FBT3NtRCxFQUVYLElBQUlDLEVBQ0FwQyxFQUFlLFdBQ2ZvQyxHQUNKLEVBQ0E5L0IsR0FBZXBzQyxFQUFNLGFBQWM4cEUsR0FDbkMxOUIsR0FBZXBzQyxFQUFNLGlCQUFrQjhwRSxHQUN2QzE5QixHQUFlbXdCLEVBQVMsY0FBYyxTQUFVaU4sR0FDNUMwQyxFQUFpQjFDLENBQ3JCLEdBQ0osQ0FDSixDQUNBLE9BQU9pQyxDQXJGUCxDQXNGSixHQUlBMXJFLEdBQVFxOUIsRUFBTyxDQUNmckosSUFBS2xGLE9BQ0xzOUMsVUFBV3Q5QyxRQUNadzhDLElBOEhILFNBQVNlLEdBQWVwOUQsR0FFaEJBLEVBQUV1ekIsSUFBSThwQyxTQUNOcjlELEVBQUV1ekIsSUFBSThwQyxVQUdOcjlELEVBQUV1ekIsSUFBSXFsQyxVQUNONTRELEVBQUV1ekIsSUFBSXFsQyxVQUVkLENBQ0EsU0FBUzBFLEdBQWV0OUQsR0FDcEJBLEVBQUVoUCxLQUFLdXNFLE9BQVN2OUQsRUFBRXV6QixJQUFJcmMsdUJBQzFCLENBQ0EsU0FBU3NtRCxHQUFpQng5RCxHQUN0QixJQUFJeTlELEVBQVN6OUQsRUFBRWhQLEtBQUswc0UsSUFDaEJILEVBQVN2OUQsRUFBRWhQLEtBQUt1c0UsT0FDaEJJLEVBQUtGLEVBQU9qbUQsS0FBTytsRCxFQUFPL2xELEtBQzFCb21ELEVBQUtILEVBQU9waUUsSUFBTWtpRSxFQUFPbGlFLElBQzdCLEdBQUlzaUUsR0FBTUMsRUFBSSxDQUNWNTlELEVBQUVoUCxLQUFLNnNFLE9BQVEsRUFDZixJQUFJLzhELEVBQUlkLEVBQUV1ekIsSUFBSWp3QixNQUNkeEMsRUFBRWc5RCxVQUFZaDlELEVBQUVpOUQsZ0JBQWtCLGFBQWEzcUQsT0FBT3VxRCxFQUFJLE9BQU92cUQsT0FBT3dxRCxFQUFJLE9BQzVFOThELEVBQUVrOUQsbUJBQXFCLElBQzNCLENBQ0osUUFySk9qdEUsR0FBTWdNLEtBdUpiLElBQUlraEUsR0FBcUIsQ0FDckJsQixXQUFZQSxHQUNabUIsZ0JBeEprQixDQUNsQm50RSxNQUFPQSxHQUNQb3RFLFlBQWEsV0FDVCxJQUFJOTJDLEVBQVFqMkIsS0FDUnVCLEVBQVN2QixLQUFLdzdDLFFBQ2xCeDdDLEtBQUt3N0MsUUFBVSxTQUFValksRUFBT2tZLEdBQzVCLElBQUlHLEVBQXdCakIsR0FBa0Ixa0IsR0FFOUNBLEVBQU00bEIsVUFBVTVsQixFQUFNeWYsT0FBUXpmLEVBQU0rMkMsTUFBTSxHQUMxQyxHQUVBLzJDLEVBQU15ZixPQUFTemYsRUFBTSsyQyxLQUNyQnB4QixJQUNBcjZDLEVBQU95TyxLQUFLaW
31CLEVBQU9zTixFQUFPa1ksRUFDOUIsQ0FDSixFQUNBdGpCLE9BQVEsU0FBVTVDLEdBT2QsSUFOQSxJQUFJNUIsRUFBTTN6QixLQUFLMnpCLEtBQU8zekIsS0FBSzh0QyxPQUFPbHVDLEtBQUsrekIsS0FBTyxPQUMxQ2p3QixFQUFNMkwsT0FBTzFCLE9BQU8sTUFDcEJzL0QsRUFBZ0JqdEUsS0FBS2l0RSxhQUFlanRFLEtBQUswYSxTQUN6Q3d5RCxFQUFjbHRFLEtBQUtndkMsT0FBTzlxQixTQUFXLEdBQ3JDeEosRUFBWTFhLEtBQUswYSxTQUFXLEdBQzVCeXlELEVBQWlCL0IsR0FBc0JwckUsTUFDbEN1SixFQUFJLEVBQUdBLEVBQUkyakUsRUFBWTlzRSxPQUFRbUosSUFFcEMsSUFESXFGLEVBQUlzK0QsRUFBWTNqRSxJQUNkb3FCLElBQ0YsR0FBYSxNQUFUL2tCLEVBQUU4SCxLQUFvRCxJQUFyQytYLE9BQU83ZixFQUFFOEgsS0FBSzZCLFFBQVEsV0FDdkNtQyxFQUFTalUsS0FBS21JLEdBQ2RsTCxFQUFJa0wsRUFBRThILEtBQU85SCxHQUNaQSxFQUFFaFAsT0FBU2dQLEVBQUVoUCxLQUFPLENBQUMsSUFBSTIyRCxXQUFhNFcsTUFFdEMsQ0FDRCxJQUFJcDVDLEVBQU9ubEIsRUFBRXl6QixpQkFDVHFRLEVBQVMzZSxFQUNQdTFCLEdBQWlCdjFCLEVBQUttTixLQUFLcHFCLFVBQVlpZCxFQUFLSixLQUFPLEdBQ25EL2tCLEVBQUUra0IsSUFDUmdRLEdBQU8sK0NBQStDM2hCLE9BQU8wd0IsRUFBUSxLQUN6RSxDQUdSLEdBQUl1NkIsRUFBYyxDQUNkLElBQUlELEVBQU8sR0FDUEksRUFBVSxHQUNkLElBQVM3akUsRUFBSSxFQUFHQSxFQUFJMGpFLEVBQWE3c0UsT0FBUW1KLElBQUssQ0FDMUMsSUFBSXFGLEtBQUlxK0QsRUFBYTFqRSxJQUNuQjNKLEtBQUsyMkQsV0FBYTRXLEVBRXBCditELEVBQUVoUCxLQUFLMHNFLElBQU0xOUQsRUFBRXV6QixJQUFJcmMsd0JBQ2ZwaUIsRUFBSWtMLEVBQUU4SCxLQUNOczJELEVBQUt2bUUsS0FBS21JLEdBR1Z3K0QsRUFBUTNtRSxLQUFLbUksRUFFckIsQ0FDQTVPLEtBQUtndEUsS0FBT3ozQyxFQUFFNUIsRUFBSyxLQUFNcTVDLEdBQ3pCaHRFLEtBQUtvdEUsUUFBVUEsQ0FDbkIsQ0FDQSxPQUFPNzNDLEVBQUU1QixFQUFLLEtBQU1qWixFQUN4QixFQUNBaFAsUUFBUyxXQUNMLElBQUlnUCxFQUFXMWEsS0FBS2l0RSxhQUNoQmxCLEVBQVkvckUsS0FBSytyRSxZQUFjL3JFLEtBQUt1SCxNQUFRLEtBQU8sUUFDbERtVCxFQUFTdGEsUUFBV0osS0FBS3F0RSxRQUFRM3lELEVBQVMsR0FBR3luQixJQUFLNHBDLEtBS3ZEcnhELEVBQVMzRCxRQUFRaTFELElBQ2pCdHhELEVBQVMzRCxRQUFRbTFELElBQ2pCeHhELEVBQVMzRCxRQUFRcTFELElBSWpCcHNFLEtBQUtzdEUsUUFBVS8vRCxTQUFTeU4sS0FBS3dLLGFBQzdCOUssRUFBUzNELFNBQVEsU0FBVW5JLEdBQ3ZCLEdBQUlBLEVBQUVoUCxLQUFLNnNFLE1BQU8sQ0FDZCxJQUFJYyxFQUFPMytELEVBQUV1ekIsSUFDVHp5QixFQUFJNjlELEVBQUtyN0QsTUFDYjZ6RCxHQUFtQndILEVBQU14QixHQUN6QnI4RCxFQUFFZzlELFVBQVloOUQsRUFBRWk5RCxnQkFBa0JqOUQsRUFBRWs5RCxtQkFBcUIsR0FDekRXLEVBQUtyMkQsaUJBQWlCb3VELEdBQXFCaUksRUFBS3RCLFFBQVUsU0FBUzF5QixFQUFHOTNDLEdBQzlEQSxHQUFLQSxFQUFFSSxTQUFXMHJFLEdBR2pCOXJFLElBQUssYUFBYWtWLEtBQUtsVixFQUFFK3JFLGdCQUMxQkQsRUFBS24yRCxvQkFBb0JrdUQsR0FBb0IvckIsR0FDN0NnMEIsRUFBS3RCLFFBQVUsS0FDZmhHLEdBQXNCc0gsRUFBTXhCLEdBRXBDLEVBQ0osQ0FDSixJQUNKLEVBQ0F2cUUsUUFBUyxDQUNMNnJFLFFBQVMsU0FBVXAyRCxFQUFJODBELEdBRW5CLElBQUs3RyxHQUNELE9BQU8sRUFHWCxHQUFJbGxFLEtBQUt5dEUsU0FDTCxPQUFPenRFLEtBQUt5dEUsU0FPaEIsSUFBSXJrQixFQUFRbnlDLEVBQUd5MkQsWUFDWHoyRCxFQUFHcWxELG9CQUNIcmxELEVBQUdxbEQsbUJBQW1CdmxELFNBQVEsU0FBVXFsRCxHQUNwQ3IwRCxHQUFZcWhELEVBQU9nVCxFQUN2QixJQUVKeDBELEdBQVN3aEQsRUFBTzJpQixHQUNoQjNpQixFQUFNbDNDLE1BQU1FLFFBQVUsT0FDdEJwUyxLQUFLbzVCLElBQUkvYyxZQUFZK3NDLEdBQ3JCLElBQUloa0IsRUFBTytnQyxHQUFrQi9jLEdBRTdCLE9BREFwcEQsS0FBS281QixJQUFJdFEsWUFBWXNnQyxHQUNicHBELEtBQUt5dEUsU0FBV3JvQyxFQUFLNmhDLFlBQ2pDLEtBbUNScnRDLEdBQUk3b0IsT0FBT3V1QixZQUFjQSxHQUN6QjFGLEdBQUk3b0IsT0FBT2t1QixjQUFnQkEsR0FDM0JyRixHQUFJN29CLE9BQU9tdUIsZUFBaUJBLEdBQzVCdEYsR0FBSTdvQixPQUFPcXVCLGdCQUFrQkEsR0FDN0J4RixHQUFJN29CLE9BQU9vdUIsaUJBQW1CQSxHQUU5Qm5DLEVBQU9wRCxHQUFJOWlCLFFBQVE4MUMsV0FBWWllLElBQy9CN3RDLEVBQU9wRCxHQUFJOWlCLFFBQVF0WCxXQUFZcXRFLElBRS9CanpDLEdBQUk5cEIsVUFBVStyQyxVQUFZM2IsR0FBWTRwQyxHQUFRMXNDLEVBRTlDeEQsR0FBSTlwQixVQUFVODNDLE9BQVMsU0FBVTN3QyxFQUFJd2tDLEdBRWpDLE9BQU9TLEdBQWVsOEMsS0FEdEJpWCxFQUFLQSxHQUFNaXBCLEdBQVk4eUIsR0FBTS83QyxRQUFNaEYsRUFDSHdwQyxFQUNwQyxFQUdJdmIsSUFDQTU3QixZQUFXLFdBQ0h5TSxFQUFPNnRCLFdBQ0hBLEdBQ0FBLEdBQVMrVixLQUFLLE9BQVEvYSxJQUl0Qnh5QixRQUFRQSxRQUFRZytCLEtBQU8sT0FBUyxPQUFPLHFIQUlsQixJQUF6QnIwQixFQUFPNHRCLGVBQ1ksb0JBQVp2M0IsU0FFUEEsUUFBUUEsUUFBUWcrQixLQUFPLE9BQVMsT0FBTywwS0FJL0MsR0FBRyxHQUdQLElBQUl1b0MsR0FBZSwyQkFDZkMsR0FBZ0IseUJBQ2hCQyxHQUFhOXhDLEdBQU8sU0FBVSt4QyxHQUM5QixJQUFJdnNELEVBQU91c0QsRUFBVyxHQUFHNS9ELFFBQVEwL0QsR0FBZSxRQUM1QzF0RCxFQUFRNHRELEVBQVcsR0FBRzUvRCxRQUFRMC9ELEdBQWUsUUFDakQsT0FBTyxJQUFJaDdDLE9BQU9yUixFQUFPLGdCQUFrQnJCLEVBQU8sSUFDdEQsSUFDQSxTQUFTNnRELEdBQVVuckUsRUFBTWtyRSxHQUVyQixJQUFJRSxFQUFRRixFQUFhRCxHQUFXQyxHQUFjSCxHQUNsRCxHQUFLSyxFQUFNcjNELEtBQUsvVCxHQUFoQixDQU9BLElBSkEsSUFHSSt2QixFQUFPeHZCLEVBQU84cUUsRUFIZEMsRUFBUyxHQUNUQyxFQUFZLEd
3BQ1poaEMsRUFBYTZnQyxFQUFNN2dDLFVBQVksRUFFM0J4YSxFQUFRcTdDLEVBQU1uN0MsS0FBS2p3QixJQUFRLEVBQy9CTyxFQUFRd3ZCLEVBQU14dkIsT0FFRmdxQyxJQUNSZ2hDLEVBQVUxbkUsS0FBTXduRSxFQUFhcnJFLEVBQUtxUyxNQUFNazRCLEVBQVdocUMsSUFDbkQrcUUsRUFBT3puRSxLQUFLa2UsS0FBS0MsVUFBVXFwRCxLQUcvQixJQUFJbFIsRUFBTUQsR0FBYW5xQyxFQUFNLEdBQUdSLFFBQ2hDKzdDLEVBQU96bkUsS0FBSyxNQUFNdWIsT0FBTys2QyxFQUFLLE1BQzlCb1IsRUFBVTFuRSxLQUFLLENBQUUsV0FBWXMyRCxJQUM3QjV2QixFQUFZaHFDLEVBQVF3dkIsRUFBTSxHQUFHdnlCLE1BQ2pDLENBS0EsT0FKSStzQyxFQUFZdnFDLEVBQUt4QyxTQUNqQit0RSxFQUFVMW5FLEtBQU13bkUsRUFBYXJyRSxFQUFLcVMsTUFBTWs0QixJQUN4QytnQyxFQUFPem5FLEtBQUtrZSxLQUFLQyxVQUFVcXBELEtBRXhCLENBQ0h0dkIsV0FBWXV2QixFQUFPcnZELEtBQUssS0FDeEJxdkQsT0FBUUMsRUF4QlosQ0EwQkosQ0FFQSxTQUFTQyxHQUFnQm4zRCxFQUFJSCxHQUN6QixJQUFJMlosRUFBTzNaLEVBQVEyWixNQUFRa3RDLEdBQ3ZCekwsRUFBY21OLEdBQWlCcG9ELEVBQUksU0FDbkNpN0MsR0FDVTZiLEdBQVU3YixFQUFhcDdDLEVBQVFnM0QsYUFFckNyOUMsRUFBSyxVQUFXek8sT0FBT2t3QyxFQUFhLE9BQS9CLHdLQUc4RGo3QyxFQUFHZ29ELFlBQW1CLE9BRzdGL00sSUFDQWo3QyxFQUFHaTdDLFlBQWN2dEMsS0FBS0MsVUFBVXN0QyxFQUFZaGtELFFBQVEsT0FBUSxLQUFLaWtCLFNBRXJFLElBQUlrOEMsRUFBZW5QLEdBQWVqb0QsRUFBSSxTQUFTLEdBQzNDbzNELElBQ0FwM0QsRUFBR28zRCxhQUFlQSxFQUUxQixDQUNBLFNBQVNDLEdBQVVyM0QsR0FDZixJQUFJclgsRUFBTyxHQU9YLE9BTklxWCxFQUFHaTdDLGNBQ0h0eUQsR0FBUSxlQUFlb2lCLE9BQU8vSyxFQUFHaTdDLFlBQWEsTUFFOUNqN0MsRUFBR28zRCxlQUNIenVFLEdBQVEsU0FBU29pQixPQUFPL0ssRUFBR28zRCxhQUFjLE1BRXRDenVFLENBQ1gsQ0FDQSxJQUFJMnVFLEdBQVEsQ0FDUjl3QyxXQUFZLENBQUMsZUFDYit3QyxjQUFlSixHQUNmSyxRQUFTSCxJQUdiLFNBQVNFLEdBQWN2M0QsRUFBSUgsR0FDdkIsSUFBSTJaLEVBQU8zWixFQUFRMlosTUFBUWt0QyxHQUN2QndGLEVBQWM5RCxHQUFpQnBvRCxFQUFJLFNBQ25Da3NELElBR2M0SyxHQUFVNUssRUFBYXJzRCxFQUFRZzNELGFBRXJDcjlDLEVBQUssVUFBV3pPLE9BQU9taEQsRUFBYSxPQUEvQix3S0FHOERsc0QsRUFBR2dvRCxZQUFtQixPQUdqR2hvRCxFQUFHa3NELFlBQWN4K0MsS0FBS0MsVUFBVWkrQyxHQUFlTSxLQUVuRCxJQUFJdUwsRUFBZXhQLEdBQWVqb0QsRUFBSSxTQUFTLEdBQzNDeTNELElBQ0F6M0QsRUFBR3kzRCxhQUFlQSxFQUUxQixDQUNBLFNBQVNDLEdBQVUxM0QsR0FDZixJQUFJclgsRUFBTyxHQU9YLE9BTklxWCxFQUFHa3NELGNBQ0h2akUsR0FBUSxlQUFlb2lCLE9BQU8vSyxFQUFHa3NELFlBQWEsTUFFOUNsc0QsRUFBR3kzRCxlQUNIOXVFLEdBQVEsVUFBVW9pQixPQUFPL0ssRUFBR3kzRCxhQUFjLE9BRXZDOXVFLENBQ1gsQ0FDQSxJQU1JZ3ZFLEdBTkExOEQsR0FBUSxDQUNSdXJCLFdBQVksQ0FBQyxlQUNiK3dDLGNBQWVBLEdBQ2ZDLFFBQVNFLElBSVRFLEdBQUssQ0FDTEMsT0FBUSxTQUFVeHBFLEdBR2QsT0FGQXNwRSxHQUFVQSxJQUFXcmhFLFNBQVM0TCxjQUFjLFFBQ3BDNkQsVUFBWTFYLEVBQ2JzcEUsR0FBUWg3RCxXQUNuQixHQUdBbTdELEdBQWF6ekMsRUFBUSw2RkFJckIwekMsR0FBbUIxekMsRUFBUSwyREFHM0IyekMsR0FBbUIzekMsRUFBUSxtU0FVM0I0ekMsR0FBWSw0RUFDWkMsR0FBc0IseUdBQ3RCQyxHQUFTLDZCQUE2QnB0RCxPQUFPd2QsRUFBY2pKLE9BQVEsTUFDbkU4NEMsR0FBZSxPQUFPcnRELE9BQU9vdEQsR0FBUSxTQUFTcHRELE9BQU9vdEQsR0FBUSxLQUM3REUsR0FBZSxJQUFJMThDLE9BQU8sS0FBSzVRLE9BQU9xdEQsS0FDdENFLEdBQWdCLGFBQ2hCbmtDLEdBQVMsSUFBSXhZLE9BQU8sUUFBUTVRLE9BQU9xdEQsR0FBYyxXQUNqREcsR0FBVSxxQkFFVkMsR0FBVSxTQUNWQyxHQUFxQixRQUVyQkMsR0FBcUJyMEMsRUFBUSx5QkFBeUIsR0FDdERzMEMsR0FBVSxDQUFDLEVBQ1hDLEdBQWMsQ0FDZCxPQUFRLElBQ1IsT0FBUSxJQUNSLFNBQVUsSUFDVixRQUFTLElBQ1QsUUFBUyxLQUNULE9BQVEsS0FDUixRQUFTLEtBRVRDLEdBQWMsNEJBQ2RDLEdBQTBCLG1DQUUxQkMsR0FBcUIxMEMsRUFBUSxnQkFBZ0IsR0FDN0MyMEMsR0FBMkIsU0FBVXQ4QyxFQUFLcnVCLEdBQzFDLE9BQU9xdUIsR0FBT3E4QyxHQUFtQnI4QyxJQUFvQixPQUFacnVCLEVBQUssRUFDbEQsRUFDQSxTQUFTNHFFLEdBQVdwakUsRUFBT3FqRSxHQUN2QixJQUFJQyxFQUFLRCxFQUF1QkosR0FBMEJELEdBQzFELE9BQU9oakUsRUFBTW9CLFFBQVFraUUsR0FBSSxTQUFVejlDLEdBQVMsT0FBT2s5QyxHQUFZbDlDLEVBQVEsR0FDM0UsQ0FDQSxTQUFTMDlDLEdBQVUvcUUsRUFBTXdSLEdBb0hyQixJQW5IQSxJQUtJczJCLEVBQU1rakMsRUFMTkMsRUFBUSxHQUNSQyxFQUFhMTVELEVBQVEwNUQsV0FDckJ6QixFQUFhajRELEVBQVFpNEQsWUFBYzF4QyxFQUNuQzJ4QyxFQUFtQmw0RCxFQUFRazRELGtCQUFvQjN4QyxFQUMvQ2w2QixFQUFRLEVBRVJtekIsRUFBVSxXQUdWLEdBRkE4VyxFQUFPOW5DLEVBRUZnckUsR0FBWVgsR0FBbUJXLEdBd0UvQixDQUNELElBQUlHLEVBQWlCLEVBQ2pCQyxFQUFlSixFQUFRanVELGNBQ3ZCc3VELEVBQWVmLEdBQVFjLEtBQ3RCZCxHQUFRYyxHQUFnQixJQUFJOTlDLE9BQU8sa0JBQW9CODlDLEVBQWUsVUFBVyxNQUNsRkUsRUFBT3RyRSxFQUFLNEksUUFBUXlpRSxHQUFjLFNBQVVob0UsRUFBSy9GLEVBQU13b0MsR0FhdkQsT0FaQXFsQyxFQUFpQnJsQyxFQUFPaHJDLE9BQ25CdXZFLEdBQW1CZSxJQUFrQyxhQUFqQkEsSUFDckM5dEUsRUFBT0EsRUFDRnNMLFFBQVEsc0JBQXVCLE1BQy9CQSxRQUFRLDRCQUE2QixPQUUxQytoRSxHQUF5QlMsRUFBYzl0RSxLQUN2Q0EsRUFBT0EsRUFBS3FTLE1BQU0sSUFFbEI2QixFQUFRKzVELE9BQ1IvNUQsRUFBUSs1RCxNQUFNanVFLEdBRVgsRUFDWCxJQUNBTyxHQUFTbUMsRUFBS2xGLE9BQVN3d0UsRUFBS3h3RSxPQUM1QmtGLEVBQU9zckUsRUFDUEUsRUFBWUosRUFBY3Z0RSxFQUFRc3RFLEVBQWdCdHRFLEVBQ3RELEtBL0Y4QyxDQUMxQyxJQUFJNHRFLEVBQVV6ckUsRUFBS2lULFFBQVEsS0FDM0IsR0FBZ0IsSUFBWnc0RCxFQUFlLENBRWYsR0FBSXRCLEdBQVE5NEQsS0FBS3JSLEdBQU8sQ0FDcEIsSUFBSTByRSxFQUFhMXJFLEVBQUtpVCxRQUFRLFVBQzlCLEdBQUl5NEQsR0FBYyxFQUtkLE9BSklsNkQsRUFBUW02RCxtQkFBcUJuNkQsRUFBUTI0RCxTQUNyQzM0RCxFQUFRMjRELFFBQVFucUUsRUFBS3d3QixVQUFVLEVBQUdrN0MsR0FBYTd0RSxFQUFPQSxFQUFRNnRFLEVBQWEsR0FFL0VFLEVBQVFGLEVBQWEsR0FDZCxVQUVmLENBRUEsR0FBSXRCLEdBQW1CLzRELEtBQUtyUixHQUFPLENBQy9CLElBQUk2ckUsRUFBaUI3ckUsRUFBS2lULFFBQVEsTUFDbEMsR0FBSTQ0RCxHQUFrQixFQUVsQixPQURBRCxFQUFRQyxFQUFpQixHQUNsQixVQUVmLENBRUEsSUFBSUMsRUFBZTlyRSxFQUFLcXRCLE1BQU02OEMsSUFDOUIsR0FBSTRCLEVBRUEsT0FEQUYsRUFBUUUsRUFBYSxHQUFHaHhFLFFBQ2pCLFdBR1gsSUFBSWl4RSxFQUFjL3JFLEVBQUtxdEIsTUFBTXlZLElBQzdCLEdBQUlpbUMsRUFBYSxDQUNiLElBQUlDLEVBQVdudUUsRUFHZixPQUZBK3RFLEVBQVFHLEVBQVksR0FBR2p4RSxRQUN2QjB3RSxFQUFZTyxFQUFZLEd
3BQUlDLEVBQVVudUUsR0FDL0IsVUFDWCxDQUVBLElBQUlvdUUsRUFBZ0JDLElBQ3BCLEdBQUlELEVBS0EsT0FKQUUsRUFBZUYsR0FDWHRCLEdBQXlCc0IsRUFBY3RlLFFBQVMzdEQsSUFDaEQ0ckUsRUFBUSxHQUVMLFVBRWYsQ0FDQSxJQUFJdHVFLE9BQU8sRUFBUWd1RSxPQUFPLEVBQVFsaUMsT0FBTyxFQUN6QyxHQUFJcWlDLEdBQVcsRUFBRyxDQUVkLElBREFILEVBQU90ckUsRUFBSzJQLE1BQU04N0QsS0FDVjNsQyxHQUFPejBCLEtBQUtpNkQsSUFDZnRCLEdBQWEzNEQsS0FBS2k2RCxJQUNsQm5CLEdBQVE5NEQsS0FBS2k2RCxJQUNibEIsR0FBbUIvNEQsS0FBS2k2RCxLQUV6QmxpQyxFQUFPa2lDLEVBQUtyNEQsUUFBUSxJQUFLLElBQ2QsSUFFWHc0RCxHQUFXcmlDLEVBQ1hraUMsRUFBT3RyRSxFQUFLMlAsTUFBTTg3RCxHQUV0Qm51RSxFQUFPMEMsRUFBS3d3QixVQUFVLEVBQUdpN0MsRUFDN0IsQ0FDSUEsRUFBVSxJQUNWbnVFLEVBQU8wQyxHQUVQMUMsR0FDQXN1RSxFQUFRdHVFLEVBQUt4QyxRQUViMFcsRUFBUSs1RCxPQUFTanVFLEdBQ2pCa1UsRUFBUSs1RCxNQUFNanVFLEVBQU1PLEVBQVFQLEVBQUt4QyxPQUFRK0MsRUFFakQsQ0F5QkEsR0FBSW1DLElBQVM4bkMsRUFPVCxPQU5BdDJCLEVBQVErNUQsT0FBUy81RCxFQUFRKzVELE1BQU12ckUsSUFDMUJpckUsRUFBTW53RSxRQUFVMFcsRUFBUTJaLE1BQ3pCM1osRUFBUTJaLEtBQUssMENBQTJDek8sT0FBTzFjLEVBQU0sS0FBTyxDQUN4RWxDLE1BQU9ELEVBQVFtQyxFQUFLbEYsU0FHckIsT0FFZixFQUNPa0YsR0FFYSxVQURGZ3hCLE1BTWxCLFNBQVM0NkMsRUFBUXZoRSxHQUNieE0sR0FBU3dNLEVBQ1RySyxFQUFPQSxFQUFLd3dCLFVBQVVubUIsRUFDMUIsQ0FDQSxTQUFTNmhFLElBQ0wsSUFBSXB1RSxFQUFRa0MsRUFBS3F0QixNQUFNMjhDLElBQ3ZCLEdBQUlsc0UsRUFBTyxDQUNQLElBQUl1dkIsRUFBUSxDQUNSc2dDLFFBQVM3dkQsRUFBTSxHQUNmZzFCLE1BQU8sR0FDUGgxQixNQUFPRCxHQUVYK3RFLEVBQVE5dEUsRUFBTSxHQUFHaEQsUUFFakIsSUFEQSxJQUFJaUQsT0FBTSxFQUFRZ3VELE9BQU8sSUFDaEJodUQsRUFBTWlDLEVBQUtxdEIsTUFBTTQ4QyxPQUNyQmxlLEVBQU8vckQsRUFBS3F0QixNQUFNdzhDLEtBQXdCN3BFLEVBQUtxdEIsTUFBTXU4QyxNQUN0RDdkLEVBQUtqdUQsTUFBUUQsRUFDYit0RSxFQUFRN2YsRUFBSyxHQUFHanhELFFBQ2hCaXhELEVBQUtodUQsSUFBTUYsRUFDWHd2QixFQUFNeUYsTUFBTTN4QixLQUFLNHFELEdBRXJCLEdBQUlodUQsRUFJQSxPQUhBc3ZCLEVBQU0rK0MsV0FBYXJ1RSxFQUFJLEdBQ3ZCNnRFLEVBQVE3dEUsRUFBSSxHQUFHakQsUUFDZnV5QixFQUFNdHZCLElBQU1GLEVBQ0x3dkIsQ0FFZixDQUNKLENBQ0EsU0FBUzgrQyxFQUFlOStDLEdBQ3BCLElBQUlzZ0MsRUFBVXRnQyxFQUFNc2dDLFFBQ2hCeWUsRUFBYS8rQyxFQUFNKytDLFdBQ25CbEIsSUFDZ0IsTUFBWkYsR0FBbUJyQixHQUFpQmhjLElBQ3BDNmQsRUFBWVIsR0FFWnRCLEVBQWlCL2IsSUFBWXFkLElBQVlyZCxHQUN6QzZkLEVBQVk3ZCxJQU1wQixJQUhBLElBQUkwZSxFQUFRNUMsRUFBVzliLE1BQWN5ZSxFQUNqQ3J0RCxFQUFJc08sRUFBTXlGLE1BQU1oNEIsT0FDaEJnNEIsRUFBUSxJQUFJL25CLE1BQU1nVSxHQUNiOWEsRUFBSSxFQUFHQSxFQUFJOGEsRUFBRzlhLElBQUssQ0FDeEIsSUFBSTJzQixFQUFPdkQsRUFBTXlGLE1BQU03dUIsR0FDbkJ1RCxFQUFRb3BCLEVBQUssSUFBTUEsRUFBSyxJQUFNQSxFQUFLLElBQU0sR0FDekNpNkMsRUFBbUMsTUFBWmxkLEdBQStCLFNBQVovOEIsRUFBSyxHQUM3Q3BmLEVBQVE4NkQsNEJBQ1I5NkQsRUFBUXE1RCxxQkFDZC8zQyxFQUFNN3VCLEdBQUssQ0FDUGhDLEtBQU0ydUIsRUFBSyxHQUNYcHBCLE1BQU9vakUsR0FBV3BqRSxFQUFPcWpFLElBRXpCcjVELEVBQVErNkQsb0JBQ1J6NUMsRUFBTTd1QixHQUFHbkcsTUFBUTh5QixFQUFLOXlCLE1BQVE4eUIsRUFBSyxHQUFHdkQsTUFBTSxRQUFRdnlCLE9BQ3BEZzRCLEVBQU03dUIsR0FBR2xHLElBQU02eUIsRUFBSzd5QixJQUU1QixDQUNLc3VFLElBQ0RwQixFQUFNOXBFLEtBQUssQ0FDUGt0QixJQUFLcy9CLEVBQ0w2ZSxjQUFlN2UsRUFBUTV3QyxjQUN2QitWLE1BQU9BLEVBQ1BoMUIsTUFBT3V2QixFQUFNdnZCLE1BQ2JDLElBQUtzdkIsRUFBTXR2QixNQUVmaXRFLEVBQVVyZCxHQUVWbjhDLEVBQVExVCxPQUNSMFQsRUFBUTFULE1BQU02dkQsRUFBUzc2QixFQUFPdTVDLEVBQU9oL0MsRUFBTXZ2QixNQUFPdXZCLEVBQU10dkIsSUFFaEUsQ0FDQSxTQUFTeXRFLEVBQVk3ZCxFQUFTN3ZELEVBQU9DLEdBQ2pDLElBQUlpcEUsRUFBS3lGLEVBTVQsR0FMYSxNQUFUM3VFLElBQ0FBLEVBQVFELEdBQ0QsTUFBUEUsSUFDQUEsRUFBTUYsR0FFTjh2RCxFQUVBLElBREE4ZSxFQUFvQjllLEVBQVE1d0MsY0FDdkJpcUQsRUFBTWlFLEVBQU1ud0UsT0FBUyxFQUFHa3NFLEdBQU8sR0FDNUJpRSxFQUFNakUsR0FBS3dGLGdCQUFrQkMsRUFERXpGLFVBUXZDQSxFQUFNLEVBRVYsR0FBSUEsR0FBTyxFQUFHLENBRVYsSUFBSyxJQUFJL2lFLEVBQUlnbkUsRUFBTW53RSxPQUFTLEVBQUdtSixHQUFLK2lFLEVBQUsvaUUsS0FDaENBLEVBQUkraUUsSUFBUXJaLElBQVluOEMsRUFBUTJaLE1BQ2pDM1osRUFBUTJaLEtBQUssUUFBUXpPLE9BQU91dUQsRUFBTWhuRSxHQUFHb3FCLElBQUssOEJBQStCLENBQ3JFdndCLE1BQU9tdEUsRUFBTWhuRSxHQUFHbkcsTUFDaEJDLElBQUtrdEUsRUFBTWhuRSxHQUFHbEcsTUFHbEJ5VCxFQUFRelQsS0FDUnlULEVBQVF6VCxJQUFJa3RFLEVBQU1obkUsR0FBR29xQixJQUFLdndCLEVBQU9DLEdBSXpDa3RFLEVBQU1ud0UsT0FBU2tzRSxFQUNmZ0UsRUFBVWhFLEdBQU9pRSxFQUFNakUsRUFBTSxHQUFHMzRDLEdBQ3BDLEtBQytCLE9BQXRCbytDLEVBQ0RqN0QsRUFBUTFULE9BQ1IwVCxFQUFRMVQsTUFBTTZ2RCxFQUFTLElBQUksRUFBTTd2RCxFQUFPQyxHQUdqQixNQUF0QjB1RSxJQUNEajdELEVBQVExVCxPQUNSMFQsRUFBUTFULE1BQU02dkQsRUFBUyxJQUFJLEVBQU83dkQsRUFBT0MsR0FFekN5VCxFQUFRelQsS0FDUnlULEVBQVF6VCxJQUFJNHZELEVBQVM3dkQsRUFBT0MsR0FHeEMsQ0ExSEF5dEUsR0EySEosQ0FFQSxJQWdCSXJnRCxHQUNBcTlDLEdBQ0FrRSxHQUNBQyxHQUNBQyxHQUNBQyxHQUNBQyxHQUNBQyxHQUNBQyxHQXhCQUMsR0FBTyxZQUNQQyxHQUFRLGVBQ1JDLEdBQWEscUNBQ2JDLEdBQWdCLGlDQUNoQkMsR0FBZ0IsV0FDaEJDLEdBQWUsV0FDZkMsR0FBUSxTQUNSQyxHQUFTLGtCQUNUQyxHQUFhLHdCQUNiQyxHQUFTLGtCQUNUQyxHQUFjLFNBQ2RDLEdBQWUsZ0JBQ2ZDLEd
3BQXFCLGNBQ3JCQyxHQUFtQnIzQyxFQUFPOHlDLEdBQUdDLFFBQzdCdUUsR0FBc0IsVUFXMUIsU0FBU0MsR0FBaUIzL0MsRUFBS3lFLEVBQU9wMkIsR0FDbEMsTUFBTyxDQUNIcUwsS0FBTSxFQUNOc21CLElBQUtBLEVBQ0wwcUMsVUFBV2ptQyxFQUNYZ21DLFNBQVVtVixHQUFhbjdDLEdBQ3ZCNm1DLFlBQWEsQ0FBQyxFQUNkajlELE9BQVFBLEVBQ1IwWSxTQUFVLEdBRWxCLENBSUEsU0FBU2xNLEdBQU05TyxFQUFVb1gsR0FDckIyWixHQUFPM1osRUFBUTJaLE1BQVFrdEMsR0FDdkJ3VSxHQUFtQnI3RCxFQUFRODdDLFVBQVl2MUIsRUFDdkMrMEMsR0FBc0J0N0QsRUFBUXdvQixhQUFlakMsRUFDN0NnMUMsR0FBMEJ2N0QsRUFBUXNvQixpQkFBbUIvQixFQUNyRCxJQUFJNEIsRUFBZ0Jub0IsRUFBUW1vQixlQUFpQjVCLEVBQzdDaTFDLEdBQWlCLFNBQVVyN0QsR0FDdkIsVUFBVUEsRUFBR2loQixXQUNUamhCLEVBQUdtbkQsU0FBUyxRQUNabm5ELEVBQUdtbkQsU0FBUyxnQkFDVm5uRCxFQUFHbW5ELFNBQVN4d0IsR0FBSzNPLEVBQWNob0IsRUFBR21uRCxTQUFTeHdCLElBQU0zTyxFQUFjaG9CLEVBQUcwYyxNQUM1RSxFQUNBcStDLEdBQWFwVSxHQUFvQjltRCxFQUFRMG1CLFFBQVMsaUJBQ2xEeTBDLEdBQWdCclUsR0FBb0I5bUQsRUFBUTBtQixRQUFTLG9CQUNyRDAwQyxHQUFpQnRVLEdBQW9COW1ELEVBQVEwbUIsUUFBUyxxQkFDdERzd0MsR0FBYWgzRCxFQUFRZzNELFdBQ3JCLElBR0kwRixFQUNBQyxFQUpBbEQsRUFBUSxHQUNSbUQsR0FBb0QsSUFBL0I1OEQsRUFBUTQ4RCxtQkFDN0JDLEVBQW1CNzhELEVBQVE4OEQsV0FHM0J2ZSxHQUFTLEVBQ1R3ZSxHQUFRLEVBQ1JDLEdBQVMsRUFDYixTQUFTQyxFQUFTOW9CLEVBQUs5OEMsR0FDZDJsRSxJQUNEQSxHQUFTLEVBQ1RyakQsR0FBS3c2QixFQUFLOThDLEdBRWxCLENBQ0EsU0FBUzZsRSxFQUFhcGpFLEdBdUJsQixHQXRCQXFqRSxFQUFxQnJqRSxHQUNoQnlrRCxHQUFXemtELEVBQVFzakUsWUFDcEJ0akUsRUFBVXVqRSxHQUFldmpFLEVBQVNrRyxJQUdqQ3k1RCxFQUFNbndFLFFBQVV3USxJQUFZNGlFLElBRXpCQSxFQUFLWSxLQUFPeGpFLEVBQVF5akUsUUFBVXpqRSxFQUFRMGpFLE9BRWxDQyxFQUFxQjNqRSxHQUV6QjRqRSxHQUFlaEIsRUFBTSxDQUNqQnpXLElBQUtuc0QsRUFBUXlqRSxPQUNiSSxNQUFPN2pFLEtBSVhtakUsRUFBUywrSUFFbUMsQ0FBRTN3RSxNQUFPd04sRUFBUXhOLFNBR2pFcXdFLElBQWtCN2lFLEVBQVE4akUsVUFDMUIsR0FBSTlqRSxFQUFReWpFLFFBQVV6akUsRUFBUTBqRSxLQUMxQkssR0FBb0IvakUsRUFBUzZpRSxPQUU1QixDQUNELEdBQUk3aUUsRUFBUWdrRSxVQUFXLENBSW5CLElBQUlsaUMsRUFBUzloQyxFQUFRaWtFLFlBQWMsYUFDbENwQixFQUFjNWxDLGNBQWdCNGxDLEVBQWM1bEMsWUFBYyxDQUFDLElBQUk2RSxHQUFVOWhDLENBQzlFLENBQ0E2aUUsRUFBYy80RCxTQUFTalUsS0FBS21LLEdBQzVCQSxFQUFRNU8sT0FBU3l4RSxDQUNyQixDQUlKN2lFLEVBQVE4SixTQUFXOUosRUFBUThKLFNBQVNqYSxRQUFPLFNBQVVtTyxHQUFLLE9BQVFBLEVBQUVnbUUsU0FBVyxJQUUvRVgsRUFBcUJyakUsR0FFakJBLEVBQVFvOUIsTUFDUnFuQixHQUFTLEdBRVQ4YyxHQUFpQnZoRSxFQUFRK2lCLE9BQ3pCa2dELEdBQVEsR0FHWixJQUFLLElBQUl0cUUsRUFBSSxFQUFHQSxFQUFJMm9FLEdBQWU5eEUsT0FBUW1KLElBQ3ZDMm9FLEdBQWUzb0UsR0FBR3FILEVBQVNrRyxFQUVuQyxDQUNBLFNBQVNtOUQsRUFBcUJoOUQsR0FFMUIsSUFBSzQ4RCxFQUVELElBREEsSUFBSWlCLE9BQVcsR0FDUEEsRUFBVzc5RCxFQUFHeUQsU0FBU3pELEVBQUd5RCxTQUFTdGEsT0FBUyxLQUM5QixJQUFsQjAwRSxFQUFTem5FLE1BQ1MsTUFBbEJ5bkUsRUFBU2x5RSxNQUNUcVUsRUFBR3lELFNBQVNtckIsS0FHeEIsQ0FDQSxTQUFTMHVDLEVBQXFCdDlELEdBQ1gsU0FBWEEsRUFBRzBjLEtBQTZCLGFBQVgxYyxFQUFHMGMsS0FDeEJvZ0QsRUFBUyxlQUFlL3hELE9BQU8vSyxFQUFHMGMsSUFBSywrQ0FDbkMsMEJBQTJCLENBQUV2d0IsTUFBTzZULEVBQUc3VCxRQUUzQzZULEVBQUdtbkQsU0FBU3J1RCxlQUFlLFVBQzNCZ2tFLEVBQVMsNEZBQzRCOThELEVBQUdnb0QsWUFBWSxTQUU1RCxDQThMQSxPQTdMQW9SLEdBQVUzd0UsRUFBVSxDQUNoQit3QixLQUFNQSxHQUNOKy9DLFdBQVkxNUQsRUFBUTA1RCxXQUNwQnpCLFdBQVlqNEQsRUFBUWk0RCxXQUNwQkMsaUJBQWtCbDRELEVBQVFrNEQsaUJBQzFCbUIscUJBQXNCcjVELEVBQVFxNUQscUJBQzlCeUIsNEJBQTZCOTZELEVBQVE4NkQsNEJBQ3JDWCxrQkFBbUJuNkQsRUFBUWkrRCxTQUMzQmxELGtCQUFtQi82RCxFQUFRKzZELGtCQUMzQnp1RSxNQUFPLFNBQVV1d0IsRUFBS3lFLEVBQU91NUMsRUFBT3Z1RSxFQUFPQyxHQUd2QyxJQUFJay9CLEVBQU1reEMsR0FBaUJBLEVBQWNseEMsSUFBTzh2QyxHQUF3QjErQyxHQUdwRXlNLElBQWUsUUFBUG1DLElBQ1JuSyxFQUFRNDhDLEdBQWM1OEMsSUFFMUIsSUFBSXhuQixFQUFVMGlFLEdBQWlCMy9DLEVBQUt5RSxFQUFPcTdDLEd
3BQ3ZDbHhDLElBQ0EzeEIsRUFBUTJ4QixHQUFLQSxHQUdUenJCLEVBQVErNkQsb0JBQ1JqaEUsRUFBUXhOLE1BQVFBLEVBQ2hCd04sRUFBUXZOLElBQU1BLEVBQ2R1TixFQUFRcXVELFlBQWNydUQsRUFBUXl0RCxVQUFVaDVDLFFBQU8sU0FBVTR2RCxFQUFXNWpCLEdBRWhFLE9BREE0akIsRUFBVTVqQixFQUFLOXBELE1BQVE4cEQsRUFDaEI0akIsQ0FDWCxHQUFHLENBQUMsSUFFUjc4QyxFQUFNcmhCLFNBQVEsU0FBVXM2QyxHQUNoQjhoQixHQUFtQng4RCxLQUFLMDZDLEVBQUs5cEQsT0FDN0JrcEIsR0FBSyxvR0FDZ0MzWixFQUFRKzZELGtCQUN2QyxDQUNFenVFLE1BQU9pdUQsRUFBS2p1RCxNQUFRaXVELEVBQUs5cEQsS0FBS2dSLFFBQVEsS0FDdENsVixJQUFLZ3VELEVBQUtqdUQsTUFBUWl1RCxFQUFLOXBELEtBQUtuSCxhQUU5QjZSLEVBRWQsSUFFQWlqRSxHQUFldGtFLEtBQWFnd0IsT0FDNUJod0IsRUFBUThqRSxXQUFZLEVBQ3BCamtELEdBQUsseUlBRUcsSUFBSXpPLE9BQU8yUixFQUFLLEtBQ2hCLGdDQUFpQyxDQUFFdndCLE1BQU93TixFQUFReE4sU0FHOUQsSUFBSyxJQUFJbUcsRUFBSSxFQUFHQSxFQUFJMG9FLEdBQWM3eEUsT0FBUW1KLElBQ3RDcUgsRUFBVXFoRSxHQUFjMW9FLEdBQUdxSCxFQUFTa0csSUFBWWxHLEVBRS9DeWtELElBQ0Q4ZixHQUFXdmtFLEdBQ1BBLEVBQVFvOUIsTUFDUnFuQixHQUFTLElBR2I4YyxHQUFpQnZoRSxFQUFRK2lCLE9BQ3pCa2dELEdBQVEsR0FFUnhlLEVBQ0ErZixHQUFnQnhrRSxHQUVWQSxFQUFRc2pFLFlBRWRtQixHQUFXemtFLEdBQ1gwa0UsR0FBVTFrRSxHQUNWMmtFLEdBQVkza0UsSUFFWDRpRSxHQUdHZSxFQUZKZixFQUFPNWlFLEdBS04rZ0UsRUFLRHFDLEVBQWFwakUsSUFKYjZpRSxFQUFnQjdpRSxFQUNoQjIvRCxFQUFNOXBFLEtBQUttSyxHQUtuQixFQUNBdk4sSUFBSyxTQUFVc3dCLEVBQUt2d0IsRUFBT0MsR0FDdkIsSUFBSXVOLEVBQVUyL0QsRUFBTUEsRUFBTW53RSxPQUFTLEdBRW5DbXdFLEVBQU1ud0UsUUFBVSxFQUNoQnF6RSxFQUFnQmxELEVBQU1BLEVBQU1ud0UsT0FBUyxHQUNqQzBXLEVBQVErNkQsb0JBQ1JqaEUsRUFBUXZOLElBQU1BLEdBRWxCMndFLEVBQWFwakUsRUFDakIsRUFDQWlnRSxNQUFPLFNBQVVqdUUsRUFBTVEsRUFBT0MsR0FDMUIsR0FBS293RSxHQWVMLElBQUlyekMsSUFDc0IsYUFBdEJxekMsRUFBYzkvQyxLQUNkOC9DLEVBQWNyVixTQUFTOXhDLGNBQWdCMXBCLEVBRjNDLENBS0EsSUFBSThYLEVBQVcrNEQsRUFBYy80RCxTQXVCN0IsR0FyQkk5WCxFQURBaXhFLEdBQVNqeEUsRUFBS3V2QixPQUNQcWpELEdBQVUvQixHQUNYN3dFLEVBQ0F3d0UsR0FBaUJ4d0UsR0FFakI4WCxFQUFTdGEsT0FJVnV6RSxFQUNvQixhQUFyQkEsR0FHT1YsR0FBWXQ4RCxLQUFLL1QsR0FBUSxHQUd6QixJQUlKOHdFLEVBQXFCLElBQU0sR0FiM0IsR0FlRCxDQUNERyxHQUE4QixhQUFyQkYsSUFFVi93RSxFQUFPQSxFQUFLc0wsUUFBUWdsRSxHQUFjLE1BRXRDLElBQUkvMUMsT0FBTSxFQUNONVgsT0FBUSxHQUNQOHZDLEdBQW1CLE1BQVR6eUQsSUFBaUJ1NkIsRUFBTTR3QyxHQUFVbnJFLEVBQU1rckUsS0FDbER2b0QsRUFBUSxDQUNKbFksS0FBTSxFQUNOc3hDLFdBQVl4aEIsRUFBSXdoQixXQUNoQnV2QixPQUFRL3dDLEVBQUkrd0MsT0FDWnRyRSxLQUFNQSxHQUdJLE1BQVRBLEdBQ0o4WCxFQUFTdGEsUUFDNkIsTUFBdkNzYSxFQUFTQSxFQUFTdGEsT0FBUyxHQUFHd0MsT0FDOUIyaUIsRUFBUSxDQUNKbFksS0FBTSxFQUNOekssS0FBTUEsSUFHVjJpQixJQUNJek8sRUFBUSs2RCxvQkFDUnRzRCxFQUFNbmlCLE1BQVFBLEVBQ2RtaUIsRUFBTWxpQixJQUFNQSxHQUVoQnFYLEVBQVNqVSxLQUFLOGUsR0FFdEIsQ0F0REEsT0FqQlkzaUIsSUFBU2xELEVBQ1RxMEUsRUFBUyxxRUFBc0UsQ0FBRTN3RSxNQUFPQSxLQUVsRlIsRUFBT0EsRUFBS3V2QixTQUNsQjRoRCxFQUFTLFNBQVUveEQsT0FBT3BmLEVBQU0sMkNBQTZDLENBQ3pFUSxNQUFPQSxHQW1FM0IsRUFDQXFzRSxRQUFTLFNBQVU3c0UsRUFBTVEsRUFBT0MsR0FHNUIsR0FBSW93RSxFQUFlLENBQ2YsSUFBSWx1RCxFQUFRLENBQ1JsWSxLQUFNLEVBQ056SyxLQUFNQSxFQUNObWdDLFdBQVcsR0FFWGpzQixFQUFRKzZELG9CQUNSdHNELEVBQU1uaUIsTUFBUUEsRUFDZG1pQixFQUFNbGlCLElBQU1BLEdBRWhCb3dFLEVBQWMvNEQsU0FBU2pVLEtBQUs4ZSxFQUNoQyxDQUNKLElBRUdpdUQsQ0FDWCxDQUNBLFNBQVMyQixHQUFXbCtELEdBQ3FCLE1BQWpDb29ELEdBQWlCcG9ELEVBQUksV0FDckJBLEVBQUcrMkIsS0FBTSxFQUVqQixDQUNBLFNBQVNvbkMsR0FBZ0JuK0QsR0FDckIsSUFBSXBNLEVBQU9vTSxFQUFHb25ELFVBQ1Z4aUMsRUFBTWh4QixFQUFLekssT0FDZixHQUFJeTdCLEVBRUEsSUFEQSxJQUFJekQsRUFBU25oQixFQUFHbWhCLE1BQVEsSUFBSS9uQixNQUFNd3JCLEdBQ3pCdHlCLEVBQUksRUFBR0EsRUFBSXN5QixFQUFLdHlCLElBQ3JCNnVCLEVBQU03dUIsR0FBSyxDQUNQaEMsS0FBTXNELEVBQUt0QixHQUFHaEMsS0FDZHVGLE1BQU82WCxLQUFLQyxVQUFVL1osRUFBS3RCLEdBQUd1RCxRQUViLE1BQWpCakMsRUFBS3RCLEdBQUduRyxRQUNSZzFCLEVBQU03dUIsR0FBR25HLE1BQVF5SCxFQUFLdEIsR0FBR25HLE1BQ3pCZzFCLEVBQU03dUIsR0FBR2xHLElBQU13SCxFQUFLdEIsR0FBR2xHLFVBSXpCNFQsRUFBRysyQixNQUVULzJCLEVBQUcrbUQsT0FBUSxFQUVuQixDQUNBLFNBQVNtVyxHQUFldmpFLEVBQVNrRyxHQUM3QjIrRCxHQUFXN2tFLEdBR1hBLEVBQVFvdEQsT0FDSHB0RCxFQUFROEYsTUFBUTlGLEVBQVFpOUIsY0FBZ0JqOUIsRUFBUXl0RCxVQUFVaitELE9BQy9EczFFLEdBQVc5a0UsR0FDWCtrRSxHQUFtQi9rRSxHQUNuQmdsRSxHQUFrQmhsRSxHQUNsQmlsRSxHQUFpQmpsRSxHQUNqQixJQUFLLElBQUlySCxFQUFJLEVBQUdBLEVBQUl5b0UsR0FBVzV4RSxPQUFRbUosSUFDbkNxSCxFQUFVb2hFLEdBQVd6b0UsR0FBR3FILEVBQVNrRyxJQUFZbEcsRUFHakQsT0FEQWtsRSxHQUFhbGxFLEdBQ05BLENBQ1gsQ0FDQSxTQUFTNmtFLEdBQVd4K0QsR0FDaEIsSUFBSThsRCxFQUFNbUMsR0FBZWpvRCxFQUFJLE9BQzdCLEdBQUk4bEQsRUFBSyxDQUtELEdBSGUsYUFBWDlsRCxFQUFHMGMsS0FDSGxELEdBQUssc0VBQXVFdXVDLEdBQWtCL25ELEVBQUksUUFFbEdBLEVBQUc4K0QsSUFBSyxDQUNSLElBQUl0bkMsRUFBV3gzQixFQUFHKytELFdBQWEvK0QsRUFBR2cvRCxVQUM5QjVwQixFQUFXcDFDLEVBQUdqVixPQUNkeXNDLEdBQ0FBLElBQWFzdUIsR0FDYjFRLEdBQ2lCLHFCQUFqQkEsRUFBUzE0QixLQUNUbEQsR0FBSyxvR0FDc0N1dUMsR0FBa0IvbkQsRUFBSSxRQUFRLEVBRWpGLENBRUpBLEVBQUdQLElBQU1xbUQsQ0FDYixDQUNKLENBQ0EsU0FBUzJZLEdBQVd6K0QsR0FD
3aEIsSUFBSTdILEVBQU04dkQsR0FBZWpvRCxFQUFJLE9BQ3pCN0gsSUFDQTZILEVBQUc3SCxJQUFNQSxFQUNUNkgsRUFBR2c5QyxTQUFXaWlCLEdBQVdqL0QsR0FFakMsQ0FDQSxTQUFTbytELEdBQVdwK0QsR0FDaEIsSUFBSThsRCxFQUNKLEdBQUtBLEVBQU1zQyxHQUFpQnBvRCxFQUFJLFNBQVcsQ0FDdkMsSUFBSWttQixFQUFNZzVDLEdBQVNwWixHQUNmNS9CLEVBQ0FILEVBQU8vbEIsRUFBSWttQixHQUdYMU0sR0FBSyw2QkFBNkJ6TyxPQUFPKzZDLEdBQU05bEQsRUFBR2dvRCxZQUFZLFNBRXRFLENBQ0osQ0FDQSxTQUFTa1gsR0FBU3BaLEdBQ2QsSUFBSXFaLEVBQVVyWixFQUFJcHFDLE1BQU04L0MsSUFDeEIsR0FBSzJELEVBQUwsQ0FFQSxJQUFJajVDLEVBQU0sQ0FBQyxFQUNYQSxFQUFJNDRDLElBQU1LLEVBQVEsR0FBR2prRCxPQUNyQixJQUFJa2tELEVBQVFELEVBQVEsR0FBR2prRCxPQUFPamtCLFFBQVF5a0UsR0FBZSxJQUNqRDJELEVBQWdCRCxFQUFNMWpELE1BQU0rL0MsSUFXaEMsT0FWSTRELEdBQ0FuNUMsRUFBSWs1QyxNQUFRQSxFQUFNbm9FLFFBQVF3a0UsR0FBZSxJQUFJdmdELE9BQzdDZ0wsRUFBSTg0QyxVQUFZSyxFQUFjLEdBQUdua0QsT0FDN0Jta0QsRUFBYyxLQUNkbjVDLEVBQUk2NEMsVUFBWU0sRUFBYyxHQUFHbmtELFNBSXJDZ0wsRUFBSWs1QyxNQUFRQSxFQUVUbDVDLENBZkcsQ0FnQmQsQ0FDQSxTQUFTbTRDLEdBQVVyK0QsR0FDZixJQUFJOGxELEVBQU1zQyxHQUFpQnBvRCxFQUFJLFFBQy9CLEdBQUk4bEQsRUFDQTlsRCxFQUFHbTlELEdBQUtyWCxFQUNSeVgsR0FBZXY5RCxFQUFJLENBQ2Y4bEQsSUFBS0EsRUFDTDBYLE1BQU94OUQsUUFHVixDQUNxQyxNQUFsQ29vRCxHQUFpQnBvRCxFQUFJLFlBQ3JCQSxFQUFHcTlELE1BQU8sR0FFZCxJQUFJRCxFQUFTaFYsR0FBaUJwb0QsRUFBSSxhQUM5Qm85RCxJQUNBcDlELEVBQUdvOUQsT0FBU0EsRUFFcEIsQ0FDSixDQUNBLFNBQVNNLEdBQW9CMTlELEVBQUlqVixHQUM3QixJQUFJOHlDLEVBQU95aEMsR0FBZ0J2MEUsRUFBTzBZLFVBQzlCbzZCLEdBQVFBLEVBQUtzL0IsR0FDYkksR0FBZTEvQixFQUFNLENBQ2pCaW9CLElBQUs5bEQsRUFBR285RCxPQUNSSSxNQUFPeDlELElBSVh3WixHQUFLLEtBQUt6TyxPQUFPL0ssRUFBR285RCxPQUFTLFlBQWNwOUQsRUFBR285RCxPQUFTLElBQU0sT0FBUSxLQUNqRSxvQkFBb0JyeUQsT0FBTy9LLEVBQUcwYyxJQUFLLGlDQUFrQzFjLEVBQUdnb0QsWUFBWWhvRCxFQUFHbzlELE9BQVMsWUFBYyxVQUUxSCxDQUNBLFNBQVNrQyxHQUFnQjc3RCxHQUVyQixJQURBLElBQUluUixFQUFJbVIsRUFBU3RhLE9BQ1ZtSixLQUFLLENBQ1IsR0FBeUIsSUFBckJtUixFQUFTblIsR0FBRzhELEtBQ1osT0FBT3FOLEVBQVNuUixHQUdTLE1BQXJCbVIsRUFBU25SLEdBQUczRyxNQUNaNnRCLEdBQUssU0FBVXpPLE9BQU90SCxFQUFTblIsR0FBRzNHLEtBQUt1dkIsT0FBUSxtQ0FDM0MsbUJBQW9CelgsRUFBU25SLElBRXJDbVIsRUFBU21yQixLQUVqQixDQUNKLENBQ0EsU0FBUzJ1QyxHQUFldjlELEVBQUk0YyxHQUNuQjVjLEVBQUd1L0QsZUFDSnYvRCxFQUFHdS9ELGFBQWUsSUFFdEJ2L0QsRUFBR3UvRCxhQUFhL3ZFLEtBQUtvdEIsRUFDekIsQ0FDQSxTQUFTMGhELEdBQVl0K0QsR0FFTCxNQUREb29ELEdBQWlCcG9ELEVBQUksWUFFNUJBLEVBQUdrbkIsTUFBTyxFQUVsQixDQUdBLFNBQVN3M0MsR0FBbUIxK0QsR0FDeEIsSUFBSTI5RCxFQUNXLGFBQVgzOUQsRUFBRzBjLE1BQ0hpaEQsRUFBWXZWLEdBQWlCcG9ELEVBQUksV0FHN0J3WixHQUFLLDBOQUd1QnhaLEVBQUdnb0QsWUFBbUIsT0FBRyxHQUV6RGhvRCxFQUFHMjlELFVBQVlBLEdBQWF2VixHQUFpQnBvRCxFQUFJLGdCQUUzQzI5RCxFQUFZdlYsR0FBaUJwb0QsRUFBSSxpQkFFbkNBLEVBQUdtbkQsU0FBUyxVQUNaM3RDLEdBQUssd0RBQXdEek8sT0FBTy9LLEVBQUcwYyxJQUFLLE1BQXZFLGtHQUVrQzFjLEVBQUdnb0QsWUFBWSxlQUFlLEdBRXpFaG9ELEVBQUcyOUQsVUFBWUEsR0FHbkIsSUFpQ1k2QixFQWpDUjVCLEVBQWEzVixHQUFlam9ELEVBQUksUUFZaEMsR0FYQTQ5RCxJQUNBNTlELEVBQUc0OUQsV0FBNEIsT0FBZkEsRUFBc0IsWUFBY0EsRUFDcEQ1OUQsRUFBR3kvRCxxQkFBdUJ6L0QsRUFBR21uRCxTQUFTLFdBQVlubkQsRUFBR21uRCxTQUFTLGdCQUcvQyxhQUFYbm5ELEVBQUcwYyxLQUF1QjFjLEVBQUcyOUQsV0FDN0IzVyxHQUFRaG5ELEVBQUksT0FBUTQ5RCxFQUFZN1YsR0FBa0IvbkQsRUFBSSxVQUszQyxhQUFYQSxFQUFHMGMsS0FHSCxHQURJOGlELEVBQWNqWCxHQUF3QnZvRCxFQUFJKzdELElBQzdCLEVBRUwvN0QsRUFBRzQ5RCxZQUFjNTlELEVBQUcyOUQsWUFDcEJua0QsR0FBSyxxREFBc0R4WixHQUUzREEsRUFBR2pWLFNBQVdzd0UsR0FBZXI3RCxFQUFHalYsU0FDaEN5dUIsR0FBSyxxRkFDMEJ4WixHQUd2QyxJQUFJN0YsRUFBS3VsRSxHQUFZRixHQUFjOWpDLEVBQVN2aEMsRUFBRzdKLEtBQU11MkQsRUFBVTFzRCxFQUFHMHNELFFBQ2xFN21ELEVBQUc0OUQsV0FBYWxpQyxFQUNoQjE3QixFQUFHeS9ELGtCQUFvQjVZLEVBQ3ZCN21ELEVBQUcyOUQsVUFBWTZCLEVBQVkzcEUsT0FBU3VtRSxFQUN4QyxPQUtBLEdBRElvRCxFQUFjalgsR0FBd0J2b0QsRUFBSSs3RCxJQUM3QixDQUVKVixHQUFlcjdELElBQ2hCd1osR0FBSyx1REFBd0RnbUQsSUFFN0R4L0QsRUFBRzI5RCxXQUFhMzlELEVBQUc0OUQsYUFDbkJwa0QsR0FBSyxxREFBc0R4WixHQUUzREEsRUFBRzQyQixhQUNIcGQsR0FBSyxpSEFDc0RnbUQsR0FJbkUsSUFBSWhrQyxFQUFReDdCLEVBQUc0MkIsY0FBZ0I1MkIsRUFBRzQyQixZQUFjLENBQUMsR0FDN0NyYyxFQUFLbWxELEdBQVlGLEdBQWNHLEVBQVNwbEQsRUFBR2pxQixLQUMzQ3N2RSxHQURpRC9ZLEVBQVV0c0MsRUFBR3NzQyxRQUMzQ3JyQixFQUFNbWtDLEdBQVV0RCxHQUFpQixXQUFZLEdBQUlyOEQsSUFDeEU0L0QsRUFBZ0JoQyxXQUFhK0IsRUFDN0JDLEVBQWdCSCxrQkFBb0I1WSxFQUNwQytZLEVBQWdCbjhELFNBQVd6RCxFQUFHeUQsU0FBU2phLFFBQU8sU0FBVW1PLEdBQ3BELElBQUtBLEVBQUVnbUUsVUFFSCxPQURBaG1FLEVBQUU1TSxPQUFTNjBFLEdBQ0osQ0FFZixJQUNBQSxFQUFnQmpDLFVBQVk2QixFQUFZM3BFLE9BQVN1bUUsR0FFakRwOEQsRUFBR3lELFNBQVcsR0FFZHpELEVBQUcrbUQsT0FBUSxDQUNmLENBR1osQ0FDQSxTQUFTMlksR0FBWXRWLEdBQ2pCLElBQUk5NUQsRUFBTzg1RCxFQUFROTVELEtBQUsyRyxRQUFROGtFLEdBQVEsSUFTeEMsT0FSS3pyRSxJQUN1QixNQUFwQjg1RCxFQUFROTVELEtBQUssR0FDYkEsRUFBTyxVQUdQa3BCLEdBQUssZ0RBQWlENHdDLElBR3ZEdVIsR0FBYWo4RCxLQUFLcFAsR0FFakIsQ0FBRUEsS0FBTUEsRUFBSzBOLE1BQU0sR0FBSSxHQUFJNm9ELFNBQVMsR0FFcEMsQ0FBRXYyRCxLQUFNLElBQUt5YSxPQUFPemEsRUFBTSxLQUFPdTJELFNBQVMsRUFDdEQsQ0FFQSxTQUFTOFgsR0FBa0IzK0QsR0FDUixTQUFYQSxFQUFHMGMsTUFDSDFjLEVBQUc2L0QsU0FBVzVYLEdBQWVqb0QsRUFBSSxRQUM3QkEsRUFBR1AsS0FDSCtaLEdBQUssOEpBRTZDdXVDLEdBQWtCL25ELEVBQUksUUFHcEYsQ0FDQSxTQUFTNCtELEdBQWlCNStELEdBQ3RCLElBQUlvcUQsR0FDQ0EsRUFBVW5DLEdBQWVqb0QsRUFBSSxTQUM5QkEsRUFBR2loQixVQUFZbXBDLEdBRTRCLE1BQTNDaEMsR0FBaUJwb0QsRUFBSSxxQkFDckJBLEVBQUdxekMsZ0JBQWlCLEVBRTVCLENBQ0EsU0FBU3dyQixHQUFhNytELEdBQ2xCLElBQ0kxTixFQUFHOGEsRUFBRzljLEVBQU02ekQsRUFBU3R1RCxFQUFPbXVELEVBQVc4YixFQUFTQyxFQURoRG5zRSxFQUFPb00sRUFBR29uRCxVQUVkLElBQUs5MEQsRUFBSSxFQUFHOGEsRUFBSXhaLEVBQUt6SyxPQUFRbUosRUFBSThhLEVBQUc5YSxJQUdoQyxHQUZBaEMsRUFBTzZ6RCxFQUFVdndELEVBQUt0QixHQU
3FHaEMsS0FDekJ1RixFQUFRakMsRUFBS3RCLEdBQUd1RCxNQUNaMGxFLEdBQU03N0QsS0FBS3BQLEdBU1gsR0FQQTBQLEVBQUdnZ0UsYUFBYyxHQUVqQmhjLEVBQVlpYyxHQUFlM3ZFLEVBQUsyRyxRQUFRc2tFLEdBQU8sUUFHM0NqckUsRUFBT0EsRUFBSzJHLFFBQVE2a0UsR0FBWSxLQUVoQ0QsR0FBT244RCxLQUFLcFAsR0FFWkEsRUFBT0EsRUFBSzJHLFFBQVE0a0UsR0FBUSxJQUM1QmhtRSxFQUFRZ3dELEdBQWFod0QsSUFDckJrcUUsRUFBWXBFLEdBQWFqOEQsS0FBS3BQLE1BRTFCQSxFQUFPQSxFQUFLME4sTUFBTSxHQUFJLElBRUUsSUFBeEJuSSxFQUFNcWxCLE9BQU8veEIsUUFDYnF3QixHQUFLLHVFQUF3RXpPLE9BQU96YSxFQUFNLE1BRTFGMHpELElBQ0lBLEVBQVV4akMsT0FBU3UvQyxHQUVOLGVBRGJ6dkUsRUFBTzIwQixFQUFTMzBCLE1BRVpBLEVBQU8sYUFFWDB6RCxFQUFVa2MsUUFBVUgsSUFDcEJ6dkUsRUFBTzIwQixFQUFTMzBCLElBRWhCMHpELEVBQVVwVyxPQUNWa3lCLEVBQVVsWCxHQUFrQi95RCxFQUFPLFVBQzlCa3FFLEVBUUR2WSxHQUFXeG5ELEVBQUksY0FBZ0IrSyxPQUFPemEsRUFBTSxLQUFNd3ZFLEVBQVMsTUFBTSxFQUFPdG1ELEdBQU01bEIsRUFBS3RCLElBQUksSUFQdkZrMUQsR0FBV3huRCxFQUFJLFVBQVUrSyxPQUFPa2EsRUFBUzMwQixJQUFRd3ZFLEVBQVMsTUFBTSxFQUFPdG1ELEdBQU01bEIsRUFBS3RCLElBQzlFK3lCLEVBQVUvMEIsS0FBVTIwQixFQUFTMzBCLElBQzdCazNELEdBQVd4bkQsRUFBSSxVQUFVK0ssT0FBT3NhLEVBQVUvMEIsSUFBUXd2RSxFQUFTLE1BQU0sRUFBT3RtRCxHQUFNNWxCLEVBQUt0QixPQVU5RjB4RCxHQU
3FhQSxFQUFVeGpDLE9BQ3RCeGdCLEVBQUdpaEIsV0FBYWs2QyxHQUFvQm43RCxFQUFHMGMsSUFBSzFjLEVBQUdtbkQsU0FBUy93RCxLQUFNOUYsR0FDaEVzMkQsR0FBUTVtRCxFQUFJMVAsRUFBTXVGLEVBQU9qQyxFQUFLdEIsR0FBSXl0RSxHQUdsQy9ZLEdBQVFobkQsRUFBSTFQLEVBQU11RixFQUFPakMsRUFBS3RCLEdBQUl5dEUsUUFHckMsR0FBSXpFLEdBQUs1N0QsS0FBS3BQLEdBRWZBLEVBQU9BLEVBQUsyRyxRQUFRcWtFLEdBQU0sS0FDMUJ5RSxFQUFZcEUsR0FBYWo4RCxLQUFLcFAsTUFFMUJBLEVBQU9BLEVBQUswTixNQUFNLEdBQUksSUFFMUJ3cEQsR0FBV3huRCxFQUFJMVAsRUFBTXVGLEVBQU9tdUQsR0FBVyxFQUFPeHFDLEdBQU01bEIsRUFBS3RCLEdBQUl5dEUsT0FFNUQsQ0FJRCxJQUFJSSxHQUZKN3ZFLEVBQU9BLEVBQUsyRyxRQUFRc2tFLEdBQU8sS0FFUDcvQyxNQUFNa2dELElBQ3RCalksRUFBTXdjLEdBQVlBLEVBQVMsR0FDL0JKLEdBQVksRUFDUnBjLElBQ0FyekQsRUFBT0EsRUFBSzBOLE1BQU0sSUFBSzJsRCxFQUFJeDZELE9BQVMsSUFDaEN3eUUsR0FBYWo4RCxLQUFLaWtELEtBQ2xCQSxFQUFNQSxFQUFJM2xELE1BQU0sR0FBSSxHQUNwQitoRSxHQUFZLElBR3BCMVksR0FBYXJuRCxFQUFJMVAsRUFBTTZ6RCxFQUFTdHVELEVBQU84dEQsRUFBS29jLEVBQVcvYixFQUFXcHdELEVBQUt0QixJQUMxRCxVQUFUaEMsR0FDQTh2RSxHQUFtQnBnRSxFQUFJbkssRUFFL0IsTUFLY2loRSxHQUFVamhFLEVBQU9naEUsS0FFdkJyOUMsR0FBSyxHQUFHek8sT0FBT3phLEVBQU0sTUFBT3lhLE9BQU9sVixFQUFPLE9BQXJDLGtLQUd3RGpDLEVBQUt0QixJQUcxRTAwRCxHQUFRaG5ELEVBQUkxUCxFQUFNb2QsS0FBS0MsVUFBVTlYLEdBQVFqQyxFQUFLdEIsS0FHekMwTixFQUFHaWhCLFdBQ0ssVUFBVDN3QixHQUNBNnFFLEdBQW9CbjdELEVBQUcwYyxJQUFLMWMsRUFBR21uRCxTQUFTL3dELEtBQU05RixJQUM5Q3MyRCxHQUFRNW1ELEVBQUkxUCxFQUFNLE9BQVFzRCxFQUFLdEIsR0FJL0MsQ0FDQSxTQUFTMnNFLEdBQVdqL0QsR0FFaEIsSUFEQSxJQUFJalYsRUFBU2lWLEVBQ05qVixHQUFRLENBQ1gsUUFBbUJpUSxJQUFmalEsRUFBTyt6RSxJQUNQLE9BQU8sRUFFWC96RSxFQUFTQSxFQUFPQSxNQUNwQixDQUNBLE9BQU8sQ0FDWCxDQUNBLFNBQVNrMUUsR0FBZTN2RSxHQUNwQixJQUFJb3JCLEVBQVFwckIsRUFBS29yQixNQUFNb2dELElBQ3ZCLEdBQUlwZ0QsRUFBTyxDQUNQLElBQUkya0QsRUFBUSxDQUFDLEVBSWIsT0FIQTNrRCxFQUFNNWIsU0FBUSxTQUFVeUQsR0FDcEI4OEQsRUFBTTk4RCxFQUFFdkYsTUFBTSxLQUFNLENBQ3hCLElBQ09xaUUsQ0FDWCxDQUNKLENBQ0EsU0FBUy9ELEdBQWFuN0MsR0FFbEIsSUFEQSxJQUFJMTBCLEVBQU0sQ0FBQyxFQUNGNkYsRUFBSSxFQUFHOGEsRUFBSStULEVBQU1oNEIsT0FBUW1KLEVBQUk4YSxFQUFHOWEsS0FDakM3RixFQUFJMDBCLEVBQU03dUIsR0FBR2hDLE9BQVU2NEIsSUFBU0UsSUFDaEM3UCxHQUFLLHdCQUEwQjJILEVBQU03dUIsR0FBR2hDLEtBQU02d0IsRUFBTTd1QixJQUV4RDdGLEVBQUkwMEIsRUFBTTd1QixHQUFHaEMsTUFBUTZ3QixFQUFNN3VCLEdBQUd1RCxNQUVsQyxPQUFPcEosQ0FDWCxDQUVBLFNBQVM4eEUsR0FBVXYrRCxHQUNmLE1BQWtCLFdBQVhBLEVBQUcwYyxLQUErQixVQUFYMWMsRUFBRzBjLEdBQ3JDLENBQ0EsU0FBU3VoRCxHQUFlaitELEdBQ3BCLE1BQW1CLFVBQVhBLEVBQUcwYyxLQUNLLFdBQVgxYyxFQUFHMGMsT0FDRTFjLEVBQUdtbkQsU0FBUy93RCxNQUE2QixvQkFBckI0SixFQUFHbW5ELFNBQVMvd0QsS0FDOUMsQ0FDQSxJQUFJa3FFLEdBQVUsZUFDVkMsR0FBYSxVQUVqQixTQUFTeEMsR0FBYzU4QyxHQUVuQixJQURBLElBQUkrRSxFQUFNLEdBQ0Q1ekIsRUFBSSxFQUFHQSxFQUFJNnVCLEVBQU1oNEIsT0FBUW1KLElBQUssQ0FDbkMsSUFBSThuRCxFQUFPajVCLEVBQU03dUIsR0FDWmd1RSxHQUFRNWdFLEtBQUswNkMsRUFBSzlwRCxRQUNuQjhwRCxFQUFLOXBELEtBQU84cEQsRUFBSzlwRCxLQUFLMkcsUUFBUXNwRSxHQUFZLElBQzFDcjZDLEVBQUkxMkIsS0FBSzRxRCxHQUVqQixDQUNBLE9BQU9sMEIsQ0FDWCxDQUNBLFNBQVNrNkMsR0FBbUJwZ0UsRUFBSW5LLEdBRTVCLElBREEsSUFBSTJxRSxFQUFNeGdFLEVBQ0h3Z0UsR0FDQ0EsRUFBSTFCLEtBQU8wQixFQUFJcEIsUUFBVXZwRSxHQUN6QjJqQixHQUFLLElBQUl6TyxPQUFPL0ssRUFBRzBjLElBQUssY0FBZTNSLE9BQU9sVixFQUFPLFFBQWhELGtSQUlvRm1LLEVBQUdnb0QsWUFBWSxZQUU1R3dZLEVBQU1BLEVBQUl6MUUsTUFFbEIsQ0FXQSxTQUFTMDFFLEdBQWlCemdFLEVBQUlILEdBQzFCLEdBQWUsVUFBWEcsRUFBRzBjLElBQWlCLENBQ3BCLElBQUlqd0IsRUFBTXVULEVBQUdtbkQsU0FDYixJQUFLMTZELEVBQUksV0FDTCxPQUVKLElBQUkwOUQsT0FBYyxFQU9sQixJQU5JMTlELEVBQUksVUFBWUEsRUFBSSxrQkFDcEIwOUQsRUFBY2xDLEdBQWVqb0QsRUFBSSxTQUVoQ3ZULEVBQUkySixNQUFTK3pELElBQWUxOUQsRUFBSSxZQUNqQzA5RCxFQUFjLElBQUlwL0MsT0FBT3RlLEVBQUksVUFBVyxXQUV4QzA5RCxFQUFhLENBQ2IsSUFBSXVXLEVBQWN0WSxHQUFpQnBvRCxFQUFJLFFBQVEsR0FDM0MyZ0UsRUFBbUJELEVBQWMsTUFBTTMxRCxPQUFPMjFELEVBQWEsS0FBTyxHQUNsRUUsRUFBa0QsTUFBeEN4WSxHQUFpQnBvRCxFQUFJLFVBQVUsR0FDekM2Z0UsRUFBa0J6WSxHQUFpQnBvRCxFQUFJLGFBQWEsR0FFcEQ4Z0UsRUFBVUMsR0FBZ0IvZ0UsR0FFOUJvK0QsR0FBVzBDLEdBQ1g1WixHQUFXNFosRUFBUyxPQUFRLFlBQzVCNUQsR0FBZTRELEVBQVNqaEUsR0FDeEJpaEUsRUFBUTdELFdBQVksRUFDcEI2RCxFQUFRM0QsR0FBSyxJQUFJcHlELE9BQU9vL0MsRUFBYSxrQkFBb0J3VyxFQUN6RHBELEdBQWV1RCxFQUFTLENBQ3BCaGIsSUFBS2diLEVBQVEzRCxHQUNiSyxNQUFPc0QsSUFHWCxJQUFJRSxFQUFVRCxHQUFnQi9nRSxHQUM5Qm9vRCxHQUFpQjRZLEVBQVMsU0FBUyxHQUNuQzlaLEdBQVc4WixFQUFTLE9BQVEsU0FDNUI5RCxHQUFlOEQsRUFBU25oRSxHQUN4QjA5RCxHQUFldUQsRUFBUyxDQUNwQmhiLElBQUssSUFBSS82QyxPQUFPby9DLEVBQWEsZUFBaUJ3
3VyxFQUM5Q25ELE1BQU93RCxJQUdYLElBQUlDLEVBQVVGLEdBQWdCL2dFLEdBYzlCLE9BYkFvb0QsR0FBaUI2WSxFQUFTLFNBQVMsR0FDbkMvWixHQUFXK1osRUFBUyxRQUFTOVcsR0FDN0IrUyxHQUFlK0QsRUFBU3BoRSxHQUN4QjA5RCxHQUFldUQsRUFBUyxDQUNwQmhiLElBQUs0YSxFQUNMbEQsTUFBT3lELElBRVBMLEVBQ0FFLEVBQVF6RCxNQUFPLEVBRVZ3RCxJQUNMQyxFQUFRMUQsT0FBU3lELEdBRWRDLENBQ1gsQ0FDSixDQUNKLENBQ0EsU0FBU0MsR0FBZ0IvZ0UsR0FDckIsT0FBT3E4RCxHQUFpQnI4RCxFQUFHMGMsSUFBSzFjLEVBQUdvbkQsVUFBVXBwRCxRQUFTZ0MsRUFBR2pWLE9BQzdELENBQ0EsSUFJSXc3QixHQUFVLENBQUMrd0MsR0FBT3I4RCxHQUpWLENBQ1J3bEUsaUJBQWtCQSxLQUt0QixTQUFTOTBFLEdBQUtxVSxFQUFJa2pELEdBQ1ZBLEVBQUlydEQsT0FDSit3RCxHQUFRNW1ELEVBQUksY0FBZSxNQUFNK0ssT0FBT200QyxFQUFJcnRELE1BQU8sS0FBTXF0RCxFQUVqRSxDQUVBLFNBQVM3MEQsR0FBSzJSLEVBQUlrakQsR0FDVkEsRUFBSXJ0RCxPQUNKK3dELEdBQVE1bUQsRUFBSSxZQUFhLE1BQU0rSyxPQUFPbTRDLEVBQUlydEQsTUFBTyxLQUFNcXRELEVBRS9ELENBRUEsSUFtQklnZSxHQUNBQyxHQWRBQyxHQUFjLENBQ2Q3SCxZQUFZLEVBQ1poekMsUUFBU0EsR0FDVG92QixXQVRhLENBQ2IxQyxNQUFPc1csR0FDUDU5RCxLQUFNQSxHQUNOMEMsS0FBTUEsSUFPTnN0RCxTQUFVQSxHQUNWbWMsV0FBWUEsR0FDWnp2QyxZQUFhQSxHQUNiMHZDLGlCQUFrQkEsR0FDbEIvdkMsY0FBZUEsR0FDZkcsZ0JBQWlCQSxHQUNqQjNCLFdBQVlGLEVBQWdCQyxLQUs1Qjg2QyxHQUFzQnY4QyxFQUFPdzhDLElBWWpDLFNBQVNDLEdBQVNoRixFQUFNMThELEdBQ2YwOEQsSUFFTDJFLEdBQWNHLEdBQW9CeGhFLEVBQVEybUIsWUFBYyxJQUN4RDI2QyxHQUF3QnRoRSxFQUFRbW9CLGVBQWlCNUIsRUFFakRvN0MsR0FBV2pGLEdBRVhrRixHQUFnQmxGLEdBQU0sR0FDMUIsQ0FDQSxTQUFTK0UsR0FBYy9oRCxHQUNuQixPQUFPOEUsRUFBUSxpRkFDVjlFLEVBQU8sSUFBTUEsRUFBTyxJQUM3QixDQUNBLFNBQVNpaUQsR0FBV2pwRCxHQUVoQixHQURBQSxFQUFLaE0sT0FBU3FmLEdBQVNyVCxHQUNMLElBQWRBLEVBQUtuaUIsS0FBWSxDQUlqQixJQUFLK3FFLEdBQXNCNW9ELEVBQUttRSxNQUNmLFNBQWJuRSxFQUFLbUUsS0FDK0IsTUFBcENuRSxFQUFLNHVDLFNBQVMsbUJBQ2QsT0FFSixJQUFLLElBQUk3MEQsRUFBSSxFQUFHOGEsRUFBSW1MLEVBQUs5VSxTQUFTdGEsT0FBUW1KLEVBQUk4YSxFQUFHOWEsSUFBSyxDQUNsRCxJQUFJZ2MsRUFBUWlLLEVBQUs5VSxTQUFTblIsR0FDMUJrdkUsR0FBV2x6RCxHQUNOQSxFQUFNL0IsU0FDUGdNLEVBQUtoTSxRQUFTLEVBRXRCLENBQ0EsR0FBSWdNLEVBQUtnbkQsYUFDTCxJQUFTanRFLEVBQUksRUFBRzhhLEVBQUltTCxFQUFLZ25ELGFBQWFwMkUsT0FBUW1KLEVBQUk4YSxFQUFHOWEsSUFBSyxDQUN0RCxJQUFJa3JFLEVBQVFqbEQsRUFBS2duRCxhQUFhanRFLEdBQUdrckUsTUFDakNnRSxHQUFXaEUsR0FDTkEsRUFBTWp4RCxTQUNQZ00sRUFBS2hNLFFBQVMsRUFFdEIsQ0FFUixDQUNKLENBQ0EsU0FBU2sxRCxHQUFnQmxwRCxFQUFNNmdCLEdBQzNCLEdBQWtCLElBQWQ3Z0IsRUFBS25pQixLQUFZLENBT2pCLElBTkltaUIsRUFBS2hNLFFBQVVnTSxFQUFLMk8sUUFDcEIzTyxFQUFLbXBELFlBQWN0b0MsR0FLbkI3Z0IsRUFBS2hNLFFBQ0xnTSxFQUFLOVUsU0FBU3RhLFNBQ2EsSUFBekJvdkIsRUFBSzlVLFNBQVN0YSxRQUEwQyxJQUExQm92QixFQUFLOVUsU0FBUyxHQUFHck4sTUFFakQsWUFEQW1pQixFQUFLb3BELFlBQWEsR0FNdEIsR0FGSXBwRCxFQUFLb3BELFlBQWEsRUFFbEJwcEQsRUFBSzlVLFNBQ0wsSUFBSyxJQUFJblIsRUFBSSxFQUFHOGEsRUFBSW1MLEVBQUs5VSxTQUFTdGEsT0FBUW1KLEVBQUk4YSxFQUFHOWEsSUFDN0NtdkUsR0FBZ0JscEQsRUFBSzlVLFNBQVNuUixHQUFJOG1DLEtBQWE3Z0IsRUFBS3VtRCxLQUc1RCxHQUFJdm1ELEVBQUtnbkQsYUFDTCxJQUFTanRFLEVBQUksRUFBRzhhLEVBQUltTCxFQUFLZ25ELGFBQWFwMkUsT0FBUW1KLEVBQUk4YSxFQUFHOWEsSUFDakRtdkUsR0FBZ0JscEQsRUFBS2duRCxhQUFhanRFLEdBQUdrckUsTUFBT3BrQyxFQUd4RCxDQUNKLENBQ0EsU0FBU3hOLEdBQVNyVCxHQUNkLE9BQWtCLElBQWRBLEVBQUtuaUIsT0FJUyxJQUFkbWlCLEVBQUtuaUIsU0FJQ21pQixFQUFLd2UsTUFDVHhlLEVBQUt5bkQsYUFDRnpuRCxFQUFLNGtELElBQ0w1a0QsRUFBS3VtRCxLQUNMdDZDLEVBQWFqTSxFQUFLbUUsT0FDbkJ5a0QsR0FBc0I1b0QsRUFBS21FLE1BQzFCa2xELEdBQTJCcnBELEtBQzVCbmdCLE9BQU9tbkIsS0FBS2hILEdBQU11TyxNQUFNbzZDLE1BQ3BDLENBQ0EsU0FBU1UsR0FBMkJycEQsR0FDaEMsS0FBT0EsRUFBS3h0QixRQUFRLENBRWhCLEdBQWlCLGNBRGpCd3RCLEVBQU9BLEVBQUt4dEIsUUFDSDJ4QixJQUNMLE9BQU8sRUFFWCxHQUFJbkUsRUFBS3VtRCxJQUNMLE9BQU8sQ0FFZixDQUNBLE9BQU8sQ0FDWCxDQUVBLElBQUkrQyxHQUFVLDBEQUNWQyxHQUFhLGdCQUNiQyxHQUFlLCtGQUVmaDZDLEdBQVcsQ0FDWGk2QyxJQUFLLEdBQ0xDLElBQUssRUFDTDdSLE1BQU8sR0FDUDhSLE1BQU8sR0FDUEMsR0FBSSxHQUNKaHpELEtBQU0sR0FDTkksTUFBTyxHQUNQNnlELEtBQU0sR0FDTnBvQixPQUFRLENBQUMsRUFBRyxLQUdacW9CLEdBQVcsQ0FFWEwsSUFBSyxDQUFDLE1BQU8sVUFDYkMsSUFBSyxNQUNMN1IsTUFBTyxRQUVQOFIsTUFBTyxDQUFDLElBQUssWUFFYkMsR0FBSSxDQUFDLEtBQU0sV0FDWGh6RCxLQUFNLENBQUMsT0FBUSxhQUNmSSxNQUFPLENBQUMsUUFBUyxjQUNqQjZ5RCxLQUFNLENBQUMsT0FBUSxhQUVmcG9CLE9BQVEsQ0FBQyxZQUFhLFNBQVUsUUFLaENzb0IsR0FBVyxTQUFVMWxELEdBQWEsTUFBTyxNQUFNN1IsT0FBTzZSLEVBQVcsZ0JBQWtCLEVBQ25GMmxELEdBQWUsQ0FDZnQvQixLQUFNLDRCQUNOeWtCLFFBQVMsMkJBQ1Q3dEQsS0FBTXlvRSxHQUFTLDBDQUNmRSxLQUFNRixHQUFTLG1CQUNmbHNDLE1BQU9rc0MsR0FBUyxvQkFDaEJHLElBQUtILEdBQVMsa0JBQ2RJLEtBQU1KLEdBQVMsbUJBQ2ZuekQsS0FBTW16RCxHQUFTLDZDQUNmM2EsT0FBUTJhLEdBQVMsNkNBQ2pCL3lELE1BQU8reUQsR0FBUyw4Q0FFcEIsU0FBU0ssR0FBWXJoRCxFQUFRMEksR0FDekIsSUFBSTQ0QyxFQUFTNTRDLEVBQVcsWUFBYyxNQUNsQzY
30QyxFQUFpQixHQUNqQkMsRUFBa0IsR0FDdEIsSUFBSyxJQUFJcm5DLEtBQVVuYSxFQUFRLENBQ3ZCLElBQUl5aEQsRUFBY0MsR0FBVzFoRCxFQUFPbWEsSUFFaENuYSxFQUFPbWEsSUFBV25hLEVBQU9tYSxHQUFRb3JCLFFBQ2pDaWMsR0FBbUIsR0FBRy8zRCxPQUFPMHdCLEVBQVEsS0FBSzF3QixPQUFPZzRELEVBQWEsS0FHOURGLEdBQWtCLElBQUs5M0QsT0FBTzB3QixFQUFRLE1BQU8xd0IsT0FBT2c0RCxFQUFhLElBRXpFLENBRUEsT0FEQUYsRUFBaUIsSUFBSTkzRCxPQUFPODNELEVBQWU3a0UsTUFBTSxHQUFJLEdBQUksS0FDckQ4a0UsRUFDT0YsRUFBUyxNQUFNNzNELE9BQU84M0QsRUFBZ0IsTUFBTTkzRCxPQUFPKzNELEVBQWdCOWtFLE1BQU0sR0FBSSxHQUFJLE1BR2pGNGtFLEVBQVNDLENBRXhCLENBQ0EsU0FBU0csR0FBV3BqRSxHQUNoQixJQUFLQSxFQUNELE1BQU8sZUFFWCxHQUFJeEcsTUFBTTRwQixRQUFRcGpCLEdBQ2QsTUFBTyxJQUFJbUwsT0FBT25MLEVBQVFuVCxLQUFJLFNBQVVtVCxHQUFXLE9BQU9vakUsR0FBV3BqRSxFQUFVLElBQUdnSSxLQUFLLEtBQU0sS0FFakcsSUFBSXE3RCxFQUFlbEIsR0FBYXJpRSxLQUFLRSxFQUFRL0osT0FDekNxdEUsRUFBdUJyQixHQUFRbmlFLEtBQUtFLEVBQVEvSixPQUM1Q3N0RSxFQUF1QnBCLEdBQWFyaUUsS0FBS0UsRUFBUS9KLE1BQU1vQixRQUFRNnFFLEdBQVksS0FDL0UsR0FBS2xpRSxFQUFRb2tELFVBTVIsQ0FDRCxJQUFJaUcsRUFBTyxHQUNQbVosRUFBa0IsR0FDbEI3akQsRUFBTyxHQUNQRixFQUFVLFNBQVU1ZixHQUNwQixHQUFJOGlFLEdBQWE5aUUsR0FDYjJqRSxHQUFtQmIsR0FBYTlpRSxHQUU1QnNvQixHQUFTdG9CLElBQ1Q4ZixFQUFLL3ZCLEtBQUtpUSxRQUdiLEdBQVksVUFBUkEsRUFBaUIsQ0FDdEIsSUFBSTRqRSxFQUFjempFLEVBQVFva0QsVUFDMUJvZixHQUFtQmQsR0FBUyxDQUFDLE9BQVEsUUFBUyxNQUFPLFFBQ2hEOTRFLFFBQU8sU0FBVTg1RSxHQUFlLE9BQVFELEVBQVlDLEVBQWMsSUFDbEU3MkUsS0FBSSxTQUFVNjJFLEdBQWUsTUFBTyxVQUFVdjRELE9BQU91NEQsRUFBYSxNQUFRLElBQzFFMTdELEtBQUssTUFDZCxNQUVJMlgsRUFBSy92QixLQUFLaVEsRUFFbEIsRUFDQSxJQUFLLElBQUlBLEtBQU9HLEVBQVFva0QsVUFDcEIza0MsRUFBUTVmLEdBRVI4ZixFQUFLcDJCLFNBQ0w4Z0UsR0FBUXNaLEdBQWFoa0QsSUFHckI2akQsSUFDQW5aLEdBQVFtWixHQUVaLElBQUlMLEVBQWNFLEVBQ1osVUFBVWw0RCxPQUFPbkwsRUFBUS9KLE1BQU8sMkJBQ2hDcXRFLEVBQ0ksV0FBV240RCxPQUFPbkwsRUFBUS9KLE1BQU8sNEJBQ2pDc3RFLEVBQ0ksVUFBVXA0RCxPQUFPbkwsRUFBUS9KLE9BQ3pCK0osRUFBUS9KLE1BQ3RCLE1BQU8sb0JBQW9Ca1YsT0FBT2svQyxHQUFNbC9DLE9BQU9nNEQsRUFBYSxJQUNoRSxDQTlDSSxPQUFJRSxHQUFnQkMsRUFDVHRqRSxFQUFRL0osTUFFWixvQkFBb0JrVixPQUFPbzRELEVBQXVCLFVBQVVwNEQsT0FBT25MLEVBQVEvSixPQUFTK0osRUFBUS9KLE1BQU8sSUE0Q2xILENBQ0EsU0FBUzB0RSxHQUFhaGtELEdBQ2xCLE1BSUEsbUNBQ0ksR0FBR3hVLE9BQU93VSxFQUFLOXlCLElBQUkrMkUsSUFBZTU3RCxLQUFLLE1BQU8sZ0JBQ3RELENBQ0EsU0FBUzQ3RCxHQUFjL2pFLEdBQ25CLElBQUlna0UsRUFBUzExRSxTQUFTMFIsRUFBSyxJQUMzQixHQUFJZ2tFLEVBQ0EsTUFBTyxvQkFBb0IxNEQsT0FBTzA0RCxHQUV0QyxJQUFJcjVELEVBQVUyZCxHQUFTdG9CLEdBQ25CaWtFLEVBQVVyQixHQUFTNWlFLEdBQ3ZCLE1BQVEscUJBQ0osR0FBR3NMLE9BQU8yQyxLQUFLQyxVQUFVbE8sR0FBTSxLQUMvQixHQUFHc0wsT0FBTzJDLEtBQUtDLFVBQVV2RCxHQUFVLEtBQ25DLGNBQ0EsR0FBR1csT0FBTzJDLEtBQUtDLFVBQVUrMUQsSUFDekIsR0FDUixDQUVBLFNBQVM1NUUsR0FBR2tXLEVBQUlrakQsR0FDUkEsRUFBSWMsV0FDSnQzQixHQUFPLHFEQUVYMXNCLEVBQUcyakUsY0FBZ0IsU0FBVTFaLEdBQVEsTUFBTyxNQUFNbC9DLE9BQU9rL0MsRUFBTSxLQUFLbC9DLE9BQU9tNEMsRUFBSXJ0RCxNQUFPLElBQU0sQ0FDaEcsQ0FFQSxTQUFTNEUsR0FBS3VGLEVBQUlrakQsR0FDZGxqRCxFQUFHNGpFLFNBQVcsU0FBVTNaLEdBQ3BCLE1BQU8sTUFBTWwvQyxPQUFPay9DLEVBQU0sTUFBTWwvQyxPQUFPL0ssRUFBRzBjLElBQUssTUFBTTNSLE9BQU9tNEMsRUFBSXJ0RCxNQUFPLEtBQUtrVixPQUFPbTRDLEVBQUljLFdBQWFkLEVBQUljLFVBQVV4akMsS0FBTyxPQUFTLFNBQVN6VixPQUFPbTRDLEVBQUljLFdBQWFkLEVBQUljLFVBQVVwVyxLQUFPLFFBQVUsR0FBSSxJQUMxTSxDQUNKLENBRUEsSUFBSWkyQixHQUFpQixDQUNqQi81RSxHQUFJQSxHQUNKMlEsS0FBTUEsR0FDTnFwRSxNQUFPMzlDLEdBR1A0OUMsR0FBOEIsV0FDOUIsU0FBU0EsRUFBYWxrRSxHQUNsQjlXLEtBQUs4VyxRQUFVQSxFQUNmOVcsS0FBS3l3QixLQUFPM1osRUFBUTJaLE1BQVFrdEMsR0FDNUIzOUQsS0FBS2d5RSxXQUFhcFUsR0FBb0I5bUQsRUFBUTBtQixRQUFTLGlCQUN2RHg5QixLQUFLaTdFLFdBQWFyZCxHQUFvQjltRCxFQUFRMG1CLFFBQVMsV0FDdkR4OUIsS0FBSzRzRCxXQUFhNXZCLEVBQU9BLEVBQU8sQ0FBQyxFQUFHODlDLElBQWlCaGtFLEVBQVE4MUMsWUFDN0QsSUFBSTN0QixFQUFnQm5vQixFQUFRbW9CLGVBQWlCNUIsRUFDN0NyOUIsS0FBS3N5RSxlQUFpQixTQUFVcjdELEdBQzVCLFFBQVNBLEVBQUdpaEIsWUFBYytHLEVBQWNob0IsRUFBRzBjLElBQy9DLEVBQ0EzekIsS0FBS2s3RSxPQUFTLEVBQ2RsN0UsS0FBS3l3QyxnQkFBa0IsR0FDdkJ6d0MsS0FBS2d1QyxLQUFNLENBQ2YsQ0FDQSxPQUFPZ3RDLENBQ1gsQ0FoQmlDLEdBaUJqQyxTQUFTRyxHQUFTQyxFQUFLdGtFLEdBQ25CLElBQUl1a0UsRUFBUSxJQUFJTCxHQUFhbGtFLEdBRXpCb3FELEVBQU9rYSxFQUNPLFdBQVpBLEVBQUl6bkQsSUFDQSxPQUNBMm5ELEdBQVdGLEVBQUtDLEdBQ3BCLFlBQ04sTUFBTyxDQUNIbGpELE9BQVEscUJBQXFCblcsT0FBT2svQyxFQUFNLEtBQzFDendCLGdCQUFpQjRxQyxFQUFNNXFDLGdCQUUvQixDQUNBLFNBQVM2cUMsR0FBV3JrRSxFQUFJb2tFLEdBSXBCLEdBSElwa0UsRUFBR2pWLFNBQ0hpVixFQUFHKzJCLElBQU0vMkIsRUFBRysyQixLQUFPLzJCLEVBQUdqVixPQUFPZ3NDLEtBRTdCLzJCLEVBQUcyaEUsYUFBZTNoRSxFQUFHc2tFLGdCQUNyQixPQUFPQyxHQUFVdmtFLEVBQUlva0UsR0FFcEIsR0FBSXBrRSxFQUFHa25CLE9BQVNsbkIsRUFBR3drRSxjQUNwQixPQUFPQyxHQUFRemtFLEVBQUlva0UsR0FFbEIsR0FBSXBrRSxFQUFHOCtELE1BQVE5K0QsRUFBRzBrRSxhQUNuQixPQUFPQyxHQUFPM2tFLEVBQUlva0UsR0FFakIsR0FBSXBrRSxFQUFHbTlELEtBQU9uOUQsRUFBRzRrRSxZQUNsQixPQUFPQyxHQUFNN2tFLEVBQUlva0UsR0FFaEIsR0FBZSxhQUFYcGtFLEVBQUcwYyxLQUF1QjFjLEVBQUc0OUQsWUFBZXdHLEVBQU1ydEMsSUFHdEQsSUFBZSxTQUFYLzJCLEVBQUcwYyxJQUNSLE9BQU9vb0QsR0FBUTlrRSxFQUFJb2tFLEdBSW5CLElBQUluYSxPQUFPLEVBQ1gsR0FBSWpxRCxFQUFHaWhCLFVBQ0hncEMsRU
3FBTzhhLEdBQWEva0UsRUFBR2loQixVQUFXamhCLEVBQUlva0UsT0FFckMsQ0FDRCxJQUFJejdFLE9BQU8sRUFDUDB5RSxFQUFpQitJLEVBQU0vSSxlQUFlcjdELEtBQ3JDQSxFQUFHK21ELE9BQVUvbUQsRUFBRysyQixLQUFPc2tDLEtBQ3hCMXlFLEVBQU82dUUsR0FBUXgzRCxFQUFJb2tFLElBRXZCLElBQUkxbkQsT0FFRixFQUVFc29ELEVBQVdaLEVBQU12a0UsUUFBUW1sRSxTQUN6QjNKLEdBQWtCMkosSUFBeUMsSUFBN0JBLEVBQVNDLGtCQUN2Q3ZvRCxFQUFNd29ELEdBQWlCRixFQUFVaGxFLEVBQUcwYyxNQUVuQ0EsSUFDREEsRUFBTSxJQUFJM1IsT0FBTy9LLEVBQUcwYyxJQUFLLE1BQzdCLElBQUlqWixFQUFXekQsRUFBR3F6QyxlQUFpQixLQUFPOHhCLEdBQVlubEUsRUFBSW9rRSxHQUFPLEdBQ2pFbmEsRUFBTyxNQUFNbC9DLE9BQU8yUixHQUFLM1IsT0FBT3BpQixFQUFPLElBQUlvaUIsT0FBT3BpQixHQUFRLElBQ3hEb2lCLE9BQU90SCxFQUFXLElBQUlzSCxPQUFPdEgsR0FBWSxHQUN6QyxJQUNOLENBRUEsSUFBSyxJQUFJblIsRUFBSSxFQUFHQSxFQUFJOHhFLEVBQU1ySixXQUFXNXhFLE9BQVFtSixJQUN6QzIzRCxFQUFPbWEsRUFBTXJKLFdBQVd6b0UsR0FBRzBOLEVBQUlpcUQsR0FFbkMsT0FBT0EsQ0FDWCxDQXJDSSxPQUFPa2IsR0FBWW5sRSxFQUFJb2tFLElBQVUsUUFzQ3pDLENBQ0EsU0FBU2MsR0FBaUJGLEVBQVV2bEUsR0FDaEMsSUFBSTJsRSxFQUFZbmdELEVBQVN4bEIsR0FDckI0bEUsRUFBYWxnRCxFQUFXaWdELEdBQ3hCRSxFQUFZLFNBQVVsdkUsR0FDdEIsT0FBSTR1RSxFQUFTdmxFLEtBQVNySixFQUNYcUosRUFFUHVsRSxFQUFTSSxLQUFlaHZFLEVBQ2pCZ3ZFLEVBRVBKLEVBQVNLLEtBQWdCanZFLEVBQ2xCaXZFLE9BRFgsQ0FHSixFQUNJRSxFQUFZRCxFQUFVLGdCQUN0QkEsRUFBVSx3QkFDZCxHQUFJQyxFQUNBLE9BQU9BLEVBRVgsSUFBSUMsRUFBZUYsRUFBVSxjQUN6QkEsRUFBVSxjQUNWQSxFQUFVLG1CQUNkLE9BQUlFLFFBQUosQ0FHSixDQUVBLFNBQVNqQixHQUFVdmtFLEVBQUlva0UsR0FDbkJwa0UsRUFBR3NrRSxpQkFBa0IsRUFJckIsSUFBSW1CLEVBQW1CckIsRUFBTXJ0QyxJQU03QixPQUxJLzJCLEVBQUcrMkIsTUFDSHF0QyxFQUFNcnRDLElBQU0vMkIsRUFBRysyQixLQUVuQnF0QyxFQUFNNXFDLGdCQUFnQmhxQyxLQUFLLHFCQUFxQnViLE9BQU9zNUQsR0FBV3JrRSxFQUFJb2tFLEdBQVEsTUFDOUVBLEVBQU1ydEMsSUFBTTB1QyxFQUNMLE1BQU0xNkQsT0FBT3E1RCxFQUFNNXFDLGdCQUFnQnJ3QyxPQUFTLEdBQUc0aEIsT0FBTy9LLEVBQUcwaEUsWUFBYyxRQUFVLEdBQUksSUFDaEcsQ0FFQSxTQUFTK0MsR0FBUXprRSxFQUFJb2tFLEdBRWpCLEdBREFwa0UsRUFBR3drRSxlQUFnQixFQUNmeGtFLEVBQUdtOUQsS0FBT245RCxFQUFHNGtFLFlBQ2IsT0FBT0MsR0FBTTdrRSxFQUFJb2tFLEdBRWhCLEdBQUlwa0UsRUFBRzBoRSxZQUFhLENBR3JCLElBRkEsSUFBSWppRSxFQUFNLEdBQ04yMUMsRUFBV3AxQyxFQUFHalYsT0FDWHFxRCxHQUFVLENBQ2IsR0FBSUEsRUFBUzBwQixJQUFLLENBQ2RyL0QsRUFBTTIxQyxFQUFTMzFDLElBQ2YsS0FDSixDQUNBMjFDLEVBQVdBLEVBQVNycUQsTUFDeEIsQ0FDQSxPQUFLMFUsRUFJRSxNQUFNc0wsT0FBT3M1RCxHQUFXcmtFLEVBQUlva0UsR0FBUSxLQUFLcjVELE9BQU9xNUQsRUFBTUgsU0FBVSxLQUFLbDVELE9BQU90TCxFQUFLLE1BSHBGMmtFLEVBQU01cUQsS0FBSyx1REFBd0R4WixFQUFHZ29ELFlBQVksV0FDM0VxYyxHQUFXcmtFLEVBQUlva0UsR0FHOUIsQ0FFSSxPQUFPRyxHQUFVdmtFLEVBQUlva0UsRUFFN0IsQ0FDQSxTQUFTUyxHQUFNN2tFLEVBQUlva0UsRUFBT3NCLEVBQVFDLEdBRTlCLE9BREEzbEUsRUFBRzRrRSxhQUFjLEVBQ1ZnQixHQUFnQjVsRSxFQUFHdS9ELGFBQWF2aEUsUUFBU29tRSxFQUFPc0IsRUFBUUMsRUFDbkUsQ0FDQSxTQUFTQyxHQUFnQkMsRUFBWXpCLEVBQU9zQixFQUFRQyxHQUNoRCxJQUFLRSxFQUFXMThFLE9BQ1osT0FBT3c4RSxHQUFZLE9BRXZCLElBQUkvb0QsRUFBWWlwRCxFQUFXenZDLFFBQzNCLE9BQUl4WixFQUFVa3BDLElBQ0gsSUFBSS82QyxPQUFPNlIsRUFBVWtwQyxJQUFLLE1BQU0vNkMsT0FBTys2RCxFQUFjbHBELEVBQVU0Z0QsT0FBUSxLQUFLenlELE9BQU82NkQsR0FBZ0JDLEVBQVl6QixFQUFPc0IsRUFBUUMsSUFHOUgsR0FBRzU2RCxPQUFPKzZELEVBQWNscEQsRUFBVTRnRCxRQUc3QyxTQUFTc0ksRUFBYzlsRSxHQUNuQixPQUFPMGxFLEVBQ0RBLEVBQU8xbEUsRUFBSW9rRSxHQUNYcGtFLEVBQUdrbkIsS0FDQ3U5QyxHQUFRemtFLEVBQUlva0UsR0FDWkMsR0FBV3JrRSxFQUFJb2tFLEVBQzdCLENBQ0osQ0FDQSxTQUFTTyxHQUFPM2tFLEVBQUlva0UsRUFBT3NCLEVBQVFLLEdBQy9CLElBQUlqZ0IsRUFBTTlsRCxFQUFHOCtELElBQ1RNLEVBQVFwL0QsRUFBR28vRCxNQUNYSixFQUFZaC9ELEVBQUdnL0QsVUFBWSxJQUFJajBELE9BQU8vSyxFQUFHZy9ELFdBQWEsR0FDdERELEVBQVkvK0QsRUFBRysrRCxVQUFZLElBQUloMEQsT0FBTy9LLEVBQUcrK0QsV0FBYSxHQVUxRCxPQVRJcUYsRUFBTS9JLGVBQWVyN0QsSUFDVixTQUFYQSxFQUFHMGMsS0FDUSxhQUFYMWMsRUFBRzBjLE1BQ0YxYyxFQUFHUCxLQUNKMmtFLEVBQU01cUQsS0FBSyxJQUFJek8sT0FBTy9LLEVBQUcwYyxJQUFLLFlBQWEzUixPQUFPcTBELEVBQU8sUUFBUXIwRCxPQUFPKzZDLEVBQUssc0NBQWxFLGtHQUUyRDlsRCxFQUFHZ29ELFlBQVksVUFBVSxHQUVuR2hvRCxFQUFHMGtFLGNBQWUsRUFDVixHQUFHMzVELE9BQU9nN0QsR0FBYSxLQUFNLE1BQU1oN0QsT0FBTys2QyxFQUFLLE1BQ25ELFlBQVkvNkMsT0FBT3EwRCxHQUFPcjBELE9BQU9pMEQsR0FBV2owRCxPQUFPZzBELEVBQVcsTUFDOUQsVUFBVWgwRCxRQUFRMjZELEdBQVVyQixJQUFZcmtFLEVBQUlva0UsSUFDNUMsSUFDUixDQUNBLFNBQVM1TSxHQUFReDNELEVBQUlva0UsR0FDakIsSUFBSXo3RSxFQUFPLElBR1Arc0QsRUFBT3N3QixHQUFjaG1FLEVBQUlva0UsR0FDekIxdUIsSUFDQS9zRCxHQUFRK3NELEVBQU8sS0FFZjExQyxFQUFHUCxNQUNIOVcsR0FBUSxPQUFPb2lCLE9BQU8vSyxFQUFHUCxJQUFLLE1BRzlCTyxFQUFHN0gsTUFDSHhQLEd
3BQVEsT0FBT29pQixPQUFPL0ssRUFBRzdILElBQUssTUFFOUI2SCxFQUFHZzlDLFdBQ0hyMEQsR0FBUSxrQkFHUnFYLEVBQUcrMkIsTUFDSHB1QyxHQUFRLGFBR1JxWCxFQUFHaWhCLFlBQ0h0NEIsR0FBUSxRQUFTb2lCLE9BQU8vSyxFQUFHMGMsSUFBSyxPQUdwQyxJQUFLLElBQUlwcUIsRUFBSSxFQUFHQSxFQUFJOHhFLEVBQU1KLFdBQVc3NkUsT0FBUW1KLElBQ3pDM0osR0FBUXk3RSxFQUFNSixXQUFXMXhFLEdBQUcwTixHQStCaEMsR0E1QklBLEVBQUdtaEIsUUFDSHg0QixHQUFRLFNBQVNvaUIsT0FBT2s3RCxHQUFTam1FLEVBQUdtaEIsT0FBUSxNQUc1Q25oQixFQUFHdFgsUUFDSEMsR0FBUSxZQUFZb2lCLE9BQU9rN0QsR0FBU2ptRSxFQUFHdFgsT0FBUSxNQUcvQ3NYLEVBQUdzaEIsU0FDSDM0QixHQUFRLEdBQUdvaUIsT0FBTzQzRCxHQUFZM2lFLEVBQUdzaEIsUUFBUSxHQUFRLE1BRWpEdGhCLEVBQUc2bkQsZUFDSGwvRCxHQUFRLEdBQUdvaUIsT0FBTzQzRCxHQUFZM2lFLEVBQUc2bkQsY0FBYyxHQUFPLE1BSXREN25ELEVBQUc0OUQsYUFBZTU5RCxFQUFHMjlELFlBQ3JCaDFFLEdBQVEsUUFBUW9pQixPQUFPL0ssRUFBRzQ5RCxXQUFZLE1BR3RDNTlELEVBQUc0MkIsY0FDSGp1QyxHQUFRLEdBQUdvaUIsT0FBT203RCxHQUFlbG1FLEVBQUlBLEVBQUc0MkIsWUFBYXd0QyxHQUFRLE1BRzdEcGtFLEVBQUdpekMsUUFDSHRxRCxHQUFRLGdCQUFnQm9pQixPQUFPL0ssRUFBR2l6QyxNQUFNcDlDLE1BQU8sY0FBY2tWLE9BQU8vSyxFQUFHaXpDLE1BQU1VLFNBQVUsZ0JBQWdCNW9DLE9BQU8vSyxFQUFHaXpDLE1BQU12TCxXQUFZLE9BR25JMW5DLEVBQUdxekMsZUFBZ0IsQ0FDbkIsSUFBSUEsRUFBaUI4eUIsR0FBa0JubUUsRUFBSW9rRSxHQUN2Qy93QixJQUNBMXFELEdBQVEsR0FBR29pQixPQUFPc29DLEVBQWdCLEtBRTFDLENBZ0JBLE9BZkExcUQsRUFBT0EsRUFBS3NPLFFBQVEsS0FBTSxJQUFNLElBSTVCK0ksRUFBR2luRCxlQUNIdCtELEVBQU8sTUFBTW9pQixPQUFPcGlCLEVBQU0sTUFBT29pQixPQUFPL0ssRUFBRzBjLElBQUssTUFBTzNSLE9BQU9rN0QsR0FBU2ptRSxFQUFHaW5ELGNBQWUsTUFHekZqbkQsRUFBRzRqRSxXQUNIajdFLEVBQU9xWCxFQUFHNGpFLFNBQVNqN0UsSUFHbkJxWCxFQUFHMmpFLGdCQUNIaDdFLEVBQU9xWCxFQUFHMmpFLGNBQWNoN0UsSUFFckJBLENBQ1gsQ0FDQSxTQUFTcTlFLEdBQWNobUUsRUFBSW9rRSxHQUN2QixJQUFJMXVCLEVBQU8xMUMsRUFBRzIxQyxXQUNkLEdBQUtELEVBQUwsQ0FFQSxJQUVJcGpELEVBQUc4YSxFQUFHODFDLEVBQUtrakIsRUFGWGxnRCxFQUFNLGVBQ05tZ0QsR0FBYSxFQUVqQixJQUFLL3pFLEVBQUksRUFBRzhhLEVBQUlzb0MsRUFBS3ZzRCxPQUFRbUosRUFBSThhLEVBQUc5YSxJQUFLLENBQ3JDNHdELEVBQU14TixFQUFLcGpELEdBQ1g4ekUsR0FBYyxFQUNkLElBQUlFLEVBQU1sQyxFQUFNenVCLFdBQVd1TixFQUFJNXlELE1BQzNCZzJFLElBR0FGLElBQWdCRSxFQUFJdG1FLEVBQUlrakQsRUFBS2toQixFQUFNNXFELE9BRW5DNHNELElBQ0FDLEdBQWEsRUFDYm5nRCxHQUFPLFVBQVduYixPQUFPbTRDLEVBQUk1eUQsS0FBTSxlQUFpQnlhLE9BQU9tNEMsRUFBSWlCLFFBQVMsS0FBTXA1QyxPQUFPbTRDLEVBQUlydEQsTUFDbkYsV0FBV2tWLE9BQU9tNEMsRUFBSXJ0RCxNQUFPLGlCQUFpQmtWLE9BQU8yQyxLQUFLQyxVQUFVdTFDLEVBQUlydEQsUUFDeEUsSUFBSWtWLE9BQU9tNEMsRUFBSVMsSUFBTSxRQUFRNTRDLE9BQU9tNEMsRUFBSW9FLGFBQWVwRSxFQUFJUyxJQUFNLElBQUs1NEMsT0FBT200QyxFQUFJUyxJQUFLLE1BQVMsSUFBSTU0QyxPQUFPbTRDLEVBQUljLFVBQVksY0FBY2o1QyxPQUFPMkMsS0FBS0MsVUFBVXUxQyxFQUFJYyxZQUFjLEdBQUksTUFFbE0sQ0FDQSxPQUFJcWlCLEVBQ09uZ0QsRUFBSWxvQixNQUFNLEdBQUksR0FBSyxTQUQ5QixDQXBCVSxDQXVCZCxDQUNBLFNBQVNtb0UsR0FBa0JubUUsRUFBSW9rRSxHQUMzQixJQUFJRCxFQUFNbmtFLEVBQUd5RCxTQUFTLEdBSXRCLEdBSDRCLElBQXZCekQsRUFBR3lELFNBQVN0YSxRQUE2QixJQUFiZzdFLEVBQUkvdEUsTUFDakNndUUsRUFBTTVxRCxLQUFLLGtFQUFtRSxDQUFFcnRCLE1BQU82VCxFQUFHN1QsUUFFMUZnNEUsR0FBb0IsSUFBYkEsRUFBSS90RSxLQUFZLENBQ3ZCLElBQUltd0UsRUFBa0JyQyxHQUFTQyxFQUFLQyxFQUFNdmtFLFNBQzFDLE1BQU8scUNBQXFDa0wsT0FBT3c3RCxFQUFnQnJsRCxPQUFRLHVCQUF1Qm5XLE9BQU93N0QsRUFBZ0Ivc0MsZ0JBQ3BIL3NDLEtBQUksU0FBVXc5RCxHQUFRLE1BQU8sY0FBY2wvQyxPQUFPay9DLEVBQU0sSUFBTSxJQUM5RHJpRCxLQUFLLEtBQU0sS0FDcEIsQ0FDSixDQUNBLFNBQVNzK0QsR0FBZWxtRSxFQUFJdzdCLEVBQU80b0MsR0FLL0IsSUFBSXIrQixFQUFtQi9sQyxFQUFHOCtELEtBQ3RCMW1FLE9BQU9tbkIsS0FBS2ljLEdBQU8zeUIsTUFBSyxTQUFVcEosR0FDOUIsSUFBSXU0QixFQUFPd0QsRUFBTS83QixHQUNqQixPQUFRdTRCLEVBQUt5bkMsbUJBQXFCem5DLEVBQUttbEMsSUFBTW5sQyxFQUFLOG1DLEtBQU8wSCxHQUFrQnh1QyxFQUUvRSxJQUtBeXVDLElBQWF6bUUsRUFBR205RCxHQU1wQixJQUFLcDNCLEVBRUQsSUFEQSxJQUFJMmdDLEVBQVcxbUUsRUFBR2pWLE9BQ1gyN0UsR0FBVSxDQUNiLEdBQUtBLEVBQVMvSSxXQUFhK0ksRUFBUy9JLFlBQWN2QixJQUM5Q3NLLEVBQVM1SCxJQUFLLENBQ2QvNEIsR0FBbUIsRUFDbkIsS0FDSixDQUNJMmdDLEVBQVN2SixLQUNUc0osR0FBVyxHQUVmQyxFQUFXQSxFQUFTMzdFLE1BQ3hCLENBRUosSUFBSTQ3RSxFQUFpQnZ1RSxPQUFPbW5CLEtBQUtpYyxHQUM1Qi91QyxLQUFJLFNBQVVnVCxHQUFPLE9BQU9tbkUsR0FBY3ByQyxFQUFNLzdCLEdBQU0ya0UsRUFBUSxJQUM5RHg4RCxLQUFLLEtBQ1YsTUFBTyxtQkFBbUJtRCxPQUFPNDdELEVBQWdCLEtBQUs1N0QsT0FBT2c3QixFQUFtQixhQUFlLElBQUloN0IsUUFBUWc3QixHQUFvQjBnQyxFQUFXLGVBQWUxN0QsT0FBTzRxQixHQUFLZ3hDLElBQW1CLEdBQUksSUFDaE0sQ0FDQSxTQUFTaHhDLEdBQUtyUixHQUdWLElBRkEsSUFBSXFSLEVBQU8sS0FDUHJqQyxFQUFJZ3lCLEVBQUluN0IsT0FDTG1KLEdBQ0hxakMsRUFBZSxHQUFQQSxFQUFhclIsRUFBSW1FLGFBQWFuMkIsR0FFMUMsT0FBT3FqQyxJQUFTLENBQ3BCLENBQ0EsU0FBUzZ3QyxHQUFrQnhtRSxHQUN2QixPQUFnQixJQUFaQSxFQUFHNUosT0FDWSxTQUFYNEosRU
3FBRzBjLEtBR0ExYyxFQUFHeUQsU0FBU29GLEtBQUsyOUQsSUFHaEMsQ0FDQSxTQUFTSSxHQUFjNW1FLEVBQUlva0UsR0FDdkIsSUFBSXlDLEVBQWlCN21FLEVBQUdtbkQsU0FBUyxjQUNqQyxHQUFJbm5ELEVBQUdtOUQsS0FBT245RCxFQUFHNGtFLGNBQWdCaUMsRUFDN0IsT0FBT2hDLEdBQU03a0UsRUFBSW9rRSxFQUFPd0MsR0FBZSxRQUUzQyxHQUFJNW1FLEVBQUc4K0QsTUFBUTkrRCxFQUFHMGtFLGFBQ2QsT0FBT0MsR0FBTzNrRSxFQUFJb2tFLEVBQU93QyxJQUU3QixJQUFJakosRUFBWTM5RCxFQUFHMjlELFlBQWN2QixHQUFzQixHQUFLNWtELE9BQU94WCxFQUFHMjlELFdBQ2xFbmpFLEVBQUssWUFBWXVRLE9BQU80eUQsRUFBVyxNQUNuQyxVQUFVNXlELE9BQWtCLGFBQVgvSyxFQUFHMGMsSUFDZDFjLEVBQUdtOUQsSUFBTTBKLEVBQ0wsSUFBSTk3RCxPQUFPL0ssRUFBR205RCxHQUFJLE1BQU1weUQsT0FBT282RCxHQUFZbmxFLEVBQUlva0UsSUFBVSxZQUFhLGNBQ3RFZSxHQUFZbmxFLEVBQUlva0UsSUFBVSxZQUM5QkMsR0FBV3JrRSxFQUFJb2tFLEdBQVEsS0FFN0IwQyxFQUFlbkosRUFBWSxHQUFLLGNBQ3BDLE1BQU8sUUFBUTV5RCxPQUFPL0ssRUFBRzQ5RCxZQUFjLFlBQWUsUUFBUTd5RCxPQUFPdlEsR0FBSXVRLE9BQU8rN0QsRUFBYyxJQUNsRyxDQUNBLFNBQVMzQixHQUFZbmxFLEVBQUlva0UsRUFBTzJDLEVBQVdDLEVBQWVDLEdBQ3RELElBQUl4akUsRUFBV3pELEVBQUd5RCxTQUNsQixHQUFJQSxFQUFTdGEsT0FBUSxDQUNqQixJQUFJbXRFLEVBQU83eUQsRUFBUyxHQUVwQixHQUF3QixJQUFwQkEsRUFBU3RhLFFBQ1RtdEUsRUFBS3dJLEtBQ1EsYUFBYnhJLEVBQUs1NUMsS0FDUSxTQUFiNDVDLEVBQUs1NUMsSUFBZ0IsQ0FDckIsSUFBSXdxRCxFQUFzQkgsRUFDcEIzQyxFQUFNL0ksZUFBZS9FLEdBQ2pCLEtBQ0EsS0FDSixHQUNOLE1BQU8sR0FBR3ZyRCxRQUFRaThELEdBQWlCM0MsSUFBWS9OLEVBQU04TixJQUFRcjVELE9BQU9tOEQsRUFDeEUsQ0FDQSxJQUFJendDLEVBQW9Cc3dDLEVBQ2xCSSxHQUFxQjFqRSxFQUFVMmdFLEVBQU0vSSxnQkFDckMsRUFDRitMLEVBQVFILEdBQWNJLEdBQzFCLE1BQU8sSUFBSXQ4RCxPQUFPdEgsRUFBU2hYLEtBQUksU0FBVWtMLEdBQUssT0FBT3l2RSxFQUFNenZFLEVBQUd5c0UsRUFBUSxJQUFHeDhELEtBQUssS0FBTSxLQUFLbUQsT0FBTzByQixFQUFvQixJQUFJMXJCLE9BQU8wckIsR0FBcUIsR0FDeEosQ0FDSixDQUtBLFNBQVMwd0MsR0FBcUIxakUsRUFBVTQzRCxHQUVwQyxJQURBLElBQUluMUMsRUFBTSxFQUNENXpCLEVBQUksRUFBR0EsRUFBSW1SLEVBQVN0YSxPQUFRbUosSUFBSyxDQUN0QyxJQUFJME4sRUFBS3lELEVBQVNuUixHQUNsQixHQUFnQixJQUFaME4sRUFBRzVKLEtBQVAsQ0FHQSxHQUFJa3hFLEdBQW1CdG5FLElBQ2xCQSxFQUFHdS9ELGNBQ0F2L0QsRUFBR3UvRCxhQUFhMTJELE1BQUssU0FBVWxSLEdBQUssT0FBTzJ2RSxHQUFtQjN2RSxFQUFFNmxFLE1BQVEsSUFBSyxDQUNqRnQzQyxFQUFNLEVBQ04sS0FDSixFQUNJbTFDLEVBQWVyN0QsSUFDZEEsRUFBR3UvRCxjQUFnQnYvRCxFQUFHdS9ELGFBQWExMkQsTUFBSyxTQUFVbFIsR0FBSyxPQUFPMGpFLEVBQWUxakUsRUFBRTZsRSxNQUFRLE9BQ3hGdDNDLEVBQU0sRUFUVixDQVdKLENBQ0EsT0FBT0EsQ0FDWCxDQUNBLFNBQVNvaEQsR0FBbUJ0bkUsR0FDeEIsWUFBa0JoRixJQUFYZ0YsRUFBRzgrRCxLQUFnQyxhQUFYOStELEVBQUcwYyxLQUFpQyxTQUFYMWMsRUFBRzBjLEdBQy9ELENBQ0EsU0FBUzJxRCxHQUFROXVELEVBQU02ckQsR0FDbkIsT0FBa0IsSUFBZDdyRCxFQUFLbmlCLEtBQ0VpdUUsR0FBVzlyRCxFQUFNNnJELEdBRUwsSUFBZDdyRCxFQUFLbmlCLE1BQWNtaUIsRUFBS3VULFVBQ3RCeTdDLEdBQVdodkQsR0FHWGl2RCxHQUFRanZELEVBRXZCLENBQ0EsU0FBU2l2RCxHQUFRNzdFLEdBQ2IsTUFBTyxNQUFNb2YsT0FBcUIsSUFBZHBmLEVBQUt5SyxLQUNuQnpLLEVBQUsrN0MsV0FDTCsvQixHQUF5Qi81RCxLQUFLQyxVQUFVaGlCLEVBQUtBLE9BQVEsSUFDL0QsQ0FDQSxTQUFTNDdFLEdBQVcvTyxHQUNoQixNQUFPLE1BQU16dEQsT0FBTzJDLEtBQUtDLFVBQVU2cUQsRUFBUTdzRSxNQUFPLElBQ3RELENBQ0EsU0FBU201RSxHQUFROWtFLEVBQUlva0UsR0FDakIsSUFBSXZFLEVBQVc3L0QsRUFBRzYvRCxVQUFZLFlBQzFCcDhELEVBQVcwaEUsR0FBWW5sRSxFQUFJb2tFLEdBQzNCbCtDLEVBQU0sTUFBTW5iLE9BQU84MEQsR0FBVTkwRCxPQUFPdEgsRUFBVyxzQkFBc0JzSCxPQUFPdEgsRUFBVSxLQUFPLElBQzdGMGQsRUFBUW5oQixFQUFHbWhCLE9BQVNuaEIsRUFBR2luRCxhQUNyQmdmLElBQVVqbUUsRUFBR21oQixPQUFTLElBQUlwVyxPQUFPL0ssRUFBR2luRCxjQUFnQixJQUFJeDZELEtBQUksU0FBVTJ0RCxHQUFRLE1BQU8sQ0FFbkY5cEQsS0FBTTIwQixFQUFTbTFCLEVBQUs5cEQsTUFDcEJ1RixNQUFPdWtELEVBQUt2a0QsTUFDWmd4RCxRQUFTek0sRUFBS3lNLFFBQ2QsS0FDRixLQUNGcHNELEVBQU91RixFQUFHbW5ELFNBQVMsVUFVdkIsT0FUS2htQyxJQUFTMW1CLEdBQVVnSixJQUNwQnlpQixHQUFPLFNBRVAvRSxJQUNBK0UsR0FBTyxJQUFJbmIsT0FBT29XLElBRWxCMW1CLElBQ0F5ckIsR0FBTyxHQUFHbmIsT0FBT29XLEVBQVEsR0FBSyxRQUFTLEtBQUtwVyxPQUFPdFEsSUFFaER5ckIsRUFBTSxHQUNqQixDQUVBLFNBQVM2K0MsR0FBYTJDLEVBQWUxbkUsRUFBSW9rRSxHQUNyQyxJQUFJM2dFLEVBQVd6RCxFQUFHcXpDLGVBQWlCLEtBQU84eEIsR0FBWW5sRSxFQUFJb2tFLEdBQU8sR0FDakUsTUFBTyxNQUFNcjVELE9BQU8yOEQsRUFBZSxLQUFLMzhELE9BQU95c0QsR0FBUXgzRCxFQUFJb2tFLElBQVFyNUQsT0FBT3RILEVBQVcsSUFBSXNILE9BQU90SCxHQUFZLEdBQUksSUFDcEgsQ0FDQSxTQUFTd2lFLEdBQVN2OUUsR0FHZCxJQUZBLElBQUlpL0UsRUFBYyxHQUNkQyxFQUFlLEdBQ1Z0MUUsRUFBSSxFQUFHQSxFQUFJNUosRUFBTVMsT0FBUW1KLElBQUssQ0FDbkMsSUFBSWt1QixFQUFPOTNCLEVBQU00SixHQUNidUQsRUFBUTR4RSxHQUF5QmpuRCxFQUFLM3FCLE9BQ3RDMnFCLEVBQUtxbUMsUUFDTCtnQixHQUFnQixHQUFHNzhELE9BQU95VixFQUFLbHdCLEtBQU0sS0FBS3lhLE9BQU9sVixFQUFPLEtBR3hEOHhFLEdBQWUsSUFBSzU4RCxPQUFPeVYs
3RUFBS2x3QixLQUFNLE1BQU95YSxPQUFPbFYsRUFBTyxJQUVuRSxDQUVBLE9BREE4eEUsRUFBYyxJQUFJNThELE9BQU80OEQsRUFBWTNwRSxNQUFNLEdBQUksR0FBSSxLQUMvQzRwRSxFQUNPLE1BQU03OEQsT0FBTzQ4RCxFQUFhLE1BQU01OEQsT0FBTzY4RCxFQUFhNXBFLE1BQU0sR0FBSSxHQUFJLE1BR2xFMnBFLENBRWYsQ0FFQSxTQUFTRixHQUF5Qjk3RSxHQUM5QixPQUFPQSxFQUFLc0wsUUFBUSxVQUFXLFdBQVdBLFFBQVEsVUFBVyxVQUNqRSxDQUlBLElBQUk0d0UsR0FBc0IsSUFBSWxzRCxPQUFPLE1BQ2pDLGlNQUdLdmtCLE1BQU0sS0FDTndRLEtBQUssV0FDVixPQUVBa2dFLEdBQW1CLElBQUluc0QsT0FBTyxNQUM5QixxQkFBcUJ2a0IsTUFBTSxLQUFLd1EsS0FBSyx5QkFDckMscUJBRUFtZ0UsR0FBZ0IsaUdBRXBCLFNBQVNDLEdBQWE3RCxFQUFLM3FELEdBQ25CMnFELEdBQ0E4RCxHQUFVOUQsRUFBSzNxRCxFQUV2QixDQUNBLFNBQVN5dUQsR0FBVTF2RCxFQUFNaUIsR0FDckIsR0FBa0IsSUFBZGpCLEVBQUtuaUIsS0FBWSxDQUNqQixJQUFLLElBQUlxbEMsS0FBVWxqQixFQUFLNHVDLFNBQ3BCLEdBQUlvVSxHQUFNNzdELEtBQUsrN0IsR0FBUyxDQUNwQixJQUFJNWxDLEVBQVEwaUIsRUFBSzR1QyxTQUFTMXJCLEdBQzFCLEdBQUk1bEMsRUFBTyxDQUNQLElBQUlxQixFQUFRcWhCLEVBQUt5dkMsWUFBWXZzQixHQUNkLFVBQVhBLEVBQ0F5c0MsR0FBUzN2RCxFQUFNLFVBQVd4TixPQUFPbFYsRUFBTyxLQUFPMmpCLEVBQU10aUIsR0FFckMsV0FBWHVrQyxHQUFxQyxNQUFkQSxFQUFPLEdBQ25DMHNDLEdBQWlDdHlFLEVBQU8sR0FBR2tWLE9BQU8wd0IsRUFBUSxNQUFPMXdCLE9BQU9sVixFQUFPLEtBQU8yakIsRUFBTXRpQixHQUV2Rm9rRSxHQUFLNTdELEtBQUsrN0IsR0FDZjJzQyxHQUFXdnlFLEVBQU8sR0FBR2tWLE9BQU8wd0IsRUFBUSxNQUFPMXdCLE9BQU9sVixFQUFPLEtBQU8yakIsRUFBTXRpQixHQUd0RW14RSxHQUFnQnh5RSxFQUFPLEdBQUdrVixPQUFPMHdCLEVBQVEsTUFBTzF3QixPQUFPbFYsRUFBTyxLQUFPMmpCLEVBQU10aUIsRUFFbkYsQ0FDSixDQUVKLEdBQUlxaEIsRUFBSzlVLFNBQ0wsSUFBSyxJQUFJblIsRUFBSSxFQUFHQSxFQUFJaW1CLEVBQUs5VSxTQUFTdGEsT0FBUW1KLElBQ3RDMjFFLEdBQVUxdkQsRUFBSzlVLFNBQVNuUixHQUFJa25CLEVBR3hDLE1BQ3VCLElBQWRqQixFQUFLbmlCLE1BQ1ZpeUUsR0FBZ0I5dkQsRUFBS212QixXQUFZbnZCLEVBQUs1c0IsS0FBTTZ0QixFQUFNakIsRUFFMUQsQ0FDQSxTQUFTNnZELEdBQVd0aUIsRUFBS242RCxFQUFNNnRCLEVBQU10aUIsR0FDakMsSUFBSW94RSxFQUFXeGlCLEVBQUk3dUQsUUFBUTh3RSxHQUFlLElBQ3RDUSxFQUFlRCxFQUFTNXNELE1BQU1vc0QsSUFDOUJTLEdBQTRELE1BQTVDRCxFQUFTbjlELE9BQU9vOUQsRUFBYXI4RSxNQUFRLElBQ3JEc3RCLEVBQUssMkRBQ0QsSUFBS3pPLE9BQU93OUQsRUFBYSxHQUFJLG9CQUFxQng5RCxPQUFPcGYsRUFBS3V2QixRQUFTaGtCLEdBRS9FbXhFLEdBQWdCdmlCLEVBQUtuNkQsRUFBTTZ0QixFQUFNdGlCLEVBQ3JDLENBQ0EsU0FBU2d4RSxHQUFTM3ZELEVBQU01c0IsRUFBTTZ0QixFQUFNdGlCLEdBQ2hDbXhFLEdBQWdCOXZELEVBQUt1bUQsS0FBTyxHQUFJbnpFLEVBQU02dEIsRUFBTXRpQixHQUM1Q3N4RSxHQUFnQmp3RCxFQUFLNm1ELE1BQU8sY0FBZXp6RSxFQUFNNnRCLEVBQU10aUIsR0FDdkRzeEUsR0FBZ0Jqd0QsRUFBS3ltRCxVQUFXLGlCQUFrQnJ6RSxFQUFNNnRCLEVBQU10aUIsR0FDOURzeEUsR0FBZ0Jqd0QsRUFBS3dtRCxVQUFXLGlCQUFrQnB6RSxFQUFNNnRCLEVBQU10aUIsRUFDbEUsQ0FDQSxTQUFTc3hFLEdBQWdCQyxFQUFPcnlFLEVBQU16SyxFQUFNNnRCLEVBQU10aUIsR0FDOUMsR0FBcUIsaUJBQVZ1eEUsRUFDUCxJQUNJLElBQUk3aUQsU0FBUyxPQUFPN2EsT0FBTzA5RCxFQUFPLE1BQ3RDLENBQ0EsTUFBT2orRSxHQUNIZ3ZCLEVBQUssV0FBV3pPLE9BQU8zVSxFQUFNLE1BQU8yVSxPQUFPMDlELEVBQU8scUJBQXNCMTlELE9BQU9wZixFQUFLdXZCLFFBQVNoa0IsRUFDakcsQ0FFUixDQUNBLFNBQVNteEUsR0FBZ0J2aUIsRUFBS242RCxFQUFNNnRCLEVBQU10aUIsR0FDdEMsSUFDSSxJQUFJMHVCLFNBQVMsVUFBVTdhLE9BQU8rNkMsR0FDbEMsQ0FDQSxNQUFPdDdELEdBQ0gsSUFBSSs5RSxFQUFlemlCLEVBQ2Q3dUQsUUFBUTh3RSxHQUFlLElBQ3ZCcnNELE1BQU1tc0QsSUFFUHJ1RCxFQURBK3VELEVBQ0ssb0RBQ0QsSUFBS3g5RCxPQUFPdzlELEVBQWEsR0FBSSx5QkFBMEJ4OUQsT0FBT3BmLEVBQUt1dkIsUUFHbEUsdUJBQXVCblEsT0FBT3ZnQixFQUFFeVcsUUFBUyxXQUMxQyxPQUFPOEosT0FBTys2QyxFQUFLLFFBQ25CLHFCQUFxQi82QyxPQUFPcGYsRUFBS3V2QixPQUFRLE1BTG1DaGtCLEVBT3hGLENBQ0osQ0FDQSxTQUFTaXhFLEdBQWlDcmlCLEVBQUtuNkQsRUFBTTZ0QixFQUFNdGlCLEdBQ3ZELElBQ0ksSUFBSTB1QixTQUFTa2dDLEVBQUssR0FDdEIsQ0FDQSxNQUFPdDdELEdBQ0hndkIsRUFBSywwQ0FBMEN6TyxPQUFPdmdCLEVBQUV5VyxRQUFTLFdBQzdELE9BQU84SixPQUFPKzZDLEVBQUssUUFDbkIscUJBQXFCLzZDLE9BQU9wZixFQUFLdXZCLE9BQVEsTUFBT2hrQixFQUN4RCxDQUNKLENBRUEsSUFBSUEsR0FBUSxFQUNaLFNBQVN3eEUsR0FBa0JwcEQsRUFBUW56QixFQUFPQyxRQUN4QixJQUFWRCxJQUFvQkEsRUFBUSxRQUNwQixJQUFSQyxJQUFrQkEsRUFBTWt6QixFQUFPbjJCLFFBSW5DLElBSEEsSUFBSXcvRSxFQUFRcnBELEVBQU9sb0IsTUFBTSxTQUNyQnd4RSxFQUFRLEVBQ1IxaUQsRUFBTSxHQUNENXpCLEVBQUksRUFBR0EsRUFBSXEyRSxFQUFNeC9FLE9BQVFtSixJQUU5QixJQURBczJFLEdBQVNELEVBQU1yMkUsR0FBR25KLE9BQVMsSUFDZGdELEVBQU8sQ0FDaEIsSUFBSyxJQUFJb04sRUFBSWpILEVBQUk0RSxHQUFPcUMsR0FBS2pILEVBQUk0RSxJQUFTOUssRUFBTXc4RSxFQUFPcnZFLElBQ25ELEtBQUlBLEVBQUksR0FBS0EsR0FBS292RSxFQUFNeC9FLFFBQXhCLENBRUErOEIsRUFBSTEyQixLQUFLLEdBQUd1YixPQUFPeFIsRUFBSSxHQUFHd1IsT0FBTzg5RCxHQUFPLElBQUssRUFBSXJ4RCxPQUFPamUsRUFBSSxHQUFHcFEsUUFBUyxPQUFPNGhCLE9BQU80OUQsRUFBTXB2RSxLQUM1RixJQUFJdXZFLEVBQWFILEVBQU1wdkUsR0FBR3BRLE9BQzFCLEdBQUlvUSxJQUFNakgsRUFBRyxDQUVULElBQUlrTCxFQUFNclIsR0FBU3k4RSxFQUFRRSxHQU
3FjLEVBQ3JDQyxFQUFXMzhFLEVBQU13OEUsRUFBUUUsRUFBYXRyRSxFQUFNcFIsRUFBTUQsRUFDdEQrNUIsRUFBSTEyQixLQUFLLFNBQVdxNUUsR0FBTyxJQUFLcnJFLEdBQU9xckUsR0FBTyxJQUFLRSxHQUN2RCxNQUNLLEdBQUl4dkUsRUFBSWpILEVBQUcsQ0FDWixHQUFJbEcsRUFBTXc4RSxFQUFPLENBQ2IsSUFBSUksRUFBV2hnRixLQUFLd04sSUFBSXBLLEVBQU13OEUsRUFBT0UsR0FDckM1aUQsRUFBSTEyQixLQUFLLFNBQVdxNUUsR0FBTyxJQUFLRyxHQUNwQyxDQUNBSixHQUFTRSxFQUFhLENBQzFCLENBZlksQ0FpQmhCLEtBQ0osQ0FFSixPQUFPNWlELEVBQUl0ZSxLQUFLLEtBQ3BCLENBQ0EsU0FBU2loRSxHQUFPdmtELEVBQUs1ckIsR0FDakIsSUFBSXFHLEVBQVMsR0FDYixHQUFJckcsRUFBSSxFQUVKLEtBRVksRUFBSkEsSUFDQXFHLEdBQVV1bEIsTUFDZDVyQixLQUFPLElBQ0UsSUFFVDRyQixHQUFPQSxFQUdmLE9BQU92bEIsQ0FDWCxDQUVBLFNBQVNrcUUsR0FBZWhmLEVBQU1pZixHQUMxQixJQUNJLE9BQU8sSUFBSXRqRCxTQUFTcWtDLEVBQ3hCLENBQ0EsTUFBT2w2QyxHQUVILE9BREFtNUQsRUFBTzE1RSxLQUFLLENBQUV1Z0IsSUFBS0EsRUFBS2s2QyxLQUFNQSxJQUN2QjlqQyxDQUNYLENBQ0osQ0FDQSxTQUFTZ2pELEdBQTBCQyxHQUMvQixJQUFJcmtELEVBQVEzc0IsT0FBTzFCLE9BQU8sTUFDMUIsT0FBTyxTQUE0QmpPLEVBQVVvWCxFQUFTZ3JCLEdBRWxELElBQUlyUixHQURKM1osRUFBVWttQixFQUFPLENBQUMsRUFBR2xtQixJQUNGMlosTUFBUWtULFVBQ3BCN3NCLEVBQVEyWixLQUlYLElBQ0ksSUFBSW9NLFNBQVMsV0FDakIsQ0FDQSxNQUFPcDdCLEdBQ0NBLEVBQUV1TixXQUFXMmpCLE1BQU0sb0JBQ25CbEMsRUFBSyxtU0FNYixDQUdKLElBQUkvWixFQUFNSSxFQUFRZzNELFdBQ1pyL0MsT0FBTzNYLEVBQVFnM0QsWUFBY3B1RSxFQUM3QkEsRUFDTixHQUFJczhCLEVBQU10bEIsR0FDTixPQUFPc2xCLEVBQU10bEIsR0FHakIsSUFBSTRwRSxFQUFXRCxFQUFRM2dGLEVBQVVvWCxHQUd6QndwRSxFQUFTSCxRQUFVRyxFQUFTSCxPQUFPLy9FLFNBQy9CMFcsRUFBUSs2RCxrQkFDUnlPLEVBQVNILE9BQU9wcEUsU0FBUSxTQUFVdFYsR0FDOUJndkIsRUFBSyxnQ0FBZ0N6TyxPQUFPdmdCLEVBQUV3cEQsSUFBSyxRQUMvQzAwQixHQUFrQmpnRixFQUFVK0IsRUFBRTJCLE1BQU8zQixFQUFFNEIsS0FBTXkrQixFQUNyRCxJQUdBclIsRUFBSyxnQ0FBZ0N6TyxPQUFPdGlCLEVBQVUsUUFDbEQ0Z0YsRUFBU0gsT0FBT3o4RSxLQUFJLFNBQVVqQyxHQUFLLE1BQU8sS0FBS3VnQixPQUFPdmdCLEVBQUksSUFBR29kLEtBQUssTUFDbEUsS0FBTWlqQixJQUdkdytDLEVBQVNDLE1BQVFELEVBQVNDLEtBQUtuZ0YsU0FDM0IwVyxFQUFRKzZELGtCQUNSeU8sRUFBU0MsS0FBS3hwRSxTQUFRLFNBQVV0VixHQUFLLE9BQU9nckMsR0FBSWhyQyxFQUFFd3BELElBQUtucEIsRUFBSyxJQUc1RHcrQyxFQUFTQyxLQUFLeHBFLFNBQVEsU0FBVWswQyxHQUFPLE9BQU94ZSxHQUFJd2UsRUFBS25wQixFQUFLLEtBS3hFLElBQUkzRSxFQUFNLENBQUMsRUFDUHFqRCxFQUFjLEdBb0JsQixPQW5CQXJqRCxFQUFJaEYsT0FBUytuRCxHQUFlSSxFQUFTbm9ELE9BQVFxb0QsR0FDN0NyakQsRUFBSXNULGdCQUFrQjZ2QyxFQUFTN3ZDLGdCQUFnQi9zQyxLQUFJLFNBQVV3OUQsR0FDekQsT0FBT2dmLEdBQWVoZixFQUFNc2YsRUFDaEMsSUFNVUYsRUFBU0gsUUFBV0csRUFBU0gsT0FBTy8vRSxTQUFXb2dGLEVBQVlwZ0YsUUFDN0Rxd0IsRUFBSywwQ0FDRCt2RCxFQUNLOThFLEtBQUksU0FBVTBOLEdBQ2YsSUFBSTRWLEVBQU01VixFQUFHNFYsSUFBS2s2QyxFQUFPOXZELEVBQUc4dkQsS0FDNUIsTUFBTyxHQUFHbC9DLE9BQU9nRixFQUFJaFksV0FBWSxXQUFXZ1QsT0FBT2svQyxFQUFNLEtBQzdELElBQ0tyaUQsS0FBSyxNQUFPaWpCLEdBR3JCOUYsRUFBTXRsQixHQUFPeW1CLENBQ3pCLENBQ0osQ0FFQSxTQUFTc2pELEdBQXNCQyxHQUMzQixPQUFPLFNBQXdCckksR0FDM0IsU0FBU2dJLEVBQVEzZ0YsRUFBVW9YLEdBQ3ZCLElBQUk2cEUsRUFBZXR4RSxPQUFPMUIsT0FBTzBxRSxHQUM3QjhILEVBQVMsR0FDVEksRUFBTyxHQUNQOXZELEVBQU8sU0FBVXc2QixFQUFLOThDLEVBQU9zK0IsSUFDNUJBLEVBQU04ekMsRUFBT0osR0FBUTE1RSxLQUFLd2tELEVBQy9CLEVBQ0EsR0FBSW4wQyxFQUFTLENBQ1QsR0FBSUEsRUFBUSs2RCxrQkFBbUIsQ0FFM0IsSUFBSStPLEVBQXVCbGhGLEVBQVNpekIsTUFBTSxRQUFRLEdBQUd2eUIsT0FDckRxd0IsRUFBTyxTQUFVdzZCLEVBQUs5OEMsRUFBT3MrQixHQUN6QixJQUFJN3NDLEVBQXNCLGlCQUFScXJELEVBQW1CLENBQUVBLElBQUtBLEdBQVFBLEVBQ2hEOThDLElBQ21CLE1BQWZBLEVBQU0vSyxRQUNOeEQsRUFBS3dELE1BQVErSyxFQUFNL0ssTUFBUXc5RSxHQUVkLE1BQWJ6eUUsRUFBTTlLLE1BQ056RCxFQUFLeUQsSUFBTThLLEVBQU05SyxJQUFNdTlFLEtBRzlCbjBDLEVBQU04ekMsRUFBT0osR0FBUTE1RSxLQUFLN0csRUFDL0IsQ0FDSixDQVVBLElBQUssSUFBSThXLEtBUkxJLEVBQVEwbUIsVUFDUm1qRCxFQUFhbmpELFNBQVc2NkMsRUFBWTc2QyxTQUFXLElBQUl4YixPQUFPbEwsRUFBUTBtQixVQUdsRTFtQixFQUFRODFDLGFBQ1IrekIsRUFBYS96QixXQUFhNXZCLEVBQU8zdEIsT0FBTzFCLE9BQU8wcUUsRUFBWXpy
3QixZQUFjLE1BQU85MUMsRUFBUTgxQyxhQUc1RTkxQyxFQUNBLFlBQVJKLEdBQTZCLGVBQVJBLElBQ3JCaXFFLEVBQWFqcUUsR0FBT0ksRUFBUUosR0FHeEMsQ0FDQWlxRSxFQUFhbHdELEtBQU9BLEVBQ3BCLElBQUk2dkQsRUFBV0ksRUFBWWhoRixFQUFTeXlCLE9BQVF3dUQsR0FNNUMsT0FKSTFCLEdBQWFxQixFQUFTbEYsSUFBSzNxRCxHQUUvQjZ2RCxFQUFTSCxPQUFTQSxFQUNsQkcsRUFBU0MsS0FBT0EsRUFDVEQsQ0FDWCxDQUNBLE1BQU8sQ0FDSEQsUUFBU0EsRUFDVFEsbUJBQW9CVCxHQUEwQkMsR0FFdEQsQ0FDSixDQUtBLElBZ0JJUyxHQUhrQ0QsR0FiakJKLElBQXNCLFNBQXFCL2dGLEVBQVVvWCxHQUN0RSxJQUFJc2tFLEVBQU01c0UsR0FBTTlPLEVBQVN5eUIsT0FBUXJiLElBQ1IsSUFBckJBLEVBQVEwaEUsVUFDUkEsR0FBUzRDLEVBQUt0a0UsR0FFbEIsSUFBSW9xRCxFQUFPaWEsR0FBU0MsRUFBS3RrRSxHQUN6QixNQUFPLENBQ0hza0UsSUFBS0EsRUFDTGpqRCxPQUFRK29DLEVBQUsvb0MsT0FDYnNZLGdCQUFpQnl3QixFQUFLendCLGdCQUU5QixHQUVTc3dDLENBQWUxSSxJQUFzQ3dJLG1CQUk5RCxTQUFTRyxHQUFnQkMsR0FHckIsT0FGQUgsR0FBTUEsSUFBT3Z6RSxTQUFTNEwsY0FBYyxRQUNoQzZELFVBQVlpa0UsRUFBTyxpQkFBcUIsZ0JBQ3JDSCxHQUFJOWpFLFVBQVV6RSxRQUFRLFNBQVcsQ0FDNUMsQ0FFQSxJQUFJNDNELEtBQXVCandDLElBQVk4Z0QsSUFBZ0IsR0FFbkRwUCxLQUE4QjF4QyxJQUM1QjhnRCxJQUFnQixHQUdsQkUsR0FBZW5sRCxHQUFPLFNBQVU3MkIsR0FDaEMsSUFBSStSLEVBQUsrN0MsR0FBTTl0RCxHQUNmLE9BQU8rUixHQUFNQSxFQUFHK0YsU0FDcEIsSUFDSW1rRSxHQUFRdm5ELEdBQUk5cEIsVUFBVTgzQyxPQStEMUIsU0FBU3c1QixHQUFhbnFFLEdBQ2xCLEdBQUlBLEVBQUdvcUUsVUFDSCxPQUFPcHFFLEVBQUdvcUUsVUFHVixJQUFJL2pFLEVBQVkvUCxTQUFTNEwsY0FBYyxPQUV2QyxPQURBbUUsRUFBVWpCLFlBQVlwRixFQUFHeTJELFdBQVUsSUFDNUJwd0QsRUFBVU4sU0FFekIsQ0FRQSxTQUFTdW9CLEdBQU85ekIsRUFBSTZ2RSxHQUNoQixJQUFJMzJDLEVBQVUsSUFBSUMsR0FBUWxKLEdBQWlCandCLEVBQUkyckIsRUFBTSxDQUNqRHluQixNQUFNLElBRU55OEIsSUFDQTMyQyxFQUFRcHBDLE9BQVMsV0FDYisvRSxHQUFVLFdBQWMsT0FBTzMyQyxFQUFRcVAsS0FBTyxHQUNsRCxFQUVSLENBS0EsT0E3RkFwZ0IsR0FBSTlwQixVQUFVODNDLE9BQVMsU0FBVTN3QyxFQUFJd2tDLEdBR2pDLElBRkF4a0MsRUFBS0EsR0FBTSs3QyxHQUFNLzdDLE1BRU4xSixTQUFTeU4sTUFBUS9ELElBQU8xSixTQUFTZzBFLGdCQUV4QyxPQURBNTlDLEdBQU8sNEVBQ0EzakMsS0FFWCxJQUFJOFcsRUFBVTlXLEtBQUtva0MsU0FFbkIsSUFBS3R0QixFQUFRcWhCLE9BQVEsQ0FDakIsSUFBSXo0QixFQUFXb1gsRUFBUXBYLFNBQ3ZCLEdBQUlBLEVBQ0EsR0FBd0IsaUJBQWJBLEVBQ29CLE1BQXZCQSxFQUFTMGlCLE9BQU8sTUFDaEIxaUIsRUFBV3doRixHQUFheGhGLEtBR3BCaWtDLEdBQU8sMkNBQTJDM2hCLE9BQU9sTCxFQUFRcFgsVUFBV00sV0FJbkYsS0FBSU4sRUFBUzB1QixTQU9kLE9BRkl1VixHQUFPLDJCQUE2QmprQyxFQUFVTSxNQUUzQ0EsS0FOUE4sRUFBV0EsRUFBU3NkLFNBT3hCLE1BRUsvRixJQUVMdlgsRUFBVzBoRixHQUFhbnFFLElBRTVCLEdBQUl2WCxFQUFVLENBRU5xUixFQUFPOHRCLGFBQWVnTCxJQUN0QkEsR0FBSyxXQUVULElBQUl6NEIsRU
3FBS3l2RSxHQUFtQm5oRixFQUFVLENBQ2xDbXlFLG1CQUFtQixFQUNuQjFCLHFCQUFzQkEsR0FDdEJ5Qiw0QkFBNkJBLEdBQzdCOUQsV0FBWWgzRCxFQUFRZzNELFdBQ3BCaUgsU0FBVWorRCxFQUFRaStELFVBQ25CLzBFLE1BQU9tNEIsRUFBUy9tQixFQUFHK21CLE9BQVFzWSxFQUFrQnIvQixFQUFHcS9CLGdCQUNuRDM1QixFQUFRcWhCLE9BQVNBLEVBQ2pCcmhCLEVBQVEyNUIsZ0JBQWtCQSxFQUV0QjEvQixFQUFPOHRCLGFBQWVnTCxLQUN0QkEsR0FBSyxlQUNMQyxHQUFRLE9BQU85bkIsT0FBT2hpQixLQUFLbzhDLE1BQU8sWUFBYSxVQUFXLGVBRWxFLENBQ0osQ0FDQSxPQUFPK2tDLEdBQU1ueEUsS0FBS2hRLEtBQU1pWCxFQUFJd2tDLEVBQ2hDLEVBZUE3aEIsR0FBSXltRCxRQUFVUSxHQWtCZDdqRCxFQUFPcEQsR0FBS3NxQixJQUNadHFCLEdBQUkyTCxPQUFTQSxHQUVOM0wsRUFFUixDQXJwWGlGL0MscUhDTGxGLFNBQVNwMUIsRUFBRUEsR0FBRyxJQUFJLElBQUlnTyxFQUFFLEVBQUVBLEVBQUVHLFVBQVV4UCxPQUFPcVAsSUFBSSxDQUFDLElBQUlXLEVBQUVSLFVBQVVILEdBQUcsSUFBSSxJQUFJRSxLQUFLUyxFQUFFM08sRUFBRWtPLEdBQUdTLEVBQUVULEVBQUUsQ0FBQyxPQUFPbE8sQ0FBQywrQkFBQyxJQUFJZ08sRUFBRSxTQUFTQSxFQUFFVyxFQUFFVCxHQUFHLFNBQVM0bkIsRUFBRTluQixFQUFFOG5CLEVBQUVodUIsR0FBRyxHQUFHLG9CQUFvQmdFLFNBQVMsQ0FBQyxpQkFBaUJoRSxFQUFFOUgsRUFBRSxDQUFDLEVBQUVrTyxFQUFFcEcsSUFBSWk0RSxVQUFVajRFLEVBQUVpNEUsUUFBUSxJQUFJLzBFLEtBQUtBLEtBQUtrTCxNQUFNLE1BQU1wTyxFQUFFaTRFLFVBQVVqNEUsRUFBRWk0RSxVQUFVajRFLEVBQUVpNEUsUUFBUWo0RSxFQUFFaTRFLFFBQVFDLGVBQWVoeUUsRUFBRWl5RSxtQkFBbUJqeUUsR0FBR3ZCLFFBQVEsdUJBQXVCeXpFLG9CQUFvQnp6RSxRQUFRLFFBQVEwekUsUUFBUSxJQUFJaHpFLEVBQUUsR0FBRyxJQUFJLElBQUk2bUIsS0FBS2xzQixFQUFFQSxFQUFFa3NCLEtBQUs3bUIsR0FBRyxLQUFLNm1CLEdBQUUsSUFBS2xzQixFQUFFa3NCLEtBQUs3bUIsR0FBRyxJQUFJckYsRUFBRWtzQixHQUFHcG5CLE1BQU0sS0FBSyxLQUFLLE9BQU9kLFNBQVNzMEUsT0FBT3B5RSxFQUFFLElBQUlXLEVBQUUweEUsTUFBTXZxRCxFQUFFOW5CLEdBQUdiLENBQUMsQ0FBQyxDQUFDLE9BQU9TLE9BQU8xQixPQUFPLENBQUMyYixJQUFJaU8sRUFBRTVvQixJQUFJLFNBQVNsTixHQUFHLEdBQUcsb0JBQW9COEwsWUFBWXFDLFVBQVV4UCxRQUFRcUIsR0FBRyxDQUFDLElBQUksSUFBSWdPLEVBQUVsQyxTQUFTczBFLE9BQU90MEUsU0FBU3MwRSxPQUFPeHpFLE1BQU0sTUFBTSxHQUFHc0IsRUFBRSxDQUFDLEVBQUU0bkIsRUFBRSxFQUFFQSxFQUFFOW5CLEVBQUVyUCxPQUFPbTNCLElBQUksQ0FBQyxJQUFJaHVCLEVBQUVrRyxFQUFFOG5CLEdBQUdscEIsTUFBTSxLQUFLTyxFQUFFckYsRUFBRTBMLE1BQU0sR0FBRzRKLEtBQUssS0FBSyxJQUFJLElBQUk0VyxFQUFFa3NELG1CQUFtQnA0RSxFQUFFLElBQUksR0FBR29HLEVBQUU4bEIsR0FBR3JsQixFQUFFMnhFLEtBQUtuekUsRUFBRTZtQixHQUFHaDBCLElBQUlnMEIsRUFBRSxLQUFLLENBQUMsTUFBTWgwQixHQUFHLENBQUMsQ0FBQyxPQUFPQSxFQUFFa08sRUFBRWxPLEdBQUdrTyxDQUFDLENBQUMsRUFBRTlJLE9BQU8sU0FBUzRJLEVBQUVXLEdBQUdtbkIsRUFBRTluQixFQUFFLEdBQUdoTyxFQUFFLENBQUMsRUFBRTJPLEVBQUUsQ0FBQ294RSxTQUFTLElBQUksRUFBRVEsZUFBZSxTQUFTNXhFLEdBQUcsT0FBT1gsRUFBRXpQLEtBQUtpaUYsVUFBVXhnRixFQUFFLENBQUMsRUFBRXpCLEtBQUtraUYsV0FBVzl4RSxHQUFHLEVBQUUreEUsY0FBYyxTQUFTL3hFLEdBQUcsT0FBT1gsRUFBRWhPLEVBQUUsQ0FBQyxFQUFFekIsS0FBS2lpRixVQUFVN3hFLEdBQUdwUSxLQUFLa2lGLFdBQVcsR0FBRyxDQUFDQSxXQUFXLENBQUNwMUUsTUFBTXVDLE9BQU8ycUIsT0FBT3JxQixJQUFJc3lFLFVBQVUsQ0FBQ24xRSxNQUFNdUMsT0FBTzJxQixPQUFPNXBCLEtBQUssQ0FBcmdDLENBQXVnQyxDQUFDMnhFLEtBQUssU0FBU3RnRixHQUFHLE1BQU0sTUFBTUEsRUFBRSxLQUFLQSxFQUFFQSxFQUFFd1QsTUFBTSxHQUFHLElBQUl4VCxFQUFFeU0sUUFBUSxtQkFBbUJ5ekUsbUJBQW1CLEVBQUVHLE1BQU0sU0FBU3JnRixHQUFHLE9BQU9pZ0YsbUJBQW1CamdGLEdBQUd5TSxRQUFRLDJDQUEyQ3l6RSxtQkFBbUIsR0FBRyxDQUFDamlFLEtBQUssTUFBTSxZQ0E1MUN1WCxFQUEyQixDQUFDLEVBR2hDLFNBQVNtckQsRUFBb0JsckQsR0FFNUIsSUFBSUMsRUFBZUYsRUFBeUJDLEdBQzVDLFFBQXFCamxCLElBQWpCa2xCLEVBQ0gsT0FBT0EsRUFBYVQsUUFHckIsSUFBSU0sRUFBU0MsRUFBeUJDLEdBQVksQ0FHakRSLFFBQVMsQ0FBQyxHQU9YLE9BSEFLLEVBQW9CRyxHQUFVbG5CLEtBQUtnbkIsRUFBT04sUUFBU00sRUFBUUEsRUFBT04sUUFBUzByRCxHQUdwRXByRCxFQUFPTixPQUNmLENDckJBMHJELEVBQW9CenlFLEVBQUtxbkIsSUFDeEIsSUFBSUksRUFBU0osR0FBVUEsRUFBT0ssV0FDN0IsSUFBT0wsRUFBaUIsUUFDeEIsSUFBTSxFQUVQLE9BREFvckQsRUFBb0J6bEUsRUFBRXlhLEVBQVEsQ0FBRTdtQixFQUFHNm1CLElBQzVCQSxDQUFNLEVDTGRnckQsRUFBb0J6bEUsRUFBSSxDQUFDK1osRUFBU1ksS0FDakMsSUFBSSxJQUFJNWdCLEtBQU80Z0IsRUFDWDhxRCxFQUFvQjdxRCxFQUFFRCxFQUFZNWdCLEtBQVMwckUsRUFBb0I3cUQsRUFBRWIsRUFBU2hnQixJQUM1RXJILE9BQU82YixlQUFld0wsRUFBU2hnQixFQUFLLENBQUU4Z0IsWUFBWSxFQUFNN29CLElBQUsyb0IsRUFBVzVnQixJQUUxRSxFQ05EMHJFLEVBQW9CdmhELEVBQUksV0FDdkIsR0FBMEIsaUJBQWZ3aEQsV0FBeUIsT0FBT0EsV0FDM0MsSUFDQyxPQUFPcmlGLE1BQVEsSUFBSTY4QixTQUFTLGNBQWIsRUFDaEIsQ0FBRSxNQUFPcDdCLEdBQ1IsR0FBc0IsaUJBQVhzUSxPQUFxQixPQUFPQSxNQUN4QyxDQUNBLENBUHVCLEdDQXhCcXdFLEVBQW9CN3FELEVBQUksQ0FBQzcyQixFQUFLKzJCLElBQVVwb0IsT0FBT1MsVUFBVUMsZUFBZUMsS0FBS3RQLEVBQUsrMkIsR0NDbEYycUQsRUFBb0JoeUUsRUFBS3NtQixJQUNILG9CQUFYMkssUUFBMEJBLE9BQU80VixhQUMxQzVuQyxPQUFPNmIsZUFBZXd
3MLEVBQVMySyxPQUFPNFYsWUFBYSxDQUFFbnFDLE1BQU8sV0FFN0R1QyxPQUFPNmIsZUFBZXdMLEVBQVMsYUFBYyxDQUFFNXBCLE9BQU8sR0FBTywwa0JDSTlEaE0sUUFBTyxTQUFVd2hGLEdBQ2IsSUFBSUMsRUFBU0QsRUFBRSxvQkFFZkMsRUFBT0MsTUFBSyxDQUFDci9FLEVBQU95NEIsS0FFaEIsSUFFSTEyQixFQUZRbzlFLEVBQUUxbUQsR0FFQ3kxQixLQUFLLE1BR2hCb3hCLEVBQWMxd0UsT0FBTzdNLEdBRWYsSUFBSSxJQUFKLENBQVEsQ0FDZCtSLEdBQUksSUFBTS9SLEVBQ1YxRixXQUFZLENBQ1J3OUQsUUFBUyxVQUNUMGxCLE1BQU8sVUFDUDczRSxLQUFNLFVBQ044M0UsU0FBVSxVQUNWQyxVQUFXLFdBRWZsakYsU0FBVSwwbEVBc0NWRSxLQUFNLENBQ0ZzRixHQUFJQSxFQUNKMjlFLFlBQWEsQ0FBQyxPQUFRLFFBQVMsT0FDL0JDLFlBQWEsUUFDYnRpRixRQUFTLEdBQ1R3OEQsUUFBUyxHQUNUMThELFNBQVUsR0FDVnlpRixZQUFhLEdBQ2JDLFlBQWEsR0FDYjM4RSxTQUFVLEdBR1ZwRixhQUFhLEVBQ2J3RCxZQUFZLEVBQ1pJLFlBQVksRUFDWkUsYUFBYSxFQUViaytFLGlCQUFpQixFQUNqQkMsV0FBVyxFQUVYQyxtQkFBbUIsRUFFbkIxckMsU0FBUyxFQUNUMnJDLGNBQWMsR0FHbEJ4eUIsUUFBUyxXQTBCTCxHQXpCQTV3RCxLQUFLcWpGLGNBQ0xyakYsS0FBS3NqRixjQUVMeGlGLE9BQU8sUUFBUThHLFNBQVMsb0JBRXhCNUgsS0FBS00sU0FBV21pRixFQUFZbmlGLGNBR1UyUixJQUFsQ2pTLEtBQUtNLFNBQVMyaUYsa0JBQ2RqakYsS0FBS2lqRixnQkFBa0JqakYsS0FBS00sU0FBUzJpRixpQkFHckNqakYsS0FBS00sU0FBU3VpRixjQUNkN2lGLEtBQUs2aUYsWUFBYzdpRixLQUFLTSxTQUFTdWlGLGFBR2pDN2lGLEtBQUtNLFNBQVNpakYsY0FDZHZqRixLQUFLOGlGLFlBQWM5aUYsS0FBS00sU0FBU2lqRixhQUlqQ2hCLEVBQU9uaUYsT0FBUyxJQUNoQkosS0FBS21qRixtQkFBb0IsR0FHekJuakYsS0FBS00sU0FBU2tqRixRQUFTLENBQ3ZCLElBQUlBLEVBQVV4akYsS0FBS00sU0FBU2tqRixRQUM1QnhqRixLQUFLa2pGLFVBQVksdUJBQXlCTSxFQUFVLElBQU14akYsS0FBS2tGLEVBQ25FLENBRUtsRixLQUFLbWpGLG1CQUNObmpGLEtBQUt5akYsV0FHVHpqRixLQUFLMGpGLGdCQUVMMWpGLEtBQUsraUYsWUFBY3ArRCxLQUFLblcsTUFBTW1XLEtBQUtDLFVBQVU1a0IsS0FBS2c5RCxVQUNsRGg5RCxLQUFLZ2pGLFlBQWNyK0QsS0FBS25XLE1BQU1tVyxLQUFLQyxVQUFVNWtCLEtBQUtRLFVBRWxEUixLQUFLeTNDLFNBQVUsQ0FFbkIsRUFDQTMzQyxTQUFVLENBQ042akYsZUFBZ0IsV0FDWixJQUFJQyxHQUFrQixFQUN0QixJQUFLLElBQUluakYsS0FBVVQsS0FBS2c5RCxRQUNBLFdBQWhCdjhELEVBQU80TSxNQUFxQjVNLEVBQU93SyxZQUFjeEssRUFBT3lLLFdBQ3hEMDRFLEVBQWtCLENBQUNuakYsRUFBT3dLLFdBQVl4SyxFQUFPeUssV0FHckQsT0FBTzA0RSxDQUNYLEVBRUFDLGdCQUFpQixXQUViLEdBQUk3akYsS0FBS00sVUFBWU4sS0FBS00sU0FBU3dqRixRQUFVOWpGLEtBQUtNLFNBQVN3akYsT0FBT0MsVUFBVyxDQUN6RSxJQUFJQyxFQUFtQmhrRixLQUFLaWtGLGNBQWdCLElBRTVDLE9BREFELEdBQXFCaGtGLEtBQUtpa0YsY0FBZ0IsRUFBS2prRixLQUFLTSxTQUFTd2pGLE9BQU9DLFVBQVVHLE9BQVNsa0YsS0FBS00sU0FBU3dqRixPQUFPQyxVQUFVSSxRQUUxSCxDQUNJLE1BQU8sRUFFZixFQUVBQyxvQkFBcUIsV0FDakIsT0FBOEIsSUFBdEJwa0YsS0FBS29qRixhQUF5QixhQUFlLGFBQ3pELEVBTUEsV0FBQWlCLEdBQ0ksT0FBSXJrRixLQUFLTSxTQUFTZ2tGLGlCQUNQdGtGLEtBQUsraUYsWUFFTC9pRixLQUFLZzlELE9BRXBCLEVBTUEsYUFBQWluQixHQUNJLE9BQU9qa0YsS0FBS3VrRixlQUFlbmtGLE1BQy9CLEVBRUEsb0JBQUFva0YsR0FDSSxPQUFPeGtGLEtBQUt5a0YsbUJBQW1CcmtGLE1BQ25DLEVBRUFta0YsZUFBZ0IsV0FDWixPQUFPdmtGLEtBQUtRLFFBQVFDLFFBQU8sU0FBVUMsR0FFakMsT0FBeUIsSUFBakJBLEVBQUlna0YsV0FBbUMsSUFBZGhrRixFQUFJaWtGLEtBQ3pDLEdBQ0osRUFFQUYsbUJBQW9CLFdBQ2hCLE9BQU96a0YsS0FBS2dqRixZQUFZdmlGLFFBQU8sU0FBVUMsR0FFckMsT0FBeUIsSUFBakJBLEVBQUlna0YsV0FBbUMsSUFBZGhrRixFQUFJaWtGLEtBQ3pDLEdBQ0osRUFFQUMsY0FBZSxXQUNYLE9BQU81a0YsS0FBS1EsUUFBUUMsUUFBTyxTQUFVQyxHQUVqQyxPQUF3QixJQUFqQkEsRUFBSWdrRixRQUNmLEdBQ0osRUFFQXJrRixjQUFlLFdBQ1gsSUFBSUEsRUFBZ0JMLEtBQUtRLFFBQVFKLE9BTWpDLE9BSklKLEtBQUtNLFVBQVlOLEtBQUtNLFNBQVN1a0YsYUFBZTdrRixLQUFLOGlGLGNBQ25EemlGLEVBQWlCTCxLQUFLTSxTQUFTdWtGLFlBQVk3a0YsS0FBSzhpRixhQUFlLEVBQUs5aUYsS0FBS00sU0FBU3VrRixZQUFZN2tGLEtBQUs4aUYsYUFBZTlpRixLQUFLUSxRQUFRSixRQUc1SGUsT0FBT2QsRUFDbEIsR0FFSm1CLFFBQVMsQ0FLTCxpQkFBQXNqRixDQUFrQjdoRixHQUNkakQsS0FBS3lPLE1BQU0vSyxJQUFJb0QsWUFBWTdELEVBQy9CLEVBRUEsV0FBQXlILEdBQ0kxSyxLQUFLb2pGLGNBQWdCcGpGLEtBQUtvakYsWUFDOUIsRUFHQSxVQUFBNTRFLENBQVdDLEdBQ1B6SyxLQUFLOGlGLFlBQWNyNEUsRUFFSCxTQUFaQSxHQUNBekssS0FBS3lPLE1BQU0vSyxJQUFJVyxhQUluQnJFLEtBQUsra0YsV0FDVCxFQUdBLGVBQUFDLEdBQ0lobEYsS0FBS2c5RCxRQUFVcjRDLEtBQUtuVyxNQUFNbVcsS0FBS0MsVUFBVTVrQixLQUFLK2lGLGNBQzlDL2lGLEtBQUswakYsY0FBYyxNQUN2QixFQUVBLGdCQUFBdUIsQ0FBaUJ6NUUsR0FDTSxXQUFmQSxFQUFNNkIsT0FDTjdCLEVBQU0wNUUsZUFBZ0IsR0FFdEJsbEYsS0FBS00sU0FBU2drRixpQkFDZHRrRixLQUFLbWxGLG1CQUFtQjM1RSxHQUV4QnhMLEtBQUswakYsY0FBY2w0RSxFQUUzQixFQUVBLFNBQUE0NUUsQ0FBVUMsR0FHTixJQUFLLElBQUkza0YsS0FGVFYsS0FBS3FHLFNBQVdnL0UsRUFFQXJsRixLQUFLUSxTQUNiUixLQUFLcUcsU0FBU2d1RCxTQUFTM3pELEdBQ3ZCQSxFQUFJaWtGLE9BQVEsRUFFWmprRixFQUFJaWtGLE9BQVEsRUFJcEIza0YsS0FBSzBqRixlQUNULEVBRUEsYUFBQTRCLENBQWNDLEVBQVd6NEUsR0FDckIsSUFBSTdKLEVBQVNqRCxLQUFLUSxRQUFRdUcsTUFBTTYwQixHQUNyQkEsRUFBSzEyQixJQUFNcWdGLElBRXRCdGlGLEVBQU9DLFNBQVc0SixFQUNsQjlNLEtBQUt5TyxNQUFNL0ssSUFBSU0sWUFDbkIsRUFNQSxhQUFNd2hGLENBQVFobEYsRUFBU3c4RCxHQUVuQixJQUFLLElBQUl2OEQsS0FBVXU4RCxFQUNLLFdBQWhCdjhELEVBQU80TSxZQUNEck4sS0FBS3lsRix1QkFBdUJobEYsRUFBUUQsR0FNbEQsSUFBSyxJQUFJeUMsS0FBVXpDLEVBQ1hSLEtBQUswbEYsdUJBQXVCemlGLEVBQVErNUQsR0FDcEMvNUQsRUFBT3loRixVQUFXLEVBRWxCemhGLEVBQU95aEYsVUFBVyxHQUVNLElBQXhCMWtGLEtBQUsyakYsZ0JBQTRCMWdGLEVBQU8waUYsY0FDeEMxaUYsRUFBTzBpRixZQUFjLEdBR2pDLEVBQ0EsNEJBQU1GLENBQXVCaGxGLEVBQVFELEdBSWpDLFNBQThCeVIsSUFBekJ4UixFQUFPeWtGLGdCQUF3RCxJQUF6QnprRixFQUFPeWtGLGdCQUEyQnprRixFQUFPd0ssWUFBY3hLLEVBQU95SyxTQUFVLENBQy9HbEwsS0FBS3kzQyxTQUFVLEVBR2YsSUFBSW11QyxFQUFtQixHQUN2QixJQUFLLElBQUkzaUYsS0FBVXpDLE9BQ015UixJQUFqQmhQLEVBQU80aUYsTUFDUEQsRUFBaUJuL0UsS0FBSyxDQUFDdkIsR0FBSWpDLEVBQU9pQyxHQU
3FJMmdGLE1BQU81aUYsRUFBTzRpRixRQUVwREQsRUFBaUJuL0UsS0FBSyxDQUFDdkIsR0FBSWpDLEVBQU9pQyxLQUkxQyxHQUFJMUUsRUFBUUosT0FBUyxFQUFHLENBR3BCLElBQUk4QixFQUFlLENBQ2YsT0FBVSxTQUNWLFNBQVl1Z0YsRUFBWXFELEtBQUsxakYsU0FDN0IsV0FBYyxhQUNkLE9BQVUsY0FDVixPQUFVLENBQ04sUUFBV3dqRixFQUNYLFdBQWNubEYsRUFBT3dLLFdBQ3JCLFNBQVl4SyxFQUFPeUssaUJBTXJCcEssT0FBT3VCLEtBQUtvZ0YsRUFBWXFELEtBQUtDLFFBQVM3akYsR0FDdkNLLE1BQUssV0FDRkMsTUFBTSxrQ0FDVixJQUNDQyxNQUFNQyxJQUVILEdBQUlBLEdBQ0lBLEVBQVNDLFNBRUxELEVBQVNHLE1BQU8sQ0FDWkgsRUFBU0csTUFBTW1qRix3QkFDZnZsRixFQUFPdUcsTUFBUXRFLEVBQVNHLE1BQU1takYsdUJBR2xDLElBQUlDLEVBQW9CLEdBRXBCdmpGLEVBQVNHLE1BQU1vakYsb0JBQ2ZBLEVBQW9CdmpGLEVBQVNHLE1BQU1vakYsbUJBR3ZDLElBQUssSUFBSXZsRixLQUFPRixFQUVaLEdBQUlDLEVBQU91RyxNQUFNcXRELFNBQVMzekQsRUFBSXdFLElBQUssQ0FFL0IsSUFBSUksRUFBTyxHQUVYLElBQUk0Z0YsRUFBS0QsRUFBa0J2bEYsRUFBSXdFLElBRS9CLEdBQUlnaEYsR0FBTUEsRUFBR0MsS0FJVDdnRixFQUFPLGtGQUZjdEYsS0FBS00sU0FBU3dqRixPQUFPc0MsT0FBT0MsWUFBWW40RSxRQUFRLEtBQU1nNEUsRUFBR0MsdUVBU2xGN2dGLEVBQU8sMEtBRlV0RixLQUFLTSxTQUFTd2pGLE9BQU9zQyxPQUFPRSwrRUFLMUNoaEYsMEhBR0g1RSxFQUFJaWxGLFlBQWNyZ0YsQ0FFdEIsQ0FJUixDQUlSN0UsRUFBT3lrRixlQUFnQixFQUV2QmxsRixLQUFLeTNDLFNBQVUsQ0FBSyxHQUVoQyxDQUVKLENBQ0osRUFFQSxtQkFBTWlzQyxDQUFjbDRFLEdBRWhCLElBQUkrNkUsR0FBWSxFQUNoQixHQUFJLzZFLEdBQVNBLEVBQU1nN0UsV0FDZkQsR0FBWSxPQUNULEdBQWMsUUFBVi82RSxFQUNQLElBQUssSUFBSUEsS0FBU3hMLEtBQUtnOUQsUUFHZnh4RCxFQUFNZzdFLFlBRWEsV0FBZmg3RSxFQUFNRyxNQUFxQkgsRUFBTWk3RSxZQUFjajdFLEVBQU1zQixRQUNyRHk1RSxHQUFZLEdBTXhCQSxHQUNBdm1GLEtBQUtxRyxTQUFXLEdBQ2hCckcsS0FBS3lPLE1BQU0vSyxJQUFJcUYscUJBQXFCa3lCLE1BQUtsM0IsVUFFckMvRCxLQUFLK2tGLGtCQUVDL2tGLEtBQUt3bEYsUUFBUXhsRixLQUFLUSxRQUFTUixLQUFLZzlELFFBQVEsTUFJbERoOUQsS0FBSytrRixrQkFFQy9rRixLQUFLd2xGLFFBQVF4bEYsS0FBS1EsUUFBU1IsS0FBS2c5RCxTQUc5QyxFQUVBLHdCQUFNbW9CLENBQW1CMzVFLFNBQ2Z4TCxL
3QUFLd2xGLFFBQVF4bEYsS0FBS2dqRixZQUFhaGpGLEtBQUsraUYsWUFDOUMsRUFFQSxzQkFBQTJDLENBQXVCemlGLEVBQVErNUQsR0FHM0IsSUFBSTBwQixHQUFXLEVBR2YsSUFBSyxJQUFJam1GLEtBQVV1OEQsRUFHZixHQUFvQixhQUFoQnY4RCxFQUFPa0wsTUFFUCxHQUF3QixRQUFwQmxMLEVBQU9rbUYsU0FBb0IsQ0FDM0IsSUFBSUMsR0FBaUIsRUFDckIsSUFBSyxJQUFJcjlELEtBQVU5b0IsRUFBT3FXLFFBQ0QsT0FBakJ5UyxFQUFPemMsT0FDSHljLEVBQU96YyxRQUNGeWMsRUFBT3ZpQixNQUFNcXRELFNBQVNweEQsRUFBT2lDLE1BQzlCMGhGLEdBQWlCLElBTzdCQSxJQUVBRixHQUFXLEVBRW5CLE1BQU8sR0FBd0IsT0FBcEJqbUYsRUFBT2ttRixTQUFtQixDQUVqQyxJQUFJRSxHQUFxQixFQUlyQkMsR0FBZ0IsRUFFcEIsSUFBSyxJQUFJdjlELEtBQVU5b0IsRUFBT3FXLFFBQ0QsT0FBakJ5UyxFQUFPemMsT0FDSHljLEVBQU96YyxRQUNQKzVFLEdBQXFCLEVBQ2pCdDlELEVBQU92aUIsTUFBTXF0RCxTQUFTcHhELEVBQU9pQyxNQUM3QjRoRixHQUFnQixJQU81QkQsSUFFc0IsSUFBbEJDLElBRUFKLEdBQVcsRUFJdkIsT0FDRyxHQUFvQixXQUFoQmptRixFQUFPa0wsTUFDZCxHQUFxQixPQUFqQmxMLEVBQU9xTSxPQUVIck0sRUFBT3FNLE9BQVNyTSxFQUFPcU0sUUFBVXJNLEVBQU9nbUYsVUFBVyxDQUVuRCxJQUFJTSxFQUFpQnRtRixFQUFPcVcsUUFBUS9QLE1BQUssU0FBVXl1QyxHQUMvQyxPQUFPQSxFQUFJd3hDLFFBQVV2bUYsRUFBT3FNLEtBQ2hDLElBRUlpNkUsSUFDS0EsRUFBZS8vRSxNQUFNcXRELFNBQVNweEQsRUFBT2lDLE1BQ3RDd2hGLEdBQVcsR0FHdkIsT0FFRCxHQUFvQixVQUFoQmptRixFQUFPNE0sS0FBa0IsQ0FHbEJyTixLQUFLaW5GLHNCQUFzQnhtRixFQUFRd0MsS0FHN0N5akYsR0FBVyxFQUVuQixNQUFPLEdBQW9CLFVBQWhCam1GLEVBQU9rTCxLQUFrQixDQUdoQyxJQUFJbVYsR0FBZSxFQUlmcmdCLEVBQU8yQyxPQUFTc0IsV0FBV2pFLEVBQU8yQyxTQUFXc0IsV0FBV2pFLEVBQU9nTixPQUMvRHFULEdBQWUsR0FHZnJnQixFQUFPNEMsS0FBT3FCLFdBQVdqRSxFQUFPNEMsT0FBU3FCLFdBQVdqRSxFQUFPNEksT0FDM0R5WCxHQUFlLEdBSWZBLFNBRzZCN08sSUFBekJoUCxFQUFPeEMsRUFBTytLLE9BQ2RrN0UsR0FBVyxHQUdOam1GLEVBQU8yQyxRQUNSM0MsRUFBTzJDLE1BQVEzQyxFQUFPZ04sS0FHMUJyRyxRQUFRQyxJQUFLNUcsR0FHdUIsaUJBQXpCd0MsRUFBT3hDLEVBQU8rSyxPQUNqQnZJLEVBQU94QyxFQUFPK0ssT0FBT2lDLElBQU1oTixFQUFPMkMsUUFDbENzakYsR0FBVyxHQUdYempGLEVBQU94QyxFQUFPK0ssT0FBUy9LLEVBQU8yQyxRQUM5QnNqRixHQUFXLEdBSWRqbUYsRUFBTzRDLE1BQ1I1QyxFQUFPNEMsSUFBTTVDLEVBQU80SSxLQUlZLGlCQUF6QnBHLEVBQU94QyxFQUFPK0ssT0FDakJ2SSxFQUFPeEMsRUFBTytLLE9BQU9uQyxJQUFNNUksRUFBTzRDLE1BQ2xDcWpGLEdBQVcsR0FHWHpqRixFQUFPeEMsRUFBTytLLE9BQVMvSyxFQUFPNEMsTUFDOUJxakYsR0FBVyxJQU8vQixLQUEyQixXQUFoQmptRixFQUFPNE0sTUFFVjVNLEVBQU93SyxZQUFjeEssRUFBT3lLLFVBQVl6SyxFQUFPdUcsUUFDMUN2RyxFQUFPdUcsTUFBTXF0RCxTQUFTcHhELEVBQU9pQyxNQUM5QndoRixHQUFXLElBUTNCLE9BQUlBLENBTVIsRUFFQSxxQkFBQU8sQ0FBc0J4bUYsRUFBUXdDLEdBRzFCLElBQUt4QyxFQUFPd0ssYUFBZXhLLEVBQU95SyxTQUU5QixPQUFPLEVBS1gsR0FBSXpLLEVBQU93SyxXQUNQLElBQUltRCxFQUFhM04sRUFBT3dLLFdBQVdvRCxNQUFNLEtBQ3JDNjRFLEVBQWN6NkUsS0FBSytCLE1BQU1KLEVBQVcsR0FBSUEsRUFBVyxHQUFLLEVBQUdBLEVBQVcsSUFHOUUsR0FBSTNOLEVBQU95SyxTQUNQLElBQUlvRCxFQUFXN04sRUFBT3lLLFNBQVNtRCxNQUFNLEtBQ2pDODRFLEVBQVkxNkUsS0FBSytCLE1BQU1GLEVBQVMsR0FBSUEsRUFBUyxHQUFLLEVBQUdBLEVBQVMsSUFHdEUsSUFBSTg0RSxHQUFtQixFQUd2QixHQUFJM21GLEVBQU93SyxZQUFjeEssRUFBT3lLLFVBRzVCLEdBQUlqSSxFQUFPb2tGLFdBRVAsSUFBSyxJQUFJQyxLQUFXcmtGLEVBQU9va0YsV0FBWSxDQUduQyxJQUFJRSxFQUFjRCxFQUFRRSxHQUFHbjVFLE1BQU0sS0FDL0JvNUUsRUFBZ0JoN0UsS0FBSytCLE1BQU0rNEUsRUFBWSxHQUFJQSxFQUFZLEdBQUssRUFBR0EsRUFBWSxJQUcvRSxJQUFJRyxFQUFnQkosRUFBUUssR0FBR3Q1RSxNQUFNLEtBQ2pDdTVFLEVBQWdCbjdFLEtBQUsrQixNQUFNazVFLEVBQWMsR0FBSUEsRUFBYyxHQUFLLEVBQUdBLEVBQWMsSUFHakZHLEdBQWtCLEVBYXRCLEdBVklELEVBQWdCVixJQUNoQlcsR0FBa0IsR0FJbEJKLEVBQWdCTixJQUNoQlUsR0FBa0IsR0FJbEJBLEVBQWlCLENBR2pCLElBQUl6a0YsRUFBUThqRixFQUNSTyxFQUFnQlAsSUFDaEI5akYsRUFBUXFrRixHQUlaLElBQUlwa0YsRUFBTThqRixFQUNOUyxFQUFnQlQsSUFDaEI5akYsRUFBTXVrRixHQUlWLE1BQ01yMUUsR0FET2xQLEVBQU1ELEdBQ0MsTUFHcEIsS0FBSW1QLEVBQU8sR0FrQ0osQ0FDSDYwRSxHQUFtQixFQUNuQixLQUNKLENBckNjLENBRVYsSUFFSVUsRUFBVyxDQUFDLFdBQVksUUFBUyxRQUFTLFdBQVksUUFBUyxXQUFZLFVBRTNFQyxHQUFhLEVBRWJDLEVBTlksSUFBSXY3RSxLQUFLckosR0FNUXFZLFNBQ2pDLElBQUssSUFBSWxTLEVBQUksRUFBR0EsRUFBS2dKLEVBQU8sRUFBSWhKLElBQUssQ0FHakMsSUFBSXNlLEVBQU1pZ0UsRUFBU0UsR0FFbkIsR0FBSVYsRUFBUVcsT0FDSlgsRUFBUVcsTUFBTTV6QixTQUFTeHNDLEdBQU0sQ0FDN0JrZ0UsR0FBYSxFQUNiLEtBQ0osQ0FJSkMsSUFDSUEsRUFBbUIsSUFDbkJBLEVBQW1CLEVBRzNCLENBRUEsR0FBSUQsRUFBWSxDQUNaWCxHQUFtQixFQUNuQixLQUNKLENBRUosQ0FLSixDQUNKLE9BTUQsR0FBSTNtRixFQUFPd0ssWUFHZCxHQUFJaEksRUFBT29rRixXQUVQLElBQUssSUFBSUMsS0FBV3JrRixFQUFPb2tGLFdBQVksQ0FHbkMsSUFBSUssRUFBZ0JKLEVBQVFLLEdBQUd0NUUsTUFBTSxLQUtqQ3c1RSxHQUFrQixFQVF0QixHQVpvQnA3RSxLQUFLK0IsTUFBTWs1RSxFQUFjLEdBQUlBLEVBQWMsR0FBSyxFQUFHQSxFQUFjLElBT2pFUixJQUNoQlcsR0FBa0IsR0FJbEJBLEVBQWlCLENBRWpCVCxHQUFtQixFQUNuQixLQUNKLENBRUosT0FHRCxHQUFJM21GLEVBQU95SyxVQUdWakksRUFBT29rRixXQUV
3QLElBQUssSUFBSUMsS0FBV3JrRixFQUFPb2tGLFdBQVksQ0FFbkMsSUFBSUUsRUFBY0QsRUFBUUUsR0FBR241RSxNQUFNLEtBSS9CdzVFLEdBQWtCLEVBUXRCLEdBWG9CcDdFLEtBQUsrQixNQUFNKzRFLEVBQVksR0FBSUEsRUFBWSxHQUFLLEVBQUdBLEVBQVksSUFNM0RKLElBQ2hCVSxHQUFrQixHQUlsQkEsRUFBaUIsQ0FFakJULEdBQW1CLEVBQ25CLEtBQ0osQ0FFSixDQUtSLE9BQU9BLENBRVgsRUFFQSxjQUFBYyxDQUFlem5GLEVBQVF3QyxHQUduQixJQUFJeEMsRUFBT3dLLFlBQWN4SyxFQUFPeUssWUFFdkJqSSxFQUFPZ0ksYUFBZWhJLEVBQU9pSSxTQUM5QixPQUFPLEVBSWY5RCxRQUFRQyxJQUFJNUcsRUFBUXdDLEdBRXBCLElBQUlrbEYsR0FBVSxFQUVkLEdBQUkxbkYsRUFBT3dLLFdBQ1AsSUFBSW1ELEVBQWEzTixFQUFPd0ssV0FBV29ELE1BQU0sS0FDckNKLEVBQU94QixLQUFLK0IsTUFBTUosRUFBVyxHQUFJQSxFQUFXLEdBQUssRUFBR0EsRUFBVyxJQUd2RSxHQUFJM04sRUFBT3lLLFNBQ1AsSUFBSW9ELEVBQVc3TixFQUFPeUssU0FBU21ELE1BQU0sS0FDakNMLEVBQUt2QixLQUFLK0IsTUFBTUYsRUFBUyxHQUFJQSxFQUFTLEdBQUssRUFBR0EsRUFBUyxJQUcvRCxHQUFJckwsRUFBT2dJLFdBQ1AsSUFBSXk4RSxFQUFnQnprRixFQUFPZ0ksV0FBV29ELE1BQU0sS0FDeEMrNUUsRUFBZTM3RSxLQUFLK0IsTUFBTWs1RSxFQUFjLEdBQUlBLEVBQWMsR0FBSyxFQUFHQSxFQUFjLElBR3hGLEdBQUl6a0YsRUFBT2lJLFNBQ1AsSUFBSW05RSxFQUFjcGxGLEVBQU9pSSxTQUFTbUQsTUFBTSxLQUNwQ2k2RSxFQUFhNzdFLEtBQUsrQixNQUFNNjVFLEVBQVksR0FBSUEsRUFBWSxHQUFLLEVBQUdBLEVBQVksSUE2Q2hGLE9BekNJNW5GLEVBQU93SyxZQUFjeEssRUFBT3lLLFVBRXhCakksRUFBT2lJLFVBRUhvOUUsRUFBYXI2RSxJQUNiazZFLEdBQVUsR0FJZGxsRixFQUFPZ0ksWUFFSG05RSxFQUFlcDZFLElBQ2ZtNkUsR0FBVSxJQU1sQjFuRixFQUFPd0ssV0FFSGhJLEVBQU9pSSxVQUVIbzlFLEVBQWFyNkUsSUFDYms2RSxHQUFVLEdBSVgxbkYsRUFBT3lLLFdBR1ZqSSxFQUFPZ0ksV0FFSG05RSxFQUFlcDZFLElBQ2ZtNkUsR0FBVSxHQUdkQSxHQUFVLEdBS1hBLENBQ1gsRUFFQSxpQkFBQUksQ0FBa0I5bkYsRUFBUTZtRixHQUUxQixFQUVBLGNBQUFrQixHQUVJeG9GLEtBQUt5b0YsYUFBYXpvRixLQUFLZzlELFNBQ3ZCaDlELEtBQUt5b0YsYUFBYXpvRixLQUFLK2lGLGFBRXZCL2lGLEtBQUswakYsZ0JBQ0wxakYsS0FBS21sRixxQkFFTG5sRixLQUFLK2tGLFdBQ1QsRUFFQSxZQUFBMEQsQ0FBYXpyQixHQUVULElBQUssSUFBSXY4RCxLQUFVdThELEVBRWYsR0FBb0IsYUFBaEJ2OEQsRUFBT2tMLEtBQ1AsSUFBSyxJQUFJNGQsS0FBVTlvQixFQUFPcVcsUUFDdEJ5UyxFQUFPemMsT0FBUSxNQUVJLFdBQWhCck0sRUFBT2tMLEtBQ2RsTCxFQUFPcU0sTUFBUXJNLEVBQU9nbUYsVUFDQyxVQUFoQmhtRixFQUFPa0wsTUFDZGxMLEVBQU8yQyxNQUFRM0MsRUFBT2dOLElBQ3RCaE4sRUFBTzRDLElBQU01QyxFQUFPNEksS0FDRyxVQUFoQjVJLEVBQU9rTCxPQUNkbEwsRUFBT3dLLFdBQWEsS0FDcEJ4SyxFQUFPeUssU0FBVyxLQUc5QixFQU1BLFdBQUFtNEUsR0FFSSxRQUEyQixJQUFoQlosR0FBK0JBLEVBQVlqaUYsU0FDOUM2TyxPQUFPQyxRQUFRbXpFLEVBQVlqaUYsU0FBU0osT0FBUyxFQUFHLENBQ2hELElBQUlJLEVBQVUsR0FFZCxJQUFLLE1BQU9rVyxFQUFLNUosS0FBVXVDLE9BQU9DLFFBQVFtekUsRUFBWWppRixTQUNsRHNNLEVBQU01SCxHQUFLL0QsT0FBTzJMLEVBQU01SCxJQUN4QjRILEVBQU00M0UsVUFBVyxFQUNqQjUzRSxFQUFNNjNFLE9BQVEsRUFDZDczRSxFQUFNdkosT0FBUSxFQUNkdUosRUFBTTY0RSxZQUFjLEdBRXBCbmxGLEVBQVFpRyxLQUFLcUcsR0FHakI5TSxLQUFLUSxRQUFVQSxDQUNuQixDQUdSLEVBRUEsV0FBQThpRixHQUNJLFFBQTJCLElBQWhCYixHQUErQkEsRUFBWXpsQixTQUM5QzN0RCxPQUFPQyxRQUFRbXpFLEVBQVl6bEIsU0FBUzU4RCxPQUFTLEVBQUcsQ0FFaEQsSUFBSTQ4RCxFQUFVLEdBQ2QsSUFBSyxNQUFPdG1ELEVBQUs1SixLQUFVdUMsT0FBT0MsUUFBUW16RSxFQUFZemxCLFNBQVUsQ0FDNURsd0QsRUFBTTVILEdBQUt3UixFQUVYLElBQUlJLEVBQVUsR0FDZCxJQUFLLE1BQU80eEUsRUFBUUMsS0FBYXQ1RSxPQUFPQyxRQUFReEMsRUFBTWdLLFNBRS9CLGFBQWZoSyxFQUFNbkIsT0FDTmc5RSxFQUFTdDdFLEtBQU9QLEVBQU1uQixLQUNqQmc5RSxFQUFTNzdFLFFBQ1Y2N0UsRUFBUzc3RSxNQUFRLE9BRXpCZ0ssRUFBUXJRLEtBQUtraUYsR0FPakIsR0FKbUIsV0FBZjc3RSxFQUFNbkIsTUFBc0JtQixFQUFNQSxRQUNsQ0EsRUFBTUEsTUFBUUEsRUFBTTI1RSxXQUdMLFVBQWYzNUUsRUFBTW5CLEtBQWtCLENBQ3hCLElBQUlpOUUsRUFBWTVvRixLQUFLNm9GLGVBQWUvN0UsUUFDZG1GLElBQWxCMjJFLEVBQVVuN0UsTUFDVlgsRUFBTVcsSUFBTW03RSxFQUFVbjdFLFVBRUp3RSxJQUFsQjIyRSxFQUFVdi9FLE1BQ1Z5RCxFQUFNekQsSUFBTXUvRSxFQUFVdi9FLElBRTlCLENBRUF5RCxFQUFNZ0ssUUFBVUEsRUFFaEJrbUQsRUFBUXYyRCxLQUFLcUcsRUFDakIsQ0FFQTlNLEtBQUtnOUQsUUFBVUEsQ0FHbkIsQ0FFUixFQUNBLGNBQUE2ckIsQ0FBZXBvRixHQUNYLElBQUlnTixFQUFNLEVBQ05wRSxFQUFNLEVBRVYsR0FBSTVJLEVBQU8rSyxNQUVQLElBQUssSUFBSXZJLEtBQVVqRCxLQUFLUSxRQUFTLENBRTdCLElBQUlzb0YsRUFBYTdsRixFQUFPeEMsRUFBTytLLE9BQzNCczlFLElBQzBCLGlCQUFmQSxHQUNIQSxFQUFXcjdFLElBQU1BLElBQ2pCQSxFQUFNcTdFLEVBQVdyN0UsS0FHakJxN0UsRUFBV3ovRSxJQUFNQSxJQUNqQkEsRUFBTXkvRSxFQUFXei9FLFFBR2pCeS9FLEVBQWFyN0UsR0FBYyxHQUFQQSxLQUNwQkEsRUFBTXE3RSxHQUdOQSxFQUFhei9FLElBQ2JBLEVBQU15L0UsSUFLdEIsQ0FHSixNQUFPLENBQ0hyN0UsSUFBS0EsRUFDTHBFLElBQUtBLEVBRWIsRUFFQSxTQUFBMDdFLEdBR0ksSUFBK0IsSUFBM0Iva0YsS0FBS21qRixrQkFBNkIsQ0FDbEMsSUFBSTRGLEVBQU0vb0YsS0FBS2dwRixnQkFFWGhwRixLQUFLaWpGLGdCQUNMZ0csUUFBUUMsYUFBYSxLQUFNLEtBQU1ILEdBRzdCL29GLEtBQUtrakYsV0FDTCxVQUFRNTVELElBQUl0cEIsS0FBS2tqRixVQUFXNkYsRUFHeEMsQ0FFSixFQUNBLGFBQUFDLEdBR0ksSUFBSUcsRUFBYXAzRSxPQUFPcTNFLFNBQVNDLFNBR2pDLElBQUlDLEVBQVVILEVBSWQsTUFBTUksRUFBUSxJQUFJMzJELE9BQU8scUJBRXpCLElBQUlELEVBQVF3MkQsRUFBV3gyRCxNQUFNNDJELEdBRXpCNTJELElBQ0EyMkQsRUFBVTMyRCxFQUFNLEdBQUssS0FHekIsSUFBSW8yRCxFQUFNLEdBR1YsSUFBSyxJQUFJdG9GLEtBQVVULEtBQUtnOUQsUUFDcEIsR0FBb0IsYUFBaEJ2OEQsRUFBT2tMLEtBQXFCLENBRTVCLElBQUltTCxFQU
3FVLEdBQ2QsSUFBSyxJQUFJeVMsS0FBVTlvQixFQUFPcVcsUUFDbEJ5UyxFQUFPemMsT0FDUGdLLEVBQVFyUSxLQUFLekcsS0FBS3dwRixRQUFRamdFLEVBQU95OUQsUUFJckNsd0UsRUFBUTFXLE9BQVMsSUFDakIyb0YsR0FBTy9vRixLQUFLd3BGLFFBQVEvb0YsRUFBT3VtRixPQUFTLElBRXBDK0IsR0FBT2p5RSxFQUFRK0gsS0FBSyxLQUFPLElBRW5DLEtBQTJCLFVBQWhCcGUsRUFBT2tMLE1BRVZsTCxFQUFPd0ssWUFBY3hLLEVBQU95SyxZQUM1QjY5RSxHQUFPL29GLEtBQUt3cEYsUUFBUS9vRixFQUFPZ3BGLE1BQVEsSUFDL0JocEYsRUFBT3dLLGFBRVA4OUUsR0FBTy9vRixLQUFLd3BGLFFBQVEvb0YsRUFBT3dLLGFBRS9CODlFLEdBQU8sSUFDSHRvRixFQUFPeUssV0FDUDY5RSxHQUFPL29GLEtBQUt3cEYsUUFBUS9vRixFQUFPeUssV0FHL0I2OUUsR0FBTyxLQUlZLFVBQWhCdG9GLEVBQU9rTCxNQUVUbEwsRUFBTzJDLFFBQVMzQyxFQUFPNEMsS0FBU2xDLE9BQU9WLEVBQU8yQyxTQUFXakMsT0FBT1YsRUFBT2dOLE1BQVF0TSxPQUFPVixFQUFPNEMsT0FBU2xDLE9BQU9WLEVBQU80SSxPQUNySDAvRSxHQUFPL29GLEtBQUt3cEYsUUFBUS9vRixFQUFPdW1GLE9BQVMsSUFBTWhuRixLQUFLd3BGLFFBQVEvb0YsRUFBTzJDLE9BQVMsSUFBTXBELEtBQUt3cEYsUUFBUS9vRixFQUFPNEMsS0FBTyxLQUl4RzVDLEVBQU9xTSxRQUFVck0sRUFBT2dtRixZQUN4QnNDLEdBQU8vb0YsS0FBS3dwRixRQUFRL29GLEVBQU91bUYsT0FBUyxJQUFNaG5GLEtBQUt3cEYsUUFBUS9vRixFQUFPcU0sT0FBUyxLQVNuRixHQUpZLEtBQVJpOEUsSUFDQUEsRUFBTSxLQUFPQSxHQUdiL29GLEtBQUt5TyxNQUFNL0ssS0FDUDFELEtBQUt5TyxNQUFNL0ssSUFBSUQsYUFBYyxDQUM3QixJQUFJaW1GLEVBQVMxcEYsS0FBS3lPLE1BQU0vSyxJQUFJQSxJQUFJaW1GLFlBQzVCN2tGLEVBQU85RSxLQUFLeU8sTUFBTS9LLElBQUlBLElBQUlrbUYsVUFFOUJiLEVBQU1BLEVBQU0sS0FBT1csRUFBT2xsRixJQUFNLElBQU1rbEYsRUFBTzlrRixJQUFNLElBQU1FLEVBQU8sR0FDcEUsQ0FJSixHQUFJOUUsS0FBSzhpRixZQUFhLENBQ2xCLElBQUkrRyxHQUFxQixFQUVyQjdwRixLQUFLTSxTQUFTaWpGLGFBQ1Z2akYsS0FBSzhpRixjQUFnQjlpRixLQUFLTSxTQUFTaWpGLGNBQ25Dc0csR0FBcUIsR0FLekJBLElBQ0FkLEVBQU1BLEVBQU0sS0FBTy9vRixLQUFLOGlGLFlBQWMsSUFFOUMsQ0FJQSxHQUFJOWlGLEtBQUt5TyxNQUFNNUQsS0FBTSxDQUNqQixJQUFJaEwsRUFBY0csS0FBS3lPLE1BQU01RCxLQUFLaEwsWUFDOUJBLEVBQWMsSUFFZGtwRixFQUFNQSxFQUFNLE1BQVFscEYsRUFBYyxHQUFLLElBSS9DLENBSUEsT0FGQWtwRixFQUFNTyxFQUFVUCxDQUdwQixFQUNBLFFBQUF0RixHQUVJLElBQStCLElBQTNCempGLEtBQUttakYsa0JBQTZCLENBQ2xDLElBQUlnRyxFQUFhcDNFLE9BQU9xM0UsU0FBU0MsU0FDN0JTLEVBQWEsVUFBUW43RSxJQUFJLGNBRTdCLElBQUszTyxLQUFLaWpGLGdCQUFpQixDQUV2QixJQUFJOEcsRUFBYyxVQUFRcDdFLElBQUkzTyxLQUFLa2pGLGdCQUVmanhFLElBQWhCODNFLEdBRUlELElBQ0FYLEVBQWFZLEVBSXpCLENBRUEsVUFBUWxqRixPQUFPLGFBQWMsQ0FBQzZZLEtBQU0sTUFTcEMsTUFBTXNxRSxFQUFZLElBQUlwM0QsT0FBTyxxQkFFN0IsSUFBSUQsRUFBUXcyRCxFQUFXeDJELE1BQU1xM0QsR0FDekJyM0QsR0FDVUEsRUFBTSxHQUFLLElBSXpCLE1BQU1zM0QsRUFBUywyQkFFZixJQUFJQyxFQUFTZixFQUFXeDJELE1BQU1zM0QsR0FHOUIsR0FBSUMsR0FFSUEsRUFBTzlwRixPQUFTLEVBQUcsQ0FDbkIsSUFFSStwRixFQUZnQkQsRUFBTyxHQUVENzdFLE1BQU0sS0FFaEMsSUFBSyxJQUFJOUUsRUFBSSxFQUFHQSxFQUFJNGdGLEVBQU0vcEYsUUFBUyxDQUMvQixJQUFJZ3FGLEVBQWFELEVBQU01Z0YsR0FDbkI4Z0YsRUFBZUYsRUFBTzVnRixFQUFJLEdBRzlCLElBQUkrZ0YsRUFBU3RxRixLQUFLZzlELFFBQVFqMkQsTUFBTTYwQixHQUNyQjU3QixLQUFLd3BGLFFBQVE1dEQsRUFBS29yRCxTQUFXb0QsR0FBY3BxRixLQUFLd3BGLFFBQVE1dEQsRUFBSzZ0RCxRQUFVVyxJQUlsRixHQUFJRSxFQUNBLEdBQW9CLGFBQWhCQSxFQUFPMytFLEtBQXFCLENBRzVCLElBQUk0K0UsRUFBWUYsRUFBYWg4RSxNQUFNLEtBRW5DLElBQUssSUFBSW04RSxLQUFZRCxFQUFXLENBQzVCLElBQUloaEUsRUFBUytnRSxFQUFPeHpFLFFBQVEvUCxNQUFNeXVDLEdBQ3ZCeDFDLEtBQUt3cEYsUUFBUWgwQyxFQUFJd3hDLFNBQVd3RCxJQUduQ2poRSxJQUNBQSxFQUFPemMsT0FBUSxFQUV2QixDQUVKLE1BQU8sR0FBb0IsVUFBaEJ3OUUsRUFBTzMrRSxLQUFrQixDQUNoQyxJQUFJcWUsRUFBUXFnRSxFQUFhaDhFLE1BQU0sS0FFM0IyYixFQUFNLEtBQ05zZ0UsRUFBT3IvRSxXQUFhK2UsRUFBTSxHQUFHOWIsUUFBUSxPQUFRLE1BRTdDOGIsRUFBTSxLQUNOc2dFLEVBQU9wL0UsU0FBVzhlLEVBQU0sR0FBRzliLFFBQVEsT0FBUSxLQUVuRCxNQUFPLEdBQW9CLFVBQWhCbzhFLEVBQU8zK0UsS0FBa0IsQ0FDaEMsSUFBSTgrRSxFQUFZSixFQUFhaDhFLE1BQU0sS0FFL0JqTCxFQUFRcW5GLEVBQVUsR0FDbEJwbkYsRUFBTW9uRixFQUFVLEdBRWhCcm5GLElBQ0FrbkYsRUFBT2xuRixNQUFRQSxHQUVmQyxJQUNBaW5GLEVBQU9qbkYsSUFBTUEsRUFHckIsS0FBTyxDQUNILElBQUlrbUIsRUFBUytnRSxFQUFPeHpFLFFBQVEvUCxNQUFNeXVDLEdBQ3ZCeDFDLEtBQUt3cEYsUUFBUWgwQyxFQUFJd3hDLFNBQVdxRCxJQUVuQzlnRSxJQUNBK2dFLEVBQU94OUUsTUFBUXljLEVBQU95OUQsTUFHOUIsQ0FHSno5RSxHQUFRLENBQ1osQ0FDSixDQU9KLE1BQU1taEYsRUFBUyxnQkFFZixJQUFJQyxFQUFTeEIsRUFBV3gyRCxNQUFNKzNELEdBRTlCLEdBQUlDLEdBRUlBLEVBQU92cUYsT0FBUyxFQUFHLENBRW5CLElBQUljLEVBQU95cEYsRUFBTyxHQUVsQjNxRixLQUFLaUIsWUFBZUUsT0FBT0QsR0FBUSxDQUV2QyxDQUlKLE1BQU0wcEYsRUFBUyxxQkFFZixJQUFJQyxFQUFTMUIsRUFBV3gyRCxNQUFNaTRELEdBQzlCLEdBQUlDLEdBQ0lBLEVBQU96cUYsT0FBUyxFQUFHLENBQ25CLElBQUkrcEYsRUFBUVUsRUFBTyxHQUFHeDhFLE1BQU0sS0FFNUIsR0FBSTg3RSxFQUFNL3BGLE9BQVMsRUFBRyxDQUVsQixJQUFJb0UsRUFBTTJsRixFQUFNLEdBQ1p2bEYsRUFBTXVsRixFQUFNLEdBQ1pybEYsRUFBT3FsRixFQUFNLEdBRWpCbnFGLEtBQUt5RSxXQUFhRCxFQUNsQnhFLEtBQUs2RSxXQUFhRCxFQUNsQjVFLEtBQUsrRSxZQUFjRCxDQUV2QixDQUNKLENBR0osTUFBTWdtRixFQUFTLHFCQUVmLElBQUlDLEVBQVM1QixFQUFXeDJELE1BQU1tNEQsR0FDOUIsR0FBSUMsR0FDSUEsRUFBTzNxRixPQUFTLEVBQUcsQ0FDbkIsSUFBSTBpRixFQUFjaUksRUFBTyxHQUN6Qi9xRixLQUFLOGlGLFlBQWNBLENBQ3ZCLENBRVIsQ0FFSixFQUNBMEcsUUFBUTVtRixHQUdKQSxFQUFPQSxFQUFLb00sV0FDUDYwRCxVQUFVLE9BQ1YzMUQsUUFBUSxtQkFBb0IsSUFDNUJtVSxjQUNBOFAsT0FDQWprQixRQUFRLCtCQUFnQyxLQUN4Q0EsUUFBUSxPQUFRLEtBQ2hCQSxRQUFRLFlBQWEsSUFDckJBLFFBQVEsU0FBVSxPQU1sQyxHQUlUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uLy4uLy4uL3BsdWdpbnMvbWlsbC1hcGlkYWUvYmxvY2tzL0FwaWRhZUxpc3RlL2Fzc2V0cy9zcmMvY29tcG9uZW50cy9saXN0LmpzIiwid2VicGFjazovLy8uLi8uLi8uLi8uLi8uLi9wbHVnaW5zL21pbGwtYXBpZGFlL2Jsb2Nrcy9BcGlkYWVMaXN0ZS9hc3NldHMvc3JjL2NvbXBvbmVudHMvbWFwLmpzIiwid2VicGFjazovLy8uLi8uLi8uLi8uLi8uLi9wbHVnaW5zL21pbGwtYXBpZGFlL2Jsb2Nrcy9BcGlkYWVMaXN0ZS9hc3NldHMvc3JjL2NvbXBvbmVudHMvbmJyZXN1bHRzLmpzIiwid2VicGFjazovLy8uLi8uLi8uLi8uLi8uLi9wbHVnaW5zL21pbGwtYXBpZGFlL2Jsb2Nrcy9BcGlkYWVMaXN0ZS9hc3NldHMvc3JjL2NvbXBvbmVudHMvcGFnaW5hdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vLi4vLi4vLi4vLi4vcGx1Z2lucy9taWxsLWFwaWRhZS9ibG9ja3MvQXBpZGFlTGlzdGUvYXNzZXRzL3NyYy9jb21wb25lbnRzL3N3aXRjaGVyLmpzIiwid2VicGFjazovLy8uLi8uLi8uLi8uLi8uLi9wbHVnaW5zL21pbGwtYXBpZGFlL2Jsb2Nrcy9BcGlkYWVMaXN0ZS9hc3NldHMvc3JjL2NvbXBvbmVudHMvc3dpdGNoZXJCdXR0b24uanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9maWx0ZXJzLmpzIiwid2VicGFjazovLy8uL2NvbXBvbmVudHMvZmlsdGVyc0J1dHRvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZXNtL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9lc20vbDEwbi9kZWZhdWx0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9lc20vdHlwZXMvb3B0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZXNtL3V0aWxzL2RhdGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9lc20vdXRpbHMvZG9tLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9lc20vdXRpbHMvZm9ybWF0dGluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZXNtL3V0aWxzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9lc20vdXRpbHMvcG9seWZpbGxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9sMTBuL2ZyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy92dWUtZmxhdHBpY2tyLWNvbXBvbmVudC9kaXN0L3Z1ZS1mbGF0cGlja3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Z1ZS9kaXN0L3Z1ZS5qcyIsIndlYnBhY2s6Ly8vLi4vLi4vLi4vLi4vLi4vcGx1Z2lucy9taWxsLWFwaWRhZS9ibG9ja3MvQXBpZGFlTGlzdGUvYXNzZXRzL3NyYy9saWJzL2pzLmNvb2tpZS5taW4ubWpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly8vLi9taWxsLWFwaWRhZS1saXN0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGFnaW5hdGlvbiBmcm9tIFwiLi9wYWdpbmF0aW9uLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgI
3HBhZ2luYXRpb246IHBhZ2luYXRpb25cbiAgICB9LFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICA8ZGl2IGNsYXNzPVwiYXBpZGFlLWxpc3RcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhcGlkYWUtbGlzdC1ub3Jlc3VsdHNcIiB2LWlmPVwib2JqZWN0cy5sZW5ndGggPT09IDBcIj57eyBzZXR0aW5ncy5sYWJlbHMubm9fcmVzdWx0cyB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImFwaWRhZS1saXN0LXBhZ2VzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcGlkYWUtbGlzdC1wYWdlIGRpc3BsYXlcIj5cbiAgICAgICAgICA8YXJ0aWNsZSB2LWZvcj1cIihvYmplY3QsIGluZGV4KSBvZiBvYmplY3RzTm9uU2ltcGxpZmllZFwiIHYtaHRtbD1cIm9iamVjdC5odG1sICsgb2JqZWN0LmN1c3RvbV9odG1sXCJcbiAgICAgICAgICAgICAgICAgICBAbW91c2VlbnRlcj1cIm1vdXNlT3Zlck9iamVjdChvYmplY3QpXCIgQG1vdXNlbGVhdmU9XCJtb3VzZU92ZXJPYmplY3Qob2JqZWN0KVwiXG4gICAgICAgICAgICAgICAgICAgdi1pZj1cImlzSW5DdXJyZW50UGFnZShpbmRleClcIiA6Y2xhc3M9XCJpdGVtQ2xhc3Mob2JqZWN0KVwiPlxuICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuXG4gICAgICA8dGVtcGxhdGUgdi1pZj1cImN1cnJlbnRQYWdlID09PSAoIG51bWJlck9mUGFnZSAtIDEpICYmIG91dE9mTWFwLmxlbmd0aCA9PT0gMCAmJiBvYmplY3RzU2ltcGxpZmllZC5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcGlkYWUtbGlzdC1ub24tYWRoZXJlbnRzXCI+XG4gICAgICAgICAgPGFydGljbGUgdi1mb3I9XCIob2JqZWN0LCBpbmRleCkgb2Ygb2JqZWN0c1NpbXBsaWZpZWRcIiB2LWh0bWw9XCJvYmplY3QuaHRtbCArIG9iamVjdC5jdXN0b21faHRtbFwiPlxuICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICA8cGFnaW5hdGlvbiA6bnVtYmVyT2ZQYWdlPVwibnVtYmVyT2ZQYWdlXCIgOmN1cnJlbnRQYWdlPVwiY3VycmVudFBhZ2VcIiB2LW9uOnBhZ2UtY2hhbmdlPVwicGFnZVNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgIHYtaWY9XCJudW1iZXJPZlBhZ2VcIj48L3BhZ2luYXRpb24+XG5cbiAgICAgIDwvZGl2PmAsXG4gICAgcHJvcHM6IFsnc2V0dGluZ3MnLCAnb2JqZWN0cycsICdudW1iZXJQYXJQYWdlJywgJ2RlZmF1bHRQYWdlJywgJ291dE9mTWFwJ10sXG4gICAgZGF0YTogKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3VycmVudFBhZ2U6IDAsXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIG51bWJlck9mUGFnZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XG5cbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwoKHRoaXMub2JqZWN0c05vblNpb
3XBsaWZpZWQubGVuZ3RoIC8gdGhpcy5udW1iZXJQYXJQYWdlKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9iamVjdHNOb25TaW1wbGlmaWVkKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3Mubm9uX2FkaGVyZW50cyA9PT0gJ2VuZF9zaW1wbGlmaWVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9iamVjdHMuZmlsdGVyKChvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iai5hZGhlcmVudDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0cztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuICAgICAgICBvYmplY3RzU2ltcGxpZmllZCgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLm5vbl9hZGhlcmVudHMgPT09ICdlbmRfc2ltcGxpZmllZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3RzLmZpbHRlcigob2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhb2JqLmFkaGVyZW50O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgICBqUXVlcnkoJ2JvZHknKS5vbignY2xpY2snLCAnLmFwaWRhZS13aXNobGlzdCcsIHRoaXMud2lzaExpc3RBY3Rpb24pO1xuXG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRQYWdlKSB7XG4gICAgICAgICAgICBsZXQgcGFnZSA9IE51bWJlcih0aGlzLmRlZmF1bHRQYWdlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbkN1cnJlbnRQYWdlKHBhZ2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlU2VsZWN0ZWQocGFnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICAgIG9iamVjdHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGUoKSB7XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgd2lzaExpc3RBY3Rpb246IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdmFyICRlbCA9IGpRdWVyeShlLnRhcmdldCksXG4gICAgICAgICAgICAgICAgJGl0ZW0gPSAkZWwuY2xvc2VzdCgnLnNpdC1pdGVtLWxpbmsnKSxcbiAgICAgICAgICAgICAgICBpc19pbiA9ICRpdGVtLnBhcmVudCgpLmhhc0NsYXNzKCd3aXNobGlzdF9pbicpLFxuICAgICAgICAgICAgICAgIHF1ZXJ5X3BhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6ICdhcGlkYWUnLFxuICAgICAgICAgICAgICAgICAgICAnc2VjdXJpdHknOiB0aGVtZV92YWx1ZXMuc2VjdXJpdHksXG4gICAgICAgICAgICAgICAgICAgICdjb250cm9sbGVyJzogJ1B1YmxpY0FqYXgnLFxuICAgICAgICAgICAgICAgICAgICAnbWV0aG9kJzogJ2FkZFRvV2lzaExpc3QnLFxuICAgICAgICAgICAgICAgICAgICAncGFyYW1zJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJzogJGl0ZW0uZGF0YSgnc2l0aWQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdpc19pbic6IGlzX2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZ2UnOiB0aGVtZV92YWx1ZXMucGFnZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgalF1ZXJ5LnBvc3QodGhlbWVfdmFsdWVzLmFqYXhfdXJsLCBxdWVyeV9wYXJhbXMpXG4gICAgICAgICAgICAgICAgLmZhaWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhbGVydCgnRMOpc29sw6ksIHVuZSBlcnJldXIgZXN0IHN1cnZlbnVlJyk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZG9uZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3dpc2gtbGlzdC1tZW51JykudGV4dChyZXNwb25zZS5kYXRhcy5uYik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfaW4gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kaXRlbS5wYXJlbnQoKS5hZGRDbGFzcyggJ3dpc2hsaXN0X2luJyApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZVdpc2hMaXN0JywgJGl0ZW0uZGF0YSgnc2l0aWQnKSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJGl0ZW0ucGFyZW50KCkucmVtb3ZlQ2xhc3MoICd3aXNobGlzdF9pbicgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2VXaXNoTGlzdCcsICRpdGVtLmRhdGEoJ3NpdGlkJyksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ0TDqXNvbMOpLCB1bmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGl0ZW1DbGFzczogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIChvYmplY3Qud2lzaGxpc3QgPT09IDEpID8gJ2l0ZW0tY2FyZCBzaX
3QtaXRlbSB3aXNobGlzdF9pbicgOiAnaXRlbS1jYXJkIHNpdC1pdGVtJztcbiAgICAgICAgfSxcbiAgICAgICAgaXNJbkN1cnJlbnRQYWdlKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgc3RhcnQgPSAodGhpcy5jdXJyZW50UGFnZSAqIHRoaXMubnVtYmVyUGFyUGFnZSk7XG4gICAgICAgICAgICB2YXIgZW5kID0gdGhpcy5udW1iZXJQYXJQYWdlICsgKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLm51bWJlclBhclBhZ2UpO1xuXG5cbiAgICAgICAgICAgIGlmIChpbmRleCA+PSBzdGFydCAmJiBpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vdXNlT3Zlck9iamVjdChvYmplY3QpIHsgLy8gdHJpZ2dlciBhdSBlbnRlciBldCBhdSBsZWF2ZVxuICAgICAgICAgICAgb2JqZWN0LmhvdmVyID0gIW9iamVjdC5ob3ZlcjtcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2hvdmVyTGlzdEl0ZW0nLCBvYmplY3QpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhZ2VTZWxlY3RlZChuZXdQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gbmV3UGFnZTtcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3BhZ2UtY2hhbmdlJyk7XG4gICAgICAgIH0sXG4gICAgfVxufSIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgPGRpdiBjbGFzcz1cImFwaWRhZS1tYXAtd3JhcHBlclwiIGlkPVwiYXBpZGFlLW1hcC13cmFwcGVyXCI+XG4gICAgICA8ZGl2IGlkPVwiYXBpZGFlLW1hcGJveFwiIGNsYXNzPVwiYXBpZGFlLW1hcGJveFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXBpZGFlLW1hcC1yZW5kZXJcIiA6aWQ9XCInbWFwLXJlbmRlci0nK2lkXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcGlkYWUtbWFwLWZvbGxvd1wiIHYtaWY9XCJkaXNwbGF5TW9kZSA9PT0gJ21peHRlJ1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYXBpZGFlLWZvbGxvd21hcG1vdmVzXCIgdmFsdWU9XCIxXCIgaWQ9XCJhcGlkYWUtZm9sbG93bWFwbW92ZXNcIlxuICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiZmlsdGVyT25Nb3ZlXCIgQGNoYW5nZT1cImNoYW5nZUZpbHRlck9uTW92ZVwiLz5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiYXBpZGFlLWZvbGxvd21hcG1vdmVzXCI+QWN0dWFsaXNlciBsYSByZWNoZXJjaGUgcXVhbmQgamUgZMOpcGxhY2UgbGEgY2FydGU8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYCxcbiAgICBwcm9wczogWydvYmplY3RzJywgJ2Rpc3BsYXlNb2RlJywgJ3NldHRpbmdzJywgJ2RlZmF1bHRMYXQnLCAnZGVmYXVsdExuZycsICdkZWZhdWx0Wm9vbScsICdpZCddLFxuICAgIGRhdGE6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpbHRlck9uTW92ZTogZmFsc2UsXG4gICAgICAgICAgICBtYXA6IG51bGwsXG4gICAgICAgICAgICBpY29uOiBudWxsLFxuICAgICAgICAgICAgbWFya2VyczogW10sXG4gICAgICAgICAgICBtYXJrZXJzR3JvdXA6IFtdLFxuXG4gICAgICAgICAgICB3YXRjaE9iamVjdENoYW5nZTogdHJ1ZSxcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICB3YXRjaDoge1xuICAgICAgICAvLyBTdXJ2ZWlsbGUgbGUgY2hhbmdlbWVudCBkZXMgb2JqZXRzIGFmZmljaGVyXG4gICAgICAgIG9iamVjdHM6IGFzeW5jIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMud2F0Y2hPYmplY3RDaGFuZ2UpIHtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkTWFya2VycygpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpbHRlck9uTW92ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNlbnRlck1hcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIG9iamVjdHNOb25TaW1wbGlmaWVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0cy5maWx0ZXIoKG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmouYWRoZXJlbnQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlTWFwKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZGVmYXVsdEZvbGxvd09uTW92ZSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJPbk1vdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VGaWx0ZXJPbk1vdmUoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIC8vRXZlbnRcbiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgICAgICB1cGRhdGVTaXplKCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXAuaW52YWxpZGF0ZVNpemUodHJ1ZSk7XG4gICAgICAgICAgICB9LCAxNTApO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFzeW5jIGNyZWF0ZU1hcCgpIHtcblxuICAgICAgICAgICAgdmFyIGxhdCA9IDQ4Ljg2NjY2NztcbiAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRMYXQpIHtcbiAgICAgICAgICAgICAgICBsYXQgPSBwYXJzZUZsb2F0KHRoaXMuZGVmYXVsdExhdCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHR5cGVvZiAodGhpcy5zZXR0aW5ncy5tYXApICE9ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgJiYgdHlwZW9mICh0aGlzLnNldHRpbmdzLm1hcC5kZWZhdWx0X2NlbnRlcikgIT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAmJiB0eXBlb2YgKHRoaXMuc2V0dGluZ3MubWFwLmRlZmF1bHRfY2VudGVyLmxhdCkgIT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxhdCA9IHBhcnNlRmxvYXQodGhpcy5zZXR0aW5ncy5tYXAuZGVmYXVsdF9jZW50ZXIubGF0KTtcbiAgICAgICAgICAgI
3H1cblxuICAgICAgICAgICAgdmFyIGxuZyA9IDIuMzMzMzMzO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdExuZykge1xuICAgICAgICAgICAgICAgIGxuZyA9IHBhcnNlRmxvYXQodGhpcy5kZWZhdWx0TG5nKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdHlwZW9mICh0aGlzLnNldHRpbmdzLm1hcCkgIT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAmJiB0eXBlb2YgKHRoaXMuc2V0dGluZ3MubWFwLmRlZmF1bHRfY2VudGVyKSAhPSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICYmIHR5cGVvZiAodGhpcy5zZXR0aW5ncy5tYXAuZGVmYXVsdF9jZW50ZXIubG5nKSAhPSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbG5nID0gcGFyc2VGbG9hdCh0aGlzLnNldHRpbmdzLm1hcC5kZWZhdWx0X2NlbnRlci5sbmcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgem9vbSA9IDk7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0Wm9vbSkge1xuICAgICAgICAgICAgICAgIHpvb20gPSBwYXJzZUludCh0aGlzLmRlZmF1bHRab29tKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5tYXAgPSBMLm1hcCgnbWFwLXJlbmRlci0nICsgdGhpcy5pZCkuc2V0VmlldyhbbGF0LCBsbmddLCB6b29tKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5zZXR0aW5ncykgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mICh0aGlzLnNldHRpbmdzLm1hcCkgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmljb24gPSBMLmRpdkljb24oe1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwic2l0LW1hcC1tYXJrZXJcIixcbiAgICAgICAgICAgICAgICAgICAgaHRtbDogdGhpcy5zZXR0aW5ncy5tYXAuaWNvbi5zdmcsXG4gICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsoTnVtYmVyKHRoaXMuc2V0dGluZ3MubWFwLmljb24ud2lkdGgpIC8gMiksIE51bWJlcih0aGlzLnNldHRpbmdzLm1hcC5pY29uLmhlaWdodCldLFxuICAgICAgICAgICAgICAgICAgICBpY29uU2l6ZTogW051bWJlcih0aGlzLnNldHRpbmdzLm1hcC5pY29uLndpZHRoKSwgTnVtYmVyKHRoaXMuc2V0dGluZ3MubWFwLmljb24uaGVpZ2h0KV0sXG4gICAgICAgICAgICAgICAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTI4XVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgTC50aWxlTGF5ZXIodGhpcy5zZXR0aW5ncy5tYXAudGlsZXNfdXJsLCB0aGlzLnNldHRpbmdzLm1hcC50aWxlc19kYXRhcykuYWRkVG8odGhpcy5tYXApO1xuICAgICAgICAgICAgICAgIHRoaXMubWFwLnNjcm9sbFdoZWVsWm9vbS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXAub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5zY3JvbGxXaGVlbFpvb20uZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXAub24oJ21vdXNlb3V0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5zY3JvbGxXaGVlbFpvb20uZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRNYXJrZXJzKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGVmYXVsdExhdCAmJiAhdGhpcy5kZWZhdWx0TG5nICYmICF0aGlzLmRlZmF1bHRab29tKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2VudGVyTWFwKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJPbk1vdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcE1vdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubWFwLm9uKFwibW92ZWVuZFwiLCB0aGlzLm1hcE1vdmUpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vRXZlbnQgbG9yc3F1ZSBsJ29uIGTDqXBsYWNlIGxhIGNhcnRlXG4gICAgICAgIG1hcE1vdmUoZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyT25Nb3ZlKSB7XG4gICAgICAgICAgICAgICAgdmFyIG91dE9mTWFwID0gW107XG4gICAgICAgICAgICAgICAgdmFyIG1hcEJvdW5kcyA9IHRoaXMubWFwLmdldEJvdW5kcygpO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgb2JqZWN0IG9mIHRoaXMub2JqZWN0cykge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vU2kgbCdvYmpldCBldCB2aXNpYmxlIHN1ciBsYSBjYXJ0ZVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5Cb3VuZHMob2JqZWN0LCBtYXBCb3VuZHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRPZk1hcC5wdXNoKG9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEV2ZW50RmlsdGVyTW92ZXIob3V0T2ZNYXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvL0V2ZW50IGxvcnMgcXVlIGwnb24gYWN0aXZlL2Rlc2FjdGl2ZSBsZSBmaWx0ZXJPbk1vdmVcbiAgICAgICAgY2hhbmdlRmlsdGVyT25Nb3ZlKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmZpbHRlck9uTW92ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEV2ZW50RmlsdGVyTW92ZXIoW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvL1Blcm1ldCBkZSBmYWlyZSBwYXNzZXIgYXUgcGFyZW50IGwnZXZlbnQgcXVlIGxhIGNhcnRlIGEgYm91Z2VyIGV0IHF1J2lsIGZhdXQgZmlsdHJlclxuICAgICAgICBlbWl0RXZlbnRGaWx0ZXJNb3ZlcihvdXRPZk1hcCkge1xuICAgICAgICAgICAgdGhpcy4kZW1pdCgnbWFwLWZpbHRlcicsIG91dE9mTWFwKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAvL01BUktFUlNcbiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgLy9TdXBwcmltZXIgdG91cyBsZXMgbWFya2VycyBkZSBsYSBjYXJ0ZVxuICAgICAgICByZW1vdmVBbGxNYXJrZXJzKCkge1xuICAgICAgICAgICAgZm9yICh2YXIgbWFya2VyIG9mIHRoaXMubWFya2Vycykge1xuICAgICAgICAgICAgICAgIG1hcmtlci5yZW1vdmUoKTtcbiAgICAgICAgICAgI
3H1cbiAgICAgICAgICAgIHRoaXMubWFya2VycyA9IFtdO1xuICAgICAgICB9LFxuXG4gICAgICAgIGhvdmVyTWFya2VyKG9iamVjdCkge1xuICAgICAgICAgICAgdmFyIG1hcmtlciA9IHRoaXMubWFya2Vycy5maW5kKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtcy5vYmplY3QuaWQgPT09IG9iamVjdC5pZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYoIG1hcmtlciApIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnRyYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlci5lYWNoTGF5ZXIoKGxheWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsYXllci5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuaG92ZXIgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChsYXllci5icmluZ1RvRnJvbnQpICE9ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5icmluZ1RvRnJvbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5nZXRFbGVtZW50KCkuY2xhc3NMaXN0LmFkZCgnbWFya2VyX2hvdmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmdldEVsZW1lbnQoKS5jbGFzc0xpc3QucmVtb3ZlKCdtYXJrZXJfaG92ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKG1hcmtlci5mbGFnKSAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5ob3ZlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI2FwaWRhZS1tYXBib3gnKS5hZGRDbGFzcygndHJhY2VfaG92ZXJlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKG1hcmtlci5mbGFnLnNldFpJbmRleE9mZnNldCkgIT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5mbGFnLnNldFpJbmRleE9mZnNldCgxMDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5mbGFnLmdldEVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKCdtYXJrZXJfaG92ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjYXBpZGFlLW1hcGJveCcpLnJlbW92ZUNsYXNzKCd0cmFjZV9ob3ZlcmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAobWFya2VyLmZsYWcuc2V0WkluZGV4T2Zmc2V0KSAhPSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyLmZsYWcuc2V0WkluZGV4T2Zmc2V0KDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5mbGFnLmdldEVsZW1lbnQoKS5jbGFzc0xpc3QucmVtb3ZlKCdtYXJrZXJfaG92ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuaG92ZXIgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5zZXRaSW5kZXhPZmZzZXQoMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKG1hcmtlci5zZXRaSW5kZXhPZmZzZXQpICE9ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5zZXRaSW5kZXhPZmZzZXQoMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5nZXRFbGVtZW50KCkuY2xhc3NMaXN0LmFkZCgnbWFya2VyX2hvdmVyJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChtYXJrZXIuc2V0WkluZGV4T2Zmc2V0KSAhPSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXIuc2V0WkluZGV4T2Zmc2V0KDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyLmdldEVsZW1lbnQoKS5jbGFzc0xpc3QucmVtb3ZlKCdtYXJrZXJfaG92ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvL0Fqb3V0IGxlcyBtYXJrZXJzIHN1ciBsYSBjYXJ0ZVxuICAgICAgICBhc3luYyBhZGRNYXJrZXJzKCkge1xuXG4gICAgICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXTtcblxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxNYXJrZXJzKCk7XG5cbiAgICAgICAgICAgIHZhciBtYXJrZXJfcGFyYW1zID0ge307XG4gICAgICAgICAgICBpZiAodGhpcy5pY29uKSB7XG4gICAgICAgICAgICAgICAgbWFya2VyX3BhcmFtcyA9IHtpY29uOiB0aGlzLmljb259O1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGZvciAobGV0IG9iamVjdCBvZiB0aGlzLm9iamVjdHNOb25TaW1wbGlmaWVkKSB7XG5cblxuICAgICAgICAgICAgICAgIGlmIChvYmplY3QudHJhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC50cmFjZV9leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QudHJhY2VfZXh0ID09PSAnZ3B4Jykge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXJrZXIgPSBvbW5pdm9yZS5ncHgob2JqZWN0LnRyYWNlKS5vbigncmVhZHknLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXIuZWFjaExheWVyKChsYXllcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
3HZhciBpdGVtX2NhcmRfY2xhc3MgPSAnaXRlbS1jYXJkIHNpdC1pdGVtJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5iaW5kUG9wdXAoJzxhcnRpY2xlIGNsYXNzPVwiJyArIGl0ZW1fY2FyZF9jbGFzcyArICdcIj4nICsgb2JqZWN0Lmh0bWwgKyAnPC9hcnRpY2xlPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGF5ZXIuYmluZFBvcHVwKG9iamVjdC5odG1sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXIub2JqZWN0ID0gb2JqZWN0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLm9uKCdlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuYWRkVG8odGhpcy5tYXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5vbignbW91c2VvdmVyJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyLmVhY2hMYXllcigobGF5ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChsYXllci5icmluZ1RvRnJvbnQpICE9ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5icmluZ1RvRnJvbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5nZXRFbGVtZW50KCkuY2xhc3NMaXN0LmFkZCgnbWFya2VyX2hvdmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5vbignbW91c2VvdXQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXIuZWFjaExheWVyKChsYXllcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmdldEVsZW1lbnQoKS5jbGFzc0xpc3QucmVtb3ZlKCdtYXJrZXJfaG92ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmplY3QudHJhY2VfZXh0ID09PSAna21sJykge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1hcmtlciA9IG9tbml2b3JlLmttbChvYmplY3QudHJhY2UpLm9uKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5lYWNoTGF5ZXIoKGxheWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1fY2FyZF9jbGFzcyA9ICdpdGVtLWNhcmQgc2l0LWl0ZW0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmJpbmRQb3B1cCgnPGFydGljbGUgY2xhc3M9XCInICsgaXRlbV9jYXJkX2NsYXNzICsgJ1wiPicgKyBvYmplY3QuaHRtbCArICc8L2FydGljbGU+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sYXllci5iaW5kUG9wdXAob2JqZWN0Lmh0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5vYmplY3QgPSBvYmplY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFya2Vycy5wdXNoKG1hcmtlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkub24oJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5hZGRUbyh0aGlzLm1hcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyLm9uKCdtb3VzZW92ZXInLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXIuZWFjaExheWVyKChsYXllcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGxheWVyLmJyaW5nVG9Gcm9udCkgIT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmJyaW5nVG9Gcm9udCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmdldEVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKCdtYXJrZXJfaG92ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyLm9uKCdtb3VzZW91dCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5lYWNoTGF5ZXIoKGxheWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoJ21hcmtlcl9ob3ZlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
3H0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKG9iamVjdC5sYXQpICE9PSAwICYmIE51bWJlcihvYmplY3QubG5nKSAhPT0gMCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFya2VyID0gTC5tYXJrZXIoW29iamVjdC5sYXQsIG9iamVjdC5sbmddLCBtYXJrZXJfcGFyYW1zKS5hZGRUbyh0aGlzLm1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXIub2JqZWN0ID0gb2JqZWN0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbV9jYXJkX2NsYXNzID0gJ2l0ZW0tY2FyZCBzaXQtaXRlbSc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5iaW5kUG9wdXAoJzxhcnRpY2xlIGNsYXNzPVwiJyArIGl0ZW1fY2FyZF9jbGFzcyArICdcIj4nICsgb2JqZWN0Lmh0bWwgKyAnPC9hcnRpY2xlPicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cbiAgICAgICAgfSxcbiAgICAgICAgLy9QZXJtZXQgZGUgY2VudHJlciBsYSBtYXAgc3VyIGxlcyBtYXJrZXIgYWZmaWNoZXJcbiAgICAgICAgY2VudGVyTWFwKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubWFya2VycyAmJiB0aGlzLm1hcmtlcnMubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gbmV3IEwuZmVhdHVyZUdyb3VwKHRoaXMubWFya2Vycyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm1hcC5maXRCb3VuZHMoZ3JvdXAuZ2V0Qm91bmRzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvL1Blcm1ldCBkZSBmb3JjZXIgbGUgY2FsY3VsIGV0IGxlIHBvc2l0aW9uZW1lbnQgZGVzIG1hcmtlcnMgcGFyIGxlIHBhcmVudFxuICAgICAgICBhc3luYyBmb3JjZU1hcEZpbHRlck1vdmUoKSB7XG4gICAgICAgICAgICB0aGlzLndhdGNoT2JqZWN0Q2hhbmdlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZpbHRlck9uTW92ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZE1hcmtlcnMoKTtcblxuICAgICAgICAgICAgdGhpcy5jZW50ZXJNYXAoKTtcbiAgICAgICAgICAgIHRoaXMud2F0Y2hPYmplY3RDaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgLy8gdGhpcy5maWx0ZXJPbk1vdmUgPSB0cnVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIC8vVE9PTFNcbiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgLy9QZXJtZXQgZGUgdsOpcmlmaWVyIHN1ciB1biBtYXJrZXIgZXN0IGRhbnMgbGEgem9uZSB2aXNpYmxlXG4gICAgICAgIGluQm91bmRzKHBvaW50LCBib3VuZHMpIHtcbiAgICAgICAgICAgIHZhciBsbmcgPSAocG9pbnQubG5nIC0gYm91bmRzLl9ub3J0aEVhc3QubG5nKSAqIChwb2ludC5sbmcgLSBib3VuZHMuX3NvdXRoV2VzdC5sbmcpIDwgMDtcbiAgICAgICAgICAgIHZhciBsYXQgPSAocG9pbnQubGF0IC0gYm91bmRzLl9ub3J0aEVhc3QubGF0KSAqIChwb2ludC5sYXQgLSBib3VuZHMuX3NvdXRoV2VzdC5sYXQpIDwgMDtcbiAgICAgICAgICAgIHJldHVybiBsbmcgJiYgbGF0O1xuICAgICAgICB9LFxuXG4gICAgfVxuXG59IiwiZXhwb3J0IGRlZmF1bHQge1xuICAgIHRlbXBsYXRlOiBgXG4gICAgICA8ZGl2IGNsYXNzPVwiYXBpZGFlLW5icmVzdWx0c1wiPjxzcGFuIGNsYXNzPVwibmJyZXN1bHRzXCIgdi1odG1sPVwicmV0dXJuTmJSZXN1bHRzXCI+PC9zcGFuPjwvZGl2PlxuICAgIGAsXG4gICAgcHJvcHM6IFsncmV0dXJuTmJSZXN1bHRzJ10sXG4gICAgLypkYXRhOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlczogWydsaXN0JywgJ21hcCcsICdtaXh0ZSddXG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcblxuICAgIH0qL1xufSIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgPGRpdiBjbGFzcz1cImFwaWRhZS1wYWdpbmF0aW9uXCIgdi1pZj1cIm51bWJlck9mUGFnZSA+IDFcIj5cbiAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiA6Y2xhc3M9XCJpc1ByZXZCdG5BY3RpdmVcIj48c3BhbiBjbGFzcz1cImFwaWRhZS1wYWdpbmF0aW9uLXByZXZuZXh0LWJ0bi1pY29uIGljb25lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJwYWdlUHJldmlvdXMoKVwiPjwvc3Bhbj48L2E+XG4gICAgICBcbiAgICAgIDxkaXYgY2xhc3M9XCJhcGlkYWUtcGFnaW5hdGlvbi1saW5rc1wiPlxuICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCJuIGluIHBhZ2VzbGlzdGVcIj5cbiAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cIm4gPT09ICdzZXBhcmF0b3InXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRpb24tc2VwYXJhdG9yXCI+Li4uPC9zcGFuPlxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cbiAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxuICAgICAgICAgICAgICAgOmNsYXNzPVwieyAnYWN0aXZlJyA6IChuID09PSAoIGN1cnJlbnRQYWdlICsgMSApICksICdhcGlkYWUtcGFnaW5hdGlvbi1wYWdlJyA6IHRydWUgfVwiXG4gICAgICAgICAgICAgICBAY2xpY2s9XCJwYWdlQ2xpY2tlZChuKVwiPjxzcGFuPnt7IG4gfX08L3NwYW4+PC9hPlxuICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgOmNsYXNzPVwiaXNOZXh0QnRuQWN0aXZlXCI+PHNwYW4gY2xhc3M9XCJhcGlkYWUtcGFnaW5hdGlvbi1wcmV2bmV4dC1idG4taWNvb
3iBpY29uZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwicGFnZU5leHQoKVwiPjwvc3Bhbj48L2E+XG5cbiAgICAgIDwvZGl2PlxuICAgIGAsXG4gICAgcHJvcHM6IFsnbnVtYmVyT2ZQYWdlJywgJ2N1cnJlbnRQYWdlJ10sXG5cbiAgICBjb21wdXRlZDoge1xuXG4gICAgICAgIHBhZ2VzbGlzdGUoKSB7XG5cbiAgICAgICAgICAgIGxldCBtYXggPSA0O1xuXG4gICAgICAgICAgICAvL1NpIGMnZXN0IG1vaW5zIHF1ZSBsZSBub21icmUgZGUgcGFnZSBtYXggPT4gZGVidXRcbiAgICAgICAgICAgIGlmICgodGhpcy5jdXJyZW50UGFnZSArIDEpIDwgbWF4KSB7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5udW1iZXJPZlBhZ2UgPCBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gdGhpcy5udW1iZXJPZlBhZ2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHBhZ2VzID0gW107XG4gICAgICAgICAgICAgICAgLy9PbiBham91dGUgbGVzIHBhZ2VzIGp1c3F1J2F1IG1heFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG1heDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2VzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy9TaSBpbCB5IGEgcGx1cyBkZSBwYWdlIHF1ZSBsZSBub21icmUgYWZmaWNoZXJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5udW1iZXJPZlBhZ2UgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZXMucHVzaCgnc2VwYXJhdG9yJyk7Ly9PbiBham91dGUgdW4gc8OpcGFyYXRldXJcbiAgICAgICAgICAgICAgICAgICAgcGFnZXMucHVzaCh0aGlzLm51bWJlck9mUGFnZSk7Ly9ldCBvbiBham91dGUgbGEgZGVybmnDqHJlIHBhZ2VcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFnZXM7XG5cblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gKHRoaXMubnVtYmVyT2ZQYWdlIC0gbWF4KSAmJiB0aGlzLm51bWJlck9mUGFnZSA+IG1heCkgey8vU2kgb24gZXN0IHN1ciBsZXMgZGVybmnDqHJlcyBwYWdlcyBldCBxdSdpbCBhIHBsdXMgcXVlIGxlIG1heCBkZSBwYWdlXG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5udW1iZXJPZlBhZ2UgPCBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gdGhpcy5udW1iZXJPZlBhZ2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHBhZ2VzID0gW107XG5cbiAgICAgICAgICAgICAgICBsZXQgdG90YWxfZGVjb21wdGUgPSAwO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZXMudW5zaGlmdCgodGhpcy5udW1iZXJPZlBhZ2UgLSBpKSk7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsX2RlY29tcHRlKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcGFnZXMudW5zaGlmdCgnc2VwYXJhdG9yJyk7Ly9PbiBham91dGUgdW4gc8OpcGFyYXRldXJcbiAgICAgICAgICAgICAgICBwYWdlcy51bnNoaWZ0KDEpOy8vZXQgb24gYWpvdXRlIGxhIGRlcm5pw6hyZSBwYWdlXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBwYWdlcztcbiAgICAgICAgICAgIH1lbHNlIGlmICh0aGlzLm51bWJlck9mUGFnZSA+IG1heCl7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSAodGhpcy5jdXJyZW50UGFnZSArIDEpO1xuXG5cbiAgICAgICAgICAgICAgICBsZXQgcGFnZXMgPSBbXG4gICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICdzZXBhcmF0b3InLFxuICAgICAgICAgICAgICAgICAgICAoY3VycmVudCAtIDEpLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAoY3VycmVudCArIDEpLFxuICAgICAgICAgICAgICAgICAgICAnc2VwYXJhdG9yJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJPZlBhZ2VcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2VzO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9LFxuXG4gICAgICAgIGlzUHJldkJ0bkFjdGl2ZSgpIHtcbiAgICAgICAgICAgIHZhciBidG5fY2xhc3MgPSAnYXBpZGFlLXBhZ2luYXRpb24tcHJldm5leHQtYnRuIHByZXYnO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09IDApIHtcbiAgICAgICAgICAgICAgICBidG5fY2xhc3MgKz0gJyBpbmFjdGl2ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYnRuX2NsYXNzO1xuICAgICAgICB9LFxuXG4gICAgICAgIGlzTmV4dEJ0bkFjdGl2ZSgpIHtcbiAgICAgICAgICAgIHZhciBidG5fY2xhc3MgPSAnYXBpZGFlLXBhZ2luYXRpb24tcHJldm5leHQtYnRuIG5leHQnO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09ICh0aGlzLm51bWJlck9mUGFnZSAtIDEpKSB7XG4gICAgICAgICAgICAgICAgYnRuX2NsYXNzICs9ICcgaW5hY3RpdmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJ0bl9jbGFzcztcbiAgICAgICAgfVxuXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgLy9FdmVudCBsb3JzcXVlIGwnb24gY2xpcXVlIHN1ciB1biBudW3DqXJvIGRlIHBhZ2VcbiAgICAgICAgcGFnZUNsaWNrZWQobmV3UGFnZSkge1xuICAgICAgICAgICAgaWYgKG5ld1BhZ2UgPD0gdGhpcy5udW1iZXJPZlBhZ2UgJiYgbmV3UGFnZSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxpc3RfdG9wX3kgPSBqUXVlcnkoJy5hcGl
3kYWUtdG9wYmFyJykub2Zmc2V0KCkudG9wICsgJ3B4JztcbiAgICAgICAgICAgICAgICBqUXVlcnkoJ2h0bWwsYm9keScpLmFuaW1hdGUoe3Njcm9sbFRvcDogbGlzdF90b3BfeX0pO1xuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3BhZ2UtY2hhbmdlJywgKG5ld1BhZ2UgLSAxKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSxcblxuICAgICAgICBwYWdlUHJldmlvdXMoKSB7XG4gICAgICAgICAgICB2YXIgbmV3X3BhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgdGhpcy5wYWdlQ2xpY2tlZChuZXdfcGFnZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFnZU5leHQoKSB7XG4gICAgICAgICAgICB2YXIgbmV3X3BhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlICsgMjtcbiAgICAgICAgICAgIHRoaXMucGFnZUNsaWNrZWQobmV3X3BhZ2UpO1xuICAgICAgICB9XG5cbiAgICB9XG59IiwiaW1wb3J0IHN3aXRjaGVyQnV0dG9uIGZyb20gXCIuL3N3aXRjaGVyQnV0dG9uLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICdzd2l0Y2hlci1idXR0b24nOiBzd2l0Y2hlckJ1dHRvblxuICAgIH0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJhcGlkYWUtZGlzcGxheS1zd2l0Y2hlclwiPlxuICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGlkPVwiYXBpZGFlLWZpbHRlci1idG5cIiBjbGFzcz1cImljb24gaWNvbi1maWx0ZXJcIiB2LWlmPVwiZmlsdGVycy5sZW5ndGggPiAwXCIgQGNsaWNrPVwic2hvd0ZpbHRlcnMoKVwiPnt7c2V0dGluZ3MubGFiZWxzLmZpbHRlcl9idG5fbGFiZWx9fTwvYT5cbiAgICAgIDx1bD5cbiAgICAgICAgPHN3aXRjaGVyLWJ1dHRvbiB2LWZvcj1cIm1vZGUgb2YgbW9kZXNcIiB2LWlmPVwiZW5hYmxlTW9kZXMuaW5jbHVkZXMobW9kZSlcIiBhY3RpZj1cIlwiIEBjbGljaz1cIm1vZGVDaGFuZ2UobW9kZSlcIiA6bW9kZT1cIm1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIDphY3RpZj1cInNlbGVjdGVkTW9kZT09PW1vZGVcIiA6a2V5PVwibW9kZVwiPjwvc3dpdGNoZXItYnV0dG9uPlxuICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIGAsXG4gICAgcHJvcHM6IFsnc2VsZWN0ZWRNb2RlJywgJ2VuYWJsZU1vZGVzJywgJ3NldHRpbmdzJywgJ2ZpbHRlcnMnXSxcbiAgICBkYXRhOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2RlczogWydsaXN0JywgJ21hcCcsICdtaXh0ZSddXG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgLy9FdmVudCBsb3JzIGR1IGNsaXF1ZSBzdXIgdW4gYXV0cmUgbW9kZSBkJ2FmZmljaGFnZVxuICAgICAgICBtb2RlQ2hhbmdlKG5ld01vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ21vZGUtY2hhbmdlJywgbmV3TW9kZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2hvd0ZpbHRlcnMoKSB7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdzaG93LWZpbHRlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgfVxufSIsImV4cG9ydCBkZWZhdWx0IHtcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgPGxpIDpjbGFzcz1cInsnYWN0aXZlLW1vZGUnIDogYWN0aWZ9XCI+XG4gICAgICA8YSBAY2xpY2s9XCJjbGlja1wiIGNsYXNzPVwiYXBpZGFlLWRpc3BsYXktc3dpdGNoZXItbW9kZSBpY29uZWRcIiA6ZGF0YS1tb2RlPVwibW9kZVwiIDppZD1cIidkaXNwbGF5LScrbW9kZVwiPlxuICAgICAgICB7eyBtb2Rlc0xhYmVsc1ttb2RlXSB9fVxuICAgICAgPC9hPlxuICAgICAgPC9saT5cbiAgICBgLFxuICAgIHByb3BzOiBbJ21vZGUnLCAnYWN0aWYnXSxcbiAgICBkYXRhOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtb2Rlc0xhYmVscyA6IHsgbWl4dGU6IFwiTWl4dGVcIiwgbGlzdCA6IFwiTGlzdGVcIiwgbWFwIDogXCJDYXJ0ZVwiICB9XG4gICAgICAgIH07XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIC8vRXZlbnQgbG9ycyBkdSBjbGlxdWUgc3VyIHVuIGF1dHJlIG1vZGUgZCdhZmZpY2hhZ2VcbiAgICAgICAgY2xpY2soKSB7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdjbGljaycpO1xuICAgICAgICB9XG4gICAgfVxufSIsImltcG9ydCBmbGF0UGlja3IgZnJvbSAndnVlLWZsYXRwaWNrci1jb21wb25lbnQnO1xuaW1wb3J0IHtGcmVuY2h9IGZyb20gJ2ZsYXRwaWNrci9kaXN0L2wxMG4vZnInO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgY29tcG9uZW50czogeydmbGF0LXBpY2tyJyA6ZmxhdFBpY2tyfSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgPGRpdj5cbiAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZmllbGQudHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxuICAgICAgICA8cD5cbiAgICAgICAgICA8aW5wdXQgOmlkPVwidXVpZFwiIHR5cGU9XCJjaGVja2JveFwiIEBjaGFuZ2U9XCJ2YWx1ZUNoYW5nZSgpXCIgdi1tb2RlbD1cImZpZWxkLnZhbHVlXCI+XG4gICAgICAgICAgPGxhYmVsIDpmb3I9XCJ1dWlkXCI+e3tmaWVsZC5sYWJlbH19PC9sYWJlbD5cbiAgICAgICAgPC9wPlxuICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZmllbGQubW9kZSA9PT0gJ3NlbGVjdCdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgPHNlbGVjdCAgOmlkPVwidXVpZFwiIEBjaGFuZ2U9XCJ2YWx1ZUNoYW5nZSgpXCIgdi1tb2RlbD1cImZpZWxkLnZhbHVlXCI+XG4gICAgICAgICAgICA8b3B0aW9uIDp2YWx1ZT1cImZpZWxkLmFsbF9sYWJlbFwiPnt7ZmllbGQuYWxsX2xhYmVsfX08L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9XCJvcHRpb24gb2YgZmllbGQub3B0aW9uc1wiIDp2YWx1ZT1cIm9wdGlvbi5sYWJlbFwiOmtleT1cIm9wdGlvbi5sYWJlbFwiPnt7b3B0aW9uLmxhYmVsfX08L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGVtcGxhdGU+XG4gICAgICBcbiAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZmllbGQubW9kZSA9PT0gJ2RhdGVzJ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXMtaW5wdXRzXCIgdi1pZj1cImZsYXRwaWNrZXJJbml0XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXRlLXdyYXBwZXIgaWNvbmVkXCI+XG4gICAgICAgICAgICA8ZmxhdC1waWNrciB2LW1vZGVsPVwiZGF0ZV9kZWJ1dFwiIDpjb25maWc9XCJkZWJ1dE9wdGlvblwiIEBvbi1jaGFuZ2U9XCJkYXRlRGVidXRDaGFuZ2VcIiBwbGFjZWhvbGRlcj1cIkRhdGUgZGUgZMOpYnV0XCIvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImRhdGUtd3JhcHBlciBpY29uZWRcIj5cbiAgICAgICAgICAgIDxmbGF0LXBpY2tyIHYtbW9kZWw9XCJkYXRlX2ZpblwiIDpjb25maWc9XCJmaW5PcHRpb25cIiBAb24tY2hhbmdlPVwiZGF0ZUZpbkNoYW5nZVwiIHBsYWNlaG9sZG
3VyPVwiRGF0ZSBkZSBmaW5cIi8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZmllbGQubW9kZSA9PT0gJ3JhbmdlJ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmFuZ2Utd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXYgOmlkPVwiJ3JhbmdlXycrdXVpZFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGVtcGxhdGU+XG5cdCAgPHRlbXBsYXRlIHYtaWY9XCJmaWVsZC50eXBlID09PSAnam91cnMnXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveGVzXCI+XG5cdFx0ICA8cCAgdi1mb3I9XCJqb3VyIG9mIGZpZWxkLmpvdXJzXCI+XG5cdFx0XHQ8aW5wdXQgOmlkPVwidXVpZFwiIHR5cGU9XCJjaGVja2JveFwiIEBjaGFuZ2U9XCJ2YWx1ZUNoYW5nZSgpXCIgdi1tb2RlbD1cImZpZWxkLnZhbHVlXCI+XG5cdFx0XHQ8bGFiZWwgOmZvcj1cInV1aWRcIj57e2pvdXJ9fTwvbGFiZWw+XG5cdFx0ICA8L3A+XG4gICAgICAgIDwvZGl2PlxuXHQgIDwvdGVtcGxhdGU+XG5cblxuICAgICAgPC9kaXY+XG4gICAgYCxcbiAgICBwcm9wczogWydmaWVsZCddLFxuICAgIGRhdGE6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHV1aWQ6IG51bGwsXG4gICAgICAgICAgICBzbGlkZXI6IG51bGwsXG4gICAgICAgICAgICBkYXRlX2RlYnV0OiBudWxsLFxuICAgICAgICAgICAgZGF0ZV9maW46IG51bGwsXG4gICAgICAgICAgICBkYXRlX2Zpbl9taW46IG51bGwsXG5cbiAgICAgICAgICAgIGZsYXRwaWNrZXJJbml0IDogZmFsc2UsXG5cbiAgICAgICAgICAgIGRlYnV0T3B0aW9uIDoge30sXG4gICAgICAgICAgICBmaW5PcHRpb24gOiB7fSxcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgICAgdGhpcy51dWlkID0gdGhpcy51dWlkdjQoKTtcbiAgICAgICAgaWYgKHRoaXMuZmllbGQuZGF0ZV9kZWJ1dCl7XG4gICAgICAgICAgICB0aGlzLmRhdGVfZGVidXQgPSB0aGlzLmZpZWxkLmRhdGVfZGVidXQ7XG4gICAgICAgICAgICB0aGlzLmRhdGVfZmluX21pbiA9IHRoaXMuZmllbGQuZGF0ZV9maW5fbWluO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpZWxkLmRhdGVfZmluKXtcbiAgICAgICAgICAgIHRoaXMuZGF0ZV9maW4gPSB0aGlzLmZpZWxkLmRhdGVfZmluO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kZWJ1dE9wdGlvbiA9IHRoaXMuZ2V0RGVmYXVsdERhdGVQaWNrZXJPcHRpb24oKTtcbiAgICAgICAgdGhpcy5maW5PcHRpb24gPSB0aGlzLmdldERlZmF1bHREYXRlUGlja2VyT3B0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5mbGF0cGlja2VySW5pdCA9IHRydWU7XG4gICAgfSxcbiAgICB1cGRhdGVkKCkge1xuICAgICAgICBpZiAodGhpcy5maWVsZC5tb2RlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVNsaWRlcigpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGRhdGVEZWJ1dENoYW5nZShzZWxlY3RlZERhdGVzLCBkYXRlU3RyLCBpbnN0YW5jZSl7XG4gICAgICAgICAgICB0aGlzLmZpbk9wdGlvbi5taW5EYXRlID0gZGF0ZVN0cjtcbiAgICAgICAgICAgIHRoaXMuZGF0ZV9kZWJ1dCA9IGRhdGVTdHI7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0ZUZpbkNoYW5nZShzZWxlY3RlZERhdGVzLCBkYXRlU3RyLCBpbnN0YW5jZSl7XG4gICAgICAgICAgICB0aGlzLmRhdGVfZmluID0gZGF0ZVN0cjtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXREZWZhdWx0RGF0ZVBpY2tlck9wdGlvbigpe1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgOiBGcmVuY2gsXG4gICAgICAgICAgICAgICAgYWx0Rm9ybWF0OiAnZC9tL1knLFxuICAgICAgICAgICAgICAgIGFsdElucHV0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICdZLW0tZCcsXG4gICAgICAgICAgICAgICAgbWluRGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBtYXhEYXRlIDogbnVsbCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVzZXQoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5maWVsZC5tb2RlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGlkZXIgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZV9kZWJ1dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZV9maW4gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVfZmluX21pbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVNsaWRlcigpO1xuICAgICAgICAgICAgfWVsc2UgaWYgKHRoaXMuZmllbGQubW9kZSA9PT0gJ2RhdGVzJyl7XG4gICAgICAgICAgICAgICAgLy90aGlzLiRyZWZzLmVuZERhdGUudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIC8vdGhpcy4kcmVmcy5zdGFydERhdGUudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZV9kZWJ1dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlX2ZpbiA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJldHVyblRpbWVJbkhvdXIodmFsdWUpe1xuICAgICAgICAgICAgdmFyIG5iX2hvdXJzID0gdmFsdWUgLyA2MDtcbiAgICAgICAgICAgIGlmKG5iX2hvdXJzIDwgMSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUrJ21pbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHJlbWFpbmluZ19taW51dGVzID0gdmFsdWUgLSAoTWF0aC5mbG9vcihuYl9ob3VycykgKiA2MCksXG4gICAgICAgICAgICAgICAgICAgIGR1cmVlX3JlbmRlcmVkO1xuICAgICAgICAgICAgICAgIGlmKHBhcnNlSW50KHJlbWFpbmluZ19taW51dGVzKSA9PSAwKVxuICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdfbWludXRlcyA9ICcnO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYocGFyc2VJbnQocmVtYWluaW5nX21pbnV0ZXMpIDwgMTApXG4gICAgICAgICAgICAgICAgICAgI
3HJlbWFpbmluZ19taW51dGVzID0gJzAnICsgcGFyc2VJbnQocmVtYWluaW5nX21pbnV0ZXMpO1xuXG4gICAgICAgICAgICAgICAgZHVyZWVfcmVuZGVyZWQgPSBNYXRoLmZsb29yKG5iX2hvdXJzKSsnaCc7XG4gICAgICAgICAgICAgICAgaWYoICFpc05hTiggcGFyc2VJbnQocmVtYWluaW5nX21pbnV0ZXMpICkgKVxuICAgICAgICAgICAgICAgICAgICBkdXJlZV9yZW5kZXJlZCArPSBwYXJzZUludChyZW1haW5pbmdfbWludXRlcyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZHVyZWVfcmVuZGVyZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdFJhbmdlVmFsdWUodmFsdWUpe1xuICAgICAgICAgICAgc3dpdGNoKCB0aGlzLmZpZWxkLnR5cGUgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc3RhbmNlJyA6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSkgKydrbSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Rlbml2ZWxlJyA6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSkgKydtJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZHVyZWUnIDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuVGltZUluSG91cih2YWx1ZSkgKycnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd0YXJpZnMnIDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKSArJ+KCrCc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQgOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpICsnJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZVNsaWRlcigpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVyID09PSBudWxsKSB7XG5cbiAgICAgICAgICAgICAgICBqUXVlcnkoJyNyYW5nZV8nICsgdGhpcy51dWlkKS5hcHBlbmQoJzxkaXYgcmVmPVwiJyArIHRoaXMudXVpZCArICdcIiBpZD1cIicgKyB0aGlzLnV1aWQgKyAnXCI+PC9kaXY+Jyk7XG5cbiAgICAgICAgICAgICAgICAvLyB2YXIgc2xpZGVyID0gdGhpcy4kcmVmc1t0aGlzLnV1aWRdO1xuICAgICAgICAgICAgICAgIHZhciBzbGlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnV1aWQpO1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coIHRoaXMuZmllbGQgKTtcblxuICAgICAgICAgICAgICAgIGlmIChzbGlkZXIpIHtcblxuICAgICAgICAgICAgICAgICAgICB2Y
3XIgc3RhcnQgPSB0aGlzLmZpZWxkLm1pbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQuc3RhcnQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB0aGlzLmZpZWxkLnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSB0aGlzLmZpZWxkLm1heDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQuZW5kKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHRoaXMuZmllbGQuZW5kO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGlkZXIgPSBub1VpU2xpZGVyLmNyZWF0ZShzbGlkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBbc3RhcnQsIGVuZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDogKCB0aGlzLmZpZWxkLm1heCA+IDEwMDAgKSA/IDEwIDogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvOiB0aGlzLmZvcm1hdFJhbmdlVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoIHZhbHVlLnJlcGxhY2UoJywtJywgJycpICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pbic6IE1hdGguZmxvb3IoIHRoaXMuZmllbGQubWluICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21heCc6IE1hdGguY2VpbCggdGhpcy5maWVsZC5tYXggKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNsaWRlci5vbignY2hhbmdlJywgdGhpcy52YWx1ZUNoYW5nZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2YWx1ZUNoYW5nZSgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCAndmFsdWVDaGFuZ2UnICk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyggdGhpcy5kYXRlX2RlYnV0LCB0aGlzLmRhdGVfZmluICk7XG4gICAgICAgICAgICBpZiAodGhpcy5maWVsZC5tb2RlID09PSAnZGF0ZXMnKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRlX2RlYnV0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZV9maW5fbWluID0gdGhpcy5kYXRlX2RlYnV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyggJ09OIFBBU1NFIERBVEVTJyApO1xuICAgICAgICAgICAgICAgIC8vc2kgb24gYSB1bmUgZGF0ZSBkZSBmaW5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRlX2RlYnV0ICYmIHRoaXMuZGF0ZV9maW4pIHtcblxuICAgICAgICAgICAgICAgICAgICB2Y
3XIgc3BsaXRTdGFydCA9IHRoaXMuZGF0ZV9kZWJ1dC5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3BsaXRFbmQgPSB0aGlzLmRhdGVfZmluLnNwbGl0KCcvJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9DcmVhdGUgYSBkYXRlIG9iamVjdCBmcm9tIHRoZSBhcnJheXNcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZSA9IERhdGUucGFyc2Uoc3BsaXRTdGFydFswXSwgc3BsaXRTdGFydFsxXSAtIDEsIHNwbGl0U3RhcnRbMl0pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZW5kRGF0ZSA9IERhdGUucGFyc2Uoc3BsaXRFbmRbMF0sIHNwbGl0RW5kWzFdIC0gMSwgc3BsaXRFbmRbMl0pO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vT24gcmVnYXJkZSBzaSBlbGxlIG4nZXN0IHBhcyBhdmFudCBsYSBkYXRlIGRlIGTDqWJ1dFxuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kRGF0ZSA8IHN0YXJ0RGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlX2Zpbl9taW4gPSB0aGlzLmRhdGVfZGVidXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyZWZzLmVuZERhdGUudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlX2ZpbiA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkLm1vZGUgPT09ICdyYW5nZScpIHtcblxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuc2xpZGVyLmdldCh0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLnN0YXJ0ID0gcGFyc2VJbnQodmFsdWVbMF0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGQuZW5kID0gcGFyc2VJbnQodmFsdWVbMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5maWVsZC5tb2RlID09PSAnZGF0ZXMnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZC5kYXRlX2RlYnV0ID0gdGhpcy5kYXRlX2RlYnV0O1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGQuZGF0ZV9maW4gPSB0aGlzLmRhdGVfZmluO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiRlbWl0KCd2YWx1ZS1jaGFuZ2UnLCB0aGlzLmZpZWxkKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy9QZXJtZXQgZCdvYnRlbmlyIHVuIGlkIHVuaXF1ZSBwb3VyIGxlIGZpbHRyZVxuICAgICAgICB1dWlkdjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gKFsxZTddICsgLTFlMyArIC00ZTMgKyAtOGUzICsgLTFlMTEpLnJlcGxhY2UoL1swMThdL2csIGMgPT5cbiAgICAgICAgICAgICAgICAoYyBeIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMSkpWzBdICYgMTUgPj4gYyAvIDQpLnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn0iLCJpbXBvcnQgZmlsdGVyIGZyb20gXCIuL2ZpbHRlci5qc1wiO1xuaW1wb3J0IGZpbHRlcnNCdXR0b24gZnJvbSBcIi4vZmlsdGVyc0J1dHRvbi5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgY29tcG9uZW50cyA6IHtcbiAgICAgICAgbXlmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgJ2ZpbHRlcnMtYnV0dG9uJzogZmlsdGVyc0J1dHRvbixcbiAgICB9LFxuICAgIHRlbXBsYXRlIDogYFxuICAgIDxkaXYgY2xhc3M9XCJhcGlkYWUtZmlsdGVycy13cmFwcGVyXCI+XG4gICAgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcGlkYWUtZmlsdGVyc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlcnMtZ3JvdXBzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVycy1ncm91cFwiIHYtZm9yPVwiKGZpbHRlciwga2V5KSBvZiBmaWx0ZXJzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiA6Y2xhc3M9XCInZmlsdGVyIHRvZ2dhYmxlIG1vZGVfJytmaWx0ZXIubW9kZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImxhYmVsXCI+PGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiPnt7ZmlsdGVyLmxhYmVsfX08L2E+PC9wPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImZpbHRlci5tb2RlID09PSAnY2hlY2tib3gnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveGVzIHRvLXRvZ2dsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG15ZmlsdGVyIDpyZWY9XCInZmlsdGVyXycra2V5XCIgIHYtZm9yPVwiZmllbGQgb2YgZmlsdGVyLm9wdGlvbnNcIiA6a2V5PVwiZmlsdGVyLmlkKydfJytmaWVsZC5sYWJlbFwiIDpmaWVsZD1cImZpZWxkXCIgdi1vbjp2YWx1ZS1jaGFuZ2U9XCJ2YWx1ZUNoYW5nZVwiID48L215ZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdG9yIHRvLXRvZ2dsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG15ZmlsdGVyIDpyZWY9XCInZmlsdGVyXycra2V5XCIgOmZpZWxkPVwiZmlsdGVyXCIgdi1vbjp2YWx1ZS1jaGFuZ2U9XCJ2YWx1ZUNoYW5nZVwiPjwvbXlmaWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzLXN1Ym1pdFwiPlxuXHRcdFx0XHQ8YSBjbGFzcz1cImJ0blwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBAY2xpY2s9XCJjbG9zZUZpbHRlcnNcIiBpZD1cImJ0bl9hcHBseV9maWx0ZXJzXCI+e3tzZXR0aW5ncy5sYWJlbHMuYXBwbHlGaWx0ZXJzfX0gKHt7bmJQcmV2aWV3RmlsdGVyc319KTwvYT5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgdi1pZj1cInNldHRpbmdzLnVzZVJlc2V0QnRuXCIgQGNsaWNrPVwicmVzZXRcIiBjbGFzcz1cImFwaWRhZS1maWx0ZXJzLXJlc2V0XCI+e3tzZXR0aW5ncy5sYWJlbHMuZmlsdGVyX3Jlc2V0fX08L2E+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiY2xvc2UtYXBpZGFlLWZpbHRlcnMgaWNvbiBpY29uLWNsb3NlXCIgQGNsaWNrPVwiY2xvc2VGaWx0ZXJzXCI+PHNwYW4+PC9zcGFuPjwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIFxuICAgIDwvZGl2PlxuICAgIGAsXG4gICAgcHJvcHM6IFsnZmlsdGVycycsICdzZXR0aW5ncycsICduYlByZXZpZXdGaWx0ZXJzJ10sXG4gICAgZGF0YTogKCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjb21wdXRlZCA6IHtcblxuICAgI
3H0sXG4gICAgbW91bnRlZCgpe1xuICAgIH0sXG4gICAgbWV0aG9kcyA6IHtcbiAgICAgICAgLy9FdmVudCBsb3JzIGR1IGNoYW5nZW1lbnQgZGUgdmFsZXVyIGQndW4gZmlsdHJlXG5cbiAgICAgICAgY2xvc2VGaWx0ZXJzKCl7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdzaG93LWZpbHRlcnMnKTtcbiAgICAgICAgfSxcblxuICAgICAgICB2YWx1ZUNoYW5nZShmaWVsZCl7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCd2YWx1ZS1jaGFuZ2UnLCBmaWVsZCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vVmFsaWRhdGlvbiBkZXMgZmlsdHJlcyB0ZW1wb3JhaXJlXG4gICAgICAgIHZhbGlkYXRlRmlsdGVyKCl7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCd2YWxpZGF0ZS1maWx0ZXJzJyk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vUmVzZXQgZGVzIGZpbHRyZXNcbiAgICAgICAgcmVzZXQoKXtcbiAgICAgICAgICAgIGZvciAodmFyIFtpbmRleCwgcmVmXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLiRyZWZzKSl7XG4gICAgICAgICAgICAgICAgcmVmWzBdLnJlc2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdmaWx0ZXJzLXJlc2V0Jyk7XG4gICAgICAgIH1cbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQge1xuICAgIHRlbXBsYXRlOiBgXG4gICAgICA8ZGl2PlxuICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjbGlja1wiPnt7dGV4dH19PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICBgLFxuICAgIHByb3BzOiBbJ3RleHQnXSxcbiAgICBkYXRhOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1dWlkIDogbnVsbCxcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbW91bnRlZCgpe1xuXG4gICAgfSxcbiAgICBtZXRob2RzIDoge1xuICAgICAgICBjbGljaygpe1xuICAgICAgICAgICAgdGhpcy4kZW1pdCgnY2xpY2snKTtcbiAgICAgICAgfSxcblxuICAgIH1cbn0iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fc3ByZWFkQXJyYXlzID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cykgfHwgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcbiAgICByZXR1cm4gcjtcbn07XG5pbXBvcnQgeyBkZWZhdWx0cyBhcyBkZWZhdWx0T3B0aW9ucywgSE9PS1MsIH0gZnJvbSBcIi4vdHlwZXMvb3B0aW9uc1wiO1xuaW1wb3J0IEVuZ2xpc2ggZnJvbSBcIi4vbDEwbi9kZWZhdWx0XCI7XG5pbXBvcnQgeyBhcnJheWlmeSwgZGVib3VuY2UsIGludCwgcGFkIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IGNsZWFyTm9kZSwgY3JlYXRlRWxlbWVudCwgY3JlYXRlTnVtYmVySW5wdXQsIGZpbmRQYXJlbnQsIHRvZ2dsZUNsYXNzLCBnZXRFdmVudFRhcmdldCwgfSBmcm9tIFwiLi91dGlscy9kb21cIjtcbmltcG9ydCB7IGNvbXBhcmVEYXRlcywgY3JlYXRlRGF0ZVBhcnNlciwgY3JlYXRlRGF0ZUZvcm1hdHRlciwgZHVyYXRpb24sIGlzQmV0d2VlbiwgZ2V0RGVmYXVsdEhvdXJzLCBjYWxjdWxhdGVTZWNvbmRzU2luY2VNaWRuaWdodCwgcGFyc2VTZWNvbmRzLCB9IGZyb20gXCIuL3V0aWxzL2RhdGVzXCI7XG5pbXBvcnQgeyB0b2tlblJlZ2V4LCBtb250aFRvU3RyIH0gZnJvbSBcIi4vdXRpbHMvZm9ybWF0dGluZ1wiO1xuaW1wb3J0IFwiLi91dGlscy9wb2x5ZmlsbHNcIjtcbnZhciBERUJPVU5DRURfQ0hBTkdFX01TID0gMzAwO1xuZnVuY3Rpb24gRmxhdHBpY2tySW5zdGFuY2UoZWxlbWVudCwgaW5zdGFuY2VDb25maWcpIHtcbiAgICB2YXIgc2VsZiA9IHtcbiAgICAgICAgY29uZmlnOiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMpLCBmbGF0cGlja3IuZGVmYXVsdENvbmZpZyksXG4gICAgICAgIGwxMG46IEVuZ2xpc2gsXG4gICAgfTtcbiAgICBzZWxmLnBhcnNlRGF0ZSA9IGNyZWF0ZURhdGVQYXJzZXIoeyBjb25maWc6IHNlbGYuY29uZmlnLCBsMTBuOiBzZWxmLmwxMG4gfSk7XG4gICAgc2VsZi5faGFuZGxlcnMgPSBbXTtcbiAgICBzZWxmLnBsdWdpbkVsZW1lbnRzID0gW107XG4gICAgc2VsZi5sb2FkZWRQbHVnaW5zID0gW107XG4gICAgc2VsZi5fYmluZCA9IGJpbmQ7XG4gICAgc2VsZi5fc2V0SG91cnNGcm9tRGF0ZSA9IHNldEhvdXJzRnJvbURhdGU7XG4gICAgc2VsZi5fcG9zaXRpb25DYWxlbmRhciA9IHBvc2l0aW9uQ2FsZW5kYXI7XG4gICAgc2VsZi5jaGFuZ2VNb250aCA9IGNoYW5nZU1vbnRoO1xuICAgIHNlbGYuY2hhbmdlWWVhciA9IGNoYW5nZVllYXI7XG4gICAgc2VsZi5jbGVhciA9IGNsZWFyO1xuICAgIHNlbGYuY2xvc2UgPSBjbG9zZTtcbiAgICBzZWxmLm9uTW91c2VPdmVyID0gb25Nb3VzZU92ZXI7XG4gICAgc2VsZi5fY3JlYXRlRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQ7XG4gICAgc2VsZi5jcmVhdGVEYXkgPSBjcmVhdGVEYXk7XG4gICAgc2VsZi5kZXN0cm95ID0gZGVzdHJveTtcbiAgICBzZWxmLmlzRW5hYmxlZCA9IGlzRW5hYmxlZDtcbiAgICBzZWxmLmp1bXBUb0RhdGUgPSBqdW1wVG9EYXRlO1xuICAgIHNlbGYudXBkYXRlVmFsdWUgPSB1cGRhdGVWYWx1ZTtcbiAgICBzZWxmLm9wZW4gPSBvcGVuO1xuICAgIHNlbGYucmVkcmF3ID0gcmVkcmF3O1xuICAgIHNlbGYuc2V0ID0gc2V0O1xuICAgIHNlbGYuc2V0RGF0ZSA9IHNldERhdGU7XG4gICAgc2VsZi50b2dnbGUgPSB0b2dnbGU7XG4gICAgZnVuY3Rpb24gc2V0dXBIZWxwZXJGdW5jdGlvbnMoKSB7XG4gICAgICAgI
3HNlbGYudXRpbHMgPSB7XG4gICAgICAgICAgICBnZXREYXlzSW5Nb250aDogZnVuY3Rpb24gKG1vbnRoLCB5cikge1xuICAgICAgICAgICAgICAgIGlmIChtb250aCA9PT0gdm9pZCAwKSB7IG1vbnRoID0gc2VsZi5jdXJyZW50TW9udGg7IH1cbiAgICAgICAgICAgICAgICBpZiAoeXIgPT09IHZvaWQgMCkgeyB5ciA9IHNlbGYuY3VycmVudFllYXI7IH1cbiAgICAgICAgICAgICAgICBpZiAobW9udGggPT09IDEgJiYgKCh5ciAlIDQgPT09IDAgJiYgeXIgJSAxMDAgIT09IDApIHx8IHlyICUgNDAwID09PSAwKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI5O1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmwxMG4uZGF5c0luTW9udGhbbW9udGhdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgc2VsZi5lbGVtZW50ID0gc2VsZi5pbnB1dCA9IGVsZW1lbnQ7XG4gICAgICAgIHNlbGYuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIHBhcnNlQ29uZmlnKCk7XG4gICAgICAgIHNldHVwTG9jYWxlKCk7XG4gICAgICAgIHNldHVwSW5wdXRzKCk7XG4gICAgICAgIHNldHVwRGF0ZXMoKTtcbiAgICAgICAgc2V0dXBIZWxwZXJGdW5jdGlvbnMoKTtcbiAgICAgICAgaWYgKCFzZWxmLmlzTW9iaWxlKVxuICAgICAgICAgICAgYnVpbGQoKTtcbiAgICAgICAgYmluZEV2ZW50cygpO1xuICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCB8fCBzZWxmLmNvbmZpZy5ub0NhbGVuZGFyKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbURhdGUoc2VsZi5jb25maWcubm9DYWxlbmRhciA/IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVZhbHVlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRDYWxlbmRhcldpZHRoKCk7XG4gICAgICAgIHZhciBpc1NhZmFyaSA9IC9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICAgIGlmICghc2VsZi5pc01vYmlsZSAmJiBpc1NhZmFyaSkge1xuICAgICAgICAgICAgcG9zaXRpb25DYWxlbmRhcigpO1xuICAgICAgICB9XG4gICAgICAgIHRyaWdnZXJFdmVudChcIm9uUmVhZHlcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENsb3Nlc3RBY3RpdmVFbGVtZW50KCkge1xuICAgICAgICB2Y
3XIgX2E7XG4gICAgICAgIHJldHVybiAoKChfYSA9IHNlbGYuY2FsZW5kYXJDb250YWluZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRSb290Tm9kZSgpKVxuICAgICAgICAgICAgLmFjdGl2ZUVsZW1lbnQgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJpbmRUb0luc3RhbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmbi5iaW5kKHNlbGYpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRDYWxlbmRhcldpZHRoKCkge1xuICAgICAgICB2YXIgY29uZmlnID0gc2VsZi5jb25maWc7XG4gICAgICAgIGlmIChjb25maWcud2Vla051bWJlcnMgPT09IGZhbHNlICYmIGNvbmZpZy5zaG93TW9udGhzID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29uZmlnLm5vQ2FsZW5kYXIgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNhbGVuZGFyQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRheXNXaWR0aCA9IChzZWxmLmRheXMub2Zmc2V0V2lkdGggKyAxKSAqIGNvbmZpZy5zaG93TW9udGhzO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIuc3R5bGUud2lkdGggPSBkYXlzV2lkdGggKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUud2lkdGggPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5c1dpZHRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi53ZWVrV3JhcHBlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi53ZWVrV3JhcHBlci5vZmZzZXRXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInB4XCI7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ2aXNpYmlsaXR5XCIpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwiZGlzcGxheVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVUaW1lKGUpIHtcbiAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0RGF0ZSA9IHNlbGYuY29uZmlnLm1pbkRhdGUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhuZXcgRGF0ZSgpLCBzZWxmLmNvbmZpZy5taW5EYXRlKSA+PSAwXG4gICAgICAgICAgICAgICAgPyBuZXcgRGF0ZSgpXG4gICAgICAgICAgICAgICAgOiBuZXcgRGF0ZShzZWxmLmNvbmZpZy5taW5EYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICB2Y
3XIgZGVmYXVsdHMgPSBnZXREZWZhdWx0SG91cnMoc2VsZi5jb25maWcpO1xuICAgICAgICAgICAgZGVmYXVsdERhdGUuc2V0SG91cnMoZGVmYXVsdHMuaG91cnMsIGRlZmF1bHRzLm1pbnV0ZXMsIGRlZmF1bHRzLnNlY29uZHMsIGRlZmF1bHREYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IFtkZWZhdWx0RGF0ZV07XG4gICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiA9IGRlZmF1bHREYXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlICE9PSB1bmRlZmluZWQgJiYgZS50eXBlICE9PSBcImJsdXJcIikge1xuICAgICAgICAgICAgdGltZVdyYXBwZXIoZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZXZWYWx1ZSA9IHNlbGYuX2lucHV0LnZhbHVlO1xuICAgICAgICBzZXRIb3Vyc0Zyb21JbnB1dHMoKTtcbiAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgaWYgKHNlbGYuX2lucHV0LnZhbHVlICE9PSBwcmV2VmFsdWUpIHtcbiAgICAgICAgICAgIHNlbGYuX2RlYm91bmNlZENoYW5nZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFtcG0ybWlsaXRhcnkoaG91ciwgYW1QTSkge1xuICAgICAgICByZXR1cm4gKGhvdXIgJSAxMikgKyAxMiAqIGludChhbVBNID09PSBzZWxmLmwxMG4uYW1QTVsxXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1pbGl0YXJ5MmFtcG0oaG91cikge1xuICAgICAgICBzd2l0Y2ggKGhvdXIgJSAyNCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICUgMTI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0SG91cnNGcm9tSW5wdXRzKCkge1xuICAgICAgICBpZiAoc2VsZi5ob3VyRWxlbWVudCA9PT0gdW5kZWZpbmVkIHx8IHNlbGYubWludXRlRWxlbWVudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2Y
3XIgaG91cnMgPSAocGFyc2VJbnQoc2VsZi5ob3VyRWxlbWVudC52YWx1ZS5zbGljZSgtMiksIDEwKSB8fCAwKSAlIDI0LCBtaW51dGVzID0gKHBhcnNlSW50KHNlbGYubWludXRlRWxlbWVudC52YWx1ZSwgMTApIHx8IDApICUgNjAsIHNlY29uZHMgPSBzZWxmLnNlY29uZEVsZW1lbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAocGFyc2VJbnQoc2VsZi5zZWNvbmRFbGVtZW50LnZhbHVlLCAxMCkgfHwgMCkgJSA2MFxuICAgICAgICAgICAgOiAwO1xuICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhvdXJzID0gYW1wbTJtaWxpdGFyeShob3Vycywgc2VsZi5hbVBNLnRleHRDb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGltaXRNaW5Ib3VycyA9IHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICBzZWxmLm1pbkRhdGVIYXNUaW1lICYmXG4gICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmosIHNlbGYuY29uZmlnLm1pbkRhdGUsIHRydWUpID09PVxuICAgICAgICAgICAgICAgICAgICAwKTtcbiAgICAgICAgdmFyIGxpbWl0TWF4SG91cnMgPSBzZWxmLmNvbmZpZy5tYXhUaW1lICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgc2VsZi5tYXhEYXRlSGFzVGltZSAmJlxuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqICYmXG4gICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLCBzZWxmLmNvbmZpZy5tYXhEYXRlLCB0cnVlKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgMCk7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tYXhUaW1lICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgc2VsZi5jb25maWcubWluVGltZSA+IHNlbGYuY29uZmlnLm1heFRpbWUpIHtcbiAgICAgICAgICAgIHZhciBtaW5Cb3VuZCA9IGNhbGN1bGF0ZVNlY29uZHNTaW5jZU1pZG5pZ2h0KHNlbGYuY29uZmlnLm1pblRpbWUuZ2V0SG91cnMoKSwgc2VsZi5jb25maWcubWluVGltZS5nZXRNaW51dGVzKCksIHNlbGYuY29uZmlnLm1pblRpbWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIHZhciBtYXhCb3VuZCA9IGNhbGN1bGF0ZVNlY29uZHNTaW5jZU1pZG5pZ2h0KHNlbGYuY29uZmlnLm1heFRpbWUuZ2V0SG91cnMoKSwgc2VsZi5jb25maWcubWF4VGltZS5nZXRNaW51dGVzKCksIHNlbGYuY29uZmlnLm1heFRpbWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50VGltZSA9IGNhbGN1bGF0ZVNlY29uZHNTaW5jZU1pZG5pZ2h0KGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSA+IG1heEJvdW5kICYmIGN1cnJlbnRUaW1lIDwgbWluQm91bmQpIHtcbiAgICAgICAgICAgICAgICB2Y
3XIgcmVzdWx0ID0gcGFyc2VTZWNvbmRzKG1pbkJvdW5kKTtcbiAgICAgICAgICAgICAgICBob3VycyA9IHJlc3VsdFswXTtcbiAgICAgICAgICAgICAgICBtaW51dGVzID0gcmVzdWx0WzFdO1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSByZXN1bHRbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAobGltaXRNYXhIb3Vycykge1xuICAgICAgICAgICAgICAgIHZhciBtYXhUaW1lID0gc2VsZi5jb25maWcubWF4VGltZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWF4VGltZVxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1heERhdGU7XG4gICAgICAgICAgICAgICAgaG91cnMgPSBNYXRoLm1pbihob3VycywgbWF4VGltZS5nZXRIb3VycygpKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1heFRpbWUuZ2V0SG91cnMoKSlcbiAgICAgICAgICAgICAgICAgICAgbWludXRlcyA9IE1hdGgubWluKG1pbnV0ZXMsIG1heFRpbWUuZ2V0TWludXRlcygpKTtcbiAgICAgICAgICAgICAgICBpZiAobWludXRlcyA9PT0gbWF4VGltZS5nZXRNaW51dGVzKCkpXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZHMgPSBNYXRoLm1pbihzZWNvbmRzLCBtYXhUaW1lLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGltaXRNaW5Ib3Vycykge1xuICAgICAgICAgICAgICAgIHZhciBtaW5UaW1lID0gc2VsZi5jb25maWcubWluVGltZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWluVGltZVxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1pbkRhdGU7XG4gICAgICAgICAgICAgICAgaG91cnMgPSBNYXRoLm1heChob3VycywgbWluVGltZS5nZXRIb3VycygpKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1pblRpbWUuZ2V0SG91cnMoKSAmJiBtaW51dGVzIDwgbWluVGltZS5nZXRNaW51dGVzKCkpXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBtaW5UaW1lLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgICAgICAgICBpZiAobWludXRlcyA9PT0gbWluVGltZS5nZXRNaW51dGVzKCkpXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZHMgPSBNYXRoLm1heChzZWNvbmRzLCBtaW5UaW1lLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRIb3Vyc0Zyb21EYXRlKGRhdGVPYmopIHtcbiAgICAgICAgdmFyIGRhdGUgPSBkYXRlT2JqIHx8IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqO1xuICAgICAgICBpZiAoZGF0ZSAmJiBkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gICAgICAgIGlmIChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iai5zZXRIb3Vycyhob3VycyAlIDI0LCBtaW51dGVzLCBzZWNvbmRzIHx8IDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2VsZi5ob3VyRWxlbWVudCB8fCAhc2VsZi5taW51dGVFbGVtZW50IHx8IHNlbGYuaXNNb2JpbGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHNlbGYuaG91ckVsZW1lbnQudmFsdWUgPSBwYWQoIXNlbGYuY29uZmlnLnRpbWVfMjRoclxuICAgICAgICAgICAgPyAoKDEyICsgaG91cnMpICUgMTIpICsgMTIgKiBpbnQoaG91cnMgJSAxMiA9PT0gMClcbiAgICAgICAgICAgIDogaG91cnMpO1xuICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQudmFsdWUgPSBwYWQobWludXRlcyk7XG4gICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9IHNlbGYubDEwbi5hbVBNW2ludChob3VycyA+PSAxMildO1xuICAgICAgICBpZiAoc2VsZi5zZWNvbmRFbGVtZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQudmFsdWUgPSBwYWQoc2Vjb25kcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uWWVhcklucHV0KGV2ZW50KSB7XG4gICAgICAgIHZhciBldmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGV2ZW50KTtcbiAgICAgICAgdmFyIHllYXIgPSBwYXJzZUludChldmVudFRhcmdldC52YWx1ZSkgKyAoZXZlbnQuZGVsdGEgfHwgMCk7XG4gICAgICAgIGlmICh5ZWFyIC8gMTAwMCA+IDEgfHxcbiAgICAgICAgICAgIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiAmJiAhL1teXFxkXS8udGVzdCh5ZWFyLnRvU3RyaW5nKCkpKSkge1xuICAgICAgICAgICAgY2hhbmdlWWVhcih5ZWFyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBiaW5kKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmZvckVhY2goZnVuY3Rpb24gKGV2KSB7IHJldHVybiBiaW5kKGVsZW1lbnQsIGV2LCBoYW5kbGVyLCBvcHRpb25zKTsgfSk7XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gYmluZChlbCwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpOyB9KTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICAgICAgc2VsZi5faGFuZGxlcnMucHVzaCh7XG4gICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgb3B0aW9ucyk7IH0sXG4gICAgICAgI
3H0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmlnZ2VyQ2hhbmdlKCkge1xuICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNoYW5nZVwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmluZEV2ZW50cygpIHtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLndyYXApIHtcbiAgICAgICAgICAgIFtcIm9wZW5cIiwgXCJjbG9zZVwiLCBcInRvZ2dsZVwiLCBcImNsZWFyXCJdLmZvckVhY2goZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoc2VsZi5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1cIiArIGV2dCArIFwiXVwiKSwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiaW5kKGVsLCBcImNsaWNrXCIsIHNlbGZbZXZ0XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5pc01vYmlsZSkge1xuICAgICAgICAgICAgc2V0dXBNb2JpbGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVib3VuY2VkUmVzaXplID0gZGVib3VuY2Uob25SZXNpemUsIDUwKTtcbiAgICAgICAgc2VsZi5fZGVib3VuY2VkQ2hhbmdlID0gZGVib3VuY2UodHJpZ2dlckNoYW5nZSwgREVCT1VOQ0VEX0NIQU5HRV9NUyk7XG4gICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgJiYgIS9pUGhvbmV8aVBhZHxpUG9kL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSlcbiAgICAgICAgICAgIGJpbmQoc2VsZi5kYXlzQ29udGFpbmVyLCBcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VPdmVyKGdldEV2ZW50VGFyZ2V0KGUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBiaW5kKHNlbGYuX2lucHV0LCBcImtleWRvd25cIiwgb25LZXlEb3duKTtcbiAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYmluZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImtleWRvd25cIiwgb25LZXlEb3duKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlbGYuY29uZmlnLmlubGluZSAmJiAhc2VsZi5jb25maWcuc3RhdGljKVxuICAgICAgICAgICAgYmluZCh3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlZFJlc2l6ZSk7XG4gICAgICAgIGlmICh3aW5kb3cub250b3VjaHN0YXJ0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBiaW5kKHdpbmRvdy5kb2N1bWVudCwgXCJ0b3VjaHN0YXJ0XCIsIGRvY3VtZW50Q2xpY2spO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBiaW5kKHdpbmRvdy5kb2N1bWVudCwgXCJtb3VzZWRvd25cIiwgZG9jdW1lbnRDbGljayk7XG4gICAgICAgIGJpbmQod2luZG93LmRvY3VtZW50LCBcImZvY3VzXCIsIGRvY3VtZW50Q2xpY2ssIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLmNsaWNrT3BlbnMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGJpbmQoc2VsZi5faW5wdXQsIFwiZm9jdXNcIiwgc2VsZi5vcGVuKTtcbiAgICAgICAgICAgIGJpbmQoc2VsZi5faW5wdXQsIFwiY2xpY2tcIiwgc2VsZi5vcGVuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGJpbmQoc2VsZi5tb250aE5hdiwgXCJjbGlja1wiLCBvbk1vbnRoTmF2Q2xpY2spO1xuICAgICAgICAgICAgYmluZChzZWxmLm1vbnRoTmF2LCBbXCJrZXl1cFwiLCBcImluY3JlbWVudFwiXSwgb25ZZWFySW5wdXQpO1xuICAgICAgICAgICAgYmluZChzZWxmLmRheXNDb250YWluZXIsIFwiY2xpY2tcIiwgc2VsZWN0RGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYudGltZUNvbnRhaW5lciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2Y
3XIgc2VsVGV4dCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldEV2ZW50VGFyZ2V0KGUpLnNlbGVjdCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJpbmQoc2VsZi50aW1lQ29udGFpbmVyLCBbXCJpbmNyZW1lbnRcIl0sIHVwZGF0ZVRpbWUpO1xuICAgICAgICAgICAgYmluZChzZWxmLnRpbWVDb250YWluZXIsIFwiYmx1clwiLCB1cGRhdGVUaW1lLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgICAgICBiaW5kKHNlbGYudGltZUNvbnRhaW5lciwgXCJjbGlja1wiLCB0aW1lSW5jcmVtZW50KTtcbiAgICAgICAgICAgIGJpbmQoW3NlbGYuaG91ckVsZW1lbnQsIHNlbGYubWludXRlRWxlbWVudF0sIFtcImZvY3VzXCIsIFwiY2xpY2tcIl0sIHNlbFRleHQpO1xuICAgICAgICAgICAgaWYgKHNlbGYuc2Vjb25kRWxlbWVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5zZWNvbmRFbGVtZW50LCBcImZvY3VzXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuc2Vjb25kRWxlbWVudCAmJiBzZWxmLnNlY29uZEVsZW1lbnQuc2VsZWN0KCk7IH0pO1xuICAgICAgICAgICAgaWYgKHNlbGYuYW1QTSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLmFtUE0sIFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZShlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5jb25maWcuYWxsb3dJbnB1dCkge1xuICAgICAgICAgICAgYmluZChzZWxmLl9pbnB1dCwgXCJibHVyXCIsIG9uQmx1cik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24ganVtcFRvRGF0ZShqdW1wRGF0ZSwgdHJpZ2dlckNoYW5nZSkge1xuICAgICAgICB2Y
3XIganVtcFRvID0ganVtcERhdGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBzZWxmLnBhcnNlRGF0ZShqdW1wRGF0ZSlcbiAgICAgICAgICAgIDogc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogfHxcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWluRGF0ZSAmJiBzZWxmLmNvbmZpZy5taW5EYXRlID4gc2VsZi5ub3dcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5taW5EYXRlXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWF4RGF0ZSAmJiBzZWxmLmNvbmZpZy5tYXhEYXRlIDwgc2VsZi5ub3dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWF4RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLm5vdyk7XG4gICAgICAgIHZhciBvbGRZZWFyID0gc2VsZi5jdXJyZW50WWVhcjtcbiAgICAgICAgdmFyIG9sZE1vbnRoID0gc2VsZi5jdXJyZW50TW9udGg7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoanVtcFRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID0ganVtcFRvLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBqdW1wVG8uZ2V0TW9udGgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZS5tZXNzYWdlID0gXCJJbnZhbGlkIGRhdGUgc3VwcGxpZWQ6IFwiICsganVtcFRvO1xuICAgICAgICAgICAgc2VsZi5jb25maWcuZXJyb3JIYW5kbGVyKGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlICYmIHNlbGYuY3VycmVudFllYXIgIT09IG9sZFllYXIpIHtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSAmJlxuICAgICAgICAgICAgKHNlbGYuY3VycmVudFllYXIgIT09IG9sZFllYXIgfHwgc2VsZi5jdXJyZW50TW9udGggIT09IG9sZE1vbnRoKSkge1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25Nb250aENoYW5nZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0aW1lSW5jcmVtZW50KGUpIHtcbiAgICAgICAgdmFyIGV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgIGlmICh+ZXZlbnRUYXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoXCJhcnJvd1wiKSlcbiAgICAgICAgICAgIGluY3JlbWVudE51bUlucHV0KGUsIGV2ZW50VGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93VXBcIikgPyAxIDogLTEpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbmNyZW1lbnROdW1JbnB1dChlLCBkZWx0YSwgaW5wdXRFbGVtKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSBlICYmIGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICB2Y
3XIgaW5wdXQgPSBpbnB1dEVsZW0gfHxcbiAgICAgICAgICAgICh0YXJnZXQgJiYgdGFyZ2V0LnBhcmVudE5vZGUgJiYgdGFyZ2V0LnBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG4gICAgICAgIHZhciBldmVudCA9IGNyZWF0ZUV2ZW50KFwiaW5jcmVtZW50XCIpO1xuICAgICAgICBldmVudC5kZWx0YSA9IGRlbHRhO1xuICAgICAgICBpbnB1dCAmJiBpbnB1dC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGQoKSB7XG4gICAgICAgIHZhciBmcmFnbWVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWNhbGVuZGFyXCIpO1xuICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIGlmICghc2VsZi5jb25maWcubm9DYWxlbmRhcikge1xuICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoYnVpbGRNb250aE5hdigpKTtcbiAgICAgICAgICAgIHNlbGYuaW5uZXJDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWlubmVyQ29udGFpbmVyXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLndlZWtOdW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hID0gYnVpbGRXZWVrcygpLCB3ZWVrV3JhcHBlciA9IF9hLndlZWtXcmFwcGVyLCB3ZWVrTnVtYmVycyA9IF9hLndlZWtOdW1iZXJzO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5uZXJDb250YWluZXIuYXBwZW5kQ2hpbGQod2Vla1dyYXBwZXIpO1xuICAgICAgICAgICAgICAgIHNlbGYud2Vla051bWJlcnMgPSB3ZWVrTnVtYmVycztcbiAgICAgICAgICAgICAgICBzZWxmLndlZWtXcmFwcGVyID0gd2Vla1dyYXBwZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLnJDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXJDb250YWluZXJcIik7XG4gICAgICAgICAgICBzZWxmLnJDb250YWluZXIuYXBwZW5kQ2hpbGQoYnVpbGRXZWVrZGF5cygpKTtcbiAgICAgICAgICAgIGlmICghc2VsZi5kYXlzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1kYXlzXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVpbGREYXlzKCk7XG4gICAgICAgICAgICBzZWxmLnJDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZi5kYXlzQ29udGFpbmVyKTtcbiAgICAgICAgICAgIHNlbGYuaW5uZXJDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZi5yQ29udGFpbmVyKTtcbiAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHNlbGYuaW5uZXJDb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lKSB7XG4gICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChidWlsZFRpbWUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJyYW5nZU1vZGVcIiwgc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKTtcbiAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJhbmltYXRlXCIsIHNlbGYuY29uZmlnLmFuaW1hdGUgPT09IHRydWUpO1xuICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcIm11bHRpTW9udGhcIiwgc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEpO1xuICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgICAgICAgdmFyIGN1c3RvbUFwcGVuZCA9IHNlbGYuY29uZmlnLmFwcGVuZFRvICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLmFwcGVuZFRvLm5vZGVUeXBlICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5pbmxpbmUgfHwgc2VsZi5jb25maWcuc3RhdGljKSB7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoc2VsZi5jb25maWcuaW5saW5lID8gXCJpbmxpbmVcIiA6IFwic3RhdGljXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmlubGluZSkge1xuICAgICAgICAgICAgICAgIGlmICghY3VzdG9tQXBwZW5kICYmIHNlbGYuZWxlbWVudC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgc2VsZi5faW5wdXQubmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLmFwcGVuZFRvICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmFwcGVuZFRvLmFwcGVuZENoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnN0YXRpYykge1xuICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13cmFwcGVyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmVsZW1lbnQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIHNlbGYuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChzZWxmLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmFsdElucHV0KVxuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHNlbGYuYWx0SW5wdXQpO1xuICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2VsZi5jYWxlbmRhckNvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5zdGF0aWMgJiYgIXNlbGYuY29uZmlnLmlubGluZSlcbiAgICAgICAgICAgIChzZWxmLmNvbmZpZy5hcHBlbmRUbyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5hcHBlbmRUb1xuICAgICAgICAgICAgICAgIDogd2luZG93LmRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXkoY2xhc3NOYW1lLCBkYXRlLCBfZGF5TnVtYmVyLCBpKSB7XG4gICAgICAgI
3HZhciBkYXRlSXNFbmFibGVkID0gaXNFbmFibGVkKGRhdGUsIHRydWUpLCBkYXlFbGVtZW50ID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgY2xhc3NOYW1lLCBkYXRlLmdldERhdGUoKS50b1N0cmluZygpKTtcbiAgICAgICAgZGF5RWxlbWVudC5kYXRlT2JqID0gZGF0ZTtcbiAgICAgICAgZGF5RWxlbWVudC4kaSA9IGk7XG4gICAgICAgIGRheUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBzZWxmLmZvcm1hdERhdGUoZGF0ZSwgc2VsZi5jb25maWcuYXJpYURhdGVGb3JtYXQpKTtcbiAgICAgICAgaWYgKGNsYXNzTmFtZS5pbmRleE9mKFwiaGlkZGVuXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGUsIHNlbGYubm93KSA9PT0gMCkge1xuICAgICAgICAgICAgc2VsZi50b2RheURhdGVFbGVtID0gZGF5RWxlbWVudDtcbiAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInRvZGF5XCIpO1xuICAgICAgICAgICAgZGF5RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWN1cnJlbnRcIiwgXCJkYXRlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRlSXNFbmFibGVkKSB7XG4gICAgICAgICAgICBkYXlFbGVtZW50LnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICBpZiAoaXNEYXRlU2VsZWN0ZWQoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzZWxlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZUVsZW0gPSBkYXlFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoZGF5RWxlbWVudCwgXCJzdGFydFJhbmdlXCIsIHNlbGYuc2VsZWN0ZWREYXRlc1swXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1swXSwgdHJ1ZSkgPT09IDApO1xuICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhkYXlFbGVtZW50LCBcImVuZFJhbmdlXCIsIHNlbGYuc2VsZWN0ZWREYXRlc1sxXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1sxXSwgdHJ1ZSkgPT09IDApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09PSBcIm5leHRNb250aERheVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaW5SYW5nZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJmbGF0cGlja3ItZGlzYWJsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIikge1xuICAgICAgICAgICAgaWYgKGlzRGF0ZUluUmFuZ2UoZGF0ZSkgJiYgIWlzRGF0ZVNlbGVjdGVkKGRhdGUpKVxuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImluUmFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYud2Vla051bWJlcnMgJiZcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLnNob3dNb250aHMgPT09IDEgJiZcbiAgICAgICAgICAgIGNsYXNzTmFtZSAhPT0gXCJwcmV2TW9udGhEYXlcIiAmJlxuICAgICAgICAgICAgaSAlIDcgPT09IDYpIHtcbiAgICAgICAgICAgIHNlbGYud2Vla051bWJlcnMuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYmVmb3JlZW5kXCIsIFwiPHNwYW4gY2xhc3M9J2ZsYXRwaWNrci1kYXknPlwiICsgc2VsZi5jb25maWcuZ2V0V2VlayhkYXRlKSArIFwiPC9zcGFuPlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkRheUNyZWF0ZVwiLCBkYXlFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGRheUVsZW1lbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvY3VzT25EYXlFbGVtKHRhcmdldE5vZGUpIHtcbiAgICAgICAgdGFyZ2V0Tm9kZS5mb2N1cygpO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKVxuICAgICAgICAgICAgb25Nb3VzZU92ZXIodGFyZ2V0Tm9kZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEZpcnN0QXZhaWxhYmxlRGF5KGRlbHRhKSB7XG4gICAgICAgIHZhciBzdGFydE1vbnRoID0gZGVsdGEgPiAwID8gMCA6IHNlbGYuY29uZmlnLnNob3dNb250aHMgLSAxO1xuICAgICAgICB2Y
3XIgZW5kTW9udGggPSBkZWx0YSA+IDAgPyBzZWxmLmNvbmZpZy5zaG93TW9udGhzIDogLTE7XG4gICAgICAgIGZvciAodmFyIG0gPSBzdGFydE1vbnRoOyBtICE9IGVuZE1vbnRoOyBtICs9IGRlbHRhKSB7XG4gICAgICAgICAgICB2YXIgbW9udGggPSBzZWxmLmRheXNDb250YWluZXIuY2hpbGRyZW5bbV07XG4gICAgICAgICAgICB2YXIgc3RhcnRJbmRleCA9IGRlbHRhID4gMCA/IDAgOiBtb250aC5jaGlsZHJlbi5sZW5ndGggLSAxO1xuICAgICAgICAgICAgdmFyIGVuZEluZGV4ID0gZGVsdGEgPiAwID8gbW9udGguY2hpbGRyZW4ubGVuZ3RoIDogLTE7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSAhPSBlbmRJbmRleDsgaSArPSBkZWx0YSkge1xuICAgICAgICAgICAgICAgIHZhciBjID0gbW9udGguY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgaWYgKGMuY2xhc3NOYW1lLmluZGV4T2YoXCJoaWRkZW5cIikgPT09IC0xICYmIGlzRW5hYmxlZChjLmRhdGVPYmopKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROZXh0QXZhaWxhYmxlRGF5KGN1cnJlbnQsIGRlbHRhKSB7XG4gICAgICAgIHZhciBnaXZlbk1vbnRoID0gY3VycmVudC5jbGFzc05hbWUuaW5kZXhPZihcIk1vbnRoXCIpID09PSAtMVxuICAgICAgICAgICAgPyBjdXJyZW50LmRhdGVPYmouZ2V0TW9udGgoKVxuICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRNb250aDtcbiAgICAgICAgdmFyIGVuZE1vbnRoID0gZGVsdGEgPiAwID8gc2VsZi5jb25maWcuc2hvd01vbnRocyA6IC0xO1xuICAgICAgICB2Y
3XIgbG9vcERlbHRhID0gZGVsdGEgPiAwID8gMSA6IC0xO1xuICAgICAgICBmb3IgKHZhciBtID0gZ2l2ZW5Nb250aCAtIHNlbGYuY3VycmVudE1vbnRoOyBtICE9IGVuZE1vbnRoOyBtICs9IGxvb3BEZWx0YSkge1xuICAgICAgICAgICAgdmFyIG1vbnRoID0gc2VsZi5kYXlzQ29udGFpbmVyLmNoaWxkcmVuW21dO1xuICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSBnaXZlbk1vbnRoIC0gc2VsZi5jdXJyZW50TW9udGggPT09IG1cbiAgICAgICAgICAgICAgICA/IGN1cnJlbnQuJGkgKyBkZWx0YVxuICAgICAgICAgICAgICAgIDogZGVsdGEgPCAwXG4gICAgICAgICAgICAgICAgICAgID8gbW9udGguY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICB2YXIgbnVtTW9udGhEYXlzID0gbW9udGguY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPj0gMCAmJiBpIDwgbnVtTW9udGhEYXlzICYmIGkgIT0gKGRlbHRhID4gMCA/IG51bU1vbnRoRGF5cyA6IC0xKTsgaSArPSBsb29wRGVsdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IG1vbnRoLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgIGlmIChjLmNsYXNzTmFtZS5pbmRleE9mKFwiaGlkZGVuXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICBpc0VuYWJsZWQoYy5kYXRlT2JqKSAmJlxuICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyhjdXJyZW50LiRpIC0gaSkgPj0gTWF0aC5hYnMoZGVsdGEpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNPbkRheUVsZW0oYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5jaGFuZ2VNb250aChsb29wRGVsdGEpO1xuICAgICAgICBmb2N1c09uRGF5KGdldEZpcnN0QXZhaWxhYmxlRGF5KGxvb3BEZWx0YSksIDApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmb2N1c09uRGF5KGN1cnJlbnQsIG9mZnNldCkge1xuICAgICAgICB2Y
3XIgYWN0aXZlRWxlbWVudCA9IGdldENsb3Nlc3RBY3RpdmVFbGVtZW50KCk7XG4gICAgICAgIHZhciBkYXlGb2N1c2VkID0gaXNJblZpZXcoYWN0aXZlRWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgdmFyIHN0YXJ0RWxlbSA9IGN1cnJlbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBjdXJyZW50XG4gICAgICAgICAgICA6IGRheUZvY3VzZWRcbiAgICAgICAgICAgICAgICA/IGFjdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgICAgICA6IHNlbGYuc2VsZWN0ZWREYXRlRWxlbSAhPT0gdW5kZWZpbmVkICYmIGlzSW5WaWV3KHNlbGYuc2VsZWN0ZWREYXRlRWxlbSlcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLnNlbGVjdGVkRGF0ZUVsZW1cbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLnRvZGF5RGF0ZUVsZW0gIT09IHVuZGVmaW5lZCAmJiBpc0luVmlldyhzZWxmLnRvZGF5RGF0ZUVsZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYudG9kYXlEYXRlRWxlbVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRGaXJzdEF2YWlsYWJsZURheShvZmZzZXQgPiAwID8gMSA6IC0xKTtcbiAgICAgICAgaWYgKHN0YXJ0RWxlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZWxmLl9pbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFkYXlGb2N1c2VkKSB7XG4gICAgICAgICAgICBmb2N1c09uRGF5RWxlbShzdGFydEVsZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2V0TmV4dEF2YWlsYWJsZURheShzdGFydEVsZW0sIG9mZnNldCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGRNb250aERheXMoeWVhciwgbW9udGgpIHtcbiAgICAgICAgdmFyIGZpcnN0T2ZNb250aCA9IChuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkuZ2V0RGF5KCkgLSBzZWxmLmwxMG4uZmlyc3REYXlPZldlZWsgKyA3KSAlIDc7XG4gICAgICAgIHZhciBwcmV2TW9udGhEYXlzID0gc2VsZi51dGlscy5nZXREYXlzSW5Nb250aCgobW9udGggLSAxICsgMTIpICUgMTIsIHllYXIpO1xuICAgICAgICB2Y
3XIgZGF5c0luTW9udGggPSBzZWxmLnV0aWxzLmdldERheXNJbk1vbnRoKG1vbnRoLCB5ZWFyKSwgZGF5cyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGlzTXVsdGlNb250aCA9IHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxLCBwcmV2TW9udGhEYXlDbGFzcyA9IGlzTXVsdGlNb250aCA/IFwicHJldk1vbnRoRGF5IGhpZGRlblwiIDogXCJwcmV2TW9udGhEYXlcIiwgbmV4dE1vbnRoRGF5Q2xhc3MgPSBpc011bHRpTW9udGggPyBcIm5leHRNb250aERheSBoaWRkZW5cIiA6IFwibmV4dE1vbnRoRGF5XCI7XG4gICAgICAgIHZhciBkYXlOdW1iZXIgPSBwcmV2TW9udGhEYXlzICsgMSAtIGZpcnN0T2ZNb250aCwgZGF5SW5kZXggPSAwO1xuICAgICAgICBmb3IgKDsgZGF5TnVtYmVyIDw9IHByZXZNb250aERheXM7IGRheU51bWJlcisrLCBkYXlJbmRleCsrKSB7XG4gICAgICAgICAgICBkYXlzLmFwcGVuZENoaWxkKGNyZWF0ZURheShcImZsYXRwaWNrci1kYXkgXCIgKyBwcmV2TW9udGhEYXlDbGFzcywgbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXlOdW1iZXIpLCBkYXlOdW1iZXIsIGRheUluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChkYXlOdW1iZXIgPSAxOyBkYXlOdW1iZXIgPD0gZGF5c0luTW9udGg7IGRheU51bWJlcisrLCBkYXlJbmRleCsrKSB7XG4gICAgICAgICAgICBkYXlzLmFwcGVuZENoaWxkKGNyZWF0ZURheShcImZsYXRwaWNrci1kYXlcIiwgbmV3IERhdGUoeWVhciwgbW9udGgsIGRheU51bWJlciksIGRheU51bWJlciwgZGF5SW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBkYXlOdW0gPSBkYXlzSW5Nb250aCArIDE7IGRheU51bSA8PSA0MiAtIGZpcnN0T2ZNb250aCAmJlxuICAgICAgICAgICAgKHNlbGYuY29uZmlnLnNob3dNb250aHMgPT09IDEgfHwgZGF5SW5kZXggJSA3ICE9PSAwKTsgZGF5TnVtKyssIGRheUluZGV4KyspIHtcbiAgICAgICAgICAgIGRheXMuYXBwZW5kQ2hpbGQoY3JlYXRlRGF5KFwiZmxhdHBpY2tyLWRheSBcIiArIG5leHRNb250aERheUNsYXNzLCBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIGRheU51bSAlIGRheXNJbk1vbnRoKSwgZGF5TnVtLCBkYXlJbmRleCkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZGF5Q29udGFpbmVyXCIpO1xuICAgICAgICBkYXlDb250YWluZXIuYXBwZW5kQ2hpbGQoZGF5cyk7XG4gICAgICAgIHJldHVybiBkYXlDb250YWluZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkRGF5cygpIHtcbiAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJOb2RlKHNlbGYuZGF5c0NvbnRhaW5lcik7XG4gICAgICAgIGlmIChzZWxmLndlZWtOdW1iZXJzKVxuICAgICAgICAgICAgY2xlYXJOb2RlKHNlbGYud2Vla051bWJlcnMpO1xuICAgICAgICB2Y
3XIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmNvbmZpZy5zaG93TW9udGhzOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoc2VsZi5jdXJyZW50WWVhciwgc2VsZi5jdXJyZW50TW9udGgsIDEpO1xuICAgICAgICAgICAgZC5zZXRNb250aChzZWxmLmN1cnJlbnRNb250aCArIGkpO1xuICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChidWlsZE1vbnRoRGF5cyhkLmdldEZ1bGxZZWFyKCksIGQuZ2V0TW9udGgoKSkpO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5hcHBlbmRDaGlsZChmcmFnKTtcbiAgICAgICAgc2VsZi5kYXlzID0gc2VsZi5kYXlzQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIgJiYgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgb25Nb3VzZU92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZE1vbnRoU3dpdGNoKCkge1xuICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEgfHxcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vbnRoU2VsZWN0b3JUeXBlICE9PSBcImRyb3Bkb3duXCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBzaG91bGRCdWlsZE1vbnRoID0gZnVuY3Rpb24gKG1vbnRoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWluRGF0ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpICYmXG4gICAgICAgICAgICAgICAgbW9udGggPCBzZWxmLmNvbmZpZy5taW5EYXRlLmdldE1vbnRoKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gIShzZWxmLmNvbmZpZy5tYXhEYXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgICAgICAgICAgICBtb250aCA+IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0TW9udGgoKSk7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIudGFiSW5kZXggPSAtMTtcbiAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghc2hvdWxkQnVpbGRNb250aChpKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciBtb250aCA9IGNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgXCJmbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aFwiKTtcbiAgICAgICAgICAgIG1vbnRoLnZhbHVlID0gbmV3IERhdGUoc2VsZi5jdXJyZW50WWVhciwgaSkuZ2V0TW9udGgoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgbW9udGgudGV4dENvbnRlbnQgPSBtb250aFRvU3RyKGksIHNlbGYuY29uZmlnLnNob3J0aGFuZEN1cnJlbnRNb250aCwgc2VsZi5sMTBuKTtcbiAgICAgICAgICAgIG1vbnRoLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICBpZiAoc2VsZi5jdXJyZW50TW9udGggPT09IGkpIHtcbiAgICAgICAgICAgICAgICBtb250aC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLmFwcGVuZENoaWxkKG1vbnRoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZE1vbnRoKCkge1xuICAgICAgICB2Y
3XIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1tb250aFwiKTtcbiAgICAgICAgdmFyIG1vbnRoTmF2RnJhZ21lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICB2YXIgbW9udGhFbGVtZW50O1xuICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEgfHxcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vbnRoU2VsZWN0b3JUeXBlID09PSBcInN0YXRpY1wiKSB7XG4gICAgICAgICAgICBtb250aEVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImN1ci1tb250aFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIFwiZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzXCIpO1xuICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIHNlbGYubDEwbi5tb250aEFyaWFMYWJlbCk7XG4gICAgICAgICAgICBiaW5kKHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIsIFwiY2hhbmdlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZE1vbnRoID0gcGFyc2VJbnQodGFyZ2V0LnZhbHVlLCAxMCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VNb250aChzZWxlY3RlZE1vbnRoIC0gc2VsZi5jdXJyZW50TW9udGgpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uTW9udGhDaGFuZ2VcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgIG1vbnRoRWxlbWVudCA9IHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHllYXJJbnB1dCA9IGNyZWF0ZU51bWJlcklucHV0KFwiY3VyLXllYXJcIiwgeyB0YWJpbmRleDogXCItMVwiIH0pO1xuICAgICAgICB2Y
3XIgeWVhckVsZW1lbnQgPSB5ZWFySW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgeWVhckVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBzZWxmLmwxMG4ueWVhckFyaWFMYWJlbCk7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlKSB7XG4gICAgICAgICAgICB5ZWFyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tYXhEYXRlKSB7XG4gICAgICAgICAgICB5ZWFyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgeWVhckVsZW1lbnQuZGlzYWJsZWQgPVxuICAgICAgICAgICAgICAgICEhc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKCkgPT09IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY3VycmVudE1vbnRoID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1jdXJyZW50LW1vbnRoXCIpO1xuICAgICAgICBjdXJyZW50TW9udGguYXBwZW5kQ2hpbGQobW9udGhFbGVtZW50KTtcbiAgICAgICAgY3VycmVudE1vbnRoLmFwcGVuZENoaWxkKHllYXJJbnB1dCk7XG4gICAgICAgIG1vbnRoTmF2RnJhZ21lbnQuYXBwZW5kQ2hpbGQoY3VycmVudE1vbnRoKTtcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG1vbnRoTmF2RnJhZ21lbnQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgICAgICAgICB5ZWFyRWxlbWVudDogeWVhckVsZW1lbnQsXG4gICAgICAgICAgICBtb250aEVsZW1lbnQ6IG1vbnRoRWxlbWVudCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGRNb250aHMoKSB7XG4gICAgICAgIGNsZWFyTm9kZShzZWxmLm1vbnRoTmF2KTtcbiAgICAgICAgc2VsZi5tb250aE5hdi5hcHBlbmRDaGlsZChzZWxmLnByZXZNb250aE5hdik7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5zaG93TW9udGhzKSB7XG4gICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cyA9IFtdO1xuICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgbSA9IHNlbGYuY29uZmlnLnNob3dNb250aHM7IG0tLTspIHtcbiAgICAgICAgICAgIHZhciBtb250aCA9IGJ1aWxkTW9udGgoKTtcbiAgICAgICAgICAgIHNlbGYueWVhckVsZW1lbnRzLnB1c2gobW9udGgueWVhckVsZW1lbnQpO1xuICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzLnB1c2gobW9udGgubW9udGhFbGVtZW50KTtcbiAgICAgICAgICAgIHNlbGYubW9udGhOYXYuYXBwZW5kQ2hpbGQobW9udGguY29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLm1vbnRoTmF2LmFwcGVuZENoaWxkKHNlbGYubmV4dE1vbnRoTmF2KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGRNb250aE5hdigpIHtcbiAgICAgICAgc2VsZi5tb250aE5hdiA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItbW9udGhzXCIpO1xuICAgICAgICBzZWxmLnllYXJFbGVtZW50cyA9IFtdO1xuICAgICAgICBzZWxmLm1vbnRoRWxlbWVudHMgPSBbXTtcbiAgICAgICAgc2VsZi5wcmV2TW9udGhOYXYgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImZsYXRwaWNrci1wcmV2LW1vbnRoXCIpO1xuICAgICAgICBzZWxmLnByZXZNb250aE5hdi5pbm5lckhUTUwgPSBzZWxmLmNvbmZpZy5wcmV2QXJyb3c7XG4gICAgICAgIHNlbGYubmV4dE1vbnRoTmF2ID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItbmV4dC1tb250aFwiKTtcbiAgICAgICAgc2VsZi5uZXh0TW9udGhOYXYuaW5uZXJIVE1MID0gc2VsZi5jb25maWcubmV4dEFycm93O1xuICAgICAgICBidWlsZE1vbnRocygpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgXCJfaGlkZVByZXZNb250aEFycm93XCIsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5fX2hpZGVQcmV2TW9udGhBcnJvdzsgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fX2hpZGVQcmV2TW9udGhBcnJvdyAhPT0gYm9vbCkge1xuICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLnByZXZNb250aE5hdiwgXCJmbGF0cGlja3ItZGlzYWJsZWRcIiwgYm9vbCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX19oaWRlUHJldk1vbnRoQXJyb3cgPSBib29sO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgXCJfaGlkZU5leHRNb250aEFycm93XCIsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5fX2hpZGVOZXh0TW9udGhBcnJvdzsgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fX2hpZGVOZXh0TW9udGhBcnJvdyAhPT0gYm9vbCkge1xuICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLm5leHRNb250aE5hdiwgXCJmbGF0cGlja3ItZGlzYWJsZWRcIiwgYm9vbCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX19oaWRlTmV4dE1vbnRoQXJyb3cgPSBib29sO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudCA9IHNlbGYueWVhckVsZW1lbnRzWzBdO1xuICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgICAgIHJldHVybiBzZWxmLm1vbnRoTmF2O1xuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZFRpbWUoKSB7XG4gICAgICAgI
3HNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhhc1RpbWVcIik7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5ub0NhbGVuZGFyKVxuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwibm9DYWxlbmRhclwiKTtcbiAgICAgICAgdmFyIGRlZmF1bHRzID0gZ2V0RGVmYXVsdEhvdXJzKHNlbGYuY29uZmlnKTtcbiAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci10aW1lXCIpO1xuICAgICAgICBzZWxmLnRpbWVDb250YWluZXIudGFiSW5kZXggPSAtMTtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXRpbWUtc2VwYXJhdG9yXCIsIFwiOlwiKTtcbiAgICAgICAgdmFyIGhvdXJJbnB1dCA9IGNyZWF0ZU51bWJlcklucHV0KFwiZmxhdHBpY2tyLWhvdXJcIiwge1xuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHNlbGYubDEwbi5ob3VyQXJpYUxhYmVsLFxuICAgICAgICB9KTtcbiAgICAgICAgc2VsZi5ob3VyRWxlbWVudCA9IGhvdXJJbnB1dC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpWzBdO1xuICAgICAgICB2YXIgbWludXRlSW5wdXQgPSBjcmVhdGVOdW1iZXJJbnB1dChcImZsYXRwaWNrci1taW51dGVcIiwge1xuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHNlbGYubDEwbi5taW51dGVBcmlhTGFiZWwsXG4gICAgICAgIH0pO1xuICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQgPSBtaW51dGVJbnB1dC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpWzBdO1xuICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnRhYkluZGV4ID0gc2VsZi5taW51dGVFbGVtZW50LnRhYkluZGV4ID0gLTE7XG4gICAgICAgIHNlbGYuaG91ckVsZW1lbnQudmFsdWUgPSBwYWQoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgID8gc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmouZ2V0SG91cnMoKVxuICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy50aW1lXzI0aHJcbiAgICAgICAgICAgICAgICA/IGRlZmF1bHRzLmhvdXJzXG4gICAgICAgICAgICAgICAgOiBtaWxpdGFyeTJhbXBtKGRlZmF1bHRzLmhvdXJzKSk7XG4gICAgICAgIHNlbGYubWludXRlRWxlbWVudC52YWx1ZSA9IHBhZChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9ialxuICAgICAgICAgICAgPyBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iai5nZXRNaW51dGVzKClcbiAgICAgICAgICAgIDogZGVmYXVsdHMubWludXRlcyk7XG4gICAgICAgIHNlbGYuaG91ckVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3RlcFwiLCBzZWxmLmNvbmZpZy5ob3VySW5jcmVtZW50LnRvU3RyaW5nKCkpO1xuICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3RlcFwiLCBzZWxmLmNvbmZpZy5taW51dGVJbmNyZW1lbnQudG9TdHJpbmcoKSk7XG4gICAgICAgIHNlbGYuaG91ckVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIHNlbGYuY29uZmlnLnRpbWVfMjRociA/IFwiMFwiIDogXCIxXCIpO1xuICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1heFwiLCBzZWxmLmNvbmZpZy50aW1lXzI0aHIgPyBcIjIzXCIgOiBcIjEyXCIpO1xuICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1heGxlbmd0aFwiLCBcIjJcIik7XG4gICAgICAgIHNlbGYubWludXRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgXCIwXCIpO1xuICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWF4XCIsIFwiNTlcIik7XG4gICAgICAgIHNlbGYubWludXRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhsZW5ndGhcIiwgXCIyXCIpO1xuICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoaG91cklucHV0KTtcbiAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlcGFyYXRvcik7XG4gICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChtaW51dGVJbnB1dCk7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy50aW1lXzI0aHIpXG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuY2xhc3NMaXN0LmFkZChcInRpbWUyNGhyXCIpO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlU2Vjb25kcykge1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJoYXNTZWNvbmRzXCIpO1xuICAgICAgICAgICAgdmFyIHNlY29uZElucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJmbGF0cGlja3Itc2Vjb25kXCIpO1xuICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50ID0gc2Vjb25kSW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC52YWx1ZSA9IHBhZChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9ialxuICAgICAgICAgICAgICAgID8gc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmouZ2V0U2Vjb25kcygpXG4gICAgICAgICAgICAgICAgOiBkZWZhdWx0cy5zZWNvbmRzKTtcbiAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdGVwXCIsIHNlbGYubWludXRlRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJzdGVwXCIpKTtcbiAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgXCIwXCIpO1xuICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1heFwiLCBcIjU5XCIpO1xuICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1heGxlbmd0aFwiLCBcIjJcIik7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItdGltZS1zZXBhcmF0b3JcIiwgXCI6XCIpKTtcbiAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWNvbmRJbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy50aW1lXzI0aHIpIHtcbiAgICAgICAgICAgI
3HNlbGYuYW1QTSA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLWFtLXBtXCIsIHNlbGYubDEwbi5hbVBNW2ludCgoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICA/IHNlbGYuaG91ckVsZW1lbnQudmFsdWVcbiAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLmRlZmF1bHRIb3VyKSA+IDExKV0pO1xuICAgICAgICAgICAgc2VsZi5hbVBNLnRpdGxlID0gc2VsZi5sMTBuLnRvZ2dsZVRpdGxlO1xuICAgICAgICAgICAgc2VsZi5hbVBNLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZi5hbVBNKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZi50aW1lQ29udGFpbmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZFdlZWtkYXlzKCkge1xuICAgICAgICBpZiAoIXNlbGYud2Vla2RheUNvbnRhaW5lcilcbiAgICAgICAgICAgIHNlbGYud2Vla2RheUNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd2Vla2RheXNcIik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNsZWFyTm9kZShzZWxmLndlZWtkYXlDb250YWluZXIpO1xuICAgICAgICBmb3IgKHZhciBpID0gc2VsZi5jb25maWcuc2hvd01vbnRoczsgaS0tOykge1xuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd2Vla2RheWNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgIHNlbGYud2Vla2RheUNvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVdlZWtkYXlzKCk7XG4gICAgICAgIHJldHVybiBzZWxmLndlZWtkYXlDb250YWluZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVdlZWtkYXlzKCkge1xuICAgICAgICBpZiAoIXNlbGYud2Vla2RheUNvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmaXJzdERheU9mV2VlayA9IHNlbGYubDEwbi5maXJzdERheU9mV2VlaztcbiAgICAgICAgdmFyIHdlZWtkYXlzID0gX19zcHJlYWRBcnJheXMoc2VsZi5sMTBuLndlZWtkYXlzLnNob3J0aGFuZCk7XG4gICAgICAgIGlmIChmaXJzdERheU9mV2VlayA+IDAgJiYgZmlyc3REYXlPZldlZWsgPCB3ZWVrZGF5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHdlZWtkYXlzID0gX19zcHJlYWRBcnJheXMod2Vla2RheXMuc3BsaWNlKGZpcnN0RGF5T2ZXZWVrLCB3ZWVrZGF5cy5sZW5ndGgpLCB3ZWVrZGF5cy5zcGxpY2UoMCwgZmlyc3REYXlPZldlZWspKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gc2VsZi5jb25maWcuc2hvd01vbnRoczsgaS0tOykge1xuICAgICAgICAgICAgc2VsZi53ZWVrZGF5Q29udGFpbmVyLmNoaWxkcmVuW2ldLmlubmVySFRNTCA9IFwiXFxuICAgICAgPHNwYW4gY2xhc3M9J2ZsYXRwaWNrci13ZWVrZGF5Jz5cXG4gICAgICAgIFwiICsgd2Vla2RheXMuam9pbihcIjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxhdHBpY2tyLXdlZWtkYXknPlwiKSArIFwiXFxuICAgICAgPC9zcGFuPlxcbiAgICAgIFwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkV2Vla3MoKSB7XG4gICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhhc1dlZWtzXCIpO1xuICAgICAgICB2Y
3XIgd2Vla1dyYXBwZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXdlZWt3cmFwcGVyXCIpO1xuICAgICAgICB3ZWVrV3JhcHBlci5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImZsYXRwaWNrci13ZWVrZGF5XCIsIHNlbGYubDEwbi53ZWVrQWJicmV2aWF0aW9uKSk7XG4gICAgICAgIHZhciB3ZWVrTnVtYmVycyA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd2Vla3NcIik7XG4gICAgICAgIHdlZWtXcmFwcGVyLmFwcGVuZENoaWxkKHdlZWtOdW1iZXJzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdlZWtXcmFwcGVyOiB3ZWVrV3JhcHBlcixcbiAgICAgICAgICAgIHdlZWtOdW1iZXJzOiB3ZWVrTnVtYmVycyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hhbmdlTW9udGgodmFsdWUsIGlzT2Zmc2V0KSB7XG4gICAgICAgIGlmIChpc09mZnNldCA9PT0gdm9pZCAwKSB7IGlzT2Zmc2V0ID0gdHJ1ZTsgfVxuICAgICAgICB2YXIgZGVsdGEgPSBpc09mZnNldCA/IHZhbHVlIDogdmFsdWUgLSBzZWxmLmN1cnJlbnRNb250aDtcbiAgICAgICAgaWYgKChkZWx0YSA8IDAgJiYgc2VsZi5faGlkZVByZXZNb250aEFycm93ID09PSB0cnVlKSB8fFxuICAgICAgICAgICAgKGRlbHRhID4gMCAmJiBzZWxmLl9oaWRlTmV4dE1vbnRoQXJyb3cgPT09IHRydWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzZWxmLmN1cnJlbnRNb250aCArPSBkZWx0YTtcbiAgICAgICAgaWYgKHNlbGYuY3VycmVudE1vbnRoIDwgMCB8fCBzZWxmLmN1cnJlbnRNb250aCA+IDExKSB7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyICs9IHNlbGYuY3VycmVudE1vbnRoID4gMTEgPyAxIDogLTE7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IChzZWxmLmN1cnJlbnRNb250aCArIDEyKSAlIDEyO1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25ZZWFyQ2hhbmdlXCIpO1xuICAgICAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICB9XG4gICAgICAgIGJ1aWxkRGF5cygpO1xuICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbk1vbnRoQ2hhbmdlXCIpO1xuICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsZWFyKHRyaWdnZXJDaGFuZ2VFdmVudCwgdG9Jbml0aWFsKSB7XG4gICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlRXZlbnQgPT09IHZvaWQgMCkgeyB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSB0cnVlOyB9XG4gICAgICAgIGlmICh0b0luaXRpYWwgPT09IHZvaWQgMCkgeyB0b0luaXRpYWwgPSB0cnVlOyB9XG4gICAgICAgIHNlbGYuaW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gW107XG4gICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodG9Jbml0aWFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID0gc2VsZi5faW5pdGlhbERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gc2VsZi5faW5pdGlhbERhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdmFyIF9hID0gZ2V0RGVmYXVsdEhvdXJzKHNlbGYuY29uZmlnKSwgaG91cnMgPSBfYS5ob3VycywgbWludXRlcyA9IF9hLm1pbnV0ZXMsIHNlY29uZHMgPSBfYS5zZWNvbmRzO1xuICAgICAgICAgICAgc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlRXZlbnQpXG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNoYW5nZVwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgIHNlbGYuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIGlmICghc2VsZi5pc01vYmlsZSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcIm9wZW5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5faW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DbG9zZVwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkRlc3Ryb3lcIik7XG4gICAgICAgIGZvciAodmFyIGkgPSBzZWxmLl9oYW5kbGVycy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgIHNlbGYuX2hhbmRsZXJzW2ldLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuX2hhbmRsZXJzID0gW107XG4gICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0KSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzZWxmLm1vYmlsZUlucHV0KTtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2VsZi5jYWxlbmRhckNvbnRhaW5lciAmJiBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zdGF0aWMgJiYgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgd3JhcHBlci5sYXN0Q2hpbGQgJiYgd3JhcHBlci5yZW1vdmVDaGlsZCh3cmFwcGVyLmxhc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgaWYgKHdyYXBwZXIucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAod3JhcHBlci5maXJzdENoaWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLmZpcnN0Q2hpbGQsIHdyYXBwZXIpO1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQod3JhcHBlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgI
3HNlbGYuY2FsZW5kYXJDb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCkge1xuICAgICAgICAgICAgc2VsZi5pbnB1dC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzZWxmLmFsdElucHV0KTtcbiAgICAgICAgICAgIGRlbGV0ZSBzZWxmLmFsdElucHV0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmlucHV0KSB7XG4gICAgICAgICAgICBzZWxmLmlucHV0LnR5cGUgPSBzZWxmLmlucHV0Ll90eXBlO1xuICAgICAgICAgICAgc2VsZi5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKFwiZmxhdHBpY2tyLWlucHV0XCIpO1xuICAgICAgICAgICAgc2VsZi5pbnB1dC5yZW1vdmVBdHRyaWJ1dGUoXCJyZWFkb25seVwiKTtcbiAgICAgICAgfVxuICAgICAgICBbXG4gICAgICAgICAgICBcIl9zaG93VGltZUlucHV0XCIsXG4gICAgICAgICAgICBcImxhdGVzdFNlbGVjdGVkRGF0ZU9ialwiLFxuICAgICAgICAgICAgXCJfaGlkZU5leHRNb250aEFycm93XCIsXG4gICAgICAgICAgICBcIl9oaWRlUHJldk1vbnRoQXJyb3dcIixcbiAgICAgICAgICAgIFwiX19oaWRlTmV4dE1vbnRoQXJyb3dcIixcbiAgICAgICAgICAgIFwiX19oaWRlUHJldk1vbnRoQXJyb3dcIixcbiAgICAgICAgICAgIFwiaXNNb2JpbGVcIixcbiAgICAgICAgICAgIFwiaXNPcGVuXCIsXG4gICAgICAgICAgICBcInNlbGVjdGVkRGF0ZUVsZW1cIixcbiAgICAgICAgICAgIFwibWluRGF0ZUhhc1RpbWVcIixcbiAgICAgICAgICAgIFwibWF4RGF0ZUhhc1RpbWVcIixcbiAgICAgICAgICAgIFwiZGF5c1wiLFxuICAgICAgICAgICAgXCJkYXlzQ29udGFpbmVyXCIsXG4gICAgICAgICAgICBcIl9pbnB1dFwiLFxuICAgICAgICAgICAgXCJfcG9zaXRpb25FbGVtZW50XCIsXG4gICAgICAgICAgICBcImlubmVyQ29udGFpbmVyXCIsXG4gICAgICAgICAgICBcInJDb250YWluZXJcIixcbiAgICAgICAgICAgIFwibW9udGhOYXZcIixcbiAgICAgICAgICAgIFwidG9kYXlEYXRlRWxlbVwiLFxuICAgICAgICAgICAgXCJjYWxlbmRhckNvbnRhaW5lclwiLFxuICAgICAgICAgICAgXCJ3ZWVrZGF5Q29udGFpbmVyXCIsXG4gICAgICAgICAgICBcInByZXZNb250aE5hdlwiLFxuICAgICAgICAgICAgXCJuZXh0TW9udGhOYXZcIixcbiAgICAgICAgICAgIFwibW9udGhzRHJvcGRvd25Db250YWluZXJcIixcbiAgICAgICAgICAgIFwiY3VycmVudE1vbnRoRWxlbWVudFwiLFxuICAgICAgICAgICAgXCJjdXJyZW50WWVhckVsZW1lbnRcIixcbiAgICAgICAgICAgIFwibmF2aWdhdGlvbkN1cnJlbnRNb250aFwiLFxuICAgICAgICAgICAgXCJzZWxlY3RlZERhdGVFbGVtXCIsXG4gICAgICAgICAgICBcImNvbmZpZ1wiLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHNlbGZba107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoXykgeyB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0NhbGVuZGFyRWxlbShlbGVtKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNvbnRhaW5zKGVsZW0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb2N1bWVudENsaWNrKGUpIHtcbiAgICAgICAgaWYgKHNlbGYuaXNPcGVuICYmICFzZWxmLmNvbmZpZy5pbmxpbmUpIHtcbiAgICAgICAgICAgIHZhciBldmVudFRhcmdldF8xID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgICAgICB2Y
3XIgaXNDYWxlbmRhckVsZW1lbnQgPSBpc0NhbGVuZGFyRWxlbShldmVudFRhcmdldF8xKTtcbiAgICAgICAgICAgIHZhciBpc0lucHV0ID0gZXZlbnRUYXJnZXRfMSA9PT0gc2VsZi5pbnB1dCB8fFxuICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0XzEgPT09IHNlbGYuYWx0SW5wdXQgfHxcbiAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnQuY29udGFpbnMoZXZlbnRUYXJnZXRfMSkgfHxcbiAgICAgICAgICAgICAgICAoZS5wYXRoICYmXG4gICAgICAgICAgICAgICAgICAgIGUucGF0aC5pbmRleE9mICYmXG4gICAgICAgICAgICAgICAgICAgICh+ZS5wYXRoLmluZGV4T2Yoc2VsZi5pbnB1dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIH5lLnBhdGguaW5kZXhPZihzZWxmLmFsdElucHV0KSkpO1xuICAgICAgICAgICAgdmFyIGxvc3RGb2N1cyA9ICFpc0lucHV0ICYmXG4gICAgICAgICAgICAgICAgIWlzQ2FsZW5kYXJFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgIWlzQ2FsZW5kYXJFbGVtKGUucmVsYXRlZFRhcmdldCk7XG4gICAgICAgICAgICB2YXIgaXNJZ25vcmVkID0gIXNlbGYuY29uZmlnLmlnbm9yZWRGb2N1c0VsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5jb250YWlucyhldmVudFRhcmdldF8xKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGxvc3RGb2N1cyAmJiBpc0lnbm9yZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuYWxsb3dJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUoc2VsZi5faW5wdXQudmFsdWUsIGZhbHNlLCBzZWxmLmNvbmZpZy5hbHRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5hbHRGb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLnRpbWVDb250YWluZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSAhPT0gXCJcIiAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIiAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjaGFuZ2VZZWFyKG5ld1llYXIpIHtcbiAgICAgICAgaWYgKCFuZXdZZWFyIHx8XG4gICAgICAgICAgICAoc2VsZi5jb25maWcubWluRGF0ZSAmJiBuZXdZZWFyIDwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKSB8fFxuICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1heERhdGUgJiYgbmV3WWVhciA+IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBuZXdZZWFyTnVtID0gbmV3WWVhciwgaXNOZXdZZWFyID0gc2VsZi5jdXJyZW50WWVhciAhPT0gbmV3WWVhck51bTtcbiAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IG5ld1llYXJOdW0gfHwgc2VsZi5jdXJyZW50WWVhcjtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1heERhdGUgJiZcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBNYXRoLm1pbihzZWxmLmNvbmZpZy5tYXhEYXRlLmdldE1vbnRoKCksIHNlbGYuY3VycmVudE1vbnRoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gTWF0aC5tYXgoc2VsZi5jb25maWcubWluRGF0ZS5nZXRNb250aCgpLCBzZWxmLmN1cnJlbnRNb250aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmV3WWVhcikge1xuICAgICAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc0VuYWJsZWQoZGF0ZSwgdGltZWxlc3MpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGltZWxlc3MgPT09IHZvaWQgMCkgeyB0aW1lbGVzcyA9IHRydWU7IH1cbiAgICAgICAgdmFyIGRhdGVUb0NoZWNrID0gc2VsZi5wYXJzZURhdGUoZGF0ZSwgdW5kZWZpbmVkLCB0aW1lbGVzcyk7XG4gICAgICAgIGlmICgoc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgJiZcbiAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlVG9DaGVjaywgc2VsZi5jb25maWcubWluRGF0ZSwgdGltZWxlc3MgIT09IHVuZGVmaW5lZCA/IHRpbWVsZXNzIDogIXNlbGYubWluRGF0ZUhhc1RpbWUpIDwgMCkgfHxcbiAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZVRvQ2hlY2ssIHNlbGYuY29uZmlnLm1heERhdGUsIHRpbWVsZXNzICE9PSB1bmRlZmluZWQgPyB0aW1lbGVzcyA6ICFzZWxmLm1heERhdGVIYXNUaW1lKSA+IDApKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIXNlbGYuY29uZmlnLmVuYWJsZSAmJiBzZWxmLmNvbmZpZy5kaXNhYmxlLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgI
3HJldHVybiB0cnVlO1xuICAgICAgICBpZiAoZGF0ZVRvQ2hlY2sgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGJvb2wgPSAhIXNlbGYuY29uZmlnLmVuYWJsZSwgYXJyYXkgPSAoX2EgPSBzZWxmLmNvbmZpZy5lbmFibGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHNlbGYuY29uZmlnLmRpc2FibGU7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBkID0gdm9pZCAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGQgPSBhcnJheVtpXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICAgICAgZChkYXRlVG9DaGVjaykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJvb2w7XG4gICAgICAgICAgICBlbHNlIGlmIChkIGluc3RhbmNlb2YgRGF0ZSAmJlxuICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBkLmdldFRpbWUoKSA9PT0gZGF0ZVRvQ2hlY2suZ2V0VGltZSgpKVxuICAgICAgICAgICAgICAgIHJldHVybiBib29sO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkID0gc2VsZi5wYXJzZURhdGUoZCwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkICYmIHBhcnNlZC5nZXRUaW1lKCkgPT09IGRhdGVUb0NoZWNrLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICA/IGJvb2xcbiAgICAgICAgICAgICAgICAgICAgOiAhYm9vbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBkID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIGQuZnJvbSAmJlxuICAgICAgICAgICAgICAgIGQudG8gJiZcbiAgICAgICAgICAgICAgICBkYXRlVG9DaGVjay5nZXRUaW1lKCkgPj0gZC5mcm9tLmdldFRpbWUoKSAmJlxuICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrLmdldFRpbWUoKSA8PSBkLnRvLmdldFRpbWUoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gYm9vbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWJvb2w7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzSW5WaWV3KGVsZW0pIHtcbiAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIChlbGVtLmNsYXNzTmFtZS5pbmRleE9mKFwiaGlkZGVuXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lLmluZGV4T2YoXCJmbGF0cGlja3ItZGlzYWJsZWRcIikgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLmNvbnRhaW5zKGVsZW0pKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvbkJsdXIoZSkge1xuICAgICAgICB2Y
3XIgaXNJbnB1dCA9IGUudGFyZ2V0ID09PSBzZWxmLl9pbnB1dDtcbiAgICAgICAgdmFyIHZhbHVlQ2hhbmdlZCA9IHNlbGYuX2lucHV0LnZhbHVlLnRyaW1FbmQoKSAhPT0gZ2V0RGF0ZVN0cigpO1xuICAgICAgICBpZiAoaXNJbnB1dCAmJlxuICAgICAgICAgICAgdmFsdWVDaGFuZ2VkICYmXG4gICAgICAgICAgICAhKGUucmVsYXRlZFRhcmdldCAmJiBpc0NhbGVuZGFyRWxlbShlLnJlbGF0ZWRUYXJnZXQpKSkge1xuICAgICAgICAgICAgc2VsZi5zZXREYXRlKHNlbGYuX2lucHV0LnZhbHVlLCB0cnVlLCBlLnRhcmdldCA9PT0gc2VsZi5hbHRJbnB1dFxuICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcuYWx0Rm9ybWF0XG4gICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBvbktleURvd24oZSkge1xuICAgICAgICB2YXIgZXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChlKTtcbiAgICAgICAgdmFyIGlzSW5wdXQgPSBzZWxmLmNvbmZpZy53cmFwXG4gICAgICAgICAgICA/IGVsZW1lbnQuY29udGFpbnMoZXZlbnRUYXJnZXQpXG4gICAgICAgICAgICA6IGV2ZW50VGFyZ2V0ID09PSBzZWxmLl9pbnB1dDtcbiAgICAgICAgdmFyIGFsbG93SW5wdXQgPSBzZWxmLmNvbmZpZy5hbGxvd0lucHV0O1xuICAgICAgICB2YXIgYWxsb3dLZXlkb3duID0gc2VsZi5pc09wZW4gJiYgKCFhbGxvd0lucHV0IHx8ICFpc0lucHV0KTtcbiAgICAgICAgdmFyIGFsbG93SW5saW5lS2V5ZG93biA9IHNlbGYuY29uZmlnLmlubGluZSAmJiBpc0lucHV0ICYmICFhbGxvd0lucHV0O1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMyAmJiBpc0lucHV0KSB7XG4gICAgICAgICAgICBpZiAoYWxsb3dJbnB1dCkge1xuICAgICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShzZWxmLl9pbnB1dC52YWx1ZSwgdHJ1ZSwgZXZlbnRUYXJnZXQgPT09IHNlbGYuYWx0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5hbHRGb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50VGFyZ2V0LmJsdXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYub3BlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQ2FsZW5kYXJFbGVtKGV2ZW50VGFyZ2V0KSB8fFxuICAgICAgICAgICAgYWxsb3dLZXlkb3duIHx8XG4gICAgICAgICAgICBhbGxvd0lubGluZUtleWRvd24pIHtcbiAgICAgICAgICAgIHZhciBpc1RpbWVPYmogPSAhIXNlbGYudGltZUNvbnRhaW5lciAmJlxuICAgICAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5jb250YWlucyhldmVudFRhcmdldCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGUua2V5Q29kZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1RpbWVPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzQW5kQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3REYXRlKGUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQW5kQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0lucHV0ICYmICFzZWxmLmNvbmZpZy5hbGxvd0lucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVGltZU9iaiAmJiAhaXNJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBnZXRDbG9zZXN0QWN0aXZlRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG93SW5wdXQgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhY3RpdmVFbGVtZW50ICYmIGlzSW5WaWV3KGFjdGl2ZUVsZW1lbnQpKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y
3XIgZGVsdGFfMSA9IGUua2V5Q29kZSA9PT0gMzkgPyAxIDogLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzT25EYXkodW5kZWZpbmVkLCBkZWx0YV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTW9udGgoZGVsdGFfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzT25EYXkoZ2V0Rmlyc3RBdmFpbGFibGVEYXkoMSksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzZWxmLmhvdXJFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhID0gZS5rZXlDb2RlID09PSA0MCA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChzZWxmLmRheXNDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0LiRpICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldCA9PT0gc2VsZi5pbnB1dCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQgPT09IHNlbGYuYWx0SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVllYXIoc2VsZi5jdXJyZW50WWVhciAtIGRlbHRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c09uRGF5KGdldEZpcnN0QXZhaWxhYmxlRGF5KDEpLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc1RpbWVPYmopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNPbkRheSh1bmRlZmluZWQsIGRlbHRhICogNyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnRUYXJnZXQgPT09IHNlbGYuY3VycmVudFllYXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgLSBkZWx0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RpbWVPYmogJiYgc2VsZi5ob3VyRWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVUaW1lKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVib3VuY2VkQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUaW1lT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
3XIgZWxlbXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYW1QTSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KHNlbGYucGx1Z2luRWxlbWVudHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geDsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGVsZW1zLmluZGV4T2YoZXZlbnRUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGVsZW1zW2kgKyAoZS5zaGlmdEtleSA/IC0xIDogMSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFyZ2V0IHx8IHNlbGYuX2lucHV0KS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzZWxmLmNvbmZpZy5ub0NhbGVuZGFyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5jb250YWlucyhldmVudFRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYuYW1QTSAhPT0gdW5kZWZpbmVkICYmIGV2ZW50VGFyZ2V0ID09PSBzZWxmLmFtUE0pIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZS5rZXkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIHNlbGYubDEwbi5hbVBNWzBdLmNoYXJBdCgwKTpcbiAgICAgICAgICAgICAgICBjYXNlIHNlbGYubDEwbi5hbVBNWzBdLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpOlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPSBzZWxmLmwxMG4uYW1QTVswXTtcbiAgICAgICAgICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2Ugc2VsZi5sMTBuLmFtUE1bMV0uY2hhckF0KDApOlxuICAgICAgICAgICAgICAgIGNhc2Ugc2VsZi5sMTBuLmFtUE1bMV0uY2hhckF0KDApLnRvTG93ZXJDYXNlKCk6XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9IHNlbGYubDEwbi5hbVBNWzFdO1xuICAgICAgICAgICAgICAgICAgICBzZXRIb3Vyc0Zyb21JbnB1dHMoKTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSW5wdXQgfHwgaXNDYWxlbmRhckVsZW0oZXZlbnRUYXJnZXQpKSB7XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbktleURvd25cIiwgZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gb25Nb3VzZU92ZXIoZWxlbSwgY2VsbENsYXNzKSB7XG4gICAgICAgIGlmIChjZWxsQ2xhc3MgPT09IHZvaWQgMCkgeyBjZWxsQ2xhc3MgPSBcImZsYXRwaWNrci1kYXlcIjsgfVxuICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCAhPT0gMSB8fFxuICAgICAgICAgICAgKGVsZW0gJiZcbiAgICAgICAgICAgICAgICAoIWVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKGNlbGxDbGFzcykgfHxcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuY29udGFpbnMoXCJmbGF0cGlja3ItZGlzYWJsZWRcIikpKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGhvdmVyRGF0ZSA9IGVsZW1cbiAgICAgICAgICAgID8gZWxlbS5kYXRlT2JqLmdldFRpbWUoKVxuICAgICAgICAgICAgOiBzZWxmLmRheXMuZmlyc3RFbGVtZW50Q2hpbGQuZGF0ZU9iai5nZXRUaW1lKCksIGluaXRpYWxEYXRlID0gc2VsZi5wYXJzZURhdGUoc2VsZi5zZWxlY3RlZERhdGVzWzBdLCB1bmRlZmluZWQsIHRydWUpLmdldFRpbWUoKSwgcmFuZ2VTdGFydERhdGUgPSBNYXRoLm1pbihob3ZlckRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1swXS5nZXRUaW1lKCkpLCByYW5nZUVuZERhdGUgPSBNYXRoLm1heChob3ZlckRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1swXS5nZXRUaW1lKCkpO1xuICAgICAgICB2Y
3XIgY29udGFpbnNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgbWluUmFuZ2UgPSAwLCBtYXhSYW5nZSA9IDA7XG4gICAgICAgIGZvciAodmFyIHQgPSByYW5nZVN0YXJ0RGF0ZTsgdCA8IHJhbmdlRW5kRGF0ZTsgdCArPSBkdXJhdGlvbi5EQVkpIHtcbiAgICAgICAgICAgIGlmICghaXNFbmFibGVkKG5ldyBEYXRlKHQpLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5zRGlzYWJsZWQgPVxuICAgICAgICAgICAgICAgICAgICBjb250YWluc0Rpc2FibGVkIHx8ICh0ID4gcmFuZ2VTdGFydERhdGUgJiYgdCA8IHJhbmdlRW5kRGF0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHQgPCBpbml0aWFsRGF0ZSAmJiAoIW1pblJhbmdlIHx8IHQgPiBtaW5SYW5nZSkpXG4gICAgICAgICAgICAgICAgICAgIG1pblJhbmdlID0gdDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0ID4gaW5pdGlhbERhdGUgJiYgKCFtYXhSYW5nZSB8fCB0IDwgbWF4UmFuZ2UpKVxuICAgICAgICAgICAgICAgICAgICBtYXhSYW5nZSA9IHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhvdmVyYWJsZUNlbGxzID0gQXJyYXkuZnJvbShzZWxmLnJDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIio6bnRoLWNoaWxkKC1uK1wiICsgc2VsZi5jb25maWcuc2hvd01vbnRocyArIFwiKSA+IC5cIiArIGNlbGxDbGFzcykpO1xuICAgICAgICBob3ZlcmFibGVDZWxscy5mb3JFYWNoKGZ1bmN0aW9uIChkYXlFbGVtKSB7XG4gICAgICAgICAgICB2YXIgZGF0ZSA9IGRheUVsZW0uZGF0ZU9iajtcbiAgICAgICAgICAgIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICAgIHZhciBvdXRPZlJhbmdlID0gKG1pblJhbmdlID4gMCAmJiB0aW1lc3RhbXAgPCBtaW5SYW5nZSkgfHxcbiAgICAgICAgICAgICAgICAobWF4UmFuZ2UgPiAwICYmIHRpbWVzdGFtcCA+IG1heFJhbmdlKTtcbiAgICAgICAgICAgIGlmIChvdXRPZlJhbmdlKSB7XG4gICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwibm90QWxsb3dlZFwiKTtcbiAgICAgICAgICAgICAgICBbXCJpblJhbmdlXCIsIFwic3RhcnRSYW5nZVwiLCBcImVuZFJhbmdlXCJdLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QucmVtb3ZlKGMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRhaW5zRGlzYWJsZWQgJiYgIW91dE9mUmFuZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgW1wic3RhcnRSYW5nZVwiLCBcImluUmFuZ2VcIiwgXCJlbmRSYW5nZVwiLCBcIm5vdEFsbG93ZWRcIl0uZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LnJlbW92ZShjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGVsZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChob3ZlckRhdGUgPD0gc2VsZi5zZWxlY3RlZERhdGVzWzBdLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICA/IFwic3RhcnRSYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJlbmRSYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbERhdGUgPCBob3ZlckRhdGUgJiYgdGltZXN0YW1wID09PSBpbml0aWFsRGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwic3RhcnRSYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpbml0aWFsRGF0ZSA+IGhvdmVyRGF0ZSAmJiB0aW1lc3RhbXAgPT09IGluaXRpYWxEYXRlKVxuICAgICAgICAgICAgICAgICAgICBkYXlFbGVtLmNsYXNzTGlzdC5hZGQoXCJlbmRSYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBpZiAodGltZXN0YW1wID49IG1pblJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgIChtYXhSYW5nZSA9PT0gMCB8fCB0aW1lc3RhbXAgPD0gbWF4UmFuZ2UpICYmXG4gICAgICAgICAgICAgICAgICAgIGlzQmV0d2Vlbih0aW1lc3RhbXAsIGluaXRpYWxEYXRlLCBob3ZlckRhdGUpKVxuICAgICAgICAgICAgICAgICAgICBkYXlFbGVtLmNsYXNzTGlzdC5hZGQoXCJpblJhbmdlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25SZXNpemUoKSB7XG4gICAgICAgIGlmIChzZWxmLmlzT3BlbiAmJiAhc2VsZi5jb25maWcuc3RhdGljICYmICFzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICBwb3NpdGlvbkNhbGVuZGFyKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9wZW4oZSwgcG9zaXRpb25FbGVtZW50KSB7XG4gICAgICAgIGlmIChwb3NpdGlvbkVsZW1lbnQgPT09IHZvaWQgMCkgeyBwb3NpdGlvbkVsZW1lbnQgPSBzZWxmLl9wb3NpdGlvbkVsZW1lbnQ7IH1cbiAgICAgICAgaWYgKHNlbGYuaXNNb2JpbGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHZhciBldmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgICAgIGlmIChldmVudFRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LmNsaWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbk9wZW5cIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2VsZi5faW5wdXQuZGlzYWJsZWQgfHwgc2VsZi5jb25maWcuaW5saW5lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgI
3H1cbiAgICAgICAgdmFyIHdhc09wZW4gPSBzZWxmLmlzT3BlbjtcbiAgICAgICAgc2VsZi5pc09wZW4gPSB0cnVlO1xuICAgICAgICBpZiAoIXdhc09wZW4pIHtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcIm9wZW5cIik7XG4gICAgICAgICAgICBzZWxmLl9pbnB1dC5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25PcGVuXCIpO1xuICAgICAgICAgICAgcG9zaXRpb25DYWxlbmRhcihwb3NpdGlvbkVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlICYmIHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5hbGxvd0lucHV0ID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgICAgIChlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgIXNlbGYudGltZUNvbnRhaW5lci5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpKSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5ob3VyRWxlbWVudC5zZWxlY3QoKTsgfSwgNTApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1pbk1heERhdGVTZXR0ZXIodHlwZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgICAgIHZhciBkYXRlT2JqID0gKHNlbGYuY29uZmlnW1wiX1wiICsgdHlwZSArIFwiRGF0ZVwiXSA9IHNlbGYucGFyc2VEYXRlKGRhdGUsIHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpKTtcbiAgICAgICAgICAgIHZhciBpbnZlcnNlRGF0ZU9iaiA9IHNlbGYuY29uZmlnW1wiX1wiICsgKHR5cGUgPT09IFwibWluXCIgPyBcIm1heFwiIDogXCJtaW5cIikgKyBcIkRhdGVcIl07XG4gICAgICAgICAgICBpZiAoZGF0ZU9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZlt0eXBlID09PSBcIm1pblwiID8gXCJtaW5EYXRlSGFzVGltZVwiIDogXCJtYXhEYXRlSGFzVGltZVwiXSA9XG4gICAgICAgICAgICAgICAgICAgIGRhdGVPYmouZ2V0SG91cnMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmouZ2V0TWludXRlcygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZU9iai5nZXRTZWNvbmRzKCkgPiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcykge1xuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IHNlbGYuc2VsZWN0ZWREYXRlcy5maWx0ZXIoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGlzRW5hYmxlZChkKTsgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoICYmIHR5cGUgPT09IFwibWluXCIpXG4gICAgICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbURhdGUoZGF0ZU9iaik7XG4gICAgICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICByZWRyYXcoKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZU9iaiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudFt0eXBlXSA9IGRhdGVPYmouZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhckVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHR5cGUpO1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXJFbGVtZW50LmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgISFpbnZlcnNlRGF0ZU9iaiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZU9iaiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZlcnNlRGF0ZU9iai5nZXRGdWxsWWVhcigpID09PSBkYXRlT2JqLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlQ29uZmlnKCkge1xuICAgICAgICB2Y
3XIgYm9vbE9wdHMgPSBbXG4gICAgICAgICAgICBcIndyYXBcIixcbiAgICAgICAgICAgIFwid2Vla051bWJlcnNcIixcbiAgICAgICAgICAgIFwiYWxsb3dJbnB1dFwiLFxuICAgICAgICAgICAgXCJhbGxvd0ludmFsaWRQcmVsb2FkXCIsXG4gICAgICAgICAgICBcImNsaWNrT3BlbnNcIixcbiAgICAgICAgICAgIFwidGltZV8yNGhyXCIsXG4gICAgICAgICAgICBcImVuYWJsZVRpbWVcIixcbiAgICAgICAgICAgIFwibm9DYWxlbmRhclwiLFxuICAgICAgICAgICAgXCJhbHRJbnB1dFwiLFxuICAgICAgICAgICAgXCJzaG9ydGhhbmRDdXJyZW50TW9udGhcIixcbiAgICAgICAgICAgIFwiaW5saW5lXCIsXG4gICAgICAgICAgICBcInN0YXRpY1wiLFxuICAgICAgICAgICAgXCJlbmFibGVTZWNvbmRzXCIsXG4gICAgICAgICAgICBcImRpc2FibGVNb2JpbGVcIixcbiAgICAgICAgXTtcbiAgICAgICAgdmFyIHVzZXJDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlbGVtZW50LmRhdGFzZXQgfHwge30pKSksIGluc3RhbmNlQ29uZmlnKTtcbiAgICAgICAgdmFyIGZvcm1hdHMgPSB7fTtcbiAgICAgICAgc2VsZi5jb25maWcucGFyc2VEYXRlID0gdXNlckNvbmZpZy5wYXJzZURhdGU7XG4gICAgICAgIHNlbGYuY29uZmlnLmZvcm1hdERhdGUgPSB1c2VyQ29uZmlnLmZvcm1hdERhdGU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJlbmFibGVcIiwge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fZW5hYmxlOyB9LFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5fZW5hYmxlID0gcGFyc2VEYXRlUnVsZXMoZGF0ZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJkaXNhYmxlXCIsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX2Rpc2FibGU7IH0sXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlcykge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLl9kaXNhYmxlID0gcGFyc2VEYXRlUnVsZXMoZGF0ZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciB0aW1lTW9kZSA9IHVzZXJDb25maWcubW9kZSA9PT0gXCJ0aW1lXCI7XG4gICAgICAgIGlmICghdXNlckNvbmZpZy5kYXRlRm9ybWF0ICYmICh1c2VyQ29uZmlnLmVuYWJsZVRpbWUgfHwgdGltZU1vZGUpKSB7XG4gICAgICAgICAgICB2Y
3XIgZGVmYXVsdERhdGVGb3JtYXQgPSBmbGF0cGlja3IuZGVmYXVsdENvbmZpZy5kYXRlRm9ybWF0IHx8IGRlZmF1bHRPcHRpb25zLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXRzLmRhdGVGb3JtYXQgPVxuICAgICAgICAgICAgICAgIHVzZXJDb25maWcubm9DYWxlbmRhciB8fCB0aW1lTW9kZVxuICAgICAgICAgICAgICAgICAgICA/IFwiSDppXCIgKyAodXNlckNvbmZpZy5lbmFibGVTZWNvbmRzID8gXCI6U1wiIDogXCJcIilcbiAgICAgICAgICAgICAgICAgICAgOiBkZWZhdWx0RGF0ZUZvcm1hdCArIFwiIEg6aVwiICsgKHVzZXJDb25maWcuZW5hYmxlU2Vjb25kcyA/IFwiOlNcIiA6IFwiXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1c2VyQ29uZmlnLmFsdElucHV0ICYmXG4gICAgICAgICAgICAodXNlckNvbmZpZy5lbmFibGVUaW1lIHx8IHRpbWVNb2RlKSAmJlxuICAgICAgICAgICAgIXVzZXJDb25maWcuYWx0Rm9ybWF0KSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdEFsdEZvcm1hdCA9IGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnLmFsdEZvcm1hdCB8fCBkZWZhdWx0T3B0aW9ucy5hbHRGb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXRzLmFsdEZvcm1hdCA9XG4gICAgICAgICAgICAgICAgdXNlckNvbmZpZy5ub0NhbGVuZGFyIHx8IHRpbWVNb2RlXG4gICAgICAgICAgICAgICAgICAgID8gXCJoOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTIEtcIiA6IFwiIEtcIilcbiAgICAgICAgICAgICAgICAgICAgOiBkZWZhdWx0QWx0Rm9ybWF0ICsgKFwiIGg6aVwiICsgKHVzZXJDb25maWcuZW5hYmxlU2Vjb25kcyA/IFwiOlNcIiA6IFwiXCIpICsgXCIgS1wiKTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwibWluRGF0ZVwiLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9taW5EYXRlOyB9LFxuICAgICAgICAgICAgc2V0OiBtaW5NYXhEYXRlU2V0dGVyKFwibWluXCIpLFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1heERhdGVcIiwge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fbWF4RGF0ZTsgfSxcbiAgICAgICAgICAgIHNldDogbWluTWF4RGF0ZVNldHRlcihcIm1heFwiKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBtaW5NYXhUaW1lU2V0dGVyID0gZnVuY3Rpb24gKHR5cGUpIHsgcmV0dXJuIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnW3R5cGUgPT09IFwibWluXCIgPyBcIl9taW5UaW1lXCIgOiBcIl9tYXhUaW
31lXCJdID0gc2VsZi5wYXJzZURhdGUodmFsLCBcIkg6aTpTXCIpO1xuICAgICAgICB9OyB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwibWluVGltZVwiLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9taW5UaW1lOyB9LFxuICAgICAgICAgICAgc2V0OiBtaW5NYXhUaW1lU2V0dGVyKFwibWluXCIpLFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1heFRpbWVcIiwge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fbWF4VGltZTsgfSxcbiAgICAgICAgICAgIHNldDogbWluTWF4VGltZVNldHRlcihcIm1heFwiKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh1c2VyQ29uZmlnLm1vZGUgPT09IFwidGltZVwiKSB7XG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5ub0NhbGVuZGFyID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLmVuYWJsZVRpbWUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2VsZi5jb25maWcsIGZvcm1hdHMsIHVzZXJDb25maWcpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvb2xPcHRzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgc2VsZi5jb25maWdbYm9vbE9wdHNbaV1dID1cbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tib29sT3B0c1tpXV0gPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdbYm9vbE9wdHNbaV1dID09PSBcInRydWVcIjtcbiAgICAgICAgSE9PS1MuZmlsdGVyKGZ1bmN0aW9uIChob29rKSB7IHJldHVybiBzZWxmLmNvbmZpZ1tob29rXSAhPT0gdW5kZWZpbmVkOyB9KS5mb3JFYWNoKGZ1bmN0aW9uIChob29rKSB7XG4gICAgICAgICAgICBzZWxmLmNvbmZpZ1tob29rXSA9IGFycmF5aWZ5KHNlbGYuY29uZmlnW2hvb2tdIHx8IFtdKS5tYXAoYmluZFRvSW5zdGFuY2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2VsZi5pc01vYmlsZSA9XG4gICAgICAgICAgICAhc2VsZi5jb25maWcuZGlzYWJsZU1vYmlsZSAmJlxuICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5pbmxpbmUgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiICYmXG4gICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmRpc2FibGUubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmVuYWJsZSAmJlxuICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy53ZWVrTnVtYmVycyAmJlxuICAgICAgICAgICAgICAgIC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmNvbmZpZy5wbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2Y
3XIgcGx1Z2luQ29uZiA9IHNlbGYuY29uZmlnLnBsdWdpbnNbaV0oc2VsZikgfHwge307XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGx1Z2luQ29uZikge1xuICAgICAgICAgICAgICAgIGlmIChIT09LUy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1trZXldID0gYXJyYXlpZnkocGx1Z2luQ29uZltrZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChiaW5kVG9JbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoc2VsZi5jb25maWdba2V5XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB1c2VyQ29uZmlnW2tleV0gPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2tleV0gPSBwbHVnaW5Db25mW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF1c2VyQ29uZmlnLmFsdElucHV0Q2xhc3MpIHtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLmFsdElucHV0Q2xhc3MgPVxuICAgICAgICAgICAgICAgIGdldElucHV0RWxlbSgpLmNsYXNzTmFtZSArIFwiIFwiICsgc2VsZi5jb25maWcuYWx0SW5wdXRDbGFzcztcbiAgICAgICAgfVxuICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblBhcnNlQ29uZmlnXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRJbnB1dEVsZW0oKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNvbmZpZy53cmFwXG4gICAgICAgICAgICA/IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIltkYXRhLWlucHV0XVwiKVxuICAgICAgICAgICAgOiBlbGVtZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXR1cExvY2FsZSgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWxmLmNvbmZpZy5sb2NhbGUgIT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBmbGF0cGlja3IubDEwbnNbc2VsZi5jb25maWcubG9jYWxlXSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJmbGF0cGlja3I6IGludmFsaWQgbG9jYWxlIFwiICsgc2VsZi5jb25maWcubG9jYWxlKSk7XG4gICAgICAgIHNlbGYubDEwbiA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBmbGF0cGlja3IubDEwbnMuZGVmYXVsdCksICh0eXBlb2Ygc2VsZi5jb25maWcubG9jYWxlID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICA/IHNlbGYuY29uZmlnLmxvY2FsZVxuICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5sb2NhbGUgIT09IFwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgPyBmbGF0cGlja3IubDEwbnNbc2VsZi5jb25maWcubG9jYWxlXVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKSk7XG4gICAgICAgIHRva2VuUmVnZXguRCA9IFwiKFwiICsgc2VsZi5sMTBuLndlZWtkYXlzLnNob3J0aGFuZC5qb2luKFwifFwiKSArIFwiKVwiO1xuICAgICAgICB0b2tlblJlZ2V4LmwgPSBcIihcIiArIHNlbGYubDEwbi53ZWVrZGF5cy5sb25naGFuZC5qb2luKFwifFwiKSArIFwiKVwiO1xuICAgICAgICB0b2tlblJlZ2V4Lk0gPSBcIihcIiArIHNlbGYubDEwbi5tb250aHMuc2hvcnRoYW5kLmpvaW4oXCJ8XCIpICsgXCIpXCI7XG4gICAgICAgIHRva2VuUmVnZXguRiA9IFwiKFwiICsgc2VsZi5sMTBuLm1vbnRocy5sb25naGFuZC5qb2luKFwifFwiKSArIFwiKVwiO1xuICAgICAgICB0b2tlblJlZ2V4LksgPSBcIihcIiArIHNlbGYubDEwbi5hbVBNWzBdICsgXCJ8XCIgKyBzZWxmLmwxMG4uYW1QTVsxXSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMF0udG9Mb3dlckNhc2UoKSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMV0udG9Mb3dlckNhc2UoKSArIFwiKVwiO1xuICAgICAgICB2Y
3XIgdXNlckNvbmZpZyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBpbnN0YW5jZUNvbmZpZyksIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZWxlbWVudC5kYXRhc2V0IHx8IHt9KSkpO1xuICAgICAgICBpZiAodXNlckNvbmZpZy50aW1lXzI0aHIgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcudGltZV8yNGhyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLnRpbWVfMjRociA9IHNlbGYubDEwbi50aW1lXzI0aHI7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5mb3JtYXREYXRlID0gY3JlYXRlRGF0ZUZvcm1hdHRlcihzZWxmKTtcbiAgICAgICAgc2VsZi5wYXJzZURhdGUgPSBjcmVhdGVEYXRlUGFyc2VyKHsgY29uZmlnOiBzZWxmLmNvbmZpZywgbDEwbjogc2VsZi5sMTBuIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3NpdGlvbkNhbGVuZGFyKGN1c3RvbVBvc2l0aW9uRWxlbWVudCkge1xuICAgICAgICBpZiAodHlwZW9mIHNlbGYuY29uZmlnLnBvc2l0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB2b2lkIHNlbGYuY29uZmlnLnBvc2l0aW9uKHNlbGYsIGN1c3RvbVBvc2l0aW9uRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdHJpZ2dlckV2ZW50KFwib25QcmVDYWxlbmRhclBvc2l0aW9uXCIpO1xuICAgICAgICB2YXIgcG9zaXRpb25FbGVtZW50ID0gY3VzdG9tUG9zaXRpb25FbGVtZW50IHx8IHNlbGYuX3Bvc2l0aW9uRWxlbWVudDtcbiAgICAgICAgdmFyIGNhbGVuZGFySGVpZ2h0ID0gQXJyYXkucHJvdG90eXBlLnJlZHVjZS5jYWxsKHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2hpbGRyZW4sIChmdW5jdGlvbiAoYWNjLCBjaGlsZCkgeyByZXR1cm4gYWNjICsgY2hpbGQub2Zmc2V0SGVpZ2h0OyB9KSwgMCksIGNhbGVuZGFyV2lkdGggPSBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLm9mZnNldFdpZHRoLCBjb25maWdQb3MgPSBzZWxmLmNvbmZpZy5wb3NpdGlvbi5zcGxpdChcIiBcIiksIGNvbmZpZ1Bvc1ZlcnRpY2FsID0gY29uZmlnUG9zWzBdLCBjb25maWdQb3NIb3Jpem9udGFsID0gY29uZmlnUG9zLmxlbmd0aCA+IDEgPyBjb25maWdQb3NbMV0gOiBudWxsLCBpbnB1dEJvdW5kcyA9IHBvc2l0aW9uRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgZGlzdGFuY2VGcm9tQm90dG9tID0gd2luZG93LmlubmVySGVpZ2h0IC0gaW5wdXRCb3VuZHMuYm90dG9tLCBzaG93T25Ub3AgPSBjb25maWdQb3NWZXJ0aWNhbCA9PT0gXCJhYm92ZVwiIHx8XG4gICAgICAgICAgICAoY29uZmlnUG9zVmVydGljYWwgIT09IFwiYmVsb3dcIiAmJlxuICAgICAgICAgICAgICAgIGRpc3RhbmNlRnJvbUJvdHRvbSA8IGNhbGVuZGFySGVpZ2h0ICYmXG4gICAgICAgICAgICAgICAgaW5wdXRCb3VuZHMudG9wID4gY2FsZW5kYXJIZWlnaHQpO1xuICAgICAgICB2Y
3XIgdG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0ICtcbiAgICAgICAgICAgIGlucHV0Qm91bmRzLnRvcCArXG4gICAgICAgICAgICAoIXNob3dPblRvcCA/IHBvc2l0aW9uRWxlbWVudC5vZmZzZXRIZWlnaHQgKyAyIDogLWNhbGVuZGFySGVpZ2h0IC0gMik7XG4gICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dUb3BcIiwgIXNob3dPblRvcCk7XG4gICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dCb3R0b21cIiwgc2hvd09uVG9wKTtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLmlubGluZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGxlZnQgPSB3aW5kb3cucGFnZVhPZmZzZXQgKyBpbnB1dEJvdW5kcy5sZWZ0O1xuICAgICAgICB2YXIgaXNDZW50ZXIgPSBmYWxzZTtcbiAgICAgICAgdmFyIGlzUmlnaHQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGNvbmZpZ1Bvc0hvcml6b250YWwgPT09IFwiY2VudGVyXCIpIHtcbiAgICAgICAgICAgIGxlZnQgLT0gKGNhbGVuZGFyV2lkdGggLSBpbnB1dEJvdW5kcy53aWR0aCkgLyAyO1xuICAgICAgICAgICAgaXNDZW50ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbmZpZ1Bvc0hvcml6b250YWwgPT09IFwicmlnaHRcIikge1xuICAgICAgICAgICAgbGVmdCAtPSBjYWxlbmRhcldpZHRoIC0gaW5wdXRCb3VuZHMud2lkdGg7XG4gICAgICAgICAgICBpc1JpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFycm93TGVmdFwiLCAhaXNDZW50ZXIgJiYgIWlzUmlnaHQpO1xuICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFycm93Q2VudGVyXCIsIGlzQ2VudGVyKTtcbiAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJhcnJvd1JpZ2h0XCIsIGlzUmlnaHQpO1xuICAgICAgICB2Y
3XIgcmlnaHQgPSB3aW5kb3cuZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCAtXG4gICAgICAgICAgICAod2luZG93LnBhZ2VYT2Zmc2V0ICsgaW5wdXRCb3VuZHMucmlnaHQpO1xuICAgICAgICB2YXIgcmlnaHRNb3N0ID0gbGVmdCArIGNhbGVuZGFyV2lkdGggPiB3aW5kb3cuZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aDtcbiAgICAgICAgdmFyIGNlbnRlck1vc3QgPSByaWdodCArIGNhbGVuZGFyV2lkdGggPiB3aW5kb3cuZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aDtcbiAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJyaWdodE1vc3RcIiwgcmlnaHRNb3N0KTtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLnN0YXRpYylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICAgIGlmICghcmlnaHRNb3N0KSB7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFjZW50ZXJNb3N0KSB7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLmxlZnQgPSBcImF1dG9cIjtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUucmlnaHQgPSByaWdodCArIFwicHhcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBkb2MgPSBnZXREb2N1bWVudFN0eWxlU2hlZXQoKTtcbiAgICAgICAgICAgIGlmIChkb2MgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2Y
3XIgYm9keVdpZHRoID0gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICB2YXIgY2VudGVyTGVmdCA9IE1hdGgubWF4KDAsIGJvZHlXaWR0aCAvIDIgLSBjYWxlbmRhcldpZHRoIC8gMik7XG4gICAgICAgICAgICB2YXIgY2VudGVyQmVmb3JlID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyLmNlbnRlck1vc3Q6YmVmb3JlXCI7XG4gICAgICAgICAgICB2YXIgY2VudGVyQWZ0ZXIgPSBcIi5mbGF0cGlja3ItY2FsZW5kYXIuY2VudGVyTW9zdDphZnRlclwiO1xuICAgICAgICAgICAgdmFyIGNlbnRlckluZGV4ID0gZG9jLmNzc1J1bGVzLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBjZW50ZXJTdHlsZSA9IFwie2xlZnQ6XCIgKyBpbnB1dEJvdW5kcy5sZWZ0ICsgXCJweDtyaWdodDphdXRvO31cIjtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwicmlnaHRNb3N0XCIsIGZhbHNlKTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiY2VudGVyTW9zdFwiLCB0cnVlKTtcbiAgICAgICAgICAgIGRvYy5pbnNlcnRSdWxlKGNlbnRlckJlZm9yZSArIFwiLFwiICsgY2VudGVyQWZ0ZXIgKyBjZW50ZXJTdHlsZSwgY2VudGVySW5kZXgpO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gY2VudGVyTGVmdCArIFwicHhcIjtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXREb2N1bWVudFN0eWxlU2hlZXQoKSB7XG4gICAgICAgIHZhciBlZGl0YWJsZVNoZWV0ID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHNoZWV0ID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgICAgICAgICBpZiAoIXNoZWV0LmNzc1J1bGVzKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzaGVldC5jc3NSdWxlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRhYmxlU2hlZXQgPSBzaGVldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlZGl0YWJsZVNoZWV0ICE9IG51bGwgPyBlZGl0YWJsZVNoZWV0IDogY3JlYXRlU3R5bGVTaGVldCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVTdHlsZVNoZWV0KCkge1xuICAgICAgICB2Y
3XIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgICAgICByZXR1cm4gc3R5bGUuc2hlZXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZHJhdygpIHtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgfHwgc2VsZi5pc01vYmlsZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgICAgIGJ1aWxkRGF5cygpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmb2N1c0FuZENsb3NlKCkge1xuICAgICAgICBzZWxmLl9pbnB1dC5mb2N1cygpO1xuICAgICAgICBpZiAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIk1TSUVcIikgIT09IC0xIHx8XG4gICAgICAgICAgICBuYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHNlbGYuY2xvc2UsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VsZi5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNlbGVjdERhdGUoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHZhciBpc1NlbGVjdGFibGUgPSBmdW5jdGlvbiAoZGF5KSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5LmNsYXNzTGlzdCAmJlxuICAgICAgICAgICAgICAgIGRheS5jbGFzc0xpc3QuY29udGFpbnMoXCJmbGF0cGlja3ItZGF5XCIpICYmXG4gICAgICAgICAgICAgICAgIWRheS5jbGFzc0xpc3QuY29udGFpbnMoXCJmbGF0cGlja3ItZGlzYWJsZWRcIikgJiZcbiAgICAgICAgICAgICAgICAhZGF5LmNsYXNzTGlzdC5jb250YWlucyhcIm5vdEFsbG93ZWRcIik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0ID0gZmluZFBhcmVudChnZXRFdmVudFRhcmdldChlKSwgaXNTZWxlY3RhYmxlKTtcbiAgICAgICAgaWYgKHQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHRhcmdldCA9IHQ7XG4gICAgICAgIHZhciBzZWxlY3RlZERhdGUgPSAoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSBuZXcgRGF0ZSh0YXJnZXQuZGF0ZU9iai5nZXRUaW1lKCkpKTtcbiAgICAgICAgdmFyIHNob3VsZENoYW5nZU1vbnRoID0gKHNlbGVjdGVkRGF0ZS5nZXRNb250aCgpIDwgc2VsZi5jdXJyZW50TW9udGggfHxcbiAgICAgICAgICAgIHNlbGVjdGVkRGF0ZS5nZXRNb250aCgpID5cbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCArIHNlbGYuY29uZmlnLnNob3dNb250aHMgLSAxKSAmJlxuICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiO1xuICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZUVsZW0gPSB0YXJnZXQ7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiKVxuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gW3NlbGVjdGVkRGF0ZV07XG4gICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwibXVsdGlwbGVcIikge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSBpc0RhdGVTZWxlY3RlZChzZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXgpXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnNwbGljZShwYXJzZUludChzZWxlY3RlZEluZGV4KSwgMSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnB1c2goc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jbGVhcihmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSBzZWxlY3RlZERhdGU7XG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMucHVzaChzZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgaWYgKGNvbXBhcmVEYXRlcyhzZWxlY3RlZERhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1swXSwgdHJ1ZSkgIT09IDApXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuZ2V0VGltZSgpIC0gYi5nZXRUaW1lKCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldEhvdXJzRnJvbUlucHV0cygpO1xuICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlTW9udGgpIHtcbiAgICAgICAgICAgIHZhciBpc05ld1llYXIgPSBzZWxmLmN1cnJlbnRZZWFyICE9PSBzZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPSBzZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICBpZiAoaXNOZXdZZWFyKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25ZZWFyQ2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uTW9udGhDaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgICAgICBidWlsZERheXMoKTtcbiAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgaWYgKCFzaG91bGRDaGFuZ2VNb250aCAmJlxuICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiICYmXG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5zaG93TW9udGhzID09PSAxKVxuICAgICAgICAgICAgZm9jdXNPbkRheUVsZW0odGFyZ2V0KTtcbiAgICAgICAgZWxzZSBpZiAoc2VsZi5zZWxlY3RlZERhdGVFbGVtICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgI
3HNlbGYuaG91ckVsZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVFbGVtICYmIHNlbGYuc2VsZWN0ZWREYXRlRWxlbS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmhvdXJFbGVtZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ICE9PSB1bmRlZmluZWQgJiYgc2VsZi5ob3VyRWxlbWVudC5mb2N1cygpO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgICAgdmFyIHNpbmdsZSA9IHNlbGYuY29uZmlnLm1vZGUgPT09IFwic2luZ2xlXCIgJiYgIXNlbGYuY29uZmlnLmVuYWJsZVRpbWU7XG4gICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIgJiZcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmVuYWJsZVRpbWU7XG4gICAgICAgICAgICBpZiAoc2luZ2xlIHx8IHJhbmdlKSB7XG4gICAgICAgICAgICAgICAgZm9jdXNBbmRDbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyaWdnZXJDaGFuZ2UoKTtcbiAgICB9XG4gICAgdmFyIENBTExCQUNLUyA9IHtcbiAgICAgICAgbG9jYWxlOiBbc2V0dXBMb2NhbGUsIHVwZGF0ZVdlZWtkYXlzXSxcbiAgICAgICAgc2hvd01vbnRoczogW2J1aWxkTW9udGhzLCBzZXRDYWxlbmRhcldpZHRoLCBidWlsZFdlZWtkYXlzXSxcbiAgICAgICAgbWluRGF0ZTogW2p1bXBUb0RhdGVdLFxuICAgICAgICBtYXhEYXRlOiBbanVtcFRvRGF0ZV0sXG4gICAgICAgIHBvc2l0aW9uRWxlbWVudDogW3VwZGF0ZVBvc2l0aW9uRWxlbWVudF0sXG4gICAgICAgIGNsaWNrT3BlbnM6IFtcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuY2xpY2tPcGVucyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBiaW5kKHNlbGYuX2lucHV0LCBcImZvY3VzXCIsIHNlbGYub3Blbik7XG4gICAgICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5faW5wdXQsIFwiY2xpY2tcIiwgc2VsZi5vcGVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBzZWxmLm9wZW4pO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgc2VsZi5vcGVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgIH07XG4gICAgZnVuY3Rpb24gc2V0KG9wdGlvbiwgdmFsdWUpIHtcbiAgICAgICAgaWYgKG9wdGlvbiAhPT0gbnVsbCAmJiB0eXBlb2Ygb3B0aW9uID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNlbGYuY29uZmlnLCBvcHRpb24pO1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9wdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChDQUxMQkFDS1Nba2V5XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBDQUxMQkFDS1Nba2V5XS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4KCk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VsZi5jb25maWdbb3B0aW9uXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKENBTExCQUNLU1tvcHRpb25dICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgQ0FMTEJBQ0tTW29wdGlvbl0uZm9yRWFjaChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCgpOyB9KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKEhPT0tTLmluZGV4T2Yob3B0aW9uKSA+IC0xKVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW29wdGlvbl0gPSBhcnJheWlmeSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgdXBkYXRlVmFsdWUodHJ1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFNlbGVjdGVkRGF0ZShpbnB1dERhdGUsIGZvcm1hdCkge1xuICAgICAgICB2Y
3XIgZGF0ZXMgPSBbXTtcbiAgICAgICAgaWYgKGlucHV0RGF0ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgZGF0ZXMgPSBpbnB1dERhdGUubWFwKGZ1bmN0aW9uIChkKSB7IHJldHVybiBzZWxmLnBhcnNlRGF0ZShkLCBmb3JtYXQpOyB9KTtcbiAgICAgICAgZWxzZSBpZiAoaW5wdXREYXRlIGluc3RhbmNlb2YgRGF0ZSB8fCB0eXBlb2YgaW5wdXREYXRlID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgZGF0ZXMgPSBbc2VsZi5wYXJzZURhdGUoaW5wdXREYXRlLCBmb3JtYXQpXTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGlucHV0RGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgc3dpdGNoIChzZWxmLmNvbmZpZy5tb2RlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNpbmdsZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJ0aW1lXCI6XG4gICAgICAgICAgICAgICAgICAgIGRhdGVzID0gW3NlbGYucGFyc2VEYXRlKGlucHV0RGF0ZSwgZm9ybWF0KV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgICAgICAgICBkYXRlcyA9IGlucHV0RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KHNlbGYuY29uZmlnLmNvbmp1bmN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gc2VsZi5wYXJzZURhdGUoZGF0ZSwgZm9ybWF0KTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyYW5nZVwiOlxuICAgICAgICAgICAgICAgICAgICBkYXRlcyA9IGlucHV0RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KHNlbGYubDEwbi5yYW5nZVNlcGFyYXRvcilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHNlbGYucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5lcnJvckhhbmRsZXIobmV3IEVycm9yKFwiSW52YWxpZCBkYXRlIHN1cHBsaWVkOiBcIiArIEpTT04uc3RyaW5naWZ5KGlucHV0RGF0ZSkpKTtcbiAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gKHNlbGYuY29uZmlnLmFsbG93SW52YWxpZFByZWxvYWRcbiAgICAgICAgICAgID8gZGF0ZXNcbiAgICAgICAgICAgIDogZGF0ZXMuZmlsdGVyKGZ1bmN0aW9uIChkKSB7IHJldHVybiBkIGluc3RhbmNlb2YgRGF0ZSAmJiBpc0VuYWJsZWQoZCwgZmFsc2UpOyB9KSk7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5nZXRUaW1lKCkgLSBiLmdldFRpbWUoKTsgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldERhdGUoZGF0ZSwgdHJpZ2dlckNoYW5nZSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlID09PSB2b2lkIDApIHsgdHJpZ2dlckNoYW5nZSA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IHZvaWQgMCkgeyBmb3JtYXQgPSBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0OyB9XG4gICAgICAgIGlmICgoZGF0ZSAhPT0gMCAmJiAhZGF0ZSkgfHwgKGRhdGUgaW5zdGFuY2VvZiBBcnJheSAmJiBkYXRlLmxlbmd0aCA9PT0gMCkpXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5jbGVhcih0cmlnZ2VyQ2hhbmdlKTtcbiAgICAgICAgc2V0U2VsZWN0ZWREYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID1cbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlc1tzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgIGp1bXBUb0RhdGUodW5kZWZpbmVkLCB0cmlnZ2VyQ2hhbmdlKTtcbiAgICAgICAgc2V0SG91cnNGcm9tRGF0ZSgpO1xuICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2VsZi5jbGVhcihmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlVmFsdWUodHJpZ2dlckNoYW5nZSk7XG4gICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlKVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlRGF0ZVJ1bGVzKGFycikge1xuICAgICAgICByZXR1cm4gYXJyXG4gICAgICAgICAgICAuc2xpY2UoKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHJ1bGUgPT09IFwibnVtYmVyXCIgfHxcbiAgICAgICAgICAgICAgICBydWxlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlRGF0ZShydWxlLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocnVsZSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBydWxlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgcnVsZS5mcm9tICYmXG4gICAgICAgICAgICAgICAgcnVsZS50bylcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBmcm9tOiBzZWxmLnBhcnNlRGF0ZShydWxlLmZyb20sIHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIHRvOiBzZWxmLnBhcnNlRGF0ZShydWxlLnRvLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcnVsZTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHg7IH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXR1cERhdGVzKCkge1xuICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMgPSBbXTtcbiAgICAgICAgc2VsZi5ub3cgPSBzZWxmLnBhcnNlRGF0ZShzZWxmLmNvbmZpZy5ub3cpIHx8IG5ldyBEYXRlKCk7XG4gICAgICAgI
3HZhciBwcmVsb2FkZWREYXRlID0gc2VsZi5jb25maWcuZGVmYXVsdERhdGUgfHxcbiAgICAgICAgICAgICgoc2VsZi5pbnB1dC5ub2RlTmFtZSA9PT0gXCJJTlBVVFwiIHx8XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5ub2RlTmFtZSA9PT0gXCJURVhUQVJFQVwiKSAmJlxuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQucGxhY2Vob2xkZXIgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnZhbHVlID09PSBzZWxmLmlucHV0LnBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgOiBzZWxmLmlucHV0LnZhbHVlKTtcbiAgICAgICAgaWYgKHByZWxvYWRlZERhdGUpXG4gICAgICAgICAgICBzZXRTZWxlY3RlZERhdGUocHJlbG9hZGVkRGF0ZSwgc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgIHNlbGYuX2luaXRpYWxEYXRlID1cbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBzZWxmLnNlbGVjdGVkRGF0ZXNbMF1cbiAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluRGF0ZS5nZXRUaW1lKCkgPiBzZWxmLm5vdy5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5taW5EYXRlXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWF4RGF0ZS5nZXRUaW1lKCkgPCBzZWxmLm5vdy5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWF4RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLm5vdztcbiAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IHNlbGYuX2luaXRpYWxEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gc2VsZi5faW5pdGlhbERhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSBzZWxmLnNlbGVjdGVkRGF0ZXNbMF07XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5UaW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5UaW1lID0gc2VsZi5wYXJzZURhdGUoc2VsZi5jb25maWcubWluVGltZSwgXCJIOmlcIik7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tYXhUaW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5tYXhUaW1lID0gc2VsZi5wYXJzZURhdGUoc2VsZi5jb25maWcubWF4VGltZSwgXCJIOmlcIik7XG4gICAgICAgIHNlbGYubWluRGF0ZUhhc1RpbWUgPVxuICAgICAgICAgICAgISFzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0SG91cnMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluRGF0ZS5nZXRNaW51dGVzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0U2Vjb25kcygpID4gMCk7XG4gICAgICAgIHNlbGYubWF4RGF0ZUhhc1RpbWUgPVxuICAgICAgICAgICAgISFzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1heERhdGUuZ2V0SG91cnMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNaW51dGVzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0U2Vjb25kcygpID4gMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldHVwSW5wdXRzKCkge1xuICAgICAgICBzZWxmLmlucHV0ID0gZ2V0SW5wdXRFbGVtKCk7XG4gICAgICAgIGlmICghc2VsZi5pbnB1dCkge1xuICAgICAgICAgICAgc2VsZi5jb25maWcuZXJyb3JIYW5kbGVyKG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgZWxlbWVudCBzcGVjaWZpZWRcIikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuaW5wdXQuX3R5cGUgPSBzZWxmLmlucHV0LnR5cGU7XG4gICAgICAgIHNlbGYuaW5wdXQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICBzZWxmLmlucHV0LmNsYXNzTGlzdC5hZGQoXCJmbGF0cGlja3ItaW5wdXRcIik7XG4gICAgICAgIHNlbGYuX2lucHV0ID0gc2VsZi5pbnB1dDtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLmFsdElucHV0KSB7XG4gICAgICAgICAgICBzZWxmLmFsdElucHV0ID0gY3JlYXRlRWxlbWVudChzZWxmLmlucHV0Lm5vZGVOYW1lLCBzZWxmLmNvbmZpZy5hbHRJbnB1dENsYXNzKTtcbiAgICAgICAgICAgIHNlbGYuX2lucHV0ID0gc2VsZi5hbHRJbnB1dDtcbiAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQucGxhY2Vob2xkZXIgPSBzZWxmLmlucHV0LnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5kaXNhYmxlZCA9IHNlbGYuaW5wdXQuZGlzYWJsZWQ7XG4gICAgICAgICAgICBzZWxmLmFsdElucHV0LnJlcXVpcmVkID0gc2VsZi5pbnB1dC5yZXF1aXJlZDtcbiAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudGFiSW5kZXggPSBzZWxmLmlucHV0LnRhYkluZGV4O1xuICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICBzZWxmLmlucHV0LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgICBpZiAoIXNlbGYuY29uZmlnLnN0YXRpYyAmJiBzZWxmLmlucHV0LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmFsdElucHV0LCBzZWxmLmlucHV0Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlbGYuY29uZmlnLmFsbG93SW5wdXQpXG4gICAgICAgICAgICBzZWxmLl9pbnB1dC5zZXRBdHRyaWJ1dGUoXCJyZWFkb25seVwiLCBcInJlYWRvbmx5XCIpO1xuICAgICAgICB1cGRhdGVQb3NpdGlvbkVsZW1lbnQoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlUG9zaXRpb25
3FbGVtZW50KCkge1xuICAgICAgICBzZWxmLl9wb3NpdGlvbkVsZW1lbnQgPSBzZWxmLmNvbmZpZy5wb3NpdGlvbkVsZW1lbnQgfHwgc2VsZi5faW5wdXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldHVwTW9iaWxlKCkge1xuICAgICAgICB2YXIgaW5wdXRUeXBlID0gc2VsZi5jb25maWcuZW5hYmxlVGltZVxuICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5ub0NhbGVuZGFyXG4gICAgICAgICAgICAgICAgPyBcInRpbWVcIlxuICAgICAgICAgICAgICAgIDogXCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICA6IFwiZGF0ZVwiO1xuICAgICAgICBzZWxmLm1vYmlsZUlucHV0ID0gY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHNlbGYuaW5wdXQuY2xhc3NOYW1lICsgXCIgZmxhdHBpY2tyLW1vYmlsZVwiKTtcbiAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC50YWJJbmRleCA9IDE7XG4gICAgICAgIHNlbGYubW9iaWxlSW5wdXQudHlwZSA9IGlucHV0VHlwZTtcbiAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5kaXNhYmxlZCA9IHNlbGYuaW5wdXQuZGlzYWJsZWQ7XG4gICAgICAgIHNlbGYubW9iaWxlSW5wdXQucmVxdWlyZWQgPSBzZWxmLmlucHV0LnJlcXVpcmVkO1xuICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnBsYWNlaG9sZGVyID0gc2VsZi5pbnB1dC5wbGFjZWhvbGRlcjtcbiAgICAgICAgc2VsZi5tb2JpbGVGb3JtYXRTdHIgPVxuICAgICAgICAgICAgaW5wdXRUeXBlID09PSBcImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICA/IFwiWS1tLWRcXFxcVEg6aTpTXCJcbiAgICAgICAgICAgICAgICA6IGlucHV0VHlwZSA9PT0gXCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPyBcIlktbS1kXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIkg6aTpTXCI7XG4gICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5kZWZhdWx0VmFsdWUgPSBzZWxmLm1vYmlsZUlucHV0LnZhbHVlID0gc2VsZi5mb3JtYXREYXRlKHNlbGYuc2VsZWN0ZWREYXRlc1swXSwgc2VsZi5tb2JpbGVGb3JtYXRTdHIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlKVxuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5taW4gPSBzZWxmLmZvcm1hdERhdGUoc2VsZi5jb25maWcubWluRGF0ZSwgXCJZLW0tZFwiKTtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1heERhdGUpXG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0Lm1heCA9IHNlbGYuZm9ybWF0RGF0ZShzZWxmLmNvbmZpZy5tYXhEYXRlLCBcIlktbS1kXCIpO1xuICAgICAgICBpZiAoc2VsZi5pbnB1dC5nZXRBdHRyaWJ1dGUoXCJzdGVwXCIpKVxuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5zdGVwID0gU3RyaW5nKHNlbGYuaW5wdXQuZ2V0QXR0cmlidXRlKFwic3RlcFwiKSk7XG4gICAgICAgIHNlbGYuaW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gICAgICAgIGlmIChzZWxmLmFsdElucHV0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZWxmLmFsdElucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNlbGYuaW5wdXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNlbGYubW9iaWxlSW5wdXQsIHNlbGYuaW5wdXQubmV4dFNpYmxpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkgeyB9XG4gICAgICAgIGJpbmQoc2VsZi5tb2JpbGVJbnB1dCwgXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShnZXRFdmVudFRhcmdldChlKS52YWx1ZSwgZmFsc2UsIHNlbGYubW9iaWxlRm9ybWF0U3RyKTtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2hhbmdlXCIpO1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DbG9zZVwiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvZ2dsZShlKSB7XG4gICAgICAgIGlmIChzZWxmLmlzT3BlbiA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNsb3NlKCk7XG4gICAgICAgIHNlbGYub3BlbihlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJpZ2dlckV2ZW50KGV2ZW50LCBkYXRhKSB7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2Y
3XIgaG9va3MgPSBzZWxmLmNvbmZpZ1tldmVudF07XG4gICAgICAgIGlmIChob29rcyAhPT0gdW5kZWZpbmVkICYmIGhvb2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBob29rc1tpXSAmJiBpIDwgaG9va3MubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgaG9va3NbaV0oc2VsZi5zZWxlY3RlZERhdGVzLCBzZWxmLmlucHV0LnZhbHVlLCBzZWxmLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQgPT09IFwib25DaGFuZ2VcIikge1xuICAgICAgICAgICAgc2VsZi5pbnB1dC5kaXNwYXRjaEV2ZW50KGNyZWF0ZUV2ZW50KFwiY2hhbmdlXCIpKTtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQuZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudChcImlucHV0XCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVFdmVudChuYW1lKSB7XG4gICAgICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgICAgICAgZS5pbml0RXZlbnQobmFtZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0RhdGVTZWxlY3RlZChkYXRlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWREYXRlID0gc2VsZi5zZWxlY3RlZERhdGVzW2ldO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkRGF0ZSBpbnN0YW5jZW9mIERhdGUgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoc2VsZWN0ZWREYXRlLCBkYXRlKSA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIiArIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0RhdGVJblJhbmdlKGRhdGUpIHtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIiB8fCBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoIDwgMilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIChjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdKSA+PSAwICYmXG4gICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzFdKSA8PSAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpIHtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgfHwgc2VsZi5pc01vYmlsZSB8fCAhc2VsZi5tb250aE5hdilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc2VsZi55ZWFyRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoeWVhckVsZW1lbnQsIGkpIHtcbiAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoc2VsZi5jdXJyZW50WWVhciwgc2VsZi5jdXJyZW50TW9udGgsIDEpO1xuICAgICAgICAgICAgZC5zZXRNb250aChzZWxmLmN1cnJlbnRNb250aCArIGkpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxIHx8XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9udGhTZWxlY3RvclR5cGUgPT09IFwic3RhdGljXCIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoRWxlbWVudHNbaV0udGV4dENvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICBtb250aFRvU3RyKGQuZ2V0TW9udGgoKSwgc2VsZi5jb25maWcuc2hvcnRoYW5kQ3VycmVudE1vbnRoLCBzZWxmLmwxMG4pICsgXCIgXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLnZhbHVlID0gZC5nZXRNb250aCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5ZWFyRWxlbWVudC52YWx1ZSA9IGQuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2VsZi5faGlkZVByZXZNb250aEFycm93ID1cbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmN1cnJlbnRNb250aCA8PSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRZZWFyIDwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgc2VsZi5faGlkZU5leHRNb250aEFycm93ID1cbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmN1cnJlbnRNb250aCArIDEgPiBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRZZWFyID4gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGF0ZVN0cihzcGVjaWZpY0Zvcm1hdCkge1xuICAgICAgICB2Y
3XIgZm9ybWF0ID0gc3BlY2lmaWNGb3JtYXQgfHxcbiAgICAgICAgICAgIChzZWxmLmNvbmZpZy5hbHRJbnB1dCA/IHNlbGYuY29uZmlnLmFsdEZvcm1hdCA6IHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpO1xuICAgICAgICByZXR1cm4gc2VsZi5zZWxlY3RlZERhdGVzXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChkT2JqKSB7IHJldHVybiBzZWxmLmZvcm1hdERhdGUoZE9iaiwgZm9ybWF0KTsgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGQsIGksIGFycikge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIiB8fFxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVuYWJsZVRpbWUgfHxcbiAgICAgICAgICAgICAgICBhcnIuaW5kZXhPZihkKSA9PT0gaTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIlxuICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5jb25qdW5jdGlvblxuICAgICAgICAgICAgOiBzZWxmLmwxMG4ucmFuZ2VTZXBhcmF0b3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVWYWx1ZSh0cmlnZ2VyQ2hhbmdlKSB7XG4gICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlID09PSB2b2lkIDApIHsgdHJpZ2dlckNoYW5nZSA9IHRydWU7IH1cbiAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQgIT09IHVuZGVmaW5lZCAmJiBzZWxmLm1vYmlsZUZvcm1hdFN0cikge1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC52YWx1ZSA9XG4gICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuZm9ybWF0RGF0ZShzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiwgc2VsZi5tb2JpbGVGb3JtYXRTdHIpXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmlucHV0LnZhbHVlID0gZ2V0RGF0ZVN0cihzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC52YWx1ZSA9IGdldERhdGVTdHIoc2VsZi5jb25maWcuYWx0Rm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSAhPT0gZmFsc2UpXG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblZhbHVlVXBkYXRlXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvbk1vbnRoTmF2Q2xpY2soZSkge1xuICAgICAgICB2Y
3XIgZXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChlKTtcbiAgICAgICAgdmFyIGlzUHJldk1vbnRoID0gc2VsZi5wcmV2TW9udGhOYXYuY29udGFpbnMoZXZlbnRUYXJnZXQpO1xuICAgICAgICB2YXIgaXNOZXh0TW9udGggPSBzZWxmLm5leHRNb250aE5hdi5jb250YWlucyhldmVudFRhcmdldCk7XG4gICAgICAgIGlmIChpc1ByZXZNb250aCB8fCBpc05leHRNb250aCkge1xuICAgICAgICAgICAgY2hhbmdlTW9udGgoaXNQcmV2TW9udGggPyAtMSA6IDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlbGYueWVhckVsZW1lbnRzLmluZGV4T2YoZXZlbnRUYXJnZXQpID49IDApIHtcbiAgICAgICAgICAgIGV2ZW50VGFyZ2V0LnNlbGVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93VXBcIikpIHtcbiAgICAgICAgICAgIHNlbGYuY2hhbmdlWWVhcihzZWxmLmN1cnJlbnRZZWFyICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXZlbnRUYXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXJyb3dEb3duXCIpKSB7XG4gICAgICAgICAgICBzZWxmLmNoYW5nZVllYXIoc2VsZi5jdXJyZW50WWVhciAtIDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRpbWVXcmFwcGVyKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB2YXIgaXNLZXlEb3duID0gZS50eXBlID09PSBcImtleWRvd25cIiwgZXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChlKSwgaW5wdXQgPSBldmVudFRhcmdldDtcbiAgICAgICAgaWYgKHNlbGYuYW1QTSAhPT0gdW5kZWZpbmVkICYmIGV2ZW50VGFyZ2V0ID09PSBzZWxmLmFtUE0pIHtcbiAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9XG4gICAgICAgICAgICAgICAgc2VsZi5sMTBuLmFtUE1baW50KHNlbGYuYW1QTS50ZXh0Q29udGVudCA9PT0gc2VsZi5sMTBuLmFtUE1bMF0pXTtcbiAgICAgICAgfVxuICAgICAgICB2Y
3XIgbWluID0gcGFyc2VGbG9hdChpbnB1dC5nZXRBdHRyaWJ1dGUoXCJtaW5cIikpLCBtYXggPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcIm1heFwiKSksIHN0ZXAgPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcInN0ZXBcIikpLCBjdXJWYWx1ZSA9IHBhcnNlSW50KGlucHV0LnZhbHVlLCAxMCksIGRlbHRhID0gZS5kZWx0YSB8fFxuICAgICAgICAgICAgKGlzS2V5RG93biA/IChlLndoaWNoID09PSAzOCA/IDEgOiAtMSkgOiAwKTtcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gY3VyVmFsdWUgKyBzdGVwICogZGVsdGE7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQudmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiYgaW5wdXQudmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB2YXIgaXNIb3VyRWxlbSA9IGlucHV0ID09PSBzZWxmLmhvdXJFbGVtZW50LCBpc01pbnV0ZUVsZW0gPSBpbnB1dCA9PT0gc2VsZi5taW51dGVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlIDwgbWluKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICBtYXggK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaW50KCFpc0hvdXJFbGVtKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW50KGlzSG91ckVsZW0pICYmIGludCghc2VsZi5hbVBNKSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTWludXRlRWxlbSlcbiAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50TnVtSW5wdXQodW5kZWZpbmVkLCAtMSwgc2VsZi5ob3VyRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChuZXdWYWx1ZSA+IG1heCkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgaW5wdXQgPT09IHNlbGYuaG91ckVsZW1lbnQgPyBuZXdWYWx1ZSAtIG1heCAtIGludCghc2VsZi5hbVBNKSA6IG1pbjtcbiAgICAgICAgICAgICAgICBpZiAoaXNNaW51dGVFbGVtKVxuICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnROdW1JbnB1dCh1bmRlZmluZWQsIDEsIHNlbGYuaG91ckVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuYW1QTSAmJlxuICAgICAgICAgICAgICAgIGlzSG91ckVsZW0gJiZcbiAgICAgICAgICAgICAgICAoc3RlcCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/IG5ld1ZhbHVlICsgY3VyVmFsdWUgPT09IDIzXG4gICAgICAgICAgICAgICAgICAgIDogTWF0aC5hYnMobmV3VmFsdWUgLSBjdXJWYWx1ZSkgPiBzdGVwKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubDEwbi5hbVBNW2ludChzZWxmLmFtUE0udGV4dENvbnRlbnQgPT09IHNlbGYubDEwbi5hbVBNWzBdKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHBhZChuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5pdCgpO1xuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2ZsYXRwaWNrcihub2RlTGlzdCwgY29uZmlnKSB7XG4gICAgdmFyIG5vZGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlXG4gICAgICAgIC5jYWxsKG5vZGVMaXN0KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7IH0pO1xuICAgIHZhciBpbnN0YW5jZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWZwLW9taXRcIikgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAobm9kZS5fZmxhdHBpY2tyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBub2RlLl9mbGF0cGlja3IuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIG5vZGUuX2ZsYXRwaWNrciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUuX2ZsYXRwaWNrciA9IEZsYXRwaWNrckluc3RhbmNlKG5vZGUsIGNvbmZpZyB8fCB7fSk7XG4gICAgICAgICAgICBpbnN0YW5jZXMucHVzaChub2RlLl9mbGF0cGlja3IpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZXMubGVuZ3RoID09PSAxID8gaW5zdGFuY2VzWzBdIDogaW5zdGFuY2VzO1xufVxuaWYgKHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgI
3HR5cGVvZiBIVE1MQ29sbGVjdGlvbiAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBOb2RlTGlzdCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIEhUTUxDb2xsZWN0aW9uLnByb3RvdHlwZS5mbGF0cGlja3IgPSBOb2RlTGlzdC5wcm90b3R5cGUuZmxhdHBpY2tyID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcih0aGlzLCBjb25maWcpO1xuICAgIH07XG4gICAgSFRNTEVsZW1lbnQucHJvdG90eXBlLmZsYXRwaWNrciA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIF9mbGF0cGlja3IoW3RoaXNdLCBjb25maWcpO1xuICAgIH07XG59XG52YXIgZmxhdHBpY2tyID0gZnVuY3Rpb24gKHNlbGVjdG9yLCBjb25maWcpIHtcbiAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSwgY29uZmlnKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2VsZWN0b3IgaW5zdGFuY2VvZiBOb2RlKSB7XG4gICAgICAgIHJldHVybiBfZmxhdHBpY2tyKFtzZWxlY3Rvcl0sIGNvbmZpZyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcihzZWxlY3RvciwgY29uZmlnKTtcbiAgICB9XG59O1xuZmxhdHBpY2tyLmRlZmF1bHRDb25maWcgPSB7fTtcbmZsYXRwaWNrci5sMTBucyA9IHtcbiAgICBlbjogX19hc3NpZ24oe30sIEVuZ2xpc2gpLFxuICAgIGRlZmF1bHQ6IF9fYXNzaWduKHt9LCBFbmdsaXNoKSxcbn07XG5mbGF0cGlja3IubG9jYWxpemUgPSBmdW5jdGlvbiAobDEwbikge1xuICAgIGZsYXRwaWNrci5sMTBucy5kZWZhdWx0ID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGZsYXRwaWNrci5sMTBucy5kZWZhdWx0KSwgbDEwbik7XG59O1xuZmxhdHBpY2tyLnNldERlZmF1bHRzID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnKSwgY29uZmlnKTtcbn07XG5mbGF0cGlja3IucGFyc2VEYXRlID0gY3JlYXRlRGF0ZVBhcnNlcih7fSk7XG5mbGF0cGlja3IuZm9ybWF0RGF0ZSA9IGNyZWF0ZURhdGVGb3JtYXR0ZXIoe30pO1xuZmxhdHBpY2tyLmNvbXBhcmVEYXRlcyA9IGNvbXBhcmVEYXRlcztcbmlmICh0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBqUXVlcnkuZm4gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBqUXVlcnkuZm4uZmxhdHBpY2tyID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcih0aGlzLCBjb25maWcpO1xuICAgIH07XG59XG5EYXRlLnByb3RvdHlwZS5mcF9pbmNyID0gZnVuY3Rpb24gKGRheXMpIHtcbiAgICByZXR1cm4gbmV3IERhdGUodGhpcy5nZXRGdWxsWWVhcigpLCB0aGlzLmdldE1vbnRoKCksIHRoaXMuZ2V0RGF0ZSgpICsgKHR5cGVvZiBkYXlzID09PSBcInN0cmluZ1wiID8gcGFyc2VJbnQoZGF5cywgMTApIDogZGF5cykpO1xufTtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgd2luZG93LmZsYXRwaWNrciA9IGZsYXRwaWNrcjtcbn1cbmV4cG9ydCBkZWZhdWx0IGZsYXRwaWNrcjtcbiIsImV4cG9ydCB2YXIgZW5nbGlzaCA9IHtcbiAgICB3ZWVrZGF5czoge1xuICAgICAgICBzaG9ydGhhbmQ6IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXSxcbiAgICAgICAgbG9uZ2hhbmQ6IFtcbiAgICAgICAgICAgIFwiU3VuZGF5XCIsXG4gICAgICAgICAgICBcIk1vbmRheVwiLFxuICAgICAgICAgICAgXCJUdWVzZGF5XCIsXG4gICAgICAgICAgICBcIldlZG5lc2RheVwiLFxuICAgICAgICAgICAgXCJUaHVyc2RheVwiLFxuICAgICAgICAgICAgXCJGcmlkYXlcIixcbiAgICAgICAgICAgIFwiU2F0dXJkYXlcIixcbiAgICAgICAgXSxcbiAgICB9LFxuICAgIG1vbnRoczoge1xuICAgICAgICBzaG9ydGhhbmQ6IFtcbiAgICAgICAgICAgIFwiSmFuXCIsXG4gICAgICAgICAgICBcIkZlYlwiLFxuICAgICAgICAgICAgXCJNYXJcIixcbiAgICAgICAgICAgIFwiQXByXCIsXG4gICAgICAgICAgICBcIk1heVwiLFxuICAgICAgICAgICAgXCJKdW5cIixcbiAgICAgICAgICAgIFwiSnVsXCIsXG4gICAgICAgICAgICBcIkF1Z1wiLFxuICAgICAgICAgICAgXCJTZXBcIixcbiAgICAgICAgICAgIFwiT2N0XCIsXG4gICAgICAgICAgICBcIk5vdlwiLFxuICAgICAgICAgICAgXCJEZWNcIixcbiAgICAgICAgXSxcbiAgICAgICAgbG9uZ2hhbmQ6IFtcbiAgICAgICAgICAgIFwiSmFudWFyeVwiLFxuICAgICAgICAgICAgXCJGZWJydWFyeVwiLFxuICAgICAgICAgICAgXCJNYXJjaFwiLFxuICAgICAgICAgICAgXCJBcHJpbFwiLFxuICAgICAgICAgICAgXCJNYXlcIixcbiAgICAgICAgICAgIFwiSnVuZVwiLFxuICAgICAgICAgICAgXCJKdWx5XCIsXG4gICAgICAgICAgICBcIkF1Z3VzdFwiLFxuICAgICAgICAgICAgXCJTZXB0ZW1iZXJcIixcbiAgICAgICAgICAgIFwiT2N0b2JlclwiLFxuICAgICAgICAgICAgXCJOb3ZlbWJlclwiLFxuICAgICAgICAgICAgXCJEZWNlbWJlclwiLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgZGF5c0luTW9udGg6IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXSxcbiAgICBmaXJzdERheU9mV2VlazogMCxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnRoKSB7XG4gICAgICAgIHZhciBzID0gbnRoICUgMTAwO1xuICAgICAgICBpZiAocyA+IDMgJiYgcyA8IDIxKVxuICAgICAgICAgICAgcmV0dXJuIFwidGhcIjtcbiAgICAgICAgc3dpdGNoIChzICUgMTApIHtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzdFwiO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIm5kXCI7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwicmRcIjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidGhcIjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmFuZ2VTZXBhcmF0b3I6IFwiIHRvIFwiLFxuICAgIHdlZWtBYmJyZXZpYXRpb246IFwiV2tcIixcbiAgICBzY3JvbGxUaXRsZTogXCJTY3JvbGwgdG8gaW5jcmVtZW50XCIsXG4gICAgdG9nZ2xlVGl0bGU6IFwiQ2xpY2sgdG8gdG9nZ2xlXCIsXG4gICAgYW1QTTogW1wiQU1cIiwgXCJQTVwiXSxcbiAgICB5ZWFyQXJpYUxhYmVsOiBcIlllYXJcIixcbiAgICBtb250aEFyaWFMYWJlbDogXCJNb250aFwiLFxuICAgIGhvdXJBcmlhTGFiZWw6IFwiSG91clwiLFxuICAgIG1pbnV0ZUFyaWFMYWJlbDogXCJNaW51dGVcIixcbiAgICB0aW1lXzI0aHI6IGZhbHNlLFxufTtcbmV4cG9ydCBkZWZhdWx0IGVuZ2xpc2g7XG4iLCJleHBvcnQgdmFyIEhPT0tTID0gW1xuICAgIFwib25DaGFuZ2VcIixcbiAgICBcIm9uQ2xvc2VcIixcbiAgICBcIm9uRGF5Q3JlYXRlXCIsXG4gICAgXCJvbkRlc3Ryb3lcIixcbiAgICBcIm9uS2V5RG93blwiLFxuICAgIFwib25Nb250aENoYW5nZVwiLFxuICAgIFwib25PcGVuXCIsXG4gICAgXCJvblBhcnNlQ29uZmlnXCIsXG4gICAgXCJvblJlYWR5XCIsXG4gICAgXCJvblZhbHVlVXBkYXRlXCIsXG4gICAgXCJvblllYXJDaGFuZ2VcIixcbiAgICBcIm9uUHJlQ2FsZW5kYXJQb3NpdGlvblwiLFxuXTtcbmV4cG9ydCB2YXIgZGVmYXVsdHMgPSB7XG4gICAgX2Rpc2FibGU6IFtdLFxuICAgIGFsbG93SW5wdXQ6IGZhbHNlLFxuICAgIGFsbG93SW52YWxpZFByZWxvYWQ6IGZhbHNlLFxuICAgIGFsdEZvcm1hdDogXCJGIGosIFlcIixcbiAgICBhbHRJbnB1dDogZmFsc2UsXG4gICAgYWx0SW5wdXRDbGFzczogXCJmb3JtLWNvbnRyb2wgaW5wdXRcIixcbiAgICBhbmltYXRlOiB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgI
3HdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJNU0lFXCIpID09PSAtMSxcbiAgICBhcmlhRGF0ZUZvcm1hdDogXCJGIGosIFlcIixcbiAgICBhdXRvRmlsbERlZmF1bHRUaW1lOiB0cnVlLFxuICAgIGNsaWNrT3BlbnM6IHRydWUsXG4gICAgY2xvc2VPblNlbGVjdDogdHJ1ZSxcbiAgICBjb25qdW5jdGlvbjogXCIsIFwiLFxuICAgIGRhdGVGb3JtYXQ6IFwiWS1tLWRcIixcbiAgICBkZWZhdWx0SG91cjogMTIsXG4gICAgZGVmYXVsdE1pbnV0ZTogMCxcbiAgICBkZWZhdWx0U2Vjb25kczogMCxcbiAgICBkaXNhYmxlOiBbXSxcbiAgICBkaXNhYmxlTW9iaWxlOiBmYWxzZSxcbiAgICBlbmFibGVTZWNvbmRzOiBmYWxzZSxcbiAgICBlbmFibGVUaW1lOiBmYWxzZSxcbiAgICBlcnJvckhhbmRsZXI6IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihlcnIpO1xuICAgIH0sXG4gICAgZ2V0V2VlazogZnVuY3Rpb24gKGdpdmVuRGF0ZSkge1xuICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGdpdmVuRGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzIC0gKChkYXRlLmdldERheSgpICsgNikgJSA3KSk7XG4gICAgICAgIHZhciB3ZWVrMSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgNCk7XG4gICAgICAgIHJldHVybiAoMSArXG4gICAgICAgICAgICBNYXRoLnJvdW5kKCgoZGF0ZS5nZXRUaW1lKCkgLSB3ZWVrMS5nZXRUaW1lKCkpIC8gODY0MDAwMDAgLVxuICAgICAgICAgICAgICAgIDMgK1xuICAgICAgICAgICAgICAgICgod2VlazEuZ2V0RGF5KCkgKyA2KSAlIDcpKSAvXG4gICAgICAgICAgICAgICAgNykpO1xuICAgIH0sXG4gICAgaG91ckluY3JlbWVudDogMSxcbiAgICBpZ25vcmVkRm9jdXNFbGVtZW50czogW10sXG4gICAgaW5saW5lOiBmYWxzZSxcbiAgICBsb2NhbGU6IFwiZGVmYXVsdFwiLFxuICAgIG1pbnV0ZUluY3JlbWVudDogNSxcbiAgICBtb2RlOiBcInNpbmdsZVwiLFxuICAgIG1vbnRoU2VsZWN0b3JUeXBlOiBcImRyb3Bkb3duXCIsXG4gICAgbmV4dEFycm93OiBcIjxzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB2aWV3Qm94PScwIDAgMTcgMTcnPjxnPjwvZz48cGF0aCBkPSdNMTMuMjA3IDguNDcybC03Ljg1NCA3Ljg1NC0wLjcwNy0wLjcwNyA3LjE0Ni03LjE0Ni03LjE0Ni03LjE0OCAwLjcwNy0wLjcwNyA3Ljg1NCA3Ljg1NHonIC8+PC9zdmc+XCIsXG4gICAgbm9DYWxlbmRhcjogZmFsc2UsXG4gICAgbm93OiBuZXcgRGF0ZSgpLFxuICAgIG9uQ2hhbmdlOiBbXSxcbiAgICBvbkNsb3NlOiBbXSxcbiAgICBvbkRheUNyZWF0ZTogW10sXG4gICAgb25EZXN0cm95OiBbXSxcbiAgICBvbktleURvd246IFtdLFxuICAgIG9uTW9udGhDaGFuZ2U6IFtdLFxuICAgIG9uT3BlbjogW10sXG4gICAgb25QYXJzZUNvbmZpZzogW10sXG4gICAgb25SZWFkeTogW10sXG4gICAgb25WYWx1ZVVwZGF0ZTogW10sXG4gICAgb25ZZWFyQ2hhbmdlOiBbXSxcbiAgICBvblByZUNhbGVuZGFyUG9zaXRpb246IFtdLFxuICAgIHBsdWdpbnM6IFtdLFxuICAgIHBvc2l0aW9uOiBcImF1dG9cIixcbiAgICBwb3NpdGlvbkVsZW1lbnQ6IHVuZGVmaW5lZCxcbiAgICBwcmV2QXJyb3c6IFwiPHN2ZyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHZpZXdCb3g9JzAgMCAxNyAxNyc+PGc+PC9nPjxwYXRoIGQ9J001LjIwNyA4LjQ3MWw3LjE0NiA3LjE0Ny0wLjcwNyAwLjcwNy03Ljg1My03Ljg1NCA3Ljg1NC03Ljg1MyAwLjcwNyAwLjcwNy03LjE0NyA3LjE0NnonIC8+PC9zdmc+XCIsXG4gICAgc2hvcnRoYW5kQ3VycmVudE1vbnRoOiBmYWxzZSxcbiAgICBzaG93TW9udGhzOiAxLFxuICAgIHN0YXRpYzogZmFsc2UsXG4gICAgdGltZV8yNGhyOiBmYWxzZSxcbiAgICB3ZWVrTnVtYmVyczogZmFsc2UsXG4gICAgd3JhcDogZmFsc2UsXG59O1xuIiwiaW1wb3J0IHsgdG9rZW5SZWdleCwgcmV2Rm9ybWF0LCBmb3JtYXRzLCB9IGZyb20gXCIuL2Zvcm1hdHRpbmdcIjtcbmltcG9ydCB7IGRlZmF1bHRzIH0gZnJvbSBcIi4uL3R5cGVzL29wdGlvbnNcIjtcbmltcG9ydCB7IGVuZ2xpc2ggfSBmcm9tIFwiLi4vbDEwbi9kZWZhdWx0XCI7XG5leHBvcnQgdmFyIGNyZWF0ZURhdGVGb3JtYXR0ZXIgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgX2IgPSBfYS5jb25maWcsIGNvbmZpZyA9IF9iID09PSB2b2lkIDAgPyBkZWZhdWx0cyA6IF9iLCBfYyA9IF9hLmwxMG4sIGwxMG4gPSBfYyA9PT0gdm9pZCAwID8gZW5nbGlzaCA6IF9jLCBfZCA9IF9hLmlzTW9iaWxlLCBpc01vYmlsZSA9IF9kID09PSB2b2lkIDAgPyBmYWxzZSA6IF9kO1xuICAgIHJldHVybiBmdW5jdGlvbiAoZGF0ZU9iaiwgZnJtdCwgb3ZlcnJpZGVMb2NhbGUpIHtcbiAgICAgICAgdmFyIGxvY2FsZSA9IG92ZXJyaWRlTG9jYWxlIHx8IGwxMG47XG4gICAgICAgIGlmIChjb25maWcuZm9ybWF0RGF0ZSAhPT0gdW5kZWZpbmVkICYmICFpc01vYmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5mb3JtYXREYXRlKGRhdGVPYmosIGZybXQsIGxvY2FsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZybXRcbiAgICAgICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoYywgaSwgYXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0c1tjXSAmJiBhcnJbaSAtIDFdICE9PSBcIlxcXFxcIlxuICAgICAgICAgICAgICAgID8gZm9ybWF0c1tjXShkYXRlT2JqLCBsb2NhbGUsIGNvbmZpZylcbiAgICAgICAgICAgICAgICA6IGMgIT09IFwiXFxcXFwiXG4gICAgICAgICAgICAgICAgICAgID8gY1xuICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgI
3H0pXG4gICAgICAgICAgICAuam9pbihcIlwiKTtcbiAgICB9O1xufTtcbmV4cG9ydCB2YXIgY3JlYXRlRGF0ZVBhcnNlciA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBfYiA9IF9hLmNvbmZpZywgY29uZmlnID0gX2IgPT09IHZvaWQgMCA/IGRlZmF1bHRzIDogX2IsIF9jID0gX2EubDEwbiwgbDEwbiA9IF9jID09PSB2b2lkIDAgPyBlbmdsaXNoIDogX2M7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRlLCBnaXZlbkZvcm1hdCwgdGltZWxlc3MsIGN1c3RvbUxvY2FsZSkge1xuICAgICAgICBpZiAoZGF0ZSAhPT0gMCAmJiAhZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBsb2NhbGUgPSBjdXN0b21Mb2NhbGUgfHwgbDEwbjtcbiAgICAgICAgdmFyIHBhcnNlZERhdGU7XG4gICAgICAgIHZhciBkYXRlT3JpZyA9IGRhdGU7XG4gICAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSlcbiAgICAgICAgICAgIHBhcnNlZERhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBkYXRlICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICBkYXRlLnRvRml4ZWQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHBhcnNlZERhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGRhdGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHZhciBmb3JtYXQgPSBnaXZlbkZvcm1hdCB8fCAoY29uZmlnIHx8IGRlZmF1bHRzKS5kYXRlRm9ybWF0O1xuICAgICAgICAgICAgdmFyIGRhdGVzdHIgPSBTdHJpbmcoZGF0ZSkudHJpbSgpO1xuICAgICAgICAgICAgaWYgKGRhdGVzdHIgPT09IFwidG9kYXlcIikge1xuICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRpbWVsZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZyAmJiBjb25maWcucGFyc2VEYXRlKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IGNvbmZpZy5wYXJzZURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKC9aJC8udGVzdChkYXRlc3RyKSB8fFxuICAgICAgICAgICAgICAgIC9HTVQkLy50ZXN0KGRhdGVzdHIpKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoZWQgPSB2b2lkIDAsIG9wcyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBtYXRjaEluZGV4ID0gMCwgcmVnZXhTdHIgPSBcIlwiOyBpIDwgZm9ybWF0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IGZvcm1hdFtpXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzQmFja1NsYXNoID0gdG9rZW4gPT09IFwiXFxcXFwiO1xuICAgICAgICAgICAgICAgICAgICB2Y
3XIgZXNjYXBlZCA9IGZvcm1hdFtpIC0gMV0gPT09IFwiXFxcXFwiIHx8IGlzQmFja1NsYXNoO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5SZWdleFt0b2tlbl0gJiYgIWVzY2FwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4U3RyICs9IHRva2VuUmVnZXhbdG9rZW5dO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbmV3IFJlZ0V4cChyZWdleFN0cikuZXhlYyhkYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiAobWF0Y2hlZCA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BzW3Rva2VuICE9PSBcIllcIiA/IFwicHVzaFwiIDogXCJ1bnNoaWZ0XCJdKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm46IHJldkZvcm1hdFt0b2tlbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbDogbWF0Y2hbKyttYXRjaEluZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNCYWNrU2xhc2gpXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdleFN0ciArPSBcIi5cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9XG4gICAgICAgICAgICAgICAgICAgICFjb25maWcgfHwgIWNvbmZpZy5ub0NhbGVuZGFyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSwgMCwgMSwgMCwgMCwgMCwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IERhdGUobmV3IERhdGUoKS5zZXRIb3VycygwLCAwLCAwLCAwKSk7XG4gICAgICAgICAgICAgICAgb3BzLmZvckVhY2goZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IF9hLmZuLCB2YWwgPSBfYS52YWw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAocGFyc2VkRGF0ZSA9IGZuKHBhcnNlZERhdGUsIHZhbCwgbG9jYWxlKSB8fCBwYXJzZWREYXRlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbWF0Y2hlZCA/IHBhcnNlZERhdGUgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEocGFyc2VkRGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHBhcnNlZERhdGUuZ2V0VGltZSgpKSkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5lcnJvckhhbmRsZXIobmV3IEVycm9yKFwiSW52YWxpZCBkYXRlIHByb3ZpZGVkOiBcIiArIGRhdGVPcmlnKSk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lbGVzcyA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHBhcnNlZERhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgIHJldHVybiBwYXJzZWREYXRlO1xuICAgIH07XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVEYXRlcyhkYXRlMSwgZGF0ZTIsIHRpbWVsZXNzKSB7XG4gICAgaWYgKHRpbWVsZXNzID09PSB2b2lkIDApIHsgdGltZWxlc3MgPSB0cnVlOyB9XG4gICAgaWYgKHRpbWVsZXNzICE9PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gKG5ldyBEYXRlKGRhdGUxLmdldFRpbWUoKSkuc2V0SG91cnMoMCwgMCwgMCwgMCkgLVxuICAgICAgICAgICAgbmV3IERhdGUoZGF0ZTIuZ2V0VGltZSgpKS5zZXRIb3VycygwLCAwLCAwLCAwKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlMS5nZXRUaW1lKCkgLSBkYXRlMi5nZXRUaW1lKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZVRpbWVzKGRhdGUxLCBkYXRlMikge1xuICAgIHJldHVybiAoMzYwMCAqIChkYXRlMS5nZXRIb3VycygpIC0gZGF0ZTIuZ2V0SG91cnMoKSkgK1xuICAgICAgICA2MCAqIChkYXRlMS5nZXRNaW51dGVzKCkgLSBkYXRlMi5nZXRNaW51dGVzKCkpICtcbiAgICAgICAgZGF0ZTEuZ2V0U2Vjb25kcygpIC1cbiAgICAgICAgZGF0ZTIuZ2V0U2Vjb25kcygpKTtcbn1cbmV4cG9ydCB2YXIgaXNCZXR3ZWVuID0gZnVuY3Rpb24gKHRzLCB0czEsIHRzMikge1xuICAgIHJldHVybiB0cyA+IE1hdGgubWluKHRzMSwgdHMyKSAmJiB0cyA8IE1hdGgubWF4KHRzMSwgdHMyKTtcbn07XG5leHBvcnQgdmFyIGNhbGN1bGF0ZVNlY29uZHNTaW5jZU1pZG5pZ2h0ID0gZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gICAgcmV0dXJuIGhvdXJzICogMzYwMCArIG1pbnV0ZXMgKiA2MCArIHNlY29uZHM7XG59O1xuZXhwb3J0IHZhciBwYXJzZVNlY29uZHMgPSBmdW5jdGlvbiAoc2Vjb25kc1NpbmNlTWlkbmlnaHQpIHtcbiAgICB2YXIgaG91cnMgPSBNYXRoLmZsb29yKHNlY29uZHNTaW5jZU1pZG5pZ2h0IC8gMzYwMCksIG1pbnV0ZXMgPSAoc2Vjb25kc1NpbmNlTWlkbmlnaHQgLSBob3VycyAqIDM2MDApIC8gNjA7XG4gICAgcmV0dXJuIFtob3VycywgbWludXRlcywgc2Vjb25kc1NpbmNlTWlkbmlnaHQgLSBob3VycyAqIDM2MDAgLSBtaW51dGVzICogNjBdO1xufTtcbmV4cG9ydCB2YXIgZHVyYXRpb24gPSB7XG4gICAgREFZOiA4NjQwMDAwMCxcbn07XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdEhvdXJzKGNvbmZpZykge1xuICAgIHZhciBob3VycyA9IGNvbmZpZy5kZWZhdWx0SG91cjtcbiAgICB2YXIgbWludXRlcyA9IGNvbmZpZy5kZWZhdWx0TWludXRlO1xuICAgIHZhciBzZWNvbmRzID0gY29uZmlnLmRlZmF1bHRTZWNvbmRzO1xuICAgIGlmIChjb25maWcubWluRGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBtaW5Ib3VyID0gY29uZmlnLm1pbkRhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgdmFyIG1pbk1pbnV0ZXMgPSBjb25maWcubWluRGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIHZhciBtaW5TZWNvbmRzID0gY29uZmlnLm1pbkRhdGUuZ2V0U2Vjb25kcygpO1xuICAgICAgICBpZiAoaG91cnMgPCBtaW5Ib3VyKSB7XG4gICAgICAgICAgICBob3VycyA9IG1pbkhvdXI7XG4gICAgICAgI
3H1cbiAgICAgICAgaWYgKGhvdXJzID09PSBtaW5Ib3VyICYmIG1pbnV0ZXMgPCBtaW5NaW51dGVzKSB7XG4gICAgICAgICAgICBtaW51dGVzID0gbWluTWludXRlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91cnMgPT09IG1pbkhvdXIgJiYgbWludXRlcyA9PT0gbWluTWludXRlcyAmJiBzZWNvbmRzIDwgbWluU2Vjb25kcylcbiAgICAgICAgICAgIHNlY29uZHMgPSBjb25maWcubWluRGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgfVxuICAgIGlmIChjb25maWcubWF4RGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBtYXhIciA9IGNvbmZpZy5tYXhEYXRlLmdldEhvdXJzKCk7XG4gICAgICAgIHZhciBtYXhNaW51dGVzID0gY29uZmlnLm1heERhdGUuZ2V0TWludXRlcygpO1xuICAgICAgICBob3VycyA9IE1hdGgubWluKGhvdXJzLCBtYXhIcik7XG4gICAgICAgIGlmIChob3VycyA9PT0gbWF4SHIpXG4gICAgICAgICAgICBtaW51dGVzID0gTWF0aC5taW4obWF4TWludXRlcywgbWludXRlcyk7XG4gICAgICAgIGlmIChob3VycyA9PT0gbWF4SHIgJiYgbWludXRlcyA9PT0gbWF4TWludXRlcylcbiAgICAgICAgICAgIHNlY29uZHMgPSBjb25maWcubWF4RGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgfVxuICAgIHJldHVybiB7IGhvdXJzOiBob3VycywgbWludXRlczogbWludXRlcywgc2Vjb25kczogc2Vjb25kcyB9O1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGVsZW0sIGNsYXNzTmFtZSwgYm9vbCkge1xuICAgIGlmIChib29sID09PSB0cnVlKVxuICAgICAgICByZXR1cm4gZWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWcsIGNsYXNzTmFtZSwgY29udGVudCkge1xuICAgIHZhciBlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICBjb250ZW50ID0gY29udGVudCB8fCBcIlwiO1xuICAgIGUuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgIGlmIChjb250ZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIGUudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICAgIHJldHVybiBlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyTm9kZShub2RlKSB7XG4gICAgd2hpbGUgKG5vZGUuZmlyc3RDaGlsZClcbiAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChub2RlLmZpcnN0Q2hpbGQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQYXJlbnQobm9kZSwgY29uZGl0aW9uKSB7XG4gICAgaWYgKGNvbmRpdGlvbihub2RlKSlcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgZWxzZSBpZiAobm9kZS5wYXJlbnROb2RlKVxuICAgICAgICByZXR1cm4gZmluZFBhcmVudChub2RlLnBhcmVudE5vZGUsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOdW1iZXJJbnB1dChpbnB1dENsYXNzTmFtZSwgb3B0cykge1xuICAgIHZhciB3cmFwcGVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcIm51bUlucHV0V3JhcHBlclwiKSwgbnVtSW5wdXQgPSBjcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgXCJudW1JbnB1dCBcIiArIGlucHV0Q2xhc3NOYW1lKSwgYXJyb3dVcCA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiYXJyb3dVcFwiKSwgYXJyb3dEb3duID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJhcnJvd0Rvd25cIik7XG4gICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIk1TSUUgOS4wXCIpID09PSAtMSkge1xuICAgICAgICBudW1JbnB1dC50eXBlID0gXCJudW1iZXJcIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG51bUlucHV0LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgbnVtSW5wdXQucGF0dGVybiA9IFwiXFxcXGQqXCI7XG4gICAgfVxuICAgIGlmIChvcHRzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRzKVxuICAgICAgICAgICAgbnVtSW5wdXQuc2V0QXR0cmlidXRlKGtleSwgb3B0c1trZXldKTtcbiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKG51bUlucHV0KTtcbiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGFycm93VXApO1xuICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoYXJyb3dEb3duKTtcbiAgICByZXR1cm4gd3JhcHBlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRFdmVudFRhcmdldChldmVudCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQuY29tcG9zZWRQYXRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhciBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgICAgICAgICByZXR1cm4gcGF0aFswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQudGFyZ2V0O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LnRhcmdldDtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBpbnQsIHBhZCB9IGZyb20gXCIuLi91dGlsc1wiO1xudmFyIGRvTm90aGluZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfTtcbmV4cG9ydCB2YXIgbW9udGhUb1N0ciA9IGZ1bmN0aW9uIChtb250aE51bWJlciwgc2hvcnRoYW5kLCBsb2NhbGUpIHsgcmV0dXJuIGxvY2FsZS5tb250aHNbc2hvcnRoYW5kID8gXCJzaG9ydGhhbmRcIiA6IFwibG9uZ2hhbmRcIl1bbW9udGhOdW1iZXJdOyB9O1xuZXhwb3J0IHZhciByZXZGb3JtYXQgPSB7XG4gICAgRDogZG9Ob3RoaW5nLFxuICAgIEY6IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aE5hbWUsIGxvY2FsZSkge1xuICAgICAgICBkYXRlT2JqLnNldE1vbnRoKGxvY2FsZS5tb250aHMubG9uZ2hhbmQuaW5kZXhPZihtb250aE5hbWUpKTtcbiAgICB9LFxuICAgIEc6IGZ1bmN0aW9uIChkYXRlT2JqLCBob3VyKSB7XG4gICAgICAgIGRhdGVPYmouc2V0SG91cnMoKGRhdGVPYmouZ2V0SG91cnMoKSA+PSAxMiA/IDEyIDogMCkgKyBwYXJzZUZsb2F0KGhvdXIpKTtcbiAgICB9LFxuICAgIEg6IGZ1bmN0aW9uIChkYXRlT2JqLCBob3VyKSB7XG4gICAgICAgIGRhdGVPYmouc2V0SG91cnMocGFyc2VGbG9hdChob3VyKSk7XG4gICAgfSxcbiAgICBKOiBmdW5jdGlvbiAoZGF0ZU9iaiwgZGF5KSB7XG4gICAgICAgIGRhdGVPYmouc2V0RGF0ZShwYXJzZU
3Zsb2F0KGRheSkpO1xuICAgIH0sXG4gICAgSzogZnVuY3Rpb24gKGRhdGVPYmosIGFtUE0sIGxvY2FsZSkge1xuICAgICAgICBkYXRlT2JqLnNldEhvdXJzKChkYXRlT2JqLmdldEhvdXJzKCkgJSAxMikgK1xuICAgICAgICAgICAgMTIgKiBpbnQobmV3IFJlZ0V4cChsb2NhbGUuYW1QTVsxXSwgXCJpXCIpLnRlc3QoYW1QTSkpKTtcbiAgICB9LFxuICAgIE06IGZ1bmN0aW9uIChkYXRlT2JqLCBzaG9ydE1vbnRoLCBsb2NhbGUpIHtcbiAgICAgICAgZGF0ZU9iai5zZXRNb250aChsb2NhbGUubW9udGhzLnNob3J0aGFuZC5pbmRleE9mKHNob3J0TW9udGgpKTtcbiAgICB9LFxuICAgIFM6IGZ1bmN0aW9uIChkYXRlT2JqLCBzZWNvbmRzKSB7XG4gICAgICAgIGRhdGVPYmouc2V0U2Vjb25kcyhwYXJzZUZsb2F0KHNlY29uZHMpKTtcbiAgICB9LFxuICAgIFU6IGZ1bmN0aW9uIChfLCB1bml4U2Vjb25kcykgeyByZXR1cm4gbmV3IERhdGUocGFyc2VGbG9hdCh1bml4U2Vjb25kcykgKiAxMDAwKTsgfSxcbiAgICBXOiBmdW5jdGlvbiAoZGF0ZU9iaiwgd2Vla051bSwgbG9jYWxlKSB7XG4gICAgICAgIHZhciB3ZWVrTnVtYmVyID0gcGFyc2VJbnQod2Vla051bSk7XG4gICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoZGF0ZU9iai5nZXRGdWxsWWVhcigpLCAwLCAyICsgKHdlZWtOdW1iZXIgLSAxKSAqIDcsIDAsIDAsIDAsIDApO1xuICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpICsgbG9jYWxlLmZpcnN0RGF5T2ZXZWVrKTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSxcbiAgICBZOiBmdW5jdGlvbiAoZGF0ZU9iaiwgeWVhcikge1xuICAgICAgICBkYXRlT2JqLnNldEZ1bGxZZWFyKHBhcnNlRmxvYXQoeWVhcikpO1xuICAgIH0sXG4gICAgWjogZnVuY3Rpb24gKF8sIElTT0RhdGUpIHsgcmV0dXJuIG5ldyBEYXRlKElTT0RhdGUpOyB9LFxuICAgIGQ6IGZ1bmN0aW9uIChkYXRlT2JqLCBkYXkpIHtcbiAgICAgICAgZGF0ZU9iai5zZXREYXRlKHBhcnNlRmxvYXQoZGF5KSk7XG4gICAgfSxcbiAgICBoOiBmdW5jdGlvbiAoZGF0ZU9iaiwgaG91cikge1xuICAgICAgICBkYXRlT2JqLnNldEhvdXJzKChkYXRlT2JqLmdldEhvdXJzKCkgPj0gMTIgPyAxMiA6IDApICsgcGFyc2VGbG9hdChob3VyKSk7XG4gICAgfSxcbiAgICBpOiBmdW5jdGlvbiAoZGF0ZU9iaiwgbWludXRlcykge1xuICAgICAgICBkYXRlT2JqLnNldE1pbnV0ZXMocGFyc2VGbG9hdChtaW51dGVzKSk7XG4gICAgfSxcbiAgICBqOiBmdW5jdGlvbiAoZGF0ZU9iaiwgZGF5KSB7XG4gICAgICAgIGRhdGVPYmouc2V0RGF0ZShwYXJzZUZsb2F0KGRheSkpO1xuICAgIH0sXG4gICAgbDogZG9Ob3RoaW5nLFxuICAgIG06IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aCkge1xuICAgICAgICBkYXRlT2JqLnNldE1vbnRoKHBhcnNlRmxvYXQobW9udGgpIC0gMSk7XG4gICAgfSxcbiAgICBuOiBmdW5jdGlvbiAoZGF0ZU9iaiwgbW9udGgpIHtcbiAgICAgICAgZGF0ZU9iai5zZXRNb250aChwYXJzZUZsb2F0KG1vbnRoKSAtIDEpO1xuICAgIH0sXG4gICAgczogZnVuY3Rpb24gKGRhdGVPYmosIHNlY29uZHMpIHtcbiAgICAgICAgZGF0ZU9iai5zZXRTZWNvbmRzKHBhcnNlRmxvYXQoc2Vjb25kcykpO1xuICAgIH0sXG4gICAgdTogZnVuY3Rpb24gKF8sIHVuaXhNaWxsU2Vjb25kcykge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUocGFyc2VGbG9hdCh1bml4TWlsbFNlY29uZHMpKTtcbiAgICB9LFxuICAgIHc6IGRvTm90aGluZyxcbiAgICB5OiBmdW5jdGlvbiAoZGF0ZU9iaiwgeWVhcikge1xuICAgICAgICBkYXRlT2JqLnNldEZ1bGxZZWFyKDIwMDAgKyBwYXJzZU
3Zsb2F0KHllYXIpKTtcbiAgICB9LFxufTtcbmV4cG9ydCB2YXIgdG9rZW5SZWdleCA9IHtcbiAgICBEOiBcIlwiLFxuICAgIEY6IFwiXCIsXG4gICAgRzogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICBIOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgIEo6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXFxcXHcrXCIsXG4gICAgSzogXCJcIixcbiAgICBNOiBcIlwiLFxuICAgIFM6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgVTogXCIoLispXCIsXG4gICAgVzogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICBZOiBcIihcXFxcZHs0fSlcIixcbiAgICBaOiBcIiguKylcIixcbiAgICBkOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgIGg6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgaTogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICBqOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgIGw6IFwiXCIsXG4gICAgbTogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICBuOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgIHM6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgdTogXCIoLispXCIsXG4gICAgdzogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICB5OiBcIihcXFxcZHsyfSlcIixcbn07XG5leHBvcnQgdmFyIGZvcm1hdHMgPSB7XG4gICAgWjogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsgfSxcbiAgICBEOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXMuc2hvcnRoYW5kW2Zvcm1hdHMudyhkYXRlLCBsb2NhbGUsIG9wdGlvbnMpXTtcbiAgICB9LFxuICAgIEY6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG1vbnRoVG9TdHIoZm9ybWF0cy5uKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykgLSAxLCBmYWxzZSwgbG9jYWxlKTtcbiAgICB9LFxuICAgIEc6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHBhZChmb3JtYXRzLmgoZGF0ZSwgbG9jYWxlLCBvcHRpb25zKSk7XG4gICAgfSxcbiAgICBIOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0SG91cnMoKSk7IH0sXG4gICAgSjogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm9yZGluYWwgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBkYXRlLmdldERhdGUoKSArIGxvY2FsZS5vcmRpbmFsKGRhdGUuZ2V0RGF0ZSgpKVxuICAgICAgICAgICAgOiBkYXRlLmdldERhdGUoKTtcbiAgICB9LFxuICAgIEs6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUpIHsgcmV0dXJuIGxvY2FsZS5hbVBNW2ludChkYXRlLmdldEhvdXJzKCkgPiAxMSldOyB9LFxuICAgIE06IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIG1vbnRoVG9TdHIoZGF0ZS5nZXRNb250aCgpLCB0cnVlLCBsb2NhbGUpO1xuICAgIH0sXG4gICAgUzogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldFNlY29uZHMoKSk7IH0sXG4gICAgVTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC8gMTAwMDsgfSxcbiAgICBXOiBmdW5jdGlvbiAoZGF0ZSwgXywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5nZXRXZWVrKGRhdGUpO1xuICAgIH0sXG4gICAgWTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldEZ1bGxZZWFyKCksIDQpOyB9LFxuICAgIGQ6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBwYWQoZGF0ZS5nZXREYXRlKCkpOyB9LFxuICAgIGg6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiAoZGF0ZS5nZXRIb3VycygpICUgMTIgPyBkYXRlLmdldEhvdXJzKCkgJSAxMiA6IDEyKTsgfSxcbiAgICBpOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0TWludXRlcygpKTsgfSxcbiAgICBqOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXREYXRlKCk7IH0sXG4gICAgbDogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzLmxvbmdoYW5kW2RhdGUuZ2V0RGF5KCldO1xuICAgIH0sXG4gICAgbTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldE1vbnRoKCkgKyAxKTsgfSxcbiAgICBuOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXRNb250aCgpICsgMTsgfSxcbiAgICBzOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXRTZWNvbmRzKCk7IH0sXG4gICAgdTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0VGltZSgpOyB9LFxuICAgIHc6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldERheSgpOyB9LFxuICAgIHk6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBTdHJpbmcoZGF0ZS5nZXRGdWxsWWVhcigpKS5zdWJzdHJpbmcoMik7IH0sXG59O1xuIiwiZXhwb3J0IHZhciBwYWQgPSBmdW5jdGlvbiAobnVtYmVyLCBsZW5ndGgpIHtcbiAgICBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsgbGVuZ3RoID0gMjsgfVxuICAgIHJldHVybiAoXCIwMDBcIiArIG51bWJlcikuc2xpY2UobGVuZ3RoICogLTEpO1xufTtcbmV4cG9ydCB2YXIgaW50ID0gZnVuY3Rpb24gKGJvb2wpIHsgcmV0dXJuIChib29sID09PSB0cnVlID8gMSA6IDApOyB9O1xuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlKGZuLCB3YWl0KSB7XG4gICAgdmFyIHQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIGNsZWFyVGltZW91dCh0KTtcbiAgICAgICAgdCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gZm4uYXBwbHkoX3RoaXMsIGFyZ3MpOyB9LCB3YWl0KTtcbiAgICB9O1xufVxuZXhwb3J0IHZhciBhcnJheWlmeSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgQXJyYXkgPyBvYmogOiBbb2JqXTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbmlmICh0eXBlb2YgT2JqZWN0LmFzc2lnbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgT2JqZWN0LmFzc2lnbiA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgI
3H1cbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdFwiKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHRhcmdldFtrZXldID0gc291cmNlW2tleV0pOyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZm9yICh2YXIgX2EgPSAwLCBhcmdzXzEgPSBhcmdzOyBfYSA8IGFyZ3NfMS5sZW5ndGg7IF9hKyspIHtcbiAgICAgICAgICAgIHZhciBzb3VyY2UgPSBhcmdzXzFbX2FdO1xuICAgICAgICAgICAgX2xvb3BfMShzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfTtcbn1cbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZmFjdG9yeShnbG9iYWwuZnIgPSB7fSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBmcCA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmZsYXRwaWNrciAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHdpbmRvdy5mbGF0cGlja3JcbiAgICAgIDoge1xuICAgICAgICAgIGwxMG5zOiB7fSxcbiAgICAgIH07XG4gIHZhciBGcmVuY2ggPSB7XG4gICAgICBmaXJzdERheU9mV2VlazogMSxcbiAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgICAgc2hvcnRoYW5kOiBbXCJkaW1cIiwgXCJsdW5cIiwgXCJtYXJcIiwgXCJtZXJcIiwgXCJqZXVcIiwgXCJ2ZW5cIiwgXCJzYW1cIl0sXG4gICAgICAgICAgbG9uZ2hhbmQ6IFtcbiAgICAgICAgICAgICAgXCJkaW1hbmNoZVwiLFxuICAgICAgICAgICAgICBcImx1bmRpXCIsXG4gICAgICAgICAgICAgIFwibWFyZGlcIixcbiAgICAgICAgICAgICAgXCJtZXJjcmVkaVwiLFxuICAgICAgICAgICAgICBcImpldWRpXCIsXG4gICAgICAgICAgICAgIFwidmVuZHJlZGlcIixcbiAgICAgICAgICAgICAgXCJzYW1lZGlcIixcbiAgICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIG1vbnRoczoge1xuICAgICAgICAgIHNob3J0aGFuZDogW1xuICAgICAgICAgICAgICBcImphbnZcIixcbiAgICAgICAgICAgICAgXCJmw6l2clwiLFxuICAgICAgICAgICAgICBcIm1hcnNcIixcbiAgICAgICAgICAgICAgXCJhdnJcIixcbiAgICAgICAgICAgICAgXCJtYWlcIixcbiAgICAgICAgICAgICAgXCJqdWluXCIsXG4gICAgICAgICAgICAgIFwianVpbFwiLFxuICAgICAgICAgICAgICBcImFvw7t0XCIsXG4gICAgICAgICAgICAgIFwic2VwdFwiLFxuICAgICAgICAgICAgICBcIm9jdFwiLFxuICAgICAgICAgICAgICBcIm5vdlwiLFxuICAgICAgICAgICAgICBcImTDqWNcIixcbiAgICAgICAgICBdLFxuICAgICAgICAgIGxvbmdoYW5kOiBbXG4gICAgICAgICAgICAgIFwiamFudmllclwiLFxuICAgICAgICAgICAgICBcImbDqXZyaWVyXCIsXG4gICAgICAgICAgICAgIFwibWFyc1wiLFxuICAgICAgICAgICAgICBcImF2cmlsXCIsXG4gICAgICAgICAgICAgIFwibWFpXCIsXG4gICAgICAgICAgICAgIFwianVpblwiLFxuICAgICAgICAgICAgICBcImp1aWxsZXRcIixcbiAgICAgICAgICAgICAgXCJhb8O7dFwiLFxuICAgICAgICAgICAgICBcInNlcHRlbWJyZVwiLFxuICAgICAgICAgICAgICBcIm9jdG9icmVcIixcbiAgICAgICAgICAgICAgXCJub3ZlbWJyZVwiLFxuICAgICAgICAgICAgICBcImTDqWNlbWJyZVwiLFxuICAgICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG50aCkge1xuICAgICAgICAgIGlmIChudGggPiAxKVxuICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICByZXR1cm4gXCJlclwiO1xuICAgICAgfSxcbiAgICAgIHJhbmdlU2VwYXJhdG9yOiBcIiBhdSBcIixcbiAgICAgIHdlZWtBYmJyZXZpYXRpb246IFwiU2VtXCIsXG4gICAgICBzY3JvbGxUaXRsZTogXCJEw6lmaWxlciBwb3VyIGF1Z21lbnRlciBsYSB2YWxldXJcIixcbiAgICAgIHRvZ2dsZVRpdGxlOiBcIkNsaXF1ZXIgcG91ciBiYXNjdWxlclwiLFxuICAgICAgdGltZV8yNGhyOiB0cnVlLFxuICB9O1xuICBmcC5sMTBucy5mciA9IEZyZW5jaDtcbiAgdmFyIGZyID0gZnAubDEwbnM7XG5cbiAgZXhwb3J0cy5GcmVuY2ggPSBGcmVuY2g7XG4gIGV4cG9ydHMuZGVmYXVsdCA9IGZyO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKSk7XG4iLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJmbGF0cGlja3JcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJWdWVGbGF0cGlja3JcIiwgW1wiZmxhdHBpY2tyXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlZ1ZUZsYXRwaWNrclwiXSA9IGZhY3RvcnkocmVxdWlyZShcImZsYXRwaWNrclwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiVnVlRmxhdHBpY2tyXCJdID0gZmFjdG9yeShyb290W1wiZmxhdHBpY2tyXCJdKTtcbn0pKHRoaXMsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18zMTFfXykgPT4ge1xucmV0dXJuIC8qKioqKiovICgoKSA9PiB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0XCJ1c2Ugc3RyaWN0XCI7XG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlc19fID0gKHtcblxuLyoqKi8gMzExOlxuLyoqKi8gKChtb2R1bGUpID0+IHtcblxubW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18zMTFfXztcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gXHR9KTtcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuLyoqKioqKi8gXHRcdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9k
3dWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuLyoqKioqKi8gXHRcdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqLyBcdFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIFx0Lyogd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcbi8qKioqKiovIFx0XHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcbi8qKioqKiovIFx0XHRcdFx0KCkgPT4gKG1vZHVsZSk7XG4vKioqKioqLyBcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuLyoqKioqKi8gXHRcdFx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuLyoqKioqKi8gXHRcdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpXG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0ge307XG4vLyBUaGlzIGVudHJ5IG5lZWQgdG8gYmUgd3JhcHBlZCBpbiBhbiBJSUZFIGJlY2F1c2UgaXQgbmVlZCB0byBiZSBpc29sYXRlZCBhZ2FpbnN0IG90aGVyIG1vZHVsZXMgaW4gdGhlIGNodW5rLlxuKCgpID0+IHtcblxuLy8gRVhQT1JUU1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcbiAgXCJkZWZhdWx0XCI6ICgpID0+ICgvKiBiaW5kaW5nICovIHNyYylcbn0pO1xuXG4vLyBVTlVTRUQgRVhQT1JUUzogQ29tcG9uZW50LCBQbHVnaW5cblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImZsYXRwaWNrclwiXG52YXIgZXh0ZXJuYWxfZmxhdHBpY2tyXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzExKTtcbnZhciBleHRlcm5hbF9mbGF0cGlja3JfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfZmxhdHBpY2tyXyk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXZlbnRzLmpzXG4vLyBFdmVudHMgdG8gZW1pdCwgY29waWVkIGZyb20gZmxhdHBpY2tyIHNvdXJjZVxudmFyIGluY2x1ZGVkRXZlbnRzID0gWydvbkNoYW5nZScsICdvbkNsb3NlJywgJ29uRGVzdHJveScsICdvbk1vbnRoQ2hhbmdlJywgJ29uT3BlbicsICdvblllYXJDaGFuZ2UnXTtcblxuLy8gTGV0J3Mgbm90IGVtaXQgdGhlc2UgZXZlbnRzIGJ5IGRlZmF1bHRcbnZhciBleGNsdWRlZEV2ZW50cyA9IFsnb25WYWx1ZVVwZGF0ZScsICdvbkRheUNyZWF0ZScsICdvblBhcnNlQ29uZmlnJywgJ29uUmVhZHknLCAnb25QcmVDYWxlbmRhclBvc2l0aW9uJywgJ29uS2V5RG93biddO1xuXG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdXRpbC5qc1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybi
3B0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG52YXIgY2FtZWxUb0tlYmFiID0gZnVuY3Rpb24gY2FtZWxUb0tlYmFiKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csICckMS0kMicpLnRvTG93ZXJDYXNlKCk7XG59O1xudmFyIGFycmF5aWZ5ID0gZnVuY3Rpb24gYXJyYXlpZnkob2JqKSB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBBcnJheSA/IG9iaiA6IFtvYmpdO1xufTtcbnZhciBudWxsaWZ5ID0gZnVuY3Rpb24gbnVsbGlmeSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgdmFsdWUubGVuZ3RoID8gdmFsdWUgOiBudWxsO1xufTtcbnZhciBjbG9uZU9iamVjdCA9IGZ1bmN0aW9uIGNsb25lT2JqZWN0KG9iaikge1xuICByZXR1cm4gX2V4dGVuZHMoe30sIG9iaik7XG59O1xuXG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tcG9uZW50LmpzXG5cblxuXG4vLyBZb3UgaGF2ZSB0byBpbXBvcnQgY3NzIHlvdXJzZWxmXG5cbi8vIEtlZXAgYSBjb3B5IG9mIGFsbCBldmVudHMgZm9yIGxhdGVyIHVzZVxudmFyIGFsbEV2ZW50cyA9IGluY2x1ZGVkRXZlbnRzLmNvbmNhdChleGNsdWRlZEV2ZW50cyk7XG5cbi8vIFBhc3NpbmcgdGhlc2UgcHJvcGVydGllcyBpbiBgc2V0KClgIG1ldGhvZCB3aWxsIGNhdXNlIGZsYXRwaWNrciB0byB0cmlnZ2VyIHNvbWUgY2FsbGJhY2tzXG52YXIgY29uZmlnQ2FsbGJhY2tzID0gWydsb2NhbGUnLCAnc2hvd01vbnRocyddO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBjb25zdCBjb21wb25lbnQgPSAoe1xuICBuYW1lOiAnZmxhdC1waWNrcicsXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGVsKSB7XG4gICAgcmV0dXJuIGVsKCdpbnB1dCcsIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgJ2RhdGEtaW5wdXQnOiB0cnVlXG4gICAgICB9LFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBpbnB1dDogdGhpcy5vbklucHV0XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIFwiZGVmYXVsdFwiOiBudWxsLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5IHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIGh0dHBzOi8vZmxhdHBpY2tyLmpzLm9yZy9vcHRpb25zL1xuICAgIGNvbmZpZzoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHdyYXA6IGZhbHNlLFxuICAgICAgICAgIGRlZmF1bHREYXRlOiBudWxsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcbiAgICBldmVudHM6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gaW5jbHVkZWRFdmVudHM7XG4gICAgICB9XG4gICAgfSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIFwiZGVmYXVsdFwiOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgZmxhdHBpY2tyIGluc3RhbmNlXG4gICAgICAgKi9cbiAgICAgIGZwOiBudWxsXG4gICAgfTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIC8vIFJldHVybiBlYXJseSBpZiBmbGF0cGlja3IgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5mcCkgcmV0dXJuO1xuXG4gICAgLy8gRG9uJ3QgbXV0YXRlIG9yaWdpbmFsIG9iamVjdCBvbiBwYXJlbnQgY29tcG9uZW50XG4gICAgdmFyIHNhZmVDb25maWcgPSBjbG9uZU9iamVjdCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5ldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICAgICAgLy8gUmVzcGVjdCBnbG9iYWwgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgdmlhIHNldERlZmF1bHQoKSBtZXRob2RcbiAgICAgIHZhciBnbG9iYWxDYWxsYmFja3MgPSAoZXh0ZXJuYWxfZmxhdHBpY2tyX2RlZmF1bHQoKSkuZGVmYXVsdENvbmZpZ1tob29rXSB8fCBbXTtcblxuICAgICAgLy8gSW5qZWN0IG91ciBvd24gbWV0aG9kIGFsb25nIHdpdGggdXNlciBjYWxsYmFja1xuICAgICAgdmFyIGxvY2FsQ2FsbGJhY2sgPSBmdW5jdGlvbiBsb2NhbENhbGxiYWNrKCkge1xuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLiRlbWl0LmFwcGx5KF90aGlzLCBbY2FtZWxUb0tlYmFiKGhvb2spXS5jb25jYXQoYXJncykpO1xuICAgICAgfTtcblxuICAgICAgLy8gT3ZlcndyaXRlIHdpdGggbWVyZ2VkIGFycmF5XG4gICAgICBzYWZlQ29uZmlnW2hvb2tdID0gYXJyYXlpZnkoc2FmZUNvbmZpZ1tob29rXSB8fCBbXSkuY29uY2F0KGdsb2JhbENhbGxiYWNrcywgbG9jYWxDYWxsYmFjayk7XG4gICAgfSk7XG5cbiAgICAvLyBTZXQgaW5pdGlhbCBkYXRlIHdpdGhvdXQgZW1pdHRpbmcgYW55IGV2ZW50XG4gICAgc2FmZUNvbmZpZy5kZWZhdWx0RGF0ZSA9IHRoaXMudmFsdWUgfHwgc2FmZUNvbmZpZy5kZWZhdWx0RGF0ZTtcblxuICAgIC8vIEluaX
3QgZmxhdHBpY2tyXG4gICAgdGhpcy5mcCA9IG5ldyAoZXh0ZXJuYWxfZmxhdHBpY2tyX2RlZmF1bHQoKSkodGhpcy5nZXRFbGVtKCksIHNhZmVDb25maWcpO1xuXG4gICAgLy8gQXR0YWNoIGJsdXIgZXZlbnRcbiAgICB0aGlzLmZwSW5wdXQoKS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vbkJsdXIpO1xuICAgIHRoaXMuJG9uKCdvbi1jbG9zZScsIHRoaXMub25DbG9zZSk7XG5cbiAgICAvLyBJbW1lZGlhdGUgd2F0Y2ggd2lsbCBmYWlsIGJlZm9yZSBmcCBpcyBzZXQsXG4gICAgLy8gc28gbmVlZCB0byBzdGFydCB3YXRjaGluZyBhZnRlciBtb3VudFxuICAgIHRoaXMuJHdhdGNoKCdkaXNhYmxlZCcsIHRoaXMud2F0Y2hEaXNhYmxlZCwge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlXG4gICAgfSk7XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIEhUTUwgbm9kZSB3aGVyZSBmbGF0cGlja3IgdG8gYmUgYXR0YWNoZWRcbiAgICAgKiBCaW5kIG9uIHBhcmVudCBlbGVtZW50IGlmIHdyYXAgaXMgdHJ1ZVxuICAgICAqL1xuICAgIGdldEVsZW06IGZ1bmN0aW9uIGdldEVsZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcud3JhcCA/IHRoaXMuJGVsLnBhcmVudE5vZGUgOiB0aGlzLiRlbDtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFdhdGNoIGZvciB2YWx1ZSBjaGFuZ2VkIGJ5IGRhdGUtcGlja2VyIGl0c2VsZiBhbmQgbm90aWZ5IHBhcmVudCBjb21wb25lbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudFxuICAgICAqL1xuICAgIG9uSW5wdXQ6IGZ1bmN0aW9uIG9uSW5wdXQoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIGlucHV0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgLy8gTGV0J3Mgd2FpdCBmb3IgRE9NIHRvIGJlIHVwZGF0ZWRcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLiRlbWl0KCdpbnB1dCcsIG51bGxpZnkoaW5wdXQudmFsdWUpKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybiBIVE1MRWxlbWVudFxuICAgICAqL1xuICAgIGZwSW5wdXQ6IGZ1bmN0aW9uIGZwSW5wdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mcC5hbHRJbnB1dCB8fCB0aGlzLmZwLmlucHV0O1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQmx1ciBldmVudCBpcyByZXF1aXJlZCBieSBtYW55IHZhbGlkYXRpb24gbGlicmFyaWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRcbiAgICAgKi9cbiAgICBvbkJsdXI6IGZ1bmN0aW9uIG9uQmx1cihldmVudCkge1xuICAgICAgdGhpcy4kZW1pdCgnYmx1cicsIG51bGxpZnkoZXZlbnQudGFyZ2V0LnZhbHVlKSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBGbGF0cGlja3IgZG9lcyBub3QgZW1pdCBpbnB1dCBldmVudCBpbiBzb21lIGNhc2VzXG4gICAgICovXG4gICAgb25DbG9zZTogZnVuY3Rpb24gb25DbG9zZShzZWxlY3RlZERhdGVzLCBkYXRlU3RyKSB7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIG51bGxpZnkoZGF0ZVN0cikpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogV2F0Y2ggZm9yIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eSBhbmQgc2V0cyB0aGUgdmFsdWUgdG8gdGhlIHJlYWwgaW5wdXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3U3RhdGVcbiAgICAgKi9cbiAgICB3YXRjaERpc2FibGVkOiBmdW5jdGlvbiB3YXRjaERpc2FibGVkKG5ld1N0YXRlKSB7XG4gICAgICBpZiAobmV3U3RhdGUpIHtcbiAgICAgICAgdGhpcy5mcElucHV0KCkuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIG5ld1N0YXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZnBJbnB1dCgpLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgLyoqXG4gICAgICogV2F0Y2ggZm9yIGFueSBjb25maWcgY2hhbmdlcyBhbmQgcmVkcmF3IGRhdGUtcGlja2VyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3Q29uZmlnIE9iamVjdFxuICAgICAqL1xuICAgIGNvbmZpZzoge1xuICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIobmV3Q29uZmlnKSB7XG4gICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgICB2Y
3XIgc2FmZUNvbmZpZyA9IGNsb25lT2JqZWN0KG5ld0NvbmZpZyk7XG4gICAgICAgIC8vIFdvcmthcm91bmQ6IERvbid0IHBhc3MgaG9va3MgdG8gY29uZmlncyBhZ2FpbiBvdGhlcndpc2VcbiAgICAgICAgLy8gcHJldmlvdXNseSByZWdpc3RlcmVkIGhvb2tzIHdpbGwgc3RvcCB3b3JraW5nXG4gICAgICAgIC8vIE5vdGljZTogd2UgYXJlIGxvb3BpbmcgdGhyb3VnaCBhbGwgZXZlbnRzXG4gICAgICAgIC8vIFRoaXMgYWxzbyBtZWFucyB0aGF0IG5ldyBjYWxsYmFja3MgY2FuIG5vdCBwYXNzZWQgb25jZSBjb21wb25lbnQgaGFzIGJlZW4gaW5pdGlhbGl6ZWRcbiAgICAgICAgYWxsRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgICAgICAgICBkZWxldGUgc2FmZUNvbmZpZ1tob29rXTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZnAuc2V0KHNhZmVDb25maWcpO1xuXG4gICAgICAgIC8vIFdvcmthcm91bmQ6IEFsbG93IHRvIGNoYW5nZSBsb2NhbGUgZHluYW1pY2FsbHlcbiAgICAgICAgY29uZmlnQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHNhZmVDb25maWdbbmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBfdGhpczMuZnAuc2V0KG5hbWUsIHNhZmVDb25maWdbbmFtZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBXYXRjaCBmb3IgY2hhbmdlcyBmcm9tIHBhcmVudCBjb21wb25lbnQgYW5kIHVwZGF0ZSBET01cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdWYWx1ZVxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShuZXdWYWx1ZSkge1xuICAgICAgLy8gUHJldmVudCB1cGRhdGVzIGlmIHYtbW9kZWwgdmFsdWUgaXMgc2FtZSBhcyBpbnB1dCdzIGN1cnJlbnQgdmFsdWVcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gbnVsbGlmeSh0aGlzLiRlbC52YWx1ZSkpIHJldHVybjtcbiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgZmxhdHBpY2tyIGluc3RhbmNlXG4gICAgICB0aGlzLmZwICYmXG4gICAgICAvLyBOb3RpZnkgZmxhdHBpY2tyIGluc3RhbmNlIHRoYXQgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gdmFsdWVcbiAgICAgIHRoaXMuZnAuc2V0RGF0ZShuZXdWYWx1ZSwgdHJ1ZSk7XG4gICAgfVxuICB9LFxuICAvKipcbiAgICogRnJlZSB1cCBtZW1vcnlcbiAgICovXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5mcCkge1xuICAgICAgdGhpcy5mcElucHV0KCkucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMub25CbHVyKTtcbiAgICAgIHRoaXMuZnAuZGVzdHJveSgpO1xuICAgICAgdGhpcy5mcCA9IG51bGw7XG4gICAgfVxuICB9XG59KTtcbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9pbmRleC5qc1xuXG52YXIgUGx1Z2luID0gZnVuY3Rpb24gUGx1Z2luKFZ1ZSwgcGFyYW1zKSB7XG4gIHZhciBuYW1lID0gJ2ZsYXQtcGlja3InO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gJ3N0cmluZycpIG5hbWUgPSBwYXJhbXM7XG4gIFZ1ZS5jb21wb25lbnQobmFtZSwgY29tcG9uZW50KTtcbn07XG5jb21wb25lbnQuaW5zdGFsbCA9IFBsdWdpbjtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gY29uc3Qgc3JjID0gKGNvbXBvbmVudCk7XG5cbn0pKCk7XG5cbl9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXTtcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19leHBvcnRzX187XG4vKioqKioqLyB9KSgpXG47XG59KTsiLCIvKiFcbiAqIFZ1ZS5qcyB2Mi43LjE2XG4gKiAoYykgMjAxNC0yMDIzIEV2YW4gWW91XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLlZ1ZSA9IGZhY3RvcnkoKSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGVtcHR5T2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbiAgLy8gVGhlc2UgaGVscGVycyBwcm9kdWNlIGJldHRlciBWTSBjb2RlIGluIEpTIGVuZ2luZXMgZHVlIHRvIHRoZWlyXG4gIC8vIGV4cGxpY2l0bmVzcyBhbmQgZnVuY3Rpb24gaW5saW5pbmcuXG4gIGZ1bmN0aW9uIGlzVW5kZWYodikge1xuICAgICAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIGlzRGVmKHYpIHtcbiAgICAgIHJldHVybiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiBpc1RydWUodikge1xuICAgICAgcmV0dXJuIHYgPT09IHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gaXNGYWxzZSh2KSB7XG4gICAgICByZXR1cm4gdiA9PT0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIGlmIHZhbHVlIGlzIHByaW1pdGl2ZS5cbiAgICovXG4gIGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJyB8fFxuICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKTtcbiAgfVxuICBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xuICB9XG4gIC8qKlxuICAgKiBRdWljayBvYmplY3QgY2hlY2sgLSB0aGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIHRlbGxcbiAgICogb2JqZWN0cyBmcm9tIHByaW1pdGl2ZSB2YWx1ZXMgd2hlbiB3ZSBrbm93IHRoZSB2YWx1ZVxuICAgKiBpcyBhIEpTT04tY29tcGxpYW50IHR5cGUuXG4gICAqL1xuICBmdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgICAgIHJldHVybi
3BvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCc7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgcmF3IHR5cGUgc3RyaW5nIG9mIGEgdmFsdWUsIGUuZy4sIFtvYmplY3QgT2JqZWN0XS5cbiAgICovXG4gIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuICBmdW5jdGlvbiB0b1Jhd1R5cGUodmFsdWUpIHtcbiAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpO1xuICB9XG4gIC8qKlxuICAgKiBTdHJpY3Qgb2JqZWN0IHR5cGUgY2hlY2suIE9ubHkgcmV0dXJucyB0cnVlXG4gICAqIGZvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAqL1xuICBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuICAgICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xuICB9XG4gIGZ1bmN0aW9uIGlzUmVnRXhwKHYpIHtcbiAgICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbCh2KSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIGlmIHZhbCBpcyBhIHZhbGlkIGFycmF5IGluZGV4LlxuICAgKi9cbiAgZnVuY3Rpb24gaXNWYWxpZEFycmF5SW5kZXgodmFsKSB7XG4gICAgICB2YXIgbiA9IHBhcnNlRmxvYXQoU3RyaW5nKHZhbCkpO1xuICAgICAgcmV0dXJuIG4gPj0gMCAmJiBNYXRoLmZsb29yKG4pID09PSBuICYmIGlzRmluaXRlKHZhbCk7XG4gIH1cbiAgZnVuY3Rpb24gaXNQcm9taXNlKHZhbCkge1xuICAgICAgcmV0dXJuIChpc0RlZih2YWwpICYmXG4gICAgICAgICAgdHlwZW9mIHZhbC50aGVuID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgdHlwZW9mIHZhbC5jYXRjaCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnQgYSB2YWx1ZSB0byBhIHN0cmluZyB0aGF0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgKi9cbiAgZnVuY3Rpb24gdG9TdHJpbmcodmFsKSB7XG4gICAgICByZXR1cm4gdmFsID09IG51bGxcbiAgICAgICAgICA/ICcnXG4gICAgICAgICAgOiBBcnJheS5pc0FycmF5KHZhbCkgfHwgKGlzUGxhaW5PYmplY3QodmFsKSAmJiB2YWwudG9TdHJpbmcgPT09IF90b1N0cmluZylcbiAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh2YWwsIHJlcGxhY2VyLCAyKVxuICAgICAgICAgICAgICA6IFN0cmluZyh2YWwpO1xuICB9XG4gIGZ1bmN0aW9uIHJlcGxhY2VyKF9rZXksIHZhbCkge1xuICAgICAgLy8gYXZvaWQgY2lyY3VsYXIgZGVwcyBmcm9tIHYzXG4gICAgICBpZiAodmFsICYmIHZhbC5fX3ZfaXNSZWYpIHtcbiAgICAgICAgICByZXR1cm4gdmFsLnZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbDtcbiAgfVxuICAvKipcbiAgICogQ29udmVydCBhbiBpbnB1dCB2YWx1ZSB0byBhIG51bWJlciBmb3IgcGVyc2lzdGVuY2UuXG4gICAqIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCByZXR1cm4gb3JpZ2luYWwgc3RyaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gdG9OdW1iZXIodmFsKSB7XG4gICAgICB2Y
3XIgbiA9IHBhcnNlRmxvYXQodmFsKTtcbiAgICAgIHJldHVybiBpc05hTihuKSA/IHZhbCA6IG47XG4gIH1cbiAgLyoqXG4gICAqIE1ha2UgYSBtYXAgYW5kIHJldHVybiBhIGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhIGtleVxuICAgKiBpcyBpbiB0aGF0IG1hcC5cbiAgICovXG4gIGZ1bmN0aW9uIG1ha2VNYXAoc3RyLCBleHBlY3RzTG93ZXJDYXNlKSB7XG4gICAgICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHZhciBsaXN0ID0gc3RyLnNwbGl0KCcsJyk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBtYXBbbGlzdFtpXV0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4cGVjdHNMb3dlckNhc2UgPyBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBtYXBbdmFsLnRvTG93ZXJDYXNlKCldOyB9IDogZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbF07IH07XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGFnIGlzIGEgYnVpbHQtaW4gdGFnLlxuICAgKi9cbiAgdmFyIGlzQnVpbHRJblRhZyA9IG1ha2VNYXAoJ3Nsb3QsY29tcG9uZW50JywgdHJ1ZSk7XG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUuXG4gICAqL1xuICB2YXIgaXNSZXNlcnZlZEF0dHJpYnV0ZSA9IG1ha2VNYXAoJ2tleSxyZWYsc2xvdCxzbG90LXNjb3BlLGlzJyk7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaXRlbSBmcm9tIGFuIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlJDIoYXJyLCBpdGVtKSB7XG4gICAgICB2Y
3XIgbGVuID0gYXJyLmxlbmd0aDtcbiAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAvLyBmYXN0IHBhdGggZm9yIHRoZSBvbmx5IC8gbGFzdCBpdGVtXG4gICAgICAgICAgaWYgKGl0ZW0gPT09IGFycltsZW4gLSAxXSkge1xuICAgICAgICAgICAgICBhcnIubGVuZ3RoID0gbGVuIC0gMTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4gYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGFuIG9iamVjdCBoYXMgdGhlIHByb3BlcnR5LlxuICAgKi9cbiAgdmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbiAgZnVuY3Rpb24gaGFzT3duKG9iaiwga2V5KSB7XG4gICAgICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNhY2hlZCB2ZXJzaW9uIG9mIGEgcHVyZSBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGNhY2hlZChmbikge1xuICAgICAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBjYWNoZWRGbihzdHIpIHtcbiAgICAgICAgICB2YXIgaGl0ID0gY2FjaGVbc3RyXTtcbiAgICAgICAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSk7XG4gICAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBDYW1lbGl6ZSBhIGh5cGhlbi1kZWxpbWl0ZWQgc3RyaW5nLlxuICAgKi9cbiAgdmFyIGNhbWVsaXplUkUgPSAvLShcXHcpL2c7XG4gIHZhciBjYW1lbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gICAgICByZXR1cm4gc3RyLnJlcGxhY2UoY2FtZWxpemVSRSwgZnVuY3Rpb24gKF8sIGMpIHsgcmV0dXJuIChjID8gYy50b1VwcGVyQ2FzZSgpIDogJycpOyB9KTtcbiAgfSk7XG4gIC8qKlxuICAgKiBDYXBpdGFsaXplIGEgc3RyaW5nLlxuICAgKi9cbiAgdmFyIGNhcGl0YWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbiAgfSk7XG4gIC8qKlxuICAgKiBIeXBoZW5hdGUgYSBjYW1lbENhc2Ugc3RyaW5nLlxuICAgKi9cbiAgdmFyIGh5cGhlbmF0ZVJFID0gL1xcQihbQS1aXSkvZztcbiAgdmFyIGh5cGhlbmF0ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gICAgICByZXR1cm4gc3RyLnJlcGxhY2UoaHlwaGVuYXRlUkUsICctJDEnKS50b0xvd2VyQ2FzZSgpO1xuICB9KTtcbiAgLyoqXG4gICAqIFNpbXBsZSBiaW5kIHBvbHlmaWxsIGZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3Qgc3VwcG9ydCBpdCxcbiAgICogZS5nLiwgUGhhbnRvbUpTIDEueC4gVGVjaG5pY2FsbHksIHdlIGRvbid0IG5lZWQgdGhpcyBhbnltb3JlXG4gICAqIHNpbmNlIG5hdGl2ZSBiaW5kIGlzIG5vdyBwZXJmb3JtYW50IGVub3VnaCBpbiBtb3N0IGJyb3dzZXJzLlxuICAgKiBCdXQgcmVtb3ZpbmcgaXQgd291bGQgbWVhbiBicmVha2luZyBjb2RlIHRoYXQgd2FzIGFibGUgdG8gcnVuIGluXG4gICAqIFBoYW50b21KUyAxLngsIHNvIHRoaXMgbXVzdCBiZSBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgKi9cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgZnVuY3Rpb24gcG9seWZpbGxCaW5kKGZuLCBjdHgpIHtcbiAgICAgIGZ1bmN0aW9uIGJvdW5kRm4oYSkge1xuICAgICAgICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICByZXR1cm4gbFxuICAgICAgICAgICAgICA/IGwgPiAxXG4gICAgICAgICAgICAgICAgICA/IGZuLmFwcGx5KGN0eCwgYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKGN0eCwgYSlcbiAgICAgICAgICAgICAgOiBmbi5jYWxsKGN0eCk7XG4gICAgICB9XG4gICAgICBib3VuZEZuLl9sZW5ndGggPSBmbi5sZW5ndGg7XG4gICAgICByZXR1cm4gYm91bmRGbjtcbiAgfVxuICBmdW5jdGlvbiBuYXRpdmVCaW5kKGZuLCBjdHgpIHtcbiAgICAgIHJldHVybiBmbi5iaW5kKGN0eCk7XG4gIH1cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBiaW5kIGNhbm5vdCBiZSBgdW5kZWZpbmVkYFxuICB2YXIgYmluZCQxID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPyBuYXRpdmVCaW5kIDogcG9seWZpbGxCaW5kO1xuICAvKipcbiAgICogQ29udmVydCBhbiBBcnJheS1saWtlIG9iamVjdCB0byBhIHJlYWwgQXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiB0b0FycmF5KGxpc3QsIHN0YXJ0KSB7XG4gICAgICBzdGFydCA9IHN0YXJ0IHx8IDA7XG4gICAgICB2Y
3XIgaSA9IGxpc3QubGVuZ3RoIC0gc3RhcnQ7XG4gICAgICB2YXIgcmV0ID0gbmV3IEFycmF5KGkpO1xuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIHJldFtpXSA9IGxpc3RbaSArIHN0YXJ0XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gIH1cbiAgLyoqXG4gICAqIE1peCBwcm9wZXJ0aWVzIGludG8gdGFyZ2V0IG9iamVjdC5cbiAgICovXG4gIGZ1bmN0aW9uIGV4dGVuZCh0bywgX2Zyb20pIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBfZnJvbSkge1xuICAgICAgICAgIHRvW2tleV0gPSBfZnJvbVtrZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRvO1xuICB9XG4gIC8qKlxuICAgKiBNZXJnZSBhbiBBcnJheSBvZiBPYmplY3RzIGludG8gYSBzaW5nbGUgT2JqZWN0LlxuICAgKi9cbiAgZnVuY3Rpb24gdG9PYmplY3QoYXJyKSB7XG4gICAgICB2YXIgcmVzID0ge307XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChhcnJbaV0pIHtcbiAgICAgICAgICAgICAgZXh0ZW5kKHJlcywgYXJyW2ldKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gIC8qKlxuICAgKiBQZXJmb3JtIG5vIG9wZXJhdGlvbi5cbiAgICogU3R1YmJpbmcgYXJncyB0byBtYWtlIEZsb3cgaGFwcHkgd2l0aG91dCBsZWF2aW5nIHVzZWxlc3MgdHJhbnNwaWxlZCBjb2RlXG4gICAqIHdpdGggLi4ucmVzdCAoaHR0cHM6Ly9mbG93Lm9yZy9ibG9nLzIwMTcvMDUvMDcvU3RyaWN0LUZ1bmN0aW9uLUNhbGwtQXJpdHkvKS5cbiAgICovXG4gIGZ1bmN0aW9uIG5vb3AoYSwgYiwgYykgeyB9XG4gIC8qKlxuICAgKiBBbHdheXMgcmV0dXJuIGZhbHNlLlxuICAgKi9cbiAgdmFyIG5vID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGZhbHNlOyB9O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNhbWUgdmFsdWUuXG4gICAqL1xuICB2YXIgaWRlbnRpdHkgPSBmdW5jdGlvbiAoXykgeyByZXR1cm4gXzsgfTtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgc3RyaW5nIGNvbnRhaW5pbmcgc3RhdGljIGtleXMgZnJvbSBjb21waWxlciBtb2R1bGVzLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2VuU3RhdGljS2V5cyQxKG1vZHVsZXMpIHtcbiAgICAgIHJldHVybiBtb2R1bGVzXG4gICAgICAgICAgLnJlZHVjZShmdW5jdGlvbiAoa2V5cywgbSkgeyByZXR1cm4ga2V5cy5jb25jYXQobS5zdGF0aWNLZXlzIHx8IFtdKTsgfSwgW10pXG4gICAgICAgICAgLmpvaW4oJywnKTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgaWYgdHdvIHZhbHVlcyBhcmUgbG9vc2VseSBlcXVhbCAtIHRoYXQgaXMsXG4gICAqIGlmIHRoZXkgYXJlIHBsYWluIG9iamVjdHMsIGRvIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaGFwZT9cbiAgICovXG4gIGZ1bmN0aW9uIGxvb3NlRXF1YWwoYSwgYikge1xuICAgICAgaWYgKGEgPT09IGIpXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB2Y
3XIgaXNPYmplY3RBID0gaXNPYmplY3QoYSk7XG4gICAgICB2YXIgaXNPYmplY3RCID0gaXNPYmplY3QoYik7XG4gICAgICBpZiAoaXNPYmplY3RBICYmIGlzT2JqZWN0Qikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhciBpc0FycmF5QSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gICAgICAgICAgICAgIHZhciBpc0FycmF5QiA9IEFycmF5LmlzQXJyYXkoYik7XG4gICAgICAgICAgICAgIGlmIChpc0FycmF5QSAmJiBpc0FycmF5Qikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgICBhLmV2ZXJ5KGZ1bmN0aW9uIChlLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGUsIGJbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIGlmICghaXNBcnJheUEgJiYgIWlzQXJyYXlCKSB7XG4gICAgICAgICAgICAgICAgICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgICAgICAgICAgIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChrZXlzQS5sZW5ndGggPT09IGtleXNCLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGtleXNBLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoYVtrZXldLCBiW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKCFpc09iamVjdEEgJiYgIWlzT2JqZWN0Qikge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBmaXJzdCBpbmRleCBhdCB3aGljaCBhIGxvb3NlbHkgZXF1YWwgdmFsdWUgY2FuIGJlXG4gICAqIGZvdW5kIGluIHRoZSBhcnJheSAoaWYgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QsIHRoZSBhcnJheSBtdXN0XG4gICAqIGNvbnRhaW4gYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHNoYXBlKSwgb3IgLTEgaWYgaXQgaXMgbm90IHByZXNlbnQuXG4gICAqL1xuICBmdW5jdGlvbiBsb29zZUluZGV4T2YoYXJyLCB2YWwpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGxvb3NlRXF1YWwoYXJyW2ldLCB2YWwpKVxuICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgfVxuICAvKipcbiAgICogRW5zdXJlIGEgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgb25jZS5cbiAgICovXG4gIGZ1bmN0aW9uIG9uY2UoZm4pIHtcbiAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICB9XG4gICAgICB9O1xuICB9XG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pcyNwb2x5ZmlsbFxuICBmdW5jdGlvbiBoYXNDaGFuZ2VkKHgsIHkpIHtcbiAgICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAgICAgcmV0dXJuIHggPT09IDAgJiYgMSAvIHggIT09IDEgLyB5O1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHggPT09IHggfHwgeSA9PT0geTtcbiAgICAgIH1cbiAgfVxuXG4gIHZhciBTU1JfQVRUUiA9ICdkYXRhLXNlcnZlci1yZW5kZXJlZCc7XG4gIHZhciBBU1NFVF9UWVBFUyA9IFsnY29tcG9uZW50JywgJ2RpcmVjdGl2ZScsICdmaWx0ZXInXTtcbiAgdmFyIExJRkVDWUNMRV9IT09LUyA9IFtcbiAgICAgICdiZWZvcmVDcmVhdGUnLFxuICAgICAgJ2NyZWF0ZWQnLFxuICAgICAgJ2JlZm9yZU1vdW50JyxcbiAgICAgICdtb3VudGVkJyxcbiAgICAgICdiZWZvcmVVcGRhdGUnLFxuICAgICAgJ3VwZGF0ZWQnLFxuICAgICAgJ2JlZm9yZURlc3Ryb3knLFxuICAgICAgJ2Rlc3Ryb3llZCcsXG4gICAgICAnYWN0aXZhdGVkJyxcbiAgICAgICdkZWFjdGl2YXRlZCcsXG4gICAgICAnZXJyb3JDYXB0dXJlZCcsXG4gICAgICAnc2VydmVyUHJlZmV0Y2gnLFxuICAgICAgJ3JlbmRlclRyYWNrZWQnLFxuICAgICAgJ3JlbmRlclRyaWdnZXJlZCdcbiAgXTtcblxuICB2YXIgY29uZmlnID0ge1xuICAgICAgLyoqXG4gICAgICAgKiBPcHRpb24gbWVyZ2Ugc3RyYXRlZ2llcyAodXNlZCBpbiBjb3JlL3V0aWwvb3B0aW9ucylcbiAgICAgICAqL1xuICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICBvcHRpb25NZXJnZVN0cmF0ZWdpZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAvKipcbiAgICAgICAqIFdoZXRoZXIgdG8gc3VwcHJlc3Mgd2FybmluZ3MuXG4gICAgICAgKi9cbiAgICAgIHNpbGVudDogZmFsc2UsXG4gICAgICAvKipcbiAgICAgICAqIFNob3cgcHJvZHVjdGlvbiBtb2RlIHRpcCBtZXNzYWdlIG9uIGJvb3Q/XG4gICAgICAgKi9cbiAgICAgIHByb2R1Y3Rpb25UaXA6IHRydWUsXG4gICAgICAvKipcbiAgICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIGRldnRvb2xzXG4gICAgICAgKi9cbiAgICAgIGRldnRvb2xzOiB0cnVlLFxuICAgICAgLyoqXG4gICAgICAgKiBXaGV0aGVyIHRvIHJlY29yZCBwZXJmXG4gICAgICAgKi9cbiAgICAgIHBlcmZvcm1hbmNlOiBmYWxzZSxcbiAgICAgIC8qKlxuICAgICAgICogRXJyb3IgaGFuZGxlciBmb3Igd2F0Y2hlciBlcnJvcnNcbiAgICAgICAqL1xuICAgICAgZXJyb3JIYW5kbGVyOiBudWxsLFxuICAgICAgLyoqXG4gICAgICAgKiBXYXJuIGhhbmRsZXIgZm9yIHdhdGNoZXIgd2FybnNcbiAgICAgICAqL1xuICAgICAgd2Fyb
3khhbmRsZXI6IG51bGwsXG4gICAgICAvKipcbiAgICAgICAqIElnbm9yZSBjZXJ0YWluIGN1c3RvbSBlbGVtZW50c1xuICAgICAgICovXG4gICAgICBpZ25vcmVkRWxlbWVudHM6IFtdLFxuICAgICAgLyoqXG4gICAgICAgKiBDdXN0b20gdXNlciBrZXkgYWxpYXNlcyBmb3Igdi1vblxuICAgICAgICovXG4gICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIGtleUNvZGVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgLyoqXG4gICAgICAgKiBDaGVjayBpZiBhIHRhZyBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSByZWdpc3RlcmVkIGFzIGFcbiAgICAgICAqIGNvbXBvbmVudC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cbiAgICAgICAqL1xuICAgICAgaXNSZXNlcnZlZFRhZzogbm8sXG4gICAgICAvKipcbiAgICAgICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSB1c2VkIGFzIGEgY29tcG9uZW50XG4gICAgICAgKiBwcm9wLiBUaGlzIGlzIHBsYXRmb3JtLWRlcGVuZGVudCBhbmQgbWF5IGJlIG92ZXJ3cml0dGVuLlxuICAgICAgICovXG4gICAgICBpc1Jlc2VydmVkQXR0cjogbm8sXG4gICAgICAvKipcbiAgICAgICAqIENoZWNrIGlmIGEgdGFnIGlzIGFuIHVua25vd24gZWxlbWVudC5cbiAgICAgICAqIFBsYXRmb3JtLWRlcGVuZGVudC5cbiAgICAgICAqL1xuICAgICAgaXNVbmtub3duRWxlbWVudDogbm8sXG4gICAgICAvKipcbiAgICAgICAqIEdldCB0aGUgbmFtZXNwYWNlIG9mIGFuIGVsZW1lbnRcbiAgICAgICAqL1xuICAgICAgZ2V0VGFnTmFtZXNwYWNlOiBub29wLFxuICAgICAgLyoqXG4gICAgICAgKiBQYXJzZSB0aGUgcmVhbCB0YWcgbmFtZSBmb3IgdGhlIHNwZWNpZmljIHBsYXRmb3JtLlxuICAgICAgICovXG4gICAgICBwYXJzZVBsYXRmb3JtVGFnTmFtZTogaWRlbnRpdHksXG4gICAgICAvKipcbiAgICAgICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBtdXN0IGJlIGJvdW5kIHVzaW5nIHByb3BlcnR5LCBlLmcuIHZhbHVlXG4gICAgICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAgICAgKi9cbiAgICAgIG11c3RVc2VQcm9wOiBubyxcbiAgICAgIC8qKlxuICAgICAgICogUGVyZm9ybSB1cGRhdGVzIGFzeW5jaHJvbm91c2x5LiBJbnRlbmRlZCB0byBiZSB1c2VkIGJ5IFZ1ZSBUZXN0IFV0aWxzXG4gICAgICAgKiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSByZWR1Y2UgcGVyZm9ybWFuY2UgaWYgc2V0IHRvIGZhbHNlLlxuICAgICAgICovXG4gICAgICBhc3luYzogdHJ1ZSxcbiAgICAgIC8qKlxuICAgICAgICogRXhwb3NlZCBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgICAgICAqL1xuICAgICAgX2xpZmVjeWNsZUhvb2tzOiBMSUZFQ1lDTEVfSE9PS1NcbiAgfTtcblxuICAvKipcbiAgICogdW5pY29kZSBsZXR0ZXJzIHVzZWQgZm9yIHBhcnNpbmcgaHRtbCB0YWdzLCBjb21wb25lbnQgbmFtZXMgYW5kIHByb3BlcnR5IHBhdGhzLlxuICAgKiB1c2luZyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUzL3NlbWFudGljcy1zY3JpcHRpbmcuaHRtbCNwb3RlbnRpYWxjdXN0b21lbGVtZW50bmFtZVxuICAgKiBza2lwcGluZyBcXHUxMDAwMC1cXHVFRkZGRiBkdWUgdG8gaXQgZnJlZXppbmcgdXAgUGhhbnRvbUpTXG4gICAqL1xuICB2YXIgdW5pY29kZVJlZ0V4cCA9IC9hLXpBLVpcXHUwMEI3XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjAzRi1cXHUyMDQwXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZELztcbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgc3RyaW5nIHN0YXJ0cyB3aXRoICQgb3IgX1xuICAgKi9cbiAgZnVuY3Rpb24gaXNSZXNlcnZlZChzdHIpIHtcbiAgICAgIHZhciBjID0gKHN0ciArICcnKS5jaGFyQ29kZUF0KDApO1xuICAgICAgcmV0dXJuIGMgPT09IDB4MjQgfHwgYyA9PT0gMHg1ZjtcbiAgfVxuICAvKipcbiAgICogRGVmaW5lIGEgcHJvcGVydHkuXG4gICAqL1xuICBmdW5jdGlvbiBkZWYob2JqLCBrZXksIHZhbCwgZW51bWVyYWJsZSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgICAgdmFsdWU6IHZhbCxcbiAgICAgICAgICBlbnVtZXJhYmxlOiAhIWVudW1lcmFibGUsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUGFyc2Ugc2ltcGxlIHBhdGguXG4gICAqL1xuICB2YXIgYmFpbFJFID0gbmV3IFJlZ0V4cChcIlteXCIuY29uY2F0KHVuaWNvZGVSZWdFeHAuc291cmNlLCBcIi4kX1xcXFxkXVwiKSk7XG4gIGZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoKSB7XG4gICAgICBpZiAoYmFpbFJFLnRlc3QocGF0aCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2Y
3XIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKCFvYmopXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIG9iaiA9IG9ialtzZWdtZW50c1tpXV07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9O1xuICB9XG5cbiAgLy8gY2FuIHdlIHVzZSBfX3Byb3RvX18/XG4gIHZhciBoYXNQcm90byA9ICdfX3Byb3RvX18nIGluIHt9O1xuICAvLyBCcm93c2VyIGVudmlyb25tZW50IHNuaWZmaW5nXG4gIHZhciBpbkJyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbiAgdmFyIFVBID0gaW5Ccm93c2VyICYmIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG4gIHZhciBpc0lFID0gVUEgJiYgL21zaWV8dHJpZGVudC8udGVzdChVQSk7XG4gIHZhciBpc0lFOSA9IFVBICYmIFVBLmluZGV4T2YoJ21zaWUgOS4wJykgPiAwO1xuICB2YXIgaXNFZGdlID0gVUEgJiYgVUEuaW5kZXhPZignZWRnZS8nKSA+IDA7XG4gIFVBICYmIFVBLmluZGV4T2YoJ2FuZHJvaWQnKSA+IDA7XG4gIHZhciBpc0lPUyA9IFVBICYmIC9pcGhvbmV8aXBhZHxpcG9kfGlvcy8udGVzdChVQSk7XG4gIFVBICYmIC9jaHJvbWVcXC9cXGQrLy50ZXN0KFVBKSAmJiAhaXNFZGdlO1xuICBVQSAmJiAvcGhhbnRvbWpzLy50ZXN0KFVBKTtcbiAgdmFyIGlzRkYgPSBVQSAmJiBVQS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pO1xuICAvLyBGaXJlZm94IGhhcyBhIFwid2F0Y2hcIiBmdW5jdGlvbiBvbiBPYmplY3QucHJvdG90eXBlLi4uXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgZmlyZWJveCBzdXBwb3J0XG4gIHZhciBuYXRpdmVXYXRjaCA9IHt9LndhdGNoO1xuICB2YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG4gIGlmIChpbkJyb3dzZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIG9wdHMgPSB7fTtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0cywgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxuICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0LXBhc3NpdmUnLCBudWxsLCBvcHRzKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7IH1cbiAgfVxuICAvLyB0aGlzIG5lZWRzIHRvIGJlIGxhenktZXZhbGVkIGJlY2F1c2UgdnVlIG1heSBiZSByZXF1aXJlZCBiZWZvcmVcbiAgLy8gdnVlLXNlcnZlci1yZW5kZXJlciBjYW4gc2V0IFZVRV9FTlZcbiAgdmFyIF9pc1NlcnZlcjtcbiAgdmFyIGlzU2VydmVyUmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF9pc1NlcnZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKCFpbkJyb3dzZXIgJiYgdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgLy8gZGV0ZWN0IHByZXNlbmNlIG9mIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgYW5kIGF2b2lkXG4gICAgICAgICAgICAgIC8vIFdlYnBhY2sgc2hpbW1pbmcgdGhlIHByb2Nlc3NcbiAgICAgICAgICAgICAgX2lzU2VydmVyID1cbiAgICAgICAgICAgICAgICAgIGdsb2JhbFsncHJvY2VzcyddICYmIGdsb2JhbFsncHJvY2VzcyddLmVudi5WVUVfRU5WID09PSAnc2VydmVyJztcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIF9pc1NlcnZlciA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBfaXNTZXJ2ZXI7XG4gIH07XG4gIC8vIGRldGVjdCBkZXZ0b29sc1xuICB2YXIgZGV2dG9vbHMgPSBpbkJyb3dzZXIgJiYgd2luZG93Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGZ1bmN0aW9uIGlzTmF0aXZlKEN0b3IpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoQ3Rvci50b1N0cmluZygpKTtcbiAgfVxuICB2YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIGlzTmF0aXZlKFN5bWJvbCkgJiZcbiAgICAgIHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgaXNOYXRpdmUoUmVmbGVjdC5vd25LZXlzKTtcbiAgdmFyIF9TZXQ7IC8vICRmbG93LWRpc2FibGUtbGluZVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8gaWYgKHR5cGVvZiBTZXQgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFNldCkpIHtcbiAgICAgIC8vIHVzZSBuYXRpdmUgU2V0IHdoZW4gYXZhaWxhYmxlLlxuICAgICAgX1NldCA9IFNldDtcbiAgfVxuICBlbHNlIHtcbiAgICAgIC8vIGEgbm9uLXN0YW5kYXJkIFNldCBwb2x5ZmlsbCB0aGF0IG9ubHkgd29ya3Mgd2l0aCBwcmltaXRpdmUga2V5cy5cbiAgICAgIF9TZXQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZnVuY3Rpb24gU2V0KCkge1xuICAgICAgICAgICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRba2V5XSA9PT0gdHJ1ZTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICB0aGlzLnNldFtrZXldID0gdHJ1ZTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIFNldC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgI
3HRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBTZXQ7XG4gICAgICB9KCkpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRJbnN0YW5jZSA9IG51bGw7XG4gIC8qKlxuICAgKiBUaGlzIGlzIGV4cG9zZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB2MyAoZS5nLiBzb21lIGZ1bmN0aW9ucyBpbiBWdWVVc2VcbiAgICogcmVsaWVzIG9uIGl0KS4gRG8gbm90IHVzZSB0aGlzIGludGVybmFsbHksIGp1c3QgdXNlIGBjdXJyZW50SW5zdGFuY2VgLlxuICAgKlxuICAgKiBAaW50ZXJuYWwgdGhpcyBmdW5jdGlvbiBuZWVkcyBtYW51YWwgdHlwZSBkZWNsYXJhdGlvbiBiZWNhdXNlIGl0IHJlbGllc1xuICAgKiBvbiBwcmV2aW91c2x5IG1hbnVhbGx5IGF1dGhvcmVkIHR5cGVzIGZyb20gVnVlIDJcbiAgICovXG4gIGZ1bmN0aW9uIGdldEN1cnJlbnRJbnN0YW5jZSgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50SW5zdGFuY2UgJiYgeyBwcm94eTogY3VycmVudEluc3RhbmNlIH07XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZnVuY3Rpb24gc2V0Q3VycmVudEluc3RhbmNlKHZtKSB7XG4gICAgICBpZiAodm0gPT09IHZvaWQgMCkgeyB2bSA9IG51bGw7IH1cbiAgICAgIGlmICghdm0pXG4gICAgICAgICAgY3VycmVudEluc3RhbmNlICYmIGN1cnJlbnRJbnN0YW5jZS5fc2NvcGUub2ZmKCk7XG4gICAgICBjdXJyZW50SW5zdGFuY2UgPSB2bTtcbiAgICAgIHZtICYmIHZtLl9zY29wZS5vbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdmFyIFZOb2RlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gVk5vZGUodGFnLCBkYXRhLCBjaGlsZHJlbiwgdGV4dCwgZWxtLCBjb250ZXh0LCBjb21wb25lbnRPcHRpb25zLCBhc3luY0ZhY3RvcnkpIHtcbiAgICAgICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgICAgICAgIHRoaXMuZWxtID0gZWxtO1xuICAgICAgICAgIHRoaXMubnMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgICB0aGlzLmZuQ29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLmZuT3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLmZuU2NvcGVJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLmtleSA9IGRhdGEgJiYgZGF0YS5rZXk7XG4gICAgICAgICAgdGhpcy5jb21wb25lbnRPcHRpb25zID0gY29tcG9uZW50T3B0aW9ucztcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMucmF3ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc1N0YXRpYyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNSb290SW5zZXJ0ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmlzQ29tbWVudCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNDbG9uZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzT25jZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuYXN5bmNGYWN0b3J5ID0gYXN5bmNGYWN0b3J5O1xuICAgICAgICAgIHRoaXMuYXN5bmNNZXRhID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMuaXNBc3luY1BsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVk5vZGUucHJvdG90eXBlLCBcImNoaWxkXCIsIHtcbiAgICAgICAgICAvLyBERVBSRUNBVEVEOiBhbGlhcyBmb3IgY29tcG9uZW50SW5zdGFuY2UgZm9yIGJhY2t3YXJkcyBjb21wYXQuXG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFZOb2RlO1xuICB9KCkpO1xuICB2YXIgY3JlYXRlRW1wdHlWTm9kZSA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICBpZiAodGV4dCA9PT0gdm9pZCAwKSB7IHRleHQgPSAnJzsgfVxuICAgICAgdmFyIG5vZGUgPSBuZXcgVk5vZGUoKTtcbiAgICAgIG5vZGUudGV4dCA9IHRleHQ7XG4gICAgICBub2RlLmlzQ29tbWVudCA9IHRydWU7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgZnVuY3Rpb24gY3JlYXRlVGV4dFZOb2RlKHZhbCkge1xuICAgICAgcmV0dXJuIG5ldyBWTm9kZSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBTdHJpbmcodmFsKSk7XG4gIH1cbiAgLy8gb3B0aW1pemVkIHNoYWxsb3cgY2xvbmVcbiAgLy8gdXNlZCBmb3Igc3RhdGljIG5vZGVzIGFuZCBzbG90IG5vZGVzIGJlY2F1c2UgdGhleSBtYXkgYmUgcmV1c2VkIGFjcm9zc1xuICAvLyBtdWx0aXBsZSByZW5kZXJzLCBjbG9uaW5nIHRoZW0gYXZvaWRzIGVycm9ycyB3aGVuIERPTSBtYW5pcHVsYXRpb25zIHJlbHlcbiAgLy8gb24gdGhlaXIgZWxtIHJlZmVyZW5jZS5cbiAgZnVuY3Rpb24gY2xvbmVWTm9kZSh2bm9kZSkge1xuICAgICAgdmFyIGNsb25lZCA9IG5ldyBWTm9kZSh2bm9kZS50YWcsIHZub2Rl
3LmRhdGEsIFxuICAgICAgLy8gIzc5NzVcbiAgICAgIC8vIGNsb25lIGNoaWxkcmVuIGFycmF5IHRvIGF2b2lkIG11dGF0aW5nIG9yaWdpbmFsIGluIGNhc2Ugb2YgY2xvbmluZ1xuICAgICAgLy8gYSBjaGlsZC5cbiAgICAgIHZub2RlLmNoaWxkcmVuICYmIHZub2RlLmNoaWxkcmVuLnNsaWNlKCksIHZub2RlLnRleHQsIHZub2RlLmVsbSwgdm5vZGUuY29udGV4dCwgdm5vZGUuY29tcG9uZW50T3B0aW9ucywgdm5vZGUuYXN5bmNGYWN0b3J5KTtcbiAgICAgIGNsb25lZC5ucyA9IHZub2RlLm5zO1xuICAgICAgY2xvbmVkLmlzU3RhdGljID0gdm5vZGUuaXNTdGF0aWM7XG4gICAgICBjbG9uZWQua2V5ID0gdm5vZGUua2V5O1xuICAgICAgY2xvbmVkLmlzQ29tbWVudCA9IHZub2RlLmlzQ29tbWVudDtcbiAgICAgIGNsb25lZC5mbkNvbnRleHQgPSB2bm9kZS5mbkNvbnRleHQ7XG4gICAgICBjbG9uZWQuZm5PcHRpb25zID0gdm5vZGUuZm5PcHRpb25zO1xuICAgICAgY2xvbmVkLmZuU2NvcGVJZCA9IHZub2RlLmZuU2NvcGVJZDtcbiAgICAgIGNsb25lZC5hc3luY01ldGEgPSB2bm9kZS5hc3luY01ldGE7XG4gICAgICBjbG9uZWQuaXNDbG9uZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGNsb25lZDtcbiAgfVxuXG4gIC8qIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aCBQcm94eSAqL1xuICB2YXIgaW5pdFByb3h5O1xuICB7XG4gICAgICB2YXIgYWxsb3dlZEdsb2JhbHNfMSA9IG1ha2VNYXAoJ0luZmluaXR5LHVuZGVmaW5lZCxOYU4saXNGaW5pdGUsaXNOYU4sJyArXG4gICAgICAgICAgJ3BhcnNlRmxvYXQscGFyc2VJbnQsZGVjb2RlVVJJLGRlY29kZVVSSUNvbXBvbmVudCxlbmNvZGVVUkksZW5jb2RlVVJJQ29tcG9uZW50LCcgK1xuICAgICAgICAgICdNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsQmlnSW50LCcgK1xuICAgICAgICAgICdyZXF1aXJlJyAvLyBmb3IgV2VicGFjay9Ccm93c2VyaWZ5XG4gICAgICApO1xuICAgICAgdmFyIHdhcm5Ob25QcmVzZW50XzEgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgICB3YXJuJDIoXCJQcm9wZXJ0eSBvciBtZXRob2QgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBpcyBub3QgZGVmaW5lZCBvbiB0aGUgaW5zdGFuY2UgYnV0IFwiKSArXG4gICAgICAgICAgICAgICdyZWZlcmVuY2VkIGR1cmluZyByZW5kZXIuIE1ha2Ugc3VyZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMgcmVhY3RpdmUsICcgK1xuICAgICAgICAgICAgICAnZWl0aGVyIGluIHRoZSBkYXRhIG9wdGlvbiwgb3IgZm9yIGNsYXNzLWJhc2VkIGNvbXBvbmVudHMsIGJ5ICcgK1xuICAgICAgICAgICAgICAnaW5pdGlhbGl6aW5nIHRoZSBwcm9wZXJ0eS4gJyArXG4gICAgICAgICAgICAgICdTZWU6IGh0dHBzOi8vdjIudnVlanMub3JnL3YyL2d1aWRlL3JlYWN0aXZpdHkuaHRtbCNEZWNsYXJpbmctUmVhY3RpdmUtUHJvcGVydGllcy4nLCB0YXJnZXQpO1xuICAgICAgfTtcbiAgICAgIHZhciB3YXJuUmVzZXJ2ZWRQcmVmaXhfMSA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICAgIHdhcm4kMihcIlByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIFxcXCIkZGF0YS5cIikuY29uY2F0KGtleSwgXCJcXFwiIGJlY2F1c2UgXCIpICtcbiAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMgc3RhcnRpbmcgd2l0aCBcIiRcIiBvciBcIl9cIiBhcmUgbm90IHByb3hpZWQgaW4gdGhlIFZ1ZSBpbnN0YW5jZSB0byAnICtcbiAgICAgICAgICAgICAgJ3ByZXZlbnQgY29uZmxpY3RzIHdpdGggVnVlIGludGVybmFscy4gJyArXG4gICAgICAgICAgICAgICdTZWU6IGh0dHBzOi8vdjIudnVlanMub3JnL3YyL2FwaS8jZGF0YScsIHRhcmdldCk7XG4gICAgICB9O1xuICAgICAgdmFyIGhhc1Byb3h5XzEgPSB0eXBlb2YgUHJveHkgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFByb3h5KTtcbiAgICAgIGlmIChoYXNQcm94eV8xKSB7XG4gICAgICAgICAgdmFyIGlzQnVpbHRJbk1vZGlmaWVyXzEgPSBtYWtlTWFwKCdzdG9wLHByZXZlbnQsc2VsZixjdHJsLHNoaWZ0LGFsdCxtZXRhLGV4YWN0Jyk7XG4gICAgICAgICAgY29uZmlnLmtleUNvZGVzID0gbmV3IFByb3h5KGNvbmZpZy5rZXlDb2Rlcywge1xuICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChpc0J1aWx0SW5Nb2RpZmllcl8xKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuJDIoXCJBdm9pZCBvdmVyd3JpdGluZyBidWlsdC1pbiBtb2RpZmllciBpbiBjb25maWcua2V5Q29kZXM6IC5cIi5jb25jYXQoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdmFyIGhhc0hhbmRsZXJfMSA9IHtcbiAgICAgICAgICBoYXM6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICAgICAgICB2Y
3XIgaGFzID0ga2V5IGluIHRhcmdldDtcbiAgICAgICAgICAgICAgdmFyIGlzQWxsb3dlZCA9IGFsbG93ZWRHbG9iYWxzXzEoa2V5KSB8fFxuICAgICAgICAgICAgICAgICAgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICAga2V5LmNoYXJBdCgwKSA9PT0gJ18nICYmXG4gICAgICAgICAgICAgICAgICAgICAgIShrZXkgaW4gdGFyZ2V0LiRkYXRhKSk7XG4gICAgICAgICAgICAgIGlmICghaGFzICYmICFpc0FsbG93ZWQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0LiRkYXRhKVxuICAgICAgICAgICAgICAgICAgICAgIHdhcm5SZXNlcnZlZFByZWZpeF8xKHRhcmdldCwga2V5KTtcbiAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuTm9uUHJlc2VudF8xKHRhcmdldCwga2V5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gaGFzIHx8ICFpc0FsbG93ZWQ7XG4gICAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciBnZXRIYW5kbGVyXzEgPSB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmICEoa2V5IGluIHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0LiRkYXRhKVxuICAgICAgICAgICAgICAgICAgICAgIHdhcm5SZXNlcnZlZFByZWZpeF8xKHRhcmdldCwga2V5KTtcbiAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuTm9uUHJlc2VudF8xKHRhcmdldCwga2V5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W2tleV07XG4gICAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGluaXRQcm94eSA9IGZ1bmN0aW9uIGluaXRQcm94eSh2bSkge1xuICAgICAgICAgIGlmIChoYXNQcm94eV8xKSB7XG4gICAgICAgICAgICAgIC8vIGRldGVybWluZSB3aGljaCBwcm94eSBoYW5kbGVyIHRvIHVzZVxuICAgICAgICAgICAgICB2Y
3XIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICAgICAgICAgICAgICB2YXIgaGFuZGxlcnMgPSBvcHRpb25zLnJlbmRlciAmJiBvcHRpb25zLnJlbmRlci5fd2l0aFN0cmlwcGVkID8gZ2V0SGFuZGxlcl8xIDogaGFzSGFuZGxlcl8xO1xuICAgICAgICAgICAgICB2bS5fcmVuZGVyUHJveHkgPSBuZXcgUHJveHkodm0sIGhhbmRsZXJzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHZtLl9yZW5kZXJQcm94eSA9IHZtO1xuICAgICAgICAgIH1cbiAgICAgIH07XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG4gIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG4gIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcbiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG4gIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG4gIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuICBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG4gIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcblxyXG4gIHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gIH07XHJcblxyXG4gIHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgICB2Y
3XIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxuICB9O1xuXG4gIHZhciB1aWQkMiA9IDA7XG4gIHZhciBwZW5kaW5nQ2xlYW51cERlcHMgPSBbXTtcbiAgdmFyIGNsZWFudXBEZXBzID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwZW5kaW5nQ2xlYW51cERlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZGVwID0gcGVuZGluZ0NsZWFudXBEZXBzW2ldO1xuICAgICAgICAgIGRlcC5zdWJzID0gZGVwLnN1YnMuZmlsdGVyKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzOyB9KTtcbiAgICAgICAgICBkZXAuX3BlbmRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHBlbmRpbmdDbGVhbnVwRGVwcy5sZW5ndGggPSAwO1xuICB9O1xuICAvKipcbiAgICogQSBkZXAgaXMgYW4gb2JzZXJ2YWJsZSB0aGF0IGNhbiBoYXZlIG11bHRpcGxlXG4gICAqIGRpcmVjdGl2ZXMgc3Vic2NyaWJpbmcgdG8gaXQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdmFyIERlcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIERlcCgpIHtcbiAgICAgICAgICAvLyBwZW5kaW5nIHN1YnMgY2xlYW51cFxuICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlkID0gdWlkJDIrKztcbiAgICAgICAgICB0aGlzLnN1YnMgPSBbXTtcbiAgICAgIH1cbiAgICAgIERlcC5wcm90b3R5cGUuYWRkU3ViID0gZnVuY3Rpb24gKHN1Yikge1xuICAgICAgICAgIHRoaXMuc3Vicy5wdXNoKHN1Yik7XG4gICAgICB9O1xuICAgICAgRGVwLnByb3RvdHlwZS5yZW1vdmVTdWIgPSBmdW5jdGlvbiAoc3ViKSB7XG4gICAgICAgICAgLy8gIzEyNjk2IGRlcHMgd2l0aCBtYXNzaXZlIGFtb3VudCBvZiBzdWJzY3JpYmVycyBhcmUgZXh0cmVtZWx5IHNsb3cgdG9cbiAgICAgICAgICAvLyBjbGVhbiB1cCBpbiBDaHJvbWl1bVxuICAgICAgICAgIC8vIHRvIHdvcmthcm91bmQgdGhpcywgd2UgdW5zZXQgdGhlIHN1YiBmb3Igbm93LCBhbmQgY2xlYXIgdGhlbSBvblxuICAgICAgICAgIC8vIG5leHQgc2NoZWR1bGVyIGZsdXNoLlxuICAgICAgICAgIHRoaXMuc3Vic1t0aGlzLnN1YnMuaW5kZXhPZihzdWIpXSA9IG51bGw7XG4gICAgICAgICAgaWYgKCF0aGlzLl9wZW5kaW5nKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICBwZW5kaW5nQ2xlYW51cERlcHMucHVzaCh0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICB9O1xuICAgICAgRGVwLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiAoaW5mbykge1xuICAgICAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgICAgICAgIERlcC50YXJnZXQuYWRkRGVwKHRoaXMpO1xuICAgICAgICAgICAgICBpZiAoaW5mbyAmJiBEZXAudGFyZ2V0Lm9uVHJhY2spIHtcbiAgICAgICAgICAgICAgICAgIERlcC50YXJnZXQub25UcmFjayhfX2Fzc2lnbih7IGVmZmVjdDogRGVwLnRhcmdldCB9LCBpbmZvKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9O1xuICAgICAgRGVwLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiAoaW5mbykge1xuICAgICAgICAgIC8vIHN0YWJpbGl6ZSB0aGUgc3Vic2NyaWJlciBsaXN0IGZpcnN0XG4gICAgICAgICAgdmFyIHN1YnMgPSB0aGlzLnN1YnMuZmlsdGVyKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzOyB9KTtcbiAgICAgICAgICBpZiAoIWNvbmZpZy5hc3luYykge1xuICAgICAgICAgICAgICAvLyBzdWJzIGFyZW4ndCBzb3J0ZWQgaW4gc2NoZWR1bGVyIGlmIG5vdCBydW5uaW5nIGFzeW5jXG4gICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gc29ydCB0aGVtIG5vdyB0byBtYWtlIHN1cmUgdGhleSBmaXJlIGluIGNvcnJlY3RcbiAgICAgICAgICAgICAgLy8gb3JkZXJcbiAgICAgICAgICAgICAgc3Vicy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmlkIC0gYi5pZDsgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc3Vicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFyIHN1YiA9IHN1YnNbaV07XG4gICAgICAgICAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgICAgICAgICAgICBzdWIub25UcmlnZ2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgc3ViLm9uVHJpZ2dlcihfX2Fzc2lnbih7IGVmZmVjdDogc3Vic1tpXSB9LCBpbmZvKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3ViLnVwZGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gRGVwO1xuICB9KCkpO1xuICAvLyBUaGUgY3VycmVudCB0YXJnZXQgd2F0Y2hlciBiZWluZyBldmFsdWF0ZWQuXG4gIC8vIFRoaXMgaXMgZ2xvYmFsbHkgdW5pcXVlIGJlY2F1c2Ugb25seSBvbmUgd2F0Y2hlclxuICAvLyBjYW4gYmUgZXZhbHVhdGVkIGF0IGEgdGltZS5cbiAgRGVwLnRhcmdldCA9IG51bGw7XG4gIHZhciB0YXJnZXRTdGFjayA9IFtdO1xuICBmdW5jdGlvbiBwdXNoVGFyZ2V0KHRhcmdldCkge1xuICAgICAgdGFyZ2V0U3RhY2sucHVzaCh0YXJnZXQpO1xuICAgICAgRGVwLnRhcmdldCA9IHRhcmdldDtcbiAgfVxuICBmdW5jdGlvbiBwb3BUYXJnZXQoKSB7XG4gICAgICB0YXJnZXRTdGFjay5wb3AoKTtcbiAgICAgIERlcC50YXJnZXQgPSB0YXJnZXRTdGFja1t0YXJnZXRTdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIC8qXG4gICAqIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aFxuICAgKiBkeW5hbWljYWxseSBhY2Nlc3NpbmcgbWV0aG9kcyBvbiBBcnJheSBwcm90b3R5cGVcbiAgICovXG4gIHZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuICB2YXIgYXJyYXlNZXRob2RzID0gT2JqZWN0LmNyZWF0ZShhcnJheVByb3RvKTtcbiAgdmFyIG1ldGhvZHNUb1BhdGNoID0gW1xuICAgICAgJ3B1c2gnLFxuICAgICAgJ3BvcCcsXG4gICAgICAnc2hpZnQnLFxuICAgICAgJ3Vuc2hpZnQnLFxuICAgICAgJ3NwbGljZScsXG4gICAgICAnc29ydCcsXG4gICAgICAncmV2ZXJzZSdcbiAgXTtcbiAgLyoqXG4gICAqIEludGVyY2VwdCBtdXRhdGluZyBtZXRob2RzIGFuZCBlbWl0IGV2ZW50c1xuICAgKi9cbiAgbWV0aG9kc1RvUGF0Y2guZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG4gICAgICAvLyBjYWNoZSBvcmlnaW5hbCBtZXRob2RcbiAgICAgIHZhciBvcmlnaW5hbCA9IGFycmF5UHJvdG9bbWV0aG9kXTtcbiAgICAgIGRlZihhcnJheU1ldGhvZHMsIG1ldGhvZCwgZnVuY3Rpb24gbXV0YXRvcigpIHtcbiAgICAgICAgICB2Y
3XIgYXJncyA9IFtdO1xuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgIHZhciBvYiA9IHRoaXMuX19vYl9fO1xuICAgICAgICAgIHZhciBpbnNlcnRlZDtcbiAgICAgICAgICBzd2l0Y2ggKG1ldGhvZCkge1xuICAgICAgICAgICAgICBjYXNlICdwdXNoJzpcbiAgICAgICAgICAgICAgY2FzZSAndW5zaGlmdCc6XG4gICAgICAgICAgICAgICAgICBpbnNlcnRlZCA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnc3BsaWNlJzpcbiAgICAgICAgICAgICAgICAgIGluc2VydGVkID0gYXJncy5zbGljZSgyKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5zZXJ0ZWQpXG4gICAgICAgICAgICAgIG9iLm9ic2VydmVBcnJheShpbnNlcnRlZCk7XG4gICAgICAgICAgLy8gbm90aWZ5IGNoYW5nZVxuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb2IuZGVwLm5vdGlmeSh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5IG11dGF0aW9uXCIgLyogVHJpZ2dlck9wVHlwZXMuQVJSQVlfTVVUQVRJT04gKi8sXG4gICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMsXG4gICAgICAgICAgICAgICAgICBrZXk6IG1ldGhvZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICB9KTtcblxuICB2YXIgYXJyYXlLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXJyYXlNZXRob2RzKTtcbiAgdmFyIE5PX0lOSVRJQUxfVkFMVUUgPSB7fTtcbiAgLyoqXG4gICAqIEluIHNvbWUgY2FzZXMgd2UgbWF5IHdhbnQgdG8gZGlzYWJsZSBvYnNlcnZhdGlvbiBpbnNpZGUgYSBjb21wb25lbnQnc1xuICAgKiB1cGRhdGUgY29tcHV0YXRpb24uXG4gICAqL1xuICB2YXIgc2hvdWxkT2JzZXJ2ZSA9IHRydWU7XG4gIGZ1bmN0aW9uIHRvZ2dsZU9ic2VydmluZyh2YWx1ZSkge1xuICAgICAgc2hvdWxkT2JzZXJ2ZSA9IHZhbHVlO1xuICB9XG4gIC8vIHNzciBtb2NrIGRlcFxuICB2YXIgbW9ja0RlcCA9IHtcbiAgICAgIG5vdGlmeTogbm9vcCxcbiAgICAgIGRlcGVuZDogbm9vcCxcbiAgICAgIGFkZFN1Yjogbm9vcCxcbiAgICAgIHJlbW92ZVN1Yjogbm9vcFxuICB9O1xuICAvKipcbiAgICogT2JzZXJ2ZXIgY2xhc3MgdGhhdCBpcyBhdHRhY2hlZCB0byBlYWNoIG9ic2VydmVkXG4gICAqIG9iamVjdC4gT25jZSBhdHRhY2hlZCwgdGhlIG9ic2VydmVyIGNvbnZlcnRzIHRoZSB0YXJnZXRcbiAgICogb2JqZWN0J3MgcHJvcGVydHkga2V5cyBpbnRvIGdldHRlci9zZXR0ZXJzIHRoYXRcbiAgICogY29sbGVjdCBkZXBlbmRlbmNpZXMgYW5kIGRpc3BhdGNoIHVwZGF0ZXMuXG4gICAqL1xuICB2YXIgT2JzZXJ2ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBPYnNlcnZlcih2YWx1ZSwgc2hhbGxvdywgbW9jaykge1xuICAgICAgICAgIGlmIChzaGFsbG93ID09PSB2b2lkIDApIHsgc2hhbGxvdyA9IGZhbHNlOyB9XG4gICAgICAgICAgaWYgKG1vY2sgPT09IHZvaWQgMCkgeyBtb2NrID0gZmFsc2U7IH1cbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgdGhpcy5zaGFsbG93ID0gc2hhbGxvdztcbiAgICAgICAgICB0aGlzLm1vY2sgPSBtb2NrO1xuICAgICAgICAgIC8vIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICAgIHRoaXMuZGVwID0gbW9jayA/IG1vY2tEZXAgOiBuZXcgRGVwKCk7XG4gICAgICAgICAgdGhpcy52bUNvdW50ID0gMDtcbiAgICAgICAgICBkZWYodmFsdWUsICdfX29iX18nLCB0aGlzKTtcbiAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgaWYgKCFtb2NrKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5fX3Byb3RvX18gPSBhcnJheU1ldGhvZHM7XG4gICAgICAgICAgICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1wcm90byAqL1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheUtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBhcnJheUtleXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlZih2YWx1ZSwga2V5LCBhcnJheU1ldGhvZHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghc2hhbGxvdykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5vYnNlcnZlQXJyYXkodmFsdWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICogV2FsayB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIGFuZCBjb252ZXJ0IHRoZW0gaW50b1xuICAgICAgICAgICAgICAgKiBnZXR0ZXIvc2V0dGVycy4gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW5cbiAgICAgICAgICAgICAgICogdmFsdWUgdHlwZSBpcyBPYmplY3QuXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICB2Y
3XIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICAgIGRlZmluZVJlYWN0aXZlKHZhbHVlLCBrZXksIE5PX0lOSVRJQUxfVkFMVUUsIHVuZGVmaW5lZCwgc2hhbGxvdywgbW9jayk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAqIE9ic2VydmUgYSBsaXN0IG9mIEFycmF5IGl0ZW1zLlxuICAgICAgICovXG4gICAgICBPYnNlcnZlci5wcm90b3R5cGUub2JzZXJ2ZUFycmF5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZSh2YWx1ZVtpXSwgZmFsc2UsIHRoaXMubW9jayk7XG4gICAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBPYnNlcnZlcjtcbiAgfSgpKTtcbiAgLy8gaGVscGVyc1xuICAvKipcbiAgICogQXR0ZW1wdCB0byBjcmVhdGUgYW4gb2JzZXJ2ZXIgaW5zdGFuY2UgZm9yIGEgdmFsdWUsXG4gICAqIHJldHVybnMgdGhlIG5ldyBvYnNlcnZlciBpZiBzdWNjZXNzZnVsbHkgb2JzZXJ2ZWQsXG4gICAqIG9yIHRoZSBleGlzdGluZyBvYnNlcnZlciBpZiB0aGUgdmFsdWUgYWxyZWFkeSBoYXMgb25lLlxuICAgKi9cbiAgZnVuY3Rpb24gb2JzZXJ2ZSh2YWx1ZSwgc2hhbGxvdywgc3NyTW9ja1JlYWN0aXZpdHkpIHtcbiAgICAgIGlmICh2YWx1ZSAmJiBoYXNPd24odmFsdWUsICdfX29iX18nKSAmJiB2YWx1ZS5fX29iX18gaW5zdGFuY2VvZiBPYnNlcnZlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5fX29iX187XG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkT2JzZXJ2ZSAmJlxuICAgICAgICAgIChzc3JNb2NrUmVhY3Rpdml0eSB8fCAhaXNTZXJ2ZXJSZW5kZXJpbmcoKSkgJiZcbiAgICAgICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgaXNQbGFpbk9iamVjdCh2YWx1ZSkpICYmXG4gICAgICAgICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSh2YWx1ZSkgJiZcbiAgICAgICAgICAhdmFsdWUuX192X3NraXAgLyogUmVhY3RpdmVGbGFncy5TS0lQICovICYmXG4gICAgICAgICAgIWlzUmVmKHZhbHVlKSAmJlxuICAgICAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBWTm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmVyKHZhbHVlLCBzaGFsbG93LCBzc3JNb2NrUmVhY3Rpdml0eSk7XG4gICAgICB9XG4gIH1cbiAgLyoqXG4gICAqIERlZmluZSBhIHJlYWN0aXZlIHByb3BlcnR5IG9uIGFuIE9iamVjdC5cbiAgICovXG4gIGZ1bmN0aW9uIGRlZmluZVJlYWN0aXZlKG9iaiwga2V5LCB2YWwsIGN1c3RvbVNldHRlciwgc2hhbGxvdywgbW9jaywgb2JzZXJ2ZUV2ZW5JZlNoYWxsb3cpIHtcbiAgICAgIGlmIChvYnNlcnZlRXZlbklmU2hhbGxvdyA9PT0gdm9pZCAwKSB7IG9ic2VydmVFdmVuSWZTaGFsbG93ID0gZmFsc2U7IH1cbiAgICAgIHZhciBkZXAgPSBuZXcgRGVwKCk7XG4gICAgICB2Y
3XIgcHJvcGVydHkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KTtcbiAgICAgIGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5jb25maWd1cmFibGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gY2F0ZXIgZm9yIHByZS1kZWZpbmVkIGdldHRlci9zZXR0ZXJzXG4gICAgICB2YXIgZ2V0dGVyID0gcHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0O1xuICAgICAgdmFyIHNldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5LnNldDtcbiAgICAgIGlmICgoIWdldHRlciB8fCBzZXR0ZXIpICYmXG4gICAgICAgICAgKHZhbCA9PT0gTk9fSU5JVElBTF9WQUxVRSB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSkge1xuICAgICAgICAgIHZhbCA9IG9ialtrZXldO1xuICAgICAgfVxuICAgICAgdmFyIGNoaWxkT2IgPSBzaGFsbG93ID8gdmFsICYmIHZhbC5fX29iX18gOiBvYnNlcnZlKHZhbCwgZmFsc2UsIG1vY2spO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiByZWFjdGl2ZUdldHRlcigpIHtcbiAgICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgICAgICAgICAgaWYgKERlcC50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZXAuZGVwZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBvYmosXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2V0XCIgLyogVHJhY2tPcFR5cGVzLkdFVCAqLyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXlcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChjaGlsZE9iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGRPYi5kZXAuZGVwZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZEFycmF5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGlzUmVmKHZhbHVlKSAmJiAhc2hhbGxvdyA/IHZhbHVlLnZhbHVlIDogdmFsdWU7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlU2V0dGVyKG5ld1ZhbCkge1xuICAgICAgICAgICAgICB2Y
3XIgdmFsdWUgPSBnZXR0ZXIgPyBnZXR0ZXIuY2FsbChvYmopIDogdmFsO1xuICAgICAgICAgICAgICBpZiAoIWhhc0NoYW5nZWQodmFsdWUsIG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY3VzdG9tU2V0dGVyKSB7XG4gICAgICAgICAgICAgICAgICBjdXN0b21TZXR0ZXIoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoc2V0dGVyKSB7XG4gICAgICAgICAgICAgICAgICBzZXR0ZXIuY2FsbChvYmosIG5ld1ZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZiAoZ2V0dGVyKSB7XG4gICAgICAgICAgICAgICAgICAvLyAjNzk4MTogZm9yIGFjY2Vzc29yIHByb3BlcnRpZXMgd2l0aG91dCBzZXR0ZXJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIGlmICghc2hhbGxvdyAmJiBpc1JlZih2YWx1ZSkgJiYgIWlzUmVmKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFsID0gbmV3VmFsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNoaWxkT2IgPSBzaGFsbG93ID8gbmV3VmFsICYmIG5ld1ZhbC5fX29iX18gOiBvYnNlcnZlKG5ld1ZhbCwgZmFsc2UsIG1vY2spO1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkZXAubm90aWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNldFwiIC8qIFRyaWdnZXJPcFR5cGVzLlNFVCAqLyxcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9iaixcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsLFxuICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZXA7XG4gIH1cbiAgZnVuY3Rpb24gc2V0KHRhcmdldCwga2V5LCB2YWwpIHtcbiAgICAgIGlmICgoaXNVbmRlZih0YXJnZXQpIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpKSB7XG4gICAgICAgICAgd2FybiQyKFwiQ2Fubm90IHNldCByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIuY29uY2F0KHRhcmdldCkpO1xuICAgICAgfVxuICAgICAgaWYgKGlzUmVhZG9ubHkodGFyZ2V0KSkge1xuICAgICAgICAgIHdhcm4kMihcIlNldCBvcGVyYXRpb24gb24ga2V5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgZmFpbGVkOiB0YXJnZXQgaXMgcmVhZG9ubHkuXCIpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2Y
3XIgb2IgPSB0YXJnZXQuX19vYl9fO1xuICAgICAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0Lmxlbmd0aCA9IE1hdGgubWF4KHRhcmdldC5sZW5ndGgsIGtleSk7XG4gICAgICAgICAgdGFyZ2V0LnNwbGljZShrZXksIDEsIHZhbCk7XG4gICAgICAgICAgLy8gd2hlbiBtb2NraW5nIGZvciBTU1IsIGFycmF5IG1ldGhvZHMgYXJlIG5vdCBoaWphY2tlZFxuICAgICAgICAgIGlmIChvYiAmJiAhb2Iuc2hhbGxvdyAmJiBvYi5tb2NrKSB7XG4gICAgICAgICAgICAgIG9ic2VydmUodmFsLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICBpZiAoa2V5IGluIHRhcmdldCAmJiAhKGtleSBpbiBPYmplY3QucHJvdG90eXBlKSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0Ll9pc1Z1ZSB8fCAob2IgJiYgb2Iudm1Db3VudCkpIHtcbiAgICAgICAgICB3YXJuJDIoJ0F2b2lkIGFkZGluZyByZWFjdGl2ZSBwcm9wZXJ0aWVzIHRvIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgICAgICAgICAgICAgJ2F0IHJ1bnRpbWUgLSBkZWNsYXJlIGl0IHVwZnJvbnQgaW4gdGhlIGRhdGEgb3B0aW9uLicpO1xuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICBpZiAoIW9iKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cbiAgICAgIGRlZmluZVJlYWN0aXZlKG9iLnZhbHVlLCBrZXksIHZhbCwgdW5kZWZpbmVkLCBvYi5zaGFsbG93LCBvYi5tb2NrKTtcbiAgICAgIHtcbiAgICAgICAgICBvYi5kZXAubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogXCJhZGRcIiAvKiBUcmlnZ2VyT3BUeXBlcy5BREQgKi8sXG4gICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgbmV3VmFsdWU6IHZhbCxcbiAgICAgICAgICAgICAgb2xkVmFsdWU6IHVuZGVmaW5lZFxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbDtcbiAgfVxuICBmdW5jdGlvbiBkZWwodGFyZ2V0LCBrZXkpIHtcbiAgICAgIGlmICgoaXNVbmRlZih0YXJnZXQpIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpKSB7XG4gICAgICAgICAgd2FybiQyKFwiQ2Fubm90IGRlbGV0ZSByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIuY29uY2F0KHRhcmdldCkpO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0LnNwbGljZShrZXksIDEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBvYiA9IHRhcmdldC5fX29iX187XG4gICAgICBpZiAodGFyZ2V0Ll9pc1Z1ZSB8fCAob2IgJiYgb2Iudm1Db3VudCkpIHtcbiAgICAgICAgICB3YXJuJDIoJ0F2b2lkIGRlbGV0aW5nIHByb3BlcnRpZXMgb24gYSBWdWUgaW5zdGFuY2Ugb3IgaXRzIHJvb3QgJGRhdGEgJyArXG4gICAgICAgICAgICAgICAgICAnLSBqdXN0IHNldCBpdCB0byBudWxsLicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpc1JlYWRvbmx5KHRhcmdldCkpIHtcbiAgICAgICAgICB3YXJuJDIoXCJEZWxldGUgb3BlcmF0aW9uIG9uIGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGZhaWxlZDogdGFyZ2V0IGlzIHJlYWRvbmx5LlwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGVsZXRlIHRhcmdldFtrZXldO1xuICAgICAgaWYgKCFvYikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHtcbiAgICAgICAgICBvYi5kZXAubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogXCJkZWxldGVcIiAvKiBUcmlnZ2VyT3BUeXBlcy5ERUxFVEUgKi8sXG4gICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgICBrZXk6IGtleVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICB9XG4gIC8qKlxuICAgKiBDb2xsZWN0IGRlcGVuZGVuY2llcyBvbiBhcnJheSBlbGVtZW50cyB3aGVuIHRoZSBhcnJheSBpcyB0b3VjaGVkLCBzaW5jZVxuICAgKiB3ZSBjYW5ub3QgaW50ZXJjZXB0IGFycmF5IGVsZW1lbnQgYWNjZXNzIGxpa2UgcHJvcGVydHkgZ2V0dGVycy5cbiAgICovXG4gIGZ1bmN0aW9uIGRlcGVuZEFycmF5KHZhbHVlKSB7XG4gICAgICBmb3IgKHZhciBlID0gdm9pZCAwLCBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGUgPSB2YWx1ZVtpXTtcbiAgICAgICAgICBpZiAoZSAmJiBlLl9fb2JfXykge1xuICAgICAgICAgICAgICBlLl9fb2JfXy5kZXAuZGVwZW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0FycmF5KGUpKSB7XG4gICAgICAgICAgICAgIGRlcGVuZEFycmF5KGUpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWN0aXZlKHRhcmdldCkge1xuICAgICAgbWFrZVJlYWN0aXZlKHRhcmdldCwgZmFsc2UpO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGEgc2hhbGxvd2x5LXJlYWN0aXZlIGNvcHkgb2YgdGhlIG9yaWdpbmFsIG9iamVjdCwgd2hlcmUgb25seSB0aGUgcm9vdFxuICAgKiBsZXZlbCBwcm9wZXJ0aWVzIGFyZSByZWFjdGl2ZS4gSXQgYWxzbyBkb2VzIG5vdCBhdXRvLXVud3JhcCByZWZzIChldmVuIGF0IHRoZVxuICAgKiByb290IGxldmVsKS5cbiAgICovXG4gIGZ1bmN0aW9uIHNoYWxsb3dSZWFjdGl2ZSh0YXJnZXQpIHtcbiAgICAgIG1ha2VSZWFjdGl2ZSh0YXJnZXQsIHRydWUpO1xuICAgICAgZGVmKHRhcmdldCwgXCJfX3ZfaXNTaGFsbG93XCIgLyogUmVhY3RpdmVGbGFncy5JU19TSEFMTE9XICovLCB0cnVlKTtcbiAgICAgIHJldHVybi
3B0YXJnZXQ7XG4gIH1cbiAgZnVuY3Rpb24gbWFrZVJlYWN0aXZlKHRhcmdldCwgc2hhbGxvdykge1xuICAgICAgLy8gaWYgdHJ5aW5nIHRvIG9ic2VydmUgYSByZWFkb25seSBwcm94eSwgcmV0dXJuIHRoZSByZWFkb25seSB2ZXJzaW9uLlxuICAgICAgaWYgKCFpc1JlYWRvbmx5KHRhcmdldCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChpc0FycmF5KHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgIHdhcm4kMihcIkF2b2lkIHVzaW5nIEFycmF5IGFzIHJvb3QgdmFsdWUgZm9yIFwiLmNvbmNhdChzaGFsbG93ID8gXCJzaGFsbG93UmVhY3RpdmUoKVwiIDogXCJyZWFjdGl2ZSgpXCIsIFwiIGFzIGl0IGNhbm5vdCBiZSB0cmFja2VkIGluIHdhdGNoKCkgb3Igd2F0Y2hFZmZlY3QoKS4gVXNlIFwiKS5jb25jYXQoc2hhbGxvdyA/IFwic2hhbGxvd1JlZigpXCIgOiBcInJlZigpXCIsIFwiIGluc3RlYWQuIFRoaXMgaXMgYSBWdWUtMi1vbmx5IGxpbWl0YXRpb24uXCIpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgZXhpc3RpbmdPYiA9IHRhcmdldCAmJiB0YXJnZXQuX19vYl9fO1xuICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdPYiAmJiBleGlzdGluZ09iLnNoYWxsb3cgIT09IHNoYWxsb3cpIHtcbiAgICAgICAgICAgICAgICAgIHdhcm4kMihcIlRhcmdldCBpcyBhbHJlYWR5IGEgXCIuY29uY2F0KGV4aXN0aW5nT2Iuc2hhbGxvdyA/IFwiXCIgOiBcIm5vbi1cIiwgXCJzaGFsbG93IHJlYWN0aXZlIG9iamVjdCwgYW5kIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gXCIpLmNvbmNhdChzaGFsbG93ID8gXCJcIiA6IFwibm9uLVwiLCBcInNoYWxsb3cuXCIpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2Y
3XIgb2IgPSBvYnNlcnZlKHRhcmdldCwgc2hhbGxvdywgaXNTZXJ2ZXJSZW5kZXJpbmcoKSAvKiBzc3IgbW9jayByZWFjdGl2aXR5ICovKTtcbiAgICAgICAgICBpZiAoIW9iKSB7XG4gICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gbnVsbCB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICB3YXJuJDIoXCJ2YWx1ZSBjYW5ub3QgYmUgbWFkZSByZWFjdGl2ZTogXCIuY29uY2F0KFN0cmluZyh0YXJnZXQpKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGlzQ29sbGVjdGlvblR5cGUodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgd2FybiQyKFwiVnVlIDIgZG9lcyBub3Qgc3VwcG9ydCByZWFjdGl2ZSBjb2xsZWN0aW9uIHR5cGVzIHN1Y2ggYXMgTWFwIG9yIFNldC5cIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaXNSZWFjdGl2ZSh2YWx1ZSkge1xuICAgICAgaWYgKGlzUmVhZG9ubHkodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGlzUmVhY3RpdmUodmFsdWVbXCJfX3ZfcmF3XCIgLyogUmVhY3RpdmVGbGFncy5SQVcgKi9dKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX29iX18pO1xuICB9XG4gIGZ1bmN0aW9uIGlzU2hhbGxvdyh2YWx1ZSkge1xuICAgICAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fdl9pc1NoYWxsb3cpO1xuICB9XG4gIGZ1bmN0aW9uIGlzUmVhZG9ubHkodmFsdWUpIHtcbiAgICAgIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX3ZfaXNSZWFkb25seSk7XG4gIH1cbiAgZnVuY3Rpb24gaXNQcm94eSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzUmVhY3RpdmUodmFsdWUpIHx8IGlzUmVhZG9ubHkodmFsdWUpO1xuICB9XG4gIGZ1bmN0aW9uIHRvUmF3KG9ic2VydmVkKSB7XG4gICAgICB2Y
3XIgcmF3ID0gb2JzZXJ2ZWQgJiYgb2JzZXJ2ZWRbXCJfX3ZfcmF3XCIgLyogUmVhY3RpdmVGbGFncy5SQVcgKi9dO1xuICAgICAgcmV0dXJuIHJhdyA/IHRvUmF3KHJhdykgOiBvYnNlcnZlZDtcbiAgfVxuICBmdW5jdGlvbiBtYXJrUmF3KHZhbHVlKSB7XG4gICAgICAvLyBub24tZXh0ZW5zaWJsZSBvYmplY3RzIHdvbid0IGJlIG9ic2VydmVkIGFueXdheVxuICAgICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUodmFsdWUpKSB7XG4gICAgICAgICAgZGVmKHZhbHVlLCBcIl9fdl9za2lwXCIgLyogUmVhY3RpdmVGbGFncy5TS0lQICovLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBmdW5jdGlvbiBpc0NvbGxlY3Rpb25UeXBlKHZhbHVlKSB7XG4gICAgICB2YXIgdHlwZSA9IHRvUmF3VHlwZSh2YWx1ZSk7XG4gICAgICByZXR1cm4gKHR5cGUgPT09ICdNYXAnIHx8IHR5cGUgPT09ICdXZWFrTWFwJyB8fCB0eXBlID09PSAnU2V0JyB8fCB0eXBlID09PSAnV2Vha1NldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdmFyIFJlZkZsYWcgPSBcIl9fdl9pc1JlZlwiO1xuICBmdW5jdGlvbiBpc1JlZihyKSB7XG4gICAgICByZXR1cm4gISEociAmJiByLl9fdl9pc1JlZiA9PT0gdHJ1ZSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVmJDEodmFsdWUpIHtcbiAgICAgIHJldHVybiBjcmVhdGVSZWYodmFsdWUsIGZhbHNlKTtcbiAgfVxuICBmdW5jdGlvbiBzaGFsbG93UmVmKHZhbHVlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlUmVmKHZhbHVlLCB0cnVlKTtcbiAgfVxuICBmdW5jdGlvbiBjcmVhdGVSZWYocmF3VmFsdWUsIHNoYWxsb3cpIHtcbiAgICAgIGlmIChpc1JlZihyYXdWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gcmF3VmFsdWU7XG4gICAgICB9XG4gICAgICB2Y
3XIgcmVmID0ge307XG4gICAgICBkZWYocmVmLCBSZWZGbGFnLCB0cnVlKTtcbiAgICAgIGRlZihyZWYsIFwiX192X2lzU2hhbGxvd1wiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfU0hBTExPVyAqLywgc2hhbGxvdyk7XG4gICAgICBkZWYocmVmLCAnZGVwJywgZGVmaW5lUmVhY3RpdmUocmVmLCAndmFsdWUnLCByYXdWYWx1ZSwgbnVsbCwgc2hhbGxvdywgaXNTZXJ2ZXJSZW5kZXJpbmcoKSkpO1xuICAgICAgcmV0dXJuIHJlZjtcbiAgfVxuICBmdW5jdGlvbiB0cmlnZ2VyUmVmKHJlZikge1xuICAgICAgaWYgKCFyZWYuZGVwKSB7XG4gICAgICAgICAgd2FybiQyKFwicmVjZWl2ZWQgb2JqZWN0IGlzIG5vdCBhIHRyaWdnZXJhYmxlIHJlZi5cIik7XG4gICAgICB9XG4gICAgICB7XG4gICAgICAgICAgcmVmLmRlcCAmJlxuICAgICAgICAgICAgICByZWYuZGVwLm5vdGlmeSh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInNldFwiIC8qIFRyaWdnZXJPcFR5cGVzLlNFVCAqLyxcbiAgICAgICAgICAgICAgICAgIHRhcmdldDogcmVmLFxuICAgICAgICAgICAgICAgICAga2V5OiAndmFsdWUnXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIHVucmVmKHJlZikge1xuICAgICAgcmV0dXJuIGlzUmVmKHJlZikgPyByZWYudmFsdWUgOiByZWY7XG4gIH1cbiAgZnVuY3Rpb24gcHJveHlSZWZzKG9iamVjdFdpdGhSZWZzKSB7XG4gICAgICBpZiAoaXNSZWFjdGl2ZShvYmplY3RXaXRoUmVmcykpIHtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0V2l0aFJlZnM7XG4gICAgICB9XG4gICAgICB2Y
3XIgcHJveHkgPSB7fTtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0V2l0aFJlZnMpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgcHJveHlXaXRoUmVmVW53cmFwKHByb3h5LCBvYmplY3RXaXRoUmVmcywga2V5c1tpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJveHk7XG4gIH1cbiAgZnVuY3Rpb24gcHJveHlXaXRoUmVmVW53cmFwKHRhcmdldCwgc291cmNlLCBrZXkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgdmFsID0gc291cmNlW2tleV07XG4gICAgICAgICAgICAgIGlmIChpc1JlZih2YWwpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdmFsLnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFyIG9iID0gdmFsICYmIHZhbC5fX29iX187XG4gICAgICAgICAgICAgICAgICBpZiAob2IpXG4gICAgICAgICAgICAgICAgICAgICAgb2IuZGVwLmRlcGVuZCgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gc291cmNlW2tleV07XG4gICAgICAgICAgICAgIGlmIChpc1JlZihvbGRWYWx1ZSkgJiYgIWlzUmVmKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgb2xkVmFsdWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHNvdXJjZVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBjdXN0b21SZWYoZmFjdG9yeSkge1xuICAgICAgdmFyIGRlcCA9IG5ldyBEZXAoKTtcbiAgICAgIHZhciBfYSA9IGZhY3RvcnkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGVwLmRlcGVuZCh7XG4gICAgICAgICAgICAgICAgICB0YXJnZXQ6IHJlZixcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2V0XCIgLyogVHJhY2tPcFR5cGVzLkdFVCAqLyxcbiAgICAgICAgICAgICAgICAgIGtleTogJ3ZhbHVlJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgICBkZXAubm90aWZ5KHtcbiAgICAgICAgICAgICAgICAgIHRhcmdldDogcmVmLFxuICAgICAgICAgICAgICAgICAgdHlwZTogXCJzZXRcIiAvKiBUcmlnZ2VyT3BUeXBlcy5TRVQgKi8sXG4gICAgICAgICAgICAgICAgICBrZXk6ICd2YWx1ZSdcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgfSksIGdldCA9IF9hLmdldCwgc2V0ID0gX2Euc2V0O1xuICAgICAgdmFyIHJlZiA9IHtcbiAgICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXQoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldCB2YWx1ZShuZXdWYWwpIHtcbiAgICAgICAgICAgICAgc2V0KG5ld1ZhbCk7XG4gICAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGRlZihyZWYsIFJlZkZsYWcsIHRydWUpO1xuICAgICAgcmV0dXJuIHJlZjtcbiAgfVxuICBmdW5jdGlvbiB0b1JlZnMob2JqZWN0KSB7XG4gICAgICBpZiAoIWlzUmVhY3RpdmUob2JqZWN0KSkge1xuICAgICAgICAgIHdhcm4kMihcInRvUmVmcygpIGV4cGVjdHMgYSByZWFjdGl2ZSBvYmplY3QgYnV0IHJlY2VpdmVkIGEgcGxhaW4gb25lLlwiKTtcbiAgICAgIH1cbiAgICAgIHZhciByZXQgPSBpc0FycmF5KG9iamVjdCkgPyBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCkgOiB7fTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICByZXRba2V5XSA9IHRvUmVmKG9iamVjdCwga2V5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gIH1cbiAgZnVuY3Rpb24gdG9SZWYob2JqZWN0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdmFyIHZhbCA9IG9iamVjdFtrZXldO1xuICAgICAgaWYgKGlzUmVmKHZhbCkpIHtcbiAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgdmFyIHJlZiA9IHtcbiAgICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICAgIHZhciB2YWwgPSBvYmplY3Rba2V5XTtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogdmFsO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0IHZhbHVlKG5ld1ZhbCkge1xuICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IG5ld1ZhbDtcbiAgICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZGVmKHJlZiwgUmVmRmxhZywgdHJ1ZSk7XG4gICAgICByZXR1cm4gcmVmO1xuICB9XG5cbiAgdmFyIHJhd1RvUmVhZG9ubHlGbGFnID0gXCJfX3ZfcmF3VG9SZWFkb25seVwiO1xuICB2YXIgcmF3VG9TaGFsbG93UmVhZG9ubHlGbGFnID0gXCJfX3ZfcmF3VG9TaGFsbG93UmVhZG9ubHlcIjtcbiAgZnVuY3Rpb24gcmVhZG9ubHkodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gY3JlYXRlUmVhZG9ubHkodGFyZ2V0LCBmYWxzZSk7XG4gIH1cbiAgZnVuY3Rpb24gY3JlYXRlUmVhZG9ubHkodGFyZ2V0LCBzaGFsbG93KSB7XG4gICAgICBpZiAoIWlzUGxhaW5PYmplY3QodGFyZ2V0KSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgd2FybiQyKFwiVnVlIDIgZG9lcyBub3Qgc3VwcG9ydCByZWFkb25seSBhcnJheXMuXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKGlzQ29sbGVjdGlvblR5cGUodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgd2FybiQyKFwiVnVlIDIgZG9lcyBub3Qgc3VwcG9ydCByZWFkb25seSBjb2xsZWN0aW9uIHR5cGVzIHN1Y2ggYXMgTWFwIG9yIFNldC5cIik7XG4gICAgICAgICAgICAgI
3H1cbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICB3YXJuJDIoXCJ2YWx1ZSBjYW5ub3QgYmUgbWFkZSByZWFkb25seTogXCIuY29uY2F0KHR5cGVvZiB0YXJnZXQpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgICAgaWYgKCFPYmplY3QuaXNFeHRlbnNpYmxlKHRhcmdldCkpIHtcbiAgICAgICAgICB3YXJuJDIoXCJWdWUgMiBkb2VzIG5vdCBzdXBwb3J0IGNyZWF0aW5nIHJlYWRvbmx5IHByb3h5IGZvciBub24tZXh0ZW5zaWJsZSBvYmplY3QuXCIpO1xuICAgICAgfVxuICAgICAgLy8gYWxyZWFkeSBhIHJlYWRvbmx5IG9iamVjdFxuICAgICAgaWYgKGlzUmVhZG9ubHkodGFyZ2V0KSkge1xuICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgICAvLyBhbHJlYWR5IGhhcyBhIHJlYWRvbmx5IHByb3h5XG4gICAgICB2YXIgZXhpc3RpbmdGbGFnID0gc2hhbGxvdyA/IHJhd1RvU2hhbGxvd1JlYWRvbmx5RmxhZyA6IHJhd1RvUmVhZG9ubHlGbGFnO1xuICAgICAgdmFyIGV4aXN0aW5nUHJveHkgPSB0YXJnZXRbZXhpc3RpbmdGbGFnXTtcbiAgICAgIGlmIChleGlzdGluZ1Byb3h5KSB7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nUHJveHk7XG4gICAgICB9XG4gICAgICB2YXIgcHJveHkgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpKTtcbiAgICAgIGRlZih0YXJnZXQsIGV4aXN0aW5nRmxhZywgcHJveHkpO1xuICAgICAgZGVmKHByb3h5LCBcIl9fdl9pc1JlYWRvbmx5XCIgLyogUmVhY3RpdmVGbGFncy5JU19SRUFET05MWSAqLywgdHJ1ZSk7XG4gICAgICBkZWYocHJveHksIFwiX192X3Jhd1wiIC8qIFJlYWN0aXZlRmxhZ3MuUkFXICovLCB0YXJnZXQpO1xuICAgICAgaWYgKGlzUmVmKHRhcmdldCkpIHtcbiAgICAgICAgICBkZWYocHJveHksIFJlZkZsYWcsIHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKHNoYWxsb3cgfHwgaXNTaGFsbG93KHRhcmdldCkpIHtcbiAgICAgICAgICBkZWYocHJveHksIFwiX192X2lzU2hhbGxvd1wiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfU0hBTExPVyAqLywgdHJ1ZSk7XG4gICAgICB9XG4gICAgICB2Y
3XIga2V5cyA9IE9iamVjdC5rZXlzKHRhcmdldCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBkZWZpbmVSZWFkb25seVByb3BlcnR5KHByb3h5LCB0YXJnZXQsIGtleXNbaV0sIHNoYWxsb3cpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb3h5O1xuICB9XG4gIGZ1bmN0aW9uIGRlZmluZVJlYWRvbmx5UHJvcGVydHkocHJveHksIHRhcmdldCwga2V5LCBzaGFsbG93KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJveHksIGtleSwge1xuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgdmFsID0gdGFyZ2V0W2tleV07XG4gICAgICAgICAgICAgIHJldHVybiBzaGFsbG93IHx8ICFpc1BsYWluT2JqZWN0KHZhbCkgPyB2YWwgOiByZWFkb25seSh2YWwpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHdhcm4kMihcIlNldCBvcGVyYXRpb24gb24ga2V5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgZmFpbGVkOiB0YXJnZXQgaXMgcmVhZG9ubHkuXCIpKTtcbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWN0aXZlLWNvcHkgb2YgdGhlIG9yaWdpbmFsIG9iamVjdCwgd2hlcmUgb25seSB0aGUgcm9vdCBsZXZlbFxuICAgKiBwcm9wZXJ0aWVzIGFyZSByZWFkb25seSwgYW5kIGRvZXMgTk9UIHVud3JhcCByZWZzIG5vciByZWN1cnNpdmVseSBjb252ZXJ0XG4gICAqIHJldHVybmVkIHByb3BlcnRpZXMuXG4gICAqIFRoaXMgaXMgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIHByb3BzIHByb3h5IG9iamVjdCBmb3Igc3RhdGVmdWwgY29tcG9uZW50cy5cbiAgICovXG4gIGZ1bmN0aW9uIHNoYWxsb3dSZWFkb25seSh0YXJnZXQpIHtcbiAgICAgIHJldHVybiBjcmVhdGVSZWFkb25seSh0YXJnZXQsIHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZWQoZ2V0dGVyT3JPcHRpb25zLCBkZWJ1Z09wdGlvbnMpIHtcbiAgICAgIHZhciBnZXR0ZXI7XG4gICAgICB2Y
3XIgc2V0dGVyO1xuICAgICAgdmFyIG9ubHlHZXR0ZXIgPSBpc0Z1bmN0aW9uKGdldHRlck9yT3B0aW9ucyk7XG4gICAgICBpZiAob25seUdldHRlcikge1xuICAgICAgICAgIGdldHRlciA9IGdldHRlck9yT3B0aW9ucztcbiAgICAgICAgICBzZXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICB3YXJuJDIoJ1dyaXRlIG9wZXJhdGlvbiBmYWlsZWQ6IGNvbXB1dGVkIHZhbHVlIGlzIHJlYWRvbmx5Jyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgZ2V0dGVyID0gZ2V0dGVyT3JPcHRpb25zLmdldDtcbiAgICAgICAgICBzZXR0ZXIgPSBnZXR0ZXJPck9wdGlvbnMuc2V0O1xuICAgICAgfVxuICAgICAgdmFyIHdhdGNoZXIgPSBpc1NlcnZlclJlbmRlcmluZygpXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiBuZXcgV2F0Y2hlcihjdXJyZW50SW5zdGFuY2UsIGdldHRlciwgbm9vcCwgeyBsYXp5OiB0cnVlIH0pO1xuICAgICAgaWYgKHdhdGNoZXIgJiYgZGVidWdPcHRpb25zKSB7XG4gICAgICAgICAgd2F0Y2hlci5vblRyYWNrID0gZGVidWdPcHRpb25zLm9uVHJhY2s7XG4gICAgICAgICAgd2F0Y2hlci5vblRyaWdnZXIgPSBkZWJ1Z09wdGlvbnMub25UcmlnZ2VyO1xuICAgICAgfVxuICAgICAgdmFyIHJlZiA9IHtcbiAgICAgICAgICAvLyBzb21lIGxpYnMgcmVseSBvbiB0aGUgcHJlc2VuY2UgZWZmZWN0IGZvciBjaGVja2luZyBjb21wdXRlZCByZWZzXG4gICAgICAgICAgLy8gZnJvbSBub3JtYWwgcmVmcywgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IG1hdHRlclxuICAgICAgICAgIGVmZmVjdDogd2F0Y2hlcixcbiAgICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICAgIGlmICh3YXRjaGVyKSB7XG4gICAgICAgICAgICAgICAgICBpZiAod2F0Y2hlci5kaXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAgIHdhdGNoZXIuZXZhbHVhdGUoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKERlcC50YXJnZXQub25UcmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBEZXAudGFyZ2V0Lm9uVHJhY2soe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0OiBEZXAudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiByZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImdldFwiIC8qIFRyYWNrT3BUeXBlcy5HRVQgKi8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICd2YWx1ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIHdhdGNoZXIuZGVwZW5kKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gd2F0Y2hlci52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXIoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0IHZhbHVlKG5ld1ZhbCkge1xuICAgICAgICAgICAgICBzZXR0ZXIobmV3VmFsKTtcbiAgICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZGVmKHJlZiwgUmVmRmxhZywgdHJ1ZSk7XG4gICAgICBkZWYocmVmLCBcIl9fdl9pc1JlYWRvbmx5XCIgLyogUmVhY3RpdmVGbGFncy5JU19SRUFET05MWSAqLywgb25seUdldHRlcik7XG4gICAgICByZXR1cm4gcmVmO1xuICB9XG5cbiAgdmFyIG1hcms7XG4gIHZhciBtZWFzdXJlO1xuICB7XG4gICAgICB2Y
3XIgcGVyZl8xID0gaW5Ccm93c2VyICYmIHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHBlcmZfMSAmJlxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBwZXJmXzEubWFyayAmJlxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBwZXJmXzEubWVhc3VyZSAmJlxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBwZXJmXzEuY2xlYXJNYXJrcyAmJlxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBwZXJmXzEuY2xlYXJNZWFzdXJlcykge1xuICAgICAgICAgIG1hcmsgPSBmdW5jdGlvbiAodGFnKSB7IHJldHVybiBwZXJmXzEubWFyayh0YWcpOyB9O1xuICAgICAgICAgIG1lYXN1cmUgPSBmdW5jdGlvbiAobmFtZSwgc3RhcnRUYWcsIGVuZFRhZykge1xuICAgICAgICAgICAgICBwZXJmXzEubWVhc3VyZShuYW1lLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgICAgICAgICAgcGVyZl8xLmNsZWFyTWFya3Moc3RhcnRUYWcpO1xuICAgICAgICAgICAgICBwZXJmXzEuY2xlYXJNYXJrcyhlbmRUYWcpO1xuICAgICAgICAgICAgICAvLyBwZXJmLmNsZWFyTWVhc3VyZXMobmFtZSlcbiAgICAgICAgICB9O1xuICAgICAgfVxuICB9XG5cbiAgdmFyIG5vcm1hbGl6ZUV2ZW50ID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgcGFzc2l2ZSA9IG5hbWUuY2hhckF0KDApID09PSAnJic7XG4gICAgICBuYW1lID0gcGFzc2l2ZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICAgICAgdmFyIG9uY2UgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJ34nOyAvLyBQcmVmaXhlZCBsYXN0LCBjaGVja2VkIGZpcnN0XG4gICAgICBuYW1lID0gb25jZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICAgICAgdmFyIGNhcHR1cmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyEnO1xuICAgICAgbmFtZSA9IGNhcHR1cmUgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICBvbmNlOiBvbmNlLFxuICAgICAgICAgIGNhcHR1cmU6IGNhcHR1cmUsXG4gICAgICAgICAgcGFzc2l2ZTogcGFzc2l2ZVxuICAgICAgfTtcbiAgfSk7XG4gIGZ1bmN0aW9uIGNyZWF0ZUZuSW52b2tlcihmbnMsIHZtKSB7XG4gICAgICBmdW5jdGlvbiBpbnZva2VyKCkge1xuICAgICAgICAgIHZhciBmbnMgPSBpbnZva2VyLmZucztcbiAgICAgICAgICBpZiAoaXNBcnJheShmbnMpKSB7XG4gICAgICAgICAgICAgIHZhciBjbG9uZWQgPSBmbnMuc2xpY2UoKTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbG9uZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNsb25lZFtpXSwgbnVsbCwgYXJndW1lbnRzLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIC8vIHJldHVybiBoYW5kbGVyIHJldHVybiB2YWx1ZSBmb3Igc2luZ2xlIGhhbmRsZXJzXG4gICAgICAgICAgICAgIHJldHVybiBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhmbnMsIG51bGwsIGFyZ3VtZW50cywgdm0sIFwidi1vbiBoYW5kbGVyXCIpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGludm9rZXIuZm5zID0gZm5zO1xuICAgICAgcmV0dXJuIGludm9rZXI7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlTGlzdGVuZXJzKG9uLCBvbGRPbiwgYWRkLCByZW1vdmUsIGNyZWF0ZU9uY2VIYW5kbGVyLCB2bSkge1xuICAgICAgdmFyIG5hbWUsIGN1ciwgb2xkLCBldmVudDtcbiAgICAgIGZvciAobmFtZSBpbiBvbikge1xuICAgICAgICAgIGN1ciA9IG9uW25hbWVdO1xuICAgICAgICAgIG9sZCA9IG9sZE9uW25hbWVdO1xuICAgICAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICAgICAgaWYgKGlzVW5kZWYoY3VyKSkge1xuICAgICAgICAgICAgICB3YXJuJDIoXCJJbnZhbGlkIGhhbmRsZXIgZm9yIGV2ZW50IFxcXCJcIi5jb25jYXQoZXZlbnQubmFtZSwgXCJcXFwiOiBnb3QgXCIpICsgU3RyaW5nKGN1ciksIHZtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXNVbmRlZihvbGQpKSB7XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmKGN1ci5mbnMpKSB7XG4gICAgICAgICAgICAgICAgICBjdXIgPSBvbltuYW1lXSA9IGNyZWF0ZUZuSW52b2tlcihjdXIsIHZtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXNUcnVlKGV2ZW50Lm9uY2UpKSB7XG4gICAgICAgICAgICAgICAgICBjdXIgPSBvbltuYW1lXSA9IGNyZWF0ZU9uY2VIYW5kbGVyKGV2ZW50Lm5hbWUsIGN1ciwgZXZlbnQuY2FwdHVyZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYWRkKGV2ZW50Lm5hbWUsIGN1ciwgZXZlbnQuY2FwdHVyZSwgZXZlbnQucGFzc2l2ZSwgZXZlbnQucGFyYW1zKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoY3VyICE9PSBvbGQpIHtcbiAgICAgICAgICAgICAgb2xkLmZucyA9IGN1cjtcbiAgICAgICAgICAgICAgb25bbmFtZV0gPSBvbGQ7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChuYW1lIGluIG9sZE9uKSB7XG4gICAgICAgICAgaWYgKGlzVW5kZWYob25bbmFtZV0pKSB7XG4gICAgICAgICAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICAgICAgICAgIHJlbW92ZShldmVudC5uYW1lLCBvbGRPbltuYW1lXSwgZXZlbnQuY2FwdHVyZSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2soZGVmLCBob29rS2V5LCBob29rKSB7XG4gICAgICBpZiAoZGVmIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICAgICAgICBkZWYgPSBkZWYuZGF0YS5ob29rIHx8IChkZWYuZGF0YS5ob29rID0ge30pO1xuICAgICAgfVxuICAgICAgdmFyIGludm9rZXI7XG4gICAgICB2Y
3XIgb2xkSG9vayA9IGRlZltob29rS2V5XTtcbiAgICAgIGZ1bmN0aW9uIHdyYXBwZWRIb29rKCkge1xuICAgICAgICAgIGhvb2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAvLyBpbXBvcnRhbnQ6IHJlbW92ZSBtZXJnZWQgaG9vayB0byBlbnN1cmUgaXQncyBjYWxsZWQgb25seSBvbmNlXG4gICAgICAgICAgLy8gYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtcbiAgICAgICAgICByZW1vdmUkMihpbnZva2VyLmZucywgd3JhcHBlZEhvb2spO1xuICAgICAgfVxuICAgICAgaWYgKGlzVW5kZWYob2xkSG9vaykpIHtcbiAgICAgICAgICAvLyBubyBleGlzdGluZyBob29rXG4gICAgICAgICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbd3JhcHBlZEhvb2tdKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChpc0RlZihvbGRIb29rLmZucykgJiYgaXNUcnVlKG9sZEhvb2subWVyZ2VkKSkge1xuICAgICAgICAgICAgICAvLyBhbHJlYWR5IGEgbWVyZ2VkIGludm9rZXJcbiAgICAgICAgICAgICAgaW52b2tlciA9IG9sZEhvb2s7XG4gICAgICAgICAgICAgIGludm9rZXIuZm5zLnB1c2god3JhcHBlZEhvb2spO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgcGxhaW4gaG9va1xuICAgICAgICAgICAgICBpbnZva2VyID0gY3JlYXRlRm5JbnZva2VyKFtvbGRIb29rLCB3cmFwcGVkSG9va10pO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGludm9rZXIubWVyZ2VkID0gdHJ1ZTtcbiAgICAgIGRlZltob29rS2V5XSA9IGludm9rZXI7XG4gIH1cblxuICBmdW5jdGlvbiBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhKGRhdGEsIEN0b3IsIHRhZykge1xuICAgICAgLy8gd2UgYXJlIG9ubHkgZXh0cmFjdGluZyByYXcgdmFsdWVzIGhlcmUuXG4gICAgICAvLyB2YWxpZGF0aW9uIGFuZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFuZGxlZCBpbiB0aGUgY2hpbGRcbiAgICAgIC8vIGNvbXBvbmVudCBpdHNlbGYuXG4gICAgICB2Y
3XIgcHJvcE9wdGlvbnMgPSBDdG9yLm9wdGlvbnMucHJvcHM7XG4gICAgICBpZiAoaXNVbmRlZihwcm9wT3B0aW9ucykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgcmVzID0ge307XG4gICAgICB2YXIgYXR0cnMgPSBkYXRhLmF0dHJzLCBwcm9wcyA9IGRhdGEucHJvcHM7XG4gICAgICBpZiAoaXNEZWYoYXR0cnMpIHx8IGlzRGVmKHByb3BzKSkge1xuICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgICAgICAgICB2YXIgYWx0S2V5ID0gaHlwaGVuYXRlKGtleSk7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHZhciBrZXlJbkxvd2VyQ2FzZSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0ga2V5SW5Mb3dlckNhc2UgJiYgYXR0cnMgJiYgaGFzT3duKGF0dHJzLCBrZXlJbkxvd2VyQ2FzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aXAoXCJQcm9wIFxcXCJcIi5jb25jYXQoa2V5SW5Mb3dlckNhc2UsIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXCIuY29uY2F0KGZvcm1hdENvbXBvbmVudE5hbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGFnIGlzIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcgfHwgQ3RvciksIFwiLCBidXQgdGhlIGRlY2xhcmVkIHByb3AgbmFtZSBpc1wiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIuIFwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgY2FtZWxDYXNlZCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcHMgbmVlZCB0byB1c2UgdGhlaXIga2ViYWItY2FzZSBlcXVpdmFsZW50cyB3aGVuIHVzaW5nIGluLURPTSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwidGVtcGxhdGVzLiBZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcXFwiXCIuY29uY2F0KGFsdEtleSwgXCJcXFwiIGluc3RlYWQgb2YgXFxcIlwiKS5jb25jYXQoa2V5LCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjaGVja1Byb3AocmVzLCBwcm9wcywga2V5LCBhbHRLZXksIHRydWUpIHx8XG4gICAgICAgICAgICAgICAgICBjaGVja1Byb3AocmVzLCBhdHRycywga2V5LCBhbHRLZXksIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICB9XG4gIGZ1bmN0aW9uIGNoZWNrUHJvcChyZXMsIGhhc2gsIGtleSwgYWx0S2V5LCBwcmVzZXJ2ZSkge1xuICAgICAgaWYgKGlzRGVmKGhhc2gpKSB7XG4gICAgICAgICAgaWYgKGhhc093bihoYXNoLCBrZXkpKSB7XG4gICAgICAgICAgICAgIHJlc1trZXldID0gaGFzaFtrZXldO1xuICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGUgaGFzaFtrZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChoYXNPd24oaGFzaCwgYWx0S2V5KSkge1xuICAgICAgICAgICAgICByZXNba2V5XSA9IGhhc2hbYWx0S2V5XTtcbiAgICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZSkge1xuICAgICAgICAgICAgICAgICAgZGVsZXRlIGhhc2hbYWx0S2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUaGUgdGVtcGxhdGUgY29tcGlsZXIgYXR0ZW1wdHMgdG8gbWluaW1pemUgdGhlIG5lZWQgZm9yIG5vcm1hbGl6YXRpb24gYnlcbiAgLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbiAgLy9cbiAgLy8gRm9yIHBsYWluIEhUTUwgbWFya3VwLCBub3JtYWxpemF0aW9uIGNhbiBiZSBjb21wbGV0ZWx5IHNraXBwZWQgYmVjYXVzZSB0aGVcbiAgLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuICAvLyB0d28gY2FzZXMgd2hlcmUgZXh0cmEgbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQ6XG4gIC8vIDEuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNvbXBvbmVudHMgLSBiZWNhdXNlIGEgZnVuY3Rpb25hbCBjb21wb25lbnRcbiAgLy8gbWF5IHJldHVybiBhbiBBcnJheSBpbnN0ZWFkIG9mIGEgc2luZ2xlIHJvb3QuIEluIHRoaXMgY2FzZSwganVzdCBhIHNpbXBsZVxuICAvLyBub3JtYWxpemF0aW9uIGlzIG5lZWRlZCAtIGlmIGFueSBjaGlsZCBpcyBhbiBBcnJheSwgd2UgZmxhdHRlbiB0aGUgd2hvbGVcbiAgLy8gdGhpbmcgd2l0aCBBcnJheS5wcm90b3R5cGUuY29uY2F0LiBJdCBpcyBndWFyYW50ZWVkIHRvIGJlIG9ubHkgMS1sZXZlbCBkZWVwXG4gIC8vIGJlY2F1c2UgZnVuY3Rpb25hbCBjb21wb25lbnRzIGFscmVhZHkgbm9ybWFsaXplIHRoZWlyIG93biBjaGlsZHJlbi5cbiAgZnVuY3Rpb24gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGNoaWxkcmVuKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgLy8gMi4gV2hlbiB0aGUgY2hpbGRyZW4gY29udGFpbnMgY29uc3RydWN0cyB0aGF0IGFsd2F5cyBnZW5lcmF0ZWQgbmVzdGVkIEFycmF5cyxcbiAgLy8gZS5nLiA8dGVtcGxhdGU+LCA8c2xvdD4sIHYtZm9yLCBvciB3aGVuIHRoZSBjaGlsZHJlbiBpcyBwcm92aWRlZCBieSB1c2VyXG4gIC8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIEluIHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cbiAgLy8gaXMgbmVlZGVkIHRvIGNhdGVyIHRvIGFsbCBwb3NzaWJsZSB0eX
3BlcyBvZiBjaGlsZHJlbiB2YWx1ZXMuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gaXNQcmltaXRpdmUoY2hpbGRyZW4pXG4gICAgICAgICAgPyBbY3JlYXRlVGV4dFZOb2RlKGNoaWxkcmVuKV1cbiAgICAgICAgICA6IGlzQXJyYXkoY2hpbGRyZW4pXG4gICAgICAgICAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cbiAgZnVuY3Rpb24gaXNUZXh0Tm9kZShub2RlKSB7XG4gICAgICByZXR1cm4gaXNEZWYobm9kZSkgJiYgaXNEZWYobm9kZS50ZXh0KSAmJiBpc0ZhbHNlKG5vZGUuaXNDb21tZW50KTtcbiAgfVxuICBmdW5jdGlvbiBub3JtYWxpemVBcnJheUNoaWxkcmVuKGNoaWxkcmVuLCBuZXN0ZWRJbmRleCkge1xuICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgdmFyIGksIGMsIGxhc3RJbmRleCwgbGFzdDtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGMgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgICBpZiAoaXNVbmRlZihjKSB8fCB0eXBlb2YgYyA9PT0gJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICBsYXN0SW5kZXggPSByZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICBsYXN0ID0gcmVzW2xhc3RJbmRleF07XG4gICAgICAgICAgLy8gIG5lc3RlZFxuICAgICAgICAgIGlmIChpc0FycmF5KGMpKSB7XG4gICAgICAgICAgICAgIGlmIChjLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGMgPSBub3JtYWxpemVBcnJheUNoaWxkcmVuKGMsIFwiXCIuY29uY2F0KG5lc3RlZEluZGV4IHx8ICcnLCBcIl9cIikuY29uY2F0KGkpKTtcbiAgICAgICAgICAgICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgICAgICAgICAgIGlmIChpc1RleHROb2RlKGNbMF0pICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjWzBdLnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJlcy5wdXNoLmFwcGx5KHJlcywgYyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXNQcmltaXRpdmUoYykpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBTU1IgaHlkcmF0aW9uIGJlY2F1c2UgdGV4dCBub2RlcyBhcmVcbiAgICAgICAgICAgICAgICAgIC8vIGVzc2VudGlhbGx5IG1lcmdlZCB3aGVuIHJlbmRlcmVkIHRvIEhUTUwgc3RyaW5nc1xuICAgICAgICAgICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZiAoYyAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgcHJpbWl0aXZlIH
3RvIHZub2RlXG4gICAgICAgICAgICAgICAgICByZXMucHVzaChjcmVhdGVUZXh0Vk5vZGUoYykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoaXNUZXh0Tm9kZShjKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXG4gICAgICAgICAgICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjLnRleHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBrZXkgZm9yIG5lc3RlZCBhcnJheSBjaGlsZHJlbiAobGlrZWx5IGdlbmVyYXRlZCBieSB2LWZvcilcbiAgICAgICAgICAgICAgICAgIGlmIChpc1RydWUoY2hpbGRyZW4uX2lzVkxpc3QpICYmXG4gICAgICAgICAgICAgICAgICAgICAgaXNEZWYoYy50YWcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgaXNVbmRlZihjLmtleSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICBpc0RlZihuZXN0ZWRJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjLmtleSA9IFwiX192bGlzdFwiLmNvbmNhdChuZXN0ZWRJbmRleCwgXCJfXCIpLmNvbmNhdChpLCBcIl9fXCIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmVzLnB1c2goYyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgdmFyIFNJTVBMRV9OT1JNQUxJWkUgPSAxO1xuICB2YXIgQUxXQVlTX05PUk1BTElaRSA9IDI7XG4gIC8vIHdyYXBwZXIgZnVuY3Rpb24gZm9yIHByb3ZpZGluZyBhIG1vcmUgZmxleGlibGUgaW50ZXJmYWNlXG4gIC8vIHdpdGhvdXQgZ2V0dGluZyB5ZWxsZWQgYXQgYnkgZmxvd1xuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50JDEoY29udGV4dCwgdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5cGUsIGFsd2F5c05vcm1hbGl6ZSkge1xuICAgICAgaWYgKGlzQXJyYXkoZGF0YSkgfHwgaXNQcmltaXRpdmUoZGF0YSkpIHtcbiAgICAgICAgICBub3JtYWxpemF0aW9uVHlwZSA9IGNoaWxkcmVuO1xuICAgICAgICAgIGNoaWxkcmVuID0gZGF0YTtcbiAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKGlzVHJ1ZShhbHdheXNOb3JtYWxpemUpKSB7XG4gICAgICAgICAgbm9ybWFsaXphdGlvblR5cGUgPSBBTFdBWVNfTk9STUFMSVpFO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9jcmVhdGVFbGVtZW50KGNvbnRleHQsIHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlKTtcbiAgfVxuICBmdW5jdGlvbiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSkge1xuICAgICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEuX19vYl9fKSkge1xuICAgICAgICAgIHdhcm4kMihcIkF2b2lkIHVzaW5nIG9ic2VydmVkIGRhdGEgb2JqZWN0IGFzIHZub2RlIGRhdGE6IFwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShkYXRhKSwgXCJcXG5cIikgKyAnQWx3YXlzIGNyZWF0ZSBmcmVzaCB2bm9kZSBkYXRhIG9iamVjdHMgaW4gZWFjaCByZW5kZXIhJywgY29udGV4dCk7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICAgIH1cbiAgICAgIC8vIG9iamVjdCBzeW50YXggaW4gdi1iaW5kXG4gICAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5pcykpIHtcbiAgICAgICAgICB0YWcgPSBkYXRhLmlzO1xuICAgICAgfVxuICAgICAgaWYgKCF0YWcpIHtcbiAgICAgICAgICAvLyBpbiBjYXNlIG9mIGNvbXBvbmVudCA6aXMgc2V0IHRvIGZhbHN5IHZhbHVlXG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICAgIH1cbiAgICAgIC8vIHdhcm4gYWdhaW5zdCBub24tcHJpbWl0aXZlIGtleVxuICAgICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEua2V5KSAmJiAhaXNQcmltaXRpdmUoZGF0YS5rZXkpKSB7XG4gICAgICAgICAgd2FybiQyKCdBdm9pZCB1c2luZyBub24tcHJpbWl0aXZlIHZhbHVlIGFzIGtleSwgJyArXG4gICAgICAgICAgICAgICd1c2Ugc3RyaW5nL251bWJlciB2YWx1ZSBpbnN0ZWFkLicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgICAgLy8gc3VwcG9ydCBzaW5nbGUgZnVuY3Rpb24gY2hpbGRyZW4gYXMgZGVmYXVsdCBzY29wZWQgc2xvdFxuICAgICAgaWYgKGlzQXJyYXkoY2hpbGRyZW4pICYmIGlzRnVuY3Rpb24oY2hpbGRyZW5bMF0pKSB7XG4gICAgICAgICAgZGF0YSA9IGRhdGEgfHwge307XG4gICAgICAgICAgZGF0YS5zY29wZWRTbG90cyA9IHsgZGVmYXVsdDogY2hpbGRyZW5bMF0gfTtcbiAgICAgICAgICBjaGlsZHJlbi5sZW5ndGggPSAwO1xuICAgICAgfVxuICAgICAgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBBTFdBWVNfTk9STUFMSVpFKSB7XG4gICAgICAgICAgY2hpbGRyZW4gPSBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbik7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChub3JtYWxpemF0aW9uVHlwZSA9PT0gU0lNUExFX05PUk1BTElaRSkge1xuICAgICAgICAgIGNoaWxkcmVuID0gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICAgICAgfVxuICAgICAgdmFyIHZub2RlLCBucztcbiAgICAgIGlmICh0eXBlb2YgdGFnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhciBDdG9yID0gdm9pZCAwO1xuICAgICAgICAgIG5zID0gKGNvbnRleHQuJHZub2RlICYmIGNvbnRleHQuJHZub2RlLm5zKSB8fCBjb25maWcuZ2V0VGFnTmFtZXNwYWNlKHRhZyk7XG4gICAgICAgICAgaWYgKGNvbmZpZy5pc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICAgICAgICAgICAgLy8gcGxhdGZvcm0gYnVpbHQtaW4gZWxlbWVudHNcbiAgICAgICAgICAgICAgaWYgKGlzRGVmKGRhdGEpICYmXG4gICAgICAgICAgICAgICAgICBpc0RlZihkYXRhLm5hdGl2ZU9uKSAmJlxuICAgICAgICAgICAgICAgICAgZGF0YS50YWcgIT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgICAgICAgICAgICB3YXJuJDIoXCJUaGUgLm5hdGl2ZSBtb2RpZmllciBmb3Igdi1vbiBpcyBvbmx5IHZhbGlkIG9uIGNvbXBvbmVudHMgYnV0IGl0IHdhcyB1c2VkIG9uIDxcIi5jb25jYXQodGFnLCBcIj4uXCIpLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2bm9kZSA9IG5ldyBWTm9kZShjb25maWcucGFyc2VQbGF0Zm9ybVRhZ05hbWUo
3dGFnKSwgZGF0YSwgY2hpbGRyZW4sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoKCFkYXRhIHx8ICFkYXRhLnByZSkgJiZcbiAgICAgICAgICAgICAgaXNEZWYoKEN0b3IgPSByZXNvbHZlQXNzZXQoY29udGV4dC4kb3B0aW9ucywgJ2NvbXBvbmVudHMnLCB0YWcpKSkpIHtcbiAgICAgICAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgICAgICAgIHZub2RlID0gY3JlYXRlQ29tcG9uZW50KEN0b3IsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuLCB0YWcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gdW5rbm93biBvciB1bmxpc3RlZCBuYW1lc3BhY2VkIGVsZW1lbnRzXG4gICAgICAgICAgICAgIC8vIGNoZWNrIGF0IHJ1bnRpbWUgYmVjYXVzZSBpdCBtYXkgZ2V0IGFzc2lnbmVkIGEgbmFtZXNwYWNlIHdoZW4gaXRzXG4gICAgICAgICAgICAgIC8vIHBhcmVudCBub3JtYWxpemVzIGNoaWxkcmVuXG4gICAgICAgICAgICAgIHZub2RlID0gbmV3IFZOb2RlKHRhZywgZGF0YSwgY2hpbGRyZW4sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICAvLyBkaXJlY3QgY29tcG9uZW50IG9wdGlvbnMgLyBjb25zdHJ1Y3RvclxuICAgICAgICAgIHZub2RlID0gY3JlYXRlQ29tcG9uZW50KHRhZywgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4pO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHZub2RlO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNEZWYodm5vZGUpKSB7XG4gICAgICAgICAgaWYgKGlzRGVmKG5zKSlcbiAgICAgICAgICAgICAgYXBwbHlOUyh2bm9kZSwgbnMpO1xuICAgICAgICAgIGlmIChpc0RlZihkYXRhKSlcbiAgICAgICAgICAgICAgcmVnaXN0ZXJEZWVwQmluZGluZ3MoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuIHZub2RlO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBhcHBseU5TKHZub2RlLCBucywgZm9yY2UpIHtcbiAgICAgIHZub2RlLm5zID0gbnM7XG4gICAgICBpZiAodm5vZGUudGFnID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAgICAgICAvLyB1c2UgZGVmYXVsdCBuYW1lc3BhY2UgaW5zaWRlIGZvcmVpZ25PYmplY3RcbiAgICAgICAgICBucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBmb3JjZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNEZWYodm5vZGUuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFyIGNoaWxkID0gdm5vZGUuY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgIGlmIChpc0RlZihjaGlsZC50YWcpICYmXG4gICAgICAgICAgICAgICAgICAoaXNVbmRlZihjaGlsZC5ucykgfHwgKGlzVHJ1ZShmb3JjZSkgJiYgY2hpbGQudGFnICE9PSAnc3ZnJykpKSB7XG4gICAgICAgICAgICAgICAgICBhcHBseU5TKGNoaWxkLCBucywgZm9yY2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIC8vIHJlZiAjNTMxOFxuICAvLyBuZWNlc3NhcnkgdG8gZW5zdXJlIHBhcmVudCByZS1yZW5kZXIgd2hlbiBkZWVwIGJpbmRpbmdzIGxpa2UgOnN0eWxlIGFuZFxuICAvLyA6Y2xhc3MgYXJlIHVzZWQgb24gc2xvdCBub2Rlc1xuICBmdW5jdGlvbiByZWdpc3RlckRlZXBCaW5kaW5ncyhkYXRhKSB7XG4gICAgICBpZiAoaXNPYmplY3QoZGF0YS5zdHlsZSkpIHtcbiAgICAgICAgICB0cmF2ZXJzZShkYXRhLnN0eWxlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdChkYXRhLmNsYXNzKSkge1xuICAgICAgICAgIHRyYXZlcnNlKGRhdGEuY2xhc3MpO1xuICAgICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgdi1mb3IgbGlzdHMuXG4gICAqL1xuICBmdW5jdGlvbiByZW5kZXJMaXN0KHZhbCwgcmVuZGVyKSB7XG4gICAgICB2Y
3XIgcmV0ID0gbnVsbCwgaSwgbCwga2V5cywga2V5O1xuICAgICAgaWYgKGlzQXJyYXkodmFsKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldCA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKTtcbiAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICByZXRbaV0gPSByZW5kZXIodmFsW2ldLCBpKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJldCA9IG5ldyBBcnJheSh2YWwpO1xuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB2YWw7IGkrKykge1xuICAgICAgICAgICAgICByZXRbaV0gPSByZW5kZXIoaSArIDEsIGkpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgICBpZiAoaGFzU3ltYm9sICYmIHZhbFtTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICAgICAgICAgIHJldCA9IFtdO1xuICAgICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSB2YWxbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICB3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICAgICAgICByZXQucHVzaChyZW5kZXIocmVzdWx0LnZhbHVlLCByZXQubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgICAgICAgICByZXQgPSBuZXcgQXJyYXkoa2V5cy5sZW5ndGgpO1xuICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgICByZXRbaV0gPSByZW5kZXIodmFsW2tleV0sIGtleSwgaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWlzRGVmKHJldCkpIHtcbiAgICAgICAgICByZXQgPSBbXTtcbiAgICAgIH1cbiAgICAgIHJldC5faXNWTGlzdCA9IHRydWU7XG4gICAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgPHNsb3Q+XG4gICAqL1xuICBmdW5jdGlvbiByZW5kZXJTbG90KG5hbWUsIGZhbGxiYWNrUmVuZGVyLCBwcm9wcywgYmluZE9iamVjdCkge1xuICAgICAgdmFyIHNjb3BlZFNsb3RGbiA9IHRoaXMuJHNjb3BlZFNsb3RzW25hbWVdO1xuICAgICAgdmFyIG5vZGVzO1xuICAgICAgaWYgKHNjb3BlZFNsb3RGbikge1xuICAgICAgICAgIC8vIHNjb3BlZCBzbG90XG4gICAgICAgICAgcHJvcHMgPSBwcm9wcyB8fCB7fTtcbiAgICAgICAgICBpZiAoYmluZE9iamVjdCkge1xuICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGJpbmRPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICB3YXJuJDIoJ3Nsb3Qgdi1iaW5kIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3QnLCB0aGlzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwcm9wcyA9IGV4dGVuZChleHRlbmQoe30sIGJpbmRPYmplY3QpLCBwcm9wcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGVzID1cbiAgICAgICAgICAgICAgc2NvcGVkU2xvdEZuKHByb3BzKSB8fFxuICAgICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZmFsbGJhY2tSZW5kZXIpID8gZmFsbGJhY2tSZW5kZXIoKSA6IGZhbGxiYWNrUmVuZGVyKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIG5vZGVzID1cbiAgICAgICAgICAgICAgdGhpcy4kc2xvdHNbbmFtZV0gfHxcbiAgICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGZhbGxiYWNrUmVuZGVyKSA/IGZhbGxiYWNrUmVuZGVyKCkgOiBmYWxsYmFja1JlbmRlcik7XG4gICAgICB9XG4gICAgICB2Y
3XIgdGFyZ2V0ID0gcHJvcHMgJiYgcHJvcHMuc2xvdDtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnLCB7IHNsb3Q6IHRhcmdldCB9LCBub2Rlcyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVudGltZSBoZWxwZXIgZm9yIHJlc29sdmluZyBmaWx0ZXJzXG4gICAqL1xuICBmdW5jdGlvbiByZXNvbHZlRmlsdGVyKGlkKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZUFzc2V0KHRoaXMuJG9wdGlvbnMsICdmaWx0ZXJzJywgaWQsIHRydWUpIHx8IGlkZW50aXR5O1xuICB9XG5cbiAgZnVuY3Rpb24gaXNLZXlOb3RNYXRjaChleHBlY3QsIGFjdHVhbCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXhwZWN0KSkge1xuICAgICAgICAgIHJldHVybiBleHBlY3QuaW5kZXhPZihhY3R1YWwpID09PSAtMTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiBleHBlY3QgIT09IGFjdHVhbDtcbiAgICAgIH1cbiAgfVxuICAvKipcbiAgICogUnVudGltZSBoZWxwZXIgZm9yIGNoZWNraW5nIGtleUNvZGVzIGZyb20gY29uZmlnLlxuICAgKiBleHBvc2VkIGFzIFZ1ZS5wcm90b3R5cGUuX2tcbiAgICogcGFzc2luZyBpbiBldmVudEtleU5hbWUgYXMgbGFzdCBhcmd1bWVudCBzZXBhcmF0ZWx5IGZvciBiYWNrd2FyZHMgY29tcGF0XG4gICAqL1xuICBmdW5jdGlvbiBjaGVja0tleUNvZGVzKGV2ZW50S2V5Q29kZSwga2V5LCBidWlsdEluS2V5Q29kZSwgZXZlbnRLZXlOYW1lLCBidWlsdEluS2V5TmFtZSkge1xuICAgICAgdmFyIG1hcHBlZEtleUNvZGUgPSBjb25maWcua2V5Q29kZXNba2V5XSB8fCBidWlsdEluS2V5Q29kZTtcbiAgICAgIGlmIChidWlsdEluS2V5TmFtZSAmJiBldmVudEtleU5hbWUgJiYgIWNvbmZpZy5rZXlDb2Rlc1trZXldKSB7XG4gICAgICAgICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2goYnVpbHRJbktleU5hbWUsIGV2ZW50S2V5TmFtZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChtYXBwZWRLZXlDb2RlKSB7XG4gICAgICAgICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2gobWFwcGVkS2V5Q29kZSwgZXZlbnRLZXlDb2RlKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGV2ZW50S2V5TmFtZSkge1xuICAgICAgICAgIHJldHVybiBoeXBoZW5hdGUoZXZlbnRLZXlOYW1lKSAhPT0ga2V5O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV2ZW50S2V5Q29kZSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnRpbWUgaGVscGVyIGZvciBtZXJnaW5nIHYtYmluZD1cIm9iamVjdFwiIGludG8gYSBWTm9kZSdzIGRhdGEuXG4gICAqL1xuICBmdW5jdGlvbiBiaW5kT2JqZWN0UHJvcHMoZGF0YSwgdGFnLCB2YWx1ZSwgYXNQcm9wLCBpc1N5bmMpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgIHdhcm4kMigndi1iaW5kIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3Qgb3IgQXJyYXkgdmFsdWUnLCB0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0b09iamVjdCh2YWx1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIGhhc2ggPSB2b2lkIDA7XG4gICAgICAgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NsYXNzJyB8fCBrZXkgPT09ICdzdHlsZScgfHwgaXNSZXNlcnZlZEF0dHJpYnV0ZShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaGFzaCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB2Y
3XIgdHlwZSA9IGRhdGEuYXR0cnMgJiYgZGF0YS5hdHRycy50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgIGhhc2ggPVxuICAgICAgICAgICAgICAgICAgICAgICAgICBhc1Byb3AgfHwgY29uZmlnLm11c3RVc2VQcm9wKHRhZywgdHlwZSwga2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkYXRhLmRvbVByb3BzIHx8IChkYXRhLmRvbVByb3BzID0ge30pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgICAgICAgICAgIHZhciBoeXBoZW5hdGVkS2V5ID0gaHlwaGVuYXRlKGtleSk7XG4gICAgICAgICAgICAgICAgICBpZiAoIShjYW1lbGl6ZWRLZXkgaW4gaGFzaCkgJiYgIShoeXBoZW5hdGVkS2V5IGluIGhhc2gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaGFzaFtrZXldID0gdmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbiA9IGRhdGEub24gfHwgKGRhdGEub24gPSB7fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uW1widXBkYXRlOlwiLmNvbmNhdChrZXkpXSA9IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2tleV0gPSAkZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIF9sb29wXzEoa2V5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgc3RhdGljIHRyZWVzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVuZGVyU3RhdGljKGluZGV4LCBpc0luRm9yKSB7XG4gICAgICB2Y
3XIgY2FjaGVkID0gdGhpcy5fc3RhdGljVHJlZXMgfHwgKHRoaXMuX3N0YXRpY1RyZWVzID0gW10pO1xuICAgICAgdmFyIHRyZWUgPSBjYWNoZWRbaW5kZXhdO1xuICAgICAgLy8gaWYgaGFzIGFscmVhZHktcmVuZGVyZWQgc3RhdGljIHRyZWUgYW5kIG5vdCBpbnNpZGUgdi1mb3IsXG4gICAgICAvLyB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgdHJlZS5cbiAgICAgIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgICAgICAgcmV0dXJuIHRyZWU7XG4gICAgICB9XG4gICAgICAvLyBvdGhlcndpc2UsIHJlbmRlciBhIGZyZXNoIHRyZWUuXG4gICAgICB0cmVlID0gY2FjaGVkW2luZGV4XSA9IHRoaXMuJG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zW2luZGV4XS5jYWxsKHRoaXMuX3JlbmRlclByb3h5LCB0aGlzLl9jLCB0aGlzIC8vIGZvciByZW5kZXIgZm5zIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgdGVtcGxhdGVzXG4gICAgICApO1xuICAgICAgbWFya1N0YXRpYyQxKHRyZWUsIFwiX19zdGF0aWNfX1wiLmNvbmNhdChpbmRleCksIGZhbHNlKTtcbiAgICAgIHJldHVybiB0cmVlO1xuICB9XG4gIC8qKlxuICAgKiBSdW50aW1lIGhlbHBlciBmb3Igdi1vbmNlLlxuICAgKiBFZmZlY3RpdmVseSBpdCBtZWFucyBtYXJraW5nIHRoZSBub2RlIGFzIHN0YXRpYyB3aXRoIGEgdW5pcXVlIGtleS5cbiAgICovXG4gIGZ1bmN0aW9uIG1hcmtPbmNlKHRyZWUsIGluZGV4LCBrZXkpIHtcbiAgICAgIG1hcmtTdGF0aWMkMSh0cmVlLCBcIl9fb25jZV9fXCIuY29uY2F0KGluZGV4KS5jb25jYXQoa2V5ID8gXCJfXCIuY29uY2F0KGtleSkgOiBcIlwiKSwgdHJ1ZSk7XG4gICAgICByZXR1cm4gdHJlZTtcbiAgfVxuICBmdW5jdGlvbiBtYXJrU3RhdGljJDEodHJlZSwga2V5LCBpc09uY2UpIHtcbiAgICAgIGlmIChpc0FycmF5KHRyZWUpKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmICh0cmVlW2ldICYmIHR5cGVvZiB0cmVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgbWFya1N0YXRpY05vZGUodHJlZVtpXSwgXCJcIi5jb25jYXQoa2V5LCBcIl9cIikuY29uY2F0KGkpLCBpc09uY2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgbWFya1N0YXRpY05vZGUodHJlZSwga2V5LCBpc09uY2UpO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIG1hcmtTdGF0aWNOb2RlKG5vZGUsIGtleSwgaXNPbmNlKSB7XG4gICAgICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgICAgIG5vZGUua2V5ID0ga2V5O1xuICAgICAgbm9kZS5pc09uY2UgPSBpc09uY2U7XG4gIH1cblxuICBmdW5jdGlvbiBiaW5kT2JqZWN0TGlzdGVuZXJzKGRhdGEsIHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgIHdhcm4kMigndi1vbiB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IHZhbHVlJywgdGhpcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2Y
3XIgb24gPSAoZGF0YS5vbiA9IGRhdGEub24gPyBleHRlbmQoe30sIGRhdGEub24pIDoge30pO1xuICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBleGlzdGluZyA9IG9uW2tleV07XG4gICAgICAgICAgICAgICAgICB2YXIgb3VycyA9IHZhbHVlW2tleV07XG4gICAgICAgICAgICAgICAgICBvbltrZXldID0gZXhpc3RpbmcgPyBbXS5jb25jYXQoZXhpc3RpbmcsIG91cnMpIDogb3VycztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZVNjb3BlZFNsb3RzKGZucywgcmVzLCBcbiAgLy8gdGhlIGZvbGxvd2luZyBhcmUgYWRkZWQgaW4gMi42XG4gIGhhc0R5bmFtaWNLZXlzLCBjb250ZW50SGFzaEtleSkge1xuICAgICAgcmVzID0gcmVzIHx8IHsgJHN0YWJsZTogIWhhc0R5bmFtaWNLZXlzIH07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBzbG90ID0gZm5zW2ldO1xuICAgICAgICAgIGlmIChpc0FycmF5KHNsb3QpKSB7XG4gICAgICAgICAgICAgIHJlc29sdmVTY29wZWRTbG90cyhzbG90LCByZXMsIGhhc0R5bmFtaWNLZXlzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoc2xvdCkge1xuICAgICAgICAgICAgICAvLyBtYXJrZXIgZm9yIHJldmVyc2UgcHJveHlpbmcgdi1zbG90IHdpdGhvdXQgc2NvcGUgb24gdGhpcy4kc2xvdHNcbiAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICBpZiAoc2xvdC5wcm94eSkge1xuICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgICAgc2xvdC5mbi5wcm94eSA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzW3Nsb3Qua2V5XSA9IHNsb3QuZm47XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbnRlbnRIYXNoS2V5KSB7XG4gICAgICAgICAgcmVzLiRrZXkgPSBjb250ZW50SGFzaEtleTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvLyBoZWxwZXIgdG8gcHJvY2VzcyBkeW5hbWljIGtleXMgZm9yIGR5bmFtaWMgYXJndW1lbnRzIGluIHYtYmluZCBhbmQgdi1vbi5cbiAgZnVuY3Rpb24gYmluZER5bmFtaWNLZXlzKGJhc2VPYmosIHZhbHVlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICB2Y
3XIga2V5ID0gdmFsdWVzW2ldO1xuICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkpIHtcbiAgICAgICAgICAgICAgYmFzZU9ialt2YWx1ZXNbaV1dID0gdmFsdWVzW2kgKyAxXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoa2V5ICE9PSAnJyAmJiBrZXkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gbnVsbCBpcyBhIHNwZWNpYWwgdmFsdWUgZm9yIGV4cGxpY2l0bHkgcmVtb3ZpbmcgYSBiaW5kaW5nXG4gICAgICAgICAgICAgIHdhcm4kMihcIkludmFsaWQgdmFsdWUgZm9yIGR5bmFtaWMgZGlyZWN0aXZlIGFyZ3VtZW50IChleHBlY3RlZCBzdHJpbmcgb3IgbnVsbCk6IFwiLmNvbmNhdChrZXkpLCB0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZU9iajtcbiAgfVxuICAvLyBoZWxwZXIgdG8gZHluYW1pY2FsbHkgYXBwZW5kIG1vZGlmaWVyIHJ1bnRpbWUgbWFya2VycyB0byBldmVudCBuYW1lcy5cbiAgLy8gZW5zdXJlIG9ubHkgYXBwZW5kIHdoZW4gdmFsdWUgaXMgYWxyZWFkeSBzdHJpbmcsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNhc3RcbiAgLy8gdG8gc3RyaW5nIGFuZCBjYXVzZSB0aGUgdHlwZSBjaGVjayB0byBtaXNzLlxuICBmdW5jdGlvbiBwcmVwZW5kTW9kaWZpZXIodmFsdWUsIHN5bWJvbCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBzeW1ib2wgKyB2YWx1ZSA6IHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zdGFsbFJlbmRlckhlbHBlcnModGFyZ2V0KSB7XG4gICAgICB0YXJnZXQuX28gPSBtYXJrT25jZTtcbiAgICAgIHRhcmdldC5fbiA9IHRvTnVtYmVyO1xuICAgICAgdGFyZ2V0Ll9zID0gdG9TdHJpbmc7XG4gICAgICB0YXJnZXQuX2wgPSByZW5kZXJMaXN0O1xuICAgICAgdGFyZ2V0Ll90ID0gcmVuZGVyU2xvdDtcbiAgICAgIHRhcmdldC5fcSA9IGxvb3NlRXF1YWw7XG4gICAgICB0YXJnZXQuX2kgPSBsb29zZUluZGV4T2Y7XG4gICAgICB0YXJnZXQuX20gPSByZW5kZXJTdGF0aWM7XG4gICAgICB0YXJnZXQuX2YgPSByZXNvbHZlRmlsdGVyO1xuICAgICAgdGFyZ2V0Ll9rID0gY2hlY2tLZXlDb2RlcztcbiAgICAgIHRhcmdldC5fYiA9IGJpbmRPYmplY3RQcm9wcztcbiAgICAgIHRhcmdldC5fdiA9IGNyZWF0ZVRleHRWTm9kZTtcbiAgICAgIHRhcmdldC5fZSA9IGNyZWF0ZUVtcHR5Vk5vZGU7XG4gICAgICB0YXJnZXQuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XG4gICAgICB0YXJnZXQuX2cgPSBiaW5kT2JqZWN0TGlzdGVuZXJzO1xuICAgICAgdGFyZ2V0Ll9kID0gYmluZER5bmFtaWNLZXlzO1xuICAgICAgdGFyZ2V0Ll9wID0gcHJlcGVuZE1vZGlmaWVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnRpbWUgaGVscGVyIGZvciByZXNvbHZpbmcgcmF3IGNoaWxkcmVuIFZOb2RlcyBpbnRvIGEgc2xvdCBvYmplY3QuXG4gICAqL1xuICBmdW5jdGlvbiByZXNvbHZlU2xvdHMoY2hpbGRyZW4sIGNvbnRleHQpIHtcbiAgICAgIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHZhciBzbG90cyA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2Y
3XIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgICB2YXIgZGF0YSA9IGNoaWxkLmRhdGE7XG4gICAgICAgICAgLy8gcmVtb3ZlIHNsb3QgYXR0cmlidXRlIGlmIHRoZSBub2RlIGlzIHJlc29sdmVkIGFzIGEgVnVlIHNsb3Qgbm9kZVxuICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEuYXR0cnMgJiYgZGF0YS5hdHRycy5zbG90KSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLmF0dHJzLnNsb3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG5hbWVkIHNsb3RzIHNob3VsZCBvbmx5IGJlIHJlc3BlY3RlZCBpZiB0aGUgdm5vZGUgd2FzIHJlbmRlcmVkIGluIHRoZVxuICAgICAgICAgIC8vIHNhbWUgY29udGV4dC5cbiAgICAgICAgICBpZiAoKGNoaWxkLmNvbnRleHQgPT09IGNvbnRleHQgfHwgY2hpbGQuZm5Db250ZXh0ID09PSBjb250ZXh0KSAmJlxuICAgICAgICAgICAgICBkYXRhICYmXG4gICAgICAgICAgICAgIGRhdGEuc2xvdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBuYW1lXzEgPSBkYXRhLnNsb3Q7XG4gICAgICAgICAgICAgIHZhciBzbG90ID0gc2xvdHNbbmFtZV8xXSB8fCAoc2xvdHNbbmFtZV8xXSA9IFtdKTtcbiAgICAgICAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICAgICAgICAgICAgc2xvdC5wdXNoLmFwcGx5KHNsb3QsIGNoaWxkLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHNsb3QucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIChzbG90cy5kZWZh
3dWx0IHx8IChzbG90cy5kZWZhdWx0ID0gW10pKS5wdXNoKGNoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZ25vcmUgc2xvdHMgdGhhdCBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VcbiAgICAgIGZvciAodmFyIG5hbWVfMiBpbiBzbG90cykge1xuICAgICAgICAgIGlmIChzbG90c1tuYW1lXzJdLmV2ZXJ5KGlzV2hpdGVzcGFjZSkpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHNsb3RzW25hbWVfMl07XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNsb3RzO1xuICB9XG4gIGZ1bmN0aW9uIGlzV2hpdGVzcGFjZShub2RlKSB7XG4gICAgICByZXR1cm4gKG5vZGUuaXNDb21tZW50ICYmICFub2RlLmFzeW5jRmFjdG9yeSkgfHwgbm9kZS50ZXh0ID09PSAnICc7XG4gIH1cblxuICBmdW5jdGlvbiBpc0FzeW5jUGxhY2Vob2xkZXIobm9kZSkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBub3QgcmVhbGx5IGJvb2xlYW4gdHlwZVxuICAgICAgcmV0dXJuIG5vZGUuaXNDb21tZW50ICYmIG5vZGUuYXN5bmNGYWN0b3J5O1xuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplU2NvcGVkU2xvdHMob3duZXJWbSwgc2NvcGVkU2xvdHMsIG5vcm1hbFNsb3RzLCBwcmV2U2NvcGVkU2xvdHMpIHtcbiAgICAgIHZhciByZXM7XG4gICAgICB2YXIgaGFzTm9ybWFsU2xvdHMgPSBPYmplY3Qua2V5cyhub3JtYWxTbG90cykubGVuZ3RoID4gMDtcbiAgICAgIHZhciBpc1N0YWJsZSA9IHNjb3BlZFNsb3RzID8gISFzY29wZWRTbG90cy4kc3RhYmxlIDogIWhhc05vcm1hbFNsb3RzO1xuICAgICAgdmFyIGtleSA9IHNjb3BlZFNsb3RzICYmIHNjb3BlZFNsb3RzLiRrZXk7XG4gICAgICBpZiAoIXNjb3BlZFNsb3RzKSB7XG4gICAgICAgICAgcmVzID0ge307XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChzY29wZWRTbG90cy5fbm9ybWFsaXplZCkge1xuICAgICAgICAgIC8vIGZhc3QgcGF0aCAxOiBjaGlsZCBjb21wb25lbnQgcmUtcmVuZGVyIG9ubHksIHBhcmVudCBkaWQgbm90IGNoYW5nZVxuICAgICAgICAgIHJldHVybiBzY29wZWRTbG90cy5fbm9ybWFsaXplZDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzU3RhYmxlICYmXG4gICAgICAgICAgcHJldlNjb3BlZFNsb3RzICYmXG4gICAgICAgICAgcHJldlNjb3BlZFNsb3RzICE9PSBlbXB0eU9iamVjdCAmJlxuICAgICAgICAgIGtleSA9PT0gcHJldlNjb3BlZFNsb3RzLiRrZXkgJiZcbiAgICAgICAgICAhaGFzTm9ybWFsU2xvdHMgJiZcbiAgICAgICAgICAhcHJldlNjb3BlZFNsb3RzLiRoYXNOb3JtYWwpIHtcbiAgICAgICAgICAvLyBmYXN0IHBhdGggMjogc3RhYmxlIHNjb3BlZCBzbG90cyB3LyBubyBub3JtYWwgc2xvdHMgdG8gcHJveHksXG4gICAgICAgICAgLy8gb25seSBuZWVkIHRvIG5vcm1hbGl6ZSBvbmNlXG4gICAgICAgICAgcmV0dXJuIHByZXZTY29wZWRTbG90cztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHJlcyA9IHt9O1xuICAgICAgICAgIGZvciAodmFyIGtleV8xIGluIHNjb3BlZFNsb3RzKSB7XG4gICAgICAgICAgICAgIGlmIChzY29wZWRTbG90c1trZXlfMV0gJiYga2V5XzFbMF0gIT09ICckJykge1xuICAgICAgICAgICAgICAgICAgcmVzW2tleV8xXSA9IG5vcm1hbGl6ZVNjb3BlZFNsb3Qob3duZXJWbSwgbm9ybWFsU2xvdHMsIGtleV8xLCBzY29wZWRTbG90c1trZXlfMV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gZXhwb3NlIG5vcm1hbCBzbG90cyBvbiBzY29wZWRTbG90c1xuICAgICAgZm9yICh2YXIga2V5XzIgaW4gbm9ybWFsU2xvdHMpIHtcbiAgICAgICAgICBpZiAoIShrZXlfMiBpbiByZXMpKSB7XG4gICAgICAgICAgICAgIHJlc1trZXlfMl0gPSBwcm94eU5vcm1hbFNsb3Qobm9ybWFsU2xvdHMsIGtleV8yKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBhdm9yaWF6IHNlZW1zIHRvIG1vY2sgYSBub24tZXh0ZW5zaWJsZSAkc2NvcGVkU2xvdHMgb2JqZWN0XG4gICAgICAvLyBhbmQgd2hlbiB0aGF0IGlzIHBhc3NlZCBkb3duIHRoaXMgd291bGQgY2F1c2UgYW4gZXJyb3JcbiAgICAgIGlmIChzY29wZWRTbG90cyAmJiBPYmplY3QuaXNFeHRlbnNpYmxlKHNjb3BlZFNsb3RzKSkge1xuICAgICAgICAgIHNjb3BlZFNsb3RzLl9ub3JtYWxpemVkID0gcmVzO1xuICAgICAgfVxuICAgICAgZGVmKHJlcywgJyRzdGFibGUnLCBpc1N0YWJsZSk7XG4gICAgICBkZWYocmVzLCAnJGtleScsIGtleSk7XG4gICAgICBkZWYocmVzLCAnJGhhc05vcm1hbCcsIGhhc05vcm1hbFNsb3RzKTtcbiAgICAgIHJldHVybiByZXM7XG4gIH1cbiAgZnVuY3Rpb24gbm9ybWFsaXplU2NvcGVkU2xvdCh2bSwgbm9ybWFsU2xvdHMsIGtleSwgZm4pIHtcbiAgICAgIHZhciBub3JtYWxpemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBjdXIgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKHZtKTtcbiAgICAgICAgICB2Y
3XIgcmVzID0gYXJndW1lbnRzLmxlbmd0aCA/IGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cykgOiBmbih7fSk7XG4gICAgICAgICAgcmVzID1cbiAgICAgICAgICAgICAgcmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICFpc0FycmF5KHJlcylcbiAgICAgICAgICAgICAgICAgID8gW3Jlc10gLy8gc2luZ2xlIHZub2RlXG4gICAgICAgICAgICAgICAgICA6IG5vcm1hbGl6ZUNoaWxkcmVuKHJlcyk7XG4gICAgICAgICAgdmFyIHZub2RlID0gcmVzICYmIHJlc1swXTtcbiAgICAgICAgICBzZXRDdXJyZW50SW5zdGFuY2UoY3VyKTtcbiAgICAgICAgICByZXR1cm4gcmVzICYmXG4gICAgICAgICAgICAgICghdm5vZGUgfHxcbiAgICAgICAgICAgICAgICAgIChyZXMubGVuZ3RoID09PSAxICYmIHZub2RlLmlzQ29tbWVudCAmJiAhaXNBc3luY1BsYWNlaG9sZGVyKHZub2RlKSkpIC8vICM5NjU4LCAjMTAzOTFcbiAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgOiByZXM7XG4gICAgICB9O1xuICAgICAgLy8gdGhpcyBpcyBhIHNsb3QgdXNpbmcgdGhlIG5ldyB2LXNsb3Qgc3ludGF4IHdpdGhvdXQgc2NvcGUuIGFsdGhvdWdoIGl0IGlzXG4gICAgICAvLyBjb21waWxlZCBhcyBhIHNjb3BlZCBzbG90LCByZW5kZXIgZm4gdXNlcnMgd291bGQgZXhwZWN0IGl0IHRvIGJlIHByZXNlbnRcbiAgICAgIC8vIG9uIHRoaXMuJHNsb3RzIGJlY2F1c2UgdGhlIHVzYWdlIGlzIHNlbWFudGljYWxseSBhIG5vcm1hbCBzbG90LlxuICAgICAgaWYgKGZuLnByb3h5KSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vcm1hbFNsb3RzLCBrZXksIHtcbiAgICAgICAgICAgICAgZ2V0OiBub3JtYWxpemVkLFxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG4gIGZ1bmN0aW9uIHByb3h5Tm9ybWFsU2xvdChzbG90cywga2V5KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2xvdHNba2V5XTsgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRTZXR1cCh2bSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcbiAgICAgIHZhciBzZXR1cCA9IG9wdGlvbnMuc2V0dXA7XG4gICAgICBpZiAoc2V0dXApIHtcbiAgICAgICAgICB2Y
3XIgY3R4ID0gKHZtLl9zZXR1cENvbnRleHQgPSBjcmVhdGVTZXR1cENvbnRleHQodm0pKTtcbiAgICAgICAgICBzZXRDdXJyZW50SW5zdGFuY2Uodm0pO1xuICAgICAgICAgIHB1c2hUYXJnZXQoKTtcbiAgICAgICAgICB2YXIgc2V0dXBSZXN1bHQgPSBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhzZXR1cCwgbnVsbCwgW3ZtLl9wcm9wcyB8fCBzaGFsbG93UmVhY3RpdmUoe30pLCBjdHhdLCB2bSwgXCJzZXR1cFwiKTtcbiAgICAgICAgICBwb3BUYXJnZXQoKTtcbiAgICAgICAgICBzZXRDdXJyZW50SW5zdGFuY2UoKTtcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihzZXR1cFJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgLy8gcmVuZGVyIGZ1bmN0aW9uXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgb3B0aW9ucy5yZW5kZXIgPSBzZXR1cFJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXNPYmplY3Qoc2V0dXBSZXN1bHQpKSB7XG4gICAgICAgICAgICAgIC8vIGJpbmRpbmdzXG4gICAgICAgICAgICAgIGlmIChzZXR1cFJlc3VsdCBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgICAgICAgICAgICAgICB3YXJuJDIoXCJzZXR1cCgpIHNob3VsZCBub3QgcmV0dXJuIFZOb2RlcyBkaXJlY3RseSAtIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICBcInJldHVybiBhIHJlbmRlciBmdW5jdGlvbiBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2bS5fc2V0dXBTdGF0ZSA9IHNldHVwUmVzdWx0O1xuICAgICAgICAgICAgICAvLyBfX3NmYyBpbmRpY2F0ZXMgY29tcGlsZWQgYmluZGluZ3MgZnJvbSA8c2NyaXB0IHNldHVwPlxuICAgICAgICAgICAgICBpZiAoIXNldHVwUmVzdWx0Ll9fc2ZjKSB7XG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2V0dXBSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eVdpdGhSZWZVbndyYXAodm0sIHNldHVwUmVzdWx0LCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiQXZvaWQgdXNpbmcgdmFyaWFibGVzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQgaW4gc2V0dXAoKS5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gZXhwb3NlZCBmb3IgY29tcGlsZWQgcmVuZGVyIGZuXG4gICAgICAgICAgICAgICAgICB2Y
3XIgcHJveHkgPSAodm0uX3NldHVwUHJveHkgPSB7fSk7XG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2V0dXBSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAnX19zZmMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5V2l0aFJlZlVud3JhcChwcm94eSwgc2V0dXBSZXN1bHQsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHNldHVwUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgd2FybiQyKFwic2V0dXAoKSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdC4gUmVjZWl2ZWQ6IFwiLmNvbmNhdChzZXR1cFJlc3VsdCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBzZXR1cFJlc3VsdCkpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjcmVhdGVTZXR1cENvbnRleHQodm0pIHtcbiAgICAgIHZhciBleHBvc2VDYWxsZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ2V0IGF0dHJzKCkge1xuICAgICAgICAgICAgICBpZiAoIXZtLl9hdHRyc1Byb3h5KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgcHJveHkgPSAodm0uX2F0dHJzUHJveHkgPSB7fSk7XG4gICAgICAgICAgICAgICAgICBkZWYocHJveHksICdfdl9hdHRyX3Byb3h5JywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICBzeW5jU2V0dXBQcm94eShwcm94eSwgdm0uJGF0dHJzLCBlbXB0eU9iamVjdCwgdm0sICckYXR0cnMnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdm0uX2F0dHJzUHJveHk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXQgbGlzdGVuZXJzKCkge1xuICAgICAgICAgICAgICBpZiAoIXZtLl9saXN0ZW5lcnNQcm94eSkge1xuICAgICAgICAgICAgICAgICAgdmFyIHByb3h5ID0gKHZtLl9saXN0ZW5lcnNQcm94eSA9IHt9KTtcbiAgICAgICAgICAgICAgICAgIHN5bmNTZXR1cFByb3h5KHByb3h5LCB2bS4kbGlzdGVuZXJzLCBlbXB0eU9iamVjdCwgdm0sICckbGlzdGVuZXJzJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHZtLl9saXN0ZW5lcnNQcm94eTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldCBzbG90cygpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGluaXRTbG90c1Byb3h5KHZtKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVtaXQ6IGJpbmQkMSh2bS4kZW1pdCwgdm0pLFxuICAgICAgICAgIGV4cG9zZTogZnVuY3Rpb24gKGV4cG9zZWQpIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKGV4cG9zZUNhbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHdhcm4kMihcImV4cG9zZSgpIHNob3VsZCBiZSBjYWxsZWQgb25seSBvbmNlIHBlciBzZXR1cCgpLlwiLCB2bSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBleHBvc2VDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChleHBvc2VkKSB7XG4gICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhleHBvc2VkKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJveHlXaXRoUmVmVW53cmFwKHZtLCBleHBvc2VkLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHN5bmNTZXR1cFByb3h5KHRvLCBmcm9tLCBwcmV2LCBpbnN0YW5jZSwgdHlwZSkge1xuICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4gICAgICAgICAgaWYgKCEoa2V5IGluIHRvKSkge1xuICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZGVmaW5lUHJveHlBdHRyKHRvLCBrZXksIGluc3RhbmNlLCB0eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoZnJvbVtrZXldICE9PSBwcmV2W2tleV0pIHtcbiAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHRvKSB7XG4gICAgICAgICAgaWYgKCEoa2V5IGluIGZyb20pKSB7XG4gICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBkZWxldGUgdG9ba2V5XTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2hhbmdlZDtcbiAgfVxuICBmdW5jdGlvbiBkZWZpbmVQcm94eUF0dHIocHJveHksIGtleSwgaW5zdGFuY2UsIHR5cGUpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwga2V5LCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZVt0eXBlXVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIGluaXRTbG90c1Byb3h5KHZtKSB7XG4gICAgICBpZiAoIXZtLl9zbG90c1Byb3h5KSB7XG4gICAgICAgICAgc3luY1NldHVwU2xvdHMoKHZtLl9zbG90c1Byb3h5ID0ge30pLCB2bS4kc2NvcGVkU2xvdHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZtLl9zbG90c1Byb3h5O1xuICB9XG4gIGZ1bmN0aW9uIHN5bmNTZXR1cFNsb3RzKHRvLCBmcm9tKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuICAgICAgICAgIHRvW2tleV0gPSBmcm9tW2tleV07XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdG8pIHtcbiAgICAgICAgICBpZiAoIShrZXkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHRvW2tleV07XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgdXNlIG1hbnVhbCB0eXBlIGRlZiBiZWNhdXNlIHB1YmxpYyBzZXR1cCBjb250ZXh0IHR5cGUgcmVsaWVzIG9uXG4gICAqIGxlZ2FjeSBWTm9kZSB0eXBlc1xuICAgKi9cbiAgZnVuY3Rpb24gdXNlU2xvdHMoKSB7XG4gICAgICByZXR1cm4gZ2V0Q29udGV4dCgpLnNsb3RzO1xuICB9XG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgdXNlIG1hbnVhbCB0eXBlIGRlZiBiZWNhdXNlIHB1YmxpYyBzZXR1cCBjb250ZXh0IHR5cGUgcmVsaWVzIG9uXG4gICAqIGxlZ2FjeSBWTm9kZSB0eXBlc1xuICAgKi9cbiAgZnVuY3Rpb24gdXNlQXR0cnMoKSB7XG4gICAgICByZXR1cm4gZ2V0Q29udGV4dCgpLmF0dHJzO1xuICB9XG4gIC8qKlxuICAgKiBWdWUgMiBvbmx5XG4gICAqIEBpbnRlcm5hbCB1c2UgbWFudWFsIHR5cGUgZGVmIGJlY2F1c2UgcHVibGljIHNldHVwIGNvbnRleHQgdHlwZSByZWxpZXMgb25cbiAgICogbGVnYWN5IFZOb2RlIHR5cGVzXG4gICAqL1xuICBmdW5jdGlvbiB1c2VMaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4gZ2V0Q29udGV4dCgpLmxpc3RlbmVycztcbiAgfVxuICBmdW5jdGlvbiBnZXRDb250ZXh0KCkge1xuICAgICAgaWYgKCFjdXJyZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICB3YXJuJDIoXCJ1c2VDb250ZXh0KCkgY2FsbGVkIHdpdGhvdXQgYWN0aXZlIGluc3RhbmNlLlwiKTtcbiAgICAgIH1cbiAgICAgIHZhciB2bSA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgICAgIHJldHVybi
3B2bS5fc2V0dXBDb250ZXh0IHx8ICh2bS5fc2V0dXBDb250ZXh0ID0gY3JlYXRlU2V0dXBDb250ZXh0KHZtKSk7XG4gIH1cbiAgLyoqXG4gICAqIFJ1bnRpbWUgaGVscGVyIGZvciBtZXJnaW5nIGRlZmF1bHQgZGVjbGFyYXRpb25zLiBJbXBvcnRlZCBieSBjb21waWxlZCBjb2RlXG4gICAqIG9ubHkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZnVuY3Rpb24gbWVyZ2VEZWZhdWx0cyhyYXcsIGRlZmF1bHRzKSB7XG4gICAgICB2YXIgcHJvcHMgPSBpc0FycmF5KHJhdylcbiAgICAgICAgICA/IHJhdy5yZWR1Y2UoZnVuY3Rpb24gKG5vcm1hbGl6ZWQsIHApIHsgcmV0dXJuICgobm9ybWFsaXplZFtwXSA9IHt9KSwgbm9ybWFsaXplZCk7IH0sIHt9KVxuICAgICAgICAgIDogcmF3O1xuICAgICAgZm9yICh2YXIga2V5IGluIGRlZmF1bHRzKSB7XG4gICAgICAgICAgdmFyIG9wdCA9IHByb3BzW2tleV07XG4gICAgICAgICAgaWYgKG9wdCkge1xuICAgICAgICAgICAgICBpZiAoaXNBcnJheShvcHQpIHx8IGlzRnVuY3Rpb24ob3B0KSkge1xuICAgICAgICAgICAgICAgICAgcHJvcHNba2V5XSA9IHsgdHlwZTogb3B0LCBkZWZhdWx0OiBkZWZhdWx0c1trZXldIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvcHQuZGVmYXVsdCA9IGRlZmF1bHRzW2tleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAob3B0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHByb3BzW2tleV0gPSB7IGRlZmF1bHQ6IGRlZmF1bHRzW2tleV0gfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHdhcm4kMihcInByb3BzIGRlZmF1bHQga2V5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgaGFzIG5vIGNvcnJlc3BvbmRpbmcgZGVjbGFyYXRpb24uXCIpKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvcHM7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0UmVuZGVyKHZtKSB7XG4gICAgICB2bS5fdm5vZGUgPSBudWxsOyAvLyB0aGUgcm9vdCBvZiB0aGUgY2hpbGQgdHJlZVxuICAgICAgdm0uX3N0YXRpY1RyZWVzID0gbnVsbDsgLy8gdi1vbmNlIGNhY2hlZCB0cmVlc1xuICAgICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcbiAgICAgIHZhciBwYXJlbnRWbm9kZSA9ICh2bS4kdm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZSk7IC8vIHRoZSBwbGFjZWhvbGRlciBub2RlIGluIHBhcmVudCB0cmVlXG4gICAgICB2Y
3XIgcmVuZGVyQ29udGV4dCA9IHBhcmVudFZub2RlICYmIHBhcmVudFZub2RlLmNvbnRleHQ7XG4gICAgICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMob3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4sIHJlbmRlckNvbnRleHQpO1xuICAgICAgdm0uJHNjb3BlZFNsb3RzID0gcGFyZW50Vm5vZGVcbiAgICAgICAgICA/IG5vcm1hbGl6ZVNjb3BlZFNsb3RzKHZtLiRwYXJlbnQsIHBhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHMsIHZtLiRzbG90cylcbiAgICAgICAgICA6IGVtcHR5T2JqZWN0O1xuICAgICAgLy8gYmluZCB0aGUgY3JlYXRlRWxlbWVudCBmbiB0byB0aGlzIGluc3RhbmNlXG4gICAgICAvLyBzbyB0aGF0IHdlIGdldCBwcm9wZXIgcmVuZGVyIGNvbnRleHQgaW5zaWRlIGl0LlxuICAgICAgLy8gYXJncyBvcmRlcjogdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5cGUsIGFsd2F5c05vcm1hbGl6ZVxuICAgICAgLy8gaW50ZXJuYWwgdmVyc2lvbiBpcyB1c2VkIGJ5IHJlbmRlciBmdW5jdGlvbnMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZXNcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHZtLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQkMSh2bSwgYSwgYiwgYywgZCwgZmFsc2UpOyB9O1xuICAgICAgLy8gbm9ybWFsaXphdGlvbiBpcyBhbHdheXMgYXBwbGllZCBmb3IgdGhlIHB1YmxpYyB2ZXJzaW9uLCB1c2VkIGluXG4gICAgICAvLyB1c2VyLXdyaXR0ZW4gcmVuZGVyIGZ1bmN0aW9ucy5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHZtLiRjcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQkMSh2bSwgYSwgYiwgYywgZCwgdHJ1ZSk7IH07XG4gICAgICAvLyAkYXR0cnMgJiAkbGlzdGVuZXJzIGFyZSBleHBvc2VkIGZvciBlYXNpZXIgSE9DIGNyZWF0aW9uLlxuICAgICAgLy8gdGhleSBuZWVkIHRvIGJlIHJlYWN0aXZlIHNvIHRoYXQgSE9DcyB1c2luZyB0aGVtIGFyZSBhbHdheXMgdXBkYXRlZFxuICAgICAgdmFyIHBhcmVudERhdGEgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5kYXRhO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIHtcbiAgICAgICAgICBkZWZpbmVSZWFjdGl2ZSh2bSwgJyRhdHRycycsIChwYXJlbnREYXRhICYmIHBhcmVudERhdGEuYXR0cnMpIHx8IGVtcHR5T2JqZWN0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybiQyKFwiJGF0dHJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgICAgZGVmaW5lUmVhY3RpdmUodm0sICckbGlzdGVuZXJzJywgb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybiQyKFwiJGxpc3RlbmVycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICB9XG4gIHZhciBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuICBmdW5jdGlvbiByZW5kZXJNaXhpbihWdWUpIHtcbiAgICAgIC8vIGluc3RhbGwgcnVudGltZSBjb252ZW5pZW5jZSBoZWxwZXJzXG4gICAgICBpbnN0YWxsUmVuZGVySGVscGVycyhWdWUucHJvdG90eXBlKTtcbiAgICAgIFZ1ZS5wcm90b3R5cGUuJG5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgcmV0dXJuIG5leHRUaWNrKGZuLCB0aGlzKTtcbiAgICAgIH07XG4gICAgICBWdWUucHJvdG90eXBlLl9yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgICAgICB2Y
3XIgX2EgPSB2bS4kb3B0aW9ucywgcmVuZGVyID0gX2EucmVuZGVyLCBfcGFyZW50Vm5vZGUgPSBfYS5fcGFyZW50Vm5vZGU7XG4gICAgICAgICAgaWYgKF9wYXJlbnRWbm9kZSAmJiB2bS5faXNNb3VudGVkKSB7XG4gICAgICAgICAgICAgIHZtLiRzY29wZWRTbG90cyA9IG5vcm1hbGl6ZVNjb3BlZFNsb3RzKHZtLiRwYXJlbnQsIF9wYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzLCB2bS4kc2xvdHMsIHZtLiRzY29wZWRTbG90cyk7XG4gICAgICAgICAgICAgIGlmICh2bS5fc2xvdHNQcm94eSkge1xuICAgICAgICAgICAgICAgICAgc3luY1NldHVwU2xvdHModm0uX3Nsb3RzUHJveHksIHZtLiRzY29wZWRTbG90cyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc2V0IHBhcmVudCB2bm9kZS4gdGhpcyBhbGxvd3MgcmVuZGVyIGZ1bmN0aW9ucyB0byBoYXZlIGFjY2Vzc1xuICAgICAgICAgIC8vIHRvIHRoZSBkYXRhIG9uIHRoZSBwbGFjZWhvbGRlciBub2RlLlxuICAgICAgICAgIHZtLiR2bm9kZSA9IF9wYXJlbnRWbm9kZTtcbiAgICAgICAgICAvLyByZW5kZXIgc2VsZlxuICAgICAgICAgIHZhciBwcmV2SW5zdCA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgICAgICAgICB2YXIgcHJldlJlbmRlckluc3QgPSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U7XG4gICAgICAgICAgdmFyIHZub2RlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZSh2bSk7XG4gICAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IHZtO1xuICAgICAgICAgICAgICB2bm9kZSA9IHJlbmRlci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJyZW5kZXJcIik7XG4gICAgICAgICAgICAgIC8vIHJldHVybiBlcnJvciByZW5kZXIgcmVzdWx0LFxuICAgICAgICAgICAgICAvLyBvciBwcmV2aW91cyB2bm9kZSB0byBwcmV2ZW50IHJlbmRlciBlcnJvciBjYXVzaW5nIGJsYW5rIGNvbXBvbmVudFxuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICBpZiAodm0uJG9wdGlvbnMucmVuZGVyRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgdm5vZGUgPSB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQsIGUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJyZW5kZXJFcnJvclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBwcmV2UmVuZGVySW5zdDtcbiAgICAgICAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKHByZXZJbnN0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaWYgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgbm9kZSwgYWxsb3cgaXRcbiAgICAgICAgICBpZiAoaXNBcnJheSh2bm9kZSkgJiYgdm5vZGUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgIHZub2RlID0gdm5vZGVbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHJldHVybiBlbXB0eSB2bm9kZSBpbiBjYXNlIHRoZSByZW5kZXIgZnVuY3Rpb24gZXJyb3JlZCBvdXRcbiAgICAgICAgICBpZiAoISh2bm9kZSBpbnN0YW5jZW9mIFZOb2RlKSkge1xuICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgIHdhcm4kMignTXVsdGlwbGUgcm9vdCBub2RlcyByZXR1cm5lZCBmcm9tIHJlbmRlciBmdW5jdGlvbi4gUmVuZGVyIGZ1bmN0aW9uICcgK1xuICAgICAgICAgICAgICAgICAgICAgICdzaG91bGQgcmV0dXJuIGEgc2luZ2xlIHJvb3Qgbm9kZS4nLCB2bSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdm5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNldCBwYXJlbnRcbiAgICAgICAgICB2bm9kZS5wYXJlbnQgPSBfcGFyZW50Vm5vZGU7XG4gICAgICAgICAgcmV0dXJuIHZub2RlO1xuICAgICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVuc3VyZUN0b3IoY29tcCwgYmFzZSkge1xuICAgICAgaWYgKGNvbXAuX19lc01vZHVsZSB8fCAoaGFzU3ltYm9sICYmIGNvbXBbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ01vZHVsZScpKSB7XG4gICAgICAgICAgY29tcCA9IGNvbXAuZGVmYXVsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc09iamVjdChjb21wKSA/IGJhc2UuZXh0ZW5kKGNvbXApIDogY29tcDtcbiAgfVxuICBmdW5jdGlvbiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyKGZhY3RvcnksIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuLCB0YWcpIHtcbiAgICAgIHZhciBub2RlID0gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICAgICAgbm9kZS5hc3luY0ZhY3RvcnkgPSBmYWN0b3J5O1xuICAgICAgbm9kZS5hc3luY01ldGEgPSB7IGRhdGE6IGRhdGEsIGNvbnRleHQ6IGNvbnRleHQsIGNoaWxkcmVuOiBjaGlsZHJlbiwgdGFnOiB0YWcgfTtcbiAgICAgIHJldHVybiBub2RlO1xuICB9XG4gIGZ1bmN0aW9uIHJlc29sdmVBc3luY0NvbXBvbmVudChmYWN0b3J5LCBiYXNlQ3Rvcikge1xuICAgICAgaWYgKGlzVHJ1ZShmYWN0b3J5LmVycm9yKSAmJiBpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFjdG9yeS5lcnJvckNvbXA7XG4gICAgICB9XG4gICAgICBpZiAoaXNEZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFjdG9yeS5yZXNvbHZlZDtcbiAgICAgIH1cbiAgICAgIHZhciBvd25lciA9IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTtcbiAgICAgIGlmIChvd25lciAmJiBpc0RlZihmYWN0b3J5Lm93bmVycykgJiYgZmFjdG9yeS5vd25lcnMuaW5kZXhPZihvd25lcikgPT09IC0xKSB7XG4gICAgICAgICAgLy8gYWxyZWFkeSBwZW5kaW5nXG4gICAgICAgICAgZmFjdG9yeS5vd25lcnMucHVzaChvd25lcik7XG4gICAgICB9XG4gICAgICBpZiAoaXNUcnVlKGZhY3RvcnkubG9hZGluZykgJiYgaXNEZWYoZmFjdG9yeS5sb2FkaW5nQ29tcCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFjdG9yeS5sb2FkaW5nQ29tcDtcbiAgICAgIH1cbiAgICAgIGlmIChvd25lciAmJiAhaXNEZWYoZmFjdG9yeS5vd25lcnMpKSB7XG4gICAgICAgICAgdmFyIG93bmVyc18xID0gKGZhY3Rvcnkub3duZXJzID0gW293bmVyXSk7XG4gICAgICAgICAgdmFyIHN5bmNfMSA9IHRydWU7XG4gICAgICAgICAgdmFyIHRpbWVyTG9hZGluZ18xID0gbnVsbDtcbiAgICAgICAgICB2Y
3XIgdGltZXJUaW1lb3V0XzEgPSBudWxsO1xuICAgICAgICAgIG93bmVyLiRvbignaG9vazpkZXN0cm95ZWQnLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZW1vdmUkMihvd25lcnNfMSwgb3duZXIpOyB9KTtcbiAgICAgICAgICB2YXIgZm9yY2VSZW5kZXJfMSA9IGZ1bmN0aW9uIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvd25lcnNfMS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgIG93bmVyc18xW2ldLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgICAgICAgIG93bmVyc18xLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICBpZiAodGltZXJMb2FkaW5nXzEgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJMb2FkaW5nXzEpO1xuICAgICAgICAgICAgICAgICAgICAgIHRpbWVyTG9hZGluZ18xID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmICh0aW1lclRpbWVvdXRfMSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lclRpbWVvdXRfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgdGltZXJUaW1lb3V0XzEgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICB2YXIgcmVzb2x2ZSA9IG9uY2UoZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAvLyBjYWNoZSByZXNvbHZlZFxuICAgICAgICAgICAgICBmYWN0b3J5LnJlc29sdmVkID0gZW5zdXJlQ3RvcihyZXMsIGJhc2VDdG9yKTtcbiAgICAgICAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrcyBvbmx5IGlmIHRoaXMgaXMgbm90IGEgc3luY2hyb25vdXMgcmVzb2x2ZVxuICAgICAgICAgICAgICAvLyAoYXN5bmMgcmVzb2x2ZXMgYXJlIHNoaW1tZWQgYXMgc3luY2hyb25vdXMgZHVyaW5nIFNTUilcbiAgICAgICAgICAgICAgaWYgKCFzeW5jXzEpIHtcbiAgICAgICAgICAgICAgICAgIGZvcmNlUmVuZGVyXzEodHJ1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvd25lcnNfMS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIHJlamVjdF8xID0gb25jZShmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgIHdhcm4kMihcIkZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbXBvbmVudDogXCIuY29uY2F0KFN0cmluZyhmYWN0b3J5KSkgK1xuICAgICAgICAgICAgICAgICAgICAgIChyZWFzb24gPyBcIlxcblJlYXNvbjogXCIuY29uY2F0KHJlYXNvbikgOiAnJykpO1xuICAgICAgICAgICAgICBpZiAoaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7XG4gICAgICAgICAgICAgICAgICBmYWN0b3J5LmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGZvcmNlUmVuZGVyXzEodHJ1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2Y
3XIgcmVzXzEgPSBmYWN0b3J5KHJlc29sdmUsIHJlamVjdF8xKTtcbiAgICAgICAgICBpZiAoaXNPYmplY3QocmVzXzEpKSB7XG4gICAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzXzEpKSB7XG4gICAgICAgICAgICAgICAgICAvLyAoKSA9PiBQcm9taXNlXG4gICAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJlc18xLnRoZW4ocmVzb2x2ZSwgcmVqZWN0XzEpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKGlzUHJvbWlzZShyZXNfMS5jb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgICByZXNfMS5jb21wb25lbnQudGhlbihyZXNvbHZlLCByZWplY3RfMSk7XG4gICAgICAgICAgICAgICAgICBpZiAoaXNEZWYocmVzXzEuZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5lcnJvckNvbXAgPSBlbnN1cmVDdG9yKHJlc18xLmVycm9yLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoaXNEZWYocmVzXzEubG9hZGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmdDb21wID0gZW5zdXJlQ3RvcihyZXNfMS5sb2FkaW5nLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc18xLmRlbGF5ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIE5vZGVKUyB0aW1lb3V0IHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJMb2FkaW5nXzEgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyTG9hZGluZ18xID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpICYmIGlzVW5kZWYoZmFjdG9yeS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlUmVuZGVyXzEoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCByZXNfMS5kZWxheSB8fCAyMDApO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChpc0RlZihyZXNfMS50aW1lb3V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgTm9kZUpTIHRpbWVvdXQgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgIHRpbWVyVGltZW91dF8xID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyVGltZW91dF8xID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdF8xKFwidGltZW91dCAoXCIuY29uY2F0KHJlc18xLnRpbWVvdXQsIFwibXMpXCIpICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9LCByZXNfMS50aW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBzeW5jXzEgPSBmYWxzZTtcbiAgICAgICAgICAvLyByZXR1cm4gaW4gY2FzZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5XG4gICAgICAgICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZyA/IGZhY3RvcnkubG9hZGluZ0NvbXAgOiBmYWN0b3J5LnJlc29sdmVkO1xuICAgICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Rmlyc3RDb21wb25lbnRDaGlsZChjaGlsZHJlbikge1xuICAgICAgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB2Y
3XIgYyA9IGNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICBpZiAoaXNEZWYoYykgJiYgKGlzRGVmKGMuY29tcG9uZW50T3B0aW9ucykgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0RXZlbnRzKHZtKSB7XG4gICAgICB2bS5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHZtLl9oYXNIb29rRXZlbnQgPSBmYWxzZTtcbiAgICAgIC8vIGluaXQgcGFyZW50IGF0dGFjaGVkIGV2ZW50c1xuICAgICAgdmFyIGxpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gICAgICBpZiAobGlzdGVuZXJzKSB7XG4gICAgICAgICAgdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzKHZtLCBsaXN0ZW5lcnMpO1xuICAgICAgfVxuICB9XG4gIHZhciB0YXJnZXQkMTtcbiAgZnVuY3Rpb24gYWRkJDEoZXZlbnQsIGZuKSB7XG4gICAgICB0YXJnZXQkMS4kb24oZXZlbnQsIGZuKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmUkMShldmVudCwgZm4pIHtcbiAgICAgIHRhcmdldCQxLiRvZmYoZXZlbnQsIGZuKTtcbiAgfVxuICBmdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciQxKGV2ZW50LCBmbikge1xuICAgICAgdmFyIF90YXJnZXQgPSB0YXJnZXQkMTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBvbmNlSGFuZGxlcigpIHtcbiAgICAgICAgICB2YXIgcmVzID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIF90YXJnZXQuJG9mZihldmVudCwgb25jZUhhbmRsZXIpO1xuICAgICAgICAgIH1cbiAgICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzKHZtLCBsaXN0ZW5lcnMsIG9sZExpc3RlbmVycykge1xuICAgICAgdGFyZ2V0JDEgPSB2bTtcbiAgICAgIHVwZGF0ZUxpc3RlbmVycyhsaXN0ZW5lcnMsIG9sZExpc3RlbmVycyB8fCB7fSwgYWRkJDEsIHJlbW92ZSQxLCBjcmVhdGVPbmNlSGFuZGxlciQxLCB2bSk7XG4gICAgICB0YXJnZXQkMSA9IHVuZGVmaW5lZDtcbiAgfVxuICBmdW5jdGlvbiBldmVudHNNaXhpbihWdWUpIHtcbiAgICAgIHZhciBob29rUkUgPSAvXmhvb2s6LztcbiAgICAgIFZ1ZS5wcm90b3R5cGUuJG9uID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICAgICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICB2bS4kb24oZXZlbnRbaV0sIGZuKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgKHZtLl9ldmVudHNbZXZlbnRdIHx8ICh2bS5fZXZlbnRzW2V2ZW50XSA9IFtdKSkucHVzaChmbik7XG4gICAgICAgICAgICAgIC8vIG9wdGltaXplIGhvb2s6ZXZlbnQgY29zdCBieSB1c2luZyBhIGJvb2xlYW4gZmxhZyBtYXJrZWQgYXQgcmVnaXN0cmF0aW9uXG4gICAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgYSBoYXNoIGxvb2t1cFxuICAgICAgICAgICAgICBpZiAoaG9va1JFLnRlc3QoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICB2bS5faGFzSG9va0V2ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdm07XG4gICAgICB9O1xuICAgICAgVnVlLnByb3RvdHlwZS4kb25jZSA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICAgICAgICB2Y
3XIgdm0gPSB0aGlzO1xuICAgICAgICAgIGZ1bmN0aW9uIG9uKCkge1xuICAgICAgICAgICAgICB2bS4kb2ZmKGV2ZW50LCBvbik7XG4gICAgICAgICAgICAgIGZuLmFwcGx5KHZtLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvbi5mbiA9IGZuO1xuICAgICAgICAgIHZtLiRvbihldmVudCwgb24pO1xuICAgICAgICAgIHJldHVybiB2bTtcbiAgICAgIH07XG4gICAgICBWdWUucHJvdG90eXBlLiRvZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgICAgICAvLyBhbGxcbiAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgIHJldHVybiB2bTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYXJyYXkgb2YgZXZlbnRzXG4gICAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGlfMSA9IDAsIGwgPSBldmVudC5sZW5ndGg7IGlfMSA8IGw7IGlfMSsrKSB7XG4gICAgICAgICAgICAgICAgICB2bS4kb2ZmKGV2ZW50W2lfMV0sIGZuKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdm07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNwZWNpZmljIGV2ZW50XG4gICAgICAgICAgdmFyIGNicyA9IHZtLl9ldmVudHNbZXZlbnRdO1xuICAgICAgICAgIGlmICghY2JzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2bTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmbikge1xuICAgICAgICAgICAgICB2bS5fZXZlbnRzW2V2ZW50XSA9IG51bGw7XG4gICAgICAgICAgICAgIHJldHVybiB2bTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc3BlY2lmaWMgaGFuZGxlclxuICAgICAgICAgIHZhciBjYjtcbiAgICAgICAgICB2Y
3XIgaSA9IGNicy5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICBjYiA9IGNic1tpXTtcbiAgICAgICAgICAgICAgaWYgKGNiID09PSBmbiB8fCBjYi5mbiA9PT0gZm4pIHtcbiAgICAgICAgICAgICAgICAgIGNicy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdm07XG4gICAgICB9O1xuICAgICAgVnVlLnByb3RvdHlwZS4kZW1pdCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgbG93ZXJDYXNlRXZlbnQgPSBldmVudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICBpZiAobG93ZXJDYXNlRXZlbnQgIT09IGV2ZW50ICYmIHZtLl9ldmVudHNbbG93ZXJDYXNlRXZlbnRdKSB7XG4gICAgICAgICAgICAgICAgICB0aXAoXCJFdmVudCBcXFwiXCIuY29uY2F0KGxvd2VyQ2FzZUV2ZW50LCBcIlxcXCIgaXMgZW1pdHRlZCBpbiBjb21wb25lbnQgXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICBcIlwiLmNvbmNhdChmb3JtYXRDb21wb25lbnROYW1lKHZtKSwgXCIgYnV0IHRoZSBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQgZm9yIFxcXCJcIikuY29uY2F0KGV2ZW50LCBcIlxcXCIuIFwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgXCJOb3RlIHRoYXQgSFRNTCBhdHRyaWJ1dGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCB5b3UgY2Fubm90IHVzZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgXCJ2LW9uIHRvIGxpc3RlbiB0byBjYW1lbENhc2UgZXZlbnRzIHdoZW4gdXNpbmcgaW4tRE9NIHRlbXBsYXRlcy4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiWW91IHNob3VsZCBwcm9iYWJseSB1c2UgXFxcIlwiLmNvbmNhdChoeXBoZW5hdGUoZXZlbnQpLCBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIpLmNvbmNhdChldmVudCwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGNicyA9IHZtLl9ldmVudHNbZXZlbnRdO1xuICAgICAgICAgIGlmIChjYnMpIHtcbiAgICAgICAgICAgICAgY2JzID0gY2JzLmxlbmd0aCA+IDEgPyB0b0FycmF5KGNicykgOiBjYnM7XG4gICAgICAgICAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICB2Y
3XIgaW5mbyA9IFwiZXZlbnQgaGFuZGxlciBmb3IgXFxcIlwiLmNvbmNhdChldmVudCwgXCJcXFwiXCIpO1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNic1tpXSwgdm0sIGFyZ3MsIHZtLCBpbmZvKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdm07XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIGFjdGl2ZUVmZmVjdFNjb3BlO1xuICB2YXIgRWZmZWN0U2NvcGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBFZmZlY3RTY29wZShkZXRhY2hlZCkge1xuICAgICAgICAgIGlmIChkZXRhY2hlZCA9PT0gdm9pZCAwKSB7IGRldGFjaGVkID0gZmFsc2U7IH1cbiAgICAgICAgICB0aGlzLmRldGFjaGVkID0gZGV0YWNoZWQ7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAgICovXG4gICAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuZWZmZWN0cyA9IFtdO1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuY2xlYW51cHMgPSBbXTtcbiAgICAgICAgICB0aGlzLnBhcmVudCA9IGFjdGl2ZUVmZmVjdFNjb3BlO1xuICAgICAgICAgIGlmICghZGV0YWNoZWQgJiYgYWN0aXZlRWZmZWN0U2NvcGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbmRleCA9XG4gICAgICAgICAgICAgICAgICAoYWN0aXZlRWZmZWN0U2NvcGUuc2NvcGVzIHx8IChhY3RpdmVFZmZlY3RTY29wZS5zY29wZXMgPSBbXSkpLnB1c2godGhpcykgLSAxO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEVmZmVjdFNjb3BlLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgdmFyIGN1cnJlbnRFZmZlY3RTY29wZSA9IGFjdGl2ZUVmZmVjdFNjb3BlO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICBhY3RpdmVFZmZlY3RTY29wZSA9IGN1cnJlbnRFZmZlY3RTY29wZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgd2FybiQyKFwiY2Fubm90IHJ1biBhbiBpbmFjdGl2ZSBlZmZlY3Qgc2NvcGUuXCIpO1xuICAgICAgICAgIH1cbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIG5vbi1kZXRhY2hlZCBzY29wZXNcbiAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICovXG4gICAgICBFZmZlY3RTY29wZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSB0aGlzO1xuICAgICAgfTtcbiAgICAgIC8qKlxuICAgICAgICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gbm9uLWRldGFjaGVkIHNjb3Blc1xuICAgICAgICogQGludGVybmFsXG4gICAgICAgKi9cbiAgICAgIEVmZmVjdFNjb3BlLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSB0aGlzLnBhcmVudDtcbiAgICAgIH07XG4gICAgICBFZmZlY3RTY29wZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uIChmcm9tUGFyZW50KSB7XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICAgIHZhciBpID0gdm9pZCAwLCBsID0gdm9pZCAwO1xuICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5lZmZlY3RzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RzW2ldLnRlYXJkb3duKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IHRoaXMuY2xlYW51cHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNsZWFudXBzW2ldKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2NvcGVzKSB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY29wZXNbaV0uc3RvcCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBuZXN0ZWQgc2NvcGUsIGRlcmVmZXJlbmNlIGZyb20gcGFyZW50IHRvIGF2b2lkIG1lbW9yeSBsZWFrc1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuZGV0YWNoZWQgJiYgdGhpcy5wYXJlbnQgJiYgIWZyb21QYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgIC8vIG9wdGltaXplZCBPKDEpIHJlbW92YWxcbiAgICAgICAgICAgICAgICAgIHZhciBsYXN0ID0gdGhpcy5wYXJlbnQuc2NvcGVzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgaWYgKGxhc3QgJiYgbGFzdCAhPT0gdGhpcykge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnNjb3Blc1t0aGlzLmluZGV4XSA9IGxhc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgbGFzdC5pbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBFZmZlY3RTY29wZTtcbiAgfSgpKTtcbiAgZnVuY3Rpb24gZWZmZWN0U2NvcGUoZGV0YWNoZWQpIHtcbiAgICAgIHJldHVybiBuZXcgRWZmZWN0U2NvcGUoZGV0YWNoZWQpO1xuICB9XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGZ1bmN0aW9uIHJlY29yZEVmZmVjdFNjb3BlKGVmZmVjdCwgc2NvcGUpIHtcbiAgICAgIGlmIChzY29wZSA9PT0gdm9pZCAwKSB7IHNjb3BlID0gYWN0aXZlRWZmZWN0U2NvcGU7IH1cbiAgICAgIGlmIChzY29wZSAmJiBzY29wZS5hY3RpdmUpIHtcbiAgICAgICAgICBzY29wZS5lZmZlY3RzLnB1c2goZWZmZWN0KTtcbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBnZXRDdXJyZW50U2NvcGUoKSB7XG4gICAgICByZXR1cm4gYWN0aXZlRWZmZWN0U2NvcGU7XG4gIH1cbiAgZnVuY3Rpb24gb25TY29wZURpc3Bvc2UoZm4pIHtcbiAgICAgIGlmIChhY3RpdmVFZmZlY3RTY29wZSkge1xuICAgICAgICAgIGFjdGl2ZUVmZmVjdFNjb3BlLmNsZWFudXBzLnB1c2goZm4pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgd2FybiQyKFwib25TY29wZURpc3Bvc2UoKSBpcyBjYWxsZWQgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgZWZmZWN0IHNjb3BlXCIgK1xuICAgICAgICAgICAgICBcIiB0byBiZSBhc3NvY2lhdG
3VkIHdpdGguXCIpO1xuICAgICAgfVxuICB9XG5cbiAgdmFyIGFjdGl2ZUluc3RhbmNlID0gbnVsbDtcbiAgdmFyIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuICBmdW5jdGlvbiBzZXRBY3RpdmVJbnN0YW5jZSh2bSkge1xuICAgICAgdmFyIHByZXZBY3RpdmVJbnN0YW5jZSA9IGFjdGl2ZUluc3RhbmNlO1xuICAgICAgYWN0aXZlSW5zdGFuY2UgPSB2bTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYWN0aXZlSW5zdGFuY2UgPSBwcmV2QWN0aXZlSW5zdGFuY2U7XG4gICAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGluaXRMaWZlY3ljbGUodm0pIHtcbiAgICAgIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gICAgICAvLyBsb2NhdGUgZmlyc3Qgbm9uLWFic3RyYWN0IHBhcmVudFxuICAgICAgdmFyIHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICAgICAgaWYgKHBhcmVudCAmJiAhb3B0aW9ucy5hYnN0cmFjdCkge1xuICAgICAgICAgIHdoaWxlIChwYXJlbnQuJG9wdGlvbnMuYWJzdHJhY3QgJiYgcGFyZW50LiRwYXJlbnQpIHtcbiAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudC4kY2hpbGRyZW4ucHVzaCh2bSk7XG4gICAgICB9XG4gICAgICB2bS4kcGFyZW50ID0gcGFyZW50O1xuICAgICAgdm0uJHJvb3QgPSBwYXJlbnQgPyBwYXJlbnQuJHJvb3QgOiB2bTtcbiAgICAgIHZtLiRjaGlsZHJlbiA9IFtdO1xuICAgICAgdm0uJHJlZnMgPSB7fTtcbiAgICAgIHZtLl9wcm92aWRlZCA9IHBhcmVudCA/IHBhcmVudC5fcHJvdmlkZWQgOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgdm0uX3dhdGNoZXIgPSBudWxsO1xuICAgICAgdm0uX2luYWN0aXZlID0gbnVsbDtcbiAgICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgdm0uX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgICAgdm0uX2lzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgICB2bS5faXNCZWluZ0Rlc3Ryb3llZCA9IGZhbHNlO1xuICB9XG4gIGZ1bmN0aW9uIGxpZmVjeWNsZU1peGluKFZ1ZSkge1xuICAgICAgVnVlLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgICAgICB2Y
3XIgdm0gPSB0aGlzO1xuICAgICAgICAgIHZhciBwcmV2RWwgPSB2bS4kZWw7XG4gICAgICAgICAgdmFyIHByZXZWbm9kZSA9IHZtLl92bm9kZTtcbiAgICAgICAgICB2YXIgcmVzdG9yZUFjdGl2ZUluc3RhbmNlID0gc2V0QWN0aXZlSW5zdGFuY2Uodm0pO1xuICAgICAgICAgIHZtLl92bm9kZSA9IHZub2RlO1xuICAgICAgICAgIC8vIFZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fIGlzIGluamVjdGVkIGluIGVudHJ5IHBvaW50c1xuICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSByZW5kZXJpbmcgYmFja2VuZCB1c2VkLlxuICAgICAgICAgIGlmICghcHJldlZub2RlKSB7XG4gICAgICAgICAgICAgIC8vIGluaXRpYWwgcmVuZGVyXG4gICAgICAgICAgICAgIHZtLiRlbCA9IHZtLl9fcGF0Y2hfXyh2bS4kZWwsIHZub2RlLCBoeWRyYXRpbmcsIGZhbHNlIC8qIHJlbW92ZU9ubHkgKi8pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gdXBkYXRlc1xuICAgICAgICAgICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18ocHJldlZub2RlLCB2bm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSgpO1xuICAgICAgICAgIC8vIHVwZGF0ZSBfX3Z1ZV9fIHJlZmVyZW5jZVxuICAgICAgICAgIGlmIChwcmV2RWwpIHtcbiAgICAgICAgICAgICAgcHJldkVsLl9fdnVlX18gPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodm0uJGVsKSB7XG4gICAgICAgICAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGlmIHBhcmVudCBpcyBhbiBIT0MsIHVwZGF0ZSBpdHMgJGVsIGFzIHdlbGxcbiAgICAgICAgICB2Y
3XIgd3JhcHBlciA9IHZtO1xuICAgICAgICAgIHdoaWxlICh3cmFwcGVyICYmXG4gICAgICAgICAgICAgIHdyYXBwZXIuJHZub2RlICYmXG4gICAgICAgICAgICAgIHdyYXBwZXIuJHBhcmVudCAmJlxuICAgICAgICAgICAgICB3cmFwcGVyLiR2bm9kZSA9PT0gd3JhcHBlci4kcGFyZW50Ll92bm9kZSkge1xuICAgICAgICAgICAgICB3cmFwcGVyLiRwYXJlbnQuJGVsID0gd3JhcHBlci4kZWw7XG4gICAgICAgICAgICAgIHdyYXBwZXIgPSB3cmFwcGVyLiRwYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHVwZGF0ZWQgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB0byBlbnN1cmUgdGhhdCBjaGlsZHJlbiBhcmVcbiAgICAgICAgICAvLyB1cGRhdGVkIGluIGEgcGFyZW50J3MgdXBkYXRlZCBob29rLlxuICAgICAgfTtcbiAgICAgIFZ1ZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICAgICAgICAgIHZtLl93YXRjaGVyLnVwZGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgIH07XG4gICAgICBWdWUucHJvdG90eXBlLiRkZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgICAgaWYgKHZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FsbEhvb2skMSh2bSwgJ2JlZm9yZURlc3Ryb3knKTtcbiAgICAgICAgICB2bS5faXNCZWluZ0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgICAgLy8gcmVtb3ZlIHNlbGYgZnJvbSBwYXJlbnRcbiAgICAgICAgICB2Y
3XIgcGFyZW50ID0gdm0uJHBhcmVudDtcbiAgICAgICAgICBpZiAocGFyZW50ICYmICFwYXJlbnQuX2lzQmVpbmdEZXN0cm95ZWQgJiYgIXZtLiRvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICAgICAgICAgIHJlbW92ZSQyKHBhcmVudC4kY2hpbGRyZW4sIHZtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGVhcmRvd24gc2NvcGUuIHRoaXMgaW5jbHVkZXMgYm90aCB0aGUgcmVuZGVyIHdhdGNoZXIgYW5kIG90aGVyXG4gICAgICAgICAgLy8gd2F0Y2hlcnMgY3JlYXRlZFxuICAgICAgICAgIHZtLl9zY29wZS5zdG9wKCk7XG4gICAgICAgICAgLy8gcmVtb3ZlIHJlZmVyZW5jZSBmcm9tIGRhdGEgb2JcbiAgICAgICAgICAvLyBmcm96ZW4gb2JqZWN0IG1heSBub3QgaGF2ZSBvYnNlcnZlci5cbiAgICAgICAgICBpZiAodm0uX2RhdGEuX19vYl9fKSB7XG4gICAgICAgICAgICAgIHZtLl9kYXRhLl9fb2JfXy52bUNvdW50LS07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGNhbGwgdGhlIGxhc3QgaG9vay4uLlxuICAgICAgICAgIHZtLl9pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgICAgLy8gaW52b2tlIGRlc3Ryb3kgaG9va3Mgb24gY3VycmVudCByZW5kZXJlZCB0cmVlXG4gICAgICAgICAgdm0uX19wYXRjaF9fKHZtLl92bm9kZSwgbnVsbCk7XG4gICAgICAgICAgLy8gZmlyZSBkZXN0cm95ZWQgaG9va1xuICAgICAgICAgIGNhbGxIb29rJDEodm0sICdkZXN0cm95ZWQnKTtcbiAgICAgICAgICAvLyB0dXJuIG9mZiBhbGwgaW5zdGFuY2UgbGlzdGVuZXJzLlxuICAgICAgICAgIHZtLiRvZmYoKTtcbiAgICAgICAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcbiAgICAgICAgICBpZiAodm0uJGVsKSB7XG4gICAgICAgICAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVsZWFzZSBjaXJjdWxhciByZWZlcmVuY2UgKCM2NzU5KVxuICAgICAgICAgIGlmICh2bS4kdm5vZGUpIHtcbiAgICAgICAgICAgICAgdm0uJHZub2RlLnBhcmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtb3VudENvbXBvbmVudCh2bSwgZWwsIGh5ZHJhdGluZykge1xuICAgICAgdm0uJGVsID0gZWw7XG4gICAgICBpZiAoIXZtLiRvcHRpb25zLnJlbmRlcikge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgaW52YWxpZCB0eXBlXG4gICAgICAgICAgdm0uJG9wdGlvbnMucmVuZGVyID0gY3JlYXRlRW1wdHlWTm9kZTtcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICBpZiAoKHZtLiRvcHRpb25zLnRlbXBsYXRlICYmIHZtLiRvcHRpb25zLnRlbXBsYXRlLmNoYXJBdCgwKSAhPT0gJyMnKSB8fFxuICAgICAgICAgICAgICAgICAgdm0uJG9wdGlvbnMuZWwgfHxcbiAgICAgICAgICAgICAgICAgIGVsKSB7XG4gICAgICAgICAgICAgICAgICB3YXJuJDIoJ1lvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCBvZiBWdWUgd2hlcmUgdGhlIHRlbXBsYXRlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICdjb21waWxlciBpcyBub3QgYXZhaWxhYmxlLiBFaXRoZXIgcHJlLWNvbXBpbGUgdGhlIHRlbXBsYXRlcyBpbnRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICdyZW5kZXIgZnVuY3Rpb25zLCBvciB1c2UgdGhlIGNvbXBpbGVyLWluY2x1ZGVkIGJ1aWxkLicsIHZtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHdhcm4kMignRmFpbGVkIHRvIG1vdW50IGNvbXBvbmVudDogdGVtcGxhdGUgb3IgcmVuZGVyIGZ1bmN0aW9uIG5vdCBkZWZpbmVkLicsIHZtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhbGxIb29rJDEodm0sICdiZWZvcmVNb3VudCcpO1xuICAgICAgdmFyIHVwZGF0ZUNvbXBvbmVudDtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICAgICAgdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2Y
3XIgbmFtZSA9IHZtLl9uYW1lO1xuICAgICAgICAgICAgICB2YXIgaWQgPSB2bS5fdWlkO1xuICAgICAgICAgICAgICB2YXIgc3RhcnRUYWcgPSBcInZ1ZS1wZXJmLXN0YXJ0OlwiLmNvbmNhdChpZCk7XG4gICAgICAgICAgICAgIHZhciBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIi5jb25jYXQoaWQpO1xuICAgICAgICAgICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgICAgICAgICAgdmFyIHZub2RlID0gdm0uX3JlbmRlcigpO1xuICAgICAgICAgICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICAgICAgICAgIG1lYXN1cmUoXCJ2dWUgXCIuY29uY2F0KG5hbWUsIFwiIHJlbmRlclwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICAgICAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgICAgICAgICB2bS5fdXBkYXRlKHZub2RlLCBoeWRyYXRpbmcpO1xuICAgICAgICAgICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICAgICAgICAgIG1lYXN1cmUoXCJ2dWUgXCIuY29uY2F0KG5hbWUsIFwiIHBhdGNoXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2bS5fdXBkYXRlKHZtLl9yZW5kZXIoKSwgaHlkcmF0aW5nKTtcbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIHdhdGNoZXJPcHRpb25zID0ge1xuICAgICAgICAgIGJlZm9yZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBpZiAodm0uX2lzTW91bnRlZCAmJiAhdm0uX2lzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICBjYWxsSG9vayQxKHZtLCAnYmVmb3JlVXBkYXRlJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9O1xuICAgICAge1xuICAgICAgICAgIHdhdGNoZXJPcHRpb25zLm9uVHJhY2sgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gY2FsbEhvb2skMSh2bSwgJ3JlbmRlclRyYWNrZWQnLCBbZV0pOyB9O1xuICAgICAgICAgIHdhdGNoZXJPcHRpb25zLm9uVHJpZ2dlciA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBjYWxsSG9vayQxKHZtLCAncmVuZGVyVHJpZ2dlcmVkJywgW2VdKTsgfTtcbiAgICAgIH1cbiAgICAgIC8vIHdlIHNldCB0aGlzIHRvIHZtLl93YXRjaGVyIGluc2lkZSB0aGUgd2F0Y2hlcidzIGNvbnN0cnVjdG9yXG4gICAgICAvLyBzaW5jZSB0aGUgd2F0Y2hlcidzIGluaXRpYWwgcGF0Y2ggbWF5IGNhbGwgJGZvcmNlVXBkYXRlIChlLmcuIGluc2lkZSBjaGlsZFxuICAgICAgLy8gY29tcG9uZW50J3MgbW91bnRlZCBob29rKSwgd2hpY2ggcmVsaWVzIG9uIHZtLl93YXRjaGVyIGJlaW5nIGFscmVhZHkgZGVmaW5lZFxuICAgICAgbmV3IFdhdGNoZXIodm0sIHVwZGF0ZUNvbXBvbmVudCwgbm9vcCwgd2F0Y2hlck9wdGlvbnMsIHRydWUgLyogaXNSZW5kZXJXYXRjaGVyICovKTtcbiAgICAgIGh5ZHJhdGluZyA9IGZhbHNlO1xuICAgICAgLy8gZmx1c2ggYnVmZmVyIGZvciBmbHVzaDogXCJwcmVcIiB3YXRjaGVycyBxdWV1ZWQgaW4gc2V0dXAoKVxuICAgICAgdmFyIHByZVdhdGNoZXJzID0gdm0uX3ByZVdhdGNoZXJzO1xuICAgICAgaWYgKHByZVdhdGNoZXJzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVXYXRjaGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBwcmVXYXRjaGVyc1tpXS5ydW4oKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBtYW51YWxseSBtb3VudGVkIGluc3RhbmNlLCBjYWxsIG1vdW50ZWQgb24gc2VsZlxuICAgICAgLy8gbW91bnRlZCBpcyBjYWxsZWQgZm9yIHJlbmRlci1jcmVhdGVkIGNoaWxkIGNvbXBvbmVudHMgaW4gaXRzIGluc2VydGVkIGhvb2tcbiAgICAgIGlmICh2bS4kdm5vZGUgPT0gbnVsbCkge1xuICAgICAgICAgIHZtLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgICAgICAgIGNhbGxIb29rJDEodm0sICdtb3VudGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdm07XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlQ2hpbGRDb21wb25lbnQodm0sIHByb3BzRGF0YSwgbGlzdGVuZXJzLCBwYXJlbnRWbm9kZSwgcmVuZGVyQ2hpbGRyZW4pIHtcbiAgICAgIHtcbiAgICAgICAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgY29tcG9uZW50IGhhcyBzbG90IGNoaWxkcmVuXG4gICAgICAvLyB3ZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIG92ZXJ3cml0aW5nICRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbi5cbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBkeW5hbWljIHNjb3BlZFNsb3RzIChoYW5kLXdyaXR0ZW4gb3IgY29tcGlsZWQgYnV0IHdpdGhcbiAgICAgIC8vIGR5bmFtaWMgc2xvdCBuYW1lcykuIFN0YXRpYyBzY29wZWQgc2xvdHMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZSBoYXMgdGhlXG4gICAgICAvLyBcIiRzdGFibGVcIiBtYXJrZXIuXG4gICAgICB2Y
3XIgbmV3U2NvcGVkU2xvdHMgPSBwYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzO1xuICAgICAgdmFyIG9sZFNjb3BlZFNsb3RzID0gdm0uJHNjb3BlZFNsb3RzO1xuICAgICAgdmFyIGhhc0R5bmFtaWNTY29wZWRTbG90ID0gISEoKG5ld1Njb3BlZFNsb3RzICYmICFuZXdTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgICAgICAgIChvbGRTY29wZWRTbG90cyAhPT0gZW1wdHlPYmplY3QgJiYgIW9sZFNjb3BlZFNsb3RzLiRzdGFibGUpIHx8XG4gICAgICAgICAgKG5ld1Njb3BlZFNsb3RzICYmIHZtLiRzY29wZWRTbG90cy4ka2V5ICE9PSBuZXdTY29wZWRTbG90cy4ka2V5KSB8fFxuICAgICAgICAgICghbmV3U2NvcGVkU2xvdHMgJiYgdm0uJHNjb3BlZFNsb3RzLiRrZXkpKTtcbiAgICAgIC8vIEFueSBzdGF0aWMgc2xvdCBjaGlsZHJlbiBmcm9tIHRoZSBwYXJlbnQgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgcGFyZW50J3NcbiAgICAgIC8vIHVwZGF0ZS4gRHluYW1pYyBzY29wZWQgc2xvdHMgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkLiBJbiBzdWNoIGNhc2VzLCBhIGZvcmNlZFxuICAgICAgLy8gdXBkYXRlIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgY29ycmVjdG5lc3MuXG4gICAgICB2YXIgbmVlZHNGb3JjZVVwZGF0ZSA9ICEhKHJlbmRlckNoaWxkcmVuIHx8IC8vIGhhcyBuZXcgc3RhdGljIHNsb3RzXG4gICAgICAgICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuIHx8IC8vIGhhcyBvbGQgc3RhdGljIHNsb3RzXG4gICAgICAgICAgaGFzRHluYW1pY1Njb3BlZFNsb3QpO1xuICAgICAgdmFyIHByZXZWTm9kZSA9IHZtLiR2bm9kZTtcbiAgICAgIHZtLiRvcHRpb25zLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuICAgICAgdm0uJHZub2RlID0gcGFyZW50Vm5vZGU7IC8vIHVwZGF0ZSB2bSdzIHBsYWNlaG9sZGVyIG5vZGUgd2l0aG91dCByZS1yZW5kZXJcbiAgICAgIGlmICh2bS5fdm5vZGUpIHtcbiAgICAgICAgICAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgICAgICAgIHZtLl92bm9kZS5wYXJlbnQgPSBwYXJlbnRWbm9kZTtcbiAgICAgIH1cbiAgICAgIHZtLiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiA9IHJlbmRlckNoaWxkcmVuO1xuICAgICAgLy8gdXBkYXRlICRhdHRycyBhbmQgJGxpc3RlbmVycyBoYXNoXG4gICAgICAvLyB0aGVzZSBhcmUgYWxzbyByZWFjdGl2ZSBzbyB0aGV5IG1heSB0cmlnZ2VyIGNoaWxkIHVwZGF0ZSBpZiB0aGUgY2hpbGRcbiAgICAgIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gICAgICB2Y
3XIgYXR0cnMgPSBwYXJlbnRWbm9kZS5kYXRhLmF0dHJzIHx8IGVtcHR5T2JqZWN0O1xuICAgICAgaWYgKHZtLl9hdHRyc1Byb3h5KSB7XG4gICAgICAgICAgLy8gZm9yY2UgdXBkYXRlIGlmIGF0dHJzIGFyZSBhY2Nlc3NlZCBhbmQgaGFzIGNoYW5nZWQgc2luY2UgaXQgbWF5IGJlXG4gICAgICAgICAgLy8gcGFzc2VkIHRvIGEgY2hpbGQgY29tcG9uZW50LlxuICAgICAgICAgIGlmIChzeW5jU2V0dXBQcm94eSh2bS5fYXR0cnNQcm94eSwgYXR0cnMsIChwcmV2Vk5vZGUuZGF0YSAmJiBwcmV2Vk5vZGUuZGF0YS5hdHRycykgfHwgZW1wdHlPYmplY3QsIHZtLCAnJGF0dHJzJykpIHtcbiAgICAgICAgICAgICAgbmVlZHNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgdm0uJGF0dHJzID0gYXR0cnM7XG4gICAgICAvLyB1cGRhdGUgbGlzdGVuZXJzXG4gICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3Q7XG4gICAgICB2YXIgcHJldkxpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gICAgICBpZiAodm0uX2xpc3RlbmVyc1Byb3h5KSB7XG4gICAgICAgICAgc3luY1NldHVwUHJveHkodm0uX2xpc3RlbmVyc1Byb3h5LCBsaXN0ZW5lcnMsIHByZXZMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIHZtLCAnJGxpc3RlbmVycycpO1xuICAgICAgfVxuICAgICAgdm0uJGxpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gICAgICB1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnModm0sIGxpc3RlbmVycywgcHJldkxpc3RlbmVycyk7XG4gICAgICAvLyB1cGRhdGUgcHJvcHNcbiAgICAgIGlmIChwcm9wc0RhdGEgJiYgdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICAgICAgICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICAgICAgICB2Y
3XIgcHJvcEtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgfHwgW107XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB2YXIga2V5ID0gcHJvcEtleXNbaV07XG4gICAgICAgICAgICAgIHZhciBwcm9wT3B0aW9ucyA9IHZtLiRvcHRpb25zLnByb3BzOyAvLyB3dGYgZmxvdz9cbiAgICAgICAgICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEsIHZtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgICAgICAgIC8vIGtlZXAgYSBjb3B5IG9mIHJhdyBwcm9wc0RhdGFcbiAgICAgICAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gICAgICB9XG4gICAgICAvLyByZXNvbHZlIHNsb3RzICsgZm9yY2UgdXBkYXRlIGlmIGhhcyBjaGlsZHJlblxuICAgICAgaWYgKG5lZWRzRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMocmVuZGVyQ2hpbGRyZW4sIHBhcmVudFZub2RlLmNvbnRleHQpO1xuICAgICAgICAgIHZtLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgICAge1xuICAgICAgICAgIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIGlzSW5JbmFjdGl2ZVRyZWUodm0pIHtcbiAgICAgIHdoaWxlICh2bSAmJiAodm0gPSB2bS4kcGFyZW50KSkge1xuICAgICAgICAgIGlmICh2bS5faW5hY3RpdmUpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZ1bmN0aW9uIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0sIGRpcmVjdCkge1xuICAgICAgaWYgKGRpcmVjdCkge1xuICAgICAgICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAodm0uX2RpcmVjdEluYWN0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHZtLl9pbmFjdGl2ZSB8fCB2bS5faW5hY3RpdmUgPT09IG51bGwpIHtcbiAgICAgICAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZtLiRjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLiRjaGlsZHJlbltpXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhbGxIb29rJDEodm0sICdhY3RpdmF0ZWQnKTtcbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0sIGRpcmVjdCkge1xuICAgICAgaWYgKGRpcmVjdCkge1xuICAgICAgICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgaWYgKGlzSW5JbmFjdGl2ZVRyZWUodm0pKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXZtLl9pbmFjdGl2ZSkge1xuICAgICAgICAgIHZtLl9pbmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLiRjaGlsZHJlbltpXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhbGxIb29rJDEodm0sICdkZWFjdGl2YXRlZCcpO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNhbGxIb29rJDEodm0sIGhvb2ssIGFyZ3MsIHNldENvbnRleHQpIHtcbiAgICAgIGlmIChzZXRDb250ZXh0ID09PSB2b2lkIDApIHsgc2V0Q29udGV4dCA9IHRydWU7IH1cbiAgICAgIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBsaWZlY3ljbGUgaG9va3NcbiAgICAgIHB1c2hUYXJnZXQoKTtcbiAgICAgIHZhciBwcmV2SW5zdCA9IGN1cnJlbnRJbnN0YW5jZTtcbiAgICAgIHZhciBwcmV2U2NvcGUgPSBnZXRDdXJyZW50U2NvcGUoKTtcbiAgICAgIHNldENvbnRleHQgJiYgc2V0Q3VycmVudEluc3RhbmNlKHZtKTtcbiAgICAgIHZhciBoYW5kbGVycyA9IHZtLiRvcHRpb25zW2hvb2tdO1xuICAgICAgdmFyIGluZm8gPSBcIlwiLmNvbmNhdChob29rLCBcIiBob29rXCIpO1xuICAgICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoaGFuZGxlcnNbaV0sIHZtLCBhcmdzIHx8IG51bGwsIHZtLCBpbmZvKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodm0uX2hhc0hvb2tFdmVudCkge1xuICAgICAgICAgIHZtLiRlbWl0KCdob29rOicgKyBob29rKTtcbiAgICAgIH1cbiAgICAgIGlmIChzZXRDb250ZXh0KSB7XG4gICAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKHByZXZJbnN0KTtcbiAgICAgICAgICBwcmV2U2NvcGUgJiYgcHJldlNjb3BlLm9uKCk7XG4gICAgICB9XG4gICAgICBwb3BUYXJnZXQoKTtcbiAgfVxuXG4gIHZhciBNQVhfVVBEQVRFX0NPVU5UID0gMTAwO1xuICB2YXIgcXVldWUgPSBbXTtcbiAgdmFyIGFjdGl2YXRlZENoaWxkcmVuID0gW107XG4gIHZhciBoYXMgPSB7fTtcbiAgdmFyIGNpcmN1bGFyID0ge307XG4gIHZhciB3YWl0aW5nID0gZmFsc2U7XG4gIHZhciBmbHVzaGluZyA9IGZhbHNlO1xuICB2YXIgaW5kZXgkMSA9IDA7XG4gIC8qKlxuICAgKiBSZXNldCB0aGUgc2NoZWR1bGVyJ3Mgc3RhdGUuXG4gICAqL1xuICBmdW5jdGlvbiByZXNldFNjaGVkdWxlclN0YXRlKCkge1xuICAgICAgaW5kZXgkMSA9IHF1ZXVlLmxlbmd0aCA9IGFjdGl2YXRlZENoaWxkcmVuLmxlbmd0aCA9IDA7XG4gICAgICBoYXMgPSB7fTtcbiAgICAgIHtcbiAgICAgICAgICBjaXJjdWxhciA9IHt9O1xuICAgICAgfVxuICAgICAgd2FpdGluZyA9IGZsdXNoaW5nID0gZmFsc2U7XG4gIH1cbiAgLy8gQXN5bmMgZWRnZSBjYXNlICM2NTY2IHJlcXVpcmVzIHNhdmluZyB0aGUgdGltZXN0YW1wIHdoZW4gZXZlbnQgbGlzdGVuZXJzIGFyZVxuICAvLyBhdHRhY2hlZC4gSG93ZXZlciwgY2FsbGluZyBwZXJmb3JtYW5jZS5ub3coKSBoYXMgYSBwZXJmIG92ZXJoZWFkIGVzcGVjaWFsbHlcbiAgLy8gaWYgdGhlIHBhZ2UgaGFzIHRob3VzYW5kcyBvZiBldmVudCBsaXN0ZW5lcnMuIEluc3RlYWQsIHdlIHRha2UgYSB0aW1lc3RhbXBcbiAgLy8gZXZlcnkgdGltZSB0aGUgc2NoZWR1bGVyIGZsdXNoZXMgYW5kIHVzZSB0aGF0IGZvciBhbGwgZXZlbnQgbGlzdGVuZXJzXG4gIC8vIGF0dGFjaGVkIGR1cmluZyB0aGF0IGZsdXNoLlxuICB2YXIgY3VycmVudEZsdXNoVGltZXN0YW1wID0gMDtcbiAgLy8gQXN5bmMgZWRnZSBjYXNlIGZpeCByZXF1aXJlcyBzdG9yaW5nIGFuIGV2ZW50IGxpc3RlbmVyJ3MgYXR0YWNoIHRpbWVzdGFtcC5cbiAgdmFyIGdldE5vdyA9IERhdGUubm93O1xuICAvLyBEZXRlcm1pbmUgd2hhdCBldmVudCB0aW1lc3RhbXAgdGhlIGJyb3dzZXIgaXMgdXNpbmcuIEFubm95aW5nbHksIHRoZVxuICAvLyB0aW1lc3RhbXAgY2FuIGVpdGhlciBiZSBoaS1yZXMgKHJlbGF0aXZlIHRvIHBhZ2UgbG9hZCkgb3IgbG93LXJlc1xuICAvLyAocmVsYXRpdmUgdG8gVU5JWCBlcG9jaCksIHNvIGluIG9yZGVyIHRvIGNvbXBhcmUgdGltZSB3ZSBoYXZlIHRvIHVzZSB0aGVcbiAgLy8gc2FtZSB0aW1lc3RhbXAgdHlwZSB3aGVuIHNhdmluZyB0aGUgZmx1c2ggdGltZXN0YW1wLlxuICAvLyBBbGwgSUUgdmVyc2lvbnMgdXNlIGxvdy1yZXMgZXZlbnQgdGltZXN0YW1wcywgYW5kIGhh
3dmUgcHJvYmxlbWF0aWMgY2xvY2tcbiAgLy8gaW1wbGVtZW50YXRpb25zICgjOTYzMilcbiAgaWYgKGluQnJvd3NlciAmJiAhaXNJRSkge1xuICAgICAgdmFyIHBlcmZvcm1hbmNlXzEgPSB3aW5kb3cucGVyZm9ybWFuY2U7XG4gICAgICBpZiAocGVyZm9ybWFuY2VfMSAmJlxuICAgICAgICAgIHR5cGVvZiBwZXJmb3JtYW5jZV8xLm5vdyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgIGdldE5vdygpID4gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50JykudGltZVN0YW1wKSB7XG4gICAgICAgICAgLy8gaWYgdGhlIGV2ZW50IHRpbWVzdGFtcCwgYWx0aG91Z2ggZXZhbHVhdGVkIEFGVEVSIHRoZSBEYXRlLm5vdygpLCBpc1xuICAgICAgICAgIC8vIHNtYWxsZXIgdGhhbiBpdCwgaXQgbWVhbnMgdGhlIGV2ZW50IGlzIHVzaW5nIGEgaGktcmVzIHRpbWVzdGFtcCxcbiAgICAgICAgICAvLyBhbmQgd2UgbmVlZCB0byB1c2UgdGhlIGhpLXJlcyB2ZXJzaW9uIGZvciBldmVudCBsaXN0ZW5lciB0aW1lc3RhbXBzIGFzXG4gICAgICAgICAgLy8gd2VsbC5cbiAgICAgICAgICBnZXROb3cgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwZXJmb3JtYW5jZV8xLm5vdygpOyB9O1xuICAgICAgfVxuICB9XG4gIHZhciBzb3J0Q29tcGFyZUZuID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIGlmIChhLnBvc3QpIHtcbiAgICAgICAgICBpZiAoIWIucG9zdClcbiAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChiLnBvc3QpIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gYS5pZCAtIGIuaWQ7XG4gIH07XG4gIC8qKlxuICAgKiBGbHVzaCBib3RoIHF1ZXVlcyBhbmQgcnVuIHRoZSB3YXRjaGVycy5cbiAgICovXG4gIGZ1bmN0aW9uIGZsdXNoU2NoZWR1bGVyUXVldWUoKSB7XG4gICAgICBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSBnZXROb3coKTtcbiAgICAgIGZsdXNoaW5nID0gdHJ1ZTtcbiAgICAgIHZhciB3YXRjaGVyLCBpZDtcbiAgICAgIC8vIFNvcnQgcXVldWUgYmVmb3JlIGZsdXNoLlxuICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQ6XG4gICAgICAvLyAxLiBDb21wb25lbnRzIGFyZSB1cGRhdGVkIGZyb20gcGFyZW50IHRvIGNoaWxkLiAoYmVjYXVzZSBwYXJlbnQgaXMgYWx3YXlzXG4gICAgICAvLyAgICBjcmVhdGVkIGJlZm9yZSB0aGUgY2hpbGQpXG4gICAgICAvLyAyLiBBIGNvbXBvbmVudCdzIHVzZXIgd2F0Y2hlcnMgYXJlIHJ1biBiZWZvcmUgaXRzIHJlbmRlciB3YXRjaGVyIChiZWNhdXNlXG4gICAgICAvLyAgICB1c2VyIHdhdGNoZXJzIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgcmVuZGVyIHdhdGNoZXIpXG4gICAgICAvLyAzLiBJZiBhIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQgZHVyaW5nIGEgcGFyZW50IGNvbXBvbmVudCdzIHdhdGNoZXIgcnVuLFxuICAgICAgLy8gICAgaXRzIHdhdGNoZXJzIGNhbiBiZSBza2lwcGVkLlxuICAgICAgcXVldWUuc29ydChzb3J0Q29tcGFyZUZuKTtcbiAgICAgIC8vIGRvIG5vdCBjYWNoZSBsZW5ndGggYmVjYXVzZSBtb3JlIHdhdGNoZXJzIG1pZ2h0IGJlIHB1c2hlZFxuICAgICAgLy8gYXMgd2UgcnVuIGV4aXN0aW5nIHdhdGNoZXJzXG4gICAgICBmb3IgKGluZGV4JDEgPSAwOyBpbmRleCQxIDwgcXVldWUubGVuZ3RoOyBpbmRleCQxKyspIHtcbiAgICAgICAgICB3YXRjaGVyID0gcXVldWVbaW5kZXgkMV07XG4gICAgICAgICAgaWYgKHdhdGNoZXIuYmVmb3JlKSB7XG4gICAgICAgICAgICAgIHdhdGNoZXIuYmVmb3JlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlkID0gd2F0Y2hlci5pZDtcbiAgICAgICAgICBoYXNbaWRdID0gbnVsbDtcbiAgICAgICAgICB3YXRjaGVyLnJ1bigpO1xuICAgICAgICAgIC8vIGluIGRldiBidWlsZCwgY2hlY2sgYW5kIHN0b3AgY2lyY3VsYXIgdXBkYXRlcy5cbiAgICAgICAgICBpZiAoaGFzW2lkXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGNpcmN1bGFyW2lkXSA9IChjaXJjdWxhcltpZF0gfHwgMCkgKyAxO1xuICAgICAgICAgICAgICBpZiAoY2lyY3VsYXJbaWRdID4gTUFYX1VQREFURV9DT1VOVCkge1xuICAgICAgICAgICAgICAgICAgd2FybiQyKCdZb3UgbWF5IGhhdmUgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AgJyArXG4gICAgICAgICAgICAgICAgICAgICAgKHdhdGNoZXIudXNlclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiaW4gd2F0Y2hlciB3aXRoIGV4cHJlc3Npb24gXFxcIlwiLmNvbmNhdCh3YXRjaGVyLmV4cHJlc3Npb24sIFwiXFxcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiaW4gYSBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9uLlwiKSwgd2F0Y2hlci52bSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGtlZXAgY29waWVzIG9mIHBvc3QgcXVldWVzIGJlZm9yZSByZXNldHRpbmcgc3RhdGVcbiAgICAgIHZhciBhY3RpdmF0ZWRRdWV1ZSA9IGFjdGl2YXRlZENoaWxkcmVuLnNsaWNlKCk7XG4gICAgICB2Y
3XIgdXBkYXRlZFF1ZXVlID0gcXVldWUuc2xpY2UoKTtcbiAgICAgIHJlc2V0U2NoZWR1bGVyU3RhdGUoKTtcbiAgICAgIC8vIGNhbGwgY29tcG9uZW50IHVwZGF0ZWQgYW5kIGFjdGl2YXRlZCBob29rc1xuICAgICAgY2FsbEFjdGl2YXRlZEhvb2tzKGFjdGl2YXRlZFF1ZXVlKTtcbiAgICAgIGNhbGxVcGRhdGVkSG9va3ModXBkYXRlZFF1ZXVlKTtcbiAgICAgIGNsZWFudXBEZXBzKCk7XG4gICAgICAvLyBkZXZ0b29sIGhvb2tcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGRldnRvb2xzICYmIGNvbmZpZy5kZXZ0b29scykge1xuICAgICAgICAgIGRldnRvb2xzLmVtaXQoJ2ZsdXNoJyk7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY2FsbFVwZGF0ZWRIb29rcyhxdWV1ZSkge1xuICAgICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGg7XG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgdmFyIHdhdGNoZXIgPSBxdWV1ZVtpXTtcbiAgICAgICAgICB2YXIgdm0gPSB3YXRjaGVyLnZtO1xuICAgICAgICAgIGlmICh2bSAmJiB2bS5fd2F0Y2hlciA9PT0gd2F0Y2hlciAmJiB2bS5faXNNb3VudGVkICYmICF2bS5faXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgY2FsbEhvb2skMSh2bSwgJ3VwZGF0ZWQnKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFF1ZXVlIGEga2VwdC1hbGl2ZSBjb21wb25lbnQgdGhhdCB3YXMgYWN0aXZhdGVkIGR1cmluZyBwYXRjaC5cbiAgICogVGhlIHF1ZXVlIHdpbGwgYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSBlbnRpcmUgdHJlZSBoYXMgYmVlbiBwYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gcXVldWVBY3RpdmF0ZWRDb21wb25lbnQodm0pIHtcbiAgICAgIC8vIHNldHRpbmcgX2luYWN0aXZlIHRvIGZhbHNlIGhlcmUgc28gdGhhdCBhIHJlbmRlciBmdW5jdGlvbiBjYW5cbiAgICAgIC8vIHJlbHkgb24gY2hlY2tpbmcgd2hldGhlciBpdCdzIGluIGFuIGluYWN0aXZlIHRyZWUgKGUuZy4gcm91dGVyLXZpZXcpXG4gICAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIGFjdGl2YXRlZENoaWxkcmVuLnB1c2godm0pO1xuICB9XG4gIGZ1bmN0aW9uIGNhbGxBY3RpdmF0ZWRIb29rcyhxdWV1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHF1ZXVlW2ldLl9pbmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChxdWV1ZVtpXSwgdHJ1ZSAvKiB0cnVlICovKTtcbiAgICAgIH1cbiAgfVxuICAvKipcbiAgICogUHVzaCBhIHdhdGNoZXIgaW50byB0aGUgd2F0Y2hlciBxdWV1ZS5cbiAgICogSm9icyB3aXRoIGR1cGxpY2F0ZSBJRHMgd2lsbCBiZSBza2lwcGVkIHVubGVzcyBpdCdzXG4gICAqIHB1c2hlZCB3aGVuIHRoZSBxdWV1ZSBpcyBiZWluZyBmbHVzaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gcXVldWVXYXRjaGVyKHdhdGNoZXIpIHtcbiAgICAgIHZhciBpZCA9IHdhdGNoZXIuaWQ7XG4gICAgICBpZiAoaGFzW2lkXSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHdhdGNoZXIgPT09IERlcC50YXJnZXQgJiYgd2F0Y2hlci5ub1JlY3Vyc2UpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBoYXNbaWRdID0gdHJ1ZTtcbiAgICAgIGlmICghZmx1c2hpbmcpIHtcbiAgICAgICAgICBxdWV1ZS5wdXNoKHdhdGNoZXIpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gaWYgYWxyZWFkeSBmbHVzaGluZywgc3BsaWNlIHRoZSB3YXRjaGVyIGJhc2VkIG9uIGl0cyBpZFxuICAgICAgICAgIC8vIGlmIGFscmVhZHkgcGFzdCBpdHMgaWQsIGl0IHdpbGwgYmUgcnVuIG5leHQgaW1tZWRpYXRlbHkuXG4gICAgICAgICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChpID4gaW5kZXgkMSAmJiBxdWV1ZVtpXS5pZCA+IHdhdGNoZXIuaWQpIHtcbiAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxdWV1ZS5zcGxpY2UoaSArIDEsIDAsIHdhdGNoZXIpO1xuICAgICAgfVxuICAgICAgLy8gcXVldWUgdGhlIGZsdXNoXG4gICAgICBpZiAoIXdhaXRpbmcpIHtcbiAgICAgICAgICB3YWl0aW5nID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoIWNvbmZpZy5hc3luYykge1xuICAgICAgICAgICAgICBmbHVzaFNjaGVkdWxlclF1ZXVlKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dFRpY2soZmx1c2hTY2hlZHVsZXJRdWV1ZSk7XG4gICAgICB9XG4gIH1cblxuICB2YXIgV0FUQ0hFUiA9IFwid2F0Y2hlclwiO1xuICB2YXIgV0FUQ0hFUl9DQiA9IFwiXCIuY29uY2F0KFdBVENIRVIsIFwiIGNhbGxiYWNrXCIpO1xuICB2YXIgV0FUQ0hFUl9HRVRURVIgPSBcIlwiLmNvbmNhdChXQVRDSEVSLCBcIiBnZXR0ZXJcIik7XG4gIHZhciBXQVRDSEVSX0NMRUFOVVAgPSBcIlwiLmNvbmNhdChXQVRDSEVSLCBcIiBjbGVhbnVwXCIpO1xuICAvLyBTaW1wbGUgZWZmZWN0LlxuICBmdW5jdGlvbiB3YXRjaEVmZmVjdChlZmZlY3QsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBkb1dhdGNoKGVmZmVjdCwgbnVsbCwgb3B0aW9ucyk7XG4gIH1cbiAgZnVuY3Rpb24gd2F0Y2hQb3N0RWZmZWN0KGVmZmVjdCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGRvV2F0Y2goZWZmZWN0LCBudWxsLCAoX19hc3NpZ24oX19hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGZsdXNoOiAncG9zdCcgfSkgKSk7XG4gIH1cbiAgZnVuY3Rpb24gd2F0Y2hTeW5jRWZmZWN0KGVmZmVjdCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGRvV2F0Y2goZWZmZWN0LCBudWxsLCAoX19hc3NpZ24oX19hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGZsdXNoOiAnc3luYycgfSkgKSk7XG4gIH1cbiAgLy8gaW5pdGlhbCB2YWx1ZSBmb3Igd2F0Y2hlcnMgdG8gdHJpZ2dlciBvbiB1bmRlZmluZWQgaW5pdGlhbCB2YWx1ZXNcbiAgdmFyIElOSVRJQUxfV0FUQ0hFUl9WQUxVRSA9IHt9O1xuICAvLyBpbXBsZW1lbnRhdGlvblxuICBmdW5jdGlvbiB3YXRjaChzb3VyY2UsIGNiLCBvcHRpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2FybiQyKFwiYHdhdGNoKGZuLCBvcHRpb25zPylgIHNpZ25hdHVyZSBoYXMgYmVlbiBtb3ZlZCB0byBhIHNlcGFyYXRlIEFQSS4gXCIgK1xuICAgICAgICAgICAgICBcIlVzZSBgd2F0Y2hFZmZlY3QoZm4sIG9wdGlvbnM/KWAgaW5zdGVhZC4gYHdhdGNoYCBub3cgb25seSBcIiArXG4gICAgICAgICAgICAgIFwic3VwcG9ydHMgYHdhdGNoKHNvdXJjZSwgY2IsIG9wdGlvbnM/KSBzaWduYXR1cmUuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRvV2F0Y2goc291cmNlLCBjYiwgb3B0aW9ucyk7XG4gIH1cbiAgZnVuY3Rpb24gZG9XYXRjaChzb3VyY2UsIGNiLCBfYSkge1xuICAgICAgdmFyIF9iID0gX2EgPT09IHZvaWQgMCA/IGVtcHR5T2JqZWN0IDogX2EsIGltbWVkaWF0ZSA9IF9iLmltbWVkaWF0ZSwgZGVlcCA9IF9iLmRlZXAsIF9jID0gX2IuZmx1c2gsIGZsdXNoID0gX2MgPT09IHZvaWQgMCA/ICdwcmUnIDogX2MsIG9uVHJhY2sgPSBfYi5vblRyYWNrLCBvblRyaWdnZXIgPSBfYi5vblRyaWdnZXI7XG4gICAgICBpZiAoIWNiKSB7XG4gICAgICAgICAgaWYgKGltbWVkaWF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgI
3Hdhcm4kMihcIndhdGNoKCkgXFxcImltbWVkaWF0ZVxcXCIgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgdGhlIFwiICtcbiAgICAgICAgICAgICAgICAgIFwid2F0Y2goc291cmNlLCBjYWxsYmFjaywgb3B0aW9ucz8pIHNpZ25hdHVyZS5cIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkZWVwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgd2FybiQyKFwid2F0Y2goKSBcXFwiZGVlcFxcXCIgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgdGhlIFwiICtcbiAgICAgICAgICAgICAgICAgIFwid2F0Y2goc291cmNlLCBjYWxsYmFjaywgb3B0aW9ucz8pIHNpZ25hdHVyZS5cIik7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIHdhcm5JbnZhbGlkU291cmNlID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICB3YXJuJDIoXCJJbnZhbGlkIHdhdGNoIHNvdXJjZTogXCIuY29uY2F0KHMsIFwiLiBBIHdhdGNoIHNvdXJjZSBjYW4gb25seSBiZSBhIGdldHRlci9lZmZlY3QgXCIpICtcbiAgICAgICAgICAgICAgXCJmdW5jdGlvbiwgYSByZWYsIGEgcmVhY3RpdmUgb2JqZWN0LCBvciBhbiBhcnJheSBvZiB0aGVzZSB0eXBlcy5cIik7XG4gICAgICB9O1xuICAgICAgdmFyIGluc3RhbmNlID0gY3VycmVudEluc3RhbmNlO1xuICAgICAgdmFyIGNhbGwgPSBmdW5jdGlvbiAoZm4sIHR5cGUsIGFyZ3MpIHtcbiAgICAgICAgICBpZiAoYXJncyA9PT0gdm9pZCAwKSB7IGFyZ3MgPSBudWxsOyB9XG4gICAgICAgICAgdmFyIHJlcyA9IGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZuLCBudWxsLCBhcmdzLCBpbnN0YW5jZSwgdHlwZSk7XG4gICAgICAgICAgaWYgKGRlZXAgJiYgcmVzICYmIHJlcy5fX29iX18pXG4gICAgICAgICAgICAgIHJlcy5fX29iX18uZGVwLmRlcGVuZCgpO1xuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICB9O1xuICAgICAgdmFyIGdldHRlcjtcbiAgICAgIHZhciBmb3JjZVRyaWdnZXIgPSBmYWxzZTtcbiAgICAgIHZhciBpc011bHRpU291cmNlID0gZmFsc2U7XG4gICAgICBpZiAoaXNSZWYoc291cmNlKSkge1xuICAgICAgICAgIGdldHRlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNvdXJjZS52YWx1ZTsgfTtcbiAgICAgICAgICBmb3JjZVRyaWdnZXIgPSBpc1NoYWxsb3coc291cmNlKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzUmVhY3RpdmUoc291cmNlKSkge1xuICAgICAgICAgIGdldHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgc291cmNlLl9fb2JfXy5kZXAuZGVwZW5kKCk7XG4gICAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBkZWVwID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICAgIGlzTXVsdGlTb3VyY2UgPSB0cnVlO1xuICAgICAgICAgIGZvcmNlVHJpZ2dlciA9IHNvdXJjZS5zb21lKGZ1bmN0aW9uIChzKSB7IHJldHVybiBpc1JlYWN0aXZlKHMpIHx8IGlzU2hhbGxvdyhzKTsgfSk7XG4gICAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gc291cmNlLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICAgICAgaWYgKGlzUmVmKHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMudmFsdWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1JlYWN0aXZlKHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcy5fX29iX18uZGVwLmRlcGVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZShzKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24ocykpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbChzLCBXQVRDSEVSX0dFVFRFUik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuSW52YWxpZFNvdXJjZShzKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24oc291cmNlKSkge1xuICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgICAvLyBnZXR0ZXIgd2l0aCBjYlxuICAgICAgICAgICAgICBnZXR0ZXIgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjYWxsKHNvdXJjZSwgV0FUQ0hFUl9HRVRURVIpOyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gbm8gY2IgLT4gc2ltcGxlIGVmZmVjdFxuICAgICAgICAgICAgICBnZXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuX2lzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKGNsZWFudXApIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbChzb3VyY2UsIFdBVENIRVIsIFtvbkNsZWFudXBdKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICBnZXR0ZXIgPSBub29wO1xuICAgICAgICAgIHdhcm5JbnZhbGlkU291cmNlKHNvdXJjZSk7XG4gICAgICB9XG4gICAgICBpZiAoY2IgJiYgZGVlcCkge1xuICAgICAgICAgIHZhciBiYXNlR2V0dGVyXzEgPSBnZXR0ZXI7XG4gICAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJhdmVyc2UoYmFzZUdldHRlcl8xKCkpOyB9O1xuICAgICAgfVxuICAgICAgdmFyIGNsZWFudXA7XG4gICAgICB2Y
3XIgb25DbGVhbnVwID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgY2xlYW51cCA9IHdhdGNoZXIub25TdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBjYWxsKGZuLCBXQVRDSEVSX0NMRUFOVVApO1xuICAgICAgICAgIH07XG4gICAgICB9O1xuICAgICAgLy8gaW4gU1NSIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2V0dXAgYW4gYWN0dWFsIGVmZmVjdCwgYW5kIGl0IHNob3VsZCBiZSBub29wXG4gICAgICAvLyB1bmxlc3MgaXQncyBlYWdlclxuICAgICAgaWYgKGlzU2VydmVyUmVuZGVyaW5nKCkpIHtcbiAgICAgICAgICAvLyB3ZSB3aWxsIGFsc28gbm90IGNhbGwgdGhlIGludmFsaWRhdGUgY2FsbGJhY2sgKCsgcnVubmVyIGlzIG5vdCBzZXQgdXApXG4gICAgICAgICAgb25DbGVhbnVwID0gbm9vcDtcbiAgICAgICAgICBpZiAoIWNiKSB7XG4gICAgICAgICAgICAgIGdldHRlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgICAgICAgICAgY2FsbChjYiwgV0FUQ0hFUl9DQiwgW1xuICAgICAgICAgICAgICAgICAgZ2V0dGVyKCksXG4gICAgICAgICAgICAgICAgICBpc011bHRpU291cmNlID8gW10gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBvbkNsZWFudXBcbiAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBub29wO1xuICAgICAgfVxuICAgICAgdmFyIHdhdGNoZXIgPSBuZXcgV2F0Y2hlcihjdXJyZW50SW5zdGFuY2UsIGdldHRlciwgbm9vcCwge1xuICAgICAgICAgIGxhenk6IHRydWVcbiAgICAgIH0pO1xuICAgICAgd2F0Y2hlci5ub1JlY3Vyc2UgPSAhY2I7XG4gICAgICB2Y
3XIgb2xkVmFsdWUgPSBpc011bHRpU291cmNlID8gW10gOiBJTklUSUFMX1dBVENIRVJfVkFMVUU7XG4gICAgICAvLyBvdmVyd3JpdGUgZGVmYXVsdCBydW5cbiAgICAgIHdhdGNoZXIucnVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghd2F0Y2hlci5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgICAgLy8gd2F0Y2goc291cmNlLCBjYilcbiAgICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gd2F0Y2hlci5nZXQoKTtcbiAgICAgICAgICAgICAgaWYgKGRlZXAgfHxcbiAgICAgICAgICAgICAgICAgIGZvcmNlVHJpZ2dlciB8fFxuICAgICAgICAgICAgICAgICAgKGlzTXVsdGlTb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICA/IG5ld1ZhbHVlLnNvbWUoZnVuY3Rpb24gKHYsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc0NoYW5nZWQodiwgb2xkVmFsdWVbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBoYXNDaGFuZ2VkKG5ld1ZhbHVlLCBvbGRWYWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIGJlZm9yZSBydW5uaW5nIGNiIGFnYWluXG4gICAgICAgICAgICAgICAgICBpZiAoY2xlYW51cCkge1xuICAgICAgICAgICAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNhbGwoY2IsIFdBVENIRVJfQ0IsIFtcbiAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAvLyBwYXNzIHVuZGVmaW5lZCBhcyB0aGUgb2xkIHZhbHVlIHdoZW4gaXQncyBjaGFuZ2VkIGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlID09PSBJTklUSUFMX1dBVENIRVJfVkFMVUUgPyB1bmRlZmluZWQgOiBvbGRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsZWFudXBcbiAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgICAgb2xkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gd2F0Y2hFZmZlY3RcbiAgICAgICAgICAgICAgd2F0Y2hlci5nZXQoKTtcbiAgICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKGZsdXNoID09PSAnc3luYycpIHtcbiAgICAgICAgICB3YXRjaGVyLnVwZGF0ZSA9IHdhdGNoZXIucnVuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZmx1c2ggPT09ICdwb3N0Jykge1xuICAgICAgICAgIHdhdGNoZXIucG9zdCA9IHRydWU7XG4gICAgICAgICAgd2F0Y2hlci51cGRhdGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBxdWV1ZVdhdGNoZXIod2F0Y2hlcik7IH07XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICAvLyBwcmVcbiAgICAgICAgICB3YXRjaGVyLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlID09PSBjdXJyZW50SW5zdGFuY2UgJiYgIWluc3RhbmNlLl9pc01vdW50ZWQpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHByZS13YXRjaGVyIHRyaWdnZXJlZCBiZWZvcmVcbiAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBpbnN0YW5jZS5fcHJlV2F0Y2hlcnMgfHwgKGluc3RhbmNlLl9wcmVXYXRjaGVycyA9IFtdKTtcbiAgICAgICAgICAgICAgICAgIGlmIChidWZmZXIuaW5kZXhPZih3YXRjaGVyKSA8IDApXG4gICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnB1c2god2F0Y2hlcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICBxdWV1ZVdhdGNoZXIod2F0Y2hlcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAge1xuICAgICAgICAgIHdhdGNoZXIub25UcmFjayA9IG9uVHJhY2s7XG4gICAgICAgICAgd2F0Y2hlci5vblRyaWdnZXIgPSBvblRyaWdnZXI7XG4gICAgICB9XG4gICAgICAvLyBpbml0aWFsIHJ1blxuICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgaWYgKGltbWVkaWF0ZSkge1xuICAgICAgICAgICAgICB3YXRjaGVyLnJ1bigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgb2xkVmFsdWUgPSB3YXRjaGVyLmdldCgpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGZsdXNoID09PSAncG9zdCcgJiYgaW5zdGFuY2UpIHtcbiAgICAgICAgICBpbnN0YW5jZS4kb25jZSgnaG9vazptb3VudGVkJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gd2F0Y2hlci5nZXQoKTsgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICB3YXRjaGVyLmdldCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB3YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvdmlkZShrZXksIHZhbHVlKSB7XG4gICAgICBpZiAoIWN1cnJlbnRJbnN0YW5jZSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgd2FybiQyKFwicHJvdmlkZSgpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHNldHVwKCkuXCIpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIFRTIGRvZXNuJ3QgYWxsb3cgc3ltYm9sIGFzIGluZGV4IHR5cGVcbiAgICAgICAgICByZXNvbHZlUHJvdmlkZWQoY3VycmVudEluc3RhbmNlKVtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcmVzb2x2ZVByb3ZpZGVkKHZtKSB7XG4gICAgICAvLyBieSBkZWZhdWx0IGFuIGluc3RhbmNlIGluaGVyaXRzIGl0cyBwYXJlbnQncyBwcm92aWRlcyBvYmplY3RcbiAgICAgIC8vIGJ1dCB3aGVuIGl0IG5lZWRzIHRvIHByb3ZpZGUgdmFsdWVzIG9mIGl0cyBvd24sIGl0IGNyZWF0ZXMgaXRzXG4gICAgICAvLyBvd24gcHJvdmlkZXMgb2JqZWN0IHVzaW5nIHBhcmVudCBwcm92aWRlcyBvYmplY3QgYXMgcHJvdG90eXBlLlxuICAgICAgLy8gdGhpcyB3YXkgaW4gYGluamVjdGAgd2UgY2FuIHNpbXBseSBsb29rIHVwIGluamVjdGlvbnMgZnJvbSBkaXJlY3RcbiAgICAgIC8vIHBhcmVudCBhbmQgbGV0IHRoZSBwcm90b3R5cGUgY2hhaW4gZG8gdGhlIHdvcmsuXG4gICAgICB2Y
3XIgZXhpc3RpbmcgPSB2bS5fcHJvdmlkZWQ7XG4gICAgICB2YXIgcGFyZW50UHJvdmlkZXMgPSB2bS4kcGFyZW50ICYmIHZtLiRwYXJlbnQuX3Byb3ZpZGVkO1xuICAgICAgaWYgKHBhcmVudFByb3ZpZGVzID09PSBleGlzdGluZykge1xuICAgICAgICAgIHJldHVybiAodm0uX3Byb3ZpZGVkID0gT2JqZWN0LmNyZWF0ZShwYXJlbnRQcm92aWRlcykpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIGluamVjdChrZXksIGRlZmF1bHRWYWx1ZSwgdHJlYXREZWZhdWx0QXNGYWN0b3J5KSB7XG4gICAgICBpZiAodHJlYXREZWZhdWx0QXNGYWN0b3J5ID09PSB2b2lkIDApIHsgdHJlYXREZWZhdWx0QXNGYWN0b3J5ID0gZmFsc2U7IH1cbiAgICAgIC8vIGZhbGxiYWNrIHRvIGBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2VgIHNvIHRoYXQgdGhpcyBjYW4gYmUgY2FsbGVkIGluXG4gICAgICAvLyBhIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4gICAgICB2YXIgaW5zdGFuY2UgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAvLyAjMjQwMFxuICAgICAgICAgIC8vIHRvIHN1cHBvcnQgYGFwcC51c2VgIHBsdWdpbnMsXG4gICAgICAgICAgLy8gZmFsbGJhY2sgdG8gYXBwQ29udGV4dCdzIGBwcm92aWRlc2AgaWYgdGhlIGluc3RhbmNlIGlzIGF0IHJvb3RcbiAgICAgICAgICB2YXIgcHJvdmlkZXMgPSBpbnN0YW5jZS4kcGFyZW50ICYmIGluc3RhbmNlLiRwYXJlbnQuX3Byb3ZpZGVkO1xuICAgICAgICAgIGlmIChwcm92aWRlcyAmJiBrZXkgaW4gcHJvdmlkZXMpIHtcbiAgICAgICAgICAgICAgLy8gVFMgZG9lc24ndCBhbGxvdyBzeW1ib2wgYXMgaW5kZXggdHlwZVxuICAgICAgICAgICAgICByZXR1cm4gcHJvdmlkZXNba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRyZWF0RGVmYXVsdEFzRmFjdG9yeSAmJiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgID8gZGVmYXVsdFZhbHVlLmNhbGwoaW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgICA6IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHdhcm4kMihcImluamVjdGlvbiBcXFwiXCIuY29uY2F0KFN0cmluZyhrZXkpLCBcIlxcXCIgbm90IGZvdW5kLlwiKSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgd2FybiQyKFwiaW5qZWN0KCkgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgc2V0dXAoKSBvciBmdW5jdGlvbmFsIGNvbXBvbmVudHMuXCIpO1xuICAgICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCB0aGlzIGZ1bmN0aW9uIG5lZWRzIG1hbnVhbCBwdWJsaWMgdHlwZSBkZWNsYXJhdGlvbiBiZWNhdXNlIGl0IHJlbGllc1xuICAgKiBvbiBwcmV2aW91c2x5IG1hbnVhbGx5IGF1dGhvcmVkIHR5cGVzIGZyb20gVnVlIDJcbiAgICovXG4gIGZ1bmN0aW9uIGgodHlwZSwgcHJvcHMsIGNoaWxkcmVuKSB7XG4gICAgICBpZiAoIWN1cnJlbnRJbnN0YW5jZSkge1xuICAgICAgICAgIHdhcm4kMihcImdsb2JhbGx5IGltcG9ydGVkIGgoKSBjYW4gb25seSBiZSBpbnZva2VkIHdoZW4gdGhlcmUgaXMgYW4gYWN0aXZlIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiY29tcG9uZW50IGluc3RhbmNlLCBlLmcuIHN5bmNocm9ub3VzbHkgaW4gYSBjb21wb25lbnQncyByZW5kZXIgb3Igc2V0dXAgZnVuY3Rpb24uXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQkMShjdXJyZW50SW5zdGFuY2UsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgMiwgdHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIsIHZtLCBpbmZvKSB7XG4gICAgICAvLyBEZWFjdGl2YXRlIGRlcHMgdHJhY2tpbmcgd2hpbGUgcHJvY2Vzc2luZyBlcnJvciBoYW5kbGVyIHRvIGF2b2lkIHBvc3NpYmxlIGluZmluaXRlIHJlbmRlcmluZy5cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZXgvaXNzdWVzLzE1MDVcbiAgICAgIHB1c2hUYXJnZXQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHZtKSB7XG4gICAgICAgICAgICAgIHZhciBjdXIgPSB2bTtcbiAgICAgICAgICAgICAgd2hpbGUgKChjdXIgPSBjdXIuJHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBob29rcyA9IGN1ci4kb3B0aW9ucy5lcnJvckNhcHR1cmVkO1xuICAgICAgICAgICAgICAgICAgaWYgKGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhcHR1cmUgPSBob29rc1tpXS5jYWxsKGN1ciwgZXJyLCB2bSwgaW5mbykgPT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhcHR1cmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxIYW5kbGVFcnJvcihlLCBjdXIsICdlcnJvckNhcHR1cmVkIGhvb2snKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBnbG9iYWxIYW5kbGVFcnJvcihlcnIsIHZtLCBpbmZvKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkge1xuICAgICAgICAgIHBvcFRhcmdldCgpO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGhhbmRsZXIsIGNvbnRleHQsIGFyZ3MsIHZtLCBpbmZvKSB7XG4gICAgICB2Y
3XIgcmVzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgICByZXMgPSBhcmdzID8gaGFuZGxlci5hcHBseShjb250ZXh0LCBhcmdzKSA6IGhhbmRsZXIuY2FsbChjb250ZXh0KTtcbiAgICAgICAgICBpZiAocmVzICYmICFyZXMuX2lzVnVlICYmIGlzUHJvbWlzZShyZXMpICYmICFyZXMuX2hhbmRsZWQpIHtcbiAgICAgICAgICAgICAgcmVzLmNhdGNoKGZ1bmN0aW9uIChlKSB7IHJldHVybiBoYW5kbGVFcnJvcihlLCB2bSwgaW5mbyArIFwiIChQcm9taXNlL2FzeW5jKVwiKTsgfSk7XG4gICAgICAgICAgICAgIHJlcy5faGFuZGxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgaW5mbyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICB9XG4gIGZ1bmN0aW9uIGdsb2JhbEhhbmRsZUVycm9yKGVyciwgdm0sIGluZm8pIHtcbiAgICAgIGlmIChjb25maWcuZXJyb3JIYW5kbGVyKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5lcnJvckhhbmRsZXIuY2FsbChudWxsLCBlcnIsIHZtLCBpbmZvKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIHVzZXIgaW50ZW50aW9uYWxseSB0aHJvd3MgdGhlIG9yaWdpbmFsIGVycm9yIGluIHRoZSBoYW5kbGVyLFxuICAgICAgICAgICAgICAvLyBkbyBub3QgbG9nIGl0IHR3aWNlXG4gICAgICAgICAgICAgIGlmIChlICE9PSBlcnIpIHtcbiAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yKGUsIG51bGwsICdjb25maWcuZXJyb3JIYW5kbGVyJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dFcnJvcihlcnIsIHZtLCBpbmZvKTtcbiAgfVxuICBmdW5jdGlvbiBsb2dFcnJvcihlcnIsIHZtLCBpbmZvKSB7XG4gICAgICB7XG4gICAgICAgICAgd2FybiQyKFwiRXJyb3IgaW4gXCIuY29uY2F0KGluZm8sIFwiOiBcXFwiXCIpLmNvbmNhdChlcnIudG9TdHJpbmcoKSwgXCJcXFwiXCIpLCB2bSk7XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGluQnJvd3NlciAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gIH1cblxuICAvKiBnbG9iYWxzIE11dGF0aW9uT2JzZXJ2ZXIgKi9cbiAgdmFyIGlzVXNpbmdNaWNyb1Rhc2sgPSBmYWxzZTtcbiAgdmFyIGNhbGxiYWNrcyA9IFtdO1xuICB2YXIgcGVuZGluZyA9IGZhbHNlO1xuICBmdW5jdGlvbiBmbHVzaENhbGxiYWNrcygpIHtcbiAgICAgIHBlbmRpbmcgPSBmYWxzZTtcbiAgICAgIHZhciBjb3BpZXMgPSBjYWxsYmFja3Muc2xpY2UoMCk7XG4gICAgICBjYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29waWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29waWVzW2ldKCk7XG4gICAgICB9XG4gIH1cbiAgLy8gSGVyZSB3ZSBoYXZlIGFzeW5jIGRlZmVycmluZyB3cmFwcGVycyB1c2luZyBtaWNyb3Rhc2tzLlxuICAvLyBJbiAyLjUgd2UgdXNlZCAobWFjcm8pIHRhc2tzIChpbiBjb21iaW5hdGlvbiB3aXRoIG1pY3JvdGFza3MpLlxuICAvLyBIb3dldmVyLCBpdCBoYXMgc3VidGxlIHByb2JsZW1zIHdoZW4gc3RhdGUgaXMgY2hhbmdlZCByaWdodCBiZWZvcmUgcmVwYWludFxuICAvLyAoZS5nLiAjNjgxMywgb3V0LWluIHRyYW5zaXRpb25zKS5cbiAgLy8gQWxzbywgdXNpbmcgKG1hY3JvKSB0YXNrcyBpbiBldmVudCBoYW5kbGVyIHdvdWxkIGNhdXNlIHNvbWUgd2VpcmQgYmVoYXZpb3JzXG4gIC8vIHRoYXQgY2Fubm90IGJlIGNpcmN1bXZlbnRlZCAoZS5nLiAjNzEwOSwgIzcxNTMsICM3NTQ2LCAjNzgzNCwgIzgxMDkpLlxuICAvLyBTbyB3ZSBub3cgdXNlIG1pY3JvdGFza3MgZXZlcnl3aGVyZSwgYWdhaW4uXG4gIC8vIEEgbWFqb3IgZHJhd2JhY2sgb2YgdGhpcyB0cmFkZW9mZiBpcyB0aGF0IHRoZXJlIGFyZSBzb21lIHNjZW5hcmlvc1xuICAvLyB3aGVyZSBtaWNyb3Rhc2tzIGhhdmUgdG9vIGhpZ2ggYSBwcmlvcml0eSBhbmQgZmlyZSBpbiBiZXR3ZWVuIHN1cHBvc2VkbHlcbiAgLy8gc2VxdWVudGlhbCBldmVudHMgKGUuZy4gIzQ1MjEsICM2NjkwLCB3aGljaCBoYXZlIHdvcmthcm91bmRzKVxuICAvLyBvciBldmVuIGJldHdlZW4gYnViYmxpbmcgb2YgdGhlIHNhbWUgZXZlbnQgKCM2NTY2KS5cbiAgdmFyIHRpbWVyRnVuYztcbiAgLy8gVGhlIG5leHRUaWNrIGJlaGF2aW9yIGxldmVyYWdlcyB0aGUgbWljcm90YXNrIHF1ZXVlLCB3aGljaCBjYW4gYmUgYWNjZXNzZWRcbiAgLy8gdmlhIGVpdGhlciBuYXRpdmUgUHJvbWlzZS50aGVuIG9yIE11dGF0aW9uT2JzZXJ2ZXIuXG4gIC8vIE11dGF0aW9uT2JzZXJ2ZXIgaGFzIHdpZGVyIHN1cHBvcnQsIGhvd2V2ZXIgaXQgaXMgc2VyaW91c2x5IGJ1Z2dlZCBpblxuICAvLyBVSVdlYlZpZXcgaW4gaU9TID49IDkuMy4zIHdoZW4gdHJpZ2dlcmVkIGluIHRvdWNoIGV2ZW50IGhhbmRsZXJzLiBJdFxuICAvLyBjb21wbGV0ZWx5IHN0b3BzIHdvcmtpbmcgYWZ0ZXIgdHJpZ2dlcmluZyBhIGZldyB0aW1lcy4uLiBzbywgaWYgbmF0aXZlXG4gIC8vIFByb21pc2UgaXMgYXZhaWxhYmxlLCB3ZSB3aWxsIHVzZSBpdDpcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQsICRmbG93LWRpc2FibGUtbGluZSAqL1xuICBpZiAodHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFByb21pc2UpKSB7XG4gICAgICB2Y
3XIgcF8xID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcF8xLnRoZW4oZmx1c2hDYWxsYmFja3MpO1xuICAgICAgICAgIC8vIEluIHByb2JsZW1hdGljIFVJV2ViVmlld3MsIFByb21pc2UudGhlbiBkb2Vzbid0IGNvbXBsZXRlbHkgYnJlYWssIGJ1dFxuICAgICAgICAgIC8vIGl0IGNhbiBnZXQgc3R1Y2sgaW4gYSB3ZWlyZCBzdGF0ZSB3aGVyZSBjYWxsYmFja3MgYXJlIHB1c2hlZCBpbnRvIHRoZVxuICAgICAgICAgIC8vIG1pY3JvdGFzayBxdWV1ZSBidXQgdGhlIHF1ZXVlIGlzbid0IGJlaW5nIGZsdXNoZWQsIHVudGlsIHRoZSBicm93c2VyXG4gICAgICAgICAgLy8gbmVlZHMgdG8gZG8gc29tZSBvdGhlciB3b3JrLCBlLmcuIGhhbmRsZSBhIHRpbWVyLiBUaGVyZWZvcmUgd2UgY2FuXG4gICAgICAgICAgLy8gXCJmb3JjZVwiIHRoZSBtaWNyb3Rhc2sgcXVldWUgdG8gYmUgZmx1c2hlZCBieSBhZGRpbmcgYW4gZW1wdHkgdGltZXIuXG4gICAgICAgICAgaWYgKGlzSU9TKVxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KG5vb3ApO1xuICAgICAgfTtcbiAgICAgIGlzVXNpbmdNaWNyb1Rhc2sgPSB0cnVlO1xuICB9XG4gIGVsc2UgaWYgKCFpc0lFICYmXG4gICAgICB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIChpc05hdGl2ZShNdXRhdGlvbk9ic2VydmVyKSB8fFxuICAgICAgICAgIC8vIFBoYW50b21KUyBhbmQgaU9TIDcueFxuICAgICAgICAgIE11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXScpKSB7XG4gICAgICAvLyBVc2UgTXV0YXRpb25PYnNlcnZlciB3aGVyZSBuYXRpdmUgUHJvbWlzZSBpcyBub3QgYXZhaWxhYmxlLFxuICAgICAgLy8gZS5nLiBQaGFudG9tSlMsIGlPUzcsIEFuZHJvaWQgNC40XG4gICAgICAvLyAoIzY0NjYgTXV0YXRpb25PYnNlcnZlciBpcyB1bnJlbGlhYmxlIGluIElFMTEpXG4gICAgICB2Y
3XIgY291bnRlcl8xID0gMTtcbiAgICAgIHZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoQ2FsbGJhY2tzKTtcbiAgICAgIHZhciB0ZXh0Tm9kZV8xID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKGNvdW50ZXJfMSkpO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0ZXh0Tm9kZV8xLCB7XG4gICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY291bnRlcl8xID0gKGNvdW50ZXJfMSArIDEpICUgMjtcbiAgICAgICAgICB0ZXh0Tm9kZV8xLmRhdGEgPSBTdHJpbmcoY291bnRlcl8xKTtcbiAgICAgIH07XG4gICAgICBpc1VzaW5nTWljcm9UYXNrID0gdHJ1ZTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShzZXRJbW1lZGlhdGUpKSB7XG4gICAgICAvLyBGYWxsYmFjayB0byBzZXRJbW1lZGlhdGUuXG4gICAgICAvLyBUZWNobmljYWxseSBpdCBsZXZlcmFnZXMgdGhlIChtYWNybykgdGFzayBxdWV1ZSxcbiAgICAgIC8vIGJ1dCBpdCBpcyBzdGlsbCBhIGJldHRlciBjaG9pY2UgdGhhbiBzZXRUaW1lb3V0LlxuICAgICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNldEltbWVkaWF0ZShmbHVzaENhbGxiYWNrcyk7XG4gICAgICB9O1xuICB9XG4gIGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgdG8gc2V0VGltZW91dC5cbiAgICAgIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KGZsdXNoQ2FsbGJhY2tzLCAwKTtcbiAgICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZnVuY3Rpb24gbmV4dFRpY2soY2IsIGN0eCkge1xuICAgICAgdmFyIF9yZXNvbHZlO1xuICAgICAgY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY2IuY2FsbChjdHgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihlLCBjdHgsICduZXh0VGljaycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKF9yZXNvbHZlKSB7XG4gICAgICAgICAgICAgIF9yZXNvbHZlKGN0eCk7XG4gICAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgICB0aW1lckZ1bmMoKTtcbiAgICAgIH1cbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgaWYgKCFjYiAmJiB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXNlQ3NzTW9kdWxlKG5hbWUpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgICB3YXJuJDIoXCJ1c2VDc3NNb2R1bGUoKSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBnbG9iYWwgYnVpbGQuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZW1wdHlPYmplY3Q7XG4gICAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVudGltZSBoZWxwZXIgZm9yIFNGQydzIENTUyB2YXJpYWJsZSBpbmplY3Rpb24gZmVhdHVyZS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIHVzZUNzc1ZhcnMoZ2V0dGVyKSB7XG4gICAgICBpZiAoIWluQnJvd3NlciAmJiAhZmFsc2UpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgdmFyIGluc3RhbmNlID0gY3VycmVudEluc3RhbmNlO1xuICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgIHdhcm4kMihcInVzZUNzc1ZhcnMgaXMgY2FsbGVkIHdpdGhvdXQgY3VycmVudCBhY3RpdmUgY29tcG9uZW50IGluc3RhbmNlLlwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB3YXRjaFBvc3RFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBlbCA9IGluc3RhbmNlLiRlbDtcbiAgICAgICAgICB2Y
3XIgdmFycyA9IGdldHRlcihpbnN0YW5jZSwgaW5zdGFuY2UuX3NldHVwUHJveHkpO1xuICAgICAgICAgIGlmIChlbCAmJiBlbC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBlbC5zdHlsZTtcbiAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHZhcnMpIHtcbiAgICAgICAgICAgICAgICAgIHN0eWxlLnNldFByb3BlcnR5KFwiLS1cIi5jb25jYXQoa2V5KSwgdmFyc1trZXldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHYzLWNvbXBhdGlibGUgYXN5bmMgY29tcG9uZW50IEFQSS5cbiAgICogQGludGVybmFsIHRoZSB0eXBlIGlzIG1hbnVhbGx5IGRlY2xhcmVkIGluIDxyb290Pi90eXBlcy92My1kZWZpbmUtYXN5bmMtY29tcG9uZW50LmQudHNcbiAgICogYmVjYXVzZSBpdCByZWxpZXMgb24gZXhpc3RpbmcgbWFudWFsIHR5cGVzXG4gICAqL1xuICBmdW5jdGlvbiBkZWZpbmVBc3luY0NvbXBvbmVudChzb3VyY2UpIHtcbiAgICAgIGlmIChpc0Z1bmN0aW9uKHNvdXJjZSkpIHtcbiAgICAgICAgICBzb3VyY2UgPSB7IGxvYWRlcjogc291cmNlIH07XG4gICAgICB9XG4gICAgICB2YXIgbG9hZGVyID0gc291cmNlLmxvYWRlciwgbG9hZGluZ0NvbXBvbmVudCA9IHNvdXJjZS5sb2FkaW5nQ29tcG9uZW50LCBlcnJvckNvbXBvbmVudCA9IHNvdXJjZS5lcnJvckNvbXBvbmVudCwgX2EgPSBzb3VyY2UuZGVsYXksIGRlbGF5ID0gX2EgPT09IHZvaWQgMCA/IDIwMCA6IF9hLCB0aW1lb3V0ID0gc291cmNlLnRpbWVvdXQsIC8vIHVuZGVmaW5lZCA9IG5ldmVyIHRpbWVzIG91dFxuICAgICAgX2IgPSBzb3VyY2Uuc3VzcGVuc2libGUsIC8vIHVuZGVmaW5lZCA9IG5ldmVyIHRpbWVzIG91dFxuICAgICAgc3VzcGVuc2libGUgPSBfYiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYiwgLy8gaW4gVnVlIDMgZGVmYXVsdCBpcyB0cnVlXG4gICAgICB1c2VyT25FcnJvciA9IHNvdXJjZS5vbkVycm9yO1xuICAgICAgaWYgKHN1c3BlbnNpYmxlKSB7XG4gICAgICAgICAgd2FybiQyKFwiVGhlIHN1c3BlbnNpYmxlIG9wdGlvbiBmb3IgYXN5bmMgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkIGluIFZ1ZTIuIEl0IGlzIGlnbm9yZWQuXCIpO1xuICAgICAgfVxuICAgICAgdmFyIHBlbmRpbmdSZXF1ZXN0ID0gbnVsbDtcbiAgICAgIHZhciByZXRyaWVzID0gMDtcbiAgICAgIHZhciByZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXRyaWVzKys7XG4gICAgICAgICAgcGVuZGluZ1JlcXVlc3QgPSBudWxsO1xuICAgICAgICAgIHJldHVybiBsb2FkKCk7XG4gICAgICB9O1xuICAgICAgdmFyIGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHRoaXNSZXF1ZXN0O1xuICAgICAgICAgIHJldHVybiAocGVuZGluZ1JlcXVlc3QgfHxcbiAgICAgICAgICAgICAgKHRoaXNSZXF1ZXN0ID0gcGVuZGluZ1JlcXVlc3QgPVxuICAgICAgICAgICAgICAgICAgbG9hZGVyKClcbiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKFN0cmluZyhlcnIpKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlck9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VyUmV0cnkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKHJldHJ5KCkpOyB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJGYWlsID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVqZWN0KGVycik7IH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyT25FcnJvcihlcnIsIHVzZXJSZXRyeSwgdXNlckZhaWwsIHJldHJpZXMgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoY29tcCkge1xuICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzUmVxdWVzdCAhPT0gcGVuZGluZ1JlcXVlc3QgJiYgcGVuZGluZ1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlbmRpbmdSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiQXN5bmMgY29tcG9uZW50IGxvYWRlciByZXNvbHZlZCB0byB1bmRlZmluZWQuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSWYgeW91IGFyZSB1c2luZyByZXRyeSgpLCBtYWtlIHN1cmUgdG8gcmV0dXJuIGl0cyByZXR1cm4gdmFsdWUuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAvLyBpbnRlcm9wIG1vZHVsZSBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXAuX19lc01vZHVsZSB8fCBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wID0gY29tcC5kZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcCAmJiAhaXNPYmplY3QoY29tcCkgJiYgIWlzRnVuY3Rpb24oY29tcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhc3luYyBjb21wb25lbnQgbG9hZCByZXN1bHQ6IFwiLmNvbmNhdChjb21wKSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgI
3HJldHVybiBjb21wO1xuICAgICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBjb21wb25lbnQgPSBsb2FkKCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsXG4gICAgICAgICAgICAgIGRlbGF5OiBkZWxheSxcbiAgICAgICAgICAgICAgdGltZW91dDogdGltZW91dCxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yQ29tcG9uZW50LFxuICAgICAgICAgICAgICBsb2FkaW5nOiBsb2FkaW5nQ29tcG9uZW50XG4gICAgICAgICAgfTtcbiAgICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVMaWZlQ3ljbGUoaG9va05hbWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZm4sIHRhcmdldCkge1xuICAgICAgICAgIGlmICh0YXJnZXQgPT09IHZvaWQgMCkgeyB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2U7IH1cbiAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICB3YXJuJDIoXCJcIi5jb25jYXQoZm9ybWF0TmFtZShob29rTmFtZSksIFwiIGlzIGNhbGxlZCB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gYmUgXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICBcImFzc29jaWF0ZWQgd2l0aC4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiTGlmZWN5Y2xlIGluamVjdGlvbiBBUElzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZiBzZXR1cCgpLlwiKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaW5qZWN0SG9vayh0YXJnZXQsIGhvb2tOYW1lLCBmbik7XG4gICAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGZvcm1hdE5hbWUobmFtZSkge1xuICAgICAgaWYgKG5hbWUgPT09ICdiZWZvcmVEZXN0cm95Jykge1xuICAgICAgICAgIG5hbWUgPSAnYmVmb3JlVW5tb3VudCc7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChuYW1lID09PSAnZGVzdHJveWVkJykge1xuICAgICAgICAgIG5hbWUgPSAndW5tb3VudGVkJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBcIm9uXCIuY29uY2F0KG5hbWVbMF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSkpO1xuICB9XG4gIGZ1bmN0aW9uIGluamVjdEhvb2soaW5zdGFuY2UsIGhvb2tOYW1lLCBmbikge1xuICAgICAgdmFyIG9wdGlvbnMgPSBpbnN0YW5jZS4kb3B0aW9ucztcbiAgICAgIG9wdGlvbnNbaG9va05hbWVdID0gbWVyZ2VMaWZlY3ljbGVIb29rKG9wdGlvbnNbaG9va05hbWVdLCBmbik7XG4gIH1cbiAgdmFyIG9uQmVmb3JlTW91bnQgPSBjcmVhdGVMaWZlQ3ljbGUoJ2JlZm9yZU1vdW50Jyk7XG4gIHZhciBvbk1vdW50ZWQgPSBjcmVhdGVMaWZlQ3ljbGUoJ21vdW50ZWQnKTtcbiAgdmFyIG9uQmVmb3JlVXBkYXRlID0gY3JlYXRlTGlmZUN5Y2xlKCdiZWZvcmVVcGRhdGUnKTtcbiAgdmFyIG9uVXBkYXRlZCA9IGNyZWF0ZUxpZmVDeWNsZSgndXBkYXRlZCcpO1xuICB2YXIgb25CZWZvcmVVbm1vdW50ID0gY3JlYXRlTGlmZUN5Y2xlKCdiZWZvcmVEZXN0cm95Jyk7XG4gIHZhciBvblVubW91bnRlZCA9IGNyZWF0ZUxpZmVDeWNsZSgnZGVzdHJveWVkJyk7XG4gIHZhciBvbkFjdGl2YXRlZCA9IGNyZWF0ZUxpZmVDeWNsZSgnYWN0aXZhdGVkJyk7XG4gIHZhciBvbkRlYWN0aXZhdGVkID0gY3JlYXRlTGlmZUN5Y2xlKCdkZWFjdGl2YXRlZCcpO1xuICB2YXIgb25TZXJ2ZXJQcmVmZXRjaCA9IGNyZWF0ZUxpZmVDeWNsZSgnc2VydmVyUHJlZmV0Y2gnKTtcbiAgdmFyIG9uUmVuZGVyVHJhY2tlZCA9IGNyZWF0ZUxpZmVDeWNsZSgncmVuZGVyVHJhY2tlZCcpO1xuICB2YXIgb25SZW5kZXJUcmlnZ2VyZWQgPSBjcmVhdGVMaWZlQ3ljbGUoJ3JlbmRlclRyaWdnZXJlZCcpO1xuICB2YXIgaW5qZWN0RXJyb3JDYXB0dXJlZEhvb2sgPSBjcmVhdGVMaWZlQ3ljbGUoJ2Vycm9yQ2FwdHVyZWQnKTtcbiAgZnVuY3Rpb24gb25FcnJvckNhcHR1cmVkKGhvb2ssIHRhcmdldCkge1xuICAgICAgaWYgKHRhcmdldCA9PT0gdm9pZCAwKSB7IHRhcmdldCA9IGN1cnJlbnRJbnN0YW5jZTsgfVxuICAgICAgaW5qZWN0RXJyb3JDYXB0dXJlZEhvb2soaG9vaywgdGFyZ2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlOiBhbHNvIHVwZGF0ZSBkaXN0L3Z1ZS5ydW50aW1lLm1qcyB3aGVuIGFkZGluZyBuZXcgZXhwb3J0cyB0byB0aGlzIGZpbGUuXG4gICAqL1xuICB2YXIgdmVyc2lvbiA9ICcyLjcuMTYnO1xuICAvKipcbiAgICogQGludGVybmFsIHR5cGUgaXMgbWFudWFsbHkgZGVjbGFyZWQgaW4gPHJvb3Q+L3R5cGVzL3YzLWRlZmluZS1jb21wb25lbnQuZC50c1xuICAgKi9cbiAgZnVuY3Rpb24gZGVmaW5lQ29tcG9uZW50KG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgdmFyIHZjYSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgdmVyc2lvbjogdmVyc2lvbixcbiAgICBkZWZpbmVDb21wb25lbnQ6IGRlZmluZUNvbXBvbmVudCxcbiAgICByZWY6IHJlZiQxLFxuICAgIHNoYWxsb3dSZWY6IHNoYWxsb3dSZWYsXG4gICAgaXNSZWY6IGlzUmVmLFxuICAgIHRvUmVmOiB0b1JlZixcbiAgICB0b1JlZnM6IHRvUmVmcyxcbiAgICB1bnJlZjogdW5yZWYsXG4gICAgcHJveHlSZWZzOiBwcm94eVJlZnMsXG4gICAgY3VzdG9tUmVmOiBjdXN0b21SZWYsXG4gICAgdHJpZ2dlclJlZjogdHJpZ2dlclJlZixcbiAgICByZWFjdGl2ZTogcmVhY3RpdmUsXG4gICAgaXNSZWFjdGl2ZTogaXNSZWFjdGl2ZSxcbiAgICBpc1JlYWRvbmx5OiBpc1JlYWRvbmx5LFxuICAgIGlzU2hhbGxvdzogaXNTaGFsbG93LFxuICAgIGlzUHJveHk6IGlzUHJveHksXG4gICAgc2hhbGxvd1JlYWN0aXZlOiBzaGFsbG93UmVhY3RpdmUsXG4gICAgbWFya1JhdzogbWFya1JhdyxcbiAgICB0b1JhdzogdG9SYXcsXG4gICAgcmVhZG9ubHk6IHJlYWRvbmx5LFxuICAgIHNoYWxsb3dSZWFkb25seTogc2hhbGxvd1JlYWRvbmx5LFxuICAgIGNvbXB1dGVkOiBjb21wdXRlZCxcbiAgICB3YXRjaDogd2F0Y2gsXG4gICAgd2F0Y2h
3FZmZlY3Q6IHdhdGNoRWZmZWN0LFxuICAgIHdhdGNoUG9zdEVmZmVjdDogd2F0Y2hQb3N0RWZmZWN0LFxuICAgIHdhdGNoU3luY0VmZmVjdDogd2F0Y2hTeW5jRWZmZWN0LFxuICAgIEVmZmVjdFNjb3BlOiBFZmZlY3RTY29wZSxcbiAgICBlZmZlY3RTY29wZTogZWZmZWN0U2NvcGUsXG4gICAgb25TY29wZURpc3Bvc2U6IG9uU2NvcGVEaXNwb3NlLFxuICAgIGdldEN1cnJlbnRTY29wZTogZ2V0Q3VycmVudFNjb3BlLFxuICAgIHByb3ZpZGU6IHByb3ZpZGUsXG4gICAgaW5qZWN0OiBpbmplY3QsXG4gICAgaDogaCxcbiAgICBnZXRDdXJyZW50SW5zdGFuY2U6IGdldEN1cnJlbnRJbnN0YW5jZSxcbiAgICB1c2VTbG90czogdXNlU2xvdHMsXG4gICAgdXNlQXR0cnM6IHVzZUF0dHJzLFxuICAgIHVzZUxpc3RlbmVyczogdXNlTGlzdGVuZXJzLFxuICAgIG1lcmdlRGVmYXVsdHM6IG1lcmdlRGVmYXVsdHMsXG4gICAgbmV4dFRpY2s6IG5leHRUaWNrLFxuICAgIHNldDogc2V0LFxuICAgIGRlbDogZGVsLFxuICAgIHVzZUNzc01vZHVsZTogdXNlQ3NzTW9kdWxlLFxuICAgIHVzZUNzc1ZhcnM6IHVzZUNzc1ZhcnMsXG4gICAgZGVmaW5lQXN5bmNDb21wb25lbnQ6IGRlZmluZUFzeW5jQ29tcG9uZW50LFxuICAgIG9uQmVmb3JlTW91bnQ6IG9uQmVmb3JlTW91bnQsXG4gICAgb25Nb3VudGVkOiBvbk1vdW50ZWQsXG4gICAgb25CZWZvcmVVcGRhdGU6IG9uQmVmb3JlVXBkYXRlLFxuICAgIG9uVXBkYXRlZDogb25VcGRhdGVkLFxuICAgIG9uQmVmb3JlVW5tb3VudDogb25CZWZvcmVVbm1vdW50LFxuICAgIG9uVW5tb3VudGVkOiBvblVubW91bnRlZCxcbiAgICBvbkFjdGl2YXRlZDogb25BY3RpdmF0ZWQsXG4gICAgb25EZWFjdGl2YXRlZDogb25EZWFjdGl2YXRlZCxcbiAgICBvblNlcnZlclByZWZldGNoOiBvblNlcnZlclByZWZldGNoLFxuICAgIG9uUmVuZGVyVHJhY2tlZDogb25SZW5kZXJUcmFja2VkLFxuICAgIG9uUmVuZGVyVHJpZ2dlcmVkOiBvblJlbmRlclRyaWdnZXJlZCxcbiAgICBvbkVycm9yQ2FwdHVyZWQ6IG9uRXJyb3JDYXB0dXJlZFxuICB9KTtcblxuICB2YXIgc2Vlbk9iamVjdHMgPSBuZXcgX1NldCgpO1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IHRvIGV2b2tlIGFsbCBjb252ZXJ0ZWRcbiAgICogZ2V0dGVycywgc28gdGhhdCBldmVyeSBuZXN0ZWQgcHJvcGVydHkgaW5zaWRlIHRoZSBvYmplY3RcbiAgICogaXMgY29sbGVjdGVkIGFzIGEgXCJkZWVwXCIgZGVwZW5kZW5jeS5cbiAgICovXG4gIGZ1bmN0aW9uIHRyYXZlcnNlKHZhbCkge1xuICAgICAgX3RyYXZlcnNlKHZhbCwgc2Vlbk9iamVjdHMpO1xuICAgICAgc2Vlbk9iamVjdHMuY2xlYXIoKTtcbiAgICAgIHJldHVybiB2YWw7XG4gIH1cbiAgZnVuY3Rpb24gX3RyYXZlcnNlKHZhbCwgc2Vlbikge1xuICAgICAgdmFyIGksIGtleXM7XG4gICAgICB2Y
3XIgaXNBID0gaXNBcnJheSh2YWwpO1xuICAgICAgaWYgKCghaXNBICYmICFpc09iamVjdCh2YWwpKSB8fFxuICAgICAgICAgIHZhbC5fX3Zfc2tpcCAvKiBSZWFjdGl2ZUZsYWdzLlNLSVAgKi8gfHxcbiAgICAgICAgICBPYmplY3QuaXNGcm96ZW4odmFsKSB8fFxuICAgICAgICAgIHZhbCBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHZhbC5fX29iX18pIHtcbiAgICAgICAgICB2YXIgZGVwSWQgPSB2YWwuX19vYl9fLmRlcC5pZDtcbiAgICAgICAgICBpZiAoc2Vlbi5oYXMoZGVwSWQpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2Vlbi5hZGQoZGVwSWQpO1xuICAgICAgfVxuICAgICAgaWYgKGlzQSkge1xuICAgICAgICAgIGkgPSB2YWwubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pXG4gICAgICAgICAgICAgIF90cmF2ZXJzZSh2YWxbaV0sIHNlZW4pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNSZWYodmFsKSkge1xuICAgICAgICAgIF90cmF2ZXJzZSh2YWwudmFsdWUsIHNlZW4pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgICAgICAgaSA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pXG4gICAgICAgICAgICAgIF90cmF2ZXJzZSh2YWxba2V5c1tpXV0sIHNlZW4pO1xuICAgICAgfVxuICB9XG5cbiAgdmFyIHVpZCQxID0gMDtcbiAgLyoqXG4gICAqIEEgd2F0Y2hlciBwYXJzZXMgYW4gZXhwcmVzc2lvbiwgY29sbGVjdHMgZGVwZW5kZW5jaWVzLFxuICAgKiBhbmQgZmlyZXMgY2FsbGJhY2sgd2hlbiB0aGUgZXhwcmVzc2lvbiB2YWx1ZSBjaGFuZ2VzLlxuICAgKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB2YXIgV2F0Y2hlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIFdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zLCBpc1JlbmRlcldhdGNoZXIpIHtcbiAgICAgICAgICByZWNvcmRFZmZlY3RTY29wZSh0aGlzLCBcbiAgICAgICAgICAvLyBpZiB0aGUgYWN0aXZlIGVmZmVjdCBzY29wZSBpcyBtYW51YWxseSBjcmVhdGVkIChub3QgYSBjb21wb25lbnQgc2NvcGUpLFxuICAgICAgICAgIC8vIHByaW9yaXRpemUgaXRcbiAgICAgICAgICBhY3RpdmVFZmZlY3RTY29wZSAmJiAhYWN0aXZlRWZmZWN0U2NvcGUuX3ZtXG4gICAgICAgICAgICAgID8gYWN0aXZlRWZmZWN0U2NvcGVcbiAgICAgICAgICAgICAgOiB2bVxuICAgICAgICAgICAgICAgICAgPyB2bS5fc2NvcGVcbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICBpZiAoKHRoaXMudm0gPSB2bSkgJiYgaXNSZW5kZXJXYXRjaGVyKSB7XG4gICAgICAgICAgICAgIHZtLl93YXRjaGVyID0gdGhpcztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gb3B0aW9uc1xuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIHRoaXMuZGVlcCA9ICEhb3B0aW9ucy5kZWVwO1xuICAgICAgICAgICAgICB0aGlzLnVzZXIgPSAhIW9wdGlvbnMudXNlcjtcbiAgICAgICAgICAgICAgdGhpcy5sYXp5ID0gISFvcHRpb25zLmxhenk7XG4gICAgICAgICAgICAgIHRoaXMuc3luYyA9ICEhb3B0aW9ucy5zeW5jO1xuICAgICAgICAgICAgICB0aGlzLmJlZm9yZSA9IG9wdGlvbnMuYmVmb3JlO1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm9uVHJhY2sgPSBvcHRpb25zLm9uVHJhY2s7XG4gICAgICAgICAgICAgICAgICB0aGlzLm9uVHJpZ2dlciA9IG9wdGlvbnMub25UcmlnZ2VyO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmRlZXAgPSB0aGlzLnVzZXIgPSB0aGlzLmxhenkgPSB0aGlzLnN5bmMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jYiA9IGNiO1xuICAgICAgICAgIHRoaXMuaWQgPSArK3VpZCQxOyAvLyB1aWQgZm9yIGJhdGNoaW5nXG4gICAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucG9zdCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZGlydHkgPSB0aGlzLmxhenk7IC8vIGZvciBsYXp5IHdhdGNoZXJzXG4gICAgICAgICAgdGhpcy5kZXBzID0gW107XG4gICAgICAgICAgdGhpcy5uZXdEZXBzID0gW107XG4gICAgICAgICAgdGhpcy5kZXBJZHMgPSBuZXcgX1NldCgpO1xuICAgICAgICAgIHRoaXMubmV3RGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHBPckZuLnRvU3RyaW5nKCkgO1xuICAgICAgICAgIC8vIHBhcnNlIGV4cHJlc3Npb24gZm9yIGdldHRlclxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGV4cE9yRm4pKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0dGVyID0gZXhwT3JGbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0dGVyID0gcGFyc2VQYXRoKGV4cE9yRm4pO1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0dGVyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmdldHRlciA9IG5vb3A7XG4gICAgICAgICAgICAgICAgICB3YXJuJDIoXCJGYWlsZWQgd2F0Y2hpbmcgcGF0aDogXFxcIlwiLmNvbmNhdChleHBPckZuLCBcIlxcXCIgXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dhdGNoZXIgb25seSBhY2NlcHRzIHNpbXBsZSBkb3QtZGVsaW1pdGVkIHBhdGhzLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvciBmdWxsIGNvbnRyb2wsIHVzZSBhIGZ1bmN0aW9uIGluc3RlYWQuJywgdm0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxhenkgPyB1bmRlZmluZWQgOiB0aGlzLmdldCgpO1xuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBFdmFsdWF0ZSB0aGUgZ2V0dGVyLCBhbmQgcmUtY29sbGVjdCBkZXBlbmRlbmNpZXMuXG4gICAgICAgKi9cbiAgICAgIFdhdGNoZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwdXNoVGFyZ2V0KHRoaXMpO1xuICAgICAgICAgI
3HZhciB2YWx1ZTtcbiAgICAgICAgICB2YXIgdm0gPSB0aGlzLnZtO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJnZXR0ZXIgZm9yIHdhdGNoZXIgXFxcIlwiLmNvbmNhdCh0aGlzLmV4cHJlc3Npb24sIFwiXFxcIlwiKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAvLyBcInRvdWNoXCIgZXZlcnkgcHJvcGVydHkgc28gdGhleSBhcmUgYWxsIHRyYWNrZWQgYXNcbiAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzIGZvciBkZWVwIHdhdGNoaW5nXG4gICAgICAgICAgICAgIGlmICh0aGlzLmRlZXApIHtcbiAgICAgICAgICAgICAgICAgIHRyYXZlcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwb3BUYXJnZXQoKTtcbiAgICAgICAgICAgICAgdGhpcy5jbGVhbnVwRGVwcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgICAgLyoqXG4gICAgICAgKiBBZGQgYSBkZXBlbmRlbmN5IHRvIHRoaXMgZGlyZWN0aXZlLlxuICAgICAgICovXG4gICAgICBXYXRjaGVyLnByb3RvdHlwZS5hZGREZXAgPSBmdW5jdGlvbiAoZGVwKSB7XG4gICAgICAgICAgdmFyIGlkID0gZGVwLmlkO1xuICAgICAgICAgIGlmICghdGhpcy5uZXdEZXBJZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgICB0aGlzLm5ld0RlcElkcy5hZGQoaWQpO1xuICAgICAgICAgICAgICB0aGlzLm5ld0RlcHMucHVzaChkZXApO1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuZGVwSWRzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICAgIGRlcC5hZGRTdWIodGhpcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9O1xuICAgICAgLyoqXG4gICAgICAgKiBDbGVhbiB1cCBmb3IgZGVwZW5kZW5jeSBjb2xsZWN0aW9uLlxuICAgICAgICovXG4gICAgICBXYXRjaGVyLnByb3RvdHlwZS5jbGVhbnVwRGVwcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2Y
3XIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICB2YXIgZGVwID0gdGhpcy5kZXBzW2ldO1xuICAgICAgICAgICAgICBpZiAoIXRoaXMubmV3RGVwSWRzLmhhcyhkZXAuaWQpKSB7XG4gICAgICAgICAgICAgICAgICBkZXAucmVtb3ZlU3ViKHRoaXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciB0bXAgPSB0aGlzLmRlcElkcztcbiAgICAgICAgICB0aGlzLmRlcElkcyA9IHRoaXMubmV3RGVwSWRzO1xuICAgICAgICAgIHRoaXMubmV3RGVwSWRzID0gdG1wO1xuICAgICAgICAgIHRoaXMubmV3RGVwSWRzLmNsZWFyKCk7XG4gICAgICAgICAgdG1wID0gdGhpcy5kZXBzO1xuICAgICAgICAgIHRoaXMuZGVwcyA9IHRoaXMubmV3RGVwcztcbiAgICAgICAgICB0aGlzLm5ld0RlcHMgPSB0bXA7XG4gICAgICAgICAgdGhpcy5uZXdEZXBzLmxlbmd0aCA9IDA7XG4gICAgICB9O1xuICAgICAgLyoqXG4gICAgICAgKiBTdWJzY3JpYmVyIGludGVyZmFjZS5cbiAgICAgICAqIFdpbGwgYmUgY2FsbGVkIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXMuXG4gICAgICAgKi9cbiAgICAgIFdhdGNoZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmICh0aGlzLmxhenkpIHtcbiAgICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc3luYykge1xuICAgICAgICAgICAgICB0aGlzLnJ1bigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgcXVldWVXYXRjaGVyKHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIFNjaGVkdWxlciBqb2IgaW50ZXJmYWNlLlxuICAgICAgICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlci5cbiAgICAgICAqL1xuICAgICAgV2F0Y2hlci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgICB2Y
3XIgdmFsdWUgPSB0aGlzLmdldCgpO1xuICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgIC8vIERlZXAgd2F0Y2hlcnMgYW5kIHdhdGNoZXJzIG9uIE9iamVjdC9BcnJheXMgc2hvdWxkIGZpcmUgZXZlblxuICAgICAgICAgICAgICAgICAgLy8gd2hlbiB0aGUgdmFsdWUgaXMgdGhlIHNhbWUsIGJlY2F1c2UgdGhlIHZhbHVlIG1heVxuICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBtdXRhdGVkLlxuICAgICAgICAgICAgICAgICAgaXNPYmplY3QodmFsdWUpIHx8XG4gICAgICAgICAgICAgICAgICB0aGlzLmRlZXApIHtcbiAgICAgICAgICAgICAgICAgIC8vIHNldCBuZXcgdmFsdWVcbiAgICAgICAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGluZm8gPSBcImNhbGxiYWNrIGZvciB3YXRjaGVyIFxcXCJcIi5jb25jYXQodGhpcy5leHByZXNzaW9uLCBcIlxcXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcodGhpcy5jYiwgdGhpcy52bSwgW3ZhbHVlLCBvbGRWYWx1ZV0sIHRoaXMudm0sIGluZm8pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYi5jYWxsKHRoaXMudm0sIHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9O1xuICAgICAgLyoqXG4gICAgICAgKiBFdmFsdWF0ZSB0aGUgdmFsdWUgb2YgdGhlIHdhdGNoZXIuXG4gICAgICAgKiBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgZm9yIGxhenkgd2F0Y2hlcnMuXG4gICAgICAgKi9cbiAgICAgIFdhdGNoZXIucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldCgpO1xuICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIERlcGVuZCBvbiBhbGwgZGVwcyBjb2xsZWN0ZWQgYnkgdGhpcyB3YXRjaGVyLlxuICAgICAgICovXG4gICAgICBXYXRjaGVyLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgICAgdGhpcy5kZXBzW2ldLmRlcGVuZCgpO1xuICAgICAgICAgIH1cbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIFJlbW92ZSBzZWxmIGZyb20gYWxsIGRlcGVuZGVuY2llcycgc3Vic2NyaWJlciBsaXN0LlxuICAgICAgICovXG4gICAgICBXYXRjaGVyLnByb3RvdHlwZS50ZWFyZG93biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAodGhpcy52bSAmJiAhdGhpcy52bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgICByZW1vdmUkMih0aGlzLnZtLl9zY29wZS5lZmZlY3RzLCB0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICAgIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5kZXBzW2ldLnJlbW92ZVN1Yih0aGlzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAodGhpcy5vblN0b3ApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMub25TdG9wKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIFdhdGNoZXI7XG4gIH0oKSk7XG5cbiAgdmFyIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbiA9IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IG5vb3AsXG4gICAgICBzZXQ6IG5vb3BcbiAgfTtcbiAgZnVuY3Rpb24gcHJveHkodGFyZ2V0LCBzb3VyY2VLZXksIGtleSkge1xuICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IGZ1bmN0aW9uIHByb3h5R2V0dGVyKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzW3NvdXJjZUtleV1ba2V5XTtcbiAgICAgIH07XG4gICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gcHJveHlTZXR0ZXIodmFsKSB7XG4gICAgICAgICAgdGhpc1tzb3VyY2VLZXldW2tleV0gPSB2YWw7XG4gICAgICB9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24pO1xuICB9XG4gIGZ1bmN0aW9uIGluaXRTdGF0ZSh2bSkge1xuICAgICAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucztcbiAgICAgIGlmIChvcHRzLnByb3BzKVxuICAgICAgICAgIGluaXRQcm9wcyQxKHZtLCBvcHRzLnByb3BzKTtcbiAgICAgIC8vIENvbXBvc2l0aW9uIEFQSVxuICAgICAgaW5pdFNldHVwKHZtKTtcbiAgICAgIGlmIChvcHRzLm1ldGhvZHMpXG4gICAgICAgICAgaW5pdE1ldGhvZHModm0sIG9wdHMubWV0aG9kcyk7XG4gICAgICBpZiAob3B0cy5kYXRhKSB7XG4gICAgICAgICAgaW5pdERhdGEodm0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIG9iID0gb2JzZXJ2ZSgodm0uX2RhdGEgPSB7fSkpO1xuICAgICAgICAgIG9iICYmIG9iLnZtQ291bnQrKztcbiAgICAgIH1cbiAgICAgIGlmIChvcHRzLmNvbXB1dGVkKVxuICAgICAgICAgIGluaXRDb21wdXRlZCQxKHZtLCBvcHRzLmNvbXB1dGVkKTtcbiAgICAgIGlmIChvcHRzLndhdGNoICYmIG9wdHMud2F0Y2ggIT09IG5hdGl2ZVdhdGNoKSB7XG4gICAgICAgICAgaW5pdFdhdGNoKHZtLCBvcHRzLndhdGNoKTtcbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBpbml0UHJvcHMkMSh2bSwgcHJvcHNPcHRpb25zKSB7XG4gICAgICB2Y
3XIgcHJvcHNEYXRhID0gdm0uJG9wdGlvbnMucHJvcHNEYXRhIHx8IHt9O1xuICAgICAgdmFyIHByb3BzID0gKHZtLl9wcm9wcyA9IHNoYWxsb3dSZWFjdGl2ZSh7fSkpO1xuICAgICAgLy8gY2FjaGUgcHJvcCBrZXlzIHNvIHRoYXQgZnV0dXJlIHByb3BzIHVwZGF0ZXMgY2FuIGl0ZXJhdGUgdXNpbmcgQXJyYXlcbiAgICAgIC8vIGluc3RlYWQgb2YgZHluYW1pYyBvYmplY3Qga2V5IGVudW1lcmF0aW9uLlxuICAgICAgdmFyIGtleXMgPSAodm0uJG9wdGlvbnMuX3Byb3BLZXlzID0gW10pO1xuICAgICAgdmFyIGlzUm9vdCA9ICF2bS4kcGFyZW50O1xuICAgICAgLy8gcm9vdCBpbnN0YW5jZSBwcm9wcyBzaG91bGQgYmUgY29udmVydGVkXG4gICAgICBpZiAoIWlzUm9vdCkge1xuICAgICAgICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICB2YXIgdmFsdWUgPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wc09wdGlvbnMsIHByb3BzRGF0YSwgdm0pO1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICAgICAgICBpZiAoaXNSZXNlcnZlZEF0dHJpYnV0ZShoeXBoZW5hdGVkS2V5KSB8fFxuICAgICAgICAgICAgICAgICAgY29uZmlnLmlzUmVzZXJ2ZWRBdHRyKGh5cGhlbmF0ZWRLZXkpKSB7XG4gICAgICAgICAgICAgICAgICB3YXJuJDIoXCJcXFwiXCIuY29uY2F0KGh5cGhlbmF0ZWRLZXksIFwiXFxcIiBpcyBhIHJlc2VydmVkIGF0dHJpYnV0ZSBhbmQgY2Fubm90IGJlIHVzZWQgYXMgY29tcG9uZW50IHByb3AuXCIpLCB2bSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZGVmaW5lUmVhY3RpdmUocHJvcHMsIGtleSwgdmFsdWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIGlmICghaXNSb290ICYmICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuJDIoXCJBdm9pZCBtdXRhdGluZyBhIHByb3AgZGlyZWN0bHkgc2luY2UgdGhlIHZhbHVlIHdpbGwgYmUgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIm92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwYXJlbnQgY29tcG9uZW50IHJlLXJlbmRlcnMuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJJbnN0ZWFkLCB1c2UgYSBkYXRhIG9yIGNvbXB1dGVkIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBwcm9wJ3MgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcInZhbHVlLiBQcm9wIGJlaW5nIG11dGF0ZWQ6IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCJcIiksIHZtKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSwgdHJ1ZSAvKiBzaGFsbG93ICovKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc3RhdGljIHByb3BzIGFyZSBhbHJlYWR5IHByb3hpZWQgb24gdGhlIGNvbXBvbmVudCdzIHByb3RvdHlwZVxuICAgICAgICAgIC8vIGR1cmluZyBWdWUuZXh0ZW5kKCkuIFdlIG9ubHkgbmVlZCB0byBwcm94eSBwcm9wcyBkZWZpbmVkIGF0XG4gICAgICAgICAgLy8gaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgICAgICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgICAgICAgICAgcHJveHkodm0sIFwiX3Byb3BzXCIsIGtleSk7XG4gICAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wc09wdGlvbnMpIHtcbiAgICAgICAgICBfbG9vcF8xKGtleSk7XG4gICAgICB9XG4gICAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gIH1cbiAgZnVuY3Rpb24gaW5pdERhdGEodm0pIHtcbiAgICAgIHZhciBkYXRhID0gdm0uJG9wdGlvbnMuZGF0YTtcbiAgICAgIGRhdGEgPSB2bS5fZGF0YSA9IGlzRnVuY3Rpb24oZGF0YSkgPyBnZXREYXRhKGRhdGEsIHZtKSA6IGRhdGEgfHwge307XG4gICAgICBpZiAoIWlzUGxhaW5PYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBkYXRhID0ge307XG4gICAgICAgICAgd2FybiQyKCdkYXRhIGZ1bmN0aW9ucyBzaG91bGQgcmV0dXJuIGFuIG9iamVjdDpcXG4nICtcbiAgICAgICAgICAgICAgICAgICdodHRwczovL3YyLnZ1ZWpzLm9yZy92Mi9ndWlkZS9jb21wb25lbnRzLmh0bWwjZGF0YS1NdXN0LUJlLWEtRnVuY3Rpb24nLCB2bSk7XG4gICAgICB9XG4gICAgICAvLyBwcm94eSBkYXRhIG9uIGluc3RhbmNlXG4gICAgICB2Y
3XIga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgICAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XG4gICAgICB2YXIgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XG4gICAgICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgIHdhcm4kMihcIk1ldGhvZCBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIGRhdGEgcHJvcGVydHkuXCIpLCB2bSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByb3BzICYmIGhhc093bihwcm9wcywga2V5KSkge1xuICAgICAgICAgICAgICB3YXJuJDIoXCJUaGUgZGF0YSBwcm9wZXJ0eSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGlzIGFscmVhZHkgZGVjbGFyZWQgYXMgYSBwcm9wLiBcIikgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiVXNlIHByb3AgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkLlwiLCB2bSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKCFpc1Jlc2VydmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgcHJveHkodm0sIFwiX2RhdGFcIiwga2V5KTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBvYnNlcnZlIGRhdGFcbiAgICAgIHZhciBvYiA9IG9ic2VydmUoZGF0YSk7XG4gICAgICBvYiAmJiBvYi52bUNvdW50Kys7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0RGF0YShkYXRhLCB2bSkge1xuICAgICAgLy8gIzc1NzMgZGlzYWJsZSBkZXAgY29sbGVjdGlvbiB3aGVuIGludm9raW5nIGRhdGEgZ2V0dGVyc1xuICAgICAgcHVzaFRhcmdldCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZGF0YS5jYWxsKHZtLCB2bSk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcImRhdGEoKVwiKTtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHtcbiAgICAgICAgICBwb3BUYXJnZXQoKTtcbiAgICAgIH1cbiAgfVxuICB2YXIgY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyA9IHsgbGF6eTogdHJ1ZSB9O1xuICBmdW5jdGlvbiBpbml0Q29tcHV0ZWQkMSh2bSwgY29tcHV0ZWQpIHtcbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgdmFyIHdhdGNoZXJzID0gKHZtLl9jb21wdXRlZFdhdGNoZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgICAvLyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBqdXN0IGdldHRlcnMgZHVyaW5nIFNTUlxuICAgICAgdmFyIGlzU1NSID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgICAgICAgIHZhciB1c2VyRGVmID0gY29tcHV0ZWRba2V5XTtcbiAgICAgICAgICB2Y
3XIgZ2V0dGVyID0gaXNGdW5jdGlvbih1c2VyRGVmKSA/IHVzZXJEZWYgOiB1c2VyRGVmLmdldDtcbiAgICAgICAgICBpZiAoZ2V0dGVyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgd2FybiQyKFwiR2V0dGVyIGlzIG1pc3NpbmcgZm9yIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIuXCIpLCB2bSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaXNTU1IpIHtcbiAgICAgICAgICAgICAgLy8gY3JlYXRlIGludGVybmFsIHdhdGNoZXIgZm9yIHRoZSBjb21wdXRlZCBwcm9wZXJ0eS5cbiAgICAgICAgICAgICAgd2F0Y2hlcnNba2V5XSA9IG5ldyBXYXRjaGVyKHZtLCBnZXR0ZXIgfHwgbm9vcCwgbm9vcCwgY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGNvbXBvbmVudC1kZWZpbmVkIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGVcbiAgICAgICAgICAvLyBjb21wb25lbnQgcHJvdG90eXBlLiBXZSBvbmx5IG5lZWQgdG8gZGVmaW5lIGNvbXB1dGVkIHByb3BlcnRpZXMgZGVmaW5lZFxuICAgICAgICAgIC8vIGF0IGluc3RhbnRpYXRpb24gaGVyZS5cbiAgICAgICAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICAgICAgICAgIGRlZmluZUNvbXB1dGVkKHZtLCBrZXksIHVzZXJEZWYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGtleSBpbiB2bS4kZGF0YSkge1xuICAgICAgICAgICAgICAgICAgd2FybiQyKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGluIGRhdGEuXCIpLCB2bSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZiAodm0uJG9wdGlvbnMucHJvcHMgJiYga2V5IGluIHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgICAgICAgICAgICAgICB3YXJuJDIoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBwcm9wLlwiKSwgdm0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHZtLiRvcHRpb25zLm1ldGhvZHMgJiYga2V5IGluIHZtLiRvcHRpb25zLm1ldGhvZHMpIHtcbiAgICAgICAgICAgICAgICAgIHdhcm4kMihcIlRoZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIG1ldGhvZC5cIiksIHZtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBkZWZpbmVDb21wdXRlZCh0YXJnZXQsIGtleSwgdXNlckRlZikge1xuICAgICAgdmFyIHNob3VsZENhY2hlID0gIWlzU2VydmVyUmVuZGVyaW5nKCk7XG4gICAgICBpZiAoaXNGdW5jdGlvbih1c2VyRGVmKSkge1xuICAgICAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBzaG91bGRDYWNoZVxuICAgICAgICAgICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgICAgICAgICAgOiBjcmVhdGVHZXR0ZXJJbnZva2VyKHVzZXJEZWYpO1xuICAgICAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBub29wO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHVzZXJEZWYuZ2V0XG4gICAgICAgICAgICAgID8gc2hvdWxkQ2FjaGUgJiYgdXNlckRlZi5jYWNoZSAhPT0gZmFsc2VcbiAgICAgICAgICAgICAgICAgID8gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIoa2V5KVxuICAgICAgICAgICAgICAgICAgOiBjcmVhdGVHZXR0ZXJJbnZva2VyKHVzZXJEZWYuZ2V0KVxuICAgICAgICAgICAgICA6IG5vb3A7XG4gICAgICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IHVzZXJEZWYuc2V0IHx8IG5vb3A7XG4gICAgICB9XG4gICAgICBpZiAoc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9PT0gbm9vcCkge1xuICAgICAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHdhcm4kMihcIkNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgd2FzIGFzc2lnbmVkIHRvIGJ1dCBpdCBoYXMgbm8gc2V0dGVyLlwiKSwgdGhpcyk7XG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbiAgfVxuICBmdW5jdGlvbiBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlcigpIHtcbiAgICAgICAgICB2Y
3XIgd2F0Y2hlciA9IHRoaXMuX2NvbXB1dGVkV2F0Y2hlcnMgJiYgdGhpcy5fY29tcHV0ZWRXYXRjaGVyc1trZXldO1xuICAgICAgICAgIGlmICh3YXRjaGVyKSB7XG4gICAgICAgICAgICAgIGlmICh3YXRjaGVyLmRpcnR5KSB7XG4gICAgICAgICAgICAgICAgICB3YXRjaGVyLmV2YWx1YXRlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKERlcC50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChEZXAudGFyZ2V0Lm9uVHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICBEZXAudGFyZ2V0Lm9uVHJhY2soe1xuICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3Q6IERlcC50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJnZXRcIiAvKiBUcmFja09wVHlwZXMuR0VUICovLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleVxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgd2F0Y2hlci5kZXBlbmQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gd2F0Y2hlci52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZUdldHRlckludm9rZXIoZm4pIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlcigpIHtcbiAgICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCB0aGlzKTtcbiAgICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gaW5pdE1ldGhvZHModm0sIG1ldGhvZHMpIHtcbiAgICAgIHZhciBwcm9wcyA9IHZtLiRvcHRpb25zLnByb3BzO1xuICAgICAgZm9yICh2YXIga2V5IGluIG1ldGhvZHMpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICB3YXJuJDIoXCJNZXRob2QgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBoYXMgdHlwZSBcXFwiXCIpLmNvbmNhdCh0eXBlb2YgbWV0aG9kc1trZXldLCBcIlxcXCIgaW4gdGhlIGNvbXBvbmVudCBkZWZpbml0aW9uLiBcIikgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiRGlkIHlvdSByZWZlcmVuY2UgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseT9cIiwgdm0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgIHdhcm4kMihcIk1ldGhvZCBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIHByb3AuXCIpLCB2bSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGtleSBpbiB2bSAmJiBpc1Jlc2VydmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgIHdhcm4kMihcIk1ldGhvZCBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIFZ1ZSBpbnN0YW5jZSBtZXRob2QuIFwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgXCJBdm9pZCBkZWZpbmluZyBjb21wb25lbnQgbWV0aG9kcyB0aGF0IHN0YXJ0IHdpdGggXyBvciAkLlwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2bVtrZXldID0gdHlwZW9mIG1ldGhvZHNba2V5XSAhPT0gJ2Z1bmN0aW9uJyA/IG5vb3AgOiBiaW5kJDEobWV0aG9kc1trZXldLCB2bSk7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaW5pdFdhdGNoKHZtLCB3YXRjaCkge1xuICAgICAgZm9yICh2YXIga2V5IGluIHdhdGNoKSB7XG4gICAgICAgICAgdmFyIGhhbmRsZXIgPSB3YXRjaFtrZXldO1xuICAgICAgICAgIGlmIChpc0FycmF5KGhhbmRsZXIpKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgY3JlYXRlV2F0Y2hlcih2bSwga2V5LCBoYW5kbGVyW2ldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY3JlYXRlV2F0Y2hlcih2bSwga2V5LCBoYW5kbGVyKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY3JlYXRlV2F0Y2hlcih2bSwgZXhwT3JGbiwgaGFuZGxlciwgb3B0aW9ucykge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoaGFuZGxlcikpIHtcbiAgICAgICAgICBvcHRpb25zID0gaGFuZGxlcjtcbiAgICAgICAgICBoYW5kbGVyID0gaGFuZGxlci5oYW5kbGVyO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bS4kd2F0Y2goZXhwT3JGbiwgaGFuZGxlciwgb3B0aW9ucyk7XG4gIH1cbiAgZnVuY3Rpb24gc3RhdGVNaXhpbihWdWUpIHtcbiAgICAgIC8vIGZsb3cgc29tZWhvdyBoYXMgcHJvYmxlbXMgd2l0aCBkaXJlY3RseSBkZWNsYXJlZCBkZWZpbml0aW9uIG9iamVjdFxuICAgICAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXG4gICAgICAvLyB0aGUgb2JqZWN0IGhlcmUuXG4gICAgICB2Y
3XIgZGF0YURlZiA9IHt9O1xuICAgICAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgICB9O1xuICAgICAgdmFyIHByb3BzRGVmID0ge307XG4gICAgICBwcm9wc0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BzO1xuICAgICAgfTtcbiAgICAgIHtcbiAgICAgICAgICBkYXRhRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgd2FybiQyKCdBdm9pZCByZXBsYWNpbmcgaW5zdGFuY2Ugcm9vdCAkZGF0YS4gJyArXG4gICAgICAgICAgICAgICAgICAnVXNlIG5lc3RlZCBkYXRhIHByb3BlcnRpZXMgaW5zdGVhZC4nLCB0aGlzKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHByb3BzRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgd2FybiQyKFwiJHByb3BzIGlzIHJlYWRvbmx5LlwiLCB0aGlzKTtcbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckZGF0YScsIGRhdGFEZWYpO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckcHJvcHMnLCBwcm9wc0RlZik7XG4gICAgICBWdWUucHJvdG90eXBlLiRzZXQgPSBzZXQ7XG4gICAgICBWdWUucHJvdG90eXBlLiRkZWxldGUgPSBkZWw7XG4gICAgICBWdWUucHJvdG90eXBlLiR3YXRjaCA9IGZ1bmN0aW9uIChleHBPckZuLCBjYiwgb3B0aW9ucykge1xuICAgICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QoY2IpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICAgIG9wdGlvbnMudXNlciA9IHRydWU7XG4gICAgICAgICAgdmFyIHdhdGNoZXIgPSBuZXcgV2F0Y2hlcih2bSwgZXhwT3JGbiwgY2IsIG9wdGlvbnMpO1xuICAgICAgICAgIGlmIChvcHRpb25zLmltbWVkaWF0ZSkge1xuICAgICAgICAgICAgICB2Y
3XIgaW5mbyA9IFwiY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyIFxcXCJcIi5jb25jYXQod2F0Y2hlci5leHByZXNzaW9uLCBcIlxcXCJcIik7XG4gICAgICAgICAgICAgIHB1c2hUYXJnZXQoKTtcbiAgICAgICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2IsIHZtLCBbd2F0Y2hlci52YWx1ZV0sIHZtLCBpbmZvKTtcbiAgICAgICAgICAgICAgcG9wVGFyZ2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB1bndhdGNoRm4oKSB7XG4gICAgICAgICAgICAgIHdhdGNoZXIudGVhcmRvd24oKTtcbiAgICAgICAgICB9O1xuICAgICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRQcm92aWRlKHZtKSB7XG4gICAgICB2YXIgcHJvdmlkZU9wdGlvbiA9IHZtLiRvcHRpb25zLnByb3ZpZGU7XG4gICAgICBpZiAocHJvdmlkZU9wdGlvbikge1xuICAgICAgICAgIHZhciBwcm92aWRlZCA9IGlzRnVuY3Rpb24ocHJvdmlkZU9wdGlvbilcbiAgICAgICAgICAgICAgPyBwcm92aWRlT3B0aW9uLmNhbGwodm0pXG4gICAgICAgICAgICAgIDogcHJvdmlkZU9wdGlvbjtcbiAgICAgICAgICBpZiAoIWlzT2JqZWN0KHByb3ZpZGVkKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBzb3VyY2UgPSByZXNvbHZlUHJvdmlkZWQodm0pO1xuICAgICAgICAgIC8vIElFOSBkb2Vzbid0IHN1cHBvcnQgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgc28gd2UgaGF2ZSB0b1xuICAgICAgICAgIC8vIGl0ZXJhdGUgdGhlIGtleXMgb3Vyc2VsdmVzLlxuICAgICAgICAgIHZhciBrZXlzID0gaGFzU3ltYm9sID8gUmVmbGVjdC5vd25LZXlzKHByb3ZpZGVkKSA6IE9iamVjdC5rZXlzKHByb3ZpZGVkKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzb3VyY2UsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm92aWRlZCwga2V5KSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIGluaXRJbmplY3Rpb25zKHZtKSB7XG4gICAgICB2Y
3XIgcmVzdWx0ID0gcmVzb2x2ZUluamVjdCh2bS4kb3B0aW9ucy5pbmplY3QsIHZtKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICAgICAgICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGRlZmluZVJlYWN0aXZlKHZtLCBrZXksIHJlc3VsdFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiQXZvaWQgbXV0YXRpbmcgYW4gaW5qZWN0ZWQgdmFsdWUgZGlyZWN0bHkgc2luY2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHByb3ZpZGVkIGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5qZWN0aW9uIGJlaW5nIG11dGF0ZWQ6IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCJcIiksIHZtKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIHJlc29sdmVJbmplY3QoaW5qZWN0LCB2bSkge1xuICAgICAgaWYgKGluamVjdCkge1xuICAgICAgICAgIC8vIGluamVjdCBpcyA6YW55IGJlY2F1c2UgZmxvdyBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIGZpZ3VyZSBvdXQgY2FjaGVkXG4gICAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdmFyIGtleXMgPSBoYXNTeW1ib2wgPyBSZWZsZWN0Lm93bktleXMoaW5qZWN0KSA6IE9iamVjdC5rZXlzKGluamVjdCk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgICAvLyAjNjU3NCBpbiBjYXNlIHRoZSBpbmplY3Qgb2JqZWN0IGlzIG9ic2VydmVkLi4uXG4gICAgICAgICAgICAgIGlmIChrZXkgPT09ICdfX29iX18nKVxuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIHZhciBwcm92aWRlS2V5ID0gaW5qZWN0W2tleV0uZnJvbTtcbiAgICAgICAgICAgICAgaWYgKHByb3ZpZGVLZXkgaW4gdm0uX3Byb3ZpZGVkKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZtLl9wcm92aWRlZFtwcm92aWRlS2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIGlmICgnZGVmYXVsdCcgaW4gaW5qZWN0W2tleV0pIHtcbiAgICAgICAgICAgICAgICAgIHZhciBwcm92aWRlRGVmYXVsdCA9IGluamVjdFtrZXldLmRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IGlzRnVuY3Rpb24ocHJvdmlkZURlZmF1bHQpXG4gICAgICAgICAgICAgICAgICAgICAgPyBwcm92aWRlRGVmYXVsdC5jYWxsKHZtKVxuICAgICAgICAgICAgICAgICAgICAgIDogcHJvdmlkZURlZmF1bHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICB3YXJuJDIoXCJJbmplY3Rpb24gXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBub3QgZm91bmRcIiksIHZtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICB9XG5cbiAgdmFyIHVpZCA9IDA7XG4gIGZ1bmN0aW9uIGluaXRNaXhpbiQxKFZ1ZSkge1xuICAgICAgVnVlLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgICAgICAvLyBhIHVpZFxuICAgICAgICAgIHZtLl91aWQgPSB1aWQrKztcbiAgICAgICAgICB2Y
3XIgc3RhcnRUYWcsIGVuZFRhZztcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgICAgICAgc3RhcnRUYWcgPSBcInZ1ZS1wZXJmLXN0YXJ0OlwiLmNvbmNhdCh2bS5fdWlkKTtcbiAgICAgICAgICAgICAgZW5kVGFnID0gXCJ2dWUtcGVyZi1lbmQ6XCIuY29uY2F0KHZtLl91aWQpO1xuICAgICAgICAgICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYSBmbGFnIHRvIG1hcmsgdGhpcyBhcyBhIFZ1ZSBpbnN0YW5jZSB3aXRob3V0IGhhdmluZyB0byBkbyBpbnN0YW5jZW9mXG4gICAgICAgICAgLy8gY2hlY2tcbiAgICAgICAgICB2bS5faXNWdWUgPSB0cnVlO1xuICAgICAgICAgIC8vIGF2b2lkIGluc3RhbmNlcyBmcm9tIGJlaW5nIG9ic2VydmVkXG4gICAgICAgICAgdm0uX192X3NraXAgPSB0cnVlO1xuICAgICAgICAgIC8vIGVmZmVjdCBzY29wZVxuICAgICAgICAgIHZtLl9zY29wZSA9IG5ldyBFZmZlY3RTY29wZSh0cnVlIC8qIGRldGFjaGVkICovKTtcbiAgICAgICAgICAvLyAjMTMxMzQgZWRnZSBjYXNlIHdoZXJlIGEgY2hpbGQgY29tcG9uZW50IGlzIG1hbnVhbGx5IGNyZWF0ZWQgZHVyaW5nIHRoZVxuICAgICAgICAgIC8vIHJlbmRlciBvZiBhIHBhcmVudCBjb21wb25lbnRcbiAgICAgICAgICB2bS5fc2NvcGUucGFyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHZtLl9zY29wZS5fdm0gPSB0cnVlO1xuICAgICAgICAgIC8vIG1lcmdlIG9wdGlvbnNcbiAgICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgICAvLyBvcHRpbWl6ZSBpbnRlcm5hbCBjb21wb25lbnQgaW5zdGFudGlhdGlvblxuICAgICAgICAgICAgICAvLyBzaW5jZSBkeW5hbWljIG9wdGlvbnMgbWVyZ2luZyBpcyBwcmV0dHkgc2xvdywgYW5kIG5vbmUgb2YgdGhlXG4gICAgICAgICAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgICAgICAgICBpbml0SW50ZXJuYWxDb21wb25lbnQodm0sIG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgdm0uJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMocmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyh2bS5jb25zdHJ1Y3RvciksIG9wdGlvbnMgfHwge30sIHZtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluaXRQcm94eSh2bSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGV4cG9zZSByZWFsIHNlbGZcbiAgICAgICAgICB2bS5fc2VsZiA9IHZtO1xuICAgICAgICAgIGluaXRMaWZlY3ljbGUodm0pO1xuICAgICAgICAgIGluaXRFdmVudHModm0pO1xuICAgICAgICAgIGluaXRSZW5kZXIodm0pO1xuICAgICAgICAgIGNhbGxIb29rJDEodm0sICdiZWZvcmVDcmVhdGUnLCB1bmRlZmluZWQsIGZhbHNlIC8qIHNldENvbnRleHQgKi8pO1xuICAgICAgICAgIGluaXRJbmplY3Rpb25zKHZtKTsgLy8gcmVzb2x2ZSBpbmplY3Rpb25zIGJlZm9yZSBkYXRhL3Byb3BzXG4gICAgICAgICAgaW5pdFN0YXRlKHZtKTtcbiAgICAgICAgICBpbml0UHJvdmlkZSh2bSk7IC8vIHJlc29sdmUgcHJvdmlkZSBhZnRlciBkYXRhL3Byb3BzXG4gICAgICAgICAgY2FsbEhvb2skMSh2bSwgJ2NyZWF0ZWQnKTtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgICAgICAgdm0uX25hbW
3UgPSBmb3JtYXRDb21wb25lbnROYW1lKHZtLCBmYWxzZSk7XG4gICAgICAgICAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgICAgICAgICAgbWVhc3VyZShcInZ1ZSBcIi5jb25jYXQodm0uX25hbWUsIFwiIGluaXRcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodm0uJG9wdGlvbnMuZWwpIHtcbiAgICAgICAgICAgICAgdm0uJG1vdW50KHZtLiRvcHRpb25zLmVsKTtcbiAgICAgICAgICB9XG4gICAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGluaXRJbnRlcm5hbENvbXBvbmVudCh2bSwgb3B0aW9ucykge1xuICAgICAgdmFyIG9wdHMgPSAodm0uJG9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKHZtLmNvbnN0cnVjdG9yLm9wdGlvbnMpKTtcbiAgICAgIC8vIGRvaW5nIHRoaXMgYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFuIGR5bmFtaWMgZW51bWVyYXRpb24uXG4gICAgICB2YXIgcGFyZW50Vm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTtcbiAgICAgIG9wdHMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gICAgICBvcHRzLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuICAgICAgdmFyIHZub2RlQ29tcG9uZW50T3B0aW9ucyA9IHBhcmVudFZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICBvcHRzLnByb3BzRGF0YSA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGE7XG4gICAgICBvcHRzLl9wYXJlbnRMaXN0ZW5lcnMgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMubGlzdGVuZXJzO1xuICAgICAgb3B0cy5fcmVuZGVyQ2hpbGRyZW4gPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMuY2hpbGRyZW47XG4gICAgICBvcHRzLl9jb21wb25lbnRUYWcgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMudGFnO1xuICAgICAgaWYgKG9wdGlvbnMucmVuZGVyKSB7XG4gICAgICAgICAgb3B0cy5yZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgICAgICAgICBvcHRzLnN0YXRpY1JlbmRlckZucyA9IG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMoQ3Rvcikge1xuICAgICAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gICAgICBpZiAoQ3Rvci5zdXBlcikge1xuICAgICAgICAgIHZhciBzdXBlck9wdGlvbnMgPSByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3Iuc3VwZXIpO1xuICAgICAgICAgIHZhciBjYWNoZWRTdXBlck9wdGlvbnMgPSBDdG9yLnN1cGVyT3B0aW9ucztcbiAgICAgICAgICBpZiAoc3VwZXJPcHRpb25zICE9PSBjYWNoZWRTdXBlck9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgLy8gc3VwZXIgb3B0aW9uIGNoYW5nZWQsXG4gICAgICAgICAgICAgIC8vIG5lZWQgdG8gcmVzb2x2ZSBuZXcgb3B0aW9ucy5cbiAgICAgICAgICAgICAgQ3Rvci5zdXBlck9wdGlvbnMgPSBzdXBlck9wdGlvbnM7XG4gICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbGF0ZS1tb2RpZmllZC9hdHRhY2hlZCBvcHRpb25zICgjNDk3NilcbiAgICAgICAgICAgICAgdmFyIG1vZGlmaWVkT3B0aW9ucyA9IHJlc29sdmVNb2RpZmllZE9wdGlvbnMoQ3Rvcik7XG4gICAgICAgICAgICAgIC8vIHVwZGF0ZSBiYXNlIGV4dGVuZCBvcHRpb25zXG4gICAgICAgICAgICAgIGlmIChtb2RpZmllZE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgIGV4dGVuZChDdG9yLmV4dGVuZE9wdGlvbnMsIG1vZGlmaWVkT3B0aW9ucyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhzdXBlck9wdGlvbnMsIEN0b3IuZXh0ZW5kT3B0aW9ucyk7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29tcG9uZW50c1tvcHRpb25zLm5hbWVdID0gQ3RvcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zO1xuICB9XG4gIGZ1bmN0aW9uIHJlc29sdmVNb2RpZmllZE9wdGlvbnMoQ3Rvcikge1xuICAgICAgdmFyIG1vZGlmaWVkO1xuICAgICAgdmFyIGxhdGVzdCA9IEN0b3Iub3B0aW9ucztcbiAgICAgIHZhciBzZWFsZWQgPSBDdG9yLnNlYWxlZE9wdGlvbnM7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gbGF0ZXN0KSB7XG4gICAgICAgICAgaWYgKGxhdGVzdFtrZXldICE9PSBzZWFsZWRba2V5XSkge1xuICAgICAgICAgICAgICBpZiAoIW1vZGlmaWVkKVxuICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgPSB7fTtcbiAgICAgICAgICAgICAgbW9kaWZpZWRba2V5XSA9IGxhdGVzdFtrZXldO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBtb2RpZmllZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0KGRhdGEsIHByb3BzLCBjaGlsZHJlbiwgcGFyZW50LCBDdG9yKSB7XG4gICAgICB2Y
3XIgX3RoaXMgPSB0aGlzO1xuICAgICAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gICAgICAvLyBlbnN1cmUgdGhlIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24gaW4gZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gICAgICAvLyBnZXRzIGEgdW5pcXVlIGNvbnRleHQgLSB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgY29ycmVjdCBuYW1lZCBzbG90IGNoZWNrXG4gICAgICB2YXIgY29udGV4dFZtO1xuICAgICAgaWYgKGhhc093bihwYXJlbnQsICdfdWlkJykpIHtcbiAgICAgICAgICBjb250ZXh0Vm0gPSBPYmplY3QuY3JlYXRlKHBhcmVudCk7XG4gICAgICAgICAgY29udGV4dFZtLl9vcmlnaW5hbCA9IHBhcmVudDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIHRoZSBjb250ZXh0IHZtIHBhc3NlZCBpbiBpcyBhIGZ1bmN0aW9uYWwgY29udGV4dCBhcyB3ZWxsLlxuICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBhcmUgYWJsZSB0byBnZXQgYSBob2xkIHRvIHRoZVxuICAgICAgICAgIC8vIHJlYWwgY29udGV4dCBpbnN0YW5jZS5cbiAgICAgICAgICBjb250ZXh0Vm0gPSBwYXJlbnQ7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5fb3JpZ2luYWw7XG4gICAgICB9XG4gICAgICB2YXIgaXNDb21waWxlZCA9IGlzVHJ1ZShvcHRpb25zLl9jb21waWxlZCk7XG4gICAgICB2YXIgbmVlZE5vcm1hbGl6YXRpb24gPSAhaXNDb21waWxlZDtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgIHRoaXMubGlzdGVuZXJzID0gZGF0YS5vbiB8fCBlbXB0eU9iamVjdDtcbiAgICAgIHRoaXMuaW5qZWN0aW9ucyA9IHJlc29sdmVJbmplY3Qob3B0aW9ucy5pbmplY3QsIHBhcmVudCk7XG4gICAgICB0aGlzLnNsb3RzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghX3RoaXMuJHNsb3RzKSB7XG4gICAgICAgICAgICAgIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKHBhcmVudCwgZGF0YS5zY29wZWRTbG90cywgKF90aGlzLiRzbG90cyA9IHJlc29sdmVTbG90cyhjaGlsZHJlbiwgcGFyZW50KSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3RoaXMuJHNsb3RzO1xuICAgICAgfTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2NvcGVkU2xvdHMnLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKHBhcmVudCwgZGF0YS5zY29wZWRTbG90cywgdGhpcy5zbG90cygpKTtcbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIHN1cHBvcnQgZm9yIGNvbXBpbGVkIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgICAgIGlmIChpc0NvbXBpbGVkKSB7XG4gICAgICAgICAgLy8gZXhwb3NpbmcgJG9wdGlvbnMgZm9yIHJlbmRlclN0YXRpYygpXG4gICAgICAgICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgICAgLy8gcHJlLXJlc29sdmUgc2xvdHMgZm9yIHJlbmRlclNsb3QoKVxuICAgICAgICAgIHRoaXMuJHNsb3RzID0gdGhpcy5zbG90cygpO1xuICAgICAgICAgIHRoaXMuJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHMocGFyZW50LCBkYXRhLnNjb3BlZFNsb3RzLCB0aGlzLiRzbG90cyk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5fc2NvcGVJZCkge1xuICAgICAgICAgIHRoaXMuX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgICB2Y
3XIgdm5vZGUgPSBjcmVhdGVFbGVtZW50JDEoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7XG4gICAgICAgICAgICAgIGlmICh2bm9kZSAmJiAhaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgIHZub2RlLmZuU2NvcGVJZCA9IG9wdGlvbnMuX3Njb3BlSWQ7XG4gICAgICAgICAgICAgICAgICB2bm9kZS5mbkNvbnRleHQgPSBwYXJlbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHZub2RlO1xuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQkMShjb250ZXh0Vm0sIGEsIGIsIGMsIGQsIG5lZWROb3JtYWxpemF0aW9uKTtcbiAgICAgICAgICB9O1xuICAgICAgfVxuICB9XG4gIGluc3RhbGxSZW5kZXJIZWxwZXJzKEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0LnByb3RvdHlwZSk7XG4gIGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQoQ3RvciwgcHJvcHNEYXRhLCBkYXRhLCBjb250ZXh0Vm0sIGNoaWxkcmVuKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgICAgIHZhciBwcm9wcyA9IHt9O1xuICAgICAgdmFyIHByb3BPcHRpb25zID0gb3B0aW9ucy5wcm9wcztcbiAgICAgIGlmIChpc0RlZihwcm9wT3B0aW9ucykpIHtcbiAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEgfHwgZW1wdHlPYmplY3QpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChpc0RlZihkYXRhLmF0dHJzKSlcbiAgICAgICAgICAgICAgbWVyZ2VQcm9wcyhwcm9wcywgZGF0YS5hdHRycyk7XG4gICAgICAgICAgaWYgKGlzRGVmKGRhdGEucHJvcHMpKVxuICAgICAgICAgICAgICBtZXJnZVByb3BzKHByb3BzLCBkYXRhLnByb3BzKTtcbiAgICAgIH1cbiAgICAgIHZhciByZW5kZXJDb250ZXh0ID0gbmV3IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0KGRhdGEsIHByb3BzLCBjaGlsZHJlbiwgY29udGV4dFZtLCBDdG9yKTtcbiAgICAgIHZhciB2bm9kZSA9IG9wdGlvbnMucmVuZGVyLmNhbGwobnVsbCwgcmVuZGVyQ29udGV4dC5fYywgcmVuZGVyQ29udGV4dCk7XG4gICAgICBpZiAodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgICAgICAgIHJldHVybiBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2RlLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0FycmF5KHZub2RlKSkge1xuICAgICAgICAgIHZhciB2bm9kZXMgPSBub3JtYWxpemVDaGlsZHJlbih2bm9kZSkgfHwgW107XG4gICAgICAgICAgdmFyIHJlcyA9IG5ldyBBcnJheSh2bm9kZXMubGVuZ3RoKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICByZXNbaV0gPSBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2Rlc1tpXSwgZGF0YSwgcmVuZGVyQ29udGV4dC5wYXJlbnQsIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQodm5vZGUsIGRhdGEsIGNvbnRleHRWbSwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCkge1xuICAgICAgLy8gIzc4MTcgY2xvbmUgbm9kZSBiZWZvcmUgc2V0dGluZyBmbkNvbnRleHQsIG90aGVyd2lzZSBpZiB0aGUgbm9kZSBpcyByZXVzZWRcbiAgICAgIC8vIChlLmcuIGl0IHdhcyBmcm9tIGEgY2FjaGVkIG5vcm1hbCBzbG90KSB0aGUgZm5Db250ZXh0IGNhdXNlcyBuYW1lZCBzbG90c1xuICAgICAgLy8gdGhhdCBzaG91bGQgbm90IGJlIG1hdGNoZWQgdG8gbWF0Y2guXG4gICAgICB2Y
3XIgY2xvbmUgPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgICAgIGNsb25lLmZuQ29udGV4dCA9IGNvbnRleHRWbTtcbiAgICAgIGNsb25lLmZuT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICB7XG4gICAgICAgICAgKGNsb25lLmRldnRvb2xzTWV0YSA9IGNsb25lLmRldnRvb2xzTWV0YSB8fCB7fSkucmVuZGVyQ29udGV4dCA9XG4gICAgICAgICAgICAgIHJlbmRlckNvbnRleHQ7XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5zbG90KSB7XG4gICAgICAgICAgKGNsb25lLmRhdGEgfHwgKGNsb25lLmRhdGEgPSB7fSkpLnNsb3QgPSBkYXRhLnNsb3Q7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xvbmU7XG4gIH1cbiAgZnVuY3Rpb24gbWVyZ2VQcm9wcyh0bywgZnJvbSkge1xuICAgICAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICAgICAgICB0b1tjYW1lbGl6ZShrZXkpXSA9IGZyb21ba2V5XTtcbiAgICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUob3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMubmFtZSB8fCBvcHRpb25zLl9fbmFtZSB8fCBvcHRpb25zLl9jb21wb25lbnRUYWc7XG4gIH1cbiAgLy8gaW5saW5lIGhvb2tzIHRvIGJlIGludm9rZWQgb24gY29tcG9uZW50IFZOb2RlcyBkdXJpbmcgcGF0Y2hcbiAgdmFyIGNvbXBvbmVudFZOb2RlSG9va3MgPSB7XG4gICAgICBpbml0OiBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgICAgICAgIGlmICh2bm9kZS5jb21wb25lbnRJbnN0YW5jZSAmJlxuICAgICAgICAgICAgICAhdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX2lzRGVzdHJveWVkICYmXG4gICAgICAgICAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlKSB7XG4gICAgICAgICAgICAgIC8vIGtlcHQtYWxpdmUgY29tcG9uZW50cywgdHJlYXQgYXMgYSBwYXRjaFxuICAgICAgICAgICAgICB2Y
3XIgbW91bnRlZE5vZGUgPSB2bm9kZTsgLy8gd29yayBhcm91bmQgZmxvd1xuICAgICAgICAgICAgICBjb21wb25lbnRWTm9kZUhvb2tzLnByZXBhdGNoKG1vdW50ZWROb2RlLCBtb3VudGVkTm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgY2hpbGQgPSAodm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlKHZub2RlLCBhY3RpdmVJbnN0YW5jZSkpO1xuICAgICAgICAgICAgICBjaGlsZC4kbW91bnQoaHlkcmF0aW5nID8gdm5vZGUuZWxtIDogdW5kZWZpbmVkLCBoeWRyYXRpbmcpO1xuICAgICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwcmVwYXRjaDogZnVuY3Rpb24gKG9sZFZub2RlLCB2bm9kZSkge1xuICAgICAgICAgIHZhciBvcHRpb25zID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICAgICAgICB2YXIgY2hpbGQgPSAodm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBvbGRWbm9kZS5jb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICAgICAgdXBkYXRlQ2hpbGRDb21wb25lbnQoY2hpbGQsIG9wdGlvbnMucHJvcHNEYXRhLCAvLyB1cGRhdGVkIHByb3BzXG4gICAgICAgICAgb3B0aW9ucy5saXN0ZW5lcnMsIC8vIHVwZGF0ZWQgbGlzdGVuZXJzXG4gICAgICAgICAgdm5vZGUsIC8vIG5ldyBwYXJlbnQgdm5vZGVcbiAgICAgICAgICBvcHRpb25zLmNoaWxkcmVuIC8vIG5ldyBjaGlsZHJlblxuICAgICAgICAgICk7XG4gICAgICB9LFxuICAgICAgaW5zZXJ0OiBmdW5jdGlvbiAodm5vZGUpIHtcbiAgICAgICAgICB2Y
3XIgY29udGV4dCA9IHZub2RlLmNvbnRleHQsIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkKSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBjYWxsSG9vayQxKGNvbXBvbmVudEluc3RhbmNlLCAnbW91bnRlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbnRleHQuX2lzTW91bnRlZCkge1xuICAgICAgICAgICAgICAgICAgLy8gdnVlLXJvdXRlciMxMjEyXG4gICAgICAgICAgICAgICAgICAvLyBEdXJpbmcgdXBkYXRlcywgYSBrZXB0LWFsaXZlIGNvbXBvbmVudCdzIGNoaWxkIGNvbXBvbmVudHMgbWF5XG4gICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UsIHNvIGRpcmVjdGx5IHdhbGtpbmcgdGhlIHRyZWUgaGVyZSBtYXkgY2FsbCBhY3RpdmF0ZWQgaG9va3NcbiAgICAgICAgICAgICAgICAgIC8vIG9uIGluY29ycmVjdCBjaGlsZHJlbi4gSW5zdGVhZCB3ZSBwdXNoIHRoZW0gaW50byBhIHF1ZXVlIHdoaWNoIHdpbGxcbiAgICAgICAgICAgICAgICAgIC8vIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgd2hvbGUgcGF0Y2ggcHJvY2VzcyBlbmRlZC5cbiAgICAgICAgICAgICAgICAgIHF1ZXVlQWN0aXZhdGVkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UsIHRydWUgLyogZGlyZWN0ICovKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiAodm5vZGUpIHtcbiAgICAgICAgICB2Y
3XIgY29tcG9uZW50SW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgICBpZiAoIXZub2RlLmRhdGEua2VlcEFsaXZlKSB7XG4gICAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gIH07XG4gIHZhciBob29rc1RvTWVyZ2UgPSBPYmplY3Qua2V5cyhjb21wb25lbnRWTm9kZUhvb2tzKTtcbiAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50KEN0b3IsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuLCB0YWcpIHtcbiAgICAgIGlmIChpc1VuZGVmKEN0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGJhc2VDdG9yID0gY29udGV4dC4kb3B0aW9ucy5fYmFzZTtcbiAgICAgIC8vIHBsYWluIG9wdGlvbnMgb2JqZWN0OiB0dXJuIGl0IGludG8gYSBjb25zdHJ1Y3RvclxuICAgICAgaWYgKGlzT2JqZWN0KEN0b3IpKSB7XG4gICAgICAgICAgQ3RvciA9IGJhc2VDdG9yLmV4dGVuZChDdG9yKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIGF0IHRoaXMgc3RhZ2UgaXQncyBub3QgYSBjb25zdHJ1Y3RvciBvciBhbiBhc3luYyBjb21wb25lbnQgZmFjdG9yeSxcbiAgICAgIC8vIHJlamVjdC5cbiAgICAgIGlmICh0eXBlb2YgQ3RvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgd2FybiQyKFwiSW52YWxpZCBDb21wb25lbnQgZGVmaW5pdGlvbjogXCIuY29uY2F0KFN0cmluZyhDdG9yKSksIGNvbnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBhc3luYyBjb21wb25lbnRcbiAgICAgIHZhciBhc3luY0ZhY3Rvcnk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBpZiAoaXNVbmRlZihDdG9yLmNpZCkpIHtcbiAgICAgICAgICBhc3luY0ZhY3RvcnkgPSBDdG9yO1xuICAgICAgICAgIEN0b3IgPSByZXNvbHZlQXN5bmNDb21wb25lbnQoYXN5bmNGYWN0b3J5LCBiYXNlQ3Rvcik7XG4gICAgICAgICAgaWYgKEN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciBub2RlIGZvciBhc3luYyBjb21wb25lbnQsIHdoaWNoIGlzIHJlbmRlcmVkXG4gICAgICAgICAgICAgIC8vIGFzIGEgY29tbWVudCBub2RlIGJ1dCBwcmVzZXJ2ZXMgYWxsIHRoZSByYXcgaW5mb3JtYXRpb24gZm9yIHRoZSBub2RlLlxuICAgICAgICAgICAgICAvLyB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciBhc3luYyBzZXJ2ZXItcmVuZGVyaW5nIGFuZCBoeWRyYXRpb24uXG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyKGFzeW5jRmFjdG9yeSwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZyk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGF0YSA9IGRhdGEgfHwge307XG4gICAgICAvLyByZXNvbHZlIGNvbnN0cnVjdG9yIG9wdGlvbnMgaW4gY2FzZSBnbG9iYWwgbWl4aW5zIGFyZSBhcHBsaWVkIGFmdGVyXG4gICAgICAvLyBjb21wb25lbnQgY29uc3RydWN0b3IgY3JlYXRpb25cbiAgICAgIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMoQ3Rvcik7XG4gICAgICAvLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgZGF0YSBpbnRvIHByb3BzICYgZXZlbnRzXG4gICAgICBpZiAoaXNEZWYoZGF0YS5tb2RlbCkpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgdHJhbnNmb3JtTW9kZWwoQ3Rvci5vcHRpb25zLCBkYXRhKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4dHJhY3QgcHJvcHNcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHZhciBwcm9wc0RhdGEgPSBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhKGRhdGEsIEN0b3IsIHRhZyk7XG4gICAgICAvLyBmdW5jdGlvbmFsIGNvbXBvbmVudFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuZnVuY3Rpb25hbCkpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4dHJhY3QgbGlzdGVuZXJzLCBzaW5jZSB0aGVzZSBuZWVkcyB0byBiZSB0cmVhdGVkIGFzXG4gICAgICAvLyBjaGlsZCBjb21wb25lbnQgbGlzdGVuZXJzIGluc3RlYWQgb2YgRE9NIGxpc3RlbmVyc1xuICAgICAgdmFyIGxpc3RlbmVycyA9IGRhdGEub247XG4gICAgICAvLyByZXBsYWNlIHdpdGggbGlzdGVuZXJzIHdpdGggLm5hdGl2ZSBtb2RpZmllclxuICAgICAgLy8gc28gaXQgZ2V0cyBwcm9jZXNzZWQgZHVyaW5nIHBhcmVudCBjb21wb25lbnQgcGF0Y2guXG4gICAgICBkYXRhLm9uID0gZGF0YS5uYXRpdmVPbjtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIGlmIChpc1RydWUoQ3Rvci5vcHRpb25zLmFic3RyYWN0KSkge1xuICAgICAgICAgIC8vIGFic3RyYWN0IGNvbXBvbmVudHMgZG8gbm90IGtlZXAgYW55dGhpbmdcbiAgICAgICAgICAvLyBvdGhlciB0aGFuIHByb3BzICYgbGlzdGVuZXJzICYgc2xvdFxuICAgICAgICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICAgICAgICB2Y
3XIgc2xvdCA9IGRhdGEuc2xvdDtcbiAgICAgICAgICBkYXRhID0ge307XG4gICAgICAgICAgaWYgKHNsb3QpIHtcbiAgICAgICAgICAgICAgZGF0YS5zbG90ID0gc2xvdDtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpbnN0YWxsIGNvbXBvbmVudCBtYW5hZ2VtZW50IGhvb2tzIG9udG8gdGhlIHBsYWNlaG9sZGVyIG5vZGVcbiAgICAgIGluc3RhbGxDb21wb25lbnRIb29rcyhkYXRhKTtcbiAgICAgIC8vIHJldHVybiBhIHBsYWNlaG9sZGVyIHZub2RlXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoQ3Rvci5vcHRpb25zKSB8fCB0YWc7XG4gICAgICB2YXIgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBcInZ1ZS1jb21wb25lbnQtXCIuY29uY2F0KEN0b3IuY2lkKS5jb25jYXQobmFtZSA/IFwiLVwiLmNvbmNhdChuYW1lKSA6ICcnKSwgZGF0YSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCwgXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICB7IEN0b3I6IEN0b3IsIHByb3BzRGF0YTogcHJvcHNEYXRhLCBsaXN0ZW5lcnM6IGxpc3RlbmVycywgdGFnOiB0YWcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9LCBhc3luY0ZhY3RvcnkpO1xuICAgICAgcmV0dXJuIHZub2RlO1xuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlRm9yVm5vZGUoXG4gIC8vIHdlIGtub3cgaXQncyBNb3VudGVkQ29tcG9uZW50Vk5vZGUgYnV0IGZsb3cgZG9lc24ndFxuICB2bm9kZSwgXG4gIC8vIGFjdGl2ZUluc3RhbmNlIGluIGxpZmVjeWNsZSBzdGF0ZVxuICBwYXJlbnQpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgIF9pc0NvbXBvbmVudDogdHJ1ZSxcbiAgICAgICAgICBfcGFyZW50Vm5vZGU6IHZub2RlLFxuICAgICAgICAgIHBhcmVudDogcGFyZW50XG4gICAgICB9O1xuICAgICAgLy8gY2hlY2sgaW5saW5lLXRlbXBsYXRlIHJlbmRlciBmdW5jdGlvbnNcbiAgICAgIHZhciBpbmxpbmVUZW1wbGF0ZSA9IHZub2RlLmRhdGEuaW5saW5lVGVtcGxhdGU7XG4gICAgICBpZiAoaXNEZWYoaW5saW5lVGVtcGxhdGUpKSB7XG4gICAgICAgICAgb3B0aW9ucy5yZW5kZXIgPSBpbmxpbmVUZW1wbGF0ZS5yZW5kZXI7XG4gICAgICAgICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBpbmxpbmVUZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IHZub2RlLmNvbXBvbmVudE9wdGlvbnMuQ3RvcihvcHRpb25zKTtcbiAgfVxuICBmdW5jdGlvbiBpbnN0YWxsQ29tcG9uZW50SG9va3MoZGF0YSkge1xuICAgICAgdmFyIGhvb2tzID0gZGF0YS5ob29rIHx8IChkYXRhLmhvb2sgPSB7fSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzVG9NZXJnZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBrZXkgPSBob29rc1RvTWVyZ2VbaV07XG4gICAgICAgICAgdmFyIGV4aXN0aW5nID0gaG9va3Nba2V5XTtcbiAgICAgICAgICB2Y
3XIgdG9NZXJnZSA9IGNvbXBvbmVudFZOb2RlSG9va3Nba2V5XTtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgaWYgKGV4aXN0aW5nICE9PSB0b01lcmdlICYmICEoZXhpc3RpbmcgJiYgZXhpc3RpbmcuX21lcmdlZCkpIHtcbiAgICAgICAgICAgICAgaG9va3Nba2V5XSA9IGV4aXN0aW5nID8gbWVyZ2VIb29rKHRvTWVyZ2UsIGV4aXN0aW5nKSA6IHRvTWVyZ2U7XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIG1lcmdlSG9vayhmMSwgZjIpIHtcbiAgICAgIHZhciBtZXJnZWQgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIC8vIGZsb3cgY29tcGxhaW5zIGFib3V0IGV4dHJhIGFyZ3Mgd2hpY2ggaXMgd2h5IHdlIHVzZSBhbnlcbiAgICAgICAgICBmMShhLCBiKTtcbiAgICAgICAgICBmMihhLCBiKTtcbiAgICAgIH07XG4gICAgICBtZXJnZWQuX21lcmdlZCA9IHRydWU7XG4gICAgICByZXR1cm4gbWVyZ2VkO1xuICB9XG4gIC8vIHRyYW5zZm9ybSBjb21wb25lbnQgdi1tb2RlbCBpbmZvICh2YWx1ZSBhbmQgY2FsbGJhY2spIGludG9cbiAgLy8gcHJvcCBhbmQgZXZlbnQgaGFuZGxlciByZXNwZWN0aXZlbHkuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybU1vZGVsKG9wdGlvbnMsIGRhdGEpIHtcbiAgICAgIHZhciBwcm9wID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5wcm9wKSB8fCAndmFsdWUnO1xuICAgICAgdmFyIGV2ZW50ID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5ldmVudCkgfHwgJ2lucHV0JztcbiAgICAgIChkYXRhLmF0dHJzIHx8IChkYXRhLmF0dHJzID0ge30pKVtwcm9wXSA9IGRhdGEubW9kZWwudmFsdWU7XG4gICAgICB2Y
3XIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICAgICAgdmFyIGV4aXN0aW5nID0gb25bZXZlbnRdO1xuICAgICAgdmFyIGNhbGxiYWNrID0gZGF0YS5tb2RlbC5jYWxsYmFjaztcbiAgICAgIGlmIChpc0RlZihleGlzdGluZykpIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShleGlzdGluZylcbiAgICAgICAgICAgICAgPyBleGlzdGluZy5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTFcbiAgICAgICAgICAgICAgOiBleGlzdGluZyAhPT0gY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgb25bZXZlbnRdID0gW2NhbGxiYWNrXS5jb25jYXQoZXhpc3RpbmcpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIG9uW2V2ZW50XSA9IGNhbGxiYWNrO1xuICAgICAgfVxuICB9XG5cbiAgdmFyIHdhcm4kMiA9IG5vb3A7XG4gIHZhciB0aXAgPSBub29wO1xuICB2YXIgZ2VuZXJhdGVDb21wb25lbnRUcmFjZTsgLy8gd29yayBhcm91bmQgZmxvdyBjaGVja1xuICB2YXIgZm9ybWF0Q29tcG9uZW50TmFtZTtcbiAge1xuICAgICAgdmFyIGhhc0NvbnNvbGVfMSA9IHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJztcbiAgICAgIHZhciBjbGFzc2lmeVJFXzEgPSAvKD86XnxbLV9dKShcXHcpL2c7XG4gICAgICB2YXIgY2xhc3NpZnlfMSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoY2xhc3NpZnlSRV8xLCBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50b1VwcGVyQ2FzZSgpOyB9KS5yZXBsYWNlKC9bLV9dL2csICcnKTtcbiAgICAgIH07XG4gICAgICB3YXJuJDIgPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgICAgICAgIGlmICh2bSA9PT0gdm9pZCAwKSB7IHZtID0gY3VycmVudEluc3RhbmNlOyB9XG4gICAgICAgICAgdmFyIHRyYWNlID0gdm0gPyBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlKHZtKSA6ICcnO1xuICAgICAgICAgIGlmIChjb25maWcud2FybkhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgY29uZmlnLndhcm5IYW5kbGVyLmNhbGwobnVsbCwgbXNnLCB2bSwgdHJhY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChoYXNDb25zb2xlXzEgJiYgIWNvbmZpZy5zaWxlbnQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIltWdWUgd2Fybl06IFwiLmNvbmNhdChtc2cpLmNvbmNhdCh0cmFjZSkpO1xuICAgICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aXAgPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgICAgICAgIGlmIChoYXNDb25zb2xlXzEgJiYgIWNvbmZpZy5zaWxlbnQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiW1Z1ZSB0aXBdOiBcIi5jb25jYXQobXNnKSArICh2bSA/IGdlbmVyYXRlQ29tcG9uZW50VHJhY2Uodm0pIDogJycpKTtcbiAgICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZm9ybWF0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uICh2bSwgaW5jbHVkZUZpbGUpIHtcbiAgICAgICAgICBpZiAodm0uJHJvb3QgPT09IHZtKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnPFJvb3Q+JztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG9wdGlvbnMgPSBpc0Z1bmN0aW9uKHZtKSAmJiB2bS5jaWQgIT0gbnVsbFxuICAgICAgICAgICAgICA/IHZtLm9wdGlvbnNcbiAgICAgICAgICAgICAgOiB2bS5faXNWdWVcbiAgICAgICAgICAgICAgICAgID8gdm0uJG9wdGlvbnMgfHwgdm0uY29uc3RydWN0b3Iub3B0aW9uc1xuICAgICAgICAgICAgICAgICAgOiB2bTtcbiAgICAgICAgICB2Y
3XIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUob3B0aW9ucyk7XG4gICAgICAgICAgdmFyIGZpbGUgPSBvcHRpb25zLl9fZmlsZTtcbiAgICAgICAgICBpZiAoIW5hbWUgJiYgZmlsZSkge1xuICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBmaWxlLm1hdGNoKC8oW14vXFxcXF0rKVxcLnZ1ZSQvKTtcbiAgICAgICAgICAgICAgbmFtZSA9IG1hdGNoICYmIG1hdGNoWzFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKChuYW1lID8gXCI8XCIuY29uY2F0KGNsYXNzaWZ5XzEobmFtZSksIFwiPlwiKSA6IFwiPEFub255bW91cz5cIikgK1xuICAgICAgICAgICAgICAoZmlsZSAmJiBpbmNsdWRlRmlsZSAhPT0gZmFsc2UgPyBcIiBhdCBcIi5jb25jYXQoZmlsZSkgOiAnJykpO1xuICAgICAgfTtcbiAgICAgIHZhciByZXBlYXRfMSA9IGZ1bmN0aW9uIChzdHIsIG4pIHtcbiAgICAgICAgICB2YXIgcmVzID0gJyc7XG4gICAgICAgICAgd2hpbGUgKG4pIHtcbiAgICAgICAgICAgICAgaWYgKG4gJSAyID09PSAxKVxuICAgICAgICAgICAgICAgICAgcmVzICs9IHN0cjtcbiAgICAgICAgICAgICAgaWYgKG4gPiAxKVxuICAgICAgICAgICAgICAgICAgc3RyICs9IHN0cjtcbiAgICAgICAgICAgICAgbiA+Pj0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gZnVuY3Rpb24gKHZtKSB7XG4gICAgICAgICAgaWYgKHZtLl9pc1Z1ZSAmJiB2bS4kcGFyZW50KSB7XG4gICAgICAgICAgICAgIHZhciB0cmVlID0gW107XG4gICAgICAgICAgICAgIHZhciBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgICAgICAgICB3aGlsZSAodm0pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0cmVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB2Y
3XIgbGFzdCA9IHRyZWVbdHJlZS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdC5jb25zdHJ1Y3RvciA9PT0gdm0uY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZtID0gdm0uJHBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZVt0cmVlLmxlbmd0aCAtIDFdID0gW2xhc3QsIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdHJlZS5wdXNoKHZtKTtcbiAgICAgICAgICAgICAgICAgIHZtID0gdm0uJHBhcmVudDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gKCdcXG5cXG5mb3VuZCBpblxcblxcbicgK1xuICAgICAgICAgICAgICAgICAgdHJlZVxuICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHZtLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGkgPT09IDAgPyAnLS0tPiAnIDogcmVwZWF0XzEoJyAnLCA1ICsgaSAqIDIpKS5jb25jYXQoaXNBcnJheSh2bSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIlwiLmNvbmNhdChmb3JtYXRDb21wb25lbnROYW1lKHZtWzBdKSwgXCIuLi4gKFwiKS5jb25jYXQodm1bMV0sIFwiIHJlY3Vyc2l2ZSBjYWxscylcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtYXRDb21wb25lbnROYW1lKHZtKSk7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCdcXG4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gXCJcXG5cXG4oZm91bmQgaW4gXCIuY29uY2F0KGZvcm1hdENvbXBvbmVudE5hbWUodm0pLCBcIilcIik7XG4gICAgICAgICAgfVxuICAgICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcHRpb24gb3ZlcndyaXRpbmcgc3RyYXRlZ2llcyBhcmUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlXG4gICAqIGhvdyB0byBtZXJnZSBhIHBhcmVudCBvcHRpb24gdmFsdWUgYW5kIGEgY2hpbGQgb3B0aW9uXG4gICAqIHZhbHVlIGludG8gdGhlIGZpbmFsIHZhbHVlLlxuICAgKi9cbiAgdmFyIHN0cmF0cyA9IGNvbmZpZy5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7XG4gIC8qKlxuICAgKiBPcHRpb25zIHdpdGggcmVzdHJpY3Rpb25zXG4gICAqL1xuICB7XG4gICAgICBzdHJhdHMuZWwgPSBzdHJhdHMucHJvcHNEYXRhID0gZnVuY3Rpb24gKHBhcmVudCwgY2hpbGQsIHZtLCBrZXkpIHtcbiAgICAgICAgICBpZiAoIXZtKSB7XG4gICAgICAgICAgICAgIHdhcm4kMihcIm9wdGlvbiBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGluc3RhbmNlIFwiKSArXG4gICAgICAgICAgICAgICAgICAnY3JlYXRpb24gd2l0aCB0aGUgYG5ld2Aga2V5d29yZC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHRTdHJhdChwYXJlbnQsIGNoaWxkKTtcbiAgICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIEhlbHBlciB0aGF0IHJlY3Vyc2l2ZWx5IG1lcmdlcyB0d28gZGF0YSBvYmplY3RzIHRvZ2V0aGVyLlxuICAgKi9cbiAgZnVuY3Rpb24gbWVyZ2VEYXRhKHRvLCBmcm9tLCByZWN1cnNpdmUpIHtcbiAgICAgIGlmIChyZWN1cnNpdmUgPT09IHZvaWQgMCkgeyByZWN1cnNpdmUgPSB0cnVlOyB9XG4gICAgICBpZiAoIWZyb20pXG4gICAgICAgICAgcmV0dXJuIHRvO1xuICAgICAgdmFyIGtleSwgdG9WYWwsIGZyb21WYWw7XG4gICAgICB2Y
3XIga2V5cyA9IGhhc1N5bWJvbFxuICAgICAgICAgID8gUmVmbGVjdC5vd25LZXlzKGZyb20pXG4gICAgICAgICAgOiBPYmplY3Qua2V5cyhmcm9tKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgLy8gaW4gY2FzZSB0aGUgb2JqZWN0IGlzIGFscmVhZHkgb2JzZXJ2ZWQuLi5cbiAgICAgICAgICBpZiAoa2V5ID09PSAnX19vYl9fJylcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgdG9WYWwgPSB0b1trZXldO1xuICAgICAgICAgIGZyb21WYWwgPSBmcm9tW2tleV07XG4gICAgICAgICAgaWYgKCFyZWN1cnNpdmUgfHwgIWhhc093bih0bywga2V5KSkge1xuICAgICAgICAgICAgICBzZXQodG8sIGtleSwgZnJvbVZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHRvVmFsICE9PSBmcm9tVmFsICYmXG4gICAgICAgICAgICAgIGlzUGxhaW5PYmplY3QodG9WYWwpICYmXG4gICAgICAgICAgICAgIGlzUGxhaW5PYmplY3QoZnJvbVZhbCkpIHtcbiAgICAgICAgICAgICAgbWVyZ2VEYXRhKHRvVmFsLCBmcm9tVmFsKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdG87XG4gIH1cbiAgLyoqXG4gICAqIERhdGFcbiAgICovXG4gIGZ1bmN0aW9uIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0pIHtcbiAgICAgIGlmICghdm0pIHtcbiAgICAgICAgICAvLyBpbiBhIFZ1ZS5leHRlbmQgbWVyZ2UsIGJvdGggc2hvdWxkIGJlIGZ1bmN0aW9uc1xuICAgICAgICAgIGlmICghY2hpbGRWYWwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudFZhbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFwYXJlbnRWYWwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkVmFsO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3aGVuIHBhcmVudFZhbCAmIGNoaWxkVmFsIGFyZSBib3RoIHByZXNlbnQsXG4gICAgICAgICAgLy8gd2UgbmVlZCB0byByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gICAgICAgICAgLy8gbWVyZ2VkIHJlc3VsdCBvZiBib3RoIGZ1bmN0aW9ucy4uLiBubyBuZWVkIHRvXG4gICAgICAgICAgLy8gY2hlY2sgaWYgcGFyZW50VmFsIGlzIGEgZnVuY3Rpb24gaGVyZSBiZWNhdXNlXG4gICAgICAgICAgLy8gaXQgaGFzIHRvIGJlIGEgZnVuY3Rpb24gdG8gcGFzcyBwcmV2aW91cyBtZXJnZXMuXG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZERhdGFGbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlRGF0YShpc0Z1bmN0aW9uKGNoaWxkVmFsKSA/IGNoaWxkVmFsLmNhbGwodGhpcywgdGh
3pcykgOiBjaGlsZFZhbCwgaXNGdW5jdGlvbihwYXJlbnRWYWwpID8gcGFyZW50VmFsLmNhbGwodGhpcywgdGhpcykgOiBwYXJlbnRWYWwpO1xuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkSW5zdGFuY2VEYXRhRm4oKSB7XG4gICAgICAgICAgICAgIC8vIGluc3RhbmNlIG1lcmdlXG4gICAgICAgICAgICAgIHZhciBpbnN0YW5jZURhdGEgPSBpc0Z1bmN0aW9uKGNoaWxkVmFsKVxuICAgICAgICAgICAgICAgICAgPyBjaGlsZFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgICAgICAgICAgIDogY2hpbGRWYWw7XG4gICAgICAgICAgICAgIHZhciBkZWZhdWx0RGF0YSA9IGlzRnVuY3Rpb24ocGFyZW50VmFsKVxuICAgICAgICAgICAgICAgICAgPyBwYXJlbnRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgICAgICAgICAgICA6IHBhcmVudFZhbDtcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlRGF0YShpbnN0YW5jZURhdGEsIGRlZmF1bHREYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RGF0YTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICB9XG4gIH1cbiAgc3RyYXRzLmRhdGEgPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0pIHtcbiAgICAgIGlmICghdm0pIHtcbiAgICAgICAgICBpZiAoY2hpbGRWYWwgJiYgdHlwZW9mIGNoaWxkVmFsICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHdhcm4kMignVGhlIFwiZGF0YVwiIG9wdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvbiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAndGhhdCByZXR1cm5zIGEgcGVyLWluc3RhbmNlIHZhbHVlIGluIGNvbXBvbmVudCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5pdGlvbnMuJywgdm0pO1xuICAgICAgICAgICAgICByZXR1cm4gcGFyZW50VmFsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKTtcbiAgfTtcbiAgLyoqXG4gICAqIEhvb2tzIGFuZCBwcm9wcyBhcmUgbWVyZ2VkIGFzIGFycmF5cy5cbiAgICovXG4gIGZ1bmN0aW9uIG1lcmdlTGlmZWN5Y2xlSG9vayhwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgICB2Y
3XIgcmVzID0gY2hpbGRWYWxcbiAgICAgICAgICA/IHBhcmVudFZhbFxuICAgICAgICAgICAgICA/IHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpXG4gICAgICAgICAgICAgIDogaXNBcnJheShjaGlsZFZhbClcbiAgICAgICAgICAgICAgICAgID8gY2hpbGRWYWxcbiAgICAgICAgICAgICAgICAgIDogW2NoaWxkVmFsXVxuICAgICAgICAgIDogcGFyZW50VmFsO1xuICAgICAgcmV0dXJuIHJlcyA/IGRlZHVwZUhvb2tzKHJlcykgOiByZXM7XG4gIH1cbiAgZnVuY3Rpb24gZGVkdXBlSG9va3MoaG9va3MpIHtcbiAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAocmVzLmluZGV4T2YoaG9va3NbaV0pID09PSAtMSkge1xuICAgICAgICAgICAgICByZXMucHVzaChob29rc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgfVxuICBMSUZFQ1lDTEVfSE9PS1MuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICAgICAgc3RyYXRzW2hvb2tdID0gbWVyZ2VMaWZlY3ljbGVIb29rO1xuICB9KTtcbiAgLyoqXG4gICAqIEFzc2V0c1xuICAgKlxuICAgKiBXaGVuIGEgdm0gaXMgcHJlc2VudCAoaW5zdGFuY2UgY3JlYXRpb24pLCB3ZSBuZWVkIHRvIGRvXG4gICAqIGEgdGhyZWUtd2F5IG1lcmdlIGJldHdlZW4gY29uc3RydWN0b3Igb3B0aW9ucywgaW5zdGFuY2VcbiAgICogb3B0aW9ucyBhbmQgcGFyZW50IG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZUFzc2V0cyhwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSwga2V5KSB7XG4gICAgICB2Y
3XIgcmVzID0gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCk7XG4gICAgICBpZiAoY2hpbGRWYWwpIHtcbiAgICAgICAgICBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgICAgICAgICByZXR1cm4gZXh0ZW5kKHJlcywgY2hpbGRWYWwpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgfVxuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFzc2V0cztcbiAgfSk7XG4gIC8qKlxuICAgKiBXYXRjaGVycy5cbiAgICpcbiAgICogV2F0Y2hlcnMgaGFzaGVzIHNob3VsZCBub3Qgb3ZlcndyaXRlIG9uZVxuICAgKiBhbm90aGVyLCBzbyB3ZSBtZXJnZSB0aGVtIGFzIGFycmF5cy5cbiAgICovXG4gIHN0cmF0cy53YXRjaCA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSwga2V5KSB7XG4gICAgICAvLyB3b3JrIGFyb3VuZCBGaXJlZm94J3MgT2JqZWN0LnByb3RvdHlwZS53YXRjaC4uLlxuICAgICAgLy9AdHMtZXhwZWN0LWVycm9yIHdvcmsgYXJvdW5kXG4gICAgICBpZiAocGFyZW50VmFsID09PSBuYXRpdmVXYXRjaClcbiAgICAgICAgICBwYXJlbnRWYWwgPSB1bmRlZmluZWQ7XG4gICAgICAvL0B0cy1leHBlY3QtZXJyb3Igd29yayBhcm91bmRcbiAgICAgIGlmIChjaGlsZFZhbCA9PT0gbmF0aXZlV2F0Y2gpXG4gICAgICAgICAgY2hpbGRWYWwgPSB1bmRlZmluZWQ7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICghY2hpbGRWYWwpXG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpO1xuICAgICAge1xuICAgICAgICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgICAgfVxuICAgICAgaWYgKCFwYXJlbnRWYWwpXG4gICAgICAgICAgcmV0dXJuIGNoaWxkVmFsO1xuICAgICAgdmFyIHJldCA9IHt9O1xuICAgICAgZXh0ZW5kKHJldCwgcGFyZW50VmFsKTtcbiAgICAgIGZvciAodmFyIGtleV8xIGluIGNoaWxkVmFsKSB7XG4gICAgICAgICAgdmFyIHBhcmVudF8xID0gcmV0W2tleV8xXTtcbiAgICAgICAgICB2Y
3XIgY2hpbGQgPSBjaGlsZFZhbFtrZXlfMV07XG4gICAgICAgICAgaWYgKHBhcmVudF8xICYmICFpc0FycmF5KHBhcmVudF8xKSkge1xuICAgICAgICAgICAgICBwYXJlbnRfMSA9IFtwYXJlbnRfMV07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldFtrZXlfMV0gPSBwYXJlbnRfMSA/IHBhcmVudF8xLmNvbmNhdChjaGlsZCkgOiBpc0FycmF5KGNoaWxkKSA/IGNoaWxkIDogW2NoaWxkXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBPdGhlciBvYmplY3QgaGFzaGVzLlxuICAgKi9cbiAgc3RyYXRzLnByb3BzID1cbiAgICAgIHN0cmF0cy5tZXRob2RzID1cbiAgICAgICAgICBzdHJhdHMuaW5qZWN0ID1cbiAgICAgICAgICAgICAgc3RyYXRzLmNvbXB1dGVkID1cbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkVmFsICYmIHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50VmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRWYWw7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJldCwgcGFyZW50VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRWYWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZChyZXQsIGNoaWxkVmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICAgICAgfTtcbiAgc3RyYXRzLnByb3ZpZGUgPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCkge1xuICAgICAgaWYgKCFwYXJlbnRWYWwpXG4gICAgICAgICAgcmV0dXJuIGNoaWxkVmFsO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2Y
3XIgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBtZXJnZURhdGEocmV0LCBpc0Z1bmN0aW9uKHBhcmVudFZhbCkgPyBwYXJlbnRWYWwuY2FsbCh0aGlzKSA6IHBhcmVudFZhbCk7XG4gICAgICAgICAgaWYgKGNoaWxkVmFsKSB7XG4gICAgICAgICAgICAgIG1lcmdlRGF0YShyZXQsIGlzRnVuY3Rpb24oY2hpbGRWYWwpID8gY2hpbGRWYWwuY2FsbCh0aGlzKSA6IGNoaWxkVmFsLCBmYWxzZSAvLyBub24tcmVjdXJzaXZlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9O1xuICB9O1xuICAvKipcbiAgICogRGVmYXVsdCBzdHJhdGVneS5cbiAgICovXG4gIHZhciBkZWZhdWx0U3RyYXQgPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCkge1xuICAgICAgcmV0dXJuIGNoaWxkVmFsID09PSB1bmRlZmluZWQgPyBwYXJlbnRWYWwgOiBjaGlsZFZhbDtcbiAgfTtcbiAgLyoqXG4gICAqIFZhbGlkYXRlIGNvbXBvbmVudCBuYW1lc1xuICAgKi9cbiAgZnVuY3Rpb24gY2hlY2tDb21wb25lbnRzKG9wdGlvbnMpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBvcHRpb25zLmNvbXBvbmVudHMpIHtcbiAgICAgICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUoa2V5KTtcbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiB2YWxpZGF0ZUNvbXBvbmVudE5hbWUobmFtZSkge1xuICAgICAgaWYgKCFuZXcgUmVnRXhwKFwiXlthLXpBLVpdW1xcXFwtXFxcXC4wLTlfXCIuY29uY2F0KHVuaWNvZGVSZWdFeHAuc291cmNlLCBcIl0qJFwiKSkudGVzdChuYW1lKSkge1xuICAgICAgICAgIHdhcm4kMignSW52YWxpZCBjb21wb25lbnQgbmFtZTogXCInICtcbiAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICdcIi4gQ29tcG9uZW50IG5hbWVzICcgK1xuICAgICAgICAgICAgICAnc2hvdWxkIGNvbmZvcm0gdG8gdmFsaWQgY3VzdG9tIGVsZW1lbnQgbmFtZSBpbiBodG1sNSBzcGVjaWZpY2F0aW9uLicpO1xuICAgICAgfVxuICAgICAgaWYgKGlzQnVpbHRJblRhZyhuYW1lKSB8fCBjb25maWcuaXNSZXNlcnZlZFRhZyhuYW1lKSkge1xuICAgICAgICAgIHdhcm4kMignRG8gbm90IHVzZSBidWlsdC1pbiBvciByZXNlcnZlZCBIVE1MIGVsZW1lbnRzIGFzIGNvbXBvbmVudCAnICtcbiAgICAgICAgICAgICAgJ2lkOiAnICtcbiAgICAgICAgICAgICAgbmFtZSk7XG4gICAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEVuc3VyZSBhbGwgcHJvcHMgb3B0aW9uIHN5bnRheCBhcmUgbm9ybWFsaXplZCBpbnRvIHRoZVxuICAgKiBPYmplY3QtYmFzZWQgZm9ybWF0LlxuICAgKi9cbiAgZnVuY3Rpb24gbm9ybWFsaXplUHJvcHMob3B0aW9ucywgdm0pIHtcbiAgICAgIHZhciBwcm9wcyA9IG9wdGlvbnMucHJvcHM7XG4gICAgICBpZiAoIXByb3BzKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgIHZhciBpLCB2YWwsIG5hbWU7XG4gICAgICBpZiAoaXNBcnJheShwcm9wcykpIHtcbiAgICAgICAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgICAgdmFsID0gcHJvcHNbaV07XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKHZhbCk7XG4gICAgICAgICAgICAgICAgICByZXNbbmFtZV0gPSB7IHR5cGU6IG51bGwgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHdhcm4kMigncHJvcHMgbXVzdCBiZSBzdHJpbmdzIHdoZW4gdXNpbmcgYXJyYXkgc3ludGF4LicpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wcykpIHtcbiAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICAgICAgdmFsID0gcHJvcHNba2V5XTtcbiAgICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKGtleSk7XG4gICAgICAgICAgICAgIHJlc1tuYW1lXSA9IGlzUGxhaW5PYmplY3QodmFsKSA/IHZhbCA6IHsgdHlwZTogdmFsIH07XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgd2FybiQyKFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJwcm9wc1xcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgICAgICAgICBcImJ1dCBnb3QgXCIuY29uY2F0KHRvUmF3VHlwZShwcm9wcyksIFwiLlwiKSwgdm0pO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy5wcm9wcyA9IHJlcztcbiAgfVxuICAvKipcbiAgICogTm9ybWFsaXplIGFsbCBpbmplY3Rpb25zIGludG8gT2JqZWN0LWJhc2VkIGZvcm1hdFxuICAgKi9cbiAgZnVuY3Rpb24gbm9ybWFsaXplSW5qZWN0KG9wdGlvbnMsIHZtKSB7XG4gICAgICB2Y
3XIgaW5qZWN0ID0gb3B0aW9ucy5pbmplY3Q7XG4gICAgICBpZiAoIWluamVjdClcbiAgICAgICAgICByZXR1cm47XG4gICAgICB2YXIgbm9ybWFsaXplZCA9IChvcHRpb25zLmluamVjdCA9IHt9KTtcbiAgICAgIGlmIChpc0FycmF5KGluamVjdCkpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBub3JtYWxpemVkW2luamVjdFtpXV0gPSB7IGZyb206IGluamVjdFtpXSB9O1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoaW5qZWN0KSkge1xuICAgICAgICAgIGZvciAodmFyIGtleSBpbiBpbmplY3QpIHtcbiAgICAgICAgICAgICAgdmFyIHZhbCA9IGluamVjdFtrZXldO1xuICAgICAgICAgICAgICBub3JtYWxpemVkW2tleV0gPSBpc1BsYWluT2JqZWN0KHZhbClcbiAgICAgICAgICAgICAgICAgID8gZXh0ZW5kKHsgZnJvbToga2V5IH0sIHZhbClcbiAgICAgICAgICAgICAgICAgIDogeyBmcm9tOiB2YWwgfTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICB3YXJuJDIoXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcImluamVjdFxcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgICAgICAgICBcImJ1dCBnb3QgXCIuY29uY2F0KHRvUmF3VHlwZShpbmplY3QpLCBcIi5cIiksIHZtKTtcbiAgICAgIH1cbiAgfVxuICAvKipcbiAgICogTm9ybWFsaXplIHJhdyBmdW5jdGlvbiBkaXJlY3RpdmVzIGludG8gb2JqZWN0IGZvcm1hdC5cbiAgICovXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZURpcmVjdGl2ZXMkMShvcHRpb25zKSB7XG4gICAgICB2Y
3XIgZGlycyA9IG9wdGlvbnMuZGlyZWN0aXZlcztcbiAgICAgIGlmIChkaXJzKSB7XG4gICAgICAgICAgZm9yICh2YXIga2V5IGluIGRpcnMpIHtcbiAgICAgICAgICAgICAgdmFyIGRlZiA9IGRpcnNba2V5XTtcbiAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGVmKSkge1xuICAgICAgICAgICAgICAgICAgZGlyc1trZXldID0geyBiaW5kOiBkZWYsIHVwZGF0ZTogZGVmIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gYXNzZXJ0T2JqZWN0VHlwZShuYW1lLCB2YWx1ZSwgdm0pIHtcbiAgICAgIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICB3YXJuJDIoXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcIlwiLmNvbmNhdChuYW1lLCBcIlxcXCI6IGV4cGVjdGVkIGFuIE9iamVjdCwgXCIpICtcbiAgICAgICAgICAgICAgXCJidXQgZ290IFwiLmNvbmNhdCh0b1Jhd1R5cGUodmFsdWUpLCBcIi5cIiksIHZtKTtcbiAgICAgIH1cbiAgfVxuICAvKipcbiAgICogTWVyZ2UgdHdvIG9wdGlvbiBvYmplY3RzIGludG8gYSBuZXcgb25lLlxuICAgKiBDb3JlIHV0aWxpdHkgdXNlZCBpbiBib3RoIGluc3RhbnRpYXRpb24gYW5kIGluaGVyaXRhbmNlLlxuICAgKi9cbiAgZnVuY3Rpb24gbWVyZ2VPcHRpb25zKHBhcmVudCwgY2hpbGQsIHZtKSB7XG4gICAgICB7XG4gICAgICAgICAgY2hlY2tDb21wb25lbnRzKGNoaWxkKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0Z1bmN0aW9uKGNoaWxkKSkge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICBjaGlsZCA9IGNoaWxkLm9wdGlvbnM7XG4gICAgICB9XG4gICAgICBub3JtYWxpemVQcm9wcyhjaGlsZCwgdm0pO1xuICAgICAgbm9ybWFsaXplSW5qZWN0KGNoaWxkLCB2bSk7XG4gICAgICBub3JtYWxpemVEaXJlY3RpdmVzJDEoY2hpbGQpO1xuICAgICAgLy8gQXBwbHkgZXh0ZW5kcyBhbmQgbWl4aW5zIG9uIHRoZSBjaGlsZCBvcHRpb25zLFxuICAgICAgLy8gYnV0IG9ubHkgaWYgaXQgaXMgYSByYXcgb3B0aW9ucyBvYmplY3QgdGhhdCBpc24ndFxuICAgICAgLy8gdGhlIHJlc3VsdCBvZiBhbm90aGVyIG1lcmdlT3B0aW9ucyBjYWxsLlxuICAgICAgLy8gT25seSBtZXJnZWQgb3B0aW9ucyBoYXMgdGhlIF9iYXNlIHByb3BlcnR5LlxuICAgICAgaWYgKCFjaGlsZC5fYmFzZSkge1xuICAgICAgICAgIGlmIChjaGlsZC5leHRlbmRzKSB7XG4gICAgICAgICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLmV4dGVuZHMsIHZtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoaWxkLm1peGlucykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkLm1peGlucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLm1peGluc1tpXSwgdm0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIG9wdGlvbnMgPSB7fTtcbiAgICAgIHZhciBrZXk7XG4gICAgICBmb3IgKGtleSBpbiBwYXJlbnQpIHtcbiAgICAgICAgICBtZXJnZUZpZWxkKGtleSk7XG4gICAgICB9XG4gICAgICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgICAgICAgIGlmICghaGFzT3duKHBhcmVudCwga2V5KSkge1xuICAgICAgICAgICAgICBtZXJnZUZpZWxkKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbWVyZ2VGaWVsZChrZXkpIHtcbiAgICAgICAgICB2Y
3XIgc3RyYXQgPSBzdHJhdHNba2V5XSB8fCBkZWZhdWx0U3RyYXQ7XG4gICAgICAgICAgb3B0aW9uc1trZXldID0gc3RyYXQocGFyZW50W2tleV0sIGNoaWxkW2tleV0sIHZtLCBrZXkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbiAgLyoqXG4gICAqIFJlc29sdmUgYW4gYXNzZXQuXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBiZWNhdXNlIGNoaWxkIGluc3RhbmNlcyBuZWVkIGFjY2Vzc1xuICAgKiB0byBhc3NldHMgZGVmaW5lZCBpbiBpdHMgYW5jZXN0b3IgY2hhaW4uXG4gICAqL1xuICBmdW5jdGlvbiByZXNvbHZlQXNzZXQob3B0aW9ucywgdHlwZSwgaWQsIHdhcm5NaXNzaW5nKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGFzc2V0cyA9IG9wdGlvbnNbdHlwZV07XG4gICAgICAvLyBjaGVjayBsb2NhbCByZWdpc3RyYXRpb24gdmFyaWF0aW9ucyBmaXJzdFxuICAgICAgaWYgKGhhc093bihhc3NldHMsIGlkKSlcbiAgICAgICAgICByZXR1cm4gYXNzZXRzW2lkXTtcbiAgICAgIHZhciBjYW1lbGl6ZWRJZCA9IGNhbWVsaXplKGlkKTtcbiAgICAgIGlmIChoYXNPd24oYXNzZXRzLCBjYW1lbGl6ZWRJZCkpXG4gICAgICAgICAgcmV0dXJuIGFzc2V0c1tjYW1lbGl6ZWRJZF07XG4gICAgICB2YXIgUGFzY2FsQ2FzZUlkID0gY2FwaXRhbGl6ZShjYW1lbGl6ZWRJZCk7XG4gICAgICBpZiAoaGFzT3duKGFzc2V0cywgUGFzY2FsQ2FzZUlkKSlcbiAgICAgICAgICByZXR1cm4gYXNzZXRzW1Bhc2NhbENhc2VJZF07XG4gICAgICAvLyBmYWxsYmFjayB0byBwcm90b3R5cGUgY2hhaW5cbiAgICAgIHZhciByZXMgPSBhc3NldHNbaWRdIHx8IGFzc2V0c1tjYW1lbGl6ZWRJZF0gfHwgYXNzZXRzW1Bhc2NhbENhc2VJZF07XG4gICAgICBpZiAod2Fybk1pc3NpbmcgJiYgIXJlcykge1xuICAgICAgICAgIHdhcm4kMignRmFpbGVkIHRvIHJlc29sdmUgJyArIHR5cGUuc2xpY2UoMCwgLTEpICsgJzogJyArIGlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhLCB2bSkge1xuICAgICAgdmFyIHByb3AgPSBwcm9wT3B0aW9uc1trZXldO1xuICAgICAgdmFyIGFic2VudCA9ICFoYXNPd24ocHJvcHNEYXRhLCBrZXkpO1xuICAgICAgdmFyIHZhbHVlID0gcHJvcHNEYXRhW2tleV07XG4gICAgICAvLyBib29sZWFuIGNhc3RpbmdcbiAgICAgIHZhciBib29sZWFuSW5kZXggPSBnZXRUeXBlSW5kZXgoQm9vbGVhbiwgcHJvcC50eXBlKTtcbiAgICAgIGlmIChib29sZWFuSW5kZXggPiAtMSkge1xuICAgICAgICAgIGlmIChhYnNlbnQgJiYgIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gaHlwaGVuYXRlKGtleSkpIHtcbiAgICAgICAgICAgICAgLy8gb25seSBjYXN0IGVtcHR5IHN0cmluZyAvIHNhbWUgbmFtZSB0byBib29sZWFuIGlmXG4gICAgICAgICAgICAgIC8vIGJvb2xlYW4gaGFzIGhpZ2hlciBwcmlvcml0eVxuICAgICAgICAgICAgICB2Y
3XIgc3RyaW5nSW5kZXggPSBnZXRUeXBlSW5kZXgoU3RyaW5nLCBwcm9wLnR5cGUpO1xuICAgICAgICAgICAgICBpZiAoc3RyaW5nSW5kZXggPCAwIHx8IGJvb2xlYW5JbmRleCA8IHN0cmluZ0luZGV4KSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBjaGVjayBkZWZhdWx0IHZhbHVlXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhbHVlID0gZ2V0UHJvcERlZmF1bHRWYWx1ZSh2bSwgcHJvcCwga2V5KTtcbiAgICAgICAgICAvLyBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBhIGZyZXNoIGNvcHksXG4gICAgICAgICAgLy8gbWFrZSBzdXJlIHRvIG9ic2VydmUgaXQuXG4gICAgICAgICAgdmFyIHByZXZTaG91bGRPYnNlcnZlID0gc2hvdWxkT2JzZXJ2ZTtcbiAgICAgICAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gICAgICAgICAgb2JzZXJ2ZSh2YWx1ZSk7XG4gICAgICAgICAgdG9nZ2xlT2JzZXJ2aW5nKHByZXZTaG91bGRPYnNlcnZlKTtcbiAgICAgIH1cbiAgICAgIHtcbiAgICAgICAgICBhc3NlcnRQcm9wKHByb3AsIGtleSwgdmFsdWUsIHZtLCBhYnNlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYSBwcm9wLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0UHJvcERlZmF1bHRWYWx1ZSh2bSwgcHJvcCwga2V5KSB7XG4gICAgICAvLyBubyBkZWZhdWx0LCByZXR1cm4gdW5kZWZpbmVkXG4gICAgICBpZiAoIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHZhciBkZWYgPSBwcm9wLmRlZmF1bHQ7XG4gICAgICAvLyB3YXJuIGFnYWluc3Qgbm9uLWZhY3RvcnkgZGVmYXVsdHMgZm9yIE9iamVjdCAmIEFycmF5XG4gICAgICBpZiAoaXNPYmplY3QoZGVmKSkge1xuICAgICAgICAgIHdhcm4kMignSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBwcm9wIFwiJyArXG4gICAgICAgICAgICAgIGtleSArXG4gICAgICAgICAgICAgICdcIjogJyArXG4gICAgICAgICAgICAgICdQcm9wcyB3aXRoIHR5cGUgT2JqZWN0L0FycmF5IG11c3QgdXNlIGEgZmFjdG9yeSBmdW5jdGlvbiAnICtcbiAgICAgICAgICAgICAgJ3RvIHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZS4nLCB2bSk7XG4gICAgICB9XG4gICAgICAvLyB0aGUgcmF3IHByb3AgdmFsdWUgd2FzIGFsc28gdW5kZWZpbmVkIGZyb20gcHJldmlvdXMgcmVuZGVyLFxuICAgICAgLy8gcmV0dXJuIHByZXZpb3VzIGRlZmF1bHQgdmFsdWUgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgd2F0Y2hlciB0cmlnZ2VyXG4gICAgICBpZiAodm0gJiZcbiAgICAgICAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgJiZcbiAgICAgICAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGFba2V5XSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdm0uX3Byb3BzW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiB2bS5fcHJvcHNba2V5XTtcbiAgICAgIH1cbiAgICAgIC8vIGNhbGwgZmFjdG9yeSBmdW5jdGlvbiBmb3Igbm9uLUZ1bmN0aW9uIHR5cGVzXG4gICAgICAvLyBhIHZhbHVlIGlzIEZ1bmN0aW9uIGlmIGl0cyBwcm90b3R5cGUgaXMgZnVuY3Rpb24gZXZlbiBhY3Jvc3MgZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gICAgICByZXR1cm4gaXNGdW5jdGlvbihkZWYpICYmIGdldFR5cGUocHJvcC50eXBlKSAhPT0gJ0Z1bmN0aW9uJ1xuICAgICAgICAgID8gZGVmLmNhbGwodm0pXG4gICAgICAgICAgOiBkZWY7XG4gIH1cbiAgLyoqXG4gICAqIEFzc2VydCB3aGV0aGVyIGEgcHJvcCBpcyB2YWxpZC5cbiAgICovXG4gIGZ1bmN0aW9uIGFzc2VydFByb3AocHJvcCwgbmFtZSwgdmFsdWUsIHZtLCBhYnNlbnQpIHtcbiAgICAgIGlmIChwcm9wLnJlcXVpcmVkICYmIGFic2VudCkge1xuICAgICAgICAgIHdhcm4kMignTWlzc2luZyByZXF1aXJlZCBwcm9wOiBcIicgKyBuYW1lICsgJ1wiJywgdm0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsICYmICFwcm9wLnJlcXVpcmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHR5cGUgPSBwcm9wLnR5cGU7XG4gICAgICB2Y
3XIgdmFsaWQgPSAhdHlwZSB8fCB0eXBlID09PSB0cnVlO1xuICAgICAgdmFyIGV4cGVjdGVkVHlwZXMgPSBbXTtcbiAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgICAgaWYgKCFpc0FycmF5KHR5cGUpKSB7XG4gICAgICAgICAgICAgIHR5cGUgPSBbdHlwZV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZS5sZW5ndGggJiYgIXZhbGlkOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFyIGFzc2VydGVkVHlwZSA9IGFzc2VydFR5cGUodmFsdWUsIHR5cGVbaV0sIHZtKTtcbiAgICAgICAgICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGFzc2VydGVkVHlwZS5leHBlY3RlZFR5cGUgfHwgJycpO1xuICAgICAgICAgICAgICB2YWxpZCA9IGFzc2VydGVkVHlwZS52YWxpZDtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgaGF2ZUV4cGVjdGVkVHlwZXMgPSBleHBlY3RlZFR5cGVzLnNvbWUoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQ7IH0pO1xuICAgICAgaWYgKCF2YWxpZCAmJiBoYXZlRXhwZWN0ZWRUeXBlcykge1xuICAgICAgICAgIHdhcm4kMihnZXRJbnZhbGlkVHlwZU1lc3NhZ2UobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpLCB2bSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHZhbGlkYXRvciA9IHByb3AudmFsaWRhdG9yO1xuICAgICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgICAgIGlmICghdmFsaWRhdG9yKHZhbHVlKSkge1xuICAgICAgICAgICAgICB3YXJuJDIoJ0ludmFsaWQgcHJvcDogY3VzdG9tIHZhbGlkYXRvciBjaGVjayBmYWlsZWQgZm9yIHByb3AgXCInICsgbmFtZSArICdcIi4nLCB2bSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIHZhciBzaW1wbGVDaGVja1JFID0gL14oU3RyaW5nfE51bWJlcnxCb29sZWFufEZ1bmN0aW9ufFN5bWJvbHxCaWdJbnQpJC87XG4gIGZ1bmN0aW9uIGFzc2VydFR5cGUodmFsdWUsIHR5cGUsIHZtKSB7XG4gICAgICB2Y
3XIgdmFsaWQ7XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlID0gZ2V0VHlwZSh0eXBlKTtcbiAgICAgIGlmIChzaW1wbGVDaGVja1JFLnRlc3QoZXhwZWN0ZWRUeXBlKSkge1xuICAgICAgICAgIHZhciB0ID0gdHlwZW9mIHZhbHVlO1xuICAgICAgICAgIHZhbGlkID0gdCA9PT0gZXhwZWN0ZWRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgLy8gZm9yIHByaW1pdGl2ZSB3cmFwcGVyIG9iamVjdHNcbiAgICAgICAgICBpZiAoIXZhbGlkICYmIHQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gdmFsdWUgaW5zdGFuY2VvZiB0eXBlO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICAgICAgICB2YWxpZCA9IGlzUGxhaW5PYmplY3QodmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnQXJyYXknKSB7XG4gICAgICAgICAgdmFsaWQgPSBpc0FycmF5KHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gdmFsdWUgaW5zdGFuY2VvZiB0eXBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICB3YXJuJDIoJ0ludmFsaWQgcHJvcCB0eXBlOiBcIicgKyBTdHJpbmcodHlwZSkgKyAnXCIgaXMgbm90IGEgY29uc3RydWN0b3InLCB2bSk7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWxpZDogdmFsaWQsXG4gICAgICAgICAgZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGVcbiAgICAgIH07XG4gIH1cbiAgdmFyIGZ1bmN0aW9uVHlwZUNoZWNrUkUgPSAvXlxccypmdW5jdGlvbiAoXFx3KykvO1xuICAvKipcbiAgICogVXNlIGZ1bmN0aW9uIHN0cmluZyBuYW1lIHRvIGNoZWNrIGJ1aWx0LWluIHR5cGVzLFxuICAgKiBiZWNhdXNlIGEgc2ltcGxlIGVxdWFsaXR5IGNoZWNrIHdpbGwgZmFpbCB3aGVuIHJ1bm5pbmdcbiAgICogYWNyb3NzIGRpZmZlcmVudCB2bXMgLyBpZnJhbWVzLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0VHlwZShmbikge1xuICAgICAgdmFyIG1hdGNoID0gZm4gJiYgZm4udG9TdHJpbmcoKS5tYXRjaChmdW5jdGlvblR5cGVDaGVja1JFKTtcbiAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG4gIH1cbiAgZnVuY3Rpb24gaXNTYW1lVHlwZShhLCBiKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZShhKSA9PT0gZ2V0VHlwZShiKTtcbiAgfVxuICBmdW5jdGlvbiBnZXRUeXBlSW5kZXgodHlwZSwgZXhwZWN0ZWRUeXBlcykge1xuICAgICAgaWYgKCFpc0FycmF5KGV4cGVjdGVkVHlwZXMpKSB7XG4gICAgICAgICAgcmV0dXJuIGlzU2FtZVR5cGUoZXhwZWN0ZWRUeXBlcywgdHlwZSkgPyAwIDogLTE7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXhwZWN0ZWRUeXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmIChpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXNbaV0sIHR5cGUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgfVxuICBmdW5jdGlvbiBnZXRJbnZhbGlkVHlwZU1lc3NhZ2UobmFtZSwgdmFsdWUsIGV4cGVjdGVkVHlwZXMpIHtcbiAgICAgIHZhciBtZXNzYWdlID0gXCJJbnZhbGlkIHByb3A6IHR5cGUgY2hlY2sgZmFpbGVkIGZvciBwcm9wIFxcXCJcIi5jb25jYXQobmFtZSwgXCJcXFwiLlwiKSArXG4gICAgICAgICAgXCIgRXhwZWN0ZWQgXCIuY29uY2F0KGV4cGVjdGVkVHlwZXMubWFwKGNhcGl0YWxpemUpLmpvaW4oJywgJykpO1xuICAgICAgdmFyIGV4cGVjdGVkVHlwZSA9IGV4cGVjdGVkVHlwZXNbMF07XG4gICAgICB2Y
3XIgcmVjZWl2ZWRUeXBlID0gdG9SYXdUeXBlKHZhbHVlKTtcbiAgICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSBleHBlY3RlZCB2YWx1ZVxuICAgICAgaWYgKGV4cGVjdGVkVHlwZXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgaXNFeHBsaWNhYmxlKGV4cGVjdGVkVHlwZSkgJiZcbiAgICAgICAgICBpc0V4cGxpY2FibGUodHlwZW9mIHZhbHVlKSAmJlxuICAgICAgICAgICFpc0Jvb2xlYW4oZXhwZWN0ZWRUeXBlLCByZWNlaXZlZFR5cGUpKSB7XG4gICAgICAgICAgbWVzc2FnZSArPSBcIiB3aXRoIHZhbHVlIFwiLmNvbmNhdChzdHlsZVZhbHVlKHZhbHVlLCBleHBlY3RlZFR5cGUpKTtcbiAgICAgIH1cbiAgICAgIG1lc3NhZ2UgKz0gXCIsIGdvdCBcIi5jb25jYXQocmVjZWl2ZWRUeXBlLCBcIiBcIik7XG4gICAgICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIHNwZWNpZnkgcmVjZWl2ZWQgdmFsdWVcbiAgICAgIGlmIChpc0V4cGxpY2FibGUocmVjZWl2ZWRUeXBlKSkge1xuICAgICAgICAgIG1lc3NhZ2UgKz0gXCJ3aXRoIHZhbHVlIFwiLmNvbmNhdChzdHlsZVZhbHVlKHZhbHVlLCByZWNlaXZlZFR5cGUpLCBcIi5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuICBmdW5jdGlvbiBzdHlsZVZhbHVlKHZhbHVlLCB0eXBlKSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ1N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gXCJcXFwiXCIuY29uY2F0KHZhbHVlLCBcIlxcXCJcIik7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0eXBlID09PSAnTnVtYmVyJykge1xuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChOdW1iZXIodmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdCh2YWx1ZSk7XG4gICAgICB9XG4gIH1cbiAgdmFyIEVYUExJQ0FCTEVfVFlQRVMgPSBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddO1xuICBmdW5jdGlvbiBpc0V4cGxpY2FibGUodmFsdWUpIHtcbiAgICAgIHJldHVybiBFWFBMSUNBQkxFX1RZUEVTLnNvbWUoZnVuY3Rpb24gKGVsZW0pIHsgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IGVsZW07IH0pO1xuICB9XG4gIGZ1bmN0aW9uIGlzQm9vbGVhbigpIHtcbiAgICAgIHZhciBhcmdzID0gW107XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW0pIHsgcmV0dXJuIGVsZW0udG9Mb3dlckNhc2UoKSA9PT0gJ2Jvb2xlYW4nOyB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIFZ1ZShvcHRpb25zKSB7XG4gICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVnVlKSkge1xuICAgICAgICAgIHdhcm4kMignVnVlIGlzIGEgY29uc3RydWN0b3IgYW5kIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgYG5ld2Aga2V5d29yZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5faW5pdChvcHRpb25zKTtcbiAgfVxuICAvL0B0cy1leHBlY3QtZXJyb3IgVnVlIGhhcyBmdW5jdGlvbiB0eXBlXG4gIGluaXRNaXhpbiQxKFZ1ZSk7XG4gIC8vQHRzLWV4cGVjdC1lcnJvciBWdWUgaGFzIGZ1bmN0aW9uIHR5cGVcbiAgc3RhdGVNaXhpbihWdWUpO1xuICAvL0B0cy1leHBlY3QtZXJyb3IgVnVlIGhhcyBmdW5jdGlvbiB0eXBlXG4gIGV2ZW50c01peGluKFZ1ZSk7XG4gIC8vQHRzLWV4cGVjdC1lcnJvciBWdWUgaGFzIGZ1bmN0aW9uIHR5cGVcbiAgbGlmZWN5Y2xlTWl4aW4oVnVlKTtcbiAgLy9AdHMtZXhwZWN0LWVycm9yIFZ1ZSBoYXMgZnVuY3Rpb24gdHlwZVxuICByZW5kZXJNaXhpbihWdWUpO1xuXG4gIGZ1bmN0aW9uIGluaXRVc2UoVnVlKSB7XG4gICAgICBWdWUudXNlID0gZnVuY3Rpb24gKHBsdWdpbikge1xuICAgICAgICAgIHZhciBpbnN0YWxsZWRQbHVnaW5zID0gdGhpcy5faW5zdGFsbGVkUGx1Z2lucyB8fCAodGhpcy5faW5zdGFsbGVkUGx1Z2lucyA9IFtdKTtcbiAgICAgICAgICBpZiAoaW5zdGFsbGVkUGx1Z2lucy5pbmRleE9mKHBsdWdpbikgPiAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzXG4gICAgICAgICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgYXJncy51bnNoaWZ0KHRoaXMpO1xuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHBsdWdpbi5pbnN0YWxsKSkge1xuICAgICAgICAgICAgICBwbHVnaW4uaW5zdGFsbC5hcHBseShwbHVnaW4sIGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHBsdWdpbikpIHtcbiAgICAgICAgICAgICAgcGx1Z2luLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnN0YWxsZWRQbHVnaW5zLnB1c2gocGx1Z2luKTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbml0TWl4aW4oVnVlKSB7XG4gICAgICBWdWUubWl4aW4gPSBmdW5jdGlvbiAobWl4aW4pIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBtaXhpbik7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdEV4dGVuZChWdWUpIHtcbiAgICAgIC8qKlxuICAgICAgICogRWFjaCBpbnN0YW5jZSBjb25zdHJ1Y3RvciwgaW5jbHVkaW5nIFZ1ZSwgaGFzIGEgdW5pcXVlXG4gICAgICAgKiBjaWQuIFRoaXMgZW5hYmxlcyB1cyB0byBjcmVhdGUgd3JhcHBlZCBcImNoaWxkXG4gICAgICAgKiBjb25zdHJ1Y3RvcnNcIiBmb3IgcHJvdG90eXBhbCBpbmhlcml0YW5jZSBhbmQgY2FjaGUgdGhlbS5cbiAgICAgICAqL1xuICAgICAgVnVlLmNpZCA9IDA7XG4gICAgICB2Y
3XIgY2lkID0gMTtcbiAgICAgIC8qKlxuICAgICAgICogQ2xhc3MgaW5oZXJpdGFuY2VcbiAgICAgICAqL1xuICAgICAgVnVlLmV4dGVuZCA9IGZ1bmN0aW9uIChleHRlbmRPcHRpb25zKSB7XG4gICAgICAgICAgZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnMgfHwge307XG4gICAgICAgICAgdmFyIFN1cGVyID0gdGhpcztcbiAgICAgICAgICB2YXIgU3VwZXJJZCA9IFN1cGVyLmNpZDtcbiAgICAgICAgICB2YXIgY2FjaGVkQ3RvcnMgPSBleHRlbmRPcHRpb25zLl9DdG9yIHx8IChleHRlbmRPcHRpb25zLl9DdG9yID0ge30pO1xuICAgICAgICAgIGlmIChjYWNoZWRDdG9yc1tTdXBlcklkXSkge1xuICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkQ3RvcnNbU3VwZXJJZF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShleHRlbmRPcHRpb25zKSB8fCBnZXRDb21wb25lbnROYW1lKFN1cGVyLm9wdGlvbnMpO1xuICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIFN1YiA9IGZ1bmN0aW9uIFZ1ZUNvbXBvbmVudChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2luaXQob3B0aW9ucyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBTdWIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdXBlci5wcm90b3R5cGUpO1xuICAgICAgICAgIFN1Yi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdWI7XG4gICAgICAgICAgU3ViLmNpZCA9IGNpZCsrO1xuICAgICAgICAgIFN1Yi5vcHRpb25zID0gbWVyZ2VPcHRpb25zKFN1cGVyLm9wdGlvbnMsIGV4dGVuZE9wdGlvbnMpO1xuICAgICAgICAgIFN1Ylsnc3VwZXInXSA9IFN1cGVyO1xuICAgICAgICAgIC8vIEZvciBwcm9wcyBhbmQgY29tcHV0ZWQgcHJvcGVydGllcywgd2UgZGVmaW5lIHRoZSBwcm94eSBnZXR0ZXJzIG9uXG4gICAgICAgICAgLy8gdGhlIFZ1ZSBpbnN0YW5jZXMgYXQgZXh0ZW5zaW9uIHRpbWUsIG9uIHRoZSBleHRlbmRlZCBwcm90b3R5cGUuIFRoaXNcbiAgICAgICAgICAvLyBhdm9pZHMgT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxzIGZvciBlYWNoIGluc3RhbmNlIGNyZWF0ZWQuXG4gICAgICAgICAgaWYgKFN1Yi5vcHRpb25zLnByb3BzKSB7XG4gICAgICAgICAgICAgIGluaXRQcm9wcyhTdWIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoU3ViLm9wdGlvbnMuY29tcHV0ZWQpIHtcbiAgICAgICAgICAgICAgaW5pdENvbXB1dGVkKFN1Yik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGFsbG93IGZ1cnRoZXIgZXh0ZW5zaW9uL21peGluL3BsdWdpbiB1c2FnZVxuICAgICAgICAgIFN1Yi5leHRlbmQgPSBTdXBlci5leHRlbmQ7XG4gICAgICAgICAgU3ViLm1peGluID0gU3VwZXIubWl4aW47XG4gICAgICAgICAgU3ViLnVzZSA9IFN1cGVyLnVzZTtcbiAgICAgICAgICAvLyBjcmVhdGUgYXNzZXQgcmVnaXN0ZXJzLCBzbyBleHRlbmRlZCBjbGFzc2VzXG4gICAgICAgICAgLy8gY2FuIGhhdmUgdGhlaXIgcHJpdmF0ZSBhc3NldHMgdG9vLlxuICAgICAgICAgIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgICAgICAgU3ViW3R5cGVdID0gU3VwZXJbdHlwZV07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gZW5hYmxlIHJlY3Vyc2l2ZSBzZWxmLWxvb2t1cFxuICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgIFN1Yi5vcHRpb25zLmNvbXBvbmVudHNbbmFtZV0gPSBTdWI7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHN1cGVyIG9wdGlvbnMgYXQgZXh0ZW5zaW9uIHRpbWUuXG4gICAgICAgICAgLy8gbGF0ZXIgYXQgaW5zdGFudGlhdGlvbiB3ZSBjYW4gY2hlY2sgaWYgU3VwZXIncyBvcHRpb25zIGhhdmVcbiAgICAgICAgICAvLyBiZWVuIHVwZGF0ZWQuXG4gICAgICAgICAgU3ViLnN1cGVyT3B0aW9ucyA9IFN1cGVyLm9wdGlvbnM7XG4gICAgICAgICAgU3ViLmV4dGVuZE9wdGlvbnMgPSBleHRlbmRPcHRpb25zO1xuICAgICAgICAgIFN1Yi5zZWFsZWRPcHRpb25zID0gZXh0ZW5kKHt9LCBTdWIub3B0aW9ucyk7XG4gICAgICAgICAgLy8gY2FjaGUgY29uc3RydWN0b3JcbiAgICAgICAgICBjYWNoZWRDdG9yc1tTdXBlcklkXSA9IFN1YjtcbiAgICAgICAgICByZXR1cm4gU3ViO1xuICAgICAgfTtcbiAgfVxuICBmdW5jdGlvbiBpbml0UHJvcHMoQ29tcCkge1xuICAgICAgdmFyIHByb3BzID0gQ29tcC5vcHRpb25zLnByb3BzO1xuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICAgICAgcHJveHkoQ29tcC5wcm90b3R5cGUsIFwiX3Byb3BzXCIsIGtleSk7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaW5pdENvbXB1dGVkKENvbXApIHtcbiAgICAgIHZhciBjb21wdXRlZCA9IENvbXAub3B0aW9ucy5jb21wdXRlZDtcbiAgICAgIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgICAgICAgIGRlZmluZUNvbXB1dGVkKENvbXAucHJvdG90eXBlLCBrZXksIGNvbXB1dGVkW2tleV0pO1xuICAgICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdEFzc2V0UmVnaXN0ZXJzKFZ1ZSkge1xuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGUgYXNzZXQgcmVnaXN0cmF0aW9uIG1ldGhvZHMuXG4gICAgICAgKi9cbiAgICAgIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGZ1bmN0aW9uIGlzIG5vdCBleGFjdCBzYW1lIHR5cGVcbiAgICAgICAgICBWdWVbdHlwZV0gPSBmdW5jdGlvbiAoaWQsIGRlZmluaXRpb24pIHtcbiAgICAgICAgICAgICAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGlkKTtcbiAgICAgICAgICAgICAgICAgI
3H1cbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnY29tcG9uZW50JyAmJiBpc1BsYWluT2JqZWN0KGRlZmluaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24ubmFtZSA9IGRlZmluaXRpb24ubmFtZSB8fCBpZDtcbiAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uID0gdGhpcy5vcHRpb25zLl9iYXNlLmV4dGVuZChkZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZGlyZWN0aXZlJyAmJiBpc0Z1bmN0aW9uKGRlZmluaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbiA9IHsgYmluZDogZGVmaW5pdGlvbiwgdXBkYXRlOiBkZWZpbml0aW9uIH07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNbdHlwZSArICdzJ11baWRdID0gZGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX2dldENvbXBvbmVudE5hbWUob3B0cykge1xuICAgICAgcmV0dXJuIG9wdHMgJiYgKGdldENvbXBvbmVudE5hbWUob3B0cy5DdG9yLm9wdGlvbnMpIHx8IG9wdHMudGFnKTtcbiAgfVxuICBmdW5jdGlvbiBtYXRjaGVzKHBhdHRlcm4sIG5hbWUpIHtcbiAgICAgIGlmIChpc0FycmF5KHBhdHRlcm4pKSB7XG4gICAgICAgICAgcmV0dXJuIHBhdHRlcm4uaW5kZXhPZihuYW1lKSA+IC0xO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHBhdHRlcm4uc3BsaXQoJywnKS5pbmRleE9mKG5hbWUpID4gLTE7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc1JlZ0V4cChwYXR0ZXJuKSkge1xuICAgICAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobmFtZSk7XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZ1bmN0aW9uIHBydW5lQ2FjaGUoa2VlcEFsaXZlSW5zdGFuY2UsIGZpbHRlcikge1xuICAgICAgdmFyIGNhY2hlID0ga2VlcEFsaXZlSW5zdGFuY2UuY2FjaGUsIGtleXMgPSBrZWVwQWxpdmVJbnN0YW5jZS5rZXlzLCBfdm5vZGUgPSBrZWVwQWxpdmVJbnN0YW5jZS5fdm5vZGUsICR2bm9kZSA9IGtlZXBBbGl2ZUluc3RhbmNlLiR2bm9kZTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBjYWNoZSkge1xuICAgICAgICAgIHZhciBlbnRyeSA9IGNhY2hlW2tleV07XG4gICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgIHZhciBuYW1lXzEgPSBlbnRyeS5uYW1lO1xuICAgICAgICAgICAgICBpZiAobmFtZV8xICYmICFmaWx0ZXIobmFtZV8xKSkge1xuICAgICAgICAgICAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIF92bm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICAkdm5vZGUuY29tcG9uZW50T3B0aW9ucy5jaGlsZHJlbiA9IHVuZGVmaW5lZDtcbiAgfVxuICBmdW5jdGlvbiBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleSwga2V5cywgY3VycmVudCkge1xuICAgICAgdmFyIGVudHJ5ID0gY2FjaGVba2V5XTtcbiAgICAgIGlmIChlbnRyeSAmJiAoIWN1cnJlbnQgfHwgZW50cnkudGFnICE9PSBjdXJyZW50LnRhZykpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNhbiBiZSB1bmRlZmluZWRcbiAgICAgICAgICBlbnRyeS5jb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpO1xuICAgICAgfVxuICAgICAgY2FjaGVba2V5XSA9IG51bGw7XG4gICAgICByZW1vdmUkMihrZXlzLCBrZXkpO1xuICB9XG4gIHZhciBwYXR0ZXJuVHlwZXMgPSBbU3RyaW5nLCBSZWdFeHAsIEFycmF5XTtcbiAgLy8gVE9ETyBkZWZpbmVDb21wb25lbnRcbiAgdmFyIEtlZXBBbGl2ZSA9IHtcbiAgICAgIG5hbWU6ICdrZWVwLWFsaXZlJyxcbiAgICAgIGFic3RyYWN0OiB0cnVlLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBpbmNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgICAgICAgZXhjbHVkZTogcGF0dGVyblR5cGVzLFxuICAgICAgICAgIG1heDogW1N0cmluZywgTnVtYmVyXVxuICAgICAgfSxcbiAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICBjYWNoZVZOb2RlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGNhY2hlID0gX2EuY2FjaGUsIGtleXMgPSBfYS5rZXlzLCB2bm9kZVRvQ2FjaGUgPSBfYS52bm9kZVRvQ2FjaGUsIGtleVRvQ2FjaGUgPSBfYS5rZXlUb0NhY2hlO1xuICAgICAgICAgICAgICBpZiAodm5vZGVUb0NhY2hlKSB7XG4gICAgICAgICAgICAgICAgICB2Y
3XIgdGFnID0gdm5vZGVUb0NhY2hlLnRhZywgY29tcG9uZW50SW5zdGFuY2UgPSB2bm9kZVRvQ2FjaGUuY29tcG9uZW50SW5zdGFuY2UsIGNvbXBvbmVudE9wdGlvbnMgPSB2bm9kZVRvQ2FjaGUuY29tcG9uZW50T3B0aW9ucztcbiAgICAgICAgICAgICAgICAgIGNhY2hlW2tleVRvQ2FjaGVdID0ge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IF9nZXRDb21wb25lbnROYW1lKGNvbXBvbmVudE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgICAgICAgIHRhZzogdGFnLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlOiBjb21wb25lbnRJbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXlUb0NhY2hlKTtcbiAgICAgICAgICAgICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4ICYmIGtleXMubGVuZ3RoID4gcGFyc2VJbnQodGhpcy5tYXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXlzWzBdLCBrZXlzLCB0aGlzLl92bm9kZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0aGlzLnZub2RlVG9DYWNoZSA9IG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMua2V5cyA9IFtdO1xuICAgICAgfSxcbiAgICAgIGRlc3Ryb3llZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICAgIHBydW5lQ2FjaGVFbnRyeSh0aGlzLmNhY2hlLCBrZXksIHRoaXMua2V5cyk7XG4gICAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2Y
3XIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgIHRoaXMuY2FjaGVWTm9kZSgpO1xuICAgICAgICAgIHRoaXMuJHdhdGNoKCdpbmNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgICBwcnVuZUNhY2hlKF90aGlzLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLiR3YXRjaCgnZXhjbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgICAgcHJ1bmVDYWNoZShfdGhpcywgZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuICFtYXRjaGVzKHZhbCwgbmFtZSk7IH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLmNhY2hlVk5vZGUoKTtcbiAgICAgIH0sXG4gICAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgc2xvdCA9IHRoaXMuJHNsb3RzLmRlZmF1bHQ7XG4gICAgICAgICAgdmFyIHZub2RlID0gZ2V0Rmlyc3RDb21wb25lbnRDaGlsZChzbG90KTtcbiAgICAgICAgICB2YXIgY29tcG9uZW50T3B0aW9ucyA9IHZub2RlICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgLy8gY2hlY2sgcGF0dGVyblxuICAgICAgICAgICAgICB2YXIgbmFtZV8yID0gX2dldENvbXBvbmVudE5hbWUoY29tcG9uZW50T3B0aW9ucyk7XG4gICAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGluY2x1ZGUgPSBfYS5pbmNsdWRlLCBleGNsdWRlID0gX2EuZXhjbHVkZTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAvLyBub3QgaW5jbHVkZWRcbiAgICAgICAgICAgICAgKGluY2x1ZGUgJiYgKCFuYW1lXzIgfHwgIW1hdGNoZXMoaW5jbHVkZSwgbmFtZV8yKSkpIHx8XG4gICAgICAgICAgICAgICAgICAvLyBleGNsdWRlZFxuICAgICAgICAgICAgICAgICAgKGV4Y2x1ZGUgJiYgbmFtZV8yICYmIG1hdGNoZXMoZXhjbHVkZSwgbmFtZV8yKSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2bm9kZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2Y
3XIgX2IgPSB0aGlzLCBjYWNoZSA9IF9iLmNhY2hlLCBrZXlzID0gX2Iua2V5cztcbiAgICAgICAgICAgICAgdmFyIGtleSA9IHZub2RlLmtleSA9PSBudWxsXG4gICAgICAgICAgICAgICAgICA/IC8vIHNhbWUgY29uc3RydWN0b3IgbWF5IGdldCByZWdpc3RlcmVkIGFzIGRpZmZlcmVudCBsb2NhbCBjb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgLy8gc28gY2lkIGFsb25lIGlzIG5vdCBlbm91Z2ggKCMzMjY5KVxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE9wdGlvbnMuQ3Rvci5jaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy50YWcgPyBcIjo6XCIuY29uY2F0KGNvbXBvbmVudE9wdGlvbnMudGFnKSA6ICcnKVxuICAgICAgICAgICAgICAgICAgOiB2bm9kZS5rZXk7XG4gICAgICAgICAgICAgIGlmIChjYWNoZVtrZXldKSB7XG4gICAgICAgICAgICAgICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IGNhY2hlW2tleV0uY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAvLyBtYWtlIGN1cnJlbnQga2V5IGZyZXNoZXN0XG4gICAgICAgICAgICAgICAgICByZW1vdmUkMihrZXlzLCBrZXkpO1xuICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBkZWxheSBzZXR0aW5nIHRoZSBjYWNoZSB1bnRpbCB1cGRhdGVcbiAgICAgICAgICAgICAgICAgIHRoaXMudm5vZGVUb0NhY2hlID0gdm5vZGU7XG4gICAgICAgICAgICAgICAgICB0aGlzLmtleVRvQ2FjaGUgPSBrZXk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjYW4gdm5vZGUuZGF0YSBjYW4gYmUgdW5kZWZpbmVkXG4gICAgICAgICAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZub2RlIHx8IChzbG90ICYmIHNsb3RbMF0pO1xuICAgICAgfVxuICB9O1xuXG4gIHZhciBidWlsdEluQ29tcG9uZW50cyA9IHtcbiAgICAgIEtlZXBBbGl2ZTogS2VlcEFsaXZlXG4gIH07XG5cbiAgZnVuY3Rpb24gaW5pdEdsb2JhbEFQSShWdWUpIHtcbiAgICAgIC8vIGNvbmZpZ1xuICAgICAgdmFyIGNvbmZpZ0RlZiA9IHt9O1xuICAgICAgY29uZmlnRGVmLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmZpZzsgfTtcbiAgICAgIHtcbiAgICAgICAgICBjb25maWdEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB3YXJuJDIoJ0RvIG5vdCByZXBsYWNlIHRoZSBWdWUuY29uZmlnIG9iamVjdCwgc2V0IGluZGl2aWR1YWwgZmllbGRzIGluc3RlYWQuJyk7XG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdjb25maWcnLCBjb25maWdEZWYpO1xuICAgICAgLy8gZXhwb3NlZCB1dGlsIG1ldGhvZHMuXG4gICAgICAvLyBOT1RFOiB0aGVzZSBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcHVibGljIEFQSSAtIGF2b2lkIHJlbHlpbmcgb25cbiAgICAgIC8vIHRoZW0gdW5sZXNzIHlvdSBhcmUgYXdhcmUgb2YgdGhlIHJpc2suXG4gICAgICBWdWUudXRpbCA9IHtcbiAgICAgICAgICB3YXJuOiB3YXJuJDIsXG4gICAgICAgICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgICAgICAgbWVyZ2VPcHRpb25zOiBtZXJnZU9wdGlvbnMsXG4gICAgICAgICAgZGVmaW5lUmVhY3RpdmU6IGRlZmluZVJlYWN0aXZlXG4gICAgICB9O1xuICAgICAgVnVlLnNldCA9IHNldDtcbiAgICAgIFZ1ZS5kZWxldGUgPSBkZWw7XG4gICAgICBWdWUubmV4dFRpY2sgPSBuZXh0VGljaztcbiAgICAgIC8vIDIuNiBleHBsaWNpdCBvYnNlcnZhYmxlIEFQSVxuICAgICAgVnVlLm9ic2VydmFibGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgb2JzZXJ2ZShvYmopO1xuICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9O1xuICAgICAgVnVlLm9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAgIFZ1ZS5vcHRpb25zW3R5cGUgKyAncyddID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIH0pO1xuICAgICAgLy8gdGhpcyBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBcImJhc2VcIiBjb25zdHJ1Y3RvciB0byBleHRlbmQgYWxsIHBsYWluLW9iamVjdFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIGluIFdlZXgncyBtdWx0aS1pbnN0YW5jZSBzY2VuYXJpb3MuXG4gICAgICBWdWUub3B0aW9ucy5fYmFzZSA9IFZ1ZTtcbiAgICAgIGV4dGVuZChWdWUub3B0aW9ucy5jb21wb25lbnRzLCBidWlsdEluQ29tcG9uZW50cyk7XG4gICAgICBpbml0VXNlKFZ1ZSk7XG4gICAgICBpbml0TWl4aW4oVnVlKTtcbiAgICAgIGluaXRFeHRlbmQoVnVlKTtcbiAgICAgIGluaXRBc3NldFJlZ2lzdGVycyhWdWUpO1xuICB9XG5cbiAgaW5pdEdsb2JhbEFQSShWdWUpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRpc1NlcnZlcicsIHtcbiAgICAgIGdldDogaXNTZXJ2ZXJSZW5kZXJpbmdcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHNzckNvbnRleHQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIHJldHVybiB0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0O1xuICAgICAgfVxuICB9KTtcbiAgLy8gZXhwb3NlIEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0IGZvciBzc3IgcnVudGltZSBoZWxwZXIgaW5zdGFsbGF0aW9uXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCcsIHtcbiAgICAgIHZhbHVlOiBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dFxuICB9KTtcbiAgVnVlLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG4gIC8vIHRoZXNlIGFyZSByZXNlcnZlZCBmb3Igd2ViIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgY29tcGlsZWQgYXdheVxuICAvLyBkdXJpbmcgdGVtcGxhdGUgY29tcGlsYXRpb25cbiAgdmFyIGlzUmVzZXJ2ZWRBdHRyID0gbWFrZU1hcCgnc3R5bGUsY2xhc3MnKTtcbiAgLy8gYXR0cmlidXRlcyB0aGF0IHNob3VsZCBiZSB1c2luZyBwcm9wcyBmb3IgYmluZGluZ1xuICB2YXIgYWNjZXB0VmFsdWUgPSBtYWtlTWFwKCdpbnB1dCx0ZXh0YXJlYSxvcHRpb24sc2VsZWN0LHByb2dyZXNzJyk7XG4gIHZhciBtdXN0VXNlUHJvcCA9IGZ1bmN0aW9uICh0YWcsIHR5cGUsIGF0dHIpIHtcbiAgICAgIHJldHVybiAoKGF0dHIgPT09ICd2YWx1ZScgJiYgYWNjZXB0VmFsdWUodGFnKSAmJiB0eXBlICE9PSAnYnV0dG9uJykgfHxcbiAgICAgICAgICAoYXR0ciA9PT0gJ3NlbGVjdGVkJyAmJiB0YWcgPT09ICdvcHRpb24nKSB8fFxuICAgICAgICAgIChhdHRyID09PSAnY2hlY2tlZCcgJiYgdGFnID09PSAnaW5wdXQnKSB8fFxuICAgICAgICAgIChhdHRyID09PSAnbXV0ZWQnICYmIHRhZyA9PT0gJ3ZpZGVvJykpO1xuICB9O1xuICB2YXIgaXNFbnVtZXJhdGVkQXR0ciA9IG1ha2VNYXAoJ2NvbnRlbn
3RlZGl0YWJsZSxkcmFnZ2FibGUsc3BlbGxjaGVjaycpO1xuICB2YXIgaXNWYWxpZENvbnRlbnRFZGl0YWJsZVZhbHVlID0gbWFrZU1hcCgnZXZlbnRzLGNhcmV0LHR5cGluZyxwbGFpbnRleHQtb25seScpO1xuICB2YXIgY29udmVydEVudW1lcmF0ZWRWYWx1ZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkgfHwgdmFsdWUgPT09ICdmYWxzZSdcbiAgICAgICAgICA/ICdmYWxzZSdcbiAgICAgICAgICA6IC8vIGFsbG93IGFyYml0cmFyeSBzdHJpbmcgdmFsdWUgZm9yIGNvbnRlbnRlZGl0YWJsZVxuICAgICAgICAgICAgICBrZXkgPT09ICdjb250ZW50ZWRpdGFibGUnICYmIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgICAgICAgIDogJ3RydWUnO1xuICB9O1xuICB2YXIgaXNCb29sZWFuQXR0ciA9IG1ha2VNYXAoJ2FsbG93ZnVsbHNjcmVlbixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY2hlY2tlZCxjb21wYWN0LGNvbnRyb2xzLGRlY2xhcmUsJyArXG4gICAgICAnZGVmYXVsdCxkZWZhdWx0Y2hlY2tlZCxkZWZhdWx0bXV0ZWQsZGVmYXVsdHNlbGVjdGVkLGRlZmVyLGRpc2FibGVkLCcgK1xuICAgICAgJ2VuYWJsZWQsZm9ybW5vdmFsaWRhdGUsaGlkZGVuLGluZGV0ZXJtaW5hdGUsaW5lcnQsaXNtYXAsaXRlbXNjb3BlLGxvb3AsbXVsdGlwbGUsJyArXG4gICAgICAnbXV0ZWQsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm92YWxpZGF0ZSxub3dyYXAsb3BlbixwYXVzZW9uZXhpdCxyZWFkb25seSwnICtcbiAgICAgICdyZXF1aXJlZCxyZXZlcnNlZCxzY29wZWQsc2VhbWxlc3Msc2VsZWN0ZWQsc29ydGFibGUsJyArXG4gICAgICAndHJ1ZXNwZWVkLHR5cGVtdXN0bWF0Y2gsdmlzaWJsZScpO1xuICB2YXIgeGxpbmtOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJztcbiAgdmFyIGlzWGxpbmsgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgcmV0dXJuIG5hbWUuY2hhckF0KDUpID09PSAnOicgJiYgbmFtZS5zbGljZSgwLCA1KSA9PT0gJ3hsaW5rJztcbiAgfTtcbiAgdmFyIGdldFhsaW5rUHJvcCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICByZXR1cm4gaXNYbGluayhuYW1lKSA/IG5hbWUuc2xpY2UoNiwgbmFtZS5sZW5ndGgpIDogJyc7XG4gIH07XG4gIHZhciBpc0ZhbHN5QXR0clZhbHVlID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gZmFsc2U7XG4gIH07XG5cbiAgZnVuY3Rpb24gZ2VuQ2xhc3NGb3JWbm9kZSh2bm9kZSkge1xuICAgICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgICAgdmFyIHBhcmVudE5vZGUgPSB2bm9kZTtcbiAgICAgIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgICAgIHdoaWxlIChpc0RlZihjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgICAgICBpZiAoY2hpbGROb2RlICYmIGNoaWxkTm9kZS5kYXRhKSB7XG4gICAgICAgICAgICAgIGRhdGEgPSBtZXJnZUNsYXNzRGF0YShjaGlsZE5vZGUuZGF0YSwgZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBwYXJlbnROb2RlLnBhcmVudCBub3QgVk5vZGVXaXRoRGF0YVxuICAgICAgd2hpbGUgKGlzRGVmKChwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnQpKSkge1xuICAgICAgICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuZGF0YSkge1xuICAgICAgICAgICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoZGF0YSwgcGFyZW50Tm9kZS5kYXRhKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVuZGVyQ2xhc3MoZGF0YS5zdGF0aWNDbGFzcywgZGF0YS5jbGFzcyk7XG4gIH1cbiAgZnVuY3Rpb24gbWVyZ2VDbGFzc0RhdGEoY2hpbGQsIHBhcmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogY29uY2F0KGNoaWxkLnN0YXRpY0NsYXNzLCBwYXJlbnQuc3RhdGljQ2xhc3MpLFxuICAgICAgICAgIGNsYXNzOiBpc0RlZihjaGlsZC5jbGFzcykgPyBbY2hpbGQuY2xhc3MsIHBhcmVudC5jbGFzc10gOiBwYXJlbnQuY2xhc3NcbiAgICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gcmVuZGVyQ2xhc3Moc3RhdGljQ2xhc3MsIGR5bmFtaWNDbGFzcykge1xuICAgICAgaWYgKGlzRGVmKHN0YXRpY0NsYXNzKSB8fCBpc0RlZihkeW5hbWljQ2xhc3MpKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbmNhdChzdGF0aWNDbGFzcywgc3RyaW5naWZ5Q2xhc3MoZHluYW1pY0NsYXNzKSk7XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuICcnO1xuICB9XG4gIGZ1bmN0aW9uIGNvbmNhdChhLCBiKSB7XG4gICAgICByZXR1cm4gYSA/IChiID8gYSArICcgJyArIGIgOiBhKSA6IGIgfHwgJyc7XG4gIH1cbiAgZnVuY3Rpb24gc3RyaW5naWZ5Q2xhc3ModmFsdWUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBzdHJpbmdpZnlBcnJheSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHN0cmluZ2lmeU9iamVjdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXR1cm4gJyc7XG4gIH1cbiAgZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXkodmFsdWUpIHtcbiAgICAgIHZhciByZXMgPSAnJztcbiAgICAgIHZhciBzdHJpbmdpZmllZDtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGlzRGVmKChzdHJpbmdpZmllZCA9IHN0cmluZ2lmeUNsYXNzKHZhbHVlW2ldKSkpICYmIHN0cmluZ2lmaWVkICE9PSAnJykge1xuICAgICAgICAgICAgICBpZiAocmVzKVxuICAgICAgICAgICAgICAgICAgcmVzICs9ICcgJztcbiAgICAgICAgICAgICAgcmVzICs9IHN0cmluZ2lmaWVkO1xuICAgICAgICAgI
3H1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gIH1cbiAgZnVuY3Rpb24gc3RyaW5naWZ5T2JqZWN0KHZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gJyc7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICBpZiAodmFsdWVba2V5XSkge1xuICAgICAgICAgICAgICBpZiAocmVzKVxuICAgICAgICAgICAgICAgICAgcmVzICs9ICcgJztcbiAgICAgICAgICAgICAgcmVzICs9IGtleTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgdmFyIG5hbWVzcGFjZU1hcCA9IHtcbiAgICAgIHN2ZzogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyxcbiAgICAgIG1hdGg6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJ1xuICB9O1xuICB2YXIgaXNIVE1MVGFnID0gbWFrZU1hcCgnaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsJyArXG4gICAgICAnYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGdyb3VwLG5hdixzZWN0aW9uLCcgK1xuICAgICAgJ2RpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLCcgK1xuICAgICAgJ2EsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSwnICtcbiAgICAgICdzLHNhbXAsc21hbGwsc3BhbixzdHJvbmcsc3ViLHN1cCx0aW1lLHUsdmFyLHdicixhcmVhLGF1ZGlvLG1hcCx0cmFjayx2aWRlbywnICtcbiAgICAgICdlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucywnICtcbiAgICAgICdjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0ciwnICtcbiAgICAgICdidXR0b24sZGF0YWxpc3QsZmllbGRzZXQsZm9ybSxpbnB1dCxsYWJlbCxsZWdlbmQsbWV0ZXIsb3B0Z3JvdXAsb3B0aW9uLCcgK1xuICAgICAgJ291dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsJyArXG4gICAgICAnZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LCcgK1xuICAgICAgJ2NvbnRlbnQsZWxlbWVudCxzaGFkb3csdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3QnKTtcbiAgLy8gdGhpcyBtYXAgaXMgaW50ZW50aW9uYWxseSBzZWxlY3RpdmUsIG9ubHkgY292ZXJpbmcgU1ZHIGVsZW1lbnRzIHRoYXQgbWF5XG4gIC8vIGNvbnRhaW4gY2hpbGQgZWxlbWVudHMuXG4gIHZhciBpc1NWRyA9IG1ha2VNYXAoJ3N2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSwnICtcbiAgICAgICdmb3JlaWdub2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybiwnICtcbiAgICAgICdwb2x5Z29uLHBvbHlsaW5lLHJlY3Qsc3dpdGNoLHN5bWJvbCx0ZXh0LHRleHRwYXRoLHRzcGFuLHVzZSx2aWV3JywgdHJ1ZSk7XG4gIHZhciBpc1ByZVRhZyA9IGZ1bmN0aW9uICh0YWcpIHsgcmV0dXJuIHRhZyA9PT0gJ3ByZSc7IH07XG4gIHZhciBpc1Jlc2VydmVkVGFnID0gZnVuY3Rpb24gKHRhZykge1xuICAgICAgcmV0dXJuIGlzSFRNTFRhZyh0YWcpIHx8IGlzU1ZHKHRhZyk7XG4gIH07XG4gIGZ1bmN0aW9uIGdldFRhZ05hbWVzcGFjZSh0YWcpIHtcbiAgICAgIGlmIChpc1NWRyh0YWcpKSB7XG4gICAgICAgICAgcmV0dXJuICdzdmcnO1xuICAgICAgfVxuICAgICAgLy8gYmFzaWMgc3VwcG9ydCBmb3IgTWF0aE1MXG4gICAgICAvLyBub3RlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBvdGhlciBNYXRoTUwgZWxlbWVudHMgYmVpbmcgY29tcG9uZW50IHJvb3RzXG4gICAgICBpZiAodGFnID09PSAnbWF0aCcpIHtcbiAgICAgICAgICByZXR1cm4gJ21hdGgnO1xuICAgICAgfVxuICB9XG4gIHZhciB1bmtub3duRWxlbWVudENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCh0YWcpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCFpbkJyb3dzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0YWcgPSB0YWcudG9Mb3dlckNhc2UoKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHVua25vd25FbGVtZW50Q2FjaGVbdGFnXTtcbiAgICAgIH1cbiAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICAgIGlmICh0YWcuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjgyMTAzNjQvMTA3MDI0NFxuICAgICAgICAgIHJldHVybiAodW5rbm93bkVsZW1lbnRDYWNoZVt0YWddID1cbiAgICAgICAgICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnQgfHxcbiAgICAgICAgICAgICAgICAgIGVsLmNvbnN0cnVjdG9yID09PSB3aW5kb3cuSFRNTEVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAvSFRNTFVua25vd25FbGVtZW50Ly50ZXN0KGVsLnRvU3RyaW5nKCkpKTtcbiAgICAgIH1cbiAgfVxuICB2YXIgaXNUZXh0SW5wdXRUeXBlID0gbWFrZU1hcCgndGV4dCxudW1iZXIscGFzc3dvcmQsc2VhcmNoLGVtYWlsLHRlbCx1cmwnKTtcblxuICAvKipcbiAgICogUXVlcnkgYW4gZWxlbWVudCBzZWxlY3RvciBpZiBpdCdzIG5vdCBhbiBlbGVtZW50IGFscmVhZHkuXG4gICAqL1xuICBmdW5jdGlvbiBxdWVyeShlbCkge1xuICAgICAgaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2Y
3XIgc2VsZWN0ZWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKTtcbiAgICAgICAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgIHdhcm4kMignQ2Fubm90IGZpbmQgZWxlbWVudDogJyArIGVsKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZWw7XG4gICAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIHZub2RlKSB7XG4gICAgICB2YXIgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgICAgIGlmICh0YWdOYW1lICE9PSAnc2VsZWN0Jykge1xuICAgICAgICAgIHJldHVybiBlbG07XG4gICAgICB9XG4gICAgICAvLyBmYWxzZSBvciBudWxsIHdpbGwgcmVtb3ZlIHRoZSBhdHRyaWJ1dGUgYnV0IHVuZGVmaW5lZCB3aWxsIG5vdFxuICAgICAgaWYgKHZub2RlLmRhdGEgJiZcbiAgICAgICAgICB2bm9kZS5kYXRhLmF0dHJzICYmXG4gICAgICAgICAgdm5vZGUuZGF0YS5hdHRycy5tdWx0aXBsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZWxtLnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnbXVsdGlwbGUnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbG07XG4gIH1cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZSwgdGFnTmFtZSkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VNYXBbbmFtZXNwYWNlXSwgdGFnTmFtZSk7XG4gIH1cbiAgZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUodGV4dCkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpO1xuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQodGV4dCkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodGV4dCk7XG4gIH1cbiAgZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpIHtcbiAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpO1xuICB9XG4gIGZ1bmN0aW9uIHJlbW92ZUNoaWxkKG5vZGUsIGNoaWxkKSB7XG4gICAgICBub2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfVxuICBmdW5jdGlvbiBhcHBlbmRDaGlsZChub2RlLCBjaGlsZCkge1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZChjaGlsZCk7XG4gIH1cbiAgZnVuY3Rpb24gcGFyZW50Tm9kZShub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlO1xuICB9XG4gIGZ1bmN0aW9uIG5leHRTaWJsaW5nKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xuICB9XG4gIGZ1bmN0aW9uIHRhZ05hbWUobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUudGFnTmFtZTtcbiAgfVxuICBmdW5jdGlvbiBzZXRUZXh0Q29udGVudChub2RlLCB0ZXh0KSB7XG4gICAgICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuICBmdW5jdGlvbiBzZXRTdHlsZVNjb3BlKG5vZGUsIHNjb3BlSWQpIHtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKHNjb3BlSWQsICcnKTtcbiAgfVxuXG4gIHZhciBub2RlT3BzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50LFxuICAgIGNyZWF0ZUVsZW1lbnROUzogY3JlYXRlRWxlbWVudE5TLFxuICAgIGNyZWF0ZVRleHROb2RlOiBjcmVhdGVUZXh0Tm9kZSxcbiAgICBjcmVhdGVDb21tZW50OiBjcmVhdGVDb21tZW50LFxuICAgIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICAgIHJlbW92ZUNoaWxkOiByZW1vdmVDaGlsZCxcbiAgICBhcHBlbmRDaGlsZDogYXBwZW5kQ2hpbGQsXG4gICAgcGFyZW50Tm9kZTogcGFyZW50Tm9kZSxcbiAgICBuZXh0U2libGluZzogbmV4dFNpYmxpbmcsXG4gICAgdGFnTmFtZTogdGFnTmFtZSxcbiAgICBzZXRUZXh0Q29udGVudDogc2V0VGV4dENvbnRlbnQsXG4gICAgc2V0U3R5bGVTY29wZTogc2V0U3R5bGVTY29wZVxuICB9KTtcblxuICB2YXIgcmVmID0ge1xuICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoXywgdm5vZGUpIHtcbiAgICAgICAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gICAgICB9LFxuICAgICAgdXBkYXRlOiBmdW5jdGlvbiAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgICAgICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xuICAgICAgICAgICAgICByZWdpc3RlclJlZihvbGRWbm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHJlZ2lzdGVyUmVmKHZub2RlKTtcbiAgICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gKHZub2RlKSB7XG4gICAgICAgICAgcmVnaXN0ZXJSZWYodm5vZGUsIHRydWUpO1xuICAgICAgfVxuICB9O1xuICBmdW5jdGlvbiByZWdpc3RlclJlZih2bm9kZSwgaXNSZW1vdmFsKSB7XG4gICAgICB2Y
3XIgcmVmID0gdm5vZGUuZGF0YS5yZWY7XG4gICAgICBpZiAoIWlzRGVmKHJlZikpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgICAgIHZhciByZWZWYWx1ZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlIHx8IHZub2RlLmVsbTtcbiAgICAgIHZhciB2YWx1ZSA9IGlzUmVtb3ZhbCA/IG51bGwgOiByZWZWYWx1ZTtcbiAgICAgIHZhciAkcmVmc1ZhbHVlID0gaXNSZW1vdmFsID8gdW5kZWZpbmVkIDogcmVmVmFsdWU7XG4gICAgICBpZiAoaXNGdW5jdGlvbihyZWYpKSB7XG4gICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcocmVmLCB2bSwgW3ZhbHVlXSwgdm0sIFwidGVtcGxhdGUgcmVmIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBpc0ZvciA9IHZub2RlLmRhdGEucmVmSW5Gb3I7XG4gICAgICB2YXIgX2lzU3RyaW5nID0gdHlwZW9mIHJlZiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHJlZiA9PT0gJ251bWJlcic7XG4gICAgICB2YXIgX2lzUmVmID0gaXNSZWYocmVmKTtcbiAgICAgIHZhciByZWZzID0gdm0uJHJlZnM7XG4gICAgICBpZiAoX2lzU3RyaW5nIHx8IF9pc1JlZikge1xuICAgICAgICAgIGlmIChpc0Zvcikge1xuICAgICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSBfaXNTdHJpbmcgPyByZWZzW3JlZl0gOiByZWYudmFsdWU7XG4gICAgICAgICAgICAgIGlmIChpc1JlbW92YWwpIHtcbiAgICAgICAgICAgICAgICAgIGlzQXJyYXkoZXhpc3RpbmcpICYmIHJlbW92ZSQyKGV4aXN0aW5nLCByZWZWYWx1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWlzQXJyYXkoZXhpc3RpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1N0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZWZzW3JlZl0gPSBbcmVmVmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZXR1cFJlZih2bSwgcmVmLCByZWZzW3JlZl0pO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmLnZhbHVlID0gW3JlZlZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBlbHNlIGlmICghZXhpc3RpbmcuaW5jbHVkZXMocmVmVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcucHVzaChyZWZWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoX2lzU3RyaW5nKSB7XG4gICAgICAgICAgICAgIGlmIChpc1JlbW92YWwgJiYgcmVmc1tyZWZdICE9PSByZWZWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlZnNbcmVmXSA9ICRyZWZzVmFsdWU7XG4gICAgICAgICAgICAgIHNldFNldHVwUmVmKHZtLCByZWYsIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoX2lzUmVmKSB7XG4gICAgICAgICAgICAgIGlmIChpc1JlbW92YWwgJiYgcmVmLnZhbHVlICE9PSByZWZWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlZi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgd2FybiQyKFwiSW52YWxpZCB0ZW1wbGF0ZSByZWYgdHlwZTogXCIuY29uY2F0KHR5cGVvZiByZWYpKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc2V0U2V0dXBSZWYoX2EsIGtleSwgdmFsKSB7XG4gICAgICB2Y
3XIgX3NldHVwU3RhdGUgPSBfYS5fc2V0dXBTdGF0ZTtcbiAgICAgIGlmIChfc2V0dXBTdGF0ZSAmJiBoYXNPd24oX3NldHVwU3RhdGUsIGtleSkpIHtcbiAgICAgICAgICBpZiAoaXNSZWYoX3NldHVwU3RhdGVba2V5XSkpIHtcbiAgICAgICAgICAgICAgX3NldHVwU3RhdGVba2V5XS52YWx1ZSA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIF9zZXR1cFN0YXRlW2tleV0gPSB2YWw7XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZpcnR1YWwgRE9NIHBhdGNoaW5nIGFsZ29yaXRobSBiYXNlZCBvbiBTbmFiYmRvbSBieVxuICAgKiBTaW1vbiBGcmlpcyBWaW5kdW0gKEBwYWxkZXBpbmQpXG4gICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vcGFsZGVwaW5kL3NuYWJiZG9tL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICpcbiAgICogbW9kaWZpZWQgYnkgRXZhbiBZb3UgKEB5eXg5OTA4MDMpXG4gICAqXG4gICAqIE5vdCB0eXBlLWNoZWNraW5nIHRoaXMgYmVjYXVzZSB0aGlzIGZpbGUgaXMgcGVyZi1jcml0aWNhbCBhbmQgdGhlIGNvc3RcbiAgICogb2YgbWFraW5nIGZsb3cgdW5kZXJzdGFuZCBpdCBpcyBub3Qgd29ydGggaXQuXG4gICAqL1xuICB2YXIgZW1wdHlOb2RlID0gbmV3IFZOb2RlKCcnLCB7fSwgW10pO1xuICB2YXIgaG9va3MgPSBbJ2NyZWF0ZScsICdhY3RpdmF0ZScsICd1cGRhdGUnLCAncmVtb3ZlJywgJ2Rlc3Ryb3knXTtcbiAgZnVuY3Rpb24gc2FtZVZub2RlKGEsIGIpIHtcbiAgICAgIHJldHVybiAoYS5rZXkgPT09IGIua2V5ICYmXG4gICAgICAgICAgYS5hc3luY0ZhY3RvcnkgPT09IGIuYXN5bmNGYWN0b3J5ICYmXG4gICAgICAgICAgKChhLnRhZyA9PT0gYi50YWcgJiZcbiAgICAgICAgICAgICAgYS5pc0NvbW1lbnQgPT09IGIuaXNDb21tZW50ICYmXG4gICAgICAgICAgICAgIGlzRGVmKGEuZGF0YSkgPT09IGlzRGVmKGIuZGF0YSkgJiZcbiAgICAgICAgICAgICAgc2FtZUlucHV0VHlwZShhLCBiKSkgfHxcbiAgICAgICAgICAgICAgKGlzVHJ1ZShhLmlzQXN5bmNQbGFjZWhvbGRlcikgJiYgaXNVbmRlZihiLmFzeW5jRmFjdG9yeS5lcnJvcikpKSk7XG4gIH1cbiAgZnVuY3Rpb24gc2FtZUlucHV0VHlwZShhLCBiKSB7XG4gICAgICBpZiAoYS50YWcgIT09ICdpbnB1dCcpXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB2Y
3XIgaTtcbiAgICAgIHZhciB0eXBlQSA9IGlzRGVmKChpID0gYS5kYXRhKSkgJiYgaXNEZWYoKGkgPSBpLmF0dHJzKSkgJiYgaS50eXBlO1xuICAgICAgdmFyIHR5cGVCID0gaXNEZWYoKGkgPSBiLmRhdGEpKSAmJiBpc0RlZigoaSA9IGkuYXR0cnMpKSAmJiBpLnR5cGU7XG4gICAgICByZXR1cm4gdHlwZUEgPT09IHR5cGVCIHx8IChpc1RleHRJbnB1dFR5cGUodHlwZUEpICYmIGlzVGV4dElucHV0VHlwZSh0eXBlQikpO1xuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZUtleVRvT2xkSWR4KGNoaWxkcmVuLCBiZWdpbklkeCwgZW5kSWR4KSB7XG4gICAgICB2YXIgaSwga2V5O1xuICAgICAgdmFyIG1hcCA9IHt9O1xuICAgICAgZm9yIChpID0gYmVnaW5JZHg7IGkgPD0gZW5kSWR4OyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBjaGlsZHJlbltpXS5rZXk7XG4gICAgICAgICAgaWYgKGlzRGVmKGtleSkpXG4gICAgICAgICAgICAgIG1hcFtrZXldID0gaTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXA7XG4gIH1cbiAgZnVuY3Rpb24gY3JlYXRlUGF0Y2hGdW5jdGlvbihiYWNrZW5kKSB7XG4gICAgICB2YXIgaSwgajtcbiAgICAgIHZhciBjYnMgPSB7fTtcbiAgICAgIHZhciBtb2R1bGVzID0gYmFja2VuZC5tb2R1bGVzLCBub2RlT3BzID0gYmFja2VuZC5ub2RlT3BzO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY2JzW2hvb2tzW2ldXSA9IFtdO1xuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBtb2R1bGVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICAgIGlmIChpc0RlZihtb2R1bGVzW2pdW2hvb2tzW2ldXSkpIHtcbiAgICAgICAgICAgICAgICAgIGNic1tob29rc1tpXV0ucHVzaChtb2R1bGVzW2pdW2hvb2tzW2ldXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBlbXB0eU5vZGVBdChlbG0pIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFZOb2RlKG5vZGVPcHMudGFnTmFtZShlbG0pLnRvTG93ZXJDYXNlKCksIHt9LCBbXSwgdW5kZWZpbmVkLCBlbG0pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gY3JlYXRlUm1DYihjaGlsZEVsbSwgbGlzdGVuZXJzKSB7XG4gICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgICAgICAgICBpZiAoLS1yZW1vdmUubGlzdGVuZXJzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICByZW1vdmVOb2RlKGNoaWxkRWxtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZW1vdmUubGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgICAgICAgIHJldHVybiByZW1vdmU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiByZW1vdmVOb2RlKGVsKSB7XG4gICAgICAgICAgdmFyIHBhcmVudCA9IG5vZGVPcHMucGFyZW50Tm9kZShlbCk7XG4gICAgICAgICAgLy8gZWxlbWVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBkdWUgdG8gdi1odG1sIC8gdi10ZXh0XG4gICAgICAgICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgbm9kZU9wcy5yZW1vdmVDaGlsZChwYXJlbnQsIGVsKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBpc1Vua25vd25FbGVtZW50KHZub2RlLCBpblZQcmUpIHtcbiAgICAgICAgICByZXR1cm4gKCFpblZQcmUgJiZcbiAgICAgICAgICAgICAgIXZub2RlLm5zICYmXG4gICAgICAgICAgICAgICEoY29uZmlnLmlnbm9yZWRFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMuc29tZShmdW5jdGlvbiAoaWdub3JlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzUmVnRXhwKGlnbm9yZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpZ25vcmUudGVzdCh2bm9kZS50YWcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogaWdub3JlID09PSB2bm9kZS50YWc7XG4gICAgICAgICAgICAgICAgICB9KSkgJiZcbiAgICAgICAgICAgICAgY29uZmlnLmlzVW5rbm93bkVsZW1lbnQodm5vZGUudGFnKSk7XG4gICAgICB9XG4gICAgICB2Y
3XIgY3JlYXRpbmdFbG1JblZQcmUgPSAwO1xuICAgICAgZnVuY3Rpb24gY3JlYXRlRWxtKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtLCBuZXN0ZWQsIG93bmVyQXJyYXksIGluZGV4KSB7XG4gICAgICAgICAgaWYgKGlzRGVmKHZub2RlLmVsbSkgJiYgaXNEZWYob3duZXJBcnJheSkpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyB2bm9kZSB3YXMgdXNlZCBpbiBhIHByZXZpb3VzIHJlbmRlciFcbiAgICAgICAgICAgICAgLy8gbm93IGl0J3MgdXNlZCBhcyBhIG5ldyBub2RlLCBvdmVyd3JpdGluZyBpdHMgZWxtIHdvdWxkIGNhdXNlXG4gICAgICAgICAgICAgIC8vIHBvdGVudGlhbCBwYXRjaCBlcnJvcnMgZG93biB0aGUgcm9hZCB3aGVuIGl0J3MgdXNlZCBhcyBhbiBpbnNlcnRpb25cbiAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIG5vZGUuIEluc3RlYWQsIHdlIGNsb25lIHRoZSBub2RlIG9uLWRlbWFuZCBiZWZvcmUgY3JlYXRpbmdcbiAgICAgICAgICAgICAgLy8gYXNzb2NpYXRlZCBET00gZWxlbWVudCBmb3IgaXQuXG4gICAgICAgICAgICAgIHZub2RlID0gb3duZXJBcnJheVtpbmRleF0gPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdm5vZGUuaXNSb290SW5zZXJ0ID0gIW5lc3RlZDsgLy8gZm9yIHRyYW5zaXRpb24gZW50ZXIgY2hlY2tcbiAgICAgICAgICBpZiAoY3JlYXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgICAgICB2Y
3XIgY2hpbGRyZW4gPSB2bm9kZS5jaGlsZHJlbjtcbiAgICAgICAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgICAgICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUrKztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChpc1Vua25vd25FbGVtZW50KHZub2RlLCBjcmVhdGluZ0VsbUluVlByZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuJDIoJ1Vua25vd24gY3VzdG9tIGVsZW1lbnQ6IDwnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJz4gLSBkaWQgeW91ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAncmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBjb3JyZWN0bHk/IEZvciByZWN1cnNpdmUgY29tcG9uZW50cywgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdtYWtlIHN1cmUgdG8gcHJvdmlkZSB0aGUgXCJuYW1lXCIgb3B0aW9uLicsIHZub2RlLmNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZub2RlLmVsbSA9IHZub2RlLm5zXG4gICAgICAgICAgICAgICAgICA/IG5vZGVPcHMuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5zLCB0YWcpXG4gICAgICAgICAgICAgICAgICA6IG5vZGVPcHMuY3JlYXRlRWxlbWVudCh0YWcsIHZub2RlKTtcbiAgICAgICAgICAgICAgc2V0U2NvcGUodm5vZGUpO1xuICAgICAgICAgICAgICBjcmVhdGVDaGlsZHJlbih2bm9kZSwgY2hpbGRyZW4sIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnByZSkge1xuICAgICAgICAgICAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUtLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSkge1xuICAgICAgICAgICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZUNvbW1lbnQodm5vZGUudGV4dCk7XG4gICAgICAgICAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHZub2RlLmVsbSA9IG5vZGVPcHMuY3JlYXRlVGV4dE5vZGUodm5vZGUudGV4dCk7XG4gICAgICAgICAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjcmVhdGVDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICAgICAgICB2Y
3XIgaSA9IHZub2RlLmRhdGE7XG4gICAgICAgICAgaWYgKGlzRGVmKGkpKSB7XG4gICAgICAgICAgICAgIHZhciBpc1JlYWN0aXZhdGVkID0gaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGkua2VlcEFsaXZlO1xuICAgICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBpLmhvb2spKSAmJiBpc0RlZigoaSA9IGkuaW5pdCkpKSB7XG4gICAgICAgICAgICAgICAgICBpKHZub2RlLCBmYWxzZSAvKiBoeWRyYXRpbmcgKi8pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGFmdGVyIGNhbGxpbmcgdGhlIGluaXQgaG9vaywgaWYgdGhlIHZub2RlIGlzIGEgY2hpbGQgY29tcG9uZW50XG4gICAgICAgICAgICAgIC8vIGl0IHNob3VsZCd2ZSBjcmVhdGVkIGEgY2hpbGQgaW5zdGFuY2UgYW5kIG1vdW50ZWQgaXQuIHRoZSBjaGlsZFxuICAgICAgICAgICAgICAvLyBjb21wb25lbnQgYWxzbyBoYXMgc2V0IHRoZSBwbGFjZWhvbGRlciB2bm9kZSdzIGVsbS5cbiAgICAgICAgICAgICAgLy8gaW4gdGhhdCBjYXNlIHdlIGNhbiBqdXN0IHJldHVybiB0aGUgZWxlbWVudCBhbmQgYmUgZG9uZS5cbiAgICAgICAgICAgICAgaWYgKGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgICAgaW5pdENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgICAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgICAgICAgICAgICAgICAgIGlmIChpc1RydWUoaXNSZWFjdGl2YXRlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdGl2YXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gaW5pdENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgICAgICAgaWYgKGlzRGVmKHZub2RlLmRhdGEucGVuZGluZ0luc2VydCkpIHtcbiAgICAgICAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2guYXBwbHkoaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpO1xuICAgICAgICAgICAgICB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2bm9kZS5lbG0gPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZS4kZWw7XG4gICAgICAgICAgaWYgKGlzUGF0Y2hhYmxlKHZub2RlKSkge1xuICAgICAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgICAgc2V0U2NvcGUodm5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gZW1wdHkgY29tcG9uZW50IHJvb3QuXG4gICAgICAgICAgICAgIC8vIHNraXAgYWxsIGVsZW1lbnQtcmVsYXRlZCBtb2R1bGVzIGV4Y2VwdCBmb3IgcmVmICgjMzQ1NSlcbiAgICAgICAgICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdG8gaW52b2tlIHRoZSBpbnNlcnQgaG9va1xuICAgICAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcmVhY3RpdmF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgICAgICAgIHZhciBpO1xuICAgICAgICAgIC8vIGhhY2sgZm9yICM0MzM5OiBhIHJlYWN0aXZhdGVkIGNvbXBvbmVudCB3aXRoIGlubmVyIHRyYW5zaXRpb25cbiAgICAgICAgICAvLyBkb2VzIG5vdCB0cmlnZ2VyIGJlY2F1c2UgdGhlIGlubmVyIG5vZGUncyBjcmVhdGVkIGhvb2tzIGFyZSBub3QgY2FsbGVkXG4gICAgICAgICAgLy8gYWdhaW4uIEl0J3Mgbm90IGlkZWFsIHRvIGludm9sdmUgbW9kdWxlLXNwZWNpZmljIGxvZ2ljIGluIGhlcmUgYnV0XG4gICAgICAgICAgLy8gdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgYmV0dGVyIHdheSB0byBkbyBpdC5cbiAgICAgICAgICB2Y
3XIgaW5uZXJOb2RlID0gdm5vZGU7XG4gICAgICAgICAgd2hpbGUgKGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICAgICAgICBpbm5lck5vZGUgPSBpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBpbm5lck5vZGUuZGF0YSkpICYmIGlzRGVmKChpID0gaS50cmFuc2l0aW9uKSkpIHtcbiAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuYWN0aXZhdGUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYnMuYWN0aXZhdGVbaV0oZW1wdHlOb2RlLCBpbm5lck5vZGUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2goaW5uZXJOb2RlKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHVubGlrZSBhIG5ld2x5IGNyZWF0ZWQgY29tcG9uZW50LFxuICAgICAgICAgIC8vIGEgcmVhY3RpdmF0ZWQga2VlcC1hbGl2ZSBjb21wb25lbnQgZG9lc24ndCBpbnNlcnQgaXRzZWxmXG4gICAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gaW5zZXJ0KHBhcmVudCwgZWxtLCByZWYpIHtcbiAgICAgICAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgICAgICAgICBpZiAoaXNEZWYocmVmKSkge1xuICAgICAgICAgICAgICAgICAgaWYgKG5vZGVPcHMucGFyZW50Tm9kZShyZWYpID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnQsIGVsbSwgcmVmKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG5vZGVPcHMuYXBwZW5kQ2hpbGQocGFyZW50LCBlbG0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKHZhciBpXzEgPSAwOyBpXzEgPCBjaGlsZHJlbi5sZW5ndGg7ICsraV8xKSB7XG4gICAgICAgICAgICAgICAgICBjcmVhdGVFbG0oY2hpbGRyZW5baV8xXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5lbG0sIG51bGwsIHRydWUsIGNoaWxkcmVuLCBpXzEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGlzUHJpbWl0aXZlKHZub2RlLnRleHQpKSB7XG4gICAgICAgICAgICAgIG5vZGVPcHMuYXBwZW5kQ2hpbGQodm5vZGUuZWxtLCBub2RlT3BzLmNyZWF0ZVRleHROb2RlKFN0cmluZyh2bm9kZS50ZXh0KSkpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGlzUGF0Y2hhYmxlKHZub2RlKSB7XG4gICAgICAgICAgd2hpbGUgKHZub2Rl
3LmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgICAgICAgIHZub2RlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaXNEZWYodm5vZGUudGFnKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICAgICAgICBmb3IgKHZhciBpXzIgPSAwOyBpXzIgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpXzIpIHtcbiAgICAgICAgICAgICAgY2JzLmNyZWF0ZVtpXzJdKGVtcHR5Tm9kZSwgdm5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpID0gdm5vZGUuZGF0YS5ob29rOyAvLyBSZXVzZSB2YXJpYWJsZVxuICAgICAgICAgIGlmIChpc0RlZihpKSkge1xuICAgICAgICAgICAgICBpZiAoaXNEZWYoaS5jcmVhdGUpKVxuICAgICAgICAgICAgICAgICAgaS5jcmVhdGUoZW1wdHlOb2RlLCB2bm9kZSk7XG4gICAgICAgICAgICAgIGlmIChpc0RlZihpLmluc2VydCkpXG4gICAgICAgICAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gc2V0IHNjb3BlIGlkIGF0dHJpYnV0ZSBmb3Igc2NvcGVkIENTUy5cbiAgICAgIC8vIHRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYSBzcGVjaWFsIGNhc2UgdG8gYXZvaWQgdGhlIG92ZXJoZWFkXG4gICAgICAvLyBvZiBnb2luZyB0aHJvdWdoIHRoZSBub3JtYWwgYXR0cmlidXRlIHBhdGNoaW5nIHByb2Nlc3MuXG4gICAgICBmdW5jdGlvbiBzZXRTY29wZSh2bm9kZSkge1xuICAgICAgICAgIHZhciBpO1xuICAgICAgICAgIGlmIChpc0RlZigoaSA9IHZub2RlLmZuU2NvcGVJZCkpKSB7XG4gICAgICAgICAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGU7XG4gICAgICAgICAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICAgICAgICAgICAgaWYgKGlzRGVmKChpID0gYW5jZXN0b3IuY29udGV4dCkpICYmIGlzRGVmKChpID0gaS4kb3B0aW9ucy5fc2NvcGVJZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBmb3Igc2xvdCBjb250ZW50IHRoZXkgc2hvdWxkIGFsc28gZ2V0IHRoZSBzY29wZUlkIGZyb20gdGhlIGhvc3QgaW5zdGFuY2UuXG4gICAgICAgICAgaWYgKGlzRGVmKChpID0gYWN0aXZlSW5zdGFuY2UpKSAmJlxuICAgICAgICAgICAgICBpICE9PSB2bm9kZS5jb250ZXh0ICYmXG4gICAgICAgICAgICAgIGkgIT09IHZub2RlLmZuQ29udGV4dCAmJlxuICAgICAgICAgICAgICBpc0RlZigoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpKSkge1xuICAgICAgICAgICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBhZGRWbm9kZXMocGFyZW50RWxtLCByZWZFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgICAgICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAgICAgICAgICBjcmVhdGVFbG0odm5vZGVzW3N0YXJ0SWR4XSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSwgZmFsc2UsIHZub2Rlcywgc3RhcnRJZHgpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGludm9rZURlc3Ryb3lIb29rKHZub2RlKSB7XG4gICAgICAgICAgdmFyIGksIGo7XG4gICAgICAgICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgICAgICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBkYXRhLmhvb2spKSAmJiBpc0RlZigoaSA9IGkuZGVzdHJveSkpKVxuICAgICAgICAgICAgICAgICAgaSh2bm9kZSk7XG4gICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuZGVzdHJveS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICAgIGNicy5kZXN0cm95W2ldKHZub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzRGVmKChpID0gdm5vZGUuY2hpbGRyZW4pKSkge1xuICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKHZub2RlLmNoaWxkcmVuW2pdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHJlbW92ZVZub2Rlcyh2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgpIHtcbiAgICAgICAgICBmb3IgKDsgc3RhcnRJZHggPD0gZW5kSWR4OyArK3N0YXJ0SWR4KSB7XG4gICAgICAgICAgICAgIHZhciBjaCA9IHZub2Rlc1tzdGFydElkeF07XG4gICAgICAgICAgICAgIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChpc0RlZihjaC50YWcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgaW52b2tlRGVzdHJveUhvb2soY2gpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVGV4dCBub2RlXG4gICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShjaC5lbG0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayh2bm9kZSwgcm0pIHtcbiAgICAgICAgICBpZiAoaXNEZWYocm0pIHx8IGlzRGVmKHZub2RlLmRhdGEpKSB7XG4gICAgICAgICAgICAgIHZhciBpXzM7XG4gICAgICAgICAgICAgI
3HZhciBsaXN0ZW5lcnMgPSBjYnMucmVtb3ZlLmxlbmd0aCArIDE7XG4gICAgICAgICAgICAgIGlmIChpc0RlZihybSkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgYSByZWN1cnNpdmVseSBwYXNzZWQgZG93biBybSBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxpc3RlbmVycyBjb3VudFxuICAgICAgICAgICAgICAgICAgcm0ubGlzdGVuZXJzICs9IGxpc3RlbmVycztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIGRpcmVjdGx5IHJlbW92aW5nXG4gICAgICAgICAgICAgICAgICBybSA9IGNyZWF0ZVJtQ2Iodm5vZGUuZWxtLCBsaXN0ZW5lcnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGludm9rZSBob29rcyBvbiBjaGlsZCBjb21wb25lbnQgcm9vdCBub2RlXG4gICAgICAgICAgICAgIGlmIChpc0RlZigoaV8zID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSAmJlxuICAgICAgICAgICAgICAgICAgaXNEZWYoKGlfMyA9IGlfMy5fdm5vZGUpKSAmJlxuICAgICAgICAgICAgICAgICAgaXNEZWYoaV8zLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKGlfMywgcm0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZvciAoaV8zID0gMDsgaV8zIDwgY2JzLnJlbW92ZS5sZW5ndGg7ICsraV8zKSB7XG4gICAgICAgICAgICAgICAgICBjYnMucmVtb3ZlW2lfM10odm5vZGUsIHJtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXNEZWYoKGlfMyA9IHZub2RlLmRhdGEuaG9vaykpICYmIGlzRGVmKChpXzMgPSBpXzMucmVtb3ZlKSkpIHtcbiAgICAgICAgICAgICAgICAgIGlfMyh2bm9kZSwgcm0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcm0oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgcmVtb3ZlTm9kZSh2bm9kZS5lbG0pO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUNoaWxkcmVuKHBhcmVudEVsbSwgb2xkQ2gsIG5ld0NoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpIHtcbiAgICAgICAgICB2Y
3XIgb2xkU3RhcnRJZHggPSAwO1xuICAgICAgICAgIHZhciBuZXdTdGFydElkeCA9IDA7XG4gICAgICAgICAgdmFyIG9sZEVuZElkeCA9IG9sZENoLmxlbmd0aCAtIDE7XG4gICAgICAgICAgdmFyIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFswXTtcbiAgICAgICAgICB2YXIgb2xkRW5kVm5vZGUgPSBvbGRDaFtvbGRFbmRJZHhdO1xuICAgICAgICAgIHZhciBuZXdFbmRJZHggPSBuZXdDaC5sZW5ndGggLSAxO1xuICAgICAgICAgIHZhciBuZXdTdGFydFZub2RlID0gbmV3Q2hbMF07XG4gICAgICAgICAgdmFyIG5ld0VuZFZub2RlID0gbmV3Q2hbbmV3RW5kSWR4XTtcbiAgICAgICAgICB2YXIgb2xkS2V5VG9JZHgsIGlkeEluT2xkLCB2bm9kZVRvTW92ZSwgcmVmRWxtO1xuICAgICAgICAgIC8vIHJlbW92ZU9ubHkgaXMgYSBzcGVjaWFsIGZsYWcgdXNlZCBvbmx5IGJ5IDx0cmFuc2l0aW9uLWdyb3VwPlxuICAgICAgICAgIC8vIHRvIGVuc3VyZSByZW1vdmVkIGVsZW1lbnRzIHN0YXkgaW4gY29ycmVjdCByZWxhdGl2ZSBwb3NpdGlvbnNcbiAgICAgICAgICAvLyBkdXJpbmcgbGVhdmluZyB0cmFuc2l0aW9uc1xuICAgICAgICAgIHZhciBjYW5Nb3ZlID0gIXJlbW92ZU9ubHk7XG4gICAgICAgICAge1xuICAgICAgICAgICAgICBjaGVja0R1cGxpY2F0ZUtleXMobmV3Q2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB3aGlsZSAob2xkU3RhcnRJZHggPD0gb2xkRW5kSWR4ICYmIG5ld1N0YXJ0SWR4IDw9IG5ld0VuZElkeCkge1xuICAgICAgICAgICAgICBpZiAoaXNVbmRlZihvbGRTdGFydFZub2RlKSkge1xuICAgICAgICAgICAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdOyAvLyBWbm9kZSBoYXMgYmVlbiBtb3ZlZCBsZWZ0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZiAoaXNVbmRlZihvbGRFbmRWbm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICAgICAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07XG4gICAgICAgICAgICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZiAoc2FtZVZub2RlKG9sZEVuZFZub2RlLCBuZXdFbmRWbm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdFbmRJZHgpO1xuICAgICAgICAgICAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgICAgICAgICAgICBuZXdFbmRWbm9kZSA9IG5ld0NoWy0tbmV3RW5kSWR4XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBWbm9kZSBtb3ZlZCByaWdodFxuICAgICAgICAgICAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3RW5kSWR4KTtcbiAgICAgICAgICAgICAgICAgIGNhbk1vdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBub2RlT3BzLm5leHRTaWJsaW5nKG9sZEVuZFZub2RlLmVsbSkpO1xuICAgICAgICAgICAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICAgICAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZiAoc2FtZVZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICAgICAgICAgICAgLy8gVm5vZGUgbW92ZWQgbGVmdFxuICAgICAgICAgICAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgICAgICAgY2FuTW92ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkRW5kVm5vZGUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKG9sZEtleVRvSWR4KSlcbiAgICAgICAgICAgICAgICAgICAgICBvbGRLZXlUb0lkeCA9IGNyZWF0ZUtleVRvT2xkSWR4KG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcbiAgICAgICAgICAgICAgICAgIGlkeEluT2xkID0gaXNEZWYobmV3U3RhcnRWbm9kZS5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgPyBvbGRLZXlUb0lkeFtuZXdTdGFydFZub2RlLmtleV1cbiAgICAgICAgICAgICAgICAgICAgICA6IGZpbmRJZHhJbk9sZChuZXdTdGFydFZub2RlLCBvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZihpZHhJbk9sZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBOZXcgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdm5vZGVUb01vdmUgPSBvbGRDaFtpZHhJbk9sZF07XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNhbWVWbm9kZSh2bm9kZVRvTW92ZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hWbm9kZSh2bm9kZVRvTW92ZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRDaFtpZHhJbk9sZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbk1vdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgdm5vZGVUb01vdmUuZWxtLCBvbGRTdGFydFZub2Rl
3LmVsbSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW1lIGtleSBidXQgZGlmZmVyZW50IGVsZW1lbnQuIHRyZWF0IGFzIG5ldyBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2xkU3RhcnRJZHggPiBvbGRFbmRJZHgpIHtcbiAgICAgICAgICAgICAgcmVmRWxtID0gaXNVbmRlZihuZXdDaFtuZXdFbmRJZHggKyAxXSkgPyBudWxsIDogbmV3Q2hbbmV3RW5kSWR4ICsgMV0uZWxtO1xuICAgICAgICAgICAgICBhZGRWbm9kZXMocGFyZW50RWxtLCByZWZFbG0sIG5ld0NoLCBuZXdTdGFydElkeCwgbmV3RW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChuZXdTdGFydElkeCA+IG5ld0VuZElkeCkge1xuICAgICAgICAgICAgICByZW1vdmVWbm9kZXMob2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNoZWNrRHVwbGljYXRlS2V5cyhjaGlsZHJlbikge1xuICAgICAgICAgIHZhciBzZWVuS2V5cyA9IHt9O1xuICAgICAgICAgIGZvciAodmFyIGlfNCA9IDA7IGlfNCA8IGNoaWxkcmVuLmxlbmd0aDsgaV80KyspIHtcbiAgICAgICAgICAgICAgdmFyIHZub2RlID0gY2hpbGRyZW5baV80XTtcbiAgICAgICAgICAgICAgdmFyIGtleSA9IHZub2RlLmtleTtcbiAgICAgICAgICAgICAgaWYgKGlzRGVmKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChzZWVuS2V5c1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiRHVwbGljYXRlIGtleXMgZGV0ZWN0ZWQ6ICdcIi5jb25jYXQoa2V5LCBcIicuIFRoaXMgbWF5IGNhdXNlIGFuIHVwZGF0ZSBlcnJvci5cIiksIHZub2RlLmNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2VlbktleXNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBmaW5kSWR4SW5PbGQobm9kZSwgb2xkQ2gsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpXzUgPSBzdGFydDsgaV81IDwgZW5kOyBpXzUrKykge1xuICAgICAgICAgICAgICB2Y
3XIgYyA9IG9sZENoW2lfNV07XG4gICAgICAgICAgICAgIGlmIChpc0RlZihjKSAmJiBzYW1lVm5vZGUobm9kZSwgYykpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaV81O1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBhdGNoVm5vZGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG93bmVyQXJyYXksIGluZGV4LCByZW1vdmVPbmx5KSB7XG4gICAgICAgICAgaWYgKG9sZFZub2RlID09PSB2bm9kZSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0RlZih2bm9kZS5lbG0pICYmIGlzRGVmKG93bmVyQXJyYXkpKSB7XG4gICAgICAgICAgICAgIC8vIGNsb25lIHJldXNlZCB2bm9kZVxuICAgICAgICAgICAgICB2bm9kZSA9IG93bmVyQXJyYXlbaW5kZXhdID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBlbG0gPSAodm5vZGUuZWxtID0gb2xkVm5vZGUuZWxtKTtcbiAgICAgICAgICBpZiAoaXNUcnVlKG9sZFZub2RlLmlzQXN5bmNQbGFjZWhvbGRlcikpIHtcbiAgICAgICAgICAgICAgaWYgKGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGUob2xkVm5vZGUuZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHZub2RlLmlzQXN5bmNQbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyByZXVzZSBlbGVtZW50IGZvciBzdGF0aWMgdHJlZXMuXG4gICAgICAgICAgLy8gbm90ZSB3ZSBvbmx5IGRvIHRoaXMgaWYgdGhlIHZub2RlIGlzIGNsb25lZCAtXG4gICAgICAgICAgLy8gaWYgdGhlIG5ldyBub2RlIGlzIG5vdCBjbG9uZWQgaXQgbWVhbnMgdGhlIHJlbmRlciBmdW5jdGlvbnMgaGF2ZSBiZWVuXG4gICAgICAgICAgLy8gcmVzZXQgYnkgdGhlIGhvdC1yZWxvYWQtYXBpIGFuZCB3ZSBuZWVkIHRvIGRvIGEgcHJvcGVyIHJlLXJlbmRlci5cbiAgICAgICAgICBpZiAoaXNUcnVlKHZub2RlLmlzU3RhdGljKSAmJlxuICAgICAgICAgICAgICBpc1RydWUob2xkVm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICAgICAgICAgIHZub2RlLmtleSA9PT0gb2xkVm5vZGUua2V5ICYmXG4gICAgICAgICAgICAgIChpc1RydWUodm5vZGUuaXNDbG9uZWQpIHx8IGlzVHJ1ZSh2bm9kZS5pc09uY2UpKSkge1xuICAgICAgICAgICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IG9sZFZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBpO1xuICAgICAgICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgICAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoKGkgPSBkYXRhLmhvb2spKSAmJiBpc0RlZigoaSA9IGkucHJlcGF0Y2gpKSkge1xuICAgICAgICAgICAgICBpKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBvbGRDaCA9IG9sZFZub2RlLmNoaWxkcmVuO1xuICAgICAgICAgIHZhciBjaCA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNicy51cGRhdGUubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICAgICAgICBjYnMudXBkYXRlW2ldKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGRhdGEuaG9vaykpICYmIGlzRGVmKChpID0gaS51cGRhdGUpKSlcbiAgICAgICAgICAgICAgICAgIGkob2xkVm5vZGUsIHZub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzVW5kZWYodm5vZGUudGV4dCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzRGVmKG9sZENoKSAmJiBpc0RlZihjaCkpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChvbGRDaCAhPT0gY2gpXG4gICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ2hpbGRyZW4oZWxtLCBvbGRDaCwgY2gsIGluc2VydGVkVm5vZGVRdWV1ZSwgcmVtb3ZlT25seSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKGNoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChpc0RlZihvbGRWbm9kZS50ZXh0KSlcbiAgICAgICAgICAgICAgICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgICAgICAgICAgICAgYWRkVm5vZGVzKGVsbSwgbnVsbCwgY2gsIDAsIGNoLmxlbmd0aCAtIDEsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZiAoaXNEZWYob2xkQ2gpKSB7XG4gICAgICAgICAgICAgICAgICByZW1vdmVWbm9kZXMob2xkQ2gsIDAsIG9sZENoLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSB7XG4gICAgICAgICAgICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKG9sZFZub2RlLnRleHQgIT09IHZub2RlLnRleHQpIHtcbiAgICAgICAgICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sIHZub2Rl
3LnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzRGVmKChpID0gZGF0YS5ob29rKSkgJiYgaXNEZWYoKGkgPSBpLnBvc3RwYXRjaCkpKVxuICAgICAgICAgICAgICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGludm9rZUluc2VydEhvb2sodm5vZGUsIHF1ZXVlLCBpbml0aWFsKSB7XG4gICAgICAgICAgLy8gZGVsYXkgaW5zZXJ0IGhvb2tzIGZvciBjb21wb25lbnQgcm9vdCBub2RlcywgaW52b2tlIHRoZW0gYWZ0ZXIgdGhlXG4gICAgICAgICAgLy8gZWxlbWVudCBpcyByZWFsbHkgaW5zZXJ0ZWRcbiAgICAgICAgICBpZiAoaXNUcnVlKGluaXRpYWwpICYmIGlzRGVmKHZub2RlLnBhcmVudCkpIHtcbiAgICAgICAgICAgICAgdm5vZGUucGFyZW50LmRhdGEucGVuZGluZ0luc2VydCA9IHF1ZXVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaV82ID0gMDsgaV82IDwgcXVldWUubGVuZ3RoOyArK2lfNikge1xuICAgICAgICAgICAgICAgICAgcXVldWVbaV82XS5kYXRhLmhvb2suaW5zZXJ0KHF1ZXVlW2lfNl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGh5ZHJhdGlvbkJhaWxlZCA9IGZhbHNlO1xuICAgICAgLy8gbGlzdCBvZiBtb2R1bGVzIHRoYXQgY2FuIHNraXAgY3JlYXRlIGhvb2sgZHVyaW5nIGh5ZHJhdGlvbiBiZWNhdXNlIHRoZXlcbiAgICAgIC8vIGFyZSBhbHJlYWR5IHJlbmRlcmVkIG9uIHRoZSBjbGllbnQgb3IgaGFzIG5vIG5lZWQgZm9yIGluaXRpYWxpemF0aW9uXG4gICAgICAvLyBOb3RlOiBzdHlsZSBpcyBleGNsdWRlZCBiZWNhdXNlIGl0IHJlbGllcyBvbiBpbml0aWFsIGNsb25lIGZvciBmdXR1cmVcbiAgICAgIC8vIGRlZXAgdXBkYXRlcyAoIzcwNjMpLlxuICAgICAgdmFyIGlzUmVuZGVyZWRNb2R1bGUgPSBtYWtlTWFwKCdhdHRycyxjbGFzcyxzdGF0aWNDbGFzcyxzdGF0aWNTdHlsZSxrZXknKTtcbiAgICAgIC8vIE5vdGU6IHRoaXMgaXMgYSBicm93c2VyLW9ubHkgZnVuY3Rpb24gc28gd2UgY2FuIGFzc3VtZSBlbG1zIGFyZSBET00gbm9kZXMuXG4gICAgICBmdW5jdGlvbiBoeWRyYXRlKGVsbSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgaW5WUHJlKSB7XG4gICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgdmFyIHRhZyA9IHZub2RlLnRhZywgZGF0YSA9IHZub2RlLmRhdGEsIGNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47XG4gICAgICAgICAgaW5WUHJlID0gaW5WUHJlIHx8IChkYXRhICYmIGRhdGEucHJlKTtcbiAgICAgICAgICB2bm9kZS5lbG0gPSBlbG07XG4gICAgICAgICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpICYmIGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeSkpIHtcbiAgICAgICAgICAgICAgdm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGFzc2VydCBub2RlIG1hdGNoXG4gICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoIWFzc2VydE5vZGVNYXRjaChlbG0sIHZub2Rl
3LCBpblZQcmUpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGRhdGEuaG9vaykpICYmIGlzRGVmKChpID0gaS5pbml0KSkpXG4gICAgICAgICAgICAgICAgICBpKHZub2RlLCB0cnVlIC8qIGh5ZHJhdGluZyAqLyk7XG4gICAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIGNoaWxkIGNvbXBvbmVudC4gaXQgc2hvdWxkIGhhdmUgaHlkcmF0ZWQgaXRzIG93biB0cmVlLlxuICAgICAgICAgICAgICAgICAgaW5pdENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICAgICAgICAgIGlmIChpc0RlZihjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICAgIC8vIGVtcHR5IGVsZW1lbnQsIGFsbG93IGNsaWVudCB0byBwaWNrIHVwIGFuZCBwb3B1bGF0ZSBjaGlsZHJlblxuICAgICAgICAgICAgICAgICAgaWYgKCFlbG0uaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gdi1odG1sIGFuZCBkb21Qcm9wczogaW5uZXJIVE1MXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVmKChpID0gZGF0YSkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGVmKChpID0gaS5kb21Qcm9wcykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGVmKChpID0gaS5pbm5lckhUTUwpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPT0gZWxtLmlubmVySFRNTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdzZXJ2ZXIgaW5uZXJIVE1MOiAnLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2NsaWVudCBpbm5lckhUTUw6ICcsIGVsbS5pbm5lckhUTUwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdGVyYXRlIGFuZCBjb21wYXJlIGNoaWxkcmVuIGxpc3RzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbk1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkTm9kZSA9IGVsbS5maXJzdENoaWxkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpXzcgPSAwOyBpXzcgPCBjaGlsZHJlbi5sZW5ndGg7IGlfNysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkTm9kZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoeWRyYXRlKGNoaWxkTm9kZSwgY2hpbGRyZW5baV83XSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGNoaWxkTm9kZSBpcyBub3QgbnVsbCwgaXQgbWVhbnMgdGhlIGFjdHVhbCBjaGlsZE5vZGVzIGxpc3QgaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9uZ2VyIHRoYW4gdGhlIHZpcnR1YWwgY2hpbGRyZW4gbGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZHJlbk1hdGNoIHx8IGNoaWxkTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdNaXNtYXRjaGluZyBjaGlsZE5vZGVzIHZzLiBWTm9kZXM6ICcsIGVsbS5jaGlsZE5vZGVzLCBjaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgI
3H1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgZnVsbEludm9rZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVuZGVyZWRNb2R1bGUoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsSW52b2tlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmICghZnVsbEludm9rZSAmJiBkYXRhWydjbGFzcyddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIGNvbGxlY3RpbmcgZGVwcyBmb3IgZGVlcCBjbGFzcyBiaW5kaW5ncyBmb3IgZnV0dXJlIHVwZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzZShkYXRhWydjbGFzcyddKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChlbG0uZGF0YSAhPT0gdm5vZGUudGV4dCkge1xuICAgICAgICAgICAgICBlbG0uZGF0YSA9IHZub2RlLnRleHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gYXNzZXJ0Tm9kZU1hdGNoKG5vZGUsIHZub2RlLCBpblZQcmUpIHtcbiAgICAgICAgICBpZiAoaXNEZWYodm5vZGUudGFnKSkge1xuICAgICAgICAgICAgICByZXR1cm4gKHZub2RlLnRhZy5pbmRleE9mKCd2dWUtY29tcG9uZW50JykgPT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICghaXNVbmtub3duRWxlbWVudCh2bm9kZSwgaW5WUHJlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgIHZub2RlLnRhZy50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAobm9kZS50YWdOYW1lICYmIG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09ICh2bm9kZS5pc0NvbW1lbnQgPyA4IDogMyk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoKG9sZFZub2RlLCB2bm9kZSwgaHlkcmF0aW5nLCByZW1vdmVPbmx5KSB7XG4gICAgICAgICAgaWYgKGlzVW5kZWYodm5vZGUpKSB7XG4gICAgICAgICAgICAgIGlmIChpc0RlZihvbGRWbm9kZSkpXG4gICAgICAgICAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhvbGRWbm9kZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGlzSW5pdGlhbFBhdGNoID0gZmFsc2U7XG4gICAgICAgICAgdmFyIGluc2VydGVkVm5vZGVRdWV1ZSA9IFtdO1xuICAgICAgICAgIGlmIChpc1VuZGVmKG9sZFZub2RlKSkge1xuICAgICAgICAgICAgICAvLyBlbXB0eSBtb3VudCAobGlrZWx5IGFzIGNvbXBvbmVudCksIGNyZWF0ZSBuZXcgcm9vdCBlbGVtZW50XG4gICAgICAgICAgICAgIGlzSW5pdGlhbFBhdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY3JlYXRlRWxtKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIGlzUmVhbEVsZW1lbnQgPSBpc0RlZihvbGRWbm9kZS5ub2RlVHlwZSk7XG4gICAgICAgICAgICAgIGlmICghaXNSZWFsRWxlbWVudCAmJiBzYW1lVm5vZGUob2xkVm5vZGUsIHZub2RlKSkge1xuICAgICAgICAgICAgICAgICAgLy8gcGF0Y2ggZXhpc3Rpbmcgcm9vdCBub2RlXG4gICAgICAgICAgICAgICAgICBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBudWxsLCBudWxsLCByZW1vdmVPbmx5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmIChpc1JlYWxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gbW91bnRpbmcgdG8gYSByZWFsIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIHNlcnZlci1yZW5kZXJlZCBjb250ZW50IGFuZCBpZiB3ZSBjYW4gcGVyZm9ybVxuICAgICAgICAgICAgICAgICAgICAgIC8vIGEgc3VjY2Vzc2Z1bCBoeWRyYXRpb24uXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFZub2RlLm5vZGVUeXBlID09PSAxICYmIG9sZFZub2RlLmhhc0F0dHJpYnV0ZShTU1JfQVRUUikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkVm5vZGUucmVtb3ZlQXR0cmlidXRlKFNTUl9BVFRSKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHlkcmF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVHJ1ZShoeWRyYXRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoeWRyYXRlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlSW5zZXJ0SG9vayh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbGRWbm9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4kMignVGhlIGNsaWVudC1zaWRlIHJlbmRlcmVkIHZpcnR1YWwgRE9NIHRyZWUgaXMgbm90IG1hdGNoaW5nICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXJ2ZXItcmVuZGVyZWQgY29udGVudC4gVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IGluY29ycmVjdCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSFRNTCBtYXJrdXAsIGZvciBleGFtcGxlIG5lc3RpbmcgYmxvY2stbGV2ZWwgZWxlbWVudHMgaW5zaWRlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8cD4sIG9yIG1pc3NpbmcgPHRib2R5Pi4gQmFpbGluZyBoeWRyYXRpb24gYW5kIHBlcmZvcm1pbmcgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z1bGwgY2xpZW50LXNpZGUgcmVuZGVyLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIC8vIGVpdGhlciBub3Qgc2VydmVyLXJlbmRlcmVkLCBvciBoeWRyYXRpb24gZmFpbGVkLlxuICAgICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBub2RlIGFuZCByZXBsYWNlIGl0XG4gICAgICAgICAgICAgICAgICAgICAgb2xkVm5vZGUgPSBlbXB0eU5vZGVBdChvbGRWbm9kZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyByZXBsYWNpbmcgZXhpc3RpbmcgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgdmFyIG9sZEVsbSA9IG9sZFZub2Rl
3LmVsbTtcbiAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRFbG0gPSBub2RlT3BzLnBhcmVudE5vZGUob2xkRWxtKTtcbiAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgbm9kZVxuICAgICAgICAgICAgICAgICAgY3JlYXRlRWxtKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIFxuICAgICAgICAgICAgICAgICAgLy8gZXh0cmVtZWx5IHJhcmUgZWRnZSBjYXNlOiBkbyBub3QgaW5zZXJ0IGlmIG9sZCBlbGVtZW50IGlzIGluIGFcbiAgICAgICAgICAgICAgICAgIC8vIGxlYXZpbmcgdHJhbnNpdGlvbi4gT25seSBoYXBwZW5zIHdoZW4gY29tYmluaW5nIHRyYW5zaXRpb24gK1xuICAgICAgICAgICAgICAgICAgLy8ga2VlcC1hbGl2ZSArIEhPQ3MuICgjNDU5MClcbiAgICAgICAgICAgICAgICAgIG9sZEVsbS5fbGVhdmVDYiA/IG51bGwgOiBwYXJlbnRFbG0sIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRWxtKSk7XG4gICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgcGFyZW50IHBsYWNlaG9sZGVyIG5vZGUgZWxlbWVudCwgcmVjdXJzaXZlbHlcbiAgICAgICAgICAgICAgICAgIGlmIChpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGUucGFyZW50O1xuICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXRjaGFibGUgPSBpc1BhdGNoYWJsZSh2bm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlfOCA9IDA7IGlfOCA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpXzgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNicy5kZXN0cm95W2lfOF0oYW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmVsbSA9IHZub2RlLmVsbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGNoYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaV85ID0gMDsgaV85IDwgY2JzLmNyZWF0ZS5sZW5ndGg7ICsraV85KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2JzLmNyZWF0ZVtpXzldKGVtcHR5Tm9kZSwgYW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIzY1MTNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludm9rZSBpbnNlcnQgaG9va3MgdGhhdCBtYXkgaGF2ZSBiZWVuIG1lcmdlZCBieSBjcmVhdGUgaG9va3MuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlLmcuIGZvciBkaXJlY3RpdmVzIHRoYXQgdXNlcyB0aGUgXCJpbnNlcnRlZFwiIGhvb2suXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y
3XIgaW5zZXJ0XzEgPSBhbmNlc3Rvci5kYXRhLmhvb2suaW5zZXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydF8xLm1lcmdlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGF0IGluZGV4IDEgdG8gYXZvaWQgcmUtaW52b2tpbmcgY29tcG9uZW50IG1vdW50ZWQgaG9va1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb25lIGluc2VydCBob29rcyB0byBhdm9pZCBiZWluZyBtdXRhdGVkIGR1cmluZyBpdGVyYXRpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZS5nLiBmb3IgY3VzdG9tZWQgZGlyZWN0aXZlcyB1bmRlciB0cmFuc2l0aW9uIGdyb3VwLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbG9uZWQgPSBpbnNlcnRfMS5mbnMuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaV8xMCA9IDA7IGlfMTAgPCBjbG9uZWQubGVuZ3RoOyBpXzEwKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVkW2lfMTBdKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJSZWYoYW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIGRlc3Ryb3kgb2xkIG5vZGVcbiAgICAgICAgICAgICAgICAgIGlmIChpc0RlZihwYXJlbnRFbG0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlVm5vZGVzKFtvbGRWbm9kZV0sIDAsIDApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGFnKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKG9sZFZub2RlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIGlzSW5pdGlhbFBhdGNoKTtcbiAgICAgICAgICByZXR1cm4gdm5vZGUuZWxtO1xuICAgICAgfTtcbiAgfVxuXG4gIHZhciBkaXJlY3RpdmVzJDEgPSB7XG4gICAgICBjcmVhdGU6IHVwZGF0ZURpcmVjdGl2ZXMsXG4gICAgICB1cGRhdGU6IHVwZGF0ZURpcmVjdGl2ZXMsXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiB1bmJpbmREaXJlY3RpdmVzKHZub2RlKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBlbXB0eU5vZGUgaXMgbm90IFZOb2RlV2l0aERhdGFcbiAgICAgICAgICB1cGRhdGVEaXJlY3RpdmVzKHZub2RlLCBlbXB0eU5vZGUpO1xuICAgICAgfVxuICB9O1xuICBmdW5jdGlvbiB1cGRhdGVEaXJlY3RpdmVzKG9sZFZub2RlLCB2bm9kZSkge1xuICAgICAgaWYgKG9sZFZub2RlLmRhdGEuZGlyZWN0aXZlcyB8fCB2bm9kZS5kYXRhLmRpcmVjdGl2ZXMpIHtcbiAgICAgICAgICBfdXBkYXRlKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gX3VwZGF0ZShvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICAgIHZhciBpc0NyZWF0ZSA9IG9sZFZub2RlID09PSBlbXB0eU5vZGU7XG4gICAgICB2Y
3XIgaXNEZXN0cm95ID0gdm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgICAgIHZhciBvbGREaXJzID0gbm9ybWFsaXplRGlyZWN0aXZlcyhvbGRWbm9kZS5kYXRhLmRpcmVjdGl2ZXMsIG9sZFZub2RlLmNvbnRleHQpO1xuICAgICAgdmFyIG5ld0RpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzKHZub2RlLmRhdGEuZGlyZWN0aXZlcywgdm5vZGUuY29udGV4dCk7XG4gICAgICB2YXIgZGlyc1dpdGhJbnNlcnQgPSBbXTtcbiAgICAgIHZhciBkaXJzV2l0aFBvc3RwYXRjaCA9IFtdO1xuICAgICAgdmFyIGtleSwgb2xkRGlyLCBkaXI7XG4gICAgICBmb3IgKGtleSBpbiBuZXdEaXJzKSB7XG4gICAgICAgICAgb2xkRGlyID0gb2xkRGlyc1trZXldO1xuICAgICAgICAgIGRpciA9IG5ld0RpcnNba2V5XTtcbiAgICAgICAgICBpZiAoIW9sZERpcikge1xuICAgICAgICAgICAgICAvLyBuZXcgZGlyZWN0aXZlLCBiaW5kXG4gICAgICAgICAgICAgIGNhbGxIb29rKGRpciwgJ2JpbmQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICAgICAgICBpZiAoZGlyLmRlZiAmJiBkaXIuZGVmLmluc2VydGVkKSB7XG4gICAgICAgICAgICAgICAgICBkaXJzV2l0aEluc2VydC5wdXNoKGRpcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGV4aXN0aW5nIGRpcmVjdGl2ZSwgdXBkYXRlXG4gICAgICAgICAgICAgIGRpci5vbGRWYWx1ZSA9IG9sZERpci52YWx1ZTtcbiAgICAgICAgICAgICAgZGlyLm9sZEFyZyA9IG9sZERpci5hcmc7XG4gICAgICAgICAgICAgIGNhbGxIb29rKGRpciwgJ3VwZGF0ZScsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICAgICAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuY29tcG9uZW50VXBkYXRlZCkge1xuICAgICAgICAgICAgICAgICAgZGlyc1dpdGhQb3N0cGF0Y2gucHVzaChkaXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRpcnNXaXRoSW5zZXJ0Lmxlbmd0aCkge1xuICAgICAgICAgIHZhciBjYWxsSW5zZXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpcnNXaXRoSW5zZXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICBjYWxsSG9vayhkaXJzV2l0aEluc2VydFtpXSwgJ2luc2VydGVkJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGlzQ3JlYXRlKSB7XG4gICAgICAgICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAnaW5zZXJ0JywgY2FsbEluc2VydCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBjYWxsSW5zZXJ0KCk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRpcnNXaXRoUG9zdHBhdGNoLmxlbmd0aCkge1xuICAgICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAncG9zdHBhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpcnNXaXRoUG9zdHBhdGNoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICBjYWxsSG9vayhkaXJzV2l0aFBvc3RwYXRjaFtpXSwgJ2NvbXBvbmVudFVwZGF0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQ3JlYXRlKSB7XG4gICAgICAgICAgZm9yIChrZXkgaW4gb2xkRGlycykge1xuICAgICAgICAgICAgICBpZiAoIW5ld0RpcnNba2V5XSkge1xuICAgICAgICAgICAgICAgICAgLy8gbm8gbG9uZ2VyIHByZXNlbnQsIHVuYmluZFxuICAgICAgICAgICAgICAgICAgY2FsbEhvb2sob2xkRGlyc1trZXldLCAndW5iaW5kJywgb2xkVm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIHZhciBlbXB0eU1vZGlmaWVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZURpcmVjdGl2ZXMoZGlycywgdm0pIHtcbiAgICAgIHZhciByZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgaWYgKCFkaXJzKSB7XG4gICAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICAgIHZhciBpLCBkaXI7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZGlycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGRpciA9IGRpcnNbaV07XG4gICAgICAgICAgaWYgKCFkaXIubW9kaWZpZXJzKSB7XG4gICAgICAgICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICAgICAgICBkaXIubW9kaWZpZXJzID0gZW1wdHlNb2RpZmllcnM7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc1tnZXRSYXdEaXJOYW1lKGRpcildID0gZGlyO1xuICAgICAgICAgIGlmICh2bS5fc2V0dXBTdGF0ZSAmJiB2bS5fc2V0dXBTdGF0ZS5fX3NmYykge1xuICAgICAgICAgICAgICB2Y
3XIgc2V0dXBEZWYgPSBkaXIuZGVmIHx8IHJlc29sdmVBc3NldCh2bSwgJ19zZXR1cFN0YXRlJywgJ3YtJyArIGRpci5uYW1lKTtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzZXR1cERlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgZGlyLmRlZiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBiaW5kOiBzZXR1cERlZixcbiAgICAgICAgICAgICAgICAgICAgICB1cGRhdGU6IHNldHVwRGVmLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGRpci5kZWYgPSBzZXR1cERlZjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBkaXIuZGVmID0gZGlyLmRlZiB8fCByZXNvbHZlQXNzZXQodm0uJG9wdGlvbnMsICdkaXJlY3RpdmVzJywgZGlyLm5hbWUsIHRydWUpO1xuICAgICAgfVxuICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gcmVzO1xuICB9XG4gIGZ1bmN0aW9uIGdldFJhd0Rpck5hbWUoZGlyKSB7XG4gICAgICByZXR1cm4gKGRpci5yYXdOYW1lIHx8IFwiXCIuY29uY2F0KGRpci5uYW1lLCBcIi5cIikuY29uY2F0KE9iamVjdC5rZXlzKGRpci5tb2RpZmllcnMgfHwge30pLmpvaW4oJy4nKSkpO1xuICB9XG4gIGZ1bmN0aW9uIGNhbGxIb29rKGRpciwgaG9vaywgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpIHtcbiAgICAgIHZhciBmbiA9IGRpci5kZWYgJiYgZGlyLmRlZltob29rXTtcbiAgICAgIGlmIChmbikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGZuKHZub2RlLmVsbSwgZGlyLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZub2RlLmNvbnRleHQsIFwiZGlyZWN0aXZlIFwiLmNvbmNhdChkaXIubmFtZSwgXCIgXCIpLmNvbmNhdChob29rLCBcIiBob29rXCIpKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICB2YXIgYmFzZU1vZHVsZXMgPSBbcmVmLCBkaXJlY3RpdmVzJDFdO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZUF0dHJzKG9sZFZub2RlLCB2bm9kZSkge1xuICAgICAgdmFyIG9wdHMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgICAgaWYgKGlzRGVmKG9wdHMpICYmIG9wdHMuQ3Rvci5vcHRpb25zLmluaGVyaXRBdHRycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLmF0dHJzKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEuYXR0cnMpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGtleSwgY3VyLCBvbGQ7XG4gICAgICB2Y
3XIgZWxtID0gdm5vZGUuZWxtO1xuICAgICAgdmFyIG9sZEF0dHJzID0gb2xkVm5vZGUuZGF0YS5hdHRycyB8fCB7fTtcbiAgICAgIHZhciBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gICAgICAvLyBjbG9uZSBvYnNlcnZlZCBvYmplY3RzLCBhcyB0aGUgdXNlciBwcm9iYWJseSB3YW50cyB0byBtdXRhdGUgaXRcbiAgICAgIGlmIChpc0RlZihhdHRycy5fX29iX18pIHx8IGlzVHJ1ZShhdHRycy5fdl9hdHRyX3Byb3h5KSkge1xuICAgICAgICAgIGF0dHJzID0gdm5vZGUuZGF0YS5hdHRycyA9IGV4dGVuZCh7fSwgYXR0cnMpO1xuICAgICAgfVxuICAgICAgZm9yIChrZXkgaW4gYXR0cnMpIHtcbiAgICAgICAgICBjdXIgPSBhdHRyc1trZXldO1xuICAgICAgICAgIG9sZCA9IG9sZEF0dHJzW2tleV07XG4gICAgICAgICAgaWYgKG9sZCAhPT0gY3VyKSB7XG4gICAgICAgICAgICAgIHNldEF0dHIoZWxtLCBrZXksIGN1ciwgdm5vZGUuZGF0YS5wcmUpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vICM0MzkxOiBpbiBJRTksIHNldHRpbmcgdHlwZSBjYW4gcmVzZXQgdmFsdWUgZm9yIGlucHV0W3R5cGU9cmFkaW9dXG4gICAgICAvLyAjNjY2NjogSUUvRWRnZSBmb3JjZXMgcHJvZ3Jlc3MgdmFsdWUgZG93biB0byAxIGJlZm9yZSBzZXR0aW5nIGEgbWF4XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICgoaXNJRSB8fCBpc0VkZ2UpICYmIGF0dHJzLnZhbHVlICE9PSBvbGRBdHRycy52YWx1ZSkge1xuICAgICAgICAgIHNldEF0dHIoZWxtLCAndmFsdWUnLCBhdHRycy52YWx1ZSk7XG4gICAgICB9XG4gICAgICBmb3IgKGtleSBpbiBvbGRBdHRycykge1xuICAgICAgICAgIGlmIChpc1VuZGVmKGF0dHJzW2tleV0pKSB7XG4gICAgICAgICAgICAgIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGVOUyh4bGlua05TLCBnZXRYbGlua1Byb3Aoa2
3V5KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIHNldEF0dHIoZWwsIGtleSwgdmFsdWUsIGlzSW5QcmUpIHtcbiAgICAgIGlmIChpc0luUHJlIHx8IGVsLnRhZ05hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgICAgICBiYXNlU2V0QXR0cihlbCwga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0Jvb2xlYW5BdHRyKGtleSkpIHtcbiAgICAgICAgICAvLyBzZXQgYXR0cmlidXRlIGZvciBibGFuayB2YWx1ZVxuICAgICAgICAgIC8vIGUuZy4gPG9wdGlvbiBkaXNhYmxlZD5TZWxlY3Qgb25lPC9vcHRpb24+XG4gICAgICAgICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gdGVjaG5pY2FsbHkgYWxsb3dmdWxsc2NyZWVuIGlzIGEgYm9vbGVhbiBhdHRyaWJ1dGUgZm9yIDxpZnJhbWU+LFxuICAgICAgICAgICAgICAvLyBidXQgRmxhc2ggZXhwZWN0cyBhIHZhbHVlIG9mIFwidHJ1ZVwiIHdoZW4gdXNlZCBvbiA8ZW1iZWQ+IHRhZ1xuICAgICAgICAgICAgICB2YWx1ZSA9IGtleSA9PT0gJ2FsbG93ZnVsbHNjcmVlbicgJiYgZWwudGFnTmFtZSA9PT0gJ0VNQkVEJyA/ICd0cnVlJyA6IGtleTtcbiAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIGNvbnZlcnRFbnVtZXJhdGVkVmFsdWUoa2V5LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNYbGluayhrZXkpKSB7XG4gICAgICAgICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZU5TKHhsaW5rTlMsIGtleSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBiYXNlU2V0QXR0cihlbCwga2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICAvLyAjNzEzODogSUUxMCAmIDExIGZpcmVzIGlucHV0IGV2ZW50IHdoZW4gc2V0dGluZyBwbGFjZWhvbGRlciBvblxuICAgICAgICAgIC8vIDx0ZXh0YXJlYT4uLi4gYmxvY2sgdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFuZCByZW1vdmUgdGhlIGJsb2NrZXJcbiAgICAgICAgICAvLyBpbW1lZGlhdGVseS5cbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICBpZiAoaXNJRSAmJlxuICAgICAgICAgICAgICAhaXNJRTkgJiZcbiAgICAgICAgICAgICAgZWwudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyAmJlxuICAgICAgICAgICAgICBrZXkgPT09ICdwbGFjZWhvbGRlcicgJiZcbiAgICAgICAgICAgICAgdmFsdWUgIT09ICcnICYmXG4gICAgICAgICAgICAgICFlbC5fX2llcGgpIHtcbiAgICAgICAgICAgICAgdmFyIGJsb2NrZXJfMSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBibG9ja2VyXzEpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGJsb2NrZXJfMSk7XG4gICAgICAgICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICAgICAgICBlbC5fX2llcGggPSB0cnVlOyAvKiBJRSBwbGFjZWhvbGRlciBwYXRjaGVkICovXG4gICAgICAgICAgfVxuICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgfVxuICB2YXIgYXR0cnMgPSB7XG4gICAgICBjcmVhdGU6IHVwZGF0ZUF0dHJzLFxuICAgICAgdXBkYXRlOiB1cGRhdGVBdHRyc1xuICB9O1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZUNsYXNzKG9sZFZub2RlLCB2bm9kZSkge1xuICAgICAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICAgICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgICAgdmFyIG9sZERhdGEgPSBvbGRWbm9kZS5kYXRhO1xuICAgICAgaWYgKGlzVW5kZWYoZGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICAgICAgICBpc1VuZGVmKGRhdGEuY2xhc3MpICYmXG4gICAgICAgICAgKGlzVW5kZWYob2xkRGF0YSkgfHxcbiAgICAgICAgICAgICAgKGlzVW5kZWYob2xkRGF0YS5zdGF0aWNDbGFzcykgJiYgaXNVbmRlZihvbGREYXRhLmNsYXNzKSkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGNscyA9IGdlbkNsYXNzRm9yVm5vZGUodm5vZGUpO1xuICAgICAgLy8gaGFuZGxlIHRyYW5zaXRpb24gY2xhc3Nlc1xuICAgICAgdmFyIHRyYW5zaXRpb25DbGFzcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcztcbiAgICAgIGlmIChpc0RlZih0cmFuc2l0aW9uQ2xhc3MpKSB7XG4gICAgICAgICAgY2xzID0gY29uY2F0KGNscywgc3RyaW5naWZ5Q2xhc3ModHJhbnNpdGlvbkNsYXNzKSk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgdGhlIGNsYXNzXG4gICAgICBpZiAoY2xzICE9PSBlbC5fcHJldkNsYXNzKSB7XG4gICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGNscyk7XG4gICAgICAgICAgZWwuX3ByZXZDbGFzcyA9IGNscztcbiAgICAgIH1cbiAgfVxuICB2YXIga2xhc3MkMSA9IHtcbiAgICAgIGNyZWF0ZTogdXBkYXRlQ2xhc3MsXG4gICAgICB1cGRhdGU6IHVwZGF0ZUNsYXNzXG4gIH07XG5cbiAgdmFyIHZhbGlkRGl2aXNpb25DaGFyUkUgPSAvW1xcdykuK1xcLV8kXFxdXS87XG4gIGZ1bmN0aW9uIHBhcnNlRmlsdGVycyhleHApIHtcbiAgICAgIHZhciBpblNpbmdsZSA9IGZhbHNlO1xuICAgICAgdmFyIGluRG91YmxlID0gZmFsc2U7XG4gICAgICB2Y
3XIgaW5UZW1wbGF0ZVN0cmluZyA9IGZhbHNlO1xuICAgICAgdmFyIGluUmVnZXggPSBmYWxzZTtcbiAgICAgIHZhciBjdXJseSA9IDA7XG4gICAgICB2YXIgc3F1YXJlID0gMDtcbiAgICAgIHZhciBwYXJlbiA9IDA7XG4gICAgICB2YXIgbGFzdEZpbHRlckluZGV4ID0gMDtcbiAgICAgIHZhciBjLCBwcmV2LCBpLCBleHByZXNzaW9uLCBmaWx0ZXJzO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGV4cC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHByZXYgPSBjO1xuICAgICAgICAgIGMgPSBleHAuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICBpZiAoaW5TaW5nbGUpIHtcbiAgICAgICAgICAgICAgaWYgKGMgPT09IDB4MjcgJiYgcHJldiAhPT0gMHg1YylcbiAgICAgICAgICAgICAgICAgIGluU2luZ2xlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGluRG91YmxlKSB7XG4gICAgICAgICAgICAgIGlmIChjID09PSAweDIyICYmIHByZXYgIT09IDB4NWMpXG4gICAgICAgICAgICAgICAgICBpbkRvdWJsZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpblRlbXBsYXRlU3RyaW5nKSB7XG4gICAgICAgICAgICAgIGlmIChjID09PSAweDYwICYmIHByZXYgIT09IDB4NWMpXG4gICAgICAgICAgICAgICAgICBpblRlbXBsYXRlU3RyaW5nID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGluUmVnZXgpIHtcbiAgICAgICAgICAgICAgaWYgKGMgPT09IDB4MmYgJiYgcHJldiAhPT0gMHg1YylcbiAgICAgICAgICAgICAgICAgIGluUmVnZXggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoYyA9PT0gMHg3YyAmJiAvLyBwaXBlXG4gICAgICAgICAgICAgIGV4cC5jaGFyQ29kZUF0KGkgKyAxKSAhPT0gMHg3YyAmJlxuICAgICAgICAgICAgICBleHAuY2hhckNvZGVBdChpIC0gMSkgIT09IDB4N2MgJiZcbiAgICAgICAgICAgICAgIWN1cmx5ICYmXG4gICAgICAgICAgICAgICFzcXVhcmUgJiZcbiAgICAgICAgICAgICAgIXBhcmVuKSB7XG4gICAgICAgICAgICAgIGlmIChleHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IGZpbHRlciwgZW5kIG9mIGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgIGxhc3RGaWx0ZXJJbmRleCA9IGkgKyAxO1xuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cC5zbGljZSgwLCBpKS50cmltKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwdXNoRmlsdGVyKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAweDIyOlxuICAgICAgICAgICAgICAgICAgICAgIGluRG91YmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gXCJcbiAgICAgICAgICAgICAgICAgIGNhc2UgMHgyNzpcbiAgICAgICAgICAgICAgICAgICAgICBpblNpbmdsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vICdcbiAgICAgICAgICAgICAgICAgIGNhc2UgMHg2MDpcbiAgICAgICAgICAgICAgICAgICAgICBpblRlbXBsYXRlU3RyaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gYFxuICAgICAgICAgICAgICAgICAgY2FzZSAweDI4OlxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVuKys7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIChcbiAgICAgICAgICAgICAgICAgIGNhc2UgMHgyOTpcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbi0tO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyApXG4gICAgICAgICAgICAgICAgICBjYXNlIDB4NWI6XG4gICAgICAgICAgICAgICAgICAgICAgc3F1YXJlKys7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMHg1ZDpcbiAgICAgICAgICAgICAgICAgICAgICBzcXVhcmUtLTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gXVxuICAgICAgICAgICAgICAgICAgY2FzZSAweDdiOlxuICAgICAgICAgICAgICAgICAgICAgIGN1cmx5Kys7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMHg3ZDpcbiAgICAgICAgICAgICAgICAgICAgICBjdXJseS0tO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGMgPT09IDB4MmYpIHtcbiAgICAgICAgICAgICAgICAgIC8vIC9cbiAgICAgICAgICAgICAgICAgIHZhciBqID0gaSAtIDE7XG4gICAgICAgICAgICAgICAgICB2Y
3XIgcCBcbiAgICAgICAgICAgICAgICAgIC8vIGZpbmQgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgcHJldiBjaGFyXG4gICAgICAgICAgICAgICAgICA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgIC8vIGZpbmQgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgcHJldiBjaGFyXG4gICAgICAgICAgICAgICAgICBmb3IgKDsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICBwID0gZXhwLmNoYXJBdChqKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocCAhPT0gJyAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhdmFsaWREaXZpc2lvbkNoYXJSRS50ZXN0KHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaW5SZWdleCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXhwcmVzc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cC5zbGljZSgwLCBpKS50cmltKCk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChsYXN0RmlsdGVySW5kZXggIT09IDApIHtcbiAgICAgICAgICBwdXNoRmlsdGVyKCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwdXNoRmlsdGVyKCkge1xuICAgICAgICAgIChmaWx0ZXJzIHx8IChmaWx0ZXJzID0gW10pKS5wdXNoKGV4cC5zbGljZShsYXN0RmlsdGVySW5kZXgsIGkpLnRyaW0oKSk7XG4gICAgICAgICAgbGFzdEZpbHRlckluZGV4ID0gaSArIDE7XG4gICAgICB9XG4gICAgICBpZiAoZmlsdGVycykge1xuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGV4cHJlc3Npb24gPSB3cmFwRmlsdGVyKGV4cHJlc3Npb24sIGZpbHRlcnNbaV0pO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBleHByZXNzaW9uO1xuICB9XG4gIGZ1bmN0aW9uIHdyYXBGaWx0ZXIoZXhwLCBmaWx0ZXIpIHtcbiAgICAgIHZhciBpID0gZmlsdGVyLmluZGV4T2YoJygnKTtcbiAgICAgIGlmIChpIDwgMCkge1xuICAgICAgICAgIC8vIF9mOiByZXNvbHZlRmlsdGVyXG4gICAgICAgICAgcmV0dXJuIFwiX2YoXFxcIlwiLmNvbmNhdChmaWx0ZXIsIFwiXFxcIikoXCIpLmNvbmNhdChleHAsIFwiKVwiKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBuYW1lXzEgPSBmaWx0ZXIuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgdmFyIGFyZ3MgPSBmaWx0ZXIuc2xpY2UoaSArIDEpO1xuICAgICAgICAgIHJldHVybiBcIl9mKFxcXCJcIi5jb25jYXQobmFtZV8xLCBcIlxcXCIpKFwiKS5jb25jYXQoZXhwKS5jb25jYXQoYXJncyAhPT0gJyknID8gJywnICsgYXJncyA6IGFyZ3MpO1xuICAgICAgfVxuICB9XG5cbiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgZnVuY3Rpb24gYmFzZVdhcm4obXNnLCByYW5nZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIltWdWUgY29tcGlsZXJdOiBcIi5jb25jYXQobXNnKSk7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuICBmdW5jdGlvbiBwbHVja01vZHVsZUZ1bmN0aW9uKG1vZHVsZXMsIGtleSkge1xuICAgICAgcmV0dXJuIG1vZHVsZXMgPyBtb2R1bGVzLm1hcChmdW5jdGlvbiAobSkgeyByZXR1cm4gbVtrZXldOyB9KS5maWx0ZXIoZnVuY3Rpb24gKF8pIHsgcmV0dXJuIF87IH0pIDogW107XG4gIH1cbiAgZnVuY3Rpb24gYWRkUHJvcChlbCwgbmFtZSwgdmFsdWUsIHJhbmdlLCBkeW5hbWljKSB7XG4gICAgICAoZWwucHJvcHMgfHwgKGVsLnByb3BzID0gW10pKS5wdXNoKHJhbmdlU2V0SXRlbSh7IG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSwgZHluYW1pYzogZHluYW1pYyB9LCByYW5nZSkpO1xuICAgICAgZWwucGxhaW4gPSBmYWxzZTtcbiAgfVxuICBmdW5jdGlvbiBhZGRBdHRyKGVsLCBuYW1lLCB2YWx1ZSwgcmFuZ2UsIGR5bmFtaWMpIHtcbiAgICAgIHZhciBhdHRycyA9IGR5bmFtaWNcbiAgICAgICAgICA/IGVsLmR5bmFtaWNBdHRycyB8fCAoZWwuZHluYW1pY0F0dHJzID0gW10pXG4gICAgICAgICAgOiBlbC5hdHRycyB8fCAoZWwuYXR0cnMgPSBbXSk7XG4gICAgICBhdHRycy5wdXNoKHJhbmdlU2V0SXRlbSh7IG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSwgZHluYW1pYzogZHluYW1pYyB9LCByYW5nZSkpO1xuICAgICAgZWwucGxhaW4gPSBmYWxzZTtcbiAgfVxuICAvLyBhZGQgYSByYXcgYXR0ciAodXNlIHRoaXMgaW4gcHJlVHJhbnNmb3JtcylcbiAgZnVuY3Rpb24gYWRkUmF3QXR0cihlbCwgbmFtZSwgdmFsdWUsIHJhbmdlKSB7XG4gICAgICBlbC5hdHRyc01hcFtuYW1lXSA9IHZhbHVlO1xuICAgICAgZWwuYXR0cnNMaXN0LnB1c2gocmFuZ2VTZXRJdGVtKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlIH0sIHJhbmdlKSk7XG4gIH1cbiAgZnVuY3Rpb24gYWRkRGlyZWN0aXZlKGVsLCBuYW1lLCByYXdOYW1lLCB2YWx1ZSwgYXJnLCBpc0R5bmFtaWNBcmcsIG1vZGlmaWVycywgcmFuZ2UpIHtcbiAgICAgIChlbC5kaXJlY3RpdmVzIHx8IChlbC5kaXJlY3RpdmVzID0gW10pKS5wdXNoKHJhbmdlU2V0SXRlbSh7XG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICByYXdOYW1lOiByYXdOYW1lLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBhcmc6IGFyZyxcbiAgICAgICAgICBpc0R5bmFtaWNBcmc6IGlzRHluYW1pY0FyZyxcbiAgICAgICAgICBtb2RpZmllcnM6IG1vZGlmaWVyc1xuICAgICAgfSwgcmFuZ2UpKTtcbiAgICAgIGVsLnBsYWluID0gZmFsc2U7XG4gIH1cbiAgZnVuY3Rpb24gcHJlcGVuZE1vZGlmaWVyTWFya2VyKHN5bWJvbCwgbmFtZSwgZHluYW1pYykge1xuICAgICAgcmV0dXJuIGR5bmFtaWMgPyBcIl9wKFwiLmNvbmNhdChuYW1lLCBcIixcXFwiXCIpLmNvbmNhdChzeW1ib2wsIFwiXFxcIilcIikgOiBzeW1ib2wgKyBuYW1lOyAvLyBtYXJrIHRoZSBldmVudCBhcyBjYXB0dXJlZFxuICB9XG4gIGZ1bmN0aW9uIGFkZEhhbmRsZXIoZWwsIG5hbW
3UsIHZhbHVlLCBtb2RpZmllcnMsIGltcG9ydGFudCwgd2FybiwgcmFuZ2UsIGR5bmFtaWMpIHtcbiAgICAgIG1vZGlmaWVycyA9IG1vZGlmaWVycyB8fCBlbXB0eU9iamVjdDtcbiAgICAgIC8vIHdhcm4gcHJldmVudCBhbmQgcGFzc2l2ZSBtb2RpZmllclxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAod2FybiAmJiBtb2RpZmllcnMucHJldmVudCAmJiBtb2RpZmllcnMucGFzc2l2ZSkge1xuICAgICAgICAgIHdhcm4oXCJwYXNzaXZlIGFuZCBwcmV2ZW50IGNhbid0IGJlIHVzZWQgdG9nZXRoZXIuIFwiICtcbiAgICAgICAgICAgICAgXCJQYXNzaXZlIGhhbmRsZXIgY2FuJ3QgcHJldmVudCBkZWZhdWx0IGV2ZW50LlwiLCByYW5nZSk7XG4gICAgICB9XG4gICAgICAvLyBub3JtYWxpemUgY2xpY2sucmlnaHQgYW5kIGNsaWNrLm1pZGRsZSBzaW5jZSB0aGV5IGRvbid0IGFjdHVhbGx5IGZpcmVcbiAgICAgIC8vIHRoaXMgaXMgdGVjaG5pY2FsbHkgYnJvd3Nlci1zcGVjaWZpYywgYnV0IGF0IGxlYXN0IGZvciBub3cgYnJvd3NlcnMgYXJlXG4gICAgICAvLyB0aGUgb25seSB0YXJnZXQgZW52cyB0aGF0IGhhdmUgcmlnaHQvbWlkZGxlIGNsaWNrcy5cbiAgICAgIGlmIChtb2RpZmllcnMucmlnaHQpIHtcbiAgICAgICAgICBpZiAoZHluYW1pYykge1xuICAgICAgICAgICAgICBuYW1lID0gXCIoXCIuY29uY2F0KG5hbWUsIFwiKT09PSdjbGljayc/J2NvbnRleHRtZW51JzooXCIpLmNvbmNhdChuYW1lLCBcIilcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdjbGljaycpIHtcbiAgICAgICAgICAgICAgbmFtZSA9ICdjb250ZXh0bWVudSc7XG4gICAgICAgICAgICAgIGRlbGV0ZSBtb2RpZmllcnMucmlnaHQ7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAobW9kaWZpZXJzLm1pZGRsZSkge1xuICAgICAgICAgIGlmIChkeW5hbWljKSB7XG4gICAgICAgICAgICAgIG5hbWUgPSBcIihcIi5jb25jYXQobmFtZSwgXCIpPT09J2NsaWNrJz8nbW91c2V1cCc6KFwiKS5jb25jYXQobmFtZSwgXCIpXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnY2xpY2snKSB7XG4gICAgICAgICAgICAgIG5hbWUgPSAnbW91c2V1cCc7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gY2hlY2sgY2FwdHVyZSBtb2RpZmllclxuICAgICAgaWYgKG1vZGlmaWVycy5jYXB0dXJlKSB7XG4gICAgICAgICAgZGVsZXRlIG1vZGlmaWVycy5jYXB0dXJlO1xuICAgICAgICAgIG5hbWUgPSBwcmVwZW5kTW9kaWZpZXJNYXJrZXIoJyEnLCBuYW1lLCBkeW5hbWljKTtcbiAgICAgIH1cbiAgICAgIGlmIChtb2RpZmllcnMub25jZSkge1xuICAgICAgICAgIGRlbGV0ZSBtb2RpZmllcnMub25jZTtcbiAgICAgICAgICBuYW1lID0gcHJlcGVuZE1vZGlmaWVyTWFya2VyKCd+JywgbmFtZSwgZHluYW1pYyk7XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChtb2RpZmllcnMucGFzc2l2ZSkge1xuICAgICAgICAgIGRlbGV0ZSBtb2RpZmllcnMucGFzc2l2ZTtcbiAgICAgICAgICBuYW1lID0gcHJlcGVuZE1vZGlmaWVyTWFya2VyKCcmJywgbmFtZSwgZHluYW1pYyk7XG4gICAgICB9XG4gICAgICB2Y
3XIgZXZlbnRzO1xuICAgICAgaWYgKG1vZGlmaWVycy5uYXRpdmUpIHtcbiAgICAgICAgICBkZWxldGUgbW9kaWZpZXJzLm5hdGl2ZTtcbiAgICAgICAgICBldmVudHMgPSBlbC5uYXRpdmVFdmVudHMgfHwgKGVsLm5hdGl2ZUV2ZW50cyA9IHt9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIGV2ZW50cyA9IGVsLmV2ZW50cyB8fCAoZWwuZXZlbnRzID0ge30pO1xuICAgICAgfVxuICAgICAgdmFyIG5ld0hhbmRsZXIgPSByYW5nZVNldEl0ZW0oeyB2YWx1ZTogdmFsdWUudHJpbSgpLCBkeW5hbWljOiBkeW5hbWljIH0sIHJhbmdlKTtcbiAgICAgIGlmIChtb2RpZmllcnMgIT09IGVtcHR5T2JqZWN0KSB7XG4gICAgICAgICAgbmV3SGFuZGxlci5tb2RpZmllcnMgPSBtb2RpZmllcnM7XG4gICAgICB9XG4gICAgICB2YXIgaGFuZGxlcnMgPSBldmVudHNbbmFtZV07XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXJzKSkge1xuICAgICAgICAgIGltcG9ydGFudCA/IGhhbmRsZXJzLnVuc2hpZnQobmV3SGFuZGxlcikgOiBoYW5kbGVycy5wdXNoKG5ld0hhbmRsZXIpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgICBldmVudHNbbmFtZV0gPSBpbXBvcnRhbnQgPyBbbmV3SGFuZGxlciwgaGFuZGxlcnNdIDogW2hhbmRsZXJzLCBuZXdIYW5kbGVyXTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIGV2ZW50c1tuYW1lXSA9IG5ld0hhbmRsZXI7XG4gICAgICB9XG4gICAgICBlbC5wbGFpbiA9IGZhbHNlO1xuICB9XG4gIGZ1bmN0aW9uIGdldFJhd0JpbmRpbmdBdHRyKGVsLCBuYW1lKSB7XG4gICAgICByZXR1cm4gKGVsLnJhd0F0dHJzTWFwWyc6JyArIG5hbWVdIHx8XG4gICAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3YtYmluZDonICsgbmFtZV0gfHxcbiAgICAgICAgICBlbC5yYXdBdHRyc01hcFtuYW1lXSk7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0QmluZGluZ0F0dHIoZWwsIG5hbWUsIGdldFN0YXRpYykge1xuICAgICAgdmFyIGR5bmFtaWNWYWx1ZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICc6JyArIG5hbWUpIHx8IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWJpbmQ6JyArIG5hbWUpO1xuICAgICAgaWYgKGR5bmFtaWNWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlRmlsdGVycyhkeW5hbWljVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZ2V0U3RhdGljICE9PSBmYWxzZSkge1xuICAgICAgICAgIHZhciBzdGF0aWNWYWx1ZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsIG5hbWUpO1xuICAgICAgICAgIGlmIChzdGF0aWNWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzdGF0aWNWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIC8vIG5vdGU6IHRoaXMgb25seSByZW1vdmVzIHRoZSBhdHRyIGZyb20gdGhlIEFycmF5IChhdHRyc0xpc3QpIHNvIHRoYXQgaXRcbiAgLy8gZG9lc24ndCBnZXQgcHJvY2Vzc2VkIGJ5IHByb2Nlc3NBdHRycy5cbiAgLy8gQnkgZGVmYXVsdCBpdCBkb2VzIE5PVCByZW1vdmUgaXQgZnJvbSB0aGUgbWFwIChhdHRyc01hcCkgYmVjYXVzZSB0aGUgbWFwIGlzXG4gIC8vIG5lZWRlZCBkdXJpbmcgY29kZWdlbi5cbiAgZnVuY3Rpb24gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgbmFtZSwgcmVtb3ZlRnJvbU1hcCkge1xuICAgICAgdmFyIHZhbDtcbiAgICAgIGlmICgodmFsID0gZWwuYXR0cnNNYXBbbmFtZV0pICE9IG51bGwpIHtcbiAgICAgICAgICB2Y
3XIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmIChsaXN0W2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVtb3ZlRnJvbU1hcCkge1xuICAgICAgICAgIGRlbGV0ZSBlbC5hdHRyc01hcFtuYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWw7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0QW5kUmVtb3ZlQXR0ckJ5UmVnZXgoZWwsIG5hbWUpIHtcbiAgICAgIHZhciBsaXN0ID0gZWwuYXR0cnNMaXN0O1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIHZhciBhdHRyID0gbGlzdFtpXTtcbiAgICAgICAgICBpZiAobmFtZS50ZXN0KGF0dHIubmFtZSkpIHtcbiAgICAgICAgICAgICAgbGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgIHJldHVybiBhdHRyO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiByYW5nZVNldEl0ZW0oaXRlbSwgcmFuZ2UpIHtcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIGlmIChyYW5nZS5zdGFydCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGl0ZW0uc3RhcnQgPSByYW5nZS5zdGFydDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJhbmdlLmVuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGl0ZW0uZW5kID0gcmFuZ2UuZW5kO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIENyb3NzLXBsYXRmb3JtIGNvZGUgZ2VuZXJhdGlvbiBmb3IgY29tcG9uZW50IHYtbW9kZWxcbiAgICovXG4gIGZ1bmN0aW9uIGdlbkNvbXBvbmVudE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKSB7XG4gICAgICB2Y
3XIgX2EgPSBtb2RpZmllcnMgfHwge30sIG51bWJlciA9IF9hLm51bWJlciwgdHJpbSA9IF9hLnRyaW07XG4gICAgICB2YXIgYmFzZVZhbHVlRXhwcmVzc2lvbiA9ICckJHYnO1xuICAgICAgdmFyIHZhbHVlRXhwcmVzc2lvbiA9IGJhc2VWYWx1ZUV4cHJlc3Npb247XG4gICAgICBpZiAodHJpbSkge1xuICAgICAgICAgIHZhbHVlRXhwcmVzc2lvbiA9XG4gICAgICAgICAgICAgIFwiKHR5cGVvZiBcIi5jb25jYXQoYmFzZVZhbHVlRXhwcmVzc2lvbiwgXCIgPT09ICdzdHJpbmcnXCIpICtcbiAgICAgICAgICAgICAgICAgIFwiPyBcIi5jb25jYXQoYmFzZVZhbHVlRXhwcmVzc2lvbiwgXCIudHJpbSgpXCIpICtcbiAgICAgICAgICAgICAgICAgIFwiOiBcIi5jb25jYXQoYmFzZVZhbHVlRXhwcmVzc2lvbiwgXCIpXCIpO1xuICAgICAgfVxuICAgICAgaWYgKG51bWJlcikge1xuICAgICAgICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiX24oXCIuY29uY2F0KHZhbHVlRXhwcmVzc2lvbiwgXCIpXCIpO1xuICAgICAgfVxuICAgICAgdmFyIGFzc2lnbm1lbnQgPSBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgdmFsdWVFeHByZXNzaW9uKTtcbiAgICAgIGVsLm1vZGVsID0ge1xuICAgICAgICAgIHZhbHVlOiBcIihcIi5jb25jYXQodmFsdWUsIFwiKVwiKSxcbiAgICAgICAgICBleHByZXNzaW9uOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSksXG4gICAgICAgICAgY2FsbGJhY2s6IFwiZnVuY3Rpb24gKFwiLmNvbmNhdChiYXNlVmFsdWVFeHByZXNzaW9uLCBcIikge1wiKS5jb25jYXQoYXNzaWdubWVudCwgXCJ9XCIpXG4gICAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBDcm9zcy1wbGF0Zm9ybSBjb2RlZ2VuIGhlbHBlciBmb3IgZ2VuZXJhdGluZyB2LW1vZGVsIHZhbHVlIGFzc2lnbm1lbnQgY29kZS5cbiAgICovXG4gIGZ1bmN0aW9uIGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCBhc3NpZ25tZW50KSB7XG4gICAgICB2Y
3XIgcmVzID0gcGFyc2VNb2RlbCh2YWx1ZSk7XG4gICAgICBpZiAocmVzLmtleSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdCh2YWx1ZSwgXCI9XCIpLmNvbmNhdChhc3NpZ25tZW50KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIiRzZXQoXCIuY29uY2F0KHJlcy5leHAsIFwiLCBcIikuY29uY2F0KHJlcy5rZXksIFwiLCBcIikuY29uY2F0KGFzc2lnbm1lbnQsIFwiKVwiKTtcbiAgICAgIH1cbiAgfVxuICAvKipcbiAgICogUGFyc2UgYSB2LW1vZGVsIGV4cHJlc3Npb24gaW50byBhIGJhc2UgcGF0aCBhbmQgYSBmaW5hbCBrZXkgc2VnbWVudC5cbiAgICogSGFuZGxlcyBib3RoIGRvdC1wYXRoIGFuZCBwb3NzaWJsZSBzcXVhcmUgYnJhY2tldHMuXG4gICAqXG4gICAqIFBvc3NpYmxlIGNhc2VzOlxuICAgKlxuICAgKiAtIHRlc3RcbiAgICogLSB0ZXN0W2tleV1cbiAgICogLSB0ZXN0W3Rlc3QxW2tleV1dXG4gICAqIC0gdGVzdFtcImFcIl1ba2V5XVxuICAgKiAtIHh4eC50ZXN0W2FbYV0udGVzdDFba2V5XV1cbiAgICogLSB0ZXN0Lnh4eC5hW1wiYXNhXCJdW3Rlc3QxW2tleV1dXG4gICAqXG4gICAqL1xuICB2YXIgbGVuLCBzdHIsIGNociwgaW5kZXgsIGV4cHJlc3Npb25Qb3MsIGV4cHJlc3Npb25FbmRQb3M7XG4gIGZ1bmN0aW9uIHBhcnNlTW9kZWwodmFsKSB7XG4gICAgICAvLyBGaXggaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9wdWxsLzc3MzBcbiAgICAgIC8vIGFsbG93IHYtbW9kZWw9XCJvYmoudmFsIFwiICh0cmFpbGluZyB3aGl0ZXNwYWNlKVxuICAgICAgdmFsID0gdmFsLnRyaW0oKTtcbiAgICAgIGxlbiA9IHZhbC5sZW5ndGg7XG4gICAgICBpZiAodmFsLmluZGV4T2YoJ1snKSA8IDAgfHwgdmFsLmxhc3RJbmRleE9mKCddJykgPCBsZW4gLSAxKSB7XG4gICAgICAgICAgaW5kZXggPSB2YWwubGFzdEluZGV4T2YoJy4nKTtcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgZXhwOiB2YWwuc2xpY2UoMCwgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAga2V5OiAnXCInICsgdmFsLnNsaWNlKGluZGV4ICsgMSkgKyAnXCInXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgZXhwOiB2YWwsXG4gICAgICAgICAgICAgICAgICBrZXk6IG51bGxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdHIgPSB2YWw7XG4gICAgICBpbmRleCA9IGV4cHJlc3Npb25Qb3MgPSBleHByZXNzaW9uRW5kUG9zID0gMDtcbiAgICAgIHdoaWxlICghZW9mKCkpIHtcbiAgICAgICAgICBjaHIgPSBuZXh0KCk7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgICAgICAgICBwYXJzZVN0cmluZyhjaHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChjaHIgPT09IDB4NWIpIHtcbiAgICAgICAgICAgICAgcGFyc2VCcmFja2V0KGNocik7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBleHA6IHZhbC5zbGljZSgwLCBleHByZXNzaW9uUG9zKSxcbiAgICAgICAgICBrZXk6IHZhbC5zbGljZShleHByZXNzaW9uUG9zICsgMSwgZXhwcmVzc2lvbkVuZFBvcylcbiAgICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHJldHVybiBzdHIuY2hhckNvZGVBdCgrK2luZGV4KTtcbiAgfVxuICBmdW5jdGlvbiBlb2YoKSB7XG4gICAgICByZXR1cm4gaW5kZXggPj0gbGVuO1xuICB9XG4gIGZ1bmN0aW9uIGlzU3RyaW5nU3RhcnQoY2hyKSB7XG4gICAgICByZXR1cm4gY2hyID09PSAweDIyIHx8IGNociA9PT0gMHgyNztcbiAgfVxuICBmdW5jdGlvbiBwYXJzZUJyYWNrZXQoY2hyKSB7XG4gICAgICB2Y
3XIgaW5CcmFja2V0ID0gMTtcbiAgICAgIGV4cHJlc3Npb25Qb3MgPSBpbmRleDtcbiAgICAgIHdoaWxlICghZW9mKCkpIHtcbiAgICAgICAgICBjaHIgPSBuZXh0KCk7XG4gICAgICAgICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgICAgICAgICBwYXJzZVN0cmluZyhjaHIpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNociA9PT0gMHg1YilcbiAgICAgICAgICAgICAgaW5CcmFja2V0Kys7XG4gICAgICAgICAgaWYgKGNociA9PT0gMHg1ZClcbiAgICAgICAgICAgICAgaW5CcmFja2V0LS07XG4gICAgICAgICAgaWYgKGluQnJhY2tldCA9PT0gMCkge1xuICAgICAgICAgICAgICBleHByZXNzaW9uRW5kUG9zID0gaW5kZXg7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBwYXJzZVN0cmluZyhjaHIpIHtcbiAgICAgIHZhciBzdHJpbmdRdW90ZSA9IGNocjtcbiAgICAgIHdoaWxlICghZW9mKCkpIHtcbiAgICAgICAgICBjaHIgPSBuZXh0KCk7XG4gICAgICAgICAgaWYgKGNociA9PT0gc3RyaW5nUXVvdGUpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgdmFyIHdhcm4kMTtcbiAgLy8gaW4gc29tZSBjYXNlcywgdGhlIGV2ZW50IHVzZWQgaGFzIHRvIGJlIGRldGVybWluZWQgYXQgcnVudGltZVxuICAvLyBzbyB3ZSB1c2VkIHNvbWUgcmVzZXJ2ZWQgdG9rZW5zIGR1cmluZyBjb21waWxlLlxuICB2YXIgUkFOR0VfVE9LRU4gPSAnX19yJztcbiAgdmFyIENIRUNLQk9YX1JBRElPX1RPS0VOID0gJ19fYyc7XG4gIGZ1bmN0aW9uIG1vZGVsJDEoZWwsIGRpciwgX3dhcm4pIHtcbiAgICAgIHdhcm4kMSA9IF93YXJuO1xuICAgICAgdmFyIHZhbHVlID0gZGlyLnZhbHVlO1xuICAgICAgdmFyIG1vZGlmaWVycyA9IGRpci5tb2RpZmllcnM7XG4gICAgICB2Y
3XIgdGFnID0gZWwudGFnO1xuICAgICAgdmFyIHR5cGUgPSBlbC5hdHRyc01hcC50eXBlO1xuICAgICAge1xuICAgICAgICAgIC8vIGlucHV0cyB3aXRoIHR5cGU9XCJmaWxlXCIgYXJlIHJlYWQgb25seSBhbmQgc2V0dGluZyB0aGUgaW5wdXQnc1xuICAgICAgICAgIC8vIHZhbHVlIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAgICAgICAgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgICAgd2FybiQxKFwiPFwiLmNvbmNhdChlbC50YWcsIFwiIHYtbW9kZWw9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIiB0eXBlPVxcXCJmaWxlXFxcIj46XFxuXCIpICtcbiAgICAgICAgICAgICAgICAgIFwiRmlsZSBpbnB1dHMgYXJlIHJlYWQgb25seS4gVXNlIGEgdi1vbjpjaGFuZ2UgbGlzdGVuZXIgaW5zdGVhZC5cIiwgZWwucmF3QXR0cnNNYXBbJ3YtbW9kZWwnXSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGVsLmNvbXBvbmVudCkge1xuICAgICAgICAgIGdlbkNvbXBvbmVudE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICAgICAgICAvLyBjb21wb25lbnQgdi1tb2RlbCBkb2Vzbid0IG5lZWQgZXh0cmEgcnVudGltZVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgICBnZW5TZWxlY3QoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICBnZW5DaGVja2JveE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgICAgZ2VuUmFkaW9Nb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAndGV4dGFyZWEnKSB7XG4gICAgICAgICAgZ2VuRGVmYXVsdE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKCFjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICAgICAgZ2VuQ29tcG9uZW50TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICAgICAgICAgIC8vIGNvbXBvbmVudCB2LW1vZGVsIGRvZXNuJ3QgbmVlZCBleHRyYSBydW50aW1lXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgd2FybiQxKFwiPFwiLmNvbmNhdChlbC50YWcsIFwiIHYtbW9kZWw9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIj46IFwiKSArXG4gICAgICAgICAgICAgIFwidi1tb2RlbCBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZWxlbWVudCB0eX
3BlLiBcIiArXG4gICAgICAgICAgICAgIFwiSWYgeW91IGFyZSB3b3JraW5nIHdpdGggY29udGVudGVkaXRhYmxlLCBpdCdzIHJlY29tbWVuZGVkIHRvIFwiICtcbiAgICAgICAgICAgICAgJ3dyYXAgYSBsaWJyYXJ5IGRlZGljYXRlZCBmb3IgdGhhdCBwdXJwb3NlIGluc2lkZSBhIGN1c3RvbSBjb21wb25lbnQuJywgZWwucmF3QXR0cnNNYXBbJ3YtbW9kZWwnXSk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgcnVudGltZSBkaXJlY3RpdmUgbWV0YWRhdGFcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIGdlbkNoZWNrYm94TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpIHtcbiAgICAgIHZhciBudW1iZXIgPSBtb2RpZmllcnMgJiYgbW9kaWZpZXJzLm51bWJlcjtcbiAgICAgIHZhciB2YWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3ZhbHVlJykgfHwgJ251bGwnO1xuICAgICAgdmFyIHRydWVWYWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3RydWUtdmFsdWUnKSB8fCAndHJ1ZSc7XG4gICAgICB2YXIgZmFsc2VWYWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2ZhbHNlLXZhbHVlJykgfHwgJ2ZhbHNlJztcbiAgICAgIGFkZFByb3AoZWwsICdjaGVja2VkJywgXCJBcnJheS5pc0FycmF5KFwiLmNvbmNhdCh2YWx1ZSwgXCIpXCIpICtcbiAgICAgICAgICBcIj9faShcIi5jb25jYXQodmFsdWUsIFwiLFwiKS5jb25jYXQodmFsdWVCaW5kaW5nLCBcIik+LTFcIikgK1xuICAgICAgICAgICh0cnVlVmFsdWVCaW5kaW5nID09PSAndHJ1ZSdcbiAgICAgICAgICAgICAgPyBcIjooXCIuY29uY2F0KHZhbHVlLCBcIilcIilcbiAgICAgICAgICAgICAgOiBcIjpfcShcIi5jb25jYXQodmFsdWUsIFwiLFwiKS5jb25jYXQodHJ1ZVZhbHVlQmluZGluZywgXCIpXCIpKSk7XG4gICAgICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJywgXCJ2YXIgJCRhPVwiLmNvbmNhdCh2YWx1ZSwgXCIsXCIpICtcbiAgICAgICAgICAnJCRlbD0kZXZlbnQudGFyZ2V0LCcgK1xuICAgICAgICAgIFwiJCRjPSQkZWwuY2hlY2tlZD8oXCIuY29uY2F0KHRydWVWYWx1ZUJpbmRpbmcsIFwiKTooXCIpLmNvbmNhdChmYWxzZVZhbHVlQmluZGluZywgXCIpO1wiKSArXG4gICAgICAgICAgJ2lmKEFycmF
35LmlzQXJyYXkoJCRhKSl7JyArXG4gICAgICAgICAgXCJ2YXIgJCR2PVwiLmNvbmNhdChudW1iZXIgPyAnX24oJyArIHZhbHVlQmluZGluZyArICcpJyA6IHZhbHVlQmluZGluZywgXCIsXCIpICtcbiAgICAgICAgICAnJCRpPV9pKCQkYSwkJHYpOycgK1xuICAgICAgICAgIFwiaWYoJCRlbC5jaGVja2VkKXskJGk8MCYmKFwiLmNvbmNhdChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYS5jb25jYXQoWyQkdl0pJyksIFwiKX1cIikgK1xuICAgICAgICAgIFwiZWxzZXskJGk+LTEmJihcIi5jb25jYXQoZ2VuQXNzaWdubWVudENvZGUodmFsdWUsICckJGEuc2xpY2UoMCwkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpKzEpKScpLCBcIil9XCIpICtcbiAgICAgICAgICBcIn1lbHNle1wiLmNvbmNhdChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYycpLCBcIn1cIiksIG51bGwsIHRydWUpO1xuICB9XG4gIGZ1bmN0aW9uIGdlblJhZGlvTW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpIHtcbiAgICAgIHZhciBudW1iZXIgPSBtb2RpZmllcnMgJiYgbW9kaWZpZXJzLm51bWJlcjtcbiAgICAgIHZhciB2YWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3ZhbHVlJykgfHwgJ251bGwnO1xuICAgICAgdmFsdWVCaW5kaW5nID0gbnVtYmVyID8gXCJfbihcIi5jb25jYXQodmFsdWVCaW5kaW5nLCBcIilcIikgOiB2YWx1ZUJpbmRpbmc7XG4gICAgICBhZGRQcm9wKGVsLCAnY2hlY2tlZCcsIFwiX3EoXCIuY29uY2F0KHZhbHVlLCBcIixcIikuY29uY2F0KHZhbHVlQmluZGluZywgXCIpXCIpKTtcbiAgICAgIGFkZEhhbmRsZXIoZWwsICdjaGFuZ2UnLCBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgdmFsdWVCaW5kaW5nKSwgbnVsbCwgdHJ1ZSk7XG4gIH1cbiAgZnVuY3Rpb24gZ2VuU2VsZWN0KGVsLCB2YWx1ZSwgbW9kaWZpZXJzKSB7XG4gICAgICB2Y
3XIgbnVtYmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XG4gICAgICB2YXIgc2VsZWN0ZWRWYWwgPSBcIkFycmF5LnByb3RvdHlwZS5maWx0ZXJcIiArXG4gICAgICAgICAgXCIuY2FsbCgkZXZlbnQudGFyZ2V0Lm9wdGlvbnMsZnVuY3Rpb24obyl7cmV0dXJuIG8uc2VsZWN0ZWR9KVwiICtcbiAgICAgICAgICBcIi5tYXAoZnVuY3Rpb24obyl7dmFyIHZhbCA9IFxcXCJfdmFsdWVcXFwiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWU7XCIgK1xuICAgICAgICAgIFwicmV0dXJuIFwiLmNvbmNhdChudW1iZXIgPyAnX24odmFsKScgOiAndmFsJywgXCJ9KVwiKTtcbiAgICAgIHZhciBhc3NpZ25tZW50ID0gJyRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXSc7XG4gICAgICB2YXIgY29kZSA9IFwidmFyICQkc2VsZWN0ZWRWYWwgPSBcIi5jb25jYXQoc2VsZWN0ZWRWYWwsIFwiO1wiKTtcbiAgICAgIGNvZGUgPSBcIlwiLmNvbmNhdChjb2RlLCBcIiBcIikuY29uY2F0KGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCBhc3NpZ25tZW50KSk7XG4gICAgICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJywgY29kZSwgbnVsbCwgdHJ1ZSk7XG4gIH1cbiAgZnVuY3Rpb24gZ2VuRGVmYXVsdE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKSB7XG4gICAgICB2YXIgdHlwZSA9IGVsLmF0dHJzTWFwLnR5cGU7XG4gICAgICAvLyB3YXJuIGlmIHYtYmluZDp2YWx1ZSBjb25mbGljdHMgd2l0aCB2LW1vZGVsXG4gICAgICAvLyBleGNlcHQgZm9yIGlucHV0cyB3aXRoIHYtYmluZDp0eXBlXG4gICAgICB7XG4gICAgICAgICAgdmFyIHZhbHVlXzEgPSBlbC5hdHRyc01hcFsndi1iaW5kOnZhbHVlJ10gfHwgZWwuYXR0cnNNYXBbJzp2YWx1ZSddO1xuICAgICAgICAgIHZhciB0eXBlQmluZGluZyA9IGVsLmF0dHJzTWFwWyd2LWJpbmQ6dHlwZSddIHx8IGVsLmF0dHJzTWFwWyc6dHlwZSddO1xuICAgICAgICAgIGlmICh2YWx1ZV8xICYmICF0eXBlQmluZGluZykge1xuICAgICAgICAgICAgICB2Y
3XIgYmluZGluZyA9IGVsLmF0dHJzTWFwWyd2LWJpbmQ6dmFsdWUnXSA/ICd2LWJpbmQ6dmFsdWUnIDogJzp2YWx1ZSc7XG4gICAgICAgICAgICAgIHdhcm4kMShcIlwiLmNvbmNhdChiaW5kaW5nLCBcIj1cXFwiXCIpLmNvbmNhdCh2YWx1ZV8xLCBcIlxcXCIgY29uZmxpY3RzIHdpdGggdi1tb2RlbCBvbiB0aGUgc2FtZSBlbGVtZW50IFwiKSArXG4gICAgICAgICAgICAgICAgICAnYmVjYXVzZSB0aGUgbGF0dGVyIGFscmVhZHkgZXhwYW5kcyB0byBhIHZhbHVlIGJpbmRpbmcgaW50ZXJuYWxseScsIGVsLnJhd0F0dHJzTWFwW2JpbmRpbmddKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgX2EgPSBtb2RpZmllcnMgfHwge30sIGxhenkgPSBfYS5sYXp5LCBudW1iZXIgPSBfYS5udW1iZXIsIHRyaW0gPSBfYS50cmltO1xuICAgICAgdmFyIG5lZWRDb21wb3NpdGlvbkd1YXJkID0gIWxhenkgJiYgdHlwZSAhPT0gJ3JhbmdlJztcbiAgICAgIHZhciBldmVudCA9IGxhenkgPyAnY2hhbmdlJyA6IHR5cGUgPT09ICdyYW5nZScgPyBSQU5HRV9UT0tFTiA6ICdpbnB1dCc7XG4gICAgICB2YXIgdmFsdWVFeHByZXNzaW9uID0gJyRldmVudC50YXJnZXQudmFsdWUnO1xuICAgICAgaWYgKHRyaW0pIHtcbiAgICAgICAgICB2YWx1ZUV4cHJlc3Npb24gPSBcIiRldmVudC50YXJnZXQudmFsdWUudHJpbSgpXCI7XG4gICAgICB9XG4gICAgICBpZiAobnVtYmVyKSB7XG4gICAgICAgICAgdmFsdWVFeHByZXNzaW9uID0gXCJfbihcIi5jb25jYXQodmFsdWVFeHByZXNzaW9uLCBcIilcIik7XG4gICAgICB9XG4gICAgICB2Y
3XIgY29kZSA9IGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCB2YWx1ZUV4cHJlc3Npb24pO1xuICAgICAgaWYgKG5lZWRDb21wb3NpdGlvbkd1YXJkKSB7XG4gICAgICAgICAgY29kZSA9IFwiaWYoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpcmV0dXJuO1wiLmNvbmNhdChjb2RlKTtcbiAgICAgIH1cbiAgICAgIGFkZFByb3AoZWwsICd2YWx1ZScsIFwiKFwiLmNvbmNhdCh2YWx1ZSwgXCIpXCIpKTtcbiAgICAgIGFkZEhhbmRsZXIoZWwsIGV2ZW50LCBjb2RlLCBudWxsLCB0cnVlKTtcbiAgICAgIGlmICh0cmltIHx8IG51bWJlcikge1xuICAgICAgICAgIGFkZEhhbmRsZXIoZWwsICdibHVyJywgJyRmb3JjZVVwZGF0ZSgpJyk7XG4gICAgICB9XG4gIH1cblxuICAvLyBub3JtYWxpemUgdi1tb2RlbCBldmVudCB0b2tlbnMgdGhhdCBjYW4gb25seSBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUuXG4gIC8vIGl0J3MgaW1wb3J0YW50IHRvIHBsYWNlIHRoZSBldmVudCBhcyB0aGUgZmlyc3QgaW4gdGhlIGFycmF5IGJlY2F1c2VcbiAgLy8gdGhlIHdob2xlIHBvaW50IGlzIGVuc3VyaW5nIHRoZSB2LW1vZGVsIGNhbGxiYWNrIGdldHMgY2FsbGVkIGJlZm9yZVxuICAvLyB1c2VyLWF0dGFjaGVkIGhhbmRsZXJzLlxuICBmdW5jdGlvbiBub3JtYWxpemVFdmVudHMob24pIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGlzRGVmKG9uW1JBTkdFX1RPS0VOXSkpIHtcbiAgICAgICAgICAvLyBJRSBpbnB1dFt0eXBlPXJhbmdlXSBvbmx5IHN1cHBvcnRzIGBjaGFuZ2VgIGV2ZW50XG4gICAgICAgICAgdmFyIGV2ZW50XzEgPSBpc0lFID8gJ2NoYW5nZScgOiAnaW5wdXQnO1xuICAgICAgICAgIG9uW2V2ZW50XzFdID0gW10uY29uY2F0KG9uW1JBTkdFX1RPS0VOXSwgb25bZXZlbnRfMV0gfHwgW10pO1xuICAgICAgICAgIGRlbGV0ZSBvbltSQU5HRV9UT0tFTl07XG4gICAgICB9XG4gICAgICAvLyBUaGlzIHdhcyBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGZpeCAjNDUyMSBidXQgbm8gbG9uZ2VyIG5lY2Vzc2FyeVxuICAgICAgLy8gYWZ0ZXIgMi41LiBLZWVwaW5nIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0IHdpdGggZ2VuZXJhdGVkIGNvZGUgZnJvbSA8IDIuNFxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXNEZWYob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dKSkge1xuICAgICAgICAgIG9uLmNoYW5nZSA9IFtdLmNvbmNhdChvbltDSEVDS0JPWF9SQURJT19UT0tFTl0sIG9uLmNoYW5nZSB8fCBbXSk7XG4gICAgICAgICAgZGVsZXRlIG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXTtcbiAgICAgIH1cbiAgfVxuICB2YXIgdGFyZ2V0O1xuICBmdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlcihldmVudCwgaGFuZGxlciwgY2FwdHVyZSkge1xuICAgICAgdmFyIF90YXJnZXQgPSB0YXJnZXQ7IC8vIHNhdmUgY3VycmVudCB0YXJnZXQgZWxlbWVudCBpbiBjbG9zdXJlXG4gICAgICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIoKSB7XG4gICAgICAgICAgdmFyIHJlcyA9IGhhbmRsZXIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJlbW92ZShldmVudCwgb25jZUhhbmRsZXIsIGNhcHR1cmUsIF90YXJnZXQpO1xuICAgICAgICAgIH1cbiAgICAgIH07XG4gIH1cbiAgLy8gIzk0NDY6IEZpcmVmb3ggPD0gNTMgKGluIHBhcnRpY3VsYXIsIEVTUiA1MikgaGFzIGluY29ycmVjdCBFdmVudC50aW1lU3RhbXBcbiAgLy8gaW1wbGVtZW50YXRpb24gYW5kIGRvZXMgbm90IGZpcmUgbWljcm90YXNrcyBpbiBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLCBzb1xuICAvLyBzYWZlIHRvIGV4Y2x1ZGUuXG4gIHZhciB1c2VNaWNyb3Rhc2tGaXggPSBpc1VzaW5nTWljcm9UYXNrICYmICEoaXNGRiAmJiBOdW1iZXIoaXNGRlsxXSkgPD0gNTMpO1xuICBmdW5jdGlvbiBhZGQobmFtZSwgaGFuZGxlciwgY2FwdHVyZSwgcGFzc2l2ZSkge1xuICAgICAgLy8gYXN5bmMgZWRnZSBjYXNlICM2NTY2OiBpbm5lciBjbGljayBldmVudCB0cmlnZ2VycyBwYXRjaCwgZXZlbnQgaGFuZGxlclxuICAgICAgLy8gYXR0YWNoZWQgdG8gb3V0ZXIgZWxlbWVudCBkdXJpbmcgcGF0Y2gsIGFuZCB0cmlnZ2VyZWQgYWdhaW4uIFRoaXNcbiAgICAgIC8vIGhhcHBlbnMgYmVjYXVzZSBicm93c2VycyBmaXJlIG1pY3JvdGFzayB0aWNrcyBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLlxuICAgICAgLy8gdGhlIHNvbHV0aW9uIGlzIHNpbXBsZTogd2Ugc2F2ZSB0aGUgdGltZXN0YW1wIHdoZW4gYSBoYW5kbGVyIGlzIGF0dGFjaGVkLFxuICAgICAgLy8gYW5kIHRoZSBoYW5kbGVyIHdvdWxkIG9ubHkgZmlyZSBpZiB0aGUgZXZlbnQgcGFzc2VkIHRvIGl0IHdhcyBmaXJlZFxuICAgICAgLy8gQUZURVIgaXQgd2FzIGF0dGFjaGVkLlxuICAgICAgaWYgKHVzZU1pY3JvdGFza0ZpeCkge1xuICAgICAgICAgIHZhciBhdHRhY2hlZFRpbWVzdGFtcF8xID0gY3VycmVudEZsdXNoVGltZXN0YW1wO1xuICAgICAgICAgIHZhciBvcmlnaW5hbF8xID0gaGFuZGxlcjtcbiAgICAgICAgICAvL0B0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICBoYW5kbGVyID0gb3JpZ2luYWxfMS5fd3JhcHBlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgLy8gbm8gYnViYmxpbmcsIHNob3VsZCBhbHdheXMgZmlyZS5cbiAgICAgICAgICAgICAgLy8gdGhpcyBpcyBqdXN0IGEgc2FmZXR5IG5ldCBpbiBjYXNlIGV2ZW50LnRpbWVTdGFtcCBpcyB1bnJlbGlhYmxlIGluXG4gICAgICAgICAgICAgIC8vIGNlcnRhaW4gd2VpcmQgZW52aXJvbm1lbnRzLi4uXG4gICAgICAgICAgICAgIGUudGFyZ2V0ID09PSBlLmN1cnJlbnRUYXJnZXQgfHxcbiAgICAgICAgICAgICAgICAgIC8vIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGhhbmRsZXIgYXR0YWNobWVudFxuICAgICAgICAgICAgICAgICAgZS50aW1lU3RhbXAgPj0gYXR0YWNoZWRUaW1lc3RhbXBfMSB8fFxuICAgICAgICAgICAgICAgICAgLy8gYmFpbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgaGF2ZSBidWdneSBldmVudC50aW1lU3RhbXAgaW1wbGVtZW50YXRpb25zXG4gICAgICAgICAgICAgICAgICAvLyAjOTQ2MiBpT1MgOSBidWc6IGV2ZW50LnRpbWVTdGFtcCBpcyAwIGFmdGVyIGhpc3RvcnkucHVzaFN0YXRlXG4gICAgICAgICAgICAgICAgICAvLyAjOTY4MSBRdFdlYkVuZ2luZSBldmVudC50aW1lU3RhbXAgaXMgbmVnYXRpdmUgdmFsdWVcbiAgICAgICAgICAgICAgICAgIGUudGltZVN0YW1wIDw9IDAgfHxcbiAgICAgICAgICAgICAgICAgIC8vICM5NDQ4IGJhaWwgaWYgZXZlbnQgaXMgZmlyZWQgaW4gYW5vdGhlciBkb2N1bWVudCBpbiBhIG11bHRpLXBhZ2VcbiAgICAgICAgICAgICAgICAgIC8vIGVsZWN0cm9uL253LmpzIGFwcCwgc2luY2UgZXZlbnQudGltZVN0YW1wIHdpbGwgYmUgdXNpbmcgYSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0aW5nIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgZS50YXJnZXQub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgI
3HJldHVybiBvcmlnaW5hbF8xLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgaGFuZGxlciwgc3VwcG9ydHNQYXNzaXZlID8geyBjYXB0dXJlOiBjYXB0dXJlLCBwYXNzaXZlOiBwYXNzaXZlIH0gOiBjYXB0dXJlKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmUobmFtZSwgaGFuZGxlciwgY2FwdHVyZSwgX3RhcmdldCkge1xuICAgICAgKF90YXJnZXQgfHwgdGFyZ2V0KS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIFxuICAgICAgLy9AdHMtZXhwZWN0LWVycm9yXG4gICAgICBoYW5kbGVyLl93cmFwcGVyIHx8IGhhbmRsZXIsIGNhcHR1cmUpO1xuICB9XG4gIGZ1bmN0aW9uIHVwZGF0ZURPTUxpc3RlbmVycyhvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICAgIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEub24pICYmIGlzVW5kZWYodm5vZGUuZGF0YS5vbikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgb24gPSB2bm9kZS5kYXRhLm9uIHx8IHt9O1xuICAgICAgdmFyIG9sZE9uID0gb2xkVm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgICAgIC8vIHZub2RlIGlzIGVtcHR5IHdoZW4gcmVtb3ZpbmcgYWxsIGxpc3RlbmVycyxcbiAgICAgIC8vIGFuZCB1c2Ugb2xkIHZub2RlIGRvbSBlbGVtZW50XG4gICAgICB0YXJnZXQgPSB2bm9kZS5lbG0gfHwgb2xkVm5vZGUuZWxtO1xuICAgICAgbm9ybWFsaXplRXZlbnRzKG9uKTtcbiAgICAgIHVwZGF0ZUxpc3RlbmVycyhvbiwgb2xkT24sIGFkZCwgcmVtb3ZlLCBjcmVhdGVPbmNlSGFuZGxlciwgdm5vZGUuY29udGV4dCk7XG4gICAgICB0YXJnZXQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgdmFyIGV2ZW50cyA9IHtcbiAgICAgIGNyZWF0ZTogdXBkYXRlRE9NTGlzdGVuZXJzLFxuICAgICAgdXBkYXRlOiB1cGRhdGVET01MaXN0ZW5lcnMsXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVtcHR5Tm9kZSBoYXMgYWN0dWFsbHkgZGF0YVxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gKHZub2RlKSB7IHJldHVybiB1cGRhdGVET01MaXN0ZW5lcnModm5vZGUsIGVtcHR5Tm9kZSk7IH1cbiAgfTtcblxuICB2YXIgc3ZnQ29udGFpbmVyO1xuICBmdW5jdGlvbiB1cGRhdGVET01Qcm9wcyhvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICAgIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEuZG9tUHJvcHMpICYmIGlzVW5kZWYodm5vZGUuZGF0YS5kb21Qcm9wcykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2Y
3XIga2V5LCBjdXI7XG4gICAgICB2YXIgZWxtID0gdm5vZGUuZWxtO1xuICAgICAgdmFyIG9sZFByb3BzID0gb2xkVm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgICAgIHZhciBwcm9wcyA9IHZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gICAgICAvLyBjbG9uZSBvYnNlcnZlZCBvYmplY3RzLCBhcyB0aGUgdXNlciBwcm9iYWJseSB3YW50cyB0byBtdXRhdGUgaXRcbiAgICAgIGlmIChpc0RlZihwcm9wcy5fX29iX18pIHx8IGlzVHJ1ZShwcm9wcy5fdl9hdHRyX3Byb3h5KSkge1xuICAgICAgICAgIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyA9IGV4dGVuZCh7fSwgcHJvcHMpO1xuICAgICAgfVxuICAgICAgZm9yIChrZXkgaW4gb2xkUHJvcHMpIHtcbiAgICAgICAgICBpZiAoIShrZXkgaW4gcHJvcHMpKSB7XG4gICAgICAgICAgICAgIGVsbVtrZXldID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICBjdXIgPSBwcm9wc1trZXldO1xuICAgICAgICAgIC8vIGlnbm9yZSBjaGlsZHJlbiBpZiB0aGUgbm9kZSBoYXMgdGV4dENvbnRlbnQgb3IgaW5uZXJIVE1MLFxuICAgICAgICAgIC8vIGFzIHRoZXNlIHdpbGwgdGhyb3cgYXdheSBleGlzdGluZyBET00gbm9kZXMgYW5kIGNhdXNlIHJlbW92YWwgZXJyb3JzXG4gICAgICAgICAgLy8gb24gc3Vic2VxdWVudCBwYXRjaGVzICgjMzM2MClcbiAgICAgICAgICBpZiAoa2V5ID09PSAndGV4dENvbnRlbnQnIHx8IGtleSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgICAgICAgICAgaWYgKHZub2RlLmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgICAgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgaWYgKGN1ciA9PT0gb2xkUHJvcHNba2V5XSlcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAvLyAjNjYwMSB3b3JrIGFyb3VuZCBDaHJvbWUgdmVyc2lvbiA8PSA1NSBidWcgd2hlcmUgc2luZ2xlIHRleHROb2RlXG4gICAgICAgICAgICAgIC8vIHJlcGxhY2VkIGJ5IGlubmVySFRNTC90ZXh0Q29udGVudCByZXRhaW5zIGl0cyBwYXJlbnROb2RlIHByb3BlcnR5XG4gICAgICAgICAgICAgIGlmIChlbG0uY2hpbGROb2Rlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uY2hpbGROb2Rlc1swXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3ZhbHVlJyAmJiBlbG0udGFnTmFtZSAhPT0gJ1BST0dSRVNTJykge1xuICAgICAgICAgICAgICAvLyBzdG9yZSB2YWx1ZSBhcyBfdmFsdWUgYXMgd2VsbCBzaW5jZVxuICAgICAgICAgICAgICAvLyBub24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIHN0cmluZ2lmaWVkXG4gICAgICAgICAgICAgIGVsbS5fdmFsdWUgPSBjdXI7XG4gICAgICAgICAgICAgIC8vIGF2b2lkIHJlc2V0dGluZyBjdXJzb3IgcG9zaXRpb24gd2hlbiB2YWx1ZSBpcyB0aGUgc2FtZVxuICAgICAgICAgICAgICB2Y
3XIgc3RyQ3VyID0gaXNVbmRlZihjdXIpID8gJycgOiBTdHJpbmcoY3VyKTtcbiAgICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVZhbHVlKGVsbSwgc3RyQ3VyKSkge1xuICAgICAgICAgICAgICAgICAgZWxtLnZhbHVlID0gc3RyQ3VyO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gJ2lubmVySFRNTCcgJiZcbiAgICAgICAgICAgICAgaXNTVkcoZWxtLnRhZ05hbWUpICYmXG4gICAgICAgICAgICAgIGlzVW5kZWYoZWxtLmlubmVySFRNTCkpIHtcbiAgICAgICAgICAgICAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGlubmVySFRNTCBmb3IgU1ZHIGVsZW1lbnRzXG4gICAgICAgICAgICAgIHN2Z0NvbnRhaW5lciA9IHN2Z0NvbnRhaW5lciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgc3ZnQ29udGFpbmVyLmlubmVySFRNTCA9IFwiPHN2Zz5cIi5jb25jYXQoY3VyLCBcIjwvc3ZnPlwiKTtcbiAgICAgICAgICAgICAgdmFyIHN2ZyA9IHN2Z0NvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICAgICAgICB3aGlsZSAoZWxtLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgd2hpbGUgKHN2Zy5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICBlbG0uYXBwZW5kQ2hpbGQoc3ZnLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIC8vIHNraXAgdGhlIHVwZGF0ZSBpZiBvbGQgYW5kIG5ldyBWRE9NIHN0YXRlIGlzIHRoZSBzYW1lLlxuICAgICAgICAgIC8vIGB2YWx1ZWAgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5IGJlY2F1c2UgdGhlIERPTSB2YWx1ZSBtYXkgYmUgdGVtcG9yYXJpbHlcbiAgICAgICAgICAvLyBvdXQgb2Ygc3luYyB3aXRoIFZET00gc3RhdGUgZHVlIHRvIGZvY3VzLCBjb21wb3NpdGlvbiBhbmQgbW9kaWZpZXJzLlxuICAgICAgICAgIC8vIFRoaXMgICM0NTIxIGJ5IHNraXBwaW5nIHRoZSB1bm5lY2Vzc2FyeSBgY2hlY2tlZGAgdXBkYXRlLlxuICAgICAgICAgIGN1ciAhPT0gb2xkUHJvcHNba2V5XSkge1xuICAgICAgICAgICAgICAvLyBzb21lIHByb3BlcnR5IHVwZGF0ZXMgY2FuIHRocm93XG4gICAgICAgICAgICAgIC8vIGUuZy4gYHZhbHVlYCBvbiA8cHJvZ3Jlc3M+IHcvIG5vbi1maW5pdGUgdmFsdWVcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGVsbVtrZXldID0gY3VyO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhdGNoIChlKSB7IH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc2hvdWxkVXBkYXRlVmFsdWUoZWxtLCBjaGVja1ZhbCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgIC8vQHRzLWV4cGVjdC1lcnJvclxuICAgICAgIWVsbS5jb21wb3NpbmcgJiZcbiAgICAgICAgICAoZWxtLnRhZ05hbWUgPT09ICdPUFRJT04nIHx8XG4gICAgICAgICAgICAgIGlzTm90SW5Gb2N1c0FuZERpcnR5KGVsbSwgY2hlY2tWYWwpIHx8XG4gICAgICAgICAgICAgIGlzRGlydHlXaXRoTW9kaWZpZXJzKGVsbSwgY2hlY2tWYWwpKSk7XG4gIH1cbiAgZnVuY3Rpb24gaXNOb3RJbkZvY3VzQW5kRGlydHkoZWxtLCBjaGVja1ZhbCkge1xuICAgICAgLy8gcmV0dXJuIHRydWUgd2hlbiB0ZXh0Ym94ICgubnVtYmVyIGFuZCAudHJpbSkgbG9zZXMgZm9jdXMgYW5kIGl0cyB2YWx1ZSBpc1xuICAgICAgLy8gbm90IGVxdWFsIHRvIHRoZSB1cGRhdGVkIHZhbHVlXG4gICAgICB2Y
3XIgbm90SW5Gb2N1cyA9IHRydWU7XG4gICAgICAvLyAjNjE1N1xuICAgICAgLy8gd29yayBhcm91bmQgSUUgYnVnIHdoZW4gYWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW4gYW4gaWZyYW1lXG4gICAgICB0cnkge1xuICAgICAgICAgIG5vdEluRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBlbG07XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkgeyB9XG4gICAgICByZXR1cm4gbm90SW5Gb2N1cyAmJiBlbG0udmFsdWUgIT09IGNoZWNrVmFsO1xuICB9XG4gIGZ1bmN0aW9uIGlzRGlydHlXaXRoTW9kaWZpZXJzKGVsbSwgbmV3VmFsKSB7XG4gICAgICB2YXIgdmFsdWUgPSBlbG0udmFsdWU7XG4gICAgICB2YXIgbW9kaWZpZXJzID0gZWxtLl92TW9kaWZpZXJzOyAvLyBpbmplY3RlZCBieSB2LW1vZGVsIHJ1bnRpbWVcbiAgICAgIGlmIChpc0RlZihtb2RpZmllcnMpKSB7XG4gICAgICAgICAgaWYgKG1vZGlmaWVycy5udW1iZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKSAhPT0gdG9OdW1iZXIobmV3VmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1vZGlmaWVycy50cmltKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50cmltKCkgIT09IG5ld1ZhbC50cmltKCk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlICE9PSBuZXdWYWw7XG4gIH1cbiAgdmFyIGRvbVByb3BzID0ge1xuICAgICAgY3JlYXRlOiB1cGRhdGVET01Qcm9wcyxcbiAgICAgIHVwZGF0ZTogdXBkYXRlRE9NUHJvcHNcbiAgfTtcblxuICB2YXIgcGFyc2VTdHlsZVRleHQgPSBjYWNoZWQoZnVuY3Rpb24gKGNzc1RleHQpIHtcbiAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgIHZhciBsaXN0RGVsaW1pdGVyID0gLzsoPyFbXihdKlxcKSkvZztcbiAgICAgIHZhciBwcm9wZXJ0eURlbGltaXRlciA9IC86KC4rKS87XG4gICAgICBjc3NUZXh0LnNwbGl0KGxpc3REZWxpbWl0ZXIpLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICB2Y
3XIgdG1wID0gaXRlbS5zcGxpdChwcm9wZXJ0eURlbGltaXRlcik7XG4gICAgICAgICAgICAgIHRtcC5sZW5ndGggPiAxICYmIChyZXNbdG1wWzBdLnRyaW0oKV0gPSB0bXBbMV0udHJpbSgpKTtcbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXM7XG4gIH0pO1xuICAvLyBtZXJnZSBzdGF0aWMgYW5kIGR5bmFtaWMgc3R5bGUgZGF0YSBvbiB0aGUgc2FtZSB2bm9kZVxuICBmdW5jdGlvbiBub3JtYWxpemVTdHlsZURhdGEoZGF0YSkge1xuICAgICAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKGRhdGEuc3R5bGUpO1xuICAgICAgLy8gc3RhdGljIHN0eWxlIGlzIHByZS1wcm9jZXNzZWQgaW50byBhbiBvYmplY3QgZHVyaW5nIGNvbXBpbGF0aW9uXG4gICAgICAvLyBhbmQgaXMgYWx3YXlzIGEgZnJlc2ggb2JqZWN0LCBzbyBpdCdzIHNhZmUgdG8gbWVyZ2UgaW50byBpdFxuICAgICAgcmV0dXJuIGRhdGEuc3RhdGljU3R5bGUgPyBleHRlbmQoZGF0YS5zdGF0aWNTdHlsZSwgc3R5bGUpIDogc3R5bGU7XG4gIH1cbiAgLy8gbm9ybWFsaXplIHBvc3NpYmxlIGFycmF5IC8gc3RyaW5nIHZhbHVlcyBpbnRvIE9iamVjdFxuICBmdW5jdGlvbiBub3JtYWxpemVTdHlsZUJpbmRpbmcoYmluZGluZ1N0eWxlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShiaW5kaW5nU3R5bGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRvT2JqZWN0KGJpbmRpbmdTdHlsZSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGJpbmRpbmdTdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VTdHlsZVRleHQoYmluZGluZ1N0eWxlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiaW5kaW5nU3R5bGU7XG4gIH1cbiAgLyoqXG4gICAqIHBhcmVudCBjb21wb25lbnQgc3R5bGUgc2hvdWxkIGJlIGFmdGVyIGNoaWxkJ3NcbiAgICogc28gdGhhdCBwYXJlbnQgY29tcG9uZW50J3Mgc3R5bGUgY291bGQgb3ZlcnJpZGUgaXRcbiAgICovXG4gIGZ1bmN0aW9uIGdldFN0eWxlKHZub2RlLCBjaGVja0NoaWxkKSB7XG4gICAgICB2Y
3XIgcmVzID0ge307XG4gICAgICB2YXIgc3R5bGVEYXRhO1xuICAgICAgaWYgKGNoZWNrQ2hpbGQpIHtcbiAgICAgICAgICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XG4gICAgICAgICAgd2hpbGUgKGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlICYmXG4gICAgICAgICAgICAgICAgICBjaGlsZE5vZGUuZGF0YSAmJlxuICAgICAgICAgICAgICAgICAgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShjaGlsZE5vZGUuZGF0YSkpKSB7XG4gICAgICAgICAgICAgICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEodm5vZGUuZGF0YSkpKSB7XG4gICAgICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICAgIH1cbiAgICAgIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHBhcmVudE5vZGUucGFyZW50IG5vdCBWTm9kZVdpdGhEYXRhXG4gICAgICB3aGlsZSAoKHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudCkpIHtcbiAgICAgICAgICBpZiAocGFyZW50Tm9kZS5kYXRhICYmIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEocGFyZW50Tm9kZS5kYXRhKSkpIHtcbiAgICAgICAgICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgdmFyIGNzc1ZhclJFID0gL14tLS87XG4gIHZhciBpbXBvcnRhbnRSRSA9IC9cXHMqIWltcG9ydGFudCQvO1xuICB2YXIgc2V0UHJvcCA9IGZ1bmN0aW9uIChlbCwgbmFtZSwgdmFsKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChjc3NWYXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgZWwuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGltcG9ydGFudFJFLnRlc3QodmFsKSkge1xuICAgICAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KGh5cGhlbmF0ZShuYW1lKSwgdmFsLnJlcGxhY2UoaW1wb3J0YW50UkUsICcnKSwgJ2ltcG9ydGFudCcpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplKG5hbWUpO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgICAgLy8gU3VwcG9ydCB2YWx1ZXMgYXJyYXkgY3JlYXRlZCBieSBhdXRvcHJlZml4ZXIsIGUuZy5cbiAgICAgICAgICAgICAgLy8ge2Rpc3BsYXk6IFtcIi13ZWJraXQtYm94XCIsIFwiLW1zLWZsZXhib3hcIiwgXCJmbGV4XCJdfVxuICAgICAgICAgICAgICAvLyBTZXQgdGhlbSBvbmUgYnkgb25lLCBhbmQgdGhlIGJyb3dzZXIgd2lsbCBvbmx5IHNldCB0aG9zZSBpdCBjYW4gcmVjb2duaXplXG4gICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB2YWwubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgIGVsLnN0eWxlW25vcm1hbGl6ZWROYW1lXSA9IHZhbFtpXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfTtcbiAgdmFyIHZlbmRvck5hbWVzID0gWydXZWJraXQnLCAnTW96JywgJ21zJ107XG4gIHZhciBlbXB0eVN0eWxlO1xuICB2YXIgbm9ybWFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICBlbXB0eVN0eWxlID0gZW1wdHlTdHlsZSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTtcbiAgICAgIHByb3AgPSBjYW1lbGl6ZShwcm9wKTtcbiAgICAgIGlmIChwcm9wICE9PSAnZmlsdGVyJyAmJiBwcm9wIGluIGVtcHR5U3R5bGUpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcDtcbiAgICAgIH1cbiAgICAgIHZhciBjYXBOYW1lID0gcHJvcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3Auc2xpY2UoMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlbmRvck5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIG5hbWVfMSA9IHZlbmRvck5hbWVzW2ldICsgY2FwTmFtZTtcbiAgICAgICAgICBpZiAobmFtZV8xIGluIGVtcHR5U3R5bGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5hbWVfMTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gIH0pO1xuICBmdW5jdGlvbiB1cGRhdGVTdHlsZShvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcbiAgICAgIGlmIChpc1VuZGVmKGRhdGEuc3RhdGljU3R5bGUpICYmXG4gICAgICAgICAgaXNVbmRlZihkYXRhLnN0eWxlKSAmJlxuICAgICAgICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNTdHlsZSkgJiZcbiAgICAgICAgICBpc1VuZGVmKG9sZERhdGEuc3R5bGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGN1ciwgbmFtZTtcbiAgICAgIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgICAgIHZhciBvbGRTdGF0aWNTdHlsZSA9IG9sZERhdGEuc3RhdGljU3R5bGU7XG4gICAgICB2Y
3XIgb2xkU3R5bGVCaW5kaW5nID0gb2xkRGF0YS5ub3JtYWxpemVkU3R5bGUgfHwgb2xkRGF0YS5zdHlsZSB8fCB7fTtcbiAgICAgIC8vIGlmIHN0YXRpYyBzdHlsZSBleGlzdHMsIHN0eWxlYmluZGluZyBhbHJlYWR5IG1lcmdlZCBpbnRvIGl0IHdoZW4gZG9pbmcgbm9ybWFsaXplU3R5bGVEYXRhXG4gICAgICB2YXIgb2xkU3R5bGUgPSBvbGRTdGF0aWNTdHlsZSB8fCBvbGRTdHlsZUJpbmRpbmc7XG4gICAgICB2YXIgc3R5bGUgPSBub3JtYWxpemVTdHlsZUJpbmRpbmcodm5vZGUuZGF0YS5zdHlsZSkgfHwge307XG4gICAgICAvLyBzdG9yZSBub3JtYWxpemVkIHN0eWxlIHVuZGVyIGEgZGlmZmVyZW50IGtleSBmb3IgbmV4dCBkaWZmXG4gICAgICAvLyBtYWtlIHN1cmUgdG8gY2xvbmUgaXQgaWYgaXQncyByZWFjdGl2ZSwgc2luY2UgdGhlIHVzZXIgbGlrZWx5IHdhbnRzXG4gICAgICAvLyB0byBtdXRhdGUgaXQuXG4gICAgICB2bm9kZS5kYXRhLm5vcm1hbGl6ZWRTdHlsZSA9IGlzRGVmKHN0eWxlLl9fb2JfXykgPyBleHRlbmQoe30sIHN0eWxlKSA6IHN0eWxlO1xuICAgICAgdmFyIG5ld1N0eWxlID0gZ2V0U3R5bGUodm5vZGUsIHRydWUpO1xuICAgICAgZm9yIChuYW1lIGluIG9sZFN0eWxlKSB7XG4gICAgICAgICAgaWYgKGlzVW5kZWYobmV3U3R5bGVbbmFtZV0pKSB7XG4gICAgICAgICAgICAgIHNldFByb3AoZWwsIG5hbWUsICcnKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKG5hbWUgaW4gbmV3U3R5bGUpIHtcbiAgICAgICAgICBjdXIgPSBuZXdTdHlsZVtuYW1lXTtcbiAgICAgICAgICAvLyBpZTkgc2V0dGluZyB0byBudWxsIGhhcyBubyBlZmZlY3QsIG11c3QgdXNlIGVtcHR5IHN0cmluZ1xuICAgICAgICAgIHNldFByb3AoZWwsIG5hbWUsIGN1ciA9PSBudWxsID8gJycgOiBjdXIpO1xuICAgICAgfVxuICB9XG4gIHZhciBzdHlsZSQxID0ge1xuICAgICAgY3JlYXRlOiB1cGRhdGVTdHlsZSxcbiAgICAgIHVwZGF0ZTogdXBkYXRlU3R5bGVcbiAgfTtcblxuICB2YXIgd2hpdGVzcGFjZVJFJDEgPSAvXFxzKy87XG4gIC8qKlxuICAgKiBBZGQgY2xhc3Mgd2l0aCBjb21wYXRpYmlsaXR5IGZvciBTVkcgc2luY2UgY2xhc3NMaXN0IGlzIG5vdCBzdXBwb3J0ZWQgb25cbiAgICogU1ZHIGVsZW1lbnRzIGluIElFXG4gICAqL1xuICBmdW5jdGlvbiBhZGRDbGFzcyhlbCwgY2xzKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgICAgICAgIGlmIChjbHMuaW5kZXhPZignICcpID4gLTEpIHtcbiAgICAgICAgICAgICAgY2xzLnNwbGl0KHdoaXRlc3BhY2VSRSQxKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QuYWRkKGMpOyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoY2xzKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICB2Y
3XIgY3VyID0gXCIgXCIuY29uY2F0KGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJywgXCIgXCIpO1xuICAgICAgICAgIGlmIChjdXIuaW5kZXhPZignICcgKyBjbHMgKyAnICcpIDwgMCkge1xuICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGN1ciArIGNscykudHJpbSgpKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBjbGFzcyB3aXRoIGNvbXBhdGliaWxpdHkgZm9yIFNWRyBzaW5jZSBjbGFzc0xpc3QgaXMgbm90IHN1cHBvcnRlZCBvblxuICAgKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsLCBjbHMpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgICAgICAgaWYgKGNscy5pbmRleE9mKCcgJykgPiAtMSkge1xuICAgICAgICAgICAgICBjbHMuc3BsaXQod2hpdGVzcGFjZVJFJDEpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5yZW1vdmUoYyk7IH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWVsLmNsYXNzTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBjdXIgPSBcIiBcIi5jb25jYXQoZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnLCBcIiBcIik7XG4gICAgICAgICAgdmFyIHRhciA9ICcgJyArIGNscyArICcgJztcbiAgICAgICAgICB3aGlsZSAoY3VyLmluZGV4T2YodGFyKSA+PSAwKSB7XG4gICAgICAgICAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKHRhciwgJyAnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VyID0gY3VyLnRyaW0oKTtcbiAgICAgICAgICBpZiAoY3VyKSB7XG4gICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjdXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc29sdmVUcmFuc2l0aW9uKGRlZikge1xuICAgICAgaWYgKCFkZWYpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHR5cGVvZiBkZWYgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdmFyIHJlcyA9IHt9O1xuICAgICAgICAgIGlmIChkZWYuY3NzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBleHRlbmQocmVzLCBhdXRvQ3NzVHJhbnNpdGlvbihkZWYubmFtZSB8fCAndicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXh0ZW5kKHJlcywgZGVmKTtcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodHlwZW9mIGRlZiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gYXV0b0Nzc1RyYW5zaXRpb24oZGVmKTtcbiAgICAgIH1cbiAgfVxuICB2YXIgYXV0b0Nzc1RyYW5zaXRpb24gPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICAgZW50ZXJDbGFzczogXCJcIi5jb25jYXQobmFtZSwgXCItZW50ZXJcIiksXG4gICAgICAgICAgZW50ZXJUb0NsYXNzOiBcIlwiLmNvbmNhdChuYW1lLCBcIi1lbnRlci10b1wiKSxcbiAgICAgICAgICBlbnRlckFjdGl2ZUNsYXNzOiBcIlwiLmNvbmNhdChuYW1lLCBcIi1lbnRlci1hY3RpdmVcIiksXG4gICAgICAgICAgbGVhdmVDbGFzczogXCJcIi5jb25jYXQobmFtZSwgXCItbGVhdmVcIiksXG4gICAgICAgICAgbGVhdmVUb0NsYXNzOiBcIlwiLmNvbmNhdChuYW1lLCBcIi1sZWF2ZS10b1wiKSxcbiAgICAgICAgICBsZWF2ZUFjdGl2ZUNsYXNzOiBcIlwiLmNvbmNhdChuYW1lLCBcIi1sZWF2ZS1hY3RpdmVcIilcbiAgICAgIH07XG4gIH0pO1xuICB2YXIgaGFzVHJhbnNpdGlvbiA9IGluQnJvd3NlciAmJiAhaXNJRTk7XG4gIHZhciBUUkFOU0lUSU9OID0gJ3RyYW5zaXRpb24nO1xuICB2YXIgQU5JTUFUSU9OID0gJ2FuaW1hdGlvbic7XG4gIC8vIFRyYW5zaXRpb24gcHJvcGVydHkvZXZlbnQgc25pZmZpbmdcbiAgdmFyIHRyYW5zaXRpb25Qcm9wID0gJ3RyYW5zaXRpb24nO1xuICB2YXIgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3RyYW5zaXRpb25lbmQnO1xuICB2YXIgYW5pbWF0aW9uUHJvcCA9ICdhbmltYXRpb24nO1xuICB2YXIgYW5pbWF0aW9uRW5kRXZlbnQgPSAnYW5pbWF0aW9uZW5kJztcbiAgaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHdpbmRvdy5vbnRyYW5zaXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHdpbmRvdy5vbndlYmtpdHRyYW5zaXRpb25lbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRyYW5zaXRpb25Qcm9wID0gJ1dlYmtpdFRyYW5zaXRpb24nO1xuICAgICAgICAgIHRyYW5zaXRpb25FbmRFdmVudCA9ICd3ZWJraXRUcmFuc2l0aW9uRW5kJztcbiAgICAgIH1cbiAgICAgIGlmICh3aW5kb3cub25hbmltYXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHdpbmRvdy5vbndlYmtpdGFuaW1hdGlvbmVuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYW5pbWF0aW9uUHJvcCA9ICdXZWJraXRBbmltYXRpb24nO1xuICAgICAgICAgIGFuaW1hdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdEFuaW1hdGlvbkVuZCc7XG4gICAgICB9XG4gIH1cbiAgLy8gYmluZGluZyB0byB3aW5kb3cgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgaG90IHJlbG9hZCB3b3JrIGluIElFIGluIHN0cmljdCBtb2RlXG4gIHZhciByYWYgPSBpbkJyb3dzZXJcbiAgICAgID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgICAgID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdylcbiAgICAgICAgICA6IHNldFRpbWVvdXRcbiAgICAgIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gKC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZuKSB7IHJldHVybi
3BmbigpOyB9O1xuICBmdW5jdGlvbiBuZXh0RnJhbWUoZm4pIHtcbiAgICAgIHJhZihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIHJhZihmbik7XG4gICAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGNscykge1xuICAgICAgdmFyIHRyYW5zaXRpb25DbGFzc2VzID0gZWwuX3RyYW5zaXRpb25DbGFzc2VzIHx8IChlbC5fdHJhbnNpdGlvbkNsYXNzZXMgPSBbXSk7XG4gICAgICBpZiAodHJhbnNpdGlvbkNsYXNzZXMuaW5kZXhPZihjbHMpIDwgMCkge1xuICAgICAgICAgIHRyYW5zaXRpb25DbGFzc2VzLnB1c2goY2xzKTtcbiAgICAgICAgICBhZGRDbGFzcyhlbCwgY2xzKTtcbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGNscykge1xuICAgICAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgICAgICAgIHJlbW92ZSQyKGVsLl90cmFuc2l0aW9uQ2xhc3NlcywgY2xzKTtcbiAgICAgIH1cbiAgICAgIHJlbW92ZUNsYXNzKGVsLCBjbHMpO1xuICB9XG4gIGZ1bmN0aW9uIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgZXhwZWN0ZWRUeXBlLCBjYikge1xuICAgICAgdmFyIF9hID0gZ2V0VHJhbnNpdGlvbkluZm8oZWwsIGV4cGVjdGVkVHlwZSksIHR5cGUgPSBfYS50eXBlLCB0aW1lb3V0ID0gX2EudGltZW91dCwgcHJvcENvdW50ID0gX2EucHJvcENvdW50O1xuICAgICAgaWYgKCF0eXBlKVxuICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgdmFyIGV2ZW50ID0gdHlwZSA9PT0gVFJBTlNJVElPTiA/IHRyYW5zaXRpb25FbmRFdmVudCA6IGFuaW1hdGlvbkVuZEV2ZW50O1xuICAgICAgdmFyIGVuZGVkID0gMDtcbiAgICAgIHZhciBlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgb25FbmQpO1xuICAgICAgICAgIGNiKCk7XG4gICAgICB9O1xuICAgICAgdmFyIG9uRW5kID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICBpZiAoZS50YXJnZXQgPT09IGVsKSB7XG4gICAgICAgICAgICAgIGlmICgrK2VuZGVkID49IHByb3BDb3VudCkge1xuICAgICAgICAgICAgICAgICAgZW5kKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGVuZGVkIDwgcHJvcENvdW50KSB7XG4gICAgICAgICAgICAgIGVuZCgpO1xuICAgICAgICAgIH1cbiAgICAgIH0sIHRpbWVvdXQgKyAxKTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbiAgfVxuICB2YXIgdHJhbnNmb3JtUkUgPSAvXFxiKHRyYW5zZm9ybXxhbGwpKCx8JCkvO1xuICBmdW5jdGlvbiBnZXRUcmFuc2l0aW9uSW5mbyhlbCwgZXhwZWN0ZWRUeXBlKSB7XG4gICAgICB2Y
3XIgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuICAgICAgLy8gSlNET00gbWF5IHJldHVybiB1bmRlZmluZWQgZm9yIHRyYW5zaXRpb24gcHJvcGVydGllc1xuICAgICAgdmFyIHRyYW5zaXRpb25EZWxheXMgPSAoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0RlbGF5J10gfHwgJycpLnNwbGl0KCcsICcpO1xuICAgICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbnMgPSAoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0R1cmF0aW9uJ10gfHwgJycpLnNwbGl0KCcsICcpO1xuICAgICAgdmFyIHRyYW5zaXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dCh0cmFuc2l0aW9uRGVsYXlzLCB0cmFuc2l0aW9uRHVyYXRpb25zKTtcbiAgICAgIHZhciBhbmltYXRpb25EZWxheXMgPSAoc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gICAgICB2YXIgYW5pbWF0aW9uRHVyYXRpb25zID0gKHN0eWxlc1thbmltYXRpb25Qcm9wICsgJ0R1cmF0aW9uJ10gfHwgJycpLnNwbGl0KCcsICcpO1xuICAgICAgdmFyIGFuaW1hdGlvblRpbWVvdXQgPSBnZXRUaW1lb3V0KGFuaW1hdGlvbkRlbGF5cywgYW5pbWF0aW9uRHVyYXRpb25zKTtcbiAgICAgIHZhciB0eXBlO1xuICAgICAgdmFyIHRpbWVvdXQgPSAwO1xuICAgICAgdmFyIHByb3BDb3VudCA9IDA7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChleHBlY3RlZFR5cGUgPT09IFRSQU5TSVRJT04pIHtcbiAgICAgICAgICBpZiAodHJhbnNpdGlvblRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICAgIHR5cGUgPSBUUkFOU0lUSU9OO1xuICAgICAgICAgICAgICB0aW1lb3V0ID0gdHJhbnNpdGlvblRpbWVvdXQ7XG4gICAgICAgICAgICAgIHByb3BDb3VudCA9IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gQU5JTUFUSU9OKSB7XG4gICAgICAgICAgaWYgKGFuaW1hdGlvblRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICAgIHR5cGUgPSBBTklNQVRJT047XG4gICAgICAgICAgICAgIHRpbWVvdXQgPSBhbmltYXRpb25UaW1lb3V0O1xuICAgICAgICAgICAgICBwcm9wQ291bnQgPSBhbmltYXRpb25EdXJhdGlvbnMubGVuZ3RoO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHRpbWVvdXQgPSBNYXRoLm1heCh0cmFuc2l0aW9uVGltZW91dCwgYW5pbWF0aW9uVGltZW91dCk7XG4gICAgICAgICAgdHlwZSA9XG4gICAgICAgICAgICAgIHRpbWVvdXQgPiAwXG4gICAgICAgICAgICAgICAgICA/IHRyYW5zaXRpb25UaW1lb3V0ID4gYW5pbWF0aW9uVGltZW91dFxuICAgICAgICAgICAgICAgICAgICAgID8gVFJBTlNJVElPTlxuICAgICAgICAgICAgICAgICAgICAgIDogQU5JTUFUSU9OXG4gICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgcHJvcENvdW50ID0gdHlwZVxuICAgICAgICAgICAgICA/IHR5cGUgPT09IFRSQU5TSVRJT05cbiAgICAgICAgICAgICAgICAgID8gdHJhbnNpdGlvbkR1cmF0aW9ucy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgIDogYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgICAgICAgICA6IDA7XG4gICAgICB9XG4gICAgICB2Y
3XIgaGFzVHJhbnNmb3JtID0gdHlwZSA9PT0gVFJBTlNJVElPTiAmJiB0cmFuc2Zvcm1SRS50ZXN0KHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdQcm9wZXJ0eSddKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICB0aW1lb3V0OiB0aW1lb3V0LFxuICAgICAgICAgIHByb3BDb3VudDogcHJvcENvdW50LFxuICAgICAgICAgIGhhc1RyYW5zZm9ybTogaGFzVHJhbnNmb3JtXG4gICAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGdldFRpbWVvdXQoZGVsYXlzLCBkdXJhdGlvbnMpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB3aGlsZSAoZGVsYXlzLmxlbmd0aCA8IGR1cmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICBkZWxheXMgPSBkZWxheXMuY29uY2F0KGRlbGF5cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCwgZHVyYXRpb25zLm1hcChmdW5jdGlvbiAoZCwgaSkge1xuICAgICAgICAgIHJldHVybiB0b01zKGQpICsgdG9NcyhkZWxheXNbaV0pO1xuICAgICAgfSkpO1xuICB9XG4gIC8vIE9sZCB2ZXJzaW9ucyBvZiBDaHJvbWl1bSAoYmVsb3cgNjEuMC4zMTYzLjEwMCkgZm9ybWF0cyBmbG9hdGluZyBwb2ludGVyIG51bWJlcnNcbiAgLy8gaW4gYSBsb2NhbGUtZGVwZW5kZW50IHdheSwgdXNpbmcgYSBjb21tYSBpbnN0ZWFkIG9mIGEgZG90LlxuICAvLyBJZiBjb21tYSBpcyBub3QgcmVwbGFjZWQgd2l0aCBhIGRvdCwgdGhlIGlucHV0IHdpbGwgYmUgcm91bmRlZCBkb3duIChpLmUuIGFjdGluZ1xuICAvLyBhcyBhIGZsb29yIGZ1bmN0aW9uKSBjYXVzaW5nIHVuZXhwZWN0ZWQgYmVoYXZpb3JzXG4gIGZ1bmN0aW9uIHRvTXMocykge1xuICAgICAgcmV0dXJuIE51bWJlcihzLnNsaWNlKDAsIC0xKS5yZXBsYWNlKCcsJywgJy4nKSkgKiAxMDAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZW50ZXIodm5vZGUsIHRvZ2dsZURpc3BsYXkpIHtcbiAgICAgIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgICAgIC8vIGNhbGwgbGVhdmUgY2FsbGJhY2sgbm93XG4gICAgICBpZiAoaXNEZWYoZWwuX2xlYXZlQ2IpKSB7XG4gICAgICAgICAgZWwuX2xlYXZlQ2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICBlbC5fbGVhdmVDYigpO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRyYW5zaXRpb24pO1xuICAgICAgaWYgKGlzVW5kZWYoZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpc0RlZihlbC5fZW50ZXJDYikgfHwgZWwubm9kZVR5cGUgIT09IDEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2Y
3XIgY3NzID0gZGF0YS5jc3MsIHR5cGUgPSBkYXRhLnR5cGUsIGVudGVyQ2xhc3MgPSBkYXRhLmVudGVyQ2xhc3MsIGVudGVyVG9DbGFzcyA9IGRhdGEuZW50ZXJUb0NsYXNzLCBlbnRlckFjdGl2ZUNsYXNzID0gZGF0YS5lbnRlckFjdGl2ZUNsYXNzLCBhcHBlYXJDbGFzcyA9IGRhdGEuYXBwZWFyQ2xhc3MsIGFwcGVhclRvQ2xhc3MgPSBkYXRhLmFwcGVhclRvQ2xhc3MsIGFwcGVhckFjdGl2ZUNsYXNzID0gZGF0YS5hcHBlYXJBY3RpdmVDbGFzcywgYmVmb3JlRW50ZXIgPSBkYXRhLmJlZm9yZUVudGVyLCBlbnRlciA9IGRhdGEuZW50ZXIsIGFmdGVyRW50ZXIgPSBkYXRhLmFmdGVyRW50ZXIsIGVudGVyQ2FuY2VsbGVkID0gZGF0YS5lbnRlckNhbmNlbGxlZCwgYmVmb3JlQXBwZWFyID0gZGF0YS5iZWZvcmVBcHBlYXIsIGFwcGVhciA9IGRhdGEuYXBwZWFyLCBhZnRlckFwcGVhciA9IGRhdGEuYWZ0ZXJBcHBlYXIsIGFwcGVhckNhbmNlbGxlZCA9IGRhdGEuYXBwZWFyQ2FuY2VsbGVkLCBkdXJhdGlvbiA9IGRhdGEuZHVyYXRpb247XG4gICAgICAvLyBhY3RpdmVJbnN0YW5jZSB3aWxsIGFsd2F5cyBiZSB0aGUgPHRyYW5zaXRpb24+IGNvbXBvbmVudCBtYW5hZ2luZyB0aGlzXG4gICAgICAvLyB0cmFuc2l0aW9uLiBPbmUgZWRnZSBjYXNlIHRvIGNoZWNrIGlzIHdoZW4gdGhlIDx0cmFuc2l0aW9uPiBpcyBwbGFjZWRcbiAgICAgIC8vIGFzIHRoZSByb290IG5vZGUgb2YgYSBjaGlsZCBjb21wb25lbnQuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrXG4gICAgICAvLyA8dHJhbnNpdGlvbj4ncyBwYXJlbnQgZm9yIGFwcGVhciBjaGVjay5cbiAgICAgIHZhciBjb250ZXh0ID0gYWN0aXZlSW5zdGFuY2U7XG4gICAgICB2Y
3XIgdHJhbnNpdGlvbk5vZGUgPSBhY3RpdmVJbnN0YW5jZS4kdm5vZGU7XG4gICAgICB3aGlsZSAodHJhbnNpdGlvbk5vZGUgJiYgdHJhbnNpdGlvbk5vZGUucGFyZW50KSB7XG4gICAgICAgICAgY29udGV4dCA9IHRyYW5zaXRpb25Ob2RlLmNvbnRleHQ7XG4gICAgICAgICAgdHJhbnNpdGlvbk5vZGUgPSB0cmFuc2l0aW9uTm9kZS5wYXJlbnQ7XG4gICAgICB9XG4gICAgICB2YXIgaXNBcHBlYXIgPSAhY29udGV4dC5faXNNb3VudGVkIHx8ICF2bm9kZS5pc1Jvb3RJbnNlcnQ7XG4gICAgICBpZiAoaXNBcHBlYXIgJiYgIWFwcGVhciAmJiBhcHBlYXIgIT09ICcnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHN0YXJ0Q2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJDbGFzcyA/IGFwcGVhckNsYXNzIDogZW50ZXJDbGFzcztcbiAgICAgIHZhciBhY3RpdmVDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckFjdGl2ZUNsYXNzID8gYXBwZWFyQWN0aXZlQ2xhc3MgOiBlbnRlckFjdGl2ZUNsYXNzO1xuICAgICAgdmFyIHRvQ2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJUb0NsYXNzID8gYXBwZWFyVG9DbGFzcyA6IGVudGVyVG9DbGFzcztcbiAgICAgIHZhciBiZWZvcmVFbnRlckhvb2sgPSBpc0FwcGVhciA/IGJlZm9yZUFwcGVhciB8fCBiZWZvcmVFbnRlciA6IGJlZm9yZUVudGVyO1xuICAgICAgdmFyIGVudGVySG9vayA9IGlzQXBwZWFyID8gKGlzRnVuY3Rpb24oYXBwZWFyKSA/IGFwcGVhciA6IGVudGVyKSA6IGVudGVyO1xuICAgICAgdmFyIGFmdGVyRW50ZXJIb29rID0gaXNBcHBlYXIgPyBhZnRlckFwcGVhciB8fCBhZnRlckVudGVyIDogYWZ0ZXJFbnRlcjtcbiAgICAgIHZhciBlbnRlckNhbmNlbGxlZEhvb2sgPSBpc0FwcGVhclxuICAgICAgICAgID8gYXBwZWFyQ2FuY2VsbGVkIHx8IGVudGVyQ2FuY2VsbGVkXG4gICAgICAgICAgOiBlbnRlckNhbmNlbGxlZDtcbiAgICAgIHZhciBleHBsaWNpdEVudGVyRHVyYXRpb24gPSB0b051bWJlcihpc09iamVjdChkdXJhdGlvbikgPyBkdXJhdGlvbi5lbnRlciA6IGR1cmF0aW9uKTtcbiAgICAgIGlmIChleHBsaWNpdEVudGVyRHVyYXRpb24gIT0gbnVsbCkge1xuICAgICAgICAgIGNoZWNrRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uLCAnZW50ZXInLCB2bm9kZSk7XG4gICAgICB9XG4gICAgICB2Y
3XIgZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlzSUU5O1xuICAgICAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGVudGVySG9vayk7XG4gICAgICB2YXIgY2IgPSAoZWwuX2VudGVyQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW50ZXJDYW5jZWxsZWRIb29rICYmIGVudGVyQ2FuY2VsbGVkSG9vayhlbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBhZnRlckVudGVySG9vayAmJiBhZnRlckVudGVySG9vayhlbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsLl9lbnRlckNiID0gbnVsbDtcbiAgICAgIH0pKTtcbiAgICAgIGlmICghdm5vZGUuZGF0YS5zaG93KSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHBlbmRpbmcgbGVhdmUgZWxlbWVudCBvbiBlbnRlciBieSBpbmplY3RpbmcgYW4gaW5zZXJ0IGhvb2tcbiAgICAgICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ2luc2VydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgIHZhciBwZW5kaW5nTm9kZSA9IHBhcmVudCAmJiBwYXJlbnQuX3BlbmRpbmcgJiYgcGFyZW50Ll9wZW5kaW5nW3Zub2RlLmtleV07XG4gICAgICAgICAgICAgIGlmIChwZW5kaW5nTm9kZSAmJlxuICAgICAgICAgICAgICAgICAgcGVuZGluZ05vZGUudGFnID09PSB2bm9kZS50YWcgJiZcbiAgICAgICAgICAgICAgICAgIHBlbmRpbmdOb2RlLmVsbS5fbGVhdmVDYikge1xuICAgICAgICAgICAgICAgICAgcGVuZGluZ05vZGUuZWxtLl9sZWF2ZUNiKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW50ZXJIb29rICYmIGVudGVySG9vayhlbCwgY2IpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gc3RhcnQgZW50ZXIgdHJhbnNpdGlvblxuICAgICAgYmVmb3JlRW50ZXJIb29rICYmIGJlZm9yZUVudGVySG9vayhlbCk7XG4gICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgICAgICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICBpZiAoIWNiLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgICAgICAgICAgICAgIGlmICghdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNiLCBleHBsaWNpdEVudGVyRHVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBjYik7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodm5vZGUuZGF0YS5zaG93KSB7XG4gICAgICAgICAgdG9nZ2xlRGlzcGxheSAmJiB0b2dnbGVEaXNwbGF5KCk7XG4gICAgICAgICAgZW50ZXJIb29rICYmIGVudGVySG9vayhlbCwgY2IpO1xuICAgICAgfVxuICAgICAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgY2IoKTtcbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBsZWF2ZSh2bm9kZSwgcm0pIHtcbiAgICAgIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgICAgIC8vIGNhbGwgZW50ZXIgY2FsbGJhY2sgbm93XG4gICAgICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpKSB7XG4gICAgICAgICAgZWwuX2VudGVyQ2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICBlbC5fZW50ZXJDYigpO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRyYW5zaXRpb24pO1xuICAgICAgaWYgKGlzVW5kZWYoZGF0YSkgfHwgZWwubm9kZVR5cGUgIT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gcm0oKTtcbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBjc3MgPSBkYXRhLmNzcywgdHlwZSA9IGRhdGEudHlwZSwgbGVhdmVDbGFzcyA9IGRhdGEubGVhdmVDbGFzcywgbGVhdmVUb0NsYXNzID0gZGF0YS5sZWF2ZVRvQ2xhc3MsIGxlYXZlQWN0aXZlQ2xhc3MgPSBkYXRhLmxlYXZlQWN0aXZlQ2xhc3MsIGJlZm9yZUxlYXZlID0gZGF0YS5iZWZvcmVMZWF2ZSwgbGVhdmUgP
3SBkYXRhLmxlYXZlLCBhZnRlckxlYXZlID0gZGF0YS5hZnRlckxlYXZlLCBsZWF2ZUNhbmNlbGxlZCA9IGRhdGEubGVhdmVDYW5jZWxsZWQsIGRlbGF5TGVhdmUgPSBkYXRhLmRlbGF5TGVhdmUsIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcbiAgICAgIHZhciBleHBlY3RzQ1NTID0gY3NzICE9PSBmYWxzZSAmJiAhaXNJRTk7XG4gICAgICB2YXIgdXNlcldhbnRzQ29udHJvbCA9IGdldEhvb2tBcmd1bWVudHNMZW5ndGgobGVhdmUpO1xuICAgICAgdmFyIGV4cGxpY2l0TGVhdmVEdXJhdGlvbiA9IHRvTnVtYmVyKGlzT2JqZWN0KGR1cmF0aW9uKSA/IGR1cmF0aW9uLmxlYXZlIDogZHVyYXRpb24pO1xuICAgICAgaWYgKGlzRGVmKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICAgICAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbiwgJ2xlYXZlJywgdm5vZGUpO1xuICAgICAgfVxuICAgICAgdmFyIGNiID0gKGVsLl9sZWF2ZUNiID0gb25jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGVsLnBhcmVudE5vZGUgJiYgZWwucGFyZW50Tm9kZS5fcGVuZGluZykge1xuICAgICAgICAgICAgICBlbC5wYXJlbnROb2RlLl9wZW5kaW5nW3Zub2RlLmtleV0gPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxlYXZlQ2FuY2VsbGVkICYmIGxlYXZlQ2FuY2VsbGVkKGVsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHJtKCk7XG4gICAgICAgICAgICAgIGFmdGVyTGVhdmUgJiYgYWZ0ZXJMZWF2ZShlbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsLl9sZWF2ZUNiID0gbnVsbDtcbiAgICAgIH0pKTtcbiAgICAgIGlmIChkZWxheUxlYXZlKSB7XG4gICAgICAgICAgZGVsYXlMZWF2ZShwZXJmb3JtTGVhdmUpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgcGVyZm9ybUxlYXZlKCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwZXJmb3JtTGVhdmUoKSB7XG4gICAgICAgICAgLy8gdGhlIGRlbGF5ZWQgbGVhdmUgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGNhbmNlbGxlZFxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVjb3JkIGxlYXZpbmcgZWxlbWVudFxuICAgICAgICAgIGlmICghdm5vZGUuZGF0YS5zaG93ICYmIGVsLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgfHwgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgPSB7fSkpW3Zub2RlLmtleV0gPVxuICAgICAgICAgICAgICAgICAgdm5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJlZm9yZUxlYXZlICYmIGJlZm9yZUxlYXZlKGVsKTtcbiAgICAgICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQWN0aXZlQ2xhc3MpO1xuICAgICAgICAgICAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZVRvQ2xhc3MpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmICghdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIGV4cGxpY2l0TGVhdmVEdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIHR5cGUsIGNiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxlYXZlICYmIGxlYXZlKGVsLCBjYik7XG4gICAgICAgICAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIC8vIG9ubHkgdXNlZCBpbiBkZXYgbW9kZVxuICBmdW5jdGlvbiBjaGVja0R1cmF0aW9uKHZhbCwgbmFtZSwgdm5vZGUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHdhcm4kMihcIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBcIi5jb25jYXQobmFtZSwgXCIgZHVyYXRpb24gaXMgbm90IGEgdmFsaWQgbnVtYmVyIC0gXCIpICtcbiAgICAgICAgICAgICAgXCJnb3QgXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KHZhbCksIFwiLlwiKSwgdm5vZGUuY29udGV4dCk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc05hTih2YWwpKSB7XG4gICAgICAgICAgd2FybiQyKFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiLmNvbmNhdChuYW1lLCBcIiBkdXJhdGlvbiBpcyBOYU4gLSBcIikgK1xuICAgICAgICAgICAgICAndGhlIGR1cmF0aW9uIGV4cHJlc3Npb24gbWlnaHQgYmUgaW5jb3JyZWN0LicsIHZub2Rl
3LmNvbnRleHQpO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIGlzVmFsaWREdXJhdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsKTtcbiAgfVxuICAvKipcbiAgICogTm9ybWFsaXplIGEgdHJhbnNpdGlvbiBob29rJ3MgYXJndW1lbnQgbGVuZ3RoLiBUaGUgaG9vayBtYXkgYmU6XG4gICAqIC0gYSBtZXJnZWQgaG9vayAoaW52b2tlcikgd2l0aCB0aGUgb3JpZ2luYWwgaW4gLmZuc1xuICAgKiAtIGEgd3JhcHBlZCBjb21wb25lbnQgbWV0aG9kIChjaGVjayAuX2xlbmd0aClcbiAgICogLSBhIHBsYWluIGZ1bmN0aW9uICgubGVuZ3RoKVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChmbikge1xuICAgICAgaWYgKGlzVW5kZWYoZm4pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgdmFyIGludm9rZXJGbnMgPSBmbi5mbnM7XG4gICAgICBpZiAoaXNEZWYoaW52b2tlckZucykpIHtcbiAgICAgICAgICAvLyBpbnZva2VyXG4gICAgICAgICAgcmV0dXJuIGdldEhvb2tBcmd1bWVudHNMZW5ndGgoQXJyYXkuaXNBcnJheShpbnZva2VyRm5zKSA/IGludm9rZXJGbnNbMF0gOiBpbnZva2VyRm5zKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICByZXR1cm4gKGZuLl9sZW5ndGggfHwgZm4ubGVuZ3RoKSA+IDE7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gX2VudGVyKF8sIHZub2RlKSB7XG4gICAgICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XG4gICAgICAgICAgZW50ZXIodm5vZGUpO1xuICAgICAgfVxuICB9XG4gIHZhciB0cmFuc2l0aW9uID0gaW5Ccm93c2VyXG4gICAgICA/IHtcbiAgICAgICAgICBjcmVhdGU6IF9lbnRlcixcbiAgICAgICAgICBhY3RpdmF0ZTogX2VudGVyLFxuICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKHZub2RlLCBybSkge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgICBsZWF2ZSh2bm9kZSwgcm0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcm0oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIDoge307XG5cbiAgdmFyIHBsYXRmb3JtTW9kdWxlcyA9IFthdHRycywga2xhc3MkMSwgZXZlbnRzLCBkb21Qcm9wcywgc3R5bGUkMSwgdHJhbnNpdGlvbl07XG5cbiAgLy8gdGhlIGRpcmVjdGl2ZSBtb2R1bGUgc2hvdWxkIGJlIGFwcGxpZWQgbGFzdCwgYWZ0ZXIgYWxsXG4gIC8vIGJ1aWx0LWluIG1vZHVsZXMgaGF2ZSBiZWVuIGFwcGxpZWQuXG4gIHZhciBtb2R1bGVzJDEgPSBwbGF0Zm9ybU1vZHVsZXMuY29uY2F0KGJhc2VNb2R1bGVzKTtcbiAgdmFyIHBhdGNoID0gY3JlYXRlUGF0Y2hGdW5jdGlvbih7IG5vZGVPcHM6IG5vZGVPcHMsIG1vZHVsZXM6IG1vZHVsZXMkMSB9KTtcblxuICAvKipcbiAgICogTm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IGxpa2UgYXR0YWNoaW5nXG4gICAqIHByb3BlcnRpZXMgdG8gRWxlbWVudHMuXG4gICAqL1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzSUU5KSB7XG4gICAgICAvLyBodHRwOi8vd3d3Lm1hdHRzNDExLmNvbS9wb3N0L2ludGVybmV0LWV4cGxvcmVyLTktb25pbnB1dC9cbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2Y
3XIgZWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICBpZiAoZWwgJiYgZWwudm1vZGVsKSB7XG4gICAgICAgICAgICAgIHRyaWdnZXIoZWwsICdpbnB1dCcpO1xuICAgICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG4gIHZhciBkaXJlY3RpdmUgPSB7XG4gICAgICBpbnNlcnRlZDogZnVuY3Rpb24gKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUpIHtcbiAgICAgICAgICBpZiAodm5vZGUudGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgICAgICAgICAvLyAjNjkwM1xuICAgICAgICAgICAgICBpZiAob2xkVm5vZGUuZWxtICYmICFvbGRWbm9kZS5lbG0uX3ZPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ3Bvc3RwYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmUuY29tcG9uZW50VXBkYXRlZChlbCwgYmluZGluZywgdm5vZGUpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICh2bm9kZS50YWcgPT09ICd0ZXh0YXJlYScgfHwgaXNUZXh0SW5wdXRUeXBlKGVsLnR5cGUpKSB7XG4gICAgICAgICAgICAgIGVsLl92TW9kaWZpZXJzID0gYmluZGluZy5tb2RpZmllcnM7XG4gICAgICAgICAgICAgIGlmICghYmluZGluZy5tb2RpZmllcnMubGF6eSkge1xuICAgICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25zdGFydCcsIG9uQ29tcG9zaXRpb25TdGFydCk7XG4gICAgICAgICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjb21wb3NpdGlvbmVuZCcsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIDwgMTAuMiAmIFVJV2ViVmlldyBkb2Vzbid0IGZpcmUgY29tcG9zaXRpb25lbmQgd2hlblxuICAgICAgICAgICAgICAgICAgLy8gc3dpdGNoaW5nIGZvY3VzIGJlZm9yZSBjb25maXJtaW5nIGNvbXBvc2l0aW9uIGNob2ljZVxuICAgICAgICAgICAgICAgICAgLy8gdGhpcyBhbHNvIGZpeGVzIHRoZSBpc3N1ZSB3aGVyZSBzb21lIGJyb3dzZXJzIGUuZy4gaU9TIENocm9tZVxuICAgICAgICAgICAgICAgICAgLy8gZmlyZXMgXCJjaGFuZ2VcIiBpbnN0ZWFkIG9mIFwiaW5wdXRcIiBvbiBhdXRvY29tcGxldGUuXG4gICAgICAgICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgICAgaWYgKGlzSUU5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgZWwudm1vZGVsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRVcGRhdGVkOiBmdW5jdGlvbiAoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gICAgICAgICAgaWYgKHZub2RlLnRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgICAgICAgc2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZub2RlLmNvbnRleHQpO1xuICAgICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSBvcHRpb25zIHJlbmRlcmVkIGJ5IHYtZm9yIGhhdmUgY2hhbmdlZCxcbiAgICAgICAgICAgICAgLy8gaXQncyBwb3NzaWJsZSB0aGF0IHRoZSB2YWx1ZSBpcyBvdXQtb2Ytc3luYyB3aXRoIHRoZSByZW5kZXJlZCBvcHRpb25zLlxuICAgICAgICAgICAgICAvLyBkZXRlY3Qgc3VjaCBjYXNlcyBhbmQgZmlsdGVyIG91dCB2YWx1ZXMgdGhhdCBubyBsb25nZXIgaGFzIGEgbWF0Y2hpbmdcbiAgICAgICAgICAgICAgLy8gb3B0aW9uIGluIHRoZSBET00uXG4gICAgICAgICAgICAgIHZhciBwcmV2T3B0aW9uc18xID0gZWwuX3ZPcHRpb25zO1xuICAgICAgICAgICAgICB2Y
3XIgY3VyT3B0aW9uc18xID0gKGVsLl92T3B0aW9ucyA9IFtdLm1hcC5jYWxsKGVsLm9wdGlvbnMsIGdldFZhbHVlKSk7XG4gICAgICAgICAgICAgIGlmIChjdXJPcHRpb25zXzEuc29tZShmdW5jdGlvbiAobywgaSkgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgcHJldk9wdGlvbnNfMVtpXSk7IH0pKSB7XG4gICAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIGNoYW5nZSBldmVudCBpZlxuICAgICAgICAgICAgICAgICAgLy8gbm8gbWF0Y2hpbmcgb3B0aW9uIGZvdW5kIGZvciBhdCBsZWFzdCBvbmUgdmFsdWVcbiAgICAgICAgICAgICAgICAgIHZhciBuZWVkUmVzZXQgPSBlbC5tdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgID8gYmluZGluZy52YWx1ZS5zb21lKGZ1bmN0aW9uICh2KSB7IHJldHVybiBoYXNOb01hdGNoaW5nT3B0aW9uKHYsIGN1ck9wdGlvbnNfMSk7IH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBiaW5kaW5nLnZhbHVlICE9PSBiaW5kaW5nLm9sZFZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05vTWF0Y2hpbmdPcHRpb24oYmluZGluZy52YWx1ZSwgY3VyT3B0aW9uc18xKTtcbiAgICAgICAgICAgICAgICAgIGlmIChuZWVkUmVzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKGVsLCAnY2hhbmdlJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gIH07XG4gIGZ1bmN0aW9uIHNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSkge1xuICAgICAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXNJRSB8fCBpc0VkZ2UpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIGFjdHVhbGx5U2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZtKSB7XG4gICAgICB2Y
3XIgdmFsdWUgPSBiaW5kaW5nLnZhbHVlO1xuICAgICAgdmFyIGlzTXVsdGlwbGUgPSBlbC5tdWx0aXBsZTtcbiAgICAgIGlmIChpc011bHRpcGxlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHdhcm4kMihcIjxzZWxlY3QgbXVsdGlwbGUgdi1tb2RlbD1cXFwiXCIuY29uY2F0KGJpbmRpbmcuZXhwcmVzc2lvbiwgXCJcXFwiPiBcIikgK1xuICAgICAgICAgICAgICAgICAgXCJleHBlY3RzIGFuIEFycmF5IHZhbHVlIGZvciBpdHMgYmluZGluZywgYnV0IGdvdCBcIi5jb25jYXQoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSg4LCAtMSkpLCB2bSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHNlbGVjdGVkLCBvcHRpb247XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGVsLm9wdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgb3B0aW9uID0gZWwub3B0aW9uc1tpXTtcbiAgICAgICAgICBpZiAoaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgICBzZWxlY3RlZCA9IGxvb3NlSW5kZXhPZih2YWx1ZSwgZ2V0VmFsdWUob3B0aW9uKSkgPiAtMTtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBpZiAobG9vc2VFcXVhbChnZXRWYWx1ZShvcHRpb24pLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChlbC5zZWxlY3RlZEluZGV4ICE9PSBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZWwuc2VsZWN0ZWRJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICAgICAgICBlbC5zZWxlY3RlZEluZGV4ID0gLTE7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaGFzTm9NYXRjaGluZ09wdGlvbih2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZXZlcnkoZnVuY3Rpb24gKG8pIHsgcmV0dXJuICFsb29zZUVxdWFsKG8sIHZhbHVlKTsgfSk7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0VmFsdWUob3B0aW9uKSB7XG4gICAgICByZXR1cm4gJ192YWx1ZScgaW4gb3B0aW9uID8gb3B0aW9uLl92YWx1ZSA6IG9wdGlvbi52YWx1ZTtcbiAgfVxuICBmdW5jdGlvbiBvbkNvbXBvc2l0aW9uU3RhcnQoZSkge1xuICAgICAgZS50YXJnZXQuY29tcG9zaW5nID0gdHJ1ZTtcbiAgfVxuICBmdW5jdGlvbiBvbkNvbXBvc2l0aW9uRW5kKGUpIHtcbiAgICAgIC8vIHByZXZlbnQgdHJpZ2dlcmluZyBhbiBpbnB1dCBldmVudCBmb3Igbm8gcmVhc29uXG4gICAgICBpZiAoIWUudGFyZ2V0LmNvbXBvc2luZylcbiAgICAgICAgICByZXR1cm47XG4gICAgICBlLnRhcmdldC5jb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgIHRyaWdnZXIoZS50YXJnZXQsICdpbnB1dCcpO1xuICB9XG4gIGZ1bmN0aW9uIHRyaWdnZXIoZWwsIHR5cGUpIHtcbiAgICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcbiAgICAgIGUuaW5pdEV2ZW50KHR5cGUsIHRydWUsIHRydWUpO1xuICAgICAgZWwuZGlzcGF0Y2hFdmVudChlKTtcbiAgfVxuXG4gIC8vIHJlY3Vyc2l2ZWx5IHNlYXJjaCBmb3IgcG9zc2libGUgdHJhbnNpdGlvbiBkZWZpbmVkIGluc2lkZSB0aGUgY29tcG9uZW50IHJvb3RcbiAgZnVuY3Rpb24gbG9jYXRlTm9kZSh2bm9kZSkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgcmV0dXJuIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmICghdm5vZGUuZGF0YSB8fCAhdm5vZGUuZGF0YS50cmFuc2l0aW9uKVxuICAgICAgICAgID8gbG9jYXRlTm9kZSh2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpXG4gICAgICAgICAgOiB2bm9kZTtcbiAgfVxuICB2YXIgc2hvdyA9IHtcbiAgICAgIGJpbmQ6IGZ1bmN0aW9uIChlbCwgX2EsIHZub2RlKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gX2EudmFsdWU7XG4gICAgICAgICAgdm5vZGUgPSBsb2NhdGVOb2RlKHZub2RlKTtcbiAgICAgICAgICB2Y
3XIgdHJhbnNpdGlvbiA9IHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS50cmFuc2l0aW9uO1xuICAgICAgICAgIHZhciBvcmlnaW5hbERpc3BsYXkgPSAoZWwuX192T3JpZ2luYWxEaXNwbGF5ID1cbiAgICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnID8gJycgOiBlbC5zdHlsZS5kaXNwbGF5KTtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgdHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICB2bm9kZS5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IG9yaWdpbmFsRGlzcGxheTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBvcmlnaW5hbERpc3BsYXkgOiAnbm9uZSc7XG4gICAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVwZGF0ZTogZnVuY3Rpb24gKGVsLCBfYSwgdm5vZGUpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBfYS52YWx1ZSwgb2xkVmFsdWUgPSBfYS5vbGRWYWx1ZTtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICBpZiAoIXZhbHVlID09PSAhb2xkVmFsdWUpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgICAgICAgIHZhciB0cmFuc2l0aW9uID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAgICAgICAgaWYgKHRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGxlYXZlKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBlbC5fX3ZPcmlnaW5hbERpc3BsYXkgOiAnbm9uZSc7XG4gICAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVuYmluZDogZnVuY3Rpb24gKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSkge1xuICAgICAgICAgIGlmICghaXNEZXN0cm95KSB7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9O1xuXG4gIHZhciBwbGF0Zm9ybURpcmVjdGl2ZXMgPSB7XG4gICAgICBtb2RlbDogZGlyZWN0aXZlLFxuICAgICAgc2hvdzogc2hvd1xuICB9O1xuXG4gIC8vIFByb3ZpZGVzIHRyYW5zaXRpb24gc3VwcG9ydCBmb3IgYSBzaW5nbGUgZWxlbWVudC9jb21wb25lbnQuXG4gIHZhciB0cmFuc2l0aW9uUHJvcHMgPSB7XG4gICAgICBuYW1lOiBTdHJpbmcsXG4gICAgICBhcHBlYXI6IEJvb2xlYW4sXG4gICAgICBjc3M6IEJvb2xlYW4sXG4gICAgICBtb2RlOiBTdHJpbmcsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBlbnRlckNsYXNzOiBTdHJpbmcsXG4gICAgICBsZWF2ZUNsYXNzOiBTdHJpbmcsXG4gICAgICBlbnRlclRvQ2xhc3M6IFN0cmluZyxcbiAgICAgIGxlYXZlVG9DbGFzczogU3RyaW5nLFxuICAgICAgZW50ZXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICAgICAgbGVhdmVBY3RpdmVDbGFzczogU3RyaW5nLFxuICAgICAgYXBwZWFyQ2xhc3M6IFN0cmluZyxcbiAgICAgIGFwcGVhckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gICAgICBhcHBlYXJUb0NsYXNzOiBTdHJpbmcsXG4gICAgICBkdXJhdGlvbjogW051bWJlciwgU3RyaW5nLCBPYmplY3RdXG4gIH07XG4gIC8vIGluIGNhc2UgdGhlIGNoaWxkIGlzIGFsc28gYW4gYWJzdHJhY3QgY29tcG9uZW50LCBlLmcuIDxrZWVwLWFsaXZlPlxuICAvLyB3ZSB3YW50IHRvIHJlY3Vyc2l2ZWx5IHJldHJpZXZlIHRoZSByZWFsIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZFxuICBmdW5jdGlvbiBnZXRSZWFsQ2hpbGQodm5vZGUpIHtcbiAgICAgIHZhciBjb21wT3B0aW9ucyA9IHZub2RlICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICBpZiAoY29tcE9wdGlvbnMgJiYgY29tcE9wdGlvbnMuQ3Rvci5vcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICAgICAgcmV0dXJuIGdldFJlYWxDaGlsZChnZXRGaXJzdENvbXBvbmVudENoaWxkKGNvbXBPcHRpb25zLmNoaWxkcmVuKSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdm5vZGU7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZXh0cmFjdFRyYW5zaXRpb25EYXRhKGNvbXApIHtcbiAgICAgIHZhciBkYXRhID0ge307XG4gICAgICB2Y
3XIgb3B0aW9ucyA9IGNvbXAuJG9wdGlvbnM7XG4gICAgICAvLyBwcm9wc1xuICAgICAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMucHJvcHNEYXRhKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gY29tcFtrZXldO1xuICAgICAgfVxuICAgICAgLy8gZXZlbnRzLlxuICAgICAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMgYW5kIHBhc3MgdGhlbSBkaXJlY3RseSB0byB0aGUgdHJhbnNpdGlvbiBtZXRob2RzXG4gICAgICB2YXIgbGlzdGVuZXJzID0gb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICAgICAgZm9yICh2YXIga2V5IGluIGxpc3RlbmVycykge1xuICAgICAgICAgIGRhdGFbY2FtZWxpemUoa2V5KV0gPSBsaXN0ZW5lcnNba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGZ1bmN0aW9uIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBpZiAoL1xcZC1rZWVwLWFsaXZlJC8udGVzdChyYXdDaGlsZC50YWcpKSB7XG4gICAgICAgICAgcmV0dXJuIGgoJ2tlZXAtYWxpdmUnLCB7XG4gICAgICAgICAgICAgIHByb3BzOiByYXdDaGlsZC5jb21wb25lbnRPcHRpb25zLnByb3BzRGF0YVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIGhhc1BhcmVudFRyYW5zaXRpb24odm5vZGUpIHtcbiAgICAgIHdoaWxlICgodm5vZGUgPSB2bm9kZS5wYXJlbnQpKSB7XG4gICAgICAgICAgaWYgKHZub2RlLmRhdGEudHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSB7XG4gICAgICByZXR1cm4gb2xkQ2hpbGQua2V5ID09PSBjaGlsZC5rZXkgJiYgb2xkQ2hpbGQudGFnID09PSBjaGlsZC50YWc7XG4gIH1cbiAgdmFyIGlzTm90VGV4dE5vZGUgPSBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50YWcgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpOyB9O1xuICB2YXIgaXNWU2hvd0RpcmVjdGl2ZSA9IGZ1bmN0aW9uIChkKSB7IHJldHVybiBkLm5hbWUgPT09ICdzaG93JzsgfTtcbiAgdmFyIFRyYW5zaXRpb24gPSB7XG4gICAgICBuYW1lOiAndHJhbnNpdGlvbicsXG4gICAgICBwcm9wczogdHJhbnNpdGlvblByb3BzLFxuICAgICAgYWJzdHJhY3Q6IHRydWUsXG4gICAgICByZW5kZXI6IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICB2Y
3XIgY2hpbGRyZW4gPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgICAgICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBmaWx0ZXIgb3V0IHRleHQgbm9kZXMgKHBvc3NpYmxlIHdoaXRlc3BhY2VzKVxuICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKGlzTm90VGV4dE5vZGUpO1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gd2FybiBtdWx0aXBsZSBlbGVtZW50c1xuICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIHdhcm4kMignPHRyYW5zaXRpb24+IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBzaW5nbGUgZWxlbWVudC4gVXNlICcgK1xuICAgICAgICAgICAgICAgICAgJzx0cmFuc2l0aW9uLWdyb3VwPiBmb3IgbGlzdHMuJywgdGhpcy4kcGFyZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG1vZGUgPSB0aGlzLm1vZGU7XG4gICAgICAgICAgLy8gd2FybiBpbnZhbGlkIG1vZGVcbiAgICAgICAgICBpZiAobW9kZSAmJiBtb2RlICE9PSAnaW4tb3V0JyAmJiBtb2RlICE9PSAnb3V0LWluJykge1xuICAgICAgICAgICAgICB3YXJuJDIoJ2ludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICcgKyBtb2RlLCB0aGlzLiRwYXJlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2Y
3XIgcmF3Q2hpbGQgPSBjaGlsZHJlblswXTtcbiAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgY29tcG9uZW50IHJvb3Qgbm9kZSBhbmQgdGhlIGNvbXBvbmVudCdzXG4gICAgICAgICAgLy8gcGFyZW50IGNvbnRhaW5lciBub2RlIGFsc28gaGFzIHRyYW5zaXRpb24sIHNraXAuXG4gICAgICAgICAgaWYgKGhhc1BhcmVudFRyYW5zaXRpb24odGhpcy4kdm5vZGUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiByYXdDaGlsZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYXBwbHkgdHJhbnNpdGlvbiBkYXRhIHRvIGNoaWxkXG4gICAgICAgICAgLy8gdXNlIGdldFJlYWxDaGlsZCgpIHRvIGlnbm9yZSBhYnN0cmFjdCBjb21wb25lbnRzIGUuZy4ga2VlcC1hbGl2ZVxuICAgICAgICAgIHZhciBjaGlsZCA9IGdldFJlYWxDaGlsZChyYXdDaGlsZCk7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgICAgICByZXR1cm4gcmF3Q2hpbGQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLl9sZWF2aW5nKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVuc3VyZSBhIGtleSB0aGF0IGlzIHVuaXF1ZSB0byB0aGUgdm5vZGUgdHlwZSBhbmQgdG8gdGhpcyB0cmFuc2l0aW9uXG4gICAgICAgICAgLy8gY29tcG9uZW50IGluc3RhbmNlLiBUaGlzIGtleSB3aWxsIGJlIHVzZWQgdG8gcmVtb3ZlIHBlbmRpbmcgbGVhdmluZyBub2Rlc1xuICAgICAgICAgIC8vIGR1cmluZyBlbnRlcmluZy5cbiAgICAgICAgICB2Y
3XIgaWQgPSBcIl9fdHJhbnNpdGlvbi1cIi5jb25jYXQodGhpcy5fdWlkLCBcIi1cIik7XG4gICAgICAgICAgY2hpbGQua2V5ID1cbiAgICAgICAgICAgICAgY2hpbGQua2V5ID09IG51bGxcbiAgICAgICAgICAgICAgICAgID8gY2hpbGQuaXNDb21tZW50XG4gICAgICAgICAgICAgICAgICAgICAgPyBpZCArICdjb21tZW50J1xuICAgICAgICAgICAgICAgICAgICAgIDogaWQgKyBjaGlsZC50YWdcbiAgICAgICAgICAgICAgICAgIDogaXNQcmltaXRpdmUoY2hpbGQua2V5KVxuICAgICAgICAgICAgICAgICAgICAgID8gU3RyaW5nKGNoaWxkLmtleSkuaW5kZXhPZihpZCkgPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjaGlsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpZCArIGNoaWxkLmtleVxuICAgICAgICAgICAgICAgICAgICAgIDogY2hpbGQua2V5O1xuICAgICAgICAgIHZhciBkYXRhID0gKChjaGlsZC5kYXRhIHx8IChjaGlsZC5kYXRhID0ge30pKS50cmFuc2l0aW9uID1cbiAgICAgICAgICAgICAgZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpKTtcbiAgICAgICAgICB2YXIgb2xkUmF3Q2hpbGQgPSB0aGlzLl92bm9kZTtcbiAgICAgICAgICB2YXIgb2xkQ2hpbGQgPSBnZXRSZWFsQ2hpbGQob2xkUmF3Q2hpbGQpO1xuICAgICAgICAgIC8vIG1hcmsgdi1zaG93XG4gICAgICAgICAgLy8gc28gdGhhdCB0aGUgdHJhbnNpdGlvbiBtb2R1bGUgY2FuIGhhbmQgb3ZlciB0aGUgY29udHJvbCB0byB0aGUgZGlyZWN0aXZlXG4gICAgICAgICAgaWYgKGNoaWxkLmRhdGEuZGlyZWN0aXZlcyAmJiBjaGlsZC5kYXRhLmRpcmVjdGl2ZXMuc29tZShpc1ZTaG93RGlyZWN0aXZlKSkge1xuICAgICAgICAgICAgICBjaGlsZC5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2xkQ2hpbGQgJiZcbiAgICAgICAgICAgICAgb2xkQ2hpbGQuZGF0YSAmJlxuICAgICAgICAgICAgICAhaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSAmJlxuICAgICAgICAgICAgICAhaXNBc3luY1BsYWNlaG9sZGVyKG9sZENoaWxkKSAmJlxuICAgICAgICAgICAgICAvLyAjNjY4NyBjb21wb25lbnQgcm9vdCBpcyBhIGNvbW1lbnQgbm9kZVxuICAgICAgICAgICAgICAhKG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlICYmXG4gICAgICAgICAgICAgICAgICBvbGRDaGlsZC5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUuaXNDb21tZW50KSkge1xuICAgICAgICAgICAgICAvLyByZXBsYWNlIG9sZCBjaGlsZCB0cmFuc2l0aW9uIGRhdGEgd2l0aCBmcmVzaCBvbmVcbiAgICAgICAgICAgICAgLy8gaW1wb3J0YW50IGZvciBkeW5hbWljIHRyYW5zaXRpb25zIVxuICAgICAgICAgICAgICB2Y
3XIgb2xkRGF0YSA9IChvbGRDaGlsZC5kYXRhLnRyYW5zaXRpb24gPSBleHRlbmQoe30sIGRhdGEpKTtcbiAgICAgICAgICAgICAgLy8gaGFuZGxlIHRyYW5zaXRpb24gbW9kZVxuICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ291dC1pbicpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBwbGFjZWhvbGRlciBub2RlIGFuZCBxdWV1ZSB1cGRhdGUgd2hlbiBsZWF2ZSBmaW5pc2hlc1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbGVhdmluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBtZXJnZVZOb2RlSG9vayhvbGREYXRhLCAnYWZ0ZXJMZWF2ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fbGVhdmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgIF90aGlzLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGxhY2Vob2xkZXIoaCwgcmF3Q2hpbGQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKG1vZGUgPT09ICdpbi1vdXQnKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoaXNBc3luY1BsYWNlaG9sZGVyKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbGRSYXdDaGlsZDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHZhciBkZWxheWVkTGVhdmVfMTtcbiAgICAgICAgICAgICAgICAgIHZhciBwZXJmb3JtTGVhdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVsYXllZExlYXZlXzEoKTtcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnYWZ0ZXJFbnRlcicsIHBlcmZvcm1MZWF2ZSk7XG4gICAgICAgICAgICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnZW50ZXJDYW5jZWxsZWQnLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICAgICAgICAgICAgbWVyZ2VWTm9kZUhvb2sob2xkRGF0YSwgJ2RlbGF5TGVhdmUnLCBmdW5jdGlvbiAobGVhdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheWVkTGVhdmVfMSA9IGxlYXZlO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJhd0NoaWxkO1xuICAgICAgfVxuICB9O1xuXG4gIC8vIFByb3ZpZGVzIHRyYW5zaXRpb24gc3VwcG9ydCBmb3IgbGlzdCBpdGVtcy5cbiAgdmFyIHByb3BzID0gZXh0ZW5kKHtcbiAgICAgIHRhZzogU3RyaW5nLFxuICAgICAgbW92ZUNsYXNzOiBTdHJpbmdcbiAgfSwgdHJhbnNpdGlvblByb3BzKTtcbiAgZGVsZXRlIHByb3BzLm1vZGU7XG4gIHZhciBUcmFuc2l0aW9uR3JvdXAgPSB7XG4gICAgICBwcm9wczogcHJvcHMsXG4gICAgICBiZWZvcmVNb3VudDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgdmFyIHVwZGF0ZSA9IHRoaXMuX3VwZGF0ZTtcbiAgICAgICAgICB0aGlzLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgICAgICAgICAgICB2Y
3XIgcmVzdG9yZUFjdGl2ZUluc3RhbmNlID0gc2V0QWN0aXZlSW5zdGFuY2UoX3RoaXMpO1xuICAgICAgICAgICAgICAvLyBmb3JjZSByZW1vdmluZyBwYXNzXG4gICAgICAgICAgICAgIF90aGlzLl9fcGF0Y2hfXyhfdGhpcy5fdm5vZGUsIF90aGlzLmtlcHQsIGZhbHNlLCAvLyBoeWRyYXRpbmdcbiAgICAgICAgICAgICAgdHJ1ZSAvLyByZW1vdmVPbmx5ICghaW1wb3J0YW50LCBhdm9pZHMgdW5uZWNlc3NhcnkgbW92ZXMpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIF90aGlzLl92bm9kZSA9IF90aGlzLmtlcHQ7XG4gICAgICAgICAgICAgIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSgpO1xuICAgICAgICAgICAgICB1cGRhdGUuY2FsbChfdGhpcywgdm5vZGUsIGh5ZHJhdGluZyk7XG4gICAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICByZW5kZXI6IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgICAgdmFyIHRhZyA9IHRoaXMudGFnIHx8IHRoaXMuJHZub2RlLmRhdGEudGFnIHx8ICdzcGFuJztcbiAgICAgICAgICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICB2YXIgcHJldkNoaWxkcmVuID0gKHRoaXMucHJldkNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbik7XG4gICAgICAgICAgdmFyIHJhd0NoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICAgICAgICB2YXIgY2hpbGRyZW4gPSAodGhpcy5jaGlsZHJlbiA9IFtdKTtcbiAgICAgICAgICB2YXIgdHJhbnNpdGlvbkRhdGEgPSBleHRyYWN0VHJhbnNpdGlvbkRhdGEodGhpcyk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB2Y
3XIgYyA9IHJhd0NoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICBpZiAoYy50YWcpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjLmtleSAhPSBudWxsICYmIFN0cmluZyhjLmtleSkuaW5kZXhPZignX192bGlzdCcpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjKTtcbiAgICAgICAgICAgICAgICAgICAgICBtYXBbYy5rZXldID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAoYy5kYXRhIHx8IChjLmRhdGEgPSB7fSkpLnRyYW5zaXRpb24gPSB0cmFuc2l0aW9uRGF0YTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHRzID0gYy5jb21wb25lbnRPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lXzEgPSBvcHRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gZ2V0Q29tcG9uZW50TmFtZShvcHRzLkN0b3Iub3B0aW9ucykgfHwgb3B0cy50YWcgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjLnRhZztcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuJDIoXCI8dHJhbnNpdGlvbi1ncm91cD4gY2hpbGRyZW4gbXVzdCBiZSBrZXllZDogPFwiLmNvbmNhdChuYW1lXzEsIFwiPlwiKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZXZDaGlsZHJlbikge1xuICAgICAgICAgICAgICB2YXIga2VwdCA9IFtdO1xuICAgICAgICAgICAgICB2Y
3XIgcmVtb3ZlZCA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgdmFyIGMgPSBwcmV2Q2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgICBjLmRhdGEudHJhbnNpdGlvbiA9IHRyYW5zaXRpb25EYXRhO1xuICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGlzIG5vdCB0eXBlZCBpbiBOb2RlXG4gICAgICAgICAgICAgICAgICBjLmRhdGEucG9zID0gYy5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICBpZiAobWFwW2Mua2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgIGtlcHQucHVzaChjKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQucHVzaChjKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLmtlcHQgPSBoKHRhZywgbnVsbCwga2VwdCk7XG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlZCA9IHJlbW92ZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBoKHRhZywgbnVsbCwgY2hpbGRyZW4pO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbjtcbiAgICAgICAgICB2YXIgbW92ZUNsYXNzID0gdGhpcy5tb3ZlQ2xhc3MgfHwgKHRoaXMubmFtZSB8fCAndicpICsgJy1tb3ZlJztcbiAgICAgICAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5oYXNNb3ZlKGNoaWxkcmVuWzBdLmVsbSwgbW92ZUNsYXNzKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIGRpdmlkZSB0aGUgd29yayBpbnRvIHRocmVlIGxvb3BzIHRvIGF2b2lkIG1peGluZyBET00gcmVhZHMgYW5kIHdyaXRlc1xuICAgICAgICAgIC8vIGluIGVhY2ggaXRlcmF0aW9uIC0gd2hpY2ggaGVscHMgcHJldmVudCBsYXlvdXQgdGhyYXNoaW5nLlxuICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goY2FsbFBlbmRpbmdDYnMpO1xuICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2gocmVjb3JkUG9zaXRpb24pO1xuICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goYXBwbHlUcmFuc2xhdGlvbik7XG4gICAgICAgICAgLy8gZm9yY2UgcmVmbG93IHRvIHB1dCBldmVyeXRoaW5nIGluIHBvc2l0aW9uXG4gICAgICAgICAgLy8gYXNzaWduIHRvIHRoaXMgdG8gYXZvaWQgYmVpbmcgcmVtb3ZlZCBpbiB0cmVlLXNoYWtpbmdcbiAgICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgICAgICB0aGlzLl9yZWZsb3cgPSBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodDtcbiAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICAgIGlmIChjLmRhdGEubW92ZWQpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBlbF8xID0gYy5lbG07XG4gICAgICAgICAgICAgICAgICB2Y
3XIgcyA9IGVsXzEuc3R5bGU7XG4gICAgICAgICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWxfMSwgbW92ZUNsYXNzKTtcbiAgICAgICAgICAgICAgICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcnO1xuICAgICAgICAgICAgICAgICAgZWxfMS5hZGRFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgKGVsXzEuX21vdmVDYiA9IGZ1bmN0aW9uIGNiKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLnRhcmdldCAhPT0gZWxfMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGlmICghZSB8fCAvdHJhbnNmb3JtJC8udGVzdChlLnByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxfMS5yZW1vdmVFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgY2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBlbF8xLl9tb3ZlQ2IgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWxfMSwgbW92ZUNsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgaGFzTW92ZTogZnVuY3Rpb24gKGVsLCBtb3ZlQ2xhc3MpIHtcbiAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgIGlmICghaGFzVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICBpZiAodGhpcy5faGFzTW92ZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhc01vdmU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gRGV0ZWN0IHdoZXRoZXIgYW4gZWxlbWVudCB3aXRoIHRoZSBtb3ZlIGNsYXNzIGFwcGxpZWQgaGFzXG4gICAgICAgICAgICAgIC8vIENTUyB0cmFuc2l0aW9ucy4gU2luY2UgdGhlIGVsZW1lbnQgbWF5IGJlIGluc2lkZSBhbiBlbnRlcmluZ1xuICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9uIGF0IHRoaXMgdmVyeSBtb21lbnQsIHdlIG1ha2UgYSBjbG9uZSBvZiBpdCBhbmQgcmVtb3ZlXG4gICAgICAgICAgICAgIC8vIGFsbCBvdGhlciB0cmFuc2l0aW9uIGNsYXNzZXMgYXBwbGllZCB0byBlbnN1cmUgb25seSB0aGUgbW92ZSBjbGFzc1xuICAgICAgICAgICAgICAvLyBpcyBhcHBsaWVkLlxuICAgICAgICAgICAgICB2Y
3XIgY2xvbmUgPSBlbC5jbG9uZU5vZGUoKTtcbiAgICAgICAgICAgICAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgICAgICAgICAgICAgICAgZWwuX3RyYW5zaXRpb25DbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKGNscykge1xuICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNsYXNzKGNsb25lLCBjbHMpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYWRkQ2xhc3MoY2xvbmUsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgICAgIGNsb25lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgIHRoaXMuJGVsLmFwcGVuZENoaWxkKGNsb25lKTtcbiAgICAgICAgICAgICAgdmFyIGluZm8gPSBnZXRUcmFuc2l0aW9uSW5mbyhjbG9uZSk7XG4gICAgICAgICAgICAgIHRoaXMuJGVsLnJlbW92ZUNoaWxkKGNsb25lKTtcbiAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLl9oYXNNb3ZlID0gaW5mby5oYXNUcmFuc2Zvcm0pO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfTtcbiAgZnVuY3Rpb24gY2FsbFBlbmRpbmdDYnMoYykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoYy5lbG0uX21vdmVDYikge1xuICAgICAgICAgIGMuZWxtLl9tb3ZlQ2IoKTtcbiAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGMuZWxtLl9lbnRlckNiKSB7XG4gICAgICAgICAgYy5lbG0uX2VudGVyQ2IoKTtcbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiByZWNvcmRQb3NpdGlvbihjKSB7XG4gICAgICBjLmRhdGEubmV3UG9zID0gYy5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIH1cbiAgZnVuY3Rpb24gYXBwbHlUcmFuc2xhdGlvbihjKSB7XG4gICAgICB2Y
3XIgb2xkUG9zID0gYy5kYXRhLnBvcztcbiAgICAgIHZhciBuZXdQb3MgPSBjLmRhdGEubmV3UG9zO1xuICAgICAgdmFyIGR4ID0gb2xkUG9zLmxlZnQgLSBuZXdQb3MubGVmdDtcbiAgICAgIHZhciBkeSA9IG9sZFBvcy50b3AgLSBuZXdQb3MudG9wO1xuICAgICAgaWYgKGR4IHx8IGR5KSB7XG4gICAgICAgICAgYy5kYXRhLm1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICB2YXIgcyA9IGMuZWxtLnN0eWxlO1xuICAgICAgICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBcInRyYW5zbGF0ZShcIi5jb25jYXQoZHgsIFwicHgsXCIpLmNvbmNhdChkeSwgXCJweClcIik7XG4gICAgICAgICAgcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMnO1xuICAgICAgfVxuICB9XG5cbiAgdmFyIHBsYXRmb3JtQ29tcG9uZW50cyA9IHtcbiAgICAgIFRyYW5zaXRpb246IFRyYW5zaXRpb24sXG4gICAgICBUcmFuc2l0aW9uR3JvdXA6IFRyYW5zaXRpb25Hcm91cFxuICB9O1xuXG4gIC8vIGluc3RhbGwgcGxhdGZvcm0gc3BlY2lmaWMgdXRpbHNcbiAgVnVlLmNvbmZpZy5tdXN0VXNlUHJvcCA9IG11c3RVc2VQcm9wO1xuICBWdWUuY29uZmlnLmlzUmVzZXJ2ZWRUYWcgPSBpc1Jlc2VydmVkVGFnO1xuICBWdWUuY29uZmlnLmlzUmVzZXJ2ZWRBdHRyID0gaXNSZXNlcnZlZEF0dHI7XG4gIFZ1ZS5jb25maWcuZ2V0VGFnTmFtZXNwYWNlID0gZ2V0VGFnTmFtZXNwYWNlO1xuICBWdWUuY29uZmlnLmlzVW5rbm93bkVsZW1lbnQgPSBpc1Vua25vd25FbGVtZW50O1xuICAvLyBpbnN0YWxsIHBsYXRmb3JtIHJ1bnRpbWUgZGlyZWN0aXZlcyAmIGNvbXBvbmVudHNcbiAgZXh0ZW5kKFZ1ZS5vcHRpb25zLmRpcmVjdGl2ZXMsIHBsYXRmb3JtRGlyZWN0aXZlcyk7XG4gIGV4dGVuZChWdWUub3B0aW9ucy5jb21wb25lbnRzLCBwbGF0Zm9ybUNvbXBvbmVudHMpO1xuICAvLyBpbnN0YWxsIHBsYXRmb3JtIHBhdGNoIGZ1bmN0aW9uXG4gIFZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fID0gaW5Ccm93c2VyID8gcGF0Y2ggOiBub29wO1xuICAvLyBwdWJsaWMgbW91bnQgbWV0aG9kXG4gIFZ1ZS5wcm90b3R5cGUuJG1vdW50ID0gZnVuY3Rpb24gKGVsLCBoeWRyYXRpbmcpIHtcbiAgICAgIGVsID0gZWwgJiYgaW5Ccm93c2VyID8gcXVlcnkoZWwpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIG1vdW50Q29tcG9uZW50KHRoaXMsIGVsLCBoeWRyYXRpbmcpO1xuICB9O1xuICAvLyBkZXZ0b29scyBnbG9iYWwgaG9va1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoaW5Ccm93c2VyKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoY29uZmlnLmRldnRvb2xzKSB7XG4gICAgICAgICAgICAgIGlmIChkZXZ0b29scykge1xuICAgICAgICAgICAgICAgICAgZGV2dG9vbHMuZW1pdCgnaW5pdCcsIFZ1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgICBjb25zb2xlW2NvbnNvbGUuaW5mbyA/ICdpbmZvJyA6ICdsb2cnXSgnRG93bmxvYWQgdGhlIFZ1ZSBEZXZ0b29scyBleHRlbnNpb24gZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtZGV2dG9vbHMnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29uZmlnLnByb2R1Y3Rpb25UaXAgIT09IGZhbHNlICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgIGNvbnNvbGVbY29uc29sZS5pbmZvID8gJ2luZm8nIDogJ2xvZyddKFwiWW91IGFyZSBydW5uaW5nIFZ1ZSBpbiBkZXZlbG9wbWVudCBtb2RlLlxcblwiICtcbiAgICAgICAgICAgICAgICAgIFwiTWFrZSBzdXJlIHRvIHR1cm4gb24gcHJvZHVjdGlvbiBtb2RlIHdoZW4gZGVwbG95aW5nIGZvciBwcm9kdWN0aW9uLlxcblwiICtcbiAgICAgICAgICAgICAgICAgIFwiU2VlIG1vcmUgdGlwcyBhdCBodHRwczovL3Z1ZWpzLm9yZy9ndWlkZS9kZXBsb3ltZW50Lmh0bWxcIik7XG4gICAgICAgICAgfVxuICAgICAgfSwgMCk7XG4gIH1cblxuICB2YXIgZGVmYXVsdFRhZ1JFID0gL1xce1xceygoPzoufFxccj9cXG4pKz8pXFx9XFx9L2c7XG4gIHZhciByZWdleEVzY2FwZVJFID0gL1stLiorP14ke30oKXxbXFxdXFwvXFxcXF0vZztcbiAgdmFyIGJ1aWxkUmVnZXggPSBjYWNoZWQoZnVuY3Rpb24gKGRlbGltaXRlcnMpIHtcbiAgICAgIHZhciBvcGVuID0gZGVsaW1pdGVyc1swXS5yZXBsYWNlKHJlZ2V4RXNjYXBlUkUsICdcXFxcJCYnKTtcbiAgICAgIHZhciBjbG9zZSA9IGRlbGltaXRlcnNbMV0ucmVwbGFjZShyZWdleEVzY2FwZVJFLCAnXFxcXCQmJyk7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChvcGVuICsgJygoPzoufFxcXFxuKSs/KScgKyBjbG9zZSwgJ2cnKTtcbiAgfSk7XG4gIGZ1bmN0aW9uIHBhcnNlVGV4dCh0ZXh0LCBkZWxpbWl0ZXJzKSB7XG4gICAgICAvL0B0cy1leHBlY3QtZXJyb3JcbiAgICAgIHZhciB0YWdSRSA9IGRlbGltaXRlcnMgPyBidWlsZFJlZ2V4KGRlbGltaXRlcnMpIDogZGVmYXVsdFRhZ1JFO1xuICAgICAgaWYgKCF0YWdSRS50ZXN0KHRleHQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHRva2VucyA9IFtdO1xuICAgICAgdmFyIHJhd1Rva2VucyA9IFtdO1xuICAgICAgdmFyIGxhc3RJbmRleCA9ICh0YWdSRS5sYXN0SW5kZXggPSAwKTtcbiAgICAgIHZhciBtYXRjaCwgaW5kZXgsIHRva2VuVmFsdWU7XG4gICAgICB3aGlsZSAoKG1hdGNoID0gdGFnUkUuZXhlYyh0ZXh0KSkpIHtcbiAgICAgICAgICBpbmRleCA9IG1hdGNoLmluZGV4O1xuICAgICAgICAgIC8vIHB1c2ggdGV4dCB0b2tlblxuICAgICAgICAgIGlmIChpbmRleCA+IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgICByYXdUb2tlbnMucHVzaCgodG9rZW5WYWx1ZSA9IHRleHQuc2xpY2UobGFzdEluZGV4LCBpbmRleCkpKTtcbiAgICAgICAgICAgICAgdG9rZW5zLnB1c2goSlNPTi5zdHJpbmdpZnkodG9rZW5WYWx1ZSkpO1xuICAgICAgICAgI
3H1cbiAgICAgICAgICAvLyB0YWcgdG9rZW5cbiAgICAgICAgICB2YXIgZXhwID0gcGFyc2VGaWx0ZXJzKG1hdGNoWzFdLnRyaW0oKSk7XG4gICAgICAgICAgdG9rZW5zLnB1c2goXCJfcyhcIi5jb25jYXQoZXhwLCBcIilcIikpO1xuICAgICAgICAgIHJhd1Rva2Vucy5wdXNoKHsgJ0BiaW5kaW5nJzogZXhwIH0pO1xuICAgICAgICAgIGxhc3RJbmRleCA9IGluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKGxhc3RJbmRleCA8IHRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgcmF3VG9rZW5zLnB1c2goKHRva2VuVmFsdWUgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCkpKTtcbiAgICAgICAgICB0b2tlbnMucHVzaChKU09OLnN0cmluZ2lmeSh0b2tlblZhbHVlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAgIGV4cHJlc3Npb246IHRva2Vucy5qb2luKCcrJyksXG4gICAgICAgICAgdG9rZW5zOiByYXdUb2tlbnNcbiAgICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1Ob2RlJDEoZWwsIG9wdGlvbnMpIHtcbiAgICAgIHZhciB3YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICAgICAgdmFyIHN0YXRpY0NsYXNzID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ2NsYXNzJyk7XG4gICAgICBpZiAoc3RhdGljQ2xhc3MpIHtcbiAgICAgICAgICB2YXIgcmVzID0gcGFyc2VUZXh0KHN0YXRpY0NsYXNzLCBvcHRpb25zLmRlbGltaXRlcnMpO1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgd2FybihcImNsYXNzPVxcXCJcIi5jb25jYXQoc3RhdGljQ2xhc3MsIFwiXFxcIjogXCIpICtcbiAgICAgICAgICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgJ1VzZSB2LWJpbmQgb3IgdGhlIGNvbG9uIHNob3J0aGFuZCBpbnN0ZWFkLiBGb3IgZXhhbXBsZSwgJyArXG4gICAgICAgICAgICAgICAgICAnaW5zdGVhZCBvZiA8ZGl2IGNsYXNzPVwie3sgdmFsIH19XCI+LCB1c2UgPGRpdiA6Y2xhc3M9XCJ2YWxcIj4uJywgZWwucmF3QXR0cnNNYXBbJ2NsYXNzJ10pO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdGF0aWNDbGFzcykge1xuICAgICAgICAgIGVsLnN0YXRpY0NsYXNzID0gSlNPTi5zdHJpbmdpZnkoc3RhdGljQ2xhc3MucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKSk7XG4gICAgICB9XG4gICAgICB2Y
3XIgY2xhc3NCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdjbGFzcycsIGZhbHNlIC8qIGdldFN0YXRpYyAqLyk7XG4gICAgICBpZiAoY2xhc3NCaW5kaW5nKSB7XG4gICAgICAgICAgZWwuY2xhc3NCaW5kaW5nID0gY2xhc3NCaW5kaW5nO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdlbkRhdGEkMihlbCkge1xuICAgICAgdmFyIGRhdGEgPSAnJztcbiAgICAgIGlmIChlbC5zdGF0aWNDbGFzcykge1xuICAgICAgICAgIGRhdGEgKz0gXCJzdGF0aWNDbGFzczpcIi5jb25jYXQoZWwuc3RhdGljQ2xhc3MsIFwiLFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbC5jbGFzc0JpbmRpbmcpIHtcbiAgICAgICAgICBkYXRhICs9IFwiY2xhc3M6XCIuY29uY2F0KGVsLmNsYXNzQmluZGluZywgXCIsXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgdmFyIGtsYXNzID0ge1xuICAgICAgc3RhdGljS2V5czogWydzdGF0aWNDbGFzcyddLFxuICAgICAgdHJhbnNmb3JtTm9kZTogdHJhbnNmb3JtTm9kZSQxLFxuICAgICAgZ2VuRGF0YTogZ2VuRGF0YSQyXG4gIH07XG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtTm9kZShlbCwgb3B0aW9ucykge1xuICAgICAgdmFyIHdhcm4gPSBvcHRpb25zLndhcm4gfHwgYmFzZVdhcm47XG4gICAgICB2YXIgc3RhdGljU3R5bGUgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc3R5bGUnKTtcbiAgICAgIGlmIChzdGF0aWNTdHlsZSkge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIHJlcyA9IHBhcnNlVGV4dChzdGF0aWNTdHlsZSwgb3B0aW9ucy5kZWxpbWl0ZXJzKTtcbiAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgd2FybihcInN0eWxlPVxcXCJcIi5jb25jYXQoc3RhdGljU3R5bGUsIFwiXFxcIjogXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAnSW50ZXJwb2xhdGlvbiBpbnNpZGUgYXR0cmlidXRlcyBoYXMgYmVlbiByZW1vdmVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAnVXNlIHYtYmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAnaW5zdGVhZCBvZiA8ZGl2IHN0eWxlPVwie3sgdmFsIH19XCI+LCB1c2UgPGRpdiA6c3R5bGU9XCJ2YWxcIj4uJywgZWwucmF3QXR0cnNNYXBbJ3N0eWxlJ10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsLnN0YXRpY1N0eWxlID0gSlNPTi5zdHJpbmdpZnkocGFyc2VTdHlsZVRleHQoc3RhdGljU3R5bGUpKTtcbiAgICAgIH1cbiAgICAgIHZhciBzdHlsZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3N0eWxlJywgZmFsc2UgLyogZ2V0U3RhdGljICovKTtcbiAgICAgIGlmIChzdHlsZUJpbmRpbmcpIHtcbiAgICAgICAgICBlbC5zdHlsZUJpbmRpbmcgPSBzdHlsZUJpbmRpbmc7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZ2VuRGF0YSQxKGVsKSB7XG4gICAgICB2Y
3XIgZGF0YSA9ICcnO1xuICAgICAgaWYgKGVsLnN0YXRpY1N0eWxlKSB7XG4gICAgICAgICAgZGF0YSArPSBcInN0YXRpY1N0eWxlOlwiLmNvbmNhdChlbC5zdGF0aWNTdHlsZSwgXCIsXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGVsLnN0eWxlQmluZGluZykge1xuICAgICAgICAgIGRhdGEgKz0gXCJzdHlsZTooXCIuY29uY2F0KGVsLnN0eWxlQmluZGluZywgXCIpLFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICB9XG4gIHZhciBzdHlsZSA9IHtcbiAgICAgIHN0YXRpY0tleXM6IFsnc3RhdGljU3R5bGUnXSxcbiAgICAgIHRyYW5zZm9ybU5vZGU6IHRyYW5zZm9ybU5vZGUsXG4gICAgICBnZW5EYXRhOiBnZW5EYXRhJDFcbiAgfTtcblxuICB2YXIgZGVjb2RlcjtcbiAgdmFyIGhlID0ge1xuICAgICAgZGVjb2RlOiBmdW5jdGlvbiAoaHRtbCkge1xuICAgICAgICAgIGRlY29kZXIgPSBkZWNvZGVyIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIGRlY29kZXIuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgICAgICByZXR1cm4gZGVjb2Rlci50ZXh0Q29udGVudDtcbiAgICAgIH1cbiAgfTtcblxuICB2YXIgaXNVbmFyeVRhZyA9IG1ha2VNYXAoJ2FyZWEsYmFzZSxicixjb2wsZW1iZWQsZnJhbWUsaHIsaW1nLGlucHV0LGlzaW5kZXgsa2V5Z2VuLCcgK1xuICAgICAgJ2xpbmssbWV0YSxwYXJhbSxzb3VyY2UsdHJhY2ssd2JyJyk7XG4gIC8vIEVsZW1lbnRzIHRoYXQgeW91IGNhbiwgaW50ZW50aW9uYWxseSwgbGVhdmUgb3BlblxuICAvLyAoYW5kIHdoaWNoIGNsb3NlIHRoZW1zZWx2ZXMpXG4gIHZhciBjYW5CZUxlZnRPcGVuVGFnID0gbWFrZU1hcCgnY29sZ3JvdXAsZGQsZHQsbGksb3B0aW9ucyxwLHRkLHRmb290LHRoLHRoZWFkLHRyLHNvdXJjZScpO1xuICAvLyBIVE1MNSB0YWdzIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZGljZXMuaHRtbCNlbGVtZW50cy0zXG4gIC8vIFBocmFzaW5nIENvbnRlbnQgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG9tLmh0bWwjcGhyYXNpbmctY29udGVudFxuICB2YXIgaXNOb25QaHJhc2luZ1RhZyA9IG1ha2VNYXAoJ2FkZHJlc3MsYXJ0aWNsZSxhc2lkZSxiYXNlLGJsb2NrcXVvdGUsYm9keSxjYXB0aW9uLGNvbCxjb2xncm91cCxkZCwnICtcbiAgICAgICdkZXRhaWxzLGRpYWxvZyxkaXYsZGwsZHQsZmllbGRzZXQsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGZvcm0sJyArXG4gICAgICAnaDEsaDIsaDMsaDQsaDUsaDYsaGVhZCxoZWFkZXIsaGdyb3VwLGhyLGh0bWwsbGVnZW5kLGxpLG1lbnVpdGVtLG1ldGEsJyArXG4gICAgICAnb3B0Z3JvdXAsb3B0aW9uLHBhcmFtLHJwLHJ0LHNvdXJjZSxzdHlsZSxzdW1tYXJ5LHRib2R5LHRkLHRmb290LHRoLHRoZWFkLCcgK1xuICAgICAgJ3RpdGxlLHRyLHRyYWNrJyk7XG5cbiAgLyoqXG4gICAqIE5vdCB0eXBlLWNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGl0J3MgbW9zdGx5IHZlbmRvciBjb2RlLlxuICAgKi9cbiAgLy8gUmVndWxhciBFeHByZXNzaW9ucyBmb3IgcGFyc2luZyB0YWdzIGFuZCBhdHRyaWJ1dGVzXG4gIHZhciBhdHRyaWJ1dGUgPSAvXlxccyooW15cXHNcIic8PlxcLz1dKykoPzpcXHMqKD0pXFxzKig/OlwiKFteXCJdKilcIit8JyhbXiddKiknK3woW15cXHNcIic9PD5gXSspKSk/LztcbiAgdmFyIGR5bmFtaWNBcmdBdHRyaWJ1dGUgPSAvXlxccyooKD86di1bXFx3LV0rOnxAfDp8IylcXFtbXj1dKz9cXF1bXlxcc1wiJzw+XFwvPV0qKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vO1xuICB2YXIgbmNuYW1lID0gXCJbYS16QS1aX11bXFxcXC1cXFxcLjAtOV9hLXpBLVpcIi5jb25jYXQodW5pY29kZVJlZ0V4cC5zb3VyY2UsIFwiXSpcIik7XG4gIHZhciBxbmFtZUNhcHR1cmUgPSBcIigoPzpcIi5jb25jYXQobmNuYW1lLCBcIlxcXFw6KT9cIikuY29uY2F0KG5jbmFtZSwgXCIpXCIpO1xuICB2YXIgc3RhcnRUYWdPcGVuID0gbmV3IFJlZ0V4cChcIl48XCIuY29uY2F0KHFuYW1lQ2FwdHVyZSkpO1xuICB2YXIgc3RhcnRUYWdDbG9zZSA9IC9eXFxzKihcXC8/KT4vO1xuICB2YXIgZW5kVGFnID0gbmV3IFJlZ0V4cChcIl48XFxcXC9cIi5jb25jYXQocW5hbWVDYXB0dXJlLCBcIltePl0qPlwiKSk7XG4gIHZhciBkb2N0eXBlID0gL148IURPQ1RZUEUgW14+XSs+L2k7XG4gIC8vICM3Mjk4OiBlc2NhcGUgLSB0byBhdm9pZCBiZWluZyBwYXNzZWQgYXMgSFRNTCBjb21tZW50IHdoZW4gaW5saW5lZCBpbiBwYWdlXG4gIHZhciBjb21tZW50ID0gL148IVxcLS0vO1xuICB2YXIgY29uZGl0aW9uYWxDb21tZW50ID0gL148IVxcWy87XG4gIC8vIFNwZWNpYWwgRWxlbWVudHMgKGNhbiBjb250YWluIGFueXRoaW5nKVxuICB2YXIgaXNQbGFpblRleHRFbGVtZW50ID0gbWFrZU1hcCgnc2NyaXB0LHN0eWxlLHRleHRhcmVhJywgdHJ1ZSk7XG4gIHZhciByZUNhY2hlID0ge307XG4gIHZhciBkZWNvZGluZ01hcCA9IHtcbiAgICAgICcmbHQ7JzogJzwnLFxuICAgICAgJyZndDsnOiAnPicsXG4gICAgICAnJnF1b3Q7JzogJ1wiJyxcbiAgICAgICcmYW1wOyc6ICcmJyxcbiAgICAgICcmIzEwOyc6ICdcXG4nLFxuICAgICAgJyYjOTsnOiAnXFx0JyxcbiAgICAgICcmIzM5Oyc6IFwiJ1wiXG4gIH07XG4gIHZhciBlbmNvZGVkQXR0ciA9IC8mKD86bHR8Z3R8cXVvdHxhbXB8IzM5KTsvZztcbiAgdmFyIGVuY29kZWRBdHRyV2l0aE5ld0xpbmVzID0gLyYoPzpsdHxndHxxdW90fGFtcHwjMzl8IzEwfCM5KTsvZztcbiAgLy8gIzU5OTJcbiAgdmFyIGlzSWdub3JlTmV3bGluZVRhZyA9IG1ha2VNYXAoJ3ByZSx0ZXh0YXJlYScsIHRydWUpO1xuICB2YXIgc2hvdWxkSWdub3JlRmlyc3ROZXdsaW5lID0gZnVuY3Rpb24gKHRhZywgaHRtbCkge1xuICAgICAgcmV0dXJuIHRhZyAmJiBpc0lnbm9yZU5ld2xpbmVUYWcodGFnKSAmJiBodG1sWzBdID09PSAnXFxuJztcbiAgfTtcbiAgZnVuY3Rpb24gZGVjb2RlQXR0cih2YWx1ZSwgc2hvdWxkRGVjb2RlTmV3bGluZXMpIHtcbiAgICAgIHZhciByZSA9IHNob3VsZERlY29kZU5ld2xpbmVzID8gZW5jb2RlZEF0dHJXaXRoTmV3TGluZXMgOiBlbmNvZGVkQXR0cjtcbiAgICAgIHJldHVybi
3B2YWx1ZS5yZXBsYWNlKHJlLCBmdW5jdGlvbiAobWF0Y2gpIHsgcmV0dXJuIGRlY29kaW5nTWFwW21hdGNoXTsgfSk7XG4gIH1cbiAgZnVuY3Rpb24gcGFyc2VIVE1MKGh0bWwsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgdmFyIGV4cGVjdEhUTUwgPSBvcHRpb25zLmV4cGVjdEhUTUw7XG4gICAgICB2YXIgaXNVbmFyeVRhZyA9IG9wdGlvbnMuaXNVbmFyeVRhZyB8fCBubztcbiAgICAgIHZhciBjYW5CZUxlZnRPcGVuVGFnID0gb3B0aW9ucy5jYW5CZUxlZnRPcGVuVGFnIHx8IG5vO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciBsYXN0LCBsYXN0VGFnO1xuICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbGFzdCA9IGh0bWw7XG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIG5vdCBpbiBhIHBsYWludGV4dCBjb250ZW50IGVsZW1lbnQgbGlrZSBzY3JpcHQvc3R5bGVcbiAgICAgICAgICBpZiAoIWxhc3RUYWcgfHwgIWlzUGxhaW5UZXh0RWxlbWVudChsYXN0VGFnKSkge1xuICAgICAgICAgICAgICB2YXIgdGV4dEVuZCA9IGh0bWwuaW5kZXhPZignPCcpO1xuICAgICAgICAgICAgICBpZiAodGV4dEVuZCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgLy8gQ29tbWVudDpcbiAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50LnRlc3QoaHRtbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tbWVudEVuZCA9IGh0bWwuaW5kZXhPZignLS0+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRFbmQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zaG91bGRLZWVwQ29tbWVudCAmJiBvcHRpb25zLmNvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29tbWVudChodG1sLnN1YnN0cmluZyg0LCBjb21tZW50RW5kKSwgaW5kZXgsIGluZGV4ICsgY29tbWVudEVuZCArIDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoY29tbWVudEVuZCArIDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbmRpdGlvbmFsX2NvbW1lbnQjRG93bmxldmVsLXJldmVhbGVkX2NvbmRpdGlvbmFsX2NvbW1lbnRcbiAgICAgICAgICAgICAgICAgIGlmIChjb25kaXRpb25hbENvbW1lbnQudGVzdChodG1sKSkge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciBjb25kaXRpb25hbEVuZCA9IGh0bWwuaW5kZXhPZignXT4nKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZGl0aW9uYWxFbmQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKGNvbmRpdGlvbmFsRW5kICsgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy8gRG9jdHlwZTpcbiAgICAgICAgICAgICAgICAgIHZhciBkb2N0eXBlTWF0Y2ggPSBodG1sLm1hdGNoKGRvY3R5cGUpO1xuICAgICAgICAgICAgICAgICAgaWYgKGRvY3R5cGVNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoZG9jdHlwZU1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIEVuZCB0YWc6XG4gICAgICAgICAgICAgICAgICB2Y
3XIgZW5kVGFnTWF0Y2ggPSBodG1sLm1hdGNoKGVuZFRhZyk7XG4gICAgICAgICAgICAgICAgICBpZiAoZW5kVGFnTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VySW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKGVuZFRhZ01hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgcGFyc2VFbmRUYWcoZW5kVGFnTWF0Y2hbMV0sIGN1ckluZGV4LCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRhZzpcbiAgICAgICAgICAgICAgICAgIHZhciBzdGFydFRhZ01hdGNoID0gcGFyc2VTdGFydFRhZygpO1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0VGFnTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdGFydFRhZyhzdGFydFRhZ01hdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkSWdub3JlRmlyc3ROZXdsaW5lKHN0YXJ0VGFnTWF0Y2gudGFnTmFtZSwgaHRtbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgxKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgdGV4dCA9IHZvaWQgMCwgcmVzdCA9IHZvaWQgMCwgbmV4dCA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgaWYgKHRleHRFbmQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgcmVzdCA9IGh0bWwuc2xpY2UodGV4dEVuZCk7XG4gICAgICAgICAgICAgICAgICB3aGlsZSAoIWVuZFRhZy50ZXN0KHJlc3QpICYmXG4gICAgICAgICAgICAgICAgICAgICAgIXN0YXJ0VGFnT3Blbi50ZXN0KHJlc3QpICYmXG4gICAgICAgICAgICAgICAgICAgICAgIWNvbW1lbnQudGVzdChyZXN0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICFjb25kaXRpb25hbENvbW1lbnQudGVzdChyZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIDwgaW4gcGxhaW4gdGV4dCwgYmUgZm9yZ2l2aW5nIGFuZCB0cmVhdCBpdCBhcyB0ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHJlc3QuaW5kZXhPZignPCcsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0IDwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgdGV4dEVuZCArPSBuZXh0O1xuICAgICAgICAgICAgICAgICAgICAgIHJlc3QgPSBodG1sLnNsaWNlKHRleHRFbmQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGV4dCA9IGh0bWwuc3Vic3RyaW5nKDAsIHRleHRFbmQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0ZXh0RW5kIDwgMCkge1xuICAgICAgICAgICAgICAgICAgdGV4dCA9IGh0bWw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICAgICAgICAgIGFkdmFuY2UodGV4dC5sZW5ndGgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmNoYXJzICYmIHRleHQpIHtcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY2hhcnModGV4dCwgaW5kZXggLSB0ZXh0Lmxlbmd0aCwgaW5kZXgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2Y
3XIgZW5kVGFnTGVuZ3RoXzEgPSAwO1xuICAgICAgICAgICAgICB2YXIgc3RhY2tlZFRhZ18xID0gbGFzdFRhZy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICB2YXIgcmVTdGFja2VkVGFnID0gcmVDYWNoZVtzdGFja2VkVGFnXzFdIHx8XG4gICAgICAgICAgICAgICAgICAocmVDYWNoZVtzdGFja2VkVGFnXzFdID0gbmV3IFJlZ0V4cCgnKFtcXFxcc1xcXFxTXSo/KSg8LycgKyBzdGFja2VkVGFnXzEgKyAnW14+XSo+KScsICdpJykpO1xuICAgICAgICAgICAgICB2YXIgcmVzdCA9IGh0bWwucmVwbGFjZShyZVN0YWNrZWRUYWcsIGZ1bmN0aW9uIChhbGwsIHRleHQsIGVuZFRhZykge1xuICAgICAgICAgICAgICAgICAgZW5kVGFnTGVuZ3RoXzEgPSBlbmRUYWcubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgaWYgKCFpc1BsYWluVGV4dEVsZW1lbnQoc3RhY2tlZFRhZ18xKSAmJiBzdGFja2VkVGFnXzEgIT09ICdub3NjcmlwdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPCFcXC0tKFtcXHNcXFNdKj8pLS0+L2csICckMScpIC8vICM3Mjk4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88IVxcW0NEQVRBXFxbKFtcXHNcXFNdKj8pXV0+L2csICckMScpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpcnN0TmV3bGluZShzdGFja2VkVGFnXzEsIHRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jaGFycykge1xuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY2hhcnModGV4dCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpbmRleCArPSBodG1sLmxlbmd0aCAtIHJlc3QubGVuZ3RoO1xuICAgICAgICAgICAgICBodG1sID0gcmVzdDtcbiAgICAgICAgICAgICAgcGFyc2VFbmRUYWcoc3RhY2tlZFRhZ18xLCBpbmRleCAtIGVuZFRhZ0xlbmd0aF8xLCBpbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChodG1sID09PSBsYXN0KSB7XG4gICAgICAgICAgICAgIG9wdGlvbnMuY2hhcnMgJiYgb3B0aW9ucy5jaGFycyhodG1sKTtcbiAgICAgICAgICAgICAgaWYgKCFzdGFjay5sZW5ndGggJiYgb3B0aW9ucy53YXJuKSB7XG4gICAgICAgICAgICAgICAgICBvcHRpb25zLndhcm4oXCJNYWwtZm9ybWF0dGVkIHRhZyBhdCBlbmQgb2YgdGVtcGxhdGU6IFxcXCJcIi5jb25jYXQoaHRtbCwgXCJcXFwiXCIpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGluZGV4ICsgaHRtbC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHdoaWxlIChodG1sKSB7XG4gICAgICAgICAgdmFyIHN0YXRlXzEgPSBfbG9vcF8xKCk7XG4gICAgICAgICAgaWYgKHN0YXRlXzEgPT09IFwiYnJlYWtcIilcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBDbGVhbiB1cCBhbnkgcmVtYWluaW5nIHRhZ3NcbiAgICAgIHBhcnNlRW5kVGFnKCk7XG4gICAgICBmdW5jdGlvbiBhZHZhbmNlKG4pIHtcbiAgICAgICAgICBpbmRleCArPSBuO1xuICAgICAgICAgIGh0bWwgPSBodG1sLnN1YnN0cmluZyhuKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBhcnNlU3RhcnRUYWcoKSB7XG4gICAgICAgICAgdmFyIHN0YXJ0ID0gaHRtbC5tYXRjaChzdGFydFRhZ09wZW4pO1xuICAgICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgICAgICB2Y
3XIgbWF0Y2ggPSB7XG4gICAgICAgICAgICAgICAgICB0YWdOYW1lOiBzdGFydFsxXSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiBbXSxcbiAgICAgICAgICAgICAgICAgIHN0YXJ0OiBpbmRleFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBhZHZhbmNlKHN0YXJ0WzBdLmxlbmd0aCk7XG4gICAgICAgICAgICAgIHZhciBlbmQgPSB2b2lkIDAsIGF0dHIgPSB2b2lkIDA7XG4gICAgICAgICAgICAgIHdoaWxlICghKGVuZCA9IGh0bWwubWF0Y2goc3RhcnRUYWdDbG9zZSkpICYmXG4gICAgICAgICAgICAgICAgICAoYXR0ciA9IGh0bWwubWF0Y2goZHluYW1pY0FyZ0F0dHJpYnV0ZSkgfHwgaHRtbC5tYXRjaChhdHRyaWJ1dGUpKSkge1xuICAgICAgICAgICAgICAgICAgYXR0ci5zdGFydCA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgYWR2YW5jZShhdHRyWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICBhdHRyLmVuZCA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgbWF0Y2guYXR0cnMucHVzaChhdHRyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZW5kKSB7XG4gICAgICAgICAgICAgICAgICBtYXRjaC51bmFyeVNsYXNoID0gZW5kWzFdO1xuICAgICAgICAgICAgICAgICAgYWR2YW5jZShlbmRbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgIG1hdGNoLmVuZCA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gaGFuZGxlU3RhcnRUYWcobWF0Y2gpIHtcbiAgICAgICAgICB2Y
3XIgdGFnTmFtZSA9IG1hdGNoLnRhZ05hbWU7XG4gICAgICAgICAgdmFyIHVuYXJ5U2xhc2ggPSBtYXRjaC51bmFyeVNsYXNoO1xuICAgICAgICAgIGlmIChleHBlY3RIVE1MKSB7XG4gICAgICAgICAgICAgIGlmIChsYXN0VGFnID09PSAncCcgJiYgaXNOb25QaHJhc2luZ1RhZyh0YWdOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgcGFyc2VFbmRUYWcobGFzdFRhZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGNhbkJlTGVmdE9wZW5UYWcodGFnTmFtZSkgJiYgbGFzdFRhZyA9PT0gdGFnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgcGFyc2VFbmRUYWcodGFnTmFtZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHVuYXJ5ID0gaXNVbmFyeVRhZyh0YWdOYW1lKSB8fCAhIXVuYXJ5U2xhc2g7XG4gICAgICAgICAgdmFyIGwgPSBtYXRjaC5hdHRycy5sZW5ndGg7XG4gICAgICAgICAgdmFyIGF0dHJzID0gbmV3IEFycmF5KGwpO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgIHZhciBhcmdzID0gbWF0Y2guYXR0cnNbaV07XG4gICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGFyZ3NbM10gfHwgYXJnc1s0XSB8fCBhcmdzWzVdIHx8ICcnO1xuICAgICAgICAgICAgICB2YXIgc2hvdWxkRGVjb2RlTmV3bGluZXMgPSB0YWdOYW1lID09PSAnYScgJiYgYXJnc1sxXSA9PT0gJ2hyZWYnXG4gICAgICAgICAgICAgICAgICA/IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmXG4gICAgICAgICAgICAgICAgICA6IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXM7XG4gICAgICAgICAgICAgIGF0dHJzW2ldID0ge1xuICAgICAgICAgICAgICAgICAgbmFtZTogYXJnc1sxXSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBkZWNvZGVBdHRyKHZhbHVlLCBzaG91bGREZWNvZGVOZXdsaW5lcylcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzW2ldLnN0YXJ0ID0gYXJncy5zdGFydCArIGFyZ3NbMF0ubWF0Y2goL15cXHMqLykubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgYXR0cnNbaV0uZW5kID0gYXJncy5lbmQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF1bmFyeSkge1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHRhZzogdGFnTmFtZSxcbiAgICAgICAgICAgICAgICAgIGxvd2VyQ2FzZWRUYWc6IHRhZ05hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiBhdHRycyxcbiAgICAgICAgICAgICAgICAgIHN0YXJ0OiBtYXRjaC5zdGFydCxcbiAgICAgICAgICAgICAgICAgIGVuZDogbWF0Y2guZW5kXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBsYXN0VGFnID0gdGFnTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgICAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBhdHRycywgdW5hcnksIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBhcnNlRW5kVGFnKHRhZ05hbWUsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICB2Y
3XIgcG9zLCBsb3dlckNhc2VkVGFnTmFtZTtcbiAgICAgICAgICBpZiAoc3RhcnQgPT0gbnVsbClcbiAgICAgICAgICAgICAgc3RhcnQgPSBpbmRleDtcbiAgICAgICAgICBpZiAoZW5kID09IG51bGwpXG4gICAgICAgICAgICAgIGVuZCA9IGluZGV4O1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGNsb3Nlc3Qgb3BlbmVkIHRhZyBvZiB0aGUgc2FtZSB0eXBlXG4gICAgICAgICAgaWYgKHRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgbG93ZXJDYXNlZFRhZ05hbWUgPSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIGZvciAocG9zID0gc3RhY2subGVuZ3RoIC0gMTsgcG9zID49IDA7IHBvcy0tKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoc3RhY2tbcG9zXS5sb3dlckNhc2VkVGFnID09PSBsb3dlckNhc2VkVGFnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZiBubyB0YWcgbmFtZSBpcyBwcm92aWRlZCwgY2xlYW4gc2hvcFxuICAgICAgICAgICAgICBwb3MgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocG9zID49IDApIHtcbiAgICAgICAgICAgICAgLy8gQ2xvc2UgYWxsIHRoZSBvcGVuIGVsZW1lbnRzLCB1cCB0aGUgc3RhY2tcbiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gcG9zOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgIGlmICgoaSA+IHBvcyB8fCAhdGFnTmFtZSkgJiYgb3B0aW9ucy53YXJuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy53YXJuKFwidGFnIDxcIi5jb25jYXQoc3RhY2tbaV0udGFnLCBcIj4gaGFzIG5vIG1hdGNoaW5nIGVuZCB0YWcuXCIpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFja1tpXS5zdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBzdGFja1tpXS5lbmRcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZW5kKHN0YWNrW2ldLnRhZywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvcGVuIGVsZW1lbnRzIGZyb20gdGhlIHN0YWNrXG4gICAgICAgICAgICAgIHN0YWNrLmxlbmd0aCA9IHBvcztcbiAgICAgICAgICAgICAgbGFzdFRhZyA9IHBvcyAmJiBzdGFja1twb3MgLSAxXS50YWc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGxvd2VyQ2FzZWRUYWdOYW1lID09PSAnYnInKSB7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXJ0KHRhZ05hbWUsIFtdLCB0cnVlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChsb3dlckNhc2VkVGFnTmFtZSA9PT0gJ3AnKSB7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXJ0KHRhZ05hbWUsIFtdLCBmYWxzZSwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW5kKSB7XG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmVuZCh0YWdOYW1lLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIHZhciBvblJFID0gL15AfF52LW9uOi87XG4gIHZhciBkaXJSRSA9IC9edi18XkB8Xjp8XiMvO1xuICB2YXIgZm9yQWxpYXNSRSA9IC8oW1xcc1xcU10qPylcXHMrKD86aW58b2YpXFxzKyhbXFxzXFxTXSopLztcbiAgdmFyIGZvckl0ZXJhdG9yUkUgPSAvLChbXixcXH1cXF1dKikoPzosKFteLFxcfVxcXV0qKSk/JC87XG4gIHZhciBzdHJpcFBhcmVuc1JFID0gL15cXCh8XFwpJC9nO1xuICB2YXIgZHluYW1pY0FyZ1JFID0gL15cXFsuKlxcXSQvO1xuICB2YXIgYXJnUkUgPSAvOiguKikkLztcbiAgdmFyIGJpbmRSRSA9IC9eOnxeXFwufF52LWJpbmQ6LztcbiAgdmFyIG1vZGlmaWVyUkUgPSAvXFwuW14uXFxdXSsoPz1bXlxcXV0qJCkvZztcbiAgdmFyIHNsb3RSRSA9IC9edi1zbG90KDp8JCl8XiMvO1xuICB2YXIgbGluZUJyZWFrUkUgPSAvW1xcclxcbl0vO1xuICB2YXIgd2hpdGVzcGFjZVJFID0gL1sgXFxmXFx0XFxyXFxuXSsvZztcbiAgdmFyIGludmFsaWRBdHRyaWJ1dGVSRSA9IC9bXFxzXCInPD5cXC89XS87XG4gIHZhciBkZWNvZGVIVE1MQ2FjaGVkID0gY2FjaGVkKGhlLmRlY29kZSk7XG4gIHZhciBlbXB0eVNsb3RTY29wZVRva2VuID0gXCJfZW1wdHlfXCI7XG4gIC8vIGNvbmZpZ3VyYWJsZSBzdGF0ZVxuICB2YXIgd2FybjtcbiAgdmFyIGRlbGltaXRlcnM7XG4gIHZhciB0cmFuc2Zvcm1zO1xuICB2YXIgcHJlVHJhbnNmb3JtcztcbiAgdmFyIHBvc3RUcmFuc2Zvcm1zO1xuICB2YXIgcGxhdGZvcm1Jc1ByZVRhZztcbiAgdmFyIHBsYXRmb3JtTXVzdFVzZVByb3A7XG4gIHZhciBwbGF0Zm9ybUdldFRhZ05hbWVzcGFjZTtcbiAgdmFyIG1heWJlQ29tcG9uZW50O1xuICBmdW5jdGlvbiBjcmVhdGVBU1RFbGVtZW50KHRhZywgYXR0cnMsIHBhcmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAxLFxuICAgICAgICAgIHRhZzogdGFnLFxuICAgICAgICAgIGF0dHJzTGlzdDogYXR0cnMsXG4gICAgICAgICAgYXR0cnNNYXA6IG1ha2VBdHRyc01hcChhdHRycyksXG4gICAgICAgICAgcmF3QXR0cnNNYXA6IHt9LFxuICAgICAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgfTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydCBIVE1MIHN0cmluZyB0byBBU1QuXG4gICAqL1xuICBmdW5jdGlvbiBwYXJzZSh0ZW1wbGF0ZSwgb3B0aW9ucykge1xuICAgICAgd2FybiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcbiAgICAgIHBsYXRmb3JtSXNQcmVUYWcgPSBvcHRpb25zLmlzUHJlVGFnIHx8IG5vO1xuICAgICAgcGxhdGZvcm1NdXN0VXNlUHJvcCA9IG9wdGlvbnMubXVzdFVzZVByb3AgfHwgbm87XG4gICAgICBwbGF0Zm9ybUdldFRhZ05hbWVzcGFjZSA9IG9wdGlvbnMuZ2V0VGFnTmFtZXNwYWNlIHx8IG5vO1xuICAgICAgdmFyIGlzUmVzZXJ2ZWRUYWcgPSBvcHRpb25zLmlzUmVzZXJ2ZWRUYWcgfHwgbm87XG4gICAgICBtYXliZUNvbXBvbmVudCA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgI
3HJldHVybiAhIShlbC5jb21wb25lbnQgfHxcbiAgICAgICAgICAgICAgZWwuYXR0cnNNYXBbJzppcyddIHx8XG4gICAgICAgICAgICAgIGVsLmF0dHJzTWFwWyd2LWJpbmQ6aXMnXSB8fFxuICAgICAgICAgICAgICAhKGVsLmF0dHJzTWFwLmlzID8gaXNSZXNlcnZlZFRhZyhlbC5hdHRyc01hcC5pcykgOiBpc1Jlc2VydmVkVGFnKGVsLnRhZykpKTtcbiAgICAgIH07XG4gICAgICB0cmFuc2Zvcm1zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICd0cmFuc2Zvcm1Ob2RlJyk7XG4gICAgICBwcmVUcmFuc2Zvcm1zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICdwcmVUcmFuc2Zvcm1Ob2RlJyk7XG4gICAgICBwb3N0VHJhbnNmb3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAncG9zdFRyYW5zZm9ybU5vZGUnKTtcbiAgICAgIGRlbGltaXRlcnMgPSBvcHRpb25zLmRlbGltaXRlcnM7XG4gICAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICAgIHZhciBwcmVzZXJ2ZVdoaXRlc3BhY2UgPSBvcHRpb25zLnByZXNlcnZlV2hpdGVzcGFjZSAhPT0gZmFsc2U7XG4gICAgICB2YXIgd2hpdGVzcGFjZU9wdGlvbiA9IG9wdGlvbnMud2hpdGVzcGFjZTtcbiAgICAgIHZhciByb290O1xuICAgICAgdmFyIGN1cnJlbnRQYXJlbnQ7XG4gICAgICB2YXIgaW5WUHJlID0gZmFsc2U7XG4gICAgICB2YXIgaW5QcmUgPSBmYWxzZTtcbiAgICAgIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgICAgIGZ1bmN0aW9uIHdhcm5PbmNlKG1zZywgcmFuZ2UpIHtcbiAgICAgICAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgICAgICAgICB3YXJuZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB3YXJuKG1zZywgcmFuZ2UpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNsb3NlRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgICAgdHJpbUVuZGluZ1doaXRlc3BhY2UoZWxlbWVudCk7XG4gICAgICAgICAgaWYgKCFpblZQcmUgJiYgIWVsZW1lbnQucHJvY2Vzc2VkKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQgPSBwcm9jZXNzRWxlbWVudChlbGVtZW50LCBvcHRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdHJlZSBtYW5hZ2VtZW50XG4gICAgICAgICAgaWYgKCFzdGFjay5sZW5ndGggJiYgZWxlbWVudCAhPT0gcm9vdCkge1xuICAgICAgICAgICAgICAvLyBhbGxvdyByb290IGVsZW1lbnRzIHdpdGggdi1pZiwgdi1lbHNlLWlmIGFuZCB2LWVsc2VcbiAgICAgICAgICAgICAgaWYgKHJvb3QuaWYgJiYgKGVsZW1lbnQuZWxzZWlmIHx8IGVsZW1lbnQuZWxzZSkpIHtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBjaGVja1Jvb3RDb25zdHJhaW50cyhlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGFkZElmQ29uZGl0aW9uKHJvb3QsIHtcbiAgICAgICAgICAgICAgICAgICAgICBleHA6IGVsZW1lbnQuZWxzZWlmLFxuICAgICAgICAgICAgICAgICAgICAgIGJsb2NrOiBlbGVtZW50XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHdhcm5PbmNlKFwiQ29tcG9uZW50IHRlbXBsYXRlIHNob3VsZCBjb250YWluIGV4YWN0bHkgb25lIHJvb3QgZWxlbWVudC4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiSWYgeW91IGFyZSB1c2luZyB2LWlmIG9uIG11bHRpcGxlIGVsZW1lbnRzLCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgXCJ1c2Ugdi1lbHNlLWlmIHRvIGNoYWluIHRoZW0gaW5zdGVhZC5cIiwgeyBzdGFydDogZWxlbWVudC5zdGFydCB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY3VycmVudFBhcmVudCAmJiAhZWxlbWVudC5mb3JiaWRkZW4pIHtcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZWxzZWlmIHx8IGVsZW1lbnQuZWxzZSkge1xuICAgICAgICAgICAgICAgICAgcHJvY2Vzc0lmQ29uZGl0aW9ucyhlbGVtZW50LCBjdXJyZW50UGFyZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnNsb3RTY29wZSkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIHNjb3BlZCBzbG90XG4gICAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCBpdCBpbiB0aGUgY2hpbGRyZW4gbGlzdCBzbyB0aGF0IHYtZWxzZSgtaWYpIGNvbmRpdGlvbnMgY2FuXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZmluZCBpdCBhcyB0aGUgcHJldiBub2RlLlxuICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lXzEgPSBlbGVtZW50LnNsb3RUYXJnZXQgfHwgJ1wiZGVmYXVsdFwiJztcbiAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudFBhcmVudC5zY29wZWRTbG90cyB8fCAoY3VycmVudFBhcmVudC5zY29wZWRTbG90cyA9IHt9KSlbbmFtZV8xXSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50LmNoaWxkcmVuLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudCA9IGN1cnJlbnRQYXJlbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZmluYWwgY2hpbGRyZW4gY2xlYW51cFxuICAgICAgICAgIC8vIGZpbHRlciBvdXQgc2NvcGVkIHNsb3RzXG4gICAgICAgICAgZWxlbWVudC5jaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChjKSB7IHJldHVybiAhYy5zbG90U2NvcGU7IH0pO1xuICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIG5vZGUgYWdhaW5cbiAgICAgICAgICB0cmltRW5kaW5nV2hpdGVzcGFjZShlbGVtZW50KTtcbiAgICAgICAgICAvLyBjaGVjayBwcmUgc3RhdGVcbiAgICAgICAgICBpZiAoZWxlbWVudC5wcmUpIHtcbiAgICAgICAgICAgICAgaW5WUHJlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwbGF0Zm9ybUlzUHJlVGFnKGVsZW1lbnQudGFnKSkge1xuICAgICAgICAgICAgICBpblByZSA9IGZhbHNlO1xuICAgICAgICAgI
3H1cbiAgICAgICAgICAvLyBhcHBseSBwb3N0LXRyYW5zZm9ybXNcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvc3RUcmFuc2Zvcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIHBvc3RUcmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHRyaW1FbmRpbmdXaGl0ZXNwYWNlKGVsKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugbm9kZVxuICAgICAgICAgIGlmICghaW5QcmUpIHtcbiAgICAgICAgICAgICAgdmFyIGxhc3ROb2RlID0gdm9pZCAwO1xuICAgICAgICAgICAgICB3aGlsZSAoKGxhc3ROb2RlID0gZWwuY2hpbGRyZW5bZWwuY2hpbGRyZW4ubGVuZ3RoIC0gMV0pICYmXG4gICAgICAgICAgICAgICAgICBsYXN0Tm9kZS50eXBlID09PSAzICYmXG4gICAgICAgICAgICAgICAgICBsYXN0Tm9kZS50ZXh0ID09PSAnICcpIHtcbiAgICAgICAgICAgICAgICAgIGVsLmNoaWxkcmVuLnBvcCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gY2hlY2tSb290Q29uc3RyYWludHMoZWwpIHtcbiAgICAgICAgICBpZiAoZWwudGFnID09PSAnc2xvdCcgfHwgZWwudGFnID09PSAndGVtcGxhdGUnKSB7XG4gICAgICAgICAgICAgIHdhcm5PbmNlKFwiQ2Fubm90IHVzZSA8XCIuY29uY2F0KGVsLnRhZywgXCI+IGFzIGNvbXBvbmVudCByb290IGVsZW1lbnQgYmVjYXVzZSBpdCBtYXkgXCIpICtcbiAgICAgICAgICAgICAgICAgICdjb250YWluIG11bHRpcGxlIG5vZGVzLicsIHsgc3RhcnQ6IGVsLnN0YXJ0IH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWwuYXR0cnNNYXAuaGFzT3duUHJvcGVydHkoJ3YtZm9yJykpIHtcbiAgICAgICAgICAgICAgd2Fybk9uY2UoJ0Nhbm5vdCB1c2Ugdi1mb3Igb24gc3RhdGVmdWwgY29tcG9uZW50IHJvb3QgZWxlbWVudCBiZWNhdXNlICcgK1xuICAgICAgICAgICAgICAgICAgJ2l0IHJlbmRlcnMgbXVsdGlwbGUgZWxlbWVudHMuJywgZWwucmF3QXR0cnNNYXBbJ3YtZm9yJ10pO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBhcnNlSFRNTCh0ZW1wbGF0ZSwge1xuICAgICAgICAgIHdhcm46IHdhcm4sXG4gICAgICAgICAgZXhwZWN0SFRNTDogb3B0aW9ucy5leHBlY3RIVE1MLFxuICAgICAgICAgIGlzVW5hcnlUYWc6IG9wdGlvbnMuaXNVbmFyeVRhZyxcbiAgICAgICAgICBjYW5CZUxlZnRPcGVuVGFnOiBvcHRpb25zLmNhbkJlTGVmdE9wZW5UYWcsXG4gICAgICAgICAgc2hvdWxkRGVjb2RlTmV3bGluZXM6IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXMsXG4gICAgICAgICAgc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOiBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZixcbiAgICAgICAgICBzaG91bGRLZWVwQ29tbWVudDogb3B0aW9ucy5jb21tZW50cyxcbiAgICAgICAgICBvdXRwdXRTb3VyY2VSYW5nZTogb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSxcbiAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKHRhZywgYXR0cnMsIHVuYXJ5LCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAgIC8vIGNoZWNrIG5hbWVzcGFjZS5cbiAgICAgICAgICAgICAgLy8gaW5oZXJpdCBwYXJlbnQgbnMgaWYgdGhlcmUgaXMgb25lXG4gICAgICAgICAgICAgIHZhciBucyA9IChjdXJyZW50UGFyZW50ICYmIGN1cnJlbnRQYXJlbnQubnMpIHx8IHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlKHRhZyk7XG4gICAgICAgICAgICAgIC8vIGhhbmRsZSBJRSBzdmcgYnVnXG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICBpZiAoaXNJRSAmJiBucyA9PT0gJ3N2ZycpIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzID0gZ3VhcmRJRVNWR0J1ZyhhdHRycyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBjcmVhdGVBU1RFbGVtZW50KHRhZywgYXR0cnMsIGN1cnJlbnRQYXJlbnQpO1xuICAgICAgICAgICAgICBpZiAobnMpIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQubnMgPSBucztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVuZCA9IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJhd0F0dHJzTWFwID0gZWxlbWVudC5hdHRyc0xpc3QucmVkdWNlKGZ1bmN0aW9uIChjdW11bGF0ZWQsIGF0dHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VtdWxhdGVkW2F0dHIubmFtZV0gPSBhdHRyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VtdWxhdGVkO1xuICAgICAgICAgICAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGF0dHJzLmZvckVhY2goZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaW52YWxpZEF0dHJpYnV0ZVJFLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuKFwiSW52YWxpZCBkeW5hbWljIGFyZ3VtZW50IGV4cHJlc3Npb246IGF0dHJpYnV0ZSBuYW1lcyBjYW5ub3QgY29udGFpbiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYWNlcywgcXVvdGVzLCA8LCA+LCAvIG9yID0uXCIsIG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBhdHRyLnN0YXJ0ICsgYXR0ci5uYW1lLmluZGV4T2YoXCJbXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogYXR0ci5zdGFydCArIGF0dHIubmFtZS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXNGb3JiaWRkZW5UYWcoZWxlbWVudCkgJiYgIWlzU2VydmVyUmVuZGVyaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZm9yYmlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgI
3Hdhcm4oJ1RlbXBsYXRlcyBzaG91bGQgb25seSBiZSByZXNwb25zaWJsZSBmb3IgbWFwcGluZyB0aGUgc3RhdGUgdG8gdGhlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnVUkuIEF2b2lkIHBsYWNpbmcgdGFncyB3aXRoIHNpZGUtZWZmZWN0cyBpbiB5b3VyIHRlbXBsYXRlcywgc3VjaCBhcyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCI8XCIuY29uY2F0KHRhZywgXCI+XCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJywgYXMgdGhleSB3aWxsIG5vdCBiZSBwYXJzZWQuJywgeyBzdGFydDogZWxlbWVudC5zdGFydCB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBhcHBseSBwcmUtdHJhbnNmb3Jtc1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZVRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBwcmVUcmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpIHx8IGVsZW1lbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFpblZQcmUpIHtcbiAgICAgICAgICAgICAgICAgIHByb2Nlc3NQcmUoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpblZQcmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwbGF0Zm9ybUlzUHJlVGFnKGVsZW1lbnQudGFnKSkge1xuICAgICAgICAgICAgICAgICAgaW5QcmUgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpblZQcmUpIHtcbiAgICAgICAgICAgICAgICAgIHByb2Nlc3NSYXdBdHRycyhlbGVtZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIGlmICghZWxlbWVudC5wcm9jZXNzZWQpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHN0cnVjdHVyYWwgZGlyZWN0aXZlc1xuICAgICAgICAgICAgICAgICAgcHJvY2Vzc0ZvcihlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgIHByb2Nlc3NJZihlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgIHByb2Nlc3NPbmNlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghcm9vdCkge1xuICAgICAgICAgICAgICAgICAgcm9vdCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY2hlY2tSb290Q29uc3RyYWludHMocm9vdCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCF1bmFyeSkge1xuICAgICAgICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY2xvc2VFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbmQ6IGZ1bmN0aW9uICh0YWcsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgLy8gcG9wIHN0YWNrXG4gICAgICAgICAgICAgIHN0YWNrLmxlbmd0aCAtPSAxO1xuICAgICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmVuZCA9IGVuZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjbG9zZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGFyczogZnVuY3Rpb24gKHRleHQsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgICAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQgPT09IHRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5PbmNlKCdDb21wb25lbnQgdGVtcGxhdGUgcmVxdWlyZXMgYSByb290IGVsZW1lbnQsIHJhdGhlciB0aGFuIGp1c3QgdGV4dC4nLCB7IHN0YXJ0OiBzdGFydCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKHRleHQgPSB0ZXh0LnRyaW0oKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fybk9uY2UoXCJ0ZXh0IFxcXCJcIi5jb25jYXQodGV4dCwgXCJcXFwiIG91dHNpZGUgcm9vdCBlbGVtZW50IHdpbGwgYmUgaWdub3JlZC5cIiksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gSUUgdGV4dGFyZWEgcGxhY2Vob2xkZXIgYnVnXG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICBpZiAoaXNJRSAmJlxuICAgICAgICAgICAgICAgICAgY3VycmVudFBhcmVudC50YWcgPT09ICd0ZXh0YXJlYScgJiZcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQuYXR0cnNNYXAucGxhY2Vob2xkZXIgPT09IHRleHQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2Y
3XIgY2hpbGRyZW4gPSBjdXJyZW50UGFyZW50LmNoaWxkcmVuO1xuICAgICAgICAgICAgICBpZiAoaW5QcmUgfHwgdGV4dC50cmltKCkpIHtcbiAgICAgICAgICAgICAgICAgIHRleHQgPSBpc1RleHRUYWcoY3VycmVudFBhcmVudClcbiAgICAgICAgICAgICAgICAgICAgICA/IHRleHRcbiAgICAgICAgICAgICAgICAgICAgICA6IGRlY29kZUhUTUxDYWNoZWQodGV4dCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZiAoIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSB3aGl0ZXNwYWNlLW9ubHkgbm9kZSByaWdodCBhZnRlciBhbiBvcGVuaW5nIHRhZ1xuICAgICAgICAgICAgICAgICAgdGV4dCA9ICcnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHdoaXRlc3BhY2VPcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh3aGl0ZXNwYWNlT3B0aW9uID09PSAnY29uZGVuc2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gaW4gY29uZGVuc2UgbW9kZSwgcmVtb3ZlIHRoZSB3aGl0ZXNwYWNlIG5vZGUgaWYgaXQgY29udGFpbnNcbiAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5lIGJyZWFrLCBvdGhlcndpc2UgY29uZGVuc2UgdG8gYSBzaW5nbGUgc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gbGluZUJyZWFrUkUudGVzdCh0ZXh0KSA/ICcnIDogJyAnO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICcgJztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRleHQgPSBwcmVzZXJ2ZVdoaXRlc3BhY2UgPyAnICcgOiAnJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgICAgICAgaWYgKCFpblByZSAmJiB3aGl0ZXNwYWNlT3B0aW9uID09PSAnY29uZGVuc2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gY29uZGVuc2UgY29uc2VjdXRpdmUgd2hpdGVzcGFjZXMgaW50byBzaW5nbGUgc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHdoaXRlc3BhY2VSRSwgJyAnKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHZhciByZXMgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICB2Y
3XIgY2hpbGQgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICBpZiAoIWluVlByZSAmJiB0ZXh0ICE9PSAnICcgJiYgKHJlcyA9IHBhcnNlVGV4dCh0ZXh0LCBkZWxpbWl0ZXJzKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcmVzLmV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuczogcmVzLnRva2VucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZXh0ICE9PSAnICcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAhY2hpbGRyZW4ubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udGV4dCAhPT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRleHRcbiAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuZW5kID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tbWVudDogZnVuY3Rpb24gKHRleHQsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgICAgLy8gYWRkaW5nIGFueXRoaW5nIGFzIGEgc2libGluZyB0byB0aGUgcm9vdCBub2RlIGlzIGZvcmJpZGRlblxuICAgICAgICAgICAgICAvLyBjb21tZW50cyBzaG91bGQgc3RpbGwgYmUgYWxsb3dlZCwgYnV0IGlnbm9yZWRcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAzLFxuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgaXNDb21tZW50OiB0cnVlXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGFydCA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmVuZCA9IGVuZDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByb290O1xuICB9XG4gIGZ1bmN0aW9uIHByb2Nlc3NQcmUoZWwpIHtcbiAgICAgIGlmIChnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1wcmUnKSAhPSBudWxsKSB7XG4gICAgICAgICAgZWwucHJlID0gdHJ1ZTtcbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBwcm9jZXNzUmF3QXR0cnMoZWwpIHtcbiAgICAgIHZhciBsaXN0ID0gZWwuYXR0cnNMaXN0O1xuICAgICAgdmFyIGxlbiA9IGxpc3QubGVuZ3RoO1xuICAgICAgaWYgKGxlbikge1xuICAgICAgICAgIHZhciBhdHRycyA9IChlbC5hdHRycyA9IG5ldyBBcnJheShsZW4pKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgIGF0dHJzW2ldID0ge1xuICAgICAgICAgICAgICAgICAgbmFtZTogbGlzdFtpXS5uYW1lLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KGxpc3RbaV0udmFsdWUpXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmIChsaXN0W2ldLnN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzW2ldLnN0YXJ0ID0gbGlzdFtpXS5zdGFydDtcbiAgICAgICAgICAgICAgICAgIGF0dHJzW2ldLmVuZCA9IGxpc3RbaV0uZW5kO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoIWVsLnByZSkge1xuICAgICAgICAgIC8vIG5vbiByb290IG5vZGUgaW4gcHJlIGJsb2NrcyB3aXRoIG5vIGF0dHJpYnV0ZXNcbiAgICAgICAgICBlbC5wbGFpbiA9IHRydWU7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgb3B0aW9ucykge1xuICAgICAgcHJvY2Vzc0tleShlbGVtZW50KTtcbiAgICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHR
3oaXMgaXMgYSBwbGFpbiBlbGVtZW50IGFmdGVyXG4gICAgICAvLyByZW1vdmluZyBzdHJ1Y3R1cmFsIGF0dHJpYnV0ZXNcbiAgICAgIGVsZW1lbnQucGxhaW4gPVxuICAgICAgICAgICFlbGVtZW50LmtleSAmJiAhZWxlbWVudC5zY29wZWRTbG90cyAmJiAhZWxlbWVudC5hdHRyc0xpc3QubGVuZ3RoO1xuICAgICAgcHJvY2Vzc1JlZihlbGVtZW50KTtcbiAgICAgIHByb2Nlc3NTbG90Q29udGVudChlbGVtZW50KTtcbiAgICAgIHByb2Nlc3NTbG90T3V0bGV0KGVsZW1lbnQpO1xuICAgICAgcHJvY2Vzc0NvbXBvbmVudChlbGVtZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGVsZW1lbnQgPSB0cmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpIHx8IGVsZW1lbnQ7XG4gICAgICB9XG4gICAgICBwcm9jZXNzQXR0cnMoZWxlbWVudCk7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICBmdW5jdGlvbiBwcm9jZXNzS2V5KGVsKSB7XG4gICAgICB2YXIgZXhwID0gZ2V0QmluZGluZ0F0dHIoZWwsICdrZXknKTtcbiAgICAgIGlmIChleHApIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgIHdhcm4oXCI8dGVtcGxhdGU+IGNhbm5vdCBiZSBrZXllZC4gUGxhY2UgdGhlIGtleSBvbiByZWFsIGVsZW1lbnRzIGluc3RlYWQuXCIsIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAna2V5JykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChlbC5mb3IpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IGVsLml0ZXJhdG9yMiB8fCBlbC5pdGVyYXRvcjE7XG4gICAgICAgICAgICAgICAgICB2Y
3XIgcGFyZW50XzEgPSBlbC5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvciA9PT0gZXhwICYmXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEgJiZcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS50YWcgPT09ICd0cmFuc2l0aW9uLWdyb3VwJykge1xuICAgICAgICAgICAgICAgICAgICAgIHdhcm4oXCJEbyBub3QgdXNlIHYtZm9yIGluZGV4IGFzIGtleSBvbiA8dHJhbnNpdGlvbi1ncm91cD4gY2hpbGRyZW4sIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aGlzIGlzIHRoZSBzYW1lIGFzIG5vdCB1c2luZyBrZXlzLlwiLCBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ2tleScpLCB0cnVlIC8qIHRpcCAqLyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWwua2V5ID0gZXhwO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIHByb2Nlc3NSZWYoZWwpIHtcbiAgICAgIHZhciByZWYgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3JlZicpO1xuICAgICAgaWYgKHJlZikge1xuICAgICAgICAgIGVsLnJlZiA9IHJlZjtcbiAgICAgICAgICBlbC5yZWZJbkZvciA9IGNoZWNrSW5Gb3IoZWwpO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIHByb2Nlc3NGb3IoZWwpIHtcbiAgICAgIHZhciBleHA7XG4gICAgICBpZiAoKGV4cCA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWZvcicpKSkge1xuICAgICAgICAgIHZhciByZXMgPSBwYXJzZUZvcihleHApO1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgZXh0ZW5kKGVsLCByZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgd2FybihcIkludmFsaWQgdi1mb3IgZXhwcmVzc2lvbjogXCIuY29uY2F0KGV4cCksIGVsLnJhd0F0dHJzTWFwWyd2LWZvciddKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcGFyc2VGb3IoZXhwKSB7XG4gICAgICB2Y
3XIgaW5NYXRjaCA9IGV4cC5tYXRjaChmb3JBbGlhc1JFKTtcbiAgICAgIGlmICghaW5NYXRjaClcbiAgICAgICAgICByZXR1cm47XG4gICAgICB2YXIgcmVzID0ge307XG4gICAgICByZXMuZm9yID0gaW5NYXRjaFsyXS50cmltKCk7XG4gICAgICB2YXIgYWxpYXMgPSBpbk1hdGNoWzFdLnRyaW0oKS5yZXBsYWNlKHN0cmlwUGFyZW5zUkUsICcnKTtcbiAgICAgIHZhciBpdGVyYXRvck1hdGNoID0gYWxpYXMubWF0Y2goZm9ySXRlcmF0b3JSRSk7XG4gICAgICBpZiAoaXRlcmF0b3JNYXRjaCkge1xuICAgICAgICAgIHJlcy5hbGlhcyA9IGFsaWFzLnJlcGxhY2UoZm9ySXRlcmF0b3JSRSwgJycpLnRyaW0oKTtcbiAgICAgICAgICByZXMuaXRlcmF0b3IxID0gaXRlcmF0b3JNYXRjaFsxXS50cmltKCk7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yTWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgcmVzLml0ZXJhdG9yMiA9IGl0ZXJhdG9yTWF0Y2hbMl0udHJpbSgpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHJlcy5hbGlhcyA9IGFsaWFzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgfVxuICBmdW5jdGlvbiBwcm9jZXNzSWYoZWwpIHtcbiAgICAgIHZhciBleHAgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1pZicpO1xuICAgICAgaWYgKGV4cCkge1xuICAgICAgICAgIGVsLmlmID0gZXhwO1xuICAgICAgICAgIGFkZElmQ29uZGl0aW9uKGVsLCB7XG4gICAgICAgICAgICAgIGV4cDogZXhwLFxuICAgICAgICAgICAgICBibG9jazogZWxcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlJykgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBlbC5lbHNlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGVsc2VpZiA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWVsc2UtaWYnKTtcbiAgICAgICAgICBpZiAoZWxzZWlmKSB7XG4gICAgICAgICAgICAgIGVsLmVsc2VpZiA9IGVsc2VpZjtcbiAgICAgICAgICB9XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcHJvY2Vzc0lmQ29uZGl0aW9ucyhlbCwgcGFyZW50KSB7XG4gICAgICB2Y
3XIgcHJldiA9IGZpbmRQcmV2RWxlbWVudChwYXJlbnQuY2hpbGRyZW4pO1xuICAgICAgaWYgKHByZXYgJiYgcHJldi5pZikge1xuICAgICAgICAgIGFkZElmQ29uZGl0aW9uKHByZXYsIHtcbiAgICAgICAgICAgICAgZXhwOiBlbC5lbHNlaWYsXG4gICAgICAgICAgICAgIGJsb2NrOiBlbFxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgd2FybihcInYtXCIuY29uY2F0KGVsLmVsc2VpZiA/ICdlbHNlLWlmPVwiJyArIGVsLmVsc2VpZiArICdcIicgOiAnZWxzZScsIFwiIFwiKSArXG4gICAgICAgICAgICAgIFwidXNlZCBvbiBlbGVtZW50IDxcIi5jb25jYXQoZWwudGFnLCBcIj4gd2l0aG91dCBjb3JyZXNwb25kaW5nIHYtaWYuXCIpLCBlbC5yYXdBdHRyc01hcFtlbC5lbHNlaWYgPyAndi1lbHNlLWlmJyA6ICd2LWVsc2UnXSk7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZmluZFByZXZFbGVtZW50KGNoaWxkcmVuKSB7XG4gICAgICB2YXIgaSA9IGNoaWxkcmVuLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICBpZiAoY2hpbGRyZW5baV0udHlwZSA9PT0gMSkge1xuICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW5baV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0udGV4dCAhPT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgICB3YXJuKFwidGV4dCBcXFwiXCIuY29uY2F0KGNoaWxkcmVuW2ldLnRleHQudHJpbSgpLCBcIlxcXCIgYmV0d2VlbiB2LWlmIGFuZCB2LWVsc2UoLWlmKSBcIikgK1xuICAgICAgICAgICAgICAgICAgICAgIFwid2lsbCBiZSBpZ25vcmVkLlwiLCBjaGlsZHJlbltpXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2hpbGRyZW4ucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIGFkZElmQ29uZGl0aW9uKGVsLCBjb25kaXRpb24pIHtcbiAgICAgIGlmICghZWwuaWZDb25kaXRpb25zKSB7XG4gICAgICAgICAgZWwuaWZDb25kaXRpb25zID0gW107XG4gICAgICB9XG4gICAgICBlbC5pZkNvbmRpdGlvbnMucHVzaChjb25kaXRpb24pO1xuICB9XG4gIGZ1bmN0aW9uIHByb2Nlc3NPbmNlKGVsKSB7XG4gICAgICB2Y
3XIgb25jZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LW9uY2UnKTtcbiAgICAgIGlmIChvbmNlICE9IG51bGwpIHtcbiAgICAgICAgICBlbC5vbmNlID0gdHJ1ZTtcbiAgICAgIH1cbiAgfVxuICAvLyBoYW5kbGUgY29udGVudCBiZWluZyBwYXNzZWQgdG8gYSBjb21wb25lbnQgYXMgc2xvdCxcbiAgLy8gZS5nLiA8dGVtcGxhdGUgc2xvdD1cInh4eFwiPiwgPGRpdiBzbG90LXNjb3BlPVwieHh4XCI+XG4gIGZ1bmN0aW9uIHByb2Nlc3NTbG90Q29udGVudChlbCkge1xuICAgICAgdmFyIHNsb3RTY29wZTtcbiAgICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgICBzbG90U2NvcGUgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc2NvcGUnKTtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICBpZiAoc2xvdFNjb3BlKSB7XG4gICAgICAgICAgICAgIHdhcm4oXCJ0aGUgXFxcInNjb3BlXFxcIiBhdHRyaWJ1dGUgZm9yIHNjb3BlZCBzbG90cyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhbmQgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJyZXBsYWNlZCBieSBcXFwic2xvdC1zY29wZVxcXCIgc2luY2UgMi41LiBUaGUgbmV3IFxcXCJzbG90LXNjb3BlXFxcIiBhdHRyaWJ1dGUgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJjYW4gYWxzbyBiZSB1c2VkIG9uIHBsYWluIGVsZW1lbnRzIGluIGFkZGl0aW9uIHRvIDx0ZW1wbGF0ZT4gdG8gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJkZW5vdGUgc2NvcGVkIHNsb3RzLlwiLCBlbC5yYXdBdHRyc01hcFsnc2NvcGUnXSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsLnNsb3RTY29wZSA9IHNsb3RTY29wZSB8fCBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc2xvdC1zY29wZScpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoKHNsb3RTY29wZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzbG90LXNjb3BlJykpKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGVsLmF0dHJzTWFwWyd2LWZvciddKSB7XG4gICAgICAgICAgICAgIHdhcm4oXCJBbWJpZ3VvdXMgY29tYmluZWQgdXNhZ2Ugb2Ygc2xvdC1zY29wZSBhbmQgdi1mb3Igb24gPFwiLmNvbmNhdChlbC50YWcsIFwiPiBcIikgK1xuICAgICAgICAgICAgICAgICAgXCIodi1mb3IgdGFrZXMgaGlnaGVyIHByaW9yaXR5KS4gVXNlIGEgd3JhcHBlciA8dGVtcGxhdGU+IGZvciB0aGUgXCIgK1xuICAgICAgICAgICAgICAgICAgXCJzY29wZWQgc2xvdCB0byBtYWtlIGl0IGNsZWFyZXIuXCIsIGVsLnJhd0F0dHJzTWFwWydzbG90LXNjb3BlJ10sIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbC5zbG90U2NvcGUgPSBzbG90U2NvcGU7XG4gICAgICB9XG4gICAgICAvLyBzbG90PVwieHh4XCJcbiAgICAgIHZhciBzbG90VGFyZ2V0ID0gZ2V0QmluZGluZ0F0dHIoZWwsICdzbG90Jyk7XG4gICAgICBpZiAoc2xvdFRhcmdldCkge1xuICAgICAgICAgIGVsLnNsb3RUYXJnZXQgPSBzbG90VGFyZ2V0ID09PSAnXCJcIicgPyAnXCJkZWZhdWx0XCInIDogc2xvdFRhcmdldDtcbiAgICAgICAgICBlbC5zbG90VGFyZ2V0RHluYW1pYyA9ICEhKGVsLmF0dHJzTWFwWyc6c2xvdCddIHx8IGVsLmF0dHJzTWFwWyd2LWJpbmQ6c2xvdCddKTtcbiAgICAgICAgICAvLyBwcmVzZXJ2ZSBzbG90IGFzIGFuIGF0dHJpYnV0ZSBmb3IgbmF0aXZlIHNoYWRvdyBET00gY29tcGF0XG4gICAgICAgICAgLy8gb25seSBmb3Igbm9uLXNjb3BlZCBzbG90cy5cbiAgICAgICAgICBpZiAoZWwudGFnICE9PSAndGVtcGxhdGUnICYmICFlbC5zbG90U2NvcGUpIHtcbiAgICAgICAgICAgICAgYWRkQXR0cihlbCwgJ3Nsb3QnLCBzbG90VGFyZ2V0LCBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ3Nsb3QnKSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gMi42IHYtc2xvdCBzeW50YXhcbiAgICAgIHtcbiAgICAgICAgICBpZiAoZWwudGFnID09PSAndGVtcGxhdGUnKSB7XG4gICAgICAgICAgICAgIC8vIHYtc2xvdCBvbiA8dGVtcGxhdGU+XG4gICAgICAgICAgICAgIHZhciBzbG90QmluZGluZyA9IGdldEFuZFJlbW92ZUF0dHJCeVJlZ2V4KGVsLCBzbG90UkUpO1xuICAgICAgICAgICAgICBpZiAoc2xvdEJpbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwuc2xvdFRhcmdldCB8fCBlbC5zbG90U2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcIlVuZXhwZWN0ZWQgbWl4ZWQgdXNhZ2Ugb2YgZGlmZmVyZW50IHNsb3Qgc3ludGF4ZXMuXCIsIGVsKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnBhcmVudCAmJiAhbWF5YmVDb21wb25lbnQoZWwucGFyZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuKFwiPHRlbXBsYXRlIHYtc2xvdD4gY2FuIG9ubHkgYXBwZWFyIGF0IHRoZSByb290IGxldmVsIGluc2lkZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRoZSByZWNlaXZpbmcgY29tcG9uZW50XCIsIGVsKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB2Y
3XIgX2EgPSBnZXRTbG90TmFtZShzbG90QmluZGluZyksIG5hbWVfMiA9IF9hLm5hbWUsIGR5bmFtaWMgPSBfYS5keW5hbWljO1xuICAgICAgICAgICAgICAgICAgZWwuc2xvdFRhcmdldCA9IG5hbWVfMjtcbiAgICAgICAgICAgICAgICAgIGVsLnNsb3RUYXJnZXREeW5hbWljID0gZHluYW1pYztcbiAgICAgICAgICAgICAgICAgIGVsLnNsb3RTY29wZSA9IHNsb3RCaW5kaW5nLnZhbHVlIHx8IGVtcHR5U2xvdFNjb3BlVG9rZW47IC8vIGZvcmNlIGl0IGludG8gYSBzY29wZWQgc2xvdCBmb3IgcGVyZlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAvLyB2LXNsb3Qgb24gY29tcG9uZW50LCBkZW5vdGVzIGRlZmF1bHQgc2xvdFxuICAgICAgICAgICAgICB2YXIgc2xvdEJpbmRpbmcgPSBnZXRBbmRSZW1vdmVBdHRyQnlSZWdleChlbCwgc2xvdFJFKTtcbiAgICAgICAgICAgICAgaWYgKHNsb3RCaW5kaW5nKSB7XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXliZUNvbXBvbmVudChlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcInYtc2xvdCBjYW4gb25seSBiZSB1c2VkIG9uIGNvbXBvbmVudHMgb3IgPHRlbXBsYXRlPi5cIiwgc2xvdEJpbmRpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwuc2xvdFNjb3BlIHx8IGVsLnNsb3RUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcIlVuZXhwZWN0ZWQgbWl4ZWQgdXNhZ2Ugb2YgZGlmZmVyZW50IHNsb3Qgc3ludGF4ZXMuXCIsIGVsKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnNjb3BlZFNsb3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oXCJUbyBhdm9pZCBzY29wZSBhbWJpZ3VpdHksIHRoZSBkZWZhdWx0IHNsb3Qgc2hvdWxkIGFsc28gdXNlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPHRlbXBsYXRlPiBzeW50YXggd2hlbiB0aGVyZSBhcmUgb3RoZXIgbmFtZWQgc2xvdHMuXCIsIHNsb3RCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIGNvbXBvbmVudCdzIGNoaWxkcmVuIHRvIGl0cyBkZWZhdWx0IHNsb3RcbiAgICAgICAgICAgICAgICAgIHZhciBzbG90cyA9IGVsLnNjb3BlZFNsb3RzIHx8IChlbC5zY29wZWRTbG90cyA9IHt9KTtcbiAgICAgICAgICAgICAgICAgIHZhciBfYiA9IGdldFNsb3ROYW1lKHNsb3RCaW5kaW5nKSwgbmFtZV8zID0gX2IubmFtZSwgZHluYW1pYyA9IF9iLmR5bmFtaWM7XG4gICAgICAgICAgICAgICAgICB2Y
3XIgc2xvdENvbnRhaW5lcl8xID0gKHNsb3RzW25hbWVfM10gPSBjcmVhdGVBU1RFbGVtZW50KCd0ZW1wbGF0ZScsIFtdLCBlbCkpO1xuICAgICAgICAgICAgICAgICAgc2xvdENvbnRhaW5lcl8xLnNsb3RUYXJnZXQgPSBuYW1lXzM7XG4gICAgICAgICAgICAgICAgICBzbG90Q29udGFpbmVyXzEuc2xvdFRhcmdldER5bmFtaWMgPSBkeW5hbWljO1xuICAgICAgICAgICAgICAgICAgc2xvdENvbnRhaW5lcl8xLmNoaWxkcmVuID0gZWwuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFjLnNsb3RTY29wZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjLnBhcmVudCA9IHNsb3RDb250YWluZXJfMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBzbG90Q29udGFpbmVyXzEuc2xvdFNjb3BlID0gc2xvdEJpbmRpbmcudmFsdWUgfHwgZW1wdHlTbG90U2NvcGVUb2tlbjtcbiAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBhcyB0aGV5IGFyZSByZXR1cm5lZCBmcm9tIHNjb3BlZFNsb3RzIG5vd1xuICAgICAgICAgICAgICAgICAgZWwuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgICAgICAgIC8vIG1hcmsgZWwgbm9uLXBsYWluIHNvIGRhdGEgZ2V0cyBnZW5lcmF0ZWRcbiAgICAgICAgICAgICAgICAgIGVsLnBsYWluID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZ2V0U2xvdE5hbWUoYmluZGluZykge1xuICAgICAgdmFyIG5hbWUgPSBiaW5kaW5nLm5hbWUucmVwbGFjZShzbG90UkUsICcnKTtcbiAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgIGlmIChiaW5kaW5nLm5hbWVbMF0gIT09ICcjJykge1xuICAgICAgICAgICAgICBuYW1lID0gJ2RlZmF1bHQnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgd2FybihcInYtc2xvdCBzaG9ydGhhbmQgc3ludGF4IHJlcXVpcmVzIGEgc2xvdCBuYW1lLlwiLCBiaW5kaW5nKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZHluYW1pY0FyZ1JFLnRlc3QobmFtZSlcbiAgICAgICAgICA/IC8vIGR5bmFtaWMgW25hbWVdXG4gICAgICAgICAgICAgIHsgbmFtZTogbmFtZS5zbGljZSgxLCAtMSksIGR5bmFtaWM6IHRydWUgfVxuICAgICAgICAgIDogLy8gc3RhdGljIG5hbWVcbiAgICAgICAgICAgICAgeyBuYW1lOiBcIlxcXCJcIi5jb25jYXQobmFtZSwgXCJcXFwiXCIpLCBkeW5hbWljOiBmYWxzZSB9O1xuICB9XG4gIC8vIGhhbmRsZSA8c2xvdC8+IG91dGxldHNcbiAgZnVuY3Rpb24gcHJvY2Vzc1Nsb3RPdXRsZXQoZWwpIHtcbiAgICAgIGlmIChlbC50YWcgPT09ICdzbG90Jykge1xuICAgICAgICAgIGVsLnNsb3ROYW1lID0gZ2V0QmluZGluZ0F0dHIoZWwsICduYW1lJyk7XG4gICAgICAgICAgaWYgKGVsLmtleSkge1xuICAgICAgICAgICAgICB3YXJuKFwiYGtleWAgZG9lcyBub3Qgd29yayBvbiA8c2xvdD4gYmVjYXVzZSBzbG90cyBhcmUgYWJzdHJhY3Qgb3V0bGV0cyBcIiArXG4gICAgICAgICAgICAgICAgICBcImFuZCBjYW4gcG9zc2libHkgZXhwYW5kIGludG8gbXVsdGlwbGUgZWxlbWVudHMuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiVXNlIHRoZSBrZXkgb24gYSB3cmFwcGluZyBlbGVtZW50IGluc3RlYWQuXCIsIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAna2V5JykpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBwcm9jZXNzQ29tcG9uZW50KGVsKSB7XG4gICAgICB2Y
3XIgYmluZGluZztcbiAgICAgIGlmICgoYmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAnaXMnKSkpIHtcbiAgICAgICAgICBlbC5jb21wb25lbnQgPSBiaW5kaW5nO1xuICAgICAgfVxuICAgICAgaWYgKGdldEFuZFJlbW92ZUF0dHIoZWwsICdpbmxpbmUtdGVtcGxhdGUnKSAhPSBudWxsKSB7XG4gICAgICAgICAgZWwuaW5saW5lVGVtcGxhdGUgPSB0cnVlO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIHByb2Nlc3NBdHRycyhlbCkge1xuICAgICAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gICAgICB2YXIgaSwgbCwgbmFtZSwgcmF3TmFtZSwgdmFsdWUsIG1vZGlmaWVycywgc3luY0dlbiwgaXNEeW5hbWljO1xuICAgICAgZm9yIChpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgbmFtZSA9IHJhd05hbWUgPSBsaXN0W2ldLm5hbWU7XG4gICAgICAgICAgdmFsdWUgPSBsaXN0W2ldLnZhbHVlO1xuICAgICAgICAgIGlmIChkaXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICAgIC8vIG1hcmsgZWxlbWVudCBhcyBkeW5hbWljXG4gICAgICAgICAgICAgIGVsLmhhc0JpbmRpbmdzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgLy8gbW9kaWZpZXJzXG4gICAgICAgICAgICAgIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJzKG5hbWUucmVwbGFjZShkaXJSRSwgJycpKTtcbiAgICAgICAgICAgICAgLy8gc3VwcG9ydCAuZm9vIHNob3J0aGFuZCBzeW50YXggZm9yIHRoZSAucHJvcCBtb2RpZmllclxuICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzKSB7XG4gICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKG1vZGlmaWVyUkUsICcnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoYmluZFJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHYtYmluZFxuICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShiaW5kUkUsICcnKTtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGaWx0ZXJzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIGlzRHluYW1pYyA9IGR5bmFtaWNBcmdSRS50ZXN0KG5hbWUpO1xuICAgICAgICAgICAgICAgICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgd2FybihcIlRoZSB2YWx1ZSBmb3IgYSB2LWJpbmQgZXhwcmVzc2lvbiBjYW5ub3QgYmUgZW1wdHkuIEZvdW5kIGluIFxcXCJ2LWJpbmQ6XCIuY29uY2F0KG5hbWUsIFwiXFxcIlwiKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVycy5wcm9wICYmICFpc0R5bmFtaWMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2lubmVySHRtbCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gJ2lubmVySFRNTCc7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RpZmllcnMuY2FtZWwgJiYgIWlzRHluYW1pYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gY2FtZWxpemUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RpZmllcnMuc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jR2VuID0gZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIFwiJGV2ZW50XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRHluYW1pYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSGFuZGxlcihlbCwgXCJ1cGRhdGU6XCIuY29uY2F0KGNhbWVsaXplKG5hbWUpKSwgc3luY0dlbiwgbnVsbCwgZmFsc2UsIHdhcm4sIGxpc3RbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGh5cGhlbmF0ZShuYW1lKSAhPT0gY2FtZWxpemUobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRIYW5kbGVyKGVsLCBcInVwZGF0ZTpcIi5jb25jYXQoaHlwaGVuYXRlKG5hbWUpKSwgc3luY0dlbiwgbnVsbCwgZmFsc2UsIHdhcm4sIGxpc3RbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlciB3LyBkeW5hbWljIGV2ZW50IG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhhbmRsZXIoZWwsIFwiXFxcInVwZGF0ZTpcXFwiKyhcIi5jb25jYXQobmFtZSwgXCIpXCIpLCBzeW5jR2VuLCBudWxsLCBmYWxzZSwgd2FybiwgbGlzdFtpXSwgdHJ1ZSAvLyBkeW5hbWljXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKChtb2RpZmllcnMgJiYgbW9kaWZpZXJzLnByb3ApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKCFlbC5jb21wb25lbnQgJiYgcGxhdGZvcm1NdXN0VXNlUHJvcChlbC50YWcsIGVsLmF0dHJzTWFwLnR5cGUsIG5hbWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGFkZFByb3AoZWwsIG5hbWUsIHZhbHVlLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRkQXR0cihlbCwgbmFtZSwgdmFsdWUsIGxpc3RbaV0sIGlzRHluYW1pYyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgI
3H1cbiAgICAgICAgICAgICAgZWxzZSBpZiAob25SRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAvLyB2LW9uXG4gICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKG9uUkUsICcnKTtcbiAgICAgICAgICAgICAgICAgIGlzRHluYW1pYyA9IGR5bmFtaWNBcmdSRS50ZXN0KG5hbWUpO1xuICAgICAgICAgICAgICAgICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGFkZEhhbmRsZXIoZWwsIG5hbWUsIHZhbHVlLCBtb2RpZmllcnMsIGZhbHNlLCB3YXJuLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gbm9ybWFsIGRpcmVjdGl2ZXNcbiAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoZGlyUkUsICcnKTtcbiAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIGFyZ1xuICAgICAgICAgICAgICAgICAgdmFyIGFyZ01hdGNoID0gbmFtZS5tYXRjaChhcmdSRSk7XG4gICAgICAgICAgICAgICAgICB2YXIgYXJnID0gYXJnTWF0Y2ggJiYgYXJnTWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICBpc0R5bmFtaWMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGlmIChhcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zbGljZSgwLCAtKGFyZy5sZW5ndGggKyAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGR5bmFtaWNBcmdSRS50ZXN0KGFyZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEeW5hbWljID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBhZGREaXJlY3RpdmUoZWwsIG5hbWUsIHJhd05hbWUsIHZhbHVlLCBhcmcsIGlzRHluYW1pYywgbW9kaWZpZXJzLCBsaXN0W2ldKTtcbiAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnbW9
3kZWwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2hlY2tGb3JBbGlhc01vZGVsKGVsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGxpdGVyYWwgYXR0cmlidXRlXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHZhciByZXMgPSBwYXJzZVRleHQodmFsdWUsIGRlbGltaXRlcnMpO1xuICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgIHdhcm4oXCJcIi5jb25jYXQobmFtZSwgXCI9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIjogXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVycG9sYXRpb24gaW5zaWRlIGF0dHJpYnV0ZXMgaGFzIGJlZW4gcmVtb3ZlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdVc2Ugdi1iaW5kIG9yIHRoZSBjb2xvbiBzaG9ydGhhbmQgaW5zdGVhZC4gRm9yIGV4YW1wbGUsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5zdGVhZCBvZiA8ZGl2IGlkPVwie3sgdmFsIH19XCI+LCB1c2UgPGRpdiA6aWQ9XCJ2YWxcIj4uJywgbGlzdFtpXSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYWRkQXR0cihlbCwgbmFtZSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpLCBsaXN0W2ldKTtcbiAgICAgICAgICAgICAgLy8gIzY4ODcgZmlyZWZveCBkb2Vzbid0IHVwZGF0ZSBtdXRlZCBzdGF0ZSBpZiBzZXQgdmlhIGF0dHJpYnV0ZVxuICAgICAgICAgICAgICAvLyBldmVuIGltbWVkaWF0ZWx5IGFmdGVyIGVsZW1lbnQgY3JlYXRpb25cbiAgICAgICAgICAgICAgaWYgKCFlbC5jb21wb25lbnQgJiZcbiAgICAgICAgICAgICAgICAgIG5hbWUgPT09ICdtdXRlZCcgJiZcbiAgICAgICAgICAgICAgICAgIHBsYXRmb3JtTXVzdFVzZVByb3AoZWwudGFnLCBlbC5hdHRyc01hcC50eXBlLCBuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgYWRkUHJvcChlbCwgbmFtZSwgJ3RydWUnLCBsaXN0W2ldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjaGVja0luRm9yKGVsKSB7XG4gICAgICB2Y
3XIgcGFyZW50ID0gZWw7XG4gICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgICAgaWYgKHBhcmVudC5mb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmdW5jdGlvbiBwYXJzZU1vZGlmaWVycyhuYW1lKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBuYW1lLm1hdGNoKG1vZGlmaWVyUkUpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdmFyIHJldF8xID0ge307XG4gICAgICAgICAgbWF0Y2guZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgICAgICAgICAgICByZXRfMVttLnNsaWNlKDEpXSA9IHRydWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJldF8xO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIG1ha2VBdHRyc01hcChhdHRycykge1xuICAgICAgdmFyIG1hcCA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhdHRycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAobWFwW2F0dHJzW2ldLm5hbWVdICYmICFpc0lFICYmICFpc0VkZ2UpIHtcbiAgICAgICAgICAgICAgd2FybignZHVwbGljYXRlIGF0dHJpYnV0ZTogJyArIGF0dHJzW2ldLm5hbWUsIGF0dHJzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWFwW2F0dHJzW2ldLm5hbWVdID0gYXR0cnNbaV0udmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwO1xuICB9XG4gIC8vIGZvciBzY3JpcHQgKGUuZy4gdHlwZT1cIngvdGVtcGxhdGVcIikgb3Igc3R5bGUsIGRvIG5vdCBkZWNvZGUgY29udGVudFxuICBmdW5jdGlvbiBpc1RleHRUYWcoZWwpIHtcbiAgICAgIHJldHVybiBlbC50YWcgPT09ICdzY3JpcHQnIHx8IGVsLnRhZyA9PT0gJ3N0eWxlJztcbiAgfVxuICBmdW5jdGlvbiBpc0ZvcmJpZGRlblRhZyhlbCkge1xuICAgICAgcmV0dXJuIChlbC50YWcgPT09ICdzdHlsZScgfHxcbiAgICAgICAgICAoZWwudGFnID09PSAnc2NyaXB0JyAmJlxuICAgICAgICAgICAgICAoIWVsLmF0dHJzTWFwLnR5cGUgfHwgZWwuYXR0cnNNYXAudHlwZSA9PT0gJ3RleHQvamF2YXNjcmlwdCcpKSk7XG4gIH1cbiAgdmFyIGllTlNCdWcgPSAvXnhtbG5zOk5TXFxkKy87XG4gIHZhciBpZU5TUHJlZml4ID0gL15OU1xcZCs6LztcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgZnVuY3Rpb24gZ3VhcmRJRVNWR0J1ZyhhdHRycykge1xuICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBhdHRyID0gYXR0cnNbaV07XG4gICAgICAgICAgaWYgKCFpZU5TQnVnLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICAgICAgICBhdHRyLm5hbWUgPSBhdHRyLm5hbWUucmVwbGFjZShpZU5TUHJlZml4LCAnJyk7XG4gICAgICAgICAgICAgIHJlcy5wdXNoKGF0dHIpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gIH1cbiAgZnVuY3Rpb24gY2hlY2tGb3JBbGlhc01vZGVsKGVsLCB2YWx1ZSkge1xuICAgICAgdmFyIF9lbCA9IGVsO1xuICAgICAgd2hpbGUgKF9lbCkge1xuICAgICAgICAgIGlmIChfZWwuZm9yICYmIF9lbC5hbGlhcyA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgd2FybihcIjxcIi5jb25jYXQoZWwudGFnLCBcIiB2LW1vZGVsPVxcXCJcIikuY29uY2F0KHZhbHVlLCBcIlxcXCI+OiBcIikgK1xuICAgICAgICAgICAgICAgICAgXCJZb3UgYXJlIGJpbmRpbmcgdi1tb2RlbCBkaXJlY3RseSB0byBhIHYtZm9yIGl0ZXJhdGlvbiBhbGlhcy4gXCIgK1xuICAgICAgICAgICAgICAgICAgXCJUaGlzIHdpbGwgbm90IGJlIGFibGUgdG8gbW9kaWZ5IHRoZSB2LWZvciBzb3VyY2UgYXJyYXkgYmVjYXVzZSBcIiArXG4gICAgICAgICAgICAgICAgICBcIndyaXRpbmcgdG8gdGhlIGFsaWFzIGlzIGxpa2UgbW9kaWZ5aW5nIGEgZnVuY3Rpb24gbG9jYWwgdmFyaWFibGUuIFwiICtcbiAgICAgICAgICAgICAgICAgIFwiQ29uc2lkZXIgdXNpbmcgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhbmQgdXNlIHYtbW9kZWwgb24gYW4gb2JqZWN0IHByb3BlcnR5IGluc3RlYWQuXCIsIGVsLnJhd0F0dHJzTWFwWyd2LW1vZGVsJ10pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZWwgPSBfZWwucGFyZW50O1xuICAgICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZCBpbnB1dFt2LW1vZGVsXSB3aXRoIGR5bmFtaWMgdHlwZSBiaW5kaW5ncyBpbnRvIHYtaWYtZWxzZSBjaGFpbnNcbiAgICogVHVybiB0aGlzOlxuICAgKiAgIDxpbnB1dCB2LW1vZGVsPVwiZGF0YVt0eXBlXVwiIDp0eXBlPVwidHlwZVwiPlxuICAgKiBpbnRvIHRoaXM6XG4gICAqICAgPGlucHV0IHYtaWY9XCJ0eXBlID09PSAnY2hlY2tib3gnXCIgdHlwZT1cImNoZWNrYm94XCIgdi1tb2RlbD1cImRhdGFbdHlwZV1cIj5cbiAgICogICA8aW5wdXQgdi1lbHNlLWlmPVwidHlwZSA9PT0gJ3JhZGlvJ1wiIHR5cGU9XCJyYWRpb1wiIHYtbW9kZWw9XCJkYXRhW3R5cGVdXCI+XG4gICAqICAgPGlucHV0IHYtZWxzZSA6dHlwZT1cInR5cGVcIiB2LW1vZGVsPVwiZGF0YVt0eXBlXVwiPlxuICAgKi9cbiAgZnVuY3Rpb24gcHJlVHJhbnNmb3JtTm9kZShlbCwgb3B0aW9ucykge1xuICAgICAgaWYgKGVsLnRhZyA9PT0gJ2lucHV0Jykge1xuICAgICAgICAgIHZhciBtYXAgPSBlbC5hdHRyc01hcDtcbiAgICAgICAgICBpZiAoIW1hcFsndi1tb2RlbCddKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHR5cGVCaW5kaW5nID0gdm9pZCAwO1xuICAgICAgICAgIGlmIChtYXBbJzp0eXBlJ10gfHwgbWFwWyd2LWJpbmQ6dHlwZSddKSB7XG4gICAgICAgICAgICAgIHR5cGVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd0eXBlJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghbWFwLnR5cGUgJiYgIXR5cGVCaW5kaW5nICYmIG1hcFsndi1iaW5kJ10pIHtcbiAgICAgICAgICAgICAgdHlwZUJpbmRpbmcgPSBcIihcIi5jb25jYXQobWFwWyd2LWJpbmQnXSwgXCIpLnR5cGVcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlQmluZGluZykge1xuICAgICAgICAgICAgICB2Y
3XIgaWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1pZicsIHRydWUpO1xuICAgICAgICAgICAgICB2YXIgaWZDb25kaXRpb25FeHRyYSA9IGlmQ29uZGl0aW9uID8gXCImJihcIi5jb25jYXQoaWZDb25kaXRpb24sIFwiKVwiKSA6IFwiXCI7XG4gICAgICAgICAgICAgIHZhciBoYXNFbHNlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZScsIHRydWUpICE9IG51bGw7XG4gICAgICAgICAgICAgIHZhciBlbHNlSWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlLWlmJywgdHJ1ZSk7XG4gICAgICAgICAgICAgIC8vIDEuIGNoZWNrYm94XG4gICAgICAgICAgICAgIHZhciBicmFuY2gwID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgICAgICAgICAgLy8gcHJvY2VzcyBmb3Igb24gdGhlIG1haW4gbm9kZVxuICAgICAgICAgICAgICBwcm9jZXNzRm9yKGJyYW5jaDApO1xuICAgICAgICAgICAgICBhZGRSYXdBdHRyKGJyYW5jaDAsICd0eXBlJywgJ2NoZWNrYm94Jyk7XG4gICAgICAgICAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDAsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICBicmFuY2gwLnByb2Nlc3NlZCA9IHRydWU7IC8vIHByZXZlbnQgaXQgZnJvbSBkb3VibGUtcHJvY2Vzc2VkXG4gICAgICAgICAgICAgIGJyYW5jaDAuaWYgPSBcIihcIi5jb25jYXQodHlwZUJpbmRpbmcsIFwiKT09PSdjaGVja2JveCdcIikgKyBpZkNvbmRpdGlvbkV4dHJhO1xuICAgICAgICAgICAgICBhZGRJZkNvbmRpdGlvbihicmFuY2gwLCB7XG4gICAgICAgICAgICAgICAgICBleHA6IGJyYW5jaDAuaWYsXG4gICAgICAgICAgICAgICAgICBibG9jazogYnJhbmNoMFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgLy8gMi4gYWRkIHJhZGlvIGVsc2UtaWYgY29uZGl0aW9uXG4gICAgICAgICAgICAgIHZhciBicmFuY2gxID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgICAgICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gxLCAndi1mb3InLCB0cnVlKTtcbiAgICAgICAgICAgICAgYWRkUmF3QXR0cihicmFuY2gxLCAndHlwZScsICdyYWRpbycpO1xuICAgICAgICAgICAgICBwcm9jZXNzRWxlbWVudChicmFuY2gxLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICAgICAgICAgICAgZXhwOiBcIihcIi5jb25jYXQodHlwZUJpbmRpbmcsIFwiKT09PSdyYWRpbydcIikgKyBpZkNvbmRpdGlvbkV4dHJhLFxuICAgICAgICAgICAgICAgICAgYmxvY2s6IGJyYW5jaDFcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIC8vIDMuIG90aGVyXG4gICAgICAgICAgICAgIHZhciBicmFuY2gyID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgICAgICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gyLCAndi1mb3InLCB0cnVlKTtcbiAgICAgICAgICAgICAgYWRkUmF3QXR0cihicmFuY2gyLCAnOnR5cGUnLCB0eXBlQmluZGluZyk7XG4gICAgICAgICAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICBhZGRJZkNvbmRpdGlvbihicmFuY2gwLCB7XG4gICAgICAgICAgICAgICAgICBleHA6IGlmQ29uZGl0aW9uLFxuICAgICAgICAgICAgICAgICAgYmxvY2s6IGJyYW5jaDJcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChoYXNFbHNlKSB7XG4gICAgICAgICAgICAgICAgICBicmFuY2gwLmVsc2UgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKGVsc2VJZkNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgICAgYnJhbmNoMC5lbHNlaWYgPSBlbHNlSWZDb25kaXRpb247XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDA7XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNsb25lQVNURWxlbWVudChlbCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUFTVEVsZW1lbnQoZWwudGFnLCBlbC5hdHRyc0xpc3Quc2xpY2UoKSwgZWwucGFyZW50KTtcbiAgfVxuICB2YXIgbW9kZWwgPSB7XG4gICAgICBwcmVUcmFuc2Zvcm1Ob2RlOiBwcmVUcmFuc2Zvcm1Ob2RlXG4gIH07XG5cbiAgdmFyIG1vZHVsZXMgPSBba2xhc3MsIHN0eWxlLCBtb2RlbF07XG5cbiAgZnVuY3Rpb24gdGV4dChlbCwgZGlyKSB7XG4gICAgICBpZiAoZGlyLnZhbHVlKSB7XG4gICAgICAgICAgYWRkUHJvcChlbCwgJ3RleHRDb250ZW50JywgXCJfcyhcIi5jb25jYXQoZGlyLnZhbHVlLCBcIilcIiksIGRpcik7XG4gICAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBodG1sKGVsLCBkaXIpIHtcbiAgICAgIGlmIChkaXIudmFsdWUpIHtcbiAgICAgICAgICBhZGRQcm9wKGVsLCAnaW5uZXJIVE1MJywgXCJfcyhcIi5jb25jYXQoZGlyLnZhbHVlLCBcIilcIiksIGRpcik7XG4gICAgICB9XG4gIH1cblxuICB2YXIgZGlyZWN0aXZlcyA9IHtcbiAgICAgIG1vZGVsOiBtb2RlbCQxLFxuICAgICAgdGV4dDogdGV4dCxcbiAgICAgIGh0bWw6IGh0bWxcbiAgfTtcblxuICB2YXIgYmFzZU9wdGlvbnMgPSB7XG4gICAgICBleHBlY3RIVE1MOiB0cnVlLFxuICAgICAgbW9kdWxlczogbW9k
3dWxlcyxcbiAgICAgIGRpcmVjdGl2ZXM6IGRpcmVjdGl2ZXMsXG4gICAgICBpc1ByZVRhZzogaXNQcmVUYWcsXG4gICAgICBpc1VuYXJ5VGFnOiBpc1VuYXJ5VGFnLFxuICAgICAgbXVzdFVzZVByb3A6IG11c3RVc2VQcm9wLFxuICAgICAgY2FuQmVMZWZ0T3BlblRhZzogY2FuQmVMZWZ0T3BlblRhZyxcbiAgICAgIGlzUmVzZXJ2ZWRUYWc6IGlzUmVzZXJ2ZWRUYWcsXG4gICAgICBnZXRUYWdOYW1lc3BhY2U6IGdldFRhZ05hbWVzcGFjZSxcbiAgICAgIHN0YXRpY0tleXM6IGdlblN0YXRpY0tleXMkMShtb2R1bGVzKVxuICB9O1xuXG4gIHZhciBpc1N0YXRpY0tleTtcbiAgdmFyIGlzUGxhdGZvcm1SZXNlcnZlZFRhZztcbiAgdmFyIGdlblN0YXRpY0tleXNDYWNoZWQgPSBjYWNoZWQoZ2VuU3RhdGljS2V5cyk7XG4gIC8qKlxuICAgKiBHb2FsIG9mIHRoZSBvcHRpbWl6ZXI6IHdhbGsgdGhlIGdlbmVyYXRlZCB0ZW1wbGF0ZSBBU1QgdHJlZVxuICAgKiBhbmQgZGV0ZWN0IHN1Yi10cmVlcyB0aGF0IGFyZSBwdXJlbHkgc3RhdGljLCBpLmUuIHBhcnRzIG9mXG4gICAqIHRoZSBET00gdGhhdCBuZXZlciBuZWVkcyB0byBjaGFuZ2UuXG4gICAqXG4gICAqIE9uY2Ugd2UgZGV0ZWN0IHRoZXNlIHN1Yi10cmVlcywgd2UgY2FuOlxuICAgKlxuICAgKiAxLiBIb2lzdCB0aGVtIGludG8gY29uc3RhbnRzLCBzbyB0aGF0IHdlIG5vIGxvbmdlciBuZWVkIHRvXG4gICAqICAgIGNyZWF0ZSBmcmVzaCBub2RlcyBmb3IgdGhlbSBvbiBlYWNoIHJlLXJlbmRlcjtcbiAgICogMi4gQ29tcGxldGVseSBza2lwIHRoZW0gaW4gdGhlIHBhdGNoaW5nIHByb2Nlc3MuXG4gICAqL1xuICBmdW5jdGlvbiBvcHRpbWl6ZShyb290LCBvcHRpb25zKSB7XG4gICAgICBpZiAoIXJvb3QpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgaXNTdGF0aWNLZXkgPSBnZW5TdGF0aWNLZXlzQ2FjaGVkKG9wdGlvbnMuc3RhdGljS2V5cyB8fCAnJyk7XG4gICAgICBpc1BsYXRmb3JtUmVzZXJ2ZWRUYWcgPSBvcHRpb25zLmlzUmVzZXJ2ZWRUYWcgfHwgbm87XG4gICAgICAvLyBmaXJzdCBwYXNzOiBtYXJrIGFsbCBub24tc3RhdGljIG5vZGVzLlxuICAgICAgbWFya1N0YXRpYyhyb290KTtcbiAgICAgIC8vIHNlY29uZCBwYXNzOiBtYXJrIHN0YXRpYyByb290cy5cbiAgICAgIG1hcmtTdGF0aWNSb290cyhyb290LCBmYWxzZSk7XG4gIH1cbiAgZnVuY3Rpb24gZ2VuU3RhdGljS2V5cyhrZXlzKSB7XG4gICAgICByZXR1cm4gbWFrZU1hcCgndHlwZSx0YWcsYXR0cnNMaXN0LGF0dHJzTWFwLHBsYWluLHBhcmVudCxjaGlsZHJlbixhdHRycyxzdGFydCxlbmQscmF3QXR0cnNNYXAnICtcbiAgICAgICAgICAoa2V5cyA/ICcsJyArIGtleXMgOiAnJykpO1xuICB9XG4gIGZ1bmN0aW9uIG1hcmtTdGF0aWMobm9kZSkge1xuICAgICAgbm9kZS5zdGF0aWMgPSBpc1N0YXRpYyhub2RlKTtcbiAgICAgIGlmIChub2RlLnR5cGUgPT09IDEpIHtcbiAgICAgICAgICAvLyBkbyBub3QgbWFrZSBjb21wb25lbnQgc2xvdCBjb250ZW50IHN0YXRpYy4gdGhpcyBhdm9pZHNcbiAgICAgICAgICAvLyAxLiBjb21wb25lbnRzIG5vdCBhYmxlIHRvIG11dGF0ZSBzbG90IG5vZGVzXG4gICAgICAgICAgLy8gMi4gc3RhdGljIHNsb3QgY29udGVudCBmYWlscyBmb3IgaG90LXJlbG9hZGluZ1xuICAgICAgICAgIGlmICghaXNQbGF0Zm9ybVJlc2VydmVkVGFnKG5vZGUudGFnKSAmJlxuICAgICAgICAgICAgICBub2RlLnRhZyAhPT0gJ3Nsb3QnICYmXG4gICAgICAgICAgICAgIG5vZGUuYXR0cnNNYXBbJ2lubGluZS10ZW1wbGF0ZSddID09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgIG1hcmtTdGF0aWMoY2hpbGQpO1xuICAgICAgICAgICAgICBpZiAoIWNoaWxkLnN0YXRpYykge1xuICAgICAgICAgICAgICAgICAgbm9kZS5zdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9kZS5pZkNvbmRpdGlvbnMpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSBub2RlLmlmQ29uZGl0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgIHZhciBibG9jayA9IG5vZGUuaWZDb25kaXRpb25zW2ldLmJsb2NrO1xuICAgICAgICAgICAgICAgICAgbWFya1N0YXRpYyhibG9jayk7XG4gICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLnN0YXRpYykge1xuICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc3RhdGljID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbWFya1N0YXRpY1Jvb3RzKG5vZGUsIGlzSW5Gb3IpIHtcbiAgICAgIGlmIChub2RlLnR5cGUgPT09IDEpIHtcbiAgICAgICAgICBpZiAobm9kZS5zdGF0aWMgfHwgbm9kZS5vbmNlKSB7XG4gICAgICAgICAgICAgIG5vZGUuc3RhdGljSW5Gb3IgPSBpc0luRm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBGb3IgYSBub2RlIHRvIHF1YWxpZnkgYXMgYSBzdGF0aWMgcm9vdCwgaXQgc2hvdWxkIGhhdmUgY2hpbGRyZW4gdGhhdFxuICAgICAgICAgIC8vIGFyZSBub3QganVzdCBzdGF0aWMgdGV4dC4gT3RoZXJ3aXNlIHRoZSBjb3N0IG9mIGhvaXN0aW5nIG91dCB3aWxsXG4gICAgICAgICAgLy8gb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIGFuZCBpdCdzIGJldHRlciBvZmYgdG8ganVzdCBhbHdheXMgcmVuZGVyIGl0IGZyZXNoLlxuICAgICAgICAgIGlmIChub2RlLnN0YXRpYyAmJlxuICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAhKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIG5vZGUuY2hpbGRyZW5bMF0udHlwZSA9PT0gMykpIHtcbiAgICAgICAgICAgICAgbm9kZS5zdGF0aWNSb290ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgI
3H1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgbm9kZS5zdGF0aWNSb290ID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgIG1hcmtTdGF0aWNSb290cyhub2RlLmNoaWxkcmVuW2ldLCBpc0luRm9yIHx8ICEhbm9kZS5mb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChub2RlLmlmQ29uZGl0aW9ucykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IG5vZGUuaWZDb25kaXRpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgbWFya1N0YXRpY1Jvb3RzKG5vZGUuaWZDb25kaXRpb25zW2ldLmJsb2NrLCBpc0luRm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBpc1N0YXRpYyhub2RlKSB7XG4gICAgICBpZiAobm9kZS50eXBlID09PSAyKSB7XG4gICAgICAgICAgLy8gZXhwcmVzc2lvblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnR5cGUgPT09IDMpIHtcbiAgICAgICAgICAvLyB0ZXh0XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gISEobm9kZS5wcmUgfHxcbiAgICAgICAgICAoIW5vZGUuaGFzQmluZGluZ3MgJiYgLy8gbm8gZHluYW1pYyBiaW5kaW5nc1xuICAgICAgICAgICAgICAhbm9kZS5pZiAmJlxuICAgICAgICAgICAgICAhbm9kZS5mb3IgJiYgLy8gbm90IHYtaWYgb3Igdi1mb3Igb3Igdi1lbHNlXG4gICAgICAgICAgICAgICFpc0J1aWx0SW5UYWcobm9kZS50YWcpICYmIC8vIG5vdCBhIGJ1aWx0LWluXG4gICAgICAgICAgICAgIGlzUGxhdGZvcm1SZXNlcnZlZFRhZyhub2RlLnRhZykgJiYgLy8gbm90IGEgY29tcG9uZW50XG4gICAgICAgICAgICAgICFpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvcihub2RlKSAmJlxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhub2RlKS5ldmVyeShpc1N0YXRpY0tleSkpKTtcbiAgfVxuICBmdW5jdGlvbiBpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvcihub2RlKSB7XG4gICAgICB3aGlsZSAobm9kZS5wYXJlbnQpIHtcbiAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG4gICAgICAgICAgaWYgKG5vZGUudGFnICE9PSAndGVtcGxhdGUnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5vZGUuZm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBmbkV4cFJFID0gL14oW1xcdyRfXSt8XFwoW14pXSo/XFwpKVxccyo9PnxeZnVuY3Rpb24oPzpcXHMrW1xcdyRdKyk/XFxzKlxcKC87XG4gIHZhciBmbkludm9rZVJFID0gL1xcKFteKV0qP1xcKTsqJC87XG4gIHZhciBzaW1wbGVQYXRoUkUgPSAvXltBLVphLXpfJF1bXFx3JF0qKD86XFwuW0EtWmEtel8kXVtcXHckXSp8XFxbJ1teJ10qPyddfFxcW1wiW15cIl0qP1wiXXxcXFtcXGQrXXxcXFtbQS1aYS16XyRdW1xcdyRdKl0pKiQvO1xuICAvLyBLZXlib2FyZEV2ZW50LmtleUNvZGUgYWxpYXNlc1xuICB2YXIga2V5Q29kZXMgPSB7XG4gICAgICBlc2M6IDI3LFxuICAgICAgdGFiOiA5LFxuICAgICAgZW50ZXI6IDEzLFxuICAgICAgc3BhY2U6IDMyLFxuICAgICAgdXA6IDM4LFxuICAgICAgbGVmdDogMzcsXG4gICAgICByaWdodDogMzksXG4gICAgICBkb3duOiA0MCxcbiAgICAgIGRlbGV0ZTogWzgsIDQ2XVxuICB9O1xuICAvLyBLZXlib2FyZEV2ZW50LmtleSBhbGlhc2VzXG4gIHZhciBrZXlOYW1lcyA9IHtcbiAgICAgIC8vICM3ODgwOiBJRTExIGFuZCBFZGdlIHVzZSBgRXNjYCBmb3IgRXNjYXBlIGtleSBuYW1lLlxuICAgICAgZXNjOiBbJ0VzYycsICdFc2NhcGUnXSxcbiAgICAgIHRhYjogJ1RhYicsXG4gICAgICBlbnRlcjogJ0VudGVyJyxcbiAgICAgIC8vICM5MTEyOiBJRTExIHVzZXMgYFNwYWNlYmFyYCBmb3IgU3BhY2Uga2V5IG5hbWUuXG4gICAgICBzcGFjZTogWycgJywgJ1NwYWNlYmFyJ10sXG4gICAgICAvLyAjNzgwNjogSUUxMSB1c2VzIGtleSBuYW1lcyB3aXRob3V0IGBBcnJvd2AgcHJlZml4IGZvciBhcnJvdyBrZXlzLlxuICAgICAgdXA6IFsnVXAnLCAnQXJyb3dVcCddLFxuICAgICAgbGVmdDogWydMZWZ0JywgJ0Fycm93TGVmdCddLFxuICAgICAgcmlnaHQ6IFsnUmlnaHQnLCAnQXJyb3dSaWdodCddLFxuICAgICAgZG93bjogWydEb3duJywgJ0Fycm93RG93biddLFxuICAgICAgLy8gIzkxMTI6IElFMTEgdXNlcyBgRGVsYCBmb3IgRGVsZXRlIGtleSBuYW1lLlxuICAgICAgZGVsZXRlOiBbJ0JhY2tzcGFjZScsICdEZWxldGUnLCAnRGVsJ11cbiAgfTtcbiAgLy8gIzQ4Njg6IG1vZGlmaWVycyB0aGF0IHByZXZlbnQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgbGlzdGVuZXJcbiAgLy8gbmVlZCB0byBleHBsaWNpdGx5IHJldHVybiBudWxsIHNvIHRoYXQgd2UgY2FuIGRldGVybWluZSB3aGV0aGVyIHRvIHJlbW92ZVxuICAvLyB0aGUgbGlzdGVuZXIgZm9yIC5vbmNlXG4gIHZhciBnZW5HdWFyZCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHsgcmV0dXJuIFwiaWYoXCIuY29uY2F0KGNvbmRpdGlvbiwgXCIpcmV0dXJuIG51bGw7XCIpOyB9O1xuICB2YXIgbW9kaWZpZXJDb2RlID0ge1xuICAgICAgc3RvcDogJyRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsnLFxuICAgICAgcHJldmVudDogJyRldmVudC5wcmV2ZW50RGVmYXVsdCgpOycsXG4gICAgICBzZWxmOiBnZW5HdWFyZChcIiRldmVudC50YXJnZXQgIT09ICRldmVudC5jdXJyZW50VGFyZ2V0XCIpLFxuICAgICAgY3RybDogZ2VuR3VhcmQoXCIhJGV2ZW50LmN0cmxLZXlcIiksXG4gICAgICBzaGlmdDogZ2VuR3VhcmQoXCIhJGV2ZW50LnNoaWZ0S2V5XCIpLFxuICAgICAgYWx0OiBnZW5HdWFyZChcIiEkZXZlbnQuYWx0S2V5XCIpLFxuICAgICAgbWV0YTogZ2VuR3VhcmQoXCIhJGV2ZW50Lm1ldGFLZXlcIiksXG4gICAgICBsZWZ0OiBnZW5HdWFyZChcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAwXCIpLFxuICAgICAgbWlkZGxlOiBnZW5HdWFyZChcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAxXCIpLFxuICAgICAgcmlnaHQ6IGdlbkd1YXJkKFwiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDJcIilcbiAgfTtcbiAgZnVuY3Rpb24gZ2VuSGFuZGxlcnMoZXZlbnRzLCBpc05hdGl2ZSkge1xuICAgICAgdmFyIHByZWZpeCA9IGlzTmF0aXZlID8gJ25hdGl2ZU9uOicgOiAnb246JztcbiAgICAgIHZhciBzdGF0aWNIYW5kbGVycyA9IFwiXCI7XG4gICAgICB2Y
3XIgZHluYW1pY0hhbmRsZXJzID0gXCJcIjtcbiAgICAgIGZvciAodmFyIG5hbWVfMSBpbiBldmVudHMpIHtcbiAgICAgICAgICB2YXIgaGFuZGxlckNvZGUgPSBnZW5IYW5kbGVyKGV2ZW50c1tuYW1lXzFdKTtcbiAgICAgICAgICAvL0B0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICBpZiAoZXZlbnRzW25hbWVfMV0gJiYgZXZlbnRzW25hbWVfMV0uZHluYW1pYykge1xuICAgICAgICAgICAgICBkeW5hbWljSGFuZGxlcnMgKz0gXCJcIi5jb25jYXQobmFtZV8xLCBcIixcIikuY29uY2F0KGhhbmRsZXJDb2RlLCBcIixcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBzdGF0aWNIYW5kbGVycyArPSBcIlxcXCJcIi5jb25jYXQobmFtZV8xLCBcIlxcXCI6XCIpLmNvbmNhdChoYW5kbGVyQ29kZSwgXCIsXCIpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YXRpY0hhbmRsZXJzID0gXCJ7XCIuY29uY2F0KHN0YXRpY0hhbmRsZXJzLnNsaWNlKDAsIC0xKSwgXCJ9XCIpO1xuICAgICAgaWYgKGR5bmFtaWNIYW5kbGVycykge1xuICAgICAgICAgIHJldHVybiBwcmVmaXggKyBcIl9kKFwiLmNvbmNhdChzdGF0aWNIYW5kbGVycywgXCIsW1wiKS5jb25jYXQoZHluYW1pY0hhbmRsZXJzLnNsaWNlKDAsIC0xKSwgXCJdKVwiKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiBwcmVmaXggKyBzdGF0aWNIYW5kbGVycztcbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBnZW5IYW5kbGVyKGhhbmRsZXIpIHtcbiAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgIHJldHVybiAnZnVuY3Rpb24oKXt9JztcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIFwiW1wiLmNvbmNhdChoYW5kbGVyLm1hcChmdW5jdGlvbiAoaGFuZGxlcikgeyByZXR1cm4gZ2VuSGFuZGxlcihoYW5kbGVyKTsgfSkuam9pbignLCcpLCBcIl1cIik7XG4gICAgICB9XG4gICAgICB2Y
3XIgaXNNZXRob2RQYXRoID0gc2ltcGxlUGF0aFJFLnRlc3QoaGFuZGxlci52YWx1ZSk7XG4gICAgICB2YXIgaXNGdW5jdGlvbkV4cHJlc3Npb24gPSBmbkV4cFJFLnRlc3QoaGFuZGxlci52YWx1ZSk7XG4gICAgICB2YXIgaXNGdW5jdGlvbkludm9jYXRpb24gPSBzaW1wbGVQYXRoUkUudGVzdChoYW5kbGVyLnZhbHVlLnJlcGxhY2UoZm5JbnZva2VSRSwgJycpKTtcbiAgICAgIGlmICghaGFuZGxlci5tb2RpZmllcnMpIHtcbiAgICAgICAgICBpZiAoaXNNZXRob2RQYXRoIHx8IGlzRnVuY3Rpb25FeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCJmdW5jdGlvbigkZXZlbnQpe1wiLmNvbmNhdChpc0Z1bmN0aW9uSW52b2NhdGlvbiA/IFwicmV0dXJuIFwiLmNvbmNhdChoYW5kbGVyLnZhbHVlKSA6IGhhbmRsZXIudmFsdWUsIFwifVwiKTsgLy8gaW5saW5lIHN0YXRlbWVudFxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIGNvZGUgPSAnJztcbiAgICAgICAgICB2YXIgZ2VuTW9kaWZpZXJDb2RlID0gJyc7XG4gICAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKG1vZGlmaWVyQ29kZVtrZXldKSB7XG4gICAgICAgICAgICAgICAgICBnZW5Nb2RpZmllckNvZGUgKz0gbW9kaWZpZXJDb2RlW2tleV07XG4gICAgICAgICAgICAgICAgICAvLyBsZWZ0L3JpZ2h0XG4gICAgICAgICAgICAgICAgICBpZiAoa2V5Q29kZXNba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gJ2V4YWN0Jykge1xuICAgICAgICAgICAgICAgICAgdmFyIG1vZGlmaWVyc18xID0gaGFuZGxlci5tb2RpZmllcnM7XG4gICAgICAgICAgICAgICAgICBnZW5Nb2RpZmllckNvZGUgKz0gZ2VuR3VhcmQoWydjdHJsJywgJ3NoaWZ0JywgJ2FsdCcsICdtZXRhJ11cbiAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXlNb2RpZmllcikgeyByZXR1cm4gIW1vZGlmaWVyc18xW2tleU1vZGlmaWVyXTsgfSlcbiAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXlNb2RpZmllcikgeyByZXR1cm4gXCIkZXZlbnQuXCIuY29uY2F0KGtleU1vZGlmaWVyLCBcIktleVwiKTsgfSlcbiAgICAgICAgICAgICAgICAgICAgICAuam9pbignfHwnKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgZm9yICh2YXIga2V5IGluIGhhbmRsZXIubW9kaWZpZXJzKSB7XG4gICAgICAgICAgICAgIF9sb29wXzEoa2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvZGUgKz0gZ2VuS2V5RmlsdGVyKGtleXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBNYWtlIHN1cmUgbW9kaWZpZXJzIGxpa2UgcHJldmVudCBhbmQgc3RvcCBnZXQgZXhlY3V0ZWQgYWZ0ZXIga2V5IGZpbHRlcmluZ1xuICAgICAgICAgIGlmIChnZW5Nb2RpZmllckNvZGUpIHtcbiAgICAgICAgICAgICAgY29kZSArPSBnZW5Nb2RpZmllckNvZGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBoYW5kbGVyQ29kZSA9IGlzTWV0aG9kUGF0aFxuICAgICAgICAgICAgICA/IFwicmV0dXJuIFwiLmNvbmNhdChoYW5kbGVyLnZhbHVlLCBcIi5hcHBseShudWxsLCBhcmd1bWVudHMpXCIpXG4gICAgICAgICAgICAgIDogaXNGdW5jdGlvbkV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgID8gXCJyZXR1cm4gKFwiLmNvbmNhdChoYW5kbGVyLnZhbHVlLCBcIikuYXBwbHkobnVsbCwgYXJndW1lbnRzKVwiKVxuICAgICAgICAgICAgICAgICAgOiBpc0Z1bmN0aW9uSW52b2NhdGlvblxuICAgICAgICAgICAgICAgICAgICAgID8gXCJyZXR1cm4gXCIuY29uY2F0KGhhbmRsZXIudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgOiBoYW5kbGVyLnZhbHVlO1xuICAgICAgICAgIHJldHVybiBcImZ1bmN0aW9uKCRldmVudCl7XCIuY29uY2F0KGNvZGUpLmNvbmNhdChoYW5kbGVyQ29kZSwgXCJ9XCIpO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdlbktleUZpbHRlcihrZXlzKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgLy8gbWFrZSBzdXJlIHRoZSBrZXkgZmlsdGVycyBvbmx5IGFwcGx5IHRvIEtleWJvYXJkRXZlbnRzXG4gICAgICAvLyAjOTQ0MTogY2FuJ3QgdXNlICdrZXlDb2RlJyBpbiAkZXZlbnQgYmVjYXVzZSBDaHJvbWUgYXV0b2ZpbGwgZmlyZXMgZmFrZVxuICAgICAgLy8ga2V5IGV2ZW50cyB0aGF0IGRvIG5vdCBoYXZlIGtleUNvZGUgcHJvcGVydHkuLi5cbiAgICAgIFwiaWYoISRldmVudC50eXBlLmluZGV4T2YoJ2tleScpJiZcIiArXG4gICAgICAgICAgXCJcIi5jb25jYXQoa2V5cy5tYXAoZ2VuRmlsdGVyQ29kZSkuam9pbignJiYnKSwgXCIpcmV0dXJuIG51bGw7XCIpKTtcbiAgfVxuICBmdW5jdGlvbiBnZW5GaWx0ZXJDb2RlKGtleSkge1xuICAgICAgdmFyIGtleVZhbCA9IHBhcnNlSW50KGtleSwgMTApO1xuICAgICAgaWYgKGtleVZhbCkge1xuICAgICAgICAgIHJldHVybiBcIiRldmVudC5rZXlDb2RlIT09XCIuY29uY2F0KGtleVZhbCk7XG4gICAgICB9XG4gICAgICB2Y
3XIga2V5Q29kZSA9IGtleUNvZGVzW2tleV07XG4gICAgICB2YXIga2V5TmFtZSA9IGtleU5hbWVzW2tleV07XG4gICAgICByZXR1cm4gKFwiX2soJGV2ZW50LmtleUNvZGUsXCIgK1xuICAgICAgICAgIFwiXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGtleSksIFwiLFwiKSArXG4gICAgICAgICAgXCJcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoa2V5Q29kZSksIFwiLFwiKSArXG4gICAgICAgICAgXCIkZXZlbnQua2V5LFwiICtcbiAgICAgICAgICBcIlwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShrZXlOYW1lKSkgK1xuICAgICAgICAgIFwiKVwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uKGVsLCBkaXIpIHtcbiAgICAgIGlmIChkaXIubW9kaWZpZXJzKSB7XG4gICAgICAgICAgd2FybiQyKFwidi1vbiB3aXRob3V0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgbW9kaWZpZXJzLlwiKTtcbiAgICAgIH1cbiAgICAgIGVsLndyYXBMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoY29kZSkgeyByZXR1cm4gXCJfZyhcIi5jb25jYXQoY29kZSwgXCIsXCIpLmNvbmNhdChkaXIudmFsdWUsIFwiKVwiKTsgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJpbmQoZWwsIGRpcikge1xuICAgICAgZWwud3JhcERhdGEgPSBmdW5jdGlvbiAoY29kZSkge1xuICAgICAgICAgIHJldHVybiBcIl9iKFwiLmNvbmNhdChjb2RlLCBcIiwnXCIpLmNvbmNhdChlbC50YWcsIFwiJyxcIikuY29uY2F0KGRpci52YWx1ZSwgXCIsXCIpLmNvbmNhdChkaXIubW9kaWZpZXJzICYmIGRpci5tb2RpZmllcnMucHJvcCA/ICd0cnVlJyA6ICdmYWxzZScpLmNvbmNhdChkaXIubW9kaWZpZXJzICYmIGRpci5tb2RpZmllcnMuc3luYyA/ICcsdHJ1ZScgOiAnJywgXCIpXCIpO1xuICAgICAgfTtcbiAgfVxuXG4gIHZhciBiYXNlRGlyZWN0aXZlcyA9IHtcbiAgICAgIG9uOiBvbixcbiAgICAgIGJpbmQ6IGJpbmQsXG4gICAgICBjbG9hazogbm9vcFxuICB9O1xuXG4gIHZhciBDb2RlZ2VuU3RhdGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBDb2RlZ2VuU3RhdGUob3B0aW9ucykge1xuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgICAgdGhpcy53YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICAgICAgICAgIHRoaXMudHJhbnNmb3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAndHJhbnNmb3JtQ29kZScpO1xuICAgICAgICAgIHRoaXMuZGF0YUdlbkZucyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAnZ2VuRGF0YScpO1xuICAgICAgICAgIHRoaXMuZGlyZWN0aXZlcyA9IGV4dGVuZChleHRlbmQoe30sIGJhc2VEaXJlY3RpdmVzKSwgb3B0aW9ucy5kaXJlY3RpdmVzKTtcbiAgICAgICAgICB2Y
3XIgaXNSZXNlcnZlZFRhZyA9IG9wdGlvbnMuaXNSZXNlcnZlZFRhZyB8fCBubztcbiAgICAgICAgICB0aGlzLm1heWJlQ29tcG9uZW50ID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgIHJldHVybiAhIWVsLmNvbXBvbmVudCB8fCAhaXNSZXNlcnZlZFRhZyhlbC50YWcpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5vbmNlSWQgPSAwO1xuICAgICAgICAgIHRoaXMuc3RhdGljUmVuZGVyRm5zID0gW107XG4gICAgICAgICAgdGhpcy5wcmUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBDb2RlZ2VuU3RhdGU7XG4gIH0oKSk7XG4gIGZ1bmN0aW9uIGdlbmVyYXRlKGFzdCwgb3B0aW9ucykge1xuICAgICAgdmFyIHN0YXRlID0gbmV3IENvZGVnZW5TdGF0ZShvcHRpb25zKTtcbiAgICAgIC8vIGZpeCAjMTE0ODMsIFJvb3QgbGV2ZWwgPHNjcmlwdD4gdGFncyBzaG91bGQgbm90IGJlIHJlbmRlcmVkLlxuICAgICAgdmFyIGNvZGUgPSBhc3RcbiAgICAgICAgICA/IGFzdC50YWcgPT09ICdzY3JpcHQnXG4gICAgICAgICAgICAgID8gJ251bGwnXG4gICAgICAgICAgICAgIDogZ2VuRWxlbWVudChhc3QsIHN0YXRlKVxuICAgICAgICAgIDogJ19jKFwiZGl2XCIpJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVuZGVyOiBcIndpdGgodGhpcyl7cmV0dXJuIFwiLmNvbmNhdChjb2RlLCBcIn1cIiksXG4gICAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0ZS5zdGF0aWNSZW5kZXJGbnNcbiAgICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gZ2VuRWxlbWVudChlbCwgc3RhdGUpIHtcbiAgICAgIGlmIChlbC5wYXJlbnQpIHtcbiAgICAgICAgICBlbC5wcmUgPSBlbC5wcmUgfHwgZWwucGFyZW50LnByZTtcbiAgICAgIH1cbiAgICAgIGlmIChlbC5zdGF0aWNSb290ICYmICFlbC5zdGF0aWNQcm9jZXNzZWQpIHtcbiAgICAgICAgICByZXR1cm4gZ2VuU3RhdGljKGVsLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChlbC5vbmNlICYmICFlbC5vbmNlUHJvY2Vzc2VkKSB7XG4gICAgICAgICAgcmV0dXJuIGdlbk9uY2UoZWwsIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGVsLmZvciAmJiAhZWwuZm9yUHJvY2Vzc2VkKSB7XG4gICAgICAgICAgcmV0dXJuIGdlbkZvcihlbCwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZWwuaWYgJiYgIWVsLmlmUHJvY2Vzc2VkKSB7XG4gICAgICAgICAgcmV0dXJuIGdlbklmKGVsLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScgJiYgIWVsLnNsb3RUYXJnZXQgJiYgIXN0YXRlLnByZSkge1xuICAgICAgICAgIHJldHVybiBnZW5DaGlsZHJlbihlbCwgc3RhdGUpIHx8ICd2b2lkIDAnO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZWwudGFnID09PSAnc2xvdCcpIHtcbiAgICAgICAgICByZXR1cm4gZ2VuU2xvdChlbCwgc3RhdGUpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gY29tcG9uZW50IG9yIGVsZW1lbnRcbiAgICAgICAgICB2Y
3XIgY29kZSA9IHZvaWQgMDtcbiAgICAgICAgICBpZiAoZWwuY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIGNvZGUgPSBnZW5Db21wb25lbnQoZWwuY29tcG9uZW50LCBlbCwgc3RhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIGRhdGEgPSB2b2lkIDA7XG4gICAgICAgICAgICAgIHZhciBtYXliZUNvbXBvbmVudCA9IHN0YXRlLm1heWJlQ29tcG9uZW50KGVsKTtcbiAgICAgICAgICAgICAgaWYgKCFlbC5wbGFpbiB8fCAoZWwucHJlICYmIG1heWJlQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICAgICAgZGF0YSA9IGdlbkRhdGEoZWwsIHN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgdGFnIFxuICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIGEgY29tcG9uZW50IGluIDxzY3JpcHQgc2V0dXA+XG4gICAgICAgICAgICAgID0gdm9pZCAwO1xuICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIGEgY29tcG9uZW50IGluIDxzY3JpcHQgc2V0dXA+XG4gICAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IHN0YXRlLm9wdGlvbnMuYmluZGluZ3M7XG4gICAgICAgICAgICAgIGlmIChtYXliZUNvbXBvbmVudCAmJiBiaW5kaW5ncyAmJiBiaW5kaW5ncy5fX2lzU2NyaXB0U2V0dXAgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICB0YWcgPSBjaGVja0JpbmRpbmdUeXBlKGJpbmRpbmdzLCBlbC50YWcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghdGFnKVxuICAgICAgICAgICAgICAgICAgdGFnID0gXCInXCIuY29uY2F0KGVsLnRhZywgXCInXCIpO1xuICAgICAgICAgICAgICB2Y
3XIgY2hpbGRyZW4gPSBlbC5pbmxpbmVUZW1wbGF0ZSA/IG51bGwgOiBnZW5DaGlsZHJlbihlbCwgc3RhdGUsIHRydWUpO1xuICAgICAgICAgICAgICBjb2RlID0gXCJfYyhcIi5jb25jYXQodGFnKS5jb25jYXQoZGF0YSA/IFwiLFwiLmNvbmNhdChkYXRhKSA6ICcnIC8vIGRhdGFcbiAgICAgICAgICAgICAgKS5jb25jYXQoY2hpbGRyZW4gPyBcIixcIi5jb25jYXQoY2hpbGRyZW4pIDogJycgLy8gY2hpbGRyZW5cbiAgICAgICAgICAgICAgLCBcIilcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG1vZHVsZSB0cmFuc2Zvcm1zXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS50cmFuc2Zvcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvZGUgPSBzdGF0ZS50cmFuc2Zvcm1zW2ldKGVsLCBjb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY2hlY2tCaW5kaW5nVHlwZShiaW5kaW5ncywga2V5KSB7XG4gICAgICB2YXIgY2FtZWxOYW1lID0gY2FtZWxpemUoa2V5KTtcbiAgICAgIHZhciBQYXNjYWxOYW1lID0gY2FwaXRhbGl6ZShjYW1lbE5hbWUpO1xuICAgICAgdmFyIGNoZWNrVHlwZSA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgICAgaWYgKGJpbmRpbmdzW2tleV0gPT09IHR5cGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJpbmRpbmdzW2NhbWVsTmFtZV0gPT09IHR5cGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNhbWVsTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJpbmRpbmdzW1Bhc2NhbE5hbWVdID09PSB0eXBlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBQYXNjYWxOYW1lO1xuICAgICAgICAgIH1cbiAgICAgIH07XG4gICAgICB2Y
3XIgZnJvbUNvbnN0ID0gY2hlY2tUeXBlKFwic2V0dXAtY29uc3RcIiAvKiBCaW5kaW5nVHlwZXMuU0VUVVBfQ09OU1QgKi8pIHx8XG4gICAgICAgICAgY2hlY2tUeXBlKFwic2V0dXAtcmVhY3RpdmUtY29uc3RcIiAvKiBCaW5kaW5nVHlwZXMuU0VUVVBfUkVBQ1RJVkVfQ09OU1QgKi8pO1xuICAgICAgaWYgKGZyb21Db25zdCkge1xuICAgICAgICAgIHJldHVybiBmcm9tQ29uc3Q7XG4gICAgICB9XG4gICAgICB2YXIgZnJvbU1heWJlUmVmID0gY2hlY2tUeXBlKFwic2V0dXAtbGV0XCIgLyogQmluZGluZ1R5cGVzLlNFVFVQX0xFVCAqLykgfHxcbiAgICAgICAgICBjaGVja1R5cGUoXCJzZXR1cC1yZWZcIiAvKiBCaW5kaW5nVHlwZXMuU0VUVVBfUkVGICovKSB8fFxuICAgICAgICAgIGNoZWNrVHlwZShcInNldHVwLW1heWJlLXJlZlwiIC8qIEJpbmRpbmdUeXBlcy5TRVRVUF9NQVlCRV9SRUYgKi8pO1xuICAgICAgaWYgKGZyb21NYXliZVJlZikge1xuICAgICAgICAgIHJldHVybiBmcm9tTWF5YmVSZWY7XG4gICAgICB9XG4gIH1cbiAgLy8gaG9pc3Qgc3RhdGljIHN1Yi10cmVlcyBvdXRcbiAgZnVuY3Rpb24gZ2VuU3RhdGljKGVsLCBzdGF0ZSkge1xuICAgICAgZWwuc3RhdGljUHJvY2Vzc2VkID0gdHJ1ZTtcbiAgICAgIC8vIFNvbWUgZWxlbWVudHMgKHRlbXBsYXRlcykgbmVlZCB0byBiZWhhdmUgZGlmZmVyZW50bHkgaW5zaWRlIG9mIGEgdi1wcmVcbiAgICAgIC8vIG5vZGUuICBBbGwgcHJlIG5vZGVzIGFyZSBzdGF0aWMgcm9vdHMsIHNvIHdlIGNhbiB1c2UgdGhpcyBhcyBhIGxvY2F0aW9uIHRvXG4gICAgICAvLyB3cmFwIGEgc3RhdGUgY2hhbmdlIGFuZCByZXNldCBpdCB1cG9uIGV4aXRpbmcgdGhlIHByZSBub2RlLlxuICAgICAgdmFyIG9yaWdpbmFsUHJlU3RhdGUgPSBzdGF0ZS5wcmU7XG4gICAgICBpZiAoZWwucHJlKSB7XG4gICAgICAgICAgc3RhdGUucHJlID0gZWwucHJlO1xuICAgICAgfVxuICAgICAgc3RhdGUuc3RhdGljUmVuZGVyRm5zLnB1c2goXCJ3aXRoKHRoaXMpe3JldHVybiBcIi5jb25jYXQoZ2VuRWxlbWVudChlbCwgc3RhdGUpLCBcIn1cIikpO1xuICAgICAgc3RhdGUucHJlID0gb3JpZ2luYWxQcmVTdGF0ZTtcbiAgICAgIHJldHVybiBcIl9tKFwiLmNvbmNhdChzdGF0ZS5zdGF0aWNSZW5kZXJGbnMubGVuZ3RoIC0gMSkuY29uY2F0KGVsLnN0YXRpY0luRm9yID8gJyx0cnVlJyA6ICcnLCBcIilcIik7XG4gIH1cbiAgLy8gdi1vbmNlXG4gIGZ1bmN0aW9uIGdlbk9uY2UoZWwsIHN0YXRlKSB7XG4gICAgICBlbC5vbmNlUHJvY2Vzc2VkID0gdHJ1ZTtcbiAgICAgIGlmIChlbC5pZiAmJiAhZWwuaWZQcm9jZXNzZWQpIHtcbiAgICAgICAgICByZXR1cm4gZ2VuSWYoZWwsIHN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGVsLnN0YXRpY0luRm9yKSB7XG4gICAgICAgICAgdmFyIGtleSA9ICcnO1xuICAgICAgICAgIHZhciBwYXJlbnRfMSA9IGVsLnBhcmVudDtcbiAgICAgICAgICB3aGlsZSAocGFyZW50XzEpIHtcbiAgICAgICAgICAgICAgaWYgKHBhcmVudF8xLmZvcikge1xuICAgICAgICAgICAgICAgICAga2V5ID0gcGFyZW50XzEua2V5O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcGFyZW50XzEgPSBwYXJlbnRfMS5wYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICAgIHN0YXRlLndhcm4oXCJ2LW9uY2UgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgdi1mb3IgdGhhdCBpcyBrZXllZC4gXCIsIGVsLnJhd0F0dHJzTWFwWyd2LW9uY2UnXSk7XG4gICAgICAgICAgICAgIHJldHVybiBnZW5FbGVtZW50KGVsLCBzdGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBcIl9vKFwiLmNvbmNhdChnZW5FbGVtZW50KGVsLCBzdGF0ZSksIFwiLFwiKS5jb25jYXQoc3RhdGUub25jZUlkKyssIFwiLFwiKS5jb25jYXQoa2V5LCBcIilcIik7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZ2VuU3RhdGljKGVsLCBzdGF0ZSk7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZ2VuSWYoZWwsIHN0YXRlLCBhbHRHZW4sIGFsdEVtcHR5KSB7XG4gICAgICBlbC5pZlByb2Nlc3NlZCA9IHRydWU7IC8vIGF2b2lkIHJlY3Vyc2lvblxuICAgICAgcmV0dXJuIGdlbklmQ29uZGl0aW9ucyhlbC5pZkNvbmRpdGlvbnMuc2xpY2UoKSwgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpO1xuICB9XG4gIGZ1bmN0aW9uIGdlbklmQ29uZGl0aW9ucyhjb25kaXRpb25zLCBzdGF0ZSwgYWx0R2VuLCBhbHRFbXB0eSkge1xuICAgICAgaWYgKCFjb25kaXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBhbHRFbXB0eSB8fCAnX2UoKSc7XG4gICAgICB9XG4gICAgICB2Y
3XIgY29uZGl0aW9uID0gY29uZGl0aW9ucy5zaGlmdCgpO1xuICAgICAgaWYgKGNvbmRpdGlvbi5leHApIHtcbiAgICAgICAgICByZXR1cm4gXCIoXCIuY29uY2F0KGNvbmRpdGlvbi5leHAsIFwiKT9cIikuY29uY2F0KGdlblRlcm5hcnlFeHAoY29uZGl0aW9uLmJsb2NrKSwgXCI6XCIpLmNvbmNhdChnZW5JZkNvbmRpdGlvbnMoY29uZGl0aW9ucywgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChnZW5UZXJuYXJ5RXhwKGNvbmRpdGlvbi5ibG9jaykpO1xuICAgICAgfVxuICAgICAgLy8gdi1pZiB3aXRoIHYtb25jZSBzaG91bGQgZ2VuZXJhdGUgY29kZSBsaWtlIChhKT9fbSgwKTpfbSgxKVxuICAgICAgZnVuY3Rpb24gZ2VuVGVybmFyeUV4cChlbCkge1xuICAgICAgICAgIHJldHVybiBhbHRHZW5cbiAgICAgICAgICAgICAgPyBhbHRHZW4oZWwsIHN0YXRlKVxuICAgICAgICAgICAgICA6IGVsLm9uY2VcbiAgICAgICAgICAgICAgICAgID8gZ2VuT25jZShlbCwgc3RhdGUpXG4gICAgICAgICAgICAgICAgICA6IGdlbkVsZW1lbnQoZWwsIHN0YXRlKTtcbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBnZW5Gb3IoZWwsIHN0YXRlLCBhbHRHZW4sIGFsdEhlbHBlcikge1xuICAgICAgdmFyIGV4cCA9IGVsLmZvcjtcbiAgICAgIHZhciBhbGlhcyA9IGVsLmFsaWFzO1xuICAgICAgdmFyIGl0ZXJhdG9yMSA9IGVsLml0ZXJhdG9yMSA/IFwiLFwiLmNvbmNhdChlbC5pdGVyYXRvcjEpIDogJyc7XG4gICAgICB2Y
3XIgaXRlcmF0b3IyID0gZWwuaXRlcmF0b3IyID8gXCIsXCIuY29uY2F0KGVsLml0ZXJhdG9yMikgOiAnJztcbiAgICAgIGlmIChzdGF0ZS5tYXliZUNvbXBvbmVudChlbCkgJiZcbiAgICAgICAgICBlbC50YWcgIT09ICdzbG90JyAmJlxuICAgICAgICAgIGVsLnRhZyAhPT0gJ3RlbXBsYXRlJyAmJlxuICAgICAgICAgICFlbC5rZXkpIHtcbiAgICAgICAgICBzdGF0ZS53YXJuKFwiPFwiLmNvbmNhdChlbC50YWcsIFwiIHYtZm9yPVxcXCJcIikuY29uY2F0KGFsaWFzLCBcIiBpbiBcIikuY29uY2F0KGV4cCwgXCJcXFwiPjogY29tcG9uZW50IGxpc3RzIHJlbmRlcmVkIHdpdGggXCIpICtcbiAgICAgICAgICAgICAgXCJ2LWZvciBzaG91bGQgaGF2ZSBleHBsaWNpdCBrZXlzLiBcIiArXG4gICAgICAgICAgICAgIFwiU2VlIGh0dHBzOi8vdjIudnVlanMub3JnL3YyL2d1aWRlL2xpc3QuaHRtbCNrZXkgZm9yIG1vcmUgaW5mby5cIiwgZWwucmF3QXR0cnNNYXBbJ3YtZm9yJ10sIHRydWUgLyogdGlwICovKTtcbiAgICAgIH1cbiAgICAgIGVsLmZvclByb2Nlc3NlZCA9IHRydWU7IC8vIGF2b2lkIHJlY3Vyc2lvblxuICAgICAgcmV0dXJuIChcIlwiLmNvbmNhdChhbHRIZWxwZXIgfHwgJ19sJywgXCIoKFwiKS5jb25jYXQoZXhwLCBcIiksXCIpICtcbiAgICAgICAgICBcImZ1bmN0aW9uKFwiLmNvbmNhdChhbGlhcykuY29uY2F0KGl0ZXJhdG9yMSkuY29uY2F0KGl0ZXJhdG9yMiwgXCIpe1wiKSArXG4gICAgICAgICAgXCJyZXR1cm4gXCIuY29uY2F0KChhbHRHZW4gfHwgZ2VuRWxlbWVudCkoZWwsIHN0YXRlKSkgK1xuICAgICAgICAgICd9KScpO1xuICB9XG4gIGZ1bmN0aW9uIGdlbkRhdGEoZWwsIHN0YXRlKSB7XG4gICAgICB2Y
3XIgZGF0YSA9ICd7JztcbiAgICAgIC8vIGRpcmVjdGl2ZXMgZmlyc3QuXG4gICAgICAvLyBkaXJlY3RpdmVzIG1heSBtdXRhdGUgdGhlIGVsJ3Mgb3RoZXIgcHJvcGVydGllcyBiZWZvcmUgdGhleSBhcmUgZ2VuZXJhdGVkLlxuICAgICAgdmFyIGRpcnMgPSBnZW5EaXJlY3RpdmVzKGVsLCBzdGF0ZSk7XG4gICAgICBpZiAoZGlycylcbiAgICAgICAgICBkYXRhICs9IGRpcnMgKyAnLCc7XG4gICAgICAvLyBrZXlcbiAgICAgIGlmIChlbC5rZXkpIHtcbiAgICAgICAgICBkYXRhICs9IFwia2V5OlwiLmNvbmNhdChlbC5rZXksIFwiLFwiKTtcbiAgICAgIH1cbiAgICAgIC8vIHJlZlxuICAgICAgaWYgKGVsLnJlZikge1xuICAgICAgICAgIGRhdGEgKz0gXCJyZWY6XCIuY29uY2F0KGVsLnJlZiwgXCIsXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGVsLnJlZkluRm9yKSB7XG4gICAgICAgICAgZGF0YSArPSBcInJlZkluRm9yOnRydWUsXCI7XG4gICAgICB9XG4gICAgICAvLyBwcmVcbiAgICAgIGlmIChlbC5wcmUpIHtcbiAgICAgICAgICBkYXRhICs9IFwicHJlOnRydWUsXCI7XG4gICAgICB9XG4gICAgICAvLyByZWNvcmQgb3JpZ2luYWwgdGFnIG5hbWUgZm9yIGNvbXBvbmVudHMgdXNpbmcgXCJpc1wiIGF0dHJpYnV0ZVxuICAgICAgaWYgKGVsLmNvbXBvbmVudCkge1xuICAgICAgICAgIGRhdGEgKz0gXCJ0YWc6XFxcIlwiLmNvbmNhdChlbC50YWcsIFwiXFxcIixcIik7XG4gICAgICB9XG4gICAgICAvLyBtb2R1bGUgZGF0YSBnZW5lcmF0aW9uIGZ1bmN0aW9uc1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5kYXRhR2VuRm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZGF0YSArPSBzdGF0ZS5kYXRhR2VuRm5zW2ldKGVsKTtcbiAgICAgIH1cbiAgICAgIC8vIGF0dHJpYnV0ZXNcbiAgICAgIGlmIChlbC5hdHRycykge1xuICAgICAgICAgIGRhdGEgKz0gXCJhdHRyczpcIi5jb25jYXQoZ2VuUHJvcHMoZWwuYXR0cnMpLCBcIixcIik7XG4gICAgICB9XG4gICAgICAvLyBET00gcHJvcHNcbiAgICAgIGlmIChlbC5wcm9wcykge1xuICAgICAgICAgIGRhdGEgKz0gXCJkb21Qcm9wczpcIi5jb25jYXQoZ2VuUHJvcHMoZWwucHJvcHMpLCBcIixcIik7XG4gICAgICB9XG4gICAgICAvLyBldmVudCBoYW5kbGVyc1xuICAgICAgaWYgKGVsLmV2ZW50cykge1xuICAgICAgICAgIGRhdGEgKz0gXCJcIi5jb25jYXQoZ2VuSGFuZGxlcnMoZWwuZXZlbnRzLCBmYWxzZSksIFwiLFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbC5uYXRpdmVFdmVudHMpIHtcbiAgICAgICAgICBkYXRhICs9IFwiXCIuY29uY2F0KGdlbkhhbmRsZXJzKGVsLm5hdGl2ZUV2ZW50cywgdHJ1ZSksIFwiLFwiKTtcbiAgICAgIH1cbiAgICAgIC8vIHNsb3QgdGFyZ2V0XG4gICAgICAvLyBvbmx5IGZvciBub24tc2NvcGVkIHNsb3RzXG4gICAgICBpZiAoZWwuc2xvdFRhcmdldCAmJiAhZWwuc2xvdFNjb3BlKSB7XG4gICAgICAgICAgZGF0YSArPSBcInNsb3Q6XCIuY29uY2F0KGVsLnNsb3RUYXJnZXQsIFwiLFwiKTtcbiAgICAgIH1cbiAgICAgIC8vIHNjb3BlZCBzbG90c1xuICAgICAgaWYgKGVsLnNjb3BlZFNsb3RzKSB7XG4gICAgICAgICAgZGF0YSArPSBcIlwiLmNvbmNhdChnZW5TY29wZWRTbG90cyhlbCwgZWwuc2NvcGVkU2xvdHMsIHN0YXRlKSwgXCIsXCIpO1xuICAgICAgfVxuICAgICAgLy8gY29tcG9uZW50IHYtbW9kZWxcbiAgICAgIGlmIChlbC5tb2RlbCkge1xuICAgICAgICAgIGRhdGEgKz0gXCJtb2RlbDp7dmFsdWU6XCIuY29uY2F0KGVsLm1vZGVsLnZhbHVlLCBcIixjYWxsYmFjazpcIikuY29uY2F0KGVsLm1vZGVsLmNhbGxiYWNrLCBcIixleHByZXNzaW9uOlwiKS5jb25jYXQoZWwubW9kZWwuZXhwcmVzc2lvbiwgXCJ9LFwiKTtcbiAgICAgIH1cbiAgICAgIC8vIGlubGluZS10ZW1wbGF0ZVxuICAgICAgaWYgKGVsLmlubGluZVRlbXBsYXRlKSB7XG4gICAgICAgICAgdmFyIGlubGluZVRlbXBsYXRlID0gZ2VuSW5saW5lVGVtcGxhdGUoZWwsIHN0YXRlKTtcbiAgICAgICAgICBpZiAoaW5saW5lVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgZGF0YSArPSBcIlwiLmNvbmNhdChpbmxpbmVUZW1wbGF0ZSwgXCIsXCIpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoLywkLywgJycpICsgJ30nO1xuICAgICAgLy8gdi1iaW5kIGR5bmFtaWMgYXJndW1lbnQgd3JhcFxuICAgICAgLy8gdi1iaW5kIHdpdGggZHluYW1pYyBhcmd1bWVudHMgbXVzdCBiZSBhcHBsaWVkIHVzaW5nIHRoZSBzYW1lIHYtYmluZCBvYmplY3RcbiAgICAgIC8vIG1lcmdlIGhlbHBlciBzbyB0aGF0IGNsYXNzL3N0eWxlL211c3RVc2VQcm9wIGF0dHJzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS5cbiAgICAgIGlmIChlbC5keW5hbWljQXR0cnMpIHtcbiAgICAgICAgICBkYXRhID0gXCJfYihcIi5jb25jYXQoZGF0YSwgXCIsXFxcIlwiKS5jb25jYXQoZWwudGFnLCBcIlxcXCIsXCIpLmNvbmNhdChnZW5Qcm9wcyhlbC5keW5hbWljQXR0cnMpLCBcIilcIik7XG4gICAgICB9XG4gICAgICAvLyB2LWJpbmQgZGF0YSB3cmFwXG4gICAgICBpZiAoZWwud3JhcERhdGEpIHtcbiAgICAgICAgICBkYXRhID0gZWwud3JhcERhdGEoZGF0YSk7XG4gICAgICB9XG4gICAgICAvLyB2LW9uIGRhdGEgd3JhcFxuICAgICAgaWYgKGVsLndyYXBMaXN0ZW5lcnMpIHtcbiAgICAgICAgICBkYXRhID0gZWwud3JhcExpc3RlbmVycyhkYXRhKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGZ1bmN0aW9uIGdlbkRpcmVjdGl2ZXMoZWwsIHN0YXRlKSB7XG4gICAgICB2Y
3XIgZGlycyA9IGVsLmRpcmVjdGl2ZXM7XG4gICAgICBpZiAoIWRpcnMpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgdmFyIHJlcyA9ICdkaXJlY3RpdmVzOlsnO1xuICAgICAgdmFyIGhhc1J1bnRpbWUgPSBmYWxzZTtcbiAgICAgIHZhciBpLCBsLCBkaXIsIG5lZWRSdW50aW1lO1xuICAgICAgZm9yIChpID0gMCwgbCA9IGRpcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgZGlyID0gZGlyc1tpXTtcbiAgICAgICAgICBuZWVkUnVudGltZSA9IHRydWU7XG4gICAgICAgICAgdmFyIGdlbiA9IHN0YXRlLmRpcmVjdGl2ZXNbZGlyLm5hbWVdO1xuICAgICAgICAgIGlmIChnZW4pIHtcbiAgICAgICAgICAgICAgLy8gY29tcGlsZS10aW1lIGRpcmVjdGl2ZSB0aGF0IG1hbmlwdWxhdGVzIEFTVC5cbiAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlIGlmIGl0IGFsc28gbmVlZHMgYSBydW50aW1lIGNvdW50ZXJwYXJ0LlxuICAgICAgICAgICAgICBuZWVkUnVudGltZSA9ICEhZ2VuKGVsLCBkaXIsIHN0YXRlLndhcm4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobmVlZFJ1bnRpbWUpIHtcbiAgICAgICAgICAgICAgaGFzUnVudGltZSA9IHRydWU7XG4gICAgICAgICAgICAgIHJlcyArPSBcIntuYW1lOlxcXCJcIi5jb25jYXQoZGlyLm5hbWUsIFwiXFxcIixyYXdOYW1lOlxcXCJcIikuY29uY2F0KGRpci5yYXdOYW1lLCBcIlxcXCJcIikuY29uY2F0KGRpci52YWx1ZVxuICAgICAgICAgICAgICAgICAgPyBcIix2YWx1ZTooXCIuY29uY2F0KGRpci52YWx1ZSwgXCIpLGV4cHJlc3Npb246XCIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShkaXIudmFsdWUpKVxuICAgICAgICAgICAgICAgICAgOiAnJykuY29uY2F0KGRpci5hcmcgPyBcIixhcmc6XCIuY29uY2F0KGRpci5pc0R5bmFtaWNBcmcgPyBkaXIuYXJnIDogXCJcXFwiXCIuY29uY2F0KGRpci5hcmcsIFwiXFxcIlwiKSkgOiAnJykuY29uY2F0KGRpci5tb2RpZmllcnMgPyBcIixtb2RpZmllcnM6XCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGRpci5tb2RpZmllcnMpKSA6ICcnLCBcIn0sXCIpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChoYXNSdW50aW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHJlcy5zbGljZSgwLCAtMSkgKyAnXSc7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZ2VuSW5saW5lVGVtcGxhdGUoZWwsIHN0YXRlKSB7XG4gICAgICB2Y
3XIgYXN0ID0gZWwuY2hpbGRyZW5bMF07XG4gICAgICBpZiAoKGVsLmNoaWxkcmVuLmxlbmd0aCAhPT0gMSB8fCBhc3QudHlwZSAhPT0gMSkpIHtcbiAgICAgICAgICBzdGF0ZS53YXJuKCdJbmxpbmUtdGVtcGxhdGUgY29tcG9uZW50cyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgY2hpbGQgZWxlbWVudC4nLCB7IHN0YXJ0OiBlbC5zdGFydCB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChhc3QgJiYgYXN0LnR5cGUgPT09IDEpIHtcbiAgICAgICAgICB2YXIgaW5saW5lUmVuZGVyRm5zID0gZ2VuZXJhdGUoYXN0LCBzdGF0ZS5vcHRpb25zKTtcbiAgICAgICAgICByZXR1cm4gXCJpbmxpbmVUZW1wbGF0ZTp7cmVuZGVyOmZ1bmN0aW9uKCl7XCIuY29uY2F0KGlubGluZVJlbmRlckZucy5yZW5kZXIsIFwifSxzdGF0aWNSZW5kZXJGbnM6W1wiKS5jb25jYXQoaW5saW5lUmVuZGVyRm5zLnN0YXRpY1JlbmRlckZuc1xuICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChjb2RlKSB7IHJldHVybiBcImZ1bmN0aW9uKCl7XCIuY29uY2F0KGNvZGUsIFwifVwiKTsgfSlcbiAgICAgICAgICAgICAgLmpvaW4oJywnKSwgXCJdfVwiKTtcbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBnZW5TY29wZWRTbG90cyhlbCwgc2xvdHMsIHN0YXRlKSB7XG4gICAgICAvLyBieSBkZWZhdWx0IHNjb3BlZCBzbG90cyBhcmUgY29uc2lkZXJlZCBcInN0YWJsZVwiLCB0aGlzIGFsbG93cyBjaGlsZFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIG9ubHkgc2NvcGVkIHNsb3RzIHRvIHNraXAgZm9yY2VkIHVwZGF0ZXMgZnJvbSBwYXJlbnQuXG4gICAgICAvLyBidXQgaW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGJhaWwtb3V0IG9mIHRoaXMgb3B0aW1pemF0aW9uXG4gICAgICAvLyBmb3IgZXhhbXBsZSBpZiB0aGUgc2xvdCBjb250YWlucyBkeW5hbWljIG5hbWVzLCBoYXMgdi1pZiBvciB2LWZvciBvbiB0aGVtLi4uXG4gICAgICB2Y
3XIgbmVlZHNGb3JjZVVwZGF0ZSA9IGVsLmZvciB8fFxuICAgICAgICAgIE9iamVjdC5rZXlzKHNsb3RzKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgdmFyIHNsb3QgPSBzbG90c1trZXldO1xuICAgICAgICAgICAgICByZXR1cm4gKHNsb3Quc2xvdFRhcmdldER5bmFtaWMgfHwgc2xvdC5pZiB8fCBzbG90LmZvciB8fCBjb250YWluc1Nsb3RDaGlsZChzbG90KSAvLyBpcyBwYXNzaW5nIGRvd24gc2xvdCBmcm9tIHBhcmVudCB3aGljaCBtYXkgYmUgZHluYW1pY1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgLy8gIzk1MzQ6IGlmIGEgY29tcG9uZW50IHdpdGggc2NvcGVkIHNsb3RzIGlzIGluc2lkZSBhIGNvbmRpdGlvbmFsIGJyYW5jaCxcbiAgICAgIC8vIGl0J3MgcG9zc2libGUgZm9yIHRoZSBzYW1lIGNvbXBvbmVudCB0byBiZSByZXVzZWQgYnV0IHdpdGggZGlmZmVyZW50XG4gICAgICAvLyBjb21waWxlZCBzbG90IGNvbnRlbnQuIFRvIGF2b2lkIHRoYXQsIHdlIGdlbmVyYXRlIGEgdW5pcXVlIGtleSBiYXNlZCBvblxuICAgICAgLy8gdGhlIGdlbmVyYXRlZCBjb2RlIG9mIGFsbCB0aGUgc2xvdCBjb250ZW50cy5cbiAgICAgIHZhciBuZWVkc0tleSA9ICEhZWwuaWY7XG4gICAgICAvLyBPUiB3aGVuIGl0IGlzIGluc2lkZSBhbm90aGVyIHNjb3BlZCBzbG90IG9yIHYtZm9yICh0aGUgcmVhY3Rpdml0eSBtYXkgYmVcbiAgICAgIC8vIGRpc2Nvbm5lY3RlZCBkdWUgdG8gdGhlIGludGVybWVkaWF0ZSBzY29wZSB2YXJpYWJsZSlcbiAgICAgIC8vICM5NDM4LCAjOTUwNlxuICAgICAgLy8gVE9ETzogdGhpcyBjYW4gYmUgZnVydGhlciBvcHRpbWl6ZWQgYnkgcHJvcGVybHkgYW5hbHl6aW5nIGluLXNjb3BlIGJpbmRpbmdzXG4gICAgICAvLyBhbmQgc2tpcCBmb3JjZSB1cGRhdGluZyBvbmVzIHRoYXQgZG8gbm90IGFjdHVhbGx5IHVzZSBzY29wZSB2YXJpYWJsZXMuXG4gICAgICBpZiAoIW5lZWRzRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgICB2Y
3XIgcGFyZW50XzIgPSBlbC5wYXJlbnQ7XG4gICAgICAgICAgd2hpbGUgKHBhcmVudF8yKSB7XG4gICAgICAgICAgICAgIGlmICgocGFyZW50XzIuc2xvdFNjb3BlICYmIHBhcmVudF8yLnNsb3RTY29wZSAhPT0gZW1wdHlTbG90U2NvcGVUb2tlbikgfHxcbiAgICAgICAgICAgICAgICAgIHBhcmVudF8yLmZvcikge1xuICAgICAgICAgICAgICAgICAgbmVlZHNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocGFyZW50XzIuaWYpIHtcbiAgICAgICAgICAgICAgICAgIG5lZWRzS2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwYXJlbnRfMiA9IHBhcmVudF8yLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZ2VuZXJhdGVkU2xvdHMgPSBPYmplY3Qua2V5cyhzbG90cylcbiAgICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGdlblNjb3BlZFNsb3Qoc2xvdHNba2V5XSwgc3RhdGUpOyB9KVxuICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgICByZXR1cm4gXCJzY29wZWRTbG90czpfdShbXCIuY29uY2F0KGdlbmVyYXRlZFNsb3RzLCBcIl1cIikuY29uY2F0KG5lZWRzRm9yY2VVcGRhdGUgPyBcIixudWxsLHRydWVcIiA6IFwiXCIpLmNvbmNhdCghbmVlZHNGb3JjZVVwZGF0ZSAmJiBuZWVkc0tleSA/IFwiLG51bGwsZmFsc2UsXCIuY29uY2F0KGhhc2goZ2VuZXJhdGVkU2xvdHMpKSA6IFwiXCIsIFwiKVwiKTtcbiAgfVxuICBmdW5jdGlvbiBoYXNoKHN0cikge1xuICAgICAgdmFyIGhhc2ggPSA1MzgxO1xuICAgICAgdmFyIGkgPSBzdHIubGVuZ3RoO1xuICAgICAgd2hpbGUgKGkpIHtcbiAgICAgICAgICBoYXNoID0gKGhhc2ggKiAzMykgXiBzdHIuY2hhckNvZGVBdCgtLWkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc2ggPj4+IDA7XG4gIH1cbiAgZnVuY3Rpb24gY29udGFpbnNTbG90Q2hpbGQoZWwpIHtcbiAgICAgIGlmIChlbC50eXBlID09PSAxKSB7XG4gICAgICAgICAgaWYgKGVsLnRhZyA9PT0gJ3Nsb3QnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZWwuY2hpbGRyZW4uc29tZShjb250YWluc1Nsb3RDaGlsZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZnVuY3Rpb24gZ2VuU2NvcGVkU2xvdChlbCwgc3RhdGUpIHtcbiAgICAgIHZhciBpc0xlZ2FjeVN5bnRheCA9IGVsLmF0dHJzTWFwWydzbG90LXNjb3BlJ107XG4gICAgICBpZiAoZWwuaWYgJiYgIWVsLmlmUHJvY2Vzc2VkICYmICFpc0xlZ2FjeVN5bnRheCkge1xuICAgICAgICAgIHJldHVybiBnZW5JZihlbCwgc3RhdGUsIGdlblNjb3BlZFNsb3QsIFwibnVsbFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbC5mb3IgJiYgIWVsLmZvclByb2Nlc3NlZCkge1xuICAgICAgICAgIHJldHVybiBnZW5Gb3IoZWwsIHN0YXRlLCBnZW5TY29wZWRTbG90KTtcbiAgICAgIH1cbiAgICAgIHZhciBzbG90U2NvcGUgPSBlbC5zbG90U2NvcGUgPT09IGVtcHR5U2xvdFNjb3BlVG9rZW4gPyBcIlwiIDogU3RyaW5nKGVsLnNsb3RTY29wZSk7XG4gICAgICB2Y
3XIgZm4gPSBcImZ1bmN0aW9uKFwiLmNvbmNhdChzbG90U2NvcGUsIFwiKXtcIikgK1xuICAgICAgICAgIFwicmV0dXJuIFwiLmNvbmNhdChlbC50YWcgPT09ICd0ZW1wbGF0ZSdcbiAgICAgICAgICAgICAgPyBlbC5pZiAmJiBpc0xlZ2FjeVN5bnRheFxuICAgICAgICAgICAgICAgICAgPyBcIihcIi5jb25jYXQoZWwuaWYsIFwiKT9cIikuY29uY2F0KGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSkgfHwgJ3VuZGVmaW5lZCcsIFwiOnVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgICAgOiBnZW5DaGlsZHJlbihlbCwgc3RhdGUpIHx8ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgIDogZ2VuRWxlbWVudChlbCwgc3RhdGUpLCBcIn1cIik7XG4gICAgICAvLyByZXZlcnNlIHByb3h5IHYtc2xvdCB3aXRob3V0IHNjb3BlIG9uIHRoaXMuJHNsb3RzXG4gICAgICB2YXIgcmV2ZXJzZVByb3h5ID0gc2xvdFNjb3BlID8gXCJcIiA6IFwiLHByb3h5OnRydWVcIjtcbiAgICAgIHJldHVybiBcIntrZXk6XCIuY29uY2F0KGVsLnNsb3RUYXJnZXQgfHwgXCJcXFwiZGVmYXVsdFxcXCJcIiwgXCIsZm46XCIpLmNvbmNhdChmbikuY29uY2F0KHJldmVyc2VQcm94eSwgXCJ9XCIpO1xuICB9XG4gIGZ1bmN0aW9uIGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgY2hlY2tTa2lwLCBhbHRHZW5FbGVtZW50LCBhbHRHZW5Ob2RlKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBlbC5jaGlsZHJlbjtcbiAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgZWxfMSA9IGNoaWxkcmVuWzBdO1xuICAgICAgICAgIC8vIG9wdGltaXplIHNpbmdsZSB2LWZvclxuICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgZWxfMS5mb3IgJiZcbiAgICAgICAgICAgICAgZWxfMS50YWcgIT09ICd0ZW1wbGF0ZScgJiZcbiAgICAgICAgICAgICAgZWxfMS50YWcgIT09ICdzbG90Jykge1xuICAgICAgICAgICAgICB2Y
3XIgbm9ybWFsaXphdGlvblR5cGVfMSA9IGNoZWNrU2tpcFxuICAgICAgICAgICAgICAgICAgPyBzdGF0ZS5tYXliZUNvbXBvbmVudChlbF8xKVxuICAgICAgICAgICAgICAgICAgICAgID8gXCIsMVwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcIiwwXCJcbiAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KChhbHRHZW5FbGVtZW50IHx8IGdlbkVsZW1lbnQpKGVsXzEsIHN0YXRlKSkuY29uY2F0KG5vcm1hbGl6YXRpb25UeXBlXzEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgbm9ybWFsaXphdGlvblR5cGUgPSBjaGVja1NraXBcbiAgICAgICAgICAgICAgPyBnZXROb3JtYWxpemF0aW9uVHlwZShjaGlsZHJlbiwgc3RhdGUubWF5YmVDb21wb25lbnQpXG4gICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICB2YXIgZ2VuXzEgPSBhbHRHZW5Ob2RlIHx8IGdlbk5vZGU7XG4gICAgICAgICAgcmV0dXJuIFwiW1wiLmNvbmNhdChjaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGdlbl8xKGMsIHN0YXRlKTsgfSkuam9pbignLCcpLCBcIl1cIikuY29uY2F0KG5vcm1hbGl6YXRpb25UeXBlID8gXCIsXCIuY29uY2F0KG5vcm1hbGl6YXRpb25UeXBlKSA6ICcnKTtcbiAgICAgIH1cbiAgfVxuICAvLyBkZXRlcm1pbmUgdGhlIG5vcm1hbGl6YXRpb24gbmVlZGVkIGZvciB0aGUgY2hpbGRyZW4gYXJyYXkuXG4gIC8vIDA6IG5vIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gIC8vIDE6IHNpbXBsZSBub3JtYWxpemF0aW9uIG5lZWRlZCAocG9zc2libGUgMS1sZXZlbCBkZWVwIG5lc3RlZCBhcnJheSlcbiAgLy8gMjogZnVsbCBub3JtYWxpemF0aW9uIG5lZWRlZFxuICBmdW5jdGlvbiBnZXROb3JtYWxpemF0aW9uVHlwZShjaGlsZHJlbiwgbWF5YmVDb21wb25lbnQpIHtcbiAgICAgIHZhciByZXMgPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBlbCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICAgIGlmIChlbC50eXBlICE9PSAxKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobmVlZHNOb3JtYWxpemF0aW9uKGVsKSB8fFxuICAgICAgICAgICAgICAoZWwuaWZDb25kaXRpb25zICYmXG4gICAgICAgICAgICAgICAgICBlbC5pZkNvbmRpdGlvbnMuc29tZShmdW5jdGlvbiAoYykgeyByZXR1cm4gbmVlZHNOb3JtYWxpemF0aW9uKGMuYmxvY2spOyB9KSkpIHtcbiAgICAgICAgICAgICAgcmVzID0gMjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXliZUNvbXBvbmVudChlbCkgfHxcbiAgICAgICAgICAgICAgKGVsLmlmQ29uZGl0aW9ucyAmJiBlbC5pZkNvbmRpdGlvbnMuc29tZShmdW5jdGlvbiAoYykgeyByZXR1cm4gbWF5YmVDb21wb25lbnQoYy5ibG9jayk7IH0pKSkge1xuICAgICAgICAgICAgICByZXMgPSAxO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gIH1cbiAgZnVuY3Rpb24gbmVlZHNOb3JtYWxpemF0aW9uKGVsKSB7XG4gICAgICByZXR1cm4gZWwuZm9yICE9PSB1bmRlZmluZWQgfHwgZWwudGFnID09PSAndGVtcGxhdGUnIHx8IGVsLnRhZyA9PT0gJ3Nsb3QnO1xuICB9XG4gIGZ1bmN0aW9uIGdlbk5vZGUobm9kZSwgc3RhdGUpIHtcbiAgICAgIGlmIChub2RlLnR5cGUgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gZ2VuRWxlbWVudChub2RlLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChub2RlLnR5cGUgPT09IDMgJiYgbm9kZS5pc0NvbW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4gZ2VuQ29tbWVudChub2RlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiBnZW5UZXh0KG5vZGUpO1xuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdlblRleHQodGV4dCkge1xuICAgICAgcmV0dXJuIFwiX3YoXCIuY29uY2F0KHRleHQudHlwZSA9PT0gMlxuICAgICAgICAgID8gdGV4dC5leHByZXNzaW9uIC8vIG5vIG5lZWQgZm9yICgpIGJlY2F1c2UgYWxyZWFkeSB3cmFwcGVkIGluIF9zKClcbiAgICAgICAgICA6IHRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyhKU09OLnN0cmluZ2lmeSh0ZXh0LnRleHQpKSwgXCIpXCIpO1xuICB9XG4gIGZ1bmN0aW9uIGdlbkNvbW1lbnQoY29tbWVudCkge1xuICAgICAgcmV0dXJuIFwiX2UoXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGNvbW1lbnQudGV4dCksIFwiKVwiKTtcbiAgfVxuICBmdW5jdGlvbiBnZW5TbG90KGVsLCBzdGF0ZSkge1xuICAgICAgdmFyIHNsb3ROYW1lID0gZWwuc2xvdE5hbWUgfHwgJ1wiZGVmYXVsdFwiJztcbiAgICAgIHZhciBjaGlsZHJlbiA9IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSk7XG4gICAgICB2Y
3XIgcmVzID0gXCJfdChcIi5jb25jYXQoc2xvdE5hbWUpLmNvbmNhdChjaGlsZHJlbiA/IFwiLGZ1bmN0aW9uKCl7cmV0dXJuIFwiLmNvbmNhdChjaGlsZHJlbiwgXCJ9XCIpIDogJycpO1xuICAgICAgdmFyIGF0dHJzID0gZWwuYXR0cnMgfHwgZWwuZHluYW1pY0F0dHJzXG4gICAgICAgICAgPyBnZW5Qcm9wcygoZWwuYXR0cnMgfHwgW10pLmNvbmNhdChlbC5keW5hbWljQXR0cnMgfHwgW10pLm1hcChmdW5jdGlvbiAoYXR0cikgeyByZXR1cm4gKHtcbiAgICAgICAgICAgICAgLy8gc2xvdCBwcm9wcyBhcmUgY2FtZWxpemVkXG4gICAgICAgICAgICAgIG5hbWU6IGNhbWVsaXplKGF0dHIubmFtZSksXG4gICAgICAgICAgICAgIHZhbHVlOiBhdHRyLnZhbHVlLFxuICAgICAgICAgICAgICBkeW5hbWljOiBhdHRyLmR5bmFtaWNcbiAgICAgICAgICB9KTsgfSkpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgdmFyIGJpbmQgPSBlbC5hdHRyc01hcFsndi1iaW5kJ107XG4gICAgICBpZiAoKGF0dHJzIHx8IGJpbmQpICYmICFjaGlsZHJlbikge1xuICAgICAgICAgIHJlcyArPSBcIixudWxsXCI7XG4gICAgICB9XG4gICAgICBpZiAoYXR0cnMpIHtcbiAgICAgICAgICByZXMgKz0gXCIsXCIuY29uY2F0KGF0dHJzKTtcbiAgICAgIH1cbiAgICAgIGlmIChiaW5kKSB7XG4gICAgICAgICAgcmVzICs9IFwiXCIuY29uY2F0KGF0dHJzID8gJycgOiAnLG51bGwnLCBcIixcIikuY29uY2F0KGJpbmQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcyArICcpJztcbiAgfVxuICAvLyBjb21wb25lbnROYW1lIGlzIGVsLmNvbXBvbmVudCwgdGFrZSBpdCBhcyBhcmd1bWVudCB0byBzaHVuIGZsb3cncyBwZXNzaW1pc3RpYyByZWZpbmVtZW50XG4gIGZ1bmN0aW9uIGdlbkNvbXBvbmVudChjb21wb25lbnROYW1lLCBlbCwgc3RhdGUpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gICAgICByZXR1cm4gXCJfYyhcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIsXCIpLmNvbmNhdChnZW5EYXRhKGVsLCBzdGF0ZSkpLmNvbmNhdChjaGlsZHJlbiA/IFwiLFwiLmNvbmNhdChjaGlsZHJlbikgOiAnJywgXCIpXCIpO1xuICB9XG4gIGZ1bmN0aW9uIGdlblByb3BzKHByb3BzKSB7XG4gICAgICB2Y
3XIgc3RhdGljUHJvcHMgPSBcIlwiO1xuICAgICAgdmFyIGR5bmFtaWNQcm9wcyA9IFwiXCI7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgICAgICB2YXIgdmFsdWUgPSB0cmFuc2Zvcm1TcGVjaWFsTmV3bGluZXMocHJvcC52YWx1ZSk7XG4gICAgICAgICAgaWYgKHByb3AuZHluYW1pYykge1xuICAgICAgICAgICAgICBkeW5hbWljUHJvcHMgKz0gXCJcIi5jb25jYXQocHJvcC5uYW1lLCBcIixcIikuY29uY2F0KHZhbHVlLCBcIixcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBzdGF0aWNQcm9wcyArPSBcIlxcXCJcIi5jb25jYXQocHJvcC5uYW1lLCBcIlxcXCI6XCIpLmNvbmNhdCh2YWx1ZSwgXCIsXCIpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YXRpY1Byb3BzID0gXCJ7XCIuY29uY2F0KHN0YXRpY1Byb3BzLnNsaWNlKDAsIC0xKSwgXCJ9XCIpO1xuICAgICAgaWYgKGR5bmFtaWNQcm9wcykge1xuICAgICAgICAgIHJldHVybiBcIl9kKFwiLmNvbmNhdChzdGF0aWNQcm9wcywgXCIsW1wiKS5jb25jYXQoZHluYW1pY1Byb3BzLnNsaWNlKDAsIC0xKSwgXCJdKVwiKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiBzdGF0aWNQcm9wcztcbiAgICAgIH1cbiAgfVxuICAvLyAjMzg5NSwgIzQyNjhcbiAgZnVuY3Rpb24gdHJhbnNmb3JtU3BlY2lhbE5ld2xpbmVzKHRleHQpIHtcbiAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xcdTIwMjgvZywgJ1xcXFx1MjAyOCcpLnJlcGxhY2UoL1xcdTIwMjkvZywgJ1xcXFx1MjAyOScpO1xuICB9XG5cbiAgLy8gdGhlc2Uga2V5d29yZHMgc2hvdWxkIG5vdCBhcHBlYXIgaW5zaWRlIGV4cHJlc3Npb25zLCBidXQgb3BlcmF0b3JzIGxpa2VcbiAgLy8gdHlwZW9mLCBpbnN0YW5jZW9mIGFuZCBpbiBhcmUgYWxsb3dlZFxuICB2YXIgcHJvaGliaXRlZEtleXdvcmRSRSA9IG5ldyBSZWdFeHAoJ1xcXFxiJyArXG4gICAgICAoJ2RvLGlmLGZvcixsZXQsbmV3LHRyeSx2YXIsY2FzZSxlbHNlLHdpdGgsYXdhaXQsYnJlYWssY2F0Y2gsY2xhc3MsY29uc3QsJyArXG4gICAgICAgICAgJ3N1cGVyLHRocm93LHdoaWxlLHlpZWxkLGRlbGV0ZSxleHBvcnQsaW1wb3J0LHJldHVybixzd2l0Y2gsZGVmYXVsdCwnICtcbiAgICAgICAgICAnZXh0ZW5kcyxmaW5hbGx5LGNvbnRpbnVlLGRlYnVnZ2VyLGZ1bmN0aW9uLGFyZ3VtZW50cycpXG4gICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAuam9pbignXFxcXGJ8XFxcXGInKSArXG4gICAgICAnXFxcXGInKTtcbiAgLy8gdGhlc2UgdW5hcnkgb3BlcmF0b3JzIHNob3VsZCBub3QgYmUgdXNlZCBhcyBwcm9wZXJ0eS9tZXRob2QgbmFtZXNcbiAgdmFyIHVuYXJ5T3BlcmF0b3JzUkUgPSBuZXcgUmVnRXhwKCdcXFxcYicgK1xuICAgICAgJ2RlbGV0ZSx0eXBlb2Ysdm9pZCcuc3BsaXQoJywnKS5qb2luKCdcXFxccypcXFxcKFteXFxcXCldKlxcXFwpfFxcXFxiJykgK1xuICAgICAgJ1xcXFxzKlxcXFwoW15cXFxcKV0qXFxcXCknKTtcbiAgLy8gc3RyaXAgc3RyaW5ncyBpbiBleHByZXNzaW9uc1xuICB2YXIgc3RyaXBTdHJpbmdSRSA9IC8nKD86W14nXFxcXF18XFxcXC4pKid8XCIoPzpbXlwiXFxcXF18XFxcXC4pKlwifGAoPzpbXmBcXFxcXXxcXFxcLikqXFwkXFx7fFxcfSg/OlteYFxcXFxdfFxcXFwuKSpgfGAoPzpbXmBcXFxcXXxcXFxcLikqYC9nO1xuICAvLyBkZXRlY3QgcHJvYmxlbWF0aWMgZXhwcmVzc2lvbnMgaW4gYSB0ZW1wbGF0ZVxuICBmdW5jdGlvbiBkZXRlY3RFcnJvcnMoYXN0LCB3YXJuKSB7XG4gICAgICBpZiAoYXN0KSB7XG4gICAgICAgICAgY2hlY2tOb2RlKGFzdCwgd2Fybik7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY2hlY2tOb2RlKG5vZGUsIHdhcm4pIHtcbiAgICAgIGlmIChub2RlLnR5cGUgPT09IDEpIHtcbiAgICAgICAgICBmb3IgKHZhciBuYW1lXzEgaW4gbm9kZS5hdHRyc01hcCkge1xuICAgICAgICAgICAgICBpZiAoZGlyUkUudGVzdChuYW1lXzEpKSB7XG4gICAgICAgICAgICAgICAgICB2Y
3XIgdmFsdWUgPSBub2RlLmF0dHJzTWFwW25hbWVfMV07XG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBub2RlLnJhd0F0dHJzTWFwW25hbWVfMV07XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVfMSA9PT0gJ3YtZm9yJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0Zvcihub2RlLCBcInYtZm9yPVxcXCJcIi5jb25jYXQodmFsdWUsIFwiXFxcIlwiKSwgd2FybiwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lXzEgPT09ICd2LXNsb3QnIHx8IG5hbWVfMVswXSA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJFeHByZXNzaW9uKHZhbHVlLCBcIlwiLmNvbmNhdChuYW1lXzEsIFwiPVxcXCJcIikuY29uY2F0KHZhbHVlLCBcIlxcXCJcIiksIHdhcm4sIHJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob25SRS50ZXN0KG5hbWVfMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tFdmVudCh2YWx1ZSwgXCJcIi5jb25jYXQobmFtZV8xLCBcIj1cXFwiXCIpLmNvbmNhdCh2YWx1ZSwgXCJcXFwiXCIpLCB3YXJuLCByYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0V4cHJlc3Npb24odmFsdWUsIFwiXCIuY29uY2F0KG5hbWVfMSwgXCI9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIlwiKSwgd2FybiwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgIGNoZWNrTm9kZShub2RlLmNoaWxkcmVuW2ldLCB3YXJuKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gMikge1xuICAgICAgICAgIGNoZWNrRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIG5vZGUudGV4dCwgd2Fybiwgbm9kZSk7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY2hlY2tFdmVudChleHAsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gICAgICB2Y
3XIgc3RyaXBwZWQgPSBleHAucmVwbGFjZShzdHJpcFN0cmluZ1JFLCAnJyk7XG4gICAgICB2YXIga2V5d29yZE1hdGNoID0gc3RyaXBwZWQubWF0Y2godW5hcnlPcGVyYXRvcnNSRSk7XG4gICAgICBpZiAoa2V5d29yZE1hdGNoICYmIHN0cmlwcGVkLmNoYXJBdChrZXl3b3JkTWF0Y2guaW5kZXggLSAxKSAhPT0gJyQnKSB7XG4gICAgICAgICAgd2FybihcImF2b2lkIHVzaW5nIEphdmFTY3JpcHQgdW5hcnkgb3BlcmF0b3IgYXMgcHJvcGVydHkgbmFtZTogXCIgK1xuICAgICAgICAgICAgICBcIlxcXCJcIi5jb25jYXQoa2V5d29yZE1hdGNoWzBdLCBcIlxcXCIgaW4gZXhwcmVzc2lvbiBcIikuY29uY2F0KHRleHQudHJpbSgpKSwgcmFuZ2UpO1xuICAgICAgfVxuICAgICAgY2hlY2tFeHByZXNzaW9uKGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpO1xuICB9XG4gIGZ1bmN0aW9uIGNoZWNrRm9yKG5vZGUsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gICAgICBjaGVja0V4cHJlc3Npb24obm9kZS5mb3IgfHwgJycsIHRleHQsIHdhcm4sIHJhbmdlKTtcbiAgICAgIGNoZWNrSWRlbnRpZmllcihub2RlLmFsaWFzLCAndi1mb3IgYWxpYXMnLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG4gICAgICBjaGVja0lkZW50aWZpZXIobm9kZS5pdGVyYXRvcjEsICd2LWZvciBpdGVyYXRvcicsIHRleHQsIHdhcm4sIHJhbmdlKTtcbiAgICAgIGNoZWNrSWRlbnRpZmllcihub2RlLml0ZXJhdG9yMiwgJ3YtZm9yIGl0ZXJhdG9yJywgdGV4dCwgd2FybiwgcmFuZ2UpO1xuICB9XG4gIGZ1bmN0aW9uIGNoZWNrSWRlbnRpZmllcihpZGVudCwgdHlwZSwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgICAgIGlmICh0eXBlb2YgaWRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbmV3IEZ1bmN0aW9uKFwidmFyIFwiLmNvbmNhdChpZGVudCwgXCI9X1wiKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHdhcm4oXCJpbnZhbGlkIFwiLmNvbmNhdCh0eXBlLCBcIiBcXFwiXCIpLmNvbmNhdChpZGVudCwgXCJcXFwiIGluIGV4cHJlc3Npb246IFwiKS5jb25jYXQodGV4dC50cmltKCkpLCByYW5nZSk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNoZWNrRXhwcmVzc2lvbihleHAsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIG5ldyBGdW5jdGlvbihcInJldHVybiBcIi5jb25jYXQoZXhwKSk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgIHZhciBrZXl3b3JkTWF0Y2ggPSBleHBcbiAgICAgICAgICAgICAgLnJlcGxhY2Uoc3RyaXBTdHJpbmdSRSwgJycpXG4gICAgICAgICAgICAgIC5tYXRjaChwcm9oaWJpdGVkS2V5d29yZFJFKTtcbiAgICAgICAgICBpZiAoa2V5d29yZE1hdGNoKSB7XG4gICAgICAgICAgICAgIHdhcm4oXCJhdm9pZCB1c2luZyBKYXZhU2NyaXB0IGtleXdvcmQgYXMgcHJvcGVydHkgbmFtZTogXCIgK1xuICAgICAgICAgICAgICAgICAgXCJcXFwiXCIuY29uY2F0KGtleXdvcmRNYXRjaFswXSwgXCJcXFwiXFxuICBSYXcgZXhwcmVzc2lvbjogXCIpLmNvbmNhdCh0ZXh0LnRyaW0oKSksIHJhbmdlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHdhcm4oXCJpbnZhbGlkIGV4cHJlc3Npb246IFwiLmNvbmNhdChlLm1lc3NhZ2UsIFwiIGluXFxuXFxuXCIpICtcbiAgICAgICAgICAgICAgICAgIFwiICAgIFwiLmNvbmNhdChleHAsIFwiXFxuXFxuXCIpICtcbiAgICAgICAgICAgICAgICAgIFwiICBSYXcgZXhwcmVzc2lvbjogXCIuY29uY2F0KHRleHQudHJpbSgpLCBcIlxcblwiKSwgcmFuZ2UpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjaGVja0Z1bmN0aW9uUGFyYW1ldGVyRXhwcmVzc2lvbihleHAsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIG5ldyBGdW5jdGlvbihleHAsICcnKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgd2FybihcImludmFsaWQgZnVuY3Rpb24gcGFyYW1ldGVyIGV4cHJlc3Npb246IFwiLmNvbmNhdChlLm1lc3NhZ2UsIFwiIGluXFxuXFxuXCIpICtcbiAgICAgICAgICAgICAgXCIgICAgXCIuY29uY2F0KGV4cCwgXCJcXG5cXG5cIikgK1xuICAgICAgICAgICAgICBcIiAgUmF3IGV4cHJlc3Npb246IFwiLmNvbmNhdCh0ZXh0LnRyaW0oKSwgXCJcXG5cIiksIHJhbmdlKTtcbiAgICAgIH1cbiAgfVxuXG4gIHZhciByYW5nZSA9IDI7XG4gIGZ1bmN0aW9uIGdlbmVyYXRlQ29kZUZyYW1lKHNvdXJjZSwgc3RhcnQsIGVuZCkge1xuICAgICAgaWYgKHN0YXJ0ID09PSB2b2lkIDApIHsgc3RhcnQgPSAwOyB9XG4gICAgICBpZiAoZW5kID09PSB2b2lkIDApIHsgZW5kID0gc291cmNlLmxlbmd0aDsgfVxuICAgICAgdmFyIGxpbmVzID0gc291cmNlLnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgICB2Y
3XIgY291bnQgPSAwO1xuICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvdW50ICs9IGxpbmVzW2ldLmxlbmd0aCArIDE7XG4gICAgICAgICAgaWYgKGNvdW50ID49IHN0YXJ0KSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGogPSBpIC0gcmFuZ2U7IGogPD0gaSArIHJhbmdlIHx8IGVuZCA+IGNvdW50OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgIGlmIChqIDwgMCB8fCBqID49IGxpbmVzLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKFwiXCIuY29uY2F0KGogKyAxKS5jb25jYXQocmVwZWF0KFwiIFwiLCAzIC0gU3RyaW5nKGogKyAxKS5sZW5ndGgpLCBcInwgIFwiKS5jb25jYXQobGluZXNbal0pKTtcbiAgICAgICAgICAgICAgICAgIHZhciBsaW5lTGVuZ3RoID0gbGluZXNbal0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgaWYgKGogPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBwdXNoIHVuZGVybGluZVxuICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWQgPSBzdGFydCAtIChjb3VudCAtIGxpbmVMZW5ndGgpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoXzEgPSBlbmQgPiBjb3VudCA/IGxpbmVMZW5ndGggLSBwYWQgOiBlbmQgLSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICByZXMucHVzaChcIiAgIHwgIFwiICsgcmVwZWF0KFwiIFwiLCBwYWQpICsgcmVwZWF0KFwiXlwiLCBsZW5ndGhfMSkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaiA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5kID4gY291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aF8yID0gTWF0aC5taW4oZW5kIC0gY291bnQsIGxpbmVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXMucHVzaChcIiAgIHwgIFwiICsgcmVwZWF0KFwiXlwiLCBsZW5ndGhfMikpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBsaW5lTGVuZ3RoICsgMTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzLmpvaW4oJ1xcbicpO1xuICB9XG4gIGZ1bmN0aW9uIHJlcGVhdChzdHIsIG4pIHtcbiAgICAgIHZhciByZXN1bHQgPSAnJztcbiAgICAgIGlmIChuID4gMCkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICAgIGlmIChuICYgMSlcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHI7XG4gICAgICAgICAgICAgIG4gPj4+PSAxO1xuICAgICAgICAgICAgICBpZiAobiA8PSAwKVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIHN0ciArPSBzdHI7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uKGNvZGUsIGVycm9ycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKGNvZGUpO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgIGVycm9ycy5wdXNoKHsgZXJyOiBlcnIsIGNvZGU6IGNvZGUgfSk7XG4gICAgICAgICAgcmV0dXJuIG5vb3A7XG4gICAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY3JlYXRlQ29tcGlsZVRvRnVuY3Rpb25Gbihjb21waWxlKSB7XG4gICAgICB2Y
3XIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBpbGVUb0Z1bmN0aW9ucyh0ZW1wbGF0ZSwgb3B0aW9ucywgdm0pIHtcbiAgICAgICAgICBvcHRpb25zID0gZXh0ZW5kKHt9LCBvcHRpb25zKTtcbiAgICAgICAgICB2YXIgd2FybiA9IG9wdGlvbnMud2FybiB8fCB3YXJuJDI7XG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnMud2FybjtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8vIGRldGVjdCBwb3NzaWJsZSBDU1AgcmVzdHJpY3Rpb25cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIG5ldyBGdW5jdGlvbigncmV0dXJuIDEnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKGUudG9TdHJpbmcoKS5tYXRjaCgvdW5zYWZlLWV2YWx8Q1NQLykpIHtcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuKCdJdCBzZWVtcyB5b3UgYXJlIHVzaW5nIHRoZSBzdGFuZGFsb25lIGJ1aWxkIG9mIFZ1ZS5qcyBpbiBhbiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vudmlyb25tZW50IHdpdGggQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdGhhdCBwcm9oaWJpdHMgdW5zYWZlLWV2YWwuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIHRlbXBsYXRlIGNvbXBpbGVyIGNhbm5vdCB3b3JrIGluIHRoaXMgZW52aXJvbm1lbnQuIENvbnNpZGVyICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXhpbmcgdGhlIHBvbGljeSB0byBhbGxvdyB1bnNhZmUtZXZhbCBvciBwcmUtY29tcGlsaW5nIHlvdXIgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0ZW1wbGF0ZXMgaW50byByZW5kZXIgZnVuY3Rpb25zLicpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGNoZWNrIGNhY2hlXG4gICAgICAgICAgdmFyIGtleSA9IG9wdGlvbnMuZGVsaW1pdGVyc1xuICAgICAgICAgICAgICA/IFN0cmluZyhvcHRpb25zLmRlbGltaXRlcnMpICsgdGVtcGxhdGVcbiAgICAgICAgICAgICAgOiB0ZW1wbGF0ZTtcbiAgICAgICAgICBpZiAoY2FjaGVba2V5XSkge1xuICAgICAgICAgICAgICByZXR1cm4gY2FjaGVba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gY29tcGlsZVxuICAgICAgICAgIHZhciBjb21waWxlZCA9IGNvbXBpbGUodGVtcGxhdGUsIG9wdGlvbnMpO1xuICAgICAgICAgIC8vIGNoZWNrIGNvbXBpbGF0aW9uIGVycm9ycy90aXBzXG4gICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoY29tcGlsZWQuZXJyb3JzICYmIGNvbXBpbGVkLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29tcGlsZWQuZXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcIkVycm9yIGNvbXBpbGluZyB0ZW1wbGF0ZTpcXG5cXG5cIi5jb25jYXQoZS5tc2csIFwiXFxuXFxuXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29kZUZyYW1lKHRlbXBsYXRlLCBlLnN0YXJ0LCBlLmVuZCksIHZtKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHdhcm4oXCJFcnJvciBjb21waWxpbmcgdGVtcGxhdGU6XFxuXFxuXCIuY29uY2F0KHRlbXBsYXRlLCBcIlxcblxcblwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkLmVycm9ycy5tYXAoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIFwiLSBcIi5jb25jYXQoZSk7IH0pLmpvaW4oJ1xcbicpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicsIHZtKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY29tcGlsZWQudGlwcyAmJiBjb21waWxlZC50aXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZC50aXBzLmZvckVhY2goZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRpcChlLm1zZywgdm0pOyB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkLnRpcHMuZm9yRWFjaChmdW5jdGlvbiAobXNnKSB7IHJldHVybiB0aXAobXNnLCB2bSk7IH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHR1cm4gY29kZSBpbnRvIGZ1bmN0aW9uc1xuICAgICAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgICAgICB2Y
3XIgZm5HZW5FcnJvcnMgPSBbXTtcbiAgICAgICAgICByZXMucmVuZGVyID0gY3JlYXRlRnVuY3Rpb24oY29tcGlsZWQucmVuZGVyLCBmbkdlbkVycm9ycyk7XG4gICAgICAgICAgcmVzLnN0YXRpY1JlbmRlckZucyA9IGNvbXBpbGVkLnN0YXRpY1JlbmRlckZucy5tYXAoZnVuY3Rpb24gKGNvZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZ1bmN0aW9uKGNvZGUsIGZuR2VuRXJyb3JzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBjaGVjayBmdW5jdGlvbiBnZW5lcmF0aW9uIGVycm9ycy5cbiAgICAgICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgY29tcGlsZXIgaXRzZWxmLlxuICAgICAgICAgIC8vIG1vc3RseSBmb3IgY29kZWdlbiBkZXZlbG9wbWVudCB1c2VcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmICgoIWNvbXBpbGVkLmVycm9ycyB8fCAhY29tcGlsZWQuZXJyb3JzLmxlbmd0aCkgJiYgZm5HZW5FcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICB3YXJuKFwiRmFpbGVkIHRvIGdlbmVyYXRlIHJlbmRlciBmdW5jdGlvbjpcXG5cXG5cIiArXG4gICAgICAgICAgICAgICAgICAgICAgZm5HZW5FcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IF9hLmVyciwgY29kZSA9IF9hLmNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChlcnIudG9TdHJpbmcoKSwgXCIgaW5cXG5cXG5cIikuY29uY2F0KGNvZGUsIFwiXFxuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCdcXG4nKSwgdm0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAoY2FjaGVba2V5XSA9IHJlcyk7XG4gICAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29tcGlsZXJDcmVhdG9yKGJhc2VDb21waWxlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlQ29tcGlsZXIoYmFzZU9wdGlvbnMpIHtcbiAgICAgICAgICBmdW5jdGlvbiBjb21waWxlKHRlbXBsYXRlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgIHZhciBmaW5hbE9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKGJhc2VPcHRpb25zKTtcbiAgICAgICAgICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgICAgICAgICB2Y
3XIgdGlwcyA9IFtdO1xuICAgICAgICAgICAgICB2YXIgd2FybiA9IGZ1bmN0aW9uIChtc2csIHJhbmdlLCB0aXApIHtcbiAgICAgICAgICAgICAgICAgICh0aXAgPyB0aXBzIDogZXJyb3JzKS5wdXNoKG1zZyk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICAgICAgICAgICAgICAgIHZhciBsZWFkaW5nU3BhY2VMZW5ndGhfMSA9IHRlbXBsYXRlLm1hdGNoKC9eXFxzKi8pWzBdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuID0gZnVuY3Rpb24gKG1zZywgcmFuZ2UsIHRpcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnID8geyBtc2c6IG1zZyB9IDogbXNnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zdGFydCA9IHJhbmdlLnN0YXJ0ICsgbGVhZGluZ1NwYWNlTGVuZ3RoXzE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmVuZCA9IHJhbmdlLmVuZCArIGxlYWRpbmdTcGFjZUxlbmd0aF8xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICh0aXAgPyB0aXBzIDogZXJyb3JzKS5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBtZXJnZSBjdXN0b20gbW9kdWxlc1xuICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kdWxlcykge1xuICAgICAgICAgICAgICAgICAgICAgIGZpbmFsT3B0aW9ucy5tb2R1bGVzID0gKGJhc2VPcHRpb25zLm1vZHVsZXMgfHwgW10pLmNvbmNhdChvcHRpb25zLm1vZHVsZXMpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgY3VzdG9tIGRpcmVjdGl2ZXNcbiAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRpcmVjdGl2ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmaW5hbE9wdGlvbnMuZGlyZWN0aXZlcyA9IGV4dGVuZChPYmplY3QuY3JlYXRlKGJhc2VPcHRpb25zLmRpcmVjdGl2ZXMgfHwgbnVsbCksIG9wdGlvbnMuZGlyZWN0aXZlcyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBjb3B5IG90aGVyIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ21vZHVsZXMnICYmIGtleSAhPT0gJ2RpcmVjdGl2ZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsT3B0aW9uc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmaW5hbE9wdGlvbnMud2FybiA9IHdhcm47XG4gICAgICAgICAgICAgIHZhciBjb21waWxlZCA9IGJhc2VDb21waWxlKHRlbXBsYXRlLnRyaW0oKSwgZmluYWxPcHRpb25zKTtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGV0ZWN0RXJyb3JzKGNvbXBpbGVkLmFzdCwgd2Fybik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29tcGlsZWQuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgICAgICAgICBjb21waWxlZC50aXBzID0gdGlwcztcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb21waWxlOiBjb21waWxlLFxuICAgICAgICAgICAgICBjb21waWxlVG9GdW5jdGlvbnM6IGNyZWF0ZUNvbXBpbGVUb0Z1bmN0aW9uRm4oY29tcGlsZSlcbiAgICAgICAgICB9O1xuICAgICAgfTtcbiAgfVxuXG4gIC8vIGBjcmVhdGVDb21waWxlckNyZWF0b3JgIGFsbG93cyBjcmVhdGluZyBjb21waWxlcnMgdGhhdCB1c2UgYWx0ZXJuYXRpdmVcbiAgLy8gcGFyc2VyL29wdGltaXplci9jb2RlZ2VuLCBlLmcgdGhlIFNTUiBvcHRpbWl6aW5nIGNvbXBpbGVyLlxuICAvLyBIZXJlIHdlIGp1c3QgZXhwb3J0IGEgZGVmYXVsdCBjb21waWxlciB1c2luZyB0aGUgZGVmYXVsdCBwYXJ0cy5cbiAgdmFyIGNyZWF0ZUNvbXBpbGVyID0gY3JlYXRlQ29tcGlsZXJDcmVhdG9yKGZ1bmN0aW9uIGJhc2VDb21waWxlKHRlbXBsYXRlLCBvcHRpb25zKSB7XG4gICAgICB2Y
3XIgYXN0ID0gcGFyc2UodGVtcGxhdGUudHJpbSgpLCBvcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLm9wdGltaXplICE9PSBmYWxzZSkge1xuICAgICAgICAgIG9wdGltaXplKGFzdCwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICB2YXIgY29kZSA9IGdlbmVyYXRlKGFzdCwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAgIGFzdDogYXN0LFxuICAgICAgICAgIHJlbmRlcjogY29kZS5yZW5kZXIsXG4gICAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBjb2RlLnN0YXRpY1JlbmRlckZuc1xuICAgICAgfTtcbiAgfSk7XG5cbiAgdmFyIF9hID0gY3JlYXRlQ29tcGlsZXIoYmFzZU9wdGlvbnMpLCBjb21waWxlVG9GdW5jdGlvbnMgPSBfYS5jb21waWxlVG9GdW5jdGlvbnM7XG5cbiAgLy8gY2hlY2sgd2hldGhlciBjdXJyZW50IGJyb3dzZXIgZW5jb2RlcyBhIGNoYXIgaW5zaWRlIGF0dHJpYnV0ZSB2YWx1ZXNcbiAgdmFyIGRpdjtcbiAgZnVuY3Rpb24gZ2V0U2hvdWxkRGVjb2RlKGhyZWYpIHtcbiAgICAgIGRpdiA9IGRpdiB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSBocmVmID8gXCI8YSBocmVmPVxcXCJcXG5cXFwiLz5cIiA6IFwiPGRpdiBhPVxcXCJcXG5cXFwiLz5cIjtcbiAgICAgIHJldHVybiBkaXYuaW5uZXJIVE1MLmluZGV4T2YoJyYjMTA7JykgPiAwO1xuICB9XG4gIC8vICMzNjYzOiBJRSBlbmNvZGVzIG5ld2xpbmVzIGluc2lkZSBhdHRyaWJ1dGUgdmFsdWVzIHdoaWxlIG90aGVyIGJyb3dzZXJzIGRvbid0XG4gIHZhciBzaG91bGREZWNvZGVOZXdsaW5lcyA9IGluQnJvd3NlciA/IGdldFNob3VsZERlY29kZShmYWxzZSkgOiBmYWxzZTtcbiAgLy8gIzY4Mjg6IGNocm9tZSBlbmNvZGVzIGNvbnRlbnQgaW4gYVtocmVmXVxuICB2YXIgc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmID0gaW5Ccm93c2VyXG4gICAgICA/IGdldFNob3VsZERlY29kZSh0cnVlKVxuICAgICAgOiBmYWxzZTtcblxuICB2YXIgaWRUb1RlbXBsYXRlID0gY2FjaGVkKGZ1bmN0aW9uIChpZCkge1xuICAgICAgdmFyIGVsID0gcXVlcnkoaWQpO1xuICAgICAgcmV0dXJuIGVsICYmIGVsLmlubmVySFRNTDtcbiAgfSk7XG4gIHZhciBtb3VudCA9IFZ1ZS5wcm90b3R5cGUuJG1vdW50O1xuICBWdWUucHJvdG90eXBlLiRtb3VudCA9IGZ1bmN0aW9uIChlbCwgaHlkcmF0aW5nKSB7XG4gICAgICBlbCA9IGVsICYmIHF1ZXJ5KGVsKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGVsID09PSBkb2N1bWVudC5ib2R5IHx8IGVsID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgICB3YXJuJDIoXCJEbyBub3QgbW91bnQgVnVlIHRvIDxodG1sPiBvciA8Ym9keT4gLSBtb3VudCB0byBub3JtYWwgZWxlbWVudHMgaW5zdGVhZC5cIik7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICB2Y
3XIgb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnM7XG4gICAgICAvLyByZXNvbHZlIHRlbXBsYXRlL2VsIGFuZCBjb252ZXJ0IHRvIHJlbmRlciBmdW5jdGlvblxuICAgICAgaWYgKCFvcHRpb25zLnJlbmRlcikge1xuICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IG9wdGlvbnMudGVtcGxhdGU7XG4gICAgICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdGVtcGxhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGVtcGxhdGUuY2hhckF0KDApID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IGlkVG9UZW1wbGF0ZSh0ZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuJDIoXCJUZW1wbGF0ZSBlbGVtZW50IG5vdCBmb3VuZCBvciBpcyBlbXB0eTogXCIuY29uY2F0KG9wdGlvbnMudGVtcGxhdGUpLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZiAodGVtcGxhdGUubm9kZVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHdhcm4kMignaW52YWxpZCB0ZW1wbGF0ZSBvcHRpb246JyArIHRlbXBsYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGVsKSB7XG4gICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgICAgdGVtcGxhdGUgPSBnZXRPdXRlckhUTUwoZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgIGlmIChjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgICAgICAgICAgICAgbWFyaygnY29tcGlsZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBfYSA9IGNvbXBpbGVUb0Z1bmN0aW9ucyh0ZW1wbGF0ZSwge1xuICAgICAgICAgICAgICAgICAgb3V0cHV0U291cmNlUmFuZ2U6IHRydWUsXG4gICAgICAgICAgICAgICAgICBzaG91bGREZWNvZGVOZXdsaW5lczogc2hvdWxkRGVjb2RlTmV3bGluZXMsXG4gICAgICAgICAgICAgICAgICBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6IHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZixcbiAgICAgICAgICAgICAgICAgIGRlbGltaXRlcnM6IG9wdGlvbnMuZGVsaW1pdGVycyxcbiAgICAgICAgICAgICAgICAgIGNvbW1lbnRzOiBvcHRpb25zLmNvbW1lbnRzXG4gICAgICAgICAgICAgIH0sIHRoaXMpLCByZW5kZXIgPSBfYS5yZW5kZXIsIHN0YXRpY1JlbmRlckZucyA9IF9hLnN0YXRpY1JlbmRlckZucztcbiAgICAgICAgICAgICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXI7XG4gICAgICAgICAgICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zO1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgaWYgKGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICAgICAgICAgICAgICBtYXJrKCdjb21waWxlIGVuZCcpO1xuICAgICAgICAgICAgICAgICAgbWVhc3VyZShcInZ1ZSBcIi5jb25jYXQodGhpcy5fbmFtZSwgXCIgY29tcGlsZVwiKSwgJ2NvbXBpbGUnLCAnY29tcGlsZSBlbmQnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBtb3VudC5jYWxsKHRoaXMsIGVsLCBoeWRyYXRpbmcpO1xuICB9O1xuICAvKipcbiAgICogR2V0IG91dGVySFRNTCBvZiBlbGVtZW50cywgdGFraW5nIGNhcmVcbiAgICogb2YgU1ZHIGVsZW1lbnRzIGluIElFIGFzIHdlbGwuXG4gICAqL1xuICBmdW5jdGlvbiBnZXRPdXRlckhUTUwoZWwpIHtcbiAgICAgIGlmIChlbC5vdXRlckhUTUwpIHtcbiAgICAgICAgICByZXR1cm4gZWwub3V0ZXJIVE1MO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgICAgIHJldHVybiBjb250YWluZXIuaW5uZXJIVE1MO1xuICAgICAgfVxuICB9XG4gIFZ1ZS5jb21waWxlID0gY29tcGlsZVRvRnVuY3Rpb25zO1xuXG4gIC8vIGV4cG9ydCB0eXBlIEVmZmVjdFNjaGVkdWxlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55XG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgc2luY2Ugd2UgYXJlIG5vdCBleHBvc2luZyB0aGlzIGluIFZ1ZSAyLCBpdCdzIHVzZWQgb25seSBmb3JcbiAgICogaW50ZXJuYWwgdGVzdGluZy5cbiAgICovXG4gIGZ1bmN0aW9uIGVmZmVjdChmbiwgc2NoZWR1bGVyKSB7XG4gICAgICB2Y
3XIgd2F0Y2hlciA9IG5ldyBXYXRjaGVyKGN1cnJlbnRJbnN0YW5jZSwgZm4sIG5vb3AsIHtcbiAgICAgICAgICBzeW5jOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGlmIChzY2hlZHVsZXIpIHtcbiAgICAgICAgICB3YXRjaGVyLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgc2NoZWR1bGVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHdhdGNoZXIucnVuKCk7IH0pO1xuICAgICAgICAgIH07XG4gICAgICB9XG4gIH1cblxuICBleHRlbmQoVnVlLCB2Y2EpO1xuICBWdWUuZWZmZWN0ID0gZWZmZWN0O1xuXG4gIHJldHVybiBWdWU7XG5cbn0pKTtcbiIsIi8qISBqcy1jb29raWUgdjMuMC4xIHwgTUlUICovXG5mdW5jdGlvbiBlKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcillW25dPXJbbl19cmV0dXJuIGV9dmFyIHQ9ZnVuY3Rpb24gdChyLG4pe2Z1bmN0aW9uIG8odCxvLGkpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCl7XCJudW1iZXJcIj09dHlwZW9mKGk9ZSh7fSxuLGkpKS5leHBpcmVzJiYoaS5leHBpcmVzPW5ldyBEYXRlKERhdGUubm93KCkrODY0ZTUqaS5leHBpcmVzKSksaS5leHBpcmVzJiYoaS5leHBpcmVzPWkuZXhwaXJlcy50b1VUQ1N0cmluZygpKSx0PWVuY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKC8lKDJbMzQ2Ql18NUV8NjB8N0MpL2csZGVjb2RlVVJJQ29tcG9uZW50KS5yZXBsYWNlKC9bKCldL2csZXNjYXBlKTt2YXIgYz1cIlwiO2Zvcih2YXIgdSBpbiBpKWlbdV0mJihjKz1cIjsgXCIrdSwhMCE9PWlbdV0mJihjKz1cIj1cIitpW3VdLnNwbGl0KFwiO1wiKVswXSkpO3JldHVybiBkb2N1bWVudC5jb29raWU9dCtcIj1cIityLndyaXRlKG8sdCkrY319cmV0dXJuIE9iamVjdC5jcmVhdGUoe3NldDpvLGdldDpmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJighYXJndW1lbnRzLmxlbmd0aHx8ZSkpe2Zvcih2YXIgdD1kb2N1bWVudC5jb29raWU/ZG9jdW1lbnQuY29va2llLnNwbGl0KFwiOyBcIik6W10sbj17fSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBpPXRbb10uc3BsaXQoXCI9XCIpLGM9aS5zbGljZSgxKS5qb2luKFwiPVwiKTt0cnl7dmFyIHU9ZGVjb2RlVVJJQ29tcG9uZW50KGlbMF0pO2lmKG5bdV09ci5yZWFkKGMsdSksZT09PXUpYnJlYWt9Y2F0Y2goZSl7fX1yZXR1cm4gZT9uW2VdOm59fSxyZW1vdmU6ZnVuY3Rpb24odCxyKXtvKHQsXCJcIixlKHt9LHIse2V4cGlyZXM6LTF9KSl9LHdpdGhBdHRyaWJ1dGVzOmZ1bmN0aW9uKHIpe3JldHVybiB0KHRoaXMuY29udmVydGVyLGUoe30sdGhpcy5hdHRyaWJ1dGVzLHIpKX0sd2l0aENvbnZlcnRlcjpmdW5jdGlvbihyKXtyZXR1cm4gdChlKHt9LHRoaXMuY29udmVydGVyLHIpLHRoaXMuYXR0cmlidXRlcyl9fSx7YXR0cmlidXRlczp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX0sY29udmVydGVyOnt2YWx1ZTpPYmplY3QuZnJlZXplKHIpfX0pfSh7cmVhZDpmdW5jdGlvbihlKXtyZXR1cm4nXCInPT09ZVswXSYmKGU9ZS5zbGljZSgxLC0xKSksZS5yZXBsYWNlKC8oJVtcXGRBLUZdezJ9KSsvZ2ksZGVjb2RlVVJJQ29tcG9uZW50KX0sd3JpdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lKDJbMzQ2QkZdfDNbQUMtRl18NDB8NVtCREVdfDYwfDdbQkNEXSkvZyxkZWNvZGVVUklDb21wb25lbnQpfX0se3BhdGg6XCIvXCJ9KTtleHBvcnQgZGVmYXVsdCB0O1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYn
3BhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUvZGlzdC92dWUnO1xuaW1wb3J0IGZpbHRlcnMgZnJvbSBcImNvbXBvbmVudHMvZmlsdGVycy5qc1wiO1xuaW1wb3J0IG1hcCBmcm9tIFwiY29tcG9uZW50cy9tYXAuanNcIjtcbmltcG9ydCBsaXN0IGZyb20gXCJjb21wb25lbnRzL2xpc3QuanNcIjtcbmltcG9ydCBzd2l0Y2hlciBmcm9tIFwiY29tcG9uZW50cy9zd2l0Y2hlci5qc1wiO1xuaW1wb3J0IG5icmVzdWx0cyBmcm9tIFwiY29tcG9uZW50cy9uYnJlc3VsdHMuanNcIjtcbmltcG9ydCBDb29raWVzIGZyb20gJ2xpYnMvanMuY29va2llLm1pbi5tanMnO1xuXG5cbmpRdWVyeShmdW5jdGlvbiAoJCkge1xuICAgIGxldCAkaXRlbXMgPSAkKCcuYXBpZGFlLWxpc3QtYXBwJyk7XG5cbiAgICAkaXRlbXMuZWFjaCgoaW5kZXgsIGl0ZW0pID0+IHtcblxuICAgICAgICBsZXQgJGl0ZW0gPSAkKGl0ZW0pO1xuXG4gICAgICAgIGxldCBpZCA9ICRpdGVtLmF0dHIoJ2lkJyk7XG5cblxuICAgICAgICBsZXQgYXBpZGFlX2xpc3QgPSB3aW5kb3dbaWRdO1xuXG4gICAgICAgIHZhciBhcHAgPSBuZXcgVnVlKHtcbiAgICAgICAgICAgIGVsOiAnIycgKyBpZCxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBmaWx0ZXJzLFxuICAgICAgICAgICAgICAgIG15bWFwOiBtYXAsXG4gICAgICAgICAgICAgICAgbGlzdDogbGlzdCxcbiAgICAgICAgICAgICAgICBzd2l0Y2hlcjogc3dpdGNoZXIsXG4gICAgICAgICAgICAgICAgbmJyZXN1bHRzOiBuYnJlc3VsdHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVtcGxhdGU6IGBcblxuICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz1cImFyZUZpbHRlcnNEaXNwbGF5ZWRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwaWRhZS1saXN0LXRvcFwiPlxuICAgICAgICAgICAgICAgIDxmaWx0ZXJzIHJlZj1cImZpbHRlclwiIHYtaWY9XCJ1c2VkRmlsdGVycy5sZW5ndGggPiAwXCIgOmZpbHRlcnM9XCJ1c2VkRmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdi1vbjp2YWx1ZS1jaGFuZ2U9XCJmaWVsZFZhbHVlQ2hhbmdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmZpbHRlcnMtcmVzZXQ9XCJyZXNldEFsbEZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgOnNldHRpbmdzPVwic2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246dmFsaWRhdGUtZmlsdGVycz1cInZhbGlkYXRlRmlsdGVyc1wiIHYtb246c2hvdy1maWx0ZXJzPVwic2hvd0ZpbHRlcnNcIiA6bmJQcmV2aWV3RmlsdGVycz1cIm51bWJlck9iamVjdHNcIj48L2ZpbHRlcnM+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwaWRhZS10b3BiYXJcIj5cbiAgICAgICAgICAgICAgICAgIDxuYnJlc3VsdHMgOnJldHVybk5iUmVzdWx0cz1cInJldHVybk5iUmVzdWx0c1wiPjwvbmJyZXN1bHRzPlxuICAgICAgICAgICAgICAgICAgPHN3aXRjaGVyIDpzZXR0aW5ncz1cInNldHRpbmdzXCIgOmZpbHRlcnM9XCJmaWx0ZXJzXCIgOmVuYWJsZU1vZGVzPVwiZW5hYmxlTW9kZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246bW9kZS1jaGFuZ2U9XCJtb2RlQ2hhbmdlXCIgdi1vbjpzaG93LWZpbHRlcnM9XCJzaG93RmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNlbGVjdGVkTW9kZT1cImRpc3BsYXlNb2RlXCI+PC9zd2l0Y2hlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmRcIj48c3BhbiBjbGFzcz1cImljb24gaWNvbi1mYXZcIj48L3NwYW4+PHNwYW4+e3t0aGlzLnNldHRpbmdzLmxhYmVscy5hZGRUb1dpc2hMaXN0fX08L3NwYW4+PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJsZWdlbmRcIj48c3BhbiBjbGFzcz1cImljb24gaWNvb
3i1zaGFraW5nLWhhbmRzXCI+PC9zcGFuPjxzcGFuPnt7dGhpcy5zZXR0aW5ncy5sYWJlbHMuaXNBZGhlcmVudH19PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz1cIidhcGlkYWUtcmVzdWx0cy1jYW52YXMgYXBpZGFlLXJlc3VsdHMtZGlzcGxheW1vZGUtJytkaXNwbGF5TW9kZVwiPlxuICAgICAgICAgICAgICAgIDxsaXN0IHJlZj1cImxpc3RcIiB2LW9uOnBhZ2UtY2hhbmdlPVwiY2hhbmdlVXJsXCIgOmRlZmF1bHRQYWdlPVwiZGVmYXVsdFBhZ2VcIiA6c2V0dGluZ3M9XCJzZXR0aW5nc1wiXG4gICAgICAgICAgICAgICAgICAgICAgOm9iamVjdHM9XCJkaXNwbGF5T2JqZWN0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgOm91dE9mTWFwPVwib3V0T2ZNYXBcIlxuICAgICAgICAgICAgICAgICAgICAgIDpudW1iZXJQYXJQYWdlPVwibnVtYmVyUGFyUGFnZVwiIHYtb246aG92ZXJMaXN0SXRlbT1cImhvdmVySXRlbUZyb21MaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNoYW5nZVdpc2hMaXN0PVwid2lzaExpc3RFdmVudFwiPjwvbGlzdD5cbiAgICAgICAgICAgICAgICA8bXltYXAgOmlkPVwiaWRcIiByZWY9XCJtYXBcIiA6ZGVmYXVsdExhdD1cImRlZmF1bHRMYXRcIiA6ZGVmYXVsdExuZz1cImRlZmF1bHRMbmdcIiA6ZGVmYXVsdFpvb209XCJkZWZhdWx0Wm9vbVwiXG4gICAgICAgICAgICAgICAgICAgICAgIDpvYmplY3RzPVwiZmlsdHJlT2JqZWN0c1wiIDpkaXNwbGF5TW9kZT1cImRpc3BsYXlNb2RlXCIgdi1vbjptYXAtZmlsdGVyPVwibWFwRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgOnNldHRpbmdzPVwic2V0dGluZ3NcIj48L215bWFwPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBpZGFlLXByb2Nlc3NpbmdcIiB2LWlmPVwibG9hZGluZ1wiPjwvZGl2PlxuXG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICBgLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICBlbmFibGVNb2RlczogWydsaXN0JywgJ21peHRlJywgJ21hcCddLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlNb2RlOiAnbWl4dGUnLCAvL2xpc3QsIG1hcCwgbWl4dGVcbiAgICAgICAgICAgICAgICBvYmplY3RzOiBbXSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgICAgICAgICAgICBzZXR0aW5nczogW10sXG4gICAgICAgICAgICAgICAgdGVtcEZpbHRlcnM6IFtdLFxuICAgICAgICAgICAgICAgIHRlbXBPYmplY3RzOiBbXSxcbiAgICAgICAgICAgICAgICBvdXRPZk1hcDogW10sXG5cbiAgICAgICAgICAgICAgICAvL0RFRkFVTFQgUEFSQU1TXG4gICAgICAgICAgICAgICAgZGVmYXVsdFBhZ2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRab29tOiBmYWxzZSxcblxuICAgICAgICAgICAgICAgIHNhdmVTZWFyY2hJblVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb29raWVLZXk6IGZhbHNlLFxuXG4gICAgICAgICAgICAgICAgZGlzYWJsZVNhdmVTZWFyY2g6IGZhbHNlLFxuXG4gICAgICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaG93X2ZpbHRlcnM6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy9BcHBlbGVyIGxvcnNxdWUgcXVlIGwnYXBwIGVzdCBjcsOpZXJcbiAgICAgICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRPYmplY3RzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRmlsdGVycygpO1xuXG4gICAgICAgICAgICAgICAgalF1ZXJ5KCdib2R5JykuYWRkQ2xhc3MoJ3dpdGgtYXBpZGFlLWxpc3QnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MgPSBhcGlkYWVfbGlzdC5zZXR0aW5ncztcblxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc2F2ZVNlYXJjaEluVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlU2VhcmNoSW5VcmwgPSB0aGlzLnNldHRpbmdzLnNhdmVTZWFyY2hJblVybDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5lbmFibGVNb2Rlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZU1vZGVzID0gdGhpcy5zZXR0aW5ncy5lbmFibGVNb2RlcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5kZWZhdWx0TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlID0gdGhpcy5zZXR0aW5ncy5kZWZhdWx0TW9kZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL1NpIG9uIGEgZGV1eCBhcHAgdnVlIHN1ciBsYSBtw6ptZSBwYWdlLCBvbiBkw6lzYWN0aXZlIGwnZW5yZWdpc3RyZW1lbnQgZGVzIGZpbHRyZXMgZGFucyBsJ3VybFxuICAgICAgICAgICAgICAgIGlmICgkaXRlbXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlU2VhcmNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5wb3N0X2lkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3N0X2lkID0gdGhpcy5zZXR0aW5ncy5wb3N0X2lkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvb2tpZUtleSA9ICdhcGlkYWVfbGlzdGVfc2VhcmNoXycgKyBwb3N0X2lkICsgJ18nICsgdGhpcy5pZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZVNhdmVTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJzZVVybCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyT2JqZWN0cygpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wRmlsdGVycyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJzKSk7XG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wT2JqZWN0cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5vYmplY3RzKSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbXB1dGVkOiB7XG4gICAgICAgICAgICAgICAgZmlsdGVyRGlzcG9zT246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlzRmlsdGVyZWREaXBvcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBmaWx0ZXIgb2YgdGhpcy5maWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLnR5cGUgPT09ICdkaXNwb3MnICYmIGZpbHRlci5kYXRlX2RlYnV0ICYmIGZpbHRlci5kYXRlX2Zpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRmlsdGVyZWREaXBvcyA9IFtmaWx0ZXIuZGF0ZV9kZWJ1dCwgZmlsdGVyLmRhdGVfZmluXTtcbiAgICAgICAgICAgICAgICAgICAgICAgI
3H1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNGaWx0ZXJlZERpcG9zO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy9Ob21icmUgZCdvYmpldCBhZmZpY2hlclxuICAgICAgICAgICAgICAgIHJldHVybk5iUmVzdWx0czogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzICYmIHRoaXMuc2V0dGluZ3MubGFiZWxzICYmIHRoaXMuc2V0dGluZ3MubGFiZWxzLnJlc3VsdGF0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhYmVsX25iX3Jlc3VsdHMgPSB0aGlzLm51bWJlck9iamVjdHMgKyAnICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbF9uYl9yZXN1bHRzICs9ICh0aGlzLm51bWJlck9iamVjdHMgPiAxKSA/IHRoaXMuc2V0dGluZ3MubGFiZWxzLnJlc3VsdGF0cy5wbHVyYWwgOiB0aGlzLnNldHRpbmdzLmxhYmVscy5yZXN1bHRhdHMuc2luZ3VsYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWxfbmJfcmVzdWx0cztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBhcmVGaWx0ZXJzRGlzcGxheWVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5zaG93X2ZpbHRlcnMgPT09IHRydWUpID8gJ2ZpbHRlcnMtb24nIDogJ2ZpbHRlcnMtb2ZmJztcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgIC8vIEZJTFRFUlNcbiAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgLy9SZXRvdXJuZSBsZXMgZmlsdHJlIGEgdXRpbGlzw6ksIHNvaXQgbGVzIG5vcm1hdXggc29pdCBsZXMgdGVtcG9yYWlyZSBzdXIgb24gdXRpbGlzZSB1biBib3V0b24gZGUgdmFsaWRhdGlvblxuICAgICAgICAgICAgICAgIHVzZWRGaWx0ZXJzKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy51c2VWYWxpZGF0aW9uQnRuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wRmlsdGVycztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlcnM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgIC8vIE9CSkVDVFNcbiAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgLy9Ob21icmUgZCdvYmpldCBhZmZpY2hlclxuICAgICAgICAgICAgICAgIG51bWJlck9iamVjdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlPYmplY3RzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vTnVtYnJlIGQnb2JqZXQgdGVtcG9yYWlyZVxuICAgICAgICAgICAgICAgIG51bWJlck9mVGVtcHNPYmplY3RzKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5VGVtcE9iamVjdHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy9SZXRvdXJuZSBsZXMgb2JqZXRzIHZhbGlkZSBwYXIgYXBwb3J0IGF1IGZpbHRyZSBldCBhIGxhIGNhcnRlXG4gICAgICAgICAgICAgICAgZGlzcGxheU9iamVjdHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0cy5maWx0ZXIoZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9MZXMgb2JqZXRzIGRvaXZlbnQgZXRyZSBib24gcG91ciBsZXMgZmlsdHJlcyBldCBwb3VyIGxhIGNhcnRlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG9iai5maWx0ZXJPayA9PT0gdHJ1ZSAmJiBvYmoubWFwT2sgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vUmV0b3VybmUgbGVzIG9iamV0cyB0ZW1wb3JhaXJlIHZhbGlkZSBwYXIgYXBwb3J0IGF1IGZpbHRyZSBldCBhIGxhIGNhcnRlXG4gICAgICAgICAgICAgICAgZGlzcGxheVRlbXBPYmplY3RzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBPYmplY3RzLmZpbHRlcihmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL0xlcyBvYmpldHMgZG9pdmVudCBldHJlIGJvbiBwb3VyIGxlcyBmaWx0cmVzIGV0IHBvdXIgbGEgY2FydGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAob2JqLmZpbHRlck9rID09PSB0cnVlICYmIG9iai5tYXBPayA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy9QZXJtZXQgZCdvYnRlbmlyIGxlcyBvYmpldHMgdmFsaWRlIGF2ZWMgbGVzIGZpbHRyZXNcbiAgICAgICAgICAgICAgICBmaWx0cmVPYmplY3RzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9iamVjdHMuZmlsdGVyKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vSWwgZG9pdmVudCBqdXN0ZSDDqnRyZSBvayBwb3VyIGxlcyBmaWx0cmVzXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLmZpbHRlck9rID09PSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vQ2FsY3VsIGxlIG5vbWJyZSBkJ29iamV0IHBhciBwYWdlXG4gICAgICAgICAgICAgICAgbnVtYmVyUGFyUGFnZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2Y
3XIgbnVtYmVyUGFyUGFnZSA9IHRoaXMub2JqZWN0cy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MgJiYgdGhpcy5zZXR0aW5ncy5uYl9wZXJfcGFnZSAmJiB0aGlzLmRpc3BsYXlNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJQYXJQYWdlID0gKHRoaXMuc2V0dGluZ3MubmJfcGVyX3BhZ2VbdGhpcy5kaXNwbGF5TW9kZV0gPiAwKSA/IHRoaXMuc2V0dGluZ3MubmJfcGVyX3BhZ2VbdGhpcy5kaXNwbGF5TW9kZV0gOiB0aGlzLm9iamVjdHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihudW1iZXJQYXJQYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAvLyBFVkVOVFNcbiAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgICAgLy9Nb3VzZSBlbnRlci9sZWF2ZSBzdXIgbGEgbGlzdGVcbiAgICAgICAgICAgICAgICBob3Zlckl0ZW1Gcm9tTGlzdChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5tYXAuaG92ZXJNYXJrZXIob2JqZWN0KTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgc2hvd0ZpbHRlcnMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd19maWx0ZXJzID0gIXRoaXMuc2hvd19maWx0ZXJzO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAvL0V2ZW50IGF1IGNoYW5nZW1lbnQgZGUgbW9kZSBkJ2FmZmljaGFnZVxuICAgICAgICAgICAgICAgIG1vZGVDaGFuZ2UobmV3TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlID0gbmV3TW9kZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3TW9kZSAhPT0gJ2xpc3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyZWZzLm1hcC51cGRhdGVTaXplKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcy4kcmVmcy5tYXAuY3JlYXRlTWFwKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVVybCgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy9FdmVudCBsb3JzIGRlIGxhIHZhbGlkYXRpb24gZGVzIGZpbHRyZVxuICAgICAgICAgICAgICAgIC8vIC8hXFwgVU5JUVVFTUVOVCBTSSBPTiBVVElMSVNFIExFIEJPVVRPTiBERSBWQUxJREFUSU9OXG4gICAgICAgICAgICAgICAgdmFsaWRhdGVGaWx0ZXJzKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMudGVtcEZpbHRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJPYmplY3RzKCdhbGwnKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vRXZlbnQgbG9ycyBkdSBjaGFuZ2VtZW50IGRlIHZhbGV1ciBkJ3VuIGNoYW1wXG4gICAgICAgICAgICAgICAgZmllbGRWYWx1ZUNoYW5nZShmaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2Rpc3BvcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLm5lZWRUb0NhbGxBUEkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLnVzZVZhbGlkYXRpb25CdG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGVtcHNPYmplY3RzKGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyT2JqZWN0cyhmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vRXZlbnQgbG9ycyBkdSBkw6lwbGFjZW1lbnQgZGUgbGEgY2FydGUgYXZlYyBsZSAoZmlsdGVyIG9uIG1vdmUpXG4gICAgICAgICAgICAgICAgbWFwRmlsdGVyKG9iamVjdE91dE9mTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3V0T2ZNYXAgPSBvYmplY3RPdXRPZk1hcDtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBvYmogb2YgdGhpcy5vYmplY3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vdXRPZk1hcC5pbmNsdWRlcyhvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLm1hcE9rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5tYXBPayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlck9iamVjdHMoKTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgd2lzaExpc3RFdmVudChvYmplY3RfaWQsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB0aGlzLm9iamVjdHMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT0gb2JqZWN0X2lkO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0Lndpc2hsaXN0ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnMubWFwLmFkZE1hcmtlcnMoKTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgIC8vRklMVFJFXG4gICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgIC8vUGVybWV0IGRlIGZpbHRyZXIgbGVzIG9iamV0cyBlbiBmb25jdGlvbiBkZXMgZmlsdHJlcyBwYXNzZXJcbiAgICAgICAgICAgICAgICBhc3luYyBmaWx0cmVyKG9iamVjdHMsIGZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9TaSBvbiBhIHVuIGZpbHRyZSBkaXNwb3NcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgZmlsdGVyIG9mIGZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gXCJkaXNwb3NcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0RGlzcG9BdmFpbGFiaWxpdGllcyhmaWx0ZXIsIG9iamVjdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAvL09uIHBhcmNvdXJzIGxlcyBvYmpldHNcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgb2JqZWN0IG9mIG9iamVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9iamVjdElzVmFsaWRGb3JGaWx0ZXIob2JqZWN0LCBmaWx0ZXJzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5maWx0ZXJPayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5maWx0ZXJPayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyRGlzcG9zT24gPT09IGZhbHNlICYmIG9iamVjdC5jdXN0b21faHRtbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5jdXN0b21faHRtbCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgI
3H1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFzeW5jIGdldERpc3BvQXZhaWxhYmlsaXRpZXMoZmlsdGVyLCBvYmplY3RzKSB7XG5cblxuICAgICAgICAgICAgICAgICAgICAvL1NpIG9uIGEgYmVzb2luIGRlIGNoYXJnZXIgbGVzIHJlc3VsdGF0cyAoMWVyIGNoYXJnZW1lbnQgb3VjaGFuZ2VtZW50IGRlIHZhbGV1cilcbiAgICAgICAgICAgICAgICAgICAgaWYgKChmaWx0ZXIubmVlZFRvQ2FsbEFQSSA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlci5uZWVkVG9DYWxsQVBJID09PSB0cnVlKSAmJiBmaWx0ZXIuZGF0ZV9kZWJ1dCAmJiBmaWx0ZXIuZGF0ZV9maW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vT24gcmVjdXBlcmUgbGVzIG9iamV0cyBhdmVjIE9TXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3BlblN5c3RlbU9iamV0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgb2JqZWN0IG9mIG9iamVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0Lm9zX3VpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblN5c3RlbU9iamV0cy5wdXNoKHtpZDogb2JqZWN0LmlkLCBvc191aTogb2JqZWN0Lm9zX3VpfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblN5c3RlbU9iamV0cy5wdXNoKHtpZDogb2JqZWN0LmlkfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9MYW5jZXIgbCdhamF4IHVuaXF1ZW1lbnQgc2kgb24gYSBjaGFuZ2VyIHVuZSBkZXMgZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1Npbm9uIG9uIGF1cmEgZMOpasOgIGxlcyB2YWxldXJzIGRhbnMgbGUgZmlsdHJlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBxdWVyeV9wYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiAnYXBpZGFlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlY3VyaXR5JzogYXBpZGFlX2xpc3QuYWpheC5zZWN1cml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRyb2xsZXInOiAnUHVibGljQWpheCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXRob2QnOiAnZ2V0T1NEaXNwb3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFyYW1zJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29iamVjdHMnOiBvcGVuU3lzdGVtT2JqZXRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGVfZGVidXQnOiBmaWx0ZXIuZGF0ZV9kZWJ1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRlX2Zpbic6IGZpbHRlci5kYXRlX2ZpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT24gY2FsbCBvcGVuIHN5c3RlbSBwb3VyIHbDqXJpZmllciBsZXMgb2JqZXRzIHZhbGlkZSBhdmVjIGNlcyBkYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgalF1ZXJ5LnBvc3QoYXBpZGFlX2xpc3QuYWpheC5hamF4dXJsLCBxdWVyeV9wYXJhbXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mYWlsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdEw6lzb2zDqSwgdW5lIGVycmV1ciBlc3Qgc3VydmVudWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRvbmUoKHJlc3BvbnNlKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YXMuaWRzX2FwaWRhZV9hdmFpbGFibGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLml0ZW1zID0gcmVzcG9uc2UuZGF0YXMuaWRzX2FwaWRhZV9hdmFpbGFibGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWRzX29zX2F2YWlsYWJsZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGFzLmlkc19vc19hdmFpbGFibGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzX29zX2F2YWlsYWJsZXMgPSByZXNwb25zZS5kYXRhcy5pZHNfb3NfYXZhaWxhYmxlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgb2JqIG9mIG9iamVjdHMpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuaXRlbXMuaW5jbHVkZXMob2JqLmlkKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
3HZhciBodG1sID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9zID0gaWRzX29zX2F2YWlsYWJsZXNbb2JqLmlkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3MgJiYgb3MucHJpeCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzcG9BUGFydGlyRGUgPSB0aGlzLnNldHRpbmdzLmxhYmVscy5kaXNwb3MuYV9wYXJ0aXJfZGUucmVwbGFjZSgnJXMnLCBvcy5wcml4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJpY2VcIj4ke2Rpc3BvQVBhcnRpckRlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzcG9UZXh0ZSA9IHRoaXMuc2V0dGluZ3MubGFiZWxzLmRpc3Bvcy5kaXNwb25pYmxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtZGlzcG9uaWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXNwb25pYmxlXCI+JHtkaXNwb1RleHRlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aHRtbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmN1c3RvbV9odG1sID0gaHRtbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5uZWVkVG9DYWxsQVBJID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvL0ZpbHRyZSBsZXMgb2JqZXRzXG4gICAgICAgICAgICAgICAgYXN5bmMgZmlsdGVyT2JqZWN0cyhmaWVsZCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JjZU1vdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkLmZvcmNlX21vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlTW92ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQgPT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpbHRlcnMpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT24gcmVnYXJkZSBzaSBsZSBjaGFtcHMgcGV1dCBmb3JjZXIgbGUgbW9vdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuZm9yY2VfbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1BvdXIgbCdpbnRhbnQgaWwgbid5IGEgcXVlIGRlcyBzZWxlY3RzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5tb2RlID09PSAnc2VsZWN0JyAmJiBmaWVsZC5hbGxfbGFiZWwgIT09IGZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZU1vdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcmNlTW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRPZk1hcCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5tYXAuZm9yY2VNYXBGaWx0ZXJNb3ZlKCkudGhlbihhc3luYyAoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVVybCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5maWx0cmVyKHRoaXMub2JqZWN0cywgdGhpcy5maWx0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVVybCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmZpbHRyZXIodGhpcy5vYmplY3RzLCB0aGlzLmZpbHRlcnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vRmlsdHJlIGxlcyBvYmpldHMgdGVtcG9yYWlyZVxuICAgICAgICAgICAgICAgIGFzeW5jIGZpbHRlclRlbXBzT2JqZWN0cyhmaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmZpbHRyZXIodGhpcy50ZW1wT2JqZWN0cywgdGhpcy50ZW1wRmlsdGVycyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvL1bDqXJpZmllIHNpIHVuIG9iamV0IGV0IHZhbGlkZSBwb3VyIGxlcyBmaWx0cmVzIHBhc3PDqVxuICAgICAgICAgICAgICAgIG9iamVjdElzVmFsaWRGb3JGaWx0ZXIob2JqZWN0LCBmaWx0ZXJzKSB7XG5cblxuICAgICAgICAgICAgICAgICAgICB2Y
3XIgb25lRmFsc2UgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAvL09uIHBhcmNvdXJzIGxlcyBmaWx0cmVzXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGZpbHRlciBvZiBmaWx0ZXJzKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vU2kgYydlc3QgdW5lIGNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLm1vZGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NpIGlsIGRvaXMgdG91dCBtYXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIub3BlcmF0b3IgPT09ICdhbmQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbmVPcHRpb25GYWxzZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBvcHRpb24gb2YgZmlsdGVyLm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24udmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uLml0ZW1zLmluY2x1ZGVzKG9iamVjdC5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZU9wdGlvbkZhbHNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU2kgdW5lIGRlcyBvcHRpb25zIG4nZXN0IHBhcyBib25uZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob25lT3B0aW9uRmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQWxvcnMgbCdvYmpldCBuJ2VzdCBwYXMgYm9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVGYWxzZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlci5vcGVyYXRvciA9PT0gJ29yJykge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbmVPdGlvbnNIYXZlVmFsdWUgPSBmYWxzZTtcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC8vRXN0LWNlIHF1ZSB1bmUgZGVzIG9wdGlvbnMgZXN0IGJvbm5lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbmVPcHRpb25UcnVlID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgb3B0aW9uIG9mIGZpbHRlci5vcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVPdGlvbnNIYXZlVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLml0ZW1zLmluY2x1ZGVzKG9iamVjdC5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZU9wdGlvblRydWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSB1biBkZXMgY2hhbXBzIGVzdCBjaG9pc2lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9uZU90aW9uc0hhdmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBhdWN1bmUgZGVzIG9wdGlvbnMgbidlc3QgYm9ubmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbmVPcHRpb25UcnVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQWxvcnMgbCdvYmpldCBuJ2VzdCBwYXMgYm9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lRmFsc2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlci5tb2RlID09PSAnc2VsZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBpbCB5IGEgdW5lIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIudmFsdWUgJiYgZmlsdGVyLnZhbHVlICE9PSBmaWx0ZXIuYWxsX2xhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL29uIGNoZXJjaGUgbCdvcHRpb24gY2hvaXNpdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkT3B0aW9uID0gZmlsdGVyLm9wdGlvbnMuZmluZChmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdC5sYWJlbCA9PT0gZmlsdGVyLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZE9wdGlvbi5pdGVtcy5pbmNsdWRlcyhvYmplY3QuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZUZhbHNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
3H1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlci50eXBlID09PSAnZGF0ZXMnKSB7XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc1ZhbGlkID0gdGhpcy5pc1ZhbGlkZUZvckRhdGVGaWx0ZXIoZmlsdGVyLCBvYmplY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZUZhbHNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlci5tb2RlID09PSAncmFuZ2UnKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1Blcm1ldCBkZSBzYXZvaXIgc2kgb24gYSBmaWx0cmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlQ2hhbmdlZCA9IGZhbHNlO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NpIG9uIGEgdW5lIHZhbGV1ciBkZSBkw6lwYXJ0IGNob2lzaXQgZXQgcXVlIGNlIG4nZXN0IHBhcyBsYSB2YWxldXIgcGFyIGTDqWZhdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLnN0YXJ0ICYmIHBhcnNlRmxvYXQoZmlsdGVyLnN0YXJ0KSAhPT0gcGFyc2VGbG9hdChmaWx0ZXIubWluKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NpIG9uIGEgdW5lIHZhbGV1ciBkZSBmaW4gY2hvaXNpdCBldCBxdWUgY2Ugbidlc3QgcGFzIGxhIHZhbGV1ciBwYXIgZMOpZmF1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuZW5kICYmIHBhcnNlRmxvYXQoZmlsdGVyLmVuZCkgIT09IHBhcnNlRmxvYXQoZmlsdGVyLm1heCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NpIG9uIGEgdW5lIHZhbGV1ciBkZSBmaWx0cmUgY2hvaXNpdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZUNoYW5nZWQpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NpIGwnb2JqZXQgbidhIHBhcyBsYSBjbGUsIGlsIGVzdCBmb3JjZW1lbnQgZmF1eFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W2ZpbHRlci5maWVsZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lRmFsc2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlci5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5zdGFydCA9IGZpbHRlci5taW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCBmaWx0ZXIgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBjJ2VzdCB1biBvYmplY3QgYydlc3QgcXVlIG9uIGEgdW4gbWluIGV0IHVuIG1heFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3RbZmlsdGVyLmZpZWxkXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W2ZpbHRlci5maWVsZF0ubWluIDwgZmlsdGVyLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZUZhbHNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3RbZmlsdGVyLmZpZWxkXSA8IGZpbHRlci5zdGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVGYWxzZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlci5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuZW5kID0gZmlsdGVyLm1heDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBjJ2VzdCB1biBvYmplY3QgYydlc3QgcXVlIG9uIGEgdW4gbWluIGV0IHVuIG1heFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3RbZmlsdGVyLmZpZWxkXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W2ZpbHRlci5maWVsZF0ubWF4ID4gZmlsdGVyLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVGYWxzZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W2ZpbHRlci5maWVsZF0gPiBmaWx0ZXIuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZUZhbHNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIudHlwZSA9PT0gJ2Rpc3BvcycpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuZGF0ZV9kZWJ1dCAmJiBmaWx0ZXIuZGF0ZV9maW4gJiYgZmlsdGVyLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyLml0ZW1zLmluY2x1ZGVzKG9iamVjdC5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZUZhbHNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgI
3H1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAob25lRmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgaXNWYWxpZGVGb3JEYXRlRmlsdGVyKGZpbHRlciwgb2JqZWN0KSB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9TaSBvbiBhIHBhcyBkZSBkYXRlIGRlIGZpbHRyZSxcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIuZGF0ZV9kZWJ1dCAmJiAhZmlsdGVyLmRhdGVfZmluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjJ2VzdCB2YWxpZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAvL09uIGNyw6llciB0b3V0ZXMgbGVzIHZhcmlhYmxlcyBxdWkgc2Vyb250IHV0aWxpc8OpXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuZGF0ZV9kZWJ1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwbGl0U3RhcnQgPSBmaWx0ZXIuZGF0ZV9kZWJ1dC5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlckRlYnV0ID0gRGF0ZS5wYXJzZShzcGxpdFN0YXJ0WzBdLCBzcGxpdFN0YXJ0WzFdIC0gMSwgc3BsaXRTdGFydFsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLmRhdGVfZmluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
3XIgc3BsaXRFbmQgPSBmaWx0ZXIuZGF0ZV9maW4uc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJGaW4gPSBEYXRlLnBhcnNlKHNwbGl0RW5kWzBdLCBzcGxpdEVuZFsxXSAtIDEsIHNwbGl0RW5kWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBvbmVWYWxpZGVQZXJpb2RlID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9TaSBvbiBmaWx0cmUgYXZlYyB1bmUgZGF0ZSBkZSBkw6lidXQgZXQgZGUgZmluXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuZGF0ZV9kZWJ1dCAmJiBmaWx0ZXIuZGF0ZV9maW4pIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBsJ29iamVjdCBhIGRlcyBww6lyaW9kZXMgZCdvdXZlcnR1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Qub3V2ZXJ0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT24gcGFyY291cnMgbGVzIHDDqXJpb2Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHBlcmlvZGUgb2Ygb2JqZWN0Lm91dmVydHVyZXMpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL09uIHLDqWN1cMOocmUgbGEgZGF0ZSBkZSBkw6lidXQgZGUgbGEgcMOpcmlvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwbGl0RW5kT2JqID0gcGVyaW9kZS5kdS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y
3XIgcGVyaW9kZURhdGVEdSA9IERhdGUucGFyc2Uoc3BsaXRFbmRPYmpbMF0sIHNwbGl0RW5kT2JqWzFdIC0gMSwgc3BsaXRFbmRPYmpbMl0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT24gcsOpY3VwZXJlIGxhIGRhdGUgZGUgZmluIGRlIGxhIHDDqXJpb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzcGxpdFN0YXJ0T2JqID0gcGVyaW9kZS5hdS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGVyaW9kZURhdGVBdSA9IERhdGUucGFyc2Uoc3BsaXRTdGFydE9ialswXSwgc3BsaXRTdGFydE9ialsxXSAtIDEsIHNwbGl0U3RhcnRPYmpbMl0pO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBlcmlvZGVJc1ZhbGlkZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBsJ29iamV0IGZpbmkgYXByw6hzIGxhIGRhdGUgZGUgZMOpYnV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJpb2RlRGF0ZUF1IDwgZmlsdGVyRGVidXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZGVJc1ZhbGlkZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBsJ29iamV0IGNvbW1lbmNlIGFwcsOocyBsYSBkYXRlIGRlIGZpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVyaW9kZURhdGVEdSA+IGZpbHRlckZpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyaW9kZUlzVmFsaWRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NpIGxhIHDDqXJpb2RlIGVzdCB2YWxpZGUgcG91ciBsZXMgZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmlvZGVJc1ZhbGlkZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9PbiByw6ljdXDDqHJlIGxhIGRhdGUgZGUgZMOpYnV0IGxhIHBsdXMgZ3JhbmRlIGVudHJlIGxhIHDDqXJpb2RlIGV0IGxlIGZpbHRyZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9QYXIgZMOpZmF1dCwgb24gcHJlbmQgbGUgZmlsdHJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RhcnQgPSBmaWx0ZXJEZWJ1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJpb2RlRGF0ZUR1ID4gZmlsdGVyRGVidXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHBlcmlvZGVEYXRlRHU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL09uIHLDqWN1cMOocmUgbGEgZGF0ZSBkZSBmaW4gbGEgcGx1cyBwZXRpdGUgZW50cmUgbGEgcMOpcmlvZGUgZXQgbGUgZmlsdHJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1BhciBkw6lmYXV0LCBvbiBwcmVuZCBsZSBmaWx0cmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbmQgPSBmaWx0ZXJGaW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVyaW9kZURhdGVBdSA8IGZpbHRlckZpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHBlcmlvZGVEYXRlQXU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT24gcsOpY3Vww6hyZSBsZSBub21icmUgZGUgam91cnMgZGUgbGEgcMOpcmlvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBlbmQgLSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheXMgPSBkaWZmIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NpIGxhIHDDqXJpb2RlIGVzdCBkZSBtb2lucyBkJ3VuZSBzZW1haW5lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF5cyA8IDcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL09uIGRvaXQgdsOpcmlmaWVyIGxlcyBqb3VycyBkJ291dmVydHVyZSBwb3VyIG5lIHBhcyB0b21iZXIgc3VyIHVuIGpvdXJzIGZlcm3DqVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRlU3RhcnQgPSBuZXcgRGF0ZShzdGFydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd2Vla0RheXMgPSBbJ0RJTUFOQ0hFJywgJ0xVTkRJJywgJ01BUkRJJywgJ01FUkNSRURJJywgJ0pFVURJJywgJ1ZFTkRSRURJJywgJ1NBTUVESSddXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb25EYXlWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT24gc3RvY2sgbGUgam91clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50RGF5TnVtYmVyID0gZGF0ZVN0YXJ0LmdldERheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKGRheXMgKyAxKTsgaSsrKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9PbiByw6ljdXBlcmUgbGUgam91clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF5ID0gd2Vla0RheXNbY3VycmVudERheU51bWJlcl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmlvZGUuam91cnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJpb2RlLmpvdXJzLmluY2x1ZGVzKGRheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRheVZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
3H1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudERheU51bWJlcisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudERheU51bWJlciA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnREYXlOdW1iZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob25EYXlWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVWYWxpZGVQZXJpb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZVZhbGlkZVBlcmlvZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIuZGF0ZV9kZWJ1dCkgeyAvL1NpIGZpbHRyZSBhdmVjIHVuaXF1ZW1lbnQgZGF0ZSBkZSBkw6lidXRcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBsJ29iamVjdCBhIGRlcyBww6lyaW9kZXMgZCdvdXZlcnR1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Qub3V2ZXJ0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT24gcGFyY291cnMgbGVzIHDDqXJpb2Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHBlcmlvZGUgb2Ygb2JqZWN0Lm91dmVydHVyZXMpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL09uIHLDqWN1cMOocmUgbGEgZGF0ZSBkZSBmaW4gZGUgbGEgcMOpcmlvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNwbGl0U3RhcnRPYmogPSBwZXJpb2RlLmF1LnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwZXJpb2RlRGF0ZUF1ID0gRGF0ZS5wYXJzZShzcGxpdFN0YXJ0T2JqWzBdLCBzcGxpdFN0YXJ0T2JqWzFdIC0gMSwgc3BsaXRTdGFydE9ialsyXSk7XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1BhciBkw6lmYXV0IGxhIHDDqXJpb2RlIGVzdCB2YWxpZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBlcmlvZGVJc1ZhbGlkZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBsYSBkYXRlIGRlIGZpbiBkZSBsYSBww6lyaW9kZSBlc3QgYXZhbnQgbGUgZMOpYnV0IGR1IGZpbHRyZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVyaW9kZURhdGVBdSA8IGZpbHRlckRlYnV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJpb2RlSXNWYWxpZGUgPSBmYWxzZTsgLy8gbGEgcMOpcmlvZGUgbidlc3QgcGFzIHZhbGlkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBsYSBww6lyaW9kZSBlc3QgdmFsaWRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJpb2RlSXNWYWxpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT24gYSB1bmUgcMOpcmlvZGUgcXVpIG1hdGNoIGRvbmMgbCdvYmpldCBldCBPS1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lVmFsaWRlUGVyaW9kZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLmRhdGVfZmluKSB7IC8vU2lsIGZpbHRyZSB1bmlxdWVtZW50IGF2ZWMgZGF0ZSBkZSBmaW5cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBsJ29iamVjdCBhIGRlcyBww6lyaW9kZXMgZCdvdXZlcnR1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3Qub3V2ZXJ0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT24gcGFyY291cnMgbGVzIHDDqXJpb2Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHBlcmlvZGUgb2Ygb2JqZWN0Lm91dmVydHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9PbiByw6ljdXBlcmUgbGEgZGF0ZSBkZSBkw6lidXQgZGUgbGEgcMOpcmlvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNwbGl0RW5kT2JqID0gcGVyaW9kZS5kdS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGVyaW9kZURhdGVEdSA9IERhdGUucGFyc2Uoc3BsaXRFbmRPYmpbMF0sIHNwbGl0RW5kT2JqWzFdIC0gMSwgc3BsaXRFbmRPYmpbMl0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUGFyIGTDqWZhdXQgbGEgcMOpcmlvZGUgZXN0IHZhbGlkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGVyaW9kZUlzVmFsaWRlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NpIGxhIGRhdGUgZGUgZMOpYnV0IGRlIGxhIHDDqXJpb2RlIGVzdCBhcHLDqHMgbGEgZmluIGR1IGZpbHRyZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVyaW9kZURhdGVEdSA+IGZpbHRlckZpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyaW9kZUlzVmFsaWRlID0gZmFsc2U7IC8vIGxhIHDDqXJpb2RlIG4nZXN0IHBhcyB2YWxpZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU2kgbGEgcMOpcmlvZGUgZXN0IHZhbGlkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVyaW9kZUlzVmFsaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL09uIGEgdW5lIHDDqXJpb2RlIHF1aSBtYXRjaCBkb25jIGwnb2JqZXQgZXQgT0tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZVZhbGlkZVBlcmlvZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
3H1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uZVZhbGlkZVBlcmlvZGU7XG5cbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgaXNWYWxpZEZvckRhdGUoZmlsdGVyLCBvYmplY3QpIHtcblxuICAgICAgICAgICAgICAgICAgICAvL1NpIG9uIGEgc29pdCB1bmUgZGF0ZSBkZSBkw6lidXQsIHNvaXQgdW5lIGRhdGUgZGUgZmluXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuZGF0ZV9kZWJ1dCB8fCBmaWx0ZXIuZGF0ZV9maW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vU2kgbCdvYmpldCBuJ2FzIHBhcyBkJ2luZm9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb2JqZWN0LmRhdGVfZGVidXQgJiYgIW9iamVjdC5kYXRlX2Zpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGZpbHRlciwgb2JqZWN0KTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlci5kYXRlX2RlYnV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BsaXRTdGFydCA9IGZpbHRlci5kYXRlX2RlYnV0LnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
3XIgZnJvbSA9IERhdGUucGFyc2Uoc3BsaXRTdGFydFswXSwgc3BsaXRTdGFydFsxXSAtIDEsIHNwbGl0U3RhcnRbMl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlci5kYXRlX2Zpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwbGl0RW5kID0gZmlsdGVyLmRhdGVfZmluLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG8gPSBEYXRlLnBhcnNlKHNwbGl0RW5kWzBdLCBzcGxpdEVuZFsxXSAtIDEsIHNwbGl0RW5kWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZGF0ZV9kZWJ1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwbGl0U3RhcnRPYmogPSBvYmplY3QuZGF0ZV9kZWJ1dC5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ialN0YXJ0RGF0ZSA9IERhdGUucGFyc2Uoc3BsaXRTdGFydE9ialswXSwgc3BsaXRTdGFydE9ialsxXSAtIDEsIHNwbGl0U3RhcnRPYmpbMl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5kYXRlX2Zpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwbGl0T2JqRW5kID0gb2JqZWN0LmRhdGVfZmluLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqRW5kRGF0ZSA9IERhdGUucGFyc2Uoc3BsaXRPYmpFbmRbMF0sIHNwbGl0T2JqRW5kWzFdIC0gMSwgc3BsaXRPYmpFbmRbMl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLmRhdGVfZGVidXQgJiYgZmlsdGVyLmRhdGVfZmluKSB7IC8vRlJPTSAmIFRPXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3QuZGF0ZV9maW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NpIGwnb2JqZXQgZmluaSBhcHLDqHMgbGEgZGF0ZSBkZSBkw6lidXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqRW5kRGF0ZSA8IGZyb20pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC5kYXRlX2RlYnV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBsJ29iamV0IGNvbW1hbmRlIGFwcsOocyBsYSBkYXRlIGRlIGZpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmpTdGFydERhdGUgPiB0bykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIC8vc2kgb24gYSB1bmUgZGF0ZSBkZSBkw6lidXRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlci5kYXRlX2RlYnV0KSB7IC8vRlJPTVxuICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBsJ29iamV0IGEgdW5lIGRhdGUgZGUgZmluXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmRhdGVfZmluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBsYSBkZSBmaW4gZGUgbCdvYmpldCBlc3QgcGFzc8OpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iakVuZERhdGUgPCBmcm9tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIuZGF0ZV9maW4pIHsgLy8gVE9cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBsJ29iamV0IGEgdW5lIGRhdGUgZGUgZMOpYnV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0LmRhdGVfZGVidXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NpIGxhIGRlIGTDqWJ1dCBkZSBsJ29iamV0IGVzdCBwYXNzw6lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqU3RhcnREYXRlID4gdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNWYWxpZDtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgaXNJVmFsaWRlRm9yRGF0ZXMoZmlsdGVyLCBwZXJpb2RlKSB7XG5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vUGVybWV0IGRlIHJlc2V0IHRvdXMgbGVzIGZpbHRyZXMsIHRlbXBvcmFpcmUgZXQgbm9ybWF1eFxuICAgICAgICAgICAgICAgIHJlc2V0QWxsRmlsdGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAvL09uIHJlc2V0IGxlcyBmaWx0cmUgdGVtcG9yYWlyZSBldCBsZXMgZmlsdHJlcyBhcHBsaXF1ZXJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEZpbHRlcnModGhpcy5maWx0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEZpbHRlcnModGhpcy50ZW1wRmlsdGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJPYmplY3RzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGVtcHNPYmplY3RzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VVcmwoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vUmVzZXQgdG91cyBsZXMgZmlsdHJlcyBwYXNzZXIgZW4gcGFyYW1ldHJlXG4gICAgICAgICAgICAgICAgcmVzZXRGaWx0ZXJzKGZpbHRlcnMpIHtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBmaWx0ZXIgb2YgZmlsdGVycykge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLm1vZGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBvcHRpb24gb2YgZmlsdGVyLm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIubW9kZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBmaWx0ZXIuYWxsX2xhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIubW9kZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5zdGFydCA9IGZpbHRlci5taW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmVuZCA9IGZpbHRlci5tYXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlci5tb2RlID09PSAnZGF0ZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmRhdGVfZGVidXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5kYXRlX2ZpbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgI
3H1cbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICAgIC8vTE9BRElOR1xuICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAgICAvL1Blcm1ldCBkZSBjaGFyZ2VyIGxlcyBvYmplY3RzXG4gICAgICAgICAgICAgICAgbG9hZE9iamVjdHMoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcGlkYWVfbGlzdCAhPT0gJ3VuZGVmaW5lZCcgJiYgYXBpZGFlX2xpc3Qub2JqZWN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5lbnRyaWVzKGFwaWRhZV9saXN0Lm9iamVjdHMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXBpZGFlX2xpc3Qub2JqZWN0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuaWQgPSBOdW1iZXIodmFsdWUuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5maWx0ZXJPayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLm1hcE9rID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuaG92ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuY3VzdG9tX2h0bWwgPSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0cyA9IG9iamVjdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy9QZXJtZXQgZGUgY2hhcmdlciBsZXMgZmlsdHJlc1xuICAgICAgICAgICAgICAgIGxvYWRGaWx0ZXJzKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFwaWRhZV9saXN0ICE9PSAndW5kZWZpbmVkJyAmJiBhcGlkYWVfbGlzdC5maWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmVud
3HJpZXMoYXBpZGFlX2xpc3QuZmlsdGVycykubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhcGlkYWVfbGlzdC5maWx0ZXJzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5pZCA9IGtleTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtvcHRLZXksIG9wdFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZS5vcHRpb25zKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubW9kZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdFZhbHVlLnR5cGUgPSB2YWx1ZS5tb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3B0VmFsdWUudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdFZhbHVlLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaChvcHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubW9kZSA9PT0gJ3NlbGVjdCcgJiYgIXZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZSA9IHZhbHVlLmFsbF9sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tb2RlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y
3XIgbWluTWF4T2JqID0gdGhpcy5nZXRSYW5nZU1pbk1heCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWluTWF4T2JqLm1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUubWluID0gbWluTWF4T2JqLm1pbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtaW5NYXhPYmoubWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5tYXggPSBtaW5NYXhPYmoubWF4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZ2V0UmFuZ2VNaW5NYXgoZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtaW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICB2Y
3XIgbWF4ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLmZpZWxkKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG9iamVjdCBvZiB0aGlzLm9iamVjdHMpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZFZhbHVlID0gb2JqZWN0W2ZpbHRlci5maWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWVsZFZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUubWluIDwgbWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluID0gZmllbGRWYWx1ZS5taW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlLm1heCA+IG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCA9IGZpZWxkVmFsdWUubWF4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUgPCBtaW4gfHwgbWluID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4gPSBmaWVsZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRWYWx1ZSA+IG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCA9IGZpZWxkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IG1pbixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heDogbWF4LFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGNoYW5nZVVybCgpIHtcblxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVTYXZlU2VhcmNoID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMuZ2V0RmlsdGVyc1VybCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zYXZlU2VhcmNoSW5VcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBudWxsLCB1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvb2tpZUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb29raWVzLnNldCh0aGlzLmNvb2tpZUtleSwgdXJsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRGaWx0ZXJzVXJsKCkge1xuXG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRVcmwgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWVcblxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBiYXNlVXJsID0gY3VycmVudFVybDtcblxuXG4gICAgICAgICAgICAgICAgICAgIC8vU2kgaWwgIHkgYSBkZXMgcGFyYW1ldHJlcywgb24gcsOpY3VwZXJlIGwndXJsIGRlIGJhc2VcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKC8uKz8oPz1cXC9bcnBtZF1cXC8pLyk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IG1hdGNoID0gY3VycmVudFVybC5tYXRjaChyZWdleCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNlVXJsID0gbWF0Y2hbMF0gKyAnLyc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2Y
3XIgdXJsID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9GSUxURVJTXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGZpbHRlciBvZiB0aGlzLmZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIubW9kZSA9PT0gXCJjaGVja2JveFwiKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG9wdGlvbiBvZiBmaWx0ZXIub3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnB1c2godGhpcy5zbHVnaWZ5KG9wdGlvbi5sYWJlbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gdGhpcy5zbHVnaWZ5KGZpbHRlci5sYWJlbCkgKyAnLyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsICs9IG9wdGlvbnMuam9pbignLScpICsgJy8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLm1vZGUgPT09IFwiZGF0ZXNcIikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlci5kYXRlX2RlYnV0IHx8IGZpbHRlci5kYXRlX2Zpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gdGhpcy5zbHVnaWZ5KGZpbHRlci5zbHVnKSArICcvJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLmRhdGVfZGVidXQpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsICs9IHRoaXMuc2x1Z2lmeShmaWx0ZXIuZGF0ZV9kZWJ1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsICs9ICctJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLmRhdGVfZmluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gdGhpcy5zbHVnaWZ5KGZpbHRlci5kYXRlX2Zpbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJy8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLm1vZGUgPT09IFwicmFuZ2VcIikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmaWx0ZXIuc3RhcnQgfHwgZmlsdGVyLmVuZCkgJiYgKE51bWJlcihmaWx0ZXIuc3RhcnQpICE9PSBOdW1iZXIoZmlsdGVyLm1pbikgfHwgTnVtYmVyKGZpbHRlci5lbmQpICE9PSBOdW1iZXIoZmlsdGVyLm1heCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCArPSB0aGlzLnNsdWdpZnkoZmlsdGVyLmxhYmVsKSArICcvJyArIHRoaXMuc2x1Z2lmeShmaWx0ZXIuc3RhcnQpICsgJy0nICsgdGhpcy5zbHVnaWZ5KGZpbHRlci5lbmQpICsgJy8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLnZhbHVlICE9PSBmaWx0ZXIuYWxsX2xhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCArPSB0aGlzLnNsdWdpZnkoZmlsdGVyLmxhYmVsKSArICcvJyArIHRoaXMuc2x1Z2lmeShmaWx0ZXIudmFsdWUpICsgJy8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmwgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSAnci8nICsgdXJsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMubWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5tYXAuZmlsdGVyT25Nb3ZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNlbnRlciA9IHRoaXMuJHJlZnMubWFwLm1hcC5nZXRDZW50ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgem9vbSA9IHRoaXMuJHJlZnMubWFwLm1hcC5nZXRab29tKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyAnbS8nICsgY2VudGVyLmxhdCArICcvJyArIGNlbnRlci5sbmcgKyAnLycgKyB6b29tICsgJy8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXNwbGF5TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5lZWRUb0FkZE1vZGVJblVybCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmRlZmF1bHRNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlzcGxheU1vZGUgPT09IHRoaXMuc2V0dGluZ3MuZGVmYXVsdE1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFRvQWRkTW9kZUluVXJsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkVG9BZGRNb2RlSW5VcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyAnZC8nICsgdGhpcy5kaXNwbGF5TW9kZSArICcvJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAvL1BBTklHQVRJT05cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMubGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRQYWdlID0gdGhpcy4kcmVmcy5saXN0LmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWdlID4gMCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsICsgJ3AvJyArIChjdXJyZW50UGFnZSArIDEpICsgJy8nO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgI
3H1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IGJhc2VVcmwgKyB1cmw7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVTYXZlU2VhcmNoID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRVcmwgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnJvbV9maWNoZSA9IENvb2tpZXMuZ2V0KCdmcm9tX2ZpY2hlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zYXZlU2VhcmNoSW5VcmwpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb29raWVWYWx1ZSA9IENvb2tpZXMuZ2V0KHRoaXMuY29va2llS2V5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb29raWVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU2kgb24gdmllbnMgZCd1bmUgZmljaGUsIG9uIHLDqWN1cGVyZSBsYSB2YWxldXIgZGUgbGEgcmVjaGVyY2hlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcm9tX2ZpY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VXJsID0gY29va2llVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vT24gc3VwcHJpbWUgbGVzIHBhcmFtcyBkZXMgZmlsdHJlc1xuICAgICAgICAgICAgICAgICAgICAgICAgQ29va2llcy5yZW1vdmUoJ2Zyb21fZmljaGUnLCB7cGF0aDogJy8nfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
3XIgYmFzZVVybCA9IGN1cnJlbnRVcmw7XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JBU0UgVVJMJywgYmFzZVVybCk7XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9TaSBpbCAgeSBhIGRlcyBwYXJhbWV0cmVzLCBvbiByw6ljdXBlcmUgbCd1cmwgZGUgYmFzZVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdleEJhc2UgPSBuZXcgUmVnRXhwKC8uKz8oPz1cXC9bcnBtZF1cXC8pLyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXRjaCA9IGN1cnJlbnRVcmwubWF0Y2gocmVnZXhCYXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VVcmwgPSBtYXRjaFswXSArICcvJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9PbiByZWN1cGVyZSBqdXN0ZSBsZXMgZmlsdHJlc1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgclJlZ2V4ID0gL1xcL3JcXC8oPzooPyFcXC9bbXBkXVxcLykuKSsvO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgck1hdGNoID0gY3VycmVudFVybC5tYXRjaChyUmVnZXgpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyTWF0Y2gpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyTWF0Y2gubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyc1N0cmluZyA9IHJNYXRjaFswXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFydHMgPSBmaWx0ZXJzU3RyaW5nLnNwbGl0KCcvJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsdGVyU2x1ZyA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlclZhbHVlcyA9IHBhcnRzWyhpICsgMSldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL09uIGNoYXJnZSBsZSBmaWx0cmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0cmUgPSB0aGlzLmZpbHRlcnMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNsdWdpZnkoaXRlbS5sYWJlbCkgPT09IGZpbHRlclNsdWcgfHwgdGhpcy5zbHVnaWZ5KGl0ZW0uc2x1ZykgPT09IGZpbHRlclNsdWc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdHJlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRyZS5tb2RlID09PSAnY2hlY2tib3gnKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9PbiBzcGxpdCBsZXMgY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrYm94cyA9IGZpbHRlclZhbHVlcy5zcGxpdCgnLScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNoZWNrYm94IG9mIGNoZWNrYm94cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wdGlvbiA9IGZpbHRyZS5vcHRpb25zLmZpbmQoKG9wdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNsdWdpZnkob3B0LmxhYmVsKSA9PT0gY2hlY2tib3g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdHJlLm1vZGUgPT09ICdkYXRlcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGVzID0gZmlsdGVyVmFsdWVzLnNwbGl0KCctJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGVzWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0cmUuZGF0ZV9kZWJ1dCA9IGRhdGVzWzBdLnJlcGxhY2UoL1tfXS9nLCAnLScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRlc1sxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdHJlLmRhdGVfZmluID0gZGF0ZXNbMV0ucmVwbGFjZSgvW19dL2csICctJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRyZS5tb2RlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdGFydF9lbmQgPSBmaWx0ZXJWYWx1ZXMuc3BsaXQoJy0nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RhcnQgPSBzdGFydF9lbmRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbmQgPSBzdGFydF9lbmRbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0cmUuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0cmUuZW5kID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gZmlsdHJlLm9wdGlvbnMuZmluZCgob3B0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zbHVnaWZ5KG9wdC5sYWJlbCkgPT09IGZpbHRlclZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRyZS52YWx1ZSA9IG9wdGlvbi5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSArIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
3H1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvL09uIHJlY3VwZXJlIGp1c3RlIGxhIHBhZ2luYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IHBSZWdleCA9IC9cXC9wXFwvKD86KD8hXFwvW3JtXVxcLykuKSsvO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcFJlZ2V4ID0gL1xcL3BcXC8oWzAtOV0rKS87XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwTWF0Y2ggPSBjdXJyZW50VXJsLm1hdGNoKHBSZWdleCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwTWF0Y2gpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwTWF0Y2gubGVuZ3RoID4gMSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYWdlID0gcE1hdGNoWzFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFBhZ2UgPSAoTnVtYmVyKHBhZ2UpIC0gMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbVJlZ2V4ID0gLy4qXFwvbVxcLyhbMC05Li8tXSspLztcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1NYXRjaCA9IGN1cnJlbnRVcmwubWF0Y2gobVJlZ2V4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobU1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnRzID0gbU1hdGNoWzFdLnNwbGl0KCcvJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDIpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxhdCA9IHBhcnRzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxuZyA9IHBhcnRzWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHpvb20gPSBwYXJ0c1syXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0TGF0ID0gbGF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0TG5nID0gbG5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Wm9vbSA9IHpvb207XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZFJlZ2V4ID0gL1xcL2RcXC8oW2EtekEtWl0rKVxcLy87XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkTWF0Y2ggPSBjdXJyZW50VXJsLm1hdGNoKGRSZWdleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRNYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkaXNwbGF5TW9kZSA9IGRNYXRjaFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TW9kZSA9IGRpc3BsYXlNb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzbHVnaWZ5KHRleHQpIHtcblxuXG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpICAgICAgICAgICAgICAgICAgIC8vIHNwbGl0IGFuIGFjY2VudGVkIGxldHRlciBpbiB0aGUgYmFzZSBsZXR0ZXIgYW5kIHRoZSBhY2VudFxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKSAgIC8vIHJlbW92ZSBhbGwgcHJldmlvdXNseSBzcGxpdCBhY2NlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1smXFwvXFxcXCMsICsoKSR+JS4nXCI6Kj88Pnt9LV0vZywgJ18nKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xccysvZywgJy0nKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1teXFx3XFwtXSsvZywgJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwtXFwtKy9nLCAnLScpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgfSk7XG5cbn0pXG5cbiJdLCJuYW1lcyI6WyJjb21wb25lbnRzIiwicGFnaW5hdGlvbiIsInRlbXBsYXRlIiwicHJvcHMiLCJkYXRhIiwiY3VycmVudFBhZ2UiLCJjb21wdXRlZCIsIm51bWJlck9mUGFnZSIsInRoaXMiLCJNYXRoIiwiY2VpbCIsIm9iamVjdHNOb25TaW1wbGlmaWVkIiwibGVuZ3RoIiwibnVtYmVyUGFyUGFnZSIsInNldHRpbmdzIiwibm9uX2FkaGVyZW50cyIsIm9iamVjdHMiLCJmaWx0ZXIiLCJvYmoiLCJhZGhlcmVudCIsIm9iamVjdHNTaW1wbGlmaWVkIiwibW91bnRlZCIsImpRdWVyeSIsIm9uIiwid2lzaExpc3RBY3Rpb24iLCJkZWZhdWx0UGFnZSIsInBhZ2UiLCJOdW1iZXIiLCJpc0luQ3VycmVudFBhZ2UiLCJwYWdlU2VsZWN0ZWQiLCJ3YXRjaCIsInVwZGF0ZSIsIm1ldGhvZHMiLCJlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCIkaXRlbSIsInRhcmdldCIsImNsb3Nlc3QiLCJpc19pbiIsInBhcmVudCIsImhhc0NsYXNzIiwicXVlcnlfcGFyYW1zIiwidGhlbWVfdmFsdWVzIiwic2VjdXJpdHkiLCJwb3N0IiwiYWpheF91cmwiLCJmYWlsIiwiYWxlcnQiLCJkb25lIiwicmVzcG9uc2UiLCJzdWNjZXNzIiwidGV4dCIsImRhdGFzIiwibmIiLCIkZW1pdCIsIml0ZW1DbGFzcyIsIm9iamVjdCIsIndpc2hsaXN0IiwiaW5kZXgiLCJzdGFydCIsImVuZCIsIm1vdXNlT3Zlck9iamVjdCIsImhvdmVyIiwibmV3UGFnZSIsImZpbHRlck9uTW92ZSIsIm1hcCIsImljb24iLCJtYXJrZXJzIiwibWFya2Vyc0dyb3VwIiwid2F0Y2hPYmplY3RDaGFuZ2UiLCJhc3luYyIsImFkZE1hcmtlcnMiLCJjZW50ZXJNYXAiLCJjcmVhdGVNYXAiLCJkZWZhdWx0Rm9sbG93T25Nb3ZlIiwiY2hhbmdlRmlsdGVyT25Nb3ZlIiwidXBkYXRlU2l6ZSIsInNldFRpbWVvdXQiLCJpbnZhbGlkYXRlU2l6ZSIsImxhdCIsImRlZmF1bHRMYXQiLCJwYXJzZUZsb2F0IiwiZGVmYXVsdF9jZW50ZXIiLCJsbmciLCJkZWZhdWx0TG5nIiwiem9vbSIsImRlZmF1bHRab29tIiwicGFyc2VJbnQiLCJMIiwiaWQiLCJzZXRWaWV3IiwiZGl2SWNvbiIsImNsYXNzTmFtZSIsImh0bWwiLCJzdmciLCJpY29uQW5jaG9yIiwid2lkdGgiLCJoZWlnaHQiLCJpY29uU2l6ZSIsInBvcHVwQW5jaG9yIiwidGlsZUxheWVyIiwidGlsZXNfdXJsIiwidGlsZXNfZGF0YXMiLCJhZGRUbyIsInNjcm9sbFdoZWVsWm9vbSIsImRpc2FibGUiLCJlbmFibGUiLCJtYXBNb3ZlIiwib3V0T2ZNYXAiLCJtYXBCb3VuZHMiLCJnZXRCb3VuZHMiLCJpbkJvdW5kcyIsInB1c2giLCJlbWl0RXZlbnRGaWx0ZXJNb3ZlciIsInJlbW92ZUFsbE1hcmtlcnMiLCJtYXJrZXIiLCJyZW1vdmUiLCJob3Zlck1hcmtlciIsImZpbmQiLCJpdGVtcyIsInRyYWNlIiwiZWFjaExheWVyIiwibGF5ZXIiLCJjb25zb2xlIiwibG9nIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiYnJpbmdUb0Zyb250IiwiZ2V0RWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsImFkZENsYXNzIiwiZmxhZyIsInNldFpJbmRleE9mZnNldCIsInJlbW92ZUNsYXNzIiwicHJvbWlzZXMiLCJtYXJrZXJfcGFyYW1zIiwidHJhY2VfZXh0IiwicHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwib21uaXZvcmUiLCJncHgiLCJiaW5kUG9wdXAiLCJrbWwiLCJhbGwiLCJncm91cCIsImZlYXR1cmVHcm91cCIsImZpdEJvdW5kcyIsImZvcmNlTWFwRmlsdGVyTW92ZSIsInBvaW50IiwiYm91bmRzIiwiX25vcnRoRWFzdCIsIl9zb3V0aFdlc3QiLCJwYWdlc2xpc3RlIiwibWF4IiwicGFnZXMiLCJpIiwidG90YWxfZGVjb21wdGUiLCJ1bnNoaWZ0IiwiY3VycmVudCIsImlzUHJldkJ0bkFjdGl2ZSIsImJ0bl9jbGFzcyIsImlzTmV4dEJ0bkFjdGl2ZSIsInBhZ2VDbGlja2VkIiwibGlzdF90b3BfeSIsIm9mZnNldCIsInRvcCIsImFuaW1hdGUiLCJzY3JvbGxUb3AiLCJwYWdlUHJldmlvdXMiLCJuZXdfcGFnZSIsInBhZ2VOZXh0IiwibW9kZXMiLCJtb2RlQ2hhbmdlIiwibmV3TW9kZSIsInNob3dGaWx0ZXJzIiwibW9kZXNMYWJlbHMiLCJtaXh0ZSIsImxpc3QiLCJjbGljayIsInV1aWQiLCJzbGlkZXIiLCJkYXRlX2RlYnV0IiwiZGF0ZV9maW4
3iLCJkYXRlX2Zpbl9taW4iLCJmbGF0cGlja2VySW5pdCIsImRlYnV0T3B0aW9uIiwiZmluT3B0aW9uIiwidXVpZHY0IiwiZmllbGQiLCJnZXREZWZhdWx0RGF0ZVBpY2tlck9wdGlvbiIsInVwZGF0ZWQiLCJtb2RlIiwiY3JlYXRlU2xpZGVyIiwiZGF0ZURlYnV0Q2hhbmdlIiwic2VsZWN0ZWREYXRlcyIsImRhdGVTdHIiLCJpbnN0YW5jZSIsIm1pbkRhdGUiLCJ2YWx1ZUNoYW5nZSIsImRhdGVGaW5DaGFuZ2UiLCJsb2NhbGUiLCJGcmVuY2giLCJhbHRGb3JtYXQiLCJhbHRJbnB1dCIsImRhdGVGb3JtYXQiLCJEYXRlIiwibWF4RGF0ZSIsInJlc2V0IiwiZGVzdHJveSIsInJldHVyblRpbWVJbkhvdXIiLCJ2YWx1ZSIsIm5iX2hvdXJzIiwiZHVyZWVfcmVuZGVyZWQiLCJyZW1haW5pbmdfbWludXRlcyIsImZsb29yIiwiaXNOYU4iLCJmb3JtYXRSYW5nZVZhbHVlIiwidHlwZSIsImFwcGVuZCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJtaW4iLCJub1VpU2xpZGVyIiwiY3JlYXRlIiwiY29ubmVjdCIsInN0ZXAiLCJmb3JtYXQiLCJkZWNpbWFscyIsInRvIiwiZnJvbSIsInJlcGxhY2UiLCJyYW5nZSIsInNwbGl0U3RhcnQiLCJzcGxpdCIsInNwbGl0RW5kIiwic3RhcnREYXRlIiwicGFyc2UiLCIkcmVmcyIsImVuZERhdGUiLCJnZXQiLCJjIiwiY3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwiVWludDhBcnJheSIsInRvU3RyaW5nIiwibXlmaWx0ZXIiLCJjbG9zZUZpbHRlcnMiLCJ2YWxpZGF0ZUZpbHRlciIsInJlZiIsIk9iamVjdCIsImVudHJpZXMiLCJfX2Fzc2lnbiIsImFzc2lnbiIsInQiLCJzIiwibiIsImFyZ3VtZW50cyIsInAiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseSIsIl9fc3ByZWFkQXJyYXlzIiwiaWwiLCJyIiwiQXJyYXkiLCJrIiwiYSIsImoiLCJqbCIsIkRFQk9VTkNFRF9DSEFOR0VfTVMiLCJGbGF0cGlja3JJbnN0YW5jZSIsImVsZW1lbnQiLCJpbnN0YW5jZUNvbmZpZyIsInNlbGYiLCJjb25maWciLCJmbGF0cGlja3IiLCJkZWZhdWx0Q29uZmlnIiwibDEwbiIsImdldENsb3Nlc3RBY3RpdmVFbGVtZW50IiwiX2EiLCJjYWxlbmRhckNvbnRhaW5lciIsImdldFJvb3ROb2RlIiwiYWN0aXZlRWxlbWVudCIsImJpbmRUb0luc3RhbmNlIiwiZm4iLCJiaW5kIiwic2V0Q2FsZW5kYXJXaWR0aCIsIndlZWtOdW1iZXJzIiwic2hvd01vbnRocyIsIm5vQ2FsZW5kYXIiLCJ3aW5kb3ciLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ1bmRlZmluZWQiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJkaXNwbGF5IiwiZGF5c0NvbnRhaW5lciIsImRheXNXaWR0aCIsImRheXMiLCJvZmZzZXRXaWR0aCIsIndlZWtXcmFwcGVyIiwicmVtb3ZlUHJvcGVydHkiLCJ1cGRhdGVUaW1lIiwiZGVmYXVsdERhdGUiLCJjb21wYXJlRGF0ZXMiLCJnZXRUaW1lIiwiZGVmYXVsdHMiLCJnZXREZWZhdWx0SG91cnMiLCJzZXRIb3VycyIsImhvdXJzIiwibWludXRlcyIsInNlY29uZHMiLCJnZXRNaWxsaXNlY29uZHMiLCJsYXRlc3RTZWxlY3RlZERhdGVPYmoiLCJpc0tleURvd24iLCJldmVudFRhcmdldCIsImdldEV2ZW50VGFyZ2V0IiwiaW5wdXQiLCJhbVBNIiwidGV4dENvbnRlbnQiLCJpbnQiLCJnZXRBdHRyaWJ1dGUiLCJjdXJWYWx1ZSIsImRlbHRhIiwid2hpY2giLCJuZXdWYWx1ZSIsImlzSG91ckVsZW0iLCJob3VyRWxlbWVudCIsImlzTWludXRlRWxlbSIsIm1pbnV0ZUVsZW1lbnQiLCJpbmNyZW1lbnROdW1JbnB1dCIsImFicyIsInBhZCIsInRpbWVXcmFwcGVyIiwicHJldlZhbHVlIiwiX2lucHV0Iiwic2V0SG91cnNGcm9tSW5wdXRzIiwidXBkYXRlVmFsdWUiLCJfZGVib3VuY2VkQ2hhbmdlIiwiaG91ciIsInNsaWNlIiwic2Vjb25kRWxlbWVudCIsImxpbWl0TWluSG91cnMiLCJtaW5UaW1lIiwibWluRGF0ZUhhc1RpbWUiLCJsaW1pdE1heEhvdXJzIiwibWF4VGltZSIsIm1heERhdGVIYXNUaW1lIiwibWluQm91bmQiLCJjYWxjdWxhdGVTZWNvbmRzU2luY2VNaWRuaWdodCIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJtYXhCb3VuZCIsImN1cnJlbnRUaW1lIiwicmVzdWx0IiwicGFyc2VTZWNvbmRzIiwic2V0SG91cnNGcm9tRGF0ZSIsImRhdGVPYmoiLCJkYXRlIiwiaXNNb2JpbGUiLCJ0aW1lXzI0aHIiLCJvblllYXJJbnB1dCIsImV2ZW50IiwieWVhciIsImtleSIsInRlc3QiLCJjaGFuZ2VZZWFyIiwiaGFuZGxlciIsIm9wdGlvbnMiLCJmb3JFYWNoIiwiZXYiLCJlbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJfaGFuZGxlcnMiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidHJpZ2dlckNoYW5nZSIsInRyaWdnZXJFdmVudCIsImp1bXBUb0RhdGUiLCJqdW1wRGF0ZSIsImp1bXBUbyIsInBhcnNlRGF0ZSIsIm5vdyIsIm9sZFllYXIiLCJjdXJyZW50WWVhciIsIm9sZE1vbnRoIiwiY3VycmVudE1vbnRoIiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsIm1lc3NhZ2UiLCJlcnJvckhhbmRsZXIiLCJidWlsZE1vbnRoU3dpdGNoIiwicmVkcmF3IiwidGltZUluY3JlbWVudCIsImluZGV4T2YiLCJjb250YWlucyIsImlucHV0RWxlbSIsInBhcmVudE5vZGUiLCJmaXJzdENoaWxkIiwiY3JlYXRlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiY3JlYXRlRGF5IiwiX2RheU51bWJlciIsImRhdGVJc0VuYWJsZWQiLCJpc0VuYWJsZWQiLCJkYXlFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImdldERhdGUiLCIkaSIsInNldEF0dHJpYnV0ZSIsImZvcm1hdERhdGUiLCJhcmlhRGF0ZUZvcm1hdCIsInRvZGF5RGF0ZUVsZW0iLCJ0YWJJbmRleCIsImlzRGF0ZVNlbGVjdGVkIiwic2VsZWN0ZWREYXRlRWxlbSIsInRvZ2dsZUNsYXNzIiwiaXNEYXRlSW5SYW5nZSIsImluc2VydEFkamFjZW50SFRNTCIsImdldFdlZWsiLCJmb2N1c09uRGF5RWxlbSIsInRhcmdldE5vZGUiLCJmb2N1cyIsIm9uTW91c2VPdmVyIiwiZ2V0Rmlyc3RBdmFpbGFibGVEYXkiLCJzdGFydE1vbnRoIiwiZW5kTW9udGgiLCJtIiwibW9udGgiLCJjaGlsZHJlbiIsInN0YXJ0SW5kZXgiLCJlbmRJbmRleCIsImZvY3VzT25EYXkiLCJkYXlGb2N1c2VkIiwiaXNJblZpZXciLCJib2R5Iiwic3RhcnRFbGVtIiwiZ2l2ZW5Nb250aCIsImxvb3BEZWx0YSIsIm51bU1vbnRoRGF5cyIsImNoYW5nZU1vbnRoIiwiZ2V0TmV4dEF2YWlsYWJsZURheSIsImJ1aWxkTW9udGhEYXlzIiwiZmlyc3RPZk1vbnRoIiwiZ2V0RGF5IiwiZmlyc3REYXlPZldlZWsiLCJwcmV2TW9udGhEYXlzIiwidXRpbHMiLCJnZXREYXlzSW5Nb250aCIsImRheXNJbk1vbnRoIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImlzTXVsdGlNb250aCIsInByZXZNb250aERheUNsYXNzIiwibmV4dE1vbnRoRGF5Q2xhc3MiLCJkYXlOdW1iZXIiLCJkYXlJbmRleCIsImFwcGVuZENoaWxkIiwiZGF5TnVtIiwiZGF5Q29udGFpbmVyIiwiYnVpbGREYXlzIiwiY2xlYXJOb2RlIiwiZnJhZyIsImQiLCJzZXRNb250aCIsIm1vbnRoU2VsZWN0b3JUeXBlIiwic2hvdWxkQnVpbGRNb250aCIsIm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyIiwiaW5uZXJIVE1MIiwibW9udGhUb1N0ciIsInNob3J0aGFuZEN1cnJlbnRNb250aCIsInNlbGVjdGVkIiwiYnVpbGRNb250aCIsIm1vbnRoRWxlbWVudCIsImNvbn
3RhaW5lciIsIm1vbnRoTmF2RnJhZ21lbnQiLCJtb250aEFyaWFMYWJlbCIsInNlbGVjdGVkTW9udGgiLCJ5ZWFySW5wdXQiLCJjcmVhdGVOdW1iZXJJbnB1dCIsInRhYmluZGV4IiwieWVhckVsZW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInllYXJBcmlhTGFiZWwiLCJkaXNhYmxlZCIsImJ1aWxkTW9udGhzIiwibW9udGhOYXYiLCJwcmV2TW9udGhOYXYiLCJ5ZWFyRWxlbWVudHMiLCJtb250aEVsZW1lbnRzIiwibmV4dE1vbnRoTmF2IiwiYnVpbGRXZWVrZGF5cyIsIndlZWtkYXlDb250YWluZXIiLCJ1cGRhdGVXZWVrZGF5cyIsIndlZWtkYXlzIiwic2hvcnRoYW5kIiwic3BsaWNlIiwiam9pbiIsImlzT2Zmc2V0IiwiX2hpZGVQcmV2TW9udGhBcnJvdyIsIl9oaWRlTmV4dE1vbnRoQXJyb3ciLCJ1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoIiwiaXNDYWxlbmRhckVsZW0iLCJlbGVtIiwiZG9jdW1lbnRDbGljayIsImlzT3BlbiIsImlubGluZSIsImV2ZW50VGFyZ2V0XzEiLCJpc0NhbGVuZGFyRWxlbWVudCIsImxvc3RGb2N1cyIsInBhdGgiLCJyZWxhdGVkVGFyZ2V0IiwiaXNJZ25vcmVkIiwiaWdub3JlZEZvY3VzRWxlbWVudHMiLCJzb21lIiwiYWxsb3dJbnB1dCIsInNldERhdGUiLCJ0aW1lQ29udGFpbmVyIiwiY2xvc2UiLCJjbGVhciIsIm5ld1llYXIiLCJuZXdZZWFyTnVtIiwiaXNOZXdZZWFyIiwidGltZWxlc3MiLCJkYXRlVG9DaGVjayIsImJvb2wiLCJhcnJheSIsInBhcnNlZCIsIm9uQmx1ciIsImlzSW5wdXQiLCJ2YWx1ZUNoYW5nZWQiLCJ0cmltRW5kIiwiZ2V0RGF0ZVN0ciIsIm9uS2V5RG93biIsIndyYXAiLCJhbGxvd0tleWRvd24iLCJhbGxvd0lubGluZUtleWRvd24iLCJrZXlDb2RlIiwiYmx1ciIsIm9wZW4iLCJpc1RpbWVPYmoiLCJmb2N1c0FuZENsb3NlIiwic2VsZWN0RGF0ZSIsImRlbHRhXzEiLCJjdHJsS2V5IiwiY3VycmVudFllYXJFbGVtZW50IiwiZW5hYmxlVGltZSIsImVsZW1zIiwiY29uY2F0IiwicGx1Z2luRWxlbWVudHMiLCJ4Iiwic2hpZnRLZXkiLCJjaGFyQXQiLCJ0b0xvd2VyQ2FzZSIsImNlbGxDbGFzcyIsImhvdmVyRGF0ZSIsImZpcnN0RWxlbWVudENoaWxkIiwiaW5pdGlhbERhdGUiLCJyYW5nZVN0YXJ0RGF0ZSIsInJhbmdlRW5kRGF0ZSIsImNvbnRhaW5zRGlzYWJsZWQiLCJtaW5SYW5nZSIsIm1heFJhbmdlIiwiZHVyYXRpb24iLCJEQVkiLCJyQ29udGFpbmVyIiwicXVlcnlTZWxlY3RvckFsbCIsImRheUVsZW0iLCJ0aW1lc3RhbXAiLCJvdXRPZlJhbmdlIiwiaXNCZXR3ZWVuIiwib25SZXNpemUiLCJzdGF0aWMiLCJwb3NpdGlvbkNhbGVuZGFyIiwibWluTWF4RGF0ZVNldHRlciIsImludmVyc2VEYXRlT2JqIiwicmVtb3ZlQXR0cmlidXRlIiwiZ2V0SW5wdXRFbGVtIiwicXVlcnlTZWxlY3RvciIsInNldHVwTG9jYWxlIiwibDEwbnMiLCJFcnJvciIsImRlZmF1bHQiLCJ0b2tlblJlZ2V4IiwiRCIsImwiLCJsb25naGFuZCIsIk0iLCJtb250aHMiLCJGIiwiSyIsIkpTT04iLCJzdHJpbmdpZnkiLCJkYXRhc2V0IiwiY3JlYXRlRGF0ZUZvcm1hdHRlciIsImNyZWF0ZURhdGVQYXJzZXIiLCJjdXN0b21Qb3NpdGlvbkVsZW1lbnQiLCJwb3NpdGlvbiIsInBvc2l0aW9uRWxlbWVudCIsIl9wb3NpdGlvbkVsZW1lbnQiLCJjYWxlbmRhckhlaWdodCIsInJlZHVjZSIsImFjYyIsImNoaWxkIiwib2Zmc2V0SGVpZ2h0IiwiY2FsZW5kYXJXaWR0aCIsImNvbmZpZ1BvcyIsImNvbmZpZ1Bvc1ZlcnRpY2FsIiwiY29uZmlnUG9zSG9yaXpvbnRhbCIsImlucHV0Qm91bmRzIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwiaW5uZXJIZWlnaHQiLCJib3R0b20iLCJzaG93T25Ub3AiLCJwYWdlWU9mZnNldCIsImxlZnQiLCJwYWdlWE9mZnNldCIsImlzQ2VudGVyIiwiaXNSaWdodCIsInJpZ2h0IiwicmlnaHRNb3N0IiwiY2VudGVyTW9zdCIsImRvYyIsImVkaXRhYmxlU2hlZXQiLCJzdHlsZVNoZWV0cyIsInNoZWV0IiwiY3NzUnVsZXMiLCJlcnIiLCJoZWFkIiwiZ2V0RG9jdW1lbnRTdHlsZVNoZWV0IiwiYm9keVdpZHRoIiwiY2VudGVyTGVmdCIsImNlbnRlckluZGV4IiwiY2VudGVyU3R5bGUiLCJpbnNlcnRSdWxlIiwiY2VudGVyQmVmb3JlIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwibXNNYXhUb3VjaFBvaW50cyIsImZpbmRQYXJlbnQiLCJkYXkiLCJzZWxlY3RlZERhdGUiLCJzaG91bGRDaGFuZ2VNb250aCIsInNlbGVjdGVkSW5kZXgiLCJzb3J0IiwiYiIsImNsb3NlT25TZWxlY3QiLCJzaW5nbGUiLCJsb2FkZWRQbHVnaW5zIiwiX2JpbmQiLCJfc2V0SG91cnNGcm9tRGF0ZSIsIl9wb3NpdGlvbkNhbGVuZGFyIiwidHJpZ2dlckNoYW5nZUV2ZW50IiwidG9Jbml0aWFsIiwibW9iaWxlSW5wdXQiLCJfaW5pdGlhbERhdGUiLCJfY3JlYXRlRWxlbWVudCIsInJlbW92ZUNoaWxkIiwid3JhcHBlciIsImxhc3RDaGlsZCIsImluc2VydEJlZm9yZSIsIl90eXBlIiwiXyIsIndhc09wZW4iLCJzZWxlY3QiLCJzZXQiLCJvcHRpb24iLCJDQUxMQkFDS1MiLCJIT09LUyIsImFycmF5aWZ5Iiwic2V0U2VsZWN0ZWREYXRlIiwidG9nZ2xlIiwidXBkYXRlUG9zaXRpb25FbGVtZW50IiwiY2xpY2tPcGVucyIsImlucHV0RGF0ZSIsImRhdGVzIiwiY29uanVuY3Rpb24iLCJyYW5nZVNlcGFyYXRvciIsImFsbG93SW52YWxpZFByZWxvYWQiLCJwYXJzZURhdGVSdWxlcyIsImFyciIsInJ1bGUiLCJob29rcyIsImluaXRFdmVudCIsInNwZWNpZmljRm9ybWF0IiwiZE9iaiIsIm1vYmlsZUZvcm1hdFN0ciIsIm9uTW9udGhOYXZDbGljayIsImlzUHJldk1vbnRoIiwiaXNOZXh0TW9udGgiLCJib29sT3B0cyIsInVzZXJDb25maWciLCJmb3JtYXRzIiwiZGVmaW5lUHJvcGVydHkiLCJfZW5hYmxlIiwiX2Rpc2FibGUiLCJ0aW1lTW9kZSIsImRlZmF1bHREYXRlRm9ybWF0IiwiZW5hYmxlU2Vjb25kcyIsImRlZmF1bHRBbHRGb3JtYXQiLCJfbWluRGF0ZSIsIl9tYXhEYXRlIiwibWluTWF4VGltZVNldHRlciIsInZhbCIsIl9taW5UaW1lIiwiX21heFRpbWUiLCJob29rIiwiZGlzYWJsZU1vYmlsZSIsInBsdWdpbnMiLCJwbHVnaW5Db25mIiwiYWx0SW5wdXRDbGFzcyIsInBhcnNlQ29uZmlnIiwibm9kZU5hbWUiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibmV4dFNpYmxpbmciLCJzZXR1cElucHV0cyIsInByZWxvYWRlZERhdGUiLCJzZXR1cERhdGVzIiwieXIiLCJmcmFnbWVudCIsInByZXZBcnJvdyIsIm5leHRBcnJvdyIsIl9faGl
3kZVByZXZNb250aEFycm93IiwiX19oaWRlTmV4dE1vbnRoQXJyb3ciLCJpbm5lckNvbnRhaW5lciIsIndlZWtBYmJyZXZpYXRpb24iLCJidWlsZFdlZWtzIiwic2VwYXJhdG9yIiwiaG91cklucHV0IiwiaG91ckFyaWFMYWJlbCIsIm1pbnV0ZUlucHV0IiwibWludXRlQXJpYUxhYmVsIiwibWlsaXRhcnkyYW1wbSIsImhvdXJJbmNyZW1lbnQiLCJtaW51dGVJbmNyZW1lbnQiLCJzZWNvbmRJbnB1dCIsImRlZmF1bHRIb3VyIiwidGl0bGUiLCJ0b2dnbGVUaXRsZSIsImJ1aWxkVGltZSIsImN1c3RvbUFwcGVuZCIsImFwcGVuZFRvIiwibm9kZVR5cGUiLCJidWlsZCIsImV2dCIsImlucHV0VHlwZSIsImRlZmF1bHRWYWx1ZSIsIlN0cmluZyIsInNldHVwTW9iaWxlIiwiZGVib3VuY2VkUmVzaXplIiwiZGVib3VuY2UiLCJvbnRvdWNoc3RhcnQiLCJjYXB0dXJlIiwic2VsVGV4dCIsImJpbmRFdmVudHMiLCJpc1NhZmFyaSIsImluaXQiLCJfZmxhdHBpY2tyIiwibm9kZUxpc3QiLCJub2RlcyIsIkhUTUxFbGVtZW50IiwiaW5zdGFuY2VzIiwibm9kZSIsImVycm9yIiwiSFRNTENvbGxlY3Rpb24iLCJOb2RlTGlzdCIsInNlbGVjdG9yIiwiTm9kZSIsImVuIiwibG9jYWxpemUiLCJzZXREZWZhdWx0cyIsImZwX2luY3IiLCJlbmdsaXNoIiwib3JkaW5hbCIsIm50aCIsInNjcm9sbFRpdGxlIiwiYXV0b0ZpbGxEZWZhdWx0VGltZSIsImRlZmF1bHRNaW51dGUiLCJkZWZhdWx0U2Vjb25kcyIsIndhcm4iLCJnaXZlbkRhdGUiLCJ3ZWVrMSIsInJvdW5kIiwib25DaGFuZ2UiLCJvbkNsb3NlIiwib25EYXlDcmVhdGUiLCJvbkRlc3Ryb3kiLCJvbk1vbnRoQ2hhbmdlIiwib25PcGVuIiwib25QYXJzZUNvbmZpZyIsIm9uUmVhZHkiLCJvblZhbHVlVXBkYXRlIiwib25ZZWFyQ2hhbmdlIiwib25QcmVDYWxlbmRhclBvc2l0aW9uIiwiX2IiLCJfYyIsIl9kIiwiZnJtdCIsIm92ZXJyaWRlTG9jYWxlIiwiZ2l2ZW5Gb3JtYXQiLCJjdXN0b21Mb2NhbGUiLCJwYXJzZWREYXRlIiwiZGF0ZU9yaWciLCJ0b0ZpeGVkIiwiZGF0ZXN0ciIsInRyaW0iLCJtYXRjaGVkIiwib3BzIiwibWF0Y2hJbmRleCIsInJlZ2V4U3RyIiwidG9rZW4iLCJpc0JhY2tTbGFzaCIsImVzY2FwZWQiLCJtYXRjaCIsIlJlZ0V4cCIsImV4ZWMiLCJyZXZGb3JtYXQiLCJkYXRlMSIsImRhdGUyIiwiY29tcGFyZVRpbWVzIiwidHMiLCJ0czEiLCJ0czIiLCJzZWNvbmRzU2luY2VNaWRuaWdodCIsIm1pbkhvdXIiLCJtaW5NaW51dGVzIiwibWluU2Vjb25kcyIsIm1heEhyIiwibWF4TWludXRlcyIsInRhZyIsImNvbnRlbnQiLCJjb25kaXRpb24iLCJpbnB1dENsYXNzTmFtZSIsIm9wdHMiLCJudW1JbnB1dCIsImFycm93VXAiLCJhcnJvd0Rvd24iLCJwYXR0ZXJuIiwiY29tcG9zZWRQYXRoIiwiZG9Ob3RoaW5nIiwibW9udGhOdW1iZXIiLCJtb250aE5hbWUiLCJHIiwiSCIsIkoiLCJzaG9ydE1vbnRoIiwiUyIsInNldFNlY29uZHMiLCJVIiwidW5peFNlY29uZHMiLCJXIiwid2Vla051bSIsIndlZWtOdW1iZXIiLCJZIiwic2V0RnVsbFllYXIiLCJaIiwiSVNPRGF0ZSIsImgiLCJzZXRNaW51dGVzIiwidSIsInVuaXhNaWxsU2Vjb25kcyIsInciLCJ5IiwidG9JU09TdHJpbmciLCJzdWJzdHJpbmciLCJudW1iZXIiLCJ3YWl0IiwiX3RoaXMiLCJhcmdzIiwiY2xlYXJUaW1lb3V0IiwiX2kiLCJUeXBlRXJyb3IiLCJfbG9vcF8xIiwic291cmNlIiwia2V5cyIsImFyZ3NfMSIsImV4cG9ydHMiLCJmcCIsImZyIiwiZmFjdG9yeSIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzMxMV9fIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIm1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImRlZmluaXRpb24iLCJvIiwiZW51bWVyYWJsZSIsInByb3AiLCJleHRlcm5hbF9mbGF0cGlja3JfIiwiZXh0ZXJuYWxfZmxhdHBpY2tyX2RlZmF1bHQiLCJpbmNsdWRlZEV2ZW50cyIsIl9leHRlbmRzIiwibnVsbGlmeSIsImNsb25lT2JqZWN0IiwiYWxsRXZlbnRzIiwiY29uZmlnQ2FsbGJhY2tzIiwiY29tcG9uZW50IiwicmVuZGVyIiwiYXR0cnMiLCJvbklucHV0IiwidmFsaWRhdG9yIiwiZXZlbnRzIiwiQm9vbGVhbiIsInNhZmVDb25maWciLCJnbG9iYWxDYWxsYmFja3MiLCJfbGVuIiwiX2tleSIsInN0cmluZyIsImdldEVsZW0iLCJmcElucHV0IiwiJG9uIiwiJHdhdGNoIiwid2F0Y2hEaXNhYmxlZCIsImltbWVkaWF0ZSIsIiRlbCIsIl90aGlzMiIsIiRuZXh0VGljayIsIm5ld1N0YXRlIiwiZGVlcCIsIm5ld0NvbmZpZyIsIl90aGlzMyIsImJlZm9yZURlc3Ryb3kiLCJWdWUiLCJwYXJhbXMiLCJzcmMiLCJlbXB0eU9iamVjdCIsImZyZWV6ZSIsImlzQXJyYXkiLCJpc1VuZGVmIiwidiIsImlzRGVmIiwiaXNUcnVlIiwiaXNGYWxzZSIsImlzUHJpbWl0aXZlIiwiaXNGdW5jdGlvbiIsImlzT2JqZWN0IiwiX3RvU3RyaW5nIiwidG9SYXdUeXBlIiwiaXNQbGFpbk9iamVjdCIsImlzUmVnRXhwIiwiaXNWYWxpZEFycmF5SW5kZXgiLCJpc0Zpbml0ZSIsImlzUHJvbWlzZSIsInRoZW4iLCJjYXRjaCIsInJlcGxhY2VyIiwiX192X2lzUmVmIiwidG9OdW1iZXIiLCJtYWtlTWFwIiwic3RyIiwiZXhwZWN0c0xvd2VyQ2FzZSIsImlzQnVpbHRJblRhZyIsImlzUmVzZXJ2ZWRBdHRyaWJ1dGUiLCJyZW1vdmUkMiIsIml0ZW0iLCJsZW4iLCJoYXNPd24iLCJjYWNoZWQiLCJjYWNoZSIsImNhbWVsaXplUkUiLCJjYW1lbGl6ZSIsInRvVXBwZXJDYXNlIiwiY2FwaXRhbGl6ZSIsImh5cGhlbmF0ZVJFIiwiaHlwaGVuYXRlIiwicG9seWZpbGxCaW5kIiwiY3R4IiwiYm91bmRGbiIsIl9sZW5ndGgiLCJuYXRpdmVCaW5kIiwiYmluZCQxIiwiRnVuY3Rpb24iLCJ0b0FycmF5IiwicmV0IiwiZXh0ZW5kIiwiX2Zyb20iLCJ0b09iamVjdCIsInJlcyIsIm5vb3AiLCJubyIsImlkZW50aXR5IiwiZ2VuU3RhdGljS2V5cyQxIiwibW9kdWxlcyIsInN0YXRpY0tleXMiLCJsb29zZUVxdWFsIiwiaXNPYmplY3RBIiwiaXNPYmplY3RCIiwiaXNBcnJheUEiLCJpc0FycmF5QiIsImV2ZXJ5Iiwia2V5c0EiLCJrZXlzQiIsImxvb3NlSW5kZXhPZiIsIm9uY2UiLCJjYWxsZWQiLCJoYXNDaGFuZ2VkIiwiU1NSX0FUVFIiLCJBU1NFVF9UWVBFUyIsIkxJRkVDWUNMRV9IT09LUyIsIm9wdGlvbk1lcmdlU3RyYXRlZ2llcyIsInNpbGVudCIsInByb2R1Y3Rpb25UaXAiLCJkZXZ0b29scyIsInBlcmZvcm1hbmNlIiwid2FybkhhbmRsZXIiLCJpZ25vcmVkRWxlbWVudHMiLCJrZXlDb2RlcyIsImlzUmVzZXJ2ZWRUYWciLCJpc1Jlc2VydmVkQXR0ciIsImlzVW5rbm93bkVsZW1lbnQiLCJnZXRUYWdOYW1lc3BhY2UiLCJwYXJzZVBsYXRmb3JtVGFnTmFtZSIsIm11c3RVc2VQcm9wIiwiX2xpZmVjeWNsZUhvb2tzIiwidW5pY29kZVJlZ0V4cCIsImlzUmVzZXJ2ZWQiLCJjaGFyQ29kZUF0IiwiZGVmIiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJiYWlsUkUiLCJwYXJzZVBhdGgiLCJzZWdtZW50cyIsImhhc1Byb3RvIiwiaW5Ccm93c2VyIiwiVUEiLCJpc0lFIiwiaXNJRTkiLCJpc0VkZ2UiLCJpc0lPUyIsIl9pc1NlcnZlciIsImlzRkYiLCJuYXRpdmVXYXRjaCIsInN1cHBvcnRzUGFzc2l2ZSIsImlzU2VydmVyUmVuZGVyaW5nIiwiZyIsImVudiIsIlZVRV9FTlYiLCJfX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fIiwiaXNOYXRpdmUiLCJDdG9yIiwiX1NldCIsImhhc1N5bWJvbCIsIlN5bWJvbCIsIlJlZmxlY3QiLCJvd25LZXlzIiwiU2V0IiwiaGFzIiwiY3VycmVudEluc3RhbmNlIiwiZ2V0Q3VycmVudEluc3RhbmNlIiwicHJveHkiLCJzZXRDdXJyZW50SW5zdGFuY2UiLCJ2bSIsIl9zY29wZSIsIm9mZiIsImluaXRQcm94eSIsIlZOb2RlIiwiZWxtIiwiY29udGV4dCIsImNvbXBvbmVudE9wdGlvbnMiLCJhc3luY0ZhY3RvcnkiLCJucyIsImZuQ29udGV4dCIsImZuT3B0aW9ucyIsImZuU2NvcGVJZCIsImNvbXBvbmVudEluc3RhbmNlIiwicmF3IiwiaXNTdGF0aWMiLCJpc1Jvb3RJbnNlcnQiLCJpc0NvbW1lbnQiLCJpc0Nsb25lZCIsImlzT25jZSIsImFzeW5jTWV0YSIsImlzQXN5bmNQbGFjZWhvbGRlciIsImNyZWF0ZUVtcHR5Vk5vZGUiLCJjcmVhdGVUZXh0Vk5vZGUiLCJjbG9uZVZOb2RlIiwidm5vZGUiLCJjbG9uZWQiLCJhbGxvd2VkR2xvYmFsc18xIiwid2Fybk5vblByZXNlbnRfMSIsIndhcm4kMiIsIndhcm5SZXNlcnZlZFByZWZpeF8xIiwiaGFzUHJveHlfMSIsIlByb3h5IiwiaXNCdWlsdEluTW9kaWZpZXJfMSIsImhhc0hhbmRsZXJfMSIsImlzQWxsb3dlZCIsIiRkYXRhIiwiZ2V0SGFuZGxlcl8xIiwiJG9wdGlvbnMiLCJoYW5kbGVycyIsIl93aXRoU3RyaXBwZWQiLCJfcmVuZGVyUHJveHkiLCJTdXBwcmVzc2VkRXJyb3IiLCJ1aWQkMiIsInBlbmRpbmdDbGVhbnVwRGVwcyIsImNsZWFudXBEZXBzIiwiZGVwIiwic3VicyIsIl9wZW5kaW5nIiwiRGVwIiwiYWRkU3ViIiwic3ViIiwicmVtb3ZlU3ViIiwiZGVwZW5kIiwiaW5mbyIsImFkZERlcCIsIm9uVHJhY2siLCJlZmZlY3QiLCJub3RpZnkiLCJvblRyaWdnZXIiLCJ0YXJnZXRTdGFjayIsInB1c2hUYXJnZXQiLCJwb3BUYXJnZXQiLCJwb3AiLCJhcnJheVByb3RvIiwiYXJyYXlNZXRob2RzIiwibWV0aG9kIiwib3JpZ2luYWwiLCJpbnNlcnRlZCIsIm9iIiwiX19vYl9fIiwib2JzZXJ2ZUFycmF5IiwiYXJyYXlLZXlzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIk5PX0lOSVRJQUxfVkFMVUUiLCJzaG91bGRPYnNlcnZlIiwidG9nZ2xlT2JzZXJ2aW5nIiwibW9ja0RlcCIsIk9ic2VydmVyIiwic2hhbGxvdyIsIm1vY2siLCJ2bUNvdW50IiwiX19wcm90b19fIiwiZGVmaW5lUmVhY3RpdmUiLCJvYnNlcnZlIiwic3NyTW9ja1JlYWN0aXZpdHkiLCJpc0V4dGVuc2libGUiLCJfX3Zfc2tpcCIsImlzUmVmIiwiY3VzdG9tU2V0dGVyIiwib2JzZXJ2ZUV2ZW5JZlNoYWxsb3ciLCJwcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInNldHRlciIsImNoaWxkT2IiLCJkZXBlbmRBcnJheSIsIm5ld1ZhbCIsIm9sZFZhbHVlIiwiaXNSZWFkb25seSIsIl9pc1Z1ZSIsImRlbCIsInJlYWN0aXZlIiwibWFrZVJlYW
3N0aXZlIiwic2hhbGxvd1JlYWN0aXZlIiwiZXhpc3RpbmdPYiIsImlzQ29sbGVjdGlvblR5cGUiLCJpc1JlYWN0aXZlIiwiaXNTaGFsbG93IiwiX192X2lzU2hhbGxvdyIsIl9fdl9pc1JlYWRvbmx5IiwiaXNQcm94eSIsInRvUmF3Iiwib2JzZXJ2ZWQiLCJtYXJrUmF3IiwiUmVmRmxhZyIsInJlZiQxIiwiY3JlYXRlUmVmIiwic2hhbGxvd1JlZiIsInJhd1ZhbHVlIiwidHJpZ2dlclJlZiIsInVucmVmIiwicHJveHlSZWZzIiwib2JqZWN0V2l0aFJlZnMiLCJwcm94eVdpdGhSZWZVbndyYXAiLCJjdXN0b21SZWYiLCJ0b1JlZnMiLCJ0b1JlZiIsIm1hcmsiLCJtZWFzdXJlIiwicmF3VG9SZWFkb25seUZsYWciLCJyYXdUb1NoYWxsb3dSZWFkb25seUZsYWciLCJyZWFkb25seSIsImNyZWF0ZVJlYWRvbmx5IiwiZXhpc3RpbmdGbGFnIiwiZXhpc3RpbmdQcm94eSIsImdldFByb3RvdHlwZU9mIiwiZGVmaW5lUmVhZG9ubHlQcm9wZXJ0eSIsInNoYWxsb3dSZWFkb25seSIsImdldHRlck9yT3B0aW9ucyIsImRlYnVnT3B0aW9ucyIsIm9ubHlHZXR0ZXIiLCJ3YXRjaGVyIiwiV2F0Y2hlciIsImxhenkiLCJkaXJ0eSIsImV2YWx1YXRlIiwicGVyZl8xIiwiY2xlYXJNYXJrcyIsImNsZWFyTWVhc3VyZXMiLCJzdGFydFRhZyIsImVuZFRhZyIsIm5vcm1hbGl6ZUV2ZW50IiwicGFzc2l2ZSIsImNyZWF0ZUZuSW52b2tlciIsImZucyIsImludm9rZXIiLCJpbnZva2VXaXRoRXJyb3JIYW5kbGluZyIsInVwZGF0ZUxpc3RlbmVycyIsIm9sZE9uIiwiY3JlYXRlT25jZUhhbmRsZXIiLCJjdXIiLCJvbGQiLCJtZXJnZVZOb2RlSG9vayIsImhvb2tLZXkiLCJvbGRIb29rIiwid3JhcHBlZEhvb2siLCJtZXJnZWQiLCJleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhIiwicHJvcE9wdGlvbnMiLCJhbHRLZXkiLCJrZXlJbkxvd2VyQ2FzZSIsInRpcCIsImZvcm1hdENvbXBvbmVudE5hbWUiLCJjaGVja1Byb3AiLCJoYXNoIiwicHJlc2VydmUiLCJzaW1wbGVOb3JtYWxpemVDaGlsZHJlbiIsIm5vcm1hbGl6ZUNoaWxkcmVuIiwibm9ybWFsaXplQXJyYXlDaGlsZHJlbiIsImlzVGV4dE5vZGUiLCJuZXN0ZWRJbmRleCIsImxhc3RJbmRleCIsImxhc3QiLCJzaGlmdCIsIl9pc1ZMaXN0IiwiU0lNUExFX05PUk1BTElaRSIsIkFMV0FZU19OT1JNQUxJWkUiLCJjcmVhdGVFbGVtZW50JDEiLCJub3JtYWxpemF0aW9uVHlwZSIsImFsd2F5c05vcm1hbGl6ZSIsImlzIiwic2NvcGVkU2xvdHMiLCIkdm5vZGUiLCJuYXRpdmVPbiIsInByZSIsInJlc29sdmVBc3NldCIsImNyZWF0ZUNvbXBvbmVudCIsImFwcGx5TlMiLCJyZWdpc3RlckRlZXBCaW5kaW5ncyIsImZvcmNlIiwidHJhdmVyc2UiLCJjbGFzcyIsInJlbmRlckxpc3QiLCJpdGVyYXRvciIsIm5leHQiLCJyZW5kZXJTbG90IiwiZmFsbGJhY2tSZW5kZXIiLCJiaW5kT2JqZWN0Iiwic2NvcGVkU2xvdEZuIiwiJHNjb3BlZFNsb3RzIiwiJHNsb3RzIiwic2xvdCIsIiRjcmVhdGVFbGVtZW50IiwicmVzb2x2ZUZpbHRlciIsImlzS2V5Tm90TWF0Y2giLCJleHBlY3QiLCJhY3R1YWwiLCJjaGVja0tleUNvZGVzIiwiZXZlbnRLZXlDb2RlIiwiYnVpbHRJbktleUNvZGUiLCJldmVudEtleU5hbWUiLCJidWlsdEluS2V5TmFtZSIsIm1hcHBlZEtleUNvZGUiLCJiaW5kT2JqZWN0UHJvcHMiLCJhc1Byb3AiLCJpc1N5bmMiLCJkb21Qcm9wcyIsImNhbWVsaXplZEtleSIsImh5cGhlbmF0ZWRLZXkiLCIkZXZlbnQiLCJyZW5kZXJTdGF0aWMiLCJpc0luRm9yIiwiX3N0YXRpY1RyZWVzIiwidHJlZSIsIm1hcmtTdGF0aWMkMSIsInN0YXRpY1JlbmRlckZucyIsIm1hcmtPbmNlIiwibWFya1N0YXRpY05vZGUiLCJiaW5kT2JqZWN0TGlzdGVuZXJzIiwiZXhpc3RpbmciLCJvdXJzIiwicmVzb2x2ZVNjb3BlZFNsb3RzIiwiaGFzRHluYW1pY0tleXMiLCJjb250ZW50SGFzaEtleSIsIiRzdGFibGUiLCIka2V5IiwiYmluZER5bmFtaWNLZXlzIiwiYmFzZU9iaiIsInZhbHVlcyIsInByZXBlbmRNb2RpZmllciIsInN5bWJvbCIsImluc3RhbGxSZW5kZXJIZWxwZXJzIiwiX28iLCJfbiIsIl9zIiwiX2wiLCJfdCIsIl9xIiwiX20iLCJfZiIsIl9rIiwiX3YiLCJfZSIsIl91IiwiX2ciLCJfcCIsInJlc29sdmVTbG90cyIsInNsb3RzIiwibmFtZV8xIiwibmFtZV8yIiwiaXNXaGl0ZXNwYWNlIiwibm9ybWFsaXplU2NvcGVkU2xvdHMiLCJvd25lclZtIiwibm9ybWFsU2xvdHMiLCJwcmV2U2NvcGVkU2xvdHMiLCJoYXNOb3JtYWxTbG90cyIsImlzU3RhYmxlIiwiX25vcm1hbGl6ZWQiLCIkaGFzTm9ybWFsIiwia2V5XzEiLCJub3JtYWxpemVTY29wZWRTbG90Iiwia2V5XzIiLCJwcm94eU5vcm1hbFNsb3QiLCJub3JtYWxpemVkIiwiaW5pdFNldHVwIiwic2V0dXAiLCJfc2V0dXBDb250ZXh0IiwiY3JlYXRlU2V0dXBDb250ZXh0Iiwic2V0dXBSZXN1bHQiLCJfcHJvcHMiLCJfc2V0dXBTdGF0ZSIsIl9fc2ZjIiwiX3NldHVwUHJveHkiLCJleHBvc2VDYWxsZWQiLCJfYXR0cnNQcm94eSIsInN5bmNTZXR1cFByb3h5IiwiJGF0dHJzIiwibGlzdGVuZXJzIiwiX2xpc3RlbmVyc1Byb3h5IiwiJGxpc3RlbmVycyIsImluaXRTbG90c1Byb3h5IiwiZW1pdCIsImV4cG9zZSIsImV4cG9zZWQiLCJwcmV2IiwiY2hhbmdlZCIsImRlZmluZVByb3h5QXR0ciIsIl9zbG90c1Byb3h5Iiwic3luY1NldHVwU2xvdHMiLCJ1c2VTbG90cyIsImdldENvbnRleHQiLCJ1c2VBdHRycyIsInVzZUxpc3RlbmVycyIsIm1lcmdlRGVmYXVsdHMiLCJvcHQiLCJpbml0UmVuZGVyIiwiX3Zub2RlIiwicGFyZW50Vm5vZGUiLCJfcGFyZW50Vm5vZGUiLCJyZW5kZXJDb250ZXh0IiwiX3JlbmRlckNoaWxkcmVuIiwiJHBhcmVudCIsInBhcmVudERhdGEiLCJpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQiLCJfcGFyZW50TGlzdGVuZXJzIiwidGFyZ2V0JDEiLCJhY3RpdmVFZmZlY3RTY29wZSIsImN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSIsInJlbmRlck1peGluIiwibmV4dFRpY2siLCJfcmVuZGVyIiwiX2lzTW91bnRlZCIsInByZXZJbnN0IiwicHJldlJlbmRlckluc3QiLCJoYW5kbGVFcnJvciIsInJlbmRlckVycm9yIiwiZW5zdXJlQ3RvciIsImNvbXAiLCJiYXNlIiwidG9TdHJpbmdUYWciLCJjcmVhdGVBc3luY1BsYWNlaG9sZG
3VyIiwicmVzb2x2ZUFzeW5jQ29tcG9uZW50IiwiYmFzZUN0b3IiLCJlcnJvckNvbXAiLCJyZXNvbHZlZCIsIm93bmVyIiwib3duZXJzIiwibG9hZGluZyIsImxvYWRpbmdDb21wIiwib3duZXJzXzEiLCJzeW5jXzEiLCJ0aW1lckxvYWRpbmdfMSIsInRpbWVyVGltZW91dF8xIiwiZm9yY2VSZW5kZXJfMSIsInJlbmRlckNvbXBsZXRlZCIsIiRmb3JjZVVwZGF0ZSIsInJlamVjdF8xIiwicmVhc29uIiwicmVzXzEiLCJkZWxheSIsInRpbWVvdXQiLCJnZXRGaXJzdENvbXBvbmVudENoaWxkIiwiaW5pdEV2ZW50cyIsIl9ldmVudHMiLCJfaGFzSG9va0V2ZW50IiwidXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzIiwiYWRkJDEiLCJyZW1vdmUkMSIsIiRvZmYiLCJjcmVhdGVPbmNlSGFuZGxlciQxIiwiX3RhcmdldCIsIm9uY2VIYW5kbGVyIiwib2xkTGlzdGVuZXJzIiwiZXZlbnRzTWl4aW4iLCJob29rUkUiLCIkb25jZSIsImlfMSIsImNiIiwiY2JzIiwibG93ZXJDYXNlRXZlbnQiLCJFZmZlY3RTY29wZSIsImRldGFjaGVkIiwiYWN0aXZlIiwiZWZmZWN0cyIsImNsZWFudXBzIiwic2NvcGVzIiwicnVuIiwiY3VycmVudEVmZmVjdFNjb3BlIiwic3RvcCIsImZyb21QYXJlbnQiLCJ0ZWFyZG93biIsImVmZmVjdFNjb3BlIiwicmVjb3JkRWZmZWN0U2NvcGUiLCJzY29wZSIsImdldEN1cnJlbnRTY29wZSIsIm9uU2NvcGVEaXNwb3NlIiwiYWN0aXZlSW5zdGFuY2UiLCJzZXRBY3RpdmVJbnN0YW5jZSIsInByZXZBY3RpdmVJbnN0YW5jZSIsImluaXRMaWZlY3ljbGUiLCJhYnN0cmFjdCIsIiRjaGlsZHJlbiIsIiRyb290IiwiX3Byb3ZpZGVkIiwiX3dhdGNoZXIiLCJfaW5hY3RpdmUiLCJfZGlyZWN0SW5hY3RpdmUiLCJfaXNEZXN0cm95ZWQiLCJfaXNCZWluZ0Rlc3Ryb3llZCIsImxpZmVjeWNsZU1peGluIiwiX3VwZGF0ZSIsImh5ZHJhdGluZyIsInByZXZFbCIsInByZXZWbm9kZSIsInJlc3RvcmVBY3RpdmVJbnN0YW5jZSIsIl9fcGF0Y2hfXyIsIl9fdnVlX18iLCIkZGVzdHJveSIsImNhbGxIb29rJDEiLCJfZGF0YSIsIm1vdW50Q29tcG9uZW50IiwidXBkYXRlQ29tcG9uZW50IiwiX25hbWUiLCJfdWlkIiwid2F0Y2hlck9wdGlvbnMiLCJiZWZvcmUiLCJwcmVXYXRjaGVycyIsIl9wcmVXYXRjaGVycyIsInVwZGF0ZUNoaWxkQ29tcG9uZW50IiwicHJvcHNEYXRhIiwicmVuZGVyQ2hpbGRyZW4iLCJuZXdTY29wZWRTbG90cyIsIm9sZFNjb3BlZFNsb3RzIiwiaGFzRHluYW1pY1Njb3BlZFNsb3QiLCJuZWVkc0ZvcmNlVXBkYXRlIiwicHJldlZOb2RlIiwicHJldkxpc3RlbmVycyIsInByb3BLZXlzIiwiX3Byb3BLZXlzIiwidmFsaWRhdGVQcm9wIiwiaXNJbkluYWN0aXZlVHJlZSIsImFjdGl2YXRlQ2hpbGRDb21wb25lbnQiLCJkaXJlY3QiLCJkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQiLCJzZXRDb250ZXh0IiwicHJldlNjb3BlIiwiTUFYX1VQREFURV9DT1VOVCIsInF1ZXVlIiwiYWN0aXZhdGVkQ2hpbGRyZW4iLCJjaXJjdWxhciIsIndhaXRpbmciLCJmbHVzaGluZyIsImluZGV4JDEiLCJyZXNldFNjaGVkdWxlclN0YXRlIiwiY3VycmVudEZsdXNoVGltZXN0YW1wIiwi
3Z2V0Tm93IiwicGVyZm9ybWFuY2VfMSIsInRpbWVTdGFtcCIsInNvcnRDb21wYXJlRm4iLCJmbHVzaFNjaGVkdWxlclF1ZXVlIiwidXNlciIsImV4cHJlc3Npb24iLCJhY3RpdmF0ZWRRdWV1ZSIsInVwZGF0ZWRRdWV1ZSIsImNhbGxBY3RpdmF0ZWRIb29rcyIsImNhbGxVcGRhdGVkSG9va3MiLCJxdWV1ZUFjdGl2YXRlZENvbXBvbmVudCIsInF1ZXVlV2F0Y2hlciIsIm5vUmVjdXJzZSIsIldBVENIRVIiLCJXQVRDSEVSX0NCIiwiV0FUQ0hFUl9HRVRURVIiLCJXQVRDSEVSX0NMRUFOVVAiLCJ3YXRjaEVmZmVjdCIsImRvV2F0Y2giLCJ3YXRjaFBvc3RFZmZlY3QiLCJmbHVzaCIsIndhdGNoU3luY0VmZmVjdCIsIklOSVRJQUxfV0FUQ0hFUl9WQUxVRSIsImNsZWFudXAiLCJ3YXJuSW52YWxpZFNvdXJjZSIsImZvcmNlVHJpZ2dlciIsImlzTXVsdGlTb3VyY2UiLCJvbkNsZWFudXAiLCJiYXNlR2V0dGVyXzEiLCJvblN0b3AiLCJidWZmZXIiLCJwcm92aWRlIiwicmVzb2x2ZVByb3ZpZGVkIiwicGFyZW50UHJvdmlkZXMiLCJpbmplY3QiLCJ0cmVhdERlZmF1bHRBc0ZhY3RvcnkiLCJwcm92aWRlcyIsImVycm9yQ2FwdHVyZWQiLCJnbG9iYWxIYW5kbGVFcnJvciIsIl9oYW5kbGVkIiwibG9nRXJyb3IiLCJ0aW1lckZ1bmMiLCJpc1VzaW5nTWljcm9UYXNrIiwiY2FsbGJhY2tzIiwicGVuZGluZyIsImZsdXNoQ2FsbGJhY2tzIiwiY29waWVzIiwicF8xIiwiTXV0YXRpb25PYnNlcnZlciIsInNldEltbWVkaWF0ZSIsImNvdW50ZXJfMSIsIm9ic2VydmVyIiwidGV4dE5vZGVfMSIsImNyZWF0ZVRleHROb2RlIiwiY2hhcmFjdGVyRGF0YSIsIl9yZXNvbHZlIiwidXNlQ3NzTW9kdWxlIiwidXNlQ3NzVmFycyIsInZhcnMiLCJzZXRQcm9wZXJ0eSIsImRlZmluZUFzeW5jQ29tcG9uZW50IiwibG9hZGVyIiwibG9hZGluZ0NvbXBvbmVudCIsImVycm9yQ29tcG9uZW50Iiwic3VzcGVuc2libGUiLCJ1c2VyT25FcnJvciIsIm9uRXJyb3IiLCJwZW5kaW5nUmVxdWVzdCIsInJldHJpZXMiLCJyZXRyeSIsImxvYWQiLCJ0aGlzUmVxdWVzdCIsImNyZWF0ZUxpZmVDeWNsZSIsImhvb2tOYW1lIiwiaW5qZWN0SG9vayIsImZvcm1hdE5hbWUiLCJtZXJnZUxpZmVjeWNsZUhvb2siLCJvbkJlZm9yZU1vdW50Iiwib25Nb3VudGVkIiwib25CZWZvcmVVcGRhdGUiLCJvblVwZGF0ZWQiLCJvbkJlZm9yZVVubW91bnQiLCJvblVubW91bnRlZCIsIm9uQWN0aXZhdGVkIiwib25EZWFjdGl2YXRlZCIsIm9uU2VydmVyUHJlZmV0Y2giLCJvblJlbmRlclRyYWNrZWQiLCJvblJlbmRlclRyaWdnZXJlZCIsImluamVjdEVycm9yQ2FwdHVyZWRIb29rIiwib25FcnJvckNhcHR1cmVkIiwidmVyc2lvbiIsImRlZmluZUNvbXBvbmVudCIsInZjYSIsInNlZW5PYmplY3RzIiwiX3RyYXZlcnNlIiwic2VlbiIsImlzQSIsImlzRnJvemVuIiwiZGVwSWQiLCJ1aWQkMSIsImV4cE9yRm4iLCJpc1JlbmRlcldhdGNoZXIiLCJfdm0iLCJzeW5jIiwiZGVwcyIsIm5ld0RlcHMiLCJkZXBJZHMiLCJuZXdEZXBJZHMiLCJ0bXAiLCJzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24iLCJzb3VyY2VLZXkiLCJpbml0U3RhdGUiLCJpbml0UHJvcHMkMSIsImluaXRNZXRob2RzIiwiaW5pdERhdGEiLCJpbml0Q29tcHV0ZWQkMSIsImluaXRXYXRjaCIsInByb3BzT3B0aW9ucyIsImlzUm9vdCIsImdldERhdGEiLCJjb21wdXRlZFdhdGNoZXJPcHRpb25zIiwid2F0Y2hlcnMiLCJfY29tcHV0ZWRXYXRjaGVycyIsImlzU1NSIiwidXNlckRlZiIsImRlZmluZUNvbXB1dGVkIiwic2hvdWxkQ2FjaGUiLCJjcmVhdGVDb21wdXRlZEdldHRlciIsImNyZWF0ZUdldHRlckludm9rZXIiLCJjcmVhdGVXYXRjaGVyIiwic3RhdGVNaXhpbiIsImRhdGFEZWYiLCJwcm9wc0RlZiIsIiRzZXQiLCIkZGVsZXRlIiwiaW5pdFByb3ZpZGUiLCJwcm92aWRlT3B0aW9uIiwicHJvdmlkZWQiLCJpbml0SW5qZWN0aW9ucyIsInJlc29sdmVJbmplY3QiLCJwcm92aWRlS2V5IiwicHJvdmlkZURlZmF1bHQiLCJ1aWQiLCJpbml0TWl4aW4kMSIsIl9pbml0IiwiX2lzQ29tcG9uZW50IiwiaW5pdEludGVybmFsQ29tcG9uZW50IiwibWVyZ2VPcHRpb25zIiwicmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyIsIl9zZWxmIiwiJG1vdW50Iiwidm5vZGVDb21wb25lbnRPcHRpb25zIiwiX2NvbXBvbmVudFRhZyIsInN1cGVyIiwic3VwZXJPcHRpb25zIiwibW9kaWZpZWRPcHRpb25zIiwicmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyIsImV4dGVuZE9wdGlvbnMiLCJtb2RpZmllZCIsImxhdGVzdCIsInNlYWxlZCIsInNlYWxlZE9wdGlvbnMiLCJGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCIsImNvbnRleHRWbSIsIl9vcmlnaW5hbCIsImlzQ29tcGlsZWQiLCJfY29tcGlsZWQiLCJuZWVkTm9ybWFsaXphdGlvbiIsImluamVjdGlvbnMiLCJfc2NvcGVJZCIsImNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQiLCJtZXJnZVByb3BzIiwiY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCIsInZub2RlcyIsImNsb25lIiwiZGV2dG9vbHNNZXRhIiwiZ2V0Q29tcG9uZW50TmFtZSIsIl9fbmFtZSIsImNvbXBvbmVudFZOb2RlSG9va3MiLCJrZWVwQWxpdmUiLCJtb3VudGVkTm9kZSIsInByZXBhdGNoIiwiY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZSIsIm9sZFZub2RlIiwiaW5zZXJ0IiwiaG9va3NUb01lcmdlIiwiX2Jhc2UiLCJjaWQiLCJtb2RlbCIsInRyYW5zZm9ybU1vZGVsIiwiZnVuY3Rpb25hbCIsImluc3RhbGxDb21wb25lbnRIb29rcyIsImlubGluZVRlbXBsYXRlIiwidG9NZXJnZSIsIl9tZXJnZWQiLCJtZXJnZUhvb2siLCJmMSIsImYyIiwiY2FsbGJhY2siLCJnZW5lcmF0ZUNvbXBvbmVudFRyYWNlIiwiaGFzQ29uc29sZV8xIiwiY2xhc3NpZnlSRV8xIiwiY2xhc3NpZnlfMSIsIm1zZyIsImluY2x1ZGVGaWxlIiwiZmlsZSIsIl9fZmlsZSIsInJlcGVhdF8xIiwiY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlIiwic3RyYXRzIiwibWVyZ2VEYXRhIiwicmVjdXJzaXZlIiwidG9WYWwiLCJmcm9tVmFsIiwibWVyZ2VEYXRhT3JGbiIsInBhcmVudFZhbCIsImNoaWxkVmFsIiwiaW5zdGFuY2VEYXRhIiwiZGVmYXVsdERhdGEiLCJkZWR1cGVIb29rcyIsIm1lcmdlQXNzZXRzIiwiYXNzZXJ0T2JqZWN0VHlwZSIsImRlZmF1bHRTdHJhdCIsInBhcmVudF8xIiwiY2hlY2tDb21wb25lbnRzIiwidmFsaWRhdGVDb21wb25lbnROYW1lIiwibm9ybWFsaXplUHJvcHMiLCJub3JtYWxpem
3VJbmplY3QiLCJub3JtYWxpemVEaXJlY3RpdmVzJDEiLCJkaXJzIiwiZGlyZWN0aXZlcyIsImV4dGVuZHMiLCJtaXhpbnMiLCJtZXJnZUZpZWxkIiwic3RyYXQiLCJ3YXJuTWlzc2luZyIsImFzc2V0cyIsImNhbWVsaXplZElkIiwiUGFzY2FsQ2FzZUlkIiwiYWJzZW50IiwiYm9vbGVhbkluZGV4IiwiZ2V0VHlwZUluZGV4Iiwic3RyaW5nSW5kZXgiLCJnZXRQcm9wRGVmYXVsdFZhbHVlIiwicHJldlNob3VsZE9ic2VydmUiLCJhc3NlcnRQcm9wIiwiZ2V0VHlwZSIsInZhbGlkIiwiZXhwZWN0ZWRUeXBlcyIsImFzc2VydGVkVHlwZSIsImFzc2VydFR5cGUiLCJleHBlY3RlZFR5cGUiLCJoYXZlRXhwZWN0ZWRUeXBlcyIsImdldEludmFsaWRUeXBlTWVzc2FnZSIsInNpbXBsZUNoZWNrUkUiLCJmdW5jdGlvblR5cGVDaGVja1JFIiwiaXNTYW1lVHlwZSIsInJlY2VpdmVkVHlwZSIsImlzRXhwbGljYWJsZSIsImlzQm9vbGVhbiIsInN0eWxlVmFsdWUiLCJFWFBMSUNBQkxFX1RZUEVTIiwiaW5pdFVzZSIsInVzZSIsInBsdWdpbiIsImluc3RhbGxlZFBsdWdpbnMiLCJfaW5zdGFsbGVkUGx1Z2lucyIsImluc3RhbGwiLCJpbml0TWl4aW4iLCJtaXhpbiIsImluaXRFeHRlbmQiLCJTdXBlciIsIlN1cGVySWQiLCJjYWNoZWRDdG9ycyIsIl9DdG9yIiwiU3ViIiwiaW5pdFByb3BzIiwiaW5pdENvbXB1dGVkIiwiQ29tcCIsImluaXRBc3NldFJlZ2lzdGVycyIsIl9nZXRDb21wb25lbnROYW1lIiwibWF0Y2hlcyIsInBydW5lQ2FjaGUiLCJrZWVwQWxpdmVJbnN0YW5jZSIsImVudHJ5IiwicHJ1bmVDYWNoZUVudHJ5IiwicGF0dGVyblR5cGVzIiwiYnVpbHRJbkNvbXBvbmVudHMiLCJLZWVwQWxpdmUiLCJpbmNsdWRlIiwiZXhjbHVkZSIsImNhY2hlVk5vZGUiLCJ2bm9kZVRvQ2FjaGUiLCJrZXlUb0NhY2hlIiwiY3JlYXRlZCIsImRlc3Ryb3llZCIsImluaXRHbG9iYWxBUEkiLCJjb25maWdEZWYiLCJ1dGlsIiwiZGVsZXRlIiwib2JzZXJ2YWJsZSIsInNzckNvbnRleHQiLCJhY2NlcHRWYWx1ZSIsImF0dHIiLCJpc0VudW1lcmF0ZWRBdHRyIiwiaXNWYWxpZENvbnRlbnRFZGl0YWJsZVZhbHVlIiwiY29udmVydEVudW1lcmF0ZWRWYWx1ZSIsImlzRmFsc3lBdHRyVmFsdWUiLCJpc0Jvb2xlYW5BdHRyIiwieGxpbmtOUyIsImlzWGxpbmsiLCJnZXRYbGlua1Byb3AiLCJnZW5DbGFzc0ZvclZub2RlIiwiY2hpbGROb2RlIiwibWVyZ2VDbGFzc0RhdGEiLCJyZW5kZXJDbGFzcyIsInN0YXRpY0NsYXNzIiwiZHluYW1pY0NsYXNzIiwic3RyaW5naWZ5Q2xhc3MiLCJzdHJpbmdpZnlBcnJheSIsInN0cmluZ2lmeU9iamVjdCIsInN0cmluZ2lmaWVkIiwibmFtZXNwYWNlTWFwIiwibWF0aCIsImlzSFRNTFRhZyIsImlzU1ZHIiwiaXNQcmVUYWciLCJ1bmtub3duRWxlbWVudENhY2hlIiwiSFRNTFVua25vd25FbGVtZW50IiwiaXNUZXh0SW5wdXRUeXBlIiwicXVlcnkiLCJ0YWdOYW1lIiwibXVsdGlwbGUiLCJjcmVhdGVFbGVtZW50TlMiLCJuYW1lc3BhY2UiLCJjcmVhdGVDb21tZW50IiwibmV3Tm9kZSIsInJlZmVyZW5jZU5vZGUiLCJzZXRUZXh0Q29udGVudCIsInNldFN0eWxlU2NvcGUiLCJzY29wZUlkIiwibm9kZU9wcyIsInJlZ2lzdGVyUmVmIiwiaXNSZW1vdmFsIiwicmVmVmFsdWUiLCIkcmVmc1ZhbHVlIiwiaXNGb3IiLCJyZWZJbkZvciIsIl9pc1N0cmluZyIsIl9pc1JlZiIsInJlZnMiLCJpbmNsdWRlcyIsInNldFNldHVwUmVmIiwiZW1wdHlOb2RlIiwic2FtZVZub2RlIiwic2FtZUlucHV0VHlwZSIsInR5cGVBIiwidHlwZUIiLCJjcmVhdGVLZXlUb09sZElkeCIsImJlZ2luSWR4IiwiZW5kSWR4IiwiY3JlYXRlUGF0Y2hGdW5jdGlvbiIsImJhY2tlbmQiLCJlbXB0eU5vZGVBdCIsImNyZWF0ZVJtQ2IiLCJjaGlsZEVsbSIsInJlbW92ZU5vZGUiLCJpblZQcmUiLCJpZ25vcmUiLCJjcmVhdGluZ0VsbUluVlByZSIsImNyZWF0ZUVsbSIsImluc2VydGVkVm5vZGVRdWV1ZSIsInBhcmVudEVsbSIsInJlZkVsbSIsIm5lc3RlZCIsIm93bmVyQXJyYXkiLCJzZXRTY29wZSIsImNyZWF0ZUNoaWxkcmVuIiwiaW52b2tlQ3JlYXRlSG9va3MiLCJpc1JlYWN0aXZhdGVkIiwiaW5pdENvbXBvbmVudCIsInJlYWN0aXZhdGVDb21wb25lbnQiLCJwZW5kaW5nSW5zZXJ0IiwiaXNQYXRjaGFibGUiLCJpbm5lck5vZGUiLCJ0cmFuc2l0aW9uIiwiYWN0aXZhdGUiLCJjaGVja0R1cGxpY2F0ZUtleXMiLCJpXzIiLCJhbmNlc3RvciIsImFkZFZub2RlcyIsInN0YXJ0SWR4IiwiaW52b2tlRGVzdHJveUhvb2siLCJyZW1vdmVWbm9kZXMiLCJjaCIsInJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2siLCJybSIsImlfMyIsInVwZGF0ZUNoaWxkcmVuIiwib2xkQ2giLCJuZXdDaCIsInJlbW92ZU9ubHkiLCJvbGRLZXlUb0lkeCIsImlkeEluT2xkIiwidm5vZGVUb01vdmUiLCJvbGRTdGFydElkeCIsIm5ld1N0YXJ0SWR4Iiwib2xkRW5kSWR4Iiwib2xkU3RhcnRWbm9kZSIsIm9sZEVuZFZub2RlIiwibmV3RW5kSWR4IiwibmV3U3RhcnRWbm9kZSIsIm5ld0VuZFZub2RlIiwiY2FuTW92ZSIsInBhdGNoVm5vZGUiLCJmaW5kSWR4SW5PbGQiLCJzZWVuS2V5cyIsImlfNCIsImlfNSIsImh5ZHJhdGUiLCJwb3N0cGF0Y2giLCJpbnZva2VJbnNlcnRIb29rIiwiaW5pdGlhbCIsImlfNiIsImh5ZHJhdGlvbkJhaWxlZCIsImlzUmVuZGVyZWRNb2R1bGUiLCJhc3NlcnROb2RlTWF0Y2giLCJoYXNDaGlsZE5vZGVzIiwiY2hpbGRyZW5NYXRjaCIsImlfNyIsImNoaWxkTm9kZXMiLCJmdWxsSW52b2tlIiwiaXNJbml0aWFsUGF0Y2giLCJpc1JlYWxFbGVtZW50IiwiaGFzQXR0cmlidXRlIiwib2xkRWxtIiwiX2xlYXZlQ2IiLCJwYXRjaGFibGUiLCJpXzgiLCJpXzkiLCJpbnNlcnRfMSIsImlfMTAiLCJkaXJlY3RpdmVzJDEiLCJ1cGRhdGVEaXJlY3RpdmVzIiwib2xkRGlyIiwiZGlyIiwiaXNDcmVhdGUiLCJpc0Rlc3Ryb3kiLCJvbGREaXJzIiwibm9ybWFsaXplRGlyZWN0aXZlcyIsIm5ld0RpcnMiLCJkaXJzV2l0aEluc2VydCIsImRpcnNXaXRoUG9zdHBhdGNoIiwib2xkQXJnIiwiYXJnIiwiY2FsbEhvb2siLCJjb21wb25lbnRVcGRhdGVkIiwiY2FsbEluc2VydCIsImVtcHR5TW9kaWZpZXJzIiwibW9kaWZpZXJzIiwiZ2V0UmF3RGlyTmFtZSIsInNldHVwRGVmIiwicmF3TmFtZSIsImJhc2VNb2R1bGVzIiwidXBkYXRlQXR0cnMiLCJpbmhlcml0QXR0cnMiLCJvbGRBdHRycyIsIl92X2F0dHJfcHJveHkiLCJzZXRBdHRyIiwicmVtb3ZlQXR0cmlidXRlTlMiLCJpc0luUHJlIiwiYmFzZVNldEF0dHIiLCJzZXRBdHRyaWJ1dGVOUyIsIl9faWVwaCIsImJsb2NrZXJfMSIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInVwZGF0ZUNsYXNzIiwib2xkRGF0YSIsImNscyIsInRyYW5zaXRpb25DbGFzcyIsIl90cmFuc2l0aW9uQ2xhc3NlcyIsIl9wcmV2Q2xhc3MiLCJjaHIiLCJleHByZXNzaW9uUG9zIiwiZXhwcmVzc2lvbkVuZFBvcyIsIndhcm4kMSIsImtsYXNzJDEiLCJ2YWxpZERpdmlzaW9uQ2hhclJFIiwicGFyc2VGaWx0ZXJzIiwiZXhwIiwiZmlsdGVycyIsImluU2luZ2xlIiwiaW5Eb3VibGUiLCJpblRlbX
3BsYXRlU3RyaW5nIiwiaW5SZWdleCIsImN1cmx5Iiwic3F1YXJlIiwicGFyZW4iLCJsYXN0RmlsdGVySW5kZXgiLCJwdXNoRmlsdGVyIiwid3JhcEZpbHRlciIsImJhc2VXYXJuIiwicGx1Y2tNb2R1bGVGdW5jdGlvbiIsImFkZFByb3AiLCJkeW5hbWljIiwicmFuZ2VTZXRJdGVtIiwicGxhaW4iLCJhZGRBdHRyIiwiZHluYW1pY0F0dHJzIiwiYWRkUmF3QXR0ciIsImF0dHJzTWFwIiwiYXR0cnNMaXN0IiwiYWRkRGlyZWN0aXZlIiwiaXNEeW5hbWljQXJnIiwicHJlcGVuZE1vZGlmaWVyTWFya2VyIiwiYWRkSGFuZGxlciIsImltcG9ydGFudCIsInByZXZlbnQiLCJtaWRkbGUiLCJuYXRpdmUiLCJuYXRpdmVFdmVudHMiLCJuZXdIYW5kbGVyIiwiZ2V0UmF3QmluZGluZ0F0dHIiLCJyYXdBdHRyc01hcCIsImdldEJpbmRpbmdBdHRyIiwiZ2V0U3RhdGljIiwiZHluYW1pY1ZhbHVlIiwiZ2V0QW5kUmVtb3ZlQXR0ciIsInN0YXRpY1ZhbHVlIiwicmVtb3ZlRnJvbU1hcCIsImdldEFuZFJlbW92ZUF0dHJCeVJlZ2V4IiwiZ2VuQ29tcG9uZW50TW9kZWwiLCJiYXNlVmFsdWVFeHByZXNzaW9uIiwidmFsdWVFeHByZXNzaW9uIiwiYXNzaWdubWVudCIsImdlbkFzc2lnbm1lbnRDb2RlIiwicGFyc2VNb2RlbCIsImxhc3RJbmRleE9mIiwiZW9mIiwiaXNTdHJpbmdTdGFydCIsInBhcnNlU3RyaW5nIiwicGFyc2VCcmFja2V0IiwiaW5CcmFja2V0Iiwic3RyaW5nUXVvdGUiLCJSQU5HRV9UT0tFTiIsIkNIRUNLQk9YX1JBRElPX1RPS0VOIiwibW9kZWwkMSIsIl93YXJuIiwiZ2VuU2VsZWN0IiwiZ2VuQ2hlY2tib3hNb2RlbCIsImdlblJhZGlvTW9kZWwiLCJnZW5EZWZhdWx0TW9kZWwiLCJ2YWx1ZUJpbmRpbmciLCJ0cnVlVmFsdWVCaW5kaW5nIiwiZmFsc2VWYWx1ZUJpbmRpbmciLCJzZWxlY3RlZFZhbCIsImNvZGUiLCJ2YWx1ZV8xIiwidHlwZUJpbmRpbmciLCJiaW5kaW5nIiwibmVlZENvbXBvc2l0aW9uR3VhcmQiLCJub3JtYWxpemVFdmVudHMiLCJldmVudF8xIiwiY2hhbmdlIiwidXNlTWljcm90YXNrRml4IiwiYXR0YWNoZWRUaW1lc3RhbXBfMSIsIm9yaWdpbmFsXzEiLCJfd3JhcHBlciIsImN1cnJlbnRUYXJnZXQiLCJvd25lckRvY3VtZW50IiwidXBkYXRlRE9NTGlzdGVuZXJzIiwic3ZnQ29udGFpbmVyIiwidXBkYXRlRE9NUHJvcHMiLCJvbGRQcm9wcyIsIl92YWx1ZSIsInN0ckN1ciIsInNob3VsZFVwZGF0ZVZhbHVlIiwiY2hlY2tWYWwiLCJ
3jb21wb3NpbmciLCJpc05vdEluRm9jdXNBbmREaXJ0eSIsImlzRGlydHlXaXRoTW9kaWZpZXJzIiwibm90SW5Gb2N1cyIsIl92TW9kaWZpZXJzIiwicGFyc2VTdHlsZVRleHQiLCJjc3NUZXh0IiwibGlzdERlbGltaXRlciIsInByb3BlcnR5RGVsaW1pdGVyIiwibm9ybWFsaXplU3R5bGVEYXRhIiwibm9ybWFsaXplU3R5bGVCaW5kaW5nIiwic3RhdGljU3R5bGUiLCJiaW5kaW5nU3R5bGUiLCJnZXRTdHlsZSIsImNoZWNrQ2hpbGQiLCJzdHlsZURhdGEiLCJlbXB0eVN0eWxlIiwiY3NzVmFyUkUiLCJpbXBvcnRhbnRSRSIsInNldFByb3AiLCJub3JtYWxpemVkTmFtZSIsIm5vcm1hbGl6ZSIsInZlbmRvck5hbWVzIiwiY2FwTmFtZSIsInVwZGF0ZVN0eWxlIiwib2xkU3RhdGljU3R5bGUiLCJvbGRTdHlsZUJpbmRpbmciLCJub3JtYWxpemVkU3R5bGUiLCJvbGRTdHlsZSIsIm5ld1N0eWxlIiwic3R5bGUkMSIsIndoaXRlc3BhY2VSRSQxIiwidGFyIiwicmVzb2x2ZVRyYW5zaXRpb24iLCJjc3MiLCJhdXRvQ3NzVHJhbnNpdGlvbiIsImVudGVyQ2xhc3MiLCJlbnRlclRvQ2xhc3MiLCJlbnRlckFjdGl2ZUNsYXNzIiwibGVhdmVDbGFzcyIsImxlYXZlVG9DbGFzcyIsImxlYXZlQWN0aXZlQ2xhc3MiLCJoYXNUcmFuc2l0aW9uIiwiVFJBTlNJVElPTiIsIkFOSU1BVElPTiIsInRyYW5zaXRpb25Qcm9wIiwidHJhbnNpdGlvbkVuZEV2ZW50IiwiYW5pbWF0aW9uUHJvcCIsImFuaW1hdGlvbkVuZEV2ZW50Iiwib250cmFuc2l0aW9uZW5kIiwib253ZWJraXR0cmFuc2l0aW9uZW5kIiwib25hbmltYXRpb25lbmQiLCJvbndlYmtpdGFuaW1hdGlvbmVuZCIsInJhZiIsIm5leHRGcmFtZSIsImFkZFRyYW5zaXRpb25DbGFzcyIsInRyYW5zaXRpb25DbGFzc2VzIiwicmVtb3ZlVHJhbnNpdGlvbkNsYXNzIiwid2hlblRyYW5zaXRpb25FbmRzIiwiZ2V0VHJhbnNpdGlvbkluZm8iLCJwcm9wQ291bnQiLCJlbmRlZCIsIm9uRW5kIiwidHJhbnNmb3JtUkUiLCJzdHlsZXMiLCJnZXRDb21wdXRlZFN0eWxlIiwidHJhbnNpdGlvbkRlbGF5cyIsInRyYW5zaXRpb25EdXJhdGlvbnMiLCJ0cmFuc2l0aW9uVGltZW91dCIsImdldFRpbWVvdXQiLCJhbmltYXRpb25EZWxheXMiLCJhbmltYXRpb25EdXJhdGlvbnMiLCJhbmltYXRpb25UaW1lb3V0IiwiaGFzVHJhbnNmb3JtIiwiZGVsYXlzIiwiZHVyYXRpb25zIiwidG9NcyIsImVudGVyIiwidG9nZ2xlRGlzcGxheSIsImNhbmNlbGxlZCIsIl9lbnRlckNiIiwiYXBwZWFyQ2xhc3MiLCJhcHBlYXJUb0NsYXNzIiwiYXBwZWFyQWN0aXZlQ2xhc3MiLCJiZWZvcmVFbnRlciIsImFmdGVyRW50ZXIiLCJlbnRlckNhbmNlbGxlZCIsImJlZm9yZUFwcGVhciIsImFwcGVhciIsImFmdGVyQXBwZWFyIiwiYXBwZWFyQ2FuY2VsbGVkIiwidHJhbnNpdGlvbk5vZGUiLCJpc0FwcGVhciIsInN0YXJ0Q2xhc3MiLCJhY3RpdmVDbGFzcyIsInRvQ2xhc3MiLCJiZWZvcmVFbnRlckhvb2siLCJlbnRlckhvb2siLCJhZnRlckVudGVySG9vayIsImVudGVyQ2FuY2VsbGVkSG9vayIsImV4cGxpY2l0RW50ZXJEdXJhdGlvbiIsImNoZWNrRHVyYXRpb24iLCJleHBlY3RzQ1NTIiwidXNlcldhbnRzQ29udHJvbCIsImdldEhvb2tBcmd1bWVudHNMZW5ndGgiLCJzaG93IiwicGVuZGluZ05vZGUiLCJpc1ZhbGlkRHVyYXRpb24iLCJsZWF2ZSIsImJlZm9yZUxlYXZlIiwiYWZ0ZXJMZWF2ZSIsImxlYXZlQ2FuY2VsbGVkIiwiZGVsYXlMZWF2ZSIsImV4cGxpY2l0TGVhdmVEdXJhdGlvbiIsInBlcmZvcm1MZWF2ZSIsImludm9rZXJGbnMiLCJfZW50ZXIiLCJtb2R1bGVzJDEiLCJwYXRjaCIsInZtb2RlbCIsInRyaWdnZXIiLCJkaXJlY3RpdmUiLCJfdk9wdGlvbnMiLCJzZXRTZWxlY3RlZCIsImdldFZhbHVlIiwib25Db21wb3NpdGlvblN0YXJ0Iiwib25Db21wb3NpdGlvbkVuZCIsInByZXZPcHRpb25zXzEiLCJjdXJPcHRpb25zXzEiLCJoYXNOb01hdGNoaW5nT3B0aW9uIiwiYWN0dWFsbHlTZXRTZWxlY3RlZCIsImlzTXVsdGlwbGUiLCJsb2NhdGVOb2RlIiwicGxhdGZvcm1EaXJlY3RpdmVzIiwib3JpZ2luYWxEaXNwbGF5IiwiX192T3JpZ2luYWxEaXNwbGF5IiwidW5iaW5kIiwidHJhbnNpdGlvblByb3BzIiwiZ2V0UmVhbENoaWxkIiwiY29tcE9wdGlvbnMiLCJleHRyYWN0VHJhbnNpdGlvbkRhdGEiLCJyYXdDaGlsZCIsImhhc1BhcmVudFRyYW5zaXRpb24iLCJpc1NhbWVDaGlsZCIsIm9sZENoaWxkIiwiaXNOb3RUZXh0Tm9kZSIsImlzVlNob3dEaXJlY3RpdmUiLCJUcmFuc2l0aW9uIiwiX2xlYXZpbmciLCJvbGRSYXdDaGlsZCIsImRlbGF5ZWRMZWF2ZV8xIiwibW92ZUNsYXNzIiwiY2FsbFBlbmRpbmdDYnMiLCJfbW92ZUNiIiwicmVjb3JkUG9zaXRpb24iLCJuZXdQb3MiLCJhcHBseVRyYW5zbGF0aW9uIiwib2xkUG9zIiwicG9zIiwiZHgiLCJkeSIsIm1vdmVkIiwidHJhbnNmb3JtIiwiV2Via2l0VHJhbnNmb3JtIiwidHJhbnNpdGlvbkR1cmF0aW9uIiwicGxhdGZvcm1Db21wb25lbnRzIiwiVHJhbnNpdGlvbkdyb3VwIiwiYmVmb3JlTW91bnQiLCJrZXB0IiwicHJldkNoaWxkcmVuIiwicmF3Q2hpbGRyZW4iLCJ0cmFuc2l0aW9uRGF0YSIsInJlbW92ZWQiLCJoYXNNb3ZlIiwiX3JlZmxvdyIsImVsXzEiLCJwcm9wZXJ0eU5hbWUiLCJfaGFzTW92ZSIsImNsb25lTm9kZSIsImRlZmF1bHRUYWdSRSIsInJlZ2V4RXNjYXBlUkUiLCJidWlsZFJlZ2V4IiwiZGVsaW1pdGVycyIsInBhcnNlVGV4dCIsInRhZ1JFIiwidG9rZW5WYWx1ZSIsInRva2VucyIsInJhd1Rva2VucyIsInRyYW5zZm9ybU5vZGUkMSIsImNsYXNzQmluZGluZyIsImdlbkRhdGEkMiIsImtsYXNzIiwidHJhbnNmb3JtTm9kZSIsImdlbkRhdGEiLCJzdHlsZUJpbmRpbmciLCJnZW5EYXRhJDEiLCJkZWNvZGVyIiwiaGUiLCJkZWNvZGUiLCJpc1VuYXJ5VGFnIiwiY2FuQmVMZWZ0T3BlblRhZyIsImlzTm9uUGhyYXNpbmdUYWciLCJhdHRyaWJ1dGUiLCJkeW5hbWljQXJnQXR0cmlidXRlIiwibmNuYW1lIiwicW5hbWVDYXB0dXJlIiwic3RhcnRUYWdPcGVuIiwic3RhcnRUYWdDbG9zZSIsImRvY3R5cGUiLCJjb21tZW50IiwiY29uZGl0aW9uYWxDb21tZW50IiwiaXNQbGFpblRleHRFbGVtZW50IiwicmVDYWNoZSIsImRlY29kaW5nTWFwIiwiZW5jb2RlZEF0dHIiLCJlbmNvZGVkQXR0cldpdGhOZXdMaW5lcyIsImlzSWdub3JlTmV3bGluZVRhZyIsInNob3VsZElnbm9yZUZpcnN0TmV3bGluZSIsImRlY29kZUF0dHIiLCJzaG91bGREZWNvZGVOZXdsaW5lcyIsInJlIiwicGFyc2VIVE1MIiwibGFzdF
3RhZyIsInN0YWNrIiwiZXhwZWN0SFRNTCIsImVuZFRhZ0xlbmd0aF8xIiwic3RhY2tlZFRhZ18xIiwicmVTdGFja2VkVGFnIiwicmVzdCIsImNoYXJzIiwicGFyc2VFbmRUYWciLCJ0ZXh0RW5kIiwiY29tbWVudEVuZCIsInNob3VsZEtlZXBDb21tZW50IiwiYWR2YW5jZSIsImNvbmRpdGlvbmFsRW5kIiwiZG9jdHlwZU1hdGNoIiwiZW5kVGFnTWF0Y2giLCJjdXJJbmRleCIsInN0YXJ0VGFnTWF0Y2giLCJwYXJzZVN0YXJ0VGFnIiwiaGFuZGxlU3RhcnRUYWciLCJ1bmFyeVNsYXNoIiwidW5hcnkiLCJzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYiLCJvdXRwdXRTb3VyY2VSYW5nZSIsImxvd2VyQ2FzZWRUYWciLCJsb3dlckNhc2VkVGFnTmFtZSIsInRyYW5zZm9ybXMiLCJwcmVUcmFuc2Zvcm1zIiwicG9zdFRyYW5zZm9ybXMiLCJwbGF0Zm9ybUlzUHJlVGFnIiwicGxhdGZvcm1NdXN0VXNlUHJvcCIsInBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlIiwibWF5YmVDb21wb25lbnQiLCJvblJFIiwiZGlyUkUiLCJmb3JBbGlhc1JFIiwiZm9ySXRlcmF0b3JSRSIsInN0cmlwUGFyZW5zUkUiLCJkeW5hbWljQXJnUkUiLCJhcmdSRSIsImJpbmRSRSIsIm1vZGlmaWVyUkUiLCJzbG90UkUiLCJsaW5lQnJlYWtSRSIsIndoaXRlc3BhY2VSRSIsImludmFsaWRBdHRyaWJ1dGVSRSIsImRlY29kZUhUTUxDYWNoZWQiLCJlbXB0eVNsb3RTY29wZVRva2VuIiwiY3JlYXRlQVNURWxlbWVudCIsIm1ha2VBdHRyc01hcCIsInJvb3QiLCJjdXJyZW50UGFyZW50IiwicHJlc2VydmVXaGl0ZXNwYWNlIiwid2hpdGVzcGFjZU9wdGlvbiIsIndoaXRlc3BhY2UiLCJpblByZSIsIndhcm5lZCIsIndhcm5PbmNlIiwiY2xvc2VFbGVtZW50IiwidHJpbUVuZGluZ1doaXRlc3BhY2UiLCJwcm9jZXNzZWQiLCJwcm9jZXNzRWxlbWVudCIsImlmIiwiZWxzZWlmIiwiZWxzZSIsImNoZWNrUm9vdENvbnN0cmFpbnRzIiwiYWRkSWZDb25kaXRpb24iLCJibG9jayIsImZvcmJpZGRlbiIsInByb2Nlc3NJZkNvbmRpdGlvbnMiLCJzbG90U2NvcGUiLCJzbG90VGFyZ2V0IiwibGFzdE5vZGUiLCJjb21tZW50cyIsImd1YXJkSUVTVkdCdWciLCJjdW11bGF0ZWQiLCJpc0ZvcmJpZGRlblRhZyIsInByb2Nlc3NQcmUiLCJwcm9jZXNzUmF3QXR0cnMiLCJwcm9jZXNzRm9yIiwicHJvY2Vzc0lmIiwicHJvY2Vzc09uY2UiLCJpc1RleHRUYWciLCJwcm9jZXNzS2V5IiwicHJvY2Vzc1JlZiIsInByb2Nlc3NTbG90Q29udGVudCIsInByb2Nlc3NTbG90T3V0bGV0IiwicHJvY2Vzc0NvbXBvbmVudCIsInByb2Nlc3NBdHRycyIsImZvciIsIml0ZXJhdG9yMiIsIml0ZXJhdG9yMSIsImNoZWNrSW5Gb3IiLCJwYXJzZUZvciIsImluTWF0Y2giLCJhbGlhcyIsIml0ZXJhdG9yTWF0Y2giLCJmaW5kUHJldkVsZW1lbnQiLCJpZkNvbmRpdGlvbnMiLCJzbG90QmluZGluZyIsInNsb3RUYXJnZXREeW5hbWljIiwiZ2V0U2xvdE5hbWUiLCJuYW1lXzMiLCJzbG90Q29udGFpbmVyXzEiLCJzbG90TmFtZSIsInN5bmNHZW4iLCJpc0R5bmFtaWMiLCJoYXNCaW5kaW5ncyIsInBhcnNlTW9kaWZpZXJzIiwiY2FtZWwiLCJhcmdNYXRjaCIsImNoZWNrRm9yQWxpYXNNb2RlbCIsInJldF8xIiwiaWVOU0J1ZyIsImllTlNQcmVmaXgiLCJfZWwiLCJwcmVUcmFuc2Zvcm1Ob2RlIiwiaWZDb25kaXRpb24iLCJpZkNvbmRpdGlvbkV4dHJhIiwiaGFzRWxzZSIsImVsc2VJZkNvbmRpdGlvbiIsImJyYW5jaDAiLCJjbG9uZUFTVEVsZW1lbnQiLCJicmFuY2gxIiwiYnJhbmNoMiIsImlzU3RhdGljS2V5IiwiaXNQbGF0Zm9ybVJlc2VydmVkVGFnIiwiYmFzZU9wdGlvbnMiLCJnZW5TdGF0aWNLZXlzQ2FjaGVkIiwiZ2VuU3RhdGljS2V5cyIsIm9wdGltaXplIiwibWFya1N0YXRpYyIsIm1hcmtTdGF0aWNSb290cyIsInN0YXRpY0luRm9yIiwic3RhdGljUm9vdCIsImlzRGlyZWN0Q2hpbGRPZlRlbXBsYXRlRm9yIiwiZm5FeHBSRSIsImZuSW52b2tlUkUiLCJzaW1wbGVQYXRoUkUiLCJlc2MiLCJ0YWIiLCJzcGFjZSIsInVwIiwiZG93biIsImtleU5hbWVzIiwiZ2VuR3VhcmQiLCJtb2RpZmllckNvZGUiLCJjdHJsIiwiYWx0IiwibWV0YSIsImdlbkhhbmRsZXJzIiwicHJlZml4Iiwic3RhdGljSGFuZGxlcnMiLCJkeW5hbWljSGFuZGxlcnMiLCJoYW5kbGVyQ29kZSIsImdlbkhhbmRsZXIiLCJpc01ldGhvZFBhdGgiLCJpc0Z1bmN0aW9uRXhwcmVzc2lvbiIsImlzRnVuY3Rpb25JbnZvY2F0aW9uIiwiZ2VuTW9kaWZpZXJDb2RlIiwibW9kaWZpZXJzXzEiLCJrZXlNb2RpZmllciIsImdlbktleUZpbHRlciIsImdlbkZpbHRlckNvZGUiLCJrZXlWYWwiLCJrZXlOYW1lIiwid3JhcExpc3RlbmVycyIsIndyYXBEYXRhIiwiYmFzZURpcmVjdGl2ZXMiLCJjbG9hayIsIkNvZGVnZW5TdGF0ZSIsImRhdGFHZW5GbnMiLCJvbmNlSWQiLCJnZW5lcmF0ZSIsImFzdCIsInN0YXRlIiwiZ2VuRWxlbWVudCIsInN0YXRpY1Byb2Nlc3NlZCIsImdlblN0YXRpYyIsIm9uY2VQcm9jZXNzZWQiLCJnZW5PbmNlIiwiZm9yUHJvY2Vzc2VkIiwiZ2VuRm9yIiwiaWZQcm9jZXNzZWQiLCJnZW5JZiIsImdlblNsb3QiLCJnZW5Db21wb25lbnQiLCJiaW5kaW5ncyIsIl9faXNTY3JpcHRTZXR1cCIsImNoZWNrQmluZGluZ1R5cGUiLCJnZW5DaGlsZHJlbiIsImNhbWVsTmFtZSIsIlBhc2NhbE5hbWUiLCJjaGVja1R5cGUiLCJmcm9tQ29uc3QiLCJmcm9tTWF5YmVSZWYiLCJvcmlnaW5hbFByZVN0YXRlIiwiYWx0R2VuIiwiYWx0RW1wdHkiLCJnZW5JZkNvbmRpdGlvbnMiLCJjb25kaXRpb25zIiwiZ2VuVGVybmFyeUV4cCIsImFsdEhlbHBlciIsImdlbkRpcmVjdGl2ZXMiLCJnZW5Qcm9wcyIsImdlblNjb3BlZFNsb3RzIiwiZ2VuSW5saW5lVGVtcGxhdGUiLCJuZWVkUnVudGltZSIsImhhc1J1bnRpbWUiLCJnZW4iLCJpbmxpbmVSZW5kZXJGbnMiLCJjb250YWluc1Nsb3RDaGlsZCIsIm5lZWRzS2V5IiwicGFyZW50XzIiLCJnZW5lcmF0ZWRTbG90cyIsImdlblNjb3BlZFNsb3QiLCJpc0xlZ2FjeVN5bnRheCIsInJldmVyc2VQcm94eSIsImNoZWNrU2tpcCIsImFsdEdlbkVsZW1lbnQiLCJhbHRHZW5Ob2RlIiwibm9ybWFsaXphdGlvblR5cGVfMSIsImdldE5vcm1hbGl6YXRpb25UeXBlIiwiZ2VuXzEiLCJnZW5Ob2RlIiwibmVlZHNOb3JtYWxpemF0aW9uIiwiZ2VuQ29tbWVudCIsImdlblRleHQiLCJ0cmFuc2Zvcm1TcGVjaWFsTmV3bGluZXMiLCJjb21wb25lbnROYW1lIiwic3RhdGljUHJvcHMiLCJkeW5hbWljUHJvcHMiLCJwcm9oaWJpdGVkS2V5d29yZFJFIiwidW5hcnlPcGVyYXRvcnNSRSIsInN0cmlwU3RyaW5nUkUiLCJkZXRlY3RFcnJvcnMiLCJjaGVja05vZGUiLCJjaGVja0ZvciIsImNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJFeHByZXNzaW9uIiwiY2hlY2tFdmVudCIsImNoZWNrRXhwcmVzc2lvbiIsInN0cmlwcGVkIiwia2V5d29yZE1hdGNoIiwiY2hlY2tJZGVudGlmaWVyIiwiaWRlbnQiLCJnZW5lcmF0ZUNvZGVGcmFtZSIsImxpbmVzIiwiY291bnQiLCJyZXBlYXQiLCJsaW5lTGVuZ3RoIiwibGVuZ3RoXzEiLCJsZW5ndGhfMiIsImNyZWF0ZUZ1bmN0aW9uIiwiZXJyb3JzIiwiY3JlYXRlQ29tcGlsZVRvRnVuY3Rpb25GbiIsImNvbXBpbGUiLCJjb21waWxlZCIsInRpcHMiLCJmbkdlbkVycm9ycyIsImNyZWF0ZUNvbXBpbGVyQ3JlYXRvciIsImJhc2VDb21waWxlIiwiZmluYWxPcHRpb25zIiwibGVhZGluZ1NwYWNlTGVuZ3RoXzEiLCJjb21waWxlVG9GdW5jdGlvbnMiLCJkaXYiLCJjcmVhdGVDb21waWxlciIsImdldFNob3VsZERlY29kZSIsImhyZWYiLCJpZFRvVGVtcGxhdGUiLCJtb3VudCIsImdldE91dGVySFRNTCIsIm91dGVySFRNTCIsInNjaGVkdWxlciIsImRvY3VtZW50RWxlbWVudCIsImV4cGlyZXMiLCJ0b1VUQ1N0cmluZyIsImVuY29kZVVSSUNvbXBvbmVudCIsImRlY29kZVVSSUNvbXBvbmVudCIsImVzY2FwZSIsImNvb2tpZSIsIndyaXRlIiwicmVhZCIsIndpdGhBdHRyaWJ1dGVzIiwiY29udmVydGVyIiwiYXR0cmlidXRlcyIsIndpdGhDb252ZXJ0ZXIiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiZ2xvYmFsVGh
3pcyIsIiQiLCIkaXRlbXMiLCJlYWNoIiwiYXBpZGFlX2xpc3QiLCJteW1hcCIsInN3aXRjaGVyIiwibmJyZXN1bHRzIiwiZW5hYmxlTW9kZXMiLCJkaXNwbGF5TW9kZSIsInRlbXBGaWx0ZXJzIiwidGVtcE9iamVjdHMiLCJzYXZlU2VhcmNoSW5VcmwiLCJjb29raWVLZXkiLCJkaXNhYmxlU2F2ZVNlYXJjaCIsInNob3dfZmlsdGVycyIsImxvYWRPYmplY3RzIiwibG9hZEZpbHRlcnMiLCJkZWZhdWx0TW9kZSIsInBvc3RfaWQiLCJwYXJzZVVybCIsImZpbHRlck9iamVjdHMiLCJmaWx0ZXJEaXNwb3NPbiIsImlzRmlsdGVyZWREaXBvcyIsInJldHVybk5iUmVzdWx0cyIsImxhYmVscyIsInJlc3VsdGF0cyIsImxhYmVsX25iX3Jlc3VsdHMiLCJudW1iZXJPYmplY3RzIiwicGx1cmFsIiwic2luZ3VsYXIiLCJhcmVGaWx0ZXJzRGlzcGxheWVkIiwidXNlZEZpbHRlcnMiLCJ1c2VWYWxpZGF0aW9uQnRuIiwiZGlzcGxheU9iamVjdHMiLCJudW1iZXJPZlRlbXBzT2JqZWN0cyIsImRpc3BsYXlUZW1wT2JqZWN0cyIsImZpbHRlck9rIiwibWFwT2siLCJmaWx0cmVPYmplY3RzIiwibmJfcGVyX3BhZ2UiLCJob3Zlckl0ZW1Gcm9tTGlzdCIsImNoYW5nZVVybCIsInZhbGlkYXRlRmlsdGVycyIsImZpZWxkVmFsdWVDaGFuZ2UiLCJuZWVkVG9DYWxsQVBJIiwiZmlsdGVyVGVtcHNPYmplY3RzIiwibWFwRmlsdGVyIiwib2JqZWN0T3V0T2ZNYXAiLCJ3aXNoTGlzdEV2ZW50Iiwib2JqZWN0X2lkIiwiZmlsdHJlciIsImdldERpc3BvQXZhaWxhYmlsaXRpZXMiLCJvYmplY3RJc1ZhbGlkRm9yRmlsdGVyIiwiY3VzdG9tX2h0bWwiLCJvcGVuU3lzdGVtT2JqZXRzIiwib3NfdWkiLCJhamF4IiwiYWpheHVybCIsImlkc19hcGlkYWVfYXZhaWxhYmxlcyIsImlkc19vc19hdmFpbGFibGVzIiwib3MiLCJwcml4IiwiZGlzcG9zIiwiYV9wYXJ0aXJfZGUiLCJkaXNwb25pYmxlIiwiZm9yY2VNb3ZlIiwiZm9yY2VfbW92ZSIsImFsbF9sYWJlbCIsIm9uZUZhbHNlIiwib3BlcmF0b3IiLCJvbmVPcHRpb25GYWxzZSIsIm9uZU90aW9uc0hhdmVWYWx1ZSIsIm9uZU9wdGlvblRydWUiLCJzZWxlY3RlZE9wdGlvbiIsImxhYmVsIiwiaXNWYWxpZGVGb3JEYXRlRmlsdGVyIiwiZmlsdGVyRGVidXQiLCJmaWx0ZXJGaW4iLCJvbmVWYWxpZGVQZXJpb2RlIiwib3V2ZXJ0dXJlcyIsInBlcmlvZGUiLCJzcGxpdEVuZE9iaiIsImR1IiwicGVyaW9kZURhdGVEdSIsInNwbGl0U3RhcnRPYmoiLCJhdSIsInBlcmlvZGVEYXRlQXUiLCJwZXJpb2RlSXNWYWxpZGUiLCJ3ZWVrRGF5cyIsIm9uRGF5VmFsaWQiLCJjdXJyZW50RGF5TnVtYmVyIiwiam91cnMiLCJpc1ZhbGlkRm9yRGF0ZSIsImlzVmFsaWQiLCJvYmpTdGFydERhdGUiLCJzcGxpdE9iakVuZCIsIm9iakVuZERhdGUiLCJpc0lWYWxpZGVGb3JEYXRlcyIsInJlc2V0QWxsRmlsdGVyIiwicmVzZXRGaWx0ZXJzIiwib3B0S2V5Iiwib3B0VmFsdWUiLCJtaW5NYXhPYmoiLCJnZXRSYW5nZU1pbk1heCIsImZpZWxkVmFsdWUiLCJ1cmwiLCJnZXRGaWx0ZXJzVXJsIiwiaGlzdG9yeSIsInJlcGxhY2VTdGF0ZSIsImN1cnJlbnRVcmwiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwiYmFzZVVybCIsInJlZ2V4Iiwic2x1Z2lmeSIsInNsdWciLCJjZW50ZXIiLCJnZXRDZW50ZXIiLCJnZXRab29tIiwibmVlZFRvQWRkTW9kZUluVXJsIiwiZnJvbV9maWNoZSIsImNvb2tpZVZhbHVlIiwicmVnZXhCYXNlIiwiclJlZ2V4Iiwick1hdGNoIiwicGFydHMiLCJmaWx0ZXJTbHVnIiwiZmlsdGVyVmFsdWVzIiwiZmlsdHJlIiwiY2hlY2tib3hzIiwiY2hlY2tib3giLCJzdGFydF9lbmQiLCJwUmVnZXgiLCJwTWF0Y2giLCJtUmVnZXgiLCJtTWF0Y2giLCJkUmVnZXgiLCJkTWF0Y2giXSwic291cmNlUm9vdCI6IiJ9
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.