audio-mixer-ui 1.0.3 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- (function($,F){typeof exports=="object"&&typeof module<"u"?F(exports,require("vue"),require("pinia")):typeof define=="function"&&define.amd?define(["exports","vue","pinia"],F):($=typeof globalThis<"u"?globalThis:$||self,F($.AudioMixerUI={},$.Vue,$.Pinia))})(this,function($,F,jt){"use strict";var As=Object.defineProperty;var Qs=($,F,jt)=>F in $?As($,F,{enumerable:!0,configurable:!0,writable:!0,value:jt}):$[F]=jt;var R=($,F,jt)=>Qs($,typeof F!="symbol"?F+"":F,jt);var ft,tl;var $e=function(){if(typeof Map<"u")return Map;function a(t,l){var e=-1;return t.some(function(n,Q){return n[0]===l?(e=Q,!0):!1}),e}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(l){var e=a(this.__entries__,l),n=this.__entries__[e];return n&&n[1]},t.prototype.set=function(l,e){var n=a(this.__entries__,l);~n?this.__entries__[n][1]=e:this.__entries__.push([l,e])},t.prototype.delete=function(l){var e=this.__entries__,n=a(e,l);~n&&e.splice(n,1)},t.prototype.has=function(l){return!!~a(this.__entries__,l)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(l,e){e===void 0&&(e=null);for(var n=0,Q=this.__entries__;n<Q.length;n++){var A=Q[n];l.call(e,A[1],A[0])}},t}()}(),me=typeof window<"u"&&typeof document<"u"&&window.document===document,Hl=function(){return typeof global<"u"&&global.Math===Math?global:typeof self<"u"&&self.Math===Math?self:typeof window<"u"&&window.Math===Math?window:Function("return this")()}(),Bn=function(){return typeof requestAnimationFrame=="function"?requestAnimationFrame.bind(Hl):function(a){return setTimeout(function(){return a(Date.now())},1e3/60)}}(),cn=2;function hn(a,t){var l=!1,e=!1,n=0;function Q(){l&&(l=!1,a()),e&&s()}function A(){Bn(Q)}function s(){var d=Date.now();if(l){if(d-n<cn)return;e=!0}else l=!0,e=!1,setTimeout(A,t);n=d}return s}var mn=20,Rn=["top","right","bottom","left","width","height","size","weight"],Zn=typeof MutationObserver<"u",Vn=function(){function a(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=hn(this.refresh.bind(this),mn)}return a.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},a.prototype.removeObserver=function(t){var l=this.observers_,e=l.indexOf(t);~e&&l.splice(e,1),!l.length&&this.connected_&&this.disconnect_()},a.prototype.refresh=function(){var t=this.updateObservers_();t&&this.refresh()},a.prototype.updateObservers_=function(){var t=this.observers_.filter(function(l){return l.gatherActive(),l.hasActive()});return t.forEach(function(l){return l.broadcastActive()}),t.length>0},a.prototype.connect_=function(){!me||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Zn?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},a.prototype.disconnect_=function(){!me||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},a.prototype.onTransitionEnd_=function(t){var l=t.propertyName,e=l===void 0?"":l,n=Rn.some(function(Q){return!!~e.indexOf(Q)});n&&this.refresh()},a.getInstance=function(){return this.instance_||(this.instance_=new a),this.instance_},a.instance_=null,a}(),ta=function(a,t){for(var l=0,e=Object.keys(t);l<e.length;l++){var n=e[l];Object.defineProperty(a,n,{value:t[n],enumerable:!1,writable:!1,configurable:!0})}return a},El=function(a){var t=a&&a.ownerDocument&&a.ownerDocument.defaultView;return t||Hl},la=jl(0,0,0,0);function ql(a){return parseFloat(a)||0}function ea(a){for(var t=[],l=1;l<arguments.length;l++)t[l-1]=arguments[l];return t.reduce(function(e,n){var Q=a["border-"+n+"-width"];return e+ql(Q)},0)}function rn(a){for(var t=["top","right","bottom","left"],l={},e=0,n=t;e<n.length;e++){var Q=n[e],A=a["padding-"+Q];l[Q]=ql(A)}return l}function En(a){var t=a.getBBox();return jl(0,0,t.width,t.height)}function bn(a){var t=a.clientWidth,l=a.clientHeight;if(!t&&!l)return la;var e=El(a).getComputedStyle(a),n=rn(e),Q=n.left+n.right,A=n.top+n.bottom,s=ql(e.width),d=ql(e.height);if(e.boxSizing==="border-box"&&(Math.round(s+Q)!==t&&(s-=ea(e,"left","right")+Q),Math.round(d+A)!==l&&(d-=ea(e,"top","bottom")+A)),!In(a)){var i=Math.round(s+Q)-t,U=Math.round(d+A)-l;Math.abs(i)!==1&&(s-=i),Math.abs(U)!==1&&(d-=U)}return jl(n.left,n.top,s,d)}var un=function(){return typeof SVGGraphicsElement<"u"?function(a){return a instanceof El(a).SVGGraphicsElement}:function(a){return a instanceof El(a).SVGElement&&typeof a.getBBox=="function"}}();function In(a){return a===El(a).document.documentElement}function Wn(a){return me?un(a)?En(a):bn(a):la}function Sn(a){var t=a.x,l=a.y,e=a.width,n=a.height,Q=typeof DOMRectReadOnly<"u"?DOMRectReadOnly:Object,A=Object.create(Q.prototype);return ta(A,{x:t,y:l,width:e,height:n,top:l,right:t+e,bottom:n+l,left:t}),A}function jl(a,t,l,e){return{x:a,y:t,width:l,height:e}}var Cn=function(){function a(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=jl(0,0,0,0),this.target=t}return a.prototype.isActive=function(){var t=Wn(this.target);return this.contentRect_=t,t.width!==this.broadcastWidth||t.height!==this.broadcastHeight},a.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t},a}(),gn=function(){function a(t,l){var e=Sn(l);ta(this,{target:t,contentRect:e})}return a}(),Gn=function(){function a(t,l,e){if(this.activeObservations_=[],this.observations_=new $e,typeof t!="function")throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=t,this.controller_=l,this.callbackCtx_=e}return a.prototype.observe=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(t instanceof El(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var l=this.observations_;l.has(t)||(l.set(t,new Cn(t)),this.controller_.addObserver(this),this.controller_.refresh())}},a.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(t instanceof El(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var l=this.observations_;l.has(t)&&(l.delete(t),l.size||this.controller_.removeObserver(this))}},a.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},a.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach(function(l){l.isActive()&&t.activeObservations_.push(l)})},a.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,l=this.activeObservations_.map(function(e){return new gn(e.target,e.broadcastRect())});this.callback_.call(t,l,t),this.clearActive()}},a.prototype.clearActive=function(){this.activeObservations_.splice(0)},a.prototype.hasActive=function(){return this.activeObservations_.length>0},a}(),aa=typeof WeakMap<"u"?new WeakMap:new $e,na=function(){function a(t){if(!(this instanceof a))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var l=Vn.getInstance(),e=new Gn(t,l,this);aa.set(this,e)}return a}();["observe","unobserve","disconnect"].forEach(function(a){na.prototype[a]=function(){var t;return(t=aa.get(this))[a].apply(t,arguments)}});var Jn=function(){return typeof Hl.ResizeObserver<"u"?Hl.ResizeObserver:na}();function al(a){const t=F.ref(0),l=F.ref(0);let e=null;const n=()=>{e&&(e.disconnect(),e=null)},Q=()=>{n();const A=F.unref(a);if(!A)return;e=new Jn(d=>{const i=d[0];i&&(t.value=i.contentRect.width,l.value=i.contentRect.height)}),e.observe(A);const s=A.getBoundingClientRect();t.value=s.width,l.value=s.height};return F.watch(()=>F.unref(a),Q,{immediate:!0}),F.onScopeDispose(n),{width:F.readonly(t),height:F.readonly(l)}}const Lt=(a,t)=>{const l=a.__vccOpts||a;for(const[e,n]of t)l[e]=n;return l},pn=["aria-valuemin","aria-valuemax","aria-valuenow","aria-label","aria-orientation","tabindex"],yn={key:0,class:"level"},kl=Lt({__name:"AudioSlider",props:F.mergeModels({min:{type:Number,default:0},max:{type:Number,default:1},step:{type:Number,default:.01},keystep:{type:Number,default:null},colour:{type:String,default:"grey"},style:{type:String,default:"volume"},thumbLength:{type:Number,default:1},showLevel:{type:Boolean,default:!1},level:{type:Number,default:.5},tabindex:{type:String,default:"0"}},{value:{default:.75},valueModifiers:{}}),emits:["update:value"],setup(a){F.useCssVars(C=>({"2096b4c3":h.value,"757f26aa":m.value,"744b71b7":u.value,d898db12:o.value,"3a8d2f7c":Z.value}));const t=a,l=F.useTemplateRef("root"),{width:e,height:n}=al(l),Q=F.computed(()=>Math.min(e.value,n.value)),A=F.computed(()=>Math.max(e.value,n.value)),s=F.computed(()=>e.value>n.value),d=F.computed(()=>s.value?"h-slide":"v-slide"),i=F.useModel(a,"value");F.computed(()=>Math.pow(1-i.value,.5)*180+20),F.computed(()=>Math.pow(i.value,.5)*180+20);const U=F.computed(()=>Q.value*.8),B=F.computed(()=>Q.value*t.thumbLength*.8),m=F.computed(()=>(s.value?B:U).value+"px"),h=F.computed(()=>(s.value?U:B).value+"px"),o=F.computed(()=>Q.value*.1+"px"),Z=F.computed(()=>(A.value-B.value)*(i.value-t.min)/(t.max-t.min)+"px"),u=F.computed(()=>s.value?"90deg":"0deg"),V=F.ref(!1),p=F.ref(0),v=C=>{if(!l.value)return i.value;const J=l.value.getBoundingClientRect(),K=C.clientX,j=C.clientY;let M;if(s.value){const X=K-J.left-U.value/2,G=J.width-U.value;M=Math.max(0,Math.min(1,X/G))}else{const X=J.bottom-j-U.value/2,G=J.height-U.value;M=Math.max(0,Math.min(1,X/G))}const ct=t.min+M*(t.max-t.min);return t.step>0?Math.round(ct/t.step)*t.step:ct},E=C=>{C.preventDefault(),V.value=!0,p.value=i.value,l.value&&l.value.focus(),i.value=v(C),l.value&&l.value.setPointerCapture&&l.value.setPointerCapture(C.pointerId),document.addEventListener("pointermove",k),document.addEventListener("pointerup",H),document.addEventListener("pointercancel",H)},k=C=>{V.value&&(C.preventDefault(),i.value=v(C))},H=C=>{if(V.value){if(C.preventDefault(),V.value=!1,l.value&&l.value.releasePointerCapture)try{l.value.releasePointerCapture(C.pointerId)}catch{}document.removeEventListener("pointermove",k),document.removeEventListener("pointerup",H),document.removeEventListener("pointercancel",H)}},D=C=>{if(l.value&&l.value.getAttribute("tabindex")==="-1")return;const J=t.keystep!==null?t.keystep:t.step||.01;let K=i.value;switch(C.key){case"ArrowLeft":case"ArrowDown":C.preventDefault(),K=Math.max(t.min,i.value-J);break;case"ArrowRight":case"ArrowUp":C.preventDefault(),K=Math.min(t.max,i.value+J);break;default:return}i.value=K},y=C=>Math.min(1,Math.max(0,t.level*10-C+1));return(C,J)=>(F.openBlock(),F.createElementBlock("div",{class:F.normalizeClass(d.value),ref_key:"root",ref:l,role:"slider","aria-valuemin":a.min,"aria-valuemax":a.max,"aria-valuenow":i.value,"aria-label":`${a.style} control`,"aria-orientation":s.value?"horizontal":"vertical",tabindex:a.tabindex,onPointerdown:E,onKeydown:D,style:{userSelect:"none",touchAction:"none"}},[J[0]||(J[0]=F.createElementVNode("div",{class:"track"},null,-1)),a.showLevel?(F.openBlock(),F.createElementBlock("div",yn,[(F.openBlock(),F.createElementBlock(F.Fragment,null,F.renderList(10,K=>F.createElementVNode("div",{class:F.normalizeClass(["focus","led"+K])},[F.createElementVNode("div",{class:"on",style:F.normalizeStyle({opacity:y(K)})},null,4)],2)),64))])):F.createCommentVNode("",!0),F.createElementVNode("div",{class:F.normalizeClass(["thumb",{dragging:V.value,[a.colour]:!0,[a.style]:!0}])},null,2)],42,pn))}},[["__scopeId","data-v-42160c3a"]]),Re=Lt({__name:"TitleText",props:{align:{type:String,default:"left"},overflow:{type:String,default:"crop",validator:a=>["crop","scroll"].includes(a)}},setup(a){F.useCssVars(B=>({"9d94564a":d.value,"6241cf7e":i.value+"px"}));const t=a,l=F.useTemplateRef("el"),e=F.useTemplateRef("textEl"),{width:n,height:Q}=al(l),A=F.computed(()=>Math.min(n.value,Q.value)),s=F.computed(()=>n.value>Q.value?"h-text":"v-text"),d=F.computed(()=>A.value*3/4+"px"),i=F.ref(0),U=F.ref(!1);return F.watchEffect(()=>{if(!e.value||!l.value||t.overflow!=="scroll"){U.value=!1,i.value=0;return}const B=s.value==="h-text"?n.value:Q.value,m=s.value==="h-text"?e.value.scrollWidth:e.value.scrollHeight,h=B-20;m>h?(U.value=!0,i.value=m-h):(U.value=!1,i.value=0)}),(B,m)=>(F.openBlock(),F.createElementBlock("div",{ref_key:"el",ref:l,class:"outer"},[F.createElementVNode("div",{ref_key:"textEl",ref:e,class:F.normalizeClass({[s.value]:!0,[a.align]:!0,scrolling:U.value})},[F.renderSlot(B.$slots,"default",{},void 0,!0)],2)],512))}},[["__scopeId","data-v-8efcf3aa"]]),Nn={class:"s-label"},kn={class:"m-label"},Aa=Lt({__name:"TriState",props:{mute:{default:!1},muteModifiers:{},solo:{default:!1},soloModifiers:{}},emits:["update:mute","update:solo"],setup(a){const t=F.useModel(a,"mute"),l=F.useModel(a,"solo"),e=F.useTemplateRef("outer"),{width:n,height:Q}=al(e),A=F.computed(()=>n.value>Q.value*1.9);function s(){t.value=!t.value,l.value=!1}function d(){l.value=!l.value,t.value=!1}return(i,U)=>(F.openBlock(),F.createElementBlock("div",{class:"outer",ref_key:"outer",ref:e},[F.createElementVNode("div",{title:"Solo",class:F.normalizeClass(["solo",{on:l.value}]),onClick:d},null,2),F.createElementVNode("div",Nn,F.toDisplayString(A.value?"SOLO":"S"),1),F.createElementVNode("div",{title:"Mute",class:F.normalizeClass(["mute",{on:t.value}]),onClick:s},null,2),F.createElementVNode("div",kn,F.toDisplayString(A.value?"MUTE":"M"),1)],512))}},[["__scopeId","data-v-7e3c1495"]]),Pl={enabled:!1,features:{beatAnimation:!0,randomLevelIndicators:!0,debugMode:!1}},Xn=()=>Pl.enabled,Ze=a=>Pl.enabled&&Pl.features[a],nl=jt.defineStore("audioState",{state:()=>({isPlaying:!1,currentTime:0,playbackSpeed:1,currentBar:1,currentBeat:1,currentRepeat:0,masterVolume:.75,metronomeVolume:.7,partVolumes:{},partMuted:{},partSolo:{},isLeadInActive:!1,isStartingNotesActive:!1,leadInBars:1,metronomeEnabled:!1,leadInEnabled:!0,isLoaded:!1}),getters:{isPlayingOrLeadIn:a=>a.isPlaying||a.isLeadInActive,formattedTime:a=>{const t=Math.floor(a.currentTime/60),l=Math.floor(a.currentTime%60);return`${t}:${l.toString().padStart(2,"0")}`},getPartVolume:a=>t=>a.partVolumes[t]??.75,isPartMuted:a=>t=>a.partMuted[t]??!1,isPartSolo:a=>t=>a.partSolo[t]??!1,isAnySolo:a=>Object.values(a.partSolo).some(t=>t===!0),currentPosition:a=>{let t=`${a.currentBar}.${a.currentBeat}`;return a.currentRepeat>0&&(t+=` (R${a.currentRepeat})`),t}},actions:{setPlaybackState(a){this.isPlaying=a},setCurrentTime(a){this.currentTime=a},setPlaybackSpeed(a){this.playbackSpeed=a},setCurrentBar(a,t=1,l=0){typeof a=="number"&&(this.currentBar=a),typeof t=="number"&&(this.currentBeat=t),typeof l=="number"&&(this.currentRepeat=l)},setMasterVolume(a){this.masterVolume=Math.max(0,Math.min(1,a))},setMetronomeVolume(a){this.metronomeVolume=Math.max(0,Math.min(1,a))},setPartVolume(a,t){this.partVolumes[a]=Math.max(0,Math.min(1,t))},setPartMuted(a,t){this.partMuted[a]=t},setPartSolo(a,t){this.partSolo[a]=t},setLeadInActive(a,t=1){this.isLeadInActive=a,this.leadInBars=t},setStartingNotesActive(a){this.isStartingNotesActive=a},setMetronomeEnabled(a){this.metronomeEnabled=a},setLeadInEnabled(a){this.leadInEnabled=a},initializeParts(a){this.partVolumes={},this.partMuted={},this.partSolo={},a.forEach(t=>{this.partVolumes[t.name]=t.volume||.75,this.partMuted[t.name]=!1,this.partSolo[t.name]=!1})},setLoaded(a){this.isLoaded=a}}}),Al=jt.defineStore("musicData",{state:()=>({beats:[],practiceMarks:{},parts:[],title:"",totalDuration:0,maxBar:0,timeSignature:4,baseTempo:80}),getters:{practiceMarkLetters:a=>Object.keys(a.practiceMarks).sort(),getBarForMark:a=>t=>a.practiceMarks[t],allBars:a=>{const t=new Set;return a.beats.forEach(l=>{l.beat===1&&t.add(l.bar)}),Array.from(t).sort((l,e)=>l-e)},hasRepeats:a=>t=>a.beats.some(l=>l.bar===t&&l.repeat>0),getRepeatCountForBar:a=>t=>{const l=new Set;return a.beats.forEach(e=>{e.bar===t&&l.add(e.repeat)}),l.size}},actions:{loadMusicData(a){this.title=a.title||"Untitled",this.beats=a.beats||[],this.practiceMarks=a.practiceMarks||a.marks||{},this.parts=(a.parts||[]).map(t=>({...t,solo:t.solo||!1,mute:t.mute||!1})),this.calculateDuration(),this.calculateMaxBar(),this.extractTimeSignature()},calculateDuration(){this.beats.length>0&&(this.totalDuration=Math.max(...this.beats.map(a=>a.time)))},calculateMaxBar(){this.beats.length>0&&(this.maxBar=Math.max(...this.beats.map(a=>a.bar)))},extractTimeSignature(){this.beats.length>0&&this.beats[0].timeSig&&(this.timeSignature=this.beats[0].timeSig),this.beats.length>0&&this.beats[0].tempo&&(this.baseTempo=this.beats[0].tempo)},setPracticeMark(a,t){this.practiceMarks[a]=t},removePracticeMark(a){delete this.practiceMarks[a]},updateBeats(a){console.log("Updating beats in music data store"),this.beats=a,this.calculateDuration(),this.calculateMaxBar(),this.extractTimeSignature()},setTotalDuration(a){console.log("Setting total duration in music data store to:",a),this.totalDuration=a},isValidBar(a,t=0){return this.beats.some(l=>l.bar===a&&l.repeat===t)},setParts(a){this.parts=a.map(t=>({name:t.name,volume:t.volume||.75,solo:t.solo||!1,mute:t.mute||!1}))},clear(){this.beats=[],this.practiceMarks={},this.parts=[],this.title="",this.totalDuration=0,this.maxBar=0,this.timeSignature=4,this.baseTempo=80}}}),Ve=jt.defineStore("playbackState",{state:()=>({transportState:"stopped",autoPlay:!1,loopEnabled:!1,loopStart:1,loopEnd:null,leadInEnabled:!0,leadInBars:1,startingNotesEnabled:!0,startingNotesSequential:!0,metronomeEnabled:!1,metronomeVolume:.5,showTransportControls:!0,showPartControls:!0,showNavigationControls:!0,lastBarPosition:1,lastPracticeMarkUsed:null,lastPlayStartBar:null,lastPlayStartRepeat:null,lastPlayStartTime:null,lastNavigationAction:null,fixedNavigationPoints:[],navigationPoints:[]}),getters:{isPlaying:a=>a.transportState==="playing",isPaused:a=>a.transportState==="paused",isStopped:a=>a.transportState==="stopped",isLoopConfigured:a=>a.loopEnabled&&a.loopStart&&a.loopEnd&&a.loopEnd>a.loopStart,loopRange:a=>!a.loopEnabled||!a.loopStart||!a.loopEnd?null:`${a.loopStart}-${a.loopEnd}`,getNavigationPoints:a=>a.navigationPoints},actions:{setTransportState(a){["stopped","playing","paused"].includes(a)&&(this.transportState=a)},play(){this.setTransportState("playing")},pause(){this.setTransportState("paused")},stop(){this.setTransportState("stopped")},setAutoPlay(a){this.autoPlay=a},setLoop(a,t=null,l=null){this.loopEnabled=a,t!==null&&(this.loopStart=t),l!==null&&(this.loopEnd=l)},setLoopStart(a){this.loopStart=a,this.loopEnd&&this.loopEnd<=a&&(this.loopEnd=a+4)},setLoopEnd(a){this.loopEnd=a,this.loopStart&&this.loopStart>=a&&(this.loopStart=Math.max(1,a-4))},setLeadInEnabled(a){this.leadInEnabled=a},setLeadInBars(a){this.leadInBars=Math.max(1,Math.min(4,a))},setStartingNotesEnabled(a){this.startingNotesEnabled=a},setStartingNotesSequential(a){this.startingNotesSequential=a},setMetronomeEnabled(a){this.metronomeEnabled=a},setMetronomeVolume(a){this.metronomeVolume=Math.max(0,Math.min(1,a))},setTransportControlsVisible(a){this.showTransportControls=a},setPartControlsVisible(a){this.showPartControls=a},setNavigationControlsVisible(a){this.showNavigationControls=a},updateLastBarPosition(a){this.lastBarPosition=a},updateLastPracticeMarkUsed(a){this.lastPracticeMarkUsed=a},buildFixedNavigationPoints(){const a=[],t=Al();a.push({time:0,bar:1,repeat:1,label:"Start"});const l=t.beats.filter(e=>e.beat===1);for(const[e,n]of Object.entries(t.practiceMarks))l.filter(Q=>Q.bar===n).forEach(Q=>{a.push({time:Q.time,bar:Q.bar,repeat:Q.repeat,label:`Mark ${e}`})});if(t.beats.length>0){const e=Math.max(...t.beats.map(n=>n.time));a.push({time:e,label:"End"})}this.fixedNavigationPoints=a.sort((e,n)=>e.time-n.time),this.navigationPoints=[...this.fixedNavigationPoints]},rebuildNavigationPoints(){setTimeout(()=>{const a=Al(),t=[...this.fixedNavigationPoints];this.lastPlayStartBar!==null&&a.beats.filter(n=>n.beat===1&&n.bar===this.lastPlayStartBar).forEach(n=>{t.push({time:n.time,bar:n.bar,repeat:n.repeat,label:"Last Play Start"})});const l=t.sort((e,n)=>e.time-n.time);this.navigationPoints=l.filter((e,n,Q)=>n===0||e.time!==Q[n-1].time)},50)},setLastPlayStart(a,t,l){this.lastPlayStartBar=a,this.lastPlayStartRepeat=t,this.lastPlayStartTime=l,this.rebuildNavigationPoints()},setNavigationAction(a){this.lastNavigationAction=a},resetToDefaults(){this.transportState="stopped",this.autoPlay=!1,this.loopEnabled=!1,this.loopStart=1,this.loopEnd=null,this.leadInEnabled=!0,this.leadInBars=1,this.startingNotesEnabled=!0,this.startingNotesSequential=!0,this.metronomeEnabled=!1,this.metronomeVolume=.5}}});function Qa(a){return{all:a=a||new Map,on:function(t,l){var e=a.get(t);e?e.push(l):a.set(t,[l])},off:function(t,l){var e=a.get(t);e&&(l?e.splice(e.indexOf(l)>>>0,1):a.set(t,[]))},emit:function(t,l){var e=a.get(t);e&&e.slice().map(function(n){n(l)}),(e=a.get("*"))&&e.slice().map(function(n){n(t,l)})}}}function re(a){return{all:a=a||new Map,on:function(t,l){var e=a.get(t);e?e.push(l):a.set(t,[l])},off:function(t,l){var e=a.get(t);e&&(l?e.splice(e.indexOf(l)>>>0,1):a.set(t,[]))},emit:function(t,l){var e=a.get(t);e&&e.slice().map(function(n){n(l)}),(e=a.get("*"))&&e.slice().map(function(n){n(t,l)})}}}const Yn="data:audio/mpeg;base64,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",Tn="data:audio/mpeg;base64,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qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tkxPIADij5M+wwzYmAm6X9hJmwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//s0xPaAClDTI6OxLwCwkeLoEJkoqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sUxNoDwAAB/gAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";class Ol{constructor(t,l={}){if(new.target===Ol)throw new Error("AudioEngine is abstract and cannot be instantiated directly");this.audioContext=t,this.options=l,this.isInitialized=!1,this.channels=new WeakMap,this.activeChannels=new Set,this.eventBus=re()}on(t,l){this.eventBus.on(t,l)}off(t,l){this.eventBus.off(t,l)}_emitProgress(t,l,e=null){const n={stage:t,message:l};e!==null&&(n.progress=Math.max(0,Math.min(1,e))),this.eventBus.emit("initProgress",n)}async initialize(t){throw new Error("initialize() must be implemented by subclass")}createChannel(t,l={}){throw new Error("createChannel() must be implemented by subclass")}allSoundsOff(){throw new Error("allSoundsOff() must be implemented by subclass")}clearAllChannels(){throw new Error("clearAllChannels() must be implemented by subclass")}async playMetronomeTick(t,l,e){try{await this._ensureMetronomeBuffersLoaded();const n=l?this.accentTickBuffer:this.regularTickBuffer;if(!n){console.warn("Metronome buffer not available");return}const Q=this.audioContext.createBufferSource();Q.buffer=n;const A=this.audioContext.createGain();A.gain.value=e,Q.connect(A);const s=this.getMetronomeOutput();s?A.connect(s):A.connect(this.audioContext.destination);const d=Math.max(t,this.audioContext.currentTime);Q.start(d)}catch(n){console.warn("Buffer metronome playback failed:",n)}}getMetronomeOutput(){return this._metronomeOutput||(this._metronomeOutput=this.audioContext.createGain(),this._metronomeOutput.gain.value=1,this._metronomeOutput.connect(this.audioContext.destination)),this._metronomeOutput}getMetronomeAnalyser(){return null}async _ensureMetronomeBuffersLoaded(){if(!(this.regularTickBuffer&&this.accentTickBuffer)){try{if(typeof fetch<"u"){const[t,l]=await Promise.all([fetch(Yn),fetch(Tn)]),[e,n]=await Promise.all([t.arrayBuffer(),l.arrayBuffer()]),[Q,A]=await Promise.all([this.audioContext.decodeAudioData(e),this.audioContext.decodeAudioData(n)]);this.regularTickBuffer=Q,this.accentTickBuffer=A;return}}catch(t){console.warn("Failed to load metronome sounds:",t)}this.regularTickBuffer=this.audioContext.createBuffer(2,1024,this.audioContext.sampleRate),this.accentTickBuffer=this.audioContext.createBuffer(2,1024,this.audioContext.sampleRate)}}getActiveChannels(){return Array.from(this.activeChannels)}destroy(){this.allSoundsOff(),this._metronomeOutput&&(this._metronomeOutput.disconnect(),this._metronomeOutput=null),this.regularTickBuffer=null,this.accentTickBuffer=null,this.activeChannels.clear(),this.isInitialized=!1}_validateInitialized(){if(!this.isInitialized)throw new Error("AudioEngine not initialized. Call initialize() first.")}_registerChannel(t){this.activeChannels.add(t)}_unregisterChannel(t){this.activeChannels.delete(t),this.channels.delete(t)}}class _l{constructor(t,l,e={}){if(new.target===_l)throw new Error("ChannelHandle is abstract and cannot be instantiated directly");this.engine=t,this.partId=l,this.options={initialVolume:1,...e},this.isDestroyed=!1,this.noteRefCounts=new Map,this.scheduledEvents=new Map,this.activeNotes=new Set}getOutputNode(){throw new Error("getOutputNode() must be implemented by subclass")}noteOn(t,l){this._validateActive();const e=this.noteRefCounts.get(t)||0;this.noteRefCounts.set(t,e+1),this._actualNoteOn(t,l),e===0&&this.activeNotes.add(t)}noteOff(t){this._validateActive();const l=this.noteRefCounts.get(t)||0;if(l<=0)return;const e=l-1;this.noteRefCounts.set(t,e),e===0&&(this._actualNoteOff(t),this.activeNotes.delete(t),this.noteRefCounts.delete(t))}playNote(t,l,e,n){this._validateActive();const Q=this.engine.audioContext.currentTime,A=`${this.partId}_${t}_${l}_${Date.now()}`;let s=t,d=n;if(t<Q){const h=Q-t;s=Q,d=Math.max(0,n-h)}if(d<=0)return A;const i=Math.max(0,(s-Q)*1e3),U=setTimeout(()=>{this.noteOn(l,e),this.scheduledEvents.delete(`${A}_on`)},i),B=i+d*1e3,m=setTimeout(()=>{this.noteOff(l),this.scheduledEvents.delete(`${A}_off`)},B);return this.scheduledEvents.set(`${A}_on`,U),this.scheduledEvents.set(`${A}_off`,m),A}playPreviewNote(t,l={}){this._validateActive();const e=l.startTime??this.engine.audioContext.currentTime+.01,n=l.duration??.5,Q=l.velocity??100;let A=null;l.instrument!==void 0&&(A=this.getInstrument(),this.setInstrument(l.instrument)),this.playNote(e,t,Q,n),A!==null&&setTimeout(()=>{this.isDestroyed||this.setInstrument(A)},(n+.1)*1e3)}allNotesOff(){this._validateActive(),this.scheduledEvents.forEach(t=>{clearTimeout(t)}),this.scheduledEvents.clear(),this.activeNotes.forEach(t=>{this._actualNoteOff(t)}),this.noteRefCounts.clear(),this.activeNotes.clear()}_actualNoteOn(t,l){throw new Error("_actualNoteOn() must be implemented by subclass")}_actualNoteOff(t){throw new Error("_actualNoteOff() must be implemented by subclass")}async setInstrument(t){throw new Error("setInstrument() must be implemented by subclass")}getInstrument(){throw new Error("getInstrument() must be implemented by subclass")}setVolume(t){throw new Error("setVolume() must be implemented by subclass")}getVolume(){throw new Error("getVolume() must be implemented by subclass")}getPartId(){return this.partId}isActive(){return!this.isDestroyed&&this.engine.isInitialized&&this.engine.activeChannels.has(this)}destroy(){if(!this.isDestroyed){this.allNotesOff();const t=this.getOutputNode();t&&t.disconnect(),this.noteRefCounts.clear(),this.scheduledEvents.clear(),this.activeNotes.clear(),this.engine._unregisterChannel(this),this.isDestroyed=!0}}_validateActive(){if(this.isDestroyed)throw new Error("Channel has been destroyed");if(!this.engine.isInitialized)throw new Error("AudioEngine is not initialized")}}const sa={piano:0,bright_piano:1,electric_grand:2,honky_tonk:3,electric_piano_1:4,electric_piano_2:5,harpsichord:6,clavinet:7,celesta:8,glockenspiel:9,music_box:10,vibraphone:11,marimba:12,xylophone:13,tubular_bells:14,dulcimer:15,drawbar_organ:16,percussive_organ:17,rock_organ:18,church_organ:19,reed_organ:20,accordion:21,harmonica:22,tango_accordion:23,organ:19,nylon_guitar:24,steel_guitar:25,electric_guitar_jazz:26,electric_guitar_clean:27,electric_guitar_muted:28,overdriven_guitar:29,distortion_guitar:30,guitar_harmonics:31,guitar:24,acoustic_bass:32,electric_bass_finger:33,electric_bass_pick:34,fretless_bass:35,slap_bass_1:36,slap_bass_2:37,synth_bass_1:38,synth_bass_2:39,bass:32,violin:40,viola:41,cello:42,contrabass:43,tremolo_strings:44,pizzicato_strings:45,orchestral_harp:46,timpani:47,strings:48,strings_ensemble:48,slow_strings:49,synth_strings_1:50,synth_strings_2:51,choir_aahs:52,voice_oohs:53,synth_voice:54,orchestra_hit:55,trumpet:56,trombone:57,tuba:58,muted_trumpet:59,french_horn:60,brass_section:61,synth_brass_1:62,synth_brass_2:63,soprano_sax:64,alto_sax:65,tenor_sax:66,baritone_sax:67,oboe:68,english_horn:69,bassoon:70,clarinet:71,saxophone:64,piccolo:72,flute:73,recorder:74,pan_flute:75,blown_bottle:76,shakuhachi:77,whistle:78,ocarina:79,lead_1_square:80,lead_2_sawtooth:81,lead_3_calliope:82,lead_4_chiff:83,lead_5_charang:84,lead_6_voice:85,lead_7_fifths:86,lead_8_bass:87,pad_1_new_age:88,pad_2_warm:89,pad_3_polysynth:90,pad_4_choir:91,pad_5_bowed:92,pad_6_metallic:93,pad_7_halo:94,pad_8_sweep:95,fx_1_rain:96,fx_2_soundtrack:97,fx_3_crystal:98,fx_4_atmosphere:99,fx_5_brightness:100,fx_6_goblins:101,fx_7_echoes:102,fx_8_sci_fi:103,sitar:104,banjo:105,shamisen:106,koto:107,kalimba:108,bag_pipe:109,fiddle:110,shanai:111,tinkle_bell:112,agogo:113,steel_drums:114,woodblock:115,taiko_drum:116,melodic_tom:117,synth_drum:118,reverse_cymbal:119,guitar_fret_noise:120,breath_noise:121,seashore:122,bird_tweet:123,telephone_ring:124,helicopter:125,applause:126,gunshot:127},Ln=Object.entries(sa).reduce((a,[t,l])=>(a[l]=t,a),{});class da{static getInstrumentProgram(t){if(typeof t=="number")return t;const l=sa[t.toLowerCase()];return l!==void 0?l:0}static getProgramName(t){return Ln[t]||`Program ${t}`}static generateNoteId(t,l,e){return`${t}_${l}_${Math.round(e)}`}}class Mn extends _l{constructor(t,l,e,n={}){super(t,l,n),this.midiChannel=e,this.currentVolume=n.initialVolume||1,this.currentInstrument=n.instrument||"piano",this.outputGain=null,this._setupOutputNode(),this.setVolume(this.currentVolume),n.instrument&&this.setInstrument(n.instrument)}getOutputNode(){return this.outputGain}_actualNoteOn(t,l){const e=this.engine._getSynthesizer();if(e&&e.noteOn){const n=Math.round(l*this.currentVolume);e.noteOn(this.midiChannel,t,n)}}_actualNoteOff(t){const l=this.engine._getSynthesizer();l&&l.noteOff&&l.noteOff(this.midiChannel,t)}async setInstrument(t){this._validateActive();const l=da.getInstrumentProgram(t);this.currentInstrument=t;const e=this.engine._getSynthesizer();e&&e.programChange?e.programChange(this.midiChannel,l):console.warn("Cannot set instrument: synthesizer not available or no programChange method")}getInstrument(){return this.currentInstrument}setVolume(t){this._validateActive(),t=Math.max(0,Math.min(1,t)),this.currentVolume=t;const l=Math.round(t*127),e=this.engine._getSynthesizer();e&&e.controllerChange&&e.controllerChange(this.midiChannel,7,l)}getVolume(){return this.currentVolume}getMidiChannel(){return this.midiChannel}getActiveNoteCount(){return this.activeNotes.size}playNote(t,l,e,n){this._validateActive();const Q=`${this.partId}_${t}_${l}_${Date.now()}`,A=this.engine._getSynthesizer();if(A&&A.post){const s=Math.round(e*this.currentVolume);A.post({channelNumber:this.midiChannel,type:"midiMessage",data:{messageData:[144|this.midiChannel,l,s],channelOffset:0,force:!1,options:{time:t}}}),A.post({channelNumber:this.midiChannel,type:"midiMessage",data:{messageData:[128|this.midiChannel,l,0],channelOffset:0,force:!1,options:{time:t+n}}})}else return super.playNote(t,l,e,n);return Q}allNotesOff(){this._validateActive();const t=this.engine._getSynthesizer();t&&t.post?t.post({channelNumber:this.midiChannel,type:"midiMessage",data:{messageData:[176|this.midiChannel,123,0],channelOffset:0,force:!1,options:{time:this.engine.audioContext.currentTime}}}):super.allNotesOff()}destroy(){if(!this.isDestroyed){const t=this.engine._getIndividualOutput(this.midiChannel);this.outputGain&&this.outputGain!==t&&this.outputGain.disconnect(),this.outputGain=null}super.destroy()}_setupOutputNode(){const t=this.engine._getIndividualOutput(this.midiChannel);t?this.outputGain=t:(console.warn(`No individual output available for MIDI channel ${this.midiChannel}, using fallback`),this.outputGain=this.engine.audioContext.createGain(),this.outputGain.gain.value=this.currentVolume)}}const xn="data:text/javascript;base64,dmFyIEZlPShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KEEsdCk9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTpBKVt0XX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO3ZhciBKYT0oZT0+dHlwZW9mIEZlPCJ1Ij9GZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KEEsdCk9Pih0eXBlb2YgRmU8InUiP0ZlOkEpW3RdfSk6ZSkoZnVuY3Rpb24oZSl7aWYodHlwZW9mIEZlPCJ1IilyZXR1cm4gRmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KSxZPWNsYXNzIGV4dGVuZHMgVWludDhBcnJheXtjdXJyZW50SW5kZXg9MDtzbGljZShlLEEpe2xldCB0PXN1cGVyLnNsaWNlKGUsQSk7cmV0dXJuIHQuY3VycmVudEluZGV4PTAsdH19O2Z1bmN0aW9uIGVlKGUsQT1lLmxlbmd0aCx0PTApe2xldCBuPSIiO2ZvcihsZXQgcz0wO3M8QTtzKyspe2xldCBhPWVbdCtzXTtpZihhPT09MClyZXR1cm4gbjtuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpfXJldHVybiBufWZ1bmN0aW9uIGhBKGUsQSl7bGV0IHQ9ZS5jdXJyZW50SW5kZXg7cmV0dXJuIGUuY3VycmVudEluZGV4Kz1BLGVlKGUsQSx0KX1mdW5jdGlvbiBuZShlLEE9ITEsdD0hMSl7bGV0IG49ZS5sZW5ndGg7QSYmbisrLHQmJm4lMiE9PTAmJm4rKztsZXQgcz1uZXcgWShuKTtyZXR1cm4ga0EocyxlKSxzfWZ1bmN0aW9uIGtBKGUsQSx0PTApe3Q+MCYmQS5sZW5ndGg+dCYmKEE9QS5zbGljZSgwLHQpKTtmb3IobGV0IG49MDtuPEEubGVuZ3RoO24rKyllW2UuY3VycmVudEluZGV4KytdPUEuY2hhckNvZGVBdChuKTtpZih0PkEubGVuZ3RoKWZvcihsZXQgbj0wO248dC1BLmxlbmd0aDtuKyspZVtlLmN1cnJlbnRJbmRleCsrXT0wO3JldHVybiBlfWZ1bmN0aW9uIE4oZSxBKXtsZXQgdD14cyhlLEEsZS5jdXJyZW50SW5kZXgpO3JldHVybiBlLmN1cnJlbnRJbmRleCs9QSx0fWZ1bmN0aW9uIHhzKGUsQSx0PTApe2xldCBuPTA7Zm9yKGxldCBzPTA7czxBO3MrKylufD1lW3Qrc108PHMqODtyZXR1cm4gbj4+PjB9ZnVuY3Rpb24gaHQoZSxBLHQpe2ZvcihsZXQgbj0wO248dDtuKyspZVtlLmN1cnJlbnRJbmRleCsrXT1BPj5uKjgmMjU1fWZ1bmN0aW9uIEooZSxBKXtlW2UuY3VycmVudEluZGV4KytdPUEmMjU1LGVbZS5jdXJyZW50SW5kZXgrK109QT4+OH1mdW5jdGlvbiBnQShlLEEpe2h0KGUsQSw0KX1mdW5jdGlvbiBqbihlLEEpe2xldCB0PUE8PDh8ZTtyZXR1cm4gdD4zMjc2Nz90LTY1NTM2OnR9ZnVuY3Rpb24gcWEoZSl7cmV0dXJuIGU+MTI3P2UtMjU2OmV9dmFyIEhzPWNsYXNze2hlYWRlcjtzaXplO2RhdGE7Y29uc3RydWN0b3IoZSxBLHQpe3RoaXMuaGVhZGVyPWUsdGhpcy5zaXplPUEsdGhpcy5kYXRhPXR9fTtmdW5jdGlvbiByQShlLEE9ITAsdD0hMSl7bGV0IG49aEEoZSw0KSxzPU4oZSw0KTtuPT09IiImJihzPTApO2xldCBhO3JldHVybiBBP2E9ZS5zbGljZShlLmN1cnJlbnRJbmRleCxlLmN1cnJlbnRJbmRleCtzKTphPW5ldyBZKDApLChBfHx0KSYmKGUuY3VycmVudEluZGV4Kz1zLHMlMiE9PTAmJmUuY3VycmVudEluZGV4KyspLG5ldyBIcyhuLHMsYSl9ZnVuY3Rpb24gY0EoZSxBLHQ9ITEsbj0hMSl7aWYoZS5sZW5ndGghPT00KXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBoZWFkZXIgbGVuZ3RoOiAke2V9YCk7bGV0IHM9OCxhPWUscj1BLmxlbmd0aDt0JiZyKys7bGV0IEk9cjtuJiYocys9NCxJKz00LGE9IkxJU1QiKTtsZXQgbz1zK3I7byUyIT09MCYmbysrO2xldCBnPW5ldyBZKG8pO3JldHVybiBrQShnLGEpLGdBKGcsSSksbiYma0EoZyxlKSxnLnNldChBLHMpLGd9ZnVuY3Rpb24gdkEoZSxBLHQ9ITEpe2xldCBuPTgscz1lLGE9QS5yZWR1Y2UoKGcsQik9PkIubGVuZ3RoK2csMCkscj1hO3QmJihuKz00LHIrPTQscz0iTElTVCIpO2xldCBJPW4rYTtJJTIhPT0wJiZJKys7bGV0IG89bmV3IFkoSSk7cmV0dXJuIGtBKG8scyksZ0EobyxyKSx0JiZrQShvLGUpLEEuZm9yRWFjaChnPT57by5zZXQoZyxuKSxuKz1nLmxlbmd0aH0pLG99ZnVuY3Rpb24gZmUoZSxBKXtyZXR1cm4gZS5maW5kKHQ9PnQuaGVhZGVyIT09IkxJU1QiPyExOih0LmRhdGEuY3VycmVudEluZGV4PTQsZWUodC5kYXRhLDQpPT09QSkpfWZ1bmN0aW9uICRuKGUsQSl7cmV0dXJuey4uLkEsLi4uZT8/e319fWZ1bmN0aW9uIFF0KGUsQSx0PTApe2xldCBuPTA7Zm9yKGxldCBzPTA7czxBO3MrKyluPW48PDh8ZVt0K3NdO3JldHVybiBuPj4+MH1mdW5jdGlvbiBYZShlLEEpe2xldCB0PVF0KGUsQSxlLmN1cnJlbnRJbmRleCk7cmV0dXJuIGUuY3VycmVudEluZGV4Kz1BLHR9ZnVuY3Rpb24gR3QoZSxBKXtsZXQgdD1uZXcgQXJyYXkoQSkuZmlsbCgwKTtmb3IobGV0IG49QS0xO24+PTA7bi0tKXRbbl09ZSYyNTUsZT4+PTg7cmV0dXJuIHR9ZnVuY3Rpb24gdUEoZSl7bGV0IEE9MDtmb3IoO2U7KXtsZXQgdD1lW2UuY3VycmVudEluZGV4KytdO2lmKEE9QTw8N3x0JjEyNyx0Pj43IT09MSlicmVha31yZXR1cm4gQX1mdW5jdGlvbiBDbihlKXtsZXQgQT1bZSYxMjddO2ZvcihlPj49NztlPjA7KUEudW5zaGlmdChlJjEyN3wxMjgpLGU+Pj03O3JldHVybiBBfWZ1bmN0aW9uIGZzKGUpe2U9TWF0aC5mbG9vcihlKTtsZXQgQT1NYXRoLmZsb29yKGUvNjApLHQ9TWF0aC5yb3VuZChlLUEqNjApO3JldHVybnttaW51dGVzOkEsc2Vjb25kczp0LHRpbWU6YCR7QS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHt0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWB9fWZ1bmN0aW9uIE1BKGUpe2xldCBBPSIiO2ZvcihsZXQgdCBvZiBlKXtsZXQgbj10LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikudG9VcHBlckNhc2UoKTtBKz1uLEErPSIgIn1yZXR1cm4gQX12YXIgYz17d2FybjoiY29sb3I6IG9yYW5nZTsiLHVucmVjb2duaXplZDoiY29sb3I6IHJlZDsiLGluZm86ImNvbG9yOiBhcXVhOyIscmVjb2duaXplZDoiY29sb3I6IGxpbWUiLHZhbHVlOiJjb2xvcjogeWVsbG93OyBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsifSxZczsoKCk9Pnt2YXIgZT1VaW50OEFycmF5LEE9VWludDE2QXJyYXksdD1JbnQzMkFycmF5LG49bmV3IGUoWzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMCwwLDAsMF0pLHM9bmV3IGUoWzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTMsMCwwXSksYT1uZXcgZShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLHI9ZnVuY3Rpb24oRyxiKXtmb3IodmFyIEs9bmV3IEEoMzEpLGVBPTA7ZUE8MzE7KytlQSlLW2VBXT1iKz0xPDxHW2VBLTFdO2Zvcih2YXIgYUE9bmV3IHQoS1szMF0pLGVBPTE7ZUE8MzA7KytlQSlmb3IodmFyIEdBPUtbZUFdO0dBPEtbZUErMV07KytHQSlhQVtHQV09R0EtS1tlQV08PDV8ZUE7cmV0dXJue2I6SyxyOmFBfX0sST1yKG4sMiksbz1JLmIsZz1JLnI7b1syOF09MjU4LGdbMjU4XT0yODt2YXIgQj1yKHMsMCksZD1CLmIsaD1CLnIsQz1uZXcgQSgzMjc2OCk7Zm9yKGs9MDtrPDMyNzY4OysraylRPShrJjQzNjkwKT4+MXwoayYyMTg0NSk8PDEsUT0oUSY1MjQyOCk+PjJ8KFEmMTMxMDcpPDwyLFE9KFEmNjE2ODApPj40fChRJjM4NTUpPDw0LENba109KChRJjY1MjgwKT4+OHwoUSYyNTUpPDw4KT4+MTt2YXIgUSxrLG09ZnVuY3Rpb24oRyxiLEspe2Zvcih2YXIgZUE9Ry5sZW5ndGgsYUE9MCxHQT1uZXcgQShiKTthQTxlQTsrK2FBKUdbYUFdJiYrK0dBW0dbYUFdLTFdO3ZhciBzZT1uZXcgQShiKTtmb3IoYUE9MTthQTxiOysrYUEpc2VbYUFdPXNlW2FBLTFdK0dBW2FBLTFdPDwxO3ZhciB6QTtpZihLKXt6QT1uZXcgQSgxPDxiKTt2YXIgV0E9MTUtYjtmb3IoYUE9MDthQTxlQTsrK2FBKWlmKEdbYUFdKWZvcih2YXIgTmU9YUE8PDR8R1thQV0sYWU9Yi1HW2FBXSxBQT1zZVtHW2FBXS0xXSsrPDxhZSxCQT1BQXwoMTw8YWUpLTE7QUE8PUJBOysrQUEpekFbQ1tBQV0+PldBXT1OZX1lbHNlIGZvcih6QT1uZXcgQShlQSksYUE9MDthQTxlQTsrK2FBKUdbYUFdJiYoekFbYUFdPUNbc2VbR1thQV0tMV0rK10+PjE1LUdbYUFdKTtyZXR1cm4gekF9LHk9bmV3IGUoMjg4KTtmb3Ioaz0wO2s8MTQ0Oysrayl5W2tdPTg7dmFyIGs7Zm9yKGs9MTQ0O2s8MjU2Oysrayl5W2tdPTk7dmFyIGs7Zm9yKGs9MjU2O2s8MjgwOysrayl5W2tdPTc7dmFyIGs7Zm9yKGs9MjgwO2s8Mjg4Oysrayl5W2tdPTg7dmFyIGssRj1uZXcgZSgzMik7Zm9yKGs9MDtrPDMyOysraylGW2tdPTU7dmFyIGssRD1tKHksOSwxKSx2PW0oRiw1LDEpLEw9ZnVuY3Rpb24oRyl7Zm9yKHZhciBiPUdbMF0sSz0xO0s8Ry5sZW5ndGg7KytLKUdbS10+YiYmKGI9R1tLXSk7cmV0dXJuIGJ9LEU9ZnVuY3Rpb24oRyxiLEspe3ZhciBlQT1iLzh8MDtyZXR1cm4oR1tlQV18R1tlQSsxXTw8OCk+PihiJjcpJkt9LFg9ZnVuY3Rpb24oRyxiKXt2YXIgSz1iLzh8MDtyZXR1cm4oR1tLXXxHW0srMV08PDh8R1tLKzJdPDwxNik+PihiJjcpfSxPPWZ1bmN0aW9uKEcpe3JldHVybihHKzcpLzh8MH0sbkE9ZnVuY3Rpb24oRyxiLEspe3JldHVybihiPT1udWxsfHxiPDApJiYoYj0wKSwoSz09bnVsbHx8Sz5HLmxlbmd0aCkmJihLPUcubGVuZ3RoKSxuZXcgZShHLnN1YmFycmF5KGIsSykpfSwkPVsidW5leHBlY3RlZCBFT0YiLCJpbnZhbGlkIGJsb2NrIHR5cGUiLCJpbnZhbGlkIGxlbmd0aC9saXRlcmFsIiwiaW52YWxpZCBkaXN0YW5jZSIsInN0cmVhbSBmaW5pc2hlZCIsIm5vIHN0cmVhbSBoYW5kbGVyIiwsIm5vIGNhbGxiYWNrIiwiaW52YWxpZCBVVEYtOCBkYXRhIiwiZXh0cmEgZmllbGQgdG9vIGxvbmciLCJkYXRlIG5vdCBpbiByYW5nZSAxOTgwLTIwOTkiLCJmaWxlbmFtZSB0b28gbG9uZyIsInN0cmVhbSBmaW5pc2hpbmciLCJpbnZhbGlkIHppcCBkYXRhIl0sVj1mdW5jdGlvbihHLGIsSyl7dmFyIGVBPW5ldyBFcnJvcihifHwkW0ddKTtpZihlQS5jb2RlPUcsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVBLFYpLCFLKXRocm93IGVBO3JldHVybiBlQX0scT1mdW5jdGlvbihHLGIsSyxlQSl7dmFyIGFBPUcubGVuZ3RoLEdBPWVBP2VBLmxlbmd0aDowO2lmKCFhQXx8Yi5mJiYhYi5sKXJldHVybiBLfHxuZXcgZSgwKTt2YXIgc2U9IUssekE9c2V8fGIuaSE9MixXQT1iLmk7c2UmJihLPW5ldyBlKGFBKjMpKTt2YXIgTmU9ZnVuY3Rpb24oeXQpe3ZhciBkZT1LLmxlbmd0aDtpZih5dD5kZSl7dmFyIHN0PW5ldyBlKE1hdGgubWF4KGRlKjIseXQpKTtzdC5zZXQoSyksSz1zdH19LGFlPWIuZnx8MCxBQT1iLnB8fDAsQkE9Yi5ifHwwLF9BPWIubCxVQT1iLmQsQ2U9Yi5tLGhlPWIubiwkZT1hQSo4O2Rve2lmKCFfQSl7YWU9RShHLEFBLDEpO3ZhciBVZT1FKEcsQUErMSwzKTtpZihBQSs9MyxVZSlpZihVZT09MSlfQT1ELFVBPXYsQ2U9OSxoZT01O2Vsc2UgaWYoVWU9PTIpe3ZhciBBdD1FKEcsQUEsMzEpKzI1NyxBbj1FKEcsQUErMTAsMTUpKzQsZW49QXQrRShHLEFBKzUsMzEpKzE7QUErPTE0O2Zvcih2YXIgVGU9bmV3IGUoZW4pLGxlPW5ldyBlKDE5KSxUQT0wO1RBPEFuOysrVEEpbGVbYVtUQV1dPUUoRyxBQStUQSozLDcpO0FBKz1BbiozO2Zvcih2YXIgdG49TChsZSksZnQ9KDE8PHRuKS0xLHhlPW0obGUsdG4sMSksVEE9MDtUQTxlbjspe3ZhciBldD14ZVtFKEcsQUEsZnQpXTtBQSs9ZXQmMTU7dmFyIFJBPWV0Pj40O2lmKFJBPDE2KVRlW1RBKytdPVJBO2Vsc2V7dmFyIG9lPTAsdHQ9MDtmb3IoUkE9PTE2Pyh0dD0zK0UoRyxBQSwzKSxBQSs9MixvZT1UZVtUQS0xXSk6UkE9PTE3Pyh0dD0zK0UoRyxBQSw3KSxBQSs9Myk6UkE9PTE4JiYodHQ9MTErRShHLEFBLDEyNyksQUErPTcpO3R0LS07KVRlW1RBKytdPW9lfX12YXIgbm49VGUuc3ViYXJyYXkoMCxBdCkscmU9VGUuc3ViYXJyYXkoQXQpO0NlPUwobm4pLGhlPUwocmUpLF9BPW0obm4sQ2UsMSksVUE9bShyZSxoZSwxKX1lbHNlIFYoMSk7ZWxzZXt2YXIgUkE9TyhBQSkrNCxtdD1HW1JBLTRdfEdbUkEtM108PDgsU3Q9UkErbXQ7aWYoU3Q+YUEpe1dBJiZWKDApO2JyZWFrfXpBJiZOZShCQSttdCksSy5zZXQoRy5zdWJhcnJheShSQSxTdCksQkEpLGIuYj1CQSs9bXQsYi5wPUFBPVN0KjgsYi5mPWFlO2NvbnRpbnVlfWlmKEFBPiRlKXtXQSYmVigwKTticmVha319ekEmJk5lKEJBKzEzMTA3Mik7Zm9yKHZhciBncz0oMTw8Q2UpLTEsY3M9KDE8PGhlKS0xLHB0PUFBOztwdD1BQSl7dmFyIG9lPV9BW1goRyxBQSkmZ3NdLHllPW9lPj40O2lmKEFBKz1vZSYxNSxBQT4kZSl7V0EmJlYoMCk7YnJlYWt9aWYob2V8fFYoMikseWU8MjU2KUtbQkErK109eWU7ZWxzZSBpZih5ZT09MjU2KXtwdD1BQSxfQT1udWxsO2JyZWFrfWVsc2V7dmFyIHNuPXllLTI1NDtpZih5ZT4yNjQpe3ZhciBUQT15ZS0yNTcsaWU9bltUQV07c249RShHLEFBLCgxPDxpZSktMSkrb1tUQV0sQUErPWllfXZhciBIZT1VQVtYKEcsQUEpJmNzXSxrZT1IZT4+NDtIZXx8VigzKSxBQSs9SGUmMTU7dmFyIHJlPWRba2VdO2lmKGtlPjMpe3ZhciBpZT1zW2tlXTtyZSs9WChHLEFBKSYoMTw8aWUpLTEsQUErPWllfWlmKEFBPiRlKXtXQSYmVigwKTticmVha316QSYmTmUoQkErMTMxMDcyKTt2YXIgbnQ9QkErc247aWYoQkE8cmUpe3ZhciBZZT1HQS1yZSxwQT1NYXRoLm1pbihyZSxudCk7Zm9yKFllK0JBPDAmJlYoMyk7QkE8cEE7KytCQSlLW0JBXT1lQVtZZStCQV19Zm9yKDtCQTxudDsrK0JBKUtbQkFdPUtbQkEtcmVdfX1iLmw9X0EsYi5wPXB0LGIuYj1CQSxiLmY9YWUsX0EmJihhZT0xLGIubT1DZSxiLmQ9VUEsYi5uPWhlKX13aGlsZSghYWUpO3JldHVybiBCQSE9Sy5sZW5ndGgmJnNlP25BKEssMCxCQSk6Sy5zdWJhcnJheSgwLEJBKX0sej1uZXcgZSgwKTtmdW5jdGlvbiB0QShHLGIpe3JldHVybiBxKEcse2k6Mn0sYiYmYi5vdXQsYiYmYi5kaWN0aW9uYXJ5KX12YXIgaUE9dHlwZW9mIFRleHREZWNvZGVyPCJ1IiYmbmV3IFRleHREZWNvZGVyLFA9MDt0cnl7aUEuZGVjb2RlKHose3N0cmVhbTohMH0pLFA9MX1jYXRjaHt9WXM9dEF9KSgpO3ZhciBQcz1ZcyxKcz0hMSxxcz0hMCxxdD0hMTtmdW5jdGlvbiBLcyhlLEEsdCl7SnM9ZSxxcz1BLHF0PXR9ZnVuY3Rpb24gcCguLi5lKXtKcyYmY29uc29sZS5pbmZvKC4uLmUpfWZ1bmN0aW9uIHNBKC4uLmUpe3FzJiZjb25zb2xlLndhcm4oLi4uZSl9ZnVuY3Rpb24gT0EoLi4uZSl7cXQmJmNvbnNvbGUuZ3JvdXAoLi4uZSl9ZnVuY3Rpb24gYkEoLi4uZSl7cXQmJmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoLi4uZSl9ZnVuY3Rpb24gWigpe3F0JiZjb25zb2xlLmdyb3VwRW5kKCl9dmFyIEVlPXtjb25zb2xlQ29sb3JzOmMsU3Blc3NhU3ludGhJbmZvOnAsU3Blc3NhU3ludGhXYXJuOnNBLFNwZXNzYVN5bnRoR3JvdXBDb2xsYXBzZWQ6YkEsU3Blc3NhU3ludGhHcm91cDpPQSxTcGVzc2FTeW50aEdyb3VwRW5kOloscmVhZEJ5dGVzQXNVaW50QmlnRW5kaWFuOlF0LHJlYWRMaXR0bGVFbmRpYW46TixyZWFkQnl0ZXNBc1N0cmluZzpoQSxyZWFkVmFyaWFibGVMZW5ndGhRdWFudGl0eTp1QSxpbmZsYXRlU3luYzpQc307dmFyIFpBPWNsYXNze3RpY2tzO3N0YXR1c0J5dGU7ZGF0YTtjb25zdHJ1Y3RvcihlLEEsdCl7dGhpcy50aWNrcz1lLHRoaXMuc3RhdHVzQnl0ZT1BLHRoaXMuZGF0YT10fX07ZnVuY3Rpb24gS2EoZSl7bGV0IEE9ZSYyNDAsdD1lJjE1LG49dDtzd2l0Y2goQSl7Y2FzZSAxMjg6Y2FzZSAxNDQ6Y2FzZSAxNjA6Y2FzZSAxNzY6Y2FzZSAxOTI6Y2FzZSAyMDg6Y2FzZSAyMjQ6YnJlYWs7Y2FzZSAyNDA6c3dpdGNoKHQpe2Nhc2UgMDpuPS0zO2JyZWFrO2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNDpuPS0xO2JyZWFrO2Nhc2UgMTU6bj0tMjticmVha31icmVhaztkZWZhdWx0Om49LTF9cmV0dXJuIG59ZnVuY3Rpb24gQXMoZSl7bGV0IEE9ZSYyNDAsdD1lJjE1LG49LTEscz1lO3JldHVybiBBPj0xMjgmJkE8PTIyNCYmKG49dCxzPUEpLHtzdGF0dXM6cyxjaGFubmVsOm59fXZhciBPYT17ODoyLDk6MiwxMDoyLDExOjIsMTI6MSwxMzoxLDE0OjJ9LE09e25vdGVPZmY6MTI4LG5vdGVPbjoxNDQscG9seVByZXNzdXJlOjE2MCxjb250cm9sbGVyQ2hhbmdlOjE3Nixwcm9ncmFtQ2hhbmdlOjE5MixjaGFubmVsUHJlc3N1cmU6MjA4LHBpdGNoV2hlZWw6MjI0LHN5c3RlbUV4Y2x1c2l2ZToyNDAsdGltZWNvZGU6MjQxLHNvbmdQb3NpdGlvbjoyNDIsc29uZ1NlbGVjdDoyNDMsdHVuZVJlcXVlc3Q6MjQ2LGNsb2NrOjI0OCxzdGFydDoyNTAsY29udGludWU6MjUxLHN0b3A6MjUyLGFjdGl2ZVNlbnNpbmc6MjU0LHJlc2V0OjI1NSxzZXF1ZW5jZU51bWJlcjowLHRleHQ6MSxjb3B5cmlnaHQ6Mix0cmFja05hbWU6MyxpbnN0cnVtZW50TmFtZTo0LGx5cmljOjUsbWFya2VyOjYsY3VlUG9pbnQ6Nyxwcm9ncmFtTmFtZTo4LG1pZGlDaGFubmVsUHJlZml4OjMyLG1pZGlQb3J0OjMzLGVuZE9mVHJhY2s6NDcsc2V0VGVtcG86ODEsc21wdGVPZmZzZXQ6ODQsdGltZVNpZ25hdHVyZTo4OCxrZXlTaWduYXR1cmU6ODksc2VxdWVuY2VTcGVjaWZpYzoxMjd9LFM9e2JhbmtTZWxlY3Q6MCxtb2R1bGF0aW9uV2hlZWw6MSxicmVhdGhDb250cm9sbGVyOjIsdW5kZWZpbmVkQ0MzOjMsZm9vdENvbnRyb2xsZXI6NCxwb3J0YW1lbnRvVGltZTo1LGRhdGFFbnRyeU1TQjo2LG1haW5Wb2x1bWU6NyxiYWxhbmNlOjgsdW5kZWZpbmVkQ0M5OjkscGFuOjEwLGV4cHJlc3Npb25Db250cm9sbGVyOjExLGVmZmVjdENvbnRyb2wxOjEyLGVmZmVjdENvbnRyb2wyOjEzLHVuZGVmaW5lZENDMTQ6MTQsdW5kZWZpbmVkQ0MxNToxNSxnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXIxOjE2LGdlbmVyYWxQdXJwb3NlQ29udHJvbGxlcjI6MTcsZ2VuZXJhbFB1cnBvc2VDb250cm9sbGVyMzoxOCxnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI0OjE5LHVuZGVmaW5lZENDMjA6MjAsdW5kZWZpbmVkQ0MyMToyMSx1bmRlZmluZWRDQzIyOjIyLHVuZGVmaW5lZENDMjM6MjMsdW5kZWZpbmVkQ0MyNDoyNCx1bmRlZmluZWRDQzI1OjI1LHVuZGVmaW5lZENDMjY6MjYsdW5kZWZpbmVkQ0MyNzoyNyx1bmRlZmluZWRDQzI4OjI4LHVuZGVmaW5lZENDMjk6MjksdW5kZWZpbmVkQ0MzMDozMCx1bmRlZmluZWRDQzMxOjMxLGJhbmtTZWxlY3RMU0I6MzIsbW9kdWxhdGlvbldoZWVsTFNCOjMzLGJyZWF0aENvbnRyb2xsZXJMU0I6MzQsdW5kZWZpbmVkQ0MzTFNCOjM1LGZvb3RDb250cm9sbGVyTFNCOjM2LHBvcnRhbWVudG9UaW1lTFNCOjM3LGRhdGFFbnRyeUxTQjozOCxtYWluVm9sdW1lTFNCOjM5LGJhbGFuY2VMU0I6NDAsdW5kZWZpbmVkQ0M5TFNCOjQxLHBhbkxTQjo0MixleHByZXNzaW9uQ29udHJvbGxlckxTQjo0MyxlZmZlY3RDb250cm9sMUxTQjo0NCxlZmZlY3RDb250cm9sMkxTQjo0NSx1bmRlZmluZWRDQzE0TFNCOjQ2LHVuZGVmaW5lZENDMTVMU0I6NDcsdW5kZWZpbmVkQ0MxNkxTQjo0OCx1bmRlZmluZWRDQzE3TFNCOjQ5LHVuZGVmaW5lZENDMThMU0I6NTAsdW5kZWZpbmVkQ0MxOUxTQjo1MSx1bmRlZmluZWRDQzIwTFNCOjUyLHVuZGVmaW5lZENDMjFMU0I6NTMsdW5kZWZpbmVkQ0MyMkxTQjo1NCx1bmRlZmluZWRDQzIzTFNCOjU1LHVuZGVmaW5lZENDMjRMU0I6NTYsdW5kZWZpbmVkQ0MyNUxTQjo1Nyx1bmRlZmluZWRDQzI2TFNCOjU4LHVuZGVmaW5lZENDMjdMU0I6NTksdW5kZWZpbmVkQ0MyOExTQjo2MCx1bmRlZmluZWRDQzI5TFNCOjYxLHVuZGVmaW5lZENDMzBMU0I6NjIsdW5kZWZpbmVkQ0MzMUxTQjo2MyxzdXN0YWluUGVkYWw6NjQscG9ydGFtZW50b09uT2ZmOjY1LHNvc3RlbnV0b1BlZGFsOjY2LHNvZnRQZWRhbDo2NyxsZWdhdG9Gb290c3dpdGNoOjY4LGhvbGQyUGVkYWw6Njksc291bmRWYXJpYXRpb246NzAsZmlsdGVyUmVzb25hbmNlOjcxLHJlbGVhc2VUaW1lOjcyLGF0dGFja1RpbWU6NzMsYnJpZ2h0bmVzczo3NCxkZWNheVRpbWU6NzUsdmlicmF0b1JhdGU6NzYsdmlicmF0b0RlcHRoOjc3LHZpYnJhdG9EZWxheTo3OCxzb3VuZENvbnRyb2xsZXIxMDo3OSxnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI1OjgwLGdlbmVyYWxQdXJwb3NlQ29udHJvbGxlcjY6ODEsZ2VuZXJhbFB1cnBvc2VDb250cm9sbGVyNzo4MixnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI4OjgzLHBvcnRhbWVudG9Db250cm9sOjg0LHVuZGVmaW5lZENDODU6ODUsdW5kZWZpbmVkQ0M4Njo4Nix1bmRlZmluZWRDQzg3Ojg3LHVuZGVmaW5lZENDODg6ODgsdW5kZWZpbmVkQ0M4OTo4OSx1bmRlZmluZWRDQzkwOjkwLHJldmVyYkRlcHRoOjkxLHRyZW1vbG9EZXB0aDo5MixjaG9ydXNEZXB0aDo5MyxkZXR1bmVEZXB0aDo5NCxwaGFzZXJEZXB0aDo5NSxkYXRhSW5jcmVtZW50Ojk2LGRhdGFEZWNyZW1lbnQ6OTcsbm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQjo5OCxub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCOjk5LHJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0I6MTAwLHJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0I6MTAxLHVuZGVmaW5lZENDMTAyTFNCOjEwMix1bmRlZmluZWRDQzEwM0xTQjoxMDMsdW5kZWZpbmVkQ0MxMDRMU0I6MTA0LHVuZGVmaW5lZENDMTA1TFNCOjEwNSx1bmRlZmluZWRDQzEwNkxTQjoxMDYsdW5kZWZpbmVkQ0MxMDdMU0I6MTA3LHVuZGVmaW5lZENDMTA4TFNCOjEwOCx1bmRlZmluZWRDQzEwOUxTQjoxMDksdW5kZWZpbmVkQ0MxMTBMU0I6MTEwLHVuZGVmaW5lZENDMTExTFNCOjExMSx1bmRlZmluZWRDQzExMkxTQjoxMTIsdW5kZWZpbmVkQ0MxMTNMU0I6MTEzLHVuZGVmaW5lZENDMTE0TFNCOjExNCx1bmRlZmluZWRDQzExNUxTQjoxMTUsdW5kZWZpbmVkQ0MxMTZMU0I6MTE2LHVuZGVmaW5lZENDMTE3TFNCOjExNyx1bmRlZmluZWRDQzExOExTQjoxMTgsdW5kZWZpbmVkQ0MxMTlMU0I6MTE5LGFsbFNvdW5kT2ZmOjEyMCxyZXNldEFsbENvbnRyb2xsZXJzOjEyMSxsb2NhbENvbnRyb2xPbk9mZjoxMjIsYWxsTm90ZXNPZmY6MTIzLG9tbmlNb2RlT2ZmOjEyNCxvbW5pTW9kZU9uOjEyNSxtb25vTW9kZU9uOjEyNixwb2x5TW9kZU9uOjEyN307ZnVuY3Rpb24gVmEoZSl7aWYoIWUudHJhY2tzKXRocm93IG5ldyBFcnJvcigiTUlESSBoYXMgbm8gdHJhY2tzISIpO2xldCBBPVtdO2ZvcihsZXQgcyBvZiBlLnRyYWNrcyl7bGV0IGE9W10scj0wLEk7Zm9yKGxldCBvIG9mIHMuZXZlbnRzKXtsZXQgZz1NYXRoLm1heCgwLG8udGlja3Mtcik7aWYoby5zdGF0dXNCeXRlPT09TS5lbmRPZlRyYWNrKXtyKz1nO2NvbnRpbnVlfWxldCBCO28uc3RhdHVzQnl0ZTw9TS5zZXF1ZW5jZVNwZWNpZmljPyhCPVsyNTUsby5zdGF0dXNCeXRlLC4uLkNuKG8uZGF0YS5sZW5ndGgpLC4uLm8uZGF0YV0sST12b2lkIDApOm8uc3RhdHVzQnl0ZT09PU0uc3lzdGVtRXhjbHVzaXZlPyhCPVsyNDAsLi4uQ24oby5kYXRhLmxlbmd0aCksLi4uby5kYXRhXSxJPXZvaWQgMCk6KEI9W10sSSE9PW8uc3RhdHVzQnl0ZSYmKEk9by5zdGF0dXNCeXRlLEIucHVzaChvLnN0YXR1c0J5dGUpKSxCLnB1c2goLi4uby5kYXRhKSksYS5wdXNoKC4uLkNuKGcpKSxhLnB1c2goLi4uQikscis9Z31hLnB1c2goMCksYS5wdXNoKDI1NSksYS5wdXNoKE0uZW5kT2ZUcmFjayksYS5wdXNoKDApLEEucHVzaChuZXcgVWludDhBcnJheShhKSl9bGV0IHQ9KHMsYSk9Pntmb3IobGV0IHI9MDtyPHMubGVuZ3RoO3IrKylhLnB1c2gocy5jaGFyQ29kZUF0KHIpKX0sbj1bXTt0KCJNVGhkIixuKSxuLnB1c2goLi4uR3QoNiw0KSksbi5wdXNoKDAsZS5mb3JtYXQpLG4ucHVzaCguLi5HdChlLnRyYWNrcy5sZW5ndGgsMikpLG4ucHVzaCguLi5HdChlLnRpbWVEaXZpc2lvbiwyKSk7Zm9yKGxldCBzIG9mIEEpdCgiTVRyayIsbiksbi5wdXNoKC4uLkd0KHMubGVuZ3RoLDQpKSxuLnB1c2goLi4ucyk7cmV0dXJuIG5ldyBVaW50OEFycmF5KG4pLmJ1ZmZlcn12YXIgWGE9MzUwLFNlPTksUm49MTYsT3M9ImdzIixCZT0tMSxSdD1gU1BFU1NBU1lOVEhfRU1CRURERURfQkFOS18ke01hdGgucmFuZG9tKCl9X0RPX05PVF9ERUxFVEVgLFZzPTMyNzY3LFphPXt0aW1lOjB9LHphPS4wMyxXYT0uMDcsX2E9MSxqYT02NCxtcz0xMjEsZkE9Y2xhc3N7c3RhdGljIGdldERlZmF1bHRCYW5rKGUpe3JldHVybiBlPT09ImdtMiI/bXM6MH1zdGF0aWMgZ2V0RHJ1bUJhbmsoZSl7c3dpdGNoKGUpe2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGAke2V9IGRvZXNuJ3QgaGF2ZSBhIGJhbmsgTVNCIGZvciBkcnVtcy5gKTtjYXNlImdtMiI6cmV0dXJuIDEyMDtjYXNlInhnIjpyZXR1cm4gMTI3fX1zdGF0aWMgaXNYR0RydW1zKGUpe3JldHVybiBlPT09MTIwfHxlPT09MTI2fHxlPT09MTI3fXN0YXRpYyBpc1ZhbGlkWEdNU0IoZSl7cmV0dXJuIHRoaXMuaXNYR0RydW1zKGUpfHxlPT09amF8fGU9PT1tc31zdGF0aWMgaXNTeXN0ZW1YRyhlKXtyZXR1cm4gZT09PSJnbTIifHxlPT09InhnIn1zdGF0aWMgYWRkQmFua09mZnNldChlLEEsdD0hMCl7cmV0dXJuIHRoaXMuaXNYR0RydW1zKGUpJiZ0P2U6TWF0aC5taW4oZStBLDEyNyl9c3RhdGljIHN1YnRyYWNrQmFua09mZnNldChlLEEsdD0hMCl7cmV0dXJuIHRoaXMuaXNYR0RydW1zKGUpJiZ0P2U6TWF0aC5tYXgoMCxlLUEpfX07ZnVuY3Rpb24gZXMoZSl7cmV0dXJuIGUuZGF0YVswXT09PTY3JiZlLmRhdGFbMl09PT03NiYmZS5kYXRhWzVdPT09MTI2JiZlLmRhdGFbNl09PT0wfWZ1bmN0aW9uIFhzKGUpe3JldHVybiBlLmRhdGFbMF09PT02NSYmZS5kYXRhWzJdPT09NjYmJmUuZGF0YVszXT09PTE4JiZlLmRhdGFbNF09PT02NCYmKGUuZGF0YVs1XSYxNikhPT0wJiZlLmRhdGFbNl09PT0yMX1mdW5jdGlvbiBacyhlKXtyZXR1cm4gZS5kYXRhWzBdPT09NjUmJmUuZGF0YVsyXT09PTY2JiZlLmRhdGFbNl09PT0xMjd9ZnVuY3Rpb24genMoZSl7cmV0dXJuIGUuZGF0YVswXT09PTEyNiYmZS5kYXRhWzJdPT09OSYmZS5kYXRhWzNdPT09MX1mdW5jdGlvbiBXcyhlKXtyZXR1cm4gZS5kYXRhWzBdPT09MTI2JiZlLmRhdGFbMl09PT05JiZlLmRhdGFbM109PT0zfWZ1bmN0aW9uIF9zKGUpe3JldHVybiBuZXcgWkEoZSxNLnN5c3RlbUV4Y2x1c2l2ZSxuZXcgWShbNjUsMTYsNjYsMTgsNjQsMCwxMjcsMCw2NSwyNDddKSl9dmFyIHRlPWNsYXNzIGpze3N0YXRpYyB0b01JRElTdHJpbmcoQSl7cmV0dXJuIEEuaXNHTUdTRHJ1bT9gRFJVTToke0EucHJvZ3JhbX1gOmAke0EuYmFua0xTQn06JHtBLmJhbmtNU0J9OiR7QS5wcm9ncmFtfWB9c3RhdGljIGZyb21NSURJU3RyaW5nKEEpe2xldCB0PUEuc3BsaXQoIjoiKTtpZih0Lmxlbmd0aD4zfHx0Lmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBNSURJIHN0cmluZzoiKTtyZXR1cm4gQS5zdGFydHNXaXRoKCJEUlVNIik/e2JhbmtNU0I6MCxiYW5rTFNCOjAscHJvZ3JhbTpwYXJzZUludCh0WzFdKSxpc0dNR1NEcnVtOiEwfTp7YmFua0xTQjpwYXJzZUludCh0WzBdKSxiYW5rTVNCOnBhcnNlSW50KHRbMV0pLHByb2dyYW06cGFyc2VJbnQodFsyXSksaXNHTUdTRHJ1bTohMX19c3RhdGljIHRvTmFtZWRNSURJU3RyaW5nKEEpe3JldHVybmAke2pzLnRvTUlESVN0cmluZyhBKX0gJHtBLm5hbWV9YH1zdGF0aWMgbWF0Y2hlcyhBLHQpe3JldHVybiBBLmlzR01HU0RydW18fHQuaXNHTUdTRHJ1bT9BLmlzR01HU0RydW09PT10LmlzR01HU0RydW0mJkEucHJvZ3JhbT09PXQucHJvZ3JhbTpBLnByb2dyYW09PT10LnByb2dyYW0mJkEuYmFua0xTQj09PXQuYmFua0xTQiYmQS5iYW5rTVNCPT09dC5iYW5rTVNCfXN0YXRpYyBmcm9tTmFtZWRNSURJU3RyaW5nKEEpe2xldCB0PUEuaW5kZXhPZigiICIpO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmFtZWQgTUlESSBzdHJpbmc6ICR7QX1gKTtsZXQgbj10aGlzLmZyb21NSURJU3RyaW5nKEEuc3Vic3RyaW5nKDAsdCkpLHM9QS5zdWJzdHJpbmcodCsxKTtyZXR1cm57Li4ubixuYW1lOnN9fXN0YXRpYyBzb3J0ZXIoQSx0KXtyZXR1cm4gQS5wcm9ncmFtIT09dC5wcm9ncmFtP0EucHJvZ3JhbS10LnByb2dyYW06QS5pc0dNR1NEcnVtJiYhdC5pc0dNR1NEcnVtPzE6IUEuaXNHTUdTRHJ1bSYmdC5pc0dNR1NEcnVtPy0xOkEuYmFua01TQiE9PXQuYmFua01TQj9BLmJhbmtNU0ItdC5iYW5rTVNCOkEuYmFua0xTQi10LmJhbmtMU0J9fSwkYT0iQ3JlYXRlZCB1c2luZyBTcGVzc2FTeW50aCI7ZnVuY3Rpb24gQW8oZSxBLHQpe2xldCBuPSJnbSIscz1bXSxhPUFycmF5KGUudHJhY2tzLmxlbmd0aCkuZmlsbCgwKSxyPWUudHJhY2tzLmxlbmd0aCxJPSgpPT57bGV0IGQ9MCxoPTEvMDtyZXR1cm4gZS50cmFja3MuZm9yRWFjaCgoQyxRKT0+e2FbUV0+PUMuZXZlbnRzLmxlbmd0aHx8Qy5ldmVudHNbYVtRXV0udGlja3M8aCYmKGQ9USxoPUMuZXZlbnRzW2FbUV1dLnRpY2tzKX0pLGR9LG89QXJyYXkoZS50cmFja3MubGVuZ3RoKS5maWxsKDApLGc9MTYrTWF0aC5tYXgoLi4uZS5wb3J0Q2hhbm5lbE9mZnNldE1hcCksQj1bXTtmb3IobGV0IGQ9MDtkPGc7ZCsrKUIucHVzaCh7cHJvZ3JhbTowLGRydW1zOmQlMTY9PT1TZSxsYXN0QmFuazp2b2lkIDAsbGFzdEJhbmtMU0I6dm9pZCAwLGhhc0JhbmtTZWxlY3Q6ITF9KTtmb3IoO3I+MDspe2xldCBkPUkoKSxoPWUudHJhY2tzW2RdO2lmKGFbZF0+PWguZXZlbnRzLmxlbmd0aCl7ci0tO2NvbnRpbnVlfWxldCBDPWguZXZlbnRzW2FbZF1dO2FbZF0rKztsZXQgUT1lLnBvcnRDaGFubmVsT2Zmc2V0TWFwW29bZF1dO2lmKEMuc3RhdHVzQnl0ZT09PU0ubWlkaVBvcnQpe29bZF09Qy5kYXRhWzBdO2NvbnRpbnVlfWxldCBtPUMuc3RhdHVzQnl0ZSYyNDA7aWYobSE9PU0uY29udHJvbGxlckNoYW5nZSYmbSE9PU0ucHJvZ3JhbUNoYW5nZSYmbSE9PU0uc3lzdGVtRXhjbHVzaXZlKWNvbnRpbnVlO2lmKG09PT1NLnN5c3RlbUV4Y2x1c2l2ZSl7aWYoIVhzKEMpKXtlcyhDKT9uPSJ4ZyI6WnMoQyk/bj0iZ3MiOnpzKEMpPyhuPSJnbSIscy5wdXNoKHt0TnVtOmQsZTpDfSkpOldzKEMpJiYobj0iZ20yIik7Y29udGludWV9bGV0IEQ9WzksMCwxLDIsMyw0LDUsNiw3LDgsMTAsMTEsMTIsMTMsMTQsMTVdW0MuZGF0YVs1XSYxNV0rUTtCW0RdLmRydW1zPSEhKEMuZGF0YVs3XT4wJiZDLmRhdGFbNV0+PjQpO2NvbnRpbnVlfWxldCB5PShDLnN0YXR1c0J5dGUmMTUpK1EsRj1CW3ldO2lmKG09PT1NLnByb2dyYW1DaGFuZ2Upe2xldCB2PXtwcm9ncmFtOkMuZGF0YVswXSxiYW5rTFNCOkYubGFzdEJhbmtMU0I/LmRhdGE/LlsxXT8/MCxiYW5rTVNCOmZBLnN1YnRyYWNrQmFua09mZnNldChGLmxhc3RCYW5rPy5kYXRhPy5bMV0/PzAsZS5iYW5rT2Zmc2V0KSxpc0dNR1NEcnVtOkYuZHJ1bXN9LEw9dC5nZXRQcmVzZXQodixuKTtpZihwKGAlY0lucHV0IHBhdGNoOiAlYyR7dGUudG9NSURJU3RyaW5nKHYpfSVjLiBDaGFubmVsICVjJHt5fSVjLiBDaGFuZ2luZyBwYXRjaCB0byAke0wudG9TdHJpbmcoKX0uYCxjLmluZm8sYy51bnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pLEMuZGF0YVswXT1MLnByb2dyYW0sTC5pc0dNR1NEcnVtJiZmQS5pc1N5c3RlbVhHKG4pfHxGLmxhc3RCYW5rPT09dm9pZCAwfHwoRi5sYXN0QmFuay5kYXRhWzFdPWZBLmFkZEJhbmtPZmZzZXQoTC5iYW5rTVNCLEEsTC5pc1hHRHJ1bXMpLEYubGFzdEJhbmtMU0I9PT12b2lkIDApKWNvbnRpbnVlO0YubGFzdEJhbmtMU0IuZGF0YVsxXT1MLmJhbmtMU0I7Y29udGludWV9bGV0IGs9Qy5kYXRhWzBdPT09Uy5iYW5rU2VsZWN0TFNCO0MuZGF0YVswXSE9PVMuYmFua1NlbGVjdCYmIWt8fChGLmhhc0JhbmtTZWxlY3Q9ITAsaz9GLmxhc3RCYW5rTFNCPUM6Ri5sYXN0QmFuaz1DKX1pZihCLmZvckVhY2goKGQsaCk9PntpZihkLmhhc0JhbmtTZWxlY3QpcmV0dXJuO2xldCBDPWglMTYsUT1NLnByb2dyYW1DaGFuZ2V8QyxtPU1hdGguZmxvb3IoaC8xNikqMTYseT1lLnBvcnRDaGFubmVsT2Zmc2V0TWFwLmluZGV4T2YobSksRj1lLnRyYWNrcy5maW5kKEU9PkUucG9ydD09PXkmJkUuY2hhbm5lbHMuaGFzKEMpKTtpZihGPT09dm9pZCAwKXJldHVybjtsZXQgaz1GLmV2ZW50cy5maW5kSW5kZXgoRT0+RS5zdGF0dXNCeXRlPT09USk7aWYoaz09PS0xKXtsZXQgRT1GLmV2ZW50cy5maW5kSW5kZXgobkE9Pm5BLnN0YXR1c0J5dGU+MTI4JiZuQS5zdGF0dXNCeXRlPDI0MCYmKG5BLnN0YXR1c0J5dGUmMTUpPT09Qyk7aWYoRT09PS0xKXJldHVybjtsZXQgWD1GLmV2ZW50c1tFXS50aWNrcyxPPXQuZ2V0UHJlc2V0KHtiYW5rTVNCOjAsYmFua0xTQjowLHByb2dyYW06MCxpc0dNR1NEcnVtOiExfSxuKS5wcm9ncmFtO0YuYWRkRXZlbnQobmV3IFpBKFgsTS5wcm9ncmFtQ2hhbmdlfEMsbmV3IFkoW09dKSksRSksaz1FfXAoYCVjQWRkaW5nIGJhbmsgc2VsZWN0IGZvciAlYyR7aH1gLGMuaW5mbyxjLnJlY29nbml6ZWQpO2xldCBEPUYuZXZlbnRzW2tdLnRpY2tzLHY9dC5nZXRQcmVzZXQoe2JhbmtMU0I6MCxiYW5rTVNCOjAscHJvZ3JhbTpkLnByb2dyYW0saXNHTUdTRHJ1bTpkLmRydW1zfSxuKSxMPWZBLmFkZEJhbmtPZmZzZXQodi5iYW5rTVNCLEEsdi5pc1hHRHJ1bXMpO0YuYWRkRXZlbnQobmV3IFpBKEQsTS5jb250cm9sbGVyQ2hhbmdlfEMsbmV3IFkoW1MuYmFua1NlbGVjdCxMXSkpLGspfSksbiE9PSJncyImJiFmQS5pc1N5c3RlbVhHKG4pKXtmb3IobGV0IGggb2Ygcyl7bGV0IEM9ZS50cmFja3NbaC50TnVtXTtDLmRlbGV0ZUV2ZW50KEMuZXZlbnRzLmluZGV4T2YoaC5lKSl9bGV0IGQ9MDtlLnRyYWNrc1swXS5ldmVudHNbMF0uc3RhdHVzQnl0ZT09PU0udHJhY2tOYW1lJiZkKyssZS50cmFja3NbMF0uYWRkRXZlbnQoX3MoMCksZCl9fXZhciBTcz17YmFua09mZnNldDowLG1ldGFkYXRhOnt9LGNvcnJlY3RCYW5rT2Zmc2V0OiEwLHNvdW5kQmFuazp2b2lkIDB9O2Z1bmN0aW9uIGVvKGUsQSx0KXtsZXQgbj10Lm1ldGFkYXRhO2lmKE9BKCIlY1dyaXRpbmcgdGhlIFJNSURJIEZpbGUuLi4iLGMuaW5mbykscCgibWV0YWRhdGEiLG4pLHAoIkluaXRpYWwgYmFuayBvZmZzZXQiLGUuYmFua09mZnNldCksdC5jb3JyZWN0QmFua09mZnNldCl7aWYoIXQuc291bmRCYW5rKXRocm93IG5ldyBFcnJvcigiU291bmQgYmFuayBtdXN0IGJlIHByb3ZpZGVkIGlmIGNvcnJlY3RpbmcgYmFuayBvZmZzZXQuIik7QW8oZSx0LmJhbmtPZmZzZXQsdC5zb3VuZEJhbmspfWxldCBzPW5ldyBZKGUud3JpdGVNSURJKCkpO24ubmFtZT8/PWUuZ2V0TmFtZSgpLG4uY3JlYXRpb25EYXRlPz89bmV3IERhdGUsbi5jb3B5cmlnaHQ/Pz0kYSxuLnNvZnR3YXJlPz89IlNwZXNzYVN5bnRoIixPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKEk9PntsZXQgbz1JO29bMV0mJmUuc2V0Uk1JREluZm8ob1swXSxvWzFdKX0pO2xldCBhPVtdO09iamVjdC5lbnRyaWVzKGUucm1pZGlJbmZvKS5mb3JFYWNoKEk9PntsZXQgbz1JWzBdLGc9SVsxXSxCPWQ9PnthLnB1c2goY0EoZCxnKSl9O3N3aXRjaChvKXtjYXNlImFsYnVtIjpCKCJJQUxCIiksQigiSVBSRCIpO2JyZWFrO2Nhc2Uic29mdHdhcmUiOkIoIklTRlQiKTticmVhaztjYXNlImluZm9FbmNvZGluZyI6QigiSUVOQyIpO2JyZWFrO2Nhc2UiY3JlYXRpb25EYXRlIjpCKCJJQ1JEIik7YnJlYWs7Y2FzZSJwaWN0dXJlIjpCKCJJUElDIik7YnJlYWs7Y2FzZSJuYW1lIjpCKCJJTkFNIik7YnJlYWs7Y2FzZSJhcnRpc3QiOkIoIklBUlQiKTticmVhaztjYXNlImdlbnJlIjpCKCJJR05SIik7YnJlYWs7Y2FzZSJjb3B5cmlnaHQiOkIoIklDT1AiKTticmVhaztjYXNlImNvbW1lbnQiOkIoIklDTVQiKTticmVhaztjYXNlImVuZ2luZWVyIjpCKCJJRU5HIik7YnJlYWs7Y2FzZSJzdWJqZWN0IjpCKCJJU0JKIik7YnJlYWs7Y2FzZSJtaWRpRW5jb2RpbmciOkIoIk1FTkMiKTticmVha319KTtsZXQgcj1uZXcgWSgyKTtyZXR1cm4gaHQocix0LmJhbmtPZmZzZXQsMiksYS5wdXNoKGNBKCJEQk5LIixyKSkscCgiJWNGaW5pc2hlZCEiLGMuaW5mbyksWigpLHZBKCJSSUZGIixbbmUoIlJNSUQiKSxjQSgiZGF0YSIscyksdkEoIklORk8iLGEsITApLG5ldyBZKEEpXSkuYnVmZmVyfWZ1bmN0aW9uIHRvKGUsQSl7YkEoIiVjU2VhcmNoaW5nIGZvciBhbGwgdXNlZCBwcm9ncmFtcyBhbmQga2V5cy4uLiIsYy5pbmZvKTtsZXQgdD0xNitNYXRoLm1heCguLi5lLnBvcnRDaGFubmVsT2Zmc2V0TWFwKSxuPVtdLHM9ImdzIjtmb3IobGV0IEI9MDtCPHQ7QisrKXtsZXQgZD1CJTE2PT09U2U7bi5wdXNoKHtwcmVzZXQ6QS5nZXRQcmVzZXQoe2JhbmtMU0I6MCxiYW5rTVNCOjAsaXNHTUdTRHJ1bTpkLHByb2dyYW06MH0scyksYmFua01TQjowLGJhbmtMU0I6MCxpc0RydW06ZH0pfWxldCBhPW5ldyBNYXAscj1BcnJheShlLnRyYWNrcy5sZW5ndGgpLmZpbGwoMCksST1lLnRyYWNrcy5sZW5ndGg7ZnVuY3Rpb24gbygpe2xldCBCPTAsZD0xLzA7cmV0dXJuIGUudHJhY2tzLmZvckVhY2goKHtldmVudHM6aH0sQyk9PntyW0NdPj1oLmxlbmd0aHx8aFtyW0NdXS50aWNrczxkJiYoQj1DLGQ9aFtyW0NdXS50aWNrcyl9KSxCfWxldCBnPWUudHJhY2tzLm1hcChCPT5CLnBvcnQpO2Zvcig7ST4wOyl7bGV0IEI9bygpLGQ9ZS50cmFja3NbQl0uZXZlbnRzO2lmKHJbQl0+PWQubGVuZ3RoKXtJLS07Y29udGludWV9bGV0IGg9ZFtyW0JdXTtpZihyW0JdKyssaC5zdGF0dXNCeXRlPT09TS5taWRpUG9ydCl7Z1tCXT1oLmRhdGFbMF07Y29udGludWV9bGV0IEM9aC5zdGF0dXNCeXRlJjI0MDtpZihDIT09TS5ub3RlT24mJkMhPT1NLmNvbnRyb2xsZXJDaGFuZ2UmJkMhPT1NLnByb2dyYW1DaGFuZ2UmJkMhPT1NLnN5c3RlbUV4Y2x1c2l2ZSljb250aW51ZTtsZXQgUT0oaC5zdGF0dXNCeXRlJjE1KStlLnBvcnRDaGFubmVsT2Zmc2V0TWFwW2dbQl1dfHwwLG09bltRXTtzd2l0Y2goQyl7Y2FzZSBNLnByb2dyYW1DaGFuZ2U6bS5wcmVzZXQ9QS5nZXRQcmVzZXQoe2JhbmtNU0I6bS5iYW5rTVNCLGJhbmtMU0I6bS5iYW5rTFNCLHByb2dyYW06aC5kYXRhWzBdLGlzR01HU0RydW06bS5pc0RydW19LHMpO2JyZWFrO2Nhc2UgTS5jb250cm9sbGVyQ2hhbmdlOnN3aXRjaChoLmRhdGFbMF0pe2RlZmF1bHQ6Y29udGludWU7Y2FzZSBTLmJhbmtTZWxlY3RMU0I6bS5iYW5rTFNCPWguZGF0YVsxXTticmVhaztjYXNlIFMuYmFua1NlbGVjdDptLmJhbmtNU0I9aC5kYXRhWzFdfWJyZWFrO2Nhc2UgTS5ub3RlT246aWYoaC5kYXRhWzFdPT09MCljb250aW51ZTtsZXQgeT1hLmdldChtLnByZXNldCk7eXx8KHk9bmV3IFNldCxhLnNldChtLnByZXNldCx5KSkseS5hZGQoYCR7aC5kYXRhWzBdfS0ke2guZGF0YVsxXX1gKTticmVhaztjYXNlIE0uc3lzdGVtRXhjbHVzaXZlOntpZighWHMoaCkpe2VzKGgpJiYocz0ieGciLHAoIiVjWEcgb24gZGV0ZWN0ZWQhIixjLnJlY29nbml6ZWQpKTtjb250aW51ZX1sZXQgRj1bOSwwLDEsMiwzLDQsNSw2LDcsOCwxMCwxMSwxMiwxMywxNCwxNV1baC5kYXRhWzVdJjE1XStlLnBvcnRDaGFubmVsT2Zmc2V0TWFwW2dbQl1dLGs9ISEoaC5kYXRhWzddPjAmJmguZGF0YVs1XT4+NCk7bT1uW0ZdLG0uaXNEcnVtPWt9YnJlYWt9fXJldHVybiBhLmZvckVhY2goKEIsZCk9PntCLnNpemU9PT0wJiYocChgJWNEZXRlY3RlZCBjaGFuZ2UgYnV0IG5vIGtleXMgZm9yICVjJHtkLm5hbWV9YCxjLmluZm8sYy52YWx1ZSksYS5kZWxldGUoZCkpfSksWigpLGF9ZnVuY3Rpb24gbm8oZSxBPTApe2xldCB0PWg9PihoLmRhdGE9bmV3IFkoaC5kYXRhLmJ1ZmZlciksNmU3L1F0KGguZGF0YSwzKSksbj1bXSxhPWUudHJhY2tzLm1hcChoPT5oLmV2ZW50cykuZmxhdCgpO2Euc29ydCgoaCxDKT0+aC50aWNrcy1DLnRpY2tzKTtmb3IobGV0IGg9MDtoPDE2O2grKyluLnB1c2goW10pO2xldCByPTAsST02MC8oMTIwKmUudGltZURpdmlzaW9uKSxvPTAsZz0wLEI9W107Zm9yKGxldCBoPTA7aDwxNjtoKyspQi5wdXNoKFtdKTtsZXQgZD0oaCxDKT0+e2xldCBRPUJbQ10uZmluZEluZGV4KHk9PnkubWlkaU5vdGU9PT1oKSxtPUJbQ11bUV07aWYobSl7bGV0IHk9ci1tLnN0YXJ0O20ubGVuZ3RoPXksQz09PVNlJiYobS5sZW5ndGg9eTxBP0E6eSksQltDXS5zcGxpY2UoUSwxKX1nLS19O2Zvcig7bzxhLmxlbmd0aDspe2xldCBoPWFbb10sQz1oLnN0YXR1c0J5dGU+PjQsUT1oLnN0YXR1c0J5dGUmMTU7aWYoQz09PTgpZChoLmRhdGFbMF0sUSk7ZWxzZSBpZihDPT09OSlpZihoLmRhdGFbMV09PT0wKWQoaC5kYXRhWzBdLFEpO2Vsc2V7ZChoLmRhdGFbMF0sUSk7bGV0IG09e21pZGlOb3RlOmguZGF0YVswXSxzdGFydDpyLGxlbmd0aDotMSx2ZWxvY2l0eTpoLmRhdGFbMV0vMTI3fTtuW1FdLnB1c2gobSksQltRXS5wdXNoKG0pLGcrK31lbHNlIGguc3RhdHVzQnl0ZT09PTgxJiYoST02MC8odChoKSplLnRpbWVEaXZpc2lvbikpO2lmKCsrbz49YS5sZW5ndGgpYnJlYWs7cis9SSooYVtvXS50aWNrcy1oLnRpY2tzKX1yZXR1cm4gZz4wJiZCLmZvckVhY2goKGgsQyk9PntoLmZvckVhY2goUT0+e2xldCBtPXItUS5zdGFydDtRLmxlbmd0aD1tLEM9PT1TZSYmKFEubGVuZ3RoPW08QT9BOm0pfSl9KSxufXZhciB2dD17bGluZWFyOjAsbmVhcmVzdE5laWdoYm9yOjEsaGVybWl0ZToyfSxobj17c291bmRDYW52YXNUZXh0OjAseWFtYWhhWEdUZXh0OjEsc291bmRDYW52YXNEb3RNYXRyaXg6Mn0sWUE9e0lkbGU6MCxSUENvYXJzZToxLFJQRmluZToyLE5SUENvYXJzZTozLE5SUEZpbmU6NCxEYXRhQ29hcnNlOjUsRGF0YUZpbmU6Nn0sSUE9e2NoYW5uZWxUdW5pbmc6MCxjaGFubmVsVHJhbnNwb3NlRmluZToxLG1vZHVsYXRpb25NdWx0aXBsaWVyOjIsbWFzdGVyVHVuaW5nOjMsY2hhbm5lbFR1bmluZ1NlbWl0b25lczo0LGNoYW5uZWxLZXlTaGlmdDo1LHNmMk5QUk5HZW5lcmF0b3JMU0I6Nn07ZnVuY3Rpb24gcWUoZSxBLHQsbil7cmV0dXJuIG5ldyBaQShuLE0uY29udHJvbGxlckNoYW5nZXxlJTE2LG5ldyBZKFtBLHRdKSl9ZnVuY3Rpb24gc28oZSxBKXtsZXQgdD0xNnxbMSwyLDMsNCw1LDYsNyw4LDAsOSwxMCwxMSwxMiwxMywxNCwxNV1bZSUxNl0sbj1bNjUsMTYsNjYsMTgsNjQsdCwyMSwxXSxhPTEyOC0oNjQrdCsyMSsxKSUxMjg7cmV0dXJuIG5ldyBaQShBLE0uc3lzdGVtRXhjbHVzaXZlLG5ldyBZKFsuLi5uLGEsMjQ3XSkpfWZ1bmN0aW9uIGFvKGUsQT1bXSx0PVtdLG49W10scz1bXSl7YkEoIiVjQXBwbHlpbmcgY2hhbmdlcyB0byB0aGUgTUlESSBmaWxlLi4uIixjLmluZm8pLHAoIkRlc2lyZWQgcHJvZ3JhbSBjaGFuZ2VzOiIsQSkscCgiRGVzaXJlZCBDQyBjaGFuZ2VzOiIsdCkscCgiRGVzaXJlZCBjaGFubmVscyB0byBjbGVhcjoiLG4pLHAoIkRlc2lyZWQgY2hhbm5lbHMgdG8gdHJhbnNwb3NlOiIscyk7bGV0IGE9bmV3IFNldDtBLmZvckVhY2goRD0+e2EuYWRkKEQuY2hhbm5lbCl9KTtsZXQgcj0iZ3MiLEk9ITEsbz1BcnJheShlLnRyYWNrcy5sZW5ndGgpLmZpbGwoMCksZz1lLnRyYWNrcy5sZW5ndGg7ZnVuY3Rpb24gQigpe2xldCBEPTAsdj0xLzA7cmV0dXJuIGUudHJhY2tzLmZvckVhY2goKEwsRSk9PntvW0VdPj1MLmV2ZW50cy5sZW5ndGh8fEwuZXZlbnRzW29bRV1dLnRpY2tzPHYmJihEPUUsdj1MLmV2ZW50c1tvW0VdXS50aWNrcyl9KSxEfWxldCBkPWUudHJhY2tzLm1hcChEPT5ELnBvcnQpLGg9e30sQz0wLFE9KEQsdik9PntlLnRyYWNrc1tEXS5jaGFubmVscy5zaXplIT09MCYmKEM9PT0wJiYoQys9MTYsaFt2XT0wKSxoW3ZdPT09dm9pZCAwJiYoaFt2XT1DLEMrPTE2KSxkW0RdPXYpfTtlLnRyYWNrcy5mb3JFYWNoKChELHYpPT57USh2LEQucG9ydCl9KTtsZXQgbT1DLHk9QXJyYXkobSkuZmlsbCghMCksRj1BcnJheShtKS5maWxsKDApLGs9QXJyYXkobSkuZmlsbCgwKTtmb3Iocy5mb3JFYWNoKEQ9PntsZXQgdj1NYXRoLnRydW5jKEQua2V5U2hpZnQpLEw9RC5rZXlTaGlmdC12O0ZbRC5jaGFubmVsXT12LGtbRC5jaGFubmVsXT1MfSk7Zz4wOyl7bGV0IEQ9QigpLHY9ZS50cmFja3NbRF07aWYob1tEXT49di5ldmVudHMubGVuZ3RoKXtnLS07Y29udGludWV9bGV0IEw9b1tEXSsrLEU9di5ldmVudHNbTF0sWD0oKT0+e3YuZGVsZXRlRXZlbnQoTCksb1tEXS0tfSxPPSh6LHRBPTApPT57di5hZGRFdmVudCh6LEwrdEEpLG9bRF0rK30sbkE9aFtkW0RdXXx8MDtpZihFLnN0YXR1c0J5dGU9PT1NLm1pZGlQb3J0KXtRKEQsRS5kYXRhWzBdKTtjb250aW51ZX1pZihFLnN0YXR1c0J5dGU8PU0uc2VxdWVuY2VTcGVjaWZpYyYmRS5zdGF0dXNCeXRlPj1NLnNlcXVlbmNlTnVtYmVyKWNvbnRpbnVlO2xldCAkPUUuc3RhdHVzQnl0ZSYyNDAsVj1FLnN0YXR1c0J5dGUmMTUscT1WK25BO2lmKG4uaW5jbHVkZXMocSkpe1goKTtjb250aW51ZX1zd2l0Y2goJCl7Y2FzZSBNLm5vdGVPbjppZih5W3FdKXt5W3FdPSExLHQuZmlsdGVyKHRBPT50QS5jaGFubmVsPT09cSkuZm9yRWFjaCh0QT0+e2xldCBpQT1xZShWLHRBLmNvbnRyb2xsZXJOdW1iZXIsdEEuY29udHJvbGxlclZhbHVlLEUudGlja3MpO08oaUEpfSk7bGV0IHo9a1txXTtpZih6IT09MCl7bGV0IHRBPXoqNjQrNjQsaUE9cWUoVixTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMCxFLnRpY2tzKSxQPXFlKFYsUy5yZWdpc3RlcmVkUGFyYW1ldGVyTFNCLDEsRS50aWNrcyksRz1xZShxLFMuZGF0YUVudHJ5TVNCLHRBLEUudGlja3MpLGI9cWUoVixTLmRhdGFFbnRyeUxTQiwwLEUudGlja3MpO08oYiksTyhHKSxPKFApLE8oaUEpfWlmKGEuaGFzKHEpKXtsZXQgdEE9QS5maW5kKGVBPT5lQS5jaGFubmVsPT09cSk7aWYoIXRBKWNvbnRpbnVlO3AoYCVjU2V0dGluZyAlYyR7dEEuY2hhbm5lbH0lYyB0byAlYyR7dGUudG9NSURJU3RyaW5nKHRBKX0lYy4gVHJhY2sgbnVtOiAlYyR7RH1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkKTtsZXQgaUE9dEEuYmFua01TQixQPXRBLmJhbmtMU0IsRz10QS5wcm9ncmFtLGI9bmV3IFpBKEUudGlja3MsTS5wcm9ncmFtQ2hhbmdlfFYsbmV3IFkoW0ddKSk7TyhiKTtsZXQgSz0oZUEsYUEpPT57bGV0IEdBPXFlKFYsZUE/Uy5iYW5rU2VsZWN0TFNCOlMuYmFua1NlbGVjdCxhQSxFLnRpY2tzKTtPKEdBKX07ZkEuaXNTeXN0ZW1YRyhyKSYmdEEuaXNHTUdTRHJ1bSYmKHAoYCVjQWRkaW5nIFhHIERydW0gY2hhbmdlIG9uIHRyYWNrICVjJHtEfWAsYy5yZWNvZ25pemVkLGMudmFsdWUpLGlBPWZBLmdldERydW1CYW5rKHIpLFA9MCksSyghMSxpQSksSyghMCxQKSx0QS5pc0dNR1NEcnVtJiYhZkEuaXNTeXN0ZW1YRyhyKSYmViE9PVNlJiYocChgJWNBZGRpbmcgR1MgRHJ1bSBjaGFuZ2Ugb24gdHJhY2sgJWMke0R9YCxjLnJlY29nbml6ZWQsYy52YWx1ZSksTyhzbyhWLEUudGlja3MpKSl9fUUuZGF0YVswXSs9RltxXTticmVhaztjYXNlIE0ubm90ZU9mZjpFLmRhdGFbMF0rPUZbcV07YnJlYWs7Y2FzZSBNLnByb2dyYW1DaGFuZ2U6aWYoYS5oYXMocSkpe1goKTtjb250aW51ZX1icmVhaztjYXNlIE0uY29udHJvbGxlckNoYW5nZTp7bGV0IHo9RS5kYXRhWzBdO2lmKHQuZmluZChpQT0+aUEuY2hhbm5lbD09PXEmJno9PT1pQS5jb250cm9sbGVyTnVtYmVyKSE9PXZvaWQgMCl7WCgpO2NvbnRpbnVlfSh6PT09Uy5iYW5rU2VsZWN0fHx6PT09Uy5iYW5rU2VsZWN0TFNCKSYmYS5oYXMocSkmJlgoKX1icmVhaztjYXNlIE0uc3lzdGVtRXhjbHVzaXZlOmlmKGVzKEUpKXAoIiVjWEcgc3lzdGVtIG9uIGRldGVjdGVkIixjLmluZm8pLHI9InhnIixJPSEwO2Vsc2UgaWYoRS5kYXRhWzBdPT09NjcmJkUuZGF0YVsyXT09PTc2JiZFLmRhdGFbM109PT04JiZFLmRhdGFbNV09PT0zKWEuaGFzKEUuZGF0YVs0XStuQSkmJlgoKTtlbHNlIGlmKFdzKEUpKXAoIiVjR00yIHN5c3RlbSBvbiBkZXRlY3RlZCIsYy5pbmZvKSxyPSJnbTIiLEk9ITA7ZWxzZSBpZihacyhFKSl7ST0hMCxwKCIlY0dTIG9uIGRldGVjdGVkISIsYy5yZWNvZ25pemVkKTticmVha31lbHNlIHpzKEUpJiYocCgiJWNHTSBvbiBkZXRlY3RlZCwgcmVtb3ZpbmchIixjLmluZm8pLFgoKSxJPSExKX19aWYoIUkmJkEubGVuZ3RoPjApe2xldCBEPTA7ZS50cmFja3NbMF0uZXZlbnRzWzBdLnN0YXR1c0J5dGU9PT1NLnRyYWNrTmFtZSYmRCsrLGUudHJhY2tzWzBdLmFkZEV2ZW50KF9zKDApLEQpLHAoIiVjR1Mgb24gbm90IGRldGVjdGVkLiBBZGRpbmcgaXQuIixjLmluZm8pfWUuZmx1c2goKSxaKCl9ZnVuY3Rpb24gb28oZSxBKXtsZXQgdD1bXSxuPVtdLHM9W10sYT1bXTtBLmNoYW5uZWxTbmFwc2hvdHMuZm9yRWFjaCgocixJKT0+e2lmKHIuaXNNdXRlZCl7bi5wdXNoKEkpO3JldHVybn1sZXQgbz1yLmNoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdCtyLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUcmFuc3Bvc2VGaW5lXS8xMDA7byE9PTAmJnQucHVzaCh7Y2hhbm5lbDpJLGtleVNoaWZ0Om99KSxyLmxvY2tQcmVzZXQmJnMucHVzaCh7Y2hhbm5lbDpJLC4uLnIucGF0Y2h9KSxyLmxvY2tlZENvbnRyb2xsZXJzLmZvckVhY2goKGcsQik9PntpZighZ3x8Qj4xMjd8fEI9PT1TLmJhbmtTZWxlY3QpcmV0dXJuO2xldCBkPXIubWlkaUNvbnRyb2xsZXJzW0JdPj43O2EucHVzaCh7Y2hhbm5lbDpJLGNvbnRyb2xsZXJOdW1iZXI6Qixjb250cm9sbGVyVmFsdWU6ZH0pfSl9KSxlLm1vZGlmeShzLGEsbix0KX12YXIgbG49e1hNRkZpbGVUeXBlOjAsbm9kZU5hbWU6MSxub2RlSUROdW1iZXI6MixyZXNvdXJjZUZvcm1hdDozLGZpbGVuYW1lT25EaXNrOjQsZmlsZW5hbWVFeHRlbnNpb25PbkRpc2s6NSxtYWNPU0ZpbGVUeXBlQW5kQ3JlYXRvcjo2LG1pbWVUeXBlOjcsdGl0bGU6OCxjb3B5cmlnaHROb3RpY2U6OSxjb21tZW50OjEwLGF1dG9TdGFydDoxMSxwcmVsb2FkOjEyLGNvbnRlbnREZXNjcmlwdGlvbjoxMyxJRDNNZXRhZGF0YToxNH0sS2U9e2luTGluZVJlc291cmNlOjEsaW5GaWxlUmVzb3VyY2U6MixpbkZpbGVOb2RlOjMsZXh0ZXJuYWxGaWxlOjQsZXh0ZXJuYWxYTUY6NSxYTUZGaWxlVVJJYW5kTm9kZUlEOjZ9LGRuPXtTdGFuZGFyZE1JRElGaWxlOjAsU3RhbmRhcmRNSURJRmlsZVR5cGUxOjEsRExTMToyLERMUzI6MyxETFMyMjo0LG1vYmlsZURMUzo1LHVua25vd246LTEsZm9sZGVyOi0yfSxybz17c3RhbmRhcmQ6MCxNTUE6MSxyZWdpc3RlcmVkOjIsbm9uUmVnaXN0ZXJlZDozfSxNdD17bm9uZTowLE1NQVVucGFja2VyOjEscmVnaXN0ZXJlZDoyLG5vblJlZ2lzdGVyZWQ6M30saW89Y2xhc3MgJHN7bGVuZ3RoO2l0ZW1Db3VudDttZXRhZGF0YUxlbmd0aDttZXRhZGF0YT17fTtub2RlRGF0YTtpbm5lck5vZGVzPVtdO3BhY2tlZENvbnRlbnQ9ITE7bm9kZVVucGFja2Vycz1bXTtyZXNvdXJjZUZvcm1hdD0idW5rbm93biI7cmVmZXJlbmNlVHlwZUlEO2NvbnN0cnVjdG9yKEEpe2xldCB0PUEuY3VycmVudEluZGV4O3RoaXMubGVuZ3RoPXVBKEEpLHRoaXMuaXRlbUNvdW50PXVBKEEpO2xldCBuPXVBKEEpLHM9QS5jdXJyZW50SW5kZXgtdCxhPW4tcyxyPUEuc2xpY2UoQS5jdXJyZW50SW5kZXgsQS5jdXJyZW50SW5kZXgrYSk7QS5jdXJyZW50SW5kZXgrPWEsdGhpcy5tZXRhZGF0YUxlbmd0aD11QShyKTtsZXQgST1yLnNsaWNlKHIuY3VycmVudEluZGV4LHIuY3VycmVudEluZGV4K3RoaXMubWV0YWRhdGFMZW5ndGgpO3IuY3VycmVudEluZGV4Kz10aGlzLm1ldGFkYXRhTGVuZ3RoO2xldCBvLGc7Zm9yKDtJLmN1cnJlbnRJbmRleDxJLmxlbmd0aDspe2lmKElbSS5jdXJyZW50SW5kZXhdPT09MClJLmN1cnJlbnRJbmRleCsrLG89dUEoSSksT2JqZWN0LnZhbHVlcyhsbikuaW5jbHVkZXMobyk/Zz1PYmplY3Qua2V5cyhsbikuZmluZChtPT5sblttXT09PW8pPz8iIjoocChgVW5rbm93biBmaWVsZCBzcGVjaWZpZXI6ICR7b31gKSxnPWB1bmtub3duXyR7b31gKTtlbHNle2xldCBtPXVBKEkpO289aEEoSSxtKSxnPW99bGV0IFE9dUEoSSk7aWYoUT09PTApe2xldCBtPXVBKEkpLHk9SS5zbGljZShJLmN1cnJlbnRJbmRleCxJLmN1cnJlbnRJbmRleCttKTtJLmN1cnJlbnRJbmRleCs9bSx1QSh5KTw0P3RoaXMubWV0YWRhdGFbZ109aEEoeSxtLTEpOnRoaXMubWV0YWRhdGFbZ109eS5zbGljZSh5LmN1cnJlbnRJbmRleCl9ZWxzZSBwKGBJbnRlcm5hdGlvbmFsIGNvbnRlbnQ6ICR7UX1gKSxJLmN1cnJlbnRJbmRleCs9dUEoSSl9bGV0IEI9ci5jdXJyZW50SW5kZXgsZD11QShyKSxoPXIuc2xpY2Uoci5jdXJyZW50SW5kZXgsQitkKTtpZihyLmN1cnJlbnRJbmRleD1CK2QsZD4wKWZvcih0aGlzLnBhY2tlZENvbnRlbnQ9ITA7aC5jdXJyZW50SW5kZXg8ZDspe2xldCBDPXt9O3N3aXRjaChDLmlkPXVBKGgpLEMuaWQpe2Nhc2UgTXQubm9uUmVnaXN0ZXJlZDpjYXNlIE10LnJlZ2lzdGVyZWQ6dGhyb3cgWigpLG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdW5wYWNrZXIgSUQ6ICR7Qy5pZH1gKTtkZWZhdWx0OnRocm93IFooKSxuZXcgRXJyb3IoYFVua25vd24gdW5wYWNrZXIgSUQ6ICR7Qy5pZH1gKTtjYXNlIE10Lm5vbmU6Qy5zdGFuZGFyZElEPXVBKGgpO2JyZWFrO2Nhc2UgTXQuTU1BVW5wYWNrZXI6e2xldCBRPWhbaC5jdXJyZW50SW5kZXgrK107UT09PTAmJihRPDw9OCxRfD1oW2guY3VycmVudEluZGV4KytdLFE8PD04LFF8PWhbaC5jdXJyZW50SW5kZXgrK10pO2xldCBtPXVBKGgpO0MubWFudWZhY3R1cmVySUQ9USxDLm1hbnVmYWN0dXJlckludGVybmFsSUQ9bX1icmVha31DLmRlY29kZWRTaXplPXVBKGgpLHRoaXMubm9kZVVucGFja2Vycy5wdXNoKEMpfXN3aXRjaChBLmN1cnJlbnRJbmRleD10K24sdGhpcy5yZWZlcmVuY2VUeXBlSUQ9dUEoQSksdGhpcy5ub2RlRGF0YT1BLnNsaWNlKEEuY3VycmVudEluZGV4LHQrdGhpcy5sZW5ndGgpLEEuY3VycmVudEluZGV4PXQrdGhpcy5sZW5ndGgsdGhpcy5yZWZlcmVuY2VUeXBlSUQpe2Nhc2UgS2UuaW5MaW5lUmVzb3VyY2U6YnJlYWs7Y2FzZSBLZS5leHRlcm5hbFhNRjpjYXNlIEtlLmluRmlsZU5vZGU6Y2FzZSBLZS5YTUZGaWxlVVJJYW5kTm9kZUlEOmNhc2UgS2UuZXh0ZXJuYWxGaWxlOmNhc2UgS2UuaW5GaWxlUmVzb3VyY2U6dGhyb3cgWigpLG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcmVmZXJlbmNlIHR5cGU6ICR7dGhpcy5yZWZlcmVuY2VUeXBlSUR9YCk7ZGVmYXVsdDp0aHJvdyBaKCksbmV3IEVycm9yKGBVbmtub3duIHJlZmVyZW5jZSB0eXBlOiAke3RoaXMucmVmZXJlbmNlVHlwZUlEfWApfWlmKHRoaXMuaXNGaWxlKXtpZih0aGlzLnBhY2tlZENvbnRlbnQpe2xldCBRPXRoaXMubm9kZURhdGEuc2xpY2UoMix0aGlzLm5vZGVEYXRhLmxlbmd0aCk7cChgJWNQYWNrZWQgY29udGVudC4gQXR0ZW1wdGluZyB0byBkZWZsYXRlLiBUYXJnZXQgc2l6ZTogJWMke3RoaXMubm9kZVVucGFja2Vyc1swXS5kZWNvZGVkU2l6ZX1gLGMud2FybixjLnZhbHVlKTt0cnl7dGhpcy5ub2RlRGF0YT1uZXcgWShQcyhRKS5idWZmZXIpfWNhdGNoKG0pe2lmKFooKSxtIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgbmV3IEVycm9yKGBFcnJvciB1bnBhY2tpbmcgWE1GIGZpbGUgY29udGVudHM6ICR7bS5tZXNzYWdlfS5gKX19bGV0IEM9dGhpcy5tZXRhZGF0YS5yZXNvdXJjZUZvcm1hdDtpZihDPT09dm9pZCAwKXNBKCJObyByZXNvdXJjZSBmb3JtYXQgZm9yIHRoaXMgZmlsZSBub2RlISIpO2Vsc2V7Q1swXSE9PXJvLnN0YW5kYXJkJiYocChgTm9uLXN0YW5kYXJkIGZvcm1hdFR5cGVJRDogJHtDLnRvU3RyaW5nKCl9YCksdGhpcy5yZXNvdXJjZUZvcm1hdD1DLnRvU3RyaW5nKCkpO2xldCBtPUNbMV07T2JqZWN0LnZhbHVlcyhkbikuaW5jbHVkZXMobSk/dGhpcy5yZXNvdXJjZUZvcm1hdD1PYmplY3Qua2V5cyhkbikuZmluZCh5PT5kblt5XT09PW0pOnAoYFVucmVjb2duaXplZCByZXNvdXJjZSBmb3JtYXQ6ICR7bX1gKX19ZWxzZSBmb3IodGhpcy5yZXNvdXJjZUZvcm1hdD0iZm9sZGVyIjt0aGlzLm5vZGVEYXRhLmN1cnJlbnRJbmRleDx0aGlzLm5vZGVEYXRhLmxlbmd0aDspe2xldCBDPXRoaXMubm9kZURhdGEuY3VycmVudEluZGV4LFE9dUEodGhpcy5ub2RlRGF0YSksbT10aGlzLm5vZGVEYXRhLnNsaWNlKEMsQytRKTt0aGlzLm5vZGVEYXRhLmN1cnJlbnRJbmRleD1DK1EsdGhpcy5pbm5lck5vZGVzLnB1c2gobmV3ICRzKG0pKX19Z2V0IGlzRmlsZSgpe3JldHVybiB0aGlzLml0ZW1Db3VudD09PTB9fTtmdW5jdGlvbiBJbyhlLEEpe2UuYmFua09mZnNldD0wO2xldCB0PWhBKEEsNCk7aWYodCE9PSJYTUZfIil0aHJvdyBaKCksbmV3IFN5bnRheEVycm9yKGBJbnZhbGlkIFhNRiBIZWFkZXIhIEV4cGVjdGVkICJfWE1GIiwgZ290ICIke3R9ImApO09BKCIlY1BhcnNpbmcgWE1GIGZpbGUuLi4iLGMuaW5mbyk7bGV0IG49aEEoQSw0KTtpZihwKGAlY1hNRiB2ZXJzaW9uOiAlYyR7bn1gLGMuaW5mbyxjLnJlY29nbml6ZWQpLG49PT0iMi4wMCIpe2xldCBvPVhlKEEsNCksZz1YZShBLDQpO3AoYCVjRmlsZSBUeXBlIElEOiAlYyR7b30lYywgRmlsZSBUeXBlIFJldmlzaW9uIElEOiAlYyR7Z31gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCl9dUEoQSk7bGV0IHM9dUEoQSk7QS5jdXJyZW50SW5kZXgrPXMsQS5jdXJyZW50SW5kZXg9dUEoQSk7bGV0IGE9bmV3IGlvKEEpLHIsST1vPT57bGV0IGc9KEIsZCk9PntvLm1ldGFkYXRhW0JdIT09dm9pZCAwJiZ0eXBlb2Ygby5tZXRhZGF0YVtCXT09InN0cmluZyImJihlLnJtaWRpSW5mb1tkXT1uZShvLm1ldGFkYXRhW0JdKSl9O2lmKGcoIm5vZGVOYW1lIiwibmFtZSIpLGcoInRpdGxlIiwibmFtZSIpLGcoImNvcHlyaWdodE5vdGljZSIsImNvcHlyaWdodCIpLGcoImNvbW1lbnQiLCJjb21tZW50Iiksby5pc0ZpbGUpc3dpdGNoKG8ucmVzb3VyY2VGb3JtYXQpe2RlZmF1bHQ6cmV0dXJuO2Nhc2UiRExTMSI6Y2FzZSJETFMyIjpjYXNlIkRMUzIyIjpjYXNlIm1vYmlsZURMUyI6cCgiJWNGb3VuZCBlbWJlZGRlZCBETFMhIixjLnJlY29nbml6ZWQpLGUuZW1iZWRkZWRTb3VuZEJhbms9by5ub2RlRGF0YS5idWZmZXI7YnJlYWs7Y2FzZSJTdGFuZGFyZE1JRElGaWxlIjpjYXNlIlN0YW5kYXJkTUlESUZpbGVUeXBlMSI6cCgiJWNGb3VuZCBlbWJlZGRlZCBNSURJISIsYy5yZWNvZ25pemVkKSxyPW8ubm9kZURhdGE7YnJlYWt9ZWxzZSBmb3IobGV0IEIgb2Ygby5pbm5lck5vZGVzKUkoQil9O2lmKEkoYSksWigpLCFyKXRocm93IG5ldyBFcnJvcigiTm8gTUlESSBkYXRhIGluIHRoZSBYTUYgZmlsZSEiKTtyZXR1cm4gcn12YXIgS3Q9Y2xhc3MgQWF7bmFtZT0iIjtwb3J0PTA7Y2hhbm5lbHM9bmV3IFNldDtldmVudHM9W107c3RhdGljIGNvcHlGcm9tKEEpe2xldCB0PW5ldyBBYTtyZXR1cm4gdC5jb3B5RnJvbShBKSx0fWNvcHlGcm9tKEEpe3RoaXMubmFtZT1BLm5hbWUsdGhpcy5wb3J0PUEucG9ydCx0aGlzLmNoYW5uZWxzPW5ldyBTZXQoQS5jaGFubmVscyksdGhpcy5ldmVudHM9QS5ldmVudHMubWFwKHQ9Pm5ldyBaQSh0LnRpY2tzLHQuc3RhdHVzQnl0ZSxuZXcgWSh0LmRhdGEpKSl9YWRkRXZlbnQoQSx0KXt0aGlzLmV2ZW50cy5zcGxpY2UodCwwLEEpfWRlbGV0ZUV2ZW50KEEpe3RoaXMuZXZlbnRzLnNwbGljZShBLDEpfXB1c2hFdmVudChBKXt0aGlzLmV2ZW50cy5wdXNoKEEpfX07ZnVuY3Rpb24gcHMoZSxBLHQpe2JBKCIlY1BhcnNpbmcgTUlESSBGaWxlLi4uIixjLmluZm8pLGUuZmlsZU5hbWU9dDtsZXQgbj1uZXcgWShBKSxzPW4sYT1nPT57bGV0IEI9aEEoZyw0KSxkPVhlKGcsNCksaD1uZXcgWShkKSxDPXt0eXBlOkIsc2l6ZTpkLGRhdGE6aH0sUT1nLnNsaWNlKGcuY3VycmVudEluZGV4LGcuY3VycmVudEluZGV4K0Muc2l6ZSk7cmV0dXJuIEMuZGF0YS5zZXQoUSwwKSxnLmN1cnJlbnRJbmRleCs9Qy5zaXplLEN9LHI9ZWUobiw0KTtpZihyPT09IlJJRkYiKXtuLmN1cnJlbnRJbmRleCs9ODtsZXQgZz1oQShuLDQpO2lmKGchPT0iUk1JRCIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBSTUlESSBIZWFkZXIhIEV4cGVjdGVkICJSTUlEIiwgZ290ICIke2d9ImApO2xldCBCPXJBKG4pO2lmKEIuaGVhZGVyIT09ImRhdGEiKXRocm93IFooKSxuZXcgU3ludGF4RXJyb3IoYEludmFsaWQgUk1JREkgQ2h1bmsgaGVhZGVyISBFeHBlY3RlZCAiZGF0YSIsIGdvdCAiJHtnfSJgKTtzPUIuZGF0YTtsZXQgZD0hMSxoPSExO2Zvcig7bi5jdXJyZW50SW5kZXg8PW4ubGVuZ3RoOyl7bGV0IEM9bi5jdXJyZW50SW5kZXgsUT1yQShuLCEwKTtpZihRLmhlYWRlcj09PSJSSUZGIil7bGV0IG09aEEoUS5kYXRhLDQpLnRvTG93ZXJDYXNlKCk7bT09PSJzZmJrInx8bT09PSJzZnBrInx8bT09PSJkbHMgIj8ocCgiJWNGb3VuZCBlbWJlZGRlZCBzb3VuZGJhbmshIixjLnJlY29nbml6ZWQpLGUuZW1iZWRkZWRTb3VuZEJhbms9bi5zbGljZShDLEMrUS5zaXplKS5idWZmZXIpOnNBKGBVbmtub3duIFJJRkYgY2h1bms6ICIke219ImApLG09PT0iZGxzICI/ZS5pc0RMU1JNSURJPSEwOmQ9ITB9ZWxzZSBpZihRLmhlYWRlcj09PSJMSVNUIiYmaEEoUS5kYXRhLDQpPT09IklORk8iKWZvcihwKCIlY0ZvdW5kIFJNSURJIElORk8gY2h1bmshIixjLnJlY29nbml6ZWQpO1EuZGF0YS5jdXJyZW50SW5kZXg8PVEuc2l6ZTspe2xldCB5PXJBKFEuZGF0YSwhMCksRj15LmhlYWRlcixrPXkuZGF0YTtzd2l0Y2goRil7ZGVmYXVsdDpzQShgVW5rbm93biBSTUlESSBJbmZvOiAke0Z9YCk7YnJlYWs7Y2FzZSJJTkFNIjplLnJtaWRpSW5mby5uYW1lPWs7YnJlYWs7Y2FzZSJJQUxCIjpjYXNlIklQUkQiOmUucm1pZGlJbmZvLmFsYnVtPWs7YnJlYWs7Y2FzZSJJQ1JUIjpjYXNlIklDUkQiOmUucm1pZGlJbmZvLmNyZWF0aW9uRGF0ZT1rO2JyZWFrO2Nhc2UiSUFSVCI6ZS5ybWlkaUluZm8uYXJ0aXN0PWs7YnJlYWs7Y2FzZSJJR05SIjplLnJtaWRpSW5mby5nZW5yZT1rO2JyZWFrO2Nhc2UiSVBJQyI6ZS5ybWlkaUluZm8ucGljdHVyZT1rO2JyZWFrO2Nhc2UiSUNPUCI6ZS5ybWlkaUluZm8uY29weXJpZ2h0PWs7YnJlYWs7Y2FzZSJJQ01UIjplLnJtaWRpSW5mby5jb21tZW50PWs7YnJlYWs7Y2FzZSJJRU5HIjplLnJtaWRpSW5mby5lbmdpbmVlcj1rO2JyZWFrO2Nhc2UiSVNGVCI6ZS5ybWlkaUluZm8uc29mdHdhcmU9azticmVhaztjYXNlIklTQkoiOmUucm1pZGlJbmZvLnN1YmplY3Q9azticmVhaztjYXNlIklFTkMiOmUucm1pZGlJbmZvLmluZm9FbmNvZGluZz1rO2JyZWFrO2Nhc2UiTUVOQyI6ZS5ybWlkaUluZm8ubWlkaUVuY29kaW5nPWs7YnJlYWs7Y2FzZSJEQk5LIjplLmJhbmtPZmZzZXQ9eHMoaywyKSxoPSEwO2JyZWFrfX19ZCYmIWgmJihlLmJhbmtPZmZzZXQ9MSksZS5pc0RMU1JNSURJJiYoZS5iYW5rT2Zmc2V0PTApLGUuZW1iZWRkZWRTb3VuZEJhbms9PT12b2lkIDAmJihlLmJhbmtPZmZzZXQ9MCl9ZWxzZSByPT09IlhNRl8iP3M9SW8oZSxuKTpzPW47bGV0IEk9YShzKTtpZihJLnR5cGUhPT0iTVRoZCIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBNSURJIEhlYWRlciEgRXhwZWN0ZWQgIk1UaGQiLCBnb3QgIiR7SS50eXBlfSJgKTtpZihJLnNpemUhPT02KXRocm93IFooKSxuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBNSURJIGhlYWRlciBjaHVuayBzaXplISBFeHBlY3RlZCA2LCBnb3QgJHtJLnNpemV9YCk7ZS5mb3JtYXQ9WGUoSS5kYXRhLDIpO2xldCBvPVhlKEkuZGF0YSwyKTtlLnRpbWVEaXZpc2lvbj1YZShJLmRhdGEsMik7Zm9yKGxldCBnPTA7ZzxvO2crKyl7bGV0IEI9bmV3IEt0LGQ9YShzKTtpZihkLnR5cGUhPT0iTVRyayIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCB0cmFjayBoZWFkZXIhIEV4cGVjdGVkICJNVHJrIiBnb3QgIiR7ZC50eXBlfSJgKTtsZXQgaCxDPTA7Zm9yKGUuZm9ybWF0PT09MiYmZz4wJiYoQys9ZS50cmFja3NbZy0xXS5ldmVudHNbZS50cmFja3NbZy0xXS5ldmVudHMubGVuZ3RoLTFdLnRpY2tzKTtkLmRhdGEuY3VycmVudEluZGV4PGQuc2l6ZTspe0MrPXVBKGQuZGF0YSk7bGV0IFE9ZC5kYXRhW2QuZGF0YS5jdXJyZW50SW5kZXhdLG07aWYoaCE9PXZvaWQgMCYmUTwxMjgpbT1oO2Vsc2V7aWYoUTwxMjgpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgVW5leHBlY3RlZCBieXRlIHdpdGggbm8gcnVubmluZyBieXRlLiAoJHtRfSlgKTttPWQuZGF0YVtkLmRhdGEuY3VycmVudEluZGV4KytdfWxldCB5PUthKG0pLEY7c3dpdGNoKHkpe2Nhc2UtMTpGPTA7YnJlYWs7Y2FzZS0yOm09ZC5kYXRhW2QuZGF0YS5jdXJyZW50SW5kZXgrK10sRj11QShkLmRhdGEpO2JyZWFrO2Nhc2UtMzpGPXVBKGQuZGF0YSk7YnJlYWs7ZGVmYXVsdDpGPU9hW20+PjRdLGg9bTticmVha31sZXQgaz1uZXcgWShGKTtrLnNldChkLmRhdGEuc2xpY2UoZC5kYXRhLmN1cnJlbnRJbmRleCxkLmRhdGEuY3VycmVudEluZGV4K0YpLDApO2xldCBEPW5ldyBaQShDLG0sayk7Qi5wdXNoRXZlbnQoRCksZC5kYXRhLmN1cnJlbnRJbmRleCs9Rn1lLnRyYWNrcy5wdXNoKEIpLHAoYCVjUGFyc2VkICVjJHtlLnRyYWNrcy5sZW5ndGh9JWMgLyAlYyR7ZS50cmFja3MubGVuZ3RofWAsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpfXAoIiVjQWxsIHRyYWNrcyBwYXJzZWQgY29ycmVjdGx5ISIsYy5yZWNvZ25pemVkKSxlLmZsdXNoKCExKSxaKCkscChgJWNNSURJIGZpbGUgcGFyc2VkLiBUb3RhbCB0aWNrIHRpbWU6ICVjJHtlLmxhc3RWb2ljZUV2ZW50VGlja30lYywgdG90YWwgc2Vjb25kcyB0aW1lOiAlYyR7ZS5kdXJhdGlvbn1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCl9dmFyIGdvPW5ldyBNYXAoW1siZG9taW5nbyIsIlN1bmRheSJdLFsic2VndW5kYS1mZWlyYSIsIk1vbmRheSJdLFsidGVyXHhFN2EtZmVpcmEiLCJUdWVzZGF5Il0sWyJxdWFydGEtZmVpcmEiLCJXZWRuZXNkYXkiXSxbInF1aW50YS1mZWlyYSIsIlRodXJzZGF5Il0sWyJzZXh0YS1mZWlyYSIsIkZyaWRheSJdLFsic1x4RTFiYWRvIiwiU2F0dXJkYXkiXSxbImphbmVpcm8iLCJKYW51YXJ5Il0sWyJmZXZlcmVpcm8iLCJGZWJydWFyeSJdLFsibWFyXHhFN28iLCJNYXJjaCJdLFsiYWJyaWwiLCJBcHJpbCJdLFsibWFpbyIsIk1heSJdLFsianVuaG8iLCJKdW5lIl0sWyJqdWxobyIsIkp1bHkiXSxbImFnb3N0byIsIkF1Z3VzdCJdLFsic2V0ZW1icm8iLCJTZXB0ZW1iZXIiXSxbIm91dHVicm8iLCJPY3RvYmVyIl0sWyJub3ZlbWJybyIsIk5vdmVtYmVyIl0sWyJkZXplbWJybyIsIkRlY2VtYmVyIl1dKSxjbz1bZ29dO2Z1bmN0aW9uIEVvKGUpe2ZvcihsZXQgQSBvZiBjbyl7bGV0IHQ9ZTtBLmZvckVhY2goKHMsYSk9PntsZXQgcj1uZXcgUmVnRXhwKGEsImdpIik7dD10LnJlcGxhY2UocixzKX0pO2xldCBuPW5ldyBEYXRlKHQpO2lmKCFpc05hTihuLmdldFRpbWUoKSkpcmV0dXJuIG59fWZ1bmN0aW9uIEJvKGUpe2xldCBBPS9eKFxkezJ9KVwuKFxkezJ9KVwuKFxkezR9KSQvLmV4ZWMoZSk7aWYoQSl7bGV0IHQ9cGFyc2VJbnQoQVsxXSksbj1wYXJzZUludChBWzJdKS0xLHM9cGFyc2VJbnQoQVszXSksYT1uZXcgRGF0ZShzLG4sdCk7aWYoIWlzTmFOKGEuZ2V0VGltZSgpKSlyZXR1cm4gYX19ZnVuY3Rpb24gQ28oZSl7bGV0IEE9L14oXGR7MSwyfSlcc3sxLDJ9KFxkezEsMn0pXHN7MSwyfShcZHsyfSkkLy5leGVjKGUpO2lmKEEpe2xldCB0PUFbMV0sbj0ocGFyc2VJbnQoQVsyXSkrMSkudG9TdHJpbmcoKSxzPUFbM10sYT1uZXcgRGF0ZShgJHtufS8ke3R9LyR7c31gKTtpZighaXNOYU4oYS5nZXRUaW1lKCkpKXJldHVybiBhfX1mdW5jdGlvbiBobyhlKXtsZXQgdD0vXGJcZHs0fVxiLy5leGVjKGUpO3JldHVybiB0P25ldyBEYXRlKHRbMF0pOnZvaWQgMH1mdW5jdGlvbiB0cyhlKXtpZihlPWUudHJpbSgpLGUubGVuZ3RoPDEpcmV0dXJuIG5ldyBEYXRlO2xldCBBPWUucmVwbGFjZSgvXGIoXGQrKShzdHxuZHxyZHx0aClcYi9nLCIkMSIpLHQ9bmV3IERhdGUoQSk7aWYoaXNOYU4odC5nZXRUaW1lKCkpKXtsZXQgbj1FbyhlKTtpZihuKXJldHVybiBuO2xldCBzPUJvKGUpO2lmKHMpcmV0dXJuIHM7bGV0IGE9Q28oZSk7aWYoYSlyZXR1cm4gYTtsZXQgcj1obyhlKTtyZXR1cm4gcnx8KHNBKGBJbnZhbGlkIGRhdGU6ICIke2V9Ii4gUmVwbGFjaW5nIHdpdGggdGhlIGN1cnJlbnQgZGF0ZSFgKSxuZXcgRGF0ZSl9cmV0dXJuIHR9dmFyIExlPWNsYXNzIEx0e3RyYWNrcz1bXTt0aW1lRGl2aXNpb249MDtkdXJhdGlvbj0wO3RlbXBvQ2hhbmdlcz1be3RpY2tzOjAsdGVtcG86MTIwfV07ZXh0cmFNZXRhZGF0YT1bXTtseXJpY3M9W107Zmlyc3ROb3RlT249MDtrZXlSYW5nZT17bWluOjAsbWF4OjEyN307bGFzdFZvaWNlRXZlbnRUaWNrPTA7cG9ydENoYW5uZWxPZmZzZXRNYXA9WzBdO2xvb3A9e3N0YXJ0OjAsZW5kOjB9O2ZpbGVOYW1lO2Zvcm1hdD0wO3JtaWRpSW5mbz17fTtiYW5rT2Zmc2V0PTA7aXNLYXJhb2tlRmlsZT0hMTtpc011bHRpUG9ydD0hMTtpc0RMU1JNSURJPSExO2VtYmVkZGVkU291bmRCYW5rO2JpbmFyeU5hbWU7Z2V0IGluZm9FbmNvZGluZygpe2xldCBBPXRoaXMucm1pZGlJbmZvLmluZm9FbmNvZGluZztpZighQSlyZXR1cm47bGV0IHQ9QS5ieXRlTGVuZ3RoO3JldHVybiBBW0EuYnl0ZUxlbmd0aC0xXT09PTAmJnQtLSxlZShBLHQpfXN0YXRpYyBmcm9tQXJyYXlCdWZmZXIoQSx0PSIiKXtsZXQgbj1uZXcgTHQ7cmV0dXJuIHBzKG4sQSx0KSxufXN0YXRpYyBhc3luYyBmcm9tRmlsZShBKXtsZXQgdD1uZXcgTHQ7cmV0dXJuIHBzKHQsYXdhaXQgQS5hcnJheUJ1ZmZlcigpLEEubmFtZSksdH1zdGF0aWMgY29weUZyb20oQSl7bGV0IHQ9bmV3IEx0O3JldHVybiB0LmNvcHlGcm9tKEEpLHR9Y29weUZyb20oQSl7dGhpcy5jb3B5TWV0YWRhdGFGcm9tKEEpLHRoaXMuZW1iZWRkZWRTb3VuZEJhbms9QT8uZW1iZWRkZWRTb3VuZEJhbms/LnNsaWNlKDApPz92b2lkIDAsdGhpcy50cmFja3M9QS50cmFja3MubWFwKHQ9Pkt0LmNvcHlGcm9tKHQpKX1taWRpVGlja3NUb1NlY29uZHMoQSl7bGV0IHQ9MDtmb3IoO0E+MDspe2xldCBuPXRoaXMudGVtcG9DaGFuZ2VzLmZpbmQoYT0+YS50aWNrczxBKTtpZighbilyZXR1cm4gdDtsZXQgcz1BLW4udGlja3M7dCs9cyo2MC8obi50ZW1wbyp0aGlzLnRpbWVEaXZpc2lvbiksQS09c31yZXR1cm4gdH1nZXRVc2VkUHJvZ3JhbXNBbmRLZXlzKEEpe3JldHVybiB0byh0aGlzLEEpfWZsdXNoKEE9ITApe2lmKEEpZm9yKGxldCB0IG9mIHRoaXMudHJhY2tzKXQuZXZlbnRzLnNvcnQoKG4scyk9Pm4udGlja3Mtcy50aWNrcyk7dGhpcy5wYXJzZUludGVybmFsKCl9Z2V0Tm90ZVRpbWVzKEE9MCl7cmV0dXJuIG5vKHRoaXMsQSl9d3JpdGVNSURJKCl7cmV0dXJuIFZhKHRoaXMpfXdyaXRlUk1JREkoQSx0PVNzKXtyZXR1cm4gZW8odGhpcyxBLCRuKHQsU3MpKX1tb2RpZnkoQT1bXSx0PVtdLG49W10scz1bXSl7YW8odGhpcyxBLHQsbixzKX1hcHBseVNuYXBzaG90KEEpe29vKHRoaXMsQSl9Z2V0TmFtZShBPSJTaGlmdF9KSVMiKXtsZXQgdD0iIixuPXRoaXMuZ2V0Uk1JREluZm8oIm5hbWUiKTtpZihuKXJldHVybiBuLnRyaW0oKTtpZih0aGlzLmJpbmFyeU5hbWUpe0E9dGhpcy5nZXRSTUlESW5mbygibWlkaUVuY29kaW5nIik/P0E7dHJ5e3Q9bmV3IFRleHREZWNvZGVyKEEpLmRlY29kZSh0aGlzLmJpbmFyeU5hbWUpLnRyaW0oKX1jYXRjaChzKXtzQShgRmFpbGVkIHRvIGRlY29kZSBNSURJIG5hbWU6ICR7c31gKX19cmV0dXJuIHR8fHRoaXMuZmlsZU5hbWV9Z2V0RXh0cmFNZXRhZGF0YShBPSJTaGlmdF9KSVMiKXtBPXRoaXMuaW5mb0VuY29kaW5nPz9BO2xldCB0PW5ldyBUZXh0RGVjb2RlcihBKTtyZXR1cm4gdGhpcy5leHRyYU1ldGFkYXRhLm1hcChuPT50LmRlY29kZShuLmRhdGEpLnJlcGxhY2UoL0BUfEBBL2csIiIpLnRyaW0oKSl9c2V0Uk1JREluZm8oQSx0KXtpZih0aGlzLnJtaWRpSW5mby5pbmZvRW5jb2Rpbmc9bmUoInV0Zi04IiwhMCksQT09PSJwaWN0dXJlIil0aGlzLnJtaWRpSW5mby5waWN0dXJlPW5ldyBVaW50OEFycmF5KHQpO2Vsc2UgaWYoQT09PSJjcmVhdGlvbkRhdGUiKXRoaXMucm1pZGlJbmZvLmNyZWF0aW9uRGF0ZT1uZSh0LnRvSVNPU3RyaW5nKCksITApO2Vsc2V7bGV0IG49bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpO3RoaXMucm1pZGlJbmZvW0FdPW5ldyBVaW50OEFycmF5KFsuLi5uLDBdKX19Z2V0Uk1JREluZm8oQSl7aWYoIXRoaXMucm1pZGlJbmZvW0FdKXJldHVybjtsZXQgdD10aGlzLmluZm9FbmNvZGluZz8/IlVURi04IjtpZihBPT09InBpY3R1cmUiKXJldHVybiB0aGlzLnJtaWRpSW5mb1tBXS5idWZmZXI7aWYoQT09PSJjcmVhdGlvbkRhdGUiKXJldHVybiB0cyhlZSh0aGlzLnJtaWRpSW5mb1tBXSkpO3RyeXtsZXQgbj1uZXcgVGV4dERlY29kZXIodCkscz10aGlzLnJtaWRpSW5mb1tBXTtyZXR1cm4gc1tzLmxlbmd0aC0xXT09PTAmJihzPXM/LnNsaWNlKDAscy5sZW5ndGgtMSkpLG4uZGVjb2RlKHMuYnVmZmVyKS50cmltKCl9Y2F0Y2gobil7c0EoYEZhaWxlZCB0byBkZWNvZGUgJHtBfSBuYW1lOiAke259YCk7cmV0dXJufX1jb3B5TWV0YWRhdGFGcm9tKEEpe3RoaXMuZmlsZU5hbWU9QS5maWxlTmFtZSx0aGlzLnRpbWVEaXZpc2lvbj1BLnRpbWVEaXZpc2lvbix0aGlzLmR1cmF0aW9uPUEuZHVyYXRpb24sdGhpcy5maXJzdE5vdGVPbj1BLmZpcnN0Tm90ZU9uLHRoaXMubGFzdFZvaWNlRXZlbnRUaWNrPUEubGFzdFZvaWNlRXZlbnRUaWNrLHRoaXMuZm9ybWF0PUEuZm9ybWF0LHRoaXMuYmFua09mZnNldD1BLmJhbmtPZmZzZXQsdGhpcy5pc0thcmFva2VGaWxlPUEuaXNLYXJhb2tlRmlsZSx0aGlzLmlzTXVsdGlQb3J0PUEuaXNNdWx0aVBvcnQsdGhpcy5pc0RMU1JNSURJPUEuaXNETFNSTUlESSx0aGlzLmlzRExTUk1JREk9QS5pc0RMU1JNSURJLHRoaXMudGVtcG9DaGFuZ2VzPVsuLi5BLnRlbXBvQ2hhbmdlc10sdGhpcy5leHRyYU1ldGFkYXRhPUEuZXh0cmFNZXRhZGF0YS5tYXAodD0+bmV3IFpBKHQudGlja3MsdC5zdGF0dXNCeXRlLG5ldyBZKHQuZGF0YSkpKSx0aGlzLmx5cmljcz1BLmx5cmljcy5tYXAodD0+bmV3IFpBKHQudGlja3MsdC5zdGF0dXNCeXRlLG5ldyBZKHQuZGF0YSkpKSx0aGlzLnBvcnRDaGFubmVsT2Zmc2V0TWFwPVsuLi5BLnBvcnRDaGFubmVsT2Zmc2V0TWFwXSx0aGlzLmJpbmFyeU5hbWU9QT8uYmluYXJ5TmFtZT8uc2xpY2UoKSx0aGlzLmxvb3A9ey4uLkEubG9vcH0sdGhpcy5rZXlSYW5nZT17Li4uQS5rZXlSYW5nZX0sdGhpcy5ybWlkaUluZm89e30sT2JqZWN0LmVudHJpZXMoQS5ybWlkaUluZm8pLmZvckVhY2godD0+e2xldCBuPXRbMF0scz10WzFdO3RoaXMucm1pZGlJbmZvW25dPXMuc2xpY2UoKX0pfXBhcnNlSW50ZXJuYWwoKXtPQSgiJWNJbnRlcnByZXRpbmcgTUlESSBldmVudHMuLi4iLGMuaW5mbyk7bGV0IEE9ITE7dGhpcy5rZXlSYW5nZT17bWF4OjAsbWluOjEyN30sdGhpcy5leHRyYU1ldGFkYXRhPVtdO2xldCB0PSExO3R5cGVvZiB0aGlzLnJtaWRpSW5mby5uYW1lPCJ1IiYmKHQ9ITApO2xldCBuPW51bGwscz1udWxsO2ZvcihsZXQgbyBvZiB0aGlzLnRyYWNrcyl7bGV0IGc9bmV3IFNldCxCPSExO2ZvcihsZXQgaD0wO2g8by5ldmVudHMubGVuZ3RoO2grKyl7bGV0IEM9by5ldmVudHNbaF07aWYoQy5zdGF0dXNCeXRlPj0xMjgmJkMuc3RhdHVzQnl0ZTwyNDApe0I9ITA7Zm9yKGxldCBtPTA7bTxDLmRhdGEubGVuZ3RoO20rKylDLmRhdGFbbV09TWF0aC5taW4oMTI3LEMuZGF0YVttXSk7c3dpdGNoKEMudGlja3M+dGhpcy5sYXN0Vm9pY2VFdmVudFRpY2smJih0aGlzLmxhc3RWb2ljZUV2ZW50VGljaz1DLnRpY2tzKSxDLnN0YXR1c0J5dGUmMjQwKXtjYXNlIE0uY29udHJvbGxlckNoYW5nZTpzd2l0Y2goQy5kYXRhWzBdKXtjYXNlIDI6Y2FzZSAxMTY6bj1DLnRpY2tzO2JyZWFrO2Nhc2UgNDpjYXNlIDExNzpzPT09bnVsbD9zPUMudGlja3M6cz0wO2JyZWFrO2Nhc2UgMDp0aGlzLmlzRExTUk1JREkmJkMuZGF0YVsxXSE9PTAmJkMuZGF0YVsxXSE9PTEyNyYmKHAoIiVjRExTIFJNSURJIHdpdGggb2Zmc2V0IDEgZGV0ZWN0ZWQhIixjLnJlY29nbml6ZWQpLHRoaXMuYmFua09mZnNldD0xKX1icmVhaztjYXNlIE0ubm90ZU9uOntnLmFkZChDLnN0YXR1c0J5dGUmMTUpO2xldCBtPUMuZGF0YVswXTt0aGlzLmtleVJhbmdlLm1pbj1NYXRoLm1pbih0aGlzLmtleVJhbmdlLm1pbixtKSx0aGlzLmtleVJhbmdlLm1heD1NYXRoLm1heCh0aGlzLmtleVJhbmdlLm1heCxtKTticmVha319fWxldCBRPWVlKEMuZGF0YSk7c3dpdGNoKEMuc3RhdHVzQnl0ZSl7Y2FzZSBNLmVuZE9mVHJhY2s6aCE9PW8uZXZlbnRzLmxlbmd0aC0xJiYoaC0tLG8uZGVsZXRlRXZlbnQoaCksc0EoIlVuZXhwZWN0ZWQgRW5kT2ZUcmFjay4gUmVtb3ZpbmchIikpO2JyZWFrO2Nhc2UgTS5zZXRUZW1wbzp0aGlzLnRlbXBvQ2hhbmdlcy5wdXNoKHt0aWNrczpDLnRpY2tzLHRlbXBvOjZlNy9RdChDLmRhdGEsMyl9KTticmVhaztjYXNlIE0ubWFya2VyOnN3aXRjaChRLnRyaW0oKS50b0xvd2VyQ2FzZSgpKXtkZWZhdWx0OmJyZWFrO2Nhc2Uic3RhcnQiOmNhc2UibG9vcHN0YXJ0IjpuPUMudGlja3M7YnJlYWs7Y2FzZSJsb29wZW5kIjpzPUMudGlja3N9YnJlYWs7Y2FzZSBNLmNvcHlyaWdodDp0aGlzLmV4dHJhTWV0YWRhdGEucHVzaChDKTticmVhaztjYXNlIE0ubHlyaWM6US50cmltKCkuc3RhcnRzV2l0aCgiQEtNSURJIEtBUkFPS0UgRklMRSIpJiYodGhpcy5pc0thcmFva2VGaWxlPSEwLHAoIiVjS2FyYW9rZSBNSURJIGRldGVjdGVkISIsYy5yZWNvZ25pemVkKSksdGhpcy5pc0thcmFva2VGaWxlP0Muc3RhdHVzQnl0ZT1NLnRleHQ6dGhpcy5seXJpY3MucHVzaChDKTtjYXNlIE0udGV4dDp7bGV0IG09US50cmltKCk7bS5zdGFydHNXaXRoKCJAS01JREkgS0FSQU9LRSBGSUxFIik/KHRoaXMuaXNLYXJhb2tlRmlsZT0hMCxwKCIlY0thcmFva2UgTUlESSBkZXRlY3RlZCEiLGMucmVjb2duaXplZCkpOnRoaXMuaXNLYXJhb2tlRmlsZSYmKG0uc3RhcnRzV2l0aCgiQFQiKXx8bS5zdGFydHNXaXRoKCJAQSIpP0E/dGhpcy5leHRyYU1ldGFkYXRhLnB1c2goQyk6KHRoaXMuYmluYXJ5TmFtZT1DLmRhdGEuc2xpY2UoMiksQT0hMCx0PSEwKTptLnN0YXJ0c1dpdGgoIkAiKXx8dGhpcy5seXJpY3MucHVzaChDKSk7YnJlYWt9fX1vLmNoYW5uZWxzPWcsby5uYW1lPSIiO2xldCBkPW8uZXZlbnRzLmZpbmQoaD0+aC5zdGF0dXNCeXRlPT09TS50cmFja05hbWUpO2QmJnRoaXMudHJhY2tzLmluZGV4T2Yobyk+MCYmKG8ubmFtZT1lZShkLmRhdGEpLCFCJiYhby5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInNldHVwIikmJnRoaXMuZXh0cmFNZXRhZGF0YS5wdXNoKGQpKX10aGlzLnRlbXBvQ2hhbmdlcy5yZXZlcnNlKCkscCgiJWNDb3JyZWN0aW5nIGxvb3BzLCBwb3J0cyBhbmQgZGV0ZWN0aW5nIG5vdGVzLi4uIixjLmluZm8pO2xldCBhPVtdO2ZvcihsZXQgbyBvZiB0aGlzLnRyYWNrcyl7bGV0IGc9by5ldmVudHMuZmluZChCPT4oQi5zdGF0dXNCeXRlJjI0MCk9PT1NLm5vdGVPbik7ZyYmYS5wdXNoKGcudGlja3MpfXRoaXMuZmlyc3ROb3RlT249TWF0aC5taW4oLi4uYSkscChgJWNGaXJzdCBub3RlLW9uIGRldGVjdGVkIGF0OiAlYyR7dGhpcy5maXJzdE5vdGVPbn0lYyB0aWNrcyFgLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKSxuIT09bnVsbCYmcz09PW51bGw/KG49dGhpcy5maXJzdE5vdGVPbixzPXRoaXMubGFzdFZvaWNlRXZlbnRUaWNrKToobj8/PXRoaXMuZmlyc3ROb3RlT24sKHM9PT1udWxsfHxzPT09MCkmJihzPXRoaXMubGFzdFZvaWNlRXZlbnRUaWNrKSksdGhpcy5sb29wPXtzdGFydDpuLGVuZDpzfSxwKGAlY0xvb3AgcG9pbnRzOiBzdGFydDogJWMke3RoaXMubG9vcC5zdGFydH0lYyBlbmQ6ICVjJHt0aGlzLmxvb3AuZW5kfWAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkKTtsZXQgcj0wO3RoaXMucG9ydENoYW5uZWxPZmZzZXRNYXA9W107Zm9yKGxldCBvIG9mIHRoaXMudHJhY2tzKWlmKG8ucG9ydD0tMSxvLmNoYW5uZWxzLnNpemUhPT0wKWZvcihsZXQgZyBvZiBvLmV2ZW50cyl7aWYoZy5zdGF0dXNCeXRlIT09TS5taWRpUG9ydCljb250aW51ZTtsZXQgQj1nLmRhdGFbMF07by5wb3J0PUIsdGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcFtCXT09PXZvaWQgMCYmKHRoaXMucG9ydENoYW5uZWxPZmZzZXRNYXBbQl09cixyKz0xNil9dGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcD1bLi4udGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcF0ubWFwKG89Pm8/PzApO2xldCBJPTEvMDtmb3IobGV0IG8gb2YgdGhpcy50cmFja3Mpby5wb3J0IT09LTEmJkk+by5wb3J0JiYoST1vLnBvcnQpO0k9PT0xLzAmJihJPTApO2ZvcihsZXQgbyBvZiB0aGlzLnRyYWNrcykoby5wb3J0PT09LTF8fG8ucG9ydD09PXZvaWQgMCkmJihvLnBvcnQ9SSk7aWYodGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcC5sZW5ndGg9PT0wJiYodGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcD1bMF0pLHRoaXMucG9ydENoYW5uZWxPZmZzZXRNYXAubGVuZ3RoPDI/cCgiJWNObyBhZGRpdGlvbmFsIE1JREkgUG9ydHMgZGV0ZWN0ZWQuIixjLmluZm8pOih0aGlzLmlzTXVsdGlQb3J0PSEwLHAoIiVjTUlESSBQb3J0cyBkZXRlY3RlZCEiLGMucmVjb2duaXplZCkpLCF0KWlmKHRoaXMudHJhY2tzLmxlbmd0aD4xKXtpZih0aGlzLnRyYWNrc1swXS5ldmVudHMuZmluZChvPT5vLnN0YXR1c0J5dGU+PU0ubm90ZU9uJiZvLnN0YXR1c0J5dGU8TS5wb2x5UHJlc3N1cmUpPT09dm9pZCAwKXtsZXQgbz10aGlzLnRyYWNrc1swXS5ldmVudHMuZmluZChnPT5nLnN0YXR1c0J5dGU9PT1NLnRyYWNrTmFtZSk7byYmKHRoaXMuYmluYXJ5TmFtZT1vLmRhdGEpfX1lbHNle2xldCBvPXRoaXMudHJhY2tzWzBdLmV2ZW50cy5maW5kKGc9Pmcuc3RhdHVzQnl0ZT09PU0udHJhY2tOYW1lKTtvJiYodGhpcy5iaW5hcnlOYW1lPW8uZGF0YSl9aWYodGhpcy5leHRyYU1ldGFkYXRhPXRoaXMuZXh0cmFNZXRhZGF0YS5maWx0ZXIobz0+by5kYXRhLmxlbmd0aD4wKSx0aGlzLmx5cmljcy5zb3J0KChvLGcpPT5vLnRpY2tzLWcudGlja3MpLCF0aGlzLnRyYWNrcy5zb21lKG89Pm8uZXZlbnRzWzBdLnRpY2tzPT09MCkpe2xldCBvPXRoaXMudHJhY2tzWzBdLGc9dGhpcz8uYmluYXJ5TmFtZT8uYnVmZmVyO2d8fChnPW5ldyBVaW50OEFycmF5KDApLmJ1ZmZlciksby5ldmVudHMudW5zaGlmdChuZXcgWkEoMCxNLnRyYWNrTmFtZSxuZXcgWShnKSkpfXRoaXMuZHVyYXRpb249dGhpcy5taWRpVGlja3NUb1NlY29uZHModGhpcy5sYXN0Vm9pY2VFdmVudFRpY2spLHRoaXMuYmluYXJ5TmFtZSYmdGhpcy5iaW5hcnlOYW1lLmxlbmd0aDwxJiYodGhpcy5iaW5hcnlOYW1lPXZvaWQgMCkscCgiJWNTdWNjZXNzISIsYy5yZWNvZ25pemVkKSxaKCl9fTtmdW5jdGlvbiBsbyhlLEEpe2lmKHRoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2smJmUuc3RhdHVzQnl0ZT49MTI4KXt0aGlzLnNlbmRNSURJTWVzc2FnZShbZS5zdGF0dXNCeXRlLC4uLmUuZGF0YV0pO3JldHVybn1sZXQgdD10aGlzLl9taWRpRGF0YS50cmFja3NbQV0sbj1BcyhlLnN0YXR1c0J5dGUpLHM9dGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXRzW3RoaXMuY3VycmVudE1JRElQb3J0c1tBXV18fDA7c3dpdGNoKG4uY2hhbm5lbCs9cyxuLnN0YXR1cyl7Y2FzZSBNLm5vdGVPbjp7bGV0IGE9ZS5kYXRhWzFdO2lmKGE+MCl0aGlzLnN5bnRoLm5vdGVPbihuLmNoYW5uZWwsZS5kYXRhWzBdLGEpLHRoaXMucGxheWluZ05vdGVzLnB1c2goe21pZGlOb3RlOmUuZGF0YVswXSxjaGFubmVsOm4uY2hhbm5lbCx2ZWxvY2l0eTphfSk7ZWxzZXt0aGlzLnN5bnRoLm5vdGVPZmYobi5jaGFubmVsLGUuZGF0YVswXSk7bGV0IHI9dGhpcy5wbGF5aW5nTm90ZXMuZmluZEluZGV4KEk9PkkubWlkaU5vdGU9PT1lLmRhdGFbMF0mJkkuY2hhbm5lbD09PW4uY2hhbm5lbCk7ciE9PS0xJiZ0aGlzLnBsYXlpbmdOb3Rlcy5zcGxpY2UociwxKX1icmVha31jYXNlIE0ubm90ZU9mZjp7dGhpcy5zeW50aC5ub3RlT2ZmKG4uY2hhbm5lbCxlLmRhdGFbMF0pO2xldCBhPXRoaXMucGxheWluZ05vdGVzLmZpbmRJbmRleChyPT5yLm1pZGlOb3RlPT09ZS5kYXRhWzBdJiZyLmNoYW5uZWw9PT1uLmNoYW5uZWwpO2EhPT0tMSYmdGhpcy5wbGF5aW5nTm90ZXMuc3BsaWNlKGEsMSk7YnJlYWt9Y2FzZSBNLnBpdGNoV2hlZWw6dGhpcy5zeW50aC5waXRjaFdoZWVsKG4uY2hhbm5lbCxlLmRhdGFbMV08PDd8ZS5kYXRhWzBdKTticmVhaztjYXNlIE0uY29udHJvbGxlckNoYW5nZTppZih0aGlzLl9taWRpRGF0YS5pc011bHRpUG9ydCYmdC5jaGFubmVscy5zaXplPT09MClyZXR1cm47dGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG4uY2hhbm5lbCxlLmRhdGFbMF0sZS5kYXRhWzFdKTticmVhaztjYXNlIE0ucHJvZ3JhbUNoYW5nZTppZih0aGlzLl9taWRpRGF0YS5pc011bHRpUG9ydCYmdC5jaGFubmVscy5zaXplPT09MClyZXR1cm47dGhpcy5zeW50aC5wcm9ncmFtQ2hhbmdlKG4uY2hhbm5lbCxlLmRhdGFbMF0pO2JyZWFrO2Nhc2UgTS5wb2x5UHJlc3N1cmU6dGhpcy5zeW50aC5wb2x5UHJlc3N1cmUobi5jaGFubmVsLGUuZGF0YVswXSxlLmRhdGFbMV0pO2JyZWFrO2Nhc2UgTS5jaGFubmVsUHJlc3N1cmU6dGhpcy5zeW50aC5jaGFubmVsUHJlc3N1cmUobi5jaGFubmVsLGUuZGF0YVswXSk7YnJlYWs7Y2FzZSBNLnN5c3RlbUV4Y2x1c2l2ZTp0aGlzLnN5bnRoLnN5c3RlbUV4Y2x1c2l2ZShlLmRhdGEscyk7YnJlYWs7Y2FzZSBNLnNldFRlbXBvOntsZXQgYT02ZTcvUXQoZS5kYXRhLDMpO3RoaXMub25lVGlja1RvU2Vjb25kcz02MC8oYSp0aGlzLl9taWRpRGF0YS50aW1lRGl2aXNpb24pLHRoaXMub25lVGlja1RvU2Vjb25kcz09PTAmJih0aGlzLm9uZVRpY2tUb1NlY29uZHM9NjAvKDEyMCp0aGlzLl9taWRpRGF0YS50aW1lRGl2aXNpb24pLHAoImludmFsaWQgdGVtcG8hIGZhbGxpbmcgYmFjayB0byAxMjAgQlBNIiksYT0xMjApO2JyZWFrfWNhc2UgTS50aW1lU2lnbmF0dXJlOmNhc2UgTS5lbmRPZlRyYWNrOmNhc2UgTS5taWRpQ2hhbm5lbFByZWZpeDpjYXNlIE0uc29uZ1Bvc2l0aW9uOmNhc2UgTS5hY3RpdmVTZW5zaW5nOmNhc2UgTS5rZXlTaWduYXR1cmU6Y2FzZSBNLnNlcXVlbmNlTnVtYmVyOmNhc2UgTS5zZXF1ZW5jZVNwZWNpZmljOmNhc2UgTS50ZXh0OmNhc2UgTS5seXJpYzpjYXNlIE0uY29weXJpZ2h0OmNhc2UgTS50cmFja05hbWU6Y2FzZSBNLm1hcmtlcjpjYXNlIE0uY3VlUG9pbnQ6Y2FzZSBNLmluc3RydW1lbnROYW1lOmNhc2UgTS5wcm9ncmFtTmFtZTpicmVhaztjYXNlIE0ubWlkaVBvcnQ6dGhpcy5hc3NpZ25NSURJUG9ydChBLGUuZGF0YVswXSk7YnJlYWs7Y2FzZSBNLnJlc2V0OnRoaXMuc3ludGguc3RvcEFsbENoYW5uZWxzKCksdGhpcy5zeW50aC5yZXNldEFsbENvbnRyb2xsZXJzKCk7YnJlYWs7ZGVmYXVsdDpwKGAlY1VucmVjb2duaXplZCBFdmVudDogJWMke2Uuc3RhdHVzQnl0ZX0lYyBzdGF0dXMgYnl0ZTogJWMke09iamVjdC5rZXlzKE0pLmZpbmQoYT0+TVthXT09PW4uc3RhdHVzKX1gLGMud2FybixjLnVucmVjb2duaXplZCxjLndhcm4sYy52YWx1ZSk7YnJlYWt9bi5zdGF0dXM+PTAmJm4uc3RhdHVzPDEyOCYmdGhpcy5jYWxsRXZlbnQoIm1ldGFFdmVudCIse2V2ZW50OmUsdHJhY2tJbmRleDpBfSl9ZnVuY3Rpb24gUW8oKXtpZih0aGlzLnBhdXNlZHx8IXRoaXMuX21pZGlEYXRhKXJldHVybjtsZXQgZT10aGlzLmN1cnJlbnRUaW1lO2Zvcig7dGhpcy5wbGF5ZWRUaW1lPGU7KXtsZXQgQT10aGlzLmZpbmRGaXJzdEV2ZW50SW5kZXgoKSxuPXRoaXMuX21pZGlEYXRhLnRyYWNrc1tBXS5ldmVudHNbdGhpcy5ldmVudEluZGV4ZXNbQV0rK107dGhpcy5wcm9jZXNzRXZlbnQobixBKTtsZXQgcz10aGlzLmZpbmRGaXJzdEV2ZW50SW5kZXgoKSxhPXRoaXMuX21pZGlEYXRhLnRyYWNrc1tzXTtpZih0aGlzLmxvb3BDb3VudD4wJiZ0aGlzLl9taWRpRGF0YS5sb29wLmVuZDw9bi50aWNrcyl7dGhpcy5sb29wQ291bnQhPT0xLzAmJih0aGlzLmxvb3BDb3VudC0tLHRoaXMuY2FsbEV2ZW50KCJsb29wQ291bnRDaGFuZ2UiLHtuZXdDb3VudDp0aGlzLmxvb3BDb3VudH0pKSx0aGlzLnNldFRpbWVUaWNrcyh0aGlzLl9taWRpRGF0YS5sb29wLnN0YXJ0KTtyZXR1cm59aWYoYS5ldmVudHMubGVuZ3RoPD10aGlzLmV2ZW50SW5kZXhlc1tzXSl7dGhpcy5zb25nSXNGaW5pc2hlZCgpO3JldHVybn1sZXQgcj1hLmV2ZW50c1t0aGlzLmV2ZW50SW5kZXhlc1tzXV07dGhpcy5wbGF5ZWRUaW1lKz10aGlzLm9uZVRpY2tUb1NlY29uZHMqKHIudGlja3Mtbi50aWNrcyl9fWZ1bmN0aW9uIHVvKGUsQSl7dGhpcy5fbWlkaURhdGEudHJhY2tzW2VdLmNoYW5uZWxzLnNpemUhPT0wJiYodGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQ9PT0wJiYodGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQrPTE2LHRoaXMubWlkaVBvcnRDaGFubmVsT2Zmc2V0c1tBXT0wKSx0aGlzLm1pZGlQb3J0Q2hhbm5lbE9mZnNldHNbQV09PT12b2lkIDAmJih0aGlzLnN5bnRoLm1pZGlDaGFubmVscy5sZW5ndGg8dGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQrMTUmJnRoaXMuYWRkTmV3TUlESVBvcnQoKSx0aGlzLm1pZGlQb3J0Q2hhbm5lbE9mZnNldHNbQV09dGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQsdGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQrPTE2KSx0aGlzLmN1cnJlbnRNSURJUG9ydHNbZV09QSl9ZnVuY3Rpb24gZm8oZSl7aWYoIWUudHJhY2tzKXRocm93IG5ldyBFcnJvcigiVGhpcyBNSURJIGhhcyBubyB0cmFja3MhIik7dGhpcy5vbmVUaWNrVG9TZWNvbmRzPTYwLygxMjAqZS50aW1lRGl2aXNpb24pLHRoaXMuX21pZGlEYXRhPWUsdGhpcy5zeW50aC5jbGVhckVtYmVkZGVkQmFuaygpLHRoaXMuX21pZGlEYXRhLmVtYmVkZGVkU291bmRCYW5rIT09dm9pZCAwJiYocCgiJWNFbWJlZGRlZCBzb3VuZGJhbmsgZGV0ZWN0ZWQhIFVzaW5nIGl0LiIsYy5yZWNvZ25pemVkKSx0aGlzLnN5bnRoLnNldEVtYmVkZGVkU291bmRCYW5rKHRoaXMuX21pZGlEYXRhLmVtYmVkZGVkU291bmRCYW5rLHRoaXMuX21pZGlEYXRhLmJhbmtPZmZzZXQpKSxiQSgiJWNQcmVsb2FkaW5nIHNhbXBsZXMuLi4iLGMuaW5mbyksdGhpcy5fbWlkaURhdGEuZ2V0VXNlZFByb2dyYW1zQW5kS2V5cyh0aGlzLnN5bnRoLnNvdW5kQmFua01hbmFnZXIpLmZvckVhY2goKHQsbik9PntwKGAlY1ByZWxvYWRpbmcgdXNlZCBzYW1wbGVzIG9uICVjJHtuLm5hbWV9JWMuLi5gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKTtmb3IobGV0IHMgb2YgdCl7bGV0W2Escl09cy5zcGxpdCgiLSIpLm1hcChOdW1iZXIpO3RoaXMuc3ludGguZ2V0Vm9pY2VzRm9yUHJlc2V0KG4sYSxyLGEpfX0pLFooKSx0aGlzLmN1cnJlbnRNSURJUG9ydHM9dGhpcy5fbWlkaURhdGEudHJhY2tzLm1hcCh0PT50LnBvcnQpLHRoaXMubWlkaVBvcnRDaGFubmVsT2Zmc2V0PTAsdGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXRzPXt9LHRoaXMuX21pZGlEYXRhLnRyYWNrcy5mb3JFYWNoKCh0LG4pPT57dGhpcy5hc3NpZ25NSURJUG9ydChuLHQucG9ydCl9KSx0aGlzLmZpcnN0Tm90ZVRpbWU9dGhpcy5fbWlkaURhdGEubWlkaVRpY2tzVG9TZWNvbmRzKHRoaXMuX21pZGlEYXRhLmZpcnN0Tm90ZU9uKSxwKGAlY1RvdGFsIHNvbmcgdGltZTogJHtmcyhNYXRoLmNlaWwodGhpcy5fbWlkaURhdGEuZHVyYXRpb24pKS50aW1lfWAsYy5yZWNvZ25pemVkKSx0aGlzLmNhbGxFdmVudCgic29uZ0NoYW5nZSIse3NvbmdJbmRleDp0aGlzLl9zb25nSW5kZXh9KSx0aGlzLl9taWRpRGF0YS5kdXJhdGlvbjw9LjImJihzQShgJWNWZXJ5IHNob3J0IHNvbmc6ICgke2ZzKE1hdGgucm91bmQodGhpcy5fbWlkaURhdGEuZHVyYXRpb24pKS50aW1lfSkuIERpc2FibGluZyBsb29wIWAsYy53YXJuKSx0aGlzLmxvb3BDb3VudD0wKSx0aGlzLmN1cnJlbnRUaW1lPTB9dmFyIGk9e0lOVkFMSUQ6LTEsc3RhcnRBZGRyc09mZnNldDowLGVuZEFkZHJPZmZzZXQ6MSxzdGFydGxvb3BBZGRyc09mZnNldDoyLGVuZGxvb3BBZGRyc09mZnNldDozLHN0YXJ0QWRkcnNDb2Fyc2VPZmZzZXQ6NCxtb2RMZm9Ub1BpdGNoOjUsdmliTGZvVG9QaXRjaDo2LG1vZEVudlRvUGl0Y2g6Nyxpbml0aWFsRmlsdGVyRmM6OCxpbml0aWFsRmlsdGVyUTo5LG1vZExmb1RvRmlsdGVyRmM6MTAsbW9kRW52VG9GaWx0ZXJGYzoxMSxlbmRBZGRyc0NvYXJzZU9mZnNldDoxMixtb2RMZm9Ub1ZvbHVtZToxMyx1bnVzZWQxOjE0LGNob3J1c0VmZmVjdHNTZW5kOjE1LHJldmVyYkVmZmVjdHNTZW5kOjE2LHBhbjoxNyx1bnVzZWQyOjE4LHVudXNlZDM6MTksdW51c2VkNDoyMCxkZWxheU1vZExGTzoyMSxmcmVxTW9kTEZPOjIyLGRlbGF5VmliTEZPOjIzLGZyZXFWaWJMRk86MjQsZGVsYXlNb2RFbnY6MjUsYXR0YWNrTW9kRW52OjI2LGhvbGRNb2RFbnY6MjcsZGVjYXlNb2RFbnY6Mjgsc3VzdGFpbk1vZEVudjoyOSxyZWxlYXNlTW9kRW52OjMwLGtleU51bVRvTW9kRW52SG9sZDozMSxrZXlOdW1Ub01vZEVudkRlY2F5OjMyLGRlbGF5Vm9sRW52OjMzLGF0dGFja1ZvbEVudjozNCxob2xkVm9sRW52OjM1LGRlY2F5Vm9sRW52OjM2LHN1c3RhaW5Wb2xFbnY6MzcscmVsZWFzZVZvbEVudjozOCxrZXlOdW1Ub1ZvbEVudkhvbGQ6Mzksa2V5TnVtVG9Wb2xFbnZEZWNheTo0MCxpbnN0cnVtZW50OjQxLHJlc2VydmVkMTo0MixrZXlSYW5nZTo0Myx2ZWxSYW5nZTo0NCxzdGFydGxvb3BBZGRyc0NvYXJzZU9mZnNldDo0NSxrZXlOdW06NDYsdmVsb2NpdHk6NDcsaW5pdGlhbEF0dGVudWF0aW9uOjQ4LHJlc2VydmVkMjo0OSxlbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQ6NTAsY29hcnNlVHVuZTo1MSxmaW5lVHVuZTo1MixzYW1wbGVJRDo1MyxzYW1wbGVNb2Rlczo1NCxyZXNlcnZlZDM6NTUsc2NhbGVUdW5pbmc6NTYsZXhjbHVzaXZlQ2xhc3M6NTcsb3ZlcnJpZGluZ1Jvb3RLZXk6NTgsdW51c2VkNTo1OSxlbmRPcGVyOjYwLHZpYkxmb1RvVm9sdW1lOjYxLHZpYkxmb1RvRmlsdGVyRmM6NjJ9LE1uPU9iamVjdC5rZXlzKGkpLmxlbmd0aCxtbz1NYXRoLm1heCguLi5PYmplY3QudmFsdWVzKGkpKSx4PVtdO3hbaS5zdGFydEFkZHJzT2Zmc2V0XT17bWluOjAsbWF4OjMyNzY4LGRlZjowLG5ycG46MX07eFtpLmVuZEFkZHJPZmZzZXRdPXttaW46LTMyNzY4LG1heDozMjc2OCxkZWY6MCxucnBuOjF9O3hbaS5zdGFydGxvb3BBZGRyc09mZnNldF09e21pbjotMzI3NjgsbWF4OjMyNzY4LGRlZjowLG5ycG46MX07eFtpLmVuZGxvb3BBZGRyc09mZnNldF09e21pbjotMzI3NjgsbWF4OjMyNzY4LGRlZjowLG5ycG46MX07eFtpLnN0YXJ0QWRkcnNDb2Fyc2VPZmZzZXRdPXttaW46MCxtYXg6MzI3NjgsZGVmOjAsbnJwbjoxfTt4W2kubW9kTGZvVG9QaXRjaF09e21pbjotMTJlMyxtYXg6MTJlMyxkZWY6MCxucnBuOjJ9O3hbaS52aWJMZm9Ub1BpdGNoXT17bWluOi0xMmUzLG1heDoxMmUzLGRlZjowLG5ycG46Mn07eFtpLm1vZEVudlRvUGl0Y2hdPXttaW46LTEyZTMsbWF4OjEyZTMsZGVmOjAsbnJwbjoyfTt4W2kuaW5pdGlhbEZpbHRlckZjXT17bWluOjE1MDAsbWF4OjEzNTAwLGRlZjoxMzUwMCxucnBuOjJ9O3hbaS5pbml0aWFsRmlsdGVyUV09e21pbjowLG1heDo5NjAsZGVmOjAsbnJwbjoxfTt4W2kubW9kTGZvVG9GaWx0ZXJGY109e21pbjotMTJlMyxtYXg6MTJlMyxkZWY6MCxucnBuOjJ9O3hbaS52aWJMZm9Ub0ZpbHRlckZjXT17bWluOi0xMmUzLG1heDoxMmUzLGRlZjowLG5ycG46Mn07eFtpLm1vZEVudlRvRmlsdGVyRmNdPXttaW46LTEyZTMsbWF4OjEyZTMsZGVmOjAsbnJwbjoyfTt4W2kuZW5kQWRkcnNDb2Fyc2VPZmZzZXRdPXttaW46LTMyNzY4LG1heDozMjc2OCxkZWY6MCxucnBuOjF9O3hbaS5tb2RMZm9Ub1ZvbHVtZV09e21pbjotOTYwLG1heDo5NjAsZGVmOjAsbnJwbjoxfTt4W2kudmliTGZvVG9Wb2x1bWVdPXttaW46LTk2MCxtYXg6OTYwLGRlZjowLG5ycG46MX07eFtpLmNob3J1c0VmZmVjdHNTZW5kXT17bWluOjAsbWF4OjFlMyxkZWY6MCxucnBuOjF9O3hbaS5yZXZlcmJFZmZlY3RzU2VuZF09e21pbjowLG1heDoxZTMsZGVmOjAsbnJwbjoxfTt4W2kucGFuXT17bWluOi01MDAsbWF4OjUwMCxkZWY6MCxucnBuOjF9O3hbaS5kZWxheU1vZExGT109e21pbjotMTJlMyxtYXg6NWUzLGRlZjotMTJlMyxucnBuOjJ9O3hbaS5mcmVxTW9kTEZPXT17bWluOi0xNmUzLG1heDo0NTAwLGRlZjowLG5ycG46NH07eFtpLmRlbGF5VmliTEZPXT17bWluOi0xMmUzLG1heDo1ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLmZyZXFWaWJMRk9dPXttaW46LTE2ZTMsbWF4OjQ1MDAsZGVmOjAsbnJwbjo0fTt4W2kuZGVsYXlNb2RFbnZdPXttaW46LTMyNzY4LG1heDo1ZTMsZGVmOi0zMjc2OCxucnBuOjJ9O3hbaS5hdHRhY2tNb2RFbnZdPXttaW46LTMyNzY4LG1heDo4ZTMsZGVmOi0zMjc2OCxucnBuOjJ9O3hbaS5ob2xkTW9kRW52XT17bWluOi0xMmUzLG1heDo1ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLmRlY2F5TW9kRW52XT17bWluOi0xMmUzLG1heDo4ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLnN1c3RhaW5Nb2RFbnZdPXttaW46MCxtYXg6MWUzLGRlZjowLG5ycG46MX07eFtpLnJlbGVhc2VNb2RFbnZdPXttaW46LTEyZTMsbWF4OjhlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kua2V5TnVtVG9Nb2RFbnZIb2xkXT17bWluOi0xMjAwLG1heDoxMjAwLGRlZjowLG5ycG46MX07eFtpLmtleU51bVRvTW9kRW52RGVjYXldPXttaW46LTEyMDAsbWF4OjEyMDAsZGVmOjAsbnJwbjoxfTt4W2kuZGVsYXlWb2xFbnZdPXttaW46LTEyZTMsbWF4OjVlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kuYXR0YWNrVm9sRW52XT17bWluOi0xMmUzLG1heDo4ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLmhvbGRWb2xFbnZdPXttaW46LTEyZTMsbWF4OjVlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kuZGVjYXlWb2xFbnZdPXttaW46LTEyZTMsbWF4OjhlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kuc3VzdGFpblZvbEVudl09e21pbjowLG1heDoxNDQwLGRlZjowLG5ycG46MX07eFtpLnJlbGVhc2VWb2xFbnZdPXttaW46LTEyZTMsbWF4OjhlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kua2V5TnVtVG9Wb2xFbnZIb2xkXT17bWluOi0xMjAwLG1heDoxMjAwLGRlZjowLG5ycG46MX07eFtpLmtleU51bVRvVm9sRW52RGVjYXldPXttaW46LTEyMDAsbWF4OjEyMDAsZGVmOjAsbnJwbjoxfTt4W2kuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXRdPXttaW46LTMyNzY4LG1heDozMjc2OCxkZWY6MCxucnBuOjF9O3hbaS5rZXlOdW1dPXttaW46LTEsbWF4OjEyNyxkZWY6LTEsbnJwbjoxfTt4W2kudmVsb2NpdHldPXttaW46LTEsbWF4OjEyNyxkZWY6LTEsbnJwbjoxfTt4W2kuaW5pdGlhbEF0dGVudWF0aW9uXT17bWluOjAsbWF4OjE0NDAsZGVmOjAsbnJwbjoxfTt4W2kuZW5kbG9vcEFkZHJzQ29hcnNlT2Zmc2V0XT17bWluOi0zMjc2OCxtYXg6MzI3NjgsZGVmOjAsbnJwbjoxfTt4W2kuY29hcnNlVHVuZV09e21pbjotMTIwLG1heDoxMjAsZGVmOjAsbnJwbjoxfTt4W2kuZmluZVR1bmVdPXttaW46LTEyNzAwLG1heDoxMjcwMCxkZWY6MCxucnBuOjF9O3hbaS5zY2FsZVR1bmluZ109e21pbjowLG1heDoxMjAwLGRlZjoxMDAsbnJwbjoxfTt4W2kuZXhjbHVzaXZlQ2xhc3NdPXttaW46MCxtYXg6OTk5OTksZGVmOjAsbnJwbjowfTt4W2kub3ZlcnJpZGluZ1Jvb3RLZXldPXttaW46LTEsbWF4OjEyNyxkZWY6LTEsbnJwbjowfTt4W2kuc2FtcGxlTW9kZXNdPXttaW46MCxtYXg6MyxkZWY6MCxucnBuOjB9O3ZhciB3QT17bW9ub1NhbXBsZToxLHJpZ2h0U2FtcGxlOjIsbGVmdFNhbXBsZTo0LGxpbmtlZFNhbXBsZTo4LHJvbU1vbm9TYW1wbGU6MzI3Njkscm9tUmlnaHRTYW1wbGU6MzI3NzAscm9tTGVmdFNhbXBsZTozMjc3Mixyb21MaW5rZWRTYW1wbGU6MzI3NzZ9LGo9e25vQ29udHJvbGxlcjowLG5vdGVPblZlbG9jaXR5OjIsbm90ZU9uS2V5TnVtOjMscG9seVByZXNzdXJlOjEwLGNoYW5uZWxQcmVzc3VyZToxMyxwaXRjaFdoZWVsOjE0LHBpdGNoV2hlZWxSYW5nZToxNixsaW5rOjEyN30sUUE9e2xpbmVhcjowLGNvbmNhdmU6MSxjb252ZXg6Mixzd2l0Y2g6M307dmFyIFQ9e25vbmU6MCxtb2RMZm86MSx2ZWxvY2l0eToyLGtleU51bTozLHZvbEVudjo0LG1vZEVudjo1LHBpdGNoV2hlZWw6Nixwb2x5UHJlc3N1cmU6NyxjaGFubmVsUHJlc3N1cmU6OCx2aWJyYXRvTGZvOjksbW9kdWxhdGlvbldoZWVsOjEyOSx2b2x1bWU6MTM1LHBhbjoxMzgsZXhwcmVzc2lvbjoxMzksY2hvcnVzOjIyMSxyZXZlcmI6MjE5LHBpdGNoV2hlZWxSYW5nZToyNTYsZmluZVR1bmU6MjU3LGNvYXJzZVR1bmU6MjU4fSxSPXtub25lOjAsZ2FpbjoxLHJlc2VydmVkOjIscGl0Y2g6MyxwYW46NCxrZXlOdW06NSxjaG9ydXNTZW5kOjEyOCxyZXZlcmJTZW5kOjEyOSxtb2RMZm9GcmVxOjI2MCxtb2RMZm9EZWxheToyNjEsdmliTGZvRnJlcToyNzYsdmliTGZvRGVsYXk6Mjc3LHZvbEVudkF0dGFjazo1MTgsdm9sRW52RGVjYXk6NTE5LHJlc2VydmVkRUcxOjUyMCx2b2xFbnZSZWxlYXNlOjUyMSx2b2xFbnZTdXN0YWluOjUyMix2b2xFbnZEZWxheTo1MjMsdm9sRW52SG9sZDo1MjQsbW9kRW52QXR0YWNrOjc3OCxtb2RFbnZEZWNheTo3NzkscmVzZXJ2ZWRFRzI6NzgwLG1vZEVudlJlbGVhc2U6NzgxLG1vZEVudlN1c3RhaW46NzgyLG1vZEVudkRlbGF5Ojc4Myxtb2RFbnZIb2xkOjc4NCxmaWx0ZXJDdXRvZmY6MTI4MCxmaWx0ZXJROjEyODF9LHlzPXtmb3J3YXJkOjAsbG9vcEFuZFJlbGVhc2U6MX0sbUE9MTI4LGJuPTE0NyxXZT1uZXcgSW50MTZBcnJheShibikuZmlsbCgwKSxTQT0oZSxBKT0+V2VbZV09QTw8NztTQShTLm1haW5Wb2x1bWUsMTAwKTtTQShTLmJhbGFuY2UsNjQpO1NBKFMuZXhwcmVzc2lvbkNvbnRyb2xsZXIsMTI3KTtTQShTLnBhbiw2NCk7U0EoUy5wb3J0YW1lbnRvT25PZmYsMTI3KTtTQShTLmZpbHRlclJlc29uYW5jZSw2NCk7U0EoUy5yZWxlYXNlVGltZSw2NCk7U0EoUy5hdHRhY2tUaW1lLDY0KTtTQShTLmJyaWdodG5lc3MsNjQpO1NBKFMuZGVjYXlUaW1lLDY0KTtTQShTLnZpYnJhdG9SYXRlLDY0KTtTQShTLnZpYnJhdG9EZXB0aCw2NCk7U0EoUy52aWJyYXRvRGVsYXksNjQpO1NBKFMuZ2VuZXJhbFB1cnBvc2VDb250cm9sbGVyNiw2NCk7U0EoUy5nZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI4LDY0KTtTQShTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0IsMTI3KTtTQShTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMTI3KTtTQShTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0IsMTI3KTtTQShTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMTI3KTt2YXIgbnM9MTtXZVtTLnBvcnRhbWVudG9Db250cm9sXT1ucztTQShtQStqLnBpdGNoV2hlZWwsNjQpO1NBKG1BK2oucGl0Y2hXaGVlbFJhbmdlLDIpO3ZhciBlYT1PYmplY3Qua2V5cyhJQSkubGVuZ3RoLHRhPW5ldyBGbG9hdDMyQXJyYXkoZWEpO3RhW0lBLm1vZHVsYXRpb25NdWx0aXBsaWVyXT0xO2Z1bmN0aW9uIFNvKGU9ITApe2lmKGUmJnAoIiVjUmVzZXR0aW5nIGFsbCBjb250cm9sbGVycyEiLGMuaW5mbyksdGhpcy5wcml2YXRlUHJvcHMuY2FsbEV2ZW50KCJhbGxDb250cm9sbGVyUmVzZXQiLHZvaWQgMCksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLE9zKSwhKCF0aGlzLnByaXZhdGVQcm9wcy5kcnVtUHJlc2V0fHwhdGhpcy5wcml2YXRlUHJvcHMuZGVmYXVsdFByZXNldCkpe2ZvcihsZXQgQT0wO0E8dGhpcy5taWRpQ2hhbm5lbHMubGVuZ3RoO0ErKyl7bGV0IHQ9dGhpcy5taWRpQ2hhbm5lbHNbQV07dC5yZXNldENvbnRyb2xsZXJzKCExKSx0LnJlc2V0UHJlc2V0KCk7Zm9yKGxldCBuPTA7bjwxMjg7bisrKXRoaXMubWlkaUNoYW5uZWxzW0FdLmxvY2tlZENvbnRyb2xsZXJzW25dJiZ0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoImNvbnRyb2xsZXJDaGFuZ2UiLHtjaGFubmVsOkEsY29udHJvbGxlck51bWJlcjpuLGNvbnRyb2xsZXJWYWx1ZTp0aGlzLm1pZGlDaGFubmVsc1tBXS5taWRpQ29udHJvbGxlcnNbbl0+Pjd9KTtpZighdGhpcy5taWRpQ2hhbm5lbHNbQV0ubG9ja2VkQ29udHJvbGxlcnNbbUErai5waXRjaFdoZWVsXSl7bGV0IG49dGhpcy5taWRpQ2hhbm5lbHNbQV0ubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbF07dGhpcy5wcml2YXRlUHJvcHMuY2FsbEV2ZW50KCJwaXRjaFdoZWVsIix7Y2hhbm5lbDpBLHBpdGNoOm59KX1pZighdGhpcy5taWRpQ2hhbm5lbHNbQV0ubG9ja2VkQ29udHJvbGxlcnNbbUErai5jaGFubmVsUHJlc3N1cmVdKXtsZXQgbj10aGlzLm1pZGlDaGFubmVsc1tBXS5taWRpQ29udHJvbGxlcnNbbUErai5jaGFubmVsUHJlc3N1cmVdPj43O3RoaXMucHJpdmF0ZVByb3BzLmNhbGxFdmVudCgiY2hhbm5lbFByZXNzdXJlIix7Y2hhbm5lbDpBLHByZXNzdXJlOm59KX19dGhpcy5wcml2YXRlUHJvcHMudHVuaW5ncy5sZW5ndGg9MCx0aGlzLnByaXZhdGVQcm9wcy50dW5pbmdzLmxlbmd0aD0wO2ZvcihsZXQgQT0wO0E8MTI4O0ErKyl0aGlzLnByaXZhdGVQcm9wcy50dW5pbmdzLnB1c2goW10pO3RoaXMuc2V0TUlESVZvbHVtZSgxKX19ZnVuY3Rpb24gcG8oZT0hMCl7dGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nLmZpbGwoMCk7Zm9yKGxldCB0PTA7dDxXZS5sZW5ndGg7dCsrKXtpZih0aGlzLmxvY2tlZENvbnRyb2xsZXJzW3RdKWNvbnRpbnVlO2xldCBuPVdlW3RdO3RoaXMubWlkaUNvbnRyb2xsZXJzW3RdIT09biYmdDwxMjc/dD09PVMucG9ydGFtZW50b0NvbnRyb2w/dGhpcy5taWRpQ29udHJvbGxlcnNbdF09bnM6dCE9PVMucG9ydGFtZW50b0NvbnRyb2wmJnQhPT1TLmRhdGFFbnRyeU1TQiYmdCE9PVMucmVnaXN0ZXJlZFBhcmFtZXRlck1TQiYmdCE9PVMucmVnaXN0ZXJlZFBhcmFtZXRlckxTQiYmdCE9PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlck1TQiYmdCE9PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQiYmdGhpcy5jb250cm9sbGVyQ2hhbmdlKHQsbj4+NyxlKTp0aGlzLm1pZGlDb250cm9sbGVyc1t0XT1ufXRoaXMuY2hhbm5lbFZpYnJhdG89e3JhdGU6MCxkZXB0aDowLGRlbGF5OjB9LHRoaXMucmFuZG9tUGFuPSExLHRoaXMuc3lzRXhNb2R1bGF0b3JzLnJlc2V0TW9kdWxhdG9ycygpO2xldCBBPXRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmVdO3RoaXMuY3VzdG9tQ29udHJvbGxlcnMuc2V0KHRhKSx0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmUsQSksdGhpcy5yZXNldFBhcmFtZXRlcnMoKX1mdW5jdGlvbiB5bygpe3RoaXMuc2V0QmFua01TQihmQS5nZXREZWZhdWx0QmFuayh0aGlzLmNoYW5uZWxTeXN0ZW0pKSx0aGlzLnNldEJhbmtMU0IoMCksdGhpcy5zZXRHU0RydW1zKCExKSx0aGlzLnNldERydW1zKHRoaXMuY2hhbm5lbE51bWJlciUxNj09PVNlKSx0aGlzLnByb2dyYW1DaGFuZ2UoMCl9dmFyIG5hPW5ldyBTZXQoW1MuYmFua1NlbGVjdCxTLmJhbmtTZWxlY3RMU0IsUy5tYWluVm9sdW1lLFMubWFpblZvbHVtZUxTQixTLnBhbixTLnBhbkxTQixTLnJldmVyYkRlcHRoLFMudHJlbW9sb0RlcHRoLFMuY2hvcnVzRGVwdGgsUy5kZXR1bmVEZXB0aCxTLnBoYXNlckRlcHRoLFMuc291bmRWYXJpYXRpb24sUy5maWx0ZXJSZXNvbmFuY2UsUy5yZWxlYXNlVGltZSxTLmF0dGFja1RpbWUsUy5icmlnaHRuZXNzLFMuZGVjYXlUaW1lLFMudmlicmF0b1JhdGUsUy52aWJyYXRvRGVwdGgsUy52aWJyYXRvRGVsYXksUy5zb3VuZENvbnRyb2xsZXIxMF0pO2Z1bmN0aW9uIGtvKCl7dGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nLmZpbGwoMCksdGhpcy5waXRjaFdoZWVsKDgxOTIpLHRoaXMuY2hhbm5lbFZpYnJhdG89e3JhdGU6MCxkZXB0aDowLGRlbGF5OjB9O2ZvcihsZXQgZT0wO2U8MTI4O2UrKyl7bGV0IEE9V2VbZV07IW5hLmhhcyhlKSYmQSE9PXRoaXMubWlkaUNvbnRyb2xsZXJzW2VdJiYoZT09PVMucG9ydGFtZW50b0NvbnRyb2w/dGhpcy5taWRpQ29udHJvbGxlcnNbZV09bnM6dGhpcy5jb250cm9sbGVyQ2hhbmdlKGUsQT4+NykpfXRoaXMucmVzZXRHZW5lcmF0b3JPdmVycmlkZXMoKSx0aGlzLnJlc2V0R2VuZXJhdG9yT2Zmc2V0cygpfWZ1bmN0aW9uIERvKCl7dGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5JZGxlLHRoaXMubWlkaUNvbnRyb2xsZXJzW1Mubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQl09MTYyNTYsdGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCXT0xNjI1Nix0aGlzLm1pZGlDb250cm9sbGVyc1tTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0JdPTE2MjU2LHRoaXMubWlkaUNvbnRyb2xsZXJzW1MucmVnaXN0ZXJlZFBhcmFtZXRlck1TQl09MTYyNTYsdGhpcy5yZXNldEdlbmVyYXRvck92ZXJyaWRlcygpLHRoaXMucmVzZXRHZW5lcmF0b3JPZmZzZXRzKCl9dmFyIEdlPVdlLnNsaWNlKDAsMTI4KTtmdW5jdGlvbiB3byhlLEE9dm9pZCAwKXtpZighdGhpcy5fbWlkaURhdGEpcmV0dXJuITE7dGhpcy5vbmVUaWNrVG9TZWNvbmRzPTYwLygxMjAqdGhpcy5fbWlkaURhdGEudGltZURpdmlzaW9uKSx0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrP3RoaXMuc2VuZE1JRElSZXNldCgpOih0aGlzLnN5bnRoLnJlc2V0QWxsQ29udHJvbGxlcnMoKSx0aGlzLnN5bnRoLnN0b3BBbGxDaGFubmVscyghMSkpLHRoaXMucGxheWVkVGltZT0wLHRoaXMuZXZlbnRJbmRleGVzPUFycmF5KHRoaXMuX21pZGlEYXRhLnRyYWNrcy5sZW5ndGgpLmZpbGwoMCk7bGV0IHQ9dGhpcy5zeW50aC5taWRpQ2hhbm5lbHMubGVuZ3RoLG49QXJyYXkodCkuZmlsbCg4MTkyKSxzPVtdO2ZvcihsZXQgbz0wO288dDtvKyspcy5wdXNoKHtwcm9ncmFtOi0xLGJhbms6MCxhY3R1YWxCYW5rOjB9KTtsZXQgYT1vPT5vPT09Uy5kYXRhRGVjcmVtZW50fHxvPT09Uy5kYXRhSW5jcmVtZW50fHxvPT09Uy5kYXRhRW50cnlNU0J8fG89PT1TLmRhdGFFbnRyeUxTQnx8bz09PVMucmVnaXN0ZXJlZFBhcmFtZXRlckxTQnx8bz09PVMucmVnaXN0ZXJlZFBhcmFtZXRlck1TQnx8bz09PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQnx8bz09PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlck1TQnx8bz09PVMuYmFua1NlbGVjdHx8bz09PVMuYmFua1NlbGVjdExTQnx8bz09PVMucmVzZXRBbGxDb250cm9sbGVycyxyPVtdO2ZvcihsZXQgbz0wO288dDtvKyspci5wdXNoKEFycmF5LmZyb20oR2UpKTtmdW5jdGlvbiBJKG8pe2lmKG5bb109ODE5MixyPy5bb10hPT12b2lkIDApZm9yKGxldCBnPTA7ZzxHZS5sZW5ndGg7ZysrKW5hLmhhcyhnKXx8KHJbb11bZ109R2VbZ10pfWZvcig7Oyl7bGV0IG89dGhpcy5maW5kRmlyc3RFdmVudEluZGV4KCksZz10aGlzLl9taWRpRGF0YS50cmFja3Nbb10sQj1nLmV2ZW50c1t0aGlzLmV2ZW50SW5kZXhlc1tvXV07aWYoQSE9PXZvaWQgMCl7aWYoQi50aWNrcz49QSlicmVha31lbHNlIGlmKHRoaXMucGxheWVkVGltZT49ZSlicmVhaztsZXQgZD1BcyhCLnN0YXR1c0J5dGUpLGg9ZC5jaGFubmVsKyh0aGlzLm1pZGlQb3J0Q2hhbm5lbE9mZnNldHNbZy5wb3J0XXx8MCk7c3dpdGNoKGQuc3RhdHVzKXtjYXNlIE0ubm90ZU9uOnJbaF0/Pz1BcnJheS5mcm9tKEdlKSxyW2hdW1MucG9ydGFtZW50b0NvbnRyb2xdPUIuZGF0YVswXTticmVhaztjYXNlIE0ubm90ZU9mZjpicmVhaztjYXNlIE0ucGl0Y2hXaGVlbDpuW2hdPUIuZGF0YVsxXTw8N3xCLmRhdGFbMF07YnJlYWs7Y2FzZSBNLnByb2dyYW1DaGFuZ2U6e2lmKHRoaXMuX21pZGlEYXRhLmlzTXVsdGlQb3J0JiZnLmNoYW5uZWxzLnNpemU9PT0wKWJyZWFrO2xldCBRPXNbaF07US5wcm9ncmFtPUIuZGF0YVswXSxRLmFjdHVhbEJhbms9US5iYW5rO2JyZWFrfWNhc2UgTS5jb250cm9sbGVyQ2hhbmdlOntpZih0aGlzLl9taWRpRGF0YS5pc011bHRpUG9ydCYmZy5jaGFubmVscy5zaXplPT09MClicmVhaztsZXQgUT1CLmRhdGFbMF07aWYoYShRKSl7bGV0IG09Qi5kYXRhWzFdO2lmKFE9PT1TLmJhbmtTZWxlY3Qpe3NbaF0uYmFuaz1tO2JyZWFrfWVsc2UgUT09PVMucmVzZXRBbGxDb250cm9sbGVycyYmSShoKTt0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrP3RoaXMuc2VuZE1JRElDQyhoLFEsbSk6dGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKGgsUSxtKX1lbHNlIHJbaF0/Pz1BcnJheS5mcm9tKEdlKSxyW2hdW1FdPUIuZGF0YVsxXTticmVha31kZWZhdWx0OnRoaXMucHJvY2Vzc0V2ZW50KEIsbyk7YnJlYWt9dGhpcy5ldmVudEluZGV4ZXNbb10rKyxvPXRoaXMuZmluZEZpcnN0RXZlbnRJbmRleCgpO2xldCBDPXRoaXMuX21pZGlEYXRhLnRyYWNrc1tvXS5ldmVudHNbdGhpcy5ldmVudEluZGV4ZXNbb11dO2lmKEM9PT12b2lkIDApcmV0dXJuIHRoaXMuc3RvcCgpLCExO3RoaXMucGxheWVkVGltZSs9dGhpcy5vbmVUaWNrVG9TZWNvbmRzKihDLnRpY2tzLUIudGlja3MpfWlmKHRoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2spe2ZvcihsZXQgbz0wO288dDtvKyspaWYobltvXSE9PXZvaWQgMCYmdGhpcy5zZW5kTUlESVBpdGNoV2hlZWwobyxuW29dPj43LG5bb10mMTI3KSxyW29dIT09dm9pZCAwJiZyW29dLmZvckVhY2goKGcsQik9PntnIT09R2VbQl0mJiFhKEIpJiZ0aGlzLnNlbmRNSURJQ0MobyxCLGcpfSksc1tvXS5wcm9ncmFtPj0wJiZzW29dLmFjdHVhbEJhbms+PTApe2xldCBnPXNbb10uYWN0dWFsQmFuazt0aGlzLnNlbmRNSURJQ0MobyxTLmJhbmtTZWxlY3QsZyksdGhpcy5zZW5kTUlESVByb2dyYW1DaGFuZ2UobyxzW29dLnByb2dyYW0pfX1lbHNlIGZvcihsZXQgbz0wO288dDtvKyspaWYobltvXSE9PXZvaWQgMCYmdGhpcy5zeW50aC5waXRjaFdoZWVsKG8sbltvXSkscltvXSE9PXZvaWQgMCYmcltvXS5mb3JFYWNoKChnLEIpPT57ZyE9PUdlW0JdJiYhYShCKSYmdGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG8sQixnKX0pLHNbb10uYWN0dWFsQmFuaz49MCl7bGV0IGc9c1tvXTtnLnByb2dyYW0hPT0tMT8odGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG8sUy5iYW5rU2VsZWN0LGcuYWN0dWFsQmFuayksdGhpcy5zeW50aC5wcm9ncmFtQ2hhbmdlKG8sZy5wcm9ncmFtKSk6dGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG8sUy5iYW5rU2VsZWN0LGcuYmFuayl9cmV0dXJuIHRoaXMucGF1c2VkJiYodGhpcy5wYXVzZWRUaW1lPXRoaXMucGxheWVkVGltZSksITB9dmFyIHNhPWNsYXNze3NvbmdzPVtdO3NodWZmbGVkU29uZ0luZGV4ZXM9W107c3ludGg7ZXh0ZXJuYWxNSURJUGxheWJhY2s9ITE7bG9vcENvdW50PTA7c2tpcFRvRmlyc3ROb3RlT249ITA7b25FdmVudENhbGw7cHJvY2Vzc1RpY2s9UW8uYmluZCh0aGlzKTtmaXJzdE5vdGVUaW1lPTA7b25lVGlja1RvU2Vjb25kcz0wO2V2ZW50SW5kZXhlcz1bXTtwbGF5ZWRUaW1lPTA7cGF1c2VkVGltZT0tMTthYnNvbHV0ZVN0YXJ0VGltZT0wO3BsYXlpbmdOb3Rlcz1bXTtjdXJyZW50TUlESVBvcnRzPVtdO21pZGlQb3J0Q2hhbm5lbE9mZnNldD0wO21pZGlQb3J0Q2hhbm5lbE9mZnNldHM9e307YXNzaWduTUlESVBvcnQ9dW8uYmluZCh0aGlzKTtsb2FkTmV3U2VxdWVuY2U9Zm8uYmluZCh0aGlzKTtwcm9jZXNzRXZlbnQ9bG8uYmluZCh0aGlzKTtzZXRUaW1lVG89d28uYmluZCh0aGlzKTtjb25zdHJ1Y3RvcihlKXt0aGlzLnN5bnRoPWUsdGhpcy5hYnNvbHV0ZVN0YXJ0VGltZT10aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWV9X21pZGlEYXRhO2dldCBtaWRpRGF0YSgpe3JldHVybiB0aGlzLl9taWRpRGF0YX1nZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fbWlkaURhdGE/LmR1cmF0aW9uPz8wfV9zb25nSW5kZXg9MDtnZXQgc29uZ0luZGV4KCl7cmV0dXJuIHRoaXMuX3NvbmdJbmRleH1zZXQgc29uZ0luZGV4KGUpe3RoaXMuX3NvbmdJbmRleD1lLHRoaXMuX3NvbmdJbmRleD1NYXRoLm1heCgwLGUldGhpcy5zb25ncy5sZW5ndGgpLHRoaXMubG9hZEN1cnJlbnRTb25nKCl9X3NodWZmbGVNb2RlPSExO2dldCBzaHVmZmxlTW9kZSgpe3JldHVybiB0aGlzLl9zaHVmZmxlTW9kZX1zZXQgc2h1ZmZsZU1vZGUoZSl7dGhpcy5fc2h1ZmZsZU1vZGU9ZSxlPyh0aGlzLnNodWZmbGVTb25nSW5kZXhlcygpLHRoaXMuX3NvbmdJbmRleD0wLHRoaXMubG9hZEN1cnJlbnRTb25nKCkpOnRoaXMuX3NvbmdJbmRleD10aGlzLnNodWZmbGVkU29uZ0luZGV4ZXNbdGhpcy5fc29uZ0luZGV4XX1fcGxheWJhY2tSYXRlPTE7Z2V0IHBsYXliYWNrUmF0ZSgpe3JldHVybiB0aGlzLl9wbGF5YmFja1JhdGV9c2V0IHBsYXliYWNrUmF0ZShlKXtsZXQgQT10aGlzLmN1cnJlbnRUaW1lO3RoaXMuX3BsYXliYWNrUmF0ZT1lLHRoaXMuY3VycmVudFRpbWU9QX1nZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5wYXVzZWRUaW1lIT09dm9pZCAwP3RoaXMucGF1c2VkVGltZToodGhpcy5zeW50aC5jdXJyZW50U3ludGhUaW1lLXRoaXMuYWJzb2x1dGVTdGFydFRpbWUpKnRoaXMuX3BsYXliYWNrUmF0ZX1zZXQgY3VycmVudFRpbWUoZSl7aWYodGhpcy5fbWlkaURhdGEpaWYodGhpcy5wYXVzZWQmJih0aGlzLnBhdXNlZFRpbWU9ZSksZT50aGlzLl9taWRpRGF0YS5kdXJhdGlvbnx8ZTwwKXRoaXMuc2tpcFRvRmlyc3ROb3RlT24/dGhpcy5zZXRUaW1lVGlja3ModGhpcy5fbWlkaURhdGEuZmlyc3ROb3RlT24tMSk6dGhpcy5zZXRUaW1lVGlja3MoMCk7ZWxzZSBpZih0aGlzLnNraXBUb0ZpcnN0Tm90ZU9uJiZlPHRoaXMuZmlyc3ROb3RlVGltZSl7dGhpcy5zZXRUaW1lVGlja3ModGhpcy5fbWlkaURhdGEuZmlyc3ROb3RlT24tMSk7cmV0dXJufWVsc2V7aWYodGhpcy5wbGF5aW5nTm90ZXM9W10sdGhpcy5jYWxsRXZlbnQoInRpbWVDaGFuZ2UiLHtuZXdUaW1lOmV9KSx0aGlzLl9taWRpRGF0YS5kdXJhdGlvbj09PTApe3NBKCJObyBkdXJhdGlvbiEiKSx0aGlzLmNhbGxFdmVudCgicGF1c2UiLHtpc0ZpbmlzaGVkOiEwfSk7cmV0dXJufXRoaXMuc2V0VGltZVRvKGUpLHRoaXMucmVjYWxjdWxhdGVTdGFydFRpbWUoZSl9fWdldCBwYXVzZWQoKXtyZXR1cm4gdGhpcy5wYXVzZWRUaW1lIT09dm9pZCAwfXBsYXkoKXtpZighdGhpcy5fbWlkaURhdGEpdGhyb3cgbmV3IEVycm9yKCJObyBzb25ncyBsb2FkZWQgaW4gdGhlIHNlcXVlbmNlciEiKTt0aGlzLmN1cnJlbnRUaW1lPj10aGlzLl9taWRpRGF0YS5kdXJhdGlvbiYmKHRoaXMuY3VycmVudFRpbWU9MCksdGhpcy5wYXVzZWQmJnRoaXMucmVjYWxjdWxhdGVTdGFydFRpbWUodGhpcy5wYXVzZWRUaW1lPz8wKSx0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrfHx0aGlzLnBsYXlpbmdOb3Rlcy5mb3JFYWNoKGU9Pnt0aGlzLnN5bnRoLm5vdGVPbihlLmNoYW5uZWwsZS5taWRpTm90ZSxlLnZlbG9jaXR5KX0pLHRoaXMucGF1c2VkVGltZT12b2lkIDB9cGF1c2UoKXt0aGlzLnBhdXNlSW50ZXJuYWwoITEpfWxvYWROZXdTb25nTGlzdChlKXt0aGlzLnNvbmdzPWUsISh0aGlzLnNvbmdzLmxlbmd0aDwxKSYmKHRoaXMuX3NvbmdJbmRleD0wLHRoaXMuc2h1ZmZsZVNvbmdJbmRleGVzKCksdGhpcy5jYWxsRXZlbnQoInNvbmdMaXN0Q2hhbmdlIix7bmV3U29uZ0xpc3Q6Wy4uLnRoaXMuc29uZ3NdfSksdGhpcy5sb2FkQ3VycmVudFNvbmcoKSl9Y2FsbEV2ZW50KGUsQSl7dGhpcz8ub25FdmVudENhbGw/Lih7dHlwZTplLGRhdGE6QX0pfXBhdXNlSW50ZXJuYWwoZSl7dGhpcy5wYXVzZWR8fCh0aGlzLnN0b3AoKSx0aGlzLmNhbGxFdmVudCgicGF1c2UiLHtpc0ZpbmlzaGVkOmV9KSl9c29uZ0lzRmluaXNoZWQoKXtpZih0aGlzLnNvbmdzLmxlbmd0aD09PTEpe3RoaXMucGF1c2VJbnRlcm5hbCghMCk7cmV0dXJufXRoaXMuX3NvbmdJbmRleCsrLHRoaXMuX3NvbmdJbmRleCU9dGhpcy5zb25ncy5sZW5ndGgsdGhpcy5sb2FkQ3VycmVudFNvbmcoKX1zdG9wKCl7dGhpcy5wYXVzZWRUaW1lPXRoaXMuY3VycmVudFRpbWU7Zm9yKGxldCBlPTA7ZTwxNjtlKyspdGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKGUsUy5zdXN0YWluUGVkYWwsMCk7aWYodGhpcy5zeW50aC5zdG9wQWxsQ2hhbm5lbHMoKSx0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrKXtmb3IobGV0IGUgb2YgdGhpcy5wbGF5aW5nTm90ZXMpdGhpcy5zZW5kTUlESU1lc3NhZ2UoW00ubm90ZU9mZnxlLmNoYW5uZWwlMTYsZS5taWRpTm90ZV0pO2ZvcihsZXQgZT0wO2U8Um47ZSsrKXRoaXMuc2VuZE1JRElDQyhlLFMuYWxsTm90ZXNPZmYsMCl9fWZpbmRGaXJzdEV2ZW50SW5kZXgoKXtsZXQgZT0wLEE9MS8wO3JldHVybiB0aGlzLl9taWRpRGF0YS50cmFja3MuZm9yRWFjaCgodCxuKT0+e2lmKHRoaXMuZXZlbnRJbmRleGVzW25dPj10LmV2ZW50cy5sZW5ndGgpcmV0dXJuO2xldCBzPXQuZXZlbnRzW3RoaXMuZXZlbnRJbmRleGVzW25dXTtzLnRpY2tzPEEmJihlPW4sQT1zLnRpY2tzKX0pLGV9YWRkTmV3TUlESVBvcnQoKXtmb3IobGV0IGU9MDtlPDE2O2UrKyl0aGlzLnN5bnRoLmNyZWF0ZU1JRElDaGFubmVsKCl9c2VuZE1JRElNZXNzYWdlKGUpe3RoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2smJnRoaXMuY2FsbEV2ZW50KCJtaWRpTWVzc2FnZSIse21lc3NhZ2U6ZX0pfXNlbmRNSURJUmVzZXQoKXt0aGlzLnNlbmRNSURJTWVzc2FnZShbTS5yZXNldF0pO2ZvcihsZXQgZT0wO2U8Um47ZSsrKXRoaXMuc2VuZE1JRElNZXNzYWdlKFtNLmNvbnRyb2xsZXJDaGFuZ2V8ZSxTLmFsbFNvdW5kT2ZmLDBdKSx0aGlzLnNlbmRNSURJTWVzc2FnZShbTS5jb250cm9sbGVyQ2hhbmdlfGUsUy5yZXNldEFsbENvbnRyb2xsZXJzLDBdKX1sb2FkQ3VycmVudFNvbmcoKXtsZXQgZT10aGlzLl9zb25nSW5kZXg7dGhpcy5fc2h1ZmZsZU1vZGUmJihlPXRoaXMuc2h1ZmZsZWRTb25nSW5kZXhlc1t0aGlzLl9zb25nSW5kZXhdKSx0aGlzLmxvYWROZXdTZXF1ZW5jZSh0aGlzLnNvbmdzW2VdKX1zaHVmZmxlU29uZ0luZGV4ZXMoKXtsZXQgZT10aGlzLnNvbmdzLm1hcCgoQSx0KT0+dCk7Zm9yKHRoaXMuc2h1ZmZsZWRTb25nSW5kZXhlcz1bXTtlLmxlbmd0aD4wOyl7bGV0IEE9ZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZS5sZW5ndGgpXTt0aGlzLnNodWZmbGVkU29uZ0luZGV4ZXMucHVzaChBKSxlLnNwbGljZShlLmluZGV4T2YoQSksMSl9fXNlbmRNSURJQ0MoZSxBLHQpe2UlPTE2LHRoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2smJnRoaXMuc2VuZE1JRElNZXNzYWdlKFtNLmNvbnRyb2xsZXJDaGFuZ2V8ZSxBLHRdKX1zZW5kTUlESVByb2dyYW1DaGFuZ2UoZSxBKXtlJT0xNix0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrJiZ0aGlzLnNlbmRNSURJTWVzc2FnZShbTS5wcm9ncmFtQ2hhbmdlfGUsQV0pfXNlbmRNSURJUGl0Y2hXaGVlbChlLEEsdCl7ZSU9MTYsdGhpcy5leHRlcm5hbE1JRElQbGF5YmFjayYmdGhpcy5zZW5kTUlESU1lc3NhZ2UoW00ucGl0Y2hXaGVlbHxlLHQsQV0pfXNldFRpbWVUaWNrcyhlKXtpZighdGhpcy5fbWlkaURhdGEpcmV0dXJuO3RoaXMucGxheWluZ05vdGVzPVtdO2xldCBBPXRoaXMuX21pZGlEYXRhLm1pZGlUaWNrc1RvU2Vjb25kcyhlKTt0aGlzLmNhbGxFdmVudCgidGltZUNoYW5nZSIse25ld1RpbWU6QX0pO2xldCB0PXRoaXMuc2V0VGltZVRvKDAsZSk7dGhpcy5yZWNhbGN1bGF0ZVN0YXJ0VGltZSh0aGlzLnBsYXllZFRpbWUpfXJlY2FsY3VsYXRlU3RhcnRUaW1lKGUpe3RoaXMuYWJzb2x1dGVTdGFydFRpbWU9dGhpcy5zeW50aC5jdXJyZW50U3ludGhUaW1lLWUvdGhpcy5fcGxheWJhY2tSYXRlfX0sbHQ9bHQhPT12b2lkIDA/bHQ6e30sa3M9ITEsYWE7bHQuaXNJbml0aWFsaXplZD1uZXcgUHJvbWlzZShlPT5hYT1lKTt2YXIgRm89ZnVuY3Rpb24oZSl7dmFyIEEsdCxuLHMsYSxyLEksbz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLGc9IiIsQj0wO2U9ZS5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywiIik7ZG8gcz1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSksYT1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSkscj1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSksST1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSksQT1zPDwyfGE+PjQsdD0oMTUmYSk8PDR8cj4+MixuPSgzJnIpPDw2fEksZys9U3RyaW5nLmZyb21DaGFyQ29kZShBKSxyIT09NjQmJihnKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpKSxJIT09NjQmJihnKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4pKTt3aGlsZShCPGUubGVuZ3RoKTtyZXR1cm4gZ307KGZ1bmN0aW9uKCl7dmFyIGUsQSx0LG4scyxhLHIsSSxvLGcsQixkLGgsQyxRLG0seSxGLGssRCx2LEwsRT1FIT09dm9pZCAwP0U6e307RS53YXNtQmluYXJ5PVVpbnQ4QXJyYXkuZnJvbShGbygiQUdGemJRRUFBQUFCcFFFWVlBSi9md0YvWUFGL0FHQUFBWDlnQkg5L2YzOEFZQUFBWUFOL2YzOEJmMkFCZndGL1lBSi9md0JnQm45L2YzOS9md0YvWUFSL2YzOS9BWDlnQlg5L2YzOS9BWDlnQjM5L2YzOS9mMzhCZjJBR2YzOS9mMzkvQUdBSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBZC9mMzkvZjM5L0FHQURmMzkvQUdBQmZ3RjlZQUY5QVgxZ0FueC9BWHhnQW54L0FYOWdBM3g4ZndGOFlBSjhmQUY4WUFGOEFYd0NuZ0lQQTJWdWRnWnRaVzF2Y25rQ0FJQUNBMlZ1ZGdWMFlXSnNaUUZ3QVFRRUEyVnVkZ2wwWVdKc1pVSmhjMlVEZndBRFpXNTJEa1JaVGtGTlNVTlVUMUJmVUZSU0EzOEFBMlZ1ZGdoVFZFRkRTMVJQVUFOL0FBTmxibllKVTFSQlEwdGZUVUZZQTM4QUJtZHNiMkpoYkFoSmJtWnBibWwwZVFOOEFBTmxibllGWVdKdmNuUUFBUU5sYm5ZTlpXNXNZWEpuWlUxbGJXOXllUUFDQTJWdWRnNW5aWFJVYjNSaGJFMWxiVzl5ZVFBQ0EyVnVkaGRoWW05eWRFOXVRMkZ1Ym05MFIzSnZkMDFsYlc5eWVRQUNBMlZ1ZGc1ZlgxOWhjM05sY25SZlptRnBiQUFEQTJWdWRndGZYMTl6WlhSRmNuSk9id0FCQTJWdWRnWmZZV0p2Y25RQUJBTmxibllXWDJWdGMyTnlhWEIwWlc1ZmJXVnRZM0I1WDJKcFp3QUZBM2QyQmdZQ0FRY0hBUUlCQVFjQkNBY0ZBQWtHQ1FvSEJnWUdCZ0VGQmdJQkJnWUtBQWdMQUFZR0JnWUdCZ1lCQUFvTURBTUdCUUFOQ0FvSkFBd09EQThPQVFBR0JnY0VBQkFKRUFFUkFBQURCUXdBQUFNSEJ4SUdBUUFBQndJRkV3TU9CdzhIQmdZUUZBb1ZFeFlYRnhjWEZnUUZCUVlGQUFZa0IzOEJJd0VMZndFakFndC9BU01EQzM4QlFRQUxmd0ZCQUF0OEFTTUVDMzhCUVFBTEI5TUNGUkJmWDJkeWIzZFhZWE50VFdWdGIzSjVBQWdSWDE5ZlpYSnlibTlmYkc5allYUnBiMjRBWXdWZlpuSmxaUUJmQjE5dFlXeHNiMk1BWGdkZmJXVnRZM0I1QUhrSFgyMWxiWE5sZEFCNkJWOXpZbkpyQUhzWFgzTjBZbDkyYjNKaWFYTmZhbk5mWTJoaGJtNWxiSE1BSmhSZmMzUmlYM1p2Y21KcGMxOXFjMTlqYkc5elpRQWxGVjl6ZEdKZmRtOXlZbWx6WDJwelgyUmxZMjlrWlFBb0UxOXpkR0pmZG05eVltbHpYMnB6WDI5d1pXNEFKQnBmYzNSaVgzWnZjbUpwYzE5cWMxOXpZVzF3YkdWZmNtRjBaUUFuQzJSNWJrTmhiR3hmYVdscEFId1RaWE4wWVdKc2FYTm9VM1JoWTJ0VGNHRmpaUUFNQzJkbGRGUmxiWEJTWlhRd0FBOExjblZ1VUc5emRGTmxkSE1BZUF0elpYUlVaVzF3VW1WME1BQU9DSE5sZEZSb2NtVjNBQTBLYzNSaFkydEJiR3h2WXdBSkRITjBZV05yVW1WemRHOXlaUUFMQ1hOMFlXTnJVMkYyWlFBS0NRb0JBQ01BQ3dSOVZGbDlDc2IyQTNZR0FDQUFRQUFMR3dFQmZ5TUdJUUVqQmlBQWFpUUdJd1pCRDJwQmNIRWtCaUFCQ3dRQUl3WUxCZ0FnQUNRR0N3b0FJQUFrQmlBQkpBY0xFQUFqQ0VVRVFDQUFKQWdnQVNRSkN3c0dBQ0FBSkFzTEJBQWpDd3NSQUNBQUJFQWdBQkFSSUFBZ0FCQVNDd3Z2QndFS2Z5QUFRWUFEYWlFSElBY29BZ0FoQlFKQUlBVUVRQ0FBUWZ3QmFpRUVJQVFvQWdBaEFTQUJRUUJLQkVBZ0FFSHdBR29oQ0FOQUlBVWdBa0VZYkdwQkVHb2hDU0FKS0FJQUlRRWdBUVJBSUFnb0FnQWhBeUFGSUFKQkdHeHFRUTFxSVFvZ0NpMEFBQ0VHSUFaQi93RnhJUVlnQXlBR1FiQVFiR3BCQkdvaEF5QURLQUlBSVFNZ0EwRUFTZ1JBUVFBaEF3TkFJQUVnQTBFQ2RHb2hBU0FCS0FJQUlRRWdBQ0FCRUJJZ0EwRUJhaUVESUFnb0FnQWhBU0FLTFFBQUlRWWdCa0gvQVhFaEJpQUJJQVpCc0JCc2FrRUVhaUVCSUFFb0FnQWhCaUFKS0FJQUlRRWdBeUFHU0EwQUN3c2dBQ0FCRUJJTElBVWdBa0VZYkdwQkZHb2hBU0FCS0FJQUlRRWdBQ0FCRUJJZ0FrRUJhaUVDSUFRb0FnQWhBU0FDSUFGT0RRTWdCeWdDQUNFRkRBQUFDd0FMQ3dzZ0FFSHdBR29oQXlBREtBSUFJUUVnQVFSQUlBQkI3QUJxSVFVZ0JTZ0NBQ0VDSUFKQkFFb0VRRUVBSVFJRFFBSkFJQUVnQWtHd0VHeHFRUWhxSVFRZ0JDZ0NBQ0VFSUFBZ0JCQVNJQUVnQWtHd0VHeHFRUnhxSVFRZ0JDZ0NBQ0VFSUFBZ0JCQVNJQUVnQWtHd0VHeHFRU0JxSVFRZ0JDZ0NBQ0VFSUFBZ0JCQVNJQUVnQWtHd0VHeHFRYVFRYWlFRUlBUW9BZ0FoQkNBQUlBUVFFaUFCSUFKQnNCQnNha0dvRUdvaEFTQUJLQUlBSVFFZ0FVVWhCQ0FCUVh4cUlRRkJBQ0FCSUFRYklRRWdBQ0FCRUJJZ0FrRUJhaUVDSUFVb0FnQWhBU0FDSUFGT0RRQWdBeWdDQUNFQkRBRUxDeUFES0FJQUlRRUxJQUFnQVJBU0N5QUFRZmdCYWlFQklBRW9BZ0FoQVNBQUlBRVFFaUFIS0FJQUlRRWdBQ0FCRUJJZ0FFR0lBMm9oQXlBREtBSUFJUUVnQVFSQUlBQkJoQU5xSVFVZ0JTZ0NBQ0VDSUFKQkFFb0VRRUVBSVFJRFFDQUJJQUpCS0d4cVFRUnFJUUVnQVNnQ0FDRUJJQUFnQVJBU0lBSkJBV29oQWlBRktBSUFJUWNnQXlnQ0FDRUJJQUlnQjBnTkFBc0xJQUFnQVJBU0N5QUFRUVJxSVFJZ0FpZ0NBQ0VCSUFGQkFFb0VRRUVBSVFFRFFDQUFRWlFHYWlBQlFRSjBhaUVESUFNb0FnQWhBeUFBSUFNUUVpQUFRWlFIYWlBQlFRSjBhaUVESUFNb0FnQWhBeUFBSUFNUUVpQUFRZGdIYWlBQlFRSjBhaUVESUFNb0FnQWhBeUFBSUFNUUVpQUJRUUZxSVFFZ0FpZ0NBQ0VESUFFZ0EwZ2hBeUFCUVJCSklRVWdCU0FEY1EwQUN3dEJBQ0VCQTBBZ0FFR2dDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFR29DR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFR3dDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFRzRDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFSEFDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FVRUJhaUVCSUFGQkFrY05BQXNMR3dBZ0FFSEVBR29oQUNBQUtBSUFJUUFnQUVVRVFDQUJFRjhMQzN3QkFYOGdBRUhVQjJvaEFTQUJRUUEyQWdBZ0FFR0FDMm9oQVNBQlFRQTJBZ0FnQUVINENtb2hBU0FCUVFBMkFnQWdBRUdjQ0dvaEFTQUJRUUEyQWdBZ0FFSFZDbW9oQVNBQlFRQTZBQUFnQUVIOENtb2hBU0FCUVFBMkFnQWdBRUhVQzJvaEFTQUJRUUEyQWdBZ0FFSFlDMm9oQUNBQVFRQTJBZ0FMOEFRQkIzOGpCaUVMSXdaQkVHb2tCaUFMUVFocUlRY2dDMEVFYWlFS0lBc2hDQ0FBUVNScUlRWWdCaXdBQUNFR0FuOGdCZ1IvSUFCQmdBdHFJUVlnQmlnQ0FDRUdJQVpCZjBvRVFDQUZRUUEyQWdBZ0FDQUJJQUlRRmd3Q0N5QUFRUlJxSVFZZ0JpQUJOZ0lBSUFFZ0Ftb2hBaUFBUVJ4cUlRa2dDU0FDTmdJQUlBQkIyQUJxSVFJZ0FrRUFOZ0lBSUFCQkFCQVhJUWtnQ1VVRVFDQUZRUUEyQWdCQkFBd0NDeUFBSUFjZ0NDQUtFQmdoQ1NBSkJFQWdCeWdDQUNFQ0lBZ29BZ0FoQ1NBS0tBSUFJUWdnQUNBQ0lBa2dDQkFhSVFvZ0J5QUtOZ0lBSUFCQkJHb2hBaUFDS0FJQUlRZ2dDRUVBU2dSQVFRQWhBZ05BSUFCQmxBWnFJQUpCQW5ScUlRY2dCeWdDQUNFSElBY2dDVUVDZEdvaEJ5QUFRZFFHYWlBQ1FRSjBhaUVNSUF3Z0J6WUNBQ0FDUVFGcUlRSWdBaUFJU0EwQUN3c2dBd1JBSUFNZ0NEWUNBQXNnQlNBS05nSUFJQUJCMUFacUlRQWdCQ0FBTmdJQUlBWW9BZ0FoQUNBQUlBRnJEQUlMQWtBQ1FBSkFBa0FDUUNBQ0tBSUFJZ05CSUdzT0JBRUNBZ0FDQ3lBQ1FRQTJBZ0FnQUVIVUFHb2hBaUFBRUJraEF3SkFJQU5CZjBjRVFBTkFJQUlvQWdBaEF5QUREUUlnQUJBWklRTWdBMEYvUncwQUN3c0xJQVZCQURZQ0FDQUdLQUlBSVFBZ0FDQUJhd3dGQ3d3QkN3d0JDeUFBUWRRSGFpRUVJQVFvQWdBaEJDQUVSUVJBSUFKQkFEWUNBQ0FBUWRRQWFpRUNJQUFRR1NFREFrQWdBMEYvUndSQUEwQWdBaWdDQUNFRElBTU5BaUFBRUJraEF5QURRWDlIRFFBTEN3c2dCVUVBTmdJQUlBWW9BZ0FoQUNBQUlBRnJEQU1MQ3lBQUVCTWdBaUFETmdJQUlBVkJBRFlDQUVFQkJTQUFRUUlRRlVFQUN3c2hBQ0FMSkFZZ0FBc0pBQ0FBSUFFMkFsZ0xwZ29CREg4Z0FFR0FDMm9oQ2lBS0tBSUFJUVlDUUFKQUFrQWdCa0VBVEEwQUEwQWdBQ0FFUVJSc2FrR1FDMm9oQXlBRFFRQTJBZ0FnQkVFQmFpRUVJQVFnQmtnTkFBc2dCa0VFU0EwQURBRUxJQUpCQkVnRVFFRUFJUUlGSUFKQmZXb2hCa0VBSVFJRFFBSkFJQUVnQW1vaEJDQUVMQUFBSVFNZ0EwSFBBRVlFUUNBRVFjQVRRUVFRWkNFRUlBUkZCRUFnQWtFYWFpRUpJQWtnQms0TkFpQUNRUnRxSVFjZ0FTQUphaUVMSUFzc0FBQWhBeUFEUWY4QmNTRUZJQWNnQldvaEJDQUVJQVpPRFFJZ0JVRWJhaUVFSUFNRVFFRUFJUU1EUUNBRElBZHFJUWdnQVNBSWFpRUlJQWd0QUFBaENDQUlRZjhCY1NFSUlBUWdDR29oQkNBRFFRRnFJUU1nQXlBRlJ3MEFDeUFFSVFNRklBUWhBd3RCQUNFRVFRQWhCUU5BSUFVZ0Ftb2hCeUFCSUFkcUlRY2dCeXdBQUNFSElBUWdCeEFwSVFRZ0JVRUJhaUVGSUFWQkZrY05BQXRCRmlFRkEwQWdCRUVBRUNraEJDQUZRUUZxSVFVZ0JVRWFSdzBBQ3lBS0tBSUFJUVVnQlVFQmFpRUhJQW9nQnpZQ0FDQURRV1pxSVFNZ0FDQUZRUlJzYWtHSUMyb2hDQ0FJSUFNMkFnQWdBQ0FGUVJSc2FrR01DMm9oQXlBRElBUTJBZ0FnQWtFV2FpRUVJQUVnQkdvaEJDQUVMUUFBSVFRZ0JFSC9BWEVoQkNBQ1FSZHFJUU1nQVNBRGFpRURJQU10QUFBaEF5QURRZjhCY1NFRElBTkJDSFFoQXlBRElBUnlJUVFnQWtFWWFpRURJQUVnQTJvaEF5QURMUUFBSVFNZ0EwSC9BWEVoQXlBRFFSQjBJUU1nQkNBRGNpRUVJQUpCR1dvaEF5QUJJQU5xSVFNZ0F5MEFBQ0VESUFOQi93RnhJUU1nQTBFWWRDRURJQVFnQTNJaEJDQUFRWVFMYWlBRlFSUnNhaUVESUFNZ0JEWUNBQ0FMTFFBQUlRUWdCRUgvQVhFaEJDQUpJQVJxSVFRZ0FTQUVhaUVFSUFRc0FBQWhCQ0FFUVg5R0JIOUJmd1VnQWtFR2FpRUVJQUVnQkdvaEJDQUVMUUFBSVFRZ0JFSC9BWEVoQkNBQ1FRZHFJUU1nQVNBRGFpRURJQU10QUFBaEF5QURRZjhCY1NFRElBTkJDSFFoQXlBRElBUnlJUVFnQWtFSWFpRURJQUVnQTJvaEF5QURMUUFBSVFNZ0EwSC9BWEVoQXlBRFFSQjBJUU1nQkNBRGNpRUVJQUpCQ1dvaEF5QUJJQU5xSVFNZ0F5MEFBQ0VESUFOQi93RnhJUU1nQTBFWWRDRURJQVFnQTNJTElRUWdBQ0FGUVJSc2FrR1VDMm9oQXlBRElBUTJBZ0FnQUNBRlFSUnNha0dRQzJvaEJDQUVJQWsyQWdBZ0IwRUVSZ1JBSUFZaEFnd0RDd3NMSUFKQkFXb2hBaUFDSUFaSURRRWdCaUVDQ3dzZ0NpZ0NBQ0VHSUFaQkFFb05BUXNNQVFzZ0FpRUVJQVloQWtFQUlRWURRQUpBSUFCQmhBdHFJQVpCRkd4cUlRa2dBQ0FHUVJSc2FrR1FDMm9oQXlBREtBSUFJUXNnQUNBR1FSUnNha0dJQzJvaERTQU5LQUlBSVFnZ0JDQUxheUVESUFnZ0Ewb2hCU0FESUFnZ0JSc2hCeUFBSUFaQkZHeHFRWXdMYWlFT0lBNG9BZ0FoQXlBSFFRQktCRUJCQUNFRkEwQWdCU0FMYWlFTUlBRWdER29oRENBTUxBQUFJUXdnQXlBTUVDa2hBeUFGUVFGcUlRVWdCU0FIU0EwQUN3c2dDQ0FIYXlFRklBMGdCVFlDQUNBT0lBTTJBZ0FnQlFSQUlBWkJBV29oQmdVZ0NTZ0NBQ0VGSUFNZ0JVWU5BU0FDUVg5cUlRSWdDaUFDTmdJQUlBa2dBRUdFQzJvZ0FrRVViR29pQWlrQ0FEY0NBQ0FKSUFJcEFnZzNBZ2dnQ1NBQ0tBSVFOZ0lRSUFvb0FnQWhBZ3NnQmlBQ1NBMEJJQVFoQWd3Q0N3c2dCeUFMYWlFQ0lBcEJmellDQUNBQVFkUUhhaUVCSUFGQkFEWUNBQ0FBUWRnS2FpRUJJQUZCZnpZQ0FDQUFJQVpCRkd4cVFaUUxhaUVCSUFFb0FnQWhBU0FBUVpnSWFpRUVJQVFnQVRZQ0FDQUJRWDlISVFFZ0FFR2NDR29oQUNBQUlBRTJBZ0FMSUFJTGhnVUJDSDhnQUVIWUNtb2hBaUFDS0FJQUlRTWdBRUVVYWlFQ0lBSW9BZ0FoQWdKL0FrQWdBMEYvUmdSL1FRRWhBd3dCQlNBQVFkQUlhaUVFSUFRb0FnQWhCUUpBSUFNZ0JVZ0VRQU5BSUFCQjFBaHFJQU5xSVFRZ0JDd0FBQ0VHSUFaQi93RnhJUVFnQWlBRWFpRUNJQVpCZjBjTkFpQURRUUZxSVFNZ0F5QUZTQTBBQ3dzTElBRkJBRWNoQmlBRlFYOXFJUVFnQXlBRVNDRUVJQVlnQkhFRVFDQUFRUlVRRlVFQURBTUxJQUJCSEdvaEJDQUVLQUlBSVFRZ0FpQUVTd1IvSUFCQkFSQVZRUUFGSUFNZ0JVWWhCQ0FEUVg5R0lRTWdCQ0FEY2dSL1FRQWhBd3dEQlVFQkN3c0xEQUVMSUFBb0Fod2hDQ0FBUWRRSGFpRUdJQUZCQUVjaEJDQUNJUUVDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FEUUNBQlFScHFJUVVnQlNBSVR3MEJJQUZCd0JOQkJCQmtJUUlnQWcwQ0lBRkJCR29oQWlBQ0xBQUFJUUlnQWcwRElBTUVRQ0FHS0FJQUlRSWdBZ1JBSUFGQkJXb2hBaUFDTEFBQUlRSWdBa0VCY1NFQ0lBSU5CZ3NGSUFGQkJXb2hBaUFDTEFBQUlRSWdBa0VCY1NFQ0lBSkZEUVlMSUFVc0FBQWhBaUFDUWY4QmNTRUhJQUZCRzJvaENTQUpJQWRxSVFFZ0FTQUlTdzBHQWtBZ0FnUkFRUUFoQWdOQUlBa2dBbW9oQXlBRExBQUFJUVVnQlVIL0FYRWhBeUFCSUFOcUlRRWdCVUYvUncwQ0lBSkJBV29oQWlBQ0lBZEpEUUFMQlVFQUlRSUxDeUFIUVg5cUlRTWdBaUFEU0NFRElBUWdBM0VOQnlBQklBaExEUWhCQVNBQ0lBZEhEUW9hUVFBaEF3d0FBQXNBQ3lBQVFRRVFGVUVBREFnTElBQkJGUkFWUVFBTUJ3c2dBRUVWRUJWQkFBd0dDeUFBUVJVUUZVRUFEQVVMSUFCQkZSQVZRUUFNQkFzZ0FFRUJFQlZCQUF3REN5QUFRUlVRRlVFQURBSUxJQUJCQVJBVkMwRUFDeUVBSUFBTGV3RUZmeU1HSVFVakJrRVFhaVFHSUFWQkNHb2hCaUFGUVFScUlRUWdCU0VISUFBZ0FpQUVJQU1nQlNBR0VDb2hCQ0FFQkg4Z0JpZ0NBQ0VFSUFCQmtBTnFJQVJCQm14cUlRZ2dBaWdDQUNFR0lBTW9BZ0FoQkNBSEtBSUFJUU1nQUNBQklBZ2dCaUFFSUFNZ0FoQXJCVUVBQ3lFQUlBVWtCaUFBQ3hzQkFYOGdBQkF1SVFFZ0FFSG9DbW9oQUNBQVFRQTJBZ0FnQVF2NUF3SU1md045SUFCQjFBZHFJUWtnQ1NnQ0FDRUdJQVlFZnlBQUlBWVFTQ0VMSUFCQkJHb2hCQ0FFS0FJQUlRb2dDa0VBU2dSQUlBWkJBRW9oRENBR1FYOXFJUTBEUUNBTUJFQWdBRUdVQm1vZ0JVRUNkR29vQWdBaERpQUFRWlFIYWlBRlFRSjBhaWdDQUNFUFFRQWhCQU5BSUFRZ0Ftb2hCeUFPSUFkQkFuUnFJUWNnQnlvQ0FDRVFJQXNnQkVFQ2RHb2hDQ0FJS2dJQUlSRWdFQ0FSbENFUUlBOGdCRUVDZEdvaENDQUlLZ0lBSVJFZ0RTQUVheUVJSUFzZ0NFRUNkR29oQ0NBSUtnSUFJUklnRVNBU2xDRVJJQkFnRVpJaEVDQUhJQkE0QWdBZ0JFRUJhaUVFSUFRZ0JrY05BQXNMSUFWQkFXb2hCU0FGSUFwSURRQUxDeUFKS0FJQUJTQUFRUVJxSVFRZ0JDZ0NBQ0VLUVFBTElRc2dBU0FEYXlFSElBa2dCellDQUNBS1FRQktCRUFnQVNBRFNpRUpRUUFoQlFOQUlBa0VRQ0FBUVpRR2FpQUZRUUowYWlnQ0FDRU1JQUJCbEFkcUlBVkJBblJxS0FJQUlRMUJBQ0VHSUFNaEJBTkFJQXdnQkVFQ2RHb2hCQ0FFS0FJQUlRUWdEU0FHUVFKMGFpRU9JQTRnQkRZQ0FDQUdRUUZxSVFZZ0JpQURhaUVFSUFZZ0IwY05BQXNMSUFWQkFXb2hCU0FGSUFwSURRQUxDeUFMUlNFRUlBRWdBMGdoQlNBQklBTWdCUnNoQVNBQklBSnJJUUVnQUVIOENtb2hBQ0FFQkVCQkFDRUJCU0FBS0FJQUlRSWdBaUFCYWlFQ0lBQWdBallDQUFzZ0FRdlJBUUVDZnlNR0lRWWpCa0hnQzJva0JpQUdJUVVnQlNBRUVCd2dCVUVVYWlFRUlBUWdBRFlDQUNBQUlBRnFJUUVnQlVFY2FpRUVJQVFnQVRZQ0FDQUZRU1JxSVFFZ0FVRUJPZ0FBSUFVUUhTRUJJQUVFUUNBRkVCNGhBU0FCQkVBZ0FTQUZRZHdMRUhrYUlBRkJGR29oQkNBRUtBSUFJUVFnQkNBQWF5RUFJQUlnQURZQ0FDQURRUUEyQWdBRklBVVFFVUVBSVFFTEJTQUZRZFFBYWlFQUlBQW9BZ0FoQUNBQVJTRUFJQVZCMkFCcUlRRWdBU2dDQUNFQklBTWdBVUVCSUFBYk5nSUFRUUFoQVFzZ0JpUUdJQUVMclFFQ0FYOEJmaUFBUVFCQjNBc1FlaG9nQVFSQUlBQkJ4QUJxSVFJZ0FTa0NBQ0VESUFJZ0F6Y0NBQ0FBUWNnQWFpRUNJQU5DSUlnaEF5QURweUVCSUFGQkEyb2hBU0FCUVh4eElRRWdBaUFCTmdJQUlBQkIwQUJxSVFJZ0FpQUJOZ0lBQ3lBQVFkUUFhaUVCSUFGQkFEWUNBQ0FBUWRnQWFpRUJJQUZCQURZQ0FDQUFRUlJxSVFFZ0FVRUFOZ0lBSUFCQjhBQnFJUUVnQVVFQU5nSUFJQUJCZ0F0cUlRQWdBRUYvTmdJQUM5Qk5BaU4vQTMwakJpRVpJd1pCZ0FocUpBWWdHVUh3QjJvaEFpQVpJZ3hCN0FkcUlSMGdERUhvQjJvaEhpQUFFREVoQVFKL0lBRUVRQ0FBUWRNS2FpRUJJQUV0QUFBaEFTQUJRZjhCY1NFQklBRkJBbkVoQXlBRFJRUkFJQUJCSWhBVlFRQU1BZ3NnQVVFRWNTRURJQU1FUUNBQVFTSVFGVUVBREFJTElBRkJBWEVoQVNBQkJFQWdBRUVpRUJWQkFBd0NDeUFBUWRBSWFpRUJJQUVvQWdBaEFTQUJRUUZIQkVBZ0FFRWlFQlZCQUF3Q0N5QUFRZFFJYWlFQkFrQUNRQ0FCTEFBQVFSNXJJZ0VFUUNBQlFTSkdCRUFNQWdVTUF3c0FDeUFBRURBaEFTQUJRZjhCY1VFQlJ3UkFJQUJCSWhBVlFRQU1CQXNnQUNBQ1FRWVFJaUVCSUFGRkJFQWdBRUVLRUJWQkFBd0VDeUFDRUVraEFTQUJSUVJBSUFCQkloQVZRUUFNQkFzZ0FCQWpJUUVnQVFSQUlBQkJJaEFWUVFBTUJBc2dBQkF3SVFFZ0FVSC9BWEVoQXlBQVFRUnFJUk1nRXlBRE5nSUFJQUZCL3dGeFJRUkFJQUJCSWhBVlFRQU1CQXNnQVVIL0FYRkJFRW9FUUNBQVFRVVFGVUVBREFRTElBQVFJeUVCSUFBZ0FUWUNBQ0FCUlFSQUlBQkJJaEFWUVFBTUJBc2dBQkFqR2lBQUVDTWFJQUFRSXhvZ0FCQXdJUU1nQTBIL0FYRWhCQ0FFUVE5eElRRWdCRUVFZGlFRVFRRWdBWFFoQlNBQVFlUUFhaUVhSUJvZ0JUWUNBRUVCSUFSMElRVWdBRUhvQUdvaEZDQVVJQVUyQWdBZ0FVRjZhaUVGSUFWQkIwc0VRQ0FBUVJRUUZVRUFEQVFMSUFOQm9IOXFRUmgwUVJoMUlRTWdBMEVBU0FSQUlBQkJGQkFWUVFBTUJBc2dBU0FFU3dSQUlBQkJGQkFWUVFBTUJBc2dBQkF3SVFFZ0FVRUJjU0VCSUFGRkJFQWdBRUVpRUJWQkFBd0VDeUFBRURFaEFVRUFJQUZGRFFNYUlBQVFTaUVCUVFBZ0FVVU5BeG9nQUVIVUNtb2hBd05BSUFBUUx5RUJJQUFnQVJCTElBTkJBRG9BQUNBQkRRQUxJQUFRU2lFQlFRQWdBVVVOQXhvZ0FFRWthaUVCSUFFc0FBQWhBUUpBSUFFRVFDQUFRUUVRRnlFQklBRU5BU0FBUWRnQWFpRUFJQUFvQWdBaEFVRUFJQUZCRlVjTkJSb2dBRUVVTmdJQVFRQU1CUXNMRUV3Z0FCQVpJUUVnQVVFRlJ3UkFJQUJCRkJBVlFRQU1CQXRCQUNFQkEwQWdBQkFaSVFNZ0EwSC9BWEVoQXlBQ0lBRnFJUVFnQkNBRE9nQUFJQUZCQVdvaEFTQUJRUVpIRFFBTElBSVFTU0VCSUFGRkJFQWdBRUVVRUJWQkFBd0VDeUFBUVFnUUxDRUJJQUZCQVdvaEFTQUFRZXdBYWlFTklBMGdBVFlDQUNBQlFiQVFiQ0VCSUFBZ0FSQk5JUUVnQUVId0FHb2hGU0FWSUFFMkFnQWdBVVVFUUNBQVFRTVFGVUVBREFRTElBMG9BZ0FoQWlBQ1FiQVFiQ0VDSUFGQkFDQUNFSG9hSUEwb0FnQWhBUUpBSUFGQkFFb0VRQ0FBUVJCcUlSWURRQUpBSUJVb0FnQWhDaUFLSUFaQnNCQnNhaUVKSUFCQkNCQXNJUUVnQVVIL0FYRWhBU0FCUWNJQVJ3UkFRVDhoQVF3QkN5QUFRUWdRTENFQklBRkIvd0Z4SVFFZ0FVSERBRWNFUUVIQkFDRUJEQUVMSUFCQkNCQXNJUUVnQVVIL0FYRWhBU0FCUWRZQVJ3UkFRY01BSVFFTUFRc2dBRUVJRUN3aEFTQUFRUWdRTENFQ0lBSkJDSFFoQWlBQlFmOEJjU0VCSUFJZ0FYSWhBU0FKSUFFMkFnQWdBRUVJRUN3aEFTQUFRUWdRTENFQ0lBQkJDQkFzSVFNZ0EwRVFkQ0VESUFKQkNIUWhBaUFDUVlEK0EzRWhBaUFCUWY4QmNTRUJJQUlnQVhJaEFTQUJJQU55SVFFZ0NpQUdRYkFRYkdwQkJHb2hEaUFPSUFFMkFnQWdBRUVCRUN3aEFTQUJRUUJISWdNRWYwRUFCU0FBUVFFUUxBc2hBU0FCUWY4QmNTRUNJQW9nQmtHd0VHeHFRUmRxSVJFZ0VTQUNPZ0FBSUFrb0FnQWhCQ0FPS0FJQUlRRWdCRVVFUUNBQkJIOUJ5QUFoQVF3Q0JVRUFDeUVCQ3lBQ1FmOEJjUVJBSUFBZ0FSQThJUUlGSUFBZ0FSQk5JUUlnQ2lBR1FiQVFiR3BCQ0dvaEFTQUJJQUkyQWdBTElBSkZCRUJCelFBaEFRd0JDd0pBSUFNRVFDQUFRUVVRTENFRElBNG9BZ0FoQVNBQlFRQk1CRUJCQUNFRERBSUxRUUFoQkFOQUlBTkJBV29oQlNBQklBUnJJUUVnQVJBdElRRWdBQ0FCRUN3aEFTQUJJQVJxSVFNZ0RpZ0NBQ0VQSUFNZ0Qwb0VRRUhUQUNFQkRBUUxJQUlnQkdvaEJDQUZRZjhCY1NFUElBUWdEeUFCRUhvYUlBNG9BZ0FoQVNBQklBTktCSDhnQXlFRUlBVWhBd3dCQlVFQUN5RURDd1VnRGlnQ0FDRUJJQUZCQUV3RVFFRUFJUU1NQWd0QkFDRURRUUFoQVFOQUlCRXNBQUFoQkFKQUFrQWdCRVVOQUNBQVFRRVFMQ0VFSUFRTkFDQUNJQU5xSVFRZ0JFRi9PZ0FBREFFTElBQkJCUkFzSVFRZ0JFRUJhaUVFSUFSQi93RnhJUVVnQWlBRGFpRVBJQThnQlRvQUFDQUJRUUZxSVFFZ0JFSC9BWEVoQkNBRVFTQkdCRUJCMmdBaEFRd0ZDd3NnQTBFQmFpRURJQTRvQWdBaEJDQURJQVJJRFFBTElBRWhBeUFFSVFFTEN5QVJMQUFBSVFRQ2Z3SkFJQVFFZnlBQlFRSjFJUVFnQXlBRVRnUkFJQllvQWdBaEF5QUJJQU5LQkVBZ0ZpQUJOZ0lBQ3lBQUlBRVFUU0VCSUFvZ0JrR3dFR3hxUVFocUlRTWdBeUFCTmdJQUlBRkZCRUJCNFFBaEFRd0ZDeUFPS0FJQUlRUWdBU0FDSUFRUWVSb2dEaWdDQUNFQklBQWdBaUFCRUU0Z0F5Z0NBQ0VDSUJGQkFEb0FBQ0FPS0FJQUlRUU1BZ3NnQ2lBR1FiQVFiR3BCckJCcUlRUWdCQ0FETmdJQUlBTUVmeUFBSUFNUVRTRUJJQW9nQmtHd0VHeHFRUWhxSVFNZ0F5QUJOZ0lBSUFGRkJFQkI2d0FoQVF3RkN5QUVLQUlBSVFFZ0FVRUNkQ0VCSUFBZ0FSQThJUUVnQ2lBR1FiQVFiR3BCSUdvaEF5QURJQUUyQWdBZ0FVVUVRRUh0QUNFQkRBVUxJQVFvQWdBaEFTQUJRUUowSVFFZ0FDQUJFRHdoQlNBRlJRUkFRZkFBSVFFTUJRc2dEaWdDQUNFQklBUW9BZ0FoRHlBRklRY2dCUVZCQUNFUFFRQWhCMEVBQ3lFRElBOUJBM1FoQlNBRklBRnFJUVVnRmlnQ0FDRVBJQVVnRDAwRVFDQUJJUVVnQkF3REN5QVdJQVUyQWdBZ0FTRUZJQVFGSUFFaEJBd0JDd3dCQ3lBRVFRQktCRUJCQUNFQlFRQWhBd05BSUFJZ0Eyb2hCU0FGTEFBQUlRVWdCVUgvQVhGQkNrb2hEeUFGUVg5SElRVWdEeUFGY1NFRklBVkJBWEVoQlNBQklBVnFJUUVnQTBFQmFpRURJQU1nQkVnTkFBc0ZRUUFoQVFzZ0NpQUdRYkFRYkdwQnJCQnFJUThnRHlBQk5nSUFJQVJCQW5RaEFTQUFJQUVRVFNFQklBb2dCa0d3RUd4cVFTQnFJUU1nQXlBQk5nSUFJQUZGQkVCQjZRQWhBUXdDQzBFQUlRTWdEaWdDQUNFRlFRQWhCeUFQQ3lFQklBa2dBaUFGSUFNUVR5RUVJQVJGQkVCQjlBQWhBUXdCQ3lBQktBSUFJUVFnQkFSQUlBUkJBblFoQkNBRVFRUnFJUVFnQUNBRUVFMGhCQ0FLSUFaQnNCQnNha0drRUdvaEJTQUZJQVEyQWdBZ0JFVUVRRUg1QUNFQkRBSUxJQUVvQWdBaEJDQUVRUUowSVFRZ0JFRUVhaUVFSUFBZ0JCQk5JUVFnQ2lBR1FiQVFiR3BCcUJCcUlRVWdCU0FFTmdJQUlBUkZCRUJCK3dBaEFRd0NDeUFFUVFScUlROGdCU0FQTmdJQUlBUkJmellDQUNBSklBSWdBeEJRQ3lBUkxBQUFJUU1nQXdSQUlBRW9BZ0FoQXlBRFFRSjBJUU1nQUNBSElBTVFUaUFLSUFaQnNCQnNha0VnYWlFRElBTW9BZ0FoQkNBQktBSUFJUVVnQlVFQ2RDRUZJQUFnQkNBRkVFNGdEaWdDQUNFRUlBQWdBaUFFRUU0Z0EwRUFOZ0lBQ3lBSkVGRWdBRUVFRUN3aEFpQUNRZjhCY1NFRElBb2dCa0d3RUd4cVFSVnFJUVVnQlNBRE9nQUFJQUpCL3dGeElRSWdBa0VDU3dSQVFZQUJJUUVNQVFzZ0FnUkFJQUJCSUJBc0lRSWdBaEJTSVNVZ0NpQUdRYkFRYkdwQkRHb2hEeUFQSUNVNEFnQWdBRUVnRUN3aEFpQUNFRkloSlNBS0lBWkJzQkJzYWtFUWFpRWJJQnNnSlRnQ0FDQUFRUVFRTENFQ0lBSkJBV29oQWlBQ1FmOEJjU0VDSUFvZ0JrR3dFR3hxUVJScUlRUWdCQ0FDT2dBQUlBQkJBUkFzSVFJZ0FrSC9BWEVoQWlBS0lBWkJzQkJzYWtFV2FpRWNJQndnQWpvQUFDQUZMQUFBSVFzZ0RpZ0NBQ0VDSUFrb0FnQWhBeUFMUVFGR0JIOGdBaUFERUZNRklBTWdBbXdMSVFJZ0NpQUdRYkFRYkdwQkdHb2hDeUFMSUFJMkFnQWdBa1VFUUVHR0FTRUJEQUlMSUFKQkFYUWhBaUFBSUFJUVBDRVFJQkJGQkVCQmlBRWhBUXdDQ3lBTEtBSUFJUUlnQWtFQVNnUkFRUUFoQWdOQUlBUXRBQUFoQXlBRFFmOEJjU0VESUFBZ0F4QXNJUU1nQTBGL1JnUkFRWXdCSVFFTUJBc2dBMEgvL3dOeElRTWdFQ0FDUVFGMGFpRVhJQmNnQXpzQkFDQUNRUUZxSVFJZ0N5Z0NBQ0VESUFJZ0EwZ05BQXNnQXlFQ0N5QUZMQUFBSVFNQ1FDQURRUUZHQkVBZ0VTd0FBQ0VESUFOQkFFY2lGd1JBSUFFb0FnQWhBeUFEUlFSQUlBSWhBUXdEQ3dVZ0RpZ0NBQ0VEQ3lBS0lBWkJzQkJzYWlBQUlBTkJBblFnQ1NnQ0FHd1FUU0lmTmdJY0lCOUZCRUJCa3dFaEFRd0VDeUFCSUE0Z0Z4c2hBU0FCS0FJQUlRNGdEa0VBU2dSQUlBb2dCa0d3RUd4cVFhZ1FhaUVnSUFrb0FnQWlDa0VBU2lFSlF3QUFBQUFoSlVFQUlRRURRQ0FYQkg4Z0lDZ0NBQ0VDSUFJZ0FVRUNkR29oQWlBQ0tBSUFCU0FCQ3lFRUlBa0VRQ0FMS0FJQUlSZ2dIQ3dBQUVVaElTQUtJQUZzSVNKQkFDRURRUUVoQWdOQUlBUWdBbTRoRWlBU0lCaHdJUklnRUNBU1FRRjBhaUVTSUJJdkFRQWhFaUFTUWYvL0EzR3lJU1FnR3lvQ0FDRW1JQ1lnSkpRaEpDQVBLZ0lBSVNZZ0pDQW1raUVrSUNVZ0pKSWhKQ0FpSUFOcUlSSWdIeUFTUVFKMGFpRVNJQklnSkRnQ0FDQWxJQ1FnSVJzaEpTQURRUUZxSVFNZ0F5QUtTQ0lTQkVCQmZ5QVliaUVqSUFJZ0kwc0VRRUdlQVNFQkRBa0xJQmdnQW13aEFnc2dFZzBBQ3dzZ0FVRUJhaUVCSUFFZ0RrZ05BQXNMSUFWQkFqb0FBQ0FMS0FJQUlRRUZJQUpCQW5RaEFTQUFJQUVRVFNFQ0lBb2dCa0d3RUd4cVFSeHFJUUVnQVNBQ05nSUFJQXNvQWdBaENDQUNSUVJBUWFVQklRRU1CQXNnQ0VFQVRBUkFJQWdoQVF3Q0N5QWNMQUFBUlNFRFF3QUFBQUFoSlVFQUlRRURRQ0FRSUFGQkFYUnFJUVFnQkM4QkFDRUVJQVJCLy84RGNiSWhKQ0FiS2dJQUlTWWdKaUFrbENFa0lBOHFBZ0FoSmlBa0lDYVNJU1FnSlNBa2tpRWtJQUlnQVVFQ2RHb2hCQ0FFSUNRNEFnQWdKU0FrSUFNYklTVWdBVUVCYWlFQklBRWdDRWdOQUFzZ0NDRUJDd3NnQVVFQmRDRUJJQUFnRUNBQkVFNExJQVpCQVdvaEJpQU5LQUlBSVFFZ0JpQUJTQTBCREFNTEN3SkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBVUUvYXc1bkFCWUJGZ0lXRmhZV0F4WVdGaFlFRmhZV0ZoWUZGaFlXRmhZV0JoWVdGaFlXRmdjV0ZoWVdGaFlXQ0JZSkZnb1dGZ3NXRmhZTUZoWVdGZzBXRGhZV0ZoWVBGaFlXRmhZUUZoRVdGaFlTRmhZV0ZoWVdFeFlXRmhZV0ZoWVdGaFlVRmhZV0ZoWVdGUllMSUFCQkZCQVZRUUFNR3dzZ0FFRVVFQlZCQUF3YUN5QUFRUlFRRlVFQURCa0xJQUJCRkJBVlFRQU1HQXNnQUVFREVCVkJBQXdYQ3lBQVFSUVFGVUVBREJZTElBQkJGQkFWUVFBTUZRc2dBRUVERUJWQkFBd1VDeUFBUVFNUUZVRUFEQk1MSUFCQkF4QVZRUUFNRWdzZ0FFRURFQlZCQUF3UkN5QUFRUU1RRlVFQURCQUxJQkVzQUFBaEFTQUJCRUFnQUNBSFFRQVFUZ3NnQUVFVUVCVkJBQXdQQ3lBQVFRTVFGVUVBREE0TElBQkJBeEFWUVFBTURRc2dBRUVVRUJWQkFBd01DeUFBUVJRUUZVRUFEQXNMSUFCQkF4QVZRUUFNQ2dzZ0N5Z0NBQ0VCSUFGQkFYUWhBU0FBSUJBZ0FSQk9JQUJCRkJBVlFRQU1DUXNnQ3lnQ0FDRUJJQUZCQVhRaEFTQUFJQkFnQVJCT0lBQkJBeEFWUVFBTUNBc2dHRUVCZENFQklBQWdFQ0FCRUU0Z0FFRVVFQlZCQUF3SEN5QUlRUUYwSVFFZ0FDQVFJQUVRVGlBQVFRTVFGVUVBREFZTEN3c2dBRUVHRUN3aEFTQUJRUUZxSVFFZ0FVSC9BWEVoQWdKQUlBSUVRRUVBSVFFRFFBSkFJQUJCRUJBc0lRTWdBMFVoQXlBRFJRMEFJQUZCQVdvaEFTQUJJQUpKRFFFTUF3c0xJQUJCRkJBVlFRQU1CUXNMSUFCQkJoQXNJUUVnQVVFQmFpRUJJQUJCOUFCcUlROGdEeUFCTmdJQUlBRkJ2QXhzSVFFZ0FDQUJFRTBoQVNBQVFmZ0JhaUVPSUE0Z0FUWUNBQ0FCUlFSQUlBQkJBeEFWUVFBTUJBc2dEeWdDQUNFQkFuOGdBVUVBU2dSL1FRQWhCRUVBSVFjQ1FBSkFBa0FDUUFKQUFrQURRQ0FBUVJBUUxDRUJJQUZCLy84RGNTRUNJQUJCK0FCcUlBZEJBWFJxSVFNZ0F5QUNPd0VBSUFGQi8vOERjU0VCSUFGQkFVc05BU0FCUlEwQ0lBNG9BZ0FoQlNBQVFRVVFMQ0VCSUFGQi93RnhJUUlnQlNBSFFid01iR29oQ2lBS0lBSTZBQUFnQVVIL0FYRWhBU0FCQkVCQmZ5RUJRUUFoQWdOQUlBQkJCQkFzSVFNZ0EwSC9BWEVoQ0NBRklBZEJ2QXhzYWtFQmFpQUNhaUVHSUFZZ0NEb0FBQ0FEUWY4QmNTRURJQU1nQVVvaENDQURJQUVnQ0JzaEF5QUNRUUZxSVFJZ0NpMEFBQ0VCSUFGQi93RnhJUUVnQWlBQlNRUkFJQU1oQVF3QkN3dEJBQ0VCQTBBZ0FFRURFQ3doQWlBQ1FRRnFJUUlnQWtIL0FYRWhBaUFGSUFkQnZBeHNha0VoYWlBQmFpRUlJQWdnQWpvQUFDQUFRUUlRTENFQ0lBSkIvd0Z4SVFJZ0JTQUhRYndNYkdwQk1Xb2dBV29oQ0NBSUlBSTZBQUFDUUFKQUlBSkIvd0Z4UlEwQUlBQkJDQkFzSVFJZ0FrSC9BWEVoQmlBRklBZEJ2QXhzYWtIQkFHb2dBV29oRUNBUUlBWTZBQUFnQWtIL0FYRWhBaUFOS0FJQUlRWWdBaUFHVGcwSElBZ3NBQUFoQWlBQ1FSOUhEUUFNQVF0QkFDRUNBMEFnQUVFSUVDd2hCaUFHUWYvL0Eyb2hCaUFHUWYvL0EzRWhFQ0FGSUFkQnZBeHNha0hTQUdvZ0FVRUVkR29nQWtFQmRHb2hDU0FKSUJBN0FRQWdCa0VRZENFR0lBWkJFSFVoQmlBTktBSUFJUkFnQmlBUVNDRUdJQVpGRFFnZ0FrRUJhaUVDSUFndEFBQWhCaUFHUWY4QmNTRUdRUUVnQm5RaEJpQUNJQVpJRFFBTEN5QUJRUUZxSVFJZ0FTQURTQVJBSUFJaEFRd0JDd3NMSUFCQkFoQXNJUUVnQVVFQmFpRUJJQUZCL3dGeElRRWdCU0FIUWJ3TWJHcEJ0QXhxSVFJZ0FpQUJPZ0FBSUFCQkJCQXNJUUVnQVVIL0FYRWhBaUFGSUFkQnZBeHNha0cxREdvaEVDQVFJQUk2QUFBZ0JTQUhRYndNYkdwQjBnSnFJUWtnQ1VFQU93RUFJQUZCL3dGeElRRkJBU0FCZENFQklBRkIvLzhEY1NFQklBVWdCMEc4REd4cVFkUUNhaUVDSUFJZ0FUc0JBQ0FGSUFkQnZBeHNha0c0REdvaEJpQUdRUUkyQWdBZ0Npd0FBQ0VCQWtBQ1FDQUJCRUJCQUNFSVFRSWhBd05BSUFVZ0IwRzhER3hxUVFGcUlBaHFJUUlnQWkwQUFDRUNJQUpCL3dGeElRSWdCU0FIUWJ3TWJHcEJJV29nQW1vaEFpQUNMQUFBSVFzZ0N3UkFRUUFoQVFOQUlCQXRBQUFoQXlBRFFmOEJjU0VESUFBZ0F4QXNJUU1nQTBILy93TnhJUXNnQmlnQ0FDRURJQVVnQjBHOERHeHFRZElDYWlBRFFRRjBhaUVSSUJFZ0N6c0JBQ0FEUVFGcUlRTWdCaUFETmdJQUlBRkJBV29oQVNBQ0xRQUFJUXNnQzBIL0FYRWhDeUFCSUF0SkRRQUxJQW9zQUFBaEFnVWdBU0VDQ3lBRElRRWdDRUVCYWlFSUlBSkIvd0Z4SVFNZ0NDQURTUVJBSUFFaEF5QUNJUUVNQVFzTElBRkJBRW9OQVFWQkFpRUJEQUVMREFFTFFRQWhBZ05BSUFVZ0IwRzhER3hxUWRJQ2FpQUNRUUYwYWlFRElBTXVBUUFoQXlBTUlBSkJBblJxSVFnZ0NDQURPd0VBSUFKQi8vOERjU0VESUF3Z0FrRUNkR3BCQW1vaENDQUlJQU03QVFBZ0FrRUJhaUVDSUFJZ0FVZ05BQXNMSUF3Z0FVRUVRUUVRWmlBR0tBSUFJUUVDUUNBQlFRQktCRUJCQUNFQkEwQWdEQ0FCUVFKMGFrRUNhaUVDSUFJdUFRQWhBaUFDUWY4QmNTRUNJQVVnQjBHOERHeHFRY1lHYWlBQmFpRURJQU1nQWpvQUFDQUJRUUZxSVFFZ0JpZ0NBQ0VDSUFFZ0FrZ05BQXNnQWtFQ1RBUkFJQUloQVF3Q0MwRUNJUUVEUUNBSklBRWdIU0FlRUZVZ0hTZ0NBQ0VDSUFKQi93RnhJUUlnQlNBSFFid01iR3BCd0FocUlBRkJBWFJxSVFNZ0F5QUNPZ0FBSUI0b0FnQWhBaUFDUWY4QmNTRUNJQVVnQjBHOERHeHFJQUZCQVhScVFjRUlhaUVESUFNZ0Fqb0FBQ0FCUVFGcUlRRWdCaWdDQUNFQ0lBRWdBa2dOQUFzZ0FpRUJDd3NnQVNBRVNpRUNJQUVnQkNBQ0d5RUVJQWRCQVdvaEJ5QVBLQUlBSVFFZ0J5QUJTQTBBREFVQUN3QUxJQUJCRkJBVlFRQU1DZ3NnRGlnQ0FDRUJJQUJCQ0JBc0lRSWdBa0gvQVhFaEFpQUJJQWRCdkF4c2FpRURJQU1nQWpvQUFDQUFRUkFRTENFQ0lBSkIvLzhEY1NFQ0lBRWdCMEc4REd4cVFRSnFJUU1nQXlBQ093RUFJQUJCRUJBc0lRSWdBa0gvL3dOeElRSWdBU0FIUWJ3TWJHcEJCR29oQXlBRElBSTdBUUFnQUVFR0VDd2hBaUFDUWY4QmNTRUNJQUVnQjBHOERHeHFRUVpxSVFNZ0F5QUNPZ0FBSUFCQkNCQXNJUUlnQWtIL0FYRWhBaUFCSUFkQnZBeHNha0VIYWlFRElBTWdBam9BQUNBQVFRUVFMQ0VDSUFKQkFXb2hBaUFDUWY4QmNTRUVJQUVnQjBHOERHeHFRUWhxSVFNZ0F5QUVPZ0FBSUFKQi93RnhJUUlnQWdSQUlBRWdCMEc4REd4cVFRbHFJUUpCQUNFQkEwQWdBRUVJRUN3aEJ5QUhRZjhCY1NFSElBSWdBV29oQkNBRUlBYzZBQUFnQVVFQmFpRUJJQU10QUFBaEJ5QUhRZjhCY1NFSElBRWdCMGtOQUFzTElBQkJCQkFWUVFBTUNRc2dBRUVVRUJVTUFnc2dBRUVVRUJVTUFRc2dCRUVCZEF3Q0MwRUFEQVVGUVFBTEN5RVFJQUJCQmhBc0lRRWdBVUVCYWlFQklBQkIvQUZxSVFVZ0JTQUJOZ0lBSUFGQkdHd2hBU0FBSUFFUVRTRUJJQUJCZ0FOcUlRNGdEaUFCTmdJQUlBRkZCRUFnQUVFREVCVkJBQXdFQ3lBRktBSUFJUUlnQWtFWWJDRUNJQUZCQUNBQ0VIb2FJQVVvQWdBaEFRSkFJQUZCQUVvRVFFRUFJUWNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBMEFnRGlnQ0FDRUVJQUJCRUJBc0lRRWdBVUgvL3dOeElRSWdBRUdBQW1vZ0IwRUJkR29oQXlBRElBSTdBUUFnQVVILy93TnhJUUVnQVVFQ1N3MEJJQUJCR0JBc0lRSWdCQ0FIUVJoc2FpRUJJQUVnQWpZQ0FDQUFRUmdRTENFQ0lBUWdCMEVZYkdwQkJHb2hBeUFESUFJMkFnQWdBU2dDQUNFQklBSWdBVWtOQWlBQVFSZ1FMQ0VCSUFGQkFXb2hBU0FFSUFkQkdHeHFRUWhxSVFJZ0FpQUJOZ0lBSUFCQkJoQXNJUUVnQVVFQmFpRUJJQUZCL3dGeElRRWdCQ0FIUVJoc2FrRU1haUVJSUFnZ0FUb0FBQ0FBUVFnUUxDRUJJQUZCL3dGeElRSWdCQ0FIUVJoc2FrRU5haUVHSUFZZ0Fqb0FBQ0FCUWY4QmNTRUJJQTBvQWdBaEFpQUJJQUpPRFFNZ0NDd0FBQ0VCSUFFRWYwRUFJUUVEUUNBQVFRTVFMQ0VESUFCQkFSQXNJUUlnQWdSL0lBQkJCUkFzQlVFQUN5RUNJQUpCQTNRaEFpQUNJQU5xSVFJZ0FrSC9BWEVoQWlBTUlBRnFJUU1nQXlBQ09nQUFJQUZCQVdvaEFTQUlMUUFBSVFJZ0FrSC9BWEVoQXlBQklBTkpEUUFMSUFKQi93RnhCVUVBQ3lFQklBRkJCSFFoQVNBQUlBRVFUU0VCSUFRZ0IwRVliR3BCRkdvaENpQUtJQUUyQWdBZ0FVVU5CQ0FJTEFBQUlRSWdBZ1JBUVFBaEFnTkFJQXdnQW1vdEFBQWhDMEVBSVFNRFFFRUJJQU4wSVFrZ0NTQUxjU0VKSUFrRVFDQUFRUWdRTENFSklBbEIvLzhEY1NFUklBb29BZ0FoQVNBQklBSkJCSFJxSUFOQkFYUnFJUllnRmlBUk93RUFJQWxCRUhRaENTQUpRUkIxSVFrZ0RTZ0NBQ0VSSUJFZ0NVd05DUVVnQVNBQ1FRUjBhaUFEUVFGMGFpRUpJQWxCZnpzQkFBc2dBMEVCYWlFRElBTkJDRWtOQUFzZ0FrRUJhaUVDSUFndEFBQWhBeUFEUWY4QmNTRURJQUlnQTBrTkFBc0xJQlVvQWdBaEFTQUdMUUFBSVFJZ0FrSC9BWEVoQWlBQklBSkJzQkJzYWtFRWFpRUJJQUVvQWdBaEFTQUJRUUowSVFFZ0FDQUJFRTBoQVNBRUlBZEJHR3hxUVJCcUlRb2dDaUFCTmdJQUlBRkZEUVlnRlNnQ0FDRUNJQVl0QUFBaEF5QURRZjhCY1NFRElBSWdBMEd3RUd4cVFRUnFJUUlnQWlnQ0FDRUNJQUpCQW5RaEFpQUJRUUFnQWhCNkdpQVZLQUlBSVFJZ0JpMEFBQ0VCSUFGQi93RnhJUU1nQWlBRFFiQVFiR3BCQkdvaEFTQUJLQUlBSVFFZ0FVRUFTZ1JBUVFBaEFRTkFJQUlnQTBHd0VHeHFJUUlnQWlnQ0FDRURJQUFnQXhCTklRSWdDaWdDQUNFRUlBUWdBVUVDZEdvaEJDQUVJQUkyQWdBZ0NpZ0NBQ0VDSUFJZ0FVRUNkR29oQWlBQ0tBSUFJUVFnQkVVTkNRSkFJQU5CQUVvRVFDQUlMUUFBSVFrZ0EwRi9haUVDSUFsQi93RnhJUWtnQVNBSmNDRUpJQWxCL3dGeElRa2dCQ0FDYWlFRUlBUWdDVG9BQUNBRFFRRkdEUUVnQVNFREEwQWdDQzBBQUNFSklBbEIvd0Z4SVFRZ0F5QUViU0VESUFvb0FnQWdBVUVDZEdvaEJDQUVLQUlBSVFzZ0FrRi9haUVFSUFsQi93RnhJUWtnQXlBSmJ5RUpJQWxCL3dGeElRa2dDeUFFYWlFTElBc2dDVG9BQUNBQ1FRRktCRUFnQkNFQ0RBRUxDd3NMSUFGQkFXb2hBU0FWS0FJQUlRSWdCaTBBQUNFRElBTkIvd0Z4SVFNZ0FpQURRYkFRYkdwQkJHb2hCQ0FFS0FJQUlRUWdBU0FFU0EwQUN3c2dCMEVCYWlFSElBVW9BZ0FoQVNBSElBRklEUUFNQ2dBTEFBc2dBRUVVRUJVTUJnc2dBRUVVRUJVTUJRc2dBRUVVRUJVTUJBc2dBRUVERUJVTUF3c2dBRUVVRUJVTUFnc2dBRUVERUJVTUFRc2dBRUVERUJVTFFRQU1CUXNMSUFCQkJoQXNJUUVnQVVFQmFpRUJJQUJCaEFOcUlRY2dCeUFCTmdJQUlBRkJLR3doQVNBQUlBRVFUU0VCSUFCQmlBTnFJUW9nQ2lBQk5nSUFJQUZGQkVBZ0FFRURFQlZCQUF3RUN5QUhLQUlBSVFJZ0FrRW9iQ0VDSUFGQkFDQUNFSG9hSUFjb0FnQWhBUUpBSUFGQkFFb0VRRUVBSVFFQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBTkFJQW9vQWdBaEJDQUVJQUZCS0d4cUlRd2dBRUVRRUN3aEFpQUNEUUVnRXlnQ0FDRUNJQUpCQTJ3aEFpQUFJQUlRVFNFQ0lBUWdBVUVvYkdwQkJHb2hDQ0FJSUFJMkFnQWdBa1VOQWlBQVFRRVFMQ0VDSUFJRWZ5QUFRUVFRTENFQ0lBSkJBV29oQWlBQ1FmOEJjUVZCQVFzaEFpQUVJQUZCS0d4cVFRaHFJUVlnQmlBQ09nQUFJQUJCQVJBc0lRSUNRQ0FDQkVBZ0FFRUlFQ3doQWlBQ1FRRnFJUUlnQWtILy93TnhJUU1nRENBRE93RUFJQUpCLy84RGNTRUNJQUpGRFFGQkFDRUNJQk1vQWdBaEF3TkFJQU5CZjJvaEF5QURFQzBoQXlBQUlBTVFMQ0VESUFOQi93RnhJUU1nQ0NnQ0FDRU5JQTBnQWtFRGJHb2hEU0FOSUFNNkFBQWdFeWdDQUNFRElBTkJmMm9oQXlBREVDMGhBeUFBSUFNUUxDRU5JQTFCL3dGeElRa2dDQ2dDQUNFRElBTWdBa0VEYkdwQkFXb2hDeUFMSUFrNkFBQWdBeUFDUVFOc2FpRURJQU1zQUFBaEN5QUxRZjhCY1NFUklCTW9BZ0FoQXlBRElCRk1EUVlnRFVIL0FYRWhEU0FESUExTURRY2dDeUFKUVJoMFFSaDFSaUVOSUEwTkNDQUNRUUZxSVFJZ0RDOEJBQ0VOSUExQi8vOERjU0VOSUFJZ0RVa05BQXNGSUF4QkFEc0JBQXNMSUFCQkFoQXNJUUlnQWcwR0lBWXNBQUFoQXlBVEtBSUFJZ3hCQUVvaEFnSkFBa0FnQTBIL0FYRkJBVW9FUUNBQ1JRMEJRUUFoQWdOQUlBQkJCQkFzSVFNZ0EwSC9BWEVoQXlBSUtBSUFJUXdnRENBQ1FRTnNha0VDYWlFTUlBd2dBem9BQUNBR0xRQUFJUXdnREVIL0FYRWdBMG9oQXlBRFJRMExJQUpCQVdvaEFpQVRLQUlBSVFNZ0FpQURTQTBBQ3d3QkJTQUNCRUFnQ0NnQ0FDRUlRUUFoQWdOQUlBZ2dBa0VEYkdwQkFtb2hEU0FOUVFBNkFBQWdBa0VCYWlFQ0lBSWdERWdOQUFzTElBTU5BUXNNQVF0QkFDRUNBMEFnQUVFSUVDd2FJQUJCQ0JBc0lRTWdBMEgvQVhFaENDQUVJQUZCS0d4cVFRbHFJQUpxSVFNZ0F5QUlPZ0FBSUFCQkNCQXNJUWdnQ0VIL0FYRWhEQ0FFSUFGQktHeHFRUmhxSUFKcUlRMGdEU0FNT2dBQUlBTXRBQUFoQXlBRFFmOEJjU0VESUE4b0FnQWhEQ0FNSUFOTURRb2dDRUgvQVhFaEF5QUZLQUlBSVFnZ0F5QUlTQ0VESUFORkRRc2dBa0VCYWlFQ0lBWXRBQUFoQXlBRFFmOEJjU0VESUFJZ0Ewa05BQXNMSUFGQkFXb2hBU0FIS0FJQUlRSWdBU0FDU0EwQURBd0FDd0FMSUFCQkZCQVZRUUFNRGdzZ0FFRURFQlZCQUF3TkN5QUFRUlFRRlVFQURBd0xJQUJCRkJBVlFRQU1Dd3NnQUVFVUVCVkJBQXdLQ3lBQVFSUVFGVUVBREFrTElBQkJGQkFWUVFBTUNBc2dBRUVVRUJWQkFBd0hDeUFBUVJRUUZVRUFEQVlBQ3dBTEN5QUFRUVlRTENFQklBRkJBV29oQVNBQVFZd0RhaUVDSUFJZ0FUWUNBQUpBSUFGQkFFb0VRRUVBSVFFQ1FBSkFBa0FDUUFOQUlBQkJBUkFzSVFNZ0EwSC9BWEVoQXlBQVFaQURhaUFCUVFac2FpRUVJQVFnQXpvQUFDQUFRUkFRTENFRElBTkIvLzhEY1NFRUlBQWdBVUVHYkdwQmtnTnFJUU1nQXlBRU93RUFJQUJCRUJBc0lRUWdCRUgvL3dOeElRZ2dBQ0FCUVFac2FrR1VBMm9oQkNBRUlBZzdBUUFnQUVFSUVDd2hDQ0FJUWY4QmNTRUdJQUFnQVVFR2JHcEJrUU5xSVF3Z0RDQUdPZ0FBSUFNdUFRQWhBeUFERFFFZ0JDNEJBQ0VESUFNTkFpQUlRZjhCY1NFRElBY29BZ0FoQkNBRElBUklJUU1nQTBVTkF5QUJRUUZxSVFFZ0FpZ0NBQ0VESUFFZ0EwZ05BQXdHQUFzQUN5QUFRUlFRRlVFQURBZ0xJQUJCRkJBVlFRQU1Cd3NnQUVFVUVCVkJBQXdHQUFzQUN3c2dBQkFoSUFCQjFBZHFJUUVnQVVFQU5nSUFJQk1vQWdBaEFRSkFJQUZCQUVvRVFFRUFJUUVEUUFKQUlCUW9BZ0FoQWlBQ1FRSjBJUUlnQUNBQ0VFMGhBeUFBUVpRR2FpQUJRUUowYWlFQ0lBSWdBellDQUNBVUtBSUFJUU1nQTBFQmRDRURJQU5CL3YvLy93ZHhJUU1nQUNBREVFMGhCeUFBUVpRSGFpQUJRUUowYWlFRElBTWdCellDQUNBQUlCQVFUU0VISUFCQjJBZHFJQUZCQW5ScUlRUWdCQ0FITmdJQUlBSW9BZ0FoQWlBQ1JRMEFJQU1vQWdBaEF5QURSU0VESUFkRklRY2dCeUFEY2cwQUlCUW9BZ0FoQXlBRFFRSjBJUU1nQWtFQUlBTVFlaG9nQVVFQmFpRUJJQk1vQWdBaEFpQUJJQUpJRFFFTUF3c0xJQUJCQXhBVlFRQU1CUXNMSUJvb0FnQWhBU0FBUVFBZ0FSQldJUUZCQUNBQlJRMERHaUFVS0FJQUlRRWdBRUVCSUFFUVZpRUJRUUFnQVVVTkF4b2dHaWdDQUNFQklBQkIzQUJxSVFJZ0FpQUJOZ0lBSUJRb0FnQWhBU0FBUWVBQWFpRUNJQUlnQVRZQ0FDQUJRUUYwSVFJZ0FrSCsvLy8vQjNFaEJDQUZLQUlBSVFnZ0NFRUFTZ1IvSUE0b0FnQWhCeUFCUVFKdElRTkJBQ0VDUVFBaEFRTkFJQWNnQVVFWWJHb2hCU0FGS0FJQUlRVWdCU0FEU1NFR0lBVWdBeUFHR3lFR0lBY2dBVUVZYkdwQkJHb2hCU0FGS0FJQUlRVWdCU0FEU1NFTUlBVWdBeUFNR3lFRklBVWdCbXNoQlNBSElBRkJHR3hxUVFocUlRWWdCaWdDQUNFR0lBVWdCbTRoQlNBRklBSktJUVlnQlNBQ0lBWWJJUUlnQVVFQmFpRUJJQUVnQ0VnTkFBc2dBa0VDZENFQklBRkJCR29GUVFRTElRRWdFeWdDQUNFQ0lBSWdBV3doQVNBQVFReHFJUUlnQkNBQlN5RURJQUlnQkNBQklBTWJJZ0kyQWdBZ0FFSFZDbW9oQVNBQlFRRTZBQUFnQUVIRUFHb2hBU0FCS0FJQUlRRUNRQ0FCQkVBZ0FFSFFBR29oQVNBQktBSUFJUUVnQUVISUFHb2hBeUFES0FJQUlRTWdBU0FEUndSQVFjd1dRY1FUUWFBZ1FZUVhFQVFMSUFCQnpBQnFJUU1nQXlnQ0FDRURJQUpCM0F0cUlRSWdBaUFEYWlFQ0lBSWdBVTBOQVNBQVFRTVFGVUVBREFVTEN5QUFFQjhoQVNBQVFTaHFJUUFnQUNBQk5nSUFRUUVNQXdzZ0FDQUNRUVlRSWlFQklBRkJBRWNoQVNBQ0xBQUFJUU1nQTBIbUFFWWhBeUFCSUFOeEJFQWdBa0VCYWlFQklBRXNBQUFoQVNBQlFla0FSZ1JBSUFKQkFtb2hBU0FCTEFBQUlRRWdBVUh6QUVZRVFDQUNRUU5xSVFFZ0FTd0FBQ0VCSUFGQjZBQkdCRUFnQWtFRWFpRUJJQUVzQUFBaEFTQUJRZVVBUmdSQUlBSkJCV29oQVNBQkxBQUFJUUVnQVVIaEFFWUVRQ0FBRURBaEFTQUJRZjhCY1VIa0FFWUVRQ0FBRURBaEFTQUJRZjhCY1VVRVFDQUFRU1lRRlVFQURBb0xDd3NMQ3dzTEN3c2dBRUVpRUJVTFFRQUxJUUFnR1NRR0lBQUxEd0VCZnlBQVFkd0xFRTBoQVNBQkN6OEJBWDhnQUVFa2FpRUJJQUVzQUFBaEFTQUJCSDlCQUFVZ0FFRVVhaUVCSUFFb0FnQWhBU0FBUVJocUlRQWdBQ2dDQUNFQUlBRWdBR3NMSVFBZ0FBdUJBZ0VDZnlBQVFkZ0thaUVCSUFFb0FnQWhBUUovQWtBZ0FVRi9SdzBBSUFBUU1DRUJJQUJCMUFCcUlRSWdBaWdDQUNFQ0lBSUVmMEVBQlNBQlFmOEJjVUhQQUVjRVFDQUFRUjRRRlVFQURBTUxJQUFRTUNFQklBRkIvd0Z4UWVjQVJ3UkFJQUJCSGhBVlFRQU1Bd3NnQUJBd0lRRWdBVUgvQVhGQjV3QkhCRUFnQUVFZUVCVkJBQXdEQ3lBQUVEQWhBU0FCUWY4QmNVSFRBRWNFUUNBQVFSNFFGVUVBREFNTElBQVFNeUVCSUFFRVFDQUFRZE1LYWlFQklBRXNBQUFoQVNBQlFRRnhJUUVnQVVVTkFpQUFRZHdLYWlFQklBRkJBRFlDQUNBQVFkUUthaUVCSUFGQkFEb0FBQ0FBUVNBUUZRdEJBQXNNQVFzZ0FCQktDeUVBSUFBTEZBRUJmd05BSUFBUUxpRUJJQUZCZjBjTkFBc0xaUUVFZnlBQVFSUnFJUU1nQXlnQ0FDRUZJQVVnQW1vaEJpQUFRUnhxSVFRZ0JDZ0NBQ0VFSUFZZ0JFc0VmeUFBUWRRQWFpRUFJQUJCQVRZQ0FFRUFCU0FCSUFVZ0FoQjVHaUFES0FJQUlRQWdBQ0FDYWlFQUlBTWdBRFlDQUVFQkN5RUFJQUFMYUFFQ2Z5QUFFREFoQWlBQ1FmOEJjU0VDSUFBUU1DRUJJQUZCL3dGeElRRWdBVUVJZENFQklBRWdBbkloQWlBQUVEQWhBU0FCUWY4QmNTRUJJQUZCRUhRaEFTQUNJQUZ5SVFJZ0FCQXdJUUFnQUVIL0FYRWhBQ0FBUVJoMElRQWdBaUFBY2lFQUlBQUxFd0VCZjBFRUVGNGhBQ0FBUVFBMkFnQWdBQXNUQVFGL0lBQW9BZ0FoQVNBQkVCQWdBQkJmQ3lFQUlBQW9BZ0FoQUNBQUJIOGdBRUVFYWlFQUlBQW9BZ0FGUVFBTElRQWdBQXNhQUNBQUtBSUFJUUFnQUFSL0lBQW9BZ0FGUVFBTElRQWdBQXZiQndJU2Z3RjlJd1loRUNNR1FSQnFKQVlnRUVFRWFpRUxJQkFoRENBRVFRQTJBZ0FnQUNnQ0FDRUdBa0FDUUNBR0RRQkJJQ0VGQTBBQ1FDQUxRUUEyQWdBZ0RFRUFOZ0lBSUFVZ0Frb2hCaUFDSUFVZ0Joc2hCaUFCSUFZZ0N5QU1RUUFRR3lFS0lBQWdDallDQUFKQUFrQUNRQUpBSUF3b0FnQU9BZ0VBQWdzZ0FpQUZUQ0VISUFkQkFYTWhCU0FGUVFGeElRVWdCaUFGZENFRlFRRkJBaUFIR3lFR0lBWWhDVUVBSUFnZ0J4c2hDQ0FGSVFZTUFnc2dDeWdDQUNFSElBUW9BZ0FoQlNBRklBZHFJUVVnQkNBRk5nSUFJQUVnQjJvaEFVRUFJUWtnQWlBSGF5RUNEQUVMUVFFaENVRi9JUWdMQWtBQ1FBSkFJQWxCQTNFT0F3QUJBQUVMREFFTERBRUxJQW9FUUNBS0lRWU1Bd1VnQmlFRkRBSUxBQXNMSUFrRWZ5QUlCU0FLSVFZTUFRc2hFZ3dCQ3lBR1FRUnFJUW9nQ2lnQ0FDRUlJQWhCQW5RaENDQUlFRjRoRFNBTlJRUkFFQVlMSUFvb0FnQWhDQ0FJUVFCS0JFQWdDRUVDZENFSUlBMUJBQ0FJRUhvYUMwRUFJUVZCQUNFS0lBRWhDQ0FHSVFFQ1FBSkFBa0FEUUNBTFFRQTJBZ0FnREVFQU5nSUFJQUpCSUVnaEJpQUNRU0FnQmhzaENTQUJJQWdnQ1VFQUlBc2dEQkFVSVFFZ0FVVUVRRUVnSVFZZ0NTRUJBMEFnQWlBR1NpRUdJQVpGRFFRZ0FVRUJkQ0VHSUFZZ0Frb2hBU0FDSUFZZ0FSc2hBU0FBS0FJQUlRa2dDU0FJSUFGQkFDQUxJQXdRRkNFSklBbEZEUUFMSUFraEFRc2dCQ2dDQUNFR0lBWWdBV29oQmlBRUlBWTJBZ0FnQ0NBQmFpRUlJQUlnQVdzaEJpQU1LQUlBSVJFZ0VTQUthaUVKQWtBQ1FDQUZJQWxJQkVBZ0JVVWhBaUFGUVFGMElRRkJnQ0FnQVNBQ0d5RUNJQUFvQWdBaEFTQUJRUVJxSVFVZ0JTZ0NBQ0VGSUFWQkFFb0VRQ0FDUVFKMElRNUJBQ0VCQTBBZ0RTQUJRUUowYWlFSElBY29BZ0FoQlNBRklBNFFZQ0VGSUFWRkRRWWdCeUFGTmdJQUlBRkJBV29oQVNBQUtBSUFJUWNnQjBFRWFpRUZJQVVvQWdBaEJTQUJJQVZJRFFBTElBVWhEaUFISVFFTUFnc0ZJQUFvQWdBaUFVRUVhaUVISUFVaEFpQUhLQUlBSVE0TUFRc01BUXNnRGtFQVNnUkFJQkZCQUVvaEV5QUxLQUlBSVJSQkFDRUhBMEFnRXdSQUlCUWdCMEVDZEdvb0FnQWhGU0FOSUFkQkFuUnFLQUlBSVJaQkFDRUZBMEFnRlNBRlFRSjBhaUVQSUE4cUFnQWhGeUFYUXdBQWdEOWVCRUJEQUFDQVB5RVhCU0FYUXdBQWdMOWRCRUJEQUFDQXZ5RVhDd3NnQlNBS2FpRVBJQllnRDBFQ2RHb2hEeUFQSUJjNEFnQWdCVUVCYWlFRklBVWdFVWNOQUFzTElBZEJBV29oQlNBRklBNUlCRUFnQlNFSERBRUxDd3NMSUFJaEJTQUpJUW9nQmlFQ0RBQUFDd0FMRUFZTUFRc2dBeUFOTmdJQUlBb2hFZ3NMSUJBa0JpQVNDendCQVg4Z0FFRUlkQ0VDSUFGQi93RnhJUUVnQUVFWWRpRUFJQUFnQVhNaEFDQUFRUUowUWRBWmFpRUFJQUFvQWdBaEFDQUFJQUp6SVFBZ0FBdnZCQUVGZnlBQVFkZ0xhaUVHSUFaQkFEWUNBQ0FBUWRRTGFpRUdJQVpCQURZQ0FDQUFRZFFBYWlFSUlBZ29BZ0FoQmdKL0lBWUVmMEVBQlNBQVFTUnFJUWNDUUFKQUEwQUNRQ0FBRUNBaEJrRUFJQVpGRFFVYUlBQkJBUkFzSVFZZ0JrVU5BQ0FITEFBQUlRWWdCZzBDQTBBZ0FCQVpJUVlnQmtGL1J3MEFDeUFJS0FJQUlRWWdCa1VOQVVFQURBVUxDd3dCQ3lBQVFTTVFGVUVBREFJTElBQkJ4QUJxSVFZZ0JpZ0NBQ0VHSUFZRVFDQUFRY2dBYWlFR0lBWW9BZ0FoQnlBQVFkQUFhaUVHSUFZb0FnQWhCaUFISUFaSEJFQkIweE5CeEJOQnVoaEJpeFFRQkFzTElBQkJqQU5xSVFjZ0J5Z0NBQ0VHSUFaQmYyb2hCaUFHRUMwaEJpQUFJQVlRTENFSUlBaEJmMFlFZjBFQUJTQUhLQUlBSVFZZ0NDQUdTQVIvSUFVZ0NEWUNBQ0FBUVpBRGFpQUlRUVpzYWlFSElBY3NBQUFoQlFKQUFrQWdCUVIvSUFCQjZBQnFJUVVnQlNnQ0FDRUZJQUJCQVJBc0lRWWdBRUVCRUN3aENDQUdRUUJISVFrZ0J5d0FBQ0VHSUFaRklRY2dCVUVCZFNFR0lBa2dCM0lFZnd3Q0JTQUFRZVFBYWlFS0lBb29BZ0FoQ1NBRklBbHJJUWtnQ1VFQ2RTRUpJQUVnQ1RZQ0FDQUtLQUlBSVFFZ0FTQUZhaUVKSUFZaEFTQUpRUUoxQ3dVZ0FFSGtBR29oQlNBRktBSUFJUVpCQUNFSUlBWWhCU0FHUVFGMUlRWkJBU0VIREFFTElRWU1BUXNnQVVFQU5nSUFJQVloQVFzZ0FpQUdOZ0lBSUFoQkFFY2hBaUFDSUFkeUJFQWdBeUFCTmdJQUJTQUZRUU5zSVFJZ0FFSGtBR29oQVNBQktBSUFJUUFnQWlBQWF5RUFJQUJCQW5VaEFDQURJQUEyQWdBZ0FTZ0NBQ0VBSUFBZ0Ftb2hBQ0FBUVFKMUlRVUxJQVFnQlRZQ0FFRUJCVUVBQ3dzTEN5RUFJQUFMakIwQ0ozOERmU01HSVJ3akJrR0FGR29rQmlBY1FZQU1haUVkSUJ4QmdBUnFJU1FnSEVHQUFtb2hGQ0FjSVNBZ0FpMEFBQ0VISUFkQi93RnhJUWNnQUVIY0FHb2dCMEVDZEdvaEJ5QUhLQUlBSVI0Z0FFR0lBMm9oQnlBSEtBSUFJUllnQWtFQmFpRUhJQWN0QUFBaEJ5QUhRZjhCY1NFWElCWWdGMEVvYkdvaElpQWVRUUYxSVI5QkFDQWZheUVwSUFCQkJHb2hHaUFhS0FJQUlRY0Nmd0pBSUFkQkFFb0VmeUFXSUJkQktHeHFRUVJxSVNvZ0FFSDRBV29oS3lBQVFmQUFhaUVsSUFCQjZBcHFJUmdnQUVIa0Ntb2hJU0FVUVFGcUlTd0RRQUpBSUNvb0FnQWhCeUFISUExQkEyeHFRUUpxSVFjZ0J5MEFBQ0VISUFkQi93RnhJUWNnSFNBTlFRSjBhaUVWSUJWQkFEWUNBQ0FXSUJkQktHeHFRUWxxSUFkcUlRY2dCeTBBQUNFSElBZEIvd0Z4SVE4Z0FFSDRBR29nRDBFQmRHb2hCeUFITGdFQUlRY2dCMFVOQUNBcktBSUFJUkFnQUVFQkVDd2hCd0pBQWtBZ0IwVU5BQ0FRSUE5QnZBeHNha0cwREdvaEJ5QUhMUUFBSVFjZ0IwSC9BWEVoQnlBSFFYOXFJUWNnQjBFQ2RFR1FDR29oQnlBSEtBSUFJU01nQUVIWUIyb2dEVUVDZEdvaEJ5QUhLQUlBSVJrZ0l4QXRJUWNnQjBGL2FpRUhJQUFnQnhBc0lRZ2dDRUgvL3dOeElRZ2dHU0FJT3dFQUlBQWdCeEFzSVFjZ0IwSC8vd054SVFjZ0dVRUNhaUVJSUFnZ0J6c0JBQ0FRSUE5QnZBeHNhaUVtSUNZc0FBQWhCeUFIQkVCQkFDRVRRUUloQndOQUlCQWdEMEc4REd4cVFRRnFJQk5xSVFnZ0NDMEFBQ0VJSUFoQi93RnhJUnNnRUNBUFFid01iR3BCSVdvZ0cyb2hDQ0FJTEFBQUlRd2dERUgvQVhFaEp5QVFJQTlCdkF4c2FrRXhhaUFiYWlFSUlBZ3NBQUFoQ0NBSVFmOEJjU0VvUVFFZ0tIUWhDU0FKUVg5cUlTMGdDQVJBSUNVb0FnQWhDeUFRSUE5QnZBeHNha0hCQUdvZ0cyb2hDQ0FJTFFBQUlRZ2dDRUgvQVhFaENpQUxJQXBCc0JCc2FpRU9JQmdvQWdBaENDQUlRUXBJQkVBZ0FCQTBDeUFoS0FJQUlRa2dDVUgvQjNFaENDQUxJQXBCc0JCc2FrRWthaUFJUVFGMGFpRUlJQWd1QVFBaENDQUlRWDlLQkVBZ0N5QUtRYkFRYkdwQkNHb2hEaUFPS0FJQUlRNGdEaUFJYWlFT0lBNHRBQUFoRGlBT1FmOEJjU0VPSUFrZ0RuWWhDU0FoSUFrMkFnQWdHQ2dDQUNFSklBa2dEbXNoQ1NBSlFRQklJUTVCQUNBSklBNGJJUkZCZnlBSUlBNGJJUWtnR0NBUk5nSUFCU0FBSUE0UU5TRUpDeUFMSUFwQnNCQnNha0VYYWlFSUlBZ3NBQUFoQ0NBSUJFQWdDeUFLUWJBUWJHcEJxQkJxSVFnZ0NDZ0NBQ0VJSUFnZ0NVRUNkR29oQ0NBSUtBSUFJUWtMQlVFQUlRa0xJQXdFUUVFQUlRc2dCeUVJQTBBZ0NTQXRjU0VLSUJBZ0QwRzhER3hxUWRJQWFpQWJRUVIwYWlBS1FRRjBhaUVLSUFvdUFRQWhEQ0FKSUNoMUlRb2dERUYvU2dSL0lDVW9BZ0FoRGlBT0lBeEJzQkJzYWlFU0lCZ29BZ0FoQ1NBSlFRcElCRUFnQUJBMEN5QWhLQUlBSVJFZ0VVSC9CM0VoQ1NBT0lBeEJzQkJzYWtFa2FpQUpRUUYwYWlFSklBa3VBUUFoQ1NBSlFYOUtCRUFnRGlBTVFiQVFiR3BCQ0dvaEVpQVNLQUlBSVJJZ0VpQUphaUVTSUJJdEFBQWhFaUFTUWY4QmNTRVNJQkVnRW5ZaEVTQWhJQkUyQWdBZ0dDZ0NBQ0VSSUJFZ0Vtc2hFU0FSUVFCSUlSSkJBQ0FSSUJJYklSRkJmeUFKSUJJYklRa2dHQ0FSTmdJQUJTQUFJQklRTlNFSkN5QU9JQXhCc0JCc2FrRVhhaUVSSUJFc0FBQWhFU0FSQkVBZ0RpQU1RYkFRYkdwQnFCQnFJUXdnRENnQ0FDRU1JQXdnQ1VFQ2RHb2hDU0FKS0FJQUlRa0xJQWxCLy84RGNRVkJBQXNoQ1NBWklBaEJBWFJxSUFrN0FRQWdDRUVCYWlFSUlBdEJBV29oQ3lBTElDZEhCRUFnQ2lFSkRBRUxDeUFISUNkcUlRY0xJQk5CQVdvaEV5QW1MUUFBSVFnZ0NFSC9BWEVoQ0NBVElBaEpEUUFMQ3lBWUtBSUFJUWNnQjBGL1JnMEFJQ3hCQVRvQUFDQVVRUUU2QUFBZ0VDQVBRYndNYkdwQnVBeHFJUWNnQnlnQ0FDRVRJQk5CQWtvRVFDQWpRZi8vQTJvaEcwRUNJUWNEUUNBUUlBOUJ2QXhzYWtIQUNHb2dCMEVCZEdvaENDQUlMUUFBSVFnZ0NFSC9BWEVoQ3lBUUlBOUJ2QXhzYWlBSFFRRjBha0hCQ0dvaENDQUlMUUFBSVFnZ0NFSC9BWEVoQ2lBUUlBOUJ2QXhzYWtIU0Ftb2dCMEVCZEdvaENDQUlMd0VBSVFnZ0NFSC8vd054SVFnZ0VDQVBRYndNYkdwQjBnSnFJQXRCQVhScUlRa2dDUzhCQUNFSklBbEIvLzhEY1NFSklCQWdEMEc4REd4cVFkSUNhaUFLUVFGMGFpRU1JQXd2QVFBaERDQU1RZi8vQTNFaERDQVpJQXRCQVhScUlRNGdEaTRCQUNFT0lCa2dDa0VCZEdvaEZTQVZMZ0VBSVJVZ0NDQUpJQXdnRGlBVkVEWWhDQ0FaSUFkQkFYUnFJUTRnRGk0QkFDRUpJQ01nQ0dzaERBSkFBa0FnQ1FSQUlBd2dDRWdoRlNBTUlBZ2dGUnRCQVhRaEZTQVVJQXBxSVFvZ0NrRUJPZ0FBSUJRZ0Myb2hDeUFMUVFFNkFBQWdGQ0FIYWlFTElBdEJBVG9BQUNBVklBbE1CRUFnRENBSVNnMERJQnNnQ1dzaENBd0NDeUFKUVFGeElRc2dDd1IvSUFsQkFXb2hDU0FKUVFGMklRa2dDQ0FKYXdVZ0NVRUJkU0VKSUFrZ0NHb0xJUWdGSUJRZ0Iyb2hDU0FKUVFBNkFBQUxDeUFPSUFnN0FRQUxJQWRCQVdvaEJ5QUhJQk5JRFFBTEN5QVRRUUJLQkVCQkFDRUhBMEFnRkNBSGFpRUlJQWdzQUFBaENDQUlSUVJBSUJrZ0IwRUJkR29oQ0NBSVFYODdBUUFMSUFkQkFXb2hCeUFISUJOSERRQUxDd3dCQ3lBVlFRRTJBZ0FMSUExQkFXb2hEU0FhS0FJQUlRY2dEU0FIU0EwQkRBTUxDeUFBUVJVUUZVRUFCUXdCQ3d3QkN5QUFRY1FBYWlFVElCTW9BZ0FoQ1NBSkJFQWdBRUhJQUdvaENDQUlLQUlBSVFnZ0FFSFFBR29oRFNBTktBSUFJUTBnQ0NBTlJ3UkFRZE1UUWNRVFFjOFpRZWNVRUFRTEN5QUhRUUowSVFnZ0pDQWRJQWdRZVJvZ0lpNEJBQ0VJSUFnRVFDQVdJQmRCS0d4cUtBSUVJUTBnQ0VILy93TnhJUXhCQUNFSUEwQWdEU0FJUVFOc2FpRUxJQXN0QUFBaEN5QUxRZjhCY1NFTElCMGdDMEVDZEdvaEN5QUxLQUlBSVE4Z0hTQU5JQWhCQTJ4cUxRQUJRUUowYWlFS0FrQUNRQ0FQUlEwQUlBb29BZ0FoRHlBUFJRMEFEQUVMSUFwQkFEWUNBQ0FMUVFBMkFnQUxJQWhCQVdvaENDQUlJQXhKRFFBTEN5QVdJQmRCS0d4cVFRaHFJUXNnQ3l3QUFDRUlJQWdFUUNBV0lCZEJLR3hxUVFScUlReEJBQ0VKSUFjaERRTkFBa0FnRFVFQVNnUkFJQXdvQWdBaEQwRUFJUWRCQUNFSUEwQWdEeUFJUVFOc2FrRUNhaUVLSUFvdEFBQWhDaUFLUWY4QmNTRUtJQWtnQ2tZRVFDQWRJQWhCQW5ScUlRb2dDaWdDQUNFUUlDQWdCMm9oQ2lBUUJFQWdDa0VCT2dBQUlCUWdCMEVDZEdvaENpQUtRUUEyQWdBRklBcEJBRG9BQUNBQVFaUUdhaUFJUVFKMGFpRUtJQW9vQWdBaENpQVVJQWRCQW5ScUlSQWdFQ0FLTmdJQUN5QUhRUUZxSVFjTElBaEJBV29oQ0NBSUlBMUlEUUFMQlVFQUlRY0xJQllnRjBFb2JHcEJHR29nQ1dvaENDQUlMUUFBSVFnZ0NFSC9BWEVoQ0NBQUlCUWdCeUFmSUFnZ0lCQTNJQWxCQVdvaENTQUxMUUFBSVFjZ0IwSC9BWEVoQnlBSklBZFBEUUFnR2lnQ0FDRU5EQUVMQ3lBVEtBSUFJUWtMSUFrRVFDQUFRY2dBYWlFSElBY29BZ0FoQnlBQVFkQUFhaUVJSUFnb0FnQWhDQ0FISUFoSEJFQkIweE5CeEJOQjhCbEI1eFFRQkFzTElDSXVBUUFoQnlBSEJFQWdGaUFYUVNoc2FpZ0NCQ0VOSUI1QkFVb2hEQ0FIUWYvL0EzRWhDQU5BSUFoQmYyb2hDU0FOSUFsQkEyeHFJUWNnQnkwQUFDRUhJQWRCL3dGeElRY2dBRUdVQm1vZ0IwRUNkR29oQnlBSEtBSUFJU0FnRFNBSlFRTnNha0VCYWlFSElBY3RBQUFoQnlBSFFmOEJjU0VISUFCQmxBWnFJQWRCQW5ScUlRY2dCeWdDQUNFUElBd0VRRUVBSVFjRFFDQWdJQWRCQW5ScUlRc2dDeW9DQUNFdUlBOGdCMEVDZEdvaUVDb0NBQ0l2UXdBQUFBQmVJUW9nTGtNQUFBQUFYZ1JBSUFvRVFDQXVJVEFnTGlBdmt5RXVCU0F1SUMrU0lUQUxCU0FLQkVBZ0xpRXdJQzRnTDVJaExnVWdMaUF2a3lFd0N3c2dDeUF3T0FJQUlCQWdMamdDQUNBSFFRRnFJUWNnQnlBZlNBMEFDd3NnQ0VFQlNnUkFJQWtoQ0F3QkN3c0xJQm9vQWdBaEJ5QUhRUUJLQkVBZ0gwRUNkQ0VKUVFBaEJ3TkFJQ1FnQjBFQ2RHb2hDQ0FJS0FJQUlRMGdBRUdVQm1vZ0IwRUNkR29oQ0NBTkJFQWdDQ2dDQUNFSUlBaEJBQ0FKRUhvYUJTQUlLQUlBSVFnZ0FFSFlCMm9nQjBFQ2RHb2hEU0FOS0FJQUlRMGdBQ0FpSUFjZ0hpQUlJQTBRT0FzZ0IwRUJhaUVISUJvb0FnQWhDQ0FISUFoSURRQUxJQWhCQUVvRVFFRUFJUWNEUUNBQVFaUUdhaUFIUVFKMGFpRUlJQWdvQWdBaENDQUNMUUFBSVFrZ0NVSC9BWEVoQ1NBSUlCNGdBQ0FKRURrZ0IwRUJhaUVISUJvb0FnQWhDQ0FISUFoSURRQUxDd3NnQUJBaElBQkIxUXBxSVFJZ0Fpd0FBQ0VISUFjRVFDQUFRWmdJYWlFR0lBWWdLVFlDQUNBZUlBVnJJUVlnQUVINENtb2hCeUFISUFZMkFnQWdBRUdjQ0dvaEJpQUdRUUUyQWdBZ0FrRUFPZ0FBQlNBQVFmZ0thaUVISUFjb0FnQWhBaUFDQkVBZ0JDQURheUVJSUFJZ0NFZ0VRQ0FDSUFOcUlRTWdCaUFETmdJQUlBZEJBRFlDQUFVZ0FpQUlheUVDSUFjZ0FqWUNBQ0FHSUFRMkFnQWdCQ0VEQ3dzTElBQkI0QXBxSVFJZ0FpZ0NBQ0VDSUFCQjhBcHFJUVlnQmlnQ0FDRUhJQUJCbkFocUlnZ29BZ0FoQmdKQUFrQWdBaUFIUmdSQUlBWUVRQ0FBUWRNS2FpRUNJQUlzQUFBaEFpQUNRUVJ4SVFJZ0FnUkFJQUJCOUFwcUlRSWdBaWdDQUNFQ0lBQkJtQWhxSVFZZ0JpZ0NBQ0VISUFVZ0Eyc2hDU0FKSUFkcUlRa2dBaUFKU1NFSklBSWdCMGtoRFNBQ0lBZHJJUUpCQUNBQ0lBMGJJUUlnQWlBRGFpRUNJQUlnQlVvaEJ5QUZJQUlnQnhzaEFpQUpCRUFnQVNBQ05nSUFJQVlvQWdBaEFDQUFJQUpxSVFBZ0JpQUFOZ0lBUVFFTUJnc0xDeUFBUWZRS2FpRUNJQUlvQWdBaEFpQURJQjlySVFZZ0JpQUNhaUVHSUFCQm1BaHFJUUlnQWlBR05nSUFJQWhCQVRZQ0FBd0JCU0FBUVpnSWFpRUNJQVlOQVFzTUFRc2dCQ0FEYXlFRElBSW9BZ0FoQkNBRElBUnFJUU1nQWlBRE5nSUFDeUFUS0FJQUlRSWdBZ1JBSUFCQnlBQnFJUUlnQWlnQ0FDRUNJQUJCMEFCcUlRQWdBQ2dDQUNFQUlBSWdBRWNFUUVIVEUwSEVFMEhrR2tIbkZCQUVDd3NnQVNBRk5nSUFRUUVMSVFBZ0hDUUdJQUFMcUFJQkJYOGdBRUhvQ21vaEJTQUZLQUlBSVFJQ1FDQUNRUUJJQkVCQkFDRUFCU0FDSUFGSUJFQWdBVUVZU2dSQUlBQkJHQkFzSVFJZ0FVRm9haUVCSUFBZ0FSQXNJUUFnQUVFWWRDRUFJQUFnQW1vaEFDQUFEd3NnQWtVRVFDQUFRZVFLYWlFQ0lBSkJBRFlDQUFzZ0FFSGtDbW9oQXdKQUFrQUNRQU5BSUFBUUxpRUNJQUpCZjBZTkFTQUZLQUlBSVFRZ0FpQUVkQ0VDSUFNb0FnQWhCaUFHSUFKcUlRSWdBeUFDTmdJQUlBVWdCRUVJYWlJQ05nSUFJQUlnQVVnTkFBd0NBQXNBQ3lBRlFYODJBZ0JCQUNFQURBUUxJQVJCZUVnRVFFRUFJUUFNQkFzTEN5QUFRZVFLYWlFRUlBUW9BZ0FoQTBFQklBRjBJUUFnQUVGL2FpRUFJQU1nQUhFaEFDQURJQUYySVFNZ0JDQUROZ0lBSUFJZ0FXc2hBU0FGSUFFMkFnQUxDeUFBQzQwQ0FBSkFJQUJCQUVnRWYwRUFCU0FBUVlDQUFVZ0VRQ0FBUVJCSUJFQWdBRUdBQ0dvaEFDQUFMQUFBSVFBTUF3c2dBRUdBQkVnRVFDQUFRUVYySVFBZ0FFR0FDR29oQUNBQUxBQUFJUUFnQUVFRmFpRUFCU0FBUVFwMklRQWdBRUdBQ0dvaEFDQUFMQUFBSVFBZ0FFRUthaUVBQ3d3Q0N5QUFRWUNBZ0FoSUJIOGdBRUdBZ0NCSUJIOGdBRUVQZGlFQUlBQkJnQWhxSVFBZ0FDd0FBQ0VBSUFCQkQyb0ZJQUJCRkhZaEFDQUFRWUFJYWlFQUlBQXNBQUFoQUNBQVFSUnFDd1VnQUVHQWdJQ0FBa2dFZnlBQVFSbDJJUUFnQUVHQUNHb2hBQ0FBTEFBQUlRQWdBRUVaYWdVZ0FFRWVkaUVBSUFCQmdBaHFJUUFnQUN3QUFDRUFJQUJCSG1vTEN3c2hBQXNnQUF1aUFRRURmeUFBUWRRS2FpRUNJQUlzQUFBaEFRSkFBa0FnQVEwQUlBQkIzQXBxSVFFZ0FTZ0NBQ0VCSUFFRVFFRi9JUU1GSUFBUUx5RUJJQUVFUUNBQ0xBQUFJUUVnQVEwQ1FhRVVRY1FUUWZZTFFiVVVFQVFGUVg4aEF3c0xEQUVMSUFGQmYycEJHSFJCR0hVaEFTQUNJQUU2QUFBZ0FFSHNDbW9oQVNBQktBSUFJUUlnQWtFQmFpRUNJQUVnQWpZQ0FDQUFFREFoQUNBQVFmOEJjU0VEQ3lBREM2d0NBUWQvSUFCQjNBcHFJUUlnQWlnQ0FDRUJBa0FnQVVVRVFDQUFRZGdLYWlFRUlBUW9BZ0FoQVNBQlFYOUdCRUFnQUVIUUNHb2hBU0FCS0FJQUlRRWdBVUYvYWlFQklBQkI0QXBxSVFNZ0F5QUJOZ0lBSUFBUU1TRUJJQUZGQkVBZ0FrRUJOZ0lBREFNTElBQkIwd3BxSVFFZ0FTd0FBQ0VCSUFGQkFYRWhBU0FCQkg4Z0JDZ0NBQVVnQUVFZ0VCVU1Bd3NoQVFzZ0FVRUJhaUVISUFRZ0J6WUNBQ0FBUWRRSWFpQUJhaUVESUFNc0FBQWhCaUFHUWY4QmNTRURJQVpCZjBjRVFDQUNRUUUyQWdBZ0FFSGdDbW9oQWlBQ0lBRTJBZ0FMSUFCQjBBaHFJUUVnQVNnQ0FDRUJJQWNnQVU0RVFDQUVRWDgyQWdBTElBQkIxQXBxSVFBZ0FDd0FBQ0VCSUFFRVFFSEZGRUhFRTBIb0MwSGFGQkFFQlNBQUlBWTZBQUFnQXlFRkN3c0xJQVVMVVFFRGZ5QUFRUlJxSVFNZ0F5Z0NBQ0VCSUFCQkhHb2hBaUFDS0FJQUlRSWdBU0FDU1FSL0lBRkJBV29oQUNBRElBQTJBZ0FnQVN3QUFBVWdBRUhVQUdvaEFDQUFRUUUyQWdCQkFBc2hBQ0FBQ3lBQkFYOGdBQkF5SVFFZ0FRUi9JQUFRTXdVZ0FFRWVFQlZCQUFzaEFDQUFDMkFCQVg4Z0FCQXdJUUVnQVVIL0FYRkJ6d0JHQkVBZ0FCQXdJUUVnQVVIL0FYRkI1d0JHQkVBZ0FCQXdJUUVnQVVIL0FYRkI1d0JHQkVBZ0FCQXdJUUFnQUVIL0FYRkIwd0JHSVFBRlFRQWhBQXNGUVFBaEFBc0ZRUUFoQUFzZ0FBdlpBd0VHZnlBQUVEQWhBUUovSUFGQi93RnhCSDhnQUVFZkVCVkJBQVVnQUJBd0lRRWdBRUhUQ21vaEFpQUNJQUU2QUFBZ0FCQWpJUVVnQUJBaklRSWdBQkFqR2lBQUVDTWhBU0FBUWN3SWFpRURJQU1nQVRZQ0FDQUFFQ01hSUFBUU1DRUJJQUZCL3dGeElRRWdBRUhRQ0dvaEF5QURJQUUyQWdBZ0FFSFVDR29oQkNBQUlBUWdBUkFpSVFFZ0FVVUVRQ0FBUVFvUUZVRUFEQUlMSUFCQjhBcHFJUVFnQkVGK05nSUFJQUlnQlhFaEFRSkFJQUZCZjBjRVFDQURLQUlBSVFFZ0FVRUFTZ1JBQTBBQ1FDQUJRWDlxSVFJZ0FFSFVDR29nQW1vaEJpQUdMQUFBSVFZZ0JrRi9SdzBBSUFGQkFVd05CQ0FDSVFFTUFRc0xJQVFnQWpZQ0FDQUFRZlFLYWlFQklBRWdCVFlDQUFzTEN5QUFRZFVLYWlFQklBRXNBQUFoQVNBQkJFQWdBeWdDQUNFRElBTkJBRW9FZjBFQUlRSkJBQ0VCQTBBZ0FFSFVDR29nQVdvaEJDQUVMUUFBSVFRZ0JFSC9BWEVoQkNBQ0lBUnFJUUlnQVVFQmFpRUJJQUVnQTBnTkFBc2dBa0ViYWdWQkd3c2hBU0FBUVNocUlRSWdBaWdDQUNFQ0lBRWdBMm9oQVNBQklBSnFJUUVnQUVFc2FpRURJQU1nQWpZQ0FDQUFRVEJxSVFJZ0FpQUJOZ0lBSUFCQk5Hb2hBU0FCSUFVMkFnQUxJQUJCMkFwcUlRQWdBRUVBTmdJQVFRRUxDeUVBSUFBTG93RUJCMzhnQUVIb0Ntb2hBeUFES0FJQUlRRUNRQ0FCUVJsSUJFQWdBRUhrQ21vaEJDQUJSUVJBSUFSQkFEWUNBQXNnQUVIVUNtb2hCU0FBUWR3S2FpRUdBMEFnQmlnQ0FDRUJJQUVFUUNBRkxBQUFJUUVnQVVVTkF3c2dBQkF1SVFJZ0FrRi9SZzBDSUFNb0FnQWhBU0FDSUFGMElRSWdCQ2dDQUNFSElBY2dBbW9oQWlBRUlBSTJBZ0FnQVVFSWFpRUNJQU1nQWpZQ0FDQUJRUkZJRFFBTEN3c0xyUVVCQ1g4Z0FCQTBJQUZCSUdvaEFpQUNLQUlBSVFVQ1FBSkFJQVZGSWdORkRRQWdBVUdrRUdvaEFpQUNLQUlBSVFJZ0FnMEFRWDhoQVF3QkN5QUJRUVJxSVFJZ0FpZ0NBQ0VDQWtBQ1FDQUNRUWhLQkVBZ0FVR2tFR29oQXlBREtBSUFJUU1nQXcwQkJTQUREUUVMREFFTElBQkI1QXBxSVFnZ0NDZ0NBQ0VKSUFrUU9pRUhJQUZCckJCcUlRSWdBaWdDQUNFQ0lBSkJBVW9FUUNBQlFhUVFhaWdDQUNFS1FRQWhBd05BSUFKQkFYWWhCU0FGSUFOcUlRUWdDaUFFUVFKMGFpRUdJQVlvQWdBaEJpQUdJQWRMSVFZZ0FpQUZheUVDSUFNZ0JDQUdHeUVESUFVZ0FpQUdHeUVDSUFKQkFVb05BQXNGUVFBaEF3c2dBVUVYYWlFQ0lBSXNBQUFoQWlBQ1JRUkFJQUZCcUJCcUlRSWdBaWdDQUNFQ0lBSWdBMEVDZEdvaEFpQUNLQUlBSVFNTElBRkJDR29oQVNBQktBSUFJUUVnQVNBRGFpRUJJQUV0QUFBaEFTQUJRZjhCY1NFQklBQkI2QXBxSVFJZ0FpZ0NBQ0VBSUFBZ0FVZ0VmMEVBSVFCQmZ3VWdBQ0FCYXlFQUlBa2dBWFloQVNBSUlBRTJBZ0FnQXdzaEFTQUNJQUEyQWdBTUFRc2dBVUVYYWlFRElBTXNBQUFoQXlBREJFQkJnUlZCeEJOQjZneEJqQlVRQkFzQ1FDQUNRUUJLQkVBZ0FTZ0NDQ0VJSUFCQjVBcHFJUWxCQUNFQkEwQUNRQ0FJSUFGcUlRTWdBeXdBQUNFRUlBUkIvd0Z4SVFNZ0JFRi9Sd1JBSUFVZ0FVRUNkR29oQkNBRUtBSUFJUVlnQ1NnQ0FDRUVRUUVnQTNRaEJ5QUhRWDlxSVFjZ0JDQUhjU0VISUFZZ0IwWU5BUXNnQVVFQmFpRUJJQUVnQWtnTkFRd0RDd3NnQUVIb0Ntb2hBQ0FBS0FJQUlRSWdBaUFEU0FSQUlBQkJBRFlDQUVGL0lRRUZJQWdnQVdvaEJTQUVJQU4ySVFNZ0NTQUROZ0lBSUFVdEFBQWhBeUFEUWY4QmNTRURJQUlnQTJzaEFpQUFJQUkyQWdBTERBSUxDeUFBUVJVUUZTQUFRZWdLYWlFQUlBQkJBRFlDQUVGL0lRRUxJQUVMWGdFQ2Z5QUVJQU5ySVFRZ0FpQUJheUVDSUFSQmYwb2hCVUVBSUFScklRWWdCQ0FHSUFVYklRVWdBQ0FCYXlFQUlBVWdBR3doQUNBQUlBSnRJUUFnQkVFQVNDRUJRUUFnQUdzaEFpQUNJQUFnQVJzaEFDQUFJQU5xSVFBZ0FBdjdHZ0VjZnlNR0lSd2pCa0VRYWlRR0lCeEJCR29oQ1NBY0lSSWdBRUdBQTJvaENpQUtLQUlBSVEwZ0FFR0FBbW9nQkVFQmRHb2hDaUFLTGdFQUlRb2dDa0gvL3dOeElSa2dEU0FFUVJoc2FrRU5haUVhSUJvdEFBQWhEaUFPUWY4QmNTRU9JQUJCOEFCcUlSVWdGU2dDQUNFUUlCQWdEa0d3RUd4cUlRNGdEaWdDQUNFWUlBcEJBa1loRENBRElBeDBJUW9nRFNBRVFSaHNhaUVXSUJZb0FnQWhEaUFPSUFwSklSQWdEaUFLSUJBYklSQWdEU0FFUVJoc2FrRUVhaUVPSUE0b0FnQWhEaUFPSUFwSklSUWdEaUFLSUJRYklRb2dDaUFRYXlFS0lBMGdCRUVZYkdwQkNHb2hGQ0FVS0FJQUlRNGdDaUFPYmlFUUlBQkIwQUJxSVI0Z0hpZ0NBQ0VmSUFCQnhBQnFJUW9nQ2lnQ0FDRUtJQXBGSVE0Z0FFRUVhaUVUSUJNb0FnQWhDaUFRUVFKMElRWWdCa0VFYWlFSElBb2dCMndoQnlBT0JFQWpCaUVPSXdZZ0IwRVBha0Z3Y1dva0JnVWdBQ0FIRUR3aERpQVRLQUlBSVFvTElBNGdDaUFHRURzYUlBSkJBRW9pQmdSQUlBTkJBblFoRTBFQUlRb0RRQ0FGSUFwcUlRY2dCeXdBQUNFSElBZEZCRUFnQVNBS1FRSjBhaUVISUFjb0FnQWhCeUFIUVFBZ0V4QjZHZ3NnQ2tFQmFpRUtJQW9nQWtjTkFBc0xJQUpCQVVjaENnSkFJQW9nREhFRVFBSkFJQVlFUUVFQUlRb0RRQ0FGSUFwcUlRd2dEQ3dBQUNFTUlBeEZEUUlnQ2tFQmFpRUtJQW9nQWtnTkFBc0ZRUUFoQ2dzTElBb2dBa2NFUUNBUVFRQktJUkVnQUVIb0Ntb2hEQ0FZUVFCS0lROGdBRUhrQ21vaEV5QU5JQVJCR0d4cVFSUnFJUmtnRFNBRVFSaHNha0VRYWlFYlFRQWhDZ0pBQTBBQ1FBSkFBa0FDUUNBQ1FRRnJEZ0lCQUFJTElCRUVRQ0FLUlNFWFFRQWhCRUVBSVEwRFFDQVdLQUlBSVFVZ0ZDZ0NBQ0VHSUFZZ0JHd2hCaUFHSUFWcUlRVWdCVUVCY1NFR0lBa2dCallDQUNBRlFRRjFJUVVnRWlBRk5nSUFJQmNFUUNBVktBSUFJUVlnR2kwQUFDRUZJQVZCL3dGeElRY2dCaUFIUWJBUWJHb2hDeUFNS0FJQUlRVWdCVUVLU0FSQUlBQVFOQXNnRXlnQ0FDRUlJQWhCL3dkeElRVWdCaUFIUWJBUWJHcEJKR29nQlVFQmRHb2hCU0FGTGdFQUlRVWdCVUYvU2dSQUlBWWdCMEd3RUd4cVFRaHFJUXNnQ3lnQ0FDRUxJQXNnQldvaEN5QUxMUUFBSVFzZ0MwSC9BWEVoQ3lBSUlBdDJJUWdnRXlBSU5nSUFJQXdvQWdBaENDQUlJQXRySVFnZ0NFRUFTQ0VMUVFBZ0NDQUxHeUVJUVg4Z0JTQUxHeUVGSUF3Z0NEWUNBQVVnQUNBTEVEVWhCUXNnQmlBSFFiQVFiR3BCRjJvaENDQUlMQUFBSVFnZ0NBUkFJQVlnQjBHd0VHeHFRYWdRYWlFR0lBWW9BZ0FoQmlBR0lBVkJBblJxSVFVZ0JTZ0NBQ0VGQ3lBRlFYOUdEUWNnR3lnQ0FDRUdJQVlnQlVFQ2RHb2hCU0FGS0FJQUlRVWdEaWdDQUNFR0lBWWdEVUVDZEdvaEJpQUdJQVUyQWdBTElBUWdFRWdoQlNBRklBOXhCRUJCQUNFRkEwQWdGQ2dDQUNFR0lBNG9BZ0FoQnlBSElBMUJBblJxSVFjZ0J5Z0NBQ0VISUFjZ0JXb2hCeUFITFFBQUlRY2dCMEgvQVhFaEJ5QVpLQUlBSVFnZ0NDQUhRUVIwYWlBS1FRRjBhaUVISUFjdUFRQWhCeUFIUVg5S0JFQWdGU2dDQUNFSUlBZ2dCMEd3RUd4cUlRY2dBQ0FISUFGQkFpQUpJQklnQXlBR0VEMGhCaUFHUlEwSkJTQVdLQUlBSVFjZ0JpQUViQ0VJSUFnZ0Jtb2hCaUFHSUFkcUlRWWdCa0VCY1NFSElBa2dCellDQUNBR1FRRjFJUVlnRWlBR05nSUFDeUFGUVFGcUlRVWdCRUVCYWlFRUlBVWdHRWdoQmlBRUlCQklJUWNnQnlBR2NRMEFDd3NnRFVFQmFpRU5JQVFnRUVnTkFBc0xEQUlMSUJFRVFDQUtSU0VYUVFBaERVRUFJUVFEUUNBV0tBSUFJUVVnRkNnQ0FDRUdJQVlnQkd3aEJpQUdJQVZxSVFVZ0NVRUFOZ0lBSUJJZ0JUWUNBQ0FYQkVBZ0ZTZ0NBQ0VHSUJvdEFBQWhCU0FGUWY4QmNTRUhJQVlnQjBHd0VHeHFJUXNnRENnQ0FDRUZJQVZCQ2tnRVFDQUFFRFFMSUJNb0FnQWhDQ0FJUWY4SGNTRUZJQVlnQjBHd0VHeHFRU1JxSUFWQkFYUnFJUVVnQlM0QkFDRUZJQVZCZjBvRVFDQUdJQWRCc0JCc2FrRUlhaUVMSUFzb0FnQWhDeUFMSUFWcUlRc2dDeTBBQUNFTElBdEIvd0Z4SVFzZ0NDQUxkaUVJSUJNZ0NEWUNBQ0FNS0FJQUlRZ2dDQ0FMYXlFSUlBaEJBRWdoQzBFQUlBZ2dDeHNoQ0VGL0lBVWdDeHNoQlNBTUlBZzJBZ0FGSUFBZ0N4QTFJUVVMSUFZZ0IwR3dFR3hxUVJkcUlRZ2dDQ3dBQUNFSUlBZ0VRQ0FHSUFkQnNCQnNha0dvRUdvaEJpQUdLQUlBSVFZZ0JpQUZRUUowYWlFRklBVW9BZ0FoQlFzZ0JVRi9SZzBHSUJzb0FnQWhCaUFHSUFWQkFuUnFJUVVnQlNnQ0FDRUZJQTRvQWdBaEJpQUdJQTFCQW5ScUlRWWdCaUFGTmdJQUN5QUVJQkJJSVFVZ0JTQVBjUVJBUVFBaEJRTkFJQlFvQWdBaEJpQU9LQUlBSVFjZ0J5QU5RUUowYWlFSElBY29BZ0FoQnlBSElBVnFJUWNnQnkwQUFDRUhJQWRCL3dGeElRY2dHU2dDQUNFSUlBZ2dCMEVFZEdvZ0NrRUJkR29oQnlBSExnRUFJUWNnQjBGL1NnUkFJQlVvQWdBaENDQUlJQWRCc0JCc2FpRUhJQUFnQnlBQlFRRWdDU0FTSUFNZ0JoQTlJUVlnQmtVTkNBVWdGaWdDQUNFSElBWWdCR3doQ0NBSUlBWnFJUVlnQmlBSGFpRUdJQWxCQURZQ0FDQVNJQVkyQWdBTElBVkJBV29oQlNBRVFRRnFJUVFnQlNBWVNDRUdJQVFnRUVnaEJ5QUhJQVp4RFFBTEN5QU5RUUZxSVEwZ0JDQVFTQTBBQ3dzTUFRc2dFUVJBSUFwRklSZEJBQ0VOUVFBaEJBTkFJQllvQWdBaEJTQVVLQUlBSVFZZ0JpQUViQ0VHSUFZZ0JXb2hCU0FGSUFVZ0FtMGlCU0FDYkdzaEJpQUpJQVkyQWdBZ0VpQUZOZ0lBSUJjRVFDQVZLQUlBSVFZZ0dpMEFBQ0VGSUFWQi93RnhJUWNnQmlBSFFiQVFiR29oQ3lBTUtBSUFJUVVnQlVFS1NBUkFJQUFRTkFzZ0V5Z0NBQ0VJSUFoQi93ZHhJUVVnQmlBSFFiQVFiR3BCSkdvZ0JVRUJkR29oQlNBRkxnRUFJUVVnQlVGL1NnUkFJQVlnQjBHd0VHeHFRUWhxSVFzZ0N5Z0NBQ0VMSUFzZ0JXb2hDeUFMTFFBQUlRc2dDMEgvQVhFaEN5QUlJQXQySVFnZ0V5QUlOZ0lBSUF3b0FnQWhDQ0FJSUF0cklRZ2dDRUVBU0NFTFFRQWdDQ0FMR3lFSVFYOGdCU0FMR3lFRklBd2dDRFlDQUFVZ0FDQUxFRFVoQlFzZ0JpQUhRYkFRYkdwQkYyb2hDQ0FJTEFBQUlRZ2dDQVJBSUFZZ0IwR3dFR3hxUWFnUWFpRUdJQVlvQWdBaEJpQUdJQVZCQW5ScUlRVWdCU2dDQUNFRkN5QUZRWDlHRFFVZ0d5Z0NBQ0VHSUFZZ0JVRUNkR29oQlNBRktBSUFJUVVnRGlnQ0FDRUdJQVlnRFVFQ2RHb2hCaUFHSUFVMkFnQUxJQVFnRUVnaEJTQUZJQTl4QkVCQkFDRUZBMEFnRkNnQ0FDRUdJQTRvQWdBaEJ5QUhJQTFCQW5ScUlRY2dCeWdDQUNFSElBY2dCV29oQnlBSExRQUFJUWNnQjBIL0FYRWhCeUFaS0FJQUlRZ2dDQ0FIUVFSMGFpQUtRUUYwYWlFSElBY3VBUUFoQnlBSFFYOUtCRUFnRlNnQ0FDRUlJQWdnQjBHd0VHeHFJUWNnQUNBSElBRWdBaUFKSUJJZ0F5QUdFRDBoQmlBR1JRMEhCU0FXS0FJQUlRY2dCaUFFYkNFSUlBZ2dCbW9oQmlBR0lBZHFJUVlnQmlBR0lBSnRJZ1lnQW14cklRY2dDU0FITmdJQUlCSWdCallDQUFzZ0JVRUJhaUVGSUFSQkFXb2hCQ0FGSUJoSUlRWWdCQ0FRU0NFSElBY2dCbkVOQUFzTElBMUJBV29oRFNBRUlCQklEUUFMQ3dzZ0NrRUJhaUVLSUFwQkNFa05BQXNMQ3dVZ0VFRUFTaUViSUFKQkFVZ2hDQ0FZUVFCS0lRc2dBRUhvQ21vaEV5QUFRZVFLYWlFSElBMGdCRUVZYkdwQkVHb2hGeUFOSUFSQkdHeHFRUlJxSVNCQkFDRUtBMEFnR3dSQUlBcEJBRWNnQ0hJaElVRUFJUTFCQUNFREEwQWdJVVVFUUVFQUlSSURRQ0FGSUJKcUlRUWdCQ3dBQUNFRUlBUkZCRUFnRlNnQ0FDRUpJQm90QUFBaEJDQUVRZjhCY1NFTUlBa2dERUd3RUd4cUlROGdFeWdDQUNFRUlBUkJDa2dFUUNBQUVEUUxJQWNvQWdBaEVTQVJRZjhIY1NFRUlBa2dERUd3RUd4cVFTUnFJQVJCQVhScUlRUWdCQzRCQUNFRUlBUkJmMG9FUUNBSklBeEJzQkJzYWtFSWFpRVBJQThvQWdBaER5QVBJQVJxSVE4Z0R5MEFBQ0VQSUE5Qi93RnhJUThnRVNBUGRpRVJJQWNnRVRZQ0FDQVRLQUlBSVJFZ0VTQVBheUVSSUJGQkFFZ2hEMEVBSUJFZ0R4c2hFVUYvSUFRZ0R4c2hCQ0FUSUJFMkFnQUZJQUFnRHhBMUlRUUxJQWtnREVHd0VHeHFRUmRxSVJFZ0VTd0FBQ0VSSUJFRVFDQUpJQXhCc0JCc2FrR29FR29oQ1NBSktBSUFJUWtnQ1NBRVFRSjBhaUVFSUFRb0FnQWhCQXNnQkVGL1JnMEhJQmNvQWdBaENTQUpJQVJCQW5ScUlRUWdCQ2dDQUNFRUlBNGdFa0VDZEdvaENTQUpLQUlBSVFrZ0NTQU5RUUowYWlFSklBa2dCRFlDQUFzZ0VrRUJhaUVTSUJJZ0FrZ05BQXNMSUFNZ0VFZ2hCQ0FFSUF0eEJFQkJBQ0VTQTBBZ0JnUkFRUUFoQkFOQUlBVWdCR29oQ1NBSkxBQUFJUWtnQ1VVRVFDQU9JQVJCQW5ScUlRa2dDU2dDQUNFSklBa2dEVUVDZEdvaENTQUpLQUlBSVFrZ0NTQVNhaUVKSUFrdEFBQWhDU0FKUWY4QmNTRUpJQ0FvQWdBaERDQU1JQWxCQkhScUlBcEJBWFJxSVFrZ0NTNEJBQ0VKSUFsQmYwb0VRQ0FCSUFSQkFuUnFJUXdnRENnQ0FDRVJJQllvQWdBaER5QVVLQUlBSVF3Z0RDQURiQ0VkSUIwZ0Qyb2hEeUFWS0FJQUlSMGdIU0FKUWJBUWJHb2hDU0FBSUFrZ0VTQVBJQXdnR1JBK0lRa2dDVVVOQ2dzTElBUkJBV29oQkNBRUlBSklEUUFMQ3lBU1FRRnFJUklnQTBFQmFpRURJQklnR0VnaEJDQURJQkJJSVFrZ0NTQUVjUTBBQ3dzZ0RVRUJhaUVOSUFNZ0VFZ05BQXNMSUFwQkFXb2hDaUFLUVFoSkRRQUxDd3NnSGlBZk5nSUFJQndrQmd2UEF3SUlmd0o5SUFOQkFYVWhDU0FCUVFScUlRTWdBeWdDQUNFRElBTWdBa0VEYkdwQkFtb2hBaUFDTFFBQUlRSWdBa0gvQVhFaEFpQUJRUWxxSUFKcUlRRWdBUzBBQUNFQklBRkIvd0Z4SVFjZ0FFSDRBR29nQjBFQmRHb2hBU0FCTGdFQUlRRWdBUVJBSUFCQitBRnFJUUFnQUNnQ0FDRUlJQVV1QVFBaEFTQUlJQWRCdkF4c2FrRzBER29oQ3lBTExRQUFJUUFnQUVIL0FYRWhBQ0FBSUFGc0lRRWdDQ0FIUWJ3TWJHcEJ1QXhxSVF3Z0RDZ0NBQ0VDSUFKQkFVb0VRRUVBSVFCQkFTRUtBMEFnQ0NBSFFid01iR3BCeGdacUlBcHFJUU1nQXkwQUFDRURJQU5CL3dGeElRMGdCU0FOUVFGMGFpRURJQU11QVFBaEJpQUdRWDlLQkVBZ0N5MEFBQ0VESUFOQi93RnhJUU1nQXlBR2JDRURJQWdnQjBHOERHeHFRZElDYWlBTlFRRjBhaUVHSUFZdkFRQWhCaUFHUWYvL0EzRWhCaUFBSUFaSEJFQWdCQ0FBSUFFZ0JpQURJQWtRUWlBR0lRQWdEQ2dDQUNFQ0N5QURJUUVMSUFwQkFXb2hBeUFESUFKSUJFQWdBeUVLREFFTEN3VkJBQ0VBQ3lBQUlBbElCRUFnQVVFQ2RFR2dDR29xQWdBaER3TkFJQVFnQUVFQ2RHb2hBU0FCS2dJQUlRNGdEeUFPbENFT0lBRWdEamdDQUNBQVFRRnFJUUFnQUNBSlJ3MEFDd3NGSUFCQkZSQVZDd3VGR2dJVmZ3cDlJd1loRmlBQlFRRjFJUThnQVVFQ2RTRU5JQUZCQTNVaERpQUNRZEFBYWlFVUlCUW9BZ0FoRnlBQ1FjUUFhaUVJSUFnb0FnQWhDQ0FJUlNFSUlBOUJBblFoQlNBSUJFQWpCaUVNSXdZZ0JVRVBha0Z3Y1dva0JnVWdBaUFGRUR3aERBc2dBa0dnQ0dvZ0EwRUNkR29oQ0NBSUtBSUFJUWdnRDBGK2FpRUdJQXdnQmtFQ2RHb2hCaUFBSUE5QkFuUnFJUlVnRHdSL0lBVkJjR29oQlNBRlFRUjJJUWNnQjBFRGRDRUVJQVVnQkdzaEJTQU1JQVZxSVFRZ0IwRUJkQ0VGSUFWQkFtb2hDeUFHSVFjZ0FDRUdJQWdoQlFOQUlBWXFBZ0FoR1NBRktnSUFJUm9nR1NBYWxDRVpJQVpCQ0dvaENpQUtLZ0lBSVJvZ0JVRUVhaUVKSUFrcUFnQWhHeUFhSUJ1VUlSb2dHU0Fha3lFWklBZEJCR29oRUNBUUlCazRBZ0FnQmlvQ0FDRVpJQWtxQWdBaEdpQVpJQnFVSVJrZ0Npb0NBQ0VhSUFVcUFnQWhHeUFhSUJ1VUlSb2dHU0Fha2lFWklBY2dHVGdDQUNBSFFYaHFJUWNnQlVFSWFpRUZJQVpCRUdvaEJpQUdJQlZIRFFBTElBUWhCaUFJSUF0QkFuUnFCU0FJQ3lFSElBWWdERThFUUNBUFFYMXFJUVFnQmlFRklBQWdCRUVDZEdvaEJDQUhJUVlEUUNBRVFRaHFJUWNnQnlvQ0FDRVpJQVlxQWdBaEdpQVpJQnFVSVJrZ0JDb0NBQ0VhSUFaQkJHb2hDaUFLS2dJQUlSc2dHaUFibENFYUlCb2dHWk1oR1NBRlFRUnFJUWtnQ1NBWk9BSUFJQWNxQWdBaEdTQUtLZ0lBSVJvZ0dTQWFsQ0VaSUFRcUFnQWhHaUFHS2dJQUlSc2dHaUFibENFYUlCcU1JUm9nR2lBWmt5RVpJQVVnR1RnQ0FDQUZRWGhxSVFVZ0JrRUlhaUVHSUFSQmNHb2hCQ0FGSUF4UERRQUxDeUFCUVJCT0JFQWdEMEY0YWlFR0lBZ2dCa0VDZEdvaEJpQUFJQTFCQW5ScUlRY2dBQ0VFSUF3Z0RVRUNkR29oQ2lBTUlRVURRQ0FLUVFScUlRa2dDU29DQUNFWklBVkJCR29oQ1NBSktnSUFJUm9nR1NBYWt5RWJJQW9xQWdBaEhDQUZLZ0lBSVIwZ0hDQWRreUVjSUJrZ0dwSWhHU0FIUVFScUlRa2dDU0FaT0FJQUlBb3FBZ0FoR1NBRktnSUFJUm9nR1NBYWtpRVpJQWNnR1RnQ0FDQUdRUkJxSVFrZ0NTb0NBQ0VaSUJzZ0daUWhHU0FHUVJScUlRc2dDeW9DQUNFYUlCd2dHcFFoR2lBWklCcVRJUmtnQkVFRWFpRVFJQkFnR1RnQ0FDQUpLZ0lBSVJrZ0hDQVpsQ0VaSUFzcUFnQWhHaUFiSUJxVUlSb2dHU0Fha2lFWklBUWdHVGdDQUNBS1FReHFJUWtnQ1NvQ0FDRVpJQVZCREdvaENTQUpLZ0lBSVJvZ0dTQWFreUViSUFwQkNHb2hDU0FKS2dJQUlSd2dCVUVJYWlFTElBc3FBZ0FoSFNBY0lCMlRJUndnR1NBYWtpRVpJQWRCREdvaEVDQVFJQms0QWdBZ0NTb0NBQ0VaSUFzcUFnQWhHaUFaSUJxU0lSa2dCMEVJYWlFSklBa2dHVGdDQUNBR0tnSUFJUmtnR3lBWmxDRVpJQVpCQkdvaENTQUpLZ0lBSVJvZ0hDQWFsQ0VhSUJrZ0dwTWhHU0FFUVF4cUlRc2dDeUFaT0FJQUlBWXFBZ0FoR1NBY0lCbVVJUmtnQ1NvQ0FDRWFJQnNnR3BRaEdpQVpJQnFTSVJrZ0JFRUlhaUVKSUFrZ0dUZ0NBQ0FHUVdCcUlRWWdCMEVRYWlFSElBUkJFR29oQkNBS1FSQnFJUW9nQlVFUWFpRUZJQVlnQ0U4TkFBc0xJQUVRTFNFSElBRkJCSFVoQmlBUFFYOXFJUWxCQUNBT2F5RUZJQVlnQUNBSklBVWdDQkJESUFrZ0RXc2hCQ0FHSUFBZ0JDQUZJQWdRUXlBQlFRVjFJUXRCQUNBR2F5RUdJQXNnQUNBSklBWWdDRUVRRUVRZ0NTQU9heUVGSUFzZ0FDQUZJQVlnQ0VFUUVFUWdEa0VCZENFRklBa2dCV3NoQlNBTElBQWdCU0FHSUFoQkVCQkVJQTVCZld3aEJTQUpJQVZxSVFVZ0N5QUFJQVVnQmlBSVFSQVFSQ0FIUVh4cUlRWWdCa0VCZFNFT0lBZEJDVW9FUUVFQ0lRVURRQ0FGUVFKcUlRWWdBU0FHZFNFRUlBVkJBV29oQmtFQ0lBVjBJUW9nQ2tFQVNnUkFJQUVnQlVFRWFuVWhFRUVBSUFSQkFYVnJJUkpCQ0NBRmRDRVRRUUFoQlFOQUlBVWdCR3doRVNBSklCRnJJUkVnRUNBQUlCRWdFaUFJSUJNUVJDQUZRUUZxSVFVZ0JTQUtSdzBBQ3dzZ0JpQU9TQVJBSUFZaEJRd0JDd3NGUVFJaEJnc2dCMEY1YWlFT0lBWWdEa2dFUUFOQUlBWkJBbW9oQlNBQklBVjFJUkJCQ0NBR2RDRVNJQVpCQm1vaEJTQUJJQVYxSVFjZ0JrRUJhaUVFUVFJZ0JuUWhFeUFIUVFCS0JFQkJBQ0FRUVFGMWF5RVJJQkpCQW5RaEdDQUlJUVlnQ1NFRkEwQWdFeUFBSUFVZ0VTQUdJQklnRUJCRklBWWdHRUVDZEdvaEJpQUZRWGhxSVFVZ0IwRi9haUVLSUFkQkFVb0VRQ0FLSVFjTUFRc0xDeUFFSUE1SEJFQWdCQ0VHREFFTEN3c2dDeUFBSUFrZ0NDQUJFRVlnRFVGOGFpRUlJQXdnQ0VFQ2RHb2hCaUFQUVh4cUlRa2dCaUFNVHdSQUlBd2dDVUVDZEdvaENDQUNRY0FJYWlBRFFRSjBhaUVGSUFVb0FnQWhCUU5BSUFVdkFRQWhCeUFIUWYvL0EzRWhCeUFBSUFkQkFuUnFJUVFnQkNnQ0FDRUVJQWhCREdvaENpQUtJQVEyQWdBZ0IwRUJhaUVFSUFBZ0JFRUNkR29oQkNBRUtBSUFJUVFnQ0VFSWFpRUtJQW9nQkRZQ0FDQUhRUUpxSVFRZ0FDQUVRUUowYWlFRUlBUW9BZ0FoQkNBR1FReHFJUW9nQ2lBRU5nSUFJQWRCQTJvaEJ5QUFJQWRCQW5ScUlRY2dCeWdDQUNFSElBWkJDR29oQkNBRUlBYzJBZ0FnQlVFQ2FpRUhJQWN2QVFBaEJ5QUhRZi8vQTNFaEJ5QUFJQWRCQW5ScUlRUWdCQ2dDQUNFRUlBaEJCR29oQ2lBS0lBUTJBZ0FnQjBFQmFpRUVJQUFnQkVFQ2RHb2hCQ0FFS0FJQUlRUWdDQ0FFTmdJQUlBZEJBbW9oQkNBQUlBUkJBblJxSVFRZ0JDZ0NBQ0VFSUFaQkJHb2hDaUFLSUFRMkFnQWdCMEVEYWlFSElBQWdCMEVDZEdvaEJ5QUhLQUlBSVFjZ0JpQUhOZ0lBSUFaQmNHb2hCaUFJUVhCcUlRZ2dCVUVFYWlFRklBWWdERThOQUFzTElBd2dEMEVDZEdvaUIwRndhaUVJSUFnZ0RFc0VRQ0FDUWJBSWFpQURRUUowYWlFR0lBd2hCU0FHS0FJQUlRUWdCeUVHQTBBZ0JTb0NBQ0VaSUFaQmVHb2hDaUFLS2dJQUlSb2dHU0Fha3lFYklBVkJCR29oQ3lBTEtnSUFJUndnQmtGOGFpRU5JQTBxQWdBaEhTQWNJQjJTSVI0Z0JFRUVhaUVPSUE0cUFnQWhJQ0FiSUNDVUlSOGdCQ29DQUNFaElCNGdJWlFoSWlBZklDS1NJUjhnSUNBZWxDRWVJQnNnSVpRaEd5QWVJQnVUSVJzZ0dTQWFraUVaSUJ3Z0haTWhHaUFaSUIrU0lSd2dCU0FjT0FJQUlCb2dHNUloSENBTElCdzRBZ0FnR1NBZmt5RVpJQW9nR1RnQ0FDQWJJQnFUSVJrZ0RTQVpPQUlBSUFWQkNHb2hDaUFLS2dJQUlSa2dDQ29DQUNFYUlCa2dHcE1oR3lBRlFReHFJUXNnQ3lvQ0FDRWNJQVpCZEdvaEJpQUdLZ0lBSVIwZ0hDQWRraUVlSUFSQkRHb2hEU0FOS2dJQUlTQWdHeUFnbENFZklBUkJDR29oRFNBTktnSUFJU0VnSGlBaGxDRWlJQjhnSXBJaEh5QWdJQjZVSVI0Z0d5QWhsQ0ViSUI0Z0c1TWhHeUFaSUJxU0lSa2dIQ0Fka3lFYUlCa2dINUloSENBS0lCdzRBZ0FnR2lBYmtpRWNJQXNnSERnQ0FDQVpJQitUSVJrZ0NDQVpPQUlBSUJzZ0dwTWhHU0FHSUJrNEFnQWdCRUVRYWlFS0lBVkJFR29oQlNBSVFYQnFJUVFnQlNBRVNRUkFJQWdoQmlBRUlRZ2dDaUVFREFFTEN3c2dCMEZnYWlFSUlBZ2dERThFUUNBQ1FhZ0lhaUFEUVFKMGFpRUNJQUlvQWdBaEFpQUNJQTlCQW5ScUlRSWdBVUY4YWlFQklBQWdBVUVDZEdvaEF5QUlJUUVnRlNFSUlBQWdDVUVDZEdvaEJTQUFJUVlnQnlFQUEwQWdBa0ZnYWlFSElBQkJlR29oQkNBRUtnSUFJUmtnQWtGOGFpRUVJQVFxQWdBaEdpQVpJQnFVSVIwZ0FFRjhhaUVFSUFRcUFnQWhHeUFDUVhocUlRUWdCQ29DQUNFY0lCc2dISlFoSGlBZElCNlRJUjBnR1NBY2xDRVpJQm1NSVJrZ0dpQWJsQ0VhSUJrZ0dwTWhHU0FHSUIwNEFnQWdIWXdoR2lBRlFReHFJUVFnQkNBYU9BSUFJQWdnR1RnQ0FDQURRUXhxSVFRZ0JDQVpPQUlBSUFCQmNHb2hCQ0FFS2dJQUlSa2dBa0YwYWlFRUlBUXFBZ0FoR2lBWklCcVVJUjBnQUVGMGFpRUVJQVFxQWdBaEd5QUNRWEJxSVFRZ0JDb0NBQ0VjSUJzZ0hKUWhIaUFkSUI2VElSMGdHU0FjbENFWklCbU1JUmtnR2lBYmxDRWFJQmtnR3BNaEdTQUdRUVJxSVFRZ0JDQWRPQUlBSUIyTUlSb2dCVUVJYWlFRUlBUWdHamdDQUNBSVFRUnFJUVFnQkNBWk9BSUFJQU5CQ0dvaEJDQUVJQms0QWdBZ0FFRm9haUVFSUFRcUFnQWhHU0FDUVd4cUlRUWdCQ29DQUNFYUlCa2dHcFFoSFNBQVFXeHFJUVFnQkNvQ0FDRWJJQUpCYUdvaEJDQUVLZ0lBSVJ3Z0d5QWNsQ0VlSUIwZ0hwTWhIU0FaSUJ5VUlSa2dHWXdoR1NBYUlCdVVJUm9nR1NBYWt5RVpJQVpCQ0dvaEJDQUVJQjA0QWdBZ0hZd2hHaUFGUVFScUlRUWdCQ0FhT0FJQUlBaEJDR29oQkNBRUlCazRBZ0FnQTBFRWFpRUVJQVFnR1RnQ0FDQUJLZ0lBSVJrZ0FrRmthaUVDSUFJcUFnQWhHaUFaSUJxVUlSMGdBRUZrYWlFQUlBQXFBZ0FoR3lBSEtnSUFJUndnR3lBY2xDRWVJQjBnSHBNaEhTQVpJQnlVSVJrZ0dZd2hHU0FhSUJ1VUlSb2dHU0Fha3lFWklBWkJER29oQUNBQUlCMDRBZ0FnSFl3aEdpQUZJQm80QWdBZ0NFRU1haUVBSUFBZ0dUZ0NBQ0FESUJrNEFnQWdCa0VRYWlFR0lBaEJFR29oQ0NBRlFYQnFJUVVnQTBGd2FpRURJQUZCWUdvaEFpQUNJQXhQQkVBZ0FTRUFJQUloQVNBSElRSU1BUXNMQ3lBVUlCYzJBZ0FnRmlRR0M4VUJBUUYvSUFCQkFYWWhBU0FCUWRXcTFhb0ZjU0VCSUFCQkFYUWhBQ0FBUWFyVnF0VjZjU0VBSUFFZ0FISWhBQ0FBUVFKMklRRWdBVUd6NXN5WkEzRWhBU0FBUVFKMElRQWdBRUhNbWJQbWZIRWhBQ0FCSUFCeUlRQWdBRUVFZGlFQklBRkJqNTY4K0FCeElRRWdBRUVFZENFQUlBQkI4T0hEaDM5eElRQWdBU0FBY2lFQUlBQkJDSFloQVNBQlFmK0IvQWR4SVFFZ0FFRUlkQ0VBSUFCQmdQNkRlSEVoQUNBQklBQnlJUUFnQUVFUWRpRUJJQUJCRUhRaEFDQUJJQUJ5SVFBZ0FBdEJBUU4vSUFGQkFFb0VRQ0FBSUFGQkFuUnFJUVFEUUNBQUlBTkJBblJxSVFVZ0JTQUVOZ0lBSUFRZ0Ftb2hCQ0FEUVFGcUlRTWdBeUFCUncwQUN3c2dBQXRyQVFOL0lBRkJBMm9oQVNBQlFYeHhJUUVnQUVIRUFHb2hBaUFDS0FJQUlRSWdBZ1IvSUFCQjBBQnFJUU1nQXlnQ0FDRUVJQVFnQVdzaEFTQUFRY3dBYWlFQUlBQW9BZ0FoQUNBQklBQklCSDlCQUFVZ0F5QUJOZ0lBSUFJZ0FXb0xCU0FCRUY0TElRQWdBQXZhQmdJUGZ3SjlJQUZCRldvaERDQU1MQUFBSVF3Q2Z5QU1CSDhnQlNnQ0FDRUpJQVFvQWdBaENnSkFJQWRCQUVvRWZ5QUFRZWdLYWlFT0lBQkI1QXBxSVJBZ0FVRUlhaUVUSUFGQkYyb2hGQ0FCUWF3UWFpRVZJQVlnQTJ3aEVTQUJRUlpxSVJZZ0FVRWNhaUVTSUFjaERDQUtJUVlnQVNnQ0FDRUtJQWtoQndKQUFrQURRQUpBSUE0b0FnQWhDU0FKUVFwSUJFQWdBQkEwQ3lBUUtBSUFJUXNnQzBIL0IzRWhDU0FCUVNScUlBbEJBWFJxSVFrZ0NTNEJBQ0VKSUFsQmYwb0VRQ0FUS0FJQUlRZ2dDQ0FKYWlFSUlBZ3RBQUFoQ0NBSVFmOEJjU0VJSUFzZ0NIWWhDeUFRSUFzMkFnQWdEaWdDQUNFTElBc2dDR3NoQ3lBTFFRQklJUWhCQUNBTElBZ2JJUTFCZnlBSklBZ2JJUXNnRGlBTk5nSUFCU0FBSUFFUU5TRUxDeUFVTEFBQUlRa2dDUVJBSUJVb0FnQWhDU0FMSUFsT0RRTUxJQXRCQUVnTkFDQUhJQU5zSVFrZ0NpQUphaUVJSUFnZ0Jtb2hDQ0FJSUJGS0lRZ2dFU0FKYXlFSklBa2dCbW9oQ1NBSklBb2dDQnNoQ1NBQktBSUFJUW9nQ2lBTGJDRUxJQllzQUFBaENDQUpRUUJLSVFvZ0NBUkFJQW9FUUNBU0tBSUFJUTFEQUFBQUFDRVhRUUFoQ2dOQUlBb2dDMm9oQ0NBTklBaEJBblJxSVFnZ0NDb0NBQ0VZSUJjZ0dKSWhGeUFDSUFaQkFuUnFJUWdnQ0NnQ0FDRUlJQWhGSVE4Z0NDQUhRUUowYWlFSUlBOUZCRUFnQ0NvQ0FDRVlJQmNnR0pJaEdDQUlJQmc0QWdBTElBWkJBV29oQmlBR0lBTkdJUWdnQnlBSWFpRUhRUUFnQmlBSUd5RUdJQXBCQVdvaENpQUtJQWxIRFFBTEN3VWdDZ1JBUVFBaENnTkFJQUlnQmtFQ2RHb2hDQ0FJS0FJQUlRZ2dDQVJBSUJJb0FnQWhEU0FLSUF0cUlROGdEU0FQUVFKMGFpRU5JQTBxQWdBaEZ5QVhRd0FBQUFDU0lSY2dDQ0FIUVFKMGFpRUlJQWdxQWdBaEdDQVlJQmVTSVJjZ0NDQVhPQUlBQ3lBR1FRRnFJUVlnQmlBRFJpRUlJQWNnQ0dvaEIwRUFJQVlnQ0JzaEJpQUtRUUZxSVFvZ0NpQUpSdzBBQ3dzTElBd2dDV3NoRENBTVFRQk1EUVVnQ1NFS0RBRUxDd3dCQzBHbkZVSEVFMEdnRGtITEZSQUVDeUFBUWRRS2FpRUJJQUVzQUFBaEFTQUJSUVJBSUFCQjNBcHFJUUVnQVNnQ0FDRUJRUUFnQVEwRUdnc2dBRUVWRUJWQkFBd0RCU0FKSVFjZ0Nnc2hCZ3NnQkNBR05nSUFJQVVnQnpZQ0FFRUJCU0FBUVJVUUZVRUFDd3NoQUNBQUMrQUJBUUovQWtBZ0JRUkFJQVJCQUVvRVFFRUFJUVVEUUNBQ0lBTkJBblJxSVFZZ0JDQUZheUVISUFBZ0FTQUdJQWNRUUNFR0lBWkZCRUJCQUNFQURBUUxJQUVvQWdBaEJpQUdJQVZxSVFVZ0JpQURhaUVESUFVZ0JFZ05BQXRCQVNFQUJVRUJJUUFMQlNBQktBSUFJUVVnQkNBRmJTRUZJQUlnQTBFQ2RHb2hCaUFGUVFCS0JFQWdCQ0FEYXlFRFFRQWhBZ05BSUFZZ0FrRUNkR29oQkNBRElBSnJJUWNnQUNBQklBUWdCeUFGRUQ4aEJDQUVSU0VFSUFRRVFFRUFJUUFNQkFzZ0FrRUJhaUVDSUFJZ0JVZ05BQXRCQVNFQUJVRUJJUUFMQ3dzZ0FBdStBUUlEZndOOUlBQWdBUkJCSVFVZ0JVRUFTQVJBUVFBaEFBVWdBU2dDQUNFQUlBQWdBMGdoQmlBQUlBTWdCaHNoQXlBQUlBVnNJUVVnQTBFQVNnUkFJQUVvQWh3aEJpQUJMQUFXUlNFSFFRQWhBQU5BSUFBZ0JXb2hBU0FHSUFGQkFuUnFJUUVnQVNvQ0FDRUlJQWtnQ0pJaENDQUFJQVJzSVFFZ0FpQUJRUUowYWlFQklBRXFBZ0FoQ2lBS0lBaVNJUW9nQVNBS09BSUFJQWtnQ0NBSEd5RUpJQUJCQVdvaEFDQUFJQU5JRFFBTFFRRWhBQVZCQVNFQUN3c2dBQXZGQWdJRGZ3SjlJQUFnQVJCQklRVUNRQ0FGUVFCSUJFQkJBQ0VBQlNBQktBSUFJUUFnQUNBRFNDRUVJQUFnQXlBRUd5RURJQUFnQld3aEJTQUJRUlpxSVFBZ0FDd0FBQ0VFSUFOQkFFb2hBQ0FFQkVBZ0FFVUVRRUVCSVFBTUF3c2dBU2dDSENFRUlBRkJER29oQmtFQUlRQURRQ0FBSUFWcUlRRWdCQ0FCUVFKMGFpRUJJQUVxQWdBaENDQUhJQWlTSVFjZ0FpQUFRUUowYWlFQklBRXFBZ0FoQ0NBSUlBZVNJUWdnQVNBSU9BSUFJQVlxQWdBaENDQUhJQWlTSVFjZ0FFRUJhaUVBSUFBZ0EwZ05BQXRCQVNFQUJTQUFSUVJBUVFFaEFBd0RDeUFCS0FJY0lRUkJBQ0VBQTBBZ0FDQUZhaUVCSUFRZ0FVRUNkR29oQVNBQktnSUFJUWNnQjBNQUFBQUFraUVISUFJZ0FFRUNkR29oQVNBQktnSUFJUWdnQ0NBSGtpRUhJQUVnQnpnQ0FDQUFRUUZxSVFBZ0FDQURTQTBBQzBFQklRQUxDd3NnQUF2TUFnRUZmeUFCUVJWcUlRSWdBaXdBQUNFQ0FrQWdBZ1JBSUFCQjZBcHFJUVVnQlNnQ0FDRUNJQUpCQ2tnRVFDQUFFRFFMSUFCQjVBcHFJUVFnQkNnQ0FDRUdJQVpCL3dkeElRSWdBVUVrYWlBQ1FRRjBhaUVDSUFJdUFRQWhBaUFDUVg5S0JFQWdBVUVJYWlFRElBTW9BZ0FoQXlBRElBSnFJUU1nQXkwQUFDRURJQU5CL3dGeElRTWdCaUFEZGlFR0lBUWdCallDQUNBRktBSUFJUVFnQkNBRGF5RUVJQVJCQUVnaEJrRUFJQVFnQmhzaEJFRi9JQUlnQmhzaEFpQUZJQVEyQWdBRklBQWdBUkExSVFJTElBRkJGMm9oQlNBRkxBQUFJUVVnQlFSQUlBRkJyQkJxSVFFZ0FTZ0NBQ0VCSUFJZ0FVNEVRRUh2RlVIRUUwSENEVUdGRmhBRUN3c2dBa0VBU0FSQUlBQkIxQXBxSVFFZ0FTd0FBQ0VCSUFGRkJFQWdBRUhjQ21vaEFTQUJLQUlBSVFFZ0FRMERDeUFBUVJVUUZRc0ZJQUJCRlJBVlFYOGhBZ3NMSUFJTHRBSUNCWDhDZlNBRUlBSnJJUVFnQXlBQmF5RUlJQVJCZjBvaEJrRUFJQVJySVFjZ0JDQUhJQVliSVFjZ0JDQUliU0VHSUFSQkgzVWhCQ0FFUVFGeUlRb2dCa0YvU2lFRVFRQWdCbXNoQ1NBR0lBa2dCQnNoQkNBRUlBaHNJUVFnQnlBRWF5RUhJQU1nQlVvaEJDQUZJQU1nQkJzaEJDQUVJQUZLQkVBZ0FrRUNkRUdnQ0dvaEF5QURLZ0lBSVFzZ0FDQUJRUUowYWlFRElBTXFBZ0FoRENBTElBeVVJUXNnQXlBTE9BSUFJQUZCQVdvaEFTQUJJQVJJQkVCQkFDRURBMEFnQXlBSGFpRURJQU1nQ0VnaEJVRUFJQW9nQlJzaENVRUFJQWdnQlJzaEJTQURJQVZySVFNZ0FpQUdhaUFKYWlFQ0lBSkJBblJCb0FocUlRVWdCU29DQUNFTElBQWdBVUVDZEdvaEJTQUZLZ0lBSVF3Z0N5QU1sQ0VMSUFVZ0N6Z0NBQ0FCUVFGcUlRRWdBU0FFU0EwQUN3c0xDNHNIQWdSL0JuMGdBU0FDUVFKMGFpRUJJQUJCQTNFaEFpQUNCRUJCbXhaQnhCTkI0QkpCcUJZUUJBc2dBRUVEU2dSQUlBQkJBblloQUNBQklBTkJBblJxSVFNRFFDQUJLZ0lBSVFzZ0F5b0NBQ0VNSUFzZ0RKTWhEU0FCUVh4cUlRSWdBaW9DQUNFS0lBTkJmR29oQlNBRktnSUFJUWtnQ2lBSmt5RU9JQXNnREpJaENTQUJJQWs0QWdBZ0JTb0NBQ0VKSUFvZ0NaSWhDU0FDSUFrNEFnQWdCQ29DQUNFSklBMGdDWlFoQ2lBRVFRUnFJUUlnQWlvQ0FDRUpJQTRnQ1pRaENTQUtJQW1USVFrZ0F5QUpPQUlBSUFRcUFnQWhDU0FPSUFtVUlRb2dBaW9DQUNFSklBMGdDWlFoQ1NBS0lBbVNJUWtnQlNBSk9BSUFJQVJCSUdvaEJ5QUJRWGhxSVFnZ0NDb0NBQ0VMSUFOQmVHb2hCU0FGS2dJQUlRd2dDeUFNa3lFTklBRkJkR29oQWlBQ0tnSUFJUW9nQTBGMGFpRUdJQVlxQWdBaENTQUtJQW1USVE0Z0N5QU1raUVKSUFnZ0NUZ0NBQ0FHS2dJQUlRa2dDaUFKa2lFSklBSWdDVGdDQUNBSEtnSUFJUWtnRFNBSmxDRUtJQVJCSkdvaEFpQUNLZ0lBSVFrZ0RpQUpsQ0VKSUFvZ0NaTWhDU0FGSUFrNEFnQWdCeW9DQUNFSklBNGdDWlFoQ2lBQ0tnSUFJUWtnRFNBSmxDRUpJQW9nQ1pJaENTQUdJQWs0QWdBZ0JFRkFheUVISUFGQmNHb2hDQ0FJS2dJQUlRc2dBMEZ3YWlFRklBVXFBZ0FoRENBTElBeVRJUTBnQVVGc2FpRUNJQUlxQWdBaENpQURRV3hxSVFZZ0Jpb0NBQ0VKSUFvZ0NaTWhEaUFMSUF5U0lRa2dDQ0FKT0FJQUlBWXFBZ0FoQ1NBS0lBbVNJUWtnQWlBSk9BSUFJQWNxQWdBaENTQU5JQW1VSVFvZ0JFSEVBR29oQWlBQ0tnSUFJUWtnRGlBSmxDRUpJQW9nQ1pNaENTQUZJQWs0QWdBZ0J5b0NBQ0VKSUE0Z0NaUWhDaUFDS2dJQUlRa2dEU0FKbENFSklBb2dDWkloQ1NBR0lBazRBZ0FnQkVIZ0FHb2hCeUFCUVdocUlRZ2dDQ29DQUNFTElBTkJhR29oQlNBRktnSUFJUXdnQ3lBTWt5RU5JQUZCWkdvaEFpQUNLZ0lBSVFvZ0EwRmthaUVHSUFZcUFnQWhDU0FLSUFtVElRNGdDeUFNa2lFSklBZ2dDVGdDQUNBR0tnSUFJUWtnQ2lBSmtpRUpJQUlnQ1RnQ0FDQUhLZ0lBSVFrZ0RTQUpsQ0VLSUFSQjVBQnFJUUlnQWlvQ0FDRUpJQTRnQ1pRaENTQUtJQW1USVFrZ0JTQUpPQUlBSUFjcUFnQWhDU0FPSUFtVUlRb2dBaW9DQUNFSklBMGdDWlFoQ1NBS0lBbVNJUWtnQmlBSk9BSUFJQVJCZ0FGcUlRUWdBVUZnYWlFQklBTkJZR29oQXlBQVFYOXFJUUlnQUVFQlNnUkFJQUloQUF3QkN3c0xDNEVIQWdOL0JYMGdBU0FDUVFKMGFpRUJJQUJCQTBvRVFDQUFRUUoySVFZZ0FTQURRUUowYWlFQ0lBRWhBQ0FHSVFFRFFDQUFLZ0lBSVFrZ0Fpb0NBQ0VLSUFrZ0NwTWhEQ0FBUVh4cUlRWWdCaW9DQUNFTklBSkJmR29oQXlBREtnSUFJUXNnRFNBTGt5RUxJQWtnQ3BJaENTQUFJQWs0QWdBZ0F5b0NBQ0VKSUEwZ0NaSWhDU0FHSUFrNEFnQWdCQ29DQUNFSklBd2dDWlFoQ1NBRVFRUnFJUVlnQmlvQ0FDRUtJQXNnQ3BRaENpQUpJQXFUSVFrZ0FpQUpPQUlBSUFRcUFnQWhDU0FMSUFtVUlRa2dCaW9DQUNFS0lBd2dDcFFoQ2lBSklBcVNJUWtnQXlBSk9BSUFJQVFnQlVFQ2RHb2hBeUFBUVhocUlRWWdCaW9DQUNFSklBSkJlR29oQnlBSEtnSUFJUW9nQ1NBS2t5RU1JQUJCZEdvaENDQUlLZ0lBSVEwZ0FrRjBhaUVFSUFRcUFnQWhDeUFOSUF1VElRc2dDU0FLa2lFSklBWWdDVGdDQUNBRUtnSUFJUWtnRFNBSmtpRUpJQWdnQ1RnQ0FDQURLZ0lBSVFrZ0RDQUpsQ0VKSUFOQkJHb2hCaUFHS2dJQUlRb2dDeUFLbENFS0lBa2dDcE1oQ1NBSElBazRBZ0FnQXlvQ0FDRUpJQXNnQ1pRaENTQUdLZ0lBSVFvZ0RDQUtsQ0VLSUFrZ0NwSWhDU0FFSUFrNEFnQWdBeUFGUVFKMGFpRURJQUJCY0dvaEJpQUdLZ0lBSVFrZ0FrRndhaUVISUFjcUFnQWhDaUFKSUFxVElRd2dBRUZzYWlFSUlBZ3FBZ0FoRFNBQ1FXeHFJUVFnQkNvQ0FDRUxJQTBnQzVNaEN5QUpJQXFTSVFrZ0JpQUpPQUlBSUFRcUFnQWhDU0FOSUFtU0lRa2dDQ0FKT0FJQUlBTXFBZ0FoQ1NBTUlBbVVJUWtnQTBFRWFpRUdJQVlxQWdBaENpQUxJQXFVSVFvZ0NTQUtreUVKSUFjZ0NUZ0NBQ0FES2dJQUlRa2dDeUFKbENFSklBWXFBZ0FoQ2lBTUlBcVVJUW9nQ1NBS2tpRUpJQVFnQ1RnQ0FDQURJQVZCQW5ScUlRTWdBRUZvYWlFR0lBWXFBZ0FoQ1NBQ1FXaHFJUWNnQnlvQ0FDRUtJQWtnQ3BNaERDQUFRV1JxSVFnZ0NDb0NBQ0VOSUFKQlpHb2hCQ0FFS2dJQUlRc2dEU0FMa3lFTElBa2dDcEloQ1NBR0lBazRBZ0FnQkNvQ0FDRUpJQTBnQ1pJaENTQUlJQWs0QWdBZ0F5b0NBQ0VKSUF3Z0NaUWhDU0FEUVFScUlRWWdCaW9DQUNFS0lBc2dDcFFoQ2lBSklBcVRJUWtnQnlBSk9BSUFJQU1xQWdBaENTQUxJQW1VSVFrZ0Jpb0NBQ0VLSUF3Z0NwUWhDaUFKSUFxU0lRa2dCQ0FKT0FJQUlBQkJZR29oQUNBQ1FXQnFJUUlnQXlBRlFRSjBhaUVFSUFGQmYyb2hBeUFCUVFGS0JFQWdBeUVCREFFTEN3c0w2UVlDQW44T2ZTQUVLZ0lBSVE4Z0JFRUVhaUVISUFjcUFnQWhFQ0FFSUFWQkFuUnFJUWNnQnlvQ0FDRVJJQVZCQVdvaEJ5QUVJQWRCQW5ScUlRY2dCeW9DQUNFU0lBVkJBWFFoQ0NBRUlBaEJBblJxSVFjZ0J5b0NBQ0VUSUFoQkFYSWhCeUFFSUFkQkFuUnFJUWNnQnlvQ0FDRVVJQVZCQTJ3aEJ5QUVJQWRCQW5ScUlRVWdCU29DQUNFVklBZEJBV29oQlNBRUlBVkJBblJxSVFRZ0JDb0NBQ0VXSUFFZ0FrRUNkR29oQVNBQVFRQktCRUJCQUNBR2F5RUdJQUVnQTBFQ2RHb2hBd05BSUFFcUFnQWhDeUFES2dJQUlRd2dDeUFNa3lFTklBRkJmR29oQWlBQ0tnSUFJUW9nQTBGOGFpRUVJQVFxQWdBaENTQUtJQW1USVE0Z0N5QU1raUVKSUFFZ0NUZ0NBQ0FFS2dJQUlRa2dDaUFKa2lFSklBSWdDVGdDQUNBUElBMlVJUW9nRUNBT2xDRUpJQW9nQ1pNaENTQURJQWs0QWdBZ0R5QU9sQ0VLSUJBZ0RaUWhDU0FKSUFxU0lRa2dCQ0FKT0FJQUlBRkJlR29oQlNBRktnSUFJUXNnQTBGNGFpRUVJQVFxQWdBaERDQUxJQXlUSVEwZ0FVRjBhaUVDSUFJcUFnQWhDaUFEUVhScUlRY2dCeW9DQUNFSklBb2dDWk1oRGlBTElBeVNJUWtnQlNBSk9BSUFJQWNxQWdBaENTQUtJQW1TSVFrZ0FpQUpPQUlBSUJFZ0RaUWhDaUFTSUE2VUlRa2dDaUFKa3lFSklBUWdDVGdDQUNBUklBNlVJUW9nRWlBTmxDRUpJQWtnQ3BJaENTQUhJQWs0QWdBZ0FVRndhaUVGSUFVcUFnQWhDeUFEUVhCcUlRUWdCQ29DQUNFTUlBc2dESk1oRFNBQlFXeHFJUUlnQWlvQ0FDRUtJQU5CYkdvaEJ5QUhLZ0lBSVFrZ0NpQUpreUVPSUFzZ0RKSWhDU0FGSUFrNEFnQWdCeW9DQUNFSklBb2dDWkloQ1NBQ0lBazRBZ0FnRXlBTmxDRUtJQlFnRHBRaENTQUtJQW1USVFrZ0JDQUpPQUlBSUJNZ0RwUWhDaUFVSUEyVUlRa2dDU0FLa2lFSklBY2dDVGdDQUNBQlFXaHFJUVVnQlNvQ0FDRUxJQU5CYUdvaEJDQUVLZ0lBSVF3Z0N5QU1reUVOSUFGQlpHb2hBaUFDS2dJQUlRb2dBMEZrYWlFSElBY3FBZ0FoQ1NBS0lBbVRJUTRnQ3lBTWtpRUpJQVVnQ1RnQ0FDQUhLZ0lBSVFrZ0NpQUpraUVKSUFJZ0NUZ0NBQ0FWSUEyVUlRb2dGaUFPbENFSklBb2dDWk1oQ1NBRUlBazRBZ0FnRlNBT2xDRUtJQllnRFpRaENTQUpJQXFTSVFrZ0J5QUpPQUlBSUFFZ0JrRUNkR29oQVNBRElBWkJBblJxSVFNZ0FFRi9haUVDSUFCQkFVb0VRQ0FDSVFBTUFRc0xDd3ZXQkFJQ2Z3ZDlJQVJCQTNVaEJDQURJQVJCQW5ScUlRTWdBeW9DQUNFTklBRWdBa0VDZEdvaEFTQUFRUVIwSVFCQkFDQUFheUVBSUFFZ0FFRUNkR29oQmlBQVFRQklCRUFnQVNFQUEwQWdBQ29DQUNFSElBQkJZR29oQVNBQktnSUFJUWdnQnlBSWt5RUxJQUJCZkdvaEFpQUNLZ0lBSVFrZ0FFRmNhaUVESUFNcUFnQWhDaUFKSUFxVElRd2dCeUFJa2lFSElBQWdCemdDQUNBSklBcVNJUWNnQWlBSE9BSUFJQUVnQ3pnQ0FDQURJQXc0QWdBZ0FFRjRhaUVDSUFJcUFnQWhCeUFBUVZocUlRTWdBeW9DQUNFSUlBY2dDSk1oQ1NBQVFYUnFJUVFnQkNvQ0FDRUtJQUJCVkdvaEJTQUZLZ0lBSVFzZ0NpQUxreUVNSUFjZ0NKSWhCeUFDSUFjNEFnQWdDaUFMa2lFSElBUWdCemdDQUNBSklBeVNJUWNnRFNBSGxDRUhJQU1nQnpnQ0FDQU1JQW1USVFjZ0RTQUhsQ0VISUFVZ0J6Z0NBQ0FBUVZCcUlRSWdBaW9DQUNFSElBQkJjR29oQXlBREtnSUFJUWdnQnlBSWt5RUxJQUJCYkdvaEJDQUVLZ0lBSVFrZ0FFRk1haUVGSUFVcUFnQWhDaUFKSUFxVElRd2dCeUFJa2lFSElBTWdCemdDQUNBSklBcVNJUWNnQkNBSE9BSUFJQUlnRERnQ0FDQUZJQXM0QWdBZ0FFRklhaUVDSUFJcUFnQWhCeUFBUVdocUlRTWdBeW9DQUNFSUlBY2dDSk1oQ1NBQVFXUnFJUVFnQkNvQ0FDRUtJQUJCUkdvaEJTQUZLZ0lBSVFzZ0NpQUxreUVNSUFjZ0NKSWhCeUFESUFjNEFnQWdDaUFMa2lFSElBUWdCemdDQUNBSklBeVNJUWNnRFNBSGxDRUhJQUlnQnpnQ0FDQUpJQXlUSVFjZ0RTQUhsQ0VISUFVZ0J6Z0NBQ0FBRUVjZ0FSQkhJQUJCUUdvaEFDQUFJQVpMRFFBTEN3dVhBZ0lFZndaOUlBQXFBZ0FoQlNBQVFYQnFJUUVnQVNvQ0FDRUlJQVVnQ0pNaEJpQUZJQWlTSVFVZ0FFRjRhaUVDSUFJcUFnQWhDQ0FBUVdocUlRTWdBeW9DQUNFSElBZ2dCNUloQ1NBSUlBZVRJUWdnQlNBSmtpRUhJQUFnQnpnQ0FDQUZJQW1USVFVZ0FpQUZPQUlBSUFCQmRHb2hBaUFDS2dJQUlRVWdBRUZrYWlFRUlBUXFBZ0FoQnlBRklBZVRJUWtnQmlBSmtpRUtJQUVnQ2pnQ0FDQUdJQW1USVFZZ0F5QUdPQUlBSUFCQmZHb2hBU0FCS2dJQUlRWWdBRUZzYWlFQUlBQXFBZ0FoQ1NBR0lBbVRJUW9nQmlBSmtpRUdJQVVnQjVJaEJTQUZJQWFTSVFjZ0FTQUhPQUlBSUFZZ0JaTWhCU0FDSUFVNEFnQWdDaUFJa3lFRklBQWdCVGdDQUNBSUlBcVNJUVVnQkNBRk9BSUFDMklCQW44Z0FVRUJkQ0VCSUFCQjVBQnFJUUlnQWlnQ0FDRUNJQUVnQWtZRVFDQUFRYmdJYWlFREJTQUFRZWdBYWlFQ0lBSW9BZ0FoQWlBQklBSkdCRUFnQUVHOENHb2hBd1ZCdnhaQnhCTkI2eGRCd1JZUUJBc0xJQU1vQWdBaEFDQUFDeFFBSUFCQmtoZEJCaEJrSVFBZ0FFVWhBQ0FBQzZvQkFRTi9JQUJCMkFwcUlRRWdBU2dDQUNFREFuOENRQ0FEUVg5SERRQWdBRUhUQ21vaEF3TkFBa0FnQUJBeElRSkJBQ0FDUlEwREdpQURMQUFBSVFJZ0FrRUJjU0VDSUFJTkFDQUJLQUlBSVFJZ0FrRi9SZzBCREFJTEN5QUFRU0FRRlVFQURBRUxJQUJCM0FwcUlRRWdBVUVBTmdJQUlBQkI2QXBxSVFFZ0FVRUFOZ0lBSUFCQjdBcHFJUUVnQVVFQU5nSUFJQUJCMUFwcUlRQWdBRUVBT2dBQVFRRUxJUUFnQUF0RkFRSi9JQUJCRkdvaEFpQUNLQUlBSVFNZ0F5QUJhaUVCSUFJZ0FUWUNBQ0FBUVJ4cUlRSWdBaWdDQUNFQ0lBRWdBazhFUUNBQVFkUUFhaUVBSUFCQkFUWUNBQXNMYWdFRWZ3TkFRUUFoQUNBQ1FSaDBJUUVEUUNBQlFRRjBJUU1nQVVFZmRTRUJJQUZCdDd1RUpuRWhBU0FCSUFOeklRRWdBRUVCYWlFQUlBQkJDRWNOQUFzZ0FrRUNkRUhRR1dvaEFDQUFJQUUyQWdBZ0FrRUJhaUVBSUFCQmdBSkhCRUFnQUNFQ0RBRUxDd3VUQVFFRGZ5QUJRUU5xSVFFZ0FVRjhjU0VCSUFCQkNHb2hBaUFDS0FJQUlRTWdBeUFCYWlFRElBSWdBellDQUNBQVFjUUFhaUVDSUFJb0FnQWhBaUFDQkVBZ0FFSE1BR29oQXlBREtBSUFJUVFnQkNBQmFpRUJJQUJCMEFCcUlRQWdBQ2dDQUNFQUlBRWdBRW9FUUVFQUlRQUZJQUlnQkdvaEFDQURJQUUyQWdBTEJTQUJCSDhnQVJCZUJVRUFDeUVBQ3lBQUMwZ0JBWDhnQUVIRUFHb2hBeUFES0FJQUlRTWdBd1JBSUFKQkEyb2hBU0FCUVh4eElRRWdBRUhRQUdvaEFDQUFLQUlBSVFJZ0FpQUJhaUVCSUFBZ0FUWUNBQVVnQVJCZkN3dkdCUUVMZnlNR0lRMGpCa0dBQVdva0JpQU5JZ2RDQURjREFDQUhRZ0EzQXdnZ0IwSUFOd01RSUFkQ0FEY0RHQ0FIUWdBM0F5QWdCMElBTndNb0lBZENBRGNETUNBSFFnQTNBemdnQjBGQWEwSUFOd01BSUFkQ0FEY0RTQ0FIUWdBM0ExQWdCMElBTndOWUlBZENBRGNEWUNBSFFnQTNBMmdnQjBJQU53TndJQWRDQURjRGVBSkFJQUpCQUVvRVFBTkFJQUVnQm1vaEJDQUVMQUFBSVFRZ0JFRi9SdzBDSUFaQkFXb2hCaUFHSUFKSURRQUxDd3NDUUNBR0lBSkdCRUFnQUVHc0VHb2hBQ0FBS0FJQUlRQWdBQVJBUVpnWFFjUVRRWjBJUWE4WEVBUUZRUUVoQ3dzRklBRWdCbW9oQkNBRUxRQUFJUVVnQlVIL0FYRWhCU0FBUVFBZ0JrRUFJQVVnQXhCWElBUXNBQUFoQkNBRUJFQWdCRUgvQVhFaENrRUJJUVFEUUVFZ0lBUnJJUVZCQVNBRmRDRUZJQWNnQkVFQ2RHb2hDQ0FJSUFVMkFnQWdCRUVCYWlFRklBUWdDa2tFUUNBRklRUU1BUXNMQ3lBR1FRRnFJUW9nQ2lBQ1NBUkFRUUVoQlFKQUFrQUNRQUpBQTBBZ0FTQUthaUVKSUFrc0FBQWhCaUFHUVg5R0JFQWdCU0VHQlNBR1FmOEJjU0VJSUFaRkRRZ2dDQ0VFQTBBQ1FDQUhJQVJCQW5ScUlRWWdCaWdDQUNFTUlBd05BQ0FFUVg5cUlRWWdCRUVCVEEwS0lBWWhCQXdCQ3dzZ0JFRWdUdzBDSUFaQkFEWUNBQ0FNRURvaERpQUZRUUZxSVFZZ0FDQU9JQW9nQlNBSUlBTVFWeUFKTFFBQUlRZ2dDRUgvQVhFaEJTQUVJQVZIQkVBZ0NFSC9BWEZCSUU0TkJDQUVJQVZJQkVBRFFDQUhJQVZCQW5ScUlRZ2dDQ2dDQUNFSklBa05CMEVnSUFWcklRbEJBU0FKZENFSklBa2dER29oQ1NBSUlBazJBZ0FnQlVGL2FpRUZJQVVnQkVvTkFBc0xDd3NnQ2tFQmFpRUtJQW9nQWtnRVFDQUdJUVVNQVFWQkFTRUxEQWdMQUFBTEFBdEJ3UmRCeEJOQnRBaEJyeGNRQkF3Q0MwSFNGMEhFRTBHNUNFR3ZGeEFFREFFTFFlMFhRY1FUUWJzSVFhOFhFQVFMQlVFQklRc0xDd3NnRFNRR0lBc0x0UVlCRUg4Z0FFRVhhaUVLSUFvc0FBQWhCQ0FFQkVBZ0FFR3NFR29oQ0NBSUtBSUFJUU1nQTBFQVNnUkFJQUFvQWlBaEJpQUFRYVFRYWlnQ0FDRUZRUUFoQkFOQUlBWWdCRUVDZEdvaEF5QURLQUlBSVFNZ0F4QTZJUU1nQlNBRVFRSjBhaUVISUFjZ0F6WUNBQ0FFUVFGcUlRUWdDQ2dDQUNFRElBUWdBMGdOQUFzTEJTQUFRUVJxSVFjZ0J5Z0NBQ0VFSUFSQkFFb0VRQ0FBUVNCcUlRc2dBRUdrRUdvaERFRUFJUVFEUUNBQklBWnFJUVVnQlN3QUFDRUZJQUFnQlJCWUlRVWdCUVJBSUFzb0FnQWhCU0FGSUFaQkFuUnFJUVVnQlNnQ0FDRUZJQVVRT2lFTklBd29BZ0FoRGlBRVFRRnFJUVVnRGlBRVFRSjBhaUVFSUFRZ0RUWUNBQ0FGSVFRTElBWkJBV29oQmlBSEtBSUFJUVVnQmlBRlNBMEFDd1ZCQUNFRUN5QUFRYXdRYWlFR0lBWW9BZ0FoQlNBRUlBVkdCRUFnQmlFSUlBUWhBd1ZCL3hkQnhCTkIvZ2hCbGhnUUJBc0xJQUJCcEJCcUlRVWdCU2dDQUNFRUlBUWdBMEVFUVFJUVppQUZLQUlBSVFRZ0NDZ0NBQ0VESUFRZ0EwRUNkR29oQkNBRVFYODJBZ0FnQ2l3QUFDRURJQU5GSVFRZ0FFRUVhaUVHSUFZZ0NDQUVHeUVFSUFRb0FnQWhDd0pBSUF0QkFFb0VRQ0FBUVNCcUlSRWdBRUdvRUdvaERDQUFRUWhxSVJKQkFDRUVBMEFDUUNBRFFmOEJjUVIvSUFJZ0JFRUNkR29oQXlBREtBSUFCU0FFQ3lFRElBRWdBMm9zQUFBaERTQUFJQTBRV0NFRElBTUVRQ0FSS0FJQUlRTWdBeUFFUVFKMGFpRURJQU1vQWdBaEF5QURFRG9oRGlBSUtBSUFJUU1nQlNnQ0FDRVBJQU5CQVVvRVFFRUFJUVlEUUNBRFFRRjJJUWNnQnlBR2FpRVFJQThnRUVFQ2RHb2hDU0FKS0FJQUlRa2dDU0FPU3lFSklBTWdCMnNoQXlBR0lCQWdDUnNoQmlBSElBTWdDUnNoQXlBRFFRRktEUUFMQlVFQUlRWUxJQThnQmtFQ2RHb2hBeUFES0FJQUlRTWdBeUFPUncwQklBb3NBQUFoQXlBREJFQWdBaUFFUVFKMGFpRURJQU1vQWdBaEF5QU1LQUlBSVFjZ0J5QUdRUUowYWlFSElBY2dBellDQUNBU0tBSUFJUU1nQXlBR2FpRURJQU1nRFRvQUFBVWdEQ2dDQUNFRElBTWdCa0VDZEdvaEF5QURJQVEyQWdBTEN5QUVRUUZxSVFRZ0JDQUxUZzBESUFvc0FBQWhBd3dCQ3d0QnJSaEJ4Qk5CbkFsQmxoZ1FCQXNMQzdjQ0FRcC9JQUJCSkdvaEFTQUJRWDlCZ0JBUWVob2dBRUVYYWlFQklBRXNBQUFoQVNBQlJTRUVJQUJCckJCcUlRRWdBRUVFYWlFQ0lBSWdBU0FFR3lFQklBRW9BZ0FoQVNBQlFmLy9BVWdoQWlBQlFmLy9BU0FDR3lFR0lBRkJBRW9FUUNBQVFRaHFJUUVnQUVFZ2FpRUhJQUJCcEJCcUlRZ2dBU2dDQUNFSlFRQWhBZ05BSUFrZ0Ftb2hCU0FGTFFBQUlRRWdBVUgvQVhGQkMwZ0VRQ0FFQkg4Z0J5Z0NBQ0VCSUFFZ0FrRUNkR29oQVNBQktBSUFCU0FJS0FJQUlRRWdBU0FDUVFKMGFpRUJJQUVvQWdBaEFTQUJFRG9MSVFFZ0FVR0FDRWtFUUNBQ1FmLy9BM0VoQ2dOQUlBQkJKR29nQVVFQmRHb2hBeUFESUFvN0FRQWdCUzBBQUNFRElBTkIvd0Z4SVFOQkFTQURkQ0VESUFNZ0FXb2hBU0FCUVlBSVNRMEFDd3NMSUFKQkFXb2hBaUFDSUFaSURRQUxDd3RjQXdKL0FYMENmQ0FBUWYvLy93QnhJUUlnQUVFVmRpRUJJQUZCL3dkeElRRWdBRUVBU0NFQUlBSzRJUVFnQkpvaEJTQUZJQVFnQUJzaEJDQUV0aUVESUFPN0lRUWdBVUhzZVdvaEFDQUVJQUFRY1NFRUlBUzJJUU1nQXd2aUFRTUJmd0o5QTN3Z0FMSWhBeUFEdXlFRklBVVFkaUVGSUFXMklRTWdBYkloQkNBRElBU1ZJUU1nQTdzaEJTQUZFSFVoQlNBRm5DRUZJQVdxSVFJZ0FySWhBeUFEUXdBQWdEK1NJUU1nQTdzaEJpQUJ0eUVGSUFZZ0JSQjNJUVlnQnB3aEJpQUdxaUVCSUFFZ0FFd2hBU0FCSUFKcUlRRWdBYkloQXlBRFF3QUFnRCtTSVFRZ0JMc2hCaUFHSUFVUWR5RUdJQUMzSVFjZ0JpQUhaRVVFUUVIckdFSEVFMEcxQ1VHTEdSQUVDeUFEdXlFR0lBWWdCUkIzSVFVZ0Jad2hCU0FGcWlFQ0lBSWdBRW9FUUVHYUdVSEVFMEcyQ1VHTEdSQUVCU0FCRHd0QkFBcy9BUUYvSUFBdkFRQWhBQ0FCTHdFQUlRRWdBRUgvL3dOeElBRkIvLzhEY1VnaEFpQUFRZi8vQTNFZ0FVSC8vd054U2lFQVFYOGdBQ0FDR3lFQUlBQUxpZ0VCQjM4Z0FVRUFTZ1JBSUFBZ0FVRUJkR29oQ0VHQWdBUWhDVUYvSVFvRFFDQUFJQVJCQVhScUlRVWdCUzhCQUNFR0lBWWhCU0FLSUFWSUJFQWdDQzhCQUNFSElBWWdCMGdFUUNBQ0lBUTJBZ0FnQlNFS0N3c2dDU0FGU2dSQUlBZ3ZBUUFoQnlBR0lBZEtCRUFnQXlBRU5nSUFJQVVoQ1FzTElBUkJBV29oQkNBRUlBRkhEUUFMQ3d1bUFnRUhmeUFDUVFGMklRTWdBa0Y4Y1NFRUlBSkJBM1VoQ0NBRFFRSjBJUU1nQUNBREVFMGhCU0FBUWFBSWFpQUJRUUowYWlFR0lBWWdCVFlDQUNBQUlBTVFUU0VISUFCQnFBaHFJQUZCQW5ScUlRVWdCU0FITmdJQUlBQWdCQkJOSVFRZ0FFR3dDR29nQVVFQ2RHb2hCeUFISUFRMkFnQWdCaWdDQUNFR0FuOENRQ0FHUlEwQUlBVW9BZ0FoQlNBRlJTRUhJQVJGSVFrZ0NTQUhjZzBBSUFJZ0JpQUZJQVFRV2lBQUlBTVFUU0VESUFCQnVBaHFJQUZCQW5ScUlRUWdCQ0FETmdJQUlBTkZCRUFnQUVFREVCVkJBQXdDQ3lBQ0lBTVFXeUFJUVFGMElRTWdBQ0FERUUwaEF5QUFRY0FJYWlBQlFRSjBhaUVCSUFFZ0F6WUNBQ0FEQkg4Z0FpQURFRnhCQVFVZ0FFRURFQlZCQUFzTUFRc2dBRUVERUJWQkFBc2hBQ0FBQzI4QkFuOGdBRUVYYWlFR0lBWXNBQUFoQnlBQUtBSWdJUVlnQndSL0lBWWdBMEVDZEdvaEJpQUdJQUUyQWdBZ0JFSC9BWEVoQVNBQVFRaHFJUUFnQUNnQ0FDRUFJQUFnQTJvaEFDQUFJQUU2QUFBZ0FpRUJJQVVnQTBFQ2RHb0ZJQVlnQWtFQ2RHb0xJZ0FnQVRZQ0FBdFpBUUYvSUFCQkYyb2hBQ0FBTEFBQUlRSWdBVUgvQVhGQi93RkdJUUFnQWtVRVFDQUJRZjhCY1VFS1NpRUJJQUFnQVhNaEFDQUFRUUZ4SVFBZ0FBOExJQUFFUUVITUdFSEVFMEhxQ0VIYkdCQUVCVUVCRHd0QkFBc3JBUUYvSUFBb0FnQWhBQ0FCS0FJQUlRRWdBQ0FCU1NFQ0lBQWdBVXNoQUVGL0lBQWdBaHNoQUNBQUM2WURBd1ovQVgwRGZDQUFRUUoxSVFnZ0FFRURkU0VKSUFCQkEwb0VRQ0FBdHlFTkEwQWdCa0VDZENFRUlBUzNJUXNnQzBRWUxVUlUreUVKUUtJaEN5QUxJQTJqSVF3Z0RCQnpJUXNnQzdZaENpQUJJQVZCQW5ScUlRUWdCQ0FLT0FJQUlBd1FkQ0VMSUF1MklRb2dDb3doQ2lBRlFRRnlJUWNnQVNBSFFRSjBhaUVFSUFRZ0NqZ0NBQ0FIdHlFTElBdEVHQzFFVlBzaENVQ2lJUXNnQ3lBTm95RUxJQXRFQUFBQUFBQUE0RCtpSVF3Z0RCQnpJUXNnQzdZaENpQUtRd0FBQUQrVUlRb2dBaUFGUVFKMGFpRUVJQVFnQ2pnQ0FDQU1FSFFoQ3lBTHRpRUtJQXBEQUFBQVA1UWhDaUFDSUFkQkFuUnFJUVFnQkNBS09BSUFJQVpCQVdvaEJpQUZRUUpxSVFVZ0JpQUlTQTBBQ3lBQVFRZEtCRUFnQUxjaERFRUFJUUZCQUNFQUEwQWdBRUVCY2lFRklBVkJBWFFoQWlBQ3R5RUxJQXRFR0MxRVZQc2hDVUNpSVFzZ0N5QU1veUVOSUEwUWN5RUxJQXUySVFvZ0F5QUFRUUowYWlFQ0lBSWdDamdDQUNBTkVIUWhDeUFMdGlFS0lBcU1JUW9nQXlBRlFRSjBhaUVDSUFJZ0NqZ0NBQ0FCUVFGcUlRRWdBRUVDYWlFQUlBRWdDVWdOQUFzTEN3dW5BUU1DZndGOUFud2dBRUVCZFNFQ0lBQkJBVW9FUUNBQ3R5RUdRUUFoQUFOQUlBQzNJUVVnQlVRQUFBQUFBQURnUDZBaEJTQUZJQWFqSVFVZ0JVUUFBQUFBQUFEZ1A2SWhCU0FGUkJndFJGVDdJUWxBb2lFRklBVVFkQ0VGSUFXMklRUWdCQkJkSVFRZ0JMc2hCU0FGUkJndFJGVDdJZmsvb2lFRklBVVFkQ0VGSUFXMklRUWdBU0FBUVFKMGFpRURJQU1nQkRnQ0FDQUFRUUZxSVFBZ0FDQUNTQTBBQ3dzTFh3RUVmeUFBUVFOMUlRTWdBRUVIU2dSQVFTUWdBQkF0YXlFRVFRQWhBQU5BSUFBUU9pRUNJQUlnQkhZaEFpQUNRUUowSVFJZ0FrSC8vd054SVFJZ0FTQUFRUUYwYWlFRklBVWdBanNCQUNBQVFRRnFJUUFnQUNBRFNBMEFDd3NMRFFFQmZTQUFJQUNVSVFFZ0FRdnlPZ0VYZndKQUFrQWpCaUVPSXdaQkVHb2tCaUFPSVJjQ2Z5QUFRZlVCU1FSL1FkQWhLQUlBSWdkQkVDQUFRUXRxUVhoeElBQkJDMGtiSWdKQkEzWWlBSFlpQTBFRGNRUkFJQU5CQVhGQkFYTWdBR29pQVVFRGRFSDRJV29pQWtFSWFpSUVLQUlBSWdCQkNHb2lCaWdDQUNJRElBSkdCRUJCMENFZ0IwRUJJQUYwUVg5emNUWUNBQVZCNENFb0FnQWdBMHNFUUJBR0N5QURRUXhxSWdVb0FnQWdBRVlFUUNBRklBSTJBZ0FnQkNBRE5nSUFCUkFHQ3dzZ0FDQUJRUU4wSWdOQkEzSTJBZ1FnQUNBRGFrRUVhaUlBSUFBb0FnQkJBWEkyQWdBZ0RpUUdJQVlQQ3lBQ1FkZ2hLQUlBSWcxTEJIOGdBd1JBSUFNZ0FIUkJBaUFBZENJQVFRQWdBR3R5Y1NJQVFRQWdBR3R4UVg5cUlnTkJESFpCRUhFaEFDQURJQUIySWdOQkJYWkJDSEVpQVNBQWNpQURJQUYySWdCQkFuWkJCSEVpQTNJZ0FDQURkaUlBUVFGMlFRSnhJZ055SUFBZ0EzWWlBRUVCZGtFQmNTSURjaUFBSUFOMmFpSUJRUU4wUWZnaGFpSUZRUWhxSWdrb0FnQWlBRUVJYWlJS0tBSUFJZ01nQlVZRVFFSFFJU0FIUVFFZ0FYUkJmM054SWdRMkFnQUZRZUFoS0FJQUlBTkxCRUFRQmdzZ0EwRU1haUlMS0FJQUlBQkdCRUFnQ3lBRk5nSUFJQWtnQXpZQ0FDQUhJUVFGRUFZTEN5QUFJQUpCQTNJMkFnUWdBQ0FDYWlJSElBRkJBM1FpQXlBQ2F5SUZRUUZ5TmdJRUlBQWdBMm9nQlRZQ0FDQU5CRUJCNUNFb0FnQWhBaUFOUVFOMklnTkJBM1JCK0NGcUlRQWdCRUVCSUFOMElnTnhCRUJCNENFb0FnQWdBRUVJYWlJREtBSUFJZ0ZMQkVBUUJnVWdBU0VHSUFNaERBc0ZRZEFoSUFRZ0EzSTJBZ0FnQUNFR0lBQkJDR29oREFzZ0RDQUNOZ0lBSUFZZ0FqWUNEQ0FDSUFZMkFnZ2dBaUFBTmdJTUMwSFlJU0FGTmdJQVFlUWhJQWMyQWdBZ0RpUUdJQW9QQzBIVUlTZ0NBQ0lNQkg4Z0RFRUFJQXhyY1VGL2FpSURRUXgyUVJCeElRQWdBeUFBZGlJRFFRVjJRUWh4SWdRZ0FISWdBeUFFZGlJQVFRSjJRUVJ4SWdOeUlBQWdBM1lpQUVFQmRrRUNjU0lEY2lBQUlBTjJJZ0JCQVhaQkFYRWlBM0lnQUNBRGRtcEJBblJCZ0NScUtBSUFJZ1FoQXlBRUtBSUVRWGh4SUFKcklRb0RRQUpBSUFNb0FoQWlBRVVFUUNBREtBSVVJZ0JGRFFFTElBQWhBeUFBSUFRZ0FDZ0NCRUY0Y1NBQ2F5SUFJQXBKSWdZYklRUWdBQ0FLSUFZYklRb01BUXNMUWVBaEtBSUFJZzhnQkVzRVFCQUdDeUFFSUFKcUlnZ2dCRTBFUUJBR0N5QUVLQUlZSVFzQ1FDQUVLQUlNSWdBZ0JFWUVRQ0FFUVJScUlnTW9BZ0FpQUVVRVFDQUVRUkJxSWdNb0FnQWlBRVVOQWdzRFFBSkFJQUJCRkdvaUJpZ0NBQ0lKUlFSQUlBQkJFR29pQmlnQ0FDSUpSUTBCQ3lBR0lRTWdDU0VBREFFTEN5QVBJQU5MQkVBUUJnVWdBMEVBTmdJQUlBQWhBUXNGSUE4Z0JDZ0NDQ0lEU3dSQUVBWUxJQU5CREdvaUJpZ0NBQ0FFUndSQUVBWUxJQUJCQ0dvaUNTZ0NBQ0FFUmdSQUlBWWdBRFlDQUNBSklBTTJBZ0FnQUNFQkJSQUdDd3NMQWtBZ0N3UkFJQVFnQkNnQ0hDSUFRUUowUVlBa2FpSURLQUlBUmdSQUlBTWdBVFlDQUNBQlJRUkFRZFFoSUF4QkFTQUFkRUYvYzNFMkFnQU1Bd3NGUWVBaEtBSUFJQXRMQkVBUUJnVWdDMEVRYWlJQUlBdEJGR29nQUNnQ0FDQUVSaHNnQVRZQ0FDQUJSUTBEQ3d0QjRDRW9BZ0FpQXlBQlN3UkFFQVlMSUFFZ0N6WUNHQ0FFS0FJUUlnQUVRQ0FESUFCTEJFQVFCZ1VnQVNBQU5nSVFJQUFnQVRZQ0dBc0xJQVFvQWhRaUFBUkFRZUFoS0FJQUlBQkxCRUFRQmdVZ0FTQUFOZ0lVSUFBZ0FUWUNHQXNMQ3dzZ0NrRVFTUVJBSUFRZ0NpQUNhaUlBUVFOeU5nSUVJQVFnQUdwQkJHb2lBQ0FBS0FJQVFRRnlOZ0lBQlNBRUlBSkJBM0kyQWdRZ0NDQUtRUUZ5TmdJRUlBZ2dDbW9nQ2pZQ0FDQU5CRUJCNUNFb0FnQWhBaUFOUVFOMklnTkJBM1JCK0NGcUlRQkJBU0FEZENJRElBZHhCRUJCNENFb0FnQWdBRUVJYWlJREtBSUFJZ0ZMQkVBUUJnVWdBU0VGSUFNaEVBc0ZRZEFoSUFNZ0IzSTJBZ0FnQUNFRklBQkJDR29oRUFzZ0VDQUNOZ0lBSUFVZ0FqWUNEQ0FDSUFVMkFnZ2dBaUFBTmdJTUMwSFlJU0FLTmdJQVFlUWhJQWcyQWdBTElBNGtCaUFFUVFocUR3VWdBZ3NGSUFJTEJTQUFRYjkvU3dSL1FYOEZJQUJCQzJvaUFFRjRjU0VFUWRRaEtBSUFJZ1lFZnlBQVFRaDJJZ0FFZnlBRVFmLy8vd2RMQkg5Qkh3VWdCRUVPSUFBZ0FFR0EvajlxUVJCMlFRaHhJZ0IwSWdGQmdPQWZha0VRZGtFRWNTSUNJQUJ5SUFFZ0FuUWlBRUdBZ0E5cVFSQjJRUUp4SWdGeWF5QUFJQUYwUVE5MmFpSUFRUWRxZGtFQmNTQUFRUUYwY2dzRlFRQUxJUkpCQUNBRWF5RUNBa0FDUUNBU1FRSjBRWUFrYWlnQ0FDSUFCRUJCQUNFQklBUkJBRUVaSUJKQkFYWnJJQkpCSDBZYmRDRU1BMEFnQUNnQ0JFRjRjU0FFYXlJUUlBSkpCRUFnRUFSL0lCQWhBaUFBQlNBQUlRRkJBQ0VDREFRTElRRUxJQVVnQUNnQ0ZDSUZJQVZGSUFVZ0FFRVFhaUFNUVI5MlFRSjBhaWdDQUNJQVJuSWJJUVVnREVFQmRDRU1JQUFOQUFzZ0FTRUFCVUVBSVFBTElBVWdBSEpGQkVBZ0JFRUNJQkowSWdCQkFDQUFhM0lnQm5FaUFFVU5CaG9nQUVFQUlBQnJjVUYvYWlJRlFReDJRUkJ4SVFGQkFDRUFJQVVnQVhZaUJVRUZka0VJY1NJTUlBRnlJQVVnREhZaUFVRUNka0VFY1NJRmNpQUJJQVYySWdGQkFYWkJBbkVpQlhJZ0FTQUZkaUlCUVFGMlFRRnhJZ1Z5SUFFZ0JYWnFRUUowUVlBa2FpZ0NBQ0VGQ3lBRkJIOGdBQ0VCSUFVaEFBd0JCU0FBQ3lFRkRBRUxJQUVoQlNBQ0lRRURRQ0FBS0FJRUlRd2dBQ2dDRUNJQ1JRUkFJQUFvQWhRaEFnc2dERUY0Y1NBRWF5SVFJQUZKSVF3Z0VDQUJJQXdiSVFFZ0FDQUZJQXdiSVFVZ0FnUi9JQUloQUF3QkJTQUJDeUVDQ3dzZ0JRUi9JQUpCMkNFb0FnQWdCR3RKQkg5QjRDRW9BZ0FpRVNBRlN3UkFFQVlMSUFVZ0JHb2lDQ0FGVFFSQUVBWUxJQVVvQWhnaER3SkFJQVVvQWd3aUFDQUZSZ1JBSUFWQkZHb2lBU2dDQUNJQVJRUkFJQVZCRUdvaUFTZ0NBQ0lBUlEwQ0N3TkFBa0FnQUVFVWFpSUpLQUlBSWd0RkJFQWdBRUVRYWlJSktBSUFJZ3RGRFFFTElBa2hBU0FMSVFBTUFRc0xJQkVnQVVzRVFCQUdCU0FCUVFBMkFnQWdBQ0VIQ3dVZ0VTQUZLQUlJSWdGTEJFQVFCZ3NnQVVFTWFpSUpLQUlBSUFWSEJFQVFCZ3NnQUVFSWFpSUxLQUlBSUFWR0JFQWdDU0FBTmdJQUlBc2dBVFlDQUNBQUlRY0ZFQVlMQ3dzQ1FDQVBCRUFnQlNBRktBSWNJZ0JCQW5SQmdDUnFJZ0VvQWdCR0JFQWdBU0FITmdJQUlBZEZCRUJCMUNFZ0JrRUJJQUIwUVg5emNTSUROZ0lBREFNTEJVSGdJU2dDQUNBUFN3UkFFQVlGSUE5QkVHb2lBQ0FQUVJScUlBQW9BZ0FnQlVZYklBYzJBZ0FnQjBVRVFDQUdJUU1NQkFzTEMwSGdJU2dDQUNJQklBZExCRUFRQmdzZ0J5QVBOZ0lZSUFVb0FoQWlBQVJBSUFFZ0FFc0VRQkFHQlNBSElBQTJBaEFnQUNBSE5nSVlDd3NnQlNnQ0ZDSUFCRUJCNENFb0FnQWdBRXNFUUJBR0JTQUhJQUEyQWhRZ0FDQUhOZ0lZSUFZaEF3c0ZJQVloQXdzRklBWWhBd3NMQWtBZ0FrRVFTUVJBSUFVZ0FpQUVhaUlBUVFOeU5nSUVJQVVnQUdwQkJHb2lBQ0FBS0FJQVFRRnlOZ0lBQlNBRklBUkJBM0kyQWdRZ0NDQUNRUUZ5TmdJRUlBZ2dBbW9nQWpZQ0FDQUNRUU4ySVFFZ0FrR0FBa2tFUUNBQlFRTjBRZmdoYWlFQVFkQWhLQUlBSWdOQkFTQUJkQ0lCY1FSQVFlQWhLQUlBSUFCQkNHb2lBeWdDQUNJQlN3UkFFQVlGSUFFaERTQURJUk1MQlVIUUlTQURJQUZ5TmdJQUlBQWhEU0FBUVFocUlSTUxJQk1nQ0RZQ0FDQU5JQWcyQWd3Z0NDQU5OZ0lJSUFnZ0FEWUNEQXdDQ3lBQ1FRaDJJZ0FFZnlBQ1FmLy8vd2RMQkg5Qkh3VWdBa0VPSUFBZ0FFR0EvajlxUVJCMlFRaHhJZ0IwSWdGQmdPQWZha0VRZGtFRWNTSUVJQUJ5SUFFZ0JIUWlBRUdBZ0E5cVFSQjJRUUp4SWdGeWF5QUFJQUYwUVE5MmFpSUFRUWRxZGtFQmNTQUFRUUYwY2dzRlFRQUxJZ0ZCQW5SQmdDUnFJUUFnQ0NBQk5nSWNJQWhCRUdvaUJFRUFOZ0lFSUFSQkFEWUNBQ0FEUVFFZ0FYUWlCSEZGQkVCQjFDRWdBeUFFY2pZQ0FDQUFJQWcyQWdBZ0NDQUFOZ0lZSUFnZ0NEWUNEQ0FJSUFnMkFnZ01BZ3NDUUNBQUtBSUFJZ0FvQWdSQmVIRWdBa1lFUUNBQUlRb0ZJQUpCQUVFWklBRkJBWFpySUFGQkgwWWJkQ0VCQTBBZ0FFRVFhaUFCUVI5MlFRSjBhaUlFS0FJQUlnTUVRQ0FCUVFGMElRRWdBeWdDQkVGNGNTQUNSZ1JBSUFNaENnd0VCU0FESVFBTUFnc0FDd3RCNENFb0FnQWdCRXNFUUJBR0JTQUVJQWcyQWdBZ0NDQUFOZ0lZSUFnZ0NEWUNEQ0FJSUFnMkFnZ01CQXNMQzBIZ0lTZ0NBQ0lESUFwQkNHb2lBU2dDQUNJQVRTQURJQXBOY1FSQUlBQWdDRFlDRENBQklBZzJBZ0FnQ0NBQU5nSUlJQWdnQ2pZQ0RDQUlRUUEyQWhnRkVBWUxDd3NnRGlRR0lBVkJDR29QQlNBRUN3VWdCQXNGSUFRTEN3c0xJUU5CMkNFb0FnQWlBU0FEVHdSQVFlUWhLQUlBSVFBZ0FTQURheUlDUVE5TEJFQkI1Q0VnQUNBRGFpSUVOZ0lBUWRnaElBSTJBZ0FnQkNBQ1FRRnlOZ0lFSUFBZ0FXb2dBallDQUNBQUlBTkJBM0kyQWdRRlFkZ2hRUUEyQWdCQjVDRkJBRFlDQUNBQUlBRkJBM0kyQWdRZ0FDQUJha0VFYWlJRElBTW9BZ0JCQVhJMkFnQUxEQUlMUWR3aEtBSUFJZ0VnQTBzRVFFSGNJU0FCSUFOcklnRTJBZ0FNQVF0QnFDVW9BZ0FFZjBHd0pTZ0NBQVZCc0NWQmdDQTJBZ0JCckNWQmdDQTJBZ0JCdENWQmZ6WUNBRUc0SlVGL05nSUFRYndsUVFBMkFnQkJqQ1ZCQURZQ0FFR29KU0FYUVhCeFFkaXExYW9GY3pZQ0FFR0FJQXNpQUNBRFFTOXFJZ1pxSWdWQkFDQUFheUlIY1NJRUlBTk5CRUFnRGlRR1FRQVBDMEdJSlNnQ0FDSUFCRUJCZ0NVb0FnQWlBaUFFYWlJS0lBSk5JQW9nQUV0eUJFQWdEaVFHUVFBUEN3c2dBMEV3YWlFS0FrQUNRRUdNSlNnQ0FFRUVjUVJBUVFBaEFRVUNRQUpBQWtCQjZDRW9BZ0FpQUVVTkFFR1FKU0VDQTBBQ1FDQUNLQUlBSWcwZ0FFMEVRQ0FOSUFJb0FnUnFJQUJMRFFFTElBSW9BZ2dpQWcwQkRBSUxDeUFGSUFGcklBZHhJZ0ZCLy8vLy93ZEpCRUFnQVJCN0lnQWdBaWdDQUNBQ0tBSUVha1lFUUNBQVFYOUhEUVlGREFNTEJVRUFJUUVMREFJTFFRQVFleUlBUVg5R0JIOUJBQVZCckNVb0FnQWlBVUYvYWlJQ0lBQnFRUUFnQVd0eElBQnJRUUFnQWlBQWNSc2dCR29pQVVHQUpTZ0NBQ0lGYWlFQ0lBRWdBMHNnQVVILy8vLy9CMGx4Qkg5QmlDVW9BZ0FpQndSQUlBSWdCVTBnQWlBSFMzSUVRRUVBSVFFTUJRc0xJQUVRZXlJQ0lBQkdEUVVnQWlFQURBSUZRUUFMQ3lFQkRBRUxJQW9nQVVzZ0FVSC8vLy8vQjBrZ0FFRi9SM0Z4UlFSQUlBQkJmMFlFUUVFQUlRRU1BZ1VNQkFzQUN5QUdJQUZyUWJBbEtBSUFJZ0pxUVFBZ0FtdHhJZ0pCLy8vLy93ZFBEUUpCQUNBQmF5RUdJQUlRZTBGL1JnUi9JQVlRZXhwQkFBVWdBaUFCYWlFQkRBTUxJUUVMUVl3bFFZd2xLQUlBUVFSeU5nSUFDeUFFUWYvLy8vOEhTUVJBSUFRUWV5RUFRUUFRZXlJQ0lBQnJJZ1lnQTBFb2Frc2hCQ0FHSUFFZ0JCc2hBU0FBUVg5R0lBUkJBWE55SUFBZ0Fra2dBRUYvUnlBQ1FYOUhjWEZCQVhOeVJRMEJDd3dCQzBHQUpVR0FKU2dDQUNBQmFpSUNOZ0lBSUFKQmhDVW9BZ0JMQkVCQmhDVWdBallDQUFzQ1FFSG9JU2dDQUNJR0JFQkJrQ1VoQWdKQUFrQURRQ0FBSUFJb0FnQWlCQ0FDS0FJRUlnVnFSZzBCSUFJb0FnZ2lBZzBBQ3d3QkN5QUNRUVJxSVFjZ0FpZ0NERUVJY1VVRVFDQUFJQVpMSUFRZ0JrMXhCRUFnQnlBRklBRnFOZ0lBSUFaQkFDQUdRUWhxSWdCclFRZHhRUUFnQUVFSGNSc2lBbW9oQUVIY0lTZ0NBQ0FCYWlJRUlBSnJJUUZCNkNFZ0FEWUNBRUhjSVNBQk5nSUFJQUFnQVVFQmNqWUNCQ0FHSUFScVFTZzJBZ1JCN0NGQnVDVW9BZ0EyQWdBTUJBc0xDeUFBUWVBaEtBSUFJZ0pKQkVCQjRDRWdBRFlDQUNBQUlRSUxJQUFnQVdvaEJVR1FKU0VFQWtBQ1FBTkFJQVFvQWdBZ0JVWU5BU0FFS0FJSUlnUU5BQXNNQVFzZ0JDZ0NERUVJY1VVRVFDQUVJQUEyQWdBZ0JFRUVhaUlFSUFRb0FnQWdBV28yQWdBZ0FFRUFJQUJCQ0dvaUFHdEJCM0ZCQUNBQVFRZHhHMm9pQ0NBRGFpRUhJQVZCQUNBRlFRaHFJZ0JyUVFkeFFRQWdBRUVIY1J0cUlnRWdDR3NnQTJzaEJDQUlJQU5CQTNJMkFnUUNRQ0FHSUFGR0JFQkIzQ0ZCM0NFb0FnQWdCR29pQURZQ0FFSG9JU0FITmdJQUlBY2dBRUVCY2pZQ0JBVkI1Q0VvQWdBZ0FVWUVRRUhZSVVIWUlTZ0NBQ0FFYWlJQU5nSUFRZVFoSUFjMkFnQWdCeUFBUVFGeU5nSUVJQWNnQUdvZ0FEWUNBQXdDQ3lBQktBSUVJZ0JCQTNGQkFVWUVmeUFBUVhoeElRMGdBRUVEZGlFRkFrQWdBRUdBQWtrRVFDQUJLQUlNSVFNQ1FDQUJLQUlJSWdZZ0JVRURkRUg0SVdvaUFFY0VRQ0FDSUFaTEJFQVFCZ3NnQmlnQ0RDQUJSZzBCRUFZTEN5QURJQVpHQkVCQjBDRkIwQ0VvQWdCQkFTQUZkRUYvYzNFMkFnQU1BZ3NDUUNBRElBQkdCRUFnQTBFSWFpRVVCU0FDSUFOTEJFQVFCZ3NnQTBFSWFpSUFLQUlBSUFGR0JFQWdBQ0VVREFJTEVBWUxDeUFHSUFNMkFnd2dGQ0FHTmdJQUJTQUJLQUlZSVFvQ1FDQUJLQUlNSWdBZ0FVWUVRQ0FCUVJCcUlnTkJCR29pQmlnQ0FDSUFCRUFnQmlFREJTQURLQUlBSWdCRkRRSUxBMEFDUUNBQVFSUnFJZ1lvQWdBaUJVVUVRQ0FBUVJCcUlnWW9BZ0FpQlVVTkFRc2dCaUVESUFVaEFBd0JDd3NnQWlBRFN3UkFFQVlGSUFOQkFEWUNBQ0FBSVFrTEJTQUNJQUVvQWdnaUEwc0VRQkFHQ3lBRFFReHFJZ0lvQWdBZ0FVY0VRQkFHQ3lBQVFRaHFJZ1lvQWdBZ0FVWUVRQ0FDSUFBMkFnQWdCaUFETmdJQUlBQWhDUVVRQmdzTEN5QUtSUTBCQWtBZ0FTZ0NIQ0lBUVFKMFFZQWthaUlES0FJQUlBRkdCRUFnQXlBSk5nSUFJQWtOQVVIVUlVSFVJU2dDQUVFQklBQjBRWDl6Y1RZQ0FBd0RCVUhnSVNnQ0FDQUtTd1JBRUFZRklBcEJFR29pQUNBS1FSUnFJQUFvQWdBZ0FVWWJJQWsyQWdBZ0NVVU5CQXNMQzBIZ0lTZ0NBQ0lESUFsTEJFQVFCZ3NnQ1NBS05nSVlJQUZCRUdvaUFpZ0NBQ0lBQkVBZ0F5QUFTd1JBRUFZRklBa2dBRFlDRUNBQUlBazJBaGdMQ3lBQ0tBSUVJZ0JGRFFGQjRDRW9BZ0FnQUVzRVFCQUdCU0FKSUFBMkFoUWdBQ0FKTmdJWUN3c0xJQUVnRFdvaEFTQU5JQVJxQlNBRUN5RUNJQUZCQkdvaUFDQUFLQUlBUVg1eE5nSUFJQWNnQWtFQmNqWUNCQ0FISUFKcUlBSTJBZ0FnQWtFRGRpRURJQUpCZ0FKSkJFQWdBMEVEZEVINElXb2hBQUpBUWRBaEtBSUFJZ0ZCQVNBRGRDSURjUVJBUWVBaEtBSUFJQUJCQ0dvaUF5Z0NBQ0lCVFFSQUlBRWhEeUFESVJVTUFnc1FCZ1ZCMENFZ0FTQURjallDQUNBQUlROGdBRUVJYWlFVkN3c2dGU0FITmdJQUlBOGdCellDRENBSElBODJBZ2dnQnlBQU5nSU1EQUlMQW44Z0FrRUlkaUlBQkg5Qkh5QUNRZi8vL3dkTERRRWFJQUpCRGlBQUlBQkJnUDQvYWtFUWRrRUljU0lBZENJRFFZRGdIMnBCRUhaQkJIRWlBU0FBY2lBRElBRjBJZ0JCZ0lBUGFrRVFka0VDY1NJRGNtc2dBQ0FEZEVFUGRtb2lBRUVIYW5aQkFYRWdBRUVCZEhJRlFRQUxDeUlEUVFKMFFZQWthaUVBSUFjZ0F6WUNIQ0FIUVJCcUlnRkJBRFlDQkNBQlFRQTJBZ0JCMUNFb0FnQWlBVUVCSUFOMElnUnhSUVJBUWRRaElBRWdCSEkyQWdBZ0FDQUhOZ0lBSUFjZ0FEWUNHQ0FISUFjMkFnd2dCeUFITmdJSURBSUxBa0FnQUNnQ0FDSUFLQUlFUVhoeElBSkdCRUFnQUNFTEJTQUNRUUJCR1NBRFFRRjJheUFEUVI5R0czUWhBUU5BSUFCQkVHb2dBVUVmZGtFQ2RHb2lCQ2dDQUNJREJFQWdBVUVCZENFQklBTW9BZ1JCZUhFZ0FrWUVRQ0FESVFzTUJBVWdBeUVBREFJTEFBc0xRZUFoS0FJQUlBUkxCRUFRQmdVZ0JDQUhOZ0lBSUFjZ0FEWUNHQ0FISUFjMkFnd2dCeUFITmdJSURBUUxDd3RCNENFb0FnQWlBeUFMUVFocUlnRW9BZ0FpQUUwZ0F5QUxUWEVFUUNBQUlBYzJBZ3dnQVNBSE5nSUFJQWNnQURZQ0NDQUhJQXMyQWd3Z0IwRUFOZ0lZQlJBR0N3c0xJQTRrQmlBSVFRaHFEd3NMUVpBbElRSURRQUpBSUFJb0FnQWlCQ0FHVFFSQUlBUWdBaWdDQkdvaUJTQUdTdzBCQ3lBQ0tBSUlJUUlNQVFzTElBVkJVV29pQkVFSWFpRUNJQVlnQkVFQUlBSnJRUWR4UVFBZ0FrRUhjUnRxSWdJZ0FpQUdRUkJxSWdsSkd5SUNRUWhxSVFSQjZDRWdBRUVBSUFCQkNHb2lCMnRCQjNGQkFDQUhRUWR4R3lJSGFpSUtOZ0lBUWR3aElBRkJXR29pQ3lBSGF5SUhOZ0lBSUFvZ0IwRUJjallDQkNBQUlBdHFRU2cyQWdSQjdDRkJ1Q1VvQWdBMkFnQWdBa0VFYWlJSFFSczJBZ0FnQkVHUUpTa0NBRGNDQUNBRVFaZ2xLUUlBTndJSVFaQWxJQUEyQWdCQmxDVWdBVFlDQUVHY0pVRUFOZ0lBUVpnbElBUTJBZ0FnQWtFWWFpRUFBMEFnQUVFRWFpSUJRUWMyQWdBZ0FFRUlhaUFGU1FSQUlBRWhBQXdCQ3dzZ0FpQUdSd1JBSUFjZ0J5Z0NBRUYrY1RZQ0FDQUdJQUlnQm1zaUJFRUJjallDQkNBQ0lBUTJBZ0FnQkVFRGRpRUJJQVJCZ0FKSkJFQWdBVUVEZEVINElXb2hBRUhRSVNnQ0FDSUNRUUVnQVhRaUFYRUVRRUhnSVNnQ0FDQUFRUWhxSWdFb0FnQWlBa3NFUUJBR0JTQUNJUkVnQVNFV0N3VkIwQ0VnQWlBQmNqWUNBQ0FBSVJFZ0FFRUlhaUVXQ3lBV0lBWTJBZ0FnRVNBR05nSU1JQVlnRVRZQ0NDQUdJQUEyQWd3TUF3c2dCRUVJZGlJQUJIOGdCRUgvLy84SFN3Ui9RUjhGSUFSQkRpQUFJQUJCZ1A0L2FrRVFka0VJY1NJQWRDSUJRWURnSDJwQkVIWkJCSEVpQWlBQWNpQUJJQUowSWdCQmdJQVBha0VRZGtFQ2NTSUJjbXNnQUNBQmRFRVBkbW9pQUVFSGFuWkJBWEVnQUVFQmRISUxCVUVBQ3lJQlFRSjBRWUFrYWlFQUlBWWdBVFlDSENBR1FRQTJBaFFnQ1VFQU5nSUFRZFFoS0FJQUlnSkJBU0FCZENJRmNVVUVRRUhVSVNBQ0lBVnlOZ0lBSUFBZ0JqWUNBQ0FHSUFBMkFoZ2dCaUFHTmdJTUlBWWdCallDQ0F3REN3SkFJQUFvQWdBaUFDZ0NCRUY0Y1NBRVJnUkFJQUFoQ0FVZ0JFRUFRUmtnQVVFQmRtc2dBVUVmUmh0MElRSURRQ0FBUVJCcUlBSkJIM1pCQW5ScUlnVW9BZ0FpQVFSQUlBSkJBWFFoQWlBQktBSUVRWGh4SUFSR0JFQWdBU0VJREFRRklBRWhBQXdDQ3dBTEMwSGdJU2dDQUNBRlN3UkFFQVlGSUFVZ0JqWUNBQ0FHSUFBMkFoZ2dCaUFHTmdJTUlBWWdCallDQ0F3RkN3c0xRZUFoS0FJQUlnRWdDRUVJYWlJQ0tBSUFJZ0JOSUFFZ0NFMXhCRUFnQUNBR05nSU1JQUlnQmpZQ0FDQUdJQUEyQWdnZ0JpQUlOZ0lNSUFaQkFEWUNHQVVRQmdzTEJVSGdJU2dDQUNJQ1JTQUFJQUpKY2dSQVFlQWhJQUEyQWdBTFFaQWxJQUEyQWdCQmxDVWdBVFlDQUVHY0pVRUFOZ0lBUWZRaFFhZ2xLQUlBTmdJQVFmQWhRWDgyQWdCQmhDSkIrQ0UyQWdCQmdDSkIrQ0UyQWdCQmpDSkJnQ0kyQWdCQmlDSkJnQ0kyQWdCQmxDSkJpQ0kyQWdCQmtDSkJpQ0kyQWdCQm5DSkJrQ0kyQWdCQm1DSkJrQ0kyQWdCQnBDSkJtQ0kyQWdCQm9DSkJtQ0kyQWdCQnJDSkJvQ0kyQWdCQnFDSkJvQ0kyQWdCQnRDSkJxQ0kyQWdCQnNDSkJxQ0kyQWdCQnZDSkJzQ0kyQWdCQnVDSkJzQ0kyQWdCQnhDSkJ1Q0kyQWdCQndDSkJ1Q0kyQWdCQnpDSkJ3Q0kyQWdCQnlDSkJ3Q0kyQWdCQjFDSkJ5Q0kyQWdCQjBDSkJ5Q0kyQWdCQjNDSkIwQ0kyQWdCQjJDSkIwQ0kyQWdCQjVDSkIyQ0kyQWdCQjRDSkIyQ0kyQWdCQjdDSkI0Q0kyQWdCQjZDSkI0Q0kyQWdCQjlDSkI2Q0kyQWdCQjhDSkI2Q0kyQWdCQi9DSkI4Q0kyQWdCQitDSkI4Q0kyQWdCQmhDTkIrQ0kyQWdCQmdDTkIrQ0kyQWdCQmpDTkJnQ00yQWdCQmlDTkJnQ00yQWdCQmxDTkJpQ00yQWdCQmtDTkJpQ00yQWdCQm5DTkJrQ00yQWdCQm1DTkJrQ00yQWdCQnBDTkJtQ00yQWdCQm9DTkJtQ00yQWdCQnJDTkJvQ00yQWdCQnFDTkJvQ00yQWdCQnRDTkJxQ00yQWdCQnNDTkJxQ00yQWdCQnZDTkJzQ00yQWdCQnVDTkJzQ00yQWdCQnhDTkJ1Q00yQWdCQndDTkJ1Q00yQWdCQnpDTkJ3Q00yQWdCQnlDTkJ3Q00yQWdCQjFDTkJ5Q00yQWdCQjBDTkJ5Q00yQWdCQjNDTkIwQ00yQWdCQjJDTkIwQ00yQWdCQjVDTkIyQ00yQWdCQjRDTkIyQ00yQWdCQjdDTkI0Q00yQWdCQjZDTkI0Q00yQWdCQjlDTkI2Q00yQWdCQjhDTkI2Q00yQWdCQi9DTkI4Q00yQWdCQitDTkI4Q00yQWdCQjZDRWdBRUVBSUFCQkNHb2lBbXRCQjNGQkFDQUNRUWR4R3lJQ2FpSUVOZ0lBUWR3aElBRkJXR29pQVNBQ2F5SUNOZ0lBSUFRZ0FrRUJjallDQkNBQUlBRnFRU2cyQWdSQjdDRkJ1Q1VvQWdBMkFnQUxDMEhjSVNnQ0FDSUFJQU5MQkVCQjNDRWdBQ0FEYXlJQk5nSUFEQUlMQ3hCalFRdzJBZ0FnRGlRR1FRQVBDMEhvSVVIb0lTZ0NBQ0lBSUFOcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0EwRURjallDQkFzZ0RpUUdJQUJCQ0dvTHJSSUJFWDhnQUVVRVFBOExJQUJCZUdvaUJFSGdJU2dDQUNJTVNRUkFFQVlMSUFCQmZHb29BZ0FpQUVFRGNTSUxRUUZHQkVBUUJnc2dCQ0FBUVhoeElnSnFJUWNDUUNBQVFRRnhCRUFnQWlFQklBUWlBeUVGQlNBRUtBSUFJUWtnQzBVRVFBOExJQVFnQ1dzaUFDQU1TUVJBRUFZTElBa2dBbW9oQkVIa0lTZ0NBQ0FBUmdSQUlBZEJCR29pQVNnQ0FDSURRUU54UVFOSEJFQWdBQ0VESUFRaEFTQUFJUVVNQXd0QjJDRWdCRFlDQUNBQklBTkJmbkUyQWdBZ0FDQUVRUUZ5TmdJRUlBQWdCR29nQkRZQ0FBOExJQWxCQTNZaEFpQUpRWUFDU1FSQUlBQW9BZ3doQXlBQUtBSUlJZ1VnQWtFRGRFSDRJV29pQVVjRVFDQU1JQVZMQkVBUUJnc2dCU2dDRENBQVJ3UkFFQVlMQ3lBRElBVkdCRUJCMENGQjBDRW9BZ0JCQVNBQ2RFRi9jM0UyQWdBZ0FDRURJQVFoQVNBQUlRVU1Bd3NnQXlBQlJnUkFJQU5CQ0dvaEJnVWdEQ0FEU3dSQUVBWUxJQU5CQ0dvaUFTZ0NBQ0FBUmdSQUlBRWhCZ1VRQmdzTElBVWdBellDRENBR0lBVTJBZ0FnQUNFRElBUWhBU0FBSVFVTUFnc2dBQ2dDR0NFTkFrQWdBQ2dDRENJQ0lBQkdCRUFnQUVFUWFpSUdRUVJxSWdrb0FnQWlBZ1JBSUFraEJnVWdCaWdDQUNJQ1JRMENDd05BQWtBZ0FrRVVhaUlKS0FJQUlndEZCRUFnQWtFUWFpSUpLQUlBSWd0RkRRRUxJQWtoQmlBTElRSU1BUXNMSUF3Z0Jrc0VRQkFHQlNBR1FRQTJBZ0FnQWlFSUN3VWdEQ0FBS0FJSUlnWkxCRUFRQmdzZ0JrRU1haUlKS0FJQUlBQkhCRUFRQmdzZ0FrRUlhaUlMS0FJQUlBQkdCRUFnQ1NBQ05nSUFJQXNnQmpZQ0FDQUNJUWdGRUFZTEN3c2dEUVJBSUFBb0Fod2lBa0VDZEVHQUpHb2lCaWdDQUNBQVJnUkFJQVlnQ0RZQ0FDQUlSUVJBUWRRaFFkUWhLQUlBUVFFZ0FuUkJmM054TmdJQUlBQWhBeUFFSVFFZ0FDRUZEQVFMQlVIZ0lTZ0NBQ0FOU3dSQUVBWUZJQTFCRUdvaUFpQU5RUlJxSUFJb0FnQWdBRVliSUFnMkFnQWdDRVVFUUNBQUlRTWdCQ0VCSUFBaEJRd0ZDd3NMUWVBaEtBSUFJZ1lnQ0VzRVFCQUdDeUFJSUEwMkFoZ2dBRUVRYWlJSktBSUFJZ0lFUUNBR0lBSkxCRUFRQmdVZ0NDQUNOZ0lRSUFJZ0NEWUNHQXNMSUFrb0FnUWlBZ1JBUWVBaEtBSUFJQUpMQkVBUUJnVWdDQ0FDTmdJVUlBSWdDRFlDR0NBQUlRTWdCQ0VCSUFBaEJRc0ZJQUFoQXlBRUlRRWdBQ0VGQ3dVZ0FDRURJQVFoQVNBQUlRVUxDd3NnQlNBSFR3UkFFQVlMSUFkQkJHb2lCQ2dDQUNJQVFRRnhSUVJBRUFZTElBQkJBbkVFZnlBRUlBQkJmbkUyQWdBZ0F5QUJRUUZ5TmdJRUlBVWdBV29nQVRZQ0FDQUJCVUhvSVNnQ0FDQUhSZ1JBUWR3aFFkd2hLQUlBSUFGcUlnQTJBZ0JCNkNFZ0F6WUNBQ0FESUFCQkFYSTJBZ1FnQTBIa0lTZ0NBRWNFUUE4TFFlUWhRUUEyQWdCQjJDRkJBRFlDQUE4TFFlUWhLQUlBSUFkR0JFQkIyQ0ZCMkNFb0FnQWdBV29pQURZQ0FFSGtJU0FGTmdJQUlBTWdBRUVCY2pZQ0JDQUZJQUJxSUFBMkFnQVBDeUFBUVhoeElBRnFJUVFnQUVFRGRpRUdBa0FnQUVHQUFra0VRQ0FIS0FJTUlRRWdCeWdDQ0NJQ0lBWkJBM1JCK0NGcUlnQkhCRUJCNENFb0FnQWdBa3NFUUJBR0N5QUNLQUlNSUFkSEJFQVFCZ3NMSUFFZ0FrWUVRRUhRSVVIUUlTZ0NBRUVCSUFaMFFYOXpjVFlDQUF3Q0N5QUJJQUJHQkVBZ0FVRUlhaUVRQlVIZ0lTZ0NBQ0FCU3dSQUVBWUxJQUZCQ0dvaUFDZ0NBQ0FIUmdSQUlBQWhFQVVRQmdzTElBSWdBVFlDRENBUUlBSTJBZ0FGSUFjb0FoZ2hDQUpBSUFjb0Fnd2lBQ0FIUmdSQUlBZEJFR29pQVVFRWFpSUNLQUlBSWdBRVFDQUNJUUVGSUFFb0FnQWlBRVVOQWdzRFFBSkFJQUJCRkdvaUFpZ0NBQ0lHUlFSQUlBQkJFR29pQWlnQ0FDSUdSUTBCQ3lBQ0lRRWdCaUVBREFFTEMwSGdJU2dDQUNBQlN3UkFFQVlGSUFGQkFEWUNBQ0FBSVFvTEJVSGdJU2dDQUNBSEtBSUlJZ0ZMQkVBUUJnc2dBVUVNYWlJQ0tBSUFJQWRIQkVBUUJnc2dBRUVJYWlJR0tBSUFJQWRHQkVBZ0FpQUFOZ0lBSUFZZ0FUWUNBQ0FBSVFvRkVBWUxDd3NnQ0FSQUlBY29BaHdpQUVFQ2RFR0FKR29pQVNnQ0FDQUhSZ1JBSUFFZ0NqWUNBQ0FLUlFSQVFkUWhRZFFoS0FJQVFRRWdBSFJCZjNOeE5nSUFEQVFMQlVIZ0lTZ0NBQ0FJU3dSQUVBWUZJQWhCRUdvaUFDQUlRUlJxSUFBb0FnQWdCMFliSUFvMkFnQWdDa1VOQkFzTFFlQWhLQUlBSWdFZ0Nrc0VRQkFHQ3lBS0lBZzJBaGdnQjBFUWFpSUNLQUlBSWdBRVFDQUJJQUJMQkVBUUJnVWdDaUFBTmdJUUlBQWdDallDR0FzTElBSW9BZ1FpQUFSQVFlQWhLQUlBSUFCTEJFQVFCZ1VnQ2lBQU5nSVVJQUFnQ2pZQ0dBc0xDd3NMSUFNZ0JFRUJjallDQkNBRklBUnFJQVEyQWdBZ0EwSGtJU2dDQUVZRWYwSFlJU0FFTmdJQUR3VWdCQXNMSWdWQkEzWWhBU0FGUVlBQ1NRUkFJQUZCQTNSQitDRnFJUUJCMENFb0FnQWlCVUVCSUFGMElnRnhCRUJCNENFb0FnQWdBRUVJYWlJQktBSUFJZ1ZMQkVBUUJnVWdCU0VQSUFFaEVRc0ZRZEFoSUFVZ0FYSTJBZ0FnQUNFUElBQkJDR29oRVFzZ0VTQUROZ0lBSUE4Z0F6WUNEQ0FESUE4MkFnZ2dBeUFBTmdJTUR3c2dCVUVJZGlJQUJIOGdCVUgvLy84SFN3Ui9RUjhGSUFWQkRpQUFJQUJCZ1A0L2FrRVFka0VJY1NJQWRDSUJRWURnSDJwQkVIWkJCSEVpQkNBQWNpQUJJQVIwSWdCQmdJQVBha0VRZGtFQ2NTSUJjbXNnQUNBQmRFRVBkbW9pQUVFSGFuWkJBWEVnQUVFQmRISUxCVUVBQ3lJQlFRSjBRWUFrYWlFQUlBTWdBVFlDSENBRFFRQTJBaFFnQTBFQU5nSVFBa0JCMUNFb0FnQWlCRUVCSUFGMElnSnhCRUFDUUNBQUtBSUFJZ0FvQWdSQmVIRWdCVVlFUUNBQUlRNEZJQVZCQUVFWklBRkJBWFpySUFGQkgwWWJkQ0VFQTBBZ0FFRVFhaUFFUVI5MlFRSjBhaUlDS0FJQUlnRUVRQ0FFUVFGMElRUWdBU2dDQkVGNGNTQUZSZ1JBSUFFaERnd0VCU0FCSVFBTUFnc0FDd3RCNENFb0FnQWdBa3NFUUJBR0JTQUNJQU0yQWdBZ0F5QUFOZ0lZSUFNZ0F6WUNEQ0FESUFNMkFnZ01CQXNMQzBIZ0lTZ0NBQ0lCSUE1QkNHb2lCU2dDQUNJQVRTQUJJQTVOY1FSQUlBQWdBellDRENBRklBTTJBZ0FnQXlBQU5nSUlJQU1nRGpZQ0RDQURRUUEyQWhnRkVBWUxCVUhVSVNBRUlBSnlOZ0lBSUFBZ0F6WUNBQ0FESUFBMkFoZ2dBeUFETmdJTUlBTWdBellDQ0FzTFFmQWhRZkFoS0FJQVFYOXFJZ0EyQWdBZ0FBUkFEd3RCbUNVaEFBTkFJQUFvQWdBaUFVRUlhaUVBSUFFTkFBdEI4Q0ZCZnpZQ0FBdUFBUUVDZnlBQVJRUkFJQUVRWGc4TElBRkJ2MzlMQkVBUVkwRU1OZ0lBUVFBUEN5QUFRWGhxUVJBZ0FVRUxha0Y0Y1NBQlFRdEpHeEJoSWdJRVFDQUNRUWhxRHdzZ0FSQmVJZ0pGQkVCQkFBOExJQUlnQUNBQVFYeHFLQUlBSWdOQmVIRkJCRUVJSUFOQkEzRWJheUlESUFFZ0F5QUJTUnNRZVJvZ0FCQmZJQUlMbUFrQkRIOENRQ0FBSUFCQkJHb2lDaWdDQUNJSVFYaHhJZ0pxSVFVZ0NFRURjU0lKUVFGSFFlQWhLQUlBSWdzZ0FFMXhJQVVnQUV0eFJRUkFFQVlMSUFWQkJHb2lCeWdDQUNJRVFRRnhSUVJBRUFZTElBbEZCRUFnQVVHQUFra05BU0FDSUFGQkJHcFBCRUFnQWlBQmEwR3dKU2dDQUVFQmRFMEVRQ0FBRHdzTERBRUxJQUlnQVU4RVFDQUNJQUZySWdOQkQwMEVRQ0FBRHdzZ0NpQUlRUUZ4SUFGeVFRSnlOZ0lBSUFBZ0FXb2lBU0FEUVFOeU5nSUVJQWNnQnlnQ0FFRUJjallDQUNBQklBTVFZaUFBRHd0QjZDRW9BZ0FnQlVZRVFFSGNJU2dDQUNBQ2FpSURJQUZORFFFZ0NpQUlRUUZ4SUFGeVFRSnlOZ0lBSUFBZ0FXb2lBaUFESUFGcklnRkJBWEkyQWdSQjZDRWdBallDQUVIY0lTQUJOZ0lBSUFBUEMwSGtJU2dDQUNBRlJnUkFRZGdoS0FJQUlBSnFJZ0lnQVVrTkFTQUNJQUZySWdOQkQwc0VRQ0FLSUFoQkFYRWdBWEpCQW5JMkFnQWdBQ0FCYWlJQklBTkJBWEkyQWdRZ0FDQUNhaUlDSUFNMkFnQWdBa0VFYWlJQ0lBSW9BZ0JCZm5FMkFnQUZJQW9nQ0VFQmNTQUNja0VDY2pZQ0FDQUFJQUpxUVFScUlnRWdBU2dDQUVFQmNqWUNBRUVBSVFGQkFDRURDMEhZSVNBRE5nSUFRZVFoSUFFMkFnQWdBQThMSUFSQkFuRU5BQ0FFUVhoeElBSnFJZ3dnQVVrTkFDQU1JQUZySVEwZ0JFRURkaUVDQWtBZ0JFR0FBa2tFUUNBRktBSU1JUVlnQlNnQ0NDSUVJQUpCQTNSQitDRnFJZ2RIQkVBZ0N5QUVTd1JBRUFZTElBUW9BZ3dnQlVjRVFCQUdDd3NnQmlBRVJnUkFRZEFoUWRBaEtBSUFRUUVnQW5SQmYzTnhOZ0lBREFJTElBWWdCMFlFUUNBR1FRaHFJUU1GSUFzZ0Jrc0VRQkFHQ3lBR1FRaHFJZ0lvQWdBZ0JVWUVRQ0FDSVFNRkVBWUxDeUFFSUFZMkFnd2dBeUFFTmdJQUJTQUZLQUlZSVFrQ1FDQUZLQUlNSWdNZ0JVWUVRQ0FGUVJCcUlnSkJCR29pQkNnQ0FDSURCRUFnQkNFQ0JTQUNLQUlBSWdORkRRSUxBMEFDUUNBRFFSUnFJZ1FvQWdBaUIwVUVRQ0FEUVJCcUlnUW9BZ0FpQjBVTkFRc2dCQ0VDSUFjaEF3d0JDd3NnQ3lBQ1N3UkFFQVlGSUFKQkFEWUNBQ0FESVFZTEJTQUxJQVVvQWdnaUFrc0VRQkFHQ3lBQ1FReHFJZ1FvQWdBZ0JVY0VRQkFHQ3lBRFFRaHFJZ2NvQWdBZ0JVWUVRQ0FFSUFNMkFnQWdCeUFDTmdJQUlBTWhCZ1VRQmdzTEN5QUpCRUFnQlNnQ0hDSURRUUowUVlBa2FpSUNLQUlBSUFWR0JFQWdBaUFHTmdJQUlBWkZCRUJCMUNGQjFDRW9BZ0JCQVNBRGRFRi9jM0UyQWdBTUJBc0ZRZUFoS0FJQUlBbExCRUFRQmdVZ0NVRVFhaUlESUFsQkZHb2dBeWdDQUNBRlJoc2dCallDQUNBR1JRMEVDd3RCNENFb0FnQWlBaUFHU3dSQUVBWUxJQVlnQ1RZQ0dDQUZRUkJxSWdRb0FnQWlBd1JBSUFJZ0Ewc0VRQkFHQlNBR0lBTTJBaEFnQXlBR05nSVlDd3NnQkNnQ0JDSURCRUJCNENFb0FnQWdBMHNFUUJBR0JTQUdJQU0yQWhRZ0F5QUdOZ0lZQ3dzTEN3c2dEVUVRU1FSQUlBb2dDRUVCY1NBTWNrRUNjallDQUNBQUlBeHFRUVJxSWdFZ0FTZ0NBRUVCY2pZQ0FBVWdDaUFJUVFGeElBRnlRUUp5TmdJQUlBQWdBV29pQVNBTlFRTnlOZ0lFSUFBZ0RHcEJCR29pQXlBREtBSUFRUUZ5TmdJQUlBRWdEUkJpQ3lBQUR3dEJBQXZ4RUFFT2Z3SkFJQUFnQVdvaEJnSkFJQUFvQWdRaUIwRUJjUVJBSUFBaEFpQUJJUVFGSUFBb0FnQWhCU0FIUVFOeFJRUkFEd3NnQUNBRmF5SUFRZUFoS0FJQUlneEpCRUFRQmdzZ0JTQUJhaUVCUWVRaEtBSUFJQUJHQkVBZ0JrRUVhaUlFS0FJQUlnSkJBM0ZCQTBjRVFDQUFJUUlnQVNFRURBTUxRZGdoSUFFMkFnQWdCQ0FDUVg1eE5nSUFJQUFnQVVFQmNqWUNCQ0FHSUFFMkFnQVBDeUFGUVFOMklRY2dCVUdBQWtrRVFDQUFLQUlNSVFJZ0FDZ0NDQ0lGSUFkQkEzUkIrQ0ZxSWdSSEJFQWdEQ0FGU3dSQUVBWUxJQVVvQWd3Z0FFY0VRQkFHQ3dzZ0FpQUZSZ1JBUWRBaFFkQWhLQUlBUVFFZ0IzUkJmM054TmdJQUlBQWhBaUFCSVFRTUF3c2dBaUFFUmdSQUlBSkJDR29oQXdVZ0RDQUNTd1JBRUFZTElBSkJDR29pQkNnQ0FDQUFSZ1JBSUFRaEF3VVFCZ3NMSUFVZ0FqWUNEQ0FESUFVMkFnQWdBQ0VDSUFFaEJBd0NDeUFBS0FJWUlRb0NRQ0FBS0FJTUlnTWdBRVlFUUNBQVFSQnFJZ1ZCQkdvaUJ5Z0NBQ0lEQkVBZ0J5RUZCU0FGS0FJQUlnTkZEUUlMQTBBQ1FDQURRUlJxSWdjb0FnQWlDMFVFUUNBRFFSQnFJZ2NvQWdBaUMwVU5BUXNnQnlFRklBc2hBd3dCQ3dzZ0RDQUZTd1JBRUFZRklBVkJBRFlDQUNBRElRZ0xCU0FNSUFBb0FnZ2lCVXNFUUJBR0N5QUZRUXhxSWdjb0FnQWdBRWNFUUJBR0N5QURRUWhxSWdzb0FnQWdBRVlFUUNBSElBTTJBZ0FnQ3lBRk5nSUFJQU1oQ0FVUUJnc0xDeUFLQkVBZ0FDZ0NIQ0lEUVFKMFFZQWthaUlGS0FJQUlBQkdCRUFnQlNBSU5nSUFJQWhGQkVCQjFDRkIxQ0VvQWdCQkFTQURkRUYvYzNFMkFnQWdBQ0VDSUFFaEJBd0VDd1ZCNENFb0FnQWdDa3NFUUJBR0JTQUtRUkJxSWdNZ0NrRVVhaUFES0FJQUlBQkdHeUFJTmdJQUlBaEZCRUFnQUNFQ0lBRWhCQXdGQ3dzTFFlQWhLQUlBSWdVZ0NFc0VRQkFHQ3lBSUlBbzJBaGdnQUVFUWFpSUhLQUlBSWdNRVFDQUZJQU5MQkVBUUJnVWdDQ0FETmdJUUlBTWdDRFlDR0FzTElBY29BZ1FpQXdSQVFlQWhLQUlBSUFOTEJFQVFCZ1VnQ0NBRE5nSVVJQU1nQ0RZQ0dDQUFJUUlnQVNFRUN3VWdBQ0VDSUFFaEJBc0ZJQUFoQWlBQklRUUxDd3NnQmtIZ0lTZ0NBQ0lIU1FSQUVBWUxJQVpCQkdvaUFTZ0NBQ0lBUVFKeEJFQWdBU0FBUVg1eE5nSUFJQUlnQkVFQmNqWUNCQ0FDSUFScUlBUTJBZ0FGUWVnaEtBSUFJQVpHQkVCQjNDRkIzQ0VvQWdBZ0JHb2lBRFlDQUVIb0lTQUNOZ0lBSUFJZ0FFRUJjallDQkNBQ1FlUWhLQUlBUndSQUR3dEI1Q0ZCQURZQ0FFSFlJVUVBTmdJQUR3dEI1Q0VvQWdBZ0JrWUVRRUhZSVVIWUlTZ0NBQ0FFYWlJQU5nSUFRZVFoSUFJMkFnQWdBaUFBUVFGeU5nSUVJQUlnQUdvZ0FEWUNBQThMSUFCQmVIRWdCR29oQkNBQVFRTjJJUVVDUUNBQVFZQUNTUVJBSUFZb0Fnd2hBU0FHS0FJSUlnTWdCVUVEZEVINElXb2lBRWNFUUNBSElBTkxCRUFRQmdzZ0F5Z0NEQ0FHUndSQUVBWUxDeUFCSUFOR0JFQkIwQ0ZCMENFb0FnQkJBU0FGZEVGL2MzRTJBZ0FNQWdzZ0FTQUFSZ1JBSUFGQkNHb2hEZ1VnQnlBQlN3UkFFQVlMSUFGQkNHb2lBQ2dDQUNBR1JnUkFJQUFoRGdVUUJnc0xJQU1nQVRZQ0RDQU9JQU0yQWdBRklBWW9BaGdoQ0FKQUlBWW9BZ3dpQUNBR1JnUkFJQVpCRUdvaUFVRUVhaUlES0FJQUlnQUVRQ0FESVFFRklBRW9BZ0FpQUVVTkFnc0RRQUpBSUFCQkZHb2lBeWdDQUNJRlJRUkFJQUJCRUdvaUF5Z0NBQ0lGUlEwQkN5QURJUUVnQlNFQURBRUxDeUFISUFGTEJFQVFCZ1VnQVVFQU5nSUFJQUFoQ1FzRklBY2dCaWdDQ0NJQlN3UkFFQVlMSUFGQkRHb2lBeWdDQUNBR1J3UkFFQVlMSUFCQkNHb2lCU2dDQUNBR1JnUkFJQU1nQURZQ0FDQUZJQUUyQWdBZ0FDRUpCUkFHQ3dzTElBZ0VRQ0FHS0FJY0lnQkJBblJCZ0NScUlnRW9BZ0FnQmtZRVFDQUJJQWsyQWdBZ0NVVUVRRUhVSVVIVUlTZ0NBRUVCSUFCMFFYOXpjVFlDQUF3RUN3VkI0Q0VvQWdBZ0NFc0VRQkFHQlNBSVFSQnFJZ0FnQ0VFVWFpQUFLQUlBSUFaR0d5QUpOZ0lBSUFsRkRRUUxDMEhnSVNnQ0FDSUJJQWxMQkVBUUJnc2dDU0FJTmdJWUlBWkJFR29pQXlnQ0FDSUFCRUFnQVNBQVN3UkFFQVlGSUFrZ0FEWUNFQ0FBSUFrMkFoZ0xDeUFES0FJRUlnQUVRRUhnSVNnQ0FDQUFTd1JBRUFZRklBa2dBRFlDRkNBQUlBazJBaGdMQ3dzTEN5QUNJQVJCQVhJMkFnUWdBaUFFYWlBRU5nSUFJQUpCNUNFb0FnQkdCRUJCMkNFZ0JEWUNBQThMQ3lBRVFRTjJJUUVnQkVHQUFra0VRQ0FCUVFOMFFmZ2hhaUVBUWRBaEtBSUFJZ1JCQVNBQmRDSUJjUVJBUWVBaEtBSUFJQUJCQ0dvaUFTZ0NBQ0lFU3dSQUVBWUZJQVFoRFNBQklROExCVUhRSVNBRUlBRnlOZ0lBSUFBaERTQUFRUWhxSVE4TElBOGdBallDQUNBTklBSTJBZ3dnQWlBTk5nSUlJQUlnQURZQ0RBOExJQVJCQ0hZaUFBUi9JQVJCLy8vL0Iwc0VmMEVmQlNBRVFRNGdBQ0FBUVlEK1AycEJFSFpCQ0hFaUFIUWlBVUdBNEI5cVFSQjJRUVJ4SWdNZ0FISWdBU0FEZENJQVFZQ0FEMnBCRUhaQkFuRWlBWEpySUFBZ0FYUkJEM1pxSWdCQkIycDJRUUZ4SUFCQkFYUnlDd1ZCQUFzaUFVRUNkRUdBSkdvaEFDQUNJQUUyQWh3Z0FrRUFOZ0lVSUFKQkFEWUNFRUhVSVNnQ0FDSURRUUVnQVhRaUJYRkZCRUJCMUNFZ0F5QUZjallDQUNBQUlBSTJBZ0FNQVFzQ1FDQUFLQUlBSWdBb0FnUkJlSEVnQkVZRWZ5QUFCU0FFUVFCQkdTQUJRUUYyYXlBQlFSOUdHM1FoQXdOQUlBQkJFR29nQTBFZmRrRUNkR29pQlNnQ0FDSUJCRUFnQTBFQmRDRURJQUVvQWdSQmVIRWdCRVlOQXlBQklRQU1BUXNMUWVBaEtBSUFJQVZMQkVBUUJnc2dCU0FDTmdJQURBSUxJUUVMUWVBaEtBSUFJZ1FnQVVFSWFpSURLQUlBSWdCTklBUWdBVTF4UlFSQUVBWUxJQUFnQWpZQ0RDQURJQUkyQWdBZ0FpQUFOZ0lJSUFJZ0FUWUNEQ0FDUVFBMkFoZ1BDeUFDSUFBMkFoZ2dBaUFDTmdJTUlBSWdBallDQ0FzRkFFSEFKUXRRQVFKL0FuOGdBZ1IvQTBBZ0FDd0FBQ0lESUFFc0FBQWlCRVlFUUNBQVFRRnFJUUFnQVVFQmFpRUJRUUFnQWtGL2FpSUNSUTBER2d3QkN3c2dBMEgvQVhFZ0JFSC9BWEZyQlVFQUN3c2lBQXVwQVFFQ2Z5QUJRZjhIU2dSQUlBQkVBQUFBQUFBQTRIK2lJZ0JFQUFBQUFBQUE0SCtpSUFBZ0FVSCtEMG9pQWhzaEFDQUJRWUp3YWlJRFFmOEhJQU5CL3dkSUd5QUJRWUY0YWlBQ0d5RUJCU0FCUVlKNFNBUkFJQUJFQUFBQUFBQUFFQUNpSWdCRUFBQUFBQUFBRUFDaUlBQWdBVUdFY0VnaUFoc2hBQ0FCUWZ3UGFpSURRWUo0SUFOQmduaEtHeUFCUWY0SGFpQUNHeUVCQ3dzZ0FDQUJRZjhIYXExQ05JYS9vZ3VhQkFFSWZ5TUdJUW9qQmtIUUFXb2tCaUFLSWdkQndBRnFJZ1JDQVRjREFBSkFJQUlnQVd3aUN3UkFRUUFnQW1zaENTQUhJQUkyQWdRZ0J5QUNOZ0lBUVFJaEJpQUNJUVVnQWlFQkEwQWdCeUFHUVFKMGFpQUZJQUpxSUFGcUlnZzJBZ0FnQmtFQmFpRUdJQWdnQzBrRVFDQUJJUVVnQ0NFQkRBRUxDeUFBSUF0cUlBbHFJZ1lnQUVzRVFDQUdJUWhCQVNFQlFRRWhCUU5BSUFWQkEzRkJBMFlFZnlBQUlBSWdBeUFCSUFjUVp5QUVRUUlRYUNBQlFRSnFCU0FISUFGQmYyb2lCVUVDZEdvb0FnQWdDQ0FBYTBrRVFDQUFJQUlnQXlBQklBY1Fad1VnQUNBQ0lBTWdCQ0FCUVFBZ0J4QnBDeUFCUVFGR0JIOGdCRUVCRUdwQkFBVWdCQ0FGRUdwQkFRc0xJUUVnQkNBRUtBSUFRUUZ5SWdVMkFnQWdBQ0FDYWlJQUlBWkpEUUFMSUFFaEJnVkJBU0VHUVFFaEJRc2dBQ0FDSUFNZ0JDQUdRUUFnQnhCcElBUkJCR29oQ0NBQUlRRWdCaUVBQTBBQ2Z3SkFJQUJCQVVZZ0JVRUJSbkVFZnlBSUtBSUFSUTBGREFFRklBQkJBa2dOQVNBRVFRSVFhaUFFSUFRb0FnQkJCM00yQWdBZ0JFRUJFR2dnQVNBSElBQkJmbW9pQlVFQ2RHb29BZ0JySUFscUlBSWdBeUFFSUFCQmYycEJBU0FIRUdrZ0JFRUJFR29nQkNBRUtBSUFRUUZ5SWdZMkFnQWdBU0FKYWlJQklBSWdBeUFFSUFWQkFTQUhFR2tnQlNFQUlBWUxEQUVMSUFRZ0JCQnJJZ1VRYUNBQklBbHFJUUVnQlNBQWFpRUFJQVFvQWdBTElRVU1BQUFMQUFzTElBb2tCZ3ZnQVFFSWZ5TUdJUW9qQmtId0FXb2tCaUFLSWdnZ0FEWUNBQUpBSUFOQkFVb0VRRUVBSUFGcklRd2dBQ0VHSUFNaENVRUJJUU1nQUNFRkEwQWdCU0FHSUF4cUlnY2dCQ0FKUVg1cUlnWkJBblJxS0FJQWF5SUFJQUpCQTNFUkFBQkJmMG9FUUNBRklBY2dBa0VEY1JFQUFFRi9TZzBEQ3lBQUlBY2dBa0VEY1JFQUFFRi9TaUVGSUFnZ0EwRUNkR29oQ3lBRFFRRnFJUU1nQlFSL0lBc2dBRFlDQUNBSlFYOXFCU0FMSUFjMkFnQWdCeUVBSUFZTElnbEJBVW9FUUNBQUlRWWdDQ2dDQUNFRkRBRUxDd1ZCQVNFREN3c2dBU0FJSUFNUWJTQUtKQVlMV1FFRGZ5QUFRUVJxSVFJZ0FDQUJRUjlMQkg4Z0FDQUNLQUlBSWdNMkFnQWdBa0VBTmdJQUlBRkJZR29oQVVFQUJTQUFLQUlBSVFNZ0FpZ0NBQXNpQkVFZ0lBRnJkQ0FESUFGMmNqWUNBQ0FDSUFRZ0FYWTJBZ0FMalFNQkIzOGpCaUVLSXdaQjhBRnFKQVlnQ2tIb0FXb2lDU0FES0FJQUlnYzJBZ0FnQ1VFRWFpSU1JQU1vQWdRaUF6WUNBQ0FLSWdzZ0FEWUNBQUpBQWtBZ0IwRUJSeUFEY2dSQVFRQWdBV3NoRFNBQUlBWWdCRUVDZEdvb0FnQnJJZ2dnQUNBQ1FRTnhFUUFBUVFGSUJFQkJBU0VEQlVFQklRY2dCVVVoQlNBQUlRTWdDQ0VBQTBBZ0JTQUVRUUZLY1FSQUlBWWdCRUYrYWtFQ2RHb29BZ0FoQlNBRElBMXFJZ2dnQUNBQ1FRTnhFUUFBUVg5S0JFQWdCeUVGREFVTElBZ2dCV3NnQUNBQ1FRTnhFUUFBUVg5S0JFQWdCeUVGREFVTEN5QUhRUUZxSVFVZ0N5QUhRUUowYWlBQU5nSUFJQWtnQ1JCcklnTVFhQ0FESUFScUlRUWdDU2dDQUVFQlJ5QU1LQUlBUVFCSGNrVUVRQ0FBSVFNTUJBc2dBQ0FHSUFSQkFuUnFLQUlBYXlJSUlBc29BZ0FnQWtFRGNSRUFBRUVCU0FSL0lBVWhBMEVBQlNBQUlRTWdCU0VIUVFFaEJTQUlJUUFNQVFzaEJRc0xCVUVCSVFNTElBVkZCRUFnQXlFRklBQWhBd3dCQ3d3QkN5QUJJQXNnQlJCdElBTWdBU0FDSUFRZ0JoQm5DeUFLSkFZTFZ3RURmeUFBUVFScUlnSWdBVUVmU3dSL0lBSWdBQ2dDQUNJRE5nSUFJQUJCQURZQ0FDQUJRV0JxSVFGQkFBVWdBaWdDQUNFRElBQW9BZ0FMSWdSQklDQUJhM1lnQXlBQmRISTJBZ0FnQUNBRUlBRjBOZ0lBQ3ljQkFYOGdBQ2dDQUVGL2FoQnNJZ0VFZnlBQkJTQUFLQUlFRUd3aUFFRWdha0VBSUFBYkN3czVBUUovSUFBRVFDQUFRUUZ4UlFSQUEwQWdBVUVCYWlFQklBQkJBWFloQWlBQVFRSnhSUVJBSUFJaEFBd0JDd3NMQlVFZ0lRRUxJQUVMcEFFQkJYOGpCaUVGSXdaQmdBSnFKQVlnQlNFREFrQWdBa0VDVGdSQUlBRWdBa0VDZEdvaUJ5QUROZ0lBSUFBRVFBTkFJQU1nQVNnQ0FDQUFRWUFDSUFCQmdBSkpHeUlFRUhrYVFRQWhBd05BSUFFZ0EwRUNkR29pQmlnQ0FDQUJJQU5CQVdvaUEwRUNkR29vQWdBZ0JCQjVHaUFHSUFZb0FnQWdCR28yQWdBZ0F5QUNSdzBBQ3lBQUlBUnJJZ0JGRFFNZ0J5Z0NBQ0VEREFBQUN3QUxDd3NnQlNRR0MvNElBd2QvQVg0RWZDTUdJUWNqQmtFd2FpUUdJQWRCRUdvaEJDQUhJUVVnQUwwaUNVSS9pS2NoQmdKL0FrQWdDVUlnaUtjaUFrSC8vLy8vQjNFaUEwSDcxTDJBQkVrRWZ5QUNRZi8vUDNGQis4TWtSZzBCSUFaQkFFY2hBaUFEUWYyeWk0QUVTUVIvSUFJRWZ5QUJJQUJFQUFCQVZQc2grVCtnSWdCRU1XTmlHbUcwMEQyZ0lnbzVBd0FnQVNBQUlBcWhSREZqWWhwaHROQTlvRGtEQ0VGL0JTQUJJQUJFQUFCQVZQc2grYitnSWdCRU1XTmlHbUcwMEwyZ0lnbzVBd0FnQVNBQUlBcWhSREZqWWhwaHROQzlvRGtEQ0VFQkN3VWdBZ1IvSUFFZ0FFUUFBRUJVK3lFSlFLQWlBRVF4WTJJYVliVGdQYUFpQ2prREFDQUJJQUFnQ3FGRU1XTmlHbUcwNEQyZ09RTUlRWDRGSUFFZ0FFUUFBRUJVK3lFSndLQWlBRVF4WTJJYVliVGd2YUFpQ2prREFDQUJJQUFnQ3FGRU1XTmlHbUcwNEwyZ09RTUlRUUlMQ3dVZ0EwRzhqUEdBQkVrRVFDQURRYjM3MTRBRVNRUkFJQU5CL0xMTGdBUkdEUU1nQmdSQUlBRWdBRVFBQURCL2ZOa1NRS0FpQUVUS2xKT25rUTdwUGFBaUNqa0RBQ0FCSUFBZ0NxRkV5cFNUcDVFTzZUMmdPUU1JUVgwTUJRVWdBU0FBUkFBQU1IOTgyUkxBb0NJQVJNcVVrNmVSRHVtOW9DSUtPUU1BSUFFZ0FDQUtvVVRLbEpPbmtRN3B2YUE1QXdoQkF3d0ZDd0FGSUFOQis4UGtnQVJHRFFNZ0JnUkFJQUVnQUVRQUFFQlUreUVaUUtBaUFFUXhZMklhWWJUd1BhQWlDamtEQUNBQklBQWdDcUZFTVdOaUdtRzA4RDJnT1FNSVFYd01CUVVnQVNBQVJBQUFRRlQ3SVJuQW9DSUFSREZqWWhwaHRQQzlvQ0lLT1FNQUlBRWdBQ0FLb1VReFkySWFZYlR3dmFBNUF3aEJCQXdGQ3dBTEFBc2dBMEg3dytTSkJFa05BU0FEUWYvL3YvOEhTd1JBSUFFZ0FDQUFvU0lBT1FNSUlBRWdBRGtEQUVFQURBTUxJQWxDLy8vLy8vLy8vd2VEUW9DQWdJQ0FnSUN3d1FDRXZ5RUFRUUFoQWdOQUlBUWdBa0VEZEdvZ0FLcTNJZ281QXdBZ0FDQUtvVVFBQUFBQUFBQndRYUloQUNBQ1FRRnFJZ0pCQWtjTkFBc2dCQ0FBT1FNUUlBQkVBQUFBQUFBQUFBQmhCRUJCQVNFQ0EwQWdBa0YvYWlFSUlBUWdBa0VEZEdvckF3QkVBQUFBQUFBQUFBQmhCRUFnQ0NFQ0RBRUxDd1ZCQWlFQ0N5QUVJQVVnQTBFVWRrSHFkMm9nQWtFQmFrRUJFRzhoQWlBRkt3TUFJUUFnQmdSL0lBRWdBSm81QXdBZ0FTQUZLd01JbWprRENFRUFJQUpyQlNBQklBQTVBd0FnQVNBRkt3TUlPUU1JSUFJTEN3d0JDeUFBUklQSXlXMHdYK1Evb2tRQUFBQUFBQUE0UTZCRUFBQUFBQUFBT01PZ0lndXFJUUlnQVNBQUlBdEVBQUJBVlBzaCtUK2lvU0lLSUF0RU1XTmlHbUcwMEQyaUlnQ2hJZ3c1QXdBZ0EwRVVkaUlJSUF5OVFqU0lwMEgvRDNGclFSQktCRUFnQzBSemNBTXVpaG1qTzZJZ0NpQUtJQXRFQUFCZ0dtRzAwRDJpSWdDaElncWhJQUNob1NFQUlBRWdDaUFBb1NJTU9RTUFJQXRFd1VrZ0pacURlem1pSUFvZ0NpQUxSQUFBQUM2S0dhTTdvaUlOb1NJTG9TQU5vYUVoRFNBSUlBeTlRalNJcDBIL0QzRnJRVEZLQkVBZ0FTQUxJQTJoSWd3NUF3QWdEU0VBSUFzaENnc0xJQUVnQ2lBTW9TQUFvVGtEQ0NBQ0N5RUJJQWNrQmlBQkMvOFFBaFovQTN3akJpRVBJd1pCc0FScUpBWWdEMEhBQW1vaEVDQUNRWDFxUVJodElnVkJBQ0FGUVFCS0d5RVNJQVJCQW5SQm9CQnFLQUlBSWcwZ0EwRi9haUlIYWtFQVRnUkFJQTBnQTJvaENTQVNJQWRySVFVRFFDQVFJQVpCQTNScUlBVkJBRWdFZkVRQUFBQUFBQUFBQUFVZ0JVRUNkRUd3RUdvb0FnQzNDeUliT1FNQUlBVkJBV29oQlNBR1FRRnFJZ1lnQ1VjTkFBc0xJQTlCNEFOcUlRd2dEMEdnQVdvaENpQVBJUTRnQWtGb2FpQVNRV2hzSWhacUlRa2dBMEVBU2lFSVFRQWhCUU5BSUFnRVFDQUZJQWRxSVF0RUFBQUFBQUFBQUFBaEcwRUFJUVlEUUNBYklBQWdCa0VEZEdvckF3QWdFQ0FMSUFaclFRTjBhaXNEQUtLZ0lSc2dCa0VCYWlJR0lBTkhEUUFMQlVRQUFBQUFBQUFBQUNFYkN5QU9JQVZCQTNScUlCczVBd0FnQlVFQmFpRUdJQVVnRFVnRVFDQUdJUVVNQVFzTElBbEJBRW9oRTBFWUlBbHJJUlJCRnlBSmF5RVhJQWxGSVJnZ0EwRUFTaUVaSUEwaEJRSkFBa0FDUUFOQUlBNGdCVUVEZEdvckF3QWhHeUFGUVFCS0lnc0VRQ0FGSVFaQkFDRUhBMEFnRENBSFFRSjBhaUFiSUJ0RUFBQUFBQUFBY0Q2aXFyY2lHMFFBQUFBQUFBQndRYUtocWpZQ0FDQU9JQVpCZjJvaUNFRURkR29yQXdBZ0c2QWhHeUFIUVFGcUlRY2dCa0VCU2dSQUlBZ2hCZ3dCQ3dzTElCc2dDUkJsSWhzZ0cwUUFBQUFBQUFEQVA2S2NSQUFBQUFBQUFDQkFvcUVpRzZvaEJpQWJJQWEzb1NFYkFrQUNRQUpBSUJNRWZ5QU1JQVZCZjJwQkFuUnFJZ2dvQWdBaUVTQVVkU0VISUFnZ0VTQUhJQlIwYXlJSU5nSUFJQWdnRjNVaENDQUhJQVpxSVFZTUFRVWdHQVIvSUF3Z0JVRi9ha0VDZEdvb0FnQkJGM1VoQ0F3Q0JTQWJSQUFBQUFBQUFPQS9aZ1IvUVFJaENBd0VCVUVBQ3dzTElRZ01BZ3NnQ0VFQVNnMEFEQUVMSUFZaEJ5QUxCRUJCQUNFR1FRQWhDd05BSUF3Z0MwRUNkR29pR2lnQ0FDRVJBa0FDUUNBR0JIOUIvLy8vQnlFVkRBRUZJQkVFZjBFQklRWkJnSUNBQ0NFVkRBSUZRUUFMQ3lFR0RBRUxJQm9nRlNBUmF6WUNBQXNnQzBFQmFpSUxJQVZIRFFBTElBWWhDd1ZCQUNFTEN5QUhRUUZxSVFZQ1FDQVRCRUFDUUFKQUFrQWdDVUVCYXc0Q0FBRUNDeUFNSUFWQmYycEJBblJxSWdjZ0J5Z0NBRUgvLy84RGNUWUNBQXdEQ3lBTUlBVkJmMnBCQW5ScUlnY2dCeWdDQUVILy8vOEJjVFlDQUFzTEN5QUlRUUpHQkVCRUFBQUFBQUFBOEQ4Z0c2RWhHeUFMQkVBZ0cwUUFBQUFBQUFEd1B5QUpFR1doSVJzTFFRSWhDQXNMSUJ0RUFBQUFBQUFBQUFCaURRSWdCU0FOU2dSQVFRQWhDeUFGSVFjRFFDQU1JQWRCZjJvaUIwRUNkR29vQWdBZ0MzSWhDeUFISUExS0RRQUxJQXNOQWd0QkFTRUdBMEFnQmtFQmFpRUhJQXdnRFNBR2EwRUNkR29vQWdCRkJFQWdCeUVHREFFTEN5QUdJQVZxSVFjRFFDQVFJQVVnQTJvaUNFRURkR29nQlVFQmFpSUdJQkpxUVFKMFFiQVFhaWdDQUxjNUF3QWdHUVJBUkFBQUFBQUFBQUFBSVJ0QkFDRUZBMEFnR3lBQUlBVkJBM1JxS3dNQUlCQWdDQ0FGYTBFRGRHb3JBd0Npb0NFYklBVkJBV29pQlNBRFJ3MEFDd1ZFQUFBQUFBQUFBQUFoR3dzZ0RpQUdRUU4wYWlBYk9RTUFJQVlnQjBnRVFDQUdJUVVNQVFzTElBY2hCUXdBQUFzQUN5QUpJUUFEUUNBQVFXaHFJUUFnRENBRlFYOXFJZ1ZCQW5ScUtBSUFSUTBBQ3lBQUlRSWdCU0VBREFFTElBd2dHMEVBSUFsckVHVWlHMFFBQUFBQUFBQndRV1lFZnlBTUlBVkJBblJxSUJzZ0cwUUFBQUFBQUFCd1BxS3FJZ08zUkFBQUFBQUFBSEJCb3FHcU5nSUFJQllnQW1vaEFpQUZRUUZxQlNBSklRSWdHNm9oQXlBRkN5SUFRUUowYWlBRE5nSUFDMFFBQUFBQUFBRHdQeUFDRUdVaEd5QUFRWDlLSWdjRVFDQUFJUUlEUUNBT0lBSkJBM1JxSUJzZ0RDQUNRUUowYWlnQ0FMZWlPUU1BSUJ0RUFBQUFBQUFBY0Q2aUlSc2dBa0YvYWlFRElBSkJBRW9FUUNBRElRSU1BUXNMSUFjRVFDQUFJUUlEUUNBQUlBSnJJUWxCQUNFRFJBQUFBQUFBQUFBQUlSc0RRQ0FiSUFOQkEzUkJ3QkpxS3dNQUlBNGdBeUFDYWtFRGRHb3JBd0Npb0NFYklBTkJBV29oQlNBRElBMU9JQU1nQ1U5eVJRUkFJQVVoQXd3QkN3c2dDaUFKUVFOMGFpQWJPUU1BSUFKQmYyb2hBeUFDUVFCS0JFQWdBeUVDREFFTEN3c0xBa0FDUUFKQUFrQWdCQTRFQUFFQkFnTUxJQWNFUUVRQUFBQUFBQUFBQUNFYkEwQWdHeUFLSUFCQkEzUnFLd01Bb0NFYklBQkJmMm9oQWlBQVFRQktCRUFnQWlFQURBRUxDd1ZFQUFBQUFBQUFBQUFoR3dzZ0FTQWJtaUFiSUFnYk9RTUFEQUlMSUFjRVFFUUFBQUFBQUFBQUFDRWJJQUFoQWdOQUlCc2dDaUFDUVFOMGFpc0RBS0FoR3lBQ1FYOXFJUU1nQWtFQVNnUkFJQU1oQWd3QkN3c0ZSQUFBQUFBQUFBQUFJUnNMSUFFZ0d5QWJtaUFJUlNJRUd6a0RBQ0FLS3dNQUlCdWhJUnNnQUVFQlRnUkFRUUVoQWdOQUlCc2dDaUFDUVFOMGFpc0RBS0FoR3lBQ1FRRnFJUU1nQWlBQVJ3UkFJQU1oQWd3QkN3c0xJQUVnR3lBYm1pQUVHemtEQ0F3QkN5QUFRUUJLQkVBZ0NpQUFJZ0pCQTNScUt3TUFJUnNEUUNBS0lBSkJmMm9pQTBFRGRHb2lCQ3NEQUNJZElCdWdJUndnQ2lBQ1FRTjBhaUFiSUIwZ0hLR2dPUU1BSUFRZ0hEa0RBQ0FDUVFGS0JFQWdBeUVDSUJ3aEd3d0JDd3NnQUVFQlNpSUVCRUFnQ2lBQUlnSkJBM1JxS3dNQUlSc0RRQ0FLSUFKQmYyb2lBMEVEZEdvaUJTc0RBQ0lkSUJ1Z0lSd2dDaUFDUVFOMGFpQWJJQjBnSEtHZ09RTUFJQVVnSERrREFDQUNRUUpLQkVBZ0F5RUNJQndoR3d3QkN3c2dCQVJBUkFBQUFBQUFBQUFBSVJzRFFDQWJJQW9nQUVFRGRHb3JBd0NnSVJzZ0FFRi9haUVDSUFCQkFrb0VRQ0FDSVFBTUFRc0xCVVFBQUFBQUFBQUFBQ0ViQ3dWRUFBQUFBQUFBQUFBaEd3c0ZSQUFBQUFBQUFBQUFJUnNMSUFvckF3QWhIQ0FJQkVBZ0FTQWNtamtEQUNBQklBb3JBd2lhT1FNSUlBRWdHNW81QXhBRklBRWdIRGtEQUNBQklBb3JBd2c1QXdnZ0FTQWJPUU1RQ3dzZ0R5UUdJQVpCQjNFTGx3RUJBM3dnQUNBQW9pSURJQU1nQTZLaUlBTkVmTlhQV2pyWjVUMmlST3VjSzRybTVWcStvS0lnQXlBRFJIMytzVmZqSGNjK29rVFZZY0Vab0FFcXY2Q2lSS2I0RUJFUkVZRS9vS0FoQlNBRElBQ2lJUVFnQUNBRVJFbFZWVlZWVmNVL29pQURJQUZFQUFBQUFBQUE0RCtpSUFRZ0JhS2hvaUFCb2FDaElBUWdBeUFGb2tSSlZWVlZWVlhGdjZDaUlBQ2dJQUliSWdBTENBQWdBQ0FCRUdVTGxBRUJCSHdnQUNBQW9pSUNJQUtpSVFORUFBQUFBQUFBOEQ4Z0FrUUFBQUFBQUFEZ1A2SWlCS0VpQlVRQUFBQUFBQUR3UHlBRm9TQUVvU0FDSUFJZ0FpQUNSSkFWeXhtZ0Fmbytva1IzVWNFV2JNRld2NkNpUkV4VlZWVlZWYVUvb0tJZ0F5QURvaUFDUk1TeHRMMmU3aUUrSUFKRTFEaUl2dW42cUQyaW9hSkVyVktjZ0U5K2tyNmdvcUNpSUFBZ0FhS2hvS0FMeEFFQkEzOGpCaUVDSXdaQkVHb2tCaUFDSVFFQ2ZDQUF2VUlnaUtkQi8vLy8vd2R4SWdOQi9NT2svd05KQkh3Z0EwR2V3WnJ5QTBrRWZFUUFBQUFBQUFEd1B3VWdBRVFBQUFBQUFBQUFBQkJ5Q3dVZ0FDQUFvU0FEUWYvL3YvOEhTdzBCR2dKQUFrQUNRQUpBSUFBZ0FSQnVRUU54RGdNQUFRSURDeUFCS3dNQUlBRXJBd2dRY2d3RUN5QUJLd01BSUFFckF3aEJBUkJ3bWd3REN5QUJLd01BSUFFckF3Z1FjcG9NQWdzZ0FTc0RBQ0FCS3dNSVFRRVFjQXNMSVFBZ0FpUUdJQUFMeXdFQkEzOGpCaUVDSXdaQkVHb2tCaUFDSVFFQ1FDQUF2VUlnaUtkQi8vLy8vd2R4SWdOQi9NT2svd05KQkVBZ0EwR0FnTUR5QTA4RVFDQUFSQUFBQUFBQUFBQUFRUUFRY0NFQUN3VWdBMEgvLzcvL0Iwc0VRQ0FBSUFDaElRQU1BZ3NDUUFKQUFrQUNRQUpBSUFBZ0FSQnVRUU54RGdNQUFRSURDeUFCS3dNQUlBRXJBd2hCQVJCd0lRQU1CUXNnQVNzREFDQUJLd01JRUhJaEFBd0VDeUFCS3dNQUlBRXJBd2hCQVJCd21pRUFEQU1MSUFFckF3QWdBU3NEQ0JCeW1pRUFDd3NMSUFJa0JpQUFDNXNEQXdKL0FYNENmQ0FBdlNJRFFqK0lweUVCQW53Q2Z3SkFJQU5DSUlpblFmLy8vLzhIY1NJQ1FhckdtSVFFU3dSOElBTkMvLy8vLy8vLy8vLy9BSU5DZ0lDQWdJQ0FnUGovQUZZRVFDQUFEd3NnQUVUdk9mcitRaTZHUUdRRVFDQUFSQUFBQUFBQUFPQi9vZzhGSUFCRTByeDYzU3NqaHNCaklBQkVVVEF0MVJCSmg4QmpjVVVOQWtRQUFBQUFBQUFBQUNJQUR3c0FCU0FDUWNMYzJQNERTd1JBSUFKQnNjWEMvd05MRFFJZ0FVRUJjeUFCYXd3REN5QUNRWUNBd1BFRFN3UjhRUUFoQVNBQUJTQUFSQUFBQUFBQUFQQS9vQThMQ3d3Q0N5QUFSUDZDSzJWSEZmYy9vaUFCUVFOMFFZQVRhaXNEQUtDcUN5RUJJQUFnQWJjaUJFUUFBT0QrUWk3bVA2S2hJZ0FnQkVSMlBIazE3em5xUGFJaUJhRUxJUVFnQUNBRUlBUWdCQ0FFb2lJQUlBQWdBQ0FBSUFCRTBLUytjbWszWmo2aVJQRnIwc1ZCdmJ1K29LSkVMTjRscjJwV0VUK2dva1NUdmI0V2JNRm12NkNpUkQ1VlZWVlZWY1Uvb0tLaElnQ2lSQUFBQUFBQUFBQkFJQUNob3lBRm9hQkVBQUFBQUFBQThEK2dJUUFnQVVVRVFDQUFEd3NnQUNBQkVHVUxud01EQW44QmZnVjhJQUM5SWdOQ0lJaW5JUUVDZnlBRFFnQlRJZ0lnQVVHQWdNQUFTWElFZnlBRFF2Ly8vLy8vLy8vLy93Q0RRZ0JSQkVCRUFBQUFBQUFBOEw4Z0FDQUFvcU1QQ3lBQ1JRUkFJQUJFQUFBQUFBQUFVRU9pdlNJRFFpQ0lweUVCSUFOQy8vLy8vdytESVFOQnkzY01BZ3NnQUNBQW9VUUFBQUFBQUFBQUFLTVBCU0FCUWYvL3YvOEhTd1JBSUFBUEN5QURRdi8vLy84UGd5SURRZ0JSSUFGQmdJREEvd05HY1FSL1JBQUFBQUFBQUFBQUR3VkJnWGdMQ3dzaEFpQUJRZUsrSldvaUFVSC8vejl4UVo3Qm12OERhcTFDSUlZZ0E0Uy9SQUFBQUFBQUFQQy9vQ0lGSUFWRUFBQUFBQUFBNEQraW9pRUdJQVVnQlVRQUFBQUFBQUFBUUtDaklnY2dCNklpQ0NBSW9pRUVJQUlnQVVFVWRtcTNJZ0JFQUFEZy9rSXU1aitpSUFVZ0FFUjJQSGsxN3pucVBhSWdCeUFHSUFRZ0JDQUVSSi9HZU5BSm1zTS9va1N2ZUk0ZHhYSE1QNkNpUkFUNmw1bVptZGsvb0tJZ0NDQUVJQVFnQkVSRVVqN2ZFdkhDUDZKRTNnUExsbVJHeHorZ29rUlpreUtVSkVuU1A2Q2lSSk5WVlZWVlZlVS9vS0tnb0tLZ0lBYWhvS0FMOFE4REMzOENmZ2g4QWtBQ1FBSkFJQUc5SWcxQ0lJaW5JZ1ZCLy8vLy93ZHhJZ01nRGFjaUJuSkZCRUJFQUFBQUFBQUE4RDhQQ3lBQXZTSU9RaUNJcHlFSElBNm5JZ2hGSWdvZ0IwR0FnTUQvQTBaeEJFQkVBQUFBQUFBQThEOFBDeUFIUWYvLy8vOEhjU0lFUVlDQXdQOEhUUVJBSUFoQkFFY2dCRUdBZ01EL0IwWnhJQU5CZ0lEQS93ZExja1VFUUNBR1FRQkhJQU5CZ0lEQS93ZEdJZ3R4UlFSQUFrQUNRQUpBSUFkQkFFZ2lDVVVOQUNBRFFmLy8vNWtFU3dSL1FRSWhBZ3dCQlNBRFFmLy92LzhEU3dSL0lBTkJGSFloQWlBRFFmLy8vNGtFU3dSQVFRSWdCa0d6Q0NBQ2F5SUNkaUlNUVFGeGEwRUFJQXdnQW5RZ0JrWWJJUUlNQXdzZ0JnUi9RUUFGUVFJZ0EwR1RDQ0FDYXlJQ2RpSUdRUUZ4YTBFQUlBWWdBblFnQTBZYklRSU1CQXNGREFJTEN5RUNEQUlMSUFaRkRRQU1BUXNnQ3dSQUlBUkJnSURBZ0h4cUlBaHlSUVJBUkFBQUFBQUFBUEEvRHdzZ0JVRi9TaUVDSUFSQi8vKy8vd05MQkVBZ0FVUUFBQUFBQUFBQUFDQUNHdzhGUkFBQUFBQUFBQUFBSUFHYUlBSWJEd3NBQ3lBRFFZQ0F3UDhEUmdSQUlBQkVBQUFBQUFBQThEOGdBS01nQlVGL1Noc1BDeUFGUVlDQWdJQUVSZ1JBSUFBZ0FLSVBDeUFIUVg5S0lBVkJnSUNBL3dOR2NRUkFJQUNmRHdzTElBQ1pJUThnQ2dSQUlBUkZJQVJCZ0lDQWdBUnlRWUNBd1A4SFJuSUVRRVFBQUFBQUFBRHdQeUFQb3lBUElBVkJBRWdiSVFBZ0NVVUVRQ0FBRHdzZ0FpQUVRWUNBd0lCOGFuSUVRQ0FBbWlBQUlBSkJBVVliRHdzTUJRc0xBbndnQ1FSOEFrQUNRQUpBSUFJT0FnQUJBZ3NNQnd0RUFBQUFBQUFBOEw4TUFndEVBQUFBQUFBQThEOE1BUVZFQUFBQUFBQUE4RDhMQ3lFUkFud2dBMEdBZ0lDUEJFc0VmQ0FEUVlDQXdKOEVTd1JBSUFSQmdJREEvd05KQkVBakNrUUFBQUFBQUFBQUFDQUZRUUJJR3c4Rkl3cEVBQUFBQUFBQUFBQWdCVUVBU2hzUEN3QUxJQVJCLy8rLy93TkpCRUFnRVVTY2RRQ0lQT1EzZnFKRW5IVUFpRHprTjM2aUlCRkVXZlA0d2g5dXBRR2lSRm56K01JZmJxVUJvaUFGUVFCSUd3OExJQVJCZ0lEQS93Tk5CRUFnRDBRQUFBQUFBQUR3djZBaUFFUUFBQUJnUnhYM1A2SWlFQ0FBUkVUZlhmZ0xybFErb2lBQUlBQ2lSQUFBQUFBQUFPQS9JQUJFVlZWVlZWVlYxVDhnQUVRQUFBQUFBQURRUDZLaG9xR2lSUDZDSzJWSEZmYy9vcUVpQUtDOVFvQ0FnSUJ3Zzc4aUVpRVBJQklnRUtFTUFnc2dFVVNjZFFDSVBPUTNmcUpFbkhVQWlEemtOMzZpSUJGRVdmUDR3aDl1cFFHaVJGbnorTUlmYnFVQm9pQUZRUUJLR3c4RklBOUVBQUFBQUFBQVFFT2lJZ0M5UWlDSXB5QUVJQVJCZ0lEQUFFa2lCUnNoQWtITWQwR0JlQ0FGR3lBQ1FSUjFhaUVESUFKQi8vOC9jU0lFUVlDQXdQOERjaUVDSUFSQmo3RU9TUVJBUVFBaEJBVWdCRUg2N0M1SklnWWhCQ0FESUFaQkFYTkJBWEZxSVFNZ0FpQUNRWUNBUUdvZ0Joc2hBZ3NnQkVFRGRFR3dFMm9yQXdBaUZDQUNyVUlnaGlBQUlBOGdCUnU5UXYvLy8vOFBnNFMvSWhBZ0JFRURkRUdRRTJvckF3QWlFcUVpRTBRQUFBQUFBQUR3UHlBU0lCQ2dveUlWb2lJUHZVS0FnSUNBY0lPL0lnQWdBQ0FBb2lJV1JBQUFBQUFBQUFoQW9DQVBJQUNnSUJVZ0V5QUNRUUYxUVlDQWdJQUNja0dBZ0NCcUlBUkJFblJxclVJZ2hyOGlFeUFBb3FFZ0VDQVRJQktob1NBQW9xR2lJaENpSUE4Z0Q2SWlBQ0FBb2lBQUlBQWdBQ0FBSUFCRTcwNUZTaWgreWoraVJHWGJ5Wk5LaHMwL29LSkVBVUVkcVdCMDBUK2dva1JOSm85UlZWWFZQNkNpUlArcmI5dTJiZHMvb0tKRUF6TXpNek16NHorZ29xQWlFcUM5UW9DQWdJQndnNzhpQUtJaUV5QVFJQUNpSUE4Z0VpQUFSQUFBQUFBQUFBakFvQ0FXb2FHaW9DSVBvTDFDZ0lDQWdIQ0R2eUlBUkFBQUFPQUp4KzQvb2lJUUlBUkJBM1JCb0JOcUt3TUFJQThnQUNBVG9hRkUvUU02M0FuSDdqK2lJQUJFOVFGYkZPQXZQajZpb2FBaUFLQ2dJQU8zSWhLZ3ZVS0FnSUNBY0lPL0loTWhEeUFUSUJLaElCU2hJQkNoQ3dzaEVDQUFJQkNoSUFHaUlBRWdEVUtBZ0lDQWNJTy9JZ0NoSUEraW9DRUJJQThnQUtJaUFDQUJvQ0lQdlNJTlFpQ0lweUVDSUEybklRTWdBa0gvLzcrRUJFb0VRQ0FDUVlDQXdQdDdhaUFEY2lBQlJQNkNLMlZIRlpjOG9DQVBJQUNoWkhJTkJnVWdBa0dBK1AvL0IzRkIvNWZEaEFSTEJFQWdBa0dBNkx6N0Eyb2dBM0lnQVNBUElBQ2haWElOQmdzTElCRWdBa0gvLy8vL0IzRWlBMEdBZ0lEL0Ewc0VmeUFBUVlDQVFFR0FnTUFBSUFOQkZIWkJnbmhxZGlBQ2FpSURRUlIyUWY4UGNTSUVRWUY0YW5VZ0EzR3RRaUNHdjZFaUR5RUFJQUVnRDZDOUlRMUJBQ0FEUWYvL1AzRkJnSURBQUhKQmt3Z2dCR3QySWdOcklBTWdBa0VBU0JzRlFRQUxJZ0pCRkhSRUFBQUFBQUFBOEQ4Z0RVS0FnSUNBY0lPL0lnOUVBQUFBQUVNdTVqK2lJaEFnQVNBUElBQ2hvVVR2T2ZyK1FpN21QNklnRDBRNWJLZ01ZVndnUHFLaElnK2dJZ0FnQUNBQUlBQ2lJZ0VnQVNBQklBRWdBVVRRcEw1eWFUZG1QcUpFOFd2U3hVRzl1NzZnb2tRczNpV3ZhbFlSUDZDaVJKTzl2aFpzd1dhL29LSkVQbFZWVlZWVnhUK2dvcUVpQWFJZ0FVUUFBQUFBQUFBQXdLQ2pJQThnQUNBUW9hRWlBU0FBSUFHaW9LRWdBS0doSWdDOUlnMUNJSWluYWlJRFFZQ0F3QUJJQkh3Z0FDQUNFR1VGSUFPdFFpQ0dJQTFDLy8vLy93K0RoTDhMSWdDaUR3c0xDeUFBSUFHZ0R3c2dBQ0FBb1NJQUlBQ2pEd3NnRVVSWjgvakNIMjZsQWFKRVdmUDR3aDl1cFFHaUR3c2dFVVNjZFFDSVBPUTNmcUpFbkhVQWlEemtOMzZpQ3dNQUFRdkRBd0VEZnlBQ1FZREFBRTRFUUNBQUlBRWdBaEFIRHdzZ0FDRUVJQUFnQW1vaEF5QUFRUU54SUFGQkEzRkdCRUFEUUNBQVFRTnhCRUFnQWtVRVFDQUVEd3NnQUNBQkxBQUFPZ0FBSUFCQkFXb2hBQ0FCUVFGcUlRRWdBa0VCYXlFQ0RBRUxDeUFEUVh4eElnSkJRR29oQlFOQUlBQWdCVXdFUUNBQUlBRW9BZ0EyQWdBZ0FDQUJLQUlFTmdJRUlBQWdBU2dDQ0RZQ0NDQUFJQUVvQWd3MkFnd2dBQ0FCS0FJUU5nSVFJQUFnQVNnQ0ZEWUNGQ0FBSUFFb0FoZzJBaGdnQUNBQktBSWNOZ0ljSUFBZ0FTZ0NJRFlDSUNBQUlBRW9BaVEyQWlRZ0FDQUJLQUlvTmdJb0lBQWdBU2dDTERZQ0xDQUFJQUVvQWpBMkFqQWdBQ0FCS0FJME5nSTBJQUFnQVNnQ09EWUNPQ0FBSUFFb0FqdzJBandnQUVGQWF5RUFJQUZCUUdzaEFRd0JDd3NEUUNBQUlBSklCRUFnQUNBQktBSUFOZ0lBSUFCQkJHb2hBQ0FCUVFScUlRRU1BUXNMQlNBRFFRUnJJUUlEUUNBQUlBSklCRUFnQUNBQkxBQUFPZ0FBSUFBZ0FTd0FBVG9BQVNBQUlBRXNBQUk2QUFJZ0FDQUJMQUFET2dBRElBQkJCR29oQUNBQlFRUnFJUUVNQVFzTEN3TkFJQUFnQTBnRVFDQUFJQUVzQUFBNkFBQWdBRUVCYWlFQUlBRkJBV29oQVF3QkN3c2dCQXVZQWdFRWZ5QUFJQUpxSVFRZ0FVSC9BWEVoQVNBQ1FjTUFUZ1JBQTBBZ0FFRURjUVJBSUFBZ0FUb0FBQ0FBUVFGcUlRQU1BUXNMSUFSQmZIRWlCVUZBYWlFR0lBRWdBVUVJZEhJZ0FVRVFkSElnQVVFWWRISWhBd05BSUFBZ0Jrd0VRQ0FBSUFNMkFnQWdBQ0FETmdJRUlBQWdBellDQ0NBQUlBTTJBZ3dnQUNBRE5nSVFJQUFnQXpZQ0ZDQUFJQU0yQWhnZ0FDQUROZ0ljSUFBZ0F6WUNJQ0FBSUFNMkFpUWdBQ0FETmdJb0lBQWdBellDTENBQUlBTTJBakFnQUNBRE5nSTBJQUFnQXpZQ09DQUFJQU0yQWp3Z0FFRkFheUVBREFFTEN3TkFJQUFnQlVnRVFDQUFJQU0yQWdBZ0FFRUVhaUVBREFFTEN3c0RRQ0FBSUFSSUJFQWdBQ0FCT2dBQUlBQkJBV29oQUF3QkN3c2dCQ0FDYXd0VkFRSi9JQUJCQUVvakJTZ0NBQ0lCSUFCcUlnQWdBVWh4SUFCQkFFaHlCRUFRQXhwQkRCQUZRWDhQQ3lNRklBQTJBZ0FRQWlFQ0lBQWdBa29FUUJBQlJRUkFJd1VnQVRZQ0FFRU1FQVZCZnc4TEN5QUJDdzRBSUFFZ0FpQUFRUU54RVFBQUN3Z0FRUUFRQUVFQUN3dkFFUVFBUVlFSUM3WUtBUUlDQXdNREF3UUVCQVFFQkFRRUFBRUFBSUFBQUFCV0FBQUFRQUFBQUQ2MDVETUprZk16aTdJQk5Ed2dDalFqR2hNMFlLa2NOS2ZYSmpSTHJ6RTBVRHM5TkhDSFNUUWpvRlkwdUpKa05GVnRjelNJbjRFMC9BdUtOSk1Fa3pScGtwdzBNcittTkQrVnNUU1RINzAwNUduSk5LMkExalEyY2VRMHBrbnpOSWlNQVRYQTl3azFCdThTTlhaN0hEWEFwaVkxTjNzeE5kb0RQVFZlVEVrMU8yRldOYmxQWkRYOEpYTTFpbm1CTlliamlUVjgyWkkxaFdTY05WS09walV6WWJFMUplaThOZHd1eVRYT1FkWTFRUzdrTlZjQzh6V1BaZ0UyVDg4Sk52WERFamFZVFJ3MjZIVW1OakpITVRaMHpEdzJYaEZKTm1VaVZqYk9ER1EydU41eU5wZFRnVFljdTRrMmNxNlNOcTgybkRhQlhhWTJOUzJ4TnNld3ZEYms4OGcyQVFQV05tRHI0ellldS9JMm9rQUJOK3VtQ1RmeG1CSTN5UjhjTng1RkpqYzlFekUzSHBVOE4yL1dTRGVpNDFVMzk4bGpONG1YY2pldkxZRTN2cEtKTjNTRGtqZm1DSnczdml5bU4wZjVzRGQ1ZWJ3My9yaklOMGZFMVRlU3FPTTMrSFB5TjhBYUFUaVRmZ2s0K1cwU09BYnlHemhpRkNZNFZ0OHdPTmhkUERpU20wZzQ4cVJWT0RPSFl6aHVVSEk0MHdlQk9HdHFpVGlDV0pJNEt0dWJPQW44cFRob3hiQTRPMEs4T0NsK3lEaWdoZFU0MldYak9PZ3M4ampwOUFBNVJsWUpPUTVERWpsUnhCczV0ZU1sT1grck1EbWlKanc1eFdCSU9WTm1WVG1EUkdNNWFBbHlPUUhpZ0Rra1FvazVuUzJTT1h1dG16bGp5NlU1bVpHd09RMEx2RGxtUThnNUMwZlZPVElqNHpudDVmRTVIYzhBT2dVdUNUb3dHQkk2cVpZYk9oV3pKVHEzZHpBNmZPODdPZ29tU0RySEoxVTY1Z0ZqT25qQ2NUbzd2SUE2NlJtSk9zWUNranJiZjVzNnk1cWxPdGhkc0RydjA3czZzd2pJT29nSTFUcWY0T0k2QjUveE9seXBBRHZRQlFrN1h1MFJPdzlwR3p1RWdpVTcvVU13TzJlNE96dGg2MGM3VGVsVU8xMi9ZanVjZTNFN2Y1YUFPN3J4aUR2NTE1RTdSMUtiTzBGcXBUc25LckE3NHB5N094TE94enNYeXRRN0lKN2lPelZZOFR1bWd3QThwOTBJUEpqQ0VUeUNPeHM4QVZJbFBGUVFNRHhoZ1RzOHlMQkhQT1dxVkR6b2ZHSTgxRFJ4UE05d2dEeVd5WWc4T3EyUlBNQWttenpGT2FVOGhmYXZQT1ZsdXp5Q2s4Yzh1WXZVUExSYjRqeDVFZkU4KzEwQVBZbTFDRDNmbHhFOUFnNGJQWTBoSlQyNTNDODliVW83UFVCMlJ6MlJiRlE5aFRwaVBTTHVjRDBxUzRBOWY2R0lQWWlDa1QxSTk1bzlXQW1sUGZMQ3J6MzRMcnM5QTFuSFBXMU4xRDFjR2VJOTBjcndQVnM0QUQ1M2pRZytNMjBSUHBEZ0dqNG44U1ErTHFrdlBvY1RPejdLTzBjK1RTNVVQamY0WVQ2RXAzQStqeVdBUG5ONWlEN2lWNUUrM01tYVB2bllwRDV0ajY4K0cvaTZQcFVleHo0ekQ5UStGOWZoUGoyRThEN0dFZ0EvY21VSVA1TkNFVDhyc3hvL3pzQWtQN0YxTHoreTNEby9aUUZIUHgzd1V6Lzd0V0UvKzJCd1B3QUFnRDhEQUFBQUJBQUFBQVFBQUFBR0FBQUFnL21pQUVST2JnRDhLUlVBMFZjbkFOMDA5UUJpMjhBQVBKbVZBRUdRUXdCalVmNEF1OTZyQUxkaHhRQTZiaVFBMGsxQ0FFa0c0QUFKNmk0QUhKTFJBT3NkL2dBcHNSd0E2RDZuQVBVMWdnQkV1eTRBbk9tRUFMUW1jQUJCZmw4QTFwRTVBRk9ET1FDYzlEa0FpMStFQUNqNXZRRDRIenNBM3YrWEFBK1lCUUFSTCs4QUNscUxBRzBmYlFEUGZqWUFDY3NuQUVaUHR3Q2VaajhBTGVwZkFMb25kUURsNjhjQVBYdnhBUGM1QndDU1Vvb0ErMnZxQUIreFh3QUlYWTBBTUFOV0FIdjhSZ0R3cTJzQUlMelBBRGIwbWdEanFSMEFYbUdSQUFnYjVnQ0ZtV1VBb0JSZkFJMUFhQUNBMlA4QUozTk5BQVlHTVFES1ZoVUF5YWh6QUh2aVlBQnJqTUFBUWNNU0MxMUEreUg1UHdBQUFBQXRSSFErQUFBQWdKaEcrRHdBQUFCZ1VjeDRPd0FBQUlDREcvQTVBQUFBUUNBbGVqZ0FBQUNBSW9Mak5nQUFBQUFkODJrMUFBQUFBQUFBNEQ4QUFBQUFBQURndndBQUFBQUFBUEEvQUFBQUFBQUErRDhBUWFnVEN3Z0cwTTlENi8xTVBnQkJ1eE1MaWdaQUE3amlQMDluWjFNdUwzTjBZbDkyYjNKaWFYTXVZd0JtTFQ1aGJHeHZZeTVoYkd4dlkxOWlkV1ptWlhKZmJHVnVaM1JvWDJsdVgySjVkR1Z6SUQwOUlHWXRQblJsYlhCZmIyWm1jMlYwQUhadmNtSnBjMTlrWldOdlpHVmZhVzVwZEdsaGJBQm1MVDVpZVhSbGMxOXBibDl6WldjZ1BpQXdBR2RsZERoZmNHRmphMlYwWDNKaGR3Qm1MVDVpZVhSbGMxOXBibDl6WldjZ1BUMGdNQUJ1WlhoMFgzTmxaMjFsYm5RQWRtOXlZbWx6WDJSbFkyOWtaVjl3WVdOclpYUmZjbVZ6ZEFBaFl5MCtjM0JoY25ObEFHTnZaR1ZpYjI5clgyUmxZMjlrWlY5elkyRnNZWEpmY21GM0FDRmpMVDV6Y0dGeWMyVWdmSHdnZWlBOElHTXRQbk52Y25SbFpGOWxiblJ5YVdWekFHTnZaR1ZpYjI5clgyUmxZMjlrWlY5a1pXbHVkR1Z5YkdWaGRtVmZjbVZ3WldGMEFIb2dQQ0JqTFQ1emIzSjBaV1JmWlc1MGNtbGxjd0JqYjJSbFltOXZhMTlrWldOdlpHVmZjM1JoY25RQUtHNGdKaUF6S1NBOVBTQXdBR2x0WkdOMFgzTjBaWEF6WDJsMFpYSXdYMnh2YjNBQU1BQm5aWFJmZDJsdVpHOTNBR1l0UG5SbGJYQmZiMlptYzJWMElEMDlJR1l0UG1Gc2JHOWpMbUZzYkc5algySjFabVpsY2w5c1pXNW5kR2hmYVc1ZllubDBaWE1BYzNSaGNuUmZaR1ZqYjJSbGNnQjJiM0ppYVhOakxUNXpiM0owWldSZlpXNTBjbWxsY3lBOVBTQXdBR052YlhCMWRHVmZZMjlrWlhkdmNtUnpBSG9nUGowZ01DQW1KaUI2SUR3Z016SUFiR1Z1VzJsZElENDlJREFnSmlZZ2JHVnVXMmxkSUR3Z016SUFZWFpoYVd4aFlteGxXM2xkSUQwOUlEQUFheUE5UFNCakxUNXpiM0owWldSZlpXNTBjbWxsY3dCamIyMXdkWFJsWDNOdmNuUmxaRjlvZFdabWJXRnVBR010UG5OdmNuUmxaRjlqYjJSbGQyOXlaSE5iZUYwZ1BUMGdZMjlrWlFCc1pXNGdJVDBnVGs5ZlEwOUVSUUJwYm1Oc2RXUmxYMmx1WDNOdmNuUUFjRzkzS0NobWJHOWhkQ2tnY2lzeExDQmthVzBwSUQ0Z1pXNTBjbWxsY3dCc2IyOXJkWEF4WDNaaGJIVmxjd0FvYVc1MEtTQm1iRzl2Y2lod2IzY29LR1pzYjJGMEtTQnlMQ0JrYVcwcEtTQThQU0JsYm5SeWFXVnpBT29QQkc1aGJXVUI0ZzkrQUFWaFltOXlkQUVOWlc1c1lYSm5aVTFsYlc5eWVRSU9aMlYwVkc5MFlXeE5aVzF2Y25rREYyRmliM0owVDI1RFlXNXViM1JIY205M1RXVnRiM0o1QkE1ZlgxOWhjM05sY25SZlptRnBiQVVMWDE5ZmMyVjBSWEp5VG04R0JsOWhZbTl5ZEFjV1gyVnRjMk55YVhCMFpXNWZiV1Z0WTNCNVgySnBad2dRWDE5bmNtOTNWMkZ6YlUxbGJXOXllUWtLYzNSaFkydEJiR3h2WXdvSmMzUmhZMnRUWVhabEN3eHpkR0ZqYTFKbGMzUnZjbVVNRTJWemRHRmliR2x6YUZOMFlXTnJVM0JoWTJVTkNITmxkRlJvY21WM0RndHpaWFJVWlcxd1VtVjBNQThMWjJWMFZHVnRjRkpsZERBUUVWOXpkR0pmZG05eVltbHpYMk5zYjNObEVRNWZkbTl5WW1selgyUmxhVzVwZEJJTFgzTmxkSFZ3WDJaeVpXVVRHbDl6ZEdKZmRtOXlZbWx6WDJac2RYTm9YM0IxYzJoa1lYUmhGQ0ZmYzNSaVgzWnZjbUpwYzE5a1pXTnZaR1ZmWm5KaGJXVmZjSFZ6YUdSaGRHRVZCbDlsY25KdmNoWWdYM1p2Y21KcGMxOXpaV0Z5WTJoZlptOXlYM0JoWjJWZmNIVnphR1JoZEdFWEdGOXBjMTkzYUc5c1pWOXdZV05yWlhSZmNISmxjMlZ1ZEJnVlgzWnZjbUpwYzE5a1pXTnZaR1ZmY0dGamEyVjBHUXhmWjJWME9GOXdZV05yWlhRYUZGOTJiM0ppYVhOZlptbHVhWE5vWDJaeVlXMWxHeGxmYzNSaVgzWnZjbUpwYzE5dmNHVnVYM0IxYzJoa1lYUmhIQXhmZG05eVltbHpYMmx1YVhRZERsOXpkR0Z5ZEY5a1pXTnZaR1Z5SGcxZmRtOXlZbWx6WDJGc2JHOWpIeHRmYzNSaVgzWnZjbUpwYzE5blpYUmZabWxzWlY5dlptWnpaWFFnRTE5dFlYbGlaVjl6ZEdGeWRGOXdZV05yWlhRaERWOW1iSFZ6YUY5d1lXTnJaWFFpQlY5blpYUnVJd1pmWjJWME16SWtFMTl6ZEdKZmRtOXlZbWx6WDJwelgyOXdaVzRsRkY5emRHSmZkbTl5WW1selgycHpYMk5zYjNObEpoZGZjM1JpWDNadmNtSnBjMTlxYzE5amFHRnVibVZzY3ljYVgzTjBZbDkyYjNKaWFYTmZhbk5mYzJGdGNHeGxYM0poZEdVb0ZWOXpkR0pmZG05eVltbHpYMnB6WDJSbFkyOWtaU2tOWDJOeVl6TXlYM1Z3WkdGMFpTb1dYM1p2Y21KcGMxOWtaV052WkdWZmFXNXBkR2xoYkNzYVgzWnZjbUpwYzE5a1pXTnZaR1ZmY0dGamEyVjBYM0psYzNRc0NWOW5aWFJmWW1sMGN5MEZYMmxzYjJjdUVGOW5aWFE0WDNCaFkydGxkRjl5WVhjdkRWOXVaWGgwWDNObFoyMWxiblF3QlY5blpYUTRNUXRmYzNSaGNuUmZjR0ZuWlRJUVgyTmhjSFIxY21WZmNHRjBkR1Z5YmpNZFgzTjBZWEowWDNCaFoyVmZibTlmWTJGd2RIVnlaWEJoZEhSbGNtNDBEVjl3Y21Wd1gyaDFabVp0WVc0MUcxOWpiMlJsWW05dmExOWtaV052WkdWZmMyTmhiR0Z5WDNKaGR6WU9YM0J5WldScFkzUmZjRzlwYm5RM0QxOWtaV052WkdWZmNtVnphV1IxWlRnSlgyUnZYMlpzYjI5eU9RMWZhVzUyWlhKelpWOXRaR04wT2d4ZlltbDBYM0psZG1WeWMyVTdFVjl0WVd0bFgySnNiMk5yWDJGeWNtRjVQQkpmYzJWMGRYQmZkR1Z0Y0Y5dFlXeHNiMk05SkY5amIyUmxZbTl2YTE5a1pXTnZaR1ZmWkdWcGJuUmxjbXhsWVhabFgzSmxjR1ZoZEQ0UFgzSmxjMmxrZFdWZlpHVmpiMlJsUHhWZlkyOWtaV0p2YjJ0ZlpHVmpiMlJsWDNOMFpYQkFFRjlqYjJSbFltOXZhMTlrWldOdlpHVkJGbDlqYjJSbFltOXZhMTlrWldOdlpHVmZjM1JoY25SQ0NsOWtjbUYzWDJ4cGJtVkRGMTlwYldSamRGOXpkR1Z3TTE5cGRHVnlNRjlzYjI5d1JCbGZhVzFrWTNSZmMzUmxjRE5mYVc1dVpYSmZjbDlzYjI5d1JSbGZhVzFrWTNSZmMzUmxjRE5mYVc1dVpYSmZjMTlzYjI5d1JoOWZhVzFrWTNSZmMzUmxjRE5mYVc1dVpYSmZjMTlzYjI5d1gyeGtOalUwUndoZmFYUmxjbDgxTkVnTFgyZGxkRjkzYVc1a2IzZEpFRjkyYjNKaWFYTmZkbUZzYVdSaGRHVktEVjl6ZEdGeWRGOXdZV05yWlhSTEJWOXphMmx3VEF0ZlkzSmpNekpmYVc1cGRFME5YM05sZEhWd1gyMWhiR3h2WTA0UVgzTmxkSFZ3WDNSbGJYQmZabkpsWlU4U1gyTnZiWEIxZEdWZlkyOWtaWGR2Y21SelVCZGZZMjl0Y0hWMFpWOXpiM0owWldSZmFIVm1abTFoYmxFY1gyTnZiWEIxZEdWZllXTmpaV3hsY21GMFpXUmZhSFZtWm0xaGJsSVBYMlpzYjJGME16SmZkVzV3WVdOclV3OWZiRzl2YTNWd01WOTJZV3gxWlhOVURsOXdiMmx1ZEY5amIyMXdZWEpsVlFwZmJtVnBaMmhpYjNKelZnOWZhVzVwZEY5aWJHOWphM05wZW1WWENsOWhaR1JmWlc1MGNubFlFRjlwYm1Oc2RXUmxYMmx1WDNOdmNuUlpEMTkxYVc1ME16SmZZMjl0Y0dGeVpWb1lYMk52YlhCMWRHVmZkSGRwWkdSc1pWOW1ZV04wYjNKeld3OWZZMjl0Y0hWMFpWOTNhVzVrYjNkY0UxOWpiMjF3ZFhSbFgySnBkSEpsZG1WeWMyVmRCMTl6Y1hWaGNtVmVCMTl0WVd4c2IyTmZCVjltY21WbFlBaGZjbVZoYkd4dlkyRVNYM1J5ZVY5eVpXRnNiRzlqWDJOb2RXNXJZZzVmWkdsemNHOXpaVjlqYUhWdWEyTVJYMTlmWlhKeWJtOWZiRzlqWVhScGIyNWtCMTl0WlcxamJYQmxCMTl6WTJGc1ltNW1CbDl4YzI5eWRHY0ZYM05wWm5Sb0JGOXphSEpwQ0Y5MGNtbHVhMnhsYWdSZmMyaHNhd1ZmY0c1MGVtd0lYMkZmWTNSNlgyeHRCbDlqZVdOc1pXNExYMTlmY21WdFgzQnBiekp2RVY5ZlgzSmxiVjl3YVc4eVgyeGhjbWRsY0FaZlgxOXphVzV4Qmw5c1pHVjRjSElHWDE5ZlkyOXpjd1JmWTI5emRBUmZjMmx1ZFFSZlpYaHdkZ1JmYkc5bmR3UmZjRzkzZUF0eWRXNVFiM04wVTJWMGMza0hYMjFsYldOd2VYb0hYMjFsYlhObGRIc0ZYM05pY210OEMyUjVia05oYkd4ZmFXbHBmUUppTUE9PSIpLGZ1bmN0aW9uKGwpe3JldHVybiBsLmNoYXJDb2RlQXQoMCl9KTt2YXIgRT1FIT09dm9pZCAwP0U6e30sWD17fTtmb3IoZSBpbiBFKUUuaGFzT3duUHJvcGVydHkoZSkmJihYW2VdPUVbZV0pO0UuYXJndW1lbnRzPVtdLEUudGhpc1Byb2dyYW09Ii4vdGhpcy5wcm9ncmFtIixFLnF1aXQ9ZnVuY3Rpb24obCx1KXt0aHJvdyB1fSxFLnByZVJ1bj1bXSxFLnBvc3RSdW49W107dmFyIE89ITEsbkE9ITEsJD0hMSxWPSExO089dHlwZW9mIHdpbmRvdz09Im9iamVjdCIsbkE9dHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsJD10eXBlb2YgcHJvY2Vzcz09Im9iamVjdCImJnR5cGVvZiBKYT09ImZ1bmN0aW9uIiYmIU8mJiFuQSxWPSFPJiYhJCYmIW5BO3ZhciBxPSIiO2Z1bmN0aW9uIHoobCl7cmV0dXJuIEUubG9jYXRlRmlsZT9FLmxvY2F0ZUZpbGUobCxxKTpxK2x9JD8ocT0iLyIsRS5yZWFkPWZ1bmN0aW9uKHUsZil7dmFyIHc7cmV0dXJuIEF8fChBPXZvaWQgMCksdHx8KHQ9dm9pZCAwKSx1PXQubm9ybWFsaXplKHUpLHc9QS5yZWFkRmlsZVN5bmModSksZj93OncudG9TdHJpbmcoKX0sRS5yZWFkQmluYXJ5PWZ1bmN0aW9uKHUpe3ZhciBmPUUucmVhZCh1LCEwKTtyZXR1cm4gZi5idWZmZXJ8fChmPW5ldyBVaW50OEFycmF5KGYpKSxVQShmLmJ1ZmZlciksZn0scHJvY2Vzcy5hcmd2Lmxlbmd0aD4xJiYoRS50aGlzUHJvZ3JhbT1wcm9jZXNzLmFyZ3ZbMV0ucmVwbGFjZSgvXFwvZywiLyIpKSxFLmFyZ3VtZW50cz1wcm9jZXNzLmFyZ3Yuc2xpY2UoMiksdHlwZW9mIG1vZHVsZTwidSIscHJvY2Vzcy5vbigidW5jYXVnaHRFeGNlcHRpb24iLGZ1bmN0aW9uKGwpe2lmKCEobCBpbnN0YW5jZW9mIG90KSl0aHJvdyBsfSkscHJvY2Vzcy5vbigidW5oYW5kbGVkUmVqZWN0aW9uIixmdW5jdGlvbihsLHUpe3Byb2Nlc3MuZXhpdCgxKX0pLEUucXVpdD1mdW5jdGlvbihsKXtwcm9jZXNzLmV4aXQobCl9LEUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XSJ9KTpWPyh0eXBlb2YgcmVhZDwidSImJihFLnJlYWQ9ZnVuY3Rpb24odSl7cmV0dXJuIHJlYWQodSl9KSxFLnJlYWRCaW5hcnk9ZnVuY3Rpb24odSl7dmFyIGY7cmV0dXJuIHR5cGVvZiByZWFkYnVmZmVyPT0iZnVuY3Rpb24iP25ldyBVaW50OEFycmF5KHJlYWRidWZmZXIodSkpOihVQSh0eXBlb2YoZj1yZWFkKHUsImJpbmFyeSIpKT09Im9iamVjdCIpLGYpfSx0eXBlb2Ygc2NyaXB0QXJnczwidSI/RS5hcmd1bWVudHM9c2NyaXB0QXJnczp0eXBlb2YgYXJndW1lbnRzPCJ1IiYmKEUuYXJndW1lbnRzPWFyZ3VtZW50cyksdHlwZW9mIHF1aXQ9PSJmdW5jdGlvbiImJihFLnF1aXQ9ZnVuY3Rpb24obCl7cXVpdChsKX0pKTooT3x8bkEpJiYoTz9kb2N1bWVudC5jdXJyZW50U2NyaXB0JiYocT1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyk6cT1zZWxmLmxvY2F0aW9uLmhyZWYscT1xLmluZGV4T2YoImJsb2I6IikhPT0wP3Euc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5qb2luKCIvIikrIi8iOiIiLEUucmVhZD1mdW5jdGlvbih1KXt2YXIgZj1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIGYub3BlbigiR0VUIix1LCExKSxmLnNlbmQobnVsbCksZi5yZXNwb25zZVRleHR9LG5BJiYoRS5yZWFkQmluYXJ5PWZ1bmN0aW9uKHUpe3ZhciBmPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gZi5vcGVuKCJHRVQiLHUsITEpLGYucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsZi5zZW5kKG51bGwpLG5ldyBVaW50OEFycmF5KGYucmVzcG9uc2UpfSksRS5yZWFkQXN5bmM9ZnVuY3Rpb24odSxmLHcpe3ZhciBVPW5ldyBYTUxIdHRwUmVxdWVzdDtVLm9wZW4oIkdFVCIsdSwhMCksVS5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixVLm9ubG9hZD1mdW5jdGlvbigpe2lmKFUuc3RhdHVzPT0yMDB8fFUuc3RhdHVzPT0wJiZVLnJlc3BvbnNlKXtmKFUucmVzcG9uc2UpO3JldHVybn13KCl9LFUub25lcnJvcj13LFUuc2VuZChudWxsKX0sRS5zZXRXaW5kb3dUaXRsZT1mdW5jdGlvbihsKXtkb2N1bWVudC50aXRsZT1sfSk7dmFyIHRBPUUucHJpbnR8fCh0eXBlb2YgY29uc29sZTwidSI/Y29uc29sZS5sb2cuYmluZChjb25zb2xlKTp0eXBlb2YgcHJpbnQ8InUiP3ByaW50Om51bGwpLGlBPUUucHJpbnRFcnJ8fCh0eXBlb2YgcHJpbnRFcnI8InUiP3ByaW50RXJyOnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuLmJpbmQoY29uc29sZSl8fHRBKTtmb3IoZSBpbiBYKVguaGFzT3duUHJvcGVydHkoZSkmJihFW2VdPVhbZV0pO2Z1bmN0aW9uIFAobCl7dmFyIHU9QztyZXR1cm4gQz1DK2wrMTUmLTE2LHV9ZnVuY3Rpb24gRyhsKXt2YXIgdT1vW0Q+PjJdLGY9dStsKzE1Ji0xNjtyZXR1cm4gb1tEPj4yXT1mLGY+PXBBJiYhbnQoKT8ob1tEPj4yXT11LDApOnV9ZnVuY3Rpb24gYihsLHUpe3JldHVybiB1fHwodT0xNiksbD1NYXRoLmNlaWwobC91KSp1fWZ1bmN0aW9uIEsobCl7c3dpdGNoKGwpe2Nhc2UiaTEiOmNhc2UiaTgiOnJldHVybiAxO2Nhc2UiaTE2IjpyZXR1cm4gMjtjYXNlImkzMiI6Y2FzZSJmbG9hdCI6cmV0dXJuIDQ7Y2FzZSJpNjQiOmNhc2UiZG91YmxlIjpyZXR1cm4gODtkZWZhdWx0OmlmKGxbbC5sZW5ndGgtMV09PT0iKiIpcmV0dXJuIDQ7aWYobFswXSE9PSJpIilyZXR1cm4gMDt2YXIgdT1wYXJzZUludChsLnN1YnN0cigxKSk7cmV0dXJuIFVBKHUlOD09MCksdS84fX1mdW5jdGlvbiBlQShsKXtlQS5zaG93bnx8KGVBLnNob3duPXt9KSxlQS5zaG93bltsXXx8KGVBLnNob3duW2xdPTEsaUEobCkpfVg9dm9pZCAwO3ZhciBhQT17ImY2NC1yZW0iOmZ1bmN0aW9uKGwsdSl7cmV0dXJuIGwldX0sZGVidWdnZXI6ZnVuY3Rpb24oKXt9fSxHQT1bXTtmdW5jdGlvbiBzZShsLHUpe2Zvcih2YXIgZj0wLHc9Zjt3PGYrMDt3KyspaWYoIUdBW3ddKXJldHVybiBHQVt3XT1sLDErdzt0aHJvdyJGaW5pc2hlZCB1cCBhbGwgcmVzZXJ2ZWQgZnVuY3Rpb24gcG9pbnRlcnMuIFVzZSBhIGhpZ2hlciB2YWx1ZSBmb3IgUkVTRVJWRURfRlVOQ1RJT05fUE9JTlRFUlMuIn1mdW5jdGlvbiB6QShsKXtHQVtsLTFdPW51bGx9dmFyIFdBPXt9O2Z1bmN0aW9uIE5lKGwsdSl7aWYobCl7VUEodSksV0FbdV18fChXQVt1XT17fSk7dmFyIGY9V0FbdV07cmV0dXJuIGZbbF18fCh1Lmxlbmd0aD09PTE/ZltsXT1mdW5jdGlvbigpe3JldHVybiBBQSh1LGwpfTp1Lmxlbmd0aD09PTI/ZltsXT1mdW5jdGlvbihVKXtyZXR1cm4gQUEodSxsLFtVXSl9OmZbbF09ZnVuY3Rpb24oKXtyZXR1cm4gQUEodSxsLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfSksZltsXX19ZnVuY3Rpb24gYWUobCx1LGYpe3JldHVybiBmPysobD4+PjApKzQyOTQ5NjcyOTYqKyh1Pj4+MCk6KyhsPj4+MCkrNDI5NDk2NzI5NiorKDB8dSl9ZnVuY3Rpb24gQUEobCx1LGYpe3JldHVybiBmJiZmLmxlbmd0aD9FWyJkeW5DYWxsXyIrbF0uYXBwbHkobnVsbCxbdV0uY29uY2F0KGYpKTpFWyJkeW5DYWxsXyIrbF0uY2FsbChudWxsLHUpfXZhciBCQT0wLF9BPTA7ZnVuY3Rpb24gVUEobCx1KXtsfHxJZSgiQXNzZXJ0aW9uIGZhaWxlZDogIit1KX1mdW5jdGlvbiBDZShsKXt2YXIgdT1FWyJfIitsXTtyZXR1cm4gVUEodSwiQ2Fubm90IGNhbGwgdW5rbm93biBmdW5jdGlvbiAiK2wrIiwgbWFrZSBzdXJlIGl0IGlzIGV4cG9ydGVkIiksdX12YXIgaGU9e3N0YWNrU2F2ZTpmdW5jdGlvbigpe2duKCl9LHN0YWNrUmVzdG9yZTpmdW5jdGlvbigpe0luKCl9LGFycmF5VG9DOmZ1bmN0aW9uKGwpe3ZhciB1LGYsdz13dChsLmxlbmd0aCk7cmV0dXJuIHU9bCxmPXcscy5zZXQodSxmKSx3fSxzdHJpbmdUb0M6ZnVuY3Rpb24obCl7dmFyIHU9MDtpZihsIT1udWxsJiZsIT09MCl7dmFyIGY9KGwubGVuZ3RoPDwyKSsxO3U9d3QoZiksZXQobCx1LGYpfXJldHVybiB1fX0sJGU9e3N0cmluZzpoZS5zdHJpbmdUb0MsYXJyYXk6aGUuYXJyYXlUb0N9O2Z1bmN0aW9uIFVlKGwsdSxmLHcsVSl7dmFyIF89Q2UobCksb0E9W10sSD0wO2lmKHcpZm9yKHZhciBEQT0wO0RBPHcubGVuZ3RoO0RBKyspe3ZhciBsQT0kZVtmW0RBXV07bEE/KEg9PT0wJiYoSD1nbigpKSxvQVtEQV09bEEod1tEQV0pKTpvQVtEQV09d1tEQV19dmFyIGRBLENBPV8uYXBwbHkobnVsbCxvQSk7cmV0dXJuIENBPShkQT1DQSx1PT09InN0cmluZyI/bGUoZEEpOnU9PT0iYm9vbGVhbiI/ISFkQTpkQSksSCE9PTAmJkluKEgpLENBfWZ1bmN0aW9uIEF0KGwsdSxmLHcpe3N3aXRjaCgoZj1mfHwiaTgiKS5jaGFyQXQoZi5sZW5ndGgtMSk9PT0iKiImJihmPSJpMzIiKSxmKXtjYXNlImkxIjpjYXNlImk4IjpzW2w+PjBdPXU7YnJlYWs7Y2FzZSJpMTYiOnJbbD4+MV09dTticmVhaztjYXNlImkzMiI6b1tsPj4yXT11O2JyZWFrO2Nhc2UiaTY0Ijp0ZW1wSTY0PVt1Pj4+MCwrVGEodGVtcERvdWJsZT11KT49MT90ZW1wRG91YmxlPjA/KDB8SGEoK2hzKHRlbXBEb3VibGUvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fit4YSgodGVtcERvdWJsZS0rKH5+dGVtcERvdWJsZT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MF0sb1tsPj4yXT10ZW1wSTY0WzBdLG9bbCs0Pj4yXT10ZW1wSTY0WzFdO2JyZWFrO2Nhc2UiZmxvYXQiOkJbbD4+Ml09dTticmVhaztjYXNlImRvdWJsZSI6ZFtsPj4zXT11O2JyZWFrO2RlZmF1bHQ6SWUoImludmFsaWQgdHlwZSBmb3Igc2V0VmFsdWU6ICIrZil9fWZ1bmN0aW9uIEFuKGwsdSxmKXtzd2l0Y2goKHU9dXx8Imk4IikuY2hhckF0KHUubGVuZ3RoLTEpPT09IioiJiYodT0iaTMyIiksdSl7Y2FzZSJpMSI6Y2FzZSJpOCI6cmV0dXJuIHNbbD4+MF07Y2FzZSJpMTYiOnJldHVybiByW2w+PjFdO2Nhc2UiaTMyIjpjYXNlImk2NCI6cmV0dXJuIG9bbD4+Ml07Y2FzZSJmbG9hdCI6cmV0dXJuIEJbbD4+Ml07Y2FzZSJkb3VibGUiOnJldHVybiBkW2w+PjNdO2RlZmF1bHQ6SWUoImludmFsaWQgdHlwZSBmb3IgZ2V0VmFsdWU6ICIrdSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZW4obCx1LGYsdyl7dHlwZW9mIGw9PSJudW1iZXIiPyhfPSEwLG9BPWwpOihfPSExLG9BPWwubGVuZ3RoKTt2YXIgVT10eXBlb2YgdT09InN0cmluZyI/dTpudWxsO2lmKEg9Zj09ND93Olt0eXBlb2YgRHQ9PSJmdW5jdGlvbiI/RHQ6UCx3dCxQLEddW2Y9PT12b2lkIDA/MjpmXShNYXRoLm1heChvQSxVPzE6dS5sZW5ndGgpKSxfKXtmb3Iodz1ILFVBKCgzJkgpPT0wKSxEQT1IKygtNCZvQSk7dzxEQTt3Kz00KW9bdz4+Ml09MDtmb3IoREE9SCtvQTt3PERBOylzW3crKz4+MF09MDtyZXR1cm4gSH1pZihVPT09Imk4IilyZXR1cm4gbC5zdWJhcnJheXx8bC5zbGljZT9hLnNldChsLEgpOmEuc2V0KG5ldyBVaW50OEFycmF5KGwpLEgpLEg7Zm9yKHZhciBfLG9BLEgsREEsbEEsZEEsQ0EsVz0wO1c8b0E7KXt2YXIgTEE9bFtXXTtpZigobEE9VXx8dVtXXSk9PT0wKXtXKys7Y29udGludWV9bEE9PSJpNjQiJiYobEE9ImkzMiIpLEF0KEgrVyxMQSxsQSksQ0EhPT1sQSYmKGRBPUsobEEpLENBPWxBKSxXKz1kQX1yZXR1cm4gSH1mdW5jdGlvbiBUZShsKXtyZXR1cm4gUT9vbj9EdChsKTpHKGwpOlAobCl9ZnVuY3Rpb24gbGUobCx1KXtpZih1PT09MHx8IWwpcmV0dXJuIiI7Zm9yKHZhciBmLHcsVSxfPTAsb0E9MDtffD13PWFbbCtvQT4+MF0sKHchPTB8fHUpJiYob0ErKywhdXx8b0EhPXUpOyk7dXx8KHU9b0EpO3ZhciBIPSIiO2lmKF88MTI4KXtmb3IoO3U+MDspVT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhLnN1YmFycmF5KGwsbCtNYXRoLm1pbih1LDEwMjQpKSksSD1IP0grVTpVLGwrPTEwMjQsdS09MTAyNDtyZXR1cm4gSH1yZXR1cm4gZj1sLChmdW5jdGlvbihsQSxkQSl7Zm9yKHZhciBDQT1kQTtsQVtDQV07KSsrQ0E7aWYoQ0EtZEE+MTYmJmxBLnN1YmFycmF5JiZmdClyZXR1cm4gZnQuZGVjb2RlKGxBLnN1YmFycmF5KGRBLENBKSk7Zm9yKHZhciBXLExBLFBBLEpBLHFBLHdlLEtBPSIiOzspe2lmKCEoVz1sQVtkQSsrXSkpcmV0dXJuIEtBO2lmKCEoMTI4JlcpKXtLQSs9U3RyaW5nLmZyb21DaGFyQ29kZShXKTtjb250aW51ZX1pZihMQT02MyZsQVtkQSsrXSwoMjI0JlcpPT0xOTIpe0tBKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZXKTw8NnxMQSk7Y29udGludWV9aWYoUEE9NjMmbEFbZEErK10sKDI0MCZXKT09MjI0P1c9KDE1JlcpPDwxMnxMQTw8NnxQQTooSkE9NjMmbEFbZEErK10sKDI0OCZXKT09MjQwP1c9KDcmVyk8PDE4fExBPDwxMnxQQTw8NnxKQToocUE9NjMmbEFbZEErK10sVz0oMjUyJlcpPT0yNDg/KDMmVyk8PDI0fExBPDwxOHxQQTw8MTJ8SkE8PDZ8cUE6KDEmVyk8PDMwfExBPDwyNHxQQTw8MTh8SkE8PDEyfHFBPDw2fCh3ZT02MyZsQVtkQSsrXSkpKSxXPDY1NTM2KUtBKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFcpO2Vsc2V7dmFyIHJ0PVctNjU1MzY7S0ErPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8cnQ+PjEwLDU2MzIwfDEwMjMmcnQpfX19KShhLGYpfWZ1bmN0aW9uIFRBKGwpe2Zvcih2YXIgdT0iIjs7KXt2YXIgZj1zW2wrKz4+MF07aWYoIWYpcmV0dXJuIHU7dSs9U3RyaW5nLmZyb21DaGFyQ29kZShmKX19ZnVuY3Rpb24gdG4obCx1KXtyZXR1cm4oZnVuY3Rpb24odyxVLF8pe2Zvcih2YXIgb0E9MDtvQTx3Lmxlbmd0aDsrK29BKXNbVSsrPj4wXT13LmNoYXJDb2RlQXQob0EpO198fChzW1U+PjBdPTApfSkobCx1LCExKX12YXIgZnQ9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDA7ZnVuY3Rpb24geGUobCx1LGYsdyl7aWYoISh3PjApKXJldHVybiAwO2Zvcih2YXIgVT1mLF89Zit3LTEsb0E9MDtvQTxsLmxlbmd0aDsrK29BKXt2YXIgSD1sLmNoYXJDb2RlQXQob0EpO2lmKEg+PTU1Mjk2JiZIPD01NzM0MyYmKEg9NjU1MzYrKCgxMDIzJkgpPDwxMCl8MTAyMyZsLmNoYXJDb2RlQXQoKytvQSkpLEg8PTEyNyl7aWYoZj49XylicmVhazt1W2YrK109SH1lbHNlIGlmKEg8PTIwNDcpe2lmKGYrMT49XylicmVhazt1W2YrK109MTkyfEg+PjYsdVtmKytdPTEyOHw2MyZIfWVsc2UgaWYoSDw9NjU1MzUpe2lmKGYrMj49XylicmVhazt1W2YrK109MjI0fEg+PjEyLHVbZisrXT0xMjh8SD4+NiY2Myx1W2YrK109MTI4fDYzJkh9ZWxzZSBpZihIPD0yMDk3MTUxKXtpZihmKzM+PV8pYnJlYWs7dVtmKytdPTI0MHxIPj4xOCx1W2YrK109MTI4fEg+PjEyJjYzLHVbZisrXT0xMjh8SD4+NiY2Myx1W2YrK109MTI4fDYzJkh9ZWxzZSBpZihIPD02NzEwODg2Myl7aWYoZis0Pj1fKWJyZWFrO3VbZisrXT0yNDh8SD4+MjQsdVtmKytdPTEyOHxIPj4xOCY2Myx1W2YrK109MTI4fEg+PjEyJjYzLHVbZisrXT0xMjh8SD4+NiY2Myx1W2YrK109MTI4fDYzJkh9ZWxzZXtpZihmKzU+PV8pYnJlYWs7dVtmKytdPTI1MnxIPj4zMCx1W2YrK109MTI4fEg+PjI0JjYzLHVbZisrXT0xMjh8SD4+MTgmNjMsdVtmKytdPTEyOHxIPj4xMiY2Myx1W2YrK109MTI4fEg+PjYmNjMsdVtmKytdPTEyOHw2MyZIfX1yZXR1cm4gdVtmXT0wLGYtVX1mdW5jdGlvbiBldChsLHUsZil7cmV0dXJuIHhlKGwsYSx1LGYpfWZ1bmN0aW9uIFJBKGwpe2Zvcih2YXIgdT0wLGY9MDtmPGwubGVuZ3RoOysrZil7dmFyIHc9bC5jaGFyQ29kZUF0KGYpO3c+PTU1Mjk2JiZ3PD01NzM0MyYmKHc9NjU1MzYrKCgxMDIzJncpPDwxMCl8MTAyMyZsLmNoYXJDb2RlQXQoKytmKSksdzw9MTI3PysrdTp3PD0yMDQ3P3UrPTI6dzw9NjU1MzU/dSs9Mzp3PD0yMDk3MTUxP3UrPTQ6dzw9NjcxMDg4NjM/dSs9NTp1Kz02fXJldHVybiB1fXZhciBvZT10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmLTE2bGUiKTp2b2lkIDA7ZnVuY3Rpb24gdHQobCl7Zm9yKHZhciB1PWwsZj11Pj4xO3JbZl07KSsrZjtpZigodT1mPDwxKS1sPjMyJiZvZSlyZXR1cm4gb2UuZGVjb2RlKGEuc3ViYXJyYXkobCx1KSk7Zm9yKHZhciB3PTAsVT0iIjs7KXt2YXIgXz1yW2wrMip3Pj4xXTtpZihfPT0wKXJldHVybiBVOysrdyxVKz1TdHJpbmcuZnJvbUNoYXJDb2RlKF8pfX1mdW5jdGlvbiBubihsLHUsZil7aWYoZj09PXZvaWQgMCYmKGY9MjE0NzQ4MzY0NyksZjwyKXJldHVybiAwO2Zvcih2YXIgdz11LFU9KGYtPTIpPDIqbC5sZW5ndGg/Zi8yOmwubGVuZ3RoLF89MDtfPFU7KytfKXt2YXIgb0E9bC5jaGFyQ29kZUF0KF8pO3JbdT4+MV09b0EsdSs9Mn1yZXR1cm4gclt1Pj4xXT0wLHUtd31mdW5jdGlvbiByZShsKXtyZXR1cm4gMipsLmxlbmd0aH1mdW5jdGlvbiBtdChsKXtmb3IodmFyIHU9MCxmPSIiOzspe3ZhciB3PW9bbCs0KnU+PjJdO2lmKHc9PTApcmV0dXJuIGY7aWYoKyt1LHc+PTY1NTM2KXt2YXIgVT13LTY1NTM2O2YrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8VT4+MTAsNTYzMjB8MTAyMyZVKX1lbHNlIGYrPVN0cmluZy5mcm9tQ2hhckNvZGUodyl9fWZ1bmN0aW9uIFN0KGwsdSxmKXtpZihmPT09dm9pZCAwJiYoZj0yMTQ3NDgzNjQ3KSxmPDQpcmV0dXJuIDA7Zm9yKHZhciB3PXUsVT13K2YtNCxfPTA7XzxsLmxlbmd0aDsrK18pe3ZhciBvQT1sLmNoYXJDb2RlQXQoXyk7aWYob0E+PTU1Mjk2JiZvQTw9NTczNDMmJihvQT02NTUzNisoKDEwMjMmb0EpPDwxMCl8MTAyMyZsLmNoYXJDb2RlQXQoKytfKSksb1t1Pj4yXT1vQSwodSs9NCkrND5VKWJyZWFrfXJldHVybiBvW3U+PjJdPTAsdS13fWZ1bmN0aW9uIGdzKGwpe2Zvcih2YXIgdT0wLGY9MDtmPGwubGVuZ3RoOysrZil7dmFyIHc9bC5jaGFyQ29kZUF0KGYpO3c+PTU1Mjk2JiZ3PD01NzM0MyYmKytmLHUrPTR9cmV0dXJuIHV9ZnVuY3Rpb24gY3MobCl7dmFyIHU9UkEobCkrMSxmPUR0KHUpO3JldHVybiBmJiZ4ZShsLHMsZix1KSxmfWZ1bmN0aW9uIHB0KGwpe3ZhciB1PVJBKGwpKzEsZj13dCh1KTtyZXR1cm4geGUobCxzLGYsdSksZn1mdW5jdGlvbiB5ZShsKXtyZXR1cm4gbH1mdW5jdGlvbiBzbigpe3ZhciBsLHU9KGZ1bmN0aW9uKCl7dmFyIHc9RXJyb3IoKTtpZighdy5zdGFjayl7dHJ5e3Rocm93IEVycm9yKDApfWNhdGNoKFUpe3c9VX1pZighdy5zdGFjaylyZXR1cm4iKG5vIHN0YWNrIHRyYWNlIGF2YWlsYWJsZSkifXJldHVybiB3LnN0YWNrLnRvU3RyaW5nKCl9KSgpO3JldHVybiBFLmV4dHJhU3RhY2tUcmFjZSYmKHUrPWAKYCtFLmV4dHJhU3RhY2tUcmFjZSgpKSwobD11KS5yZXBsYWNlKC9fX1pbXHdcZF9dKy9nLGZ1bmN0aW9uKGYpe3ZhciB3LFU9dz1mO3JldHVybiBmPT09VT9mOmYrIiBbIitVKyJdIn0pfWZ1bmN0aW9uIGllKGwsdSl7cmV0dXJuIGwldT4wJiYobCs9dS1sJXUpLGx9ZnVuY3Rpb24gSGUobCl7RS5idWZmZXI9bj1sfWZ1bmN0aW9uIGtlKCl7RS5IRUFQOD1zPW5ldyBJbnQ4QXJyYXkobiksRS5IRUFQMTY9cj1uZXcgSW50MTZBcnJheShuKSxFLkhFQVAzMj1vPW5ldyBJbnQzMkFycmF5KG4pLEUuSEVBUFU4PWE9bmV3IFVpbnQ4QXJyYXkobiksRS5IRUFQVTE2PUk9bmV3IFVpbnQxNkFycmF5KG4pLEUuSEVBUFUzMj1nPW5ldyBVaW50MzJBcnJheShuKSxFLkhFQVBGMzI9Qj1uZXcgRmxvYXQzMkFycmF5KG4pLEUuSEVBUEY2ND1kPW5ldyBGbG9hdDY0QXJyYXkobil9ZnVuY3Rpb24gbnQoKXt2YXIgbD1FLnVzaW5nV2FzbT82NTUzNjoxNjc3NzIxNix1PTIxNDc0ODM2NDgtbDtpZihvW0Q+PjJdPnUpcmV0dXJuITE7dmFyIGY9cEE7Zm9yKHBBPU1hdGgubWF4KHBBLDE2Nzc3MjE2KTtwQTxvW0Q+PjJdOylwQT1wQTw9NTM2ODcwOTEyP2llKDIqcEEsbCk6TWF0aC5taW4oaWUoKDMqcEErMjE0NzQ4MzY0OCkvNCxsKSx1KTt2YXIgdz1FLnJlYWxsb2NCdWZmZXIocEEpO3JldHVybiB3JiZ3LmJ5dGVMZW5ndGg9PXBBPyhIZSh3KSxrZSgpLCEwKToocEE9ZiwhMSl9aD1DPW09eT1GPWs9RD0wLFE9ITEsRS5yZWFsbG9jQnVmZmVyfHwoRS5yZWFsbG9jQnVmZmVyPWZ1bmN0aW9uKGwpe3RyeXtpZihBcnJheUJ1ZmZlci50cmFuc2Zlcil1PUFycmF5QnVmZmVyLnRyYW5zZmVyKG4sbCk7ZWxzZXt2YXIgdSxmPXM7dT1uZXcgQXJyYXlCdWZmZXIobCksbmV3IEludDhBcnJheSh1KS5zZXQoZil9fWNhdGNoe3JldHVybiExfXJldHVybiEhWWEodSkmJnV9KTt0cnl7KHY9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwuYmluZChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEFycmF5QnVmZmVyLnByb3RvdHlwZSwiYnl0ZUxlbmd0aCIpLmdldCkpKG5ldyBBcnJheUJ1ZmZlcig0KSl9Y2F0Y2h7dj1mdW5jdGlvbih1KXtyZXR1cm4gdS5ieXRlTGVuZ3RofX12YXIgWWU9RS5UT1RBTF9TVEFDS3x8NTI0Mjg4MCxwQT1FLlRPVEFMX01FTU9SWXx8MTY3NzcyMTY7ZnVuY3Rpb24geXQoKXtyZXR1cm4gcEF9ZnVuY3Rpb24gZGUobCl7Zm9yKDtsLmxlbmd0aD4wOyl7dmFyIHU9bC5zaGlmdCgpO2lmKHR5cGVvZiB1PT0iZnVuY3Rpb24iKXt1KCk7Y29udGludWV9dmFyIGY9dS5mdW5jO3R5cGVvZiBmPT0ibnVtYmVyIj91LmFyZz09PXZvaWQgMD9FLmR5bkNhbGxfdihmKTpFLmR5bkNhbGxfdmkoZix1LmFyZyk6Zih1LmFyZz09PXZvaWQgMD9udWxsOnUuYXJnKX19cEE8WWUmJmlBKCJUT1RBTF9NRU1PUlkgc2hvdWxkIGJlIGxhcmdlciB0aGFuIFRPVEFMX1NUQUNLLCB3YXMgIitwQSsiISAoVE9UQUxfU1RBQ0s9IitZZSsiKSIpLEUuYnVmZmVyP249RS5idWZmZXI6KHR5cGVvZiBXZWJBc3NlbWJseT09Im9iamVjdCImJnR5cGVvZiBXZWJBc3NlbWJseS5NZW1vcnk9PSJmdW5jdGlvbiI/KEUud2FzbU1lbW9yeT1uZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOnBBLzY1NTM2fSksbj1FLndhc21NZW1vcnkuYnVmZmVyKTpuPW5ldyBBcnJheUJ1ZmZlcihwQSksRS5idWZmZXI9biksa2UoKTt2YXIgc3Q9W10sYW49W10sRXM9W10sQnM9W10sQ3M9W10sb249ITEsTGE9ITE7ZnVuY3Rpb24gTmEobCl7c3QudW5zaGlmdChsKX1mdW5jdGlvbiBZcihsKXthbi51bnNoaWZ0KGwpfWZ1bmN0aW9uIFByKGwpe0VzLnVuc2hpZnQobCl9ZnVuY3Rpb24gSnIobCl7QnMudW5zaGlmdChsKX1mdW5jdGlvbiBVYShsKXtDcy51bnNoaWZ0KGwpfWZ1bmN0aW9uIHFyKGwsdSxmKXt2YXIgdyxVO2VBKCJ3cml0ZVN0cmluZ1RvTWVtb3J5IGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkISBVc2Ugc3RyaW5nVG9VVEY4KCkgaW5zdGVhZCEiKSxmJiYodz1zW1U9dStSQShsKV0pLGV0KGwsdSwxLzApLGYmJihzW1VdPXcpfWZ1bmN0aW9uIEtyKGwsdSxmKXtyZXR1cm4gbD49MD9sOnU8PTMyPzIqTWF0aC5hYnMoMTw8dS0xKStsOk1hdGgucG93KDIsdSkrbH1mdW5jdGlvbiBPcihsLHUsZil7aWYobDw9MClyZXR1cm4gbDt2YXIgdz11PD0zMj9NYXRoLmFicygxPDx1LTEpOk1hdGgucG93KDIsdS0xKTtyZXR1cm4gbD49dyYmKHU8PTMyfHxsPncpJiYobD0tMip3K2wpLGx9dmFyIFRhPU1hdGguYWJzLHhhPU1hdGguY2VpbCxocz1NYXRoLmZsb29yLEhhPU1hdGgubWluLERlPTAscm49bnVsbCxhdD1udWxsO2Z1bmN0aW9uIFZyKGwpe3JldHVybiBsfUUucHJlbG9hZGVkSW1hZ2VzPXt9LEUucHJlbG9hZGVkQXVkaW9zPXt9O3ZhciBscz0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCI7ZnVuY3Rpb24ga3QobCl7cmV0dXJuIFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aD9sLnN0YXJ0c1dpdGgobHMpOmwuaW5kZXhPZihscyk9PT0wfShmdW5jdGlvbigpe3ZhciB1PSJtYWluLndhc3QiLGY9Im1haW4ud2FzbSIsdz0ibWFpbi50ZW1wLmFzbSI7a3QodSl8fCh1PXoodSkpLGt0KGYpfHwoZj16KGYpKSxrdCh3KXx8KHc9eih3KSk7dmFyIFU9e2dsb2JhbDpudWxsLGVudjpudWxsLGFzbTJ3YXNtOmFBLHBhcmVudDpFfSxfPW51bGw7ZnVuY3Rpb24gb0EoQ0Epe3JldHVybiBDQX1mdW5jdGlvbiBIKCl7dHJ5e2lmKEUud2FzbUJpbmFyeSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoRS53YXNtQmluYXJ5KTtpZihFLnJlYWRCaW5hcnkpcmV0dXJuIEUucmVhZEJpbmFyeShmKTt0aHJvdyJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCJ9Y2F0Y2goQ0Epe0llKENBKX19RS5hc21QcmVsb2FkPUUuYXNtO3ZhciBEQT1FLnJlYWxsb2NCdWZmZXIsbEE9ZnVuY3Rpb24oQ0Epe0NBPWllKENBLEUudXNpbmdXYXNtPzY1NTM2OjE2Nzc3MjE2KTt2YXIgVz1FLmJ1ZmZlci5ieXRlTGVuZ3RoO2lmKEUudXNpbmdXYXNtKXRyeXt2YXIgTEE9RS53YXNtTWVtb3J5Lmdyb3coKENBLVcpLzY1NTM2KTtyZXR1cm4gTEEhPT0tMT9FLmJ1ZmZlcj1FLndhc21NZW1vcnkuYnVmZmVyOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fTtFLnJlYWxsb2NCdWZmZXI9ZnVuY3Rpb24oQ0Epe3JldHVybiBkQT09PSJhc21qcyI/REEoQ0EpOmxBKENBKX07dmFyIGRBPSIiO0UuYXNtPWZ1bmN0aW9uKENBLFcsTEEpe3ZhciBQQTtpZighKFc9UEE9VykudGFibGUpe3ZhciBKQSxxQT1FLndhc21UYWJsZVNpemU7cUE9PT12b2lkIDAmJihxQT0xMDI0KTt2YXIgd2U9RS53YXNtTWF4VGFibGVTaXplO3R5cGVvZiBXZWJBc3NlbWJseT09Im9iamVjdCImJnR5cGVvZiBXZWJBc3NlbWJseS5UYWJsZT09ImZ1bmN0aW9uIj93ZSE9PXZvaWQgMD9XLnRhYmxlPW5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDpxQSxtYXhpbXVtOndlLGVsZW1lbnQ6ImFueWZ1bmMifSk6Vy50YWJsZT1uZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6cUEsZWxlbWVudDoiYW55ZnVuYyJ9KTpXLnRhYmxlPUFycmF5KHFBKSxFLndhc21UYWJsZT1XLnRhYmxlfXJldHVybiBXLm1lbW9yeUJhc2V8fChXLm1lbW9yeUJhc2U9RS5TVEFUSUNfQkFTRSksVy50YWJsZUJhc2V8fChXLnRhYmxlQmFzZT0wKSxKQT0oZnVuY3Rpb24ocnQsUGUsRW4pe2lmKHR5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCIpcmV0dXJuIGlBKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIiksITE7aWYoIShFLndhc21NZW1vcnkgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5NZW1vcnkpKXJldHVybiBpQSgibm8gbmF0aXZlIHdhc20gTWVtb3J5IGluIHVzZSIpLCExO2Z1bmN0aW9uIEZ0KGpBLCRBKXtpZigoXz1qQS5leHBvcnRzKS5tZW1vcnkpe3ZhciBpdCxCbix1cztpdD1fLm1lbW9yeSxCbj1FLmJ1ZmZlcixpdC5ieXRlTGVuZ3RoPEJuLmJ5dGVMZW5ndGgmJmlBKCJ0aGUgbmV3IGJ1ZmZlciBpbiBtZXJnZU1lbW9yeSBpcyBzbWFsbGVyIHRoYW4gdGhlIHByZXZpb3VzIG9uZS4gaW4gbmF0aXZlIHdhc20sIHdlIHNob3VsZCBncm93IG1lbW9yeSBoZXJlIiksdXM9bmV3IEludDhBcnJheShCbiksbmV3IEludDhBcnJheShpdCkuc2V0KHVzKSxIZShpdCksa2UoKX1FLmFzbT1fLEUudXNpbmdXYXNtPSEwLChmdW5jdGlvbigkcil7aWYoRGUtLSxFLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJkUubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhEZSksRGU9PTAmJihybiE9PW51bGwmJihjbGVhckludGVydmFsKHJuKSxybj1udWxsKSxhdCkpe3ZhciBQYT1hdDthdD1udWxsLFBhKCl9fSkoIndhc20taW5zdGFudGlhdGUiKX1pZihQZS5tZW1vcnk9RS53YXNtTWVtb3J5LFUuZ2xvYmFsPXtOYU46TmFOLEluZmluaXR5OjEvMH0sVVsiZ2xvYmFsLk1hdGgiXT1NYXRoLFUuZW52PVBlLERlKyssRS5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZFLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoRGUpLEUuaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gRS5pbnN0YW50aWF0ZVdhc20oVSxGdCl9Y2F0Y2goakEpe3JldHVybiBpQSgiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIitqQSksITF9ZnVuY3Rpb24gSmUoakEpe0Z0KGpBLmluc3RhbmNlLGpBLm1vZHVsZSl9ZnVuY3Rpb24gUXMoakEpeyghRS53YXNtQmluYXJ5JiYoT3x8bkEpJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goZix7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oJEEpe2lmKCEkQS5vayl0aHJvdyJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICciK2YrIiciO3JldHVybiAkQS5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gSCgpfSk6bmV3IFByb21pc2UoZnVuY3Rpb24oJEEsaXQpeyRBKEgoKSl9KSkudGhlbihmdW5jdGlvbigkQSl7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKCRBLFUpfSkudGhlbihqQSkuY2F0Y2goZnVuY3Rpb24oJEEpe2lBKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiKyRBKSxJZSgkQSl9KX1yZXR1cm4gRS53YXNtQmluYXJ5fHx0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmchPSJmdW5jdGlvbiJ8fGt0KGYpfHx0eXBlb2YgZmV0Y2ghPSJmdW5jdGlvbiI/UXMoSmUpOldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKGZldGNoKGYse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KSxVKS50aGVuKEplKS5jYXRjaChmdW5jdGlvbihqQSl7aUEoIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK2pBKSxpQSgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxRcyhKZSl9KSx7fX0pKENBLFcsTEEpLFVBKEpBLCJubyBiaW5hcnllbiBtZXRob2Qgc3VjY2VlZGVkLiIpLEpBfSxFLmFzbX0pKCksQz0oaD0xMDI0KSs0ODE2LGFuLnB1c2goKSxFLlNUQVRJQ19CQVNFPWgsRS5TVEFUSUNfQlVNUD00ODE2O3ZhciB4QT1DO2Z1bmN0aW9uIFhyKGwpe3NbeEFdPXNbbF0sc1t4QSsxXT1zW2wrMV0sc1t4QSsyXT1zW2wrMl0sc1t4QSszXT1zW2wrM119ZnVuY3Rpb24gWnIobCl7c1t4QV09c1tsXSxzW3hBKzFdPXNbbCsxXSxzW3hBKzJdPXNbbCsyXSxzW3hBKzNdPXNbbCszXSxzW3hBKzRdPXNbbCs0XSxzW3hBKzVdPXNbbCs1XSxzW3hBKzZdPXNbbCs2XSxzW3hBKzddPXNbbCs3XX1mdW5jdGlvbiB6cihsLHUsZil7dmFyIHc9Zj4wP2Y6UkEobCkrMSxVPUFycmF5KHcpLF89eGUobCxVLDAsVS5sZW5ndGgpO3JldHVybiB1JiYoVS5sZW5ndGg9XyksVX1mdW5jdGlvbiBXcihsKXtmb3IodmFyIHU9W10sZj0wO2Y8bC5sZW5ndGg7ZisrKXt2YXIgdz1sW2ZdO3c+MjU1JiYodyY9MjU1KSx1LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh3KSl9cmV0dXJuIHUuam9pbigiIil9Qys9MTYsRD1QKDQpLEY9KG09eT1iKEMpKStZZSxrPWIoRiksb1tEPj4yXT1rLFE9ITAsRS53YXNtVGFibGVTaXplPTQsRS53YXNtTWF4VGFibGVTaXplPTQsRS5hc21HbG9iYWxBcmc9e30sRS5hc21MaWJyYXJ5QXJnPXthYm9ydDpJZSxhc3NlcnQ6VUEsZW5sYXJnZU1lbW9yeTpudCxnZXRUb3RhbE1lbW9yeTp5dCxhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeTpmdW5jdGlvbigpe0llKCJDYW5ub3QgZW5sYXJnZSBtZW1vcnkgYXJyYXlzLiBFaXRoZXIgKDEpIGNvbXBpbGUgd2l0aCAgLXMgVE9UQUxfTUVNT1JZPVggIHdpdGggWCBoaWdoZXIgdGhhbiB0aGUgY3VycmVudCB2YWx1ZSAiK3BBKyIsICgyKSBjb21waWxlIHdpdGggIC1zIEFMTE9XX01FTU9SWV9HUk9XVEg9MSAgd2hpY2ggYWxsb3dzIGluY3JlYXNpbmcgdGhlIHNpemUgYXQgcnVudGltZSwgb3IgKDMpIGlmIHlvdSB3YW50IG1hbGxvYyB0byByZXR1cm4gTlVMTCAoMCkgaW5zdGVhZCBvZiB0aGlzIGFib3J0LCBjb21waWxlIHdpdGggIC1zIEFCT1JUSU5HX01BTExPQz0wICIpfSxpbnZva2VfaWlpOmZ1bmN0aW9uKHUsZix3KXt2YXIgVT1nbigpO3RyeXtyZXR1cm4gRS5keW5DYWxsX2lpaSh1LGYsdyl9Y2F0Y2goXyl7aWYoSW4oVSksdHlwZW9mIF8hPSJudW1iZXIiJiZfIT09ImxvbmdqbXAiKXRocm93IF87RS5zZXRUaHJldygxLDApfX0sX19fYXNzZXJ0X2ZhaWw6ZnVuY3Rpb24odSxmLHcsVSl7SWUoIkFzc2VydGlvbiBmYWlsZWQ6ICIrbGUodSkrIiwgYXQ6ICIrW2Y/bGUoZik6InVua25vd24gZmlsZW5hbWUiLHcsVT9sZShVKToidW5rbm93biBmdW5jdGlvbiJdKX0sX19fc2V0RXJyTm86ZnVuY3Rpb24odSl7cmV0dXJuIEUuX19fZXJybm9fbG9jYXRpb24mJihvW0UuX19fZXJybm9fbG9jYXRpb24oKT4+Ml09dSksdX0sX2Fib3J0OmZ1bmN0aW9uKCl7RS5hYm9ydCgpfSxfZW1zY3JpcHRlbl9tZW1jcHlfYmlnOmZ1bmN0aW9uKHUsZix3KXtyZXR1cm4gYS5zZXQoYS5zdWJhcnJheShmLGYrdyksdSksdX0sX2xsdm1fZmxvb3JfZjY0OmhzLERZTkFNSUNUT1BfUFRSOkQsdGVtcERvdWJsZVB0cjp4QSxBQk9SVDpCQSxTVEFDS1RPUDp5LFNUQUNLX01BWDpGfTt2YXIgZHM9RS5hc20oRS5hc21HbG9iYWxBcmcsRS5hc21MaWJyYXJ5QXJnLG4pO0UuYXNtPWRzLEUuX19fZXJybm9fbG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX19fZXJybm9fbG9jYXRpb24uYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgWWE9RS5fZW1zY3JpcHRlbl9yZXBsYWNlX21lbW9yeT1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5fZW1zY3JpcHRlbl9yZXBsYWNlX21lbW9yeS5hcHBseShudWxsLGFyZ3VtZW50cyl9O0UuX2ZyZWU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX2ZyZWUuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgRHQ9RS5fbWFsbG9jPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9tYWxsb2MuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtFLl9tZW1jcHk9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX21lbWNweS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEUuX21lbXNldD1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5fbWVtc2V0LmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5fc2Jyaz1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5fc2Jyay5hcHBseShudWxsLGFyZ3VtZW50cyl9LEUuX3N0Yl92b3JiaXNfanNfY2hhbm5lbHM9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLl9zdGJfdm9yYmlzX2pzX2Nsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9zdGJfdm9yYmlzX2pzX2Nsb3NlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5fc3RiX3ZvcmJpc19qc19kZWNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX3N0Yl92b3JiaXNfanNfZGVjb2RlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5fc3RiX3ZvcmJpc19qc19vcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9zdGJfdm9yYmlzX2pzX29wZW4uYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLl9zdGJfdm9yYmlzX2pzX3NhbXBsZV9yYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9zdGJfdm9yYmlzX2pzX3NhbXBsZV9yYXRlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5lc3RhYmxpc2hTdGFja1NwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLmVzdGFibGlzaFN0YWNrU3BhY2UuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLmdldFRlbXBSZXQwPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLmdldFRlbXBSZXQwLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5ydW5Qb3N0U2V0cz1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5ydW5Qb3N0U2V0cy5hcHBseShudWxsLGFyZ3VtZW50cyl9LEUuc2V0VGVtcFJldDA9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uc2V0VGVtcFJldDAuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLnNldFRocmV3PWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLnNldFRocmV3LmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIHd0PUUuc3RhY2tBbGxvYz1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5zdGFja0FsbG9jLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSW49RS5zdGFja1Jlc3RvcmU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uc3RhY2tSZXN0b3JlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZ249RS5zdGFja1NhdmU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uc3RhY2tTYXZlLmFwcGx5KG51bGwsYXJndW1lbnRzKX07ZnVuY3Rpb24gb3QobCl7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitsKyIpIix0aGlzLnN0YXR1cz1sfWZ1bmN0aW9uIGNuKGwpe2w9bHx8RS5hcmd1bWVudHMsIShEZT4wKSYmKChmdW5jdGlvbigpe2lmKEUucHJlUnVuKWZvcih0eXBlb2YgRS5wcmVSdW49PSJmdW5jdGlvbiImJihFLnByZVJ1bj1bRS5wcmVSdW5dKTtFLnByZVJ1bi5sZW5ndGg7KU5hKEUucHJlUnVuLnNoaWZ0KCkpO2RlKHN0KX0pKCksIShEZT4wKSYmKEUuY2FsbGVkUnVufHwoRS5zZXRTdGF0dXM/KEUuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtFLnNldFN0YXR1cygiIil9LDEpLHUoKX0sMSkpOnUoKSkpKTtmdW5jdGlvbiB1KCl7IUUuY2FsbGVkUnVuJiYoRS5jYWxsZWRSdW49ITAsQkF8fChvbnx8KG9uPSEwLGRlKGFuKSksZGUoRXMpLEUub25SdW50aW1lSW5pdGlhbGl6ZWQmJkUub25SdW50aW1lSW5pdGlhbGl6ZWQoKSwoZnVuY3Rpb24oKXtpZihFLnBvc3RSdW4pZm9yKHR5cGVvZiBFLnBvc3RSdW49PSJmdW5jdGlvbiImJihFLnBvc3RSdW49W0UucG9zdFJ1bl0pO0UucG9zdFJ1bi5sZW5ndGg7KVVhKEUucG9zdFJ1bi5zaGlmdCgpKTtkZShDcyl9KSgpKSl9fWZ1bmN0aW9uIF9yKGwsdSl7KCF1fHwhRS5ub0V4aXRSdW50aW1lfHxsIT09MCkmJihFLm5vRXhpdFJ1bnRpbWV8fChCQT0hMCxfQT1sLHk9TCxkZShCcyksTGE9ITAsRS5vbkV4aXQmJkUub25FeGl0KGwpKSxFLnF1aXQobCxuZXcgb3QobCkpKX1mdW5jdGlvbiBJZShsKXt0aHJvdyBFLm9uQWJvcnQmJkUub25BYm9ydChsKSxsIT09dm9pZCAwPyh0QShsKSxpQShsKSxsPUpTT04uc3RyaW5naWZ5KGwpKTpsPSIiLEJBPSEwLF9BPTEsImFib3J0KCIrbCsiKS4gQnVpbGQgd2l0aCAtcyBBU1NFUlRJT05TPTEgZm9yIG1vcmUgaW5mby4ifWlmKEUuZHluQ2FsbF9paWk9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uZHluQ2FsbF9paWkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLmFzbT1kcyxFLmNjYWxsPVVlLEUuY3dyYXA9ZnVuY3Rpb24odSxmLHcsVSl7dmFyIF89KHc9d3x8W10pLmV2ZXJ5KGZ1bmN0aW9uKG9BKXtyZXR1cm4gb0E9PT0ibnVtYmVyIn0pO3JldHVybiBmIT09InN0cmluZyImJl8mJiFVP0NlKHUpOmZ1bmN0aW9uKCl7cmV0dXJuIFVlKHUsZix3LGFyZ3VtZW50cyxVKX19LG90LnByb3RvdHlwZT1FcnJvcigpLG90LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1vdCxhdD1mdW5jdGlvbiBsKCl7RS5jYWxsZWRSdW58fGNuKCksRS5jYWxsZWRSdW58fChhdD1sKX0sRS5ydW49Y24sRS5hYm9ydD1JZSxFLnByZUluaXQpZm9yKHR5cGVvZiBFLnByZUluaXQ9PSJmdW5jdGlvbiImJihFLnByZUluaXQ9W0UucHJlSW5pdF0pO0UucHJlSW5pdC5sZW5ndGg+MDspRS5wcmVJbml0LnBvcCgpKCk7RS5ub0V4aXRSdW50aW1lPSEwLGNuKCksRS5vblJ1bnRpbWVJbml0aWFsaXplZD0oKT0+e2tzPSEwLGFhKCl9LGx0LmRlY29kZT1mdW5jdGlvbihsKXtyZXR1cm4oZnVuY3Rpb24oZil7aWYoIWtzKXRocm93IEVycm9yKCJTRjMgZGVjb2RlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiBEaWQgeW91IGF3YWl0IHN5bnRoLmlzUmVhZHk/Iik7dmFyIHc9e307ZnVuY3Rpb24gVShQZSl7cmV0dXJuIG5ldyBJbnQzMkFycmF5KEUuSEVBUFU4LmJ1ZmZlcixQZSwxKVswXX1mdW5jdGlvbiBfKFBlLEVuKXt2YXIgRnQ9bmV3IEFycmF5QnVmZmVyKEVuKkZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCksSmU9bmV3IEZsb2F0MzJBcnJheShGdCk7cmV0dXJuIEplLnNldChuZXcgRmxvYXQzMkFycmF5KEUuSEVBUFU4LmJ1ZmZlcixQZSxFbikpLEplfXcub3Blbj1FLmN3cmFwKCJzdGJfdm9yYmlzX2pzX29wZW4iLCJudW1iZXIiLFtdKSx3LmNsb3NlPUUuY3dyYXAoInN0Yl92b3JiaXNfanNfY2xvc2UiLCJ2b2lkIixbIm51bWJlciJdKSx3LmNoYW5uZWxzPUUuY3dyYXAoInN0Yl92b3JiaXNfanNfY2hhbm5lbHMiLCJudW1iZXIiLFsibnVtYmVyIl0pLHcuc2FtcGxlUmF0ZT1FLmN3cmFwKCJzdGJfdm9yYmlzX2pzX3NhbXBsZV9yYXRlIiwibnVtYmVyIixbIm51bWJlciJdKSx3LmRlY29kZT1FLmN3cmFwKCJzdGJfdm9yYmlzX2pzX2RlY29kZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSk7dmFyIG9BLEgsREEsbEEsZEE9dy5vcGVuKCksQ0E9KG9BPWYsSD1mLmJ5dGVMZW5ndGgsREE9RS5fbWFsbG9jKEgpLChsQT1uZXcgVWludDhBcnJheShFLkhFQVBVOC5idWZmZXIsREEsSCkpLnNldChuZXcgVWludDhBcnJheShvQSwwLEgpKSxsQSksVz1FLl9tYWxsb2MoNCksTEE9RS5fbWFsbG9jKDQpLFBBPXcuZGVjb2RlKGRBLENBLmJ5dGVPZmZzZXQsQ0EuYnl0ZUxlbmd0aCxXLExBKTtpZihFLl9mcmVlKENBLmJ5dGVPZmZzZXQpLFBBPDApdGhyb3cgdy5jbG9zZShkQSksRS5fZnJlZShXKSxFcnJvcigic3Ridm9yYmlzIGRlY29kZSBmYWlsZWQ6ICIrUEEpO2Zvcih2YXIgSkE9dy5jaGFubmVscyhkQSkscUE9QXJyYXkoSkEpLHdlPW5ldyBJbnQzMkFycmF5KEUuSEVBUFUzMi5idWZmZXIsVShXKSxKQSksS0E9MDtLQTxKQTtLQSsrKXFBW0tBXT1fKHdlW0tBXSxQQSksRS5fZnJlZSh3ZVtLQV0pO3ZhciBydD13LnNhbXBsZVJhdGUoZEEpO3JldHVybiB3LmNsb3NlKGRBKSxFLl9mcmVlKFUoVykpLEUuX2ZyZWUoVykse2RhdGE6cUEsc2FtcGxlUmF0ZTpydCxlb2Y6ITAsZXJyb3I6bnVsbH19KShsKX19KSgpO3ZhciBPdD1sdCxzcz0tMTVlMyxHbz0xNWUzLHZuPW5ldyBGbG9hdDMyQXJyYXkoR28tc3MrMSk7Zm9yKGxldCBlPTA7ZTx2bi5sZW5ndGg7ZSsrKXtsZXQgQT1zcytlO3ZuW2VdPU1hdGgucG93KDIsQS8xMjAwKX1mdW5jdGlvbiBRZShlKXtyZXR1cm4gZTw9LTMyNzY3PzA6dm5bZS1zc119dmFyIFl0PS0yZTQsb2E9MTY1MDAsTG49bmV3IEZsb2F0MzJBcnJheShvYS1ZdCsxKTtmb3IobGV0IGU9MDtlPExuLmxlbmd0aDtlKyspe2xldCBBPVl0K2U7TG5bZV09NDQwKk1hdGgucG93KDIsKEEtNjkwMCkvMTIwMCl9ZnVuY3Rpb24gTm4oZSl7cmV0dXJuIGU8WXR8fGU+b2E/NDQwKk1hdGgucG93KDIsKGUtNjkwMCkvMTIwMCk6TG5bfn5lLVl0XX12YXIgYXM9LTE2NjAsUm89MTYwMCxVbj1uZXcgRmxvYXQzMkFycmF5KChSby1hcykqMTAwKzEpO2ZvcihsZXQgZT0wO2U8VW4ubGVuZ3RoO2UrKyl7bGV0IEE9KGFzKjEwMCtlKS8xMDA7VW5bZV09TWF0aC5wb3coMTAsLUEvMjApfWZ1bmN0aW9uIEFlKGUpe3JldHVybiBVbltNYXRoLmZsb29yKChlLWFzKSoxMDApXX12YXIgTW89LjAxLEhBPTEwMCxRbj05MCxibz0xNWUtNixiZT1jbGFzcyByYXtzYW1wbGVSYXRlO2N1cnJlbnRBdHRlbnVhdGlvbkRiPUhBO3N0YXRlPTA7YXR0ZW51YXRpb249MDthdHRlbnVhdGlvblRhcmdldEdhaW49MDtjdXJyZW50U2FtcGxlVGltZT0wO3JlbGVhc2VTdGFydERiPUhBO3JlbGVhc2VTdGFydFRpbWVTYW1wbGVzPTA7Y3VycmVudFJlbGVhc2VHYWluPTE7YXR0YWNrRHVyYXRpb249MDtkZWNheUR1cmF0aW9uPTA7cmVsZWFzZUR1cmF0aW9uPTA7YXR0ZW51YXRpb25UYXJnZXQ9MDtzdXN0YWluRGJSZWxhdGl2ZT0wO2RlbGF5RW5kPTA7YXR0YWNrRW5kPTA7aG9sZEVuZD0wO2RlY2F5RW5kPTA7Y2FuRW5kT25TaWxlbnRTdXN0YWluO2NvbnN0cnVjdG9yKEEsdCl7dGhpcy5zYW1wbGVSYXRlPUEsdGhpcy5jYW5FbmRPblNpbGVudFN1c3RhaW49dC8xMD49UW59c3RhdGljIHN0YXJ0UmVsZWFzZShBKXtBLnZvbHVtZUVudmVsb3BlLnJlbGVhc2VTdGFydFRpbWVTYW1wbGVzPUEudm9sdW1lRW52ZWxvcGUuY3VycmVudFNhbXBsZVRpbWUsQS52b2x1bWVFbnZlbG9wZS5jdXJyZW50UmVsZWFzZUdhaW49QWUoQS52b2x1bWVFbnZlbG9wZS5jdXJyZW50QXR0ZW51YXRpb25EYikscmEucmVjYWxjdWxhdGUoQSl9c3RhdGljIHJlY2FsY3VsYXRlKEEpe2xldCB0PUEudm9sdW1lRW52ZWxvcGUsbj1nPT5NYXRoLm1heCgwLE1hdGguZmxvb3IoUWUoZykqdC5zYW1wbGVSYXRlKSk7dC5hdHRlbnVhdGlvblRhcmdldD1NYXRoLm1heCgwLE1hdGgubWluKEEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmluaXRpYWxBdHRlbnVhdGlvbl0sMTQ0MCkpLzEwLHQuYXR0ZW51YXRpb25UYXJnZXRHYWluPUFlKHQuYXR0ZW51YXRpb25UYXJnZXQpLHQuc3VzdGFpbkRiUmVsYXRpdmU9TWF0aC5taW4oSEEsQS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3VzdGFpblZvbEVudl0vMTApO2xldCBzPU1hdGgubWluKEhBLHQuc3VzdGFpbkRiUmVsYXRpdmUpO3QuYXR0YWNrRHVyYXRpb249bihBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5hdHRhY2tWb2xFbnZdKTtsZXQgYT1BLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWNheVZvbEVudl0scj0oNjAtQS50YXJnZXRLZXkpKkEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmtleU51bVRvVm9sRW52RGVjYXldLEk9cy9IQTt0LmRlY2F5RHVyYXRpb249bihhK3IpKkksdC5yZWxlYXNlRHVyYXRpb249bihNYXRoLm1heCgtNzIwMCxBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5yZWxlYXNlVm9sRW52XSkpLHQuZGVsYXlFbmQ9bihBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWxheVZvbEVudl0pLHQuYXR0YWNrRW5kPXQuYXR0YWNrRHVyYXRpb24rdC5kZWxheUVuZDtsZXQgbz0oNjAtQS50YXJnZXRLZXkpKkEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmtleU51bVRvVm9sRW52SG9sZF07aWYodC5ob2xkRW5kPW4oQS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuaG9sZFZvbEVudl0rbykrdC5hdHRhY2tFbmQsdC5kZWNheUVuZD10LmRlY2F5RHVyYXRpb24rdC5ob2xkRW5kLHQuc3RhdGU9PT0wJiZ0LmF0dGFja0VuZD09PTAmJih0LnN0YXRlPTIpLEEuaXNJblJlbGVhc2Upe2xldCBnPU1hdGgubWF4KDAsTWF0aC5taW4oSEEsdC5zdXN0YWluRGJSZWxhdGl2ZSkpLEI9Zy9IQTtzd2l0Y2godC5kZWNheUR1cmF0aW9uPW4oYStyKSpCLHQuc3RhdGUpe2Nhc2UgMDp0LnJlbGVhc2VTdGFydERiPUhBO2JyZWFrO2Nhc2UgMTp7bGV0IGg9MS0odC5hdHRhY2tFbmQtdC5yZWxlYXNlU3RhcnRUaW1lU2FtcGxlcykvdC5hdHRhY2tEdXJhdGlvbjt0LnJlbGVhc2VTdGFydERiPTIwKk1hdGgubG9nMTAoaCkqLTE7YnJlYWt9Y2FzZSAyOnQucmVsZWFzZVN0YXJ0RGI9MDticmVhaztjYXNlIDM6dC5yZWxlYXNlU3RhcnREYj0oMS0odC5kZWNheUVuZC10LnJlbGVhc2VTdGFydFRpbWVTYW1wbGVzKS90LmRlY2F5RHVyYXRpb24pKmc7YnJlYWs7Y2FzZSA0OnQucmVsZWFzZVN0YXJ0RGI9ZzticmVha310LnJlbGVhc2VTdGFydERiPU1hdGgubWF4KDAsTWF0aC5taW4odC5yZWxlYXNlU3RhcnREYixIQSkpLHQucmVsZWFzZVN0YXJ0RGI+PVFuJiYoQS5maW5pc2hlZD0hMCksdC5jdXJyZW50UmVsZWFzZUdhaW49QWUodC5yZWxlYXNlU3RhcnREYik7bGV0IGQ9KEhBLXQucmVsZWFzZVN0YXJ0RGIpL0hBO3QucmVsZWFzZUR1cmF0aW9uKj1kfX1zdGF0aWMgYXBwbHkoQSx0LG4scyl7bGV0IGE9QS52b2x1bWVFbnZlbG9wZSxyPW4vMTAsST1zO2lmKEEuaXNJblJlbGVhc2Upe2xldCBnPWEuY3VycmVudFNhbXBsZVRpbWUtYS5yZWxlYXNlU3RhcnRUaW1lU2FtcGxlcztpZihnPj1hLnJlbGVhc2VEdXJhdGlvbil7Zm9yKGxldCBkPTA7ZDx0Lmxlbmd0aDtkKyspdFtkXT0wO0EuZmluaXNoZWQ9ITA7cmV0dXJufWxldCBCPUhBLWEucmVsZWFzZVN0YXJ0RGI7Zm9yKGxldCBkPTA7ZDx0Lmxlbmd0aDtkKyspe2EuYXR0ZW51YXRpb24rPShhLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbi1hLmF0dGVudWF0aW9uKSpJO2xldCBoPWcvYS5yZWxlYXNlRHVyYXRpb24qQithLnJlbGVhc2VTdGFydERiO2EuY3VycmVudFJlbGVhc2VHYWluPWEuYXR0ZW51YXRpb24qQWUoaCtyKSx0W2RdKj1hLmN1cnJlbnRSZWxlYXNlR2FpbixhLmN1cnJlbnRTYW1wbGVUaW1lKyssZysrfWEuY3VycmVudFJlbGVhc2VHYWluPD1ibyYmKEEuZmluaXNoZWQ9ITApO3JldHVybn1sZXQgbz0wO3N3aXRjaChhLnN0YXRlKXtjYXNlIDA6Zm9yKDthLmN1cnJlbnRTYW1wbGVUaW1lPGEuZGVsYXlFbmQ7KWlmKGEuY3VycmVudEF0dGVudWF0aW9uRGI9SEEsdFtvXT0wLGEuY3VycmVudFNhbXBsZVRpbWUrKywrK28+PXQubGVuZ3RoKXJldHVybjthLnN0YXRlKys7Y2FzZSAxOmZvcig7YS5jdXJyZW50U2FtcGxlVGltZTxhLmF0dGFja0VuZDspe2EuYXR0ZW51YXRpb24rPShhLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbi1hLmF0dGVudWF0aW9uKSpJO2xldCBnPTEtKGEuYXR0YWNrRW5kLWEuY3VycmVudFNhbXBsZVRpbWUpL2EuYXR0YWNrRHVyYXRpb247aWYodFtvXSo9ZyphLmF0dGVudWF0aW9uKkFlKHIpLGEuY3VycmVudEF0dGVudWF0aW9uRGI9MCxhLmN1cnJlbnRTYW1wbGVUaW1lKyssKytvPj10Lmxlbmd0aClyZXR1cm59YS5zdGF0ZSsrO2Nhc2UgMjpmb3IoO2EuY3VycmVudFNhbXBsZVRpbWU8YS5ob2xkRW5kOylpZihhLmF0dGVudWF0aW9uKz0oYS5hdHRlbnVhdGlvblRhcmdldEdhaW4tYS5hdHRlbnVhdGlvbikqSSx0W29dKj1hLmF0dGVudWF0aW9uKkFlKHIpLGEuY3VycmVudEF0dGVudWF0aW9uRGI9MCxhLmN1cnJlbnRTYW1wbGVUaW1lKyssKytvPj10Lmxlbmd0aClyZXR1cm47YS5zdGF0ZSsrO2Nhc2UgMzpmb3IoO2EuY3VycmVudFNhbXBsZVRpbWU8YS5kZWNheUVuZDspaWYoYS5hdHRlbnVhdGlvbis9KGEuYXR0ZW51YXRpb25UYXJnZXRHYWluLWEuYXR0ZW51YXRpb24pKkksYS5jdXJyZW50QXR0ZW51YXRpb25EYj0oMS0oYS5kZWNheUVuZC1hLmN1cnJlbnRTYW1wbGVUaW1lKS9hLmRlY2F5RHVyYXRpb24pKmEuc3VzdGFpbkRiUmVsYXRpdmUsdFtvXSo9YS5hdHRlbnVhdGlvbipBZShhLmN1cnJlbnRBdHRlbnVhdGlvbkRiK3IpLGEuY3VycmVudFNhbXBsZVRpbWUrKywrK28+PXQubGVuZ3RoKXJldHVybjthLnN0YXRlKys7Y2FzZSA0OmZvcihhLmNhbkVuZE9uU2lsZW50U3VzdGFpbiYmYS5zdXN0YWluRGJSZWxhdGl2ZT49UW4mJihBLmZpbmlzaGVkPSEwKTs7KWlmKGEuYXR0ZW51YXRpb24rPShhLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbi1hLmF0dGVudWF0aW9uKSpJLHRbb10qPWEuYXR0ZW51YXRpb24qQWUoYS5zdXN0YWluRGJSZWxhdGl2ZStyKSxhLmN1cnJlbnRBdHRlbnVhdGlvbkRiPWEuc3VzdGFpbkRiUmVsYXRpdmUsYS5jdXJyZW50U2FtcGxlVGltZSsrLCsrbz49dC5sZW5ndGgpcmV0dXJufX19O2Z1bmN0aW9uIHZvKGUsQSl7c3dpdGNoKHRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnNbZV09QSxlKXtjYXNlIm1hc3RlclBhbiI6e2xldCB0PUE7dD10LzIrLjUsdGhpcy5wcml2YXRlUHJvcHMucGFuTGVmdD0xLXQsdGhpcy5wcml2YXRlUHJvcHMucGFuUmlnaHQ9dDticmVha31jYXNlIm1hc3RlckdhaW4iOmJyZWFrO2Nhc2Uidm9pY2VDYXAiOmJyZWFrO2Nhc2UiaW50ZXJwb2xhdGlvblR5cGUiOmJyZWFrO2Nhc2UibWlkaVN5c3RlbSI6YnJlYWs7Y2FzZSJtb25vcGhvbmljUmV0cmlnZ2VyTW9kZSI6YnJlYWs7Y2FzZSJ0cmFuc3Bvc2l0aW9uIjp7bGV0IHQ9QTt0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLnRyYW5zcG9zaXRpb249MDtmb3IobGV0IG4gb2YgdGhpcy5taWRpQ2hhbm5lbHMpbi50cmFuc3Bvc2VDaGFubmVsKHQpO3RoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMudHJhbnNwb3NpdGlvbj10fX10aGlzLmNhbGxFdmVudCgibWFzdGVyUGFyYW1ldGVyQ2hhbmdlIix7cGFyYW1ldGVyOmUsdmFsdWU6QX0pfWZ1bmN0aW9uIExvKGUpe3JldHVybiB0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzW2VdfWZ1bmN0aW9uIE5vKCl7cmV0dXJuey4uLnRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnN9fWZ1bmN0aW9uIE1lKGUsQSl7cmV0dXJuKGU+PkEmMSk+MH1mdW5jdGlvbiB1bihlKXtyZXR1cm4gZT8xOjB9dmFyIE5BPTE2Mzg0LFB0PU9iamVjdC5rZXlzKFFBKS5sZW5ndGgsaWE9NCxjZT1uZXcgRmxvYXQzMkFycmF5KE5BKzEpLHZlPW5ldyBGbG9hdDMyQXJyYXkoTkErMSk7Y2VbMF09MDtjZVtjZS5sZW5ndGgtMV09MTt2ZVswXT0wO3ZlW3ZlLmxlbmd0aC0xXT0xO2ZvcihsZXQgZT0xO2U8TkEtMTtlKyspe2xldCBBPS0uNDE2NjY2NjY2NjY2NjY2NypNYXRoLmxvZyhlLyhjZS5sZW5ndGgtMSkpL01hdGguTE4xMDt2ZVtlXT0xLUEsY2VbY2UubGVuZ3RoLTEtZV09QX1mdW5jdGlvbiBJYShlLEEsdCl7bGV0IG49ISEoZSYyKTtzd2l0Y2goISEoZSYxKSYmKHQ9MS10KSxBKXtjYXNlIFFBLmxpbmVhcjpyZXR1cm4gbj90KjItMTp0O2Nhc2UgUUEuc3dpdGNoOnJldHVybiB0PXQ+LjU/MTowLG4/dCoyLTE6dDtjYXNlIFFBLmNvbmNhdmU6cmV0dXJuIG4/KHQ9dCoyLTEsdDwwPy1jZVt+fih0Ki1OQSldOmNlW35+KHQqTkEpXSk6Y2Vbfn4odCpOQSldO2Nhc2UgUUEuY29udmV4OnJldHVybiBuPyh0PXQqMi0xLHQ8MD8tdmVbfn4odCotTkEpXTp2ZVt+fih0Kk5BKV0pOnZlW35+KHQqTkEpXX19dmFyIFhBPWNsYXNzIFRue2lzQmlwb2xhcjtpc05lZ2F0aXZlO2luZGV4O2lzQ0M7Y3VydmVUeXBlO2NvbnN0cnVjdG9yKEE9ai5ub0NvbnRyb2xsZXIsdD1RQS5saW5lYXIsbj0hMSxzPSExLGE9ITEpe3RoaXMuaXNCaXBvbGFyPXMsdGhpcy5pc05lZ2F0aXZlPWEsdGhpcy5pbmRleD1BLHRoaXMuaXNDQz1uLHRoaXMuY3VydmVUeXBlPXR9Z2V0IHNvdXJjZU5hbWUoKXtyZXR1cm4gdGhpcy5pc0NDP09iamVjdC5rZXlzKFMpLmZpbmQoQT0+U1tBXT09PXRoaXMuaW5kZXgpPz90aGlzLmluZGV4LnRvU3RyaW5nKCk6T2JqZWN0LmtleXMoaikuZmluZChBPT5qW0FdPT09dGhpcy5pbmRleCk/P3RoaXMuaW5kZXgudG9TdHJpbmcoKX1nZXQgY3VydmVUeXBlTmFtZSgpe3JldHVybiBPYmplY3Qua2V5cyhRQSkuZmluZChBPT5RQVtBXT09PXRoaXMuY3VydmVUeXBlKT8/dGhpcy5jdXJ2ZVR5cGUudG9TdHJpbmcoKX1zdGF0aWMgZnJvbVNvdXJjZUVudW0oQSl7bGV0IHQ9TWUoQSw5KSxuPU1lKEEsOCkscz1NZShBLDcpLGE9QSYxMjcscj1BPj4xMCYzO3JldHVybiBuZXcgVG4oYSxyLHMsdCxuKX1zdGF0aWMgY29weUZyb20oQSl7cmV0dXJuIG5ldyBUbihBLmluZGV4LEEuY3VydmVUeXBlLEEuaXNDQyxBLmlzQmlwb2xhcixBLmlzTmVnYXRpdmUpfXRvU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy5zb3VyY2VOYW1lfSAke3RoaXMuY3VydmVUeXBlTmFtZX0gJHt0aGlzLmlzQmlwb2xhcj8iYmlwb2xhciI6InVuaXBvbGFyIn0gJHt0aGlzLmlzTmVnYXRpdmU/Im5lZ2F0aXZlIjoicG9zaXRpdmUifWB9dG9Tb3VyY2VFbnVtKCl7cmV0dXJuIHRoaXMuY3VydmVUeXBlPDwxMHx1bih0aGlzLmlzQmlwb2xhcik8PDl8dW4odGhpcy5pc05lZ2F0aXZlKTw8OHx1bih0aGlzLmlzQ0MpPDw3fHRoaXMuaW5kZXh9aXNJZGVudGljYWwoQSl7cmV0dXJuIHRoaXMuaW5kZXg9PT1BLmluZGV4JiZ0aGlzLmlzTmVnYXRpdmU9PT1BLmlzTmVnYXRpdmUmJnRoaXMuaXNDQz09PUEuaXNDQyYmdGhpcy5pc0JpcG9sYXI9PT1BLmlzQmlwb2xhciYmdGhpcy5jdXJ2ZVR5cGU9PT1BLmN1cnZlVHlwZX1nZXRWYWx1ZShBLHQpe2xldCBuO2lmKHRoaXMuaXNDQyluPUFbdGhpcy5pbmRleF07ZWxzZSBzd2l0Y2godGhpcy5pbmRleCl7Y2FzZSBqLm5vQ29udHJvbGxlcjpuPTE2MzgzO2JyZWFrO2Nhc2Ugai5ub3RlT25LZXlOdW06bj10Lm1pZGlOb3RlPDw3O2JyZWFrO2Nhc2Ugai5ub3RlT25WZWxvY2l0eTpuPXQudmVsb2NpdHk8PDc7YnJlYWs7Y2FzZSBqLnBvbHlQcmVzc3VyZTpuPXQucHJlc3N1cmU8PDc7YnJlYWs7ZGVmYXVsdDpuPUFbdGhpcy5pbmRleCttQV07YnJlYWt9bGV0IHM9KHRoaXMuaXNCaXBvbGFyPzI6MCl8KHRoaXMuaXNOZWdhdGl2ZT8xOjApO3JldHVybiBnYVtOQSoodGhpcy5jdXJ2ZVR5cGUqUHQrcykrbl19fSxnYT1uZXcgRmxvYXQzMkFycmF5KE5BKmlhKlB0KTtmb3IobGV0IGU9MDtlPFB0O2UrKylmb3IobGV0IEE9MDtBPGlhO0ErKyl7bGV0IHQ9TkEqKGUqUHQrQSk7Zm9yKGxldCBuPTA7bjxOQTtuKyspZ2FbdCtuXT1JYShBLGUsbi9OQSl9dmFyIG1lPTEwO2Z1bmN0aW9uIGdlKGUsQSx0LG4scyl7cmV0dXJuIG5ldyBYQShzLGUsbixBLHQpLnRvU291cmNlRW51bSgpfXZhciBjYT1nZShRQS5saW5lYXIsITAsITEsITAsUy5maWx0ZXJSZXNvbmFuY2UpLEVBPWNsYXNzIHhue2N1cnJlbnRWYWx1ZT0wO2Rlc3RpbmF0aW9uPWkuaW5pdGlhbEF0dGVudWF0aW9uO3RyYW5zZm9ybUFtb3VudD0wO3RyYW5zZm9ybVR5cGU9MDtpc0VmZmVjdE1vZHVsYXRvcj0hMTtpc0RlZmF1bHRSZXNvbmFudE1vZHVsYXRvcj0hMTtwcmltYXJ5U291cmNlO3NlY29uZGFyeVNvdXJjZTtjb25zdHJ1Y3RvcihBPW5ldyBYQSx0PW5ldyBYQSxuPWkuSU5WQUxJRCxzPTAsYT0wLHI9ITEsST0hMSl7dGhpcy5wcmltYXJ5U291cmNlPUEsdGhpcy5zZWNvbmRhcnlTb3VyY2U9dCx0aGlzLmRlc3RpbmF0aW9uPW4sdGhpcy50cmFuc2Zvcm1BbW91bnQ9cyx0aGlzLnRyYW5zZm9ybVR5cGU9YSx0aGlzLmlzRWZmZWN0TW9kdWxhdG9yPXIsdGhpcy5pc0RlZmF1bHRSZXNvbmFudE1vZHVsYXRvcj1JfWdldCBkZXN0aW5hdGlvbk5hbWUoKXtyZXR1cm4gT2JqZWN0LmtleXMoaSkuZmluZChBPT5pW0FdPT09dGhpcy5kZXN0aW5hdGlvbil9c3RhdGljIGlzSWRlbnRpY2FsKEEsdCxuPSExKXtyZXR1cm4gQS5wcmltYXJ5U291cmNlLmlzSWRlbnRpY2FsKHQucHJpbWFyeVNvdXJjZSkmJkEuc2Vjb25kYXJ5U291cmNlLmlzSWRlbnRpY2FsKHQuc2Vjb25kYXJ5U291cmNlKSYmQS5kZXN0aW5hdGlvbj09PXQuZGVzdGluYXRpb24mJkEudHJhbnNmb3JtVHlwZT09PXQudHJhbnNmb3JtVHlwZSYmKCFufHxBLnRyYW5zZm9ybUFtb3VudD09PXQudHJhbnNmb3JtQW1vdW50KX1zdGF0aWMgY29weUZyb20oQSl7cmV0dXJuIG5ldyB4bihYQS5jb3B5RnJvbShBLnByaW1hcnlTb3VyY2UpLFhBLmNvcHlGcm9tKEEuc2Vjb25kYXJ5U291cmNlKSxBLmRlc3RpbmF0aW9uLEEudHJhbnNmb3JtQW1vdW50LEEudHJhbnNmb3JtVHlwZSxBLmlzRWZmZWN0TW9kdWxhdG9yLEEuaXNEZWZhdWx0UmVzb25hbnRNb2R1bGF0b3IpfXRvU3RyaW5nKCl7cmV0dXJuYFNvdXJjZTogJHt0aGlzLnByaW1hcnlTb3VyY2UudG9TdHJpbmcoKX0KU2Vjb25kYXJ5IHNvdXJjZTogJHt0aGlzLnNlY29uZGFyeVNvdXJjZS50b1N0cmluZygpfQp0bzogJHt0aGlzLmRlc3RpbmF0aW9uTmFtZX0KYW1vdW50OiAke3RoaXMudHJhbnNmb3JtQW1vdW50fWArKHRoaXMudHJhbnNmb3JtVHlwZT09PTI/ImFic29sdXRlIHZhbHVlIjoiIil9d3JpdGUoQSx0KXtKKEEsdGhpcy5wcmltYXJ5U291cmNlLnRvU291cmNlRW51bSgpKSxKKEEsdGhpcy5kZXN0aW5hdGlvbiksSihBLHRoaXMudHJhbnNmb3JtQW1vdW50KSxKKEEsdGhpcy5zZWNvbmRhcnlTb3VyY2UudG9Tb3VyY2VFbnVtKCkpLEooQSx0aGlzLnRyYW5zZm9ybVR5cGUpLHQmJnQubW9kKyt9c3VtVHJhbnNmb3JtKEEpe2xldCB0PXhuLmNvcHlGcm9tKHRoaXMpO3JldHVybiB0LnRyYW5zZm9ybUFtb3VudCs9QS50cmFuc2Zvcm1BbW91bnQsdH19LHlBPWNsYXNzIGV4dGVuZHMgRUF7Y29uc3RydWN0b3IoZSxBLHQsbixzKXtsZXQgYT0oZT09PTIxOXx8ZT09PTIyMSkmJkE9PT0wJiYodD09PWkucmV2ZXJiRWZmZWN0c1NlbmR8fHQ9PT1pLmNob3J1c0VmZmVjdHNTZW5kKSxyPWU9PT1jYSYmQT09PTAmJnQ9PT1pLmluaXRpYWxGaWx0ZXJRO3N1cGVyKFhBLmZyb21Tb3VyY2VFbnVtKGUpLFhBLmZyb21Tb3VyY2VFbnVtKEEpLHQsbixzLGEsciksdGhpcy5kZXN0aW5hdGlvbj5tbyYmKHRoaXMuZGVzdGluYXRpb249aS5JTlZBTElEKX19LGZuPTk2MCxtbj1RQS5jb25jYXZlLFVvPVtuZXcgeUEoZ2UobW4sITEsITAsITEsai5ub3RlT25WZWxvY2l0eSksMCxpLmluaXRpYWxBdHRlbnVhdGlvbixmbiwwKSxuZXcgeUEoMTI5LDAsaS52aWJMZm9Ub1BpdGNoLDUwLDApLG5ldyB5QShnZShtbiwhMSwhMCwhMCxTLm1haW5Wb2x1bWUpLDAsaS5pbml0aWFsQXR0ZW51YXRpb24sZm4sMCksbmV3IHlBKDEzLDAsaS52aWJMZm9Ub1BpdGNoLDUwLDApLG5ldyB5QSg1MjYsMTYsaS5maW5lVHVuZSwxMjcwMCwwKSxuZXcgeUEoNjUwLDAsaS5wYW4sNTAwLDApLG5ldyB5QShnZShtbiwhMSwhMCwhMCxTLmV4cHJlc3Npb25Db250cm9sbGVyKSwwLGkuaW5pdGlhbEF0dGVudWF0aW9uLGZuLDApLG5ldyB5QSgyMTksMCxpLnJldmVyYkVmZmVjdHNTZW5kLDIwMCwwKSxuZXcgeUEoMjIxLDAsaS5jaG9ydXNFZmZlY3RzU2VuZCwyMDAsMCldLFRvPVtuZXcgeUEoZ2UoUUEubGluZWFyLCExLCExLCExLGoucG9seVByZXNzdXJlKSwwLGkudmliTGZvVG9QaXRjaCw1MCwwKSxuZXcgeUEoZ2UoUUEubGluZWFyLCExLCExLCEwLFMudHJlbW9sb0RlcHRoKSwwLGkubW9kTGZvVG9Wb2x1bWUsMjQsMCksbmV3IHlBKGdlKFFBLmNvbnZleCwhMCwhMSwhMCxTLmF0dGFja1RpbWUpLDAsaS5hdHRhY2tWb2xFbnYsNmUzLDApLG5ldyB5QShnZShRQS5saW5lYXIsITAsITEsITAsUy5yZWxlYXNlVGltZSksMCxpLnJlbGVhc2VWb2xFbnYsMzYwMCwwKSxuZXcgeUEoZ2UoUUEubGluZWFyLCEwLCExLCEwLFMuYnJpZ2h0bmVzcyksMCxpLmluaXRpYWxGaWx0ZXJGYyw2ZTMsMCksbmV3IHlBKGNhLDAsaS5pbml0aWFsRmlsdGVyUSwyNTAsMCldLEVhPVVvLmNvbmNhdChUbyksQ3Q9NCxGQT1jbGFzc3tnZW5lcmF0b3JUeXBlO2dlbmVyYXRvclZhbHVlPTA7Y29uc3RydWN0b3IoZSxBLHQ9ITApe2lmKHRoaXMuZ2VuZXJhdG9yVHlwZT1lLEE9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJObyB2YWx1ZSBwcm92aWRlZC4iKTtpZih0aGlzLmdlbmVyYXRvclZhbHVlPU1hdGgucm91bmQoQSksdCl7bGV0IG49eFtlXTtuIT09dm9pZCAwJiYodGhpcy5nZW5lcmF0b3JWYWx1ZT1NYXRoLm1heChuLm1pbixNYXRoLm1pbihuLm1heCx0aGlzLmdlbmVyYXRvclZhbHVlKSkpfX13cml0ZShlLEEpe0ooZSx0aGlzLmdlbmVyYXRvclR5cGUpLEooZSx0aGlzLmdlbmVyYXRvclZhbHVlKSxBLmdlbisrfXRvU3RyaW5nKCl7cmV0dXJuYCR7T2JqZWN0LmtleXMoaSkuZmluZChlPT5pW2VdPT09dGhpcy5nZW5lcmF0b3JUeXBlKX06ICR7dGhpcy5nZW5lcmF0b3JWYWx1ZX1gfX07ZnVuY3Rpb24geG8oZSxBLHQpe2xldCBuPXhbZV18fHttaW46MCxtYXg6MzI3NjgsZGVmOjB9LHM9QS5maW5kKG89Pm8uZ2VuZXJhdG9yVHlwZT09PWUpLGE9MDtzJiYoYT1zLmdlbmVyYXRvclZhbHVlKTtsZXQgcj10LmZpbmQobz0+by5nZW5lcmF0b3JUeXBlPT09ZSksST1uLmRlZjtyZXR1cm4gciYmKEk9ci5nZW5lcmF0b3JWYWx1ZSksTWF0aC5tYXgoLTMyNzY3LE1hdGgubWluKDMyNzY3LEkrYSkpfXZhciBKdD00LFZ0PWNsYXNze3ZlbFJhbmdlPXttaW46LTEsbWF4OjEyN307a2V5UmFuZ2U9e21pbjotMSxtYXg6MTI3fTtnZW5lcmF0b3JzPVtdO21vZHVsYXRvcnM9W107Z2V0IGhhc0tleVJhbmdlKCl7cmV0dXJuIHRoaXMua2V5UmFuZ2UubWluIT09LTF9Z2V0IGhhc1ZlbFJhbmdlKCl7cmV0dXJuIHRoaXMudmVsUmFuZ2UubWluIT09LTF9Z2V0IGZpbmVUdW5pbmcoKXtsZXQgZT10aGlzLmdldEdlbmVyYXRvcihpLmNvYXJzZVR1bmUsMCksQT10aGlzLmdldEdlbmVyYXRvcihpLmZpbmVUdW5lLDApO3JldHVybiBlKjEwMCtBfXNldCBmaW5lVHVuaW5nKGUpe2xldCBBPU1hdGgudHJ1bmMoZS8xMDApLHQ9ZSUxMDA7dGhpcy5zZXRHZW5lcmF0b3IoaS5jb2Fyc2VUdW5lLEEpLHRoaXMuc2V0R2VuZXJhdG9yKGkuZmluZVR1bmUsdCl9YWRkVG9HZW5lcmF0b3IoZSxBLHQ9ITApe2xldCBuPXRoaXMuZ2V0R2VuZXJhdG9yKGUseFtlXS5kZWYpO3RoaXMuc2V0R2VuZXJhdG9yKGUsQStuLHQpfXNldEdlbmVyYXRvcihlLEEsdD0hMCl7c3dpdGNoKGUpe2Nhc2UgaS5zYW1wbGVJRDp0aHJvdyBuZXcgRXJyb3IoIlVzZSBzZXRTYW1wbGUoKSIpO2Nhc2UgaS5pbnN0cnVtZW50OnRocm93IG5ldyBFcnJvcigiVXNlIHNldEluc3RydW1lbnQoKSIpO2Nhc2UgaS52ZWxSYW5nZTpjYXNlIGkua2V5UmFuZ2U6dGhyb3cgbmV3IEVycm9yKCJTZXQgdGhlIHJhbmdlIG1hbnVhbGx5Iil9aWYoQT09PW51bGwpe3RoaXMuZ2VuZXJhdG9ycz10aGlzLmdlbmVyYXRvcnMuZmlsdGVyKHM9PnMuZ2VuZXJhdG9yVHlwZSE9PWUpO3JldHVybn1sZXQgbj10aGlzLmdlbmVyYXRvcnMuZmluZEluZGV4KHM9PnMuZ2VuZXJhdG9yVHlwZT09PWUpO24+PTA/dGhpcy5nZW5lcmF0b3JzW25dPW5ldyBGQShlLEEsdCk6dGhpcy5hZGRHZW5lcmF0b3JzKG5ldyBGQShlLEEsdCkpfWFkZEdlbmVyYXRvcnMoLi4uZSl7ZS5mb3JFYWNoKEE9Pntzd2l0Y2goQS5nZW5lcmF0b3JUeXBlKXtkZWZhdWx0OnRoaXMuZ2VuZXJhdG9ycy5wdXNoKEEpO2JyZWFrO2Nhc2UgaS5zYW1wbGVJRDpjYXNlIGkuaW5zdHJ1bWVudDpicmVhaztjYXNlIGkudmVsUmFuZ2U6dGhpcy52ZWxSYW5nZS5taW49QS5nZW5lcmF0b3JWYWx1ZSYxMjcsdGhpcy52ZWxSYW5nZS5tYXg9QS5nZW5lcmF0b3JWYWx1ZT4+OCYxMjc7YnJlYWs7Y2FzZSBpLmtleVJhbmdlOnRoaXMua2V5UmFuZ2UubWluPUEuZ2VuZXJhdG9yVmFsdWUmMTI3LHRoaXMua2V5UmFuZ2UubWF4PUEuZ2VuZXJhdG9yVmFsdWU+PjgmMTI3fX0pfWFkZE1vZHVsYXRvcnMoLi4uZSl7dGhpcy5tb2R1bGF0b3JzLnB1c2goLi4uZSl9Z2V0R2VuZXJhdG9yKGUsQSl7cmV0dXJuIHRoaXMuZ2VuZXJhdG9ycy5maW5kKHQ9PnQuZ2VuZXJhdG9yVHlwZT09PWUpPy5nZW5lcmF0b3JWYWx1ZT8/QX1jb3B5RnJvbShlKXt0aGlzLmdlbmVyYXRvcnM9ZS5nZW5lcmF0b3JzLm1hcChBPT5uZXcgRkEoQS5nZW5lcmF0b3JUeXBlLEEuZ2VuZXJhdG9yVmFsdWUsITEpKSx0aGlzLm1vZHVsYXRvcnM9ZS5tb2R1bGF0b3JzLm1hcChFQS5jb3B5RnJvbS5iaW5kKEVBKSksdGhpcy52ZWxSYW5nZT17Li4uZS52ZWxSYW5nZX0sdGhpcy5rZXlSYW5nZT17Li4uZS5rZXlSYW5nZX19Z2V0R2VuQ291bnQoKXtsZXQgZT10aGlzLmdlbmVyYXRvcnMuZmlsdGVyKEE9PkEuZ2VuZXJhdG9yVHlwZSE9PWkuc2FtcGxlSUQmJkEuZ2VuZXJhdG9yVHlwZSE9PWkuaW5zdHJ1bWVudCYmQS5nZW5lcmF0b3JUeXBlIT09aS5rZXlSYW5nZSYmQS5nZW5lcmF0b3JUeXBlIT09aS52ZWxSYW5nZSkubGVuZ3RoO3JldHVybiB0aGlzLmhhc1ZlbFJhbmdlJiZlKyssdGhpcy5oYXNLZXlSYW5nZSYmZSsrLGV9d3JpdGUoZSxBLHQsbixzKXtsZXQgYT1uLmdlbixyPW4ubW9kO0oodC5wZHRhLGEmNjU1MzUpLEoodC5wZHRhLHImNjU1MzUpLEoodC54ZHRhLGE+PjE2KSxKKHQueGR0YSxyPj4xNiksbi5iYWcrKyx0aGlzLmdldFdyaXRlR2VuZXJhdG9ycyhzKS5mb3JFYWNoKG89Pm8ud3JpdGUoZSxuKSksdGhpcy5tb2R1bGF0b3JzLmZvckVhY2gobz0+by53cml0ZShBLG4pKX1nZXRXcml0ZUdlbmVyYXRvcnMoZSl7bGV0IEE9dGhpcy5nZW5lcmF0b3JzLmZpbHRlcih0PT50LmdlbmVyYXRvclR5cGUhPT1pLnNhbXBsZUlEJiZ0LmdlbmVyYXRvclR5cGUhPT1pLmluc3RydW1lbnQmJnQuZ2VuZXJhdG9yVHlwZSE9PWkua2V5UmFuZ2UmJnQuZ2VuZXJhdG9yVHlwZSE9PWkudmVsUmFuZ2UpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiTm8gYmFuayBwcm92aWRlZCEgIik7cmV0dXJuIHRoaXMuaGFzVmVsUmFuZ2UmJkEudW5zaGlmdChuZXcgRkEoaS52ZWxSYW5nZSx0aGlzLnZlbFJhbmdlLm1heDw8OHxNYXRoLm1heCh0aGlzLnZlbFJhbmdlLm1pbiwwKSwhMSkpLHRoaXMuaGFzS2V5UmFuZ2UmJkEudW5zaGlmdChuZXcgRkEoaS5rZXlSYW5nZSx0aGlzLmtleVJhbmdlLm1heDw8OHxNYXRoLm1heCh0aGlzLmtleVJhbmdlLm1pbiwwKSwhMSkpLEF9fSxCYT1jbGFzcyBleHRlbmRzIFZ0e30sQ2E9Y2xhc3MgZXh0ZW5kcyBWdHtwYXJlbnRQcmVzZXQ7Y29uc3RydWN0b3IoZSxBKXtzdXBlcigpLHRoaXMucGFyZW50UHJlc2V0PWUsdGhpcy5faW5zdHJ1bWVudD1BLHRoaXMuX2luc3RydW1lbnQubGlua1RvKHRoaXMucGFyZW50UHJlc2V0KX1faW5zdHJ1bWVudDtnZXQgaW5zdHJ1bWVudCgpe3JldHVybiB0aGlzLl9pbnN0cnVtZW50fXNldCBpbnN0cnVtZW50KGUpe3RoaXMuX2luc3RydW1lbnQmJnRoaXMuX2luc3RydW1lbnQudW5saW5rRnJvbSh0aGlzLnBhcmVudFByZXNldCksdGhpcy5faW5zdHJ1bWVudD1lLHRoaXMuX2luc3RydW1lbnQubGlua1RvKHRoaXMucGFyZW50UHJlc2V0KX1nZXRHZW5Db3VudCgpe3JldHVybiBzdXBlci5nZXRHZW5Db3VudCgpKzF9Z2V0V3JpdGVHZW5lcmF0b3JzKGUpe2xldCBBPXN1cGVyLmdldFdyaXRlR2VuZXJhdG9ycyhlKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkluc3RydW1lbnQgSUQgY2Fubm90IGJlIGRldGVybWluZWQgd2l0aG91dCB0aGUgc291bmQgYmFuayBpdHNlbGYuIik7bGV0IHQ9ZS5pbnN0cnVtZW50cy5pbmRleE9mKHRoaXMuaW5zdHJ1bWVudCk7aWYodDwwKXRocm93IG5ldyBFcnJvcihgJHt0aGlzLmluc3RydW1lbnQubmFtZX0gZG9lcyBub3QgZXhpc3QgaW4gJHtlLnNvdW5kQmFua0luZm8ubmFtZX0hIENhbm5vdCB3cml0ZSBpbnN0cnVtZW50IGdlbmVyYXRvci5gKTtyZXR1cm4gQS5wdXNoKG5ldyBGQShpLmluc3RydW1lbnQsdCwhMSkpLEF9fSxoYT1jbGFzcyBleHRlbmRzIFZ0e3BhcmVudEluc3RydW1lbnQ7dXNlQ291bnQ7Y29uc3RydWN0b3IoZSxBKXtzdXBlcigpLHRoaXMucGFyZW50SW5zdHJ1bWVudD1lLHRoaXMuX3NhbXBsZT1BLEEubGlua1RvKHRoaXMucGFyZW50SW5zdHJ1bWVudCksdGhpcy51c2VDb3VudD1lLnVzZUNvdW50fV9zYW1wbGU7Z2V0IHNhbXBsZSgpe3JldHVybiB0aGlzLl9zYW1wbGV9c2V0IHNhbXBsZShlKXt0aGlzLl9zYW1wbGUmJnRoaXMuX3NhbXBsZS51bmxpbmtGcm9tKHRoaXMucGFyZW50SW5zdHJ1bWVudCksdGhpcy5fc2FtcGxlPWUsZS5saW5rVG8odGhpcy5wYXJlbnRJbnN0cnVtZW50KX1nZXRHZW5Db3VudCgpe3JldHVybiBzdXBlci5nZXRHZW5Db3VudCgpKzF9Z2V0V3JpdGVHZW5lcmF0b3JzKGUpe2xldCBBPXN1cGVyLmdldFdyaXRlR2VuZXJhdG9ycyhlKSx0PWUuc2FtcGxlcy5pbmRleE9mKHRoaXMuc2FtcGxlKTtpZih0PDApdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuc2FtcGxlLm5hbWV9IGRvZXMgbm90IGV4aXN0IGluICR7ZS5zb3VuZEJhbmtJbmZvLm5hbWV9ISBDYW5ub3Qgd3JpdGUgc2FtcGxlSUQgZ2VuZXJhdG9yLmApO3JldHVybiBBLnB1c2gobmV3IEZBKGkuc2FtcGxlSUQsdCwhMSkpLEF9fSxsYT0yMixIbz1uZXcgU2V0KFtpLnZlbFJhbmdlLGkua2V5UmFuZ2UsaS5pbnN0cnVtZW50LGkuc2FtcGxlSUQsaS5leGNsdXNpdmVDbGFzcyxpLmVuZE9wZXIsaS5zYW1wbGVNb2RlcyxpLnN0YXJ0bG9vcEFkZHJzT2Zmc2V0LGkuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaS5lbmRsb29wQWRkcnNPZmZzZXQsaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaS5zdGFydEFkZHJzT2Zmc2V0LGkuc3RhcnRBZGRyc0NvYXJzZU9mZnNldCxpLmVuZEFkZHJPZmZzZXQsaS5lbmRBZGRyc0NvYXJzZU9mZnNldCxpLmluaXRpYWxBdHRlbnVhdGlvbixpLmZpbmVUdW5lLGkuY29hcnNlVHVuZSxpLmtleU51bVRvVm9sRW52SG9sZCxpLmtleU51bVRvVm9sRW52RGVjYXksaS5rZXlOdW1Ub01vZEVudkhvbGQsaS5rZXlOdW1Ub01vZEVudkRlY2F5XSksZHQ9Y2xhc3N7bmFtZT0iIjt6b25lcz1bXTtnbG9iYWxab25lPW5ldyBCYTtsaW5rZWRUbz1bXTtnZXQgdXNlQ291bnQoKXtyZXR1cm4gdGhpcy5saW5rZWRUby5sZW5ndGh9Y3JlYXRlWm9uZShlKXtsZXQgQT1uZXcgaGEodGhpcyxlKTtyZXR1cm4gdGhpcy56b25lcy5wdXNoKEEpLEF9bGlua1RvKGUpe3RoaXMubGlua2VkVG8ucHVzaChlKSx0aGlzLnpvbmVzLmZvckVhY2goQT0+QS51c2VDb3VudCsrKX11bmxpbmtGcm9tKGUpe2xldCBBPXRoaXMubGlua2VkVG8uaW5kZXhPZihlKTtpZihBPDApe3NBKGBDYW5ub3QgdW5saW5rICR7ZS5uYW1lfSBmcm9tICR7dGhpcy5uYW1lfTogbm90IGxpbmtlZC5gKTtyZXR1cm59dGhpcy5saW5rZWRUby5zcGxpY2UoQSwxKSx0aGlzLnpvbmVzLmZvckVhY2godD0+dC51c2VDb3VudC0tKX1kZWxldGVVbnVzZWRab25lcygpe3RoaXMuem9uZXM9dGhpcy56b25lcy5maWx0ZXIoZT0+e2xldCBBPWUudXNlQ291bnQ+MDtyZXR1cm4gQXx8ZS5zYW1wbGUudW5saW5rRnJvbSh0aGlzKSxBfSl9ZGVsZXRlKCl7aWYodGhpcy51c2VDb3VudD4wKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRlbGV0ZSBhbiBpbnN0cnVtZW50IHRoYXQgaXMgdXNlZCBieTogJHt0aGlzLmxpbmtlZFRvLm1hcChlPT5lLm5hbWUpLnRvU3RyaW5nKCl9LmApO3RoaXMuem9uZXMuZm9yRWFjaChlPT5lLnNhbXBsZS51bmxpbmtGcm9tKHRoaXMpKX1kZWxldGVab25lKGUsQT0hMSl7bGV0IHQ9dGhpcy56b25lc1tlXTtyZXR1cm4gdC51c2VDb3VudC09MSx0LnVzZUNvdW50PDF8fEE/KHQuc2FtcGxlLnVubGlua0Zyb20odGhpcyksdGhpcy56b25lcy5zcGxpY2UoZSwxKSwhMCk6ITF9Z2xvYmFsaXplKCl7bGV0IGU9dGhpcy5nbG9iYWxab25lO2ZvcihsZXQgbj0wO248NTg7bisrKXtpZihIby5oYXMobikpY29udGludWU7bj1uO2xldCBzPXt9LGE9eFtuXT8uZGVmfHwwO3NbYV09MDtmb3IobGV0IHIgb2YgdGhpcy56b25lcyl7bGV0IEk9ci5nZXRHZW5lcmF0b3Iobix2b2lkIDApO0khPT12b2lkIDA/c1tJXT09PXZvaWQgMD9zW0ldPTE6c1tJXSsrOnNbYV0rKztsZXQgbztzd2l0Y2gobil7ZGVmYXVsdDpjb250aW51ZTtjYXNlIGkuZGVjYXlWb2xFbnY6bz1pLmtleU51bVRvVm9sRW52RGVjYXk7YnJlYWs7Y2FzZSBpLmhvbGRWb2xFbnY6bz1pLmtleU51bVRvVm9sRW52SG9sZDticmVhaztjYXNlIGkuZGVjYXlNb2RFbnY6bz1pLmtleU51bVRvTW9kRW52RGVjYXk7YnJlYWs7Y2FzZSBpLmhvbGRNb2RFbnY6bz1pLmtleU51bVRvTW9kRW52SG9sZH1pZihyLmdldEdlbmVyYXRvcihvLHZvaWQgMCkhPT12b2lkIDApe3M9e307YnJlYWt9fWlmKE9iamVjdC5rZXlzKHMpLmxlbmd0aD4wKXtsZXQgST1PYmplY3QuZW50cmllcyhzKS5yZWR1Y2UoKGcsQik9PmdbMV08QlsxXT9COmcsWyIwIiwwXSksbz1wYXJzZUludChJWzBdKTtvIT09YSYmZS5zZXRHZW5lcmF0b3IobixvLCExKSx0aGlzLnpvbmVzLmZvckVhY2goZz0+e2xldCBCPWcuZ2V0R2VuZXJhdG9yKG4sdm9pZCAwKTtCIT09dm9pZCAwP0I9PT1vJiZnLnNldEdlbmVyYXRvcihuLG51bGwpOm8hPT1hJiZnLnNldEdlbmVyYXRvcihuLGEpfSl9fWxldCB0PXRoaXMuem9uZXNbMF0ubW9kdWxhdG9ycy5tYXAobj0+RUEuY29weUZyb20obikpO2ZvcihsZXQgbiBvZiB0KXtsZXQgcz0hMDtmb3IobGV0IGEgb2YgdGhpcy56b25lcyl7aWYoIXMpY29udGludWU7YS5tb2R1bGF0b3JzLmZpbmQoST0+RUEuaXNJZGVudGljYWwoSSxuKSl8fChzPSExKX1pZihzKXtlLmFkZE1vZHVsYXRvcnMoRUEuY29weUZyb20obikpO2ZvcihsZXQgYSBvZiB0aGlzLnpvbmVzKXtsZXQgcj1hLm1vZHVsYXRvcnMuZmluZChJPT5FQS5pc0lkZW50aWNhbChJLG4pKTtyJiZyLnRyYW5zZm9ybUFtb3VudD09PW4udHJhbnNmb3JtQW1vdW50JiZhLm1vZHVsYXRvcnMuc3BsaWNlKGEubW9kdWxhdG9ycy5pbmRleE9mKHIpLDEpfX19fWdldFNpemUoKXtsZXQgZT10aGlzLnpvbmVzLnJlZHVjZSgodCxuKT0+bi5tb2R1bGF0b3JzLmxlbmd0aCt0LDApK3RoaXMuZ2xvYmFsWm9uZS5tb2R1bGF0b3JzLmxlbmd0aCxBPXRoaXMuem9uZXMucmVkdWNlKCh0LG4pPT5uLmdldEdlbkNvdW50KCkrdCwwKSt0aGlzLmdsb2JhbFpvbmUuZ2V0R2VuQ291bnQoKTtyZXR1cm57bW9kOmUqbWUsYmFnOih0aGlzLnpvbmVzLmxlbmd0aCsxKSpKdCxnZW46QSpDdCxoZHI6bGF9fXdyaXRlKGUsQSx0LG4scyxhKXtwKGAlY1dyaXRpbmcgJHt0aGlzLm5hbWV9Li4uYCxjLmluZm8pLGtBKG4ucGR0YSx0aGlzLm5hbWUuc3Vic3RyaW5nKDAsMjApLDIwKSxrQShuLnhkdGEsdGhpcy5uYW1lLnN1YnN0cmluZygyMCksMjApLEoobi5wZHRhLHMuaGRyJjY1NTM1KSxKKG4ueGR0YSxzLmhkcj4+PjE2KSxzLmhkcis9dGhpcy56b25lcy5sZW5ndGgrMSx0aGlzLmdsb2JhbFpvbmUud3JpdGUoZSxBLHQscyxhKSx0aGlzLnpvbmVzLmZvckVhY2gocj0+ci53cml0ZShlLEEsdCxzLGEpKX19LGRhPTM4LHBlPWNsYXNze3BhcmVudFNvdW5kQmFuaztuYW1lPSIiO3Byb2dyYW09MDtiYW5rTVNCPTA7YmFua0xTQj0wO2lzR01HU0RydW09ITE7em9uZXM9W107Z2xvYmFsWm9uZTtsaWJyYXJ5PTA7Z2VucmU9MDttb3JwaG9sb2d5PTA7Y29uc3RydWN0b3IoZSxBPW5ldyBCYSl7dGhpcy5wYXJlbnRTb3VuZEJhbms9ZSx0aGlzLmdsb2JhbFpvbmU9QX1nZXQgaXNYR0RydW1zKCl7cmV0dXJuIHRoaXMucGFyZW50U291bmRCYW5rLmlzWEdCYW5rJiZmQS5pc1hHRHJ1bXModGhpcy5iYW5rTVNCKX1nZXQgaXNBbnlEcnVtcygpe2xldCBlPXRoaXMucGFyZW50U291bmRCYW5rLmlzWEdCYW5rO3JldHVybiB0aGlzLmlzR01HU0RydW18fGUmJmZBLmlzWEdEcnVtcyh0aGlzLmJhbmtNU0IpJiZ0aGlzLmJhbmtNU0IhPT0xMjZ9ZGVsZXRlKCl7dGhpcy56b25lcy5mb3JFYWNoKGU9PmUuaW5zdHJ1bWVudD8udW5saW5rRnJvbSh0aGlzKSl9ZGVsZXRlWm9uZShlKXt0aGlzLnpvbmVzW2VdPy5pbnN0cnVtZW50Py51bmxpbmtGcm9tKHRoaXMpLHRoaXMuem9uZXMuc3BsaWNlKGUsMSl9Y3JlYXRlWm9uZShlKXtsZXQgQT1uZXcgQ2EodGhpcyxlKTtyZXR1cm4gdGhpcy56b25lcy5wdXNoKEEpLEF9cHJlbG9hZChlLEEpe2ZvcihsZXQgdD1lO3Q8QSsxO3QrKylmb3IobGV0IG49MDtuPDEyODtuKyspdGhpcy5nZXRTeW50aGVzaXNEYXRhKHQsbikuZm9yRWFjaChzPT57cy5zYW1wbGUuZ2V0QXVkaW9EYXRhKCl9KX1tYXRjaGVzKGUpe3JldHVybiB0ZS5tYXRjaGVzKHRoaXMsZSl9Z2V0U2l6ZSgpe2xldCBlPXRoaXMuem9uZXMucmVkdWNlKCh0LG4pPT5uLm1vZHVsYXRvcnMubGVuZ3RoK3QsMCkrdGhpcy5nbG9iYWxab25lLm1vZHVsYXRvcnMubGVuZ3RoLEE9dGhpcy56b25lcy5yZWR1Y2UoKHQsbik9Pm4uZ2V0R2VuQ291bnQoKSt0LDApK3RoaXMuZ2xvYmFsWm9uZS5nZXRHZW5Db3VudCgpO3JldHVybnttb2Q6ZSptZSxiYWc6KHRoaXMuem9uZXMubGVuZ3RoKzEpKkp0LGdlbjpBKkN0LGhkcjpkYX19Z2V0U3ludGhlc2lzRGF0YShlLEEpe2lmKHRoaXMuem9uZXMubGVuZ3RoPDEpcmV0dXJuW107ZnVuY3Rpb24gdChkLGgpe3JldHVybiBoPj1kLm1pbiYmaDw9ZC5tYXh9ZnVuY3Rpb24gbihkLGgpe2QucHVzaCguLi5oLmZpbHRlcihDPT4hZC5maW5kKFE9PlEuZ2VuZXJhdG9yVHlwZT09PUMuZ2VuZXJhdG9yVHlwZSkpKX1mdW5jdGlvbiBzKGQsaCl7ZC5wdXNoKC4uLmguZmlsdGVyKEM9PiFkLmZpbmQoUT0+RUEuaXNJZGVudGljYWwoQyxRKSkpKX1sZXQgYT1bXSxyPVsuLi50aGlzLmdsb2JhbFpvbmUuZ2VuZXJhdG9yc10sST1bLi4udGhpcy5nbG9iYWxab25lLm1vZHVsYXRvcnNdLG89dGhpcy5nbG9iYWxab25lLmtleVJhbmdlLGc9dGhpcy5nbG9iYWxab25lLnZlbFJhbmdlO3JldHVybiB0aGlzLnpvbmVzLmZpbHRlcihkPT50KGQuaGFzS2V5UmFuZ2U/ZC5rZXlSYW5nZTpvLGUpJiZ0KGQuaGFzVmVsUmFuZ2U/ZC52ZWxSYW5nZTpnLEEpKS5mb3JFYWNoKGQ9PntsZXQgaD1kLmluc3RydW1lbnQ7aWYoIWh8fGguem9uZXMubGVuZ3RoPDEpcmV0dXJuO2xldCBDPWQuZ2VuZXJhdG9ycyxRPWQubW9kdWxhdG9ycyxtPVsuLi5oLmdsb2JhbFpvbmUuZ2VuZXJhdG9yc10seT1bLi4uaC5nbG9iYWxab25lLm1vZHVsYXRvcnNdLEY9aC5nbG9iYWxab25lLmtleVJhbmdlLGs9aC5nbG9iYWxab25lLnZlbFJhbmdlO2guem9uZXMuZmlsdGVyKHY9PnQodi5oYXNLZXlSYW5nZT92LmtleVJhbmdlOkYsZSkmJnQodi5oYXNWZWxSYW5nZT92LnZlbFJhbmdlOmssQSkpLmZvckVhY2godj0+e2xldCBMPVsuLi52LmdlbmVyYXRvcnNdLEU9Wy4uLnYubW9kdWxhdG9yc107bihDLHIpLG4oTCxtKSxzKFEsSSkscyhFLHkpLHMoRSx0aGlzLnBhcmVudFNvdW5kQmFuay5kZWZhdWx0TW9kdWxhdG9ycyk7bGV0IFg9Wy4uLkVdO2ZvcihsZXQgTyBvZiBRKXtsZXQgbkE9WC5maW5kSW5kZXgoJD0+RUEuaXNJZGVudGljYWwoTywkKSk7bkEhPT0tMT9YW25BXT1YW25BXS5zdW1UcmFuc2Zvcm0oTyk6WC5wdXNoKE8pfXYuc2FtcGxlJiZhLnB1c2goe2luc3RydW1lbnRHZW5lcmF0b3JzOkwscHJlc2V0R2VuZXJhdG9yczpDLG1vZHVsYXRvcnM6WCxzYW1wbGU6di5zYW1wbGV9KX0pfSksYX10b01JRElTdHJpbmcoKXtyZXR1cm4gdGUudG9NSURJU3RyaW5nKHRoaXMpfXRvU3RyaW5nKCl7cmV0dXJuIHRlLnRvTmFtZWRNSURJU3RyaW5nKHRoaXMpfXRvRmxhdHRlbmVkSW5zdHJ1bWVudCgpe2xldCBlPShnLEIpPT57Zy5wdXNoKC4uLkIuZmlsdGVyKGQ9PiFnLmZpbmQoaD0+aC5nZW5lcmF0b3JUeXBlPT09ZC5nZW5lcmF0b3JUeXBlKSkpfSxBPShnLEIpPT4oe21pbjpNYXRoLm1heChnLm1pbixCLm1pbiksbWF4Ok1hdGgubWluKGcubWF4LEIubWF4KX0pLHQ9KGcsQik9PntnLnB1c2goLi4uQi5maWx0ZXIoZD0+IWcuZmluZChoPT5FQS5pc0lkZW50aWNhbChkLGgpKSkpfSxuPW5ldyBkdDtuLm5hbWU9dGhpcy5uYW1lO2xldCBzPVtdLGE9W10scj10aGlzLmdsb2JhbFpvbmU7cy5wdXNoKC4uLnIuZ2VuZXJhdG9ycyksYS5wdXNoKC4uLnIubW9kdWxhdG9ycyk7bGV0IEk9ci5rZXlSYW5nZSxvPXIudmVsUmFuZ2U7Zm9yKGxldCBnIG9mIHRoaXMuem9uZXMpe2lmKCFnLmluc3RydW1lbnQpdGhyb3cgbmV3IEVycm9yKCJObyBpbnN0cnVtZW50IGluIGEgcHJlc2V0IHpvbmUuIik7bGV0IEI9Zy5rZXlSYW5nZTtnLmhhc0tleVJhbmdlfHwoQj1JKTtsZXQgZD1nLnZlbFJhbmdlO2cuaGFzVmVsUmFuZ2V8fChkPW8pO2xldCBoPWcuZ2VuZXJhdG9ycy5tYXAoTD0+bmV3IEZBKEwuZ2VuZXJhdG9yVHlwZSxMLmdlbmVyYXRvclZhbHVlKSk7ZShoLHMpO2xldCBDPVsuLi5nLm1vZHVsYXRvcnNdO3QoQyxhKTtsZXQgUT1nLmluc3RydW1lbnQsbT1RLnpvbmVzLHk9W10sRj1bXSxrPVEuZ2xvYmFsWm9uZTt5LnB1c2goLi4uay5nZW5lcmF0b3JzKSxGLnB1c2goLi4uay5tb2R1bGF0b3JzKTtsZXQgRD1rLmtleVJhbmdlLHY9ay52ZWxSYW5nZTtmb3IobGV0IEwgb2YgbSl7aWYoIUwuc2FtcGxlKXRocm93IG5ldyBFcnJvcigiTm8gc2FtcGxlIGluIGFuIGluc3RydW1lbnQgem9uZS4iKTtsZXQgRT1MLmtleVJhbmdlO0wuaGFzS2V5UmFuZ2V8fChFPUQpO2xldCBYPUwudmVsUmFuZ2U7aWYoTC5oYXNWZWxSYW5nZXx8KFg9diksRT1BKEUsQiksWD1BKFgsZCksRS5tYXg8RS5taW58fFgubWF4PFgubWluKWNvbnRpbnVlO2xldCBPPUwuZ2VuZXJhdG9ycy5tYXAoej0+bmV3IEZBKHouZ2VuZXJhdG9yVHlwZSx6LmdlbmVyYXRvclZhbHVlKSk7ZShPLHkpO2xldCBuQT1bLi4uTC5tb2R1bGF0b3JzXTt0KG5BLEYpO2xldCAkPVsuLi5uQV07Zm9yKGxldCB6IG9mIEMpe2xldCB0QT0kLmZpbmRJbmRleChpQT0+RUEuaXNJZGVudGljYWwoeixpQSkpO3RBIT09LTE/JFt0QV09JFt0QV0uc3VtVHJhbnNmb3JtKHopOiQucHVzaCh6KX1sZXQgVj1PLm1hcCh6PT5uZXcgRkEoei5nZW5lcmF0b3JUeXBlLHouZ2VuZXJhdG9yVmFsdWUpKTtmb3IobGV0IHogb2YgaCl7aWYoei5nZW5lcmF0b3JUeXBlPT09aS52ZWxSYW5nZXx8ei5nZW5lcmF0b3JUeXBlPT09aS5rZXlSYW5nZXx8ei5nZW5lcmF0b3JUeXBlPT09aS5pbnN0cnVtZW50fHx6LmdlbmVyYXRvclR5cGU9PT1pLmVuZE9wZXJ8fHouZ2VuZXJhdG9yVHlwZT09PWkuc2FtcGxlTW9kZXMpY29udGludWU7bGV0IHRBPU8uZmluZEluZGV4KGlBPT5pQS5nZW5lcmF0b3JUeXBlPT09ei5nZW5lcmF0b3JUeXBlKTtpZih0QSE9PS0xKXtsZXQgaUE9Vlt0QV0uZ2VuZXJhdG9yVmFsdWUrei5nZW5lcmF0b3JWYWx1ZTtWW3RBXT1uZXcgRkEoei5nZW5lcmF0b3JUeXBlLGlBKX1lbHNle2xldCBpQT14W3ouZ2VuZXJhdG9yVHlwZV0uZGVmK3ouZ2VuZXJhdG9yVmFsdWU7Vi5wdXNoKG5ldyBGQSh6LmdlbmVyYXRvclR5cGUsaUEpKX19Vj1WLmZpbHRlcih6PT56LmdlbmVyYXRvclR5cGUhPT1pLnNhbXBsZUlEJiZ6LmdlbmVyYXRvclR5cGUhPT1pLmtleVJhbmdlJiZ6LmdlbmVyYXRvclR5cGUhPT1pLnZlbFJhbmdlJiZ6LmdlbmVyYXRvclR5cGUhPT1pLmVuZE9wZXImJnouZ2VuZXJhdG9yVHlwZSE9PWkuaW5zdHJ1bWVudCYmei5nZW5lcmF0b3JWYWx1ZSE9PXhbei5nZW5lcmF0b3JUeXBlXS5kZWYpO2xldCBxPW4uY3JlYXRlWm9uZShMLnNhbXBsZSk7cS5rZXlSYW5nZT1FLHEudmVsUmFuZ2U9WCxxLmtleVJhbmdlLm1pbj09PTAmJnEua2V5UmFuZ2UubWF4PT09MTI3JiYocS5rZXlSYW5nZS5taW49LTEpLHEudmVsUmFuZ2UubWluPT09MCYmcS52ZWxSYW5nZS5tYXg9PT0xMjcmJihxLnZlbFJhbmdlLm1pbj0tMSkscS5hZGRHZW5lcmF0b3JzKC4uLlYpLHEuYWRkTW9kdWxhdG9ycyguLi4kKX19cmV0dXJuIG59d3JpdGUoZSxBLHQsbixzLGEpe3AoYCVjV3JpdGluZyAke3RoaXMubmFtZX0uLi5gLGMuaW5mbyksa0Eobi5wZHRhLHRoaXMubmFtZS5zdWJzdHJpbmcoMCwyMCksMjApLGtBKG4ueGR0YSx0aGlzLm5hbWUuc3Vic3RyaW5nKDIwKSwyMCksSihuLnBkdGEsdGhpcy5wcm9ncmFtKTtsZXQgcj10aGlzLmJhbmtNU0I7dGhpcy5pc0dNR1NEcnVtP3I9MTI4OnRoaXMuYmFua01TQj09PTAmJihyPXRoaXMuYmFua0xTQiksSihuLnBkdGEsciksbi54ZHRhLmN1cnJlbnRJbmRleCs9NCxKKG4ucGR0YSxzLmhkciY2NTUzNSksSihuLnhkdGEscy5oZHI+PjE2KSxnQShuLnBkdGEsdGhpcy5saWJyYXJ5KSxnQShuLnBkdGEsdGhpcy5nZW5yZSksZ0Eobi5wZHRhLHRoaXMubW9ycGhvbG9neSksbi54ZHRhLmN1cnJlbnRJbmRleCs9MTIscy5oZHIrPXRoaXMuem9uZXMubGVuZ3RoKzEsdGhpcy5nbG9iYWxab25lLndyaXRlKGUsQSx0LHMsYSksdGhpcy56b25lcy5mb3JFYWNoKEk9Pkkud3JpdGUoZSxBLHQscyxhKSl9fTtmdW5jdGlvbiBEcyhlLEEpe2xldCB0O3JldHVybiBBP3Q9ZS5maW5kKG49Pm4uaXNYR0RydW1zKTp0PWUuZmluZChuPT5uLmlzR01HU0RydW0pLHR8fChlLmZpbmQobj0+bi5pc0FueURydW1zKT8/ZVswXSl9ZnVuY3Rpb24gUWEoZSxBLHQpe2lmKGUubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCJObyBwcmVzZXRzISIpO0EuaXNHTUdTRHJ1bSYmZkEuaXNTeXN0ZW1YRyh0KSYmKEE9ey4uLkEsaXNHTUdTRHJ1bTohMSxiYW5rTFNCOjAsYmFua01TQjpmQS5nZXREcnVtQmFuayh0KX0pO2xldHtpc0dNR1NEcnVtOm4sYmFua0xTQjpzLGJhbmtNU0I6YSxwcm9ncmFtOnJ9PUEsST1mQS5pc1N5c3RlbVhHKHQpLG89ZkEuaXNYR0RydW1zKGEpJiZJLGc9ZS5maW5kKEM9PkMubWF0Y2hlcyhBKSk7aWYoZyYmKCFvfHxvJiZnLmlzWEdEcnVtcykpcmV0dXJuIGc7bGV0IEI9Qz0+e3AoYCVjUHJlc2V0ICVjJHt0ZS50b01JRElTdHJpbmcoQSl9JWMgbm90IGZvdW5kLiAoJHt0fSkgUmVwbGFjZWQgd2l0aCAlYyR7Qy50b1N0cmluZygpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKX07aWYobil7bGV0IEM9ZS5maW5kKFE9PlEuaXNHTUdTRHJ1bSYmUS5wcm9ncmFtPT09cik7cmV0dXJuIEN8fChDPWUuZmluZChRPT5RLmlzQW55RHJ1bXMmJlEucHJvZ3JhbT09PXIpLEMpPyhCKEMpLEMpOihDPURzKGUsITEpLEIoQyksQyl9aWYobyl7bGV0IEM9ZS5maW5kKFE9PlEucHJvZ3JhbT09PXImJlEuaXNYR0RydW1zKTtyZXR1cm4gQ3x8KEM9ZS5maW5kKFE9PlEuaXNBbnlEcnVtcyYmUS5wcm9ncmFtPT09ciksQyk/KEIoQyksQyk6KEM9RHMoZSwhMCksQihDKSxDKX1sZXQgZD1lLmZpbHRlcihDPT5DLnByb2dyYW09PT1yJiYhQy5pc0FueURydW1zKTtpZihkLmxlbmd0aDwxKXJldHVybiBCKGVbMF0pLGVbMF07aWYoST9nPWQuZmluZChDPT5DLmJhbmtMU0I9PT1zKTpnPWQuZmluZChDPT5DLmJhbmtNU0I9PT1hKSxnKXJldHVybiBCKGcpLGc7bGV0IGg9TWF0aC5tYXgoYSxzKTtyZXR1cm4gZz1kLmZpbmQoQz0+Qy5iYW5rTFNCPT09aHx8Qy5iYW5rTVNCPT09aCksZz8oQihnKSxnKTooQihkWzBdKSxkWzBdKX12YXIgWW89Y2xhc3MgZXh0ZW5kcyBwZXtjb25zdHJ1Y3RvcihlLEEpe3N1cGVyKGUucGFyZW50U291bmRCYW5rLGUuZ2xvYmFsWm9uZSksdGhpcy5iYW5rTVNCPWZBLmFkZEJhbmtPZmZzZXQoZS5iYW5rTVNCLEEsZS5pc1hHRHJ1bXMpLHRoaXMubmFtZT1lLm5hbWUsdGhpcy5iYW5rTFNCPWUuYmFua0xTQix0aGlzLmlzR01HU0RydW09ZS5pc0dNR1NEcnVtLHRoaXMucHJvZ3JhbT1lLnByb2dyYW0sdGhpcy5nZW5yZT1lLmdlbnJlLHRoaXMubW9ycGhvbG9neT1lLm1vcnBob2xvZ3ksdGhpcy5saWJyYXJ5PWUubGlicmFyeSx0aGlzLnpvbmVzPWUuem9uZXN9fSxQbz1jbGFzc3tzb3VuZEJhbmtMaXN0PVtdO3ByZXNldExpc3RDaGFuZ2VDYWxsYmFjaztzZWxlY3RhYmxlUHJlc2V0TGlzdD1bXTtjb25zdHJ1Y3RvcihlKXt0aGlzLnByZXNldExpc3RDaGFuZ2VDYWxsYmFjaz1lfV9wcmVzZXRMaXN0PVtdO2dldCBwcmVzZXRMaXN0KCl7cmV0dXJuWy4uLnRoaXMuX3ByZXNldExpc3RdfWdldCBwcmlvcml0eU9yZGVyKCl7cmV0dXJuIHRoaXMuc291bmRCYW5rTGlzdC5tYXAoZT0+ZS5pZCl9c2V0IHByaW9yaXR5T3JkZXIoZSl7dGhpcy5zb3VuZEJhbmtMaXN0LnNvcnQoKEEsdCk9PmUuaW5kZXhPZihBLmlkKS1lLmluZGV4T2YodC5pZCkpLHRoaXMuZ2VuZXJhdGVQcmVzZXRMaXN0KCl9ZGVsZXRlU291bmRCYW5rKGUpe2lmKHRoaXMuc291bmRCYW5rTGlzdC5sZW5ndGg9PT0wKXtzQSgiMSBzb3VuZGJhbmsgbGVmdC4gQWJvcnRpbmchIik7cmV0dXJufWxldCBBPXRoaXMuc291bmRCYW5rTGlzdC5maW5kSW5kZXgodD0+dC5pZD09PWUpO2lmKEE9PT0tMSl0aHJvdyBuZXcgRXJyb3IoYE5vIHNvdW5kIGJhbmsgd2l0aCBpZCAiJHtlfSJgKTt0aGlzLnNvdW5kQmFua0xpc3Quc3BsaWNlKEEsMSksdGhpcy5nZW5lcmF0ZVByZXNldExpc3QoKX1hZGRTb3VuZEJhbmsoZSxBLHQ9MCl7bGV0IG49dGhpcy5zb3VuZEJhbmtMaXN0LmZpbmQocz0+cy5pZD09PUEpO24hPT12b2lkIDA/KG4uc291bmRCYW5rPWUsbi5iYW5rT2Zmc2V0PXQpOnRoaXMuc291bmRCYW5rTGlzdC5wdXNoKHtpZDpBLHNvdW5kQmFuazplLGJhbmtPZmZzZXQ6dH0pLHRoaXMuZ2VuZXJhdGVQcmVzZXRMaXN0KCl9Z2V0UHJlc2V0KGUsQSl7aWYodGhpcy5zb3VuZEJhbmtMaXN0Lmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcigiTm8gc291bmQgYmFua3MhIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCBvbmU/Iik7cmV0dXJuIFFhKHRoaXMuc2VsZWN0YWJsZVByZXNldExpc3QsZSxBKX1kZXN0cm95KCl7dGhpcy5zb3VuZEJhbmtMaXN0LmZvckVhY2goZT0+e2Uuc291bmRCYW5rLmRlc3Ryb3lTb3VuZEJhbmsoKX0pLHRoaXMuc291bmRCYW5rTGlzdD1bXX1nZW5lcmF0ZVByZXNldExpc3QoKXtsZXQgZT1uZXcgQXJyYXksQT1uZXcgU2V0O3RoaXMuc291bmRCYW5rTGlzdC5mb3JFYWNoKHQ9PntsZXQgbj10LnNvdW5kQmFuayxzPXQuYmFua09mZnNldDtuLnByZXNldHMuZm9yRWFjaChhPT57bGV0IHI9bmV3IFlvKGEscyk7QS5oYXMoci50b01JRElTdHJpbmcoKSl8fChBLmFkZChyLnRvTUlESVN0cmluZygpKSxlLnB1c2gocikpfSl9KSxlLnNvcnQodGUuc29ydGVyLmJpbmQodGUpKSx0aGlzLnNlbGVjdGFibGVQcmVzZXRMaXN0PWUsdGhpcy5fcHJlc2V0TGlzdD1lLm1hcCh0PT4oe2JhbmtNU0I6dC5iYW5rTVNCLGJhbmtMU0I6dC5iYW5rTFNCLHByb2dyYW06dC5wcm9ncmFtLGlzR01HU0RydW06dC5pc0dNR1NEcnVtLG5hbWU6dC5uYW1lLGlzQW55RHJ1bXM6dC5pc0FueURydW1zfSkpLHRoaXMucHJlc2V0TGlzdENoYW5nZUNhbGxiYWNrKCl9fSxKbz0uMDUscW89MzA3MCxLbz0yZTMsd3M9TWF0aC5QSS8yLE50PS01MDAsdWE9NTAwLG9zPXVhLU50LGZhPW5ldyBGbG9hdDMyQXJyYXkob3MrMSksbWE9bmV3IEZsb2F0MzJBcnJheShvcysxKTtmb3IobGV0IGU9TnQ7ZTw9dWE7ZSsrKXtsZXQgQT0oZS1OdCkvb3MsdD1lLU50O2ZhW3RdPU1hdGguY29zKHdzKkEpLG1hW3RdPU1hdGguc2luKHdzKkEpfWZ1bmN0aW9uIE9vKGUsQSx0LG4scyxhLHIsSSxvKXtpZihpc05hTihBWzBdKSlyZXR1cm47bGV0IGc7ZS5vdmVycmlkZVBhbj9nPWUub3ZlcnJpZGVQYW46KGUuY3VycmVudFBhbis9KGUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnBhbl0tZS5jdXJyZW50UGFuKSp0aGlzLnN5bnRoUHJvcHMucGFuU21vb3RoaW5nRmFjdG9yLGc9ZS5jdXJyZW50UGFuKTtsZXQgQj10aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5tYXN0ZXJHYWluKnRoaXMuc3ludGhQcm9wcy5taWRpVm9sdW1lKmUuZ2FpbixkPX5+KGcrNTAwKSxoPWZhW2RdKkIqdGhpcy5zeW50aFByb3BzLnBhbkxlZnQsQz1tYVtkXSpCKnRoaXMuc3ludGhQcm9wcy5wYW5SaWdodDtpZih0aGlzLnN5bnRoLmVuYWJsZUVmZmVjdHMpe2xldCBRPWUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnJldmVyYkVmZmVjdHNTZW5kXTtpZihRPjApe2xldCB5PXRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLnJldmVyYkdhaW4qdGhpcy5zeW50aFByb3BzLnJldmVyYlNlbmQqQiooUS9xbyk7Zm9yKGxldCBGPTA7RjxBLmxlbmd0aDtGKyspe2xldCBrPUYrbztzW2tdKz15KkFbRl0sYVtrXSs9eSpBW0ZdfX1sZXQgbT1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5jaG9ydXNFZmZlY3RzU2VuZF07aWYobT4wKXtsZXQgeT10aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5jaG9ydXNHYWluKnRoaXMuc3ludGhQcm9wcy5jaG9ydXNTZW5kKihtL0tvKSxGPWgqeSxrPUMqeTtmb3IobGV0IEQ9MDtEPEEubGVuZ3RoO0QrKyl7bGV0IHY9RCtvO3Jbdl0rPUYqQVtEXSxJW3ZdKz1rKkFbRF19fX1pZihoPjApZm9yKGxldCBRPTA7UTxBLmxlbmd0aDtRKyspdFtRK29dKz1oKkFbUV07aWYoQz4wKWZvcihsZXQgUT0wO1E8QS5sZW5ndGg7USsrKW5bUStvXSs9QypBW1FdfXZhciBWbz0uMSxYdD1jbGFzcyBFdHtzdGF0aWMgY2FjaGVkQ29lZmZpY2llbnRzPVtdO3Jlc29uYW5jZUNiPTA7Y3VycmVudEluaXRpYWxGYz0xMzUwMDthMD0wO2ExPTA7YTI9MDthMz0wO2E0PTA7eDE9MDt4Mj0wO3kxPTA7eTI9MDtsYXN0VGFyZ2V0Q3V0b2ZmPTEvMDtpbml0aWFsaXplZD0hMTtzYW1wbGVSYXRlO21heEN1dG9mZjtjb25zdHJ1Y3RvcihBKXt0aGlzLnNhbXBsZVJhdGU9QSx0aGlzLm1heEN1dG9mZj1BKi40NX1zdGF0aWMgYXBwbHkoQSx0LG4scyl7bGV0IGE9QS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuaW5pdGlhbEZpbHRlckZjXSxyPUEuZmlsdGVyO3IuaW5pdGlhbGl6ZWQ/ci5jdXJyZW50SW5pdGlhbEZjKz0oYS1yLmN1cnJlbnRJbml0aWFsRmMpKnM6KHIuaW5pdGlhbGl6ZWQ9ITAsci5jdXJyZW50SW5pdGlhbEZjPWEpO2xldCBJPXIuY3VycmVudEluaXRpYWxGYytuLG89QS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuaW5pdGlhbEZpbHRlclFdO2lmKHIuY3VycmVudEluaXRpYWxGYz4xMzQ5OSYmST4xMzQ5OSYmbz09PTApe3IuY3VycmVudEluaXRpYWxGYz0xMzUwMDtyZXR1cm59KE1hdGguYWJzKHIubGFzdFRhcmdldEN1dG9mZi1JKT4xfHxyLnJlc29uYW5jZUNiIT09bykmJihyLmxhc3RUYXJnZXRDdXRvZmY9SSxyLnJlc29uYW5jZUNiPW8sRXQuY2FsY3VsYXRlQ29lZmZpY2llbnRzKHIsSSkpO2ZvcihsZXQgZz0wO2c8dC5sZW5ndGg7ZysrKXtsZXQgQj10W2ddLGQ9ci5hMCpCK3IuYTEqci54MStyLmEyKnIueDItci5hMypyLnkxLXIuYTQqci55MjtyLngyPXIueDEsci54MT1CLHIueTI9ci55MSxyLnkxPWQsdFtnXT1kfX1zdGF0aWMgY2FsY3VsYXRlQ29lZmZpY2llbnRzKEEsdCl7dD1+fnQ7bGV0IG49QS5yZXNvbmFuY2VDYixzPUV0LmNhY2hlZENvZWZmaWNpZW50cz8uW25dPy5bdF07aWYocyE9PXZvaWQgMCl7QS5hMD1zLmEwLEEuYTE9cy5hMSxBLmEyPXMuYTIsQS5hMz1zLmEzLEEuYTQ9cy5hNDtyZXR1cm59bGV0IGE9Tm4odCk7YT1NYXRoLm1pbihhLEEubWF4Q3V0b2ZmKTtsZXQgcj1uLzEwLEk9QWUoLShyLTMuMDEpKSxvPTEvTWF0aC5zcXJ0KEFlKC1yKSksZz0yKk1hdGguUEkqYS9BLnNhbXBsZVJhdGUsQj1NYXRoLmNvcyhnKSxkPU1hdGguc2luKGcpLygyKkkpLGg9KDEtQikqbyxDPWgvMixRPUMsbT0xK2QseT0tMipCLEY9MS1kLGs9e2EwOkMvbSxhMTpoL20sYTI6US9tLGEzOnkvbSxhNDpGL219O0EuYTA9ay5hMCxBLmExPWsuYTEsQS5hMj1rLmEyLEEuYTM9ay5hMyxBLmE0PWsuYTQsRXQuY2FjaGVkQ29lZmZpY2llbnRzW25dPz89W10sRXQuY2FjaGVkQ29lZmZpY2llbnRzW25dW3RdPWt9fSxIbj1uZXcgWHQoNDQxMDApO0huLnJlc29uYW5jZUNiPTA7Zm9yKGxldCBlPTE1MDA7ZTwxMzUwMDtlKyspSG4uY3VycmVudEluaXRpYWxGYz1lLFh0LmNhbGN1bGF0ZUNvZWZmaWNpZW50cyhIbixlKTt2YXIgRnM9e2VuYWJsZUV2ZW50U3lzdGVtOiEwLGluaXRpYWxUaW1lOjAsZW5hYmxlRWZmZWN0czohMH07ZnVuY3Rpb24gWG8oZSxBKXtsZXQgdD0wO3JldHVybiBlLmRydW1DaGFubmVsJiYodCs9NSksQS5pc0luUmVsZWFzZSYmKHQtPTUpLHQrPUEudmVsb2NpdHkvMjUsdC09QS52b2x1bWVFbnZlbG9wZS5zdGF0ZSxBLmlzSW5SZWxlYXNlJiYodC09NSksdC09QS52b2x1bWVFbnZlbG9wZS5jdXJyZW50QXR0ZW51YXRpb25EYi81MCx0fWZ1bmN0aW9uIFpvKGUpe2xldCBBPVtdO2ZvcihsZXQgbiBvZiB0aGlzLm1pZGlDaGFubmVscylmb3IobGV0IHMgb2Ygbi52b2ljZXMpaWYoIXMuZmluaXNoZWQpe2xldCBhPVhvKG4scyk7QS5wdXNoKHtjaGFubmVsOm4sdm9pY2U6cyxwcmlvcml0eTphfSl9QS5zb3J0KChuLHMpPT5uLnByaW9yaXR5LXMucHJpb3JpdHkpO2xldCB0PUEuc2xpY2UoMCxlKTtmb3IobGV0e2NoYW5uZWw6bix2b2ljZTpzfW9mIHQpe2xldCBhPW4udm9pY2VzLmluZGV4T2Yocyk7YT4tMSYmbi52b2ljZXMuc3BsaWNlKGEsMSl9fXZhciBTbj0xLFluPW5ldyBGbG9hdDMyQXJyYXkoMWUzKTtmb3IobGV0IGU9MDtlPFluLmxlbmd0aDtlKyspWW5bZV09SWEoMCxRQS5jb252ZXgsZS8xZTMpO3ZhciBfZT1jbGFzcyBQbnthdHRhY2tEdXJhdGlvbj0wO2RlY2F5RHVyYXRpb249MDtob2xkRHVyYXRpb249MDtyZWxlYXNlRHVyYXRpb249MDtzdXN0YWluTGV2ZWw9MDtkZWxheUVuZD0wO2F0dGFja0VuZD0wO2hvbGRFbmQ9MDtkZWNheUVuZD0wO3JlbGVhc2VTdGFydExldmVsPTA7Y3VycmVudFZhbHVlPTA7c3RhdGljIHN0YXJ0UmVsZWFzZShBKXtQbi5yZWNhbGN1bGF0ZShBKX1zdGF0aWMgcmVjYWxjdWxhdGUoQSl7bGV0IHQ9QS5tb2R1bGF0aW9uRW52ZWxvcGU7QS5pc0luUmVsZWFzZSYmKHQucmVsZWFzZVN0YXJ0TGV2ZWw9UG4uZ2V0VmFsdWUoQSxBLnJlbGVhc2VTdGFydFRpbWUsITApKSx0LnN1c3RhaW5MZXZlbD0xLUEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnN1c3RhaW5Nb2RFbnZdLzFlMyx0LmF0dGFja0R1cmF0aW9uPVFlKEEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmF0dGFja01vZEVudl0pO2xldCBuPSg2MC1BLm1pZGlOb3RlKSpBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5rZXlOdW1Ub01vZEVudkRlY2F5XSxzPVFlKEEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmRlY2F5TW9kRW52XStuKTt0LmRlY2F5RHVyYXRpb249cyooMS10LnN1c3RhaW5MZXZlbCk7bGV0IGE9KDYwLUEubWlkaU5vdGUpKkEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmtleU51bVRvTW9kRW52SG9sZF07dC5ob2xkRHVyYXRpb249UWUoYStBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5ob2xkTW9kRW52XSk7bGV0IHI9UWUoTWF0aC5tYXgoQS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kucmVsZWFzZU1vZEVudl0sLTcyMDApKTt0LnJlbGVhc2VEdXJhdGlvbj1yKnQucmVsZWFzZVN0YXJ0TGV2ZWwsdC5kZWxheUVuZD1BLnN0YXJ0VGltZStRZShBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWxheU1vZEVudl0pLHQuYXR0YWNrRW5kPXQuZGVsYXlFbmQrdC5hdHRhY2tEdXJhdGlvbix0LmhvbGRFbmQ9dC5hdHRhY2tFbmQrdC5ob2xkRHVyYXRpb24sdC5kZWNheUVuZD10LmhvbGRFbmQrdC5kZWNheUR1cmF0aW9ufXN0YXRpYyBnZXRWYWx1ZShBLHQsbj0hMSl7bGV0IHM9QS5tb2R1bGF0aW9uRW52ZWxvcGU7cmV0dXJuIEEuaXNJblJlbGVhc2UmJiFuP3MucmVsZWFzZVN0YXJ0TGV2ZWw9PT0wPzA6TWF0aC5tYXgoMCwoMS0odC1BLnJlbGVhc2VTdGFydFRpbWUpL3MucmVsZWFzZUR1cmF0aW9uKSpzLnJlbGVhc2VTdGFydExldmVsKToodDxzLmRlbGF5RW5kP3MuY3VycmVudFZhbHVlPTA6dDxzLmF0dGFja0VuZD9zLmN1cnJlbnRWYWx1ZT1Zblt+figoMS0ocy5hdHRhY2tFbmQtdCkvcy5hdHRhY2tEdXJhdGlvbikqMWUzKV06dDxzLmhvbGRFbmQ/cy5jdXJyZW50VmFsdWU9U246dDxzLmRlY2F5RW5kP3MuY3VycmVudFZhbHVlPSgxLShzLmRlY2F5RW5kLXQpL3MuZGVjYXlEdXJhdGlvbikqKHMuc3VzdGFpbkxldmVsLVNuKStTbjpzLmN1cnJlbnRWYWx1ZT1zLnN1c3RhaW5MZXZlbCxzLmN1cnJlbnRWYWx1ZSl9fSxTYT1jbGFzc3tzYW1wbGVEYXRhO3BsYXliYWNrU3RlcD0wO2N1cnNvcj0wO3Jvb3RLZXk9MDtsb29wU3RhcnQ9MDtsb29wRW5kPTA7ZW5kPTA7bG9vcGluZ01vZGU9MDtpc0xvb3Bpbmc9ITE7Y29uc3RydWN0b3IoZSxBLHQsbixzLGEscixJKXt0aGlzLnNhbXBsZURhdGE9ZSx0aGlzLnBsYXliYWNrU3RlcD1BLHRoaXMuY3Vyc29yPXQsdGhpcy5yb290S2V5PW4sdGhpcy5sb29wU3RhcnQ9cyx0aGlzLmxvb3BFbmQ9YSx0aGlzLmVuZD1yLHRoaXMubG9vcGluZ01vZGU9SSx0aGlzLmlzTG9vcGluZz10aGlzLmxvb3BpbmdNb2RlPT09MXx8dGhpcy5sb29waW5nTW9kZT09PTN9fSx6bz0tMjMyMCxXbz0tMTEzMCxKbj1jbGFzcyBwYXtzYW1wbGU7ZmlsdGVyO2dhaW49MTtnZW5lcmF0b3JzO21vZHVsYXRvcnM9W107cmVzb25hbmNlT2Zmc2V0PTA7bW9kdWxhdGVkR2VuZXJhdG9ycztmaW5pc2hlZD0hMTtpc0luUmVsZWFzZT0hMTt2ZWxvY2l0eT0wO21pZGlOb3RlPTA7cHJlc3N1cmU9MDt0YXJnZXRLZXk9MDttb2R1bGF0aW9uRW52ZWxvcGU9bmV3IF9lO3ZvbHVtZUVudmVsb3BlO3N0YXJ0VGltZT0wO3JlbGVhc2VTdGFydFRpbWU9MS8wO2N1cnJlbnRUdW5pbmdDZW50cz0wO2N1cnJlbnRUdW5pbmdDYWxjdWxhdGVkPTE7Y3VycmVudFBhbj0wO3JlYWxLZXk7cG9ydGFtZW50b0Zyb21LZXk9LTE7cG9ydGFtZW50b0R1cmF0aW9uPTA7b3ZlcnJpZGVQYW49MDtleGNsdXNpdmVDbGFzcz0wO2NvbnN0cnVjdG9yKEEsdCxuLHMsYSxyLEksbyxnKXt0aGlzLnNhbXBsZT10LHRoaXMuZ2VuZXJhdG9ycz1vLHRoaXMuZXhjbHVzaXZlQ2xhc3M9dGhpcy5nZW5lcmF0b3JzW2kuZXhjbHVzaXZlQ2xhc3NdLHRoaXMubW9kdWxhdGVkR2VuZXJhdG9ycz1uZXcgSW50MTZBcnJheShvKSx0aGlzLm1vZHVsYXRvcnM9Zyx0aGlzLmZpbHRlcj1uZXcgWHQoQSksdGhpcy52ZWxvY2l0eT1zLHRoaXMubWlkaU5vdGU9bix0aGlzLnN0YXJ0VGltZT1hLHRoaXMudGFyZ2V0S2V5PXIsdGhpcy5yZWFsS2V5PUksdGhpcy52b2x1bWVFbnZlbG9wZT1uZXcgYmUoQSxvW2kuc3VzdGFpblZvbEVudl0pfXN0YXRpYyBjb3B5RnJvbShBLHQsbil7bGV0IHM9QS5zYW1wbGUsYT1uZXcgU2Eocy5zYW1wbGVEYXRhLHMucGxheWJhY2tTdGVwLHMuY3Vyc29yLHMucm9vdEtleSxzLmxvb3BTdGFydCxzLmxvb3BFbmQscy5lbmQscy5sb29waW5nTW9kZSk7cmV0dXJuIG5ldyBwYShBLnZvbHVtZUVudmVsb3BlLnNhbXBsZVJhdGUsYSxBLm1pZGlOb3RlLEEudmVsb2NpdHksdCxBLnRhcmdldEtleSxuLG5ldyBJbnQxNkFycmF5KEEuZ2VuZXJhdG9ycyksQS5tb2R1bGF0b3JzLm1hcChFQS5jb3B5RnJvbS5iaW5kKEVBKSkpfWV4Y2x1c2l2ZVJlbGVhc2UoQSl7dGhpcy5yZWxlYXNlKEEsV2EpLHRoaXMubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnJlbGVhc2VWb2xFbnZdPXpvLHRoaXMubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnJlbGVhc2VNb2RFbnZdPVdvLGJlLnJlY2FsY3VsYXRlKHRoaXMpLF9lLnJlY2FsY3VsYXRlKHRoaXMpfXJlbGVhc2UoQSx0PXphKXt0aGlzLnJlbGVhc2VTdGFydFRpbWU9QSx0aGlzLnJlbGVhc2VTdGFydFRpbWUtdGhpcy5zdGFydFRpbWU8dCYmKHRoaXMucmVsZWFzZVN0YXJ0VGltZT10aGlzLnN0YXJ0VGltZSt0KX19O2Z1bmN0aW9uIF9vKGUsQSx0LG4pe2xldCBzPWUuZ2V0U3ludGhlc2lzRGF0YShBLHQpLnJlZHVjZSgoYSxyKT0+e2lmKHIuc2FtcGxlLmdldEF1ZGlvRGF0YSgpPT09dm9pZCAwKXJldHVybiBzQShgRGlzY2FyZGluZyBpbnZhbGlkIHNhbXBsZTogJHtyLnNhbXBsZS5uYW1lfWApLGE7bGV0IEk9bmV3IEludDE2QXJyYXkoTW4pO2ZvcihsZXQgbT0wO208NjA7bSsrKUlbbV09eG8obSxyLnByZXNldEdlbmVyYXRvcnMsci5pbnN0cnVtZW50R2VuZXJhdG9ycyk7SVtpLmluaXRpYWxBdHRlbnVhdGlvbl09TWF0aC5mbG9vcihJW2kuaW5pdGlhbEF0dGVudWF0aW9uXSouNCk7bGV0IG89ci5zYW1wbGUub3JpZ2luYWxLZXk7SVtpLm92ZXJyaWRpbmdSb290S2V5XT4tMSYmKG89SVtpLm92ZXJyaWRpbmdSb290S2V5XSk7bGV0IGc9QTtJW2kua2V5TnVtXT4tMSYmKGc9SVtpLmtleU51bV0pO2xldCBCPXIuc2FtcGxlLmxvb3BTdGFydCxkPXIuc2FtcGxlLmxvb3BFbmQsaD1JW2kuc2FtcGxlTW9kZXNdLEM9ci5zYW1wbGUuZ2V0QXVkaW9EYXRhKCksUT1uZXcgU2EoQyxyLnNhbXBsZS5zYW1wbGVSYXRlL3RoaXMuc2FtcGxlUmF0ZSpNYXRoLnBvdygyLHIuc2FtcGxlLnBpdGNoQ29ycmVjdGlvbi8xMjAwKSwwLG8sQixkLE1hdGguZmxvb3IoQy5sZW5ndGgpLTEsaCk7cmV0dXJuIElbaS52ZWxvY2l0eV0+LTEmJih0PUlbaS52ZWxvY2l0eV0pLGEucHVzaChuZXcgSm4odGhpcy5zYW1wbGVSYXRlLFEsQSx0LHRoaXMuY3VycmVudFN5bnRoVGltZSxnLG4sSSxyLm1vZHVsYXRvcnMubWFwKEVBLmNvcHlGcm9tLmJpbmQoRUEpKSkpLGF9LFtdKTtyZXR1cm4gdGhpcy5zZXRDYWNoZWRWb2ljZShlLEEsdCxzKSxzLm1hcChhPT5Kbi5jb3B5RnJvbShhLHRoaXMuY3VycmVudFN5bnRoVGltZSxuKSl9ZnVuY3Rpb24gam8oZSxBLHQsbil7bGV0IHM9dGhpcy5taWRpQ2hhbm5lbHNbZV0sYT10aGlzLmtleU1vZGlmaWVyTWFuYWdlci5oYXNPdmVycmlkZVBhdGNoKGUsQSkscj1zLnByZXNldDtpZighcilyZXR1cm4gc0EoYE5vIHByZXNldCBmb3IgY2hhbm5lbCAke2V9IWApLFtdO2xldCBJPXsuLi5yfTthJiYoST10aGlzLmtleU1vZGlmaWVyTWFuYWdlci5nZXRQYXRjaChlLEEpKTtsZXQgbz10aGlzLmdldENhY2hlZFZvaWNlKEksQSx0KTtyZXR1cm4gbyE9PXZvaWQgMD9vLm1hcChnPT5Kbi5jb3B5RnJvbShnLHRoaXMuY3VycmVudFN5bnRoVGltZSxuKSk6KGEmJihyPXRoaXMuc291bmRCYW5rTWFuYWdlci5nZXRQcmVzZXQoSSx0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLm1pZGlTeXN0ZW0pKSx0aGlzLmdldFZvaWNlc0ZvclByZXNldChyLEEsdCxuKSl9ZnVuY3Rpb24gR3MoZSxBLHQpe2xldCBuPWUscz1BPDw3fHQ7cmV0dXJuIGU9PT0xMjcmJkE9PT0xMjcmJnQ9PT0xMjc/e21pZGlOb3RlOi0xLGNlbnRUdW5pbmc6bnVsbH06e21pZGlOb3RlOm4sY2VudFR1bmluZzpzKi4wMDYxfX1mdW5jdGlvbiAkbyhlLEE9MCl7bGV0IHQ9ZVswXTtpZih0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmRldmljZUlEIT09QmUmJmVbMV0hPT0xMjcmJnRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMuZGV2aWNlSUQhPT1lWzFdKXJldHVybjtmdW5jdGlvbiBuKGEscixJLG8pe3AoYCVjQ2hhbm5lbCAlYyR7YX0lYyAke0l9LiAlYyR7cn0gJHtvfSVjLCB3aXRoICVjJHtNQShlKX1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpfWZ1bmN0aW9uIHMoKXtwKGAlY1VucmVjb2duaXplZCBSb2xhbmQgJWNHUyAlY1N5c0V4OiAlYyR7TUEoZSl9YCxjLndhcm4sYy5yZWNvZ25pemVkLGMud2FybixjLnVucmVjb2duaXplZCl9c3dpdGNoKHQpe2RlZmF1bHQ6cChgJWNVbnJlY29nbml6ZWQgU3lzRXg6ICVjJHtNQShlKX1gLGMud2FybixjLnVucmVjb2duaXplZCk7YnJlYWs7Y2FzZSAxMjY6Y2FzZSAxMjc6c3dpdGNoKGVbMl0pe2Nhc2UgNDp7bGV0IGE7c3dpdGNoKGVbM10pe2Nhc2UgMTp7bGV0IHI9ZVs1XTw8N3xlWzRdO3RoaXMuc2V0TUlESVZvbHVtZShyLzE2Mzg0KSxwKGAlY01hc3RlciBWb2x1bWUuIFZvbHVtZTogJWMke3J9YCxjLmluZm8sYy52YWx1ZSk7YnJlYWt9Y2FzZSAyOntsZXQgST0oKGVbNV08PDd8ZVs0XSktODE5MikvODE5Mjt0aGlzLnNldE1hc3RlclBhcmFtZXRlcigibWFzdGVyUGFuIixJKSxwKGAlY01hc3RlciBQYW4uIFBhbjogJWMke0l9YCxjLmluZm8sYy52YWx1ZSk7YnJlYWt9Y2FzZSAzOntsZXQgcj0oZVs1XTw8N3xlWzZdKS04MTkyO2E9TWF0aC5mbG9vcihyLzgxLjkyKSx0aGlzLnNldE1hc3RlclR1bmluZyhhKSxwKGAlY01hc3RlciBGaW5lIFR1bmluZy4gQ2VudHM6ICVjJHthfWAsYy5pbmZvLGMudmFsdWUpO2JyZWFrfWNhc2UgNDp7YT0oZVs1XS02NCkqMTAwLHRoaXMuc2V0TWFzdGVyVHVuaW5nKGEpLHAoYCVjTWFzdGVyIENvYXJzZSBUdW5pbmcuIENlbnRzOiAlYyR7YX1gLGMuaW5mbyxjLnZhbHVlKTticmVha31kZWZhdWx0OnAoYCVjVW5yZWNvZ25pemVkIE1JREkgRGV2aWNlIENvbnRyb2wgUmVhbC10aW1lIG1lc3NhZ2U6ICVjJHtNQShlKX1gLGMud2FybixjLnVucmVjb2duaXplZCl9YnJlYWt9Y2FzZSA5OmVbM109PT0xPyhwKCIlY0dNMSBzeXN0ZW0gb24iLGMuaW5mbyksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLCJnbSIpKTplWzNdPT09Mz8ocCgiJWNHTTIgc3lzdGVtIG9uIixjLmluZm8pLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtaWRpU3lzdGVtIiwiZ20yIikpOihwKCIlY0dNIHN5c3RlbSBvZmYsIGRlZmF1bHRpbmcgdG8gR1MiLGMuaW5mbyksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLCJncyIpKTticmVhaztjYXNlIDg6e2xldCBhPTQ7c3dpdGNoKGVbM10pe2Nhc2UgMTp7bGV0IHI9ZVthKytdLEk9ZWUoZSwxNixhKTtpZihhKz0xNixlLmxlbmd0aDwzODQpe3NBKGBUaGUgQnVsayBUdW5pbmcgRHVtcCBpcyB0b28gc2hvcnQhICgke2UubGVuZ3RofSBieXRlcywgYXQgbGVhc3QgMzg0IGFyZSBleHBlY3RlZClgKTtyZXR1cm59Zm9yKGxldCBvPTA7bzwxMjg7bysrKXRoaXMucHJpdmF0ZVByb3BzLnR1bmluZ3Nbcl1bb109R3MoZVthKytdLGVbYSsrXSxlW2ErK10pO3AoYCVjQnVsayBUdW5pbmcgRHVtcCAlYyR7SX0lYyBQcm9ncmFtOiAlYyR7cn1gLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyxjLnJlY29nbml6ZWQpO2JyZWFrfWNhc2UgMjpjYXNlIDc6e2VbM109PT03JiZhKys7bGV0IHI9ZVthKytdLEk9ZVthKytdO2ZvcihsZXQgbz0wO288STtvKyspdGhpcy5wcml2YXRlUHJvcHMudHVuaW5nc1tyXVtlW2ErK11dPUdzKGVbYSsrXSxlW2ErK10sZVthKytdKTtwKGAlY1NpbmdsZSBOb3RlIFR1bmluZy4gUHJvZ3JhbTogJWMke3J9JWMgS2V5cyBhZmZlY3RlZDogJWMke0l9YCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQpO2JyZWFrfWNhc2UgOTpjYXNlIDg6e2xldCByPW5ldyBJbnQ4QXJyYXkoMTIpO2lmKGVbM109PT04KWZvcihsZXQgST0wO0k8MTI7SSsrKXJbSV09ZVs3K0ldLTY0O2Vsc2UgZm9yKGxldCBJPTA7STwyNDtJKz0yKXtsZXQgbz0oZVs3K0ldPDw3fGVbOCtJXSktODE5MjtyW0kvMl09TWF0aC5mbG9vcihvLzgxLjkyKX0oZVs0XSYxKT09PTEmJnRoaXMubWlkaUNoYW5uZWxzWzE0K0FdLnNldE9jdGF2ZVR1bmluZyhyKSwoZVs0XT4+MSYxKT09PTEmJnRoaXMubWlkaUNoYW5uZWxzWzE1K0FdLnNldE9jdGF2ZVR1bmluZyhyKTtmb3IobGV0IEk9MDtJPDc7SSsrKShlWzVdPj5JJjEpPT09MSYmdGhpcy5taWRpQ2hhbm5lbHNbNytJK0FdLnNldE9jdGF2ZVR1bmluZyhyKTtmb3IobGV0IEk9MDtJPDc7SSsrKShlWzZdPj5JJjEpPT09MSYmdGhpcy5taWRpQ2hhbm5lbHNbSStBXS5zZXRPY3RhdmVUdW5pbmcocik7cChgJWNNSURJIE9jdGF2ZSBTY2FsZSAke2VbM109PT04PyIoMSBieXRlKSI6IigyIGJ5dGVzKSJ9IHR1bmluZyB2aWEgVHVuaW5nOiAlYyR7ci5qb2luKCIgIil9YCxjLmluZm8sYy52YWx1ZSk7YnJlYWt9ZGVmYXVsdDpwKGAlY1VucmVjb2duaXplZCBNSURJIFR1bmluZyBzdGFuZGFyZCBtZXNzYWdlOiAlYyR7TUEoZSl9YCxjLndhcm4sYy51bnJlY29nbml6ZWQpO2JyZWFrfWJyZWFrfWRlZmF1bHQ6cChgJWNVbnJlY29nbml6ZWQgTUlESSBSZWFsdGltZS9ub24gcmVhbHRpbWUgbWVzc2FnZTogJWMke01BKGUpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKX1icmVhaztjYXNlIDY1OmlmKGVbMl09PT02NiYmZVszXT09PTE4KXtsZXQgYT1lWzddO2lmKGVbNF09PT02NHx8ZVs0XT09PTAmJmVbNl09PT0xMjcpe2lmKChlWzVdJjE2KT4wKXtsZXQgcj1bOSwwLDEsMiwzLDQsNSw2LDcsOCwxMCwxMSwxMiwxMywxNCwxNV1bZVs1XSYxNV0rQSxJPXRoaXMubWlkaUNoYW5uZWxzW3JdO3N3aXRjaChlWzZdKXtkZWZhdWx0OnMoKTticmVhaztjYXNlIDIxOntsZXQgbz1hPjAmJmVbNV0+PjQ+MDtJLnNldEdTRHJ1bXMobykscChgJWNDaGFubmVsICVjJHtyfSVjICR7bz8iaXMgbm93IGEgZHJ1bSBjaGFubmVsIjoibm93IGlzbid0IGEgZHJ1bSBjaGFubmVsIn0lYyB2aWE6ICVjJHtNQShlKX1gLGMuaW5mbyxjLnZhbHVlLGMucmVjb2duaXplZCxjLmluZm8sYy52YWx1ZSk7cmV0dXJufWNhc2UgMjI6e2xldCBvPWEtNjQ7SS5zZXRDdXN0b21Db250cm9sbGVyKElBLmNoYW5uZWxLZXlTaGlmdCxvKSxuKHIsbywia2V5IHNoaWZ0Iiwia2V5cyIpO3JldHVybn1jYXNlIDI4OntsZXQgbz1hO289PT0wPyhJLnJhbmRvbVBhbj0hMCxwKGAlY1JhbmRvbSBwYW4gaXMgc2V0IHRvICVjT04lYyBmb3IgJWMke3J9YCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnZhbHVlKSk6KEkucmFuZG9tUGFuPSExLEkuY29udHJvbGxlckNoYW5nZShTLnBhbixvKSk7YnJlYWt9Y2FzZSAzMzpJLmNvbnRyb2xsZXJDaGFuZ2UoUy5jaG9ydXNEZXB0aCxhKTticmVhaztjYXNlIDM0OkkuY29udHJvbGxlckNoYW5nZShTLnJldmVyYkRlcHRoLGEpO2JyZWFrO2Nhc2UgNjQ6Y2FzZSA2NTpjYXNlIDY2OmNhc2UgNjc6Y2FzZSA2ODpjYXNlIDY5OmNhc2UgNzA6Y2FzZSA3MTpjYXNlIDcyOmNhc2UgNzM6Y2FzZSA3NDpjYXNlIDc1OntsZXQgbz1lLmxlbmd0aC05LGc9bmV3IEludDhBcnJheSgxMik7Zm9yKGxldCBkPTA7ZDxvO2QrKylnW2RdPWVbZCs3XS02NDtJLnNldE9jdGF2ZVR1bmluZyhnKTtsZXQgQj1hLTY0O24ocixnLmpvaW4oIiAiKSwib2N0YXZlIHNjYWxlIHR1bmluZyIsImNlbnRzIiksSS5zZXRUdW5pbmcoQik7YnJlYWt9fXJldHVybn1lbHNlIGlmKChlWzVdJjMyKT4wKXtsZXQgcj1bOSwwLDEsMiwzLDQsNSw2LDcsOCwxMCwxMSwxMiwxMywxNCwxNV1bZVs1XSYxNV0rQSxJPXRoaXMubWlkaUNoYW5uZWxzW3JdLG89YS02NCxnPW8vNjQsQj1hLzEyOCxkPShoLEMsUT0hMSk9Pntzd2l0Y2goZVs2XSYxNSl7Y2FzZSAwOmg9PT1tQStqLnBpdGNoV2hlZWw/KEkuY29udHJvbGxlckNoYW5nZShTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMCksSS5jb250cm9sbGVyQ2hhbmdlKFMucmVnaXN0ZXJlZFBhcmFtZXRlckxTQiwwKSxJLmNvbnRyb2xsZXJDaGFuZ2UoUy5kYXRhRW50cnlNU0IsTWF0aC5mbG9vcihvKSkpOihJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLmZpbmVUdW5lLG8qMTAwLFEpLG4ocixvLGAke0N9IHBpdGNoIGNvbnRyb2xgLCJzZW1pdG9uZXMiKSk7YnJlYWs7Y2FzZSAxOkkuc3lzRXhNb2R1bGF0b3JzLnNldE1vZHVsYXRvcihoLGkuaW5pdGlhbEZpbHRlckZjLGcqOTYwMCxRKSxuKHIsZyo5NjAwLGAke0N9IHBpdGNoIGNvbnRyb2xgLCJjZW50cyIpO2JyZWFrO2Nhc2UgMjpJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLmluaXRpYWxBdHRlbnVhdGlvbixnKjk2MCxRKSxuKHIsZyo5NjAsYCR7Q30gYW1wbGl0dWRlYCwiY0IiKTticmVhaztjYXNlIDQ6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS52aWJMZm9Ub1BpdGNoLEIqNjAwLFEpLG4ocixCKjYwMCxgJHtDfSBMRk8xIHBpdGNoIGRlcHRoYCwiY2VudHMiKTticmVhaztjYXNlIDU6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS52aWJMZm9Ub0ZpbHRlckZjLEIqMjQwMCxRKSxuKHIsQioyNDAwLGAke0N9IExGTzEgZmlsdGVyIGRlcHRoYCwiY2VudHMiKTticmVhaztjYXNlIDY6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS52aWJMZm9Ub1ZvbHVtZSxnKjk2MCxRKSxuKHIsZyo5NjAsYCR7Q30gTEZPMSBhbXBsaXR1ZGUgZGVwdGhgLCJjQiIpO2JyZWFrO2Nhc2UgODpJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLm1vZExmb1RvUGl0Y2gsQio2MDAsUSksbihyLEIqNjAwLGAke0N9IExGTzIgcGl0Y2ggZGVwdGhgLCJjZW50cyIpO2JyZWFrO2Nhc2UgOTpJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLm1vZExmb1RvRmlsdGVyRmMsQioyNDAwLFEpLG4ocixCKjI0MDAsYCR7Q30gTEZPMiBmaWx0ZXIgZGVwdGhgLCJjZW50cyIpO2JyZWFrO2Nhc2UgMTA6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS5tb2RMZm9Ub1ZvbHVtZSxnKjk2MCxRKSxuKHIsZyo5NjAsYCR7Q30gTEZPMiBhbXBsaXR1ZGUgZGVwdGhgLCJjQiIpO2JyZWFrfX07c3dpdGNoKGVbNl0mMjQwKXtkZWZhdWx0OnMoKTticmVhaztjYXNlIDA6ZChTLm1vZHVsYXRpb25XaGVlbCwibW9kIHdoZWVsIik7YnJlYWs7Y2FzZSAxNjpkKG1BK2oucGl0Y2hXaGVlbCwicGl0Y2ggd2hlZWwiLCEwKTticmVhaztjYXNlIDMyOmQobUErai5jaGFubmVsUHJlc3N1cmUsImNoYW5uZWwgcHJlc3N1cmUiKTticmVhaztjYXNlIDQ4OmQobUErai5wb2x5UHJlc3N1cmUsInBvbHkgcHJlc3N1cmUiKTticmVha31yZXR1cm59ZWxzZSBpZihlWzVdPT09MCl7c3dpdGNoKGVbNl0pe2RlZmF1bHQ6cygpO2JyZWFrO2Nhc2UgMTI3OmE9PT0wPyhwKCIlY0dTIFJlc2V0IHJlY2VpdmVkISIsYy5pbmZvKSx0aGlzLnJlc2V0QWxsQ29udHJvbGxlcnMoITEpLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtaWRpU3lzdGVtIiwiZ3MiKSk6YT09PTEyNyYmKHAoIiVjR1Mgc3lzdGVtIG9mZiwgc3dpdGNoaW5nIHRvIEdNMiIsYy5pbmZvKSx0aGlzLnJlc2V0QWxsQ29udHJvbGxlcnMoITEpLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtaWRpU3lzdGVtIiwiZ20yIikpO2JyZWFrO2Nhc2UgNjpwKGAlY1JvbGFuZCBHUyBNYXN0ZXIgUGFuIHNldCB0bzogJWMke2F9JWMgd2l0aDogJWMke01BKGUpfWAsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtYXN0ZXJQYW4iLChhLTY0KS82NCk7YnJlYWs7Y2FzZSA0OnAoYCVjUm9sYW5kIEdTIE1hc3RlciBWb2x1bWUgc2V0IHRvOiAlYyR7YX0lYyB3aXRoOiAlYyR7TUEoZSl9YCxjLmluZm8sYy52YWx1ZSxjLmluZm8sYy52YWx1ZSksdGhpcy5zZXRNSURJVm9sdW1lKGEvMTI3KTticmVhaztjYXNlIDU6e2xldCByPWEtNjQ7cChgJWNSb2xhbmQgR1MgTWFzdGVyIEtleS1TaGlmdCBzZXQgdG86ICVjJHtyfSVjIHdpdGg6ICVjJHtNQShlKX1gLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyxjLnZhbHVlKSx0aGlzLnNldE1hc3RlclR1bmluZyhyKjEwMCk7YnJlYWt9fXJldHVybn1lbHNlIGlmKGVbNV09PT0xKXN3aXRjaChlWzZdKXtkZWZhdWx0OnMoKTticmVhaztjYXNlIDA6e2xldCByPWVlKGUsMTYsNyk7cChgJWNHUyBQYXRjaCBuYW1lOiAlYyR7cn1gLGMuaW5mbyxjLnZhbHVlKTticmVha31jYXNlIDUxOnAoYCVjR1MgUmV2ZXJiIGxldmVsOiAlYyR7YX1gLGMuaW5mbyxjLnZhbHVlKSx0aGlzLnByaXZhdGVQcm9wcy5yZXZlcmJTZW5kPWEvNjQ7YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTU6cChgJWNVbnN1cHBvcnRlZCBHUyBSZXZlcmIgUGFyYW1ldGVyOiAlYyR7ZVs2XS50b1N0cmluZygxNil9YCxjLndhcm4sYy51bnJlY29nbml6ZWQpO2JyZWFrO2Nhc2UgNTg6cChgJWNHUyBDaG9ydXMgbGV2ZWw6ICVjJHthfWAsYy5pbmZvLGMudmFsdWUpLHRoaXMucHJpdmF0ZVByb3BzLmNob3J1c1NlbmQ9YS82NDticmVhaztjYXNlIDU2OmNhc2UgNTc6Y2FzZSA1OTpjYXNlIDYwOmNhc2UgNjE6Y2FzZSA2MjpjYXNlIDYzOmNhc2UgNjQ6cChgJWNVbnN1cHBvcnRlZCBHUyBDaG9ydXMgUGFyYW1ldGVyOiAlYyR7ZVs2XS50b1N0cmluZygxNil9YCxjLndhcm4sYy51bnJlY29nbml6ZWQpO2JyZWFrfX1lbHNlIHMoKTtyZXR1cm59ZWxzZSBpZihlWzJdPT09NjkmJmVbM109PT0xOCl7aWYoZVs0XT09PTE2JiZlWzZdPT09MClpZihlWzVdPT09MCl7bGV0IGE9bmV3IFVpbnQ4QXJyYXkoZS5zbGljZSg3LGUubGVuZ3RoLTIpKTt0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoInN5bnRoRGlzcGxheSIse2Rpc3BsYXlEYXRhOmEsZGlzcGxheVR5cGU6aG4uc291bmRDYW52YXNUZXh0fSl9ZWxzZSBpZihlWzVdPT09MSl7bGV0IGE9bmV3IFVpbnQ4QXJyYXkoZS5zbGljZSg3LGUubGVuZ3RoLTMpKTt0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoInN5bnRoRGlzcGxheSIse2Rpc3BsYXlEYXRhOmEsZGlzcGxheVR5cGU6aG4uc291bmRDYW52YXNEb3RNYXRyaXh9KSxwKGAlY1JvbGFuZCBTQyBEaXNwbGF5IERvdCBNYXRyaXggdmlhOiAlYyR7TUEoZSl9YCxjLmluZm8sYy52YWx1ZSl9ZWxzZSBzKCl9ZWxzZSBpZihlWzJdPT09MjImJmVbM109PT0xOCYmZVs0XT09PTE2KXt0aGlzLnNldE1JRElWb2x1bWUoZVs3XS8xMDApLHAoYCVjUm9sYW5kIE1hc3RlciBWb2x1bWUgY29udHJvbCBzZXQgdG86ICVjJHtlWzddfSVjIHZpYTogJWMke01BKGUpfWAsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpO3JldHVybn1lbHNle3AoYCVjVW5yZWNvZ25pemVkIFJvbGFuZCBTeXNFeDogJWMke01BKGUpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKTtyZXR1cm59YnJlYWs7Y2FzZSA2NzppZihlWzJdPT09NzYpaWYoZVszXT09PTAmJmVbNF09PT0wKXN3aXRjaChlWzVdKXtjYXNlIDQ6e2xldCBhPWVbNl07dGhpcy5zZXRNSURJVm9sdW1lKGEvMTI3KSxwKGAlY1hHIG1hc3RlciB2b2x1bWUuIFZvbHVtZTogJWMke2F9YCxjLmluZm8sYy5yZWNvZ25pemVkKTticmVha31jYXNlIDY6e2xldCBhPWVbNl0tNjQ7dGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoInRyYW5zcG9zaXRpb24iLGEpLHAoYCVjWEcgbWFzdGVyIHRyYW5zcG9zZS4gVm9sdW1lOiAlYyR7YX1gLGMuaW5mbyxjLnJlY29nbml6ZWQpO2JyZWFrfWNhc2UgMTI2OnAoIiVjWEcgc3lzdGVtIG9uIixjLmluZm8pLHRoaXMucmVzZXRBbGxDb250cm9sbGVycyghMSksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLCJ4ZyIpO2JyZWFrfWVsc2UgaWYoZVszXT09PTgpe2lmKCFmQS5pc1N5c3RlbVhHKHRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMubWlkaVN5c3RlbSkpcmV0dXJuO2xldCBhPWVbNF0rQTtpZihhPj10aGlzLm1pZGlDaGFubmVscy5sZW5ndGgpcmV0dXJuO2xldCByPXRoaXMubWlkaUNoYW5uZWxzW2FdLEk9ZVs2XTtzd2l0Y2goZVs1XSl7Y2FzZSAxOnIuY29udHJvbGxlckNoYW5nZShTLmJhbmtTZWxlY3QsSSk7YnJlYWs7Y2FzZSAyOnIuY29udHJvbGxlckNoYW5nZShTLmJhbmtTZWxlY3RMU0IsSSk7YnJlYWs7Y2FzZSAzOnIucHJvZ3JhbUNoYW5nZShJKTticmVhaztjYXNlIDg6e2lmKHIuZHJ1bUNoYW5uZWwpcmV0dXJuO3IuY2hhbm5lbFRyYW5zcG9zZUtleVNoaWZ0PUktNjQ7YnJlYWt9Y2FzZSAxMTpyLmNvbnRyb2xsZXJDaGFuZ2UoUy5tYWluVm9sdW1lLEkpO2JyZWFrO2Nhc2UgMTQ6e2xldCBvPUk7bz09PTA/KHIucmFuZG9tUGFuPSEwLHAoYCVjUmFuZG9tIHBhbiBpcyBzZXQgdG8gJWNPTiVjIGZvciAlYyR7YX1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMudmFsdWUpKTpyLmNvbnRyb2xsZXJDaGFuZ2UoUy5wYW4sbyk7YnJlYWt9Y2FzZSAxOTpyLmNvbnRyb2xsZXJDaGFuZ2UoUy5yZXZlcmJEZXB0aCxJKTticmVhaztjYXNlIDE4OnIuY29udHJvbGxlckNoYW5nZShTLmNob3J1c0RlcHRoLEkpO2JyZWFrO2RlZmF1bHQ6cChgJWNVbnJlY29nbml6ZWQgWWFtYWhhIFhHIFBhcnQgU2V0dXA6ICVjJHtlWzVdLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKX19ZWxzZSBpZihlWzNdPT09NiYmZVs0XT09PTApe2xldCBhPW5ldyBVaW50OEFycmF5KGUuc2xpY2UoNSxlLmxlbmd0aC0xKSk7dGhpcy5wcml2YXRlUHJvcHMuY2FsbEV2ZW50KCJzeW50aERpc3BsYXkiLHtkaXNwbGF5RGF0YTphLGRpc3BsYXlUeXBlOmhuLnlhbWFoYVhHVGV4dH0pfWVsc2UgZkEuaXNTeXN0ZW1YRyh0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLm1pZGlTeXN0ZW0pJiZwKGAlY1VucmVjb2duaXplZCBZYW1haGEgWEcgU3lzRXg6ICVjJHtNQShlKX1gLGMud2FybixjLnVucmVjb2duaXplZCk7ZWxzZSBmQS5pc1N5c3RlbVhHKHRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMubWlkaVN5c3RlbSkmJnAoYCVjVW5yZWNvZ25pemVkIFlhbWFoYSBTeXNFeDogJWMke01BKGUpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKTticmVha319dmFyIFJzPWNsYXNzIHFue3BhdGNoO2xvY2tQcmVzZXQ7bG9ja2VkU3lzdGVtO21pZGlDb250cm9sbGVycztsb2NrZWRDb250cm9sbGVycztjdXN0b21Db250cm9sbGVycztsb2NrVmlicmF0bztjaGFubmVsVmlicmF0bztjaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ7Y2hhbm5lbE9jdGF2ZVR1bmluZztpc011dGVkO2RydW1DaGFubmVsO2NoYW5uZWxOdW1iZXI7Y29uc3RydWN0b3IoQSx0LG4scyxhLHIsSSxvLGcsQixkLGgsQyl7dGhpcy5wYXRjaD1BLHRoaXMubG9ja1ByZXNldD10LHRoaXMubG9ja2VkU3lzdGVtPW4sdGhpcy5taWRpQ29udHJvbGxlcnM9cyx0aGlzLmxvY2tlZENvbnRyb2xsZXJzPWEsdGhpcy5jdXN0b21Db250cm9sbGVycz1yLHRoaXMubG9ja1ZpYnJhdG89SSx0aGlzLmNoYW5uZWxWaWJyYXRvPW8sdGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ9Zyx0aGlzLmNoYW5uZWxPY3RhdmVUdW5pbmc9Qix0aGlzLmlzTXV0ZWQ9ZCx0aGlzLmRydW1DaGFubmVsPWgsdGhpcy5jaGFubmVsTnVtYmVyPUN9c3RhdGljIGNvcHlGcm9tKEEpe3JldHVybiBuZXcgcW4oey4uLkEucGF0Y2h9LEEubG9ja1ByZXNldCxBLmxvY2tlZFN5c3RlbSxBLm1pZGlDb250cm9sbGVycy5zbGljZSgpLFsuLi5BLmxvY2tlZENvbnRyb2xsZXJzXSxBLmN1c3RvbUNvbnRyb2xsZXJzLnNsaWNlKCksQS5sb2NrVmlicmF0byx7Li4uQS5jaGFubmVsVmlicmF0b30sQS5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQsQS5jaGFubmVsT2N0YXZlVHVuaW5nLEEuaXNNdXRlZCxBLmRydW1DaGFubmVsLEEuY2hhbm5lbE51bWJlcil9c3RhdGljIGNyZWF0ZShBLHQpe2xldCBuPUEubWlkaUNoYW5uZWxzW3RdO3JldHVybiBuZXcgcW4oey4uLm4ucGF0Y2gsbmFtZTpuPy5wcmVzZXQ/Lm5hbWU/PyJ1bmRlZmluZWQifSxuLmxvY2tQcmVzZXQsbi5sb2NrZWRTeXN0ZW0sbi5taWRpQ29udHJvbGxlcnMuc2xpY2UoKSxbLi4ubi5sb2NrZWRDb250cm9sbGVyc10sbi5jdXN0b21Db250cm9sbGVycy5zbGljZSgpLG4ubG9ja0dTTlJQTlBhcmFtcyx7Li4ubi5jaGFubmVsVmlicmF0b30sbi5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQsbi5jaGFubmVsT2N0YXZlVHVuaW5nLnNsaWNlKCksbi5pc011dGVkLG4uZHJ1bUNoYW5uZWwsdCl9YXBwbHkoQSl7bGV0IHQ9QS5taWRpQ2hhbm5lbHNbdGhpcy5jaGFubmVsTnVtYmVyXTt0Lm11dGVDaGFubmVsKHRoaXMuaXNNdXRlZCksdC5zZXREcnVtcyh0aGlzLmRydW1DaGFubmVsKSx0Lm1pZGlDb250cm9sbGVycy5zZXQodGhpcy5taWRpQ29udHJvbGxlcnMpLHQubG9ja2VkQ29udHJvbGxlcnM9dGhpcy5sb2NrZWRDb250cm9sbGVycyx0LmN1c3RvbUNvbnRyb2xsZXJzLnNldCh0aGlzLmN1c3RvbUNvbnRyb2xsZXJzKSx0LnVwZGF0ZUNoYW5uZWxUdW5pbmcoKSx0LmNoYW5uZWxWaWJyYXRvPXRoaXMuY2hhbm5lbFZpYnJhdG8sdC5sb2NrR1NOUlBOUGFyYW1zPXRoaXMubG9ja1ZpYnJhdG8sdC5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ9dGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQsdC5jaGFubmVsT2N0YXZlVHVuaW5nPXRoaXMuY2hhbm5lbE9jdGF2ZVR1bmluZyx0LnNldFByZXNldExvY2soITEpLHQuc2V0UGF0Y2godGhpcy5wYXRjaCksdC5zZXRQcmVzZXRMb2NrKHRoaXMubG9ja1ByZXNldCksdC5sb2NrZWRTeXN0ZW09dGhpcy5sb2NrZWRTeXN0ZW19fTt2YXIgQXI9Y2xhc3N7a2V5TWFwcGluZ3M9W107YWRkTWFwcGluZyhlLEEsdCl7dGhpcy5rZXlNYXBwaW5nc1tlXT8/PVtdLHRoaXMua2V5TWFwcGluZ3NbZV1bQV09dH1kZWxldGVNYXBwaW5nKGUsQSl7dGhpcy5rZXlNYXBwaW5nc1tlXT8uW0FdIT09dm9pZCAwJiYodGhpcy5rZXlNYXBwaW5nc1tlXVtBXT12b2lkIDApfWNsZWFyTWFwcGluZ3MoKXt0aGlzLmtleU1hcHBpbmdzPVtdfXNldE1hcHBpbmdzKGUpe3RoaXMua2V5TWFwcGluZ3M9ZX1nZXRNYXBwaW5ncygpe3JldHVybiB0aGlzLmtleU1hcHBpbmdzfWdldFZlbG9jaXR5KGUsQSl7cmV0dXJuIHRoaXMua2V5TWFwcGluZ3NbZV0/LltBXT8udmVsb2NpdHk/Py0xfWdldEdhaW4oZSxBKXtyZXR1cm4gdGhpcy5rZXlNYXBwaW5nc1tlXT8uW0FdPy5nYWluPz8xfWhhc092ZXJyaWRlUGF0Y2goZSxBKXtsZXQgdD10aGlzLmtleU1hcHBpbmdzW2VdPy5bQV0/LnBhdGNoPy5iYW5rTVNCO3JldHVybiB0IT09dm9pZCAwJiZ0Pj0wfWdldFBhdGNoKGUsQSl7bGV0IHQ9dGhpcy5rZXlNYXBwaW5nc1tlXT8uW0FdO2lmKHQpcmV0dXJuIHQucGF0Y2g7dGhyb3cgbmV3IEVycm9yKCJObyBtb2RpZmllci4iKX19LHJzPWNsYXNzIEtue2NoYW5uZWxTbmFwc2hvdHM7a2V5TWFwcGluZ3M7bWFzdGVyUGFyYW1ldGVycztjb25zdHJ1Y3RvcihBLHQsbil7dGhpcy5jaGFubmVsU25hcHNob3RzPUEsdGhpcy5tYXN0ZXJQYXJhbWV0ZXJzPXQsdGhpcy5rZXlNYXBwaW5ncz1ufXN0YXRpYyBjcmVhdGUoQSl7bGV0IHQ9QS5taWRpQ2hhbm5lbHMubWFwKChuLHMpPT5Scy5jcmVhdGUoQSxzKSk7cmV0dXJuIG5ldyBLbih0LEEuZ2V0QWxsTWFzdGVyUGFyYW1ldGVycygpLEEua2V5TW9kaWZpZXJNYW5hZ2VyLmdldE1hcHBpbmdzKCkpfXN0YXRpYyBjb3B5RnJvbShBKXtyZXR1cm4gbmV3IEtuKEEuY2hhbm5lbFNuYXBzaG90cy5tYXAodD0+UnMuY29weUZyb20odCkpLHsuLi5BLm1hc3RlclBhcmFtZXRlcnN9LFsuLi5BLmtleU1hcHBpbmdzXSl9YXBwbHkoQSl7Zm9yKE9iamVjdC5lbnRyaWVzKHRoaXMubWFzdGVyUGFyYW1ldGVycykuZm9yRWFjaCgoW24sc10pPT57QS5zZXRNYXN0ZXJQYXJhbWV0ZXIobixzKX0pLEEua2V5TW9kaWZpZXJNYW5hZ2VyLnNldE1hcHBpbmdzKHRoaXMua2V5TWFwcGluZ3MpO0EubWlkaUNoYW5uZWxzLmxlbmd0aDx0aGlzLmNoYW5uZWxTbmFwc2hvdHMubGVuZ3RoOylBLmNyZWF0ZU1JRElDaGFubmVsKCk7dGhpcy5jaGFubmVsU25hcHNob3RzLmZvckVhY2gobj0+e24uYXBwbHkoQSl9KX19LGVyPXttYXN0ZXJHYWluOl9hLG1hc3RlclBhbjowLHZvaWNlQ2FwOlhhLGludGVycG9sYXRpb25UeXBlOnZ0Lmhlcm1pdGUsbWlkaVN5c3RlbTpPcyxtb25vcGhvbmljUmV0cmlnZ2VyTW9kZTohMSxyZXZlcmJHYWluOjEsY2hvcnVzR2FpbjoxLGJsYWNrTUlESU1vZGU6ITEsdHJhbnNwb3NpdGlvbjowLGRldmljZUlEOkJlfSx0cj1jbGFzc3t0dW5pbmdzPVtdO21hc3RlclBhcmFtZXRlcnM9ZXI7bWlkaVZvbHVtZT0xO3JldmVyYlNlbmQ9MTtjaG9ydXNTZW5kPTE7cGFuTGVmdD0uNTtwYW5SaWdodD0uNTtkZWZhdWx0UHJlc2V0O2RydW1QcmVzZXQ7dm9sdW1lRW52ZWxvcGVTbW9vdGhpbmdGYWN0b3I7cGFuU21vb3RoaW5nRmFjdG9yO2ZpbHRlclNtb290aGluZ0ZhY3RvcjtldmVudENhbGxiYWNrSGFuZGxlcjtnZXRWb2ljZXM7dm9pY2VLaWxsaW5nO2NhY2hlZFZvaWNlcz1bXTtjb25zdHJ1Y3RvcihlLEEsdCxuLHMsYSl7dGhpcy5ldmVudENhbGxiYWNrSGFuZGxlcj1lLHRoaXMuZ2V0Vm9pY2VzPUEsdGhpcy52b2ljZUtpbGxpbmc9dCx0aGlzLnZvbHVtZUVudmVsb3BlU21vb3RoaW5nRmFjdG9yPW4sdGhpcy5wYW5TbW9vdGhpbmdGYWN0b3I9cyx0aGlzLmZpbHRlclNtb290aGluZ0ZhY3Rvcj1hO2ZvcihsZXQgcj0wO3I8MTI4O3IrKyl0aGlzLnR1bmluZ3MucHVzaChbXSl9Y2FsbEV2ZW50KGUsQSl7dGhpcy5ldmVudENhbGxiYWNrSGFuZGxlcihlLEEpfX07ZnVuY3Rpb24gcG4oZSxBLHQpe2lmKHQ8ZSlyZXR1cm4gMDtsZXQgbj0odC1lKS8oMS9BKSsuMjU7cmV0dXJuIE1hdGguYWJzKG4tfn4obisuNSkpKjQtMX12YXIgbnI9Y2xhc3MgT257c3RhdGljIGdldFNhbXBsZShBLHQsbil7bGV0IHM9QS5jdXJyZW50VHVuaW5nQ2FsY3VsYXRlZCpBLnNhbXBsZS5wbGF5YmFja1N0ZXA7aWYocz09PTEpe09uLmdldFNhbXBsZU5lYXJlc3QoQSx0LHMpO3JldHVybn1zd2l0Y2gobil7Y2FzZSB2dC5oZXJtaXRlOnRoaXMuZ2V0U2FtcGxlSGVybWl0ZShBLHQscyk7cmV0dXJuO2Nhc2UgdnQubGluZWFyOmRlZmF1bHQ6dGhpcy5nZXRTYW1wbGVMaW5lYXIoQSx0LHMpO3JldHVybjtjYXNlIHZ0Lm5lYXJlc3ROZWlnaGJvcjpPbi5nZXRTYW1wbGVOZWFyZXN0KEEsdCxzKTtyZXR1cm59fXN0YXRpYyBnZXRTYW1wbGVMaW5lYXIoQSx0LG4pe2xldCBzPUEuc2FtcGxlLGE9cy5jdXJzb3Iscj1zLnNhbXBsZURhdGE7aWYocy5pc0xvb3Bpbmcpe2xldCBJPXMubG9vcEVuZC1zLmxvb3BTdGFydDtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKDthPj1zLmxvb3BFbmQ7KWEtPUk7bGV0IGc9fn5hLEI9ZysxO2Zvcig7Qj49cy5sb29wRW5kOylCLT1JO2xldCBkPWEtZyxoPXJbQl0sQz1yW2ddO3Rbb109QysoaC1DKSpkLGErPW59fWVsc2UgZm9yKGxldCBJPTA7STx0Lmxlbmd0aDtJKyspe2xldCBvPX5+YSxnPW8rMTtpZihnPj1zLmVuZCl7QS5maW5pc2hlZD0hMDtyZXR1cm59bGV0IEI9YS1vLGQ9cltnXSxoPXJbb107dFtJXT1oKyhkLWgpKkIsYSs9bn1BLnNhbXBsZS5jdXJzb3I9YX1zdGF0aWMgZ2V0U2FtcGxlTmVhcmVzdChBLHQsbil7bGV0IHM9QS5zYW1wbGUsYT1zLmN1cnNvcixyPXMuc2FtcGxlRGF0YTtpZihzLmlzTG9vcGluZyl7bGV0IEk9cy5sb29wRW5kLXMubG9vcFN0YXJ0O2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtmb3IoO2E+PXMubG9vcEVuZDspYS09STtsZXQgZz1+fmErMTtmb3IoO2c+PXMubG9vcEVuZDspZy09STt0W29dPXJbZ10sYSs9bn19ZWxzZSBmb3IobGV0IEk9MDtJPHQubGVuZ3RoO0krKyl7bGV0IG89fn5hKzE7aWYobz49cy5lbmQpe0EuZmluaXNoZWQ9ITA7cmV0dXJufXRbSV09cltvXSxhKz1ufXMuY3Vyc29yPWF9c3RhdGljIGdldFNhbXBsZUhlcm1pdGUoQSx0LG4pe2xldCBzPUEuc2FtcGxlLGE9cy5jdXJzb3Iscj1zLnNhbXBsZURhdGE7aWYocy5pc0xvb3Bpbmcpe2xldCBJPXMubG9vcEVuZC1zLmxvb3BTdGFydDtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKDthPj1zLmxvb3BFbmQ7KWEtPUk7bGV0IGc9fn5hLEI9ZysxLGQ9ZysyLGg9ZyszLEM9YS1nO0I+PXMubG9vcEVuZCYmKEItPUkpLGQ+PXMubG9vcEVuZCYmKGQtPUkpLGg+PXMubG9vcEVuZCYmKGgtPUkpO2xldCBRPXJbZ10sbT1yW0JdLHk9cltkXSxGPXJbaF0saz0oeS1RKSouNSxEPW0teSx2PWsrRCxMPXYrRCsoRi1tKSouNSxFPXYrTDt0W29dPSgoTCpDLUUpKkMraykqQyttLGErPW59fWVsc2UgZm9yKGxldCBJPTA7STx0Lmxlbmd0aDtJKyspe2xldCBvPX5+YSxnPW8rMSxCPW8rMixkPW8rMyxoPWEtbztpZihnPj1zLmVuZHx8Qj49cy5lbmR8fGQ+PXMuZW5kKXtBLmZpbmlzaGVkPSEwO3JldHVybn1sZXQgQz1yW29dLFE9cltnXSxtPXJbQl0seT1yW2RdLEY9KG0tQykqLjUsaz1RLW0sRD1GK2ssdj1EK2srKHktUSkqLjUsTD1EK3Y7dFtJXT0oKHYqaC1MKSpoK0YpKmgrUSxhKz1ufUEuc2FtcGxlLmN1cnNvcj1hfX07ZnVuY3Rpb24gc3IoZSxBLHQsbixzLGEscixJLG8sZyl7aWYoZS5pc0luUmVsZWFzZXx8QT49ZS5yZWxlYXNlU3RhcnRUaW1lJiYoZS5pc0luUmVsZWFzZT0hMCxiZS5zdGFydFJlbGVhc2UoZSksX2Uuc3RhcnRSZWxlYXNlKGUpLGUuc2FtcGxlLmxvb3BpbmdNb2RlPT09MyYmKGUuc2FtcGxlLmlzTG9vcGluZz0hMSkpLGUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmluaXRpYWxBdHRlbnVhdGlvbl0+MjUwMClyZXR1cm4gZS5pc0luUmVsZWFzZSYmKGUuZmluaXNoZWQ9ITApLGUuZmluaXNoZWQ7bGV0IEI9ZS50YXJnZXRLZXksZD1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5maW5lVHVuZV0rdGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nW2UubWlkaU5vdGVdK3RoaXMuY2hhbm5lbFR1bmluZ0NlbnRzLGg9ZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuY29hcnNlVHVuZV0sQz10aGlzLnN5bnRoUHJvcHMudHVuaW5nc1t0aGlzLnByZXNldD8ucHJvZ3JhbT8/MF0/LltlLnJlYWxLZXldO2lmKEM/LmNlbnRUdW5pbmcmJihCPUMubWlkaU5vdGUsZCs9Qy5jZW50VHVuaW5nKSxlLnBvcnRhbWVudG9Gcm9tS2V5Pi0xKXtsZXQgJD1NYXRoLm1pbigoQS1lLnN0YXJ0VGltZSkvZS5wb3J0YW1lbnRvRHVyYXRpb24sMSksVj1CLWUucG9ydGFtZW50b0Zyb21LZXk7aC09ViooMS0kKX1kKz0oQi1lLnNhbXBsZS5yb290S2V5KSplLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5zY2FsZVR1bmluZ107bGV0IFE9MCxtPTAseT1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS52aWJMZm9Ub1BpdGNoXSxGPWUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnZpYkxmb1RvVm9sdW1lXSxrPWUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnZpYkxmb1RvRmlsdGVyRmNdO2lmKHkhPT0wfHxGIT09MHx8ayE9PTApe2xldCAkPWUuc3RhcnRUaW1lK1FlKGUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmRlbGF5VmliTEZPXSksVj1ObihlLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5mcmVxVmliTEZPXSkscT1wbigkLFYsQSk7ZCs9cSooeSp0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLm1vZHVsYXRpb25NdWx0aXBsaWVyXSksbSs9LXEqRixRKz1xKmt9bGV0IEQ9ZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kubW9kTGZvVG9QaXRjaF0sdj1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5tb2RMZm9Ub1ZvbHVtZV0sTD1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5tb2RMZm9Ub0ZpbHRlckZjXTtpZihEIT09MHx8TCE9PTB8fHYhPT0wKXtsZXQgJD1lLnN0YXJ0VGltZStRZShlLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWxheU1vZExGT10pLFY9Tm4oZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuZnJlcU1vZExGT10pLHE9cG4oJCxWLEEpO2QrPXEqKEQqdGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5tb2R1bGF0aW9uTXVsdGlwbGllcl0pLG0rPS1xKnYsUSs9cSpMfWlmKHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg+MCl7bGV0ICQ9cG4oZS5zdGFydFRpbWUrdGhpcy5jaGFubmVsVmlicmF0by5kZWxheSx0aGlzLmNoYW5uZWxWaWJyYXRvLnJhdGUsQSk7JCYmKGQrPSQqdGhpcy5jaGFubmVsVmlicmF0by5kZXB0aCl9bGV0IEU9ZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kubW9kRW52VG9QaXRjaF0sWD1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5tb2RFbnZUb0ZpbHRlckZjXTtpZihYIT09MHx8RSE9PTApe2xldCAkPV9lLmdldFZhbHVlKGUsQSk7USs9JCpYLGQrPSQqRX1tLT1lLnJlc29uYW5jZU9mZnNldDtsZXQgTz1+fihkK2gqMTAwKTtPIT09ZS5jdXJyZW50VHVuaW5nQ2VudHMmJihlLmN1cnJlbnRUdW5pbmdDZW50cz1PLGUuY3VycmVudFR1bmluZ0NhbGN1bGF0ZWQ9TWF0aC5wb3coMixPLzEyMDApKTtsZXQgbkE9bmV3IEZsb2F0MzJBcnJheShnKTtyZXR1cm4gZS5zYW1wbGUubG9vcGluZ01vZGU9PT0yJiYhZS5pc0luUmVsZWFzZT8oYmUuYXBwbHkoZSxuQSxtLHRoaXMuc3ludGhQcm9wcy52b2x1bWVFbnZlbG9wZVNtb290aGluZ0ZhY3RvciksZS5maW5pc2hlZCk6KG5yLmdldFNhbXBsZShlLG5BLHRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmludGVycG9sYXRpb25UeXBlKSxYdC5hcHBseShlLG5BLFEsdGhpcy5zeW50aFByb3BzLmZpbHRlclNtb290aGluZ0ZhY3RvciksYmUuYXBwbHkoZSxuQSxtLHRoaXMuc3ludGhQcm9wcy52b2x1bWVFbnZlbG9wZVNtb290aGluZ0ZhY3RvciksdGhpcy5wYW5BbmRNaXhWb2ljZShlLG5BLHQsbixzLGEscixJLG8pLGUuZmluaXNoZWQpfXZhciB1ZT17cGl0Y2hXaGVlbFJhbmdlOjAsZmluZVR1bmluZzoxLGNvYXJzZVR1bmluZzoyLG1vZHVsYXRpb25EZXB0aDo1LHJlc2V0UGFyYW1ldGVyczoxNjM4M30sWmU9e3BhcnRQYXJhbWV0ZXI6MSxhd2UzMjoxMjcsU0YyOjEyMH0sT2U9e3ZpYnJhdG9SYXRlOjgsdmlicmF0b0RlcHRoOjksdmlicmF0b0RlbGF5OjEwLFRWRkZpbHRlckN1dG9mZjozMixUVkZGaWx0ZXJSZXNvbmFuY2U6MzMsRUdBdHRhY2tUaW1lOjk5LEVHUmVsZWFzZVRpbWU6MTAyfTtmdW5jdGlvbiBhcihlKXt0aGlzLm1pZGlDb250cm9sbGVyc1tTLmRhdGFFbnRyeU1TQl09ZTw8NztsZXQgQT0oKT0+e3RoaXMuY2hhbm5lbFZpYnJhdG8uZGVsYXk9PT0wJiZ0aGlzLmNoYW5uZWxWaWJyYXRvLnJhdGU9PT0wJiZ0aGlzLmNoYW5uZWxWaWJyYXRvLmRlcHRoPT09MCYmKHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg9NTAsdGhpcy5jaGFubmVsVmlicmF0by5yYXRlPTgsdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT0uNil9LHQ9KG4scyxhKT0+e2EubGVuZ3RoPjAmJihhPSIgIithKSxwKGAlYyR7bn0gZm9yICVjJHt0aGlzLmNoYW5uZWxOdW1iZXJ9JWMgaXMgbm93IHNldCB0byAlYyR7c30lYyR7YX0uYCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyl9O3N3aXRjaCh0aGlzLmRhdGFFbnRyeVN0YXRlKXtkZWZhdWx0OmNhc2UgWUEuSWRsZTpicmVhaztjYXNlIFlBLk5SUEZpbmU6e2lmKHRoaXMubG9ja0dTTlJQTlBhcmFtcylyZXR1cm47bGV0IG49dGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCXT4+NyxzPXRoaXMubWlkaUNvbnRyb2xsZXJzW1Mubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQl0+PjcsYT10aGlzLm1pZGlDb250cm9sbGVyc1tTLmRhdGFFbnRyeUxTQl0+Pjc7c3dpdGNoKG4pe2RlZmF1bHQ6aWYoZT09PTY0KXJldHVybjtwKGAlY1VucmVjb2duaXplZCBOUlBOIGZvciAlYyR7dGhpcy5jaGFubmVsTnVtYmVyfSVjOiAlYygweCR7cy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0gMHgke3MudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9KSVjIGRhdGEgdmFsdWU6ICVjJHtlfWAsYy53YXJuLGMucmVjb2duaXplZCxjLndhcm4sYy51bnJlY29nbml6ZWQsYy53YXJuLGMudmFsdWUpO2JyZWFrO2Nhc2UgWmUucGFydFBhcmFtZXRlcjpzd2l0Y2gocyl7ZGVmYXVsdDppZihlPT09NjQpcmV0dXJuO3AoYCVjVW5yZWNvZ25pemVkIE5SUE4gZm9yICVjJHt0aGlzLmNoYW5uZWxOdW1iZXJ9JWM6ICVjKDB4JHtuLnRvU3RyaW5nKDE2KX0gMHgke3MudG9TdHJpbmcoMTYpfSklYyBkYXRhIHZhbHVlOiAlYyR7ZX1gLGMud2FybixjLnJlY29nbml6ZWQsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKTticmVhaztjYXNlIE9lLnZpYnJhdG9SYXRlOmlmKGU9PT02NClyZXR1cm47QSgpLHRoaXMuY2hhbm5lbFZpYnJhdG8ucmF0ZT1lLzY0KjgsdCgiVmlicmF0byByYXRlIixgJHtlfSA9ICR7dGhpcy5jaGFubmVsVmlicmF0by5yYXRlfWAsIkh6Iik7YnJlYWs7Y2FzZSBPZS52aWJyYXRvRGVwdGg6aWYoZT09PTY0KXJldHVybjtBKCksdGhpcy5jaGFubmVsVmlicmF0by5kZXB0aD1lLzIsdCgiVmlicmF0byBkZXB0aCIsYCR7ZX0gPSAke3RoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGh9YCwiY2VudHMgb2YgZGV0dW5lIik7YnJlYWs7Y2FzZSBPZS52aWJyYXRvRGVsYXk6aWYoZT09PTY0KXJldHVybjtBKCksdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT1lLzY0LzMsdCgiVmlicmF0byBkZWxheSIsYCR7ZX0gPSAke3RoaXMuY2hhbm5lbFZpYnJhdG8uZGVsYXl9YCwic2Vjb25kcyIpO2JyZWFrO2Nhc2UgT2UuVFZGRmlsdGVyQ3V0b2ZmOnRoaXMuY29udHJvbGxlckNoYW5nZShTLmJyaWdodG5lc3MsZSksdCgiRmlsdGVyIGN1dG9mZiIsZS50b1N0cmluZygpLCIiKTticmVhaztjYXNlIE9lLkVHQXR0YWNrVGltZTp0aGlzLmNvbnRyb2xsZXJDaGFuZ2UoUy5hdHRhY2tUaW1lLGUpLHQoIkVHIGF0dGFjayB0aW1lIixlLnRvU3RyaW5nKCksIiIpO2JyZWFrO2Nhc2UgT2UuRUdSZWxlYXNlVGltZTp0aGlzLmNvbnRyb2xsZXJDaGFuZ2UoUy5yZWxlYXNlVGltZSxlKSx0KCJFRyByZWxlYXNlIHRpbWUiLGUudG9TdHJpbmcoKSwiIik7YnJlYWt9YnJlYWs7Y2FzZSBaZS5hd2UzMjpicmVhaztjYXNlIFplLlNGMjp7aWYocz4xMDApYnJlYWs7bGV0IHI9dGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5zZjJOUFJOR2VuZXJhdG9yTFNCXSxJPShlPDw3fGEpLTgxOTI7dGhpcy5zZXRHZW5lcmF0b3JPZmZzZXQocixJKTticmVha319YnJlYWt9Y2FzZSBZQS5SUENvYXJzZTpjYXNlIFlBLlJQRmluZTp7bGV0IG49dGhpcy5taWRpQ29udHJvbGxlcnNbUy5yZWdpc3RlcmVkUGFyYW1ldGVyTVNCXXx0aGlzLm1pZGlDb250cm9sbGVyc1tTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0JdPj43O3N3aXRjaChuKXtkZWZhdWx0OnAoYCVjVW5yZWNvZ25pemVkIFJQTiBmb3IgJWMke3RoaXMuY2hhbm5lbE51bWJlcn0lYzogJWMoMHgke24udG9TdHJpbmcoMTYpfSklYyBkYXRhIHZhbHVlOiAlYyR7ZX1gLGMud2FybixjLnJlY29nbml6ZWQsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKTticmVhaztjYXNlIHVlLnBpdGNoV2hlZWxSYW5nZTp0aGlzLm1pZGlDb250cm9sbGVyc1ttQStqLnBpdGNoV2hlZWxSYW5nZV09ZTw8Nyx0KCJQaXRjaCB3aGVlbCByYW5nZSIsZS50b1N0cmluZygpLCJzZW1pdG9uZXMiKTticmVhaztjYXNlIHVlLmNvYXJzZVR1bmluZzp7bGV0IHM9ZS02NDt0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEuY2hhbm5lbFR1bmluZ1NlbWl0b25lcyxzKSx0KCJDb2Fyc2UgdHVuaW5nIixzLnRvU3RyaW5nKCksInNlbWl0b25lcyIpO2JyZWFrfWNhc2UgdWUuZmluZVR1bmluZzp0aGlzLnNldFR1bmluZyhlLTY0LCExKTticmVhaztjYXNlIHVlLm1vZHVsYXRpb25EZXB0aDp0aGlzLnNldE1vZHVsYXRpb25EZXB0aChlKjEwMCk7YnJlYWs7Y2FzZSB1ZS5yZXNldFBhcmFtZXRlcnM6dGhpcy5yZXNldFBhcmFtZXRlcnMoKTticmVha319fX12YXIgb3I9W2kuZGVsYXlNb2RMRk8saS5mcmVxTW9kTEZPLGkuZGVsYXlWaWJMRk8saS5mcmVxVmliTEZPLGkuZGVsYXlNb2RFbnYsaS5hdHRhY2tNb2RFbnYsaS5ob2xkTW9kRW52LGkuZGVjYXlNb2RFbnYsaS5zdXN0YWluTW9kRW52LGkucmVsZWFzZU1vZEVudixpLmRlbGF5Vm9sRW52LGkuYXR0YWNrVm9sRW52LGkuaG9sZFZvbEVudixpLmRlY2F5Vm9sRW52LGkuc3VzdGFpblZvbEVudixpLnJlbGVhc2VWb2xFbnYsaS5maW5lVHVuZSxpLm1vZExmb1RvUGl0Y2gsaS52aWJMZm9Ub1BpdGNoLGkubW9kRW52VG9QaXRjaCxpLm1vZExmb1RvVm9sdW1lLGkuaW5pdGlhbEZpbHRlckZjLGkuaW5pdGlhbEZpbHRlclEsaS5tb2RMZm9Ub0ZpbHRlckZjLGkubW9kRW52VG9GaWx0ZXJGYyxpLmNob3J1c0VmZmVjdHNTZW5kLGkucmV2ZXJiRWZmZWN0c1NlbmRdO2Z1bmN0aW9uIHJyKGUsQSx0KXtsZXQgbj0oaCxDLFEpPT5NYXRoLm1heChDLE1hdGgubWluKFEsaCkpLHM9aD0+TWF0aC5tYXgoLTMyNzY4LDEyMDAqTWF0aC5sb2cyKGgvMWUzKSksYT1oPT42OTAwKzEyMDAqTWF0aC5sb2cyKGgvNDQwKSxyPXQ8PDd8QTtyLT04MTkyO2xldCBJPW9yW2VdO0l8fHNBKGBJbnZhbGlkIEFXRTMyIExTQjogJWMke2V9YCxjLnVucmVjb2duaXplZCk7bGV0IG8sZyxCLGQ7c3dpdGNoKEkpe2RlZmF1bHQ6YnJlYWs7Y2FzZSBpLmRlbGF5TW9kTEZPOmNhc2UgaS5kZWxheVZpYkxGTzpjYXNlIGkuZGVsYXlWb2xFbnY6Y2FzZSBpLmRlbGF5TW9kRW52Om89NCpuKHIsMCw1OTAwKSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEkscyhvKSk7YnJlYWs7Y2FzZSBpLmF0dGFja1ZvbEVudjpjYXNlIGkuYXR0YWNrTW9kRW52Om89bihyLDAsNTk0MCksdGhpcy5zZXRHZW5lcmF0b3JPdmVycmlkZShJLHMobykpO2JyZWFrO2Nhc2UgaS5ob2xkVm9sRW52OmNhc2UgaS5ob2xkTW9kRW52Om89bihyLDAsODE5MSksdGhpcy5zZXRHZW5lcmF0b3JPdmVycmlkZShJLHMobykpO2JyZWFrO2Nhc2UgaS5kZWNheU1vZEVudjpjYXNlIGkuZGVjYXlWb2xFbnY6Y2FzZSBpLnJlbGVhc2VWb2xFbnY6Y2FzZSBpLnJlbGVhc2VNb2RFbnY6bz00Km4ociwwLDU5NDApLHRoaXMuc2V0R2VuZXJhdG9yT3ZlcnJpZGUoSSxzKG8pKTticmVhaztjYXNlIGkuZnJlcVZpYkxGTzpjYXNlIGkuZnJlcU1vZExGTzpnPS4wODQqQSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksYShnKSwhMCk7YnJlYWs7Y2FzZSBpLnN1c3RhaW5Wb2xFbnY6Y2FzZSBpLnN1c3RhaW5Nb2RFbnY6Qj1BKjcuNSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksQik7YnJlYWs7Y2FzZSBpLmZpbmVUdW5lOnRoaXMuc2V0R2VuZXJhdG9yT3ZlcnJpZGUoSSxyLCEwKTticmVhaztjYXNlIGkubW9kTGZvVG9QaXRjaDpjYXNlIGkudmliTGZvVG9QaXRjaDpkPW4ociwtMTI3LDEyNykqOS4zNzUsdGhpcy5zZXRHZW5lcmF0b3JPdmVycmlkZShJLGQsITApO2JyZWFrO2Nhc2UgaS5tb2RFbnZUb1BpdGNoOmQ9bihyLC0xMjcsMTI3KSo5LjM3NSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksZCk7YnJlYWs7Y2FzZSBpLm1vZExmb1RvVm9sdW1lOkI9MS44NzUqQSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksQiwhMCk7YnJlYWs7Y2FzZSBpLmluaXRpYWxGaWx0ZXJGYzp7bGV0IGg9NDMzNSs1OSpBO3RoaXMuc2V0R2VuZXJhdG9yT3ZlcnJpZGUoSSxoLCEwKTticmVha31jYXNlIGkuaW5pdGlhbEZpbHRlclE6Qj0yMTUqKEEvMTI3KSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksQiwhMCk7YnJlYWs7Y2FzZSBpLm1vZExmb1RvRmlsdGVyRmM6ZD1uKHIsLTY0LDYzKSo1Ni4yNSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksZCwhMCk7YnJlYWs7Y2FzZSBpLm1vZEVudlRvRmlsdGVyRmM6ZD1uKHIsLTY0LDYzKSo1Ni4yNSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksZCk7YnJlYWs7Y2FzZSBpLmNob3J1c0VmZmVjdHNTZW5kOmNhc2UgaS5yZXZlcmJFZmZlY3RzU2VuZDp0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksbihyLDAsMjU1KSooMWUzLzI1NSkpO2JyZWFrfX1mdW5jdGlvbiBpcihlKXtzd2l0Y2godGhpcy5taWRpQ29udHJvbGxlcnNbUy5kYXRhRW50cnlMU0JdPWU8PDcsdGhpcy5kYXRhRW50cnlTdGF0ZSl7ZGVmYXVsdDpicmVhaztjYXNlIFlBLlJQQ29hcnNlOmNhc2UgWUEuUlBGaW5lOntzd2l0Y2godGhpcy5taWRpQ29udHJvbGxlcnNbUy5yZWdpc3RlcmVkUGFyYW1ldGVyTVNCXXx0aGlzLm1pZGlDb250cm9sbGVyc1tTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0JdPj43KXtkZWZhdWx0OmJyZWFrO2Nhc2UgdWUucGl0Y2hXaGVlbFJhbmdlOntpZihlPT09MClicmVhazt0aGlzLm1pZGlDb250cm9sbGVyc1ttQStqLnBpdGNoV2hlZWxSYW5nZV18PWU7bGV0IHQ9KHRoaXMubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbFJhbmdlXT4+NykrZS8xMjg7cChgJWNDaGFubmVsICR7dGhpcy5jaGFubmVsTnVtYmVyfSBwaXRjaCB3aGVlbCByYW5nZS4gU2VtaXRvbmVzOiAlYyR7dH1gLGMuaW5mbyxjLnZhbHVlKTticmVha31jYXNlIHVlLmZpbmVUdW5pbmc6e2xldCBuPXRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFR1bmluZ108PDd8ZTt0aGlzLnNldFR1bmluZyhuKi4wMTIyMDcwMzEyNSk7YnJlYWt9Y2FzZSB1ZS5tb2R1bGF0aW9uRGVwdGg6e2xldCBuPXRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEubW9kdWxhdGlvbk11bHRpcGxpZXJdKjUwK2UvMTI4KjEwMDt0aGlzLnNldE1vZHVsYXRpb25EZXB0aChuKTticmVha31jYXNlIDE2MzgzOnRoaXMucmVzZXRQYXJhbWV0ZXJzKCk7YnJlYWt9YnJlYWt9Y2FzZSBZQS5OUlBGaW5lOntsZXQgQT10aGlzLm1pZGlDb250cm9sbGVyc1tTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0JdPj43LHQ9dGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTFNCXT4+NztpZihBPT09WmUuU0YyKXJldHVybjtzd2l0Y2goQSl7ZGVmYXVsdDpwKGAlY1VucmVjb2duaXplZCBOUlBOIExTQiBmb3IgJWMke3RoaXMuY2hhbm5lbE51bWJlcn0lYzogJWMoMHgke3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9IDB4JHt0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSklYyBkYXRhIHZhbHVlOiAlYyR7ZX1gLGMud2FybixjLnJlY29nbml6ZWQsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKTticmVhaztjYXNlIFplLmF3ZTMyOnJyLmNhbGwodGhpcyx0LGUsdGhpcy5taWRpQ29udHJvbGxlcnNbUy5kYXRhRW50cnlNU0JdPj43KTticmVha319fX1mdW5jdGlvbiBJcihlLEEsdD0hMCl7aWYoZT4xMjcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIE1JREkgQ29udHJvbGxlci4iKTtpZihlPj1TLm1vZHVsYXRpb25XaGVlbExTQiYmZTw9Uy5lZmZlY3RDb250cm9sMkxTQiYmZSE9PVMuZGF0YUVudHJ5TFNCKXtsZXQgbj1lLTMyO2lmKHRoaXMubG9ja2VkQ29udHJvbGxlcnNbbl0pcmV0dXJuO3RoaXMubWlkaUNvbnRyb2xsZXJzW25dPXRoaXMubWlkaUNvbnRyb2xsZXJzW25dJjE2MjU2fEEmMTI3LHRoaXMudm9pY2VzLmZvckVhY2gocz0+dGhpcy5jb21wdXRlTW9kdWxhdG9ycyhzLDEsbikpfWlmKCF0aGlzLmxvY2tlZENvbnRyb2xsZXJzW2VdKXtzd2l0Y2godGhpcy5taWRpQ29udHJvbGxlcnNbZV09QTw8NyxlKXtjYXNlIFMuYWxsTm90ZXNPZmY6dGhpcy5zdG9wQWxsTm90ZXMoKTticmVhaztjYXNlIFMuYWxsU291bmRPZmY6dGhpcy5zdG9wQWxsTm90ZXMoITApO2JyZWFrO2Nhc2UgUy5iYW5rU2VsZWN0OnRoaXMuc2V0QmFua01TQihBKSx0aGlzLmNoYW5uZWxOdW1iZXIlMTY9PT1TZSYmZkEuaXNTeXN0ZW1YRyh0aGlzLmNoYW5uZWxTeXN0ZW0pJiZ0aGlzLnNldEJhbmtNU0IoMTI3KTticmVhaztjYXNlIFMuYmFua1NlbGVjdExTQjp0aGlzLnNldEJhbmtMU0IoQSk7YnJlYWs7Y2FzZSBTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0I6dGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5SUEZpbmU7YnJlYWs7Y2FzZSBTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0I6dGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5SUENvYXJzZTticmVhaztjYXNlIFMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlck1TQjp0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdPTAsdGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5OUlBDb2Fyc2U7YnJlYWs7Y2FzZSBTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0I6dGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCXT4+Nz09PVplLlNGMiYmKHRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuc2YyTlBSTkdlbmVyYXRvckxTQl0lMTAwIT09MCYmKHRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuc2YyTlBSTkdlbmVyYXRvckxTQl09MCksQT09PTEwMD90aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz0xMDA6QT09PTEwMT90aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz0xZTM6QT09PTEwMj90aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz0xZTQ6QTwxMDAmJih0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz1BKSksdGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5OUlBGaW5lO2JyZWFrO2Nhc2UgUy5kYXRhRW50cnlNU0I6dGhpcy5kYXRhRW50cnlDb2Fyc2UoQSk7YnJlYWs7Y2FzZSBTLmRhdGFFbnRyeUxTQjp0aGlzLmRhdGFFbnRyeUZpbmUoQSk7YnJlYWs7Y2FzZSBTLnJlc2V0QWxsQ29udHJvbGxlcnM6dGhpcy5yZXNldENvbnRyb2xsZXJzUlAxNUNvbXBsaWFudCgpO2JyZWFrO2Nhc2UgUy5zdXN0YWluUGVkYWw6QTw2NCYmKHRoaXMuc3VzdGFpbmVkVm9pY2VzLmZvckVhY2gobj0+e24ucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpfSksdGhpcy5zdXN0YWluZWRWb2ljZXM9W10pO2JyZWFrO2RlZmF1bHQ6dGhpcy52b2ljZXMuZm9yRWFjaChuPT50aGlzLmNvbXB1dGVNb2R1bGF0b3JzKG4sMSxlKSk7YnJlYWt9dCYmdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgiY29udHJvbGxlckNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGNvbnRyb2xsZXJOdW1iZXI6ZSxjb250cm9sbGVyVmFsdWU6QX0pfX12YXIgSXQ9ezA6MCwxOi4wMDYsMjouMDIzLDQ6LjA1LDg6LjExLDE2Oi4yNSwzMjouNSw2NDoyLjA2LDgwOjQuMiw5Njo4LjQsMTEyOjE5LjUsMTE2OjI2LjcsMTIwOjQwLDEyNDo4MCwxMjc6NDgwfTtmdW5jdGlvbiBncihlKXtpZihJdFtlXSE9PXZvaWQgMClyZXR1cm4gSXRbZV07bGV0IEE9bnVsbCx0PW51bGw7Zm9yKGxldCBuIG9mIE9iamVjdC5rZXlzKEl0KSl7bGV0IHM9cGFyc2VJbnQobik7czxlJiYoQT09PW51bGx8fHM+QSkmJihBPXMpLHM+ZSYmKHQ9PT1udWxsfHxzPHQpJiYodD1zKX1pZihBIT09bnVsbCYmdCE9PW51bGwpe2xldCBuPUl0W0FdLHM9SXRbdF07cmV0dXJuIG4rKGUtQSkqKHMtbikvKHQtQSl9cmV0dXJuIDB9ZnVuY3Rpb24gY3IoZSxBKXtyZXR1cm4gZ3IoZSkqKEEvMzApfWZ1bmN0aW9uIEVyKGUsQSl7aWYoQTwxKXt0aGlzLm5vdGVPZmYoZSk7cmV0dXJufWlmKEE9TWF0aC5taW4oMTI3LEEpLHRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmJsYWNrTUlESU1vZGUmJnRoaXMuc3ludGgudG90YWxWb2ljZXNBbW91bnQ+MjAwJiZBPDQwfHx0aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5ibGFja01JRElNb2RlJiZBPDEwfHx0aGlzLl9pc011dGVkKXJldHVybjtpZighdGhpcy5wcmVzZXQpe3NBKGBObyBwcmVzZXQgZm9yIGNoYW5uZWwgJHt0aGlzLmNoYW5uZWxOdW1iZXJ9IWApO3JldHVybn1sZXQgdD1lK3RoaXMuY2hhbm5lbFRyYW5zcG9zZUtleVNoaWZ0K3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbEtleVNoaWZ0XSxuPXQ7aWYodD4xMjd8fHQ8MClyZXR1cm47bGV0IHM9dGhpcy5wcmVzZXQ/LnByb2dyYW0sYT10aGlzLnN5bnRoUHJvcHMudHVuaW5nc1tzXT8uW3RdPy5taWRpTm90ZTthPj0wJiYobj1hKSx0aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5tb25vcGhvbmljUmV0cmlnZ2VyTW9kZSYmdGhpcy5raWxsTm90ZShlLC03MjAwKTtsZXQgcj10aGlzLnN5bnRoLmtleU1vZGlmaWVyTWFuYWdlci5nZXRWZWxvY2l0eSh0aGlzLmNoYW5uZWxOdW1iZXIsdCk7cj4tMSYmKEE9cik7bGV0IEk9dGhpcy5zeW50aC5rZXlNb2RpZmllck1hbmFnZXIuZ2V0R2Fpbih0aGlzLmNoYW5uZWxOdW1iZXIsdCksbz0tMSxnPTAsQj10aGlzLm1pZGlDb250cm9sbGVyc1tTLnBvcnRhbWVudG9UaW1lXT4+NyxkPXRoaXMubWlkaUNvbnRyb2xsZXJzW1MucG9ydGFtZW50b0NvbnRyb2xdLGg9ZD4+NztpZighdGhpcy5kcnVtQ2hhbm5lbCYmaCE9PW4mJnRoaXMubWlkaUNvbnRyb2xsZXJzW1MucG9ydGFtZW50b09uT2ZmXT49ODE5MiYmQj4wKXtpZihkIT09MSl7bGV0IHk9TWF0aC5hYnMobi1oKTtnPWNyKEIseSksbz1ofXRoaXMuY29udHJvbGxlckNoYW5nZShTLnBvcnRhbWVudG9Db250cm9sLG4pfWxldCBDPXRoaXMuc3ludGhQcm9wcy5nZXRWb2ljZXModGhpcy5jaGFubmVsTnVtYmVyLG4sQSx0KSxRPTA7dGhpcy5yYW5kb21QYW4mJihRPU1hdGgucm91bmQoTWF0aC5yYW5kb20oKSoxZTMtNTAwKSk7bGV0IG09dGhpcy52b2ljZXM7Qy5mb3JFYWNoKHk9Pnt5LnBvcnRhbWVudG9Gcm9tS2V5PW8seS5wb3J0YW1lbnRvRHVyYXRpb249Zyx5Lm92ZXJyaWRlUGFuPVEseS5nYWluPUksdGhpcy5zeXNFeE1vZHVsYXRvcnMubW9kdWxhdG9yTGlzdC5mb3JFYWNoKE89PntsZXQgbkE9Ty5tb2QsJD15Lm1vZHVsYXRvcnMuZmluZEluZGV4KFY9PkVBLmlzSWRlbnRpY2FsKFYsbkEpKTskIT09LTE/eS5tb2R1bGF0b3JzWyRdPUVBLmNvcHlGcm9tKG5BKTp5Lm1vZHVsYXRvcnMucHVzaChFQS5jb3B5RnJvbShuQSkpfSksdGhpcy5nZW5lcmF0b3JPdmVycmlkZXNFbmFibGVkJiZ0aGlzLmdlbmVyYXRvck92ZXJyaWRlcy5mb3JFYWNoKChPLG5BKT0+e08hPT1WcyYmKHkuZ2VuZXJhdG9yc1tuQV09Tyl9KTtsZXQgRj15LmV4Y2x1c2l2ZUNsYXNzO0YhPT0wJiZtLmZvckVhY2goTz0+e08uZXhjbHVzaXZlQ2xhc3M9PT1GJiZPLmV4Y2x1c2l2ZVJlbGVhc2UodGhpcy5zeW50aC5jdXJyZW50U3ludGhUaW1lKX0pLHRoaXMuY29tcHV0ZU1vZHVsYXRvcnMoeSk7bGV0IGs9eS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3RhcnRBZGRyc09mZnNldF0reS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3RhcnRBZGRyc0NvYXJzZU9mZnNldF0qMzI3NjgsRD15Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5lbmRBZGRyT2Zmc2V0XSt5Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5lbmRBZGRyc0NvYXJzZU9mZnNldF0qMzI3Njgsdj15Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5zdGFydGxvb3BBZGRyc09mZnNldF0reS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXRdKjMyNzY4LEw9eS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuZW5kbG9vcEFkZHJzT2Zmc2V0XSt5Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXRdKjMyNzY4LEU9eS5zYW1wbGUsWD1PPT5NYXRoLm1heCgwLE1hdGgubWluKEUuc2FtcGxlRGF0YS5sZW5ndGgtMSxPKSk7aWYoRS5jdXJzb3I9WChFLmN1cnNvcitrKSxFLmVuZD1YKEUuZW5kK0QpLEUubG9vcFN0YXJ0PVgoRS5sb29wU3RhcnQrdiksRS5sb29wRW5kPVgoRS5sb29wRW5kK0wpLEUubG9vcEVuZDxFLmxvb3BTdGFydCl7bGV0IE89RS5sb29wU3RhcnQ7RS5sb29wU3RhcnQ9RS5sb29wRW5kLEUubG9vcEVuZD1PfUUubG9vcEVuZC1FLmxvb3BTdGFydDwxJiYoRS5sb29waW5nTW9kZT09PTF8fEUubG9vcGluZ01vZGU9PT0zKSYmKEUubG9vcGluZ01vZGU9MCxFLmlzTG9vcGluZz0hMSkseS52b2x1bWVFbnZlbG9wZS5hdHRlbnVhdGlvbj15LnZvbHVtZUVudmVsb3BlLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbix5LmN1cnJlbnRQYW49TWF0aC5tYXgoLTUwMCxNYXRoLm1pbig1MDAseS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kucGFuXSkpfSksdGhpcy5zeW50aC50b3RhbFZvaWNlc0Ftb3VudCs9Qy5sZW5ndGgsdGhpcy5zeW50aC50b3RhbFZvaWNlc0Ftb3VudD50aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy52b2ljZUNhcCYmdGhpcy5zeW50aFByb3BzLnZvaWNlS2lsbGluZyhDLmxlbmd0aCksbS5wdXNoKC4uLkMpLHRoaXMuc2VuZENoYW5uZWxQcm9wZXJ0eSgpLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm5vdGVPbiIse21pZGlOb3RlOmUsY2hhbm5lbDp0aGlzLmNoYW5uZWxOdW1iZXIsdmVsb2NpdHk6QX0pfWZ1bmN0aW9uIEJyKGUpe2lmKGU+MTI3fHxlPDApe3NBKCJSZWNlaXZlZCBhIG5vdGVPbiBmb3Igbm90ZSIsZSwiSWdub3JpbmcuIik7cmV0dXJufWxldCBBPWUrdGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQrdGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5jaGFubmVsS2V5U2hpZnRdO2lmKHRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmJsYWNrTUlESU1vZGUmJiF0aGlzLmRydW1DaGFubmVsKXt0aGlzLmtpbGxOb3RlKEEsLTY5NTApLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm5vdGVPZmYiLHttaWRpTm90ZTplLGNoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyfSk7cmV0dXJufXRoaXMudm9pY2VzLmZvckVhY2gobj0+e24ucmVhbEtleSE9PUF8fG4uaXNJblJlbGVhc2V8fCh0aGlzLmhvbGRQZWRhbD90aGlzLnN1c3RhaW5lZFZvaWNlcy5wdXNoKG4pOm4ucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpKX0pLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm5vdGVPZmYiLHttaWRpTm90ZTplLGNoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyfSl9ZnVuY3Rpb24gQ3IoZSl7aWYodGhpcy5sb2NrUHJlc2V0KXJldHVybjt0aGlzLnBhdGNoLnByb2dyYW09ZTtsZXQgQT10aGlzLnN5bnRoLnNvdW5kQmFua01hbmFnZXIuZ2V0UHJlc2V0KHRoaXMucGF0Y2gsdGhpcy5jaGFubmVsU3lzdGVtKTtBfHwoc0EoIk5vIHByZXNldHMhIFVzaW5nIGVtcHR5IGZhbGxiYWNrLiIpLEE9bmV3IHBlKHRoaXMuc3ludGguc291bmRCYW5rTWFuYWdlci5zb3VuZEJhbmtMaXN0WzBdLnNvdW5kQmFuayksQS5uYW1lPSJTUEVTU0EgRU1QVFkgRkFMTEJBQ0sgUFJFU0VUIiksdGhpcy5wcmVzZXQ9QSxBLmlzQW55RHJ1bXMhPT10aGlzLmRydW1DaGFubmVsJiZ0aGlzLnNldERydW1GbGFnKEEuaXNBbnlEcnVtcyksdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgicHJvZ3JhbUNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGJhbmtMU0I6dGhpcy5wcmVzZXQuYmFua0xTQixiYW5rTVNCOnRoaXMucHJlc2V0LmJhbmtNU0IscHJvZ3JhbTp0aGlzLnByZXNldC5wcm9ncmFtLGlzR01HU0RydW06dGhpcy5wcmVzZXQuaXNHTUdTRHJ1bX0pLHRoaXMuc2VuZENoYW5uZWxQcm9wZXJ0eSgpfXZhciBocj1jbGFzc3ttb2R1bGF0b3JMaXN0PVtdO3Jlc2V0TW9kdWxhdG9ycygpe3RoaXMubW9kdWxhdG9yTGlzdD1bXX1zZXRNb2R1bGF0b3IoZSxBLHQsbj0hMSxzPSExKXtsZXQgYT10aGlzLmdldE1vZHVsYXRvcklEKGUsQSxuLHMpO3Q9PT0wJiZ0aGlzLmRlbGV0ZU1vZHVsYXRvcihhKTtsZXQgcj10aGlzLm1vZHVsYXRvckxpc3QuZmluZChJPT5JLmlkPT09YSk7aWYocilyLm1vZC50cmFuc2Zvcm1BbW91bnQ9dDtlbHNle2xldCBJLG87ZT49bUE/KEk9ZS1tQSxvPSExKTooST1lLG89ITApO2xldCBnPW5ldyBFQShuZXcgWEEoSSxRQS5saW5lYXIsbyxuKSxuZXcgWEEsQSx0LDApO3RoaXMubW9kdWxhdG9yTGlzdC5wdXNoKHttb2Q6ZyxpZDphfSl9fWdldE1vZHVsYXRvcklEKGUsQSx0LG4pe3JldHVybmAke2V9LSR7QX0tJHt0fS0ke259YH1kZWxldGVNb2R1bGF0b3IoZSl7dGhpcy5tb2R1bGF0b3JMaXN0PXRoaXMubW9kdWxhdG9yTGlzdC5maWx0ZXIoQT0+QS5pZCE9PWUpfX0sbHI9MWUzLzIwMDtmdW5jdGlvbiBNcyhlLEEsdCl7aWYoQS50cmFuc2Zvcm1BbW91bnQ9PT0wKXJldHVybiBBLmN1cnJlbnRWYWx1ZT0wLDA7bGV0IG49QS5wcmltYXJ5U291cmNlLmdldFZhbHVlKGUsdCkscz1BLnNlY29uZGFyeVNvdXJjZS5nZXRWYWx1ZShlLHQpLGE9QS50cmFuc2Zvcm1BbW91bnQ7QS5pc0VmZmVjdE1vZHVsYXRvciYmYTw9MWUzJiYoYSo9bHIsYT1NYXRoLm1pbihhLDFlMykpO2xldCByPW4qcyphO3JldHVybiBBLnRyYW5zZm9ybVR5cGU9PT0yJiYocj1NYXRoLmFicyhyKSksQS5pc0RlZmF1bHRSZXNvbmFudE1vZHVsYXRvciYmKHQucmVzb25hbmNlT2Zmc2V0PU1hdGgubWF4KDAsci8yKSksQS5jdXJyZW50VmFsdWU9cixyfWZ1bmN0aW9uIGRyKGUsQT0tMSx0PTApe2xldCBuPWUubW9kdWxhdG9ycyxzPWUuZ2VuZXJhdG9ycztpZih0aGlzLmdlbmVyYXRvck9mZnNldHNFbmFibGVkKXtzPW5ldyBJbnQxNkFycmF5KHMpO2ZvcihsZXQgZz0wO2c8cy5sZW5ndGg7ZysrKXNbZ10rPXRoaXMuZ2VuZXJhdG9yT2Zmc2V0c1tnXX1sZXQgYT1lLm1vZHVsYXRlZEdlbmVyYXRvcnM7aWYoQT09PS0xKXthLnNldChzKSxuLmZvckVhY2goZz0+e2FbZy5kZXN0aW5hdGlvbl0rPU1zKHRoaXMubWlkaUNvbnRyb2xsZXJzLGcsZSl9KTtmb3IobGV0IGc9MDtnPGEubGVuZ3RoO2crKyl7bGV0IEI9eFtnXTtCJiYoYVtnXT1NYXRoLm1pbihCLm1heCxNYXRoLm1heChCLm1pbixhW2ddKSkpfWJlLnJlY2FsY3VsYXRlKGUpLF9lLnJlY2FsY3VsYXRlKGUpO3JldHVybn1sZXQgcj1uZXcgU2V0KFtpLmluaXRpYWxBdHRlbnVhdGlvbixpLmRlbGF5Vm9sRW52LGkuYXR0YWNrVm9sRW52LGkuaG9sZFZvbEVudixpLmRlY2F5Vm9sRW52LGkuc3VzdGFpblZvbEVudixpLnJlbGVhc2VWb2xFbnYsaS5rZXlOdW1Ub1ZvbEVudkhvbGQsaS5rZXlOdW1Ub1ZvbEVudkRlY2F5XSksST1uZXcgU2V0LG89ISFBO24uZm9yRWFjaChnPT57aWYoZy5wcmltYXJ5U291cmNlLmlzQ0M9PT1vJiZnLnByaW1hcnlTb3VyY2UuaW5kZXg9PT10fHxnLnNlY29uZGFyeVNvdXJjZS5pc0NDPT09byYmZy5zZWNvbmRhcnlTb3VyY2UuaW5kZXg9PT10KXtsZXQgQj1nLmRlc3RpbmF0aW9uO2lmKCFJLmhhcyhCKSl7YVtCXT1zW0JdLE1zKHRoaXMubWlkaUNvbnRyb2xsZXJzLGcsZSksbi5mb3JFYWNoKGg9PntoLmRlc3RpbmF0aW9uPT09QiYmKGFbQl0rPWguY3VycmVudFZhbHVlKX0pO2xldCBkPXhbQl07YVtCXT1NYXRoLm1heChkLm1pbixNYXRoLm1pbihhW0JdLGQubWF4KSksSS5hZGQoQil9fX0pLFsuLi5JXS5zb21lKGc9PnIuaGFzKGcpKSYmYmUucmVjYWxjdWxhdGUoZSksX2UucmVjYWxjdWxhdGUoZSl9dmFyIFFyPWNsYXNze21pZGlDb250cm9sbGVycz1uZXcgSW50MTZBcnJheShibik7bG9ja2VkQ29udHJvbGxlcnM9QXJyYXkoYm4pLmZpbGwoITEpO2N1c3RvbUNvbnRyb2xsZXJzPW5ldyBGbG9hdDMyQXJyYXkoZWEpO2NoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdD0wO2NoYW5uZWxPY3RhdmVUdW5pbmc9bmV3IEludDhBcnJheSgxMjgpO3N5c0V4TW9kdWxhdG9ycz1uZXcgaHI7ZHJ1bUNoYW5uZWw9ITE7cmFuZG9tUGFuPSExO2RhdGFFbnRyeVN0YXRlPVlBLklkbGU7cGF0Y2g9e2JhbmtNU0I6MCxiYW5rTFNCOjAscHJvZ3JhbTowLGlzR01HU0RydW06ITF9O3ByZXNldDtsb2NrUHJlc2V0PSExO2xvY2tlZFN5c3RlbT0iZ3MiO2xvY2tHU05SUE5QYXJhbXM9ITE7Y2hhbm5lbFZpYnJhdG89e2RlbGF5OjAsZGVwdGg6MCxyYXRlOjB9O3ZvaWNlcz1bXTtzdXN0YWluZWRWb2ljZXM9W107Y2hhbm5lbE51bWJlcjtzeW50aDtzeW50aFByb3BzO25vdGVPbj1Fci5iaW5kKHRoaXMpO25vdGVPZmY9QnIuYmluZCh0aGlzKTtwcm9ncmFtQ2hhbmdlPUNyLmJpbmQodGhpcyk7Y29udHJvbGxlckNoYW5nZT1Jci5iaW5kKHRoaXMpO3Jlc2V0Q29udHJvbGxlcnM9cG8uYmluZCh0aGlzKTtyZXNldFByZXNldD15by5iaW5kKHRoaXMpO3Jlc2V0Q29udHJvbGxlcnNSUDE1Q29tcGxpYW50PWtvLmJpbmQodGhpcyk7cmVzZXRQYXJhbWV0ZXJzPURvLmJpbmQodGhpcyk7ZGF0YUVudHJ5RmluZT1pci5iaW5kKHRoaXMpO2RhdGFFbnRyeUNvYXJzZT1hci5iaW5kKHRoaXMpO2NoYW5uZWxUdW5pbmdDZW50cz0wO2dlbmVyYXRvck9mZnNldHM9bmV3IEludDE2QXJyYXkoTW4pO2dlbmVyYXRvck9mZnNldHNFbmFibGVkPSExO2dlbmVyYXRvck92ZXJyaWRlcz1uZXcgSW50MTZBcnJheShNbik7Z2VuZXJhdG9yT3ZlcnJpZGVzRW5hYmxlZD0hMTtyZW5kZXJWb2ljZT1zci5iaW5kKHRoaXMpO3BhbkFuZE1peFZvaWNlPU9vLmJpbmQodGhpcyk7Y29tcHV0ZU1vZHVsYXRvcnM9ZHIuYmluZCh0aGlzKTtjb25zdHJ1Y3RvcihlLEEsdCxuKXt0aGlzLnN5bnRoPWUsdGhpcy5zeW50aFByb3BzPUEsdGhpcy5wcmVzZXQ9dCx0aGlzLmNoYW5uZWxOdW1iZXI9bix0aGlzLnJlc2V0R2VuZXJhdG9yT3ZlcnJpZGVzKCksdGhpcy5yZXNldEdlbmVyYXRvck9mZnNldHMoKX1faXNNdXRlZD0hMTtnZXQgaXNNdXRlZCgpe3JldHVybiB0aGlzLl9pc011dGVkfWdldCBob2xkUGVkYWwoKXtyZXR1cm4gdGhpcy5taWRpQ29udHJvbGxlcnNbUy5zdXN0YWluUGVkYWxdPj04MTkyfWdldCBjaGFubmVsU3lzdGVtKCl7cmV0dXJuIHRoaXMubG9ja1ByZXNldD90aGlzLmxvY2tlZFN5c3RlbTp0aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5taWRpU3lzdGVtfXRyYW5zcG9zZUNoYW5uZWwoZSxBPSExKXt0aGlzLmRydW1DaGFubmVsfHwoZSs9dGhpcy5zeW50aFByb3BzLm1hc3RlclBhcmFtZXRlcnMudHJhbnNwb3NpdGlvbik7bGV0IHQ9TWF0aC50cnVuYyhlKSxuPXRoaXMuY2hhbm5lbFRyYW5zcG9zZUtleVNoaWZ0K3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmVdLzEwMDt0aGlzLmRydW1DaGFubmVsJiYhQXx8ZT09PW58fCh0IT09dGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQmJnRoaXMuc3RvcEFsbE5vdGVzKCksdGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ9dCx0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmUsKGUtdCkqMTAwKSx0aGlzLnNlbmRDaGFubmVsUHJvcGVydHkoKSl9c2V0T2N0YXZlVHVuaW5nKGUpe2lmKGUubGVuZ3RoIT09MTIpdGhyb3cgbmV3IEVycm9yKCJUdW5pbmcgaXMgbm90IHRoZSBsZW5ndGggb2YgMTIuIik7dGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nPW5ldyBJbnQ4QXJyYXkoMTI4KTtmb3IobGV0IEE9MDtBPDEyODtBKyspdGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nW0FdPWVbQSUxMl19c2V0TW9kdWxhdGlvbkRlcHRoKGUpe2U9TWF0aC5yb3VuZChlKSxwKGAlY0NoYW5uZWwgJHt0aGlzLmNoYW5uZWxOdW1iZXJ9IG1vZHVsYXRpb24gZGVwdGguIENlbnRzOiAlYyR7ZX1gLGMuaW5mbyxjLnZhbHVlKSx0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEubW9kdWxhdGlvbk11bHRpcGxpZXIsZS81MCl9c2V0VHVuaW5nKGUsQT0hMCl7ZT1NYXRoLnJvdW5kKGUpLHRoaXMuc2V0Q3VzdG9tQ29udHJvbGxlcihJQS5jaGFubmVsVHVuaW5nLGUpLEEmJnAoYCVjRmluZSB0dW5pbmcgZm9yICVjJHt0aGlzLmNoYW5uZWxOdW1iZXJ9JWMgaXMgbm93IHNldCB0byAlYyR7ZX0lYyBjZW50cy5gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMudmFsdWUsYy5pbmZvKX1waXRjaFdoZWVsKGUpe3RoaXMubG9ja2VkQ29udHJvbGxlcnNbbUErai5waXRjaFdoZWVsXXx8KHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoInBpdGNoV2hlZWwiLHtjaGFubmVsOnRoaXMuY2hhbm5lbE51bWJlcixwaXRjaDplfSksdGhpcy5taWRpQ29udHJvbGxlcnNbbUErai5waXRjaFdoZWVsXT1lLHRoaXMudm9pY2VzLmZvckVhY2goQT0+dGhpcy5jb21wdXRlTW9kdWxhdG9ycyhBLDAsai5waXRjaFdoZWVsKSksdGhpcy5zZW5kQ2hhbm5lbFByb3BlcnR5KCkpfWNoYW5uZWxQcmVzc3VyZShlKXt0aGlzLm1pZGlDb250cm9sbGVyc1ttQStqLmNoYW5uZWxQcmVzc3VyZV09ZTw8Nyx0aGlzLnVwZGF0ZUNoYW5uZWxUdW5pbmcoKSx0aGlzLnZvaWNlcy5mb3JFYWNoKEE9PnRoaXMuY29tcHV0ZU1vZHVsYXRvcnMoQSwwLGouY2hhbm5lbFByZXNzdXJlKSksdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgiY2hhbm5lbFByZXNzdXJlIix7Y2hhbm5lbDp0aGlzLmNoYW5uZWxOdW1iZXIscHJlc3N1cmU6ZX0pfXBvbHlQcmVzc3VyZShlLEEpe3RoaXMudm9pY2VzLmZvckVhY2godD0+e3QubWlkaU5vdGU9PT1lJiYodC5wcmVzc3VyZT1BLHRoaXMuY29tcHV0ZU1vZHVsYXRvcnModCwwLGoucG9seVByZXNzdXJlKSl9KSx0aGlzLnN5bnRoUHJvcHMuY2FsbEV2ZW50KCJwb2x5UHJlc3N1cmUiLHtjaGFubmVsOnRoaXMuY2hhbm5lbE51bWJlcixtaWRpTm90ZTplLHByZXNzdXJlOkF9KX1zZXRDdXN0b21Db250cm9sbGVyKGUsQSl7dGhpcy5jdXN0b21Db250cm9sbGVyc1tlXT1BLHRoaXMudXBkYXRlQ2hhbm5lbFR1bmluZygpfXVwZGF0ZUNoYW5uZWxUdW5pbmcoKXt0aGlzLmNoYW5uZWxUdW5pbmdDZW50cz10aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUdW5pbmddK3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmVdK3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEubWFzdGVyVHVuaW5nXSt0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUdW5pbmdTZW1pdG9uZXNdKjEwMH1yZW5kZXJBdWRpbyhlLEEsdCxuLHMsYSxyLEkpe3RoaXMudm9pY2VzPXRoaXMudm9pY2VzLmZpbHRlcihvPT4hdGhpcy5yZW5kZXJWb2ljZShvLHRoaXMuc3ludGguY3VycmVudFN5bnRoVGltZSxlLEEsdCxuLHMsYSxyLEkpKX1zZXRQcmVzZXRMb2NrKGUpe3RoaXMubG9ja1ByZXNldCE9PWUmJih0aGlzLmxvY2tQcmVzZXQ9ZSxlJiYodGhpcy5sb2NrZWRTeXN0ZW09dGhpcy5zeW50aFByb3BzLm1hc3RlclBhcmFtZXRlcnMubWlkaVN5c3RlbSkpfXNldERydW1zKGUpe2lmKGZBLmlzU3lzdGVtWEcodGhpcy5jaGFubmVsU3lzdGVtKSlpZihlKXRoaXMuc2V0QmFua01TQihmQS5nZXREcnVtQmFuayh0aGlzLmNoYW5uZWxTeXN0ZW0pKSx0aGlzLnNldEJhbmtMU0IoMCk7ZWxzZXtpZih0aGlzLmNoYW5uZWxOdW1iZXIlMTY9PT1TZSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkaXNhYmxlIGRydW1zIG9uIGNoYW5uZWwgJHt0aGlzLmNoYW5uZWxOdW1iZXJ9IGZvciBYRy5gKTt0aGlzLnNldEJhbmtNU0IoMCksdGhpcy5zZXRCYW5rTFNCKDApfWVsc2UgdGhpcy5zZXRHU0RydW1zKGUpO3RoaXMuc2V0RHJ1bUZsYWcoZSksdGhpcy5wcm9ncmFtQ2hhbmdlKHRoaXMucGF0Y2gucHJvZ3JhbSl9c2V0UGF0Y2goZSl7dGhpcy5zZXRCYW5rTVNCKGUuYmFua01TQiksdGhpcy5zZXRCYW5rTFNCKGUuYmFua0xTQiksdGhpcy5zZXRHU0RydW1zKGUuaXNHTUdTRHJ1bSksdGhpcy5wcm9ncmFtQ2hhbmdlKGUucHJvZ3JhbSl9c2V0R1NEcnVtcyhlKXtlIT09dGhpcy5wYXRjaC5pc0dNR1NEcnVtJiYodGhpcy5zZXRCYW5rTFNCKDApLHRoaXMuc2V0QmFua01TQigwKSx0aGlzLnBhdGNoLmlzR01HU0RydW09ZSl9c2V0VmlicmF0byhlLEEsdCl7dGhpcy5sb2NrR1NOUlBOUGFyYW1zfHwodGhpcy5jaGFubmVsVmlicmF0by5yYXRlPUEsdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT10LHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg9ZSl9ZGlzYWJsZUFuZExvY2tHU05SUE4oKXt0aGlzLmxvY2tHU05SUE5QYXJhbXM9ITAsdGhpcy5jaGFubmVsVmlicmF0by5yYXRlPTAsdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT0wLHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg9MH1yZXNldEdlbmVyYXRvck92ZXJyaWRlcygpe3RoaXMuZ2VuZXJhdG9yT3ZlcnJpZGVzLmZpbGwoVnMpLHRoaXMuZ2VuZXJhdG9yT3ZlcnJpZGVzRW5hYmxlZD0hMX1zZXRHZW5lcmF0b3JPdmVycmlkZShlLEEsdD0hMSl7dGhpcy5nZW5lcmF0b3JPdmVycmlkZXNbZV09QSx0aGlzLmdlbmVyYXRvck92ZXJyaWRlc0VuYWJsZWQ9ITAsdCYmdGhpcy52b2ljZXMuZm9yRWFjaChuPT57bi5nZW5lcmF0b3JzW2VdPUEsdGhpcy5jb21wdXRlTW9kdWxhdG9ycyhuKX0pfXJlc2V0R2VuZXJhdG9yT2Zmc2V0cygpe3RoaXMuZ2VuZXJhdG9yT2Zmc2V0cy5maWxsKDApLHRoaXMuZ2VuZXJhdG9yT2Zmc2V0c0VuYWJsZWQ9ITF9c2V0R2VuZXJhdG9yT2Zmc2V0KGUsQSl7dGhpcy5nZW5lcmF0b3JPZmZzZXRzW2VdPUEqeFtlXS5ucnBuLHRoaXMuZ2VuZXJhdG9yT2Zmc2V0c0VuYWJsZWQ9ITAsdGhpcy52b2ljZXMuZm9yRWFjaCh0PT57dGhpcy5jb21wdXRlTW9kdWxhdG9ycyh0KX0pfWtpbGxOb3RlKGUsQT0tMTJlMyl7ZSs9dGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5jaGFubmVsS2V5U2hpZnRdLHRoaXMudm9pY2VzLmZvckVhY2godD0+e3QucmVhbEtleT09PWUmJih0Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5yZWxlYXNlVm9sRW52XT1BLHQucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpKX0pfXN0b3BBbGxOb3RlcyhlPSExKXtlPyh0aGlzLnZvaWNlcy5sZW5ndGg9MCx0aGlzLnN1c3RhaW5lZFZvaWNlcy5sZW5ndGg9MCx0aGlzLnNlbmRDaGFubmVsUHJvcGVydHkoKSk6KHRoaXMudm9pY2VzLmZvckVhY2goQT0+e0EuaXNJblJlbGVhc2V8fEEucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpfSksdGhpcy5zdXN0YWluZWRWb2ljZXMuZm9yRWFjaChBPT57QS5yZWxlYXNlKHRoaXMuc3ludGguY3VycmVudFN5bnRoVGltZSl9KSksdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgic3RvcEFsbCIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGZvcmNlOmV9KX1tdXRlQ2hhbm5lbChlKXtlJiZ0aGlzLnN0b3BBbGxOb3RlcyghMCksdGhpcy5faXNNdXRlZD1lLHRoaXMuc2VuZENoYW5uZWxQcm9wZXJ0eSgpLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm11dGVDaGFubmVsIix7Y2hhbm5lbDp0aGlzLmNoYW5uZWxOdW1iZXIsaXNNdXRlZDplfSl9c2VuZENoYW5uZWxQcm9wZXJ0eSgpe2lmKCF0aGlzLnN5bnRoLmVuYWJsZUV2ZW50U3lzdGVtKXJldHVybjtsZXQgZT17dm9pY2VzQW1vdW50OnRoaXMudm9pY2VzLmxlbmd0aCxwaXRjaFdoZWVsOnRoaXMubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbF0scGl0Y2hXaGVlbFJhbmdlOnRoaXMubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbFJhbmdlXS8xMjgsaXNNdXRlZDp0aGlzLmlzTXV0ZWQsdHJhbnNwb3NpdGlvbjp0aGlzLmNoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdCt0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUcmFuc3Bvc2VGaW5lXS8xMDAsaXNEcnVtOnRoaXMuZHJ1bUNoYW5uZWx9O3RoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoImNoYW5uZWxQcm9wZXJ0eUNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLHByb3BlcnR5OmV9KX1zZXRCYW5rTVNCKGUpe3RoaXMubG9ja1ByZXNldHx8KHRoaXMucGF0Y2guYmFua01TQj1lKX1zZXRCYW5rTFNCKGUpe3RoaXMubG9ja1ByZXNldHx8KHRoaXMucGF0Y2guYmFua0xTQj1lKX1zZXREcnVtRmxhZyhlKXt0aGlzLmxvY2tQcmVzZXR8fCF0aGlzLnByZXNldHx8dGhpcy5kcnVtQ2hhbm5lbCE9PWUmJihlPyh0aGlzLmNoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdD0wLHRoaXMuZHJ1bUNoYW5uZWw9ITApOnRoaXMuZHJ1bUNoYW5uZWw9ITEsdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgiZHJ1bUNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGlzRHJ1bUNoYW5uZWw6dGhpcy5kcnVtQ2hhbm5lbH0pKX19LHluPTIwO2FzeW5jIGZ1bmN0aW9uIHVyKGUsQSx0LG4scyxhLHIpe2xldCBJPTAsbz0wLGc9W107Zm9yKGxldCBoIG9mIGUuc2FtcGxlcyl7biYmYSYmYXdhaXQgaC5jb21wcmVzc1NhbXBsZShhKSxzJiZoLnNldEF1ZGlvRGF0YShoLmdldEF1ZGlvRGF0YSgpLGguc2FtcGxlUmF0ZSk7bGV0IEM9aC5nZXRSYXdEYXRhKCEwKTtJKyssYXdhaXQgcj8uKGgubmFtZSxJLGUuc2FtcGxlcy5sZW5ndGgpLHAoYCVjRW5jb2RlZCBzYW1wbGUgJWMke0l9LiAke2gubmFtZX0lYyBvZiAlYyR7ZS5zYW1wbGVzLmxlbmd0aH0lYy4gQ29tcHJlc3NlZDogJWMke2guaXNDb21wcmVzc2VkfSVjLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxoLmlzQ29tcHJlc3NlZD9jLnJlY29nbml6ZWQ6Yy51bnJlY29nbml6ZWQsYy5pbmZvKSxvKz1DLmxlbmd0aCsoaC5pc0NvbXByZXNzZWQ/MDo5MiksZy5wdXNoKEMpfW8lMiE9PTAmJm8rKztsZXQgQj1uZXcgWShvK3luKTtrQShCLCJMSVNUIiksaHQoQixvK3luLTgsNCksa0EoQiwic2R0YSIpLGtBKEIsInNtcGwiKSxodChCLG8sNCk7bGV0IGQ9MDtyZXR1cm4gZS5zYW1wbGVzLmZvckVhY2goKGgsQyk9PntsZXQgUT1nW0NdO0Iuc2V0KFEsZCt5bik7bGV0IG0seTtoLmlzQ29tcHJlc3NlZD8obT1kLHk9bStRLmxlbmd0aCk6KG09ZC8yLHk9bStRLmxlbmd0aC8yLGQrPTkyKSxkKz1RLmxlbmd0aCxBLnB1c2gobSksdC5wdXNoKHkpfSksQn12YXIgZnI9NDhlMyxadD1jbGFzc3tuYW1lO3NhbXBsZVJhdGU7b3JpZ2luYWxLZXk7cGl0Y2hDb3JyZWN0aW9uO2xpbmtlZFNhbXBsZTtzYW1wbGVUeXBlO2xvb3BTdGFydDtsb29wRW5kO2xpbmtlZFRvPVtdO2RhdGFPdmVycmlkZGVuPSEwO2NvbXByZXNzZWREYXRhO2F1ZGlvRGF0YTtjb25zdHJ1Y3RvcihlLEEsdCxuLHMsYSxyKXt0aGlzLm5hbWU9ZSx0aGlzLnNhbXBsZVJhdGU9QSx0aGlzLm9yaWdpbmFsS2V5PXQsdGhpcy5waXRjaENvcnJlY3Rpb249bix0aGlzLmxvb3BTdGFydD1hLHRoaXMubG9vcEVuZD1yLHRoaXMuc2FtcGxlVHlwZT1zfWdldCBpc0NvbXByZXNzZWQoKXtyZXR1cm4gdGhpcy5jb21wcmVzc2VkRGF0YSE9PXZvaWQgMH1nZXQgaXNMaW5rZWQoKXtyZXR1cm4gdGhpcy5zYW1wbGVUeXBlPT09d0EucmlnaHRTYW1wbGV8fHRoaXMuc2FtcGxlVHlwZT09PXdBLmxlZnRTYW1wbGV8fHRoaXMuc2FtcGxlVHlwZT09PXdBLmxpbmtlZFNhbXBsZX1nZXQgdXNlQ291bnQoKXtyZXR1cm4gdGhpcy5saW5rZWRUby5sZW5ndGh9Z2V0UmF3RGF0YShlKXtyZXR1cm4gdGhpcy5jb21wcmVzc2VkRGF0YSYmZSYmIXRoaXMuZGF0YU92ZXJyaWRkZW4/dGhpcy5jb21wcmVzc2VkRGF0YTp0aGlzLmVuY29kZVMxNkxFKCl9cmVzYW1wbGVEYXRhKGUpe2xldCBBPXRoaXMuZ2V0QXVkaW9EYXRhKCksdD1lL3RoaXMuc2FtcGxlUmF0ZSxuPW5ldyBGbG9hdDMyQXJyYXkoTWF0aC5mbG9vcihBLmxlbmd0aCp0KSk7Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspbltzXT1BW01hdGguZmxvb3IocyooMS90KSldO0E9bix0aGlzLnNhbXBsZVJhdGU9ZSx0aGlzLmxvb3BTdGFydD1NYXRoLmZsb29yKHRoaXMubG9vcFN0YXJ0KnQpLHRoaXMubG9vcEVuZD1NYXRoLmZsb29yKHRoaXMubG9vcEVuZCp0KSx0aGlzLmF1ZGlvRGF0YT1BfWFzeW5jIGNvbXByZXNzU2FtcGxlKGUpe2lmKCF0aGlzLmlzQ29tcHJlc3NlZCl0cnl7bGV0IEE9dGhpcy5nZXRBdWRpb0RhdGEoKTsodGhpcy5zYW1wbGVSYXRlPDhlM3x8dGhpcy5zYW1wbGVSYXRlPjk2ZTMpJiYodGhpcy5yZXNhbXBsZURhdGEoZnIpLEE9dGhpcy5nZXRBdWRpb0RhdGEoKSk7bGV0IHQ9YXdhaXQgZShBLHRoaXMuc2FtcGxlUmF0ZSk7dGhpcy5zZXRDb21wcmVzc2VkRGF0YSh0KX1jYXRjaChBKXtzQShgRmFpbGVkIHRvIGNvbXByZXNzICR7dGhpcy5uYW1lfS4gTGVhdmluZyBhcyB1bmNvbXByZXNzZWQhYCxBKSx0aGlzLmNvbXByZXNzZWREYXRhPXZvaWQgMH19c2V0U2FtcGxlVHlwZShlKXtpZih0aGlzLnNhbXBsZVR5cGU9ZSx0aGlzLmlzTGlua2VkfHwodGhpcy5saW5rZWRTYW1wbGUmJih0aGlzLmxpbmtlZFNhbXBsZS5saW5rZWRTYW1wbGU9dm9pZCAwLHRoaXMubGlua2VkU2FtcGxlLnNhbXBsZVR5cGU9ZSksdGhpcy5saW5rZWRTYW1wbGU9dm9pZCAwKSwoZSYzMjc2OCk+MCl0aHJvdyBuZXcgRXJyb3IoIlJPTSBzYW1wbGVzIGFyZSBub3Qgc3VwcG9ydGVkLiIpfXVubGlua1NhbXBsZSgpe3RoaXMuc2V0U2FtcGxlVHlwZSh3QS5tb25vU2FtcGxlKX1zZXRMaW5rZWRTYW1wbGUoZSxBKXtpZihlLmxpbmtlZFNhbXBsZSl0aHJvdyBuZXcgRXJyb3IoYCR7ZS5uYW1lfSBpcyBsaW5rZWQgdHAgJHtlLmxpbmtlZFNhbXBsZS5uYW1lfS4gVW5saW5rIGl0IGZpcnN0LmApO2lmKHRoaXMubGlua2VkU2FtcGxlPWUsZS5saW5rZWRTYW1wbGU9dGhpcyxBPT09d0EubGVmdFNhbXBsZSl0aGlzLnNldFNhbXBsZVR5cGUod0EubGVmdFNhbXBsZSksZS5zZXRTYW1wbGVUeXBlKHdBLnJpZ2h0U2FtcGxlKTtlbHNlIGlmKEE9PT13QS5yaWdodFNhbXBsZSl0aGlzLnNldFNhbXBsZVR5cGUod0EucmlnaHRTYW1wbGUpLGUuc2V0U2FtcGxlVHlwZSh3QS5sZWZ0U2FtcGxlKTtlbHNlIGlmKEE9PT13QS5saW5rZWRTYW1wbGUpdGhpcy5zZXRTYW1wbGVUeXBlKHdBLmxpbmtlZFNhbXBsZSksZS5zZXRTYW1wbGVUeXBlKHdBLmxpbmtlZFNhbXBsZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2FtcGxlIHR5cGU6ICIrQSl9bGlua1RvKGUpe3RoaXMubGlua2VkVG8ucHVzaChlKX11bmxpbmtGcm9tKGUpe2xldCBBPXRoaXMubGlua2VkVG8uaW5kZXhPZihlKTtpZihBPDApe3NBKGBDYW5ub3QgdW5saW5rICR7ZS5uYW1lfSBmcm9tICR7dGhpcy5uYW1lfTogbm90IGxpbmtlZC5gKTtyZXR1cm59dGhpcy5saW5rZWRUby5zcGxpY2UoQSwxKX1nZXRBdWRpb0RhdGEoKXtpZih0aGlzLmF1ZGlvRGF0YSlyZXR1cm4gdGhpcy5hdWRpb0RhdGE7aWYodGhpcy5pc0NvbXByZXNzZWQpcmV0dXJuIHRoaXMuYXVkaW9EYXRhPXRoaXMuZGVjb2RlVm9yYmlzKCksdGhpcy5hdWRpb0RhdGE7dGhyb3cgbmV3IEVycm9yKCJTYW1wbGUgZGF0YSBpcyB1bmRlZmluZWQgZm9yIGEgQmFzaWNTYW1wbGUgaW5zdGFuY2UuIil9c2V0QXVkaW9EYXRhKGUsQSl7dGhpcy5hdWRpb0RhdGE9ZSx0aGlzLnNhbXBsZVJhdGU9QSx0aGlzLmRhdGFPdmVycmlkZGVuPSEwLHRoaXMuY29tcHJlc3NlZERhdGE9dm9pZCAwfXNldENvbXByZXNzZWREYXRhKGUpe3RoaXMuYXVkaW9EYXRhPXZvaWQgMCx0aGlzLmNvbXByZXNzZWREYXRhPWUsdGhpcy5kYXRhT3ZlcnJpZGRlbj0hMX1lbmNvZGVTMTZMRSgpe2xldCBlPXRoaXMuZ2V0QXVkaW9EYXRhKCksQT1uZXcgSW50MTZBcnJheShlLmxlbmd0aCksdD1lLmxlbmd0aDtmb3IobGV0IG49MDtuPHQ7bisrKXtsZXQgcz1lW25dKjMyNzY4O3M+MzI3Njc/cz0zMjc2NzpzPC0zMjc2OCYmKHM9LTMyNzY4KSxBW25dPXN9cmV0dXJuIG5ldyBZKEEuYnVmZmVyKX1kZWNvZGVWb3JiaXMoKXtpZih0aGlzLmF1ZGlvRGF0YSlyZXR1cm4gdGhpcy5hdWRpb0RhdGE7aWYoIXRoaXMuY29tcHJlc3NlZERhdGEpdGhyb3cgbmV3IEVycm9yKCJDb21wcmVzc2VkIGRhdGEgaXMgbWlzc2luZy4iKTt0cnl7bGV0IEE9T3QuZGVjb2RlKHRoaXMuY29tcHJlc3NlZERhdGEpLmRhdGFbMF07aWYoQT09PXZvaWQgMClyZXR1cm4gc0EoYEVycm9yIGRlY29kaW5nIHNhbXBsZSAke3RoaXMubmFtZX06IFZvcmJpcyBkZWNvZGUgcmV0dXJuZWQgdW5kZWZpbmVkLmApLG5ldyBGbG9hdDMyQXJyYXkoMCk7Zm9yKGxldCB0PTA7dDxBLmxlbmd0aDt0KyspQVt0XT1NYXRoLm1heCgtMSxNYXRoLm1pbihBW3RdLC45OTk5Njk0ODI0MjE4NzUpKTtyZXR1cm4gQX1jYXRjaChlKXtyZXR1cm4gc0EoYEVycm9yIGRlY29kaW5nIHNhbXBsZSAke3RoaXMubmFtZX06ICR7ZX1gKSxuZXcgRmxvYXQzMkFycmF5KHRoaXMubG9vcEVuZCsxKX19fSxtcj1jbGFzcyBleHRlbmRzIFp0e2NvbnN0cnVjdG9yKCl7c3VwZXIoIiIsNDQxMDAsNjAsMCx3QS5tb25vU2FtcGxlLDAsMCl9fSxWbj0xNixTcj1jbGFzcyBleHRlbmRzIFp0e2xpbmtlZFNhbXBsZUluZGV4O3MxNmxlRGF0YTtzdGFydEJ5dGVPZmZzZXQ7ZW5kQnl0ZU9mZnNldDtzYW1wbGVJRDtjb25zdHJ1Y3RvcihlLEEsdCxuLHMsYSxyLEksbyxnLEIsZCl7bGV0IGg9KGcmVm4pPjA7ZyY9flZuLHN1cGVyKGUsYSxyLEksZyxuLUEvMixzLUEvMiksdGhpcy5kYXRhT3ZlcnJpZGRlbj0hMSx0aGlzLm5hbWU9ZSx0aGlzLnN0YXJ0Qnl0ZU9mZnNldD1BLHRoaXMuZW5kQnl0ZU9mZnNldD10LHRoaXMuc2FtcGxlSUQ9ZDtsZXQgQz1CIGluc3RhbmNlb2YgWT9CLmN1cnJlbnRJbmRleDowO0IgaW5zdGFuY2VvZiBZP2g/KHRoaXMubG9vcFN0YXJ0Kz10aGlzLnN0YXJ0Qnl0ZU9mZnNldC8yLHRoaXMubG9vcEVuZCs9dGhpcy5zdGFydEJ5dGVPZmZzZXQvMix0aGlzLnNldENvbXByZXNzZWREYXRhKEIuc2xpY2UodGhpcy5zdGFydEJ5dGVPZmZzZXQvMitDLHRoaXMuZW5kQnl0ZU9mZnNldC8yK0MpKSk6dGhpcy5zMTZsZURhdGE9Qi5zbGljZShDK3RoaXMuc3RhcnRCeXRlT2Zmc2V0LEMrdGhpcy5lbmRCeXRlT2Zmc2V0KTp0aGlzLnNldEF1ZGlvRGF0YShCLnNsaWNlKHRoaXMuc3RhcnRCeXRlT2Zmc2V0LzIsdGhpcy5lbmRCeXRlT2Zmc2V0LzIpLGEpLHRoaXMubGlua2VkU2FtcGxlSW5kZXg9b31nZXRMaW5rZWRTYW1wbGUoZSl7aWYodGhpcy5saW5rZWRTYW1wbGV8fCF0aGlzLmlzTGlua2VkKXJldHVybjtsZXQgQT1lW3RoaXMubGlua2VkU2FtcGxlSW5kZXhdO0E/QS5saW5rZWRTYW1wbGU/KHAoYCVjSW52YWxpZCBsaW5rZWQgc2FtcGxlIGZvciAke3RoaXMubmFtZX06ICR7QS5uYW1lfSBpcyBhbHJlYWR5IGxpbmtlZCB0byAke0EubGlua2VkU2FtcGxlLm5hbWV9YCxjLndhcm4pLHRoaXMudW5saW5rU2FtcGxlKCkpOnRoaXMuc2V0TGlua2VkU2FtcGxlKEEsdGhpcy5zYW1wbGVUeXBlKToocChgJWNJbnZhbGlkIGxpbmtlZCBzYW1wbGUgZm9yICR7dGhpcy5uYW1lfS4gU2V0dGluZyB0byBtb25vLmAsYy53YXJuKSx0aGlzLnVubGlua1NhbXBsZSgpKX1nZXRBdWRpb0RhdGEoKXtpZih0aGlzLmF1ZGlvRGF0YSlyZXR1cm4gdGhpcy5hdWRpb0RhdGE7aWYodGhpcy5pc0NvbXByZXNzZWQpcmV0dXJuIHN1cGVyLmdldEF1ZGlvRGF0YSgpO2lmKCF0aGlzLnMxNmxlRGF0YSl0aHJvdyBjb25zb2xlLmVycm9yKHRoaXMpLG5ldyBFcnJvcigiVW5leHBlY3RlZCBsYWNrIG9mIGF1ZGlvIGRhdGEuIik7bGV0IGU9dGhpcy5lbmRCeXRlT2Zmc2V0LXRoaXMuc3RhcnRCeXRlT2Zmc2V0O2lmKGU8MSlyZXR1cm4gc0EoYEludmFsaWQgc2FtcGxlICR7dGhpcy5uYW1lfSEgSW52YWxpZCBsZW5ndGg6ICR7ZX1gKSxuZXcgRmxvYXQzMkFycmF5KDEpO2xldCBBPW5ldyBGbG9hdDMyQXJyYXkoZS8yKSx0PW5ldyBJbnQxNkFycmF5KHRoaXMuczE2bGVEYXRhLmJ1ZmZlcik7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspQVtuXT10W25dLzMyNzY4O3JldHVybiB0aGlzLmF1ZGlvRGF0YT1BLEF9Z2V0UmF3RGF0YShlKXtyZXR1cm4gdGhpcy5kYXRhT3ZlcnJpZGRlbnx8dGhpcy5jb21wcmVzc2VkRGF0YT9zdXBlci5nZXRSYXdEYXRhKGUpOnRoaXMuczE2bGVEYXRhPz9uZXcgVWludDhBcnJheSgwKX19O2Z1bmN0aW9uIGJzKGUsQSx0PSEwKXtsZXQgbj1bXSxzPTA7Zm9yKDtlLmRhdGEubGVuZ3RoPmUuZGF0YS5jdXJyZW50SW5kZXg7KXtsZXQgYT1wcihzLGUuZGF0YSxBKTtuLnB1c2goYSkscysrfXJldHVybiBuLnBvcCgpLHQmJm4uZm9yRWFjaChhPT5hLmdldExpbmtlZFNhbXBsZShuKSksbn1mdW5jdGlvbiBwcihlLEEsdCl7bGV0IG49aEEoQSwyMCkscz1OKEEsNCkqMixhPU4oQSw0KSoyLHI9TihBLDQpLEk9TihBLDQpLG89TihBLDQpLGc9QVtBLmN1cnJlbnRJbmRleCsrXTtnPjEyNyYmKGc9NjApO2xldCBCPXFhKEFbQS5jdXJyZW50SW5kZXgrK10pLGQ9TihBLDIpLGg9TihBLDIpO3JldHVybiBuZXcgU3IobixzLGEscixJLG8sZyxCLGQsaCx0LGUpfWZ1bmN0aW9uIHlyKGUsQSx0KXtsZXQgcz00NiooZS5zYW1wbGVzLmxlbmd0aCsxKSxhPW5ldyBZKHMpLHI9bmV3IFkocyksST0wO2Uuc2FtcGxlcy5mb3JFYWNoKChCLGQpPT57a0EoYSxCLm5hbWUuc3Vic3RyaW5nKDAsMjApLDIwKSxrQShyLEIubmFtZS5zdWJzdHJpbmcoMjApLDIwKTtsZXQgaD1BW2RdO2dBKGEsaCksci5jdXJyZW50SW5kZXgrPTQ7bGV0IEM9dFtkXTtnQShhLEMpLHIuY3VycmVudEluZGV4Kz00O2xldCBRPUIubG9vcFN0YXJ0K2gsbT1CLmxvb3BFbmQraDtCLmlzQ29tcHJlc3NlZCYmKFEtPWgsbS09aCksZ0EoYSxRKSxnQShhLG0pLGdBKGEsQi5zYW1wbGVSYXRlKSxhW2EuY3VycmVudEluZGV4KytdPUIub3JpZ2luYWxLZXksYVthLmN1cnJlbnRJbmRleCsrXT1CLnBpdGNoQ29ycmVjdGlvbixyLmN1cnJlbnRJbmRleCs9MTQ7bGV0IHk9Qi5saW5rZWRTYW1wbGU/ZS5zYW1wbGVzLmluZGV4T2YoQi5saW5rZWRTYW1wbGUpOjA7SihhLE1hdGgubWF4KDAseSkmNjU1MzUpLEoocixNYXRoLm1heCgwLHkpPj4xNiksST1NYXRoLm1heChJLHkpO2xldCBGPUIuc2FtcGxlVHlwZTtCLmlzQ29tcHJlc3NlZCYmKEZ8PVZuKSxKKGEsRiksci5jdXJyZW50SW5kZXgrPTJ9KSxrQShhLCJFT1MiLDQ2KSxrQShyLCJFT1MiLDQ2KTtsZXQgbz1jQSgic2hkciIsYSksZz1jQSgic2hkciIscik7cmV0dXJue3BkdGE6byx4ZHRhOmd9fWZ1bmN0aW9uIHZzKGUsQT0hMSl7bGV0IHQ9QT9lLnByZXNldHM6ZS5pbnN0cnVtZW50cyxuPUE/InBnZW4iOiJpZ2VuIixzPUE/InBtb2QiOiJpbW9kIixhPUE/InBiYWciOiJpYmFnIixyPUE/InBoZHIiOiJpbnN0IixJPUE/ZGE6bGEsbz10Lm1hcChrPT4oayBpbnN0YW5jZW9mIHBlLGsuZ2V0U2l6ZSgpKSksZz1vLnJlZHVjZSgoayxEKT0+aytELmdlbiwwKStDdCxCPW5ldyBZKGcpLGQ9by5yZWR1Y2UoKGssRCk9PmsrRC5tb2QsMCkrbWUsaD1uZXcgWShkKSxDPW8ucmVkdWNlKChrLEQpPT5rK0QuYmFnLDApK0p0LFE9e3BkdGE6bmV3IFkoQykseGR0YTpuZXcgWShDKX0sbT1vLnJlZHVjZSgoayxEKT0+RC5oZHIraywwKStJLHk9e3BkdGE6bmV3IFkobSkseGR0YTpuZXcgWShtKX0sRj17Z2VuOjAsYmFnOjAsbW9kOjAsaGRyOjB9O3JldHVybiB0LmZvckVhY2goaz0+e2sgaW5zdGFuY2VvZiBwZSxrLndyaXRlKEIsaCxRLHksRixlKX0pLEE/KGtBKHkucGR0YSwiRU9QIiwyMCkseS5wZHRhLmN1cnJlbnRJbmRleCs9NCxKKHkucGR0YSxGLmhkciY2NTUzNSkseS5wZHRhLmN1cnJlbnRJbmRleCs9MTIsa0EoeS54ZHRhLCIiLDIwKSx5LnhkdGEuY3VycmVudEluZGV4Kz00LEooeS54ZHRhLEYuaGRyPj4xNikseS54ZHRhLmN1cnJlbnRJbmRleCs9MTIpOihrQSh5LnBkdGEsIkVPSSIsMjApLGtBKHkueGR0YSwiIiwyMCksSih5LnBkdGEsRi5oZHImNjU1MzUpLEooeS54ZHRhLEYuaGRyPj4xNikpLEooUS5wZHRhLEYuZ2VuJjY1NTM1KSxKKFEueGR0YSxGLmdlbj4+MTYpLEooUS5wZHRhLEYubW9kJjY1NTM1KSxKKFEueGR0YSxGLm1vZD4+MTYpLHt3cml0ZVhkdGE6TWF0aC5tYXgoZy9DdCxkL21lLEMvSnQsbS9JKT42NTUzNSxnZW46e3BkdGE6Y0EobixCKSx4ZHRhOmNBKHMsbmV3IFkoQ3QpKX0sbW9kOntwZHRhOmNBKHMsaCkseGR0YTpjQShzLG5ldyBZKG1lKSl9LGJhZzp7cGR0YTpjQShhLFEucGR0YSkseGR0YTpjQShhLFEueGR0YSl9LGhkcjp7cGR0YTpjQShyLHkucGR0YSkseGR0YTpjQShyLHkueGR0YSl9fX12YXIgWG49e2NvbXByZXNzOiExLGNvbXByZXNzaW9uRnVuY3Rpb246dm9pZCAwLHByb2dyZXNzRnVuY3Rpb246dm9pZCAwLHdyaXRlRGVmYXVsdE1vZHVsYXRvcnM6ITAsd3JpdGVFeHRlbmRlZExpbWl0czohMCxkZWNvbXByZXNzOiExfTthc3luYyBmdW5jdGlvbiBrcihlLEE9WG4pe2xldCB0PSRuKEEsWG4pO2lmKHQ/LmNvbXByZXNzKXtpZih0eXBlb2YgdD8uY29tcHJlc3Npb25GdW5jdGlvbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoIk5vIGNvbXByZXNzaW9uIGZ1bmN0aW9uIHN1cHBsaWVkIGJ1dCBjb21wcmVzc2lvbiBlbmFibGVkLiIpO2lmKHQ/LmRlY29tcHJlc3MpdGhyb3cgbmV3IEVycm9yKCJEZWNvbXByZXNzZWQgYW5kIGNvbXByZXNzZWQgYXQgdGhlIHNhbWUgdGltZS4iKX1iQSgiJWNTYXZpbmcgc291bmRiYW5rLi4uIixjLmluZm8pLHAoYCVjQ29tcHJlc3Npb246ICVjJHt0Py5jb21wcmVzc3x8ImZhbHNlIn0lY2AsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkKSxPQSgiJWNXcml0aW5nIElORk8uLi4iLGMuaW5mbyk7bGV0IG49W107ZS5zb3VuZEJhbmtJbmZvLnNvZnR3YXJlPSJTcGVzc2FTeW50aCIsKHQ/LmNvbXByZXNzfHxlLnNhbXBsZXMuc29tZShEPT5ELmlzQ29tcHJlc3NlZCkpJiYoZS5zb3VuZEJhbmtJbmZvLnZlcnNpb24ubWFqb3I9MyxlLnNvdW5kQmFua0luZm8udmVyc2lvbi5taW5vcj0wKSx0Py5kZWNvbXByZXNzJiYoZS5zb3VuZEJhbmtJbmZvLnZlcnNpb24ubWFqb3I9MixlLnNvdW5kQmFua0luZm8udmVyc2lvbi5taW5vcj00KTtsZXQgcz0oRCx2KT0+e24ucHVzaChjQShELG5lKHYsITAsITApKSl9LGE9bmV3IFkoNCk7aWYoSihhLGUuc291bmRCYW5rSW5mby52ZXJzaW9uLm1ham9yKSxKKGEsZS5zb3VuZEJhbmtJbmZvLnZlcnNpb24ubWlub3IpLG4ucHVzaChjQSgiaWZpbCIsYSkpLGUuc291bmRCYW5rSW5mby5yb21WZXJzaW9uKXtsZXQgRD1uZXcgWSg0KTtKKEQsZS5zb3VuZEJhbmtJbmZvLnJvbVZlcnNpb24ubWFqb3IpLEooRCxlLnNvdW5kQmFua0luZm8ucm9tVmVyc2lvbi5taW5vciksbi5wdXNoKGNBKCJpdmVyIixEKSl9bGV0IHI9KGUuc291bmRCYW5rSW5mbz8uY29tbWVudD8/IiIpKyhlLnNvdW5kQmFua0luZm8uc3ViamVjdD9gCiR7ZS5zb3VuZEJhbmtJbmZvLnN1YmplY3R9YDoiIik7Zm9yKGxldFtELHZdb2YgT2JqZWN0LmVudHJpZXMoZS5zb3VuZEJhbmtJbmZvKSl7bGV0IEw9RCxFPXY7aWYoRSlzd2l0Y2goTCl7Y2FzZSJuYW1lIjpzKCJJTkFNIixFKTticmVhaztjYXNlImNvbW1lbnQiOnMoIklDTVQiLHIpO2JyZWFrO2Nhc2UiY29weXJpZ2h0IjpzKCJJQ09QIixFKTticmVhaztjYXNlImNyZWF0aW9uRGF0ZSI6cygiSUNSRCIsRS50b0lTT1N0cmluZygpKTticmVhaztjYXNlImVuZ2luZWVyIjpzKCJJRU5HIixFKTticmVhaztjYXNlInByb2R1Y3QiOnMoIklQUkQiLEUpO2JyZWFrO2Nhc2Uicm9tSW5mbyI6cygiaXJvbSIsRSk7YnJlYWs7Y2FzZSJzb2Z0d2FyZSI6cygiSVNGVCIsRSk7YnJlYWs7Y2FzZSJzb3VuZEVuZ2luZSI6cygiaXNuZyIsRSk7YnJlYWs7Y2FzZSJzdWJqZWN0IjpicmVha319aWYoZS5kZWZhdWx0TW9kdWxhdG9ycy5zb21lKEQ9PkVhLmZpbmRJbmRleCh2PT5FQS5pc0lkZW50aWNhbCh2LEQsITApKT09PS0xKSYmdD8ud3JpdGVEZWZhdWx0TW9kdWxhdG9ycyl7bGV0IEQ9ZS5kZWZhdWx0TW9kdWxhdG9ycztwKGAlY1dyaXRpbmcgJWMke0QubGVuZ3RofSVjIGRlZmF1bHQgbW9kdWxhdG9ycy4uLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pO2xldCB2PW1lK0QubGVuZ3RoKm1lLEw9bmV3IFkodik7Zm9yKGxldCBFIG9mIEQpRS53cml0ZShMKTtodChMLDAsbWUpLG4ucHVzaChjQSgiRE1PRCIsTCkpfVooKSxwKCIlY1dyaXRpbmcgU0RUQS4uLiIsYy5pbmZvKTtsZXQgbz1bXSxnPVtdLEI9YXdhaXQgdXIoZSxvLGcsdC5jb21wcmVzcyx0LmRlY29tcHJlc3MsdD8uY29tcHJlc3Npb25GdW5jdGlvbix0Py5wcm9ncmVzc0Z1bmN0aW9uKTtwKCIlY1dyaXRpbmcgUERUQS4uLiIsYy5pbmZvKSxwKCIlY1dyaXRpbmcgU0hEUi4uLiIsYy5pbmZvKTtsZXQgZD15cihlLG8sZyk7T0EoIiVjV3JpdGluZyBpbnN0cnVtZW50cy4uLiIsYy5pbmZvKTtsZXQgaD12cyhlLCExKTtaKCksT0EoIiVjV3JpdGluZyBwcmVzZXRzLi4uIixjLmluZm8pO2xldCBDPXZzKGUsITApO1ooKTtsZXQgUT1bQy5oZHIsQy5iYWcsQy5tb2QsQy5nZW4saC5oZHIsaC5iYWcsaC5tb2QsaC5nZW4sZF0sbT12QSgicGR0YSIsUS5tYXAoRD0+RC5wZHRhKSwhMCk7aWYodC53cml0ZUV4dGVuZGVkTGltaXRzJiYoaC53cml0ZVhkdGF8fEMud3JpdGVYZHRhfHxlLnByZXNldHMuc29tZShEPT5ELm5hbWUubGVuZ3RoPjIwKXx8ZS5pbnN0cnVtZW50cy5zb21lKEQ9PkQubmFtZS5sZW5ndGg+MjApfHxlLnNhbXBsZXMuc29tZShEPT5ELm5hbWUubGVuZ3RoPjIwKSkpe3AoIiVjV3JpdGluZyB0aGUgeGR0YSBjaHVuayBhcyB3cml0ZUV4ZW5kZWRMaW1pdHMgaXMgZW5hYmxlZCBhbmQgYXQgbGVhc3Qgb25lIGNvbmRpdGlvbiB3YXMgbWV0LiIsYy5pbmZvLGMudmFsdWUpO2xldCBEPXZBKCJ4ZHRhIixRLm1hcCh2PT52LnhkdGEpLCEwKTtuLnB1c2goRCl9bGV0IEY9dkEoIklORk8iLG4sITApO3AoIiVjV3JpdGluZyB0aGUgb3V0cHV0IGZpbGUuLi4iLGMuaW5mbyk7bGV0IGs9dkEoIlJJRkYiLFtuZSgic2ZiayIpLEYsQixtXSk7cmV0dXJuIHAoYCVjU2F2ZWQgc3VjY2VzZnVsbHkhIEZpbmFsIGZpbGUgc2l6ZTogJWMke2subGVuZ3RofWAsYy5pbmZvLGMucmVjb2duaXplZCksWigpLGsuYnVmZmVyfXZhciBqZT1jbGFzc3tzdGF0aWMgdmVyaWZ5SGVhZGVyKGUsLi4uQSl7Zm9yKGxldCB0IG9mIEEpaWYoZS5oZWFkZXIudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKSlyZXR1cm47dGhpcy5wYXJzaW5nRXJyb3IoYEludmFsaWQgRExTIGNodW5rIGhlYWRlciEgRXhwZWN0ZWQgIiR7QS5qb2luKCIsIG9yICIpfSIgZ290ICIke2UuaGVhZGVyLnRvTG93ZXJDYXNlKCl9ImApfXN0YXRpYyB2ZXJpZnlUZXh0KGUsLi4uQSl7Zm9yKGxldCB0IG9mIEEpaWYoZS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpKXJldHVybjt0aGlzLnBhcnNpbmdFcnJvcihgRm91ckNDIGVycm9yOiBFeHBlY3RlZCAiJHtBLmpvaW4oIiwgb3IgIil9IiBnb3QgIiR7ZS50b0xvd2VyQ2FzZSgpfSJgKX1zdGF0aWMgcGFyc2luZ0Vycm9yKGUpe3Rocm93IFooKSxuZXcgRXJyb3IoYERMUyBwYXJzZSBlcnJvcjogJHtlfSBUaGUgZmlsZSBtYXkgYmUgY29ycnVwdGVkLmApfXN0YXRpYyB2ZXJpZnlBbmRSZWFkTGlzdChlLC4uLkEpe3RoaXMudmVyaWZ5SGVhZGVyKGUsIkxJU1QiKSxlLmRhdGEuY3VycmVudEluZGV4PTAsdGhpcy52ZXJpZnlUZXh0KGhBKGUuZGF0YSw0KSwuLi5BKTtsZXQgdD1bXTtmb3IoO2UuZGF0YS5sZW5ndGg+ZS5kYXRhLmN1cnJlbnRJbmRleDspdC5wdXNoKHJBKGUuZGF0YSkpO3JldHVybiB0fX0sZ3Q9MjAsa249MTYsemU9Y2xhc3MgQnQgZXh0ZW5kcyBqZXtnYWluPTA7dW5pdHlOb3RlPTYwO2ZpbmVUdW5lPTA7bG9vcHM9bmV3IEFycmF5O2Z1bE9wdGlvbnM9MjtzdGF0aWMgY29weUZyb20oQSl7bGV0IHQ9bmV3IEJ0O3JldHVybiB0LnVuaXR5Tm90ZT1BLnVuaXR5Tm90ZSx0LmdhaW49QS5nYWluLHQuZmluZVR1bmU9QS5maW5lVHVuZSx0Lmxvb3BzPUEubG9vcHMubWFwKG49Pih7Li4ubn0pKSx0LmZ1bE9wdGlvbnM9QS5mdWxPcHRpb25zLHR9c3RhdGljIHJlYWQoQSl7dGhpcy52ZXJpZnlIZWFkZXIoQSwid3NtcCIpO2xldCB0PW5ldyBCdCxuPU4oQS5kYXRhLDQpO2lmKG4hPT1ndCYmc0EoYFdzbXAgY2JTaXplIG1pc21hdGNoOiBnb3QgJHtufSwgZXhwZWN0ZWQgJHtndH0uYCksdC51bml0eU5vdGU9TihBLmRhdGEsMiksdC5maW5lVHVuZT1qbihBLmRhdGFbQS5kYXRhLmN1cnJlbnRJbmRleCsrXSxBLmRhdGFbQS5kYXRhLmN1cnJlbnRJbmRleCsrXSksdC5nYWluPU4oQS5kYXRhLDQpfDAsdC5mdWxPcHRpb25zPU4oQS5kYXRhLDQpLE4oQS5kYXRhLDQpIT09MCl7bGV0IGE9TihBLmRhdGEsNCk7YSE9PWtuJiZzQShgQ2JTaXplIGZvciBsb29wIGluIHdzbXAgbWlzbWF0Y2guIEV4cGVjdGVkICR7Z3R9LCBnb3QgJHthfS5gKTtsZXQgcj1OKEEuZGF0YSw0KSxJPU4oQS5kYXRhLDQpLG89TihBLmRhdGEsNCk7dC5sb29wcy5wdXNoKHtsb29wU3RhcnQ6SSxsb29wTGVuZ3RoOm8sbG9vcFR5cGU6cn0pfXJldHVybiB0fXN0YXRpYyBmcm9tU0ZTYW1wbGUoQSl7bGV0IHQ9bmV3IEJ0O3JldHVybiB0LnVuaXR5Tm90ZT1BLm9yaWdpbmFsS2V5LHQuZmluZVR1bmU9QS5waXRjaENvcnJlY3Rpb24sKEEubG9vcEVuZCE9PTB8fEEubG9vcFN0YXJ0IT09MCkmJnQubG9vcHMucHVzaCh7bG9vcFN0YXJ0OkEubG9vcFN0YXJ0LGxvb3BMZW5ndGg6QS5sb29wRW5kLUEubG9vcFN0YXJ0LGxvb3BUeXBlOnlzLmZvcndhcmR9KSx0fXN0YXRpYyBmcm9tU0Zab25lKEEpe2xldCB0PW5ldyBCdDt0LnVuaXR5Tm90ZT1BLmdldEdlbmVyYXRvcihpLm92ZXJyaWRpbmdSb290S2V5LEEuc2FtcGxlLm9yaWdpbmFsS2V5KSxBLmdldEdlbmVyYXRvcihpLnNjYWxlVHVuaW5nLDEwMCk9PT0wJiZBLmtleVJhbmdlLm1heC1BLmtleVJhbmdlLm1pbj09PTAmJih0LnVuaXR5Tm90ZT1BLmtleVJhbmdlLm1pbiksdC5maW5lVHVuZT1BLmZpbmVUdW5pbmcrQS5zYW1wbGUucGl0Y2hDb3JyZWN0aW9uO2xldCBuPUEuZ2V0R2VuZXJhdG9yKGkuaW5pdGlhbEF0dGVudWF0aW9uLDApKi40O3QuZ2Fpbj0tbjw8MTY7bGV0IHM9QS5nZXRHZW5lcmF0b3IoaS5zYW1wbGVNb2RlcywwKTtpZihzIT09MCl7bGV0IGE9QS5zYW1wbGUubG9vcFN0YXJ0K0EuZ2V0R2VuZXJhdG9yKGkuc3RhcnRsb29wQWRkcnNPZmZzZXQsMCkrQS5nZXRHZW5lcmF0b3IoaS5zdGFydGxvb3BBZGRyc0NvYXJzZU9mZnNldCwwKSozMjc2OCxyPUEuc2FtcGxlLmxvb3BFbmQrQS5nZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNPZmZzZXQsMCkrQS5nZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsMCkqMzI3NjgsSTtzd2l0Y2gocyl7Y2FzZSAxOmRlZmF1bHQ6ST0wO2JyZWFrO2Nhc2UgMzpJPTF9dC5sb29wcy5wdXNoKHtsb29wVHlwZTpJLGxvb3BTdGFydDphLGxvb3BMZW5ndGg6ci1hfSl9cmV0dXJuIHR9dG9TRlpvbmUoQSx0KXtsZXQgbj0wLHM9dGhpcy5sb29wc1swXTtzJiYobj1zLmxvb3BUeXBlPT09eXMubG9vcEFuZFJlbGVhc2U/MzoxKSxuIT09MCYmQS5zZXRHZW5lcmF0b3IoaS5zYW1wbGVNb2RlcyxuKTtsZXQgST0tKHRoaXMuZ2Fpbj4+MTYpLy40O2lmKEkhPT0wJiZBLnNldEdlbmVyYXRvcihpLmluaXRpYWxBdHRlbnVhdGlvbixJKSxBLmZpbmVUdW5pbmc9dGhpcy5maW5lVHVuZS10LnBpdGNoQ29ycmVjdGlvbix0aGlzLnVuaXR5Tm90ZSE9PXQub3JpZ2luYWxLZXkmJkEuc2V0R2VuZXJhdG9yKGkub3ZlcnJpZGluZ1Jvb3RLZXksdGhpcy51bml0eU5vdGUpLHMpe2xldCBvPXMubG9vcFN0YXJ0LXQubG9vcFN0YXJ0LEI9cy5sb29wU3RhcnQrcy5sb29wTGVuZ3RoLXQubG9vcEVuZDtpZihvIT09MCl7bGV0IGQ9byUzMjc2ODtBLnNldEdlbmVyYXRvcihpLnN0YXJ0bG9vcEFkZHJzT2Zmc2V0LGQpO2xldCBoPU1hdGgudHJ1bmMoby8zMjc2OCk7aCE9PTAmJkEuc2V0R2VuZXJhdG9yKGkuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaCl9aWYoQiE9PTApe2xldCBkPUIlMzI3Njg7QS5zZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNPZmZzZXQsZCk7bGV0IGg9TWF0aC50cnVuYyhCLzMyNzY4KTtoIT09MCYmQS5zZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaCl9fX13cml0ZSgpe2xldCBBPW5ldyBZKGd0K3RoaXMubG9vcHMubGVuZ3RoKmtuKTtyZXR1cm4gZ0EoQSxndCksSihBLHRoaXMudW5pdHlOb3RlKSxKKEEsdGhpcy5maW5lVHVuZSksZ0EoQSx0aGlzLmdhaW4pLGdBKEEsdGhpcy5mdWxPcHRpb25zKSxnQShBLHRoaXMubG9vcHMubGVuZ3RoKSx0aGlzLmxvb3BzLmZvckVhY2godD0+e2dBKEEsa24pLGdBKEEsdC5sb29wVHlwZSksZ0EoQSx0Lmxvb3BTdGFydCksZ0EoQSx0Lmxvb3BMZW5ndGgpfSksY0EoIndzbXAiLEEpfX0sRG49e1BDTToxLEFMQVc6Nn07ZnVuY3Rpb24gRHIoZSxBKXtsZXQgdD1NYXRoLnBvdygyLEEqOC0xKSxuPU1hdGgucG93KDIsQSo4KSxzLGE9ITE7QT09PTE/KHM9MjU1LGE9ITApOnM9dDtsZXQgcj1lLmxlbmd0aC9BLEk9bmV3IEZsb2F0MzJBcnJheShyKTtpZihBPT09Mil7bGV0IG89bmV3IEludDE2QXJyYXkoZS5idWZmZXIpO2ZvcihsZXQgZz0wO2c8by5sZW5ndGg7ZysrKUlbZ109b1tnXS8zMjc2OH1lbHNlIGZvcihsZXQgbz0wO288SS5sZW5ndGg7bysrKXtsZXQgZz1OKGUsQSk7YT9JW29dPWcvcy0uNTooZz49dCYmKGctPW4pLElbb109Zy9zKX1yZXR1cm4gSX1mdW5jdGlvbiB3cihlLEEpe2xldCB0PWUubGVuZ3RoL0Esbj1uZXcgRmxvYXQzMkFycmF5KHQpO2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKXtsZXQgYT1OKGUsQSkscj1hXjg1O3ImPTEyNztsZXQgST1yPj40LG89ciYxNTtJPjAmJihvKz0xNiksbz0obzw8NCkrOCxJPjEmJihvPW88PEktMSk7bGV0IGc9YT4xMjc/bzotbztuW3NdPWcvMzI2Nzh9cmV0dXJuIG59dmFyIEZyPWNsYXNzIGV4dGVuZHMgWnR7d0Zvcm1hdFRhZztieXRlc1BlclNhbXBsZTtyYXdEYXRhO2NvbnN0cnVjdG9yKGUsQSx0LG4scyxhLHIsSSxvKXtzdXBlcihlLEEsdCxuLHdBLm1vbm9TYW1wbGUscyxhKSx0aGlzLmRhdGFPdmVycmlkZGVuPSExLHRoaXMucmF3RGF0YT1yLmRhdGEsdGhpcy53Rm9ybWF0VGFnPUksdGhpcy5ieXRlc1BlclNhbXBsZT1vfWdldEF1ZGlvRGF0YSgpe2lmKCF0aGlzLnJhd0RhdGEpcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMCk7aWYoIXRoaXMuYXVkaW9EYXRhKXtsZXQgZTtzd2l0Y2godGhpcy53Rm9ybWF0VGFnKXtkZWZhdWx0OnNBKGBGYWlsZWQgdG8gZGVjb2RlIHNhbXBsZS4gVW5rbm93biB3Rm9ybWF0VGFnOiAke3RoaXMud0Zvcm1hdFRhZ31gKSxlPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5yYXdEYXRhLmxlbmd0aC90aGlzLmJ5dGVzUGVyU2FtcGxlKTticmVhaztjYXNlIERuLlBDTTplPURyKHRoaXMucmF3RGF0YSx0aGlzLmJ5dGVzUGVyU2FtcGxlKTticmVhaztjYXNlIERuLkFMQVc6ZT13cih0aGlzLnJhd0RhdGEsdGhpcy5ieXRlc1BlclNhbXBsZSk7YnJlYWt9dGhpcy5zZXRBdWRpb0RhdGEoZSx0aGlzLnNhbXBsZVJhdGUpfXJldHVybiB0aGlzLmF1ZGlvRGF0YT8/bmV3IEZsb2F0MzJBcnJheSgwKX1nZXRSYXdEYXRhKGUpe3JldHVybiB0aGlzLmRhdGFPdmVycmlkZGVufHx0aGlzLmlzQ29tcHJlc3NlZD9zdXBlci5nZXRSYXdEYXRhKGUpOnRoaXMud0Zvcm1hdFRhZz09PURuLlBDTSYmdGhpcy5ieXRlc1BlclNhbXBsZT09PTI/dGhpcy5yYXdEYXRhOnRoaXMuZW5jb2RlUzE2TEUoKX19LExzPWNsYXNzIFpuIGV4dGVuZHMgamV7d2F2ZVNhbXBsZT1uZXcgemU7d0Zvcm1hdFRhZztieXRlc1BlclNhbXBsZTtzYW1wbGVSYXRlO2RhdGFDaHVuaztuYW1lPSJVbm5hbWVkIHNhbXBsZSI7Y29uc3RydWN0b3IoQSx0LG4scyl7c3VwZXIoKSx0aGlzLndGb3JtYXRUYWc9QSx0aGlzLmJ5dGVzUGVyU2FtcGxlPXQsdGhpcy5zYW1wbGVSYXRlPW4sdGhpcy5kYXRhQ2h1bms9c31zdGF0aWMgcmVhZChBKXtsZXQgdD10aGlzLnZlcmlmeUFuZFJlYWRMaXN0KEEsIndhdmUiKSxuPXQuZmluZChDPT5DLmhlYWRlcj09PSJmbXQgIik7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJObyBmbXQgY2h1bmsgaW4gdGhlIHdhdmUgZmlsZSEiKTtsZXQgcz1OKG4uZGF0YSwyKSxhPU4obi5kYXRhLDIpO2lmKGEhPT0xKXRocm93IG5ldyBFcnJvcihgT25seSBtb25vIHNhbXBsZXMgYXJlIHN1cHBvcnRlZC4gRm10IHJlcG9ydHMgJHthfSBjaGFubmVscy5gKTtsZXQgcj1OKG4uZGF0YSw0KTtOKG4uZGF0YSw0KSxOKG4uZGF0YSwyKTtsZXQgbz1OKG4uZGF0YSwyKS84LGc9dC5maW5kKEM9PkMuaGVhZGVyPT09ImRhdGEiKTtpZighZyl0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgY2h1bmsgaW4gdGhlIFdBVkUgY2h1bmshIik7bGV0IEI9bmV3IFpuKHMsbyxyLGcpLGQ9ZmUodCwiSU5GTyIpO2lmKGQpe2xldCBDPXJBKGQuZGF0YSk7Zm9yKDtDLmhlYWRlciE9PSJJTkFNIiYmZC5kYXRhLmN1cnJlbnRJbmRleDxkLmRhdGEubGVuZ3RoOylDPXJBKGQuZGF0YSk7Qy5oZWFkZXI9PT0iSU5BTSImJihCLm5hbWU9aEEoQy5kYXRhLEMuc2l6ZSkudHJpbSgpKX1sZXQgaD10LmZpbmQoQz0+Qy5oZWFkZXI9PT0id3NtcCIpO3JldHVybiBoJiYoQi53YXZlU2FtcGxlPXplLnJlYWQoaCkpLEJ9c3RhdGljIGZyb21TRlNhbXBsZShBKXtsZXQgdD1BLmdldFJhd0RhdGEoITEpLG49bmV3IFpuKDEsMixBLnNhbXBsZVJhdGUsbmV3IEhzKCJkYXRhIix0Lmxlbmd0aCxuZXcgWSh0LmJ1ZmZlcikpKTtyZXR1cm4gbi5uYW1lPUEubmFtZSxuLndhdmVTYW1wbGU9emUuZnJvbVNGU2FtcGxlKEEpLG59dG9TRlNhbXBsZShBKXtsZXQgdD10aGlzLndhdmVTYW1wbGUudW5pdHlOb3RlLG49dGhpcy53YXZlU2FtcGxlLmZpbmVUdW5lLHM9TWF0aC50cnVuYyhuLzEwMCk7dCs9cyxuLT1zKjEwMDtsZXQgYT0wLHI9MCxJPXRoaXMud2F2ZVNhbXBsZS5sb29wcz8uWzBdO0kmJihhPUkubG9vcFN0YXJ0LHI9SS5sb29wU3RhcnQrSS5sb29wTGVuZ3RoKTtsZXQgbz1uZXcgRnIodGhpcy5uYW1lLHRoaXMuc2FtcGxlUmF0ZSx0LG4sYSxyLHRoaXMuZGF0YUNodW5rLHRoaXMud0Zvcm1hdFRhZyx0aGlzLmJ5dGVzUGVyU2FtcGxlKTtBLmFkZFNhbXBsZXMobyl9d3JpdGUoKXtsZXQgQT10aGlzLndyaXRlRm10KCksdD10aGlzLndhdmVTYW1wbGUud3JpdGUoKSxuPWNBKCJkYXRhIix0aGlzLmRhdGFDaHVuay5kYXRhKSxzPWNBKCJJTkFNIixuZSh0aGlzLm5hbWUsITApKSxhPWNBKCJJTkZPIixzLCExLCEwKTtyZXR1cm4gcChgJWNTYXZlZCAlYyR7dGhpcy5uYW1lfSVjIHN1Y2Nlc3NmdWxseSFgLGMucmVjb2duaXplZCxjLnZhbHVlLGMucmVjb2duaXplZCksdkEoIndhdmUiLFtBLHQsbixhXSwhMCl9d3JpdGVGbXQoKXtsZXQgQT1uZXcgWSgxOCk7cmV0dXJuIEooQSx0aGlzLndGb3JtYXRUYWcpLEooQSwxKSxnQShBLHRoaXMuc2FtcGxlUmF0ZSksZ0EoQSx0aGlzLnNhbXBsZVJhdGUqMiksSihBLDIpLEooQSx0aGlzLmJ5dGVzUGVyU2FtcGxlKjgpLGNBKCJmbXQgIixBKX19LHlhPW5ldyB5QSgyMTksMCxpLnJldmVyYkVmZmVjdHNTZW5kLDFlMywwKSxrYT1uZXcgeUEoMjIxLDAsaS5jaG9ydXNFZmZlY3RzU2VuZCwxZTMsMCksR3I9bmV3IHlBKDEyOSwwLGkudmliTGZvVG9QaXRjaCwwLDApLFJyPW5ldyB5QSgxMywwLGkudmliTGZvVG9QaXRjaCwwLDApLFZBPWNsYXNzIHpue3NvdXJjZTt0cmFuc2Zvcm07Ymlwb2xhcjtpbnZlcnQ7Y29uc3RydWN0b3IoQT1ULm5vbmUsdD1RQS5saW5lYXIsbj0hMSxzPSExKXt0aGlzLnNvdXJjZT1BLHRoaXMudHJhbnNmb3JtPXQsdGhpcy5iaXBvbGFyPW4sdGhpcy5pbnZlcnQ9c31nZXQgc291cmNlTmFtZSgpe3JldHVybiBPYmplY3Qua2V5cyhUKS5maW5kKEE9PlRbQV09PT10aGlzLnNvdXJjZSk/P3RoaXMuc291cmNlLnRvU3RyaW5nKCl9Z2V0IHRyYW5zZm9ybU5hbWUoKXtyZXR1cm4gT2JqZWN0LmtleXMoUUEpLmZpbmQoQT0+UUFbQV09PT10aGlzLnRyYW5zZm9ybSk/P3RoaXMudHJhbnNmb3JtLnRvU3RyaW5nKCl9c3RhdGljIGNvcHlGcm9tKEEpe3JldHVybiBuZXcgem4oQS5zb3VyY2UsQS50cmFuc2Zvcm0sQS5iaXBvbGFyLEEuaW52ZXJ0KX1zdGF0aWMgZnJvbVNGU291cmNlKEEpe2xldCB0O2lmKEEuaXNDQylzd2l0Y2goQS5pbmRleCl7Y2FzZSBTLm1vZHVsYXRpb25XaGVlbDp0PVQubW9kdWxhdGlvbldoZWVsO2JyZWFrO2Nhc2UgUy5tYWluVm9sdW1lOnQ9VC52b2x1bWU7YnJlYWs7Y2FzZSBTLnBhbjp0PVQucGFuO2JyZWFrO2Nhc2UgUy5leHByZXNzaW9uQ29udHJvbGxlcjp0PVQuZXhwcmVzc2lvbjticmVhaztjYXNlIFMuY2hvcnVzRGVwdGg6dD1ULmNob3J1czticmVhaztjYXNlIFMucmV2ZXJiRGVwdGg6dD1ULnJldmVyYjticmVha31lbHNlIHN3aXRjaChBLmluZGV4KXtjYXNlIGoubm9Db250cm9sbGVyOnQ9VC5ub25lO2JyZWFrO2Nhc2Ugai5ub3RlT25LZXlOdW06dD1ULmtleU51bTticmVhaztjYXNlIGoubm90ZU9uVmVsb2NpdHk6dD1ULnZlbG9jaXR5O2JyZWFrO2Nhc2Ugai5waXRjaFdoZWVsOnQ9VC5waXRjaFdoZWVsO2JyZWFrO2Nhc2Ugai5waXRjaFdoZWVsUmFuZ2U6dD1ULnBpdGNoV2hlZWxSYW5nZTticmVhaztjYXNlIGoucG9seVByZXNzdXJlOnQ9VC5wb2x5UHJlc3N1cmU7YnJlYWs7Y2FzZSBqLmNoYW5uZWxQcmVzc3VyZTp0PVQuY2hhbm5lbFByZXNzdXJlfWlmKHQhPT12b2lkIDApcmV0dXJuIG5ldyB6bih0LEEuY3VydmVUeXBlLEEuaXNCaXBvbGFyLEEuaXNOZWdhdGl2ZSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnNvdXJjZU5hbWV9ICR7dGhpcy50cmFuc2Zvcm1OYW1lfSAke3RoaXMuYmlwb2xhcj8iYmlwb2xhciI6InVuaXBvbGFyIn0gJHt0aGlzLmludmVydD8iaW52ZXJ0ZWQiOiJwb3NpdGl2ZSJ9YH10b1RyYW5zZm9ybUZsYWcoKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm18KHRoaXMuYmlwb2xhcj8xOjApPDw0fCh0aGlzLmludmVydD8xOjApPDw1fXRvU0ZTb3VyY2UoKXtsZXQgQSx0PSExO3N3aXRjaCh0aGlzLnNvdXJjZSl7ZGVmYXVsdDpjYXNlIFQubW9kTGZvOmNhc2UgVC52aWJyYXRvTGZvOmNhc2UgVC5jb2Fyc2VUdW5lOmNhc2UgVC5maW5lVHVuZTpjYXNlIFQubW9kRW52OnJldHVybjtjYXNlIFQua2V5TnVtOkE9ai5ub3RlT25LZXlOdW07YnJlYWs7Y2FzZSBULm5vbmU6QT1qLm5vQ29udHJvbGxlcjticmVhaztjYXNlIFQubW9kdWxhdGlvbldoZWVsOkE9Uy5tb2R1bGF0aW9uV2hlZWwsdD0hMDticmVhaztjYXNlIFQucGFuOkE9Uy5wYW4sdD0hMDticmVhaztjYXNlIFQucmV2ZXJiOkE9Uy5yZXZlcmJEZXB0aCx0PSEwO2JyZWFrO2Nhc2UgVC5jaG9ydXM6QT1TLmNob3J1c0RlcHRoLHQ9ITA7YnJlYWs7Y2FzZSBULmV4cHJlc3Npb246QT1TLmV4cHJlc3Npb25Db250cm9sbGVyLHQ9ITA7YnJlYWs7Y2FzZSBULnZvbHVtZTpBPVMubWFpblZvbHVtZSx0PSEwO2JyZWFrO2Nhc2UgVC52ZWxvY2l0eTpBPWoubm90ZU9uVmVsb2NpdHk7YnJlYWs7Y2FzZSBULnBvbHlQcmVzc3VyZTpBPWoucG9seVByZXNzdXJlO2JyZWFrO2Nhc2UgVC5jaGFubmVsUHJlc3N1cmU6QT1qLmNoYW5uZWxQcmVzc3VyZTticmVhaztjYXNlIFQucGl0Y2hXaGVlbDpBPWoucGl0Y2hXaGVlbDticmVhaztjYXNlIFQucGl0Y2hXaGVlbFJhbmdlOkE9ai5waXRjaFdoZWVsUmFuZ2U7YnJlYWt9aWYoQSE9PXZvaWQgMClyZXR1cm4gbmV3IFhBKEEsdGhpcy50cmFuc2Zvcm0sdCx0aGlzLmJpcG9sYXIsdGhpcy5pbnZlcnQpfX0sTXI9bmV3IFNldChbaS5zYW1wbGVNb2RlcyxpLmluaXRpYWxBdHRlbnVhdGlvbixpLmtleVJhbmdlLGkudmVsUmFuZ2UsaS5zYW1wbGVJRCxpLmZpbmVUdW5lLGkuY29hcnNlVHVuZSxpLnN0YXJ0QWRkcnNPZmZzZXQsaS5zdGFydEFkZHJzQ29hcnNlT2Zmc2V0LGkuZW5kQWRkck9mZnNldCxpLmVuZEFkZHJzQ29hcnNlT2Zmc2V0LGkuc3RhcnRsb29wQWRkcnNPZmZzZXQsaS5zdGFydGxvb3BBZGRyc0NvYXJzZU9mZnNldCxpLmVuZGxvb3BBZGRyc09mZnNldCxpLmVuZGxvb3BBZGRyc0NvYXJzZU9mZnNldCxpLm92ZXJyaWRpbmdSb290S2V5LGkuZXhjbHVzaXZlQ2xhc3NdKSxjdD1jbGFzcyBSZXtzb3VyY2U7Y29udHJvbDtkZXN0aW5hdGlvbjtzY2FsZTt0cmFuc2Zvcm07Y29uc3RydWN0b3IoQT1uZXcgVkEsdD1uZXcgVkEsbixzLGEpe3RoaXMuc291cmNlPUEsdGhpcy5jb250cm9sPXQsdGhpcy5kZXN0aW5hdGlvbj1uLHRoaXMudHJhbnNmb3JtPXMsdGhpcy5zY2FsZT1hfWdldCBpc1N0YXRpY1BhcmFtZXRlcigpe3JldHVybiB0aGlzLnNvdXJjZS5zb3VyY2U9PT1ULm5vbmUmJnRoaXMuY29udHJvbC5zb3VyY2U9PT1ULm5vbmV9Z2V0IHNob3J0U2NhbGUoKXtyZXR1cm4gdGhpcy5zY2FsZT4+MTZ9Z2V0IHRyYW5zZm9ybU5hbWUoKXtyZXR1cm4gT2JqZWN0LmtleXMoUUEpLmZpbmQoQT0+UUFbQV09PT10aGlzLnRyYW5zZm9ybSk/P3RoaXMudHJhbnNmb3JtLnRvU3RyaW5nKCl9Z2V0IGRlc3RpbmF0aW9uTmFtZSgpe3JldHVybiBPYmplY3Qua2V5cyhSKS5maW5kKEE9PlJbQV09PT10aGlzLmRlc3RpbmF0aW9uKT8/dGhpcy5kZXN0aW5hdGlvbi50b1N0cmluZygpfXN0YXRpYyByZWFkKEEpe2xldCB0PU4oQSwyKSxuPU4oQSwyKSxzPU4oQSwyKSxhPU4oQSwyKSxyPU4oQSw0KXwwLEk9YSYxNSxvPWE+PjQmMTUsZz1NZShhLDgpLEI9TWUoYSw5KSxkPW5ldyBWQShuLG8sZyxCKSxoPWE+PjEwJjE1LEM9TWUoYSwxNCksUT1NZShhLDE1KSxtPW5ldyBWQSh0LGgsQyxRKTtyZXR1cm4gbmV3IFJlKG0sZCxzLEkscil9c3RhdGljIGZyb21TRk1vZHVsYXRvcihBLHQpe2xldCBuPUI9PntzQShgRmFpbGVkIGNvbnZlcnRpbmcgU0YgbW9kdWxhdG9yIGludG8gRExTOgogJHtBLnRvU3RyaW5nKCl9IAooJHtCfSlgKX07aWYoQS50cmFuc2Zvcm1UeXBlIT09MCl7bigiQWJzb2x1dGUgdHJhbnNmb3JtIHR5cGUgaXMgbm90IHN1cHBvcnRlZCIpO3JldHVybn1pZihFQS5pc0lkZW50aWNhbChBLGthLCEwKXx8RUEuaXNJZGVudGljYWwoQSx5YSwhMCkpcmV0dXJuO2xldCBzPVZBLmZyb21TRlNvdXJjZShBLnByaW1hcnlTb3VyY2UpO2lmKCFzKXtuKCJJbnZhbGlkIHByaW1hcnkgc291cmNlIik7cmV0dXJufWxldCBhPVZBLmZyb21TRlNvdXJjZShBLnNlY29uZGFyeVNvdXJjZSk7aWYoIWEpe24oIkludmFsaWQgc2Vjb25kYXJ5IHNvdXJjZSIpO3JldHVybn1sZXQgcj1SZS5mcm9tU0ZEZXN0aW5hdGlvbihBLmRlc3RpbmF0aW9uLEEudHJhbnNmb3JtQW1vdW50KTtpZihyPT09dm9pZCAwKXtuKCJJbnZhbGlkIGRlc3RpbmF0aW9uIik7cmV0dXJufWxldCBJPUEudHJhbnNmb3JtQW1vdW50LG87aWYodHlwZW9mIHI9PSJudW1iZXIiKW89cjtlbHNlIGlmKG89ci5kZXN0aW5hdGlvbixJPXIuYW1vdW50LHIuc291cmNlIT09VC5ub25lKXtpZihhLnNvdXJjZSE9PVQubm9uZSYmcy5zb3VyY2UhPT1ULm5vbmUpe24oIkFydGljdWxhdGlvbiBnZW5lcmF0b3JzIHdpdGggc2Vjb25kYXJ5IHNvdXJjZSBhcmUgbm90IHN1cHBvcnRlZCIpO3JldHVybn1zLnNvdXJjZSE9PVQubm9uZSYmKGE9cykscz1uZXcgVkEoci5zb3VyY2UsUUEubGluZWFyLHIuaXNCaXBvbGFyKX1sZXQgZz1uZXcgUmUocyxhLG8sMCxJPDwxNik7dC5jb25uZWN0aW9uQmxvY2tzLnB1c2goZyl9c3RhdGljIGNvcHlGcm9tKEEpe3JldHVybiBuZXcgUmUoVkEuY29weUZyb20oQS5zb3VyY2UpLFZBLmNvcHlGcm9tKEEuY29udHJvbCksQS5kZXN0aW5hdGlvbixBLnRyYW5zZm9ybSxBLnNjYWxlKX1zdGF0aWMgZnJvbVNGR2VuZXJhdG9yKEEsdCl7aWYoTXIuaGFzKEEuZ2VuZXJhdG9yVHlwZSkpcmV0dXJuO2xldCBuPW89PntzQShgRmFpbGVkIGNvbnZlcnRpbmcgU0YyIGdlbmVyYXRvciBpbnRvIERMUzoKICR7QS50b1N0cmluZygpfSAKKCR7b30pYCl9LHM9UmUuZnJvbVNGRGVzdGluYXRpb24oQS5nZW5lcmF0b3JUeXBlLEEuZ2VuZXJhdG9yVmFsdWUpO2lmKHM9PT12b2lkIDApe24oIkludmFsaWQgdHlwZSIpO3JldHVybn1sZXQgYT1uZXcgVkEscixJPUEuZ2VuZXJhdG9yVmFsdWU7dHlwZW9mIHM9PSJudW1iZXIiP3I9czoocj1zLmRlc3RpbmF0aW9uLEk9cy5hbW91bnQsYS5zb3VyY2U9cy5zb3VyY2UsYS5iaXBvbGFyPXMuaXNCaXBvbGFyKSx0LmNvbm5lY3Rpb25CbG9ja3MucHVzaChuZXcgUmUoYSxuZXcgVkEsciwwLEk8PDE2KSl9c3RhdGljIGZyb21TRkRlc3RpbmF0aW9uKEEsdCl7c3dpdGNoKEEpe2RlZmF1bHQ6cmV0dXJuO2Nhc2UgaS5pbml0aWFsQXR0ZW51YXRpb246cmV0dXJue2Rlc3RpbmF0aW9uOlIuZ2FpbixhbW91bnQ6LXQsaXNCaXBvbGFyOiExLHNvdXJjZTpULm5vbmV9O2Nhc2UgaS5maW5lVHVuZTpyZXR1cm4gUi5waXRjaDtjYXNlIGkucGFuOnJldHVybiBSLnBhbjtjYXNlIGkua2V5TnVtOnJldHVybiBSLmtleU51bTtjYXNlIGkucmV2ZXJiRWZmZWN0c1NlbmQ6cmV0dXJuIFIucmV2ZXJiU2VuZDtjYXNlIGkuY2hvcnVzRWZmZWN0c1NlbmQ6cmV0dXJuIFIuY2hvcnVzU2VuZDtjYXNlIGkuZnJlcU1vZExGTzpyZXR1cm4gUi5tb2RMZm9GcmVxO2Nhc2UgaS5kZWxheU1vZExGTzpyZXR1cm4gUi5tb2RMZm9EZWxheTtjYXNlIGkuZGVsYXlWaWJMRk86cmV0dXJuIFIudmliTGZvRGVsYXk7Y2FzZSBpLmZyZXFWaWJMRk86cmV0dXJuIFIudmliTGZvRnJlcTtjYXNlIGkuZGVsYXlWb2xFbnY6cmV0dXJuIFIudm9sRW52RGVsYXk7Y2FzZSBpLmF0dGFja1ZvbEVudjpyZXR1cm4gUi52b2xFbnZBdHRhY2s7Y2FzZSBpLmhvbGRWb2xFbnY6cmV0dXJuIFIudm9sRW52SG9sZDtjYXNlIGkuZGVjYXlWb2xFbnY6cmV0dXJuIFIudm9sRW52RGVjYXk7Y2FzZSBpLnN1c3RhaW5Wb2xFbnY6cmV0dXJue2Rlc3RpbmF0aW9uOlIudm9sRW52U3VzdGFpbixhbW91bnQ6MWUzLXQsaXNCaXBvbGFyOiExLHNvdXJjZTpULm5vbmV9O2Nhc2UgaS5yZWxlYXNlVm9sRW52OnJldHVybiBSLnZvbEVudlJlbGVhc2U7Y2FzZSBpLmRlbGF5TW9kRW52OnJldHVybiBSLm1vZEVudkRlbGF5O2Nhc2UgaS5hdHRhY2tNb2RFbnY6cmV0dXJuIFIubW9kRW52QXR0YWNrO2Nhc2UgaS5ob2xkTW9kRW52OnJldHVybiBSLm1vZEVudkhvbGQ7Y2FzZSBpLmRlY2F5TW9kRW52OnJldHVybiBSLm1vZEVudkRlY2F5O2Nhc2UgaS5zdXN0YWluTW9kRW52OnJldHVybntkZXN0aW5hdGlvbjpSLm1vZEVudlN1c3RhaW4sYW1vdW50OjFlMy10LGlzQmlwb2xhcjohMSxzb3VyY2U6VC5ub25lfTtjYXNlIGkucmVsZWFzZU1vZEVudjpyZXR1cm4gUi5tb2RFbnZSZWxlYXNlO2Nhc2UgaS5pbml0aWFsRmlsdGVyRmM6cmV0dXJuIFIuZmlsdGVyQ3V0b2ZmO2Nhc2UgaS5pbml0aWFsRmlsdGVyUTpyZXR1cm4gUi5maWx0ZXJRO2Nhc2UgaS5tb2RFbnZUb0ZpbHRlckZjOnJldHVybntzb3VyY2U6VC5tb2RFbnYsZGVzdGluYXRpb246Ui5maWx0ZXJDdXRvZmYsYW1vdW50OnQsaXNCaXBvbGFyOiExfTtjYXNlIGkubW9kRW52VG9QaXRjaDpyZXR1cm57c291cmNlOlQubW9kRW52LGRlc3RpbmF0aW9uOlIucGl0Y2gsYW1vdW50OnQsaXNCaXBvbGFyOiExfTtjYXNlIGkubW9kTGZvVG9GaWx0ZXJGYzpyZXR1cm57c291cmNlOlQubW9kTGZvLGRlc3RpbmF0aW9uOlIuZmlsdGVyQ3V0b2ZmLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLm1vZExmb1RvVm9sdW1lOnJldHVybntzb3VyY2U6VC5tb2RMZm8sZGVzdGluYXRpb246Ui5nYWluLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLm1vZExmb1RvUGl0Y2g6cmV0dXJue3NvdXJjZTpULm1vZExmbyxkZXN0aW5hdGlvbjpSLnBpdGNoLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLnZpYkxmb1RvUGl0Y2g6cmV0dXJue3NvdXJjZTpULnZpYnJhdG9MZm8sZGVzdGluYXRpb246Ui5waXRjaCxhbW91bnQ6dCxpc0JpcG9sYXI6ITB9O2Nhc2UgaS5rZXlOdW1Ub1ZvbEVudkhvbGQ6cmV0dXJue3NvdXJjZTpULmtleU51bSxkZXN0aW5hdGlvbjpSLnZvbEVudkhvbGQsYW1vdW50OnQsaXNCaXBvbGFyOiEwfTtjYXNlIGkua2V5TnVtVG9Wb2xFbnZEZWNheTpyZXR1cm57c291cmNlOlQua2V5TnVtLGRlc3RpbmF0aW9uOlIudm9sRW52RGVjYXksYW1vdW50OnQsaXNCaXBvbGFyOiEwfTtjYXNlIGkua2V5TnVtVG9Nb2RFbnZIb2xkOnJldHVybntzb3VyY2U6VC5rZXlOdW0sZGVzdGluYXRpb246Ui5tb2RFbnZIb2xkLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLmtleU51bVRvTW9kRW52RGVjYXk6cmV0dXJue3NvdXJjZTpULmtleU51bSxkZXN0aW5hdGlvbjpSLm1vZEVudkRlY2F5LGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLnNjYWxlVHVuaW5nOnJldHVybntzb3VyY2U6VC5rZXlOdW0sZGVzdGluYXRpb246Ui5waXRjaCxhbW91bnQ6dCoxMjgsaXNCaXBvbGFyOiExfX19dG9TdHJpbmcoKXtyZXR1cm5gU291cmNlOiAke3RoaXMuc291cmNlLnRvU3RyaW5nKCl9LApDb250cm9sOiAke3RoaXMuY29udHJvbC50b1N0cmluZygpfSwKU2NhbGU6ICR7dGhpcy5zY2FsZX0gPj4gMTYgPSAke3RoaXMuc2hvcnRTY2FsZX0sCk91dHB1dCB0cmFuc2Zvcm06ICR7dGhpcy50cmFuc2Zvcm1OYW1lfQpEZXN0aW5hdGlvbjogJHt0aGlzLmRlc3RpbmF0aW9uTmFtZX1gfXdyaXRlKCl7bGV0IEE9bmV3IFkoMTIpO0ooQSx0aGlzLnNvdXJjZS5zb3VyY2UpLEooQSx0aGlzLmNvbnRyb2wuc291cmNlKSxKKEEsdGhpcy5kZXN0aW5hdGlvbik7bGV0IHQ9dGhpcy50cmFuc2Zvcm18dGhpcy5jb250cm9sLnRvVHJhbnNmb3JtRmxhZygpPDw0fHRoaXMuc291cmNlLnRvVHJhbnNmb3JtRmxhZygpPDwxMDtyZXR1cm4gSihBLHQpLGdBKEEsdGhpcy5zY2FsZSksQX10b1NGR2VuZXJhdG9yKEEpe2xldCB0PXRoaXMuZGVzdGluYXRpb24sbj10aGlzLnNob3J0U2NhbGU7c3dpdGNoKHQpe2RlZmF1bHQ6cChgJWNGYWlsZWQgY29udmVydGluZyBETFMgYXJ0aWN1bGF0b3IgaW50byBTRiBnZW5lcmF0b3I6ICVjJHt0aGlzLnRvU3RyaW5nKCl9JWMKKGludmFsaWQgZGVzdGluYXRpb24pYCxjLndhcm4sYy52YWx1ZSxjLnVucmVjb2duaXplZCk7cmV0dXJuO2Nhc2UgUi5wYW46QS5zZXRHZW5lcmF0b3IoaS5wYW4sbik7YnJlYWs7Y2FzZSBSLmdhaW46QS5hZGRUb0dlbmVyYXRvcihpLmluaXRpYWxBdHRlbnVhdGlvbiwtbi8uNCk7YnJlYWs7Y2FzZSBSLmZpbHRlckN1dG9mZjpBLnNldEdlbmVyYXRvcihpLmluaXRpYWxGaWx0ZXJGYyxuKTticmVhaztjYXNlIFIuZmlsdGVyUTpBLnNldEdlbmVyYXRvcihpLmluaXRpYWxGaWx0ZXJRLG4pO2JyZWFrO2Nhc2UgUi5tb2RMZm9GcmVxOkEuc2V0R2VuZXJhdG9yKGkuZnJlcU1vZExGTyxuKTticmVhaztjYXNlIFIubW9kTGZvRGVsYXk6QS5zZXRHZW5lcmF0b3IoaS5kZWxheU1vZExGTyxuKTticmVhaztjYXNlIFIudmliTGZvRnJlcTpBLnNldEdlbmVyYXRvcihpLmZyZXFWaWJMRk8sbik7YnJlYWs7Y2FzZSBSLnZpYkxmb0RlbGF5OkEuc2V0R2VuZXJhdG9yKGkuZGVsYXlWaWJMRk8sbik7YnJlYWs7Y2FzZSBSLnZvbEVudkRlbGF5OkEuc2V0R2VuZXJhdG9yKGkuZGVsYXlWb2xFbnYsbik7YnJlYWs7Y2FzZSBSLnZvbEVudkF0dGFjazpBLnNldEdlbmVyYXRvcihpLmF0dGFja1ZvbEVudixuKTticmVhaztjYXNlIFIudm9sRW52SG9sZDpBLnNldEdlbmVyYXRvcihpLmhvbGRWb2xFbnYsbik7YnJlYWs7Y2FzZSBSLnZvbEVudkRlY2F5OkEuc2V0R2VuZXJhdG9yKGkuZGVjYXlWb2xFbnYsbik7YnJlYWs7Y2FzZSBSLnZvbEVudlJlbGVhc2U6QS5zZXRHZW5lcmF0b3IoaS5yZWxlYXNlVm9sRW52LG4pO2JyZWFrO2Nhc2UgUi52b2xFbnZTdXN0YWluOkEuc2V0R2VuZXJhdG9yKGkuc3VzdGFpblZvbEVudiwxZTMtbik7YnJlYWs7Y2FzZSBSLm1vZEVudkRlbGF5OkEuc2V0R2VuZXJhdG9yKGkuZGVsYXlNb2RFbnYsbik7YnJlYWs7Y2FzZSBSLm1vZEVudkF0dGFjazpBLnNldEdlbmVyYXRvcihpLmF0dGFja01vZEVudixuKTticmVhaztjYXNlIFIubW9kRW52SG9sZDpBLnNldEdlbmVyYXRvcihpLmhvbGRNb2RFbnYsbik7YnJlYWs7Y2FzZSBSLm1vZEVudkRlY2F5OkEuc2V0R2VuZXJhdG9yKGkuZGVjYXlNb2RFbnYsbik7YnJlYWs7Y2FzZSBSLm1vZEVudlJlbGVhc2U6QS5zZXRHZW5lcmF0b3IoaS5yZWxlYXNlTW9kRW52LG4pO2JyZWFrO2Nhc2UgUi5tb2RFbnZTdXN0YWluOkEuc2V0R2VuZXJhdG9yKGkuc3VzdGFpbk1vZEVudiwxZTMtbik7YnJlYWs7Y2FzZSBSLnJldmVyYlNlbmQ6QS5zZXRHZW5lcmF0b3IoaS5yZXZlcmJFZmZlY3RzU2VuZCxuKTticmVhaztjYXNlIFIuY2hvcnVzU2VuZDpBLnNldEdlbmVyYXRvcihpLmNob3J1c0VmZmVjdHNTZW5kLG4pO2JyZWFrO2Nhc2UgUi5waXRjaDpBLmZpbmVUdW5pbmcrPW47YnJlYWt9fXRvU0ZNb2R1bGF0b3IoQSl7bGV0IHQ9dGhpcy5zaG9ydFNjYWxlLG4scyxhPW5ldyBYQSxyPWc9PntwKGAlY0ZhaWxlZCBjb252ZXJ0aW5nIERMUyBhcnRpY3VsYXRvciBpbnRvIFNGMjoKICVjJHt0aGlzLnRvU3RyaW5nKCl9JWMKKCR7Z30pYCxjLndhcm4sYy52YWx1ZSxjLnVucmVjb2duaXplZCl9LEk9dGhpcy50b0NvbWJpbmVkU0ZEZXN0aW5hdGlvbigpO2lmKEkpe249STtsZXQgZz10aGlzLmNvbnRyb2wudG9TRlNvdXJjZSgpO2lmKCFnKXtyKCJJbnZhbGlkIGNvbnRyb2wiKTtyZXR1cm59cz1nfWVsc2V7bGV0IGc9dGhpcy50b1NGRGVzdGluYXRpb24oKTtpZighZyl7cigiSW52YWxpZCBkZXN0aW5hdGlvbiIpO3JldHVybn10eXBlb2YgZz09Im9iamVjdCI/KHQ9Zy5uZXdBbW91bnQsbj1nLmdlbik6bj1nO2xldCBCPXRoaXMuc291cmNlLnRvU0ZTb3VyY2UoKTtpZighQil7cigiSW52YWxpZCBzb3VyY2UiKTtyZXR1cm59cz1CO2xldCBkPXRoaXMuY29udHJvbC50b1NGU291cmNlKCk7aWYoIWQpe3IoIkludmFsaWQgY29udHJvbCIpO3JldHVybn1hPWR9dGhpcy50cmFuc2Zvcm0hPT1RQS5saW5lYXImJnMuY3VydmVUeXBlPT09UUEubGluZWFyJiYocy5jdXJ2ZVR5cGU9dGhpcy50cmFuc2Zvcm0pLG49PT1pLmluaXRpYWxBdHRlbnVhdGlvbiYmKCh0aGlzLnNvdXJjZS5zb3VyY2U9PT1ULnZlbG9jaXR5fHx0aGlzLnNvdXJjZS5zb3VyY2U9PT1ULnZvbHVtZXx8dGhpcy5zb3VyY2Uuc291cmNlPT09VC5leHByZXNzaW9uKSYmKHMuaXNOZWdhdGl2ZT0hMCksdD1NYXRoLm1pbig5NjAsTWF0aC5tYXgoMCx0KSkpO2xldCBvPW5ldyBFQShzLGEsbix0LDApO0EuYWRkTW9kdWxhdG9ycyhvKX10b0NvbWJpbmVkU0ZEZXN0aW5hdGlvbigpe2xldCBBPXRoaXMuc291cmNlLnNvdXJjZSx0PXRoaXMuZGVzdGluYXRpb247cmV0dXJuIEE9PT1ULnZpYnJhdG9MZm8mJnQ9PT1SLnBpdGNoP2kudmliTGZvVG9QaXRjaDpBPT09VC5tb2RMZm8mJnQ9PT1SLnBpdGNoP2kubW9kTGZvVG9QaXRjaDpBPT09VC5tb2RMZm8mJnQ9PT1SLmZpbHRlckN1dG9mZj9pLm1vZExmb1RvRmlsdGVyRmM6QT09PVQubW9kTGZvJiZ0PT09Ui5nYWluP2kubW9kTGZvVG9Wb2x1bWU6QT09PVQubW9kRW52JiZ0PT09Ui5maWx0ZXJDdXRvZmY/aS5tb2RFbnZUb0ZpbHRlckZjOkE9PT1ULm1vZEVudiYmdD09PVIucGl0Y2g/aS5tb2RFbnZUb1BpdGNoOnZvaWQgMH10b1NGRGVzdGluYXRpb24oKXtsZXQgQT10aGlzLnNob3J0U2NhbGU7c3dpdGNoKHRoaXMuZGVzdGluYXRpb24pe2RlZmF1bHQ6Y2FzZSBSLm5vbmU6cmV0dXJuO2Nhc2UgUi5wYW46cmV0dXJuIGkucGFuO2Nhc2UgUi5nYWluOnJldHVybntnZW46aS5pbml0aWFsQXR0ZW51YXRpb24sbmV3QW1vdW50Oi1BfTtjYXNlIFIucGl0Y2g6cmV0dXJuIGkuZmluZVR1bmU7Y2FzZSBSLmtleU51bTpyZXR1cm4gaS5vdmVycmlkaW5nUm9vdEtleTtjYXNlIFIudm9sRW52RGVsYXk6cmV0dXJuIGkuZGVsYXlWb2xFbnY7Y2FzZSBSLnZvbEVudkF0dGFjazpyZXR1cm4gaS5hdHRhY2tWb2xFbnY7Y2FzZSBSLnZvbEVudkhvbGQ6cmV0dXJuIGkuaG9sZFZvbEVudjtjYXNlIFIudm9sRW52RGVjYXk6cmV0dXJuIGkuZGVjYXlWb2xFbnY7Y2FzZSBSLnZvbEVudlN1c3RhaW46cmV0dXJue2dlbjppLnN1c3RhaW5Wb2xFbnYsbmV3QW1vdW50OjFlMy1BfTtjYXNlIFIudm9sRW52UmVsZWFzZTpyZXR1cm4gaS5yZWxlYXNlVm9sRW52O2Nhc2UgUi5tb2RFbnZEZWxheTpyZXR1cm4gaS5kZWxheU1vZEVudjtjYXNlIFIubW9kRW52QXR0YWNrOnJldHVybiBpLmF0dGFja01vZEVudjtjYXNlIFIubW9kRW52SG9sZDpyZXR1cm4gaS5ob2xkTW9kRW52O2Nhc2UgUi5tb2RFbnZEZWNheTpyZXR1cm4gaS5kZWNheU1vZEVudjtjYXNlIFIubW9kRW52U3VzdGFpbjpyZXR1cm57Z2VuOmkuc3VzdGFpbk1vZEVudixuZXdBbW91bnQ6MWUzLUF9O2Nhc2UgUi5tb2RFbnZSZWxlYXNlOnJldHVybiBpLnJlbGVhc2VNb2RFbnY7Y2FzZSBSLmZpbHRlckN1dG9mZjpyZXR1cm4gaS5pbml0aWFsRmlsdGVyRmM7Y2FzZSBSLmZpbHRlclE6cmV0dXJuIGkuaW5pdGlhbEZpbHRlclE7Y2FzZSBSLmNob3J1c1NlbmQ6cmV0dXJuIGkuY2hvcnVzRWZmZWN0c1NlbmQ7Y2FzZSBSLnJldmVyYlNlbmQ6cmV0dXJuIGkucmV2ZXJiRWZmZWN0c1NlbmQ7Y2FzZSBSLm1vZExmb0ZyZXE6cmV0dXJuIGkuZnJlcU1vZExGTztjYXNlIFIubW9kTGZvRGVsYXk6cmV0dXJuIGkuZGVsYXlNb2RMRk87Y2FzZSBSLnZpYkxmb0ZyZXE6cmV0dXJuIGkuZnJlcVZpYkxGTztjYXNlIFIudmliTGZvRGVsYXk6cmV0dXJuIGkuZGVsYXlWaWJMRk99fX0sRGE9Y2xhc3MgV24gZXh0ZW5kcyBqZXtjb25uZWN0aW9uQmxvY2tzPW5ldyBBcnJheTttb2RlPSJkbHMyIjtnZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuY29ubmVjdGlvbkJsb2Nrcy5sZW5ndGh9Y29weUZyb20oQSl7dGhpcy5tb2RlPUEubW9kZSxBLmNvbm5lY3Rpb25CbG9ja3MuZm9yRWFjaCh0PT57dGhpcy5jb25uZWN0aW9uQmxvY2tzLnB1c2goY3QuY29weUZyb20odCkpfSl9ZnJvbVNGWm9uZShBKXt0aGlzLm1vZGU9ImRsczIiO2xldCB0PW5ldyBWdDt0LmNvcHlGcm9tKEEpO2ZvcihsZXQgbiBvZiB0LmdlbmVyYXRvcnMpe2xldCBzO3N3aXRjaChuLmdlbmVyYXRvclR5cGUpe2RlZmF1bHQ6Y29udGludWU7Y2FzZSBpLmtleU51bVRvVm9sRW52RGVjYXk6cz1pLmRlY2F5Vm9sRW52O2JyZWFrO2Nhc2UgaS5rZXlOdW1Ub1ZvbEVudkhvbGQ6cz1pLmhvbGRWb2xFbnY7YnJlYWs7Y2FzZSBpLmtleU51bVRvTW9kRW52RGVjYXk6cz1pLmRlY2F5TW9kRW52O2JyZWFrO2Nhc2UgaS5rZXlOdW1Ub01vZEVudkhvbGQ6cz1pLmhvbGRNb2RFbnZ9bGV0IGE9dC5nZXRHZW5lcmF0b3Iocyx2b2lkIDApLHI9bi5nZW5lcmF0b3JWYWx1ZSotMTI4O2lmKGE9PT12b2lkIDApY29udGludWU7bGV0IEk9NjAvMTI4KnIsbz1hLUk7dC5zZXRHZW5lcmF0b3Iobi5nZW5lcmF0b3JUeXBlLHIsITEpLHQuc2V0R2VuZXJhdG9yKHMsbywhMSl9Zm9yKGxldCBuIG9mIHQuZ2VuZXJhdG9ycyljdC5mcm9tU0ZHZW5lcmF0b3Iobix0aGlzKTtmb3IobGV0IG4gb2YgdC5tb2R1bGF0b3JzKWN0LmZyb21TRk1vZHVsYXRvcihuLHRoaXMpfXJlYWQoQSl7bGV0IHQ9ZmUoQSwibGFydCIpLG49ZmUoQSwibGFyMiIpO2lmKHQpZm9yKHRoaXMubW9kZT0iZGxzMSI7dC5kYXRhLmN1cnJlbnRJbmRleDx0LmRhdGEubGVuZ3RoOyl7bGV0IHM9ckEodC5kYXRhKTtXbi52ZXJpZnlIZWFkZXIocywiYXJ0MSIsImFydDIiKTtsZXQgYT1zLmRhdGEscj1OKGEsNCk7ciE9PTgmJnNBKGBDYlNpemUgaW4gYXJ0aWN1bGF0aW9uIG1pc21hdGNoLiBFeHBlY3RlZCA4LCBnb3QgJHtyfWApO2xldCBJPU4oYSw0KTtmb3IobGV0IG89MDtvPEk7bysrKXRoaXMuY29ubmVjdGlvbkJsb2Nrcy5wdXNoKGN0LnJlYWQoYSkpfWVsc2UgaWYobilmb3IodGhpcy5tb2RlPSJkbHMyIjtuLmRhdGEuY3VycmVudEluZGV4PG4uZGF0YS5sZW5ndGg7KXtsZXQgcz1yQShuLmRhdGEpO1duLnZlcmlmeUhlYWRlcihzLCJhcnQyIiwiYXJ0MSIpO2xldCBhPXMuZGF0YSxyPU4oYSw0KTtyIT09OCYmc0EoYENiU2l6ZSBpbiBhcnRpY3VsYXRpb24gbWlzbWF0Y2guIEV4cGVjdGVkIDgsIGdvdCAke3J9YCk7bGV0IEk9TihhLDQpO2ZvcihsZXQgbz0wO288STtvKyspdGhpcy5jb25uZWN0aW9uQmxvY2tzLnB1c2goY3QucmVhZChhKSl9fXdyaXRlKCl7bGV0IEE9bmV3IFkoOCk7Z0EoQSw4KSxnQShBLHRoaXMuY29ubmVjdGlvbkJsb2Nrcy5sZW5ndGgpO2xldCB0PXRoaXMuY29ubmVjdGlvbkJsb2Nrcy5tYXAocz0+cy53cml0ZSgpKSxuPXZBKHRoaXMubW9kZT09PSJkbHMyIj8iYXJ0MiI6ImFydDEiLFtBLC4uLnRdKTtyZXR1cm4gY0EodGhpcy5tb2RlPT09ImRsczIiPyJsYXIyIjoibGFydCIsbiwhMSwhMCl9dG9TRlpvbmUoQSl7bGV0IHQ9KG4scyxhLHIpPT57bGV0IEk9bi8tMTI4O2lmKEEuc2V0R2VuZXJhdG9yKHMsSSksSTw9MTIwKXtsZXQgbz1NYXRoLnJvdW5kKC40Njg3NSpuKSxnPXRoaXMuY29ubmVjdGlvbkJsb2Nrcy5maW5kKEI9PkIuaXNTdGF0aWNQYXJhbWV0ZXImJkIuZGVzdGluYXRpb249PT1yKTtnJiZBLnNldEdlbmVyYXRvcihhLG8rZy5zaG9ydFNjYWxlKX19O2ZvcihsZXQgbiBvZiB0aGlzLmNvbm5lY3Rpb25CbG9ja3Mpe2xldCBzPW4uc2hvcnRTY2FsZSxhPW4uc291cmNlLnNvdXJjZSxyPW4uY29udHJvbC5zb3VyY2UsST1uLmRlc3RpbmF0aW9uO2lmKG4uaXNTdGF0aWNQYXJhbWV0ZXIpe24udG9TRkdlbmVyYXRvcihBKTtjb250aW51ZX1pZihyPT09VC5ub25lKWlmKGE9PT1ULmtleU51bSl7aWYoST09PVIucGl0Y2gpe0Euc2V0R2VuZXJhdG9yKGkuc2NhbGVUdW5pbmcscy8xMjgpO2NvbnRpbnVlfWlmKEk9PT1SLm1vZEVudkhvbGR8fEk9PT1SLm1vZEVudkRlY2F5fHxJPT09Ui52b2xFbnZIb2xkfHxJPT1SLnZvbEVudkRlY2F5KWNvbnRpbnVlfWVsc2V7bGV0IG89bi50b0NvbWJpbmVkU0ZEZXN0aW5hdGlvbigpO2lmKG8pe0Euc2V0R2VuZXJhdG9yKG8scyk7Y29udGludWV9fW4udG9TRk1vZHVsYXRvcihBKX10aGlzLm1vZGU9PT0iZGxzMSImJkEuYWRkTW9kdWxhdG9ycyhFQS5jb3B5RnJvbShHciksRUEuY29weUZyb20oUnIpKTtmb3IobGV0IG4gb2YgdGhpcy5jb25uZWN0aW9uQmxvY2tzKXtpZihuLnNvdXJjZS5zb3VyY2UhPT1ULmtleU51bSljb250aW51ZTtsZXQgcz1uLnNob3J0U2NhbGU7c3dpdGNoKG4uZGVzdGluYXRpb24pe2RlZmF1bHQ6Y29udGludWU7Y2FzZSBSLnZvbEVudkhvbGQ6dChzLGkua2V5TnVtVG9Wb2xFbnZIb2xkLGkuaG9sZFZvbEVudixSLnZvbEVudkhvbGQpO2JyZWFrO2Nhc2UgUi52b2xFbnZEZWNheTp0KHMsaS5rZXlOdW1Ub1ZvbEVudkRlY2F5LGkuZGVjYXlWb2xFbnYsUi52b2xFbnZEZWNheSk7YnJlYWs7Y2FzZSBSLm1vZEVudkhvbGQ6dChzLGkua2V5TnVtVG9Nb2RFbnZIb2xkLGkuaG9sZE1vZEVudixSLm1vZEVudkhvbGQpO2JyZWFrO2Nhc2UgUi5tb2RFbnZEZWNheTp0KHMsaS5rZXlOdW1Ub01vZEVudkRlY2F5LGkuZGVjYXlNb2RFbnYsUi5tb2RFbnZEZWNheSk7YnJlYWt9fX19LHduPWNsYXNzIFV0e2NoYW5uZWw9MTt0YWJsZUluZGV4O2Z1c09wdGlvbnM9MDtwaGFzZUdyb3VwPTA7Y29uc3RydWN0b3IoQSl7dGhpcy50YWJsZUluZGV4PUF9c3RhdGljIGNvcHlGcm9tKEEpe2xldCB0PW5ldyBVdChBLnRhYmxlSW5kZXgpO3JldHVybiB0LmNoYW5uZWw9QS5jaGFubmVsLHQucGhhc2VHcm91cD1BLnBoYXNlR3JvdXAsdC5mdXNPcHRpb25zPUEuZnVzT3B0aW9ucyx0fXN0YXRpYyByZWFkKEEpe2xldCB0PU4oQS5kYXRhLDIpLG49TihBLmRhdGEsMikscz1OKEEuZGF0YSw0KSxhPU4oQS5kYXRhLDQpLHI9bmV3IFV0KGEpO3JldHVybiByLmNoYW5uZWw9cyxyLmZ1c09wdGlvbnM9dCxyLnBoYXNlR3JvdXA9bixyfXN0YXRpYyBmcm9tU0Zab25lKEEsdCl7bGV0IG49QS5pbmRleE9mKHQuc2FtcGxlKTtpZihuPDApdGhyb3cgbmV3IEVycm9yKGBXYXZlIGxpbmsgZXJyb3I6IFNhbXBsZSAke3Quc2FtcGxlLm5hbWV9IGRvZXMgbm90IGV4aXN0IGluIHRoZSBzYW1wbGUgbGlzdC5gKTtsZXQgcz1uZXcgVXQobik7c3dpdGNoKHQuc2FtcGxlLnNhbXBsZVR5cGUpe2RlZmF1bHQ6Y2FzZSB3QS5sZWZ0U2FtcGxlOmNhc2Ugd0EubW9ub1NhbXBsZTpzLmNoYW5uZWw9MTticmVhaztjYXNlIHdBLnJpZ2h0U2FtcGxlOnMuY2hhbm5lbD0yfXJldHVybiBzfXdyaXRlKCl7bGV0IEE9bmV3IFkoMTIpO3JldHVybiBKKEEsdGhpcy5mdXNPcHRpb25zKSxKKEEsdGhpcy5waGFzZUdyb3VwKSxnQShBLHRoaXMuY2hhbm5lbCksZ0EoQSx0aGlzLnRhYmxlSW5kZXgpLGNBKCJ3bG5rIixBKX19LFR0PWNsYXNzIFZlIGV4dGVuZHMgamV7YXJ0aWN1bGF0aW9uPW5ldyBEYTtrZXlSYW5nZT17bWluOjAsbWF4OjEyN307dmVsUmFuZ2U9e21pbjowLG1heDoxMjd9O2tleUdyb3VwPTA7ZnVzT3B0aW9ucz0wO3VzTGF5ZXI9MDt3YXZlU2FtcGxlO3dhdmVMaW5rO2NvbnN0cnVjdG9yKEEsdCl7c3VwZXIoKSx0aGlzLndhdmVTYW1wbGU9dCx0aGlzLndhdmVMaW5rPUF9c3RhdGljIGNvcHlGcm9tKEEpe2xldCB0PW5ldyBWZSh3bi5jb3B5RnJvbShBLndhdmVMaW5rKSx6ZS5jb3B5RnJvbShBLndhdmVTYW1wbGUpKTtyZXR1cm4gdC5rZXlHcm91cD1BLmtleUdyb3VwLHQua2V5UmFuZ2U9ey4uLkEua2V5UmFuZ2V9LHQudmVsUmFuZ2U9ey4uLkEudmVsUmFuZ2V9LHQudXNMYXllcj1BLnVzTGF5ZXIsdC5mdXNPcHRpb25zPUEuZnVzT3B0aW9ucyx0LmFydGljdWxhdGlvbi5jb3B5RnJvbShBLmFydGljdWxhdGlvbiksdH1zdGF0aWMgcmVhZChBLHQpe2xldCBuPXRoaXMudmVyaWZ5QW5kUmVhZExpc3QodCwicmduICIsInJnbjIiKSxzPW4uZmluZChtPT5tLmhlYWRlcj09PSJ3c21wIiksYT1zP3plLnJlYWQocyk6dm9pZCAwLHI9bi5maW5kKG09Pm0uaGVhZGVyPT09IndsbmsiKTtpZighcil7c0EoIkludmFsaWQgRExTIHJlZ2lvbjogbWlzc2luZyAnd2xuaycgY2h1bmshIERpc2NhcmRpbmcuLi4iKTtyZXR1cm59bGV0IEk9d24ucmVhZChyKSxvPW4uZmluZChtPT5tLmhlYWRlcj09PSJyZ25oIik7aWYoIW8pe3NBKCJJbnZhbGlkIERMUyByZWdpb246IG1pc3NpbmcgJ3JnbmgnIGNodW5rISBEaXNjYXJkaW5nLi4uIik7cmV0dXJufWxldCBnPUFbSS50YWJsZUluZGV4XTtnfHxWZS5wYXJzaW5nRXJyb3IoYEludmFsaWQgc2FtcGxlIGluZGV4OiAke0kudGFibGVJbmRleH0uIFNhbXBsZXMgYXZhaWxhYmxlOiAke0EubGVuZ3RofWApLGE/Pz1nLndhdmVTYW1wbGU7bGV0IEI9bmV3IFZlKEksYSksZD1OKG8uZGF0YSwyKSxoPU4oby5kYXRhLDIpLEM9TihvLmRhdGEsMiksUT1OKG8uZGF0YSwyKTtyZXR1cm4gQz09PTAmJlE9PT0wJiYoUT0xMjcsQz0wKSxCLmtleVJhbmdlLm1heD1oLEIua2V5UmFuZ2UubWluPWQsQi52ZWxSYW5nZS5tYXg9USxCLnZlbFJhbmdlLm1pbj1DLEIuZnVzT3B0aW9ucz1OKG8uZGF0YSwyKSxCLmtleUdyb3VwPU4oby5kYXRhLDIpLG8uZGF0YS5sZW5ndGgtby5kYXRhLmN1cnJlbnRJbmRleD49MiYmKEIudXNMYXllcj1OKG8uZGF0YSwyKSksQi5hcnRpY3VsYXRpb24ucmVhZChuKSxCfXN0YXRpYyBmcm9tU0Zab25lKEEsdCl7bGV0IG49emUuZnJvbVNGWm9uZShBKSxzPXduLmZyb21TRlpvbmUodCxBKSxhPW5ldyBWZShzLG4pO3JldHVybiBhLmtleVJhbmdlLm1pbj1NYXRoLm1heChBLmtleVJhbmdlLm1pbiwwKSxhLmtleVJhbmdlLm1heD1BLmtleVJhbmdlLm1heCxhLnZlbFJhbmdlLm1pbj1NYXRoLm1heChBLnZlbFJhbmdlLm1pbiwwKSxhLnZlbFJhbmdlLm1heD1BLnZlbFJhbmdlLm1heCxhLmtleUdyb3VwPUEuZ2V0R2VuZXJhdG9yKGkuZXhjbHVzaXZlQ2xhc3MsMCksYS5hcnRpY3VsYXRpb24uZnJvbVNGWm9uZShBKSxhfXdyaXRlKCl7bGV0IEE9W3RoaXMud3JpdGVIZWFkZXIoKSx0aGlzLndhdmVTYW1wbGUud3JpdGUoKSx0aGlzLndhdmVMaW5rLndyaXRlKCksdGhpcy5hcnRpY3VsYXRpb24ud3JpdGUoKV07cmV0dXJuIHZBKCJyZ24yIixBLCEwKX10b1NGWm9uZShBLHQpe2xldCBuPXRbdGhpcy53YXZlTGluay50YWJsZUluZGV4XTtufHxWZS5wYXJzaW5nRXJyb3IoYEludmFsaWQgc2FtcGxlIGluZGV4OiAke3RoaXMud2F2ZUxpbmsudGFibGVJbmRleH1gKTtsZXQgcz1BLmNyZWF0ZVpvbmUobik7cmV0dXJuIHMua2V5UmFuZ2U9dGhpcy5rZXlSYW5nZSxzLnZlbFJhbmdlPXRoaXMudmVsUmFuZ2UsdGhpcy5rZXlSYW5nZS5tYXg9PT0xMjcmJnRoaXMua2V5UmFuZ2UubWluPT09MCYmKHMua2V5UmFuZ2UubWluPS0xKSx0aGlzLnZlbFJhbmdlLm1heD09PTEyNyYmdGhpcy52ZWxSYW5nZS5taW49PT0wJiYocy52ZWxSYW5nZS5taW49LTEpLHRoaXMua2V5R3JvdXAhPT0wJiZzLnNldEdlbmVyYXRvcihpLmV4Y2x1c2l2ZUNsYXNzLHRoaXMua2V5R3JvdXApLHRoaXMud2F2ZVNhbXBsZS50b1NGWm9uZShzLG4pLHRoaXMuYXJ0aWN1bGF0aW9uLnRvU0Zab25lKHMpLHMuZ2VuZXJhdG9ycz1zLmdlbmVyYXRvcnMuZmlsdGVyKGE9PmEuZ2VuZXJhdG9yVmFsdWUhPT14W2EuZ2VuZXJhdG9yVHlwZV0uZGVmKSxzfXdyaXRlSGVhZGVyKCl7bGV0IEE9bmV3IFkoMTIpO3JldHVybiBKKEEsTWF0aC5tYXgodGhpcy5rZXlSYW5nZS5taW4sMCkpLEooQSx0aGlzLmtleVJhbmdlLm1heCksSihBLE1hdGgubWF4KHRoaXMudmVsUmFuZ2UubWluLDApKSxKKEEsdGhpcy52ZWxSYW5nZS5tYXgpLEooQSx0aGlzLmZ1c09wdGlvbnMpLEooQSx0aGlzLmtleUdyb3VwKSxKKEEsdGhpcy51c0xheWVyKSxjQSgicmduaCIsQSl9fSxGbj1jbGFzcyB4dCBleHRlbmRzIGple2FydGljdWxhdGlvbj1uZXcgRGE7cmVnaW9ucz1uZXcgQXJyYXk7bmFtZT0iVW5uYW1lZCI7YmFua0xTQj0wO2JhbmtNU0I9MDtpc0dNR1NEcnVtPSExO3Byb2dyYW09MDtzdGF0aWMgY29weUZyb20oQSl7bGV0IHQ9bmV3IHh0O3JldHVybiB0Lm5hbWU9QS5uYW1lLHQuaXNHTUdTRHJ1bT1BLmlzR01HU0RydW0sdC5iYW5rTVNCPUEuYmFua01TQix0LmJhbmtMU0I9QS5iYW5rTFNCLHQucHJvZ3JhbT1BLnByb2dyYW0sdC5hcnRpY3VsYXRpb24uY29weUZyb20oQS5hcnRpY3VsYXRpb24pLEEucmVnaW9ucy5mb3JFYWNoKG49Pnt0LnJlZ2lvbnMucHVzaChUdC5jb3B5RnJvbShuKSl9KSx0fXN0YXRpYyByZWFkKEEsdCl7bGV0IG49dGhpcy52ZXJpZnlBbmRSZWFkTGlzdCh0LCJpbnMgIikscz1uLmZpbmQoaD0+aC5oZWFkZXI9PT0iaW5zaCIpO2lmKCFzKXRocm93IFooKSxuZXcgRXJyb3IoIk5vIGluc3RydW1lbnQgaGVhZGVyISIpO2xldCBhPSIiLHI9ZmUobiwiSU5GTyIpO2lmKHIpe2xldCBoPXJBKHIuZGF0YSk7Zm9yKDtoLmhlYWRlciE9PSJJTkFNIjspaD1yQShyLmRhdGEpO2E9aEEoaC5kYXRhLGguZGF0YS5sZW5ndGgpLnRyaW0oKX1hLmxlbmd0aDwxJiYoYT0iVW5uYW1lZCBJbnN0cnVtZW50Iik7bGV0IEk9bmV3IHh0O0kubmFtZT1hO2xldCBvPU4ocy5kYXRhLDQpLGc9TihzLmRhdGEsNCksQj1OKHMuZGF0YSw0KTtJLnByb2dyYW09QiYxMjcsSS5iYW5rTVNCPWc+Pj44JjEyNyxJLmJhbmtMU0I9ZyYxMjcsSS5pc0dNR1NEcnVtPWc+Pj4zMT4wLGJBKGAlY1BhcnNpbmcgJWMiJHthfSIlYy4uLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pO2xldCBkPWZlKG4sImxyZ24iKTtpZighZCl0aHJvdyBaKCksbmV3IEVycm9yKCJObyByZWdpb24gbGlzdCEiKTtJLmFydGljdWxhdGlvbi5yZWFkKG4pO2ZvcihsZXQgaD0wO2g8bztoKyspe2xldCBDPXJBKGQuZGF0YSk7dGhpcy52ZXJpZnlIZWFkZXIoQywiTElTVCIpO2xldCBRPWhBKEMuZGF0YSw0KTtRIT09InJnbiAiJiZRIT09InJnbjIiJiYoWigpLHRoaXMucGFyc2luZ0Vycm9yKGBJbnZhbGlkIERMUyByZWdpb24hIEV4cGVjdGVkICJyZ24gIiBvciAicmduMiIgZ290ICIke1F9ImApKTtsZXQgbT1UdC5yZWFkKEEsQyk7bSYmSS5yZWdpb25zLnB1c2gobSl9cmV0dXJuIFooKSxJfXN0YXRpYyBmcm9tU0ZQcmVzZXQoQSx0KXtsZXQgbj1uZXcgeHQ7cmV0dXJuIG4ubmFtZT1BLm5hbWUsbi5iYW5rTFNCPUEuYmFua0xTQixuLmJhbmtNU0I9QS5iYW5rTVNCLG4ucHJvZ3JhbT1BLnByb2dyYW0sbi5pc0dNR1NEcnVtPUEuaXNHTUdTRHJ1bSxPQShgJWNDb252ZXJ0aW5nICVjJHtBLnRvU3RyaW5nKCl9JWMgdG8gRExTLi4uYCxjLmluZm8sYy52YWx1ZSxjLmluZm8pLEEudG9GbGF0dGVuZWRJbnN0cnVtZW50KCkuem9uZXMuZm9yRWFjaChhPT57bi5yZWdpb25zLnB1c2goVHQuZnJvbVNGWm9uZShhLHQpKX0pLFooKSxufXdyaXRlKCl7YkEoYCVjV3JpdGluZyAlYyR7dGhpcy5uYW1lfSVjLi4uYCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyk7bGV0IEE9W3RoaXMud3JpdGVIZWFkZXIoKV0sdD10aGlzLnJlZ2lvbnMubWFwKHM9PnMud3JpdGUoKSk7QS5wdXNoKHZBKCJscmduIix0LCEwKSksdGhpcy5hcnRpY3VsYXRpb24ubGVuZ3RoPjAmJkEucHVzaCh0aGlzLmFydGljdWxhdGlvbi53cml0ZSgpKTtsZXQgbj1jQSgiSU5BTSIsbmUodGhpcy5uYW1lLCEwKSk7cmV0dXJuIEEucHVzaChjQSgiSU5GTyIsbiwhMSwhMCkpLFooKSx2QSgiaW5zICIsQSwhMCl9dG9TRlByZXNldChBKXtsZXQgdD1uZXcgcGUoQSk7dC5uYW1lPXRoaXMubmFtZSx0LmJhbmtNU0I9dGhpcy5iYW5rTVNCLHQuYmFua0xTQj10aGlzLmJhbmtMU0IsdC5pc0dNR1NEcnVtPXRoaXMuaXNHTUdTRHJ1bSx0LnByb2dyYW09dGhpcy5wcm9ncmFtO2xldCBuPW5ldyBkdDtuLm5hbWU9dGhpcy5uYW1lLHQuY3JlYXRlWm9uZShuKSx0aGlzLmFydGljdWxhdGlvbi50b1NGWm9uZShuLmdsb2JhbFpvbmUpLHRoaXMucmVnaW9ucy5mb3JFYWNoKHM9PnMudG9TRlpvbmUobixBLnNhbXBsZXMpKSxuLmdsb2JhbGl6ZSgpLG4uZ2xvYmFsWm9uZS5tb2R1bGF0b3JzLmZpbmQocz0+cy5kZXN0aW5hdGlvbj09PWkucmV2ZXJiRWZmZWN0c1NlbmQpPT09dm9pZCAwJiZuLmdsb2JhbFpvbmUuYWRkTW9kdWxhdG9ycyhFQS5jb3B5RnJvbSh5YSkpLG4uZ2xvYmFsWm9uZS5tb2R1bGF0b3JzLmZpbmQocz0+cy5kZXN0aW5hdGlvbj09PWkuY2hvcnVzRWZmZWN0c1NlbmQpPT09dm9pZCAwJiZuLmdsb2JhbFpvbmUuYWRkTW9kdWxhdG9ycyhFQS5jb3B5RnJvbShrYSkpLG4uZ2xvYmFsWm9uZS5nZW5lcmF0b3JzPW4uZ2xvYmFsWm9uZS5nZW5lcmF0b3JzLmZpbHRlcihzPT5zLmdlbmVyYXRvclZhbHVlIT09eFtzLmdlbmVyYXRvclR5cGVdLmRlZiksQS5hZGRQcmVzZXRzKHQpLEEuYWRkSW5zdHJ1bWVudHMobil9d3JpdGVIZWFkZXIoKXtsZXQgQT1uZXcgWSgxMik7Z0EoQSx0aGlzLnJlZ2lvbnMubGVuZ3RoKTtsZXQgdD0odGhpcy5iYW5rTVNCJjEyNyk8PDh8dGhpcy5iYW5rTFNCJjEyNztyZXR1cm4gdGhpcy5pc0dNR1NEcnVtJiYodHw9MTw8MzEpLGdBKEEsdCksZ0EoQSx0aGlzLnByb2dyYW0mMTI3KSxjQSgiaW5zaCIsQSl9fSx3YT17cHJvZ3Jlc3NGdW5jdGlvbjp2b2lkIDB9LEZhPWNsYXNzIF9uIGV4dGVuZHMgamV7c2FtcGxlcz1uZXcgQXJyYXk7aW5zdHJ1bWVudHM9bmV3IEFycmF5O3NvdW5kQmFua0luZm89e25hbWU6IlVubmFtZWQiLGNyZWF0aW9uRGF0ZTpuZXcgRGF0ZSxzb2Z0d2FyZToiU3Blc3NhU3ludGgiLHNvdW5kRW5naW5lOiJETFMgTGV2ZWwgMi4yIix2ZXJzaW9uOnttYWpvcjoyLG1pbm9yOjR9fTtzdGF0aWMgcmVhZChBKXtpZighQSl0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgcHJvdmlkZWQhIik7bGV0IHQ9bmV3IFkoQSk7T0EoIiVjUGFyc2luZyBETFMgZmlsZS4uLiIsYy5pbmZvKTtsZXQgbj1yQSh0LCExKTt0aGlzLnZlcmlmeUhlYWRlcihuLCJSSUZGIiksdGhpcy52ZXJpZnlUZXh0KGhBKHQsNCkudG9Mb3dlckNhc2UoKSwiZGxzICIpO2xldCBzPVtdO2Zvcig7dC5jdXJyZW50SW5kZXg8dC5sZW5ndGg7KXMucHVzaChyQSh0KSk7bGV0IGE9bmV3IF9uO2Euc291bmRCYW5rSW5mby5uYW1lPSJVbm5hbWVkIERMUyIsYS5zb3VuZEJhbmtJbmZvLnByb2R1Y3Q9IlNwZXNzYVN5bnRoIERMUyIsYS5zb3VuZEJhbmtJbmZvLmNvbW1lbnQ9IihubyBkZXNjcmlwdGlvbikiO2xldCByPWZlKHMsIklORk8iKTtpZihyKWZvcig7ci5kYXRhLmN1cnJlbnRJbmRleDxyLmRhdGEubGVuZ3RoOyl7bGV0IFE9ckEoci5kYXRhKSxtPVEuaGVhZGVyLHk9aEEoUS5kYXRhLFEuc2l6ZSk7c3dpdGNoKG0pe2Nhc2UiSU5BTSI6YS5zb3VuZEJhbmtJbmZvLm5hbWU9eTticmVhaztjYXNlIklDUkQiOmEuc291bmRCYW5rSW5mby5jcmVhdGlvbkRhdGU9dHMoeSk7YnJlYWs7Y2FzZSJJQ01UIjphLnNvdW5kQmFua0luZm8uY29tbWVudD15O2JyZWFrO2Nhc2UiSVNCSiI6YS5zb3VuZEJhbmtJbmZvLnN1YmplY3Q9eTticmVhaztjYXNlIklDT1AiOmEuc291bmRCYW5rSW5mby5jb3B5cmlnaHQ9eTticmVhaztjYXNlIklFTkciOmEuc291bmRCYW5rSW5mby5lbmdpbmVlcj15O2JyZWFrO2Nhc2UiSVBSRCI6YS5zb3VuZEJhbmtJbmZvLnByb2R1Y3Q9eTticmVhaztjYXNlIklTRlQiOmEuc291bmRCYW5rSW5mby5zb2Z0d2FyZT15fX10aGlzLnByaW50SW5mbyhhKTtsZXQgST1zLmZpbmQoUT0+US5oZWFkZXI9PT0iY29saCIpO2lmKCFJKXJldHVybiB0aGlzLnBhcnNpbmdFcnJvcigiTm8gY29saCBjaHVuayEiKSw1O2xldCBvPU4oSS5kYXRhLDQpO3AoYCVjSW5zdHJ1bWVudHMgYW1vdW50OiAlYyR7b31gLGMuaW5mbyxjLnJlY29nbml6ZWQpO2xldCBnPWZlKHMsInd2cGwiKTtpZighZylyZXR1cm4gdGhpcy5wYXJzaW5nRXJyb3IoIk5vIHd2cGwgY2h1bmshIiksNTt0aGlzLnZlcmlmeUFuZFJlYWRMaXN0KGcsInd2cGwiKS5mb3JFYWNoKFE9PnthLnNhbXBsZXMucHVzaChMcy5yZWFkKFEpKX0pO2xldCBkPWZlKHMsImxpbnMiKTtpZighZClyZXR1cm4gdGhpcy5wYXJzaW5nRXJyb3IoIk5vIGxpbnMgY2h1bmshIiksNTtsZXQgaD10aGlzLnZlcmlmeUFuZFJlYWRMaXN0KGQsImxpbnMiKTtiQSgiJWNMb2FkaW5nIGluc3RydW1lbnRzLi4uIixjLmluZm8pLGgubGVuZ3RoIT09byYmc0EoYENvbGggcmVwb3J0ZWQgaW52YWxpZCBhbW91bnQgb2YgaW5zdHJ1bWVudHMuIERldGVjdGVkICR7aC5sZW5ndGh9LCBleHBlY3RlZCAke299YCksaC5mb3JFYWNoKFE9PnthLmluc3RydW1lbnRzLnB1c2goRm4ucmVhZChhLnNhbXBsZXMsUSkpfSksWigpO2xldCBDPXMuZmluZChRPT5RLmhlYWRlcj09PSJwZ2FsIik7aWYoQyl7cCgiJWNGb3VuZCB0aGUgaW5zdHJ1bWVudCBhbGlhc2luZyBjaHVuayEiLGMucmVjb2duaXplZCk7bGV0IFE9Qy5kYXRhO1FbMF09PT0yJiZRWzFdK1FbMl0rUVszXT09PTAmJihRLmN1cnJlbnRJbmRleCs9NCk7bGV0IG09YS5pbnN0cnVtZW50cy5maW5kKEY9PmZBLmlzWEdEcnVtcyhGLmJhbmtNU0IpfHxGLmlzR01HU0RydW0pO2lmKCFtKXJldHVybiBzQSgiTW9iaWxlQkFFIGFsaWFzaW5nIGNodW5rIHdpdGhvdXQgYSBkcnVtIHByZXNldC4gQWJvcnRpbmchIiksYTtsZXQgeT1RLnNsaWNlKFEuY3VycmVudEluZGV4LFEuY3VycmVudEluZGV4KzEyOCk7US5jdXJyZW50SW5kZXgrPTEyODtmb3IobGV0IEY9MDtGPDEyODtGKyspe2xldCBrPXlbRl07aWYoaz09PUYpY29udGludWU7bGV0IEQ9bS5yZWdpb25zLmZpbmQoTD0+TC5rZXlSYW5nZS5tYXg9PT1rJiZMLmtleVJhbmdlLm1pbj09PWspO2lmKCFEKXtzQShgSW52YWxpZCBkcnVtIGFsaWFzICR7Rn0gdG8gJHtrfTogcmVnaW9uIGRvZXMgbm90IGV4aXN0LmApO2NvbnRpbnVlfWxldCB2PVR0LmNvcHlGcm9tKEQpO3Yua2V5UmFuZ2UubWF4PUYsdi5rZXlSYW5nZS5taW49RixtLnJlZ2lvbnMucHVzaCh2KX1mb3IoUS5jdXJyZW50SW5kZXgrPTQ7US5jdXJyZW50SW5kZXg8US5sZW5ndGg7KXtsZXQgRj1OKFEsMiksaz1GJjEyNyxEPUY+PjcmMTI3LHY9UVtRLmN1cnJlbnRJbmRleCsrXSxMPVFbUS5jdXJyZW50SW5kZXgrK107TCE9PTAmJnNBKGBJbnZhbGlkIGFsaWFzIGJ5dGUuIEV4cGVjdGVkIDAsIGdvdCAke0x9YCk7bGV0IEU9TihRLDIpLFg9RSYxMjcsTz1FPj43JjEyNyxuQT1RW1EuY3VycmVudEluZGV4KytdO0w9UVtRLmN1cnJlbnRJbmRleCsrXSxMIT09MCYmc0EoYEludmFsaWQgYWxpYXMgaGVhZGVyLiBFeHBlY3RlZCAwLCBnb3QgJHtMfWApO2xldCAkPWEuaW5zdHJ1bWVudHMuZmluZChxPT5xLmJhbmtMU0I9PT1YJiZxLmJhbmtNU0I9PT1PJiZxLnByb2dyYW09PT1uQSYmIXEuaXNHTUdTRHJ1bSk7aWYoISQpe3NBKGBJbnZhbGlkIGFsaWFzLiBNaXNzaW5nIGluc3RydW1lbnQ6ICR7WH06JHtPfToke25BfWApO2NvbnRpbnVlfWxldCBWPUZuLmNvcHlGcm9tKCQpO1YuYmFua01TQj1ELFYuYmFua0xTQj1rLFYucHJvZ3JhbT12LGEuaW5zdHJ1bWVudHMucHVzaChWKX19cmV0dXJuIHAoYCVjUGFyc2luZyBmaW5pc2hlZCEgJWMiJHthLnNvdW5kQmFua0luZm8ubmFtZXx8IlVOTkFNRUQifSIlYyBoYXMgJWMke2EuaW5zdHJ1bWVudHMubGVuZ3RofSVjIGluc3RydW1lbnRzIGFuZCAlYyR7YS5zYW1wbGVzLmxlbmd0aH0lYyBzYW1wbGVzLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKSxaKCksYX1zdGF0aWMgZnJvbVNGKEEpe2JBKCIlY1NhdmluZyBTRjIgdG8gRExTIGxldmVsIDIuLi4iLGMuaW5mbyk7bGV0IHQ9bmV3IF9uO3JldHVybiB0LnNvdW5kQmFua0luZm89ey4uLkEuc291bmRCYW5rSW5mb30sdC5zb3VuZEJhbmtJbmZvLmNvbW1lbnQ9KHQuc291bmRCYW5rSW5mby5jb21tZW50Pz8iKE5vIGRlc2NyaXB0aW9uKSIpK2AKQ29udmVydGVkIGZyb20gU0YyIHRvIERMUyB3aXRoIFNwZXNzYVN5bnRoYCxBLnNhbXBsZXMuZm9yRWFjaChuPT57dC5zYW1wbGVzLnB1c2goTHMuZnJvbVNGU2FtcGxlKG4pKX0pLEEucHJlc2V0cy5mb3JFYWNoKG49Pnt0Lmluc3RydW1lbnRzLnB1c2goRm4uZnJvbVNGUHJlc2V0KG4sQS5zYW1wbGVzKSl9KSxwKCIlY0NvbnZlcnNpb24gY29tcGxldGUhIixjLnJlY29nbml6ZWQpLFooKSx0fXN0YXRpYyBwcmludEluZm8oQSl7Zm9yKGxldFt0LG5db2YgT2JqZWN0LmVudHJpZXMoQS5zb3VuZEJhbmtJbmZvKSl7aWYodHlwZW9mIG49PSJvYmplY3QiJiYibWFqb3IiaW4gbil7bGV0IHM9bjtwKGAlYyR7dH06ICVjIiR7cy5tYWpvcn0uJHtzLm1pbm9yfSJgLGMuaW5mbyxjLnJlY29nbml6ZWQpfXAoYCVjJHt0fTogJWMke24udG9Mb2NhbGVTdHJpbmcoKX1gLGMuaW5mbyxjLnJlY29nbml6ZWQpfX1hc3luYyB3cml0ZShBPXdhKXtiQSgiJWNTYXZpbmcgRExTLi4uIixjLmluZm8pO2xldCB0PW5ldyBZKDQpO2dBKHQsdGhpcy5pbnN0cnVtZW50cy5sZW5ndGgpO2xldCBuPWNBKCJjb2xoIix0KTtiQSgiJWNXcml0aW5nIGluc3RydW1lbnRzLi4uIixjLmluZm8pO2xldCBzPXZBKCJsaW5zIix0aGlzLmluc3RydW1lbnRzLm1hcCh5PT55LndyaXRlKCkpLCEwKTtwKCIlY1N1Y2Nlc3MhIixjLnJlY29nbml6ZWQpLFooKSxiQSgiJWNXcml0aW5nIFdBVkUgc2FtcGxlcy4uLiIsYy5pbmZvKTtsZXQgYT0wLHI9W10sST1bXSxvPTA7Zm9yKGxldCB5IG9mIHRoaXMuc2FtcGxlcyl7bGV0IEY9eS53cml0ZSgpO2F3YWl0IEE/LnByb2dyZXNzRnVuY3Rpb24/Lih5Lm5hbWUsbyx0aGlzLnNhbXBsZXMubGVuZ3RoKSxyLnB1c2goYSksYSs9Ri5sZW5ndGgsSS5wdXNoKEYpLG8rK31sZXQgZz12QSgid3ZwbCIsSSwhMCk7cCgiJWNTdWNjZWVkZWQhIixjLnJlY29nbml6ZWQpO2xldCBCPW5ldyBZKDgrNCpyLmxlbmd0aCk7Z0EoQiw4KSxnQShCLHIubGVuZ3RoKTtmb3IobGV0IHkgb2YgcilnQShCLHkpO2xldCBkPWNBKCJwdGJsIixCKTt0aGlzLnNvdW5kQmFua0luZm8uc29mdHdhcmU9IlNwZXNzYVN5bnRoIjtsZXQgaD1bXSxDPSh5LEYpPT57aC5wdXNoKGNBKHksbmUoRiwhMCkpKX07Zm9yKGxldFt5LEZdb2YgT2JqZWN0LmVudHJpZXModGhpcy5zb3VuZEJhbmtJbmZvKSl7bGV0IGs9eSxEPUY7aWYoRClzd2l0Y2goayl7Y2FzZSJuYW1lIjpDKCJJTkFNIixEKTticmVhaztjYXNlImNvbW1lbnQiOkMoIklDTVQiLEQpO2JyZWFrO2Nhc2UiY29weXJpZ2h0IjpDKCJJQ09QIixEKTticmVhaztjYXNlImNyZWF0aW9uRGF0ZSI6QygiSUNSRCIsRC50b0lTT1N0cmluZygpKTticmVhaztjYXNlImVuZ2luZWVyIjpDKCJJRU5HIixEKTticmVhaztjYXNlInByb2R1Y3QiOkMoIklQUkQiLEQpO2JyZWFrO2Nhc2Uicm9tVmVyc2lvbiI6Y2FzZSJ2ZXJzaW9uIjpjYXNlInNvdW5kRW5naW5lIjpjYXNlInJvbUluZm8iOmJyZWFrO2Nhc2Uic29mdHdhcmUiOkMoIklTRlQiLEQpO2JyZWFrO2Nhc2Uic3ViamVjdCI6QygiSVNCSiIsRCl9fWxldCBRPXZBKCJJTkZPIixoLCEwKTtwKCIlY0NvbWJpbmluZyBldmVyeXRoaW5nLi4uIik7bGV0IG09dkEoIlJJRkYiLFtuZSgiRExTICIpLG4scyxkLGcsUV0pO3JldHVybiBwKCIlY1NhdmVkIHN1Y2Nlc3NmdWxseSEiLGMucmVjb2duaXplZCksWigpLG0uYnVmZmVyfXRvU0YoKXtPQSgiJWNDb252ZXJ0aW5nIERMUyB0byBTRjIuLi4iLGMuaW5mbyk7bGV0IEE9bmV3IEdhO3JldHVybiBBLnNvdW5kQmFua0luZm8udmVyc2lvbi5taW5vcj00LEEuc291bmRCYW5rSW5mby52ZXJzaW9uLm1ham9yPTIsQS5zb3VuZEJhbmtJbmZvPXsuLi50aGlzLnNvdW5kQmFua0luZm99LEEuc291bmRCYW5rSW5mby5jb21tZW50PShBLnNvdW5kQmFua0luZm8uY29tbWVudD8/IihObyBkZXNjcmlwdGlvbikiKStgCkNvbnZlcnRlZCBmcm9tIERMUyB0byBTRjIgd2l0aCBTcGVzc2FTeW50aGAsdGhpcy5zYW1wbGVzLmZvckVhY2godD0+e3QudG9TRlNhbXBsZShBKX0pLHRoaXMuaW5zdHJ1bWVudHMuZm9yRWFjaCh0PT57dC50b1NGUHJlc2V0KEEpfSksQS5mbHVzaCgpLHAoIiVjQ29udmVyc2lvbiBjb21wbGV0ZSEiLGMucmVjb2duaXplZCksWigpLEF9fSxHYT1jbGFzcyBIdHtzdGF0aWMgaXNTRjNEZWNvZGVyUmVhZHk9T3QuaXNJbml0aWFsaXplZDtzb3VuZEJhbmtJbmZvPXtuYW1lOiJVbm5hbWVkIixjcmVhdGlvbkRhdGU6bmV3IERhdGUsc29mdHdhcmU6IlNwZXNzYVN5bnRoIixzb3VuZEVuZ2luZToiRS1tdSAxMEsyIix2ZXJzaW9uOnttYWpvcjoyLG1pbm9yOjR9fTtwcmVzZXRzPVtdO3NhbXBsZXM9W107aW5zdHJ1bWVudHM9W107ZGVmYXVsdE1vZHVsYXRvcnM9RWEubWFwKEVBLmNvcHlGcm9tLmJpbmQoRUEpKTtjdXN0b21EZWZhdWx0TW9kdWxhdG9ycz0hMTtfaXNYR0Jhbms9ITE7Z2V0IGlzWEdCYW5rKCl7cmV0dXJuIHRoaXMuX2lzWEdCYW5rfXN0YXRpYyBtZXJnZVNvdW5kQmFua3MoLi4uQSl7bGV0IHQ9QS5zaGlmdCgpO2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm8gc291bmQgYmFua3MgcHJvdmlkZWQhIik7bGV0IG49dC5wcmVzZXRzO2Zvcig7QS5sZW5ndGg7KXtsZXQgYT1BPy5zaGlmdCgpPy5wcmVzZXRzO2EmJmEuZm9yRWFjaChyPT57bi5maW5kKEk9PnIubWF0Y2hlcyhJKSk9PT12b2lkIDAmJm4ucHVzaChyKX0pfWxldCBzPW5ldyBIdDtyZXR1cm4gcy5hZGRDb21wbGV0ZVByZXNldHMobikscy5zb3VuZEJhbmtJbmZvPXsuLi50LnNvdW5kQmFua0luZm99LHN9c3RhdGljIGFzeW5jIGdldFNhbXBsZVNvdW5kQmFua0ZpbGUoKXtsZXQgQT1uZXcgSHQsdD1uZXcgRmxvYXQzMkFycmF5KDEyOCk7Zm9yKGxldCBJPTA7STwxMjg7SSsrKXRbSV09SS8xMjgqMi0xO2xldCBuPW5ldyBtcjtuLm5hbWU9IlNhdyIsbi5vcmlnaW5hbEtleT02NSxuLnBpdGNoQ29ycmVjdGlvbj0yMCxuLmxvb3BFbmQ9MTI3LG4uc2V0QXVkaW9EYXRhKHQsNDQxMDApLEEuYWRkU2FtcGxlcyhuKTtsZXQgcz1uZXcgZHQ7cy5uYW1lPSJTYXcgV2F2ZSIscy5nbG9iYWxab25lLmFkZEdlbmVyYXRvcnMobmV3IEZBKGkuaW5pdGlhbEF0dGVudWF0aW9uLDM3NSksbmV3IEZBKGkucmVsZWFzZVZvbEVudiwtMWUzKSxuZXcgRkEoaS5zYW1wbGVNb2RlcywxKSkscy5jcmVhdGVab25lKG4pLHMuY3JlYXRlWm9uZShuKS5hZGRHZW5lcmF0b3JzKG5ldyBGQShpLmZpbmVUdW5lLC05KSksQS5hZGRJbnN0cnVtZW50cyhzKTtsZXQgcj1uZXcgcGUoQSk7cmV0dXJuIHIubmFtZT0iU2F3IFdhdmUiLHIuY3JlYXRlWm9uZShzKSxBLmFkZFByZXNldHMociksQS5zb3VuZEJhbmtJbmZvLm5hbWU9IkR1bW15IixBLmZsdXNoKCksYXdhaXQgQS53cml0ZVNGMigpfXN0YXRpYyBjb3B5RnJvbShBKXtsZXQgdD1uZXcgSHQ7cmV0dXJuIEEucHJlc2V0cy5mb3JFYWNoKG49PnQuY2xvbmVQcmVzZXQobikpLHQuc291bmRCYW5rSW5mbz17Li4uQS5zb3VuZEJhbmtJbmZvfSx0fWFkZENvbXBsZXRlUHJlc2V0cyhBKXt0aGlzLmFkZFByZXNldHMoLi4uQSk7bGV0IHQ9W107Zm9yKGxldCBzIG9mIEEpZm9yKGxldCBhIG9mIHMuem9uZXMpYS5pbnN0cnVtZW50JiYhdC5pbmNsdWRlcyhhLmluc3RydW1lbnQpJiZ0LnB1c2goYS5pbnN0cnVtZW50KTt0aGlzLmFkZEluc3RydW1lbnRzKC4uLnQpO2xldCBuPVtdO2ZvcihsZXQgcyBvZiB0KWZvcihsZXQgYSBvZiBzLnpvbmVzKWEuc2FtcGxlJiYhbi5pbmNsdWRlcyhhLnNhbXBsZSkmJm4ucHVzaChhLnNhbXBsZSk7dGhpcy5hZGRTYW1wbGVzKC4uLm4pfWFzeW5jIHdyaXRlRExTKEE9d2Epe3JldHVybiBGYS5mcm9tU0YodGhpcykud3JpdGUoQSl9YXN5bmMgd3JpdGVTRjIoQT1Ybil7cmV0dXJuIGtyKHRoaXMsQSl9YWRkUHJlc2V0cyguLi5BKXt0aGlzLnByZXNldHMucHVzaCguLi5BKX1hZGRJbnN0cnVtZW50cyguLi5BKXt0aGlzLmluc3RydW1lbnRzLnB1c2goLi4uQSl9YWRkU2FtcGxlcyguLi5BKXt0aGlzLnNhbXBsZXMucHVzaCguLi5BKX1jbG9uZVNhbXBsZShBKXtsZXQgdD10aGlzLnNhbXBsZXMuZmluZChzPT5zLm5hbWU9PT1BLm5hbWUpO2lmKHQpcmV0dXJuIHQ7bGV0IG49bmV3IFp0KEEubmFtZSxBLnNhbXBsZVJhdGUsQS5vcmlnaW5hbEtleSxBLnBpdGNoQ29ycmVjdGlvbixBLnNhbXBsZVR5cGUsQS5sb29wU3RhcnQsQS5sb29wRW5kKTtpZihBLmlzQ29tcHJlc3NlZD9uLnNldENvbXByZXNzZWREYXRhKEEuZ2V0UmF3RGF0YSghMCkpOm4uc2V0QXVkaW9EYXRhKEEuZ2V0QXVkaW9EYXRhKCksQS5zYW1wbGVSYXRlKSx0aGlzLmFkZFNhbXBsZXMobiksQS5saW5rZWRTYW1wbGUpe2xldCBzPXRoaXMuY2xvbmVTYW1wbGUoQS5saW5rZWRTYW1wbGUpO3MubGlua2VkU2FtcGxlfHxuLnNldExpbmtlZFNhbXBsZShzLG4uc2FtcGxlVHlwZSl9cmV0dXJuIG59Y2xvbmVJbnN0cnVtZW50KEEpe2xldCB0PXRoaXMuaW5zdHJ1bWVudHMuZmluZChzPT5zLm5hbWU9PT1BLm5hbWUpO2lmKHQpcmV0dXJuIHQ7bGV0IG49bmV3IGR0O24ubmFtZT1BLm5hbWUsbi5nbG9iYWxab25lLmNvcHlGcm9tKEEuZ2xvYmFsWm9uZSk7Zm9yKGxldCBzIG9mIEEuem9uZXMpbi5jcmVhdGVab25lKHRoaXMuY2xvbmVTYW1wbGUocy5zYW1wbGUpKS5jb3B5RnJvbShzKTtyZXR1cm4gdGhpcy5hZGRJbnN0cnVtZW50cyhuKSxufWNsb25lUHJlc2V0KEEpe2xldCB0PXRoaXMucHJlc2V0cy5maW5kKHM9PnMubmFtZT09PUEubmFtZSk7aWYodClyZXR1cm4gdDtsZXQgbj1uZXcgcGUodGhpcyk7bi5uYW1lPUEubmFtZSxuLmJhbmtNU0I9QS5iYW5rTVNCLG4uYmFua0xTQj1BLmJhbmtMU0Isbi5pc0dNR1NEcnVtPUEuaXNHTUdTRHJ1bSxuLnByb2dyYW09QS5wcm9ncmFtLG4ubGlicmFyeT1BLmxpYnJhcnksbi5nZW5yZT1BLmdlbnJlLG4ubW9ycGhvbG9neT1BLm1vcnBob2xvZ3ksbi5nbG9iYWxab25lLmNvcHlGcm9tKEEuZ2xvYmFsWm9uZSk7Zm9yKGxldCBzIG9mIEEuem9uZXMpbi5jcmVhdGVab25lKHRoaXMuY2xvbmVJbnN0cnVtZW50KHMuaW5zdHJ1bWVudCkpLmNvcHlGcm9tKHMpO3JldHVybiB0aGlzLmFkZFByZXNldHMobiksbn1mbHVzaCgpe3RoaXMucHJlc2V0cy5zb3J0KHRlLnNvcnRlci5iaW5kKHRlKSksdGhpcy5wYXJzZUludGVybmFsKCl9dHJpbVNvdW5kQmFuayhBKXtsZXQgdD0ocyxhKT0+e2xldCByPTA7Zm9yKGxldCBJPTA7STxzLnpvbmVzLmxlbmd0aDtJKyspe2xldCBvPXMuem9uZXNbSV0sZz1vLmtleVJhbmdlLEI9by52ZWxSYW5nZSxkPSExO2ZvcihsZXQgaCBvZiBhKWlmKGgua2V5Pj1nLm1pbiYmaC5rZXk8PWcubWF4JiZoLnZlbG9jaXR5Pj1CLm1pbiYmaC52ZWxvY2l0eTw9Qi5tYXgpe2Q9ITA7YnJlYWt9IWQmJm8uc2FtcGxlJiYocChgJWMke28uc2FtcGxlLm5hbWV9JWMgcmVtb3ZlZCBmcm9tICVjJHtzLm5hbWV9JWMuYCxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pLHMuZGVsZXRlWm9uZShJKSYmKHIrKyxJLS0scChgJWMke28uc2FtcGxlLm5hbWV9JWMgZGVsZXRlZGAsYy5yZWNvZ25pemVkLGMuaW5mbykpLG8uc2FtcGxlLnVzZUNvdW50PDEmJnRoaXMuZGVsZXRlU2FtcGxlKG8uc2FtcGxlKSl9cmV0dXJuIHJ9O09BKCIlY1RyaW1taW5nIHNvdW5kIGJhbmsuLi4iLGMuaW5mbyk7bGV0IG49QS5nZXRVc2VkUHJvZ3JhbXNBbmRLZXlzKHRoaXMpO2JBKCIlY01vZGlmeWluZyBzb3VuZCBiYW5rLi4uIixjLmluZm8pLHAoIkRldGVjdGVkIGtleXMgZm9yIG1pZGk6IixuKTtmb3IobGV0IHM9MDtzPHRoaXMucHJlc2V0cy5sZW5ndGg7cysrKXtsZXQgYT10aGlzLnByZXNldHNbc10scj1uLmdldChhKTtpZihyPT09dm9pZCAwKXAoYCVjRGVsZXRpbmcgcHJlc2V0ICVjJHthLm5hbWV9JWMgYW5kIGl0cyB6b25lc2AsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pLHRoaXMuZGVsZXRlUHJlc2V0KGEpLHMtLTtlbHNle2xldCBJPVsuLi5yXS5tYXAoZz0+e2xldCBCPWcuc3BsaXQoIi0iKTtyZXR1cm57a2V5OnBhcnNlSW50KEJbMF0pLHZlbG9jaXR5OnBhcnNlSW50KEJbMV0pfX0pO2JBKGAlY1RyaW1taW5nICVjJHthLm5hbWV9YCxjLmluZm8sYy5yZWNvZ25pemVkKSxwKGBLZXlzIGZvciAke2EubmFtZX06YCxJKTtsZXQgbz0wO2ZvcihsZXQgZz0wO2c8YS56b25lcy5sZW5ndGg7ZysrKXtsZXQgQj1hLnpvbmVzW2ddLGQ9Qi5rZXlSYW5nZSxoPUIudmVsUmFuZ2UsQz0hMTtmb3IobGV0IFEgb2YgSSlpZihRLmtleT49ZC5taW4mJlEua2V5PD1kLm1heCYmUS52ZWxvY2l0eT49aC5taW4mJlEudmVsb2NpdHk8PWgubWF4JiZCLmluc3RydW1lbnQpe0M9ITA7bGV0IG09dChCLmluc3RydW1lbnQsSSk7cChgJWNUcmltbWVkIG9mZiAlYyR7bX0lYyB6b25lcyBmcm9tICVjJHtCLmluc3RydW1lbnQubmFtZX1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCk7YnJlYWt9IUMmJkIuaW5zdHJ1bWVudCYmKG8rKyxhLmRlbGV0ZVpvbmUoZyksQi5pbnN0cnVtZW50LnVzZUNvdW50PDEmJnRoaXMuZGVsZXRlSW5zdHJ1bWVudChCLmluc3RydW1lbnQpLGctLSl9cChgJWNUcmltbWVkIG9mZiAlYyR7b30lYyB6b25lcyBmcm9tICVjJHthLm5hbWV9YCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQpLFooKX19dGhpcy5yZW1vdmVVbnVzZWRFbGVtZW50cygpLHAoIiVjU291bmQgYmFuayBtb2RpZmllZCEiLGMucmVjb2duaXplZCksWigpLFooKX1yZW1vdmVVbnVzZWRFbGVtZW50cygpe3RoaXMuaW5zdHJ1bWVudHM9dGhpcy5pbnN0cnVtZW50cy5maWx0ZXIoQT0+e0EuZGVsZXRlVW51c2VkWm9uZXMoKTtsZXQgdD1BLnVzZUNvdW50PDE7cmV0dXJuIHQmJkEuZGVsZXRlKCksIXR9KSx0aGlzLnNhbXBsZXM9dGhpcy5zYW1wbGVzLmZpbHRlcihBPT57bGV0IHQ9QS51c2VDb3VudDwxO3JldHVybiB0JiZBLnVubGlua1NhbXBsZSgpLCF0fSl9ZGVsZXRlSW5zdHJ1bWVudChBKXtBLmRlbGV0ZSgpLHRoaXMuaW5zdHJ1bWVudHMuc3BsaWNlKHRoaXMuaW5zdHJ1bWVudHMuaW5kZXhPZihBKSwxKX1kZWxldGVQcmVzZXQoQSl7QS5kZWxldGUoKSx0aGlzLnByZXNldHMuc3BsaWNlKHRoaXMucHJlc2V0cy5pbmRleE9mKEEpLDEpfWRlbGV0ZVNhbXBsZShBKXtBLnVubGlua1NhbXBsZSgpLHRoaXMuc2FtcGxlcy5zcGxpY2UodGhpcy5zYW1wbGVzLmluZGV4T2YoQSksMSl9Z2V0UHJlc2V0KEEsdCl7cmV0dXJuIFFhKHRoaXMucHJlc2V0cyxBLHQpfWRlc3Ryb3lTb3VuZEJhbmsoKXt0aGlzLnByZXNldHMubGVuZ3RoPTAsdGhpcy5pbnN0cnVtZW50cy5sZW5ndGg9MCx0aGlzLnNhbXBsZXMubGVuZ3RoPTB9cGFyc2luZ0Vycm9yKEEpe3Rocm93IG5ldyBFcnJvcihgU0YgcGFyc2luZyBlcnJvcjogJHtBfSBUaGUgZmlsZSBtYXkgYmUgY29ycnVwdGVkLmApfXBhcnNlSW50ZXJuYWwoKXt0aGlzLl9pc1hHQmFuaz0hMTtsZXQgQT1uZXcgU2V0KFswLDEsMiwzLDQsNSw2LDcsOCw5LDE2LDE3LDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDQwLDQxLDQ4LDU2LDU3LDU4LDY0LDY1LDY2LDEyNiwxMjddKTtmb3IobGV0IHQgb2YgdGhpcy5wcmVzZXRzKWlmKGZBLmlzWEdEcnVtcyh0LmJhbmtNU0IpJiYodGhpcy5faXNYR0Jhbms9ITAsIUEuaGFzKHQucHJvZ3JhbSkpKXt0aGlzLl9pc1hHQmFuaz0hMSxwKGAlY1RoaXMgYmFuayBpcyBub3QgdmFsaWQgWEcuIFByZXNldCAlYyR7dC50b1N0cmluZygpfSVjIGlzIG5vdCBhIHZhbGlkIFhHIGRydW0uIFhHIG1vZGUgd2lsbCB1c2UgcHJlc2V0cyBvbiBiYW5rIDEyOC5gLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyk7YnJlYWt9fXByaW50SW5mbygpe2ZvcihsZXRbQSx0XW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc291bmRCYW5rSW5mbykpe2lmKHR5cGVvZiB0PT0ib2JqZWN0IiYmIm1ham9yImluIHQpe2xldCBuPXQ7cChgJWMke0F9OiAlYyIke24ubWFqb3J9LiR7bi5taW5vcn0iYCxjLmluZm8sYy5yZWNvZ25pemVkKX1wKGAlYyR7QX06ICVjJHt0LnRvTG9jYWxlU3RyaW5nKCl9YCxjLmluZm8sYy5yZWNvZ25pemVkKX19fSxicj1jbGFzcyBleHRlbmRzIEZBe2NvbnN0cnVjdG9yKGUpe2xldCBBPWUuY3VycmVudEluZGV4LHQ9ZVtBKzFdPDw4fGVbQV0sbj1qbihlW0ErMl0sZVtBKzNdKTtlLmN1cnJlbnRJbmRleCs9NCxzdXBlcih0LG4sITEpfX07ZnVuY3Rpb24gTnMoZSl7bGV0IEE9W107Zm9yKDtlLmRhdGEubGVuZ3RoPmUuZGF0YS5jdXJyZW50SW5kZXg7KUEucHVzaChuZXcgYnIoZS5kYXRhKSk7cmV0dXJuIEEucG9wKCksQX12YXIgdnI9Y2xhc3MgZXh0ZW5kcyBDYXtjb25zdHJ1Y3RvcihlLEEsdCxuKXtsZXQgcz10LmZpbmQocj0+ci5nZW5lcmF0b3JUeXBlPT09aS5pbnN0cnVtZW50KSxhO2lmKHMpYT1uW3MuZ2VuZXJhdG9yVmFsdWVdO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJObyBpbnN0cnVtZW50IElEIGZvdW5kIGluIHByZXNldCB6b25lLiIpO2lmKCFhKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBpbnN0cnVtZW50IElEOiAke3MuZ2VuZXJhdG9yVmFsdWV9LCBhdmFpbGFibGUgaW5zdHJ1bWVudHM6ICR7bi5sZW5ndGh9YCk7c3VwZXIoZSxhKSx0aGlzLmFkZEdlbmVyYXRvcnMoLi4udCksdGhpcy5hZGRNb2R1bGF0b3JzKC4uLkEpfX07ZnVuY3Rpb24gTHIoZSxBLHQsbixzKXtsZXQgYT1lLmdlbixyPWUubW9kLEk9MCxvPTA7Zm9yKGxldCBnIG9mIHMpZm9yKGxldCBCPTA7QjxnLnpvbmVzQ291bnQ7QisrKXtsZXQgZD1hW28rK10saD1hW29dLEM9QS5zbGljZShkLGgpLFE9cltJKytdLG09cltJXSx5PXQuc2xpY2UoUSxtKTtDLmZpbmQoRj0+Ri5nZW5lcmF0b3JUeXBlPT09aS5pbnN0cnVtZW50KSE9PXZvaWQgMD9nLmNyZWF0ZVNvdW5kRm9udFpvbmUoeSxDLG4pOihnLmdsb2JhbFpvbmUuYWRkR2VuZXJhdG9ycyguLi5DKSxnLmdsb2JhbFpvbmUuYWRkTW9kdWxhdG9ycyguLi55KSl9fXZhciBOcj1jbGFzcyBleHRlbmRzIHBle3pvbmVTdGFydEluZGV4O3pvbmVzQ291bnQ9MDtjb25zdHJ1Y3RvcihlLEEpe3N1cGVyKEEpLHRoaXMubmFtZT1oQShlLmRhdGEsMjApLnJlcGxhY2UoL1xkezN9OlxkezN9LywiIiksdGhpcy5wcm9ncmFtPU4oZS5kYXRhLDIpO2xldCB0PU4oZS5kYXRhLDIpO3RoaXMuYmFua01TQj10JjEyNyx0aGlzLmlzR01HU0RydW09KHQmMTI4KT4wLHRoaXMuYmFua0xTQj10Pj44LHRoaXMuem9uZVN0YXJ0SW5kZXg9TihlLmRhdGEsMiksdGhpcy5saWJyYXJ5PU4oZS5kYXRhLDQpLHRoaXMuZ2VucmU9TihlLmRhdGEsNCksdGhpcy5tb3JwaG9sb2d5PU4oZS5kYXRhLDQpfWNyZWF0ZVNvdW5kRm9udFpvbmUoZSxBLHQpe2xldCBuPW5ldyB2cih0aGlzLGUsQSx0KTtyZXR1cm4gdGhpcy56b25lcy5wdXNoKG4pLG59fTtmdW5jdGlvbiBVcyhlLEEpe2xldCB0PVtdO2Zvcig7ZS5kYXRhLmxlbmd0aD5lLmRhdGEuY3VycmVudEluZGV4Oyl7bGV0IG49bmV3IE5yKGUsQSk7aWYodC5sZW5ndGg+MCl7bGV0IHM9dFt0Lmxlbmd0aC0xXTtzLnpvbmVzQ291bnQ9bi56b25lU3RhcnRJbmRleC1zLnpvbmVTdGFydEluZGV4fXQucHVzaChuKX1yZXR1cm4gdC5wb3AoKSx0fXZhciBVcj1jbGFzcyBleHRlbmRzIGhhe2NvbnN0cnVjdG9yKGUsQSx0LG4pe2xldCBzPXQuZmluZChyPT5yLmdlbmVyYXRvclR5cGU9PT1pLnNhbXBsZUlEKSxhO2lmKHMpYT1uW3MuZ2VuZXJhdG9yVmFsdWVdO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJObyBzYW1wbGUgSUQgZm91bmQgaW4gaW5zdHJ1bWVudCB6b25lLiIpO2lmKCFhKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzYW1wbGUgSUQ6ICR7cy5nZW5lcmF0b3JWYWx1ZX0sIGF2YWlsYWJsZSBzYW1wbGVzOiAke24ubGVuZ3RofWApO3N1cGVyKGUsYSksdGhpcy5hZGRHZW5lcmF0b3JzKC4uLnQpLHRoaXMuYWRkTW9kdWxhdG9ycyguLi5BKX19O2Z1bmN0aW9uIFRyKGUsQSx0LG4scyl7bGV0IGE9ZS5nZW4scj1lLm1vZCxJPTAsbz0wO2ZvcihsZXQgZyBvZiBzKWZvcihsZXQgQj0wO0I8Zy56b25lc0NvdW50O0IrKyl7bGV0IGQ9YVtvKytdLGg9YVtvXSxDPUEuc2xpY2UoZCxoKSxRPXJbSSsrXSxtPXJbSV0seT10LnNsaWNlKFEsbSk7Qy5maW5kKEY9PkYuZ2VuZXJhdG9yVHlwZT09PWkuc2FtcGxlSUQpP2cuY3JlYXRlU291bmRGb250Wm9uZSh5LEMsbik6KGcuZ2xvYmFsWm9uZS5hZGRHZW5lcmF0b3JzKC4uLkMpLGcuZ2xvYmFsWm9uZS5hZGRNb2R1bGF0b3JzKC4uLnkpKX19dmFyIHhyPWNsYXNzIGV4dGVuZHMgZHR7em9uZVN0YXJ0SW5kZXg7em9uZXNDb3VudD0wO2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5uYW1lPWhBKGUuZGF0YSwyMCksdGhpcy56b25lU3RhcnRJbmRleD1OKGUuZGF0YSwyKX1jcmVhdGVTb3VuZEZvbnRab25lKGUsQSx0KXtsZXQgbj1uZXcgVXIodGhpcyxlLEEsdCk7cmV0dXJuIHRoaXMuem9uZXMucHVzaChuKSxufX07ZnVuY3Rpb24gVHMoZSl7bGV0IEE9W107Zm9yKDtlLmRhdGEubGVuZ3RoPmUuZGF0YS5jdXJyZW50SW5kZXg7KXtsZXQgdD1uZXcgeHIoZSk7aWYoQS5sZW5ndGg+MCl7bGV0IG49QVtBLmxlbmd0aC0xXTtuLnpvbmVzQ291bnQ9dC56b25lU3RhcnRJbmRleC1uLnpvbmVTdGFydEluZGV4fUEucHVzaCh0KX1yZXR1cm4gQS5wb3AoKSxBfWZ1bmN0aW9uIEduKGUpe2xldCBBPVtdO2Zvcig7ZS5kYXRhLmxlbmd0aD5lLmRhdGEuY3VycmVudEluZGV4Oyl7bGV0IHQ9ZS5kYXRhLG49Tih0LDIpLHM9Tih0LDIpLGE9am4odFt0LmN1cnJlbnRJbmRleCsrXSx0W3QuY3VycmVudEluZGV4KytdKSxyPU4odCwyKSxJPU4odCwyKTtBLnB1c2gobmV3IHlBKG4scixzLGEsSSkpfXJldHVybiBBLnBvcCgpLEF9ZnVuY3Rpb24gYnQoZSl7bGV0IEE9W10sdD1bXTtmb3IoO2UuZGF0YS5sZW5ndGg+ZS5kYXRhLmN1cnJlbnRJbmRleDspdC5wdXNoKE4oZS5kYXRhLDIpKSxBLnB1c2goTihlLmRhdGEsMikpO3JldHVybnttb2Q6QSxnZW46dH19dmFyIEhyPWNsYXNzIGV4dGVuZHMgR2F7c2FtcGxlRGF0YVN0YXJ0SW5kZXg9MDtjb25zdHJ1Y3RvcihlLEE9ITApe2lmKHN1cGVyKCksQSl0aHJvdyBuZXcgRXJyb3IoIlVzaW5nIHRoZSBjb25zdHJ1Y3RvciBkaXJlY3RseSBpcyBkZXByZWNhdGVkLiBVc2UgU291bmRCYW5rTG9hZGVyLmZyb21BcnJheUJ1ZmZlcigpIGluc3RlYWQuIik7bGV0IHQ9bmV3IFkoZSk7T0EoIiVjUGFyc2luZyBhIFNvdW5kRm9udDIgZmlsZS4uLiIsYy5pbmZvKSx0fHwoWigpLHRoaXMucGFyc2luZ0Vycm9yKCJObyBkYXRhIHByb3ZpZGVkISIpKTtsZXQgbj1yQSh0LCExKTt0aGlzLnZlcmlmeUhlYWRlcihuLCJyaWZmIik7bGV0IHM9aEEodCw0KS50b0xvd2VyQ2FzZSgpO2lmKHMhPT0ic2ZiayImJnMhPT0ic2ZwayIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBzb3VuZEZvbnQhIEV4cGVjdGVkICJzZmJrIiBvciAic2ZwayIgZ290ICIke3N9ImApO2xldCBhPXM9PT0ic2ZwayIscj1yQSh0KTt0aGlzLnZlcmlmeUhlYWRlcihyLCJsaXN0Iik7bGV0IEk9aEEoci5kYXRhLDQpO2lmKEkhPT0iSU5GTyIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBzb3VuZEZvbnQhIEV4cGVjdGVkICJJTkZPIiBvciAiJHtJfSJgKTtsZXQgbztmb3IoO3IuZGF0YS5sZW5ndGg+ci5kYXRhLmN1cnJlbnRJbmRleDspe2xldCBQPXJBKHIuZGF0YSksRz1lZShQLmRhdGEsUC5kYXRhLmxlbmd0aCksYj1QLmhlYWRlcjtzd2l0Y2goYil7Y2FzZSJpZmlsIjpjYXNlIml2ZXIiOmxldCBLPU4oUC5kYXRhLDIpLGVBPU4oUC5kYXRhLDIpO2I9PT0iaWZpbCI/dGhpcy5zb3VuZEJhbmtJbmZvLnZlcnNpb249e21ham9yOkssbWlub3I6ZUF9OnRoaXMuc291bmRCYW5rSW5mby5yb21WZXJzaW9uPXttYWpvcjpLLG1pbm9yOmVBfTticmVhaztjYXNlIkRNT0QiOnt0aGlzLmRlZmF1bHRNb2R1bGF0b3JzPUduKFApLHRoaXMuY3VzdG9tRGVmYXVsdE1vZHVsYXRvcnM9ITA7YnJlYWt9Y2FzZSJMSVNUIjp7aEEoUC5kYXRhLDQpPT09InhkdGEiJiYocCgiJWNFeHRlbmRlZCBTRjIgZm91bmQhIixjLnJlY29nbml6ZWQpLG89UCk7YnJlYWt9Y2FzZSJJQ1JEIjp0aGlzLnNvdW5kQmFua0luZm8uY3JlYXRpb25EYXRlPXRzKGhBKFAuZGF0YSxQLmRhdGEubGVuZ3RoKSk7YnJlYWs7Y2FzZSJJU0ZUIjp0aGlzLnNvdW5kQmFua0luZm8uc29mdHdhcmU9RzticmVhaztjYXNlIklQUkQiOnRoaXMuc291bmRCYW5rSW5mby5wcm9kdWN0PUc7YnJlYWs7Y2FzZSJJRU5HIjp0aGlzLnNvdW5kQmFua0luZm8uZW5naW5lZXI9RzticmVhaztjYXNlIklDT1AiOnRoaXMuc291bmRCYW5rSW5mby5jb3B5cmlnaHQ9RzticmVhaztjYXNlIklOQU0iOnRoaXMuc291bmRCYW5rSW5mby5uYW1lPUc7YnJlYWs7Y2FzZSJJQ01UIjp0aGlzLnNvdW5kQmFua0luZm8uY29tbWVudD1HO2JyZWFrO2Nhc2UiaXJvbSI6dGhpcy5zb3VuZEJhbmtJbmZvLnJvbUluZm89RzticmVhaztjYXNlImlzbmciOnRoaXMuc291bmRCYW5rSW5mby5zb3VuZEVuZ2luZT1HfX10aGlzLnByaW50SW5mbygpO2xldCBnPXt9O28hPT12b2lkIDAmJihnLnBoZHI9ckEoby5kYXRhKSxnLnBiYWc9ckEoby5kYXRhKSxnLnBtb2Q9ckEoby5kYXRhKSxnLnBnZW49ckEoby5kYXRhKSxnLmluc3Q9ckEoby5kYXRhKSxnLmliYWc9ckEoby5kYXRhKSxnLmltb2Q9ckEoby5kYXRhKSxnLmlnZW49ckEoby5kYXRhKSxnLnNoZHI9ckEoby5kYXRhKSk7bGV0IEI9ckEodCwhMSk7dGhpcy52ZXJpZnlIZWFkZXIoQiwibGlzdCIpLHRoaXMudmVyaWZ5VGV4dChoQSh0LDQpLCJzZHRhIikscCgiJWNWZXJpZnlpbmcgc21wbCBjaHVuay4uLiIsYy53YXJuKTtsZXQgZD1yQSh0LCExKTt0aGlzLnZlcmlmeUhlYWRlcihkLCJzbXBsIik7bGV0IGg7aWYoYSl7cCgiJWNTRjJQYWNrIGRldGVjdGVkLCBhdHRlbXB0aW5nIHRvIGRlY29kZSB0aGUgc21wbCBjaHVuay4uLiIsYy5pbmZvKTt0cnl7aD1PdC5kZWNvZGUodC5idWZmZXIuc2xpY2UodC5jdXJyZW50SW5kZXgsdC5jdXJyZW50SW5kZXgrQi5zaXplLTEyKSkuZGF0YVswXX1jYXRjaChQKXt0aHJvdyBaKCksbmV3IEVycm9yKGBTRjJQYWNrIE9nZyBWb3JiaXMgZGVjb2RlIGVycm9yOiAke1B9YCl9cChgJWNEZWNvZGVkIHRoZSBzbXBsIGNodW5rISBMZW5ndGg6ICVjJHtoLmxlbmd0aH1gLGMuaW5mbyxjLnZhbHVlKX1lbHNlIGg9dCx0aGlzLnNhbXBsZURhdGFTdGFydEluZGV4PXQuY3VycmVudEluZGV4O3AoYCVjU2tpcHBpbmcgc2FtcGxlIGNodW5rLCBsZW5ndGg6ICVjJHtCLnNpemUtMTJ9YCxjLmluZm8sYy52YWx1ZSksdC5jdXJyZW50SW5kZXgrPUIuc2l6ZS0xMixwKCIlY0xvYWRpbmcgcHJlc2V0IGRhdGEgY2h1bmsuLi4iLGMud2Fybik7bGV0IEM9ckEodCk7dGhpcy52ZXJpZnlIZWFkZXIoQywibGlzdCIpLGhBKEMuZGF0YSw0KTtsZXQgUT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKFEsInBoZHIiKTtsZXQgbT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKG0sInBiYWciKTtsZXQgeT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKHksInBtb2QiKTtsZXQgRj1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEYsInBnZW4iKTtsZXQgaz1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKGssImluc3QiKTtsZXQgRD1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEQsImliYWciKTtsZXQgdj1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKHYsImltb2QiKTtsZXQgTD1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEwsImlnZW4iKTtsZXQgRT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEUsInNoZHIiKSxwKCIlY1BhcnNpbmcgc2FtcGxlcy4uLiIsYy5pbmZvKSx0LmN1cnJlbnRJbmRleD10aGlzLnNhbXBsZURhdGFTdGFydEluZGV4O2xldCBYPWJzKEUsaCxvPT09dm9pZCAwKTtpZihvJiZnLnNoZHIpe2xldCBQPWJzKGcuc2hkcixuZXcgRmxvYXQzMkFycmF5KDEpLCExKTtQLmxlbmd0aD09PVgubGVuZ3RoJiZYLmZvckVhY2goKEcsYik9PntHLm5hbWUrPVBbYl0ubmFtZSxHLmxpbmtlZFNhbXBsZUluZGV4fD1QW2JdLmxpbmtlZFNhbXBsZUluZGV4PDwxNn0pfVguZm9yRWFjaChQPT5QLm5hbWU9UC5uYW1lLnRyaW0oKSksdGhpcy5zYW1wbGVzLnB1c2goLi4uWCk7bGV0IE89TnMoTCksbkE9R24odiksJD1UcyhrKTtpZihvJiZnLmluc3Qpe2xldCBQPVRzKGcuaW5zdCk7UC5sZW5ndGg9PT0kLmxlbmd0aCYmKCQuZm9yRWFjaCgoRyxiKT0+e0cubmFtZSs9UFtiXS5uYW1lLEcuem9uZVN0YXJ0SW5kZXh8PVBbYl0uem9uZVN0YXJ0SW5kZXh9KSwkLmZvckVhY2goKEcsYik9PntiPCQubGVuZ3RoLTEmJihHLnpvbmVzQ291bnQ9JFtiKzFdLnpvbmVTdGFydEluZGV4LUcuem9uZVN0YXJ0SW5kZXgpfSkpfSQuZm9yRWFjaChQPT5QLm5hbWU9UC5uYW1lLnRyaW0oKSksdGhpcy5pbnN0cnVtZW50cy5wdXNoKC4uLiQpO2xldCBWPWJ0KEQpO2lmKG8mJmcuaWJhZyl7bGV0IFA9YnQoZy5pYmFnKTtmb3IobGV0IEc9MDtHPFYubW9kLmxlbmd0aDtHKyspVi5tb2RbR118PVAubW9kW0ddPDwxNjtmb3IobGV0IEc9MDtHPFYuZ2VuLmxlbmd0aDtHKyspVi5nZW5bR118PVAuZ2VuW0ddPDwxNn1UcihWLE8sbkEsdGhpcy5zYW1wbGVzLCQpO2xldCBxPU5zKEYpLHo9R24oeSksdEE9VXMoUSx0aGlzKTtpZihvJiZnLnBoZHIpe2xldCBQPVVzKGcucGhkcix0aGlzKTtQLmxlbmd0aD09PXRBLmxlbmd0aCYmKHRBLmZvckVhY2goKEcsYik9PntHLm5hbWUrPVBbYl0ubmFtZSxHLnpvbmVTdGFydEluZGV4fD1QW2JdLnpvbmVTdGFydEluZGV4fSksdEEuZm9yRWFjaCgoRyxiKT0+e2I8dEEubGVuZ3RoLTEmJihHLnpvbmVzQ291bnQ9dEFbYisxXS56b25lU3RhcnRJbmRleC1HLnpvbmVTdGFydEluZGV4KX0pKX10QS5mb3JFYWNoKFA9PlAubmFtZT09PVAubmFtZS50cmltKCkpLHRoaXMuYWRkUHJlc2V0cyguLi50QSk7bGV0IGlBPWJ0KG0pO2lmKG8mJmcucGJhZyl7bGV0IFA9YnQoZy5wYmFnKTtmb3IobGV0IEc9MDtHPGlBLm1vZC5sZW5ndGg7RysrKWlBLm1vZFtHXXw9UC5tb2RbR108PDE2O2ZvcihsZXQgRz0wO0c8aUEuZ2VuLmxlbmd0aDtHKyspaUEuZ2VuW0ddfD1QLmdlbltHXTw8MTZ9THIoaUEscSx6LHRoaXMuaW5zdHJ1bWVudHMsdEEpLHRoaXMuZmx1c2goKSxwKGAlY1BhcnNpbmcgZmluaXNoZWQhICVjIiR7dGhpcy5zb3VuZEJhbmtJbmZvLm5hbWV9IiVjIGhhcyAlYyR7dGhpcy5wcmVzZXRzLmxlbmd0aH0lYyBwcmVzZXRzLAogICAgICAgICVjJHt0aGlzLmluc3RydW1lbnRzLmxlbmd0aH0lYyBpbnN0cnVtZW50cyBhbmQgJWMke3RoaXMuc2FtcGxlcy5sZW5ndGh9JWMgc2FtcGxlcy5gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKSxaKCl9dmVyaWZ5SGVhZGVyKGUsQSl7ZS5oZWFkZXIudG9Mb3dlckNhc2UoKSE9PUEudG9Mb3dlckNhc2UoKSYmKFooKSx0aGlzLnBhcnNpbmdFcnJvcihgSW52YWxpZCBjaHVuayBoZWFkZXIhIEV4cGVjdGVkICIke0EudG9Mb3dlckNhc2UoKX0iIGdvdCAiJHtlLmhlYWRlci50b0xvd2VyQ2FzZSgpfSJgKSl9dmVyaWZ5VGV4dChlLEEpe2UudG9Mb3dlckNhc2UoKSE9PUEudG9Mb3dlckNhc2UoKSYmKFooKSx0aGlzLnBhcnNpbmdFcnJvcihgSW52YWxpZCBGb3VyQ0M6IEV4cGVjdGVkICIke0EudG9Mb3dlckNhc2UoKX0iIGdvdCAiJHtlLnRvTG93ZXJDYXNlKCl9IlxgYCkpfX0sdXQ9Y2xhc3N7c3RhdGljIGZyb21BcnJheUJ1ZmZlcihlKXtsZXQgQT1lLnNsaWNlKDgsMTIpLHQ9bmV3IFkoQSk7cmV0dXJuIGhBKHQsNCkudG9Mb3dlckNhc2UoKT09PSJkbHMgIj90aGlzLmxvYWRETFMoZSk6bmV3IEhyKGUsITEpfXN0YXRpYyBsb2FkRExTKGUpe3JldHVybiBGYS5yZWFkKGUpLnRvU0YoKX19LFJhPWNsYXNze3NvdW5kQmFua01hbmFnZXI9bmV3IFBvKHRoaXMudXBkYXRlUHJlc2V0TGlzdC5iaW5kKHRoaXMpKTttaWRpQ2hhbm5lbHM9W107a2V5TW9kaWZpZXJNYW5hZ2VyPW5ldyBBcjt0b3RhbFZvaWNlc0Ftb3VudD0wO3Byb2Nlc3NvckluaXRpYWxpemVkPU90LmlzSW5pdGlhbGl6ZWQ7Y3VycmVudFN5bnRoVGltZT0wO3NhbXBsZVJhdGU7ZW5hYmxlRWZmZWN0cz0hMDtlbmFibGVFdmVudFN5c3RlbTtvbkV2ZW50Q2FsbDtzeXN0ZW1FeGNsdXNpdmU9JG8uYmluZCh0aGlzKTtyZXNldEFsbENvbnRyb2xsZXJzPVNvLmJpbmQodGhpcyk7c2V0TWFzdGVyUGFyYW1ldGVyPXZvLmJpbmQodGhpcyk7Z2V0TWFzdGVyUGFyYW1ldGVyPUxvLmJpbmQodGhpcyk7Z2V0QWxsTWFzdGVyUGFyYW1ldGVycz1Oby5iaW5kKHRoaXMpO2dldFZvaWNlc0ZvclByZXNldD1fby5iaW5kKHRoaXMpO2tpbGxWb2ljZXM9Wm8uYmluZCh0aGlzKTtnZXRWb2ljZXM9am8uYmluZCh0aGlzKTtwcml2YXRlUHJvcHM7c2F2ZWRTbmFwc2hvdDtldmVudFF1ZXVlPVtdO3NhbXBsZVRpbWU7Y29uc3RydWN0b3IoZSxBPUZzKXtsZXQgdD0kbihBLEZzKTtpZih0aGlzLmVuYWJsZUVmZmVjdHM9dC5lbmFibGVFZmZlY3RzLHRoaXMuZW5hYmxlRXZlbnRTeXN0ZW09dC5lbmFibGVFdmVudFN5c3RlbSx0aGlzLmN1cnJlbnRTeW50aFRpbWU9dC5pbml0aWFsVGltZSx0aGlzLnNhbXBsZVJhdGU9ZSx0aGlzLnNhbXBsZVRpbWU9MS9lLGlzTmFOKHQuaW5pdGlhbFRpbWUpfHxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoIkluaXRpYWwgdGltZSBvciBzYW1wbGUgcmF0ZSBpcyBOYU4hIik7dGhpcy5wcml2YXRlUHJvcHM9bmV3IHRyKHRoaXMuY2FsbEV2ZW50LmJpbmQodGhpcyksdGhpcy5nZXRWb2ljZXMuYmluZCh0aGlzKSx0aGlzLmtpbGxWb2ljZXMuYmluZCh0aGlzKSxNbyooNDQxMDAvZSksSm8qKDQ0MTAwL2UpLFZvKig0NDEwMC9lKSk7Zm9yKGxldCBuPTA7bjxSbjtuKyspdGhpcy5jcmVhdGVNSURJQ2hhbm5lbEludGVybmFsKCExKTt0aGlzLnByb2Nlc3NvckluaXRpYWxpemVkLnRoZW4oKCk9PntwKCIlY1NwZXNzYVN5bnRoIGlzIHJlYWR5ISIsYy5yZWNvZ25pemVkKX0pfWFwcGx5U3ludGhlc2l6ZXJTbmFwc2hvdChlKXt0aGlzLnNhdmVkU25hcHNob3Q9ZSxlLmFwcGx5KHRoaXMpLHAoIiVjRmluaXNoZWQgYXBwbHlpbmcgc25hcHNob3QhIixjLmluZm8pLHRoaXMucmVzZXRBbGxDb250cm9sbGVycygpfWdldFNuYXBzaG90KCl7cmV0dXJuIHJzLmNyZWF0ZSh0aGlzKX1zZXRFbWJlZGRlZFNvdW5kQmFuayhlLEEpe2xldCB0PXV0LmZyb21BcnJheUJ1ZmZlcihlKTt0aGlzLnNvdW5kQmFua01hbmFnZXIuYWRkU291bmRCYW5rKHQsUnQsQSk7bGV0IG49dGhpcy5zb3VuZEJhbmtNYW5hZ2VyLnByaW9yaXR5T3JkZXI7bi5wb3AoKSxuLnVuc2hpZnQoUnQpLHRoaXMuc291bmRCYW5rTWFuYWdlci5wcmlvcml0eU9yZGVyPW4sdGhpcy5zYXZlZFNuYXBzaG90IT09dm9pZCAwJiZ0aGlzLmFwcGx5U3ludGhlc2l6ZXJTbmFwc2hvdCh0aGlzLnNhdmVkU25hcHNob3QpLHAoYCVjRW1iZWRkZWQgc291bmQgYmFuayBzZXQgYXQgb2Zmc2V0ICVjJHtBfWAsYy5yZWNvZ25pemVkLGMudmFsdWUpfWNsZWFyRW1iZWRkZWRCYW5rKCl7dGhpcy5zb3VuZEJhbmtNYW5hZ2VyLnNvdW5kQmFua0xpc3Quc29tZShlPT5lLmlkPT09UnQpJiZ0aGlzLnNvdW5kQmFua01hbmFnZXIuZGVsZXRlU291bmRCYW5rKFJ0KX1jcmVhdGVNSURJQ2hhbm5lbCgpe3RoaXMuY3JlYXRlTUlESUNoYW5uZWxJbnRlcm5hbCghMCl9c3RvcEFsbENoYW5uZWxzKGU9ITEpe3AoIiVjU3RvcCBhbGwgcmVjZWl2ZWQhIixjLmluZm8pO2ZvcihsZXQgQSBvZiB0aGlzLm1pZGlDaGFubmVscylBLnN0b3BBbGxOb3RlcyhlKX1yZW5kZXJBdWRpbyhlLEEsdCxuPTAscz0wKXt0aGlzLnJlbmRlckF1ZGlvU3BsaXQoQSx0LEFycmF5KDE2KS5maWxsKGUpLG4scyl9cmVuZGVyQXVkaW9TcGxpdChlLEEsdCxuPTAscz0wKXtsZXQgYT10aGlzLmN1cnJlbnRTeW50aFRpbWU7Zm9yKDt0aGlzLmV2ZW50UXVldWVbMF0/LnRpbWU8PWE7KXRoaXMuZXZlbnRRdWV1ZS5zaGlmdCgpPy5jYWxsYmFjaygpO2xldCByPWVbMF0sST1lWzFdLG89QVswXSxnPUFbMV07bj1NYXRoLm1heChuLDApO2xldCBCPXN8fHRbMF1bMF0ubGVuZ3RoLW47dGhpcy50b3RhbFZvaWNlc0Ftb3VudD0wLHRoaXMubWlkaUNoYW5uZWxzLmZvckVhY2goKGQsaCk9PntpZihkLnZvaWNlcy5sZW5ndGg8MXx8ZC5pc011dGVkKXJldHVybjtsZXQgQz1kLnZvaWNlcy5sZW5ndGgsUT1oJTE2O2QucmVuZGVyQXVkaW8odFtRXVswXSx0W1FdWzFdLHIsSSxvLGcsbixCKSx0aGlzLnRvdGFsVm9pY2VzQW1vdW50Kz1kLnZvaWNlcy5sZW5ndGgsZC52b2ljZXMubGVuZ3RoIT09QyYmZC5zZW5kQ2hhbm5lbFByb3BlcnR5KCl9KSx0aGlzLmN1cnJlbnRTeW50aFRpbWUrPUIqdGhpcy5zYW1wbGVUaW1lfWRlc3Ryb3lTeW50aFByb2Nlc3Nvcigpe3RoaXMubWlkaUNoYW5uZWxzLmZvckVhY2goZT0+e2Uudm9pY2VzLmxlbmd0aD0wLGUuc3VzdGFpbmVkVm9pY2VzLmxlbmd0aD0wLGUubG9ja2VkQ29udHJvbGxlcnM9W10sZS5wcmVzZXQ9dm9pZCAwfSksdGhpcy5jbGVhckNhY2hlKCksdGhpcy5taWRpQ2hhbm5lbHMubGVuZ3RoPTAsdGhpcy5zb3VuZEJhbmtNYW5hZ2VyLmRlc3Ryb3koKX1jb250cm9sbGVyQ2hhbmdlKGUsQSx0KXt0aGlzLm1pZGlDaGFubmVsc1tlXS5jb250cm9sbGVyQ2hhbmdlKEEsdCl9bm90ZU9uKGUsQSx0KXt0aGlzLm1pZGlDaGFubmVsc1tlXS5ub3RlT24oQSx0KX1ub3RlT2ZmKGUsQSl7dGhpcy5taWRpQ2hhbm5lbHNbZV0ubm90ZU9mZihBKX1wb2x5UHJlc3N1cmUoZSxBLHQpe3RoaXMubWlkaUNoYW5uZWxzW2VdLnBvbHlQcmVzc3VyZShBLHQpfWNoYW5uZWxQcmVzc3VyZShlLEEpe3RoaXMubWlkaUNoYW5uZWxzW2VdLmNoYW5uZWxQcmVzc3VyZShBKX1waXRjaFdoZWVsKGUsQSl7dGhpcy5taWRpQ2hhbm5lbHNbZV0ucGl0Y2hXaGVlbChBKX1wcm9ncmFtQ2hhbmdlKGUsQSl7dGhpcy5taWRpQ2hhbm5lbHNbZV0ucHJvZ3JhbUNoYW5nZShBKX1wcm9jZXNzTWVzc2FnZShlLEE9MCx0PSExLG49WmEpe2xldCBzPSgpPT57bGV0IHI9QXMoZVswXSksST1yLmNoYW5uZWwrQTtzd2l0Y2goci5zdGF0dXMpe2Nhc2UgTS5ub3RlT246e2xldCBvPWVbMl07bz4wP3RoaXMubm90ZU9uKEksZVsxXSxvKTp0aGlzLm5vdGVPZmYoSSxlWzFdKTticmVha31jYXNlIE0ubm90ZU9mZjp0P3RoaXMubWlkaUNoYW5uZWxzW0ldLmtpbGxOb3RlKGVbMV0pOnRoaXMubm90ZU9mZihJLGVbMV0pO2JyZWFrO2Nhc2UgTS5waXRjaFdoZWVsOnRoaXMucGl0Y2hXaGVlbChJLGVbMl08PDd8ZVsxXSk7YnJlYWs7Y2FzZSBNLmNvbnRyb2xsZXJDaGFuZ2U6dGhpcy5jb250cm9sbGVyQ2hhbmdlKEksZVsxXSxlWzJdKTticmVhaztjYXNlIE0ucHJvZ3JhbUNoYW5nZTp0aGlzLnByb2dyYW1DaGFuZ2UoSSxlWzFdKTticmVhaztjYXNlIE0ucG9seVByZXNzdXJlOnRoaXMucG9seVByZXNzdXJlKEksZVswXSxlWzFdKTticmVhaztjYXNlIE0uY2hhbm5lbFByZXNzdXJlOnRoaXMuY2hhbm5lbFByZXNzdXJlKEksZVsxXSk7YnJlYWs7Y2FzZSBNLnN5c3RlbUV4Y2x1c2l2ZTp0aGlzLnN5c3RlbUV4Y2x1c2l2ZShuZXcgWShlLnNsaWNlKDEpKSxBKTticmVhaztjYXNlIE0ucmVzZXQ6dGhpcy5zdG9wQWxsQ2hhbm5lbHMoITApLHRoaXMucmVzZXRBbGxDb250cm9sbGVycygpO2JyZWFrO2RlZmF1bHQ6YnJlYWt9fSxhPW4udGltZTthPnRoaXMuY3VycmVudFN5bnRoVGltZT8odGhpcy5ldmVudFF1ZXVlLnB1c2goe2NhbGxiYWNrOnMuYmluZCh0aGlzKSx0aW1lOmF9KSx0aGlzLmV2ZW50UXVldWUuc29ydCgocixJKT0+ci50aW1lLUkudGltZSkpOnMoKX1jbGVhckNhY2hlKCl7dGhpcy5wcml2YXRlUHJvcHMuY2FjaGVkVm9pY2VzPVtdfXNldE1JRElWb2x1bWUoZSl7dGhpcy5wcml2YXRlUHJvcHMubWlkaVZvbHVtZT1NYXRoLnBvdyhlLE1hdGguRSl9c2V0TWFzdGVyVHVuaW5nKGUpe2U9TWF0aC5yb3VuZChlKTtmb3IobGV0IEEgb2YgdGhpcy5taWRpQ2hhbm5lbHMpQS5zZXRDdXN0b21Db250cm9sbGVyKElBLm1hc3RlclR1bmluZyxlKX1jYWxsRXZlbnQoZSxBKXt0aGlzLm9uRXZlbnRDYWxsPy4oe3R5cGU6ZSxkYXRhOkF9KX1nZXRDYWNoZWRWb2ljZShlLEEsdCl7bGV0IG49ZS5iYW5rTVNCLHM9ZS5iYW5rTFNCLHtpc0dNR1NEcnVtOmEscHJvZ3JhbTpyfT1lO3JldHVybiBhJiYobj0xMjgscz0wKSx0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXM/LltuXT8uW3NdPy5bcl0/LltBXT8uW3RdfXNldENhY2hlZFZvaWNlKGUsQSx0LG4pe2xldCBzPWUuYmFua01TQixhPWUuYmFua0xTQix7aXNHTUdTRHJ1bTpyLHByb2dyYW06SX09ZTtyJiYocz0xMjgsYT0wKSx0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc118fCh0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc109W10pLHRoaXMucHJpdmF0ZVByb3BzLmNhY2hlZFZvaWNlc1tzXVthXXx8KHRoaXMucHJpdmF0ZVByb3BzLmNhY2hlZFZvaWNlc1tzXVthXT1bXSksdGhpcy5wcml2YXRlUHJvcHMuY2FjaGVkVm9pY2VzW3NdW2FdW0ldfHwodGhpcy5wcml2YXRlUHJvcHMuY2FjaGVkVm9pY2VzW3NdW2FdW0ldPVtdKSx0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc11bYV1bSV1bQV18fCh0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc11bYV1bSV1bQV09W10pLHRoaXMucHJpdmF0ZVByb3BzLmNhY2hlZFZvaWNlc1tzXVthXVtJXVtBXVt0XT1ufWNyZWF0ZU1JRElDaGFubmVsSW50ZXJuYWwoZSl7bGV0IEE9bmV3IFFyKHRoaXMsdGhpcy5wcml2YXRlUHJvcHMsdGhpcy5wcml2YXRlUHJvcHMuZGVmYXVsdFByZXNldCx0aGlzLm1pZGlDaGFubmVscy5sZW5ndGgpO3RoaXMubWlkaUNoYW5uZWxzLnB1c2goQSksZSYmKHRoaXMuY2FsbEV2ZW50KCJuZXdDaGFubmVsIix2b2lkIDApLEEuc2VuZENoYW5uZWxQcm9wZXJ0eSgpLHRoaXMubWlkaUNoYW5uZWxzW3RoaXMubWlkaUNoYW5uZWxzLmxlbmd0aC0xXS5zZXREcnVtcyghMCkpfXVwZGF0ZVByZXNldExpc3QoKXtsZXQgZT10aGlzLnNvdW5kQmFua01hbmFnZXIucHJlc2V0TGlzdDt0aGlzLmNsZWFyQ2FjaGUoKSx0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoInByZXNldExpc3RDaGFuZ2UiLGUpLHRoaXMuZ2V0RGVmYXVsdFByZXNldHMoKSx0aGlzLm1pZGlDaGFubmVscy5mb3JFYWNoKEE9PntBLnNldFByZXNldExvY2soITEpfSksdGhpcy5yZXNldEFsbENvbnRyb2xsZXJzKCExKX1nZXREZWZhdWx0UHJlc2V0cygpe3RoaXMucHJpdmF0ZVByb3BzLmRlZmF1bHRQcmVzZXQ9dGhpcy5zb3VuZEJhbmtNYW5hZ2VyLmdldFByZXNldCh7YmFua0xTQjowLGJhbmtNU0I6MCxwcm9ncmFtOjAsaXNHTUdTRHJ1bTohMX0sInhnIiksdGhpcy5wcml2YXRlUHJvcHMuZHJ1bVByZXNldD10aGlzLnNvdW5kQmFua01hbmFnZXIuZ2V0UHJlc2V0KHtiYW5rTFNCOjAsYmFua01TQjowLHByb2dyYW06MCxpc0dNR1NEcnVtOiEwfSwiZ3MiKX19O3ZhciB6dD1FZS5jb25zb2xlQ29sb3JzO3ZhciBNYT0ic3Blc3Nhc3ludGgtd29ya2xldC1wcm9jZXNzb3IiO2Z1bmN0aW9uIGJhKGUsQSl7cmV0dXJuey4uLkEsLi4uZT8/e319fXZhciB2YT17c2tpcFRvRmlyc3ROb3RlT246ITAsaW5pdGlhbFBsYXliYWNrUmF0ZToxfTt2YXIgaXM9Y2xhc3MgZXh0ZW5kcyBLdHtldmVudHM9W107Y29uc3RydWN0b3IoQSl7c3VwZXIoKSxzdXBlci5jb3B5RnJvbShBKSx0aGlzLmV2ZW50cz1bXX19LFd0PWNsYXNzIGV4dGVuZHMgTGV7dHJhY2tzO2VtYmVkZGVkU291bmRCYW5rPXZvaWQgMDtlbWJlZGRlZFNvdW5kQmFua1NpemU7Y29uc3RydWN0b3IoQSl7c3VwZXIoKSxzdXBlci5jb3B5TWV0YWRhdGFGcm9tKEEpLHRoaXMudHJhY2tzPUEudHJhY2tzLm1hcCh0PT5uZXcgaXModCkpLHRoaXMuZW1iZWRkZWRTb3VuZEJhbmtTaXplPUE/LmVtYmVkZGVkU291bmRCYW5rPy5ieXRlTGVuZ3RofX07dmFyIF90PXtzaHVmZmxlT246MSxzaHVmZmxlT2ZmOjIsaW5kZXg6M307dmFyIGp0PWNsYXNze3N5bnRoZXNpemVyO3NlcXVlbmNlcjtwb3N0O2FsaXZlPSExO2NvbnN0cnVjdG9yKEEsdCxuKXt0aGlzLnN5bnRoZXNpemVyPW5ldyBSYShBLHQpLHRoaXMuc2VxdWVuY2VyPW5ldyBzYSh0aGlzLnN5bnRoZXNpemVyKSx0aGlzLnBvc3Q9bix0aGlzLnN5bnRoZXNpemVyLm9uRXZlbnRDYWxsPXM9Pnt0aGlzLnBvc3Qoe3R5cGU6ImV2ZW50Q2FsbCIsZGF0YTpzLGN1cnJlbnRUaW1lOnRoaXMuc3ludGhlc2l6ZXIuY3VycmVudFN5bnRoVGltZX0pfSx0aGlzLnNlcXVlbmNlci5vbkV2ZW50Q2FsbD1zPT57aWYocy50eXBlPT09InNvbmdMaXN0Q2hhbmdlIil7bGV0IHI9cy5kYXRhLm5ld1NvbmdMaXN0Lm1hcChJPT5uZXcgV3QoSSkpO3RoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnt0eXBlOnMudHlwZSxkYXRhOntuZXdTb25nTGlzdDpyfX0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSk7cmV0dXJufXRoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnMsY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9fXBvc3RSZWFkeShBLHQsbj1bXSl7dGhpcy5wb3N0KHt0eXBlOiJpc0Z1bGx5SW5pdGlhbGl6ZWQiLGRhdGE6e3R5cGU6QSxkYXRhOnR9LGN1cnJlbnRUaW1lOnRoaXMuc3ludGhlc2l6ZXIuY3VycmVudFN5bnRoVGltZX0sbil9cG9zdFByb2dyZXNzKEEsdCl7dGhpcy5wb3N0KHt0eXBlOiJyZW5kZXJpbmdQcm9ncmVzcyIsZGF0YTp7dHlwZTpBLGRhdGE6dH0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9ZGVzdHJveSgpe3RoaXMuc3ludGhlc2l6ZXIuZGVzdHJveVN5bnRoUHJvY2Vzc29yKCksZGVsZXRlIHRoaXMuc3ludGhlc2l6ZXIsZGVsZXRlIHRoaXMuc2VxdWVuY2VyfWhhbmRsZU1lc3NhZ2UoQSl7bGV0IHQ9QS5jaGFubmVsTnVtYmVyLG47aWYodD49MCYmKG49dGhpcy5zeW50aGVzaXplci5taWRpQ2hhbm5lbHNbdF0sbj09PXZvaWQgMCkpe0VlLlNwZXNzYVN5bnRoV2FybihgVHJ5aW5nIHRvIGFjY2VzcyBjaGFubmVsICR7dH0gd2hpY2ggZG9lcyBub3QgZXhpc3QuLi4gaWdub3JpbmchYCk7cmV0dXJufXN3aXRjaChBLnR5cGUpe2Nhc2UibWlkaU1lc3NhZ2UiOnRoaXMuc3ludGhlc2l6ZXIucHJvY2Vzc01lc3NhZ2UoQS5kYXRhLm1lc3NhZ2VEYXRhLEEuZGF0YS5jaGFubmVsT2Zmc2V0LEEuZGF0YS5mb3JjZSxBLmRhdGEub3B0aW9ucyk7YnJlYWs7Y2FzZSJjdXN0b21DY0NoYW5nZSI6bj8uc2V0Q3VzdG9tQ29udHJvbGxlcihBLmRhdGEuY2NOdW1iZXIsQS5kYXRhLmNjVmFsdWUpO2JyZWFrO2Nhc2UiY2NSZXNldCI6dD09PUJlP3RoaXMuc3ludGhlc2l6ZXIucmVzZXRBbGxDb250cm9sbGVycygpOm4/LnJlc2V0Q29udHJvbGxlcnMoKTticmVhaztjYXNlInNldENoYW5uZWxWaWJyYXRvIjppZih0PT09QmUpZm9yKGxldCBzIG9mIHRoaXMuc3ludGhlc2l6ZXIubWlkaUNoYW5uZWxzKUEuZGF0YS5yYXRlPT09QmU/cy5kaXNhYmxlQW5kTG9ja0dTTlJQTigpOnMuc2V0VmlicmF0byhBLmRhdGEuZGVwdGgsQS5kYXRhLnJhdGUsQS5kYXRhLmRlbGF5KTtlbHNlIEEuZGF0YS5yYXRlPT09QmU/bj8uZGlzYWJsZUFuZExvY2tHU05SUE4oKTpuPy5zZXRWaWJyYXRvKEEuZGF0YS5kZXB0aCxBLmRhdGEucmF0ZSxBLmRhdGEuZGVsYXkpO2JyZWFrO2Nhc2Uic3RvcEFsbCI6dD09PUJlP3RoaXMuc3ludGhlc2l6ZXIuc3RvcEFsbENoYW5uZWxzKEEuZGF0YT09PTEpOm4/LnN0b3BBbGxOb3RlcyhBLmRhdGE9PT0xKTticmVhaztjYXNlImtpbGxOb3RlcyI6dGhpcy5zeW50aGVzaXplci5raWxsVm9pY2VzKEEuZGF0YSk7YnJlYWs7Y2FzZSJtdXRlQ2hhbm5lbCI6bj8ubXV0ZUNoYW5uZWwoQS5kYXRhKTticmVhaztjYXNlImFkZE5ld0NoYW5uZWwiOnRoaXMuc3ludGhlc2l6ZXIuY3JlYXRlTUlESUNoYW5uZWwoKTticmVhaztjYXNlInNldE1hc3RlclBhcmFtZXRlciI6dGhpcy5zeW50aGVzaXplci5zZXRNYXN0ZXJQYXJhbWV0ZXIoQS5kYXRhLnR5cGUsQS5kYXRhLmRhdGEpO2JyZWFrO2Nhc2Uic2V0RHJ1bXMiOm4/LnNldERydW1zKEEuZGF0YSk7YnJlYWs7Y2FzZSJ0cmFuc3Bvc2VDaGFubmVsIjpuPy50cmFuc3Bvc2VDaGFubmVsKEEuZGF0YS5zZW1pdG9uZXMsQS5kYXRhLmZvcmNlKTticmVhaztjYXNlImxvY2tDb250cm9sbGVyIjppZihBLmRhdGEuY29udHJvbGxlck51bWJlcj09PUJlKW4/LnNldFByZXNldExvY2soQS5kYXRhLmlzTG9ja2VkKTtlbHNle2lmKCFuKXJldHVybjtuLmxvY2tlZENvbnRyb2xsZXJzW0EuZGF0YS5jb250cm9sbGVyTnVtYmVyXT1BLmRhdGEuaXNMb2NrZWR9YnJlYWs7Y2FzZSJzZXF1ZW5jZXJTcGVjaWZpYyI6e2lmKCF0aGlzLnNlcXVlbmNlcilyZXR1cm47bGV0IHM9dGhpcy5zZXF1ZW5jZXIsYT1BLmRhdGE7c3dpdGNoKGEudHlwZSl7ZGVmYXVsdDpicmVhaztjYXNlImxvYWROZXdTb25nTGlzdCI6dHJ5e2xldCBJPWEuZGF0YS5tYXAobz0+ImR1cmF0aW9uImluIG8/TGUuY29weUZyb20obyk6TGUuZnJvbUFycmF5QnVmZmVyKG8uYmluYXJ5LG8uZmlsZU5hbWUpKTtzLmxvYWROZXdTb25nTGlzdChJKX1jYXRjaChyKXtjb25zb2xlLmVycm9yKHIpLHRoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnt0eXBlOiJtaWRpRXJyb3IiLGRhdGE6cn0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9YnJlYWs7Y2FzZSJwYXVzZSI6cy5wYXVzZSgpO2JyZWFrO2Nhc2UicGxheSI6cy5wbGF5KCk7YnJlYWs7Y2FzZSJzZXRUaW1lIjpzLmN1cnJlbnRUaW1lPWEuZGF0YTticmVhaztjYXNlImNoYW5nZU1JRElNZXNzYWdlU2VuZGluZyI6cy5leHRlcm5hbE1JRElQbGF5YmFjaz1hLmRhdGE7YnJlYWs7Y2FzZSJzZXRQbGF5YmFja1JhdGUiOnMucGxheWJhY2tSYXRlPWEuZGF0YTticmVhaztjYXNlInNldExvb3BDb3VudCI6cy5sb29wQ291bnQ9YS5kYXRhO2JyZWFrO2Nhc2UiY2hhbmdlU29uZyI6c3dpdGNoKGEuZGF0YS5jaGFuZ2VUeXBlKXtjYXNlIF90LnNodWZmbGVPZmY6cy5zaHVmZmxlTW9kZT0hMTticmVhaztjYXNlIF90LnNodWZmbGVPbjpzLnNodWZmbGVNb2RlPSEwO2JyZWFrO2Nhc2UgX3QuaW5kZXg6YS5kYXRhLmRhdGEhPT12b2lkIDAmJihjb25zb2xlLmxvZygiSU5ERVgiLGEuZGF0YSkscy5zb25nSW5kZXg9YS5kYXRhLmRhdGEpO2JyZWFrfWJyZWFrO2Nhc2UiZ2V0TUlESSI6aWYoIXMubWlkaURhdGEpdGhyb3cgbmV3IEVycm9yKCJObyBNSURJIGlzIGxvYWRlZCEiKTt0aGlzLnBvc3Qoe3R5cGU6InNlcXVlbmNlclJldHVybiIsZGF0YTp7dHlwZToiZ2V0TUlESSIsZGF0YTpzLm1pZGlEYXRhfSxjdXJyZW50VGltZTp0aGlzLnN5bnRoZXNpemVyLmN1cnJlbnRTeW50aFRpbWV9KTticmVhaztjYXNlInNldFNraXBUb0ZpcnN0Tm90ZSI6cy5za2lwVG9GaXJzdE5vdGVPbj1hLmRhdGE7YnJlYWt9YnJlYWt9Y2FzZSJzb3VuZEJhbmtNYW5hZ2VyIjp0cnl7bGV0IHM9dGhpcy5zeW50aGVzaXplci5zb3VuZEJhbmtNYW5hZ2VyLGE9QS5kYXRhLHI7c3dpdGNoKGEudHlwZSl7Y2FzZSJhZGRTb3VuZEJhbmsiOnI9dXQuZnJvbUFycmF5QnVmZmVyKGEuZGF0YS5zb3VuZEJhbmtCdWZmZXIpLHMuYWRkU291bmRCYW5rKHIsYS5kYXRhLmlkLGEuZGF0YS5iYW5rT2Zmc2V0KSx0aGlzLnBvc3RSZWFkeSgic291bmRCYW5rTWFuYWdlciIsbnVsbCk7YnJlYWs7Y2FzZSJkZWxldGVTb3VuZEJhbmsiOnMuZGVsZXRlU291bmRCYW5rKGEuZGF0YSksdGhpcy5wb3N0UmVhZHkoInNvdW5kQmFua01hbmFnZXIiLG51bGwpO2JyZWFrO2Nhc2UicmVhcnJhbmdlU291bmRCYW5rcyI6cy5wcmlvcml0eU9yZGVyPWEuZGF0YSx0aGlzLnBvc3RSZWFkeSgic291bmRCYW5rTWFuYWdlciIsbnVsbCl9fWNhdGNoKHMpe3RoaXMucG9zdCh7dHlwZToic291bmRCYW5rRXJyb3IiLGRhdGE6cyxjdXJyZW50VGltZTp0aGlzLnN5bnRoZXNpemVyLmN1cnJlbnRTeW50aFRpbWV9KX1icmVhaztjYXNlImtleU1vZGlmaWVyTWFuYWdlciI6e2xldCBzPUEuZGF0YSxhPXRoaXMuc3ludGhlc2l6ZXIua2V5TW9kaWZpZXJNYW5hZ2VyO3N3aXRjaChzLnR5cGUpe2RlZmF1bHQ6cmV0dXJuO2Nhc2UiYWRkTWFwcGluZyI6YS5hZGRNYXBwaW5nKHMuZGF0YS5jaGFubmVsLHMuZGF0YS5taWRpTm90ZSxzLmRhdGEubWFwcGluZyk7YnJlYWs7Y2FzZSJjbGVhck1hcHBpbmdzIjphLmNsZWFyTWFwcGluZ3MoKTticmVhaztjYXNlImRlbGV0ZU1hcHBpbmciOmEuZGVsZXRlTWFwcGluZyhzLmRhdGEuY2hhbm5lbCxzLmRhdGEubWlkaU5vdGUpfWJyZWFrfWNhc2UicmVxdWVzdFN5bnRoZXNpemVyU25hcHNob3QiOntsZXQgcz1ycy5jcmVhdGUodGhpcy5zeW50aGVzaXplcik7dGhpcy5wb3N0UmVhZHkoInN5bnRoZXNpemVyU25hcHNob3QiLHMpO2JyZWFrfWNhc2Uic2V0TG9nTGV2ZWwiOktzKEEuZGF0YS5lbmFibGVJbmZvLEEuZGF0YS5lbmFibGVXYXJuaW5nLEEuZGF0YS5lbmFibGVHcm91cCk7YnJlYWs7Y2FzZSJkZXN0cm95V29ya2xldCI6dGhpcy5hbGl2ZT0hMSx0aGlzLnN5bnRoZXNpemVyLmRlc3Ryb3lTeW50aFByb2Nlc3NvcigpLHRoaXMuZGVzdHJveSgpO2JyZWFrO2RlZmF1bHQ6RWUuU3Blc3NhU3ludGhXYXJuKCJVbnJlY29nbml6ZWQgZXZlbnQhIixBKTticmVha319fTt2YXIgJHQ9Y2xhc3MgZXh0ZW5kcyBqdHthbGl2ZT0hMDtvbmVPdXRwdXRNb2RlO3BvcnQ7Y29uc3RydWN0b3IoQSx0LG4scyl7c3VwZXIoQSx7ZW5hYmxlRWZmZWN0czohcy5vbmVPdXRwdXQsZW5hYmxlRXZlbnRTeXN0ZW06cz8uZW5hYmxlRXZlbnRTeXN0ZW0saW5pdGlhbFRpbWU6dH0sKGEscik9PntuLnBvc3RNZXNzYWdlKGEscil9KSx0aGlzLnBvcnQ9bix0aGlzLm9uZU91dHB1dE1vZGU9cy5vbmVPdXRwdXQsdGhpcy5zeW50aGVzaXplci5wcm9jZXNzb3JJbml0aWFsaXplZC50aGVuKCgpPT57dGhpcy5wb3J0Lm9ubWVzc2FnZT1hPT50aGlzLmhhbmRsZU1lc3NhZ2UoYS5kYXRhKSx0aGlzLnBvc3RSZWFkeSgic2YzRGVjb2RlciIsbnVsbCl9KX1wcm9jZXNzKEEsdCl7aWYoIXRoaXMuYWxpdmUpcmV0dXJuITE7aWYodGhpcy5zZXF1ZW5jZXIucHJvY2Vzc1RpY2soKSx0aGlzLm9uZU91dHB1dE1vZGUpe2xldCBuPXRbMF0scz1bXTtmb3IobGV0IGE9MDthPDMyO2ErPTIpcy5wdXNoKFtuW2FdLG5bYSsxXV0pO3RoaXMuc3ludGhlc2l6ZXIucmVuZGVyQXVkaW9TcGxpdChbXSxbXSxzKX1lbHNlIHRoaXMuc3ludGhlc2l6ZXIucmVuZGVyQXVkaW9TcGxpdCh0WzBdLHRbMV0sdC5zbGljZSgyKSk7cmV0dXJuITB9aGFuZGxlTWVzc2FnZShBKXtpZihBLnR5cGU9PT0ic3RhcnRPZmZsaW5lUmVuZGVyIil7dGhpcy5zdGFydE9mZmxpbmVSZW5kZXIoQS5kYXRhKTtyZXR1cm59c3VwZXIuaGFuZGxlTWVzc2FnZShBKX1zdGFydE9mZmxpbmVSZW5kZXIoQSl7aWYoIXRoaXMuc2VxdWVuY2VyKXJldHVybjtBLnNvdW5kQmFua0xpc3QuZm9yRWFjaCgobixzKT0+e3RyeXt0aGlzLnN5bnRoZXNpemVyLnNvdW5kQmFua01hbmFnZXIuYWRkU291bmRCYW5rKHV0LmZyb21BcnJheUJ1ZmZlcihuLnNvdW5kQmFua0J1ZmZlciksYGJhbmstJHtzfWAsbi5iYW5rT2Zmc2V0KX1jYXRjaChhKXt0aGlzLnBvc3Qoe3R5cGU6InNvdW5kQmFua0Vycm9yIixkYXRhOmEsY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9fSksQS5zbmFwc2hvdCE9PXZvaWQgMCYmdGhpcy5zeW50aGVzaXplci5hcHBseVN5bnRoZXNpemVyU25hcHNob3QoQS5zbmFwc2hvdCksRWUuU3Blc3NhU3ludGhJbmZvKCIlY1JlbmRlcmluZyBlbmFibGVkISBTdGFydGluZyByZW5kZXIuIix6dC5pbmZvKSx0aGlzLnNlcXVlbmNlci5sb29wQ291bnQ9QS5sb29wQ291bnQsdGhpcy5zeW50aGVzaXplci5zZXRNYXN0ZXJQYXJhbWV0ZXIoInZvaWNlQ2FwIiwxLzApO2xldCB0PWJhKEEuc2VxdWVuY2VyT3B0aW9ucyx2YSk7dGhpcy5zZXF1ZW5jZXIuc2tpcFRvRmlyc3ROb3RlT249dC5za2lwVG9GaXJzdE5vdGVPbix0aGlzLnNlcXVlbmNlci5wbGF5YmFja1JhdGU9dC5pbml0aWFsUGxheWJhY2tSYXRlO3RyeXt0aGlzLnNlcXVlbmNlci5sb2FkTmV3U29uZ0xpc3QoW0xlLmNvcHlGcm9tKEEubWlkaVNlcXVlbmNlKV0pLHRoaXMuc2VxdWVuY2VyLnBsYXkoKX1jYXRjaChuKXtjb25zb2xlLmVycm9yKG4pLHRoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnt0eXBlOiJtaWRpRXJyb3IiLGRhdGE6bn0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9dGhpcy5wb3N0UmVhZHkoInN0YXJ0T2ZmbGluZVJlbmRlciIsbnVsbCl9fTt2YXIgSXM9Y2xhc3MgZXh0ZW5kcyBBdWRpb1dvcmtsZXRQcm9jZXNzb3J7cHJvY2Vzcztjb3JlO2NvbnN0cnVjdG9yKEEpe3N1cGVyKCksdGhpcy5jb3JlPW5ldyAkdChzYW1wbGVSYXRlLGN1cnJlbnRUaW1lLHRoaXMucG9ydCxBLnByb2Nlc3Nvck9wdGlvbnMpLHRoaXMucHJvY2Vzcz10aGlzLmNvcmUucHJvY2Vzcy5iaW5kKHRoaXMuY29yZSl9fTtyZWdpc3RlclByb2Nlc3NvcihNYSxJcyk7RWUuU3Blc3NhU3ludGhJbmZvKCIlY1Byb2Nlc3NvciBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCEiLHp0LnJlY29nbml6ZWQpOwovLyMgc291cmNlTWFwcGluZ1VSTD1zcGVzc2FzeW50aF9wcm9jZXNzb3IubWluLmpzLm1hcAo=";class vn extends Ol{constructor(t,l={}){super(t,l),this.synthesizer=null,this.soundfont=null,this.channelCounter=0,this.partToMidiChannel=new Map,this.midiChannelToPart=new Map,this.individualOutputs=[],this.metronomeAnalyser=null}async initialize(t){this._emitProgress("importing","Loading SpessaSynth library...");const{WorkletSynthesizer:l}=await Promise.resolve().then(()=>_Q);let e;if(typeof t=="string")this._emitProgress("loading-soundfont","Downloading soundfont..."),e=await this._loadSoundfontWithProgress(t);else if(t instanceof ArrayBuffer)this._emitProgress("loading-soundfont","Soundfont provided"),e=t;else throw new Error("Invalid soundfont data type. Expected string path or ArrayBuffer.");this._emitProgress("loading-worklet","Loading audio worklet processor..."),await this._loadAudioWorkletSafely(),console.log("AudioWorklet loaded. Note: Worklet processor may persist across page reloads."),this._emitProgress("creating-synth","Setting up audio channels..."),this._setupIndividualOutputs(),this.dummyTarget=this.audioContext.createGain(),await new Promise(n=>setTimeout(n,50)),this._emitProgress("creating-synth","Initializing synthesizer..."),this.synthesizer=new l(this.audioContext),this._emitProgress("loading-soundbank","Loading soundbank into synthesizer..."),await this.synthesizer.soundBankManager.addSoundBank(e,"main"),await this.synthesizer.isReady,this._emitProgress("finalizing","Finalizing audio setup..."),this._connectIndividualOutputs(),this._initializeMetronomeChannel(),this._emitProgress("ready","Audio engine ready"),this.isInitialized=!0}createChannel(t,l={}){if(this._validateInitialized(),this.partToMidiChannel.has(t))throw new Error(`Channel for part '${t}' already exists`);const e=this.channelCounter;if(e>=15)throw new Error("Maximum number of musical part channels (15) exceeded. Channel 15 is reserved for metronome.");this.channelCounter++,this.partToMidiChannel.set(t,e),this.midiChannelToPart.set(e,t);const n=new Mn(this,t,e,l);return this._registerChannel(n),l.instrument&&n.setInstrument(l.instrument),n}allSoundsOff(){if(this.synthesizer){for(let t=0;t<16;t++)this.synthesizer.controllerChange&&(this.synthesizer.controllerChange(t,120,0),this.synthesizer.controllerChange(t,123,0),this.synthesizer.controllerChange(t,121,0));console.log("Sent comprehensive reset to all 16 MIDI channels")}}clearAllChannels(){this.allSoundsOff(),this.partToMidiChannel.clear(),this.midiChannelToPart.clear(),this.channelCounter=0}destroy(){this.allSoundsOff(),this.synthesizer&&typeof this.synthesizer.disconnect=="function"&&this.synthesizer.disconnect(),this.individualOutputs.forEach(t=>{t&&t.disconnect&&t.disconnect()}),this.individualOutputs=[],this.dummyTarget&&(this.dummyTarget.disconnect(),this.dummyTarget=null),this.partToMidiChannel.clear(),this.midiChannelToPart.clear(),this.channelCounter=0,super.destroy(),this.synthesizer=null,this.soundfont=null}getMidiChannelForPart(t){return this.partToMidiChannel.has(t)?this.partToMidiChannel.get(t):null}_getSynthesizer(){return this.synthesizer}_getIndividualOutput(t){return t>=0&&t<this.individualOutputs.length?this.individualOutputs[t]:null}getMetronomeChannel(){const t=this._getIndividualOutput(15);return console.log("Metronome channel 15 output:",t?"Available":"NULL",`(total outputs: ${this.individualOutputs.length})`),t}_setupIndividualOutputs(){this.individualOutputs=[];for(let t=0;t<16;t++){const l=this.audioContext.createGain();l.gain.value=1,this.individualOutputs.push(l)}this._setupMetronomeAnalyser()}_setupMetronomeAnalyser(){const t=this.individualOutputs[15];if(!t){console.warn("Cannot setup metronome analyser: channel 15 not available");return}this.metronomeAnalyser=this.audioContext.createAnalyser(),this.metronomeAnalyser.fftSize=2048,this.metronomeAnalyser.smoothingTimeConstant=0,t.connect(this.metronomeAnalyser),console.log("Metronome analyser initialized for latency measurement")}_connectIndividualOutputs(){try{this.synthesizer&&this.synthesizer.connectIndividualOutputs?this.synthesizer.connectIndividualOutputs(this.individualOutputs):(console.warn("Synthesizer does not support individual outputs, using master output only"),this.synthesizer&&this.synthesizer.connect&&this.audioContext.destination&&this.synthesizer.connect(this.audioContext.destination))}catch(t){console.warn("Failed to connect individual outputs:",t.message),console.warn("Falling back to master output routing")}}async _loadSoundfontWithProgress(t){const l=await fetch(t);if(!l.ok)throw new Error(`Failed to load soundfont: ${l.status} ${l.statusText}`);const e=l.headers.get("content-length"),n=e?parseInt(e,10):null;if(!n||!l.body)return await l.arrayBuffer();const Q=l.body.getReader();let A=0;const s=[];for(;;){const{done:U,value:B}=await Q.read();if(U)break;s.push(B),A+=B.length;const m=A/n,h=Math.round(m*100);this._emitProgress("loading-soundfont",`Downloading soundfont: ${h}% (${Math.round(A/1024)} KB / ${Math.round(n/1024)} KB)`,m)}const d=new Uint8Array(A);let i=0;for(const U of s)d.set(U,i),i+=U.length;return d.buffer}async _loadAudioWorkletSafely(){for(let t=1;t<=5;t++)try{await this.audioContext.audioWorklet.addModule(xn);return}catch(l){if(console.warn(`AudioWorklet loading failed (attempt ${t}/5):`,l.message),t===5)throw new Error(`AudioWorklet failed after 5 attempts: ${l.message}`);const e=t*500;await new Promise(n=>setTimeout(n,e))}}_initializeMetronomeChannel(){try{const t=this._getSynthesizer();if(!t){console.warn("Cannot initialize metronome channel: synthesizer not available");return}const l=15;t.programChange&&(t.programChange(l,115),console.log("Metronome channel 15 initialized with woodblock instrument (115)")),t.controllerChange&&t.controllerChange(l,7,127)}catch(t){console.warn("Failed to initialize metronome channel:",t)}}async playMetronomeTick(t,l,e){try{const n=this.getMetronomeChannel(),Q=this._getSynthesizer();if(!n||!Q)return super.playMetronomeTick(t,l,e);const A=15,s=l?86:60,d=Math.round(Math.min(127,Math.max(0,e*(l?127:100)))),i=this.audioContext.currentTime,U=Math.max(t,i),B=U-i;Q.post?(Q.post({channelNumber:A,type:"midiMessage",data:{messageData:[144|A,s,d],channelOffset:0,force:!1,options:{time:U}}}),Q.post({channelNumber:A,type:"midiMessage",data:{messageData:[128|A,s,0],channelOffset:0,force:!1,options:{time:U+.1}}})):B<=.01?(Q.noteOn&&Q.noteOn(A,s,d),setTimeout(()=>{Q.noteOff&&Q.noteOff(A,s)},100)):setTimeout(()=>{Q.noteOn&&Q.noteOn(A,s,d),setTimeout(()=>{Q.noteOff&&Q.noteOff(A,s)},100)},B*1e3)}catch(n){return console.warn("MIDI metronome failed, falling back to buffers:",n),super.playMetronomeTick(t,l,e)}}getMetronomeOutput(){return!this.individualOutputs||this.individualOutputs.length<16?null:this.individualOutputs[15]}getMetronomeAnalyser(){return this.metronomeAnalyser}}class Dn extends _l{constructor(t,l,e={}){super(t,l,e),this.currentVolume=e.initialVolume||1,this.currentInstrument=0,this.outputGain=null,this.activeSources=new Map,this.synthMode="sample",this.tinySynthChannel=null,this._setupOutputNode(),e.instrument!==void 0&&this.setInstrument(e.instrument)}getOutputNode(){return this.outputGain}_actualNoteOn(t,l){this.synthMode==="sample"?this._playSampleNote(t,l):this._playTinySynthNote(t,l,!0)}_actualNoteOff(t){this.synthMode==="sample"?this._stopSampleNote(t):this._playTinySynthNote(t,0,!1)}_playSampleNote(t,l){const e=this.engine._getSamplesForInstrument(this.currentInstrument);if(!e){console.warn(`No samples available for instrument ${this.currentInstrument}`);return}const n=this.engine._midiNoteToName(t),Q=e.get(n);if(!Q){console.warn(`No sample found for note ${n} (pitch ${t})`);return}const A=this.engine.audioContext.createBufferSource();A.buffer=Q,A.loop=Q._shouldLoop||!1,A.loop&&(A.loopStart=.4,A.loopEnd=Q.duration);const s=this.engine.audioContext.createGain(),d=l/127;s.gain.value=d*this.currentVolume,A.connect(s),s.connect(this.outputGain),this.activeSources.has(t)||this.activeSources.set(t,new Set),this.activeSources.get(t).add(A),A.onended=()=>{s.disconnect();const i=this.activeSources.get(t);i&&(i.delete(A),i.size===0&&this.activeSources.delete(t))},A.start(0)}_stopSampleNote(t){const l=this.activeSources.get(t);l&&(l.forEach(e=>{try{if(e.loop)e.stop();else{const n=this.engine.audioContext.currentTime,Q=e._velocityGain;Q&&Q.gain.linearRampToValueAtTime(0,n+.05),e.stop(n+.05)}}catch{}}),l.clear(),this.activeSources.delete(t))}async _playTinySynthNote(t,l,e){const n=await this.engine._getTinySynth();if(this.tinySynthChannel===null){this.tinySynthChannel=this._allocateTinySynthChannel(),n.setProgram(this.tinySynthChannel,this.currentInstrument);const Q=Math.round(this.currentVolume*127);n.setChVol(this.tinySynthChannel,Q)}if(e){const Q=Math.round(l*this.currentVolume);n.noteOn(this.tinySynthChannel,t,Q)}else n.noteOff(this.tinySynthChannel,t)}_allocateTinySynthChannel(){const t=new Set;this.engine.activeChannels.forEach(l=>{l.tinySynthChannel!==null&&t.add(l.tinySynthChannel)});for(let l=0;l<16;l++)if(l!==9&&!t.has(l))return this.engine.tinySynthChannels.add(l),l;return console.warn("All TinySynth channels in use, reusing channel 0"),0}async setInstrument(t){this._validateActive();const l=da.getInstrumentProgram(t),e=this.currentInstrument;this.currentInstrument=l;const n=this.engine._getSamplesForInstrument(l),Q=this.synthMode;this.synthMode=n?"sample":"synth",Q!==this.synthMode&&this.allNotesOff(),this.synthMode==="synth"&&this.tinySynthChannel!==null&&(await this.engine._getTinySynth()).setProgram(this.tinySynthChannel,l),(e!==l||Q!==this.synthMode)&&console.log(`Channel ${this.partId}: Instrument ${t} (${l}) -> ${this.synthMode} mode`)}getInstrument(){return this.currentInstrument}setVolume(t){if(this._validateActive(),t=Math.max(0,Math.min(1,t)),this.currentVolume=t,this.outputGain&&(this.outputGain.gain.value=t),this.synthMode==="synth"&&this.tinySynthChannel!==null&&this.engine.tinySynth){const l=Math.round(t*127);this.engine.tinySynth.setChVol(this.tinySynthChannel,l)}}getVolume(){return this.currentVolume}allNotesOff(){this._validateActive(),this.scheduledEvents.forEach(t=>{clearTimeout(t)}),this.scheduledEvents.clear(),this.activeSources.forEach((t,l)=>{t.forEach(e=>{try{e.stop()}catch{}})}),this.activeSources.clear(),this.synthMode==="synth"&&this.tinySynthChannel!==null&&this.engine.tinySynth&&this.engine.tinySynth.allSoundOff(this.tinySynthChannel),this.noteRefCounts.clear(),this.activeNotes.clear()}destroy(){this.isDestroyed||(this.allNotesOff(),this.outputGain&&(this.outputGain.disconnect(),this.outputGain=null),this.tinySynthChannel!==null&&(this.engine.tinySynthChannels.delete(this.tinySynthChannel),this.tinySynthChannel=null)),super.destroy()}_setupOutputNode(){this.outputGain=this.engine._getChannelOutput(this.partId),this.outputGain||(console.warn(`No output gain node for channel ${this.partId}, creating fallback`),this.outputGain=this.engine.audioContext.createGain(),this.outputGain.gain.value=this.currentVolume)}}const Kn="/assets/samples/grand_piano.json",wn="/assets/samples/choir_aahs.json",fn="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",zn="//uUxAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAAMAAAQIAA0NDQ0NDQ0NE5OTk5OTk5OaWlpaWlpaWmAgICAgICAgICTk5OTk5OTk6qqqqqqqqqqu7u7u7u7u7u7zs7Ozs7Ozs7f39/f39/f3+/v7+/v7+/v7/n5+fn5+fn5//////////8AAABQTEFNRTMuMTAwBLkAAAAAAAAAABUgJAUHgQAB4AAAECAxW679AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//vUxAAACCABc/QAAASlsCq/NbBI//6YZkIUAAFLgQBA4oRqEAYLghE58ufUCCwQdg4cLg+fB8/KAMHwfPlAfB8Hwff/5cH3g+fy4Pg/+XPwQd/wQBD86Y8gkBAAEAAAAAAAAAgQrkCrEVHmoOI2GbVQgUVLGCAZk2giahgNUJfWEmZuCS6GQYHryLrek+YWAQUYGDJjZBcUZc/xZkxAJDiUv6cjCAkIBQcZEWkwrFnMRBNIDzDyqSPuYmdBd1NGE0AqpQKAGNiEXfAKhBiYOYGUjJkZ2AOyjaY0ImdI5lZETByCVvGepnGECLcW5goFEIwAAELA6QMjdpbgFAlHSELMYI6NhsXTlT0a85tNYaSysWCRGDNkX038MuQl7DiPSmsBRZZNyBo9HaWVW8U9F1wzIXGXk40RpLrPIy1qVQ1IHRXk7MxS3Pu14lTdsYzHOw7VlM7jjhVs6f7KYf65qepsuZYXYxJolGpbL5TLbNNSZXJm9p0M//iMsVQ7/6VK3d/rV2AgQAApEaRpCKTcVUUkVtqqLCJGtNg6y2jtwHDESSvk2Fw6N3+aXf7R0rLYHiC7AwuXLmKwOjqYF4Cw7uz6Q6jxc1eIrkEUD8+uLyva193XIM/kiYtbDp9tqTes/PzSb/uzzOWyZ2XrvWm1tmkXf87tJ/PepWrAEAoCaGjykkhihRd+7cjO7+xYQCJAAKmD4IYmMAkRJVGVgoqxsihA6IvC3dmL8QhTKbyvzcWEi1Yqn8Nxw+iSr5SxjlLdCXdF3Chq2GqmhH0HapSVXVjm0PmJjclY5ot8mZWeQo3Sli4Zr0gsEtIUA8FfWI9fP2eSDq6qlkGky9PhZFUT037KSvLeE8c2K8NvKfrAzDCxhsJ7mU9Vm07FWjX2tLxLQq2lvjQyS8yqG7DN9iqu/9xVUBAAABcGjNABl2BF8EOIWCATqRY08Bfh2GIJetn1bj8qt5zG4On8b9aPU0lrzLtNyztT9/lJVks/Wfh/luS1ajgshnKktaVD8Ujr7PfE//uUxMAAESEfTf2GAAKRL2l9h5o57CVDL1DUxE+16N/ZlErt0d6INCzx1MGSos2JUt3lWfLY5nki11ZSM6xtb3vTNd4HNv2PHg2roFE57bqRmzkX8dHGwUKEj00aazgk3DW3/7cM4oAXR8yqCLcwz1t2RCQUfk4mRuE/8tV2zdsVaBI3LojIxMcJgfx1zuK5vy3l1NN67gZjqF3iZF7JYhSpOY7UOy+nVNFM/VDGaZ3IQTIvjgSxHMbinYjE9ZWx6u2VOMivcV2m5bQIG9xSsb008hZkgymncftVx7hz2Rw/djtH3XsESkzENp/uY29u/2N17bvE/3K/tHpXvh6tn//6OHIgAAAnSNloBpAdRMhzluDPRIY5G1PMW1qMdGH+rLq+7w5m6FLCg7f7kP4nRnwIbPqAr3z+Sq5NEkz8M1GJBIpzMfL6qmwnkgnBnm8cgpbGf0JPSu4OYzZuJ8kmaNg2REliphhaQ1GNv2xwcoQkOczv23S5NOZDUaqY3db6//uUxN6Ak91LQ+wkfkpzLCi9h5o5m/kuQyJqdDKobXybFrBuLP2ZUVq8t3obzf/FeCNVgs9F5McOOmAhPUmiE0LFTZsTd5PPvG4KGI1mrDT7xZbWfMGWK4sTUXVfXEmoGG4/Fhsam3nSMA8mV7HQiZSPj/UNE4uFAsi3GeP1DyXqGEpWF9ZWiw5YU8jQAFwTqnZjplvvecwlhCe6n+RUtMErkJqWac+55tuWygx3UMW3XReqPwXZV9Xe79dshSru/e5HYRAAABdHqgdkdLIsIwNWlfDptNIBi+6q0GPS1prUB3I9agHNVpjZY08jLWAn1Asorb1qgRm6JMnkisbU6sVJq4W1twY2hvfs8NcqQqhiOYuKdEaS78/WFedz6osvG5yMR+1x1a1MS7ifEJpqpQcjeUGQTtd48omOqDGQuP7+W+/ZzzlFrinuP3j73Zr/3/Xz4twbleyOyTu97+/rSHBAVMZSQMqAREhdluKKDIZKPAQa1ZsklZOwFvo2yu1P//uExPYA0xEhQ+ek3gpHpCh5h5n5M3Sq5CW7uLj40BOOZlHgvYfxp9RZnadQwuTUnF0tRn7jhS1eMKQQpPHKcosSFtjMu3JRSxomIkDRDLB0OzxwwAodOIFFDal4zoQh9xUQmt+3kwqINMQcOmFtY7+L+VOxqzUXfKVevPvpcUdZVpKR8+Jz+1I63+/9eGEwAADLgoRDkhMWDZvH66VrO3JUGVutvizKB38fFVpreIUVGy2h3h0z9uKFp3Mb+0WDhss4HatoqOu3G0zFRib5GLbM4EzUb1TskJqa/CizSmo4hEQIFoQFyOZrGczw0Y/STG673ZA5IfmVs4UuaSBrTcMPTM5iII/zpKb87Xeu5rWv/e3zXn92LLiYIABexmOWmGikUwIJAXEntrwM7DKkoWFsYvj8rSD3LxcOnK/R+aLkEUGRdatbWULavvLikQcq//t0xP4Ak6FXP+y80cpiKig9l6H5RVFThop0KGGkgRGh0CwAgaDowc2nqVZRxQKRxRhDvXPCJvSS0iFI85U1+lmnNNOt64jha/7MFnFjRcq+x21mGoNV1UFWs2u22/6/aezV7f/+eINQQAVfQ5oBMXoZE9i7IPa2wZpK3YNo3Sau3kksskwNzLClcIIlSdXPtjjJs9fvMUkskrMlVE+LTnCpzv2cM2OTSJSc5krnXLMywyazLJWbtZ4au75+7aeX2/+V0/uPUdS3O7d3jWihOnC0MeKaZjXaLft85pbb57173f+RdIqAASvBmEzBisCQM0FZzTmvLujaergs8YNFZCuuDZU7bC5oKicRFULDSaTRghituw9ahmpIE5DIk7WX//uExOiAEUUhQ+w9D8okJqg9hiF54TxZEqxMmqScWJblwliNhGiYNkhnFX7qt/aV3QmB4ngkyP2J9ypCsWRXyTzPWkBEOA4NOnXKbKr//v+tpGDBAUwA1QSAmSX6dh3Y7Wd1MFnSVTktIT5eR2GaNxAOssKW4iaIeHsuOCCRKKpoeiZTh4IwJiKRuGZmN+SqOUCQKiQkB0VNy2S/hOW1yNtWtT62P82cfNovPjYvJh7JPib2kek0/dnfmv3jhJ6R8Zmu2/cyKfEsJxdbu9kXRmAAAHQCgrmAZQKJkLPGnRqBX+eVKpu7ZHFZkwNzB8QAFnRgqVhJEo/JTG25S3cnqScozDAZCYsOLEnOVaM4wPgPC4egqB9mDghpYcSeQNUT1sHvPvHN6ZdZsqKsMJjr7TI5kPTx1vMqs1+2guYHVnNUppvFrENscWYqzLu8qaRC//tkxPwAD61HQ+wkz8HdI+g9hI45gAS6BQcpTFqwRZcUONEHuQgyUG/n0dMLssFh8g8SJ3xCyjTdJpK1fVI3HZjM6E8txp3oGAVmqBw0RxkDt5cQjqEHKMJUcfF2nsvG0jYEEiouOG7m7ZtxJFy3M/9RpKEoh1KcZeu5KNpruysy8pVLBCdoB8kWLEx1S2IRvuMGXIlIoDf9gTxzs42MEdEBG0FoTpOcsJ2ixOihPbglHJnCSyBBEVZ/kKhKWIgNdcjGFkOeGrJlmBTJ5sqVsIT/4l38xIvAkm97OUV7x5gaenmUACAqQrC5xf1/3q3U//t0xO8AD70/Q+wkz+n5qGe9hKHtlsq7qqqakzcTDmwTWWuUEbDbnqtqtEb1afUxbmIMYiqi8bc8sJprNvdqi0NSyTUy69E7tmLYctB048TkJJITyTnV4QAxhEtzQ2/W/bYJkjw1HEgbf3//bfnnMIstHcz//1utqycFBToz9Zsftjy2ij/0z26l3mplGMDM1ACg5A6L2xqnxxw5cm2kNyX8RB+KTaK0JCBSwXpItftMy+crSfhDn98K0ycmFainmxRmnJnLsQDpfafL4c5MezncwxXVW41Vmu0smDHUckgSBwWtD42jqRW6CX3PyhmMACSVLELdkcLADC4/qy1L+Ht/uqLR8dHZVARYhQuMX3hx+zr2RRT6alzWRC7iBlCo//tkxPYADdkbO+elD2nQHud9pJn9TFUW552h+PSM431ETSTCJpbbra/leecUJ0D5UgCilASQAMP/CHi5OJhc5x5gGCe+N5bvM/sDJS+Vv8y3rfRYKi4jDSMS4i9KTEFNRTMuMTAwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tkxPIADij5M+wwzYmAm6X9hJmwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//s0xPaAClDTI6OxLwCwkeLoEJkoqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sUxNoDwAAB/gAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";class Hn extends Ol{constructor(t,l={}){super(t,l),this.pianoSamples=null,this.choirSamples=null,this.channelCounter=0,this.partToChannel=new Map,this.channelOutputs=new Map,this.tinySynth=null,this.tinySynthChannels=new Set}async initialize(t={}){this._emitProgress("loading-samples","Loading audio samples...");const l=t.pianoUrl||Kn,e=t.choirUrl||wn;this._emitProgress("loading-piano","Loading piano samples...",.1),this.pianoSamples=await this._loadSampleFile(l,!1),this._emitProgress("loading-choir","Loading choir samples...",.5),this.choirSamples=await this._loadSampleFile(e,!0),this._emitProgress("loading-metronome","Loading metronome sounds...",.9),await this._loadEmbeddedMetronomeSounds(),this._emitProgress("ready","Audio engine ready",1),this.isInitialized=!0}async _loadSampleFile(t,l){try{const e=await fetch(t);if(!e.ok)throw new Error(`Failed to load samples: ${e.status} ${e.statusText}`);const n=await e.json();if(!n||typeof n!="object")throw new Error("Invalid sample data format");const Q=new Map,A=Object.keys(n);for(let s=0;s<A.length;s++){const d=A[s],i=n[d],U=await this._decodeBase64Audio(i,l);Q.set(d,U);const B=(s+1)/A.length;this._emitProgress("loading-samples",`Loaded ${s+1}/${A.length} samples`,B)}return Q}catch(e){throw console.error("Failed to load sample file:",e),e}}async _decodeBase64Audio(t,l){const e=t.split(",")[1],n=atob(e),Q=new Uint8Array(n.length);for(let s=0;s<n.length;s++)Q[s]=n.charCodeAt(s);const A=await this.audioContext.decodeAudioData(Q.buffer);return A._shouldLoop=l,A}async _loadEmbeddedMetronomeSounds(){try{const t=atob(fn),l=new Uint8Array(t.length);for(let Q=0;Q<t.length;Q++)l[Q]=t.charCodeAt(Q);this.regularTickBuffer=await this.audioContext.decodeAudioData(l.buffer);const e=atob(zn),n=new Uint8Array(e.length);for(let Q=0;Q<e.length;Q++)n[Q]=e.charCodeAt(Q);this.accentTickBuffer=await this.audioContext.decodeAudioData(n.buffer)}catch(t){console.warn("Failed to load embedded metronome sounds:",t),this.regularTickBuffer=this.audioContext.createBuffer(2,1024,this.audioContext.sampleRate),this.accentTickBuffer=this.audioContext.createBuffer(2,1024,this.audioContext.sampleRate)}}_midiNoteToName(t){const l=["C","Db","D","Eb","E","F","Gb","G","Ab","A","Bb","B"],e=Math.floor(t/12)-1;return`${l[t%12]}${e}`}_getSamplesForInstrument(t){return t===0?this.pianoSamples:t>=52&&t<=54?this.choirSamples:null}createChannel(t,l={}){if(this._validateInitialized(),this.partToChannel.has(t))throw new Error(`Channel for part '${t}' already exists`);const e=this.audioContext.createGain();e.gain.value=l.initialVolume||1,this.channelOutputs.set(t,e);const n=new Dn(this,t,l);return this.partToChannel.set(t,{handle:n,outputGain:e,currentInstrument:l.instrument||0}),this._registerChannel(n),l.instrument!==void 0&&n.setInstrument(l.instrument),n}allSoundsOff(){if(this.activeChannels.forEach(t=>{t.allNotesOff&&t.allNotesOff()}),this.tinySynth)for(let t=0;t<16;t++)this.tinySynth.allSoundOff(t)}clearAllChannels(){this.allSoundsOff(),this.partToChannel.clear(),this.tinySynthChannels.clear(),this.channelCounter=0}_getChannelOutput(t){return this.channelOutputs.get(t)}async _getTinySynth(){if(!this.tinySynth){const{default:t}=await Promise.resolve().then(()=>as).then(l=>l.w);this.tinySynth=new t,this.tinySynthGain=this.audioContext.createGain(),this.tinySynthGain.gain.value=1,this.tinySynth.setAudioContext(this.audioContext,this.tinySynthGain),this.tinySynthGain.connect(this.audioContext.destination),console.log("WebAudioTinySynth initialized (fallback synthesis)")}return this.tinySynth}_getTinySynthOutput(){return this.tinySynthGain}getMetronomeAnalyser(){return!this._metronomeAnalyser&&this._metronomeOutput&&(this._metronomeAnalyser=this.audioContext.createAnalyser(),this._metronomeAnalyser.fftSize=2048,this._metronomeAnalyser.smoothingTimeConstant=0,this._metronomeOutput.connect(this._metronomeAnalyser)),this._metronomeAnalyser||null}destroy(){this.allSoundsOff(),this.channelOutputs.forEach(t=>{t.disconnect()}),this.channelOutputs.clear(),this.tinySynthGain&&this.tinySynthGain.disconnect(),this.tinySynth=null,this.tinySynthGain=null,this._metronomeAnalyser&&(this._metronomeAnalyser.disconnect(),this._metronomeAnalyser=null),this.partToChannel.clear(),this.tinySynthChannels.clear(),super.destroy(),this.pianoSamples=null,this.choirSamples=null}}class qn{constructor(){this.partNames=["soprano","alto","tenor","bass","treble","mezzo","baritone","s","a","t","b","satb"],this.parsedData={parts:{},barStructure:[],metadata:{}}}async parse(t,l=null){try{const e=await this._parseMidiBuffer(t);return this.metadataOverrides=l||{},this._normalizeLegacyMetadata(),this._extractMetadata(e),this._extractBarStructure(e),this._extractParts(e),this.parsedData.structureMetadata=this.metadataOverrides,this.parsedData}catch(e){throw console.error("Error parsing MIDI file:",e),e}}_normalizeLegacyMetadata(){if(!this.metadataOverrides||Object.keys(this.metadataOverrides).length===0)return;const t=this.metadataOverrides;if(t.scores&&Array.isArray(t.scores)&&t.scores.length>0){const l=t.scores[0];l.parts&&(t.parts=this._convertLegacyParts(l.parts)),l.bars&&(t.bars=l.bars),delete t.scores}else t.parts&&Array.isArray(t.parts)&&(t.parts=this._convertLegacyParts(t.parts));delete t.type,delete t.version,delete t.subtitle}_convertLegacyParts(t){const l={};for(const e of t){if(!e.name||!e.url)continue;const n=e.name.toLowerCase(),Q=this._parseUrlParams(e.url),A={};Q.track!==void 0&&(A.channel=parseInt(Q.track,10)),Q.prog!==void 0&&(A.instrument=parseInt(Q.prog,10)),A.channel!==void 0&&(l[n]=A)}return l}_parseUrlParams(t){const l={},e=t.indexOf("?");if(e===-1)return l;const n=t.substring(e+1).split("&");for(const Q of n){const[A,s]=Q.split("=");A&&s!==void 0&&(l[A]=s)}return l}async _parseMidiBuffer(t){const l=new Uint8Array(t);if(!(l[0]===77&&l[1]===84&&l[2]===104&&l[3]===100))throw new Error("Not a valid MIDI file");const e=this._bytesToNumber(l.slice(4,8)),n=this._bytesToNumber(l.slice(8,10)),Q=this._bytesToNumber(l.slice(10,12)),A=this._bytesToNumber(l.slice(12,14)),s=A&32768?null:A,d={format:n,ticksPerBeat:s,tracks:[],duration:0};let i=8+e;for(let U=0;U<Q;U++)if(l[i]===77&&l[i+1]===84&&l[i+2]===114&&l[i+3]===107){const B=this._bytesToNumber(l.slice(i+4,i+8)),m=l.slice(i+8,i+8+B),h=this._parseTrack(m);d.tracks.push(h),i+=8+B}else throw new Error(`Invalid track header at position ${i}`);return d}_parseTrack(t){const l={notes:[],name:null,lyrics:[],events:[],duration:0};let e=0,n=0,Q=null;for(;e<t.length;){let A=0,s=0;do s=t[e++],A=A<<7|s&127;while(s&128);n+=A,s=t[e++];let d=s;if(s&128)Q=d;else{if(Q===null)throw new Error("Running status byte encountered before status byte");d=Q,e--}if(d===255){const i=t[e++],U=this._readVariableLengthValue(t,e);e+=U.bytesRead;const B=t.slice(e,e+U.value);switch(e+=U.value,i){case 3:l.name=this._bytesToString(B);break;case 1:l.events.push({type:"text",text:this._bytesToString(B),tick:n});break;case 5:l.lyrics.push({text:this._bytesToString(B),tick:n});break;case 81:const m=this._bytesToNumber(B),h=Math.round(6e7/m);l.events.push({type:"tempo",bpm:h,tick:n});break;case 88:l.events.push({type:"timeSignature",numerator:B[0],denominator:Math.pow(2,B[1]),tick:n});break;case 47:l.duration=n;break}}else if((d&240)===144){const i=d&15,U=t[e++],B=t[e++];B>0?l.notes.push({type:"noteOn",noteNumber:U,velocity:B,tick:n,channel:i}):l.notes.push({type:"noteOff",noteNumber:U,tick:n,channel:i})}else if((d&240)===128){const i=d&15,U=t[e++];t[e++],l.notes.push({type:"noteOff",noteNumber:U,tick:n,channel:i})}else if(d===240||d===247){const i=this._readVariableLengthValue(t,e);e+=i.bytesRead+i.value}else if((d&240)===176){const i=d&15,U=t[e++],B=t[e++];l.events.push({type:"controller",controllerNumber:U,value:B,channel:i,tick:n})}else if((d&240)===192){const i=d&15,U=t[e++];l.events.push({type:"programChange",programNumber:U,channel:i,tick:n})}else if((d&240)===208){const i=d&15,U=t[e++];l.events.push({type:"channelAftertouch",pressure:U,channel:i,tick:n})}else if((d&240)===224){const i=d&15,U=t[e++],B=(t[e++]<<7|U)-8192;l.events.push({type:"pitchBend",value:B,channel:i,tick:n})}else if((d&240)===160){const i=d&15,U=t[e++],B=t[e++];l.events.push({type:"noteAftertouch",noteNumber:U,pressure:B,channel:i,tick:n})}else console.warn(`Unknown event type: ${d.toString(16)} at position ${e-1}`),e++}return l}_extractMetadata(t){const l={title:null,composer:null,partNames:[],format:t.format,ticksPerBeat:t.ticksPerBeat};t.tracks.forEach((e,n)=>{if(e.name&&!l.title&&(l.title=e.name),e.events.filter(Q=>Q.type==="text").forEach(Q=>{const A=Q.text.toLowerCase();(A.includes("compos")||A.includes("by"))&&!l.composer&&(l.composer=Q.text)}),e.name){const Q=e.name.toLowerCase();for(const A of this.partNames)if(Q.includes(A)){l.partNames.push({index:n,name:e.name});break}}}),this.metadataOverrides.title!==void 0&&(l.title=this.metadataOverrides.title),this.metadataOverrides.composer!==void 0&&(l.composer=this.metadataOverrides.composer),this.metadataOverrides.arranger!==void 0&&(l.arranger=this.metadataOverrides.arranger),this.metadataOverrides.copyright!==void 0&&(l.copyright=this.metadataOverrides.copyright),this.parsedData.metadata=l}_extractBarStructure(t){const l=t.ticksPerBeat||480,e=[];t.tracks.forEach(U=>{U.events.forEach(B=>{(B.type==="timeSignature"||B.type==="tempo")&&e.push(B)})}),e.sort((U,B)=>U.tick-B.tick);let n=0;t.tracks.forEach(U=>{U.notes&&U.notes.forEach(B=>{B.type==="noteOff"&&B.tick>n&&(n=B.tick)})}),n===0&&(n=l*8);const Q=[],A=e.filter(U=>U.type==="timeSignature").sort((U,B)=>U.tick-B.tick);let s={numerator:4,denominator:4},d=0,i=0;for(;d<n;){for(;i<A.length&&A[i].tick<=d;)s=A[i],i++;let U;U=d+l*4*s.numerator/s.denominator;const B=s.numerator,m=[],h=l*(4/s.denominator);for(let o=0;o<B;o++){const Z=d+o*h,u=this._ticksToTime(Z,t);m.push(u)}Q.push({sig:[s.numerator,s.denominator],beats:m}),d=U}this.parsedData.barStructure=Q}_extractParts(t){const l={},e=t.ticksPerBeat;if(this.metadataOverrides.parts)for(const[n,Q]of Object.entries(this.metadataOverrides.parts)){if(Q.channel!==void 0&&Q.channel!==null){if(Q.channel===15){console.error(`Part "${n}" uses channel 15 which is reserved for metronome. Skipping.`);continue}if(Q.channel===9&&console.warn(`Part "${n}" uses channel 9 (drums/percussion). This may not be appropriate for vocal parts.`),Q.channel<0||Q.channel>15){console.error(`Part "${n}" has invalid channel ${Q.channel}. MIDI channels must be 0-15. Skipping.`);continue}}if(Q.channel===void 0&&!Q.trackIndex&&Q.trackIndex!==0&&!Q.trackName)continue;let A;if(Q.channel!==void 0&&Q.channel!==null){if(A=this._extractPartDataByChannel(Q.channel,t,e),!A||A.notes.length===0){console.warn(`Part "${n}" specified channel ${Q.channel} but no notes found on that channel. Skipping.`);continue}}else if(Q.trackIndex!==void 0&&Q.trackIndex!==null){const s=Q.trackIndex;if(s>=0&&s<t.tracks.length){const d=t.tracks[s];A=this._extractPartDataFromTrack(d,s,t,e)}else{console.warn(`Part "${n}" specified trackIndex ${s} but track not found. Skipping.`);continue}}else if(Q.trackName){const s=t.tracks.findIndex(d=>d.name===Q.trackName);if(s!==-1){const d=t.tracks[s];A=this._extractPartDataFromTrack(d,s,t,e)}else{console.warn(`Part "${n}" specified trackName "${Q.trackName}" but track not found. Skipping.`);continue}}A&&(Q.instrument!==void 0&&Q.instrument!==null&&(A.defaultInstrument=this._resolveInstrument(Q.instrument),A.programChanges=[]),l[n]=A)}else t.tracks.forEach((n,Q)=>{if(!n.notes.length)return;let A=null;if(n.name){const i=n.name.toLowerCase();for(const U of this.partNames)if(U.length===1){if(i===U){A=U;break}}else if(i.includes(U)){A=U;break}}A||(A=n.name||`Track ${Q+1}`),A==="s"&&(A="soprano"),A==="a"&&(A="alto"),A==="t"&&(A="tenor"),A==="b"&&(A="bass");let s=A,d=2;for(;l[s];)s=`${A} ${d}`,d++;A=s,l[A]=this._extractPartDataFromTrack(n,Q,t,e)});this.parsedData.parts=l}_extractPartDataByChannel(t,l,e){const n=[],Q=[],A=[],s=[];l.tracks.forEach((i,U)=>{const B={};i.notes.forEach(m=>{if(m.channel===t){if(m.type==="noteOn")B[m.noteNumber]={tick:m.tick,velocity:m.velocity};else if(m.type==="noteOff"&&B[m.noteNumber]){const h=B[m.noteNumber],o=m.tick-h.tick;n.push({pitch:m.noteNumber,name:this._midiNoteToName(m.noteNumber),startTick:h.tick,endTick:m.tick,duration:o,startTime:this._ticksToTime(h.tick,l),endTime:this._ticksToTime(m.tick,l),velocity:h.velocity,channel:t,sourceTrackIndex:U}),delete B[m.noteNumber]}}}),i.lyrics.forEach(m=>{Q.push({text:m.text,tick:m.tick,time:m.tick/e})}),i.events.filter(m=>m.type==="programChange"&&m.channel===t).forEach(m=>{A.push({programNumber:m.programNumber,tick:m.tick,time:this._ticksToTime(m.tick,l),sourceTrackIndex:U})}),i.notes.some(m=>m.channel===t)&&s.push(U)}),n.sort((i,U)=>i.startTick-U.startTick),Q.sort((i,U)=>i.tick-U.tick),A.sort((i,U)=>i.tick-U.tick);const d=A.length>0?A[0].programNumber:0;return{notes:n,lyrics:Q,channel:t,trackIndices:s,programChanges:A,defaultInstrument:d}}_extractPartDataFromTrack(t,l,e,n){const Q=[],A={};t.notes.forEach(U=>{if(U.type==="noteOn")A[U.noteNumber]={tick:U.tick,velocity:U.velocity,channel:U.channel};else if(U.type==="noteOff"&&A[U.noteNumber]){const B=A[U.noteNumber],m=U.tick-B.tick;Q.push({pitch:U.noteNumber,name:this._midiNoteToName(U.noteNumber),startTick:B.tick,endTick:U.tick,duration:m,startTime:this._ticksToTime(B.tick,e),endTime:this._ticksToTime(U.tick,e),velocity:B.velocity,channel:B.channel,sourceTrackIndex:l}),delete A[U.noteNumber]}});const s=t.lyrics.map(U=>({text:U.text,tick:U.tick,time:U.tick/n}));Q.sort((U,B)=>U.startTick-B.startTick);const d=t.events.filter(U=>U.type==="programChange").map(U=>({programNumber:U.programNumber,tick:U.tick,time:this._ticksToTime(U.tick,e)})).sort((U,B)=>U.tick-B.tick),i=d.length>0?d[0].programNumber:0;return{notes:Q,lyrics:s,trackIndex:l,programChanges:d,defaultInstrument:i}}_resolveInstrument(t){if(typeof t=="number")return t;if(typeof t=="string"){const l={choir_aahs:52,piano:0,acoustic_grand_piano:0,bright_acoustic_piano:1,electric_grand_piano:2,strings:48,string_ensemble_1:48,violin:40,viola:41,cello:42,contrabass:43},e=t.toLowerCase().replace(/ /g,"_");return l[e]!==void 0?l[e]:0}return 0}_midiNoteToName(t){const l=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"],e=Math.floor(t/12)-1;return`${l[t%12]}${e}`}_bytesToNumber(t){let l=0;for(let e=0;e<t.length;e++)l=l<<8|t[e];return l}_bytesToString(t){return new TextDecoder().decode(t)}_readVariableLengthValue(t,l){let e=0,n,Q=0;do n=t[l+Q++],e=e<<7|n&127;while(n&128);return{value:e,bytesRead:Q}}_ticksToTime(t,l){const e=l.ticksPerBeat||480,n=[];l.tracks.forEach(d=>{d.events.forEach(i=>{i.type==="tempo"&&n.push(i)})}),n.sort((d,i)=>d.tick-i.tick);let Q=0,A=0,s=120;for(const d of n){if(d.tick>t)break;if(d.tick>A){const i=(d.tick-A)/e*(60/s);Q+=i,A=d.tick}s=d.bpm}if(t>A){const d=(t-A)/e*(60/s);Q+=d}return Q}}class jn{constructor(){this.barOrder=[],this.beatTable=[]}mapBeats(t,l){try{return l.bars&&!l.sections?this.barOrder=this.generateBarOrderFromLegacyBars(l.bars,t.barStructure):l.sections&&l.order?this.barOrder=this.generateBarOrder(l.sections,l.order):this.barOrder=this.generateLinearBarOrder(t.barStructure),this.beatTable=this.generateBeatTable(this.barOrder,t.barStructure),this.beatTable}catch(e){throw console.error("Error mapping beats:",e),e}}generateBarOrder(t,l){const e=[],n={};for(const Q of l){const A=t[Q.section];if(!A)throw new Error(`Invalid section index: ${Q.section}`);const s=Q.section;n[s]||(n[s]=0),n[s]++;const d=n[s],i=Q.from!==void 0?Q.from:this._getSectionStartBar(t,Q.section),U=Q.to!==void 0?Q.to:A.to,B=Q.as||1;for(let m=i;m<=U;m++)this._shouldPlayBar(A,m,B)&&e.push({barNumber:m,repeat:d,sectionIndex:Q.section,voltaTime:B})}return e}generateBarOrderFromLegacyBars(t,l){const e=[];let n=1,Q=0,A;for(const s of t){s.from!==void 0&&(n=s.from===-1?0:s.from,Q=0),s.timeSig!==void 0&&(A=s.timeSig);const d=s.repeat||1;let i=s.beats;for(;i>0;){const U=(A!==void 0?A:this._getBeatsPerBar(n,l))-Q;i>=U?(e.push({barNumber:n,repeat:d,sectionIndex:0,voltaTime:1}),i-=U,Q=0,n===0?n=1:n++):(Q+=i,i=0)}}return Q>0&&e.push({barNumber:n,repeat:1,sectionIndex:0,voltaTime:1}),e}generateLinearBarOrder(t){const l=[];for(let e=0;e<t.length;e++)l.push({barNumber:e+1,repeat:1,sectionIndex:0,voltaTime:1});return l}_getBeatsPerBar(t,l){const e=l.length>0&&l[0].sig&&l[0].sig[0]<=2;let n;if(e?n=t:n=t-1,n<0||n>=l.length)return 4;const Q=l[n];return Q.sig?Q.sig[0]:4}generateBeatTable(t,l){const e=[],n={};let Q=0,A=0;const s=[...l];for(;A<t.length&&Q<s.length;){const d=t[A],i=d.barNumber;if(n[i]===void 0){const h=s[Q];if(!h||!h.sig)throw new Error(`Invalid MIDI bar structure at index ${Q}`);n[i]=h.sig[0]}const U=n[i];let B=s[Q],m=B.sig[0];for(;m<U&&Q+1<s.length;){const h=s[Q+1],o=[B.sig[0]+h.sig[0],B.sig[1]],Z=[...B.beats||[],...h.beats||[]];B={sig:o,beats:Z},s[Q]=B,s.splice(Q+1,1),m=o[0]}if(m>U){const h=U,o=m-U,Z=B.beats?B.beats.slice(0,h):[],u=B.beats?B.beats.slice(h):[],V={sig:[h,B.sig[1]],beats:Z},p={sig:[o,B.sig[1]],beats:u};s[Q]=V,s.splice(Q+1,0,p),B=V}this._generateBeatsForBar(e,d,B,U),Q++,A++}if(A<t.length){const d=e.length>0?e[e.length-1]:null;let i=.5;if(e.length>=2){const B=Math.min(8,e.length),m=e[e.length-B];i=(e[e.length-1].time-m.time)/(B-1)}let U=d?d.time+i:0;for(;A<t.length;){const B=t[A],m=B.barNumber,h=n[m]!==void 0?n[m]:4;n[m]===void 0&&(n[m]=h);const o=[];for(let u=0;u<h;u++)o.push(U),U+=i;const Z={sig:[h,4],beats:o};this._generateBeatsForBar(e,B,Z,h),A++}}return e}_generateBeatsForBar(t,l,e,n){const{beats:Q}=e;if(!Q||!Array.isArray(Q))throw new Error(`Invalid MIDI bar: missing beats array. Got: ${JSON.stringify(e)}`);const A=Q.slice(0,n);for(let s=1;s<=n;s++){const d={time:A[s-1],repeat:l.repeat,bar:l.barNumber,beat:s,timeSig:n};t.push(d)}}_getSectionStartBar(t,l){return t[l].pickup!==void 0?0:l===0?1:t[l-1].to+1}_shouldPlayBar(t,l,e){if(!t.voltas)return!0;const n=t.voltas.indexOf(l);return n===-1?!0:n+1===e}}class Ee{constructor(t=null,l,e=null,n=null){if(!l)throw new Error("Parsed MIDI data is required");this.audioEngine=t,this._audioEngineReady=!!(t&&t.isInitialized),this.instrumentMap=e||{},this.parsedData=l,this._isPlaying=!1,this._currentTime=0,this._totalDuration=0,this.playbackSpeed=1,this.partChannels=new Map,this.partOutputs=new Map,this.playbackStartTime=0,this.lookAheadTime=.05,this.scheduleInterval=null,this.partNotePointers=new Map,this.partProgramPointers=new Map,this.eventBus=re(),this.beatMapper=new jn,this.beats=[],this.structureMetadata=n,this._calculateTotalDuration();const Q=n||this._createDefaultStructureMetadata();this.beats=this.beatMapper.mapBeats(l,Q),this._audioEngineReady&&(this._setupPartChannels(),this._resetNotePointers(),this._resetProgramPointers())}setAudioEngine(t){if(!t||!t.isInitialized)throw new Error("An initialized AudioEngine is required");this.audioEngine=t,this._audioEngineReady=!0,this._setupPartChannels(),this._resetNotePointers(),this._resetProgramPointers()}isAudioEngineReady(){return this._audioEngineReady}play(){if(!this._audioEngineReady)throw new Error("Audio engine not ready. Call setAudioEngine() first.");this._isPlaying||(this._isPlaying=!0,this.playbackStartTime=this.audioEngine.audioContext.currentTime-this._currentTime/this.playbackSpeed,this._resetNotePointers(),this._resetProgramPointers(),this._schedulePlayback(),this._startTimeUpdateLoop())}playAt(t){if(!this._audioEngineReady)throw new Error("Audio engine not ready. Call setAudioEngine() first.");this._isPlaying||(this._isPlaying=!0,this.playbackStartTime=t-this._currentTime/this.playbackSpeed,this._resetNotePointers(),this._resetProgramPointers(),this._schedulePlayback(),this._startTimeUpdateLoop())}pause(){this._isPlaying&&(this._isPlaying=!1,this._stopScheduling(),this._stopTimeUpdateLoop())}stop(){this._isPlaying=!1,this._currentTime=0,this._stopScheduling(),this._stopTimeUpdateLoop(),this._resetNotePointers(),this._resetProgramPointers()}skipToTime(t){t=Math.max(0,Math.min(t,this._totalDuration));const l=this._isPlaying;l&&this.pause(),this._currentTime=t,this._resetNotePointers(),this._resetProgramPointers(),l&&this.play()}setPlaybackSpeed(t,l=!0){if(t<=0)throw new Error("Playback speed must be greater than 0");const e=l&&this._isPlaying;e&&this.pause();const n=(this.audioEngine.audioContext.currentTime-this.playbackStartTime)*this.playbackSpeed;this.playbackSpeed=t,e?this.play():this.playbackStartTime=this.audioEngine.audioContext.currentTime-n/this.playbackSpeed}setBar(t,l=0){const e=this.getTimeFromBar(t,l);e!==null&&(this.skipToTime(e),this._emitEvent("barChanged",{bar:t,beat:1,repeat:l,time:e}))}getTimeFromBar(t,l=0){l||(l=1);const e=this.beats.find(n=>n.bar===t&&n.beat===1&&n.repeat===l);return e?e.time:null}getBeatFromTime(t){if(!this.beats.length)return null;let l=null;for(let e=this.beats.length-1;e>=0;e--)if(this.beats[e].time<=t){l=this.beats[e];break}return l}getBeats(){return this.beats}getRepeatCountForBar(t){const l=new Set;return this.beats.forEach(e=>{e.bar===t&&l.add(e.repeat)}),l.size}getPracticeMarks(){return this.structureMetadata?this.structureMetadata.marks||this.structureMetadata.practiceMarks||{}:{}}allSoundsOff(){this._audioEngineReady&&this.audioEngine.allSoundsOff()}getPartOutput(t){return this.partOutputs.get(t)||null}getPartChannel(t){return this.partChannels.get(t)||null}getAllNextNotes(t){const l=t??this.getCurrentTime(),e={};for(const[n,Q]of Object.entries(this.parsedData.parts)){const A=Q.notes.find(s=>s.startTime>=l);e[n]=A?{pitch:A.pitch,startTime:A.startTime}:null}return e}getCurrentTime(){if(this._isPlaying){const t=(this.audioEngine.audioContext.currentTime-this.playbackStartTime)*this.playbackSpeed;this._currentTime=Math.min(t,this._totalDuration)}return this._currentTime}getTotalDuration(){return this._totalDuration}isPlaying(){return this._isPlaying}on(t,l){this.eventBus.on(t,l)}off(t,l){this.eventBus.off(t,l)}_setupPartChannels(){Object.keys(this.parsedData.parts).forEach(t=>{const l=this.parsedData.parts[t],e=this.instrumentMap[t]||{},n=e.instrument!==void 0?e.instrument:l.defaultInstrument!==void 0?l.defaultInstrument:0;try{const Q=this.audioEngine.createChannel(t,{instrument:n,initialVolume:e.volume||1});this.partChannels.set(t,Q);const A=this.audioEngine.audioContext.createGain();A.gain.value=1;const s=Q.getOutputNode();s&&s.connect(A),this.partOutputs.set(t,A)}catch(Q){console.error(`Failed to create channel for part '${t}':`,Q),this._emitEvent("error",Q)}})}_calculateTotalDuration(){let t=0;Object.values(this.parsedData.parts).forEach(l=>{l.notes.forEach(e=>{e.endTime>t&&(t=e.endTime)})}),this._totalDuration=t}_schedulePlayback(){this._stopScheduling(),this._startScheduleLoop()}_startScheduleLoop(){this.scheduleInterval||(this.scheduleInterval=setInterval(()=>{if(!this._isPlaying)return;const t=(this.audioEngine.audioContext.currentTime-this.playbackStartTime)*this.playbackSpeed,l=t+this.lookAheadTime;for(const[e,n]of this.partChannels){const Q=this.parsedData.parts[e];if(Q){if(Q.programChanges&&Q.programChanges.length>0){let A=this.partProgramPointers.get(e)||0;const s=Q.programChanges;for(;A<s.length&&s[A].time<t;)A++;for(;A<s.length&&s[A].time<=l;){const d=s[A];n.setInstrument(d.programNumber),A++}this.partProgramPointers.set(e,A)}if(Q.notes){let A=this.partNotePointers.get(e)||0;const s=Q.notes;for(;A<s.length&&s[A].endTime<t;)A++;for(;A<s.length&&s[A].startTime<=l;){const d=s[A];if(d.endTime-d.startTime>=.01){const i=this.playbackStartTime+d.startTime/this.playbackSpeed,U=(d.endTime-d.startTime)/this.playbackSpeed;n.playNote(i,d.pitch,d.velocity,U)}A++}this.partNotePointers.set(e,A)}}}},50))}_resetNotePointers(){const t=this._currentTime;for(const[l]of this.partChannels){const e=this.parsedData.parts[l];if(!e||!e.notes)continue;let n=0;for(;n<e.notes.length&&e.notes[n].endTime<t;)n++;this.partNotePointers.set(l,n)}}_resetProgramPointers(){const t=this._currentTime;for(const[l,e]of this.partChannels){const n=this.parsedData.parts[l];if(!n||!n.programChanges){this.partProgramPointers.set(l,0);continue}let Q=0,A=n.defaultInstrument;for(;Q<n.programChanges.length&&n.programChanges[Q].time<=t;)A=n.programChanges[Q].programNumber,Q++;e.setInstrument(A),this.partProgramPointers.set(l,Q)}}_stopScheduling(){this.scheduleInterval&&(clearInterval(this.scheduleInterval),this.scheduleInterval=null),this.partChannels.forEach(t=>{t.isActive()&&t.allNotesOff()})}_startTimeUpdateLoop(){this.timeUpdateInterval=setInterval(()=>{const t=this.getCurrentTime();this._emitEvent("timeupdate",{currentTime:t});const l=this.getBeatFromTime(t);l&&this._emitEvent("beatChanged",l),(this.audioEngine.audioContext.currentTime-this.playbackStartTime)*this.playbackSpeed>=this._totalDuration+.05&&(this.stop(),this._emitEvent("ended",{finalTime:this._currentTime}))},100)}_stopTimeUpdateLoop(){this.timeUpdateInterval&&(clearInterval(this.timeUpdateInterval),this.timeUpdateInterval=null)}_emitEvent(t,l){(this.eventBus.all.get(t)||[]).forEach(e=>{try{e(l)}catch(n){console.error(`Error in ${t} event listener:`,n)}})}_createDefaultStructureMetadata(){return{sections:[{from:1,to:this.parsedData.barStructure.length}],order:[{section:0}]}}destroy(){this.stop(),this.partChannels.forEach(t=>{t.destroy()}),this.partChannels.clear(),this.partOutputs.forEach(t=>{t.disconnect()}),this.partOutputs.clear(),this.partNotePointers.clear(),this.partProgramPointers.clear(),this.eventBus.all.clear()}}class Pn{constructor(t=null,l={}){t instanceof Ee?(this.audioEngine=t.audioEngine,this.midiPlayer=t,this.parsedData=t.parsedData,this._audioEngineReady=!!(this.audioEngine&&this.audioEngine.isInitialized)):(this.audioEngine=t,this._audioEngineReady=!!(t&&t.isInitialized),this.midiPlayer=null,this.parsedData=null),this.eventBus=re(),this._parser=new qn,this._partOutputsMap=new Map,this.instrumentMap=null,this.metronomeConfig={enabled:!1,tickInstrument:115,accentInstrument:116,volume:.7,...l.metronome},this.leadInConfig={enabled:!1,bars:1,...l.leadIn},this.startupConfig={delayMs:25,...l.startup},this.state="reset",this.frozenTime=0,this.leadInData=null,this.leadInStartTime=null,this.leadInProgress=null,this.leadInInterval=null,this.timeUpdateInterval=null,this.metronomeScheduleInterval=null,this.nextBeatIndex=0,this.measuredLatencyMs=null,this.latencyMeasurements=[],this.isCalibrating=!1,this.baselineLatencyMs=null,this.metronomeMasterGain=null,this._validateConfig(),this._loadBaselineLatency(),this._audioEngineReady&&this._setupMetronomeMasterGain(),this.midiPlayer&&this._completeMidiPlayerSetup()}setAudioEngine(t){if(!t||!t.isInitialized)throw new Error("An initialized AudioEngine is required");this.audioEngine=t,this._audioEngineReady=!0,this._setupMetronomeMasterGain(),this.parsedData&&!this.midiPlayer&&this._setupPlayerWithAudio()}isAudioEngineReady(){return this._audioEngineReady}async load(t,l=null,e=null){if(this.reset(),t instanceof Ee)this.parsedData=t.parsedData,this.instrumentMap=e,this._audioEngineReady&&this._setMidiPlayer(t);else if(t instanceof ArrayBuffer)this.parsedData=await this._parser.parse(t,l),this.instrumentMap=e||this._createDefaultInstrumentMap(this.parsedData.parts),this._audioEngineReady&&this._setupPlayerWithAudio();else if(t&&typeof t=="object"&&t.parts)this.parsedData=t,this.instrumentMap=e||this._createDefaultInstrumentMap(t.parts),this._audioEngineReady&&this._setupPlayerWithAudio();else throw new Error("Invalid input type. Expected MidiPlayer, parsed MIDI data, or ArrayBuffer")}reset(){this.stop(),this.midiPlayer&&(this.midiPlayer.destroy(),this.midiPlayer=null),this.parsedData=null,this.instrumentMap=null,this._audioEngineReady&&this.audioEngine.clearAllChannels(),this._partOutputsMap.clear(),this.frozenTime=0,this.leadInData=null,this.leadInProgress=null,this.leadInStartTime=null,this.nextBeatIndex=0,this._stopLeadIn(),this._stopMetronome(),this._stopTimeUpdateLoop(),this.state="reset"}getPartOutputs(){return this._partOutputsMap.entries()}getPartNames(){return Array.from(this._partOutputsMap.keys())}getBeats(){return this.midiPlayer?this.midiPlayer.getBeats():[]}getRepeatCountForBar(t){return this.midiPlayer?this.midiPlayer.getRepeatCountForBar(t):0}getPracticeMarks(){return this.midiPlayer?this.midiPlayer.getPracticeMarks():{}}async play(t={}){if(!this._audioEngineReady)throw new Error("Audio engine not ready. Call setAudioEngine() after user interaction.");if(this.parsedData&&!this.midiPlayer&&this._setupPlayerWithAudio(),!this.midiPlayer)throw new Error("No MIDI data loaded. Call load() first.");if(!(this.state==="playing"||this.state==="lead-in"))try{const l=t.leadIn!==void 0?t.leadIn:this.leadInConfig.enabled,e=t.metronome!==void 0?t.metronome:this.metronomeConfig.enabled;this.frozenTime===0&&(this.frozenTime=this.midiPlayer.getCurrentTime()),l?await this._startLeadIn(e):await this._startMidiPlayback(e)}catch(l){throw this.state="stopped",this._emitEvent("error",l),l}}pause(){if(!this.midiPlayer||this.state==="stopped"||this.state==="paused")return;const t=this.state;this.state="paused",t==="lead-in"?this._pauseLeadIn():t==="playing"&&(this.midiPlayer.pause(),this._stopMetronome()),this._stopTimeUpdateLoop(),this._emitEvent("playbackPaused",{})}resume(){!this.midiPlayer||this.state!=="paused"||(this.leadInData&&this.leadInProgress!==null&&this.leadInProgress<1?this._resumeLeadIn():(this.state="playing",this._resetMetronomeBeatTracking(),this.midiPlayer.play(),this._startMetronomeIfEnabled(),this._startTimeUpdateLoop(),this._emitEvent("playbackStarted",{})))}stop(){if(this.state==="stopped")return;const t=this.state==="playing";this.state="stopped",this.frozenTime=0,this.leadInData=null,this.leadInProgress=null,this.leadInStartTime=null,this._stopLeadIn(),this._stopMetronome(),this._stopTimeUpdateLoop(),this._resetMetronomeBeatTracking(),t&&this.midiPlayer.stop(),this._emitEvent("playbackStopped",{})}skipToTime(t){if(!this.midiPlayer)throw new Error("No MIDI data loaded. Call load() first.");this.frozenTime=t,this.state!=="lead-in"&&(this.midiPlayer.skipToTime(t),this.state==="playing"&&this.metronomeConfig.enabled&&this._resetMetronomeBeatTracking())}setBar(t,l=0){if(!this.midiPlayer)throw new Error("No MIDI data loaded. Call load() first.");if(this.state==="lead-in"){const e=this.midiPlayer.getTimeFromBar(t,l);e!==null&&(this.frozenTime=e);return}if(this.midiPlayer.setBar(t,l),this.state==="stopped"||this.state==="paused"){const e=this.midiPlayer.getTimeFromBar(t,l);e!==null&&(this.frozenTime=e)}this.state==="playing"&&this.metronomeConfig.enabled&&this._resetMetronomeBeatTracking()}getCurrentTime(){return this.state==="lead-in"||this.state==="paused"&&this.leadInProgress!==null?this.frozenTime:this.midiPlayer?this.midiPlayer.getCurrentTime():0}getLeadInProgress(){return this.leadInProgress}setMetronomeEnabled(t){const l=this.metronomeConfig.enabled;this.metronomeConfig.enabled=t,this.state==="playing"&&(t&&!l?this._startMetronome():!t&&l&&this._stopMetronome()),this._emitEvent("metronomeEnabledChanged",{enabled:t})}setMetronomeSettings(t){if(t.volume!==void 0&&(t.volume<0||t.volume>1))throw new Error("Metronome volume must be between 0.0 and 1.0");if(Object.assign(this.metronomeConfig,t),t.volume!==void 0){const l=this.audioEngine.getMetronomeOutput();l&&l.gain&&(l.gain.value=t.volume)}this._emitEvent("metronomeSettingsChanged",{...t})}setLeadInEnabled(t){this.leadInConfig.enabled=t,this._emitEvent("leadInSettingsChanged",{enabled:t,bars:this.leadInConfig.bars})}setLeadInBars(t){if(t<1)throw new Error("Lead-in bars must be at least 1");this.leadInConfig.bars=t,this._emitEvent("leadInSettingsChanged",{enabled:this.leadInConfig.enabled,bars:t})}setPlaybackSpeed(t,l=!0){if(!this.midiPlayer)throw new Error("No MIDI data loaded. Call load() first.");this.midiPlayer.setPlaybackSpeed(t,l)}getMetronomeSettings(){return{...this.metronomeConfig}}isMetronomeEnabled(){return this.metronomeConfig.enabled}getLeadInSettings(){return{enabled:this.leadInConfig.enabled,bars:this.leadInConfig.bars}}getStartupSettings(){return{...this.startupConfig}}setStartupDelay(t){if(typeof t!="number"||t<0||t>1e3)throw new Error("Startup delay must be a number between 0 and 1000 milliseconds");this.startupConfig.delayMs=t,this._emitEvent("startupSettingsChanged",{delayMs:t})}getState(){return this.state}isInLeadIn(){return this.state==="lead-in"}isPlaying(){return this.state==="playing"||this.state==="lead-in"}getAudioLatencyMs(){return this.measuredLatencyMs}getBaselineLatencyMs(){return this.baselineLatencyMs}hasLatencyDrift(t=100){return!this.measuredLatencyMs||!this.baselineLatencyMs?!1:this.measuredLatencyMs>this.baselineLatencyMs+t}async calibrateAudioLatency(t={}){if(!this._audioEngineReady)throw new Error("Audio engine not ready. Call setAudioEngine() first.");if(this.isCalibrating)throw new Error("Calibration already in progress");const l=t.measurements||5,e=t.sampleIntervalMs||10,n=t.threshold||.01,Q=t.timeout||3e3,A=t.silent!==void 0?t.silent:!0,s=t.updateBaseline!==void 0?t.updateBaseline:!0;this.isCalibrating=!0;try{A&&await this._setupSilentCalibration();const d=await this._performLatencyMeasurement(l,e,n,Q);this.measuredLatencyMs=d,s&&await this._updateBaselineLatency(d);const i=this.hasLatencyDrift();return this._emitEvent("audioLatencyChanged",{latencyMs:d,baselineLatencyMs:this.baselineLatencyMs,hasDrift:i,source:"manual",measurements:l}),i&&(console.warn(`Latency drift detected: ${d}ms vs baseline ${this.baselineLatencyMs}ms`),this._emitEvent("latencyDriftDetected",{currentLatencyMs:d,baselineLatencyMs:this.baselineLatencyMs,driftMs:d-this.baselineLatencyMs})),d}finally{A&&this._teardownSilentCalibration(),this.isCalibrating=!1}}_loadBaselineLatency(){try{if(typeof localStorage>"u")return;const t=localStorage.getItem("audioMixerEngine.baselineLatency");t&&(this.baselineLatencyMs=parseInt(t,10),console.log(`Loaded baseline latency from storage: ${this.baselineLatencyMs}ms`))}catch(t){console.warn("Could not load baseline latency from storage:",t)}}async _updateBaselineLatency(t){if(!this.baselineLatencyMs||t<this.baselineLatencyMs){this.baselineLatencyMs=t;try{typeof localStorage<"u"&&(localStorage.setItem("audioMixerEngine.baselineLatency",t.toString()),console.log(`Updated baseline latency: ${t}ms`))}catch(l){console.warn("Could not save baseline latency to storage:",l)}}}_setupMetronomeMasterGain(){if(!this._audioEngineReady||this.metronomeMasterGain)return;const t=this.audioEngine.getMetronomeOutput();if(!t){console.warn("Metronome output not available - master gain not created");return}const l=this.audioEngine.getMetronomeAnalyser();try{t.disconnect()}catch{}this.metronomeMasterGain=this.audioEngine.audioContext.createGain(),this.metronomeMasterGain.gain.value=1,t.connect(this.metronomeMasterGain),l?(t.connect(l),console.log("Metronome master gain node created and connected (analyser reconnected)")):console.log("Metronome master gain node created and connected (no analyser)")}async _setupSilentCalibration(){if(!this.metronomeMasterGain)throw new Error("Metronome master gain not available for calibration");this.metronomeMasterGain.gain.value=0,console.log("Silent calibration active (gain=0)")}_teardownSilentCalibration(){this.metronomeMasterGain&&(this.metronomeMasterGain.gain.value=1,console.log("Silent calibration ended (gain=1)"))}getMetronomeOutput(){var t;return this.metronomeMasterGain||((t=this.audioEngine)==null?void 0:t.getMetronomeOutput())}getPartOutput(t){return this.midiPlayer?this.midiPlayer.getPartOutput(t):null}allSoundsOff(){this.midiPlayer&&this.midiPlayer.allSoundsOff()}previewNextNotes(t={}){if(!this.midiPlayer)throw new Error("No MIDI data loaded");const l=t.delayBetweenParts??.3,e=t.duration??.5,n=t.velocity??100,Q=this.midiPlayer.getAllNextNotes(),A=t.partOrder??this.getPartNames();let s=this.audioEngine.audioContext.currentTime+.01;const d=[];for(const i of A){const U=Q[i];if(!U)continue;const B=this.midiPlayer.getPartChannel(i);if(!B)continue;const m=this.midiPlayer.getPartOutput(i);m&&m.gain.value===0||(B.playPreviewNote(U.pitch,{startTime:s,duration:e,velocity:n,instrument:t.instrument}),d.push({partName:i,pitch:U.pitch,startTime:s}),s+=l)}return{parts:d,totalDuration:d.length*l}}getTotalDuration(){if(this.midiPlayer)return this.midiPlayer.getTotalDuration();if(this.parsedData&&this.parsedData.parts){let t=0;return Object.values(this.parsedData.parts).forEach(l=>{l.notes&&l.notes.forEach(e=>{e.endTime>t&&(t=e.endTime)})}),t}return 0}on(t,l){this.eventBus.on(t,l)}off(t,l){this.eventBus.off(t,l)}_setupEventDelegation(){this.midiPlayer.on("timeupdate",t=>{if(this.state==="playing"){const l={...t,effectiveTime:t.currentTime,leadInProgress:null};if(this.measuredLatencyMs){const e=this.measuredLatencyMs/1e3;l.audioTime=Math.max(0,t.currentTime-e),l.latencyMs=this.measuredLatencyMs}this._emitEvent("timeupdate",l)}}),this.midiPlayer.on("beatChanged",t=>{if(this.state==="playing"){const l={...t,isLeadIn:!1};this._emitEvent("beatChanged",l),this._scheduleBeatAudible(l)}}),this.midiPlayer.on("ended",t=>{this.state==="playing"&&(this.state="stopped",this._stopMetronome(),this._stopTimeUpdateLoop(),this._emitEvent("playbackEnded",t))}),this.midiPlayer.on("error",t=>{this._emitEvent("error",t)})}_validateConfig(){if(this.metronomeConfig.volume<0||this.metronomeConfig.volume>1)throw new Error("Metronome volume must be between 0.0 and 1.0");if(this.leadInConfig.bars<1)throw new Error("Lead-in bars must be at least 1")}async _startLeadIn(t){this.state="lead-in";const l=this.startupConfig.delayMs/1e3;this.leadInStartTime=this.audioEngine.audioContext.currentTime+l,this.leadInProgress=0,this.leadInData=this._calculateLeadInBeats(),this._emitEvent("leadInStarted",{totalBeats:this.leadInData.totalBeats,duration:this.leadInData.duration,bars:this.leadInConfig.bars,startupDelayMs:this.startupConfig.delayMs}),setTimeout(()=>{this.state==="lead-in"&&this._startLeadInScheduling(t)},this.startupConfig.delayMs),this._startTimeUpdateLoop()}_calculateLeadInBeats(){if(!this.midiPlayer)return{totalBeats:4,duration:2,beatSequence:[],beatsPerBar:4,startBeat:{bar:1,beat:1,timeSig:4}};const t=this.midiPlayer.beats,l=this.frozenTime,e=this.leadInConfig.bars;let n=t.length-1,Q=.5;for(;t[n].time>l;)n--;const A=t[n],s=t[n+1];s?Q=s.time-A.time:n>0&&(Q=A.time-t[n-1].time);const d=this.midiPlayer&&this.midiPlayer.playbackSpeed||1,i=Q/d,U=A.timeSig===1,B=U&&s?s.timeSig:A.timeSig,m=U?B-1:A.beat>1?A.beat-1:0,h=e*B+m;return{totalBeats:h,duration:h*i,beatSequence:this._generateBeatSequence(h,i,B),beatsPerBar:B,startBeat:A}}_generateBeatSequence(t,l,e){const n=[];for(let Q=0;Q<t;Q++){const A=Q%e+1;n.push({beat:A,isAccent:A===1,time:Q*l,absoluteTime:this.leadInStartTime+Q*l})}return n}_startLeadInScheduling(t){this.leadInBeatIndex=0,this.leadInScheduledBeats=new Set;const l=this.leadInData.beatSequence,e=10;this.leadInStartTime=this.audioEngine.audioContext.currentTime,this.leadInInterval=setInterval(()=>{const n=this.audioEngine.audioContext.currentTime-this.leadInStartTime;for(this.leadInProgress=Math.min(1,n/this.leadInData.duration);this.leadInBeatIndex<l.length;){const Q=l[this.leadInBeatIndex],A=Q.time-n;if(A>.05)break;if(!this.leadInScheduledBeats.has(this.leadInBeatIndex)&&A>=-.05&&A<=.05){const s=A<=0?this.audioEngine.audioContext.currentTime+.01:this.audioEngine.audioContext.currentTime+A;this._scheduleTickAtTime(s,Q.isAccent);const d={bar:Math.floor(this.leadInBeatIndex/this.leadInData.beatsPerBar)+1,beat:Q.beat,repeat:1,time:this.frozenTime,isLeadIn:!0};this._emitEvent("beatChanged",d),this._scheduleBeatAudible(d),this.leadInScheduledBeats.add(this.leadInBeatIndex)}this.leadInBeatIndex++}this.leadInProgress>=1&&this._completeLeadIn(t)},e)}_completeLeadIn(t){const l=this.leadInStartTime+this.leadInData.duration;this._stopLeadIn(),this._emitEvent("leadInEnded",{}),this.leadInData=null,this.leadInProgress=null,this.leadInStartTime=null,this._startMidiPlaybackAt(l,t,!0)}async _startMidiPlaybackAt(t,l,e=!0){this.state="playing",e&&this._emitEvent("playbackStarted",{startupDelayMs:0,scheduledStartTime:t}),this.midiPlayer.playAt(t),l&&this._startMetronomeAt(t),this.timeUpdateInterval||this._startTimeUpdateLoop()}async _startMidiPlayback(t,l=!0,e=!1){this.state="playing",this._resetMetronomeBeatTracking(),l&&this._emitEvent("playbackStarted",{startupDelayMs:e?0:this.startupConfig.delayMs});const n=()=>{if(this.state==="playing")try{this.midiPlayer.play(),t&&this._startMetronome()}catch(Q){this.state="stopped",this._emitEvent("error",Q)}};e?n():setTimeout(n,this.startupConfig.delayMs),this.timeUpdateInterval||this._startTimeUpdateLoop()}_startMetronome(){!this.metronomeConfig.enabled||this.state!=="playing"||(this._scheduleMetronomeTicks(),this.metronomeScheduleInterval=setInterval(()=>{this._scheduleMetronomeTicks()},50))}_startMetronomeAt(t){this.metronomeConfig.enabled&&(this.metronomeScheduledStartTime=t,this._resetMetronomeBeatTracking(),this._scheduleMetronomeTicksAt(t),this.metronomeScheduleInterval=setInterval(()=>{this._scheduleMetronomeTicks()},50))}_startMetronomeIfEnabled(){this.metronomeConfig.enabled&&this._startMetronome()}_scheduleMetronomeTicksAt(t){if(!this.metronomeConfig.enabled||!this.midiPlayer)return;const l=this.midiPlayer.beats;if(!l||l.length===0)return;const e=this.midiPlayer.getCurrentTime(),n=.1;for(let Q=this.nextBeatIndex;Q<l.length;Q++){const A=l[Q],s=this.midiPlayer.playbackSpeed||1,d=t+(A.time-e)/s;if(d>this.audioEngine.audioContext.currentTime+n)break;if(d>=this.audioEngine.audioContext.currentTime-.01){const i=Math.max(d,this.audioEngine.audioContext.currentTime+.001),U=A.isDownbeat||A.beat===1;this._scheduleTickAtTime(i,U),this.nextBeatIndex=Q+1}}}_scheduleMetronomeTicks(){if(!this.metronomeConfig.enabled||!this.midiPlayer)return;const t=this.midiPlayer.getCurrentTime(),l=this.midiPlayer.beats;if(!l||l.length===0)return;for(;this.nextBeatIndex<l.length&&l[this.nextBeatIndex].time<t-.025;)this.nextBeatIndex++;const e=t+.15;for(;this.nextBeatIndex<l.length;){const n=l[this.nextBeatIndex],Q=n.time-t;if(n.time>e)break;if(Q>=-.025&&Q<=.15){const A=this.audioEngine.audioContext.currentTime+.005,s=this.audioEngine.audioContext.currentTime+Math.max(Q,.005),d=Math.max(A,s),i=n.beat===1;this._scheduleTickAtTime(d,i)}this.nextBeatIndex++}}async _scheduleTickAtTime(t,l){try{await this.audioEngine.playMetronomeTick(t,l,this.metronomeConfig.volume)}catch(e){console.warn("Failed to schedule metronome tick:",e)}}_resetMetronomeBeatTracking(){if(!this.midiPlayer){this.nextBeatIndex=0;return}const t=this.getCurrentTime(),l=this.midiPlayer.beats;if(!l||l.length===0){this.nextBeatIndex=0;return}for(this.nextBeatIndex=0;this.nextBeatIndex<l.length&&l[this.nextBeatIndex].time<t-.01;)this.nextBeatIndex++}_stopMetronome(){this.metronomeScheduleInterval&&(clearInterval(this.metronomeScheduleInterval),this.metronomeScheduleInterval=null)}_stopLeadIn(){this.leadInInterval&&(clearInterval(this.leadInInterval),this.leadInInterval=null)}_pauseLeadIn(){this._stopLeadIn()}_resumeLeadIn(){if(!this.leadInData||this.leadInProgress===null)return;this.state="lead-in";const t=this.audioEngine.audioContext.currentTime,l=this.leadInProgress*this.leadInData.duration;this.leadInStartTime=t-l,this._startLeadInScheduling(this.metronomeConfig.enabled),this._startTimeUpdateLoop()}_startTimeUpdateLoop(){this.timeUpdateInterval||(this.timeUpdateInterval=setInterval(()=>{if(this.state==="lead-in"){const t={currentTime:this.frozenTime,effectiveTime:this.frozenTime,leadInProgress:this.leadInProgress||0};if(this.measuredLatencyMs){const l=this.measuredLatencyMs/1e3;t.audioTime=Math.max(0,this.frozenTime-l),t.latencyMs=this.measuredLatencyMs}this._emitEvent("timeupdate",t)}else this.state},100))}_stopTimeUpdateLoop(){this.timeUpdateInterval&&(clearInterval(this.timeUpdateInterval),this.timeUpdateInterval=null)}_emitEvent(t,l){(this.eventBus.all.get(t)||[]).forEach(e=>{try{e(l)}catch(n){console.error(`Error in ${t} event listener:`,n)}})}_scheduleBeatAudible(t){if(!this.measuredLatencyMs){const e={...t,latencyMs:0};this._emitEvent("beatAudible",e);return}const l=this.measuredLatencyMs;setTimeout(()=>{if(this.state==="playing"||this.state==="lead-in"){const e={...t,latencyMs:this.measuredLatencyMs};this._emitEvent("beatAudible",e)}},l)}destroy(){this.stop(),this._stopLeadIn(),this._stopMetronome(),this._stopTimeUpdateLoop(),this.metronomeMasterGain&&(this.metronomeMasterGain.disconnect(),this.metronomeMasterGain=null),this.eventBus.all.clear()}_setupPlayerWithAudio(){if(!this._audioEngineReady)throw new Error("Audio engine not ready");if(!this.parsedData)throw new Error("No parsed MIDI data available");const t=this.parsedData.structureMetadata||null,l=new Ee(this.audioEngine,this.parsedData,this.instrumentMap,t);this._setMidiPlayer(l)}_setMidiPlayer(t){this.midiPlayer=t,this.audioEngine=t.audioEngine,this._audioEngineReady=!0,this._completeMidiPlayerSetup()}_completeMidiPlayerSetup(){this._partOutputsMap.clear(),Object.keys(this.midiPlayer.parsedData.parts).sort((t,l)=>{const e=this.midiPlayer.parsedData.parts[t],n=this.midiPlayer.parsedData.parts[l],Q=e.channel!==void 0?e.channel:e.trackIndex,A=n.channel!==void 0?n.channel:n.trackIndex;return Q-A}).forEach(t=>{const l=this.midiPlayer.getPartOutput(t);l&&this._partOutputsMap.set(t,l)}),this._setupEventDelegation(),this.state="ready"}_createDefaultInstrumentMap(t){const l={},e={soprano:{instrument:"choir_aahs",volume:1},alto:{instrument:"choir_aahs",volume:1},tenor:{instrument:"choir_aahs",volume:1},bass:{instrument:"choir_aahs",volume:1},piano:{instrument:"piano",volume:.8},organ:{instrument:"church_organ",volume:.7},strings:{instrument:"string_ensemble_1",volume:.6},flute:{instrument:"flute",volume:.8},trumpet:{instrument:"trumpet",volume:.7}};return Object.keys(t).forEach(n=>{const Q=t[n];if(Q.defaultInstrument!==void 0)l[n]={instrument:Q.defaultInstrument,volume:1};else{const A=n.toLowerCase(),s=e[A]||e.piano;l[n]={instrument:s.instrument,volume:s.volume}}}),l}async captureMetronomeSignal(t={}){if(!this._audioEngineReady)throw new Error("Audio engine not ready. Call setAudioEngine() first.");const l=this.audioEngine.getMetronomeAnalyser();if(!l)throw new Error("Metronome analyser not available for signal capture");const e=t.sampleIntervalMs||2,n=t.captureDurationMs||1500,Q=this.audioEngine.audioContext.currentTime+.1;await this.audioEngine.playMetronomeTick(Q,!0,1);const A=await this._captureAnalyserTimeSeries(l,Q,e,n);return{scheduledTime:Q,samples:A,sampleIntervalMs:e,captureDurationMs:n}}async _performLatencyMeasurement(t,l,e,n){const Q=this.audioEngine.getMetronomeAnalyser();if(!Q)throw new Error("Metronome analyser not available for latency measurement");const A=this.audioEngine.audioContext,s=[];console.log(`Starting calibration: ${t} measurements, ${l}ms sampling, ${e} threshold`);for(let B=0;B<t;B++){const m=A.currentTime+.15;await this.audioEngine.playMetronomeTick(m,!0,1);const h=await this._detectOnsetByThreshold(Q,m,l,e,n);if(h){const o=h.latencyMs;s.push(o),console.log(`Measurement ${B+1}/${t}: ${o.toFixed(1)}ms (RMS: ${h.rms.toFixed(4)}, peak: ${h.peak.toFixed(4)})`)}else console.warn(`Measurement ${B+1}/${t}: detection timeout (no signal above ${e} threshold)`);await new Promise(o=>setTimeout(o,300))}if(s.length===0)throw new Error(`Failed to detect any metronome onsets. Try lowering threshold (current: ${e}) or check audio routing.`);let d=s;if(s.length>=5){const B=[...s].sort((m,h)=>m-h);d=B.slice(Math.floor(B.length*.2),Math.ceil(B.length*.8)),console.log(`Discarded ${s.length-d.length} outliers`)}const i=d.reduce((B,m)=>B+m,0)/d.length,U=Math.sqrt(d.reduce((B,m)=>B+Math.pow(m-i,2),0)/d.length);return console.log(`Average latency: ${i.toFixed(1)}ms ± ${U.toFixed(1)}ms (n=${d.length})`),Math.round(i)}async _detectOnsetByThreshold(t,l,e,n,Q){const A=this.audioEngine.audioContext,s=t.fftSize,d=new Float32Array(s),i=Math.max(0,(l-A.currentTime)*1e3-20);await new Promise(B=>setTimeout(B,i));const U=performance.now();return new Promise(B=>{const m=setInterval(()=>{if(performance.now()-U>Q){clearInterval(m),B(null);return}t.getFloatTimeDomainData(d);let h=0,o=0;for(let u=0;u<s;u++){const V=Math.abs(d[u]);h+=d[u]*d[u],V>o&&(o=V)}const Z=Math.sqrt(h/s);if(Z>=n){clearInterval(m);const u=A.currentTime,V=(u-l)*1e3;B({latencyMs:V,rms:Z,peak:o,detectedTime:u})}},e)})}async _captureAnalyserTimeSeries(t,l,e,n){const Q=this.audioEngine.audioContext,A=t.fftSize,s=new Float32Array(A),d=[],i=performance.now(),U=Math.max(0,(l-Q.currentTime)*1e3-20);return await new Promise(B=>setTimeout(B,U)),new Promise(B=>{const m=setInterval(()=>{if(performance.now()-i-U>=n){clearInterval(m),B(d);return}t.getFloatTimeDomainData(s);let h=0,o=0;for(let V=0;V<A;V++){const p=Math.abs(s[V]);h+=s[V]*s[V],p>o&&(o=p)}const Z=Math.sqrt(h/A),u=Q.currentTime;d.push({time:u,relativeTime:(u-l)*1e3,rms:Z,peak:o})},e)})}}const ia=["spessasynth","lightweight"];class On{constructor(){this._engineType="spessasynth"}setEngineType(t){if(!ia.includes(t))throw new Error(`Invalid audio engine type: "${t}". Must be one of: ${ia.join(", ")}`);this._engineType=t}getEngineType(){return this._engineType}resetToDefault(){this._engineType="spessasynth"}}const oa=new On;class _n{constructor(){this.eventBus=Qa(),this.currentTime=0,this.isPlaying=!1,this.playbackSpeed=1,this.masterVolume=.75,this.metronomeVolume=.7,this.parts=new Map,this.playbackTimer=null,this.lastTimestamp=0,this.audioContext=null,this.audioEngine=null,this.playbackManager=null,this.musicData=null,this.beats=[],this.practiceMarks={},this.songDuration=0,this.maxBar=0,this.masterGain=null,this.metronomeGain=null,this.partGainNodes=new Map,this.partAnalyserNodes=new Map,this.isInitialized=!1}sanitizePartName(t){return!t||typeof t!="string"?"unknown":t.replace(/[\x00-\x1F\x7F-\x9F]/g,"").toLowerCase().trim()}async initializeAudioSystem(t={}){if(this.isInitialized)return;this.audioContext=new(window.AudioContext||window.webkitAudioContext),this.audioContext.state==="suspended"&&await this.audioContext.resume();const l=oa.getEngineType();if(l==="lightweight"?(this.audioEngine=new Hn(this.audioContext),console.log("Using LightweightAudioEngine")):(this.audioEngine=new vn(this.audioContext),console.log("Using SpessaSynthAudioEngine")),this.audioEngine.on("initProgress",e=>{this.eventBus.emit("initProgress",e)}),l==="spessasynth"){const e=t.soundfontUrl?[t.soundfontUrl]:["/FluidR3Mono_GM.sf3","/FluidR3_GM.sf2","/soundfont.sf2"];let n=!1,Q=null;for(const A of e)try{await this.audioEngine.initialize(A),console.log(`Loaded soundfont: ${A}`),n=!0;break}catch(s){console.warn(`Failed to load soundfont ${A}:`,s.message),Q=s}if(!n){const A="No soundfont could be loaded";throw this.eventBus.emit("initProgress",{stage:"error",message:A,error:Q}),new Error(A)}}else try{await this.audioEngine.initialize(),console.log("LightweightAudioEngine initialized")}catch(e){const n="Failed to initialize LightweightAudioEngine";throw this.eventBus.emit("initProgress",{stage:"error",message:n,error:e}),new Error(n)}this.setupMasterAudioGraph(),this.isInitialized=!0,console.log("AudioEngineService initialized successfully")}setupMasterAudioGraph(){this.masterGain=this.audioContext.createGain(),this.masterGain.gain.value=this.masterVolume,this.masterGain.connect(this.audioContext.destination),this.metronomeGain=this.audioContext.createGain(),this.metronomeGain.gain.value=.7,this.metronomeGain.connect(this.audioContext.destination)}async initialize(t,l={}){if(this.isInitialized||await this.initializeAudioSystem(l),this.cleanup(),this.musicData=t,t.midiData)console.log(t),await this.setupMidiPlayback(t.midiData,t.metadata);else{if(this.beats=t.beats||[],this.practiceMarks=t.marks||t.practiceMarks||{},this.beats.length>0){const e=this.beats[this.beats.length-1],n=e.tempo>0?60/e.tempo:.75;this.songDuration=e.time+n,this.maxBar=Math.max(...this.beats.map(Q=>Q.bar))}else this.songDuration=0,this.maxBar=0;this.setupLegacyParts(t.parts||[]),this.eventBus.emit("initialized",{parts:Array.from(this.parts.values())})}}async setupMidiPlayback(t,l){try{this.playbackManager=new Pn(this.audioEngine,{metronome:{enabled:!0,tickInstrument:115,accentInstrument:116,volume:.7},leadIn:{enabled:!0,bars:1},startup:{delayMs:25}});const e=await this.playbackManager.calibrateAudioLatency({measurements:1,sampleIntervalMs:10,threshold:.01,timeout:3e3,silent:!0});console.log(`Measured audio latency: ${e} ms`),this.setupPlaybackManagerEventDelegation(),await this.playbackManager.load(t,l);const n=this.playbackManager.getPartNames();this.setupMidiParts(n),this.eventBus.emit("initialized",{parts:Array.from(this.parts.values())}),await this.setupPartAudioRouting(n),this.setupMetronomeAudioRouting(),this.extractMusicDataFromPlayer(),this.updateSongDurationFromPlayer(),console.log("MIDI playback with PlaybackManager setup complete")}catch(e){throw console.error("Failed to setup MIDI playback:",e),e}}setupMidiParts(t){t.forEach(l=>{const e=this.sanitizePartName(l);this.parts.set(e,{name:l,sanitizedName:e,volume:.75,muted:!1,solo:!1})})}async setupPartAudioRouting(){for(const[t,l]of this.playbackManager.getPartOutputs()){const e=this.audioContext.createGain();e.gain.value=1;const n=this.audioContext.createAnalyser();n.fftSize=256,n.smoothingTimeConstant=.3,l.connect(e),e.connect(n),n.connect(this.masterGain);const Q=this.sanitizePartName(t);this.partGainNodes.set(Q,e),this.partAnalyserNodes.set(Q,n),console.log(`Audio routing established for part: ${t}`)}}setupMetronomeAudioRouting(){this.playbackManager.getMetronomeOutput().connect(this.metronomeGain),console.log("Metronome audio routing established")}extractMusicDataFromPlayer(){try{this.beats=this.playbackManager.getBeats(),this.practiceMarks=this.playbackManager.getPracticeMarks(),this.beats.length>0?this.maxBar=Math.max(...this.beats.map(t=>t.bar)):this.maxBar=0,console.log(`Extracted ${this.beats.length} beats and ${Object.keys(this.practiceMarks).length} practice marks from player`),this.eventBus.emit("musicDataExtracted",{beats:this.beats,practiceMarks:this.practiceMarks,maxBar:this.maxBar})}catch(t){console.warn("Could not extract music data from player:",t),this.beats=[],this.practiceMarks={},this.maxBar=0}}updateSongDurationFromPlayer(){let t=this.playbackManager.getTotalDuration();t&&t>0?(this.songDuration=t,this.musicData&&(this.musicData.duration=t),this.eventBus.emit("durationUpdated",{duration:t})):console.warn("Could not get duration from player")}snapTimeToBarStart(t){try{const l=this.getBarFromTime(t);if(l){const e=this.getTimeFromBar(l.bar,l.repeat);if(e!==null)return e}}catch(l){console.warn("Failed to snap time to bar start:",l)}return t}emitTimeAndBarUpdates(t){this.eventBus.emit("timeChanged",{currentTime:t});const l=this.getBarFromTime(t);l&&this.eventBus.emit("barChanged",l)}setupPlaybackManagerEventDelegation(){this.playbackManager.on("timeupdate",({audioTime:t,leadInProgress:l})=>{this.currentTime=t,this.eventBus.emit("timeChanged",{currentTime:t,leadInProgress:l})}),this.playbackManager.on("beatAudible",({bar:t,beat:l,isLeadIn:e,repeat:n,time:Q})=>{this.eventBus.emit("barChanged",{bar:t,beat:l,repeat:n,time:Q,isLeadIn:e})}),this.playbackManager.on("leadInStarted",({totalBeats:t,duration:l,bars:e})=>{this.eventBus.emit("leadInStarted",{bars:e,totalBeats:t,duration:l})}),this.playbackManager.on("leadInEnded",()=>{this.eventBus.emit("leadInCompleted")}),this.playbackManager.on("playbackStarted",()=>{this.isPlaying=!0,this.eventBus.emit("playbackStateChanged",{isPlaying:!0,currentTime:this.currentTime})}),this.playbackManager.on("playbackPaused",()=>{this.isPlaying=!1,this.eventBus.emit("playbackStateChanged",{isPlaying:!1,currentTime:this.currentTime})}),this.playbackManager.on("playbackStopped",()=>{this.isPlaying=!1,this.eventBus.emit("playbackStateChanged",{isPlaying:!1,currentTime:this.currentTime})}),this.playbackManager.on("playbackEnded",()=>{this.isPlaying=!1,this.eventBus.emit("playbackStateChanged",{isPlaying:!1,currentTime:this.currentTime}),this.eventBus.emit("songEnded",{finalTime:this.currentTime})})}setupLegacyParts(t){t&&t.forEach(l=>{const e=this.sanitizePartName(l.name);this.parts.set(e,{name:l.name,sanitizedName:e,volume:l.volume||.75,muted:!1,solo:!1})})}getCurrentToggleStates(){const t=this.getLeadInSettings();return{metronome:this.metronomeEnabled||!1,leadIn:this.leadInEnabled!==!1,leadInBars:t.bars}}updateToggleStates(t,l){this.setMetronomeEnabled(t),this.leadInEnabled=l}setMetronomeEnabled(t){this.metronomeEnabled=t,this.playbackManager.setMetronomeEnabled(t)}setLeadInBars(t){this.playbackManager.setLeadInBars(t)}setLeadInEnabled(t){this.leadInEnabled=t,this.playbackManager.setLeadInEnabled(t)}getLeadInSettings(){return this.playbackManager.getLeadInSettings()}play(t={}){const l=this.getCurrentToggleStates();t.leadInBars!==void 0&&this.setLeadInBars(t.leadInBars),this.playbackManager.play({leadIn:t.leadIn!==void 0?t.leadIn:l.leadIn,metronome:t.metronome!==void 0?t.metronome:l.metronome})}stop(){this.playbackManager.pause()}pause(){this.stop()}setTime(t){const l=this.snapTimeToBarStart(t);this.currentTime=Math.max(0,l),this.playbackManager.skipToTime(this.currentTime),this.emitTimeAndBarUpdates(this.currentTime)}getCurrentTime(){return this.playbackManager.getCurrentTime()}setBar(t,l=0){const e=Math.max(0,Math.min(this.maxBar,t));this.playbackManager.setBar(e,l);const n=this.getCurrentTime();this.currentTime=n,this.emitTimeAndBarUpdates(n)}goToPracticeMark(t){const l=this.practiceMarks[t];l!==void 0&&(this.setBar(l),this.eventBus.emit("practiceMarkChanged",{mark:t,bar:l}))}setPlaybackSpeed(t){this.playbackSpeed=Math.max(.25,Math.min(2,t)),this.playbackManager.setPlaybackSpeed(t,!1),this.eventBus.emit("speedChanged",{speed:this.playbackSpeed})}setMasterVolume(t){this.masterVolume=Math.max(0,Math.min(1,t)),this.masterGain&&(this.masterGain.gain.value=this.masterVolume),this.eventBus.emit("masterVolumeChanged",{volume:this.masterVolume})}getMasterVolume(){return this.masterVolume}setMetronomeVolume(t){const l=Math.max(0,Math.min(1,t));this.metronomeGain&&(this.metronomeGain.gain.value=l),this.metronomeVolume=l}getMetronomeVolume(){return this.metronomeVolume||.7}setPartVolume(t,l){const e=this.sanitizePartName(t),n=this.parts.get(e);n?(n.volume=Math.max(0,Math.min(1,l)),this.updatePartAudioState(e),this.eventBus.emit("partVolumeChanged",{partName:t,volume:l})):(console.log(`Part not found: "${t}" (sanitized: "${e}")`),console.log("Available parts:",[...this.parts.keys()]))}setPartMuted(t,l){const e=this.sanitizePartName(t),n=this.parts.get(e);n&&(n.muted=l,this.updatePartAudioState(e),this.eventBus.emit("partMutedChanged",{partName:t,muted:l}))}setPartSolo(t,l){const e=this.sanitizePartName(t),n=this.parts.get(e);n&&(n.solo=l,this.updateAllPartsAudioState(),this.eventBus.emit("partSoloChanged",{partName:t,solo:l}))}isPartEffectivelyMuted(t){const l=this.sanitizePartName(t),e=this.parts.get(l);return!e||e.muted?!0:Array.from(this.parts.values()).some(Q=>Q.solo)&&!e.solo}updatePartAudioState(t){const l=this.parts.get(t),e=this.partGainNodes.get(t);if(l&&e){const n=this.isPartEffectivelyMuted(l.name);e.gain.value=n?0:l.volume}}updateAllPartsAudioState(){for(const[t]of this.parts)this.updatePartAudioState(t)}getParts(){return Array.from(this.parts.values())}getPartLevel(t){const l=this.sanitizePartName(t),e=this.partAnalyserNodes.get(l);if(!e)return 0;try{const n=e.frequencyBinCount,Q=new Uint8Array(n);e.getByteFrequencyData(Q);let A=0;for(let d=0;d<n;d++){const i=Q[d]/255;A+=i*i}const s=Math.sqrt(A/n);return Math.min(1,Math.pow(s*2,.7))}catch(n){return console.warn(`Failed to get level for part ${t}:`,n),0}}playLeadIn(t=1){this.setLeadInBars(t),this.playbackManager.play({leadIn:!0,metronome:!0})}playStartingNotes(){console.log(this.parts);const t=[...this.parts.values()],l=t.some(n=>n.solo),e=t.filter(n=>l?n.solo:!n.muted).map(n=>n.name);console.log(t,l,e),this.playbackManager.previewNextNotes({instrument:"piano",delayBetweenParts:.4,duration:.6,velocity:110,partOrder:e})}on(t,l){this.eventBus.on(t,l)}off(t,l){this.eventBus.off(t,l)}getBarFromTime(t){const l=this.playbackManager.midiPlayer.getBeatFromTime(t);return l?{bar:l.bar,beat:l.beat,repeat:l.repeat||0,time:l.time||t}:null}getTimeFromBar(t,l=0){return this.playbackManager.midiPlayer.getTimeFromBar(t,l)}allSoundsOff(){this.playbackManager&&this.playbackManager.allSoundsOff()}cleanup(){if(this.playbackManager)try{this.playbackManager.pause()}catch{}if(this.playbackManager&&this.metronomeGain)try{const t=this.playbackManager.getMetronomeOutput();t&&t.disconnect(this.metronomeGain)}catch{}if(this.partGainNodes.forEach(t=>{try{t.disconnect()}catch{}}),this.partAnalyserNodes.forEach(t=>{try{t.disconnect()}catch{}}),this.playbackManager){try{this.playbackManager.destroy()}catch{}this.playbackManager=null}this.parts.clear(),this.partGainNodes.clear(),this.partAnalyserNodes.clear(),this.beats=[],this.practiceMarks={},this.songDuration=0,this.maxBar=0}destroy(){this.cleanup(),this.audioEngine&&this.audioEngine.destroy(),this.audioContext&&this.audioContext.state!=="closed"&&this.audioContext.close(),this.eventBus.all.clear()}}const T=new _n;function bl(a={}){const t=nl(),l=Al(),e=Ve(),n={soundfontUrl:a.soundfontUrl},Q=({currentTime:b})=>{t.setCurrentTime(b)},A=({isPlaying:b})=>{t.setPlaybackState(b),e.setTransportState(b?"playing":"stopped"),!b&&t.isLeadInActive&&(t.setLeadInActive(!1),T.emitTimeAndBarUpdates(t.currentTime))},s=b=>{b&&(t.isLeadInActive?b.isLeadIn&&b.beat!==void 0&&t.setCurrentBar(null,b.beat,null):(t.setCurrentBar(b.bar,b.beat,b.repeat),e.updateLastBarPosition(b.bar)))},d=({speed:b})=>{t.setPlaybackSpeed(b)},i=({volume:b})=>{t.setMasterVolume(b)},U=({partName:b,volume:O})=>{t.setPartVolume(b,O)},B=({partName:b,muted:O})=>{t.setPartMuted(b,O)},m=({partName:b,solo:O})=>{t.setPartSolo(b,O)},h=({bars:b})=>{t.setLeadInActive(!0,b)},o=()=>{t.setLeadInActive(!1)},Z=()=>{t.setStartingNotesActive(!0)},u=()=>{t.setStartingNotesActive(!1)},V=({mark:b})=>{e.updateLastPracticeMarkUsed(b)},p=({parts:b})=>{t.initializeParts(b),l.setParts(b)},v=({finalTime:b})=>{t.setPlaybackState(!1),e.setTransportState("stopped"),console.log(`Song ended at time: ${b}`)},E=({duration:b})=>{console.log("Updating total duration in store to:",b),l.setTotalDuration(b)},k=({beats:b,practiceMarks:O,maxBar:Wt})=>{console.log(`Updating music data store with ${b.length} beats and ${Object.keys(O).length} practice marks`),l.updateBeats(b),l.practiceMarks=O,l.maxBar=Wt},H=()=>{T.on("timeChanged",Q),T.on("playbackStateChanged",A),T.on("barChanged",s),T.on("speedChanged",d),T.on("masterVolumeChanged",i),T.on("partVolumeChanged",U),T.on("partMutedChanged",B),T.on("partSoloChanged",m),T.on("leadInStarted",h),T.on("leadInCompleted",o),T.on("startingNotesStarted",Z),T.on("startingNotesCompleted",u),T.on("practiceMarkChanged",V),T.on("initialized",p),T.on("songEnded",v),T.on("durationUpdated",E),T.on("musicDataExtracted",k)},D=()=>{T.off("timeChanged",Q),T.off("playbackStateChanged",A),T.off("barChanged",s),T.off("speedChanged",d),T.off("masterVolumeChanged",i),T.off("partVolumeChanged",U),T.off("partMutedChanged",B),T.off("partSoloChanged",m),T.off("leadInStarted",h),T.off("leadInCompleted",o),T.off("startingNotesStarted",Z),T.off("startingNotesCompleted",u),T.off("practiceMarkChanged",V),T.off("initialized",p),T.off("songEnded",v),T.off("durationUpdated",E),T.off("musicDataExtracted",k)};(()=>{F.watchEffect(()=>{const b=t.masterVolume;try{T.getMasterVolume()!==b&&T.setMasterVolume(b)}catch(O){console.warn("Master volume sync skipped during initialization:",O.message)}}),F.watchEffect(()=>{const b=t.metronomeVolume;try{T.getMetronomeVolume()!==b&&T.setMetronomeVolume(b)}catch(O){console.warn("Metronome volume sync skipped during initialization:",O.message)}})})();const C=async b=>{try{if(t.setLoaded(!1),H(),l.loadMusicData(b),await T.initialize(b,n),e.buildFixedNavigationPoints(),!b.midiData&&b.beats&&b.beats.length>0){const O=b.beats[0];t.setCurrentBar(O.bar,O.beat,O.repeat),T.setTime(O.time)}T.updateToggleStates(t.metronomeEnabled,t.leadInEnabled),t.setLoaded(!0)}catch(O){throw console.error("Failed to initialize audio engine:",O),t.setLoaded(!1),O}},J=()=>{const b=t.currentBar,O=t.currentRepeat,Wt=t.currentTime;e.setLastPlayStart(b,O,Wt),e.setNavigationAction("play"),T.play()},K=()=>{e.setNavigationAction("pause"),T.stop()},j=()=>{e.setNavigationAction("pause"),T.pause()},M=b=>{e.setNavigationAction("manual"),T.setTime(b)},ct=(b,O=0)=>{e.setNavigationAction("manual"),T.setBar(b,O)},X=b=>{T.goToPracticeMark(b)},G=b=>{T.setPlaybackSpeed(b)},N=b=>{T.setMasterVolume(b)},x=(b,O)=>{T.setPartVolume(b,O)},at=(b,O)=>{T.setPartMuted(b,O)},nt=(b,O)=>{T.setPartSolo(b,O)},ut=(b=1)=>{T.playLeadIn(b)},Mt=()=>{T.playStartingNotes()},yt=(b,O=!0,Wt=0)=>{O&&e.leadInEnabled?(ct(b,Wt),ut(e.leadInBars)):(ct(b,Wt),J())},zt=(b,O=!0)=>{const Wt=l.getBarForMark(b);Wt&&yt(Wt,O)},Kt=()=>{const b=!t.metronomeEnabled;return t.setMetronomeEnabled(b),T.setMetronomeEnabled(b),b},Ft=()=>{const b=!t.leadInEnabled;return t.setLeadInEnabled(b),T.updateToggleStates(t.metronomeEnabled,b),b},_=()=>{T.stop(),t.setLoaded(!1),l.clear(),console.log("Audio mixer reset - ready for new score")};return F.onUnmounted(()=>{D()}),{initialize:C,reset:_,play:J,stop:K,pause:j,setTime:M,setBar:ct,goToPracticeMark:X,setPlaybackSpeed:G,setMasterVolume:N,setPartVolume:x,setPartMuted:at,setPartSolo:nt,getPartLevel:b=>T.getPartLevel(b),playLeadIn:ut,playStartingNotes:Mt,toggleMetronome:Kt,toggleLeadIn:Ft,setMetronomeEnabled:b=>{t.setMetronomeEnabled(b),T.setMetronomeEnabled(b)},playFromBar:yt,playFromMark:zt,audioState:t,musicData:l,playbackState:e,audioEngine:T}}const $n=["aria-label"],Fa=Lt({__name:"PartControl",props:F.mergeModels({name:{type:String,required:!0},level:{type:Number,default:0,validator:a=>a>=0&&a<=1}},{volume:{default:.75},volumeModifiers:{},mute:{default:!1},muteModifiers:{},solo:{default:!1},soloModifiers:{}}),emits:["update:volume","update:mute","update:solo"],setup(a){F.useCssVars(o=>({"03f87250":i.value}));const t=a;nl();const l=bl(),e=F.useModel(a,"volume"),n=F.useModel(a,"mute"),Q=F.useModel(a,"solo");F.watch(e,o=>{l.setPartVolume(t.name,o)}),F.watch(n,o=>{l.setPartMuted(t.name,o),o&&(Q.value=!1)}),F.watch(Q,o=>{l.setPartSolo(t.name,o),o&&(n.value=!1)});const A=F.useTemplateRef("el"),{width:s,height:d}=al(A),i=F.computed(()=>Math.min(s.value,d.value)+"px"),U=F.computed(()=>s.value>d.value?"mobile":s.value<60?"tablet":"desktop");let B=null;const m=F.ref(0);F.onMounted(()=>{B=setInterval(()=>{if(n.value)m.value=0;else try{m.value=l.getPartLevel(t.name)}catch{Ze("randomLevelIndicators")?m.value=Math.random()*e.value:m.value=0}},16)}),F.onUnmounted(()=>{B&&(clearInterval(B),B=null)});const h=o=>{if(["ArrowUp","ArrowRight","ArrowDown","ArrowLeft"].includes(o.key)){o.preventDefault(),o.stopPropagation();const Z=o.key==="ArrowUp"||o.key==="ArrowRight"?.1:-.1;e.value=Math.max(0,Math.min(1,e.value+Z))}else o.key==="m"&&!o.shiftKey?(o.preventDefault(),o.stopPropagation(),n.value=!n.value):o.key==="s"&&!o.shiftKey&&(o.preventDefault(),o.stopPropagation(),Q.value=!Q.value)};return(o,Z)=>(F.openBlock(),F.createElementBlock("div",{ref_key:"el",ref:A,class:F.normalizeClass([U.value,"part"]),tabindex:"0",role:"group","aria-label":`${a.name} part controls`,onKeydown:h},[Z[3]||(Z[3]=F.createElementVNode("div",{class:"focus"},null,-1)),F.createVNode(Aa,{class:"tri",mute:n.value,"onUpdate:mute":Z[0]||(Z[0]=u=>n.value=u),solo:Q.value,"onUpdate:solo":Z[1]||(Z[1]=u=>Q.value=u),tabindex:"-1"},null,8,["mute","solo"]),F.createVNode(Re,{align:"left",class:"name"},{default:F.withCtx(()=>[F.createTextVNode(F.toDisplayString(a.name),1)]),_:1}),F.createVNode(kl,{level:m.value,"show-level":!0,class:"vol",value:e.value,"onUpdate:value":Z[2]||(Z[2]=u=>e.value=u),step:.01,tabindex:"-1"},null,8,["level","value"])],42,$n))}},[["__scopeId","data-v-67bb489c"]]),tA={class:"mark"},lA={class:"rpt"},eA={class:"beat-ind"},aA={class:"beat"},nA={key:1,class:"mark-grid-container"},AA={class:"mark-grid"},QA=["onClick"],Ua=Lt({__name:"BarInput",setup(a){F.useCssVars(X=>({77574882:V.value,"188cd0ae":p.value}));const t=F.useTemplateRef("el"),l=F.useTemplateRef("rpt"),{width:e,height:n}=al(t),Q=Al(),A=nl(),s=bl(),d=F.ref("1"),i=F.ref("A"),U=F.ref(0),B=F.ref(2),m=F.ref(!1),h=F.ref(!1),o=F.ref(!1),Z=F.ref(!0);let u=null;F.watch(()=>{var X;return((X=Q.beats)==null?void 0:X.length)>0},X=>{console.log(X),X&&!m.value&&(d.value=A.currentBar.toString(),U.value=A.currentRepeat,B.value=Q.getRepeatCountForBar(A.currentBar),k(A.currentBar),m.value=!0)}),F.watch(()=>A.currentBar,X=>{B.value=Q.getRepeatCountForBar(X)}),F.watch(d,()=>{d.value=d.value.replace(/\D/g,""),d.value.length>3&&(d.value=d.value.slice(0,3))}),F.watch(()=>A.currentBar,X=>{d.value=X.toString(),k(X)}),F.watch(()=>A.currentBeat,()=>{Z.value=!0,setTimeout(()=>{Z.value=!1},50)}),F.watch(h,()=>{h.value&&M()});const V=F.computed(()=>Math.min(n.value/2.25,e.value/4.5)+"px"),p=F.computed(()=>Math.min(e.value/15,n.value/6.4)+"px"),v=F.computed(()=>Object.keys(Q.practiceMarks).sort()),E=F.computed(()=>v.value.length>0);function k(X){const G=Object.keys(Q.practiceMarks).filter(N=>Q.practiceMarks[N]<=X).sort((N,x)=>Q.practiceMarks[x]-Q.practiceMarks[N]);G.length>0&&(i.value=G[0])}function H(){var G;const X=parseInt(d.value);if(~isNaN(X)){D(X);const N=(G=t.value)==null?void 0:G.querySelector(".bar-input");N&&N.blur(),t.value&&t.value.focus()}}function D(X){s.setBar(X,0)}function y(X,G){G&&G.stopPropagation(),i.value=X,h.value=!1,s.goToPracticeMark(X),t.value&&t.value.blur()}function C(){B.value>1&&(o.value=!0),A.currentRepeat<B.value&&s.setBar(A.currentBar,A.currentRepeat+1)}function J(){B.value>1&&(o.value=!0),A.currentRepeat>1&&s.setBar(A.currentBar,A.currentRepeat-1)}function K(X){E.value&&(X.stopPropagation(),o.value=!1,h.value=!h.value)}function j(X){var G,N;(G=t.value)!=null&&G.contains(X.target)||(h.value=!1),(N=l.value)!=null&&N.contains(X.target)||(o.value=!1)}function M(){h.value&&setTimeout(()=>{var N,x;const X=(N=t.value)==null?void 0:N.querySelector(".mark-grid"),G=(x=t.value)==null?void 0:x.querySelector(".mark-option.selected");if(G&&X){const at=X.getBoundingClientRect(),nt=G.getBoundingClientRect(),ut=nt.left-at.left-at.width/2+nt.width/2;X.scrollLeft=Math.max(0,X.scrollLeft+ut)}},50)}F.onMounted(()=>{document.addEventListener("click",j),Ze("beatAnimation")&&(u=setInterval(()=>{const X=A.currentBeat%Q.timeSignature+1;A.setCurrentBar(A.currentBar,X,A.currentRepeat)},800))}),F.onUnmounted(()=>{document.removeEventListener("click",j),u&&(clearInterval(u),u=null)});const ct=X=>{var N;const G=(N=t.value)==null?void 0:N.querySelector(".bar-input");if(document.activeElement!==G)if(/^[a-z]$/.test(X.key)&&!X.ctrlKey&&!X.metaKey&&!X.shiftKey){X.preventDefault(),X.stopPropagation();const x=X.key.toUpperCase();v.value.includes(x)&&y(x,null)}else X.key==="ArrowUp"?(X.preventDefault(),X.stopPropagation(),C()):X.key==="ArrowDown"?(X.preventDefault(),X.stopPropagation(),J()):X.key==="Enter"&&(X.preventDefault(),X.stopPropagation(),H())};return(X,G)=>(F.openBlock(),F.createElementBlock("div",{ref_key:"el",ref:t,class:F.normalizeClass(["outer",{pulse:Z.value,"mark-selecting":h.value}]),tabindex:"0",role:"group","aria-label":"Musical navigation",onKeydown:ct},[G[6]||(G[6]=F.createElementVNode("div",{class:"frame"},null,-1)),F.createElementVNode("div",{class:F.normalizeClass(["mark-input",{empty:!i.value,edit:h.value,disabled:!E.value}]),tabindex:"-1",onClick:K},[F.createElementVNode("div",tA,F.toDisplayString(E.value?i.value:"-"),1)],2),G[7]||(G[7]=F.createElementVNode("div",{class:"mark-title"},"Mark",-1)),h.value?F.createCommentVNode("",!0):(F.openBlock(),F.createElementBlock(F.Fragment,{key:0},[F.withDirectives(F.createElementVNode("input",{type:"text",class:"bar-input","onUpdate:modelValue":G[0]||(G[0]=N=>d.value=N),inputmode:"decimal",pattern:"\\d*",tabindex:"-1",onChange:H,onKeyup:F.withKeys(H,["enter"])},null,544),[[F.vModelText,d.value]]),G[3]||(G[3]=F.createElementVNode("div",{class:"bar-title"},"Bar",-1)),F.createElementVNode("div",{ref_key:"rpt",ref:l,class:F.normalizeClass(["rpt-input",{edit:o.value,available:B.value>1}])},[F.createElementVNode("div",lA,F.toDisplayString(F.unref(A).currentRepeat||"-"),1),(F.openBlock(),F.createElementBlock("svg",{class:F.normalizeClass(["inc",{disabled:F.unref(A).currentRepeat>=B.value}]),viewBox:"0 -100 100 100",onClick:F.withModifiers(C,["prevent"])},G[1]||(G[1]=[F.createElementVNode("path",{d:"m10-20 40-60 40 60H10Z"},null,-1)]),2)),(F.openBlock(),F.createElementBlock("svg",{class:F.normalizeClass(["dec",{disabled:F.unref(A).currentRepeat<=1}]),viewBox:"0 -100 100 100",onClick:F.withModifiers(J,["prevent"])},G[2]||(G[2]=[F.createElementVNode("path",{d:"m10-80 40 60 40-60H10Z"},null,-1)]),2))],2),G[4]||(G[4]=F.createElementVNode("div",{class:"rpt-title"},"Rpt",-1)),F.createElementVNode("div",eA,[F.createElementVNode("div",aA,F.toDisplayString(F.unref(A).currentBeat),1)]),G[5]||(G[5]=F.createElementVNode("div",{class:"beat-title"},"Beat",-1))],64)),h.value?(F.openBlock(),F.createElementBlock("div",nA,[F.createElementVNode("div",AA,[(F.openBlock(!0),F.createElementBlock(F.Fragment,null,F.renderList(v.value,N=>(F.openBlock(),F.createElementBlock("div",{key:N,class:F.normalizeClass(["mark-option",{selected:N===i.value}]),onClick:x=>y(N,x)},F.toDisplayString(N),11,QA))),128))])])):F.createCommentVNode("",!0)],34))}},[["__scopeId","data-v-7856f4ec"]]),sA={class:"frame"},dA={class:"title"},be=Lt({__name:"BaseNumericInput",props:F.mergeModels({title:{type:String,required:!0},color:{type:String,default:"#336"},focusColor:{type:String,default:"#558"},textColor:{type:String,default:"#aad"},backgroundColor:{type:String,default:"#111117"},sliderMax:{type:Number,default:1},sliderMin:{type:Number,default:0},thumbLength:{type:Number,default:2},formatValue:{type:Function,default:a=>a.toString()},parseValue:{type:Function,default:a=>parseFloat(a)},validateInput:{type:Function,default:a=>a.replace(/[^0-9.]/g,"")},transformSliderToDisplay:{type:Function,default:a=>a},transformDisplayToSlider:{type:Function,default:a=>a},maxChars:{type:Number,default:null}},{value:{default:.5},valueModifiers:{}}),emits:["update:value"],setup(a){F.useCssVars(U=>({"391e6684":a.textColor,"6eae8f5d":a.backgroundColor,"6ee151eb":a.color,"29a40ccc":d.value,"7366daab":s.value,"0f87383a":a.focusColor}));const t=a,l=F.useTemplateRef("el"),{width:e,height:n}=al(l),Q=F.useModel(a,"value"),A=F.ref(t.formatValue(t.transformSliderToDisplay(Q.value)));F.watch(Q,()=>{const U=t.transformSliderToDisplay(Q.value);A.value=t.formatValue(U)}),F.watch(A,()=>{A.value=t.validateInput(A.value),t.maxChars&&A.value.length>t.maxChars&&(A.value=A.value.slice(0,t.maxChars))});const s=F.computed(()=>Math.min(n.value/2.25,e.value/2.2)+"px"),d=F.computed(()=>Math.min(e.value/3,n.value/6.4)+"px");function i(){const U=t.parseValue(A.value),B=t.transformDisplayToSlider(U);Q.value=Math.min(Math.max(B,t.sliderMin),t.sliderMax)}return(U,B)=>(F.openBlock(),F.createElementBlock("div",{class:"outer",ref_key:"el",ref:l},[F.createElementVNode("div",sA,[F.withDirectives(F.createElementVNode("input",{type:"text",class:"input","onUpdate:modelValue":B[0]||(B[0]=m=>A.value=m),inputmode:"decimal",pattern:"\\d*",onChange:i},null,544),[[F.vModelText,A.value]]),F.createElementVNode("div",dA,F.toDisplayString(a.title),1)]),F.createVNode(kl,{class:"slider",value:Q.value,"onUpdate:value":B[1]||(B[1]=m=>Q.value=m),"thumb-length":a.thumbLength,max:a.sliderMax,min:a.sliderMin,tabindex:"-1"},null,8,["value","thumb-length","max","min"])],512))}},[["__scopeId","data-v-3c97bdb4"]]),Ba={__name:"SpeedInput",setup(a){const t=nl(),l=bl(),e=F.computed({get:()=>Math.log2(t.playbackSpeed)*.5+.5,set:i=>{const U=Math.floor(Math.pow(2,i*2-1)*20+.5)*.05;l.setPlaybackSpeed(U)}}),n=i=>Math.floor(Math.pow(2,i*2-1)*20+.5)*5+"",Q=i=>parseFloat(i),A=i=>i.replace(/\D/g,""),s=i=>i,d=i=>{const U=Math.log2(i/100)*.5+.5;return Math.min(Math.max(U,0),1)};return(i,U)=>(F.openBlock(),F.createBlock(be,{value:e.value,"onUpdate:value":U[0]||(U[0]=B=>e.value=B),title:"Speed",color:"#336","text-color":"#aad","format-value":n,"parse-value":Q,"validate-input":A,"transform-slider-to-display":s,"transform-display-to-slider":d,"thumb-length":2,"max-chars":3},null,8,["value"]))}},ca={__name:"TimeInput",setup(a){const t=nl(),l=Al(),e=bl(),n=i=>i.toFixed(1),Q=i=>parseFloat(i),A=i=>i.replace(/[^0-9.]/g,""),s=i=>i,d=i=>i;return(i,U)=>(F.openBlock(),F.createBlock(be,{value:F.unref(t).currentTime,"onUpdate:value":[U[0]||(U[0]=B=>F.unref(t).currentTime=B),F.unref(e).setTime],title:"Time",color:"#344","focus-color":"#556868","text-color":"#acc","background-color":"#111117","slider-max":F.unref(l).totalDuration,"slider-min":0,"format-value":n,"parse-value":Q,"validate-input":A,"transform-slider-to-display":s,"transform-display-to-slider":d,"thumb-length":2},null,8,["value","onUpdate:value","slider-max"]))}},iA=["title"],oA={class:"inner"},Bl=Lt({__name:"AudioButton",props:{disabled:{type:Boolean,default:!1},title:{type:String,default:""}},setup(a){const t=a,l=F.ref(!1),e=()=>{t.disabled||(l.value=!0)},n=()=>l.value=!1;return(Q,A)=>(F.openBlock(),F.createElementBlock("div",{title:a.title,class:F.normalizeClass(["button-outer",{down:l.value,disabled:a.disabled}]),onPointerdown:e,onPointerup:n,onPointerleave:n},[F.createElementVNode("div",oA,[F.renderSlot(Q.$slots,"default",{},void 0,!0)])],42,iA))}},[["__scopeId","data-v-77d8694a"]]),FA={class:"outer"},UA={class:"title"},BA={class:"buttons",role:"toolbar","aria-label":"Transport controls"},cA={class:"icon",viewBox:"0 0 48 48"},hA=["d"],ha=Lt({__name:"MixerControls",props:{externalMenuControl:{type:Boolean,default:!1}},emits:["menu-click"],setup(a,{emit:t}){const l=a,e=t,n=Al(),Q=nl(),A=Ve(),s=bl();function d(){Q.isPlayingOrLeadIn?s.stop():s.play()}function i(){const y=A.navigationPoints;if(A.lastNavigationAction==="pause"&&A.lastPlayStartTime!==null){s.setTime(A.lastPlayStartTime),A.setNavigationAction(null);return}const C=Q.currentTime,J=y.filter(K=>K.time<C-.01).pop();J&&s.setTime(J.time)}function U(){const y=A.navigationPoints,C=Q.currentTime,J=y.find(K=>K.time>C+.01);J&&s.setTime(J.time)}function B(){s.playStartingNotes()}const m=F.computed(()=>Q.metronomeEnabled),h=F.computed(()=>Q.leadInEnabled),o=F.ref(!1),Z=F.ref(null);function u(){if(l.externalMenuControl){e("menu-click"),s.audioEngine.initializeAudioSystem().catch(y=>{console.warn("Audio system pre-initialization failed:",y)});return}o.value=!o.value,o.value&&(s.audioEngine.initializeAudioSystem().catch(y=>{console.warn("Audio system pre-initialization failed:",y)}),setTimeout(()=>{var C;const y=(C=Z.value)==null?void 0:C.querySelector('button, a, [tabindex="0"]');y&&y.focus()},0))}function V(){o.value=!1}function p(y){Z.value&&!Z.value.contains(y.target)&&V()}F.onMounted(()=>{document.addEventListener("click",p),document.addEventListener("keydown",D)}),F.onUnmounted(()=>{document.removeEventListener("click",p),document.removeEventListener("keydown",D)});function v(){s.toggleMetronome()}function E(){s.toggleLeadIn()}const k=F.computed({get:()=>Q.masterVolume,set:y=>Q.setMasterVolume(y)}),H=F.computed({get:()=>Q.metronomeVolume,set:y=>Q.setMetronomeVolume(y)}),D=y=>{const C=y.target;if(!(C.matches('input[type="text"]')&&(C.closest(".time")||C.closest(".speed")))){if(y.key==="Escape")y.preventDefault(),u();else if(y.key==="B"&&y.shiftKey){y.preventDefault();const J=document.querySelector(".bar");J&&J.focus()}else if(y.key==="T"&&y.shiftKey){y.preventDefault();const J=document.querySelector(".time input");J&&J.focus()}else if(y.key==="S"&&y.shiftKey){y.preventDefault();const J=document.querySelector(".speed input");J&&J.focus()}else if(y.key===" ")y.preventDefault(),d();else if(y.key==="PageUp")y.preventDefault(),U();else if(y.key==="PageDown")y.preventDefault(),i();else if(y.key==="M"&&y.shiftKey)y.preventDefault(),v();else if(y.key==="L"&&y.shiftKey)y.preventDefault(),E();else if(y.key==="N"&&y.shiftKey)y.preventDefault(),Q.isPlayingOrLeadIn||B();else if(/^[0-9]$/.test(y.key)&&!y.ctrlKey&&!y.metaKey&&!y.shiftKey){const J=document.querySelector(".bar .bar-input");if(document.activeElement===J)return;y.preventDefault(),J&&(J.value=y.key,J.focus(),J.setSelectionRange(1,1),J.dispatchEvent(new Event("input",{bubbles:!0})))}else if(/^[a-z]$/.test(y.key)&&!y.ctrlKey&&!y.metaKey&&!y.shiftKey){y.preventDefault();const J=document.querySelector(".bar");if(J){J.focus();const K=new KeyboardEvent("keydown",{key:y.key,code:y.code,bubbles:!0,cancelable:!0});J.dispatchEvent(K)}}}};return(y,C)=>(F.openBlock(),F.createElementBlock("div",FA,[F.createElementVNode("div",UA,[F.createVNode(Re,{class:"text",align:"centre",overflow:"scroll"},{default:F.withCtx(()=>[F.createTextVNode(F.toDisplayString(F.unref(n).title),1)]),_:1}),F.createElementVNode("div",{class:"menu-container",ref_key:"menuRef",ref:Z},[(F.openBlock(),F.createElementBlock("svg",{class:"menu",viewBox:"0 -960 960 960",onClick:u},C[2]||(C[2]=[F.createElementVNode("path",{d:"M120-240v-80h720v80H120Zm0-200v-80h720v80H120Zm0-200v-80h720v80H120Z"},null,-1)]))),!a.externalMenuControl&&o.value&&y.$slots.menu?(F.openBlock(),F.createElementBlock("div",{key:0,class:"dropdown-menu",onClick:V},[F.renderSlot(y.$slots,"menu",{},void 0,!0)])):F.createCommentVNode("",!0)],512)]),F.createVNode(kl,{class:"main",colour:"red",step:.01,keystep:.1,value:k.value,"onUpdate:value":C[0]||(C[0]=J=>k.value=J)},null,8,["value"]),C[8]||(C[8]=F.createElementVNode("div",{class:"main-t"},"Main",-1)),C[9]||(C[9]=F.createElementVNode("div",{class:"main-focus"},null,-1)),F.createVNode(kl,{class:"tick",colour:"blue",step:.01,keystep:.1,value:H.value,"onUpdate:value":C[1]||(C[1]=J=>H.value=J)},null,8,["value"]),C[10]||(C[10]=F.createElementVNode("div",{class:"tick-t"},"Tick",-1)),C[11]||(C[11]=F.createElementVNode("div",{class:"tick-focus"},null,-1)),F.createVNode(Ua,{class:"bar"}),F.createVNode(ca,{class:"time"}),F.createVNode(Ba,{class:"speed"}),F.createElementVNode("div",BA,[F.createVNode(Bl,{title:"Previous Mark",class:"button",tabindex:"-1",onClick:i},{default:F.withCtx(()=>C[3]||(C[3]=[F.createElementVNode("svg",{class:"icon",viewBox:"0 0 48 48"},[F.createElementVNode("path",{d:"M11 36V12h3v24Zm26 0L19.7 24 37 12Z"})],-1)])),_:1,__:[3]}),F.createVNode(Bl,{title:F.unref(Q).isPlayingOrLeadIn?"Pause":"Play",class:"button",tabindex:"-1",onClick:d},{default:F.withCtx(()=>[(F.openBlock(),F.createElementBlock("svg",cA,[F.createElementVNode("path",{d:F.unref(Q).isPlayingOrLeadIn?"M27.4 35.4V12.6h8v22.8Zm-14.8 0V12.6h8.05v22.8Z":"M16 37.85v-28l22 14Z"},null,8,hA)]))]),_:1},8,["title"]),F.createVNode(Bl,{title:"Next Mark",class:"button",tabindex:"-1",onClick:U},{default:F.withCtx(()=>C[4]||(C[4]=[F.createElementVNode("svg",{class:"icon",viewBox:"0 0 48 48"},[F.createElementVNode("path",{d:"M34 36V12h3v24Zm-23 0V12l17.3 12Z"})],-1)])),_:1,__:[4]}),F.createVNode(Bl,{title:"Toggle Metronome",class:"button",tabindex:"-1",onClick:v},{default:F.withCtx(()=>[(F.openBlock(),F.createElementBlock("svg",{class:F.normalizeClass(["icon",m.value?"on":"off"]),viewBox:"-128 -128 768 768"},C[5]||(C[5]=[F.createElementVNode("path",{d:"m 463.84136,154.89339 c -6.42,-6.42 -16.83,-6.42 -23.251,0 -71.31197,70.35135 -136.61146,132.25426 -208.741,199.7 h -105.82 c 23.35495,-140.1063 67.13099,-217.59716 120.727,-318.357996 0.86,-0.803 2.209,-0.801 3.067,-10e-4 20.50653,37.383983 48.51152,88.812606 72.26194,147.190756 1.186,9.002 12.2214,17.4338 23.3242,11.71391 9.002,-1.186 11.1594,-12.2324 9.9724,-21.2344 -21.69905,-53.89113 -30.43965,-85.078342 -83.11454,-161.702266 -13.446,-12.55299965 -34.508,-12.55699965 -47.954,10e-4 C 126.80877,149.30021 96.099465,324.74626 77.091365,474.25139 c -2.829,21.473 13.907,40.535 35.543995,40.535 h 271.311 c 21.661,0 38.373,-19.087 35.544,-40.535 -8.26237,-52.34207 -14.88466,-100.7074 -24.7871,-157.02622 -6.40949,-11.78839 -8.3911,-14.9907 -17.4031,-13.8037 -9.002,1.186 -13.59751,8.0528 -12.41051,17.0548 l 5.66371,34.11712 h -83.159 c 64.35441,-63.86663 129.29308,-130.29894 176.448,-176.449 6.42,-6.42 6.42,-16.83 -10e-4,-23.251 z m -88.956,232.582 12.004,91.074 c 0.112,0.846 -0.148,1.701 -0.708,2.341 -0.566,0.645 -1.38,1.014 -2.235,1.014 h -271.311 c -0.855,0 -1.668,-0.369 -2.231,-1.011 -0.564,-0.643 -0.824,-1.499 -0.712,-2.347 l 12.003,-91.072 h 253.19 z"},null,-1)]),2))]),_:1}),F.createVNode(Bl,{title:"Toggle Lead-in",class:"button",tabindex:"-1",onClick:E},{default:F.withCtx(()=>[(F.openBlock(),F.createElementBlock("svg",{class:F.normalizeClass(["icon",h.value?"on":"off"]),viewBox:"-2 -2 28 28"},C[6]||(C[6]=[F.createElementVNode("path",{d:"m 8.9838564,1.5166215 v 2 h 5.9999996 v -2 z m 2.9999996,3 c -4.9699996,0 -8.9999996,4.0299999 -8.9999996,8.9999995 0,4.97 4.02,9 8.9999996,9 4.98,0 9,-4.03 9,-9 0,-2.12 -0.740703,-4.0693745 -1.970703,-5.6093745 l 1.419922,-1.421875 c -0.43,-0.51 -0.900156,-0.9882031 -1.410156,-1.4082031 l -1.419922,1.4199219 c -1.55,-1.24 -3.499141,-1.9804688 -5.619141,-1.9804688 z m -1.789062,4.7480469 6,4.4999996 -6,4.5 z"},null,-1)]),2))]),_:1}),F.createVNode(Bl,{title:"Starting Notes",class:"button",tabindex:"-1",disabled:F.unref(Q).isPlayingOrLeadIn,onClick:B},{default:F.withCtx(()=>C[7]||(C[7]=[F.createElementVNode("svg",{class:"icon",viewBox:"0 -960 960 960"},[F.createElementVNode("path",{d:"m 306.66667,-360 q -44,0 -75.33334,-31.33333 Q 200,-422.66667 200,-466.66667 q 0,-44 31.33333,-75.33333 31.33334,-31.33333 75.33334,-31.33333 15.33333,0 28.33333,3.66666 13,3.66667 25,11 V -840 h 160 v 106.66667 H 413.33333 v 266.66666 q 0,44 -31.33333,75.33334 Q 350.66667,-360 306.66667,-360 Z"}),F.createElementVNode("path",{d:"m 546.66667,-120 q -44,0 -75.33334,-31.33333 Q 440,-182.66667 440,-226.66667 q 0,-44 31.33333,-75.33333 31.33334,-31.33333 75.33334,-31.33333 15.33333,0 28.33333,3.66666 13,3.66667 25,11 V -600 h 160 v 106.66667 H 653.33333 v 266.66666 q 0,44 -31.33333,75.33334 Q 590.66667,-120 546.66667,-120 Z"})],-1)])),_:1,__:[7]},8,["disabled"])])]))}},[["__scopeId","data-v-070a1a8f"]]),mA={class:"init-progress"},RA={key:0,class:"progress-track"},ZA={class:"message-container"},ma=Lt({__name:"InitializationProgress",props:{stage:{type:String,default:null},message:{type:String,default:""},progress:{type:Number,default:null},hasError:{type:Boolean,default:!1},errorMessage:{type:String,default:null}},setup(a){const t=a,l=F.computed(()=>t.progress!==null),e=F.computed(()=>t.progress===null?0:Math.max(0,Math.min(100,t.progress*100))),n=F.computed(()=>t.hasError?t.errorMessage:t.message);return(Q,A)=>(F.openBlock(),F.createElementBlock("div",mA,[l.value?(F.openBlock(),F.createElementBlock("div",RA,[F.createElementVNode("div",{class:"progress-fill",style:F.normalizeStyle({width:`${e.value}%`})},null,4)])):F.createCommentVNode("",!0),F.createElementVNode("div",ZA,[F.createElementVNode("div",{class:F.normalizeClass(["message",{error:a.hasError}])},F.toDisplayString(n.value),3)])]))}},[["__scopeId","data-v-a9ed87f2"]]),Ra=jt.defineStore("initialization",{state:()=>({currentStage:null,message:"",progress:null,isInitializing:!1,isReady:!1,hasError:!1,errorMessage:null}),actions:{updateProgress(a){this.currentStage=a.stage,this.message=a.message,this.progress=a.progress??null,a.stage==="ready"?(this.isInitializing=!1,this.isReady=!0):(this.isInitializing=!0,this.isReady=!1),this.hasError=!1,this.errorMessage=null},setError(a){this.hasError=!0,this.errorMessage=a,this.isInitializing=!1,this.isReady=!1},reset(){this.currentStage=null,this.message="",this.progress=null,this.isInitializing=!1,this.isReady=!1,this.hasError=!1,this.errorMessage=null},initializeListeners(){T.on("initProgress",a=>{this.updateProgress(a)})}},getters:{shouldShowProgress:a=>a.isInitializing||a.hasError,hasProgressBar:a=>a.progress!==null}}),VA={class:"container"},rA={class:"panel"},EA={key:0,class:"blur"},Za=40,Va=40,ra=100,bA=50,Ea=400,ba=570,ua=570,uA=350,IA=330,WA=360,SA=360,CA=Lt({__name:"MixerLayout",props:{showInitProgress:{type:Boolean,default:!0},externalMenuControl:{type:Boolean,default:!1}},emits:["menu-click"],setup(a,{emit:t}){F.useCssVars(o=>({"3e3bf6e6":B.value,"3e499cb2":m.value,"3a701552":h.value}));const l=a,e=t,n=Al(),Q=nl(),A=Ra();F.onMounted(()=>{A.initializeListeners()});const s=F.useTemplateRef("container"),{width:d}=al(s),i=F.computed(()=>Q.isLoaded),U=F.computed(()=>{const o=d.value,Z=n.parts.length;return o<640||o<Za*Z+Ea?0:o<Va*Z+ba?1:o<ra*Z+ua?2:3}),B=F.computed(()=>{switch(U.value){case 0:return`${uA}px `+`${bA}px `.repeat(n.parts.length);case 1:return`${IA}px`;case 2:return`${WA}px`;default:return`${SA}px`}}),m=F.computed(()=>{switch(U.value){case 0:return"100vw";case 1:return`${Za}px `.repeat(n.parts.length)+`${Ea}px`;case 2:return`${Va}px `.repeat(n.parts.length)+`${ba}px`;default:return`${ra}px `.repeat(n.parts.length)+`${ua}px`}}),h=F.computed(()=>{const o=[...n.parts.keys()];return U.value>0?'"'+o.map(Z=>"part"+Z).join(" ")+' controls"':'"controls" '+o.map(Z=>'"part'+Z+'"').join(" ")});return(o,Z)=>(F.openBlock(),F.createElementBlock("div",{class:"outer",ref_key:"container",ref:s},[F.createElementVNode("div",VA,[F.createElementVNode("div",rA,[(F.openBlock(!0),F.createElementBlock(F.Fragment,null,F.renderList(F.unref(n).parts,(u,V)=>(F.openBlock(),F.createBlock(Fa,{key:u.name,class:F.normalizeClass("part"+V),name:u.name,volume:u.volume,"onUpdate:volume":p=>u.volume=p,solo:u.solo,"onUpdate:solo":p=>u.solo=p,mute:u.mute,"onUpdate:mute":p=>u.mute=p,ref_for:!0,ref:"parts"},null,8,["class","name","volume","onUpdate:volume","solo","onUpdate:solo","mute","onUpdate:mute"]))),128)),F.createVNode(ha,{"external-menu-control":l.externalMenuControl,onMenuClick:Z[0]||(Z[0]=u=>e("menu-click")),class:"controls"},{menu:F.withCtx(()=>[F.renderSlot(o.$slots,"menu",{},void 0,!0)]),_:3},8,["external-menu-control"]),i.value?F.createCommentVNode("",!0):(F.openBlock(),F.createElementBlock("div",EA)),l.showInitProgress&&F.unref(A).shouldShowProgress?(F.openBlock(),F.createBlock(ma,{key:1,stage:F.unref(A).currentStage,message:F.unref(A).message,progress:F.unref(A).progress,"has-error":F.unref(A).hasError,"error-message":F.unref(A).errorMessage},null,8,["stage","message","progress","has-error","error-message"])):F.createCommentVNode("",!0)])])],512))}},[["__scopeId","data-v-cf29d602"]]),gA={class:"outer"},GA={class:"mid"},JA={class:"inner"},pA={key:0,class:"content"},yA=Lt({__name:"Placeholder",props:{colour:{type:String,default:"red"},text:{type:String,default:""}},setup(a){return F.useCssVars(t=>({"66bea586":a.colour})),(t,l)=>(F.openBlock(),F.createElementBlock("div",gA,[F.createElementVNode("div",GA,[F.createElementVNode("div",JA,[a.text||t.$slots.default?(F.openBlock(),F.createElementBlock("div",pA,[F.createTextVNode(F.toDisplayString(a.text)+" ",1),F.renderSlot(t.$slots,"default",{},void 0,!0)])):F.createCommentVNode("",!0)])])]))}},[["__scopeId","data-v-dff76c48"]]),NA={class:"modal-footer"},kA={key:0,class:"dont-remind"},XA=Lt({__name:"KeyboardShortcutsHelp",props:{visible:{type:Boolean,default:!1},showDontRemind:{type:Boolean,default:!1}},emits:["update:visible","dont-remind"],setup(a,{emit:t}){const l=a,e=t,n=F.ref(!1),Q=F.ref(null),A=()=>{n.value&&e("dont-remind",!0),e("update:visible",!1)},s=d=>{d.key==="Escape"&&(d.preventDefault(),d.stopPropagation(),A())};return F.watch(()=>l.visible,async d=>{var i;d&&(await F.nextTick(),(i=Q.value)==null||i.focus())}),(d,i)=>a.visible?(F.openBlock(),F.createElementBlock("div",{key:0,class:"modal-overlay",onClick:A,onKeydown:s},[F.createElementVNode("div",{class:"modal-content shortcuts-help",onClick:i[1]||(i[1]=F.withModifiers(()=>{},["stop"])),role:"dialog","aria-labelledby":"shortcuts-title","aria-modal":"true"},[i[3]||(i[3]=F.createStaticVNode('<h2 id="shortcuts-title" data-v-bfa878a3>Keyboard Shortcuts</h2><div class="shortcuts-container" data-v-bfa878a3><section class="shortcut-group" data-v-bfa878a3><h3 data-v-bfa878a3>Transport Controls</h3><dl data-v-bfa878a3><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>P</kbd></dt><dd data-v-bfa878a3>Play / Pause</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>S</kbd></dt><dd data-v-bfa878a3>Stop</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>B</kbd></dt><dd data-v-bfa878a3>Previous bar</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>F</kbd></dt><dd data-v-bfa878a3>Next bar</dd></div></dl></section><section class="shortcut-group" data-v-bfa878a3><h3 data-v-bfa878a3>Features</h3><dl data-v-bfa878a3><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>M</kbd></dt><dd data-v-bfa878a3>Toggle metronome</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>L</kbd></dt><dd data-v-bfa878a3>Toggle lead-in</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>N</kbd></dt><dd data-v-bfa878a3>Play starting notes</dd></div></dl></section><section class="shortcut-group" data-v-bfa878a3><h3 data-v-bfa878a3>Sliders &amp; Controls</h3><dl data-v-bfa878a3><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>↑</kbd> / <kbd data-v-bfa878a3>→</kbd></dt><dd data-v-bfa878a3>Increase value</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>↓</kbd> / <kbd data-v-bfa878a3>←</kbd></dt><dd data-v-bfa878a3>Decrease value</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Home</kbd></dt><dd data-v-bfa878a3>Set to minimum</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>End</kbd></dt><dd data-v-bfa878a3>Set to maximum</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Page Up</kbd> / <kbd data-v-bfa878a3>Page Down</kbd></dt><dd data-v-bfa878a3>Large adjustment</dd></div></dl></section><section class="shortcut-group" data-v-bfa878a3><h3 data-v-bfa878a3>Navigation</h3><dl data-v-bfa878a3><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Tab</kbd></dt><dd data-v-bfa878a3>Next control</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>Tab</kbd></dt><dd data-v-bfa878a3>Previous control</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Enter</kbd> / <kbd data-v-bfa878a3>Space</kbd></dt><dd data-v-bfa878a3>Activate button</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Escape</kbd></dt><dd data-v-bfa878a3>Close dialog / menu</dd></div></dl></section><section class="shortcut-group" data-v-bfa878a3><h3 data-v-bfa878a3>Help</h3><dl data-v-bfa878a3><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>?</kbd></dt><dd data-v-bfa878a3>Show this help</dd></div></dl></section></div>',2)),F.createElementVNode("div",NA,[a.showDontRemind?(F.openBlock(),F.createElementBlock("label",kA,[F.withDirectives(F.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":i[0]||(i[0]=U=>n.value=U)},null,512),[[F.vModelCheckbox,n.value]]),i[2]||(i[2]=F.createTextVNode(" Don't show this again "))])):F.createCommentVNode("",!0),F.createElementVNode("button",{onClick:A,class:"close-button",ref_key:"closeButton",ref:Q},"Close",512)])])],32)):F.createCommentVNode("",!0)}},[["__scopeId","data-v-bfa878a3"]]);class Ia{constructor(){this.eventBus=Qa(),this.currentTime=0,this.isPlaying=!1,this.playbackSpeed=1,this.masterVolume=.75,this.parts=new Map,this.playbackTimer=null,this.lastTimestamp=0}initialize(t){if(this.musicData=t,this.beats=t.beats||[],this.practiceMarks=t.practiceMarks||{},this.beats.length>0){const l=this.beats[this.beats.length-1],e=l.tempo>0?60/l.tempo:.75;this.songDuration=l.time+e,this.maxBar=Math.max(...this.beats.map(n=>n.bar))}else this.songDuration=0,this.maxBar=0;t.parts&&t.parts.forEach(l=>{this.parts.set(l.name,{name:l.name,volume:l.volume||.75,muted:!1})}),this.eventBus.emit("initialized",{parts:Array.from(this.parts.values())})}play(){this.isPlaying||(this.isPlaying=!0,this.lastTimestamp=performance.now(),this.startPlaybackTimer(),this.eventBus.emit("playbackStateChanged",{isPlaying:!0,currentTime:this.currentTime}))}stop(){this.isPlaying&&(this.isPlaying=!1,this.stopPlaybackTimer(),this.eventBus.emit("playbackStateChanged",{isPlaying:!1,currentTime:this.currentTime}))}pause(){this.stop()}setTime(t){this.currentTime=Math.max(0,t),this.eventBus.emit("timeChanged",{currentTime:this.currentTime});const l=this.getBarFromTime(this.currentTime);l&&this.eventBus.emit("barChanged",l)}getCurrentTime(){return this.currentTime}setBar(t,l=0){const e=this.getTimeFromBar(t,l);e!==null&&this.setTime(e)}goToPracticeMark(t){const l=this.practiceMarks[t];l!==void 0&&(this.setBar(l),this.eventBus.emit("practiceMarkChanged",{mark:t,bar:l}))}setPlaybackSpeed(t){this.playbackSpeed=Math.max(.25,Math.min(2,t)),this.eventBus.emit("speedChanged",{speed:this.playbackSpeed})}getPlaybackSpeed(){return this.playbackSpeed}setMasterVolume(t){this.masterVolume=Math.max(0,Math.min(1,t)),this.eventBus.emit("masterVolumeChanged",{volume:this.masterVolume})}getMasterVolume(){return this.masterVolume}setPartVolume(t,l){const e=this.parts.get(t);e&&(e.volume=Math.max(0,Math.min(1,l)),this.eventBus.emit("partVolumeChanged",{partName:t,volume:e.volume}))}setPartMuted(t,l){const e=this.parts.get(t);e&&(e.muted=l,this.eventBus.emit("partMutedChanged",{partName:t,muted:l}))}getParts(){return Array.from(this.parts.values())}playLeadIn(t=1){this.eventBus.emit("leadInStarted",{bars:t}),setTimeout(()=>{this.eventBus.emit("leadInCompleted")},1e3*t)}playStartingNotes(){this.eventBus.emit("startingNotesStarted"),setTimeout(()=>{this.eventBus.emit("startingNotesCompleted")},2e3)}on(t,l){this.eventBus.on(t,l)}off(t,l){this.eventBus.off(t,l)}startPlaybackTimer(){const t=()=>{if(!this.isPlaying)return;const l=performance.now(),e=(l-this.lastTimestamp)/1e3;if(this.lastTimestamp=l,this.currentTime+=e*this.playbackSpeed,this.songDuration>0&&this.currentTime>=this.songDuration){this.stop(),this.eventBus.emit("songEnded",{finalTime:this.currentTime});return}this.eventBus.emit("timeChanged",{currentTime:this.currentTime});const n=this.getBarFromTime(this.currentTime);if(n&&(this.eventBus.emit("barChanged",n),this.maxBar>0&&n.bar>this.maxBar)){this.stop(),this.eventBus.emit("songEnded",{finalTime:this.currentTime});return}this.playbackTimer=requestAnimationFrame(t)};this.playbackTimer=requestAnimationFrame(t)}stopPlaybackTimer(){this.playbackTimer&&(cancelAnimationFrame(this.playbackTimer),this.playbackTimer=null)}getBarFromTime(t){if(!this.beats||this.beats.length===0)return null;let l=null;for(let e=this.beats.length-1;e>=0;e--)if(this.beats[e].time<=t){l=this.beats[e];break}return l?{bar:l.bar,beat:l.beat,repeat:l.repeat,time:l.time}:null}getTimeFromBar(t,l=0){if(!this.beats||this.beats.length===0)return null;let e=this.beats.find(n=>n.bar===t&&n.beat===1&&n.repeat===l);return e||(e=this.beats.find(n=>n.bar===t&&n.beat===1)),e?e.time:null}destroy(){this.stop(),this.eventBus.all.clear(),this.parts.clear()}}new Ia;var YA=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(t,l)=>(typeof require<"u"?require:t)[l]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')}),st=class extends Uint8Array{constructor(){super(...arguments);R(this,"currentIndex",0)}slice(t,l){const e=super.slice(t,l);return e.currentIndex=0,e}};function Wa(a,t=a.length,l=0){let e="";for(let n=0;n<t;n++){const Q=a[l+n];if(Q===0)return e;e+=String.fromCharCode(Q)}return e}function Ql(a,t){const l=a.currentIndex;return a.currentIndex+=t,Wa(a,t,l)}function ul(a,t=!1,l=!1){let e=a.length;t&&e++,l&&e%2!==0&&e++;const n=new st(e);return rt(n,a),n}function rt(a,t,l=0){l>0&&t.length>l&&(t=t.slice(0,l));for(let e=0;e<t.length;e++)a[a.currentIndex++]=t.charCodeAt(e);if(l>t.length)for(let e=0;e<l-t.length;e++)a[a.currentIndex++]=0;return a}function P(a,t){const l=TA(a,t,a.currentIndex);return a.currentIndex+=t,l}function TA(a,t,l=0){let e=0;for(let n=0;n<t;n++)e|=a[l+n]<<n*8;return e>>>0}function $l(a,t,l){for(let e=0;e<l;e++)a[a.currentIndex++]=t>>e*8&255}function z(a,t){a[a.currentIndex++]=t&255,a[a.currentIndex++]=t>>8}function At(a,t){$l(a,t,4)}function LA(a,t){const l=t<<8|a;return l>32767?l-65536:l}var Sa=class{constructor(a,t,l){R(this,"header");R(this,"size");R(this,"data");this.header=a,this.size=t,this.data=l}};function xt(a,t=!0,l=!1){const e=Ql(a,4);let n=P(a,4);e===""&&(n=0);let Q;return t?Q=a.slice(a.currentIndex,a.currentIndex+n):Q=new st(0),(t||l)&&(a.currentIndex+=n,n%2!==0&&a.currentIndex++),new Sa(e,n,Q)}function ot(a,t,l=!1,e=!1){if(a.length!==4)throw new Error(`Invalid header length: ${a}`);let n=8,Q=a,A=t.length;l&&A++;let s=A;e&&(n+=4,s+=4,Q="LIST");let d=n+A;d%2!==0&&d++;const i=new st(d);return rt(i,Q),At(i,s),e&&rt(i,a),i.set(t,n),i}function Xt(a,t,l=!1){let e=8,n=a;const Q=t.reduce((i,U)=>U.length+i,0);let A=Q;l&&(e+=4,A+=4,n="LIST");let s=e+Q;s%2!==0&&s++;const d=new st(s);return rt(d,n),At(d,A),l&&rt(d,a),t.forEach(i=>{d.set(i,e),e+=i.length}),d}function sl(a,t){return a.find(l=>l.header!=="LIST"?!1:(l.data.currentIndex=4,Wa(l.data,4)===t))}function MA(a,t){return{...t,...a??{}}}function xA(a,t,l=0){let e=0;for(let n=0;n<t;n++)e=e<<8|a[l+n];return e>>>0}function vA(a){let t=0;for(;a;){const l=a[a.currentIndex++];if(t=t<<7|l&127,l>>7!==1)break}return t}var W={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},Ca;(()=>{var a=Uint8Array,t=Uint16Array,l=Int32Array,e=new a([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),n=new a([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Q=new a([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),A=function(G,N){for(var x=new t(31),at=0;at<31;++at)x[at]=N+=1<<G[at-1];for(var nt=new l(x[30]),at=1;at<30;++at)for(var ut=x[at];ut<x[at+1];++ut)nt[ut]=ut-x[at]<<5|at;return{b:x,r:nt}},s=A(e,2),d=s.b,i=s.r;d[28]=258,i[258]=28;var U=A(n,0),B=U.b,m=new t(32768);for(V=0;V<32768;++V)h=(V&43690)>>1|(V&21845)<<1,h=(h&52428)>>2|(h&13107)<<2,h=(h&61680)>>4|(h&3855)<<4,m[V]=((h&65280)>>8|(h&255)<<8)>>1;var h,V,o=function(G,N,x){for(var at=G.length,nt=0,ut=new t(N);nt<at;++nt)G[nt]&&++ut[G[nt]-1];var Mt=new t(N);for(nt=1;nt<N;++nt)Mt[nt]=Mt[nt-1]+ut[nt-1]<<1;var yt;{yt=new t(1<<N);var zt=15-N;for(nt=0;nt<at;++nt)if(G[nt])for(var Kt=nt<<4|G[nt],Ft=N-G[nt],_=Mt[G[nt]-1]++<<Ft,b=_|(1<<Ft)-1;_<=b;++_)yt[m[_]>>zt]=Kt}return yt},Z=new a(288);for(V=0;V<144;++V)Z[V]=8;var V;for(V=144;V<256;++V)Z[V]=9;var V;for(V=256;V<280;++V)Z[V]=7;var V;for(V=280;V<288;++V)Z[V]=8;var V,u=new a(32);for(V=0;V<32;++V)u[V]=5;var V,p=o(Z,9),v=o(u,5),E=function(G){for(var N=G[0],x=1;x<G.length;++x)G[x]>N&&(N=G[x]);return N},k=function(G,N,x){var at=N/8|0;return(G[at]|G[at+1]<<8)>>(N&7)&x},H=function(G,N){var x=N/8|0;return(G[x]|G[x+1]<<8|G[x+2]<<16)>>(N&7)},D=function(G){return(G+7)/8|0},y=function(G,N,x){return(x==null||x>G.length)&&(x=G.length),new a(G.subarray(N,x))},C=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],J=function(G,N,x){var at=new Error(N||C[G]);if(at.code=G,Error.captureStackTrace&&Error.captureStackTrace(at,J),!x)throw at;return at},K=function(G,N,x,at){var nt=G.length,ut=at?at.length:0;if(!nt||N.f&&!N.l)return x||new a(0);var Mt=!x,yt=Mt||N.i!=2,zt=N.i;Mt&&(x=new a(nt*3));var Kt=function(Jt){var It=x.length;if(Jt>It){var Nt=new a(Math.max(It*2,Jt));Nt.set(x),x=Nt}},Ft=N.f||0,_=N.p||0,b=N.b||0,O=N.l,Wt=N.d,Zl=N.m,Ul=N.n,gl=nt*8;do{if(!O){Ft=k(G,_,1);var xl=k(G,_+1,3);if(_+=3,xl)if(xl==1)O=p,Wt=v,Zl=9,Ul=5;else if(xl==2){var vl=k(G,_,31)+257,oe=k(G,_+10,15)+4,Ht=vl+k(G,_+5,31)+1;_+=14;for(var wt=new a(Ht),Gl=new a(19),St=0;St<oe;++St)Gl[Q[St]]=k(G,_+St*3,7);_+=oe*3;for(var Fe=E(Gl),Ue=(1<<Fe)-1,Ke=o(Gl,Fe),St=0;St<Ht;){var Dl=Ke[k(G,_,Ue)];_+=Dl&15;var Yt=Dl>>4;if(Yt<16)wt[St++]=Yt;else{var ll=0,el=0;for(Yt==16?(el=3+k(G,_,3),_+=2,ll=wt[St-1]):Yt==17?(el=3+k(G,_,7),_+=3):Yt==18&&(el=11+k(G,_,127),_+=7);el--;)wt[St++]=ll}}var Jl=wt.subarray(0,vl),Gt=wt.subarray(vl);Zl=E(Jl),Ul=E(Gt),O=o(Jl,Zl),Wt=o(Gt,Ul)}else J(1);else{var Yt=D(_)+4,I=G[Yt-4]|G[Yt-3]<<8,r=Yt+I;if(r>nt){zt&&J(0);break}yt&&Kt(b+I),x.set(G.subarray(Yt,r),b),N.b=b+=I,N.p=_=r*8,N.f=Ft;continue}if(_>gl){zt&&J(0);break}}yt&&Kt(b+131072);for(var g=(1<<Zl)-1,w=(1<<Ul)-1,tt=_;;tt=_){var ll=O[H(G,_)&g],Qt=ll>>4;if(_+=ll&15,_>gl){zt&&J(0);break}if(ll||J(2),Qt<256)x[b++]=Qt;else if(Qt==256){tt=_,O=null;break}else{var ht=Qt-254;if(Qt>264){var St=Qt-257,f=e[St];ht=k(G,_,(1<<f)-1)+d[St],_+=f}var Ct=Wt[H(G,_)&w],Vt=Ct>>4;Ct||J(3),_+=Ct&15;var Gt=B[Vt];if(Vt>3){var f=n[Vt];Gt+=H(G,_)&(1<<f)-1,_+=f}if(_>gl){zt&&J(0);break}yt&&Kt(b+131072);var et=b+ht;if(b<Gt){var dt=ut-Gt,it=Math.min(Gt,et);for(dt+b<0&&J(3);b<it;++b)x[b]=at[dt+b]}for(;b<et;++b)x[b]=x[b-Gt]}}N.l=O,N.p=tt,N.b=b,N.f=Ft,O&&(Ft=1,N.m=Zl,N.d=Wt,N.n=Ul)}while(!Ft);return b!=x.length&&Mt?y(x,0,b):x.subarray(0,b)},j=new a(0);function M(G,N){return K(G,{i:2},N&&N.out,N&&N.dictionary)}var ct=typeof TextDecoder<"u"&&new TextDecoder,X=0;try{ct.decode(j,{stream:!0}),X=1}catch{}Ca=M})();var DA=Ca;function lt(...a){}function mt(...a){console.warn(...a)}function dl(...a){}function vt(...a){}function KA(){}var Il={consoleColors:W,SpessaSynthInfo:lt,SpessaSynthWarn:mt,SpessaSynthGroupCollapsed:vt,SpessaSynthGroup:dl,SpessaSynthGroupEnd:KA,readBytesAsUintBigEndian:xA,readLittleEndian:P,readBytesAsString:Ql,readVariableLengthQuantity:vA,inflateSync:DA},il={noteOff:128,noteOn:144,polyPressure:160,controllerChange:176,programChange:192,channelPressure:208,pitchWheel:224,systemExclusive:240},q={bankSelect:0,modulationWheel:1,breathController:2,undefinedCC3:3,footController:4,portamentoTime:5,dataEntryMSB:6,mainVolume:7,balance:8,undefinedCC9:9,pan:10,expressionController:11,effectControl1:12,effectControl2:13,undefinedCC14:14,undefinedCC15:15,generalPurposeController1:16,generalPurposeController2:17,generalPurposeController3:18,generalPurposeController4:19,undefinedCC20:20,undefinedCC21:21,undefinedCC22:22,undefinedCC23:23,undefinedCC24:24,undefinedCC25:25,undefinedCC26:26,undefinedCC27:27,undefinedCC28:28,undefinedCC29:29,undefinedCC30:30,undefinedCC31:31,bankSelectLSB:32,modulationWheelLSB:33,breathControllerLSB:34,undefinedCC3LSB:35,footControllerLSB:36,portamentoTimeLSB:37,dataEntryLSB:38,mainVolumeLSB:39,balanceLSB:40,undefinedCC9LSB:41,panLSB:42,expressionControllerLSB:43,effectControl1LSB:44,effectControl2LSB:45,undefinedCC14LSB:46,undefinedCC15LSB:47,undefinedCC16LSB:48,undefinedCC17LSB:49,undefinedCC18LSB:50,undefinedCC19LSB:51,undefinedCC20LSB:52,undefinedCC21LSB:53,undefinedCC22LSB:54,undefinedCC23LSB:55,undefinedCC24LSB:56,undefinedCC25LSB:57,undefinedCC26LSB:58,undefinedCC27LSB:59,undefinedCC28LSB:60,undefinedCC29LSB:61,undefinedCC30LSB:62,undefinedCC31LSB:63,sustainPedal:64,portamentoOnOff:65,sostenutoPedal:66,softPedal:67,legatoFootswitch:68,hold2Pedal:69,soundVariation:70,filterResonance:71,releaseTime:72,attackTime:73,brightness:74,decayTime:75,vibratoRate:76,vibratoDepth:77,vibratoDelay:78,soundController10:79,generalPurposeController5:80,generalPurposeController6:81,generalPurposeController7:82,generalPurposeController8:83,portamentoControl:84,undefinedCC85:85,undefinedCC86:86,undefinedCC87:87,undefinedCC88:88,undefinedCC89:89,undefinedCC90:90,reverbDepth:91,tremoloDepth:92,chorusDepth:93,detuneDepth:94,phaserDepth:95,dataIncrement:96,dataDecrement:97,nonRegisteredParameterLSB:98,nonRegisteredParameterMSB:99,registeredParameterLSB:100,registeredParameterMSB:101,undefinedCC102LSB:102,undefinedCC103LSB:103,undefinedCC104LSB:104,undefinedCC105LSB:105,undefinedCC106LSB:106,undefinedCC107LSB:107,undefinedCC108LSB:108,undefinedCC109LSB:109,undefinedCC110LSB:110,undefinedCC111LSB:111,undefinedCC112LSB:112,undefinedCC113LSB:113,undefinedCC114LSB:114,undefinedCC115LSB:115,undefinedCC116LSB:116,undefinedCC117LSB:117,undefinedCC118LSB:118,undefinedCC119LSB:119,allSoundOff:120,resetAllControllers:121,localControlOnOff:122,allNotesOff:123,omniModeOff:124,omniModeOn:125,monoModeOn:126,polyModeOn:127},wA=350,ga=9,fA="gs",cl=-1,zA=1,HA=64,Ga=121,ol=class{static getDefaultBank(a){return a==="gm2"?Ga:0}static getDrumBank(a){switch(a){default:throw new Error(`${a} doesn't have a bank MSB for drums.`);case"gm2":return 120;case"xg":return 127}}static isXGDrums(a){return a===120||a===126||a===127}static isValidXGMSB(a){return this.isXGDrums(a)||a===HA||a===Ga}static isSystemXG(a){return a==="gm2"||a==="xg"}static addBankOffset(a,t,l=!0){return this.isXGDrums(a)&&l?a:Math.min(a+t,127)}static subtrackBankOffset(a,t,l=!0){return this.isXGDrums(a)&&l?a:Math.max(0,a-t)}},Wl=class Un{static toMIDIString(t){return t.isGMGSDrum?`DRUM:${t.program}`:`${t.bankLSB}:${t.bankMSB}:${t.program}`}static fromMIDIString(t){const l=t.split(":");if(l.length>3||l.length<2)throw new Error("Invalid MIDI string:");return t.startsWith("DRUM")?{bankMSB:0,bankLSB:0,program:parseInt(l[1]),isGMGSDrum:!0}:{bankLSB:parseInt(l[0]),bankMSB:parseInt(l[1]),program:parseInt(l[2]),isGMGSDrum:!1}}static toNamedMIDIString(t){return`${Un.toMIDIString(t)} ${t.name}`}static matches(t,l){return t.isGMGSDrum||l.isGMGSDrum?t.isGMGSDrum===l.isGMGSDrum&&t.program===l.program:t.program===l.program&&t.bankLSB===l.bankLSB&&t.bankMSB===l.bankMSB}static fromNamedMIDIString(t){const l=t.indexOf(" ");if(l<0)throw new Error(`Invalid named MIDI string: ${t}`);const e=this.fromMIDIString(t.substring(0,l)),n=t.substring(l+1);return{...e,name:n}}static sorter(t,l){return t.program!==l.program?t.program-l.program:t.isGMGSDrum&&!l.isGMGSDrum?1:!t.isGMGSDrum&&l.isGMGSDrum?-1:t.bankMSB!==l.bankMSB?t.bankMSB-l.bankMSB:t.bankLSB-l.bankLSB}},qA={hermite:2},Ja={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4,channelKeyShift:5,sf2NPRNGeneratorLSB:6},jA=new Map([["domingo","Sunday"],["segunda-feira","Monday"],["terça-feira","Tuesday"],["quarta-feira","Wednesday"],["quinta-feira","Thursday"],["sexta-feira","Friday"],["sábado","Saturday"],["janeiro","January"],["fevereiro","February"],["março","March"],["abril","April"],["maio","May"],["junho","June"],["julho","July"],["agosto","August"],["setembro","September"],["outubro","October"],["novembro","November"],["dezembro","December"]]),PA=[jA];function OA(a){for(const t of PA){let l=a;t.forEach((n,Q)=>{const A=new RegExp(Q,"gi");l=l.replace(A,n)});const e=new Date(l);if(!isNaN(e.getTime()))return e}}function _A(a){const t=/^(\d{2})\.(\d{2})\.(\d{4})$/.exec(a);if(t){const l=parseInt(t[1]),e=parseInt(t[2])-1,n=parseInt(t[3]),Q=new Date(n,e,l);if(!isNaN(Q.getTime()))return Q}}function $A(a){const t=/^(\d{1,2})\s{1,2}(\d{1,2})\s{1,2}(\d{2})$/.exec(a);if(t){const l=t[1],e=(parseInt(t[2])+1).toString(),n=t[3],Q=new Date(`${e}/${l}/${n}`);if(!isNaN(Q.getTime()))return Q}}function tQ(a){const l=/\b\d{4}\b/.exec(a);return l?new Date(l[0]):void 0}function lQ(a){if(a=a.trim(),a.length<1)return new Date;const t=a.replace(/\b(\d+)(st|nd|rd|th)\b/g,"$1"),l=new Date(t);if(isNaN(l.getTime())){const e=OA(a);if(e)return e;const n=_A(a);if(n)return n;const Q=$A(a);if(Q)return Q;const A=tQ(a);return A||(mt(`Invalid date: "${a}". Replacing with the current date!`),new Date)}return l}var c={INVALID:-1,startAddrsOffset:0,endAddrOffset:1,startloopAddrsOffset:2,endloopAddrsOffset:3,startAddrsCoarseOffset:4,modLfoToPitch:5,vibLfoToPitch:6,modEnvToPitch:7,initialFilterFc:8,initialFilterQ:9,modLfoToFilterFc:10,modEnvToFilterFc:11,endAddrsCoarseOffset:12,modLfoToVolume:13,unused1:14,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,unused2:18,unused3:19,unused4:20,delayModLFO:21,freqModLFO:22,delayVibLFO:23,freqVibLFO:24,delayModEnv:25,attackModEnv:26,holdModEnv:27,decayModEnv:28,sustainModEnv:29,releaseModEnv:30,keyNumToModEnvHold:31,keyNumToModEnvDecay:32,delayVolEnv:33,attackVolEnv:34,holdVolEnv:35,decayVolEnv:36,sustainVolEnv:37,releaseVolEnv:38,keyNumToVolEnvHold:39,keyNumToVolEnvDecay:40,instrument:41,reserved1:42,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,reserved2:49,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,reserved3:55,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,unused5:59,endOper:60,vibLfoToVolume:61,vibLfoToFilterFc:62};Object.keys(c).length;var eQ=Math.max(...Object.values(c)),L=[];L[c.startAddrsOffset]={min:0,max:32768,def:0,nrpn:1},L[c.endAddrOffset]={min:-32768,max:32768,def:0,nrpn:1},L[c.startloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1},L[c.endloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1},L[c.startAddrsCoarseOffset]={min:0,max:32768,def:0,nrpn:1},L[c.modLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2},L[c.vibLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2},L[c.modEnvToPitch]={min:-12e3,max:12e3,def:0,nrpn:2},L[c.initialFilterFc]={min:1500,max:13500,def:13500,nrpn:2},L[c.initialFilterQ]={min:0,max:960,def:0,nrpn:1},L[c.modLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2},L[c.vibLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2},L[c.modEnvToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2},L[c.endAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1},L[c.modLfoToVolume]={min:-960,max:960,def:0,nrpn:1},L[c.vibLfoToVolume]={min:-960,max:960,def:0,nrpn:1},L[c.chorusEffectsSend]={min:0,max:1e3,def:0,nrpn:1},L[c.reverbEffectsSend]={min:0,max:1e3,def:0,nrpn:1},L[c.pan]={min:-500,max:500,def:0,nrpn:1},L[c.delayModLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2},L[c.freqModLFO]={min:-16e3,max:4500,def:0,nrpn:4},L[c.delayVibLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2},L[c.freqVibLFO]={min:-16e3,max:4500,def:0,nrpn:4},L[c.delayModEnv]={min:-32768,max:5e3,def:-32768,nrpn:2},L[c.attackModEnv]={min:-32768,max:8e3,def:-32768,nrpn:2},L[c.holdModEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2},L[c.decayModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2},L[c.sustainModEnv]={min:0,max:1e3,def:0,nrpn:1},L[c.releaseModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2},L[c.keyNumToModEnvHold]={min:-1200,max:1200,def:0,nrpn:1},L[c.keyNumToModEnvDecay]={min:-1200,max:1200,def:0,nrpn:1},L[c.delayVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2},L[c.attackVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2},L[c.holdVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2},L[c.decayVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2},L[c.sustainVolEnv]={min:0,max:1440,def:0,nrpn:1},L[c.releaseVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2},L[c.keyNumToVolEnvHold]={min:-1200,max:1200,def:0,nrpn:1},L[c.keyNumToVolEnvDecay]={min:-1200,max:1200,def:0,nrpn:1},L[c.startloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1},L[c.keyNum]={min:-1,max:127,def:-1,nrpn:1},L[c.velocity]={min:-1,max:127,def:-1,nrpn:1},L[c.initialAttenuation]={min:0,max:1440,def:0,nrpn:1},L[c.endloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1},L[c.coarseTune]={min:-120,max:120,def:0,nrpn:1},L[c.fineTune]={min:-12700,max:12700,def:0,nrpn:1},L[c.scaleTuning]={min:0,max:1200,def:100,nrpn:1},L[c.exclusiveClass]={min:0,max:99999,def:0,nrpn:0},L[c.overridingRootKey]={min:-1,max:127,def:-1,nrpn:0},L[c.sampleModes]={min:0,max:3,def:0,nrpn:0};var bt={monoSample:1,rightSample:2,leftSample:4,linkedSample:8},Ut={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},Bt={linear:0,concave:1,convex:2,switch:3},Y={none:0,modLfo:1,velocity:2,keyNum:3,volEnv:4,modEnv:5,pitchWheel:6,polyPressure:7,channelPressure:8,vibratoLfo:9,modulationWheel:129,volume:135,pan:138,expression:139,chorus:221,reverb:219,pitchWheelRange:256,fineTune:257,coarseTune:258},S={none:0,gain:1,reserved:2,pitch:3,pan:4,keyNum:5,chorusSend:128,reverbSend:129,modLfoFreq:260,modLfoDelay:261,vibLfoFreq:276,vibLfoDelay:277,volEnvAttack:518,volEnvDecay:519,reservedEG1:520,volEnvRelease:521,volEnvSustain:522,volEnvDelay:523,volEnvHold:524,modEnvAttack:778,modEnvDecay:779,reservedEG2:780,modEnvRelease:781,modEnvSustain:782,modEnvDelay:783,modEnvHold:784,filterCutoff:1280,filterQ:1281},pa={forward:0,loopAndRelease:1},ue=128,aQ=147,Ie=new Int16Array(aQ).fill(0),Rt=(a,t)=>Ie[a]=t<<7;Rt(q.mainVolume,100),Rt(q.balance,64),Rt(q.expressionController,127),Rt(q.pan,64),Rt(q.portamentoOnOff,127),Rt(q.filterResonance,64),Rt(q.releaseTime,64),Rt(q.attackTime,64),Rt(q.brightness,64),Rt(q.decayTime,64),Rt(q.vibratoRate,64),Rt(q.vibratoDepth,64),Rt(q.vibratoDelay,64),Rt(q.generalPurposeController6,64),Rt(q.generalPurposeController8,64),Rt(q.registeredParameterLSB,127),Rt(q.registeredParameterMSB,127),Rt(q.nonRegisteredParameterLSB,127),Rt(q.nonRegisteredParameterMSB,127);var nQ=1;Ie[q.portamentoControl]=nQ,Rt(ue+Ut.pitchWheel,64),Rt(ue+Ut.pitchWheelRange,2);var AQ=Object.keys(Ja).length,QQ=new Float32Array(AQ);QQ[Ja.modulationMultiplier]=1,Ie.slice(0,128);var Xl=Xl!==void 0?Xl:{},ya=!1,Na;Xl.isInitialized=new Promise(a=>Na=a);var sQ=function(a){var t,l,e,n,Q,A,s,d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i="",U=0;a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");do n=d.indexOf(a.charAt(U++)),Q=d.indexOf(a.charAt(U++)),A=d.indexOf(a.charAt(U++)),s=d.indexOf(a.charAt(U++)),t=n<<2|Q>>4,l=(15&Q)<<4|A>>2,e=(3&A)<<6|s,i+=String.fromCharCode(t),A!==64&&(i+=String.fromCharCode(l)),s!==64&&(i+=String.fromCharCode(e));while(U<a.length);return i};(function(){var a,t,l,e,n,Q,A,s,d,i,U,B,m,h,o=o!==void 0?o:{};o.wasmBinary=Uint8Array.from(sQ("AGFzbQEAAAABpQEYYAJ/fwF/YAF/AGAAAX9gBH9/f38AYAAAYAN/f38Bf2ABfwF/YAJ/fwBgBn9/f39/fwF/YAR/f39/AX9gBX9/f39/AX9gB39/f39/f38Bf2AGf39/f39/AGAIf39/f39/f38Bf2AFf39/f38AYAd/f39/f39/AGADf39/AGABfwF9YAF9AX1gAnx/AXxgAnx/AX9gA3x8fwF8YAJ8fAF8YAF8AXwCngIPA2VudgZtZW1vcnkCAIACA2VudgV0YWJsZQFwAQQEA2Vudgl0YWJsZUJhc2UDfwADZW52DkRZTkFNSUNUT1BfUFRSA38AA2VudghTVEFDS1RPUAN/AANlbnYJU1RBQ0tfTUFYA38ABmdsb2JhbAhJbmZpbml0eQN8AANlbnYFYWJvcnQAAQNlbnYNZW5sYXJnZU1lbW9yeQACA2Vudg5nZXRUb3RhbE1lbW9yeQACA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQACA2Vudg5fX19hc3NlcnRfZmFpbAADA2VudgtfX19zZXRFcnJObwABA2VudgZfYWJvcnQABANlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA3d2BgYCAQcHAQIBAQcBCAcFAAkGCQoHBgYGBgEFBgIBBgYKAAgLAAYGBgYGBgYBAAoMDAMGBQANCAoJAAwODA8OAQAGBgcEABAJEAERAAADBQwAAAMHBxIGAQAABwIFEwMOBw8HBgYQFAoVExYXFxcXFgQFBQYFAAYkB38BIwELfwEjAgt/ASMDC38BQQALfwFBAAt8ASMEC38BQQALB9MCFRBfX2dyb3dXYXNtTWVtb3J5AAgRX19fZXJybm9fbG9jYXRpb24AYwVfZnJlZQBfB19tYWxsb2MAXgdfbWVtY3B5AHkHX21lbXNldAB6BV9zYnJrAHsXX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMAJhRfc3RiX3ZvcmJpc19qc19jbG9zZQAlFV9zdGJfdm9yYmlzX2pzX2RlY29kZQAoE19zdGJfdm9yYmlzX2pzX29wZW4AJBpfc3RiX3ZvcmJpc19qc19zYW1wbGVfcmF0ZQAnC2R5bkNhbGxfaWlpAHwTZXN0YWJsaXNoU3RhY2tTcGFjZQAMC2dldFRlbXBSZXQwAA8LcnVuUG9zdFNldHMAeAtzZXRUZW1wUmV0MAAOCHNldFRocmV3AA0Kc3RhY2tBbGxvYwAJDHN0YWNrUmVzdG9yZQALCXN0YWNrU2F2ZQAKCQoBACMACwR9VFl9Csb2A3YGACAAQAALGwEBfyMGIQEjBiAAaiQGIwZBD2pBcHEkBiABCwQAIwYLBgAgACQGCwoAIAAkBiABJAcLEAAjCEUEQCAAJAggASQJCwsGACAAJAsLBAAjCwsRACAABEAgABARIAAgABASCwvvBwEKfyAAQYADaiEHIAcoAgAhBQJAIAUEQCAAQfwBaiEEIAQoAgAhASABQQBKBEAgAEHwAGohCANAIAUgAkEYbGpBEGohCSAJKAIAIQEgAQRAIAgoAgAhAyAFIAJBGGxqQQ1qIQogCi0AACEGIAZB/wFxIQYgAyAGQbAQbGpBBGohAyADKAIAIQMgA0EASgRAQQAhAwNAIAEgA0ECdGohASABKAIAIQEgACABEBIgA0EBaiEDIAgoAgAhASAKLQAAIQYgBkH/AXEhBiABIAZBsBBsakEEaiEBIAEoAgAhBiAJKAIAIQEgAyAGSA0ACwsgACABEBILIAUgAkEYbGpBFGohASABKAIAIQEgACABEBIgAkEBaiECIAQoAgAhASACIAFODQMgBygCACEFDAAACwALCwsgAEHwAGohAyADKAIAIQEgAQRAIABB7ABqIQUgBSgCACECIAJBAEoEQEEAIQIDQAJAIAEgAkGwEGxqQQhqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQRxqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQSBqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQaQQaiEEIAQoAgAhBCAAIAQQEiABIAJBsBBsakGoEGohASABKAIAIQEgAUUhBCABQXxqIQFBACABIAQbIQEgACABEBIgAkEBaiECIAUoAgAhASACIAFODQAgAygCACEBDAELCyADKAIAIQELIAAgARASCyAAQfgBaiEBIAEoAgAhASAAIAEQEiAHKAIAIQEgACABEBIgAEGIA2ohAyADKAIAIQEgAQRAIABBhANqIQUgBSgCACECIAJBAEoEQEEAIQIDQCABIAJBKGxqQQRqIQEgASgCACEBIAAgARASIAJBAWohAiAFKAIAIQcgAygCACEBIAIgB0gNAAsLIAAgARASCyAAQQRqIQIgAigCACEBIAFBAEoEQEEAIQEDQCAAQZQGaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQZQHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQdgHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiABQQFqIQEgAigCACEDIAEgA0ghAyABQRBJIQUgBSADcQ0ACwtBACEBA0AgAEGgCGogAUECdGohAiACKAIAIQIgACACEBIgAEGoCGogAUECdGohAiACKAIAIQIgACACEBIgAEGwCGogAUECdGohAiACKAIAIQIgACACEBIgAEG4CGogAUECdGohAiACKAIAIQIgACACEBIgAEHACGogAUECdGohAiACKAIAIQIgACACEBIgAUEBaiEBIAFBAkcNAAsLGwAgAEHEAGohACAAKAIAIQAgAEUEQCABEF8LC3wBAX8gAEHUB2ohASABQQA2AgAgAEGAC2ohASABQQA2AgAgAEH4CmohASABQQA2AgAgAEGcCGohASABQQA2AgAgAEHVCmohASABQQA6AAAgAEH8CmohASABQQA2AgAgAEHUC2ohASABQQA2AgAgAEHYC2ohACAAQQA2AgAL8AQBB38jBiELIwZBEGokBiALQQhqIQcgC0EEaiEKIAshCCAAQSRqIQYgBiwAACEGAn8gBgR/IABBgAtqIQYgBigCACEGIAZBf0oEQCAFQQA2AgAgACABIAIQFgwCCyAAQRRqIQYgBiABNgIAIAEgAmohAiAAQRxqIQkgCSACNgIAIABB2ABqIQIgAkEANgIAIABBABAXIQkgCUUEQCAFQQA2AgBBAAwCCyAAIAcgCCAKEBghCSAJBEAgBygCACECIAgoAgAhCSAKKAIAIQggACACIAkgCBAaIQogByAKNgIAIABBBGohAiACKAIAIQggCEEASgRAQQAhAgNAIABBlAZqIAJBAnRqIQcgBygCACEHIAcgCUECdGohByAAQdQGaiACQQJ0aiEMIAwgBzYCACACQQFqIQIgAiAISA0ACwsgAwRAIAMgCDYCAAsgBSAKNgIAIABB1AZqIQAgBCAANgIAIAYoAgAhACAAIAFrDAILAkACQAJAAkACQCACKAIAIgNBIGsOBAECAgACCyACQQA2AgAgAEHUAGohAiAAEBkhAwJAIANBf0cEQANAIAIoAgAhAyADDQIgABAZIQMgA0F/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ACECIABBmAhqIQYgBigCACEHIAUgA2shCSAJIAdqIQkgAiAJSSEJIAIgB0khDSACIAdrIQJBACACIA0bIQIgAiADaiECIAIgBUohByAFIAIgBxshAiAJBEAgASACNgIAIAYoAgAhACAAIAJqIQAgBiAANgIAQQEMBgsLCyAAQfQKaiECIAIoAgAhAiADIB9rIQYgBiACaiEGIABBmAhqIQIgAiAGNgIAIAhBATYCAAwBBSAAQZgIaiECIAYNAQsMAQsgBCADayEDIAIoAgAhBCADIARqIQMgAiADNgIACyATKAIAIQIgAgRAIABByABqIQIgAigCACECIABB0ABqIQAgACgCACEAIAIgAEcEQEHTE0HEE0HkGkHnFBAECwsgASAFNgIAQQELIQAgHCQGIAALqAIBBX8gAEHoCmohBSAFKAIAIQICQCACQQBIBEBBACEABSACIAFIBEAgAUEYSgRAIABBGBAsIQIgAUFoaiEBIAAgARAsIQAgAEEYdCEAIAAgAmohACAADwsgAkUEQCAAQeQKaiECIAJBADYCAAsgAEHkCmohAwJAAkACQANAIAAQLiECIAJBf0YNASAFKAIAIQQgAiAEdCECIAMoAgAhBiAGIAJqIQIgAyACNgIAIAUgBEEIaiICNgIAIAIgAUgNAAwCAAsACyAFQX82AgBBACEADAQLIARBeEgEQEEAIQAMBAsLCyAAQeQKaiEEIAQoAgAhA0EBIAF0IQAgAEF/aiEAIAMgAHEhACADIAF2IQMgBCADNgIAIAIgAWshASAFIAE2AgALCyAAC40CAAJAIABBAEgEf0EABSAAQYCAAUgEQCAAQRBIBEAgAEGACGohACAALAAAIQAMAwsgAEGABEgEQCAAQQV2IQAgAEGACGohACAALAAAIQAgAEEFaiEABSAAQQp2IQAgAEGACGohACAALAAAIQAgAEEKaiEACwwCCyAAQYCAgAhIBH8gAEGAgCBIBH8gAEEPdiEAIABBgAhqIQAgACwAACEAIABBD2oFIABBFHYhACAAQYAIaiEAIAAsAAAhACAAQRRqCwUgAEGAgICAAkgEfyAAQRl2IQAgAEGACGohACAALAAAIQAgAEEZagUgAEEediEAIABBgAhqIQAgACwAACEAIABBHmoLCwshAAsgAAuiAQEDfyAAQdQKaiECIAIsAAAhAQJAAkAgAQ0AIABB3ApqIQEgASgCACEBIAEEQEF/IQMFIAAQLyEBIAEEQCACLAAAIQEgAQ0CQaEUQcQTQfYLQbUUEAQFQX8hAwsLDAELIAFBf2pBGHRBGHUhASACIAE6AAAgAEHsCmohASABKAIAIQIgAkEBaiECIAEgAjYCACAAEDAhACAAQf8BcSEDCyADC6wCAQd/IABB3ApqIQIgAigCACEBAkAgAUUEQCAAQdgKaiEEIAQoAgAhASABQX9GBEAgAEHQCGohASABKAIAIQEgAUF/aiEBIABB4ApqIQMgAyABNgIAIAAQMSEBIAFFBEAgAkEBNgIADAMLIABB0wpqIQEgASwAACEBIAFBAXEhASABBH8gBCgCAAUgAEEgEBUMAwshAQsgAUEBaiEHIAQgBzYCACAAQdQIaiABaiEDIAMsAAAhBiAGQf8BcSEDIAZBf0cEQCACQQE2AgAgAEHgCmohAiACIAE2AgALIABB0AhqIQEgASgCACEBIAcgAU4EQCAEQX82AgALIABB1ApqIQAgACwAACEBIAEEQEHFFEHEE0HoC0HaFBAEBSAAIAY6AAAgAyEFCwsLIAULUQEDfyAAQRRqIQMgAygCACEBIABBHGohAiACKAIAIQIgASACSQR/IAFBAWohACADIAA2AgAgASwAAAUgAEHUAGohACAAQQE2AgBBAAshACAACyABAX8gABAyIQEgAQR/IAAQMwUgAEEeEBVBAAshACAAC2ABAX8gABAwIQEgAUH/AXFBzwBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQAgAEH/AXFB0wBGIQAFQQAhAAsFQQAhAAsFQQAhAAsgAAvZAwEGfyAAEDAhAQJ/IAFB/wFxBH8gAEEfEBVBAAUgABAwIQEgAEHTCmohAiACIAE6AAAgABAjIQUgABAjIQIgABAjGiAAECMhASAAQcwIaiEDIAMgATYCACAAECMaIAAQMCEBIAFB/wFxIQEgAEHQCGohAyADIAE2AgAgAEHUCGohBCAAIAQgARAiIQEgAUUEQCAAQQoQFUEADAILIABB8ApqIQQgBEF+NgIAIAIgBXEhAQJAIAFBf0cEQCADKAIAIQEgAUEASgRAA0ACQCABQX9qIQIgAEHUCGogAmohBiAGLAAAIQYgBkF/Rw0AIAFBAUwNBCACIQEMAQsLIAQgAjYCACAAQfQKaiEBIAEgBTYCAAsLCyAAQdUKaiEBIAEsAAAhASABBEAgAygCACEDIANBAEoEf0EAIQJBACEBA0AgAEHUCGogAWohBCAELQAAIQQgBEH/AXEhBCACIARqIQIgAUEBaiEBIAEgA0gNAAsgAkEbagVBGwshASAAQShqIQIgAigCACECIAEgA2ohASABIAJqIQEgAEEsaiEDIAMgAjYCACAAQTBqIQIgAiABNgIAIABBNGohASABIAU2AgALIABB2ApqIQAgAEEANgIAQQELCyEAIAALowEBB38gAEHoCmohAyADKAIAIQECQCABQRlIBEAgAEHkCmohBCABRQRAIARBADYCAAsgAEHUCmohBSAAQdwKaiEGA0AgBigCACEBIAEEQCAFLAAAIQEgAUUNAwsgABAuIQIgAkF/Rg0CIAMoAgAhASACIAF0IQIgBCgCACEHIAcgAmohAiAEIAI2AgAgAUEIaiECIAMgAjYCACABQRFIDQALCwsLrQUBCX8gABA0IAFBIGohAiACKAIAIQUCQAJAIAVFIgNFDQAgAUGkEGohAiACKAIAIQIgAg0AQX8hAQwBCyABQQRqIQIgAigCACECAkACQCACQQhKBEAgAUGkEGohAyADKAIAIQMgAw0BBSADDQELDAELIABB5ApqIQggCCgCACEJIAkQOiEHIAFBrBBqIQIgAigCACECIAJBAUoEQCABQaQQaigCACEKQQAhAwNAIAJBAXYhBSAFIANqIQQgCiAEQQJ0aiEGIAYoAgAhBiAGIAdLIQYgAiAFayECIAMgBCAGGyEDIAUgAiAGGyECIAJBAUoNAAsFQQAhAwsgAUEXaiECIAIsAAAhAiACRQRAIAFBqBBqIQIgAigCACECIAIgA0ECdGohAiACKAIAIQMLIAFBCGohASABKAIAIQEgASADaiEBIAEtAAAhASABQf8BcSEBIABB6ApqIQIgAigCACEAIAAgAUgEf0EAIQBBfwUgACABayEAIAkgAXYhASAIIAE2AgAgAwshASACIAA2AgAMAQsgAUEXaiEDIAMsAAAhAyADBEBBgRVBxBNB6gxBjBUQBAsCQCACQQBKBEAgASgCCCEIIABB5ApqIQlBACEBA0ACQCAIIAFqIQMgAywAACEEIARB/wFxIQMgBEF/RwRAIAUgAUECdGoh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IwZBEGokBiACIQECfCAAvUIgiKdB/////wdxIgNB/MOk/wNJBHwgA0GewZryA0kEfEQAAAAAAADwPwUgAEQAAAAAAAAAABByCwUgACAAoSADQf//v/8HSw0BGgJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwgQcgwECyABKwMAIAErAwhBARBwmgwDCyABKwMAIAErAwgQcpoMAgsgASsDACABKwMIQQEQcAsLIQAgAiQGIAALywEBA38jBiECIwZBEGokBiACIQECQCAAvUIgiKdB/////wdxIgNB/MOk/wNJBEAgA0GAgMDyA08EQCAARAAAAAAAAAAAQQAQcCEACwUgA0H//7//B0sEQCAAIAChIQAMAgsCQAJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwhBARBwIQAMBQsgASsDACABKwMIEHIhAAwECyABKwMAIAErAwhBARBwmiEADAMLIAErAwAgASsDCBBymiEACwsLIAIkBiAAC5sDAwJ/AX4CfCAAvSIDQj+IpyEBAnwCfwJAIANCIIinQf////8HcSICQarGmIQESwR8IANC////////////AINCgICAgICAgPj/AFYEQCAADwsgAETvOfr+Qi6GQGQEQCAARAAAAAAAAOB/og8FIABE0rx63SsjhsBjIABEUTAt1RBJh8BjcUUNAkQAAAAAAAAAACIADwsABSACQcLc2P4DSwRAIAJBscXC/wNLDQIgAUEBcyABawwDCyACQYCAwPEDSwR8QQAhASAABSAARAAAAAAAAPA/oA8LCwwCCyAARP6CK2VHFfc/oiABQQN0QYATaisDAKCqCyEBIAAgAbciBEQAAOD+Qi7mP6KhIgAgBER2PHk17znqPaIiBaELIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQAgAUUEQCAADwsgACABEGULnwMDAn8BfgV8IAC9IgNCIIinIQECfyADQgBTIgIgAUGAgMAASXIEfyADQv///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOi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mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(I){return I.charCodeAt(0)});var o=o!==void 0?o:{},Z={};for(a in o)o.hasOwnProperty(a)&&(Z[a]=o[a]);o.arguments=[],o.thisProgram="./this.program",o.quit=function(I,r){throw r},o.preRun=[],o.postRun=[];var u=!1,V=!1,p=!1,v=!1;u=typeof window=="object",V=typeof importScripts=="function",p=typeof process=="object"&&typeof YA=="function"&&!u&&!V,v=!u&&!p&&!V;var E="";function k(I){return o.locateFile?o.locateFile(I,E):E+I}p?(E="/",o.read=function(r,g){var w;return t||(t=void 0),l||(l=void 0),r=l.normalize(r),w=t.readFileSync(r),g?w:w.toString()},o.readBinary=function(r){var g=o.read(r,!0);return g.buffer||(g=new Uint8Array(g)),j(g.buffer),g},process.argv.length>1&&(o.thisProgram=process.argv[1].replace(/\\/g,"/")),o.arguments=process.argv.slice(2),process.on("uncaughtException",function(I){if(!(I instanceof el))throw I}),process.on("unhandledRejection",function(I,r){process.exit(1)}),o.quit=function(I){process.exit(I)},o.inspect=function(){return"[Emscripten Module object]"}):v?(typeof read<"u"&&(o.read=function(r){return read(r)}),o.readBinary=function(r){var g;return typeof readbuffer=="function"?new Uint8Array(readbuffer(r)):(j(typeof(g=read(r,"binary"))=="object"),g)},typeof scriptArgs<"u"?o.arguments=scriptArgs:typeof arguments<"u"&&(o.arguments=arguments),typeof quit=="function"&&(o.quit=function(I){quit(I)})):(u||V)&&(u?document.currentScript&&(E=document.currentScript.src):E=self.location.href,E=E.indexOf("blob:")!==0?E.split("/").slice(0,-1).join("/")+"/":"",o.read=function(r){var g=new XMLHttpRequest;return g.open("GET",r,!1),g.send(null),g.responseText},V&&(o.readBinary=function(r){var g=new XMLHttpRequest;return g.open("GET",r,!1),g.responseType="arraybuffer",g.send(null),new Uint8Array(g.response)}),o.readAsync=function(r,g,w){var tt=new XMLHttpRequest;tt.open("GET",r,!0),tt.responseType="arraybuffer",tt.onload=function(){if(tt.status==200||tt.status==0&&tt.response){g(tt.response);return}w()},tt.onerror=w,tt.send(null)},o.setWindowTitle=function(I){document.title=I});var H=o.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),D=o.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||H);for(a in Z)Z.hasOwnProperty(a)&&(o[a]=Z[a]);function y(I){var r=d;return d=d+I+15&-16,r}function C(I,r){return r||(r=16),I=Math.ceil(I/r)*r}Z=void 0;var J={"f64-rem":function(I,r){return I%r},debugger:function(){}},K=0;function j(I,r){I||Gt("Assertion failed: "+r)}function M(I){var r=o["_"+I];return j(r,"Cannot call unknown function "+I+", make sure it is exported"),r}var ct={arrayToC:function(I){var r,g,w=Dl(I.length);return r=I,g=w,n.set(r,g),w},stringToC:function(I){var r=0;if(I!=null&&I!==0){var g=(I.length<<2)+1;r=Dl(g),nt(I,r,g)}return r}},X={string:ct.stringToC,array:ct.arrayToC};function G(I,r,g,w,tt){var Qt=M(I),ht=[],f=0;if(w)for(var Ct=0;Ct<w.length;Ct++){var Vt=X[g[Ct]];Vt?(f===0&&(f=ll()),ht[Ct]=Vt(w[Ct])):ht[Ct]=w[Ct]}var et,dt=Qt.apply(null,ht);return dt=(et=dt,r==="string"?N(et):r==="boolean"?!!et:et),f!==0&&Yt(f),dt}function N(I,r){if(r===0||!I)return"";for(var g,w,tt,Qt=0,ht=0;Qt|=w=Q[I+ht>>0],(w!=0||r)&&(ht++,!r||ht!=r););r||(r=ht);var f="";if(Qt<128){for(;r>0;)tt=String.fromCharCode.apply(String,Q.subarray(I,I+Math.min(r,1024))),f=f?f+tt:tt,I+=1024,r-=1024;return f}return g=I,function(Vt,et){for(var dt=et;Vt[dt];)++dt;if(dt-et>16&&Vt.subarray&&x)return x.decode(Vt.subarray(et,dt));for(var it,Jt,It,Nt,Vl,Kl,kt="";;){if(!(it=Vt[et++]))return kt;if(!(128&it)){kt+=String.fromCharCode(it);continue}if(Jt=63&Vt[et++],(224&it)==192){kt+=String.fromCharCode((31&it)<<6|Jt);continue}if(It=63&Vt[et++],(240&it)==224?it=(15&it)<<12|Jt<<6|It:(Nt=63&Vt[et++],(248&it)==240?it=(7&it)<<18|Jt<<12|It<<6|Nt:(Vl=63&Vt[et++],it=(252&it)==248?(3&it)<<24|Jt<<18|It<<12|Nt<<6|Vl:(1&it)<<30|Jt<<24|It<<18|Nt<<12|Vl<<6|(Kl=63&Vt[et++]))),it<65536)kt+=String.fromCharCode(it);else{var wl=it-65536;kt+=String.fromCharCode(55296|wl>>10,56320|1023&wl)}}}(Q,g)}var x=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function at(I,r,g,w){if(!(w>0))return 0;for(var tt=g,Qt=g+w-1,ht=0;ht<I.length;++ht){var f=I.charCodeAt(ht);if(f>=55296&&f<=57343&&(f=65536+((1023&f)<<10)|1023&I.charCodeAt(++ht)),f<=127){if(g>=Qt)break;r[g++]=f}else if(f<=2047){if(g+1>=Qt)break;r[g++]=192|f>>6,r[g++]=128|63&f}else if(f<=65535){if(g+2>=Qt)break;r[g++]=224|f>>12,r[g++]=128|f>>6&63,r[g++]=128|63&f}else if(f<=2097151){if(g+3>=Qt)break;r[g++]=240|f>>18,r[g++]=128|f>>12&63,r[g++]=128|f>>6&63,r[g++]=128|63&f}else if(f<=67108863){if(g+4>=Qt)break;r[g++]=248|f>>24,r[g++]=128|f>>18&63,r[g++]=128|f>>12&63,r[g++]=128|f>>6&63,r[g++]=128|63&f}else{if(g+5>=Qt)break;r[g++]=252|f>>30,r[g++]=128|f>>24&63,r[g++]=128|f>>18&63,r[g++]=128|f>>12&63,r[g++]=128|f>>6&63,r[g++]=128|63&f}}return r[g]=0,g-tt}function nt(I,r,g){return at(I,Q,r,g)}typeof TextDecoder<"u"&&new TextDecoder("utf-16le");function ut(I,r){return I%r>0&&(I+=r-I%r),I}function Mt(I){o.buffer=e=I}function yt(){o.HEAP8=n=new Int8Array(e),o.HEAP16=new Int16Array(e),o.HEAP32=A=new Int32Array(e),o.HEAPU8=Q=new Uint8Array(e),o.HEAPU16=new Uint16Array(e),o.HEAPU32=new Uint32Array(e),o.HEAPF32=new Float32Array(e),o.HEAPF64=new Float64Array(e)}function zt(){var I=o.usingWasm?65536:16777216,r=2147483648-I;if(A[m>>2]>r)return!1;var g=Ft;for(Ft=Math.max(Ft,16777216);Ft<A[m>>2];)Ft=Ft<=536870912?ut(2*Ft,I):Math.min(ut((3*Ft+2147483648)/4,I),r);var w=o.reallocBuffer(Ft);return w&&w.byteLength==Ft?(Mt(w),yt(),!0):(Ft=g,!1)}s=d=i=U=B=m=0,o.reallocBuffer||(o.reallocBuffer=function(I){try{if(ArrayBuffer.transfer)r=ArrayBuffer.transfer(e,I);else{var r,g=n;r=new ArrayBuffer(I),new Int8Array(r).set(g)}}catch{return!1}return!!Ke(r)&&r});try{(h=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{h=function(r){return r.byteLength}}var Kt=o.TOTAL_STACK||5242880,Ft=o.TOTAL_MEMORY||16777216;function _(){return Ft}function b(I){for(;I.length>0;){var r=I.shift();if(typeof r=="function"){r();continue}var g=r.func;typeof g=="number"?r.arg===void 0?o.dynCall_v(g):o.dynCall_vi(g,r.arg):g(r.arg===void 0?null:r.arg)}}Ft<Kt&&D("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+Ft+"! (TOTAL_STACK="+Kt+")"),o.buffer?e=o.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(o.wasmMemory=new WebAssembly.Memory({initial:Ft/65536}),e=o.wasmMemory.buffer):e=new ArrayBuffer(Ft),o.buffer=e),yt();var O=[],Wt=[],Zl=[],Ul=[],gl=!1;function xl(I){O.unshift(I)}function vl(I){Ul.unshift(I)}var oe=Math.floor,Ht=0,wt=null;o.preloadedImages={},o.preloadedAudios={};var Gl="data:application/octet-stream;base64,";function St(I){return String.prototype.startsWith?I.startsWith(Gl):I.indexOf(Gl)===0}(function(){var r="main.wast",g="main.wasm",w="main.temp.asm";St(r)||(r=k(r)),St(g)||(g=k(g)),St(w)||(w=k(w));var tt={global:null,env:null,asm2wasm:J,parent:o},Qt=null;function ht(){try{if(o.wasmBinary)return new Uint8Array(o.wasmBinary);if(o.readBinary)return o.readBinary(g);throw"both async and sync fetching of the wasm failed"}catch(et){Gt(et)}}o.asmPreload=o.asm;var f=o.reallocBuffer,Ct=function(et){et=ut(et,o.usingWasm?65536:16777216);var dt=o.buffer.byteLength;if(o.usingWasm)try{var it=o.wasmMemory.grow((et-dt)/65536);return it!==-1?o.buffer=o.wasmMemory.buffer:null}catch{return null}};o.reallocBuffer=function(et){return Vt==="asmjs"?f(et):Ct(et)};var Vt="";o.asm=function(et,dt,it){if(!(dt=dt).table){var Jt,It=o.wasmTableSize;It===void 0&&(It=1024);var Nt=o.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?Nt!==void 0?dt.table=new WebAssembly.Table({initial:It,maximum:Nt,element:"anyfunc"}):dt.table=new WebAssembly.Table({initial:It,element:"anyfunc"}):dt.table=Array(It),o.wasmTable=dt.table}return dt.memoryBase||(dt.memoryBase=o.STATIC_BASE),dt.tableBase||(dt.tableBase=0),Jt=function(Kl,kt,wl){if(typeof WebAssembly!="object")return D("no native wasm support detected"),!1;if(!(o.wasmMemory instanceof WebAssembly.Memory))return D("no native wasm Memory in use"),!1;function pl(Tt,qt){if((Qt=Tt.exports).memory){var fl,we,Fn;fl=Qt.memory,we=o.buffer,fl.byteLength<we.byteLength&&D("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),Fn=new Int8Array(we),new Int8Array(fl).set(Fn),Mt(fl),yt()}o.asm=Qt,o.usingWasm=!0,function(bs){if(Ht--,o.monitorRunDependencies&&o.monitorRunDependencies(Ht),Ht==0&&wt){var ns=wt;wt=null,ns()}}()}if(kt.memory=o.wasmMemory,tt.global={NaN:NaN,Infinity:1/0},tt["global.Math"]=Math,tt.env=kt,Ht++,o.monitorRunDependencies&&o.monitorRunDependencies(Ht),o.instantiateWasm)try{return o.instantiateWasm(tt,pl)}catch(Tt){return D("Module.instantiateWasm callback failed with error: "+Tt),!1}function yl(Tt){pl(Tt.instance,Tt.module)}function Be(Tt){(!o.wasmBinary&&(u||V)&&typeof fetch=="function"?fetch(g,{credentials:"same-origin"}).then(function(qt){if(!qt.ok)throw"failed to load wasm binary file at '"+g+"'";return qt.arrayBuffer()}).catch(function(){return ht()}):new Promise(function(qt,fl){qt(ht())})).then(function(qt){return WebAssembly.instantiate(qt,tt)}).then(Tt).catch(function(qt){D("failed to asynchronously prepare wasm: "+qt),Gt(qt)})}return o.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||St(g)||typeof fetch!="function"?Be(yl):WebAssembly.instantiateStreaming(fetch(g,{credentials:"same-origin"}),tt).then(yl).catch(function(Tt){D("wasm streaming compile failed: "+Tt),D("falling back to ArrayBuffer instantiation"),Be(yl)}),{}}(et,dt),j(Jt,"no binaryen method succeeded."),Jt},o.asm})(),d=(s=1024)+4816,Wt.push(),o.STATIC_BASE=s,o.STATIC_BUMP=4816;var Fe=d;d+=16,m=y(4),U=(i=C(d))+Kt,B=C(U),A[m>>2]=B,o.wasmTableSize=4,o.wasmMaxTableSize=4,o.asmGlobalArg={},o.asmLibraryArg={abort:Gt,assert:j,enlargeMemory:zt,getTotalMemory:_,abortOnCannotGrowMemory:function(){Gt("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+Ft+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_iii:function(r,g,w){var tt=ll();try{return o.dynCall_iii(r,g,w)}catch(Qt){if(Yt(tt),typeof Qt!="number"&&Qt!=="longjmp")throw Qt;o.setThrew(1,0)}},___assert_fail:function(r,g,w,tt){Gt("Assertion failed: "+N(r)+", at: "+[g?N(g):"unknown filename",w,tt?N(tt):"unknown function"])},___setErrNo:function(r){return o.___errno_location&&(A[o.___errno_location()>>2]=r),r},_abort:function(){o.abort()},_emscripten_memcpy_big:function(r,g,w){return Q.set(Q.subarray(g,g+w),r),r},_llvm_floor_f64:oe,DYNAMICTOP_PTR:m,tempDoublePtr:Fe,ABORT:K,STACKTOP:i,STACK_MAX:U};var Ue=o.asm(o.asmGlobalArg,o.asmLibraryArg,e);o.asm=Ue,o.___errno_location=function(){return o.asm.___errno_location.apply(null,arguments)};var Ke=o._emscripten_replace_memory=function(){return o.asm._emscripten_replace_memory.apply(null,arguments)};o._free=function(){return o.asm._free.apply(null,arguments)},o._malloc=function(){return o.asm._malloc.apply(null,arguments)},o._memcpy=function(){return o.asm._memcpy.apply(null,arguments)},o._memset=function(){return o.asm._memset.apply(null,arguments)},o._sbrk=function(){return o.asm._sbrk.apply(null,arguments)},o._stb_vorbis_js_channels=function(){return o.asm._stb_vorbis_js_channels.apply(null,arguments)},o._stb_vorbis_js_close=function(){return o.asm._stb_vorbis_js_close.apply(null,arguments)},o._stb_vorbis_js_decode=function(){return o.asm._stb_vorbis_js_decode.apply(null,arguments)},o._stb_vorbis_js_open=function(){return o.asm._stb_vorbis_js_open.apply(null,arguments)},o._stb_vorbis_js_sample_rate=function(){return o.asm._stb_vorbis_js_sample_rate.apply(null,arguments)},o.establishStackSpace=function(){return o.asm.establishStackSpace.apply(null,arguments)},o.getTempRet0=function(){return o.asm.getTempRet0.apply(null,arguments)},o.runPostSets=function(){return o.asm.runPostSets.apply(null,arguments)},o.setTempRet0=function(){return o.asm.setTempRet0.apply(null,arguments)},o.setThrew=function(){return o.asm.setThrew.apply(null,arguments)};var Dl=o.stackAlloc=function(){return o.asm.stackAlloc.apply(null,arguments)},Yt=o.stackRestore=function(){return o.asm.stackRestore.apply(null,arguments)},ll=o.stackSave=function(){return o.asm.stackSave.apply(null,arguments)};function el(I){this.name="ExitStatus",this.message="Program terminated with exit("+I+")",this.status=I}function Jl(I){I=I||o.arguments,!(Ht>0)&&(function(){if(o.preRun)for(typeof o.preRun=="function"&&(o.preRun=[o.preRun]);o.preRun.length;)xl(o.preRun.shift());b(O)}(),!(Ht>0)&&(o.calledRun||(o.setStatus?(o.setStatus("Running..."),setTimeout(function(){setTimeout(function(){o.setStatus("")},1),r()},1)):r())));function r(){!o.calledRun&&(o.calledRun=!0,K||(gl||(gl=!0,b(Wt)),b(Zl),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for(typeof o.postRun=="function"&&(o.postRun=[o.postRun]);o.postRun.length;)vl(o.postRun.shift());b(Ul)}()))}}function Gt(I){throw o.onAbort&&o.onAbort(I),I!==void 0?(H(I),D(I),I=JSON.stringify(I)):I="",K=!0,"abort("+I+"). Build with -s ASSERTIONS=1 for more info."}if(o.dynCall_iii=function(){return o.asm.dynCall_iii.apply(null,arguments)},o.asm=Ue,o.ccall=G,o.cwrap=function(r,g,w,tt){var Qt=(w=w||[]).every(function(ht){return ht==="number"});return g!=="string"&&Qt&&!tt?M(r):function(){return G(r,g,w,arguments)}},el.prototype=Error(),el.prototype.constructor=el,wt=function I(){o.calledRun||Jl(),o.calledRun||(wt=I)},o.run=Jl,o.abort=Gt,o.preInit)for(typeof o.preInit=="function"&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();o.noExitRuntime=!0,Jl(),o.onRuntimeInitialized=()=>{ya=!0,Na()},Xl.decode=function(I){return function(g){if(!ya)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var w={};function tt(pl){return new Int32Array(o.HEAPU8.buffer,pl,1)[0]}function Qt(pl,yl){var Be=new ArrayBuffer(yl*Float32Array.BYTES_PER_ELEMENT),Tt=new Float32Array(Be);return Tt.set(new Float32Array(o.HEAPU8.buffer,pl,yl)),Tt}w.open=o.cwrap("stb_vorbis_js_open","number",[]),w.close=o.cwrap("stb_vorbis_js_close","void",["number"]),w.channels=o.cwrap("stb_vorbis_js_channels","number",["number"]),w.sampleRate=o.cwrap("stb_vorbis_js_sample_rate","number",["number"]),w.decode=o.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var ht,f,Ct,Vt,et=w.open(),dt=(ht=g,f=g.byteLength,Ct=o._malloc(f),(Vt=new Uint8Array(o.HEAPU8.buffer,Ct,f)).set(new Uint8Array(ht,0,f)),Vt),it=o._malloc(4),Jt=o._malloc(4),It=w.decode(et,dt.byteOffset,dt.byteLength,it,Jt);if(o._free(dt.byteOffset),It<0)throw w.close(et),o._free(it),Error("stbvorbis decode failed: "+It);for(var Nt=w.channels(et),Vl=Array(Nt),Kl=new Int32Array(o.HEAPU32.buffer,tt(it),Nt),kt=0;kt<Nt;kt++)Vl[kt]=Qt(Kl[kt],It),o._free(Kl[kt]);var wl=w.sampleRate(et);return w.close(et),o._free(tt(it)),o._free(it),{data:Vl,sampleRate:wl,eof:!0,error:null}}(I)}})();var ka=Xl,Xa=-15e3,dQ=15e3,Ya=new Float32Array(dQ-Xa+1);for(let a=0;a<Ya.length;a++){const t=Xa+a;Ya[a]=Math.pow(2,t/1200)}var te=-2e4,Ta=16500,We=new Float32Array(Ta-te+1);for(let a=0;a<We.length;a++){const t=te+a;We[a]=440*Math.pow(2,(t-6900)/1200)}function iQ(a){return a<te||a>Ta?440*Math.pow(2,(a-6900)/1200):We[~~a-te]}var Se=-1660,oQ=1600,Ce=new Float32Array((oQ-Se)*100+1);for(let a=0;a<Ce.length;a++){const t=(Se*100+a)/100;Ce[a]=Math.pow(10,-t/20)}function La(a){return Ce[Math.floor((a-Se)*100)]}function hl(a,t){return(a>>t&1)>0}function ge(a){return a?1:0}var pt=16384,le=Object.keys(Bt).length,Ma=4,Pt=new Float32Array(pt+1),ml=new Float32Array(pt+1);Pt[0]=0,Pt[Pt.length-1]=1,ml[0]=0,ml[ml.length-1]=1;for(let a=1;a<pt-1;a++){const t=-.4166666666666667*Math.log(a/(Pt.length-1))/Math.LN10;ml[a]=1-t,Pt[Pt.length-1-a]=t}function xa(a,t,l){const e=!!(a&2);switch(!!(a&1)&&(l=1-l),t){case Bt.linear:return e?l*2-1:l;case Bt.switch:return l=l>.5?1:0,e?l*2-1:l;case Bt.concave:return e?(l=l*2-1,l<0?-Pt[~~(l*-pt)]:Pt[~~(l*pt)]):Pt[~~(l*pt)];case Bt.convex:return e?(l=l*2-1,l<0?-ml[~~(l*-pt)]:ml[~~(l*pt)]):ml[~~(l*pt)]}}var Ot=class fe{constructor(t=Ut.noController,l=Bt.linear,e=!1,n=!1,Q=!1){R(this,"isBipolar");R(this,"isNegative");R(this,"index");R(this,"isCC");R(this,"curveType");this.isBipolar=n,this.isNegative=Q,this.index=t,this.isCC=e,this.curveType=l}get sourceName(){return this.isCC?Object.keys(q).find(t=>q[t]===this.index)??this.index.toString():Object.keys(Ut).find(t=>Ut[t]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(Bt).find(t=>Bt[t]===this.curveType)??this.curveType.toString()}static fromSourceEnum(t){const l=hl(t,9),e=hl(t,8),n=hl(t,7),Q=t&127,A=t>>10&3;return new fe(Q,A,n,l,e)}static copyFrom(t){return new fe(t.index,t.curveType,t.isCC,t.isBipolar,t.isNegative)}toString(){return`${this.sourceName} ${this.curveTypeName} ${this.isBipolar?"bipolar":"unipolar"} ${this.isNegative?"negative":"positive"}`}toSourceEnum(){return this.curveType<<10|ge(this.isBipolar)<<9|ge(this.isNegative)<<8|ge(this.isCC)<<7|this.index}isIdentical(t){return this.index===t.index&&this.isNegative===t.isNegative&&this.isCC===t.isCC&&this.isBipolar===t.isBipolar&&this.curveType===t.curveType}getValue(t,l){let e;if(this.isCC)e=t[this.index];else switch(this.index){case Ut.noController:e=16383;break;case Ut.noteOnKeyNum:e=l.midiNote<<7;break;case Ut.noteOnVelocity:e=l.velocity<<7;break;case Ut.polyPressure:e=l.pressure<<7;break;default:e=t[this.index+ue];break}const n=(this.isBipolar?2:0)|(this.isNegative?1:0);return va[pt*(this.curveType*le+n)+e]}},va=new Float32Array(pt*Ma*le);for(let a=0;a<le;a++)for(let t=0;t<Ma;t++){const l=pt*(a*le+t);for(let e=0;e<pt;e++)va[l+e]=xa(t,a,e/pt)}var Fl=10;function _t(a,t,l,e,n){return new Ot(n,a,e,t,l).toSourceEnum()}var Da=_t(Bt.linear,!0,!1,!0,q.filterResonance),Zt=class ze{constructor(t=new Ot,l=new Ot,e=c.INVALID,n=0,Q=0,A=!1,s=!1){R(this,"currentValue",0);R(this,"destination",c.initialAttenuation);R(this,"transformAmount",0);R(this,"transformType",0);R(this,"isEffectModulator",!1);R(this,"isDefaultResonantModulator",!1);R(this,"primarySource");R(this,"secondarySource");this.primarySource=t,this.secondarySource=l,this.destination=e,this.transformAmount=n,this.transformType=Q,this.isEffectModulator=A,this.isDefaultResonantModulator=s}get destinationName(){return Object.keys(c).find(t=>c[t]===this.destination)}static isIdentical(t,l,e=!1){return t.primarySource.isIdentical(l.primarySource)&&t.secondarySource.isIdentical(l.secondarySource)&&t.destination===l.destination&&t.transformType===l.transformType&&(!e||t.transformAmount===l.transformAmount)}static copyFrom(t){return new ze(Ot.copyFrom(t.primarySource),Ot.copyFrom(t.secondarySource),t.destination,t.transformAmount,t.transformType,t.isEffectModulator,t.isDefaultResonantModulator)}toString(){return`Source: ${this.primarySource.toString()}
1
+ (function($,F){typeof exports=="object"&&typeof module<"u"?F(exports,require("vue"),require("pinia")):typeof define=="function"&&define.amd?define(["exports","vue","pinia"],F):($=typeof globalThis<"u"?globalThis:$||self,F($.AudioMixerUI={},$.Vue,$.Pinia))})(this,function($,F,jt){"use strict";var As=Object.defineProperty;var Qs=($,F,jt)=>F in $?As($,F,{enumerable:!0,configurable:!0,writable:!0,value:jt}):$[F]=jt;var R=($,F,jt)=>Qs($,typeof F!="symbol"?F+"":F,jt);var ft,tl;var $e=function(){if(typeof Map<"u")return Map;function a(t,l){var e=-1;return t.some(function(n,Q){return n[0]===l?(e=Q,!0):!1}),e}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(l){var e=a(this.__entries__,l),n=this.__entries__[e];return n&&n[1]},t.prototype.set=function(l,e){var n=a(this.__entries__,l);~n?this.__entries__[n][1]=e:this.__entries__.push([l,e])},t.prototype.delete=function(l){var e=this.__entries__,n=a(e,l);~n&&e.splice(n,1)},t.prototype.has=function(l){return!!~a(this.__entries__,l)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(l,e){e===void 0&&(e=null);for(var n=0,Q=this.__entries__;n<Q.length;n++){var A=Q[n];l.call(e,A[1],A[0])}},t}()}(),me=typeof window<"u"&&typeof document<"u"&&window.document===document,Hl=function(){return typeof global<"u"&&global.Math===Math?global:typeof self<"u"&&self.Math===Math?self:typeof window<"u"&&window.Math===Math?window:Function("return this")()}(),Bn=function(){return typeof requestAnimationFrame=="function"?requestAnimationFrame.bind(Hl):function(a){return setTimeout(function(){return a(Date.now())},1e3/60)}}(),cn=2;function hn(a,t){var l=!1,e=!1,n=0;function Q(){l&&(l=!1,a()),e&&s()}function A(){Bn(Q)}function s(){var d=Date.now();if(l){if(d-n<cn)return;e=!0}else l=!0,e=!1,setTimeout(A,t);n=d}return s}var mn=20,Rn=["top","right","bottom","left","width","height","size","weight"],Zn=typeof MutationObserver<"u",Vn=function(){function a(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=hn(this.refresh.bind(this),mn)}return a.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},a.prototype.removeObserver=function(t){var l=this.observers_,e=l.indexOf(t);~e&&l.splice(e,1),!l.length&&this.connected_&&this.disconnect_()},a.prototype.refresh=function(){var t=this.updateObservers_();t&&this.refresh()},a.prototype.updateObservers_=function(){var t=this.observers_.filter(function(l){return l.gatherActive(),l.hasActive()});return t.forEach(function(l){return l.broadcastActive()}),t.length>0},a.prototype.connect_=function(){!me||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Zn?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},a.prototype.disconnect_=function(){!me||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},a.prototype.onTransitionEnd_=function(t){var l=t.propertyName,e=l===void 0?"":l,n=Rn.some(function(Q){return!!~e.indexOf(Q)});n&&this.refresh()},a.getInstance=function(){return this.instance_||(this.instance_=new a),this.instance_},a.instance_=null,a}(),ta=function(a,t){for(var l=0,e=Object.keys(t);l<e.length;l++){var n=e[l];Object.defineProperty(a,n,{value:t[n],enumerable:!1,writable:!1,configurable:!0})}return a},El=function(a){var t=a&&a.ownerDocument&&a.ownerDocument.defaultView;return t||Hl},la=jl(0,0,0,0);function ql(a){return parseFloat(a)||0}function ea(a){for(var t=[],l=1;l<arguments.length;l++)t[l-1]=arguments[l];return t.reduce(function(e,n){var Q=a["border-"+n+"-width"];return e+ql(Q)},0)}function rn(a){for(var t=["top","right","bottom","left"],l={},e=0,n=t;e<n.length;e++){var Q=n[e],A=a["padding-"+Q];l[Q]=ql(A)}return l}function En(a){var t=a.getBBox();return jl(0,0,t.width,t.height)}function bn(a){var t=a.clientWidth,l=a.clientHeight;if(!t&&!l)return la;var e=El(a).getComputedStyle(a),n=rn(e),Q=n.left+n.right,A=n.top+n.bottom,s=ql(e.width),d=ql(e.height);if(e.boxSizing==="border-box"&&(Math.round(s+Q)!==t&&(s-=ea(e,"left","right")+Q),Math.round(d+A)!==l&&(d-=ea(e,"top","bottom")+A)),!In(a)){var i=Math.round(s+Q)-t,U=Math.round(d+A)-l;Math.abs(i)!==1&&(s-=i),Math.abs(U)!==1&&(d-=U)}return jl(n.left,n.top,s,d)}var un=function(){return typeof SVGGraphicsElement<"u"?function(a){return a instanceof El(a).SVGGraphicsElement}:function(a){return a instanceof El(a).SVGElement&&typeof a.getBBox=="function"}}();function In(a){return a===El(a).document.documentElement}function Wn(a){return me?un(a)?En(a):bn(a):la}function Sn(a){var t=a.x,l=a.y,e=a.width,n=a.height,Q=typeof DOMRectReadOnly<"u"?DOMRectReadOnly:Object,A=Object.create(Q.prototype);return ta(A,{x:t,y:l,width:e,height:n,top:l,right:t+e,bottom:n+l,left:t}),A}function jl(a,t,l,e){return{x:a,y:t,width:l,height:e}}var Cn=function(){function a(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=jl(0,0,0,0),this.target=t}return a.prototype.isActive=function(){var t=Wn(this.target);return this.contentRect_=t,t.width!==this.broadcastWidth||t.height!==this.broadcastHeight},a.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t},a}(),gn=function(){function a(t,l){var e=Sn(l);ta(this,{target:t,contentRect:e})}return a}(),Gn=function(){function a(t,l,e){if(this.activeObservations_=[],this.observations_=new $e,typeof t!="function")throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=t,this.controller_=l,this.callbackCtx_=e}return a.prototype.observe=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(t instanceof El(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var l=this.observations_;l.has(t)||(l.set(t,new Cn(t)),this.controller_.addObserver(this),this.controller_.refresh())}},a.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(t instanceof El(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var l=this.observations_;l.has(t)&&(l.delete(t),l.size||this.controller_.removeObserver(this))}},a.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},a.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach(function(l){l.isActive()&&t.activeObservations_.push(l)})},a.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,l=this.activeObservations_.map(function(e){return new gn(e.target,e.broadcastRect())});this.callback_.call(t,l,t),this.clearActive()}},a.prototype.clearActive=function(){this.activeObservations_.splice(0)},a.prototype.hasActive=function(){return this.activeObservations_.length>0},a}(),aa=typeof WeakMap<"u"?new WeakMap:new $e,na=function(){function a(t){if(!(this instanceof a))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var l=Vn.getInstance(),e=new Gn(t,l,this);aa.set(this,e)}return a}();["observe","unobserve","disconnect"].forEach(function(a){na.prototype[a]=function(){var t;return(t=aa.get(this))[a].apply(t,arguments)}});var Jn=function(){return typeof Hl.ResizeObserver<"u"?Hl.ResizeObserver:na}();function al(a){const t=F.ref(0),l=F.ref(0);let e=null;const n=()=>{e&&(e.disconnect(),e=null)},Q=()=>{n();const A=F.unref(a);if(!A)return;e=new Jn(d=>{const i=d[0];i&&(t.value=i.contentRect.width,l.value=i.contentRect.height)}),e.observe(A);const s=A.getBoundingClientRect();t.value=s.width,l.value=s.height};return F.watch(()=>F.unref(a),Q,{immediate:!0}),F.onScopeDispose(n),{width:F.readonly(t),height:F.readonly(l)}}const Lt=(a,t)=>{const l=a.__vccOpts||a;for(const[e,n]of t)l[e]=n;return l},pn=["aria-valuemin","aria-valuemax","aria-valuenow","aria-label","aria-orientation","tabindex"],yn={key:0,class:"level"},kl=Lt({__name:"AudioSlider",props:F.mergeModels({min:{type:Number,default:0},max:{type:Number,default:1},step:{type:Number,default:.01},keystep:{type:Number,default:null},colour:{type:String,default:"grey"},style:{type:String,default:"volume"},thumbLength:{type:Number,default:1},showLevel:{type:Boolean,default:!1},level:{type:Number,default:.5},tabindex:{type:String,default:"0"}},{value:{default:.75},valueModifiers:{}}),emits:["update:value"],setup(a){F.useCssVars(C=>({"2096b4c3":h.value,"757f26aa":m.value,"744b71b7":u.value,d898db12:o.value,"3a8d2f7c":Z.value}));const t=a,l=F.useTemplateRef("root"),{width:e,height:n}=al(l),Q=F.computed(()=>Math.min(e.value,n.value)),A=F.computed(()=>Math.max(e.value,n.value)),s=F.computed(()=>e.value>n.value),d=F.computed(()=>s.value?"h-slide":"v-slide"),i=F.useModel(a,"value");F.computed(()=>Math.pow(1-i.value,.5)*180+20),F.computed(()=>Math.pow(i.value,.5)*180+20);const U=F.computed(()=>Q.value*.8),B=F.computed(()=>Q.value*t.thumbLength*.8),m=F.computed(()=>(s.value?B:U).value+"px"),h=F.computed(()=>(s.value?U:B).value+"px"),o=F.computed(()=>Q.value*.1+"px"),Z=F.computed(()=>(A.value-B.value)*(i.value-t.min)/(t.max-t.min)+"px"),u=F.computed(()=>s.value?"90deg":"0deg"),V=F.ref(!1),p=F.ref(0),v=C=>{if(!l.value)return i.value;const J=l.value.getBoundingClientRect(),K=C.clientX,j=C.clientY;let M;if(s.value){const X=K-J.left-U.value/2,G=J.width-U.value;M=Math.max(0,Math.min(1,X/G))}else{const X=J.bottom-j-U.value/2,G=J.height-U.value;M=Math.max(0,Math.min(1,X/G))}const ct=t.min+M*(t.max-t.min);return t.step>0?Math.round(ct/t.step)*t.step:ct},E=C=>{C.preventDefault(),V.value=!0,p.value=i.value,l.value&&l.value.focus(),i.value=v(C),l.value&&l.value.setPointerCapture&&l.value.setPointerCapture(C.pointerId),document.addEventListener("pointermove",k),document.addEventListener("pointerup",H),document.addEventListener("pointercancel",H)},k=C=>{V.value&&(C.preventDefault(),i.value=v(C))},H=C=>{if(V.value){if(C.preventDefault(),V.value=!1,l.value&&l.value.releasePointerCapture)try{l.value.releasePointerCapture(C.pointerId)}catch{}document.removeEventListener("pointermove",k),document.removeEventListener("pointerup",H),document.removeEventListener("pointercancel",H)}},D=C=>{if(l.value&&l.value.getAttribute("tabindex")==="-1")return;const J=t.keystep!==null?t.keystep:t.step||.01;let K=i.value;switch(C.key){case"ArrowLeft":case"ArrowDown":C.preventDefault(),K=Math.max(t.min,i.value-J);break;case"ArrowRight":case"ArrowUp":C.preventDefault(),K=Math.min(t.max,i.value+J);break;default:return}i.value=K},y=C=>Math.min(1,Math.max(0,t.level*10-C+1));return(C,J)=>(F.openBlock(),F.createElementBlock("div",{class:F.normalizeClass(d.value),ref_key:"root",ref:l,role:"slider","aria-valuemin":a.min,"aria-valuemax":a.max,"aria-valuenow":i.value,"aria-label":`${a.style} control`,"aria-orientation":s.value?"horizontal":"vertical",tabindex:a.tabindex,onPointerdown:E,onKeydown:D,style:{userSelect:"none",touchAction:"none"}},[J[0]||(J[0]=F.createElementVNode("div",{class:"track"},null,-1)),a.showLevel?(F.openBlock(),F.createElementBlock("div",yn,[(F.openBlock(),F.createElementBlock(F.Fragment,null,F.renderList(10,K=>F.createElementVNode("div",{class:F.normalizeClass(["focus","led"+K])},[F.createElementVNode("div",{class:"on",style:F.normalizeStyle({opacity:y(K)})},null,4)],2)),64))])):F.createCommentVNode("",!0),F.createElementVNode("div",{class:F.normalizeClass(["thumb",{dragging:V.value,[a.colour]:!0,[a.style]:!0}])},null,2)],42,pn))}},[["__scopeId","data-v-42160c3a"]]),Re=Lt({__name:"TitleText",props:{align:{type:String,default:"left"},overflow:{type:String,default:"crop",validator:a=>["crop","scroll"].includes(a)}},setup(a){F.useCssVars(B=>({"9d94564a":d.value,"6241cf7e":i.value+"px"}));const t=a,l=F.useTemplateRef("el"),e=F.useTemplateRef("textEl"),{width:n,height:Q}=al(l),A=F.computed(()=>Math.min(n.value,Q.value)),s=F.computed(()=>n.value>Q.value?"h-text":"v-text"),d=F.computed(()=>A.value*3/4+"px"),i=F.ref(0),U=F.ref(!1);return F.watchEffect(()=>{if(!e.value||!l.value||t.overflow!=="scroll"){U.value=!1,i.value=0;return}const B=s.value==="h-text"?n.value:Q.value,m=s.value==="h-text"?e.value.scrollWidth:e.value.scrollHeight,h=B-20;m>h?(U.value=!0,i.value=m-h):(U.value=!1,i.value=0)}),(B,m)=>(F.openBlock(),F.createElementBlock("div",{ref_key:"el",ref:l,class:"outer"},[F.createElementVNode("div",{ref_key:"textEl",ref:e,class:F.normalizeClass({[s.value]:!0,[a.align]:!0,scrolling:U.value})},[F.renderSlot(B.$slots,"default",{},void 0,!0)],2)],512))}},[["__scopeId","data-v-8efcf3aa"]]),Nn={class:"s-label"},kn={class:"m-label"},Aa=Lt({__name:"TriState",props:{mute:{default:!1},muteModifiers:{},solo:{default:!1},soloModifiers:{}},emits:["update:mute","update:solo"],setup(a){const t=F.useModel(a,"mute"),l=F.useModel(a,"solo"),e=F.useTemplateRef("outer"),{width:n,height:Q}=al(e),A=F.computed(()=>n.value>Q.value*1.9);function s(){t.value=!t.value,l.value=!1}function d(){l.value=!l.value,t.value=!1}return(i,U)=>(F.openBlock(),F.createElementBlock("div",{class:"outer",ref_key:"outer",ref:e},[F.createElementVNode("div",{title:"Solo",class:F.normalizeClass(["solo",{on:l.value}]),onClick:d},null,2),F.createElementVNode("div",Nn,F.toDisplayString(A.value?"SOLO":"S"),1),F.createElementVNode("div",{title:"Mute",class:F.normalizeClass(["mute",{on:t.value}]),onClick:s},null,2),F.createElementVNode("div",kn,F.toDisplayString(A.value?"MUTE":"M"),1)],512))}},[["__scopeId","data-v-7e3c1495"]]),Pl={enabled:!1,features:{beatAnimation:!0,randomLevelIndicators:!0,debugMode:!1}},Xn=()=>Pl.enabled,Ze=a=>Pl.enabled&&Pl.features[a],nl=jt.defineStore("audioState",{state:()=>({isPlaying:!1,currentTime:0,playbackSpeed:1,currentBar:1,currentBeat:1,currentRepeat:0,masterVolume:.75,metronomeVolume:.7,partVolumes:{},partMuted:{},partSolo:{},isLeadInActive:!1,isStartingNotesActive:!1,leadInBars:1,metronomeEnabled:!1,leadInEnabled:!0,isLoaded:!1}),getters:{isPlayingOrLeadIn:a=>a.isPlaying||a.isLeadInActive,formattedTime:a=>{const t=Math.floor(a.currentTime/60),l=Math.floor(a.currentTime%60);return`${t}:${l.toString().padStart(2,"0")}`},getPartVolume:a=>t=>a.partVolumes[t]??.75,isPartMuted:a=>t=>a.partMuted[t]??!1,isPartSolo:a=>t=>a.partSolo[t]??!1,isAnySolo:a=>Object.values(a.partSolo).some(t=>t===!0),currentPosition:a=>{let t=`${a.currentBar}.${a.currentBeat}`;return a.currentRepeat>0&&(t+=` (R${a.currentRepeat})`),t}},actions:{setPlaybackState(a){this.isPlaying=a},setCurrentTime(a){this.currentTime=a},setPlaybackSpeed(a){this.playbackSpeed=a},setCurrentBar(a,t=1,l=0){typeof a=="number"&&(this.currentBar=a),typeof t=="number"&&(this.currentBeat=t),typeof l=="number"&&(this.currentRepeat=l)},setMasterVolume(a){this.masterVolume=Math.max(0,Math.min(1,a))},setMetronomeVolume(a){this.metronomeVolume=Math.max(0,Math.min(1,a))},setPartVolume(a,t){this.partVolumes[a]=Math.max(0,Math.min(1,t))},setPartMuted(a,t){this.partMuted[a]=t},setPartSolo(a,t){this.partSolo[a]=t},setLeadInActive(a,t=1){this.isLeadInActive=a,this.leadInBars=t},setStartingNotesActive(a){this.isStartingNotesActive=a},setMetronomeEnabled(a){this.metronomeEnabled=a},setLeadInEnabled(a){this.leadInEnabled=a},initializeParts(a){this.partVolumes={},this.partMuted={},this.partSolo={},a.forEach(t=>{this.partVolumes[t.name]=t.volume||.75,this.partMuted[t.name]=!1,this.partSolo[t.name]=!1})},setLoaded(a){this.isLoaded=a}}}),Al=jt.defineStore("musicData",{state:()=>({beats:[],practiceMarks:{},parts:[],title:"",totalDuration:0,maxBar:0,timeSignature:4,baseTempo:80}),getters:{practiceMarkLetters:a=>Object.keys(a.practiceMarks).sort(),getBarForMark:a=>t=>a.practiceMarks[t],allBars:a=>{const t=new Set;return a.beats.forEach(l=>{l.beat===1&&t.add(l.bar)}),Array.from(t).sort((l,e)=>l-e)},hasRepeats:a=>t=>a.beats.some(l=>l.bar===t&&l.repeat>0),getRepeatCountForBar:a=>t=>{const l=new Set;return a.beats.forEach(e=>{e.bar===t&&l.add(e.repeat)}),l.size}},actions:{loadMusicData(a){this.title=a.title||"Untitled",this.beats=a.beats||[],this.practiceMarks=a.practiceMarks||a.marks||{},this.parts=(a.parts||[]).map(t=>({...t,solo:t.solo||!1,mute:t.mute||!1})),this.calculateDuration(),this.calculateMaxBar(),this.extractTimeSignature()},calculateDuration(){this.beats.length>0&&(this.totalDuration=Math.max(...this.beats.map(a=>a.time)))},calculateMaxBar(){this.beats.length>0&&(this.maxBar=Math.max(...this.beats.map(a=>a.bar)))},extractTimeSignature(){this.beats.length>0&&this.beats[0].timeSig&&(this.timeSignature=this.beats[0].timeSig),this.beats.length>0&&this.beats[0].tempo&&(this.baseTempo=this.beats[0].tempo)},setPracticeMark(a,t){this.practiceMarks[a]=t},removePracticeMark(a){delete this.practiceMarks[a]},updateBeats(a){console.log("Updating beats in music data store"),this.beats=a,this.calculateDuration(),this.calculateMaxBar(),this.extractTimeSignature()},setTotalDuration(a){console.log("Setting total duration in music data store to:",a),this.totalDuration=a},isValidBar(a,t=0){return this.beats.some(l=>l.bar===a&&l.repeat===t)},setParts(a){this.parts=a.map(t=>({name:t.name,volume:t.volume||.75,solo:t.solo||!1,mute:t.mute||!1}))},clear(){this.beats=[],this.practiceMarks={},this.parts=[],this.title="",this.totalDuration=0,this.maxBar=0,this.timeSignature=4,this.baseTempo=80}}}),Ve=jt.defineStore("playbackState",{state:()=>({transportState:"stopped",autoPlay:!1,loopEnabled:!1,loopStart:1,loopEnd:null,leadInEnabled:!0,leadInBars:1,startingNotesEnabled:!0,startingNotesSequential:!0,metronomeEnabled:!1,metronomeVolume:.5,showTransportControls:!0,showPartControls:!0,showNavigationControls:!0,lastBarPosition:1,lastPracticeMarkUsed:null,lastPlayStartBar:null,lastPlayStartRepeat:null,lastPlayStartTime:null,lastNavigationAction:null,fixedNavigationPoints:[],navigationPoints:[]}),getters:{isPlaying:a=>a.transportState==="playing",isPaused:a=>a.transportState==="paused",isStopped:a=>a.transportState==="stopped",isLoopConfigured:a=>a.loopEnabled&&a.loopStart&&a.loopEnd&&a.loopEnd>a.loopStart,loopRange:a=>!a.loopEnabled||!a.loopStart||!a.loopEnd?null:`${a.loopStart}-${a.loopEnd}`,getNavigationPoints:a=>a.navigationPoints},actions:{setTransportState(a){["stopped","playing","paused"].includes(a)&&(this.transportState=a)},play(){this.setTransportState("playing")},pause(){this.setTransportState("paused")},stop(){this.setTransportState("stopped")},setAutoPlay(a){this.autoPlay=a},setLoop(a,t=null,l=null){this.loopEnabled=a,t!==null&&(this.loopStart=t),l!==null&&(this.loopEnd=l)},setLoopStart(a){this.loopStart=a,this.loopEnd&&this.loopEnd<=a&&(this.loopEnd=a+4)},setLoopEnd(a){this.loopEnd=a,this.loopStart&&this.loopStart>=a&&(this.loopStart=Math.max(1,a-4))},setLeadInEnabled(a){this.leadInEnabled=a},setLeadInBars(a){this.leadInBars=Math.max(1,Math.min(4,a))},setStartingNotesEnabled(a){this.startingNotesEnabled=a},setStartingNotesSequential(a){this.startingNotesSequential=a},setMetronomeEnabled(a){this.metronomeEnabled=a},setMetronomeVolume(a){this.metronomeVolume=Math.max(0,Math.min(1,a))},setTransportControlsVisible(a){this.showTransportControls=a},setPartControlsVisible(a){this.showPartControls=a},setNavigationControlsVisible(a){this.showNavigationControls=a},updateLastBarPosition(a){this.lastBarPosition=a},updateLastPracticeMarkUsed(a){this.lastPracticeMarkUsed=a},buildFixedNavigationPoints(){const a=[],t=Al();a.push({time:0,bar:1,repeat:1,label:"Start"});const l=t.beats.filter(e=>e.beat===1);for(const[e,n]of Object.entries(t.practiceMarks))l.filter(Q=>Q.bar===n).forEach(Q=>{a.push({time:Q.time,bar:Q.bar,repeat:Q.repeat,label:`Mark ${e}`})});if(t.beats.length>0){const e=Math.max(...t.beats.map(n=>n.time));a.push({time:e,label:"End"})}this.fixedNavigationPoints=a.sort((e,n)=>e.time-n.time),this.navigationPoints=[...this.fixedNavigationPoints]},rebuildNavigationPoints(){setTimeout(()=>{const a=Al(),t=[...this.fixedNavigationPoints];this.lastPlayStartBar!==null&&a.beats.filter(n=>n.beat===1&&n.bar===this.lastPlayStartBar).forEach(n=>{t.push({time:n.time,bar:n.bar,repeat:n.repeat,label:"Last Play Start"})});const l=t.sort((e,n)=>e.time-n.time);this.navigationPoints=l.filter((e,n,Q)=>n===0||e.time!==Q[n-1].time)},50)},setLastPlayStart(a,t,l){this.lastPlayStartBar=a,this.lastPlayStartRepeat=t,this.lastPlayStartTime=l,this.rebuildNavigationPoints()},setNavigationAction(a){this.lastNavigationAction=a},resetToDefaults(){this.transportState="stopped",this.autoPlay=!1,this.loopEnabled=!1,this.loopStart=1,this.loopEnd=null,this.leadInEnabled=!0,this.leadInBars=1,this.startingNotesEnabled=!0,this.startingNotesSequential=!0,this.metronomeEnabled=!1,this.metronomeVolume=.5}}});function Qa(a){return{all:a=a||new Map,on:function(t,l){var e=a.get(t);e?e.push(l):a.set(t,[l])},off:function(t,l){var e=a.get(t);e&&(l?e.splice(e.indexOf(l)>>>0,1):a.set(t,[]))},emit:function(t,l){var e=a.get(t);e&&e.slice().map(function(n){n(l)}),(e=a.get("*"))&&e.slice().map(function(n){n(t,l)})}}}function re(a){return{all:a=a||new Map,on:function(t,l){var e=a.get(t);e?e.push(l):a.set(t,[l])},off:function(t,l){var e=a.get(t);e&&(l?e.splice(e.indexOf(l)>>>0,1):a.set(t,[]))},emit:function(t,l){var e=a.get(t);e&&e.slice().map(function(n){n(l)}),(e=a.get("*"))&&e.slice().map(function(n){n(t,l)})}}}const Yn="data:audio/mpeg;base64,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",Tn="data:audio/mpeg;base64,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qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tkxPIADij5M+wwzYmAm6X9hJmwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//s0xPaAClDTI6OxLwCwkeLoEJkoqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sUxNoDwAAB/gAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";class Ol{constructor(t,l={}){if(new.target===Ol)throw new Error("AudioEngine is abstract and cannot be instantiated directly");this.audioContext=t,this.options=l,this.isInitialized=!1,this.channels=new WeakMap,this.activeChannels=new Set,this.eventBus=re()}on(t,l){this.eventBus.on(t,l)}off(t,l){this.eventBus.off(t,l)}_emitProgress(t,l,e=null){const n={stage:t,message:l};e!==null&&(n.progress=Math.max(0,Math.min(1,e))),this.eventBus.emit("initProgress",n)}async initialize(t){throw new Error("initialize() must be implemented by subclass")}createChannel(t,l={}){throw new Error("createChannel() must be implemented by subclass")}allSoundsOff(){throw new Error("allSoundsOff() must be implemented by subclass")}clearAllChannels(){throw new Error("clearAllChannels() must be implemented by subclass")}async playMetronomeTick(t,l,e){try{await this._ensureMetronomeBuffersLoaded();const n=l?this.accentTickBuffer:this.regularTickBuffer;if(!n){console.warn("Metronome buffer not available");return}const Q=this.audioContext.createBufferSource();Q.buffer=n;const A=this.audioContext.createGain();A.gain.value=e,Q.connect(A);const s=this.getMetronomeOutput();s?A.connect(s):A.connect(this.audioContext.destination);const d=Math.max(t,this.audioContext.currentTime);Q.start(d)}catch(n){console.warn("Buffer metronome playback failed:",n)}}getMetronomeOutput(){return this._metronomeOutput||(this._metronomeOutput=this.audioContext.createGain(),this._metronomeOutput.gain.value=1,this._metronomeOutput.connect(this.audioContext.destination)),this._metronomeOutput}getMetronomeAnalyser(){return null}async _ensureMetronomeBuffersLoaded(){if(!(this.regularTickBuffer&&this.accentTickBuffer)){try{if(typeof fetch<"u"){const[t,l]=await Promise.all([fetch(Yn),fetch(Tn)]),[e,n]=await Promise.all([t.arrayBuffer(),l.arrayBuffer()]),[Q,A]=await Promise.all([this.audioContext.decodeAudioData(e),this.audioContext.decodeAudioData(n)]);this.regularTickBuffer=Q,this.accentTickBuffer=A;return}}catch(t){console.warn("Failed to load metronome sounds:",t)}this.regularTickBuffer=this.audioContext.createBuffer(2,1024,this.audioContext.sampleRate),this.accentTickBuffer=this.audioContext.createBuffer(2,1024,this.audioContext.sampleRate)}}getActiveChannels(){return Array.from(this.activeChannels)}destroy(){this.allSoundsOff(),this._metronomeOutput&&(this._metronomeOutput.disconnect(),this._metronomeOutput=null),this.regularTickBuffer=null,this.accentTickBuffer=null,this.activeChannels.clear(),this.isInitialized=!1}_validateInitialized(){if(!this.isInitialized)throw new Error("AudioEngine not initialized. Call initialize() first.")}_registerChannel(t){this.activeChannels.add(t)}_unregisterChannel(t){this.activeChannels.delete(t),this.channels.delete(t)}}class _l{constructor(t,l,e={}){if(new.target===_l)throw new Error("ChannelHandle is abstract and cannot be instantiated directly");this.engine=t,this.partId=l,this.options={initialVolume:1,...e},this.isDestroyed=!1,this.noteRefCounts=new Map,this.scheduledEvents=new Map,this.activeNotes=new Set}getOutputNode(){throw new Error("getOutputNode() must be implemented by subclass")}noteOn(t,l){this._validateActive();const e=this.noteRefCounts.get(t)||0;this.noteRefCounts.set(t,e+1),this._actualNoteOn(t,l),e===0&&this.activeNotes.add(t)}noteOff(t){this._validateActive();const l=this.noteRefCounts.get(t)||0;if(l<=0)return;const e=l-1;this.noteRefCounts.set(t,e),e===0&&(this._actualNoteOff(t),this.activeNotes.delete(t),this.noteRefCounts.delete(t))}playNote(t,l,e,n){this._validateActive();const Q=this.engine.audioContext.currentTime,A=`${this.partId}_${t}_${l}_${Date.now()}`;let s=t,d=n;if(t<Q){const h=Q-t;s=Q,d=Math.max(0,n-h)}if(d<=0)return A;const i=Math.max(0,(s-Q)*1e3),U=setTimeout(()=>{this.noteOn(l,e),this.scheduledEvents.delete(`${A}_on`)},i),B=i+d*1e3,m=setTimeout(()=>{this.noteOff(l),this.scheduledEvents.delete(`${A}_off`)},B);return this.scheduledEvents.set(`${A}_on`,U),this.scheduledEvents.set(`${A}_off`,m),A}playPreviewNote(t,l={}){this._validateActive();const e=l.startTime??this.engine.audioContext.currentTime+.01,n=l.duration??.5,Q=l.velocity??100;let A=null;l.instrument!==void 0&&(A=this.getInstrument(),this.setInstrument(l.instrument)),this.playNote(e,t,Q,n),A!==null&&setTimeout(()=>{this.isDestroyed||this.setInstrument(A)},(n+.1)*1e3)}allNotesOff(){this._validateActive(),this.scheduledEvents.forEach(t=>{clearTimeout(t)}),this.scheduledEvents.clear(),this.activeNotes.forEach(t=>{this._actualNoteOff(t)}),this.noteRefCounts.clear(),this.activeNotes.clear()}_actualNoteOn(t,l){throw new Error("_actualNoteOn() must be implemented by subclass")}_actualNoteOff(t){throw new Error("_actualNoteOff() must be implemented by subclass")}async setInstrument(t){throw new Error("setInstrument() must be implemented by subclass")}getInstrument(){throw new Error("getInstrument() must be implemented by subclass")}setVolume(t){throw new Error("setVolume() must be implemented by subclass")}getVolume(){throw new Error("getVolume() must be implemented by subclass")}getPartId(){return this.partId}isActive(){return!this.isDestroyed&&this.engine.isInitialized&&this.engine.activeChannels.has(this)}destroy(){if(!this.isDestroyed){this.allNotesOff();const t=this.getOutputNode();t&&t.disconnect(),this.noteRefCounts.clear(),this.scheduledEvents.clear(),this.activeNotes.clear(),this.engine._unregisterChannel(this),this.isDestroyed=!0}}_validateActive(){if(this.isDestroyed)throw new Error("Channel has been destroyed");if(!this.engine.isInitialized)throw new Error("AudioEngine is not initialized")}}const sa={piano:0,bright_piano:1,electric_grand:2,honky_tonk:3,electric_piano_1:4,electric_piano_2:5,harpsichord:6,clavinet:7,celesta:8,glockenspiel:9,music_box:10,vibraphone:11,marimba:12,xylophone:13,tubular_bells:14,dulcimer:15,drawbar_organ:16,percussive_organ:17,rock_organ:18,church_organ:19,reed_organ:20,accordion:21,harmonica:22,tango_accordion:23,organ:19,nylon_guitar:24,steel_guitar:25,electric_guitar_jazz:26,electric_guitar_clean:27,electric_guitar_muted:28,overdriven_guitar:29,distortion_guitar:30,guitar_harmonics:31,guitar:24,acoustic_bass:32,electric_bass_finger:33,electric_bass_pick:34,fretless_bass:35,slap_bass_1:36,slap_bass_2:37,synth_bass_1:38,synth_bass_2:39,bass:32,violin:40,viola:41,cello:42,contrabass:43,tremolo_strings:44,pizzicato_strings:45,orchestral_harp:46,timpani:47,strings:48,strings_ensemble:48,slow_strings:49,synth_strings_1:50,synth_strings_2:51,choir_aahs:52,voice_oohs:53,synth_voice:54,orchestra_hit:55,trumpet:56,trombone:57,tuba:58,muted_trumpet:59,french_horn:60,brass_section:61,synth_brass_1:62,synth_brass_2:63,soprano_sax:64,alto_sax:65,tenor_sax:66,baritone_sax:67,oboe:68,english_horn:69,bassoon:70,clarinet:71,saxophone:64,piccolo:72,flute:73,recorder:74,pan_flute:75,blown_bottle:76,shakuhachi:77,whistle:78,ocarina:79,lead_1_square:80,lead_2_sawtooth:81,lead_3_calliope:82,lead_4_chiff:83,lead_5_charang:84,lead_6_voice:85,lead_7_fifths:86,lead_8_bass:87,pad_1_new_age:88,pad_2_warm:89,pad_3_polysynth:90,pad_4_choir:91,pad_5_bowed:92,pad_6_metallic:93,pad_7_halo:94,pad_8_sweep:95,fx_1_rain:96,fx_2_soundtrack:97,fx_3_crystal:98,fx_4_atmosphere:99,fx_5_brightness:100,fx_6_goblins:101,fx_7_echoes:102,fx_8_sci_fi:103,sitar:104,banjo:105,shamisen:106,koto:107,kalimba:108,bag_pipe:109,fiddle:110,shanai:111,tinkle_bell:112,agogo:113,steel_drums:114,woodblock:115,taiko_drum:116,melodic_tom:117,synth_drum:118,reverse_cymbal:119,guitar_fret_noise:120,breath_noise:121,seashore:122,bird_tweet:123,telephone_ring:124,helicopter:125,applause:126,gunshot:127},Ln=Object.entries(sa).reduce((a,[t,l])=>(a[l]=t,a),{});class da{static getInstrumentProgram(t){if(typeof t=="number")return t;const l=sa[t.toLowerCase()];return l!==void 0?l:0}static getProgramName(t){return Ln[t]||`Program ${t}`}static generateNoteId(t,l,e){return`${t}_${l}_${Math.round(e)}`}}class Mn extends _l{constructor(t,l,e,n={}){super(t,l,n),this.midiChannel=e,this.currentVolume=n.initialVolume||1,this.currentInstrument=n.instrument||"piano",this.outputGain=null,this._setupOutputNode(),this.setVolume(this.currentVolume),n.instrument&&this.setInstrument(n.instrument)}getOutputNode(){return this.outputGain}_actualNoteOn(t,l){const e=this.engine._getSynthesizer();if(e&&e.noteOn){const n=Math.round(l*this.currentVolume);e.noteOn(this.midiChannel,t,n)}}_actualNoteOff(t){const l=this.engine._getSynthesizer();l&&l.noteOff&&l.noteOff(this.midiChannel,t)}async setInstrument(t){this._validateActive();const l=da.getInstrumentProgram(t);this.currentInstrument=t;const e=this.engine._getSynthesizer();e&&e.programChange?e.programChange(this.midiChannel,l):console.warn("Cannot set instrument: synthesizer not available or no programChange method")}getInstrument(){return this.currentInstrument}setVolume(t){this._validateActive(),t=Math.max(0,Math.min(1,t)),this.currentVolume=t;const l=Math.round(t*127),e=this.engine._getSynthesizer();e&&e.controllerChange&&e.controllerChange(this.midiChannel,7,l)}getVolume(){return this.currentVolume}getMidiChannel(){return this.midiChannel}getActiveNoteCount(){return this.activeNotes.size}playNote(t,l,e,n){this._validateActive();const Q=`${this.partId}_${t}_${l}_${Date.now()}`,A=this.engine._getSynthesizer();if(A&&A.post){const s=Math.round(e*this.currentVolume);A.post({channelNumber:this.midiChannel,type:"midiMessage",data:{messageData:[144|this.midiChannel,l,s],channelOffset:0,force:!1,options:{time:t}}}),A.post({channelNumber:this.midiChannel,type:"midiMessage",data:{messageData:[128|this.midiChannel,l,0],channelOffset:0,force:!1,options:{time:t+n}}})}else return super.playNote(t,l,e,n);return Q}allNotesOff(){this._validateActive();const t=this.engine._getSynthesizer();t&&t.post?t.post({channelNumber:this.midiChannel,type:"midiMessage",data:{messageData:[176|this.midiChannel,123,0],channelOffset:0,force:!1,options:{time:this.engine.audioContext.currentTime}}}):super.allNotesOff()}destroy(){if(!this.isDestroyed){const t=this.engine._getIndividualOutput(this.midiChannel);this.outputGain&&this.outputGain!==t&&this.outputGain.disconnect(),this.outputGain=null}super.destroy()}_setupOutputNode(){const t=this.engine._getIndividualOutput(this.midiChannel);t?this.outputGain=t:(console.warn(`No individual output available for MIDI channel ${this.midiChannel}, using fallback`),this.outputGain=this.engine.audioContext.createGain(),this.outputGain.gain.value=this.currentVolume)}}const xn="data:text/javascript;base64,dmFyIEZlPShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KEEsdCk9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTpBKVt0XX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO3ZhciBKYT0oZT0+dHlwZW9mIEZlPCJ1Ij9GZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KEEsdCk9Pih0eXBlb2YgRmU8InUiP0ZlOkEpW3RdfSk6ZSkoZnVuY3Rpb24oZSl7aWYodHlwZW9mIEZlPCJ1IilyZXR1cm4gRmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KSxZPWNsYXNzIGV4dGVuZHMgVWludDhBcnJheXtjdXJyZW50SW5kZXg9MDtzbGljZShlLEEpe2xldCB0PXN1cGVyLnNsaWNlKGUsQSk7cmV0dXJuIHQuY3VycmVudEluZGV4PTAsdH19O2Z1bmN0aW9uIGVlKGUsQT1lLmxlbmd0aCx0PTApe2xldCBuPSIiO2ZvcihsZXQgcz0wO3M8QTtzKyspe2xldCBhPWVbdCtzXTtpZihhPT09MClyZXR1cm4gbjtuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpfXJldHVybiBufWZ1bmN0aW9uIGhBKGUsQSl7bGV0IHQ9ZS5jdXJyZW50SW5kZXg7cmV0dXJuIGUuY3VycmVudEluZGV4Kz1BLGVlKGUsQSx0KX1mdW5jdGlvbiBuZShlLEE9ITEsdD0hMSl7bGV0IG49ZS5sZW5ndGg7QSYmbisrLHQmJm4lMiE9PTAmJm4rKztsZXQgcz1uZXcgWShuKTtyZXR1cm4ga0EocyxlKSxzfWZ1bmN0aW9uIGtBKGUsQSx0PTApe3Q+MCYmQS5sZW5ndGg+dCYmKEE9QS5zbGljZSgwLHQpKTtmb3IobGV0IG49MDtuPEEubGVuZ3RoO24rKyllW2UuY3VycmVudEluZGV4KytdPUEuY2hhckNvZGVBdChuKTtpZih0PkEubGVuZ3RoKWZvcihsZXQgbj0wO248dC1BLmxlbmd0aDtuKyspZVtlLmN1cnJlbnRJbmRleCsrXT0wO3JldHVybiBlfWZ1bmN0aW9uIE4oZSxBKXtsZXQgdD14cyhlLEEsZS5jdXJyZW50SW5kZXgpO3JldHVybiBlLmN1cnJlbnRJbmRleCs9QSx0fWZ1bmN0aW9uIHhzKGUsQSx0PTApe2xldCBuPTA7Zm9yKGxldCBzPTA7czxBO3MrKylufD1lW3Qrc108PHMqODtyZXR1cm4gbj4+PjB9ZnVuY3Rpb24gaHQoZSxBLHQpe2ZvcihsZXQgbj0wO248dDtuKyspZVtlLmN1cnJlbnRJbmRleCsrXT1BPj5uKjgmMjU1fWZ1bmN0aW9uIEooZSxBKXtlW2UuY3VycmVudEluZGV4KytdPUEmMjU1LGVbZS5jdXJyZW50SW5kZXgrK109QT4+OH1mdW5jdGlvbiBnQShlLEEpe2h0KGUsQSw0KX1mdW5jdGlvbiBqbihlLEEpe2xldCB0PUE8PDh8ZTtyZXR1cm4gdD4zMjc2Nz90LTY1NTM2OnR9ZnVuY3Rpb24gcWEoZSl7cmV0dXJuIGU+MTI3P2UtMjU2OmV9dmFyIEhzPWNsYXNze2hlYWRlcjtzaXplO2RhdGE7Y29uc3RydWN0b3IoZSxBLHQpe3RoaXMuaGVhZGVyPWUsdGhpcy5zaXplPUEsdGhpcy5kYXRhPXR9fTtmdW5jdGlvbiByQShlLEE9ITAsdD0hMSl7bGV0IG49aEEoZSw0KSxzPU4oZSw0KTtuPT09IiImJihzPTApO2xldCBhO3JldHVybiBBP2E9ZS5zbGljZShlLmN1cnJlbnRJbmRleCxlLmN1cnJlbnRJbmRleCtzKTphPW5ldyBZKDApLChBfHx0KSYmKGUuY3VycmVudEluZGV4Kz1zLHMlMiE9PTAmJmUuY3VycmVudEluZGV4KyspLG5ldyBIcyhuLHMsYSl9ZnVuY3Rpb24gY0EoZSxBLHQ9ITEsbj0hMSl7aWYoZS5sZW5ndGghPT00KXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBoZWFkZXIgbGVuZ3RoOiAke2V9YCk7bGV0IHM9OCxhPWUscj1BLmxlbmd0aDt0JiZyKys7bGV0IEk9cjtuJiYocys9NCxJKz00LGE9IkxJU1QiKTtsZXQgbz1zK3I7byUyIT09MCYmbysrO2xldCBnPW5ldyBZKG8pO3JldHVybiBrQShnLGEpLGdBKGcsSSksbiYma0EoZyxlKSxnLnNldChBLHMpLGd9ZnVuY3Rpb24gdkEoZSxBLHQ9ITEpe2xldCBuPTgscz1lLGE9QS5yZWR1Y2UoKGcsQik9PkIubGVuZ3RoK2csMCkscj1hO3QmJihuKz00LHIrPTQscz0iTElTVCIpO2xldCBJPW4rYTtJJTIhPT0wJiZJKys7bGV0IG89bmV3IFkoSSk7cmV0dXJuIGtBKG8scyksZ0EobyxyKSx0JiZrQShvLGUpLEEuZm9yRWFjaChnPT57by5zZXQoZyxuKSxuKz1nLmxlbmd0aH0pLG99ZnVuY3Rpb24gZmUoZSxBKXtyZXR1cm4gZS5maW5kKHQ9PnQuaGVhZGVyIT09IkxJU1QiPyExOih0LmRhdGEuY3VycmVudEluZGV4PTQsZWUodC5kYXRhLDQpPT09QSkpfWZ1bmN0aW9uICRuKGUsQSl7cmV0dXJuey4uLkEsLi4uZT8/e319fWZ1bmN0aW9uIFF0KGUsQSx0PTApe2xldCBuPTA7Zm9yKGxldCBzPTA7czxBO3MrKyluPW48PDh8ZVt0K3NdO3JldHVybiBuPj4+MH1mdW5jdGlvbiBYZShlLEEpe2xldCB0PVF0KGUsQSxlLmN1cnJlbnRJbmRleCk7cmV0dXJuIGUuY3VycmVudEluZGV4Kz1BLHR9ZnVuY3Rpb24gR3QoZSxBKXtsZXQgdD1uZXcgQXJyYXkoQSkuZmlsbCgwKTtmb3IobGV0IG49QS0xO24+PTA7bi0tKXRbbl09ZSYyNTUsZT4+PTg7cmV0dXJuIHR9ZnVuY3Rpb24gdUEoZSl7bGV0IEE9MDtmb3IoO2U7KXtsZXQgdD1lW2UuY3VycmVudEluZGV4KytdO2lmKEE9QTw8N3x0JjEyNyx0Pj43IT09MSlicmVha31yZXR1cm4gQX1mdW5jdGlvbiBDbihlKXtsZXQgQT1bZSYxMjddO2ZvcihlPj49NztlPjA7KUEudW5zaGlmdChlJjEyN3wxMjgpLGU+Pj03O3JldHVybiBBfWZ1bmN0aW9uIGZzKGUpe2U9TWF0aC5mbG9vcihlKTtsZXQgQT1NYXRoLmZsb29yKGUvNjApLHQ9TWF0aC5yb3VuZChlLUEqNjApO3JldHVybnttaW51dGVzOkEsc2Vjb25kczp0LHRpbWU6YCR7QS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHt0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWB9fWZ1bmN0aW9uIE1BKGUpe2xldCBBPSIiO2ZvcihsZXQgdCBvZiBlKXtsZXQgbj10LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikudG9VcHBlckNhc2UoKTtBKz1uLEErPSIgIn1yZXR1cm4gQX12YXIgYz17d2FybjoiY29sb3I6IG9yYW5nZTsiLHVucmVjb2duaXplZDoiY29sb3I6IHJlZDsiLGluZm86ImNvbG9yOiBhcXVhOyIscmVjb2duaXplZDoiY29sb3I6IGxpbWUiLHZhbHVlOiJjb2xvcjogeWVsbG93OyBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsifSxZczsoKCk9Pnt2YXIgZT1VaW50OEFycmF5LEE9VWludDE2QXJyYXksdD1JbnQzMkFycmF5LG49bmV3IGUoWzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMCwwLDAsMF0pLHM9bmV3IGUoWzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTMsMCwwXSksYT1uZXcgZShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLHI9ZnVuY3Rpb24oRyxiKXtmb3IodmFyIEs9bmV3IEEoMzEpLGVBPTA7ZUE8MzE7KytlQSlLW2VBXT1iKz0xPDxHW2VBLTFdO2Zvcih2YXIgYUE9bmV3IHQoS1szMF0pLGVBPTE7ZUE8MzA7KytlQSlmb3IodmFyIEdBPUtbZUFdO0dBPEtbZUErMV07KytHQSlhQVtHQV09R0EtS1tlQV08PDV8ZUE7cmV0dXJue2I6SyxyOmFBfX0sST1yKG4sMiksbz1JLmIsZz1JLnI7b1syOF09MjU4LGdbMjU4XT0yODt2YXIgQj1yKHMsMCksZD1CLmIsaD1CLnIsQz1uZXcgQSgzMjc2OCk7Zm9yKGs9MDtrPDMyNzY4OysraylRPShrJjQzNjkwKT4+MXwoayYyMTg0NSk8PDEsUT0oUSY1MjQyOCk+PjJ8KFEmMTMxMDcpPDwyLFE9KFEmNjE2ODApPj40fChRJjM4NTUpPDw0LENba109KChRJjY1MjgwKT4+OHwoUSYyNTUpPDw4KT4+MTt2YXIgUSxrLG09ZnVuY3Rpb24oRyxiLEspe2Zvcih2YXIgZUE9Ry5sZW5ndGgsYUE9MCxHQT1uZXcgQShiKTthQTxlQTsrK2FBKUdbYUFdJiYrK0dBW0dbYUFdLTFdO3ZhciBzZT1uZXcgQShiKTtmb3IoYUE9MTthQTxiOysrYUEpc2VbYUFdPXNlW2FBLTFdK0dBW2FBLTFdPDwxO3ZhciB6QTtpZihLKXt6QT1uZXcgQSgxPDxiKTt2YXIgV0E9MTUtYjtmb3IoYUE9MDthQTxlQTsrK2FBKWlmKEdbYUFdKWZvcih2YXIgTmU9YUE8PDR8R1thQV0sYWU9Yi1HW2FBXSxBQT1zZVtHW2FBXS0xXSsrPDxhZSxCQT1BQXwoMTw8YWUpLTE7QUE8PUJBOysrQUEpekFbQ1tBQV0+PldBXT1OZX1lbHNlIGZvcih6QT1uZXcgQShlQSksYUE9MDthQTxlQTsrK2FBKUdbYUFdJiYoekFbYUFdPUNbc2VbR1thQV0tMV0rK10+PjE1LUdbYUFdKTtyZXR1cm4gekF9LHk9bmV3IGUoMjg4KTtmb3Ioaz0wO2s8MTQ0Oysrayl5W2tdPTg7dmFyIGs7Zm9yKGs9MTQ0O2s8MjU2Oysrayl5W2tdPTk7dmFyIGs7Zm9yKGs9MjU2O2s8MjgwOysrayl5W2tdPTc7dmFyIGs7Zm9yKGs9MjgwO2s8Mjg4Oysrayl5W2tdPTg7dmFyIGssRj1uZXcgZSgzMik7Zm9yKGs9MDtrPDMyOysraylGW2tdPTU7dmFyIGssRD1tKHksOSwxKSx2PW0oRiw1LDEpLEw9ZnVuY3Rpb24oRyl7Zm9yKHZhciBiPUdbMF0sSz0xO0s8Ry5sZW5ndGg7KytLKUdbS10+YiYmKGI9R1tLXSk7cmV0dXJuIGJ9LEU9ZnVuY3Rpb24oRyxiLEspe3ZhciBlQT1iLzh8MDtyZXR1cm4oR1tlQV18R1tlQSsxXTw8OCk+PihiJjcpJkt9LFg9ZnVuY3Rpb24oRyxiKXt2YXIgSz1iLzh8MDtyZXR1cm4oR1tLXXxHW0srMV08PDh8R1tLKzJdPDwxNik+PihiJjcpfSxPPWZ1bmN0aW9uKEcpe3JldHVybihHKzcpLzh8MH0sbkE9ZnVuY3Rpb24oRyxiLEspe3JldHVybihiPT1udWxsfHxiPDApJiYoYj0wKSwoSz09bnVsbHx8Sz5HLmxlbmd0aCkmJihLPUcubGVuZ3RoKSxuZXcgZShHLnN1YmFycmF5KGIsSykpfSwkPVsidW5leHBlY3RlZCBFT0YiLCJpbnZhbGlkIGJsb2NrIHR5cGUiLCJpbnZhbGlkIGxlbmd0aC9saXRlcmFsIiwiaW52YWxpZCBkaXN0YW5jZSIsInN0cmVhbSBmaW5pc2hlZCIsIm5vIHN0cmVhbSBoYW5kbGVyIiwsIm5vIGNhbGxiYWNrIiwiaW52YWxpZCBVVEYtOCBkYXRhIiwiZXh0cmEgZmllbGQgdG9vIGxvbmciLCJkYXRlIG5vdCBpbiByYW5nZSAxOTgwLTIwOTkiLCJmaWxlbmFtZSB0b28gbG9uZyIsInN0cmVhbSBmaW5pc2hpbmciLCJpbnZhbGlkIHppcCBkYXRhIl0sVj1mdW5jdGlvbihHLGIsSyl7dmFyIGVBPW5ldyBFcnJvcihifHwkW0ddKTtpZihlQS5jb2RlPUcsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVBLFYpLCFLKXRocm93IGVBO3JldHVybiBlQX0scT1mdW5jdGlvbihHLGIsSyxlQSl7dmFyIGFBPUcubGVuZ3RoLEdBPWVBP2VBLmxlbmd0aDowO2lmKCFhQXx8Yi5mJiYhYi5sKXJldHVybiBLfHxuZXcgZSgwKTt2YXIgc2U9IUssekE9c2V8fGIuaSE9MixXQT1iLmk7c2UmJihLPW5ldyBlKGFBKjMpKTt2YXIgTmU9ZnVuY3Rpb24oeXQpe3ZhciBkZT1LLmxlbmd0aDtpZih5dD5kZSl7dmFyIHN0PW5ldyBlKE1hdGgubWF4KGRlKjIseXQpKTtzdC5zZXQoSyksSz1zdH19LGFlPWIuZnx8MCxBQT1iLnB8fDAsQkE9Yi5ifHwwLF9BPWIubCxVQT1iLmQsQ2U9Yi5tLGhlPWIubiwkZT1hQSo4O2Rve2lmKCFfQSl7YWU9RShHLEFBLDEpO3ZhciBVZT1FKEcsQUErMSwzKTtpZihBQSs9MyxVZSlpZihVZT09MSlfQT1ELFVBPXYsQ2U9OSxoZT01O2Vsc2UgaWYoVWU9PTIpe3ZhciBBdD1FKEcsQUEsMzEpKzI1NyxBbj1FKEcsQUErMTAsMTUpKzQsZW49QXQrRShHLEFBKzUsMzEpKzE7QUErPTE0O2Zvcih2YXIgVGU9bmV3IGUoZW4pLGxlPW5ldyBlKDE5KSxUQT0wO1RBPEFuOysrVEEpbGVbYVtUQV1dPUUoRyxBQStUQSozLDcpO0FBKz1BbiozO2Zvcih2YXIgdG49TChsZSksZnQ9KDE8PHRuKS0xLHhlPW0obGUsdG4sMSksVEE9MDtUQTxlbjspe3ZhciBldD14ZVtFKEcsQUEsZnQpXTtBQSs9ZXQmMTU7dmFyIFJBPWV0Pj40O2lmKFJBPDE2KVRlW1RBKytdPVJBO2Vsc2V7dmFyIG9lPTAsdHQ9MDtmb3IoUkE9PTE2Pyh0dD0zK0UoRyxBQSwzKSxBQSs9MixvZT1UZVtUQS0xXSk6UkE9PTE3Pyh0dD0zK0UoRyxBQSw3KSxBQSs9Myk6UkE9PTE4JiYodHQ9MTErRShHLEFBLDEyNyksQUErPTcpO3R0LS07KVRlW1RBKytdPW9lfX12YXIgbm49VGUuc3ViYXJyYXkoMCxBdCkscmU9VGUuc3ViYXJyYXkoQXQpO0NlPUwobm4pLGhlPUwocmUpLF9BPW0obm4sQ2UsMSksVUE9bShyZSxoZSwxKX1lbHNlIFYoMSk7ZWxzZXt2YXIgUkE9TyhBQSkrNCxtdD1HW1JBLTRdfEdbUkEtM108PDgsU3Q9UkErbXQ7aWYoU3Q+YUEpe1dBJiZWKDApO2JyZWFrfXpBJiZOZShCQSttdCksSy5zZXQoRy5zdWJhcnJheShSQSxTdCksQkEpLGIuYj1CQSs9bXQsYi5wPUFBPVN0KjgsYi5mPWFlO2NvbnRpbnVlfWlmKEFBPiRlKXtXQSYmVigwKTticmVha319ekEmJk5lKEJBKzEzMTA3Mik7Zm9yKHZhciBncz0oMTw8Q2UpLTEsY3M9KDE8PGhlKS0xLHB0PUFBOztwdD1BQSl7dmFyIG9lPV9BW1goRyxBQSkmZ3NdLHllPW9lPj40O2lmKEFBKz1vZSYxNSxBQT4kZSl7V0EmJlYoMCk7YnJlYWt9aWYob2V8fFYoMikseWU8MjU2KUtbQkErK109eWU7ZWxzZSBpZih5ZT09MjU2KXtwdD1BQSxfQT1udWxsO2JyZWFrfWVsc2V7dmFyIHNuPXllLTI1NDtpZih5ZT4yNjQpe3ZhciBUQT15ZS0yNTcsaWU9bltUQV07c249RShHLEFBLCgxPDxpZSktMSkrb1tUQV0sQUErPWllfXZhciBIZT1VQVtYKEcsQUEpJmNzXSxrZT1IZT4+NDtIZXx8VigzKSxBQSs9SGUmMTU7dmFyIHJlPWRba2VdO2lmKGtlPjMpe3ZhciBpZT1zW2tlXTtyZSs9WChHLEFBKSYoMTw8aWUpLTEsQUErPWllfWlmKEFBPiRlKXtXQSYmVigwKTticmVha316QSYmTmUoQkErMTMxMDcyKTt2YXIgbnQ9QkErc247aWYoQkE8cmUpe3ZhciBZZT1HQS1yZSxwQT1NYXRoLm1pbihyZSxudCk7Zm9yKFllK0JBPDAmJlYoMyk7QkE8cEE7KytCQSlLW0JBXT1lQVtZZStCQV19Zm9yKDtCQTxudDsrK0JBKUtbQkFdPUtbQkEtcmVdfX1iLmw9X0EsYi5wPXB0LGIuYj1CQSxiLmY9YWUsX0EmJihhZT0xLGIubT1DZSxiLmQ9VUEsYi5uPWhlKX13aGlsZSghYWUpO3JldHVybiBCQSE9Sy5sZW5ndGgmJnNlP25BKEssMCxCQSk6Sy5zdWJhcnJheSgwLEJBKX0sej1uZXcgZSgwKTtmdW5jdGlvbiB0QShHLGIpe3JldHVybiBxKEcse2k6Mn0sYiYmYi5vdXQsYiYmYi5kaWN0aW9uYXJ5KX12YXIgaUE9dHlwZW9mIFRleHREZWNvZGVyPCJ1IiYmbmV3IFRleHREZWNvZGVyLFA9MDt0cnl7aUEuZGVjb2RlKHose3N0cmVhbTohMH0pLFA9MX1jYXRjaHt9WXM9dEF9KSgpO3ZhciBQcz1ZcyxKcz0hMSxxcz0hMCxxdD0hMTtmdW5jdGlvbiBLcyhlLEEsdCl7SnM9ZSxxcz1BLHF0PXR9ZnVuY3Rpb24gcCguLi5lKXtKcyYmY29uc29sZS5pbmZvKC4uLmUpfWZ1bmN0aW9uIHNBKC4uLmUpe3FzJiZjb25zb2xlLndhcm4oLi4uZSl9ZnVuY3Rpb24gT0EoLi4uZSl7cXQmJmNvbnNvbGUuZ3JvdXAoLi4uZSl9ZnVuY3Rpb24gYkEoLi4uZSl7cXQmJmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoLi4uZSl9ZnVuY3Rpb24gWigpe3F0JiZjb25zb2xlLmdyb3VwRW5kKCl9dmFyIEVlPXtjb25zb2xlQ29sb3JzOmMsU3Blc3NhU3ludGhJbmZvOnAsU3Blc3NhU3ludGhXYXJuOnNBLFNwZXNzYVN5bnRoR3JvdXBDb2xsYXBzZWQ6YkEsU3Blc3NhU3ludGhHcm91cDpPQSxTcGVzc2FTeW50aEdyb3VwRW5kOloscmVhZEJ5dGVzQXNVaW50QmlnRW5kaWFuOlF0LHJlYWRMaXR0bGVFbmRpYW46TixyZWFkQnl0ZXNBc1N0cmluZzpoQSxyZWFkVmFyaWFibGVMZW5ndGhRdWFudGl0eTp1QSxpbmZsYXRlU3luYzpQc307dmFyIFpBPWNsYXNze3RpY2tzO3N0YXR1c0J5dGU7ZGF0YTtjb25zdHJ1Y3RvcihlLEEsdCl7dGhpcy50aWNrcz1lLHRoaXMuc3RhdHVzQnl0ZT1BLHRoaXMuZGF0YT10fX07ZnVuY3Rpb24gS2EoZSl7bGV0IEE9ZSYyNDAsdD1lJjE1LG49dDtzd2l0Y2goQSl7Y2FzZSAxMjg6Y2FzZSAxNDQ6Y2FzZSAxNjA6Y2FzZSAxNzY6Y2FzZSAxOTI6Y2FzZSAyMDg6Y2FzZSAyMjQ6YnJlYWs7Y2FzZSAyNDA6c3dpdGNoKHQpe2Nhc2UgMDpuPS0zO2JyZWFrO2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNDpuPS0xO2JyZWFrO2Nhc2UgMTU6bj0tMjticmVha31icmVhaztkZWZhdWx0Om49LTF9cmV0dXJuIG59ZnVuY3Rpb24gQXMoZSl7bGV0IEE9ZSYyNDAsdD1lJjE1LG49LTEscz1lO3JldHVybiBBPj0xMjgmJkE8PTIyNCYmKG49dCxzPUEpLHtzdGF0dXM6cyxjaGFubmVsOm59fXZhciBPYT17ODoyLDk6MiwxMDoyLDExOjIsMTI6MSwxMzoxLDE0OjJ9LE09e25vdGVPZmY6MTI4LG5vdGVPbjoxNDQscG9seVByZXNzdXJlOjE2MCxjb250cm9sbGVyQ2hhbmdlOjE3Nixwcm9ncmFtQ2hhbmdlOjE5MixjaGFubmVsUHJlc3N1cmU6MjA4LHBpdGNoV2hlZWw6MjI0LHN5c3RlbUV4Y2x1c2l2ZToyNDAsdGltZWNvZGU6MjQxLHNvbmdQb3NpdGlvbjoyNDIsc29uZ1NlbGVjdDoyNDMsdHVuZVJlcXVlc3Q6MjQ2LGNsb2NrOjI0OCxzdGFydDoyNTAsY29udGludWU6MjUxLHN0b3A6MjUyLGFjdGl2ZVNlbnNpbmc6MjU0LHJlc2V0OjI1NSxzZXF1ZW5jZU51bWJlcjowLHRleHQ6MSxjb3B5cmlnaHQ6Mix0cmFja05hbWU6MyxpbnN0cnVtZW50TmFtZTo0LGx5cmljOjUsbWFya2VyOjYsY3VlUG9pbnQ6Nyxwcm9ncmFtTmFtZTo4LG1pZGlDaGFubmVsUHJlZml4OjMyLG1pZGlQb3J0OjMzLGVuZE9mVHJhY2s6NDcsc2V0VGVtcG86ODEsc21wdGVPZmZzZXQ6ODQsdGltZVNpZ25hdHVyZTo4OCxrZXlTaWduYXR1cmU6ODksc2VxdWVuY2VTcGVjaWZpYzoxMjd9LFM9e2JhbmtTZWxlY3Q6MCxtb2R1bGF0aW9uV2hlZWw6MSxicmVhdGhDb250cm9sbGVyOjIsdW5kZWZpbmVkQ0MzOjMsZm9vdENvbnRyb2xsZXI6NCxwb3J0YW1lbnRvVGltZTo1LGRhdGFFbnRyeU1TQjo2LG1haW5Wb2x1bWU6NyxiYWxhbmNlOjgsdW5kZWZpbmVkQ0M5OjkscGFuOjEwLGV4cHJlc3Npb25Db250cm9sbGVyOjExLGVmZmVjdENvbnRyb2wxOjEyLGVmZmVjdENvbnRyb2wyOjEzLHVuZGVmaW5lZENDMTQ6MTQsdW5kZWZpbmVkQ0MxNToxNSxnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXIxOjE2LGdlbmVyYWxQdXJwb3NlQ29udHJvbGxlcjI6MTcsZ2VuZXJhbFB1cnBvc2VDb250cm9sbGVyMzoxOCxnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI0OjE5LHVuZGVmaW5lZENDMjA6MjAsdW5kZWZpbmVkQ0MyMToyMSx1bmRlZmluZWRDQzIyOjIyLHVuZGVmaW5lZENDMjM6MjMsdW5kZWZpbmVkQ0MyNDoyNCx1bmRlZmluZWRDQzI1OjI1LHVuZGVmaW5lZENDMjY6MjYsdW5kZWZpbmVkQ0MyNzoyNyx1bmRlZmluZWRDQzI4OjI4LHVuZGVmaW5lZENDMjk6MjksdW5kZWZpbmVkQ0MzMDozMCx1bmRlZmluZWRDQzMxOjMxLGJhbmtTZWxlY3RMU0I6MzIsbW9kdWxhdGlvbldoZWVsTFNCOjMzLGJyZWF0aENvbnRyb2xsZXJMU0I6MzQsdW5kZWZpbmVkQ0MzTFNCOjM1LGZvb3RDb250cm9sbGVyTFNCOjM2LHBvcnRhbWVudG9UaW1lTFNCOjM3LGRhdGFFbnRyeUxTQjozOCxtYWluVm9sdW1lTFNCOjM5LGJhbGFuY2VMU0I6NDAsdW5kZWZpbmVkQ0M5TFNCOjQxLHBhbkxTQjo0MixleHByZXNzaW9uQ29udHJvbGxlckxTQjo0MyxlZmZlY3RDb250cm9sMUxTQjo0NCxlZmZlY3RDb250cm9sMkxTQjo0NSx1bmRlZmluZWRDQzE0TFNCOjQ2LHVuZGVmaW5lZENDMTVMU0I6NDcsdW5kZWZpbmVkQ0MxNkxTQjo0OCx1bmRlZmluZWRDQzE3TFNCOjQ5LHVuZGVmaW5lZENDMThMU0I6NTAsdW5kZWZpbmVkQ0MxOUxTQjo1MSx1bmRlZmluZWRDQzIwTFNCOjUyLHVuZGVmaW5lZENDMjFMU0I6NTMsdW5kZWZpbmVkQ0MyMkxTQjo1NCx1bmRlZmluZWRDQzIzTFNCOjU1LHVuZGVmaW5lZENDMjRMU0I6NTYsdW5kZWZpbmVkQ0MyNUxTQjo1Nyx1bmRlZmluZWRDQzI2TFNCOjU4LHVuZGVmaW5lZENDMjdMU0I6NTksdW5kZWZpbmVkQ0MyOExTQjo2MCx1bmRlZmluZWRDQzI5TFNCOjYxLHVuZGVmaW5lZENDMzBMU0I6NjIsdW5kZWZpbmVkQ0MzMUxTQjo2MyxzdXN0YWluUGVkYWw6NjQscG9ydGFtZW50b09uT2ZmOjY1LHNvc3RlbnV0b1BlZGFsOjY2LHNvZnRQZWRhbDo2NyxsZWdhdG9Gb290c3dpdGNoOjY4LGhvbGQyUGVkYWw6Njksc291bmRWYXJpYXRpb246NzAsZmlsdGVyUmVzb25hbmNlOjcxLHJlbGVhc2VUaW1lOjcyLGF0dGFja1RpbWU6NzMsYnJpZ2h0bmVzczo3NCxkZWNheVRpbWU6NzUsdmlicmF0b1JhdGU6NzYsdmlicmF0b0RlcHRoOjc3LHZpYnJhdG9EZWxheTo3OCxzb3VuZENvbnRyb2xsZXIxMDo3OSxnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI1OjgwLGdlbmVyYWxQdXJwb3NlQ29udHJvbGxlcjY6ODEsZ2VuZXJhbFB1cnBvc2VDb250cm9sbGVyNzo4MixnZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI4OjgzLHBvcnRhbWVudG9Db250cm9sOjg0LHVuZGVmaW5lZENDODU6ODUsdW5kZWZpbmVkQ0M4Njo4Nix1bmRlZmluZWRDQzg3Ojg3LHVuZGVmaW5lZENDODg6ODgsdW5kZWZpbmVkQ0M4OTo4OSx1bmRlZmluZWRDQzkwOjkwLHJldmVyYkRlcHRoOjkxLHRyZW1vbG9EZXB0aDo5MixjaG9ydXNEZXB0aDo5MyxkZXR1bmVEZXB0aDo5NCxwaGFzZXJEZXB0aDo5NSxkYXRhSW5jcmVtZW50Ojk2LGRhdGFEZWNyZW1lbnQ6OTcsbm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQjo5OCxub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCOjk5LHJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0I6MTAwLHJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0I6MTAxLHVuZGVmaW5lZENDMTAyTFNCOjEwMix1bmRlZmluZWRDQzEwM0xTQjoxMDMsdW5kZWZpbmVkQ0MxMDRMU0I6MTA0LHVuZGVmaW5lZENDMTA1TFNCOjEwNSx1bmRlZmluZWRDQzEwNkxTQjoxMDYsdW5kZWZpbmVkQ0MxMDdMU0I6MTA3LHVuZGVmaW5lZENDMTA4TFNCOjEwOCx1bmRlZmluZWRDQzEwOUxTQjoxMDksdW5kZWZpbmVkQ0MxMTBMU0I6MTEwLHVuZGVmaW5lZENDMTExTFNCOjExMSx1bmRlZmluZWRDQzExMkxTQjoxMTIsdW5kZWZpbmVkQ0MxMTNMU0I6MTEzLHVuZGVmaW5lZENDMTE0TFNCOjExNCx1bmRlZmluZWRDQzExNUxTQjoxMTUsdW5kZWZpbmVkQ0MxMTZMU0I6MTE2LHVuZGVmaW5lZENDMTE3TFNCOjExNyx1bmRlZmluZWRDQzExOExTQjoxMTgsdW5kZWZpbmVkQ0MxMTlMU0I6MTE5LGFsbFNvdW5kT2ZmOjEyMCxyZXNldEFsbENvbnRyb2xsZXJzOjEyMSxsb2NhbENvbnRyb2xPbk9mZjoxMjIsYWxsTm90ZXNPZmY6MTIzLG9tbmlNb2RlT2ZmOjEyNCxvbW5pTW9kZU9uOjEyNSxtb25vTW9kZU9uOjEyNixwb2x5TW9kZU9uOjEyN307ZnVuY3Rpb24gVmEoZSl7aWYoIWUudHJhY2tzKXRocm93IG5ldyBFcnJvcigiTUlESSBoYXMgbm8gdHJhY2tzISIpO2xldCBBPVtdO2ZvcihsZXQgcyBvZiBlLnRyYWNrcyl7bGV0IGE9W10scj0wLEk7Zm9yKGxldCBvIG9mIHMuZXZlbnRzKXtsZXQgZz1NYXRoLm1heCgwLG8udGlja3Mtcik7aWYoby5zdGF0dXNCeXRlPT09TS5lbmRPZlRyYWNrKXtyKz1nO2NvbnRpbnVlfWxldCBCO28uc3RhdHVzQnl0ZTw9TS5zZXF1ZW5jZVNwZWNpZmljPyhCPVsyNTUsby5zdGF0dXNCeXRlLC4uLkNuKG8uZGF0YS5sZW5ndGgpLC4uLm8uZGF0YV0sST12b2lkIDApOm8uc3RhdHVzQnl0ZT09PU0uc3lzdGVtRXhjbHVzaXZlPyhCPVsyNDAsLi4uQ24oby5kYXRhLmxlbmd0aCksLi4uby5kYXRhXSxJPXZvaWQgMCk6KEI9W10sSSE9PW8uc3RhdHVzQnl0ZSYmKEk9by5zdGF0dXNCeXRlLEIucHVzaChvLnN0YXR1c0J5dGUpKSxCLnB1c2goLi4uby5kYXRhKSksYS5wdXNoKC4uLkNuKGcpKSxhLnB1c2goLi4uQikscis9Z31hLnB1c2goMCksYS5wdXNoKDI1NSksYS5wdXNoKE0uZW5kT2ZUcmFjayksYS5wdXNoKDApLEEucHVzaChuZXcgVWludDhBcnJheShhKSl9bGV0IHQ9KHMsYSk9Pntmb3IobGV0IHI9MDtyPHMubGVuZ3RoO3IrKylhLnB1c2gocy5jaGFyQ29kZUF0KHIpKX0sbj1bXTt0KCJNVGhkIixuKSxuLnB1c2goLi4uR3QoNiw0KSksbi5wdXNoKDAsZS5mb3JtYXQpLG4ucHVzaCguLi5HdChlLnRyYWNrcy5sZW5ndGgsMikpLG4ucHVzaCguLi5HdChlLnRpbWVEaXZpc2lvbiwyKSk7Zm9yKGxldCBzIG9mIEEpdCgiTVRyayIsbiksbi5wdXNoKC4uLkd0KHMubGVuZ3RoLDQpKSxuLnB1c2goLi4ucyk7cmV0dXJuIG5ldyBVaW50OEFycmF5KG4pLmJ1ZmZlcn12YXIgWGE9MzUwLFNlPTksUm49MTYsT3M9ImdzIixCZT0tMSxSdD1gU1BFU1NBU1lOVEhfRU1CRURERURfQkFOS18ke01hdGgucmFuZG9tKCl9X0RPX05PVF9ERUxFVEVgLFZzPTMyNzY3LFphPXt0aW1lOjB9LHphPS4wMyxXYT0uMDcsX2E9MSxqYT02NCxtcz0xMjEsZkE9Y2xhc3N7c3RhdGljIGdldERlZmF1bHRCYW5rKGUpe3JldHVybiBlPT09ImdtMiI/bXM6MH1zdGF0aWMgZ2V0RHJ1bUJhbmsoZSl7c3dpdGNoKGUpe2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGAke2V9IGRvZXNuJ3QgaGF2ZSBhIGJhbmsgTVNCIGZvciBkcnVtcy5gKTtjYXNlImdtMiI6cmV0dXJuIDEyMDtjYXNlInhnIjpyZXR1cm4gMTI3fX1zdGF0aWMgaXNYR0RydW1zKGUpe3JldHVybiBlPT09MTIwfHxlPT09MTI2fHxlPT09MTI3fXN0YXRpYyBpc1ZhbGlkWEdNU0IoZSl7cmV0dXJuIHRoaXMuaXNYR0RydW1zKGUpfHxlPT09amF8fGU9PT1tc31zdGF0aWMgaXNTeXN0ZW1YRyhlKXtyZXR1cm4gZT09PSJnbTIifHxlPT09InhnIn1zdGF0aWMgYWRkQmFua09mZnNldChlLEEsdD0hMCl7cmV0dXJuIHRoaXMuaXNYR0RydW1zKGUpJiZ0P2U6TWF0aC5taW4oZStBLDEyNyl9c3RhdGljIHN1YnRyYWNrQmFua09mZnNldChlLEEsdD0hMCl7cmV0dXJuIHRoaXMuaXNYR0RydW1zKGUpJiZ0P2U6TWF0aC5tYXgoMCxlLUEpfX07ZnVuY3Rpb24gZXMoZSl7cmV0dXJuIGUuZGF0YVswXT09PTY3JiZlLmRhdGFbMl09PT03NiYmZS5kYXRhWzVdPT09MTI2JiZlLmRhdGFbNl09PT0wfWZ1bmN0aW9uIFhzKGUpe3JldHVybiBlLmRhdGFbMF09PT02NSYmZS5kYXRhWzJdPT09NjYmJmUuZGF0YVszXT09PTE4JiZlLmRhdGFbNF09PT02NCYmKGUuZGF0YVs1XSYxNikhPT0wJiZlLmRhdGFbNl09PT0yMX1mdW5jdGlvbiBacyhlKXtyZXR1cm4gZS5kYXRhWzBdPT09NjUmJmUuZGF0YVsyXT09PTY2JiZlLmRhdGFbNl09PT0xMjd9ZnVuY3Rpb24genMoZSl7cmV0dXJuIGUuZGF0YVswXT09PTEyNiYmZS5kYXRhWzJdPT09OSYmZS5kYXRhWzNdPT09MX1mdW5jdGlvbiBXcyhlKXtyZXR1cm4gZS5kYXRhWzBdPT09MTI2JiZlLmRhdGFbMl09PT05JiZlLmRhdGFbM109PT0zfWZ1bmN0aW9uIF9zKGUpe3JldHVybiBuZXcgWkEoZSxNLnN5c3RlbUV4Y2x1c2l2ZSxuZXcgWShbNjUsMTYsNjYsMTgsNjQsMCwxMjcsMCw2NSwyNDddKSl9dmFyIHRlPWNsYXNzIGpze3N0YXRpYyB0b01JRElTdHJpbmcoQSl7cmV0dXJuIEEuaXNHTUdTRHJ1bT9gRFJVTToke0EucHJvZ3JhbX1gOmAke0EuYmFua0xTQn06JHtBLmJhbmtNU0J9OiR7QS5wcm9ncmFtfWB9c3RhdGljIGZyb21NSURJU3RyaW5nKEEpe2xldCB0PUEuc3BsaXQoIjoiKTtpZih0Lmxlbmd0aD4zfHx0Lmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBNSURJIHN0cmluZzoiKTtyZXR1cm4gQS5zdGFydHNXaXRoKCJEUlVNIik/e2JhbmtNU0I6MCxiYW5rTFNCOjAscHJvZ3JhbTpwYXJzZUludCh0WzFdKSxpc0dNR1NEcnVtOiEwfTp7YmFua0xTQjpwYXJzZUludCh0WzBdKSxiYW5rTVNCOnBhcnNlSW50KHRbMV0pLHByb2dyYW06cGFyc2VJbnQodFsyXSksaXNHTUdTRHJ1bTohMX19c3RhdGljIHRvTmFtZWRNSURJU3RyaW5nKEEpe3JldHVybmAke2pzLnRvTUlESVN0cmluZyhBKX0gJHtBLm5hbWV9YH1zdGF0aWMgbWF0Y2hlcyhBLHQpe3JldHVybiBBLmlzR01HU0RydW18fHQuaXNHTUdTRHJ1bT9BLmlzR01HU0RydW09PT10LmlzR01HU0RydW0mJkEucHJvZ3JhbT09PXQucHJvZ3JhbTpBLnByb2dyYW09PT10LnByb2dyYW0mJkEuYmFua0xTQj09PXQuYmFua0xTQiYmQS5iYW5rTVNCPT09dC5iYW5rTVNCfXN0YXRpYyBmcm9tTmFtZWRNSURJU3RyaW5nKEEpe2xldCB0PUEuaW5kZXhPZigiICIpO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmFtZWQgTUlESSBzdHJpbmc6ICR7QX1gKTtsZXQgbj10aGlzLmZyb21NSURJU3RyaW5nKEEuc3Vic3RyaW5nKDAsdCkpLHM9QS5zdWJzdHJpbmcodCsxKTtyZXR1cm57Li4ubixuYW1lOnN9fXN0YXRpYyBzb3J0ZXIoQSx0KXtyZXR1cm4gQS5wcm9ncmFtIT09dC5wcm9ncmFtP0EucHJvZ3JhbS10LnByb2dyYW06QS5pc0dNR1NEcnVtJiYhdC5pc0dNR1NEcnVtPzE6IUEuaXNHTUdTRHJ1bSYmdC5pc0dNR1NEcnVtPy0xOkEuYmFua01TQiE9PXQuYmFua01TQj9BLmJhbmtNU0ItdC5iYW5rTVNCOkEuYmFua0xTQi10LmJhbmtMU0J9fSwkYT0iQ3JlYXRlZCB1c2luZyBTcGVzc2FTeW50aCI7ZnVuY3Rpb24gQW8oZSxBLHQpe2xldCBuPSJnbSIscz1bXSxhPUFycmF5KGUudHJhY2tzLmxlbmd0aCkuZmlsbCgwKSxyPWUudHJhY2tzLmxlbmd0aCxJPSgpPT57bGV0IGQ9MCxoPTEvMDtyZXR1cm4gZS50cmFja3MuZm9yRWFjaCgoQyxRKT0+e2FbUV0+PUMuZXZlbnRzLmxlbmd0aHx8Qy5ldmVudHNbYVtRXV0udGlja3M8aCYmKGQ9USxoPUMuZXZlbnRzW2FbUV1dLnRpY2tzKX0pLGR9LG89QXJyYXkoZS50cmFja3MubGVuZ3RoKS5maWxsKDApLGc9MTYrTWF0aC5tYXgoLi4uZS5wb3J0Q2hhbm5lbE9mZnNldE1hcCksQj1bXTtmb3IobGV0IGQ9MDtkPGc7ZCsrKUIucHVzaCh7cHJvZ3JhbTowLGRydW1zOmQlMTY9PT1TZSxsYXN0QmFuazp2b2lkIDAsbGFzdEJhbmtMU0I6dm9pZCAwLGhhc0JhbmtTZWxlY3Q6ITF9KTtmb3IoO3I+MDspe2xldCBkPUkoKSxoPWUudHJhY2tzW2RdO2lmKGFbZF0+PWguZXZlbnRzLmxlbmd0aCl7ci0tO2NvbnRpbnVlfWxldCBDPWguZXZlbnRzW2FbZF1dO2FbZF0rKztsZXQgUT1lLnBvcnRDaGFubmVsT2Zmc2V0TWFwW29bZF1dO2lmKEMuc3RhdHVzQnl0ZT09PU0ubWlkaVBvcnQpe29bZF09Qy5kYXRhWzBdO2NvbnRpbnVlfWxldCBtPUMuc3RhdHVzQnl0ZSYyNDA7aWYobSE9PU0uY29udHJvbGxlckNoYW5nZSYmbSE9PU0ucHJvZ3JhbUNoYW5nZSYmbSE9PU0uc3lzdGVtRXhjbHVzaXZlKWNvbnRpbnVlO2lmKG09PT1NLnN5c3RlbUV4Y2x1c2l2ZSl7aWYoIVhzKEMpKXtlcyhDKT9uPSJ4ZyI6WnMoQyk/bj0iZ3MiOnpzKEMpPyhuPSJnbSIscy5wdXNoKHt0TnVtOmQsZTpDfSkpOldzKEMpJiYobj0iZ20yIik7Y29udGludWV9bGV0IEQ9WzksMCwxLDIsMyw0LDUsNiw3LDgsMTAsMTEsMTIsMTMsMTQsMTVdW0MuZGF0YVs1XSYxNV0rUTtCW0RdLmRydW1zPSEhKEMuZGF0YVs3XT4wJiZDLmRhdGFbNV0+PjQpO2NvbnRpbnVlfWxldCB5PShDLnN0YXR1c0J5dGUmMTUpK1EsRj1CW3ldO2lmKG09PT1NLnByb2dyYW1DaGFuZ2Upe2xldCB2PXtwcm9ncmFtOkMuZGF0YVswXSxiYW5rTFNCOkYubGFzdEJhbmtMU0I/LmRhdGE/LlsxXT8/MCxiYW5rTVNCOmZBLnN1YnRyYWNrQmFua09mZnNldChGLmxhc3RCYW5rPy5kYXRhPy5bMV0/PzAsZS5iYW5rT2Zmc2V0KSxpc0dNR1NEcnVtOkYuZHJ1bXN9LEw9dC5nZXRQcmVzZXQodixuKTtpZihwKGAlY0lucHV0IHBhdGNoOiAlYyR7dGUudG9NSURJU3RyaW5nKHYpfSVjLiBDaGFubmVsICVjJHt5fSVjLiBDaGFuZ2luZyBwYXRjaCB0byAke0wudG9TdHJpbmcoKX0uYCxjLmluZm8sYy51bnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pLEMuZGF0YVswXT1MLnByb2dyYW0sTC5pc0dNR1NEcnVtJiZmQS5pc1N5c3RlbVhHKG4pfHxGLmxhc3RCYW5rPT09dm9pZCAwfHwoRi5sYXN0QmFuay5kYXRhWzFdPWZBLmFkZEJhbmtPZmZzZXQoTC5iYW5rTVNCLEEsTC5pc1hHRHJ1bXMpLEYubGFzdEJhbmtMU0I9PT12b2lkIDApKWNvbnRpbnVlO0YubGFzdEJhbmtMU0IuZGF0YVsxXT1MLmJhbmtMU0I7Y29udGludWV9bGV0IGs9Qy5kYXRhWzBdPT09Uy5iYW5rU2VsZWN0TFNCO0MuZGF0YVswXSE9PVMuYmFua1NlbGVjdCYmIWt8fChGLmhhc0JhbmtTZWxlY3Q9ITAsaz9GLmxhc3RCYW5rTFNCPUM6Ri5sYXN0QmFuaz1DKX1pZihCLmZvckVhY2goKGQsaCk9PntpZihkLmhhc0JhbmtTZWxlY3QpcmV0dXJuO2xldCBDPWglMTYsUT1NLnByb2dyYW1DaGFuZ2V8QyxtPU1hdGguZmxvb3IoaC8xNikqMTYseT1lLnBvcnRDaGFubmVsT2Zmc2V0TWFwLmluZGV4T2YobSksRj1lLnRyYWNrcy5maW5kKEU9PkUucG9ydD09PXkmJkUuY2hhbm5lbHMuaGFzKEMpKTtpZihGPT09dm9pZCAwKXJldHVybjtsZXQgaz1GLmV2ZW50cy5maW5kSW5kZXgoRT0+RS5zdGF0dXNCeXRlPT09USk7aWYoaz09PS0xKXtsZXQgRT1GLmV2ZW50cy5maW5kSW5kZXgobkE9Pm5BLnN0YXR1c0J5dGU+MTI4JiZuQS5zdGF0dXNCeXRlPDI0MCYmKG5BLnN0YXR1c0J5dGUmMTUpPT09Qyk7aWYoRT09PS0xKXJldHVybjtsZXQgWD1GLmV2ZW50c1tFXS50aWNrcyxPPXQuZ2V0UHJlc2V0KHtiYW5rTVNCOjAsYmFua0xTQjowLHByb2dyYW06MCxpc0dNR1NEcnVtOiExfSxuKS5wcm9ncmFtO0YuYWRkRXZlbnQobmV3IFpBKFgsTS5wcm9ncmFtQ2hhbmdlfEMsbmV3IFkoW09dKSksRSksaz1FfXAoYCVjQWRkaW5nIGJhbmsgc2VsZWN0IGZvciAlYyR7aH1gLGMuaW5mbyxjLnJlY29nbml6ZWQpO2xldCBEPUYuZXZlbnRzW2tdLnRpY2tzLHY9dC5nZXRQcmVzZXQoe2JhbmtMU0I6MCxiYW5rTVNCOjAscHJvZ3JhbTpkLnByb2dyYW0saXNHTUdTRHJ1bTpkLmRydW1zfSxuKSxMPWZBLmFkZEJhbmtPZmZzZXQodi5iYW5rTVNCLEEsdi5pc1hHRHJ1bXMpO0YuYWRkRXZlbnQobmV3IFpBKEQsTS5jb250cm9sbGVyQ2hhbmdlfEMsbmV3IFkoW1MuYmFua1NlbGVjdCxMXSkpLGspfSksbiE9PSJncyImJiFmQS5pc1N5c3RlbVhHKG4pKXtmb3IobGV0IGggb2Ygcyl7bGV0IEM9ZS50cmFja3NbaC50TnVtXTtDLmRlbGV0ZUV2ZW50KEMuZXZlbnRzLmluZGV4T2YoaC5lKSl9bGV0IGQ9MDtlLnRyYWNrc1swXS5ldmVudHNbMF0uc3RhdHVzQnl0ZT09PU0udHJhY2tOYW1lJiZkKyssZS50cmFja3NbMF0uYWRkRXZlbnQoX3MoMCksZCl9fXZhciBTcz17YmFua09mZnNldDowLG1ldGFkYXRhOnt9LGNvcnJlY3RCYW5rT2Zmc2V0OiEwLHNvdW5kQmFuazp2b2lkIDB9O2Z1bmN0aW9uIGVvKGUsQSx0KXtsZXQgbj10Lm1ldGFkYXRhO2lmKE9BKCIlY1dyaXRpbmcgdGhlIFJNSURJIEZpbGUuLi4iLGMuaW5mbykscCgibWV0YWRhdGEiLG4pLHAoIkluaXRpYWwgYmFuayBvZmZzZXQiLGUuYmFua09mZnNldCksdC5jb3JyZWN0QmFua09mZnNldCl7aWYoIXQuc291bmRCYW5rKXRocm93IG5ldyBFcnJvcigiU291bmQgYmFuayBtdXN0IGJlIHByb3ZpZGVkIGlmIGNvcnJlY3RpbmcgYmFuayBvZmZzZXQuIik7QW8oZSx0LmJhbmtPZmZzZXQsdC5zb3VuZEJhbmspfWxldCBzPW5ldyBZKGUud3JpdGVNSURJKCkpO24ubmFtZT8/PWUuZ2V0TmFtZSgpLG4uY3JlYXRpb25EYXRlPz89bmV3IERhdGUsbi5jb3B5cmlnaHQ/Pz0kYSxuLnNvZnR3YXJlPz89IlNwZXNzYVN5bnRoIixPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKEk9PntsZXQgbz1JO29bMV0mJmUuc2V0Uk1JREluZm8ob1swXSxvWzFdKX0pO2xldCBhPVtdO09iamVjdC5lbnRyaWVzKGUucm1pZGlJbmZvKS5mb3JFYWNoKEk9PntsZXQgbz1JWzBdLGc9SVsxXSxCPWQ9PnthLnB1c2goY0EoZCxnKSl9O3N3aXRjaChvKXtjYXNlImFsYnVtIjpCKCJJQUxCIiksQigiSVBSRCIpO2JyZWFrO2Nhc2Uic29mdHdhcmUiOkIoIklTRlQiKTticmVhaztjYXNlImluZm9FbmNvZGluZyI6QigiSUVOQyIpO2JyZWFrO2Nhc2UiY3JlYXRpb25EYXRlIjpCKCJJQ1JEIik7YnJlYWs7Y2FzZSJwaWN0dXJlIjpCKCJJUElDIik7YnJlYWs7Y2FzZSJuYW1lIjpCKCJJTkFNIik7YnJlYWs7Y2FzZSJhcnRpc3QiOkIoIklBUlQiKTticmVhaztjYXNlImdlbnJlIjpCKCJJR05SIik7YnJlYWs7Y2FzZSJjb3B5cmlnaHQiOkIoIklDT1AiKTticmVhaztjYXNlImNvbW1lbnQiOkIoIklDTVQiKTticmVhaztjYXNlImVuZ2luZWVyIjpCKCJJRU5HIik7YnJlYWs7Y2FzZSJzdWJqZWN0IjpCKCJJU0JKIik7YnJlYWs7Y2FzZSJtaWRpRW5jb2RpbmciOkIoIk1FTkMiKTticmVha319KTtsZXQgcj1uZXcgWSgyKTtyZXR1cm4gaHQocix0LmJhbmtPZmZzZXQsMiksYS5wdXNoKGNBKCJEQk5LIixyKSkscCgiJWNGaW5pc2hlZCEiLGMuaW5mbyksWigpLHZBKCJSSUZGIixbbmUoIlJNSUQiKSxjQSgiZGF0YSIscyksdkEoIklORk8iLGEsITApLG5ldyBZKEEpXSkuYnVmZmVyfWZ1bmN0aW9uIHRvKGUsQSl7YkEoIiVjU2VhcmNoaW5nIGZvciBhbGwgdXNlZCBwcm9ncmFtcyBhbmQga2V5cy4uLiIsYy5pbmZvKTtsZXQgdD0xNitNYXRoLm1heCguLi5lLnBvcnRDaGFubmVsT2Zmc2V0TWFwKSxuPVtdLHM9ImdzIjtmb3IobGV0IEI9MDtCPHQ7QisrKXtsZXQgZD1CJTE2PT09U2U7bi5wdXNoKHtwcmVzZXQ6QS5nZXRQcmVzZXQoe2JhbmtMU0I6MCxiYW5rTVNCOjAsaXNHTUdTRHJ1bTpkLHByb2dyYW06MH0scyksYmFua01TQjowLGJhbmtMU0I6MCxpc0RydW06ZH0pfWxldCBhPW5ldyBNYXAscj1BcnJheShlLnRyYWNrcy5sZW5ndGgpLmZpbGwoMCksST1lLnRyYWNrcy5sZW5ndGg7ZnVuY3Rpb24gbygpe2xldCBCPTAsZD0xLzA7cmV0dXJuIGUudHJhY2tzLmZvckVhY2goKHtldmVudHM6aH0sQyk9PntyW0NdPj1oLmxlbmd0aHx8aFtyW0NdXS50aWNrczxkJiYoQj1DLGQ9aFtyW0NdXS50aWNrcyl9KSxCfWxldCBnPWUudHJhY2tzLm1hcChCPT5CLnBvcnQpO2Zvcig7ST4wOyl7bGV0IEI9bygpLGQ9ZS50cmFja3NbQl0uZXZlbnRzO2lmKHJbQl0+PWQubGVuZ3RoKXtJLS07Y29udGludWV9bGV0IGg9ZFtyW0JdXTtpZihyW0JdKyssaC5zdGF0dXNCeXRlPT09TS5taWRpUG9ydCl7Z1tCXT1oLmRhdGFbMF07Y29udGludWV9bGV0IEM9aC5zdGF0dXNCeXRlJjI0MDtpZihDIT09TS5ub3RlT24mJkMhPT1NLmNvbnRyb2xsZXJDaGFuZ2UmJkMhPT1NLnByb2dyYW1DaGFuZ2UmJkMhPT1NLnN5c3RlbUV4Y2x1c2l2ZSljb250aW51ZTtsZXQgUT0oaC5zdGF0dXNCeXRlJjE1KStlLnBvcnRDaGFubmVsT2Zmc2V0TWFwW2dbQl1dfHwwLG09bltRXTtzd2l0Y2goQyl7Y2FzZSBNLnByb2dyYW1DaGFuZ2U6bS5wcmVzZXQ9QS5nZXRQcmVzZXQoe2JhbmtNU0I6bS5iYW5rTVNCLGJhbmtMU0I6bS5iYW5rTFNCLHByb2dyYW06aC5kYXRhWzBdLGlzR01HU0RydW06bS5pc0RydW19LHMpO2JyZWFrO2Nhc2UgTS5jb250cm9sbGVyQ2hhbmdlOnN3aXRjaChoLmRhdGFbMF0pe2RlZmF1bHQ6Y29udGludWU7Y2FzZSBTLmJhbmtTZWxlY3RMU0I6bS5iYW5rTFNCPWguZGF0YVsxXTticmVhaztjYXNlIFMuYmFua1NlbGVjdDptLmJhbmtNU0I9aC5kYXRhWzFdfWJyZWFrO2Nhc2UgTS5ub3RlT246aWYoaC5kYXRhWzFdPT09MCljb250aW51ZTtsZXQgeT1hLmdldChtLnByZXNldCk7eXx8KHk9bmV3IFNldCxhLnNldChtLnByZXNldCx5KSkseS5hZGQoYCR7aC5kYXRhWzBdfS0ke2guZGF0YVsxXX1gKTticmVhaztjYXNlIE0uc3lzdGVtRXhjbHVzaXZlOntpZighWHMoaCkpe2VzKGgpJiYocz0ieGciLHAoIiVjWEcgb24gZGV0ZWN0ZWQhIixjLnJlY29nbml6ZWQpKTtjb250aW51ZX1sZXQgRj1bOSwwLDEsMiwzLDQsNSw2LDcsOCwxMCwxMSwxMiwxMywxNCwxNV1baC5kYXRhWzVdJjE1XStlLnBvcnRDaGFubmVsT2Zmc2V0TWFwW2dbQl1dLGs9ISEoaC5kYXRhWzddPjAmJmguZGF0YVs1XT4+NCk7bT1uW0ZdLG0uaXNEcnVtPWt9YnJlYWt9fXJldHVybiBhLmZvckVhY2goKEIsZCk9PntCLnNpemU9PT0wJiYocChgJWNEZXRlY3RlZCBjaGFuZ2UgYnV0IG5vIGtleXMgZm9yICVjJHtkLm5hbWV9YCxjLmluZm8sYy52YWx1ZSksYS5kZWxldGUoZCkpfSksWigpLGF9ZnVuY3Rpb24gbm8oZSxBPTApe2xldCB0PWg9PihoLmRhdGE9bmV3IFkoaC5kYXRhLmJ1ZmZlciksNmU3L1F0KGguZGF0YSwzKSksbj1bXSxhPWUudHJhY2tzLm1hcChoPT5oLmV2ZW50cykuZmxhdCgpO2Euc29ydCgoaCxDKT0+aC50aWNrcy1DLnRpY2tzKTtmb3IobGV0IGg9MDtoPDE2O2grKyluLnB1c2goW10pO2xldCByPTAsST02MC8oMTIwKmUudGltZURpdmlzaW9uKSxvPTAsZz0wLEI9W107Zm9yKGxldCBoPTA7aDwxNjtoKyspQi5wdXNoKFtdKTtsZXQgZD0oaCxDKT0+e2xldCBRPUJbQ10uZmluZEluZGV4KHk9PnkubWlkaU5vdGU9PT1oKSxtPUJbQ11bUV07aWYobSl7bGV0IHk9ci1tLnN0YXJ0O20ubGVuZ3RoPXksQz09PVNlJiYobS5sZW5ndGg9eTxBP0E6eSksQltDXS5zcGxpY2UoUSwxKX1nLS19O2Zvcig7bzxhLmxlbmd0aDspe2xldCBoPWFbb10sQz1oLnN0YXR1c0J5dGU+PjQsUT1oLnN0YXR1c0J5dGUmMTU7aWYoQz09PTgpZChoLmRhdGFbMF0sUSk7ZWxzZSBpZihDPT09OSlpZihoLmRhdGFbMV09PT0wKWQoaC5kYXRhWzBdLFEpO2Vsc2V7ZChoLmRhdGFbMF0sUSk7bGV0IG09e21pZGlOb3RlOmguZGF0YVswXSxzdGFydDpyLGxlbmd0aDotMSx2ZWxvY2l0eTpoLmRhdGFbMV0vMTI3fTtuW1FdLnB1c2gobSksQltRXS5wdXNoKG0pLGcrK31lbHNlIGguc3RhdHVzQnl0ZT09PTgxJiYoST02MC8odChoKSplLnRpbWVEaXZpc2lvbikpO2lmKCsrbz49YS5sZW5ndGgpYnJlYWs7cis9SSooYVtvXS50aWNrcy1oLnRpY2tzKX1yZXR1cm4gZz4wJiZCLmZvckVhY2goKGgsQyk9PntoLmZvckVhY2goUT0+e2xldCBtPXItUS5zdGFydDtRLmxlbmd0aD1tLEM9PT1TZSYmKFEubGVuZ3RoPW08QT9BOm0pfSl9KSxufXZhciB2dD17bGluZWFyOjAsbmVhcmVzdE5laWdoYm9yOjEsaGVybWl0ZToyfSxobj17c291bmRDYW52YXNUZXh0OjAseWFtYWhhWEdUZXh0OjEsc291bmRDYW52YXNEb3RNYXRyaXg6Mn0sWUE9e0lkbGU6MCxSUENvYXJzZToxLFJQRmluZToyLE5SUENvYXJzZTozLE5SUEZpbmU6NCxEYXRhQ29hcnNlOjUsRGF0YUZpbmU6Nn0sSUE9e2NoYW5uZWxUdW5pbmc6MCxjaGFubmVsVHJhbnNwb3NlRmluZToxLG1vZHVsYXRpb25NdWx0aXBsaWVyOjIsbWFzdGVyVHVuaW5nOjMsY2hhbm5lbFR1bmluZ1NlbWl0b25lczo0LGNoYW5uZWxLZXlTaGlmdDo1LHNmMk5QUk5HZW5lcmF0b3JMU0I6Nn07ZnVuY3Rpb24gcWUoZSxBLHQsbil7cmV0dXJuIG5ldyBaQShuLE0uY29udHJvbGxlckNoYW5nZXxlJTE2LG5ldyBZKFtBLHRdKSl9ZnVuY3Rpb24gc28oZSxBKXtsZXQgdD0xNnxbMSwyLDMsNCw1LDYsNyw4LDAsOSwxMCwxMSwxMiwxMywxNCwxNV1bZSUxNl0sbj1bNjUsMTYsNjYsMTgsNjQsdCwyMSwxXSxhPTEyOC0oNjQrdCsyMSsxKSUxMjg7cmV0dXJuIG5ldyBaQShBLE0uc3lzdGVtRXhjbHVzaXZlLG5ldyBZKFsuLi5uLGEsMjQ3XSkpfWZ1bmN0aW9uIGFvKGUsQT1bXSx0PVtdLG49W10scz1bXSl7YkEoIiVjQXBwbHlpbmcgY2hhbmdlcyB0byB0aGUgTUlESSBmaWxlLi4uIixjLmluZm8pLHAoIkRlc2lyZWQgcHJvZ3JhbSBjaGFuZ2VzOiIsQSkscCgiRGVzaXJlZCBDQyBjaGFuZ2VzOiIsdCkscCgiRGVzaXJlZCBjaGFubmVscyB0byBjbGVhcjoiLG4pLHAoIkRlc2lyZWQgY2hhbm5lbHMgdG8gdHJhbnNwb3NlOiIscyk7bGV0IGE9bmV3IFNldDtBLmZvckVhY2goRD0+e2EuYWRkKEQuY2hhbm5lbCl9KTtsZXQgcj0iZ3MiLEk9ITEsbz1BcnJheShlLnRyYWNrcy5sZW5ndGgpLmZpbGwoMCksZz1lLnRyYWNrcy5sZW5ndGg7ZnVuY3Rpb24gQigpe2xldCBEPTAsdj0xLzA7cmV0dXJuIGUudHJhY2tzLmZvckVhY2goKEwsRSk9PntvW0VdPj1MLmV2ZW50cy5sZW5ndGh8fEwuZXZlbnRzW29bRV1dLnRpY2tzPHYmJihEPUUsdj1MLmV2ZW50c1tvW0VdXS50aWNrcyl9KSxEfWxldCBkPWUudHJhY2tzLm1hcChEPT5ELnBvcnQpLGg9e30sQz0wLFE9KEQsdik9PntlLnRyYWNrc1tEXS5jaGFubmVscy5zaXplIT09MCYmKEM9PT0wJiYoQys9MTYsaFt2XT0wKSxoW3ZdPT09dm9pZCAwJiYoaFt2XT1DLEMrPTE2KSxkW0RdPXYpfTtlLnRyYWNrcy5mb3JFYWNoKChELHYpPT57USh2LEQucG9ydCl9KTtsZXQgbT1DLHk9QXJyYXkobSkuZmlsbCghMCksRj1BcnJheShtKS5maWxsKDApLGs9QXJyYXkobSkuZmlsbCgwKTtmb3Iocy5mb3JFYWNoKEQ9PntsZXQgdj1NYXRoLnRydW5jKEQua2V5U2hpZnQpLEw9RC5rZXlTaGlmdC12O0ZbRC5jaGFubmVsXT12LGtbRC5jaGFubmVsXT1MfSk7Zz4wOyl7bGV0IEQ9QigpLHY9ZS50cmFja3NbRF07aWYob1tEXT49di5ldmVudHMubGVuZ3RoKXtnLS07Y29udGludWV9bGV0IEw9b1tEXSsrLEU9di5ldmVudHNbTF0sWD0oKT0+e3YuZGVsZXRlRXZlbnQoTCksb1tEXS0tfSxPPSh6LHRBPTApPT57di5hZGRFdmVudCh6LEwrdEEpLG9bRF0rK30sbkE9aFtkW0RdXXx8MDtpZihFLnN0YXR1c0J5dGU9PT1NLm1pZGlQb3J0KXtRKEQsRS5kYXRhWzBdKTtjb250aW51ZX1pZihFLnN0YXR1c0J5dGU8PU0uc2VxdWVuY2VTcGVjaWZpYyYmRS5zdGF0dXNCeXRlPj1NLnNlcXVlbmNlTnVtYmVyKWNvbnRpbnVlO2xldCAkPUUuc3RhdHVzQnl0ZSYyNDAsVj1FLnN0YXR1c0J5dGUmMTUscT1WK25BO2lmKG4uaW5jbHVkZXMocSkpe1goKTtjb250aW51ZX1zd2l0Y2goJCl7Y2FzZSBNLm5vdGVPbjppZih5W3FdKXt5W3FdPSExLHQuZmlsdGVyKHRBPT50QS5jaGFubmVsPT09cSkuZm9yRWFjaCh0QT0+e2xldCBpQT1xZShWLHRBLmNvbnRyb2xsZXJOdW1iZXIsdEEuY29udHJvbGxlclZhbHVlLEUudGlja3MpO08oaUEpfSk7bGV0IHo9a1txXTtpZih6IT09MCl7bGV0IHRBPXoqNjQrNjQsaUE9cWUoVixTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMCxFLnRpY2tzKSxQPXFlKFYsUy5yZWdpc3RlcmVkUGFyYW1ldGVyTFNCLDEsRS50aWNrcyksRz1xZShxLFMuZGF0YUVudHJ5TVNCLHRBLEUudGlja3MpLGI9cWUoVixTLmRhdGFFbnRyeUxTQiwwLEUudGlja3MpO08oYiksTyhHKSxPKFApLE8oaUEpfWlmKGEuaGFzKHEpKXtsZXQgdEE9QS5maW5kKGVBPT5lQS5jaGFubmVsPT09cSk7aWYoIXRBKWNvbnRpbnVlO3AoYCVjU2V0dGluZyAlYyR7dEEuY2hhbm5lbH0lYyB0byAlYyR7dGUudG9NSURJU3RyaW5nKHRBKX0lYy4gVHJhY2sgbnVtOiAlYyR7RH1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkKTtsZXQgaUE9dEEuYmFua01TQixQPXRBLmJhbmtMU0IsRz10QS5wcm9ncmFtLGI9bmV3IFpBKEUudGlja3MsTS5wcm9ncmFtQ2hhbmdlfFYsbmV3IFkoW0ddKSk7TyhiKTtsZXQgSz0oZUEsYUEpPT57bGV0IEdBPXFlKFYsZUE/Uy5iYW5rU2VsZWN0TFNCOlMuYmFua1NlbGVjdCxhQSxFLnRpY2tzKTtPKEdBKX07ZkEuaXNTeXN0ZW1YRyhyKSYmdEEuaXNHTUdTRHJ1bSYmKHAoYCVjQWRkaW5nIFhHIERydW0gY2hhbmdlIG9uIHRyYWNrICVjJHtEfWAsYy5yZWNvZ25pemVkLGMudmFsdWUpLGlBPWZBLmdldERydW1CYW5rKHIpLFA9MCksSyghMSxpQSksSyghMCxQKSx0QS5pc0dNR1NEcnVtJiYhZkEuaXNTeXN0ZW1YRyhyKSYmViE9PVNlJiYocChgJWNBZGRpbmcgR1MgRHJ1bSBjaGFuZ2Ugb24gdHJhY2sgJWMke0R9YCxjLnJlY29nbml6ZWQsYy52YWx1ZSksTyhzbyhWLEUudGlja3MpKSl9fUUuZGF0YVswXSs9RltxXTticmVhaztjYXNlIE0ubm90ZU9mZjpFLmRhdGFbMF0rPUZbcV07YnJlYWs7Y2FzZSBNLnByb2dyYW1DaGFuZ2U6aWYoYS5oYXMocSkpe1goKTtjb250aW51ZX1icmVhaztjYXNlIE0uY29udHJvbGxlckNoYW5nZTp7bGV0IHo9RS5kYXRhWzBdO2lmKHQuZmluZChpQT0+aUEuY2hhbm5lbD09PXEmJno9PT1pQS5jb250cm9sbGVyTnVtYmVyKSE9PXZvaWQgMCl7WCgpO2NvbnRpbnVlfSh6PT09Uy5iYW5rU2VsZWN0fHx6PT09Uy5iYW5rU2VsZWN0TFNCKSYmYS5oYXMocSkmJlgoKX1icmVhaztjYXNlIE0uc3lzdGVtRXhjbHVzaXZlOmlmKGVzKEUpKXAoIiVjWEcgc3lzdGVtIG9uIGRldGVjdGVkIixjLmluZm8pLHI9InhnIixJPSEwO2Vsc2UgaWYoRS5kYXRhWzBdPT09NjcmJkUuZGF0YVsyXT09PTc2JiZFLmRhdGFbM109PT04JiZFLmRhdGFbNV09PT0zKWEuaGFzKEUuZGF0YVs0XStuQSkmJlgoKTtlbHNlIGlmKFdzKEUpKXAoIiVjR00yIHN5c3RlbSBvbiBkZXRlY3RlZCIsYy5pbmZvKSxyPSJnbTIiLEk9ITA7ZWxzZSBpZihacyhFKSl7ST0hMCxwKCIlY0dTIG9uIGRldGVjdGVkISIsYy5yZWNvZ25pemVkKTticmVha31lbHNlIHpzKEUpJiYocCgiJWNHTSBvbiBkZXRlY3RlZCwgcmVtb3ZpbmchIixjLmluZm8pLFgoKSxJPSExKX19aWYoIUkmJkEubGVuZ3RoPjApe2xldCBEPTA7ZS50cmFja3NbMF0uZXZlbnRzWzBdLnN0YXR1c0J5dGU9PT1NLnRyYWNrTmFtZSYmRCsrLGUudHJhY2tzWzBdLmFkZEV2ZW50KF9zKDApLEQpLHAoIiVjR1Mgb24gbm90IGRldGVjdGVkLiBBZGRpbmcgaXQuIixjLmluZm8pfWUuZmx1c2goKSxaKCl9ZnVuY3Rpb24gb28oZSxBKXtsZXQgdD1bXSxuPVtdLHM9W10sYT1bXTtBLmNoYW5uZWxTbmFwc2hvdHMuZm9yRWFjaCgocixJKT0+e2lmKHIuaXNNdXRlZCl7bi5wdXNoKEkpO3JldHVybn1sZXQgbz1yLmNoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdCtyLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUcmFuc3Bvc2VGaW5lXS8xMDA7byE9PTAmJnQucHVzaCh7Y2hhbm5lbDpJLGtleVNoaWZ0Om99KSxyLmxvY2tQcmVzZXQmJnMucHVzaCh7Y2hhbm5lbDpJLC4uLnIucGF0Y2h9KSxyLmxvY2tlZENvbnRyb2xsZXJzLmZvckVhY2goKGcsQik9PntpZighZ3x8Qj4xMjd8fEI9PT1TLmJhbmtTZWxlY3QpcmV0dXJuO2xldCBkPXIubWlkaUNvbnRyb2xsZXJzW0JdPj43O2EucHVzaCh7Y2hhbm5lbDpJLGNvbnRyb2xsZXJOdW1iZXI6Qixjb250cm9sbGVyVmFsdWU6ZH0pfSl9KSxlLm1vZGlmeShzLGEsbix0KX12YXIgbG49e1hNRkZpbGVUeXBlOjAsbm9kZU5hbWU6MSxub2RlSUROdW1iZXI6MixyZXNvdXJjZUZvcm1hdDozLGZpbGVuYW1lT25EaXNrOjQsZmlsZW5hbWVFeHRlbnNpb25PbkRpc2s6NSxtYWNPU0ZpbGVUeXBlQW5kQ3JlYXRvcjo2LG1pbWVUeXBlOjcsdGl0bGU6OCxjb3B5cmlnaHROb3RpY2U6OSxjb21tZW50OjEwLGF1dG9TdGFydDoxMSxwcmVsb2FkOjEyLGNvbnRlbnREZXNjcmlwdGlvbjoxMyxJRDNNZXRhZGF0YToxNH0sS2U9e2luTGluZVJlc291cmNlOjEsaW5GaWxlUmVzb3VyY2U6MixpbkZpbGVOb2RlOjMsZXh0ZXJuYWxGaWxlOjQsZXh0ZXJuYWxYTUY6NSxYTUZGaWxlVVJJYW5kTm9kZUlEOjZ9LGRuPXtTdGFuZGFyZE1JRElGaWxlOjAsU3RhbmRhcmRNSURJRmlsZVR5cGUxOjEsRExTMToyLERMUzI6MyxETFMyMjo0LG1vYmlsZURMUzo1LHVua25vd246LTEsZm9sZGVyOi0yfSxybz17c3RhbmRhcmQ6MCxNTUE6MSxyZWdpc3RlcmVkOjIsbm9uUmVnaXN0ZXJlZDozfSxNdD17bm9uZTowLE1NQVVucGFja2VyOjEscmVnaXN0ZXJlZDoyLG5vblJlZ2lzdGVyZWQ6M30saW89Y2xhc3MgJHN7bGVuZ3RoO2l0ZW1Db3VudDttZXRhZGF0YUxlbmd0aDttZXRhZGF0YT17fTtub2RlRGF0YTtpbm5lck5vZGVzPVtdO3BhY2tlZENvbnRlbnQ9ITE7bm9kZVVucGFja2Vycz1bXTtyZXNvdXJjZUZvcm1hdD0idW5rbm93biI7cmVmZXJlbmNlVHlwZUlEO2NvbnN0cnVjdG9yKEEpe2xldCB0PUEuY3VycmVudEluZGV4O3RoaXMubGVuZ3RoPXVBKEEpLHRoaXMuaXRlbUNvdW50PXVBKEEpO2xldCBuPXVBKEEpLHM9QS5jdXJyZW50SW5kZXgtdCxhPW4tcyxyPUEuc2xpY2UoQS5jdXJyZW50SW5kZXgsQS5jdXJyZW50SW5kZXgrYSk7QS5jdXJyZW50SW5kZXgrPWEsdGhpcy5tZXRhZGF0YUxlbmd0aD11QShyKTtsZXQgST1yLnNsaWNlKHIuY3VycmVudEluZGV4LHIuY3VycmVudEluZGV4K3RoaXMubWV0YWRhdGFMZW5ndGgpO3IuY3VycmVudEluZGV4Kz10aGlzLm1ldGFkYXRhTGVuZ3RoO2xldCBvLGc7Zm9yKDtJLmN1cnJlbnRJbmRleDxJLmxlbmd0aDspe2lmKElbSS5jdXJyZW50SW5kZXhdPT09MClJLmN1cnJlbnRJbmRleCsrLG89dUEoSSksT2JqZWN0LnZhbHVlcyhsbikuaW5jbHVkZXMobyk/Zz1PYmplY3Qua2V5cyhsbikuZmluZChtPT5sblttXT09PW8pPz8iIjoocChgVW5rbm93biBmaWVsZCBzcGVjaWZpZXI6ICR7b31gKSxnPWB1bmtub3duXyR7b31gKTtlbHNle2xldCBtPXVBKEkpO289aEEoSSxtKSxnPW99bGV0IFE9dUEoSSk7aWYoUT09PTApe2xldCBtPXVBKEkpLHk9SS5zbGljZShJLmN1cnJlbnRJbmRleCxJLmN1cnJlbnRJbmRleCttKTtJLmN1cnJlbnRJbmRleCs9bSx1QSh5KTw0P3RoaXMubWV0YWRhdGFbZ109aEEoeSxtLTEpOnRoaXMubWV0YWRhdGFbZ109eS5zbGljZSh5LmN1cnJlbnRJbmRleCl9ZWxzZSBwKGBJbnRlcm5hdGlvbmFsIGNvbnRlbnQ6ICR7UX1gKSxJLmN1cnJlbnRJbmRleCs9dUEoSSl9bGV0IEI9ci5jdXJyZW50SW5kZXgsZD11QShyKSxoPXIuc2xpY2Uoci5jdXJyZW50SW5kZXgsQitkKTtpZihyLmN1cnJlbnRJbmRleD1CK2QsZD4wKWZvcih0aGlzLnBhY2tlZENvbnRlbnQ9ITA7aC5jdXJyZW50SW5kZXg8ZDspe2xldCBDPXt9O3N3aXRjaChDLmlkPXVBKGgpLEMuaWQpe2Nhc2UgTXQubm9uUmVnaXN0ZXJlZDpjYXNlIE10LnJlZ2lzdGVyZWQ6dGhyb3cgWigpLG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdW5wYWNrZXIgSUQ6ICR7Qy5pZH1gKTtkZWZhdWx0OnRocm93IFooKSxuZXcgRXJyb3IoYFVua25vd24gdW5wYWNrZXIgSUQ6ICR7Qy5pZH1gKTtjYXNlIE10Lm5vbmU6Qy5zdGFuZGFyZElEPXVBKGgpO2JyZWFrO2Nhc2UgTXQuTU1BVW5wYWNrZXI6e2xldCBRPWhbaC5jdXJyZW50SW5kZXgrK107UT09PTAmJihRPDw9OCxRfD1oW2guY3VycmVudEluZGV4KytdLFE8PD04LFF8PWhbaC5jdXJyZW50SW5kZXgrK10pO2xldCBtPXVBKGgpO0MubWFudWZhY3R1cmVySUQ9USxDLm1hbnVmYWN0dXJlckludGVybmFsSUQ9bX1icmVha31DLmRlY29kZWRTaXplPXVBKGgpLHRoaXMubm9kZVVucGFja2Vycy5wdXNoKEMpfXN3aXRjaChBLmN1cnJlbnRJbmRleD10K24sdGhpcy5yZWZlcmVuY2VUeXBlSUQ9dUEoQSksdGhpcy5ub2RlRGF0YT1BLnNsaWNlKEEuY3VycmVudEluZGV4LHQrdGhpcy5sZW5ndGgpLEEuY3VycmVudEluZGV4PXQrdGhpcy5sZW5ndGgsdGhpcy5yZWZlcmVuY2VUeXBlSUQpe2Nhc2UgS2UuaW5MaW5lUmVzb3VyY2U6YnJlYWs7Y2FzZSBLZS5leHRlcm5hbFhNRjpjYXNlIEtlLmluRmlsZU5vZGU6Y2FzZSBLZS5YTUZGaWxlVVJJYW5kTm9kZUlEOmNhc2UgS2UuZXh0ZXJuYWxGaWxlOmNhc2UgS2UuaW5GaWxlUmVzb3VyY2U6dGhyb3cgWigpLG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcmVmZXJlbmNlIHR5cGU6ICR7dGhpcy5yZWZlcmVuY2VUeXBlSUR9YCk7ZGVmYXVsdDp0aHJvdyBaKCksbmV3IEVycm9yKGBVbmtub3duIHJlZmVyZW5jZSB0eXBlOiAke3RoaXMucmVmZXJlbmNlVHlwZUlEfWApfWlmKHRoaXMuaXNGaWxlKXtpZih0aGlzLnBhY2tlZENvbnRlbnQpe2xldCBRPXRoaXMubm9kZURhdGEuc2xpY2UoMix0aGlzLm5vZGVEYXRhLmxlbmd0aCk7cChgJWNQYWNrZWQgY29udGVudC4gQXR0ZW1wdGluZyB0byBkZWZsYXRlLiBUYXJnZXQgc2l6ZTogJWMke3RoaXMubm9kZVVucGFja2Vyc1swXS5kZWNvZGVkU2l6ZX1gLGMud2FybixjLnZhbHVlKTt0cnl7dGhpcy5ub2RlRGF0YT1uZXcgWShQcyhRKS5idWZmZXIpfWNhdGNoKG0pe2lmKFooKSxtIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgbmV3IEVycm9yKGBFcnJvciB1bnBhY2tpbmcgWE1GIGZpbGUgY29udGVudHM6ICR7bS5tZXNzYWdlfS5gKX19bGV0IEM9dGhpcy5tZXRhZGF0YS5yZXNvdXJjZUZvcm1hdDtpZihDPT09dm9pZCAwKXNBKCJObyByZXNvdXJjZSBmb3JtYXQgZm9yIHRoaXMgZmlsZSBub2RlISIpO2Vsc2V7Q1swXSE9PXJvLnN0YW5kYXJkJiYocChgTm9uLXN0YW5kYXJkIGZvcm1hdFR5cGVJRDogJHtDLnRvU3RyaW5nKCl9YCksdGhpcy5yZXNvdXJjZUZvcm1hdD1DLnRvU3RyaW5nKCkpO2xldCBtPUNbMV07T2JqZWN0LnZhbHVlcyhkbikuaW5jbHVkZXMobSk/dGhpcy5yZXNvdXJjZUZvcm1hdD1PYmplY3Qua2V5cyhkbikuZmluZCh5PT5kblt5XT09PW0pOnAoYFVucmVjb2duaXplZCByZXNvdXJjZSBmb3JtYXQ6ICR7bX1gKX19ZWxzZSBmb3IodGhpcy5yZXNvdXJjZUZvcm1hdD0iZm9sZGVyIjt0aGlzLm5vZGVEYXRhLmN1cnJlbnRJbmRleDx0aGlzLm5vZGVEYXRhLmxlbmd0aDspe2xldCBDPXRoaXMubm9kZURhdGEuY3VycmVudEluZGV4LFE9dUEodGhpcy5ub2RlRGF0YSksbT10aGlzLm5vZGVEYXRhLnNsaWNlKEMsQytRKTt0aGlzLm5vZGVEYXRhLmN1cnJlbnRJbmRleD1DK1EsdGhpcy5pbm5lck5vZGVzLnB1c2gobmV3ICRzKG0pKX19Z2V0IGlzRmlsZSgpe3JldHVybiB0aGlzLml0ZW1Db3VudD09PTB9fTtmdW5jdGlvbiBJbyhlLEEpe2UuYmFua09mZnNldD0wO2xldCB0PWhBKEEsNCk7aWYodCE9PSJYTUZfIil0aHJvdyBaKCksbmV3IFN5bnRheEVycm9yKGBJbnZhbGlkIFhNRiBIZWFkZXIhIEV4cGVjdGVkICJfWE1GIiwgZ290ICIke3R9ImApO09BKCIlY1BhcnNpbmcgWE1GIGZpbGUuLi4iLGMuaW5mbyk7bGV0IG49aEEoQSw0KTtpZihwKGAlY1hNRiB2ZXJzaW9uOiAlYyR7bn1gLGMuaW5mbyxjLnJlY29nbml6ZWQpLG49PT0iMi4wMCIpe2xldCBvPVhlKEEsNCksZz1YZShBLDQpO3AoYCVjRmlsZSBUeXBlIElEOiAlYyR7b30lYywgRmlsZSBUeXBlIFJldmlzaW9uIElEOiAlYyR7Z31gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCl9dUEoQSk7bGV0IHM9dUEoQSk7QS5jdXJyZW50SW5kZXgrPXMsQS5jdXJyZW50SW5kZXg9dUEoQSk7bGV0IGE9bmV3IGlvKEEpLHIsST1vPT57bGV0IGc9KEIsZCk9PntvLm1ldGFkYXRhW0JdIT09dm9pZCAwJiZ0eXBlb2Ygby5tZXRhZGF0YVtCXT09InN0cmluZyImJihlLnJtaWRpSW5mb1tkXT1uZShvLm1ldGFkYXRhW0JdKSl9O2lmKGcoIm5vZGVOYW1lIiwibmFtZSIpLGcoInRpdGxlIiwibmFtZSIpLGcoImNvcHlyaWdodE5vdGljZSIsImNvcHlyaWdodCIpLGcoImNvbW1lbnQiLCJjb21tZW50Iiksby5pc0ZpbGUpc3dpdGNoKG8ucmVzb3VyY2VGb3JtYXQpe2RlZmF1bHQ6cmV0dXJuO2Nhc2UiRExTMSI6Y2FzZSJETFMyIjpjYXNlIkRMUzIyIjpjYXNlIm1vYmlsZURMUyI6cCgiJWNGb3VuZCBlbWJlZGRlZCBETFMhIixjLnJlY29nbml6ZWQpLGUuZW1iZWRkZWRTb3VuZEJhbms9by5ub2RlRGF0YS5idWZmZXI7YnJlYWs7Y2FzZSJTdGFuZGFyZE1JRElGaWxlIjpjYXNlIlN0YW5kYXJkTUlESUZpbGVUeXBlMSI6cCgiJWNGb3VuZCBlbWJlZGRlZCBNSURJISIsYy5yZWNvZ25pemVkKSxyPW8ubm9kZURhdGE7YnJlYWt9ZWxzZSBmb3IobGV0IEIgb2Ygby5pbm5lck5vZGVzKUkoQil9O2lmKEkoYSksWigpLCFyKXRocm93IG5ldyBFcnJvcigiTm8gTUlESSBkYXRhIGluIHRoZSBYTUYgZmlsZSEiKTtyZXR1cm4gcn12YXIgS3Q9Y2xhc3MgQWF7bmFtZT0iIjtwb3J0PTA7Y2hhbm5lbHM9bmV3IFNldDtldmVudHM9W107c3RhdGljIGNvcHlGcm9tKEEpe2xldCB0PW5ldyBBYTtyZXR1cm4gdC5jb3B5RnJvbShBKSx0fWNvcHlGcm9tKEEpe3RoaXMubmFtZT1BLm5hbWUsdGhpcy5wb3J0PUEucG9ydCx0aGlzLmNoYW5uZWxzPW5ldyBTZXQoQS5jaGFubmVscyksdGhpcy5ldmVudHM9QS5ldmVudHMubWFwKHQ9Pm5ldyBaQSh0LnRpY2tzLHQuc3RhdHVzQnl0ZSxuZXcgWSh0LmRhdGEpKSl9YWRkRXZlbnQoQSx0KXt0aGlzLmV2ZW50cy5zcGxpY2UodCwwLEEpfWRlbGV0ZUV2ZW50KEEpe3RoaXMuZXZlbnRzLnNwbGljZShBLDEpfXB1c2hFdmVudChBKXt0aGlzLmV2ZW50cy5wdXNoKEEpfX07ZnVuY3Rpb24gcHMoZSxBLHQpe2JBKCIlY1BhcnNpbmcgTUlESSBGaWxlLi4uIixjLmluZm8pLGUuZmlsZU5hbWU9dDtsZXQgbj1uZXcgWShBKSxzPW4sYT1nPT57bGV0IEI9aEEoZyw0KSxkPVhlKGcsNCksaD1uZXcgWShkKSxDPXt0eXBlOkIsc2l6ZTpkLGRhdGE6aH0sUT1nLnNsaWNlKGcuY3VycmVudEluZGV4LGcuY3VycmVudEluZGV4K0Muc2l6ZSk7cmV0dXJuIEMuZGF0YS5zZXQoUSwwKSxnLmN1cnJlbnRJbmRleCs9Qy5zaXplLEN9LHI9ZWUobiw0KTtpZihyPT09IlJJRkYiKXtuLmN1cnJlbnRJbmRleCs9ODtsZXQgZz1oQShuLDQpO2lmKGchPT0iUk1JRCIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBSTUlESSBIZWFkZXIhIEV4cGVjdGVkICJSTUlEIiwgZ290ICIke2d9ImApO2xldCBCPXJBKG4pO2lmKEIuaGVhZGVyIT09ImRhdGEiKXRocm93IFooKSxuZXcgU3ludGF4RXJyb3IoYEludmFsaWQgUk1JREkgQ2h1bmsgaGVhZGVyISBFeHBlY3RlZCAiZGF0YSIsIGdvdCAiJHtnfSJgKTtzPUIuZGF0YTtsZXQgZD0hMSxoPSExO2Zvcig7bi5jdXJyZW50SW5kZXg8PW4ubGVuZ3RoOyl7bGV0IEM9bi5jdXJyZW50SW5kZXgsUT1yQShuLCEwKTtpZihRLmhlYWRlcj09PSJSSUZGIil7bGV0IG09aEEoUS5kYXRhLDQpLnRvTG93ZXJDYXNlKCk7bT09PSJzZmJrInx8bT09PSJzZnBrInx8bT09PSJkbHMgIj8ocCgiJWNGb3VuZCBlbWJlZGRlZCBzb3VuZGJhbmshIixjLnJlY29nbml6ZWQpLGUuZW1iZWRkZWRTb3VuZEJhbms9bi5zbGljZShDLEMrUS5zaXplKS5idWZmZXIpOnNBKGBVbmtub3duIFJJRkYgY2h1bms6ICIke219ImApLG09PT0iZGxzICI/ZS5pc0RMU1JNSURJPSEwOmQ9ITB9ZWxzZSBpZihRLmhlYWRlcj09PSJMSVNUIiYmaEEoUS5kYXRhLDQpPT09IklORk8iKWZvcihwKCIlY0ZvdW5kIFJNSURJIElORk8gY2h1bmshIixjLnJlY29nbml6ZWQpO1EuZGF0YS5jdXJyZW50SW5kZXg8PVEuc2l6ZTspe2xldCB5PXJBKFEuZGF0YSwhMCksRj15LmhlYWRlcixrPXkuZGF0YTtzd2l0Y2goRil7ZGVmYXVsdDpzQShgVW5rbm93biBSTUlESSBJbmZvOiAke0Z9YCk7YnJlYWs7Y2FzZSJJTkFNIjplLnJtaWRpSW5mby5uYW1lPWs7YnJlYWs7Y2FzZSJJQUxCIjpjYXNlIklQUkQiOmUucm1pZGlJbmZvLmFsYnVtPWs7YnJlYWs7Y2FzZSJJQ1JUIjpjYXNlIklDUkQiOmUucm1pZGlJbmZvLmNyZWF0aW9uRGF0ZT1rO2JyZWFrO2Nhc2UiSUFSVCI6ZS5ybWlkaUluZm8uYXJ0aXN0PWs7YnJlYWs7Y2FzZSJJR05SIjplLnJtaWRpSW5mby5nZW5yZT1rO2JyZWFrO2Nhc2UiSVBJQyI6ZS5ybWlkaUluZm8ucGljdHVyZT1rO2JyZWFrO2Nhc2UiSUNPUCI6ZS5ybWlkaUluZm8uY29weXJpZ2h0PWs7YnJlYWs7Y2FzZSJJQ01UIjplLnJtaWRpSW5mby5jb21tZW50PWs7YnJlYWs7Y2FzZSJJRU5HIjplLnJtaWRpSW5mby5lbmdpbmVlcj1rO2JyZWFrO2Nhc2UiSVNGVCI6ZS5ybWlkaUluZm8uc29mdHdhcmU9azticmVhaztjYXNlIklTQkoiOmUucm1pZGlJbmZvLnN1YmplY3Q9azticmVhaztjYXNlIklFTkMiOmUucm1pZGlJbmZvLmluZm9FbmNvZGluZz1rO2JyZWFrO2Nhc2UiTUVOQyI6ZS5ybWlkaUluZm8ubWlkaUVuY29kaW5nPWs7YnJlYWs7Y2FzZSJEQk5LIjplLmJhbmtPZmZzZXQ9eHMoaywyKSxoPSEwO2JyZWFrfX19ZCYmIWgmJihlLmJhbmtPZmZzZXQ9MSksZS5pc0RMU1JNSURJJiYoZS5iYW5rT2Zmc2V0PTApLGUuZW1iZWRkZWRTb3VuZEJhbms9PT12b2lkIDAmJihlLmJhbmtPZmZzZXQ9MCl9ZWxzZSByPT09IlhNRl8iP3M9SW8oZSxuKTpzPW47bGV0IEk9YShzKTtpZihJLnR5cGUhPT0iTVRoZCIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBNSURJIEhlYWRlciEgRXhwZWN0ZWQgIk1UaGQiLCBnb3QgIiR7SS50eXBlfSJgKTtpZihJLnNpemUhPT02KXRocm93IFooKSxuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBNSURJIGhlYWRlciBjaHVuayBzaXplISBFeHBlY3RlZCA2LCBnb3QgJHtJLnNpemV9YCk7ZS5mb3JtYXQ9WGUoSS5kYXRhLDIpO2xldCBvPVhlKEkuZGF0YSwyKTtlLnRpbWVEaXZpc2lvbj1YZShJLmRhdGEsMik7Zm9yKGxldCBnPTA7ZzxvO2crKyl7bGV0IEI9bmV3IEt0LGQ9YShzKTtpZihkLnR5cGUhPT0iTVRyayIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCB0cmFjayBoZWFkZXIhIEV4cGVjdGVkICJNVHJrIiBnb3QgIiR7ZC50eXBlfSJgKTtsZXQgaCxDPTA7Zm9yKGUuZm9ybWF0PT09MiYmZz4wJiYoQys9ZS50cmFja3NbZy0xXS5ldmVudHNbZS50cmFja3NbZy0xXS5ldmVudHMubGVuZ3RoLTFdLnRpY2tzKTtkLmRhdGEuY3VycmVudEluZGV4PGQuc2l6ZTspe0MrPXVBKGQuZGF0YSk7bGV0IFE9ZC5kYXRhW2QuZGF0YS5jdXJyZW50SW5kZXhdLG07aWYoaCE9PXZvaWQgMCYmUTwxMjgpbT1oO2Vsc2V7aWYoUTwxMjgpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgVW5leHBlY3RlZCBieXRlIHdpdGggbm8gcnVubmluZyBieXRlLiAoJHtRfSlgKTttPWQuZGF0YVtkLmRhdGEuY3VycmVudEluZGV4KytdfWxldCB5PUthKG0pLEY7c3dpdGNoKHkpe2Nhc2UtMTpGPTA7YnJlYWs7Y2FzZS0yOm09ZC5kYXRhW2QuZGF0YS5jdXJyZW50SW5kZXgrK10sRj11QShkLmRhdGEpO2JyZWFrO2Nhc2UtMzpGPXVBKGQuZGF0YSk7YnJlYWs7ZGVmYXVsdDpGPU9hW20+PjRdLGg9bTticmVha31sZXQgaz1uZXcgWShGKTtrLnNldChkLmRhdGEuc2xpY2UoZC5kYXRhLmN1cnJlbnRJbmRleCxkLmRhdGEuY3VycmVudEluZGV4K0YpLDApO2xldCBEPW5ldyBaQShDLG0sayk7Qi5wdXNoRXZlbnQoRCksZC5kYXRhLmN1cnJlbnRJbmRleCs9Rn1lLnRyYWNrcy5wdXNoKEIpLHAoYCVjUGFyc2VkICVjJHtlLnRyYWNrcy5sZW5ndGh9JWMgLyAlYyR7ZS50cmFja3MubGVuZ3RofWAsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpfXAoIiVjQWxsIHRyYWNrcyBwYXJzZWQgY29ycmVjdGx5ISIsYy5yZWNvZ25pemVkKSxlLmZsdXNoKCExKSxaKCkscChgJWNNSURJIGZpbGUgcGFyc2VkLiBUb3RhbCB0aWNrIHRpbWU6ICVjJHtlLmxhc3RWb2ljZUV2ZW50VGlja30lYywgdG90YWwgc2Vjb25kcyB0aW1lOiAlYyR7ZS5kdXJhdGlvbn1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCl9dmFyIGdvPW5ldyBNYXAoW1siZG9taW5nbyIsIlN1bmRheSJdLFsic2VndW5kYS1mZWlyYSIsIk1vbmRheSJdLFsidGVyXHhFN2EtZmVpcmEiLCJUdWVzZGF5Il0sWyJxdWFydGEtZmVpcmEiLCJXZWRuZXNkYXkiXSxbInF1aW50YS1mZWlyYSIsIlRodXJzZGF5Il0sWyJzZXh0YS1mZWlyYSIsIkZyaWRheSJdLFsic1x4RTFiYWRvIiwiU2F0dXJkYXkiXSxbImphbmVpcm8iLCJKYW51YXJ5Il0sWyJmZXZlcmVpcm8iLCJGZWJydWFyeSJdLFsibWFyXHhFN28iLCJNYXJjaCJdLFsiYWJyaWwiLCJBcHJpbCJdLFsibWFpbyIsIk1heSJdLFsianVuaG8iLCJKdW5lIl0sWyJqdWxobyIsIkp1bHkiXSxbImFnb3N0byIsIkF1Z3VzdCJdLFsic2V0ZW1icm8iLCJTZXB0ZW1iZXIiXSxbIm91dHVicm8iLCJPY3RvYmVyIl0sWyJub3ZlbWJybyIsIk5vdmVtYmVyIl0sWyJkZXplbWJybyIsIkRlY2VtYmVyIl1dKSxjbz1bZ29dO2Z1bmN0aW9uIEVvKGUpe2ZvcihsZXQgQSBvZiBjbyl7bGV0IHQ9ZTtBLmZvckVhY2goKHMsYSk9PntsZXQgcj1uZXcgUmVnRXhwKGEsImdpIik7dD10LnJlcGxhY2UocixzKX0pO2xldCBuPW5ldyBEYXRlKHQpO2lmKCFpc05hTihuLmdldFRpbWUoKSkpcmV0dXJuIG59fWZ1bmN0aW9uIEJvKGUpe2xldCBBPS9eKFxkezJ9KVwuKFxkezJ9KVwuKFxkezR9KSQvLmV4ZWMoZSk7aWYoQSl7bGV0IHQ9cGFyc2VJbnQoQVsxXSksbj1wYXJzZUludChBWzJdKS0xLHM9cGFyc2VJbnQoQVszXSksYT1uZXcgRGF0ZShzLG4sdCk7aWYoIWlzTmFOKGEuZ2V0VGltZSgpKSlyZXR1cm4gYX19ZnVuY3Rpb24gQ28oZSl7bGV0IEE9L14oXGR7MSwyfSlcc3sxLDJ9KFxkezEsMn0pXHN7MSwyfShcZHsyfSkkLy5leGVjKGUpO2lmKEEpe2xldCB0PUFbMV0sbj0ocGFyc2VJbnQoQVsyXSkrMSkudG9TdHJpbmcoKSxzPUFbM10sYT1uZXcgRGF0ZShgJHtufS8ke3R9LyR7c31gKTtpZighaXNOYU4oYS5nZXRUaW1lKCkpKXJldHVybiBhfX1mdW5jdGlvbiBobyhlKXtsZXQgdD0vXGJcZHs0fVxiLy5leGVjKGUpO3JldHVybiB0P25ldyBEYXRlKHRbMF0pOnZvaWQgMH1mdW5jdGlvbiB0cyhlKXtpZihlPWUudHJpbSgpLGUubGVuZ3RoPDEpcmV0dXJuIG5ldyBEYXRlO2xldCBBPWUucmVwbGFjZSgvXGIoXGQrKShzdHxuZHxyZHx0aClcYi9nLCIkMSIpLHQ9bmV3IERhdGUoQSk7aWYoaXNOYU4odC5nZXRUaW1lKCkpKXtsZXQgbj1FbyhlKTtpZihuKXJldHVybiBuO2xldCBzPUJvKGUpO2lmKHMpcmV0dXJuIHM7bGV0IGE9Q28oZSk7aWYoYSlyZXR1cm4gYTtsZXQgcj1obyhlKTtyZXR1cm4gcnx8KHNBKGBJbnZhbGlkIGRhdGU6ICIke2V9Ii4gUmVwbGFjaW5nIHdpdGggdGhlIGN1cnJlbnQgZGF0ZSFgKSxuZXcgRGF0ZSl9cmV0dXJuIHR9dmFyIExlPWNsYXNzIEx0e3RyYWNrcz1bXTt0aW1lRGl2aXNpb249MDtkdXJhdGlvbj0wO3RlbXBvQ2hhbmdlcz1be3RpY2tzOjAsdGVtcG86MTIwfV07ZXh0cmFNZXRhZGF0YT1bXTtseXJpY3M9W107Zmlyc3ROb3RlT249MDtrZXlSYW5nZT17bWluOjAsbWF4OjEyN307bGFzdFZvaWNlRXZlbnRUaWNrPTA7cG9ydENoYW5uZWxPZmZzZXRNYXA9WzBdO2xvb3A9e3N0YXJ0OjAsZW5kOjB9O2ZpbGVOYW1lO2Zvcm1hdD0wO3JtaWRpSW5mbz17fTtiYW5rT2Zmc2V0PTA7aXNLYXJhb2tlRmlsZT0hMTtpc011bHRpUG9ydD0hMTtpc0RMU1JNSURJPSExO2VtYmVkZGVkU291bmRCYW5rO2JpbmFyeU5hbWU7Z2V0IGluZm9FbmNvZGluZygpe2xldCBBPXRoaXMucm1pZGlJbmZvLmluZm9FbmNvZGluZztpZighQSlyZXR1cm47bGV0IHQ9QS5ieXRlTGVuZ3RoO3JldHVybiBBW0EuYnl0ZUxlbmd0aC0xXT09PTAmJnQtLSxlZShBLHQpfXN0YXRpYyBmcm9tQXJyYXlCdWZmZXIoQSx0PSIiKXtsZXQgbj1uZXcgTHQ7cmV0dXJuIHBzKG4sQSx0KSxufXN0YXRpYyBhc3luYyBmcm9tRmlsZShBKXtsZXQgdD1uZXcgTHQ7cmV0dXJuIHBzKHQsYXdhaXQgQS5hcnJheUJ1ZmZlcigpLEEubmFtZSksdH1zdGF0aWMgY29weUZyb20oQSl7bGV0IHQ9bmV3IEx0O3JldHVybiB0LmNvcHlGcm9tKEEpLHR9Y29weUZyb20oQSl7dGhpcy5jb3B5TWV0YWRhdGFGcm9tKEEpLHRoaXMuZW1iZWRkZWRTb3VuZEJhbms9QT8uZW1iZWRkZWRTb3VuZEJhbms/LnNsaWNlKDApPz92b2lkIDAsdGhpcy50cmFja3M9QS50cmFja3MubWFwKHQ9Pkt0LmNvcHlGcm9tKHQpKX1taWRpVGlja3NUb1NlY29uZHMoQSl7bGV0IHQ9MDtmb3IoO0E+MDspe2xldCBuPXRoaXMudGVtcG9DaGFuZ2VzLmZpbmQoYT0+YS50aWNrczxBKTtpZighbilyZXR1cm4gdDtsZXQgcz1BLW4udGlja3M7dCs9cyo2MC8obi50ZW1wbyp0aGlzLnRpbWVEaXZpc2lvbiksQS09c31yZXR1cm4gdH1nZXRVc2VkUHJvZ3JhbXNBbmRLZXlzKEEpe3JldHVybiB0byh0aGlzLEEpfWZsdXNoKEE9ITApe2lmKEEpZm9yKGxldCB0IG9mIHRoaXMudHJhY2tzKXQuZXZlbnRzLnNvcnQoKG4scyk9Pm4udGlja3Mtcy50aWNrcyk7dGhpcy5wYXJzZUludGVybmFsKCl9Z2V0Tm90ZVRpbWVzKEE9MCl7cmV0dXJuIG5vKHRoaXMsQSl9d3JpdGVNSURJKCl7cmV0dXJuIFZhKHRoaXMpfXdyaXRlUk1JREkoQSx0PVNzKXtyZXR1cm4gZW8odGhpcyxBLCRuKHQsU3MpKX1tb2RpZnkoQT1bXSx0PVtdLG49W10scz1bXSl7YW8odGhpcyxBLHQsbixzKX1hcHBseVNuYXBzaG90KEEpe29vKHRoaXMsQSl9Z2V0TmFtZShBPSJTaGlmdF9KSVMiKXtsZXQgdD0iIixuPXRoaXMuZ2V0Uk1JREluZm8oIm5hbWUiKTtpZihuKXJldHVybiBuLnRyaW0oKTtpZih0aGlzLmJpbmFyeU5hbWUpe0E9dGhpcy5nZXRSTUlESW5mbygibWlkaUVuY29kaW5nIik/P0E7dHJ5e3Q9bmV3IFRleHREZWNvZGVyKEEpLmRlY29kZSh0aGlzLmJpbmFyeU5hbWUpLnRyaW0oKX1jYXRjaChzKXtzQShgRmFpbGVkIHRvIGRlY29kZSBNSURJIG5hbWU6ICR7c31gKX19cmV0dXJuIHR8fHRoaXMuZmlsZU5hbWV9Z2V0RXh0cmFNZXRhZGF0YShBPSJTaGlmdF9KSVMiKXtBPXRoaXMuaW5mb0VuY29kaW5nPz9BO2xldCB0PW5ldyBUZXh0RGVjb2RlcihBKTtyZXR1cm4gdGhpcy5leHRyYU1ldGFkYXRhLm1hcChuPT50LmRlY29kZShuLmRhdGEpLnJlcGxhY2UoL0BUfEBBL2csIiIpLnRyaW0oKSl9c2V0Uk1JREluZm8oQSx0KXtpZih0aGlzLnJtaWRpSW5mby5pbmZvRW5jb2Rpbmc9bmUoInV0Zi04IiwhMCksQT09PSJwaWN0dXJlIil0aGlzLnJtaWRpSW5mby5waWN0dXJlPW5ldyBVaW50OEFycmF5KHQpO2Vsc2UgaWYoQT09PSJjcmVhdGlvbkRhdGUiKXRoaXMucm1pZGlJbmZvLmNyZWF0aW9uRGF0ZT1uZSh0LnRvSVNPU3RyaW5nKCksITApO2Vsc2V7bGV0IG49bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpO3RoaXMucm1pZGlJbmZvW0FdPW5ldyBVaW50OEFycmF5KFsuLi5uLDBdKX19Z2V0Uk1JREluZm8oQSl7aWYoIXRoaXMucm1pZGlJbmZvW0FdKXJldHVybjtsZXQgdD10aGlzLmluZm9FbmNvZGluZz8/IlVURi04IjtpZihBPT09InBpY3R1cmUiKXJldHVybiB0aGlzLnJtaWRpSW5mb1tBXS5idWZmZXI7aWYoQT09PSJjcmVhdGlvbkRhdGUiKXJldHVybiB0cyhlZSh0aGlzLnJtaWRpSW5mb1tBXSkpO3RyeXtsZXQgbj1uZXcgVGV4dERlY29kZXIodCkscz10aGlzLnJtaWRpSW5mb1tBXTtyZXR1cm4gc1tzLmxlbmd0aC0xXT09PTAmJihzPXM/LnNsaWNlKDAscy5sZW5ndGgtMSkpLG4uZGVjb2RlKHMuYnVmZmVyKS50cmltKCl9Y2F0Y2gobil7c0EoYEZhaWxlZCB0byBkZWNvZGUgJHtBfSBuYW1lOiAke259YCk7cmV0dXJufX1jb3B5TWV0YWRhdGFGcm9tKEEpe3RoaXMuZmlsZU5hbWU9QS5maWxlTmFtZSx0aGlzLnRpbWVEaXZpc2lvbj1BLnRpbWVEaXZpc2lvbix0aGlzLmR1cmF0aW9uPUEuZHVyYXRpb24sdGhpcy5maXJzdE5vdGVPbj1BLmZpcnN0Tm90ZU9uLHRoaXMubGFzdFZvaWNlRXZlbnRUaWNrPUEubGFzdFZvaWNlRXZlbnRUaWNrLHRoaXMuZm9ybWF0PUEuZm9ybWF0LHRoaXMuYmFua09mZnNldD1BLmJhbmtPZmZzZXQsdGhpcy5pc0thcmFva2VGaWxlPUEuaXNLYXJhb2tlRmlsZSx0aGlzLmlzTXVsdGlQb3J0PUEuaXNNdWx0aVBvcnQsdGhpcy5pc0RMU1JNSURJPUEuaXNETFNSTUlESSx0aGlzLmlzRExTUk1JREk9QS5pc0RMU1JNSURJLHRoaXMudGVtcG9DaGFuZ2VzPVsuLi5BLnRlbXBvQ2hhbmdlc10sdGhpcy5leHRyYU1ldGFkYXRhPUEuZXh0cmFNZXRhZGF0YS5tYXAodD0+bmV3IFpBKHQudGlja3MsdC5zdGF0dXNCeXRlLG5ldyBZKHQuZGF0YSkpKSx0aGlzLmx5cmljcz1BLmx5cmljcy5tYXAodD0+bmV3IFpBKHQudGlja3MsdC5zdGF0dXNCeXRlLG5ldyBZKHQuZGF0YSkpKSx0aGlzLnBvcnRDaGFubmVsT2Zmc2V0TWFwPVsuLi5BLnBvcnRDaGFubmVsT2Zmc2V0TWFwXSx0aGlzLmJpbmFyeU5hbWU9QT8uYmluYXJ5TmFtZT8uc2xpY2UoKSx0aGlzLmxvb3A9ey4uLkEubG9vcH0sdGhpcy5rZXlSYW5nZT17Li4uQS5rZXlSYW5nZX0sdGhpcy5ybWlkaUluZm89e30sT2JqZWN0LmVudHJpZXMoQS5ybWlkaUluZm8pLmZvckVhY2godD0+e2xldCBuPXRbMF0scz10WzFdO3RoaXMucm1pZGlJbmZvW25dPXMuc2xpY2UoKX0pfXBhcnNlSW50ZXJuYWwoKXtPQSgiJWNJbnRlcnByZXRpbmcgTUlESSBldmVudHMuLi4iLGMuaW5mbyk7bGV0IEE9ITE7dGhpcy5rZXlSYW5nZT17bWF4OjAsbWluOjEyN30sdGhpcy5leHRyYU1ldGFkYXRhPVtdO2xldCB0PSExO3R5cGVvZiB0aGlzLnJtaWRpSW5mby5uYW1lPCJ1IiYmKHQ9ITApO2xldCBuPW51bGwscz1udWxsO2ZvcihsZXQgbyBvZiB0aGlzLnRyYWNrcyl7bGV0IGc9bmV3IFNldCxCPSExO2ZvcihsZXQgaD0wO2g8by5ldmVudHMubGVuZ3RoO2grKyl7bGV0IEM9by5ldmVudHNbaF07aWYoQy5zdGF0dXNCeXRlPj0xMjgmJkMuc3RhdHVzQnl0ZTwyNDApe0I9ITA7Zm9yKGxldCBtPTA7bTxDLmRhdGEubGVuZ3RoO20rKylDLmRhdGFbbV09TWF0aC5taW4oMTI3LEMuZGF0YVttXSk7c3dpdGNoKEMudGlja3M+dGhpcy5sYXN0Vm9pY2VFdmVudFRpY2smJih0aGlzLmxhc3RWb2ljZUV2ZW50VGljaz1DLnRpY2tzKSxDLnN0YXR1c0J5dGUmMjQwKXtjYXNlIE0uY29udHJvbGxlckNoYW5nZTpzd2l0Y2goQy5kYXRhWzBdKXtjYXNlIDI6Y2FzZSAxMTY6bj1DLnRpY2tzO2JyZWFrO2Nhc2UgNDpjYXNlIDExNzpzPT09bnVsbD9zPUMudGlja3M6cz0wO2JyZWFrO2Nhc2UgMDp0aGlzLmlzRExTUk1JREkmJkMuZGF0YVsxXSE9PTAmJkMuZGF0YVsxXSE9PTEyNyYmKHAoIiVjRExTIFJNSURJIHdpdGggb2Zmc2V0IDEgZGV0ZWN0ZWQhIixjLnJlY29nbml6ZWQpLHRoaXMuYmFua09mZnNldD0xKX1icmVhaztjYXNlIE0ubm90ZU9uOntnLmFkZChDLnN0YXR1c0J5dGUmMTUpO2xldCBtPUMuZGF0YVswXTt0aGlzLmtleVJhbmdlLm1pbj1NYXRoLm1pbih0aGlzLmtleVJhbmdlLm1pbixtKSx0aGlzLmtleVJhbmdlLm1heD1NYXRoLm1heCh0aGlzLmtleVJhbmdlLm1heCxtKTticmVha319fWxldCBRPWVlKEMuZGF0YSk7c3dpdGNoKEMuc3RhdHVzQnl0ZSl7Y2FzZSBNLmVuZE9mVHJhY2s6aCE9PW8uZXZlbnRzLmxlbmd0aC0xJiYoaC0tLG8uZGVsZXRlRXZlbnQoaCksc0EoIlVuZXhwZWN0ZWQgRW5kT2ZUcmFjay4gUmVtb3ZpbmchIikpO2JyZWFrO2Nhc2UgTS5zZXRUZW1wbzp0aGlzLnRlbXBvQ2hhbmdlcy5wdXNoKHt0aWNrczpDLnRpY2tzLHRlbXBvOjZlNy9RdChDLmRhdGEsMyl9KTticmVhaztjYXNlIE0ubWFya2VyOnN3aXRjaChRLnRyaW0oKS50b0xvd2VyQ2FzZSgpKXtkZWZhdWx0OmJyZWFrO2Nhc2Uic3RhcnQiOmNhc2UibG9vcHN0YXJ0IjpuPUMudGlja3M7YnJlYWs7Y2FzZSJsb29wZW5kIjpzPUMudGlja3N9YnJlYWs7Y2FzZSBNLmNvcHlyaWdodDp0aGlzLmV4dHJhTWV0YWRhdGEucHVzaChDKTticmVhaztjYXNlIE0ubHlyaWM6US50cmltKCkuc3RhcnRzV2l0aCgiQEtNSURJIEtBUkFPS0UgRklMRSIpJiYodGhpcy5pc0thcmFva2VGaWxlPSEwLHAoIiVjS2FyYW9rZSBNSURJIGRldGVjdGVkISIsYy5yZWNvZ25pemVkKSksdGhpcy5pc0thcmFva2VGaWxlP0Muc3RhdHVzQnl0ZT1NLnRleHQ6dGhpcy5seXJpY3MucHVzaChDKTtjYXNlIE0udGV4dDp7bGV0IG09US50cmltKCk7bS5zdGFydHNXaXRoKCJAS01JREkgS0FSQU9LRSBGSUxFIik/KHRoaXMuaXNLYXJhb2tlRmlsZT0hMCxwKCIlY0thcmFva2UgTUlESSBkZXRlY3RlZCEiLGMucmVjb2duaXplZCkpOnRoaXMuaXNLYXJhb2tlRmlsZSYmKG0uc3RhcnRzV2l0aCgiQFQiKXx8bS5zdGFydHNXaXRoKCJAQSIpP0E/dGhpcy5leHRyYU1ldGFkYXRhLnB1c2goQyk6KHRoaXMuYmluYXJ5TmFtZT1DLmRhdGEuc2xpY2UoMiksQT0hMCx0PSEwKTptLnN0YXJ0c1dpdGgoIkAiKXx8dGhpcy5seXJpY3MucHVzaChDKSk7YnJlYWt9fX1vLmNoYW5uZWxzPWcsby5uYW1lPSIiO2xldCBkPW8uZXZlbnRzLmZpbmQoaD0+aC5zdGF0dXNCeXRlPT09TS50cmFja05hbWUpO2QmJnRoaXMudHJhY2tzLmluZGV4T2Yobyk+MCYmKG8ubmFtZT1lZShkLmRhdGEpLCFCJiYhby5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInNldHVwIikmJnRoaXMuZXh0cmFNZXRhZGF0YS5wdXNoKGQpKX10aGlzLnRlbXBvQ2hhbmdlcy5yZXZlcnNlKCkscCgiJWNDb3JyZWN0aW5nIGxvb3BzLCBwb3J0cyBhbmQgZGV0ZWN0aW5nIG5vdGVzLi4uIixjLmluZm8pO2xldCBhPVtdO2ZvcihsZXQgbyBvZiB0aGlzLnRyYWNrcyl7bGV0IGc9by5ldmVudHMuZmluZChCPT4oQi5zdGF0dXNCeXRlJjI0MCk9PT1NLm5vdGVPbik7ZyYmYS5wdXNoKGcudGlja3MpfXRoaXMuZmlyc3ROb3RlT249TWF0aC5taW4oLi4uYSkscChgJWNGaXJzdCBub3RlLW9uIGRldGVjdGVkIGF0OiAlYyR7dGhpcy5maXJzdE5vdGVPbn0lYyB0aWNrcyFgLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKSxuIT09bnVsbCYmcz09PW51bGw/KG49dGhpcy5maXJzdE5vdGVPbixzPXRoaXMubGFzdFZvaWNlRXZlbnRUaWNrKToobj8/PXRoaXMuZmlyc3ROb3RlT24sKHM9PT1udWxsfHxzPT09MCkmJihzPXRoaXMubGFzdFZvaWNlRXZlbnRUaWNrKSksdGhpcy5sb29wPXtzdGFydDpuLGVuZDpzfSxwKGAlY0xvb3AgcG9pbnRzOiBzdGFydDogJWMke3RoaXMubG9vcC5zdGFydH0lYyBlbmQ6ICVjJHt0aGlzLmxvb3AuZW5kfWAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkKTtsZXQgcj0wO3RoaXMucG9ydENoYW5uZWxPZmZzZXRNYXA9W107Zm9yKGxldCBvIG9mIHRoaXMudHJhY2tzKWlmKG8ucG9ydD0tMSxvLmNoYW5uZWxzLnNpemUhPT0wKWZvcihsZXQgZyBvZiBvLmV2ZW50cyl7aWYoZy5zdGF0dXNCeXRlIT09TS5taWRpUG9ydCljb250aW51ZTtsZXQgQj1nLmRhdGFbMF07by5wb3J0PUIsdGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcFtCXT09PXZvaWQgMCYmKHRoaXMucG9ydENoYW5uZWxPZmZzZXRNYXBbQl09cixyKz0xNil9dGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcD1bLi4udGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcF0ubWFwKG89Pm8/PzApO2xldCBJPTEvMDtmb3IobGV0IG8gb2YgdGhpcy50cmFja3Mpby5wb3J0IT09LTEmJkk+by5wb3J0JiYoST1vLnBvcnQpO0k9PT0xLzAmJihJPTApO2ZvcihsZXQgbyBvZiB0aGlzLnRyYWNrcykoby5wb3J0PT09LTF8fG8ucG9ydD09PXZvaWQgMCkmJihvLnBvcnQ9SSk7aWYodGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcC5sZW5ndGg9PT0wJiYodGhpcy5wb3J0Q2hhbm5lbE9mZnNldE1hcD1bMF0pLHRoaXMucG9ydENoYW5uZWxPZmZzZXRNYXAubGVuZ3RoPDI/cCgiJWNObyBhZGRpdGlvbmFsIE1JREkgUG9ydHMgZGV0ZWN0ZWQuIixjLmluZm8pOih0aGlzLmlzTXVsdGlQb3J0PSEwLHAoIiVjTUlESSBQb3J0cyBkZXRlY3RlZCEiLGMucmVjb2duaXplZCkpLCF0KWlmKHRoaXMudHJhY2tzLmxlbmd0aD4xKXtpZih0aGlzLnRyYWNrc1swXS5ldmVudHMuZmluZChvPT5vLnN0YXR1c0J5dGU+PU0ubm90ZU9uJiZvLnN0YXR1c0J5dGU8TS5wb2x5UHJlc3N1cmUpPT09dm9pZCAwKXtsZXQgbz10aGlzLnRyYWNrc1swXS5ldmVudHMuZmluZChnPT5nLnN0YXR1c0J5dGU9PT1NLnRyYWNrTmFtZSk7byYmKHRoaXMuYmluYXJ5TmFtZT1vLmRhdGEpfX1lbHNle2xldCBvPXRoaXMudHJhY2tzWzBdLmV2ZW50cy5maW5kKGc9Pmcuc3RhdHVzQnl0ZT09PU0udHJhY2tOYW1lKTtvJiYodGhpcy5iaW5hcnlOYW1lPW8uZGF0YSl9aWYodGhpcy5leHRyYU1ldGFkYXRhPXRoaXMuZXh0cmFNZXRhZGF0YS5maWx0ZXIobz0+by5kYXRhLmxlbmd0aD4wKSx0aGlzLmx5cmljcy5zb3J0KChvLGcpPT5vLnRpY2tzLWcudGlja3MpLCF0aGlzLnRyYWNrcy5zb21lKG89Pm8uZXZlbnRzWzBdLnRpY2tzPT09MCkpe2xldCBvPXRoaXMudHJhY2tzWzBdLGc9dGhpcz8uYmluYXJ5TmFtZT8uYnVmZmVyO2d8fChnPW5ldyBVaW50OEFycmF5KDApLmJ1ZmZlciksby5ldmVudHMudW5zaGlmdChuZXcgWkEoMCxNLnRyYWNrTmFtZSxuZXcgWShnKSkpfXRoaXMuZHVyYXRpb249dGhpcy5taWRpVGlja3NUb1NlY29uZHModGhpcy5sYXN0Vm9pY2VFdmVudFRpY2spLHRoaXMuYmluYXJ5TmFtZSYmdGhpcy5iaW5hcnlOYW1lLmxlbmd0aDwxJiYodGhpcy5iaW5hcnlOYW1lPXZvaWQgMCkscCgiJWNTdWNjZXNzISIsYy5yZWNvZ25pemVkKSxaKCl9fTtmdW5jdGlvbiBsbyhlLEEpe2lmKHRoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2smJmUuc3RhdHVzQnl0ZT49MTI4KXt0aGlzLnNlbmRNSURJTWVzc2FnZShbZS5zdGF0dXNCeXRlLC4uLmUuZGF0YV0pO3JldHVybn1sZXQgdD10aGlzLl9taWRpRGF0YS50cmFja3NbQV0sbj1BcyhlLnN0YXR1c0J5dGUpLHM9dGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXRzW3RoaXMuY3VycmVudE1JRElQb3J0c1tBXV18fDA7c3dpdGNoKG4uY2hhbm5lbCs9cyxuLnN0YXR1cyl7Y2FzZSBNLm5vdGVPbjp7bGV0IGE9ZS5kYXRhWzFdO2lmKGE+MCl0aGlzLnN5bnRoLm5vdGVPbihuLmNoYW5uZWwsZS5kYXRhWzBdLGEpLHRoaXMucGxheWluZ05vdGVzLnB1c2goe21pZGlOb3RlOmUuZGF0YVswXSxjaGFubmVsOm4uY2hhbm5lbCx2ZWxvY2l0eTphfSk7ZWxzZXt0aGlzLnN5bnRoLm5vdGVPZmYobi5jaGFubmVsLGUuZGF0YVswXSk7bGV0IHI9dGhpcy5wbGF5aW5nTm90ZXMuZmluZEluZGV4KEk9PkkubWlkaU5vdGU9PT1lLmRhdGFbMF0mJkkuY2hhbm5lbD09PW4uY2hhbm5lbCk7ciE9PS0xJiZ0aGlzLnBsYXlpbmdOb3Rlcy5zcGxpY2UociwxKX1icmVha31jYXNlIE0ubm90ZU9mZjp7dGhpcy5zeW50aC5ub3RlT2ZmKG4uY2hhbm5lbCxlLmRhdGFbMF0pO2xldCBhPXRoaXMucGxheWluZ05vdGVzLmZpbmRJbmRleChyPT5yLm1pZGlOb3RlPT09ZS5kYXRhWzBdJiZyLmNoYW5uZWw9PT1uLmNoYW5uZWwpO2EhPT0tMSYmdGhpcy5wbGF5aW5nTm90ZXMuc3BsaWNlKGEsMSk7YnJlYWt9Y2FzZSBNLnBpdGNoV2hlZWw6dGhpcy5zeW50aC5waXRjaFdoZWVsKG4uY2hhbm5lbCxlLmRhdGFbMV08PDd8ZS5kYXRhWzBdKTticmVhaztjYXNlIE0uY29udHJvbGxlckNoYW5nZTppZih0aGlzLl9taWRpRGF0YS5pc011bHRpUG9ydCYmdC5jaGFubmVscy5zaXplPT09MClyZXR1cm47dGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG4uY2hhbm5lbCxlLmRhdGFbMF0sZS5kYXRhWzFdKTticmVhaztjYXNlIE0ucHJvZ3JhbUNoYW5nZTppZih0aGlzLl9taWRpRGF0YS5pc011bHRpUG9ydCYmdC5jaGFubmVscy5zaXplPT09MClyZXR1cm47dGhpcy5zeW50aC5wcm9ncmFtQ2hhbmdlKG4uY2hhbm5lbCxlLmRhdGFbMF0pO2JyZWFrO2Nhc2UgTS5wb2x5UHJlc3N1cmU6dGhpcy5zeW50aC5wb2x5UHJlc3N1cmUobi5jaGFubmVsLGUuZGF0YVswXSxlLmRhdGFbMV0pO2JyZWFrO2Nhc2UgTS5jaGFubmVsUHJlc3N1cmU6dGhpcy5zeW50aC5jaGFubmVsUHJlc3N1cmUobi5jaGFubmVsLGUuZGF0YVswXSk7YnJlYWs7Y2FzZSBNLnN5c3RlbUV4Y2x1c2l2ZTp0aGlzLnN5bnRoLnN5c3RlbUV4Y2x1c2l2ZShlLmRhdGEscyk7YnJlYWs7Y2FzZSBNLnNldFRlbXBvOntsZXQgYT02ZTcvUXQoZS5kYXRhLDMpO3RoaXMub25lVGlja1RvU2Vjb25kcz02MC8oYSp0aGlzLl9taWRpRGF0YS50aW1lRGl2aXNpb24pLHRoaXMub25lVGlja1RvU2Vjb25kcz09PTAmJih0aGlzLm9uZVRpY2tUb1NlY29uZHM9NjAvKDEyMCp0aGlzLl9taWRpRGF0YS50aW1lRGl2aXNpb24pLHAoImludmFsaWQgdGVtcG8hIGZhbGxpbmcgYmFjayB0byAxMjAgQlBNIiksYT0xMjApO2JyZWFrfWNhc2UgTS50aW1lU2lnbmF0dXJlOmNhc2UgTS5lbmRPZlRyYWNrOmNhc2UgTS5taWRpQ2hhbm5lbFByZWZpeDpjYXNlIE0uc29uZ1Bvc2l0aW9uOmNhc2UgTS5hY3RpdmVTZW5zaW5nOmNhc2UgTS5rZXlTaWduYXR1cmU6Y2FzZSBNLnNlcXVlbmNlTnVtYmVyOmNhc2UgTS5zZXF1ZW5jZVNwZWNpZmljOmNhc2UgTS50ZXh0OmNhc2UgTS5seXJpYzpjYXNlIE0uY29weXJpZ2h0OmNhc2UgTS50cmFja05hbWU6Y2FzZSBNLm1hcmtlcjpjYXNlIE0uY3VlUG9pbnQ6Y2FzZSBNLmluc3RydW1lbnROYW1lOmNhc2UgTS5wcm9ncmFtTmFtZTpicmVhaztjYXNlIE0ubWlkaVBvcnQ6dGhpcy5hc3NpZ25NSURJUG9ydChBLGUuZGF0YVswXSk7YnJlYWs7Y2FzZSBNLnJlc2V0OnRoaXMuc3ludGguc3RvcEFsbENoYW5uZWxzKCksdGhpcy5zeW50aC5yZXNldEFsbENvbnRyb2xsZXJzKCk7YnJlYWs7ZGVmYXVsdDpwKGAlY1VucmVjb2duaXplZCBFdmVudDogJWMke2Uuc3RhdHVzQnl0ZX0lYyBzdGF0dXMgYnl0ZTogJWMke09iamVjdC5rZXlzKE0pLmZpbmQoYT0+TVthXT09PW4uc3RhdHVzKX1gLGMud2FybixjLnVucmVjb2duaXplZCxjLndhcm4sYy52YWx1ZSk7YnJlYWt9bi5zdGF0dXM+PTAmJm4uc3RhdHVzPDEyOCYmdGhpcy5jYWxsRXZlbnQoIm1ldGFFdmVudCIse2V2ZW50OmUsdHJhY2tJbmRleDpBfSl9ZnVuY3Rpb24gUW8oKXtpZih0aGlzLnBhdXNlZHx8IXRoaXMuX21pZGlEYXRhKXJldHVybjtsZXQgZT10aGlzLmN1cnJlbnRUaW1lO2Zvcig7dGhpcy5wbGF5ZWRUaW1lPGU7KXtsZXQgQT10aGlzLmZpbmRGaXJzdEV2ZW50SW5kZXgoKSxuPXRoaXMuX21pZGlEYXRhLnRyYWNrc1tBXS5ldmVudHNbdGhpcy5ldmVudEluZGV4ZXNbQV0rK107dGhpcy5wcm9jZXNzRXZlbnQobixBKTtsZXQgcz10aGlzLmZpbmRGaXJzdEV2ZW50SW5kZXgoKSxhPXRoaXMuX21pZGlEYXRhLnRyYWNrc1tzXTtpZih0aGlzLmxvb3BDb3VudD4wJiZ0aGlzLl9taWRpRGF0YS5sb29wLmVuZDw9bi50aWNrcyl7dGhpcy5sb29wQ291bnQhPT0xLzAmJih0aGlzLmxvb3BDb3VudC0tLHRoaXMuY2FsbEV2ZW50KCJsb29wQ291bnRDaGFuZ2UiLHtuZXdDb3VudDp0aGlzLmxvb3BDb3VudH0pKSx0aGlzLnNldFRpbWVUaWNrcyh0aGlzLl9taWRpRGF0YS5sb29wLnN0YXJ0KTtyZXR1cm59aWYoYS5ldmVudHMubGVuZ3RoPD10aGlzLmV2ZW50SW5kZXhlc1tzXSl7dGhpcy5zb25nSXNGaW5pc2hlZCgpO3JldHVybn1sZXQgcj1hLmV2ZW50c1t0aGlzLmV2ZW50SW5kZXhlc1tzXV07dGhpcy5wbGF5ZWRUaW1lKz10aGlzLm9uZVRpY2tUb1NlY29uZHMqKHIudGlja3Mtbi50aWNrcyl9fWZ1bmN0aW9uIHVvKGUsQSl7dGhpcy5fbWlkaURhdGEudHJhY2tzW2VdLmNoYW5uZWxzLnNpemUhPT0wJiYodGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQ9PT0wJiYodGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQrPTE2LHRoaXMubWlkaVBvcnRDaGFubmVsT2Zmc2V0c1tBXT0wKSx0aGlzLm1pZGlQb3J0Q2hhbm5lbE9mZnNldHNbQV09PT12b2lkIDAmJih0aGlzLnN5bnRoLm1pZGlDaGFubmVscy5sZW5ndGg8dGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQrMTUmJnRoaXMuYWRkTmV3TUlESVBvcnQoKSx0aGlzLm1pZGlQb3J0Q2hhbm5lbE9mZnNldHNbQV09dGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQsdGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXQrPTE2KSx0aGlzLmN1cnJlbnRNSURJUG9ydHNbZV09QSl9ZnVuY3Rpb24gZm8oZSl7aWYoIWUudHJhY2tzKXRocm93IG5ldyBFcnJvcigiVGhpcyBNSURJIGhhcyBubyB0cmFja3MhIik7dGhpcy5vbmVUaWNrVG9TZWNvbmRzPTYwLygxMjAqZS50aW1lRGl2aXNpb24pLHRoaXMuX21pZGlEYXRhPWUsdGhpcy5zeW50aC5jbGVhckVtYmVkZGVkQmFuaygpLHRoaXMuX21pZGlEYXRhLmVtYmVkZGVkU291bmRCYW5rIT09dm9pZCAwJiYocCgiJWNFbWJlZGRlZCBzb3VuZGJhbmsgZGV0ZWN0ZWQhIFVzaW5nIGl0LiIsYy5yZWNvZ25pemVkKSx0aGlzLnN5bnRoLnNldEVtYmVkZGVkU291bmRCYW5rKHRoaXMuX21pZGlEYXRhLmVtYmVkZGVkU291bmRCYW5rLHRoaXMuX21pZGlEYXRhLmJhbmtPZmZzZXQpKSxiQSgiJWNQcmVsb2FkaW5nIHNhbXBsZXMuLi4iLGMuaW5mbyksdGhpcy5fbWlkaURhdGEuZ2V0VXNlZFByb2dyYW1zQW5kS2V5cyh0aGlzLnN5bnRoLnNvdW5kQmFua01hbmFnZXIpLmZvckVhY2goKHQsbik9PntwKGAlY1ByZWxvYWRpbmcgdXNlZCBzYW1wbGVzIG9uICVjJHtuLm5hbWV9JWMuLi5gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKTtmb3IobGV0IHMgb2YgdCl7bGV0W2Escl09cy5zcGxpdCgiLSIpLm1hcChOdW1iZXIpO3RoaXMuc3ludGguZ2V0Vm9pY2VzRm9yUHJlc2V0KG4sYSxyLGEpfX0pLFooKSx0aGlzLmN1cnJlbnRNSURJUG9ydHM9dGhpcy5fbWlkaURhdGEudHJhY2tzLm1hcCh0PT50LnBvcnQpLHRoaXMubWlkaVBvcnRDaGFubmVsT2Zmc2V0PTAsdGhpcy5taWRpUG9ydENoYW5uZWxPZmZzZXRzPXt9LHRoaXMuX21pZGlEYXRhLnRyYWNrcy5mb3JFYWNoKCh0LG4pPT57dGhpcy5hc3NpZ25NSURJUG9ydChuLHQucG9ydCl9KSx0aGlzLmZpcnN0Tm90ZVRpbWU9dGhpcy5fbWlkaURhdGEubWlkaVRpY2tzVG9TZWNvbmRzKHRoaXMuX21pZGlEYXRhLmZpcnN0Tm90ZU9uKSxwKGAlY1RvdGFsIHNvbmcgdGltZTogJHtmcyhNYXRoLmNlaWwodGhpcy5fbWlkaURhdGEuZHVyYXRpb24pKS50aW1lfWAsYy5yZWNvZ25pemVkKSx0aGlzLmNhbGxFdmVudCgic29uZ0NoYW5nZSIse3NvbmdJbmRleDp0aGlzLl9zb25nSW5kZXh9KSx0aGlzLl9taWRpRGF0YS5kdXJhdGlvbjw9LjImJihzQShgJWNWZXJ5IHNob3J0IHNvbmc6ICgke2ZzKE1hdGgucm91bmQodGhpcy5fbWlkaURhdGEuZHVyYXRpb24pKS50aW1lfSkuIERpc2FibGluZyBsb29wIWAsYy53YXJuKSx0aGlzLmxvb3BDb3VudD0wKSx0aGlzLmN1cnJlbnRUaW1lPTB9dmFyIGk9e0lOVkFMSUQ6LTEsc3RhcnRBZGRyc09mZnNldDowLGVuZEFkZHJPZmZzZXQ6MSxzdGFydGxvb3BBZGRyc09mZnNldDoyLGVuZGxvb3BBZGRyc09mZnNldDozLHN0YXJ0QWRkcnNDb2Fyc2VPZmZzZXQ6NCxtb2RMZm9Ub1BpdGNoOjUsdmliTGZvVG9QaXRjaDo2LG1vZEVudlRvUGl0Y2g6Nyxpbml0aWFsRmlsdGVyRmM6OCxpbml0aWFsRmlsdGVyUTo5LG1vZExmb1RvRmlsdGVyRmM6MTAsbW9kRW52VG9GaWx0ZXJGYzoxMSxlbmRBZGRyc0NvYXJzZU9mZnNldDoxMixtb2RMZm9Ub1ZvbHVtZToxMyx1bnVzZWQxOjE0LGNob3J1c0VmZmVjdHNTZW5kOjE1LHJldmVyYkVmZmVjdHNTZW5kOjE2LHBhbjoxNyx1bnVzZWQyOjE4LHVudXNlZDM6MTksdW51c2VkNDoyMCxkZWxheU1vZExGTzoyMSxmcmVxTW9kTEZPOjIyLGRlbGF5VmliTEZPOjIzLGZyZXFWaWJMRk86MjQsZGVsYXlNb2RFbnY6MjUsYXR0YWNrTW9kRW52OjI2LGhvbGRNb2RFbnY6MjcsZGVjYXlNb2RFbnY6Mjgsc3VzdGFpbk1vZEVudjoyOSxyZWxlYXNlTW9kRW52OjMwLGtleU51bVRvTW9kRW52SG9sZDozMSxrZXlOdW1Ub01vZEVudkRlY2F5OjMyLGRlbGF5Vm9sRW52OjMzLGF0dGFja1ZvbEVudjozNCxob2xkVm9sRW52OjM1LGRlY2F5Vm9sRW52OjM2LHN1c3RhaW5Wb2xFbnY6MzcscmVsZWFzZVZvbEVudjozOCxrZXlOdW1Ub1ZvbEVudkhvbGQ6Mzksa2V5TnVtVG9Wb2xFbnZEZWNheTo0MCxpbnN0cnVtZW50OjQxLHJlc2VydmVkMTo0MixrZXlSYW5nZTo0Myx2ZWxSYW5nZTo0NCxzdGFydGxvb3BBZGRyc0NvYXJzZU9mZnNldDo0NSxrZXlOdW06NDYsdmVsb2NpdHk6NDcsaW5pdGlhbEF0dGVudWF0aW9uOjQ4LHJlc2VydmVkMjo0OSxlbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQ6NTAsY29hcnNlVHVuZTo1MSxmaW5lVHVuZTo1MixzYW1wbGVJRDo1MyxzYW1wbGVNb2Rlczo1NCxyZXNlcnZlZDM6NTUsc2NhbGVUdW5pbmc6NTYsZXhjbHVzaXZlQ2xhc3M6NTcsb3ZlcnJpZGluZ1Jvb3RLZXk6NTgsdW51c2VkNTo1OSxlbmRPcGVyOjYwLHZpYkxmb1RvVm9sdW1lOjYxLHZpYkxmb1RvRmlsdGVyRmM6NjJ9LE1uPU9iamVjdC5rZXlzKGkpLmxlbmd0aCxtbz1NYXRoLm1heCguLi5PYmplY3QudmFsdWVzKGkpKSx4PVtdO3hbaS5zdGFydEFkZHJzT2Zmc2V0XT17bWluOjAsbWF4OjMyNzY4LGRlZjowLG5ycG46MX07eFtpLmVuZEFkZHJPZmZzZXRdPXttaW46LTMyNzY4LG1heDozMjc2OCxkZWY6MCxucnBuOjF9O3hbaS5zdGFydGxvb3BBZGRyc09mZnNldF09e21pbjotMzI3NjgsbWF4OjMyNzY4LGRlZjowLG5ycG46MX07eFtpLmVuZGxvb3BBZGRyc09mZnNldF09e21pbjotMzI3NjgsbWF4OjMyNzY4LGRlZjowLG5ycG46MX07eFtpLnN0YXJ0QWRkcnNDb2Fyc2VPZmZzZXRdPXttaW46MCxtYXg6MzI3NjgsZGVmOjAsbnJwbjoxfTt4W2kubW9kTGZvVG9QaXRjaF09e21pbjotMTJlMyxtYXg6MTJlMyxkZWY6MCxucnBuOjJ9O3hbaS52aWJMZm9Ub1BpdGNoXT17bWluOi0xMmUzLG1heDoxMmUzLGRlZjowLG5ycG46Mn07eFtpLm1vZEVudlRvUGl0Y2hdPXttaW46LTEyZTMsbWF4OjEyZTMsZGVmOjAsbnJwbjoyfTt4W2kuaW5pdGlhbEZpbHRlckZjXT17bWluOjE1MDAsbWF4OjEzNTAwLGRlZjoxMzUwMCxucnBuOjJ9O3hbaS5pbml0aWFsRmlsdGVyUV09e21pbjowLG1heDo5NjAsZGVmOjAsbnJwbjoxfTt4W2kubW9kTGZvVG9GaWx0ZXJGY109e21pbjotMTJlMyxtYXg6MTJlMyxkZWY6MCxucnBuOjJ9O3hbaS52aWJMZm9Ub0ZpbHRlckZjXT17bWluOi0xMmUzLG1heDoxMmUzLGRlZjowLG5ycG46Mn07eFtpLm1vZEVudlRvRmlsdGVyRmNdPXttaW46LTEyZTMsbWF4OjEyZTMsZGVmOjAsbnJwbjoyfTt4W2kuZW5kQWRkcnNDb2Fyc2VPZmZzZXRdPXttaW46LTMyNzY4LG1heDozMjc2OCxkZWY6MCxucnBuOjF9O3hbaS5tb2RMZm9Ub1ZvbHVtZV09e21pbjotOTYwLG1heDo5NjAsZGVmOjAsbnJwbjoxfTt4W2kudmliTGZvVG9Wb2x1bWVdPXttaW46LTk2MCxtYXg6OTYwLGRlZjowLG5ycG46MX07eFtpLmNob3J1c0VmZmVjdHNTZW5kXT17bWluOjAsbWF4OjFlMyxkZWY6MCxucnBuOjF9O3hbaS5yZXZlcmJFZmZlY3RzU2VuZF09e21pbjowLG1heDoxZTMsZGVmOjAsbnJwbjoxfTt4W2kucGFuXT17bWluOi01MDAsbWF4OjUwMCxkZWY6MCxucnBuOjF9O3hbaS5kZWxheU1vZExGT109e21pbjotMTJlMyxtYXg6NWUzLGRlZjotMTJlMyxucnBuOjJ9O3hbaS5mcmVxTW9kTEZPXT17bWluOi0xNmUzLG1heDo0NTAwLGRlZjowLG5ycG46NH07eFtpLmRlbGF5VmliTEZPXT17bWluOi0xMmUzLG1heDo1ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLmZyZXFWaWJMRk9dPXttaW46LTE2ZTMsbWF4OjQ1MDAsZGVmOjAsbnJwbjo0fTt4W2kuZGVsYXlNb2RFbnZdPXttaW46LTMyNzY4LG1heDo1ZTMsZGVmOi0zMjc2OCxucnBuOjJ9O3hbaS5hdHRhY2tNb2RFbnZdPXttaW46LTMyNzY4LG1heDo4ZTMsZGVmOi0zMjc2OCxucnBuOjJ9O3hbaS5ob2xkTW9kRW52XT17bWluOi0xMmUzLG1heDo1ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLmRlY2F5TW9kRW52XT17bWluOi0xMmUzLG1heDo4ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLnN1c3RhaW5Nb2RFbnZdPXttaW46MCxtYXg6MWUzLGRlZjowLG5ycG46MX07eFtpLnJlbGVhc2VNb2RFbnZdPXttaW46LTEyZTMsbWF4OjhlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kua2V5TnVtVG9Nb2RFbnZIb2xkXT17bWluOi0xMjAwLG1heDoxMjAwLGRlZjowLG5ycG46MX07eFtpLmtleU51bVRvTW9kRW52RGVjYXldPXttaW46LTEyMDAsbWF4OjEyMDAsZGVmOjAsbnJwbjoxfTt4W2kuZGVsYXlWb2xFbnZdPXttaW46LTEyZTMsbWF4OjVlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kuYXR0YWNrVm9sRW52XT17bWluOi0xMmUzLG1heDo4ZTMsZGVmOi0xMmUzLG5ycG46Mn07eFtpLmhvbGRWb2xFbnZdPXttaW46LTEyZTMsbWF4OjVlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kuZGVjYXlWb2xFbnZdPXttaW46LTEyZTMsbWF4OjhlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kuc3VzdGFpblZvbEVudl09e21pbjowLG1heDoxNDQwLGRlZjowLG5ycG46MX07eFtpLnJlbGVhc2VWb2xFbnZdPXttaW46LTEyZTMsbWF4OjhlMyxkZWY6LTEyZTMsbnJwbjoyfTt4W2kua2V5TnVtVG9Wb2xFbnZIb2xkXT17bWluOi0xMjAwLG1heDoxMjAwLGRlZjowLG5ycG46MX07eFtpLmtleU51bVRvVm9sRW52RGVjYXldPXttaW46LTEyMDAsbWF4OjEyMDAsZGVmOjAsbnJwbjoxfTt4W2kuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXRdPXttaW46LTMyNzY4LG1heDozMjc2OCxkZWY6MCxucnBuOjF9O3hbaS5rZXlOdW1dPXttaW46LTEsbWF4OjEyNyxkZWY6LTEsbnJwbjoxfTt4W2kudmVsb2NpdHldPXttaW46LTEsbWF4OjEyNyxkZWY6LTEsbnJwbjoxfTt4W2kuaW5pdGlhbEF0dGVudWF0aW9uXT17bWluOjAsbWF4OjE0NDAsZGVmOjAsbnJwbjoxfTt4W2kuZW5kbG9vcEFkZHJzQ29hcnNlT2Zmc2V0XT17bWluOi0zMjc2OCxtYXg6MzI3NjgsZGVmOjAsbnJwbjoxfTt4W2kuY29hcnNlVHVuZV09e21pbjotMTIwLG1heDoxMjAsZGVmOjAsbnJwbjoxfTt4W2kuZmluZVR1bmVdPXttaW46LTEyNzAwLG1heDoxMjcwMCxkZWY6MCxucnBuOjF9O3hbaS5zY2FsZVR1bmluZ109e21pbjowLG1heDoxMjAwLGRlZjoxMDAsbnJwbjoxfTt4W2kuZXhjbHVzaXZlQ2xhc3NdPXttaW46MCxtYXg6OTk5OTksZGVmOjAsbnJwbjowfTt4W2kub3ZlcnJpZGluZ1Jvb3RLZXldPXttaW46LTEsbWF4OjEyNyxkZWY6LTEsbnJwbjowfTt4W2kuc2FtcGxlTW9kZXNdPXttaW46MCxtYXg6MyxkZWY6MCxucnBuOjB9O3ZhciB3QT17bW9ub1NhbXBsZToxLHJpZ2h0U2FtcGxlOjIsbGVmdFNhbXBsZTo0LGxpbmtlZFNhbXBsZTo4LHJvbU1vbm9TYW1wbGU6MzI3Njkscm9tUmlnaHRTYW1wbGU6MzI3NzAscm9tTGVmdFNhbXBsZTozMjc3Mixyb21MaW5rZWRTYW1wbGU6MzI3NzZ9LGo9e25vQ29udHJvbGxlcjowLG5vdGVPblZlbG9jaXR5OjIsbm90ZU9uS2V5TnVtOjMscG9seVByZXNzdXJlOjEwLGNoYW5uZWxQcmVzc3VyZToxMyxwaXRjaFdoZWVsOjE0LHBpdGNoV2hlZWxSYW5nZToxNixsaW5rOjEyN30sUUE9e2xpbmVhcjowLGNvbmNhdmU6MSxjb252ZXg6Mixzd2l0Y2g6M307dmFyIFQ9e25vbmU6MCxtb2RMZm86MSx2ZWxvY2l0eToyLGtleU51bTozLHZvbEVudjo0LG1vZEVudjo1LHBpdGNoV2hlZWw6Nixwb2x5UHJlc3N1cmU6NyxjaGFubmVsUHJlc3N1cmU6OCx2aWJyYXRvTGZvOjksbW9kdWxhdGlvbldoZWVsOjEyOSx2b2x1bWU6MTM1LHBhbjoxMzgsZXhwcmVzc2lvbjoxMzksY2hvcnVzOjIyMSxyZXZlcmI6MjE5LHBpdGNoV2hlZWxSYW5nZToyNTYsZmluZVR1bmU6MjU3LGNvYXJzZVR1bmU6MjU4fSxSPXtub25lOjAsZ2FpbjoxLHJlc2VydmVkOjIscGl0Y2g6MyxwYW46NCxrZXlOdW06NSxjaG9ydXNTZW5kOjEyOCxyZXZlcmJTZW5kOjEyOSxtb2RMZm9GcmVxOjI2MCxtb2RMZm9EZWxheToyNjEsdmliTGZvRnJlcToyNzYsdmliTGZvRGVsYXk6Mjc3LHZvbEVudkF0dGFjazo1MTgsdm9sRW52RGVjYXk6NTE5LHJlc2VydmVkRUcxOjUyMCx2b2xFbnZSZWxlYXNlOjUyMSx2b2xFbnZTdXN0YWluOjUyMix2b2xFbnZEZWxheTo1MjMsdm9sRW52SG9sZDo1MjQsbW9kRW52QXR0YWNrOjc3OCxtb2RFbnZEZWNheTo3NzkscmVzZXJ2ZWRFRzI6NzgwLG1vZEVudlJlbGVhc2U6NzgxLG1vZEVudlN1c3RhaW46NzgyLG1vZEVudkRlbGF5Ojc4Myxtb2RFbnZIb2xkOjc4NCxmaWx0ZXJDdXRvZmY6MTI4MCxmaWx0ZXJROjEyODF9LHlzPXtmb3J3YXJkOjAsbG9vcEFuZFJlbGVhc2U6MX0sbUE9MTI4LGJuPTE0NyxXZT1uZXcgSW50MTZBcnJheShibikuZmlsbCgwKSxTQT0oZSxBKT0+V2VbZV09QTw8NztTQShTLm1haW5Wb2x1bWUsMTAwKTtTQShTLmJhbGFuY2UsNjQpO1NBKFMuZXhwcmVzc2lvbkNvbnRyb2xsZXIsMTI3KTtTQShTLnBhbiw2NCk7U0EoUy5wb3J0YW1lbnRvT25PZmYsMTI3KTtTQShTLmZpbHRlclJlc29uYW5jZSw2NCk7U0EoUy5yZWxlYXNlVGltZSw2NCk7U0EoUy5hdHRhY2tUaW1lLDY0KTtTQShTLmJyaWdodG5lc3MsNjQpO1NBKFMuZGVjYXlUaW1lLDY0KTtTQShTLnZpYnJhdG9SYXRlLDY0KTtTQShTLnZpYnJhdG9EZXB0aCw2NCk7U0EoUy52aWJyYXRvRGVsYXksNjQpO1NBKFMuZ2VuZXJhbFB1cnBvc2VDb250cm9sbGVyNiw2NCk7U0EoUy5nZW5lcmFsUHVycG9zZUNvbnRyb2xsZXI4LDY0KTtTQShTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0IsMTI3KTtTQShTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMTI3KTtTQShTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0IsMTI3KTtTQShTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMTI3KTt2YXIgbnM9MTtXZVtTLnBvcnRhbWVudG9Db250cm9sXT1ucztTQShtQStqLnBpdGNoV2hlZWwsNjQpO1NBKG1BK2oucGl0Y2hXaGVlbFJhbmdlLDIpO3ZhciBlYT1PYmplY3Qua2V5cyhJQSkubGVuZ3RoLHRhPW5ldyBGbG9hdDMyQXJyYXkoZWEpO3RhW0lBLm1vZHVsYXRpb25NdWx0aXBsaWVyXT0xO2Z1bmN0aW9uIFNvKGU9ITApe2lmKGUmJnAoIiVjUmVzZXR0aW5nIGFsbCBjb250cm9sbGVycyEiLGMuaW5mbyksdGhpcy5wcml2YXRlUHJvcHMuY2FsbEV2ZW50KCJhbGxDb250cm9sbGVyUmVzZXQiLHZvaWQgMCksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLE9zKSwhKCF0aGlzLnByaXZhdGVQcm9wcy5kcnVtUHJlc2V0fHwhdGhpcy5wcml2YXRlUHJvcHMuZGVmYXVsdFByZXNldCkpe2ZvcihsZXQgQT0wO0E8dGhpcy5taWRpQ2hhbm5lbHMubGVuZ3RoO0ErKyl7bGV0IHQ9dGhpcy5taWRpQ2hhbm5lbHNbQV07dC5yZXNldENvbnRyb2xsZXJzKCExKSx0LnJlc2V0UHJlc2V0KCk7Zm9yKGxldCBuPTA7bjwxMjg7bisrKXRoaXMubWlkaUNoYW5uZWxzW0FdLmxvY2tlZENvbnRyb2xsZXJzW25dJiZ0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoImNvbnRyb2xsZXJDaGFuZ2UiLHtjaGFubmVsOkEsY29udHJvbGxlck51bWJlcjpuLGNvbnRyb2xsZXJWYWx1ZTp0aGlzLm1pZGlDaGFubmVsc1tBXS5taWRpQ29udHJvbGxlcnNbbl0+Pjd9KTtpZighdGhpcy5taWRpQ2hhbm5lbHNbQV0ubG9ja2VkQ29udHJvbGxlcnNbbUErai5waXRjaFdoZWVsXSl7bGV0IG49dGhpcy5taWRpQ2hhbm5lbHNbQV0ubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbF07dGhpcy5wcml2YXRlUHJvcHMuY2FsbEV2ZW50KCJwaXRjaFdoZWVsIix7Y2hhbm5lbDpBLHBpdGNoOm59KX1pZighdGhpcy5taWRpQ2hhbm5lbHNbQV0ubG9ja2VkQ29udHJvbGxlcnNbbUErai5jaGFubmVsUHJlc3N1cmVdKXtsZXQgbj10aGlzLm1pZGlDaGFubmVsc1tBXS5taWRpQ29udHJvbGxlcnNbbUErai5jaGFubmVsUHJlc3N1cmVdPj43O3RoaXMucHJpdmF0ZVByb3BzLmNhbGxFdmVudCgiY2hhbm5lbFByZXNzdXJlIix7Y2hhbm5lbDpBLHByZXNzdXJlOm59KX19dGhpcy5wcml2YXRlUHJvcHMudHVuaW5ncy5sZW5ndGg9MCx0aGlzLnByaXZhdGVQcm9wcy50dW5pbmdzLmxlbmd0aD0wO2ZvcihsZXQgQT0wO0E8MTI4O0ErKyl0aGlzLnByaXZhdGVQcm9wcy50dW5pbmdzLnB1c2goW10pO3RoaXMuc2V0TUlESVZvbHVtZSgxKX19ZnVuY3Rpb24gcG8oZT0hMCl7dGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nLmZpbGwoMCk7Zm9yKGxldCB0PTA7dDxXZS5sZW5ndGg7dCsrKXtpZih0aGlzLmxvY2tlZENvbnRyb2xsZXJzW3RdKWNvbnRpbnVlO2xldCBuPVdlW3RdO3RoaXMubWlkaUNvbnRyb2xsZXJzW3RdIT09biYmdDwxMjc/dD09PVMucG9ydGFtZW50b0NvbnRyb2w/dGhpcy5taWRpQ29udHJvbGxlcnNbdF09bnM6dCE9PVMucG9ydGFtZW50b0NvbnRyb2wmJnQhPT1TLmRhdGFFbnRyeU1TQiYmdCE9PVMucmVnaXN0ZXJlZFBhcmFtZXRlck1TQiYmdCE9PVMucmVnaXN0ZXJlZFBhcmFtZXRlckxTQiYmdCE9PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlck1TQiYmdCE9PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQiYmdGhpcy5jb250cm9sbGVyQ2hhbmdlKHQsbj4+NyxlKTp0aGlzLm1pZGlDb250cm9sbGVyc1t0XT1ufXRoaXMuY2hhbm5lbFZpYnJhdG89e3JhdGU6MCxkZXB0aDowLGRlbGF5OjB9LHRoaXMucmFuZG9tUGFuPSExLHRoaXMuc3lzRXhNb2R1bGF0b3JzLnJlc2V0TW9kdWxhdG9ycygpO2xldCBBPXRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmVdO3RoaXMuY3VzdG9tQ29udHJvbGxlcnMuc2V0KHRhKSx0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmUsQSksdGhpcy5yZXNldFBhcmFtZXRlcnMoKX1mdW5jdGlvbiB5bygpe3RoaXMuc2V0QmFua01TQihmQS5nZXREZWZhdWx0QmFuayh0aGlzLmNoYW5uZWxTeXN0ZW0pKSx0aGlzLnNldEJhbmtMU0IoMCksdGhpcy5zZXRHU0RydW1zKCExKSx0aGlzLnNldERydW1zKHRoaXMuY2hhbm5lbE51bWJlciUxNj09PVNlKSx0aGlzLnByb2dyYW1DaGFuZ2UoMCl9dmFyIG5hPW5ldyBTZXQoW1MuYmFua1NlbGVjdCxTLmJhbmtTZWxlY3RMU0IsUy5tYWluVm9sdW1lLFMubWFpblZvbHVtZUxTQixTLnBhbixTLnBhbkxTQixTLnJldmVyYkRlcHRoLFMudHJlbW9sb0RlcHRoLFMuY2hvcnVzRGVwdGgsUy5kZXR1bmVEZXB0aCxTLnBoYXNlckRlcHRoLFMuc291bmRWYXJpYXRpb24sUy5maWx0ZXJSZXNvbmFuY2UsUy5yZWxlYXNlVGltZSxTLmF0dGFja1RpbWUsUy5icmlnaHRuZXNzLFMuZGVjYXlUaW1lLFMudmlicmF0b1JhdGUsUy52aWJyYXRvRGVwdGgsUy52aWJyYXRvRGVsYXksUy5zb3VuZENvbnRyb2xsZXIxMF0pO2Z1bmN0aW9uIGtvKCl7dGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nLmZpbGwoMCksdGhpcy5waXRjaFdoZWVsKDgxOTIpLHRoaXMuY2hhbm5lbFZpYnJhdG89e3JhdGU6MCxkZXB0aDowLGRlbGF5OjB9O2ZvcihsZXQgZT0wO2U8MTI4O2UrKyl7bGV0IEE9V2VbZV07IW5hLmhhcyhlKSYmQSE9PXRoaXMubWlkaUNvbnRyb2xsZXJzW2VdJiYoZT09PVMucG9ydGFtZW50b0NvbnRyb2w/dGhpcy5taWRpQ29udHJvbGxlcnNbZV09bnM6dGhpcy5jb250cm9sbGVyQ2hhbmdlKGUsQT4+NykpfXRoaXMucmVzZXRHZW5lcmF0b3JPdmVycmlkZXMoKSx0aGlzLnJlc2V0R2VuZXJhdG9yT2Zmc2V0cygpfWZ1bmN0aW9uIERvKCl7dGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5JZGxlLHRoaXMubWlkaUNvbnRyb2xsZXJzW1Mubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQl09MTYyNTYsdGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCXT0xNjI1Nix0aGlzLm1pZGlDb250cm9sbGVyc1tTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0JdPTE2MjU2LHRoaXMubWlkaUNvbnRyb2xsZXJzW1MucmVnaXN0ZXJlZFBhcmFtZXRlck1TQl09MTYyNTYsdGhpcy5yZXNldEdlbmVyYXRvck92ZXJyaWRlcygpLHRoaXMucmVzZXRHZW5lcmF0b3JPZmZzZXRzKCl9dmFyIEdlPVdlLnNsaWNlKDAsMTI4KTtmdW5jdGlvbiB3byhlLEE9dm9pZCAwKXtpZighdGhpcy5fbWlkaURhdGEpcmV0dXJuITE7dGhpcy5vbmVUaWNrVG9TZWNvbmRzPTYwLygxMjAqdGhpcy5fbWlkaURhdGEudGltZURpdmlzaW9uKSx0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrP3RoaXMuc2VuZE1JRElSZXNldCgpOih0aGlzLnN5bnRoLnJlc2V0QWxsQ29udHJvbGxlcnMoKSx0aGlzLnN5bnRoLnN0b3BBbGxDaGFubmVscyghMSkpLHRoaXMucGxheWVkVGltZT0wLHRoaXMuZXZlbnRJbmRleGVzPUFycmF5KHRoaXMuX21pZGlEYXRhLnRyYWNrcy5sZW5ndGgpLmZpbGwoMCk7bGV0IHQ9dGhpcy5zeW50aC5taWRpQ2hhbm5lbHMubGVuZ3RoLG49QXJyYXkodCkuZmlsbCg4MTkyKSxzPVtdO2ZvcihsZXQgbz0wO288dDtvKyspcy5wdXNoKHtwcm9ncmFtOi0xLGJhbms6MCxhY3R1YWxCYW5rOjB9KTtsZXQgYT1vPT5vPT09Uy5kYXRhRGVjcmVtZW50fHxvPT09Uy5kYXRhSW5jcmVtZW50fHxvPT09Uy5kYXRhRW50cnlNU0J8fG89PT1TLmRhdGFFbnRyeUxTQnx8bz09PVMucmVnaXN0ZXJlZFBhcmFtZXRlckxTQnx8bz09PVMucmVnaXN0ZXJlZFBhcmFtZXRlck1TQnx8bz09PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQnx8bz09PVMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlck1TQnx8bz09PVMuYmFua1NlbGVjdHx8bz09PVMuYmFua1NlbGVjdExTQnx8bz09PVMucmVzZXRBbGxDb250cm9sbGVycyxyPVtdO2ZvcihsZXQgbz0wO288dDtvKyspci5wdXNoKEFycmF5LmZyb20oR2UpKTtmdW5jdGlvbiBJKG8pe2lmKG5bb109ODE5MixyPy5bb10hPT12b2lkIDApZm9yKGxldCBnPTA7ZzxHZS5sZW5ndGg7ZysrKW5hLmhhcyhnKXx8KHJbb11bZ109R2VbZ10pfWZvcig7Oyl7bGV0IG89dGhpcy5maW5kRmlyc3RFdmVudEluZGV4KCksZz10aGlzLl9taWRpRGF0YS50cmFja3Nbb10sQj1nLmV2ZW50c1t0aGlzLmV2ZW50SW5kZXhlc1tvXV07aWYoQSE9PXZvaWQgMCl7aWYoQi50aWNrcz49QSlicmVha31lbHNlIGlmKHRoaXMucGxheWVkVGltZT49ZSlicmVhaztsZXQgZD1BcyhCLnN0YXR1c0J5dGUpLGg9ZC5jaGFubmVsKyh0aGlzLm1pZGlQb3J0Q2hhbm5lbE9mZnNldHNbZy5wb3J0XXx8MCk7c3dpdGNoKGQuc3RhdHVzKXtjYXNlIE0ubm90ZU9uOnJbaF0/Pz1BcnJheS5mcm9tKEdlKSxyW2hdW1MucG9ydGFtZW50b0NvbnRyb2xdPUIuZGF0YVswXTticmVhaztjYXNlIE0ubm90ZU9mZjpicmVhaztjYXNlIE0ucGl0Y2hXaGVlbDpuW2hdPUIuZGF0YVsxXTw8N3xCLmRhdGFbMF07YnJlYWs7Y2FzZSBNLnByb2dyYW1DaGFuZ2U6e2lmKHRoaXMuX21pZGlEYXRhLmlzTXVsdGlQb3J0JiZnLmNoYW5uZWxzLnNpemU9PT0wKWJyZWFrO2xldCBRPXNbaF07US5wcm9ncmFtPUIuZGF0YVswXSxRLmFjdHVhbEJhbms9US5iYW5rO2JyZWFrfWNhc2UgTS5jb250cm9sbGVyQ2hhbmdlOntpZih0aGlzLl9taWRpRGF0YS5pc011bHRpUG9ydCYmZy5jaGFubmVscy5zaXplPT09MClicmVhaztsZXQgUT1CLmRhdGFbMF07aWYoYShRKSl7bGV0IG09Qi5kYXRhWzFdO2lmKFE9PT1TLmJhbmtTZWxlY3Qpe3NbaF0uYmFuaz1tO2JyZWFrfWVsc2UgUT09PVMucmVzZXRBbGxDb250cm9sbGVycyYmSShoKTt0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrP3RoaXMuc2VuZE1JRElDQyhoLFEsbSk6dGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKGgsUSxtKX1lbHNlIHJbaF0/Pz1BcnJheS5mcm9tKEdlKSxyW2hdW1FdPUIuZGF0YVsxXTticmVha31kZWZhdWx0OnRoaXMucHJvY2Vzc0V2ZW50KEIsbyk7YnJlYWt9dGhpcy5ldmVudEluZGV4ZXNbb10rKyxvPXRoaXMuZmluZEZpcnN0RXZlbnRJbmRleCgpO2xldCBDPXRoaXMuX21pZGlEYXRhLnRyYWNrc1tvXS5ldmVudHNbdGhpcy5ldmVudEluZGV4ZXNbb11dO2lmKEM9PT12b2lkIDApcmV0dXJuIHRoaXMuc3RvcCgpLCExO3RoaXMucGxheWVkVGltZSs9dGhpcy5vbmVUaWNrVG9TZWNvbmRzKihDLnRpY2tzLUIudGlja3MpfWlmKHRoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2spe2ZvcihsZXQgbz0wO288dDtvKyspaWYobltvXSE9PXZvaWQgMCYmdGhpcy5zZW5kTUlESVBpdGNoV2hlZWwobyxuW29dPj43LG5bb10mMTI3KSxyW29dIT09dm9pZCAwJiZyW29dLmZvckVhY2goKGcsQik9PntnIT09R2VbQl0mJiFhKEIpJiZ0aGlzLnNlbmRNSURJQ0MobyxCLGcpfSksc1tvXS5wcm9ncmFtPj0wJiZzW29dLmFjdHVhbEJhbms+PTApe2xldCBnPXNbb10uYWN0dWFsQmFuazt0aGlzLnNlbmRNSURJQ0MobyxTLmJhbmtTZWxlY3QsZyksdGhpcy5zZW5kTUlESVByb2dyYW1DaGFuZ2UobyxzW29dLnByb2dyYW0pfX1lbHNlIGZvcihsZXQgbz0wO288dDtvKyspaWYobltvXSE9PXZvaWQgMCYmdGhpcy5zeW50aC5waXRjaFdoZWVsKG8sbltvXSkscltvXSE9PXZvaWQgMCYmcltvXS5mb3JFYWNoKChnLEIpPT57ZyE9PUdlW0JdJiYhYShCKSYmdGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG8sQixnKX0pLHNbb10uYWN0dWFsQmFuaz49MCl7bGV0IGc9c1tvXTtnLnByb2dyYW0hPT0tMT8odGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG8sUy5iYW5rU2VsZWN0LGcuYWN0dWFsQmFuayksdGhpcy5zeW50aC5wcm9ncmFtQ2hhbmdlKG8sZy5wcm9ncmFtKSk6dGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKG8sUy5iYW5rU2VsZWN0LGcuYmFuayl9cmV0dXJuIHRoaXMucGF1c2VkJiYodGhpcy5wYXVzZWRUaW1lPXRoaXMucGxheWVkVGltZSksITB9dmFyIHNhPWNsYXNze3NvbmdzPVtdO3NodWZmbGVkU29uZ0luZGV4ZXM9W107c3ludGg7ZXh0ZXJuYWxNSURJUGxheWJhY2s9ITE7bG9vcENvdW50PTA7c2tpcFRvRmlyc3ROb3RlT249ITA7b25FdmVudENhbGw7cHJvY2Vzc1RpY2s9UW8uYmluZCh0aGlzKTtmaXJzdE5vdGVUaW1lPTA7b25lVGlja1RvU2Vjb25kcz0wO2V2ZW50SW5kZXhlcz1bXTtwbGF5ZWRUaW1lPTA7cGF1c2VkVGltZT0tMTthYnNvbHV0ZVN0YXJ0VGltZT0wO3BsYXlpbmdOb3Rlcz1bXTtjdXJyZW50TUlESVBvcnRzPVtdO21pZGlQb3J0Q2hhbm5lbE9mZnNldD0wO21pZGlQb3J0Q2hhbm5lbE9mZnNldHM9e307YXNzaWduTUlESVBvcnQ9dW8uYmluZCh0aGlzKTtsb2FkTmV3U2VxdWVuY2U9Zm8uYmluZCh0aGlzKTtwcm9jZXNzRXZlbnQ9bG8uYmluZCh0aGlzKTtzZXRUaW1lVG89d28uYmluZCh0aGlzKTtjb25zdHJ1Y3RvcihlKXt0aGlzLnN5bnRoPWUsdGhpcy5hYnNvbHV0ZVN0YXJ0VGltZT10aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWV9X21pZGlEYXRhO2dldCBtaWRpRGF0YSgpe3JldHVybiB0aGlzLl9taWRpRGF0YX1nZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fbWlkaURhdGE/LmR1cmF0aW9uPz8wfV9zb25nSW5kZXg9MDtnZXQgc29uZ0luZGV4KCl7cmV0dXJuIHRoaXMuX3NvbmdJbmRleH1zZXQgc29uZ0luZGV4KGUpe3RoaXMuX3NvbmdJbmRleD1lLHRoaXMuX3NvbmdJbmRleD1NYXRoLm1heCgwLGUldGhpcy5zb25ncy5sZW5ndGgpLHRoaXMubG9hZEN1cnJlbnRTb25nKCl9X3NodWZmbGVNb2RlPSExO2dldCBzaHVmZmxlTW9kZSgpe3JldHVybiB0aGlzLl9zaHVmZmxlTW9kZX1zZXQgc2h1ZmZsZU1vZGUoZSl7dGhpcy5fc2h1ZmZsZU1vZGU9ZSxlPyh0aGlzLnNodWZmbGVTb25nSW5kZXhlcygpLHRoaXMuX3NvbmdJbmRleD0wLHRoaXMubG9hZEN1cnJlbnRTb25nKCkpOnRoaXMuX3NvbmdJbmRleD10aGlzLnNodWZmbGVkU29uZ0luZGV4ZXNbdGhpcy5fc29uZ0luZGV4XX1fcGxheWJhY2tSYXRlPTE7Z2V0IHBsYXliYWNrUmF0ZSgpe3JldHVybiB0aGlzLl9wbGF5YmFja1JhdGV9c2V0IHBsYXliYWNrUmF0ZShlKXtsZXQgQT10aGlzLmN1cnJlbnRUaW1lO3RoaXMuX3BsYXliYWNrUmF0ZT1lLHRoaXMuY3VycmVudFRpbWU9QX1nZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5wYXVzZWRUaW1lIT09dm9pZCAwP3RoaXMucGF1c2VkVGltZToodGhpcy5zeW50aC5jdXJyZW50U3ludGhUaW1lLXRoaXMuYWJzb2x1dGVTdGFydFRpbWUpKnRoaXMuX3BsYXliYWNrUmF0ZX1zZXQgY3VycmVudFRpbWUoZSl7aWYodGhpcy5fbWlkaURhdGEpaWYodGhpcy5wYXVzZWQmJih0aGlzLnBhdXNlZFRpbWU9ZSksZT50aGlzLl9taWRpRGF0YS5kdXJhdGlvbnx8ZTwwKXRoaXMuc2tpcFRvRmlyc3ROb3RlT24/dGhpcy5zZXRUaW1lVGlja3ModGhpcy5fbWlkaURhdGEuZmlyc3ROb3RlT24tMSk6dGhpcy5zZXRUaW1lVGlja3MoMCk7ZWxzZSBpZih0aGlzLnNraXBUb0ZpcnN0Tm90ZU9uJiZlPHRoaXMuZmlyc3ROb3RlVGltZSl7dGhpcy5zZXRUaW1lVGlja3ModGhpcy5fbWlkaURhdGEuZmlyc3ROb3RlT24tMSk7cmV0dXJufWVsc2V7aWYodGhpcy5wbGF5aW5nTm90ZXM9W10sdGhpcy5jYWxsRXZlbnQoInRpbWVDaGFuZ2UiLHtuZXdUaW1lOmV9KSx0aGlzLl9taWRpRGF0YS5kdXJhdGlvbj09PTApe3NBKCJObyBkdXJhdGlvbiEiKSx0aGlzLmNhbGxFdmVudCgicGF1c2UiLHtpc0ZpbmlzaGVkOiEwfSk7cmV0dXJufXRoaXMuc2V0VGltZVRvKGUpLHRoaXMucmVjYWxjdWxhdGVTdGFydFRpbWUoZSl9fWdldCBwYXVzZWQoKXtyZXR1cm4gdGhpcy5wYXVzZWRUaW1lIT09dm9pZCAwfXBsYXkoKXtpZighdGhpcy5fbWlkaURhdGEpdGhyb3cgbmV3IEVycm9yKCJObyBzb25ncyBsb2FkZWQgaW4gdGhlIHNlcXVlbmNlciEiKTt0aGlzLmN1cnJlbnRUaW1lPj10aGlzLl9taWRpRGF0YS5kdXJhdGlvbiYmKHRoaXMuY3VycmVudFRpbWU9MCksdGhpcy5wYXVzZWQmJnRoaXMucmVjYWxjdWxhdGVTdGFydFRpbWUodGhpcy5wYXVzZWRUaW1lPz8wKSx0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrfHx0aGlzLnBsYXlpbmdOb3Rlcy5mb3JFYWNoKGU9Pnt0aGlzLnN5bnRoLm5vdGVPbihlLmNoYW5uZWwsZS5taWRpTm90ZSxlLnZlbG9jaXR5KX0pLHRoaXMucGF1c2VkVGltZT12b2lkIDB9cGF1c2UoKXt0aGlzLnBhdXNlSW50ZXJuYWwoITEpfWxvYWROZXdTb25nTGlzdChlKXt0aGlzLnNvbmdzPWUsISh0aGlzLnNvbmdzLmxlbmd0aDwxKSYmKHRoaXMuX3NvbmdJbmRleD0wLHRoaXMuc2h1ZmZsZVNvbmdJbmRleGVzKCksdGhpcy5jYWxsRXZlbnQoInNvbmdMaXN0Q2hhbmdlIix7bmV3U29uZ0xpc3Q6Wy4uLnRoaXMuc29uZ3NdfSksdGhpcy5sb2FkQ3VycmVudFNvbmcoKSl9Y2FsbEV2ZW50KGUsQSl7dGhpcz8ub25FdmVudENhbGw/Lih7dHlwZTplLGRhdGE6QX0pfXBhdXNlSW50ZXJuYWwoZSl7dGhpcy5wYXVzZWR8fCh0aGlzLnN0b3AoKSx0aGlzLmNhbGxFdmVudCgicGF1c2UiLHtpc0ZpbmlzaGVkOmV9KSl9c29uZ0lzRmluaXNoZWQoKXtpZih0aGlzLnNvbmdzLmxlbmd0aD09PTEpe3RoaXMucGF1c2VJbnRlcm5hbCghMCk7cmV0dXJufXRoaXMuX3NvbmdJbmRleCsrLHRoaXMuX3NvbmdJbmRleCU9dGhpcy5zb25ncy5sZW5ndGgsdGhpcy5sb2FkQ3VycmVudFNvbmcoKX1zdG9wKCl7dGhpcy5wYXVzZWRUaW1lPXRoaXMuY3VycmVudFRpbWU7Zm9yKGxldCBlPTA7ZTwxNjtlKyspdGhpcy5zeW50aC5jb250cm9sbGVyQ2hhbmdlKGUsUy5zdXN0YWluUGVkYWwsMCk7aWYodGhpcy5zeW50aC5zdG9wQWxsQ2hhbm5lbHMoKSx0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrKXtmb3IobGV0IGUgb2YgdGhpcy5wbGF5aW5nTm90ZXMpdGhpcy5zZW5kTUlESU1lc3NhZ2UoW00ubm90ZU9mZnxlLmNoYW5uZWwlMTYsZS5taWRpTm90ZV0pO2ZvcihsZXQgZT0wO2U8Um47ZSsrKXRoaXMuc2VuZE1JRElDQyhlLFMuYWxsTm90ZXNPZmYsMCl9fWZpbmRGaXJzdEV2ZW50SW5kZXgoKXtsZXQgZT0wLEE9MS8wO3JldHVybiB0aGlzLl9taWRpRGF0YS50cmFja3MuZm9yRWFjaCgodCxuKT0+e2lmKHRoaXMuZXZlbnRJbmRleGVzW25dPj10LmV2ZW50cy5sZW5ndGgpcmV0dXJuO2xldCBzPXQuZXZlbnRzW3RoaXMuZXZlbnRJbmRleGVzW25dXTtzLnRpY2tzPEEmJihlPW4sQT1zLnRpY2tzKX0pLGV9YWRkTmV3TUlESVBvcnQoKXtmb3IobGV0IGU9MDtlPDE2O2UrKyl0aGlzLnN5bnRoLmNyZWF0ZU1JRElDaGFubmVsKCl9c2VuZE1JRElNZXNzYWdlKGUpe3RoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2smJnRoaXMuY2FsbEV2ZW50KCJtaWRpTWVzc2FnZSIse21lc3NhZ2U6ZX0pfXNlbmRNSURJUmVzZXQoKXt0aGlzLnNlbmRNSURJTWVzc2FnZShbTS5yZXNldF0pO2ZvcihsZXQgZT0wO2U8Um47ZSsrKXRoaXMuc2VuZE1JRElNZXNzYWdlKFtNLmNvbnRyb2xsZXJDaGFuZ2V8ZSxTLmFsbFNvdW5kT2ZmLDBdKSx0aGlzLnNlbmRNSURJTWVzc2FnZShbTS5jb250cm9sbGVyQ2hhbmdlfGUsUy5yZXNldEFsbENvbnRyb2xsZXJzLDBdKX1sb2FkQ3VycmVudFNvbmcoKXtsZXQgZT10aGlzLl9zb25nSW5kZXg7dGhpcy5fc2h1ZmZsZU1vZGUmJihlPXRoaXMuc2h1ZmZsZWRTb25nSW5kZXhlc1t0aGlzLl9zb25nSW5kZXhdKSx0aGlzLmxvYWROZXdTZXF1ZW5jZSh0aGlzLnNvbmdzW2VdKX1zaHVmZmxlU29uZ0luZGV4ZXMoKXtsZXQgZT10aGlzLnNvbmdzLm1hcCgoQSx0KT0+dCk7Zm9yKHRoaXMuc2h1ZmZsZWRTb25nSW5kZXhlcz1bXTtlLmxlbmd0aD4wOyl7bGV0IEE9ZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqZS5sZW5ndGgpXTt0aGlzLnNodWZmbGVkU29uZ0luZGV4ZXMucHVzaChBKSxlLnNwbGljZShlLmluZGV4T2YoQSksMSl9fXNlbmRNSURJQ0MoZSxBLHQpe2UlPTE2LHRoaXMuZXh0ZXJuYWxNSURJUGxheWJhY2smJnRoaXMuc2VuZE1JRElNZXNzYWdlKFtNLmNvbnRyb2xsZXJDaGFuZ2V8ZSxBLHRdKX1zZW5kTUlESVByb2dyYW1DaGFuZ2UoZSxBKXtlJT0xNix0aGlzLmV4dGVybmFsTUlESVBsYXliYWNrJiZ0aGlzLnNlbmRNSURJTWVzc2FnZShbTS5wcm9ncmFtQ2hhbmdlfGUsQV0pfXNlbmRNSURJUGl0Y2hXaGVlbChlLEEsdCl7ZSU9MTYsdGhpcy5leHRlcm5hbE1JRElQbGF5YmFjayYmdGhpcy5zZW5kTUlESU1lc3NhZ2UoW00ucGl0Y2hXaGVlbHxlLHQsQV0pfXNldFRpbWVUaWNrcyhlKXtpZighdGhpcy5fbWlkaURhdGEpcmV0dXJuO3RoaXMucGxheWluZ05vdGVzPVtdO2xldCBBPXRoaXMuX21pZGlEYXRhLm1pZGlUaWNrc1RvU2Vjb25kcyhlKTt0aGlzLmNhbGxFdmVudCgidGltZUNoYW5nZSIse25ld1RpbWU6QX0pO2xldCB0PXRoaXMuc2V0VGltZVRvKDAsZSk7dGhpcy5yZWNhbGN1bGF0ZVN0YXJ0VGltZSh0aGlzLnBsYXllZFRpbWUpfXJlY2FsY3VsYXRlU3RhcnRUaW1lKGUpe3RoaXMuYWJzb2x1dGVTdGFydFRpbWU9dGhpcy5zeW50aC5jdXJyZW50U3ludGhUaW1lLWUvdGhpcy5fcGxheWJhY2tSYXRlfX0sbHQ9bHQhPT12b2lkIDA/bHQ6e30sa3M9ITEsYWE7bHQuaXNJbml0aWFsaXplZD1uZXcgUHJvbWlzZShlPT5hYT1lKTt2YXIgRm89ZnVuY3Rpb24oZSl7dmFyIEEsdCxuLHMsYSxyLEksbz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLGc9IiIsQj0wO2U9ZS5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywiIik7ZG8gcz1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSksYT1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSkscj1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSksST1vLmluZGV4T2YoZS5jaGFyQXQoQisrKSksQT1zPDwyfGE+PjQsdD0oMTUmYSk8PDR8cj4+MixuPSgzJnIpPDw2fEksZys9U3RyaW5nLmZyb21DaGFyQ29kZShBKSxyIT09NjQmJihnKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpKSxJIT09NjQmJihnKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4pKTt3aGlsZShCPGUubGVuZ3RoKTtyZXR1cm4gZ307KGZ1bmN0aW9uKCl7dmFyIGUsQSx0LG4scyxhLHIsSSxvLGcsQixkLGgsQyxRLG0seSxGLGssRCx2LEwsRT1FIT09dm9pZCAwP0U6e307RS53YXNtQmluYXJ5PVVpbnQ4QXJyYXkuZnJvbShGbygiQUdGemJRRUFBQUFCcFFFWVlBSi9md0YvWUFGL0FHQUFBWDlnQkg5L2YzOEFZQUFBWUFOL2YzOEJmMkFCZndGL1lBSi9md0JnQm45L2YzOS9md0YvWUFSL2YzOS9BWDlnQlg5L2YzOS9BWDlnQjM5L2YzOS9mMzhCZjJBR2YzOS9mMzkvQUdBSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBZC9mMzkvZjM5L0FHQURmMzkvQUdBQmZ3RjlZQUY5QVgxZ0FueC9BWHhnQW54L0FYOWdBM3g4ZndGOFlBSjhmQUY4WUFGOEFYd0NuZ0lQQTJWdWRnWnRaVzF2Y25rQ0FJQUNBMlZ1ZGdWMFlXSnNaUUZ3QVFRRUEyVnVkZ2wwWVdKc1pVSmhjMlVEZndBRFpXNTJEa1JaVGtGTlNVTlVUMUJmVUZSU0EzOEFBMlZ1ZGdoVFZFRkRTMVJQVUFOL0FBTmxibllKVTFSQlEwdGZUVUZZQTM4QUJtZHNiMkpoYkFoSmJtWnBibWwwZVFOOEFBTmxibllGWVdKdmNuUUFBUU5sYm5ZTlpXNXNZWEpuWlUxbGJXOXllUUFDQTJWdWRnNW5aWFJVYjNSaGJFMWxiVzl5ZVFBQ0EyVnVkaGRoWW05eWRFOXVRMkZ1Ym05MFIzSnZkMDFsYlc5eWVRQUNBMlZ1ZGc1ZlgxOWhjM05sY25SZlptRnBiQUFEQTJWdWRndGZYMTl6WlhSRmNuSk9id0FCQTJWdWRnWmZZV0p2Y25RQUJBTmxibllXWDJWdGMyTnlhWEIwWlc1ZmJXVnRZM0I1WDJKcFp3QUZBM2QyQmdZQ0FRY0hBUUlCQVFjQkNBY0ZBQWtHQ1FvSEJnWUdCZ0VGQmdJQkJnWUtBQWdMQUFZR0JnWUdCZ1lCQUFvTURBTUdCUUFOQ0FvSkFBd09EQThPQVFBR0JnY0VBQkFKRUFFUkFBQURCUXdBQUFNSEJ4SUdBUUFBQndJRkV3TU9CdzhIQmdZUUZBb1ZFeFlYRnhjWEZnUUZCUVlGQUFZa0IzOEJJd0VMZndFakFndC9BU01EQzM4QlFRQUxmd0ZCQUF0OEFTTUVDMzhCUVFBTEI5TUNGUkJmWDJkeWIzZFhZWE50VFdWdGIzSjVBQWdSWDE5ZlpYSnlibTlmYkc5allYUnBiMjRBWXdWZlpuSmxaUUJmQjE5dFlXeHNiMk1BWGdkZmJXVnRZM0I1QUhrSFgyMWxiWE5sZEFCNkJWOXpZbkpyQUhzWFgzTjBZbDkyYjNKaWFYTmZhbk5mWTJoaGJtNWxiSE1BSmhSZmMzUmlYM1p2Y21KcGMxOXFjMTlqYkc5elpRQWxGVjl6ZEdKZmRtOXlZbWx6WDJwelgyUmxZMjlrWlFBb0UxOXpkR0pmZG05eVltbHpYMnB6WDI5d1pXNEFKQnBmYzNSaVgzWnZjbUpwYzE5cWMxOXpZVzF3YkdWZmNtRjBaUUFuQzJSNWJrTmhiR3hmYVdscEFId1RaWE4wWVdKc2FYTm9VM1JoWTJ0VGNHRmpaUUFNQzJkbGRGUmxiWEJTWlhRd0FBOExjblZ1VUc5emRGTmxkSE1BZUF0elpYUlVaVzF3VW1WME1BQU9DSE5sZEZSb2NtVjNBQTBLYzNSaFkydEJiR3h2WXdBSkRITjBZV05yVW1WemRHOXlaUUFMQ1hOMFlXTnJVMkYyWlFBS0NRb0JBQ01BQ3dSOVZGbDlDc2IyQTNZR0FDQUFRQUFMR3dFQmZ5TUdJUUVqQmlBQWFpUUdJd1pCRDJwQmNIRWtCaUFCQ3dRQUl3WUxCZ0FnQUNRR0N3b0FJQUFrQmlBQkpBY0xFQUFqQ0VVRVFDQUFKQWdnQVNRSkN3c0dBQ0FBSkFzTEJBQWpDd3NSQUNBQUJFQWdBQkFSSUFBZ0FCQVNDd3Z2QndFS2Z5QUFRWUFEYWlFSElBY29BZ0FoQlFKQUlBVUVRQ0FBUWZ3QmFpRUVJQVFvQWdBaEFTQUJRUUJLQkVBZ0FFSHdBR29oQ0FOQUlBVWdBa0VZYkdwQkVHb2hDU0FKS0FJQUlRRWdBUVJBSUFnb0FnQWhBeUFGSUFKQkdHeHFRUTFxSVFvZ0NpMEFBQ0VHSUFaQi93RnhJUVlnQXlBR1FiQVFiR3BCQkdvaEF5QURLQUlBSVFNZ0EwRUFTZ1JBUVFBaEF3TkFJQUVnQTBFQ2RHb2hBU0FCS0FJQUlRRWdBQ0FCRUJJZ0EwRUJhaUVESUFnb0FnQWhBU0FLTFFBQUlRWWdCa0gvQVhFaEJpQUJJQVpCc0JCc2FrRUVhaUVCSUFFb0FnQWhCaUFKS0FJQUlRRWdBeUFHU0EwQUN3c2dBQ0FCRUJJTElBVWdBa0VZYkdwQkZHb2hBU0FCS0FJQUlRRWdBQ0FCRUJJZ0FrRUJhaUVDSUFRb0FnQWhBU0FDSUFGT0RRTWdCeWdDQUNFRkRBQUFDd0FMQ3dzZ0FFSHdBR29oQXlBREtBSUFJUUVnQVFSQUlBQkI3QUJxSVFVZ0JTZ0NBQ0VDSUFKQkFFb0VRRUVBSVFJRFFBSkFJQUVnQWtHd0VHeHFRUWhxSVFRZ0JDZ0NBQ0VFSUFBZ0JCQVNJQUVnQWtHd0VHeHFRUnhxSVFRZ0JDZ0NBQ0VFSUFBZ0JCQVNJQUVnQWtHd0VHeHFRU0JxSVFRZ0JDZ0NBQ0VFSUFBZ0JCQVNJQUVnQWtHd0VHeHFRYVFRYWlFRUlBUW9BZ0FoQkNBQUlBUVFFaUFCSUFKQnNCQnNha0dvRUdvaEFTQUJLQUlBSVFFZ0FVVWhCQ0FCUVh4cUlRRkJBQ0FCSUFRYklRRWdBQ0FCRUJJZ0FrRUJhaUVDSUFVb0FnQWhBU0FDSUFGT0RRQWdBeWdDQUNFQkRBRUxDeUFES0FJQUlRRUxJQUFnQVJBU0N5QUFRZmdCYWlFQklBRW9BZ0FoQVNBQUlBRVFFaUFIS0FJQUlRRWdBQ0FCRUJJZ0FFR0lBMm9oQXlBREtBSUFJUUVnQVFSQUlBQkJoQU5xSVFVZ0JTZ0NBQ0VDSUFKQkFFb0VRRUVBSVFJRFFDQUJJQUpCS0d4cVFRUnFJUUVnQVNnQ0FDRUJJQUFnQVJBU0lBSkJBV29oQWlBRktBSUFJUWNnQXlnQ0FDRUJJQUlnQjBnTkFBc0xJQUFnQVJBU0N5QUFRUVJxSVFJZ0FpZ0NBQ0VCSUFGQkFFb0VRRUVBSVFFRFFDQUFRWlFHYWlBQlFRSjBhaUVESUFNb0FnQWhBeUFBSUFNUUVpQUFRWlFIYWlBQlFRSjBhaUVESUFNb0FnQWhBeUFBSUFNUUVpQUFRZGdIYWlBQlFRSjBhaUVESUFNb0FnQWhBeUFBSUFNUUVpQUJRUUZxSVFFZ0FpZ0NBQ0VESUFFZ0EwZ2hBeUFCUVJCSklRVWdCU0FEY1EwQUN3dEJBQ0VCQTBBZ0FFR2dDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFR29DR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFR3dDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFRzRDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FFSEFDR29nQVVFQ2RHb2hBaUFDS0FJQUlRSWdBQ0FDRUJJZ0FVRUJhaUVCSUFGQkFrY05BQXNMR3dBZ0FFSEVBR29oQUNBQUtBSUFJUUFnQUVVRVFDQUJFRjhMQzN3QkFYOGdBRUhVQjJvaEFTQUJRUUEyQWdBZ0FFR0FDMm9oQVNBQlFRQTJBZ0FnQUVINENtb2hBU0FCUVFBMkFnQWdBRUdjQ0dvaEFTQUJRUUEyQWdBZ0FFSFZDbW9oQVNBQlFRQTZBQUFnQUVIOENtb2hBU0FCUVFBMkFnQWdBRUhVQzJvaEFTQUJRUUEyQWdBZ0FFSFlDMm9oQUNBQVFRQTJBZ0FMOEFRQkIzOGpCaUVMSXdaQkVHb2tCaUFMUVFocUlRY2dDMEVFYWlFS0lBc2hDQ0FBUVNScUlRWWdCaXdBQUNFR0FuOGdCZ1IvSUFCQmdBdHFJUVlnQmlnQ0FDRUdJQVpCZjBvRVFDQUZRUUEyQWdBZ0FDQUJJQUlRRmd3Q0N5QUFRUlJxSVFZZ0JpQUJOZ0lBSUFFZ0Ftb2hBaUFBUVJ4cUlRa2dDU0FDTmdJQUlBQkIyQUJxSVFJZ0FrRUFOZ0lBSUFCQkFCQVhJUWtnQ1VVRVFDQUZRUUEyQWdCQkFBd0NDeUFBSUFjZ0NDQUtFQmdoQ1NBSkJFQWdCeWdDQUNFQ0lBZ29BZ0FoQ1NBS0tBSUFJUWdnQUNBQ0lBa2dDQkFhSVFvZ0J5QUtOZ0lBSUFCQkJHb2hBaUFDS0FJQUlRZ2dDRUVBU2dSQVFRQWhBZ05BSUFCQmxBWnFJQUpCQW5ScUlRY2dCeWdDQUNFSElBY2dDVUVDZEdvaEJ5QUFRZFFHYWlBQ1FRSjBhaUVNSUF3Z0J6WUNBQ0FDUVFGcUlRSWdBaUFJU0EwQUN3c2dBd1JBSUFNZ0NEWUNBQXNnQlNBS05nSUFJQUJCMUFacUlRQWdCQ0FBTmdJQUlBWW9BZ0FoQUNBQUlBRnJEQUlMQWtBQ1FBSkFBa0FDUUNBQ0tBSUFJZ05CSUdzT0JBRUNBZ0FDQ3lBQ1FRQTJBZ0FnQUVIVUFHb2hBaUFBRUJraEF3SkFJQU5CZjBjRVFBTkFJQUlvQWdBaEF5QUREUUlnQUJBWklRTWdBMEYvUncwQUN3c0xJQVZCQURZQ0FDQUdLQUlBSVFBZ0FDQUJhd3dGQ3d3QkN3d0JDeUFBUWRRSGFpRUVJQVFvQWdBaEJDQUVSUVJBSUFKQkFEWUNBQ0FBUWRRQWFpRUNJQUFRR1NFREFrQWdBMEYvUndSQUEwQWdBaWdDQUNFRElBTU5BaUFBRUJraEF5QURRWDlIRFFBTEN3c2dCVUVBTmdJQUlBWW9BZ0FoQUNBQUlBRnJEQU1MQ3lBQUVCTWdBaUFETmdJQUlBVkJBRFlDQUVFQkJTQUFRUUlRRlVFQUN3c2hBQ0FMSkFZZ0FBc0pBQ0FBSUFFMkFsZ0xwZ29CREg4Z0FFR0FDMm9oQ2lBS0tBSUFJUVlDUUFKQUFrQWdCa0VBVEEwQUEwQWdBQ0FFUVJSc2FrR1FDMm9oQXlBRFFRQTJBZ0FnQkVFQmFpRUVJQVFnQmtnTkFBc2dCa0VFU0EwQURBRUxJQUpCQkVnRVFFRUFJUUlGSUFKQmZXb2hCa0VBSVFJRFFBSkFJQUVnQW1vaEJDQUVMQUFBSVFNZ0EwSFBBRVlFUUNBRVFjQVRRUVFRWkNFRUlBUkZCRUFnQWtFYWFpRUpJQWtnQms0TkFpQUNRUnRxSVFjZ0FTQUphaUVMSUFzc0FBQWhBeUFEUWY4QmNTRUZJQWNnQldvaEJDQUVJQVpPRFFJZ0JVRWJhaUVFSUFNRVFFRUFJUU1EUUNBRElBZHFJUWdnQVNBSWFpRUlJQWd0QUFBaENDQUlRZjhCY1NFSUlBUWdDR29oQkNBRFFRRnFJUU1nQXlBRlJ3MEFDeUFFSVFNRklBUWhBd3RCQUNFRVFRQWhCUU5BSUFVZ0Ftb2hCeUFCSUFkcUlRY2dCeXdBQUNFSElBUWdCeEFwSVFRZ0JVRUJhaUVGSUFWQkZrY05BQXRCRmlFRkEwQWdCRUVBRUNraEJDQUZRUUZxSVFVZ0JVRWFSdzBBQ3lBS0tBSUFJUVVnQlVFQmFpRUhJQW9nQnpZQ0FDQURRV1pxSVFNZ0FDQUZRUlJzYWtHSUMyb2hDQ0FJSUFNMkFnQWdBQ0FGUVJSc2FrR01DMm9oQXlBRElBUTJBZ0FnQWtFV2FpRUVJQUVnQkdvaEJDQUVMUUFBSVFRZ0JFSC9BWEVoQkNBQ1FSZHFJUU1nQVNBRGFpRURJQU10QUFBaEF5QURRZjhCY1NFRElBTkJDSFFoQXlBRElBUnlJUVFnQWtFWWFpRURJQUVnQTJvaEF5QURMUUFBSVFNZ0EwSC9BWEVoQXlBRFFSQjBJUU1nQkNBRGNpRUVJQUpCR1dvaEF5QUJJQU5xSVFNZ0F5MEFBQ0VESUFOQi93RnhJUU1nQTBFWWRDRURJQVFnQTNJaEJDQUFRWVFMYWlBRlFSUnNhaUVESUFNZ0JEWUNBQ0FMTFFBQUlRUWdCRUgvQVhFaEJDQUpJQVJxSVFRZ0FTQUVhaUVFSUFRc0FBQWhCQ0FFUVg5R0JIOUJmd1VnQWtFR2FpRUVJQUVnQkdvaEJDQUVMUUFBSVFRZ0JFSC9BWEVoQkNBQ1FRZHFJUU1nQVNBRGFpRURJQU10QUFBaEF5QURRZjhCY1NFRElBTkJDSFFoQXlBRElBUnlJUVFnQWtFSWFpRURJQUVnQTJvaEF5QURMUUFBSVFNZ0EwSC9BWEVoQXlBRFFSQjBJUU1nQkNBRGNpRUVJQUpCQ1dvaEF5QUJJQU5xSVFNZ0F5MEFBQ0VESUFOQi93RnhJUU1nQTBFWWRDRURJQVFnQTNJTElRUWdBQ0FGUVJSc2FrR1VDMm9oQXlBRElBUTJBZ0FnQUNBRlFSUnNha0dRQzJvaEJDQUVJQWsyQWdBZ0IwRUVSZ1JBSUFZaEFnd0RDd3NMSUFKQkFXb2hBaUFDSUFaSURRRWdCaUVDQ3dzZ0NpZ0NBQ0VHSUFaQkFFb05BUXNNQVFzZ0FpRUVJQVloQWtFQUlRWURRQUpBSUFCQmhBdHFJQVpCRkd4cUlRa2dBQ0FHUVJSc2FrR1FDMm9oQXlBREtBSUFJUXNnQUNBR1FSUnNha0dJQzJvaERTQU5LQUlBSVFnZ0JDQUxheUVESUFnZ0Ewb2hCU0FESUFnZ0JSc2hCeUFBSUFaQkZHeHFRWXdMYWlFT0lBNG9BZ0FoQXlBSFFRQktCRUJCQUNFRkEwQWdCU0FMYWlFTUlBRWdER29oRENBTUxBQUFJUXdnQXlBTUVDa2hBeUFGUVFGcUlRVWdCU0FIU0EwQUN3c2dDQ0FIYXlFRklBMGdCVFlDQUNBT0lBTTJBZ0FnQlFSQUlBWkJBV29oQmdVZ0NTZ0NBQ0VGSUFNZ0JVWU5BU0FDUVg5cUlRSWdDaUFDTmdJQUlBa2dBRUdFQzJvZ0FrRVViR29pQWlrQ0FEY0NBQ0FKSUFJcEFnZzNBZ2dnQ1NBQ0tBSVFOZ0lRSUFvb0FnQWhBZ3NnQmlBQ1NBMEJJQVFoQWd3Q0N3c2dCeUFMYWlFQ0lBcEJmellDQUNBQVFkUUhhaUVCSUFGQkFEWUNBQ0FBUWRnS2FpRUJJQUZCZnpZQ0FDQUFJQVpCRkd4cVFaUUxhaUVCSUFFb0FnQWhBU0FBUVpnSWFpRUVJQVFnQVRZQ0FDQUJRWDlISVFFZ0FFR2NDR29oQUNBQUlBRTJBZ0FMSUFJTGhnVUJDSDhnQUVIWUNtb2hBaUFDS0FJQUlRTWdBRUVVYWlFQ0lBSW9BZ0FoQWdKL0FrQWdBMEYvUmdSL1FRRWhBd3dCQlNBQVFkQUlhaUVFSUFRb0FnQWhCUUpBSUFNZ0JVZ0VRQU5BSUFCQjFBaHFJQU5xSVFRZ0JDd0FBQ0VHSUFaQi93RnhJUVFnQWlBRWFpRUNJQVpCZjBjTkFpQURRUUZxSVFNZ0F5QUZTQTBBQ3dzTElBRkJBRWNoQmlBRlFYOXFJUVFnQXlBRVNDRUVJQVlnQkhFRVFDQUFRUlVRRlVFQURBTUxJQUJCSEdvaEJDQUVLQUlBSVFRZ0FpQUVTd1IvSUFCQkFSQVZRUUFGSUFNZ0JVWWhCQ0FEUVg5R0lRTWdCQ0FEY2dSL1FRQWhBd3dEQlVFQkN3c0xEQUVMSUFBb0Fod2hDQ0FBUWRRSGFpRUdJQUZCQUVjaEJDQUNJUUVDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FEUUNBQlFScHFJUVVnQlNBSVR3MEJJQUZCd0JOQkJCQmtJUUlnQWcwQ0lBRkJCR29oQWlBQ0xBQUFJUUlnQWcwRElBTUVRQ0FHS0FJQUlRSWdBZ1JBSUFGQkJXb2hBaUFDTEFBQUlRSWdBa0VCY1NFQ0lBSU5CZ3NGSUFGQkJXb2hBaUFDTEFBQUlRSWdBa0VCY1NFQ0lBSkZEUVlMSUFVc0FBQWhBaUFDUWY4QmNTRUhJQUZCRzJvaENTQUpJQWRxSVFFZ0FTQUlTdzBHQWtBZ0FnUkFRUUFoQWdOQUlBa2dBbW9oQXlBRExBQUFJUVVnQlVIL0FYRWhBeUFCSUFOcUlRRWdCVUYvUncwQ0lBSkJBV29oQWlBQ0lBZEpEUUFMQlVFQUlRSUxDeUFIUVg5cUlRTWdBaUFEU0NFRElBUWdBM0VOQnlBQklBaExEUWhCQVNBQ0lBZEhEUW9hUVFBaEF3d0FBQXNBQ3lBQVFRRVFGVUVBREFnTElBQkJGUkFWUVFBTUJ3c2dBRUVWRUJWQkFBd0dDeUFBUVJVUUZVRUFEQVVMSUFCQkZSQVZRUUFNQkFzZ0FFRUJFQlZCQUF3REN5QUFRUlVRRlVFQURBSUxJQUJCQVJBVkMwRUFDeUVBSUFBTGV3RUZmeU1HSVFVakJrRVFhaVFHSUFWQkNHb2hCaUFGUVFScUlRUWdCU0VISUFBZ0FpQUVJQU1nQlNBR0VDb2hCQ0FFQkg4Z0JpZ0NBQ0VFSUFCQmtBTnFJQVJCQm14cUlRZ2dBaWdDQUNFR0lBTW9BZ0FoQkNBSEtBSUFJUU1nQUNBQklBZ2dCaUFFSUFNZ0FoQXJCVUVBQ3lFQUlBVWtCaUFBQ3hzQkFYOGdBQkF1SVFFZ0FFSG9DbW9oQUNBQVFRQTJBZ0FnQVF2NUF3SU1md045SUFCQjFBZHFJUWtnQ1NnQ0FDRUdJQVlFZnlBQUlBWVFTQ0VMSUFCQkJHb2hCQ0FFS0FJQUlRb2dDa0VBU2dSQUlBWkJBRW9oRENBR1FYOXFJUTBEUUNBTUJFQWdBRUdVQm1vZ0JVRUNkR29vQWdBaERpQUFRWlFIYWlBRlFRSjBhaWdDQUNFUFFRQWhCQU5BSUFRZ0Ftb2hCeUFPSUFkQkFuUnFJUWNnQnlvQ0FDRVFJQXNnQkVFQ2RHb2hDQ0FJS2dJQUlSRWdFQ0FSbENFUUlBOGdCRUVDZEdvaENDQUlLZ0lBSVJFZ0RTQUVheUVJSUFzZ0NFRUNkR29oQ0NBSUtnSUFJUklnRVNBU2xDRVJJQkFnRVpJaEVDQUhJQkE0QWdBZ0JFRUJhaUVFSUFRZ0JrY05BQXNMSUFWQkFXb2hCU0FGSUFwSURRQUxDeUFKS0FJQUJTQUFRUVJxSVFRZ0JDZ0NBQ0VLUVFBTElRc2dBU0FEYXlFSElBa2dCellDQUNBS1FRQktCRUFnQVNBRFNpRUpRUUFoQlFOQUlBa0VRQ0FBUVpRR2FpQUZRUUowYWlnQ0FDRU1JQUJCbEFkcUlBVkJBblJxS0FJQUlRMUJBQ0VHSUFNaEJBTkFJQXdnQkVFQ2RHb2hCQ0FFS0FJQUlRUWdEU0FHUVFKMGFpRU9JQTRnQkRZQ0FDQUdRUUZxSVFZZ0JpQURhaUVFSUFZZ0IwY05BQXNMSUFWQkFXb2hCU0FGSUFwSURRQUxDeUFMUlNFRUlBRWdBMGdoQlNBQklBTWdCUnNoQVNBQklBSnJJUUVnQUVIOENtb2hBQ0FFQkVCQkFDRUJCU0FBS0FJQUlRSWdBaUFCYWlFQ0lBQWdBallDQUFzZ0FRdlJBUUVDZnlNR0lRWWpCa0hnQzJva0JpQUdJUVVnQlNBRUVCd2dCVUVVYWlFRUlBUWdBRFlDQUNBQUlBRnFJUUVnQlVFY2FpRUVJQVFnQVRZQ0FDQUZRU1JxSVFFZ0FVRUJPZ0FBSUFVUUhTRUJJQUVFUUNBRkVCNGhBU0FCQkVBZ0FTQUZRZHdMRUhrYUlBRkJGR29oQkNBRUtBSUFJUVFnQkNBQWF5RUFJQUlnQURZQ0FDQURRUUEyQWdBRklBVVFFVUVBSVFFTEJTQUZRZFFBYWlFQUlBQW9BZ0FoQUNBQVJTRUFJQVZCMkFCcUlRRWdBU2dDQUNFQklBTWdBVUVCSUFBYk5nSUFRUUFoQVFzZ0JpUUdJQUVMclFFQ0FYOEJmaUFBUVFCQjNBc1FlaG9nQVFSQUlBQkJ4QUJxSVFJZ0FTa0NBQ0VESUFJZ0F6Y0NBQ0FBUWNnQWFpRUNJQU5DSUlnaEF5QURweUVCSUFGQkEyb2hBU0FCUVh4eElRRWdBaUFCTmdJQUlBQkIwQUJxSVFJZ0FpQUJOZ0lBQ3lBQVFkUUFhaUVCSUFGQkFEWUNBQ0FBUWRnQWFpRUJJQUZCQURZQ0FDQUFRUlJxSVFFZ0FVRUFOZ0lBSUFCQjhBQnFJUUVnQVVFQU5nSUFJQUJCZ0F0cUlRQWdBRUYvTmdJQUM5Qk5BaU4vQTMwakJpRVpJd1pCZ0FocUpBWWdHVUh3QjJvaEFpQVpJZ3hCN0FkcUlSMGdERUhvQjJvaEhpQUFFREVoQVFKL0lBRUVRQ0FBUWRNS2FpRUJJQUV0QUFBaEFTQUJRZjhCY1NFQklBRkJBbkVoQXlBRFJRUkFJQUJCSWhBVlFRQU1BZ3NnQVVFRWNTRURJQU1FUUNBQVFTSVFGVUVBREFJTElBRkJBWEVoQVNBQkJFQWdBRUVpRUJWQkFBd0NDeUFBUWRBSWFpRUJJQUVvQWdBaEFTQUJRUUZIQkVBZ0FFRWlFQlZCQUF3Q0N5QUFRZFFJYWlFQkFrQUNRQ0FCTEFBQVFSNXJJZ0VFUUNBQlFTSkdCRUFNQWdVTUF3c0FDeUFBRURBaEFTQUJRZjhCY1VFQlJ3UkFJQUJCSWhBVlFRQU1CQXNnQUNBQ1FRWVFJaUVCSUFGRkJFQWdBRUVLRUJWQkFBd0VDeUFDRUVraEFTQUJSUVJBSUFCQkloQVZRUUFNQkFzZ0FCQWpJUUVnQVFSQUlBQkJJaEFWUVFBTUJBc2dBQkF3SVFFZ0FVSC9BWEVoQXlBQVFRUnFJUk1nRXlBRE5nSUFJQUZCL3dGeFJRUkFJQUJCSWhBVlFRQU1CQXNnQVVIL0FYRkJFRW9FUUNBQVFRVVFGVUVBREFRTElBQVFJeUVCSUFBZ0FUWUNBQ0FCUlFSQUlBQkJJaEFWUVFBTUJBc2dBQkFqR2lBQUVDTWFJQUFRSXhvZ0FCQXdJUU1nQTBIL0FYRWhCQ0FFUVE5eElRRWdCRUVFZGlFRVFRRWdBWFFoQlNBQVFlUUFhaUVhSUJvZ0JUWUNBRUVCSUFSMElRVWdBRUhvQUdvaEZDQVVJQVUyQWdBZ0FVRjZhaUVGSUFWQkIwc0VRQ0FBUVJRUUZVRUFEQVFMSUFOQm9IOXFRUmgwUVJoMUlRTWdBMEVBU0FSQUlBQkJGQkFWUVFBTUJBc2dBU0FFU3dSQUlBQkJGQkFWUVFBTUJBc2dBQkF3SVFFZ0FVRUJjU0VCSUFGRkJFQWdBRUVpRUJWQkFBd0VDeUFBRURFaEFVRUFJQUZGRFFNYUlBQVFTaUVCUVFBZ0FVVU5BeG9nQUVIVUNtb2hBd05BSUFBUUx5RUJJQUFnQVJCTElBTkJBRG9BQUNBQkRRQUxJQUFRU2lFQlFRQWdBVVVOQXhvZ0FFRWthaUVCSUFFc0FBQWhBUUpBSUFFRVFDQUFRUUVRRnlFQklBRU5BU0FBUWRnQWFpRUFJQUFvQWdBaEFVRUFJQUZCRlVjTkJSb2dBRUVVTmdJQVFRQU1CUXNMRUV3Z0FCQVpJUUVnQVVFRlJ3UkFJQUJCRkJBVlFRQU1CQXRCQUNFQkEwQWdBQkFaSVFNZ0EwSC9BWEVoQXlBQ0lBRnFJUVFnQkNBRE9nQUFJQUZCQVdvaEFTQUJRUVpIRFFBTElBSVFTU0VCSUFGRkJFQWdBRUVVRUJWQkFBd0VDeUFBUVFnUUxDRUJJQUZCQVdvaEFTQUFRZXdBYWlFTklBMGdBVFlDQUNBQlFiQVFiQ0VCSUFBZ0FSQk5JUUVnQUVId0FHb2hGU0FWSUFFMkFnQWdBVVVFUUNBQVFRTVFGVUVBREFRTElBMG9BZ0FoQWlBQ1FiQVFiQ0VDSUFGQkFDQUNFSG9hSUEwb0FnQWhBUUpBSUFGQkFFb0VRQ0FBUVJCcUlSWURRQUpBSUJVb0FnQWhDaUFLSUFaQnNCQnNhaUVKSUFCQkNCQXNJUUVnQVVIL0FYRWhBU0FCUWNJQVJ3UkFRVDhoQVF3QkN5QUFRUWdRTENFQklBRkIvd0Z4SVFFZ0FVSERBRWNFUUVIQkFDRUJEQUVMSUFCQkNCQXNJUUVnQVVIL0FYRWhBU0FCUWRZQVJ3UkFRY01BSVFFTUFRc2dBRUVJRUN3aEFTQUFRUWdRTENFQ0lBSkJDSFFoQWlBQlFmOEJjU0VCSUFJZ0FYSWhBU0FKSUFFMkFnQWdBRUVJRUN3aEFTQUFRUWdRTENFQ0lBQkJDQkFzSVFNZ0EwRVFkQ0VESUFKQkNIUWhBaUFDUVlEK0EzRWhBaUFCUWY4QmNTRUJJQUlnQVhJaEFTQUJJQU55SVFFZ0NpQUdRYkFRYkdwQkJHb2hEaUFPSUFFMkFnQWdBRUVCRUN3aEFTQUJRUUJISWdNRWYwRUFCU0FBUVFFUUxBc2hBU0FCUWY4QmNTRUNJQW9nQmtHd0VHeHFRUmRxSVJFZ0VTQUNPZ0FBSUFrb0FnQWhCQ0FPS0FJQUlRRWdCRVVFUUNBQkJIOUJ5QUFoQVF3Q0JVRUFDeUVCQ3lBQ1FmOEJjUVJBSUFBZ0FSQThJUUlGSUFBZ0FSQk5JUUlnQ2lBR1FiQVFiR3BCQ0dvaEFTQUJJQUkyQWdBTElBSkZCRUJCelFBaEFRd0JDd0pBSUFNRVFDQUFRUVVRTENFRElBNG9BZ0FoQVNBQlFRQk1CRUJCQUNFRERBSUxRUUFoQkFOQUlBTkJBV29oQlNBQklBUnJJUUVnQVJBdElRRWdBQ0FCRUN3aEFTQUJJQVJxSVFNZ0RpZ0NBQ0VQSUFNZ0Qwb0VRRUhUQUNFQkRBUUxJQUlnQkdvaEJDQUZRZjhCY1NFUElBUWdEeUFCRUhvYUlBNG9BZ0FoQVNBQklBTktCSDhnQXlFRUlBVWhBd3dCQlVFQUN5RURDd1VnRGlnQ0FDRUJJQUZCQUV3RVFFRUFJUU1NQWd0QkFDRURRUUFoQVFOQUlCRXNBQUFoQkFKQUFrQWdCRVVOQUNBQVFRRVFMQ0VFSUFRTkFDQUNJQU5xSVFRZ0JFRi9PZ0FBREFFTElBQkJCUkFzSVFRZ0JFRUJhaUVFSUFSQi93RnhJUVVnQWlBRGFpRVBJQThnQlRvQUFDQUJRUUZxSVFFZ0JFSC9BWEVoQkNBRVFTQkdCRUJCMmdBaEFRd0ZDd3NnQTBFQmFpRURJQTRvQWdBaEJDQURJQVJJRFFBTElBRWhBeUFFSVFFTEN5QVJMQUFBSVFRQ2Z3SkFJQVFFZnlBQlFRSjFJUVFnQXlBRVRnUkFJQllvQWdBaEF5QUJJQU5LQkVBZ0ZpQUJOZ0lBQ3lBQUlBRVFUU0VCSUFvZ0JrR3dFR3hxUVFocUlRTWdBeUFCTmdJQUlBRkZCRUJCNFFBaEFRd0ZDeUFPS0FJQUlRUWdBU0FDSUFRUWVSb2dEaWdDQUNFQklBQWdBaUFCRUU0Z0F5Z0NBQ0VDSUJGQkFEb0FBQ0FPS0FJQUlRUU1BZ3NnQ2lBR1FiQVFiR3BCckJCcUlRUWdCQ0FETmdJQUlBTUVmeUFBSUFNUVRTRUJJQW9nQmtHd0VHeHFRUWhxSVFNZ0F5QUJOZ0lBSUFGRkJFQkI2d0FoQVF3RkN5QUVLQUlBSVFFZ0FVRUNkQ0VCSUFBZ0FSQThJUUVnQ2lBR1FiQVFiR3BCSUdvaEF5QURJQUUyQWdBZ0FVVUVRRUh0QUNFQkRBVUxJQVFvQWdBaEFTQUJRUUowSVFFZ0FDQUJFRHdoQlNBRlJRUkFRZkFBSVFFTUJRc2dEaWdDQUNFQklBUW9BZ0FoRHlBRklRY2dCUVZCQUNFUFFRQWhCMEVBQ3lFRElBOUJBM1FoQlNBRklBRnFJUVVnRmlnQ0FDRVBJQVVnRDAwRVFDQUJJUVVnQkF3REN5QVdJQVUyQWdBZ0FTRUZJQVFGSUFFaEJBd0JDd3dCQ3lBRVFRQktCRUJCQUNFQlFRQWhBd05BSUFJZ0Eyb2hCU0FGTEFBQUlRVWdCVUgvQVhGQkNrb2hEeUFGUVg5SElRVWdEeUFGY1NFRklBVkJBWEVoQlNBQklBVnFJUUVnQTBFQmFpRURJQU1nQkVnTkFBc0ZRUUFoQVFzZ0NpQUdRYkFRYkdwQnJCQnFJUThnRHlBQk5nSUFJQVJCQW5RaEFTQUFJQUVRVFNFQklBb2dCa0d3RUd4cVFTQnFJUU1nQXlBQk5nSUFJQUZGQkVCQjZRQWhBUXdDQzBFQUlRTWdEaWdDQUNFRlFRQWhCeUFQQ3lFQklBa2dBaUFGSUFNUVR5RUVJQVJGQkVCQjlBQWhBUXdCQ3lBQktBSUFJUVFnQkFSQUlBUkJBblFoQkNBRVFRUnFJUVFnQUNBRUVFMGhCQ0FLSUFaQnNCQnNha0drRUdvaEJTQUZJQVEyQWdBZ0JFVUVRRUg1QUNFQkRBSUxJQUVvQWdBaEJDQUVRUUowSVFRZ0JFRUVhaUVFSUFBZ0JCQk5JUVFnQ2lBR1FiQVFiR3BCcUJCcUlRVWdCU0FFTmdJQUlBUkZCRUJCK3dBaEFRd0NDeUFFUVFScUlROGdCU0FQTmdJQUlBUkJmellDQUNBSklBSWdBeEJRQ3lBUkxBQUFJUU1nQXdSQUlBRW9BZ0FoQXlBRFFRSjBJUU1nQUNBSElBTVFUaUFLSUFaQnNCQnNha0VnYWlFRElBTW9BZ0FoQkNBQktBSUFJUVVnQlVFQ2RDRUZJQUFnQkNBRkVFNGdEaWdDQUNFRUlBQWdBaUFFRUU0Z0EwRUFOZ0lBQ3lBSkVGRWdBRUVFRUN3aEFpQUNRZjhCY1NFRElBb2dCa0d3RUd4cVFSVnFJUVVnQlNBRE9nQUFJQUpCL3dGeElRSWdBa0VDU3dSQVFZQUJJUUVNQVFzZ0FnUkFJQUJCSUJBc0lRSWdBaEJTSVNVZ0NpQUdRYkFRYkdwQkRHb2hEeUFQSUNVNEFnQWdBRUVnRUN3aEFpQUNFRkloSlNBS0lBWkJzQkJzYWtFUWFpRWJJQnNnSlRnQ0FDQUFRUVFRTENFQ0lBSkJBV29oQWlBQ1FmOEJjU0VDSUFvZ0JrR3dFR3hxUVJScUlRUWdCQ0FDT2dBQUlBQkJBUkFzSVFJZ0FrSC9BWEVoQWlBS0lBWkJzQkJzYWtFV2FpRWNJQndnQWpvQUFDQUZMQUFBSVFzZ0RpZ0NBQ0VDSUFrb0FnQWhBeUFMUVFGR0JIOGdBaUFERUZNRklBTWdBbXdMSVFJZ0NpQUdRYkFRYkdwQkdHb2hDeUFMSUFJMkFnQWdBa1VFUUVHR0FTRUJEQUlMSUFKQkFYUWhBaUFBSUFJUVBDRVFJQkJGQkVCQmlBRWhBUXdDQ3lBTEtBSUFJUUlnQWtFQVNnUkFRUUFoQWdOQUlBUXRBQUFoQXlBRFFmOEJjU0VESUFBZ0F4QXNJUU1nQTBGL1JnUkFRWXdCSVFFTUJBc2dBMEgvL3dOeElRTWdFQ0FDUVFGMGFpRVhJQmNnQXpzQkFDQUNRUUZxSVFJZ0N5Z0NBQ0VESUFJZ0EwZ05BQXNnQXlFQ0N5QUZMQUFBSVFNQ1FDQURRUUZHQkVBZ0VTd0FBQ0VESUFOQkFFY2lGd1JBSUFFb0FnQWhBeUFEUlFSQUlBSWhBUXdEQ3dVZ0RpZ0NBQ0VEQ3lBS0lBWkJzQkJzYWlBQUlBTkJBblFnQ1NnQ0FHd1FUU0lmTmdJY0lCOUZCRUJCa3dFaEFRd0VDeUFCSUE0Z0Z4c2hBU0FCS0FJQUlRNGdEa0VBU2dSQUlBb2dCa0d3RUd4cVFhZ1FhaUVnSUFrb0FnQWlDa0VBU2lFSlF3QUFBQUFoSlVFQUlRRURRQ0FYQkg4Z0lDZ0NBQ0VDSUFJZ0FVRUNkR29oQWlBQ0tBSUFCU0FCQ3lFRUlBa0VRQ0FMS0FJQUlSZ2dIQ3dBQUVVaElTQUtJQUZzSVNKQkFDRURRUUVoQWdOQUlBUWdBbTRoRWlBU0lCaHdJUklnRUNBU1FRRjBhaUVTSUJJdkFRQWhFaUFTUWYvL0EzR3lJU1FnR3lvQ0FDRW1JQ1lnSkpRaEpDQVBLZ0lBSVNZZ0pDQW1raUVrSUNVZ0pKSWhKQ0FpSUFOcUlSSWdIeUFTUVFKMGFpRVNJQklnSkRnQ0FDQWxJQ1FnSVJzaEpTQURRUUZxSVFNZ0F5QUtTQ0lTQkVCQmZ5QVliaUVqSUFJZ0kwc0VRRUdlQVNFQkRBa0xJQmdnQW13aEFnc2dFZzBBQ3dzZ0FVRUJhaUVCSUFFZ0RrZ05BQXNMSUFWQkFqb0FBQ0FMS0FJQUlRRUZJQUpCQW5RaEFTQUFJQUVRVFNFQ0lBb2dCa0d3RUd4cVFSeHFJUUVnQVNBQ05nSUFJQXNvQWdBaENDQUNSUVJBUWFVQklRRU1CQXNnQ0VFQVRBUkFJQWdoQVF3Q0N5QWNMQUFBUlNFRFF3QUFBQUFoSlVFQUlRRURRQ0FRSUFGQkFYUnFJUVFnQkM4QkFDRUVJQVJCLy84RGNiSWhKQ0FiS2dJQUlTWWdKaUFrbENFa0lBOHFBZ0FoSmlBa0lDYVNJU1FnSlNBa2tpRWtJQUlnQVVFQ2RHb2hCQ0FFSUNRNEFnQWdKU0FrSUFNYklTVWdBVUVCYWlFQklBRWdDRWdOQUFzZ0NDRUJDd3NnQVVFQmRDRUJJQUFnRUNBQkVFNExJQVpCQVdvaEJpQU5LQUlBSVFFZ0JpQUJTQTBCREFNTEN3SkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBVUUvYXc1bkFCWUJGZ0lXRmhZV0F4WVdGaFlFRmhZV0ZoWUZGaFlXRmhZV0JoWVdGaFlXRmdjV0ZoWVdGaFlXQ0JZSkZnb1dGZ3NXRmhZTUZoWVdGZzBXRGhZV0ZoWVBGaFlXRmhZUUZoRVdGaFlTRmhZV0ZoWVdFeFlXRmhZV0ZoWVdGaFlVRmhZV0ZoWVdGUllMSUFCQkZCQVZRUUFNR3dzZ0FFRVVFQlZCQUF3YUN5QUFRUlFRRlVFQURCa0xJQUJCRkJBVlFRQU1HQXNnQUVFREVCVkJBQXdYQ3lBQVFSUVFGVUVBREJZTElBQkJGQkFWUVFBTUZRc2dBRUVERUJWQkFBd1VDeUFBUVFNUUZVRUFEQk1MSUFCQkF4QVZRUUFNRWdzZ0FFRURFQlZCQUF3UkN5QUFRUU1RRlVFQURCQUxJQkVzQUFBaEFTQUJCRUFnQUNBSFFRQVFUZ3NnQUVFVUVCVkJBQXdQQ3lBQVFRTVFGVUVBREE0TElBQkJBeEFWUVFBTURRc2dBRUVVRUJWQkFBd01DeUFBUVJRUUZVRUFEQXNMSUFCQkF4QVZRUUFNQ2dzZ0N5Z0NBQ0VCSUFGQkFYUWhBU0FBSUJBZ0FSQk9JQUJCRkJBVlFRQU1DUXNnQ3lnQ0FDRUJJQUZCQVhRaEFTQUFJQkFnQVJCT0lBQkJBeEFWUVFBTUNBc2dHRUVCZENFQklBQWdFQ0FCRUU0Z0FFRVVFQlZCQUF3SEN5QUlRUUYwSVFFZ0FDQVFJQUVRVGlBQVFRTVFGVUVBREFZTEN3c2dBRUVHRUN3aEFTQUJRUUZxSVFFZ0FVSC9BWEVoQWdKQUlBSUVRRUVBSVFFRFFBSkFJQUJCRUJBc0lRTWdBMFVoQXlBRFJRMEFJQUZCQVdvaEFTQUJJQUpKRFFFTUF3c0xJQUJCRkJBVlFRQU1CUXNMSUFCQkJoQXNJUUVnQVVFQmFpRUJJQUJCOUFCcUlROGdEeUFCTmdJQUlBRkJ2QXhzSVFFZ0FDQUJFRTBoQVNBQVFmZ0JhaUVPSUE0Z0FUWUNBQ0FCUlFSQUlBQkJBeEFWUVFBTUJBc2dEeWdDQUNFQkFuOGdBVUVBU2dSL1FRQWhCRUVBSVFjQ1FBSkFBa0FDUUFKQUFrQURRQ0FBUVJBUUxDRUJJQUZCLy84RGNTRUNJQUJCK0FCcUlBZEJBWFJxSVFNZ0F5QUNPd0VBSUFGQi8vOERjU0VCSUFGQkFVc05BU0FCUlEwQ0lBNG9BZ0FoQlNBQVFRVVFMQ0VCSUFGQi93RnhJUUlnQlNBSFFid01iR29oQ2lBS0lBSTZBQUFnQVVIL0FYRWhBU0FCQkVCQmZ5RUJRUUFoQWdOQUlBQkJCQkFzSVFNZ0EwSC9BWEVoQ0NBRklBZEJ2QXhzYWtFQmFpQUNhaUVHSUFZZ0NEb0FBQ0FEUWY4QmNTRURJQU1nQVVvaENDQURJQUVnQ0JzaEF5QUNRUUZxSVFJZ0NpMEFBQ0VCSUFGQi93RnhJUUVnQWlBQlNRUkFJQU1oQVF3QkN3dEJBQ0VCQTBBZ0FFRURFQ3doQWlBQ1FRRnFJUUlnQWtIL0FYRWhBaUFGSUFkQnZBeHNha0VoYWlBQmFpRUlJQWdnQWpvQUFDQUFRUUlRTENFQ0lBSkIvd0Z4SVFJZ0JTQUhRYndNYkdwQk1Xb2dBV29oQ0NBSUlBSTZBQUFDUUFKQUlBSkIvd0Z4UlEwQUlBQkJDQkFzSVFJZ0FrSC9BWEVoQmlBRklBZEJ2QXhzYWtIQkFHb2dBV29oRUNBUUlBWTZBQUFnQWtIL0FYRWhBaUFOS0FJQUlRWWdBaUFHVGcwSElBZ3NBQUFoQWlBQ1FSOUhEUUFNQVF0QkFDRUNBMEFnQUVFSUVDd2hCaUFHUWYvL0Eyb2hCaUFHUWYvL0EzRWhFQ0FGSUFkQnZBeHNha0hTQUdvZ0FVRUVkR29nQWtFQmRHb2hDU0FKSUJBN0FRQWdCa0VRZENFR0lBWkJFSFVoQmlBTktBSUFJUkFnQmlBUVNDRUdJQVpGRFFnZ0FrRUJhaUVDSUFndEFBQWhCaUFHUWY4QmNTRUdRUUVnQm5RaEJpQUNJQVpJRFFBTEN5QUJRUUZxSVFJZ0FTQURTQVJBSUFJaEFRd0JDd3NMSUFCQkFoQXNJUUVnQVVFQmFpRUJJQUZCL3dGeElRRWdCU0FIUWJ3TWJHcEJ0QXhxSVFJZ0FpQUJPZ0FBSUFCQkJCQXNJUUVnQVVIL0FYRWhBaUFGSUFkQnZBeHNha0cxREdvaEVDQVFJQUk2QUFBZ0JTQUhRYndNYkdwQjBnSnFJUWtnQ1VFQU93RUFJQUZCL3dGeElRRkJBU0FCZENFQklBRkIvLzhEY1NFQklBVWdCMEc4REd4cVFkUUNhaUVDSUFJZ0FUc0JBQ0FGSUFkQnZBeHNha0c0REdvaEJpQUdRUUkyQWdBZ0Npd0FBQ0VCQWtBQ1FDQUJCRUJCQUNFSVFRSWhBd05BSUFVZ0IwRzhER3hxUVFGcUlBaHFJUUlnQWkwQUFDRUNJQUpCL3dGeElRSWdCU0FIUWJ3TWJHcEJJV29nQW1vaEFpQUNMQUFBSVFzZ0N3UkFRUUFoQVFOQUlCQXRBQUFoQXlBRFFmOEJjU0VESUFBZ0F4QXNJUU1nQTBILy93TnhJUXNnQmlnQ0FDRURJQVVnQjBHOERHeHFRZElDYWlBRFFRRjBhaUVSSUJFZ0N6c0JBQ0FEUVFGcUlRTWdCaUFETmdJQUlBRkJBV29oQVNBQ0xRQUFJUXNnQzBIL0FYRWhDeUFCSUF0SkRRQUxJQW9zQUFBaEFnVWdBU0VDQ3lBRElRRWdDRUVCYWlFSUlBSkIvd0Z4SVFNZ0NDQURTUVJBSUFFaEF5QUNJUUVNQVFzTElBRkJBRW9OQVFWQkFpRUJEQUVMREFFTFFRQWhBZ05BSUFVZ0IwRzhER3hxUWRJQ2FpQUNRUUYwYWlFRElBTXVBUUFoQXlBTUlBSkJBblJxSVFnZ0NDQURPd0VBSUFKQi8vOERjU0VESUF3Z0FrRUNkR3BCQW1vaENDQUlJQU03QVFBZ0FrRUJhaUVDSUFJZ0FVZ05BQXNMSUF3Z0FVRUVRUUVRWmlBR0tBSUFJUUVDUUNBQlFRQktCRUJCQUNFQkEwQWdEQ0FCUVFKMGFrRUNhaUVDSUFJdUFRQWhBaUFDUWY4QmNTRUNJQVVnQjBHOERHeHFRY1lHYWlBQmFpRURJQU1nQWpvQUFDQUJRUUZxSVFFZ0JpZ0NBQ0VDSUFFZ0FrZ05BQXNnQWtFQ1RBUkFJQUloQVF3Q0MwRUNJUUVEUUNBSklBRWdIU0FlRUZVZ0hTZ0NBQ0VDSUFKQi93RnhJUUlnQlNBSFFid01iR3BCd0FocUlBRkJBWFJxSVFNZ0F5QUNPZ0FBSUI0b0FnQWhBaUFDUWY4QmNTRUNJQVVnQjBHOERHeHFJQUZCQVhScVFjRUlhaUVESUFNZ0Fqb0FBQ0FCUVFGcUlRRWdCaWdDQUNFQ0lBRWdBa2dOQUFzZ0FpRUJDd3NnQVNBRVNpRUNJQUVnQkNBQ0d5RUVJQWRCQVdvaEJ5QVBLQUlBSVFFZ0J5QUJTQTBBREFVQUN3QUxJQUJCRkJBVlFRQU1DZ3NnRGlnQ0FDRUJJQUJCQ0JBc0lRSWdBa0gvQVhFaEFpQUJJQWRCdkF4c2FpRURJQU1nQWpvQUFDQUFRUkFRTENFQ0lBSkIvLzhEY1NFQ0lBRWdCMEc4REd4cVFRSnFJUU1nQXlBQ093RUFJQUJCRUJBc0lRSWdBa0gvL3dOeElRSWdBU0FIUWJ3TWJHcEJCR29oQXlBRElBSTdBUUFnQUVFR0VDd2hBaUFDUWY4QmNTRUNJQUVnQjBHOERHeHFRUVpxSVFNZ0F5QUNPZ0FBSUFCQkNCQXNJUUlnQWtIL0FYRWhBaUFCSUFkQnZBeHNha0VIYWlFRElBTWdBam9BQUNBQVFRUVFMQ0VDSUFKQkFXb2hBaUFDUWY4QmNTRUVJQUVnQjBHOERHeHFRUWhxSVFNZ0F5QUVPZ0FBSUFKQi93RnhJUUlnQWdSQUlBRWdCMEc4REd4cVFRbHFJUUpCQUNFQkEwQWdBRUVJRUN3aEJ5QUhRZjhCY1NFSElBSWdBV29oQkNBRUlBYzZBQUFnQVVFQmFpRUJJQU10QUFBaEJ5QUhRZjhCY1NFSElBRWdCMGtOQUFzTElBQkJCQkFWUVFBTUNRc2dBRUVVRUJVTUFnc2dBRUVVRUJVTUFRc2dCRUVCZEF3Q0MwRUFEQVVGUVFBTEN5RVFJQUJCQmhBc0lRRWdBVUVCYWlFQklBQkIvQUZxSVFVZ0JTQUJOZ0lBSUFGQkdHd2hBU0FBSUFFUVRTRUJJQUJCZ0FOcUlRNGdEaUFCTmdJQUlBRkZCRUFnQUVFREVCVkJBQXdFQ3lBRktBSUFJUUlnQWtFWWJDRUNJQUZCQUNBQ0VIb2FJQVVvQWdBaEFRSkFJQUZCQUVvRVFFRUFJUWNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBMEFnRGlnQ0FDRUVJQUJCRUJBc0lRRWdBVUgvL3dOeElRSWdBRUdBQW1vZ0IwRUJkR29oQXlBRElBSTdBUUFnQVVILy93TnhJUUVnQVVFQ1N3MEJJQUJCR0JBc0lRSWdCQ0FIUVJoc2FpRUJJQUVnQWpZQ0FDQUFRUmdRTENFQ0lBUWdCMEVZYkdwQkJHb2hBeUFESUFJMkFnQWdBU2dDQUNFQklBSWdBVWtOQWlBQVFSZ1FMQ0VCSUFGQkFXb2hBU0FFSUFkQkdHeHFRUWhxSVFJZ0FpQUJOZ0lBSUFCQkJoQXNJUUVnQVVFQmFpRUJJQUZCL3dGeElRRWdCQ0FIUVJoc2FrRU1haUVJSUFnZ0FUb0FBQ0FBUVFnUUxDRUJJQUZCL3dGeElRSWdCQ0FIUVJoc2FrRU5haUVHSUFZZ0Fqb0FBQ0FCUWY4QmNTRUJJQTBvQWdBaEFpQUJJQUpPRFFNZ0NDd0FBQ0VCSUFFRWYwRUFJUUVEUUNBQVFRTVFMQ0VESUFCQkFSQXNJUUlnQWdSL0lBQkJCUkFzQlVFQUN5RUNJQUpCQTNRaEFpQUNJQU5xSVFJZ0FrSC9BWEVoQWlBTUlBRnFJUU1nQXlBQ09nQUFJQUZCQVdvaEFTQUlMUUFBSVFJZ0FrSC9BWEVoQXlBQklBTkpEUUFMSUFKQi93RnhCVUVBQ3lFQklBRkJCSFFoQVNBQUlBRVFUU0VCSUFRZ0IwRVliR3BCRkdvaENpQUtJQUUyQWdBZ0FVVU5CQ0FJTEFBQUlRSWdBZ1JBUVFBaEFnTkFJQXdnQW1vdEFBQWhDMEVBSVFNRFFFRUJJQU4wSVFrZ0NTQUxjU0VKSUFrRVFDQUFRUWdRTENFSklBbEIvLzhEY1NFUklBb29BZ0FoQVNBQklBSkJCSFJxSUFOQkFYUnFJUllnRmlBUk93RUFJQWxCRUhRaENTQUpRUkIxSVFrZ0RTZ0NBQ0VSSUJFZ0NVd05DUVVnQVNBQ1FRUjBhaUFEUVFGMGFpRUpJQWxCZnpzQkFBc2dBMEVCYWlFRElBTkJDRWtOQUFzZ0FrRUJhaUVDSUFndEFBQWhBeUFEUWY4QmNTRURJQUlnQTBrTkFBc0xJQlVvQWdBaEFTQUdMUUFBSVFJZ0FrSC9BWEVoQWlBQklBSkJzQkJzYWtFRWFpRUJJQUVvQWdBaEFTQUJRUUowSVFFZ0FDQUJFRTBoQVNBRUlBZEJHR3hxUVJCcUlRb2dDaUFCTmdJQUlBRkZEUVlnRlNnQ0FDRUNJQVl0QUFBaEF5QURRZjhCY1NFRElBSWdBMEd3RUd4cVFRUnFJUUlnQWlnQ0FDRUNJQUpCQW5RaEFpQUJRUUFnQWhCNkdpQVZLQUlBSVFJZ0JpMEFBQ0VCSUFGQi93RnhJUU1nQWlBRFFiQVFiR3BCQkdvaEFTQUJLQUlBSVFFZ0FVRUFTZ1JBUVFBaEFRTkFJQUlnQTBHd0VHeHFJUUlnQWlnQ0FDRURJQUFnQXhCTklRSWdDaWdDQUNFRUlBUWdBVUVDZEdvaEJDQUVJQUkyQWdBZ0NpZ0NBQ0VDSUFJZ0FVRUNkR29oQWlBQ0tBSUFJUVFnQkVVTkNRSkFJQU5CQUVvRVFDQUlMUUFBSVFrZ0EwRi9haUVDSUFsQi93RnhJUWtnQVNBSmNDRUpJQWxCL3dGeElRa2dCQ0FDYWlFRUlBUWdDVG9BQUNBRFFRRkdEUUVnQVNFREEwQWdDQzBBQUNFSklBbEIvd0Z4SVFRZ0F5QUViU0VESUFvb0FnQWdBVUVDZEdvaEJDQUVLQUlBSVFzZ0FrRi9haUVFSUFsQi93RnhJUWtnQXlBSmJ5RUpJQWxCL3dGeElRa2dDeUFFYWlFTElBc2dDVG9BQUNBQ1FRRktCRUFnQkNFQ0RBRUxDd3NMSUFGQkFXb2hBU0FWS0FJQUlRSWdCaTBBQUNFRElBTkIvd0Z4SVFNZ0FpQURRYkFRYkdwQkJHb2hCQ0FFS0FJQUlRUWdBU0FFU0EwQUN3c2dCMEVCYWlFSElBVW9BZ0FoQVNBSElBRklEUUFNQ2dBTEFBc2dBRUVVRUJVTUJnc2dBRUVVRUJVTUJRc2dBRUVVRUJVTUJBc2dBRUVERUJVTUF3c2dBRUVVRUJVTUFnc2dBRUVERUJVTUFRc2dBRUVERUJVTFFRQU1CUXNMSUFCQkJoQXNJUUVnQVVFQmFpRUJJQUJCaEFOcUlRY2dCeUFCTmdJQUlBRkJLR3doQVNBQUlBRVFUU0VCSUFCQmlBTnFJUW9nQ2lBQk5nSUFJQUZGQkVBZ0FFRURFQlZCQUF3RUN5QUhLQUlBSVFJZ0FrRW9iQ0VDSUFGQkFDQUNFSG9hSUFjb0FnQWhBUUpBSUFGQkFFb0VRRUVBSVFFQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBTkFJQW9vQWdBaEJDQUVJQUZCS0d4cUlRd2dBRUVRRUN3aEFpQUNEUUVnRXlnQ0FDRUNJQUpCQTJ3aEFpQUFJQUlRVFNFQ0lBUWdBVUVvYkdwQkJHb2hDQ0FJSUFJMkFnQWdBa1VOQWlBQVFRRVFMQ0VDSUFJRWZ5QUFRUVFRTENFQ0lBSkJBV29oQWlBQ1FmOEJjUVZCQVFzaEFpQUVJQUZCS0d4cVFRaHFJUVlnQmlBQ09nQUFJQUJCQVJBc0lRSUNRQ0FDQkVBZ0FFRUlFQ3doQWlBQ1FRRnFJUUlnQWtILy93TnhJUU1nRENBRE93RUFJQUpCLy84RGNTRUNJQUpGRFFGQkFDRUNJQk1vQWdBaEF3TkFJQU5CZjJvaEF5QURFQzBoQXlBQUlBTVFMQ0VESUFOQi93RnhJUU1nQ0NnQ0FDRU5JQTBnQWtFRGJHb2hEU0FOSUFNNkFBQWdFeWdDQUNFRElBTkJmMm9oQXlBREVDMGhBeUFBSUFNUUxDRU5JQTFCL3dGeElRa2dDQ2dDQUNFRElBTWdBa0VEYkdwQkFXb2hDeUFMSUFrNkFBQWdBeUFDUVFOc2FpRURJQU1zQUFBaEN5QUxRZjhCY1NFUklCTW9BZ0FoQXlBRElCRk1EUVlnRFVIL0FYRWhEU0FESUExTURRY2dDeUFKUVJoMFFSaDFSaUVOSUEwTkNDQUNRUUZxSVFJZ0RDOEJBQ0VOSUExQi8vOERjU0VOSUFJZ0RVa05BQXNGSUF4QkFEc0JBQXNMSUFCQkFoQXNJUUlnQWcwR0lBWXNBQUFoQXlBVEtBSUFJZ3hCQUVvaEFnSkFBa0FnQTBIL0FYRkJBVW9FUUNBQ1JRMEJRUUFoQWdOQUlBQkJCQkFzSVFNZ0EwSC9BWEVoQXlBSUtBSUFJUXdnRENBQ1FRTnNha0VDYWlFTUlBd2dBem9BQUNBR0xRQUFJUXdnREVIL0FYRWdBMG9oQXlBRFJRMExJQUpCQVdvaEFpQVRLQUlBSVFNZ0FpQURTQTBBQ3d3QkJTQUNCRUFnQ0NnQ0FDRUlRUUFoQWdOQUlBZ2dBa0VEYkdwQkFtb2hEU0FOUVFBNkFBQWdBa0VCYWlFQ0lBSWdERWdOQUFzTElBTU5BUXNNQVF0QkFDRUNBMEFnQUVFSUVDd2FJQUJCQ0JBc0lRTWdBMEgvQVhFaENDQUVJQUZCS0d4cVFRbHFJQUpxSVFNZ0F5QUlPZ0FBSUFCQkNCQXNJUWdnQ0VIL0FYRWhEQ0FFSUFGQktHeHFRUmhxSUFKcUlRMGdEU0FNT2dBQUlBTXRBQUFoQXlBRFFmOEJjU0VESUE4b0FnQWhEQ0FNSUFOTURRb2dDRUgvQVhFaEF5QUZLQUlBSVFnZ0F5QUlTQ0VESUFORkRRc2dBa0VCYWlFQ0lBWXRBQUFoQXlBRFFmOEJjU0VESUFJZ0Ewa05BQXNMSUFGQkFXb2hBU0FIS0FJQUlRSWdBU0FDU0EwQURBd0FDd0FMSUFCQkZCQVZRUUFNRGdzZ0FFRURFQlZCQUF3TkN5QUFRUlFRRlVFQURBd0xJQUJCRkJBVlFRQU1Dd3NnQUVFVUVCVkJBQXdLQ3lBQVFSUVFGVUVBREFrTElBQkJGQkFWUVFBTUNBc2dBRUVVRUJWQkFBd0hDeUFBUVJRUUZVRUFEQVlBQ3dBTEN5QUFRUVlRTENFQklBRkJBV29oQVNBQVFZd0RhaUVDSUFJZ0FUWUNBQUpBSUFGQkFFb0VRRUVBSVFFQ1FBSkFBa0FDUUFOQUlBQkJBUkFzSVFNZ0EwSC9BWEVoQXlBQVFaQURhaUFCUVFac2FpRUVJQVFnQXpvQUFDQUFRUkFRTENFRElBTkIvLzhEY1NFRUlBQWdBVUVHYkdwQmtnTnFJUU1nQXlBRU93RUFJQUJCRUJBc0lRUWdCRUgvL3dOeElRZ2dBQ0FCUVFac2FrR1VBMm9oQkNBRUlBZzdBUUFnQUVFSUVDd2hDQ0FJUWY4QmNTRUdJQUFnQVVFR2JHcEJrUU5xSVF3Z0RDQUdPZ0FBSUFNdUFRQWhBeUFERFFFZ0JDNEJBQ0VESUFNTkFpQUlRZjhCY1NFRElBY29BZ0FoQkNBRElBUklJUU1nQTBVTkF5QUJRUUZxSVFFZ0FpZ0NBQ0VESUFFZ0EwZ05BQXdHQUFzQUN5QUFRUlFRRlVFQURBZ0xJQUJCRkJBVlFRQU1Cd3NnQUVFVUVCVkJBQXdHQUFzQUN3c2dBQkFoSUFCQjFBZHFJUUVnQVVFQU5nSUFJQk1vQWdBaEFRSkFJQUZCQUVvRVFFRUFJUUVEUUFKQUlCUW9BZ0FoQWlBQ1FRSjBJUUlnQUNBQ0VFMGhBeUFBUVpRR2FpQUJRUUowYWlFQ0lBSWdBellDQUNBVUtBSUFJUU1nQTBFQmRDRURJQU5CL3YvLy93ZHhJUU1nQUNBREVFMGhCeUFBUVpRSGFpQUJRUUowYWlFRElBTWdCellDQUNBQUlCQVFUU0VISUFCQjJBZHFJQUZCQW5ScUlRUWdCQ0FITmdJQUlBSW9BZ0FoQWlBQ1JRMEFJQU1vQWdBaEF5QURSU0VESUFkRklRY2dCeUFEY2cwQUlCUW9BZ0FoQXlBRFFRSjBJUU1nQWtFQUlBTVFlaG9nQVVFQmFpRUJJQk1vQWdBaEFpQUJJQUpJRFFFTUF3c0xJQUJCQXhBVlFRQU1CUXNMSUJvb0FnQWhBU0FBUVFBZ0FSQldJUUZCQUNBQlJRMERHaUFVS0FJQUlRRWdBRUVCSUFFUVZpRUJRUUFnQVVVTkF4b2dHaWdDQUNFQklBQkIzQUJxSVFJZ0FpQUJOZ0lBSUJRb0FnQWhBU0FBUWVBQWFpRUNJQUlnQVRZQ0FDQUJRUUYwSVFJZ0FrSCsvLy8vQjNFaEJDQUZLQUlBSVFnZ0NFRUFTZ1IvSUE0b0FnQWhCeUFCUVFKdElRTkJBQ0VDUVFBaEFRTkFJQWNnQVVFWWJHb2hCU0FGS0FJQUlRVWdCU0FEU1NFR0lBVWdBeUFHR3lFR0lBY2dBVUVZYkdwQkJHb2hCU0FGS0FJQUlRVWdCU0FEU1NFTUlBVWdBeUFNR3lFRklBVWdCbXNoQlNBSElBRkJHR3hxUVFocUlRWWdCaWdDQUNFR0lBVWdCbTRoQlNBRklBSktJUVlnQlNBQ0lBWWJJUUlnQVVFQmFpRUJJQUVnQ0VnTkFBc2dBa0VDZENFQklBRkJCR29GUVFRTElRRWdFeWdDQUNFQ0lBSWdBV3doQVNBQVFReHFJUUlnQkNBQlN5RURJQUlnQkNBQklBTWJJZ0kyQWdBZ0FFSFZDbW9oQVNBQlFRRTZBQUFnQUVIRUFHb2hBU0FCS0FJQUlRRUNRQ0FCQkVBZ0FFSFFBR29oQVNBQktBSUFJUUVnQUVISUFHb2hBeUFES0FJQUlRTWdBU0FEUndSQVFjd1dRY1FUUWFBZ1FZUVhFQVFMSUFCQnpBQnFJUU1nQXlnQ0FDRURJQUpCM0F0cUlRSWdBaUFEYWlFQ0lBSWdBVTBOQVNBQVFRTVFGVUVBREFVTEN5QUFFQjhoQVNBQVFTaHFJUUFnQUNBQk5nSUFRUUVNQXdzZ0FDQUNRUVlRSWlFQklBRkJBRWNoQVNBQ0xBQUFJUU1nQTBIbUFFWWhBeUFCSUFOeEJFQWdBa0VCYWlFQklBRXNBQUFoQVNBQlFla0FSZ1JBSUFKQkFtb2hBU0FCTEFBQUlRRWdBVUh6QUVZRVFDQUNRUU5xSVFFZ0FTd0FBQ0VCSUFGQjZBQkdCRUFnQWtFRWFpRUJJQUVzQUFBaEFTQUJRZVVBUmdSQUlBSkJCV29oQVNBQkxBQUFJUUVnQVVIaEFFWUVRQ0FBRURBaEFTQUJRZjhCY1VIa0FFWUVRQ0FBRURBaEFTQUJRZjhCY1VVRVFDQUFRU1lRRlVFQURBb0xDd3NMQ3dzTEN3c2dBRUVpRUJVTFFRQUxJUUFnR1NRR0lBQUxEd0VCZnlBQVFkd0xFRTBoQVNBQkN6OEJBWDhnQUVFa2FpRUJJQUVzQUFBaEFTQUJCSDlCQUFVZ0FFRVVhaUVCSUFFb0FnQWhBU0FBUVJocUlRQWdBQ2dDQUNFQUlBRWdBR3NMSVFBZ0FBdUJBZ0VDZnlBQVFkZ0thaUVCSUFFb0FnQWhBUUovQWtBZ0FVRi9SdzBBSUFBUU1DRUJJQUJCMUFCcUlRSWdBaWdDQUNFQ0lBSUVmMEVBQlNBQlFmOEJjVUhQQUVjRVFDQUFRUjRRRlVFQURBTUxJQUFRTUNFQklBRkIvd0Z4UWVjQVJ3UkFJQUJCSGhBVlFRQU1Bd3NnQUJBd0lRRWdBVUgvQVhGQjV3QkhCRUFnQUVFZUVCVkJBQXdEQ3lBQUVEQWhBU0FCUWY4QmNVSFRBRWNFUUNBQVFSNFFGVUVBREFNTElBQVFNeUVCSUFFRVFDQUFRZE1LYWlFQklBRXNBQUFoQVNBQlFRRnhJUUVnQVVVTkFpQUFRZHdLYWlFQklBRkJBRFlDQUNBQVFkUUthaUVCSUFGQkFEb0FBQ0FBUVNBUUZRdEJBQXNNQVFzZ0FCQktDeUVBSUFBTEZBRUJmd05BSUFBUUxpRUJJQUZCZjBjTkFBc0xaUUVFZnlBQVFSUnFJUU1nQXlnQ0FDRUZJQVVnQW1vaEJpQUFRUnhxSVFRZ0JDZ0NBQ0VFSUFZZ0JFc0VmeUFBUWRRQWFpRUFJQUJCQVRZQ0FFRUFCU0FCSUFVZ0FoQjVHaUFES0FJQUlRQWdBQ0FDYWlFQUlBTWdBRFlDQUVFQkN5RUFJQUFMYUFFQ2Z5QUFFREFoQWlBQ1FmOEJjU0VDSUFBUU1DRUJJQUZCL3dGeElRRWdBVUVJZENFQklBRWdBbkloQWlBQUVEQWhBU0FCUWY4QmNTRUJJQUZCRUhRaEFTQUNJQUZ5SVFJZ0FCQXdJUUFnQUVIL0FYRWhBQ0FBUVJoMElRQWdBaUFBY2lFQUlBQUxFd0VCZjBFRUVGNGhBQ0FBUVFBMkFnQWdBQXNUQVFGL0lBQW9BZ0FoQVNBQkVCQWdBQkJmQ3lFQUlBQW9BZ0FoQUNBQUJIOGdBRUVFYWlFQUlBQW9BZ0FGUVFBTElRQWdBQXNhQUNBQUtBSUFJUUFnQUFSL0lBQW9BZ0FGUVFBTElRQWdBQXZiQndJU2Z3RjlJd1loRUNNR1FSQnFKQVlnRUVFRWFpRUxJQkFoRENBRVFRQTJBZ0FnQUNnQ0FDRUdBa0FDUUNBR0RRQkJJQ0VGQTBBQ1FDQUxRUUEyQWdBZ0RFRUFOZ0lBSUFVZ0Frb2hCaUFDSUFVZ0Joc2hCaUFCSUFZZ0N5QU1RUUFRR3lFS0lBQWdDallDQUFKQUFrQUNRQUpBSUF3b0FnQU9BZ0VBQWdzZ0FpQUZUQ0VISUFkQkFYTWhCU0FGUVFGeElRVWdCaUFGZENFRlFRRkJBaUFIR3lFR0lBWWhDVUVBSUFnZ0J4c2hDQ0FGSVFZTUFnc2dDeWdDQUNFSElBUW9BZ0FoQlNBRklBZHFJUVVnQkNBRk5nSUFJQUVnQjJvaEFVRUFJUWtnQWlBSGF5RUNEQUVMUVFFaENVRi9JUWdMQWtBQ1FBSkFJQWxCQTNFT0F3QUJBQUVMREFFTERBRUxJQW9FUUNBS0lRWU1Bd1VnQmlFRkRBSUxBQXNMSUFrRWZ5QUlCU0FLSVFZTUFRc2hFZ3dCQ3lBR1FRUnFJUW9nQ2lnQ0FDRUlJQWhCQW5RaENDQUlFRjRoRFNBTlJRUkFFQVlMSUFvb0FnQWhDQ0FJUVFCS0JFQWdDRUVDZENFSUlBMUJBQ0FJRUhvYUMwRUFJUVZCQUNFS0lBRWhDQ0FHSVFFQ1FBSkFBa0FEUUNBTFFRQTJBZ0FnREVFQU5nSUFJQUpCSUVnaEJpQUNRU0FnQmhzaENTQUJJQWdnQ1VFQUlBc2dEQkFVSVFFZ0FVVUVRRUVnSVFZZ0NTRUJBMEFnQWlBR1NpRUdJQVpGRFFRZ0FVRUJkQ0VHSUFZZ0Frb2hBU0FDSUFZZ0FSc2hBU0FBS0FJQUlRa2dDU0FJSUFGQkFDQUxJQXdRRkNFSklBbEZEUUFMSUFraEFRc2dCQ2dDQUNFR0lBWWdBV29oQmlBRUlBWTJBZ0FnQ0NBQmFpRUlJQUlnQVdzaEJpQU1LQUlBSVJFZ0VTQUthaUVKQWtBQ1FDQUZJQWxJQkVBZ0JVVWhBaUFGUVFGMElRRkJnQ0FnQVNBQ0d5RUNJQUFvQWdBaEFTQUJRUVJxSVFVZ0JTZ0NBQ0VGSUFWQkFFb0VRQ0FDUVFKMElRNUJBQ0VCQTBBZ0RTQUJRUUowYWlFSElBY29BZ0FoQlNBRklBNFFZQ0VGSUFWRkRRWWdCeUFGTmdJQUlBRkJBV29oQVNBQUtBSUFJUWNnQjBFRWFpRUZJQVVvQWdBaEJTQUJJQVZJRFFBTElBVWhEaUFISVFFTUFnc0ZJQUFvQWdBaUFVRUVhaUVISUFVaEFpQUhLQUlBSVE0TUFRc01BUXNnRGtFQVNnUkFJQkZCQUVvaEV5QUxLQUlBSVJSQkFDRUhBMEFnRXdSQUlCUWdCMEVDZEdvb0FnQWhGU0FOSUFkQkFuUnFLQUlBSVJaQkFDRUZBMEFnRlNBRlFRSjBhaUVQSUE4cUFnQWhGeUFYUXdBQWdEOWVCRUJEQUFDQVB5RVhCU0FYUXdBQWdMOWRCRUJEQUFDQXZ5RVhDd3NnQlNBS2FpRVBJQllnRDBFQ2RHb2hEeUFQSUJjNEFnQWdCVUVCYWlFRklBVWdFVWNOQUFzTElBZEJBV29oQlNBRklBNUlCRUFnQlNFSERBRUxDd3NMSUFJaEJTQUpJUW9nQmlFQ0RBQUFDd0FMRUFZTUFRc2dBeUFOTmdJQUlBb2hFZ3NMSUJBa0JpQVNDendCQVg4Z0FFRUlkQ0VDSUFGQi93RnhJUUVnQUVFWWRpRUFJQUFnQVhNaEFDQUFRUUowUWRBWmFpRUFJQUFvQWdBaEFDQUFJQUp6SVFBZ0FBdnZCQUVGZnlBQVFkZ0xhaUVHSUFaQkFEWUNBQ0FBUWRRTGFpRUdJQVpCQURZQ0FDQUFRZFFBYWlFSUlBZ29BZ0FoQmdKL0lBWUVmMEVBQlNBQVFTUnFJUWNDUUFKQUEwQUNRQ0FBRUNBaEJrRUFJQVpGRFFVYUlBQkJBUkFzSVFZZ0JrVU5BQ0FITEFBQUlRWWdCZzBDQTBBZ0FCQVpJUVlnQmtGL1J3MEFDeUFJS0FJQUlRWWdCa1VOQVVFQURBVUxDd3dCQ3lBQVFTTVFGVUVBREFJTElBQkJ4QUJxSVFZZ0JpZ0NBQ0VHSUFZRVFDQUFRY2dBYWlFR0lBWW9BZ0FoQnlBQVFkQUFhaUVHSUFZb0FnQWhCaUFISUFaSEJFQkIweE5CeEJOQnVoaEJpeFFRQkFzTElBQkJqQU5xSVFjZ0J5Z0NBQ0VHSUFaQmYyb2hCaUFHRUMwaEJpQUFJQVlRTENFSUlBaEJmMFlFZjBFQUJTQUhLQUlBSVFZZ0NDQUdTQVIvSUFVZ0NEWUNBQ0FBUVpBRGFpQUlRUVpzYWlFSElBY3NBQUFoQlFKQUFrQWdCUVIvSUFCQjZBQnFJUVVnQlNnQ0FDRUZJQUJCQVJBc0lRWWdBRUVCRUN3aENDQUdRUUJISVFrZ0J5d0FBQ0VHSUFaRklRY2dCVUVCZFNFR0lBa2dCM0lFZnd3Q0JTQUFRZVFBYWlFS0lBb29BZ0FoQ1NBRklBbHJJUWtnQ1VFQ2RTRUpJQUVnQ1RZQ0FDQUtLQUlBSVFFZ0FTQUZhaUVKSUFZaEFTQUpRUUoxQ3dVZ0FFSGtBR29oQlNBRktBSUFJUVpCQUNFSUlBWWhCU0FHUVFGMUlRWkJBU0VIREFFTElRWU1BUXNnQVVFQU5nSUFJQVloQVFzZ0FpQUdOZ0lBSUFoQkFFY2hBaUFDSUFkeUJFQWdBeUFCTmdJQUJTQUZRUU5zSVFJZ0FFSGtBR29oQVNBQktBSUFJUUFnQWlBQWF5RUFJQUJCQW5VaEFDQURJQUEyQWdBZ0FTZ0NBQ0VBSUFBZ0Ftb2hBQ0FBUVFKMUlRVUxJQVFnQlRZQ0FFRUJCVUVBQ3dzTEN5RUFJQUFMakIwQ0ozOERmU01HSVJ3akJrR0FGR29rQmlBY1FZQU1haUVkSUJ4QmdBUnFJU1FnSEVHQUFtb2hGQ0FjSVNBZ0FpMEFBQ0VISUFkQi93RnhJUWNnQUVIY0FHb2dCMEVDZEdvaEJ5QUhLQUlBSVI0Z0FFR0lBMm9oQnlBSEtBSUFJUllnQWtFQmFpRUhJQWN0QUFBaEJ5QUhRZjhCY1NFWElCWWdGMEVvYkdvaElpQWVRUUYxSVI5QkFDQWZheUVwSUFCQkJHb2hHaUFhS0FJQUlRY0Nmd0pBSUFkQkFFb0VmeUFXSUJkQktHeHFRUVJxSVNvZ0FFSDRBV29oS3lBQVFmQUFhaUVsSUFCQjZBcHFJUmdnQUVIa0Ntb2hJU0FVUVFGcUlTd0RRQUpBSUNvb0FnQWhCeUFISUExQkEyeHFRUUpxSVFjZ0J5MEFBQ0VISUFkQi93RnhJUWNnSFNBTlFRSjBhaUVWSUJWQkFEWUNBQ0FXSUJkQktHeHFRUWxxSUFkcUlRY2dCeTBBQUNFSElBZEIvd0Z4SVE4Z0FFSDRBR29nRDBFQmRHb2hCeUFITGdFQUlRY2dCMFVOQUNBcktBSUFJUkFnQUVFQkVDd2hCd0pBQWtBZ0IwVU5BQ0FRSUE5QnZBeHNha0cwREdvaEJ5QUhMUUFBSVFjZ0IwSC9BWEVoQnlBSFFYOXFJUWNnQjBFQ2RFR1FDR29oQnlBSEtBSUFJU01nQUVIWUIyb2dEVUVDZEdvaEJ5QUhLQUlBSVJrZ0l4QXRJUWNnQjBGL2FpRUhJQUFnQnhBc0lRZ2dDRUgvL3dOeElRZ2dHU0FJT3dFQUlBQWdCeEFzSVFjZ0IwSC8vd054SVFjZ0dVRUNhaUVJSUFnZ0J6c0JBQ0FRSUE5QnZBeHNhaUVtSUNZc0FBQWhCeUFIQkVCQkFDRVRRUUloQndOQUlCQWdEMEc4REd4cVFRRnFJQk5xSVFnZ0NDMEFBQ0VJSUFoQi93RnhJUnNnRUNBUFFid01iR3BCSVdvZ0cyb2hDQ0FJTEFBQUlRd2dERUgvQVhFaEp5QVFJQTlCdkF4c2FrRXhhaUFiYWlFSUlBZ3NBQUFoQ0NBSVFmOEJjU0VvUVFFZ0tIUWhDU0FKUVg5cUlTMGdDQVJBSUNVb0FnQWhDeUFRSUE5QnZBeHNha0hCQUdvZ0cyb2hDQ0FJTFFBQUlRZ2dDRUgvQVhFaENpQUxJQXBCc0JCc2FpRU9JQmdvQWdBaENDQUlRUXBJQkVBZ0FCQTBDeUFoS0FJQUlRa2dDVUgvQjNFaENDQUxJQXBCc0JCc2FrRWthaUFJUVFGMGFpRUlJQWd1QVFBaENDQUlRWDlLQkVBZ0N5QUtRYkFRYkdwQkNHb2hEaUFPS0FJQUlRNGdEaUFJYWlFT0lBNHRBQUFoRGlBT1FmOEJjU0VPSUFrZ0RuWWhDU0FoSUFrMkFnQWdHQ2dDQUNFSklBa2dEbXNoQ1NBSlFRQklJUTVCQUNBSklBNGJJUkZCZnlBSUlBNGJJUWtnR0NBUk5nSUFCU0FBSUE0UU5TRUpDeUFMSUFwQnNCQnNha0VYYWlFSUlBZ3NBQUFoQ0NBSUJFQWdDeUFLUWJBUWJHcEJxQkJxSVFnZ0NDZ0NBQ0VJSUFnZ0NVRUNkR29oQ0NBSUtBSUFJUWtMQlVFQUlRa0xJQXdFUUVFQUlRc2dCeUVJQTBBZ0NTQXRjU0VLSUJBZ0QwRzhER3hxUWRJQWFpQWJRUVIwYWlBS1FRRjBhaUVLSUFvdUFRQWhEQ0FKSUNoMUlRb2dERUYvU2dSL0lDVW9BZ0FoRGlBT0lBeEJzQkJzYWlFU0lCZ29BZ0FoQ1NBSlFRcElCRUFnQUJBMEN5QWhLQUlBSVJFZ0VVSC9CM0VoQ1NBT0lBeEJzQkJzYWtFa2FpQUpRUUYwYWlFSklBa3VBUUFoQ1NBSlFYOUtCRUFnRGlBTVFiQVFiR3BCQ0dvaEVpQVNLQUlBSVJJZ0VpQUphaUVTSUJJdEFBQWhFaUFTUWY4QmNTRVNJQkVnRW5ZaEVTQWhJQkUyQWdBZ0dDZ0NBQ0VSSUJFZ0Vtc2hFU0FSUVFCSUlSSkJBQ0FSSUJJYklSRkJmeUFKSUJJYklRa2dHQ0FSTmdJQUJTQUFJQklRTlNFSkN5QU9JQXhCc0JCc2FrRVhhaUVSSUJFc0FBQWhFU0FSQkVBZ0RpQU1RYkFRYkdwQnFCQnFJUXdnRENnQ0FDRU1JQXdnQ1VFQ2RHb2hDU0FKS0FJQUlRa0xJQWxCLy84RGNRVkJBQXNoQ1NBWklBaEJBWFJxSUFrN0FRQWdDRUVCYWlFSUlBdEJBV29oQ3lBTElDZEhCRUFnQ2lFSkRBRUxDeUFISUNkcUlRY0xJQk5CQVdvaEV5QW1MUUFBSVFnZ0NFSC9BWEVoQ0NBVElBaEpEUUFMQ3lBWUtBSUFJUWNnQjBGL1JnMEFJQ3hCQVRvQUFDQVVRUUU2QUFBZ0VDQVBRYndNYkdwQnVBeHFJUWNnQnlnQ0FDRVRJQk5CQWtvRVFDQWpRZi8vQTJvaEcwRUNJUWNEUUNBUUlBOUJ2QXhzYWtIQUNHb2dCMEVCZEdvaENDQUlMUUFBSVFnZ0NFSC9BWEVoQ3lBUUlBOUJ2QXhzYWlBSFFRRjBha0hCQ0dvaENDQUlMUUFBSVFnZ0NFSC9BWEVoQ2lBUUlBOUJ2QXhzYWtIU0Ftb2dCMEVCZEdvaENDQUlMd0VBSVFnZ0NFSC8vd054SVFnZ0VDQVBRYndNYkdwQjBnSnFJQXRCQVhScUlRa2dDUzhCQUNFSklBbEIvLzhEY1NFSklCQWdEMEc4REd4cVFkSUNhaUFLUVFGMGFpRU1JQXd2QVFBaERDQU1RZi8vQTNFaERDQVpJQXRCQVhScUlRNGdEaTRCQUNFT0lCa2dDa0VCZEdvaEZTQVZMZ0VBSVJVZ0NDQUpJQXdnRGlBVkVEWWhDQ0FaSUFkQkFYUnFJUTRnRGk0QkFDRUpJQ01nQ0dzaERBSkFBa0FnQ1FSQUlBd2dDRWdoRlNBTUlBZ2dGUnRCQVhRaEZTQVVJQXBxSVFvZ0NrRUJPZ0FBSUJRZ0Myb2hDeUFMUVFFNkFBQWdGQ0FIYWlFTElBdEJBVG9BQUNBVklBbE1CRUFnRENBSVNnMERJQnNnQ1dzaENBd0NDeUFKUVFGeElRc2dDd1IvSUFsQkFXb2hDU0FKUVFGMklRa2dDQ0FKYXdVZ0NVRUJkU0VKSUFrZ0NHb0xJUWdGSUJRZ0Iyb2hDU0FKUVFBNkFBQUxDeUFPSUFnN0FRQUxJQWRCQVdvaEJ5QUhJQk5JRFFBTEN5QVRRUUJLQkVCQkFDRUhBMEFnRkNBSGFpRUlJQWdzQUFBaENDQUlSUVJBSUJrZ0IwRUJkR29oQ0NBSVFYODdBUUFMSUFkQkFXb2hCeUFISUJOSERRQUxDd3dCQ3lBVlFRRTJBZ0FMSUExQkFXb2hEU0FhS0FJQUlRY2dEU0FIU0EwQkRBTUxDeUFBUVJVUUZVRUFCUXdCQ3d3QkN5QUFRY1FBYWlFVElCTW9BZ0FoQ1NBSkJFQWdBRUhJQUdvaENDQUlLQUlBSVFnZ0FFSFFBR29oRFNBTktBSUFJUTBnQ0NBTlJ3UkFRZE1UUWNRVFFjOFpRZWNVRUFRTEN5QUhRUUowSVFnZ0pDQWRJQWdRZVJvZ0lpNEJBQ0VJSUFnRVFDQVdJQmRCS0d4cUtBSUVJUTBnQ0VILy93TnhJUXhCQUNFSUEwQWdEU0FJUVFOc2FpRUxJQXN0QUFBaEN5QUxRZjhCY1NFTElCMGdDMEVDZEdvaEN5QUxLQUlBSVE4Z0hTQU5JQWhCQTJ4cUxRQUJRUUowYWlFS0FrQUNRQ0FQUlEwQUlBb29BZ0FoRHlBUFJRMEFEQUVMSUFwQkFEWUNBQ0FMUVFBMkFnQUxJQWhCQVdvaENDQUlJQXhKRFFBTEN5QVdJQmRCS0d4cVFRaHFJUXNnQ3l3QUFDRUlJQWdFUUNBV0lCZEJLR3hxUVFScUlReEJBQ0VKSUFjaERRTkFBa0FnRFVFQVNnUkFJQXdvQWdBaEQwRUFJUWRCQUNFSUEwQWdEeUFJUVFOc2FrRUNhaUVLSUFvdEFBQWhDaUFLUWY4QmNTRUtJQWtnQ2tZRVFDQWRJQWhCQW5ScUlRb2dDaWdDQUNFUUlDQWdCMm9oQ2lBUUJFQWdDa0VCT2dBQUlCUWdCMEVDZEdvaENpQUtRUUEyQWdBRklBcEJBRG9BQUNBQVFaUUdhaUFJUVFKMGFpRUtJQW9vQWdBaENpQVVJQWRCQW5ScUlSQWdFQ0FLTmdJQUN5QUhRUUZxSVFjTElBaEJBV29oQ0NBSUlBMUlEUUFMQlVFQUlRY0xJQllnRjBFb2JHcEJHR29nQ1dvaENDQUlMUUFBSVFnZ0NFSC9BWEVoQ0NBQUlCUWdCeUFmSUFnZ0lCQTNJQWxCQVdvaENTQUxMUUFBSVFjZ0IwSC9BWEVoQnlBSklBZFBEUUFnR2lnQ0FDRU5EQUVMQ3lBVEtBSUFJUWtMSUFrRVFDQUFRY2dBYWlFSElBY29BZ0FoQnlBQVFkQUFhaUVJSUFnb0FnQWhDQ0FISUFoSEJFQkIweE5CeEJOQjhCbEI1eFFRQkFzTElDSXVBUUFoQnlBSEJFQWdGaUFYUVNoc2FpZ0NCQ0VOSUI1QkFVb2hEQ0FIUWYvL0EzRWhDQU5BSUFoQmYyb2hDU0FOSUFsQkEyeHFJUWNnQnkwQUFDRUhJQWRCL3dGeElRY2dBRUdVQm1vZ0IwRUNkR29oQnlBSEtBSUFJU0FnRFNBSlFRTnNha0VCYWlFSElBY3RBQUFoQnlBSFFmOEJjU0VISUFCQmxBWnFJQWRCQW5ScUlRY2dCeWdDQUNFUElBd0VRRUVBSVFjRFFDQWdJQWRCQW5ScUlRc2dDeW9DQUNFdUlBOGdCMEVDZEdvaUVDb0NBQ0l2UXdBQUFBQmVJUW9nTGtNQUFBQUFYZ1JBSUFvRVFDQXVJVEFnTGlBdmt5RXVCU0F1SUMrU0lUQUxCU0FLQkVBZ0xpRXdJQzRnTDVJaExnVWdMaUF2a3lFd0N3c2dDeUF3T0FJQUlCQWdMamdDQUNBSFFRRnFJUWNnQnlBZlNBMEFDd3NnQ0VFQlNnUkFJQWtoQ0F3QkN3c0xJQm9vQWdBaEJ5QUhRUUJLQkVBZ0gwRUNkQ0VKUVFBaEJ3TkFJQ1FnQjBFQ2RHb2hDQ0FJS0FJQUlRMGdBRUdVQm1vZ0IwRUNkR29oQ0NBTkJFQWdDQ2dDQUNFSUlBaEJBQ0FKRUhvYUJTQUlLQUlBSVFnZ0FFSFlCMm9nQjBFQ2RHb2hEU0FOS0FJQUlRMGdBQ0FpSUFjZ0hpQUlJQTBRT0FzZ0IwRUJhaUVISUJvb0FnQWhDQ0FISUFoSURRQUxJQWhCQUVvRVFFRUFJUWNEUUNBQVFaUUdhaUFIUVFKMGFpRUlJQWdvQWdBaENDQUNMUUFBSVFrZ0NVSC9BWEVoQ1NBSUlCNGdBQ0FKRURrZ0IwRUJhaUVISUJvb0FnQWhDQ0FISUFoSURRQUxDd3NnQUJBaElBQkIxUXBxSVFJZ0Fpd0FBQ0VISUFjRVFDQUFRWmdJYWlFR0lBWWdLVFlDQUNBZUlBVnJJUVlnQUVINENtb2hCeUFISUFZMkFnQWdBRUdjQ0dvaEJpQUdRUUUyQWdBZ0FrRUFPZ0FBQlNBQVFmZ0thaUVISUFjb0FnQWhBaUFDQkVBZ0JDQURheUVJSUFJZ0NFZ0VRQ0FDSUFOcUlRTWdCaUFETmdJQUlBZEJBRFlDQUFVZ0FpQUlheUVDSUFjZ0FqWUNBQ0FHSUFRMkFnQWdCQ0VEQ3dzTElBQkI0QXBxSVFJZ0FpZ0NBQ0VDSUFCQjhBcHFJUVlnQmlnQ0FDRUhJQUJCbkFocUlnZ29BZ0FoQmdKQUFrQWdBaUFIUmdSQUlBWUVRQ0FBUWRNS2FpRUNJQUlzQUFBaEFpQUNRUVJ4SVFJZ0FnUkFJQUJCOUFwcUlRSWdBaWdDQUNFQ0lBQkJtQWhxSVFZZ0JpZ0NBQ0VISUFVZ0Eyc2hDU0FKSUFkcUlRa2dBaUFKU1NFSklBSWdCMGtoRFNBQ0lBZHJJUUpCQUNBQ0lBMGJJUUlnQWlBRGFpRUNJQUlnQlVvaEJ5QUZJQUlnQnhzaEFpQUpCRUFnQVNBQ05nSUFJQVlvQWdBaEFDQUFJQUpxSVFBZ0JpQUFOZ0lBUVFFTUJnc0xDeUFBUWZRS2FpRUNJQUlvQWdBaEFpQURJQjlySVFZZ0JpQUNhaUVHSUFCQm1BaHFJUUlnQWlBR05nSUFJQWhCQVRZQ0FBd0JCU0FBUVpnSWFpRUNJQVlOQVFzTUFRc2dCQ0FEYXlFRElBSW9BZ0FoQkNBRElBUnFJUU1nQWlBRE5nSUFDeUFUS0FJQUlRSWdBZ1JBSUFCQnlBQnFJUUlnQWlnQ0FDRUNJQUJCMEFCcUlRQWdBQ2dDQUNFQUlBSWdBRWNFUUVIVEUwSEVFMEhrR2tIbkZCQUVDd3NnQVNBRk5nSUFRUUVMSVFBZ0hDUUdJQUFMcUFJQkJYOGdBRUhvQ21vaEJTQUZLQUlBSVFJQ1FDQUNRUUJJQkVCQkFDRUFCU0FDSUFGSUJFQWdBVUVZU2dSQUlBQkJHQkFzSVFJZ0FVRm9haUVCSUFBZ0FSQXNJUUFnQUVFWWRDRUFJQUFnQW1vaEFDQUFEd3NnQWtVRVFDQUFRZVFLYWlFQ0lBSkJBRFlDQUFzZ0FFSGtDbW9oQXdKQUFrQUNRQU5BSUFBUUxpRUNJQUpCZjBZTkFTQUZLQUlBSVFRZ0FpQUVkQ0VDSUFNb0FnQWhCaUFHSUFKcUlRSWdBeUFDTmdJQUlBVWdCRUVJYWlJQ05nSUFJQUlnQVVnTkFBd0NBQXNBQ3lBRlFYODJBZ0JCQUNFQURBUUxJQVJCZUVnRVFFRUFJUUFNQkFzTEN5QUFRZVFLYWlFRUlBUW9BZ0FoQTBFQklBRjBJUUFnQUVGL2FpRUFJQU1nQUhFaEFDQURJQUYySVFNZ0JDQUROZ0lBSUFJZ0FXc2hBU0FGSUFFMkFnQUxDeUFBQzQwQ0FBSkFJQUJCQUVnRWYwRUFCU0FBUVlDQUFVZ0VRQ0FBUVJCSUJFQWdBRUdBQ0dvaEFDQUFMQUFBSVFBTUF3c2dBRUdBQkVnRVFDQUFRUVYySVFBZ0FFR0FDR29oQUNBQUxBQUFJUUFnQUVFRmFpRUFCU0FBUVFwMklRQWdBRUdBQ0dvaEFDQUFMQUFBSVFBZ0FFRUthaUVBQ3d3Q0N5QUFRWUNBZ0FoSUJIOGdBRUdBZ0NCSUJIOGdBRUVQZGlFQUlBQkJnQWhxSVFBZ0FDd0FBQ0VBSUFCQkQyb0ZJQUJCRkhZaEFDQUFRWUFJYWlFQUlBQXNBQUFoQUNBQVFSUnFDd1VnQUVHQWdJQ0FBa2dFZnlBQVFSbDJJUUFnQUVHQUNHb2hBQ0FBTEFBQUlRQWdBRUVaYWdVZ0FFRWVkaUVBSUFCQmdBaHFJUUFnQUN3QUFDRUFJQUJCSG1vTEN3c2hBQXNnQUF1aUFRRURmeUFBUWRRS2FpRUNJQUlzQUFBaEFRSkFBa0FnQVEwQUlBQkIzQXBxSVFFZ0FTZ0NBQ0VCSUFFRVFFRi9JUU1GSUFBUUx5RUJJQUVFUUNBQ0xBQUFJUUVnQVEwQ1FhRVVRY1FUUWZZTFFiVVVFQVFGUVg4aEF3c0xEQUVMSUFGQmYycEJHSFJCR0hVaEFTQUNJQUU2QUFBZ0FFSHNDbW9oQVNBQktBSUFJUUlnQWtFQmFpRUNJQUVnQWpZQ0FDQUFFREFoQUNBQVFmOEJjU0VEQ3lBREM2d0NBUWQvSUFCQjNBcHFJUUlnQWlnQ0FDRUJBa0FnQVVVRVFDQUFRZGdLYWlFRUlBUW9BZ0FoQVNBQlFYOUdCRUFnQUVIUUNHb2hBU0FCS0FJQUlRRWdBVUYvYWlFQklBQkI0QXBxSVFNZ0F5QUJOZ0lBSUFBUU1TRUJJQUZGQkVBZ0FrRUJOZ0lBREFNTElBQkIwd3BxSVFFZ0FTd0FBQ0VCSUFGQkFYRWhBU0FCQkg4Z0JDZ0NBQVVnQUVFZ0VCVU1Bd3NoQVFzZ0FVRUJhaUVISUFRZ0J6WUNBQ0FBUWRRSWFpQUJhaUVESUFNc0FBQWhCaUFHUWY4QmNTRURJQVpCZjBjRVFDQUNRUUUyQWdBZ0FFSGdDbW9oQWlBQ0lBRTJBZ0FMSUFCQjBBaHFJUUVnQVNnQ0FDRUJJQWNnQVU0RVFDQUVRWDgyQWdBTElBQkIxQXBxSVFBZ0FDd0FBQ0VCSUFFRVFFSEZGRUhFRTBIb0MwSGFGQkFFQlNBQUlBWTZBQUFnQXlFRkN3c0xJQVVMVVFFRGZ5QUFRUlJxSVFNZ0F5Z0NBQ0VCSUFCQkhHb2hBaUFDS0FJQUlRSWdBU0FDU1FSL0lBRkJBV29oQUNBRElBQTJBZ0FnQVN3QUFBVWdBRUhVQUdvaEFDQUFRUUUyQWdCQkFBc2hBQ0FBQ3lBQkFYOGdBQkF5SVFFZ0FRUi9JQUFRTXdVZ0FFRWVFQlZCQUFzaEFDQUFDMkFCQVg4Z0FCQXdJUUVnQVVIL0FYRkJ6d0JHQkVBZ0FCQXdJUUVnQVVIL0FYRkI1d0JHQkVBZ0FCQXdJUUVnQVVIL0FYRkI1d0JHQkVBZ0FCQXdJUUFnQUVIL0FYRkIwd0JHSVFBRlFRQWhBQXNGUVFBaEFBc0ZRUUFoQUFzZ0FBdlpBd0VHZnlBQUVEQWhBUUovSUFGQi93RnhCSDhnQUVFZkVCVkJBQVVnQUJBd0lRRWdBRUhUQ21vaEFpQUNJQUU2QUFBZ0FCQWpJUVVnQUJBaklRSWdBQkFqR2lBQUVDTWhBU0FBUWN3SWFpRURJQU1nQVRZQ0FDQUFFQ01hSUFBUU1DRUJJQUZCL3dGeElRRWdBRUhRQ0dvaEF5QURJQUUyQWdBZ0FFSFVDR29oQkNBQUlBUWdBUkFpSVFFZ0FVVUVRQ0FBUVFvUUZVRUFEQUlMSUFCQjhBcHFJUVFnQkVGK05nSUFJQUlnQlhFaEFRSkFJQUZCZjBjRVFDQURLQUlBSVFFZ0FVRUFTZ1JBQTBBQ1FDQUJRWDlxSVFJZ0FFSFVDR29nQW1vaEJpQUdMQUFBSVFZZ0JrRi9SdzBBSUFGQkFVd05CQ0FDSVFFTUFRc0xJQVFnQWpZQ0FDQUFRZlFLYWlFQklBRWdCVFlDQUFzTEN5QUFRZFVLYWlFQklBRXNBQUFoQVNBQkJFQWdBeWdDQUNFRElBTkJBRW9FZjBFQUlRSkJBQ0VCQTBBZ0FFSFVDR29nQVdvaEJDQUVMUUFBSVFRZ0JFSC9BWEVoQkNBQ0lBUnFJUUlnQVVFQmFpRUJJQUVnQTBnTkFBc2dBa0ViYWdWQkd3c2hBU0FBUVNocUlRSWdBaWdDQUNFQ0lBRWdBMm9oQVNBQklBSnFJUUVnQUVFc2FpRURJQU1nQWpZQ0FDQUFRVEJxSVFJZ0FpQUJOZ0lBSUFCQk5Hb2hBU0FCSUFVMkFnQUxJQUJCMkFwcUlRQWdBRUVBTmdJQVFRRUxDeUVBSUFBTG93RUJCMzhnQUVIb0Ntb2hBeUFES0FJQUlRRUNRQ0FCUVJsSUJFQWdBRUhrQ21vaEJDQUJSUVJBSUFSQkFEWUNBQXNnQUVIVUNtb2hCU0FBUWR3S2FpRUdBMEFnQmlnQ0FDRUJJQUVFUUNBRkxBQUFJUUVnQVVVTkF3c2dBQkF1SVFJZ0FrRi9SZzBDSUFNb0FnQWhBU0FDSUFGMElRSWdCQ2dDQUNFSElBY2dBbW9oQWlBRUlBSTJBZ0FnQVVFSWFpRUNJQU1nQWpZQ0FDQUJRUkZJRFFBTEN3c0xyUVVCQ1g4Z0FCQTBJQUZCSUdvaEFpQUNLQUlBSVFVQ1FBSkFJQVZGSWdORkRRQWdBVUdrRUdvaEFpQUNLQUlBSVFJZ0FnMEFRWDhoQVF3QkN5QUJRUVJxSVFJZ0FpZ0NBQ0VDQWtBQ1FDQUNRUWhLQkVBZ0FVR2tFR29oQXlBREtBSUFJUU1nQXcwQkJTQUREUUVMREFFTElBQkI1QXBxSVFnZ0NDZ0NBQ0VKSUFrUU9pRUhJQUZCckJCcUlRSWdBaWdDQUNFQ0lBSkJBVW9FUUNBQlFhUVFhaWdDQUNFS1FRQWhBd05BSUFKQkFYWWhCU0FGSUFOcUlRUWdDaUFFUVFKMGFpRUdJQVlvQWdBaEJpQUdJQWRMSVFZZ0FpQUZheUVDSUFNZ0JDQUdHeUVESUFVZ0FpQUdHeUVDSUFKQkFVb05BQXNGUVFBaEF3c2dBVUVYYWlFQ0lBSXNBQUFoQWlBQ1JRUkFJQUZCcUJCcUlRSWdBaWdDQUNFQ0lBSWdBMEVDZEdvaEFpQUNLQUlBSVFNTElBRkJDR29oQVNBQktBSUFJUUVnQVNBRGFpRUJJQUV0QUFBaEFTQUJRZjhCY1NFQklBQkI2QXBxSVFJZ0FpZ0NBQ0VBSUFBZ0FVZ0VmMEVBSVFCQmZ3VWdBQ0FCYXlFQUlBa2dBWFloQVNBSUlBRTJBZ0FnQXdzaEFTQUNJQUEyQWdBTUFRc2dBVUVYYWlFRElBTXNBQUFoQXlBREJFQkJnUlZCeEJOQjZneEJqQlVRQkFzQ1FDQUNRUUJLQkVBZ0FTZ0NDQ0VJSUFCQjVBcHFJUWxCQUNFQkEwQUNRQ0FJSUFGcUlRTWdBeXdBQUNFRUlBUkIvd0Z4SVFNZ0JFRi9Sd1JBSUFVZ0FVRUNkR29oQkNBRUtBSUFJUVlnQ1NnQ0FDRUVRUUVnQTNRaEJ5QUhRWDlxSVFjZ0JDQUhjU0VISUFZZ0IwWU5BUXNnQVVFQmFpRUJJQUVnQWtnTkFRd0RDd3NnQUVIb0Ntb2hBQ0FBS0FJQUlRSWdBaUFEU0FSQUlBQkJBRFlDQUVGL0lRRUZJQWdnQVdvaEJTQUVJQU4ySVFNZ0NTQUROZ0lBSUFVdEFBQWhBeUFEUWY4QmNTRURJQUlnQTJzaEFpQUFJQUkyQWdBTERBSUxDeUFBUVJVUUZTQUFRZWdLYWlFQUlBQkJBRFlDQUVGL0lRRUxJQUVMWGdFQ2Z5QUVJQU5ySVFRZ0FpQUJheUVDSUFSQmYwb2hCVUVBSUFScklRWWdCQ0FHSUFVYklRVWdBQ0FCYXlFQUlBVWdBR3doQUNBQUlBSnRJUUFnQkVFQVNDRUJRUUFnQUdzaEFpQUNJQUFnQVJzaEFDQUFJQU5xSVFBZ0FBdjdHZ0VjZnlNR0lSd2pCa0VRYWlRR0lCeEJCR29oQ1NBY0lSSWdBRUdBQTJvaENpQUtLQUlBSVEwZ0FFR0FBbW9nQkVFQmRHb2hDaUFLTGdFQUlRb2dDa0gvL3dOeElSa2dEU0FFUVJoc2FrRU5haUVhSUJvdEFBQWhEaUFPUWY4QmNTRU9JQUJCOEFCcUlSVWdGU2dDQUNFUUlCQWdEa0d3RUd4cUlRNGdEaWdDQUNFWUlBcEJBa1loRENBRElBeDBJUW9nRFNBRVFSaHNhaUVXSUJZb0FnQWhEaUFPSUFwSklSQWdEaUFLSUJBYklSQWdEU0FFUVJoc2FrRUVhaUVPSUE0b0FnQWhEaUFPSUFwSklSUWdEaUFLSUJRYklRb2dDaUFRYXlFS0lBMGdCRUVZYkdwQkNHb2hGQ0FVS0FJQUlRNGdDaUFPYmlFUUlBQkIwQUJxSVI0Z0hpZ0NBQ0VmSUFCQnhBQnFJUW9nQ2lnQ0FDRUtJQXBGSVE0Z0FFRUVhaUVUSUJNb0FnQWhDaUFRUVFKMElRWWdCa0VFYWlFSElBb2dCMndoQnlBT0JFQWpCaUVPSXdZZ0IwRVBha0Z3Y1dva0JnVWdBQ0FIRUR3aERpQVRLQUlBSVFvTElBNGdDaUFHRURzYUlBSkJBRW9pQmdSQUlBTkJBblFoRTBFQUlRb0RRQ0FGSUFwcUlRY2dCeXdBQUNFSElBZEZCRUFnQVNBS1FRSjBhaUVISUFjb0FnQWhCeUFIUVFBZ0V4QjZHZ3NnQ2tFQmFpRUtJQW9nQWtjTkFBc0xJQUpCQVVjaENnSkFJQW9nREhFRVFBSkFJQVlFUUVFQUlRb0RRQ0FGSUFwcUlRd2dEQ3dBQUNFTUlBeEZEUUlnQ2tFQmFpRUtJQW9nQWtnTkFBc0ZRUUFoQ2dzTElBb2dBa2NFUUNBUVFRQktJUkVnQUVIb0Ntb2hEQ0FZUVFCS0lROGdBRUhrQ21vaEV5QU5JQVJCR0d4cVFSUnFJUmtnRFNBRVFSaHNha0VRYWlFYlFRQWhDZ0pBQTBBQ1FBSkFBa0FDUUNBQ1FRRnJEZ0lCQUFJTElCRUVRQ0FLUlNFWFFRQWhCRUVBSVEwRFFDQVdLQUlBSVFVZ0ZDZ0NBQ0VHSUFZZ0JHd2hCaUFHSUFWcUlRVWdCVUVCY1NFR0lBa2dCallDQUNBRlFRRjFJUVVnRWlBRk5nSUFJQmNFUUNBVktBSUFJUVlnR2kwQUFDRUZJQVZCL3dGeElRY2dCaUFIUWJBUWJHb2hDeUFNS0FJQUlRVWdCVUVLU0FSQUlBQVFOQXNnRXlnQ0FDRUlJQWhCL3dkeElRVWdCaUFIUWJBUWJHcEJKR29nQlVFQmRHb2hCU0FGTGdFQUlRVWdCVUYvU2dSQUlBWWdCMEd3RUd4cVFRaHFJUXNnQ3lnQ0FDRUxJQXNnQldvaEN5QUxMUUFBSVFzZ0MwSC9BWEVoQ3lBSUlBdDJJUWdnRXlBSU5nSUFJQXdvQWdBaENDQUlJQXRySVFnZ0NFRUFTQ0VMUVFBZ0NDQUxHeUVJUVg4Z0JTQUxHeUVGSUF3Z0NEWUNBQVVnQUNBTEVEVWhCUXNnQmlBSFFiQVFiR3BCRjJvaENDQUlMQUFBSVFnZ0NBUkFJQVlnQjBHd0VHeHFRYWdRYWlFR0lBWW9BZ0FoQmlBR0lBVkJBblJxSVFVZ0JTZ0NBQ0VGQ3lBRlFYOUdEUWNnR3lnQ0FDRUdJQVlnQlVFQ2RHb2hCU0FGS0FJQUlRVWdEaWdDQUNFR0lBWWdEVUVDZEdvaEJpQUdJQVUyQWdBTElBUWdFRWdoQlNBRklBOXhCRUJCQUNFRkEwQWdGQ2dDQUNFR0lBNG9BZ0FoQnlBSElBMUJBblJxSVFjZ0J5Z0NBQ0VISUFjZ0JXb2hCeUFITFFBQUlRY2dCMEgvQVhFaEJ5QVpLQUlBSVFnZ0NDQUhRUVIwYWlBS1FRRjBhaUVISUFjdUFRQWhCeUFIUVg5S0JFQWdGU2dDQUNFSUlBZ2dCMEd3RUd4cUlRY2dBQ0FISUFGQkFpQUpJQklnQXlBR0VEMGhCaUFHUlEwSkJTQVdLQUlBSVFjZ0JpQUViQ0VJSUFnZ0Jtb2hCaUFHSUFkcUlRWWdCa0VCY1NFSElBa2dCellDQUNBR1FRRjFJUVlnRWlBR05nSUFDeUFGUVFGcUlRVWdCRUVCYWlFRUlBVWdHRWdoQmlBRUlCQklJUWNnQnlBR2NRMEFDd3NnRFVFQmFpRU5JQVFnRUVnTkFBc0xEQUlMSUJFRVFDQUtSU0VYUVFBaERVRUFJUVFEUUNBV0tBSUFJUVVnRkNnQ0FDRUdJQVlnQkd3aEJpQUdJQVZxSVFVZ0NVRUFOZ0lBSUJJZ0JUWUNBQ0FYQkVBZ0ZTZ0NBQ0VHSUJvdEFBQWhCU0FGUWY4QmNTRUhJQVlnQjBHd0VHeHFJUXNnRENnQ0FDRUZJQVZCQ2tnRVFDQUFFRFFMSUJNb0FnQWhDQ0FJUWY4SGNTRUZJQVlnQjBHd0VHeHFRU1JxSUFWQkFYUnFJUVVnQlM0QkFDRUZJQVZCZjBvRVFDQUdJQWRCc0JCc2FrRUlhaUVMSUFzb0FnQWhDeUFMSUFWcUlRc2dDeTBBQUNFTElBdEIvd0Z4SVFzZ0NDQUxkaUVJSUJNZ0NEWUNBQ0FNS0FJQUlRZ2dDQ0FMYXlFSUlBaEJBRWdoQzBFQUlBZ2dDeHNoQ0VGL0lBVWdDeHNoQlNBTUlBZzJBZ0FGSUFBZ0N4QTFJUVVMSUFZZ0IwR3dFR3hxUVJkcUlRZ2dDQ3dBQUNFSUlBZ0VRQ0FHSUFkQnNCQnNha0dvRUdvaEJpQUdLQUlBSVFZZ0JpQUZRUUowYWlFRklBVW9BZ0FoQlFzZ0JVRi9SZzBHSUJzb0FnQWhCaUFHSUFWQkFuUnFJUVVnQlNnQ0FDRUZJQTRvQWdBaEJpQUdJQTFCQW5ScUlRWWdCaUFGTmdJQUN5QUVJQkJJSVFVZ0JTQVBjUVJBUVFBaEJRTkFJQlFvQWdBaEJpQU9LQUlBSVFjZ0J5QU5RUUowYWlFSElBY29BZ0FoQnlBSElBVnFJUWNnQnkwQUFDRUhJQWRCL3dGeElRY2dHU2dDQUNFSUlBZ2dCMEVFZEdvZ0NrRUJkR29oQnlBSExnRUFJUWNnQjBGL1NnUkFJQlVvQWdBaENDQUlJQWRCc0JCc2FpRUhJQUFnQnlBQlFRRWdDU0FTSUFNZ0JoQTlJUVlnQmtVTkNBVWdGaWdDQUNFSElBWWdCR3doQ0NBSUlBWnFJUVlnQmlBSGFpRUdJQWxCQURZQ0FDQVNJQVkyQWdBTElBVkJBV29oQlNBRVFRRnFJUVFnQlNBWVNDRUdJQVFnRUVnaEJ5QUhJQVp4RFFBTEN5QU5RUUZxSVEwZ0JDQVFTQTBBQ3dzTUFRc2dFUVJBSUFwRklSZEJBQ0VOUVFBaEJBTkFJQllvQWdBaEJTQVVLQUlBSVFZZ0JpQUViQ0VHSUFZZ0JXb2hCU0FGSUFVZ0FtMGlCU0FDYkdzaEJpQUpJQVkyQWdBZ0VpQUZOZ0lBSUJjRVFDQVZLQUlBSVFZZ0dpMEFBQ0VGSUFWQi93RnhJUWNnQmlBSFFiQVFiR29oQ3lBTUtBSUFJUVVnQlVFS1NBUkFJQUFRTkFzZ0V5Z0NBQ0VJSUFoQi93ZHhJUVVnQmlBSFFiQVFiR3BCSkdvZ0JVRUJkR29oQlNBRkxnRUFJUVVnQlVGL1NnUkFJQVlnQjBHd0VHeHFRUWhxSVFzZ0N5Z0NBQ0VMSUFzZ0JXb2hDeUFMTFFBQUlRc2dDMEgvQVhFaEN5QUlJQXQySVFnZ0V5QUlOZ0lBSUF3b0FnQWhDQ0FJSUF0cklRZ2dDRUVBU0NFTFFRQWdDQ0FMR3lFSVFYOGdCU0FMR3lFRklBd2dDRFlDQUFVZ0FDQUxFRFVoQlFzZ0JpQUhRYkFRYkdwQkYyb2hDQ0FJTEFBQUlRZ2dDQVJBSUFZZ0IwR3dFR3hxUWFnUWFpRUdJQVlvQWdBaEJpQUdJQVZCQW5ScUlRVWdCU2dDQUNFRkN5QUZRWDlHRFFVZ0d5Z0NBQ0VHSUFZZ0JVRUNkR29oQlNBRktBSUFJUVVnRGlnQ0FDRUdJQVlnRFVFQ2RHb2hCaUFHSUFVMkFnQUxJQVFnRUVnaEJTQUZJQTl4QkVCQkFDRUZBMEFnRkNnQ0FDRUdJQTRvQWdBaEJ5QUhJQTFCQW5ScUlRY2dCeWdDQUNFSElBY2dCV29oQnlBSExRQUFJUWNnQjBIL0FYRWhCeUFaS0FJQUlRZ2dDQ0FIUVFSMGFpQUtRUUYwYWlFSElBY3VBUUFoQnlBSFFYOUtCRUFnRlNnQ0FDRUlJQWdnQjBHd0VHeHFJUWNnQUNBSElBRWdBaUFKSUJJZ0F5QUdFRDBoQmlBR1JRMEhCU0FXS0FJQUlRY2dCaUFFYkNFSUlBZ2dCbW9oQmlBR0lBZHFJUVlnQmlBR0lBSnRJZ1lnQW14cklRY2dDU0FITmdJQUlCSWdCallDQUFzZ0JVRUJhaUVGSUFSQkFXb2hCQ0FGSUJoSUlRWWdCQ0FRU0NFSElBY2dCbkVOQUFzTElBMUJBV29oRFNBRUlCQklEUUFMQ3dzZ0NrRUJhaUVLSUFwQkNFa05BQXNMQ3dVZ0VFRUFTaUViSUFKQkFVZ2hDQ0FZUVFCS0lRc2dBRUhvQ21vaEV5QUFRZVFLYWlFSElBMGdCRUVZYkdwQkVHb2hGeUFOSUFSQkdHeHFRUlJxSVNCQkFDRUtBMEFnR3dSQUlBcEJBRWNnQ0hJaElVRUFJUTFCQUNFREEwQWdJVVVFUUVFQUlSSURRQ0FGSUJKcUlRUWdCQ3dBQUNFRUlBUkZCRUFnRlNnQ0FDRUpJQm90QUFBaEJDQUVRZjhCY1NFTUlBa2dERUd3RUd4cUlROGdFeWdDQUNFRUlBUkJDa2dFUUNBQUVEUUxJQWNvQWdBaEVTQVJRZjhIY1NFRUlBa2dERUd3RUd4cVFTUnFJQVJCQVhScUlRUWdCQzRCQUNFRUlBUkJmMG9FUUNBSklBeEJzQkJzYWtFSWFpRVBJQThvQWdBaER5QVBJQVJxSVE4Z0R5MEFBQ0VQSUE5Qi93RnhJUThnRVNBUGRpRVJJQWNnRVRZQ0FDQVRLQUlBSVJFZ0VTQVBheUVSSUJGQkFFZ2hEMEVBSUJFZ0R4c2hFVUYvSUFRZ0R4c2hCQ0FUSUJFMkFnQUZJQUFnRHhBMUlRUUxJQWtnREVHd0VHeHFRUmRxSVJFZ0VTd0FBQ0VSSUJFRVFDQUpJQXhCc0JCc2FrR29FR29oQ1NBSktBSUFJUWtnQ1NBRVFRSjBhaUVFSUFRb0FnQWhCQXNnQkVGL1JnMEhJQmNvQWdBaENTQUpJQVJCQW5ScUlRUWdCQ2dDQUNFRUlBNGdFa0VDZEdvaENTQUpLQUlBSVFrZ0NTQU5RUUowYWlFSklBa2dCRFlDQUFzZ0VrRUJhaUVTSUJJZ0FrZ05BQXNMSUFNZ0VFZ2hCQ0FFSUF0eEJFQkJBQ0VTQTBBZ0JnUkFRUUFoQkFOQUlBVWdCR29oQ1NBSkxBQUFJUWtnQ1VVRVFDQU9JQVJCQW5ScUlRa2dDU2dDQUNFSklBa2dEVUVDZEdvaENTQUpLQUlBSVFrZ0NTQVNhaUVKSUFrdEFBQWhDU0FKUWY4QmNTRUpJQ0FvQWdBaERDQU1JQWxCQkhScUlBcEJBWFJxSVFrZ0NTNEJBQ0VKSUFsQmYwb0VRQ0FCSUFSQkFuUnFJUXdnRENnQ0FDRVJJQllvQWdBaER5QVVLQUlBSVF3Z0RDQURiQ0VkSUIwZ0Qyb2hEeUFWS0FJQUlSMGdIU0FKUWJBUWJHb2hDU0FBSUFrZ0VTQVBJQXdnR1JBK0lRa2dDVVVOQ2dzTElBUkJBV29oQkNBRUlBSklEUUFMQ3lBU1FRRnFJUklnQTBFQmFpRURJQklnR0VnaEJDQURJQkJJSVFrZ0NTQUVjUTBBQ3dzZ0RVRUJhaUVOSUFNZ0VFZ05BQXNMSUFwQkFXb2hDaUFLUVFoSkRRQUxDd3NnSGlBZk5nSUFJQndrQmd2UEF3SUlmd0o5SUFOQkFYVWhDU0FCUVFScUlRTWdBeWdDQUNFRElBTWdBa0VEYkdwQkFtb2hBaUFDTFFBQUlRSWdBa0gvQVhFaEFpQUJRUWxxSUFKcUlRRWdBUzBBQUNFQklBRkIvd0Z4SVFjZ0FFSDRBR29nQjBFQmRHb2hBU0FCTGdFQUlRRWdBUVJBSUFCQitBRnFJUUFnQUNnQ0FDRUlJQVV1QVFBaEFTQUlJQWRCdkF4c2FrRzBER29oQ3lBTExRQUFJUUFnQUVIL0FYRWhBQ0FBSUFGc0lRRWdDQ0FIUWJ3TWJHcEJ1QXhxSVF3Z0RDZ0NBQ0VDSUFKQkFVb0VRRUVBSVFCQkFTRUtBMEFnQ0NBSFFid01iR3BCeGdacUlBcHFJUU1nQXkwQUFDRURJQU5CL3dGeElRMGdCU0FOUVFGMGFpRURJQU11QVFBaEJpQUdRWDlLQkVBZ0N5MEFBQ0VESUFOQi93RnhJUU1nQXlBR2JDRURJQWdnQjBHOERHeHFRZElDYWlBTlFRRjBhaUVHSUFZdkFRQWhCaUFHUWYvL0EzRWhCaUFBSUFaSEJFQWdCQ0FBSUFFZ0JpQURJQWtRUWlBR0lRQWdEQ2dDQUNFQ0N5QURJUUVMSUFwQkFXb2hBeUFESUFKSUJFQWdBeUVLREFFTEN3VkJBQ0VBQ3lBQUlBbElCRUFnQVVFQ2RFR2dDR29xQWdBaER3TkFJQVFnQUVFQ2RHb2hBU0FCS2dJQUlRNGdEeUFPbENFT0lBRWdEamdDQUNBQVFRRnFJUUFnQUNBSlJ3MEFDd3NGSUFCQkZSQVZDd3VGR2dJVmZ3cDlJd1loRmlBQlFRRjFJUThnQVVFQ2RTRU5JQUZCQTNVaERpQUNRZEFBYWlFVUlCUW9BZ0FoRnlBQ1FjUUFhaUVJSUFnb0FnQWhDQ0FJUlNFSUlBOUJBblFoQlNBSUJFQWpCaUVNSXdZZ0JVRVBha0Z3Y1dva0JnVWdBaUFGRUR3aERBc2dBa0dnQ0dvZ0EwRUNkR29oQ0NBSUtBSUFJUWdnRDBGK2FpRUdJQXdnQmtFQ2RHb2hCaUFBSUE5QkFuUnFJUlVnRHdSL0lBVkJjR29oQlNBRlFRUjJJUWNnQjBFRGRDRUVJQVVnQkdzaEJTQU1JQVZxSVFRZ0IwRUJkQ0VGSUFWQkFtb2hDeUFHSVFjZ0FDRUdJQWdoQlFOQUlBWXFBZ0FoR1NBRktnSUFJUm9nR1NBYWxDRVpJQVpCQ0dvaENpQUtLZ0lBSVJvZ0JVRUVhaUVKSUFrcUFnQWhHeUFhSUJ1VUlSb2dHU0Fha3lFWklBZEJCR29oRUNBUUlCazRBZ0FnQmlvQ0FDRVpJQWtxQWdBaEdpQVpJQnFVSVJrZ0Npb0NBQ0VhSUFVcUFnQWhHeUFhSUJ1VUlSb2dHU0Fha2lFWklBY2dHVGdDQUNBSFFYaHFJUWNnQlVFSWFpRUZJQVpCRUdvaEJpQUdJQlZIRFFBTElBUWhCaUFJSUF0QkFuUnFCU0FJQ3lFSElBWWdERThFUUNBUFFYMXFJUVFnQmlFRklBQWdCRUVDZEdvaEJDQUhJUVlEUUNBRVFRaHFJUWNnQnlvQ0FDRVpJQVlxQWdBaEdpQVpJQnFVSVJrZ0JDb0NBQ0VhSUFaQkJHb2hDaUFLS2dJQUlSc2dHaUFibENFYUlCb2dHWk1oR1NBRlFRUnFJUWtnQ1NBWk9BSUFJQWNxQWdBaEdTQUtLZ0lBSVJvZ0dTQWFsQ0VaSUFRcUFnQWhHaUFHS2dJQUlSc2dHaUFibENFYUlCcU1JUm9nR2lBWmt5RVpJQVVnR1RnQ0FDQUZRWGhxSVFVZ0JrRUlhaUVHSUFSQmNHb2hCQ0FGSUF4UERRQUxDeUFCUVJCT0JFQWdEMEY0YWlFR0lBZ2dCa0VDZEdvaEJpQUFJQTFCQW5ScUlRY2dBQ0VFSUF3Z0RVRUNkR29oQ2lBTUlRVURRQ0FLUVFScUlRa2dDU29DQUNFWklBVkJCR29oQ1NBSktnSUFJUm9nR1NBYWt5RWJJQW9xQWdBaEhDQUZLZ0lBSVIwZ0hDQWRreUVjSUJrZ0dwSWhHU0FIUVFScUlRa2dDU0FaT0FJQUlBb3FBZ0FoR1NBRktnSUFJUm9nR1NBYWtpRVpJQWNnR1RnQ0FDQUdRUkJxSVFrZ0NTb0NBQ0VaSUJzZ0daUWhHU0FHUVJScUlRc2dDeW9DQUNFYUlCd2dHcFFoR2lBWklCcVRJUmtnQkVFRWFpRVFJQkFnR1RnQ0FDQUpLZ0lBSVJrZ0hDQVpsQ0VaSUFzcUFnQWhHaUFiSUJxVUlSb2dHU0Fha2lFWklBUWdHVGdDQUNBS1FReHFJUWtnQ1NvQ0FDRVpJQVZCREdvaENTQUpLZ0lBSVJvZ0dTQWFreUViSUFwQkNHb2hDU0FKS2dJQUlSd2dCVUVJYWlFTElBc3FBZ0FoSFNBY0lCMlRJUndnR1NBYWtpRVpJQWRCREdvaEVDQVFJQms0QWdBZ0NTb0NBQ0VaSUFzcUFnQWhHaUFaSUJxU0lSa2dCMEVJYWlFSklBa2dHVGdDQUNBR0tnSUFJUmtnR3lBWmxDRVpJQVpCQkdvaENTQUpLZ0lBSVJvZ0hDQWFsQ0VhSUJrZ0dwTWhHU0FFUVF4cUlRc2dDeUFaT0FJQUlBWXFBZ0FoR1NBY0lCbVVJUmtnQ1NvQ0FDRWFJQnNnR3BRaEdpQVpJQnFTSVJrZ0JFRUlhaUVKSUFrZ0dUZ0NBQ0FHUVdCcUlRWWdCMEVRYWlFSElBUkJFR29oQkNBS1FSQnFJUW9nQlVFUWFpRUZJQVlnQ0U4TkFBc0xJQUVRTFNFSElBRkJCSFVoQmlBUFFYOXFJUWxCQUNBT2F5RUZJQVlnQUNBSklBVWdDQkJESUFrZ0RXc2hCQ0FHSUFBZ0JDQUZJQWdRUXlBQlFRVjFJUXRCQUNBR2F5RUdJQXNnQUNBSklBWWdDRUVRRUVRZ0NTQU9heUVGSUFzZ0FDQUZJQVlnQ0VFUUVFUWdEa0VCZENFRklBa2dCV3NoQlNBTElBQWdCU0FHSUFoQkVCQkVJQTVCZld3aEJTQUpJQVZxSVFVZ0N5QUFJQVVnQmlBSVFSQVFSQ0FIUVh4cUlRWWdCa0VCZFNFT0lBZEJDVW9FUUVFQ0lRVURRQ0FGUVFKcUlRWWdBU0FHZFNFRUlBVkJBV29oQmtFQ0lBVjBJUW9nQ2tFQVNnUkFJQUVnQlVFRWFuVWhFRUVBSUFSQkFYVnJJUkpCQ0NBRmRDRVRRUUFoQlFOQUlBVWdCR3doRVNBSklCRnJJUkVnRUNBQUlCRWdFaUFJSUJNUVJDQUZRUUZxSVFVZ0JTQUtSdzBBQ3dzZ0JpQU9TQVJBSUFZaEJRd0JDd3NGUVFJaEJnc2dCMEY1YWlFT0lBWWdEa2dFUUFOQUlBWkJBbW9oQlNBQklBVjFJUkJCQ0NBR2RDRVNJQVpCQm1vaEJTQUJJQVYxSVFjZ0JrRUJhaUVFUVFJZ0JuUWhFeUFIUVFCS0JFQkJBQ0FRUVFGMWF5RVJJQkpCQW5RaEdDQUlJUVlnQ1NFRkEwQWdFeUFBSUFVZ0VTQUdJQklnRUJCRklBWWdHRUVDZEdvaEJpQUZRWGhxSVFVZ0IwRi9haUVLSUFkQkFVb0VRQ0FLSVFjTUFRc0xDeUFFSUE1SEJFQWdCQ0VHREFFTEN3c2dDeUFBSUFrZ0NDQUJFRVlnRFVGOGFpRUlJQXdnQ0VFQ2RHb2hCaUFQUVh4cUlRa2dCaUFNVHdSQUlBd2dDVUVDZEdvaENDQUNRY0FJYWlBRFFRSjBhaUVGSUFVb0FnQWhCUU5BSUFVdkFRQWhCeUFIUWYvL0EzRWhCeUFBSUFkQkFuUnFJUVFnQkNnQ0FDRUVJQWhCREdvaENpQUtJQVEyQWdBZ0IwRUJhaUVFSUFBZ0JFRUNkR29oQkNBRUtBSUFJUVFnQ0VFSWFpRUtJQW9nQkRZQ0FDQUhRUUpxSVFRZ0FDQUVRUUowYWlFRUlBUW9BZ0FoQkNBR1FReHFJUW9nQ2lBRU5nSUFJQWRCQTJvaEJ5QUFJQWRCQW5ScUlRY2dCeWdDQUNFSElBWkJDR29oQkNBRUlBYzJBZ0FnQlVFQ2FpRUhJQWN2QVFBaEJ5QUhRZi8vQTNFaEJ5QUFJQWRCQW5ScUlRUWdCQ2dDQUNFRUlBaEJCR29oQ2lBS0lBUTJBZ0FnQjBFQmFpRUVJQUFnQkVFQ2RHb2hCQ0FFS0FJQUlRUWdDQ0FFTmdJQUlBZEJBbW9oQkNBQUlBUkJBblJxSVFRZ0JDZ0NBQ0VFSUFaQkJHb2hDaUFLSUFRMkFnQWdCMEVEYWlFSElBQWdCMEVDZEdvaEJ5QUhLQUlBSVFjZ0JpQUhOZ0lBSUFaQmNHb2hCaUFJUVhCcUlRZ2dCVUVFYWlFRklBWWdERThOQUFzTElBd2dEMEVDZEdvaUIwRndhaUVJSUFnZ0RFc0VRQ0FDUWJBSWFpQURRUUowYWlFR0lBd2hCU0FHS0FJQUlRUWdCeUVHQTBBZ0JTb0NBQ0VaSUFaQmVHb2hDaUFLS2dJQUlSb2dHU0Fha3lFYklBVkJCR29oQ3lBTEtnSUFJUndnQmtGOGFpRU5JQTBxQWdBaEhTQWNJQjJTSVI0Z0JFRUVhaUVPSUE0cUFnQWhJQ0FiSUNDVUlSOGdCQ29DQUNFaElCNGdJWlFoSWlBZklDS1NJUjhnSUNBZWxDRWVJQnNnSVpRaEd5QWVJQnVUSVJzZ0dTQWFraUVaSUJ3Z0haTWhHaUFaSUIrU0lSd2dCU0FjT0FJQUlCb2dHNUloSENBTElCdzRBZ0FnR1NBZmt5RVpJQW9nR1RnQ0FDQWJJQnFUSVJrZ0RTQVpPQUlBSUFWQkNHb2hDaUFLS2dJQUlSa2dDQ29DQUNFYUlCa2dHcE1oR3lBRlFReHFJUXNnQ3lvQ0FDRWNJQVpCZEdvaEJpQUdLZ0lBSVIwZ0hDQWRraUVlSUFSQkRHb2hEU0FOS2dJQUlTQWdHeUFnbENFZklBUkJDR29oRFNBTktnSUFJU0VnSGlBaGxDRWlJQjhnSXBJaEh5QWdJQjZVSVI0Z0d5QWhsQ0ViSUI0Z0c1TWhHeUFaSUJxU0lSa2dIQ0Fka3lFYUlCa2dINUloSENBS0lCdzRBZ0FnR2lBYmtpRWNJQXNnSERnQ0FDQVpJQitUSVJrZ0NDQVpPQUlBSUJzZ0dwTWhHU0FHSUJrNEFnQWdCRUVRYWlFS0lBVkJFR29oQlNBSVFYQnFJUVFnQlNBRVNRUkFJQWdoQmlBRUlRZ2dDaUVFREFFTEN3c2dCMEZnYWlFSUlBZ2dERThFUUNBQ1FhZ0lhaUFEUVFKMGFpRUNJQUlvQWdBaEFpQUNJQTlCQW5ScUlRSWdBVUY4YWlFQklBQWdBVUVDZEdvaEF5QUlJUUVnRlNFSUlBQWdDVUVDZEdvaEJTQUFJUVlnQnlFQUEwQWdBa0ZnYWlFSElBQkJlR29oQkNBRUtnSUFJUmtnQWtGOGFpRUVJQVFxQWdBaEdpQVpJQnFVSVIwZ0FFRjhhaUVFSUFRcUFnQWhHeUFDUVhocUlRUWdCQ29DQUNFY0lCc2dISlFoSGlBZElCNlRJUjBnR1NBY2xDRVpJQm1NSVJrZ0dpQWJsQ0VhSUJrZ0dwTWhHU0FHSUIwNEFnQWdIWXdoR2lBRlFReHFJUVFnQkNBYU9BSUFJQWdnR1RnQ0FDQURRUXhxSVFRZ0JDQVpPQUlBSUFCQmNHb2hCQ0FFS2dJQUlSa2dBa0YwYWlFRUlBUXFBZ0FoR2lBWklCcVVJUjBnQUVGMGFpRUVJQVFxQWdBaEd5QUNRWEJxSVFRZ0JDb0NBQ0VjSUJzZ0hKUWhIaUFkSUI2VElSMGdHU0FjbENFWklCbU1JUmtnR2lBYmxDRWFJQmtnR3BNaEdTQUdRUVJxSVFRZ0JDQWRPQUlBSUIyTUlSb2dCVUVJYWlFRUlBUWdHamdDQUNBSVFRUnFJUVFnQkNBWk9BSUFJQU5CQ0dvaEJDQUVJQms0QWdBZ0FFRm9haUVFSUFRcUFnQWhHU0FDUVd4cUlRUWdCQ29DQUNFYUlCa2dHcFFoSFNBQVFXeHFJUVFnQkNvQ0FDRWJJQUpCYUdvaEJDQUVLZ0lBSVJ3Z0d5QWNsQ0VlSUIwZ0hwTWhIU0FaSUJ5VUlSa2dHWXdoR1NBYUlCdVVJUm9nR1NBYWt5RVpJQVpCQ0dvaEJDQUVJQjA0QWdBZ0hZd2hHaUFGUVFScUlRUWdCQ0FhT0FJQUlBaEJDR29oQkNBRUlCazRBZ0FnQTBFRWFpRUVJQVFnR1RnQ0FDQUJLZ0lBSVJrZ0FrRmthaUVDSUFJcUFnQWhHaUFaSUJxVUlSMGdBRUZrYWlFQUlBQXFBZ0FoR3lBSEtnSUFJUndnR3lBY2xDRWVJQjBnSHBNaEhTQVpJQnlVSVJrZ0dZd2hHU0FhSUJ1VUlSb2dHU0Fha3lFWklBWkJER29oQUNBQUlCMDRBZ0FnSFl3aEdpQUZJQm80QWdBZ0NFRU1haUVBSUFBZ0dUZ0NBQ0FESUJrNEFnQWdCa0VRYWlFR0lBaEJFR29oQ0NBRlFYQnFJUVVnQTBGd2FpRURJQUZCWUdvaEFpQUNJQXhQQkVBZ0FTRUFJQUloQVNBSElRSU1BUXNMQ3lBVUlCYzJBZ0FnRmlRR0M4VUJBUUYvSUFCQkFYWWhBU0FCUWRXcTFhb0ZjU0VCSUFCQkFYUWhBQ0FBUWFyVnF0VjZjU0VBSUFFZ0FISWhBQ0FBUVFKMklRRWdBVUd6NXN5WkEzRWhBU0FBUVFKMElRQWdBRUhNbWJQbWZIRWhBQ0FCSUFCeUlRQWdBRUVFZGlFQklBRkJqNTY4K0FCeElRRWdBRUVFZENFQUlBQkI4T0hEaDM5eElRQWdBU0FBY2lFQUlBQkJDSFloQVNBQlFmK0IvQWR4SVFFZ0FFRUlkQ0VBSUFCQmdQNkRlSEVoQUNBQklBQnlJUUFnQUVFUWRpRUJJQUJCRUhRaEFDQUJJQUJ5SVFBZ0FBdEJBUU4vSUFGQkFFb0VRQ0FBSUFGQkFuUnFJUVFEUUNBQUlBTkJBblJxSVFVZ0JTQUVOZ0lBSUFRZ0Ftb2hCQ0FEUVFGcUlRTWdBeUFCUncwQUN3c2dBQXRyQVFOL0lBRkJBMm9oQVNBQlFYeHhJUUVnQUVIRUFHb2hBaUFDS0FJQUlRSWdBZ1IvSUFCQjBBQnFJUU1nQXlnQ0FDRUVJQVFnQVdzaEFTQUFRY3dBYWlFQUlBQW9BZ0FoQUNBQklBQklCSDlCQUFVZ0F5QUJOZ0lBSUFJZ0FXb0xCU0FCRUY0TElRQWdBQXZhQmdJUGZ3SjlJQUZCRldvaERDQU1MQUFBSVF3Q2Z5QU1CSDhnQlNnQ0FDRUpJQVFvQWdBaENnSkFJQWRCQUVvRWZ5QUFRZWdLYWlFT0lBQkI1QXBxSVJBZ0FVRUlhaUVUSUFGQkYyb2hGQ0FCUWF3UWFpRVZJQVlnQTJ3aEVTQUJRUlpxSVJZZ0FVRWNhaUVTSUFjaERDQUtJUVlnQVNnQ0FDRUtJQWtoQndKQUFrQURRQUpBSUE0b0FnQWhDU0FKUVFwSUJFQWdBQkEwQ3lBUUtBSUFJUXNnQzBIL0IzRWhDU0FCUVNScUlBbEJBWFJxSVFrZ0NTNEJBQ0VKSUFsQmYwb0VRQ0FUS0FJQUlRZ2dDQ0FKYWlFSUlBZ3RBQUFoQ0NBSVFmOEJjU0VJSUFzZ0NIWWhDeUFRSUFzMkFnQWdEaWdDQUNFTElBc2dDR3NoQ3lBTFFRQklJUWhCQUNBTElBZ2JJUTFCZnlBSklBZ2JJUXNnRGlBTk5nSUFCU0FBSUFFUU5TRUxDeUFVTEFBQUlRa2dDUVJBSUJVb0FnQWhDU0FMSUFsT0RRTUxJQXRCQUVnTkFDQUhJQU5zSVFrZ0NpQUphaUVJSUFnZ0Jtb2hDQ0FJSUJGS0lRZ2dFU0FKYXlFSklBa2dCbW9oQ1NBSklBb2dDQnNoQ1NBQktBSUFJUW9nQ2lBTGJDRUxJQllzQUFBaENDQUpRUUJLSVFvZ0NBUkFJQW9FUUNBU0tBSUFJUTFEQUFBQUFDRVhRUUFoQ2dOQUlBb2dDMm9oQ0NBTklBaEJBblJxSVFnZ0NDb0NBQ0VZSUJjZ0dKSWhGeUFDSUFaQkFuUnFJUWdnQ0NnQ0FDRUlJQWhGSVE4Z0NDQUhRUUowYWlFSUlBOUZCRUFnQ0NvQ0FDRVlJQmNnR0pJaEdDQUlJQmc0QWdBTElBWkJBV29oQmlBR0lBTkdJUWdnQnlBSWFpRUhRUUFnQmlBSUd5RUdJQXBCQVdvaENpQUtJQWxIRFFBTEN3VWdDZ1JBUVFBaENnTkFJQUlnQmtFQ2RHb2hDQ0FJS0FJQUlRZ2dDQVJBSUJJb0FnQWhEU0FLSUF0cUlROGdEU0FQUVFKMGFpRU5JQTBxQWdBaEZ5QVhRd0FBQUFDU0lSY2dDQ0FIUVFKMGFpRUlJQWdxQWdBaEdDQVlJQmVTSVJjZ0NDQVhPQUlBQ3lBR1FRRnFJUVlnQmlBRFJpRUlJQWNnQ0dvaEIwRUFJQVlnQ0JzaEJpQUtRUUZxSVFvZ0NpQUpSdzBBQ3dzTElBd2dDV3NoRENBTVFRQk1EUVVnQ1NFS0RBRUxDd3dCQzBHbkZVSEVFMEdnRGtITEZSQUVDeUFBUWRRS2FpRUJJQUVzQUFBaEFTQUJSUVJBSUFCQjNBcHFJUUVnQVNnQ0FDRUJRUUFnQVEwRUdnc2dBRUVWRUJWQkFBd0RCU0FKSVFjZ0Nnc2hCZ3NnQkNBR05nSUFJQVVnQnpZQ0FFRUJCU0FBUVJVUUZVRUFDd3NoQUNBQUMrQUJBUUovQWtBZ0JRUkFJQVJCQUVvRVFFRUFJUVVEUUNBQ0lBTkJBblJxSVFZZ0JDQUZheUVISUFBZ0FTQUdJQWNRUUNFR0lBWkZCRUJCQUNFQURBUUxJQUVvQWdBaEJpQUdJQVZxSVFVZ0JpQURhaUVESUFVZ0JFZ05BQXRCQVNFQUJVRUJJUUFMQlNBQktBSUFJUVVnQkNBRmJTRUZJQUlnQTBFQ2RHb2hCaUFGUVFCS0JFQWdCQ0FEYXlFRFFRQWhBZ05BSUFZZ0FrRUNkR29oQkNBRElBSnJJUWNnQUNBQklBUWdCeUFGRUQ4aEJDQUVSU0VFSUFRRVFFRUFJUUFNQkFzZ0FrRUJhaUVDSUFJZ0JVZ05BQXRCQVNFQUJVRUJJUUFMQ3dzZ0FBdStBUUlEZndOOUlBQWdBUkJCSVFVZ0JVRUFTQVJBUVFBaEFBVWdBU2dDQUNFQUlBQWdBMGdoQmlBQUlBTWdCaHNoQXlBQUlBVnNJUVVnQTBFQVNnUkFJQUVvQWh3aEJpQUJMQUFXUlNFSFFRQWhBQU5BSUFBZ0JXb2hBU0FHSUFGQkFuUnFJUUVnQVNvQ0FDRUlJQWtnQ0pJaENDQUFJQVJzSVFFZ0FpQUJRUUowYWlFQklBRXFBZ0FoQ2lBS0lBaVNJUW9nQVNBS09BSUFJQWtnQ0NBSEd5RUpJQUJCQVdvaEFDQUFJQU5JRFFBTFFRRWhBQVZCQVNFQUN3c2dBQXZGQWdJRGZ3SjlJQUFnQVJCQklRVUNRQ0FGUVFCSUJFQkJBQ0VBQlNBQktBSUFJUUFnQUNBRFNDRUVJQUFnQXlBRUd5RURJQUFnQld3aEJTQUJRUlpxSVFBZ0FDd0FBQ0VFSUFOQkFFb2hBQ0FFQkVBZ0FFVUVRRUVCSVFBTUF3c2dBU2dDSENFRUlBRkJER29oQmtFQUlRQURRQ0FBSUFWcUlRRWdCQ0FCUVFKMGFpRUJJQUVxQWdBaENDQUhJQWlTSVFjZ0FpQUFRUUowYWlFQklBRXFBZ0FoQ0NBSUlBZVNJUWdnQVNBSU9BSUFJQVlxQWdBaENDQUhJQWlTSVFjZ0FFRUJhaUVBSUFBZ0EwZ05BQXRCQVNFQUJTQUFSUVJBUVFFaEFBd0RDeUFCS0FJY0lRUkJBQ0VBQTBBZ0FDQUZhaUVCSUFRZ0FVRUNkR29oQVNBQktnSUFJUWNnQjBNQUFBQUFraUVISUFJZ0FFRUNkR29oQVNBQktnSUFJUWdnQ0NBSGtpRUhJQUVnQnpnQ0FDQUFRUUZxSVFBZ0FDQURTQTBBQzBFQklRQUxDd3NnQUF2TUFnRUZmeUFCUVJWcUlRSWdBaXdBQUNFQ0FrQWdBZ1JBSUFCQjZBcHFJUVVnQlNnQ0FDRUNJQUpCQ2tnRVFDQUFFRFFMSUFCQjVBcHFJUVFnQkNnQ0FDRUdJQVpCL3dkeElRSWdBVUVrYWlBQ1FRRjBhaUVDSUFJdUFRQWhBaUFDUVg5S0JFQWdBVUVJYWlFRElBTW9BZ0FoQXlBRElBSnFJUU1nQXkwQUFDRURJQU5CL3dGeElRTWdCaUFEZGlFR0lBUWdCallDQUNBRktBSUFJUVFnQkNBRGF5RUVJQVJCQUVnaEJrRUFJQVFnQmhzaEJFRi9JQUlnQmhzaEFpQUZJQVEyQWdBRklBQWdBUkExSVFJTElBRkJGMm9oQlNBRkxBQUFJUVVnQlFSQUlBRkJyQkJxSVFFZ0FTZ0NBQ0VCSUFJZ0FVNEVRRUh2RlVIRUUwSENEVUdGRmhBRUN3c2dBa0VBU0FSQUlBQkIxQXBxSVFFZ0FTd0FBQ0VCSUFGRkJFQWdBRUhjQ21vaEFTQUJLQUlBSVFFZ0FRMERDeUFBUVJVUUZRc0ZJQUJCRlJBVlFYOGhBZ3NMSUFJTHRBSUNCWDhDZlNBRUlBSnJJUVFnQXlBQmF5RUlJQVJCZjBvaEJrRUFJQVJySVFjZ0JDQUhJQVliSVFjZ0JDQUliU0VHSUFSQkgzVWhCQ0FFUVFGeUlRb2dCa0YvU2lFRVFRQWdCbXNoQ1NBR0lBa2dCQnNoQkNBRUlBaHNJUVFnQnlBRWF5RUhJQU1nQlVvaEJDQUZJQU1nQkJzaEJDQUVJQUZLQkVBZ0FrRUNkRUdnQ0dvaEF5QURLZ0lBSVFzZ0FDQUJRUUowYWlFRElBTXFBZ0FoRENBTElBeVVJUXNnQXlBTE9BSUFJQUZCQVdvaEFTQUJJQVJJQkVCQkFDRURBMEFnQXlBSGFpRURJQU1nQ0VnaEJVRUFJQW9nQlJzaENVRUFJQWdnQlJzaEJTQURJQVZySVFNZ0FpQUdhaUFKYWlFQ0lBSkJBblJCb0FocUlRVWdCU29DQUNFTElBQWdBVUVDZEdvaEJTQUZLZ0lBSVF3Z0N5QU1sQ0VMSUFVZ0N6Z0NBQ0FCUVFGcUlRRWdBU0FFU0EwQUN3c0xDNHNIQWdSL0JuMGdBU0FDUVFKMGFpRUJJQUJCQTNFaEFpQUNCRUJCbXhaQnhCTkI0QkpCcUJZUUJBc2dBRUVEU2dSQUlBQkJBblloQUNBQklBTkJBblJxSVFNRFFDQUJLZ0lBSVFzZ0F5b0NBQ0VNSUFzZ0RKTWhEU0FCUVh4cUlRSWdBaW9DQUNFS0lBTkJmR29oQlNBRktnSUFJUWtnQ2lBSmt5RU9JQXNnREpJaENTQUJJQWs0QWdBZ0JTb0NBQ0VKSUFvZ0NaSWhDU0FDSUFrNEFnQWdCQ29DQUNFSklBMGdDWlFoQ2lBRVFRUnFJUUlnQWlvQ0FDRUpJQTRnQ1pRaENTQUtJQW1USVFrZ0F5QUpPQUlBSUFRcUFnQWhDU0FPSUFtVUlRb2dBaW9DQUNFSklBMGdDWlFoQ1NBS0lBbVNJUWtnQlNBSk9BSUFJQVJCSUdvaEJ5QUJRWGhxSVFnZ0NDb0NBQ0VMSUFOQmVHb2hCU0FGS2dJQUlRd2dDeUFNa3lFTklBRkJkR29oQWlBQ0tnSUFJUW9nQTBGMGFpRUdJQVlxQWdBaENTQUtJQW1USVE0Z0N5QU1raUVKSUFnZ0NUZ0NBQ0FHS2dJQUlRa2dDaUFKa2lFSklBSWdDVGdDQUNBSEtnSUFJUWtnRFNBSmxDRUtJQVJCSkdvaEFpQUNLZ0lBSVFrZ0RpQUpsQ0VKSUFvZ0NaTWhDU0FGSUFrNEFnQWdCeW9DQUNFSklBNGdDWlFoQ2lBQ0tnSUFJUWtnRFNBSmxDRUpJQW9nQ1pJaENTQUdJQWs0QWdBZ0JFRkFheUVISUFGQmNHb2hDQ0FJS2dJQUlRc2dBMEZ3YWlFRklBVXFBZ0FoRENBTElBeVRJUTBnQVVGc2FpRUNJQUlxQWdBaENpQURRV3hxSVFZZ0Jpb0NBQ0VKSUFvZ0NaTWhEaUFMSUF5U0lRa2dDQ0FKT0FJQUlBWXFBZ0FoQ1NBS0lBbVNJUWtnQWlBSk9BSUFJQWNxQWdBaENTQU5JQW1VSVFvZ0JFSEVBR29oQWlBQ0tnSUFJUWtnRGlBSmxDRUpJQW9nQ1pNaENTQUZJQWs0QWdBZ0J5b0NBQ0VKSUE0Z0NaUWhDaUFDS2dJQUlRa2dEU0FKbENFSklBb2dDWkloQ1NBR0lBazRBZ0FnQkVIZ0FHb2hCeUFCUVdocUlRZ2dDQ29DQUNFTElBTkJhR29oQlNBRktnSUFJUXdnQ3lBTWt5RU5JQUZCWkdvaEFpQUNLZ0lBSVFvZ0EwRmthaUVHSUFZcUFnQWhDU0FLSUFtVElRNGdDeUFNa2lFSklBZ2dDVGdDQUNBR0tnSUFJUWtnQ2lBSmtpRUpJQUlnQ1RnQ0FDQUhLZ0lBSVFrZ0RTQUpsQ0VLSUFSQjVBQnFJUUlnQWlvQ0FDRUpJQTRnQ1pRaENTQUtJQW1USVFrZ0JTQUpPQUlBSUFjcUFnQWhDU0FPSUFtVUlRb2dBaW9DQUNFSklBMGdDWlFoQ1NBS0lBbVNJUWtnQmlBSk9BSUFJQVJCZ0FGcUlRUWdBVUZnYWlFQklBTkJZR29oQXlBQVFYOXFJUUlnQUVFQlNnUkFJQUloQUF3QkN3c0xDNEVIQWdOL0JYMGdBU0FDUVFKMGFpRUJJQUJCQTBvRVFDQUFRUUoySVFZZ0FTQURRUUowYWlFQ0lBRWhBQ0FHSVFFRFFDQUFLZ0lBSVFrZ0Fpb0NBQ0VLSUFrZ0NwTWhEQ0FBUVh4cUlRWWdCaW9DQUNFTklBSkJmR29oQXlBREtnSUFJUXNnRFNBTGt5RUxJQWtnQ3BJaENTQUFJQWs0QWdBZ0F5b0NBQ0VKSUEwZ0NaSWhDU0FHSUFrNEFnQWdCQ29DQUNFSklBd2dDWlFoQ1NBRVFRUnFJUVlnQmlvQ0FDRUtJQXNnQ3BRaENpQUpJQXFUSVFrZ0FpQUpPQUlBSUFRcUFnQWhDU0FMSUFtVUlRa2dCaW9DQUNFS0lBd2dDcFFoQ2lBSklBcVNJUWtnQXlBSk9BSUFJQVFnQlVFQ2RHb2hBeUFBUVhocUlRWWdCaW9DQUNFSklBSkJlR29oQnlBSEtnSUFJUW9nQ1NBS2t5RU1JQUJCZEdvaENDQUlLZ0lBSVEwZ0FrRjBhaUVFSUFRcUFnQWhDeUFOSUF1VElRc2dDU0FLa2lFSklBWWdDVGdDQUNBRUtnSUFJUWtnRFNBSmtpRUpJQWdnQ1RnQ0FDQURLZ0lBSVFrZ0RDQUpsQ0VKSUFOQkJHb2hCaUFHS2dJQUlRb2dDeUFLbENFS0lBa2dDcE1oQ1NBSElBazRBZ0FnQXlvQ0FDRUpJQXNnQ1pRaENTQUdLZ0lBSVFvZ0RDQUtsQ0VLSUFrZ0NwSWhDU0FFSUFrNEFnQWdBeUFGUVFKMGFpRURJQUJCY0dvaEJpQUdLZ0lBSVFrZ0FrRndhaUVISUFjcUFnQWhDaUFKSUFxVElRd2dBRUZzYWlFSUlBZ3FBZ0FoRFNBQ1FXeHFJUVFnQkNvQ0FDRUxJQTBnQzVNaEN5QUpJQXFTSVFrZ0JpQUpPQUlBSUFRcUFnQWhDU0FOSUFtU0lRa2dDQ0FKT0FJQUlBTXFBZ0FoQ1NBTUlBbVVJUWtnQTBFRWFpRUdJQVlxQWdBaENpQUxJQXFVSVFvZ0NTQUtreUVKSUFjZ0NUZ0NBQ0FES2dJQUlRa2dDeUFKbENFSklBWXFBZ0FoQ2lBTUlBcVVJUW9nQ1NBS2tpRUpJQVFnQ1RnQ0FDQURJQVZCQW5ScUlRTWdBRUZvYWlFR0lBWXFBZ0FoQ1NBQ1FXaHFJUWNnQnlvQ0FDRUtJQWtnQ3BNaERDQUFRV1JxSVFnZ0NDb0NBQ0VOSUFKQlpHb2hCQ0FFS2dJQUlRc2dEU0FMa3lFTElBa2dDcEloQ1NBR0lBazRBZ0FnQkNvQ0FDRUpJQTBnQ1pJaENTQUlJQWs0QWdBZ0F5b0NBQ0VKSUF3Z0NaUWhDU0FEUVFScUlRWWdCaW9DQUNFS0lBc2dDcFFoQ2lBSklBcVRJUWtnQnlBSk9BSUFJQU1xQWdBaENTQUxJQW1VSVFrZ0Jpb0NBQ0VLSUF3Z0NwUWhDaUFKSUFxU0lRa2dCQ0FKT0FJQUlBQkJZR29oQUNBQ1FXQnFJUUlnQXlBRlFRSjBhaUVFSUFGQmYyb2hBeUFCUVFGS0JFQWdBeUVCREFFTEN3c0w2UVlDQW44T2ZTQUVLZ0lBSVE4Z0JFRUVhaUVISUFjcUFnQWhFQ0FFSUFWQkFuUnFJUWNnQnlvQ0FDRVJJQVZCQVdvaEJ5QUVJQWRCQW5ScUlRY2dCeW9DQUNFU0lBVkJBWFFoQ0NBRUlBaEJBblJxSVFjZ0J5b0NBQ0VUSUFoQkFYSWhCeUFFSUFkQkFuUnFJUWNnQnlvQ0FDRVVJQVZCQTJ3aEJ5QUVJQWRCQW5ScUlRVWdCU29DQUNFVklBZEJBV29oQlNBRUlBVkJBblJxSVFRZ0JDb0NBQ0VXSUFFZ0FrRUNkR29oQVNBQVFRQktCRUJCQUNBR2F5RUdJQUVnQTBFQ2RHb2hBd05BSUFFcUFnQWhDeUFES2dJQUlRd2dDeUFNa3lFTklBRkJmR29oQWlBQ0tnSUFJUW9nQTBGOGFpRUVJQVFxQWdBaENTQUtJQW1USVE0Z0N5QU1raUVKSUFFZ0NUZ0NBQ0FFS2dJQUlRa2dDaUFKa2lFSklBSWdDVGdDQUNBUElBMlVJUW9nRUNBT2xDRUpJQW9nQ1pNaENTQURJQWs0QWdBZ0R5QU9sQ0VLSUJBZ0RaUWhDU0FKSUFxU0lRa2dCQ0FKT0FJQUlBRkJlR29oQlNBRktnSUFJUXNnQTBGNGFpRUVJQVFxQWdBaERDQUxJQXlUSVEwZ0FVRjBhaUVDSUFJcUFnQWhDaUFEUVhScUlRY2dCeW9DQUNFSklBb2dDWk1oRGlBTElBeVNJUWtnQlNBSk9BSUFJQWNxQWdBaENTQUtJQW1TSVFrZ0FpQUpPQUlBSUJFZ0RaUWhDaUFTSUE2VUlRa2dDaUFKa3lFSklBUWdDVGdDQUNBUklBNlVJUW9nRWlBTmxDRUpJQWtnQ3BJaENTQUhJQWs0QWdBZ0FVRndhaUVGSUFVcUFnQWhDeUFEUVhCcUlRUWdCQ29DQUNFTUlBc2dESk1oRFNBQlFXeHFJUUlnQWlvQ0FDRUtJQU5CYkdvaEJ5QUhLZ0lBSVFrZ0NpQUpreUVPSUFzZ0RKSWhDU0FGSUFrNEFnQWdCeW9DQUNFSklBb2dDWkloQ1NBQ0lBazRBZ0FnRXlBTmxDRUtJQlFnRHBRaENTQUtJQW1USVFrZ0JDQUpPQUlBSUJNZ0RwUWhDaUFVSUEyVUlRa2dDU0FLa2lFSklBY2dDVGdDQUNBQlFXaHFJUVVnQlNvQ0FDRUxJQU5CYUdvaEJDQUVLZ0lBSVF3Z0N5QU1reUVOSUFGQlpHb2hBaUFDS2dJQUlRb2dBMEZrYWlFSElBY3FBZ0FoQ1NBS0lBbVRJUTRnQ3lBTWtpRUpJQVVnQ1RnQ0FDQUhLZ0lBSVFrZ0NpQUpraUVKSUFJZ0NUZ0NBQ0FWSUEyVUlRb2dGaUFPbENFSklBb2dDWk1oQ1NBRUlBazRBZ0FnRlNBT2xDRUtJQllnRFpRaENTQUpJQXFTSVFrZ0J5QUpPQUlBSUFFZ0JrRUNkR29oQVNBRElBWkJBblJxSVFNZ0FFRi9haUVDSUFCQkFVb0VRQ0FDSVFBTUFRc0xDd3ZXQkFJQ2Z3ZDlJQVJCQTNVaEJDQURJQVJCQW5ScUlRTWdBeW9DQUNFTklBRWdBa0VDZEdvaEFTQUFRUVIwSVFCQkFDQUFheUVBSUFFZ0FFRUNkR29oQmlBQVFRQklCRUFnQVNFQUEwQWdBQ29DQUNFSElBQkJZR29oQVNBQktnSUFJUWdnQnlBSWt5RUxJQUJCZkdvaEFpQUNLZ0lBSVFrZ0FFRmNhaUVESUFNcUFnQWhDaUFKSUFxVElRd2dCeUFJa2lFSElBQWdCemdDQUNBSklBcVNJUWNnQWlBSE9BSUFJQUVnQ3pnQ0FDQURJQXc0QWdBZ0FFRjRhaUVDSUFJcUFnQWhCeUFBUVZocUlRTWdBeW9DQUNFSUlBY2dDSk1oQ1NBQVFYUnFJUVFnQkNvQ0FDRUtJQUJCVkdvaEJTQUZLZ0lBSVFzZ0NpQUxreUVNSUFjZ0NKSWhCeUFDSUFjNEFnQWdDaUFMa2lFSElBUWdCemdDQUNBSklBeVNJUWNnRFNBSGxDRUhJQU1nQnpnQ0FDQU1JQW1USVFjZ0RTQUhsQ0VISUFVZ0J6Z0NBQ0FBUVZCcUlRSWdBaW9DQUNFSElBQkJjR29oQXlBREtnSUFJUWdnQnlBSWt5RUxJQUJCYkdvaEJDQUVLZ0lBSVFrZ0FFRk1haUVGSUFVcUFnQWhDaUFKSUFxVElRd2dCeUFJa2lFSElBTWdCemdDQUNBSklBcVNJUWNnQkNBSE9BSUFJQUlnRERnQ0FDQUZJQXM0QWdBZ0FFRklhaUVDSUFJcUFnQWhCeUFBUVdocUlRTWdBeW9DQUNFSUlBY2dDSk1oQ1NBQVFXUnFJUVFnQkNvQ0FDRUtJQUJCUkdvaEJTQUZLZ0lBSVFzZ0NpQUxreUVNSUFjZ0NKSWhCeUFESUFjNEFnQWdDaUFMa2lFSElBUWdCemdDQUNBSklBeVNJUWNnRFNBSGxDRUhJQUlnQnpnQ0FDQUpJQXlUSVFjZ0RTQUhsQ0VISUFVZ0J6Z0NBQ0FBRUVjZ0FSQkhJQUJCUUdvaEFDQUFJQVpMRFFBTEN3dVhBZ0lFZndaOUlBQXFBZ0FoQlNBQVFYQnFJUUVnQVNvQ0FDRUlJQVVnQ0pNaEJpQUZJQWlTSVFVZ0FFRjRhaUVDSUFJcUFnQWhDQ0FBUVdocUlRTWdBeW9DQUNFSElBZ2dCNUloQ1NBSUlBZVRJUWdnQlNBSmtpRUhJQUFnQnpnQ0FDQUZJQW1USVFVZ0FpQUZPQUlBSUFCQmRHb2hBaUFDS2dJQUlRVWdBRUZrYWlFRUlBUXFBZ0FoQnlBRklBZVRJUWtnQmlBSmtpRUtJQUVnQ2pnQ0FDQUdJQW1USVFZZ0F5QUdPQUlBSUFCQmZHb2hBU0FCS2dJQUlRWWdBRUZzYWlFQUlBQXFBZ0FoQ1NBR0lBbVRJUW9nQmlBSmtpRUdJQVVnQjVJaEJTQUZJQWFTSVFjZ0FTQUhPQUlBSUFZZ0JaTWhCU0FDSUFVNEFnQWdDaUFJa3lFRklBQWdCVGdDQUNBSUlBcVNJUVVnQkNBRk9BSUFDMklCQW44Z0FVRUJkQ0VCSUFCQjVBQnFJUUlnQWlnQ0FDRUNJQUVnQWtZRVFDQUFRYmdJYWlFREJTQUFRZWdBYWlFQ0lBSW9BZ0FoQWlBQklBSkdCRUFnQUVHOENHb2hBd1ZCdnhaQnhCTkI2eGRCd1JZUUJBc0xJQU1vQWdBaEFDQUFDeFFBSUFCQmtoZEJCaEJrSVFBZ0FFVWhBQ0FBQzZvQkFRTi9JQUJCMkFwcUlRRWdBU2dDQUNFREFuOENRQ0FEUVg5SERRQWdBRUhUQ21vaEF3TkFBa0FnQUJBeElRSkJBQ0FDUlEwREdpQURMQUFBSVFJZ0FrRUJjU0VDSUFJTkFDQUJLQUlBSVFJZ0FrRi9SZzBCREFJTEN5QUFRU0FRRlVFQURBRUxJQUJCM0FwcUlRRWdBVUVBTmdJQUlBQkI2QXBxSVFFZ0FVRUFOZ0lBSUFCQjdBcHFJUUVnQVVFQU5nSUFJQUJCMUFwcUlRQWdBRUVBT2dBQVFRRUxJUUFnQUF0RkFRSi9JQUJCRkdvaEFpQUNLQUlBSVFNZ0F5QUJhaUVCSUFJZ0FUWUNBQ0FBUVJ4cUlRSWdBaWdDQUNFQ0lBRWdBazhFUUNBQVFkUUFhaUVBSUFCQkFUWUNBQXNMYWdFRWZ3TkFRUUFoQUNBQ1FSaDBJUUVEUUNBQlFRRjBJUU1nQVVFZmRTRUJJQUZCdDd1RUpuRWhBU0FCSUFOeklRRWdBRUVCYWlFQUlBQkJDRWNOQUFzZ0FrRUNkRUhRR1dvaEFDQUFJQUUyQWdBZ0FrRUJhaUVBSUFCQmdBSkhCRUFnQUNFQ0RBRUxDd3VUQVFFRGZ5QUJRUU5xSVFFZ0FVRjhjU0VCSUFCQkNHb2hBaUFDS0FJQUlRTWdBeUFCYWlFRElBSWdBellDQUNBQVFjUUFhaUVDSUFJb0FnQWhBaUFDQkVBZ0FFSE1BR29oQXlBREtBSUFJUVFnQkNBQmFpRUJJQUJCMEFCcUlRQWdBQ2dDQUNFQUlBRWdBRW9FUUVFQUlRQUZJQUlnQkdvaEFDQURJQUUyQWdBTEJTQUJCSDhnQVJCZUJVRUFDeUVBQ3lBQUMwZ0JBWDhnQUVIRUFHb2hBeUFES0FJQUlRTWdBd1JBSUFKQkEyb2hBU0FCUVh4eElRRWdBRUhRQUdvaEFDQUFLQUlBSVFJZ0FpQUJhaUVCSUFBZ0FUWUNBQVVnQVJCZkN3dkdCUUVMZnlNR0lRMGpCa0dBQVdva0JpQU5JZ2RDQURjREFDQUhRZ0EzQXdnZ0IwSUFOd01RSUFkQ0FEY0RHQ0FIUWdBM0F5QWdCMElBTndNb0lBZENBRGNETUNBSFFnQTNBemdnQjBGQWEwSUFOd01BSUFkQ0FEY0RTQ0FIUWdBM0ExQWdCMElBTndOWUlBZENBRGNEWUNBSFFnQTNBMmdnQjBJQU53TndJQWRDQURjRGVBSkFJQUpCQUVvRVFBTkFJQUVnQm1vaEJDQUVMQUFBSVFRZ0JFRi9SdzBDSUFaQkFXb2hCaUFHSUFKSURRQUxDd3NDUUNBR0lBSkdCRUFnQUVHc0VHb2hBQ0FBS0FJQUlRQWdBQVJBUVpnWFFjUVRRWjBJUWE4WEVBUUZRUUVoQ3dzRklBRWdCbW9oQkNBRUxRQUFJUVVnQlVIL0FYRWhCU0FBUVFBZ0JrRUFJQVVnQXhCWElBUXNBQUFoQkNBRUJFQWdCRUgvQVhFaENrRUJJUVFEUUVFZ0lBUnJJUVZCQVNBRmRDRUZJQWNnQkVFQ2RHb2hDQ0FJSUFVMkFnQWdCRUVCYWlFRklBUWdDa2tFUUNBRklRUU1BUXNMQ3lBR1FRRnFJUW9nQ2lBQ1NBUkFRUUVoQlFKQUFrQUNRQUpBQTBBZ0FTQUthaUVKSUFrc0FBQWhCaUFHUVg5R0JFQWdCU0VHQlNBR1FmOEJjU0VJSUFaRkRRZ2dDQ0VFQTBBQ1FDQUhJQVJCQW5ScUlRWWdCaWdDQUNFTUlBd05BQ0FFUVg5cUlRWWdCRUVCVEEwS0lBWWhCQXdCQ3dzZ0JFRWdUdzBDSUFaQkFEWUNBQ0FNRURvaERpQUZRUUZxSVFZZ0FDQU9JQW9nQlNBSUlBTVFWeUFKTFFBQUlRZ2dDRUgvQVhFaEJTQUVJQVZIQkVBZ0NFSC9BWEZCSUU0TkJDQUVJQVZJQkVBRFFDQUhJQVZCQW5ScUlRZ2dDQ2dDQUNFSklBa05CMEVnSUFWcklRbEJBU0FKZENFSklBa2dER29oQ1NBSUlBazJBZ0FnQlVGL2FpRUZJQVVnQkVvTkFBc0xDd3NnQ2tFQmFpRUtJQW9nQWtnRVFDQUdJUVVNQVFWQkFTRUxEQWdMQUFBTEFBdEJ3UmRCeEJOQnRBaEJyeGNRQkF3Q0MwSFNGMEhFRTBHNUNFR3ZGeEFFREFFTFFlMFhRY1FUUWJzSVFhOFhFQVFMQlVFQklRc0xDd3NnRFNRR0lBc0x0UVlCRUg4Z0FFRVhhaUVLSUFvc0FBQWhCQ0FFQkVBZ0FFR3NFR29oQ0NBSUtBSUFJUU1nQTBFQVNnUkFJQUFvQWlBaEJpQUFRYVFRYWlnQ0FDRUZRUUFoQkFOQUlBWWdCRUVDZEdvaEF5QURLQUlBSVFNZ0F4QTZJUU1nQlNBRVFRSjBhaUVISUFjZ0F6WUNBQ0FFUVFGcUlRUWdDQ2dDQUNFRElBUWdBMGdOQUFzTEJTQUFRUVJxSVFjZ0J5Z0NBQ0VFSUFSQkFFb0VRQ0FBUVNCcUlRc2dBRUdrRUdvaERFRUFJUVFEUUNBQklBWnFJUVVnQlN3QUFDRUZJQUFnQlJCWUlRVWdCUVJBSUFzb0FnQWhCU0FGSUFaQkFuUnFJUVVnQlNnQ0FDRUZJQVVRT2lFTklBd29BZ0FoRGlBRVFRRnFJUVVnRGlBRVFRSjBhaUVFSUFRZ0RUWUNBQ0FGSVFRTElBWkJBV29oQmlBSEtBSUFJUVVnQmlBRlNBMEFDd1ZCQUNFRUN5QUFRYXdRYWlFR0lBWW9BZ0FoQlNBRUlBVkdCRUFnQmlFSUlBUWhBd1ZCL3hkQnhCTkIvZ2hCbGhnUUJBc0xJQUJCcEJCcUlRVWdCU2dDQUNFRUlBUWdBMEVFUVFJUVppQUZLQUlBSVFRZ0NDZ0NBQ0VESUFRZ0EwRUNkR29oQkNBRVFYODJBZ0FnQ2l3QUFDRURJQU5GSVFRZ0FFRUVhaUVHSUFZZ0NDQUVHeUVFSUFRb0FnQWhDd0pBSUF0QkFFb0VRQ0FBUVNCcUlSRWdBRUdvRUdvaERDQUFRUWhxSVJKQkFDRUVBMEFDUUNBRFFmOEJjUVIvSUFJZ0JFRUNkR29oQXlBREtBSUFCU0FFQ3lFRElBRWdBMm9zQUFBaERTQUFJQTBRV0NFRElBTUVRQ0FSS0FJQUlRTWdBeUFFUVFKMGFpRURJQU1vQWdBaEF5QURFRG9oRGlBSUtBSUFJUU1nQlNnQ0FDRVBJQU5CQVVvRVFFRUFJUVlEUUNBRFFRRjJJUWNnQnlBR2FpRVFJQThnRUVFQ2RHb2hDU0FKS0FJQUlRa2dDU0FPU3lFSklBTWdCMnNoQXlBR0lCQWdDUnNoQmlBSElBTWdDUnNoQXlBRFFRRktEUUFMQlVFQUlRWUxJQThnQmtFQ2RHb2hBeUFES0FJQUlRTWdBeUFPUncwQklBb3NBQUFoQXlBREJFQWdBaUFFUVFKMGFpRURJQU1vQWdBaEF5QU1LQUlBSVFjZ0J5QUdRUUowYWlFSElBY2dBellDQUNBU0tBSUFJUU1nQXlBR2FpRURJQU1nRFRvQUFBVWdEQ2dDQUNFRElBTWdCa0VDZEdvaEF5QURJQVEyQWdBTEN5QUVRUUZxSVFRZ0JDQUxUZzBESUFvc0FBQWhBd3dCQ3d0QnJSaEJ4Qk5CbkFsQmxoZ1FCQXNMQzdjQ0FRcC9JQUJCSkdvaEFTQUJRWDlCZ0JBUWVob2dBRUVYYWlFQklBRXNBQUFoQVNBQlJTRUVJQUJCckJCcUlRRWdBRUVFYWlFQ0lBSWdBU0FFR3lFQklBRW9BZ0FoQVNBQlFmLy9BVWdoQWlBQlFmLy9BU0FDR3lFR0lBRkJBRW9FUUNBQVFRaHFJUUVnQUVFZ2FpRUhJQUJCcEJCcUlRZ2dBU2dDQUNFSlFRQWhBZ05BSUFrZ0Ftb2hCU0FGTFFBQUlRRWdBVUgvQVhGQkMwZ0VRQ0FFQkg4Z0J5Z0NBQ0VCSUFFZ0FrRUNkR29oQVNBQktBSUFCU0FJS0FJQUlRRWdBU0FDUVFKMGFpRUJJQUVvQWdBaEFTQUJFRG9MSVFFZ0FVR0FDRWtFUUNBQ1FmLy9BM0VoQ2dOQUlBQkJKR29nQVVFQmRHb2hBeUFESUFvN0FRQWdCUzBBQUNFRElBTkIvd0Z4SVFOQkFTQURkQ0VESUFNZ0FXb2hBU0FCUVlBSVNRMEFDd3NMSUFKQkFXb2hBaUFDSUFaSURRQUxDd3RjQXdKL0FYMENmQ0FBUWYvLy93QnhJUUlnQUVFVmRpRUJJQUZCL3dkeElRRWdBRUVBU0NFQUlBSzRJUVFnQkpvaEJTQUZJQVFnQUJzaEJDQUV0aUVESUFPN0lRUWdBVUhzZVdvaEFDQUVJQUFRY1NFRUlBUzJJUU1nQXd2aUFRTUJmd0o5QTN3Z0FMSWhBeUFEdXlFRklBVVFkaUVGSUFXMklRTWdBYkloQkNBRElBU1ZJUU1nQTdzaEJTQUZFSFVoQlNBRm5DRUZJQVdxSVFJZ0FySWhBeUFEUXdBQWdEK1NJUU1nQTdzaEJpQUJ0eUVGSUFZZ0JSQjNJUVlnQnB3aEJpQUdxaUVCSUFFZ0FFd2hBU0FCSUFKcUlRRWdBYkloQXlBRFF3QUFnRCtTSVFRZ0JMc2hCaUFHSUFVUWR5RUdJQUMzSVFjZ0JpQUhaRVVFUUVIckdFSEVFMEcxQ1VHTEdSQUVDeUFEdXlFR0lBWWdCUkIzSVFVZ0Jad2hCU0FGcWlFQ0lBSWdBRW9FUUVHYUdVSEVFMEcyQ1VHTEdSQUVCU0FCRHd0QkFBcy9BUUYvSUFBdkFRQWhBQ0FCTHdFQUlRRWdBRUgvL3dOeElBRkIvLzhEY1VnaEFpQUFRZi8vQTNFZ0FVSC8vd054U2lFQVFYOGdBQ0FDR3lFQUlBQUxpZ0VCQjM4Z0FVRUFTZ1JBSUFBZ0FVRUJkR29oQ0VHQWdBUWhDVUYvSVFvRFFDQUFJQVJCQVhScUlRVWdCUzhCQUNFR0lBWWhCU0FLSUFWSUJFQWdDQzhCQUNFSElBWWdCMGdFUUNBQ0lBUTJBZ0FnQlNFS0N3c2dDU0FGU2dSQUlBZ3ZBUUFoQnlBR0lBZEtCRUFnQXlBRU5nSUFJQVVoQ1FzTElBUkJBV29oQkNBRUlBRkhEUUFMQ3d1bUFnRUhmeUFDUVFGMklRTWdBa0Y4Y1NFRUlBSkJBM1VoQ0NBRFFRSjBJUU1nQUNBREVFMGhCU0FBUWFBSWFpQUJRUUowYWlFR0lBWWdCVFlDQUNBQUlBTVFUU0VISUFCQnFBaHFJQUZCQW5ScUlRVWdCU0FITmdJQUlBQWdCQkJOSVFRZ0FFR3dDR29nQVVFQ2RHb2hCeUFISUFRMkFnQWdCaWdDQUNFR0FuOENRQ0FHUlEwQUlBVW9BZ0FoQlNBRlJTRUhJQVJGSVFrZ0NTQUhjZzBBSUFJZ0JpQUZJQVFRV2lBQUlBTVFUU0VESUFCQnVBaHFJQUZCQW5ScUlRUWdCQ0FETmdJQUlBTkZCRUFnQUVFREVCVkJBQXdDQ3lBQ0lBTVFXeUFJUVFGMElRTWdBQ0FERUUwaEF5QUFRY0FJYWlBQlFRSjBhaUVCSUFFZ0F6WUNBQ0FEQkg4Z0FpQURFRnhCQVFVZ0FFRURFQlZCQUFzTUFRc2dBRUVERUJWQkFBc2hBQ0FBQzI4QkFuOGdBRUVYYWlFR0lBWXNBQUFoQnlBQUtBSWdJUVlnQndSL0lBWWdBMEVDZEdvaEJpQUdJQUUyQWdBZ0JFSC9BWEVoQVNBQVFRaHFJUUFnQUNnQ0FDRUFJQUFnQTJvaEFDQUFJQUU2QUFBZ0FpRUJJQVVnQTBFQ2RHb0ZJQVlnQWtFQ2RHb0xJZ0FnQVRZQ0FBdFpBUUYvSUFCQkYyb2hBQ0FBTEFBQUlRSWdBVUgvQVhGQi93RkdJUUFnQWtVRVFDQUJRZjhCY1VFS1NpRUJJQUFnQVhNaEFDQUFRUUZ4SVFBZ0FBOExJQUFFUUVITUdFSEVFMEhxQ0VIYkdCQUVCVUVCRHd0QkFBc3JBUUYvSUFBb0FnQWhBQ0FCS0FJQUlRRWdBQ0FCU1NFQ0lBQWdBVXNoQUVGL0lBQWdBaHNoQUNBQUM2WURBd1ovQVgwRGZDQUFRUUoxSVFnZ0FFRURkU0VKSUFCQkEwb0VRQ0FBdHlFTkEwQWdCa0VDZENFRUlBUzNJUXNnQzBRWUxVUlUreUVKUUtJaEN5QUxJQTJqSVF3Z0RCQnpJUXNnQzdZaENpQUJJQVZCQW5ScUlRUWdCQ0FLT0FJQUlBd1FkQ0VMSUF1MklRb2dDb3doQ2lBRlFRRnlJUWNnQVNBSFFRSjBhaUVFSUFRZ0NqZ0NBQ0FIdHlFTElBdEVHQzFFVlBzaENVQ2lJUXNnQ3lBTm95RUxJQXRFQUFBQUFBQUE0RCtpSVF3Z0RCQnpJUXNnQzdZaENpQUtRd0FBQUQrVUlRb2dBaUFGUVFKMGFpRUVJQVFnQ2pnQ0FDQU1FSFFoQ3lBTHRpRUtJQXBEQUFBQVA1UWhDaUFDSUFkQkFuUnFJUVFnQkNBS09BSUFJQVpCQVdvaEJpQUZRUUpxSVFVZ0JpQUlTQTBBQ3lBQVFRZEtCRUFnQUxjaERFRUFJUUZCQUNFQUEwQWdBRUVCY2lFRklBVkJBWFFoQWlBQ3R5RUxJQXRFR0MxRVZQc2hDVUNpSVFzZ0N5QU1veUVOSUEwUWN5RUxJQXUySVFvZ0F5QUFRUUowYWlFQ0lBSWdDamdDQUNBTkVIUWhDeUFMdGlFS0lBcU1JUW9nQXlBRlFRSjBhaUVDSUFJZ0NqZ0NBQ0FCUVFGcUlRRWdBRUVDYWlFQUlBRWdDVWdOQUFzTEN3dW5BUU1DZndGOUFud2dBRUVCZFNFQ0lBQkJBVW9FUUNBQ3R5RUdRUUFoQUFOQUlBQzNJUVVnQlVRQUFBQUFBQURnUDZBaEJTQUZJQWFqSVFVZ0JVUUFBQUFBQUFEZ1A2SWhCU0FGUkJndFJGVDdJUWxBb2lFRklBVVFkQ0VGSUFXMklRUWdCQkJkSVFRZ0JMc2hCU0FGUkJndFJGVDdJZmsvb2lFRklBVVFkQ0VGSUFXMklRUWdBU0FBUVFKMGFpRURJQU1nQkRnQ0FDQUFRUUZxSVFBZ0FDQUNTQTBBQ3dzTFh3RUVmeUFBUVFOMUlRTWdBRUVIU2dSQVFTUWdBQkF0YXlFRVFRQWhBQU5BSUFBUU9pRUNJQUlnQkhZaEFpQUNRUUowSVFJZ0FrSC8vd054SVFJZ0FTQUFRUUYwYWlFRklBVWdBanNCQUNBQVFRRnFJUUFnQUNBRFNBMEFDd3NMRFFFQmZTQUFJQUNVSVFFZ0FRdnlPZ0VYZndKQUFrQWpCaUVPSXdaQkVHb2tCaUFPSVJjQ2Z5QUFRZlVCU1FSL1FkQWhLQUlBSWdkQkVDQUFRUXRxUVhoeElBQkJDMGtiSWdKQkEzWWlBSFlpQTBFRGNRUkFJQU5CQVhGQkFYTWdBR29pQVVFRGRFSDRJV29pQWtFSWFpSUVLQUlBSWdCQkNHb2lCaWdDQUNJRElBSkdCRUJCMENFZ0IwRUJJQUYwUVg5emNUWUNBQVZCNENFb0FnQWdBMHNFUUJBR0N5QURRUXhxSWdVb0FnQWdBRVlFUUNBRklBSTJBZ0FnQkNBRE5nSUFCUkFHQ3dzZ0FDQUJRUU4wSWdOQkEzSTJBZ1FnQUNBRGFrRUVhaUlBSUFBb0FnQkJBWEkyQWdBZ0RpUUdJQVlQQ3lBQ1FkZ2hLQUlBSWcxTEJIOGdBd1JBSUFNZ0FIUkJBaUFBZENJQVFRQWdBR3R5Y1NJQVFRQWdBR3R4UVg5cUlnTkJESFpCRUhFaEFDQURJQUIySWdOQkJYWkJDSEVpQVNBQWNpQURJQUYySWdCQkFuWkJCSEVpQTNJZ0FDQURkaUlBUVFGMlFRSnhJZ055SUFBZ0EzWWlBRUVCZGtFQmNTSURjaUFBSUFOMmFpSUJRUU4wUWZnaGFpSUZRUWhxSWdrb0FnQWlBRUVJYWlJS0tBSUFJZ01nQlVZRVFFSFFJU0FIUVFFZ0FYUkJmM054SWdRMkFnQUZRZUFoS0FJQUlBTkxCRUFRQmdzZ0EwRU1haUlMS0FJQUlBQkdCRUFnQ3lBRk5nSUFJQWtnQXpZQ0FDQUhJUVFGRUFZTEN5QUFJQUpCQTNJMkFnUWdBQ0FDYWlJSElBRkJBM1FpQXlBQ2F5SUZRUUZ5TmdJRUlBQWdBMm9nQlRZQ0FDQU5CRUJCNUNFb0FnQWhBaUFOUVFOMklnTkJBM1JCK0NGcUlRQWdCRUVCSUFOMElnTnhCRUJCNENFb0FnQWdBRUVJYWlJREtBSUFJZ0ZMQkVBUUJnVWdBU0VHSUFNaERBc0ZRZEFoSUFRZ0EzSTJBZ0FnQUNFR0lBQkJDR29oREFzZ0RDQUNOZ0lBSUFZZ0FqWUNEQ0FDSUFZMkFnZ2dBaUFBTmdJTUMwSFlJU0FGTmdJQVFlUWhJQWMyQWdBZ0RpUUdJQW9QQzBIVUlTZ0NBQ0lNQkg4Z0RFRUFJQXhyY1VGL2FpSURRUXgyUVJCeElRQWdBeUFBZGlJRFFRVjJRUWh4SWdRZ0FISWdBeUFFZGlJQVFRSjJRUVJ4SWdOeUlBQWdBM1lpQUVFQmRrRUNjU0lEY2lBQUlBTjJJZ0JCQVhaQkFYRWlBM0lnQUNBRGRtcEJBblJCZ0NScUtBSUFJZ1FoQXlBRUtBSUVRWGh4SUFKcklRb0RRQUpBSUFNb0FoQWlBRVVFUUNBREtBSVVJZ0JGRFFFTElBQWhBeUFBSUFRZ0FDZ0NCRUY0Y1NBQ2F5SUFJQXBKSWdZYklRUWdBQ0FLSUFZYklRb01BUXNMUWVBaEtBSUFJZzhnQkVzRVFCQUdDeUFFSUFKcUlnZ2dCRTBFUUJBR0N5QUVLQUlZSVFzQ1FDQUVLQUlNSWdBZ0JFWUVRQ0FFUVJScUlnTW9BZ0FpQUVVRVFDQUVRUkJxSWdNb0FnQWlBRVVOQWdzRFFBSkFJQUJCRkdvaUJpZ0NBQ0lKUlFSQUlBQkJFR29pQmlnQ0FDSUpSUTBCQ3lBR0lRTWdDU0VBREFFTEN5QVBJQU5MQkVBUUJnVWdBMEVBTmdJQUlBQWhBUXNGSUE4Z0JDZ0NDQ0lEU3dSQUVBWUxJQU5CREdvaUJpZ0NBQ0FFUndSQUVBWUxJQUJCQ0dvaUNTZ0NBQ0FFUmdSQUlBWWdBRFlDQUNBSklBTTJBZ0FnQUNFQkJSQUdDd3NMQWtBZ0N3UkFJQVFnQkNnQ0hDSUFRUUowUVlBa2FpSURLQUlBUmdSQUlBTWdBVFlDQUNBQlJRUkFRZFFoSUF4QkFTQUFkRUYvYzNFMkFnQU1Bd3NGUWVBaEtBSUFJQXRMQkVBUUJnVWdDMEVRYWlJQUlBdEJGR29nQUNnQ0FDQUVSaHNnQVRZQ0FDQUJSUTBEQ3d0QjRDRW9BZ0FpQXlBQlN3UkFFQVlMSUFFZ0N6WUNHQ0FFS0FJUUlnQUVRQ0FESUFCTEJFQVFCZ1VnQVNBQU5nSVFJQUFnQVRZQ0dBc0xJQVFvQWhRaUFBUkFRZUFoS0FJQUlBQkxCRUFRQmdVZ0FTQUFOZ0lVSUFBZ0FUWUNHQXNMQ3dzZ0NrRVFTUVJBSUFRZ0NpQUNhaUlBUVFOeU5nSUVJQVFnQUdwQkJHb2lBQ0FBS0FJQVFRRnlOZ0lBQlNBRUlBSkJBM0kyQWdRZ0NDQUtRUUZ5TmdJRUlBZ2dDbW9nQ2pZQ0FDQU5CRUJCNUNFb0FnQWhBaUFOUVFOMklnTkJBM1JCK0NGcUlRQkJBU0FEZENJRElBZHhCRUJCNENFb0FnQWdBRUVJYWlJREtBSUFJZ0ZMQkVBUUJnVWdBU0VGSUFNaEVBc0ZRZEFoSUFNZ0IzSTJBZ0FnQUNFRklBQkJDR29oRUFzZ0VDQUNOZ0lBSUFVZ0FqWUNEQ0FDSUFVMkFnZ2dBaUFBTmdJTUMwSFlJU0FLTmdJQVFlUWhJQWcyQWdBTElBNGtCaUFFUVFocUR3VWdBZ3NGSUFJTEJTQUFRYjkvU3dSL1FYOEZJQUJCQzJvaUFFRjRjU0VFUWRRaEtBSUFJZ1lFZnlBQVFRaDJJZ0FFZnlBRVFmLy8vd2RMQkg5Qkh3VWdCRUVPSUFBZ0FFR0EvajlxUVJCMlFRaHhJZ0IwSWdGQmdPQWZha0VRZGtFRWNTSUNJQUJ5SUFFZ0FuUWlBRUdBZ0E5cVFSQjJRUUp4SWdGeWF5QUFJQUYwUVE5MmFpSUFRUWRxZGtFQmNTQUFRUUYwY2dzRlFRQUxJUkpCQUNBRWF5RUNBa0FDUUNBU1FRSjBRWUFrYWlnQ0FDSUFCRUJCQUNFQklBUkJBRUVaSUJKQkFYWnJJQkpCSDBZYmRDRU1BMEFnQUNnQ0JFRjRjU0FFYXlJUUlBSkpCRUFnRUFSL0lCQWhBaUFBQlNBQUlRRkJBQ0VDREFRTElRRUxJQVVnQUNnQ0ZDSUZJQVZGSUFVZ0FFRVFhaUFNUVI5MlFRSjBhaWdDQUNJQVJuSWJJUVVnREVFQmRDRU1JQUFOQUFzZ0FTRUFCVUVBSVFBTElBVWdBSEpGQkVBZ0JFRUNJQkowSWdCQkFDQUFhM0lnQm5FaUFFVU5CaG9nQUVFQUlBQnJjVUYvYWlJRlFReDJRUkJ4SVFGQkFDRUFJQVVnQVhZaUJVRUZka0VJY1NJTUlBRnlJQVVnREhZaUFVRUNka0VFY1NJRmNpQUJJQVYySWdGQkFYWkJBbkVpQlhJZ0FTQUZkaUlCUVFGMlFRRnhJZ1Z5SUFFZ0JYWnFRUUowUVlBa2FpZ0NBQ0VGQ3lBRkJIOGdBQ0VCSUFVaEFBd0JCU0FBQ3lFRkRBRUxJQUVoQlNBQ0lRRURRQ0FBS0FJRUlRd2dBQ2dDRUNJQ1JRUkFJQUFvQWhRaEFnc2dERUY0Y1NBRWF5SVFJQUZKSVF3Z0VDQUJJQXdiSVFFZ0FDQUZJQXdiSVFVZ0FnUi9JQUloQUF3QkJTQUJDeUVDQ3dzZ0JRUi9JQUpCMkNFb0FnQWdCR3RKQkg5QjRDRW9BZ0FpRVNBRlN3UkFFQVlMSUFVZ0JHb2lDQ0FGVFFSQUVBWUxJQVVvQWhnaER3SkFJQVVvQWd3aUFDQUZSZ1JBSUFWQkZHb2lBU2dDQUNJQVJRUkFJQVZCRUdvaUFTZ0NBQ0lBUlEwQ0N3TkFBa0FnQUVFVWFpSUpLQUlBSWd0RkJFQWdBRUVRYWlJSktBSUFJZ3RGRFFFTElBa2hBU0FMSVFBTUFRc0xJQkVnQVVzRVFCQUdCU0FCUVFBMkFnQWdBQ0VIQ3dVZ0VTQUZLQUlJSWdGTEJFQVFCZ3NnQVVFTWFpSUpLQUlBSUFWSEJFQVFCZ3NnQUVFSWFpSUxLQUlBSUFWR0JFQWdDU0FBTmdJQUlBc2dBVFlDQUNBQUlRY0ZFQVlMQ3dzQ1FDQVBCRUFnQlNBRktBSWNJZ0JCQW5SQmdDUnFJZ0VvQWdCR0JFQWdBU0FITmdJQUlBZEZCRUJCMUNFZ0JrRUJJQUIwUVg5emNTSUROZ0lBREFNTEJVSGdJU2dDQUNBUFN3UkFFQVlGSUE5QkVHb2lBQ0FQUVJScUlBQW9BZ0FnQlVZYklBYzJBZ0FnQjBVRVFDQUdJUU1NQkFzTEMwSGdJU2dDQUNJQklBZExCRUFRQmdzZ0J5QVBOZ0lZSUFVb0FoQWlBQVJBSUFFZ0FFc0VRQkFHQlNBSElBQTJBaEFnQUNBSE5nSVlDd3NnQlNnQ0ZDSUFCRUJCNENFb0FnQWdBRXNFUUJBR0JTQUhJQUEyQWhRZ0FDQUhOZ0lZSUFZaEF3c0ZJQVloQXdzRklBWWhBd3NMQWtBZ0FrRVFTUVJBSUFVZ0FpQUVhaUlBUVFOeU5nSUVJQVVnQUdwQkJHb2lBQ0FBS0FJQVFRRnlOZ0lBQlNBRklBUkJBM0kyQWdRZ0NDQUNRUUZ5TmdJRUlBZ2dBbW9nQWpZQ0FDQUNRUU4ySVFFZ0FrR0FBa2tFUUNBQlFRTjBRZmdoYWlFQVFkQWhLQUlBSWdOQkFTQUJkQ0lCY1FSQVFlQWhLQUlBSUFCQkNHb2lBeWdDQUNJQlN3UkFFQVlGSUFFaERTQURJUk1MQlVIUUlTQURJQUZ5TmdJQUlBQWhEU0FBUVFocUlSTUxJQk1nQ0RZQ0FDQU5JQWcyQWd3Z0NDQU5OZ0lJSUFnZ0FEWUNEQXdDQ3lBQ1FRaDJJZ0FFZnlBQ1FmLy8vd2RMQkg5Qkh3VWdBa0VPSUFBZ0FFR0EvajlxUVJCMlFRaHhJZ0IwSWdGQmdPQWZha0VRZGtFRWNTSUVJQUJ5SUFFZ0JIUWlBRUdBZ0E5cVFSQjJRUUp4SWdGeWF5QUFJQUYwUVE5MmFpSUFRUWRxZGtFQmNTQUFRUUYwY2dzRlFRQUxJZ0ZCQW5SQmdDUnFJUUFnQ0NBQk5nSWNJQWhCRUdvaUJFRUFOZ0lFSUFSQkFEWUNBQ0FEUVFFZ0FYUWlCSEZGQkVCQjFDRWdBeUFFY2pZQ0FDQUFJQWcyQWdBZ0NDQUFOZ0lZSUFnZ0NEWUNEQ0FJSUFnMkFnZ01BZ3NDUUNBQUtBSUFJZ0FvQWdSQmVIRWdBa1lFUUNBQUlRb0ZJQUpCQUVFWklBRkJBWFpySUFGQkgwWWJkQ0VCQTBBZ0FFRVFhaUFCUVI5MlFRSjBhaUlFS0FJQUlnTUVRQ0FCUVFGMElRRWdBeWdDQkVGNGNTQUNSZ1JBSUFNaENnd0VCU0FESVFBTUFnc0FDd3RCNENFb0FnQWdCRXNFUUJBR0JTQUVJQWcyQWdBZ0NDQUFOZ0lZSUFnZ0NEWUNEQ0FJSUFnMkFnZ01CQXNMQzBIZ0lTZ0NBQ0lESUFwQkNHb2lBU2dDQUNJQVRTQURJQXBOY1FSQUlBQWdDRFlDRENBQklBZzJBZ0FnQ0NBQU5nSUlJQWdnQ2pZQ0RDQUlRUUEyQWhnRkVBWUxDd3NnRGlRR0lBVkJDR29QQlNBRUN3VWdCQXNGSUFRTEN3c0xJUU5CMkNFb0FnQWlBU0FEVHdSQVFlUWhLQUlBSVFBZ0FTQURheUlDUVE5TEJFQkI1Q0VnQUNBRGFpSUVOZ0lBUWRnaElBSTJBZ0FnQkNBQ1FRRnlOZ0lFSUFBZ0FXb2dBallDQUNBQUlBTkJBM0kyQWdRRlFkZ2hRUUEyQWdCQjVDRkJBRFlDQUNBQUlBRkJBM0kyQWdRZ0FDQUJha0VFYWlJRElBTW9BZ0JCQVhJMkFnQUxEQUlMUWR3aEtBSUFJZ0VnQTBzRVFFSGNJU0FCSUFOcklnRTJBZ0FNQVF0QnFDVW9BZ0FFZjBHd0pTZ0NBQVZCc0NWQmdDQTJBZ0JCckNWQmdDQTJBZ0JCdENWQmZ6WUNBRUc0SlVGL05nSUFRYndsUVFBMkFnQkJqQ1ZCQURZQ0FFR29KU0FYUVhCeFFkaXExYW9GY3pZQ0FFR0FJQXNpQUNBRFFTOXFJZ1pxSWdWQkFDQUFheUlIY1NJRUlBTk5CRUFnRGlRR1FRQVBDMEdJSlNnQ0FDSUFCRUJCZ0NVb0FnQWlBaUFFYWlJS0lBSk5JQW9nQUV0eUJFQWdEaVFHUVFBUEN3c2dBMEV3YWlFS0FrQUNRRUdNSlNnQ0FFRUVjUVJBUVFBaEFRVUNRQUpBQWtCQjZDRW9BZ0FpQUVVTkFFR1FKU0VDQTBBQ1FDQUNLQUlBSWcwZ0FFMEVRQ0FOSUFJb0FnUnFJQUJMRFFFTElBSW9BZ2dpQWcwQkRBSUxDeUFGSUFGcklBZHhJZ0ZCLy8vLy93ZEpCRUFnQVJCN0lnQWdBaWdDQUNBQ0tBSUVha1lFUUNBQVFYOUhEUVlGREFNTEJVRUFJUUVMREFJTFFRQVFleUlBUVg5R0JIOUJBQVZCckNVb0FnQWlBVUYvYWlJQ0lBQnFRUUFnQVd0eElBQnJRUUFnQWlBQWNSc2dCR29pQVVHQUpTZ0NBQ0lGYWlFQ0lBRWdBMHNnQVVILy8vLy9CMGx4Qkg5QmlDVW9BZ0FpQndSQUlBSWdCVTBnQWlBSFMzSUVRRUVBSVFFTUJRc0xJQUVRZXlJQ0lBQkdEUVVnQWlFQURBSUZRUUFMQ3lFQkRBRUxJQW9nQVVzZ0FVSC8vLy8vQjBrZ0FFRi9SM0Z4UlFSQUlBQkJmMFlFUUVFQUlRRU1BZ1VNQkFzQUN5QUdJQUZyUWJBbEtBSUFJZ0pxUVFBZ0FtdHhJZ0pCLy8vLy93ZFBEUUpCQUNBQmF5RUdJQUlRZTBGL1JnUi9JQVlRZXhwQkFBVWdBaUFCYWlFQkRBTUxJUUVMUVl3bFFZd2xLQUlBUVFSeU5nSUFDeUFFUWYvLy8vOEhTUVJBSUFRUWV5RUFRUUFRZXlJQ0lBQnJJZ1lnQTBFb2Frc2hCQ0FHSUFFZ0JCc2hBU0FBUVg5R0lBUkJBWE55SUFBZ0Fra2dBRUYvUnlBQ1FYOUhjWEZCQVhOeVJRMEJDd3dCQzBHQUpVR0FKU2dDQUNBQmFpSUNOZ0lBSUFKQmhDVW9BZ0JMQkVCQmhDVWdBallDQUFzQ1FFSG9JU2dDQUNJR0JFQkJrQ1VoQWdKQUFrQURRQ0FBSUFJb0FnQWlCQ0FDS0FJRUlnVnFSZzBCSUFJb0FnZ2lBZzBBQ3d3QkN5QUNRUVJxSVFjZ0FpZ0NERUVJY1VVRVFDQUFJQVpMSUFRZ0JrMXhCRUFnQnlBRklBRnFOZ0lBSUFaQkFDQUdRUWhxSWdCclFRZHhRUUFnQUVFSGNSc2lBbW9oQUVIY0lTZ0NBQ0FCYWlJRUlBSnJJUUZCNkNFZ0FEWUNBRUhjSVNBQk5nSUFJQUFnQVVFQmNqWUNCQ0FHSUFScVFTZzJBZ1JCN0NGQnVDVW9BZ0EyQWdBTUJBc0xDeUFBUWVBaEtBSUFJZ0pKQkVCQjRDRWdBRFlDQUNBQUlRSUxJQUFnQVdvaEJVR1FKU0VFQWtBQ1FBTkFJQVFvQWdBZ0JVWU5BU0FFS0FJSUlnUU5BQXNNQVFzZ0JDZ0NERUVJY1VVRVFDQUVJQUEyQWdBZ0JFRUVhaUlFSUFRb0FnQWdBV28yQWdBZ0FFRUFJQUJCQ0dvaUFHdEJCM0ZCQUNBQVFRZHhHMm9pQ0NBRGFpRUhJQVZCQUNBRlFRaHFJZ0JyUVFkeFFRQWdBRUVIY1J0cUlnRWdDR3NnQTJzaEJDQUlJQU5CQTNJMkFnUUNRQ0FHSUFGR0JFQkIzQ0ZCM0NFb0FnQWdCR29pQURZQ0FFSG9JU0FITmdJQUlBY2dBRUVCY2pZQ0JBVkI1Q0VvQWdBZ0FVWUVRRUhZSVVIWUlTZ0NBQ0FFYWlJQU5nSUFRZVFoSUFjMkFnQWdCeUFBUVFGeU5nSUVJQWNnQUdvZ0FEWUNBQXdDQ3lBQktBSUVJZ0JCQTNGQkFVWUVmeUFBUVhoeElRMGdBRUVEZGlFRkFrQWdBRUdBQWtrRVFDQUJLQUlNSVFNQ1FDQUJLQUlJSWdZZ0JVRURkRUg0SVdvaUFFY0VRQ0FDSUFaTEJFQVFCZ3NnQmlnQ0RDQUJSZzBCRUFZTEN5QURJQVpHQkVCQjBDRkIwQ0VvQWdCQkFTQUZkRUYvYzNFMkFnQU1BZ3NDUUNBRElBQkdCRUFnQTBFSWFpRVVCU0FDSUFOTEJFQVFCZ3NnQTBFSWFpSUFLQUlBSUFGR0JFQWdBQ0VVREFJTEVBWUxDeUFHSUFNMkFnd2dGQ0FHTmdJQUJTQUJLQUlZSVFvQ1FDQUJLQUlNSWdBZ0FVWUVRQ0FCUVJCcUlnTkJCR29pQmlnQ0FDSUFCRUFnQmlFREJTQURLQUlBSWdCRkRRSUxBMEFDUUNBQVFSUnFJZ1lvQWdBaUJVVUVRQ0FBUVJCcUlnWW9BZ0FpQlVVTkFRc2dCaUVESUFVaEFBd0JDd3NnQWlBRFN3UkFFQVlGSUFOQkFEWUNBQ0FBSVFrTEJTQUNJQUVvQWdnaUEwc0VRQkFHQ3lBRFFReHFJZ0lvQWdBZ0FVY0VRQkFHQ3lBQVFRaHFJZ1lvQWdBZ0FVWUVRQ0FDSUFBMkFnQWdCaUFETmdJQUlBQWhDUVVRQmdzTEN5QUtSUTBCQWtBZ0FTZ0NIQ0lBUVFKMFFZQWthaUlES0FJQUlBRkdCRUFnQXlBSk5nSUFJQWtOQVVIVUlVSFVJU2dDQUVFQklBQjBRWDl6Y1RZQ0FBd0RCVUhnSVNnQ0FDQUtTd1JBRUFZRklBcEJFR29pQUNBS1FSUnFJQUFvQWdBZ0FVWWJJQWsyQWdBZ0NVVU5CQXNMQzBIZ0lTZ0NBQ0lESUFsTEJFQVFCZ3NnQ1NBS05nSVlJQUZCRUdvaUFpZ0NBQ0lBQkVBZ0F5QUFTd1JBRUFZRklBa2dBRFlDRUNBQUlBazJBaGdMQ3lBQ0tBSUVJZ0JGRFFGQjRDRW9BZ0FnQUVzRVFCQUdCU0FKSUFBMkFoUWdBQ0FKTmdJWUN3c0xJQUVnRFdvaEFTQU5JQVJxQlNBRUN5RUNJQUZCQkdvaUFDQUFLQUlBUVg1eE5nSUFJQWNnQWtFQmNqWUNCQ0FISUFKcUlBSTJBZ0FnQWtFRGRpRURJQUpCZ0FKSkJFQWdBMEVEZEVINElXb2hBQUpBUWRBaEtBSUFJZ0ZCQVNBRGRDSURjUVJBUWVBaEtBSUFJQUJCQ0dvaUF5Z0NBQ0lCVFFSQUlBRWhEeUFESVJVTUFnc1FCZ1ZCMENFZ0FTQURjallDQUNBQUlROGdBRUVJYWlFVkN3c2dGU0FITmdJQUlBOGdCellDRENBSElBODJBZ2dnQnlBQU5nSU1EQUlMQW44Z0FrRUlkaUlBQkg5Qkh5QUNRZi8vL3dkTERRRWFJQUpCRGlBQUlBQkJnUDQvYWtFUWRrRUljU0lBZENJRFFZRGdIMnBCRUhaQkJIRWlBU0FBY2lBRElBRjBJZ0JCZ0lBUGFrRVFka0VDY1NJRGNtc2dBQ0FEZEVFUGRtb2lBRUVIYW5aQkFYRWdBRUVCZEhJRlFRQUxDeUlEUVFKMFFZQWthaUVBSUFjZ0F6WUNIQ0FIUVJCcUlnRkJBRFlDQkNBQlFRQTJBZ0JCMUNFb0FnQWlBVUVCSUFOMElnUnhSUVJBUWRRaElBRWdCSEkyQWdBZ0FDQUhOZ0lBSUFjZ0FEWUNHQ0FISUFjMkFnd2dCeUFITmdJSURBSUxBa0FnQUNnQ0FDSUFLQUlFUVhoeElBSkdCRUFnQUNFTEJTQUNRUUJCR1NBRFFRRjJheUFEUVI5R0czUWhBUU5BSUFCQkVHb2dBVUVmZGtFQ2RHb2lCQ2dDQUNJREJFQWdBVUVCZENFQklBTW9BZ1JCZUhFZ0FrWUVRQ0FESVFzTUJBVWdBeUVBREFJTEFBc0xRZUFoS0FJQUlBUkxCRUFRQmdVZ0JDQUhOZ0lBSUFjZ0FEWUNHQ0FISUFjMkFnd2dCeUFITmdJSURBUUxDd3RCNENFb0FnQWlBeUFMUVFocUlnRW9BZ0FpQUUwZ0F5QUxUWEVFUUNBQUlBYzJBZ3dnQVNBSE5nSUFJQWNnQURZQ0NDQUhJQXMyQWd3Z0IwRUFOZ0lZQlJBR0N3c0xJQTRrQmlBSVFRaHFEd3NMUVpBbElRSURRQUpBSUFJb0FnQWlCQ0FHVFFSQUlBUWdBaWdDQkdvaUJTQUdTdzBCQ3lBQ0tBSUlJUUlNQVFzTElBVkJVV29pQkVFSWFpRUNJQVlnQkVFQUlBSnJRUWR4UVFBZ0FrRUhjUnRxSWdJZ0FpQUdRUkJxSWdsSkd5SUNRUWhxSVFSQjZDRWdBRUVBSUFCQkNHb2lCMnRCQjNGQkFDQUhRUWR4R3lJSGFpSUtOZ0lBUWR3aElBRkJXR29pQ3lBSGF5SUhOZ0lBSUFvZ0IwRUJjallDQkNBQUlBdHFRU2cyQWdSQjdDRkJ1Q1VvQWdBMkFnQWdBa0VFYWlJSFFSczJBZ0FnQkVHUUpTa0NBRGNDQUNBRVFaZ2xLUUlBTndJSVFaQWxJQUEyQWdCQmxDVWdBVFlDQUVHY0pVRUFOZ0lBUVpnbElBUTJBZ0FnQWtFWWFpRUFBMEFnQUVFRWFpSUJRUWMyQWdBZ0FFRUlhaUFGU1FSQUlBRWhBQXdCQ3dzZ0FpQUdSd1JBSUFjZ0J5Z0NBRUYrY1RZQ0FDQUdJQUlnQm1zaUJFRUJjallDQkNBQ0lBUTJBZ0FnQkVFRGRpRUJJQVJCZ0FKSkJFQWdBVUVEZEVINElXb2hBRUhRSVNnQ0FDSUNRUUVnQVhRaUFYRUVRRUhnSVNnQ0FDQUFRUWhxSWdFb0FnQWlBa3NFUUJBR0JTQUNJUkVnQVNFV0N3VkIwQ0VnQWlBQmNqWUNBQ0FBSVJFZ0FFRUlhaUVXQ3lBV0lBWTJBZ0FnRVNBR05nSU1JQVlnRVRZQ0NDQUdJQUEyQWd3TUF3c2dCRUVJZGlJQUJIOGdCRUgvLy84SFN3Ui9RUjhGSUFSQkRpQUFJQUJCZ1A0L2FrRVFka0VJY1NJQWRDSUJRWURnSDJwQkVIWkJCSEVpQWlBQWNpQUJJQUowSWdCQmdJQVBha0VRZGtFQ2NTSUJjbXNnQUNBQmRFRVBkbW9pQUVFSGFuWkJBWEVnQUVFQmRISUxCVUVBQ3lJQlFRSjBRWUFrYWlFQUlBWWdBVFlDSENBR1FRQTJBaFFnQ1VFQU5nSUFRZFFoS0FJQUlnSkJBU0FCZENJRmNVVUVRRUhVSVNBQ0lBVnlOZ0lBSUFBZ0JqWUNBQ0FHSUFBMkFoZ2dCaUFHTmdJTUlBWWdCallDQ0F3REN3SkFJQUFvQWdBaUFDZ0NCRUY0Y1NBRVJnUkFJQUFoQ0FVZ0JFRUFRUmtnQVVFQmRtc2dBVUVmUmh0MElRSURRQ0FBUVJCcUlBSkJIM1pCQW5ScUlnVW9BZ0FpQVFSQUlBSkJBWFFoQWlBQktBSUVRWGh4SUFSR0JFQWdBU0VJREFRRklBRWhBQXdDQ3dBTEMwSGdJU2dDQUNBRlN3UkFFQVlGSUFVZ0JqWUNBQ0FHSUFBMkFoZ2dCaUFHTmdJTUlBWWdCallDQ0F3RkN3c0xRZUFoS0FJQUlnRWdDRUVJYWlJQ0tBSUFJZ0JOSUFFZ0NFMXhCRUFnQUNBR05nSU1JQUlnQmpZQ0FDQUdJQUEyQWdnZ0JpQUlOZ0lNSUFaQkFEWUNHQVVRQmdzTEJVSGdJU2dDQUNJQ1JTQUFJQUpKY2dSQVFlQWhJQUEyQWdBTFFaQWxJQUEyQWdCQmxDVWdBVFlDQUVHY0pVRUFOZ0lBUWZRaFFhZ2xLQUlBTmdJQVFmQWhRWDgyQWdCQmhDSkIrQ0UyQWdCQmdDSkIrQ0UyQWdCQmpDSkJnQ0kyQWdCQmlDSkJnQ0kyQWdCQmxDSkJpQ0kyQWdCQmtDSkJpQ0kyQWdCQm5DSkJrQ0kyQWdCQm1DSkJrQ0kyQWdCQnBDSkJtQ0kyQWdCQm9DSkJtQ0kyQWdCQnJDSkJvQ0kyQWdCQnFDSkJvQ0kyQWdCQnRDSkJxQ0kyQWdCQnNDSkJxQ0kyQWdCQnZDSkJzQ0kyQWdCQnVDSkJzQ0kyQWdCQnhDSkJ1Q0kyQWdCQndDSkJ1Q0kyQWdCQnpDSkJ3Q0kyQWdCQnlDSkJ3Q0kyQWdCQjFDSkJ5Q0kyQWdCQjBDSkJ5Q0kyQWdCQjNDSkIwQ0kyQWdCQjJDSkIwQ0kyQWdCQjVDSkIyQ0kyQWdCQjRDSkIyQ0kyQWdCQjdDSkI0Q0kyQWdCQjZDSkI0Q0kyQWdCQjlDSkI2Q0kyQWdCQjhDSkI2Q0kyQWdCQi9DSkI4Q0kyQWdCQitDSkI4Q0kyQWdCQmhDTkIrQ0kyQWdCQmdDTkIrQ0kyQWdCQmpDTkJnQ00yQWdCQmlDTkJnQ00yQWdCQmxDTkJpQ00yQWdCQmtDTkJpQ00yQWdCQm5DTkJrQ00yQWdCQm1DTkJrQ00yQWdCQnBDTkJtQ00yQWdCQm9DTkJtQ00yQWdCQnJDTkJvQ00yQWdCQnFDTkJvQ00yQWdCQnRDTkJxQ00yQWdCQnNDTkJxQ00yQWdCQnZDTkJzQ00yQWdCQnVDTkJzQ00yQWdCQnhDTkJ1Q00yQWdCQndDTkJ1Q00yQWdCQnpDTkJ3Q00yQWdCQnlDTkJ3Q00yQWdCQjFDTkJ5Q00yQWdCQjBDTkJ5Q00yQWdCQjNDTkIwQ00yQWdCQjJDTkIwQ00yQWdCQjVDTkIyQ00yQWdCQjRDTkIyQ00yQWdCQjdDTkI0Q00yQWdCQjZDTkI0Q00yQWdCQjlDTkI2Q00yQWdCQjhDTkI2Q00yQWdCQi9DTkI4Q00yQWdCQitDTkI4Q00yQWdCQjZDRWdBRUVBSUFCQkNHb2lBbXRCQjNGQkFDQUNRUWR4R3lJQ2FpSUVOZ0lBUWR3aElBRkJXR29pQVNBQ2F5SUNOZ0lBSUFRZ0FrRUJjallDQkNBQUlBRnFRU2cyQWdSQjdDRkJ1Q1VvQWdBMkFnQUxDMEhjSVNnQ0FDSUFJQU5MQkVCQjNDRWdBQ0FEYXlJQk5nSUFEQUlMQ3hCalFRdzJBZ0FnRGlRR1FRQVBDMEhvSVVIb0lTZ0NBQ0lBSUFOcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0EwRURjallDQkFzZ0RpUUdJQUJCQ0dvTHJSSUJFWDhnQUVVRVFBOExJQUJCZUdvaUJFSGdJU2dDQUNJTVNRUkFFQVlMSUFCQmZHb29BZ0FpQUVFRGNTSUxRUUZHQkVBUUJnc2dCQ0FBUVhoeElnSnFJUWNDUUNBQVFRRnhCRUFnQWlFQklBUWlBeUVGQlNBRUtBSUFJUWtnQzBVRVFBOExJQVFnQ1dzaUFDQU1TUVJBRUFZTElBa2dBbW9oQkVIa0lTZ0NBQ0FBUmdSQUlBZEJCR29pQVNnQ0FDSURRUU54UVFOSEJFQWdBQ0VESUFRaEFTQUFJUVVNQXd0QjJDRWdCRFlDQUNBQklBTkJmbkUyQWdBZ0FDQUVRUUZ5TmdJRUlBQWdCR29nQkRZQ0FBOExJQWxCQTNZaEFpQUpRWUFDU1FSQUlBQW9BZ3doQXlBQUtBSUlJZ1VnQWtFRGRFSDRJV29pQVVjRVFDQU1JQVZMQkVBUUJnc2dCU2dDRENBQVJ3UkFFQVlMQ3lBRElBVkdCRUJCMENGQjBDRW9BZ0JCQVNBQ2RFRi9jM0UyQWdBZ0FDRURJQVFoQVNBQUlRVU1Bd3NnQXlBQlJnUkFJQU5CQ0dvaEJnVWdEQ0FEU3dSQUVBWUxJQU5CQ0dvaUFTZ0NBQ0FBUmdSQUlBRWhCZ1VRQmdzTElBVWdBellDRENBR0lBVTJBZ0FnQUNFRElBUWhBU0FBSVFVTUFnc2dBQ2dDR0NFTkFrQWdBQ2dDRENJQ0lBQkdCRUFnQUVFUWFpSUdRUVJxSWdrb0FnQWlBZ1JBSUFraEJnVWdCaWdDQUNJQ1JRMENDd05BQWtBZ0FrRVVhaUlKS0FJQUlndEZCRUFnQWtFUWFpSUpLQUlBSWd0RkRRRUxJQWtoQmlBTElRSU1BUXNMSUF3Z0Jrc0VRQkFHQlNBR1FRQTJBZ0FnQWlFSUN3VWdEQ0FBS0FJSUlnWkxCRUFRQmdzZ0JrRU1haUlKS0FJQUlBQkhCRUFRQmdzZ0FrRUlhaUlMS0FJQUlBQkdCRUFnQ1NBQ05nSUFJQXNnQmpZQ0FDQUNJUWdGRUFZTEN3c2dEUVJBSUFBb0Fod2lBa0VDZEVHQUpHb2lCaWdDQUNBQVJnUkFJQVlnQ0RZQ0FDQUlSUVJBUWRRaFFkUWhLQUlBUVFFZ0FuUkJmM054TmdJQUlBQWhBeUFFSVFFZ0FDRUZEQVFMQlVIZ0lTZ0NBQ0FOU3dSQUVBWUZJQTFCRUdvaUFpQU5RUlJxSUFJb0FnQWdBRVliSUFnMkFnQWdDRVVFUUNBQUlRTWdCQ0VCSUFBaEJRd0ZDd3NMUWVBaEtBSUFJZ1lnQ0VzRVFCQUdDeUFJSUEwMkFoZ2dBRUVRYWlJSktBSUFJZ0lFUUNBR0lBSkxCRUFRQmdVZ0NDQUNOZ0lRSUFJZ0NEWUNHQXNMSUFrb0FnUWlBZ1JBUWVBaEtBSUFJQUpMQkVBUUJnVWdDQ0FDTmdJVUlBSWdDRFlDR0NBQUlRTWdCQ0VCSUFBaEJRc0ZJQUFoQXlBRUlRRWdBQ0VGQ3dVZ0FDRURJQVFoQVNBQUlRVUxDd3NnQlNBSFR3UkFFQVlMSUFkQkJHb2lCQ2dDQUNJQVFRRnhSUVJBRUFZTElBQkJBbkVFZnlBRUlBQkJmbkUyQWdBZ0F5QUJRUUZ5TmdJRUlBVWdBV29nQVRZQ0FDQUJCVUhvSVNnQ0FDQUhSZ1JBUWR3aFFkd2hLQUlBSUFGcUlnQTJBZ0JCNkNFZ0F6WUNBQ0FESUFCQkFYSTJBZ1FnQTBIa0lTZ0NBRWNFUUE4TFFlUWhRUUEyQWdCQjJDRkJBRFlDQUE4TFFlUWhLQUlBSUFkR0JFQkIyQ0ZCMkNFb0FnQWdBV29pQURZQ0FFSGtJU0FGTmdJQUlBTWdBRUVCY2pZQ0JDQUZJQUJxSUFBMkFnQVBDeUFBUVhoeElBRnFJUVFnQUVFRGRpRUdBa0FnQUVHQUFra0VRQ0FIS0FJTUlRRWdCeWdDQ0NJQ0lBWkJBM1JCK0NGcUlnQkhCRUJCNENFb0FnQWdBa3NFUUJBR0N5QUNLQUlNSUFkSEJFQVFCZ3NMSUFFZ0FrWUVRRUhRSVVIUUlTZ0NBRUVCSUFaMFFYOXpjVFlDQUF3Q0N5QUJJQUJHQkVBZ0FVRUlhaUVRQlVIZ0lTZ0NBQ0FCU3dSQUVBWUxJQUZCQ0dvaUFDZ0NBQ0FIUmdSQUlBQWhFQVVRQmdzTElBSWdBVFlDRENBUUlBSTJBZ0FGSUFjb0FoZ2hDQUpBSUFjb0Fnd2lBQ0FIUmdSQUlBZEJFR29pQVVFRWFpSUNLQUlBSWdBRVFDQUNJUUVGSUFFb0FnQWlBRVVOQWdzRFFBSkFJQUJCRkdvaUFpZ0NBQ0lHUlFSQUlBQkJFR29pQWlnQ0FDSUdSUTBCQ3lBQ0lRRWdCaUVBREFFTEMwSGdJU2dDQUNBQlN3UkFFQVlGSUFGQkFEWUNBQ0FBSVFvTEJVSGdJU2dDQUNBSEtBSUlJZ0ZMQkVBUUJnc2dBVUVNYWlJQ0tBSUFJQWRIQkVBUUJnc2dBRUVJYWlJR0tBSUFJQWRHQkVBZ0FpQUFOZ0lBSUFZZ0FUWUNBQ0FBSVFvRkVBWUxDd3NnQ0FSQUlBY29BaHdpQUVFQ2RFR0FKR29pQVNnQ0FDQUhSZ1JBSUFFZ0NqWUNBQ0FLUlFSQVFkUWhRZFFoS0FJQVFRRWdBSFJCZjNOeE5nSUFEQVFMQlVIZ0lTZ0NBQ0FJU3dSQUVBWUZJQWhCRUdvaUFDQUlRUlJxSUFBb0FnQWdCMFliSUFvMkFnQWdDa1VOQkFzTFFlQWhLQUlBSWdFZ0Nrc0VRQkFHQ3lBS0lBZzJBaGdnQjBFUWFpSUNLQUlBSWdBRVFDQUJJQUJMQkVBUUJnVWdDaUFBTmdJUUlBQWdDallDR0FzTElBSW9BZ1FpQUFSQVFlQWhLQUlBSUFCTEJFQVFCZ1VnQ2lBQU5nSVVJQUFnQ2pZQ0dBc0xDd3NMSUFNZ0JFRUJjallDQkNBRklBUnFJQVEyQWdBZ0EwSGtJU2dDQUVZRWYwSFlJU0FFTmdJQUR3VWdCQXNMSWdWQkEzWWhBU0FGUVlBQ1NRUkFJQUZCQTNSQitDRnFJUUJCMENFb0FnQWlCVUVCSUFGMElnRnhCRUJCNENFb0FnQWdBRUVJYWlJQktBSUFJZ1ZMQkVBUUJnVWdCU0VQSUFFaEVRc0ZRZEFoSUFVZ0FYSTJBZ0FnQUNFUElBQkJDR29oRVFzZ0VTQUROZ0lBSUE4Z0F6WUNEQ0FESUE4MkFnZ2dBeUFBTmdJTUR3c2dCVUVJZGlJQUJIOGdCVUgvLy84SFN3Ui9RUjhGSUFWQkRpQUFJQUJCZ1A0L2FrRVFka0VJY1NJQWRDSUJRWURnSDJwQkVIWkJCSEVpQkNBQWNpQUJJQVIwSWdCQmdJQVBha0VRZGtFQ2NTSUJjbXNnQUNBQmRFRVBkbW9pQUVFSGFuWkJBWEVnQUVFQmRISUxCVUVBQ3lJQlFRSjBRWUFrYWlFQUlBTWdBVFlDSENBRFFRQTJBaFFnQTBFQU5nSVFBa0JCMUNFb0FnQWlCRUVCSUFGMElnSnhCRUFDUUNBQUtBSUFJZ0FvQWdSQmVIRWdCVVlFUUNBQUlRNEZJQVZCQUVFWklBRkJBWFpySUFGQkgwWWJkQ0VFQTBBZ0FFRVFhaUFFUVI5MlFRSjBhaUlDS0FJQUlnRUVRQ0FFUVFGMElRUWdBU2dDQkVGNGNTQUZSZ1JBSUFFaERnd0VCU0FCSVFBTUFnc0FDd3RCNENFb0FnQWdBa3NFUUJBR0JTQUNJQU0yQWdBZ0F5QUFOZ0lZSUFNZ0F6WUNEQ0FESUFNMkFnZ01CQXNMQzBIZ0lTZ0NBQ0lCSUE1QkNHb2lCU2dDQUNJQVRTQUJJQTVOY1FSQUlBQWdBellDRENBRklBTTJBZ0FnQXlBQU5nSUlJQU1nRGpZQ0RDQURRUUEyQWhnRkVBWUxCVUhVSVNBRUlBSnlOZ0lBSUFBZ0F6WUNBQ0FESUFBMkFoZ2dBeUFETmdJTUlBTWdBellDQ0FzTFFmQWhRZkFoS0FJQVFYOXFJZ0EyQWdBZ0FBUkFEd3RCbUNVaEFBTkFJQUFvQWdBaUFVRUlhaUVBSUFFTkFBdEI4Q0ZCZnpZQ0FBdUFBUUVDZnlBQVJRUkFJQUVRWGc4TElBRkJ2MzlMQkVBUVkwRU1OZ0lBUVFBUEN5QUFRWGhxUVJBZ0FVRUxha0Y0Y1NBQlFRdEpHeEJoSWdJRVFDQUNRUWhxRHdzZ0FSQmVJZ0pGQkVCQkFBOExJQUlnQUNBQVFYeHFLQUlBSWdOQmVIRkJCRUVJSUFOQkEzRWJheUlESUFFZ0F5QUJTUnNRZVJvZ0FCQmZJQUlMbUFrQkRIOENRQ0FBSUFCQkJHb2lDaWdDQUNJSVFYaHhJZ0pxSVFVZ0NFRURjU0lKUVFGSFFlQWhLQUlBSWdzZ0FFMXhJQVVnQUV0eFJRUkFFQVlMSUFWQkJHb2lCeWdDQUNJRVFRRnhSUVJBRUFZTElBbEZCRUFnQVVHQUFra05BU0FDSUFGQkJHcFBCRUFnQWlBQmEwR3dKU2dDQUVFQmRFMEVRQ0FBRHdzTERBRUxJQUlnQVU4RVFDQUNJQUZySWdOQkQwMEVRQ0FBRHdzZ0NpQUlRUUZ4SUFGeVFRSnlOZ0lBSUFBZ0FXb2lBU0FEUVFOeU5nSUVJQWNnQnlnQ0FFRUJjallDQUNBQklBTVFZaUFBRHd0QjZDRW9BZ0FnQlVZRVFFSGNJU2dDQUNBQ2FpSURJQUZORFFFZ0NpQUlRUUZ4SUFGeVFRSnlOZ0lBSUFBZ0FXb2lBaUFESUFGcklnRkJBWEkyQWdSQjZDRWdBallDQUVIY0lTQUJOZ0lBSUFBUEMwSGtJU2dDQUNBRlJnUkFRZGdoS0FJQUlBSnFJZ0lnQVVrTkFTQUNJQUZySWdOQkQwc0VRQ0FLSUFoQkFYRWdBWEpCQW5JMkFnQWdBQ0FCYWlJQklBTkJBWEkyQWdRZ0FDQUNhaUlDSUFNMkFnQWdBa0VFYWlJQ0lBSW9BZ0JCZm5FMkFnQUZJQW9nQ0VFQmNTQUNja0VDY2pZQ0FDQUFJQUpxUVFScUlnRWdBU2dDQUVFQmNqWUNBRUVBSVFGQkFDRURDMEhZSVNBRE5nSUFRZVFoSUFFMkFnQWdBQThMSUFSQkFuRU5BQ0FFUVhoeElBSnFJZ3dnQVVrTkFDQU1JQUZySVEwZ0JFRURkaUVDQWtBZ0JFR0FBa2tFUUNBRktBSU1JUVlnQlNnQ0NDSUVJQUpCQTNSQitDRnFJZ2RIQkVBZ0N5QUVTd1JBRUFZTElBUW9BZ3dnQlVjRVFCQUdDd3NnQmlBRVJnUkFRZEFoUWRBaEtBSUFRUUVnQW5SQmYzTnhOZ0lBREFJTElBWWdCMFlFUUNBR1FRaHFJUU1GSUFzZ0Jrc0VRQkFHQ3lBR1FRaHFJZ0lvQWdBZ0JVWUVRQ0FDSVFNRkVBWUxDeUFFSUFZMkFnd2dBeUFFTmdJQUJTQUZLQUlZSVFrQ1FDQUZLQUlNSWdNZ0JVWUVRQ0FGUVJCcUlnSkJCR29pQkNnQ0FDSURCRUFnQkNFQ0JTQUNLQUlBSWdORkRRSUxBMEFDUUNBRFFSUnFJZ1FvQWdBaUIwVUVRQ0FEUVJCcUlnUW9BZ0FpQjBVTkFRc2dCQ0VDSUFjaEF3d0JDd3NnQ3lBQ1N3UkFFQVlGSUFKQkFEWUNBQ0FESVFZTEJTQUxJQVVvQWdnaUFrc0VRQkFHQ3lBQ1FReHFJZ1FvQWdBZ0JVY0VRQkFHQ3lBRFFRaHFJZ2NvQWdBZ0JVWUVRQ0FFSUFNMkFnQWdCeUFDTmdJQUlBTWhCZ1VRQmdzTEN5QUpCRUFnQlNnQ0hDSURRUUowUVlBa2FpSUNLQUlBSUFWR0JFQWdBaUFHTmdJQUlBWkZCRUJCMUNGQjFDRW9BZ0JCQVNBRGRFRi9jM0UyQWdBTUJBc0ZRZUFoS0FJQUlBbExCRUFRQmdVZ0NVRVFhaUlESUFsQkZHb2dBeWdDQUNBRlJoc2dCallDQUNBR1JRMEVDd3RCNENFb0FnQWlBaUFHU3dSQUVBWUxJQVlnQ1RZQ0dDQUZRUkJxSWdRb0FnQWlBd1JBSUFJZ0Ewc0VRQkFHQlNBR0lBTTJBaEFnQXlBR05nSVlDd3NnQkNnQ0JDSURCRUJCNENFb0FnQWdBMHNFUUJBR0JTQUdJQU0yQWhRZ0F5QUdOZ0lZQ3dzTEN3c2dEVUVRU1FSQUlBb2dDRUVCY1NBTWNrRUNjallDQUNBQUlBeHFRUVJxSWdFZ0FTZ0NBRUVCY2pZQ0FBVWdDaUFJUVFGeElBRnlRUUp5TmdJQUlBQWdBV29pQVNBTlFRTnlOZ0lFSUFBZ0RHcEJCR29pQXlBREtBSUFRUUZ5TmdJQUlBRWdEUkJpQ3lBQUR3dEJBQXZ4RUFFT2Z3SkFJQUFnQVdvaEJnSkFJQUFvQWdRaUIwRUJjUVJBSUFBaEFpQUJJUVFGSUFBb0FnQWhCU0FIUVFOeFJRUkFEd3NnQUNBRmF5SUFRZUFoS0FJQUlneEpCRUFRQmdzZ0JTQUJhaUVCUWVRaEtBSUFJQUJHQkVBZ0JrRUVhaUlFS0FJQUlnSkJBM0ZCQTBjRVFDQUFJUUlnQVNFRURBTUxRZGdoSUFFMkFnQWdCQ0FDUVg1eE5nSUFJQUFnQVVFQmNqWUNCQ0FHSUFFMkFnQVBDeUFGUVFOMklRY2dCVUdBQWtrRVFDQUFLQUlNSVFJZ0FDZ0NDQ0lGSUFkQkEzUkIrQ0ZxSWdSSEJFQWdEQ0FGU3dSQUVBWUxJQVVvQWd3Z0FFY0VRQkFHQ3dzZ0FpQUZSZ1JBUWRBaFFkQWhLQUlBUVFFZ0IzUkJmM054TmdJQUlBQWhBaUFCSVFRTUF3c2dBaUFFUmdSQUlBSkJDR29oQXdVZ0RDQUNTd1JBRUFZTElBSkJDR29pQkNnQ0FDQUFSZ1JBSUFRaEF3VVFCZ3NMSUFVZ0FqWUNEQ0FESUFVMkFnQWdBQ0VDSUFFaEJBd0NDeUFBS0FJWUlRb0NRQ0FBS0FJTUlnTWdBRVlFUUNBQVFSQnFJZ1ZCQkdvaUJ5Z0NBQ0lEQkVBZ0J5RUZCU0FGS0FJQUlnTkZEUUlMQTBBQ1FDQURRUlJxSWdjb0FnQWlDMFVFUUNBRFFSQnFJZ2NvQWdBaUMwVU5BUXNnQnlFRklBc2hBd3dCQ3dzZ0RDQUZTd1JBRUFZRklBVkJBRFlDQUNBRElRZ0xCU0FNSUFBb0FnZ2lCVXNFUUJBR0N5QUZRUXhxSWdjb0FnQWdBRWNFUUJBR0N5QURRUWhxSWdzb0FnQWdBRVlFUUNBSElBTTJBZ0FnQ3lBRk5nSUFJQU1oQ0FVUUJnc0xDeUFLQkVBZ0FDZ0NIQ0lEUVFKMFFZQWthaUlGS0FJQUlBQkdCRUFnQlNBSU5nSUFJQWhGQkVCQjFDRkIxQ0VvQWdCQkFTQURkRUYvYzNFMkFnQWdBQ0VDSUFFaEJBd0VDd1ZCNENFb0FnQWdDa3NFUUJBR0JTQUtRUkJxSWdNZ0NrRVVhaUFES0FJQUlBQkdHeUFJTmdJQUlBaEZCRUFnQUNFQ0lBRWhCQXdGQ3dzTFFlQWhLQUlBSWdVZ0NFc0VRQkFHQ3lBSUlBbzJBaGdnQUVFUWFpSUhLQUlBSWdNRVFDQUZJQU5MQkVBUUJnVWdDQ0FETmdJUUlBTWdDRFlDR0FzTElBY29BZ1FpQXdSQVFlQWhLQUlBSUFOTEJFQVFCZ1VnQ0NBRE5nSVVJQU1nQ0RZQ0dDQUFJUUlnQVNFRUN3VWdBQ0VDSUFFaEJBc0ZJQUFoQWlBQklRUUxDd3NnQmtIZ0lTZ0NBQ0lIU1FSQUVBWUxJQVpCQkdvaUFTZ0NBQ0lBUVFKeEJFQWdBU0FBUVg1eE5nSUFJQUlnQkVFQmNqWUNCQ0FDSUFScUlBUTJBZ0FGUWVnaEtBSUFJQVpHQkVCQjNDRkIzQ0VvQWdBZ0JHb2lBRFlDQUVIb0lTQUNOZ0lBSUFJZ0FFRUJjallDQkNBQ1FlUWhLQUlBUndSQUR3dEI1Q0ZCQURZQ0FFSFlJVUVBTmdJQUR3dEI1Q0VvQWdBZ0JrWUVRRUhZSVVIWUlTZ0NBQ0FFYWlJQU5nSUFRZVFoSUFJMkFnQWdBaUFBUVFGeU5nSUVJQUlnQUdvZ0FEWUNBQThMSUFCQmVIRWdCR29oQkNBQVFRTjJJUVVDUUNBQVFZQUNTUVJBSUFZb0Fnd2hBU0FHS0FJSUlnTWdCVUVEZEVINElXb2lBRWNFUUNBSElBTkxCRUFRQmdzZ0F5Z0NEQ0FHUndSQUVBWUxDeUFCSUFOR0JFQkIwQ0ZCMENFb0FnQkJBU0FGZEVGL2MzRTJBZ0FNQWdzZ0FTQUFSZ1JBSUFGQkNHb2hEZ1VnQnlBQlN3UkFFQVlMSUFGQkNHb2lBQ2dDQUNBR1JnUkFJQUFoRGdVUUJnc0xJQU1nQVRZQ0RDQU9JQU0yQWdBRklBWW9BaGdoQ0FKQUlBWW9BZ3dpQUNBR1JnUkFJQVpCRUdvaUFVRUVhaUlES0FJQUlnQUVRQ0FESVFFRklBRW9BZ0FpQUVVTkFnc0RRQUpBSUFCQkZHb2lBeWdDQUNJRlJRUkFJQUJCRUdvaUF5Z0NBQ0lGUlEwQkN5QURJUUVnQlNFQURBRUxDeUFISUFGTEJFQVFCZ1VnQVVFQU5nSUFJQUFoQ1FzRklBY2dCaWdDQ0NJQlN3UkFFQVlMSUFGQkRHb2lBeWdDQUNBR1J3UkFFQVlMSUFCQkNHb2lCU2dDQUNBR1JnUkFJQU1nQURZQ0FDQUZJQUUyQWdBZ0FDRUpCUkFHQ3dzTElBZ0VRQ0FHS0FJY0lnQkJBblJCZ0NScUlnRW9BZ0FnQmtZRVFDQUJJQWsyQWdBZ0NVVUVRRUhVSVVIVUlTZ0NBRUVCSUFCMFFYOXpjVFlDQUF3RUN3VkI0Q0VvQWdBZ0NFc0VRQkFHQlNBSVFSQnFJZ0FnQ0VFVWFpQUFLQUlBSUFaR0d5QUpOZ0lBSUFsRkRRUUxDMEhnSVNnQ0FDSUJJQWxMQkVBUUJnc2dDU0FJTmdJWUlBWkJFR29pQXlnQ0FDSUFCRUFnQVNBQVN3UkFFQVlGSUFrZ0FEWUNFQ0FBSUFrMkFoZ0xDeUFES0FJRUlnQUVRRUhnSVNnQ0FDQUFTd1JBRUFZRklBa2dBRFlDRkNBQUlBazJBaGdMQ3dzTEN5QUNJQVJCQVhJMkFnUWdBaUFFYWlBRU5nSUFJQUpCNUNFb0FnQkdCRUJCMkNFZ0JEWUNBQThMQ3lBRVFRTjJJUUVnQkVHQUFra0VRQ0FCUVFOMFFmZ2hhaUVBUWRBaEtBSUFJZ1JCQVNBQmRDSUJjUVJBUWVBaEtBSUFJQUJCQ0dvaUFTZ0NBQ0lFU3dSQUVBWUZJQVFoRFNBQklROExCVUhRSVNBRUlBRnlOZ0lBSUFBaERTQUFRUWhxSVE4TElBOGdBallDQUNBTklBSTJBZ3dnQWlBTk5nSUlJQUlnQURZQ0RBOExJQVJCQ0hZaUFBUi9JQVJCLy8vL0Iwc0VmMEVmQlNBRVFRNGdBQ0FBUVlEK1AycEJFSFpCQ0hFaUFIUWlBVUdBNEI5cVFSQjJRUVJ4SWdNZ0FISWdBU0FEZENJQVFZQ0FEMnBCRUhaQkFuRWlBWEpySUFBZ0FYUkJEM1pxSWdCQkIycDJRUUZ4SUFCQkFYUnlDd1ZCQUFzaUFVRUNkRUdBSkdvaEFDQUNJQUUyQWh3Z0FrRUFOZ0lVSUFKQkFEWUNFRUhVSVNnQ0FDSURRUUVnQVhRaUJYRkZCRUJCMUNFZ0F5QUZjallDQUNBQUlBSTJBZ0FNQVFzQ1FDQUFLQUlBSWdBb0FnUkJlSEVnQkVZRWZ5QUFCU0FFUVFCQkdTQUJRUUYyYXlBQlFSOUdHM1FoQXdOQUlBQkJFR29nQTBFZmRrRUNkR29pQlNnQ0FDSUJCRUFnQTBFQmRDRURJQUVvQWdSQmVIRWdCRVlOQXlBQklRQU1BUXNMUWVBaEtBSUFJQVZMQkVBUUJnc2dCU0FDTmdJQURBSUxJUUVMUWVBaEtBSUFJZ1FnQVVFSWFpSURLQUlBSWdCTklBUWdBVTF4UlFSQUVBWUxJQUFnQWpZQ0RDQURJQUkyQWdBZ0FpQUFOZ0lJSUFJZ0FUWUNEQ0FDUVFBMkFoZ1BDeUFDSUFBMkFoZ2dBaUFDTmdJTUlBSWdBallDQ0FzRkFFSEFKUXRRQVFKL0FuOGdBZ1IvQTBBZ0FDd0FBQ0lESUFFc0FBQWlCRVlFUUNBQVFRRnFJUUFnQVVFQmFpRUJRUUFnQWtGL2FpSUNSUTBER2d3QkN3c2dBMEgvQVhFZ0JFSC9BWEZyQlVFQUN3c2lBQXVwQVFFQ2Z5QUJRZjhIU2dSQUlBQkVBQUFBQUFBQTRIK2lJZ0JFQUFBQUFBQUE0SCtpSUFBZ0FVSCtEMG9pQWhzaEFDQUJRWUp3YWlJRFFmOEhJQU5CL3dkSUd5QUJRWUY0YWlBQ0d5RUJCU0FCUVlKNFNBUkFJQUJFQUFBQUFBQUFFQUNpSWdCRUFBQUFBQUFBRUFDaUlBQWdBVUdFY0VnaUFoc2hBQ0FCUWZ3UGFpSURRWUo0SUFOQmduaEtHeUFCUWY0SGFpQUNHeUVCQ3dzZ0FDQUJRZjhIYXExQ05JYS9vZ3VhQkFFSWZ5TUdJUW9qQmtIUUFXb2tCaUFLSWdkQndBRnFJZ1JDQVRjREFBSkFJQUlnQVd3aUN3UkFRUUFnQW1zaENTQUhJQUkyQWdRZ0J5QUNOZ0lBUVFJaEJpQUNJUVVnQWlFQkEwQWdCeUFHUVFKMGFpQUZJQUpxSUFGcUlnZzJBZ0FnQmtFQmFpRUdJQWdnQzBrRVFDQUJJUVVnQ0NFQkRBRUxDeUFBSUF0cUlBbHFJZ1lnQUVzRVFDQUdJUWhCQVNFQlFRRWhCUU5BSUFWQkEzRkJBMFlFZnlBQUlBSWdBeUFCSUFjUVp5QUVRUUlRYUNBQlFRSnFCU0FISUFGQmYyb2lCVUVDZEdvb0FnQWdDQ0FBYTBrRVFDQUFJQUlnQXlBQklBY1Fad1VnQUNBQ0lBTWdCQ0FCUVFBZ0J4QnBDeUFCUVFGR0JIOGdCRUVCRUdwQkFBVWdCQ0FGRUdwQkFRc0xJUUVnQkNBRUtBSUFRUUZ5SWdVMkFnQWdBQ0FDYWlJQUlBWkpEUUFMSUFFaEJnVkJBU0VHUVFFaEJRc2dBQ0FDSUFNZ0JDQUdRUUFnQnhCcElBUkJCR29oQ0NBQUlRRWdCaUVBQTBBQ2Z3SkFJQUJCQVVZZ0JVRUJSbkVFZnlBSUtBSUFSUTBGREFFRklBQkJBa2dOQVNBRVFRSVFhaUFFSUFRb0FnQkJCM00yQWdBZ0JFRUJFR2dnQVNBSElBQkJmbW9pQlVFQ2RHb29BZ0JySUFscUlBSWdBeUFFSUFCQmYycEJBU0FIRUdrZ0JFRUJFR29nQkNBRUtBSUFRUUZ5SWdZMkFnQWdBU0FKYWlJQklBSWdBeUFFSUFWQkFTQUhFR2tnQlNFQUlBWUxEQUVMSUFRZ0JCQnJJZ1VRYUNBQklBbHFJUUVnQlNBQWFpRUFJQVFvQWdBTElRVU1BQUFMQUFzTElBb2tCZ3ZnQVFFSWZ5TUdJUW9qQmtId0FXb2tCaUFLSWdnZ0FEWUNBQUpBSUFOQkFVb0VRRUVBSUFGcklRd2dBQ0VHSUFNaENVRUJJUU1nQUNFRkEwQWdCU0FHSUF4cUlnY2dCQ0FKUVg1cUlnWkJBblJxS0FJQWF5SUFJQUpCQTNFUkFBQkJmMG9FUUNBRklBY2dBa0VEY1JFQUFFRi9TZzBEQ3lBQUlBY2dBa0VEY1JFQUFFRi9TaUVGSUFnZ0EwRUNkR29oQ3lBRFFRRnFJUU1nQlFSL0lBc2dBRFlDQUNBSlFYOXFCU0FMSUFjMkFnQWdCeUVBSUFZTElnbEJBVW9FUUNBQUlRWWdDQ2dDQUNFRkRBRUxDd1ZCQVNFREN3c2dBU0FJSUFNUWJTQUtKQVlMV1FFRGZ5QUFRUVJxSVFJZ0FDQUJRUjlMQkg4Z0FDQUNLQUlBSWdNMkFnQWdBa0VBTmdJQUlBRkJZR29oQVVFQUJTQUFLQUlBSVFNZ0FpZ0NBQXNpQkVFZ0lBRnJkQ0FESUFGMmNqWUNBQ0FDSUFRZ0FYWTJBZ0FMalFNQkIzOGpCaUVLSXdaQjhBRnFKQVlnQ2tIb0FXb2lDU0FES0FJQUlnYzJBZ0FnQ1VFRWFpSU1JQU1vQWdRaUF6WUNBQ0FLSWdzZ0FEWUNBQUpBQWtBZ0IwRUJSeUFEY2dSQVFRQWdBV3NoRFNBQUlBWWdCRUVDZEdvb0FnQnJJZ2dnQUNBQ1FRTnhFUUFBUVFGSUJFQkJBU0VEQlVFQklRY2dCVVVoQlNBQUlRTWdDQ0VBQTBBZ0JTQUVRUUZLY1FSQUlBWWdCRUYrYWtFQ2RHb29BZ0FoQlNBRElBMXFJZ2dnQUNBQ1FRTnhFUUFBUVg5S0JFQWdCeUVGREFVTElBZ2dCV3NnQUNBQ1FRTnhFUUFBUVg5S0JFQWdCeUVGREFVTEN5QUhRUUZxSVFVZ0N5QUhRUUowYWlBQU5nSUFJQWtnQ1JCcklnTVFhQ0FESUFScUlRUWdDU2dDQUVFQlJ5QU1LQUlBUVFCSGNrVUVRQ0FBSVFNTUJBc2dBQ0FHSUFSQkFuUnFLQUlBYXlJSUlBc29BZ0FnQWtFRGNSRUFBRUVCU0FSL0lBVWhBMEVBQlNBQUlRTWdCU0VIUVFFaEJTQUlJUUFNQVFzaEJRc0xCVUVCSVFNTElBVkZCRUFnQXlFRklBQWhBd3dCQ3d3QkN5QUJJQXNnQlJCdElBTWdBU0FDSUFRZ0JoQm5DeUFLSkFZTFZ3RURmeUFBUVFScUlnSWdBVUVmU3dSL0lBSWdBQ2dDQUNJRE5nSUFJQUJCQURZQ0FDQUJRV0JxSVFGQkFBVWdBaWdDQUNFRElBQW9BZ0FMSWdSQklDQUJhM1lnQXlBQmRISTJBZ0FnQUNBRUlBRjBOZ0lBQ3ljQkFYOGdBQ2dDQUVGL2FoQnNJZ0VFZnlBQkJTQUFLQUlFRUd3aUFFRWdha0VBSUFBYkN3czVBUUovSUFBRVFDQUFRUUZ4UlFSQUEwQWdBVUVCYWlFQklBQkJBWFloQWlBQVFRSnhSUVJBSUFJaEFBd0JDd3NMQlVFZ0lRRUxJQUVMcEFFQkJYOGpCaUVGSXdaQmdBSnFKQVlnQlNFREFrQWdBa0VDVGdSQUlBRWdBa0VDZEdvaUJ5QUROZ0lBSUFBRVFBTkFJQU1nQVNnQ0FDQUFRWUFDSUFCQmdBSkpHeUlFRUhrYVFRQWhBd05BSUFFZ0EwRUNkR29pQmlnQ0FDQUJJQU5CQVdvaUEwRUNkR29vQWdBZ0JCQjVHaUFHSUFZb0FnQWdCR28yQWdBZ0F5QUNSdzBBQ3lBQUlBUnJJZ0JGRFFNZ0J5Z0NBQ0VEREFBQUN3QUxDd3NnQlNRR0MvNElBd2QvQVg0RWZDTUdJUWNqQmtFd2FpUUdJQWRCRUdvaEJDQUhJUVVnQUwwaUNVSS9pS2NoQmdKL0FrQWdDVUlnaUtjaUFrSC8vLy8vQjNFaUEwSDcxTDJBQkVrRWZ5QUNRZi8vUDNGQis4TWtSZzBCSUFaQkFFY2hBaUFEUWYyeWk0QUVTUVIvSUFJRWZ5QUJJQUJFQUFCQVZQc2grVCtnSWdCRU1XTmlHbUcwMEQyZ0lnbzVBd0FnQVNBQUlBcWhSREZqWWhwaHROQTlvRGtEQ0VGL0JTQUJJQUJFQUFCQVZQc2grYitnSWdCRU1XTmlHbUcwMEwyZ0lnbzVBd0FnQVNBQUlBcWhSREZqWWhwaHROQzlvRGtEQ0VFQkN3VWdBZ1IvSUFFZ0FFUUFBRUJVK3lFSlFLQWlBRVF4WTJJYVliVGdQYUFpQ2prREFDQUJJQUFnQ3FGRU1XTmlHbUcwNEQyZ09RTUlRWDRGSUFFZ0FFUUFBRUJVK3lFSndLQWlBRVF4WTJJYVliVGd2YUFpQ2prREFDQUJJQUFnQ3FGRU1XTmlHbUcwNEwyZ09RTUlRUUlMQ3dVZ0EwRzhqUEdBQkVrRVFDQURRYjM3MTRBRVNRUkFJQU5CL0xMTGdBUkdEUU1nQmdSQUlBRWdBRVFBQURCL2ZOa1NRS0FpQUVUS2xKT25rUTdwUGFBaUNqa0RBQ0FCSUFBZ0NxRkV5cFNUcDVFTzZUMmdPUU1JUVgwTUJRVWdBU0FBUkFBQU1IOTgyUkxBb0NJQVJNcVVrNmVSRHVtOW9DSUtPUU1BSUFFZ0FDQUtvVVRLbEpPbmtRN3B2YUE1QXdoQkF3d0ZDd0FGSUFOQis4UGtnQVJHRFFNZ0JnUkFJQUVnQUVRQUFFQlUreUVaUUtBaUFFUXhZMklhWWJUd1BhQWlDamtEQUNBQklBQWdDcUZFTVdOaUdtRzA4RDJnT1FNSVFYd01CUVVnQVNBQVJBQUFRRlQ3SVJuQW9DSUFSREZqWWhwaHRQQzlvQ0lLT1FNQUlBRWdBQ0FLb1VReFkySWFZYlR3dmFBNUF3aEJCQXdGQ3dBTEFBc2dBMEg3dytTSkJFa05BU0FEUWYvL3YvOEhTd1JBSUFFZ0FDQUFvU0lBT1FNSUlBRWdBRGtEQUVFQURBTUxJQWxDLy8vLy8vLy8vd2VEUW9DQWdJQ0FnSUN3d1FDRXZ5RUFRUUFoQWdOQUlBUWdBa0VEZEdvZ0FLcTNJZ281QXdBZ0FDQUtvVVFBQUFBQUFBQndRYUloQUNBQ1FRRnFJZ0pCQWtjTkFBc2dCQ0FBT1FNUUlBQkVBQUFBQUFBQUFBQmhCRUJCQVNFQ0EwQWdBa0YvYWlFSUlBUWdBa0VEZEdvckF3QkVBQUFBQUFBQUFBQmhCRUFnQ0NFQ0RBRUxDd1ZCQWlFQ0N5QUVJQVVnQTBFVWRrSHFkMm9nQWtFQmFrRUJFRzhoQWlBRkt3TUFJUUFnQmdSL0lBRWdBSm81QXdBZ0FTQUZLd01JbWprRENFRUFJQUpyQlNBQklBQTVBd0FnQVNBRkt3TUlPUU1JSUFJTEN3d0JDeUFBUklQSXlXMHdYK1Evb2tRQUFBQUFBQUE0UTZCRUFBQUFBQUFBT01PZ0lndXFJUUlnQVNBQUlBdEVBQUJBVlBzaCtUK2lvU0lLSUF0RU1XTmlHbUcwMEQyaUlnQ2hJZ3c1QXdBZ0EwRVVkaUlJSUF5OVFqU0lwMEgvRDNGclFSQktCRUFnQzBSemNBTXVpaG1qTzZJZ0NpQUtJQXRFQUFCZ0dtRzAwRDJpSWdDaElncWhJQUNob1NFQUlBRWdDaUFBb1NJTU9RTUFJQXRFd1VrZ0pacURlem1pSUFvZ0NpQUxSQUFBQUM2S0dhTTdvaUlOb1NJTG9TQU5vYUVoRFNBSUlBeTlRalNJcDBIL0QzRnJRVEZLQkVBZ0FTQUxJQTJoSWd3NUF3QWdEU0VBSUFzaENnc0xJQUVnQ2lBTW9TQUFvVGtEQ0NBQ0N5RUJJQWNrQmlBQkMvOFFBaFovQTN3akJpRVBJd1pCc0FScUpBWWdEMEhBQW1vaEVDQUNRWDFxUVJodElnVkJBQ0FGUVFCS0d5RVNJQVJCQW5SQm9CQnFLQUlBSWcwZ0EwRi9haUlIYWtFQVRnUkFJQTBnQTJvaENTQVNJQWRySVFVRFFDQVFJQVpCQTNScUlBVkJBRWdFZkVRQUFBQUFBQUFBQUFVZ0JVRUNkRUd3RUdvb0FnQzNDeUliT1FNQUlBVkJBV29oQlNBR1FRRnFJZ1lnQ1VjTkFBc0xJQTlCNEFOcUlRd2dEMEdnQVdvaENpQVBJUTRnQWtGb2FpQVNRV2hzSWhacUlRa2dBMEVBU2lFSVFRQWhCUU5BSUFnRVFDQUZJQWRxSVF0RUFBQUFBQUFBQUFBaEcwRUFJUVlEUUNBYklBQWdCa0VEZEdvckF3QWdFQ0FMSUFaclFRTjBhaXNEQUtLZ0lSc2dCa0VCYWlJR0lBTkhEUUFMQlVRQUFBQUFBQUFBQUNFYkN5QU9JQVZCQTNScUlCczVBd0FnQlVFQmFpRUdJQVVnRFVnRVFDQUdJUVVNQVFzTElBbEJBRW9oRTBFWUlBbHJJUlJCRnlBSmF5RVhJQWxGSVJnZ0EwRUFTaUVaSUEwaEJRSkFBa0FDUUFOQUlBNGdCVUVEZEdvckF3QWhHeUFGUVFCS0lnc0VRQ0FGSVFaQkFDRUhBMEFnRENBSFFRSjBhaUFiSUJ0RUFBQUFBQUFBY0Q2aXFyY2lHMFFBQUFBQUFBQndRYUtocWpZQ0FDQU9JQVpCZjJvaUNFRURkR29yQXdBZ0c2QWhHeUFIUVFGcUlRY2dCa0VCU2dSQUlBZ2hCZ3dCQ3dzTElCc2dDUkJsSWhzZ0cwUUFBQUFBQUFEQVA2S2NSQUFBQUFBQUFDQkFvcUVpRzZvaEJpQWJJQWEzb1NFYkFrQUNRQUpBSUJNRWZ5QU1JQVZCZjJwQkFuUnFJZ2dvQWdBaUVTQVVkU0VISUFnZ0VTQUhJQlIwYXlJSU5nSUFJQWdnRjNVaENDQUhJQVpxSVFZTUFRVWdHQVIvSUF3Z0JVRi9ha0VDZEdvb0FnQkJGM1VoQ0F3Q0JTQWJSQUFBQUFBQUFPQS9aZ1IvUVFJaENBd0VCVUVBQ3dzTElRZ01BZ3NnQ0VFQVNnMEFEQUVMSUFZaEJ5QUxCRUJCQUNFR1FRQWhDd05BSUF3Z0MwRUNkR29pR2lnQ0FDRVJBa0FDUUNBR0JIOUIvLy8vQnlFVkRBRUZJQkVFZjBFQklRWkJnSUNBQ0NFVkRBSUZRUUFMQ3lFR0RBRUxJQm9nRlNBUmF6WUNBQXNnQzBFQmFpSUxJQVZIRFFBTElBWWhDd1ZCQUNFTEN5QUhRUUZxSVFZQ1FDQVRCRUFDUUFKQUFrQWdDVUVCYXc0Q0FBRUNDeUFNSUFWQmYycEJBblJxSWdjZ0J5Z0NBRUgvLy84RGNUWUNBQXdEQ3lBTUlBVkJmMnBCQW5ScUlnY2dCeWdDQUVILy8vOEJjVFlDQUFzTEN5QUlRUUpHQkVCRUFBQUFBQUFBOEQ4Z0c2RWhHeUFMQkVBZ0cwUUFBQUFBQUFEd1B5QUpFR1doSVJzTFFRSWhDQXNMSUJ0RUFBQUFBQUFBQUFCaURRSWdCU0FOU2dSQVFRQWhDeUFGSVFjRFFDQU1JQWRCZjJvaUIwRUNkR29vQWdBZ0MzSWhDeUFISUExS0RRQUxJQXNOQWd0QkFTRUdBMEFnQmtFQmFpRUhJQXdnRFNBR2EwRUNkR29vQWdCRkJFQWdCeUVHREFFTEN5QUdJQVZxSVFjRFFDQVFJQVVnQTJvaUNFRURkR29nQlVFQmFpSUdJQkpxUVFKMFFiQVFhaWdDQUxjNUF3QWdHUVJBUkFBQUFBQUFBQUFBSVJ0QkFDRUZBMEFnR3lBQUlBVkJBM1JxS3dNQUlCQWdDQ0FGYTBFRGRHb3JBd0Npb0NFYklBVkJBV29pQlNBRFJ3MEFDd1ZFQUFBQUFBQUFBQUFoR3dzZ0RpQUdRUU4wYWlBYk9RTUFJQVlnQjBnRVFDQUdJUVVNQVFzTElBY2hCUXdBQUFzQUN5QUpJUUFEUUNBQVFXaHFJUUFnRENBRlFYOXFJZ1ZCQW5ScUtBSUFSUTBBQ3lBQUlRSWdCU0VBREFFTElBd2dHMEVBSUFsckVHVWlHMFFBQUFBQUFBQndRV1lFZnlBTUlBVkJBblJxSUJzZ0cwUUFBQUFBQUFCd1BxS3FJZ08zUkFBQUFBQUFBSEJCb3FHcU5nSUFJQllnQW1vaEFpQUZRUUZxQlNBSklRSWdHNm9oQXlBRkN5SUFRUUowYWlBRE5nSUFDMFFBQUFBQUFBRHdQeUFDRUdVaEd5QUFRWDlLSWdjRVFDQUFJUUlEUUNBT0lBSkJBM1JxSUJzZ0RDQUNRUUowYWlnQ0FMZWlPUU1BSUJ0RUFBQUFBQUFBY0Q2aUlSc2dBa0YvYWlFRElBSkJBRW9FUUNBRElRSU1BUXNMSUFjRVFDQUFJUUlEUUNBQUlBSnJJUWxCQUNFRFJBQUFBQUFBQUFBQUlSc0RRQ0FiSUFOQkEzUkJ3QkpxS3dNQUlBNGdBeUFDYWtFRGRHb3JBd0Npb0NFYklBTkJBV29oQlNBRElBMU9JQU1nQ1U5eVJRUkFJQVVoQXd3QkN3c2dDaUFKUVFOMGFpQWJPUU1BSUFKQmYyb2hBeUFDUVFCS0JFQWdBeUVDREFFTEN3c0xBa0FDUUFKQUFrQWdCQTRFQUFFQkFnTUxJQWNFUUVRQUFBQUFBQUFBQUNFYkEwQWdHeUFLSUFCQkEzUnFLd01Bb0NFYklBQkJmMm9oQWlBQVFRQktCRUFnQWlFQURBRUxDd1ZFQUFBQUFBQUFBQUFoR3dzZ0FTQWJtaUFiSUFnYk9RTUFEQUlMSUFjRVFFUUFBQUFBQUFBQUFDRWJJQUFoQWdOQUlCc2dDaUFDUVFOMGFpc0RBS0FoR3lBQ1FYOXFJUU1nQWtFQVNnUkFJQU1oQWd3QkN3c0ZSQUFBQUFBQUFBQUFJUnNMSUFFZ0d5QWJtaUFJUlNJRUd6a0RBQ0FLS3dNQUlCdWhJUnNnQUVFQlRnUkFRUUVoQWdOQUlCc2dDaUFDUVFOMGFpc0RBS0FoR3lBQ1FRRnFJUU1nQWlBQVJ3UkFJQU1oQWd3QkN3c0xJQUVnR3lBYm1pQUVHemtEQ0F3QkN5QUFRUUJLQkVBZ0NpQUFJZ0pCQTNScUt3TUFJUnNEUUNBS0lBSkJmMm9pQTBFRGRHb2lCQ3NEQUNJZElCdWdJUndnQ2lBQ1FRTjBhaUFiSUIwZ0hLR2dPUU1BSUFRZ0hEa0RBQ0FDUVFGS0JFQWdBeUVDSUJ3aEd3d0JDd3NnQUVFQlNpSUVCRUFnQ2lBQUlnSkJBM1JxS3dNQUlSc0RRQ0FLSUFKQmYyb2lBMEVEZEdvaUJTc0RBQ0lkSUJ1Z0lSd2dDaUFDUVFOMGFpQWJJQjBnSEtHZ09RTUFJQVVnSERrREFDQUNRUUpLQkVBZ0F5RUNJQndoR3d3QkN3c2dCQVJBUkFBQUFBQUFBQUFBSVJzRFFDQWJJQW9nQUVFRGRHb3JBd0NnSVJzZ0FFRi9haUVDSUFCQkFrb0VRQ0FDSVFBTUFRc0xCVVFBQUFBQUFBQUFBQ0ViQ3dWRUFBQUFBQUFBQUFBaEd3c0ZSQUFBQUFBQUFBQUFJUnNMSUFvckF3QWhIQ0FJQkVBZ0FTQWNtamtEQUNBQklBb3JBd2lhT1FNSUlBRWdHNW81QXhBRklBRWdIRGtEQUNBQklBb3JBd2c1QXdnZ0FTQWJPUU1RQ3dzZ0R5UUdJQVpCQjNFTGx3RUJBM3dnQUNBQW9pSURJQU1nQTZLaUlBTkVmTlhQV2pyWjVUMmlST3VjSzRybTVWcStvS0lnQXlBRFJIMytzVmZqSGNjK29rVFZZY0Vab0FFcXY2Q2lSS2I0RUJFUkVZRS9vS0FoQlNBRElBQ2lJUVFnQUNBRVJFbFZWVlZWVmNVL29pQURJQUZFQUFBQUFBQUE0RCtpSUFRZ0JhS2hvaUFCb2FDaElBUWdBeUFGb2tSSlZWVlZWVlhGdjZDaUlBQ2dJQUliSWdBTENBQWdBQ0FCRUdVTGxBRUJCSHdnQUNBQW9pSUNJQUtpSVFORUFBQUFBQUFBOEQ4Z0FrUUFBQUFBQUFEZ1A2SWlCS0VpQlVRQUFBQUFBQUR3UHlBRm9TQUVvU0FDSUFJZ0FpQUNSSkFWeXhtZ0Fmbytva1IzVWNFV2JNRld2NkNpUkV4VlZWVlZWYVUvb0tJZ0F5QURvaUFDUk1TeHRMMmU3aUUrSUFKRTFEaUl2dW42cUQyaW9hSkVyVktjZ0U5K2tyNmdvcUNpSUFBZ0FhS2hvS0FMeEFFQkEzOGpCaUVDSXdaQkVHb2tCaUFDSVFFQ2ZDQUF2VUlnaUtkQi8vLy8vd2R4SWdOQi9NT2svd05KQkh3Z0EwR2V3WnJ5QTBrRWZFUUFBQUFBQUFEd1B3VWdBRVFBQUFBQUFBQUFBQkJ5Q3dVZ0FDQUFvU0FEUWYvL3YvOEhTdzBCR2dKQUFrQUNRQUpBSUFBZ0FSQnVRUU54RGdNQUFRSURDeUFCS3dNQUlBRXJBd2dRY2d3RUN5QUJLd01BSUFFckF3aEJBUkJ3bWd3REN5QUJLd01BSUFFckF3Z1FjcG9NQWdzZ0FTc0RBQ0FCS3dNSVFRRVFjQXNMSVFBZ0FpUUdJQUFMeXdFQkEzOGpCaUVDSXdaQkVHb2tCaUFDSVFFQ1FDQUF2VUlnaUtkQi8vLy8vd2R4SWdOQi9NT2svd05KQkVBZ0EwR0FnTUR5QTA4RVFDQUFSQUFBQUFBQUFBQUFRUUFRY0NFQUN3VWdBMEgvLzcvL0Iwc0VRQ0FBSUFDaElRQU1BZ3NDUUFKQUFrQUNRQUpBSUFBZ0FSQnVRUU54RGdNQUFRSURDeUFCS3dNQUlBRXJBd2hCQVJCd0lRQU1CUXNnQVNzREFDQUJLd01JRUhJaEFBd0VDeUFCS3dNQUlBRXJBd2hCQVJCd21pRUFEQU1MSUFFckF3QWdBU3NEQ0JCeW1pRUFDd3NMSUFJa0JpQUFDNXNEQXdKL0FYNENmQ0FBdlNJRFFqK0lweUVCQW53Q2Z3SkFJQU5DSUlpblFmLy8vLzhIY1NJQ1FhckdtSVFFU3dSOElBTkMvLy8vLy8vLy8vLy9BSU5DZ0lDQWdJQ0FnUGovQUZZRVFDQUFEd3NnQUVUdk9mcitRaTZHUUdRRVFDQUFSQUFBQUFBQUFPQi9vZzhGSUFCRTByeDYzU3NqaHNCaklBQkVVVEF0MVJCSmg4QmpjVVVOQWtRQUFBQUFBQUFBQUNJQUR3c0FCU0FDUWNMYzJQNERTd1JBSUFKQnNjWEMvd05MRFFJZ0FVRUJjeUFCYXd3REN5QUNRWUNBd1BFRFN3UjhRUUFoQVNBQUJTQUFSQUFBQUFBQUFQQS9vQThMQ3d3Q0N5QUFSUDZDSzJWSEZmYy9vaUFCUVFOMFFZQVRhaXNEQUtDcUN5RUJJQUFnQWJjaUJFUUFBT0QrUWk3bVA2S2hJZ0FnQkVSMlBIazE3em5xUGFJaUJhRUxJUVFnQUNBRUlBUWdCQ0FFb2lJQUlBQWdBQ0FBSUFCRTBLUytjbWszWmo2aVJQRnIwc1ZCdmJ1K29LSkVMTjRscjJwV0VUK2dva1NUdmI0V2JNRm12NkNpUkQ1VlZWVlZWY1Uvb0tLaElnQ2lSQUFBQUFBQUFBQkFJQUNob3lBRm9hQkVBQUFBQUFBQThEK2dJUUFnQVVVRVFDQUFEd3NnQUNBQkVHVUxud01EQW44QmZnVjhJQUM5SWdOQ0lJaW5JUUVDZnlBRFFnQlRJZ0lnQVVHQWdNQUFTWElFZnlBRFF2Ly8vLy8vLy8vLy93Q0RRZ0JSQkVCRUFBQUFBQUFBOEw4Z0FDQUFvcU1QQ3lBQ1JRUkFJQUJFQUFBQUFBQUFVRU9pdlNJRFFpQ0lweUVCSUFOQy8vLy8vdytESVFOQnkzY01BZ3NnQUNBQW9VUUFBQUFBQUFBQUFLTVBCU0FCUWYvL3YvOEhTd1JBSUFBUEN5QURRdi8vLy84UGd5SURRZ0JSSUFGQmdJREEvd05HY1FSL1JBQUFBQUFBQUFBQUR3VkJnWGdMQ3dzaEFpQUJRZUsrSldvaUFVSC8vejl4UVo3Qm12OERhcTFDSUlZZ0E0Uy9SQUFBQUFBQUFQQy9vQ0lGSUFWRUFBQUFBQUFBNEQraW9pRUdJQVVnQlVRQUFBQUFBQUFBUUtDaklnY2dCNklpQ0NBSW9pRUVJQUlnQVVFVWRtcTNJZ0JFQUFEZy9rSXU1aitpSUFVZ0FFUjJQSGsxN3pucVBhSWdCeUFHSUFRZ0JDQUVSSi9HZU5BSm1zTS9va1N2ZUk0ZHhYSE1QNkNpUkFUNmw1bVptZGsvb0tJZ0NDQUVJQVFnQkVSRVVqN2ZFdkhDUDZKRTNnUExsbVJHeHorZ29rUlpreUtVSkVuU1A2Q2lSSk5WVlZWVlZlVS9vS0tnb0tLZ0lBYWhvS0FMOFE4REMzOENmZ2g4QWtBQ1FBSkFJQUc5SWcxQ0lJaW5JZ1ZCLy8vLy93ZHhJZ01nRGFjaUJuSkZCRUJFQUFBQUFBQUE4RDhQQ3lBQXZTSU9RaUNJcHlFSElBNm5JZ2hGSWdvZ0IwR0FnTUQvQTBaeEJFQkVBQUFBQUFBQThEOFBDeUFIUWYvLy8vOEhjU0lFUVlDQXdQOEhUUVJBSUFoQkFFY2dCRUdBZ01EL0IwWnhJQU5CZ0lEQS93ZExja1VFUUNBR1FRQkhJQU5CZ0lEQS93ZEdJZ3R4UlFSQUFrQUNRQUpBSUFkQkFFZ2lDVVVOQUNBRFFmLy8vNWtFU3dSL1FRSWhBZ3dCQlNBRFFmLy92LzhEU3dSL0lBTkJGSFloQWlBRFFmLy8vNGtFU3dSQVFRSWdCa0d6Q0NBQ2F5SUNkaUlNUVFGeGEwRUFJQXdnQW5RZ0JrWWJJUUlNQXdzZ0JnUi9RUUFGUVFJZ0EwR1RDQ0FDYXlJQ2RpSUdRUUZ4YTBFQUlBWWdBblFnQTBZYklRSU1CQXNGREFJTEN5RUNEQUlMSUFaRkRRQU1BUXNnQ3dSQUlBUkJnSURBZ0h4cUlBaHlSUVJBUkFBQUFBQUFBUEEvRHdzZ0JVRi9TaUVDSUFSQi8vKy8vd05MQkVBZ0FVUUFBQUFBQUFBQUFDQUNHdzhGUkFBQUFBQUFBQUFBSUFHYUlBSWJEd3NBQ3lBRFFZQ0F3UDhEUmdSQUlBQkVBQUFBQUFBQThEOGdBS01nQlVGL1Noc1BDeUFGUVlDQWdJQUVSZ1JBSUFBZ0FLSVBDeUFIUVg5S0lBVkJnSUNBL3dOR2NRUkFJQUNmRHdzTElBQ1pJUThnQ2dSQUlBUkZJQVJCZ0lDQWdBUnlRWUNBd1A4SFJuSUVRRVFBQUFBQUFBRHdQeUFQb3lBUElBVkJBRWdiSVFBZ0NVVUVRQ0FBRHdzZ0FpQUVRWUNBd0lCOGFuSUVRQ0FBbWlBQUlBSkJBVVliRHdzTUJRc0xBbndnQ1FSOEFrQUNRQUpBSUFJT0FnQUJBZ3NNQnd0RUFBQUFBQUFBOEw4TUFndEVBQUFBQUFBQThEOE1BUVZFQUFBQUFBQUE4RDhMQ3lFUkFud2dBMEdBZ0lDUEJFc0VmQ0FEUVlDQXdKOEVTd1JBSUFSQmdJREEvd05KQkVBakNrUUFBQUFBQUFBQUFDQUZRUUJJR3c4Rkl3cEVBQUFBQUFBQUFBQWdCVUVBU2hzUEN3QUxJQVJCLy8rLy93TkpCRUFnRVVTY2RRQ0lQT1EzZnFKRW5IVUFpRHprTjM2aUlCRkVXZlA0d2g5dXBRR2lSRm56K01JZmJxVUJvaUFGUVFCSUd3OExJQVJCZ0lEQS93Tk5CRUFnRDBRQUFBQUFBQUR3djZBaUFFUUFBQUJnUnhYM1A2SWlFQ0FBUkVUZlhmZ0xybFErb2lBQUlBQ2lSQUFBQUFBQUFPQS9JQUJFVlZWVlZWVlYxVDhnQUVRQUFBQUFBQURRUDZLaG9xR2lSUDZDSzJWSEZmYy9vcUVpQUtDOVFvQ0FnSUJ3Zzc4aUVpRVBJQklnRUtFTUFnc2dFVVNjZFFDSVBPUTNmcUpFbkhVQWlEemtOMzZpSUJGRVdmUDR3aDl1cFFHaVJGbnorTUlmYnFVQm9pQUZRUUJLR3c4RklBOUVBQUFBQUFBQVFFT2lJZ0M5UWlDSXB5QUVJQVJCZ0lEQUFFa2lCUnNoQWtITWQwR0JlQ0FGR3lBQ1FSUjFhaUVESUFKQi8vOC9jU0lFUVlDQXdQOERjaUVDSUFSQmo3RU9TUVJBUVFBaEJBVWdCRUg2N0M1SklnWWhCQ0FESUFaQkFYTkJBWEZxSVFNZ0FpQUNRWUNBUUdvZ0Joc2hBZ3NnQkVFRGRFR3dFMm9yQXdBaUZDQUNyVUlnaGlBQUlBOGdCUnU5UXYvLy8vOFBnNFMvSWhBZ0JFRURkRUdRRTJvckF3QWlFcUVpRTBRQUFBQUFBQUR3UHlBU0lCQ2dveUlWb2lJUHZVS0FnSUNBY0lPL0lnQWdBQ0FBb2lJV1JBQUFBQUFBQUFoQW9DQVBJQUNnSUJVZ0V5QUNRUUYxUVlDQWdJQUNja0dBZ0NCcUlBUkJFblJxclVJZ2hyOGlFeUFBb3FFZ0VDQVRJQktob1NBQW9xR2lJaENpSUE4Z0Q2SWlBQ0FBb2lBQUlBQWdBQ0FBSUFCRTcwNUZTaWgreWoraVJHWGJ5Wk5LaHMwL29LSkVBVUVkcVdCMDBUK2dva1JOSm85UlZWWFZQNkNpUlArcmI5dTJiZHMvb0tKRUF6TXpNek16NHorZ29xQWlFcUM5UW9DQWdJQndnNzhpQUtJaUV5QVFJQUNpSUE4Z0VpQUFSQUFBQUFBQUFBakFvQ0FXb2FHaW9DSVBvTDFDZ0lDQWdIQ0R2eUlBUkFBQUFPQUp4KzQvb2lJUUlBUkJBM1JCb0JOcUt3TUFJQThnQUNBVG9hRkUvUU02M0FuSDdqK2lJQUJFOVFGYkZPQXZQajZpb2FBaUFLQ2dJQU8zSWhLZ3ZVS0FnSUNBY0lPL0loTWhEeUFUSUJLaElCU2hJQkNoQ3dzaEVDQUFJQkNoSUFHaUlBRWdEVUtBZ0lDQWNJTy9JZ0NoSUEraW9DRUJJQThnQUtJaUFDQUJvQ0lQdlNJTlFpQ0lweUVDSUEybklRTWdBa0gvLzcrRUJFb0VRQ0FDUVlDQXdQdDdhaUFEY2lBQlJQNkNLMlZIRlpjOG9DQVBJQUNoWkhJTkJnVWdBa0dBK1AvL0IzRkIvNWZEaEFSTEJFQWdBa0dBNkx6N0Eyb2dBM0lnQVNBUElBQ2haWElOQmdzTElCRWdBa0gvLy8vL0IzRWlBMEdBZ0lEL0Ewc0VmeUFBUVlDQVFFR0FnTUFBSUFOQkZIWkJnbmhxZGlBQ2FpSURRUlIyUWY4UGNTSUVRWUY0YW5VZ0EzR3RRaUNHdjZFaUR5RUFJQUVnRDZDOUlRMUJBQ0FEUWYvL1AzRkJnSURBQUhKQmt3Z2dCR3QySWdOcklBTWdBa0VBU0JzRlFRQUxJZ0pCRkhSRUFBQUFBQUFBOEQ4Z0RVS0FnSUNBY0lPL0lnOUVBQUFBQUVNdTVqK2lJaEFnQVNBUElBQ2hvVVR2T2ZyK1FpN21QNklnRDBRNWJLZ01ZVndnUHFLaElnK2dJZ0FnQUNBQUlBQ2lJZ0VnQVNBQklBRWdBVVRRcEw1eWFUZG1QcUpFOFd2U3hVRzl1NzZnb2tRczNpV3ZhbFlSUDZDaVJKTzl2aFpzd1dhL29LSkVQbFZWVlZWVnhUK2dvcUVpQWFJZ0FVUUFBQUFBQUFBQXdLQ2pJQThnQUNBUW9hRWlBU0FBSUFHaW9LRWdBS0doSWdDOUlnMUNJSWluYWlJRFFZQ0F3QUJJQkh3Z0FDQUNFR1VGSUFPdFFpQ0dJQTFDLy8vLy93K0RoTDhMSWdDaUR3c0xDeUFBSUFHZ0R3c2dBQ0FBb1NJQUlBQ2pEd3NnRVVSWjgvakNIMjZsQWFKRVdmUDR3aDl1cFFHaUR3c2dFVVNjZFFDSVBPUTNmcUpFbkhVQWlEemtOMzZpQ3dNQUFRdkRBd0VEZnlBQ1FZREFBRTRFUUNBQUlBRWdBaEFIRHdzZ0FDRUVJQUFnQW1vaEF5QUFRUU54SUFGQkEzRkdCRUFEUUNBQVFRTnhCRUFnQWtVRVFDQUVEd3NnQUNBQkxBQUFPZ0FBSUFCQkFXb2hBQ0FCUVFGcUlRRWdBa0VCYXlFQ0RBRUxDeUFEUVh4eElnSkJRR29oQlFOQUlBQWdCVXdFUUNBQUlBRW9BZ0EyQWdBZ0FDQUJLQUlFTmdJRUlBQWdBU2dDQ0RZQ0NDQUFJQUVvQWd3MkFnd2dBQ0FCS0FJUU5nSVFJQUFnQVNnQ0ZEWUNGQ0FBSUFFb0FoZzJBaGdnQUNBQktBSWNOZ0ljSUFBZ0FTZ0NJRFlDSUNBQUlBRW9BaVEyQWlRZ0FDQUJLQUlvTmdJb0lBQWdBU2dDTERZQ0xDQUFJQUVvQWpBMkFqQWdBQ0FCS0FJME5nSTBJQUFnQVNnQ09EWUNPQ0FBSUFFb0FqdzJBandnQUVGQWF5RUFJQUZCUUdzaEFRd0JDd3NEUUNBQUlBSklCRUFnQUNBQktBSUFOZ0lBSUFCQkJHb2hBQ0FCUVFScUlRRU1BUXNMQlNBRFFRUnJJUUlEUUNBQUlBSklCRUFnQUNBQkxBQUFPZ0FBSUFBZ0FTd0FBVG9BQVNBQUlBRXNBQUk2QUFJZ0FDQUJMQUFET2dBRElBQkJCR29oQUNBQlFRUnFJUUVNQVFzTEN3TkFJQUFnQTBnRVFDQUFJQUVzQUFBNkFBQWdBRUVCYWlFQUlBRkJBV29oQVF3QkN3c2dCQXVZQWdFRWZ5QUFJQUpxSVFRZ0FVSC9BWEVoQVNBQ1FjTUFUZ1JBQTBBZ0FFRURjUVJBSUFBZ0FUb0FBQ0FBUVFGcUlRQU1BUXNMSUFSQmZIRWlCVUZBYWlFR0lBRWdBVUVJZEhJZ0FVRVFkSElnQVVFWWRISWhBd05BSUFBZ0Jrd0VRQ0FBSUFNMkFnQWdBQ0FETmdJRUlBQWdBellDQ0NBQUlBTTJBZ3dnQUNBRE5nSVFJQUFnQXpZQ0ZDQUFJQU0yQWhnZ0FDQUROZ0ljSUFBZ0F6WUNJQ0FBSUFNMkFpUWdBQ0FETmdJb0lBQWdBellDTENBQUlBTTJBakFnQUNBRE5nSTBJQUFnQXpZQ09DQUFJQU0yQWp3Z0FFRkFheUVBREFFTEN3TkFJQUFnQlVnRVFDQUFJQU0yQWdBZ0FFRUVhaUVBREFFTEN3c0RRQ0FBSUFSSUJFQWdBQ0FCT2dBQUlBQkJBV29oQUF3QkN3c2dCQ0FDYXd0VkFRSi9JQUJCQUVvakJTZ0NBQ0lCSUFCcUlnQWdBVWh4SUFCQkFFaHlCRUFRQXhwQkRCQUZRWDhQQ3lNRklBQTJBZ0FRQWlFQ0lBQWdBa29FUUJBQlJRUkFJd1VnQVRZQ0FFRU1FQVZCZnc4TEN5QUJDdzRBSUFFZ0FpQUFRUU54RVFBQUN3Z0FRUUFRQUVFQUN3dkFFUVFBUVlFSUM3WUtBUUlDQXdNREF3UUVCQVFFQkFRRUFBRUFBSUFBQUFCV0FBQUFRQUFBQUQ2MDVETUprZk16aTdJQk5Ed2dDalFqR2hNMFlLa2NOS2ZYSmpSTHJ6RTBVRHM5TkhDSFNUUWpvRlkwdUpKa05GVnRjelNJbjRFMC9BdUtOSk1Fa3pScGtwdzBNcittTkQrVnNUU1RINzAwNUduSk5LMkExalEyY2VRMHBrbnpOSWlNQVRYQTl3azFCdThTTlhaN0hEWEFwaVkxTjNzeE5kb0RQVFZlVEVrMU8yRldOYmxQWkRYOEpYTTFpbm1CTlliamlUVjgyWkkxaFdTY05WS09walV6WWJFMUplaThOZHd1eVRYT1FkWTFRUzdrTlZjQzh6V1BaZ0UyVDg4Sk52WERFamFZVFJ3MjZIVW1OakpITVRaMHpEdzJYaEZKTm1VaVZqYk9ER1EydU41eU5wZFRnVFljdTRrMmNxNlNOcTgybkRhQlhhWTJOUzJ4TnNld3ZEYms4OGcyQVFQV05tRHI0ellldS9JMm9rQUJOK3VtQ1RmeG1CSTN5UjhjTng1RkpqYzlFekUzSHBVOE4yL1dTRGVpNDFVMzk4bGpONG1YY2pldkxZRTN2cEtKTjNTRGtqZm1DSnczdml5bU4wZjVzRGQ1ZWJ3My9yaklOMGZFMVRlU3FPTTMrSFB5TjhBYUFUaVRmZ2s0K1cwU09BYnlHemhpRkNZNFZ0OHdPTmhkUERpU20wZzQ4cVJWT0RPSFl6aHVVSEk0MHdlQk9HdHFpVGlDV0pJNEt0dWJPQW44cFRob3hiQTRPMEs4T0NsK3lEaWdoZFU0MldYak9PZ3M4ampwOUFBNVJsWUpPUTVERWpsUnhCczV0ZU1sT1grck1EbWlKanc1eFdCSU9WTm1WVG1EUkdNNWFBbHlPUUhpZ0Rra1FvazVuUzJTT1h1dG16bGp5NlU1bVpHd09RMEx2RGxtUThnNUMwZlZPVElqNHpudDVmRTVIYzhBT2dVdUNUb3dHQkk2cVpZYk9oV3pKVHEzZHpBNmZPODdPZ29tU0RySEoxVTY1Z0ZqT25qQ2NUbzd2SUE2NlJtSk9zWUNranJiZjVzNnk1cWxPdGhkc0RydjA3czZzd2pJT29nSTFUcWY0T0k2QjUveE9seXBBRHZRQlFrN1h1MFJPdzlwR3p1RWdpVTcvVU13TzJlNE96dGg2MGM3VGVsVU8xMi9ZanVjZTNFN2Y1YUFPN3J4aUR2NTE1RTdSMUtiTzBGcXBUc25LckE3NHB5N094TE94enNYeXRRN0lKN2lPelZZOFR1bWd3QThwOTBJUEpqQ0VUeUNPeHM4QVZJbFBGUVFNRHhoZ1RzOHlMQkhQT1dxVkR6b2ZHSTgxRFJ4UE05d2dEeVd5WWc4T3EyUlBNQWttenpGT2FVOGhmYXZQT1ZsdXp5Q2s4Yzh1WXZVUExSYjRqeDVFZkU4KzEwQVBZbTFDRDNmbHhFOUFnNGJQWTBoSlQyNTNDODliVW83UFVCMlJ6MlJiRlE5aFRwaVBTTHVjRDBxUzRBOWY2R0lQWWlDa1QxSTk1bzlXQW1sUGZMQ3J6MzRMcnM5QTFuSFBXMU4xRDFjR2VJOTBjcndQVnM0QUQ1M2pRZytNMjBSUHBEZ0dqNG44U1ErTHFrdlBvY1RPejdLTzBjK1RTNVVQamY0WVQ2RXAzQStqeVdBUG5ONWlEN2lWNUUrM01tYVB2bllwRDV0ajY4K0cvaTZQcFVleHo0ekQ5UStGOWZoUGoyRThEN0dFZ0EvY21VSVA1TkNFVDhyc3hvL3pzQWtQN0YxTHoreTNEby9aUUZIUHgzd1V6Lzd0V0UvKzJCd1B3QUFnRDhEQUFBQUJBQUFBQVFBQUFBR0FBQUFnL21pQUVST2JnRDhLUlVBMFZjbkFOMDA5UUJpMjhBQVBKbVZBRUdRUXdCalVmNEF1OTZyQUxkaHhRQTZiaVFBMGsxQ0FFa0c0QUFKNmk0QUhKTFJBT3NkL2dBcHNSd0E2RDZuQVBVMWdnQkV1eTRBbk9tRUFMUW1jQUJCZmw4QTFwRTVBRk9ET1FDYzlEa0FpMStFQUNqNXZRRDRIenNBM3YrWEFBK1lCUUFSTCs4QUNscUxBRzBmYlFEUGZqWUFDY3NuQUVaUHR3Q2VaajhBTGVwZkFMb25kUURsNjhjQVBYdnhBUGM1QndDU1Vvb0ErMnZxQUIreFh3QUlYWTBBTUFOV0FIdjhSZ0R3cTJzQUlMelBBRGIwbWdEanFSMEFYbUdSQUFnYjVnQ0ZtV1VBb0JSZkFJMUFhQUNBMlA4QUozTk5BQVlHTVFES1ZoVUF5YWh6QUh2aVlBQnJqTUFBUWNNU0MxMUEreUg1UHdBQUFBQXRSSFErQUFBQWdKaEcrRHdBQUFCZ1VjeDRPd0FBQUlDREcvQTVBQUFBUUNBbGVqZ0FBQUNBSW9Mak5nQUFBQUFkODJrMUFBQUFBQUFBNEQ4QUFBQUFBQURndndBQUFBQUFBUEEvQUFBQUFBQUErRDhBUWFnVEN3Z0cwTTlENi8xTVBnQkJ1eE1MaWdaQUE3amlQMDluWjFNdUwzTjBZbDkyYjNKaWFYTXVZd0JtTFQ1aGJHeHZZeTVoYkd4dlkxOWlkV1ptWlhKZmJHVnVaM1JvWDJsdVgySjVkR1Z6SUQwOUlHWXRQblJsYlhCZmIyWm1jMlYwQUhadmNtSnBjMTlrWldOdlpHVmZhVzVwZEdsaGJBQm1MVDVpZVhSbGMxOXBibDl6WldjZ1BpQXdBR2RsZERoZmNHRmphMlYwWDNKaGR3Qm1MVDVpZVhSbGMxOXBibDl6WldjZ1BUMGdNQUJ1WlhoMFgzTmxaMjFsYm5RQWRtOXlZbWx6WDJSbFkyOWtaVjl3WVdOclpYUmZjbVZ6ZEFBaFl5MCtjM0JoY25ObEFHTnZaR1ZpYjI5clgyUmxZMjlrWlY5elkyRnNZWEpmY21GM0FDRmpMVDV6Y0dGeWMyVWdmSHdnZWlBOElHTXRQbk52Y25SbFpGOWxiblJ5YVdWekFHTnZaR1ZpYjI5clgyUmxZMjlrWlY5a1pXbHVkR1Z5YkdWaGRtVmZjbVZ3WldGMEFIb2dQQ0JqTFQ1emIzSjBaV1JmWlc1MGNtbGxjd0JqYjJSbFltOXZhMTlrWldOdlpHVmZjM1JoY25RQUtHNGdKaUF6S1NBOVBTQXdBR2x0WkdOMFgzTjBaWEF6WDJsMFpYSXdYMnh2YjNBQU1BQm5aWFJmZDJsdVpHOTNBR1l0UG5SbGJYQmZiMlptYzJWMElEMDlJR1l0UG1Gc2JHOWpMbUZzYkc5algySjFabVpsY2w5c1pXNW5kR2hmYVc1ZllubDBaWE1BYzNSaGNuUmZaR1ZqYjJSbGNnQjJiM0ppYVhOakxUNXpiM0owWldSZlpXNTBjbWxsY3lBOVBTQXdBR052YlhCMWRHVmZZMjlrWlhkdmNtUnpBSG9nUGowZ01DQW1KaUI2SUR3Z016SUFiR1Z1VzJsZElENDlJREFnSmlZZ2JHVnVXMmxkSUR3Z016SUFZWFpoYVd4aFlteGxXM2xkSUQwOUlEQUFheUE5UFNCakxUNXpiM0owWldSZlpXNTBjbWxsY3dCamIyMXdkWFJsWDNOdmNuUmxaRjlvZFdabWJXRnVBR010UG5OdmNuUmxaRjlqYjJSbGQyOXlaSE5iZUYwZ1BUMGdZMjlrWlFCc1pXNGdJVDBnVGs5ZlEwOUVSUUJwYm1Oc2RXUmxYMmx1WDNOdmNuUUFjRzkzS0NobWJHOWhkQ2tnY2lzeExDQmthVzBwSUQ0Z1pXNTBjbWxsY3dCc2IyOXJkWEF4WDNaaGJIVmxjd0FvYVc1MEtTQm1iRzl2Y2lod2IzY29LR1pzYjJGMEtTQnlMQ0JrYVcwcEtTQThQU0JsYm5SeWFXVnpBT29QQkc1aGJXVUI0ZzkrQUFWaFltOXlkQUVOWlc1c1lYSm5aVTFsYlc5eWVRSU9aMlYwVkc5MFlXeE5aVzF2Y25rREYyRmliM0owVDI1RFlXNXViM1JIY205M1RXVnRiM0o1QkE1ZlgxOWhjM05sY25SZlptRnBiQVVMWDE5ZmMyVjBSWEp5VG04R0JsOWhZbTl5ZEFjV1gyVnRjMk55YVhCMFpXNWZiV1Z0WTNCNVgySnBad2dRWDE5bmNtOTNWMkZ6YlUxbGJXOXllUWtLYzNSaFkydEJiR3h2WXdvSmMzUmhZMnRUWVhabEN3eHpkR0ZqYTFKbGMzUnZjbVVNRTJWemRHRmliR2x6YUZOMFlXTnJVM0JoWTJVTkNITmxkRlJvY21WM0RndHpaWFJVWlcxd1VtVjBNQThMWjJWMFZHVnRjRkpsZERBUUVWOXpkR0pmZG05eVltbHpYMk5zYjNObEVRNWZkbTl5WW1selgyUmxhVzVwZEJJTFgzTmxkSFZ3WDJaeVpXVVRHbDl6ZEdKZmRtOXlZbWx6WDJac2RYTm9YM0IxYzJoa1lYUmhGQ0ZmYzNSaVgzWnZjbUpwYzE5a1pXTnZaR1ZmWm5KaGJXVmZjSFZ6YUdSaGRHRVZCbDlsY25KdmNoWWdYM1p2Y21KcGMxOXpaV0Z5WTJoZlptOXlYM0JoWjJWZmNIVnphR1JoZEdFWEdGOXBjMTkzYUc5c1pWOXdZV05yWlhSZmNISmxjMlZ1ZEJnVlgzWnZjbUpwYzE5a1pXTnZaR1ZmY0dGamEyVjBHUXhmWjJWME9GOXdZV05yWlhRYUZGOTJiM0ppYVhOZlptbHVhWE5vWDJaeVlXMWxHeGxmYzNSaVgzWnZjbUpwYzE5dmNHVnVYM0IxYzJoa1lYUmhIQXhmZG05eVltbHpYMmx1YVhRZERsOXpkR0Z5ZEY5a1pXTnZaR1Z5SGcxZmRtOXlZbWx6WDJGc2JHOWpIeHRmYzNSaVgzWnZjbUpwYzE5blpYUmZabWxzWlY5dlptWnpaWFFnRTE5dFlYbGlaVjl6ZEdGeWRGOXdZV05yWlhRaERWOW1iSFZ6YUY5d1lXTnJaWFFpQlY5blpYUnVJd1pmWjJWME16SWtFMTl6ZEdKZmRtOXlZbWx6WDJwelgyOXdaVzRsRkY5emRHSmZkbTl5WW1selgycHpYMk5zYjNObEpoZGZjM1JpWDNadmNtSnBjMTlxYzE5amFHRnVibVZzY3ljYVgzTjBZbDkyYjNKaWFYTmZhbk5mYzJGdGNHeGxYM0poZEdVb0ZWOXpkR0pmZG05eVltbHpYMnB6WDJSbFkyOWtaU2tOWDJOeVl6TXlYM1Z3WkdGMFpTb1dYM1p2Y21KcGMxOWtaV052WkdWZmFXNXBkR2xoYkNzYVgzWnZjbUpwYzE5a1pXTnZaR1ZmY0dGamEyVjBYM0psYzNRc0NWOW5aWFJmWW1sMGN5MEZYMmxzYjJjdUVGOW5aWFE0WDNCaFkydGxkRjl5WVhjdkRWOXVaWGgwWDNObFoyMWxiblF3QlY5blpYUTRNUXRmYzNSaGNuUmZjR0ZuWlRJUVgyTmhjSFIxY21WZmNHRjBkR1Z5YmpNZFgzTjBZWEowWDNCaFoyVmZibTlmWTJGd2RIVnlaWEJoZEhSbGNtNDBEVjl3Y21Wd1gyaDFabVp0WVc0MUcxOWpiMlJsWW05dmExOWtaV052WkdWZmMyTmhiR0Z5WDNKaGR6WU9YM0J5WldScFkzUmZjRzlwYm5RM0QxOWtaV052WkdWZmNtVnphV1IxWlRnSlgyUnZYMlpzYjI5eU9RMWZhVzUyWlhKelpWOXRaR04wT2d4ZlltbDBYM0psZG1WeWMyVTdFVjl0WVd0bFgySnNiMk5yWDJGeWNtRjVQQkpmYzJWMGRYQmZkR1Z0Y0Y5dFlXeHNiMk05SkY5amIyUmxZbTl2YTE5a1pXTnZaR1ZmWkdWcGJuUmxjbXhsWVhabFgzSmxjR1ZoZEQ0UFgzSmxjMmxrZFdWZlpHVmpiMlJsUHhWZlkyOWtaV0p2YjJ0ZlpHVmpiMlJsWDNOMFpYQkFFRjlqYjJSbFltOXZhMTlrWldOdlpHVkJGbDlqYjJSbFltOXZhMTlrWldOdlpHVmZjM1JoY25SQ0NsOWtjbUYzWDJ4cGJtVkRGMTlwYldSamRGOXpkR1Z3TTE5cGRHVnlNRjlzYjI5d1JCbGZhVzFrWTNSZmMzUmxjRE5mYVc1dVpYSmZjbDlzYjI5d1JSbGZhVzFrWTNSZmMzUmxjRE5mYVc1dVpYSmZjMTlzYjI5d1JoOWZhVzFrWTNSZmMzUmxjRE5mYVc1dVpYSmZjMTlzYjI5d1gyeGtOalUwUndoZmFYUmxjbDgxTkVnTFgyZGxkRjkzYVc1a2IzZEpFRjkyYjNKaWFYTmZkbUZzYVdSaGRHVktEVjl6ZEdGeWRGOXdZV05yWlhSTEJWOXphMmx3VEF0ZlkzSmpNekpmYVc1cGRFME5YM05sZEhWd1gyMWhiR3h2WTA0UVgzTmxkSFZ3WDNSbGJYQmZabkpsWlU4U1gyTnZiWEIxZEdWZlkyOWtaWGR2Y21SelVCZGZZMjl0Y0hWMFpWOXpiM0owWldSZmFIVm1abTFoYmxFY1gyTnZiWEIxZEdWZllXTmpaV3hsY21GMFpXUmZhSFZtWm0xaGJsSVBYMlpzYjJGME16SmZkVzV3WVdOclV3OWZiRzl2YTNWd01WOTJZV3gxWlhOVURsOXdiMmx1ZEY5amIyMXdZWEpsVlFwZmJtVnBaMmhpYjNKelZnOWZhVzVwZEY5aWJHOWphM05wZW1WWENsOWhaR1JmWlc1MGNubFlFRjlwYm1Oc2RXUmxYMmx1WDNOdmNuUlpEMTkxYVc1ME16SmZZMjl0Y0dGeVpWb1lYMk52YlhCMWRHVmZkSGRwWkdSc1pWOW1ZV04wYjNKeld3OWZZMjl0Y0hWMFpWOTNhVzVrYjNkY0UxOWpiMjF3ZFhSbFgySnBkSEpsZG1WeWMyVmRCMTl6Y1hWaGNtVmVCMTl0WVd4c2IyTmZCVjltY21WbFlBaGZjbVZoYkd4dlkyRVNYM1J5ZVY5eVpXRnNiRzlqWDJOb2RXNXJZZzVmWkdsemNHOXpaVjlqYUhWdWEyTVJYMTlmWlhKeWJtOWZiRzlqWVhScGIyNWtCMTl0WlcxamJYQmxCMTl6WTJGc1ltNW1CbDl4YzI5eWRHY0ZYM05wWm5Sb0JGOXphSEpwQ0Y5MGNtbHVhMnhsYWdSZmMyaHNhd1ZmY0c1MGVtd0lYMkZmWTNSNlgyeHRCbDlqZVdOc1pXNExYMTlmY21WdFgzQnBiekp2RVY5ZlgzSmxiVjl3YVc4eVgyeGhjbWRsY0FaZlgxOXphVzV4Qmw5c1pHVjRjSElHWDE5ZlkyOXpjd1JmWTI5emRBUmZjMmx1ZFFSZlpYaHdkZ1JmYkc5bmR3UmZjRzkzZUF0eWRXNVFiM04wVTJWMGMza0hYMjFsYldOd2VYb0hYMjFsYlhObGRIc0ZYM05pY210OEMyUjVia05oYkd4ZmFXbHBmUUppTUE9PSIpLGZ1bmN0aW9uKGwpe3JldHVybiBsLmNoYXJDb2RlQXQoMCl9KTt2YXIgRT1FIT09dm9pZCAwP0U6e30sWD17fTtmb3IoZSBpbiBFKUUuaGFzT3duUHJvcGVydHkoZSkmJihYW2VdPUVbZV0pO0UuYXJndW1lbnRzPVtdLEUudGhpc1Byb2dyYW09Ii4vdGhpcy5wcm9ncmFtIixFLnF1aXQ9ZnVuY3Rpb24obCx1KXt0aHJvdyB1fSxFLnByZVJ1bj1bXSxFLnBvc3RSdW49W107dmFyIE89ITEsbkE9ITEsJD0hMSxWPSExO089dHlwZW9mIHdpbmRvdz09Im9iamVjdCIsbkE9dHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsJD10eXBlb2YgcHJvY2Vzcz09Im9iamVjdCImJnR5cGVvZiBKYT09ImZ1bmN0aW9uIiYmIU8mJiFuQSxWPSFPJiYhJCYmIW5BO3ZhciBxPSIiO2Z1bmN0aW9uIHoobCl7cmV0dXJuIEUubG9jYXRlRmlsZT9FLmxvY2F0ZUZpbGUobCxxKTpxK2x9JD8ocT0iLyIsRS5yZWFkPWZ1bmN0aW9uKHUsZil7dmFyIHc7cmV0dXJuIEF8fChBPXZvaWQgMCksdHx8KHQ9dm9pZCAwKSx1PXQubm9ybWFsaXplKHUpLHc9QS5yZWFkRmlsZVN5bmModSksZj93OncudG9TdHJpbmcoKX0sRS5yZWFkQmluYXJ5PWZ1bmN0aW9uKHUpe3ZhciBmPUUucmVhZCh1LCEwKTtyZXR1cm4gZi5idWZmZXJ8fChmPW5ldyBVaW50OEFycmF5KGYpKSxVQShmLmJ1ZmZlciksZn0scHJvY2Vzcy5hcmd2Lmxlbmd0aD4xJiYoRS50aGlzUHJvZ3JhbT1wcm9jZXNzLmFyZ3ZbMV0ucmVwbGFjZSgvXFwvZywiLyIpKSxFLmFyZ3VtZW50cz1wcm9jZXNzLmFyZ3Yuc2xpY2UoMiksdHlwZW9mIG1vZHVsZTwidSIscHJvY2Vzcy5vbigidW5jYXVnaHRFeGNlcHRpb24iLGZ1bmN0aW9uKGwpe2lmKCEobCBpbnN0YW5jZW9mIG90KSl0aHJvdyBsfSkscHJvY2Vzcy5vbigidW5oYW5kbGVkUmVqZWN0aW9uIixmdW5jdGlvbihsLHUpe3Byb2Nlc3MuZXhpdCgxKX0pLEUucXVpdD1mdW5jdGlvbihsKXtwcm9jZXNzLmV4aXQobCl9LEUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XSJ9KTpWPyh0eXBlb2YgcmVhZDwidSImJihFLnJlYWQ9ZnVuY3Rpb24odSl7cmV0dXJuIHJlYWQodSl9KSxFLnJlYWRCaW5hcnk9ZnVuY3Rpb24odSl7dmFyIGY7cmV0dXJuIHR5cGVvZiByZWFkYnVmZmVyPT0iZnVuY3Rpb24iP25ldyBVaW50OEFycmF5KHJlYWRidWZmZXIodSkpOihVQSh0eXBlb2YoZj1yZWFkKHUsImJpbmFyeSIpKT09Im9iamVjdCIpLGYpfSx0eXBlb2Ygc2NyaXB0QXJnczwidSI/RS5hcmd1bWVudHM9c2NyaXB0QXJnczp0eXBlb2YgYXJndW1lbnRzPCJ1IiYmKEUuYXJndW1lbnRzPWFyZ3VtZW50cyksdHlwZW9mIHF1aXQ9PSJmdW5jdGlvbiImJihFLnF1aXQ9ZnVuY3Rpb24obCl7cXVpdChsKX0pKTooT3x8bkEpJiYoTz9kb2N1bWVudC5jdXJyZW50U2NyaXB0JiYocT1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyk6cT1zZWxmLmxvY2F0aW9uLmhyZWYscT1xLmluZGV4T2YoImJsb2I6IikhPT0wP3Euc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5qb2luKCIvIikrIi8iOiIiLEUucmVhZD1mdW5jdGlvbih1KXt2YXIgZj1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIGYub3BlbigiR0VUIix1LCExKSxmLnNlbmQobnVsbCksZi5yZXNwb25zZVRleHR9LG5BJiYoRS5yZWFkQmluYXJ5PWZ1bmN0aW9uKHUpe3ZhciBmPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gZi5vcGVuKCJHRVQiLHUsITEpLGYucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsZi5zZW5kKG51bGwpLG5ldyBVaW50OEFycmF5KGYucmVzcG9uc2UpfSksRS5yZWFkQXN5bmM9ZnVuY3Rpb24odSxmLHcpe3ZhciBVPW5ldyBYTUxIdHRwUmVxdWVzdDtVLm9wZW4oIkdFVCIsdSwhMCksVS5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixVLm9ubG9hZD1mdW5jdGlvbigpe2lmKFUuc3RhdHVzPT0yMDB8fFUuc3RhdHVzPT0wJiZVLnJlc3BvbnNlKXtmKFUucmVzcG9uc2UpO3JldHVybn13KCl9LFUub25lcnJvcj13LFUuc2VuZChudWxsKX0sRS5zZXRXaW5kb3dUaXRsZT1mdW5jdGlvbihsKXtkb2N1bWVudC50aXRsZT1sfSk7dmFyIHRBPUUucHJpbnR8fCh0eXBlb2YgY29uc29sZTwidSI/Y29uc29sZS5sb2cuYmluZChjb25zb2xlKTp0eXBlb2YgcHJpbnQ8InUiP3ByaW50Om51bGwpLGlBPUUucHJpbnRFcnJ8fCh0eXBlb2YgcHJpbnRFcnI8InUiP3ByaW50RXJyOnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuLmJpbmQoY29uc29sZSl8fHRBKTtmb3IoZSBpbiBYKVguaGFzT3duUHJvcGVydHkoZSkmJihFW2VdPVhbZV0pO2Z1bmN0aW9uIFAobCl7dmFyIHU9QztyZXR1cm4gQz1DK2wrMTUmLTE2LHV9ZnVuY3Rpb24gRyhsKXt2YXIgdT1vW0Q+PjJdLGY9dStsKzE1Ji0xNjtyZXR1cm4gb1tEPj4yXT1mLGY+PXBBJiYhbnQoKT8ob1tEPj4yXT11LDApOnV9ZnVuY3Rpb24gYihsLHUpe3JldHVybiB1fHwodT0xNiksbD1NYXRoLmNlaWwobC91KSp1fWZ1bmN0aW9uIEsobCl7c3dpdGNoKGwpe2Nhc2UiaTEiOmNhc2UiaTgiOnJldHVybiAxO2Nhc2UiaTE2IjpyZXR1cm4gMjtjYXNlImkzMiI6Y2FzZSJmbG9hdCI6cmV0dXJuIDQ7Y2FzZSJpNjQiOmNhc2UiZG91YmxlIjpyZXR1cm4gODtkZWZhdWx0OmlmKGxbbC5sZW5ndGgtMV09PT0iKiIpcmV0dXJuIDQ7aWYobFswXSE9PSJpIilyZXR1cm4gMDt2YXIgdT1wYXJzZUludChsLnN1YnN0cigxKSk7cmV0dXJuIFVBKHUlOD09MCksdS84fX1mdW5jdGlvbiBlQShsKXtlQS5zaG93bnx8KGVBLnNob3duPXt9KSxlQS5zaG93bltsXXx8KGVBLnNob3duW2xdPTEsaUEobCkpfVg9dm9pZCAwO3ZhciBhQT17ImY2NC1yZW0iOmZ1bmN0aW9uKGwsdSl7cmV0dXJuIGwldX0sZGVidWdnZXI6ZnVuY3Rpb24oKXt9fSxHQT1bXTtmdW5jdGlvbiBzZShsLHUpe2Zvcih2YXIgZj0wLHc9Zjt3PGYrMDt3KyspaWYoIUdBW3ddKXJldHVybiBHQVt3XT1sLDErdzt0aHJvdyJGaW5pc2hlZCB1cCBhbGwgcmVzZXJ2ZWQgZnVuY3Rpb24gcG9pbnRlcnMuIFVzZSBhIGhpZ2hlciB2YWx1ZSBmb3IgUkVTRVJWRURfRlVOQ1RJT05fUE9JTlRFUlMuIn1mdW5jdGlvbiB6QShsKXtHQVtsLTFdPW51bGx9dmFyIFdBPXt9O2Z1bmN0aW9uIE5lKGwsdSl7aWYobCl7VUEodSksV0FbdV18fChXQVt1XT17fSk7dmFyIGY9V0FbdV07cmV0dXJuIGZbbF18fCh1Lmxlbmd0aD09PTE/ZltsXT1mdW5jdGlvbigpe3JldHVybiBBQSh1LGwpfTp1Lmxlbmd0aD09PTI/ZltsXT1mdW5jdGlvbihVKXtyZXR1cm4gQUEodSxsLFtVXSl9OmZbbF09ZnVuY3Rpb24oKXtyZXR1cm4gQUEodSxsLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfSksZltsXX19ZnVuY3Rpb24gYWUobCx1LGYpe3JldHVybiBmPysobD4+PjApKzQyOTQ5NjcyOTYqKyh1Pj4+MCk6KyhsPj4+MCkrNDI5NDk2NzI5NiorKDB8dSl9ZnVuY3Rpb24gQUEobCx1LGYpe3JldHVybiBmJiZmLmxlbmd0aD9FWyJkeW5DYWxsXyIrbF0uYXBwbHkobnVsbCxbdV0uY29uY2F0KGYpKTpFWyJkeW5DYWxsXyIrbF0uY2FsbChudWxsLHUpfXZhciBCQT0wLF9BPTA7ZnVuY3Rpb24gVUEobCx1KXtsfHxJZSgiQXNzZXJ0aW9uIGZhaWxlZDogIit1KX1mdW5jdGlvbiBDZShsKXt2YXIgdT1FWyJfIitsXTtyZXR1cm4gVUEodSwiQ2Fubm90IGNhbGwgdW5rbm93biBmdW5jdGlvbiAiK2wrIiwgbWFrZSBzdXJlIGl0IGlzIGV4cG9ydGVkIiksdX12YXIgaGU9e3N0YWNrU2F2ZTpmdW5jdGlvbigpe2duKCl9LHN0YWNrUmVzdG9yZTpmdW5jdGlvbigpe0luKCl9LGFycmF5VG9DOmZ1bmN0aW9uKGwpe3ZhciB1LGYsdz13dChsLmxlbmd0aCk7cmV0dXJuIHU9bCxmPXcscy5zZXQodSxmKSx3fSxzdHJpbmdUb0M6ZnVuY3Rpb24obCl7dmFyIHU9MDtpZihsIT1udWxsJiZsIT09MCl7dmFyIGY9KGwubGVuZ3RoPDwyKSsxO3U9d3QoZiksZXQobCx1LGYpfXJldHVybiB1fX0sJGU9e3N0cmluZzpoZS5zdHJpbmdUb0MsYXJyYXk6aGUuYXJyYXlUb0N9O2Z1bmN0aW9uIFVlKGwsdSxmLHcsVSl7dmFyIF89Q2UobCksb0E9W10sSD0wO2lmKHcpZm9yKHZhciBEQT0wO0RBPHcubGVuZ3RoO0RBKyspe3ZhciBsQT0kZVtmW0RBXV07bEE/KEg9PT0wJiYoSD1nbigpKSxvQVtEQV09bEEod1tEQV0pKTpvQVtEQV09d1tEQV19dmFyIGRBLENBPV8uYXBwbHkobnVsbCxvQSk7cmV0dXJuIENBPShkQT1DQSx1PT09InN0cmluZyI/bGUoZEEpOnU9PT0iYm9vbGVhbiI/ISFkQTpkQSksSCE9PTAmJkluKEgpLENBfWZ1bmN0aW9uIEF0KGwsdSxmLHcpe3N3aXRjaCgoZj1mfHwiaTgiKS5jaGFyQXQoZi5sZW5ndGgtMSk9PT0iKiImJihmPSJpMzIiKSxmKXtjYXNlImkxIjpjYXNlImk4IjpzW2w+PjBdPXU7YnJlYWs7Y2FzZSJpMTYiOnJbbD4+MV09dTticmVhaztjYXNlImkzMiI6b1tsPj4yXT11O2JyZWFrO2Nhc2UiaTY0Ijp0ZW1wSTY0PVt1Pj4+MCwrVGEodGVtcERvdWJsZT11KT49MT90ZW1wRG91YmxlPjA/KDB8SGEoK2hzKHRlbXBEb3VibGUvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fit4YSgodGVtcERvdWJsZS0rKH5+dGVtcERvdWJsZT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MF0sb1tsPj4yXT10ZW1wSTY0WzBdLG9bbCs0Pj4yXT10ZW1wSTY0WzFdO2JyZWFrO2Nhc2UiZmxvYXQiOkJbbD4+Ml09dTticmVhaztjYXNlImRvdWJsZSI6ZFtsPj4zXT11O2JyZWFrO2RlZmF1bHQ6SWUoImludmFsaWQgdHlwZSBmb3Igc2V0VmFsdWU6ICIrZil9fWZ1bmN0aW9uIEFuKGwsdSxmKXtzd2l0Y2goKHU9dXx8Imk4IikuY2hhckF0KHUubGVuZ3RoLTEpPT09IioiJiYodT0iaTMyIiksdSl7Y2FzZSJpMSI6Y2FzZSJpOCI6cmV0dXJuIHNbbD4+MF07Y2FzZSJpMTYiOnJldHVybiByW2w+PjFdO2Nhc2UiaTMyIjpjYXNlImk2NCI6cmV0dXJuIG9bbD4+Ml07Y2FzZSJmbG9hdCI6cmV0dXJuIEJbbD4+Ml07Y2FzZSJkb3VibGUiOnJldHVybiBkW2w+PjNdO2RlZmF1bHQ6SWUoImludmFsaWQgdHlwZSBmb3IgZ2V0VmFsdWU6ICIrdSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZW4obCx1LGYsdyl7dHlwZW9mIGw9PSJudW1iZXIiPyhfPSEwLG9BPWwpOihfPSExLG9BPWwubGVuZ3RoKTt2YXIgVT10eXBlb2YgdT09InN0cmluZyI/dTpudWxsO2lmKEg9Zj09ND93Olt0eXBlb2YgRHQ9PSJmdW5jdGlvbiI/RHQ6UCx3dCxQLEddW2Y9PT12b2lkIDA/MjpmXShNYXRoLm1heChvQSxVPzE6dS5sZW5ndGgpKSxfKXtmb3Iodz1ILFVBKCgzJkgpPT0wKSxEQT1IKygtNCZvQSk7dzxEQTt3Kz00KW9bdz4+Ml09MDtmb3IoREE9SCtvQTt3PERBOylzW3crKz4+MF09MDtyZXR1cm4gSH1pZihVPT09Imk4IilyZXR1cm4gbC5zdWJhcnJheXx8bC5zbGljZT9hLnNldChsLEgpOmEuc2V0KG5ldyBVaW50OEFycmF5KGwpLEgpLEg7Zm9yKHZhciBfLG9BLEgsREEsbEEsZEEsQ0EsVz0wO1c8b0E7KXt2YXIgTEE9bFtXXTtpZigobEE9VXx8dVtXXSk9PT0wKXtXKys7Y29udGludWV9bEE9PSJpNjQiJiYobEE9ImkzMiIpLEF0KEgrVyxMQSxsQSksQ0EhPT1sQSYmKGRBPUsobEEpLENBPWxBKSxXKz1kQX1yZXR1cm4gSH1mdW5jdGlvbiBUZShsKXtyZXR1cm4gUT9vbj9EdChsKTpHKGwpOlAobCl9ZnVuY3Rpb24gbGUobCx1KXtpZih1PT09MHx8IWwpcmV0dXJuIiI7Zm9yKHZhciBmLHcsVSxfPTAsb0E9MDtffD13PWFbbCtvQT4+MF0sKHchPTB8fHUpJiYob0ErKywhdXx8b0EhPXUpOyk7dXx8KHU9b0EpO3ZhciBIPSIiO2lmKF88MTI4KXtmb3IoO3U+MDspVT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxhLnN1YmFycmF5KGwsbCtNYXRoLm1pbih1LDEwMjQpKSksSD1IP0grVTpVLGwrPTEwMjQsdS09MTAyNDtyZXR1cm4gSH1yZXR1cm4gZj1sLChmdW5jdGlvbihsQSxkQSl7Zm9yKHZhciBDQT1kQTtsQVtDQV07KSsrQ0E7aWYoQ0EtZEE+MTYmJmxBLnN1YmFycmF5JiZmdClyZXR1cm4gZnQuZGVjb2RlKGxBLnN1YmFycmF5KGRBLENBKSk7Zm9yKHZhciBXLExBLFBBLEpBLHFBLHdlLEtBPSIiOzspe2lmKCEoVz1sQVtkQSsrXSkpcmV0dXJuIEtBO2lmKCEoMTI4JlcpKXtLQSs9U3RyaW5nLmZyb21DaGFyQ29kZShXKTtjb250aW51ZX1pZihMQT02MyZsQVtkQSsrXSwoMjI0JlcpPT0xOTIpe0tBKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZXKTw8NnxMQSk7Y29udGludWV9aWYoUEE9NjMmbEFbZEErK10sKDI0MCZXKT09MjI0P1c9KDE1JlcpPDwxMnxMQTw8NnxQQTooSkE9NjMmbEFbZEErK10sKDI0OCZXKT09MjQwP1c9KDcmVyk8PDE4fExBPDwxMnxQQTw8NnxKQToocUE9NjMmbEFbZEErK10sVz0oMjUyJlcpPT0yNDg/KDMmVyk8PDI0fExBPDwxOHxQQTw8MTJ8SkE8PDZ8cUE6KDEmVyk8PDMwfExBPDwyNHxQQTw8MTh8SkE8PDEyfHFBPDw2fCh3ZT02MyZsQVtkQSsrXSkpKSxXPDY1NTM2KUtBKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFcpO2Vsc2V7dmFyIHJ0PVctNjU1MzY7S0ErPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8cnQ+PjEwLDU2MzIwfDEwMjMmcnQpfX19KShhLGYpfWZ1bmN0aW9uIFRBKGwpe2Zvcih2YXIgdT0iIjs7KXt2YXIgZj1zW2wrKz4+MF07aWYoIWYpcmV0dXJuIHU7dSs9U3RyaW5nLmZyb21DaGFyQ29kZShmKX19ZnVuY3Rpb24gdG4obCx1KXtyZXR1cm4oZnVuY3Rpb24odyxVLF8pe2Zvcih2YXIgb0E9MDtvQTx3Lmxlbmd0aDsrK29BKXNbVSsrPj4wXT13LmNoYXJDb2RlQXQob0EpO198fChzW1U+PjBdPTApfSkobCx1LCExKX12YXIgZnQ9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDA7ZnVuY3Rpb24geGUobCx1LGYsdyl7aWYoISh3PjApKXJldHVybiAwO2Zvcih2YXIgVT1mLF89Zit3LTEsb0E9MDtvQTxsLmxlbmd0aDsrK29BKXt2YXIgSD1sLmNoYXJDb2RlQXQob0EpO2lmKEg+PTU1Mjk2JiZIPD01NzM0MyYmKEg9NjU1MzYrKCgxMDIzJkgpPDwxMCl8MTAyMyZsLmNoYXJDb2RlQXQoKytvQSkpLEg8PTEyNyl7aWYoZj49XylicmVhazt1W2YrK109SH1lbHNlIGlmKEg8PTIwNDcpe2lmKGYrMT49XylicmVhazt1W2YrK109MTkyfEg+PjYsdVtmKytdPTEyOHw2MyZIfWVsc2UgaWYoSDw9NjU1MzUpe2lmKGYrMj49XylicmVhazt1W2YrK109MjI0fEg+PjEyLHVbZisrXT0xMjh8SD4+NiY2Myx1W2YrK109MTI4fDYzJkh9ZWxzZSBpZihIPD0yMDk3MTUxKXtpZihmKzM+PV8pYnJlYWs7dVtmKytdPTI0MHxIPj4xOCx1W2YrK109MTI4fEg+PjEyJjYzLHVbZisrXT0xMjh8SD4+NiY2Myx1W2YrK109MTI4fDYzJkh9ZWxzZSBpZihIPD02NzEwODg2Myl7aWYoZis0Pj1fKWJyZWFrO3VbZisrXT0yNDh8SD4+MjQsdVtmKytdPTEyOHxIPj4xOCY2Myx1W2YrK109MTI4fEg+PjEyJjYzLHVbZisrXT0xMjh8SD4+NiY2Myx1W2YrK109MTI4fDYzJkh9ZWxzZXtpZihmKzU+PV8pYnJlYWs7dVtmKytdPTI1MnxIPj4zMCx1W2YrK109MTI4fEg+PjI0JjYzLHVbZisrXT0xMjh8SD4+MTgmNjMsdVtmKytdPTEyOHxIPj4xMiY2Myx1W2YrK109MTI4fEg+PjYmNjMsdVtmKytdPTEyOHw2MyZIfX1yZXR1cm4gdVtmXT0wLGYtVX1mdW5jdGlvbiBldChsLHUsZil7cmV0dXJuIHhlKGwsYSx1LGYpfWZ1bmN0aW9uIFJBKGwpe2Zvcih2YXIgdT0wLGY9MDtmPGwubGVuZ3RoOysrZil7dmFyIHc9bC5jaGFyQ29kZUF0KGYpO3c+PTU1Mjk2JiZ3PD01NzM0MyYmKHc9NjU1MzYrKCgxMDIzJncpPDwxMCl8MTAyMyZsLmNoYXJDb2RlQXQoKytmKSksdzw9MTI3PysrdTp3PD0yMDQ3P3UrPTI6dzw9NjU1MzU/dSs9Mzp3PD0yMDk3MTUxP3UrPTQ6dzw9NjcxMDg4NjM/dSs9NTp1Kz02fXJldHVybiB1fXZhciBvZT10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmLTE2bGUiKTp2b2lkIDA7ZnVuY3Rpb24gdHQobCl7Zm9yKHZhciB1PWwsZj11Pj4xO3JbZl07KSsrZjtpZigodT1mPDwxKS1sPjMyJiZvZSlyZXR1cm4gb2UuZGVjb2RlKGEuc3ViYXJyYXkobCx1KSk7Zm9yKHZhciB3PTAsVT0iIjs7KXt2YXIgXz1yW2wrMip3Pj4xXTtpZihfPT0wKXJldHVybiBVOysrdyxVKz1TdHJpbmcuZnJvbUNoYXJDb2RlKF8pfX1mdW5jdGlvbiBubihsLHUsZil7aWYoZj09PXZvaWQgMCYmKGY9MjE0NzQ4MzY0NyksZjwyKXJldHVybiAwO2Zvcih2YXIgdz11LFU9KGYtPTIpPDIqbC5sZW5ndGg/Zi8yOmwubGVuZ3RoLF89MDtfPFU7KytfKXt2YXIgb0E9bC5jaGFyQ29kZUF0KF8pO3JbdT4+MV09b0EsdSs9Mn1yZXR1cm4gclt1Pj4xXT0wLHUtd31mdW5jdGlvbiByZShsKXtyZXR1cm4gMipsLmxlbmd0aH1mdW5jdGlvbiBtdChsKXtmb3IodmFyIHU9MCxmPSIiOzspe3ZhciB3PW9bbCs0KnU+PjJdO2lmKHc9PTApcmV0dXJuIGY7aWYoKyt1LHc+PTY1NTM2KXt2YXIgVT13LTY1NTM2O2YrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8VT4+MTAsNTYzMjB8MTAyMyZVKX1lbHNlIGYrPVN0cmluZy5mcm9tQ2hhckNvZGUodyl9fWZ1bmN0aW9uIFN0KGwsdSxmKXtpZihmPT09dm9pZCAwJiYoZj0yMTQ3NDgzNjQ3KSxmPDQpcmV0dXJuIDA7Zm9yKHZhciB3PXUsVT13K2YtNCxfPTA7XzxsLmxlbmd0aDsrK18pe3ZhciBvQT1sLmNoYXJDb2RlQXQoXyk7aWYob0E+PTU1Mjk2JiZvQTw9NTczNDMmJihvQT02NTUzNisoKDEwMjMmb0EpPDwxMCl8MTAyMyZsLmNoYXJDb2RlQXQoKytfKSksb1t1Pj4yXT1vQSwodSs9NCkrND5VKWJyZWFrfXJldHVybiBvW3U+PjJdPTAsdS13fWZ1bmN0aW9uIGdzKGwpe2Zvcih2YXIgdT0wLGY9MDtmPGwubGVuZ3RoOysrZil7dmFyIHc9bC5jaGFyQ29kZUF0KGYpO3c+PTU1Mjk2JiZ3PD01NzM0MyYmKytmLHUrPTR9cmV0dXJuIHV9ZnVuY3Rpb24gY3MobCl7dmFyIHU9UkEobCkrMSxmPUR0KHUpO3JldHVybiBmJiZ4ZShsLHMsZix1KSxmfWZ1bmN0aW9uIHB0KGwpe3ZhciB1PVJBKGwpKzEsZj13dCh1KTtyZXR1cm4geGUobCxzLGYsdSksZn1mdW5jdGlvbiB5ZShsKXtyZXR1cm4gbH1mdW5jdGlvbiBzbigpe3ZhciBsLHU9KGZ1bmN0aW9uKCl7dmFyIHc9RXJyb3IoKTtpZighdy5zdGFjayl7dHJ5e3Rocm93IEVycm9yKDApfWNhdGNoKFUpe3c9VX1pZighdy5zdGFjaylyZXR1cm4iKG5vIHN0YWNrIHRyYWNlIGF2YWlsYWJsZSkifXJldHVybiB3LnN0YWNrLnRvU3RyaW5nKCl9KSgpO3JldHVybiBFLmV4dHJhU3RhY2tUcmFjZSYmKHUrPWAKYCtFLmV4dHJhU3RhY2tUcmFjZSgpKSwobD11KS5yZXBsYWNlKC9fX1pbXHdcZF9dKy9nLGZ1bmN0aW9uKGYpe3ZhciB3LFU9dz1mO3JldHVybiBmPT09VT9mOmYrIiBbIitVKyJdIn0pfWZ1bmN0aW9uIGllKGwsdSl7cmV0dXJuIGwldT4wJiYobCs9dS1sJXUpLGx9ZnVuY3Rpb24gSGUobCl7RS5idWZmZXI9bj1sfWZ1bmN0aW9uIGtlKCl7RS5IRUFQOD1zPW5ldyBJbnQ4QXJyYXkobiksRS5IRUFQMTY9cj1uZXcgSW50MTZBcnJheShuKSxFLkhFQVAzMj1vPW5ldyBJbnQzMkFycmF5KG4pLEUuSEVBUFU4PWE9bmV3IFVpbnQ4QXJyYXkobiksRS5IRUFQVTE2PUk9bmV3IFVpbnQxNkFycmF5KG4pLEUuSEVBUFUzMj1nPW5ldyBVaW50MzJBcnJheShuKSxFLkhFQVBGMzI9Qj1uZXcgRmxvYXQzMkFycmF5KG4pLEUuSEVBUEY2ND1kPW5ldyBGbG9hdDY0QXJyYXkobil9ZnVuY3Rpb24gbnQoKXt2YXIgbD1FLnVzaW5nV2FzbT82NTUzNjoxNjc3NzIxNix1PTIxNDc0ODM2NDgtbDtpZihvW0Q+PjJdPnUpcmV0dXJuITE7dmFyIGY9cEE7Zm9yKHBBPU1hdGgubWF4KHBBLDE2Nzc3MjE2KTtwQTxvW0Q+PjJdOylwQT1wQTw9NTM2ODcwOTEyP2llKDIqcEEsbCk6TWF0aC5taW4oaWUoKDMqcEErMjE0NzQ4MzY0OCkvNCxsKSx1KTt2YXIgdz1FLnJlYWxsb2NCdWZmZXIocEEpO3JldHVybiB3JiZ3LmJ5dGVMZW5ndGg9PXBBPyhIZSh3KSxrZSgpLCEwKToocEE9ZiwhMSl9aD1DPW09eT1GPWs9RD0wLFE9ITEsRS5yZWFsbG9jQnVmZmVyfHwoRS5yZWFsbG9jQnVmZmVyPWZ1bmN0aW9uKGwpe3RyeXtpZihBcnJheUJ1ZmZlci50cmFuc2Zlcil1PUFycmF5QnVmZmVyLnRyYW5zZmVyKG4sbCk7ZWxzZXt2YXIgdSxmPXM7dT1uZXcgQXJyYXlCdWZmZXIobCksbmV3IEludDhBcnJheSh1KS5zZXQoZil9fWNhdGNoe3JldHVybiExfXJldHVybiEhWWEodSkmJnV9KTt0cnl7KHY9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwuYmluZChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEFycmF5QnVmZmVyLnByb3RvdHlwZSwiYnl0ZUxlbmd0aCIpLmdldCkpKG5ldyBBcnJheUJ1ZmZlcig0KSl9Y2F0Y2h7dj1mdW5jdGlvbih1KXtyZXR1cm4gdS5ieXRlTGVuZ3RofX12YXIgWWU9RS5UT1RBTF9TVEFDS3x8NTI0Mjg4MCxwQT1FLlRPVEFMX01FTU9SWXx8MTY3NzcyMTY7ZnVuY3Rpb24geXQoKXtyZXR1cm4gcEF9ZnVuY3Rpb24gZGUobCl7Zm9yKDtsLmxlbmd0aD4wOyl7dmFyIHU9bC5zaGlmdCgpO2lmKHR5cGVvZiB1PT0iZnVuY3Rpb24iKXt1KCk7Y29udGludWV9dmFyIGY9dS5mdW5jO3R5cGVvZiBmPT0ibnVtYmVyIj91LmFyZz09PXZvaWQgMD9FLmR5bkNhbGxfdihmKTpFLmR5bkNhbGxfdmkoZix1LmFyZyk6Zih1LmFyZz09PXZvaWQgMD9udWxsOnUuYXJnKX19cEE8WWUmJmlBKCJUT1RBTF9NRU1PUlkgc2hvdWxkIGJlIGxhcmdlciB0aGFuIFRPVEFMX1NUQUNLLCB3YXMgIitwQSsiISAoVE9UQUxfU1RBQ0s9IitZZSsiKSIpLEUuYnVmZmVyP249RS5idWZmZXI6KHR5cGVvZiBXZWJBc3NlbWJseT09Im9iamVjdCImJnR5cGVvZiBXZWJBc3NlbWJseS5NZW1vcnk9PSJmdW5jdGlvbiI/KEUud2FzbU1lbW9yeT1uZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFsOnBBLzY1NTM2fSksbj1FLndhc21NZW1vcnkuYnVmZmVyKTpuPW5ldyBBcnJheUJ1ZmZlcihwQSksRS5idWZmZXI9biksa2UoKTt2YXIgc3Q9W10sYW49W10sRXM9W10sQnM9W10sQ3M9W10sb249ITEsTGE9ITE7ZnVuY3Rpb24gTmEobCl7c3QudW5zaGlmdChsKX1mdW5jdGlvbiBZcihsKXthbi51bnNoaWZ0KGwpfWZ1bmN0aW9uIFByKGwpe0VzLnVuc2hpZnQobCl9ZnVuY3Rpb24gSnIobCl7QnMudW5zaGlmdChsKX1mdW5jdGlvbiBVYShsKXtDcy51bnNoaWZ0KGwpfWZ1bmN0aW9uIHFyKGwsdSxmKXt2YXIgdyxVO2VBKCJ3cml0ZVN0cmluZ1RvTWVtb3J5IGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkISBVc2Ugc3RyaW5nVG9VVEY4KCkgaW5zdGVhZCEiKSxmJiYodz1zW1U9dStSQShsKV0pLGV0KGwsdSwxLzApLGYmJihzW1VdPXcpfWZ1bmN0aW9uIEtyKGwsdSxmKXtyZXR1cm4gbD49MD9sOnU8PTMyPzIqTWF0aC5hYnMoMTw8dS0xKStsOk1hdGgucG93KDIsdSkrbH1mdW5jdGlvbiBPcihsLHUsZil7aWYobDw9MClyZXR1cm4gbDt2YXIgdz11PD0zMj9NYXRoLmFicygxPDx1LTEpOk1hdGgucG93KDIsdS0xKTtyZXR1cm4gbD49dyYmKHU8PTMyfHxsPncpJiYobD0tMip3K2wpLGx9dmFyIFRhPU1hdGguYWJzLHhhPU1hdGguY2VpbCxocz1NYXRoLmZsb29yLEhhPU1hdGgubWluLERlPTAscm49bnVsbCxhdD1udWxsO2Z1bmN0aW9uIFZyKGwpe3JldHVybiBsfUUucHJlbG9hZGVkSW1hZ2VzPXt9LEUucHJlbG9hZGVkQXVkaW9zPXt9O3ZhciBscz0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCI7ZnVuY3Rpb24ga3QobCl7cmV0dXJuIFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aD9sLnN0YXJ0c1dpdGgobHMpOmwuaW5kZXhPZihscyk9PT0wfShmdW5jdGlvbigpe3ZhciB1PSJtYWluLndhc3QiLGY9Im1haW4ud2FzbSIsdz0ibWFpbi50ZW1wLmFzbSI7a3QodSl8fCh1PXoodSkpLGt0KGYpfHwoZj16KGYpKSxrdCh3KXx8KHc9eih3KSk7dmFyIFU9e2dsb2JhbDpudWxsLGVudjpudWxsLGFzbTJ3YXNtOmFBLHBhcmVudDpFfSxfPW51bGw7ZnVuY3Rpb24gb0EoQ0Epe3JldHVybiBDQX1mdW5jdGlvbiBIKCl7dHJ5e2lmKEUud2FzbUJpbmFyeSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoRS53YXNtQmluYXJ5KTtpZihFLnJlYWRCaW5hcnkpcmV0dXJuIEUucmVhZEJpbmFyeShmKTt0aHJvdyJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCJ9Y2F0Y2goQ0Epe0llKENBKX19RS5hc21QcmVsb2FkPUUuYXNtO3ZhciBEQT1FLnJlYWxsb2NCdWZmZXIsbEE9ZnVuY3Rpb24oQ0Epe0NBPWllKENBLEUudXNpbmdXYXNtPzY1NTM2OjE2Nzc3MjE2KTt2YXIgVz1FLmJ1ZmZlci5ieXRlTGVuZ3RoO2lmKEUudXNpbmdXYXNtKXRyeXt2YXIgTEE9RS53YXNtTWVtb3J5Lmdyb3coKENBLVcpLzY1NTM2KTtyZXR1cm4gTEEhPT0tMT9FLmJ1ZmZlcj1FLndhc21NZW1vcnkuYnVmZmVyOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fTtFLnJlYWxsb2NCdWZmZXI9ZnVuY3Rpb24oQ0Epe3JldHVybiBkQT09PSJhc21qcyI/REEoQ0EpOmxBKENBKX07dmFyIGRBPSIiO0UuYXNtPWZ1bmN0aW9uKENBLFcsTEEpe3ZhciBQQTtpZighKFc9UEE9VykudGFibGUpe3ZhciBKQSxxQT1FLndhc21UYWJsZVNpemU7cUE9PT12b2lkIDAmJihxQT0xMDI0KTt2YXIgd2U9RS53YXNtTWF4VGFibGVTaXplO3R5cGVvZiBXZWJBc3NlbWJseT09Im9iamVjdCImJnR5cGVvZiBXZWJBc3NlbWJseS5UYWJsZT09ImZ1bmN0aW9uIj93ZSE9PXZvaWQgMD9XLnRhYmxlPW5ldyBXZWJBc3NlbWJseS5UYWJsZSh7aW5pdGlhbDpxQSxtYXhpbXVtOndlLGVsZW1lbnQ6ImFueWZ1bmMifSk6Vy50YWJsZT1uZXcgV2ViQXNzZW1ibHkuVGFibGUoe2luaXRpYWw6cUEsZWxlbWVudDoiYW55ZnVuYyJ9KTpXLnRhYmxlPUFycmF5KHFBKSxFLndhc21UYWJsZT1XLnRhYmxlfXJldHVybiBXLm1lbW9yeUJhc2V8fChXLm1lbW9yeUJhc2U9RS5TVEFUSUNfQkFTRSksVy50YWJsZUJhc2V8fChXLnRhYmxlQmFzZT0wKSxKQT0oZnVuY3Rpb24ocnQsUGUsRW4pe2lmKHR5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCIpcmV0dXJuIGlBKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIiksITE7aWYoIShFLndhc21NZW1vcnkgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5NZW1vcnkpKXJldHVybiBpQSgibm8gbmF0aXZlIHdhc20gTWVtb3J5IGluIHVzZSIpLCExO2Z1bmN0aW9uIEZ0KGpBLCRBKXtpZigoXz1qQS5leHBvcnRzKS5tZW1vcnkpe3ZhciBpdCxCbix1cztpdD1fLm1lbW9yeSxCbj1FLmJ1ZmZlcixpdC5ieXRlTGVuZ3RoPEJuLmJ5dGVMZW5ndGgmJmlBKCJ0aGUgbmV3IGJ1ZmZlciBpbiBtZXJnZU1lbW9yeSBpcyBzbWFsbGVyIHRoYW4gdGhlIHByZXZpb3VzIG9uZS4gaW4gbmF0aXZlIHdhc20sIHdlIHNob3VsZCBncm93IG1lbW9yeSBoZXJlIiksdXM9bmV3IEludDhBcnJheShCbiksbmV3IEludDhBcnJheShpdCkuc2V0KHVzKSxIZShpdCksa2UoKX1FLmFzbT1fLEUudXNpbmdXYXNtPSEwLChmdW5jdGlvbigkcil7aWYoRGUtLSxFLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJkUubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhEZSksRGU9PTAmJihybiE9PW51bGwmJihjbGVhckludGVydmFsKHJuKSxybj1udWxsKSxhdCkpe3ZhciBQYT1hdDthdD1udWxsLFBhKCl9fSkoIndhc20taW5zdGFudGlhdGUiKX1pZihQZS5tZW1vcnk9RS53YXNtTWVtb3J5LFUuZ2xvYmFsPXtOYU46TmFOLEluZmluaXR5OjEvMH0sVVsiZ2xvYmFsLk1hdGgiXT1NYXRoLFUuZW52PVBlLERlKyssRS5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZFLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoRGUpLEUuaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gRS5pbnN0YW50aWF0ZVdhc20oVSxGdCl9Y2F0Y2goakEpe3JldHVybiBpQSgiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIitqQSksITF9ZnVuY3Rpb24gSmUoakEpe0Z0KGpBLmluc3RhbmNlLGpBLm1vZHVsZSl9ZnVuY3Rpb24gUXMoakEpeyghRS53YXNtQmluYXJ5JiYoT3x8bkEpJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goZix7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oJEEpe2lmKCEkQS5vayl0aHJvdyJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICciK2YrIiciO3JldHVybiAkQS5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gSCgpfSk6bmV3IFByb21pc2UoZnVuY3Rpb24oJEEsaXQpeyRBKEgoKSl9KSkudGhlbihmdW5jdGlvbigkQSl7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKCRBLFUpfSkudGhlbihqQSkuY2F0Y2goZnVuY3Rpb24oJEEpe2lBKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiKyRBKSxJZSgkQSl9KX1yZXR1cm4gRS53YXNtQmluYXJ5fHx0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmchPSJmdW5jdGlvbiJ8fGt0KGYpfHx0eXBlb2YgZmV0Y2ghPSJmdW5jdGlvbiI/UXMoSmUpOldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKGZldGNoKGYse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KSxVKS50aGVuKEplKS5jYXRjaChmdW5jdGlvbihqQSl7aUEoIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK2pBKSxpQSgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxRcyhKZSl9KSx7fX0pKENBLFcsTEEpLFVBKEpBLCJubyBiaW5hcnllbiBtZXRob2Qgc3VjY2VlZGVkLiIpLEpBfSxFLmFzbX0pKCksQz0oaD0xMDI0KSs0ODE2LGFuLnB1c2goKSxFLlNUQVRJQ19CQVNFPWgsRS5TVEFUSUNfQlVNUD00ODE2O3ZhciB4QT1DO2Z1bmN0aW9uIFhyKGwpe3NbeEFdPXNbbF0sc1t4QSsxXT1zW2wrMV0sc1t4QSsyXT1zW2wrMl0sc1t4QSszXT1zW2wrM119ZnVuY3Rpb24gWnIobCl7c1t4QV09c1tsXSxzW3hBKzFdPXNbbCsxXSxzW3hBKzJdPXNbbCsyXSxzW3hBKzNdPXNbbCszXSxzW3hBKzRdPXNbbCs0XSxzW3hBKzVdPXNbbCs1XSxzW3hBKzZdPXNbbCs2XSxzW3hBKzddPXNbbCs3XX1mdW5jdGlvbiB6cihsLHUsZil7dmFyIHc9Zj4wP2Y6UkEobCkrMSxVPUFycmF5KHcpLF89eGUobCxVLDAsVS5sZW5ndGgpO3JldHVybiB1JiYoVS5sZW5ndGg9XyksVX1mdW5jdGlvbiBXcihsKXtmb3IodmFyIHU9W10sZj0wO2Y8bC5sZW5ndGg7ZisrKXt2YXIgdz1sW2ZdO3c+MjU1JiYodyY9MjU1KSx1LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh3KSl9cmV0dXJuIHUuam9pbigiIil9Qys9MTYsRD1QKDQpLEY9KG09eT1iKEMpKStZZSxrPWIoRiksb1tEPj4yXT1rLFE9ITAsRS53YXNtVGFibGVTaXplPTQsRS53YXNtTWF4VGFibGVTaXplPTQsRS5hc21HbG9iYWxBcmc9e30sRS5hc21MaWJyYXJ5QXJnPXthYm9ydDpJZSxhc3NlcnQ6VUEsZW5sYXJnZU1lbW9yeTpudCxnZXRUb3RhbE1lbW9yeTp5dCxhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeTpmdW5jdGlvbigpe0llKCJDYW5ub3QgZW5sYXJnZSBtZW1vcnkgYXJyYXlzLiBFaXRoZXIgKDEpIGNvbXBpbGUgd2l0aCAgLXMgVE9UQUxfTUVNT1JZPVggIHdpdGggWCBoaWdoZXIgdGhhbiB0aGUgY3VycmVudCB2YWx1ZSAiK3BBKyIsICgyKSBjb21waWxlIHdpdGggIC1zIEFMTE9XX01FTU9SWV9HUk9XVEg9MSAgd2hpY2ggYWxsb3dzIGluY3JlYXNpbmcgdGhlIHNpemUgYXQgcnVudGltZSwgb3IgKDMpIGlmIHlvdSB3YW50IG1hbGxvYyB0byByZXR1cm4gTlVMTCAoMCkgaW5zdGVhZCBvZiB0aGlzIGFib3J0LCBjb21waWxlIHdpdGggIC1zIEFCT1JUSU5HX01BTExPQz0wICIpfSxpbnZva2VfaWlpOmZ1bmN0aW9uKHUsZix3KXt2YXIgVT1nbigpO3RyeXtyZXR1cm4gRS5keW5DYWxsX2lpaSh1LGYsdyl9Y2F0Y2goXyl7aWYoSW4oVSksdHlwZW9mIF8hPSJudW1iZXIiJiZfIT09ImxvbmdqbXAiKXRocm93IF87RS5zZXRUaHJldygxLDApfX0sX19fYXNzZXJ0X2ZhaWw6ZnVuY3Rpb24odSxmLHcsVSl7SWUoIkFzc2VydGlvbiBmYWlsZWQ6ICIrbGUodSkrIiwgYXQ6ICIrW2Y/bGUoZik6InVua25vd24gZmlsZW5hbWUiLHcsVT9sZShVKToidW5rbm93biBmdW5jdGlvbiJdKX0sX19fc2V0RXJyTm86ZnVuY3Rpb24odSl7cmV0dXJuIEUuX19fZXJybm9fbG9jYXRpb24mJihvW0UuX19fZXJybm9fbG9jYXRpb24oKT4+Ml09dSksdX0sX2Fib3J0OmZ1bmN0aW9uKCl7RS5hYm9ydCgpfSxfZW1zY3JpcHRlbl9tZW1jcHlfYmlnOmZ1bmN0aW9uKHUsZix3KXtyZXR1cm4gYS5zZXQoYS5zdWJhcnJheShmLGYrdyksdSksdX0sX2xsdm1fZmxvb3JfZjY0OmhzLERZTkFNSUNUT1BfUFRSOkQsdGVtcERvdWJsZVB0cjp4QSxBQk9SVDpCQSxTVEFDS1RPUDp5LFNUQUNLX01BWDpGfTt2YXIgZHM9RS5hc20oRS5hc21HbG9iYWxBcmcsRS5hc21MaWJyYXJ5QXJnLG4pO0UuYXNtPWRzLEUuX19fZXJybm9fbG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX19fZXJybm9fbG9jYXRpb24uYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgWWE9RS5fZW1zY3JpcHRlbl9yZXBsYWNlX21lbW9yeT1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5fZW1zY3JpcHRlbl9yZXBsYWNlX21lbW9yeS5hcHBseShudWxsLGFyZ3VtZW50cyl9O0UuX2ZyZWU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX2ZyZWUuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgRHQ9RS5fbWFsbG9jPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9tYWxsb2MuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtFLl9tZW1jcHk9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX21lbWNweS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEUuX21lbXNldD1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5fbWVtc2V0LmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5fc2Jyaz1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5fc2Jyay5hcHBseShudWxsLGFyZ3VtZW50cyl9LEUuX3N0Yl92b3JiaXNfanNfY2hhbm5lbHM9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLl9zdGJfdm9yYmlzX2pzX2Nsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9zdGJfdm9yYmlzX2pzX2Nsb3NlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5fc3RiX3ZvcmJpc19qc19kZWNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uX3N0Yl92b3JiaXNfanNfZGVjb2RlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5fc3RiX3ZvcmJpc19qc19vcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9zdGJfdm9yYmlzX2pzX29wZW4uYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLl9zdGJfdm9yYmlzX2pzX3NhbXBsZV9yYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLl9zdGJfdm9yYmlzX2pzX3NhbXBsZV9yYXRlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5lc3RhYmxpc2hTdGFja1NwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLmVzdGFibGlzaFN0YWNrU3BhY2UuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLmdldFRlbXBSZXQwPWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLmdldFRlbXBSZXQwLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRS5ydW5Qb3N0U2V0cz1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5ydW5Qb3N0U2V0cy5hcHBseShudWxsLGFyZ3VtZW50cyl9LEUuc2V0VGVtcFJldDA9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uc2V0VGVtcFJldDAuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLnNldFRocmV3PWZ1bmN0aW9uKCl7cmV0dXJuIEUuYXNtLnNldFRocmV3LmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIHd0PUUuc3RhY2tBbGxvYz1mdW5jdGlvbigpe3JldHVybiBFLmFzbS5zdGFja0FsbG9jLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSW49RS5zdGFja1Jlc3RvcmU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uc3RhY2tSZXN0b3JlLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZ249RS5zdGFja1NhdmU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uc3RhY2tTYXZlLmFwcGx5KG51bGwsYXJndW1lbnRzKX07ZnVuY3Rpb24gb3QobCl7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitsKyIpIix0aGlzLnN0YXR1cz1sfWZ1bmN0aW9uIGNuKGwpe2w9bHx8RS5hcmd1bWVudHMsIShEZT4wKSYmKChmdW5jdGlvbigpe2lmKEUucHJlUnVuKWZvcih0eXBlb2YgRS5wcmVSdW49PSJmdW5jdGlvbiImJihFLnByZVJ1bj1bRS5wcmVSdW5dKTtFLnByZVJ1bi5sZW5ndGg7KU5hKEUucHJlUnVuLnNoaWZ0KCkpO2RlKHN0KX0pKCksIShEZT4wKSYmKEUuY2FsbGVkUnVufHwoRS5zZXRTdGF0dXM/KEUuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtFLnNldFN0YXR1cygiIil9LDEpLHUoKX0sMSkpOnUoKSkpKTtmdW5jdGlvbiB1KCl7IUUuY2FsbGVkUnVuJiYoRS5jYWxsZWRSdW49ITAsQkF8fChvbnx8KG9uPSEwLGRlKGFuKSksZGUoRXMpLEUub25SdW50aW1lSW5pdGlhbGl6ZWQmJkUub25SdW50aW1lSW5pdGlhbGl6ZWQoKSwoZnVuY3Rpb24oKXtpZihFLnBvc3RSdW4pZm9yKHR5cGVvZiBFLnBvc3RSdW49PSJmdW5jdGlvbiImJihFLnBvc3RSdW49W0UucG9zdFJ1bl0pO0UucG9zdFJ1bi5sZW5ndGg7KVVhKEUucG9zdFJ1bi5zaGlmdCgpKTtkZShDcyl9KSgpKSl9fWZ1bmN0aW9uIF9yKGwsdSl7KCF1fHwhRS5ub0V4aXRSdW50aW1lfHxsIT09MCkmJihFLm5vRXhpdFJ1bnRpbWV8fChCQT0hMCxfQT1sLHk9TCxkZShCcyksTGE9ITAsRS5vbkV4aXQmJkUub25FeGl0KGwpKSxFLnF1aXQobCxuZXcgb3QobCkpKX1mdW5jdGlvbiBJZShsKXt0aHJvdyBFLm9uQWJvcnQmJkUub25BYm9ydChsKSxsIT09dm9pZCAwPyh0QShsKSxpQShsKSxsPUpTT04uc3RyaW5naWZ5KGwpKTpsPSIiLEJBPSEwLF9BPTEsImFib3J0KCIrbCsiKS4gQnVpbGQgd2l0aCAtcyBBU1NFUlRJT05TPTEgZm9yIG1vcmUgaW5mby4ifWlmKEUuZHluQ2FsbF9paWk9ZnVuY3Rpb24oKXtyZXR1cm4gRS5hc20uZHluQ2FsbF9paWkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFLmFzbT1kcyxFLmNjYWxsPVVlLEUuY3dyYXA9ZnVuY3Rpb24odSxmLHcsVSl7dmFyIF89KHc9d3x8W10pLmV2ZXJ5KGZ1bmN0aW9uKG9BKXtyZXR1cm4gb0E9PT0ibnVtYmVyIn0pO3JldHVybiBmIT09InN0cmluZyImJl8mJiFVP0NlKHUpOmZ1bmN0aW9uKCl7cmV0dXJuIFVlKHUsZix3LGFyZ3VtZW50cyxVKX19LG90LnByb3RvdHlwZT1FcnJvcigpLG90LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1vdCxhdD1mdW5jdGlvbiBsKCl7RS5jYWxsZWRSdW58fGNuKCksRS5jYWxsZWRSdW58fChhdD1sKX0sRS5ydW49Y24sRS5hYm9ydD1JZSxFLnByZUluaXQpZm9yKHR5cGVvZiBFLnByZUluaXQ9PSJmdW5jdGlvbiImJihFLnByZUluaXQ9W0UucHJlSW5pdF0pO0UucHJlSW5pdC5sZW5ndGg+MDspRS5wcmVJbml0LnBvcCgpKCk7RS5ub0V4aXRSdW50aW1lPSEwLGNuKCksRS5vblJ1bnRpbWVJbml0aWFsaXplZD0oKT0+e2tzPSEwLGFhKCl9LGx0LmRlY29kZT1mdW5jdGlvbihsKXtyZXR1cm4oZnVuY3Rpb24oZil7aWYoIWtzKXRocm93IEVycm9yKCJTRjMgZGVjb2RlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LiBEaWQgeW91IGF3YWl0IHN5bnRoLmlzUmVhZHk/Iik7dmFyIHc9e307ZnVuY3Rpb24gVShQZSl7cmV0dXJuIG5ldyBJbnQzMkFycmF5KEUuSEVBUFU4LmJ1ZmZlcixQZSwxKVswXX1mdW5jdGlvbiBfKFBlLEVuKXt2YXIgRnQ9bmV3IEFycmF5QnVmZmVyKEVuKkZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCksSmU9bmV3IEZsb2F0MzJBcnJheShGdCk7cmV0dXJuIEplLnNldChuZXcgRmxvYXQzMkFycmF5KEUuSEVBUFU4LmJ1ZmZlcixQZSxFbikpLEplfXcub3Blbj1FLmN3cmFwKCJzdGJfdm9yYmlzX2pzX29wZW4iLCJudW1iZXIiLFtdKSx3LmNsb3NlPUUuY3dyYXAoInN0Yl92b3JiaXNfanNfY2xvc2UiLCJ2b2lkIixbIm51bWJlciJdKSx3LmNoYW5uZWxzPUUuY3dyYXAoInN0Yl92b3JiaXNfanNfY2hhbm5lbHMiLCJudW1iZXIiLFsibnVtYmVyIl0pLHcuc2FtcGxlUmF0ZT1FLmN3cmFwKCJzdGJfdm9yYmlzX2pzX3NhbXBsZV9yYXRlIiwibnVtYmVyIixbIm51bWJlciJdKSx3LmRlY29kZT1FLmN3cmFwKCJzdGJfdm9yYmlzX2pzX2RlY29kZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSk7dmFyIG9BLEgsREEsbEEsZEE9dy5vcGVuKCksQ0E9KG9BPWYsSD1mLmJ5dGVMZW5ndGgsREE9RS5fbWFsbG9jKEgpLChsQT1uZXcgVWludDhBcnJheShFLkhFQVBVOC5idWZmZXIsREEsSCkpLnNldChuZXcgVWludDhBcnJheShvQSwwLEgpKSxsQSksVz1FLl9tYWxsb2MoNCksTEE9RS5fbWFsbG9jKDQpLFBBPXcuZGVjb2RlKGRBLENBLmJ5dGVPZmZzZXQsQ0EuYnl0ZUxlbmd0aCxXLExBKTtpZihFLl9mcmVlKENBLmJ5dGVPZmZzZXQpLFBBPDApdGhyb3cgdy5jbG9zZShkQSksRS5fZnJlZShXKSxFcnJvcigic3Ridm9yYmlzIGRlY29kZSBmYWlsZWQ6ICIrUEEpO2Zvcih2YXIgSkE9dy5jaGFubmVscyhkQSkscUE9QXJyYXkoSkEpLHdlPW5ldyBJbnQzMkFycmF5KEUuSEVBUFUzMi5idWZmZXIsVShXKSxKQSksS0E9MDtLQTxKQTtLQSsrKXFBW0tBXT1fKHdlW0tBXSxQQSksRS5fZnJlZSh3ZVtLQV0pO3ZhciBydD13LnNhbXBsZVJhdGUoZEEpO3JldHVybiB3LmNsb3NlKGRBKSxFLl9mcmVlKFUoVykpLEUuX2ZyZWUoVykse2RhdGE6cUEsc2FtcGxlUmF0ZTpydCxlb2Y6ITAsZXJyb3I6bnVsbH19KShsKX19KSgpO3ZhciBPdD1sdCxzcz0tMTVlMyxHbz0xNWUzLHZuPW5ldyBGbG9hdDMyQXJyYXkoR28tc3MrMSk7Zm9yKGxldCBlPTA7ZTx2bi5sZW5ndGg7ZSsrKXtsZXQgQT1zcytlO3ZuW2VdPU1hdGgucG93KDIsQS8xMjAwKX1mdW5jdGlvbiBRZShlKXtyZXR1cm4gZTw9LTMyNzY3PzA6dm5bZS1zc119dmFyIFl0PS0yZTQsb2E9MTY1MDAsTG49bmV3IEZsb2F0MzJBcnJheShvYS1ZdCsxKTtmb3IobGV0IGU9MDtlPExuLmxlbmd0aDtlKyspe2xldCBBPVl0K2U7TG5bZV09NDQwKk1hdGgucG93KDIsKEEtNjkwMCkvMTIwMCl9ZnVuY3Rpb24gTm4oZSl7cmV0dXJuIGU8WXR8fGU+b2E/NDQwKk1hdGgucG93KDIsKGUtNjkwMCkvMTIwMCk6TG5bfn5lLVl0XX12YXIgYXM9LTE2NjAsUm89MTYwMCxVbj1uZXcgRmxvYXQzMkFycmF5KChSby1hcykqMTAwKzEpO2ZvcihsZXQgZT0wO2U8VW4ubGVuZ3RoO2UrKyl7bGV0IEE9KGFzKjEwMCtlKS8xMDA7VW5bZV09TWF0aC5wb3coMTAsLUEvMjApfWZ1bmN0aW9uIEFlKGUpe3JldHVybiBVbltNYXRoLmZsb29yKChlLWFzKSoxMDApXX12YXIgTW89LjAxLEhBPTEwMCxRbj05MCxibz0xNWUtNixiZT1jbGFzcyByYXtzYW1wbGVSYXRlO2N1cnJlbnRBdHRlbnVhdGlvbkRiPUhBO3N0YXRlPTA7YXR0ZW51YXRpb249MDthdHRlbnVhdGlvblRhcmdldEdhaW49MDtjdXJyZW50U2FtcGxlVGltZT0wO3JlbGVhc2VTdGFydERiPUhBO3JlbGVhc2VTdGFydFRpbWVTYW1wbGVzPTA7Y3VycmVudFJlbGVhc2VHYWluPTE7YXR0YWNrRHVyYXRpb249MDtkZWNheUR1cmF0aW9uPTA7cmVsZWFzZUR1cmF0aW9uPTA7YXR0ZW51YXRpb25UYXJnZXQ9MDtzdXN0YWluRGJSZWxhdGl2ZT0wO2RlbGF5RW5kPTA7YXR0YWNrRW5kPTA7aG9sZEVuZD0wO2RlY2F5RW5kPTA7Y2FuRW5kT25TaWxlbnRTdXN0YWluO2NvbnN0cnVjdG9yKEEsdCl7dGhpcy5zYW1wbGVSYXRlPUEsdGhpcy5jYW5FbmRPblNpbGVudFN1c3RhaW49dC8xMD49UW59c3RhdGljIHN0YXJ0UmVsZWFzZShBKXtBLnZvbHVtZUVudmVsb3BlLnJlbGVhc2VTdGFydFRpbWVTYW1wbGVzPUEudm9sdW1lRW52ZWxvcGUuY3VycmVudFNhbXBsZVRpbWUsQS52b2x1bWVFbnZlbG9wZS5jdXJyZW50UmVsZWFzZUdhaW49QWUoQS52b2x1bWVFbnZlbG9wZS5jdXJyZW50QXR0ZW51YXRpb25EYikscmEucmVjYWxjdWxhdGUoQSl9c3RhdGljIHJlY2FsY3VsYXRlKEEpe2xldCB0PUEudm9sdW1lRW52ZWxvcGUsbj1nPT5NYXRoLm1heCgwLE1hdGguZmxvb3IoUWUoZykqdC5zYW1wbGVSYXRlKSk7dC5hdHRlbnVhdGlvblRhcmdldD1NYXRoLm1heCgwLE1hdGgubWluKEEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmluaXRpYWxBdHRlbnVhdGlvbl0sMTQ0MCkpLzEwLHQuYXR0ZW51YXRpb25UYXJnZXRHYWluPUFlKHQuYXR0ZW51YXRpb25UYXJnZXQpLHQuc3VzdGFpbkRiUmVsYXRpdmU9TWF0aC5taW4oSEEsQS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3VzdGFpblZvbEVudl0vMTApO2xldCBzPU1hdGgubWluKEhBLHQuc3VzdGFpbkRiUmVsYXRpdmUpO3QuYXR0YWNrRHVyYXRpb249bihBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5hdHRhY2tWb2xFbnZdKTtsZXQgYT1BLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWNheVZvbEVudl0scj0oNjAtQS50YXJnZXRLZXkpKkEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmtleU51bVRvVm9sRW52RGVjYXldLEk9cy9IQTt0LmRlY2F5RHVyYXRpb249bihhK3IpKkksdC5yZWxlYXNlRHVyYXRpb249bihNYXRoLm1heCgtNzIwMCxBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5yZWxlYXNlVm9sRW52XSkpLHQuZGVsYXlFbmQ9bihBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWxheVZvbEVudl0pLHQuYXR0YWNrRW5kPXQuYXR0YWNrRHVyYXRpb24rdC5kZWxheUVuZDtsZXQgbz0oNjAtQS50YXJnZXRLZXkpKkEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmtleU51bVRvVm9sRW52SG9sZF07aWYodC5ob2xkRW5kPW4oQS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuaG9sZFZvbEVudl0rbykrdC5hdHRhY2tFbmQsdC5kZWNheUVuZD10LmRlY2F5RHVyYXRpb24rdC5ob2xkRW5kLHQuc3RhdGU9PT0wJiZ0LmF0dGFja0VuZD09PTAmJih0LnN0YXRlPTIpLEEuaXNJblJlbGVhc2Upe2xldCBnPU1hdGgubWF4KDAsTWF0aC5taW4oSEEsdC5zdXN0YWluRGJSZWxhdGl2ZSkpLEI9Zy9IQTtzd2l0Y2godC5kZWNheUR1cmF0aW9uPW4oYStyKSpCLHQuc3RhdGUpe2Nhc2UgMDp0LnJlbGVhc2VTdGFydERiPUhBO2JyZWFrO2Nhc2UgMTp7bGV0IGg9MS0odC5hdHRhY2tFbmQtdC5yZWxlYXNlU3RhcnRUaW1lU2FtcGxlcykvdC5hdHRhY2tEdXJhdGlvbjt0LnJlbGVhc2VTdGFydERiPTIwKk1hdGgubG9nMTAoaCkqLTE7YnJlYWt9Y2FzZSAyOnQucmVsZWFzZVN0YXJ0RGI9MDticmVhaztjYXNlIDM6dC5yZWxlYXNlU3RhcnREYj0oMS0odC5kZWNheUVuZC10LnJlbGVhc2VTdGFydFRpbWVTYW1wbGVzKS90LmRlY2F5RHVyYXRpb24pKmc7YnJlYWs7Y2FzZSA0OnQucmVsZWFzZVN0YXJ0RGI9ZzticmVha310LnJlbGVhc2VTdGFydERiPU1hdGgubWF4KDAsTWF0aC5taW4odC5yZWxlYXNlU3RhcnREYixIQSkpLHQucmVsZWFzZVN0YXJ0RGI+PVFuJiYoQS5maW5pc2hlZD0hMCksdC5jdXJyZW50UmVsZWFzZUdhaW49QWUodC5yZWxlYXNlU3RhcnREYik7bGV0IGQ9KEhBLXQucmVsZWFzZVN0YXJ0RGIpL0hBO3QucmVsZWFzZUR1cmF0aW9uKj1kfX1zdGF0aWMgYXBwbHkoQSx0LG4scyl7bGV0IGE9QS52b2x1bWVFbnZlbG9wZSxyPW4vMTAsST1zO2lmKEEuaXNJblJlbGVhc2Upe2xldCBnPWEuY3VycmVudFNhbXBsZVRpbWUtYS5yZWxlYXNlU3RhcnRUaW1lU2FtcGxlcztpZihnPj1hLnJlbGVhc2VEdXJhdGlvbil7Zm9yKGxldCBkPTA7ZDx0Lmxlbmd0aDtkKyspdFtkXT0wO0EuZmluaXNoZWQ9ITA7cmV0dXJufWxldCBCPUhBLWEucmVsZWFzZVN0YXJ0RGI7Zm9yKGxldCBkPTA7ZDx0Lmxlbmd0aDtkKyspe2EuYXR0ZW51YXRpb24rPShhLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbi1hLmF0dGVudWF0aW9uKSpJO2xldCBoPWcvYS5yZWxlYXNlRHVyYXRpb24qQithLnJlbGVhc2VTdGFydERiO2EuY3VycmVudFJlbGVhc2VHYWluPWEuYXR0ZW51YXRpb24qQWUoaCtyKSx0W2RdKj1hLmN1cnJlbnRSZWxlYXNlR2FpbixhLmN1cnJlbnRTYW1wbGVUaW1lKyssZysrfWEuY3VycmVudFJlbGVhc2VHYWluPD1ibyYmKEEuZmluaXNoZWQ9ITApO3JldHVybn1sZXQgbz0wO3N3aXRjaChhLnN0YXRlKXtjYXNlIDA6Zm9yKDthLmN1cnJlbnRTYW1wbGVUaW1lPGEuZGVsYXlFbmQ7KWlmKGEuY3VycmVudEF0dGVudWF0aW9uRGI9SEEsdFtvXT0wLGEuY3VycmVudFNhbXBsZVRpbWUrKywrK28+PXQubGVuZ3RoKXJldHVybjthLnN0YXRlKys7Y2FzZSAxOmZvcig7YS5jdXJyZW50U2FtcGxlVGltZTxhLmF0dGFja0VuZDspe2EuYXR0ZW51YXRpb24rPShhLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbi1hLmF0dGVudWF0aW9uKSpJO2xldCBnPTEtKGEuYXR0YWNrRW5kLWEuY3VycmVudFNhbXBsZVRpbWUpL2EuYXR0YWNrRHVyYXRpb247aWYodFtvXSo9ZyphLmF0dGVudWF0aW9uKkFlKHIpLGEuY3VycmVudEF0dGVudWF0aW9uRGI9MCxhLmN1cnJlbnRTYW1wbGVUaW1lKyssKytvPj10Lmxlbmd0aClyZXR1cm59YS5zdGF0ZSsrO2Nhc2UgMjpmb3IoO2EuY3VycmVudFNhbXBsZVRpbWU8YS5ob2xkRW5kOylpZihhLmF0dGVudWF0aW9uKz0oYS5hdHRlbnVhdGlvblRhcmdldEdhaW4tYS5hdHRlbnVhdGlvbikqSSx0W29dKj1hLmF0dGVudWF0aW9uKkFlKHIpLGEuY3VycmVudEF0dGVudWF0aW9uRGI9MCxhLmN1cnJlbnRTYW1wbGVUaW1lKyssKytvPj10Lmxlbmd0aClyZXR1cm47YS5zdGF0ZSsrO2Nhc2UgMzpmb3IoO2EuY3VycmVudFNhbXBsZVRpbWU8YS5kZWNheUVuZDspaWYoYS5hdHRlbnVhdGlvbis9KGEuYXR0ZW51YXRpb25UYXJnZXRHYWluLWEuYXR0ZW51YXRpb24pKkksYS5jdXJyZW50QXR0ZW51YXRpb25EYj0oMS0oYS5kZWNheUVuZC1hLmN1cnJlbnRTYW1wbGVUaW1lKS9hLmRlY2F5RHVyYXRpb24pKmEuc3VzdGFpbkRiUmVsYXRpdmUsdFtvXSo9YS5hdHRlbnVhdGlvbipBZShhLmN1cnJlbnRBdHRlbnVhdGlvbkRiK3IpLGEuY3VycmVudFNhbXBsZVRpbWUrKywrK28+PXQubGVuZ3RoKXJldHVybjthLnN0YXRlKys7Y2FzZSA0OmZvcihhLmNhbkVuZE9uU2lsZW50U3VzdGFpbiYmYS5zdXN0YWluRGJSZWxhdGl2ZT49UW4mJihBLmZpbmlzaGVkPSEwKTs7KWlmKGEuYXR0ZW51YXRpb24rPShhLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbi1hLmF0dGVudWF0aW9uKSpJLHRbb10qPWEuYXR0ZW51YXRpb24qQWUoYS5zdXN0YWluRGJSZWxhdGl2ZStyKSxhLmN1cnJlbnRBdHRlbnVhdGlvbkRiPWEuc3VzdGFpbkRiUmVsYXRpdmUsYS5jdXJyZW50U2FtcGxlVGltZSsrLCsrbz49dC5sZW5ndGgpcmV0dXJufX19O2Z1bmN0aW9uIHZvKGUsQSl7c3dpdGNoKHRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnNbZV09QSxlKXtjYXNlIm1hc3RlclBhbiI6e2xldCB0PUE7dD10LzIrLjUsdGhpcy5wcml2YXRlUHJvcHMucGFuTGVmdD0xLXQsdGhpcy5wcml2YXRlUHJvcHMucGFuUmlnaHQ9dDticmVha31jYXNlIm1hc3RlckdhaW4iOmJyZWFrO2Nhc2Uidm9pY2VDYXAiOmJyZWFrO2Nhc2UiaW50ZXJwb2xhdGlvblR5cGUiOmJyZWFrO2Nhc2UibWlkaVN5c3RlbSI6YnJlYWs7Y2FzZSJtb25vcGhvbmljUmV0cmlnZ2VyTW9kZSI6YnJlYWs7Y2FzZSJ0cmFuc3Bvc2l0aW9uIjp7bGV0IHQ9QTt0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLnRyYW5zcG9zaXRpb249MDtmb3IobGV0IG4gb2YgdGhpcy5taWRpQ2hhbm5lbHMpbi50cmFuc3Bvc2VDaGFubmVsKHQpO3RoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMudHJhbnNwb3NpdGlvbj10fX10aGlzLmNhbGxFdmVudCgibWFzdGVyUGFyYW1ldGVyQ2hhbmdlIix7cGFyYW1ldGVyOmUsdmFsdWU6QX0pfWZ1bmN0aW9uIExvKGUpe3JldHVybiB0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzW2VdfWZ1bmN0aW9uIE5vKCl7cmV0dXJuey4uLnRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnN9fWZ1bmN0aW9uIE1lKGUsQSl7cmV0dXJuKGU+PkEmMSk+MH1mdW5jdGlvbiB1bihlKXtyZXR1cm4gZT8xOjB9dmFyIE5BPTE2Mzg0LFB0PU9iamVjdC5rZXlzKFFBKS5sZW5ndGgsaWE9NCxjZT1uZXcgRmxvYXQzMkFycmF5KE5BKzEpLHZlPW5ldyBGbG9hdDMyQXJyYXkoTkErMSk7Y2VbMF09MDtjZVtjZS5sZW5ndGgtMV09MTt2ZVswXT0wO3ZlW3ZlLmxlbmd0aC0xXT0xO2ZvcihsZXQgZT0xO2U8TkEtMTtlKyspe2xldCBBPS0uNDE2NjY2NjY2NjY2NjY2NypNYXRoLmxvZyhlLyhjZS5sZW5ndGgtMSkpL01hdGguTE4xMDt2ZVtlXT0xLUEsY2VbY2UubGVuZ3RoLTEtZV09QX1mdW5jdGlvbiBJYShlLEEsdCl7bGV0IG49ISEoZSYyKTtzd2l0Y2goISEoZSYxKSYmKHQ9MS10KSxBKXtjYXNlIFFBLmxpbmVhcjpyZXR1cm4gbj90KjItMTp0O2Nhc2UgUUEuc3dpdGNoOnJldHVybiB0PXQ+LjU/MTowLG4/dCoyLTE6dDtjYXNlIFFBLmNvbmNhdmU6cmV0dXJuIG4/KHQ9dCoyLTEsdDwwPy1jZVt+fih0Ki1OQSldOmNlW35+KHQqTkEpXSk6Y2Vbfn4odCpOQSldO2Nhc2UgUUEuY29udmV4OnJldHVybiBuPyh0PXQqMi0xLHQ8MD8tdmVbfn4odCotTkEpXTp2ZVt+fih0Kk5BKV0pOnZlW35+KHQqTkEpXX19dmFyIFhBPWNsYXNzIFRue2lzQmlwb2xhcjtpc05lZ2F0aXZlO2luZGV4O2lzQ0M7Y3VydmVUeXBlO2NvbnN0cnVjdG9yKEE9ai5ub0NvbnRyb2xsZXIsdD1RQS5saW5lYXIsbj0hMSxzPSExLGE9ITEpe3RoaXMuaXNCaXBvbGFyPXMsdGhpcy5pc05lZ2F0aXZlPWEsdGhpcy5pbmRleD1BLHRoaXMuaXNDQz1uLHRoaXMuY3VydmVUeXBlPXR9Z2V0IHNvdXJjZU5hbWUoKXtyZXR1cm4gdGhpcy5pc0NDP09iamVjdC5rZXlzKFMpLmZpbmQoQT0+U1tBXT09PXRoaXMuaW5kZXgpPz90aGlzLmluZGV4LnRvU3RyaW5nKCk6T2JqZWN0LmtleXMoaikuZmluZChBPT5qW0FdPT09dGhpcy5pbmRleCk/P3RoaXMuaW5kZXgudG9TdHJpbmcoKX1nZXQgY3VydmVUeXBlTmFtZSgpe3JldHVybiBPYmplY3Qua2V5cyhRQSkuZmluZChBPT5RQVtBXT09PXRoaXMuY3VydmVUeXBlKT8/dGhpcy5jdXJ2ZVR5cGUudG9TdHJpbmcoKX1zdGF0aWMgZnJvbVNvdXJjZUVudW0oQSl7bGV0IHQ9TWUoQSw5KSxuPU1lKEEsOCkscz1NZShBLDcpLGE9QSYxMjcscj1BPj4xMCYzO3JldHVybiBuZXcgVG4oYSxyLHMsdCxuKX1zdGF0aWMgY29weUZyb20oQSl7cmV0dXJuIG5ldyBUbihBLmluZGV4LEEuY3VydmVUeXBlLEEuaXNDQyxBLmlzQmlwb2xhcixBLmlzTmVnYXRpdmUpfXRvU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy5zb3VyY2VOYW1lfSAke3RoaXMuY3VydmVUeXBlTmFtZX0gJHt0aGlzLmlzQmlwb2xhcj8iYmlwb2xhciI6InVuaXBvbGFyIn0gJHt0aGlzLmlzTmVnYXRpdmU/Im5lZ2F0aXZlIjoicG9zaXRpdmUifWB9dG9Tb3VyY2VFbnVtKCl7cmV0dXJuIHRoaXMuY3VydmVUeXBlPDwxMHx1bih0aGlzLmlzQmlwb2xhcik8PDl8dW4odGhpcy5pc05lZ2F0aXZlKTw8OHx1bih0aGlzLmlzQ0MpPDw3fHRoaXMuaW5kZXh9aXNJZGVudGljYWwoQSl7cmV0dXJuIHRoaXMuaW5kZXg9PT1BLmluZGV4JiZ0aGlzLmlzTmVnYXRpdmU9PT1BLmlzTmVnYXRpdmUmJnRoaXMuaXNDQz09PUEuaXNDQyYmdGhpcy5pc0JpcG9sYXI9PT1BLmlzQmlwb2xhciYmdGhpcy5jdXJ2ZVR5cGU9PT1BLmN1cnZlVHlwZX1nZXRWYWx1ZShBLHQpe2xldCBuO2lmKHRoaXMuaXNDQyluPUFbdGhpcy5pbmRleF07ZWxzZSBzd2l0Y2godGhpcy5pbmRleCl7Y2FzZSBqLm5vQ29udHJvbGxlcjpuPTE2MzgzO2JyZWFrO2Nhc2Ugai5ub3RlT25LZXlOdW06bj10Lm1pZGlOb3RlPDw3O2JyZWFrO2Nhc2Ugai5ub3RlT25WZWxvY2l0eTpuPXQudmVsb2NpdHk8PDc7YnJlYWs7Y2FzZSBqLnBvbHlQcmVzc3VyZTpuPXQucHJlc3N1cmU8PDc7YnJlYWs7ZGVmYXVsdDpuPUFbdGhpcy5pbmRleCttQV07YnJlYWt9bGV0IHM9KHRoaXMuaXNCaXBvbGFyPzI6MCl8KHRoaXMuaXNOZWdhdGl2ZT8xOjApO3JldHVybiBnYVtOQSoodGhpcy5jdXJ2ZVR5cGUqUHQrcykrbl19fSxnYT1uZXcgRmxvYXQzMkFycmF5KE5BKmlhKlB0KTtmb3IobGV0IGU9MDtlPFB0O2UrKylmb3IobGV0IEE9MDtBPGlhO0ErKyl7bGV0IHQ9TkEqKGUqUHQrQSk7Zm9yKGxldCBuPTA7bjxOQTtuKyspZ2FbdCtuXT1JYShBLGUsbi9OQSl9dmFyIG1lPTEwO2Z1bmN0aW9uIGdlKGUsQSx0LG4scyl7cmV0dXJuIG5ldyBYQShzLGUsbixBLHQpLnRvU291cmNlRW51bSgpfXZhciBjYT1nZShRQS5saW5lYXIsITAsITEsITAsUy5maWx0ZXJSZXNvbmFuY2UpLEVBPWNsYXNzIHhue2N1cnJlbnRWYWx1ZT0wO2Rlc3RpbmF0aW9uPWkuaW5pdGlhbEF0dGVudWF0aW9uO3RyYW5zZm9ybUFtb3VudD0wO3RyYW5zZm9ybVR5cGU9MDtpc0VmZmVjdE1vZHVsYXRvcj0hMTtpc0RlZmF1bHRSZXNvbmFudE1vZHVsYXRvcj0hMTtwcmltYXJ5U291cmNlO3NlY29uZGFyeVNvdXJjZTtjb25zdHJ1Y3RvcihBPW5ldyBYQSx0PW5ldyBYQSxuPWkuSU5WQUxJRCxzPTAsYT0wLHI9ITEsST0hMSl7dGhpcy5wcmltYXJ5U291cmNlPUEsdGhpcy5zZWNvbmRhcnlTb3VyY2U9dCx0aGlzLmRlc3RpbmF0aW9uPW4sdGhpcy50cmFuc2Zvcm1BbW91bnQ9cyx0aGlzLnRyYW5zZm9ybVR5cGU9YSx0aGlzLmlzRWZmZWN0TW9kdWxhdG9yPXIsdGhpcy5pc0RlZmF1bHRSZXNvbmFudE1vZHVsYXRvcj1JfWdldCBkZXN0aW5hdGlvbk5hbWUoKXtyZXR1cm4gT2JqZWN0LmtleXMoaSkuZmluZChBPT5pW0FdPT09dGhpcy5kZXN0aW5hdGlvbil9c3RhdGljIGlzSWRlbnRpY2FsKEEsdCxuPSExKXtyZXR1cm4gQS5wcmltYXJ5U291cmNlLmlzSWRlbnRpY2FsKHQucHJpbWFyeVNvdXJjZSkmJkEuc2Vjb25kYXJ5U291cmNlLmlzSWRlbnRpY2FsKHQuc2Vjb25kYXJ5U291cmNlKSYmQS5kZXN0aW5hdGlvbj09PXQuZGVzdGluYXRpb24mJkEudHJhbnNmb3JtVHlwZT09PXQudHJhbnNmb3JtVHlwZSYmKCFufHxBLnRyYW5zZm9ybUFtb3VudD09PXQudHJhbnNmb3JtQW1vdW50KX1zdGF0aWMgY29weUZyb20oQSl7cmV0dXJuIG5ldyB4bihYQS5jb3B5RnJvbShBLnByaW1hcnlTb3VyY2UpLFhBLmNvcHlGcm9tKEEuc2Vjb25kYXJ5U291cmNlKSxBLmRlc3RpbmF0aW9uLEEudHJhbnNmb3JtQW1vdW50LEEudHJhbnNmb3JtVHlwZSxBLmlzRWZmZWN0TW9kdWxhdG9yLEEuaXNEZWZhdWx0UmVzb25hbnRNb2R1bGF0b3IpfXRvU3RyaW5nKCl7cmV0dXJuYFNvdXJjZTogJHt0aGlzLnByaW1hcnlTb3VyY2UudG9TdHJpbmcoKX0KU2Vjb25kYXJ5IHNvdXJjZTogJHt0aGlzLnNlY29uZGFyeVNvdXJjZS50b1N0cmluZygpfQp0bzogJHt0aGlzLmRlc3RpbmF0aW9uTmFtZX0KYW1vdW50OiAke3RoaXMudHJhbnNmb3JtQW1vdW50fWArKHRoaXMudHJhbnNmb3JtVHlwZT09PTI/ImFic29sdXRlIHZhbHVlIjoiIil9d3JpdGUoQSx0KXtKKEEsdGhpcy5wcmltYXJ5U291cmNlLnRvU291cmNlRW51bSgpKSxKKEEsdGhpcy5kZXN0aW5hdGlvbiksSihBLHRoaXMudHJhbnNmb3JtQW1vdW50KSxKKEEsdGhpcy5zZWNvbmRhcnlTb3VyY2UudG9Tb3VyY2VFbnVtKCkpLEooQSx0aGlzLnRyYW5zZm9ybVR5cGUpLHQmJnQubW9kKyt9c3VtVHJhbnNmb3JtKEEpe2xldCB0PXhuLmNvcHlGcm9tKHRoaXMpO3JldHVybiB0LnRyYW5zZm9ybUFtb3VudCs9QS50cmFuc2Zvcm1BbW91bnQsdH19LHlBPWNsYXNzIGV4dGVuZHMgRUF7Y29uc3RydWN0b3IoZSxBLHQsbixzKXtsZXQgYT0oZT09PTIxOXx8ZT09PTIyMSkmJkE9PT0wJiYodD09PWkucmV2ZXJiRWZmZWN0c1NlbmR8fHQ9PT1pLmNob3J1c0VmZmVjdHNTZW5kKSxyPWU9PT1jYSYmQT09PTAmJnQ9PT1pLmluaXRpYWxGaWx0ZXJRO3N1cGVyKFhBLmZyb21Tb3VyY2VFbnVtKGUpLFhBLmZyb21Tb3VyY2VFbnVtKEEpLHQsbixzLGEsciksdGhpcy5kZXN0aW5hdGlvbj5tbyYmKHRoaXMuZGVzdGluYXRpb249aS5JTlZBTElEKX19LGZuPTk2MCxtbj1RQS5jb25jYXZlLFVvPVtuZXcgeUEoZ2UobW4sITEsITAsITEsai5ub3RlT25WZWxvY2l0eSksMCxpLmluaXRpYWxBdHRlbnVhdGlvbixmbiwwKSxuZXcgeUEoMTI5LDAsaS52aWJMZm9Ub1BpdGNoLDUwLDApLG5ldyB5QShnZShtbiwhMSwhMCwhMCxTLm1haW5Wb2x1bWUpLDAsaS5pbml0aWFsQXR0ZW51YXRpb24sZm4sMCksbmV3IHlBKDEzLDAsaS52aWJMZm9Ub1BpdGNoLDUwLDApLG5ldyB5QSg1MjYsMTYsaS5maW5lVHVuZSwxMjcwMCwwKSxuZXcgeUEoNjUwLDAsaS5wYW4sNTAwLDApLG5ldyB5QShnZShtbiwhMSwhMCwhMCxTLmV4cHJlc3Npb25Db250cm9sbGVyKSwwLGkuaW5pdGlhbEF0dGVudWF0aW9uLGZuLDApLG5ldyB5QSgyMTksMCxpLnJldmVyYkVmZmVjdHNTZW5kLDIwMCwwKSxuZXcgeUEoMjIxLDAsaS5jaG9ydXNFZmZlY3RzU2VuZCwyMDAsMCldLFRvPVtuZXcgeUEoZ2UoUUEubGluZWFyLCExLCExLCExLGoucG9seVByZXNzdXJlKSwwLGkudmliTGZvVG9QaXRjaCw1MCwwKSxuZXcgeUEoZ2UoUUEubGluZWFyLCExLCExLCEwLFMudHJlbW9sb0RlcHRoKSwwLGkubW9kTGZvVG9Wb2x1bWUsMjQsMCksbmV3IHlBKGdlKFFBLmNvbnZleCwhMCwhMSwhMCxTLmF0dGFja1RpbWUpLDAsaS5hdHRhY2tWb2xFbnYsNmUzLDApLG5ldyB5QShnZShRQS5saW5lYXIsITAsITEsITAsUy5yZWxlYXNlVGltZSksMCxpLnJlbGVhc2VWb2xFbnYsMzYwMCwwKSxuZXcgeUEoZ2UoUUEubGluZWFyLCEwLCExLCEwLFMuYnJpZ2h0bmVzcyksMCxpLmluaXRpYWxGaWx0ZXJGYyw2ZTMsMCksbmV3IHlBKGNhLDAsaS5pbml0aWFsRmlsdGVyUSwyNTAsMCldLEVhPVVvLmNvbmNhdChUbyksQ3Q9NCxGQT1jbGFzc3tnZW5lcmF0b3JUeXBlO2dlbmVyYXRvclZhbHVlPTA7Y29uc3RydWN0b3IoZSxBLHQ9ITApe2lmKHRoaXMuZ2VuZXJhdG9yVHlwZT1lLEE9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJObyB2YWx1ZSBwcm92aWRlZC4iKTtpZih0aGlzLmdlbmVyYXRvclZhbHVlPU1hdGgucm91bmQoQSksdCl7bGV0IG49eFtlXTtuIT09dm9pZCAwJiYodGhpcy5nZW5lcmF0b3JWYWx1ZT1NYXRoLm1heChuLm1pbixNYXRoLm1pbihuLm1heCx0aGlzLmdlbmVyYXRvclZhbHVlKSkpfX13cml0ZShlLEEpe0ooZSx0aGlzLmdlbmVyYXRvclR5cGUpLEooZSx0aGlzLmdlbmVyYXRvclZhbHVlKSxBLmdlbisrfXRvU3RyaW5nKCl7cmV0dXJuYCR7T2JqZWN0LmtleXMoaSkuZmluZChlPT5pW2VdPT09dGhpcy5nZW5lcmF0b3JUeXBlKX06ICR7dGhpcy5nZW5lcmF0b3JWYWx1ZX1gfX07ZnVuY3Rpb24geG8oZSxBLHQpe2xldCBuPXhbZV18fHttaW46MCxtYXg6MzI3NjgsZGVmOjB9LHM9QS5maW5kKG89Pm8uZ2VuZXJhdG9yVHlwZT09PWUpLGE9MDtzJiYoYT1zLmdlbmVyYXRvclZhbHVlKTtsZXQgcj10LmZpbmQobz0+by5nZW5lcmF0b3JUeXBlPT09ZSksST1uLmRlZjtyZXR1cm4gciYmKEk9ci5nZW5lcmF0b3JWYWx1ZSksTWF0aC5tYXgoLTMyNzY3LE1hdGgubWluKDMyNzY3LEkrYSkpfXZhciBKdD00LFZ0PWNsYXNze3ZlbFJhbmdlPXttaW46LTEsbWF4OjEyN307a2V5UmFuZ2U9e21pbjotMSxtYXg6MTI3fTtnZW5lcmF0b3JzPVtdO21vZHVsYXRvcnM9W107Z2V0IGhhc0tleVJhbmdlKCl7cmV0dXJuIHRoaXMua2V5UmFuZ2UubWluIT09LTF9Z2V0IGhhc1ZlbFJhbmdlKCl7cmV0dXJuIHRoaXMudmVsUmFuZ2UubWluIT09LTF9Z2V0IGZpbmVUdW5pbmcoKXtsZXQgZT10aGlzLmdldEdlbmVyYXRvcihpLmNvYXJzZVR1bmUsMCksQT10aGlzLmdldEdlbmVyYXRvcihpLmZpbmVUdW5lLDApO3JldHVybiBlKjEwMCtBfXNldCBmaW5lVHVuaW5nKGUpe2xldCBBPU1hdGgudHJ1bmMoZS8xMDApLHQ9ZSUxMDA7dGhpcy5zZXRHZW5lcmF0b3IoaS5jb2Fyc2VUdW5lLEEpLHRoaXMuc2V0R2VuZXJhdG9yKGkuZmluZVR1bmUsdCl9YWRkVG9HZW5lcmF0b3IoZSxBLHQ9ITApe2xldCBuPXRoaXMuZ2V0R2VuZXJhdG9yKGUseFtlXS5kZWYpO3RoaXMuc2V0R2VuZXJhdG9yKGUsQStuLHQpfXNldEdlbmVyYXRvcihlLEEsdD0hMCl7c3dpdGNoKGUpe2Nhc2UgaS5zYW1wbGVJRDp0aHJvdyBuZXcgRXJyb3IoIlVzZSBzZXRTYW1wbGUoKSIpO2Nhc2UgaS5pbnN0cnVtZW50OnRocm93IG5ldyBFcnJvcigiVXNlIHNldEluc3RydW1lbnQoKSIpO2Nhc2UgaS52ZWxSYW5nZTpjYXNlIGkua2V5UmFuZ2U6dGhyb3cgbmV3IEVycm9yKCJTZXQgdGhlIHJhbmdlIG1hbnVhbGx5Iil9aWYoQT09PW51bGwpe3RoaXMuZ2VuZXJhdG9ycz10aGlzLmdlbmVyYXRvcnMuZmlsdGVyKHM9PnMuZ2VuZXJhdG9yVHlwZSE9PWUpO3JldHVybn1sZXQgbj10aGlzLmdlbmVyYXRvcnMuZmluZEluZGV4KHM9PnMuZ2VuZXJhdG9yVHlwZT09PWUpO24+PTA/dGhpcy5nZW5lcmF0b3JzW25dPW5ldyBGQShlLEEsdCk6dGhpcy5hZGRHZW5lcmF0b3JzKG5ldyBGQShlLEEsdCkpfWFkZEdlbmVyYXRvcnMoLi4uZSl7ZS5mb3JFYWNoKEE9Pntzd2l0Y2goQS5nZW5lcmF0b3JUeXBlKXtkZWZhdWx0OnRoaXMuZ2VuZXJhdG9ycy5wdXNoKEEpO2JyZWFrO2Nhc2UgaS5zYW1wbGVJRDpjYXNlIGkuaW5zdHJ1bWVudDpicmVhaztjYXNlIGkudmVsUmFuZ2U6dGhpcy52ZWxSYW5nZS5taW49QS5nZW5lcmF0b3JWYWx1ZSYxMjcsdGhpcy52ZWxSYW5nZS5tYXg9QS5nZW5lcmF0b3JWYWx1ZT4+OCYxMjc7YnJlYWs7Y2FzZSBpLmtleVJhbmdlOnRoaXMua2V5UmFuZ2UubWluPUEuZ2VuZXJhdG9yVmFsdWUmMTI3LHRoaXMua2V5UmFuZ2UubWF4PUEuZ2VuZXJhdG9yVmFsdWU+PjgmMTI3fX0pfWFkZE1vZHVsYXRvcnMoLi4uZSl7dGhpcy5tb2R1bGF0b3JzLnB1c2goLi4uZSl9Z2V0R2VuZXJhdG9yKGUsQSl7cmV0dXJuIHRoaXMuZ2VuZXJhdG9ycy5maW5kKHQ9PnQuZ2VuZXJhdG9yVHlwZT09PWUpPy5nZW5lcmF0b3JWYWx1ZT8/QX1jb3B5RnJvbShlKXt0aGlzLmdlbmVyYXRvcnM9ZS5nZW5lcmF0b3JzLm1hcChBPT5uZXcgRkEoQS5nZW5lcmF0b3JUeXBlLEEuZ2VuZXJhdG9yVmFsdWUsITEpKSx0aGlzLm1vZHVsYXRvcnM9ZS5tb2R1bGF0b3JzLm1hcChFQS5jb3B5RnJvbS5iaW5kKEVBKSksdGhpcy52ZWxSYW5nZT17Li4uZS52ZWxSYW5nZX0sdGhpcy5rZXlSYW5nZT17Li4uZS5rZXlSYW5nZX19Z2V0R2VuQ291bnQoKXtsZXQgZT10aGlzLmdlbmVyYXRvcnMuZmlsdGVyKEE9PkEuZ2VuZXJhdG9yVHlwZSE9PWkuc2FtcGxlSUQmJkEuZ2VuZXJhdG9yVHlwZSE9PWkuaW5zdHJ1bWVudCYmQS5nZW5lcmF0b3JUeXBlIT09aS5rZXlSYW5nZSYmQS5nZW5lcmF0b3JUeXBlIT09aS52ZWxSYW5nZSkubGVuZ3RoO3JldHVybiB0aGlzLmhhc1ZlbFJhbmdlJiZlKyssdGhpcy5oYXNLZXlSYW5nZSYmZSsrLGV9d3JpdGUoZSxBLHQsbixzKXtsZXQgYT1uLmdlbixyPW4ubW9kO0oodC5wZHRhLGEmNjU1MzUpLEoodC5wZHRhLHImNjU1MzUpLEoodC54ZHRhLGE+PjE2KSxKKHQueGR0YSxyPj4xNiksbi5iYWcrKyx0aGlzLmdldFdyaXRlR2VuZXJhdG9ycyhzKS5mb3JFYWNoKG89Pm8ud3JpdGUoZSxuKSksdGhpcy5tb2R1bGF0b3JzLmZvckVhY2gobz0+by53cml0ZShBLG4pKX1nZXRXcml0ZUdlbmVyYXRvcnMoZSl7bGV0IEE9dGhpcy5nZW5lcmF0b3JzLmZpbHRlcih0PT50LmdlbmVyYXRvclR5cGUhPT1pLnNhbXBsZUlEJiZ0LmdlbmVyYXRvclR5cGUhPT1pLmluc3RydW1lbnQmJnQuZ2VuZXJhdG9yVHlwZSE9PWkua2V5UmFuZ2UmJnQuZ2VuZXJhdG9yVHlwZSE9PWkudmVsUmFuZ2UpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiTm8gYmFuayBwcm92aWRlZCEgIik7cmV0dXJuIHRoaXMuaGFzVmVsUmFuZ2UmJkEudW5zaGlmdChuZXcgRkEoaS52ZWxSYW5nZSx0aGlzLnZlbFJhbmdlLm1heDw8OHxNYXRoLm1heCh0aGlzLnZlbFJhbmdlLm1pbiwwKSwhMSkpLHRoaXMuaGFzS2V5UmFuZ2UmJkEudW5zaGlmdChuZXcgRkEoaS5rZXlSYW5nZSx0aGlzLmtleVJhbmdlLm1heDw8OHxNYXRoLm1heCh0aGlzLmtleVJhbmdlLm1pbiwwKSwhMSkpLEF9fSxCYT1jbGFzcyBleHRlbmRzIFZ0e30sQ2E9Y2xhc3MgZXh0ZW5kcyBWdHtwYXJlbnRQcmVzZXQ7Y29uc3RydWN0b3IoZSxBKXtzdXBlcigpLHRoaXMucGFyZW50UHJlc2V0PWUsdGhpcy5faW5zdHJ1bWVudD1BLHRoaXMuX2luc3RydW1lbnQubGlua1RvKHRoaXMucGFyZW50UHJlc2V0KX1faW5zdHJ1bWVudDtnZXQgaW5zdHJ1bWVudCgpe3JldHVybiB0aGlzLl9pbnN0cnVtZW50fXNldCBpbnN0cnVtZW50KGUpe3RoaXMuX2luc3RydW1lbnQmJnRoaXMuX2luc3RydW1lbnQudW5saW5rRnJvbSh0aGlzLnBhcmVudFByZXNldCksdGhpcy5faW5zdHJ1bWVudD1lLHRoaXMuX2luc3RydW1lbnQubGlua1RvKHRoaXMucGFyZW50UHJlc2V0KX1nZXRHZW5Db3VudCgpe3JldHVybiBzdXBlci5nZXRHZW5Db3VudCgpKzF9Z2V0V3JpdGVHZW5lcmF0b3JzKGUpe2xldCBBPXN1cGVyLmdldFdyaXRlR2VuZXJhdG9ycyhlKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkluc3RydW1lbnQgSUQgY2Fubm90IGJlIGRldGVybWluZWQgd2l0aG91dCB0aGUgc291bmQgYmFuayBpdHNlbGYuIik7bGV0IHQ9ZS5pbnN0cnVtZW50cy5pbmRleE9mKHRoaXMuaW5zdHJ1bWVudCk7aWYodDwwKXRocm93IG5ldyBFcnJvcihgJHt0aGlzLmluc3RydW1lbnQubmFtZX0gZG9lcyBub3QgZXhpc3QgaW4gJHtlLnNvdW5kQmFua0luZm8ubmFtZX0hIENhbm5vdCB3cml0ZSBpbnN0cnVtZW50IGdlbmVyYXRvci5gKTtyZXR1cm4gQS5wdXNoKG5ldyBGQShpLmluc3RydW1lbnQsdCwhMSkpLEF9fSxoYT1jbGFzcyBleHRlbmRzIFZ0e3BhcmVudEluc3RydW1lbnQ7dXNlQ291bnQ7Y29uc3RydWN0b3IoZSxBKXtzdXBlcigpLHRoaXMucGFyZW50SW5zdHJ1bWVudD1lLHRoaXMuX3NhbXBsZT1BLEEubGlua1RvKHRoaXMucGFyZW50SW5zdHJ1bWVudCksdGhpcy51c2VDb3VudD1lLnVzZUNvdW50fV9zYW1wbGU7Z2V0IHNhbXBsZSgpe3JldHVybiB0aGlzLl9zYW1wbGV9c2V0IHNhbXBsZShlKXt0aGlzLl9zYW1wbGUmJnRoaXMuX3NhbXBsZS51bmxpbmtGcm9tKHRoaXMucGFyZW50SW5zdHJ1bWVudCksdGhpcy5fc2FtcGxlPWUsZS5saW5rVG8odGhpcy5wYXJlbnRJbnN0cnVtZW50KX1nZXRHZW5Db3VudCgpe3JldHVybiBzdXBlci5nZXRHZW5Db3VudCgpKzF9Z2V0V3JpdGVHZW5lcmF0b3JzKGUpe2xldCBBPXN1cGVyLmdldFdyaXRlR2VuZXJhdG9ycyhlKSx0PWUuc2FtcGxlcy5pbmRleE9mKHRoaXMuc2FtcGxlKTtpZih0PDApdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuc2FtcGxlLm5hbWV9IGRvZXMgbm90IGV4aXN0IGluICR7ZS5zb3VuZEJhbmtJbmZvLm5hbWV9ISBDYW5ub3Qgd3JpdGUgc2FtcGxlSUQgZ2VuZXJhdG9yLmApO3JldHVybiBBLnB1c2gobmV3IEZBKGkuc2FtcGxlSUQsdCwhMSkpLEF9fSxsYT0yMixIbz1uZXcgU2V0KFtpLnZlbFJhbmdlLGkua2V5UmFuZ2UsaS5pbnN0cnVtZW50LGkuc2FtcGxlSUQsaS5leGNsdXNpdmVDbGFzcyxpLmVuZE9wZXIsaS5zYW1wbGVNb2RlcyxpLnN0YXJ0bG9vcEFkZHJzT2Zmc2V0LGkuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaS5lbmRsb29wQWRkcnNPZmZzZXQsaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaS5zdGFydEFkZHJzT2Zmc2V0LGkuc3RhcnRBZGRyc0NvYXJzZU9mZnNldCxpLmVuZEFkZHJPZmZzZXQsaS5lbmRBZGRyc0NvYXJzZU9mZnNldCxpLmluaXRpYWxBdHRlbnVhdGlvbixpLmZpbmVUdW5lLGkuY29hcnNlVHVuZSxpLmtleU51bVRvVm9sRW52SG9sZCxpLmtleU51bVRvVm9sRW52RGVjYXksaS5rZXlOdW1Ub01vZEVudkhvbGQsaS5rZXlOdW1Ub01vZEVudkRlY2F5XSksZHQ9Y2xhc3N7bmFtZT0iIjt6b25lcz1bXTtnbG9iYWxab25lPW5ldyBCYTtsaW5rZWRUbz1bXTtnZXQgdXNlQ291bnQoKXtyZXR1cm4gdGhpcy5saW5rZWRUby5sZW5ndGh9Y3JlYXRlWm9uZShlKXtsZXQgQT1uZXcgaGEodGhpcyxlKTtyZXR1cm4gdGhpcy56b25lcy5wdXNoKEEpLEF9bGlua1RvKGUpe3RoaXMubGlua2VkVG8ucHVzaChlKSx0aGlzLnpvbmVzLmZvckVhY2goQT0+QS51c2VDb3VudCsrKX11bmxpbmtGcm9tKGUpe2xldCBBPXRoaXMubGlua2VkVG8uaW5kZXhPZihlKTtpZihBPDApe3NBKGBDYW5ub3QgdW5saW5rICR7ZS5uYW1lfSBmcm9tICR7dGhpcy5uYW1lfTogbm90IGxpbmtlZC5gKTtyZXR1cm59dGhpcy5saW5rZWRUby5zcGxpY2UoQSwxKSx0aGlzLnpvbmVzLmZvckVhY2godD0+dC51c2VDb3VudC0tKX1kZWxldGVVbnVzZWRab25lcygpe3RoaXMuem9uZXM9dGhpcy56b25lcy5maWx0ZXIoZT0+e2xldCBBPWUudXNlQ291bnQ+MDtyZXR1cm4gQXx8ZS5zYW1wbGUudW5saW5rRnJvbSh0aGlzKSxBfSl9ZGVsZXRlKCl7aWYodGhpcy51c2VDb3VudD4wKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGRlbGV0ZSBhbiBpbnN0cnVtZW50IHRoYXQgaXMgdXNlZCBieTogJHt0aGlzLmxpbmtlZFRvLm1hcChlPT5lLm5hbWUpLnRvU3RyaW5nKCl9LmApO3RoaXMuem9uZXMuZm9yRWFjaChlPT5lLnNhbXBsZS51bmxpbmtGcm9tKHRoaXMpKX1kZWxldGVab25lKGUsQT0hMSl7bGV0IHQ9dGhpcy56b25lc1tlXTtyZXR1cm4gdC51c2VDb3VudC09MSx0LnVzZUNvdW50PDF8fEE/KHQuc2FtcGxlLnVubGlua0Zyb20odGhpcyksdGhpcy56b25lcy5zcGxpY2UoZSwxKSwhMCk6ITF9Z2xvYmFsaXplKCl7bGV0IGU9dGhpcy5nbG9iYWxab25lO2ZvcihsZXQgbj0wO248NTg7bisrKXtpZihIby5oYXMobikpY29udGludWU7bj1uO2xldCBzPXt9LGE9eFtuXT8uZGVmfHwwO3NbYV09MDtmb3IobGV0IHIgb2YgdGhpcy56b25lcyl7bGV0IEk9ci5nZXRHZW5lcmF0b3Iobix2b2lkIDApO0khPT12b2lkIDA/c1tJXT09PXZvaWQgMD9zW0ldPTE6c1tJXSsrOnNbYV0rKztsZXQgbztzd2l0Y2gobil7ZGVmYXVsdDpjb250aW51ZTtjYXNlIGkuZGVjYXlWb2xFbnY6bz1pLmtleU51bVRvVm9sRW52RGVjYXk7YnJlYWs7Y2FzZSBpLmhvbGRWb2xFbnY6bz1pLmtleU51bVRvVm9sRW52SG9sZDticmVhaztjYXNlIGkuZGVjYXlNb2RFbnY6bz1pLmtleU51bVRvTW9kRW52RGVjYXk7YnJlYWs7Y2FzZSBpLmhvbGRNb2RFbnY6bz1pLmtleU51bVRvTW9kRW52SG9sZH1pZihyLmdldEdlbmVyYXRvcihvLHZvaWQgMCkhPT12b2lkIDApe3M9e307YnJlYWt9fWlmKE9iamVjdC5rZXlzKHMpLmxlbmd0aD4wKXtsZXQgST1PYmplY3QuZW50cmllcyhzKS5yZWR1Y2UoKGcsQik9PmdbMV08QlsxXT9COmcsWyIwIiwwXSksbz1wYXJzZUludChJWzBdKTtvIT09YSYmZS5zZXRHZW5lcmF0b3IobixvLCExKSx0aGlzLnpvbmVzLmZvckVhY2goZz0+e2xldCBCPWcuZ2V0R2VuZXJhdG9yKG4sdm9pZCAwKTtCIT09dm9pZCAwP0I9PT1vJiZnLnNldEdlbmVyYXRvcihuLG51bGwpOm8hPT1hJiZnLnNldEdlbmVyYXRvcihuLGEpfSl9fWxldCB0PXRoaXMuem9uZXNbMF0ubW9kdWxhdG9ycy5tYXAobj0+RUEuY29weUZyb20obikpO2ZvcihsZXQgbiBvZiB0KXtsZXQgcz0hMDtmb3IobGV0IGEgb2YgdGhpcy56b25lcyl7aWYoIXMpY29udGludWU7YS5tb2R1bGF0b3JzLmZpbmQoST0+RUEuaXNJZGVudGljYWwoSSxuKSl8fChzPSExKX1pZihzKXtlLmFkZE1vZHVsYXRvcnMoRUEuY29weUZyb20obikpO2ZvcihsZXQgYSBvZiB0aGlzLnpvbmVzKXtsZXQgcj1hLm1vZHVsYXRvcnMuZmluZChJPT5FQS5pc0lkZW50aWNhbChJLG4pKTtyJiZyLnRyYW5zZm9ybUFtb3VudD09PW4udHJhbnNmb3JtQW1vdW50JiZhLm1vZHVsYXRvcnMuc3BsaWNlKGEubW9kdWxhdG9ycy5pbmRleE9mKHIpLDEpfX19fWdldFNpemUoKXtsZXQgZT10aGlzLnpvbmVzLnJlZHVjZSgodCxuKT0+bi5tb2R1bGF0b3JzLmxlbmd0aCt0LDApK3RoaXMuZ2xvYmFsWm9uZS5tb2R1bGF0b3JzLmxlbmd0aCxBPXRoaXMuem9uZXMucmVkdWNlKCh0LG4pPT5uLmdldEdlbkNvdW50KCkrdCwwKSt0aGlzLmdsb2JhbFpvbmUuZ2V0R2VuQ291bnQoKTtyZXR1cm57bW9kOmUqbWUsYmFnOih0aGlzLnpvbmVzLmxlbmd0aCsxKSpKdCxnZW46QSpDdCxoZHI6bGF9fXdyaXRlKGUsQSx0LG4scyxhKXtwKGAlY1dyaXRpbmcgJHt0aGlzLm5hbWV9Li4uYCxjLmluZm8pLGtBKG4ucGR0YSx0aGlzLm5hbWUuc3Vic3RyaW5nKDAsMjApLDIwKSxrQShuLnhkdGEsdGhpcy5uYW1lLnN1YnN0cmluZygyMCksMjApLEoobi5wZHRhLHMuaGRyJjY1NTM1KSxKKG4ueGR0YSxzLmhkcj4+PjE2KSxzLmhkcis9dGhpcy56b25lcy5sZW5ndGgrMSx0aGlzLmdsb2JhbFpvbmUud3JpdGUoZSxBLHQscyxhKSx0aGlzLnpvbmVzLmZvckVhY2gocj0+ci53cml0ZShlLEEsdCxzLGEpKX19LGRhPTM4LHBlPWNsYXNze3BhcmVudFNvdW5kQmFuaztuYW1lPSIiO3Byb2dyYW09MDtiYW5rTVNCPTA7YmFua0xTQj0wO2lzR01HU0RydW09ITE7em9uZXM9W107Z2xvYmFsWm9uZTtsaWJyYXJ5PTA7Z2VucmU9MDttb3JwaG9sb2d5PTA7Y29uc3RydWN0b3IoZSxBPW5ldyBCYSl7dGhpcy5wYXJlbnRTb3VuZEJhbms9ZSx0aGlzLmdsb2JhbFpvbmU9QX1nZXQgaXNYR0RydW1zKCl7cmV0dXJuIHRoaXMucGFyZW50U291bmRCYW5rLmlzWEdCYW5rJiZmQS5pc1hHRHJ1bXModGhpcy5iYW5rTVNCKX1nZXQgaXNBbnlEcnVtcygpe2xldCBlPXRoaXMucGFyZW50U291bmRCYW5rLmlzWEdCYW5rO3JldHVybiB0aGlzLmlzR01HU0RydW18fGUmJmZBLmlzWEdEcnVtcyh0aGlzLmJhbmtNU0IpJiZ0aGlzLmJhbmtNU0IhPT0xMjZ9ZGVsZXRlKCl7dGhpcy56b25lcy5mb3JFYWNoKGU9PmUuaW5zdHJ1bWVudD8udW5saW5rRnJvbSh0aGlzKSl9ZGVsZXRlWm9uZShlKXt0aGlzLnpvbmVzW2VdPy5pbnN0cnVtZW50Py51bmxpbmtGcm9tKHRoaXMpLHRoaXMuem9uZXMuc3BsaWNlKGUsMSl9Y3JlYXRlWm9uZShlKXtsZXQgQT1uZXcgQ2EodGhpcyxlKTtyZXR1cm4gdGhpcy56b25lcy5wdXNoKEEpLEF9cHJlbG9hZChlLEEpe2ZvcihsZXQgdD1lO3Q8QSsxO3QrKylmb3IobGV0IG49MDtuPDEyODtuKyspdGhpcy5nZXRTeW50aGVzaXNEYXRhKHQsbikuZm9yRWFjaChzPT57cy5zYW1wbGUuZ2V0QXVkaW9EYXRhKCl9KX1tYXRjaGVzKGUpe3JldHVybiB0ZS5tYXRjaGVzKHRoaXMsZSl9Z2V0U2l6ZSgpe2xldCBlPXRoaXMuem9uZXMucmVkdWNlKCh0LG4pPT5uLm1vZHVsYXRvcnMubGVuZ3RoK3QsMCkrdGhpcy5nbG9iYWxab25lLm1vZHVsYXRvcnMubGVuZ3RoLEE9dGhpcy56b25lcy5yZWR1Y2UoKHQsbik9Pm4uZ2V0R2VuQ291bnQoKSt0LDApK3RoaXMuZ2xvYmFsWm9uZS5nZXRHZW5Db3VudCgpO3JldHVybnttb2Q6ZSptZSxiYWc6KHRoaXMuem9uZXMubGVuZ3RoKzEpKkp0LGdlbjpBKkN0LGhkcjpkYX19Z2V0U3ludGhlc2lzRGF0YShlLEEpe2lmKHRoaXMuem9uZXMubGVuZ3RoPDEpcmV0dXJuW107ZnVuY3Rpb24gdChkLGgpe3JldHVybiBoPj1kLm1pbiYmaDw9ZC5tYXh9ZnVuY3Rpb24gbihkLGgpe2QucHVzaCguLi5oLmZpbHRlcihDPT4hZC5maW5kKFE9PlEuZ2VuZXJhdG9yVHlwZT09PUMuZ2VuZXJhdG9yVHlwZSkpKX1mdW5jdGlvbiBzKGQsaCl7ZC5wdXNoKC4uLmguZmlsdGVyKEM9PiFkLmZpbmQoUT0+RUEuaXNJZGVudGljYWwoQyxRKSkpKX1sZXQgYT1bXSxyPVsuLi50aGlzLmdsb2JhbFpvbmUuZ2VuZXJhdG9yc10sST1bLi4udGhpcy5nbG9iYWxab25lLm1vZHVsYXRvcnNdLG89dGhpcy5nbG9iYWxab25lLmtleVJhbmdlLGc9dGhpcy5nbG9iYWxab25lLnZlbFJhbmdlO3JldHVybiB0aGlzLnpvbmVzLmZpbHRlcihkPT50KGQuaGFzS2V5UmFuZ2U/ZC5rZXlSYW5nZTpvLGUpJiZ0KGQuaGFzVmVsUmFuZ2U/ZC52ZWxSYW5nZTpnLEEpKS5mb3JFYWNoKGQ9PntsZXQgaD1kLmluc3RydW1lbnQ7aWYoIWh8fGguem9uZXMubGVuZ3RoPDEpcmV0dXJuO2xldCBDPWQuZ2VuZXJhdG9ycyxRPWQubW9kdWxhdG9ycyxtPVsuLi5oLmdsb2JhbFpvbmUuZ2VuZXJhdG9yc10seT1bLi4uaC5nbG9iYWxab25lLm1vZHVsYXRvcnNdLEY9aC5nbG9iYWxab25lLmtleVJhbmdlLGs9aC5nbG9iYWxab25lLnZlbFJhbmdlO2guem9uZXMuZmlsdGVyKHY9PnQodi5oYXNLZXlSYW5nZT92LmtleVJhbmdlOkYsZSkmJnQodi5oYXNWZWxSYW5nZT92LnZlbFJhbmdlOmssQSkpLmZvckVhY2godj0+e2xldCBMPVsuLi52LmdlbmVyYXRvcnNdLEU9Wy4uLnYubW9kdWxhdG9yc107bihDLHIpLG4oTCxtKSxzKFEsSSkscyhFLHkpLHMoRSx0aGlzLnBhcmVudFNvdW5kQmFuay5kZWZhdWx0TW9kdWxhdG9ycyk7bGV0IFg9Wy4uLkVdO2ZvcihsZXQgTyBvZiBRKXtsZXQgbkE9WC5maW5kSW5kZXgoJD0+RUEuaXNJZGVudGljYWwoTywkKSk7bkEhPT0tMT9YW25BXT1YW25BXS5zdW1UcmFuc2Zvcm0oTyk6WC5wdXNoKE8pfXYuc2FtcGxlJiZhLnB1c2goe2luc3RydW1lbnRHZW5lcmF0b3JzOkwscHJlc2V0R2VuZXJhdG9yczpDLG1vZHVsYXRvcnM6WCxzYW1wbGU6di5zYW1wbGV9KX0pfSksYX10b01JRElTdHJpbmcoKXtyZXR1cm4gdGUudG9NSURJU3RyaW5nKHRoaXMpfXRvU3RyaW5nKCl7cmV0dXJuIHRlLnRvTmFtZWRNSURJU3RyaW5nKHRoaXMpfXRvRmxhdHRlbmVkSW5zdHJ1bWVudCgpe2xldCBlPShnLEIpPT57Zy5wdXNoKC4uLkIuZmlsdGVyKGQ9PiFnLmZpbmQoaD0+aC5nZW5lcmF0b3JUeXBlPT09ZC5nZW5lcmF0b3JUeXBlKSkpfSxBPShnLEIpPT4oe21pbjpNYXRoLm1heChnLm1pbixCLm1pbiksbWF4Ok1hdGgubWluKGcubWF4LEIubWF4KX0pLHQ9KGcsQik9PntnLnB1c2goLi4uQi5maWx0ZXIoZD0+IWcuZmluZChoPT5FQS5pc0lkZW50aWNhbChkLGgpKSkpfSxuPW5ldyBkdDtuLm5hbWU9dGhpcy5uYW1lO2xldCBzPVtdLGE9W10scj10aGlzLmdsb2JhbFpvbmU7cy5wdXNoKC4uLnIuZ2VuZXJhdG9ycyksYS5wdXNoKC4uLnIubW9kdWxhdG9ycyk7bGV0IEk9ci5rZXlSYW5nZSxvPXIudmVsUmFuZ2U7Zm9yKGxldCBnIG9mIHRoaXMuem9uZXMpe2lmKCFnLmluc3RydW1lbnQpdGhyb3cgbmV3IEVycm9yKCJObyBpbnN0cnVtZW50IGluIGEgcHJlc2V0IHpvbmUuIik7bGV0IEI9Zy5rZXlSYW5nZTtnLmhhc0tleVJhbmdlfHwoQj1JKTtsZXQgZD1nLnZlbFJhbmdlO2cuaGFzVmVsUmFuZ2V8fChkPW8pO2xldCBoPWcuZ2VuZXJhdG9ycy5tYXAoTD0+bmV3IEZBKEwuZ2VuZXJhdG9yVHlwZSxMLmdlbmVyYXRvclZhbHVlKSk7ZShoLHMpO2xldCBDPVsuLi5nLm1vZHVsYXRvcnNdO3QoQyxhKTtsZXQgUT1nLmluc3RydW1lbnQsbT1RLnpvbmVzLHk9W10sRj1bXSxrPVEuZ2xvYmFsWm9uZTt5LnB1c2goLi4uay5nZW5lcmF0b3JzKSxGLnB1c2goLi4uay5tb2R1bGF0b3JzKTtsZXQgRD1rLmtleVJhbmdlLHY9ay52ZWxSYW5nZTtmb3IobGV0IEwgb2YgbSl7aWYoIUwuc2FtcGxlKXRocm93IG5ldyBFcnJvcigiTm8gc2FtcGxlIGluIGFuIGluc3RydW1lbnQgem9uZS4iKTtsZXQgRT1MLmtleVJhbmdlO0wuaGFzS2V5UmFuZ2V8fChFPUQpO2xldCBYPUwudmVsUmFuZ2U7aWYoTC5oYXNWZWxSYW5nZXx8KFg9diksRT1BKEUsQiksWD1BKFgsZCksRS5tYXg8RS5taW58fFgubWF4PFgubWluKWNvbnRpbnVlO2xldCBPPUwuZ2VuZXJhdG9ycy5tYXAoej0+bmV3IEZBKHouZ2VuZXJhdG9yVHlwZSx6LmdlbmVyYXRvclZhbHVlKSk7ZShPLHkpO2xldCBuQT1bLi4uTC5tb2R1bGF0b3JzXTt0KG5BLEYpO2xldCAkPVsuLi5uQV07Zm9yKGxldCB6IG9mIEMpe2xldCB0QT0kLmZpbmRJbmRleChpQT0+RUEuaXNJZGVudGljYWwoeixpQSkpO3RBIT09LTE/JFt0QV09JFt0QV0uc3VtVHJhbnNmb3JtKHopOiQucHVzaCh6KX1sZXQgVj1PLm1hcCh6PT5uZXcgRkEoei5nZW5lcmF0b3JUeXBlLHouZ2VuZXJhdG9yVmFsdWUpKTtmb3IobGV0IHogb2YgaCl7aWYoei5nZW5lcmF0b3JUeXBlPT09aS52ZWxSYW5nZXx8ei5nZW5lcmF0b3JUeXBlPT09aS5rZXlSYW5nZXx8ei5nZW5lcmF0b3JUeXBlPT09aS5pbnN0cnVtZW50fHx6LmdlbmVyYXRvclR5cGU9PT1pLmVuZE9wZXJ8fHouZ2VuZXJhdG9yVHlwZT09PWkuc2FtcGxlTW9kZXMpY29udGludWU7bGV0IHRBPU8uZmluZEluZGV4KGlBPT5pQS5nZW5lcmF0b3JUeXBlPT09ei5nZW5lcmF0b3JUeXBlKTtpZih0QSE9PS0xKXtsZXQgaUE9Vlt0QV0uZ2VuZXJhdG9yVmFsdWUrei5nZW5lcmF0b3JWYWx1ZTtWW3RBXT1uZXcgRkEoei5nZW5lcmF0b3JUeXBlLGlBKX1lbHNle2xldCBpQT14W3ouZ2VuZXJhdG9yVHlwZV0uZGVmK3ouZ2VuZXJhdG9yVmFsdWU7Vi5wdXNoKG5ldyBGQSh6LmdlbmVyYXRvclR5cGUsaUEpKX19Vj1WLmZpbHRlcih6PT56LmdlbmVyYXRvclR5cGUhPT1pLnNhbXBsZUlEJiZ6LmdlbmVyYXRvclR5cGUhPT1pLmtleVJhbmdlJiZ6LmdlbmVyYXRvclR5cGUhPT1pLnZlbFJhbmdlJiZ6LmdlbmVyYXRvclR5cGUhPT1pLmVuZE9wZXImJnouZ2VuZXJhdG9yVHlwZSE9PWkuaW5zdHJ1bWVudCYmei5nZW5lcmF0b3JWYWx1ZSE9PXhbei5nZW5lcmF0b3JUeXBlXS5kZWYpO2xldCBxPW4uY3JlYXRlWm9uZShMLnNhbXBsZSk7cS5rZXlSYW5nZT1FLHEudmVsUmFuZ2U9WCxxLmtleVJhbmdlLm1pbj09PTAmJnEua2V5UmFuZ2UubWF4PT09MTI3JiYocS5rZXlSYW5nZS5taW49LTEpLHEudmVsUmFuZ2UubWluPT09MCYmcS52ZWxSYW5nZS5tYXg9PT0xMjcmJihxLnZlbFJhbmdlLm1pbj0tMSkscS5hZGRHZW5lcmF0b3JzKC4uLlYpLHEuYWRkTW9kdWxhdG9ycyguLi4kKX19cmV0dXJuIG59d3JpdGUoZSxBLHQsbixzLGEpe3AoYCVjV3JpdGluZyAke3RoaXMubmFtZX0uLi5gLGMuaW5mbyksa0Eobi5wZHRhLHRoaXMubmFtZS5zdWJzdHJpbmcoMCwyMCksMjApLGtBKG4ueGR0YSx0aGlzLm5hbWUuc3Vic3RyaW5nKDIwKSwyMCksSihuLnBkdGEsdGhpcy5wcm9ncmFtKTtsZXQgcj10aGlzLmJhbmtNU0I7dGhpcy5pc0dNR1NEcnVtP3I9MTI4OnRoaXMuYmFua01TQj09PTAmJihyPXRoaXMuYmFua0xTQiksSihuLnBkdGEsciksbi54ZHRhLmN1cnJlbnRJbmRleCs9NCxKKG4ucGR0YSxzLmhkciY2NTUzNSksSihuLnhkdGEscy5oZHI+PjE2KSxnQShuLnBkdGEsdGhpcy5saWJyYXJ5KSxnQShuLnBkdGEsdGhpcy5nZW5yZSksZ0Eobi5wZHRhLHRoaXMubW9ycGhvbG9neSksbi54ZHRhLmN1cnJlbnRJbmRleCs9MTIscy5oZHIrPXRoaXMuem9uZXMubGVuZ3RoKzEsdGhpcy5nbG9iYWxab25lLndyaXRlKGUsQSx0LHMsYSksdGhpcy56b25lcy5mb3JFYWNoKEk9Pkkud3JpdGUoZSxBLHQscyxhKSl9fTtmdW5jdGlvbiBEcyhlLEEpe2xldCB0O3JldHVybiBBP3Q9ZS5maW5kKG49Pm4uaXNYR0RydW1zKTp0PWUuZmluZChuPT5uLmlzR01HU0RydW0pLHR8fChlLmZpbmQobj0+bi5pc0FueURydW1zKT8/ZVswXSl9ZnVuY3Rpb24gUWEoZSxBLHQpe2lmKGUubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCJObyBwcmVzZXRzISIpO0EuaXNHTUdTRHJ1bSYmZkEuaXNTeXN0ZW1YRyh0KSYmKEE9ey4uLkEsaXNHTUdTRHJ1bTohMSxiYW5rTFNCOjAsYmFua01TQjpmQS5nZXREcnVtQmFuayh0KX0pO2xldHtpc0dNR1NEcnVtOm4sYmFua0xTQjpzLGJhbmtNU0I6YSxwcm9ncmFtOnJ9PUEsST1mQS5pc1N5c3RlbVhHKHQpLG89ZkEuaXNYR0RydW1zKGEpJiZJLGc9ZS5maW5kKEM9PkMubWF0Y2hlcyhBKSk7aWYoZyYmKCFvfHxvJiZnLmlzWEdEcnVtcykpcmV0dXJuIGc7bGV0IEI9Qz0+e3AoYCVjUHJlc2V0ICVjJHt0ZS50b01JRElTdHJpbmcoQSl9JWMgbm90IGZvdW5kLiAoJHt0fSkgUmVwbGFjZWQgd2l0aCAlYyR7Qy50b1N0cmluZygpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKX07aWYobil7bGV0IEM9ZS5maW5kKFE9PlEuaXNHTUdTRHJ1bSYmUS5wcm9ncmFtPT09cik7cmV0dXJuIEN8fChDPWUuZmluZChRPT5RLmlzQW55RHJ1bXMmJlEucHJvZ3JhbT09PXIpLEMpPyhCKEMpLEMpOihDPURzKGUsITEpLEIoQyksQyl9aWYobyl7bGV0IEM9ZS5maW5kKFE9PlEucHJvZ3JhbT09PXImJlEuaXNYR0RydW1zKTtyZXR1cm4gQ3x8KEM9ZS5maW5kKFE9PlEuaXNBbnlEcnVtcyYmUS5wcm9ncmFtPT09ciksQyk/KEIoQyksQyk6KEM9RHMoZSwhMCksQihDKSxDKX1sZXQgZD1lLmZpbHRlcihDPT5DLnByb2dyYW09PT1yJiYhQy5pc0FueURydW1zKTtpZihkLmxlbmd0aDwxKXJldHVybiBCKGVbMF0pLGVbMF07aWYoST9nPWQuZmluZChDPT5DLmJhbmtMU0I9PT1zKTpnPWQuZmluZChDPT5DLmJhbmtNU0I9PT1hKSxnKXJldHVybiBCKGcpLGc7bGV0IGg9TWF0aC5tYXgoYSxzKTtyZXR1cm4gZz1kLmZpbmQoQz0+Qy5iYW5rTFNCPT09aHx8Qy5iYW5rTVNCPT09aCksZz8oQihnKSxnKTooQihkWzBdKSxkWzBdKX12YXIgWW89Y2xhc3MgZXh0ZW5kcyBwZXtjb25zdHJ1Y3RvcihlLEEpe3N1cGVyKGUucGFyZW50U291bmRCYW5rLGUuZ2xvYmFsWm9uZSksdGhpcy5iYW5rTVNCPWZBLmFkZEJhbmtPZmZzZXQoZS5iYW5rTVNCLEEsZS5pc1hHRHJ1bXMpLHRoaXMubmFtZT1lLm5hbWUsdGhpcy5iYW5rTFNCPWUuYmFua0xTQix0aGlzLmlzR01HU0RydW09ZS5pc0dNR1NEcnVtLHRoaXMucHJvZ3JhbT1lLnByb2dyYW0sdGhpcy5nZW5yZT1lLmdlbnJlLHRoaXMubW9ycGhvbG9neT1lLm1vcnBob2xvZ3ksdGhpcy5saWJyYXJ5PWUubGlicmFyeSx0aGlzLnpvbmVzPWUuem9uZXN9fSxQbz1jbGFzc3tzb3VuZEJhbmtMaXN0PVtdO3ByZXNldExpc3RDaGFuZ2VDYWxsYmFjaztzZWxlY3RhYmxlUHJlc2V0TGlzdD1bXTtjb25zdHJ1Y3RvcihlKXt0aGlzLnByZXNldExpc3RDaGFuZ2VDYWxsYmFjaz1lfV9wcmVzZXRMaXN0PVtdO2dldCBwcmVzZXRMaXN0KCl7cmV0dXJuWy4uLnRoaXMuX3ByZXNldExpc3RdfWdldCBwcmlvcml0eU9yZGVyKCl7cmV0dXJuIHRoaXMuc291bmRCYW5rTGlzdC5tYXAoZT0+ZS5pZCl9c2V0IHByaW9yaXR5T3JkZXIoZSl7dGhpcy5zb3VuZEJhbmtMaXN0LnNvcnQoKEEsdCk9PmUuaW5kZXhPZihBLmlkKS1lLmluZGV4T2YodC5pZCkpLHRoaXMuZ2VuZXJhdGVQcmVzZXRMaXN0KCl9ZGVsZXRlU291bmRCYW5rKGUpe2lmKHRoaXMuc291bmRCYW5rTGlzdC5sZW5ndGg9PT0wKXtzQSgiMSBzb3VuZGJhbmsgbGVmdC4gQWJvcnRpbmchIik7cmV0dXJufWxldCBBPXRoaXMuc291bmRCYW5rTGlzdC5maW5kSW5kZXgodD0+dC5pZD09PWUpO2lmKEE9PT0tMSl0aHJvdyBuZXcgRXJyb3IoYE5vIHNvdW5kIGJhbmsgd2l0aCBpZCAiJHtlfSJgKTt0aGlzLnNvdW5kQmFua0xpc3Quc3BsaWNlKEEsMSksdGhpcy5nZW5lcmF0ZVByZXNldExpc3QoKX1hZGRTb3VuZEJhbmsoZSxBLHQ9MCl7bGV0IG49dGhpcy5zb3VuZEJhbmtMaXN0LmZpbmQocz0+cy5pZD09PUEpO24hPT12b2lkIDA/KG4uc291bmRCYW5rPWUsbi5iYW5rT2Zmc2V0PXQpOnRoaXMuc291bmRCYW5rTGlzdC5wdXNoKHtpZDpBLHNvdW5kQmFuazplLGJhbmtPZmZzZXQ6dH0pLHRoaXMuZ2VuZXJhdGVQcmVzZXRMaXN0KCl9Z2V0UHJlc2V0KGUsQSl7aWYodGhpcy5zb3VuZEJhbmtMaXN0Lmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcigiTm8gc291bmQgYmFua3MhIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCBvbmU/Iik7cmV0dXJuIFFhKHRoaXMuc2VsZWN0YWJsZVByZXNldExpc3QsZSxBKX1kZXN0cm95KCl7dGhpcy5zb3VuZEJhbmtMaXN0LmZvckVhY2goZT0+e2Uuc291bmRCYW5rLmRlc3Ryb3lTb3VuZEJhbmsoKX0pLHRoaXMuc291bmRCYW5rTGlzdD1bXX1nZW5lcmF0ZVByZXNldExpc3QoKXtsZXQgZT1uZXcgQXJyYXksQT1uZXcgU2V0O3RoaXMuc291bmRCYW5rTGlzdC5mb3JFYWNoKHQ9PntsZXQgbj10LnNvdW5kQmFuayxzPXQuYmFua09mZnNldDtuLnByZXNldHMuZm9yRWFjaChhPT57bGV0IHI9bmV3IFlvKGEscyk7QS5oYXMoci50b01JRElTdHJpbmcoKSl8fChBLmFkZChyLnRvTUlESVN0cmluZygpKSxlLnB1c2gocikpfSl9KSxlLnNvcnQodGUuc29ydGVyLmJpbmQodGUpKSx0aGlzLnNlbGVjdGFibGVQcmVzZXRMaXN0PWUsdGhpcy5fcHJlc2V0TGlzdD1lLm1hcCh0PT4oe2JhbmtNU0I6dC5iYW5rTVNCLGJhbmtMU0I6dC5iYW5rTFNCLHByb2dyYW06dC5wcm9ncmFtLGlzR01HU0RydW06dC5pc0dNR1NEcnVtLG5hbWU6dC5uYW1lLGlzQW55RHJ1bXM6dC5pc0FueURydW1zfSkpLHRoaXMucHJlc2V0TGlzdENoYW5nZUNhbGxiYWNrKCl9fSxKbz0uMDUscW89MzA3MCxLbz0yZTMsd3M9TWF0aC5QSS8yLE50PS01MDAsdWE9NTAwLG9zPXVhLU50LGZhPW5ldyBGbG9hdDMyQXJyYXkob3MrMSksbWE9bmV3IEZsb2F0MzJBcnJheShvcysxKTtmb3IobGV0IGU9TnQ7ZTw9dWE7ZSsrKXtsZXQgQT0oZS1OdCkvb3MsdD1lLU50O2ZhW3RdPU1hdGguY29zKHdzKkEpLG1hW3RdPU1hdGguc2luKHdzKkEpfWZ1bmN0aW9uIE9vKGUsQSx0LG4scyxhLHIsSSxvKXtpZihpc05hTihBWzBdKSlyZXR1cm47bGV0IGc7ZS5vdmVycmlkZVBhbj9nPWUub3ZlcnJpZGVQYW46KGUuY3VycmVudFBhbis9KGUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnBhbl0tZS5jdXJyZW50UGFuKSp0aGlzLnN5bnRoUHJvcHMucGFuU21vb3RoaW5nRmFjdG9yLGc9ZS5jdXJyZW50UGFuKTtsZXQgQj10aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5tYXN0ZXJHYWluKnRoaXMuc3ludGhQcm9wcy5taWRpVm9sdW1lKmUuZ2FpbixkPX5+KGcrNTAwKSxoPWZhW2RdKkIqdGhpcy5zeW50aFByb3BzLnBhbkxlZnQsQz1tYVtkXSpCKnRoaXMuc3ludGhQcm9wcy5wYW5SaWdodDtpZih0aGlzLnN5bnRoLmVuYWJsZUVmZmVjdHMpe2xldCBRPWUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnJldmVyYkVmZmVjdHNTZW5kXTtpZihRPjApe2xldCB5PXRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLnJldmVyYkdhaW4qdGhpcy5zeW50aFByb3BzLnJldmVyYlNlbmQqQiooUS9xbyk7Zm9yKGxldCBGPTA7RjxBLmxlbmd0aDtGKyspe2xldCBrPUYrbztzW2tdKz15KkFbRl0sYVtrXSs9eSpBW0ZdfX1sZXQgbT1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5jaG9ydXNFZmZlY3RzU2VuZF07aWYobT4wKXtsZXQgeT10aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5jaG9ydXNHYWluKnRoaXMuc3ludGhQcm9wcy5jaG9ydXNTZW5kKihtL0tvKSxGPWgqeSxrPUMqeTtmb3IobGV0IEQ9MDtEPEEubGVuZ3RoO0QrKyl7bGV0IHY9RCtvO3Jbdl0rPUYqQVtEXSxJW3ZdKz1rKkFbRF19fX1pZihoPjApZm9yKGxldCBRPTA7UTxBLmxlbmd0aDtRKyspdFtRK29dKz1oKkFbUV07aWYoQz4wKWZvcihsZXQgUT0wO1E8QS5sZW5ndGg7USsrKW5bUStvXSs9QypBW1FdfXZhciBWbz0uMSxYdD1jbGFzcyBFdHtzdGF0aWMgY2FjaGVkQ29lZmZpY2llbnRzPVtdO3Jlc29uYW5jZUNiPTA7Y3VycmVudEluaXRpYWxGYz0xMzUwMDthMD0wO2ExPTA7YTI9MDthMz0wO2E0PTA7eDE9MDt4Mj0wO3kxPTA7eTI9MDtsYXN0VGFyZ2V0Q3V0b2ZmPTEvMDtpbml0aWFsaXplZD0hMTtzYW1wbGVSYXRlO21heEN1dG9mZjtjb25zdHJ1Y3RvcihBKXt0aGlzLnNhbXBsZVJhdGU9QSx0aGlzLm1heEN1dG9mZj1BKi40NX1zdGF0aWMgYXBwbHkoQSx0LG4scyl7bGV0IGE9QS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuaW5pdGlhbEZpbHRlckZjXSxyPUEuZmlsdGVyO3IuaW5pdGlhbGl6ZWQ/ci5jdXJyZW50SW5pdGlhbEZjKz0oYS1yLmN1cnJlbnRJbml0aWFsRmMpKnM6KHIuaW5pdGlhbGl6ZWQ9ITAsci5jdXJyZW50SW5pdGlhbEZjPWEpO2xldCBJPXIuY3VycmVudEluaXRpYWxGYytuLG89QS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuaW5pdGlhbEZpbHRlclFdO2lmKHIuY3VycmVudEluaXRpYWxGYz4xMzQ5OSYmST4xMzQ5OSYmbz09PTApe3IuY3VycmVudEluaXRpYWxGYz0xMzUwMDtyZXR1cm59KE1hdGguYWJzKHIubGFzdFRhcmdldEN1dG9mZi1JKT4xfHxyLnJlc29uYW5jZUNiIT09bykmJihyLmxhc3RUYXJnZXRDdXRvZmY9SSxyLnJlc29uYW5jZUNiPW8sRXQuY2FsY3VsYXRlQ29lZmZpY2llbnRzKHIsSSkpO2ZvcihsZXQgZz0wO2c8dC5sZW5ndGg7ZysrKXtsZXQgQj10W2ddLGQ9ci5hMCpCK3IuYTEqci54MStyLmEyKnIueDItci5hMypyLnkxLXIuYTQqci55MjtyLngyPXIueDEsci54MT1CLHIueTI9ci55MSxyLnkxPWQsdFtnXT1kfX1zdGF0aWMgY2FsY3VsYXRlQ29lZmZpY2llbnRzKEEsdCl7dD1+fnQ7bGV0IG49QS5yZXNvbmFuY2VDYixzPUV0LmNhY2hlZENvZWZmaWNpZW50cz8uW25dPy5bdF07aWYocyE9PXZvaWQgMCl7QS5hMD1zLmEwLEEuYTE9cy5hMSxBLmEyPXMuYTIsQS5hMz1zLmEzLEEuYTQ9cy5hNDtyZXR1cm59bGV0IGE9Tm4odCk7YT1NYXRoLm1pbihhLEEubWF4Q3V0b2ZmKTtsZXQgcj1uLzEwLEk9QWUoLShyLTMuMDEpKSxvPTEvTWF0aC5zcXJ0KEFlKC1yKSksZz0yKk1hdGguUEkqYS9BLnNhbXBsZVJhdGUsQj1NYXRoLmNvcyhnKSxkPU1hdGguc2luKGcpLygyKkkpLGg9KDEtQikqbyxDPWgvMixRPUMsbT0xK2QseT0tMipCLEY9MS1kLGs9e2EwOkMvbSxhMTpoL20sYTI6US9tLGEzOnkvbSxhNDpGL219O0EuYTA9ay5hMCxBLmExPWsuYTEsQS5hMj1rLmEyLEEuYTM9ay5hMyxBLmE0PWsuYTQsRXQuY2FjaGVkQ29lZmZpY2llbnRzW25dPz89W10sRXQuY2FjaGVkQ29lZmZpY2llbnRzW25dW3RdPWt9fSxIbj1uZXcgWHQoNDQxMDApO0huLnJlc29uYW5jZUNiPTA7Zm9yKGxldCBlPTE1MDA7ZTwxMzUwMDtlKyspSG4uY3VycmVudEluaXRpYWxGYz1lLFh0LmNhbGN1bGF0ZUNvZWZmaWNpZW50cyhIbixlKTt2YXIgRnM9e2VuYWJsZUV2ZW50U3lzdGVtOiEwLGluaXRpYWxUaW1lOjAsZW5hYmxlRWZmZWN0czohMH07ZnVuY3Rpb24gWG8oZSxBKXtsZXQgdD0wO3JldHVybiBlLmRydW1DaGFubmVsJiYodCs9NSksQS5pc0luUmVsZWFzZSYmKHQtPTUpLHQrPUEudmVsb2NpdHkvMjUsdC09QS52b2x1bWVFbnZlbG9wZS5zdGF0ZSxBLmlzSW5SZWxlYXNlJiYodC09NSksdC09QS52b2x1bWVFbnZlbG9wZS5jdXJyZW50QXR0ZW51YXRpb25EYi81MCx0fWZ1bmN0aW9uIFpvKGUpe2xldCBBPVtdO2ZvcihsZXQgbiBvZiB0aGlzLm1pZGlDaGFubmVscylmb3IobGV0IHMgb2Ygbi52b2ljZXMpaWYoIXMuZmluaXNoZWQpe2xldCBhPVhvKG4scyk7QS5wdXNoKHtjaGFubmVsOm4sdm9pY2U6cyxwcmlvcml0eTphfSl9QS5zb3J0KChuLHMpPT5uLnByaW9yaXR5LXMucHJpb3JpdHkpO2xldCB0PUEuc2xpY2UoMCxlKTtmb3IobGV0e2NoYW5uZWw6bix2b2ljZTpzfW9mIHQpe2xldCBhPW4udm9pY2VzLmluZGV4T2Yocyk7YT4tMSYmbi52b2ljZXMuc3BsaWNlKGEsMSl9fXZhciBTbj0xLFluPW5ldyBGbG9hdDMyQXJyYXkoMWUzKTtmb3IobGV0IGU9MDtlPFluLmxlbmd0aDtlKyspWW5bZV09SWEoMCxRQS5jb252ZXgsZS8xZTMpO3ZhciBfZT1jbGFzcyBQbnthdHRhY2tEdXJhdGlvbj0wO2RlY2F5RHVyYXRpb249MDtob2xkRHVyYXRpb249MDtyZWxlYXNlRHVyYXRpb249MDtzdXN0YWluTGV2ZWw9MDtkZWxheUVuZD0wO2F0dGFja0VuZD0wO2hvbGRFbmQ9MDtkZWNheUVuZD0wO3JlbGVhc2VTdGFydExldmVsPTA7Y3VycmVudFZhbHVlPTA7c3RhdGljIHN0YXJ0UmVsZWFzZShBKXtQbi5yZWNhbGN1bGF0ZShBKX1zdGF0aWMgcmVjYWxjdWxhdGUoQSl7bGV0IHQ9QS5tb2R1bGF0aW9uRW52ZWxvcGU7QS5pc0luUmVsZWFzZSYmKHQucmVsZWFzZVN0YXJ0TGV2ZWw9UG4uZ2V0VmFsdWUoQSxBLnJlbGVhc2VTdGFydFRpbWUsITApKSx0LnN1c3RhaW5MZXZlbD0xLUEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnN1c3RhaW5Nb2RFbnZdLzFlMyx0LmF0dGFja0R1cmF0aW9uPVFlKEEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmF0dGFja01vZEVudl0pO2xldCBuPSg2MC1BLm1pZGlOb3RlKSpBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5rZXlOdW1Ub01vZEVudkRlY2F5XSxzPVFlKEEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmRlY2F5TW9kRW52XStuKTt0LmRlY2F5RHVyYXRpb249cyooMS10LnN1c3RhaW5MZXZlbCk7bGV0IGE9KDYwLUEubWlkaU5vdGUpKkEubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmtleU51bVRvTW9kRW52SG9sZF07dC5ob2xkRHVyYXRpb249UWUoYStBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5ob2xkTW9kRW52XSk7bGV0IHI9UWUoTWF0aC5tYXgoQS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kucmVsZWFzZU1vZEVudl0sLTcyMDApKTt0LnJlbGVhc2VEdXJhdGlvbj1yKnQucmVsZWFzZVN0YXJ0TGV2ZWwsdC5kZWxheUVuZD1BLnN0YXJ0VGltZStRZShBLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWxheU1vZEVudl0pLHQuYXR0YWNrRW5kPXQuZGVsYXlFbmQrdC5hdHRhY2tEdXJhdGlvbix0LmhvbGRFbmQ9dC5hdHRhY2tFbmQrdC5ob2xkRHVyYXRpb24sdC5kZWNheUVuZD10LmhvbGRFbmQrdC5kZWNheUR1cmF0aW9ufXN0YXRpYyBnZXRWYWx1ZShBLHQsbj0hMSl7bGV0IHM9QS5tb2R1bGF0aW9uRW52ZWxvcGU7cmV0dXJuIEEuaXNJblJlbGVhc2UmJiFuP3MucmVsZWFzZVN0YXJ0TGV2ZWw9PT0wPzA6TWF0aC5tYXgoMCwoMS0odC1BLnJlbGVhc2VTdGFydFRpbWUpL3MucmVsZWFzZUR1cmF0aW9uKSpzLnJlbGVhc2VTdGFydExldmVsKToodDxzLmRlbGF5RW5kP3MuY3VycmVudFZhbHVlPTA6dDxzLmF0dGFja0VuZD9zLmN1cnJlbnRWYWx1ZT1Zblt+figoMS0ocy5hdHRhY2tFbmQtdCkvcy5hdHRhY2tEdXJhdGlvbikqMWUzKV06dDxzLmhvbGRFbmQ/cy5jdXJyZW50VmFsdWU9U246dDxzLmRlY2F5RW5kP3MuY3VycmVudFZhbHVlPSgxLShzLmRlY2F5RW5kLXQpL3MuZGVjYXlEdXJhdGlvbikqKHMuc3VzdGFpbkxldmVsLVNuKStTbjpzLmN1cnJlbnRWYWx1ZT1zLnN1c3RhaW5MZXZlbCxzLmN1cnJlbnRWYWx1ZSl9fSxTYT1jbGFzc3tzYW1wbGVEYXRhO3BsYXliYWNrU3RlcD0wO2N1cnNvcj0wO3Jvb3RLZXk9MDtsb29wU3RhcnQ9MDtsb29wRW5kPTA7ZW5kPTA7bG9vcGluZ01vZGU9MDtpc0xvb3Bpbmc9ITE7Y29uc3RydWN0b3IoZSxBLHQsbixzLGEscixJKXt0aGlzLnNhbXBsZURhdGE9ZSx0aGlzLnBsYXliYWNrU3RlcD1BLHRoaXMuY3Vyc29yPXQsdGhpcy5yb290S2V5PW4sdGhpcy5sb29wU3RhcnQ9cyx0aGlzLmxvb3BFbmQ9YSx0aGlzLmVuZD1yLHRoaXMubG9vcGluZ01vZGU9SSx0aGlzLmlzTG9vcGluZz10aGlzLmxvb3BpbmdNb2RlPT09MXx8dGhpcy5sb29waW5nTW9kZT09PTN9fSx6bz0tMjMyMCxXbz0tMTEzMCxKbj1jbGFzcyBwYXtzYW1wbGU7ZmlsdGVyO2dhaW49MTtnZW5lcmF0b3JzO21vZHVsYXRvcnM9W107cmVzb25hbmNlT2Zmc2V0PTA7bW9kdWxhdGVkR2VuZXJhdG9ycztmaW5pc2hlZD0hMTtpc0luUmVsZWFzZT0hMTt2ZWxvY2l0eT0wO21pZGlOb3RlPTA7cHJlc3N1cmU9MDt0YXJnZXRLZXk9MDttb2R1bGF0aW9uRW52ZWxvcGU9bmV3IF9lO3ZvbHVtZUVudmVsb3BlO3N0YXJ0VGltZT0wO3JlbGVhc2VTdGFydFRpbWU9MS8wO2N1cnJlbnRUdW5pbmdDZW50cz0wO2N1cnJlbnRUdW5pbmdDYWxjdWxhdGVkPTE7Y3VycmVudFBhbj0wO3JlYWxLZXk7cG9ydGFtZW50b0Zyb21LZXk9LTE7cG9ydGFtZW50b0R1cmF0aW9uPTA7b3ZlcnJpZGVQYW49MDtleGNsdXNpdmVDbGFzcz0wO2NvbnN0cnVjdG9yKEEsdCxuLHMsYSxyLEksbyxnKXt0aGlzLnNhbXBsZT10LHRoaXMuZ2VuZXJhdG9ycz1vLHRoaXMuZXhjbHVzaXZlQ2xhc3M9dGhpcy5nZW5lcmF0b3JzW2kuZXhjbHVzaXZlQ2xhc3NdLHRoaXMubW9kdWxhdGVkR2VuZXJhdG9ycz1uZXcgSW50MTZBcnJheShvKSx0aGlzLm1vZHVsYXRvcnM9Zyx0aGlzLmZpbHRlcj1uZXcgWHQoQSksdGhpcy52ZWxvY2l0eT1zLHRoaXMubWlkaU5vdGU9bix0aGlzLnN0YXJ0VGltZT1hLHRoaXMudGFyZ2V0S2V5PXIsdGhpcy5yZWFsS2V5PUksdGhpcy52b2x1bWVFbnZlbG9wZT1uZXcgYmUoQSxvW2kuc3VzdGFpblZvbEVudl0pfXN0YXRpYyBjb3B5RnJvbShBLHQsbil7bGV0IHM9QS5zYW1wbGUsYT1uZXcgU2Eocy5zYW1wbGVEYXRhLHMucGxheWJhY2tTdGVwLHMuY3Vyc29yLHMucm9vdEtleSxzLmxvb3BTdGFydCxzLmxvb3BFbmQscy5lbmQscy5sb29waW5nTW9kZSk7cmV0dXJuIG5ldyBwYShBLnZvbHVtZUVudmVsb3BlLnNhbXBsZVJhdGUsYSxBLm1pZGlOb3RlLEEudmVsb2NpdHksdCxBLnRhcmdldEtleSxuLG5ldyBJbnQxNkFycmF5KEEuZ2VuZXJhdG9ycyksQS5tb2R1bGF0b3JzLm1hcChFQS5jb3B5RnJvbS5iaW5kKEVBKSkpfWV4Y2x1c2l2ZVJlbGVhc2UoQSl7dGhpcy5yZWxlYXNlKEEsV2EpLHRoaXMubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnJlbGVhc2VWb2xFbnZdPXpvLHRoaXMubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnJlbGVhc2VNb2RFbnZdPVdvLGJlLnJlY2FsY3VsYXRlKHRoaXMpLF9lLnJlY2FsY3VsYXRlKHRoaXMpfXJlbGVhc2UoQSx0PXphKXt0aGlzLnJlbGVhc2VTdGFydFRpbWU9QSx0aGlzLnJlbGVhc2VTdGFydFRpbWUtdGhpcy5zdGFydFRpbWU8dCYmKHRoaXMucmVsZWFzZVN0YXJ0VGltZT10aGlzLnN0YXJ0VGltZSt0KX19O2Z1bmN0aW9uIF9vKGUsQSx0LG4pe2xldCBzPWUuZ2V0U3ludGhlc2lzRGF0YShBLHQpLnJlZHVjZSgoYSxyKT0+e2lmKHIuc2FtcGxlLmdldEF1ZGlvRGF0YSgpPT09dm9pZCAwKXJldHVybiBzQShgRGlzY2FyZGluZyBpbnZhbGlkIHNhbXBsZTogJHtyLnNhbXBsZS5uYW1lfWApLGE7bGV0IEk9bmV3IEludDE2QXJyYXkoTW4pO2ZvcihsZXQgbT0wO208NjA7bSsrKUlbbV09eG8obSxyLnByZXNldEdlbmVyYXRvcnMsci5pbnN0cnVtZW50R2VuZXJhdG9ycyk7SVtpLmluaXRpYWxBdHRlbnVhdGlvbl09TWF0aC5mbG9vcihJW2kuaW5pdGlhbEF0dGVudWF0aW9uXSouNCk7bGV0IG89ci5zYW1wbGUub3JpZ2luYWxLZXk7SVtpLm92ZXJyaWRpbmdSb290S2V5XT4tMSYmKG89SVtpLm92ZXJyaWRpbmdSb290S2V5XSk7bGV0IGc9QTtJW2kua2V5TnVtXT4tMSYmKGc9SVtpLmtleU51bV0pO2xldCBCPXIuc2FtcGxlLmxvb3BTdGFydCxkPXIuc2FtcGxlLmxvb3BFbmQsaD1JW2kuc2FtcGxlTW9kZXNdLEM9ci5zYW1wbGUuZ2V0QXVkaW9EYXRhKCksUT1uZXcgU2EoQyxyLnNhbXBsZS5zYW1wbGVSYXRlL3RoaXMuc2FtcGxlUmF0ZSpNYXRoLnBvdygyLHIuc2FtcGxlLnBpdGNoQ29ycmVjdGlvbi8xMjAwKSwwLG8sQixkLE1hdGguZmxvb3IoQy5sZW5ndGgpLTEsaCk7cmV0dXJuIElbaS52ZWxvY2l0eV0+LTEmJih0PUlbaS52ZWxvY2l0eV0pLGEucHVzaChuZXcgSm4odGhpcy5zYW1wbGVSYXRlLFEsQSx0LHRoaXMuY3VycmVudFN5bnRoVGltZSxnLG4sSSxyLm1vZHVsYXRvcnMubWFwKEVBLmNvcHlGcm9tLmJpbmQoRUEpKSkpLGF9LFtdKTtyZXR1cm4gdGhpcy5zZXRDYWNoZWRWb2ljZShlLEEsdCxzKSxzLm1hcChhPT5Kbi5jb3B5RnJvbShhLHRoaXMuY3VycmVudFN5bnRoVGltZSxuKSl9ZnVuY3Rpb24gam8oZSxBLHQsbil7bGV0IHM9dGhpcy5taWRpQ2hhbm5lbHNbZV0sYT10aGlzLmtleU1vZGlmaWVyTWFuYWdlci5oYXNPdmVycmlkZVBhdGNoKGUsQSkscj1zLnByZXNldDtpZighcilyZXR1cm4gc0EoYE5vIHByZXNldCBmb3IgY2hhbm5lbCAke2V9IWApLFtdO2xldCBJPXsuLi5yfTthJiYoST10aGlzLmtleU1vZGlmaWVyTWFuYWdlci5nZXRQYXRjaChlLEEpKTtsZXQgbz10aGlzLmdldENhY2hlZFZvaWNlKEksQSx0KTtyZXR1cm4gbyE9PXZvaWQgMD9vLm1hcChnPT5Kbi5jb3B5RnJvbShnLHRoaXMuY3VycmVudFN5bnRoVGltZSxuKSk6KGEmJihyPXRoaXMuc291bmRCYW5rTWFuYWdlci5nZXRQcmVzZXQoSSx0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLm1pZGlTeXN0ZW0pKSx0aGlzLmdldFZvaWNlc0ZvclByZXNldChyLEEsdCxuKSl9ZnVuY3Rpb24gR3MoZSxBLHQpe2xldCBuPWUscz1BPDw3fHQ7cmV0dXJuIGU9PT0xMjcmJkE9PT0xMjcmJnQ9PT0xMjc/e21pZGlOb3RlOi0xLGNlbnRUdW5pbmc6bnVsbH06e21pZGlOb3RlOm4sY2VudFR1bmluZzpzKi4wMDYxfX1mdW5jdGlvbiAkbyhlLEE9MCl7bGV0IHQ9ZVswXTtpZih0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmRldmljZUlEIT09QmUmJmVbMV0hPT0xMjcmJnRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMuZGV2aWNlSUQhPT1lWzFdKXJldHVybjtmdW5jdGlvbiBuKGEscixJLG8pe3AoYCVjQ2hhbm5lbCAlYyR7YX0lYyAke0l9LiAlYyR7cn0gJHtvfSVjLCB3aXRoICVjJHtNQShlKX1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpfWZ1bmN0aW9uIHMoKXtwKGAlY1VucmVjb2duaXplZCBSb2xhbmQgJWNHUyAlY1N5c0V4OiAlYyR7TUEoZSl9YCxjLndhcm4sYy5yZWNvZ25pemVkLGMud2FybixjLnVucmVjb2duaXplZCl9c3dpdGNoKHQpe2RlZmF1bHQ6cChgJWNVbnJlY29nbml6ZWQgU3lzRXg6ICVjJHtNQShlKX1gLGMud2FybixjLnVucmVjb2duaXplZCk7YnJlYWs7Y2FzZSAxMjY6Y2FzZSAxMjc6c3dpdGNoKGVbMl0pe2Nhc2UgNDp7bGV0IGE7c3dpdGNoKGVbM10pe2Nhc2UgMTp7bGV0IHI9ZVs1XTw8N3xlWzRdO3RoaXMuc2V0TUlESVZvbHVtZShyLzE2Mzg0KSxwKGAlY01hc3RlciBWb2x1bWUuIFZvbHVtZTogJWMke3J9YCxjLmluZm8sYy52YWx1ZSk7YnJlYWt9Y2FzZSAyOntsZXQgST0oKGVbNV08PDd8ZVs0XSktODE5MikvODE5Mjt0aGlzLnNldE1hc3RlclBhcmFtZXRlcigibWFzdGVyUGFuIixJKSxwKGAlY01hc3RlciBQYW4uIFBhbjogJWMke0l9YCxjLmluZm8sYy52YWx1ZSk7YnJlYWt9Y2FzZSAzOntsZXQgcj0oZVs1XTw8N3xlWzZdKS04MTkyO2E9TWF0aC5mbG9vcihyLzgxLjkyKSx0aGlzLnNldE1hc3RlclR1bmluZyhhKSxwKGAlY01hc3RlciBGaW5lIFR1bmluZy4gQ2VudHM6ICVjJHthfWAsYy5pbmZvLGMudmFsdWUpO2JyZWFrfWNhc2UgNDp7YT0oZVs1XS02NCkqMTAwLHRoaXMuc2V0TWFzdGVyVHVuaW5nKGEpLHAoYCVjTWFzdGVyIENvYXJzZSBUdW5pbmcuIENlbnRzOiAlYyR7YX1gLGMuaW5mbyxjLnZhbHVlKTticmVha31kZWZhdWx0OnAoYCVjVW5yZWNvZ25pemVkIE1JREkgRGV2aWNlIENvbnRyb2wgUmVhbC10aW1lIG1lc3NhZ2U6ICVjJHtNQShlKX1gLGMud2FybixjLnVucmVjb2duaXplZCl9YnJlYWt9Y2FzZSA5OmVbM109PT0xPyhwKCIlY0dNMSBzeXN0ZW0gb24iLGMuaW5mbyksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLCJnbSIpKTplWzNdPT09Mz8ocCgiJWNHTTIgc3lzdGVtIG9uIixjLmluZm8pLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtaWRpU3lzdGVtIiwiZ20yIikpOihwKCIlY0dNIHN5c3RlbSBvZmYsIGRlZmF1bHRpbmcgdG8gR1MiLGMuaW5mbyksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLCJncyIpKTticmVhaztjYXNlIDg6e2xldCBhPTQ7c3dpdGNoKGVbM10pe2Nhc2UgMTp7bGV0IHI9ZVthKytdLEk9ZWUoZSwxNixhKTtpZihhKz0xNixlLmxlbmd0aDwzODQpe3NBKGBUaGUgQnVsayBUdW5pbmcgRHVtcCBpcyB0b28gc2hvcnQhICgke2UubGVuZ3RofSBieXRlcywgYXQgbGVhc3QgMzg0IGFyZSBleHBlY3RlZClgKTtyZXR1cm59Zm9yKGxldCBvPTA7bzwxMjg7bysrKXRoaXMucHJpdmF0ZVByb3BzLnR1bmluZ3Nbcl1bb109R3MoZVthKytdLGVbYSsrXSxlW2ErK10pO3AoYCVjQnVsayBUdW5pbmcgRHVtcCAlYyR7SX0lYyBQcm9ncmFtOiAlYyR7cn1gLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyxjLnJlY29nbml6ZWQpO2JyZWFrfWNhc2UgMjpjYXNlIDc6e2VbM109PT03JiZhKys7bGV0IHI9ZVthKytdLEk9ZVthKytdO2ZvcihsZXQgbz0wO288STtvKyspdGhpcy5wcml2YXRlUHJvcHMudHVuaW5nc1tyXVtlW2ErK11dPUdzKGVbYSsrXSxlW2ErK10sZVthKytdKTtwKGAlY1NpbmdsZSBOb3RlIFR1bmluZy4gUHJvZ3JhbTogJWMke3J9JWMgS2V5cyBhZmZlY3RlZDogJWMke0l9YCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQpO2JyZWFrfWNhc2UgOTpjYXNlIDg6e2xldCByPW5ldyBJbnQ4QXJyYXkoMTIpO2lmKGVbM109PT04KWZvcihsZXQgST0wO0k8MTI7SSsrKXJbSV09ZVs3K0ldLTY0O2Vsc2UgZm9yKGxldCBJPTA7STwyNDtJKz0yKXtsZXQgbz0oZVs3K0ldPDw3fGVbOCtJXSktODE5MjtyW0kvMl09TWF0aC5mbG9vcihvLzgxLjkyKX0oZVs0XSYxKT09PTEmJnRoaXMubWlkaUNoYW5uZWxzWzE0K0FdLnNldE9jdGF2ZVR1bmluZyhyKSwoZVs0XT4+MSYxKT09PTEmJnRoaXMubWlkaUNoYW5uZWxzWzE1K0FdLnNldE9jdGF2ZVR1bmluZyhyKTtmb3IobGV0IEk9MDtJPDc7SSsrKShlWzVdPj5JJjEpPT09MSYmdGhpcy5taWRpQ2hhbm5lbHNbNytJK0FdLnNldE9jdGF2ZVR1bmluZyhyKTtmb3IobGV0IEk9MDtJPDc7SSsrKShlWzZdPj5JJjEpPT09MSYmdGhpcy5taWRpQ2hhbm5lbHNbSStBXS5zZXRPY3RhdmVUdW5pbmcocik7cChgJWNNSURJIE9jdGF2ZSBTY2FsZSAke2VbM109PT04PyIoMSBieXRlKSI6IigyIGJ5dGVzKSJ9IHR1bmluZyB2aWEgVHVuaW5nOiAlYyR7ci5qb2luKCIgIil9YCxjLmluZm8sYy52YWx1ZSk7YnJlYWt9ZGVmYXVsdDpwKGAlY1VucmVjb2duaXplZCBNSURJIFR1bmluZyBzdGFuZGFyZCBtZXNzYWdlOiAlYyR7TUEoZSl9YCxjLndhcm4sYy51bnJlY29nbml6ZWQpO2JyZWFrfWJyZWFrfWRlZmF1bHQ6cChgJWNVbnJlY29nbml6ZWQgTUlESSBSZWFsdGltZS9ub24gcmVhbHRpbWUgbWVzc2FnZTogJWMke01BKGUpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKX1icmVhaztjYXNlIDY1OmlmKGVbMl09PT02NiYmZVszXT09PTE4KXtsZXQgYT1lWzddO2lmKGVbNF09PT02NHx8ZVs0XT09PTAmJmVbNl09PT0xMjcpe2lmKChlWzVdJjE2KT4wKXtsZXQgcj1bOSwwLDEsMiwzLDQsNSw2LDcsOCwxMCwxMSwxMiwxMywxNCwxNV1bZVs1XSYxNV0rQSxJPXRoaXMubWlkaUNoYW5uZWxzW3JdO3N3aXRjaChlWzZdKXtkZWZhdWx0OnMoKTticmVhaztjYXNlIDIxOntsZXQgbz1hPjAmJmVbNV0+PjQ+MDtJLnNldEdTRHJ1bXMobykscChgJWNDaGFubmVsICVjJHtyfSVjICR7bz8iaXMgbm93IGEgZHJ1bSBjaGFubmVsIjoibm93IGlzbid0IGEgZHJ1bSBjaGFubmVsIn0lYyB2aWE6ICVjJHtNQShlKX1gLGMuaW5mbyxjLnZhbHVlLGMucmVjb2duaXplZCxjLmluZm8sYy52YWx1ZSk7cmV0dXJufWNhc2UgMjI6e2xldCBvPWEtNjQ7SS5zZXRDdXN0b21Db250cm9sbGVyKElBLmNoYW5uZWxLZXlTaGlmdCxvKSxuKHIsbywia2V5IHNoaWZ0Iiwia2V5cyIpO3JldHVybn1jYXNlIDI4OntsZXQgbz1hO289PT0wPyhJLnJhbmRvbVBhbj0hMCxwKGAlY1JhbmRvbSBwYW4gaXMgc2V0IHRvICVjT04lYyBmb3IgJWMke3J9YCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnZhbHVlKSk6KEkucmFuZG9tUGFuPSExLEkuY29udHJvbGxlckNoYW5nZShTLnBhbixvKSk7YnJlYWt9Y2FzZSAzMzpJLmNvbnRyb2xsZXJDaGFuZ2UoUy5jaG9ydXNEZXB0aCxhKTticmVhaztjYXNlIDM0OkkuY29udHJvbGxlckNoYW5nZShTLnJldmVyYkRlcHRoLGEpO2JyZWFrO2Nhc2UgNjQ6Y2FzZSA2NTpjYXNlIDY2OmNhc2UgNjc6Y2FzZSA2ODpjYXNlIDY5OmNhc2UgNzA6Y2FzZSA3MTpjYXNlIDcyOmNhc2UgNzM6Y2FzZSA3NDpjYXNlIDc1OntsZXQgbz1lLmxlbmd0aC05LGc9bmV3IEludDhBcnJheSgxMik7Zm9yKGxldCBkPTA7ZDxvO2QrKylnW2RdPWVbZCs3XS02NDtJLnNldE9jdGF2ZVR1bmluZyhnKTtsZXQgQj1hLTY0O24ocixnLmpvaW4oIiAiKSwib2N0YXZlIHNjYWxlIHR1bmluZyIsImNlbnRzIiksSS5zZXRUdW5pbmcoQik7YnJlYWt9fXJldHVybn1lbHNlIGlmKChlWzVdJjMyKT4wKXtsZXQgcj1bOSwwLDEsMiwzLDQsNSw2LDcsOCwxMCwxMSwxMiwxMywxNCwxNV1bZVs1XSYxNV0rQSxJPXRoaXMubWlkaUNoYW5uZWxzW3JdLG89YS02NCxnPW8vNjQsQj1hLzEyOCxkPShoLEMsUT0hMSk9Pntzd2l0Y2goZVs2XSYxNSl7Y2FzZSAwOmg9PT1tQStqLnBpdGNoV2hlZWw/KEkuY29udHJvbGxlckNoYW5nZShTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0IsMCksSS5jb250cm9sbGVyQ2hhbmdlKFMucmVnaXN0ZXJlZFBhcmFtZXRlckxTQiwwKSxJLmNvbnRyb2xsZXJDaGFuZ2UoUy5kYXRhRW50cnlNU0IsTWF0aC5mbG9vcihvKSkpOihJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLmZpbmVUdW5lLG8qMTAwLFEpLG4ocixvLGAke0N9IHBpdGNoIGNvbnRyb2xgLCJzZW1pdG9uZXMiKSk7YnJlYWs7Y2FzZSAxOkkuc3lzRXhNb2R1bGF0b3JzLnNldE1vZHVsYXRvcihoLGkuaW5pdGlhbEZpbHRlckZjLGcqOTYwMCxRKSxuKHIsZyo5NjAwLGAke0N9IHBpdGNoIGNvbnRyb2xgLCJjZW50cyIpO2JyZWFrO2Nhc2UgMjpJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLmluaXRpYWxBdHRlbnVhdGlvbixnKjk2MCxRKSxuKHIsZyo5NjAsYCR7Q30gYW1wbGl0dWRlYCwiY0IiKTticmVhaztjYXNlIDQ6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS52aWJMZm9Ub1BpdGNoLEIqNjAwLFEpLG4ocixCKjYwMCxgJHtDfSBMRk8xIHBpdGNoIGRlcHRoYCwiY2VudHMiKTticmVhaztjYXNlIDU6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS52aWJMZm9Ub0ZpbHRlckZjLEIqMjQwMCxRKSxuKHIsQioyNDAwLGAke0N9IExGTzEgZmlsdGVyIGRlcHRoYCwiY2VudHMiKTticmVhaztjYXNlIDY6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS52aWJMZm9Ub1ZvbHVtZSxnKjk2MCxRKSxuKHIsZyo5NjAsYCR7Q30gTEZPMSBhbXBsaXR1ZGUgZGVwdGhgLCJjQiIpO2JyZWFrO2Nhc2UgODpJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLm1vZExmb1RvUGl0Y2gsQio2MDAsUSksbihyLEIqNjAwLGAke0N9IExGTzIgcGl0Y2ggZGVwdGhgLCJjZW50cyIpO2JyZWFrO2Nhc2UgOTpJLnN5c0V4TW9kdWxhdG9ycy5zZXRNb2R1bGF0b3IoaCxpLm1vZExmb1RvRmlsdGVyRmMsQioyNDAwLFEpLG4ocixCKjI0MDAsYCR7Q30gTEZPMiBmaWx0ZXIgZGVwdGhgLCJjZW50cyIpO2JyZWFrO2Nhc2UgMTA6SS5zeXNFeE1vZHVsYXRvcnMuc2V0TW9kdWxhdG9yKGgsaS5tb2RMZm9Ub1ZvbHVtZSxnKjk2MCxRKSxuKHIsZyo5NjAsYCR7Q30gTEZPMiBhbXBsaXR1ZGUgZGVwdGhgLCJjQiIpO2JyZWFrfX07c3dpdGNoKGVbNl0mMjQwKXtkZWZhdWx0OnMoKTticmVhaztjYXNlIDA6ZChTLm1vZHVsYXRpb25XaGVlbCwibW9kIHdoZWVsIik7YnJlYWs7Y2FzZSAxNjpkKG1BK2oucGl0Y2hXaGVlbCwicGl0Y2ggd2hlZWwiLCEwKTticmVhaztjYXNlIDMyOmQobUErai5jaGFubmVsUHJlc3N1cmUsImNoYW5uZWwgcHJlc3N1cmUiKTticmVhaztjYXNlIDQ4OmQobUErai5wb2x5UHJlc3N1cmUsInBvbHkgcHJlc3N1cmUiKTticmVha31yZXR1cm59ZWxzZSBpZihlWzVdPT09MCl7c3dpdGNoKGVbNl0pe2RlZmF1bHQ6cygpO2JyZWFrO2Nhc2UgMTI3OmE9PT0wPyhwKCIlY0dTIFJlc2V0IHJlY2VpdmVkISIsYy5pbmZvKSx0aGlzLnJlc2V0QWxsQ29udHJvbGxlcnMoITEpLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtaWRpU3lzdGVtIiwiZ3MiKSk6YT09PTEyNyYmKHAoIiVjR1Mgc3lzdGVtIG9mZiwgc3dpdGNoaW5nIHRvIEdNMiIsYy5pbmZvKSx0aGlzLnJlc2V0QWxsQ29udHJvbGxlcnMoITEpLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtaWRpU3lzdGVtIiwiZ20yIikpO2JyZWFrO2Nhc2UgNjpwKGAlY1JvbGFuZCBHUyBNYXN0ZXIgUGFuIHNldCB0bzogJWMke2F9JWMgd2l0aDogJWMke01BKGUpfWAsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpLHRoaXMuc2V0TWFzdGVyUGFyYW1ldGVyKCJtYXN0ZXJQYW4iLChhLTY0KS82NCk7YnJlYWs7Y2FzZSA0OnAoYCVjUm9sYW5kIEdTIE1hc3RlciBWb2x1bWUgc2V0IHRvOiAlYyR7YX0lYyB3aXRoOiAlYyR7TUEoZSl9YCxjLmluZm8sYy52YWx1ZSxjLmluZm8sYy52YWx1ZSksdGhpcy5zZXRNSURJVm9sdW1lKGEvMTI3KTticmVhaztjYXNlIDU6e2xldCByPWEtNjQ7cChgJWNSb2xhbmQgR1MgTWFzdGVyIEtleS1TaGlmdCBzZXQgdG86ICVjJHtyfSVjIHdpdGg6ICVjJHtNQShlKX1gLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyxjLnZhbHVlKSx0aGlzLnNldE1hc3RlclR1bmluZyhyKjEwMCk7YnJlYWt9fXJldHVybn1lbHNlIGlmKGVbNV09PT0xKXN3aXRjaChlWzZdKXtkZWZhdWx0OnMoKTticmVhaztjYXNlIDA6e2xldCByPWVlKGUsMTYsNyk7cChgJWNHUyBQYXRjaCBuYW1lOiAlYyR7cn1gLGMuaW5mbyxjLnZhbHVlKTticmVha31jYXNlIDUxOnAoYCVjR1MgUmV2ZXJiIGxldmVsOiAlYyR7YX1gLGMuaW5mbyxjLnZhbHVlKSx0aGlzLnByaXZhdGVQcm9wcy5yZXZlcmJTZW5kPWEvNjQ7YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTU6cChgJWNVbnN1cHBvcnRlZCBHUyBSZXZlcmIgUGFyYW1ldGVyOiAlYyR7ZVs2XS50b1N0cmluZygxNil9YCxjLndhcm4sYy51bnJlY29nbml6ZWQpO2JyZWFrO2Nhc2UgNTg6cChgJWNHUyBDaG9ydXMgbGV2ZWw6ICVjJHthfWAsYy5pbmZvLGMudmFsdWUpLHRoaXMucHJpdmF0ZVByb3BzLmNob3J1c1NlbmQ9YS82NDticmVhaztjYXNlIDU2OmNhc2UgNTc6Y2FzZSA1OTpjYXNlIDYwOmNhc2UgNjE6Y2FzZSA2MjpjYXNlIDYzOmNhc2UgNjQ6cChgJWNVbnN1cHBvcnRlZCBHUyBDaG9ydXMgUGFyYW1ldGVyOiAlYyR7ZVs2XS50b1N0cmluZygxNil9YCxjLndhcm4sYy51bnJlY29nbml6ZWQpO2JyZWFrfX1lbHNlIHMoKTtyZXR1cm59ZWxzZSBpZihlWzJdPT09NjkmJmVbM109PT0xOCl7aWYoZVs0XT09PTE2JiZlWzZdPT09MClpZihlWzVdPT09MCl7bGV0IGE9bmV3IFVpbnQ4QXJyYXkoZS5zbGljZSg3LGUubGVuZ3RoLTIpKTt0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoInN5bnRoRGlzcGxheSIse2Rpc3BsYXlEYXRhOmEsZGlzcGxheVR5cGU6aG4uc291bmRDYW52YXNUZXh0fSl9ZWxzZSBpZihlWzVdPT09MSl7bGV0IGE9bmV3IFVpbnQ4QXJyYXkoZS5zbGljZSg3LGUubGVuZ3RoLTMpKTt0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoInN5bnRoRGlzcGxheSIse2Rpc3BsYXlEYXRhOmEsZGlzcGxheVR5cGU6aG4uc291bmRDYW52YXNEb3RNYXRyaXh9KSxwKGAlY1JvbGFuZCBTQyBEaXNwbGF5IERvdCBNYXRyaXggdmlhOiAlYyR7TUEoZSl9YCxjLmluZm8sYy52YWx1ZSl9ZWxzZSBzKCl9ZWxzZSBpZihlWzJdPT09MjImJmVbM109PT0xOCYmZVs0XT09PTE2KXt0aGlzLnNldE1JRElWb2x1bWUoZVs3XS8xMDApLHAoYCVjUm9sYW5kIE1hc3RlciBWb2x1bWUgY29udHJvbCBzZXQgdG86ICVjJHtlWzddfSVjIHZpYTogJWMke01BKGUpfWAsYy5pbmZvLGMudmFsdWUsYy5pbmZvLGMudmFsdWUpO3JldHVybn1lbHNle3AoYCVjVW5yZWNvZ25pemVkIFJvbGFuZCBTeXNFeDogJWMke01BKGUpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKTtyZXR1cm59YnJlYWs7Y2FzZSA2NzppZihlWzJdPT09NzYpaWYoZVszXT09PTAmJmVbNF09PT0wKXN3aXRjaChlWzVdKXtjYXNlIDQ6e2xldCBhPWVbNl07dGhpcy5zZXRNSURJVm9sdW1lKGEvMTI3KSxwKGAlY1hHIG1hc3RlciB2b2x1bWUuIFZvbHVtZTogJWMke2F9YCxjLmluZm8sYy5yZWNvZ25pemVkKTticmVha31jYXNlIDY6e2xldCBhPWVbNl0tNjQ7dGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoInRyYW5zcG9zaXRpb24iLGEpLHAoYCVjWEcgbWFzdGVyIHRyYW5zcG9zZS4gVm9sdW1lOiAlYyR7YX1gLGMuaW5mbyxjLnJlY29nbml6ZWQpO2JyZWFrfWNhc2UgMTI2OnAoIiVjWEcgc3lzdGVtIG9uIixjLmluZm8pLHRoaXMucmVzZXRBbGxDb250cm9sbGVycyghMSksdGhpcy5zZXRNYXN0ZXJQYXJhbWV0ZXIoIm1pZGlTeXN0ZW0iLCJ4ZyIpO2JyZWFrfWVsc2UgaWYoZVszXT09PTgpe2lmKCFmQS5pc1N5c3RlbVhHKHRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMubWlkaVN5c3RlbSkpcmV0dXJuO2xldCBhPWVbNF0rQTtpZihhPj10aGlzLm1pZGlDaGFubmVscy5sZW5ndGgpcmV0dXJuO2xldCByPXRoaXMubWlkaUNoYW5uZWxzW2FdLEk9ZVs2XTtzd2l0Y2goZVs1XSl7Y2FzZSAxOnIuY29udHJvbGxlckNoYW5nZShTLmJhbmtTZWxlY3QsSSk7YnJlYWs7Y2FzZSAyOnIuY29udHJvbGxlckNoYW5nZShTLmJhbmtTZWxlY3RMU0IsSSk7YnJlYWs7Y2FzZSAzOnIucHJvZ3JhbUNoYW5nZShJKTticmVhaztjYXNlIDg6e2lmKHIuZHJ1bUNoYW5uZWwpcmV0dXJuO3IuY2hhbm5lbFRyYW5zcG9zZUtleVNoaWZ0PUktNjQ7YnJlYWt9Y2FzZSAxMTpyLmNvbnRyb2xsZXJDaGFuZ2UoUy5tYWluVm9sdW1lLEkpO2JyZWFrO2Nhc2UgMTQ6e2xldCBvPUk7bz09PTA/KHIucmFuZG9tUGFuPSEwLHAoYCVjUmFuZG9tIHBhbiBpcyBzZXQgdG8gJWNPTiVjIGZvciAlYyR7YX1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMudmFsdWUpKTpyLmNvbnRyb2xsZXJDaGFuZ2UoUy5wYW4sbyk7YnJlYWt9Y2FzZSAxOTpyLmNvbnRyb2xsZXJDaGFuZ2UoUy5yZXZlcmJEZXB0aCxJKTticmVhaztjYXNlIDE4OnIuY29udHJvbGxlckNoYW5nZShTLmNob3J1c0RlcHRoLEkpO2JyZWFrO2RlZmF1bHQ6cChgJWNVbnJlY29nbml6ZWQgWWFtYWhhIFhHIFBhcnQgU2V0dXA6ICVjJHtlWzVdLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKX19ZWxzZSBpZihlWzNdPT09NiYmZVs0XT09PTApe2xldCBhPW5ldyBVaW50OEFycmF5KGUuc2xpY2UoNSxlLmxlbmd0aC0xKSk7dGhpcy5wcml2YXRlUHJvcHMuY2FsbEV2ZW50KCJzeW50aERpc3BsYXkiLHtkaXNwbGF5RGF0YTphLGRpc3BsYXlUeXBlOmhuLnlhbWFoYVhHVGV4dH0pfWVsc2UgZkEuaXNTeXN0ZW1YRyh0aGlzLnByaXZhdGVQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLm1pZGlTeXN0ZW0pJiZwKGAlY1VucmVjb2duaXplZCBZYW1haGEgWEcgU3lzRXg6ICVjJHtNQShlKX1gLGMud2FybixjLnVucmVjb2duaXplZCk7ZWxzZSBmQS5pc1N5c3RlbVhHKHRoaXMucHJpdmF0ZVByb3BzLm1hc3RlclBhcmFtZXRlcnMubWlkaVN5c3RlbSkmJnAoYCVjVW5yZWNvZ25pemVkIFlhbWFoYSBTeXNFeDogJWMke01BKGUpfWAsYy53YXJuLGMudW5yZWNvZ25pemVkKTticmVha319dmFyIFJzPWNsYXNzIHFue3BhdGNoO2xvY2tQcmVzZXQ7bG9ja2VkU3lzdGVtO21pZGlDb250cm9sbGVycztsb2NrZWRDb250cm9sbGVycztjdXN0b21Db250cm9sbGVycztsb2NrVmlicmF0bztjaGFubmVsVmlicmF0bztjaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ7Y2hhbm5lbE9jdGF2ZVR1bmluZztpc011dGVkO2RydW1DaGFubmVsO2NoYW5uZWxOdW1iZXI7Y29uc3RydWN0b3IoQSx0LG4scyxhLHIsSSxvLGcsQixkLGgsQyl7dGhpcy5wYXRjaD1BLHRoaXMubG9ja1ByZXNldD10LHRoaXMubG9ja2VkU3lzdGVtPW4sdGhpcy5taWRpQ29udHJvbGxlcnM9cyx0aGlzLmxvY2tlZENvbnRyb2xsZXJzPWEsdGhpcy5jdXN0b21Db250cm9sbGVycz1yLHRoaXMubG9ja1ZpYnJhdG89SSx0aGlzLmNoYW5uZWxWaWJyYXRvPW8sdGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ9Zyx0aGlzLmNoYW5uZWxPY3RhdmVUdW5pbmc9Qix0aGlzLmlzTXV0ZWQ9ZCx0aGlzLmRydW1DaGFubmVsPWgsdGhpcy5jaGFubmVsTnVtYmVyPUN9c3RhdGljIGNvcHlGcm9tKEEpe3JldHVybiBuZXcgcW4oey4uLkEucGF0Y2h9LEEubG9ja1ByZXNldCxBLmxvY2tlZFN5c3RlbSxBLm1pZGlDb250cm9sbGVycy5zbGljZSgpLFsuLi5BLmxvY2tlZENvbnRyb2xsZXJzXSxBLmN1c3RvbUNvbnRyb2xsZXJzLnNsaWNlKCksQS5sb2NrVmlicmF0byx7Li4uQS5jaGFubmVsVmlicmF0b30sQS5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQsQS5jaGFubmVsT2N0YXZlVHVuaW5nLEEuaXNNdXRlZCxBLmRydW1DaGFubmVsLEEuY2hhbm5lbE51bWJlcil9c3RhdGljIGNyZWF0ZShBLHQpe2xldCBuPUEubWlkaUNoYW5uZWxzW3RdO3JldHVybiBuZXcgcW4oey4uLm4ucGF0Y2gsbmFtZTpuPy5wcmVzZXQ/Lm5hbWU/PyJ1bmRlZmluZWQifSxuLmxvY2tQcmVzZXQsbi5sb2NrZWRTeXN0ZW0sbi5taWRpQ29udHJvbGxlcnMuc2xpY2UoKSxbLi4ubi5sb2NrZWRDb250cm9sbGVyc10sbi5jdXN0b21Db250cm9sbGVycy5zbGljZSgpLG4ubG9ja0dTTlJQTlBhcmFtcyx7Li4ubi5jaGFubmVsVmlicmF0b30sbi5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQsbi5jaGFubmVsT2N0YXZlVHVuaW5nLnNsaWNlKCksbi5pc011dGVkLG4uZHJ1bUNoYW5uZWwsdCl9YXBwbHkoQSl7bGV0IHQ9QS5taWRpQ2hhbm5lbHNbdGhpcy5jaGFubmVsTnVtYmVyXTt0Lm11dGVDaGFubmVsKHRoaXMuaXNNdXRlZCksdC5zZXREcnVtcyh0aGlzLmRydW1DaGFubmVsKSx0Lm1pZGlDb250cm9sbGVycy5zZXQodGhpcy5taWRpQ29udHJvbGxlcnMpLHQubG9ja2VkQ29udHJvbGxlcnM9dGhpcy5sb2NrZWRDb250cm9sbGVycyx0LmN1c3RvbUNvbnRyb2xsZXJzLnNldCh0aGlzLmN1c3RvbUNvbnRyb2xsZXJzKSx0LnVwZGF0ZUNoYW5uZWxUdW5pbmcoKSx0LmNoYW5uZWxWaWJyYXRvPXRoaXMuY2hhbm5lbFZpYnJhdG8sdC5sb2NrR1NOUlBOUGFyYW1zPXRoaXMubG9ja1ZpYnJhdG8sdC5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ9dGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQsdC5jaGFubmVsT2N0YXZlVHVuaW5nPXRoaXMuY2hhbm5lbE9jdGF2ZVR1bmluZyx0LnNldFByZXNldExvY2soITEpLHQuc2V0UGF0Y2godGhpcy5wYXRjaCksdC5zZXRQcmVzZXRMb2NrKHRoaXMubG9ja1ByZXNldCksdC5sb2NrZWRTeXN0ZW09dGhpcy5sb2NrZWRTeXN0ZW19fTt2YXIgQXI9Y2xhc3N7a2V5TWFwcGluZ3M9W107YWRkTWFwcGluZyhlLEEsdCl7dGhpcy5rZXlNYXBwaW5nc1tlXT8/PVtdLHRoaXMua2V5TWFwcGluZ3NbZV1bQV09dH1kZWxldGVNYXBwaW5nKGUsQSl7dGhpcy5rZXlNYXBwaW5nc1tlXT8uW0FdIT09dm9pZCAwJiYodGhpcy5rZXlNYXBwaW5nc1tlXVtBXT12b2lkIDApfWNsZWFyTWFwcGluZ3MoKXt0aGlzLmtleU1hcHBpbmdzPVtdfXNldE1hcHBpbmdzKGUpe3RoaXMua2V5TWFwcGluZ3M9ZX1nZXRNYXBwaW5ncygpe3JldHVybiB0aGlzLmtleU1hcHBpbmdzfWdldFZlbG9jaXR5KGUsQSl7cmV0dXJuIHRoaXMua2V5TWFwcGluZ3NbZV0/LltBXT8udmVsb2NpdHk/Py0xfWdldEdhaW4oZSxBKXtyZXR1cm4gdGhpcy5rZXlNYXBwaW5nc1tlXT8uW0FdPy5nYWluPz8xfWhhc092ZXJyaWRlUGF0Y2goZSxBKXtsZXQgdD10aGlzLmtleU1hcHBpbmdzW2VdPy5bQV0/LnBhdGNoPy5iYW5rTVNCO3JldHVybiB0IT09dm9pZCAwJiZ0Pj0wfWdldFBhdGNoKGUsQSl7bGV0IHQ9dGhpcy5rZXlNYXBwaW5nc1tlXT8uW0FdO2lmKHQpcmV0dXJuIHQucGF0Y2g7dGhyb3cgbmV3IEVycm9yKCJObyBtb2RpZmllci4iKX19LHJzPWNsYXNzIEtue2NoYW5uZWxTbmFwc2hvdHM7a2V5TWFwcGluZ3M7bWFzdGVyUGFyYW1ldGVycztjb25zdHJ1Y3RvcihBLHQsbil7dGhpcy5jaGFubmVsU25hcHNob3RzPUEsdGhpcy5tYXN0ZXJQYXJhbWV0ZXJzPXQsdGhpcy5rZXlNYXBwaW5ncz1ufXN0YXRpYyBjcmVhdGUoQSl7bGV0IHQ9QS5taWRpQ2hhbm5lbHMubWFwKChuLHMpPT5Scy5jcmVhdGUoQSxzKSk7cmV0dXJuIG5ldyBLbih0LEEuZ2V0QWxsTWFzdGVyUGFyYW1ldGVycygpLEEua2V5TW9kaWZpZXJNYW5hZ2VyLmdldE1hcHBpbmdzKCkpfXN0YXRpYyBjb3B5RnJvbShBKXtyZXR1cm4gbmV3IEtuKEEuY2hhbm5lbFNuYXBzaG90cy5tYXAodD0+UnMuY29weUZyb20odCkpLHsuLi5BLm1hc3RlclBhcmFtZXRlcnN9LFsuLi5BLmtleU1hcHBpbmdzXSl9YXBwbHkoQSl7Zm9yKE9iamVjdC5lbnRyaWVzKHRoaXMubWFzdGVyUGFyYW1ldGVycykuZm9yRWFjaCgoW24sc10pPT57QS5zZXRNYXN0ZXJQYXJhbWV0ZXIobixzKX0pLEEua2V5TW9kaWZpZXJNYW5hZ2VyLnNldE1hcHBpbmdzKHRoaXMua2V5TWFwcGluZ3MpO0EubWlkaUNoYW5uZWxzLmxlbmd0aDx0aGlzLmNoYW5uZWxTbmFwc2hvdHMubGVuZ3RoOylBLmNyZWF0ZU1JRElDaGFubmVsKCk7dGhpcy5jaGFubmVsU25hcHNob3RzLmZvckVhY2gobj0+e24uYXBwbHkoQSl9KX19LGVyPXttYXN0ZXJHYWluOl9hLG1hc3RlclBhbjowLHZvaWNlQ2FwOlhhLGludGVycG9sYXRpb25UeXBlOnZ0Lmhlcm1pdGUsbWlkaVN5c3RlbTpPcyxtb25vcGhvbmljUmV0cmlnZ2VyTW9kZTohMSxyZXZlcmJHYWluOjEsY2hvcnVzR2FpbjoxLGJsYWNrTUlESU1vZGU6ITEsdHJhbnNwb3NpdGlvbjowLGRldmljZUlEOkJlfSx0cj1jbGFzc3t0dW5pbmdzPVtdO21hc3RlclBhcmFtZXRlcnM9ZXI7bWlkaVZvbHVtZT0xO3JldmVyYlNlbmQ9MTtjaG9ydXNTZW5kPTE7cGFuTGVmdD0uNTtwYW5SaWdodD0uNTtkZWZhdWx0UHJlc2V0O2RydW1QcmVzZXQ7dm9sdW1lRW52ZWxvcGVTbW9vdGhpbmdGYWN0b3I7cGFuU21vb3RoaW5nRmFjdG9yO2ZpbHRlclNtb290aGluZ0ZhY3RvcjtldmVudENhbGxiYWNrSGFuZGxlcjtnZXRWb2ljZXM7dm9pY2VLaWxsaW5nO2NhY2hlZFZvaWNlcz1bXTtjb25zdHJ1Y3RvcihlLEEsdCxuLHMsYSl7dGhpcy5ldmVudENhbGxiYWNrSGFuZGxlcj1lLHRoaXMuZ2V0Vm9pY2VzPUEsdGhpcy52b2ljZUtpbGxpbmc9dCx0aGlzLnZvbHVtZUVudmVsb3BlU21vb3RoaW5nRmFjdG9yPW4sdGhpcy5wYW5TbW9vdGhpbmdGYWN0b3I9cyx0aGlzLmZpbHRlclNtb290aGluZ0ZhY3Rvcj1hO2ZvcihsZXQgcj0wO3I8MTI4O3IrKyl0aGlzLnR1bmluZ3MucHVzaChbXSl9Y2FsbEV2ZW50KGUsQSl7dGhpcy5ldmVudENhbGxiYWNrSGFuZGxlcihlLEEpfX07ZnVuY3Rpb24gcG4oZSxBLHQpe2lmKHQ8ZSlyZXR1cm4gMDtsZXQgbj0odC1lKS8oMS9BKSsuMjU7cmV0dXJuIE1hdGguYWJzKG4tfn4obisuNSkpKjQtMX12YXIgbnI9Y2xhc3MgT257c3RhdGljIGdldFNhbXBsZShBLHQsbil7bGV0IHM9QS5jdXJyZW50VHVuaW5nQ2FsY3VsYXRlZCpBLnNhbXBsZS5wbGF5YmFja1N0ZXA7aWYocz09PTEpe09uLmdldFNhbXBsZU5lYXJlc3QoQSx0LHMpO3JldHVybn1zd2l0Y2gobil7Y2FzZSB2dC5oZXJtaXRlOnRoaXMuZ2V0U2FtcGxlSGVybWl0ZShBLHQscyk7cmV0dXJuO2Nhc2UgdnQubGluZWFyOmRlZmF1bHQ6dGhpcy5nZXRTYW1wbGVMaW5lYXIoQSx0LHMpO3JldHVybjtjYXNlIHZ0Lm5lYXJlc3ROZWlnaGJvcjpPbi5nZXRTYW1wbGVOZWFyZXN0KEEsdCxzKTtyZXR1cm59fXN0YXRpYyBnZXRTYW1wbGVMaW5lYXIoQSx0LG4pe2xldCBzPUEuc2FtcGxlLGE9cy5jdXJzb3Iscj1zLnNhbXBsZURhdGE7aWYocy5pc0xvb3Bpbmcpe2xldCBJPXMubG9vcEVuZC1zLmxvb3BTdGFydDtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKDthPj1zLmxvb3BFbmQ7KWEtPUk7bGV0IGc9fn5hLEI9ZysxO2Zvcig7Qj49cy5sb29wRW5kOylCLT1JO2xldCBkPWEtZyxoPXJbQl0sQz1yW2ddO3Rbb109QysoaC1DKSpkLGErPW59fWVsc2UgZm9yKGxldCBJPTA7STx0Lmxlbmd0aDtJKyspe2xldCBvPX5+YSxnPW8rMTtpZihnPj1zLmVuZCl7QS5maW5pc2hlZD0hMDtyZXR1cm59bGV0IEI9YS1vLGQ9cltnXSxoPXJbb107dFtJXT1oKyhkLWgpKkIsYSs9bn1BLnNhbXBsZS5jdXJzb3I9YX1zdGF0aWMgZ2V0U2FtcGxlTmVhcmVzdChBLHQsbil7bGV0IHM9QS5zYW1wbGUsYT1zLmN1cnNvcixyPXMuc2FtcGxlRGF0YTtpZihzLmlzTG9vcGluZyl7bGV0IEk9cy5sb29wRW5kLXMubG9vcFN0YXJ0O2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtmb3IoO2E+PXMubG9vcEVuZDspYS09STtsZXQgZz1+fmErMTtmb3IoO2c+PXMubG9vcEVuZDspZy09STt0W29dPXJbZ10sYSs9bn19ZWxzZSBmb3IobGV0IEk9MDtJPHQubGVuZ3RoO0krKyl7bGV0IG89fn5hKzE7aWYobz49cy5lbmQpe0EuZmluaXNoZWQ9ITA7cmV0dXJufXRbSV09cltvXSxhKz1ufXMuY3Vyc29yPWF9c3RhdGljIGdldFNhbXBsZUhlcm1pdGUoQSx0LG4pe2xldCBzPUEuc2FtcGxlLGE9cy5jdXJzb3Iscj1zLnNhbXBsZURhdGE7aWYocy5pc0xvb3Bpbmcpe2xldCBJPXMubG9vcEVuZC1zLmxvb3BTdGFydDtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKDthPj1zLmxvb3BFbmQ7KWEtPUk7bGV0IGc9fn5hLEI9ZysxLGQ9ZysyLGg9ZyszLEM9YS1nO0I+PXMubG9vcEVuZCYmKEItPUkpLGQ+PXMubG9vcEVuZCYmKGQtPUkpLGg+PXMubG9vcEVuZCYmKGgtPUkpO2xldCBRPXJbZ10sbT1yW0JdLHk9cltkXSxGPXJbaF0saz0oeS1RKSouNSxEPW0teSx2PWsrRCxMPXYrRCsoRi1tKSouNSxFPXYrTDt0W29dPSgoTCpDLUUpKkMraykqQyttLGErPW59fWVsc2UgZm9yKGxldCBJPTA7STx0Lmxlbmd0aDtJKyspe2xldCBvPX5+YSxnPW8rMSxCPW8rMixkPW8rMyxoPWEtbztpZihnPj1zLmVuZHx8Qj49cy5lbmR8fGQ+PXMuZW5kKXtBLmZpbmlzaGVkPSEwO3JldHVybn1sZXQgQz1yW29dLFE9cltnXSxtPXJbQl0seT1yW2RdLEY9KG0tQykqLjUsaz1RLW0sRD1GK2ssdj1EK2srKHktUSkqLjUsTD1EK3Y7dFtJXT0oKHYqaC1MKSpoK0YpKmgrUSxhKz1ufUEuc2FtcGxlLmN1cnNvcj1hfX07ZnVuY3Rpb24gc3IoZSxBLHQsbixzLGEscixJLG8sZyl7aWYoZS5pc0luUmVsZWFzZXx8QT49ZS5yZWxlYXNlU3RhcnRUaW1lJiYoZS5pc0luUmVsZWFzZT0hMCxiZS5zdGFydFJlbGVhc2UoZSksX2Uuc3RhcnRSZWxlYXNlKGUpLGUuc2FtcGxlLmxvb3BpbmdNb2RlPT09MyYmKGUuc2FtcGxlLmlzTG9vcGluZz0hMSkpLGUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmluaXRpYWxBdHRlbnVhdGlvbl0+MjUwMClyZXR1cm4gZS5pc0luUmVsZWFzZSYmKGUuZmluaXNoZWQ9ITApLGUuZmluaXNoZWQ7bGV0IEI9ZS50YXJnZXRLZXksZD1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5maW5lVHVuZV0rdGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nW2UubWlkaU5vdGVdK3RoaXMuY2hhbm5lbFR1bmluZ0NlbnRzLGg9ZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuY29hcnNlVHVuZV0sQz10aGlzLnN5bnRoUHJvcHMudHVuaW5nc1t0aGlzLnByZXNldD8ucHJvZ3JhbT8/MF0/LltlLnJlYWxLZXldO2lmKEM/LmNlbnRUdW5pbmcmJihCPUMubWlkaU5vdGUsZCs9Qy5jZW50VHVuaW5nKSxlLnBvcnRhbWVudG9Gcm9tS2V5Pi0xKXtsZXQgJD1NYXRoLm1pbigoQS1lLnN0YXJ0VGltZSkvZS5wb3J0YW1lbnRvRHVyYXRpb24sMSksVj1CLWUucG9ydGFtZW50b0Zyb21LZXk7aC09ViooMS0kKX1kKz0oQi1lLnNhbXBsZS5yb290S2V5KSplLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5zY2FsZVR1bmluZ107bGV0IFE9MCxtPTAseT1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS52aWJMZm9Ub1BpdGNoXSxGPWUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnZpYkxmb1RvVm9sdW1lXSxrPWUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLnZpYkxmb1RvRmlsdGVyRmNdO2lmKHkhPT0wfHxGIT09MHx8ayE9PTApe2xldCAkPWUuc3RhcnRUaW1lK1FlKGUubW9kdWxhdGVkR2VuZXJhdG9yc1tpLmRlbGF5VmliTEZPXSksVj1ObihlLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5mcmVxVmliTEZPXSkscT1wbigkLFYsQSk7ZCs9cSooeSp0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLm1vZHVsYXRpb25NdWx0aXBsaWVyXSksbSs9LXEqRixRKz1xKmt9bGV0IEQ9ZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kubW9kTGZvVG9QaXRjaF0sdj1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5tb2RMZm9Ub1ZvbHVtZV0sTD1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5tb2RMZm9Ub0ZpbHRlckZjXTtpZihEIT09MHx8TCE9PTB8fHYhPT0wKXtsZXQgJD1lLnN0YXJ0VGltZStRZShlLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5kZWxheU1vZExGT10pLFY9Tm4oZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuZnJlcU1vZExGT10pLHE9cG4oJCxWLEEpO2QrPXEqKEQqdGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5tb2R1bGF0aW9uTXVsdGlwbGllcl0pLG0rPS1xKnYsUSs9cSpMfWlmKHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg+MCl7bGV0ICQ9cG4oZS5zdGFydFRpbWUrdGhpcy5jaGFubmVsVmlicmF0by5kZWxheSx0aGlzLmNoYW5uZWxWaWJyYXRvLnJhdGUsQSk7JCYmKGQrPSQqdGhpcy5jaGFubmVsVmlicmF0by5kZXB0aCl9bGV0IEU9ZS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kubW9kRW52VG9QaXRjaF0sWD1lLm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5tb2RFbnZUb0ZpbHRlckZjXTtpZihYIT09MHx8RSE9PTApe2xldCAkPV9lLmdldFZhbHVlKGUsQSk7USs9JCpYLGQrPSQqRX1tLT1lLnJlc29uYW5jZU9mZnNldDtsZXQgTz1+fihkK2gqMTAwKTtPIT09ZS5jdXJyZW50VHVuaW5nQ2VudHMmJihlLmN1cnJlbnRUdW5pbmdDZW50cz1PLGUuY3VycmVudFR1bmluZ0NhbGN1bGF0ZWQ9TWF0aC5wb3coMixPLzEyMDApKTtsZXQgbkE9bmV3IEZsb2F0MzJBcnJheShnKTtyZXR1cm4gZS5zYW1wbGUubG9vcGluZ01vZGU9PT0yJiYhZS5pc0luUmVsZWFzZT8oYmUuYXBwbHkoZSxuQSxtLHRoaXMuc3ludGhQcm9wcy52b2x1bWVFbnZlbG9wZVNtb290aGluZ0ZhY3RvciksZS5maW5pc2hlZCk6KG5yLmdldFNhbXBsZShlLG5BLHRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmludGVycG9sYXRpb25UeXBlKSxYdC5hcHBseShlLG5BLFEsdGhpcy5zeW50aFByb3BzLmZpbHRlclNtb290aGluZ0ZhY3RvciksYmUuYXBwbHkoZSxuQSxtLHRoaXMuc3ludGhQcm9wcy52b2x1bWVFbnZlbG9wZVNtb290aGluZ0ZhY3RvciksdGhpcy5wYW5BbmRNaXhWb2ljZShlLG5BLHQsbixzLGEscixJLG8pLGUuZmluaXNoZWQpfXZhciB1ZT17cGl0Y2hXaGVlbFJhbmdlOjAsZmluZVR1bmluZzoxLGNvYXJzZVR1bmluZzoyLG1vZHVsYXRpb25EZXB0aDo1LHJlc2V0UGFyYW1ldGVyczoxNjM4M30sWmU9e3BhcnRQYXJhbWV0ZXI6MSxhd2UzMjoxMjcsU0YyOjEyMH0sT2U9e3ZpYnJhdG9SYXRlOjgsdmlicmF0b0RlcHRoOjksdmlicmF0b0RlbGF5OjEwLFRWRkZpbHRlckN1dG9mZjozMixUVkZGaWx0ZXJSZXNvbmFuY2U6MzMsRUdBdHRhY2tUaW1lOjk5LEVHUmVsZWFzZVRpbWU6MTAyfTtmdW5jdGlvbiBhcihlKXt0aGlzLm1pZGlDb250cm9sbGVyc1tTLmRhdGFFbnRyeU1TQl09ZTw8NztsZXQgQT0oKT0+e3RoaXMuY2hhbm5lbFZpYnJhdG8uZGVsYXk9PT0wJiZ0aGlzLmNoYW5uZWxWaWJyYXRvLnJhdGU9PT0wJiZ0aGlzLmNoYW5uZWxWaWJyYXRvLmRlcHRoPT09MCYmKHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg9NTAsdGhpcy5jaGFubmVsVmlicmF0by5yYXRlPTgsdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT0uNil9LHQ9KG4scyxhKT0+e2EubGVuZ3RoPjAmJihhPSIgIithKSxwKGAlYyR7bn0gZm9yICVjJHt0aGlzLmNoYW5uZWxOdW1iZXJ9JWMgaXMgbm93IHNldCB0byAlYyR7c30lYyR7YX0uYCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyl9O3N3aXRjaCh0aGlzLmRhdGFFbnRyeVN0YXRlKXtkZWZhdWx0OmNhc2UgWUEuSWRsZTpicmVhaztjYXNlIFlBLk5SUEZpbmU6e2lmKHRoaXMubG9ja0dTTlJQTlBhcmFtcylyZXR1cm47bGV0IG49dGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCXT4+NyxzPXRoaXMubWlkaUNvbnRyb2xsZXJzW1Mubm9uUmVnaXN0ZXJlZFBhcmFtZXRlckxTQl0+PjcsYT10aGlzLm1pZGlDb250cm9sbGVyc1tTLmRhdGFFbnRyeUxTQl0+Pjc7c3dpdGNoKG4pe2RlZmF1bHQ6aWYoZT09PTY0KXJldHVybjtwKGAlY1VucmVjb2duaXplZCBOUlBOIGZvciAlYyR7dGhpcy5jaGFubmVsTnVtYmVyfSVjOiAlYygweCR7cy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0gMHgke3MudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9KSVjIGRhdGEgdmFsdWU6ICVjJHtlfWAsYy53YXJuLGMucmVjb2duaXplZCxjLndhcm4sYy51bnJlY29nbml6ZWQsYy53YXJuLGMudmFsdWUpO2JyZWFrO2Nhc2UgWmUucGFydFBhcmFtZXRlcjpzd2l0Y2gocyl7ZGVmYXVsdDppZihlPT09NjQpcmV0dXJuO3AoYCVjVW5yZWNvZ25pemVkIE5SUE4gZm9yICVjJHt0aGlzLmNoYW5uZWxOdW1iZXJ9JWM6ICVjKDB4JHtuLnRvU3RyaW5nKDE2KX0gMHgke3MudG9TdHJpbmcoMTYpfSklYyBkYXRhIHZhbHVlOiAlYyR7ZX1gLGMud2FybixjLnJlY29nbml6ZWQsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKTticmVhaztjYXNlIE9lLnZpYnJhdG9SYXRlOmlmKGU9PT02NClyZXR1cm47QSgpLHRoaXMuY2hhbm5lbFZpYnJhdG8ucmF0ZT1lLzY0KjgsdCgiVmlicmF0byByYXRlIixgJHtlfSA9ICR7dGhpcy5jaGFubmVsVmlicmF0by5yYXRlfWAsIkh6Iik7YnJlYWs7Y2FzZSBPZS52aWJyYXRvRGVwdGg6aWYoZT09PTY0KXJldHVybjtBKCksdGhpcy5jaGFubmVsVmlicmF0by5kZXB0aD1lLzIsdCgiVmlicmF0byBkZXB0aCIsYCR7ZX0gPSAke3RoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGh9YCwiY2VudHMgb2YgZGV0dW5lIik7YnJlYWs7Y2FzZSBPZS52aWJyYXRvRGVsYXk6aWYoZT09PTY0KXJldHVybjtBKCksdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT1lLzY0LzMsdCgiVmlicmF0byBkZWxheSIsYCR7ZX0gPSAke3RoaXMuY2hhbm5lbFZpYnJhdG8uZGVsYXl9YCwic2Vjb25kcyIpO2JyZWFrO2Nhc2UgT2UuVFZGRmlsdGVyQ3V0b2ZmOnRoaXMuY29udHJvbGxlckNoYW5nZShTLmJyaWdodG5lc3MsZSksdCgiRmlsdGVyIGN1dG9mZiIsZS50b1N0cmluZygpLCIiKTticmVhaztjYXNlIE9lLkVHQXR0YWNrVGltZTp0aGlzLmNvbnRyb2xsZXJDaGFuZ2UoUy5hdHRhY2tUaW1lLGUpLHQoIkVHIGF0dGFjayB0aW1lIixlLnRvU3RyaW5nKCksIiIpO2JyZWFrO2Nhc2UgT2UuRUdSZWxlYXNlVGltZTp0aGlzLmNvbnRyb2xsZXJDaGFuZ2UoUy5yZWxlYXNlVGltZSxlKSx0KCJFRyByZWxlYXNlIHRpbWUiLGUudG9TdHJpbmcoKSwiIik7YnJlYWt9YnJlYWs7Y2FzZSBaZS5hd2UzMjpicmVhaztjYXNlIFplLlNGMjp7aWYocz4xMDApYnJlYWs7bGV0IHI9dGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5zZjJOUFJOR2VuZXJhdG9yTFNCXSxJPShlPDw3fGEpLTgxOTI7dGhpcy5zZXRHZW5lcmF0b3JPZmZzZXQocixJKTticmVha319YnJlYWt9Y2FzZSBZQS5SUENvYXJzZTpjYXNlIFlBLlJQRmluZTp7bGV0IG49dGhpcy5taWRpQ29udHJvbGxlcnNbUy5yZWdpc3RlcmVkUGFyYW1ldGVyTVNCXXx0aGlzLm1pZGlDb250cm9sbGVyc1tTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0JdPj43O3N3aXRjaChuKXtkZWZhdWx0OnAoYCVjVW5yZWNvZ25pemVkIFJQTiBmb3IgJWMke3RoaXMuY2hhbm5lbE51bWJlcn0lYzogJWMoMHgke24udG9TdHJpbmcoMTYpfSklYyBkYXRhIHZhbHVlOiAlYyR7ZX1gLGMud2FybixjLnJlY29nbml6ZWQsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKTticmVhaztjYXNlIHVlLnBpdGNoV2hlZWxSYW5nZTp0aGlzLm1pZGlDb250cm9sbGVyc1ttQStqLnBpdGNoV2hlZWxSYW5nZV09ZTw8Nyx0KCJQaXRjaCB3aGVlbCByYW5nZSIsZS50b1N0cmluZygpLCJzZW1pdG9uZXMiKTticmVhaztjYXNlIHVlLmNvYXJzZVR1bmluZzp7bGV0IHM9ZS02NDt0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEuY2hhbm5lbFR1bmluZ1NlbWl0b25lcyxzKSx0KCJDb2Fyc2UgdHVuaW5nIixzLnRvU3RyaW5nKCksInNlbWl0b25lcyIpO2JyZWFrfWNhc2UgdWUuZmluZVR1bmluZzp0aGlzLnNldFR1bmluZyhlLTY0LCExKTticmVhaztjYXNlIHVlLm1vZHVsYXRpb25EZXB0aDp0aGlzLnNldE1vZHVsYXRpb25EZXB0aChlKjEwMCk7YnJlYWs7Y2FzZSB1ZS5yZXNldFBhcmFtZXRlcnM6dGhpcy5yZXNldFBhcmFtZXRlcnMoKTticmVha319fX12YXIgb3I9W2kuZGVsYXlNb2RMRk8saS5mcmVxTW9kTEZPLGkuZGVsYXlWaWJMRk8saS5mcmVxVmliTEZPLGkuZGVsYXlNb2RFbnYsaS5hdHRhY2tNb2RFbnYsaS5ob2xkTW9kRW52LGkuZGVjYXlNb2RFbnYsaS5zdXN0YWluTW9kRW52LGkucmVsZWFzZU1vZEVudixpLmRlbGF5Vm9sRW52LGkuYXR0YWNrVm9sRW52LGkuaG9sZFZvbEVudixpLmRlY2F5Vm9sRW52LGkuc3VzdGFpblZvbEVudixpLnJlbGVhc2VWb2xFbnYsaS5maW5lVHVuZSxpLm1vZExmb1RvUGl0Y2gsaS52aWJMZm9Ub1BpdGNoLGkubW9kRW52VG9QaXRjaCxpLm1vZExmb1RvVm9sdW1lLGkuaW5pdGlhbEZpbHRlckZjLGkuaW5pdGlhbEZpbHRlclEsaS5tb2RMZm9Ub0ZpbHRlckZjLGkubW9kRW52VG9GaWx0ZXJGYyxpLmNob3J1c0VmZmVjdHNTZW5kLGkucmV2ZXJiRWZmZWN0c1NlbmRdO2Z1bmN0aW9uIHJyKGUsQSx0KXtsZXQgbj0oaCxDLFEpPT5NYXRoLm1heChDLE1hdGgubWluKFEsaCkpLHM9aD0+TWF0aC5tYXgoLTMyNzY4LDEyMDAqTWF0aC5sb2cyKGgvMWUzKSksYT1oPT42OTAwKzEyMDAqTWF0aC5sb2cyKGgvNDQwKSxyPXQ8PDd8QTtyLT04MTkyO2xldCBJPW9yW2VdO0l8fHNBKGBJbnZhbGlkIEFXRTMyIExTQjogJWMke2V9YCxjLnVucmVjb2duaXplZCk7bGV0IG8sZyxCLGQ7c3dpdGNoKEkpe2RlZmF1bHQ6YnJlYWs7Y2FzZSBpLmRlbGF5TW9kTEZPOmNhc2UgaS5kZWxheVZpYkxGTzpjYXNlIGkuZGVsYXlWb2xFbnY6Y2FzZSBpLmRlbGF5TW9kRW52Om89NCpuKHIsMCw1OTAwKSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEkscyhvKSk7YnJlYWs7Y2FzZSBpLmF0dGFja1ZvbEVudjpjYXNlIGkuYXR0YWNrTW9kRW52Om89bihyLDAsNTk0MCksdGhpcy5zZXRHZW5lcmF0b3JPdmVycmlkZShJLHMobykpO2JyZWFrO2Nhc2UgaS5ob2xkVm9sRW52OmNhc2UgaS5ob2xkTW9kRW52Om89bihyLDAsODE5MSksdGhpcy5zZXRHZW5lcmF0b3JPdmVycmlkZShJLHMobykpO2JyZWFrO2Nhc2UgaS5kZWNheU1vZEVudjpjYXNlIGkuZGVjYXlWb2xFbnY6Y2FzZSBpLnJlbGVhc2VWb2xFbnY6Y2FzZSBpLnJlbGVhc2VNb2RFbnY6bz00Km4ociwwLDU5NDApLHRoaXMuc2V0R2VuZXJhdG9yT3ZlcnJpZGUoSSxzKG8pKTticmVhaztjYXNlIGkuZnJlcVZpYkxGTzpjYXNlIGkuZnJlcU1vZExGTzpnPS4wODQqQSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksYShnKSwhMCk7YnJlYWs7Y2FzZSBpLnN1c3RhaW5Wb2xFbnY6Y2FzZSBpLnN1c3RhaW5Nb2RFbnY6Qj1BKjcuNSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksQik7YnJlYWs7Y2FzZSBpLmZpbmVUdW5lOnRoaXMuc2V0R2VuZXJhdG9yT3ZlcnJpZGUoSSxyLCEwKTticmVhaztjYXNlIGkubW9kTGZvVG9QaXRjaDpjYXNlIGkudmliTGZvVG9QaXRjaDpkPW4ociwtMTI3LDEyNykqOS4zNzUsdGhpcy5zZXRHZW5lcmF0b3JPdmVycmlkZShJLGQsITApO2JyZWFrO2Nhc2UgaS5tb2RFbnZUb1BpdGNoOmQ9bihyLC0xMjcsMTI3KSo5LjM3NSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksZCk7YnJlYWs7Y2FzZSBpLm1vZExmb1RvVm9sdW1lOkI9MS44NzUqQSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksQiwhMCk7YnJlYWs7Y2FzZSBpLmluaXRpYWxGaWx0ZXJGYzp7bGV0IGg9NDMzNSs1OSpBO3RoaXMuc2V0R2VuZXJhdG9yT3ZlcnJpZGUoSSxoLCEwKTticmVha31jYXNlIGkuaW5pdGlhbEZpbHRlclE6Qj0yMTUqKEEvMTI3KSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksQiwhMCk7YnJlYWs7Y2FzZSBpLm1vZExmb1RvRmlsdGVyRmM6ZD1uKHIsLTY0LDYzKSo1Ni4yNSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksZCwhMCk7YnJlYWs7Y2FzZSBpLm1vZEVudlRvRmlsdGVyRmM6ZD1uKHIsLTY0LDYzKSo1Ni4yNSx0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksZCk7YnJlYWs7Y2FzZSBpLmNob3J1c0VmZmVjdHNTZW5kOmNhc2UgaS5yZXZlcmJFZmZlY3RzU2VuZDp0aGlzLnNldEdlbmVyYXRvck92ZXJyaWRlKEksbihyLDAsMjU1KSooMWUzLzI1NSkpO2JyZWFrfX1mdW5jdGlvbiBpcihlKXtzd2l0Y2godGhpcy5taWRpQ29udHJvbGxlcnNbUy5kYXRhRW50cnlMU0JdPWU8PDcsdGhpcy5kYXRhRW50cnlTdGF0ZSl7ZGVmYXVsdDpicmVhaztjYXNlIFlBLlJQQ29hcnNlOmNhc2UgWUEuUlBGaW5lOntzd2l0Y2godGhpcy5taWRpQ29udHJvbGxlcnNbUy5yZWdpc3RlcmVkUGFyYW1ldGVyTVNCXXx0aGlzLm1pZGlDb250cm9sbGVyc1tTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0JdPj43KXtkZWZhdWx0OmJyZWFrO2Nhc2UgdWUucGl0Y2hXaGVlbFJhbmdlOntpZihlPT09MClicmVhazt0aGlzLm1pZGlDb250cm9sbGVyc1ttQStqLnBpdGNoV2hlZWxSYW5nZV18PWU7bGV0IHQ9KHRoaXMubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbFJhbmdlXT4+NykrZS8xMjg7cChgJWNDaGFubmVsICR7dGhpcy5jaGFubmVsTnVtYmVyfSBwaXRjaCB3aGVlbCByYW5nZS4gU2VtaXRvbmVzOiAlYyR7dH1gLGMuaW5mbyxjLnZhbHVlKTticmVha31jYXNlIHVlLmZpbmVUdW5pbmc6e2xldCBuPXRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFR1bmluZ108PDd8ZTt0aGlzLnNldFR1bmluZyhuKi4wMTIyMDcwMzEyNSk7YnJlYWt9Y2FzZSB1ZS5tb2R1bGF0aW9uRGVwdGg6e2xldCBuPXRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEubW9kdWxhdGlvbk11bHRpcGxpZXJdKjUwK2UvMTI4KjEwMDt0aGlzLnNldE1vZHVsYXRpb25EZXB0aChuKTticmVha31jYXNlIDE2MzgzOnRoaXMucmVzZXRQYXJhbWV0ZXJzKCk7YnJlYWt9YnJlYWt9Y2FzZSBZQS5OUlBGaW5lOntsZXQgQT10aGlzLm1pZGlDb250cm9sbGVyc1tTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0JdPj43LHQ9dGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTFNCXT4+NztpZihBPT09WmUuU0YyKXJldHVybjtzd2l0Y2goQSl7ZGVmYXVsdDpwKGAlY1VucmVjb2duaXplZCBOUlBOIExTQiBmb3IgJWMke3RoaXMuY2hhbm5lbE51bWJlcn0lYzogJWMoMHgke3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9IDB4JHt0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSklYyBkYXRhIHZhbHVlOiAlYyR7ZX1gLGMud2FybixjLnJlY29nbml6ZWQsYy53YXJuLGMudW5yZWNvZ25pemVkLGMud2FybixjLnZhbHVlKTticmVhaztjYXNlIFplLmF3ZTMyOnJyLmNhbGwodGhpcyx0LGUsdGhpcy5taWRpQ29udHJvbGxlcnNbUy5kYXRhRW50cnlNU0JdPj43KTticmVha319fX1mdW5jdGlvbiBJcihlLEEsdD0hMCl7aWYoZT4xMjcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIE1JREkgQ29udHJvbGxlci4iKTtpZihlPj1TLm1vZHVsYXRpb25XaGVlbExTQiYmZTw9Uy5lZmZlY3RDb250cm9sMkxTQiYmZSE9PVMuZGF0YUVudHJ5TFNCKXtsZXQgbj1lLTMyO2lmKHRoaXMubG9ja2VkQ29udHJvbGxlcnNbbl0pcmV0dXJuO3RoaXMubWlkaUNvbnRyb2xsZXJzW25dPXRoaXMubWlkaUNvbnRyb2xsZXJzW25dJjE2MjU2fEEmMTI3LHRoaXMudm9pY2VzLmZvckVhY2gocz0+dGhpcy5jb21wdXRlTW9kdWxhdG9ycyhzLDEsbikpfWlmKCF0aGlzLmxvY2tlZENvbnRyb2xsZXJzW2VdKXtzd2l0Y2godGhpcy5taWRpQ29udHJvbGxlcnNbZV09QTw8NyxlKXtjYXNlIFMuYWxsTm90ZXNPZmY6dGhpcy5zdG9wQWxsTm90ZXMoKTticmVhaztjYXNlIFMuYWxsU291bmRPZmY6dGhpcy5zdG9wQWxsTm90ZXMoITApO2JyZWFrO2Nhc2UgUy5iYW5rU2VsZWN0OnRoaXMuc2V0QmFua01TQihBKSx0aGlzLmNoYW5uZWxOdW1iZXIlMTY9PT1TZSYmZkEuaXNTeXN0ZW1YRyh0aGlzLmNoYW5uZWxTeXN0ZW0pJiZ0aGlzLnNldEJhbmtNU0IoMTI3KTticmVhaztjYXNlIFMuYmFua1NlbGVjdExTQjp0aGlzLnNldEJhbmtMU0IoQSk7YnJlYWs7Y2FzZSBTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0I6dGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5SUEZpbmU7YnJlYWs7Y2FzZSBTLnJlZ2lzdGVyZWRQYXJhbWV0ZXJNU0I6dGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5SUENvYXJzZTticmVhaztjYXNlIFMubm9uUmVnaXN0ZXJlZFBhcmFtZXRlck1TQjp0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdPTAsdGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5OUlBDb2Fyc2U7YnJlYWs7Y2FzZSBTLm5vblJlZ2lzdGVyZWRQYXJhbWV0ZXJMU0I6dGhpcy5taWRpQ29udHJvbGxlcnNbUy5ub25SZWdpc3RlcmVkUGFyYW1ldGVyTVNCXT4+Nz09PVplLlNGMiYmKHRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuc2YyTlBSTkdlbmVyYXRvckxTQl0lMTAwIT09MCYmKHRoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuc2YyTlBSTkdlbmVyYXRvckxTQl09MCksQT09PTEwMD90aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz0xMDA6QT09PTEwMT90aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz0xZTM6QT09PTEwMj90aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz0xZTQ6QTwxMDAmJih0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLnNmMk5QUk5HZW5lcmF0b3JMU0JdKz1BKSksdGhpcy5kYXRhRW50cnlTdGF0ZT1ZQS5OUlBGaW5lO2JyZWFrO2Nhc2UgUy5kYXRhRW50cnlNU0I6dGhpcy5kYXRhRW50cnlDb2Fyc2UoQSk7YnJlYWs7Y2FzZSBTLmRhdGFFbnRyeUxTQjp0aGlzLmRhdGFFbnRyeUZpbmUoQSk7YnJlYWs7Y2FzZSBTLnJlc2V0QWxsQ29udHJvbGxlcnM6dGhpcy5yZXNldENvbnRyb2xsZXJzUlAxNUNvbXBsaWFudCgpO2JyZWFrO2Nhc2UgUy5zdXN0YWluUGVkYWw6QTw2NCYmKHRoaXMuc3VzdGFpbmVkVm9pY2VzLmZvckVhY2gobj0+e24ucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpfSksdGhpcy5zdXN0YWluZWRWb2ljZXM9W10pO2JyZWFrO2RlZmF1bHQ6dGhpcy52b2ljZXMuZm9yRWFjaChuPT50aGlzLmNvbXB1dGVNb2R1bGF0b3JzKG4sMSxlKSk7YnJlYWt9dCYmdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgiY29udHJvbGxlckNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGNvbnRyb2xsZXJOdW1iZXI6ZSxjb250cm9sbGVyVmFsdWU6QX0pfX12YXIgSXQ9ezA6MCwxOi4wMDYsMjouMDIzLDQ6LjA1LDg6LjExLDE2Oi4yNSwzMjouNSw2NDoyLjA2LDgwOjQuMiw5Njo4LjQsMTEyOjE5LjUsMTE2OjI2LjcsMTIwOjQwLDEyNDo4MCwxMjc6NDgwfTtmdW5jdGlvbiBncihlKXtpZihJdFtlXSE9PXZvaWQgMClyZXR1cm4gSXRbZV07bGV0IEE9bnVsbCx0PW51bGw7Zm9yKGxldCBuIG9mIE9iamVjdC5rZXlzKEl0KSl7bGV0IHM9cGFyc2VJbnQobik7czxlJiYoQT09PW51bGx8fHM+QSkmJihBPXMpLHM+ZSYmKHQ9PT1udWxsfHxzPHQpJiYodD1zKX1pZihBIT09bnVsbCYmdCE9PW51bGwpe2xldCBuPUl0W0FdLHM9SXRbdF07cmV0dXJuIG4rKGUtQSkqKHMtbikvKHQtQSl9cmV0dXJuIDB9ZnVuY3Rpb24gY3IoZSxBKXtyZXR1cm4gZ3IoZSkqKEEvMzApfWZ1bmN0aW9uIEVyKGUsQSl7aWYoQTwxKXt0aGlzLm5vdGVPZmYoZSk7cmV0dXJufWlmKEE9TWF0aC5taW4oMTI3LEEpLHRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmJsYWNrTUlESU1vZGUmJnRoaXMuc3ludGgudG90YWxWb2ljZXNBbW91bnQ+MjAwJiZBPDQwfHx0aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5ibGFja01JRElNb2RlJiZBPDEwfHx0aGlzLl9pc011dGVkKXJldHVybjtpZighdGhpcy5wcmVzZXQpe3NBKGBObyBwcmVzZXQgZm9yIGNoYW5uZWwgJHt0aGlzLmNoYW5uZWxOdW1iZXJ9IWApO3JldHVybn1sZXQgdD1lK3RoaXMuY2hhbm5lbFRyYW5zcG9zZUtleVNoaWZ0K3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbEtleVNoaWZ0XSxuPXQ7aWYodD4xMjd8fHQ8MClyZXR1cm47bGV0IHM9dGhpcy5wcmVzZXQ/LnByb2dyYW0sYT10aGlzLnN5bnRoUHJvcHMudHVuaW5nc1tzXT8uW3RdPy5taWRpTm90ZTthPj0wJiYobj1hKSx0aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5tb25vcGhvbmljUmV0cmlnZ2VyTW9kZSYmdGhpcy5raWxsTm90ZShlLC03MjAwKTtsZXQgcj10aGlzLnN5bnRoLmtleU1vZGlmaWVyTWFuYWdlci5nZXRWZWxvY2l0eSh0aGlzLmNoYW5uZWxOdW1iZXIsdCk7cj4tMSYmKEE9cik7bGV0IEk9dGhpcy5zeW50aC5rZXlNb2RpZmllck1hbmFnZXIuZ2V0R2Fpbih0aGlzLmNoYW5uZWxOdW1iZXIsdCksbz0tMSxnPTAsQj10aGlzLm1pZGlDb250cm9sbGVyc1tTLnBvcnRhbWVudG9UaW1lXT4+NyxkPXRoaXMubWlkaUNvbnRyb2xsZXJzW1MucG9ydGFtZW50b0NvbnRyb2xdLGg9ZD4+NztpZighdGhpcy5kcnVtQ2hhbm5lbCYmaCE9PW4mJnRoaXMubWlkaUNvbnRyb2xsZXJzW1MucG9ydGFtZW50b09uT2ZmXT49ODE5MiYmQj4wKXtpZihkIT09MSl7bGV0IHk9TWF0aC5hYnMobi1oKTtnPWNyKEIseSksbz1ofXRoaXMuY29udHJvbGxlckNoYW5nZShTLnBvcnRhbWVudG9Db250cm9sLG4pfWxldCBDPXRoaXMuc3ludGhQcm9wcy5nZXRWb2ljZXModGhpcy5jaGFubmVsTnVtYmVyLG4sQSx0KSxRPTA7dGhpcy5yYW5kb21QYW4mJihRPU1hdGgucm91bmQoTWF0aC5yYW5kb20oKSoxZTMtNTAwKSk7bGV0IG09dGhpcy52b2ljZXM7Qy5mb3JFYWNoKHk9Pnt5LnBvcnRhbWVudG9Gcm9tS2V5PW8seS5wb3J0YW1lbnRvRHVyYXRpb249Zyx5Lm92ZXJyaWRlUGFuPVEseS5nYWluPUksdGhpcy5zeXNFeE1vZHVsYXRvcnMubW9kdWxhdG9yTGlzdC5mb3JFYWNoKE89PntsZXQgbkE9Ty5tb2QsJD15Lm1vZHVsYXRvcnMuZmluZEluZGV4KFY9PkVBLmlzSWRlbnRpY2FsKFYsbkEpKTskIT09LTE/eS5tb2R1bGF0b3JzWyRdPUVBLmNvcHlGcm9tKG5BKTp5Lm1vZHVsYXRvcnMucHVzaChFQS5jb3B5RnJvbShuQSkpfSksdGhpcy5nZW5lcmF0b3JPdmVycmlkZXNFbmFibGVkJiZ0aGlzLmdlbmVyYXRvck92ZXJyaWRlcy5mb3JFYWNoKChPLG5BKT0+e08hPT1WcyYmKHkuZ2VuZXJhdG9yc1tuQV09Tyl9KTtsZXQgRj15LmV4Y2x1c2l2ZUNsYXNzO0YhPT0wJiZtLmZvckVhY2goTz0+e08uZXhjbHVzaXZlQ2xhc3M9PT1GJiZPLmV4Y2x1c2l2ZVJlbGVhc2UodGhpcy5zeW50aC5jdXJyZW50U3ludGhUaW1lKX0pLHRoaXMuY29tcHV0ZU1vZHVsYXRvcnMoeSk7bGV0IGs9eS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3RhcnRBZGRyc09mZnNldF0reS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3RhcnRBZGRyc0NvYXJzZU9mZnNldF0qMzI3NjgsRD15Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5lbmRBZGRyT2Zmc2V0XSt5Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5lbmRBZGRyc0NvYXJzZU9mZnNldF0qMzI3Njgsdj15Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5zdGFydGxvb3BBZGRyc09mZnNldF0reS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXRdKjMyNzY4LEw9eS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kuZW5kbG9vcEFkZHJzT2Zmc2V0XSt5Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXRdKjMyNzY4LEU9eS5zYW1wbGUsWD1PPT5NYXRoLm1heCgwLE1hdGgubWluKEUuc2FtcGxlRGF0YS5sZW5ndGgtMSxPKSk7aWYoRS5jdXJzb3I9WChFLmN1cnNvcitrKSxFLmVuZD1YKEUuZW5kK0QpLEUubG9vcFN0YXJ0PVgoRS5sb29wU3RhcnQrdiksRS5sb29wRW5kPVgoRS5sb29wRW5kK0wpLEUubG9vcEVuZDxFLmxvb3BTdGFydCl7bGV0IE89RS5sb29wU3RhcnQ7RS5sb29wU3RhcnQ9RS5sb29wRW5kLEUubG9vcEVuZD1PfUUubG9vcEVuZC1FLmxvb3BTdGFydDwxJiYoRS5sb29waW5nTW9kZT09PTF8fEUubG9vcGluZ01vZGU9PT0zKSYmKEUubG9vcGluZ01vZGU9MCxFLmlzTG9vcGluZz0hMSkseS52b2x1bWVFbnZlbG9wZS5hdHRlbnVhdGlvbj15LnZvbHVtZUVudmVsb3BlLmF0dGVudWF0aW9uVGFyZ2V0R2Fpbix5LmN1cnJlbnRQYW49TWF0aC5tYXgoLTUwMCxNYXRoLm1pbig1MDAseS5tb2R1bGF0ZWRHZW5lcmF0b3JzW2kucGFuXSkpfSksdGhpcy5zeW50aC50b3RhbFZvaWNlc0Ftb3VudCs9Qy5sZW5ndGgsdGhpcy5zeW50aC50b3RhbFZvaWNlc0Ftb3VudD50aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy52b2ljZUNhcCYmdGhpcy5zeW50aFByb3BzLnZvaWNlS2lsbGluZyhDLmxlbmd0aCksbS5wdXNoKC4uLkMpLHRoaXMuc2VuZENoYW5uZWxQcm9wZXJ0eSgpLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm5vdGVPbiIse21pZGlOb3RlOmUsY2hhbm5lbDp0aGlzLmNoYW5uZWxOdW1iZXIsdmVsb2NpdHk6QX0pfWZ1bmN0aW9uIEJyKGUpe2lmKGU+MTI3fHxlPDApe3NBKCJSZWNlaXZlZCBhIG5vdGVPbiBmb3Igbm90ZSIsZSwiSWdub3JpbmcuIik7cmV0dXJufWxldCBBPWUrdGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQrdGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5jaGFubmVsS2V5U2hpZnRdO2lmKHRoaXMuc3ludGhQcm9wcy5tYXN0ZXJQYXJhbWV0ZXJzLmJsYWNrTUlESU1vZGUmJiF0aGlzLmRydW1DaGFubmVsKXt0aGlzLmtpbGxOb3RlKEEsLTY5NTApLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm5vdGVPZmYiLHttaWRpTm90ZTplLGNoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyfSk7cmV0dXJufXRoaXMudm9pY2VzLmZvckVhY2gobj0+e24ucmVhbEtleSE9PUF8fG4uaXNJblJlbGVhc2V8fCh0aGlzLmhvbGRQZWRhbD90aGlzLnN1c3RhaW5lZFZvaWNlcy5wdXNoKG4pOm4ucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpKX0pLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm5vdGVPZmYiLHttaWRpTm90ZTplLGNoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyfSl9ZnVuY3Rpb24gQ3IoZSl7aWYodGhpcy5sb2NrUHJlc2V0KXJldHVybjt0aGlzLnBhdGNoLnByb2dyYW09ZTtsZXQgQT10aGlzLnN5bnRoLnNvdW5kQmFua01hbmFnZXIuZ2V0UHJlc2V0KHRoaXMucGF0Y2gsdGhpcy5jaGFubmVsU3lzdGVtKTtBfHwoc0EoIk5vIHByZXNldHMhIFVzaW5nIGVtcHR5IGZhbGxiYWNrLiIpLEE9bmV3IHBlKHRoaXMuc3ludGguc291bmRCYW5rTWFuYWdlci5zb3VuZEJhbmtMaXN0WzBdLnNvdW5kQmFuayksQS5uYW1lPSJTUEVTU0EgRU1QVFkgRkFMTEJBQ0sgUFJFU0VUIiksdGhpcy5wcmVzZXQ9QSxBLmlzQW55RHJ1bXMhPT10aGlzLmRydW1DaGFubmVsJiZ0aGlzLnNldERydW1GbGFnKEEuaXNBbnlEcnVtcyksdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgicHJvZ3JhbUNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGJhbmtMU0I6dGhpcy5wcmVzZXQuYmFua0xTQixiYW5rTVNCOnRoaXMucHJlc2V0LmJhbmtNU0IscHJvZ3JhbTp0aGlzLnByZXNldC5wcm9ncmFtLGlzR01HU0RydW06dGhpcy5wcmVzZXQuaXNHTUdTRHJ1bX0pLHRoaXMuc2VuZENoYW5uZWxQcm9wZXJ0eSgpfXZhciBocj1jbGFzc3ttb2R1bGF0b3JMaXN0PVtdO3Jlc2V0TW9kdWxhdG9ycygpe3RoaXMubW9kdWxhdG9yTGlzdD1bXX1zZXRNb2R1bGF0b3IoZSxBLHQsbj0hMSxzPSExKXtsZXQgYT10aGlzLmdldE1vZHVsYXRvcklEKGUsQSxuLHMpO3Q9PT0wJiZ0aGlzLmRlbGV0ZU1vZHVsYXRvcihhKTtsZXQgcj10aGlzLm1vZHVsYXRvckxpc3QuZmluZChJPT5JLmlkPT09YSk7aWYocilyLm1vZC50cmFuc2Zvcm1BbW91bnQ9dDtlbHNle2xldCBJLG87ZT49bUE/KEk9ZS1tQSxvPSExKTooST1lLG89ITApO2xldCBnPW5ldyBFQShuZXcgWEEoSSxRQS5saW5lYXIsbyxuKSxuZXcgWEEsQSx0LDApO3RoaXMubW9kdWxhdG9yTGlzdC5wdXNoKHttb2Q6ZyxpZDphfSl9fWdldE1vZHVsYXRvcklEKGUsQSx0LG4pe3JldHVybmAke2V9LSR7QX0tJHt0fS0ke259YH1kZWxldGVNb2R1bGF0b3IoZSl7dGhpcy5tb2R1bGF0b3JMaXN0PXRoaXMubW9kdWxhdG9yTGlzdC5maWx0ZXIoQT0+QS5pZCE9PWUpfX0sbHI9MWUzLzIwMDtmdW5jdGlvbiBNcyhlLEEsdCl7aWYoQS50cmFuc2Zvcm1BbW91bnQ9PT0wKXJldHVybiBBLmN1cnJlbnRWYWx1ZT0wLDA7bGV0IG49QS5wcmltYXJ5U291cmNlLmdldFZhbHVlKGUsdCkscz1BLnNlY29uZGFyeVNvdXJjZS5nZXRWYWx1ZShlLHQpLGE9QS50cmFuc2Zvcm1BbW91bnQ7QS5pc0VmZmVjdE1vZHVsYXRvciYmYTw9MWUzJiYoYSo9bHIsYT1NYXRoLm1pbihhLDFlMykpO2xldCByPW4qcyphO3JldHVybiBBLnRyYW5zZm9ybVR5cGU9PT0yJiYocj1NYXRoLmFicyhyKSksQS5pc0RlZmF1bHRSZXNvbmFudE1vZHVsYXRvciYmKHQucmVzb25hbmNlT2Zmc2V0PU1hdGgubWF4KDAsci8yKSksQS5jdXJyZW50VmFsdWU9cixyfWZ1bmN0aW9uIGRyKGUsQT0tMSx0PTApe2xldCBuPWUubW9kdWxhdG9ycyxzPWUuZ2VuZXJhdG9ycztpZih0aGlzLmdlbmVyYXRvck9mZnNldHNFbmFibGVkKXtzPW5ldyBJbnQxNkFycmF5KHMpO2ZvcihsZXQgZz0wO2c8cy5sZW5ndGg7ZysrKXNbZ10rPXRoaXMuZ2VuZXJhdG9yT2Zmc2V0c1tnXX1sZXQgYT1lLm1vZHVsYXRlZEdlbmVyYXRvcnM7aWYoQT09PS0xKXthLnNldChzKSxuLmZvckVhY2goZz0+e2FbZy5kZXN0aW5hdGlvbl0rPU1zKHRoaXMubWlkaUNvbnRyb2xsZXJzLGcsZSl9KTtmb3IobGV0IGc9MDtnPGEubGVuZ3RoO2crKyl7bGV0IEI9eFtnXTtCJiYoYVtnXT1NYXRoLm1pbihCLm1heCxNYXRoLm1heChCLm1pbixhW2ddKSkpfWJlLnJlY2FsY3VsYXRlKGUpLF9lLnJlY2FsY3VsYXRlKGUpO3JldHVybn1sZXQgcj1uZXcgU2V0KFtpLmluaXRpYWxBdHRlbnVhdGlvbixpLmRlbGF5Vm9sRW52LGkuYXR0YWNrVm9sRW52LGkuaG9sZFZvbEVudixpLmRlY2F5Vm9sRW52LGkuc3VzdGFpblZvbEVudixpLnJlbGVhc2VWb2xFbnYsaS5rZXlOdW1Ub1ZvbEVudkhvbGQsaS5rZXlOdW1Ub1ZvbEVudkRlY2F5XSksST1uZXcgU2V0LG89ISFBO24uZm9yRWFjaChnPT57aWYoZy5wcmltYXJ5U291cmNlLmlzQ0M9PT1vJiZnLnByaW1hcnlTb3VyY2UuaW5kZXg9PT10fHxnLnNlY29uZGFyeVNvdXJjZS5pc0NDPT09byYmZy5zZWNvbmRhcnlTb3VyY2UuaW5kZXg9PT10KXtsZXQgQj1nLmRlc3RpbmF0aW9uO2lmKCFJLmhhcyhCKSl7YVtCXT1zW0JdLE1zKHRoaXMubWlkaUNvbnRyb2xsZXJzLGcsZSksbi5mb3JFYWNoKGg9PntoLmRlc3RpbmF0aW9uPT09QiYmKGFbQl0rPWguY3VycmVudFZhbHVlKX0pO2xldCBkPXhbQl07YVtCXT1NYXRoLm1heChkLm1pbixNYXRoLm1pbihhW0JdLGQubWF4KSksSS5hZGQoQil9fX0pLFsuLi5JXS5zb21lKGc9PnIuaGFzKGcpKSYmYmUucmVjYWxjdWxhdGUoZSksX2UucmVjYWxjdWxhdGUoZSl9dmFyIFFyPWNsYXNze21pZGlDb250cm9sbGVycz1uZXcgSW50MTZBcnJheShibik7bG9ja2VkQ29udHJvbGxlcnM9QXJyYXkoYm4pLmZpbGwoITEpO2N1c3RvbUNvbnRyb2xsZXJzPW5ldyBGbG9hdDMyQXJyYXkoZWEpO2NoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdD0wO2NoYW5uZWxPY3RhdmVUdW5pbmc9bmV3IEludDhBcnJheSgxMjgpO3N5c0V4TW9kdWxhdG9ycz1uZXcgaHI7ZHJ1bUNoYW5uZWw9ITE7cmFuZG9tUGFuPSExO2RhdGFFbnRyeVN0YXRlPVlBLklkbGU7cGF0Y2g9e2JhbmtNU0I6MCxiYW5rTFNCOjAscHJvZ3JhbTowLGlzR01HU0RydW06ITF9O3ByZXNldDtsb2NrUHJlc2V0PSExO2xvY2tlZFN5c3RlbT0iZ3MiO2xvY2tHU05SUE5QYXJhbXM9ITE7Y2hhbm5lbFZpYnJhdG89e2RlbGF5OjAsZGVwdGg6MCxyYXRlOjB9O3ZvaWNlcz1bXTtzdXN0YWluZWRWb2ljZXM9W107Y2hhbm5lbE51bWJlcjtzeW50aDtzeW50aFByb3BzO25vdGVPbj1Fci5iaW5kKHRoaXMpO25vdGVPZmY9QnIuYmluZCh0aGlzKTtwcm9ncmFtQ2hhbmdlPUNyLmJpbmQodGhpcyk7Y29udHJvbGxlckNoYW5nZT1Jci5iaW5kKHRoaXMpO3Jlc2V0Q29udHJvbGxlcnM9cG8uYmluZCh0aGlzKTtyZXNldFByZXNldD15by5iaW5kKHRoaXMpO3Jlc2V0Q29udHJvbGxlcnNSUDE1Q29tcGxpYW50PWtvLmJpbmQodGhpcyk7cmVzZXRQYXJhbWV0ZXJzPURvLmJpbmQodGhpcyk7ZGF0YUVudHJ5RmluZT1pci5iaW5kKHRoaXMpO2RhdGFFbnRyeUNvYXJzZT1hci5iaW5kKHRoaXMpO2NoYW5uZWxUdW5pbmdDZW50cz0wO2dlbmVyYXRvck9mZnNldHM9bmV3IEludDE2QXJyYXkoTW4pO2dlbmVyYXRvck9mZnNldHNFbmFibGVkPSExO2dlbmVyYXRvck92ZXJyaWRlcz1uZXcgSW50MTZBcnJheShNbik7Z2VuZXJhdG9yT3ZlcnJpZGVzRW5hYmxlZD0hMTtyZW5kZXJWb2ljZT1zci5iaW5kKHRoaXMpO3BhbkFuZE1peFZvaWNlPU9vLmJpbmQodGhpcyk7Y29tcHV0ZU1vZHVsYXRvcnM9ZHIuYmluZCh0aGlzKTtjb25zdHJ1Y3RvcihlLEEsdCxuKXt0aGlzLnN5bnRoPWUsdGhpcy5zeW50aFByb3BzPUEsdGhpcy5wcmVzZXQ9dCx0aGlzLmNoYW5uZWxOdW1iZXI9bix0aGlzLnJlc2V0R2VuZXJhdG9yT3ZlcnJpZGVzKCksdGhpcy5yZXNldEdlbmVyYXRvck9mZnNldHMoKX1faXNNdXRlZD0hMTtnZXQgaXNNdXRlZCgpe3JldHVybiB0aGlzLl9pc011dGVkfWdldCBob2xkUGVkYWwoKXtyZXR1cm4gdGhpcy5taWRpQ29udHJvbGxlcnNbUy5zdXN0YWluUGVkYWxdPj04MTkyfWdldCBjaGFubmVsU3lzdGVtKCl7cmV0dXJuIHRoaXMubG9ja1ByZXNldD90aGlzLmxvY2tlZFN5c3RlbTp0aGlzLnN5bnRoUHJvcHMubWFzdGVyUGFyYW1ldGVycy5taWRpU3lzdGVtfXRyYW5zcG9zZUNoYW5uZWwoZSxBPSExKXt0aGlzLmRydW1DaGFubmVsfHwoZSs9dGhpcy5zeW50aFByb3BzLm1hc3RlclBhcmFtZXRlcnMudHJhbnNwb3NpdGlvbik7bGV0IHQ9TWF0aC50cnVuYyhlKSxuPXRoaXMuY2hhbm5lbFRyYW5zcG9zZUtleVNoaWZ0K3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmVdLzEwMDt0aGlzLmRydW1DaGFubmVsJiYhQXx8ZT09PW58fCh0IT09dGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQmJnRoaXMuc3RvcEFsbE5vdGVzKCksdGhpcy5jaGFubmVsVHJhbnNwb3NlS2V5U2hpZnQ9dCx0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmUsKGUtdCkqMTAwKSx0aGlzLnNlbmRDaGFubmVsUHJvcGVydHkoKSl9c2V0T2N0YXZlVHVuaW5nKGUpe2lmKGUubGVuZ3RoIT09MTIpdGhyb3cgbmV3IEVycm9yKCJUdW5pbmcgaXMgbm90IHRoZSBsZW5ndGggb2YgMTIuIik7dGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nPW5ldyBJbnQ4QXJyYXkoMTI4KTtmb3IobGV0IEE9MDtBPDEyODtBKyspdGhpcy5jaGFubmVsT2N0YXZlVHVuaW5nW0FdPWVbQSUxMl19c2V0TW9kdWxhdGlvbkRlcHRoKGUpe2U9TWF0aC5yb3VuZChlKSxwKGAlY0NoYW5uZWwgJHt0aGlzLmNoYW5uZWxOdW1iZXJ9IG1vZHVsYXRpb24gZGVwdGguIENlbnRzOiAlYyR7ZX1gLGMuaW5mbyxjLnZhbHVlKSx0aGlzLnNldEN1c3RvbUNvbnRyb2xsZXIoSUEubW9kdWxhdGlvbk11bHRpcGxpZXIsZS81MCl9c2V0VHVuaW5nKGUsQT0hMCl7ZT1NYXRoLnJvdW5kKGUpLHRoaXMuc2V0Q3VzdG9tQ29udHJvbGxlcihJQS5jaGFubmVsVHVuaW5nLGUpLEEmJnAoYCVjRmluZSB0dW5pbmcgZm9yICVjJHt0aGlzLmNoYW5uZWxOdW1iZXJ9JWMgaXMgbm93IHNldCB0byAlYyR7ZX0lYyBjZW50cy5gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMudmFsdWUsYy5pbmZvKX1waXRjaFdoZWVsKGUpe3RoaXMubG9ja2VkQ29udHJvbGxlcnNbbUErai5waXRjaFdoZWVsXXx8KHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoInBpdGNoV2hlZWwiLHtjaGFubmVsOnRoaXMuY2hhbm5lbE51bWJlcixwaXRjaDplfSksdGhpcy5taWRpQ29udHJvbGxlcnNbbUErai5waXRjaFdoZWVsXT1lLHRoaXMudm9pY2VzLmZvckVhY2goQT0+dGhpcy5jb21wdXRlTW9kdWxhdG9ycyhBLDAsai5waXRjaFdoZWVsKSksdGhpcy5zZW5kQ2hhbm5lbFByb3BlcnR5KCkpfWNoYW5uZWxQcmVzc3VyZShlKXt0aGlzLm1pZGlDb250cm9sbGVyc1ttQStqLmNoYW5uZWxQcmVzc3VyZV09ZTw8Nyx0aGlzLnVwZGF0ZUNoYW5uZWxUdW5pbmcoKSx0aGlzLnZvaWNlcy5mb3JFYWNoKEE9PnRoaXMuY29tcHV0ZU1vZHVsYXRvcnMoQSwwLGouY2hhbm5lbFByZXNzdXJlKSksdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgiY2hhbm5lbFByZXNzdXJlIix7Y2hhbm5lbDp0aGlzLmNoYW5uZWxOdW1iZXIscHJlc3N1cmU6ZX0pfXBvbHlQcmVzc3VyZShlLEEpe3RoaXMudm9pY2VzLmZvckVhY2godD0+e3QubWlkaU5vdGU9PT1lJiYodC5wcmVzc3VyZT1BLHRoaXMuY29tcHV0ZU1vZHVsYXRvcnModCwwLGoucG9seVByZXNzdXJlKSl9KSx0aGlzLnN5bnRoUHJvcHMuY2FsbEV2ZW50KCJwb2x5UHJlc3N1cmUiLHtjaGFubmVsOnRoaXMuY2hhbm5lbE51bWJlcixtaWRpTm90ZTplLHByZXNzdXJlOkF9KX1zZXRDdXN0b21Db250cm9sbGVyKGUsQSl7dGhpcy5jdXN0b21Db250cm9sbGVyc1tlXT1BLHRoaXMudXBkYXRlQ2hhbm5lbFR1bmluZygpfXVwZGF0ZUNoYW5uZWxUdW5pbmcoKXt0aGlzLmNoYW5uZWxUdW5pbmdDZW50cz10aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUdW5pbmddK3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEuY2hhbm5lbFRyYW5zcG9zZUZpbmVdK3RoaXMuY3VzdG9tQ29udHJvbGxlcnNbSUEubWFzdGVyVHVuaW5nXSt0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUdW5pbmdTZW1pdG9uZXNdKjEwMH1yZW5kZXJBdWRpbyhlLEEsdCxuLHMsYSxyLEkpe3RoaXMudm9pY2VzPXRoaXMudm9pY2VzLmZpbHRlcihvPT4hdGhpcy5yZW5kZXJWb2ljZShvLHRoaXMuc3ludGguY3VycmVudFN5bnRoVGltZSxlLEEsdCxuLHMsYSxyLEkpKX1zZXRQcmVzZXRMb2NrKGUpe3RoaXMubG9ja1ByZXNldCE9PWUmJih0aGlzLmxvY2tQcmVzZXQ9ZSxlJiYodGhpcy5sb2NrZWRTeXN0ZW09dGhpcy5zeW50aFByb3BzLm1hc3RlclBhcmFtZXRlcnMubWlkaVN5c3RlbSkpfXNldERydW1zKGUpe2lmKGZBLmlzU3lzdGVtWEcodGhpcy5jaGFubmVsU3lzdGVtKSlpZihlKXRoaXMuc2V0QmFua01TQihmQS5nZXREcnVtQmFuayh0aGlzLmNoYW5uZWxTeXN0ZW0pKSx0aGlzLnNldEJhbmtMU0IoMCk7ZWxzZXtpZih0aGlzLmNoYW5uZWxOdW1iZXIlMTY9PT1TZSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkaXNhYmxlIGRydW1zIG9uIGNoYW5uZWwgJHt0aGlzLmNoYW5uZWxOdW1iZXJ9IGZvciBYRy5gKTt0aGlzLnNldEJhbmtNU0IoMCksdGhpcy5zZXRCYW5rTFNCKDApfWVsc2UgdGhpcy5zZXRHU0RydW1zKGUpO3RoaXMuc2V0RHJ1bUZsYWcoZSksdGhpcy5wcm9ncmFtQ2hhbmdlKHRoaXMucGF0Y2gucHJvZ3JhbSl9c2V0UGF0Y2goZSl7dGhpcy5zZXRCYW5rTVNCKGUuYmFua01TQiksdGhpcy5zZXRCYW5rTFNCKGUuYmFua0xTQiksdGhpcy5zZXRHU0RydW1zKGUuaXNHTUdTRHJ1bSksdGhpcy5wcm9ncmFtQ2hhbmdlKGUucHJvZ3JhbSl9c2V0R1NEcnVtcyhlKXtlIT09dGhpcy5wYXRjaC5pc0dNR1NEcnVtJiYodGhpcy5zZXRCYW5rTFNCKDApLHRoaXMuc2V0QmFua01TQigwKSx0aGlzLnBhdGNoLmlzR01HU0RydW09ZSl9c2V0VmlicmF0byhlLEEsdCl7dGhpcy5sb2NrR1NOUlBOUGFyYW1zfHwodGhpcy5jaGFubmVsVmlicmF0by5yYXRlPUEsdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT10LHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg9ZSl9ZGlzYWJsZUFuZExvY2tHU05SUE4oKXt0aGlzLmxvY2tHU05SUE5QYXJhbXM9ITAsdGhpcy5jaGFubmVsVmlicmF0by5yYXRlPTAsdGhpcy5jaGFubmVsVmlicmF0by5kZWxheT0wLHRoaXMuY2hhbm5lbFZpYnJhdG8uZGVwdGg9MH1yZXNldEdlbmVyYXRvck92ZXJyaWRlcygpe3RoaXMuZ2VuZXJhdG9yT3ZlcnJpZGVzLmZpbGwoVnMpLHRoaXMuZ2VuZXJhdG9yT3ZlcnJpZGVzRW5hYmxlZD0hMX1zZXRHZW5lcmF0b3JPdmVycmlkZShlLEEsdD0hMSl7dGhpcy5nZW5lcmF0b3JPdmVycmlkZXNbZV09QSx0aGlzLmdlbmVyYXRvck92ZXJyaWRlc0VuYWJsZWQ9ITAsdCYmdGhpcy52b2ljZXMuZm9yRWFjaChuPT57bi5nZW5lcmF0b3JzW2VdPUEsdGhpcy5jb21wdXRlTW9kdWxhdG9ycyhuKX0pfXJlc2V0R2VuZXJhdG9yT2Zmc2V0cygpe3RoaXMuZ2VuZXJhdG9yT2Zmc2V0cy5maWxsKDApLHRoaXMuZ2VuZXJhdG9yT2Zmc2V0c0VuYWJsZWQ9ITF9c2V0R2VuZXJhdG9yT2Zmc2V0KGUsQSl7dGhpcy5nZW5lcmF0b3JPZmZzZXRzW2VdPUEqeFtlXS5ucnBuLHRoaXMuZ2VuZXJhdG9yT2Zmc2V0c0VuYWJsZWQ9ITAsdGhpcy52b2ljZXMuZm9yRWFjaCh0PT57dGhpcy5jb21wdXRlTW9kdWxhdG9ycyh0KX0pfWtpbGxOb3RlKGUsQT0tMTJlMyl7ZSs9dGhpcy5jdXN0b21Db250cm9sbGVyc1tJQS5jaGFubmVsS2V5U2hpZnRdLHRoaXMudm9pY2VzLmZvckVhY2godD0+e3QucmVhbEtleT09PWUmJih0Lm1vZHVsYXRlZEdlbmVyYXRvcnNbaS5yZWxlYXNlVm9sRW52XT1BLHQucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpKX0pfXN0b3BBbGxOb3RlcyhlPSExKXtlPyh0aGlzLnZvaWNlcy5sZW5ndGg9MCx0aGlzLnN1c3RhaW5lZFZvaWNlcy5sZW5ndGg9MCx0aGlzLnNlbmRDaGFubmVsUHJvcGVydHkoKSk6KHRoaXMudm9pY2VzLmZvckVhY2goQT0+e0EuaXNJblJlbGVhc2V8fEEucmVsZWFzZSh0aGlzLnN5bnRoLmN1cnJlbnRTeW50aFRpbWUpfSksdGhpcy5zdXN0YWluZWRWb2ljZXMuZm9yRWFjaChBPT57QS5yZWxlYXNlKHRoaXMuc3ludGguY3VycmVudFN5bnRoVGltZSl9KSksdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgic3RvcEFsbCIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGZvcmNlOmV9KX1tdXRlQ2hhbm5lbChlKXtlJiZ0aGlzLnN0b3BBbGxOb3RlcyghMCksdGhpcy5faXNNdXRlZD1lLHRoaXMuc2VuZENoYW5uZWxQcm9wZXJ0eSgpLHRoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoIm11dGVDaGFubmVsIix7Y2hhbm5lbDp0aGlzLmNoYW5uZWxOdW1iZXIsaXNNdXRlZDplfSl9c2VuZENoYW5uZWxQcm9wZXJ0eSgpe2lmKCF0aGlzLnN5bnRoLmVuYWJsZUV2ZW50U3lzdGVtKXJldHVybjtsZXQgZT17dm9pY2VzQW1vdW50OnRoaXMudm9pY2VzLmxlbmd0aCxwaXRjaFdoZWVsOnRoaXMubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbF0scGl0Y2hXaGVlbFJhbmdlOnRoaXMubWlkaUNvbnRyb2xsZXJzW21BK2oucGl0Y2hXaGVlbFJhbmdlXS8xMjgsaXNNdXRlZDp0aGlzLmlzTXV0ZWQsdHJhbnNwb3NpdGlvbjp0aGlzLmNoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdCt0aGlzLmN1c3RvbUNvbnRyb2xsZXJzW0lBLmNoYW5uZWxUcmFuc3Bvc2VGaW5lXS8xMDAsaXNEcnVtOnRoaXMuZHJ1bUNoYW5uZWx9O3RoaXMuc3ludGhQcm9wcy5jYWxsRXZlbnQoImNoYW5uZWxQcm9wZXJ0eUNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLHByb3BlcnR5OmV9KX1zZXRCYW5rTVNCKGUpe3RoaXMubG9ja1ByZXNldHx8KHRoaXMucGF0Y2guYmFua01TQj1lKX1zZXRCYW5rTFNCKGUpe3RoaXMubG9ja1ByZXNldHx8KHRoaXMucGF0Y2guYmFua0xTQj1lKX1zZXREcnVtRmxhZyhlKXt0aGlzLmxvY2tQcmVzZXR8fCF0aGlzLnByZXNldHx8dGhpcy5kcnVtQ2hhbm5lbCE9PWUmJihlPyh0aGlzLmNoYW5uZWxUcmFuc3Bvc2VLZXlTaGlmdD0wLHRoaXMuZHJ1bUNoYW5uZWw9ITApOnRoaXMuZHJ1bUNoYW5uZWw9ITEsdGhpcy5zeW50aFByb3BzLmNhbGxFdmVudCgiZHJ1bUNoYW5nZSIse2NoYW5uZWw6dGhpcy5jaGFubmVsTnVtYmVyLGlzRHJ1bUNoYW5uZWw6dGhpcy5kcnVtQ2hhbm5lbH0pKX19LHluPTIwO2FzeW5jIGZ1bmN0aW9uIHVyKGUsQSx0LG4scyxhLHIpe2xldCBJPTAsbz0wLGc9W107Zm9yKGxldCBoIG9mIGUuc2FtcGxlcyl7biYmYSYmYXdhaXQgaC5jb21wcmVzc1NhbXBsZShhKSxzJiZoLnNldEF1ZGlvRGF0YShoLmdldEF1ZGlvRGF0YSgpLGguc2FtcGxlUmF0ZSk7bGV0IEM9aC5nZXRSYXdEYXRhKCEwKTtJKyssYXdhaXQgcj8uKGgubmFtZSxJLGUuc2FtcGxlcy5sZW5ndGgpLHAoYCVjRW5jb2RlZCBzYW1wbGUgJWMke0l9LiAke2gubmFtZX0lYyBvZiAlYyR7ZS5zYW1wbGVzLmxlbmd0aH0lYy4gQ29tcHJlc3NlZDogJWMke2guaXNDb21wcmVzc2VkfSVjLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxoLmlzQ29tcHJlc3NlZD9jLnJlY29nbml6ZWQ6Yy51bnJlY29nbml6ZWQsYy5pbmZvKSxvKz1DLmxlbmd0aCsoaC5pc0NvbXByZXNzZWQ/MDo5MiksZy5wdXNoKEMpfW8lMiE9PTAmJm8rKztsZXQgQj1uZXcgWShvK3luKTtrQShCLCJMSVNUIiksaHQoQixvK3luLTgsNCksa0EoQiwic2R0YSIpLGtBKEIsInNtcGwiKSxodChCLG8sNCk7bGV0IGQ9MDtyZXR1cm4gZS5zYW1wbGVzLmZvckVhY2goKGgsQyk9PntsZXQgUT1nW0NdO0Iuc2V0KFEsZCt5bik7bGV0IG0seTtoLmlzQ29tcHJlc3NlZD8obT1kLHk9bStRLmxlbmd0aCk6KG09ZC8yLHk9bStRLmxlbmd0aC8yLGQrPTkyKSxkKz1RLmxlbmd0aCxBLnB1c2gobSksdC5wdXNoKHkpfSksQn12YXIgZnI9NDhlMyxadD1jbGFzc3tuYW1lO3NhbXBsZVJhdGU7b3JpZ2luYWxLZXk7cGl0Y2hDb3JyZWN0aW9uO2xpbmtlZFNhbXBsZTtzYW1wbGVUeXBlO2xvb3BTdGFydDtsb29wRW5kO2xpbmtlZFRvPVtdO2RhdGFPdmVycmlkZGVuPSEwO2NvbXByZXNzZWREYXRhO2F1ZGlvRGF0YTtjb25zdHJ1Y3RvcihlLEEsdCxuLHMsYSxyKXt0aGlzLm5hbWU9ZSx0aGlzLnNhbXBsZVJhdGU9QSx0aGlzLm9yaWdpbmFsS2V5PXQsdGhpcy5waXRjaENvcnJlY3Rpb249bix0aGlzLmxvb3BTdGFydD1hLHRoaXMubG9vcEVuZD1yLHRoaXMuc2FtcGxlVHlwZT1zfWdldCBpc0NvbXByZXNzZWQoKXtyZXR1cm4gdGhpcy5jb21wcmVzc2VkRGF0YSE9PXZvaWQgMH1nZXQgaXNMaW5rZWQoKXtyZXR1cm4gdGhpcy5zYW1wbGVUeXBlPT09d0EucmlnaHRTYW1wbGV8fHRoaXMuc2FtcGxlVHlwZT09PXdBLmxlZnRTYW1wbGV8fHRoaXMuc2FtcGxlVHlwZT09PXdBLmxpbmtlZFNhbXBsZX1nZXQgdXNlQ291bnQoKXtyZXR1cm4gdGhpcy5saW5rZWRUby5sZW5ndGh9Z2V0UmF3RGF0YShlKXtyZXR1cm4gdGhpcy5jb21wcmVzc2VkRGF0YSYmZSYmIXRoaXMuZGF0YU92ZXJyaWRkZW4/dGhpcy5jb21wcmVzc2VkRGF0YTp0aGlzLmVuY29kZVMxNkxFKCl9cmVzYW1wbGVEYXRhKGUpe2xldCBBPXRoaXMuZ2V0QXVkaW9EYXRhKCksdD1lL3RoaXMuc2FtcGxlUmF0ZSxuPW5ldyBGbG9hdDMyQXJyYXkoTWF0aC5mbG9vcihBLmxlbmd0aCp0KSk7Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspbltzXT1BW01hdGguZmxvb3IocyooMS90KSldO0E9bix0aGlzLnNhbXBsZVJhdGU9ZSx0aGlzLmxvb3BTdGFydD1NYXRoLmZsb29yKHRoaXMubG9vcFN0YXJ0KnQpLHRoaXMubG9vcEVuZD1NYXRoLmZsb29yKHRoaXMubG9vcEVuZCp0KSx0aGlzLmF1ZGlvRGF0YT1BfWFzeW5jIGNvbXByZXNzU2FtcGxlKGUpe2lmKCF0aGlzLmlzQ29tcHJlc3NlZCl0cnl7bGV0IEE9dGhpcy5nZXRBdWRpb0RhdGEoKTsodGhpcy5zYW1wbGVSYXRlPDhlM3x8dGhpcy5zYW1wbGVSYXRlPjk2ZTMpJiYodGhpcy5yZXNhbXBsZURhdGEoZnIpLEE9dGhpcy5nZXRBdWRpb0RhdGEoKSk7bGV0IHQ9YXdhaXQgZShBLHRoaXMuc2FtcGxlUmF0ZSk7dGhpcy5zZXRDb21wcmVzc2VkRGF0YSh0KX1jYXRjaChBKXtzQShgRmFpbGVkIHRvIGNvbXByZXNzICR7dGhpcy5uYW1lfS4gTGVhdmluZyBhcyB1bmNvbXByZXNzZWQhYCxBKSx0aGlzLmNvbXByZXNzZWREYXRhPXZvaWQgMH19c2V0U2FtcGxlVHlwZShlKXtpZih0aGlzLnNhbXBsZVR5cGU9ZSx0aGlzLmlzTGlua2VkfHwodGhpcy5saW5rZWRTYW1wbGUmJih0aGlzLmxpbmtlZFNhbXBsZS5saW5rZWRTYW1wbGU9dm9pZCAwLHRoaXMubGlua2VkU2FtcGxlLnNhbXBsZVR5cGU9ZSksdGhpcy5saW5rZWRTYW1wbGU9dm9pZCAwKSwoZSYzMjc2OCk+MCl0aHJvdyBuZXcgRXJyb3IoIlJPTSBzYW1wbGVzIGFyZSBub3Qgc3VwcG9ydGVkLiIpfXVubGlua1NhbXBsZSgpe3RoaXMuc2V0U2FtcGxlVHlwZSh3QS5tb25vU2FtcGxlKX1zZXRMaW5rZWRTYW1wbGUoZSxBKXtpZihlLmxpbmtlZFNhbXBsZSl0aHJvdyBuZXcgRXJyb3IoYCR7ZS5uYW1lfSBpcyBsaW5rZWQgdHAgJHtlLmxpbmtlZFNhbXBsZS5uYW1lfS4gVW5saW5rIGl0IGZpcnN0LmApO2lmKHRoaXMubGlua2VkU2FtcGxlPWUsZS5saW5rZWRTYW1wbGU9dGhpcyxBPT09d0EubGVmdFNhbXBsZSl0aGlzLnNldFNhbXBsZVR5cGUod0EubGVmdFNhbXBsZSksZS5zZXRTYW1wbGVUeXBlKHdBLnJpZ2h0U2FtcGxlKTtlbHNlIGlmKEE9PT13QS5yaWdodFNhbXBsZSl0aGlzLnNldFNhbXBsZVR5cGUod0EucmlnaHRTYW1wbGUpLGUuc2V0U2FtcGxlVHlwZSh3QS5sZWZ0U2FtcGxlKTtlbHNlIGlmKEE9PT13QS5saW5rZWRTYW1wbGUpdGhpcy5zZXRTYW1wbGVUeXBlKHdBLmxpbmtlZFNhbXBsZSksZS5zZXRTYW1wbGVUeXBlKHdBLmxpbmtlZFNhbXBsZSk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2FtcGxlIHR5cGU6ICIrQSl9bGlua1RvKGUpe3RoaXMubGlua2VkVG8ucHVzaChlKX11bmxpbmtGcm9tKGUpe2xldCBBPXRoaXMubGlua2VkVG8uaW5kZXhPZihlKTtpZihBPDApe3NBKGBDYW5ub3QgdW5saW5rICR7ZS5uYW1lfSBmcm9tICR7dGhpcy5uYW1lfTogbm90IGxpbmtlZC5gKTtyZXR1cm59dGhpcy5saW5rZWRUby5zcGxpY2UoQSwxKX1nZXRBdWRpb0RhdGEoKXtpZih0aGlzLmF1ZGlvRGF0YSlyZXR1cm4gdGhpcy5hdWRpb0RhdGE7aWYodGhpcy5pc0NvbXByZXNzZWQpcmV0dXJuIHRoaXMuYXVkaW9EYXRhPXRoaXMuZGVjb2RlVm9yYmlzKCksdGhpcy5hdWRpb0RhdGE7dGhyb3cgbmV3IEVycm9yKCJTYW1wbGUgZGF0YSBpcyB1bmRlZmluZWQgZm9yIGEgQmFzaWNTYW1wbGUgaW5zdGFuY2UuIil9c2V0QXVkaW9EYXRhKGUsQSl7dGhpcy5hdWRpb0RhdGE9ZSx0aGlzLnNhbXBsZVJhdGU9QSx0aGlzLmRhdGFPdmVycmlkZGVuPSEwLHRoaXMuY29tcHJlc3NlZERhdGE9dm9pZCAwfXNldENvbXByZXNzZWREYXRhKGUpe3RoaXMuYXVkaW9EYXRhPXZvaWQgMCx0aGlzLmNvbXByZXNzZWREYXRhPWUsdGhpcy5kYXRhT3ZlcnJpZGRlbj0hMX1lbmNvZGVTMTZMRSgpe2xldCBlPXRoaXMuZ2V0QXVkaW9EYXRhKCksQT1uZXcgSW50MTZBcnJheShlLmxlbmd0aCksdD1lLmxlbmd0aDtmb3IobGV0IG49MDtuPHQ7bisrKXtsZXQgcz1lW25dKjMyNzY4O3M+MzI3Njc/cz0zMjc2NzpzPC0zMjc2OCYmKHM9LTMyNzY4KSxBW25dPXN9cmV0dXJuIG5ldyBZKEEuYnVmZmVyKX1kZWNvZGVWb3JiaXMoKXtpZih0aGlzLmF1ZGlvRGF0YSlyZXR1cm4gdGhpcy5hdWRpb0RhdGE7aWYoIXRoaXMuY29tcHJlc3NlZERhdGEpdGhyb3cgbmV3IEVycm9yKCJDb21wcmVzc2VkIGRhdGEgaXMgbWlzc2luZy4iKTt0cnl7bGV0IEE9T3QuZGVjb2RlKHRoaXMuY29tcHJlc3NlZERhdGEpLmRhdGFbMF07aWYoQT09PXZvaWQgMClyZXR1cm4gc0EoYEVycm9yIGRlY29kaW5nIHNhbXBsZSAke3RoaXMubmFtZX06IFZvcmJpcyBkZWNvZGUgcmV0dXJuZWQgdW5kZWZpbmVkLmApLG5ldyBGbG9hdDMyQXJyYXkoMCk7Zm9yKGxldCB0PTA7dDxBLmxlbmd0aDt0KyspQVt0XT1NYXRoLm1heCgtMSxNYXRoLm1pbihBW3RdLC45OTk5Njk0ODI0MjE4NzUpKTtyZXR1cm4gQX1jYXRjaChlKXtyZXR1cm4gc0EoYEVycm9yIGRlY29kaW5nIHNhbXBsZSAke3RoaXMubmFtZX06ICR7ZX1gKSxuZXcgRmxvYXQzMkFycmF5KHRoaXMubG9vcEVuZCsxKX19fSxtcj1jbGFzcyBleHRlbmRzIFp0e2NvbnN0cnVjdG9yKCl7c3VwZXIoIiIsNDQxMDAsNjAsMCx3QS5tb25vU2FtcGxlLDAsMCl9fSxWbj0xNixTcj1jbGFzcyBleHRlbmRzIFp0e2xpbmtlZFNhbXBsZUluZGV4O3MxNmxlRGF0YTtzdGFydEJ5dGVPZmZzZXQ7ZW5kQnl0ZU9mZnNldDtzYW1wbGVJRDtjb25zdHJ1Y3RvcihlLEEsdCxuLHMsYSxyLEksbyxnLEIsZCl7bGV0IGg9KGcmVm4pPjA7ZyY9flZuLHN1cGVyKGUsYSxyLEksZyxuLUEvMixzLUEvMiksdGhpcy5kYXRhT3ZlcnJpZGRlbj0hMSx0aGlzLm5hbWU9ZSx0aGlzLnN0YXJ0Qnl0ZU9mZnNldD1BLHRoaXMuZW5kQnl0ZU9mZnNldD10LHRoaXMuc2FtcGxlSUQ9ZDtsZXQgQz1CIGluc3RhbmNlb2YgWT9CLmN1cnJlbnRJbmRleDowO0IgaW5zdGFuY2VvZiBZP2g/KHRoaXMubG9vcFN0YXJ0Kz10aGlzLnN0YXJ0Qnl0ZU9mZnNldC8yLHRoaXMubG9vcEVuZCs9dGhpcy5zdGFydEJ5dGVPZmZzZXQvMix0aGlzLnNldENvbXByZXNzZWREYXRhKEIuc2xpY2UodGhpcy5zdGFydEJ5dGVPZmZzZXQvMitDLHRoaXMuZW5kQnl0ZU9mZnNldC8yK0MpKSk6dGhpcy5zMTZsZURhdGE9Qi5zbGljZShDK3RoaXMuc3RhcnRCeXRlT2Zmc2V0LEMrdGhpcy5lbmRCeXRlT2Zmc2V0KTp0aGlzLnNldEF1ZGlvRGF0YShCLnNsaWNlKHRoaXMuc3RhcnRCeXRlT2Zmc2V0LzIsdGhpcy5lbmRCeXRlT2Zmc2V0LzIpLGEpLHRoaXMubGlua2VkU2FtcGxlSW5kZXg9b31nZXRMaW5rZWRTYW1wbGUoZSl7aWYodGhpcy5saW5rZWRTYW1wbGV8fCF0aGlzLmlzTGlua2VkKXJldHVybjtsZXQgQT1lW3RoaXMubGlua2VkU2FtcGxlSW5kZXhdO0E/QS5saW5rZWRTYW1wbGU/KHAoYCVjSW52YWxpZCBsaW5rZWQgc2FtcGxlIGZvciAke3RoaXMubmFtZX06ICR7QS5uYW1lfSBpcyBhbHJlYWR5IGxpbmtlZCB0byAke0EubGlua2VkU2FtcGxlLm5hbWV9YCxjLndhcm4pLHRoaXMudW5saW5rU2FtcGxlKCkpOnRoaXMuc2V0TGlua2VkU2FtcGxlKEEsdGhpcy5zYW1wbGVUeXBlKToocChgJWNJbnZhbGlkIGxpbmtlZCBzYW1wbGUgZm9yICR7dGhpcy5uYW1lfS4gU2V0dGluZyB0byBtb25vLmAsYy53YXJuKSx0aGlzLnVubGlua1NhbXBsZSgpKX1nZXRBdWRpb0RhdGEoKXtpZih0aGlzLmF1ZGlvRGF0YSlyZXR1cm4gdGhpcy5hdWRpb0RhdGE7aWYodGhpcy5pc0NvbXByZXNzZWQpcmV0dXJuIHN1cGVyLmdldEF1ZGlvRGF0YSgpO2lmKCF0aGlzLnMxNmxlRGF0YSl0aHJvdyBjb25zb2xlLmVycm9yKHRoaXMpLG5ldyBFcnJvcigiVW5leHBlY3RlZCBsYWNrIG9mIGF1ZGlvIGRhdGEuIik7bGV0IGU9dGhpcy5lbmRCeXRlT2Zmc2V0LXRoaXMuc3RhcnRCeXRlT2Zmc2V0O2lmKGU8MSlyZXR1cm4gc0EoYEludmFsaWQgc2FtcGxlICR7dGhpcy5uYW1lfSEgSW52YWxpZCBsZW5ndGg6ICR7ZX1gKSxuZXcgRmxvYXQzMkFycmF5KDEpO2xldCBBPW5ldyBGbG9hdDMyQXJyYXkoZS8yKSx0PW5ldyBJbnQxNkFycmF5KHRoaXMuczE2bGVEYXRhLmJ1ZmZlcik7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspQVtuXT10W25dLzMyNzY4O3JldHVybiB0aGlzLmF1ZGlvRGF0YT1BLEF9Z2V0UmF3RGF0YShlKXtyZXR1cm4gdGhpcy5kYXRhT3ZlcnJpZGRlbnx8dGhpcy5jb21wcmVzc2VkRGF0YT9zdXBlci5nZXRSYXdEYXRhKGUpOnRoaXMuczE2bGVEYXRhPz9uZXcgVWludDhBcnJheSgwKX19O2Z1bmN0aW9uIGJzKGUsQSx0PSEwKXtsZXQgbj1bXSxzPTA7Zm9yKDtlLmRhdGEubGVuZ3RoPmUuZGF0YS5jdXJyZW50SW5kZXg7KXtsZXQgYT1wcihzLGUuZGF0YSxBKTtuLnB1c2goYSkscysrfXJldHVybiBuLnBvcCgpLHQmJm4uZm9yRWFjaChhPT5hLmdldExpbmtlZFNhbXBsZShuKSksbn1mdW5jdGlvbiBwcihlLEEsdCl7bGV0IG49aEEoQSwyMCkscz1OKEEsNCkqMixhPU4oQSw0KSoyLHI9TihBLDQpLEk9TihBLDQpLG89TihBLDQpLGc9QVtBLmN1cnJlbnRJbmRleCsrXTtnPjEyNyYmKGc9NjApO2xldCBCPXFhKEFbQS5jdXJyZW50SW5kZXgrK10pLGQ9TihBLDIpLGg9TihBLDIpO3JldHVybiBuZXcgU3IobixzLGEscixJLG8sZyxCLGQsaCx0LGUpfWZ1bmN0aW9uIHlyKGUsQSx0KXtsZXQgcz00NiooZS5zYW1wbGVzLmxlbmd0aCsxKSxhPW5ldyBZKHMpLHI9bmV3IFkocyksST0wO2Uuc2FtcGxlcy5mb3JFYWNoKChCLGQpPT57a0EoYSxCLm5hbWUuc3Vic3RyaW5nKDAsMjApLDIwKSxrQShyLEIubmFtZS5zdWJzdHJpbmcoMjApLDIwKTtsZXQgaD1BW2RdO2dBKGEsaCksci5jdXJyZW50SW5kZXgrPTQ7bGV0IEM9dFtkXTtnQShhLEMpLHIuY3VycmVudEluZGV4Kz00O2xldCBRPUIubG9vcFN0YXJ0K2gsbT1CLmxvb3BFbmQraDtCLmlzQ29tcHJlc3NlZCYmKFEtPWgsbS09aCksZ0EoYSxRKSxnQShhLG0pLGdBKGEsQi5zYW1wbGVSYXRlKSxhW2EuY3VycmVudEluZGV4KytdPUIub3JpZ2luYWxLZXksYVthLmN1cnJlbnRJbmRleCsrXT1CLnBpdGNoQ29ycmVjdGlvbixyLmN1cnJlbnRJbmRleCs9MTQ7bGV0IHk9Qi5saW5rZWRTYW1wbGU/ZS5zYW1wbGVzLmluZGV4T2YoQi5saW5rZWRTYW1wbGUpOjA7SihhLE1hdGgubWF4KDAseSkmNjU1MzUpLEoocixNYXRoLm1heCgwLHkpPj4xNiksST1NYXRoLm1heChJLHkpO2xldCBGPUIuc2FtcGxlVHlwZTtCLmlzQ29tcHJlc3NlZCYmKEZ8PVZuKSxKKGEsRiksci5jdXJyZW50SW5kZXgrPTJ9KSxrQShhLCJFT1MiLDQ2KSxrQShyLCJFT1MiLDQ2KTtsZXQgbz1jQSgic2hkciIsYSksZz1jQSgic2hkciIscik7cmV0dXJue3BkdGE6byx4ZHRhOmd9fWZ1bmN0aW9uIHZzKGUsQT0hMSl7bGV0IHQ9QT9lLnByZXNldHM6ZS5pbnN0cnVtZW50cyxuPUE/InBnZW4iOiJpZ2VuIixzPUE/InBtb2QiOiJpbW9kIixhPUE/InBiYWciOiJpYmFnIixyPUE/InBoZHIiOiJpbnN0IixJPUE/ZGE6bGEsbz10Lm1hcChrPT4oayBpbnN0YW5jZW9mIHBlLGsuZ2V0U2l6ZSgpKSksZz1vLnJlZHVjZSgoayxEKT0+aytELmdlbiwwKStDdCxCPW5ldyBZKGcpLGQ9by5yZWR1Y2UoKGssRCk9PmsrRC5tb2QsMCkrbWUsaD1uZXcgWShkKSxDPW8ucmVkdWNlKChrLEQpPT5rK0QuYmFnLDApK0p0LFE9e3BkdGE6bmV3IFkoQykseGR0YTpuZXcgWShDKX0sbT1vLnJlZHVjZSgoayxEKT0+RC5oZHIraywwKStJLHk9e3BkdGE6bmV3IFkobSkseGR0YTpuZXcgWShtKX0sRj17Z2VuOjAsYmFnOjAsbW9kOjAsaGRyOjB9O3JldHVybiB0LmZvckVhY2goaz0+e2sgaW5zdGFuY2VvZiBwZSxrLndyaXRlKEIsaCxRLHksRixlKX0pLEE/KGtBKHkucGR0YSwiRU9QIiwyMCkseS5wZHRhLmN1cnJlbnRJbmRleCs9NCxKKHkucGR0YSxGLmhkciY2NTUzNSkseS5wZHRhLmN1cnJlbnRJbmRleCs9MTIsa0EoeS54ZHRhLCIiLDIwKSx5LnhkdGEuY3VycmVudEluZGV4Kz00LEooeS54ZHRhLEYuaGRyPj4xNikseS54ZHRhLmN1cnJlbnRJbmRleCs9MTIpOihrQSh5LnBkdGEsIkVPSSIsMjApLGtBKHkueGR0YSwiIiwyMCksSih5LnBkdGEsRi5oZHImNjU1MzUpLEooeS54ZHRhLEYuaGRyPj4xNikpLEooUS5wZHRhLEYuZ2VuJjY1NTM1KSxKKFEueGR0YSxGLmdlbj4+MTYpLEooUS5wZHRhLEYubW9kJjY1NTM1KSxKKFEueGR0YSxGLm1vZD4+MTYpLHt3cml0ZVhkdGE6TWF0aC5tYXgoZy9DdCxkL21lLEMvSnQsbS9JKT42NTUzNSxnZW46e3BkdGE6Y0EobixCKSx4ZHRhOmNBKHMsbmV3IFkoQ3QpKX0sbW9kOntwZHRhOmNBKHMsaCkseGR0YTpjQShzLG5ldyBZKG1lKSl9LGJhZzp7cGR0YTpjQShhLFEucGR0YSkseGR0YTpjQShhLFEueGR0YSl9LGhkcjp7cGR0YTpjQShyLHkucGR0YSkseGR0YTpjQShyLHkueGR0YSl9fX12YXIgWG49e2NvbXByZXNzOiExLGNvbXByZXNzaW9uRnVuY3Rpb246dm9pZCAwLHByb2dyZXNzRnVuY3Rpb246dm9pZCAwLHdyaXRlRGVmYXVsdE1vZHVsYXRvcnM6ITAsd3JpdGVFeHRlbmRlZExpbWl0czohMCxkZWNvbXByZXNzOiExfTthc3luYyBmdW5jdGlvbiBrcihlLEE9WG4pe2xldCB0PSRuKEEsWG4pO2lmKHQ/LmNvbXByZXNzKXtpZih0eXBlb2YgdD8uY29tcHJlc3Npb25GdW5jdGlvbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoIk5vIGNvbXByZXNzaW9uIGZ1bmN0aW9uIHN1cHBsaWVkIGJ1dCBjb21wcmVzc2lvbiBlbmFibGVkLiIpO2lmKHQ/LmRlY29tcHJlc3MpdGhyb3cgbmV3IEVycm9yKCJEZWNvbXByZXNzZWQgYW5kIGNvbXByZXNzZWQgYXQgdGhlIHNhbWUgdGltZS4iKX1iQSgiJWNTYXZpbmcgc291bmRiYW5rLi4uIixjLmluZm8pLHAoYCVjQ29tcHJlc3Npb246ICVjJHt0Py5jb21wcmVzc3x8ImZhbHNlIn0lY2AsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkKSxPQSgiJWNXcml0aW5nIElORk8uLi4iLGMuaW5mbyk7bGV0IG49W107ZS5zb3VuZEJhbmtJbmZvLnNvZnR3YXJlPSJTcGVzc2FTeW50aCIsKHQ/LmNvbXByZXNzfHxlLnNhbXBsZXMuc29tZShEPT5ELmlzQ29tcHJlc3NlZCkpJiYoZS5zb3VuZEJhbmtJbmZvLnZlcnNpb24ubWFqb3I9MyxlLnNvdW5kQmFua0luZm8udmVyc2lvbi5taW5vcj0wKSx0Py5kZWNvbXByZXNzJiYoZS5zb3VuZEJhbmtJbmZvLnZlcnNpb24ubWFqb3I9MixlLnNvdW5kQmFua0luZm8udmVyc2lvbi5taW5vcj00KTtsZXQgcz0oRCx2KT0+e24ucHVzaChjQShELG5lKHYsITAsITApKSl9LGE9bmV3IFkoNCk7aWYoSihhLGUuc291bmRCYW5rSW5mby52ZXJzaW9uLm1ham9yKSxKKGEsZS5zb3VuZEJhbmtJbmZvLnZlcnNpb24ubWlub3IpLG4ucHVzaChjQSgiaWZpbCIsYSkpLGUuc291bmRCYW5rSW5mby5yb21WZXJzaW9uKXtsZXQgRD1uZXcgWSg0KTtKKEQsZS5zb3VuZEJhbmtJbmZvLnJvbVZlcnNpb24ubWFqb3IpLEooRCxlLnNvdW5kQmFua0luZm8ucm9tVmVyc2lvbi5taW5vciksbi5wdXNoKGNBKCJpdmVyIixEKSl9bGV0IHI9KGUuc291bmRCYW5rSW5mbz8uY29tbWVudD8/IiIpKyhlLnNvdW5kQmFua0luZm8uc3ViamVjdD9gCiR7ZS5zb3VuZEJhbmtJbmZvLnN1YmplY3R9YDoiIik7Zm9yKGxldFtELHZdb2YgT2JqZWN0LmVudHJpZXMoZS5zb3VuZEJhbmtJbmZvKSl7bGV0IEw9RCxFPXY7aWYoRSlzd2l0Y2goTCl7Y2FzZSJuYW1lIjpzKCJJTkFNIixFKTticmVhaztjYXNlImNvbW1lbnQiOnMoIklDTVQiLHIpO2JyZWFrO2Nhc2UiY29weXJpZ2h0IjpzKCJJQ09QIixFKTticmVhaztjYXNlImNyZWF0aW9uRGF0ZSI6cygiSUNSRCIsRS50b0lTT1N0cmluZygpKTticmVhaztjYXNlImVuZ2luZWVyIjpzKCJJRU5HIixFKTticmVhaztjYXNlInByb2R1Y3QiOnMoIklQUkQiLEUpO2JyZWFrO2Nhc2Uicm9tSW5mbyI6cygiaXJvbSIsRSk7YnJlYWs7Y2FzZSJzb2Z0d2FyZSI6cygiSVNGVCIsRSk7YnJlYWs7Y2FzZSJzb3VuZEVuZ2luZSI6cygiaXNuZyIsRSk7YnJlYWs7Y2FzZSJzdWJqZWN0IjpicmVha319aWYoZS5kZWZhdWx0TW9kdWxhdG9ycy5zb21lKEQ9PkVhLmZpbmRJbmRleCh2PT5FQS5pc0lkZW50aWNhbCh2LEQsITApKT09PS0xKSYmdD8ud3JpdGVEZWZhdWx0TW9kdWxhdG9ycyl7bGV0IEQ9ZS5kZWZhdWx0TW9kdWxhdG9ycztwKGAlY1dyaXRpbmcgJWMke0QubGVuZ3RofSVjIGRlZmF1bHQgbW9kdWxhdG9ycy4uLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pO2xldCB2PW1lK0QubGVuZ3RoKm1lLEw9bmV3IFkodik7Zm9yKGxldCBFIG9mIEQpRS53cml0ZShMKTtodChMLDAsbWUpLG4ucHVzaChjQSgiRE1PRCIsTCkpfVooKSxwKCIlY1dyaXRpbmcgU0RUQS4uLiIsYy5pbmZvKTtsZXQgbz1bXSxnPVtdLEI9YXdhaXQgdXIoZSxvLGcsdC5jb21wcmVzcyx0LmRlY29tcHJlc3MsdD8uY29tcHJlc3Npb25GdW5jdGlvbix0Py5wcm9ncmVzc0Z1bmN0aW9uKTtwKCIlY1dyaXRpbmcgUERUQS4uLiIsYy5pbmZvKSxwKCIlY1dyaXRpbmcgU0hEUi4uLiIsYy5pbmZvKTtsZXQgZD15cihlLG8sZyk7T0EoIiVjV3JpdGluZyBpbnN0cnVtZW50cy4uLiIsYy5pbmZvKTtsZXQgaD12cyhlLCExKTtaKCksT0EoIiVjV3JpdGluZyBwcmVzZXRzLi4uIixjLmluZm8pO2xldCBDPXZzKGUsITApO1ooKTtsZXQgUT1bQy5oZHIsQy5iYWcsQy5tb2QsQy5nZW4saC5oZHIsaC5iYWcsaC5tb2QsaC5nZW4sZF0sbT12QSgicGR0YSIsUS5tYXAoRD0+RC5wZHRhKSwhMCk7aWYodC53cml0ZUV4dGVuZGVkTGltaXRzJiYoaC53cml0ZVhkdGF8fEMud3JpdGVYZHRhfHxlLnByZXNldHMuc29tZShEPT5ELm5hbWUubGVuZ3RoPjIwKXx8ZS5pbnN0cnVtZW50cy5zb21lKEQ9PkQubmFtZS5sZW5ndGg+MjApfHxlLnNhbXBsZXMuc29tZShEPT5ELm5hbWUubGVuZ3RoPjIwKSkpe3AoIiVjV3JpdGluZyB0aGUgeGR0YSBjaHVuayBhcyB3cml0ZUV4ZW5kZWRMaW1pdHMgaXMgZW5hYmxlZCBhbmQgYXQgbGVhc3Qgb25lIGNvbmRpdGlvbiB3YXMgbWV0LiIsYy5pbmZvLGMudmFsdWUpO2xldCBEPXZBKCJ4ZHRhIixRLm1hcCh2PT52LnhkdGEpLCEwKTtuLnB1c2goRCl9bGV0IEY9dkEoIklORk8iLG4sITApO3AoIiVjV3JpdGluZyB0aGUgb3V0cHV0IGZpbGUuLi4iLGMuaW5mbyk7bGV0IGs9dkEoIlJJRkYiLFtuZSgic2ZiayIpLEYsQixtXSk7cmV0dXJuIHAoYCVjU2F2ZWQgc3VjY2VzZnVsbHkhIEZpbmFsIGZpbGUgc2l6ZTogJWMke2subGVuZ3RofWAsYy5pbmZvLGMucmVjb2duaXplZCksWigpLGsuYnVmZmVyfXZhciBqZT1jbGFzc3tzdGF0aWMgdmVyaWZ5SGVhZGVyKGUsLi4uQSl7Zm9yKGxldCB0IG9mIEEpaWYoZS5oZWFkZXIudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKSlyZXR1cm47dGhpcy5wYXJzaW5nRXJyb3IoYEludmFsaWQgRExTIGNodW5rIGhlYWRlciEgRXhwZWN0ZWQgIiR7QS5qb2luKCIsIG9yICIpfSIgZ290ICIke2UuaGVhZGVyLnRvTG93ZXJDYXNlKCl9ImApfXN0YXRpYyB2ZXJpZnlUZXh0KGUsLi4uQSl7Zm9yKGxldCB0IG9mIEEpaWYoZS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpKXJldHVybjt0aGlzLnBhcnNpbmdFcnJvcihgRm91ckNDIGVycm9yOiBFeHBlY3RlZCAiJHtBLmpvaW4oIiwgb3IgIil9IiBnb3QgIiR7ZS50b0xvd2VyQ2FzZSgpfSJgKX1zdGF0aWMgcGFyc2luZ0Vycm9yKGUpe3Rocm93IFooKSxuZXcgRXJyb3IoYERMUyBwYXJzZSBlcnJvcjogJHtlfSBUaGUgZmlsZSBtYXkgYmUgY29ycnVwdGVkLmApfXN0YXRpYyB2ZXJpZnlBbmRSZWFkTGlzdChlLC4uLkEpe3RoaXMudmVyaWZ5SGVhZGVyKGUsIkxJU1QiKSxlLmRhdGEuY3VycmVudEluZGV4PTAsdGhpcy52ZXJpZnlUZXh0KGhBKGUuZGF0YSw0KSwuLi5BKTtsZXQgdD1bXTtmb3IoO2UuZGF0YS5sZW5ndGg+ZS5kYXRhLmN1cnJlbnRJbmRleDspdC5wdXNoKHJBKGUuZGF0YSkpO3JldHVybiB0fX0sZ3Q9MjAsa249MTYsemU9Y2xhc3MgQnQgZXh0ZW5kcyBqZXtnYWluPTA7dW5pdHlOb3RlPTYwO2ZpbmVUdW5lPTA7bG9vcHM9bmV3IEFycmF5O2Z1bE9wdGlvbnM9MjtzdGF0aWMgY29weUZyb20oQSl7bGV0IHQ9bmV3IEJ0O3JldHVybiB0LnVuaXR5Tm90ZT1BLnVuaXR5Tm90ZSx0LmdhaW49QS5nYWluLHQuZmluZVR1bmU9QS5maW5lVHVuZSx0Lmxvb3BzPUEubG9vcHMubWFwKG49Pih7Li4ubn0pKSx0LmZ1bE9wdGlvbnM9QS5mdWxPcHRpb25zLHR9c3RhdGljIHJlYWQoQSl7dGhpcy52ZXJpZnlIZWFkZXIoQSwid3NtcCIpO2xldCB0PW5ldyBCdCxuPU4oQS5kYXRhLDQpO2lmKG4hPT1ndCYmc0EoYFdzbXAgY2JTaXplIG1pc21hdGNoOiBnb3QgJHtufSwgZXhwZWN0ZWQgJHtndH0uYCksdC51bml0eU5vdGU9TihBLmRhdGEsMiksdC5maW5lVHVuZT1qbihBLmRhdGFbQS5kYXRhLmN1cnJlbnRJbmRleCsrXSxBLmRhdGFbQS5kYXRhLmN1cnJlbnRJbmRleCsrXSksdC5nYWluPU4oQS5kYXRhLDQpfDAsdC5mdWxPcHRpb25zPU4oQS5kYXRhLDQpLE4oQS5kYXRhLDQpIT09MCl7bGV0IGE9TihBLmRhdGEsNCk7YSE9PWtuJiZzQShgQ2JTaXplIGZvciBsb29wIGluIHdzbXAgbWlzbWF0Y2guIEV4cGVjdGVkICR7Z3R9LCBnb3QgJHthfS5gKTtsZXQgcj1OKEEuZGF0YSw0KSxJPU4oQS5kYXRhLDQpLG89TihBLmRhdGEsNCk7dC5sb29wcy5wdXNoKHtsb29wU3RhcnQ6SSxsb29wTGVuZ3RoOm8sbG9vcFR5cGU6cn0pfXJldHVybiB0fXN0YXRpYyBmcm9tU0ZTYW1wbGUoQSl7bGV0IHQ9bmV3IEJ0O3JldHVybiB0LnVuaXR5Tm90ZT1BLm9yaWdpbmFsS2V5LHQuZmluZVR1bmU9QS5waXRjaENvcnJlY3Rpb24sKEEubG9vcEVuZCE9PTB8fEEubG9vcFN0YXJ0IT09MCkmJnQubG9vcHMucHVzaCh7bG9vcFN0YXJ0OkEubG9vcFN0YXJ0LGxvb3BMZW5ndGg6QS5sb29wRW5kLUEubG9vcFN0YXJ0LGxvb3BUeXBlOnlzLmZvcndhcmR9KSx0fXN0YXRpYyBmcm9tU0Zab25lKEEpe2xldCB0PW5ldyBCdDt0LnVuaXR5Tm90ZT1BLmdldEdlbmVyYXRvcihpLm92ZXJyaWRpbmdSb290S2V5LEEuc2FtcGxlLm9yaWdpbmFsS2V5KSxBLmdldEdlbmVyYXRvcihpLnNjYWxlVHVuaW5nLDEwMCk9PT0wJiZBLmtleVJhbmdlLm1heC1BLmtleVJhbmdlLm1pbj09PTAmJih0LnVuaXR5Tm90ZT1BLmtleVJhbmdlLm1pbiksdC5maW5lVHVuZT1BLmZpbmVUdW5pbmcrQS5zYW1wbGUucGl0Y2hDb3JyZWN0aW9uO2xldCBuPUEuZ2V0R2VuZXJhdG9yKGkuaW5pdGlhbEF0dGVudWF0aW9uLDApKi40O3QuZ2Fpbj0tbjw8MTY7bGV0IHM9QS5nZXRHZW5lcmF0b3IoaS5zYW1wbGVNb2RlcywwKTtpZihzIT09MCl7bGV0IGE9QS5zYW1wbGUubG9vcFN0YXJ0K0EuZ2V0R2VuZXJhdG9yKGkuc3RhcnRsb29wQWRkcnNPZmZzZXQsMCkrQS5nZXRHZW5lcmF0b3IoaS5zdGFydGxvb3BBZGRyc0NvYXJzZU9mZnNldCwwKSozMjc2OCxyPUEuc2FtcGxlLmxvb3BFbmQrQS5nZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNPZmZzZXQsMCkrQS5nZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsMCkqMzI3NjgsSTtzd2l0Y2gocyl7Y2FzZSAxOmRlZmF1bHQ6ST0wO2JyZWFrO2Nhc2UgMzpJPTF9dC5sb29wcy5wdXNoKHtsb29wVHlwZTpJLGxvb3BTdGFydDphLGxvb3BMZW5ndGg6ci1hfSl9cmV0dXJuIHR9dG9TRlpvbmUoQSx0KXtsZXQgbj0wLHM9dGhpcy5sb29wc1swXTtzJiYobj1zLmxvb3BUeXBlPT09eXMubG9vcEFuZFJlbGVhc2U/MzoxKSxuIT09MCYmQS5zZXRHZW5lcmF0b3IoaS5zYW1wbGVNb2RlcyxuKTtsZXQgST0tKHRoaXMuZ2Fpbj4+MTYpLy40O2lmKEkhPT0wJiZBLnNldEdlbmVyYXRvcihpLmluaXRpYWxBdHRlbnVhdGlvbixJKSxBLmZpbmVUdW5pbmc9dGhpcy5maW5lVHVuZS10LnBpdGNoQ29ycmVjdGlvbix0aGlzLnVuaXR5Tm90ZSE9PXQub3JpZ2luYWxLZXkmJkEuc2V0R2VuZXJhdG9yKGkub3ZlcnJpZGluZ1Jvb3RLZXksdGhpcy51bml0eU5vdGUpLHMpe2xldCBvPXMubG9vcFN0YXJ0LXQubG9vcFN0YXJ0LEI9cy5sb29wU3RhcnQrcy5sb29wTGVuZ3RoLXQubG9vcEVuZDtpZihvIT09MCl7bGV0IGQ9byUzMjc2ODtBLnNldEdlbmVyYXRvcihpLnN0YXJ0bG9vcEFkZHJzT2Zmc2V0LGQpO2xldCBoPU1hdGgudHJ1bmMoby8zMjc2OCk7aCE9PTAmJkEuc2V0R2VuZXJhdG9yKGkuc3RhcnRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaCl9aWYoQiE9PTApe2xldCBkPUIlMzI3Njg7QS5zZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNPZmZzZXQsZCk7bGV0IGg9TWF0aC50cnVuYyhCLzMyNzY4KTtoIT09MCYmQS5zZXRHZW5lcmF0b3IoaS5lbmRsb29wQWRkcnNDb2Fyc2VPZmZzZXQsaCl9fX13cml0ZSgpe2xldCBBPW5ldyBZKGd0K3RoaXMubG9vcHMubGVuZ3RoKmtuKTtyZXR1cm4gZ0EoQSxndCksSihBLHRoaXMudW5pdHlOb3RlKSxKKEEsdGhpcy5maW5lVHVuZSksZ0EoQSx0aGlzLmdhaW4pLGdBKEEsdGhpcy5mdWxPcHRpb25zKSxnQShBLHRoaXMubG9vcHMubGVuZ3RoKSx0aGlzLmxvb3BzLmZvckVhY2godD0+e2dBKEEsa24pLGdBKEEsdC5sb29wVHlwZSksZ0EoQSx0Lmxvb3BTdGFydCksZ0EoQSx0Lmxvb3BMZW5ndGgpfSksY0EoIndzbXAiLEEpfX0sRG49e1BDTToxLEFMQVc6Nn07ZnVuY3Rpb24gRHIoZSxBKXtsZXQgdD1NYXRoLnBvdygyLEEqOC0xKSxuPU1hdGgucG93KDIsQSo4KSxzLGE9ITE7QT09PTE/KHM9MjU1LGE9ITApOnM9dDtsZXQgcj1lLmxlbmd0aC9BLEk9bmV3IEZsb2F0MzJBcnJheShyKTtpZihBPT09Mil7bGV0IG89bmV3IEludDE2QXJyYXkoZS5idWZmZXIpO2ZvcihsZXQgZz0wO2c8by5sZW5ndGg7ZysrKUlbZ109b1tnXS8zMjc2OH1lbHNlIGZvcihsZXQgbz0wO288SS5sZW5ndGg7bysrKXtsZXQgZz1OKGUsQSk7YT9JW29dPWcvcy0uNTooZz49dCYmKGctPW4pLElbb109Zy9zKX1yZXR1cm4gSX1mdW5jdGlvbiB3cihlLEEpe2xldCB0PWUubGVuZ3RoL0Esbj1uZXcgRmxvYXQzMkFycmF5KHQpO2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKXtsZXQgYT1OKGUsQSkscj1hXjg1O3ImPTEyNztsZXQgST1yPj40LG89ciYxNTtJPjAmJihvKz0xNiksbz0obzw8NCkrOCxJPjEmJihvPW88PEktMSk7bGV0IGc9YT4xMjc/bzotbztuW3NdPWcvMzI2Nzh9cmV0dXJuIG59dmFyIEZyPWNsYXNzIGV4dGVuZHMgWnR7d0Zvcm1hdFRhZztieXRlc1BlclNhbXBsZTtyYXdEYXRhO2NvbnN0cnVjdG9yKGUsQSx0LG4scyxhLHIsSSxvKXtzdXBlcihlLEEsdCxuLHdBLm1vbm9TYW1wbGUscyxhKSx0aGlzLmRhdGFPdmVycmlkZGVuPSExLHRoaXMucmF3RGF0YT1yLmRhdGEsdGhpcy53Rm9ybWF0VGFnPUksdGhpcy5ieXRlc1BlclNhbXBsZT1vfWdldEF1ZGlvRGF0YSgpe2lmKCF0aGlzLnJhd0RhdGEpcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMCk7aWYoIXRoaXMuYXVkaW9EYXRhKXtsZXQgZTtzd2l0Y2godGhpcy53Rm9ybWF0VGFnKXtkZWZhdWx0OnNBKGBGYWlsZWQgdG8gZGVjb2RlIHNhbXBsZS4gVW5rbm93biB3Rm9ybWF0VGFnOiAke3RoaXMud0Zvcm1hdFRhZ31gKSxlPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5yYXdEYXRhLmxlbmd0aC90aGlzLmJ5dGVzUGVyU2FtcGxlKTticmVhaztjYXNlIERuLlBDTTplPURyKHRoaXMucmF3RGF0YSx0aGlzLmJ5dGVzUGVyU2FtcGxlKTticmVhaztjYXNlIERuLkFMQVc6ZT13cih0aGlzLnJhd0RhdGEsdGhpcy5ieXRlc1BlclNhbXBsZSk7YnJlYWt9dGhpcy5zZXRBdWRpb0RhdGEoZSx0aGlzLnNhbXBsZVJhdGUpfXJldHVybiB0aGlzLmF1ZGlvRGF0YT8/bmV3IEZsb2F0MzJBcnJheSgwKX1nZXRSYXdEYXRhKGUpe3JldHVybiB0aGlzLmRhdGFPdmVycmlkZGVufHx0aGlzLmlzQ29tcHJlc3NlZD9zdXBlci5nZXRSYXdEYXRhKGUpOnRoaXMud0Zvcm1hdFRhZz09PURuLlBDTSYmdGhpcy5ieXRlc1BlclNhbXBsZT09PTI/dGhpcy5yYXdEYXRhOnRoaXMuZW5jb2RlUzE2TEUoKX19LExzPWNsYXNzIFpuIGV4dGVuZHMgamV7d2F2ZVNhbXBsZT1uZXcgemU7d0Zvcm1hdFRhZztieXRlc1BlclNhbXBsZTtzYW1wbGVSYXRlO2RhdGFDaHVuaztuYW1lPSJVbm5hbWVkIHNhbXBsZSI7Y29uc3RydWN0b3IoQSx0LG4scyl7c3VwZXIoKSx0aGlzLndGb3JtYXRUYWc9QSx0aGlzLmJ5dGVzUGVyU2FtcGxlPXQsdGhpcy5zYW1wbGVSYXRlPW4sdGhpcy5kYXRhQ2h1bms9c31zdGF0aWMgcmVhZChBKXtsZXQgdD10aGlzLnZlcmlmeUFuZFJlYWRMaXN0KEEsIndhdmUiKSxuPXQuZmluZChDPT5DLmhlYWRlcj09PSJmbXQgIik7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJObyBmbXQgY2h1bmsgaW4gdGhlIHdhdmUgZmlsZSEiKTtsZXQgcz1OKG4uZGF0YSwyKSxhPU4obi5kYXRhLDIpO2lmKGEhPT0xKXRocm93IG5ldyBFcnJvcihgT25seSBtb25vIHNhbXBsZXMgYXJlIHN1cHBvcnRlZC4gRm10IHJlcG9ydHMgJHthfSBjaGFubmVscy5gKTtsZXQgcj1OKG4uZGF0YSw0KTtOKG4uZGF0YSw0KSxOKG4uZGF0YSwyKTtsZXQgbz1OKG4uZGF0YSwyKS84LGc9dC5maW5kKEM9PkMuaGVhZGVyPT09ImRhdGEiKTtpZighZyl0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgY2h1bmsgaW4gdGhlIFdBVkUgY2h1bmshIik7bGV0IEI9bmV3IFpuKHMsbyxyLGcpLGQ9ZmUodCwiSU5GTyIpO2lmKGQpe2xldCBDPXJBKGQuZGF0YSk7Zm9yKDtDLmhlYWRlciE9PSJJTkFNIiYmZC5kYXRhLmN1cnJlbnRJbmRleDxkLmRhdGEubGVuZ3RoOylDPXJBKGQuZGF0YSk7Qy5oZWFkZXI9PT0iSU5BTSImJihCLm5hbWU9aEEoQy5kYXRhLEMuc2l6ZSkudHJpbSgpKX1sZXQgaD10LmZpbmQoQz0+Qy5oZWFkZXI9PT0id3NtcCIpO3JldHVybiBoJiYoQi53YXZlU2FtcGxlPXplLnJlYWQoaCkpLEJ9c3RhdGljIGZyb21TRlNhbXBsZShBKXtsZXQgdD1BLmdldFJhd0RhdGEoITEpLG49bmV3IFpuKDEsMixBLnNhbXBsZVJhdGUsbmV3IEhzKCJkYXRhIix0Lmxlbmd0aCxuZXcgWSh0LmJ1ZmZlcikpKTtyZXR1cm4gbi5uYW1lPUEubmFtZSxuLndhdmVTYW1wbGU9emUuZnJvbVNGU2FtcGxlKEEpLG59dG9TRlNhbXBsZShBKXtsZXQgdD10aGlzLndhdmVTYW1wbGUudW5pdHlOb3RlLG49dGhpcy53YXZlU2FtcGxlLmZpbmVUdW5lLHM9TWF0aC50cnVuYyhuLzEwMCk7dCs9cyxuLT1zKjEwMDtsZXQgYT0wLHI9MCxJPXRoaXMud2F2ZVNhbXBsZS5sb29wcz8uWzBdO0kmJihhPUkubG9vcFN0YXJ0LHI9SS5sb29wU3RhcnQrSS5sb29wTGVuZ3RoKTtsZXQgbz1uZXcgRnIodGhpcy5uYW1lLHRoaXMuc2FtcGxlUmF0ZSx0LG4sYSxyLHRoaXMuZGF0YUNodW5rLHRoaXMud0Zvcm1hdFRhZyx0aGlzLmJ5dGVzUGVyU2FtcGxlKTtBLmFkZFNhbXBsZXMobyl9d3JpdGUoKXtsZXQgQT10aGlzLndyaXRlRm10KCksdD10aGlzLndhdmVTYW1wbGUud3JpdGUoKSxuPWNBKCJkYXRhIix0aGlzLmRhdGFDaHVuay5kYXRhKSxzPWNBKCJJTkFNIixuZSh0aGlzLm5hbWUsITApKSxhPWNBKCJJTkZPIixzLCExLCEwKTtyZXR1cm4gcChgJWNTYXZlZCAlYyR7dGhpcy5uYW1lfSVjIHN1Y2Nlc3NmdWxseSFgLGMucmVjb2duaXplZCxjLnZhbHVlLGMucmVjb2duaXplZCksdkEoIndhdmUiLFtBLHQsbixhXSwhMCl9d3JpdGVGbXQoKXtsZXQgQT1uZXcgWSgxOCk7cmV0dXJuIEooQSx0aGlzLndGb3JtYXRUYWcpLEooQSwxKSxnQShBLHRoaXMuc2FtcGxlUmF0ZSksZ0EoQSx0aGlzLnNhbXBsZVJhdGUqMiksSihBLDIpLEooQSx0aGlzLmJ5dGVzUGVyU2FtcGxlKjgpLGNBKCJmbXQgIixBKX19LHlhPW5ldyB5QSgyMTksMCxpLnJldmVyYkVmZmVjdHNTZW5kLDFlMywwKSxrYT1uZXcgeUEoMjIxLDAsaS5jaG9ydXNFZmZlY3RzU2VuZCwxZTMsMCksR3I9bmV3IHlBKDEyOSwwLGkudmliTGZvVG9QaXRjaCwwLDApLFJyPW5ldyB5QSgxMywwLGkudmliTGZvVG9QaXRjaCwwLDApLFZBPWNsYXNzIHpue3NvdXJjZTt0cmFuc2Zvcm07Ymlwb2xhcjtpbnZlcnQ7Y29uc3RydWN0b3IoQT1ULm5vbmUsdD1RQS5saW5lYXIsbj0hMSxzPSExKXt0aGlzLnNvdXJjZT1BLHRoaXMudHJhbnNmb3JtPXQsdGhpcy5iaXBvbGFyPW4sdGhpcy5pbnZlcnQ9c31nZXQgc291cmNlTmFtZSgpe3JldHVybiBPYmplY3Qua2V5cyhUKS5maW5kKEE9PlRbQV09PT10aGlzLnNvdXJjZSk/P3RoaXMuc291cmNlLnRvU3RyaW5nKCl9Z2V0IHRyYW5zZm9ybU5hbWUoKXtyZXR1cm4gT2JqZWN0LmtleXMoUUEpLmZpbmQoQT0+UUFbQV09PT10aGlzLnRyYW5zZm9ybSk/P3RoaXMudHJhbnNmb3JtLnRvU3RyaW5nKCl9c3RhdGljIGNvcHlGcm9tKEEpe3JldHVybiBuZXcgem4oQS5zb3VyY2UsQS50cmFuc2Zvcm0sQS5iaXBvbGFyLEEuaW52ZXJ0KX1zdGF0aWMgZnJvbVNGU291cmNlKEEpe2xldCB0O2lmKEEuaXNDQylzd2l0Y2goQS5pbmRleCl7Y2FzZSBTLm1vZHVsYXRpb25XaGVlbDp0PVQubW9kdWxhdGlvbldoZWVsO2JyZWFrO2Nhc2UgUy5tYWluVm9sdW1lOnQ9VC52b2x1bWU7YnJlYWs7Y2FzZSBTLnBhbjp0PVQucGFuO2JyZWFrO2Nhc2UgUy5leHByZXNzaW9uQ29udHJvbGxlcjp0PVQuZXhwcmVzc2lvbjticmVhaztjYXNlIFMuY2hvcnVzRGVwdGg6dD1ULmNob3J1czticmVhaztjYXNlIFMucmV2ZXJiRGVwdGg6dD1ULnJldmVyYjticmVha31lbHNlIHN3aXRjaChBLmluZGV4KXtjYXNlIGoubm9Db250cm9sbGVyOnQ9VC5ub25lO2JyZWFrO2Nhc2Ugai5ub3RlT25LZXlOdW06dD1ULmtleU51bTticmVhaztjYXNlIGoubm90ZU9uVmVsb2NpdHk6dD1ULnZlbG9jaXR5O2JyZWFrO2Nhc2Ugai5waXRjaFdoZWVsOnQ9VC5waXRjaFdoZWVsO2JyZWFrO2Nhc2Ugai5waXRjaFdoZWVsUmFuZ2U6dD1ULnBpdGNoV2hlZWxSYW5nZTticmVhaztjYXNlIGoucG9seVByZXNzdXJlOnQ9VC5wb2x5UHJlc3N1cmU7YnJlYWs7Y2FzZSBqLmNoYW5uZWxQcmVzc3VyZTp0PVQuY2hhbm5lbFByZXNzdXJlfWlmKHQhPT12b2lkIDApcmV0dXJuIG5ldyB6bih0LEEuY3VydmVUeXBlLEEuaXNCaXBvbGFyLEEuaXNOZWdhdGl2ZSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnNvdXJjZU5hbWV9ICR7dGhpcy50cmFuc2Zvcm1OYW1lfSAke3RoaXMuYmlwb2xhcj8iYmlwb2xhciI6InVuaXBvbGFyIn0gJHt0aGlzLmludmVydD8iaW52ZXJ0ZWQiOiJwb3NpdGl2ZSJ9YH10b1RyYW5zZm9ybUZsYWcoKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm18KHRoaXMuYmlwb2xhcj8xOjApPDw0fCh0aGlzLmludmVydD8xOjApPDw1fXRvU0ZTb3VyY2UoKXtsZXQgQSx0PSExO3N3aXRjaCh0aGlzLnNvdXJjZSl7ZGVmYXVsdDpjYXNlIFQubW9kTGZvOmNhc2UgVC52aWJyYXRvTGZvOmNhc2UgVC5jb2Fyc2VUdW5lOmNhc2UgVC5maW5lVHVuZTpjYXNlIFQubW9kRW52OnJldHVybjtjYXNlIFQua2V5TnVtOkE9ai5ub3RlT25LZXlOdW07YnJlYWs7Y2FzZSBULm5vbmU6QT1qLm5vQ29udHJvbGxlcjticmVhaztjYXNlIFQubW9kdWxhdGlvbldoZWVsOkE9Uy5tb2R1bGF0aW9uV2hlZWwsdD0hMDticmVhaztjYXNlIFQucGFuOkE9Uy5wYW4sdD0hMDticmVhaztjYXNlIFQucmV2ZXJiOkE9Uy5yZXZlcmJEZXB0aCx0PSEwO2JyZWFrO2Nhc2UgVC5jaG9ydXM6QT1TLmNob3J1c0RlcHRoLHQ9ITA7YnJlYWs7Y2FzZSBULmV4cHJlc3Npb246QT1TLmV4cHJlc3Npb25Db250cm9sbGVyLHQ9ITA7YnJlYWs7Y2FzZSBULnZvbHVtZTpBPVMubWFpblZvbHVtZSx0PSEwO2JyZWFrO2Nhc2UgVC52ZWxvY2l0eTpBPWoubm90ZU9uVmVsb2NpdHk7YnJlYWs7Y2FzZSBULnBvbHlQcmVzc3VyZTpBPWoucG9seVByZXNzdXJlO2JyZWFrO2Nhc2UgVC5jaGFubmVsUHJlc3N1cmU6QT1qLmNoYW5uZWxQcmVzc3VyZTticmVhaztjYXNlIFQucGl0Y2hXaGVlbDpBPWoucGl0Y2hXaGVlbDticmVhaztjYXNlIFQucGl0Y2hXaGVlbFJhbmdlOkE9ai5waXRjaFdoZWVsUmFuZ2U7YnJlYWt9aWYoQSE9PXZvaWQgMClyZXR1cm4gbmV3IFhBKEEsdGhpcy50cmFuc2Zvcm0sdCx0aGlzLmJpcG9sYXIsdGhpcy5pbnZlcnQpfX0sTXI9bmV3IFNldChbaS5zYW1wbGVNb2RlcyxpLmluaXRpYWxBdHRlbnVhdGlvbixpLmtleVJhbmdlLGkudmVsUmFuZ2UsaS5zYW1wbGVJRCxpLmZpbmVUdW5lLGkuY29hcnNlVHVuZSxpLnN0YXJ0QWRkcnNPZmZzZXQsaS5zdGFydEFkZHJzQ29hcnNlT2Zmc2V0LGkuZW5kQWRkck9mZnNldCxpLmVuZEFkZHJzQ29hcnNlT2Zmc2V0LGkuc3RhcnRsb29wQWRkcnNPZmZzZXQsaS5zdGFydGxvb3BBZGRyc0NvYXJzZU9mZnNldCxpLmVuZGxvb3BBZGRyc09mZnNldCxpLmVuZGxvb3BBZGRyc0NvYXJzZU9mZnNldCxpLm92ZXJyaWRpbmdSb290S2V5LGkuZXhjbHVzaXZlQ2xhc3NdKSxjdD1jbGFzcyBSZXtzb3VyY2U7Y29udHJvbDtkZXN0aW5hdGlvbjtzY2FsZTt0cmFuc2Zvcm07Y29uc3RydWN0b3IoQT1uZXcgVkEsdD1uZXcgVkEsbixzLGEpe3RoaXMuc291cmNlPUEsdGhpcy5jb250cm9sPXQsdGhpcy5kZXN0aW5hdGlvbj1uLHRoaXMudHJhbnNmb3JtPXMsdGhpcy5zY2FsZT1hfWdldCBpc1N0YXRpY1BhcmFtZXRlcigpe3JldHVybiB0aGlzLnNvdXJjZS5zb3VyY2U9PT1ULm5vbmUmJnRoaXMuY29udHJvbC5zb3VyY2U9PT1ULm5vbmV9Z2V0IHNob3J0U2NhbGUoKXtyZXR1cm4gdGhpcy5zY2FsZT4+MTZ9Z2V0IHRyYW5zZm9ybU5hbWUoKXtyZXR1cm4gT2JqZWN0LmtleXMoUUEpLmZpbmQoQT0+UUFbQV09PT10aGlzLnRyYW5zZm9ybSk/P3RoaXMudHJhbnNmb3JtLnRvU3RyaW5nKCl9Z2V0IGRlc3RpbmF0aW9uTmFtZSgpe3JldHVybiBPYmplY3Qua2V5cyhSKS5maW5kKEE9PlJbQV09PT10aGlzLmRlc3RpbmF0aW9uKT8/dGhpcy5kZXN0aW5hdGlvbi50b1N0cmluZygpfXN0YXRpYyByZWFkKEEpe2xldCB0PU4oQSwyKSxuPU4oQSwyKSxzPU4oQSwyKSxhPU4oQSwyKSxyPU4oQSw0KXwwLEk9YSYxNSxvPWE+PjQmMTUsZz1NZShhLDgpLEI9TWUoYSw5KSxkPW5ldyBWQShuLG8sZyxCKSxoPWE+PjEwJjE1LEM9TWUoYSwxNCksUT1NZShhLDE1KSxtPW5ldyBWQSh0LGgsQyxRKTtyZXR1cm4gbmV3IFJlKG0sZCxzLEkscil9c3RhdGljIGZyb21TRk1vZHVsYXRvcihBLHQpe2xldCBuPUI9PntzQShgRmFpbGVkIGNvbnZlcnRpbmcgU0YgbW9kdWxhdG9yIGludG8gRExTOgogJHtBLnRvU3RyaW5nKCl9IAooJHtCfSlgKX07aWYoQS50cmFuc2Zvcm1UeXBlIT09MCl7bigiQWJzb2x1dGUgdHJhbnNmb3JtIHR5cGUgaXMgbm90IHN1cHBvcnRlZCIpO3JldHVybn1pZihFQS5pc0lkZW50aWNhbChBLGthLCEwKXx8RUEuaXNJZGVudGljYWwoQSx5YSwhMCkpcmV0dXJuO2xldCBzPVZBLmZyb21TRlNvdXJjZShBLnByaW1hcnlTb3VyY2UpO2lmKCFzKXtuKCJJbnZhbGlkIHByaW1hcnkgc291cmNlIik7cmV0dXJufWxldCBhPVZBLmZyb21TRlNvdXJjZShBLnNlY29uZGFyeVNvdXJjZSk7aWYoIWEpe24oIkludmFsaWQgc2Vjb25kYXJ5IHNvdXJjZSIpO3JldHVybn1sZXQgcj1SZS5mcm9tU0ZEZXN0aW5hdGlvbihBLmRlc3RpbmF0aW9uLEEudHJhbnNmb3JtQW1vdW50KTtpZihyPT09dm9pZCAwKXtuKCJJbnZhbGlkIGRlc3RpbmF0aW9uIik7cmV0dXJufWxldCBJPUEudHJhbnNmb3JtQW1vdW50LG87aWYodHlwZW9mIHI9PSJudW1iZXIiKW89cjtlbHNlIGlmKG89ci5kZXN0aW5hdGlvbixJPXIuYW1vdW50LHIuc291cmNlIT09VC5ub25lKXtpZihhLnNvdXJjZSE9PVQubm9uZSYmcy5zb3VyY2UhPT1ULm5vbmUpe24oIkFydGljdWxhdGlvbiBnZW5lcmF0b3JzIHdpdGggc2Vjb25kYXJ5IHNvdXJjZSBhcmUgbm90IHN1cHBvcnRlZCIpO3JldHVybn1zLnNvdXJjZSE9PVQubm9uZSYmKGE9cykscz1uZXcgVkEoci5zb3VyY2UsUUEubGluZWFyLHIuaXNCaXBvbGFyKX1sZXQgZz1uZXcgUmUocyxhLG8sMCxJPDwxNik7dC5jb25uZWN0aW9uQmxvY2tzLnB1c2goZyl9c3RhdGljIGNvcHlGcm9tKEEpe3JldHVybiBuZXcgUmUoVkEuY29weUZyb20oQS5zb3VyY2UpLFZBLmNvcHlGcm9tKEEuY29udHJvbCksQS5kZXN0aW5hdGlvbixBLnRyYW5zZm9ybSxBLnNjYWxlKX1zdGF0aWMgZnJvbVNGR2VuZXJhdG9yKEEsdCl7aWYoTXIuaGFzKEEuZ2VuZXJhdG9yVHlwZSkpcmV0dXJuO2xldCBuPW89PntzQShgRmFpbGVkIGNvbnZlcnRpbmcgU0YyIGdlbmVyYXRvciBpbnRvIERMUzoKICR7QS50b1N0cmluZygpfSAKKCR7b30pYCl9LHM9UmUuZnJvbVNGRGVzdGluYXRpb24oQS5nZW5lcmF0b3JUeXBlLEEuZ2VuZXJhdG9yVmFsdWUpO2lmKHM9PT12b2lkIDApe24oIkludmFsaWQgdHlwZSIpO3JldHVybn1sZXQgYT1uZXcgVkEscixJPUEuZ2VuZXJhdG9yVmFsdWU7dHlwZW9mIHM9PSJudW1iZXIiP3I9czoocj1zLmRlc3RpbmF0aW9uLEk9cy5hbW91bnQsYS5zb3VyY2U9cy5zb3VyY2UsYS5iaXBvbGFyPXMuaXNCaXBvbGFyKSx0LmNvbm5lY3Rpb25CbG9ja3MucHVzaChuZXcgUmUoYSxuZXcgVkEsciwwLEk8PDE2KSl9c3RhdGljIGZyb21TRkRlc3RpbmF0aW9uKEEsdCl7c3dpdGNoKEEpe2RlZmF1bHQ6cmV0dXJuO2Nhc2UgaS5pbml0aWFsQXR0ZW51YXRpb246cmV0dXJue2Rlc3RpbmF0aW9uOlIuZ2FpbixhbW91bnQ6LXQsaXNCaXBvbGFyOiExLHNvdXJjZTpULm5vbmV9O2Nhc2UgaS5maW5lVHVuZTpyZXR1cm4gUi5waXRjaDtjYXNlIGkucGFuOnJldHVybiBSLnBhbjtjYXNlIGkua2V5TnVtOnJldHVybiBSLmtleU51bTtjYXNlIGkucmV2ZXJiRWZmZWN0c1NlbmQ6cmV0dXJuIFIucmV2ZXJiU2VuZDtjYXNlIGkuY2hvcnVzRWZmZWN0c1NlbmQ6cmV0dXJuIFIuY2hvcnVzU2VuZDtjYXNlIGkuZnJlcU1vZExGTzpyZXR1cm4gUi5tb2RMZm9GcmVxO2Nhc2UgaS5kZWxheU1vZExGTzpyZXR1cm4gUi5tb2RMZm9EZWxheTtjYXNlIGkuZGVsYXlWaWJMRk86cmV0dXJuIFIudmliTGZvRGVsYXk7Y2FzZSBpLmZyZXFWaWJMRk86cmV0dXJuIFIudmliTGZvRnJlcTtjYXNlIGkuZGVsYXlWb2xFbnY6cmV0dXJuIFIudm9sRW52RGVsYXk7Y2FzZSBpLmF0dGFja1ZvbEVudjpyZXR1cm4gUi52b2xFbnZBdHRhY2s7Y2FzZSBpLmhvbGRWb2xFbnY6cmV0dXJuIFIudm9sRW52SG9sZDtjYXNlIGkuZGVjYXlWb2xFbnY6cmV0dXJuIFIudm9sRW52RGVjYXk7Y2FzZSBpLnN1c3RhaW5Wb2xFbnY6cmV0dXJue2Rlc3RpbmF0aW9uOlIudm9sRW52U3VzdGFpbixhbW91bnQ6MWUzLXQsaXNCaXBvbGFyOiExLHNvdXJjZTpULm5vbmV9O2Nhc2UgaS5yZWxlYXNlVm9sRW52OnJldHVybiBSLnZvbEVudlJlbGVhc2U7Y2FzZSBpLmRlbGF5TW9kRW52OnJldHVybiBSLm1vZEVudkRlbGF5O2Nhc2UgaS5hdHRhY2tNb2RFbnY6cmV0dXJuIFIubW9kRW52QXR0YWNrO2Nhc2UgaS5ob2xkTW9kRW52OnJldHVybiBSLm1vZEVudkhvbGQ7Y2FzZSBpLmRlY2F5TW9kRW52OnJldHVybiBSLm1vZEVudkRlY2F5O2Nhc2UgaS5zdXN0YWluTW9kRW52OnJldHVybntkZXN0aW5hdGlvbjpSLm1vZEVudlN1c3RhaW4sYW1vdW50OjFlMy10LGlzQmlwb2xhcjohMSxzb3VyY2U6VC5ub25lfTtjYXNlIGkucmVsZWFzZU1vZEVudjpyZXR1cm4gUi5tb2RFbnZSZWxlYXNlO2Nhc2UgaS5pbml0aWFsRmlsdGVyRmM6cmV0dXJuIFIuZmlsdGVyQ3V0b2ZmO2Nhc2UgaS5pbml0aWFsRmlsdGVyUTpyZXR1cm4gUi5maWx0ZXJRO2Nhc2UgaS5tb2RFbnZUb0ZpbHRlckZjOnJldHVybntzb3VyY2U6VC5tb2RFbnYsZGVzdGluYXRpb246Ui5maWx0ZXJDdXRvZmYsYW1vdW50OnQsaXNCaXBvbGFyOiExfTtjYXNlIGkubW9kRW52VG9QaXRjaDpyZXR1cm57c291cmNlOlQubW9kRW52LGRlc3RpbmF0aW9uOlIucGl0Y2gsYW1vdW50OnQsaXNCaXBvbGFyOiExfTtjYXNlIGkubW9kTGZvVG9GaWx0ZXJGYzpyZXR1cm57c291cmNlOlQubW9kTGZvLGRlc3RpbmF0aW9uOlIuZmlsdGVyQ3V0b2ZmLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLm1vZExmb1RvVm9sdW1lOnJldHVybntzb3VyY2U6VC5tb2RMZm8sZGVzdGluYXRpb246Ui5nYWluLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLm1vZExmb1RvUGl0Y2g6cmV0dXJue3NvdXJjZTpULm1vZExmbyxkZXN0aW5hdGlvbjpSLnBpdGNoLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLnZpYkxmb1RvUGl0Y2g6cmV0dXJue3NvdXJjZTpULnZpYnJhdG9MZm8sZGVzdGluYXRpb246Ui5waXRjaCxhbW91bnQ6dCxpc0JpcG9sYXI6ITB9O2Nhc2UgaS5rZXlOdW1Ub1ZvbEVudkhvbGQ6cmV0dXJue3NvdXJjZTpULmtleU51bSxkZXN0aW5hdGlvbjpSLnZvbEVudkhvbGQsYW1vdW50OnQsaXNCaXBvbGFyOiEwfTtjYXNlIGkua2V5TnVtVG9Wb2xFbnZEZWNheTpyZXR1cm57c291cmNlOlQua2V5TnVtLGRlc3RpbmF0aW9uOlIudm9sRW52RGVjYXksYW1vdW50OnQsaXNCaXBvbGFyOiEwfTtjYXNlIGkua2V5TnVtVG9Nb2RFbnZIb2xkOnJldHVybntzb3VyY2U6VC5rZXlOdW0sZGVzdGluYXRpb246Ui5tb2RFbnZIb2xkLGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLmtleU51bVRvTW9kRW52RGVjYXk6cmV0dXJue3NvdXJjZTpULmtleU51bSxkZXN0aW5hdGlvbjpSLm1vZEVudkRlY2F5LGFtb3VudDp0LGlzQmlwb2xhcjohMH07Y2FzZSBpLnNjYWxlVHVuaW5nOnJldHVybntzb3VyY2U6VC5rZXlOdW0sZGVzdGluYXRpb246Ui5waXRjaCxhbW91bnQ6dCoxMjgsaXNCaXBvbGFyOiExfX19dG9TdHJpbmcoKXtyZXR1cm5gU291cmNlOiAke3RoaXMuc291cmNlLnRvU3RyaW5nKCl9LApDb250cm9sOiAke3RoaXMuY29udHJvbC50b1N0cmluZygpfSwKU2NhbGU6ICR7dGhpcy5zY2FsZX0gPj4gMTYgPSAke3RoaXMuc2hvcnRTY2FsZX0sCk91dHB1dCB0cmFuc2Zvcm06ICR7dGhpcy50cmFuc2Zvcm1OYW1lfQpEZXN0aW5hdGlvbjogJHt0aGlzLmRlc3RpbmF0aW9uTmFtZX1gfXdyaXRlKCl7bGV0IEE9bmV3IFkoMTIpO0ooQSx0aGlzLnNvdXJjZS5zb3VyY2UpLEooQSx0aGlzLmNvbnRyb2wuc291cmNlKSxKKEEsdGhpcy5kZXN0aW5hdGlvbik7bGV0IHQ9dGhpcy50cmFuc2Zvcm18dGhpcy5jb250cm9sLnRvVHJhbnNmb3JtRmxhZygpPDw0fHRoaXMuc291cmNlLnRvVHJhbnNmb3JtRmxhZygpPDwxMDtyZXR1cm4gSihBLHQpLGdBKEEsdGhpcy5zY2FsZSksQX10b1NGR2VuZXJhdG9yKEEpe2xldCB0PXRoaXMuZGVzdGluYXRpb24sbj10aGlzLnNob3J0U2NhbGU7c3dpdGNoKHQpe2RlZmF1bHQ6cChgJWNGYWlsZWQgY29udmVydGluZyBETFMgYXJ0aWN1bGF0b3IgaW50byBTRiBnZW5lcmF0b3I6ICVjJHt0aGlzLnRvU3RyaW5nKCl9JWMKKGludmFsaWQgZGVzdGluYXRpb24pYCxjLndhcm4sYy52YWx1ZSxjLnVucmVjb2duaXplZCk7cmV0dXJuO2Nhc2UgUi5wYW46QS5zZXRHZW5lcmF0b3IoaS5wYW4sbik7YnJlYWs7Y2FzZSBSLmdhaW46QS5hZGRUb0dlbmVyYXRvcihpLmluaXRpYWxBdHRlbnVhdGlvbiwtbi8uNCk7YnJlYWs7Y2FzZSBSLmZpbHRlckN1dG9mZjpBLnNldEdlbmVyYXRvcihpLmluaXRpYWxGaWx0ZXJGYyxuKTticmVhaztjYXNlIFIuZmlsdGVyUTpBLnNldEdlbmVyYXRvcihpLmluaXRpYWxGaWx0ZXJRLG4pO2JyZWFrO2Nhc2UgUi5tb2RMZm9GcmVxOkEuc2V0R2VuZXJhdG9yKGkuZnJlcU1vZExGTyxuKTticmVhaztjYXNlIFIubW9kTGZvRGVsYXk6QS5zZXRHZW5lcmF0b3IoaS5kZWxheU1vZExGTyxuKTticmVhaztjYXNlIFIudmliTGZvRnJlcTpBLnNldEdlbmVyYXRvcihpLmZyZXFWaWJMRk8sbik7YnJlYWs7Y2FzZSBSLnZpYkxmb0RlbGF5OkEuc2V0R2VuZXJhdG9yKGkuZGVsYXlWaWJMRk8sbik7YnJlYWs7Y2FzZSBSLnZvbEVudkRlbGF5OkEuc2V0R2VuZXJhdG9yKGkuZGVsYXlWb2xFbnYsbik7YnJlYWs7Y2FzZSBSLnZvbEVudkF0dGFjazpBLnNldEdlbmVyYXRvcihpLmF0dGFja1ZvbEVudixuKTticmVhaztjYXNlIFIudm9sRW52SG9sZDpBLnNldEdlbmVyYXRvcihpLmhvbGRWb2xFbnYsbik7YnJlYWs7Y2FzZSBSLnZvbEVudkRlY2F5OkEuc2V0R2VuZXJhdG9yKGkuZGVjYXlWb2xFbnYsbik7YnJlYWs7Y2FzZSBSLnZvbEVudlJlbGVhc2U6QS5zZXRHZW5lcmF0b3IoaS5yZWxlYXNlVm9sRW52LG4pO2JyZWFrO2Nhc2UgUi52b2xFbnZTdXN0YWluOkEuc2V0R2VuZXJhdG9yKGkuc3VzdGFpblZvbEVudiwxZTMtbik7YnJlYWs7Y2FzZSBSLm1vZEVudkRlbGF5OkEuc2V0R2VuZXJhdG9yKGkuZGVsYXlNb2RFbnYsbik7YnJlYWs7Y2FzZSBSLm1vZEVudkF0dGFjazpBLnNldEdlbmVyYXRvcihpLmF0dGFja01vZEVudixuKTticmVhaztjYXNlIFIubW9kRW52SG9sZDpBLnNldEdlbmVyYXRvcihpLmhvbGRNb2RFbnYsbik7YnJlYWs7Y2FzZSBSLm1vZEVudkRlY2F5OkEuc2V0R2VuZXJhdG9yKGkuZGVjYXlNb2RFbnYsbik7YnJlYWs7Y2FzZSBSLm1vZEVudlJlbGVhc2U6QS5zZXRHZW5lcmF0b3IoaS5yZWxlYXNlTW9kRW52LG4pO2JyZWFrO2Nhc2UgUi5tb2RFbnZTdXN0YWluOkEuc2V0R2VuZXJhdG9yKGkuc3VzdGFpbk1vZEVudiwxZTMtbik7YnJlYWs7Y2FzZSBSLnJldmVyYlNlbmQ6QS5zZXRHZW5lcmF0b3IoaS5yZXZlcmJFZmZlY3RzU2VuZCxuKTticmVhaztjYXNlIFIuY2hvcnVzU2VuZDpBLnNldEdlbmVyYXRvcihpLmNob3J1c0VmZmVjdHNTZW5kLG4pO2JyZWFrO2Nhc2UgUi5waXRjaDpBLmZpbmVUdW5pbmcrPW47YnJlYWt9fXRvU0ZNb2R1bGF0b3IoQSl7bGV0IHQ9dGhpcy5zaG9ydFNjYWxlLG4scyxhPW5ldyBYQSxyPWc9PntwKGAlY0ZhaWxlZCBjb252ZXJ0aW5nIERMUyBhcnRpY3VsYXRvciBpbnRvIFNGMjoKICVjJHt0aGlzLnRvU3RyaW5nKCl9JWMKKCR7Z30pYCxjLndhcm4sYy52YWx1ZSxjLnVucmVjb2duaXplZCl9LEk9dGhpcy50b0NvbWJpbmVkU0ZEZXN0aW5hdGlvbigpO2lmKEkpe249STtsZXQgZz10aGlzLmNvbnRyb2wudG9TRlNvdXJjZSgpO2lmKCFnKXtyKCJJbnZhbGlkIGNvbnRyb2wiKTtyZXR1cm59cz1nfWVsc2V7bGV0IGc9dGhpcy50b1NGRGVzdGluYXRpb24oKTtpZighZyl7cigiSW52YWxpZCBkZXN0aW5hdGlvbiIpO3JldHVybn10eXBlb2YgZz09Im9iamVjdCI/KHQ9Zy5uZXdBbW91bnQsbj1nLmdlbik6bj1nO2xldCBCPXRoaXMuc291cmNlLnRvU0ZTb3VyY2UoKTtpZighQil7cigiSW52YWxpZCBzb3VyY2UiKTtyZXR1cm59cz1CO2xldCBkPXRoaXMuY29udHJvbC50b1NGU291cmNlKCk7aWYoIWQpe3IoIkludmFsaWQgY29udHJvbCIpO3JldHVybn1hPWR9dGhpcy50cmFuc2Zvcm0hPT1RQS5saW5lYXImJnMuY3VydmVUeXBlPT09UUEubGluZWFyJiYocy5jdXJ2ZVR5cGU9dGhpcy50cmFuc2Zvcm0pLG49PT1pLmluaXRpYWxBdHRlbnVhdGlvbiYmKCh0aGlzLnNvdXJjZS5zb3VyY2U9PT1ULnZlbG9jaXR5fHx0aGlzLnNvdXJjZS5zb3VyY2U9PT1ULnZvbHVtZXx8dGhpcy5zb3VyY2Uuc291cmNlPT09VC5leHByZXNzaW9uKSYmKHMuaXNOZWdhdGl2ZT0hMCksdD1NYXRoLm1pbig5NjAsTWF0aC5tYXgoMCx0KSkpO2xldCBvPW5ldyBFQShzLGEsbix0LDApO0EuYWRkTW9kdWxhdG9ycyhvKX10b0NvbWJpbmVkU0ZEZXN0aW5hdGlvbigpe2xldCBBPXRoaXMuc291cmNlLnNvdXJjZSx0PXRoaXMuZGVzdGluYXRpb247cmV0dXJuIEE9PT1ULnZpYnJhdG9MZm8mJnQ9PT1SLnBpdGNoP2kudmliTGZvVG9QaXRjaDpBPT09VC5tb2RMZm8mJnQ9PT1SLnBpdGNoP2kubW9kTGZvVG9QaXRjaDpBPT09VC5tb2RMZm8mJnQ9PT1SLmZpbHRlckN1dG9mZj9pLm1vZExmb1RvRmlsdGVyRmM6QT09PVQubW9kTGZvJiZ0PT09Ui5nYWluP2kubW9kTGZvVG9Wb2x1bWU6QT09PVQubW9kRW52JiZ0PT09Ui5maWx0ZXJDdXRvZmY/aS5tb2RFbnZUb0ZpbHRlckZjOkE9PT1ULm1vZEVudiYmdD09PVIucGl0Y2g/aS5tb2RFbnZUb1BpdGNoOnZvaWQgMH10b1NGRGVzdGluYXRpb24oKXtsZXQgQT10aGlzLnNob3J0U2NhbGU7c3dpdGNoKHRoaXMuZGVzdGluYXRpb24pe2RlZmF1bHQ6Y2FzZSBSLm5vbmU6cmV0dXJuO2Nhc2UgUi5wYW46cmV0dXJuIGkucGFuO2Nhc2UgUi5nYWluOnJldHVybntnZW46aS5pbml0aWFsQXR0ZW51YXRpb24sbmV3QW1vdW50Oi1BfTtjYXNlIFIucGl0Y2g6cmV0dXJuIGkuZmluZVR1bmU7Y2FzZSBSLmtleU51bTpyZXR1cm4gaS5vdmVycmlkaW5nUm9vdEtleTtjYXNlIFIudm9sRW52RGVsYXk6cmV0dXJuIGkuZGVsYXlWb2xFbnY7Y2FzZSBSLnZvbEVudkF0dGFjazpyZXR1cm4gaS5hdHRhY2tWb2xFbnY7Y2FzZSBSLnZvbEVudkhvbGQ6cmV0dXJuIGkuaG9sZFZvbEVudjtjYXNlIFIudm9sRW52RGVjYXk6cmV0dXJuIGkuZGVjYXlWb2xFbnY7Y2FzZSBSLnZvbEVudlN1c3RhaW46cmV0dXJue2dlbjppLnN1c3RhaW5Wb2xFbnYsbmV3QW1vdW50OjFlMy1BfTtjYXNlIFIudm9sRW52UmVsZWFzZTpyZXR1cm4gaS5yZWxlYXNlVm9sRW52O2Nhc2UgUi5tb2RFbnZEZWxheTpyZXR1cm4gaS5kZWxheU1vZEVudjtjYXNlIFIubW9kRW52QXR0YWNrOnJldHVybiBpLmF0dGFja01vZEVudjtjYXNlIFIubW9kRW52SG9sZDpyZXR1cm4gaS5ob2xkTW9kRW52O2Nhc2UgUi5tb2RFbnZEZWNheTpyZXR1cm4gaS5kZWNheU1vZEVudjtjYXNlIFIubW9kRW52U3VzdGFpbjpyZXR1cm57Z2VuOmkuc3VzdGFpbk1vZEVudixuZXdBbW91bnQ6MWUzLUF9O2Nhc2UgUi5tb2RFbnZSZWxlYXNlOnJldHVybiBpLnJlbGVhc2VNb2RFbnY7Y2FzZSBSLmZpbHRlckN1dG9mZjpyZXR1cm4gaS5pbml0aWFsRmlsdGVyRmM7Y2FzZSBSLmZpbHRlclE6cmV0dXJuIGkuaW5pdGlhbEZpbHRlclE7Y2FzZSBSLmNob3J1c1NlbmQ6cmV0dXJuIGkuY2hvcnVzRWZmZWN0c1NlbmQ7Y2FzZSBSLnJldmVyYlNlbmQ6cmV0dXJuIGkucmV2ZXJiRWZmZWN0c1NlbmQ7Y2FzZSBSLm1vZExmb0ZyZXE6cmV0dXJuIGkuZnJlcU1vZExGTztjYXNlIFIubW9kTGZvRGVsYXk6cmV0dXJuIGkuZGVsYXlNb2RMRk87Y2FzZSBSLnZpYkxmb0ZyZXE6cmV0dXJuIGkuZnJlcVZpYkxGTztjYXNlIFIudmliTGZvRGVsYXk6cmV0dXJuIGkuZGVsYXlWaWJMRk99fX0sRGE9Y2xhc3MgV24gZXh0ZW5kcyBqZXtjb25uZWN0aW9uQmxvY2tzPW5ldyBBcnJheTttb2RlPSJkbHMyIjtnZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuY29ubmVjdGlvbkJsb2Nrcy5sZW5ndGh9Y29weUZyb20oQSl7dGhpcy5tb2RlPUEubW9kZSxBLmNvbm5lY3Rpb25CbG9ja3MuZm9yRWFjaCh0PT57dGhpcy5jb25uZWN0aW9uQmxvY2tzLnB1c2goY3QuY29weUZyb20odCkpfSl9ZnJvbVNGWm9uZShBKXt0aGlzLm1vZGU9ImRsczIiO2xldCB0PW5ldyBWdDt0LmNvcHlGcm9tKEEpO2ZvcihsZXQgbiBvZiB0LmdlbmVyYXRvcnMpe2xldCBzO3N3aXRjaChuLmdlbmVyYXRvclR5cGUpe2RlZmF1bHQ6Y29udGludWU7Y2FzZSBpLmtleU51bVRvVm9sRW52RGVjYXk6cz1pLmRlY2F5Vm9sRW52O2JyZWFrO2Nhc2UgaS5rZXlOdW1Ub1ZvbEVudkhvbGQ6cz1pLmhvbGRWb2xFbnY7YnJlYWs7Y2FzZSBpLmtleU51bVRvTW9kRW52RGVjYXk6cz1pLmRlY2F5TW9kRW52O2JyZWFrO2Nhc2UgaS5rZXlOdW1Ub01vZEVudkhvbGQ6cz1pLmhvbGRNb2RFbnZ9bGV0IGE9dC5nZXRHZW5lcmF0b3Iocyx2b2lkIDApLHI9bi5nZW5lcmF0b3JWYWx1ZSotMTI4O2lmKGE9PT12b2lkIDApY29udGludWU7bGV0IEk9NjAvMTI4KnIsbz1hLUk7dC5zZXRHZW5lcmF0b3Iobi5nZW5lcmF0b3JUeXBlLHIsITEpLHQuc2V0R2VuZXJhdG9yKHMsbywhMSl9Zm9yKGxldCBuIG9mIHQuZ2VuZXJhdG9ycyljdC5mcm9tU0ZHZW5lcmF0b3Iobix0aGlzKTtmb3IobGV0IG4gb2YgdC5tb2R1bGF0b3JzKWN0LmZyb21TRk1vZHVsYXRvcihuLHRoaXMpfXJlYWQoQSl7bGV0IHQ9ZmUoQSwibGFydCIpLG49ZmUoQSwibGFyMiIpO2lmKHQpZm9yKHRoaXMubW9kZT0iZGxzMSI7dC5kYXRhLmN1cnJlbnRJbmRleDx0LmRhdGEubGVuZ3RoOyl7bGV0IHM9ckEodC5kYXRhKTtXbi52ZXJpZnlIZWFkZXIocywiYXJ0MSIsImFydDIiKTtsZXQgYT1zLmRhdGEscj1OKGEsNCk7ciE9PTgmJnNBKGBDYlNpemUgaW4gYXJ0aWN1bGF0aW9uIG1pc21hdGNoLiBFeHBlY3RlZCA4LCBnb3QgJHtyfWApO2xldCBJPU4oYSw0KTtmb3IobGV0IG89MDtvPEk7bysrKXRoaXMuY29ubmVjdGlvbkJsb2Nrcy5wdXNoKGN0LnJlYWQoYSkpfWVsc2UgaWYobilmb3IodGhpcy5tb2RlPSJkbHMyIjtuLmRhdGEuY3VycmVudEluZGV4PG4uZGF0YS5sZW5ndGg7KXtsZXQgcz1yQShuLmRhdGEpO1duLnZlcmlmeUhlYWRlcihzLCJhcnQyIiwiYXJ0MSIpO2xldCBhPXMuZGF0YSxyPU4oYSw0KTtyIT09OCYmc0EoYENiU2l6ZSBpbiBhcnRpY3VsYXRpb24gbWlzbWF0Y2guIEV4cGVjdGVkIDgsIGdvdCAke3J9YCk7bGV0IEk9TihhLDQpO2ZvcihsZXQgbz0wO288STtvKyspdGhpcy5jb25uZWN0aW9uQmxvY2tzLnB1c2goY3QucmVhZChhKSl9fXdyaXRlKCl7bGV0IEE9bmV3IFkoOCk7Z0EoQSw4KSxnQShBLHRoaXMuY29ubmVjdGlvbkJsb2Nrcy5sZW5ndGgpO2xldCB0PXRoaXMuY29ubmVjdGlvbkJsb2Nrcy5tYXAocz0+cy53cml0ZSgpKSxuPXZBKHRoaXMubW9kZT09PSJkbHMyIj8iYXJ0MiI6ImFydDEiLFtBLC4uLnRdKTtyZXR1cm4gY0EodGhpcy5tb2RlPT09ImRsczIiPyJsYXIyIjoibGFydCIsbiwhMSwhMCl9dG9TRlpvbmUoQSl7bGV0IHQ9KG4scyxhLHIpPT57bGV0IEk9bi8tMTI4O2lmKEEuc2V0R2VuZXJhdG9yKHMsSSksSTw9MTIwKXtsZXQgbz1NYXRoLnJvdW5kKC40Njg3NSpuKSxnPXRoaXMuY29ubmVjdGlvbkJsb2Nrcy5maW5kKEI9PkIuaXNTdGF0aWNQYXJhbWV0ZXImJkIuZGVzdGluYXRpb249PT1yKTtnJiZBLnNldEdlbmVyYXRvcihhLG8rZy5zaG9ydFNjYWxlKX19O2ZvcihsZXQgbiBvZiB0aGlzLmNvbm5lY3Rpb25CbG9ja3Mpe2xldCBzPW4uc2hvcnRTY2FsZSxhPW4uc291cmNlLnNvdXJjZSxyPW4uY29udHJvbC5zb3VyY2UsST1uLmRlc3RpbmF0aW9uO2lmKG4uaXNTdGF0aWNQYXJhbWV0ZXIpe24udG9TRkdlbmVyYXRvcihBKTtjb250aW51ZX1pZihyPT09VC5ub25lKWlmKGE9PT1ULmtleU51bSl7aWYoST09PVIucGl0Y2gpe0Euc2V0R2VuZXJhdG9yKGkuc2NhbGVUdW5pbmcscy8xMjgpO2NvbnRpbnVlfWlmKEk9PT1SLm1vZEVudkhvbGR8fEk9PT1SLm1vZEVudkRlY2F5fHxJPT09Ui52b2xFbnZIb2xkfHxJPT1SLnZvbEVudkRlY2F5KWNvbnRpbnVlfWVsc2V7bGV0IG89bi50b0NvbWJpbmVkU0ZEZXN0aW5hdGlvbigpO2lmKG8pe0Euc2V0R2VuZXJhdG9yKG8scyk7Y29udGludWV9fW4udG9TRk1vZHVsYXRvcihBKX10aGlzLm1vZGU9PT0iZGxzMSImJkEuYWRkTW9kdWxhdG9ycyhFQS5jb3B5RnJvbShHciksRUEuY29weUZyb20oUnIpKTtmb3IobGV0IG4gb2YgdGhpcy5jb25uZWN0aW9uQmxvY2tzKXtpZihuLnNvdXJjZS5zb3VyY2UhPT1ULmtleU51bSljb250aW51ZTtsZXQgcz1uLnNob3J0U2NhbGU7c3dpdGNoKG4uZGVzdGluYXRpb24pe2RlZmF1bHQ6Y29udGludWU7Y2FzZSBSLnZvbEVudkhvbGQ6dChzLGkua2V5TnVtVG9Wb2xFbnZIb2xkLGkuaG9sZFZvbEVudixSLnZvbEVudkhvbGQpO2JyZWFrO2Nhc2UgUi52b2xFbnZEZWNheTp0KHMsaS5rZXlOdW1Ub1ZvbEVudkRlY2F5LGkuZGVjYXlWb2xFbnYsUi52b2xFbnZEZWNheSk7YnJlYWs7Y2FzZSBSLm1vZEVudkhvbGQ6dChzLGkua2V5TnVtVG9Nb2RFbnZIb2xkLGkuaG9sZE1vZEVudixSLm1vZEVudkhvbGQpO2JyZWFrO2Nhc2UgUi5tb2RFbnZEZWNheTp0KHMsaS5rZXlOdW1Ub01vZEVudkRlY2F5LGkuZGVjYXlNb2RFbnYsUi5tb2RFbnZEZWNheSk7YnJlYWt9fX19LHduPWNsYXNzIFV0e2NoYW5uZWw9MTt0YWJsZUluZGV4O2Z1c09wdGlvbnM9MDtwaGFzZUdyb3VwPTA7Y29uc3RydWN0b3IoQSl7dGhpcy50YWJsZUluZGV4PUF9c3RhdGljIGNvcHlGcm9tKEEpe2xldCB0PW5ldyBVdChBLnRhYmxlSW5kZXgpO3JldHVybiB0LmNoYW5uZWw9QS5jaGFubmVsLHQucGhhc2VHcm91cD1BLnBoYXNlR3JvdXAsdC5mdXNPcHRpb25zPUEuZnVzT3B0aW9ucyx0fXN0YXRpYyByZWFkKEEpe2xldCB0PU4oQS5kYXRhLDIpLG49TihBLmRhdGEsMikscz1OKEEuZGF0YSw0KSxhPU4oQS5kYXRhLDQpLHI9bmV3IFV0KGEpO3JldHVybiByLmNoYW5uZWw9cyxyLmZ1c09wdGlvbnM9dCxyLnBoYXNlR3JvdXA9bixyfXN0YXRpYyBmcm9tU0Zab25lKEEsdCl7bGV0IG49QS5pbmRleE9mKHQuc2FtcGxlKTtpZihuPDApdGhyb3cgbmV3IEVycm9yKGBXYXZlIGxpbmsgZXJyb3I6IFNhbXBsZSAke3Quc2FtcGxlLm5hbWV9IGRvZXMgbm90IGV4aXN0IGluIHRoZSBzYW1wbGUgbGlzdC5gKTtsZXQgcz1uZXcgVXQobik7c3dpdGNoKHQuc2FtcGxlLnNhbXBsZVR5cGUpe2RlZmF1bHQ6Y2FzZSB3QS5sZWZ0U2FtcGxlOmNhc2Ugd0EubW9ub1NhbXBsZTpzLmNoYW5uZWw9MTticmVhaztjYXNlIHdBLnJpZ2h0U2FtcGxlOnMuY2hhbm5lbD0yfXJldHVybiBzfXdyaXRlKCl7bGV0IEE9bmV3IFkoMTIpO3JldHVybiBKKEEsdGhpcy5mdXNPcHRpb25zKSxKKEEsdGhpcy5waGFzZUdyb3VwKSxnQShBLHRoaXMuY2hhbm5lbCksZ0EoQSx0aGlzLnRhYmxlSW5kZXgpLGNBKCJ3bG5rIixBKX19LFR0PWNsYXNzIFZlIGV4dGVuZHMgamV7YXJ0aWN1bGF0aW9uPW5ldyBEYTtrZXlSYW5nZT17bWluOjAsbWF4OjEyN307dmVsUmFuZ2U9e21pbjowLG1heDoxMjd9O2tleUdyb3VwPTA7ZnVzT3B0aW9ucz0wO3VzTGF5ZXI9MDt3YXZlU2FtcGxlO3dhdmVMaW5rO2NvbnN0cnVjdG9yKEEsdCl7c3VwZXIoKSx0aGlzLndhdmVTYW1wbGU9dCx0aGlzLndhdmVMaW5rPUF9c3RhdGljIGNvcHlGcm9tKEEpe2xldCB0PW5ldyBWZSh3bi5jb3B5RnJvbShBLndhdmVMaW5rKSx6ZS5jb3B5RnJvbShBLndhdmVTYW1wbGUpKTtyZXR1cm4gdC5rZXlHcm91cD1BLmtleUdyb3VwLHQua2V5UmFuZ2U9ey4uLkEua2V5UmFuZ2V9LHQudmVsUmFuZ2U9ey4uLkEudmVsUmFuZ2V9LHQudXNMYXllcj1BLnVzTGF5ZXIsdC5mdXNPcHRpb25zPUEuZnVzT3B0aW9ucyx0LmFydGljdWxhdGlvbi5jb3B5RnJvbShBLmFydGljdWxhdGlvbiksdH1zdGF0aWMgcmVhZChBLHQpe2xldCBuPXRoaXMudmVyaWZ5QW5kUmVhZExpc3QodCwicmduICIsInJnbjIiKSxzPW4uZmluZChtPT5tLmhlYWRlcj09PSJ3c21wIiksYT1zP3plLnJlYWQocyk6dm9pZCAwLHI9bi5maW5kKG09Pm0uaGVhZGVyPT09IndsbmsiKTtpZighcil7c0EoIkludmFsaWQgRExTIHJlZ2lvbjogbWlzc2luZyAnd2xuaycgY2h1bmshIERpc2NhcmRpbmcuLi4iKTtyZXR1cm59bGV0IEk9d24ucmVhZChyKSxvPW4uZmluZChtPT5tLmhlYWRlcj09PSJyZ25oIik7aWYoIW8pe3NBKCJJbnZhbGlkIERMUyByZWdpb246IG1pc3NpbmcgJ3JnbmgnIGNodW5rISBEaXNjYXJkaW5nLi4uIik7cmV0dXJufWxldCBnPUFbSS50YWJsZUluZGV4XTtnfHxWZS5wYXJzaW5nRXJyb3IoYEludmFsaWQgc2FtcGxlIGluZGV4OiAke0kudGFibGVJbmRleH0uIFNhbXBsZXMgYXZhaWxhYmxlOiAke0EubGVuZ3RofWApLGE/Pz1nLndhdmVTYW1wbGU7bGV0IEI9bmV3IFZlKEksYSksZD1OKG8uZGF0YSwyKSxoPU4oby5kYXRhLDIpLEM9TihvLmRhdGEsMiksUT1OKG8uZGF0YSwyKTtyZXR1cm4gQz09PTAmJlE9PT0wJiYoUT0xMjcsQz0wKSxCLmtleVJhbmdlLm1heD1oLEIua2V5UmFuZ2UubWluPWQsQi52ZWxSYW5nZS5tYXg9USxCLnZlbFJhbmdlLm1pbj1DLEIuZnVzT3B0aW9ucz1OKG8uZGF0YSwyKSxCLmtleUdyb3VwPU4oby5kYXRhLDIpLG8uZGF0YS5sZW5ndGgtby5kYXRhLmN1cnJlbnRJbmRleD49MiYmKEIudXNMYXllcj1OKG8uZGF0YSwyKSksQi5hcnRpY3VsYXRpb24ucmVhZChuKSxCfXN0YXRpYyBmcm9tU0Zab25lKEEsdCl7bGV0IG49emUuZnJvbVNGWm9uZShBKSxzPXduLmZyb21TRlpvbmUodCxBKSxhPW5ldyBWZShzLG4pO3JldHVybiBhLmtleVJhbmdlLm1pbj1NYXRoLm1heChBLmtleVJhbmdlLm1pbiwwKSxhLmtleVJhbmdlLm1heD1BLmtleVJhbmdlLm1heCxhLnZlbFJhbmdlLm1pbj1NYXRoLm1heChBLnZlbFJhbmdlLm1pbiwwKSxhLnZlbFJhbmdlLm1heD1BLnZlbFJhbmdlLm1heCxhLmtleUdyb3VwPUEuZ2V0R2VuZXJhdG9yKGkuZXhjbHVzaXZlQ2xhc3MsMCksYS5hcnRpY3VsYXRpb24uZnJvbVNGWm9uZShBKSxhfXdyaXRlKCl7bGV0IEE9W3RoaXMud3JpdGVIZWFkZXIoKSx0aGlzLndhdmVTYW1wbGUud3JpdGUoKSx0aGlzLndhdmVMaW5rLndyaXRlKCksdGhpcy5hcnRpY3VsYXRpb24ud3JpdGUoKV07cmV0dXJuIHZBKCJyZ24yIixBLCEwKX10b1NGWm9uZShBLHQpe2xldCBuPXRbdGhpcy53YXZlTGluay50YWJsZUluZGV4XTtufHxWZS5wYXJzaW5nRXJyb3IoYEludmFsaWQgc2FtcGxlIGluZGV4OiAke3RoaXMud2F2ZUxpbmsudGFibGVJbmRleH1gKTtsZXQgcz1BLmNyZWF0ZVpvbmUobik7cmV0dXJuIHMua2V5UmFuZ2U9dGhpcy5rZXlSYW5nZSxzLnZlbFJhbmdlPXRoaXMudmVsUmFuZ2UsdGhpcy5rZXlSYW5nZS5tYXg9PT0xMjcmJnRoaXMua2V5UmFuZ2UubWluPT09MCYmKHMua2V5UmFuZ2UubWluPS0xKSx0aGlzLnZlbFJhbmdlLm1heD09PTEyNyYmdGhpcy52ZWxSYW5nZS5taW49PT0wJiYocy52ZWxSYW5nZS5taW49LTEpLHRoaXMua2V5R3JvdXAhPT0wJiZzLnNldEdlbmVyYXRvcihpLmV4Y2x1c2l2ZUNsYXNzLHRoaXMua2V5R3JvdXApLHRoaXMud2F2ZVNhbXBsZS50b1NGWm9uZShzLG4pLHRoaXMuYXJ0aWN1bGF0aW9uLnRvU0Zab25lKHMpLHMuZ2VuZXJhdG9ycz1zLmdlbmVyYXRvcnMuZmlsdGVyKGE9PmEuZ2VuZXJhdG9yVmFsdWUhPT14W2EuZ2VuZXJhdG9yVHlwZV0uZGVmKSxzfXdyaXRlSGVhZGVyKCl7bGV0IEE9bmV3IFkoMTIpO3JldHVybiBKKEEsTWF0aC5tYXgodGhpcy5rZXlSYW5nZS5taW4sMCkpLEooQSx0aGlzLmtleVJhbmdlLm1heCksSihBLE1hdGgubWF4KHRoaXMudmVsUmFuZ2UubWluLDApKSxKKEEsdGhpcy52ZWxSYW5nZS5tYXgpLEooQSx0aGlzLmZ1c09wdGlvbnMpLEooQSx0aGlzLmtleUdyb3VwKSxKKEEsdGhpcy51c0xheWVyKSxjQSgicmduaCIsQSl9fSxGbj1jbGFzcyB4dCBleHRlbmRzIGple2FydGljdWxhdGlvbj1uZXcgRGE7cmVnaW9ucz1uZXcgQXJyYXk7bmFtZT0iVW5uYW1lZCI7YmFua0xTQj0wO2JhbmtNU0I9MDtpc0dNR1NEcnVtPSExO3Byb2dyYW09MDtzdGF0aWMgY29weUZyb20oQSl7bGV0IHQ9bmV3IHh0O3JldHVybiB0Lm5hbWU9QS5uYW1lLHQuaXNHTUdTRHJ1bT1BLmlzR01HU0RydW0sdC5iYW5rTVNCPUEuYmFua01TQix0LmJhbmtMU0I9QS5iYW5rTFNCLHQucHJvZ3JhbT1BLnByb2dyYW0sdC5hcnRpY3VsYXRpb24uY29weUZyb20oQS5hcnRpY3VsYXRpb24pLEEucmVnaW9ucy5mb3JFYWNoKG49Pnt0LnJlZ2lvbnMucHVzaChUdC5jb3B5RnJvbShuKSl9KSx0fXN0YXRpYyByZWFkKEEsdCl7bGV0IG49dGhpcy52ZXJpZnlBbmRSZWFkTGlzdCh0LCJpbnMgIikscz1uLmZpbmQoaD0+aC5oZWFkZXI9PT0iaW5zaCIpO2lmKCFzKXRocm93IFooKSxuZXcgRXJyb3IoIk5vIGluc3RydW1lbnQgaGVhZGVyISIpO2xldCBhPSIiLHI9ZmUobiwiSU5GTyIpO2lmKHIpe2xldCBoPXJBKHIuZGF0YSk7Zm9yKDtoLmhlYWRlciE9PSJJTkFNIjspaD1yQShyLmRhdGEpO2E9aEEoaC5kYXRhLGguZGF0YS5sZW5ndGgpLnRyaW0oKX1hLmxlbmd0aDwxJiYoYT0iVW5uYW1lZCBJbnN0cnVtZW50Iik7bGV0IEk9bmV3IHh0O0kubmFtZT1hO2xldCBvPU4ocy5kYXRhLDQpLGc9TihzLmRhdGEsNCksQj1OKHMuZGF0YSw0KTtJLnByb2dyYW09QiYxMjcsSS5iYW5rTVNCPWc+Pj44JjEyNyxJLmJhbmtMU0I9ZyYxMjcsSS5pc0dNR1NEcnVtPWc+Pj4zMT4wLGJBKGAlY1BhcnNpbmcgJWMiJHthfSIlYy4uLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pO2xldCBkPWZlKG4sImxyZ24iKTtpZighZCl0aHJvdyBaKCksbmV3IEVycm9yKCJObyByZWdpb24gbGlzdCEiKTtJLmFydGljdWxhdGlvbi5yZWFkKG4pO2ZvcihsZXQgaD0wO2g8bztoKyspe2xldCBDPXJBKGQuZGF0YSk7dGhpcy52ZXJpZnlIZWFkZXIoQywiTElTVCIpO2xldCBRPWhBKEMuZGF0YSw0KTtRIT09InJnbiAiJiZRIT09InJnbjIiJiYoWigpLHRoaXMucGFyc2luZ0Vycm9yKGBJbnZhbGlkIERMUyByZWdpb24hIEV4cGVjdGVkICJyZ24gIiBvciAicmduMiIgZ290ICIke1F9ImApKTtsZXQgbT1UdC5yZWFkKEEsQyk7bSYmSS5yZWdpb25zLnB1c2gobSl9cmV0dXJuIFooKSxJfXN0YXRpYyBmcm9tU0ZQcmVzZXQoQSx0KXtsZXQgbj1uZXcgeHQ7cmV0dXJuIG4ubmFtZT1BLm5hbWUsbi5iYW5rTFNCPUEuYmFua0xTQixuLmJhbmtNU0I9QS5iYW5rTVNCLG4ucHJvZ3JhbT1BLnByb2dyYW0sbi5pc0dNR1NEcnVtPUEuaXNHTUdTRHJ1bSxPQShgJWNDb252ZXJ0aW5nICVjJHtBLnRvU3RyaW5nKCl9JWMgdG8gRExTLi4uYCxjLmluZm8sYy52YWx1ZSxjLmluZm8pLEEudG9GbGF0dGVuZWRJbnN0cnVtZW50KCkuem9uZXMuZm9yRWFjaChhPT57bi5yZWdpb25zLnB1c2goVHQuZnJvbVNGWm9uZShhLHQpKX0pLFooKSxufXdyaXRlKCl7YkEoYCVjV3JpdGluZyAlYyR7dGhpcy5uYW1lfSVjLi4uYCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyk7bGV0IEE9W3RoaXMud3JpdGVIZWFkZXIoKV0sdD10aGlzLnJlZ2lvbnMubWFwKHM9PnMud3JpdGUoKSk7QS5wdXNoKHZBKCJscmduIix0LCEwKSksdGhpcy5hcnRpY3VsYXRpb24ubGVuZ3RoPjAmJkEucHVzaCh0aGlzLmFydGljdWxhdGlvbi53cml0ZSgpKTtsZXQgbj1jQSgiSU5BTSIsbmUodGhpcy5uYW1lLCEwKSk7cmV0dXJuIEEucHVzaChjQSgiSU5GTyIsbiwhMSwhMCkpLFooKSx2QSgiaW5zICIsQSwhMCl9dG9TRlByZXNldChBKXtsZXQgdD1uZXcgcGUoQSk7dC5uYW1lPXRoaXMubmFtZSx0LmJhbmtNU0I9dGhpcy5iYW5rTVNCLHQuYmFua0xTQj10aGlzLmJhbmtMU0IsdC5pc0dNR1NEcnVtPXRoaXMuaXNHTUdTRHJ1bSx0LnByb2dyYW09dGhpcy5wcm9ncmFtO2xldCBuPW5ldyBkdDtuLm5hbWU9dGhpcy5uYW1lLHQuY3JlYXRlWm9uZShuKSx0aGlzLmFydGljdWxhdGlvbi50b1NGWm9uZShuLmdsb2JhbFpvbmUpLHRoaXMucmVnaW9ucy5mb3JFYWNoKHM9PnMudG9TRlpvbmUobixBLnNhbXBsZXMpKSxuLmdsb2JhbGl6ZSgpLG4uZ2xvYmFsWm9uZS5tb2R1bGF0b3JzLmZpbmQocz0+cy5kZXN0aW5hdGlvbj09PWkucmV2ZXJiRWZmZWN0c1NlbmQpPT09dm9pZCAwJiZuLmdsb2JhbFpvbmUuYWRkTW9kdWxhdG9ycyhFQS5jb3B5RnJvbSh5YSkpLG4uZ2xvYmFsWm9uZS5tb2R1bGF0b3JzLmZpbmQocz0+cy5kZXN0aW5hdGlvbj09PWkuY2hvcnVzRWZmZWN0c1NlbmQpPT09dm9pZCAwJiZuLmdsb2JhbFpvbmUuYWRkTW9kdWxhdG9ycyhFQS5jb3B5RnJvbShrYSkpLG4uZ2xvYmFsWm9uZS5nZW5lcmF0b3JzPW4uZ2xvYmFsWm9uZS5nZW5lcmF0b3JzLmZpbHRlcihzPT5zLmdlbmVyYXRvclZhbHVlIT09eFtzLmdlbmVyYXRvclR5cGVdLmRlZiksQS5hZGRQcmVzZXRzKHQpLEEuYWRkSW5zdHJ1bWVudHMobil9d3JpdGVIZWFkZXIoKXtsZXQgQT1uZXcgWSgxMik7Z0EoQSx0aGlzLnJlZ2lvbnMubGVuZ3RoKTtsZXQgdD0odGhpcy5iYW5rTVNCJjEyNyk8PDh8dGhpcy5iYW5rTFNCJjEyNztyZXR1cm4gdGhpcy5pc0dNR1NEcnVtJiYodHw9MTw8MzEpLGdBKEEsdCksZ0EoQSx0aGlzLnByb2dyYW0mMTI3KSxjQSgiaW5zaCIsQSl9fSx3YT17cHJvZ3Jlc3NGdW5jdGlvbjp2b2lkIDB9LEZhPWNsYXNzIF9uIGV4dGVuZHMgamV7c2FtcGxlcz1uZXcgQXJyYXk7aW5zdHJ1bWVudHM9bmV3IEFycmF5O3NvdW5kQmFua0luZm89e25hbWU6IlVubmFtZWQiLGNyZWF0aW9uRGF0ZTpuZXcgRGF0ZSxzb2Z0d2FyZToiU3Blc3NhU3ludGgiLHNvdW5kRW5naW5lOiJETFMgTGV2ZWwgMi4yIix2ZXJzaW9uOnttYWpvcjoyLG1pbm9yOjR9fTtzdGF0aWMgcmVhZChBKXtpZighQSl0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgcHJvdmlkZWQhIik7bGV0IHQ9bmV3IFkoQSk7T0EoIiVjUGFyc2luZyBETFMgZmlsZS4uLiIsYy5pbmZvKTtsZXQgbj1yQSh0LCExKTt0aGlzLnZlcmlmeUhlYWRlcihuLCJSSUZGIiksdGhpcy52ZXJpZnlUZXh0KGhBKHQsNCkudG9Mb3dlckNhc2UoKSwiZGxzICIpO2xldCBzPVtdO2Zvcig7dC5jdXJyZW50SW5kZXg8dC5sZW5ndGg7KXMucHVzaChyQSh0KSk7bGV0IGE9bmV3IF9uO2Euc291bmRCYW5rSW5mby5uYW1lPSJVbm5hbWVkIERMUyIsYS5zb3VuZEJhbmtJbmZvLnByb2R1Y3Q9IlNwZXNzYVN5bnRoIERMUyIsYS5zb3VuZEJhbmtJbmZvLmNvbW1lbnQ9IihubyBkZXNjcmlwdGlvbikiO2xldCByPWZlKHMsIklORk8iKTtpZihyKWZvcig7ci5kYXRhLmN1cnJlbnRJbmRleDxyLmRhdGEubGVuZ3RoOyl7bGV0IFE9ckEoci5kYXRhKSxtPVEuaGVhZGVyLHk9aEEoUS5kYXRhLFEuc2l6ZSk7c3dpdGNoKG0pe2Nhc2UiSU5BTSI6YS5zb3VuZEJhbmtJbmZvLm5hbWU9eTticmVhaztjYXNlIklDUkQiOmEuc291bmRCYW5rSW5mby5jcmVhdGlvbkRhdGU9dHMoeSk7YnJlYWs7Y2FzZSJJQ01UIjphLnNvdW5kQmFua0luZm8uY29tbWVudD15O2JyZWFrO2Nhc2UiSVNCSiI6YS5zb3VuZEJhbmtJbmZvLnN1YmplY3Q9eTticmVhaztjYXNlIklDT1AiOmEuc291bmRCYW5rSW5mby5jb3B5cmlnaHQ9eTticmVhaztjYXNlIklFTkciOmEuc291bmRCYW5rSW5mby5lbmdpbmVlcj15O2JyZWFrO2Nhc2UiSVBSRCI6YS5zb3VuZEJhbmtJbmZvLnByb2R1Y3Q9eTticmVhaztjYXNlIklTRlQiOmEuc291bmRCYW5rSW5mby5zb2Z0d2FyZT15fX10aGlzLnByaW50SW5mbyhhKTtsZXQgST1zLmZpbmQoUT0+US5oZWFkZXI9PT0iY29saCIpO2lmKCFJKXJldHVybiB0aGlzLnBhcnNpbmdFcnJvcigiTm8gY29saCBjaHVuayEiKSw1O2xldCBvPU4oSS5kYXRhLDQpO3AoYCVjSW5zdHJ1bWVudHMgYW1vdW50OiAlYyR7b31gLGMuaW5mbyxjLnJlY29nbml6ZWQpO2xldCBnPWZlKHMsInd2cGwiKTtpZighZylyZXR1cm4gdGhpcy5wYXJzaW5nRXJyb3IoIk5vIHd2cGwgY2h1bmshIiksNTt0aGlzLnZlcmlmeUFuZFJlYWRMaXN0KGcsInd2cGwiKS5mb3JFYWNoKFE9PnthLnNhbXBsZXMucHVzaChMcy5yZWFkKFEpKX0pO2xldCBkPWZlKHMsImxpbnMiKTtpZighZClyZXR1cm4gdGhpcy5wYXJzaW5nRXJyb3IoIk5vIGxpbnMgY2h1bmshIiksNTtsZXQgaD10aGlzLnZlcmlmeUFuZFJlYWRMaXN0KGQsImxpbnMiKTtiQSgiJWNMb2FkaW5nIGluc3RydW1lbnRzLi4uIixjLmluZm8pLGgubGVuZ3RoIT09byYmc0EoYENvbGggcmVwb3J0ZWQgaW52YWxpZCBhbW91bnQgb2YgaW5zdHJ1bWVudHMuIERldGVjdGVkICR7aC5sZW5ndGh9LCBleHBlY3RlZCAke299YCksaC5mb3JFYWNoKFE9PnthLmluc3RydW1lbnRzLnB1c2goRm4ucmVhZChhLnNhbXBsZXMsUSkpfSksWigpO2xldCBDPXMuZmluZChRPT5RLmhlYWRlcj09PSJwZ2FsIik7aWYoQyl7cCgiJWNGb3VuZCB0aGUgaW5zdHJ1bWVudCBhbGlhc2luZyBjaHVuayEiLGMucmVjb2duaXplZCk7bGV0IFE9Qy5kYXRhO1FbMF09PT0yJiZRWzFdK1FbMl0rUVszXT09PTAmJihRLmN1cnJlbnRJbmRleCs9NCk7bGV0IG09YS5pbnN0cnVtZW50cy5maW5kKEY9PmZBLmlzWEdEcnVtcyhGLmJhbmtNU0IpfHxGLmlzR01HU0RydW0pO2lmKCFtKXJldHVybiBzQSgiTW9iaWxlQkFFIGFsaWFzaW5nIGNodW5rIHdpdGhvdXQgYSBkcnVtIHByZXNldC4gQWJvcnRpbmchIiksYTtsZXQgeT1RLnNsaWNlKFEuY3VycmVudEluZGV4LFEuY3VycmVudEluZGV4KzEyOCk7US5jdXJyZW50SW5kZXgrPTEyODtmb3IobGV0IEY9MDtGPDEyODtGKyspe2xldCBrPXlbRl07aWYoaz09PUYpY29udGludWU7bGV0IEQ9bS5yZWdpb25zLmZpbmQoTD0+TC5rZXlSYW5nZS5tYXg9PT1rJiZMLmtleVJhbmdlLm1pbj09PWspO2lmKCFEKXtzQShgSW52YWxpZCBkcnVtIGFsaWFzICR7Rn0gdG8gJHtrfTogcmVnaW9uIGRvZXMgbm90IGV4aXN0LmApO2NvbnRpbnVlfWxldCB2PVR0LmNvcHlGcm9tKEQpO3Yua2V5UmFuZ2UubWF4PUYsdi5rZXlSYW5nZS5taW49RixtLnJlZ2lvbnMucHVzaCh2KX1mb3IoUS5jdXJyZW50SW5kZXgrPTQ7US5jdXJyZW50SW5kZXg8US5sZW5ndGg7KXtsZXQgRj1OKFEsMiksaz1GJjEyNyxEPUY+PjcmMTI3LHY9UVtRLmN1cnJlbnRJbmRleCsrXSxMPVFbUS5jdXJyZW50SW5kZXgrK107TCE9PTAmJnNBKGBJbnZhbGlkIGFsaWFzIGJ5dGUuIEV4cGVjdGVkIDAsIGdvdCAke0x9YCk7bGV0IEU9TihRLDIpLFg9RSYxMjcsTz1FPj43JjEyNyxuQT1RW1EuY3VycmVudEluZGV4KytdO0w9UVtRLmN1cnJlbnRJbmRleCsrXSxMIT09MCYmc0EoYEludmFsaWQgYWxpYXMgaGVhZGVyLiBFeHBlY3RlZCAwLCBnb3QgJHtMfWApO2xldCAkPWEuaW5zdHJ1bWVudHMuZmluZChxPT5xLmJhbmtMU0I9PT1YJiZxLmJhbmtNU0I9PT1PJiZxLnByb2dyYW09PT1uQSYmIXEuaXNHTUdTRHJ1bSk7aWYoISQpe3NBKGBJbnZhbGlkIGFsaWFzLiBNaXNzaW5nIGluc3RydW1lbnQ6ICR7WH06JHtPfToke25BfWApO2NvbnRpbnVlfWxldCBWPUZuLmNvcHlGcm9tKCQpO1YuYmFua01TQj1ELFYuYmFua0xTQj1rLFYucHJvZ3JhbT12LGEuaW5zdHJ1bWVudHMucHVzaChWKX19cmV0dXJuIHAoYCVjUGFyc2luZyBmaW5pc2hlZCEgJWMiJHthLnNvdW5kQmFua0luZm8ubmFtZXx8IlVOTkFNRUQifSIlYyBoYXMgJWMke2EuaW5zdHJ1bWVudHMubGVuZ3RofSVjIGluc3RydW1lbnRzIGFuZCAlYyR7YS5zYW1wbGVzLmxlbmd0aH0lYyBzYW1wbGVzLmAsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKSxaKCksYX1zdGF0aWMgZnJvbVNGKEEpe2JBKCIlY1NhdmluZyBTRjIgdG8gRExTIGxldmVsIDIuLi4iLGMuaW5mbyk7bGV0IHQ9bmV3IF9uO3JldHVybiB0LnNvdW5kQmFua0luZm89ey4uLkEuc291bmRCYW5rSW5mb30sdC5zb3VuZEJhbmtJbmZvLmNvbW1lbnQ9KHQuc291bmRCYW5rSW5mby5jb21tZW50Pz8iKE5vIGRlc2NyaXB0aW9uKSIpK2AKQ29udmVydGVkIGZyb20gU0YyIHRvIERMUyB3aXRoIFNwZXNzYVN5bnRoYCxBLnNhbXBsZXMuZm9yRWFjaChuPT57dC5zYW1wbGVzLnB1c2goTHMuZnJvbVNGU2FtcGxlKG4pKX0pLEEucHJlc2V0cy5mb3JFYWNoKG49Pnt0Lmluc3RydW1lbnRzLnB1c2goRm4uZnJvbVNGUHJlc2V0KG4sQS5zYW1wbGVzKSl9KSxwKCIlY0NvbnZlcnNpb24gY29tcGxldGUhIixjLnJlY29nbml6ZWQpLFooKSx0fXN0YXRpYyBwcmludEluZm8oQSl7Zm9yKGxldFt0LG5db2YgT2JqZWN0LmVudHJpZXMoQS5zb3VuZEJhbmtJbmZvKSl7aWYodHlwZW9mIG49PSJvYmplY3QiJiYibWFqb3IiaW4gbil7bGV0IHM9bjtwKGAlYyR7dH06ICVjIiR7cy5tYWpvcn0uJHtzLm1pbm9yfSJgLGMuaW5mbyxjLnJlY29nbml6ZWQpfXAoYCVjJHt0fTogJWMke24udG9Mb2NhbGVTdHJpbmcoKX1gLGMuaW5mbyxjLnJlY29nbml6ZWQpfX1hc3luYyB3cml0ZShBPXdhKXtiQSgiJWNTYXZpbmcgRExTLi4uIixjLmluZm8pO2xldCB0PW5ldyBZKDQpO2dBKHQsdGhpcy5pbnN0cnVtZW50cy5sZW5ndGgpO2xldCBuPWNBKCJjb2xoIix0KTtiQSgiJWNXcml0aW5nIGluc3RydW1lbnRzLi4uIixjLmluZm8pO2xldCBzPXZBKCJsaW5zIix0aGlzLmluc3RydW1lbnRzLm1hcCh5PT55LndyaXRlKCkpLCEwKTtwKCIlY1N1Y2Nlc3MhIixjLnJlY29nbml6ZWQpLFooKSxiQSgiJWNXcml0aW5nIFdBVkUgc2FtcGxlcy4uLiIsYy5pbmZvKTtsZXQgYT0wLHI9W10sST1bXSxvPTA7Zm9yKGxldCB5IG9mIHRoaXMuc2FtcGxlcyl7bGV0IEY9eS53cml0ZSgpO2F3YWl0IEE/LnByb2dyZXNzRnVuY3Rpb24/Lih5Lm5hbWUsbyx0aGlzLnNhbXBsZXMubGVuZ3RoKSxyLnB1c2goYSksYSs9Ri5sZW5ndGgsSS5wdXNoKEYpLG8rK31sZXQgZz12QSgid3ZwbCIsSSwhMCk7cCgiJWNTdWNjZWVkZWQhIixjLnJlY29nbml6ZWQpO2xldCBCPW5ldyBZKDgrNCpyLmxlbmd0aCk7Z0EoQiw4KSxnQShCLHIubGVuZ3RoKTtmb3IobGV0IHkgb2YgcilnQShCLHkpO2xldCBkPWNBKCJwdGJsIixCKTt0aGlzLnNvdW5kQmFua0luZm8uc29mdHdhcmU9IlNwZXNzYVN5bnRoIjtsZXQgaD1bXSxDPSh5LEYpPT57aC5wdXNoKGNBKHksbmUoRiwhMCkpKX07Zm9yKGxldFt5LEZdb2YgT2JqZWN0LmVudHJpZXModGhpcy5zb3VuZEJhbmtJbmZvKSl7bGV0IGs9eSxEPUY7aWYoRClzd2l0Y2goayl7Y2FzZSJuYW1lIjpDKCJJTkFNIixEKTticmVhaztjYXNlImNvbW1lbnQiOkMoIklDTVQiLEQpO2JyZWFrO2Nhc2UiY29weXJpZ2h0IjpDKCJJQ09QIixEKTticmVhaztjYXNlImNyZWF0aW9uRGF0ZSI6QygiSUNSRCIsRC50b0lTT1N0cmluZygpKTticmVhaztjYXNlImVuZ2luZWVyIjpDKCJJRU5HIixEKTticmVhaztjYXNlInByb2R1Y3QiOkMoIklQUkQiLEQpO2JyZWFrO2Nhc2Uicm9tVmVyc2lvbiI6Y2FzZSJ2ZXJzaW9uIjpjYXNlInNvdW5kRW5naW5lIjpjYXNlInJvbUluZm8iOmJyZWFrO2Nhc2Uic29mdHdhcmUiOkMoIklTRlQiLEQpO2JyZWFrO2Nhc2Uic3ViamVjdCI6QygiSVNCSiIsRCl9fWxldCBRPXZBKCJJTkZPIixoLCEwKTtwKCIlY0NvbWJpbmluZyBldmVyeXRoaW5nLi4uIik7bGV0IG09dkEoIlJJRkYiLFtuZSgiRExTICIpLG4scyxkLGcsUV0pO3JldHVybiBwKCIlY1NhdmVkIHN1Y2Nlc3NmdWxseSEiLGMucmVjb2duaXplZCksWigpLG0uYnVmZmVyfXRvU0YoKXtPQSgiJWNDb252ZXJ0aW5nIERMUyB0byBTRjIuLi4iLGMuaW5mbyk7bGV0IEE9bmV3IEdhO3JldHVybiBBLnNvdW5kQmFua0luZm8udmVyc2lvbi5taW5vcj00LEEuc291bmRCYW5rSW5mby52ZXJzaW9uLm1ham9yPTIsQS5zb3VuZEJhbmtJbmZvPXsuLi50aGlzLnNvdW5kQmFua0luZm99LEEuc291bmRCYW5rSW5mby5jb21tZW50PShBLnNvdW5kQmFua0luZm8uY29tbWVudD8/IihObyBkZXNjcmlwdGlvbikiKStgCkNvbnZlcnRlZCBmcm9tIERMUyB0byBTRjIgd2l0aCBTcGVzc2FTeW50aGAsdGhpcy5zYW1wbGVzLmZvckVhY2godD0+e3QudG9TRlNhbXBsZShBKX0pLHRoaXMuaW5zdHJ1bWVudHMuZm9yRWFjaCh0PT57dC50b1NGUHJlc2V0KEEpfSksQS5mbHVzaCgpLHAoIiVjQ29udmVyc2lvbiBjb21wbGV0ZSEiLGMucmVjb2duaXplZCksWigpLEF9fSxHYT1jbGFzcyBIdHtzdGF0aWMgaXNTRjNEZWNvZGVyUmVhZHk9T3QuaXNJbml0aWFsaXplZDtzb3VuZEJhbmtJbmZvPXtuYW1lOiJVbm5hbWVkIixjcmVhdGlvbkRhdGU6bmV3IERhdGUsc29mdHdhcmU6IlNwZXNzYVN5bnRoIixzb3VuZEVuZ2luZToiRS1tdSAxMEsyIix2ZXJzaW9uOnttYWpvcjoyLG1pbm9yOjR9fTtwcmVzZXRzPVtdO3NhbXBsZXM9W107aW5zdHJ1bWVudHM9W107ZGVmYXVsdE1vZHVsYXRvcnM9RWEubWFwKEVBLmNvcHlGcm9tLmJpbmQoRUEpKTtjdXN0b21EZWZhdWx0TW9kdWxhdG9ycz0hMTtfaXNYR0Jhbms9ITE7Z2V0IGlzWEdCYW5rKCl7cmV0dXJuIHRoaXMuX2lzWEdCYW5rfXN0YXRpYyBtZXJnZVNvdW5kQmFua3MoLi4uQSl7bGV0IHQ9QS5zaGlmdCgpO2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm8gc291bmQgYmFua3MgcHJvdmlkZWQhIik7bGV0IG49dC5wcmVzZXRzO2Zvcig7QS5sZW5ndGg7KXtsZXQgYT1BPy5zaGlmdCgpPy5wcmVzZXRzO2EmJmEuZm9yRWFjaChyPT57bi5maW5kKEk9PnIubWF0Y2hlcyhJKSk9PT12b2lkIDAmJm4ucHVzaChyKX0pfWxldCBzPW5ldyBIdDtyZXR1cm4gcy5hZGRDb21wbGV0ZVByZXNldHMobikscy5zb3VuZEJhbmtJbmZvPXsuLi50LnNvdW5kQmFua0luZm99LHN9c3RhdGljIGFzeW5jIGdldFNhbXBsZVNvdW5kQmFua0ZpbGUoKXtsZXQgQT1uZXcgSHQsdD1uZXcgRmxvYXQzMkFycmF5KDEyOCk7Zm9yKGxldCBJPTA7STwxMjg7SSsrKXRbSV09SS8xMjgqMi0xO2xldCBuPW5ldyBtcjtuLm5hbWU9IlNhdyIsbi5vcmlnaW5hbEtleT02NSxuLnBpdGNoQ29ycmVjdGlvbj0yMCxuLmxvb3BFbmQ9MTI3LG4uc2V0QXVkaW9EYXRhKHQsNDQxMDApLEEuYWRkU2FtcGxlcyhuKTtsZXQgcz1uZXcgZHQ7cy5uYW1lPSJTYXcgV2F2ZSIscy5nbG9iYWxab25lLmFkZEdlbmVyYXRvcnMobmV3IEZBKGkuaW5pdGlhbEF0dGVudWF0aW9uLDM3NSksbmV3IEZBKGkucmVsZWFzZVZvbEVudiwtMWUzKSxuZXcgRkEoaS5zYW1wbGVNb2RlcywxKSkscy5jcmVhdGVab25lKG4pLHMuY3JlYXRlWm9uZShuKS5hZGRHZW5lcmF0b3JzKG5ldyBGQShpLmZpbmVUdW5lLC05KSksQS5hZGRJbnN0cnVtZW50cyhzKTtsZXQgcj1uZXcgcGUoQSk7cmV0dXJuIHIubmFtZT0iU2F3IFdhdmUiLHIuY3JlYXRlWm9uZShzKSxBLmFkZFByZXNldHMociksQS5zb3VuZEJhbmtJbmZvLm5hbWU9IkR1bW15IixBLmZsdXNoKCksYXdhaXQgQS53cml0ZVNGMigpfXN0YXRpYyBjb3B5RnJvbShBKXtsZXQgdD1uZXcgSHQ7cmV0dXJuIEEucHJlc2V0cy5mb3JFYWNoKG49PnQuY2xvbmVQcmVzZXQobikpLHQuc291bmRCYW5rSW5mbz17Li4uQS5zb3VuZEJhbmtJbmZvfSx0fWFkZENvbXBsZXRlUHJlc2V0cyhBKXt0aGlzLmFkZFByZXNldHMoLi4uQSk7bGV0IHQ9W107Zm9yKGxldCBzIG9mIEEpZm9yKGxldCBhIG9mIHMuem9uZXMpYS5pbnN0cnVtZW50JiYhdC5pbmNsdWRlcyhhLmluc3RydW1lbnQpJiZ0LnB1c2goYS5pbnN0cnVtZW50KTt0aGlzLmFkZEluc3RydW1lbnRzKC4uLnQpO2xldCBuPVtdO2ZvcihsZXQgcyBvZiB0KWZvcihsZXQgYSBvZiBzLnpvbmVzKWEuc2FtcGxlJiYhbi5pbmNsdWRlcyhhLnNhbXBsZSkmJm4ucHVzaChhLnNhbXBsZSk7dGhpcy5hZGRTYW1wbGVzKC4uLm4pfWFzeW5jIHdyaXRlRExTKEE9d2Epe3JldHVybiBGYS5mcm9tU0YodGhpcykud3JpdGUoQSl9YXN5bmMgd3JpdGVTRjIoQT1Ybil7cmV0dXJuIGtyKHRoaXMsQSl9YWRkUHJlc2V0cyguLi5BKXt0aGlzLnByZXNldHMucHVzaCguLi5BKX1hZGRJbnN0cnVtZW50cyguLi5BKXt0aGlzLmluc3RydW1lbnRzLnB1c2goLi4uQSl9YWRkU2FtcGxlcyguLi5BKXt0aGlzLnNhbXBsZXMucHVzaCguLi5BKX1jbG9uZVNhbXBsZShBKXtsZXQgdD10aGlzLnNhbXBsZXMuZmluZChzPT5zLm5hbWU9PT1BLm5hbWUpO2lmKHQpcmV0dXJuIHQ7bGV0IG49bmV3IFp0KEEubmFtZSxBLnNhbXBsZVJhdGUsQS5vcmlnaW5hbEtleSxBLnBpdGNoQ29ycmVjdGlvbixBLnNhbXBsZVR5cGUsQS5sb29wU3RhcnQsQS5sb29wRW5kKTtpZihBLmlzQ29tcHJlc3NlZD9uLnNldENvbXByZXNzZWREYXRhKEEuZ2V0UmF3RGF0YSghMCkpOm4uc2V0QXVkaW9EYXRhKEEuZ2V0QXVkaW9EYXRhKCksQS5zYW1wbGVSYXRlKSx0aGlzLmFkZFNhbXBsZXMobiksQS5saW5rZWRTYW1wbGUpe2xldCBzPXRoaXMuY2xvbmVTYW1wbGUoQS5saW5rZWRTYW1wbGUpO3MubGlua2VkU2FtcGxlfHxuLnNldExpbmtlZFNhbXBsZShzLG4uc2FtcGxlVHlwZSl9cmV0dXJuIG59Y2xvbmVJbnN0cnVtZW50KEEpe2xldCB0PXRoaXMuaW5zdHJ1bWVudHMuZmluZChzPT5zLm5hbWU9PT1BLm5hbWUpO2lmKHQpcmV0dXJuIHQ7bGV0IG49bmV3IGR0O24ubmFtZT1BLm5hbWUsbi5nbG9iYWxab25lLmNvcHlGcm9tKEEuZ2xvYmFsWm9uZSk7Zm9yKGxldCBzIG9mIEEuem9uZXMpbi5jcmVhdGVab25lKHRoaXMuY2xvbmVTYW1wbGUocy5zYW1wbGUpKS5jb3B5RnJvbShzKTtyZXR1cm4gdGhpcy5hZGRJbnN0cnVtZW50cyhuKSxufWNsb25lUHJlc2V0KEEpe2xldCB0PXRoaXMucHJlc2V0cy5maW5kKHM9PnMubmFtZT09PUEubmFtZSk7aWYodClyZXR1cm4gdDtsZXQgbj1uZXcgcGUodGhpcyk7bi5uYW1lPUEubmFtZSxuLmJhbmtNU0I9QS5iYW5rTVNCLG4uYmFua0xTQj1BLmJhbmtMU0Isbi5pc0dNR1NEcnVtPUEuaXNHTUdTRHJ1bSxuLnByb2dyYW09QS5wcm9ncmFtLG4ubGlicmFyeT1BLmxpYnJhcnksbi5nZW5yZT1BLmdlbnJlLG4ubW9ycGhvbG9neT1BLm1vcnBob2xvZ3ksbi5nbG9iYWxab25lLmNvcHlGcm9tKEEuZ2xvYmFsWm9uZSk7Zm9yKGxldCBzIG9mIEEuem9uZXMpbi5jcmVhdGVab25lKHRoaXMuY2xvbmVJbnN0cnVtZW50KHMuaW5zdHJ1bWVudCkpLmNvcHlGcm9tKHMpO3JldHVybiB0aGlzLmFkZFByZXNldHMobiksbn1mbHVzaCgpe3RoaXMucHJlc2V0cy5zb3J0KHRlLnNvcnRlci5iaW5kKHRlKSksdGhpcy5wYXJzZUludGVybmFsKCl9dHJpbVNvdW5kQmFuayhBKXtsZXQgdD0ocyxhKT0+e2xldCByPTA7Zm9yKGxldCBJPTA7STxzLnpvbmVzLmxlbmd0aDtJKyspe2xldCBvPXMuem9uZXNbSV0sZz1vLmtleVJhbmdlLEI9by52ZWxSYW5nZSxkPSExO2ZvcihsZXQgaCBvZiBhKWlmKGgua2V5Pj1nLm1pbiYmaC5rZXk8PWcubWF4JiZoLnZlbG9jaXR5Pj1CLm1pbiYmaC52ZWxvY2l0eTw9Qi5tYXgpe2Q9ITA7YnJlYWt9IWQmJm8uc2FtcGxlJiYocChgJWMke28uc2FtcGxlLm5hbWV9JWMgcmVtb3ZlZCBmcm9tICVjJHtzLm5hbWV9JWMuYCxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pLHMuZGVsZXRlWm9uZShJKSYmKHIrKyxJLS0scChgJWMke28uc2FtcGxlLm5hbWV9JWMgZGVsZXRlZGAsYy5yZWNvZ25pemVkLGMuaW5mbykpLG8uc2FtcGxlLnVzZUNvdW50PDEmJnRoaXMuZGVsZXRlU2FtcGxlKG8uc2FtcGxlKSl9cmV0dXJuIHJ9O09BKCIlY1RyaW1taW5nIHNvdW5kIGJhbmsuLi4iLGMuaW5mbyk7bGV0IG49QS5nZXRVc2VkUHJvZ3JhbXNBbmRLZXlzKHRoaXMpO2JBKCIlY01vZGlmeWluZyBzb3VuZCBiYW5rLi4uIixjLmluZm8pLHAoIkRldGVjdGVkIGtleXMgZm9yIG1pZGk6IixuKTtmb3IobGV0IHM9MDtzPHRoaXMucHJlc2V0cy5sZW5ndGg7cysrKXtsZXQgYT10aGlzLnByZXNldHNbc10scj1uLmdldChhKTtpZihyPT09dm9pZCAwKXAoYCVjRGVsZXRpbmcgcHJlc2V0ICVjJHthLm5hbWV9JWMgYW5kIGl0cyB6b25lc2AsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8pLHRoaXMuZGVsZXRlUHJlc2V0KGEpLHMtLTtlbHNle2xldCBJPVsuLi5yXS5tYXAoZz0+e2xldCBCPWcuc3BsaXQoIi0iKTtyZXR1cm57a2V5OnBhcnNlSW50KEJbMF0pLHZlbG9jaXR5OnBhcnNlSW50KEJbMV0pfX0pO2JBKGAlY1RyaW1taW5nICVjJHthLm5hbWV9YCxjLmluZm8sYy5yZWNvZ25pemVkKSxwKGBLZXlzIGZvciAke2EubmFtZX06YCxJKTtsZXQgbz0wO2ZvcihsZXQgZz0wO2c8YS56b25lcy5sZW5ndGg7ZysrKXtsZXQgQj1hLnpvbmVzW2ddLGQ9Qi5rZXlSYW5nZSxoPUIudmVsUmFuZ2UsQz0hMTtmb3IobGV0IFEgb2YgSSlpZihRLmtleT49ZC5taW4mJlEua2V5PD1kLm1heCYmUS52ZWxvY2l0eT49aC5taW4mJlEudmVsb2NpdHk8PWgubWF4JiZCLmluc3RydW1lbnQpe0M9ITA7bGV0IG09dChCLmluc3RydW1lbnQsSSk7cChgJWNUcmltbWVkIG9mZiAlYyR7bX0lYyB6b25lcyBmcm9tICVjJHtCLmluc3RydW1lbnQubmFtZX1gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCk7YnJlYWt9IUMmJkIuaW5zdHJ1bWVudCYmKG8rKyxhLmRlbGV0ZVpvbmUoZyksQi5pbnN0cnVtZW50LnVzZUNvdW50PDEmJnRoaXMuZGVsZXRlSW5zdHJ1bWVudChCLmluc3RydW1lbnQpLGctLSl9cChgJWNUcmltbWVkIG9mZiAlYyR7b30lYyB6b25lcyBmcm9tICVjJHthLm5hbWV9YCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQpLFooKX19dGhpcy5yZW1vdmVVbnVzZWRFbGVtZW50cygpLHAoIiVjU291bmQgYmFuayBtb2RpZmllZCEiLGMucmVjb2duaXplZCksWigpLFooKX1yZW1vdmVVbnVzZWRFbGVtZW50cygpe3RoaXMuaW5zdHJ1bWVudHM9dGhpcy5pbnN0cnVtZW50cy5maWx0ZXIoQT0+e0EuZGVsZXRlVW51c2VkWm9uZXMoKTtsZXQgdD1BLnVzZUNvdW50PDE7cmV0dXJuIHQmJkEuZGVsZXRlKCksIXR9KSx0aGlzLnNhbXBsZXM9dGhpcy5zYW1wbGVzLmZpbHRlcihBPT57bGV0IHQ9QS51c2VDb3VudDwxO3JldHVybiB0JiZBLnVubGlua1NhbXBsZSgpLCF0fSl9ZGVsZXRlSW5zdHJ1bWVudChBKXtBLmRlbGV0ZSgpLHRoaXMuaW5zdHJ1bWVudHMuc3BsaWNlKHRoaXMuaW5zdHJ1bWVudHMuaW5kZXhPZihBKSwxKX1kZWxldGVQcmVzZXQoQSl7QS5kZWxldGUoKSx0aGlzLnByZXNldHMuc3BsaWNlKHRoaXMucHJlc2V0cy5pbmRleE9mKEEpLDEpfWRlbGV0ZVNhbXBsZShBKXtBLnVubGlua1NhbXBsZSgpLHRoaXMuc2FtcGxlcy5zcGxpY2UodGhpcy5zYW1wbGVzLmluZGV4T2YoQSksMSl9Z2V0UHJlc2V0KEEsdCl7cmV0dXJuIFFhKHRoaXMucHJlc2V0cyxBLHQpfWRlc3Ryb3lTb3VuZEJhbmsoKXt0aGlzLnByZXNldHMubGVuZ3RoPTAsdGhpcy5pbnN0cnVtZW50cy5sZW5ndGg9MCx0aGlzLnNhbXBsZXMubGVuZ3RoPTB9cGFyc2luZ0Vycm9yKEEpe3Rocm93IG5ldyBFcnJvcihgU0YgcGFyc2luZyBlcnJvcjogJHtBfSBUaGUgZmlsZSBtYXkgYmUgY29ycnVwdGVkLmApfXBhcnNlSW50ZXJuYWwoKXt0aGlzLl9pc1hHQmFuaz0hMTtsZXQgQT1uZXcgU2V0KFswLDEsMiwzLDQsNSw2LDcsOCw5LDE2LDE3LDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDQwLDQxLDQ4LDU2LDU3LDU4LDY0LDY1LDY2LDEyNiwxMjddKTtmb3IobGV0IHQgb2YgdGhpcy5wcmVzZXRzKWlmKGZBLmlzWEdEcnVtcyh0LmJhbmtNU0IpJiYodGhpcy5faXNYR0Jhbms9ITAsIUEuaGFzKHQucHJvZ3JhbSkpKXt0aGlzLl9pc1hHQmFuaz0hMSxwKGAlY1RoaXMgYmFuayBpcyBub3QgdmFsaWQgWEcuIFByZXNldCAlYyR7dC50b1N0cmluZygpfSVjIGlzIG5vdCBhIHZhbGlkIFhHIGRydW0uIFhHIG1vZGUgd2lsbCB1c2UgcHJlc2V0cyBvbiBiYW5rIDEyOC5gLGMuaW5mbyxjLnZhbHVlLGMuaW5mbyk7YnJlYWt9fXByaW50SW5mbygpe2ZvcihsZXRbQSx0XW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc291bmRCYW5rSW5mbykpe2lmKHR5cGVvZiB0PT0ib2JqZWN0IiYmIm1ham9yImluIHQpe2xldCBuPXQ7cChgJWMke0F9OiAlYyIke24ubWFqb3J9LiR7bi5taW5vcn0iYCxjLmluZm8sYy5yZWNvZ25pemVkKX1wKGAlYyR7QX06ICVjJHt0LnRvTG9jYWxlU3RyaW5nKCl9YCxjLmluZm8sYy5yZWNvZ25pemVkKX19fSxicj1jbGFzcyBleHRlbmRzIEZBe2NvbnN0cnVjdG9yKGUpe2xldCBBPWUuY3VycmVudEluZGV4LHQ9ZVtBKzFdPDw4fGVbQV0sbj1qbihlW0ErMl0sZVtBKzNdKTtlLmN1cnJlbnRJbmRleCs9NCxzdXBlcih0LG4sITEpfX07ZnVuY3Rpb24gTnMoZSl7bGV0IEE9W107Zm9yKDtlLmRhdGEubGVuZ3RoPmUuZGF0YS5jdXJyZW50SW5kZXg7KUEucHVzaChuZXcgYnIoZS5kYXRhKSk7cmV0dXJuIEEucG9wKCksQX12YXIgdnI9Y2xhc3MgZXh0ZW5kcyBDYXtjb25zdHJ1Y3RvcihlLEEsdCxuKXtsZXQgcz10LmZpbmQocj0+ci5nZW5lcmF0b3JUeXBlPT09aS5pbnN0cnVtZW50KSxhO2lmKHMpYT1uW3MuZ2VuZXJhdG9yVmFsdWVdO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJObyBpbnN0cnVtZW50IElEIGZvdW5kIGluIHByZXNldCB6b25lLiIpO2lmKCFhKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBpbnN0cnVtZW50IElEOiAke3MuZ2VuZXJhdG9yVmFsdWV9LCBhdmFpbGFibGUgaW5zdHJ1bWVudHM6ICR7bi5sZW5ndGh9YCk7c3VwZXIoZSxhKSx0aGlzLmFkZEdlbmVyYXRvcnMoLi4udCksdGhpcy5hZGRNb2R1bGF0b3JzKC4uLkEpfX07ZnVuY3Rpb24gTHIoZSxBLHQsbixzKXtsZXQgYT1lLmdlbixyPWUubW9kLEk9MCxvPTA7Zm9yKGxldCBnIG9mIHMpZm9yKGxldCBCPTA7QjxnLnpvbmVzQ291bnQ7QisrKXtsZXQgZD1hW28rK10saD1hW29dLEM9QS5zbGljZShkLGgpLFE9cltJKytdLG09cltJXSx5PXQuc2xpY2UoUSxtKTtDLmZpbmQoRj0+Ri5nZW5lcmF0b3JUeXBlPT09aS5pbnN0cnVtZW50KSE9PXZvaWQgMD9nLmNyZWF0ZVNvdW5kRm9udFpvbmUoeSxDLG4pOihnLmdsb2JhbFpvbmUuYWRkR2VuZXJhdG9ycyguLi5DKSxnLmdsb2JhbFpvbmUuYWRkTW9kdWxhdG9ycyguLi55KSl9fXZhciBOcj1jbGFzcyBleHRlbmRzIHBle3pvbmVTdGFydEluZGV4O3pvbmVzQ291bnQ9MDtjb25zdHJ1Y3RvcihlLEEpe3N1cGVyKEEpLHRoaXMubmFtZT1oQShlLmRhdGEsMjApLnJlcGxhY2UoL1xkezN9OlxkezN9LywiIiksdGhpcy5wcm9ncmFtPU4oZS5kYXRhLDIpO2xldCB0PU4oZS5kYXRhLDIpO3RoaXMuYmFua01TQj10JjEyNyx0aGlzLmlzR01HU0RydW09KHQmMTI4KT4wLHRoaXMuYmFua0xTQj10Pj44LHRoaXMuem9uZVN0YXJ0SW5kZXg9TihlLmRhdGEsMiksdGhpcy5saWJyYXJ5PU4oZS5kYXRhLDQpLHRoaXMuZ2VucmU9TihlLmRhdGEsNCksdGhpcy5tb3JwaG9sb2d5PU4oZS5kYXRhLDQpfWNyZWF0ZVNvdW5kRm9udFpvbmUoZSxBLHQpe2xldCBuPW5ldyB2cih0aGlzLGUsQSx0KTtyZXR1cm4gdGhpcy56b25lcy5wdXNoKG4pLG59fTtmdW5jdGlvbiBVcyhlLEEpe2xldCB0PVtdO2Zvcig7ZS5kYXRhLmxlbmd0aD5lLmRhdGEuY3VycmVudEluZGV4Oyl7bGV0IG49bmV3IE5yKGUsQSk7aWYodC5sZW5ndGg+MCl7bGV0IHM9dFt0Lmxlbmd0aC0xXTtzLnpvbmVzQ291bnQ9bi56b25lU3RhcnRJbmRleC1zLnpvbmVTdGFydEluZGV4fXQucHVzaChuKX1yZXR1cm4gdC5wb3AoKSx0fXZhciBVcj1jbGFzcyBleHRlbmRzIGhhe2NvbnN0cnVjdG9yKGUsQSx0LG4pe2xldCBzPXQuZmluZChyPT5yLmdlbmVyYXRvclR5cGU9PT1pLnNhbXBsZUlEKSxhO2lmKHMpYT1uW3MuZ2VuZXJhdG9yVmFsdWVdO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJObyBzYW1wbGUgSUQgZm91bmQgaW4gaW5zdHJ1bWVudCB6b25lLiIpO2lmKCFhKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzYW1wbGUgSUQ6ICR7cy5nZW5lcmF0b3JWYWx1ZX0sIGF2YWlsYWJsZSBzYW1wbGVzOiAke24ubGVuZ3RofWApO3N1cGVyKGUsYSksdGhpcy5hZGRHZW5lcmF0b3JzKC4uLnQpLHRoaXMuYWRkTW9kdWxhdG9ycyguLi5BKX19O2Z1bmN0aW9uIFRyKGUsQSx0LG4scyl7bGV0IGE9ZS5nZW4scj1lLm1vZCxJPTAsbz0wO2ZvcihsZXQgZyBvZiBzKWZvcihsZXQgQj0wO0I8Zy56b25lc0NvdW50O0IrKyl7bGV0IGQ9YVtvKytdLGg9YVtvXSxDPUEuc2xpY2UoZCxoKSxRPXJbSSsrXSxtPXJbSV0seT10LnNsaWNlKFEsbSk7Qy5maW5kKEY9PkYuZ2VuZXJhdG9yVHlwZT09PWkuc2FtcGxlSUQpP2cuY3JlYXRlU291bmRGb250Wm9uZSh5LEMsbik6KGcuZ2xvYmFsWm9uZS5hZGRHZW5lcmF0b3JzKC4uLkMpLGcuZ2xvYmFsWm9uZS5hZGRNb2R1bGF0b3JzKC4uLnkpKX19dmFyIHhyPWNsYXNzIGV4dGVuZHMgZHR7em9uZVN0YXJ0SW5kZXg7em9uZXNDb3VudD0wO2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5uYW1lPWhBKGUuZGF0YSwyMCksdGhpcy56b25lU3RhcnRJbmRleD1OKGUuZGF0YSwyKX1jcmVhdGVTb3VuZEZvbnRab25lKGUsQSx0KXtsZXQgbj1uZXcgVXIodGhpcyxlLEEsdCk7cmV0dXJuIHRoaXMuem9uZXMucHVzaChuKSxufX07ZnVuY3Rpb24gVHMoZSl7bGV0IEE9W107Zm9yKDtlLmRhdGEubGVuZ3RoPmUuZGF0YS5jdXJyZW50SW5kZXg7KXtsZXQgdD1uZXcgeHIoZSk7aWYoQS5sZW5ndGg+MCl7bGV0IG49QVtBLmxlbmd0aC0xXTtuLnpvbmVzQ291bnQ9dC56b25lU3RhcnRJbmRleC1uLnpvbmVTdGFydEluZGV4fUEucHVzaCh0KX1yZXR1cm4gQS5wb3AoKSxBfWZ1bmN0aW9uIEduKGUpe2xldCBBPVtdO2Zvcig7ZS5kYXRhLmxlbmd0aD5lLmRhdGEuY3VycmVudEluZGV4Oyl7bGV0IHQ9ZS5kYXRhLG49Tih0LDIpLHM9Tih0LDIpLGE9am4odFt0LmN1cnJlbnRJbmRleCsrXSx0W3QuY3VycmVudEluZGV4KytdKSxyPU4odCwyKSxJPU4odCwyKTtBLnB1c2gobmV3IHlBKG4scixzLGEsSSkpfXJldHVybiBBLnBvcCgpLEF9ZnVuY3Rpb24gYnQoZSl7bGV0IEE9W10sdD1bXTtmb3IoO2UuZGF0YS5sZW5ndGg+ZS5kYXRhLmN1cnJlbnRJbmRleDspdC5wdXNoKE4oZS5kYXRhLDIpKSxBLnB1c2goTihlLmRhdGEsMikpO3JldHVybnttb2Q6QSxnZW46dH19dmFyIEhyPWNsYXNzIGV4dGVuZHMgR2F7c2FtcGxlRGF0YVN0YXJ0SW5kZXg9MDtjb25zdHJ1Y3RvcihlLEE9ITApe2lmKHN1cGVyKCksQSl0aHJvdyBuZXcgRXJyb3IoIlVzaW5nIHRoZSBjb25zdHJ1Y3RvciBkaXJlY3RseSBpcyBkZXByZWNhdGVkLiBVc2UgU291bmRCYW5rTG9hZGVyLmZyb21BcnJheUJ1ZmZlcigpIGluc3RlYWQuIik7bGV0IHQ9bmV3IFkoZSk7T0EoIiVjUGFyc2luZyBhIFNvdW5kRm9udDIgZmlsZS4uLiIsYy5pbmZvKSx0fHwoWigpLHRoaXMucGFyc2luZ0Vycm9yKCJObyBkYXRhIHByb3ZpZGVkISIpKTtsZXQgbj1yQSh0LCExKTt0aGlzLnZlcmlmeUhlYWRlcihuLCJyaWZmIik7bGV0IHM9aEEodCw0KS50b0xvd2VyQ2FzZSgpO2lmKHMhPT0ic2ZiayImJnMhPT0ic2ZwayIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBzb3VuZEZvbnQhIEV4cGVjdGVkICJzZmJrIiBvciAic2ZwayIgZ290ICIke3N9ImApO2xldCBhPXM9PT0ic2ZwayIscj1yQSh0KTt0aGlzLnZlcmlmeUhlYWRlcihyLCJsaXN0Iik7bGV0IEk9aEEoci5kYXRhLDQpO2lmKEkhPT0iSU5GTyIpdGhyb3cgWigpLG5ldyBTeW50YXhFcnJvcihgSW52YWxpZCBzb3VuZEZvbnQhIEV4cGVjdGVkICJJTkZPIiBvciAiJHtJfSJgKTtsZXQgbztmb3IoO3IuZGF0YS5sZW5ndGg+ci5kYXRhLmN1cnJlbnRJbmRleDspe2xldCBQPXJBKHIuZGF0YSksRz1lZShQLmRhdGEsUC5kYXRhLmxlbmd0aCksYj1QLmhlYWRlcjtzd2l0Y2goYil7Y2FzZSJpZmlsIjpjYXNlIml2ZXIiOmxldCBLPU4oUC5kYXRhLDIpLGVBPU4oUC5kYXRhLDIpO2I9PT0iaWZpbCI/dGhpcy5zb3VuZEJhbmtJbmZvLnZlcnNpb249e21ham9yOkssbWlub3I6ZUF9OnRoaXMuc291bmRCYW5rSW5mby5yb21WZXJzaW9uPXttYWpvcjpLLG1pbm9yOmVBfTticmVhaztjYXNlIkRNT0QiOnt0aGlzLmRlZmF1bHRNb2R1bGF0b3JzPUduKFApLHRoaXMuY3VzdG9tRGVmYXVsdE1vZHVsYXRvcnM9ITA7YnJlYWt9Y2FzZSJMSVNUIjp7aEEoUC5kYXRhLDQpPT09InhkdGEiJiYocCgiJWNFeHRlbmRlZCBTRjIgZm91bmQhIixjLnJlY29nbml6ZWQpLG89UCk7YnJlYWt9Y2FzZSJJQ1JEIjp0aGlzLnNvdW5kQmFua0luZm8uY3JlYXRpb25EYXRlPXRzKGhBKFAuZGF0YSxQLmRhdGEubGVuZ3RoKSk7YnJlYWs7Y2FzZSJJU0ZUIjp0aGlzLnNvdW5kQmFua0luZm8uc29mdHdhcmU9RzticmVhaztjYXNlIklQUkQiOnRoaXMuc291bmRCYW5rSW5mby5wcm9kdWN0PUc7YnJlYWs7Y2FzZSJJRU5HIjp0aGlzLnNvdW5kQmFua0luZm8uZW5naW5lZXI9RzticmVhaztjYXNlIklDT1AiOnRoaXMuc291bmRCYW5rSW5mby5jb3B5cmlnaHQ9RzticmVhaztjYXNlIklOQU0iOnRoaXMuc291bmRCYW5rSW5mby5uYW1lPUc7YnJlYWs7Y2FzZSJJQ01UIjp0aGlzLnNvdW5kQmFua0luZm8uY29tbWVudD1HO2JyZWFrO2Nhc2UiaXJvbSI6dGhpcy5zb3VuZEJhbmtJbmZvLnJvbUluZm89RzticmVhaztjYXNlImlzbmciOnRoaXMuc291bmRCYW5rSW5mby5zb3VuZEVuZ2luZT1HfX10aGlzLnByaW50SW5mbygpO2xldCBnPXt9O28hPT12b2lkIDAmJihnLnBoZHI9ckEoby5kYXRhKSxnLnBiYWc9ckEoby5kYXRhKSxnLnBtb2Q9ckEoby5kYXRhKSxnLnBnZW49ckEoby5kYXRhKSxnLmluc3Q9ckEoby5kYXRhKSxnLmliYWc9ckEoby5kYXRhKSxnLmltb2Q9ckEoby5kYXRhKSxnLmlnZW49ckEoby5kYXRhKSxnLnNoZHI9ckEoby5kYXRhKSk7bGV0IEI9ckEodCwhMSk7dGhpcy52ZXJpZnlIZWFkZXIoQiwibGlzdCIpLHRoaXMudmVyaWZ5VGV4dChoQSh0LDQpLCJzZHRhIikscCgiJWNWZXJpZnlpbmcgc21wbCBjaHVuay4uLiIsYy53YXJuKTtsZXQgZD1yQSh0LCExKTt0aGlzLnZlcmlmeUhlYWRlcihkLCJzbXBsIik7bGV0IGg7aWYoYSl7cCgiJWNTRjJQYWNrIGRldGVjdGVkLCBhdHRlbXB0aW5nIHRvIGRlY29kZSB0aGUgc21wbCBjaHVuay4uLiIsYy5pbmZvKTt0cnl7aD1PdC5kZWNvZGUodC5idWZmZXIuc2xpY2UodC5jdXJyZW50SW5kZXgsdC5jdXJyZW50SW5kZXgrQi5zaXplLTEyKSkuZGF0YVswXX1jYXRjaChQKXt0aHJvdyBaKCksbmV3IEVycm9yKGBTRjJQYWNrIE9nZyBWb3JiaXMgZGVjb2RlIGVycm9yOiAke1B9YCl9cChgJWNEZWNvZGVkIHRoZSBzbXBsIGNodW5rISBMZW5ndGg6ICVjJHtoLmxlbmd0aH1gLGMuaW5mbyxjLnZhbHVlKX1lbHNlIGg9dCx0aGlzLnNhbXBsZURhdGFTdGFydEluZGV4PXQuY3VycmVudEluZGV4O3AoYCVjU2tpcHBpbmcgc2FtcGxlIGNodW5rLCBsZW5ndGg6ICVjJHtCLnNpemUtMTJ9YCxjLmluZm8sYy52YWx1ZSksdC5jdXJyZW50SW5kZXgrPUIuc2l6ZS0xMixwKCIlY0xvYWRpbmcgcHJlc2V0IGRhdGEgY2h1bmsuLi4iLGMud2Fybik7bGV0IEM9ckEodCk7dGhpcy52ZXJpZnlIZWFkZXIoQywibGlzdCIpLGhBKEMuZGF0YSw0KTtsZXQgUT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKFEsInBoZHIiKTtsZXQgbT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKG0sInBiYWciKTtsZXQgeT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKHksInBtb2QiKTtsZXQgRj1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEYsInBnZW4iKTtsZXQgaz1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKGssImluc3QiKTtsZXQgRD1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEQsImliYWciKTtsZXQgdj1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKHYsImltb2QiKTtsZXQgTD1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEwsImlnZW4iKTtsZXQgRT1yQShDLmRhdGEpO3RoaXMudmVyaWZ5SGVhZGVyKEUsInNoZHIiKSxwKCIlY1BhcnNpbmcgc2FtcGxlcy4uLiIsYy5pbmZvKSx0LmN1cnJlbnRJbmRleD10aGlzLnNhbXBsZURhdGFTdGFydEluZGV4O2xldCBYPWJzKEUsaCxvPT09dm9pZCAwKTtpZihvJiZnLnNoZHIpe2xldCBQPWJzKGcuc2hkcixuZXcgRmxvYXQzMkFycmF5KDEpLCExKTtQLmxlbmd0aD09PVgubGVuZ3RoJiZYLmZvckVhY2goKEcsYik9PntHLm5hbWUrPVBbYl0ubmFtZSxHLmxpbmtlZFNhbXBsZUluZGV4fD1QW2JdLmxpbmtlZFNhbXBsZUluZGV4PDwxNn0pfVguZm9yRWFjaChQPT5QLm5hbWU9UC5uYW1lLnRyaW0oKSksdGhpcy5zYW1wbGVzLnB1c2goLi4uWCk7bGV0IE89TnMoTCksbkE9R24odiksJD1UcyhrKTtpZihvJiZnLmluc3Qpe2xldCBQPVRzKGcuaW5zdCk7UC5sZW5ndGg9PT0kLmxlbmd0aCYmKCQuZm9yRWFjaCgoRyxiKT0+e0cubmFtZSs9UFtiXS5uYW1lLEcuem9uZVN0YXJ0SW5kZXh8PVBbYl0uem9uZVN0YXJ0SW5kZXh9KSwkLmZvckVhY2goKEcsYik9PntiPCQubGVuZ3RoLTEmJihHLnpvbmVzQ291bnQ9JFtiKzFdLnpvbmVTdGFydEluZGV4LUcuem9uZVN0YXJ0SW5kZXgpfSkpfSQuZm9yRWFjaChQPT5QLm5hbWU9UC5uYW1lLnRyaW0oKSksdGhpcy5pbnN0cnVtZW50cy5wdXNoKC4uLiQpO2xldCBWPWJ0KEQpO2lmKG8mJmcuaWJhZyl7bGV0IFA9YnQoZy5pYmFnKTtmb3IobGV0IEc9MDtHPFYubW9kLmxlbmd0aDtHKyspVi5tb2RbR118PVAubW9kW0ddPDwxNjtmb3IobGV0IEc9MDtHPFYuZ2VuLmxlbmd0aDtHKyspVi5nZW5bR118PVAuZ2VuW0ddPDwxNn1UcihWLE8sbkEsdGhpcy5zYW1wbGVzLCQpO2xldCBxPU5zKEYpLHo9R24oeSksdEE9VXMoUSx0aGlzKTtpZihvJiZnLnBoZHIpe2xldCBQPVVzKGcucGhkcix0aGlzKTtQLmxlbmd0aD09PXRBLmxlbmd0aCYmKHRBLmZvckVhY2goKEcsYik9PntHLm5hbWUrPVBbYl0ubmFtZSxHLnpvbmVTdGFydEluZGV4fD1QW2JdLnpvbmVTdGFydEluZGV4fSksdEEuZm9yRWFjaCgoRyxiKT0+e2I8dEEubGVuZ3RoLTEmJihHLnpvbmVzQ291bnQ9dEFbYisxXS56b25lU3RhcnRJbmRleC1HLnpvbmVTdGFydEluZGV4KX0pKX10QS5mb3JFYWNoKFA9PlAubmFtZT09PVAubmFtZS50cmltKCkpLHRoaXMuYWRkUHJlc2V0cyguLi50QSk7bGV0IGlBPWJ0KG0pO2lmKG8mJmcucGJhZyl7bGV0IFA9YnQoZy5wYmFnKTtmb3IobGV0IEc9MDtHPGlBLm1vZC5sZW5ndGg7RysrKWlBLm1vZFtHXXw9UC5tb2RbR108PDE2O2ZvcihsZXQgRz0wO0c8aUEuZ2VuLmxlbmd0aDtHKyspaUEuZ2VuW0ddfD1QLmdlbltHXTw8MTZ9THIoaUEscSx6LHRoaXMuaW5zdHJ1bWVudHMsdEEpLHRoaXMuZmx1c2goKSxwKGAlY1BhcnNpbmcgZmluaXNoZWQhICVjIiR7dGhpcy5zb3VuZEJhbmtJbmZvLm5hbWV9IiVjIGhhcyAlYyR7dGhpcy5wcmVzZXRzLmxlbmd0aH0lYyBwcmVzZXRzLAogICAgICAgICVjJHt0aGlzLmluc3RydW1lbnRzLmxlbmd0aH0lYyBpbnN0cnVtZW50cyBhbmQgJWMke3RoaXMuc2FtcGxlcy5sZW5ndGh9JWMgc2FtcGxlcy5gLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvLGMucmVjb2duaXplZCxjLmluZm8sYy5yZWNvZ25pemVkLGMuaW5mbyxjLnJlY29nbml6ZWQsYy5pbmZvKSxaKCl9dmVyaWZ5SGVhZGVyKGUsQSl7ZS5oZWFkZXIudG9Mb3dlckNhc2UoKSE9PUEudG9Mb3dlckNhc2UoKSYmKFooKSx0aGlzLnBhcnNpbmdFcnJvcihgSW52YWxpZCBjaHVuayBoZWFkZXIhIEV4cGVjdGVkICIke0EudG9Mb3dlckNhc2UoKX0iIGdvdCAiJHtlLmhlYWRlci50b0xvd2VyQ2FzZSgpfSJgKSl9dmVyaWZ5VGV4dChlLEEpe2UudG9Mb3dlckNhc2UoKSE9PUEudG9Mb3dlckNhc2UoKSYmKFooKSx0aGlzLnBhcnNpbmdFcnJvcihgSW52YWxpZCBGb3VyQ0M6IEV4cGVjdGVkICIke0EudG9Mb3dlckNhc2UoKX0iIGdvdCAiJHtlLnRvTG93ZXJDYXNlKCl9IlxgYCkpfX0sdXQ9Y2xhc3N7c3RhdGljIGZyb21BcnJheUJ1ZmZlcihlKXtsZXQgQT1lLnNsaWNlKDgsMTIpLHQ9bmV3IFkoQSk7cmV0dXJuIGhBKHQsNCkudG9Mb3dlckNhc2UoKT09PSJkbHMgIj90aGlzLmxvYWRETFMoZSk6bmV3IEhyKGUsITEpfXN0YXRpYyBsb2FkRExTKGUpe3JldHVybiBGYS5yZWFkKGUpLnRvU0YoKX19LFJhPWNsYXNze3NvdW5kQmFua01hbmFnZXI9bmV3IFBvKHRoaXMudXBkYXRlUHJlc2V0TGlzdC5iaW5kKHRoaXMpKTttaWRpQ2hhbm5lbHM9W107a2V5TW9kaWZpZXJNYW5hZ2VyPW5ldyBBcjt0b3RhbFZvaWNlc0Ftb3VudD0wO3Byb2Nlc3NvckluaXRpYWxpemVkPU90LmlzSW5pdGlhbGl6ZWQ7Y3VycmVudFN5bnRoVGltZT0wO3NhbXBsZVJhdGU7ZW5hYmxlRWZmZWN0cz0hMDtlbmFibGVFdmVudFN5c3RlbTtvbkV2ZW50Q2FsbDtzeXN0ZW1FeGNsdXNpdmU9JG8uYmluZCh0aGlzKTtyZXNldEFsbENvbnRyb2xsZXJzPVNvLmJpbmQodGhpcyk7c2V0TWFzdGVyUGFyYW1ldGVyPXZvLmJpbmQodGhpcyk7Z2V0TWFzdGVyUGFyYW1ldGVyPUxvLmJpbmQodGhpcyk7Z2V0QWxsTWFzdGVyUGFyYW1ldGVycz1Oby5iaW5kKHRoaXMpO2dldFZvaWNlc0ZvclByZXNldD1fby5iaW5kKHRoaXMpO2tpbGxWb2ljZXM9Wm8uYmluZCh0aGlzKTtnZXRWb2ljZXM9am8uYmluZCh0aGlzKTtwcml2YXRlUHJvcHM7c2F2ZWRTbmFwc2hvdDtldmVudFF1ZXVlPVtdO3NhbXBsZVRpbWU7Y29uc3RydWN0b3IoZSxBPUZzKXtsZXQgdD0kbihBLEZzKTtpZih0aGlzLmVuYWJsZUVmZmVjdHM9dC5lbmFibGVFZmZlY3RzLHRoaXMuZW5hYmxlRXZlbnRTeXN0ZW09dC5lbmFibGVFdmVudFN5c3RlbSx0aGlzLmN1cnJlbnRTeW50aFRpbWU9dC5pbml0aWFsVGltZSx0aGlzLnNhbXBsZVJhdGU9ZSx0aGlzLnNhbXBsZVRpbWU9MS9lLGlzTmFOKHQuaW5pdGlhbFRpbWUpfHxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoIkluaXRpYWwgdGltZSBvciBzYW1wbGUgcmF0ZSBpcyBOYU4hIik7dGhpcy5wcml2YXRlUHJvcHM9bmV3IHRyKHRoaXMuY2FsbEV2ZW50LmJpbmQodGhpcyksdGhpcy5nZXRWb2ljZXMuYmluZCh0aGlzKSx0aGlzLmtpbGxWb2ljZXMuYmluZCh0aGlzKSxNbyooNDQxMDAvZSksSm8qKDQ0MTAwL2UpLFZvKig0NDEwMC9lKSk7Zm9yKGxldCBuPTA7bjxSbjtuKyspdGhpcy5jcmVhdGVNSURJQ2hhbm5lbEludGVybmFsKCExKTt0aGlzLnByb2Nlc3NvckluaXRpYWxpemVkLnRoZW4oKCk9PntwKCIlY1NwZXNzYVN5bnRoIGlzIHJlYWR5ISIsYy5yZWNvZ25pemVkKX0pfWFwcGx5U3ludGhlc2l6ZXJTbmFwc2hvdChlKXt0aGlzLnNhdmVkU25hcHNob3Q9ZSxlLmFwcGx5KHRoaXMpLHAoIiVjRmluaXNoZWQgYXBwbHlpbmcgc25hcHNob3QhIixjLmluZm8pLHRoaXMucmVzZXRBbGxDb250cm9sbGVycygpfWdldFNuYXBzaG90KCl7cmV0dXJuIHJzLmNyZWF0ZSh0aGlzKX1zZXRFbWJlZGRlZFNvdW5kQmFuayhlLEEpe2xldCB0PXV0LmZyb21BcnJheUJ1ZmZlcihlKTt0aGlzLnNvdW5kQmFua01hbmFnZXIuYWRkU291bmRCYW5rKHQsUnQsQSk7bGV0IG49dGhpcy5zb3VuZEJhbmtNYW5hZ2VyLnByaW9yaXR5T3JkZXI7bi5wb3AoKSxuLnVuc2hpZnQoUnQpLHRoaXMuc291bmRCYW5rTWFuYWdlci5wcmlvcml0eU9yZGVyPW4sdGhpcy5zYXZlZFNuYXBzaG90IT09dm9pZCAwJiZ0aGlzLmFwcGx5U3ludGhlc2l6ZXJTbmFwc2hvdCh0aGlzLnNhdmVkU25hcHNob3QpLHAoYCVjRW1iZWRkZWQgc291bmQgYmFuayBzZXQgYXQgb2Zmc2V0ICVjJHtBfWAsYy5yZWNvZ25pemVkLGMudmFsdWUpfWNsZWFyRW1iZWRkZWRCYW5rKCl7dGhpcy5zb3VuZEJhbmtNYW5hZ2VyLnNvdW5kQmFua0xpc3Quc29tZShlPT5lLmlkPT09UnQpJiZ0aGlzLnNvdW5kQmFua01hbmFnZXIuZGVsZXRlU291bmRCYW5rKFJ0KX1jcmVhdGVNSURJQ2hhbm5lbCgpe3RoaXMuY3JlYXRlTUlESUNoYW5uZWxJbnRlcm5hbCghMCl9c3RvcEFsbENoYW5uZWxzKGU9ITEpe3AoIiVjU3RvcCBhbGwgcmVjZWl2ZWQhIixjLmluZm8pO2ZvcihsZXQgQSBvZiB0aGlzLm1pZGlDaGFubmVscylBLnN0b3BBbGxOb3RlcyhlKX1yZW5kZXJBdWRpbyhlLEEsdCxuPTAscz0wKXt0aGlzLnJlbmRlckF1ZGlvU3BsaXQoQSx0LEFycmF5KDE2KS5maWxsKGUpLG4scyl9cmVuZGVyQXVkaW9TcGxpdChlLEEsdCxuPTAscz0wKXtsZXQgYT10aGlzLmN1cnJlbnRTeW50aFRpbWU7Zm9yKDt0aGlzLmV2ZW50UXVldWVbMF0/LnRpbWU8PWE7KXRoaXMuZXZlbnRRdWV1ZS5zaGlmdCgpPy5jYWxsYmFjaygpO2xldCByPWVbMF0sST1lWzFdLG89QVswXSxnPUFbMV07bj1NYXRoLm1heChuLDApO2xldCBCPXN8fHRbMF1bMF0ubGVuZ3RoLW47dGhpcy50b3RhbFZvaWNlc0Ftb3VudD0wLHRoaXMubWlkaUNoYW5uZWxzLmZvckVhY2goKGQsaCk9PntpZihkLnZvaWNlcy5sZW5ndGg8MXx8ZC5pc011dGVkKXJldHVybjtsZXQgQz1kLnZvaWNlcy5sZW5ndGgsUT1oJTE2O2QucmVuZGVyQXVkaW8odFtRXVswXSx0W1FdWzFdLHIsSSxvLGcsbixCKSx0aGlzLnRvdGFsVm9pY2VzQW1vdW50Kz1kLnZvaWNlcy5sZW5ndGgsZC52b2ljZXMubGVuZ3RoIT09QyYmZC5zZW5kQ2hhbm5lbFByb3BlcnR5KCl9KSx0aGlzLmN1cnJlbnRTeW50aFRpbWUrPUIqdGhpcy5zYW1wbGVUaW1lfWRlc3Ryb3lTeW50aFByb2Nlc3Nvcigpe3RoaXMubWlkaUNoYW5uZWxzLmZvckVhY2goZT0+e2Uudm9pY2VzLmxlbmd0aD0wLGUuc3VzdGFpbmVkVm9pY2VzLmxlbmd0aD0wLGUubG9ja2VkQ29udHJvbGxlcnM9W10sZS5wcmVzZXQ9dm9pZCAwfSksdGhpcy5jbGVhckNhY2hlKCksdGhpcy5taWRpQ2hhbm5lbHMubGVuZ3RoPTAsdGhpcy5zb3VuZEJhbmtNYW5hZ2VyLmRlc3Ryb3koKX1jb250cm9sbGVyQ2hhbmdlKGUsQSx0KXt0aGlzLm1pZGlDaGFubmVsc1tlXS5jb250cm9sbGVyQ2hhbmdlKEEsdCl9bm90ZU9uKGUsQSx0KXt0aGlzLm1pZGlDaGFubmVsc1tlXS5ub3RlT24oQSx0KX1ub3RlT2ZmKGUsQSl7dGhpcy5taWRpQ2hhbm5lbHNbZV0ubm90ZU9mZihBKX1wb2x5UHJlc3N1cmUoZSxBLHQpe3RoaXMubWlkaUNoYW5uZWxzW2VdLnBvbHlQcmVzc3VyZShBLHQpfWNoYW5uZWxQcmVzc3VyZShlLEEpe3RoaXMubWlkaUNoYW5uZWxzW2VdLmNoYW5uZWxQcmVzc3VyZShBKX1waXRjaFdoZWVsKGUsQSl7dGhpcy5taWRpQ2hhbm5lbHNbZV0ucGl0Y2hXaGVlbChBKX1wcm9ncmFtQ2hhbmdlKGUsQSl7dGhpcy5taWRpQ2hhbm5lbHNbZV0ucHJvZ3JhbUNoYW5nZShBKX1wcm9jZXNzTWVzc2FnZShlLEE9MCx0PSExLG49WmEpe2xldCBzPSgpPT57bGV0IHI9QXMoZVswXSksST1yLmNoYW5uZWwrQTtzd2l0Y2goci5zdGF0dXMpe2Nhc2UgTS5ub3RlT246e2xldCBvPWVbMl07bz4wP3RoaXMubm90ZU9uKEksZVsxXSxvKTp0aGlzLm5vdGVPZmYoSSxlWzFdKTticmVha31jYXNlIE0ubm90ZU9mZjp0P3RoaXMubWlkaUNoYW5uZWxzW0ldLmtpbGxOb3RlKGVbMV0pOnRoaXMubm90ZU9mZihJLGVbMV0pO2JyZWFrO2Nhc2UgTS5waXRjaFdoZWVsOnRoaXMucGl0Y2hXaGVlbChJLGVbMl08PDd8ZVsxXSk7YnJlYWs7Y2FzZSBNLmNvbnRyb2xsZXJDaGFuZ2U6dGhpcy5jb250cm9sbGVyQ2hhbmdlKEksZVsxXSxlWzJdKTticmVhaztjYXNlIE0ucHJvZ3JhbUNoYW5nZTp0aGlzLnByb2dyYW1DaGFuZ2UoSSxlWzFdKTticmVhaztjYXNlIE0ucG9seVByZXNzdXJlOnRoaXMucG9seVByZXNzdXJlKEksZVswXSxlWzFdKTticmVhaztjYXNlIE0uY2hhbm5lbFByZXNzdXJlOnRoaXMuY2hhbm5lbFByZXNzdXJlKEksZVsxXSk7YnJlYWs7Y2FzZSBNLnN5c3RlbUV4Y2x1c2l2ZTp0aGlzLnN5c3RlbUV4Y2x1c2l2ZShuZXcgWShlLnNsaWNlKDEpKSxBKTticmVhaztjYXNlIE0ucmVzZXQ6dGhpcy5zdG9wQWxsQ2hhbm5lbHMoITApLHRoaXMucmVzZXRBbGxDb250cm9sbGVycygpO2JyZWFrO2RlZmF1bHQ6YnJlYWt9fSxhPW4udGltZTthPnRoaXMuY3VycmVudFN5bnRoVGltZT8odGhpcy5ldmVudFF1ZXVlLnB1c2goe2NhbGxiYWNrOnMuYmluZCh0aGlzKSx0aW1lOmF9KSx0aGlzLmV2ZW50UXVldWUuc29ydCgocixJKT0+ci50aW1lLUkudGltZSkpOnMoKX1jbGVhckNhY2hlKCl7dGhpcy5wcml2YXRlUHJvcHMuY2FjaGVkVm9pY2VzPVtdfXNldE1JRElWb2x1bWUoZSl7dGhpcy5wcml2YXRlUHJvcHMubWlkaVZvbHVtZT1NYXRoLnBvdyhlLE1hdGguRSl9c2V0TWFzdGVyVHVuaW5nKGUpe2U9TWF0aC5yb3VuZChlKTtmb3IobGV0IEEgb2YgdGhpcy5taWRpQ2hhbm5lbHMpQS5zZXRDdXN0b21Db250cm9sbGVyKElBLm1hc3RlclR1bmluZyxlKX1jYWxsRXZlbnQoZSxBKXt0aGlzLm9uRXZlbnRDYWxsPy4oe3R5cGU6ZSxkYXRhOkF9KX1nZXRDYWNoZWRWb2ljZShlLEEsdCl7bGV0IG49ZS5iYW5rTVNCLHM9ZS5iYW5rTFNCLHtpc0dNR1NEcnVtOmEscHJvZ3JhbTpyfT1lO3JldHVybiBhJiYobj0xMjgscz0wKSx0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXM/LltuXT8uW3NdPy5bcl0/LltBXT8uW3RdfXNldENhY2hlZFZvaWNlKGUsQSx0LG4pe2xldCBzPWUuYmFua01TQixhPWUuYmFua0xTQix7aXNHTUdTRHJ1bTpyLHByb2dyYW06SX09ZTtyJiYocz0xMjgsYT0wKSx0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc118fCh0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc109W10pLHRoaXMucHJpdmF0ZVByb3BzLmNhY2hlZFZvaWNlc1tzXVthXXx8KHRoaXMucHJpdmF0ZVByb3BzLmNhY2hlZFZvaWNlc1tzXVthXT1bXSksdGhpcy5wcml2YXRlUHJvcHMuY2FjaGVkVm9pY2VzW3NdW2FdW0ldfHwodGhpcy5wcml2YXRlUHJvcHMuY2FjaGVkVm9pY2VzW3NdW2FdW0ldPVtdKSx0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc11bYV1bSV1bQV18fCh0aGlzLnByaXZhdGVQcm9wcy5jYWNoZWRWb2ljZXNbc11bYV1bSV1bQV09W10pLHRoaXMucHJpdmF0ZVByb3BzLmNhY2hlZFZvaWNlc1tzXVthXVtJXVtBXVt0XT1ufWNyZWF0ZU1JRElDaGFubmVsSW50ZXJuYWwoZSl7bGV0IEE9bmV3IFFyKHRoaXMsdGhpcy5wcml2YXRlUHJvcHMsdGhpcy5wcml2YXRlUHJvcHMuZGVmYXVsdFByZXNldCx0aGlzLm1pZGlDaGFubmVscy5sZW5ndGgpO3RoaXMubWlkaUNoYW5uZWxzLnB1c2goQSksZSYmKHRoaXMuY2FsbEV2ZW50KCJuZXdDaGFubmVsIix2b2lkIDApLEEuc2VuZENoYW5uZWxQcm9wZXJ0eSgpLHRoaXMubWlkaUNoYW5uZWxzW3RoaXMubWlkaUNoYW5uZWxzLmxlbmd0aC0xXS5zZXREcnVtcyghMCkpfXVwZGF0ZVByZXNldExpc3QoKXtsZXQgZT10aGlzLnNvdW5kQmFua01hbmFnZXIucHJlc2V0TGlzdDt0aGlzLmNsZWFyQ2FjaGUoKSx0aGlzLnByaXZhdGVQcm9wcy5jYWxsRXZlbnQoInByZXNldExpc3RDaGFuZ2UiLGUpLHRoaXMuZ2V0RGVmYXVsdFByZXNldHMoKSx0aGlzLm1pZGlDaGFubmVscy5mb3JFYWNoKEE9PntBLnNldFByZXNldExvY2soITEpfSksdGhpcy5yZXNldEFsbENvbnRyb2xsZXJzKCExKX1nZXREZWZhdWx0UHJlc2V0cygpe3RoaXMucHJpdmF0ZVByb3BzLmRlZmF1bHRQcmVzZXQ9dGhpcy5zb3VuZEJhbmtNYW5hZ2VyLmdldFByZXNldCh7YmFua0xTQjowLGJhbmtNU0I6MCxwcm9ncmFtOjAsaXNHTUdTRHJ1bTohMX0sInhnIiksdGhpcy5wcml2YXRlUHJvcHMuZHJ1bVByZXNldD10aGlzLnNvdW5kQmFua01hbmFnZXIuZ2V0UHJlc2V0KHtiYW5rTFNCOjAsYmFua01TQjowLHByb2dyYW06MCxpc0dNR1NEcnVtOiEwfSwiZ3MiKX19O3ZhciB6dD1FZS5jb25zb2xlQ29sb3JzO3ZhciBNYT0ic3Blc3Nhc3ludGgtd29ya2xldC1wcm9jZXNzb3IiO2Z1bmN0aW9uIGJhKGUsQSl7cmV0dXJuey4uLkEsLi4uZT8/e319fXZhciB2YT17c2tpcFRvRmlyc3ROb3RlT246ITAsaW5pdGlhbFBsYXliYWNrUmF0ZToxfTt2YXIgaXM9Y2xhc3MgZXh0ZW5kcyBLdHtldmVudHM9W107Y29uc3RydWN0b3IoQSl7c3VwZXIoKSxzdXBlci5jb3B5RnJvbShBKSx0aGlzLmV2ZW50cz1bXX19LFd0PWNsYXNzIGV4dGVuZHMgTGV7dHJhY2tzO2VtYmVkZGVkU291bmRCYW5rPXZvaWQgMDtlbWJlZGRlZFNvdW5kQmFua1NpemU7Y29uc3RydWN0b3IoQSl7c3VwZXIoKSxzdXBlci5jb3B5TWV0YWRhdGFGcm9tKEEpLHRoaXMudHJhY2tzPUEudHJhY2tzLm1hcCh0PT5uZXcgaXModCkpLHRoaXMuZW1iZWRkZWRTb3VuZEJhbmtTaXplPUE/LmVtYmVkZGVkU291bmRCYW5rPy5ieXRlTGVuZ3RofX07dmFyIF90PXtzaHVmZmxlT246MSxzaHVmZmxlT2ZmOjIsaW5kZXg6M307dmFyIGp0PWNsYXNze3N5bnRoZXNpemVyO3NlcXVlbmNlcjtwb3N0O2FsaXZlPSExO2NvbnN0cnVjdG9yKEEsdCxuKXt0aGlzLnN5bnRoZXNpemVyPW5ldyBSYShBLHQpLHRoaXMuc2VxdWVuY2VyPW5ldyBzYSh0aGlzLnN5bnRoZXNpemVyKSx0aGlzLnBvc3Q9bix0aGlzLnN5bnRoZXNpemVyLm9uRXZlbnRDYWxsPXM9Pnt0aGlzLnBvc3Qoe3R5cGU6ImV2ZW50Q2FsbCIsZGF0YTpzLGN1cnJlbnRUaW1lOnRoaXMuc3ludGhlc2l6ZXIuY3VycmVudFN5bnRoVGltZX0pfSx0aGlzLnNlcXVlbmNlci5vbkV2ZW50Q2FsbD1zPT57aWYocy50eXBlPT09InNvbmdMaXN0Q2hhbmdlIil7bGV0IHI9cy5kYXRhLm5ld1NvbmdMaXN0Lm1hcChJPT5uZXcgV3QoSSkpO3RoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnt0eXBlOnMudHlwZSxkYXRhOntuZXdTb25nTGlzdDpyfX0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSk7cmV0dXJufXRoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnMsY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9fXBvc3RSZWFkeShBLHQsbj1bXSl7dGhpcy5wb3N0KHt0eXBlOiJpc0Z1bGx5SW5pdGlhbGl6ZWQiLGRhdGE6e3R5cGU6QSxkYXRhOnR9LGN1cnJlbnRUaW1lOnRoaXMuc3ludGhlc2l6ZXIuY3VycmVudFN5bnRoVGltZX0sbil9cG9zdFByb2dyZXNzKEEsdCl7dGhpcy5wb3N0KHt0eXBlOiJyZW5kZXJpbmdQcm9ncmVzcyIsZGF0YTp7dHlwZTpBLGRhdGE6dH0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9ZGVzdHJveSgpe3RoaXMuc3ludGhlc2l6ZXIuZGVzdHJveVN5bnRoUHJvY2Vzc29yKCksZGVsZXRlIHRoaXMuc3ludGhlc2l6ZXIsZGVsZXRlIHRoaXMuc2VxdWVuY2VyfWhhbmRsZU1lc3NhZ2UoQSl7bGV0IHQ9QS5jaGFubmVsTnVtYmVyLG47aWYodD49MCYmKG49dGhpcy5zeW50aGVzaXplci5taWRpQ2hhbm5lbHNbdF0sbj09PXZvaWQgMCkpe0VlLlNwZXNzYVN5bnRoV2FybihgVHJ5aW5nIHRvIGFjY2VzcyBjaGFubmVsICR7dH0gd2hpY2ggZG9lcyBub3QgZXhpc3QuLi4gaWdub3JpbmchYCk7cmV0dXJufXN3aXRjaChBLnR5cGUpe2Nhc2UibWlkaU1lc3NhZ2UiOnRoaXMuc3ludGhlc2l6ZXIucHJvY2Vzc01lc3NhZ2UoQS5kYXRhLm1lc3NhZ2VEYXRhLEEuZGF0YS5jaGFubmVsT2Zmc2V0LEEuZGF0YS5mb3JjZSxBLmRhdGEub3B0aW9ucyk7YnJlYWs7Y2FzZSJjdXN0b21DY0NoYW5nZSI6bj8uc2V0Q3VzdG9tQ29udHJvbGxlcihBLmRhdGEuY2NOdW1iZXIsQS5kYXRhLmNjVmFsdWUpO2JyZWFrO2Nhc2UiY2NSZXNldCI6dD09PUJlP3RoaXMuc3ludGhlc2l6ZXIucmVzZXRBbGxDb250cm9sbGVycygpOm4/LnJlc2V0Q29udHJvbGxlcnMoKTticmVhaztjYXNlInNldENoYW5uZWxWaWJyYXRvIjppZih0PT09QmUpZm9yKGxldCBzIG9mIHRoaXMuc3ludGhlc2l6ZXIubWlkaUNoYW5uZWxzKUEuZGF0YS5yYXRlPT09QmU/cy5kaXNhYmxlQW5kTG9ja0dTTlJQTigpOnMuc2V0VmlicmF0byhBLmRhdGEuZGVwdGgsQS5kYXRhLnJhdGUsQS5kYXRhLmRlbGF5KTtlbHNlIEEuZGF0YS5yYXRlPT09QmU/bj8uZGlzYWJsZUFuZExvY2tHU05SUE4oKTpuPy5zZXRWaWJyYXRvKEEuZGF0YS5kZXB0aCxBLmRhdGEucmF0ZSxBLmRhdGEuZGVsYXkpO2JyZWFrO2Nhc2Uic3RvcEFsbCI6dD09PUJlP3RoaXMuc3ludGhlc2l6ZXIuc3RvcEFsbENoYW5uZWxzKEEuZGF0YT09PTEpOm4/LnN0b3BBbGxOb3RlcyhBLmRhdGE9PT0xKTticmVhaztjYXNlImtpbGxOb3RlcyI6dGhpcy5zeW50aGVzaXplci5raWxsVm9pY2VzKEEuZGF0YSk7YnJlYWs7Y2FzZSJtdXRlQ2hhbm5lbCI6bj8ubXV0ZUNoYW5uZWwoQS5kYXRhKTticmVhaztjYXNlImFkZE5ld0NoYW5uZWwiOnRoaXMuc3ludGhlc2l6ZXIuY3JlYXRlTUlESUNoYW5uZWwoKTticmVhaztjYXNlInNldE1hc3RlclBhcmFtZXRlciI6dGhpcy5zeW50aGVzaXplci5zZXRNYXN0ZXJQYXJhbWV0ZXIoQS5kYXRhLnR5cGUsQS5kYXRhLmRhdGEpO2JyZWFrO2Nhc2Uic2V0RHJ1bXMiOm4/LnNldERydW1zKEEuZGF0YSk7YnJlYWs7Y2FzZSJ0cmFuc3Bvc2VDaGFubmVsIjpuPy50cmFuc3Bvc2VDaGFubmVsKEEuZGF0YS5zZW1pdG9uZXMsQS5kYXRhLmZvcmNlKTticmVhaztjYXNlImxvY2tDb250cm9sbGVyIjppZihBLmRhdGEuY29udHJvbGxlck51bWJlcj09PUJlKW4/LnNldFByZXNldExvY2soQS5kYXRhLmlzTG9ja2VkKTtlbHNle2lmKCFuKXJldHVybjtuLmxvY2tlZENvbnRyb2xsZXJzW0EuZGF0YS5jb250cm9sbGVyTnVtYmVyXT1BLmRhdGEuaXNMb2NrZWR9YnJlYWs7Y2FzZSJzZXF1ZW5jZXJTcGVjaWZpYyI6e2lmKCF0aGlzLnNlcXVlbmNlcilyZXR1cm47bGV0IHM9dGhpcy5zZXF1ZW5jZXIsYT1BLmRhdGE7c3dpdGNoKGEudHlwZSl7ZGVmYXVsdDpicmVhaztjYXNlImxvYWROZXdTb25nTGlzdCI6dHJ5e2xldCBJPWEuZGF0YS5tYXAobz0+ImR1cmF0aW9uImluIG8/TGUuY29weUZyb20obyk6TGUuZnJvbUFycmF5QnVmZmVyKG8uYmluYXJ5LG8uZmlsZU5hbWUpKTtzLmxvYWROZXdTb25nTGlzdChJKX1jYXRjaChyKXtjb25zb2xlLmVycm9yKHIpLHRoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnt0eXBlOiJtaWRpRXJyb3IiLGRhdGE6cn0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9YnJlYWs7Y2FzZSJwYXVzZSI6cy5wYXVzZSgpO2JyZWFrO2Nhc2UicGxheSI6cy5wbGF5KCk7YnJlYWs7Y2FzZSJzZXRUaW1lIjpzLmN1cnJlbnRUaW1lPWEuZGF0YTticmVhaztjYXNlImNoYW5nZU1JRElNZXNzYWdlU2VuZGluZyI6cy5leHRlcm5hbE1JRElQbGF5YmFjaz1hLmRhdGE7YnJlYWs7Y2FzZSJzZXRQbGF5YmFja1JhdGUiOnMucGxheWJhY2tSYXRlPWEuZGF0YTticmVhaztjYXNlInNldExvb3BDb3VudCI6cy5sb29wQ291bnQ9YS5kYXRhO2JyZWFrO2Nhc2UiY2hhbmdlU29uZyI6c3dpdGNoKGEuZGF0YS5jaGFuZ2VUeXBlKXtjYXNlIF90LnNodWZmbGVPZmY6cy5zaHVmZmxlTW9kZT0hMTticmVhaztjYXNlIF90LnNodWZmbGVPbjpzLnNodWZmbGVNb2RlPSEwO2JyZWFrO2Nhc2UgX3QuaW5kZXg6YS5kYXRhLmRhdGEhPT12b2lkIDAmJihjb25zb2xlLmxvZygiSU5ERVgiLGEuZGF0YSkscy5zb25nSW5kZXg9YS5kYXRhLmRhdGEpO2JyZWFrfWJyZWFrO2Nhc2UiZ2V0TUlESSI6aWYoIXMubWlkaURhdGEpdGhyb3cgbmV3IEVycm9yKCJObyBNSURJIGlzIGxvYWRlZCEiKTt0aGlzLnBvc3Qoe3R5cGU6InNlcXVlbmNlclJldHVybiIsZGF0YTp7dHlwZToiZ2V0TUlESSIsZGF0YTpzLm1pZGlEYXRhfSxjdXJyZW50VGltZTp0aGlzLnN5bnRoZXNpemVyLmN1cnJlbnRTeW50aFRpbWV9KTticmVhaztjYXNlInNldFNraXBUb0ZpcnN0Tm90ZSI6cy5za2lwVG9GaXJzdE5vdGVPbj1hLmRhdGE7YnJlYWt9YnJlYWt9Y2FzZSJzb3VuZEJhbmtNYW5hZ2VyIjp0cnl7bGV0IHM9dGhpcy5zeW50aGVzaXplci5zb3VuZEJhbmtNYW5hZ2VyLGE9QS5kYXRhLHI7c3dpdGNoKGEudHlwZSl7Y2FzZSJhZGRTb3VuZEJhbmsiOnI9dXQuZnJvbUFycmF5QnVmZmVyKGEuZGF0YS5zb3VuZEJhbmtCdWZmZXIpLHMuYWRkU291bmRCYW5rKHIsYS5kYXRhLmlkLGEuZGF0YS5iYW5rT2Zmc2V0KSx0aGlzLnBvc3RSZWFkeSgic291bmRCYW5rTWFuYWdlciIsbnVsbCk7YnJlYWs7Y2FzZSJkZWxldGVTb3VuZEJhbmsiOnMuZGVsZXRlU291bmRCYW5rKGEuZGF0YSksdGhpcy5wb3N0UmVhZHkoInNvdW5kQmFua01hbmFnZXIiLG51bGwpO2JyZWFrO2Nhc2UicmVhcnJhbmdlU291bmRCYW5rcyI6cy5wcmlvcml0eU9yZGVyPWEuZGF0YSx0aGlzLnBvc3RSZWFkeSgic291bmRCYW5rTWFuYWdlciIsbnVsbCl9fWNhdGNoKHMpe3RoaXMucG9zdCh7dHlwZToic291bmRCYW5rRXJyb3IiLGRhdGE6cyxjdXJyZW50VGltZTp0aGlzLnN5bnRoZXNpemVyLmN1cnJlbnRTeW50aFRpbWV9KX1icmVhaztjYXNlImtleU1vZGlmaWVyTWFuYWdlciI6e2xldCBzPUEuZGF0YSxhPXRoaXMuc3ludGhlc2l6ZXIua2V5TW9kaWZpZXJNYW5hZ2VyO3N3aXRjaChzLnR5cGUpe2RlZmF1bHQ6cmV0dXJuO2Nhc2UiYWRkTWFwcGluZyI6YS5hZGRNYXBwaW5nKHMuZGF0YS5jaGFubmVsLHMuZGF0YS5taWRpTm90ZSxzLmRhdGEubWFwcGluZyk7YnJlYWs7Y2FzZSJjbGVhck1hcHBpbmdzIjphLmNsZWFyTWFwcGluZ3MoKTticmVhaztjYXNlImRlbGV0ZU1hcHBpbmciOmEuZGVsZXRlTWFwcGluZyhzLmRhdGEuY2hhbm5lbCxzLmRhdGEubWlkaU5vdGUpfWJyZWFrfWNhc2UicmVxdWVzdFN5bnRoZXNpemVyU25hcHNob3QiOntsZXQgcz1ycy5jcmVhdGUodGhpcy5zeW50aGVzaXplcik7dGhpcy5wb3N0UmVhZHkoInN5bnRoZXNpemVyU25hcHNob3QiLHMpO2JyZWFrfWNhc2Uic2V0TG9nTGV2ZWwiOktzKEEuZGF0YS5lbmFibGVJbmZvLEEuZGF0YS5lbmFibGVXYXJuaW5nLEEuZGF0YS5lbmFibGVHcm91cCk7YnJlYWs7Y2FzZSJkZXN0cm95V29ya2xldCI6dGhpcy5hbGl2ZT0hMSx0aGlzLnN5bnRoZXNpemVyLmRlc3Ryb3lTeW50aFByb2Nlc3NvcigpLHRoaXMuZGVzdHJveSgpO2JyZWFrO2RlZmF1bHQ6RWUuU3Blc3NhU3ludGhXYXJuKCJVbnJlY29nbml6ZWQgZXZlbnQhIixBKTticmVha319fTt2YXIgJHQ9Y2xhc3MgZXh0ZW5kcyBqdHthbGl2ZT0hMDtvbmVPdXRwdXRNb2RlO3BvcnQ7Y29uc3RydWN0b3IoQSx0LG4scyl7c3VwZXIoQSx7ZW5hYmxlRWZmZWN0czohcy5vbmVPdXRwdXQsZW5hYmxlRXZlbnRTeXN0ZW06cz8uZW5hYmxlRXZlbnRTeXN0ZW0saW5pdGlhbFRpbWU6dH0sKGEscik9PntuLnBvc3RNZXNzYWdlKGEscil9KSx0aGlzLnBvcnQ9bix0aGlzLm9uZU91dHB1dE1vZGU9cy5vbmVPdXRwdXQsdGhpcy5zeW50aGVzaXplci5wcm9jZXNzb3JJbml0aWFsaXplZC50aGVuKCgpPT57dGhpcy5wb3J0Lm9ubWVzc2FnZT1hPT50aGlzLmhhbmRsZU1lc3NhZ2UoYS5kYXRhKSx0aGlzLnBvc3RSZWFkeSgic2YzRGVjb2RlciIsbnVsbCl9KX1wcm9jZXNzKEEsdCl7aWYoIXRoaXMuYWxpdmUpcmV0dXJuITE7aWYodGhpcy5zZXF1ZW5jZXIucHJvY2Vzc1RpY2soKSx0aGlzLm9uZU91dHB1dE1vZGUpe2xldCBuPXRbMF0scz1bXTtmb3IobGV0IGE9MDthPDMyO2ErPTIpcy5wdXNoKFtuW2FdLG5bYSsxXV0pO3RoaXMuc3ludGhlc2l6ZXIucmVuZGVyQXVkaW9TcGxpdChbXSxbXSxzKX1lbHNlIHRoaXMuc3ludGhlc2l6ZXIucmVuZGVyQXVkaW9TcGxpdCh0WzBdLHRbMV0sdC5zbGljZSgyKSk7cmV0dXJuITB9aGFuZGxlTWVzc2FnZShBKXtpZihBLnR5cGU9PT0ic3RhcnRPZmZsaW5lUmVuZGVyIil7dGhpcy5zdGFydE9mZmxpbmVSZW5kZXIoQS5kYXRhKTtyZXR1cm59c3VwZXIuaGFuZGxlTWVzc2FnZShBKX1zdGFydE9mZmxpbmVSZW5kZXIoQSl7aWYoIXRoaXMuc2VxdWVuY2VyKXJldHVybjtBLnNvdW5kQmFua0xpc3QuZm9yRWFjaCgobixzKT0+e3RyeXt0aGlzLnN5bnRoZXNpemVyLnNvdW5kQmFua01hbmFnZXIuYWRkU291bmRCYW5rKHV0LmZyb21BcnJheUJ1ZmZlcihuLnNvdW5kQmFua0J1ZmZlciksYGJhbmstJHtzfWAsbi5iYW5rT2Zmc2V0KX1jYXRjaChhKXt0aGlzLnBvc3Qoe3R5cGU6InNvdW5kQmFua0Vycm9yIixkYXRhOmEsY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9fSksQS5zbmFwc2hvdCE9PXZvaWQgMCYmdGhpcy5zeW50aGVzaXplci5hcHBseVN5bnRoZXNpemVyU25hcHNob3QoQS5zbmFwc2hvdCksRWUuU3Blc3NhU3ludGhJbmZvKCIlY1JlbmRlcmluZyBlbmFibGVkISBTdGFydGluZyByZW5kZXIuIix6dC5pbmZvKSx0aGlzLnNlcXVlbmNlci5sb29wQ291bnQ9QS5sb29wQ291bnQsdGhpcy5zeW50aGVzaXplci5zZXRNYXN0ZXJQYXJhbWV0ZXIoInZvaWNlQ2FwIiwxLzApO2xldCB0PWJhKEEuc2VxdWVuY2VyT3B0aW9ucyx2YSk7dGhpcy5zZXF1ZW5jZXIuc2tpcFRvRmlyc3ROb3RlT249dC5za2lwVG9GaXJzdE5vdGVPbix0aGlzLnNlcXVlbmNlci5wbGF5YmFja1JhdGU9dC5pbml0aWFsUGxheWJhY2tSYXRlO3RyeXt0aGlzLnNlcXVlbmNlci5sb2FkTmV3U29uZ0xpc3QoW0xlLmNvcHlGcm9tKEEubWlkaVNlcXVlbmNlKV0pLHRoaXMuc2VxdWVuY2VyLnBsYXkoKX1jYXRjaChuKXtjb25zb2xlLmVycm9yKG4pLHRoaXMucG9zdCh7dHlwZToic2VxdWVuY2VyUmV0dXJuIixkYXRhOnt0eXBlOiJtaWRpRXJyb3IiLGRhdGE6bn0sY3VycmVudFRpbWU6dGhpcy5zeW50aGVzaXplci5jdXJyZW50U3ludGhUaW1lfSl9dGhpcy5wb3N0UmVhZHkoInN0YXJ0T2ZmbGluZVJlbmRlciIsbnVsbCl9fTt2YXIgSXM9Y2xhc3MgZXh0ZW5kcyBBdWRpb1dvcmtsZXRQcm9jZXNzb3J7cHJvY2Vzcztjb3JlO2NvbnN0cnVjdG9yKEEpe3N1cGVyKCksdGhpcy5jb3JlPW5ldyAkdChzYW1wbGVSYXRlLGN1cnJlbnRUaW1lLHRoaXMucG9ydCxBLnByb2Nlc3Nvck9wdGlvbnMpLHRoaXMucHJvY2Vzcz10aGlzLmNvcmUucHJvY2Vzcy5iaW5kKHRoaXMuY29yZSl9fTtyZWdpc3RlclByb2Nlc3NvcihNYSxJcyk7RWUuU3Blc3NhU3ludGhJbmZvKCIlY1Byb2Nlc3NvciBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCEiLHp0LnJlY29nbml6ZWQpOwovLyMgc291cmNlTWFwcGluZ1VSTD1zcGVzc2FzeW50aF9wcm9jZXNzb3IubWluLmpzLm1hcAo=";class vn extends Ol{constructor(t,l={}){super(t,l),this.synthesizer=null,this.soundfont=null,this.channelCounter=0,this.partToMidiChannel=new Map,this.midiChannelToPart=new Map,this.individualOutputs=[],this.metronomeAnalyser=null}async initialize(t){this._emitProgress("importing","Loading SpessaSynth library...");const{WorkletSynthesizer:l}=await Promise.resolve().then(()=>_Q);let e;if(typeof t=="string")this._emitProgress("loading-soundfont","Downloading soundfont..."),e=await this._loadSoundfontWithProgress(t);else if(t instanceof ArrayBuffer)this._emitProgress("loading-soundfont","Soundfont provided"),e=t;else throw new Error("Invalid soundfont data type. Expected string path or ArrayBuffer.");this._emitProgress("loading-worklet","Loading audio worklet processor..."),await this._loadAudioWorkletSafely(),console.log("AudioWorklet loaded. Note: Worklet processor may persist across page reloads."),this._emitProgress("creating-synth","Setting up audio channels..."),this._setupIndividualOutputs(),this.dummyTarget=this.audioContext.createGain(),await new Promise(n=>setTimeout(n,50)),this._emitProgress("creating-synth","Initializing synthesizer..."),this.synthesizer=new l(this.audioContext),this._emitProgress("loading-soundbank","Loading soundbank into synthesizer..."),await this.synthesizer.soundBankManager.addSoundBank(e,"main"),await this.synthesizer.isReady,this._emitProgress("finalizing","Finalizing audio setup..."),this._connectIndividualOutputs(),this._initializeMetronomeChannel(),this._emitProgress("ready","Audio engine ready"),this.isInitialized=!0}createChannel(t,l={}){if(this._validateInitialized(),this.partToMidiChannel.has(t))throw new Error(`Channel for part '${t}' already exists`);const e=this.channelCounter;if(e>=15)throw new Error("Maximum number of musical part channels (15) exceeded. Channel 15 is reserved for metronome.");this.channelCounter++,this.partToMidiChannel.set(t,e),this.midiChannelToPart.set(e,t);const n=new Mn(this,t,e,l);return this._registerChannel(n),l.instrument&&n.setInstrument(l.instrument),n}allSoundsOff(){if(this.synthesizer){for(let t=0;t<16;t++)this.synthesizer.controllerChange&&(this.synthesizer.controllerChange(t,120,0),this.synthesizer.controllerChange(t,123,0),this.synthesizer.controllerChange(t,121,0));console.log("Sent comprehensive reset to all 16 MIDI channels")}}clearAllChannels(){this.allSoundsOff(),this.partToMidiChannel.clear(),this.midiChannelToPart.clear(),this.channelCounter=0}destroy(){this.allSoundsOff(),this.synthesizer&&typeof this.synthesizer.disconnect=="function"&&this.synthesizer.disconnect(),this.individualOutputs.forEach(t=>{t&&t.disconnect&&t.disconnect()}),this.individualOutputs=[],this.dummyTarget&&(this.dummyTarget.disconnect(),this.dummyTarget=null),this.partToMidiChannel.clear(),this.midiChannelToPart.clear(),this.channelCounter=0,super.destroy(),this.synthesizer=null,this.soundfont=null}getMidiChannelForPart(t){return this.partToMidiChannel.has(t)?this.partToMidiChannel.get(t):null}_getSynthesizer(){return this.synthesizer}_getIndividualOutput(t){return t>=0&&t<this.individualOutputs.length?this.individualOutputs[t]:null}getMetronomeChannel(){const t=this._getIndividualOutput(15);return console.log("Metronome channel 15 output:",t?"Available":"NULL",`(total outputs: ${this.individualOutputs.length})`),t}_setupIndividualOutputs(){this.individualOutputs=[];for(let t=0;t<16;t++){const l=this.audioContext.createGain();l.gain.value=1,this.individualOutputs.push(l)}this._setupMetronomeAnalyser()}_setupMetronomeAnalyser(){const t=this.individualOutputs[15];if(!t){console.warn("Cannot setup metronome analyser: channel 15 not available");return}this.metronomeAnalyser=this.audioContext.createAnalyser(),this.metronomeAnalyser.fftSize=2048,this.metronomeAnalyser.smoothingTimeConstant=0,t.connect(this.metronomeAnalyser),console.log("Metronome analyser initialized for latency measurement")}_connectIndividualOutputs(){try{this.synthesizer&&this.synthesizer.connectIndividualOutputs?this.synthesizer.connectIndividualOutputs(this.individualOutputs):(console.warn("Synthesizer does not support individual outputs, using master output only"),this.synthesizer&&this.synthesizer.connect&&this.audioContext.destination&&this.synthesizer.connect(this.audioContext.destination))}catch(t){console.warn("Failed to connect individual outputs:",t.message),console.warn("Falling back to master output routing")}}async _loadSoundfontWithProgress(t){const l=await fetch(t);if(!l.ok)throw new Error(`Failed to load soundfont: ${l.status} ${l.statusText}`);const e=l.headers.get("content-length"),n=e?parseInt(e,10):null;if(!n||!l.body)return await l.arrayBuffer();const Q=l.body.getReader();let A=0;const s=[];for(;;){const{done:U,value:B}=await Q.read();if(U)break;s.push(B),A+=B.length;const m=A/n,h=Math.round(m*100);this._emitProgress("loading-soundfont",`Downloading soundfont: ${h}% (${Math.round(A/1024)} KB / ${Math.round(n/1024)} KB)`,m)}const d=new Uint8Array(A);let i=0;for(const U of s)d.set(U,i),i+=U.length;return d.buffer}async _loadAudioWorkletSafely(){for(let t=1;t<=5;t++)try{await this.audioContext.audioWorklet.addModule(xn);return}catch(l){if(console.warn(`AudioWorklet loading failed (attempt ${t}/5):`,l.message),t===5)throw new Error(`AudioWorklet failed after 5 attempts: ${l.message}`);const e=t*500;await new Promise(n=>setTimeout(n,e))}}_initializeMetronomeChannel(){try{const t=this._getSynthesizer();if(!t){console.warn("Cannot initialize metronome channel: synthesizer not available");return}const l=15;t.programChange&&(t.programChange(l,115),console.log("Metronome channel 15 initialized with woodblock instrument (115)")),t.controllerChange&&t.controllerChange(l,7,127)}catch(t){console.warn("Failed to initialize metronome channel:",t)}}async playMetronomeTick(t,l,e){try{const n=this.getMetronomeChannel(),Q=this._getSynthesizer();if(!n||!Q)return super.playMetronomeTick(t,l,e);const A=15,s=l?86:60,d=Math.round(Math.min(127,Math.max(0,e*(l?127:100)))),i=this.audioContext.currentTime,U=Math.max(t,i),B=U-i;Q.post?(Q.post({channelNumber:A,type:"midiMessage",data:{messageData:[144|A,s,d],channelOffset:0,force:!1,options:{time:U}}}),Q.post({channelNumber:A,type:"midiMessage",data:{messageData:[128|A,s,0],channelOffset:0,force:!1,options:{time:U+.1}}})):B<=.01?(Q.noteOn&&Q.noteOn(A,s,d),setTimeout(()=>{Q.noteOff&&Q.noteOff(A,s)},100)):setTimeout(()=>{Q.noteOn&&Q.noteOn(A,s,d),setTimeout(()=>{Q.noteOff&&Q.noteOff(A,s)},100)},B*1e3)}catch(n){return console.warn("MIDI metronome failed, falling back to buffers:",n),super.playMetronomeTick(t,l,e)}}getMetronomeOutput(){return!this.individualOutputs||this.individualOutputs.length<16?null:this.individualOutputs[15]}getMetronomeAnalyser(){return this.metronomeAnalyser}}class Dn extends _l{constructor(t,l,e={}){super(t,l,e),this.currentVolume=e.initialVolume||1,this.currentInstrument=0,this.outputGain=null,this.activeSources=new Map,this.synthMode="sample",this.tinySynthChannel=null,this._setupOutputNode(),e.instrument!==void 0&&this.setInstrument(e.instrument)}getOutputNode(){return this.outputGain}_actualNoteOn(t,l){this.synthMode==="sample"?this._playSampleNote(t,l):this._playTinySynthNote(t,l,!0)}_actualNoteOff(t){this.synthMode==="sample"?this._stopSampleNote(t):this._playTinySynthNote(t,0,!1)}_playSampleNote(t,l){const e=this.engine._getSamplesForInstrument(this.currentInstrument);if(!e){console.warn(`No samples available for instrument ${this.currentInstrument}`);return}const n=this.engine._midiNoteToName(t),Q=e.get(n);if(!Q){console.warn(`No sample found for note ${n} (pitch ${t})`);return}const A=this.engine.audioContext.createBufferSource();A.buffer=Q,A.loop=Q._shouldLoop||!1,A.loop&&(A.loopStart=.4,A.loopEnd=Q.duration);const s=this.engine.audioContext.createGain(),d=l/127;s.gain.value=d*this.currentVolume,A.connect(s),s.connect(this.outputGain),this.activeSources.has(t)||this.activeSources.set(t,new Set),this.activeSources.get(t).add(A),A.onended=()=>{s.disconnect();const i=this.activeSources.get(t);i&&(i.delete(A),i.size===0&&this.activeSources.delete(t))},A.start(0)}_stopSampleNote(t){const l=this.activeSources.get(t);l&&(l.forEach(e=>{try{if(e.loop)e.stop();else{const n=this.engine.audioContext.currentTime,Q=e._velocityGain;Q&&Q.gain.linearRampToValueAtTime(0,n+.05),e.stop(n+.05)}}catch{}}),l.clear(),this.activeSources.delete(t))}async _playTinySynthNote(t,l,e){const n=await this.engine._getTinySynth();if(this.tinySynthChannel===null){this.tinySynthChannel=this._allocateTinySynthChannel(),n.setProgram(this.tinySynthChannel,this.currentInstrument);const Q=Math.round(this.currentVolume*127);n.setChVol(this.tinySynthChannel,Q)}if(e){const Q=Math.round(l*this.currentVolume);n.noteOn(this.tinySynthChannel,t,Q)}else n.noteOff(this.tinySynthChannel,t)}_allocateTinySynthChannel(){const t=new Set;this.engine.activeChannels.forEach(l=>{l.tinySynthChannel!==null&&t.add(l.tinySynthChannel)});for(let l=0;l<16;l++)if(l!==9&&!t.has(l))return this.engine.tinySynthChannels.add(l),l;return console.warn("All TinySynth channels in use, reusing channel 0"),0}async setInstrument(t){this._validateActive();const l=da.getInstrumentProgram(t),e=this.currentInstrument;this.currentInstrument=l;const n=this.engine._getSamplesForInstrument(l),Q=this.synthMode;this.synthMode=n?"sample":"synth",Q!==this.synthMode&&this.allNotesOff(),this.synthMode==="synth"&&this.tinySynthChannel!==null&&(await this.engine._getTinySynth()).setProgram(this.tinySynthChannel,l),(e!==l||Q!==this.synthMode)&&console.log(`Channel ${this.partId}: Instrument ${t} (${l}) -> ${this.synthMode} mode`)}getInstrument(){return this.currentInstrument}setVolume(t){if(this._validateActive(),t=Math.max(0,Math.min(1,t)),this.currentVolume=t,this.outputGain&&(this.outputGain.gain.value=t),this.synthMode==="synth"&&this.tinySynthChannel!==null&&this.engine.tinySynth){const l=Math.round(t*127);this.engine.tinySynth.setChVol(this.tinySynthChannel,l)}}getVolume(){return this.currentVolume}allNotesOff(){this._validateActive(),this.scheduledEvents.forEach(t=>{clearTimeout(t)}),this.scheduledEvents.clear(),this.activeSources.forEach((t,l)=>{t.forEach(e=>{try{e.stop()}catch{}})}),this.activeSources.clear(),this.synthMode==="synth"&&this.tinySynthChannel!==null&&this.engine.tinySynth&&this.engine.tinySynth.allSoundOff(this.tinySynthChannel),this.noteRefCounts.clear(),this.activeNotes.clear()}destroy(){this.isDestroyed||(this.allNotesOff(),this.outputGain&&(this.outputGain.disconnect(),this.outputGain=null),this.tinySynthChannel!==null&&(this.engine.tinySynthChannels.delete(this.tinySynthChannel),this.tinySynthChannel=null)),super.destroy()}_setupOutputNode(){this.outputGain=this.engine._getChannelOutput(this.partId),this.outputGain||(console.warn(`No output gain node for channel ${this.partId}, creating fallback`),this.outputGain=this.engine.audioContext.createGain(),this.outputGain.gain.value=this.currentVolume)}}const Kn="/assets/samples/grand_piano.json",wn="/assets/samples/choir_aahs.json",fn="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",zn="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qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//tkxPIADij5M+wwzYmAm6X9hJmwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//s0xPaAClDTI6OxLwCwkeLoEJkoqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sUxNoDwAAB/gAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";class Hn extends Ol{constructor(t,l={}){super(t,l),this.pianoSamples=null,this.choirSamples=null,this.channelCounter=0,this.partToChannel=new Map,this.channelOutputs=new Map,this.tinySynth=null,this.tinySynthChannels=new Set}async initialize(t={}){this._emitProgress("loading-samples","Loading audio samples...");const l=t.pianoUrl||Kn,e=t.choirUrl||wn;this._emitProgress("loading-piano","Loading piano samples...",.1),this.pianoSamples=await this._loadSampleFile(l,!1),this._emitProgress("loading-choir","Loading choir samples...",.5),this.choirSamples=await this._loadSampleFile(e,!0),this._emitProgress("loading-metronome","Loading metronome sounds...",.9),await this._loadEmbeddedMetronomeSounds(),this._emitProgress("ready","Audio engine ready",1),this.isInitialized=!0}async _loadSampleFile(t,l){try{const e=await fetch(t);if(!e.ok)throw new Error(`Failed to load samples: ${e.status} ${e.statusText}`);const n=await e.json();if(!n||typeof n!="object")throw new Error("Invalid sample data format");const Q=new Map,A=Object.keys(n);for(let s=0;s<A.length;s++){const d=A[s],i=n[d],U=await this._decodeBase64Audio(i,l);Q.set(d,U);const B=(s+1)/A.length;this._emitProgress("loading-samples",`Loaded ${s+1}/${A.length} samples`,B)}return Q}catch(e){throw console.error("Failed to load sample file:",e),e}}async _decodeBase64Audio(t,l){const e=t.split(",")[1],n=atob(e),Q=new Uint8Array(n.length);for(let s=0;s<n.length;s++)Q[s]=n.charCodeAt(s);const A=await this.audioContext.decodeAudioData(Q.buffer);return A._shouldLoop=l,A}async _loadEmbeddedMetronomeSounds(){try{const t=atob(fn),l=new Uint8Array(t.length);for(let Q=0;Q<t.length;Q++)l[Q]=t.charCodeAt(Q);this.regularTickBuffer=await this.audioContext.decodeAudioData(l.buffer);const e=atob(zn),n=new Uint8Array(e.length);for(let Q=0;Q<e.length;Q++)n[Q]=e.charCodeAt(Q);this.accentTickBuffer=await this.audioContext.decodeAudioData(n.buffer)}catch(t){console.warn("Failed to load embedded metronome sounds:",t),this.regularTickBuffer=this.audioContext.createBuffer(2,1024,this.audioContext.sampleRate),this.accentTickBuffer=this.audioContext.createBuffer(2,1024,this.audioContext.sampleRate)}}_midiNoteToName(t){const l=["C","Db","D","Eb","E","F","Gb","G","Ab","A","Bb","B"],e=Math.floor(t/12)-1;return`${l[t%12]}${e}`}_getSamplesForInstrument(t){return t===0?this.pianoSamples:t>=52&&t<=54?this.choirSamples:null}createChannel(t,l={}){if(this._validateInitialized(),this.partToChannel.has(t))throw new Error(`Channel for part '${t}' already exists`);const e=this.audioContext.createGain();e.gain.value=l.initialVolume||1,this.channelOutputs.set(t,e);const n=new Dn(this,t,l);return this.partToChannel.set(t,{handle:n,outputGain:e,currentInstrument:l.instrument||0}),this._registerChannel(n),l.instrument!==void 0&&n.setInstrument(l.instrument),n}allSoundsOff(){if(this.activeChannels.forEach(t=>{t.allNotesOff&&t.allNotesOff()}),this.tinySynth)for(let t=0;t<16;t++)this.tinySynth.allSoundOff(t)}clearAllChannels(){this.allSoundsOff(),this.partToChannel.clear(),this.tinySynthChannels.clear(),this.channelCounter=0}_getChannelOutput(t){return this.channelOutputs.get(t)}async _getTinySynth(){if(!this.tinySynth){const{default:t}=await Promise.resolve().then(()=>as).then(l=>l.w);this.tinySynth=new t,this.tinySynthGain=this.audioContext.createGain(),this.tinySynthGain.gain.value=1,this.tinySynth.setAudioContext(this.audioContext,this.tinySynthGain),this.tinySynthGain.connect(this.audioContext.destination),console.log("WebAudioTinySynth initialized (fallback synthesis)")}return this.tinySynth}_getTinySynthOutput(){return this.tinySynthGain}getMetronomeAnalyser(){return!this._metronomeAnalyser&&this._metronomeOutput&&(this._metronomeAnalyser=this.audioContext.createAnalyser(),this._metronomeAnalyser.fftSize=2048,this._metronomeAnalyser.smoothingTimeConstant=0,this._metronomeOutput.connect(this._metronomeAnalyser)),this._metronomeAnalyser||null}destroy(){this.allSoundsOff(),this.channelOutputs.forEach(t=>{t.disconnect()}),this.channelOutputs.clear(),this.tinySynthGain&&this.tinySynthGain.disconnect(),this.tinySynth=null,this.tinySynthGain=null,this._metronomeAnalyser&&(this._metronomeAnalyser.disconnect(),this._metronomeAnalyser=null),this.partToChannel.clear(),this.tinySynthChannels.clear(),super.destroy(),this.pianoSamples=null,this.choirSamples=null}}class qn{constructor(){this.partNames=["soprano","alto","tenor","bass","treble","mezzo","baritone","s","a","t","b","satb"],this.parsedData={parts:{},barStructure:[],metadata:{}}}async parse(t,l=null){try{const e=await this._parseMidiBuffer(t);return this.metadataOverrides=l||{},this._normalizeLegacyMetadata(),this._extractMetadata(e),this._extractBarStructure(e),this._extractParts(e),this.parsedData.structureMetadata=this.metadataOverrides,this.parsedData}catch(e){throw console.error("Error parsing MIDI file:",e),e}}_normalizeLegacyMetadata(){if(!this.metadataOverrides||Object.keys(this.metadataOverrides).length===0)return;const t=this.metadataOverrides;if(t.scores&&Array.isArray(t.scores)&&t.scores.length>0){const l=t.scores[0];l.parts&&(t.parts=this._convertLegacyParts(l.parts)),l.bars&&(t.bars=l.bars),delete t.scores}else t.parts&&Array.isArray(t.parts)&&(t.parts=this._convertLegacyParts(t.parts));delete t.type,delete t.version,delete t.subtitle}_convertLegacyParts(t){const l={};for(const e of t){if(!e.name||!e.url)continue;const n=e.name.toLowerCase(),Q=this._parseUrlParams(e.url),A={};Q.track!==void 0&&(A.channel=parseInt(Q.track,10)),Q.prog!==void 0&&(A.instrument=parseInt(Q.prog,10)),A.channel!==void 0&&(l[n]=A)}return l}_parseUrlParams(t){const l={},e=t.indexOf("?");if(e===-1)return l;const n=t.substring(e+1).split("&");for(const Q of n){const[A,s]=Q.split("=");A&&s!==void 0&&(l[A]=s)}return l}async _parseMidiBuffer(t){const l=new Uint8Array(t);if(!(l[0]===77&&l[1]===84&&l[2]===104&&l[3]===100))throw new Error("Not a valid MIDI file");const e=this._bytesToNumber(l.slice(4,8)),n=this._bytesToNumber(l.slice(8,10)),Q=this._bytesToNumber(l.slice(10,12)),A=this._bytesToNumber(l.slice(12,14)),s=A&32768?null:A,d={format:n,ticksPerBeat:s,tracks:[],duration:0};let i=8+e;for(let U=0;U<Q;U++)if(l[i]===77&&l[i+1]===84&&l[i+2]===114&&l[i+3]===107){const B=this._bytesToNumber(l.slice(i+4,i+8)),m=l.slice(i+8,i+8+B),h=this._parseTrack(m);d.tracks.push(h),i+=8+B}else throw new Error(`Invalid track header at position ${i}`);return d}_parseTrack(t){const l={notes:[],name:null,lyrics:[],events:[],duration:0};let e=0,n=0,Q=null;for(;e<t.length;){let A=0,s=0;do s=t[e++],A=A<<7|s&127;while(s&128);n+=A,s=t[e++];let d=s;if(s&128)Q=d;else{if(Q===null)throw new Error("Running status byte encountered before status byte");d=Q,e--}if(d===255){const i=t[e++],U=this._readVariableLengthValue(t,e);e+=U.bytesRead;const B=t.slice(e,e+U.value);switch(e+=U.value,i){case 3:l.name=this._bytesToString(B);break;case 1:l.events.push({type:"text",text:this._bytesToString(B),tick:n});break;case 5:l.lyrics.push({text:this._bytesToString(B),tick:n});break;case 81:const m=this._bytesToNumber(B),h=Math.round(6e7/m);l.events.push({type:"tempo",bpm:h,tick:n});break;case 88:l.events.push({type:"timeSignature",numerator:B[0],denominator:Math.pow(2,B[1]),tick:n});break;case 47:l.duration=n;break}}else if((d&240)===144){const i=d&15,U=t[e++],B=t[e++];B>0?l.notes.push({type:"noteOn",noteNumber:U,velocity:B,tick:n,channel:i}):l.notes.push({type:"noteOff",noteNumber:U,tick:n,channel:i})}else if((d&240)===128){const i=d&15,U=t[e++];t[e++],l.notes.push({type:"noteOff",noteNumber:U,tick:n,channel:i})}else if(d===240||d===247){const i=this._readVariableLengthValue(t,e);e+=i.bytesRead+i.value}else if((d&240)===176){const i=d&15,U=t[e++],B=t[e++];l.events.push({type:"controller",controllerNumber:U,value:B,channel:i,tick:n})}else if((d&240)===192){const i=d&15,U=t[e++];l.events.push({type:"programChange",programNumber:U,channel:i,tick:n})}else if((d&240)===208){const i=d&15,U=t[e++];l.events.push({type:"channelAftertouch",pressure:U,channel:i,tick:n})}else if((d&240)===224){const i=d&15,U=t[e++],B=(t[e++]<<7|U)-8192;l.events.push({type:"pitchBend",value:B,channel:i,tick:n})}else if((d&240)===160){const i=d&15,U=t[e++],B=t[e++];l.events.push({type:"noteAftertouch",noteNumber:U,pressure:B,channel:i,tick:n})}else console.warn(`Unknown event type: ${d.toString(16)} at position ${e-1}`),e++}return l}_extractMetadata(t){const l={title:null,composer:null,partNames:[],format:t.format,ticksPerBeat:t.ticksPerBeat};t.tracks.forEach((e,n)=>{if(e.name&&!l.title&&(l.title=e.name),e.events.filter(Q=>Q.type==="text").forEach(Q=>{const A=Q.text.toLowerCase();(A.includes("compos")||A.includes("by"))&&!l.composer&&(l.composer=Q.text)}),e.name){const Q=e.name.toLowerCase();for(const A of this.partNames)if(Q.includes(A)){l.partNames.push({index:n,name:e.name});break}}}),this.metadataOverrides.title!==void 0&&(l.title=this.metadataOverrides.title),this.metadataOverrides.composer!==void 0&&(l.composer=this.metadataOverrides.composer),this.metadataOverrides.arranger!==void 0&&(l.arranger=this.metadataOverrides.arranger),this.metadataOverrides.copyright!==void 0&&(l.copyright=this.metadataOverrides.copyright),this.parsedData.metadata=l}_extractBarStructure(t){const l=t.ticksPerBeat||480,e=[];t.tracks.forEach(U=>{U.events.forEach(B=>{(B.type==="timeSignature"||B.type==="tempo")&&e.push(B)})}),e.sort((U,B)=>U.tick-B.tick);let n=0;t.tracks.forEach(U=>{U.notes&&U.notes.forEach(B=>{B.type==="noteOff"&&B.tick>n&&(n=B.tick)})}),n===0&&(n=l*8);const Q=[],A=e.filter(U=>U.type==="timeSignature").sort((U,B)=>U.tick-B.tick);let s={numerator:4,denominator:4},d=0,i=0;for(;d<n;){for(;i<A.length&&A[i].tick<=d;)s=A[i],i++;let U;U=d+l*4*s.numerator/s.denominator;const B=s.numerator,m=[],h=l*(4/s.denominator);for(let o=0;o<B;o++){const Z=d+o*h,u=this._ticksToTime(Z,t);m.push(u)}Q.push({sig:[s.numerator,s.denominator],beats:m}),d=U}this.parsedData.barStructure=Q}_extractParts(t){const l={},e=t.ticksPerBeat;if(this.metadataOverrides.parts)for(const[n,Q]of Object.entries(this.metadataOverrides.parts)){if(Q.channel!==void 0&&Q.channel!==null){if(Q.channel===15){console.error(`Part "${n}" uses channel 15 which is reserved for metronome. Skipping.`);continue}if(Q.channel===9&&console.warn(`Part "${n}" uses channel 9 (drums/percussion). This may not be appropriate for vocal parts.`),Q.channel<0||Q.channel>15){console.error(`Part "${n}" has invalid channel ${Q.channel}. MIDI channels must be 0-15. Skipping.`);continue}}if(Q.channel===void 0&&!Q.trackIndex&&Q.trackIndex!==0&&!Q.trackName)continue;let A;if(Q.channel!==void 0&&Q.channel!==null){if(A=this._extractPartDataByChannel(Q.channel,t,e),!A||A.notes.length===0){console.warn(`Part "${n}" specified channel ${Q.channel} but no notes found on that channel. Skipping.`);continue}}else if(Q.trackIndex!==void 0&&Q.trackIndex!==null){const s=Q.trackIndex;if(s>=0&&s<t.tracks.length){const d=t.tracks[s];A=this._extractPartDataFromTrack(d,s,t,e)}else{console.warn(`Part "${n}" specified trackIndex ${s} but track not found. Skipping.`);continue}}else if(Q.trackName){const s=t.tracks.findIndex(d=>d.name===Q.trackName);if(s!==-1){const d=t.tracks[s];A=this._extractPartDataFromTrack(d,s,t,e)}else{console.warn(`Part "${n}" specified trackName "${Q.trackName}" but track not found. Skipping.`);continue}}A&&(Q.instrument!==void 0&&Q.instrument!==null&&(A.defaultInstrument=this._resolveInstrument(Q.instrument),A.programChanges=[]),l[n]=A)}else t.tracks.forEach((n,Q)=>{if(!n.notes.length)return;let A=null;if(n.name){const i=n.name.toLowerCase();for(const U of this.partNames)if(U.length===1){if(i===U){A=U;break}}else if(i.includes(U)){A=U;break}}A||(A=n.name||`Track ${Q+1}`),A==="s"&&(A="soprano"),A==="a"&&(A="alto"),A==="t"&&(A="tenor"),A==="b"&&(A="bass");let s=A,d=2;for(;l[s];)s=`${A} ${d}`,d++;A=s,l[A]=this._extractPartDataFromTrack(n,Q,t,e)});this.parsedData.parts=l}_extractPartDataByChannel(t,l,e){const n=[],Q=[],A=[],s=[];l.tracks.forEach((i,U)=>{const B={};i.notes.forEach(m=>{if(m.channel===t){if(m.type==="noteOn")B[m.noteNumber]={tick:m.tick,velocity:m.velocity};else if(m.type==="noteOff"&&B[m.noteNumber]){const h=B[m.noteNumber],o=m.tick-h.tick;n.push({pitch:m.noteNumber,name:this._midiNoteToName(m.noteNumber),startTick:h.tick,endTick:m.tick,duration:o,startTime:this._ticksToTime(h.tick,l),endTime:this._ticksToTime(m.tick,l),velocity:h.velocity,channel:t,sourceTrackIndex:U}),delete B[m.noteNumber]}}}),i.lyrics.forEach(m=>{Q.push({text:m.text,tick:m.tick,time:m.tick/e})}),i.events.filter(m=>m.type==="programChange"&&m.channel===t).forEach(m=>{A.push({programNumber:m.programNumber,tick:m.tick,time:this._ticksToTime(m.tick,l),sourceTrackIndex:U})}),i.notes.some(m=>m.channel===t)&&s.push(U)}),n.sort((i,U)=>i.startTick-U.startTick),Q.sort((i,U)=>i.tick-U.tick),A.sort((i,U)=>i.tick-U.tick);const d=A.length>0?A[0].programNumber:0;return{notes:n,lyrics:Q,channel:t,trackIndices:s,programChanges:A,defaultInstrument:d}}_extractPartDataFromTrack(t,l,e,n){const Q=[],A={};t.notes.forEach(U=>{if(U.type==="noteOn")A[U.noteNumber]={tick:U.tick,velocity:U.velocity,channel:U.channel};else if(U.type==="noteOff"&&A[U.noteNumber]){const B=A[U.noteNumber],m=U.tick-B.tick;Q.push({pitch:U.noteNumber,name:this._midiNoteToName(U.noteNumber),startTick:B.tick,endTick:U.tick,duration:m,startTime:this._ticksToTime(B.tick,e),endTime:this._ticksToTime(U.tick,e),velocity:B.velocity,channel:B.channel,sourceTrackIndex:l}),delete A[U.noteNumber]}});const s=t.lyrics.map(U=>({text:U.text,tick:U.tick,time:U.tick/n}));Q.sort((U,B)=>U.startTick-B.startTick);const d=t.events.filter(U=>U.type==="programChange").map(U=>({programNumber:U.programNumber,tick:U.tick,time:this._ticksToTime(U.tick,e)})).sort((U,B)=>U.tick-B.tick),i=d.length>0?d[0].programNumber:0;return{notes:Q,lyrics:s,trackIndex:l,programChanges:d,defaultInstrument:i}}_resolveInstrument(t){if(typeof t=="number")return t;if(typeof t=="string"){const l={choir_aahs:52,piano:0,acoustic_grand_piano:0,bright_acoustic_piano:1,electric_grand_piano:2,strings:48,string_ensemble_1:48,violin:40,viola:41,cello:42,contrabass:43},e=t.toLowerCase().replace(/ /g,"_");return l[e]!==void 0?l[e]:0}return 0}_midiNoteToName(t){const l=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"],e=Math.floor(t/12)-1;return`${l[t%12]}${e}`}_bytesToNumber(t){let l=0;for(let e=0;e<t.length;e++)l=l<<8|t[e];return l}_bytesToString(t){return new TextDecoder().decode(t)}_readVariableLengthValue(t,l){let e=0,n,Q=0;do n=t[l+Q++],e=e<<7|n&127;while(n&128);return{value:e,bytesRead:Q}}_ticksToTime(t,l){const e=l.ticksPerBeat||480,n=[];l.tracks.forEach(d=>{d.events.forEach(i=>{i.type==="tempo"&&n.push(i)})}),n.sort((d,i)=>d.tick-i.tick);let Q=0,A=0,s=120;for(const d of n){if(d.tick>t)break;if(d.tick>A){const i=(d.tick-A)/e*(60/s);Q+=i,A=d.tick}s=d.bpm}if(t>A){const d=(t-A)/e*(60/s);Q+=d}return Q}}class jn{constructor(){this.barOrder=[],this.beatTable=[]}mapBeats(t,l){try{return l.bars&&!l.sections?this.barOrder=this.generateBarOrderFromLegacyBars(l.bars,t.barStructure):l.sections&&l.order?this.barOrder=this.generateBarOrder(l.sections,l.order):this.barOrder=this.generateLinearBarOrder(t.barStructure),this.beatTable=this.generateBeatTable(this.barOrder,t.barStructure),this.beatTable}catch(e){throw console.error("Error mapping beats:",e),e}}generateBarOrder(t,l){const e=[],n={};for(const Q of l){const A=t[Q.section];if(!A)throw new Error(`Invalid section index: ${Q.section}`);const s=Q.section;n[s]||(n[s]=0),n[s]++;const d=n[s],i=Q.from!==void 0?Q.from:this._getSectionStartBar(t,Q.section),U=Q.to!==void 0?Q.to:A.to,B=Q.as||1;for(let m=i;m<=U;m++)this._shouldPlayBar(A,m,B)&&e.push({barNumber:m,repeat:d,sectionIndex:Q.section,voltaTime:B})}return e}generateBarOrderFromLegacyBars(t,l){const e=[];let n=1,Q=0,A;for(const s of t){s.from!==void 0&&(n=s.from===-1?0:s.from,Q=0),s.timeSig!==void 0&&(A=s.timeSig);const d=s.repeat||1;let i=0;if(s.to!==void 0)if(Q>0){const B=A!==void 0?A:this._getBeatsPerBar(n,l);i+=B-Q;for(let m=n+1;m<=s.to;m++){const h=A!==void 0?A:this._getBeatsPerBar(m,l);i+=h}}else for(let B=n;B<=s.to;B++){const m=A!==void 0?A:this._getBeatsPerBar(B,l);i+=m}if(s.beats!==void 0&&(i+=s.beats),i===0&&s.to===void 0&&s.beats===void 0)throw new Error(`Bar entry must specify either 'to' or 'beats': ${JSON.stringify(s)}`);let U=i;for(;U>0;){const B=(A!==void 0?A:this._getBeatsPerBar(n,l))-Q;U>=B?(e.push({barNumber:n,repeat:d,sectionIndex:0,voltaTime:1}),U-=B,Q=0,n===0?n=1:n++):(Q+=U,U=0)}}return Q>0&&e.push({barNumber:n,repeat:1,sectionIndex:0,voltaTime:1,partialBeats:Q}),e}generateLinearBarOrder(t){const l=[];for(let e=0;e<t.length;e++)l.push({barNumber:e+1,repeat:1,sectionIndex:0,voltaTime:1});return l}_getBeatsPerBar(t,l){const e=l.length>0&&l[0].sig&&l[0].sig[0]<=2;let n;if(e?n=t:n=t-1,n<0||n>=l.length)return 4;const Q=l[n];return Q.sig?Q.sig[0]:4}generateBeatTable(t,l){const e=[],n={};let Q=0,A=0;const s=[...l];for(;A<t.length&&Q<s.length;){const d=t[A],i=d.barNumber;let U;if(d.partialBeats!==void 0)U=d.partialBeats;else{if(n[i]===void 0){const h=s[Q];if(!h||!h.sig)throw new Error(`Invalid MIDI bar structure at index ${Q}`);n[i]=h.sig[0]}U=n[i]}let B=s[Q],m=B.sig[0];for(;m<U&&Q+1<s.length;){const h=s[Q+1],o=[B.sig[0]+h.sig[0],B.sig[1]],Z=[...B.beats||[],...h.beats||[]];B={sig:o,beats:Z},s[Q]=B,s.splice(Q+1,1),m=o[0]}if(m>U){const h=U,o=m-U,Z=B.beats?B.beats.slice(0,h):[],u=B.beats?B.beats.slice(h):[],V={sig:[h,B.sig[1]],beats:Z},p={sig:[o,B.sig[1]],beats:u};s[Q]=V,s.splice(Q+1,0,p),B=V}this._generateBeatsForBar(e,d,B,U),Q++,A++}if(A<t.length){const d=e.length>0?e[e.length-1]:null;let i=.5;if(e.length>=2){const B=Math.min(8,e.length),m=e[e.length-B];i=(e[e.length-1].time-m.time)/(B-1)}let U=d?d.time+i:0;for(;A<t.length;){const B=t[A],m=B.barNumber,h=n[m]!==void 0?n[m]:4;n[m]===void 0&&(n[m]=h);const o=[];for(let u=0;u<h;u++)o.push(U),U+=i;const Z={sig:[h,4],beats:o};this._generateBeatsForBar(e,B,Z,h),A++}}return e}_generateBeatsForBar(t,l,e,n){const{beats:Q}=e;if(!Q||!Array.isArray(Q))throw new Error(`Invalid MIDI bar: missing beats array. Got: ${JSON.stringify(e)}`);const A=Q.slice(0,n);for(let s=1;s<=n;s++){const d={time:A[s-1],repeat:l.repeat,bar:l.barNumber,beat:s,timeSig:n};t.push(d)}}_getSectionStartBar(t,l){return t[l].pickup!==void 0?0:l===0?1:t[l-1].to+1}_shouldPlayBar(t,l,e){if(!t.voltas)return!0;const n=t.voltas.indexOf(l);return n===-1?!0:n+1===e}}class Ee{constructor(t=null,l,e=null,n=null){if(!l)throw new Error("Parsed MIDI data is required");this.audioEngine=t,this._audioEngineReady=!!(t&&t.isInitialized),this.instrumentMap=e||{},this.parsedData=l,this._isPlaying=!1,this._currentTime=0,this._totalDuration=0,this.playbackSpeed=1,this.partChannels=new Map,this.partOutputs=new Map,this.playbackStartTime=0,this.lookAheadTime=.05,this.scheduleInterval=null,this.partNotePointers=new Map,this.partProgramPointers=new Map,this.eventBus=re(),this.beatMapper=new jn,this.beats=[],this.structureMetadata=n,this._calculateTotalDuration();const Q=n||this._createDefaultStructureMetadata();this.beats=this.beatMapper.mapBeats(l,Q),this._audioEngineReady&&(this._setupPartChannels(),this._resetNotePointers(),this._resetProgramPointers())}setAudioEngine(t){if(!t||!t.isInitialized)throw new Error("An initialized AudioEngine is required");this.audioEngine=t,this._audioEngineReady=!0,this._setupPartChannels(),this._resetNotePointers(),this._resetProgramPointers()}isAudioEngineReady(){return this._audioEngineReady}play(){if(!this._audioEngineReady)throw new Error("Audio engine not ready. Call setAudioEngine() first.");this._isPlaying||(this._isPlaying=!0,this.playbackStartTime=this.audioEngine.audioContext.currentTime-this._currentTime/this.playbackSpeed,this._resetNotePointers(),this._resetProgramPointers(),this._schedulePlayback(),this._startTimeUpdateLoop())}playAt(t){if(!this._audioEngineReady)throw new Error("Audio engine not ready. Call setAudioEngine() first.");this._isPlaying||(this._isPlaying=!0,this.playbackStartTime=t-this._currentTime/this.playbackSpeed,this._resetNotePointers(),this._resetProgramPointers(),this._schedulePlayback(),this._startTimeUpdateLoop())}pause(){this._isPlaying&&(this._isPlaying=!1,this._stopScheduling(),this._stopTimeUpdateLoop())}stop(){this._isPlaying=!1,this._currentTime=0,this._stopScheduling(),this._stopTimeUpdateLoop(),this._resetNotePointers(),this._resetProgramPointers()}skipToTime(t){t=Math.max(0,Math.min(t,this._totalDuration));const l=this._isPlaying;l&&this.pause(),this._currentTime=t,this._resetNotePointers(),this._resetProgramPointers(),l&&this.play()}setPlaybackSpeed(t,l=!0){if(t<=0)throw new Error("Playback speed must be greater than 0");const e=l&&this._isPlaying;e&&this.pause();const n=(this.audioEngine.audioContext.currentTime-this.playbackStartTime)*this.playbackSpeed;this.playbackSpeed=t,e?this.play():this.playbackStartTime=this.audioEngine.audioContext.currentTime-n/this.playbackSpeed}setBar(t,l=0){const e=this.getTimeFromBar(t,l);e!==null&&(this.skipToTime(e),this._emitEvent("barChanged",{bar:t,beat:1,repeat:l,time:e}))}getTimeFromBar(t,l=0){l||(l=1);const e=this.beats.find(n=>n.bar===t&&n.beat===1&&n.repeat===l);return e?e.time:null}getBeatFromTime(t){if(!this.beats.length)return null;let l=null;for(let e=this.beats.length-1;e>=0;e--)if(this.beats[e].time<=t){l=this.beats[e];break}return l}getBeats(){return this.beats}getRepeatCountForBar(t){const l=new Set;return this.beats.forEach(e=>{e.bar===t&&l.add(e.repeat)}),l.size}getPracticeMarks(){return this.structureMetadata?this.structureMetadata.marks||this.structureMetadata.practiceMarks||{}:{}}allSoundsOff(){this._audioEngineReady&&this.audioEngine.allSoundsOff()}getPartOutput(t){return this.partOutputs.get(t)||null}getPartChannel(t){return this.partChannels.get(t)||null}getAllNextNotes(t){const l=t??this.getCurrentTime(),e={};for(const[n,Q]of Object.entries(this.parsedData.parts)){const A=Q.notes.find(s=>s.startTime>=l);e[n]=A?{pitch:A.pitch,startTime:A.startTime}:null}return e}getCurrentTime(){if(this._isPlaying){const t=(this.audioEngine.audioContext.currentTime-this.playbackStartTime)*this.playbackSpeed;this._currentTime=Math.min(t,this._totalDuration)}return this._currentTime}getTotalDuration(){return this._totalDuration}isPlaying(){return this._isPlaying}on(t,l){this.eventBus.on(t,l)}off(t,l){this.eventBus.off(t,l)}_setupPartChannels(){Object.keys(this.parsedData.parts).forEach(t=>{const l=this.parsedData.parts[t],e=this.instrumentMap[t]||{},n=e.instrument!==void 0?e.instrument:l.defaultInstrument!==void 0?l.defaultInstrument:0;try{const Q=this.audioEngine.createChannel(t,{instrument:n,initialVolume:e.volume||1});this.partChannels.set(t,Q);const A=this.audioEngine.audioContext.createGain();A.gain.value=1;const s=Q.getOutputNode();s&&s.connect(A),this.partOutputs.set(t,A)}catch(Q){console.error(`Failed to create channel for part '${t}':`,Q),this._emitEvent("error",Q)}})}_calculateTotalDuration(){let t=0;Object.values(this.parsedData.parts).forEach(l=>{l.notes.forEach(e=>{e.endTime>t&&(t=e.endTime)})}),this._totalDuration=t}_schedulePlayback(){this._stopScheduling(),this._startScheduleLoop()}_startScheduleLoop(){this.scheduleInterval||(this.scheduleInterval=setInterval(()=>{if(!this._isPlaying)return;const t=(this.audioEngine.audioContext.currentTime-this.playbackStartTime)*this.playbackSpeed,l=t+this.lookAheadTime;for(const[e,n]of this.partChannels){const Q=this.parsedData.parts[e];if(Q){if(Q.programChanges&&Q.programChanges.length>0){let A=this.partProgramPointers.get(e)||0;const s=Q.programChanges;for(;A<s.length&&s[A].time<t;)A++;for(;A<s.length&&s[A].time<=l;){const d=s[A];n.setInstrument(d.programNumber),A++}this.partProgramPointers.set(e,A)}if(Q.notes){let A=this.partNotePointers.get(e)||0;const s=Q.notes;for(;A<s.length&&s[A].endTime<t;)A++;for(;A<s.length&&s[A].startTime<=l;){const d=s[A];if(d.endTime-d.startTime>=.01){const i=this.playbackStartTime+d.startTime/this.playbackSpeed,U=(d.endTime-d.startTime)/this.playbackSpeed;n.playNote(i,d.pitch,d.velocity,U)}A++}this.partNotePointers.set(e,A)}}}},50))}_resetNotePointers(){const t=this._currentTime;for(const[l]of this.partChannels){const e=this.parsedData.parts[l];if(!e||!e.notes)continue;let n=0;for(;n<e.notes.length&&e.notes[n].endTime<t;)n++;this.partNotePointers.set(l,n)}}_resetProgramPointers(){const t=this._currentTime;for(const[l,e]of this.partChannels){const n=this.parsedData.parts[l];if(!n||!n.programChanges){this.partProgramPointers.set(l,0);continue}let Q=0,A=n.defaultInstrument;for(;Q<n.programChanges.length&&n.programChanges[Q].time<=t;)A=n.programChanges[Q].programNumber,Q++;e.setInstrument(A),this.partProgramPointers.set(l,Q)}}_stopScheduling(){this.scheduleInterval&&(clearInterval(this.scheduleInterval),this.scheduleInterval=null),this.partChannels.forEach(t=>{t.isActive()&&t.allNotesOff()})}_startTimeUpdateLoop(){this.timeUpdateInterval=setInterval(()=>{const t=this.getCurrentTime();this._emitEvent("timeupdate",{currentTime:t});const l=this.getBeatFromTime(t);l&&this._emitEvent("beatChanged",l),(this.audioEngine.audioContext.currentTime-this.playbackStartTime)*this.playbackSpeed>=this._totalDuration+.05&&(this.stop(),this._emitEvent("ended",{finalTime:this._currentTime}))},100)}_stopTimeUpdateLoop(){this.timeUpdateInterval&&(clearInterval(this.timeUpdateInterval),this.timeUpdateInterval=null)}_emitEvent(t,l){(this.eventBus.all.get(t)||[]).forEach(e=>{try{e(l)}catch(n){console.error(`Error in ${t} event listener:`,n)}})}_createDefaultStructureMetadata(){return{sections:[{from:1,to:this.parsedData.barStructure.length}],order:[{section:0}]}}destroy(){this.stop(),this.partChannels.forEach(t=>{t.destroy()}),this.partChannels.clear(),this.partOutputs.forEach(t=>{t.disconnect()}),this.partOutputs.clear(),this.partNotePointers.clear(),this.partProgramPointers.clear(),this.eventBus.all.clear()}}class Pn{constructor(t=null,l={}){t instanceof Ee?(this.audioEngine=t.audioEngine,this.midiPlayer=t,this.parsedData=t.parsedData,this._audioEngineReady=!!(this.audioEngine&&this.audioEngine.isInitialized)):(this.audioEngine=t,this._audioEngineReady=!!(t&&t.isInitialized),this.midiPlayer=null,this.parsedData=null),this.eventBus=re(),this._parser=new qn,this._partOutputsMap=new Map,this.instrumentMap=null,this.metronomeConfig={enabled:!1,tickInstrument:115,accentInstrument:116,volume:.7,...l.metronome},this.leadInConfig={enabled:!1,bars:1,...l.leadIn},this.startupConfig={delayMs:25,...l.startup},this.state="reset",this.frozenTime=0,this.leadInData=null,this.leadInStartTime=null,this.leadInProgress=null,this.leadInInterval=null,this.timeUpdateInterval=null,this.metronomeScheduleInterval=null,this.nextBeatIndex=0,this.measuredLatencyMs=null,this.latencyMeasurements=[],this.isCalibrating=!1,this.baselineLatencyMs=null,this.metronomeMasterGain=null,this._validateConfig(),this._loadBaselineLatency(),this._audioEngineReady&&this._setupMetronomeMasterGain(),this.midiPlayer&&this._completeMidiPlayerSetup()}setAudioEngine(t){if(!t||!t.isInitialized)throw new Error("An initialized AudioEngine is required");this.audioEngine=t,this._audioEngineReady=!0,this._setupMetronomeMasterGain(),this.parsedData&&!this.midiPlayer&&this._setupPlayerWithAudio()}isAudioEngineReady(){return this._audioEngineReady}async load(t,l=null,e=null){if(this.reset(),t instanceof Ee)this.parsedData=t.parsedData,this.instrumentMap=e,this._audioEngineReady&&this._setMidiPlayer(t);else if(t instanceof ArrayBuffer)this.parsedData=await this._parser.parse(t,l),this.instrumentMap=e||this._createDefaultInstrumentMap(this.parsedData.parts),this._audioEngineReady&&this._setupPlayerWithAudio();else if(t&&typeof t=="object"&&t.parts)this.parsedData=t,this.instrumentMap=e||this._createDefaultInstrumentMap(t.parts),this._audioEngineReady&&this._setupPlayerWithAudio();else throw new Error("Invalid input type. Expected MidiPlayer, parsed MIDI data, or ArrayBuffer")}reset(){this.stop(),this.midiPlayer&&(this.midiPlayer.destroy(),this.midiPlayer=null),this.parsedData=null,this.instrumentMap=null,this._audioEngineReady&&this.audioEngine.clearAllChannels(),this._partOutputsMap.clear(),this.frozenTime=0,this.leadInData=null,this.leadInProgress=null,this.leadInStartTime=null,this.nextBeatIndex=0,this._stopLeadIn(),this._stopMetronome(),this._stopTimeUpdateLoop(),this.state="reset"}getPartOutputs(){return this._partOutputsMap.entries()}getPartNames(){return Array.from(this._partOutputsMap.keys())}getBeats(){return this.midiPlayer?this.midiPlayer.getBeats():[]}getRepeatCountForBar(t){return this.midiPlayer?this.midiPlayer.getRepeatCountForBar(t):0}getPracticeMarks(){return this.midiPlayer?this.midiPlayer.getPracticeMarks():{}}async play(t={}){if(!this._audioEngineReady)throw new Error("Audio engine not ready. Call setAudioEngine() after user interaction.");if(this.parsedData&&!this.midiPlayer&&this._setupPlayerWithAudio(),!this.midiPlayer)throw new Error("No MIDI data loaded. Call load() first.");if(!(this.state==="playing"||this.state==="lead-in"))try{const l=t.leadIn!==void 0?t.leadIn:this.leadInConfig.enabled,e=t.metronome!==void 0?t.metronome:this.metronomeConfig.enabled;this.frozenTime===0&&(this.frozenTime=this.midiPlayer.getCurrentTime()),l?await this._startLeadIn(e):await this._startMidiPlayback(e)}catch(l){throw this.state="stopped",this._emitEvent("error",l),l}}pause(){if(!this.midiPlayer||this.state==="stopped"||this.state==="paused")return;const t=this.state;this.state="paused",t==="lead-in"?this._pauseLeadIn():t==="playing"&&(this.midiPlayer.pause(),this._stopMetronome()),this._stopTimeUpdateLoop(),this._emitEvent("playbackPaused",{})}resume(){!this.midiPlayer||this.state!=="paused"||(this.leadInData&&this.leadInProgress!==null&&this.leadInProgress<1?this._resumeLeadIn():(this.state="playing",this._resetMetronomeBeatTracking(),this.midiPlayer.play(),this._startMetronomeIfEnabled(),this._startTimeUpdateLoop(),this._emitEvent("playbackStarted",{})))}stop(){if(this.state==="stopped")return;const t=this.state==="playing";this.state="stopped",this.frozenTime=0,this.leadInData=null,this.leadInProgress=null,this.leadInStartTime=null,this._stopLeadIn(),this._stopMetronome(),this._stopTimeUpdateLoop(),this._resetMetronomeBeatTracking(),t&&this.midiPlayer.stop(),this._emitEvent("playbackStopped",{})}skipToTime(t){if(!this.midiPlayer)throw new Error("No MIDI data loaded. Call load() first.");this.frozenTime=t,this.state!=="lead-in"&&(this.midiPlayer.skipToTime(t),this.state==="playing"&&this.metronomeConfig.enabled&&this._resetMetronomeBeatTracking())}setBar(t,l=0){if(!this.midiPlayer)throw new Error("No MIDI data loaded. Call load() first.");if(this.state==="lead-in"){const e=this.midiPlayer.getTimeFromBar(t,l);e!==null&&(this.frozenTime=e);return}if(this.midiPlayer.setBar(t,l),this.state==="stopped"||this.state==="paused"){const e=this.midiPlayer.getTimeFromBar(t,l);e!==null&&(this.frozenTime=e)}this.state==="playing"&&this.metronomeConfig.enabled&&this._resetMetronomeBeatTracking()}getCurrentTime(){return this.state==="lead-in"||this.state==="paused"&&this.leadInProgress!==null?this.frozenTime:this.midiPlayer?this.midiPlayer.getCurrentTime():0}getLeadInProgress(){return this.leadInProgress}setMetronomeEnabled(t){const l=this.metronomeConfig.enabled;this.metronomeConfig.enabled=t,this.state==="playing"&&(t&&!l?this._startMetronome():!t&&l&&this._stopMetronome()),this._emitEvent("metronomeEnabledChanged",{enabled:t})}setMetronomeSettings(t){if(t.volume!==void 0&&(t.volume<0||t.volume>1))throw new Error("Metronome volume must be between 0.0 and 1.0");if(Object.assign(this.metronomeConfig,t),t.volume!==void 0){const l=this.audioEngine.getMetronomeOutput();l&&l.gain&&(l.gain.value=t.volume)}this._emitEvent("metronomeSettingsChanged",{...t})}setLeadInEnabled(t){this.leadInConfig.enabled=t,this._emitEvent("leadInSettingsChanged",{enabled:t,bars:this.leadInConfig.bars})}setLeadInBars(t){if(t<1)throw new Error("Lead-in bars must be at least 1");this.leadInConfig.bars=t,this._emitEvent("leadInSettingsChanged",{enabled:this.leadInConfig.enabled,bars:t})}setPlaybackSpeed(t,l=!0){if(!this.midiPlayer)throw new Error("No MIDI data loaded. Call load() first.");this.midiPlayer.setPlaybackSpeed(t,l)}getMetronomeSettings(){return{...this.metronomeConfig}}isMetronomeEnabled(){return this.metronomeConfig.enabled}getLeadInSettings(){return{enabled:this.leadInConfig.enabled,bars:this.leadInConfig.bars}}getStartupSettings(){return{...this.startupConfig}}setStartupDelay(t){if(typeof t!="number"||t<0||t>1e3)throw new Error("Startup delay must be a number between 0 and 1000 milliseconds");this.startupConfig.delayMs=t,this._emitEvent("startupSettingsChanged",{delayMs:t})}getState(){return this.state}isInLeadIn(){return this.state==="lead-in"}isPlaying(){return this.state==="playing"||this.state==="lead-in"}getAudioLatencyMs(){return this.measuredLatencyMs}getBaselineLatencyMs(){return this.baselineLatencyMs}hasLatencyDrift(t=100){return!this.measuredLatencyMs||!this.baselineLatencyMs?!1:this.measuredLatencyMs>this.baselineLatencyMs+t}async calibrateAudioLatency(t={}){if(!this._audioEngineReady)throw new Error("Audio engine not ready. Call setAudioEngine() first.");if(this.isCalibrating)throw new Error("Calibration already in progress");const l=t.measurements||5,e=t.sampleIntervalMs||10,n=t.threshold||.01,Q=t.timeout||3e3,A=t.silent!==void 0?t.silent:!0,s=t.updateBaseline!==void 0?t.updateBaseline:!0;this.isCalibrating=!0;try{A&&await this._setupSilentCalibration();const d=await this._performLatencyMeasurement(l,e,n,Q);this.measuredLatencyMs=d,s&&await this._updateBaselineLatency(d);const i=this.hasLatencyDrift();return this._emitEvent("audioLatencyChanged",{latencyMs:d,baselineLatencyMs:this.baselineLatencyMs,hasDrift:i,source:"manual",measurements:l}),i&&(console.warn(`Latency drift detected: ${d}ms vs baseline ${this.baselineLatencyMs}ms`),this._emitEvent("latencyDriftDetected",{currentLatencyMs:d,baselineLatencyMs:this.baselineLatencyMs,driftMs:d-this.baselineLatencyMs})),d}finally{A&&this._teardownSilentCalibration(),this.isCalibrating=!1}}_loadBaselineLatency(){try{if(typeof localStorage>"u")return;const t=localStorage.getItem("audioMixerEngine.baselineLatency");t&&(this.baselineLatencyMs=parseInt(t,10),console.log(`Loaded baseline latency from storage: ${this.baselineLatencyMs}ms`))}catch(t){console.warn("Could not load baseline latency from storage:",t)}}async _updateBaselineLatency(t){if(!this.baselineLatencyMs||t<this.baselineLatencyMs){this.baselineLatencyMs=t;try{typeof localStorage<"u"&&(localStorage.setItem("audioMixerEngine.baselineLatency",t.toString()),console.log(`Updated baseline latency: ${t}ms`))}catch(l){console.warn("Could not save baseline latency to storage:",l)}}}_setupMetronomeMasterGain(){if(!this._audioEngineReady||this.metronomeMasterGain)return;const t=this.audioEngine.getMetronomeOutput();if(!t){console.warn("Metronome output not available - master gain not created");return}const l=this.audioEngine.getMetronomeAnalyser();try{t.disconnect()}catch{}this.metronomeMasterGain=this.audioEngine.audioContext.createGain(),this.metronomeMasterGain.gain.value=1,t.connect(this.metronomeMasterGain),l?(t.connect(l),console.log("Metronome master gain node created and connected (analyser reconnected)")):console.log("Metronome master gain node created and connected (no analyser)")}async _setupSilentCalibration(){if(!this.metronomeMasterGain)throw new Error("Metronome master gain not available for calibration");this.metronomeMasterGain.gain.value=0,console.log("Silent calibration active (gain=0)")}_teardownSilentCalibration(){this.metronomeMasterGain&&(this.metronomeMasterGain.gain.value=1,console.log("Silent calibration ended (gain=1)"))}getMetronomeOutput(){var t;return this.metronomeMasterGain||((t=this.audioEngine)==null?void 0:t.getMetronomeOutput())}getPartOutput(t){return this.midiPlayer?this.midiPlayer.getPartOutput(t):null}allSoundsOff(){this.midiPlayer&&this.midiPlayer.allSoundsOff()}previewNextNotes(t={}){if(!this.midiPlayer)throw new Error("No MIDI data loaded");const l=t.delayBetweenParts??.3,e=t.duration??.5,n=t.velocity??100,Q=this.midiPlayer.getAllNextNotes(),A=t.partOrder??this.getPartNames();let s=this.audioEngine.audioContext.currentTime+.01;const d=[];for(const i of A){const U=Q[i];if(!U)continue;const B=this.midiPlayer.getPartChannel(i);if(!B)continue;const m=this.midiPlayer.getPartOutput(i);m&&m.gain.value===0||(B.playPreviewNote(U.pitch,{startTime:s,duration:e,velocity:n,instrument:t.instrument}),d.push({partName:i,pitch:U.pitch,startTime:s}),s+=l)}return{parts:d,totalDuration:d.length*l}}getTotalDuration(){if(this.midiPlayer)return this.midiPlayer.getTotalDuration();if(this.parsedData&&this.parsedData.parts){let t=0;return Object.values(this.parsedData.parts).forEach(l=>{l.notes&&l.notes.forEach(e=>{e.endTime>t&&(t=e.endTime)})}),t}return 0}on(t,l){this.eventBus.on(t,l)}off(t,l){this.eventBus.off(t,l)}_setupEventDelegation(){this.midiPlayer.on("timeupdate",t=>{if(this.state==="playing"){const l={...t,effectiveTime:t.currentTime,leadInProgress:null};if(this.measuredLatencyMs){const e=this.measuredLatencyMs/1e3;l.audioTime=Math.max(0,t.currentTime-e),l.latencyMs=this.measuredLatencyMs}this._emitEvent("timeupdate",l)}}),this.midiPlayer.on("beatChanged",t=>{if(this.state==="playing"){const l={...t,isLeadIn:!1};this._emitEvent("beatChanged",l),this._scheduleBeatAudible(l)}}),this.midiPlayer.on("ended",t=>{this.state==="playing"&&(this.state="stopped",this._stopMetronome(),this._stopTimeUpdateLoop(),this._emitEvent("playbackEnded",t))}),this.midiPlayer.on("error",t=>{this._emitEvent("error",t)})}_validateConfig(){if(this.metronomeConfig.volume<0||this.metronomeConfig.volume>1)throw new Error("Metronome volume must be between 0.0 and 1.0");if(this.leadInConfig.bars<1)throw new Error("Lead-in bars must be at least 1")}async _startLeadIn(t){this.state="lead-in";const l=this.startupConfig.delayMs/1e3;this.leadInStartTime=this.audioEngine.audioContext.currentTime+l,this.leadInProgress=0,this.leadInData=this._calculateLeadInBeats(),this._emitEvent("leadInStarted",{totalBeats:this.leadInData.totalBeats,duration:this.leadInData.duration,bars:this.leadInConfig.bars,startupDelayMs:this.startupConfig.delayMs}),setTimeout(()=>{this.state==="lead-in"&&this._startLeadInScheduling(t)},this.startupConfig.delayMs),this._startTimeUpdateLoop()}_calculateLeadInBeats(){if(!this.midiPlayer)return{totalBeats:4,duration:2,beatSequence:[],beatsPerBar:4,startBeat:{bar:1,beat:1,timeSig:4}};const t=this.midiPlayer.beats,l=this.frozenTime,e=this.leadInConfig.bars;let n=t.length-1,Q=.5;for(;t[n].time>l;)n--;const A=t[n],s=t[n+1];s?Q=s.time-A.time:n>0&&(Q=A.time-t[n-1].time);const d=this.midiPlayer&&this.midiPlayer.playbackSpeed||1,i=Q/d,U=A.timeSig===1,B=U&&s?s.timeSig:A.timeSig,m=U?B-1:A.beat>1?A.beat-1:0,h=e*B+m;return{totalBeats:h,duration:h*i,beatSequence:this._generateBeatSequence(h,i,B),beatsPerBar:B,startBeat:A}}_generateBeatSequence(t,l,e){const n=[];for(let Q=0;Q<t;Q++){const A=Q%e+1;n.push({beat:A,isAccent:A===1,time:Q*l,absoluteTime:this.leadInStartTime+Q*l})}return n}_startLeadInScheduling(t){this.leadInBeatIndex=0,this.leadInScheduledBeats=new Set;const l=this.leadInData.beatSequence,e=10;this.leadInStartTime=this.audioEngine.audioContext.currentTime,this.leadInInterval=setInterval(()=>{const n=this.audioEngine.audioContext.currentTime-this.leadInStartTime;for(this.leadInProgress=Math.min(1,n/this.leadInData.duration);this.leadInBeatIndex<l.length;){const Q=l[this.leadInBeatIndex],A=Q.time-n;if(A>.05)break;if(!this.leadInScheduledBeats.has(this.leadInBeatIndex)&&A>=-.05&&A<=.05){const s=A<=0?this.audioEngine.audioContext.currentTime+.01:this.audioEngine.audioContext.currentTime+A;this._scheduleTickAtTime(s,Q.isAccent);const d={bar:Math.floor(this.leadInBeatIndex/this.leadInData.beatsPerBar)+1,beat:Q.beat,repeat:1,time:this.frozenTime,isLeadIn:!0};this._emitEvent("beatChanged",d),this._scheduleBeatAudible(d),this.leadInScheduledBeats.add(this.leadInBeatIndex)}this.leadInBeatIndex++}this.leadInProgress>=1&&this._completeLeadIn(t)},e)}_completeLeadIn(t){const l=this.leadInStartTime+this.leadInData.duration;this._stopLeadIn(),this._emitEvent("leadInEnded",{}),this.leadInData=null,this.leadInProgress=null,this.leadInStartTime=null,this._startMidiPlaybackAt(l,t,!0)}async _startMidiPlaybackAt(t,l,e=!0){this.state="playing",e&&this._emitEvent("playbackStarted",{startupDelayMs:0,scheduledStartTime:t}),this.midiPlayer.playAt(t),l&&this._startMetronomeAt(t),this.timeUpdateInterval||this._startTimeUpdateLoop()}async _startMidiPlayback(t,l=!0,e=!1){this.state="playing",this._resetMetronomeBeatTracking(),l&&this._emitEvent("playbackStarted",{startupDelayMs:e?0:this.startupConfig.delayMs});const n=()=>{if(this.state==="playing")try{this.midiPlayer.play(),t&&this._startMetronome()}catch(Q){this.state="stopped",this._emitEvent("error",Q)}};e?n():setTimeout(n,this.startupConfig.delayMs),this.timeUpdateInterval||this._startTimeUpdateLoop()}_startMetronome(){!this.metronomeConfig.enabled||this.state!=="playing"||(this._scheduleMetronomeTicks(),this.metronomeScheduleInterval=setInterval(()=>{this._scheduleMetronomeTicks()},50))}_startMetronomeAt(t){this.metronomeConfig.enabled&&(this.metronomeScheduledStartTime=t,this._resetMetronomeBeatTracking(),this._scheduleMetronomeTicksAt(t),this.metronomeScheduleInterval=setInterval(()=>{this._scheduleMetronomeTicks()},50))}_startMetronomeIfEnabled(){this.metronomeConfig.enabled&&this._startMetronome()}_scheduleMetronomeTicksAt(t){if(!this.metronomeConfig.enabled||!this.midiPlayer)return;const l=this.midiPlayer.beats;if(!l||l.length===0)return;const e=this.midiPlayer.getCurrentTime(),n=.1;for(let Q=this.nextBeatIndex;Q<l.length;Q++){const A=l[Q],s=this.midiPlayer.playbackSpeed||1,d=t+(A.time-e)/s;if(d>this.audioEngine.audioContext.currentTime+n)break;if(d>=this.audioEngine.audioContext.currentTime-.01){const i=Math.max(d,this.audioEngine.audioContext.currentTime+.001),U=A.isDownbeat||A.beat===1;this._scheduleTickAtTime(i,U),this.nextBeatIndex=Q+1}}}_scheduleMetronomeTicks(){if(!this.metronomeConfig.enabled||!this.midiPlayer)return;const t=this.midiPlayer.getCurrentTime(),l=this.midiPlayer.beats;if(!l||l.length===0)return;for(;this.nextBeatIndex<l.length&&l[this.nextBeatIndex].time<t-.025;)this.nextBeatIndex++;const e=t+.15;for(;this.nextBeatIndex<l.length;){const n=l[this.nextBeatIndex],Q=n.time-t;if(n.time>e)break;if(Q>=-.025&&Q<=.15){const A=this.audioEngine.audioContext.currentTime+.005,s=this.audioEngine.audioContext.currentTime+Math.max(Q,.005),d=Math.max(A,s),i=n.beat===1;this._scheduleTickAtTime(d,i)}this.nextBeatIndex++}}async _scheduleTickAtTime(t,l){try{await this.audioEngine.playMetronomeTick(t,l,this.metronomeConfig.volume)}catch(e){console.warn("Failed to schedule metronome tick:",e)}}_resetMetronomeBeatTracking(){if(!this.midiPlayer){this.nextBeatIndex=0;return}const t=this.getCurrentTime(),l=this.midiPlayer.beats;if(!l||l.length===0){this.nextBeatIndex=0;return}for(this.nextBeatIndex=0;this.nextBeatIndex<l.length&&l[this.nextBeatIndex].time<t-.01;)this.nextBeatIndex++}_stopMetronome(){this.metronomeScheduleInterval&&(clearInterval(this.metronomeScheduleInterval),this.metronomeScheduleInterval=null)}_stopLeadIn(){this.leadInInterval&&(clearInterval(this.leadInInterval),this.leadInInterval=null)}_pauseLeadIn(){this._stopLeadIn()}_resumeLeadIn(){if(!this.leadInData||this.leadInProgress===null)return;this.state="lead-in";const t=this.audioEngine.audioContext.currentTime,l=this.leadInProgress*this.leadInData.duration;this.leadInStartTime=t-l,this._startLeadInScheduling(this.metronomeConfig.enabled),this._startTimeUpdateLoop()}_startTimeUpdateLoop(){this.timeUpdateInterval||(this.timeUpdateInterval=setInterval(()=>{if(this.state==="lead-in"){const t={currentTime:this.frozenTime,effectiveTime:this.frozenTime,leadInProgress:this.leadInProgress||0};if(this.measuredLatencyMs){const l=this.measuredLatencyMs/1e3;t.audioTime=Math.max(0,this.frozenTime-l),t.latencyMs=this.measuredLatencyMs}this._emitEvent("timeupdate",t)}else this.state},100))}_stopTimeUpdateLoop(){this.timeUpdateInterval&&(clearInterval(this.timeUpdateInterval),this.timeUpdateInterval=null)}_emitEvent(t,l){(this.eventBus.all.get(t)||[]).forEach(e=>{try{e(l)}catch(n){console.error(`Error in ${t} event listener:`,n)}})}_scheduleBeatAudible(t){if(!this.measuredLatencyMs){const e={...t,latencyMs:0};this._emitEvent("beatAudible",e);return}const l=this.measuredLatencyMs;setTimeout(()=>{if(this.state==="playing"||this.state==="lead-in"){const e={...t,latencyMs:this.measuredLatencyMs};this._emitEvent("beatAudible",e)}},l)}destroy(){this.stop(),this._stopLeadIn(),this._stopMetronome(),this._stopTimeUpdateLoop(),this.metronomeMasterGain&&(this.metronomeMasterGain.disconnect(),this.metronomeMasterGain=null),this.eventBus.all.clear()}_setupPlayerWithAudio(){if(!this._audioEngineReady)throw new Error("Audio engine not ready");if(!this.parsedData)throw new Error("No parsed MIDI data available");const t=this.parsedData.structureMetadata||null,l=new Ee(this.audioEngine,this.parsedData,this.instrumentMap,t);this._setMidiPlayer(l)}_setMidiPlayer(t){this.midiPlayer=t,this.audioEngine=t.audioEngine,this._audioEngineReady=!0,this._completeMidiPlayerSetup()}_completeMidiPlayerSetup(){this._partOutputsMap.clear(),Object.keys(this.midiPlayer.parsedData.parts).sort((t,l)=>{const e=this.midiPlayer.parsedData.parts[t],n=this.midiPlayer.parsedData.parts[l],Q=e.channel!==void 0?e.channel:e.trackIndex,A=n.channel!==void 0?n.channel:n.trackIndex;return Q-A}).forEach(t=>{const l=this.midiPlayer.getPartOutput(t);l&&this._partOutputsMap.set(t,l)}),this._setupEventDelegation(),this.state="ready"}_createDefaultInstrumentMap(t){const l={},e={soprano:{instrument:"choir_aahs",volume:1},alto:{instrument:"choir_aahs",volume:1},tenor:{instrument:"choir_aahs",volume:1},bass:{instrument:"choir_aahs",volume:1},piano:{instrument:"piano",volume:.8},organ:{instrument:"church_organ",volume:.7},strings:{instrument:"string_ensemble_1",volume:.6},flute:{instrument:"flute",volume:.8},trumpet:{instrument:"trumpet",volume:.7}};return Object.keys(t).forEach(n=>{const Q=t[n];if(Q.defaultInstrument!==void 0)l[n]={instrument:Q.defaultInstrument,volume:1};else{const A=n.toLowerCase(),s=e[A]||e.piano;l[n]={instrument:s.instrument,volume:s.volume}}}),l}async captureMetronomeSignal(t={}){if(!this._audioEngineReady)throw new Error("Audio engine not ready. Call setAudioEngine() first.");const l=this.audioEngine.getMetronomeAnalyser();if(!l)throw new Error("Metronome analyser not available for signal capture");const e=t.sampleIntervalMs||2,n=t.captureDurationMs||1500,Q=this.audioEngine.audioContext.currentTime+.1;await this.audioEngine.playMetronomeTick(Q,!0,1);const A=await this._captureAnalyserTimeSeries(l,Q,e,n);return{scheduledTime:Q,samples:A,sampleIntervalMs:e,captureDurationMs:n}}async _performLatencyMeasurement(t,l,e,n){const Q=this.audioEngine.getMetronomeAnalyser();if(!Q)throw new Error("Metronome analyser not available for latency measurement");const A=this.audioEngine.audioContext,s=[];console.log(`Starting calibration: ${t} measurements, ${l}ms sampling, ${e} threshold`);for(let B=0;B<t;B++){const m=A.currentTime+.15;await this.audioEngine.playMetronomeTick(m,!0,1);const h=await this._detectOnsetByThreshold(Q,m,l,e,n);if(h){const o=h.latencyMs;s.push(o),console.log(`Measurement ${B+1}/${t}: ${o.toFixed(1)}ms (RMS: ${h.rms.toFixed(4)}, peak: ${h.peak.toFixed(4)})`)}else console.warn(`Measurement ${B+1}/${t}: detection timeout (no signal above ${e} threshold)`);await new Promise(o=>setTimeout(o,300))}if(s.length===0)throw new Error(`Failed to detect any metronome onsets. Try lowering threshold (current: ${e}) or check audio routing.`);let d=s;if(s.length>=5){const B=[...s].sort((m,h)=>m-h);d=B.slice(Math.floor(B.length*.2),Math.ceil(B.length*.8)),console.log(`Discarded ${s.length-d.length} outliers`)}const i=d.reduce((B,m)=>B+m,0)/d.length,U=Math.sqrt(d.reduce((B,m)=>B+Math.pow(m-i,2),0)/d.length);return console.log(`Average latency: ${i.toFixed(1)}ms ± ${U.toFixed(1)}ms (n=${d.length})`),Math.round(i)}async _detectOnsetByThreshold(t,l,e,n,Q){const A=this.audioEngine.audioContext,s=t.fftSize,d=new Float32Array(s),i=Math.max(0,(l-A.currentTime)*1e3-20);await new Promise(B=>setTimeout(B,i));const U=performance.now();return new Promise(B=>{const m=setInterval(()=>{if(performance.now()-U>Q){clearInterval(m),B(null);return}t.getFloatTimeDomainData(d);let h=0,o=0;for(let u=0;u<s;u++){const V=Math.abs(d[u]);h+=d[u]*d[u],V>o&&(o=V)}const Z=Math.sqrt(h/s);if(Z>=n){clearInterval(m);const u=A.currentTime,V=(u-l)*1e3;B({latencyMs:V,rms:Z,peak:o,detectedTime:u})}},e)})}async _captureAnalyserTimeSeries(t,l,e,n){const Q=this.audioEngine.audioContext,A=t.fftSize,s=new Float32Array(A),d=[],i=performance.now(),U=Math.max(0,(l-Q.currentTime)*1e3-20);return await new Promise(B=>setTimeout(B,U)),new Promise(B=>{const m=setInterval(()=>{if(performance.now()-i-U>=n){clearInterval(m),B(d);return}t.getFloatTimeDomainData(s);let h=0,o=0;for(let V=0;V<A;V++){const p=Math.abs(s[V]);h+=s[V]*s[V],p>o&&(o=p)}const Z=Math.sqrt(h/A),u=Q.currentTime;d.push({time:u,relativeTime:(u-l)*1e3,rms:Z,peak:o})},e)})}}const ia=["spessasynth","lightweight"];class On{constructor(){this._engineType="spessasynth"}setEngineType(t){if(!ia.includes(t))throw new Error(`Invalid audio engine type: "${t}". Must be one of: ${ia.join(", ")}`);this._engineType=t}getEngineType(){return this._engineType}resetToDefault(){this._engineType="spessasynth"}}const oa=new On;class _n{constructor(){this.eventBus=Qa(),this.currentTime=0,this.isPlaying=!1,this.playbackSpeed=1,this.masterVolume=.75,this.metronomeVolume=.7,this.parts=new Map,this.playbackTimer=null,this.lastTimestamp=0,this.audioContext=null,this.audioEngine=null,this.playbackManager=null,this.musicData=null,this.beats=[],this.practiceMarks={},this.songDuration=0,this.maxBar=0,this.masterGain=null,this.metronomeGain=null,this.partGainNodes=new Map,this.partAnalyserNodes=new Map,this.isInitialized=!1}sanitizePartName(t){return!t||typeof t!="string"?"unknown":t.replace(/[\x00-\x1F\x7F-\x9F]/g,"").toLowerCase().trim()}async initializeAudioSystem(t={}){if(this.isInitialized)return;this.audioContext=new(window.AudioContext||window.webkitAudioContext),this.audioContext.state==="suspended"&&await this.audioContext.resume();const l=oa.getEngineType();if(l==="lightweight"?(this.audioEngine=new Hn(this.audioContext),console.log("Using LightweightAudioEngine")):(this.audioEngine=new vn(this.audioContext),console.log("Using SpessaSynthAudioEngine")),this.audioEngine.on("initProgress",e=>{this.eventBus.emit("initProgress",e)}),l==="spessasynth"){const e=t.soundfontUrl?[t.soundfontUrl]:["/FluidR3Mono_GM.sf3","/FluidR3_GM.sf2","/soundfont.sf2"];let n=!1,Q=null;for(const A of e)try{await this.audioEngine.initialize(A),console.log(`Loaded soundfont: ${A}`),n=!0;break}catch(s){console.warn(`Failed to load soundfont ${A}:`,s.message),Q=s}if(!n){const A="No soundfont could be loaded";throw this.eventBus.emit("initProgress",{stage:"error",message:A,error:Q}),new Error(A)}}else try{await this.audioEngine.initialize(),console.log("LightweightAudioEngine initialized")}catch(e){const n="Failed to initialize LightweightAudioEngine";throw this.eventBus.emit("initProgress",{stage:"error",message:n,error:e}),new Error(n)}this.setupMasterAudioGraph(),this.isInitialized=!0,console.log("AudioEngineService initialized successfully")}setupMasterAudioGraph(){this.masterGain=this.audioContext.createGain(),this.masterGain.gain.value=this.masterVolume,this.masterGain.connect(this.audioContext.destination),this.metronomeGain=this.audioContext.createGain(),this.metronomeGain.gain.value=.7,this.metronomeGain.connect(this.audioContext.destination)}async initialize(t,l={}){if(this.isInitialized||await this.initializeAudioSystem(l),this.cleanup(),this.musicData=t,t.midiData)console.log(t),await this.setupMidiPlayback(t.midiData,t.metadata);else{if(this.beats=t.beats||[],this.practiceMarks=t.marks||t.practiceMarks||{},this.beats.length>0){const e=this.beats[this.beats.length-1],n=e.tempo>0?60/e.tempo:.75;this.songDuration=e.time+n,this.maxBar=Math.max(...this.beats.map(Q=>Q.bar))}else this.songDuration=0,this.maxBar=0;this.setupLegacyParts(t.parts||[]),this.eventBus.emit("initialized",{parts:Array.from(this.parts.values())})}}async setupMidiPlayback(t,l){try{this.playbackManager=new Pn(this.audioEngine,{metronome:{enabled:!0,tickInstrument:115,accentInstrument:116,volume:.7},leadIn:{enabled:!0,bars:1},startup:{delayMs:25}});const e=await this.playbackManager.calibrateAudioLatency({measurements:1,sampleIntervalMs:10,threshold:.01,timeout:3e3,silent:!0});console.log(`Measured audio latency: ${e} ms`),this.setupPlaybackManagerEventDelegation(),await this.playbackManager.load(t,l);const n=this.playbackManager.getPartNames();this.setupMidiParts(n),this.eventBus.emit("initialized",{parts:Array.from(this.parts.values())}),await this.setupPartAudioRouting(n),this.setupMetronomeAudioRouting(),this.extractMusicDataFromPlayer(),this.updateSongDurationFromPlayer(),console.log("MIDI playback with PlaybackManager setup complete")}catch(e){throw console.error("Failed to setup MIDI playback:",e),e}}setupMidiParts(t){t.forEach(l=>{const e=this.sanitizePartName(l);this.parts.set(e,{name:l,sanitizedName:e,volume:.75,muted:!1,solo:!1})})}async setupPartAudioRouting(){for(const[t,l]of this.playbackManager.getPartOutputs()){const e=this.audioContext.createGain();e.gain.value=1;const n=this.audioContext.createAnalyser();n.fftSize=256,n.smoothingTimeConstant=.3,l.connect(e),e.connect(n),n.connect(this.masterGain);const Q=this.sanitizePartName(t);this.partGainNodes.set(Q,e),this.partAnalyserNodes.set(Q,n),console.log(`Audio routing established for part: ${t}`)}}setupMetronomeAudioRouting(){this.playbackManager.getMetronomeOutput().connect(this.metronomeGain),console.log("Metronome audio routing established")}extractMusicDataFromPlayer(){try{this.beats=this.playbackManager.getBeats(),this.practiceMarks=this.playbackManager.getPracticeMarks(),this.beats.length>0?this.maxBar=Math.max(...this.beats.map(t=>t.bar)):this.maxBar=0,console.log(`Extracted ${this.beats.length} beats and ${Object.keys(this.practiceMarks).length} practice marks from player`),this.eventBus.emit("musicDataExtracted",{beats:this.beats,practiceMarks:this.practiceMarks,maxBar:this.maxBar})}catch(t){console.warn("Could not extract music data from player:",t),this.beats=[],this.practiceMarks={},this.maxBar=0}}updateSongDurationFromPlayer(){let t=this.playbackManager.getTotalDuration();t&&t>0?(this.songDuration=t,this.musicData&&(this.musicData.duration=t),this.eventBus.emit("durationUpdated",{duration:t})):console.warn("Could not get duration from player")}snapTimeToBarStart(t){try{const l=this.getBarFromTime(t);if(l){const e=this.getTimeFromBar(l.bar,l.repeat);if(e!==null)return e}}catch(l){console.warn("Failed to snap time to bar start:",l)}return t}emitTimeAndBarUpdates(t){this.eventBus.emit("timeChanged",{currentTime:t});const l=this.getBarFromTime(t);l&&this.eventBus.emit("barChanged",l)}setupPlaybackManagerEventDelegation(){this.playbackManager.on("timeupdate",({audioTime:t,leadInProgress:l})=>{this.currentTime=t,this.eventBus.emit("timeChanged",{currentTime:t,leadInProgress:l})}),this.playbackManager.on("beatAudible",({bar:t,beat:l,isLeadIn:e,repeat:n,time:Q})=>{this.eventBus.emit("barChanged",{bar:t,beat:l,repeat:n,time:Q,isLeadIn:e})}),this.playbackManager.on("leadInStarted",({totalBeats:t,duration:l,bars:e})=>{this.eventBus.emit("leadInStarted",{bars:e,totalBeats:t,duration:l})}),this.playbackManager.on("leadInEnded",()=>{this.eventBus.emit("leadInCompleted")}),this.playbackManager.on("playbackStarted",()=>{this.isPlaying=!0,this.eventBus.emit("playbackStateChanged",{isPlaying:!0,currentTime:this.currentTime})}),this.playbackManager.on("playbackPaused",()=>{this.isPlaying=!1,this.eventBus.emit("playbackStateChanged",{isPlaying:!1,currentTime:this.currentTime})}),this.playbackManager.on("playbackStopped",()=>{this.isPlaying=!1,this.eventBus.emit("playbackStateChanged",{isPlaying:!1,currentTime:this.currentTime})}),this.playbackManager.on("playbackEnded",()=>{this.isPlaying=!1,this.eventBus.emit("playbackStateChanged",{isPlaying:!1,currentTime:this.currentTime}),this.eventBus.emit("songEnded",{finalTime:this.currentTime})})}setupLegacyParts(t){t&&t.forEach(l=>{const e=this.sanitizePartName(l.name);this.parts.set(e,{name:l.name,sanitizedName:e,volume:l.volume||.75,muted:!1,solo:!1})})}getCurrentToggleStates(){const t=this.getLeadInSettings();return{metronome:this.metronomeEnabled||!1,leadIn:this.leadInEnabled!==!1,leadInBars:t.bars}}updateToggleStates(t,l){this.setMetronomeEnabled(t),this.leadInEnabled=l}setMetronomeEnabled(t){this.metronomeEnabled=t,this.playbackManager.setMetronomeEnabled(t)}setLeadInBars(t){this.playbackManager.setLeadInBars(t)}setLeadInEnabled(t){this.leadInEnabled=t,this.playbackManager.setLeadInEnabled(t)}getLeadInSettings(){return this.playbackManager.getLeadInSettings()}play(t={}){const l=this.getCurrentToggleStates();t.leadInBars!==void 0&&this.setLeadInBars(t.leadInBars),this.playbackManager.play({leadIn:t.leadIn!==void 0?t.leadIn:l.leadIn,metronome:t.metronome!==void 0?t.metronome:l.metronome})}stop(){this.playbackManager.pause()}pause(){this.stop()}setTime(t){const l=this.snapTimeToBarStart(t);this.currentTime=Math.max(0,l),this.playbackManager.skipToTime(this.currentTime),this.emitTimeAndBarUpdates(this.currentTime)}getCurrentTime(){return this.playbackManager.getCurrentTime()}setBar(t,l=0){const e=Math.max(0,Math.min(this.maxBar,t));this.playbackManager.setBar(e,l);const n=this.getCurrentTime();this.currentTime=n,this.emitTimeAndBarUpdates(n)}goToPracticeMark(t){const l=this.practiceMarks[t];l!==void 0&&(this.setBar(l),this.eventBus.emit("practiceMarkChanged",{mark:t,bar:l}))}setPlaybackSpeed(t){this.playbackSpeed=Math.max(.25,Math.min(2,t)),this.playbackManager.setPlaybackSpeed(t,!1),this.eventBus.emit("speedChanged",{speed:this.playbackSpeed})}setMasterVolume(t){this.masterVolume=Math.max(0,Math.min(1,t)),this.masterGain&&(this.masterGain.gain.value=this.masterVolume),this.eventBus.emit("masterVolumeChanged",{volume:this.masterVolume})}getMasterVolume(){return this.masterVolume}setMetronomeVolume(t){const l=Math.max(0,Math.min(1,t));this.metronomeGain&&(this.metronomeGain.gain.value=l),this.metronomeVolume=l}getMetronomeVolume(){return this.metronomeVolume||.7}setPartVolume(t,l){const e=this.sanitizePartName(t),n=this.parts.get(e);n?(n.volume=Math.max(0,Math.min(1,l)),this.updatePartAudioState(e),this.eventBus.emit("partVolumeChanged",{partName:t,volume:l})):(console.log(`Part not found: "${t}" (sanitized: "${e}")`),console.log("Available parts:",[...this.parts.keys()]))}setPartMuted(t,l){const e=this.sanitizePartName(t),n=this.parts.get(e);n&&(n.muted=l,this.updatePartAudioState(e),this.eventBus.emit("partMutedChanged",{partName:t,muted:l}))}setPartSolo(t,l){const e=this.sanitizePartName(t),n=this.parts.get(e);n&&(n.solo=l,this.updateAllPartsAudioState(),this.eventBus.emit("partSoloChanged",{partName:t,solo:l}))}isPartEffectivelyMuted(t){const l=this.sanitizePartName(t),e=this.parts.get(l);return!e||e.muted?!0:Array.from(this.parts.values()).some(Q=>Q.solo)&&!e.solo}updatePartAudioState(t){const l=this.parts.get(t),e=this.partGainNodes.get(t);if(l&&e){const n=this.isPartEffectivelyMuted(l.name);e.gain.value=n?0:l.volume}}updateAllPartsAudioState(){for(const[t]of this.parts)this.updatePartAudioState(t)}getParts(){return Array.from(this.parts.values())}getPartLevel(t){const l=this.sanitizePartName(t),e=this.partAnalyserNodes.get(l);if(!e)return 0;try{const n=e.frequencyBinCount,Q=new Uint8Array(n);e.getByteFrequencyData(Q);let A=0;for(let d=0;d<n;d++){const i=Q[d]/255;A+=i*i}const s=Math.sqrt(A/n);return Math.min(1,Math.pow(s*2,.7))}catch(n){return console.warn(`Failed to get level for part ${t}:`,n),0}}playLeadIn(t=1){this.setLeadInBars(t),this.playbackManager.play({leadIn:!0,metronome:!0})}playStartingNotes(){console.log(this.parts);const t=[...this.parts.values()],l=t.some(n=>n.solo),e=t.filter(n=>l?n.solo:!n.muted).map(n=>n.name);console.log(t,l,e),this.playbackManager.previewNextNotes({instrument:"piano",delayBetweenParts:.4,duration:.6,velocity:110,partOrder:e})}on(t,l){this.eventBus.on(t,l)}off(t,l){this.eventBus.off(t,l)}getBarFromTime(t){const l=this.playbackManager.midiPlayer.getBeatFromTime(t);return l?{bar:l.bar,beat:l.beat,repeat:l.repeat||0,time:l.time||t}:null}getTimeFromBar(t,l=0){return this.playbackManager.midiPlayer.getTimeFromBar(t,l)}allSoundsOff(){this.playbackManager&&this.playbackManager.allSoundsOff()}cleanup(){if(this.playbackManager)try{this.playbackManager.pause()}catch{}if(this.playbackManager&&this.metronomeGain)try{const t=this.playbackManager.getMetronomeOutput();t&&t.disconnect(this.metronomeGain)}catch{}if(this.partGainNodes.forEach(t=>{try{t.disconnect()}catch{}}),this.partAnalyserNodes.forEach(t=>{try{t.disconnect()}catch{}}),this.playbackManager){try{this.playbackManager.destroy()}catch{}this.playbackManager=null}this.parts.clear(),this.partGainNodes.clear(),this.partAnalyserNodes.clear(),this.beats=[],this.practiceMarks={},this.songDuration=0,this.maxBar=0}destroy(){this.cleanup(),this.audioEngine&&this.audioEngine.destroy(),this.audioContext&&this.audioContext.state!=="closed"&&this.audioContext.close(),this.eventBus.all.clear()}}const T=new _n;function bl(a={}){const t=nl(),l=Al(),e=Ve(),n={soundfontUrl:a.soundfontUrl},Q=({currentTime:b})=>{t.setCurrentTime(b)},A=({isPlaying:b})=>{t.setPlaybackState(b),e.setTransportState(b?"playing":"stopped"),!b&&t.isLeadInActive&&(t.setLeadInActive(!1),T.emitTimeAndBarUpdates(t.currentTime))},s=b=>{b&&(t.isLeadInActive?b.isLeadIn&&b.beat!==void 0&&t.setCurrentBar(null,b.beat,null):(t.setCurrentBar(b.bar,b.beat,b.repeat),e.updateLastBarPosition(b.bar)))},d=({speed:b})=>{t.setPlaybackSpeed(b)},i=({volume:b})=>{t.setMasterVolume(b)},U=({partName:b,volume:O})=>{t.setPartVolume(b,O)},B=({partName:b,muted:O})=>{t.setPartMuted(b,O)},m=({partName:b,solo:O})=>{t.setPartSolo(b,O)},h=({bars:b})=>{t.setLeadInActive(!0,b)},o=()=>{t.setLeadInActive(!1)},Z=()=>{t.setStartingNotesActive(!0)},u=()=>{t.setStartingNotesActive(!1)},V=({mark:b})=>{e.updateLastPracticeMarkUsed(b)},p=({parts:b})=>{t.initializeParts(b),l.setParts(b)},v=({finalTime:b})=>{t.setPlaybackState(!1),e.setTransportState("stopped"),console.log(`Song ended at time: ${b}`)},E=({duration:b})=>{console.log("Updating total duration in store to:",b),l.setTotalDuration(b)},k=({beats:b,practiceMarks:O,maxBar:Wt})=>{console.log(`Updating music data store with ${b.length} beats and ${Object.keys(O).length} practice marks`),l.updateBeats(b),l.practiceMarks=O,l.maxBar=Wt},H=()=>{T.on("timeChanged",Q),T.on("playbackStateChanged",A),T.on("barChanged",s),T.on("speedChanged",d),T.on("masterVolumeChanged",i),T.on("partVolumeChanged",U),T.on("partMutedChanged",B),T.on("partSoloChanged",m),T.on("leadInStarted",h),T.on("leadInCompleted",o),T.on("startingNotesStarted",Z),T.on("startingNotesCompleted",u),T.on("practiceMarkChanged",V),T.on("initialized",p),T.on("songEnded",v),T.on("durationUpdated",E),T.on("musicDataExtracted",k)},D=()=>{T.off("timeChanged",Q),T.off("playbackStateChanged",A),T.off("barChanged",s),T.off("speedChanged",d),T.off("masterVolumeChanged",i),T.off("partVolumeChanged",U),T.off("partMutedChanged",B),T.off("partSoloChanged",m),T.off("leadInStarted",h),T.off("leadInCompleted",o),T.off("startingNotesStarted",Z),T.off("startingNotesCompleted",u),T.off("practiceMarkChanged",V),T.off("initialized",p),T.off("songEnded",v),T.off("durationUpdated",E),T.off("musicDataExtracted",k)};(()=>{F.watchEffect(()=>{const b=t.masterVolume;try{T.getMasterVolume()!==b&&T.setMasterVolume(b)}catch(O){console.warn("Master volume sync skipped during initialization:",O.message)}}),F.watchEffect(()=>{const b=t.metronomeVolume;try{T.getMetronomeVolume()!==b&&T.setMetronomeVolume(b)}catch(O){console.warn("Metronome volume sync skipped during initialization:",O.message)}})})();const C=async b=>{try{if(t.setLoaded(!1),H(),l.loadMusicData(b),await T.initialize(b,n),e.buildFixedNavigationPoints(),!b.midiData&&b.beats&&b.beats.length>0){const O=b.beats[0];t.setCurrentBar(O.bar,O.beat,O.repeat),T.setTime(O.time)}T.updateToggleStates(t.metronomeEnabled,t.leadInEnabled),t.setLoaded(!0)}catch(O){throw console.error("Failed to initialize audio engine:",O),t.setLoaded(!1),O}},J=()=>{const b=t.currentBar,O=t.currentRepeat,Wt=t.currentTime;e.setLastPlayStart(b,O,Wt),e.setNavigationAction("play"),T.play()},K=()=>{e.setNavigationAction("pause"),T.stop()},j=()=>{e.setNavigationAction("pause"),T.pause()},M=b=>{e.setNavigationAction("manual"),T.setTime(b)},ct=(b,O=0)=>{e.setNavigationAction("manual"),T.setBar(b,O)},X=b=>{T.goToPracticeMark(b)},G=b=>{T.setPlaybackSpeed(b)},N=b=>{T.setMasterVolume(b)},x=(b,O)=>{T.setPartVolume(b,O)},at=(b,O)=>{T.setPartMuted(b,O)},nt=(b,O)=>{T.setPartSolo(b,O)},ut=(b=1)=>{T.playLeadIn(b)},Mt=()=>{T.playStartingNotes()},yt=(b,O=!0,Wt=0)=>{O&&e.leadInEnabled?(ct(b,Wt),ut(e.leadInBars)):(ct(b,Wt),J())},zt=(b,O=!0)=>{const Wt=l.getBarForMark(b);Wt&&yt(Wt,O)},Kt=()=>{const b=!t.metronomeEnabled;return t.setMetronomeEnabled(b),T.setMetronomeEnabled(b),b},Ft=()=>{const b=!t.leadInEnabled;return t.setLeadInEnabled(b),T.updateToggleStates(t.metronomeEnabled,b),b},_=()=>{T.stop(),t.setLoaded(!1),l.clear(),console.log("Audio mixer reset - ready for new score")};return F.onUnmounted(()=>{D()}),{initialize:C,reset:_,play:J,stop:K,pause:j,setTime:M,setBar:ct,goToPracticeMark:X,setPlaybackSpeed:G,setMasterVolume:N,setPartVolume:x,setPartMuted:at,setPartSolo:nt,getPartLevel:b=>T.getPartLevel(b),playLeadIn:ut,playStartingNotes:Mt,toggleMetronome:Kt,toggleLeadIn:Ft,setMetronomeEnabled:b=>{t.setMetronomeEnabled(b),T.setMetronomeEnabled(b)},playFromBar:yt,playFromMark:zt,audioState:t,musicData:l,playbackState:e,audioEngine:T}}const $n=["aria-label"],Fa=Lt({__name:"PartControl",props:F.mergeModels({name:{type:String,required:!0},level:{type:Number,default:0,validator:a=>a>=0&&a<=1}},{volume:{default:.75},volumeModifiers:{},mute:{default:!1},muteModifiers:{},solo:{default:!1},soloModifiers:{}}),emits:["update:volume","update:mute","update:solo"],setup(a){F.useCssVars(o=>({"03f87250":i.value}));const t=a;nl();const l=bl(),e=F.useModel(a,"volume"),n=F.useModel(a,"mute"),Q=F.useModel(a,"solo");F.watch(e,o=>{l.setPartVolume(t.name,o)}),F.watch(n,o=>{l.setPartMuted(t.name,o),o&&(Q.value=!1)}),F.watch(Q,o=>{l.setPartSolo(t.name,o),o&&(n.value=!1)});const A=F.useTemplateRef("el"),{width:s,height:d}=al(A),i=F.computed(()=>Math.min(s.value,d.value)+"px"),U=F.computed(()=>s.value>d.value?"mobile":s.value<60?"tablet":"desktop");let B=null;const m=F.ref(0);F.onMounted(()=>{B=setInterval(()=>{if(n.value)m.value=0;else try{m.value=l.getPartLevel(t.name)}catch{Ze("randomLevelIndicators")?m.value=Math.random()*e.value:m.value=0}},16)}),F.onUnmounted(()=>{B&&(clearInterval(B),B=null)});const h=o=>{if(["ArrowUp","ArrowRight","ArrowDown","ArrowLeft"].includes(o.key)){o.preventDefault(),o.stopPropagation();const Z=o.key==="ArrowUp"||o.key==="ArrowRight"?.1:-.1;e.value=Math.max(0,Math.min(1,e.value+Z))}else o.key==="m"&&!o.shiftKey?(o.preventDefault(),o.stopPropagation(),n.value=!n.value):o.key==="s"&&!o.shiftKey&&(o.preventDefault(),o.stopPropagation(),Q.value=!Q.value)};return(o,Z)=>(F.openBlock(),F.createElementBlock("div",{ref_key:"el",ref:A,class:F.normalizeClass([U.value,"part"]),tabindex:"0",role:"group","aria-label":`${a.name} part controls`,onKeydown:h},[Z[3]||(Z[3]=F.createElementVNode("div",{class:"focus"},null,-1)),F.createVNode(Aa,{class:"tri",mute:n.value,"onUpdate:mute":Z[0]||(Z[0]=u=>n.value=u),solo:Q.value,"onUpdate:solo":Z[1]||(Z[1]=u=>Q.value=u),tabindex:"-1"},null,8,["mute","solo"]),F.createVNode(Re,{align:"left",class:"name"},{default:F.withCtx(()=>[F.createTextVNode(F.toDisplayString(a.name),1)]),_:1}),F.createVNode(kl,{level:m.value,"show-level":!0,class:"vol",value:e.value,"onUpdate:value":Z[2]||(Z[2]=u=>e.value=u),step:.01,tabindex:"-1"},null,8,["level","value"])],42,$n))}},[["__scopeId","data-v-67bb489c"]]),tA={class:"mark"},lA={class:"rpt"},eA={class:"beat-ind"},aA={class:"beat"},nA={key:1,class:"mark-grid-container"},AA={class:"mark-grid"},QA=["onClick"],Ua=Lt({__name:"BarInput",setup(a){F.useCssVars(X=>({77574882:V.value,"188cd0ae":p.value}));const t=F.useTemplateRef("el"),l=F.useTemplateRef("rpt"),{width:e,height:n}=al(t),Q=Al(),A=nl(),s=bl(),d=F.ref("1"),i=F.ref("A"),U=F.ref(0),B=F.ref(2),m=F.ref(!1),h=F.ref(!1),o=F.ref(!1),Z=F.ref(!0);let u=null;F.watch(()=>{var X;return((X=Q.beats)==null?void 0:X.length)>0},X=>{console.log(X),X&&!m.value&&(d.value=A.currentBar.toString(),U.value=A.currentRepeat,B.value=Q.getRepeatCountForBar(A.currentBar),k(A.currentBar),m.value=!0)}),F.watch(()=>A.currentBar,X=>{B.value=Q.getRepeatCountForBar(X)}),F.watch(d,()=>{d.value=d.value.replace(/\D/g,""),d.value.length>3&&(d.value=d.value.slice(0,3))}),F.watch(()=>A.currentBar,X=>{d.value=X.toString(),k(X)}),F.watch(()=>A.currentBeat,()=>{Z.value=!0,setTimeout(()=>{Z.value=!1},50)}),F.watch(h,()=>{h.value&&M()});const V=F.computed(()=>Math.min(n.value/2.25,e.value/4.5)+"px"),p=F.computed(()=>Math.min(e.value/15,n.value/6.4)+"px"),v=F.computed(()=>Object.keys(Q.practiceMarks).sort()),E=F.computed(()=>v.value.length>0);function k(X){const G=Object.keys(Q.practiceMarks).filter(N=>Q.practiceMarks[N]<=X).sort((N,x)=>Q.practiceMarks[x]-Q.practiceMarks[N]);G.length>0&&(i.value=G[0])}function H(){var G;const X=parseInt(d.value);if(~isNaN(X)){D(X);const N=(G=t.value)==null?void 0:G.querySelector(".bar-input");N&&N.blur(),t.value&&t.value.focus()}}function D(X){s.setBar(X,0)}function y(X,G){G&&G.stopPropagation(),i.value=X,h.value=!1,s.goToPracticeMark(X),t.value&&t.value.blur()}function C(){B.value>1&&(o.value=!0),A.currentRepeat<B.value&&s.setBar(A.currentBar,A.currentRepeat+1)}function J(){B.value>1&&(o.value=!0),A.currentRepeat>1&&s.setBar(A.currentBar,A.currentRepeat-1)}function K(X){E.value&&(X.stopPropagation(),o.value=!1,h.value=!h.value)}function j(X){var G,N;(G=t.value)!=null&&G.contains(X.target)||(h.value=!1),(N=l.value)!=null&&N.contains(X.target)||(o.value=!1)}function M(){h.value&&setTimeout(()=>{var N,x;const X=(N=t.value)==null?void 0:N.querySelector(".mark-grid"),G=(x=t.value)==null?void 0:x.querySelector(".mark-option.selected");if(G&&X){const at=X.getBoundingClientRect(),nt=G.getBoundingClientRect(),ut=nt.left-at.left-at.width/2+nt.width/2;X.scrollLeft=Math.max(0,X.scrollLeft+ut)}},50)}F.onMounted(()=>{document.addEventListener("click",j),Ze("beatAnimation")&&(u=setInterval(()=>{const X=A.currentBeat%Q.timeSignature+1;A.setCurrentBar(A.currentBar,X,A.currentRepeat)},800))}),F.onUnmounted(()=>{document.removeEventListener("click",j),u&&(clearInterval(u),u=null)});const ct=X=>{var N;const G=(N=t.value)==null?void 0:N.querySelector(".bar-input");if(document.activeElement!==G)if(/^[a-z]$/.test(X.key)&&!X.ctrlKey&&!X.metaKey&&!X.shiftKey){X.preventDefault(),X.stopPropagation();const x=X.key.toUpperCase();v.value.includes(x)&&y(x,null)}else X.key==="ArrowUp"?(X.preventDefault(),X.stopPropagation(),C()):X.key==="ArrowDown"?(X.preventDefault(),X.stopPropagation(),J()):X.key==="Enter"&&(X.preventDefault(),X.stopPropagation(),H())};return(X,G)=>(F.openBlock(),F.createElementBlock("div",{ref_key:"el",ref:t,class:F.normalizeClass(["outer",{pulse:Z.value,"mark-selecting":h.value}]),tabindex:"0",role:"group","aria-label":"Musical navigation",onKeydown:ct},[G[6]||(G[6]=F.createElementVNode("div",{class:"frame"},null,-1)),F.createElementVNode("div",{class:F.normalizeClass(["mark-input",{empty:!i.value,edit:h.value,disabled:!E.value}]),tabindex:"-1",onClick:K},[F.createElementVNode("div",tA,F.toDisplayString(E.value?i.value:"-"),1)],2),G[7]||(G[7]=F.createElementVNode("div",{class:"mark-title"},"Mark",-1)),h.value?F.createCommentVNode("",!0):(F.openBlock(),F.createElementBlock(F.Fragment,{key:0},[F.withDirectives(F.createElementVNode("input",{type:"text",class:"bar-input","onUpdate:modelValue":G[0]||(G[0]=N=>d.value=N),inputmode:"decimal",pattern:"\\d*",tabindex:"-1",onChange:H,onKeyup:F.withKeys(H,["enter"])},null,544),[[F.vModelText,d.value]]),G[3]||(G[3]=F.createElementVNode("div",{class:"bar-title"},"Bar",-1)),F.createElementVNode("div",{ref_key:"rpt",ref:l,class:F.normalizeClass(["rpt-input",{edit:o.value,available:B.value>1}])},[F.createElementVNode("div",lA,F.toDisplayString(F.unref(A).currentRepeat||"-"),1),(F.openBlock(),F.createElementBlock("svg",{class:F.normalizeClass(["inc",{disabled:F.unref(A).currentRepeat>=B.value}]),viewBox:"0 -100 100 100",onClick:F.withModifiers(C,["prevent"])},G[1]||(G[1]=[F.createElementVNode("path",{d:"m10-20 40-60 40 60H10Z"},null,-1)]),2)),(F.openBlock(),F.createElementBlock("svg",{class:F.normalizeClass(["dec",{disabled:F.unref(A).currentRepeat<=1}]),viewBox:"0 -100 100 100",onClick:F.withModifiers(J,["prevent"])},G[2]||(G[2]=[F.createElementVNode("path",{d:"m10-80 40 60 40-60H10Z"},null,-1)]),2))],2),G[4]||(G[4]=F.createElementVNode("div",{class:"rpt-title"},"Rpt",-1)),F.createElementVNode("div",eA,[F.createElementVNode("div",aA,F.toDisplayString(F.unref(A).currentBeat),1)]),G[5]||(G[5]=F.createElementVNode("div",{class:"beat-title"},"Beat",-1))],64)),h.value?(F.openBlock(),F.createElementBlock("div",nA,[F.createElementVNode("div",AA,[(F.openBlock(!0),F.createElementBlock(F.Fragment,null,F.renderList(v.value,N=>(F.openBlock(),F.createElementBlock("div",{key:N,class:F.normalizeClass(["mark-option",{selected:N===i.value}]),onClick:x=>y(N,x)},F.toDisplayString(N),11,QA))),128))])])):F.createCommentVNode("",!0)],34))}},[["__scopeId","data-v-7856f4ec"]]),sA={class:"frame"},dA={class:"title"},be=Lt({__name:"BaseNumericInput",props:F.mergeModels({title:{type:String,required:!0},color:{type:String,default:"#336"},focusColor:{type:String,default:"#558"},textColor:{type:String,default:"#aad"},backgroundColor:{type:String,default:"#111117"},sliderMax:{type:Number,default:1},sliderMin:{type:Number,default:0},thumbLength:{type:Number,default:2},formatValue:{type:Function,default:a=>a.toString()},parseValue:{type:Function,default:a=>parseFloat(a)},validateInput:{type:Function,default:a=>a.replace(/[^0-9.]/g,"")},transformSliderToDisplay:{type:Function,default:a=>a},transformDisplayToSlider:{type:Function,default:a=>a},maxChars:{type:Number,default:null}},{value:{default:.5},valueModifiers:{}}),emits:["update:value"],setup(a){F.useCssVars(U=>({"391e6684":a.textColor,"6eae8f5d":a.backgroundColor,"6ee151eb":a.color,"29a40ccc":d.value,"7366daab":s.value,"0f87383a":a.focusColor}));const t=a,l=F.useTemplateRef("el"),{width:e,height:n}=al(l),Q=F.useModel(a,"value"),A=F.ref(t.formatValue(t.transformSliderToDisplay(Q.value)));F.watch(Q,()=>{const U=t.transformSliderToDisplay(Q.value);A.value=t.formatValue(U)}),F.watch(A,()=>{A.value=t.validateInput(A.value),t.maxChars&&A.value.length>t.maxChars&&(A.value=A.value.slice(0,t.maxChars))});const s=F.computed(()=>Math.min(n.value/2.25,e.value/2.2)+"px"),d=F.computed(()=>Math.min(e.value/3,n.value/6.4)+"px");function i(){const U=t.parseValue(A.value),B=t.transformDisplayToSlider(U);Q.value=Math.min(Math.max(B,t.sliderMin),t.sliderMax)}return(U,B)=>(F.openBlock(),F.createElementBlock("div",{class:"outer",ref_key:"el",ref:l},[F.createElementVNode("div",sA,[F.withDirectives(F.createElementVNode("input",{type:"text",class:"input","onUpdate:modelValue":B[0]||(B[0]=m=>A.value=m),inputmode:"decimal",pattern:"\\d*",onChange:i},null,544),[[F.vModelText,A.value]]),F.createElementVNode("div",dA,F.toDisplayString(a.title),1)]),F.createVNode(kl,{class:"slider",value:Q.value,"onUpdate:value":B[1]||(B[1]=m=>Q.value=m),"thumb-length":a.thumbLength,max:a.sliderMax,min:a.sliderMin,tabindex:"-1"},null,8,["value","thumb-length","max","min"])],512))}},[["__scopeId","data-v-3c97bdb4"]]),Ba={__name:"SpeedInput",setup(a){const t=nl(),l=bl(),e=F.computed({get:()=>Math.log2(t.playbackSpeed)*.5+.5,set:i=>{const U=Math.floor(Math.pow(2,i*2-1)*20+.5)*.05;l.setPlaybackSpeed(U)}}),n=i=>Math.floor(Math.pow(2,i*2-1)*20+.5)*5+"",Q=i=>parseFloat(i),A=i=>i.replace(/\D/g,""),s=i=>i,d=i=>{const U=Math.log2(i/100)*.5+.5;return Math.min(Math.max(U,0),1)};return(i,U)=>(F.openBlock(),F.createBlock(be,{value:e.value,"onUpdate:value":U[0]||(U[0]=B=>e.value=B),title:"Speed",color:"#336","text-color":"#aad","format-value":n,"parse-value":Q,"validate-input":A,"transform-slider-to-display":s,"transform-display-to-slider":d,"thumb-length":2,"max-chars":3},null,8,["value"]))}},ca={__name:"TimeInput",setup(a){const t=nl(),l=Al(),e=bl(),n=i=>i.toFixed(1),Q=i=>parseFloat(i),A=i=>i.replace(/[^0-9.]/g,""),s=i=>i,d=i=>i;return(i,U)=>(F.openBlock(),F.createBlock(be,{value:F.unref(t).currentTime,"onUpdate:value":[U[0]||(U[0]=B=>F.unref(t).currentTime=B),F.unref(e).setTime],title:"Time",color:"#344","focus-color":"#556868","text-color":"#acc","background-color":"#111117","slider-max":F.unref(l).totalDuration,"slider-min":0,"format-value":n,"parse-value":Q,"validate-input":A,"transform-slider-to-display":s,"transform-display-to-slider":d,"thumb-length":2},null,8,["value","onUpdate:value","slider-max"]))}},iA=["title"],oA={class:"inner"},Bl=Lt({__name:"AudioButton",props:{disabled:{type:Boolean,default:!1},title:{type:String,default:""}},setup(a){const t=a,l=F.ref(!1),e=()=>{t.disabled||(l.value=!0)},n=()=>l.value=!1;return(Q,A)=>(F.openBlock(),F.createElementBlock("div",{title:a.title,class:F.normalizeClass(["button-outer",{down:l.value,disabled:a.disabled}]),onPointerdown:e,onPointerup:n,onPointerleave:n},[F.createElementVNode("div",oA,[F.renderSlot(Q.$slots,"default",{},void 0,!0)])],42,iA))}},[["__scopeId","data-v-77d8694a"]]),FA={class:"outer"},UA={class:"title"},BA={class:"buttons",role:"toolbar","aria-label":"Transport controls"},cA={class:"icon",viewBox:"0 0 48 48"},hA=["d"],ha=Lt({__name:"MixerControls",props:{externalMenuControl:{type:Boolean,default:!1}},emits:["menu-click"],setup(a,{emit:t}){const l=a,e=t,n=Al(),Q=nl(),A=Ve(),s=bl();function d(){Q.isPlayingOrLeadIn?s.stop():s.play()}function i(){const y=A.navigationPoints;if(A.lastNavigationAction==="pause"&&A.lastPlayStartTime!==null){s.setTime(A.lastPlayStartTime),A.setNavigationAction(null);return}const C=Q.currentTime,J=y.filter(K=>K.time<C-.01).pop();J&&s.setTime(J.time)}function U(){const y=A.navigationPoints,C=Q.currentTime,J=y.find(K=>K.time>C+.01);J&&s.setTime(J.time)}function B(){s.playStartingNotes()}const m=F.computed(()=>Q.metronomeEnabled),h=F.computed(()=>Q.leadInEnabled),o=F.ref(!1),Z=F.ref(null);function u(){if(l.externalMenuControl){e("menu-click"),s.audioEngine.initializeAudioSystem().catch(y=>{console.warn("Audio system pre-initialization failed:",y)});return}o.value=!o.value,o.value&&(s.audioEngine.initializeAudioSystem().catch(y=>{console.warn("Audio system pre-initialization failed:",y)}),setTimeout(()=>{var C;const y=(C=Z.value)==null?void 0:C.querySelector('button, a, [tabindex="0"]');y&&y.focus()},0))}function V(){o.value=!1}function p(y){Z.value&&!Z.value.contains(y.target)&&V()}F.onMounted(()=>{document.addEventListener("click",p),document.addEventListener("keydown",D)}),F.onUnmounted(()=>{document.removeEventListener("click",p),document.removeEventListener("keydown",D)});function v(){s.toggleMetronome()}function E(){s.toggleLeadIn()}const k=F.computed({get:()=>Q.masterVolume,set:y=>Q.setMasterVolume(y)}),H=F.computed({get:()=>Q.metronomeVolume,set:y=>Q.setMetronomeVolume(y)}),D=y=>{const C=y.target;if(!(C.matches('input[type="text"]')&&(C.closest(".time")||C.closest(".speed")))){if(y.key==="Escape")y.preventDefault(),u();else if(y.key==="B"&&y.shiftKey){y.preventDefault();const J=document.querySelector(".bar");J&&J.focus()}else if(y.key==="T"&&y.shiftKey){y.preventDefault();const J=document.querySelector(".time input");J&&J.focus()}else if(y.key==="S"&&y.shiftKey){y.preventDefault();const J=document.querySelector(".speed input");J&&J.focus()}else if(y.key===" ")y.preventDefault(),d();else if(y.key==="PageUp")y.preventDefault(),U();else if(y.key==="PageDown")y.preventDefault(),i();else if(y.key==="M"&&y.shiftKey)y.preventDefault(),v();else if(y.key==="L"&&y.shiftKey)y.preventDefault(),E();else if(y.key==="N"&&y.shiftKey)y.preventDefault(),Q.isPlayingOrLeadIn||B();else if(/^[0-9]$/.test(y.key)&&!y.ctrlKey&&!y.metaKey&&!y.shiftKey){const J=document.querySelector(".bar .bar-input");if(document.activeElement===J)return;y.preventDefault(),J&&(J.value=y.key,J.focus(),J.setSelectionRange(1,1),J.dispatchEvent(new Event("input",{bubbles:!0})))}else if(/^[a-z]$/.test(y.key)&&!y.ctrlKey&&!y.metaKey&&!y.shiftKey){y.preventDefault();const J=document.querySelector(".bar");if(J){J.focus();const K=new KeyboardEvent("keydown",{key:y.key,code:y.code,bubbles:!0,cancelable:!0});J.dispatchEvent(K)}}}};return(y,C)=>(F.openBlock(),F.createElementBlock("div",FA,[F.createElementVNode("div",UA,[F.createVNode(Re,{class:"text",align:"centre",overflow:"scroll"},{default:F.withCtx(()=>[F.createTextVNode(F.toDisplayString(F.unref(n).title),1)]),_:1}),F.createElementVNode("div",{class:"menu-container",ref_key:"menuRef",ref:Z},[(F.openBlock(),F.createElementBlock("svg",{class:"menu",viewBox:"0 -960 960 960",onClick:u},C[2]||(C[2]=[F.createElementVNode("path",{d:"M120-240v-80h720v80H120Zm0-200v-80h720v80H120Zm0-200v-80h720v80H120Z"},null,-1)]))),!a.externalMenuControl&&o.value&&y.$slots.menu?(F.openBlock(),F.createElementBlock("div",{key:0,class:"dropdown-menu",onClick:V},[F.renderSlot(y.$slots,"menu",{},void 0,!0)])):F.createCommentVNode("",!0)],512)]),F.createVNode(kl,{class:"main",colour:"red",step:.01,keystep:.1,value:k.value,"onUpdate:value":C[0]||(C[0]=J=>k.value=J)},null,8,["value"]),C[8]||(C[8]=F.createElementVNode("div",{class:"main-t"},"Main",-1)),C[9]||(C[9]=F.createElementVNode("div",{class:"main-focus"},null,-1)),F.createVNode(kl,{class:"tick",colour:"blue",step:.01,keystep:.1,value:H.value,"onUpdate:value":C[1]||(C[1]=J=>H.value=J)},null,8,["value"]),C[10]||(C[10]=F.createElementVNode("div",{class:"tick-t"},"Tick",-1)),C[11]||(C[11]=F.createElementVNode("div",{class:"tick-focus"},null,-1)),F.createVNode(Ua,{class:"bar"}),F.createVNode(ca,{class:"time"}),F.createVNode(Ba,{class:"speed"}),F.createElementVNode("div",BA,[F.createVNode(Bl,{title:"Previous Mark",class:"button",tabindex:"-1",onClick:i},{default:F.withCtx(()=>C[3]||(C[3]=[F.createElementVNode("svg",{class:"icon",viewBox:"0 0 48 48"},[F.createElementVNode("path",{d:"M11 36V12h3v24Zm26 0L19.7 24 37 12Z"})],-1)])),_:1,__:[3]}),F.createVNode(Bl,{title:F.unref(Q).isPlayingOrLeadIn?"Pause":"Play",class:"button",tabindex:"-1",onClick:d},{default:F.withCtx(()=>[(F.openBlock(),F.createElementBlock("svg",cA,[F.createElementVNode("path",{d:F.unref(Q).isPlayingOrLeadIn?"M27.4 35.4V12.6h8v22.8Zm-14.8 0V12.6h8.05v22.8Z":"M16 37.85v-28l22 14Z"},null,8,hA)]))]),_:1},8,["title"]),F.createVNode(Bl,{title:"Next Mark",class:"button",tabindex:"-1",onClick:U},{default:F.withCtx(()=>C[4]||(C[4]=[F.createElementVNode("svg",{class:"icon",viewBox:"0 0 48 48"},[F.createElementVNode("path",{d:"M34 36V12h3v24Zm-23 0V12l17.3 12Z"})],-1)])),_:1,__:[4]}),F.createVNode(Bl,{title:"Toggle Metronome",class:"button",tabindex:"-1",onClick:v},{default:F.withCtx(()=>[(F.openBlock(),F.createElementBlock("svg",{class:F.normalizeClass(["icon",m.value?"on":"off"]),viewBox:"-128 -128 768 768"},C[5]||(C[5]=[F.createElementVNode("path",{d:"m 463.84136,154.89339 c -6.42,-6.42 -16.83,-6.42 -23.251,0 -71.31197,70.35135 -136.61146,132.25426 -208.741,199.7 h -105.82 c 23.35495,-140.1063 67.13099,-217.59716 120.727,-318.357996 0.86,-0.803 2.209,-0.801 3.067,-10e-4 20.50653,37.383983 48.51152,88.812606 72.26194,147.190756 1.186,9.002 12.2214,17.4338 23.3242,11.71391 9.002,-1.186 11.1594,-12.2324 9.9724,-21.2344 -21.69905,-53.89113 -30.43965,-85.078342 -83.11454,-161.702266 -13.446,-12.55299965 -34.508,-12.55699965 -47.954,10e-4 C 126.80877,149.30021 96.099465,324.74626 77.091365,474.25139 c -2.829,21.473 13.907,40.535 35.543995,40.535 h 271.311 c 21.661,0 38.373,-19.087 35.544,-40.535 -8.26237,-52.34207 -14.88466,-100.7074 -24.7871,-157.02622 -6.40949,-11.78839 -8.3911,-14.9907 -17.4031,-13.8037 -9.002,1.186 -13.59751,8.0528 -12.41051,17.0548 l 5.66371,34.11712 h -83.159 c 64.35441,-63.86663 129.29308,-130.29894 176.448,-176.449 6.42,-6.42 6.42,-16.83 -10e-4,-23.251 z m -88.956,232.582 12.004,91.074 c 0.112,0.846 -0.148,1.701 -0.708,2.341 -0.566,0.645 -1.38,1.014 -2.235,1.014 h -271.311 c -0.855,0 -1.668,-0.369 -2.231,-1.011 -0.564,-0.643 -0.824,-1.499 -0.712,-2.347 l 12.003,-91.072 h 253.19 z"},null,-1)]),2))]),_:1}),F.createVNode(Bl,{title:"Toggle Lead-in",class:"button",tabindex:"-1",onClick:E},{default:F.withCtx(()=>[(F.openBlock(),F.createElementBlock("svg",{class:F.normalizeClass(["icon",h.value?"on":"off"]),viewBox:"-2 -2 28 28"},C[6]||(C[6]=[F.createElementVNode("path",{d:"m 8.9838564,1.5166215 v 2 h 5.9999996 v -2 z m 2.9999996,3 c -4.9699996,0 -8.9999996,4.0299999 -8.9999996,8.9999995 0,4.97 4.02,9 8.9999996,9 4.98,0 9,-4.03 9,-9 0,-2.12 -0.740703,-4.0693745 -1.970703,-5.6093745 l 1.419922,-1.421875 c -0.43,-0.51 -0.900156,-0.9882031 -1.410156,-1.4082031 l -1.419922,1.4199219 c -1.55,-1.24 -3.499141,-1.9804688 -5.619141,-1.9804688 z m -1.789062,4.7480469 6,4.4999996 -6,4.5 z"},null,-1)]),2))]),_:1}),F.createVNode(Bl,{title:"Starting Notes",class:"button",tabindex:"-1",disabled:F.unref(Q).isPlayingOrLeadIn,onClick:B},{default:F.withCtx(()=>C[7]||(C[7]=[F.createElementVNode("svg",{class:"icon",viewBox:"0 -960 960 960"},[F.createElementVNode("path",{d:"m 306.66667,-360 q -44,0 -75.33334,-31.33333 Q 200,-422.66667 200,-466.66667 q 0,-44 31.33333,-75.33333 31.33334,-31.33333 75.33334,-31.33333 15.33333,0 28.33333,3.66666 13,3.66667 25,11 V -840 h 160 v 106.66667 H 413.33333 v 266.66666 q 0,44 -31.33333,75.33334 Q 350.66667,-360 306.66667,-360 Z"}),F.createElementVNode("path",{d:"m 546.66667,-120 q -44,0 -75.33334,-31.33333 Q 440,-182.66667 440,-226.66667 q 0,-44 31.33333,-75.33333 31.33334,-31.33333 75.33334,-31.33333 15.33333,0 28.33333,3.66666 13,3.66667 25,11 V -600 h 160 v 106.66667 H 653.33333 v 266.66666 q 0,44 -31.33333,75.33334 Q 590.66667,-120 546.66667,-120 Z"})],-1)])),_:1,__:[7]},8,["disabled"])])]))}},[["__scopeId","data-v-070a1a8f"]]),mA={class:"init-progress"},RA={key:0,class:"progress-track"},ZA={class:"message-container"},ma=Lt({__name:"InitializationProgress",props:{stage:{type:String,default:null},message:{type:String,default:""},progress:{type:Number,default:null},hasError:{type:Boolean,default:!1},errorMessage:{type:String,default:null}},setup(a){const t=a,l=F.computed(()=>t.progress!==null),e=F.computed(()=>t.progress===null?0:Math.max(0,Math.min(100,t.progress*100))),n=F.computed(()=>t.hasError?t.errorMessage:t.message);return(Q,A)=>(F.openBlock(),F.createElementBlock("div",mA,[l.value?(F.openBlock(),F.createElementBlock("div",RA,[F.createElementVNode("div",{class:"progress-fill",style:F.normalizeStyle({width:`${e.value}%`})},null,4)])):F.createCommentVNode("",!0),F.createElementVNode("div",ZA,[F.createElementVNode("div",{class:F.normalizeClass(["message",{error:a.hasError}])},F.toDisplayString(n.value),3)])]))}},[["__scopeId","data-v-a9ed87f2"]]),Ra=jt.defineStore("initialization",{state:()=>({currentStage:null,message:"",progress:null,isInitializing:!1,isReady:!1,hasError:!1,errorMessage:null}),actions:{updateProgress(a){this.currentStage=a.stage,this.message=a.message,this.progress=a.progress??null,a.stage==="ready"?(this.isInitializing=!1,this.isReady=!0):(this.isInitializing=!0,this.isReady=!1),this.hasError=!1,this.errorMessage=null},setError(a){this.hasError=!0,this.errorMessage=a,this.isInitializing=!1,this.isReady=!1},reset(){this.currentStage=null,this.message="",this.progress=null,this.isInitializing=!1,this.isReady=!1,this.hasError=!1,this.errorMessage=null},initializeListeners(){T.on("initProgress",a=>{this.updateProgress(a)})}},getters:{shouldShowProgress:a=>a.isInitializing||a.hasError,hasProgressBar:a=>a.progress!==null}}),VA={class:"container"},rA={class:"panel"},EA={key:0,class:"blur"},Za=40,Va=40,ra=100,bA=50,Ea=400,ba=570,ua=570,uA=350,IA=330,WA=360,SA=360,CA=Lt({__name:"MixerLayout",props:{showInitProgress:{type:Boolean,default:!0},externalMenuControl:{type:Boolean,default:!1}},emits:["menu-click"],setup(a,{emit:t}){F.useCssVars(o=>({"3e3bf6e6":B.value,"3e499cb2":m.value,"3a701552":h.value}));const l=a,e=t,n=Al(),Q=nl(),A=Ra();F.onMounted(()=>{A.initializeListeners()});const s=F.useTemplateRef("container"),{width:d}=al(s),i=F.computed(()=>Q.isLoaded),U=F.computed(()=>{const o=d.value,Z=n.parts.length;return o<640||o<Za*Z+Ea?0:o<Va*Z+ba?1:o<ra*Z+ua?2:3}),B=F.computed(()=>{switch(U.value){case 0:return`${uA}px `+`${bA}px `.repeat(n.parts.length);case 1:return`${IA}px`;case 2:return`${WA}px`;default:return`${SA}px`}}),m=F.computed(()=>{switch(U.value){case 0:return"100vw";case 1:return`${Za}px `.repeat(n.parts.length)+`${Ea}px`;case 2:return`${Va}px `.repeat(n.parts.length)+`${ba}px`;default:return`${ra}px `.repeat(n.parts.length)+`${ua}px`}}),h=F.computed(()=>{const o=[...n.parts.keys()];return U.value>0?'"'+o.map(Z=>"part"+Z).join(" ")+' controls"':'"controls" '+o.map(Z=>'"part'+Z+'"').join(" ")});return(o,Z)=>(F.openBlock(),F.createElementBlock("div",{class:"outer",ref_key:"container",ref:s},[F.createElementVNode("div",VA,[F.createElementVNode("div",rA,[(F.openBlock(!0),F.createElementBlock(F.Fragment,null,F.renderList(F.unref(n).parts,(u,V)=>(F.openBlock(),F.createBlock(Fa,{key:u.name,class:F.normalizeClass("part"+V),name:u.name,volume:u.volume,"onUpdate:volume":p=>u.volume=p,solo:u.solo,"onUpdate:solo":p=>u.solo=p,mute:u.mute,"onUpdate:mute":p=>u.mute=p,ref_for:!0,ref:"parts"},null,8,["class","name","volume","onUpdate:volume","solo","onUpdate:solo","mute","onUpdate:mute"]))),128)),F.createVNode(ha,{"external-menu-control":l.externalMenuControl,onMenuClick:Z[0]||(Z[0]=u=>e("menu-click")),class:"controls"},{menu:F.withCtx(()=>[F.renderSlot(o.$slots,"menu",{},void 0,!0)]),_:3},8,["external-menu-control"]),i.value?F.createCommentVNode("",!0):(F.openBlock(),F.createElementBlock("div",EA)),l.showInitProgress&&F.unref(A).shouldShowProgress?(F.openBlock(),F.createBlock(ma,{key:1,stage:F.unref(A).currentStage,message:F.unref(A).message,progress:F.unref(A).progress,"has-error":F.unref(A).hasError,"error-message":F.unref(A).errorMessage},null,8,["stage","message","progress","has-error","error-message"])):F.createCommentVNode("",!0)])])],512))}},[["__scopeId","data-v-cf29d602"]]),gA={class:"outer"},GA={class:"mid"},JA={class:"inner"},pA={key:0,class:"content"},yA=Lt({__name:"Placeholder",props:{colour:{type:String,default:"red"},text:{type:String,default:""}},setup(a){return F.useCssVars(t=>({"66bea586":a.colour})),(t,l)=>(F.openBlock(),F.createElementBlock("div",gA,[F.createElementVNode("div",GA,[F.createElementVNode("div",JA,[a.text||t.$slots.default?(F.openBlock(),F.createElementBlock("div",pA,[F.createTextVNode(F.toDisplayString(a.text)+" ",1),F.renderSlot(t.$slots,"default",{},void 0,!0)])):F.createCommentVNode("",!0)])])]))}},[["__scopeId","data-v-dff76c48"]]),NA={class:"modal-footer"},kA={key:0,class:"dont-remind"},XA=Lt({__name:"KeyboardShortcutsHelp",props:{visible:{type:Boolean,default:!1},showDontRemind:{type:Boolean,default:!1}},emits:["update:visible","dont-remind"],setup(a,{emit:t}){const l=a,e=t,n=F.ref(!1),Q=F.ref(null),A=()=>{n.value&&e("dont-remind",!0),e("update:visible",!1)},s=d=>{d.key==="Escape"&&(d.preventDefault(),d.stopPropagation(),A())};return F.watch(()=>l.visible,async d=>{var i;d&&(await F.nextTick(),(i=Q.value)==null||i.focus())}),(d,i)=>a.visible?(F.openBlock(),F.createElementBlock("div",{key:0,class:"modal-overlay",onClick:A,onKeydown:s},[F.createElementVNode("div",{class:"modal-content shortcuts-help",onClick:i[1]||(i[1]=F.withModifiers(()=>{},["stop"])),role:"dialog","aria-labelledby":"shortcuts-title","aria-modal":"true"},[i[3]||(i[3]=F.createStaticVNode('<h2 id="shortcuts-title" data-v-bfa878a3>Keyboard Shortcuts</h2><div class="shortcuts-container" data-v-bfa878a3><section class="shortcut-group" data-v-bfa878a3><h3 data-v-bfa878a3>Transport Controls</h3><dl data-v-bfa878a3><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>P</kbd></dt><dd data-v-bfa878a3>Play / Pause</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>S</kbd></dt><dd data-v-bfa878a3>Stop</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>B</kbd></dt><dd data-v-bfa878a3>Previous bar</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>F</kbd></dt><dd data-v-bfa878a3>Next bar</dd></div></dl></section><section class="shortcut-group" data-v-bfa878a3><h3 data-v-bfa878a3>Features</h3><dl data-v-bfa878a3><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>M</kbd></dt><dd data-v-bfa878a3>Toggle metronome</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>L</kbd></dt><dd data-v-bfa878a3>Toggle lead-in</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>N</kbd></dt><dd data-v-bfa878a3>Play starting notes</dd></div></dl></section><section class="shortcut-group" data-v-bfa878a3><h3 data-v-bfa878a3>Sliders &amp; Controls</h3><dl data-v-bfa878a3><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>↑</kbd> / <kbd data-v-bfa878a3>→</kbd></dt><dd data-v-bfa878a3>Increase value</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>↓</kbd> / <kbd data-v-bfa878a3>←</kbd></dt><dd data-v-bfa878a3>Decrease value</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Home</kbd></dt><dd data-v-bfa878a3>Set to minimum</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>End</kbd></dt><dd data-v-bfa878a3>Set to maximum</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Page Up</kbd> / <kbd data-v-bfa878a3>Page Down</kbd></dt><dd data-v-bfa878a3>Large adjustment</dd></div></dl></section><section class="shortcut-group" data-v-bfa878a3><h3 data-v-bfa878a3>Navigation</h3><dl data-v-bfa878a3><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Tab</kbd></dt><dd data-v-bfa878a3>Next control</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Shift</kbd> + <kbd data-v-bfa878a3>Tab</kbd></dt><dd data-v-bfa878a3>Previous control</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Enter</kbd> / <kbd data-v-bfa878a3>Space</kbd></dt><dd data-v-bfa878a3>Activate button</dd></div><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>Escape</kbd></dt><dd data-v-bfa878a3>Close dialog / menu</dd></div></dl></section><section class="shortcut-group" data-v-bfa878a3><h3 data-v-bfa878a3>Help</h3><dl data-v-bfa878a3><div class="shortcut-item" data-v-bfa878a3><dt data-v-bfa878a3><kbd data-v-bfa878a3>?</kbd></dt><dd data-v-bfa878a3>Show this help</dd></div></dl></section></div>',2)),F.createElementVNode("div",NA,[a.showDontRemind?(F.openBlock(),F.createElementBlock("label",kA,[F.withDirectives(F.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":i[0]||(i[0]=U=>n.value=U)},null,512),[[F.vModelCheckbox,n.value]]),i[2]||(i[2]=F.createTextVNode(" Don't show this again "))])):F.createCommentVNode("",!0),F.createElementVNode("button",{onClick:A,class:"close-button",ref_key:"closeButton",ref:Q},"Close",512)])])],32)):F.createCommentVNode("",!0)}},[["__scopeId","data-v-bfa878a3"]]);class Ia{constructor(){this.eventBus=Qa(),this.currentTime=0,this.isPlaying=!1,this.playbackSpeed=1,this.masterVolume=.75,this.parts=new Map,this.playbackTimer=null,this.lastTimestamp=0}initialize(t){if(this.musicData=t,this.beats=t.beats||[],this.practiceMarks=t.practiceMarks||{},this.beats.length>0){const l=this.beats[this.beats.length-1],e=l.tempo>0?60/l.tempo:.75;this.songDuration=l.time+e,this.maxBar=Math.max(...this.beats.map(n=>n.bar))}else this.songDuration=0,this.maxBar=0;t.parts&&t.parts.forEach(l=>{this.parts.set(l.name,{name:l.name,volume:l.volume||.75,muted:!1})}),this.eventBus.emit("initialized",{parts:Array.from(this.parts.values())})}play(){this.isPlaying||(this.isPlaying=!0,this.lastTimestamp=performance.now(),this.startPlaybackTimer(),this.eventBus.emit("playbackStateChanged",{isPlaying:!0,currentTime:this.currentTime}))}stop(){this.isPlaying&&(this.isPlaying=!1,this.stopPlaybackTimer(),this.eventBus.emit("playbackStateChanged",{isPlaying:!1,currentTime:this.currentTime}))}pause(){this.stop()}setTime(t){this.currentTime=Math.max(0,t),this.eventBus.emit("timeChanged",{currentTime:this.currentTime});const l=this.getBarFromTime(this.currentTime);l&&this.eventBus.emit("barChanged",l)}getCurrentTime(){return this.currentTime}setBar(t,l=0){const e=this.getTimeFromBar(t,l);e!==null&&this.setTime(e)}goToPracticeMark(t){const l=this.practiceMarks[t];l!==void 0&&(this.setBar(l),this.eventBus.emit("practiceMarkChanged",{mark:t,bar:l}))}setPlaybackSpeed(t){this.playbackSpeed=Math.max(.25,Math.min(2,t)),this.eventBus.emit("speedChanged",{speed:this.playbackSpeed})}getPlaybackSpeed(){return this.playbackSpeed}setMasterVolume(t){this.masterVolume=Math.max(0,Math.min(1,t)),this.eventBus.emit("masterVolumeChanged",{volume:this.masterVolume})}getMasterVolume(){return this.masterVolume}setPartVolume(t,l){const e=this.parts.get(t);e&&(e.volume=Math.max(0,Math.min(1,l)),this.eventBus.emit("partVolumeChanged",{partName:t,volume:e.volume}))}setPartMuted(t,l){const e=this.parts.get(t);e&&(e.muted=l,this.eventBus.emit("partMutedChanged",{partName:t,muted:l}))}getParts(){return Array.from(this.parts.values())}playLeadIn(t=1){this.eventBus.emit("leadInStarted",{bars:t}),setTimeout(()=>{this.eventBus.emit("leadInCompleted")},1e3*t)}playStartingNotes(){this.eventBus.emit("startingNotesStarted"),setTimeout(()=>{this.eventBus.emit("startingNotesCompleted")},2e3)}on(t,l){this.eventBus.on(t,l)}off(t,l){this.eventBus.off(t,l)}startPlaybackTimer(){const t=()=>{if(!this.isPlaying)return;const l=performance.now(),e=(l-this.lastTimestamp)/1e3;if(this.lastTimestamp=l,this.currentTime+=e*this.playbackSpeed,this.songDuration>0&&this.currentTime>=this.songDuration){this.stop(),this.eventBus.emit("songEnded",{finalTime:this.currentTime});return}this.eventBus.emit("timeChanged",{currentTime:this.currentTime});const n=this.getBarFromTime(this.currentTime);if(n&&(this.eventBus.emit("barChanged",n),this.maxBar>0&&n.bar>this.maxBar)){this.stop(),this.eventBus.emit("songEnded",{finalTime:this.currentTime});return}this.playbackTimer=requestAnimationFrame(t)};this.playbackTimer=requestAnimationFrame(t)}stopPlaybackTimer(){this.playbackTimer&&(cancelAnimationFrame(this.playbackTimer),this.playbackTimer=null)}getBarFromTime(t){if(!this.beats||this.beats.length===0)return null;let l=null;for(let e=this.beats.length-1;e>=0;e--)if(this.beats[e].time<=t){l=this.beats[e];break}return l?{bar:l.bar,beat:l.beat,repeat:l.repeat,time:l.time}:null}getTimeFromBar(t,l=0){if(!this.beats||this.beats.length===0)return null;let e=this.beats.find(n=>n.bar===t&&n.beat===1&&n.repeat===l);return e||(e=this.beats.find(n=>n.bar===t&&n.beat===1)),e?e.time:null}destroy(){this.stop(),this.eventBus.all.clear(),this.parts.clear()}}new Ia;var YA=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(t,l)=>(typeof require<"u"?require:t)[l]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')}),st=class extends Uint8Array{constructor(){super(...arguments);R(this,"currentIndex",0)}slice(t,l){const e=super.slice(t,l);return e.currentIndex=0,e}};function Wa(a,t=a.length,l=0){let e="";for(let n=0;n<t;n++){const Q=a[l+n];if(Q===0)return e;e+=String.fromCharCode(Q)}return e}function Ql(a,t){const l=a.currentIndex;return a.currentIndex+=t,Wa(a,t,l)}function ul(a,t=!1,l=!1){let e=a.length;t&&e++,l&&e%2!==0&&e++;const n=new st(e);return rt(n,a),n}function rt(a,t,l=0){l>0&&t.length>l&&(t=t.slice(0,l));for(let e=0;e<t.length;e++)a[a.currentIndex++]=t.charCodeAt(e);if(l>t.length)for(let e=0;e<l-t.length;e++)a[a.currentIndex++]=0;return a}function P(a,t){const l=TA(a,t,a.currentIndex);return a.currentIndex+=t,l}function TA(a,t,l=0){let e=0;for(let n=0;n<t;n++)e|=a[l+n]<<n*8;return e>>>0}function $l(a,t,l){for(let e=0;e<l;e++)a[a.currentIndex++]=t>>e*8&255}function z(a,t){a[a.currentIndex++]=t&255,a[a.currentIndex++]=t>>8}function At(a,t){$l(a,t,4)}function LA(a,t){const l=t<<8|a;return l>32767?l-65536:l}var Sa=class{constructor(a,t,l){R(this,"header");R(this,"size");R(this,"data");this.header=a,this.size=t,this.data=l}};function xt(a,t=!0,l=!1){const e=Ql(a,4);let n=P(a,4);e===""&&(n=0);let Q;return t?Q=a.slice(a.currentIndex,a.currentIndex+n):Q=new st(0),(t||l)&&(a.currentIndex+=n,n%2!==0&&a.currentIndex++),new Sa(e,n,Q)}function ot(a,t,l=!1,e=!1){if(a.length!==4)throw new Error(`Invalid header length: ${a}`);let n=8,Q=a,A=t.length;l&&A++;let s=A;e&&(n+=4,s+=4,Q="LIST");let d=n+A;d%2!==0&&d++;const i=new st(d);return rt(i,Q),At(i,s),e&&rt(i,a),i.set(t,n),i}function Xt(a,t,l=!1){let e=8,n=a;const Q=t.reduce((i,U)=>U.length+i,0);let A=Q;l&&(e+=4,A+=4,n="LIST");let s=e+Q;s%2!==0&&s++;const d=new st(s);return rt(d,n),At(d,A),l&&rt(d,a),t.forEach(i=>{d.set(i,e),e+=i.length}),d}function sl(a,t){return a.find(l=>l.header!=="LIST"?!1:(l.data.currentIndex=4,Wa(l.data,4)===t))}function MA(a,t){return{...t,...a??{}}}function xA(a,t,l=0){let e=0;for(let n=0;n<t;n++)e=e<<8|a[l+n];return e>>>0}function vA(a){let t=0;for(;a;){const l=a[a.currentIndex++];if(t=t<<7|l&127,l>>7!==1)break}return t}var W={warn:"color: orange;",unrecognized:"color: red;",info:"color: aqua;",recognized:"color: lime",value:"color: yellow; background-color: black;"},Ca;(()=>{var a=Uint8Array,t=Uint16Array,l=Int32Array,e=new a([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),n=new a([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Q=new a([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),A=function(G,N){for(var x=new t(31),at=0;at<31;++at)x[at]=N+=1<<G[at-1];for(var nt=new l(x[30]),at=1;at<30;++at)for(var ut=x[at];ut<x[at+1];++ut)nt[ut]=ut-x[at]<<5|at;return{b:x,r:nt}},s=A(e,2),d=s.b,i=s.r;d[28]=258,i[258]=28;var U=A(n,0),B=U.b,m=new t(32768);for(V=0;V<32768;++V)h=(V&43690)>>1|(V&21845)<<1,h=(h&52428)>>2|(h&13107)<<2,h=(h&61680)>>4|(h&3855)<<4,m[V]=((h&65280)>>8|(h&255)<<8)>>1;var h,V,o=function(G,N,x){for(var at=G.length,nt=0,ut=new t(N);nt<at;++nt)G[nt]&&++ut[G[nt]-1];var Mt=new t(N);for(nt=1;nt<N;++nt)Mt[nt]=Mt[nt-1]+ut[nt-1]<<1;var yt;{yt=new t(1<<N);var zt=15-N;for(nt=0;nt<at;++nt)if(G[nt])for(var Kt=nt<<4|G[nt],Ft=N-G[nt],_=Mt[G[nt]-1]++<<Ft,b=_|(1<<Ft)-1;_<=b;++_)yt[m[_]>>zt]=Kt}return yt},Z=new a(288);for(V=0;V<144;++V)Z[V]=8;var V;for(V=144;V<256;++V)Z[V]=9;var V;for(V=256;V<280;++V)Z[V]=7;var V;for(V=280;V<288;++V)Z[V]=8;var V,u=new a(32);for(V=0;V<32;++V)u[V]=5;var V,p=o(Z,9),v=o(u,5),E=function(G){for(var N=G[0],x=1;x<G.length;++x)G[x]>N&&(N=G[x]);return N},k=function(G,N,x){var at=N/8|0;return(G[at]|G[at+1]<<8)>>(N&7)&x},H=function(G,N){var x=N/8|0;return(G[x]|G[x+1]<<8|G[x+2]<<16)>>(N&7)},D=function(G){return(G+7)/8|0},y=function(G,N,x){return(x==null||x>G.length)&&(x=G.length),new a(G.subarray(N,x))},C=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],J=function(G,N,x){var at=new Error(N||C[G]);if(at.code=G,Error.captureStackTrace&&Error.captureStackTrace(at,J),!x)throw at;return at},K=function(G,N,x,at){var nt=G.length,ut=at?at.length:0;if(!nt||N.f&&!N.l)return x||new a(0);var Mt=!x,yt=Mt||N.i!=2,zt=N.i;Mt&&(x=new a(nt*3));var Kt=function(Jt){var It=x.length;if(Jt>It){var Nt=new a(Math.max(It*2,Jt));Nt.set(x),x=Nt}},Ft=N.f||0,_=N.p||0,b=N.b||0,O=N.l,Wt=N.d,Zl=N.m,Ul=N.n,gl=nt*8;do{if(!O){Ft=k(G,_,1);var xl=k(G,_+1,3);if(_+=3,xl)if(xl==1)O=p,Wt=v,Zl=9,Ul=5;else if(xl==2){var vl=k(G,_,31)+257,oe=k(G,_+10,15)+4,Ht=vl+k(G,_+5,31)+1;_+=14;for(var wt=new a(Ht),Gl=new a(19),St=0;St<oe;++St)Gl[Q[St]]=k(G,_+St*3,7);_+=oe*3;for(var Fe=E(Gl),Ue=(1<<Fe)-1,Ke=o(Gl,Fe),St=0;St<Ht;){var Dl=Ke[k(G,_,Ue)];_+=Dl&15;var Yt=Dl>>4;if(Yt<16)wt[St++]=Yt;else{var ll=0,el=0;for(Yt==16?(el=3+k(G,_,3),_+=2,ll=wt[St-1]):Yt==17?(el=3+k(G,_,7),_+=3):Yt==18&&(el=11+k(G,_,127),_+=7);el--;)wt[St++]=ll}}var Jl=wt.subarray(0,vl),Gt=wt.subarray(vl);Zl=E(Jl),Ul=E(Gt),O=o(Jl,Zl),Wt=o(Gt,Ul)}else J(1);else{var Yt=D(_)+4,I=G[Yt-4]|G[Yt-3]<<8,r=Yt+I;if(r>nt){zt&&J(0);break}yt&&Kt(b+I),x.set(G.subarray(Yt,r),b),N.b=b+=I,N.p=_=r*8,N.f=Ft;continue}if(_>gl){zt&&J(0);break}}yt&&Kt(b+131072);for(var g=(1<<Zl)-1,w=(1<<Ul)-1,tt=_;;tt=_){var ll=O[H(G,_)&g],Qt=ll>>4;if(_+=ll&15,_>gl){zt&&J(0);break}if(ll||J(2),Qt<256)x[b++]=Qt;else if(Qt==256){tt=_,O=null;break}else{var ht=Qt-254;if(Qt>264){var St=Qt-257,f=e[St];ht=k(G,_,(1<<f)-1)+d[St],_+=f}var Ct=Wt[H(G,_)&w],Vt=Ct>>4;Ct||J(3),_+=Ct&15;var Gt=B[Vt];if(Vt>3){var f=n[Vt];Gt+=H(G,_)&(1<<f)-1,_+=f}if(_>gl){zt&&J(0);break}yt&&Kt(b+131072);var et=b+ht;if(b<Gt){var dt=ut-Gt,it=Math.min(Gt,et);for(dt+b<0&&J(3);b<it;++b)x[b]=at[dt+b]}for(;b<et;++b)x[b]=x[b-Gt]}}N.l=O,N.p=tt,N.b=b,N.f=Ft,O&&(Ft=1,N.m=Zl,N.d=Wt,N.n=Ul)}while(!Ft);return b!=x.length&&Mt?y(x,0,b):x.subarray(0,b)},j=new a(0);function M(G,N){return K(G,{i:2},N&&N.out,N&&N.dictionary)}var ct=typeof TextDecoder<"u"&&new TextDecoder,X=0;try{ct.decode(j,{stream:!0}),X=1}catch{}Ca=M})();var DA=Ca;function lt(...a){}function mt(...a){console.warn(...a)}function dl(...a){}function vt(...a){}function KA(){}var Il={consoleColors:W,SpessaSynthInfo:lt,SpessaSynthWarn:mt,SpessaSynthGroupCollapsed:vt,SpessaSynthGroup:dl,SpessaSynthGroupEnd:KA,readBytesAsUintBigEndian:xA,readLittleEndian:P,readBytesAsString:Ql,readVariableLengthQuantity:vA,inflateSync:DA},il={noteOff:128,noteOn:144,polyPressure:160,controllerChange:176,programChange:192,channelPressure:208,pitchWheel:224,systemExclusive:240},q={bankSelect:0,modulationWheel:1,breathController:2,undefinedCC3:3,footController:4,portamentoTime:5,dataEntryMSB:6,mainVolume:7,balance:8,undefinedCC9:9,pan:10,expressionController:11,effectControl1:12,effectControl2:13,undefinedCC14:14,undefinedCC15:15,generalPurposeController1:16,generalPurposeController2:17,generalPurposeController3:18,generalPurposeController4:19,undefinedCC20:20,undefinedCC21:21,undefinedCC22:22,undefinedCC23:23,undefinedCC24:24,undefinedCC25:25,undefinedCC26:26,undefinedCC27:27,undefinedCC28:28,undefinedCC29:29,undefinedCC30:30,undefinedCC31:31,bankSelectLSB:32,modulationWheelLSB:33,breathControllerLSB:34,undefinedCC3LSB:35,footControllerLSB:36,portamentoTimeLSB:37,dataEntryLSB:38,mainVolumeLSB:39,balanceLSB:40,undefinedCC9LSB:41,panLSB:42,expressionControllerLSB:43,effectControl1LSB:44,effectControl2LSB:45,undefinedCC14LSB:46,undefinedCC15LSB:47,undefinedCC16LSB:48,undefinedCC17LSB:49,undefinedCC18LSB:50,undefinedCC19LSB:51,undefinedCC20LSB:52,undefinedCC21LSB:53,undefinedCC22LSB:54,undefinedCC23LSB:55,undefinedCC24LSB:56,undefinedCC25LSB:57,undefinedCC26LSB:58,undefinedCC27LSB:59,undefinedCC28LSB:60,undefinedCC29LSB:61,undefinedCC30LSB:62,undefinedCC31LSB:63,sustainPedal:64,portamentoOnOff:65,sostenutoPedal:66,softPedal:67,legatoFootswitch:68,hold2Pedal:69,soundVariation:70,filterResonance:71,releaseTime:72,attackTime:73,brightness:74,decayTime:75,vibratoRate:76,vibratoDepth:77,vibratoDelay:78,soundController10:79,generalPurposeController5:80,generalPurposeController6:81,generalPurposeController7:82,generalPurposeController8:83,portamentoControl:84,undefinedCC85:85,undefinedCC86:86,undefinedCC87:87,undefinedCC88:88,undefinedCC89:89,undefinedCC90:90,reverbDepth:91,tremoloDepth:92,chorusDepth:93,detuneDepth:94,phaserDepth:95,dataIncrement:96,dataDecrement:97,nonRegisteredParameterLSB:98,nonRegisteredParameterMSB:99,registeredParameterLSB:100,registeredParameterMSB:101,undefinedCC102LSB:102,undefinedCC103LSB:103,undefinedCC104LSB:104,undefinedCC105LSB:105,undefinedCC106LSB:106,undefinedCC107LSB:107,undefinedCC108LSB:108,undefinedCC109LSB:109,undefinedCC110LSB:110,undefinedCC111LSB:111,undefinedCC112LSB:112,undefinedCC113LSB:113,undefinedCC114LSB:114,undefinedCC115LSB:115,undefinedCC116LSB:116,undefinedCC117LSB:117,undefinedCC118LSB:118,undefinedCC119LSB:119,allSoundOff:120,resetAllControllers:121,localControlOnOff:122,allNotesOff:123,omniModeOff:124,omniModeOn:125,monoModeOn:126,polyModeOn:127},wA=350,ga=9,fA="gs",cl=-1,zA=1,HA=64,Ga=121,ol=class{static getDefaultBank(a){return a==="gm2"?Ga:0}static getDrumBank(a){switch(a){default:throw new Error(`${a} doesn't have a bank MSB for drums.`);case"gm2":return 120;case"xg":return 127}}static isXGDrums(a){return a===120||a===126||a===127}static isValidXGMSB(a){return this.isXGDrums(a)||a===HA||a===Ga}static isSystemXG(a){return a==="gm2"||a==="xg"}static addBankOffset(a,t,l=!0){return this.isXGDrums(a)&&l?a:Math.min(a+t,127)}static subtrackBankOffset(a,t,l=!0){return this.isXGDrums(a)&&l?a:Math.max(0,a-t)}},Wl=class Un{static toMIDIString(t){return t.isGMGSDrum?`DRUM:${t.program}`:`${t.bankLSB}:${t.bankMSB}:${t.program}`}static fromMIDIString(t){const l=t.split(":");if(l.length>3||l.length<2)throw new Error("Invalid MIDI string:");return t.startsWith("DRUM")?{bankMSB:0,bankLSB:0,program:parseInt(l[1]),isGMGSDrum:!0}:{bankLSB:parseInt(l[0]),bankMSB:parseInt(l[1]),program:parseInt(l[2]),isGMGSDrum:!1}}static toNamedMIDIString(t){return`${Un.toMIDIString(t)} ${t.name}`}static matches(t,l){return t.isGMGSDrum||l.isGMGSDrum?t.isGMGSDrum===l.isGMGSDrum&&t.program===l.program:t.program===l.program&&t.bankLSB===l.bankLSB&&t.bankMSB===l.bankMSB}static fromNamedMIDIString(t){const l=t.indexOf(" ");if(l<0)throw new Error(`Invalid named MIDI string: ${t}`);const e=this.fromMIDIString(t.substring(0,l)),n=t.substring(l+1);return{...e,name:n}}static sorter(t,l){return t.program!==l.program?t.program-l.program:t.isGMGSDrum&&!l.isGMGSDrum?1:!t.isGMGSDrum&&l.isGMGSDrum?-1:t.bankMSB!==l.bankMSB?t.bankMSB-l.bankMSB:t.bankLSB-l.bankLSB}},qA={hermite:2},Ja={channelTuning:0,channelTransposeFine:1,modulationMultiplier:2,masterTuning:3,channelTuningSemitones:4,channelKeyShift:5,sf2NPRNGeneratorLSB:6},jA=new Map([["domingo","Sunday"],["segunda-feira","Monday"],["terça-feira","Tuesday"],["quarta-feira","Wednesday"],["quinta-feira","Thursday"],["sexta-feira","Friday"],["sábado","Saturday"],["janeiro","January"],["fevereiro","February"],["março","March"],["abril","April"],["maio","May"],["junho","June"],["julho","July"],["agosto","August"],["setembro","September"],["outubro","October"],["novembro","November"],["dezembro","December"]]),PA=[jA];function OA(a){for(const t of PA){let l=a;t.forEach((n,Q)=>{const A=new RegExp(Q,"gi");l=l.replace(A,n)});const e=new Date(l);if(!isNaN(e.getTime()))return e}}function _A(a){const t=/^(\d{2})\.(\d{2})\.(\d{4})$/.exec(a);if(t){const l=parseInt(t[1]),e=parseInt(t[2])-1,n=parseInt(t[3]),Q=new Date(n,e,l);if(!isNaN(Q.getTime()))return Q}}function $A(a){const t=/^(\d{1,2})\s{1,2}(\d{1,2})\s{1,2}(\d{2})$/.exec(a);if(t){const l=t[1],e=(parseInt(t[2])+1).toString(),n=t[3],Q=new Date(`${e}/${l}/${n}`);if(!isNaN(Q.getTime()))return Q}}function tQ(a){const l=/\b\d{4}\b/.exec(a);return l?new Date(l[0]):void 0}function lQ(a){if(a=a.trim(),a.length<1)return new Date;const t=a.replace(/\b(\d+)(st|nd|rd|th)\b/g,"$1"),l=new Date(t);if(isNaN(l.getTime())){const e=OA(a);if(e)return e;const n=_A(a);if(n)return n;const Q=$A(a);if(Q)return Q;const A=tQ(a);return A||(mt(`Invalid date: "${a}". Replacing with the current date!`),new Date)}return l}var c={INVALID:-1,startAddrsOffset:0,endAddrOffset:1,startloopAddrsOffset:2,endloopAddrsOffset:3,startAddrsCoarseOffset:4,modLfoToPitch:5,vibLfoToPitch:6,modEnvToPitch:7,initialFilterFc:8,initialFilterQ:9,modLfoToFilterFc:10,modEnvToFilterFc:11,endAddrsCoarseOffset:12,modLfoToVolume:13,unused1:14,chorusEffectsSend:15,reverbEffectsSend:16,pan:17,unused2:18,unused3:19,unused4:20,delayModLFO:21,freqModLFO:22,delayVibLFO:23,freqVibLFO:24,delayModEnv:25,attackModEnv:26,holdModEnv:27,decayModEnv:28,sustainModEnv:29,releaseModEnv:30,keyNumToModEnvHold:31,keyNumToModEnvDecay:32,delayVolEnv:33,attackVolEnv:34,holdVolEnv:35,decayVolEnv:36,sustainVolEnv:37,releaseVolEnv:38,keyNumToVolEnvHold:39,keyNumToVolEnvDecay:40,instrument:41,reserved1:42,keyRange:43,velRange:44,startloopAddrsCoarseOffset:45,keyNum:46,velocity:47,initialAttenuation:48,reserved2:49,endloopAddrsCoarseOffset:50,coarseTune:51,fineTune:52,sampleID:53,sampleModes:54,reserved3:55,scaleTuning:56,exclusiveClass:57,overridingRootKey:58,unused5:59,endOper:60,vibLfoToVolume:61,vibLfoToFilterFc:62};Object.keys(c).length;var eQ=Math.max(...Object.values(c)),L=[];L[c.startAddrsOffset]={min:0,max:32768,def:0,nrpn:1},L[c.endAddrOffset]={min:-32768,max:32768,def:0,nrpn:1},L[c.startloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1},L[c.endloopAddrsOffset]={min:-32768,max:32768,def:0,nrpn:1},L[c.startAddrsCoarseOffset]={min:0,max:32768,def:0,nrpn:1},L[c.modLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2},L[c.vibLfoToPitch]={min:-12e3,max:12e3,def:0,nrpn:2},L[c.modEnvToPitch]={min:-12e3,max:12e3,def:0,nrpn:2},L[c.initialFilterFc]={min:1500,max:13500,def:13500,nrpn:2},L[c.initialFilterQ]={min:0,max:960,def:0,nrpn:1},L[c.modLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2},L[c.vibLfoToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2},L[c.modEnvToFilterFc]={min:-12e3,max:12e3,def:0,nrpn:2},L[c.endAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1},L[c.modLfoToVolume]={min:-960,max:960,def:0,nrpn:1},L[c.vibLfoToVolume]={min:-960,max:960,def:0,nrpn:1},L[c.chorusEffectsSend]={min:0,max:1e3,def:0,nrpn:1},L[c.reverbEffectsSend]={min:0,max:1e3,def:0,nrpn:1},L[c.pan]={min:-500,max:500,def:0,nrpn:1},L[c.delayModLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2},L[c.freqModLFO]={min:-16e3,max:4500,def:0,nrpn:4},L[c.delayVibLFO]={min:-12e3,max:5e3,def:-12e3,nrpn:2},L[c.freqVibLFO]={min:-16e3,max:4500,def:0,nrpn:4},L[c.delayModEnv]={min:-32768,max:5e3,def:-32768,nrpn:2},L[c.attackModEnv]={min:-32768,max:8e3,def:-32768,nrpn:2},L[c.holdModEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2},L[c.decayModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2},L[c.sustainModEnv]={min:0,max:1e3,def:0,nrpn:1},L[c.releaseModEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2},L[c.keyNumToModEnvHold]={min:-1200,max:1200,def:0,nrpn:1},L[c.keyNumToModEnvDecay]={min:-1200,max:1200,def:0,nrpn:1},L[c.delayVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2},L[c.attackVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2},L[c.holdVolEnv]={min:-12e3,max:5e3,def:-12e3,nrpn:2},L[c.decayVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2},L[c.sustainVolEnv]={min:0,max:1440,def:0,nrpn:1},L[c.releaseVolEnv]={min:-12e3,max:8e3,def:-12e3,nrpn:2},L[c.keyNumToVolEnvHold]={min:-1200,max:1200,def:0,nrpn:1},L[c.keyNumToVolEnvDecay]={min:-1200,max:1200,def:0,nrpn:1},L[c.startloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1},L[c.keyNum]={min:-1,max:127,def:-1,nrpn:1},L[c.velocity]={min:-1,max:127,def:-1,nrpn:1},L[c.initialAttenuation]={min:0,max:1440,def:0,nrpn:1},L[c.endloopAddrsCoarseOffset]={min:-32768,max:32768,def:0,nrpn:1},L[c.coarseTune]={min:-120,max:120,def:0,nrpn:1},L[c.fineTune]={min:-12700,max:12700,def:0,nrpn:1},L[c.scaleTuning]={min:0,max:1200,def:100,nrpn:1},L[c.exclusiveClass]={min:0,max:99999,def:0,nrpn:0},L[c.overridingRootKey]={min:-1,max:127,def:-1,nrpn:0},L[c.sampleModes]={min:0,max:3,def:0,nrpn:0};var bt={monoSample:1,rightSample:2,leftSample:4,linkedSample:8},Ut={noController:0,noteOnVelocity:2,noteOnKeyNum:3,polyPressure:10,channelPressure:13,pitchWheel:14,pitchWheelRange:16,link:127},Bt={linear:0,concave:1,convex:2,switch:3},Y={none:0,modLfo:1,velocity:2,keyNum:3,volEnv:4,modEnv:5,pitchWheel:6,polyPressure:7,channelPressure:8,vibratoLfo:9,modulationWheel:129,volume:135,pan:138,expression:139,chorus:221,reverb:219,pitchWheelRange:256,fineTune:257,coarseTune:258},S={none:0,gain:1,reserved:2,pitch:3,pan:4,keyNum:5,chorusSend:128,reverbSend:129,modLfoFreq:260,modLfoDelay:261,vibLfoFreq:276,vibLfoDelay:277,volEnvAttack:518,volEnvDecay:519,reservedEG1:520,volEnvRelease:521,volEnvSustain:522,volEnvDelay:523,volEnvHold:524,modEnvAttack:778,modEnvDecay:779,reservedEG2:780,modEnvRelease:781,modEnvSustain:782,modEnvDelay:783,modEnvHold:784,filterCutoff:1280,filterQ:1281},pa={forward:0,loopAndRelease:1},ue=128,aQ=147,Ie=new Int16Array(aQ).fill(0),Rt=(a,t)=>Ie[a]=t<<7;Rt(q.mainVolume,100),Rt(q.balance,64),Rt(q.expressionController,127),Rt(q.pan,64),Rt(q.portamentoOnOff,127),Rt(q.filterResonance,64),Rt(q.releaseTime,64),Rt(q.attackTime,64),Rt(q.brightness,64),Rt(q.decayTime,64),Rt(q.vibratoRate,64),Rt(q.vibratoDepth,64),Rt(q.vibratoDelay,64),Rt(q.generalPurposeController6,64),Rt(q.generalPurposeController8,64),Rt(q.registeredParameterLSB,127),Rt(q.registeredParameterMSB,127),Rt(q.nonRegisteredParameterLSB,127),Rt(q.nonRegisteredParameterMSB,127);var nQ=1;Ie[q.portamentoControl]=nQ,Rt(ue+Ut.pitchWheel,64),Rt(ue+Ut.pitchWheelRange,2);var AQ=Object.keys(Ja).length,QQ=new Float32Array(AQ);QQ[Ja.modulationMultiplier]=1,Ie.slice(0,128);var Xl=Xl!==void 0?Xl:{},ya=!1,Na;Xl.isInitialized=new Promise(a=>Na=a);var sQ=function(a){var t,l,e,n,Q,A,s,d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i="",U=0;a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");do n=d.indexOf(a.charAt(U++)),Q=d.indexOf(a.charAt(U++)),A=d.indexOf(a.charAt(U++)),s=d.indexOf(a.charAt(U++)),t=n<<2|Q>>4,l=(15&Q)<<4|A>>2,e=(3&A)<<6|s,i+=String.fromCharCode(t),A!==64&&(i+=String.fromCharCode(l)),s!==64&&(i+=String.fromCharCode(e));while(U<a.length);return i};(function(){var a,t,l,e,n,Q,A,s,d,i,U,B,m,h,o=o!==void 0?o:{};o.wasmBinary=Uint8Array.from(sQ("AGFzbQEAAAABpQEYYAJ/fwF/YAF/AGAAAX9gBH9/f38AYAAAYAN/f38Bf2ABfwF/YAJ/fwBgBn9/f39/fwF/YAR/f39/AX9gBX9/f39/AX9gB39/f39/f38Bf2AGf39/f39/AGAIf39/f39/f38Bf2AFf39/f38AYAd/f39/f39/AGADf39/AGABfwF9YAF9AX1gAnx/AXxgAnx/AX9gA3x8fwF8YAJ8fAF8YAF8AXwCngIPA2VudgZtZW1vcnkCAIACA2VudgV0YWJsZQFwAQQEA2Vudgl0YWJsZUJhc2UDfwADZW52DkRZTkFNSUNUT1BfUFRSA38AA2VudghTVEFDS1RPUAN/AANlbnYJU1RBQ0tfTUFYA38ABmdsb2JhbAhJbmZpbml0eQN8AANlbnYFYWJvcnQAAQNlbnYNZW5sYXJnZU1lbW9yeQACA2Vudg5nZXRUb3RhbE1lbW9yeQACA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQACA2Vudg5fX19hc3NlcnRfZmFpbAADA2VudgtfX19zZXRFcnJObwABA2VudgZfYWJvcnQABANlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA3d2BgYCAQcHAQIBAQcBCAcFAAkGCQoHBgYGBgEFBgIBBgYKAAgLAAYGBgYGBgYBAAoMDAMGBQANCAoJAAwODA8OAQAGBgcEABAJEAERAAADBQwAAAMHBxIGAQAABwIFEwMOBw8HBgYQFAoVExYXFxcXFgQFBQYFAAYkB38BIwELfwEjAgt/ASMDC38BQQALfwFBAAt8ASMEC38BQQALB9MCFRBfX2dyb3dXYXNtTWVtb3J5AAgRX19fZXJybm9fbG9jYXRpb24AYwVfZnJlZQBfB19tYWxsb2MAXgdfbWVtY3B5AHkHX21lbXNldAB6BV9zYnJrAHsXX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMAJhRfc3RiX3ZvcmJpc19qc19jbG9zZQAlFV9zdGJfdm9yYmlzX2pzX2RlY29kZQAoE19zdGJfdm9yYmlzX2pzX29wZW4AJBpfc3RiX3ZvcmJpc19qc19zYW1wbGVfcmF0ZQAnC2R5bkNhbGxfaWlpAHwTZXN0YWJsaXNoU3RhY2tTcGFjZQAMC2dldFRlbXBSZXQwAA8LcnVuUG9zdFNldHMAeAtzZXRUZW1wUmV0MAAOCHNldFRocmV3AA0Kc3RhY2tBbGxvYwAJDHN0YWNrUmVzdG9yZQALCXN0YWNrU2F2ZQAKCQoBACMACwR9VFl9Csb2A3YGACAAQAALGwEBfyMGIQEjBiAAaiQGIwZBD2pBcHEkBiABCwQAIwYLBgAgACQGCwoAIAAkBiABJAcLEAAjCEUEQCAAJAggASQJCwsGACAAJAsLBAAjCwsRACAABEAgABARIAAgABASCwvvBwEKfyAAQYADaiEHIAcoAgAhBQJAIAUEQCAAQfwBaiEEIAQoAgAhASABQQBKBEAgAEHwAGohCANAIAUgAkEYbGpBEGohCSAJKAIAIQEgAQRAIAgoAgAhAyAFIAJBGGxqQQ1qIQogCi0AACEGIAZB/wFxIQYgAyAGQbAQbGpBBGohAyADKAIAIQMgA0EASgRAQQAhAwNAIAEgA0ECdGohASABKAIAIQEgACABEBIgA0EBaiEDIAgoAgAhASAKLQAAIQYgBkH/AXEhBiABIAZBsBBsakEEaiEBIAEoAgAhBiAJKAIAIQEgAyAGSA0ACwsgACABEBILIAUgAkEYbGpBFGohASABKAIAIQEgACABEBIgAkEBaiECIAQoAgAhASACIAFODQMgBygCACEFDAAACwALCwsgAEHwAGohAyADKAIAIQEgAQRAIABB7ABqIQUgBSgCACECIAJBAEoEQEEAIQIDQAJAIAEgAkGwEGxqQQhqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQRxqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQSBqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQaQQaiEEIAQoAgAhBCAAIAQQEiABIAJBsBBsakGoEGohASABKAIAIQEgAUUhBCABQXxqIQFBACABIAQbIQEgACABEBIgAkEBaiECIAUoAgAhASACIAFODQAgAygCACEBDAELCyADKAIAIQELIAAgARASCyAAQfgBaiEBIAEoAgAhASAAIAEQEiAHKAIAIQEgACABEBIgAEGIA2ohAyADKAIAIQEgAQRAIABBhANqIQUgBSgCACECIAJBAEoEQEEAIQIDQCABIAJBKGxqQQRqIQEgASgCACEBIAAgARASIAJBAWohAiAFKAIAIQcgAygCACEBIAIgB0gNAAsLIAAgARASCyAAQQRqIQIgAigCACEBIAFBAEoEQEEAIQEDQCAAQZQGaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQZQHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQdgHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiABQQFqIQEgAigCACEDIAEgA0ghAyABQRBJIQUgBSADcQ0ACwtBACEBA0AgAEGgCGogAUECdGohAiACKAIAIQIgACACEBIgAEGoCGogAUECdGohAiACKAIAIQIgACACEBIgAEGwCGogAUECdGohAiACKAIAIQIgACACEBIgAEG4CGogAUECdGohAiACKAIAIQIgACACEBIgAEHACGogAUECdGohAiACKAIAIQIgACACEBIgAUEBaiEBIAFBAkcNAAsLGwAgAEHEAGohACAAKAIAIQAgAEUEQCABEF8LC3wBAX8gAEHUB2ohASABQQA2AgAgAEGAC2ohASABQQA2AgAgAEH4CmohASABQQA2AgAgAEGcCGohASABQQA2AgAgAEHVCmohASABQQA6AAAgAEH8CmohASABQQA2AgAgAEHUC2ohASABQQA2AgAgAEHYC2ohACAAQQA2AgAL8AQBB38jBiELIwZBEGokBiALQQhqIQcgC0EEaiEKIAshCCAAQSRqIQYgBiwAACEGAn8gBgR/IABBgAtqIQYgBigCACEGIAZBf0oEQCAFQQA2AgAgACABIAIQFgwCCyAAQRRqIQYgBiABNgIAIAEgAmohAiAAQRxqIQkgCSACNgIAIABB2ABqIQIgAkEANgIAIABBABAXIQkgCUUEQCAFQQA2AgBBAAwCCyAAIAcgCCAKEBghCSAJBEAgBygCACECIAgoAgAhCSAKKAIAIQggACACIAkgCBAaIQogByAKNgIAIABBBGohAiACKAIAIQggCEEASgRAQQAhAgNAIABBlAZqIAJBAnRqIQcgBygCACEHIAcgCUECdGohByAAQdQGaiACQQJ0aiEMIAwgBzYCACACQQFqIQIgAiAISA0ACwsgAwRAIAMgCDYCAAsgBSAKNgIAIABB1AZqIQAgBCAANgIAIAYoAgAhACAAIAFrDAILAkACQAJAAkACQCACKAIAIgNBIGsOBAECAgACCyACQQA2AgAgAEHUAGohAiAAEBkhAwJAIANBf0cEQANAIAIoAgAhAyADDQIgABAZIQMgA0F/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ACECIABBmAhqIQYgBigCACEHIAUgA2shCSAJIAdqIQkgAiAJSSEJIAIgB0khDSACIAdrIQJBACACIA0bIQIgAiADaiECIAIgBUohByAFIAIgBxshAiAJBEAgASACNgIAIAYoAgAhACAAIAJqIQAgBiAANgIAQQEMBgsLCyAAQfQKaiECIAIoAgAhAiADIB9rIQYgBiACaiEGIABBmAhqIQIgAiAGNgIAIAhBATYCAAwBBSAAQZgIaiECIAYNAQsMAQsgBCADayEDIAIoAgAhBCADIARqIQMgAiADNgIACyATKAIAIQIgAgRAIABByABqIQIgAigCACECIABB0ABqIQAgACgCACEAIAIgAEcEQEHTE0HEE0HkGkHnFBAECwsgASAFNgIAQQELIQAgHCQGIAALqAIBBX8gAEHoCmohBSAFKAIAIQICQCACQQBIBEBBACEABSACIAFIBEAgAUEYSgRAIABBGBAsIQIgAUFoaiEBIAAgARAsIQAgAEEYdCEAIAAgAmohACAADwsgAkUEQCAAQeQKaiECIAJBADYCAAsgAEHkCmohAwJAAkACQANAIAAQLiECIAJBf0YNASAFKAIAIQQgAiAEdCECIAMoAgAhBiAGIAJqIQIgAyACNgIAIAUgBEEIaiICNgIAIAIgAUgNAAwCAAsACyAFQX82AgBBACEADAQLIARBeEgEQEEAIQAMBAsLCyAAQeQKaiEEIAQoAgAhA0EBIAF0IQAgAEF/aiEAIAMgAHEhACADIAF2IQMgBCADNgIAIAIgAWshASAFIAE2AgALCyAAC40CAAJAIABBAEgEf0EABSAAQYCAAUgEQCAAQRBIBEAgAEGACGohACAALAAAIQAMAwsgAEGABEgEQCAAQQV2IQAgAEGACGohACAALAAAIQAgAEEFaiEABSAAQQp2IQAgAEGACGohACAALAAAIQAgAEEKaiEACwwCCyAAQYCAgAhIBH8gAEGAgCBIBH8gAEEPdiEAIABBgAhqIQAgACwAACEAIABBD2oFIABBFHYhACAAQYAIaiEAIAAsAAAhACAAQRRqCwUgAEGAgICAAkgEfyAAQRl2IQAgAEGACGohACAALAAAIQAgAEEZagUgAEEediEAIABBgAhqIQAgACwAACEAIABBHmoLCwshAAsgAAuiAQEDfyAAQdQKaiECIAIsAAAhAQJAAkAgAQ0AIABB3ApqIQEgASgCACEBIAEEQEF/IQMFIAAQLyEBIAEEQCACLAAAIQEgAQ0CQaEUQcQTQfYLQbUUEAQFQX8hAwsLDAELIAFBf2pBGHRBGHUhASACIAE6AAAgAEHsCmohASABKAIAIQIgAkEBaiECIAEgAjYCACAAEDAhACAAQf8BcSEDCyADC6wCAQd/IABB3ApqIQIgAigCACEBAkAgAUUEQCAAQdgKaiEEIAQoAgAhASABQX9GBEAgAEHQCGohASABKAIAIQEgAUF/aiEBIABB4ApqIQMgAyABNgIAIAAQMSEBIAFFBEAgAkEBNgIADAMLIABB0wpqIQEgASwAACEBIAFBAXEhASABBH8gBCgCAAUgAEEgEBUMAwshAQsgAUEBaiEHIAQgBzYCACAAQdQIaiABaiEDIAMsAAAhBiAGQf8BcSEDIAZBf0cEQCACQQE2AgAgAEHgCmohAiACIAE2AgALIABB0AhqIQEgASgCACEBIAcgAU4EQCAEQX82AgALIABB1ApqIQAgACwAACEBIAEEQEHFFEHEE0HoC0HaFBAEBSAAIAY6AAAgAyEFCwsLIAULUQEDfyAAQRRqIQMgAygCACEBIABBHGohAiACKAIAIQIgASACSQR/IAFBAWohACADIAA2AgAgASwAAAUgAEHUAGohACAAQQE2AgBBAAshACAACyABAX8gABAyIQEgAQR/IAAQMwUgAEEeEBVBAAshACAAC2ABAX8gABAwIQEgAUH/AXFBzwBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQAgAEH/AXFB0wBGIQAFQQAhAAsFQQAhAAsFQQAhAAsgAAvZAwEGfyAAEDAhAQJ/IAFB/wFxBH8gAEEfEBVBAAUgABAwIQEgAEHTCmohAiACIAE6AAAgABAjIQUgABAjIQIgABAjGiAAECMhASAAQcwIaiEDIAMgATYCACAAECMaIAAQMCEBIAFB/wFxIQEgAEHQCGohAyADIAE2AgAgAEHUCGohBCAAIAQgARAiIQEgAUUEQCAAQQoQFUEADAILIABB8ApqIQQgBEF+NgIAIAIgBXEhAQJAIAFBf0cEQCADKAIAIQEgAUEASgRAA0ACQCABQX9qIQIgAEHUCGogAmohBiAGLAAAIQYgBkF/Rw0AIAFBAUwNBCACIQEMAQsLIAQgAjYCACAAQfQKaiEBIAEgBTYCAAsLCyAAQdUKaiEBIAEsAAAhASABBEAgAygCACEDIANBAEoEf0EAIQJBACEBA0AgAEHUCGogAWohBCAELQAAIQQgBEH/AXEhBCACIARqIQIgAUEBaiEBIAEgA0gNAAsgAkEbagVBGwshASAAQShqIQIgAigCACECIAEgA2ohASABIAJqIQEgAEEsaiEDIAMgAjYCACAAQTBqIQIgAiABNgIAIABBNGohASABIAU2AgALIABB2ApqIQAgAEEANgIAQQELCyEAIAALowEBB38gAEHoCmohAyADKAIAIQECQCABQRlIBEAgAEHkCmohBCABRQRAIARBADYCAAsgAEHUCmohBSAAQdwKaiEGA0AgBigCACEBIAEEQCAFLAAAIQEgAUUNAwsgABAuIQIgAkF/Rg0CIAMoAgAhASACIAF0IQIgBCgCACEHIAcgAmohAiAEIAI2AgAgAUEIaiECIAMgAjYCACABQRFIDQALCwsLrQUBCX8gABA0IAFBIGohAiACKAIAIQUCQAJAIAVFIgNFDQAgAUGkEGohAiACKAIAIQIgAg0AQX8hAQwBCyABQQRqIQIgAigCACECAkACQCACQQhKBEAgAUGkEGohAyADKAIAIQMgAw0BBSADDQELDAELIABB5ApqIQggCCgCACEJIAkQOiEHIAFBrBBqIQIgAigCACECIAJBAUoEQCABQaQQaigCACEKQQAhAwNAIAJBAXYhBSAFIANqIQQgCiAEQQJ0aiEGIAYoAgAhBiAGIAdLIQYgAiAFayECIAMgBCAGGyEDIAUgAiAGGyECIAJBAUoNAAsFQQAhAwsgAUEXaiECIAIsAAAhAiACRQRAIAFBqBBqIQIgAigCACECIAIgA0ECdGohAiACKAIAIQMLIAFBCGohASABKAIAIQEgASADaiEBIAEtAAAhASABQf8BcSEBIABB6ApqIQIgAigCACEAIAAgAUgEf0EAIQBBfwUgACABayEAIAkgAXYhASAIIAE2AgAgAwshASACIAA2AgAMAQsgAUEXaiEDIAMsAAAhAyADBEBBgRVBxBNB6gxBjBUQBAsCQCACQQBKBEAgASgCCCEIIABB5ApqIQlBACEBA0ACQCAIIAFqIQMgAywAACEEIARB/wFxIQMgBEF/RwRAIAUgAUECdGoh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IwZBEGokBiACIQECfCAAvUIgiKdB/////wdxIgNB/MOk/wNJBHwgA0GewZryA0kEfEQAAAAAAADwPwUgAEQAAAAAAAAAABByCwUgACAAoSADQf//v/8HSw0BGgJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwgQcgwECyABKwMAIAErAwhBARBwmgwDCyABKwMAIAErAwgQcpoMAgsgASsDACABKwMIQQEQcAsLIQAgAiQGIAALywEBA38jBiECIwZBEGokBiACIQECQCAAvUIgiKdB/////wdxIgNB/MOk/wNJBEAgA0GAgMDyA08EQCAARAAAAAAAAAAAQQAQcCEACwUgA0H//7//B0sEQCAAIAChIQAMAgsCQAJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwhBARBwIQAMBQsgASsDACABKwMIEHIhAAwECyABKwMAIAErAwhBARBwmiEADAMLIAErAwAgASsDCBBymiEACwsLIAIkBiAAC5sDAwJ/AX4CfCAAvSIDQj+IpyEBAnwCfwJAIANCIIinQf////8HcSICQarGmIQESwR8IANC////////////AINCgICAgICAgPj/AFYEQCAADwsgAETvOfr+Qi6GQGQEQCAARAAAAAAAAOB/og8FIABE0rx63SsjhsBjIABEUTAt1RBJh8BjcUUNAkQAAAAAAAAAACIADwsABSACQcLc2P4DSwRAIAJBscXC/wNLDQIgAUEBcyABawwDCyACQYCAwPEDSwR8QQAhASAABSAARAAAAAAAAPA/oA8LCwwCCyAARP6CK2VHFfc/oiABQQN0QYATaisDAKCqCyEBIAAgAbciBEQAAOD+Qi7mP6KhIgAgBER2PHk17znqPaIiBaELIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQAgAUUEQCAADwsgACABEGULnwMDAn8BfgV8IAC9IgNCIIinIQECfyADQgBTIgIgAUGAgMAASXIEfyADQv///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOi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mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(I){return I.charCodeAt(0)});var o=o!==void 0?o:{},Z={};for(a in o)o.hasOwnProperty(a)&&(Z[a]=o[a]);o.arguments=[],o.thisProgram="./this.program",o.quit=function(I,r){throw r},o.preRun=[],o.postRun=[];var u=!1,V=!1,p=!1,v=!1;u=typeof window=="object",V=typeof importScripts=="function",p=typeof process=="object"&&typeof YA=="function"&&!u&&!V,v=!u&&!p&&!V;var E="";function k(I){return o.locateFile?o.locateFile(I,E):E+I}p?(E="/",o.read=function(r,g){var w;return t||(t=void 0),l||(l=void 0),r=l.normalize(r),w=t.readFileSync(r),g?w:w.toString()},o.readBinary=function(r){var g=o.read(r,!0);return g.buffer||(g=new Uint8Array(g)),j(g.buffer),g},process.argv.length>1&&(o.thisProgram=process.argv[1].replace(/\\/g,"/")),o.arguments=process.argv.slice(2),process.on("uncaughtException",function(I){if(!(I instanceof el))throw I}),process.on("unhandledRejection",function(I,r){process.exit(1)}),o.quit=function(I){process.exit(I)},o.inspect=function(){return"[Emscripten Module object]"}):v?(typeof read<"u"&&(o.read=function(r){return read(r)}),o.readBinary=function(r){var g;return typeof readbuffer=="function"?new Uint8Array(readbuffer(r)):(j(typeof(g=read(r,"binary"))=="object"),g)},typeof scriptArgs<"u"?o.arguments=scriptArgs:typeof arguments<"u"&&(o.arguments=arguments),typeof quit=="function"&&(o.quit=function(I){quit(I)})):(u||V)&&(u?document.currentScript&&(E=document.currentScript.src):E=self.location.href,E=E.indexOf("blob:")!==0?E.split("/").slice(0,-1).join("/")+"/":"",o.read=function(r){var g=new XMLHttpRequest;return g.open("GET",r,!1),g.send(null),g.responseText},V&&(o.readBinary=function(r){var g=new XMLHttpRequest;return g.open("GET",r,!1),g.responseType="arraybuffer",g.send(null),new Uint8Array(g.response)}),o.readAsync=function(r,g,w){var tt=new XMLHttpRequest;tt.open("GET",r,!0),tt.responseType="arraybuffer",tt.onload=function(){if(tt.status==200||tt.status==0&&tt.response){g(tt.response);return}w()},tt.onerror=w,tt.send(null)},o.setWindowTitle=function(I){document.title=I});var H=o.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),D=o.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||H);for(a in Z)Z.hasOwnProperty(a)&&(o[a]=Z[a]);function y(I){var r=d;return d=d+I+15&-16,r}function C(I,r){return r||(r=16),I=Math.ceil(I/r)*r}Z=void 0;var J={"f64-rem":function(I,r){return I%r},debugger:function(){}},K=0;function j(I,r){I||Gt("Assertion failed: "+r)}function M(I){var r=o["_"+I];return j(r,"Cannot call unknown function "+I+", make sure it is exported"),r}var ct={arrayToC:function(I){var r,g,w=Dl(I.length);return r=I,g=w,n.set(r,g),w},stringToC:function(I){var r=0;if(I!=null&&I!==0){var g=(I.length<<2)+1;r=Dl(g),nt(I,r,g)}return r}},X={string:ct.stringToC,array:ct.arrayToC};function G(I,r,g,w,tt){var Qt=M(I),ht=[],f=0;if(w)for(var Ct=0;Ct<w.length;Ct++){var Vt=X[g[Ct]];Vt?(f===0&&(f=ll()),ht[Ct]=Vt(w[Ct])):ht[Ct]=w[Ct]}var et,dt=Qt.apply(null,ht);return dt=(et=dt,r==="string"?N(et):r==="boolean"?!!et:et),f!==0&&Yt(f),dt}function N(I,r){if(r===0||!I)return"";for(var g,w,tt,Qt=0,ht=0;Qt|=w=Q[I+ht>>0],(w!=0||r)&&(ht++,!r||ht!=r););r||(r=ht);var f="";if(Qt<128){for(;r>0;)tt=String.fromCharCode.apply(String,Q.subarray(I,I+Math.min(r,1024))),f=f?f+tt:tt,I+=1024,r-=1024;return f}return g=I,function(Vt,et){for(var dt=et;Vt[dt];)++dt;if(dt-et>16&&Vt.subarray&&x)return x.decode(Vt.subarray(et,dt));for(var it,Jt,It,Nt,Vl,Kl,kt="";;){if(!(it=Vt[et++]))return kt;if(!(128&it)){kt+=String.fromCharCode(it);continue}if(Jt=63&Vt[et++],(224&it)==192){kt+=String.fromCharCode((31&it)<<6|Jt);continue}if(It=63&Vt[et++],(240&it)==224?it=(15&it)<<12|Jt<<6|It:(Nt=63&Vt[et++],(248&it)==240?it=(7&it)<<18|Jt<<12|It<<6|Nt:(Vl=63&Vt[et++],it=(252&it)==248?(3&it)<<24|Jt<<18|It<<12|Nt<<6|Vl:(1&it)<<30|Jt<<24|It<<18|Nt<<12|Vl<<6|(Kl=63&Vt[et++]))),it<65536)kt+=String.fromCharCode(it);else{var wl=it-65536;kt+=String.fromCharCode(55296|wl>>10,56320|1023&wl)}}}(Q,g)}var x=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function at(I,r,g,w){if(!(w>0))return 0;for(var tt=g,Qt=g+w-1,ht=0;ht<I.length;++ht){var f=I.charCodeAt(ht);if(f>=55296&&f<=57343&&(f=65536+((1023&f)<<10)|1023&I.charCodeAt(++ht)),f<=127){if(g>=Qt)break;r[g++]=f}else if(f<=2047){if(g+1>=Qt)break;r[g++]=192|f>>6,r[g++]=128|63&f}else if(f<=65535){if(g+2>=Qt)break;r[g++]=224|f>>12,r[g++]=128|f>>6&63,r[g++]=128|63&f}else if(f<=2097151){if(g+3>=Qt)break;r[g++]=240|f>>18,r[g++]=128|f>>12&63,r[g++]=128|f>>6&63,r[g++]=128|63&f}else if(f<=67108863){if(g+4>=Qt)break;r[g++]=248|f>>24,r[g++]=128|f>>18&63,r[g++]=128|f>>12&63,r[g++]=128|f>>6&63,r[g++]=128|63&f}else{if(g+5>=Qt)break;r[g++]=252|f>>30,r[g++]=128|f>>24&63,r[g++]=128|f>>18&63,r[g++]=128|f>>12&63,r[g++]=128|f>>6&63,r[g++]=128|63&f}}return r[g]=0,g-tt}function nt(I,r,g){return at(I,Q,r,g)}typeof TextDecoder<"u"&&new TextDecoder("utf-16le");function ut(I,r){return I%r>0&&(I+=r-I%r),I}function Mt(I){o.buffer=e=I}function yt(){o.HEAP8=n=new Int8Array(e),o.HEAP16=new Int16Array(e),o.HEAP32=A=new Int32Array(e),o.HEAPU8=Q=new Uint8Array(e),o.HEAPU16=new Uint16Array(e),o.HEAPU32=new Uint32Array(e),o.HEAPF32=new Float32Array(e),o.HEAPF64=new Float64Array(e)}function zt(){var I=o.usingWasm?65536:16777216,r=2147483648-I;if(A[m>>2]>r)return!1;var g=Ft;for(Ft=Math.max(Ft,16777216);Ft<A[m>>2];)Ft=Ft<=536870912?ut(2*Ft,I):Math.min(ut((3*Ft+2147483648)/4,I),r);var w=o.reallocBuffer(Ft);return w&&w.byteLength==Ft?(Mt(w),yt(),!0):(Ft=g,!1)}s=d=i=U=B=m=0,o.reallocBuffer||(o.reallocBuffer=function(I){try{if(ArrayBuffer.transfer)r=ArrayBuffer.transfer(e,I);else{var r,g=n;r=new ArrayBuffer(I),new Int8Array(r).set(g)}}catch{return!1}return!!Ke(r)&&r});try{(h=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{h=function(r){return r.byteLength}}var Kt=o.TOTAL_STACK||5242880,Ft=o.TOTAL_MEMORY||16777216;function _(){return Ft}function b(I){for(;I.length>0;){var r=I.shift();if(typeof r=="function"){r();continue}var g=r.func;typeof g=="number"?r.arg===void 0?o.dynCall_v(g):o.dynCall_vi(g,r.arg):g(r.arg===void 0?null:r.arg)}}Ft<Kt&&D("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+Ft+"! (TOTAL_STACK="+Kt+")"),o.buffer?e=o.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(o.wasmMemory=new WebAssembly.Memory({initial:Ft/65536}),e=o.wasmMemory.buffer):e=new ArrayBuffer(Ft),o.buffer=e),yt();var O=[],Wt=[],Zl=[],Ul=[],gl=!1;function xl(I){O.unshift(I)}function vl(I){Ul.unshift(I)}var oe=Math.floor,Ht=0,wt=null;o.preloadedImages={},o.preloadedAudios={};var Gl="data:application/octet-stream;base64,";function St(I){return String.prototype.startsWith?I.startsWith(Gl):I.indexOf(Gl)===0}(function(){var r="main.wast",g="main.wasm",w="main.temp.asm";St(r)||(r=k(r)),St(g)||(g=k(g)),St(w)||(w=k(w));var tt={global:null,env:null,asm2wasm:J,parent:o},Qt=null;function ht(){try{if(o.wasmBinary)return new Uint8Array(o.wasmBinary);if(o.readBinary)return o.readBinary(g);throw"both async and sync fetching of the wasm failed"}catch(et){Gt(et)}}o.asmPreload=o.asm;var f=o.reallocBuffer,Ct=function(et){et=ut(et,o.usingWasm?65536:16777216);var dt=o.buffer.byteLength;if(o.usingWasm)try{var it=o.wasmMemory.grow((et-dt)/65536);return it!==-1?o.buffer=o.wasmMemory.buffer:null}catch{return null}};o.reallocBuffer=function(et){return Vt==="asmjs"?f(et):Ct(et)};var Vt="";o.asm=function(et,dt,it){if(!(dt=dt).table){var Jt,It=o.wasmTableSize;It===void 0&&(It=1024);var Nt=o.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?Nt!==void 0?dt.table=new WebAssembly.Table({initial:It,maximum:Nt,element:"anyfunc"}):dt.table=new WebAssembly.Table({initial:It,element:"anyfunc"}):dt.table=Array(It),o.wasmTable=dt.table}return dt.memoryBase||(dt.memoryBase=o.STATIC_BASE),dt.tableBase||(dt.tableBase=0),Jt=function(Kl,kt,wl){if(typeof WebAssembly!="object")return D("no native wasm support detected"),!1;if(!(o.wasmMemory instanceof WebAssembly.Memory))return D("no native wasm Memory in use"),!1;function pl(Tt,qt){if((Qt=Tt.exports).memory){var fl,we,Fn;fl=Qt.memory,we=o.buffer,fl.byteLength<we.byteLength&&D("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),Fn=new Int8Array(we),new Int8Array(fl).set(Fn),Mt(fl),yt()}o.asm=Qt,o.usingWasm=!0,function(bs){if(Ht--,o.monitorRunDependencies&&o.monitorRunDependencies(Ht),Ht==0&&wt){var ns=wt;wt=null,ns()}}()}if(kt.memory=o.wasmMemory,tt.global={NaN:NaN,Infinity:1/0},tt["global.Math"]=Math,tt.env=kt,Ht++,o.monitorRunDependencies&&o.monitorRunDependencies(Ht),o.instantiateWasm)try{return o.instantiateWasm(tt,pl)}catch(Tt){return D("Module.instantiateWasm callback failed with error: "+Tt),!1}function yl(Tt){pl(Tt.instance,Tt.module)}function Be(Tt){(!o.wasmBinary&&(u||V)&&typeof fetch=="function"?fetch(g,{credentials:"same-origin"}).then(function(qt){if(!qt.ok)throw"failed to load wasm binary file at '"+g+"'";return qt.arrayBuffer()}).catch(function(){return ht()}):new Promise(function(qt,fl){qt(ht())})).then(function(qt){return WebAssembly.instantiate(qt,tt)}).then(Tt).catch(function(qt){D("failed to asynchronously prepare wasm: "+qt),Gt(qt)})}return o.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||St(g)||typeof fetch!="function"?Be(yl):WebAssembly.instantiateStreaming(fetch(g,{credentials:"same-origin"}),tt).then(yl).catch(function(Tt){D("wasm streaming compile failed: "+Tt),D("falling back to ArrayBuffer instantiation"),Be(yl)}),{}}(et,dt),j(Jt,"no binaryen method succeeded."),Jt},o.asm})(),d=(s=1024)+4816,Wt.push(),o.STATIC_BASE=s,o.STATIC_BUMP=4816;var Fe=d;d+=16,m=y(4),U=(i=C(d))+Kt,B=C(U),A[m>>2]=B,o.wasmTableSize=4,o.wasmMaxTableSize=4,o.asmGlobalArg={},o.asmLibraryArg={abort:Gt,assert:j,enlargeMemory:zt,getTotalMemory:_,abortOnCannotGrowMemory:function(){Gt("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+Ft+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_iii:function(r,g,w){var tt=ll();try{return o.dynCall_iii(r,g,w)}catch(Qt){if(Yt(tt),typeof Qt!="number"&&Qt!=="longjmp")throw Qt;o.setThrew(1,0)}},___assert_fail:function(r,g,w,tt){Gt("Assertion failed: "+N(r)+", at: "+[g?N(g):"unknown filename",w,tt?N(tt):"unknown function"])},___setErrNo:function(r){return o.___errno_location&&(A[o.___errno_location()>>2]=r),r},_abort:function(){o.abort()},_emscripten_memcpy_big:function(r,g,w){return Q.set(Q.subarray(g,g+w),r),r},_llvm_floor_f64:oe,DYNAMICTOP_PTR:m,tempDoublePtr:Fe,ABORT:K,STACKTOP:i,STACK_MAX:U};var Ue=o.asm(o.asmGlobalArg,o.asmLibraryArg,e);o.asm=Ue,o.___errno_location=function(){return o.asm.___errno_location.apply(null,arguments)};var Ke=o._emscripten_replace_memory=function(){return o.asm._emscripten_replace_memory.apply(null,arguments)};o._free=function(){return o.asm._free.apply(null,arguments)},o._malloc=function(){return o.asm._malloc.apply(null,arguments)},o._memcpy=function(){return o.asm._memcpy.apply(null,arguments)},o._memset=function(){return o.asm._memset.apply(null,arguments)},o._sbrk=function(){return o.asm._sbrk.apply(null,arguments)},o._stb_vorbis_js_channels=function(){return o.asm._stb_vorbis_js_channels.apply(null,arguments)},o._stb_vorbis_js_close=function(){return o.asm._stb_vorbis_js_close.apply(null,arguments)},o._stb_vorbis_js_decode=function(){return o.asm._stb_vorbis_js_decode.apply(null,arguments)},o._stb_vorbis_js_open=function(){return o.asm._stb_vorbis_js_open.apply(null,arguments)},o._stb_vorbis_js_sample_rate=function(){return o.asm._stb_vorbis_js_sample_rate.apply(null,arguments)},o.establishStackSpace=function(){return o.asm.establishStackSpace.apply(null,arguments)},o.getTempRet0=function(){return o.asm.getTempRet0.apply(null,arguments)},o.runPostSets=function(){return o.asm.runPostSets.apply(null,arguments)},o.setTempRet0=function(){return o.asm.setTempRet0.apply(null,arguments)},o.setThrew=function(){return o.asm.setThrew.apply(null,arguments)};var Dl=o.stackAlloc=function(){return o.asm.stackAlloc.apply(null,arguments)},Yt=o.stackRestore=function(){return o.asm.stackRestore.apply(null,arguments)},ll=o.stackSave=function(){return o.asm.stackSave.apply(null,arguments)};function el(I){this.name="ExitStatus",this.message="Program terminated with exit("+I+")",this.status=I}function Jl(I){I=I||o.arguments,!(Ht>0)&&(function(){if(o.preRun)for(typeof o.preRun=="function"&&(o.preRun=[o.preRun]);o.preRun.length;)xl(o.preRun.shift());b(O)}(),!(Ht>0)&&(o.calledRun||(o.setStatus?(o.setStatus("Running..."),setTimeout(function(){setTimeout(function(){o.setStatus("")},1),r()},1)):r())));function r(){!o.calledRun&&(o.calledRun=!0,K||(gl||(gl=!0,b(Wt)),b(Zl),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for(typeof o.postRun=="function"&&(o.postRun=[o.postRun]);o.postRun.length;)vl(o.postRun.shift());b(Ul)}()))}}function Gt(I){throw o.onAbort&&o.onAbort(I),I!==void 0?(H(I),D(I),I=JSON.stringify(I)):I="",K=!0,"abort("+I+"). Build with -s ASSERTIONS=1 for more info."}if(o.dynCall_iii=function(){return o.asm.dynCall_iii.apply(null,arguments)},o.asm=Ue,o.ccall=G,o.cwrap=function(r,g,w,tt){var Qt=(w=w||[]).every(function(ht){return ht==="number"});return g!=="string"&&Qt&&!tt?M(r):function(){return G(r,g,w,arguments)}},el.prototype=Error(),el.prototype.constructor=el,wt=function I(){o.calledRun||Jl(),o.calledRun||(wt=I)},o.run=Jl,o.abort=Gt,o.preInit)for(typeof o.preInit=="function"&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();o.noExitRuntime=!0,Jl(),o.onRuntimeInitialized=()=>{ya=!0,Na()},Xl.decode=function(I){return function(g){if(!ya)throw Error("SF3 decoder has not been initialized yet. Did you await synth.isReady?");var w={};function tt(pl){return new Int32Array(o.HEAPU8.buffer,pl,1)[0]}function Qt(pl,yl){var Be=new ArrayBuffer(yl*Float32Array.BYTES_PER_ELEMENT),Tt=new Float32Array(Be);return Tt.set(new Float32Array(o.HEAPU8.buffer,pl,yl)),Tt}w.open=o.cwrap("stb_vorbis_js_open","number",[]),w.close=o.cwrap("stb_vorbis_js_close","void",["number"]),w.channels=o.cwrap("stb_vorbis_js_channels","number",["number"]),w.sampleRate=o.cwrap("stb_vorbis_js_sample_rate","number",["number"]),w.decode=o.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var ht,f,Ct,Vt,et=w.open(),dt=(ht=g,f=g.byteLength,Ct=o._malloc(f),(Vt=new Uint8Array(o.HEAPU8.buffer,Ct,f)).set(new Uint8Array(ht,0,f)),Vt),it=o._malloc(4),Jt=o._malloc(4),It=w.decode(et,dt.byteOffset,dt.byteLength,it,Jt);if(o._free(dt.byteOffset),It<0)throw w.close(et),o._free(it),Error("stbvorbis decode failed: "+It);for(var Nt=w.channels(et),Vl=Array(Nt),Kl=new Int32Array(o.HEAPU32.buffer,tt(it),Nt),kt=0;kt<Nt;kt++)Vl[kt]=Qt(Kl[kt],It),o._free(Kl[kt]);var wl=w.sampleRate(et);return w.close(et),o._free(tt(it)),o._free(it),{data:Vl,sampleRate:wl,eof:!0,error:null}}(I)}})();var ka=Xl,Xa=-15e3,dQ=15e3,Ya=new Float32Array(dQ-Xa+1);for(let a=0;a<Ya.length;a++){const t=Xa+a;Ya[a]=Math.pow(2,t/1200)}var te=-2e4,Ta=16500,We=new Float32Array(Ta-te+1);for(let a=0;a<We.length;a++){const t=te+a;We[a]=440*Math.pow(2,(t-6900)/1200)}function iQ(a){return a<te||a>Ta?440*Math.pow(2,(a-6900)/1200):We[~~a-te]}var Se=-1660,oQ=1600,Ce=new Float32Array((oQ-Se)*100+1);for(let a=0;a<Ce.length;a++){const t=(Se*100+a)/100;Ce[a]=Math.pow(10,-t/20)}function La(a){return Ce[Math.floor((a-Se)*100)]}function hl(a,t){return(a>>t&1)>0}function ge(a){return a?1:0}var pt=16384,le=Object.keys(Bt).length,Ma=4,Pt=new Float32Array(pt+1),ml=new Float32Array(pt+1);Pt[0]=0,Pt[Pt.length-1]=1,ml[0]=0,ml[ml.length-1]=1;for(let a=1;a<pt-1;a++){const t=-.4166666666666667*Math.log(a/(Pt.length-1))/Math.LN10;ml[a]=1-t,Pt[Pt.length-1-a]=t}function xa(a,t,l){const e=!!(a&2);switch(!!(a&1)&&(l=1-l),t){case Bt.linear:return e?l*2-1:l;case Bt.switch:return l=l>.5?1:0,e?l*2-1:l;case Bt.concave:return e?(l=l*2-1,l<0?-Pt[~~(l*-pt)]:Pt[~~(l*pt)]):Pt[~~(l*pt)];case Bt.convex:return e?(l=l*2-1,l<0?-ml[~~(l*-pt)]:ml[~~(l*pt)]):ml[~~(l*pt)]}}var Ot=class fe{constructor(t=Ut.noController,l=Bt.linear,e=!1,n=!1,Q=!1){R(this,"isBipolar");R(this,"isNegative");R(this,"index");R(this,"isCC");R(this,"curveType");this.isBipolar=n,this.isNegative=Q,this.index=t,this.isCC=e,this.curveType=l}get sourceName(){return this.isCC?Object.keys(q).find(t=>q[t]===this.index)??this.index.toString():Object.keys(Ut).find(t=>Ut[t]===this.index)??this.index.toString()}get curveTypeName(){return Object.keys(Bt).find(t=>Bt[t]===this.curveType)??this.curveType.toString()}static fromSourceEnum(t){const l=hl(t,9),e=hl(t,8),n=hl(t,7),Q=t&127,A=t>>10&3;return new fe(Q,A,n,l,e)}static copyFrom(t){return new fe(t.index,t.curveType,t.isCC,t.isBipolar,t.isNegative)}toString(){return`${this.sourceName} ${this.curveTypeName} ${this.isBipolar?"bipolar":"unipolar"} ${this.isNegative?"negative":"positive"}`}toSourceEnum(){return this.curveType<<10|ge(this.isBipolar)<<9|ge(this.isNegative)<<8|ge(this.isCC)<<7|this.index}isIdentical(t){return this.index===t.index&&this.isNegative===t.isNegative&&this.isCC===t.isCC&&this.isBipolar===t.isBipolar&&this.curveType===t.curveType}getValue(t,l){let e;if(this.isCC)e=t[this.index];else switch(this.index){case Ut.noController:e=16383;break;case Ut.noteOnKeyNum:e=l.midiNote<<7;break;case Ut.noteOnVelocity:e=l.velocity<<7;break;case Ut.polyPressure:e=l.pressure<<7;break;default:e=t[this.index+ue];break}const n=(this.isBipolar?2:0)|(this.isNegative?1:0);return va[pt*(this.curveType*le+n)+e]}},va=new Float32Array(pt*Ma*le);for(let a=0;a<le;a++)for(let t=0;t<Ma;t++){const l=pt*(a*le+t);for(let e=0;e<pt;e++)va[l+e]=xa(t,a,e/pt)}var Fl=10;function _t(a,t,l,e,n){return new Ot(n,a,e,t,l).toSourceEnum()}var Da=_t(Bt.linear,!0,!1,!0,q.filterResonance),Zt=class ze{constructor(t=new Ot,l=new Ot,e=c.INVALID,n=0,Q=0,A=!1,s=!1){R(this,"currentValue",0);R(this,"destination",c.initialAttenuation);R(this,"transformAmount",0);R(this,"transformType",0);R(this,"isEffectModulator",!1);R(this,"isDefaultResonantModulator",!1);R(this,"primarySource");R(this,"secondarySource");this.primarySource=t,this.secondarySource=l,this.destination=e,this.transformAmount=n,this.transformType=Q,this.isEffectModulator=A,this.isDefaultResonantModulator=s}get destinationName(){return Object.keys(c).find(t=>c[t]===this.destination)}static isIdentical(t,l,e=!1){return t.primarySource.isIdentical(l.primarySource)&&t.secondarySource.isIdentical(l.secondarySource)&&t.destination===l.destination&&t.transformType===l.transformType&&(!e||t.transformAmount===l.transformAmount)}static copyFrom(t){return new ze(Ot.copyFrom(t.primarySource),Ot.copyFrom(t.secondarySource),t.destination,t.transformAmount,t.transformType,t.isEffectModulator,t.isDefaultResonantModulator)}toString(){return`Source: ${this.primarySource.toString()}
2
2
  Secondary source: ${this.secondarySource.toString()}
3
3
  to: ${this.destinationName}
4
4
  amount: ${this.transformAmount}`+(this.transformType===2?"absolute value":"")}write(t,l){z(t,this.primarySource.toSourceEnum()),z(t,this.destination),z(t,this.transformAmount),z(t,this.secondarySource.toSourceEnum()),z(t,this.transformType),l&&l.mod++}sumTransform(t){const l=ze.copyFrom(this);return l.transformAmount+=t.transformAmount,l}},Et=class extends Zt{constructor(a,t,l,e,n){const Q=(a===219||a===221)&&t===0&&(l===c.reverbEffectsSend||l===c.chorusEffectsSend),A=a===Da&&t===0&&l===c.initialFilterQ;super(Ot.fromSourceEnum(a),Ot.fromSourceEnum(t),l,e,n,Q,A),this.destination>eQ&&(this.destination=c.INVALID)}},Ge=960,Je=Bt.concave,FQ=[new Et(_t(Je,!1,!0,!1,Ut.noteOnVelocity),0,c.initialAttenuation,Ge,0),new Et(129,0,c.vibLfoToPitch,50,0),new Et(_t(Je,!1,!0,!0,q.mainVolume),0,c.initialAttenuation,Ge,0),new Et(13,0,c.vibLfoToPitch,50,0),new Et(526,16,c.fineTune,12700,0),new Et(650,0,c.pan,500,0),new Et(_t(Je,!1,!0,!0,q.expressionController),0,c.initialAttenuation,Ge,0),new Et(219,0,c.reverbEffectsSend,200,0),new Et(221,0,c.chorusEffectsSend,200,0)],UQ=[new Et(_t(Bt.linear,!1,!1,!1,Ut.polyPressure),0,c.vibLfoToPitch,50,0),new Et(_t(Bt.linear,!1,!1,!0,q.tremoloDepth),0,c.modLfoToVolume,24,0),new Et(_t(Bt.convex,!0,!1,!0,q.attackTime),0,c.attackVolEnv,6e3,0),new Et(_t(Bt.linear,!0,!1,!0,q.releaseTime),0,c.releaseVolEnv,3600,0),new Et(_t(Bt.linear,!0,!1,!0,q.brightness),0,c.initialFilterFc,6e3,0),new Et(Da,0,c.initialFilterQ,250,0)],Ka=FQ.concat(UQ),Yl=4,gt=class{constructor(a,t,l=!0){R(this,"generatorType");R(this,"generatorValue",0);if(this.generatorType=a,t===void 0)throw new Error("No value provided.");if(this.generatorValue=Math.round(t),l){const e=L[a];e!==void 0&&(this.generatorValue=Math.max(e.min,Math.min(e.max,this.generatorValue)))}}write(a,t){z(a,this.generatorType),z(a,this.generatorValue),t.gen++}toString(){return`${Object.keys(c).find(a=>c[a]===this.generatorType)}: ${this.generatorValue}`}},ee=4,ae=class{constructor(){R(this,"velRange",{min:-1,max:127});R(this,"keyRange",{min:-1,max:127});R(this,"generators",[]);R(this,"modulators",[])}get hasKeyRange(){return this.keyRange.min!==-1}get hasVelRange(){return this.velRange.min!==-1}get fineTuning(){const a=this.getGenerator(c.coarseTune,0),t=this.getGenerator(c.fineTune,0);return a*100+t}set fineTuning(a){const t=Math.trunc(a/100),l=a%100;this.setGenerator(c.coarseTune,t),this.setGenerator(c.fineTune,l)}addToGenerator(a,t,l=!0){const e=this.getGenerator(a,L[a].def);this.setGenerator(a,t+e,l)}setGenerator(a,t,l=!0){switch(a){case c.sampleID:throw new Error("Use setSample()");case c.instrument:throw new Error("Use setInstrument()");case c.velRange:case c.keyRange:throw new Error("Set the range manually")}if(t===null){this.generators=this.generators.filter(n=>n.generatorType!==a);return}const e=this.generators.findIndex(n=>n.generatorType===a);e>=0?this.generators[e]=new gt(a,t,l):this.addGenerators(new gt(a,t,l))}addGenerators(...a){a.forEach(t=>{switch(t.generatorType){default:this.generators.push(t);break;case c.sampleID:case c.instrument:break;case c.velRange:this.velRange.min=t.generatorValue&127,this.velRange.max=t.generatorValue>>8&127;break;case c.keyRange:this.keyRange.min=t.generatorValue&127,this.keyRange.max=t.generatorValue>>8&127}})}addModulators(...a){this.modulators.push(...a)}getGenerator(a,t){var l;return((l=this.generators.find(e=>e.generatorType===a))==null?void 0:l.generatorValue)??t}copyFrom(a){this.generators=a.generators.map(t=>new gt(t.generatorType,t.generatorValue,!1)),this.modulators=a.modulators.map(Zt.copyFrom.bind(Zt)),this.velRange={...a.velRange},this.keyRange={...a.keyRange}}getGenCount(){let a=this.generators.filter(t=>t.generatorType!==c.sampleID&&t.generatorType!==c.instrument&&t.generatorType!==c.keyRange&&t.generatorType!==c.velRange).length;return this.hasVelRange&&a++,this.hasKeyRange&&a++,a}write(a,t,l,e,n){const Q=e.gen,A=e.mod;z(l.pdta,Q&65535),z(l.pdta,A&65535),z(l.xdta,Q>>16),z(l.xdta,A>>16),e.bag++,this.getWriteGenerators(n).forEach(d=>d.write(a,e)),this.modulators.forEach(d=>d.write(t,e))}getWriteGenerators(a){const t=this.generators.filter(l=>l.generatorType!==c.sampleID&&l.generatorType!==c.instrument&&l.generatorType!==c.keyRange&&l.generatorType!==c.velRange);if(!a)throw new Error("No bank provided! ");return this.hasVelRange&&t.unshift(new gt(c.velRange,this.velRange.max<<8|Math.max(this.velRange.min,0),!1)),this.hasKeyRange&&t.unshift(new gt(c.keyRange,this.keyRange.max<<8|Math.max(this.keyRange.min,0),!1)),t}},wa=class extends ae{},BQ=class extends ae{constructor(t,l){super();R(this,"parentPreset");R(this,"_instrument");this.parentPreset=t,this._instrument=l,this._instrument.linkTo(this.parentPreset)}get instrument(){return this._instrument}set instrument(t){this._instrument&&this._instrument.unlinkFrom(this.parentPreset),this._instrument=t,this._instrument.linkTo(this.parentPreset)}getGenCount(){return super.getGenCount()+1}getWriteGenerators(t){const l=super.getWriteGenerators(t);if(!t)throw new Error("Instrument ID cannot be determined without the sound bank itself.");const e=t.instruments.indexOf(this.instrument);if(e<0)throw new Error(`${this.instrument.name} does not exist in ${t.soundBankInfo.name}! Cannot write instrument generator.`);return l.push(new gt(c.instrument,e,!1)),l}},cQ=class extends ae{constructor(t,l){super();R(this,"parentInstrument");R(this,"useCount");R(this,"_sample");this.parentInstrument=t,this._sample=l,l.linkTo(this.parentInstrument),this.useCount=t.useCount}get sample(){return this._sample}set sample(t){this._sample&&this._sample.unlinkFrom(this.parentInstrument),this._sample=t,t.linkTo(this.parentInstrument)}getGenCount(){return super.getGenCount()+1}getWriteGenerators(t){const l=super.getWriteGenerators(t),e=t.samples.indexOf(this.sample);if(e<0)throw new Error(`${this.sample.name} does not exist in ${t.soundBankInfo.name}! Cannot write sampleID generator.`);return l.push(new gt(c.sampleID,e,!1)),l}},fa=22,hQ=new Set([c.velRange,c.keyRange,c.instrument,c.sampleID,c.exclusiveClass,c.endOper,c.sampleModes,c.startloopAddrsOffset,c.startloopAddrsCoarseOffset,c.endloopAddrsOffset,c.endloopAddrsCoarseOffset,c.startAddrsOffset,c.startAddrsCoarseOffset,c.endAddrOffset,c.endAddrsCoarseOffset,c.initialAttenuation,c.fineTune,c.coarseTune,c.keyNumToVolEnvHold,c.keyNumToVolEnvDecay,c.keyNumToModEnvHold,c.keyNumToModEnvDecay]),ne=class{constructor(){R(this,"name","");R(this,"zones",[]);R(this,"globalZone",new wa);R(this,"linkedTo",[])}get useCount(){return this.linkedTo.length}createZone(a){const t=new cQ(this,a);return this.zones.push(t),t}linkTo(a){this.linkedTo.push(a),this.zones.forEach(t=>t.useCount++)}unlinkFrom(a){const t=this.linkedTo.indexOf(a);if(t<0){mt(`Cannot unlink ${a.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(t,1),this.zones.forEach(l=>l.useCount--)}deleteUnusedZones(){this.zones=this.zones.filter(a=>{const t=a.useCount>0;return t||a.sample.unlinkFrom(this),t})}delete(){if(this.useCount>0)throw new Error(`Cannot delete an instrument that is used by: ${this.linkedTo.map(a=>a.name).toString()}.`);this.zones.forEach(a=>a.sample.unlinkFrom(this))}deleteZone(a,t=!1){const l=this.zones[a];return l.useCount-=1,l.useCount<1||t?(l.sample.unlinkFrom(this),this.zones.splice(a,1),!0):!1}globalize(){var e;const a=this.globalZone;for(let n=0;n<58;n++){if(hQ.has(n))continue;n=n;let Q={};const A=((e=L[n])==null?void 0:e.def)||0;Q[A]=0;for(const s of this.zones){const d=s.getGenerator(n,void 0);d!==void 0?Q[d]===void 0?Q[d]=1:Q[d]++:Q[A]++;let i;switch(n){default:continue;case c.decayVolEnv:i=c.keyNumToVolEnvDecay;break;case c.holdVolEnv:i=c.keyNumToVolEnvHold;break;case c.decayModEnv:i=c.keyNumToModEnvDecay;break;case c.holdModEnv:i=c.keyNumToModEnvHold}if(s.getGenerator(i,void 0)!==void 0){Q={};break}}if(Object.keys(Q).length>0){const d=Object.entries(Q).reduce((U,B)=>U[1]<B[1]?B:U,["0",0]),i=parseInt(d[0]);i!==A&&a.setGenerator(n,i,!1),this.zones.forEach(U=>{const B=U.getGenerator(n,void 0);B!==void 0?B===i&&U.setGenerator(n,null):i!==A&&U.setGenerator(n,A)})}}const l=this.zones[0].modulators.map(n=>Zt.copyFrom(n));for(const n of l){let Q=!0;for(const A of this.zones){if(!Q)continue;A.modulators.find(d=>Zt.isIdentical(d,n))||(Q=!1)}if(Q){a.addModulators(Zt.copyFrom(n));for(const A of this.zones){const s=A.modulators.find(d=>Zt.isIdentical(d,n));s&&s.transformAmount===n.transformAmount&&A.modulators.splice(A.modulators.indexOf(s),1)}}}}getSize(){const a=this.zones.reduce((l,e)=>e.modulators.length+l,0)+this.globalZone.modulators.length,t=this.zones.reduce((l,e)=>e.getGenCount()+l,0)+this.globalZone.getGenCount();return{mod:a*Fl,bag:(this.zones.length+1)*ee,gen:t*Yl,hdr:fa}}write(a,t,l,e,n,Q){lt(`%cWriting ${this.name}...`,W.info),rt(e.pdta,this.name.substring(0,20),20),rt(e.xdta,this.name.substring(20),20),z(e.pdta,n.hdr&65535),z(e.xdta,n.hdr>>>16),n.hdr+=this.zones.length+1,this.globalZone.write(a,t,l,n,Q),this.zones.forEach(A=>A.write(a,t,l,n,Q))}},za=38,Tl=class{constructor(a,t=new wa){R(this,"parentSoundBank");R(this,"name","");R(this,"program",0);R(this,"bankMSB",0);R(this,"bankLSB",0);R(this,"isGMGSDrum",!1);R(this,"zones",[]);R(this,"globalZone");R(this,"library",0);R(this,"genre",0);R(this,"morphology",0);this.parentSoundBank=a,this.globalZone=t}get isXGDrums(){return this.parentSoundBank.isXGBank&&ol.isXGDrums(this.bankMSB)}get isAnyDrums(){const a=this.parentSoundBank.isXGBank;return this.isGMGSDrum||a&&ol.isXGDrums(this.bankMSB)&&this.bankMSB!==126}delete(){this.zones.forEach(a=>{var t;return(t=a.instrument)==null?void 0:t.unlinkFrom(this)})}deleteZone(a){var t,l;(l=(t=this.zones[a])==null?void 0:t.instrument)==null||l.unlinkFrom(this),this.zones.splice(a,1)}createZone(a){const t=new BQ(this,a);return this.zones.push(t),t}preload(a,t){for(let l=a;l<t+1;l++)for(let e=0;e<128;e++)this.getSynthesisData(l,e).forEach(n=>{n.sample.getAudioData()})}matches(a){return Wl.matches(this,a)}getSize(){const a=this.zones.reduce((l,e)=>e.modulators.length+l,0)+this.globalZone.modulators.length,t=this.zones.reduce((l,e)=>e.getGenCount()+l,0)+this.globalZone.getGenCount();return{mod:a*Fl,bag:(this.zones.length+1)*ee,gen:t*Yl,hdr:za}}getSynthesisData(a,t){if(this.zones.length<1)return[];function l(B,m){return m>=B.min&&m<=B.max}function e(B,m){B.push(...m.filter(h=>!B.find(o=>o.generatorType===h.generatorType)))}function n(B,m){B.push(...m.filter(h=>!B.find(o=>Zt.isIdentical(h,o))))}const Q=[],A=[...this.globalZone.generators],s=[...this.globalZone.modulators],d=this.globalZone.keyRange,i=this.globalZone.velRange;return this.zones.filter(B=>l(B.hasKeyRange?B.keyRange:d,a)&&l(B.hasVelRange?B.velRange:i,t)).forEach(B=>{const m=B.instrument;if(!m||m.zones.length<1)return;const h=B.generators,o=B.modulators,Z=[...m.globalZone.generators],u=[...m.globalZone.modulators],V=m.globalZone.keyRange,p=m.globalZone.velRange;m.zones.filter(E=>l(E.hasKeyRange?E.keyRange:V,a)&&l(E.hasVelRange?E.velRange:p,t)).forEach(E=>{const k=[...E.generators],H=[...E.modulators];e(h,A),e(k,Z),n(o,s),n(H,u),n(H,this.parentSoundBank.defaultModulators);const D=[...H];for(const y of o){const C=D.findIndex(J=>Zt.isIdentical(y,J));C!==-1?D[C]=D[C].sumTransform(y):D.push(y)}E.sample&&Q.push({instrumentGenerators:k,presetGenerators:h,modulators:D,sample:E.sample})})}),Q}toMIDIString(){return Wl.toMIDIString(this)}toString(){return Wl.toNamedMIDIString(this)}toFlattenedInstrument(){const a=(i,U)=>{i.push(...U.filter(B=>!i.find(m=>m.generatorType===B.generatorType)))},t=(i,U)=>({min:Math.max(i.min,U.min),max:Math.min(i.max,U.max)}),l=(i,U)=>{i.push(...U.filter(B=>!i.find(m=>Zt.isIdentical(B,m))))},e=new ne;e.name=this.name;const n=[],Q=[],A=this.globalZone;n.push(...A.generators),Q.push(...A.modulators);const s=A.keyRange,d=A.velRange;for(const i of this.zones){if(!i.instrument)throw new Error("No instrument in a preset zone.");let U=i.keyRange;i.hasKeyRange||(U=s);let B=i.velRange;i.hasVelRange||(B=d);const m=i.generators.map(k=>new gt(k.generatorType,k.generatorValue));a(m,n);const h=[...i.modulators];l(h,Q);const o=i.instrument,Z=o.zones,u=[],V=[],p=o.globalZone;u.push(...p.generators),V.push(...p.modulators);const v=p.keyRange,E=p.velRange;for(const k of Z){if(!k.sample)throw new Error("No sample in an instrument zone.");let H=k.keyRange;k.hasKeyRange||(H=v);let D=k.velRange;if(k.hasVelRange||(D=E),H=t(H,U),D=t(D,B),H.max<H.min||D.max<D.min)continue;const y=k.generators.map(M=>new gt(M.generatorType,M.generatorValue));a(y,u);const C=[...k.modulators];l(C,V);const J=[...C];for(const M of h){const ct=J.findIndex(X=>Zt.isIdentical(M,X));ct!==-1?J[ct]=J[ct].sumTransform(M):J.push(M)}let K=y.map(M=>new gt(M.generatorType,M.generatorValue));for(const M of m){if(M.generatorType===c.velRange||M.generatorType===c.keyRange||M.generatorType===c.instrument||M.generatorType===c.endOper||M.generatorType===c.sampleModes)continue;const ct=y.findIndex(X=>X.generatorType===M.generatorType);if(ct!==-1){const X=K[ct].generatorValue+M.generatorValue;K[ct]=new gt(M.generatorType,X)}else{const X=L[M.generatorType].def+M.generatorValue;K.push(new gt(M.generatorType,X))}}K=K.filter(M=>M.generatorType!==c.sampleID&&M.generatorType!==c.keyRange&&M.generatorType!==c.velRange&&M.generatorType!==c.endOper&&M.generatorType!==c.instrument&&M.generatorValue!==L[M.generatorType].def);const j=e.createZone(k.sample);j.keyRange=H,j.velRange=D,j.keyRange.min===0&&j.keyRange.max===127&&(j.keyRange.min=-1),j.velRange.min===0&&j.velRange.max===127&&(j.velRange.min=-1),j.addGenerators(...K),j.addModulators(...J)}}return e}write(a,t,l,e,n,Q){lt(`%cWriting ${this.name}...`,W.info),rt(e.pdta,this.name.substring(0,20),20),rt(e.xdta,this.name.substring(20),20),z(e.pdta,this.program);let A=this.bankMSB;this.isGMGSDrum?A=128:this.bankMSB===0&&(A=this.bankLSB),z(e.pdta,A),e.xdta.currentIndex+=4,z(e.pdta,n.hdr&65535),z(e.xdta,n.hdr>>16),At(e.pdta,this.library),At(e.pdta,this.genre),At(e.pdta,this.morphology),e.xdta.currentIndex+=12,n.hdr+=this.zones.length+1,this.globalZone.write(a,t,l,n,Q),this.zones.forEach(s=>s.write(a,t,l,n,Q))}};function Ha(a,t){let l;return t?l=a.find(e=>e.isXGDrums):l=a.find(e=>e.isGMGSDrum),l||(a.find(e=>e.isAnyDrums)??a[0])}function mQ(a,t,l){if(a.length<1)throw new Error("No presets!");t.isGMGSDrum&&ol.isSystemXG(l)&&(t={...t,isGMGSDrum:!1,bankLSB:0,bankMSB:ol.getDrumBank(l)});const{isGMGSDrum:e,bankLSB:n,bankMSB:Q,program:A}=t,s=ol.isSystemXG(l),d=ol.isXGDrums(Q)&&s;let i=a.find(h=>h.matches(t));if(i&&(!d||d&&i.isXGDrums))return i;const U=h=>{lt(`%cPreset %c${Wl.toMIDIString(t)}%c not found. (${l}) Replaced with %c${h.toString()}`,W.warn,W.unrecognized,W.warn,W.value)};if(e){let h=a.find(o=>o.isGMGSDrum&&o.program===A);return h||(h=a.find(o=>o.isAnyDrums&&o.program===A),h)?(U(h),h):(h=Ha(a,!1),U(h),h)}if(d){let h=a.find(o=>o.program===A&&o.isXGDrums);return h||(h=a.find(o=>o.isAnyDrums&&o.program===A),h)?(U(h),h):(h=Ha(a,!0),U(h),h)}const B=a.filter(h=>h.program===A&&!h.isAnyDrums);if(B.length<1)return U(a[0]),a[0];if(s?i=B.find(h=>h.bankLSB===n):i=B.find(h=>h.bankMSB===Q),i)return U(i),i;const m=Math.max(Q,n);return i=B.find(h=>h.bankLSB===m||h.bankMSB===m),i?(U(i),i):(U(B[0]),B[0])}var qa=Math.PI/2,Ae=-500,ja=500,pe=ja-Ae,RQ=new Float32Array(pe+1),ZQ=new Float32Array(pe+1);for(let a=Ae;a<=ja;a++){const t=(a-Ae)/pe,l=a-Ae;RQ[l]=Math.cos(qa*t),ZQ[l]=Math.sin(qa*t)}var Pa=(ft=class{constructor(t){R(this,"resonanceCb",0);R(this,"currentInitialFc",13500);R(this,"a0",0);R(this,"a1",0);R(this,"a2",0);R(this,"a3",0);R(this,"a4",0);R(this,"x1",0);R(this,"x2",0);R(this,"y1",0);R(this,"y2",0);R(this,"lastTargetCutoff",1/0);R(this,"initialized",!1);R(this,"sampleRate");R(this,"maxCutoff");this.sampleRate=t,this.maxCutoff=t*.45}static apply(t,l,e,n){const Q=t.modulatedGenerators[c.initialFilterFc],A=t.filter;A.initialized?A.currentInitialFc+=(Q-A.currentInitialFc)*n:(A.initialized=!0,A.currentInitialFc=Q);const s=A.currentInitialFc+e,d=t.modulatedGenerators[c.initialFilterQ];if(A.currentInitialFc>13499&&s>13499&&d===0){A.currentInitialFc=13500;return}(Math.abs(A.lastTargetCutoff-s)>1||A.resonanceCb!==d)&&(A.lastTargetCutoff=s,A.resonanceCb=d,ft.calculateCoefficients(A,s));for(let i=0;i<l.length;i++){const U=l[i],B=A.a0*U+A.a1*A.x1+A.a2*A.x2-A.a3*A.y1-A.a4*A.y2;A.x2=A.x1,A.x1=U,A.y2=A.y1,A.y1=B,l[i]=B}}static calculateCoefficients(t,l){var v,E,k;l=~~l;const e=t.resonanceCb,n=(E=(v=ft.cachedCoefficients)==null?void 0:v[e])==null?void 0:E[l];if(n!==void 0){t.a0=n.a0,t.a1=n.a1,t.a2=n.a2,t.a3=n.a3,t.a4=n.a4;return}let Q=iQ(l);Q=Math.min(Q,t.maxCutoff);const A=e/10,s=La(-(A-3.01)),d=1/Math.sqrt(La(-A)),i=2*Math.PI*Q/t.sampleRate,U=Math.cos(i),B=Math.sin(i)/(2*s),m=(1-U)*d,h=m/2,o=h,Z=1+B,u=-2*U,V=1-B,p={a0:h/Z,a1:m/Z,a2:o/Z,a3:u/Z,a4:V/Z};t.a0=p.a0,t.a1=p.a1,t.a2=p.a2,t.a3=p.a3,t.a4=p.a4,(k=ft.cachedCoefficients)[e]??(k[e]=[]),ft.cachedCoefficients[e][l]=p}},R(ft,"cachedCoefficients",[]),ft),ye=new Pa(44100);ye.resonanceCb=0;for(let a=1500;a<13500;a++)ye.currentInitialFc=a,Pa.calculateCoefficients(ye,a);var Oa=new Float32Array(1e3);for(let a=0;a<Oa.length;a++)Oa[a]=xa(0,Bt.convex,a/1e3);var Ne=class He{constructor(t,l,e,n,Q,A,s,d,i,U,B,m,h){R(this,"patch");R(this,"lockPreset");R(this,"lockedSystem");R(this,"midiControllers");R(this,"lockedControllers");R(this,"customControllers");R(this,"lockVibrato");R(this,"channelVibrato");R(this,"channelTransposeKeyShift");R(this,"channelOctaveTuning");R(this,"isMuted");R(this,"drumChannel");R(this,"channelNumber");this.patch=t,this.lockPreset=l,this.lockedSystem=e,this.midiControllers=n,this.lockedControllers=Q,this.customControllers=A,this.lockVibrato=s,this.channelVibrato=d,this.channelTransposeKeyShift=i,this.channelOctaveTuning=U,this.isMuted=B,this.drumChannel=m,this.channelNumber=h}static copyFrom(t){return new He({...t.patch},t.lockPreset,t.lockedSystem,t.midiControllers.slice(),[...t.lockedControllers],t.customControllers.slice(),t.lockVibrato,{...t.channelVibrato},t.channelTransposeKeyShift,t.channelOctaveTuning,t.isMuted,t.drumChannel,t.channelNumber)}static create(t,l){var n;const e=t.midiChannels[l];return new He({...e.patch,name:((n=e==null?void 0:e.preset)==null?void 0:n.name)??"undefined"},e.lockPreset,e.lockedSystem,e.midiControllers.slice(),[...e.lockedControllers],e.customControllers.slice(),e.lockGSNRPNParams,{...e.channelVibrato},e.channelTransposeKeyShift,e.channelOctaveTuning.slice(),e.isMuted,e.drumChannel,l)}apply(t){const l=t.midiChannels[this.channelNumber];l.muteChannel(this.isMuted),l.setDrums(this.drumChannel),l.midiControllers.set(this.midiControllers),l.lockedControllers=this.lockedControllers,l.customControllers.set(this.customControllers),l.updateChannelTuning(),l.channelVibrato=this.channelVibrato,l.lockGSNRPNParams=this.lockVibrato,l.channelTransposeKeyShift=this.channelTransposeKeyShift,l.channelOctaveTuning=this.channelOctaveTuning,l.setPresetLock(!1),l.setPatch(this.patch),l.setPresetLock(this.lockPreset),l.lockedSystem=this.lockedSystem}},VQ=class{constructor(){R(this,"velocity",-1);R(this,"patch",{bankLSB:-1,bankMSB:-1,isGMGSDrum:!1,program:-1});R(this,"gain",1)}},_a=class qe{constructor(t,l,e){R(this,"channelSnapshots");R(this,"keyMappings");R(this,"masterParameters");this.channelSnapshots=t,this.masterParameters=l,this.keyMappings=e}static create(t){const l=t.midiChannels.map((e,n)=>Ne.create(t,n));return new qe(l,t.getAllMasterParameters(),t.keyModifierManager.getMappings())}static copyFrom(t){return new qe(t.channelSnapshots.map(l=>Ne.copyFrom(l)),{...t.masterParameters},[...t.keyMappings])}apply(t){for(Object.entries(this.masterParameters).forEach(([e,n])=>{t.setMasterParameter(e,n)}),t.keyModifierManager.setMappings(this.keyMappings);t.midiChannels.length<this.channelSnapshots.length;)t.createMIDIChannel();this.channelSnapshots.forEach(e=>{e.apply(t)})}},rQ={masterGain:zA,masterPan:0,voiceCap:wA,interpolationType:qA.hermite,midiSystem:fA,monophonicRetriggerMode:!1,reverbGain:1,chorusGain:1,blackMIDIMode:!1,transposition:0,deviceID:cl},ke=20;async function EQ(a,t,l,e,n,Q,A){let s=0,d=0;const i=[];for(const m of a.samples){e&&Q&&await m.compressSample(Q),n&&m.setAudioData(m.getAudioData(),m.sampleRate);const h=m.getRawData(!0);s++,await(A==null?void 0:A(m.name,s,a.samples.length)),lt(`%cEncoded sample %c${s}. ${m.name}%c of %c${a.samples.length}%c. Compressed: %c${m.isCompressed}%c.`,W.info,W.recognized,W.info,W.recognized,W.info,m.isCompressed?W.recognized:W.unrecognized,W.info),d+=h.length+(m.isCompressed?0:92),i.push(h)}d%2!==0&&d++;const U=new st(d+ke);rt(U,"LIST"),$l(U,d+ke-8,4),rt(U,"sdta"),rt(U,"smpl"),$l(U,d,4);let B=0;return a.samples.forEach((m,h)=>{const o=i[h];U.set(o,B+ke);let Z,u;m.isCompressed?(Z=B,u=Z+o.length):(Z=B/2,u=Z+o.length/2,B+=92),B+=o.length,t.push(Z),l.push(u)}),U}var bQ=48e3,Xe=class{constructor(a,t,l,e,n,Q,A){R(this,"name");R(this,"sampleRate");R(this,"originalKey");R(this,"pitchCorrection");R(this,"linkedSample");R(this,"sampleType");R(this,"loopStart");R(this,"loopEnd");R(this,"linkedTo",[]);R(this,"dataOverridden",!0);R(this,"compressedData");R(this,"audioData");this.name=a,this.sampleRate=t,this.originalKey=l,this.pitchCorrection=e,this.loopStart=Q,this.loopEnd=A,this.sampleType=n}get isCompressed(){return this.compressedData!==void 0}get isLinked(){return this.sampleType===bt.rightSample||this.sampleType===bt.leftSample||this.sampleType===bt.linkedSample}get useCount(){return this.linkedTo.length}getRawData(a){return this.compressedData&&a&&!this.dataOverridden?this.compressedData:this.encodeS16LE()}resampleData(a){let t=this.getAudioData();const l=a/this.sampleRate,e=new Float32Array(Math.floor(t.length*l));for(let n=0;n<e.length;n++)e[n]=t[Math.floor(n*(1/l))];t=e,this.sampleRate=a,this.loopStart=Math.floor(this.loopStart*l),this.loopEnd=Math.floor(this.loopEnd*l),this.audioData=t}async compressSample(a){if(!this.isCompressed)try{let t=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(bQ),t=this.getAudioData());const l=await a(t,this.sampleRate);this.setCompressedData(l)}catch(t){mt(`Failed to compress ${this.name}. Leaving as uncompressed!`,t),this.compressedData=void 0}}setSampleType(a){if(this.sampleType=a,this.isLinked||(this.linkedSample&&(this.linkedSample.linkedSample=void 0,this.linkedSample.sampleType=a),this.linkedSample=void 0),(a&32768)>0)throw new Error("ROM samples are not supported.")}unlinkSample(){this.setSampleType(bt.monoSample)}setLinkedSample(a,t){if(a.linkedSample)throw new Error(`${a.name} is linked tp ${a.linkedSample.name}. Unlink it first.`);if(this.linkedSample=a,a.linkedSample=this,t===bt.leftSample)this.setSampleType(bt.leftSample),a.setSampleType(bt.rightSample);else if(t===bt.rightSample)this.setSampleType(bt.rightSample),a.setSampleType(bt.leftSample);else if(t===bt.linkedSample)this.setSampleType(bt.linkedSample),a.setSampleType(bt.linkedSample);else throw new Error("Invalid sample type: "+t)}linkTo(a){this.linkedTo.push(a)}unlinkFrom(a){const t=this.linkedTo.indexOf(a);if(t<0){mt(`Cannot unlink ${a.name} from ${this.name}: not linked.`);return}this.linkedTo.splice(t,1)}getAudioData(){if(this.audioData)return this.audioData;if(this.isCompressed)return this.audioData=this.decodeVorbis(),this.audioData;throw new Error("Sample data is undefined for a BasicSample instance.")}setAudioData(a,t){this.audioData=a,this.sampleRate=t,this.dataOverridden=!0,this.compressedData=void 0}setCompressedData(a){this.audioData=void 0,this.compressedData=a,this.dataOverridden=!1}encodeS16LE(){const a=this.getAudioData(),t=new Int16Array(a.length),l=a.length;for(let e=0;e<l;e++){let n=a[e]*32768;n>32767?n=32767:n<-32768&&(n=-32768),t[e]=n}return new st(t.buffer)}decodeVorbis(){if(this.audioData)return this.audioData;if(!this.compressedData)throw new Error("Compressed data is missing.");try{const t=ka.decode(this.compressedData).data[0];if(t===void 0)return mt(`Error decoding sample ${this.name}: Vorbis decode returned undefined.`),new Float32Array(0);for(let l=0;l<t.length;l++)t[l]=Math.max(-1,Math.min(t[l],.999969482421875));return t}catch(a){return mt(`Error decoding sample ${this.name}: ${a}`),new Float32Array(this.loopEnd+1)}}},uQ=class extends Xe{constructor(){super("",44100,60,0,bt.monoSample,0,0)}},IQ=16;function WQ(a,t,l){const n=46*(a.samples.length+1),Q=new st(n),A=new st(n);a.samples.forEach((i,U)=>{rt(Q,i.name.substring(0,20),20),rt(A,i.name.substring(20),20);const B=t[U];At(Q,B),A.currentIndex+=4;const m=l[U];At(Q,m),A.currentIndex+=4;let h=i.loopStart+B,o=i.loopEnd+B;i.isCompressed&&(h-=B,o-=B),At(Q,h),At(Q,o),At(Q,i.sampleRate),Q[Q.currentIndex++]=i.originalKey,Q[Q.currentIndex++]=i.pitchCorrection,A.currentIndex+=14;const Z=i.linkedSample?a.samples.indexOf(i.linkedSample):0;z(Q,Math.max(0,Z)&65535),z(A,Math.max(0,Z)>>16);let u=i.sampleType;i.isCompressed&&(u|=IQ),z(Q,u),A.currentIndex+=2}),rt(Q,"EOS",46),rt(A,"EOS",46);const s=ot("shdr",Q),d=ot("shdr",A);return{pdta:s,xdta:d}}function $a(a,t=!1){const l=t?a.presets:a.instruments,e=t?"pgen":"igen",n=t?"pmod":"imod",Q=t?"pbag":"ibag",A=t?"phdr":"inst",s=t?za:fa,d=l.map(p=>(p instanceof Tl,p.getSize())),i=d.reduce((p,v)=>p+v.gen,0)+Yl,U=new st(i),B=d.reduce((p,v)=>p+v.mod,0)+Fl,m=new st(B),h=d.reduce((p,v)=>p+v.bag,0)+ee,o={pdta:new st(h),xdta:new st(h)},Z=d.reduce((p,v)=>v.hdr+p,0)+s,u={pdta:new st(Z),xdta:new st(Z)},V={gen:0,bag:0,mod:0,hdr:0};return l.forEach(p=>{p instanceof Tl,p.write(U,m,o,u,V,a)}),t?(rt(u.pdta,"EOP",20),u.pdta.currentIndex+=4,z(u.pdta,V.hdr&65535),u.pdta.currentIndex+=12,rt(u.xdta,"",20),u.xdta.currentIndex+=4,z(u.xdta,V.hdr>>16),u.xdta.currentIndex+=12):(rt(u.pdta,"EOI",20),rt(u.xdta,"",20),z(u.pdta,V.hdr&65535),z(u.xdta,V.hdr>>16)),z(o.pdta,V.gen&65535),z(o.xdta,V.gen>>16),z(o.pdta,V.mod&65535),z(o.xdta,V.mod>>16),{writeXdta:Math.max(i/Yl,B/Fl,h/ee,Z/s)>65535,gen:{pdta:ot(e,U),xdta:ot(n,new st(Yl))},mod:{pdta:ot(n,m),xdta:ot(n,new st(Fl))},bag:{pdta:ot(Q,o.pdta),xdta:ot(Q,o.xdta)},hdr:{pdta:ot(A,u.pdta),xdta:ot(A,u.xdta)}}}var Ye={compress:!1,compressionFunction:void 0,progressFunction:void 0,writeDefaultModulators:!0,writeExtendedLimits:!0,decompress:!1};async function SQ(a,t=Ye){var v;const l=MA(t,Ye);if(l!=null&&l.compress){if(typeof(l==null?void 0:l.compressionFunction)!="function")throw new Error("No compression function supplied but compression enabled.");if(l!=null&&l.decompress)throw new Error("Decompressed and compressed at the same time.")}vt("%cSaving soundbank...",W.info),lt(`%cCompression: %c${(l==null?void 0:l.compress)||"false"}%c`,W.info,W.recognized,W.info,W.recognized),dl("%cWriting INFO...",W.info);const e=[];a.soundBankInfo.software="SpessaSynth",(l!=null&&l.compress||a.samples.some(E=>E.isCompressed))&&(a.soundBankInfo.version.major=3,a.soundBankInfo.version.minor=0),l!=null&&l.decompress&&(a.soundBankInfo.version.major=2,a.soundBankInfo.version.minor=4);const n=(E,k)=>{e.push(ot(E,ul(k,!0,!0)))},Q=new st(4);if(z(Q,a.soundBankInfo.version.major),z(Q,a.soundBankInfo.version.minor),e.push(ot("ifil",Q)),a.soundBankInfo.romVersion){const E=new st(4);z(E,a.soundBankInfo.romVersion.major),z(E,a.soundBankInfo.romVersion.minor),e.push(ot("iver",E))}const A=(((v=a.soundBankInfo)==null?void 0:v.comment)??"")+(a.soundBankInfo.subject?`