diff --git a/DESCRIPTION b/DESCRIPTION index b9a2f18e..be30d177 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Type: Package Package: rdeck Title: Deck.gl Widget -Version: 0.3.0.92200 +Version: 0.4.0 Authors@R: person(given = "Anthony", family = "North", role = c("aut", "cre"), email = "anthony.jl.north@gmail.com") Description: Deck.gl widget for R. diff --git a/inst/htmlwidgets/rdeck.js b/inst/htmlwidgets/rdeck.js index 4b7a79b2..b64966bc 100644 --- a/inst/htmlwidgets/rdeck.js +++ b/inst/htmlwidgets/rdeck.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.rdeck=t():e.rdeck=t()}(self,(()=>(()=>{var e,t,n,r={8981:(e,t,n)=>{"use strict";n.r(t),n.d(t,{VERSION:()=>xt,Widget:()=>bt,binding:()=>vt,getWidgetById:()=>jt,getWidgets:()=>wt});var r={};n.r(r),n.d(r,{AGGREGATION_OPERATION:()=>c.KM,ArcLayer:()=>l.zv,BitmapLayer:()=>l.hz,CPUGridLayer:()=>c.ab,ColumnLayer:()=>l.eJ,ContourLayer:()=>c.YY,GPUGridLayer:()=>c.ML,GeoJsonLayer:()=>l.UW,GreatCircleLayer:()=>u.GJ,GridCellLayer:()=>l.cJ,GridLayer:()=>c.mU,H3ClusterLayer:()=>u.cH,H3HexagonLayer:()=>u.bW,HeatmapLayer:()=>c.zP,HexagonLayer:()=>c.dX,IconLayer:()=>l.eE,LineLayer:()=>l.Ie,MVTLayer:()=>u.i3,PathLayer:()=>l.nr,PointCloudLayer:()=>l.U5,PolygonLayer:()=>l.dW,QuadkeyLayer:()=>u._k,S2Layer:()=>u.jJ,ScatterplotLayer:()=>l.pU,ScenegraphLayer:()=>d.S,ScreenGridLayer:()=>c.p3,SimpleMeshLayer:()=>d.L,SolidPolygonLayer:()=>l.PJ,TerrainLayer:()=>u.tr,TextLayer:()=>l.AB,Tile3DLayer:()=>u.cY,TileLayer:()=>u.Im,TripsLayer:()=>u.Fw,_AggregationLayer:()=>c.Di,_BinSorter:()=>c.l0,_CPUAggregator:()=>c.oA,_GPUGridAggregator:()=>c.Wc,_MultiIconLayer:()=>l.vb,_TextBackgroundLayer:()=>l._k,_getURLFromTemplate:()=>u.po});n(8559);var i=n(5893),o=n(3935),s=n(7294),a=n(6935),l=n(7786),c=n(9080),u=n(803),d=n(1956),p=n(5395);const h=[0,0,0,255];function f([e,t,n,r=255]){return`rgba(${e}, ${t}, ${n}, ${r/255})`}function y(e,t){return Array.isArray(e)?t||4!==e.length?((t=null!=t?t:[])[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=3===e.length?e[3]:255,t):e:"string"==typeof e?(function(e,t){if(7===e.length){const n=parseInt(e.substring(1),16);t[0]=Math.floor(n/65536),t[1]=Math.floor(n/256%256),t[2]=n%256,t[3]=255}else if(9===e.length){const n=parseInt(e.substring(1),16);t[0]=Math.floor(n/16777216),t[1]=Math.floor(n/65536%256),t[2]=Math.floor(n/256%256),t[3]=n%256}}(e,t=null!=t?t:[]),t):h}var m=n(4634),g=n(4177),v=n(458),b=n(5801),j=n(3613),w=n(602),x=n(8973),L=n(2625);function k(e){return null!==e&&"object"==typeof e&&"accessor"===e.type}function S(e){return k(e)&&"scale"in e}var C=n(9757);const N=Object.freeze({additive:{[C.Z.BLEND]:!0,blendFunc:[C.Z.SRC_ALPHA,C.Z.DST_ALPHA],blendEquation:C.Z.FUNC_ADD},subtractive:{[C.Z.BLEND]:!0,blendFunc:[C.Z.ONE,C.Z.ONE_MINUS_DST_COLOR,C.Z.SRC_ALPHA,C.Z.DST_ALPHA],blendEquation:[C.Z.FUNC_SUBTRACT,C.Z.FUNC_ADD]},normal:{[C.Z.BLEND]:!0,blendFunc:[C.Z.SRC_ALPHA,C.Z.ONE_MINUS_SRC_ALPHA,C.Z.ONE,C.Z.ONE_MINUS_SRC_ALPHA],blendEquation:[C.Z.FUNC_ADD,C.Z.FUNC_ADD]}});function _(e="normal"){var t;return null!==(t=N[e])&&void 0!==t?t:N.normal}function T(e){return null!==e&&"object"==typeof e&&"frame"in e}function A(e,{name:t,type:n}){var r,i,o,s;const a=e.frame,l=Object.fromEntries(Object.entries(a).map((([e])=>[e,[]]))),c=Object.keys(e.frame).filter((e=>e!==t)),u=a[t],d=function(e){switch(e){case"MULTIPOINT":return O;case"MULTILINESTRING":return Z;case"MULTIPOLYGON":return E;default:throw TypeError(`${e} not supported`)}}(n),p=e=>{for(const t of c)l[t].push(a[t][e])},h=[];for(let n=0;ne instanceof t))}(this))return;const e=this,t=e.getAttributeManager();t&&t.addInstanced({pickingColors:{type:C.Z.UNSIGNED_BYTE,size:3,accessor:(t,{index:n,data:r,target:i})=>{var o,s,a;if(T(r)&&Array.isArray(r.indices))return e.encodePickingColor(r.indices.indexOf(r.indices[n]),i);const l=null===(s=null===(o=null==t?void 0:t.__source)||void 0===o?void 0:o.parent)||void 0===s?void 0:s.props.data;return T(l)&&Array.isArray(l.indices)?e.encodePickingColor(l.indices.indexOf(l.indices[t.__source.index]),i):e.encodePickingColor(null!==(a=null==t?void 0:t.__source.index)&&void 0!==a?a:n,i)},shaderAttributes:{pickingColors:{divisor:0},instancePickingColors:{divisor:1}}}})}}const F=[P.Z,H.Z,I.Z,D.Z,R.Z,G.Z,U.Z];function V(e,...t){if(null==e)return null;const n=t.map((t=>[t,e[t]]));return Object.fromEntries(n)}function W(e){return e.clientHeight>0&&e.clientHeight>0?e:e.parentElement?W(e.parentElement):null}function q(e){const t=W(e);if(e===t||null==t)return[e.clientWidth,e.clientHeight];const{width:n,height:r}=getComputedStyle(e),i=document.createElement("div");Object.assign(i.style,{width:n,height:r,display:"hidden"}),t.appendChild(i);const o=[i.clientWidth,i.clientHeight];return t.removeChild(i),o}function Y(e,t){const n=new Map;for(const r of e){const e=t(r);n.has(e)?n.get(e).push(r):n.set(e,[r])}return n}function B(...e){return e.filter((e=>null!=e)).join(" ")}function $(e,t=0){let n;return(...r)=>{window.clearTimeout(n),n=window.setTimeout((()=>e(...r)),t)}}class J{constructor(){this._val=new Map,this._ref=new WeakMap}getStore(e){return"object"==typeof(t=e)&&null!==t||"function"==typeof t?this._ref:this._val;var t}has(e){return this.getStore(e).has(e)}get(e){return this.getStore(e).get(e)}set(e,t){return this.getStore(e).set(e,t),this}}function K(e){const t=new J;return(...n)=>{const r=n[0],i=n.slice(0,-1).reduceRight(((e,t)=>{if(e.has(t))return e.get(t);const n=new J;return e.set(t,n),n}),t);if(i.has(r))return i.get(r);const o=e(...n);return i.set(r,o),o}}const X=K((function(e){const t=function(e){return Object.entries(e.geometry).filter((([,e])=>/MULTI/.test(e))).map((([e,t])=>({name:e,type:t})))}(e);return 0===t.length?e:t.reduce(A,e)})),Q=K(y),ee=K((function(e,t){const n=function({col:e,dataType:t},n){if("highlightColor"===n)switch(t){case"table":return function(e){return({index:t,layer:n})=>y(n.props.data.frame[e][t])}(e);case"object":return function(e){return({object:t})=>y(t[e])}(e);case"geojson":return function(e){return({object:t})=>y(t.properties[e])}(e);default:throw TypeError(`${t} not supported`)}if(n.endsWith("Color"))switch(t){case"table":return function(e){return(t,{index:n,data:r,target:i})=>y(r.frame[e][n],i)}(e);case"object":return function(e){return(t,{target:n})=>y(t[e],n)}(e);case"geojson":return function(e){return(t,{target:n})=>y(t.properties[e],n)}(e);default:throw TypeError(`${t} not supported`)}switch(t){case"table":return function(e){return(t,{index:n,data:r})=>r.frame[e][n]}(e);case"object":return function(e){return t=>t[e]}(e);case"geojson":return function(e){return t=>t.properties[e]}(e);default:throw TypeError(`${t} not supported`)}}(e,t);return{...e,getData:n}})),te=K((function(e,t){"palette"in e&&(e.range=e.palette.map((e=>y(e))),e.unknown=y(e.unknown));const n=function(e){switch(e.scale){case"linear":return(0,m.Z)().domain(e.domain).range(e.range).unknown(e.unknown).clamp(!0);case"power":return(0,g.ZP)().exponent(e.exponent).domain(e.domain).range(e.range).unknown(e.unknown).clamp(!0);case"log":return(0,v.Z)().base(e.base).domain(e.domain).range(e.range).unknown(e.unknown).clamp(!0);case"symlog":return(0,b.Z)().domain(e.domain).range(e.range).unknown(e.unknown).clamp(!0);case"identity":return(0,j.Z)().unknown(e.unknown);case"threshold":case"quantile":return(0,w.Z)().domain(e.domain).range(e.range).unknown(e.unknown);case"category":return(0,x.Z)().domain(e.domain).range(e.range).unknown(e.unknown);case"quantize":return(0,L.Z)().domain(e.domain).range(e.range).unknown(e.unknown);default:throw TypeError(`scale ${e.scale} not supported`)}}(e),r="highlightColor"===t?function({col:e,dataType:t},n){switch(t){case"table":return function(e,t){return({index:n,layer:r})=>t(r.props.data.frame[e][n])}(e,n);case"object":return function(e,t){return({object:n})=>t(n[e])}(e,n);case"geojson":return function(e,t){return({object:n})=>t(n.properties[e])}(e,n);default:throw TypeError(`${t} not supported`)}}(e,n):function({col:e,dataType:t},n){switch(t){case"table":return function(e,t){return(n,{index:r,data:i})=>t(i.frame[e][r])}(e,n);case"object":return function(e,t){return n=>t(n[e])}(e,n);case"geojson":return function(e,t){return n=>t(n.properties[e])}(e,n);default:throw TypeError(`${t} not supported`)}}(e,n);return{...e,name:t,getData:r,scaleData:n}}));class ne{constructor({type:e,...t}){var n,r;const i=Object.entries(t),o=function(e){const t=e.filter(re).map((([e,t])=>[e,Q(t)])),n=e.find((([e])=>"colorRange"===e));n&&t.push([n[0],n[1].map((e=>Q(e)))]);return t}(i),s=function(e){return e.filter((([,e])=>k(e))).map((([e,t])=>[e,S(t)?te(t,e):ee(t,e)]))}(i);this.type=e;const a=Object.fromEntries([...i,...o,...s.map((([e,t])=>[e,t.getData])),...oe(i),["visible",null===(n=t.visible)||void 0===n||n],["updateTriggers",ie(s)],["parameters",(l=t.parameters,c=t.blendingMode,{...l,..._(c)})]]);var l,c;T(a.data)&&(a.data=X(a.data),a.extensions=[new z,...null!==(r=a.extensions)&&void 0!==r?r:[]]),"TileLayer"===e&&(a.renderSubLayers=e=>{const{bbox:{west:t,south:n,east:r,north:i},x:o,y:s,z:a}=e.tile;return new p.Z({...e,data:[{z:a,x:o,y:s}],image:e.data,bounds:[t,n,r,i]})}),this.props=a,this.scales=s.filter((([,e])=>S(e))).map((([,e])=>e)),"TextLayer"===e&&"fonts"in document&&document.fonts.load(`16px ${t.fontFamily}`)}static create(e){return new ne(e)}renderLayer(e){if("TripsLayer"===this.type&&void 0!==e){const t=this.props,{loopLength:n,animationSpeed:r}=t,i=n/r,o=e/1e3%i/i;t.currentTime=o*n}return new r[this.type]({...this.props})}renderLegend(){const e=this.scales.filter((e=>e.legend));return{id:this.props.id,name:this.props.name,scales:e}}renderSelector(){var e;return{id:this.props.id,groupName:this.props.groupName,name:this.props.name,visible:null===(e=this.props.visible)||void 0===e||e}}}function re([e,t]){return e.endsWith("Color")&&(Array.isArray(t)||"string"==typeof t)}function ie(e){const t=e=>{const{getData:t,scaleData:n,palette:r,...i}=e;return i},n=e.map((([e,n])=>[e,t(n)]));return Object.fromEntries(n)}function oe(e){return e.filter((([e])=>"getColorWeight"===e||"getElevationWeight"===e)).filter((([,e])=>null!==e&&"function"!=typeof e&&!k(e))).map((([e,t])=>[e,()=>t]))}n(6158),n(2687);var se=n(8202),ae=n(2802),le=n(17),ce=n(3295);const ue=".feature_id";function de(e,t=null){if(!e.picked)return null;null==t&&(t=function({object:e,layer:t}){return!T(t.props.data)||t instanceof ce.Z?function(e){return"Feature"===(null==e?void 0:e.type)&&"geometry"in e&&"type"in e.geometry}(e)?"geojson":"object":"table"}(e));const n=function(e){switch(e){case"table":return(e,{index:t,data:n})=>{const r=Object.keys(n.geometry),i={};for(const[e,o]of Object.entries(n.frame))r.includes(e)||(i[e]=o[t]);return i};case"object":return e=>({...e});case"geojson":return e=>({[ue]:null==e?void 0:e.id,...null==e?void 0:e.properties});default:throw TypeError(`${e} not supported`)}}(t),{object:r,index:i}=e;return n(r,{index:i,data:e.layer.props.data})}const pe="cyWLt4_G7nk5vT9hPr0o",he="Z9hHHet2RXmL0iMel3Zt",fe="jp658yEHLlesSRvwBwDl",ye="t9I8kJyjeEJEOArvMD7j",me="vovHpTur01BROrMLmEFz";function ge({info:e}){if(!e.picked||null==e.layer.props.tooltip)return null;const{x:t,y:n}=e,{name:r,tooltip:o}=e.layer.props,s=de(e,o.dataType);delete s[ue];const a=!0===o.cols?Object.keys(s):o.cols;return(0,i.jsxs)("div",{className:pe,style:{transform:`translate(${t}px, ${n}px)`},children:[(0,i.jsx)("div",{className:he,children:r}),(0,i.jsx)("table",{className:fe,children:(0,i.jsx)("tbody",{children:a.map((e=>{var t;return(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{className:ye,children:e}),(0,i.jsx)("td",{className:me,children:String(null!==(t=s[e])&&void 0!==t?t:null)})]},e)}))})})]})}function ve({props:e,layers:t}){const n=(0,s.useRef)(null),[r,o]=be(),{mapboxAccessToken:a,mapStyle:l,controller:c,parameters:u,blendingMode:d,...p}=e,h={...u,..._(d)},[f,y]=(0,s.useState)(0),m=t.some((e=>"TripsLayer"===e.type));je(m,(e=>y(e)));const g=t.map((e=>null!=e.type?e.renderLayer(f):null));return(0,i.jsxs)(s.Fragment,{children:[(0,i.jsx)(ae.Z,{ref:n,...p,parameters:h,layers:g,onHover:o,children:(0,i.jsx)(se.Z,{id:"map",controller:c,repeat:!0,children:l&&(0,i.jsx)(le.D5,{reuseMaps:!0,mapboxAccessToken:a,mapStyle:l})})}),r&&(0,i.jsx)(ge,{info:r})]})}const be=()=>{const[e,t]=(0,s.useState)(null);return[e,(0,s.useCallback)((e=>{if(!e.picked||!e.layer.props.tooltip||e.layer instanceof ce.Z)return t(null);t(e)}),[])]},je=(e,t)=>{const n=(0,s.useRef)(0),r=(0,s.useRef)(Date.now()),i=()=>{t(Date.now()-r.current),n.current=window.requestAnimationFrame(i)};(0,s.useEffect)((()=>{if(e)return n.current=window.requestAnimationFrame(i),()=>window.cancelAnimationFrame(n.current)}),[e])},we="dePkhbnJCOHYUAj_NSXj",xe="UswwkaMDoib4ytc60Zn9",Le="ci5EIFzH7r10AG6BsqiG",ke="tc2iXBk_fR6q5GWWpo9m",Se="RYWzL7KGDYHIY2NHbF5X",Ce="rn68pqskorQGGcY_sqUg",Ne="nYpzg_48IyHFet4DMSbT",_e="hrbqGf9YJYCqN3_tMI1L",Te="Nq2XC5CmWGG2PSgH92Tr",Ae="njcitPfCPlr7ohpeig92",Oe=16;function Ze({layers:e}){return 0===e.length?null:(0,i.jsx)("div",{className:we,children:e.map((e=>(0,i.jsx)(Ee,{...e},e.id)))})}function Ee({name:e,scales:t}){return 0===t.length?null:(0,i.jsxs)("div",{className:xe,children:[(0,i.jsx)("div",{className:Le,title:e,children:e}),t.map((e=>(0,i.jsx)(Me,{...e},e.name)))]})}function Me(e){var t;const n=e.name.replace(/^get/,"").replace(/([A-Z])/g," $1").toLowerCase();const r="palette"in e;const o=function(e){return"linear"===e.scale||"power"===e.scale||"log"===e.scale||"symlog"===e.scale}(e),s=function(e){return"threshold"===e.scale||"quantile"===e.scale||"quantize"===e.scale}(e);return(0,i.jsxs)("div",{className:ke,children:[(0,i.jsx)("div",{className:Se,children:n}),(0,i.jsx)("span",{className:Ce,children:"by "}),(0,i.jsx)("span",{className:Ne,title:e.col,children:null!==(t=e.scaleBy)&&void 0!==t?t:e.col}),r&&o&&(0,i.jsx)(Pe,{...e}),r&&s&&(0,i.jsx)(He,{...e}),r&&"category"===e.scale&&(0,i.jsx)(Ie,{...e})]})}const Pe=({ticks:e,scaleData:t})=>{const n=e.map(((e,t)=>t)).slice(1,-1),r=Oe*(e.length-1),o=r+11+1;return(0,i.jsxs)("svg",{className:_e,height:o,shapeRendering:"crispEdges",children:[(0,i.jsxs)("svg",{y:5,children:[(0,i.jsx)("image",{width:20,height:r,href:Re(t),preserveAspectRatio:"none"}),n.map((e=>(0,i.jsx)("line",{className:Ae,x2:20,y1:Oe*e,y2:Oe*e},e)))]}),(0,i.jsx)(De,{ticks:e,y:-2})]})},He=({ticks:e,range:t})=>{const n=t.map(f),r=Oe*(e.length-1)+11+1;return(0,i.jsxs)("svg",{className:_e,height:r,shapeRendering:"crispEdges",children:[(0,i.jsx)("svg",{y:5,children:n.map(((e,t)=>(0,i.jsx)("rect",{width:20,height:Oe,y:t*Oe,fill:e},t)))}),(0,i.jsx)(De,{ticks:e,y:-2})]})};function Ie({ticks:e,range:t,unknownTick:n,unknown:r}){const o=n?[...t,r]:t,s=n?[...e,n]:e,a=o.map(f),l=Oe*s.length;return(0,i.jsxs)("svg",{className:_e,height:l,children:[(0,i.jsx)("svg",{children:a.map(((e,t)=>(0,i.jsx)("rect",{width:20,height:14,y:1+t*Oe,fill:e},t)))}),(0,i.jsx)(De,{ticks:s})]})}function De({ticks:e,x:t=28,y:n=0}){return(0,i.jsx)("svg",{x:t,y:n,children:e.map(((e,t)=>(0,i.jsx)("text",{className:Te,y:Oe*t,dy:11,children:String(e)},t)))})}function Re(e,t=200){const n=e.range().length,r=[...Array(n).keys()].map((e=>e/(n-1))),i=e.copy().range(r).invert,o=document.createElement("canvas"),s=o.getContext("2d");o.width=1,o.height=t;for(let n=0;n{var t;return null!==(t=e.groupName)&&void 0!==t?t:`${e.name}-${ot}`})),r=(n,r,i)=>{if(i){const i=!e.filter((e=>!n.includes(e))).some((e=>e.visible));return t(e.map((e=>({...e,visible:n.includes(e)?r:i}))))}t(n.map((e=>({...e,visible:r}))))},[o,a]=(0,s.useState)(!1),l=()=>a((e=>!e));return o?(0,i.jsxs)("div",{className:$e,children:[(0,i.jsx)("div",{className:Je,children:(0,i.jsxs)(st,{className:Ke,onClick:l,tooltip:"Close",children:[(0,i.jsx)(Ve.Z,{className:it,fontSize:"small"}),(0,i.jsx)("span",{className:Xe,children:"Layers"})]})}),(0,i.jsx)("div",{className:Qe,children:Array.from(n.entries(),(([e,t,[{groupName:n}]=t])=>(0,i.jsx)(lt,{group:n,layers:t,onChange:r},e)))})]}):(0,i.jsx)(st,{className:Be,tooltip:"Layer selector",onClick:l,children:(0,i.jsx)(Ve.Z,{className:it,fontSize:"small"})})}function lt({group:e,layers:t,onChange:n}){const r=Array.from(Y(t,(e=>e.name)),(([e,t])=>(0,i.jsx)(ct,{name:e,layers:t,onChange:n},e)));return e?(0,i.jsxs)(s.Fragment,{children:[(0,i.jsx)(ct,{name:e,layers:t,onChange:n}),(0,i.jsx)("div",{className:et,children:r})]}):(0,i.jsx)(s.Fragment,{children:r})}function ct({name:e,layers:t,onChange:n}){const r=function(e){let t=e[0].visible;for(const n of e)if(n.visible!==t)return null;return t}(t),o=null===r,a=(0,s.useRef)(null);(0,s.useEffect)((()=>{a.current&&(a.current.indeterminate=o)}),[o]);const l=(0,s.useRef)((()=>!1)),c=r?We.Z:o?qe.Z:Ye.Z,u=B(tt,r||o?nt:null);return(0,i.jsxs)("label",{className:u,children:[(0,i.jsx)("input",{ref:a,className:rt,type:"checkbox",onChange:()=>{l.current()?n(t,!0,!0):l.current=ut((()=>n(t,!r,!1)),200)},checked:null==r||r}),(0,i.jsx)(c,{fontSize:"small",className:it}),(0,i.jsx)("span",{className:Xe,children:e})]})}const ut=(e,t=200)=>{const n={current:0};let r=0;const i=o=>{if(r||(r=o),o-r>t)return n.current=0,void e();n.current=globalThis.requestAnimationFrame(i)};return n.current=globalThis.requestAnimationFrame(i),()=>0!==n.current&&(globalThis.cancelAnimationFrame(n.current),n.current=0,!0)};function dt({props:e,layers:t,theme:n,lazyLoad:r,layerSelector:o,onLayerVisibilityChange:l,width:c,height:u}){const{initialBounds:d,initialViewState:p,...h}=e,f=function(e,t,n,r){return(0,s.useMemo)((()=>{if(!Array.isArray(n))return r;const[i,o,s,l]=n,c=[[Math.max(-180,i),Math.max(o,-85.051129)],[Math.min(180,s),Math.min(l,85.051129)]],u=new a.Z({width:e,height:t}),{longitude:d,latitude:p,zoom:h}=u.fitBounds(c);return{...r,longitude:d,latitude:p,zoom:h}}),[n,r,e,t])}(c,u,d,p),y=t.map(ne.create),m=(0,s.useRef)(null),g=function(e,t){const[n,r]=(0,s.useState)(!1);return(0,s.useEffect)((()=>{if(t&&e.current){const t=new IntersectionObserver((e=>{r(e[0].isIntersecting)}),{threshold:0});return t.observe(e.current),()=>t.disconnect()}}),[t,e]),n}(m,r),v=!r||g;return(0,i.jsxs)("div",{ref:m,className:B(Ge,n),children:[(0,i.jsx)("div",{className:B(Ue,ze),children:o&&(0,i.jsx)(at,{layers:y.filter((e=>e.props.visibilityToggle)).map((e=>e.renderSelector())).reverse(),onVisibilityChange:l})}),v&&(0,i.jsx)(ve,{props:{...h,initialViewState:f},layers:y}),(0,i.jsx)("div",{className:B(Ue,Fe),children:(0,i.jsx)(Ze,{layers:y.filter((e=>e.props.visible)).map((e=>e.renderLegend())).reverse()})})]})}function pt(e){const t=e instanceof a.Z?e:new a.Z(e),n=V(t,"longitude","latitude","zoom","bearing","pitch","altitude");return{bounds:t.getBounds(),viewState:{...n,center:t.unprojectFlat(t.center)}}}var ht,ft,yt,mt=function(e,t,n,r,i){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?i.call(e,n):i?i.value=n:t.set(e,n),n},gt=function(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)};const vt={name:"rdeck",type:"output",factory:(e,t,n)=>(0!==t&&0!==n||([t,n]=q(e)),new bt(e,t,n))};class bt{constructor(e,t,n){if(ht.set(this,void 0),ft.set(this,void 0),yt.set(this,void 0),this.props={blendingMode:"normal"},this.layers=[],this.theme="kepler",this.layerSelector=!0,this.lazyLoad=!1,mt(this,ht,e,"f"),mt(this,ft,t,"f"),mt(this,yt,n,"f"),this.onClick=this.onClick.bind(this),this.onViewStateChange=this.onViewStateChange.bind(this),HTMLWidgets.shinyMode){const t=$(((e={})=>this.renderValue(e)),50);Shiny.addCustomMessageHandler(`${e.id}:layer`,(e=>{var n,r,i;const o=this.layers.find((t=>t.id===e.id)),s={...o,...e,visible:null!==(n=e.visible)&&void 0!==n?n:null==o?void 0:o.visible,data:null!==(i=null!==(r=e.data)&&void 0!==r?r:null==o?void 0:o.data)&&void 0!==i?i:null};this.layers=null==o?[...this.layers,s]:this.layers.map((e=>e===o?s:e)),t({layers:this.layers})})),Shiny.addCustomMessageHandler(`${e.id}:deck`,(({props:e,theme:t,lazyLoad:n})=>{this.renderValue({props:{...this.props,...e},theme:t,lazyLoad:n})}))}this.setLayerVisibility=this.setLayerVisibility.bind(this)}renderValue({props:e,layers:t,theme:n,layerSelector:r,lazyLoad:s}={}){const a={props:{...this.props,...e,onClick:this.onClick,onViewStateChange:$(this.onViewStateChange,50)},layers:null!=t?t:this.layers,theme:null!=n?n:this.theme,layerSelector:null!=r?r:this.layerSelector,lazyLoad:null!=s?s:this.lazyLoad};Object.assign(this,a),o.render((0,i.jsx)(dt,{...a,onLayerVisibilityChange:this.setLayerVisibility,width:gt(this,ft,"f"),height:gt(this,yt,"f")}),gt(this,ht,"f"))}resize(e,t){}get id(){return gt(this,ht,"f").id}setLayerVisibility(e){if(0===e.length)return;const t=this.layers.map((t=>{const n=e.find((e=>((e,t)=>{const n=e.name===t.name,r=e.groupName===t.groupName;return n&&r||null==e.name&&null!=e.groupName&&r})(e,t)&&e.visible!==t.visible));return n?{...t,visible:n.visible}:t}));this.renderValue({layers:t})}onClick(e){var t;if(HTMLWidgets.shinyMode){const n={coordinate:e.coordinate,...pt(e.viewport),layer:V(null===(t=e.layer)||void 0===t?void 0:t.props,"id","name","groupName"),object:de(e)};Shiny.setInputValue(`${this.id}_click`,n,{priority:"event"})}}onViewStateChange({viewState:e}){if(HTMLWidgets.shinyMode){const t=pt(e);Shiny.setInputValue(`${this.id}_viewstate`,t,{priority:"event"})}}}function jt(e){var t;const n=document.getElementById(e);return null!==(t=null==n?void 0:n.htmlwidget_data_init_result)&&void 0!==t?t:null}function wt(){return[...document.querySelectorAll(".rdeck.html-widget")].map((e=>e.htmlwidget_data_init_result)).filter((e=>e instanceof bt))}ht=new WeakMap,ft=new WeakMap,yt=new WeakMap,HTMLWidgets.widget(vt);const xt="0.4.0-dev"},9521:()=>{},9125:()=>{},9214:()=>{}},i={};function o(e){var t=i[e];if(void 0!==t)return t.exports;var n=i[e]={exports:{}};return r[e].call(n.exports,n,n.exports,o),n.exports}o.m=r,e=[],o.O=(t,n,r,i)=>{if(!n){var s=1/0;for(u=0;u=i)&&Object.keys(o.O).every((e=>o.O[e](n[l])))?n.splice(l--,1):(a=!1,i0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,r,i]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},n=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,o.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var i=Object.create(null);o.r(i);var s={};t=t||[null,n({}),n([]),n(n)];for(var a=2&r&&e;"object"==typeof a&&!~t.indexOf(a);a=n(a))Object.getOwnPropertyNames(a).forEach((t=>s[t]=()=>e[t]));return s.default=()=>e,o.d(i,s),i},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e={472:0};o.O.j=t=>0===e[t];var t=(t,n)=>{var r,i,[s,a,l]=n,c=0;if(s.some((t=>0!==e[t]))){for(r in a)o.o(a,r)&&(o.m[r]=a[r]);if(l)var u=l(o)}for(t&&t(n);co(8981)));return s=o.O(s)})())); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVVvQyxHQUhUN0IsRUFBVWdDLEVBQWFDLEdBQVcvWixFQUdoQnVRLEVBQUksRUFDM0IsR0FBR3VILEVBQVNoVyxNQUFNOEksR0FBZ0MsSUFBeEI4TyxFQUFnQjlPLEtBQWEsQ0FDdEQsSUFBSTJNLEtBQVl1QyxFQUNaeEMsRUFBb0IwQixFQUFFYyxFQUFhdkMsS0FDckNELEVBQW9CSyxFQUFFSixHQUFZdUMsRUFBWXZDLElBR2hELEdBQUd3QyxFQUFTLElBQUlsQyxFQUFTa0MsRUFBUXpDLEdBR2xDLElBREd1QyxHQUE0QkEsRUFBMkI3WixHQUNyRHVRLEVBQUl1SCxFQUFTcFosT0FBUTZSLElBQ3pCb0osRUFBVTdCLEVBQVN2SCxHQUNoQitHLEVBQW9CMEIsRUFBRVUsRUFBaUJDLElBQVlELEVBQWdCQyxJQUNyRUQsRUFBZ0JDLEdBQVMsS0FFMUJELEVBQWdCQyxHQUFXLEVBRTVCLE9BQU9yQyxFQUFvQk0sRUFBRUMsSUFHMUJtQyxFQUFxQnJjLEtBQXdCLGtCQUFJQSxLQUF3QixtQkFBSyxHQUNsRnFjLEVBQW1CbEIsUUFBUWMsRUFBcUJsRSxLQUFLLEtBQU0sSUFDM0RzRSxFQUFtQjNZLEtBQU91WSxFQUFxQmxFLEtBQUssS0FBTXNFLEVBQW1CM1ksS0FBS3FVLEtBQUtzRSxLLEdDN0N2RixJQUFJQyxFQUFzQjNDLEVBQW9CTSxPQUFFeE4sRUFBVyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksTUFBTSxJQUFPa04sRUFBb0IsUSxPQUNqTzJDLEVBQXNCM0MsRUFBb0JNLEVBQUVxQyxJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2NodW5rIGxvYWRlZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2NyZWF0ZSBmYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vLy4vd2lkZ2V0L2NvbG9yLnRzIiwid2VicGFjazovLy8uL3dpZGdldC9hY2Nlc3Nvci50cyIsIndlYnBhY2s6Ly8vLi93aWRnZXQvc2NhbGUudHMiLCJ3ZWJwYWNrOi8vLy4vd2lkZ2V0L2JsZW5kaW5nLnRzIiwid2VicGFjazovLy8uL3dpZGdldC9kYXRhLWZyYW1lLnRzIiwid2VicGFjazovLy8uL3dpZGdldC9tdWx0aS1oaWdobGlnaHQtZXh0ZW5zaW9uLnRzIiwid2VicGFjazovLy8uL3dpZGdldC91dGlsLnRzIiwid2VicGFjazovLy8uL3dpZGdldC9sYXllci50cyIsIndlYnBhY2s6Ly8vLi93aWRnZXQvcGlja2luZy50cyIsIndlYnBhY2s6Ly8vLi93aWRnZXQvdG9vbHRpcC5jc3M/MWMwNiIsIndlYnBhY2s6Ly8vLi93aWRnZXQvdG9vbHRpcC50c3giLCJ3ZWJwYWNrOi8vLy4vd2lkZ2V0L21hcC50c3giLCJ3ZWJwYWNrOi8vLy4vd2lkZ2V0L2xlZ2VuZC5jc3M/ZmRlNiIsIndlYnBhY2s6Ly8vLi93aWRnZXQvbGVnZW5kLnRzeCIsIndlYnBhY2s6Ly8vLi93aWRnZXQvYXBwLmNzcz8yNzg2Iiwid2VicGFjazovLy8uL3dpZGdldC9sYXllci1zZWxlY3Rvci5jc3M/YmIzYSIsIndlYnBhY2s6Ly8vLi93aWRnZXQvbGF5ZXItc2VsZWN0b3IudHN4Iiwid2VicGFjazovLy8uL3dpZGdldC9hcHAudHN4Iiwid2VicGFjazovLy8uL3dpZGdldC92aWV3cG9ydC50cyIsIndlYnBhY2s6Ly8vLi93aWRnZXQvd2lkZ2V0LnRzeCIsIndlYnBhY2s6Ly8vLi93aWRnZXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInJkZWNrXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInJkZWNrXCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgKCkgPT4ge1xucmV0dXJuICIsInZhciBkZWZlcnJlZCA9IFtdO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5PID0gKHJlc3VsdCwgY2h1bmtJZHMsIGZuLCBwcmlvcml0eSkgPT4ge1xuXHRpZihjaHVua0lkcykge1xuXHRcdHByaW9yaXR5ID0gcHJpb3JpdHkgfHwgMDtcblx0XHRmb3IodmFyIGkgPSBkZWZlcnJlZC5sZW5ndGg7IGkgPiAwICYmIGRlZmVycmVkW2kgLSAxXVsyXSA+IHByaW9yaXR5OyBpLS0pIGRlZmVycmVkW2ldID0gZGVmZXJyZWRbaSAtIDFdO1xuXHRcdGRlZmVycmVkW2ldID0gW2NodW5rSWRzLCBmbiwgcHJpb3JpdHldO1xuXHRcdHJldHVybjtcblx0fVxuXHR2YXIgbm90RnVsZmlsbGVkID0gSW5maW5pdHk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZGVmZXJyZWQubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgW2NodW5rSWRzLCBmbiwgcHJpb3JpdHldID0gZGVmZXJyZWRbaV07XG5cdFx0dmFyIGZ1bGZpbGxlZCA9IHRydWU7XG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBjaHVua0lkcy5sZW5ndGg7IGorKykge1xuXHRcdFx0aWYgKChwcmlvcml0eSAmIDEgPT09IDAgfHwgbm90RnVsZmlsbGVkID49IHByaW9yaXR5KSAmJiBPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLk8pLmV2ZXJ5KChrZXkpID0+IChfX3dlYnBhY2tfcmVxdWlyZV9fLk9ba2V5XShjaHVua0lkc1tqXSkpKSkge1xuXHRcdFx0XHRjaHVua0lkcy5zcGxpY2Uoai0tLCAxKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGxlZCA9IGZhbHNlO1xuXHRcdFx0XHRpZihwcmlvcml0eSA8IG5vdEZ1bGZpbGxlZCkgbm90RnVsZmlsbGVkID0gcHJpb3JpdHk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmKGZ1bGZpbGxlZCkge1xuXHRcdFx0ZGVmZXJyZWQuc3BsaWNlKGktLSwgMSlcblx0XHRcdHZhciByID0gZm4oKTtcblx0XHRcdGlmIChyICE9PSB1bmRlZmluZWQpIHJlc3VsdCA9IHI7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59OyIsInZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiA/IChvYmopID0+IChPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSkgOiAob2JqKSA9PiAob2JqLl9fcHJvdG9fXyk7XG52YXIgbGVhZlByb3RvdHlwZXM7XG4vLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLy8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8vIG1vZGUgJiAxNjogcmV0dXJuIHZhbHVlIHdoZW4gaXQncyBQcm9taXNlLWxpa2Vcbi8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbl9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG5cdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IHRoaXModmFsdWUpO1xuXHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuXHRpZih0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlKSB7XG5cdFx0aWYoKG1vZGUgJiA0KSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG5cdFx0aWYoKG1vZGUgJiAxNikgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHJldHVybiB2YWx1ZTtcblx0fVxuXHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuXHR2YXIgZGVmID0ge307XG5cdGxlYWZQcm90b3R5cGVzID0gbGVhZlByb3RvdHlwZXMgfHwgW251bGwsIGdldFByb3RvKHt9KSwgZ2V0UHJvdG8oW10pLCBnZXRQcm90byhnZXRQcm90byldO1xuXHRmb3IodmFyIGN1cnJlbnQgPSBtb2RlICYgMiAmJiB2YWx1ZTsgdHlwZW9mIGN1cnJlbnQgPT0gJ29iamVjdCcgJiYgIX5sZWFmUHJvdG90eXBlcy5pbmRleE9mKGN1cnJlbnQpOyBjdXJyZW50ID0gZ2V0UHJvdG8oY3VycmVudCkpIHtcblx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdXJyZW50KS5mb3JFYWNoKChrZXkpID0+IChkZWZba2V5XSA9ICgpID0+ICh2YWx1ZVtrZXldKSkpO1xuXHR9XG5cdGRlZlsnZGVmYXVsdCddID0gKCkgPT4gKHZhbHVlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBkZWYpO1xuXHRyZXR1cm4gbnM7XG59OyIsImNvbnN0IERFRkFVTFRfQ09MT1I6IENvbG9yID0gWzAsIDAsIDAsIDI1NV07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbG9yUHJvcChuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIG5hbWUuZW5kc1dpdGgoXCJDb2xvclwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYmEoW3IsIGcsIGIsIGEgPSAyNTVdOiBDb2xvcikge1xuICByZXR1cm4gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgJHthIC8gMjU1fSlgO1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdWJlci9kZWNrLmdsL2Jsb2IvbWFzdGVyL21vZHVsZXMvY29yZS9zcmMvdXRpbHMvY29sb3IuanNcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNvbG9yKGNvbG9yOiBzdHJpbmcgfCBDb2xvciwgdGFyZ2V0PzogQ29sb3IpOiBDb2xvciB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNvbG9yKSkge1xuICAgIGlmICghdGFyZ2V0ICYmIGNvbG9yLmxlbmd0aCA9PT0gNCkge1xuICAgICAgcmV0dXJuIGNvbG9yO1xuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0YXJnZXQgPSB0YXJnZXQgPz8gKFtdIGFzIENvbG9yKTtcbiAgICB0YXJnZXRbMF0gPSBjb2xvclswXTtcbiAgICB0YXJnZXRbMV0gPSBjb2xvclsxXTtcbiAgICB0YXJnZXRbMl0gPSBjb2xvclsyXTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGFyZ2V0WzNdID0gY29sb3IubGVuZ3RoID09PSAzID8gY29sb3JbM10gOiAyNTU7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29sb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGFyZ2V0ID0gdGFyZ2V0ID8/IChbXSBhcyBDb2xvcik7XG4gICAgcGFyc2VIZXhDb2xvcihjb2xvciwgdGFyZ2V0KTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgcmV0dXJuIERFRkFVTFRfQ09MT1I7XG59XG5cbi8vIFBhcnNlIGEgaGV4IGNvbG9yXG5mdW5jdGlvbiBwYXJzZUhleENvbG9yKGNvbG9yOiBzdHJpbmcsIHRhcmdldDogQ29sb3IpIHtcbiAgaWYgKGNvbG9yLmxlbmd0aCA9PT0gNykge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQoY29sb3Iuc3Vic3RyaW5nKDEpLCAxNik7XG4gICAgdGFyZ2V0WzBdID0gTWF0aC5mbG9vcih2YWx1ZSAvIDY1NTM2KTtcbiAgICB0YXJnZXRbMV0gPSBNYXRoLmZsb29yKCh2YWx1ZSAvIDI1NikgJSAyNTYpO1xuICAgIHRhcmdldFsyXSA9IHZhbHVlICUgMjU2O1xuICAgIHRhcmdldFszXSA9IDI1NTtcbiAgfSBlbHNlIGlmIChjb2xvci5sZW5ndGggPT09IDkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGNvbG9yLnN1YnN0cmluZygxKSwgMTYpO1xuICAgIHRhcmdldFswXSA9IE1hdGguZmxvb3IodmFsdWUgLyAxNjc3NzIxNik7XG4gICAgdGFyZ2V0WzFdID0gTWF0aC5mbG9vcigodmFsdWUgLyA2NTUzNikgJSAyNTYpO1xuICAgIHRhcmdldFsyXSA9IE1hdGguZmxvb3IoKHZhbHVlIC8gMjU2KSAlIDI1Nik7XG4gICAgdGFyZ2V0WzNdID0gdmFsdWUgJSAyNTY7XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgUGlja0luZm8sIEFjY2Vzc29yRm4gfSBmcm9tIFwiQGRlY2suZ2wvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcImdlb2pzb25cIjtcbmltcG9ydCB7IHBhcnNlQ29sb3IgfSBmcm9tIFwiLi9jb2xvclwiO1xuXG50eXBlIEFjY2Vzc29yQmFzZSA9IHtcbiAgdHlwZTogXCJhY2Nlc3NvclwiO1xuICBjb2w6IHN0cmluZztcbn07XG5cbnR5cGUgQWNjZXNzb3JUYWJsZSA9IEFjY2Vzc29yQmFzZSAmIHtcbiAgZGF0YVR5cGU6IFwidGFibGVcIjtcbiAgZ2V0RGF0YTogQWNjZXNzb3JGbjxEYXRhRnJhbWUsIGFueT47XG59O1xuXG50eXBlIEFjY2Vzc29yT2JqZWN0ID0gQWNjZXNzb3JCYXNlICYge1xuICBkYXRhVHlwZTogXCJvYmplY3RcIjtcbiAgZ2V0RGF0YTogQWNjZXNzb3JGbjxSZWNvcmQ8c3RyaW5nLCBhbnk+LCBhbnk+O1xufTtcblxudHlwZSBBY2Nlc3Nvckdlb0pzb24gPSBBY2Nlc3NvckJhc2UgJiB7XG4gIGRhdGFUeXBlOiBcImdlb2pzb25cIjtcbiAgZ2V0RGF0YTogQWNjZXNzb3JGbjxGZWF0dXJlLCBhbnk+O1xufTtcblxuZXhwb3J0IHR5cGUgQWNjZXNzb3IgPSBBY2Nlc3NvclRhYmxlIHwgQWNjZXNzb3JPYmplY3QgfCBBY2Nlc3Nvckdlb0pzb247XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FjY2Vzc29yKG9iajogYW55KTogb2JqIGlzIEFjY2Vzc29yIHtcbiAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmIG9iai50eXBlID09PSBcImFjY2Vzc29yXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhY2Nlc3NvcihvYmo6IEFjY2Vzc29yLCBuYW1lOiBzdHJpbmcpOiBBY2Nlc3NvciB7XG4gIGNvbnN0IGdldERhdGEgPSBhY2Nlc3NvckZuKG9iaiwgbmFtZSkgYXMgQWNjZXNzb3JGbjxhbnksIGFueT47XG4gIHJldHVybiB7XG4gICAgLi4ub2JqLFxuICAgIGdldERhdGEsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFjY2Vzc29yRm4oeyBjb2wsIGRhdGFUeXBlIH06IEFjY2Vzc29yLCBuYW1lOiBzdHJpbmcpOiBBY2Nlc3NvckZuPGFueSwgYW55PiB7XG4gIGlmIChuYW1lID09PSBcImhpZ2hsaWdodENvbG9yXCIpIHtcbiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICBjYXNlIFwidGFibGVcIjpcbiAgICAgICAgcmV0dXJuIHRhYmxlSGlnaGxpZ2h0KGNvbCk7XG4gICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIHJldHVybiBvYmplY3RIaWdobGlnaHQoY29sKTtcbiAgICAgIGNhc2UgXCJnZW9qc29uXCI6XG4gICAgICAgIHJldHVybiBnZW9qc29uSGlnaGxpZ2h0KGNvbCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYCR7ZGF0YVR5cGV9IG5vdCBzdXBwb3J0ZWRgKTtcbiAgICB9XG4gIH1cblxuICBpZiAobmFtZS5lbmRzV2l0aChcIkNvbG9yXCIpKSB7XG4gICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgY2FzZSBcInRhYmxlXCI6XG4gICAgICAgIHJldHVybiB0YWJsZUNvbG9yKGNvbCk7XG4gICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIHJldHVybiBvYmplY3RDb2xvcihjb2wpO1xuICAgICAgY2FzZSBcImdlb2pzb25cIjpcbiAgICAgICAgcmV0dXJuIGdlb2pzb25Db2xvcihjb2wpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKGAke2RhdGFUeXBlfSBub3Qgc3VwcG9ydGVkYCk7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgICAgcmV0dXJuIHRhYmxlRGF0YShjb2wpO1xuICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgIHJldHVybiBvYmplY3REYXRhKGNvbCk7XG4gICAgY2FzZSBcImdlb2pzb25cIjpcbiAgICAgIHJldHVybiBnZW9qc29uRGF0YShjb2wpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoYCR7ZGF0YVR5cGV9IG5vdCBzdXBwb3J0ZWRgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0YWJsZURhdGEoY29sOiBzdHJpbmcpOiBBY2Nlc3NvckZuPERhdGFGcmFtZSwgYW55PiB7XG4gIHJldHVybiAoXywgeyBpbmRleCwgZGF0YSB9KSA9PiBkYXRhLmZyYW1lW2NvbF1baW5kZXhdO1xufVxuXG5mdW5jdGlvbiB0YWJsZUNvbG9yKGNvbDogc3RyaW5nKTogQWNjZXNzb3JGbjxEYXRhRnJhbWUsIENvbG9yPiB7XG4gIHJldHVybiAoXywgeyBpbmRleCwgZGF0YSwgdGFyZ2V0IH0pID0+IHBhcnNlQ29sb3IoZGF0YS5mcmFtZVtjb2xdW2luZGV4XSwgdGFyZ2V0KTtcbn1cblxuZnVuY3Rpb24gdGFibGVIaWdobGlnaHQoY29sOiBzdHJpbmcpOiBBY2Nlc3NvckZuPFBpY2tJbmZvPG51bGw+LCBDb2xvcj4ge1xuICByZXR1cm4gKHsgaW5kZXgsIGxheWVyIH0pID0+XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHBhcnNlQ29sb3IobGF5ZXIucHJvcHMuZGF0YSEuZnJhbWVbY29sXVtpbmRleF0pO1xufVxuXG5mdW5jdGlvbiBvYmplY3REYXRhKGNvbDogc3RyaW5nKTogQWNjZXNzb3JGbjxSZWNvcmQ8c3RyaW5nLCBhbnk+LCBhbnk+IHtcbiAgcmV0dXJuIChvYmplY3QpID0+IG9iamVjdFtjb2xdO1xufVxuXG5mdW5jdGlvbiBvYmplY3RDb2xvcihjb2w6IHN0cmluZyk6IEFjY2Vzc29yRm48UmVjb3JkPHN0cmluZywgYW55PiwgQ29sb3I+IHtcbiAgcmV0dXJuIChvYmplY3QsIHsgdGFyZ2V0IH0pID0+IHBhcnNlQ29sb3Iob2JqZWN0W2NvbF0sIHRhcmdldCk7XG59XG5cbmZ1bmN0aW9uIG9iamVjdEhpZ2hsaWdodChjb2w6IHN0cmluZyk6IEFjY2Vzc29yRm48UGlja0luZm88UmVjb3JkPHN0cmluZywgYW55Pj4sIENvbG9yPiB7XG4gIHJldHVybiAoeyBvYmplY3QgfSkgPT4gcGFyc2VDb2xvcihvYmplY3RbY29sXSk7XG59XG5cbmZ1bmN0aW9uIGdlb2pzb25EYXRhKGNvbDogc3RyaW5nKTogQWNjZXNzb3JGbjxGZWF0dXJlLCBhbnk+IHtcbiAgcmV0dXJuIChvYmplY3QpID0+IG9iamVjdC5wcm9wZXJ0aWVzIVtjb2xdO1xufVxuXG5mdW5jdGlvbiBnZW9qc29uQ29sb3IoY29sOiBzdHJpbmcpOiBBY2Nlc3NvckZuPEZlYXR1cmUsIENvbG9yPiB7XG4gIHJldHVybiAob2JqZWN0LCB7IHRhcmdldCB9KSA9PiBwYXJzZUNvbG9yKG9iamVjdC5wcm9wZXJ0aWVzIVtjb2xdLCB0YXJnZXQpO1xufVxuXG5mdW5jdGlvbiBnZW9qc29uSGlnaGxpZ2h0KGNvbDogc3RyaW5nKTogQWNjZXNzb3JGbjxQaWNrSW5mbzxGZWF0dXJlPiwgQ29sb3I+IHtcbiAgcmV0dXJuICh7IG9iamVjdCB9KSA9PiBwYXJzZUNvbG9yKG9iamVjdC5wcm9wZXJ0aWVzIVtjb2xdKTtcbn1cbiIsImltcG9ydCB7XG4gIHNjYWxlTGluZWFyLFxuICBTY2FsZUxpbmVhcixcbiAgc2NhbGVMb2csXG4gIFNjYWxlTG9nYXJpdGhtaWMsXG4gIHNjYWxlT3JkaW5hbCxcbiAgU2NhbGVPcmRpbmFsLFxuICBzY2FsZVBvdyxcbiAgU2NhbGVQb3dlcixcbiAgc2NhbGVRdWFudGl6ZSxcbiAgU2NhbGVRdWFudGl6ZSxcbiAgU2NhbGVTeW1Mb2csXG4gIHNjYWxlU3ltbG9nLFxuICBTY2FsZVRocmVzaG9sZCxcbiAgc2NhbGVUaHJlc2hvbGQsXG4gIHNjYWxlSWRlbnRpdHksXG4gIFNjYWxlSWRlbnRpdHksXG59IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHR5cGUgeyBQaWNrSW5mbywgQWNjZXNzb3JGbiB9IGZyb20gXCJAZGVjay5nbC9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmUgfSBmcm9tIFwiZ2VvanNvblwiO1xuaW1wb3J0IHsgQWNjZXNzb3IsIGlzQWNjZXNzb3IgfSBmcm9tIFwiLi9hY2Nlc3NvclwiO1xuaW1wb3J0IHsgcGFyc2VDb2xvciB9IGZyb20gXCIuL2NvbG9yXCI7XG5cbnR5cGUgU2NhbGVGbiA9IChkYXRhOiBhbnkpID0+IG51bWJlciB8IENvbG9yO1xuXG50eXBlIEFjY2Vzc29yU2NhbGVCYXNlPFJhbmdlPiA9IEFjY2Vzc29yICYge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRvbWFpbjogbnVtYmVyW107XG4gIHJhbmdlOiBSYW5nZVtdO1xuICBwYWxldHRlPzogQ29sb3JbXTtcbiAgdW5rbm93bjogUmFuZ2U7XG4gIGxlZ2VuZDogYm9vbGVhbjtcbiAgdGlja3M6IHN0cmluZ1tdO1xuICBzY2FsZUJ5Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQWNjZXNzb3JTY2FsZUxpbmVhcjxSYW5nZT4gPSBBY2Nlc3NvclNjYWxlQmFzZTxSYW5nZT4gJiB7XG4gIHNjYWxlOiBcImxpbmVhclwiO1xuICBzY2FsZURhdGE6IFNjYWxlTGluZWFyPFJhbmdlLCBSYW5nZT47XG59O1xuXG5leHBvcnQgdHlwZSBBY2Nlc3NvclNjYWxlUG93ZXI8UmFuZ2U+ID0gQWNjZXNzb3JTY2FsZUJhc2U8UmFuZ2U+ICYge1xuICBzY2FsZTogXCJwb3dlclwiO1xuICBleHBvbmVudDogbnVtYmVyO1xuICBzY2FsZURhdGE6IFNjYWxlUG93ZXI8UmFuZ2UsIFJhbmdlPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFjY2Vzc29yU2NhbGVMb2c8UmFuZ2U+ID0gQWNjZXNzb3JTY2FsZUJhc2U8UmFuZ2U+ICYge1xuICBzY2FsZTogXCJsb2dcIjtcbiAgYmFzZTogbnVtYmVyO1xuICBzY2FsZURhdGE6IFNjYWxlTG9nYXJpdGhtaWM8UmFuZ2UsIFJhbmdlPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFjY2Vzc29yU2NhbGVTeW1sb2c8UmFuZ2U+ID0gQWNjZXNzb3JTY2FsZUJhc2U8UmFuZ2U+ICYge1xuICBzY2FsZTogXCJzeW1sb2dcIjtcbiAgc2NhbGVEYXRhOiBTY2FsZVN5bUxvZzxSYW5nZSwgUmFuZ2U+O1xufTtcblxuZXhwb3J0IHR5cGUgQWNjZXNzb3JTY2FsZUlkZW50aXR5PFJhbmdlPiA9IEFjY2Vzc29yU2NhbGVCYXNlPFJhbmdlPiAmIHtcbiAgc2NhbGU6IFwiaWRlbnRpdHlcIjtcbiAgc2NhbGVEYXRhOiBTY2FsZUlkZW50aXR5PFJhbmdlPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFjY2Vzc29yU2NhbGVUaHJlc2hvbGQ8UmFuZ2U+ID0gQWNjZXNzb3JTY2FsZUJhc2U8UmFuZ2U+ICYge1xuICBzY2FsZTogXCJ0aHJlc2hvbGRcIjtcbiAgc2NhbGVEYXRhOiBTY2FsZVRocmVzaG9sZDxudW1iZXIsIFJhbmdlPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFjY2Vzc29yU2NhbGVRdWFudGlsZTxSYW5nZT4gPSBBY2Nlc3NvclNjYWxlQmFzZTxSYW5nZT4gJiB7XG4gIHNjYWxlOiBcInF1YW50aWxlXCI7XG4gIHNjYWxlRGF0YTogU2NhbGVUaHJlc2hvbGQ8bnVtYmVyLCBSYW5nZT47XG59O1xuXG5leHBvcnQgdHlwZSBBY2Nlc3NvclNjYWxlQ2F0ZWdvcnk8UmFuZ2U+ID0gQWNjZXNzb3JTY2FsZUJhc2U8UmFuZ2U+ICYge1xuICBzY2FsZTogXCJjYXRlZ29yeVwiO1xuICBkb21haW46IHN0cmluZ1tdO1xuICB1bmtub3duVGljazogc3RyaW5nIHwgbnVsbDtcbiAgc2NhbGVEYXRhOiBTY2FsZU9yZGluYWw8c3RyaW5nLCBSYW5nZT47XG59O1xuXG5leHBvcnQgdHlwZSBBY2Nlc3NvclNjYWxlUXVhbnRpemU8UmFuZ2U+ID0gQWNjZXNzb3JTY2FsZUJhc2U8UmFuZ2U+ICYge1xuICBzY2FsZTogXCJxdWFudGl6ZVwiO1xuICBkb21haW46IFtudW1iZXIsIG51bWJlcl07XG4gIHNjYWxlRGF0YTogU2NhbGVRdWFudGl6ZTxSYW5nZT47XG59O1xuXG5leHBvcnQgdHlwZSBBY2Nlc3NvclNjYWxlQ29udGludW91czxSYW5nZT4gPVxuICB8IEFjY2Vzc29yU2NhbGVMaW5lYXI8UmFuZ2U+XG4gIHwgQWNjZXNzb3JTY2FsZVBvd2VyPFJhbmdlPlxuICB8IEFjY2Vzc29yU2NhbGVMb2c8UmFuZ2U+XG4gIHwgQWNjZXNzb3JTY2FsZVN5bWxvZzxSYW5nZT47XG5leHBvcnQgdHlwZSBBY2Nlc3NvclNjYWxlRGlzY3JldGU8UmFuZ2U+ID1cbiAgfCBBY2Nlc3NvclNjYWxlVGhyZXNob2xkPFJhbmdlPlxuICB8IEFjY2Vzc29yU2NhbGVRdWFudGlsZTxSYW5nZT5cbiAgfCBBY2Nlc3NvclNjYWxlUXVhbnRpemU8UmFuZ2U+O1xuZXhwb3J0IHR5cGUgQWNjZXNzb3JTY2FsZTxSYW5nZT4gPVxuICB8IEFjY2Vzc29yU2NhbGVDb250aW51b3VzPFJhbmdlPlxuICB8IEFjY2Vzc29yU2NhbGVEaXNjcmV0ZTxSYW5nZT5cbiAgfCBBY2Nlc3NvclNjYWxlQ2F0ZWdvcnk8UmFuZ2U+XG4gIHwgQWNjZXNzb3JTY2FsZUlkZW50aXR5PFJhbmdlPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWNjZXNzb3JTY2FsZShvYmo6IGFueSk6IG9iaiBpcyBBY2Nlc3NvclNjYWxlPG51bWJlciB8IENvbG9yPiB7XG4gIHJldHVybiBpc0FjY2Vzc29yKG9iaikgJiYgXCJzY2FsZVwiIGluIG9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29sb3JTY2FsZShvYmo6IEFjY2Vzc29yU2NhbGU8bnVtYmVyIHwgQ29sb3I+KTogb2JqIGlzIEFjY2Vzc29yU2NhbGU8Q29sb3I+IHtcbiAgcmV0dXJuIFwicGFsZXR0ZVwiIGluIG9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGludW91c1NjYWxlPFQ+KG9iajogQWNjZXNzb3JTY2FsZTxUPik6IG9iaiBpcyBBY2Nlc3NvclNjYWxlQ29udGludW91czxUPiB7XG4gIHJldHVybiAoXG4gICAgb2JqLnNjYWxlID09PSBcImxpbmVhclwiIHx8IG9iai5zY2FsZSA9PT0gXCJwb3dlclwiIHx8IG9iai5zY2FsZSA9PT0gXCJsb2dcIiB8fCBvYmouc2NhbGUgPT09IFwic3ltbG9nXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlzY3JldGVTY2FsZTxUPihvYmo6IEFjY2Vzc29yU2NhbGU8VD4pOiBvYmogaXMgQWNjZXNzb3JTY2FsZURpc2NyZXRlPFQ+IHtcbiAgcmV0dXJuIG9iai5zY2FsZSA9PT0gXCJ0aHJlc2hvbGRcIiB8fCBvYmouc2NhbGUgPT09IFwicXVhbnRpbGVcIiB8fCBvYmouc2NhbGUgPT09IFwicXVhbnRpemVcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFjY2Vzc29yU2NhbGUoXG4gIG9iajogQWNjZXNzb3JTY2FsZTxudW1iZXIgfCBDb2xvcj4sXG4gIG5hbWU6IHN0cmluZ1xuKTogQWNjZXNzb3JTY2FsZTxudW1iZXIgfCBDb2xvcj4ge1xuICBpZiAoXCJwYWxldHRlXCIgaW4gb2JqKSB7XG4gICAgb2JqLnJhbmdlID0gb2JqLnBhbGV0dGUhLm1hcCgoY29sb3IpID0+IHBhcnNlQ29sb3IoY29sb3IpKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb2JqLnVua25vd24gPSBwYXJzZUNvbG9yKG9iai51bmtub3duKTtcbiAgfVxuXG4gIGNvbnN0IHNjYWxlRGF0YSA9IHNjYWxlRm4ob2JqKSBhcyBhbnk7XG4gIGNvbnN0IGdldERhdGE6IEFjY2Vzc29yRm48YW55LCBhbnk+ID1cbiAgICBuYW1lID09PSBcImhpZ2hsaWdodENvbG9yXCIgPyBoaWdobGlnaHRGbihvYmosIHNjYWxlRGF0YSkgOiBhY2Nlc3NvckZuKG9iaiwgc2NhbGVEYXRhKTtcblxuICByZXR1cm4ge1xuICAgIC4uLm9iaixcbiAgICBuYW1lLFxuICAgIGdldERhdGEsXG4gICAgc2NhbGVEYXRhLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzY2FsZUZuKGFjY2Vzc29yOiBBY2Nlc3NvclNjYWxlPGFueT4pIHtcbiAgdHlwZSBUID0gbnVtYmVyIHwgQ29sb3I7XG5cbiAgc3dpdGNoIChhY2Nlc3Nvci5zY2FsZSkge1xuICAgIGNhc2UgXCJsaW5lYXJcIjpcbiAgICAgIHJldHVybiBzY2FsZUxpbmVhcjxUPigpXG4gICAgICAgIC5kb21haW4oYWNjZXNzb3IuZG9tYWluKVxuICAgICAgICAucmFuZ2UoYWNjZXNzb3IucmFuZ2UpXG4gICAgICAgIC51bmtub3duKGFjY2Vzc29yLnVua25vd24pXG4gICAgICAgIC5jbGFtcCh0cnVlKTtcbiAgICBjYXNlIFwicG93ZXJcIjpcbiAgICAgIHJldHVybiBzY2FsZVBvdzxUPigpXG4gICAgICAgIC5leHBvbmVudChhY2Nlc3Nvci5leHBvbmVudClcbiAgICAgICAgLmRvbWFpbihhY2Nlc3Nvci5kb21haW4pXG4gICAgICAgIC5yYW5nZShhY2Nlc3Nvci5yYW5nZSlcbiAgICAgICAgLnVua25vd24oYWNjZXNzb3IudW5rbm93bilcbiAgICAgICAgLmNsYW1wKHRydWUpO1xuICAgIGNhc2UgXCJsb2dcIjpcbiAgICAgIHJldHVybiBzY2FsZUxvZzxUPigpXG4gICAgICAgIC5iYXNlKGFjY2Vzc29yLmJhc2UpXG4gICAgICAgIC5kb21haW4oYWNjZXNzb3IuZG9tYWluKVxuICAgICAgICAucmFuZ2UoYWNjZXNzb3IucmFuZ2UpXG4gICAgICAgIC51bmtub3duKGFjY2Vzc29yLnVua25vd24pXG4gICAgICAgIC5jbGFtcCh0cnVlKTtcbiAgICBjYXNlIFwic3ltbG9nXCI6XG4gICAgICByZXR1cm4gc2NhbGVTeW1sb2c8VD4oKVxuICAgICAgICAuZG9tYWluKGFjY2Vzc29yLmRvbWFpbilcbiAgICAgICAgLnJhbmdlKGFjY2Vzc29yLnJhbmdlKVxuICAgICAgICAudW5rbm93bihhY2Nlc3Nvci51bmtub3duKVxuICAgICAgICAuY2xhbXAodHJ1ZSk7XG4gICAgY2FzZSBcImlkZW50aXR5XCI6XG4gICAgICByZXR1cm4gc2NhbGVJZGVudGl0eTxUPigpLnVua25vd24oYWNjZXNzb3IudW5rbm93bik7XG4gICAgY2FzZSBcInRocmVzaG9sZFwiOlxuICAgIGNhc2UgXCJxdWFudGlsZVwiOlxuICAgICAgcmV0dXJuIHNjYWxlVGhyZXNob2xkPG51bWJlciwgVD4oKVxuICAgICAgICAuZG9tYWluKGFjY2Vzc29yLmRvbWFpbilcbiAgICAgICAgLnJhbmdlKGFjY2Vzc29yLnJhbmdlKVxuICAgICAgICAudW5rbm93bihhY2Nlc3Nvci51bmtub3duKTtcbiAgICBjYXNlIFwiY2F0ZWdvcnlcIjpcbiAgICAgIHJldHVybiBzY2FsZU9yZGluYWw8VD4oKVxuICAgICAgICAuZG9tYWluKGFjY2Vzc29yLmRvbWFpbilcbiAgICAgICAgLnJhbmdlKGFjY2Vzc29yLnJhbmdlKVxuICAgICAgICAudW5rbm93bihhY2Nlc3Nvci51bmtub3duKTtcbiAgICBjYXNlIFwicXVhbnRpemVcIjpcbiAgICAgIHJldHVybiBzY2FsZVF1YW50aXplPFQ+KClcbiAgICAgICAgLmRvbWFpbihhY2Nlc3Nvci5kb21haW4pXG4gICAgICAgIC5yYW5nZShhY2Nlc3Nvci5yYW5nZSlcbiAgICAgICAgLnVua25vd24oYWNjZXNzb3IudW5rbm93bik7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IFR5cGVFcnJvcihgc2NhbGUgJHsoYWNjZXNzb3IgYXMgYW55KS5zY2FsZX0gbm90IHN1cHBvcnRlZGApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFjY2Vzc29yRm4oeyBjb2wsIGRhdGFUeXBlIH06IEFjY2Vzc29yLCBzY2FsZURhdGE6IFNjYWxlRm4pOiBBY2Nlc3NvckZuPGFueSwgYW55PiB7XG4gIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICBjYXNlIFwidGFibGVcIjpcbiAgICAgIHJldHVybiB0YWJsZURhdGEoY29sLCBzY2FsZURhdGEpO1xuICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgIHJldHVybiBvYmplY3REYXRhKGNvbCwgc2NhbGVEYXRhKTtcbiAgICBjYXNlIFwiZ2VvanNvblwiOlxuICAgICAgcmV0dXJuIGdlb2pzb25EYXRhKGNvbCwgc2NhbGVEYXRhKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgVHlwZUVycm9yKGAke2RhdGFUeXBlfSBub3Qgc3VwcG9ydGVkYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGlnaGxpZ2h0Rm4oeyBjb2wsIGRhdGFUeXBlIH06IEFjY2Vzc29yLCBzY2FsZURhdGE6IFNjYWxlRm4pOiBBY2Nlc3NvckZuPGFueSwgYW55PiB7XG4gIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICBjYXNlIFwidGFibGVcIjpcbiAgICAgIHJldHVybiB0YWJsZUhpZ2hsaWdodChjb2wsIHNjYWxlRGF0YSk7XG4gICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgcmV0dXJuIG9iamVjdEhpZ2hsaWdodChjb2wsIHNjYWxlRGF0YSk7XG4gICAgY2FzZSBcImdlb2pzb25cIjpcbiAgICAgIHJldHVybiBnZW9qc29uSGlnaGxpZ2h0KGNvbCwgc2NhbGVEYXRhKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgVHlwZUVycm9yKGAke2RhdGFUeXBlfSBub3Qgc3VwcG9ydGVkYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdGFibGVEYXRhKGNvbDogc3RyaW5nLCBzY2FsZURhdGE6IFNjYWxlRm4pOiBBY2Nlc3NvckZuPERhdGFGcmFtZSwgYW55PiB7XG4gIHJldHVybiAoXywgeyBpbmRleCwgZGF0YSB9KSA9PiBzY2FsZURhdGEoZGF0YS5mcmFtZVtjb2xdW2luZGV4XSk7XG59XG5cbmZ1bmN0aW9uIHRhYmxlSGlnaGxpZ2h0KGNvbDogc3RyaW5nLCBzY2FsZURhdGE6IFNjYWxlRm4pOiBBY2Nlc3NvckZuPFBpY2tJbmZvPG51bGw+LCBhbnk+IHtcbiAgcmV0dXJuICh7IGluZGV4LCBsYXllciB9KSA9PlxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBzY2FsZURhdGEobGF5ZXIucHJvcHMuZGF0YSEuZnJhbWVbY29sXVtpbmRleF0pO1xufVxuXG5mdW5jdGlvbiBvYmplY3REYXRhKGNvbDogc3RyaW5nLCBzY2FsZURhdGE6IFNjYWxlRm4pOiBBY2Nlc3NvckZuPFJlY29yZDxzdHJpbmcsIGFueT4sIGFueT4ge1xuICByZXR1cm4gKG9iamVjdCkgPT4gc2NhbGVEYXRhKG9iamVjdFtjb2xdKTtcbn1cblxuZnVuY3Rpb24gb2JqZWN0SGlnaGxpZ2h0KFxuICBjb2w6IHN0cmluZyxcbiAgc2NhbGVEYXRhOiBTY2FsZUZuXG4pOiBBY2Nlc3NvckZuPFBpY2tJbmZvPFJlY29yZDxzdHJpbmcsIGFueT4+LCBhbnk+IHtcbiAgcmV0dXJuICh7IG9iamVjdCB9KSA9PiBzY2FsZURhdGEob2JqZWN0W2NvbF0pO1xufVxuXG5mdW5jdGlvbiBnZW9qc29uRGF0YShjb2w6IHN0cmluZywgc2NhbGVEYXRhOiBTY2FsZUZuKTogQWNjZXNzb3JGbjxGZWF0dXJlLCBhbnk+IHtcbiAgcmV0dXJuIChvYmplY3QpID0+IHNjYWxlRGF0YShvYmplY3QucHJvcGVydGllcyFbY29sXSk7XG59XG5cbmZ1bmN0aW9uIGdlb2pzb25IaWdobGlnaHQoY29sOiBzdHJpbmcsIHNjYWxlRGF0YTogU2NhbGVGbik6IEFjY2Vzc29yRm48UGlja0luZm88RmVhdHVyZT4sIGFueT4ge1xuICByZXR1cm4gKHsgb2JqZWN0IH0pID0+IHNjYWxlRGF0YShvYmplY3QucHJvcGVydGllcyFbY29sXSk7XG59XG4iLCJpbXBvcnQgeyBkZWZhdWx0IGFzIEdMIH0gZnJvbSBcIkBsdW1hLmdsL2NvbnN0YW50c1wiO1xuXG5jb25zdCBCTEVORElOR19NT0RFUyA9IE9iamVjdC5mcmVlemUoe1xuICBhZGRpdGl2ZToge1xuICAgIFtHTC5CTEVORF06IHRydWUsXG4gICAgYmxlbmRGdW5jOiBbR0wuU1JDX0FMUEhBLCBHTC5EU1RfQUxQSEFdLFxuICAgIGJsZW5kRXF1YXRpb246IEdMLkZVTkNfQURELFxuICB9LFxuICBzdWJ0cmFjdGl2ZToge1xuICAgIFtHTC5CTEVORF06IHRydWUsXG4gICAgYmxlbmRGdW5jOiBbR0wuT05FLCBHTC5PTkVfTUlOVVNfRFNUX0NPTE9SLCBHTC5TUkNfQUxQSEEsIEdMLkRTVF9BTFBIQV0sXG4gICAgYmxlbmRFcXVhdGlvbjogW0dMLkZVTkNfU1VCVFJBQ1QsIEdMLkZVTkNfQUREXSxcbiAgfSxcbiAgbm9ybWFsOiB7XG4gICAgW0dMLkJMRU5EXTogdHJ1ZSxcbiAgICBibGVuZEZ1bmM6IFtHTC5TUkNfQUxQSEEsIEdMLk9ORV9NSU5VU19TUkNfQUxQSEEsIEdMLk9ORSwgR0wuT05FX01JTlVTX1NSQ19BTFBIQV0sXG4gICAgYmxlbmRFcXVhdGlvbjogW0dMLkZVTkNfQURELCBHTC5GVU5DX0FERF0sXG4gIH0sXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJsZW5kaW5nUGFyYW1ldGVycyhtb2RlOiBCbGVuZGluZ01vZGUgPSBcIm5vcm1hbFwiKSB7XG4gIHJldHVybiBCTEVORElOR19NT0RFU1ttb2RlXSA/PyBCTEVORElOR19NT0RFUy5ub3JtYWw7XG59XG4iLCJpbXBvcnQgdHlwZSB7IFBvc2l0aW9uIH0gZnJvbSBcImdlb2pzb25cIjtcblxudHlwZSBHZW9tZXRyeUluZm8gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogR2VvbWV0cnlUeXBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUZyYW1lKGRhdGE6IExheWVyRGF0YSk6IGRhdGEgaXMgRGF0YUZyYW1lIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgJiYgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgXCJmcmFtZVwiIGluIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuR2VvbWV0cmllcyhkYXRhOiBEYXRhRnJhbWUpOiBEYXRhRnJhbWUge1xuICBjb25zdCBtdWx0aUdlb21ldHJpZXMgPSBnZXRNdWx0aUdlb21ldHJ5KGRhdGEpO1xuICBpZiAobXVsdGlHZW9tZXRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcmV0dXJuIG11bHRpR2VvbWV0cmllcy5yZWR1Y2UoZmxhdHRlbiwgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW4oZGF0YTogRGF0YUZyYW1lLCB7IG5hbWUsIHR5cGUgfTogR2VvbWV0cnlJbmZvKTogRGF0YUZyYW1lIHtcbiAgY29uc3Qgb2xkRnJhbWUgPSBkYXRhLmZyYW1lO1xuICBjb25zdCBuZXdGcmFtZSA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhvbGRGcmFtZSkubWFwKChba2V5XSkgPT4gW2tleSwgW10gYXMgYW55W11dKSk7XG5cbiAgLy8ga2V5cyBvZiBub24tZ2VvbWV0cnkgY29sc1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YS5mcmFtZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPT0gbmFtZSk7XG4gIC8vIGdlb21ldHJ5IGNvbHVtblxuICBjb25zdCBnZW9tZXRyaWVzID0gb2xkRnJhbWVbbmFtZV07XG4gIGNvbnN0IGlzTXVsdGlHZW9tZXRyeSA9IGlzTXVsdGlHZW9tZXRyeUZuKHR5cGUpO1xuICBjb25zdCBjb3B5VmFsdWVzID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBuZXdGcmFtZVtrZXldLnB1c2gob2xkRnJhbWVba2V5XVtpbmRleF0pO1xuICAgIH1cbiAgfTtcblxuICAvLyBvcmlnaW5hbCBkYXRhIGluZGljZXNcbiAgY29uc3QgaW5kaWNlcyA9IFtdO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gZ2VvbWV0cmllc1tpbmRleF07XG4gICAgaWYgKGlzTXVsdGlHZW9tZXRyeShnZW9tZXRyeSkpIHtcbiAgICAgIC8vIHNwbGl0IHRoZSBtdWx0aS1nZW9tZXRyeVxuICAgICAgbmV3RnJhbWVbbmFtZV0ucHVzaCguLi5nZW9tZXRyeSk7XG4gICAgICAvLyByZXBlYXQgb3RoZXIgY29sdW1ucyBmb3IgZWFjaCBnZW9tZXRyeSBpbiBtdWx0aS1nZW9tZXRyeVxuICAgICAgZm9yIChsZXQgcmVwID0gMDsgcmVwIDwgZ2VvbWV0cnkubGVuZ3RoOyByZXArKykge1xuICAgICAgICBjb3B5VmFsdWVzKGluZGV4KTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKGRhdGEuaW5kaWNlcz8uW2luZGV4XSA/PyBpbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0ZyYW1lW25hbWVdLnB1c2goZ2VvbWV0cnkpO1xuICAgICAgY29weVZhbHVlcyhpbmRleCk7XG4gICAgICBpbmRpY2VzLnB1c2goZGF0YS5pbmRpY2VzPy5baW5kZXhdID8/IGluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxlbmd0aDogbmV3RnJhbWVbbmFtZV0ubGVuZ3RoLFxuICAgIGdlb21ldHJ5OiB7XG4gICAgICAuLi5kYXRhLmdlb21ldHJ5LFxuICAgICAgW25hbWVdOiB0eXBlLnJlcGxhY2UoXCJNVUxUSVwiLCBcIlwiKSBhcyBHZW9tZXRyeVR5cGUsXG4gICAgfSxcbiAgICBpbmRpY2VzLFxuICAgIGZyYW1lOiBuZXdGcmFtZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNNdWx0aUdlb21ldHJ5Rm4odHlwZTogR2VvbWV0cnlUeXBlKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgXCJNVUxUSVBPSU5UXCI6XG4gICAgICByZXR1cm4gaXNNdWx0aVBvaW50O1xuICAgIGNhc2UgXCJNVUxUSUxJTkVTVFJJTkdcIjpcbiAgICAgIHJldHVybiBpc011bHRpTGluZVN0cmluZztcbiAgICBjYXNlIFwiTVVMVElQT0xZR09OXCI6XG4gICAgICByZXR1cm4gaXNNdWx0aVBvbHlnb247XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IFR5cGVFcnJvcihgJHt0eXBlfSBub3Qgc3VwcG9ydGVkYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNNdWx0aVBvaW50KGdlb21ldHJ5OiBQb3NpdGlvbiB8IFBvc2l0aW9uW10pOiBnZW9tZXRyeSBpcyBQb3NpdGlvbltdIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZ2VvbWV0cnk/LlswXSk7XG59XG5cbmZ1bmN0aW9uIGlzTXVsdGlMaW5lU3RyaW5nKGdlb21ldHJ5OiBQb3NpdGlvbltdIHwgUG9zaXRpb25bXVtdKTogZ2VvbWV0cnkgaXMgUG9zaXRpb25bXVtdIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZ2VvbWV0cnk/LlswXT8uWzBdKTtcbn1cblxuZnVuY3Rpb24gaXNNdWx0aVBvbHlnb24oZ2VvbWV0cnk6IFBvc2l0aW9uW11bXSB8IFBvc2l0aW9uW11bXVtdKTogZ2VvbWV0cnkgaXMgUG9zaXRpb25bXVtdW10ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShnZW9tZXRyeT8uWzBdPy5bMF0/LlswXSk7XG59XG5cbmZ1bmN0aW9uIGdldE11bHRpR2VvbWV0cnkoZGF0YTogRGF0YUZyYW1lKTogR2VvbWV0cnlJbmZvW10ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YS5nZW9tZXRyeSlcbiAgICAuZmlsdGVyKChbLCB0eXBlXSkgPT4gL01VTFRJLy50ZXN0KHR5cGUpKVxuICAgIC5tYXAoKFtuYW1lLCB0eXBlXSkgPT4gKHsgbmFtZSwgdHlwZSB9KSk7XG59XG4iLCJpbXBvcnQgeyBMYXllciwgTGF5ZXJFeHRlbnNpb24gfSBmcm9tIFwiQGRlY2suZ2wvY29yZVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBHTCB9IGZyb20gXCJAbHVtYS5nbC9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIEFyY0xheWVyLFxuICBJY29uTGF5ZXIsXG4gIExpbmVMYXllcixcbiAgUGF0aExheWVyLFxuICBQb2ludENsb3VkTGF5ZXIsXG4gIFNjYXR0ZXJwbG90TGF5ZXIsXG4gIFNvbGlkUG9seWdvbkxheWVyLFxufSBmcm9tIFwiQGRlY2suZ2wvbGF5ZXJzXCI7XG5cbmltcG9ydCB7IGlzRGF0YUZyYW1lIH0gZnJvbSBcIi4vZGF0YS1mcmFtZVwiO1xuXG5leHBvcnQgY2xhc3MgTXVsdGlIaWdobGlnaHRFeHRlbnNpb24gZXh0ZW5kcyBMYXllckV4dGVuc2lvbiB7XG4gIGluaXRpYWxpemVTdGF0ZSgpIHtcbiAgICBpZiAoIWlzUHJpbWl0aXZlTGF5ZXIodGhpcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsYXllciA9IHRoaXM7XG4gICAgY29uc3QgYXR0cmlidXRlTWFuYWdlciA9IGxheWVyLmdldEF0dHJpYnV0ZU1hbmFnZXIoKTtcblxuICAgIGlmIChhdHRyaWJ1dGVNYW5hZ2VyKSB7XG4gICAgICBhdHRyaWJ1dGVNYW5hZ2VyLmFkZEluc3RhbmNlZCh7XG4gICAgICAgIHBpY2tpbmdDb2xvcnM6IHtcbiAgICAgICAgICB0eXBlOiBHTC5VTlNJR05FRF9CWVRFLFxuICAgICAgICAgIHNpemU6IDMsXG4gICAgICAgICAgYWNjZXNzb3I6IChvYmplY3QsIHsgaW5kZXgsIGRhdGEsIHRhcmdldCB9KSA9PiB7XG4gICAgICAgICAgICAvLyBkYXRhIGlzIGEgZGF0YWZyYW1lLCB3aXRoIGZsYXR0ZW5lZCBnZW9tZXRyaWVzP1xuICAgICAgICAgICAgaWYgKGlzRGF0YUZyYW1lKGRhdGEpICYmIEFycmF5LmlzQXJyYXkoZGF0YS5pbmRpY2VzKSkge1xuICAgICAgICAgICAgICByZXR1cm4gbGF5ZXIuZW5jb2RlUGlja2luZ0NvbG9yKGRhdGEuaW5kaWNlcy5pbmRleE9mKGRhdGEuaW5kaWNlc1tpbmRleF0pLCB0YXJnZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBzdWItbGF5ZXIsIHdoZXJlIHBhcmVudCBkYXRhIGlzIGEgZGF0YWZyYW1lIHdpdGggZmxhdHRlbmVkIGdlb21ldHJpZXM/XG4gICAgICAgICAgICBjb25zdCBwYXJlbnREYXRhID0gb2JqZWN0Py5fX3NvdXJjZT8ucGFyZW50Py5wcm9wcy5kYXRhO1xuICAgICAgICAgICAgaWYgKGlzRGF0YUZyYW1lKHBhcmVudERhdGEpICYmIEFycmF5LmlzQXJyYXkocGFyZW50RGF0YS5pbmRpY2VzKSkge1xuICAgICAgICAgICAgICByZXR1cm4gbGF5ZXIuZW5jb2RlUGlja2luZ0NvbG9yKFxuICAgICAgICAgICAgICAgIHBhcmVudERhdGEuaW5kaWNlcy5pbmRleE9mKHBhcmVudERhdGEuaW5kaWNlc1tvYmplY3QuX19zb3VyY2UuaW5kZXhdKSxcbiAgICAgICAgICAgICAgICB0YXJnZXRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZGVmYXVsdFxuICAgICAgICAgICAgcmV0dXJuIGxheWVyLmVuY29kZVBpY2tpbmdDb2xvcihvYmplY3Q/Ll9fc291cmNlLmluZGV4ID8/IGluZGV4LCB0YXJnZXQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2hhZGVyQXR0cmlidXRlczoge1xuICAgICAgICAgICAgcGlja2luZ0NvbG9yczoge1xuICAgICAgICAgICAgICBkaXZpc29yOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluc3RhbmNlUGlja2luZ0NvbG9yczoge1xuICAgICAgICAgICAgICBkaXZpc29yOiAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IExheWVycyA9IFtcbiAgQXJjTGF5ZXIsXG4gIEljb25MYXllcixcbiAgTGluZUxheWVyLFxuICBQYXRoTGF5ZXIsXG4gIFBvaW50Q2xvdWRMYXllcixcbiAgU2NhdHRlcnBsb3RMYXllcixcbiAgU29saWRQb2x5Z29uTGF5ZXIsXG5dO1xuXG50eXBlIEJhc2VMYXllciA9IExheWVyPERhdGFGcmFtZSwgYW55PjtcbmZ1bmN0aW9uIGlzUHJpbWl0aXZlTGF5ZXIobGF5ZXI6IEJhc2VMYXllciB8IExheWVyRXh0ZW5zaW9uKTogbGF5ZXIgaXMgQmFzZUxheWVyIHtcbiAgcmV0dXJuIExheWVycy5zb21lKChMYXllcikgPT4gbGF5ZXIgaW5zdGFuY2VvZiBMYXllcik7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gcHJvcGVyQ2FzZShjYW1lbENhc2U6IHN0cmluZykge1xuICByZXR1cm4gY2FtZWxDYXNlLnJlcGxhY2UoLyhbQS1aXSkvZywgXCIgJDFcIikucmVwbGFjZSgvXi4vLCAocykgPT4gcy50b1VwcGVyQ2FzZSgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmRzKGNhbWVsQ2FzZTogc3RyaW5nKSB7XG4gIHJldHVybiBjYW1lbENhc2UucmVwbGFjZSgvKFtBLVpdKS9nLCBcIiAkMVwiKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGljazxULCBLIGV4dGVuZHMga2V5b2YgVD4ob2JqZWN0OiBULCAuLi5rZXlzOiBLW10pIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBlbnRyaWVzID0ga2V5cy5tYXAoKGtleSkgPT4gW2tleSwgb2JqZWN0W2tleV1dKTtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKTtcbn1cblxuZnVuY3Rpb24gZ2V0Rmlyc3RWaXNpYmxlKGVsOiBIVE1MRWxlbWVudCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgaWYgKGVsLmNsaWVudEhlaWdodCA+IDAgJiYgZWwuY2xpZW50SGVpZ2h0ID4gMCkge1xuICAgIHJldHVybiBlbDtcbiAgfVxuXG4gIHJldHVybiBlbC5wYXJlbnRFbGVtZW50ID8gZ2V0Rmlyc3RWaXNpYmxlKGVsLnBhcmVudEVsZW1lbnQpIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnREaW1lbnNpb25zKGVsOiBIVE1MRWxlbWVudCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCB2aXNpYmxlID0gZ2V0Rmlyc3RWaXNpYmxlKGVsKTtcblxuICBpZiAoZWwgPT09IHZpc2libGUgfHwgdmlzaWJsZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtlbC5jbGllbnRXaWR0aCwgZWwuY2xpZW50SGVpZ2h0XTtcbiAgfVxuXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG4gIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBPYmplY3QuYXNzaWduKG5vZGUuc3R5bGUsIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgZGlzcGxheTogXCJoaWRkZW5cIixcbiAgfSk7XG5cbiAgdmlzaWJsZS5hcHBlbmRDaGlsZChub2RlKTtcbiAgY29uc3QgZGltczogW251bWJlciwgbnVtYmVyXSA9IFtub2RlLmNsaWVudFdpZHRoLCBub2RlLmNsaWVudEhlaWdodF07XG4gIHZpc2libGUucmVtb3ZlQ2hpbGQobm9kZSk7XG5cbiAgcmV0dXJuIGRpbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncm91cEJ5PEssIFY+KGxpc3Q6IFZbXSwga2V5OiAoeDogVikgPT4gSyk6IE1hcDxLLCBWW10+IHtcbiAgY29uc3QgbWFwID0gbmV3IE1hcDxLLCBWW10+KCk7XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3QpIHtcbiAgICBjb25zdCBpdGVtS2V5ID0ga2V5KGl0ZW0pO1xuICAgIGlmICghbWFwLmhhcyhpdGVtS2V5KSkge1xuICAgICAgbWFwLnNldChpdGVtS2V5LCBbaXRlbV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXAuZ2V0KGl0ZW1LZXkpIS5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXA7XG59XG5cbnR5cGUgTnVsbGFibGU8VD4gPSBUIHwgbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzTmFtZXMoLi4uY2xhc3NOYW1lczogTnVsbGFibGU8c3RyaW5nPltdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNsYXNzTmFtZXMuZmlsdGVyKCh4KSA9PiB4ICE9IG51bGwpLmpvaW4oXCIgXCIpO1xufVxuXG50eXBlIFZhcmlhZGljPFQ+ID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2U8VD4oZm46IFZhcmlhZGljPFQ+LCB3YWl0OiBudW1iZXIgPSAwKSB7XG4gIGxldCB0aW1lb3V0OiBudW1iZXI7XG5cbiAgcmV0dXJuICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IGZuKC4uLmFyZ3MpLCB3YWl0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoeDogYW55KSB7XG4gIHJldHVybiAodHlwZW9mIHggIT09IFwib2JqZWN0XCIgfHwgeCA9PT0gbnVsbCkgJiYgdHlwZW9mIHggIT09IFwiZnVuY3Rpb25cIjtcbn1cblxuY2xhc3MgTWFwQ2FjaGUge1xuICBwcml2YXRlIF92YWwgPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgX3JlZiA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgZ2V0U3RvcmUoa2V5OiBhbnkpIHtcbiAgICByZXR1cm4gaXNQcmltaXRpdmUoa2V5KSA/IHRoaXMuX3ZhbCA6IHRoaXMuX3JlZjtcbiAgfVxuXG4gIGhhcyhrZXk6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGtleSkuaGFzKGtleSk7XG4gIH1cblxuICBnZXQoa2V5OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdG9yZShrZXkpLmdldChrZXkpO1xuICB9XG5cbiAgc2V0KGtleTogYW55LCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuZ2V0U3RvcmUoa2V5KS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lbW9pemU8VD4oZm46IFZhcmlhZGljPFQ+KTogVmFyaWFkaWM8VD4ge1xuICAvLyBhIG5lc3RlZCBjYWNoZSBjaGFpbiwgc3VjaCB0aGF0IGVhY2ggcGFyYW0gbWFwcyB0byBhIGNhY2hlLFxuICAvLyBvciB0aGUgcmVzdWx0IG9mIGZuIGlmIGl0IGlzIHRoZSBlbmQgb2YgdGhlIGNoYWluXG4gIC8vIGUuZy4gZm9yIDMgYXJncywgKGEpID0+IChiKSA9PiAoYykgPT4gZm4oYSwgYiwgYylcbiAgY29uc3Qgcm9vdCA9IG5ldyBNYXBDYWNoZSgpO1xuXG4gIHJldHVybiAoLi4uYXJnczogYW55W10pOiBUID0+IHtcbiAgICBjb25zdCBhcmcwID0gYXJnc1swXTtcbiAgICBjb25zdCBuYXJncyA9IGFyZ3Muc2xpY2UoMCwgLTEpO1xuICAgIC8vIHdhbGsgdGhlIGNhY2hlIGNoYWluXG4gICAgY29uc3QgY2FjaGUgPSBuYXJncy5yZWR1Y2VSaWdodCgocGFyZW50OiBNYXBDYWNoZSwgYXJnOiBhbnkpID0+IHtcbiAgICAgIGlmIChwYXJlbnQuaGFzKGFyZykpIHJldHVybiBwYXJlbnQuZ2V0KGFyZyk7XG5cbiAgICAgIGNvbnN0IGNoaWxkID0gbmV3IE1hcENhY2hlKCk7XG4gICAgICBwYXJlbnQuc2V0KGFyZywgY2hpbGQpO1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH0sIHJvb3QpO1xuXG4gICAgLy8gY2FjaGUgaGl0XG4gICAgaWYgKGNhY2hlLmhhcyhhcmcwKSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChhcmcwKTtcbiAgICB9XG5cbiAgICAvLyBjYWNoZSBtaXNzXG4gICAgY29uc3QgdmFsdWUgPSBmbiguLi5hcmdzKTtcbiAgICBjYWNoZS5zZXQoYXJnMCwgdmFsdWUpO1xuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuIiwiaW1wb3J0ICogYXMgZGVjayBmcm9tIFwiLi9kZWNrLWJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgeyBMYXllciBhcyBEZWNrTGF5ZXIsIExheWVyUHJvcHMgYXMgRGVja0xheWVyUHJvcHMgfSBmcm9tIFwiQGRlY2suZ2wvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBCaXRtYXBMYXllclByb3BzIH0gZnJvbSBcIkBkZWNrLmdsL2xheWVyc1wiO1xuaW1wb3J0IHR5cGUgeyBUaWxlTGF5ZXJQcm9wcyB9IGZyb20gXCJAZGVjay5nbC9nZW8tbGF5ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmVDb2xsZWN0aW9uIH0gZnJvbSBcImdlb2pzb25cIjtcblxuaW1wb3J0IHsgcGFyc2VDb2xvciBhcyBfcGFyc2VDb2xvciB9IGZyb20gXCIuL2NvbG9yXCI7XG5pbXBvcnQgeyBBY2Nlc3NvclNjYWxlLCBhY2Nlc3NvclNjYWxlIGFzIF9hY2Nlc3NvclNjYWxlLCBpc0FjY2Vzc29yU2NhbGUgfSBmcm9tIFwiLi9zY2FsZVwiO1xuaW1wb3J0IHsgYWNjZXNzb3IgYXMgX2FjY2Vzc29yLCBBY2Nlc3NvciwgaXNBY2Nlc3NvciB9IGZyb20gXCIuL2FjY2Vzc29yXCI7XG5pbXBvcnQgeyBibGVuZGluZ1BhcmFtZXRlcnMgfSBmcm9tIFwiLi9ibGVuZGluZ1wiO1xuaW1wb3J0IHsgZmxhdHRlbkdlb21ldHJpZXMgYXMgX2ZsYXR0ZW5HZW9tZXRyaWVzLCBpc0RhdGFGcmFtZSB9IGZyb20gXCIuL2RhdGEtZnJhbWVcIjtcbmltcG9ydCB7IE11bHRpSGlnaGxpZ2h0RXh0ZW5zaW9uIH0gZnJvbSBcIi4vbXVsdGktaGlnaGxpZ2h0LWV4dGVuc2lvblwiO1xuaW1wb3J0IHsgbWVtb2l6ZSB9IGZyb20gXCIuL3V0aWxcIjtcblxudHlwZSBMYXllckRhdGEgPSBzdHJpbmcgfCBEYXRhRnJhbWUgfCBGZWF0dXJlQ29sbGVjdGlvbjtcbnR5cGUgRW50cnk8VD4gPSBbc3RyaW5nLCBUXTtcblxuZXhwb3J0IHR5cGUgTGVnZW5kSW5mbyA9IFBpY2s8TGF5ZXJQcm9wcywgXCJpZFwiIHwgXCJuYW1lXCI+ICYge1xuICBzY2FsZXM6IEFjY2Vzc29yU2NhbGU8bnVtYmVyIHwgQ29sb3I+W107XG59O1xuXG5leHBvcnQgdHlwZSBWaXNpYmlsaXR5SW5mbyA9IFBpY2s8TGF5ZXJQcm9wcywgXCJpZFwiIHwgXCJuYW1lXCIgfCBcImdyb3VwTmFtZVwiPiAmIHtcbiAgdmlzaWJsZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5ZXJQcm9wcyBleHRlbmRzIE9taXQ8RGVja0xheWVyUHJvcHM8YW55PiwgXCJkYXRhXCI+IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGdyb3VwTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgZGF0YTogTGF5ZXJEYXRhIHwgbnVsbDtcbiAgYmxlbmRpbmdNb2RlOiBCbGVuZGluZ01vZGU7XG4gIHZpc2liaWxpdHlUb2dnbGU6IGJvb2xlYW47XG4gIHRvb2x0aXA6IFRvb2x0aXBJbmZvIHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIFRyaXBzTGF5ZXJQcm9wcyBleHRlbmRzIExheWVyUHJvcHMge1xuICBjdXJyZW50VGltZTogbnVtYmVyO1xuICBsb29wTGVuZ3RoOiBudW1iZXI7XG4gIGFuaW1hdGlvblNwZWVkOiBudW1iZXI7XG59XG5cbi8vIHBlcmZvcm1hbmNlIG9wdGltaXNhdGlvbjogYXZvaWQgc2hhbGxvdyBwcm9wIGNoYW5nZXNcbmNvbnN0IGZsYXR0ZW5HZW9tZXRyaWVzID0gbWVtb2l6ZShfZmxhdHRlbkdlb21ldHJpZXMpO1xuY29uc3QgcGFyc2VDb2xvciA9IG1lbW9pemUoX3BhcnNlQ29sb3IpO1xuY29uc3QgYWNjZXNzb3IgPSBtZW1vaXplKF9hY2Nlc3Nvcik7XG5jb25zdCBhY2Nlc3NvclNjYWxlID0gbWVtb2l6ZShfYWNjZXNzb3JTY2FsZSk7XG5cbmV4cG9ydCBjbGFzcyBMYXllciB7XG4gIHR5cGU6IHN0cmluZztcbiAgcHJvcHM6IExheWVyUHJvcHM7XG4gIHNjYWxlczogQWNjZXNzb3JTY2FsZTxhbnk+W107XG5cbiAgY29uc3RydWN0b3IoeyB0eXBlLCAuLi5wcm9wcyB9OiBMYXllclByb3BzKSB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzKTtcbiAgICBjb25zdCBjb2xvcnMgPSBnZXRDb2xvcnMoZW50cmllcyk7XG4gICAgY29uc3QgYWNjZXNzb3JzID0gZ2V0QWNjZXNzb3JzKGVudHJpZXMpO1xuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICBjb25zdCBfcHJvcHMgPSBPYmplY3QuZnJvbUVudHJpZXMoW1xuICAgICAgLi4uZW50cmllcyxcbiAgICAgIC4uLmNvbG9ycyxcbiAgICAgIC4uLmFjY2Vzc29ycy5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtuYW1lLCB2YWx1ZS5nZXREYXRhXSksXG4gICAgICAuLi5nZXRXZWlnaHRQcm9wcyhlbnRyaWVzKSxcbiAgICAgIFtcInZpc2libGVcIiwgcHJvcHMudmlzaWJsZSA/PyB0cnVlXSxcbiAgICAgIFtcInVwZGF0ZVRyaWdnZXJzXCIsIGdldFVwZGF0ZVRyaWdnZXJzKGFjY2Vzc29ycyldLFxuICAgICAgW1wicGFyYW1ldGVyc1wiLCBnZXRQYXJhbWV0ZXJzKHByb3BzLnBhcmFtZXRlcnMsIHByb3BzLmJsZW5kaW5nTW9kZSldLFxuICAgIF0pO1xuXG4gICAgLy8gbXVsdGktZ2VvbWV0cnkgaGlnaGxpZ2h0XG4gICAgaWYgKGlzRGF0YUZyYW1lKF9wcm9wcy5kYXRhKSkge1xuICAgICAgX3Byb3BzLmRhdGEgPSBmbGF0dGVuR2VvbWV0cmllcyhfcHJvcHMuZGF0YSk7XG4gICAgICBfcHJvcHMuZXh0ZW5zaW9ucyA9IFtuZXcgTXVsdGlIaWdobGlnaHRFeHRlbnNpb24oKSwgLi4uKF9wcm9wcy5leHRlbnNpb25zID8/IFtdKV07XG4gICAgfVxuXG4gICAgLy8gdGlsZS1sYXllclxuICAgIHR5cGUgVGlsZVByb3BzID0gVGlsZUxheWVyUHJvcHM8YW55PiAmIEJpdG1hcExheWVyUHJvcHM8YW55PiAmIHsgdGlsZTogYW55IH07XG4gICAgaWYgKHR5cGUgPT09IFwiVGlsZUxheWVyXCIpIHtcbiAgICAgIF9wcm9wcy5yZW5kZXJTdWJMYXllcnMgPSAocHJvcHM6IFRpbGVQcm9wcykgPT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgYmJveDogeyB3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGggfSxcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgICAgeixcbiAgICAgICAgfSA9IHByb3BzLnRpbGU7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBkZWNrLkJpdG1hcExheWVyKHtcbiAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICBkYXRhOiBbeyB6LCB4LCB5IH1dLFxuICAgICAgICAgIGltYWdlOiBwcm9wcy5kYXRhLFxuICAgICAgICAgIGJvdW5kczogW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0sXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzID0gX3Byb3BzO1xuXG4gICAgdGhpcy5zY2FsZXMgPSBhY2Nlc3NvcnNcbiAgICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gaXNBY2Nlc3NvclNjYWxlKHZhbHVlKSlcbiAgICAgIC5tYXAoKFssIHZhbHVlXSkgPT4gdmFsdWUgYXMgQWNjZXNzb3JTY2FsZTxudW1iZXIgfCBDb2xvcj4pO1xuXG4gICAgLy8gbG9hZCBmb250XG4gICAgaWYgKHR5cGUgPT09IFwiVGV4dExheWVyXCIgJiYgXCJmb250c1wiIGluIGRvY3VtZW50KSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBkb2N1bWVudC5mb250cy5sb2FkKGAxNnB4ICR7cHJvcHMuZm9udEZhbWlseX1gKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlKHByb3BzOiBMYXllclByb3BzKSB7XG4gICAgcmV0dXJuIG5ldyBMYXllcihwcm9wcyk7XG4gIH1cblxuICByZW5kZXJMYXllcih0aW1lPzogbnVtYmVyKTogRGVja0xheWVyPGFueSwgYW55PiB7XG4gICAgLy8gYW5pbWF0ZSB0cmlwcyBsYXllclxuICAgIGlmICh0aGlzLnR5cGUgPT09IFwiVHJpcHNMYXllclwiICYmIHRpbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzIGFzIFRyaXBzTGF5ZXJQcm9wcztcbiAgICAgIGNvbnN0IHsgbG9vcExlbmd0aCwgYW5pbWF0aW9uU3BlZWQgfSA9IHByb3BzO1xuICAgICAgY29uc3QgYW5pbWF0aW9uVGltZSA9IGxvb3BMZW5ndGggLyBhbmltYXRpb25TcGVlZDtcbiAgICAgIGNvbnN0IHJhdGlvQ29tcGxldGUgPSAoKHRpbWUgLyAxMDAwKSAlIGFuaW1hdGlvblRpbWUpIC8gYW5pbWF0aW9uVGltZTtcbiAgICAgIHByb3BzLmN1cnJlbnRUaW1lID0gcmF0aW9Db21wbGV0ZSAqIGxvb3BMZW5ndGg7XG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbmV3IGRlY2tbdGhpcy50eXBlXSh7IC4uLnRoaXMucHJvcHMgfSk7XG4gIH1cblxuICByZW5kZXJMZWdlbmQoKTogTGVnZW5kSW5mbyB7XG4gICAgY29uc3Qgc2NhbGVzID0gdGhpcy5zY2FsZXMuZmlsdGVyKChzY2FsZSkgPT4gc2NhbGUubGVnZW5kKTtcbiAgICByZXR1cm4geyBpZDogdGhpcy5wcm9wcy5pZCEsIG5hbWU6IHRoaXMucHJvcHMubmFtZSwgc2NhbGVzIH07XG4gIH1cblxuICByZW5kZXJTZWxlY3RvcigpOiBWaXNpYmlsaXR5SW5mbyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLnByb3BzLmlkISxcbiAgICAgIGdyb3VwTmFtZTogdGhpcy5wcm9wcy5ncm91cE5hbWUsXG4gICAgICBuYW1lOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICB2aXNpYmxlOiB0aGlzLnByb3BzLnZpc2libGUgPz8gdHJ1ZSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbG9yKFtuYW1lLCB2YWx1ZV06IFtzdHJpbmcsIGFueV0pIHtcbiAgcmV0dXJuIG5hbWUuZW5kc1dpdGgoXCJDb2xvclwiKSAmJiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29sb3JzKGVudHJpZXM6IEVudHJ5PGFueT5bXSk6IEVudHJ5PENvbG9yIHwgQ29sb3JbXT5bXSB7XG4gIGNvbnN0IGNvbG9ycyA9IGVudHJpZXNcbiAgICAuZmlsdGVyKGlzQ29sb3IpXG4gICAgLm1hcCgoW25hbWUsIGNvbG9yXSk6IEVudHJ5PENvbG9yPiA9PiBbbmFtZSwgcGFyc2VDb2xvcihjb2xvcildKTtcblxuICBjb25zdCBjb2xvclJhbmdlID0gZW50cmllcy5maW5kKChbbmFtZV0pID0+IG5hbWUgPT09IFwiY29sb3JSYW5nZVwiKTtcbiAgaWYgKGNvbG9yUmFuZ2UpIHtcbiAgICBjb2xvcnMucHVzaChbY29sb3JSYW5nZVswXSwgY29sb3JSYW5nZVsxXS5tYXAoKGNvbG9yOiBzdHJpbmcgfCBDb2xvcikgPT4gcGFyc2VDb2xvcihjb2xvcikpXSk7XG4gIH1cblxuICByZXR1cm4gY29sb3JzO1xufVxuXG5mdW5jdGlvbiBnZXRBY2Nlc3NvcnMoZW50cmllczogRW50cnk8YW55PltdKTogRW50cnk8QWNjZXNzb3IgfCBBY2Nlc3NvclNjYWxlPGFueT4+W10ge1xuICByZXR1cm4gZW50cmllc1xuICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gaXNBY2Nlc3Nvcih2YWx1ZSkpXG4gICAgLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gW1xuICAgICAgbmFtZSxcbiAgICAgIGlzQWNjZXNzb3JTY2FsZSh2YWx1ZSkgPyBhY2Nlc3NvclNjYWxlKHZhbHVlLCBuYW1lKSA6IGFjY2Vzc29yKHZhbHVlLCBuYW1lKSxcbiAgICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0VXBkYXRlVHJpZ2dlcnMoZW50cmllczogRW50cnk8QWNjZXNzb3IgfCBBY2Nlc3NvclNjYWxlPGFueT4+W10pIHtcbiAgY29uc3Qgc2NhbGVQcm9wcyA9IChhY2Nlc3NvcjogYW55KSA9PiB7XG4gICAgY29uc3QgeyBnZXREYXRhLCBzY2FsZURhdGEsIHBhbGV0dGUsIC4uLnByb3BzIH0gPSBhY2Nlc3NvcjtcbiAgICByZXR1cm4gcHJvcHM7XG4gIH07XG5cbiAgY29uc3QgcHJvcFRyaWdnZXJzID0gZW50cmllcy5tYXAoKFtuYW1lLCBhY2Nlc3Nvcl0pID0+IFtuYW1lLCBzY2FsZVByb3BzKGFjY2Vzc29yKV0pO1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKHByb3BUcmlnZ2Vycyk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlcnMocGFyYW1ldGVyczogYW55LCBibGVuZGluZ01vZGU6IEJsZW5kaW5nTW9kZSkge1xuICByZXR1cm4ge1xuICAgIC4uLnBhcmFtZXRlcnMsXG4gICAgLi4uYmxlbmRpbmdQYXJhbWV0ZXJzKGJsZW5kaW5nTW9kZSksXG4gIH07XG59XG5cbi8vIGdldENvbG9yV2VpZ2h0ICYgZ2V0RWxldmF0aW9uV2VpZ2h0IG11c3QgYmUgZnVuY3Rpb25zXG5mdW5jdGlvbiBnZXRXZWlnaHRQcm9wcyhlbnRyaWVzOiBFbnRyeTxhbnk+W10pIHtcbiAgcmV0dXJuIGVudHJpZXNcbiAgICAuZmlsdGVyKChbbmFtZV0pID0+IG5hbWUgPT09IFwiZ2V0Q29sb3JXZWlnaHRcIiB8fCBuYW1lID09PSBcImdldEVsZXZhdGlvbldlaWdodFwiKVxuICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIgJiYgIWlzQWNjZXNzb3IodmFsdWUpKVxuICAgIC5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtuYW1lLCAoKSA9PiB2YWx1ZV0pO1xufVxuIiwiaW1wb3J0IHsgX0FnZ3JlZ2F0aW9uTGF5ZXIgfSBmcm9tIFwiQGRlY2suZ2wvYWdncmVnYXRpb24tbGF5ZXJzXCI7XG5pbXBvcnQgeyBPYmplY3RJbmZvIH0gZnJvbSBcIkBkZWNrLmdsL2NvcmVcIjtcbmltcG9ydCB7IFBpY2tJbmZvIH0gZnJvbSBcImRlY2suZ2xcIjtcbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tIFwiZ2VvanNvblwiO1xuaW1wb3J0IHsgaXNEYXRhRnJhbWUgfSBmcm9tIFwiLi9kYXRhLWZyYW1lXCI7XG5cbmV4cG9ydCBjb25zdCBGRUFUVVJFX0lEID0gXCIuZmVhdHVyZV9pZFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGlja2VkT2JqZWN0KGluZm86IFBpY2tJbmZvPGFueT4sIGRhdGFUeXBlOiBEYXRhVHlwZSB8IG51bGwgPSBudWxsKSB7XG4gIGlmICghaW5mby5waWNrZWQpIHJldHVybiBudWxsO1xuXG4gIGlmIChkYXRhVHlwZSA9PSBudWxsKSB7XG4gICAgZGF0YVR5cGUgPSBnZXREYXRhVHlwZShpbmZvKTtcbiAgfVxuICBjb25zdCBnZXREYXRhID0gYWNjZXNzb3JGbihkYXRhVHlwZSk7XG5cbiAgY29uc3QgeyBvYmplY3QsIGluZGV4IH0gPSBpbmZvO1xuICBjb25zdCBkYXRhID0gaW5mby5sYXllci5wcm9wcy5kYXRhO1xuICByZXR1cm4gZ2V0RGF0YShvYmplY3QsIHsgaW5kZXgsIGRhdGEgfSk7XG59XG5cbmZ1bmN0aW9uIGdldERhdGFUeXBlKHsgb2JqZWN0LCBsYXllciB9OiBQaWNrSW5mbzxhbnk+KTogRGF0YVR5cGUge1xuICAvLyBGSVhNRTogYWRkIGRhdGF0eXBlIHRvIHRoZSBsYXllclxuICBjb25zdCBkYXRhID0gbGF5ZXIucHJvcHMuZGF0YTtcbiAgaWYgKGlzRGF0YUZyYW1lKGRhdGEpICYmICEobGF5ZXIgaW5zdGFuY2VvZiBfQWdncmVnYXRpb25MYXllcikpIHJldHVybiBcInRhYmxlXCI7XG4gIHJldHVybiBpc0dlb2pzb24ob2JqZWN0KSA/IFwiZ2VvanNvblwiIDogXCJvYmplY3RcIjtcbn1cblxuZnVuY3Rpb24gaXNHZW9qc29uKG9iamVjdDogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwpOiBvYmplY3QgaXMgRmVhdHVyZSB7XG4gIHJldHVybiBvYmplY3Q/LnR5cGUgPT09IFwiRmVhdHVyZVwiICYmIFwiZ2VvbWV0cnlcIiBpbiBvYmplY3QgJiYgXCJ0eXBlXCIgaW4gb2JqZWN0Lmdlb21ldHJ5O1xufVxuXG50eXBlIEluZm8gPSBPbWl0PE9iamVjdEluZm88RGF0YUZyYW1lLCBhbnk+LCBcInRhcmdldFwiPjtcbnR5cGUgRGF0YUZuID0gKG9iamVjdDogUmVjb3JkPHN0cmluZywgYW55PiwgaW5mbzogSW5mbykgPT4gUmVjb3JkPHN0cmluZywgYW55PjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFjY2Vzc29yRm4oZGF0YVR5cGU6IERhdGFUeXBlKTogRGF0YUZuIHtcbiAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgICAgcmV0dXJuIChfLCB7IGluZGV4LCBkYXRhIH0pID0+IHtcbiAgICAgICAgY29uc3QgZ2VvbXMgPSBPYmplY3Qua2V5cyhkYXRhLmdlb21ldHJ5KTtcbiAgICAgICAgY29uc3Qgb2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgY29sXSBvZiBPYmplY3QuZW50cmllcyhkYXRhLmZyYW1lKSkge1xuICAgICAgICAgIGlmICghZ2VvbXMuaW5jbHVkZXMoa2V5KSkgb2JqZWN0W2tleV0gPSBjb2xbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9O1xuICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgIHJldHVybiAob2JqZWN0KSA9PiAoeyAuLi5vYmplY3QgfSk7XG4gICAgY2FzZSBcImdlb2pzb25cIjpcbiAgICAgIHJldHVybiAob2JqZWN0KSA9PiAoe1xuICAgICAgICBbRkVBVFVSRV9JRF06IG9iamVjdD8uaWQsXG4gICAgICAgIC4uLm9iamVjdD8ucHJvcGVydGllcyxcbiAgICAgIH0pO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoYCR7ZGF0YVR5cGV9IG5vdCBzdXBwb3J0ZWRgKTtcbiAgfVxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b29sdGlwXCI6XCJjeVdMdDRfRzduazV2VDloUHIwb1wiLFwia2VwbGVyXCI6XCJrZXBsZXJcIixcImxpZ2h0XCI6XCJsaWdodFwiLFwibGF5ZXItbmFtZVwiOlwiWjloSEhldDJSWG1MMGlNZWwzWnRcIixcImxheWVyTmFtZVwiOlwiWjloSEhldDJSWG1MMGlNZWwzWnRcIixcInRhYmxlXCI6XCJqcDY1OHlFSExsZXNTUnZ3QndEbFwiLFwiZmllbGQtbmFtZVwiOlwidDlJOGtKeWplRUpFT0Fydk1EN2pcIixcImZpZWxkTmFtZVwiOlwidDlJOGtKeWplRUpFT0Fydk1EN2pcIixcImZpZWxkLXZhbHVlXCI6XCJ2b3ZIcFR1cjAxQlJPck1MbUVGelwiLFwiZmllbGRWYWx1ZVwiOlwidm92SHBUdXIwMUJST3JNTG1FRnpcIn07IiwiaW1wb3J0IHR5cGUgeyBQaWNrSW5mbyB9IGZyb20gXCJAZGVjay5nbC9jb3JlXCI7XG5pbXBvcnQgeyBGRUFUVVJFX0lELCBnZXRQaWNrZWRPYmplY3QgfSBmcm9tIFwiLi9waWNraW5nXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL3Rvb2x0aXAuY3NzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbHRpcFByb3BzIHtcbiAgaW5mbzogUGlja0luZm88YW55Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRvb2x0aXAoeyBpbmZvIH06IFRvb2x0aXBQcm9wcykge1xuICBpZiAoIWluZm8ucGlja2VkIHx8IGluZm8ubGF5ZXIucHJvcHMudG9vbHRpcCA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCB7IHgsIHkgfSA9IGluZm87XG4gIGNvbnN0IHsgbmFtZSwgdG9vbHRpcCB9ID0gaW5mby5sYXllci5wcm9wcztcblxuICBjb25zdCBvYmplY3QgPSBnZXRQaWNrZWRPYmplY3QoaW5mbywgdG9vbHRpcC5kYXRhVHlwZSkhO1xuICBkZWxldGUgb2JqZWN0W0ZFQVRVUkVfSURdO1xuICBjb25zdCBuYW1lcyA9IHRvb2x0aXAuY29scyA9PT0gdHJ1ZSA/IE9iamVjdC5rZXlzKG9iamVjdCkgOiB0b29sdGlwLmNvbHM7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRvb2x0aXB9IHN0eWxlPXt7IHRyYW5zZm9ybTogYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgIH19PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sYXllck5hbWV9PntuYW1lfTwvZGl2PlxuICAgICAgPHRhYmxlIGNsYXNzTmFtZT17c3R5bGVzLnRhYmxlfT5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIHtuYW1lcy5tYXAoKG5hbWUpID0+IChcbiAgICAgICAgICAgIDx0ciBrZXk9e25hbWV9PlxuICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPXtzdHlsZXMuZmllbGROYW1lfT57bmFtZX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPXtzdHlsZXMuZmllbGRWYWx1ZX0+e1N0cmluZyhvYmplY3RbbmFtZV0gPz8gbnVsbCl9PC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwiaW1wb3J0IFwibWFwYm94LWdsXCI7XG5pbXBvcnQgXCJtYXBib3gtZ2wvZGlzdC9tYXBib3gtZ2wuY3NzXCI7XG5cbmltcG9ydCB7IEZyYWdtZW50LCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQaWNrSW5mbywgTWFwVmlldyB9IGZyb20gXCJAZGVjay5nbC9jb3JlXCI7XG5pbXBvcnQgeyBEZWNrR0wgfSBmcm9tIFwiQGRlY2suZ2wvcmVhY3RcIjtcbmltcG9ydCB7IE1hcCBhcyBNYXBHTCB9IGZyb20gXCJyZWFjdC1tYXAtZ2xcIjtcbmltcG9ydCB7IExheWVyIH0gZnJvbSBcIi4vbGF5ZXJcIjtcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tIFwiLi90b29sdGlwXCI7XG5pbXBvcnQgeyBibGVuZGluZ1BhcmFtZXRlcnMgfSBmcm9tIFwiLi9ibGVuZGluZ1wiO1xuaW1wb3J0IHsgX0FnZ3JlZ2F0aW9uTGF5ZXIgfSBmcm9tIFwiQGRlY2suZ2wvYWdncmVnYXRpb24tbGF5ZXJzXCI7XG5pbXBvcnQgeyBEZWNrUHJvcHMgfSBmcm9tIFwiLi9hcHBcIjtcblxuZXhwb3J0IHR5cGUgTWFwUHJvcHMgPSB7XG4gIHByb3BzOiBEZWNrUHJvcHM7XG4gIGxheWVyczogTGF5ZXJbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBNYXAoeyBwcm9wcywgbGF5ZXJzIH06IE1hcFByb3BzKSB7XG4gIGNvbnN0IGRlY2tnbCA9IHVzZVJlZjxEZWNrR0w+KG51bGwpO1xuICBjb25zdCBbaW5mbywgaGFuZGxlSG92ZXJdID0gdXNlSG92ZXIoKTtcblxuICBjb25zdCB7IG1hcGJveEFjY2Vzc1Rva2VuLCBtYXBTdHlsZSwgY29udHJvbGxlciwgcGFyYW1ldGVycywgYmxlbmRpbmdNb2RlLCAuLi5kZWNrUHJvcHMgfSA9IHByb3BzO1xuICBjb25zdCBfcGFyYW1ldGVycyA9IHtcbiAgICAuLi5wYXJhbWV0ZXJzLFxuICAgIC4uLmJsZW5kaW5nUGFyYW1ldGVycyhibGVuZGluZ01vZGUpLFxuICB9O1xuICAvLyBsYXllciBhbmltYXRpb24gbG9vcFxuICBjb25zdCBbdGltZSwgc2V0VGltZV0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgYW5pbWF0aW5nID0gbGF5ZXJzLnNvbWUoKGxheWVyKSA9PiBsYXllci50eXBlID09PSBcIlRyaXBzTGF5ZXJcIik7XG4gIHVzZUFuaW1hdGlvbihhbmltYXRpbmcsICh0aW1lKSA9PiBzZXRUaW1lKHRpbWUpKTtcblxuICBjb25zdCBfbGF5ZXJzOiBhbnkgPSBsYXllcnMubWFwKChsYXllcikgPT4gKGxheWVyLnR5cGUgIT0gbnVsbCA/IGxheWVyLnJlbmRlckxheWVyKHRpbWUpIDogbnVsbCkpO1xuXG4gIHJldHVybiAoXG4gICAgPEZyYWdtZW50PlxuICAgICAgPERlY2tHTFxuICAgICAgICByZWY9e2RlY2tnbH1cbiAgICAgICAgey4uLmRlY2tQcm9wc31cbiAgICAgICAgcGFyYW1ldGVycz17X3BhcmFtZXRlcnN9XG4gICAgICAgIGxheWVycz17X2xheWVyc31cbiAgICAgICAgb25Ib3Zlcj17aGFuZGxlSG92ZXJ9XG4gICAgICA+XG4gICAgICAgIDxNYXBWaWV3IGlkPVwibWFwXCIgY29udHJvbGxlcj17Y29udHJvbGxlcn0gcmVwZWF0PXt0cnVlfT5cbiAgICAgICAgICB7bWFwU3R5bGUgJiYgPE1hcEdMIHJldXNlTWFwcyB7Li4ueyBtYXBib3hBY2Nlc3NUb2tlbiwgbWFwU3R5bGUgfX0gLz59XG4gICAgICAgIDwvTWFwVmlldz5cbiAgICAgIDwvRGVja0dMPlxuICAgICAge2luZm8gJiYgPFRvb2x0aXAgaW5mbz17aW5mb30gLz59XG4gICAgPC9GcmFnbWVudD5cbiAgKTtcbn1cblxuY29uc3QgdXNlSG92ZXIgPSAoKSA9PiB7XG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGU8UGlja0luZm88YW55PiB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGhhbmRsZUhvdmVyID0gdXNlQ2FsbGJhY2soKGluZm86IFBpY2tJbmZvPGFueT4pID0+IHtcbiAgICAvLyBub3QgcGlja2VkIG9yIG5vIHRvb2x0aXAgcHJvcFxuICAgIGlmICghaW5mby5waWNrZWQgfHwgIWluZm8ubGF5ZXIucHJvcHMudG9vbHRpcCB8fCBpbmZvLmxheWVyIGluc3RhbmNlb2YgX0FnZ3JlZ2F0aW9uTGF5ZXIpIHtcbiAgICAgIHJldHVybiBzZXRTdGF0ZShudWxsKTtcbiAgICB9XG5cbiAgICBzZXRTdGF0ZShpbmZvKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiBbc3RhdGUsIGhhbmRsZUhvdmVyXSBhcyBbUGlja0luZm88YW55PiB8IG51bGwsIChpbmZvOiBQaWNrSW5mbzxhbnk+KSA9PiB2b2lkXTtcbn07XG5cbmNvbnN0IHVzZUFuaW1hdGlvbiA9IChlbmFibGVkOiBib29sZWFuLCBvbkZyYW1lOiAodGltZTogbnVtYmVyKSA9PiB2b2lkKSA9PiB7XG4gIGNvbnN0IGFuaW1hdGlvbiA9IHVzZVJlZjxudW1iZXI+KDApO1xuICBjb25zdCBzdGFydFRpbWUgPSB1c2VSZWY8bnVtYmVyPihEYXRlLm5vdygpKTtcblxuICBjb25zdCBhbmltYXRlID0gKCkgPT4ge1xuICAgIG9uRnJhbWUoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZS5jdXJyZW50KTtcbiAgICBhbmltYXRpb24uY3VycmVudCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgYW5pbWF0aW9uLmN1cnJlbnQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICAgICAgcmV0dXJuICgpID0+IHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShhbmltYXRpb24uY3VycmVudCk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2VuYWJsZWRdKTtcbn07XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImtlcGxlclwiOlwia2VwbGVyXCIsXCJsaWdodFwiOlwibGlnaHRcIixcImxlZ2VuZFwiOlwiZGVQa2hibkpDT0hZVUFqX05TWGpcIixcImxheWVyXCI6XCJVc3d3a2FNRG9pYjR5dGM2MFpuOVwiLFwibGF5ZXItbmFtZVwiOlwiY2k1RUlGekg3cjEwQUc2QnNxaUdcIixcImxheWVyTmFtZVwiOlwiY2k1RUlGekg3cjEwQUc2QnNxaUdcIixcInNjYWxlXCI6XCJ0YzJpWEJrX2ZSNnE1R1dXcG85bVwiLFwic2NhbGUtbmFtZVwiOlwiUllXekw3S0dEWUhJWTJOSGJGNVhcIixcInNjYWxlTmFtZVwiOlwiUllXekw3S0dEWUhJWTJOSGJGNVhcIixcInNjYWxlLWJ5XCI6XCJybjY4cHFza29yUUdHY1lfc3FVZ1wiLFwic2NhbGVCeVwiOlwicm42OHBxc2tvclFHR2NZX3NxVWdcIixcImZpZWxkLW5hbWVcIjpcIm5ZcHpnXzQ4SXlIRmV0NERNU2JUXCIsXCJmaWVsZE5hbWVcIjpcIm5ZcHpnXzQ4SXlIRmV0NERNU2JUXCIsXCJjb2xvci1zY2FsZVwiOlwiaHJicUdmOVlKWUNxTjNfdE1JMUxcIixcImNvbG9yU2NhbGVcIjpcImhyYnFHZjlZSllDcU4zX3RNSTFMXCIsXCJ0aWNrXCI6XCJOcTJYQzVDbVdHRzJQU2dIOTJUclwiLFwibGluZVwiOlwibmpjaXRQZkNQbHI3b2hwZWlnOTJcIn07IiwiaW1wb3J0IHR5cGUgeyBTY2FsZUxpbmVhciwgU2NhbGVMb2dhcml0aG1pYywgU2NhbGVQb3dlciB9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHtcbiAgQWNjZXNzb3JTY2FsZSxcbiAgQWNjZXNzb3JTY2FsZUNhdGVnb3J5LFxuICBBY2Nlc3NvclNjYWxlQ29udGludW91cyxcbiAgQWNjZXNzb3JTY2FsZURpc2NyZXRlLFxuICBpc0NvbG9yU2NhbGUsXG4gIGlzQ29udGludW91c1NjYWxlLFxuICBpc0Rpc2NyZXRlU2NhbGUsXG59IGZyb20gXCIuL3NjYWxlXCI7XG5pbXBvcnQgdHlwZSB7IExlZ2VuZEluZm8gfSBmcm9tIFwiLi9sYXllclwiO1xuaW1wb3J0IHsgcmdiYSB9IGZyb20gXCIuL2NvbG9yXCI7XG5pbXBvcnQgeyB3b3JkcyB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vbGVnZW5kLmNzc1wiO1xuXG5jb25zdCBUSUNLX0hFSUdIVCA9IDE2O1xuY29uc3QgVElDS19GT05UX1NJWkUgPSAxMTtcblxuZXhwb3J0IHR5cGUgTGVnZW5kUHJvcHMgPSB7XG4gIGxheWVyczogTGVnZW5kSW5mb1tdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIExlZ2VuZCh7IGxheWVycyB9OiBMZWdlbmRQcm9wcykge1xuICBpZiAobGF5ZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2VuZH0+XG4gICAgICB7bGF5ZXJzLm1hcCgobGF5ZXIpID0+IChcbiAgICAgICAgPExheWVyIGtleT17bGF5ZXIuaWR9IHsuLi5sYXllcn0gLz5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBMYXllcih7IG5hbWUsIHNjYWxlcyB9OiBMZWdlbmRJbmZvKSB7XG4gIGlmIChzY2FsZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGF5ZXJ9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sYXllck5hbWV9IHRpdGxlPXtuYW1lfT5cbiAgICAgICAge25hbWV9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtzY2FsZXMubWFwKChzY2FsZSkgPT4gKFxuICAgICAgICA8U2NhbGUga2V5PXtzY2FsZS5uYW1lfSB7Li4uc2NhbGV9IC8+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU2NhbGUoc2NhbGU6IEFjY2Vzc29yU2NhbGU8bnVtYmVyIHwgQ29sb3I+KSB7XG4gIGNvbnN0IHNjYWxlTmFtZSA9IHdvcmRzKHNjYWxlLm5hbWUucmVwbGFjZSgvXmdldC8sIFwiXCIpKTtcbiAgY29uc3QgaXNDb2xvciA9IGlzQ29sb3JTY2FsZShzY2FsZSk7XG4gIGNvbnN0IGlzQ29udGludW91cyA9IGlzQ29udGludW91c1NjYWxlKHNjYWxlKTtcbiAgY29uc3QgaXNEaXNjcmV0ZSA9IGlzRGlzY3JldGVTY2FsZShzY2FsZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnNjYWxlfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuc2NhbGVOYW1lfT57c2NhbGVOYW1lfTwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc2NhbGVCeX0+YnkgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZmllbGROYW1lfSB0aXRsZT17c2NhbGUuY29sfT5cbiAgICAgICAge3NjYWxlLnNjYWxlQnkgPz8gc2NhbGUuY29sfVxuICAgICAgPC9zcGFuPlxuICAgICAge2lzQ29sb3IgJiYgaXNDb250aW51b3VzICYmIDxDb250aW51b3VzIHsuLi4oc2NhbGUgYXMgQWNjZXNzb3JTY2FsZUNvbnRpbnVvdXM8Q29sb3I+KX0gLz59XG4gICAgICB7aXNDb2xvciAmJiBpc0Rpc2NyZXRlICYmIDxEaXNjcmV0ZSB7Li4uKHNjYWxlIGFzIEFjY2Vzc29yU2NhbGVEaXNjcmV0ZTxDb2xvcj4pfSAvPn1cbiAgICAgIHtpc0NvbG9yICYmIHNjYWxlLnNjYWxlID09PSBcImNhdGVnb3J5XCIgJiYgKFxuICAgICAgICA8Q2F0ZWdvcnkgey4uLihzY2FsZSBhcyBBY2Nlc3NvclNjYWxlQ2F0ZWdvcnk8Q29sb3I+KX0gLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmNvbnN0IENvbnRpbnVvdXMgPSAoeyB0aWNrcywgc2NhbGVEYXRhIH06IEFjY2Vzc29yU2NhbGVDb250aW51b3VzPENvbG9yPikgPT4ge1xuICBjb25zdCBsaW5lcyA9IHRpY2tzLm1hcCgoXywgaW5kZXgpID0+IGluZGV4KS5zbGljZSgxLCAtMSk7XG4gIGNvbnN0IGdyYWRpZW50SGVpZ2h0ID0gVElDS19IRUlHSFQgKiAodGlja3MubGVuZ3RoIC0gMSk7XG4gIGNvbnN0IGhlaWdodCA9IGdyYWRpZW50SGVpZ2h0ICsgVElDS19GT05UX1NJWkUgKyAxO1xuXG4gIHJldHVybiAoXG4gICAgPHN2ZyBjbGFzc05hbWU9e3N0eWxlcy5jb2xvclNjYWxlfSBoZWlnaHQ9e2hlaWdodH0gc2hhcGVSZW5kZXJpbmc9XCJjcmlzcEVkZ2VzXCI+XG4gICAgICA8c3ZnIHk9ezV9PlxuICAgICAgICA8aW1hZ2VcbiAgICAgICAgICB3aWR0aD17MjB9XG4gICAgICAgICAgaGVpZ2h0PXtncmFkaWVudEhlaWdodH1cbiAgICAgICAgICBocmVmPXtnZXRDb2xvckdyYWRpZW50KHNjYWxlRGF0YSl9XG4gICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz1cIm5vbmVcIlxuICAgICAgICAvPlxuICAgICAgICB7bGluZXMubWFwKChpbmRleCkgPT4gKFxuICAgICAgICAgIDxsaW5lXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMubGluZX1cbiAgICAgICAgICAgIHgyPXsyMH1cbiAgICAgICAgICAgIHkxPXtUSUNLX0hFSUdIVCAqIGluZGV4fVxuICAgICAgICAgICAgeTI9e1RJQ0tfSEVJR0hUICogaW5kZXh9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSl9XG4gICAgICA8L3N2Zz5cbiAgICAgIDxUaWNrcyB0aWNrcz17dGlja3N9IHk9ey0yfSAvPlxuICAgIDwvc3ZnPlxuICApO1xufTtcblxuY29uc3QgRGlzY3JldGUgPSAoeyB0aWNrcywgcmFuZ2UgfTogQWNjZXNzb3JTY2FsZURpc2NyZXRlPENvbG9yPikgPT4ge1xuICBjb25zdCBjb2xvcnMgPSByYW5nZS5tYXAocmdiYSk7XG4gIGNvbnN0IHNjYWxlSGVpZ2h0ID0gVElDS19IRUlHSFQgKiAodGlja3MubGVuZ3RoIC0gMSk7XG4gIGNvbnN0IGhlaWdodCA9IHNjYWxlSGVpZ2h0ICsgVElDS19GT05UX1NJWkUgKyAxO1xuXG4gIHJldHVybiAoXG4gICAgPHN2ZyBjbGFzc05hbWU9e3N0eWxlcy5jb2xvclNjYWxlfSBoZWlnaHQ9e2hlaWdodH0gc2hhcGVSZW5kZXJpbmc9XCJjcmlzcEVkZ2VzXCI+XG4gICAgICA8c3ZnIHk9ezV9PlxuICAgICAgICB7Y29sb3JzLm1hcCgoY29sb3IsIGluZGV4KSA9PiAoXG4gICAgICAgICAgPHJlY3Qga2V5PXtpbmRleH0gd2lkdGg9ezIwfSBoZWlnaHQ9e1RJQ0tfSEVJR0hUfSB5PXtpbmRleCAqIFRJQ0tfSEVJR0hUfSBmaWxsPXtjb2xvcn0gLz5cbiAgICAgICAgKSl9XG4gICAgICA8L3N2Zz5cbiAgICAgIDxUaWNrcyB0aWNrcz17dGlja3N9IHk9ey0yfSAvPlxuICAgIDwvc3ZnPlxuICApO1xufTtcblxuZnVuY3Rpb24gQ2F0ZWdvcnkoeyB0aWNrcywgcmFuZ2UsIHVua25vd25UaWNrLCB1bmtub3duIH06IEFjY2Vzc29yU2NhbGVDYXRlZ29yeTxDb2xvcj4pIHtcbiAgY29uc3QgX3JhbmdlID0gdW5rbm93blRpY2sgPyBbLi4ucmFuZ2UsIHVua25vd25dIDogcmFuZ2U7XG4gIGNvbnN0IF90aWNrcyA9IHVua25vd25UaWNrID8gWy4uLnRpY2tzLCB1bmtub3duVGlja10gOiB0aWNrcztcbiAgY29uc3QgY29sb3JzID0gX3JhbmdlLm1hcChyZ2JhKTtcbiAgY29uc3QgaGVpZ2h0ID0gVElDS19IRUlHSFQgKiBfdGlja3MubGVuZ3RoO1xuXG4gIHJldHVybiAoXG4gICAgPHN2ZyBjbGFzc05hbWU9e3N0eWxlcy5jb2xvclNjYWxlfSBoZWlnaHQ9e2hlaWdodH0+XG4gICAgICA8c3ZnPlxuICAgICAgICB7Y29sb3JzLm1hcCgoY29sb3IsIGluZGV4KSA9PiAoXG4gICAgICAgICAgPHJlY3Qga2V5PXtpbmRleH0gd2lkdGg9ezIwfSBoZWlnaHQ9ezE0fSB5PXsxICsgaW5kZXggKiBUSUNLX0hFSUdIVH0gZmlsbD17Y29sb3J9IC8+XG4gICAgICAgICkpfVxuICAgICAgPC9zdmc+XG4gICAgICA8VGlja3MgdGlja3M9e190aWNrc30gLz5cbiAgICA8L3N2Zz5cbiAgKTtcbn1cblxudHlwZSBUaWNrc1Byb3BzID0ge1xuICB0aWNrczogYW55W107XG4gIHg/OiBzdHJpbmcgfCBudW1iZXI7XG4gIHk/OiBzdHJpbmcgfCBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBUaWNrcyh7IHRpY2tzLCB4ID0gMjgsIHkgPSAwIH06IFRpY2tzUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8c3ZnIHsuLi57IHgsIHkgfX0+XG4gICAgICB7dGlja3MubWFwKCh0aWNrLCBpbmRleCkgPT4gKFxuICAgICAgICA8dGV4dCBrZXk9e2luZGV4fSBjbGFzc05hbWU9e3N0eWxlcy50aWNrfSB5PXtUSUNLX0hFSUdIVCAqIGluZGV4fSBkeT17VElDS19GT05UX1NJWkV9PlxuICAgICAgICAgIHtTdHJpbmcodGljayl9XG4gICAgICAgIDwvdGV4dD5cbiAgICAgICkpfVxuICAgIDwvc3ZnPlxuICApO1xufVxuXG50eXBlIFNjYWxlQ29udGludW91czxUPiA9IFNjYWxlTGluZWFyPFQsIFQ+IHwgU2NhbGVQb3dlcjxULCBUPiB8IFNjYWxlTG9nYXJpdGhtaWM8VCwgVD47XG5cbmZ1bmN0aW9uIGdldENvbG9yR3JhZGllbnQoc2NhbGU6IFNjYWxlQ29udGludW91czxDb2xvcj4sIG4gPSAyMDApOiBzdHJpbmcge1xuICBjb25zdCBsZW5ndGggPSBzY2FsZS5yYW5nZSgpLmxlbmd0aDtcbiAgY29uc3QgcmFuZ2U6IGFueSA9IFsuLi5BcnJheShsZW5ndGgpLmtleXMoKV0ubWFwKCh4KSA9PiB4IC8gKGxlbmd0aCAtIDEpKTtcbiAgY29uc3QgaW52ZXJ0ID0gc2NhbGUuY29weSgpLnJhbmdlKHJhbmdlKS5pbnZlcnQ7XG5cbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gIGNhbnZhcy53aWR0aCA9IDE7XG4gIGNhbnZhcy5oZWlnaHQgPSBuO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgY29udGV4dCEuZmlsbFN0eWxlID0gcmdiYShzY2FsZShpbnZlcnQoaSAvIG4pKSk7XG4gICAgY29udGV4dCEuZmlsbFJlY3QoMCwgaSwgMSwgMSk7XG4gIH1cblxuICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTCgpO1xufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJyZGVja1wiOlwicmRlY2tcIixcImtlcGxlclwiOlwia2VwbGVyXCIsXCJsaWdodFwiOlwibGlnaHRcIixcImNvbnRyb2wtY29udGFpbmVyXCI6XCJTOUNKSVZYVkFLMEkzQ3V0ZEk2Z1wiLFwiY29udHJvbENvbnRhaW5lclwiOlwiUzlDSklWWFZBSzBJM0N1dGRJNmdcIixcImxlZnRcIjpcIllkam1DWDZ6SzZiU0syaGYxZjEwXCIsXCJyaWdodFwiOlwiVVZPcTVneFFoa3BxOHNDcVJnSTJcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJrZXBsZXJcIjpcImtlcGxlclwiLFwibGlnaHRcIjpcImxpZ2h0XCIsXCJ0b2dnbGUtYnV0dG9uXCI6XCJ2dUFPeURfNXRXbVkyUlBIVHVZWVwiLFwidG9nZ2xlQnV0dG9uXCI6XCJ2dUFPeURfNXRXbVkyUlBIVHVZWVwiLFwicGFuZWxcIjpcIm42anBwVnhFQktPajFoU0JZWjZfXCIsXCJoZWFkZXJcIjpcIktRZkhtWWJaZjVjbUs5ZTZ0M2lLXCIsXCJidXR0b25cIjpcIkxaWFl3X2lVRWVQVk5VUWdWNDBoXCIsXCJ0ZXh0XCI6XCJEYnptUDRfaEo2d1k2MjhjU1poR1wiLFwiYm9keVwiOlwieEtEampSYkpTWnhnMHh5RDBuQUlcIixcImdyb3VwLWNvbnRhaW5lclwiOlwidkxHaXBwU3VNSXl0Z1h1b2ZDS2RcIixcImdyb3VwQ29udGFpbmVyXCI6XCJ2TEdpcHBTdU1JeXRnWHVvZkNLZFwiLFwibGFiZWxcIjpcImZHMThmN1pHZXBRXzJGY1RyUGxqXCIsXCJjaGVja2VkXCI6XCJtSGtKWEFvSFJhSmk1dVRKMUhnTlwiLFwiY2hlY2tib3hcIjpcInlFbWxkcFBtNXBZX3FfUU9hWUJNXCIsXCJpY29uXCI6XCJzNE56eU04SG1VeU9Vamh3RkdUR1wifTsiLCJpbXBvcnQgeyBGcmFnbWVudCwgUHJvcHNXaXRoQ2hpbGRyZW4sIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ2hlY2tCb3hPdXRsaW5lQmxhbmssIENoZWNrQm94LCBJbmRldGVybWluYXRlQ2hlY2tCb3gsIExheWVycyB9IGZyb20gXCJAbXVpL2ljb25zLW1hdGVyaWFsXCI7XG5cbmltcG9ydCB7IFZpc2liaWxpdHlJbmZvIH0gZnJvbSBcIi4vbGF5ZXJcIjtcbmltcG9ydCB7IGNsYXNzTmFtZXMsIGdyb3VwQnkgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL2xheWVyLXNlbGVjdG9yLmNzc1wiO1xuXG5jb25zdCBOT19HUk9VUCA9IERhdGUubm93KCk7XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUJ1dHRvblByb3BzID0gUHJvcHNXaXRoQ2hpbGRyZW48e1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHRvb2x0aXA/OiBzdHJpbmc7XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG59PjtcblxuZXhwb3J0IGZ1bmN0aW9uIFRvZ2dsZUJ1dHRvbih7IGNsYXNzTmFtZSwgdG9vbHRpcCwgb25DbGljaywgY2hpbGRyZW4gfTogVG9nZ2xlQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uIGNsYXNzTmFtZT17Y2xhc3NOYW1lfSB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17b25DbGlja30gdGl0bGU9e3Rvb2x0aXB9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgdHlwZSBMYXllclNlbGVjdG9yUHJvcHMgPSB7XG4gIGxheWVyczogVmlzaWJpbGl0eUluZm9bXTtcbiAgb25WaXNpYmlsaXR5Q2hhbmdlOiAobGF5ZXJzOiBWaXNpYmlsaXR5SW5mb1tdKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIExheWVyU2VsZWN0b3IoeyBsYXllcnMsIG9uVmlzaWJpbGl0eUNoYW5nZSB9OiBMYXllclNlbGVjdG9yUHJvcHMpIHtcbiAgY29uc3QgZ3JvdXBzID0gZ3JvdXBCeShsYXllcnMsIChsYXllcikgPT4gbGF5ZXIuZ3JvdXBOYW1lID8/IGAke2xheWVyLm5hbWV9LSR7Tk9fR1JPVVB9YCk7XG5cbiAgY29uc3QgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9IChjaGFuZ2VkOiBWaXNpYmlsaXR5SW5mb1tdLCB2aXNpYmxlOiBib29sZWFuLCBmb2N1czogYm9vbGVhbikgPT4ge1xuICAgIGlmIChmb2N1cykge1xuICAgICAgY29uc3Qgbm90Q2hhbmdlZCA9IGxheWVycy5maWx0ZXIoKGxheWVyKSA9PiAhY2hhbmdlZC5pbmNsdWRlcyhsYXllcikpO1xuICAgICAgY29uc3Qgbm9uRm9jdXMgPSAhbm90Q2hhbmdlZC5zb21lKChsYXllcikgPT4gbGF5ZXIudmlzaWJsZSk7XG4gICAgICByZXR1cm4gb25WaXNpYmlsaXR5Q2hhbmdlKFxuICAgICAgICBsYXllcnMubWFwKChsYXllcikgPT4gKHtcbiAgICAgICAgICAuLi5sYXllcixcbiAgICAgICAgICB2aXNpYmxlOiBjaGFuZ2VkLmluY2x1ZGVzKGxheWVyKSA/IHZpc2libGUgOiBub25Gb2N1cyxcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH1cblxuICAgIG9uVmlzaWJpbGl0eUNoYW5nZShjaGFuZ2VkLm1hcCgobGF5ZXIpID0+ICh7IC4uLmxheWVyLCB2aXNpYmxlIH0pKSk7XG4gIH07XG5cbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlT3BlbkNoYW5nZSA9ICgpID0+IHNldElzT3BlbigoaXNPcGVuKSA9PiAhaXNPcGVuKTtcblxuICBpZiAoIWlzT3Blbikge1xuICAgIHJldHVybiAoXG4gICAgICA8VG9nZ2xlQnV0dG9uXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRvZ2dsZUJ1dHRvbn1cbiAgICAgICAgdG9vbHRpcD1cIkxheWVyIHNlbGVjdG9yXCJcbiAgICAgICAgb25DbGljaz17aGFuZGxlT3BlbkNoYW5nZX1cbiAgICAgID5cbiAgICAgICAgPExheWVycyBjbGFzc05hbWU9e3N0eWxlcy5pY29ufSBmb250U2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgIDwvVG9nZ2xlQnV0dG9uPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucGFuZWx9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PlxuICAgICAgICA8VG9nZ2xlQnV0dG9uIGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gb25DbGljaz17aGFuZGxlT3BlbkNoYW5nZX0gdG9vbHRpcD1cIkNsb3NlXCI+XG4gICAgICAgICAgPExheWVycyBjbGFzc05hbWU9e3N0eWxlcy5pY29ufSBmb250U2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fT5MYXllcnM8L3NwYW4+XG4gICAgICAgIDwvVG9nZ2xlQnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICB7QXJyYXkuZnJvbShncm91cHMuZW50cmllcygpLCAoW2tleSwgbGF5ZXJzLCBbeyBncm91cE5hbWU6IGdyb3VwIH1dID0gbGF5ZXJzXSkgPT4gKFxuICAgICAgICAgIDxDaGVja2JveEdyb3VwIGtleT17a2V5fSB7Li4ueyBncm91cCwgbGF5ZXJzLCBvbkNoYW5nZTogaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSB9fSAvPlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG50eXBlIENoZWNrYm94R3JvdXBQcm9wcyA9IHtcbiAgZ3JvdXA6IHN0cmluZyB8IG51bGw7XG4gIGxheWVyczogVmlzaWJpbGl0eUluZm9bXTtcbiAgb25DaGFuZ2U6IChsYXllcnM6IFZpc2liaWxpdHlJbmZvW10sIHZpc2libGU6IGJvb2xlYW4sIGZvY3VzOiBib29sZWFuKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gQ2hlY2tib3hHcm91cCh7IGdyb3VwLCBsYXllcnMsIG9uQ2hhbmdlIH06IENoZWNrYm94R3JvdXBQcm9wcykge1xuICBjb25zdCBjaGVja2JveGVzID0gQXJyYXkuZnJvbShcbiAgICBncm91cEJ5KGxheWVycywgKGxheWVyKSA9PiBsYXllci5uYW1lKSxcbiAgICAoW25hbWUsIGxheWVyc10pID0+IDxDaGVja2JveCBrZXk9e25hbWV9IHsuLi57IG5hbWUsIGxheWVycywgb25DaGFuZ2UgfX0gLz5cbiAgKTtcblxuICByZXR1cm4gZ3JvdXAgPyAoXG4gICAgPEZyYWdtZW50PlxuICAgICAgPENoZWNrYm94IHsuLi57IG5hbWU6IGdyb3VwLCBsYXllcnMsIG9uQ2hhbmdlIH19IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmdyb3VwQ29udGFpbmVyfT57Y2hlY2tib3hlc308L2Rpdj5cbiAgICA8L0ZyYWdtZW50PlxuICApIDogKFxuICAgIDxGcmFnbWVudD57Y2hlY2tib3hlc308L0ZyYWdtZW50PlxuICApO1xufVxuXG50eXBlIENoZWNrYm94UHJvcHMgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGF5ZXJzOiBWaXNpYmlsaXR5SW5mb1tdO1xuICBvbkNoYW5nZTogKGxheWVyczogVmlzaWJpbGl0eUluZm9bXSwgdmlzaWJsZTogYm9vbGVhbiwgZm9jdXM6IGJvb2xlYW4pID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBDaGVja2JveCh7IG5hbWUsIGxheWVycywgb25DaGFuZ2UgfTogQ2hlY2tib3hQcm9wcykge1xuICBjb25zdCBjaGVja2VkID0gaXNWaXNpYmxlKGxheWVycyk7XG4gIGNvbnN0IGluZGV0ZXJtaW5hdGUgPSBjaGVja2VkID09PSBudWxsO1xuXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xuICAgIH1cbiAgfSwgW2luZGV0ZXJtaW5hdGVdKTtcblxuICBjb25zdCBjYW5jZWwgPSB1c2VSZWY8KCkgPT4gYm9vbGVhbj4oKCkgPT4gZmFsc2UpO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoKSA9PiB7XG4gICAgLy8gaWYgYSBkZWxheSB3YXMgY2FuY2VsbGVkLCBjaGVja2JveCB3YXMgY2hlY2tlZCB3aXRoaW4gZGVsYXkgcGVyaW9kXG4gICAgY29uc3QgY2FuY2VsbGVkID0gY2FuY2VsLmN1cnJlbnQoKTtcbiAgICAvLyBkb3VibGUtY2xpY2sgLT4gc2hvdyBsYXllciBhbmQgZm9jdXNcbiAgICBpZiAoY2FuY2VsbGVkKSBvbkNoYW5nZShsYXllcnMsIHRydWUsIHRydWUpO1xuICAgIC8vIHNpbmdsZS1jbGljayAtPiBjaGFuZ2UgbGF5ZXIgd2l0aCBzbWFsbCBkZWxheVxuICAgIGVsc2UgY2FuY2VsLmN1cnJlbnQgPSBkZWxheSgoKSA9PiBvbkNoYW5nZShsYXllcnMsICFjaGVja2VkLCBmYWxzZSksIDIwMCk7XG4gIH07XG5cbiAgY29uc3QgQ2hlY2tCb3hJY29uID0gY2hlY2tlZFxuICAgID8gQ2hlY2tCb3hcbiAgICA6IGluZGV0ZXJtaW5hdGVcbiAgICA/IEluZGV0ZXJtaW5hdGVDaGVja0JveFxuICAgIDogQ2hlY2tCb3hPdXRsaW5lQmxhbms7XG5cbiAgY29uc3QgY2xhc3NlcyA9IGNsYXNzTmFtZXMoc3R5bGVzLmxhYmVsLCBjaGVja2VkIHx8IGluZGV0ZXJtaW5hdGUgPyBzdHlsZXMuY2hlY2tlZCA6IG51bGwpO1xuICByZXR1cm4gKFxuICAgIDxsYWJlbCBjbGFzc05hbWU9e2NsYXNzZXN9PlxuICAgICAgPGlucHV0XG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmNoZWNrYm94fVxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICBjaGVja2VkPXtjaGVja2VkID8/IHRydWV9XG4gICAgICAvPlxuICAgICAgPENoZWNrQm94SWNvbiBmb250U2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPXtzdHlsZXMuaWNvbn0gLz5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnRleHR9PntuYW1lfTwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5mdW5jdGlvbiBpc1Zpc2libGUobGF5ZXJzOiBWaXNpYmlsaXR5SW5mb1tdKSB7XG4gIGxldCB2aXNpYmxlID0gbGF5ZXJzWzBdLnZpc2libGU7XG4gIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgaWYgKGxheWVyLnZpc2libGUgIT09IHZpc2libGUpIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHZpc2libGU7XG59XG5cbmNvbnN0IGRlbGF5ID0gKG9uVGltZW91dDogKCkgPT4gdm9pZCwgZGVsYXkgPSAyMDApID0+IHtcbiAgY29uc3QgcmFmID0geyBjdXJyZW50OiAwIH07XG4gIGxldCBzdGFydFRpbWUgPSAwO1xuXG4gIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICBpZiAocmFmLmN1cnJlbnQgPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgIGdsb2JhbFRoaXMuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmLmN1cnJlbnQpO1xuICAgIHJhZi5jdXJyZW50ID0gMDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBsb29wID0gKHRpbWVzdGFtcDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFzdGFydFRpbWUpIHtcbiAgICAgIHN0YXJ0VGltZSA9IHRpbWVzdGFtcDtcbiAgICB9XG5cbiAgICBpZiAodGltZXN0YW1wIC0gc3RhcnRUaW1lID4gZGVsYXkpIHtcbiAgICAgIHJhZi5jdXJyZW50ID0gMDtcbiAgICAgIG9uVGltZW91dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJhZi5jdXJyZW50ID0gZ2xvYmFsVGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobG9vcCk7XG4gIH07XG5cbiAgcmFmLmN1cnJlbnQgPSBnbG9iYWxUaGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTtcbiAgcmV0dXJuIGNhbmNlbDtcbn07XG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSW5pdGlhbFZpZXdTdGF0ZVByb3BzLCBXZWJNZXJjYXRvclZpZXdwb3J0IH0gZnJvbSBcIkBkZWNrLmdsL2NvcmVcIjtcbmltcG9ydCB0eXBlIHsgRGVja0dMUHJvcHMgfSBmcm9tIFwiQGRlY2suZ2wvcmVhY3RcIjtcbmltcG9ydCB7IE1hcFByb3BzIH0gZnJvbSBcInJlYWN0LW1hcC1nbFwiO1xuXG5pbXBvcnQgeyBMYXllciwgTGF5ZXJQcm9wcywgVmlzaWJpbGl0eUluZm8gfSBmcm9tIFwiLi9sYXllclwiO1xuaW1wb3J0IHsgTWFwIH0gZnJvbSBcIi4vbWFwXCI7XG5pbXBvcnQgeyBMZWdlbmQgfSBmcm9tIFwiLi9sZWdlbmRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vYXBwLmNzc1wiO1xuaW1wb3J0IHsgY2xhc3NOYW1lcyB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IExheWVyU2VsZWN0b3IgfSBmcm9tIFwiLi9sYXllci1zZWxlY3RvclwiO1xuXG5leHBvcnQgdHlwZSBEZWNrUHJvcHMgPSBEZWNrR0xQcm9wcyAmXG4gIFBpY2s8TWFwUHJvcHMsIFwibWFwYm94QWNjZXNzVG9rZW5cIiB8IFwibWFwU3R5bGVcIj4gJiB7XG4gICAgaW5pdGlhbEJvdW5kcz86IEJvdW5kcztcbiAgICBibGVuZGluZ01vZGU6IEJsZW5kaW5nTW9kZTtcbiAgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBcHBQcm9wcyB7XG4gIHByb3BzOiBEZWNrUHJvcHM7XG4gIGxheWVyczogTGF5ZXJQcm9wc1tdO1xuICB0aGVtZTogXCJrZXBsZXJcIiB8IFwibGlnaHRcIjtcbiAgbGF6eUxvYWQ6IGJvb2xlYW47XG4gIGxheWVyU2VsZWN0b3I6IGJvb2xlYW47XG4gIG9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlOiAobGF5ZXJzOiBWaXNpYmlsaXR5SW5mb1tdKSA9PiB2b2lkO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFwcCh7XG4gIHByb3BzLFxuICBsYXllcnMsXG4gIHRoZW1lLFxuICBsYXp5TG9hZCxcbiAgbGF5ZXJTZWxlY3RvcixcbiAgb25MYXllclZpc2liaWxpdHlDaGFuZ2UsXG4gIHdpZHRoLFxuICBoZWlnaHQsXG59OiBBcHBQcm9wcykge1xuICBjb25zdCB7IGluaXRpYWxCb3VuZHMsIGluaXRpYWxWaWV3U3RhdGUsIC4uLmRlY2tnbFByb3BzIH0gPSBwcm9wcztcblxuICAvLyBmaXQgYm91bmRzXG4gIGNvbnN0IF9pbml0aWFsVmlld1N0YXRlID0gdXNlQm91bmRzKHdpZHRoLCBoZWlnaHQsIGluaXRpYWxCb3VuZHMsIGluaXRpYWxWaWV3U3RhdGUpO1xuICBjb25zdCBfbGF5ZXJzID0gbGF5ZXJzLm1hcChMYXllci5jcmVhdGUpO1xuXG4gIGNvbnN0IGNvbnRhaW5lciA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGluVmlld3BvcnQgPSB1c2VJblZpZXdwb3J0KGNvbnRhaW5lciwgbGF6eUxvYWQpO1xuICBjb25zdCBzaG91bGRSZW5kZXIgPSAhbGF6eUxvYWQgfHwgaW5WaWV3cG9ydDtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtjb250YWluZXJ9IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucmRlY2ssIHRoZW1lKX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuY29udHJvbENvbnRhaW5lciwgc3R5bGVzLmxlZnQpfT5cbiAgICAgICAge2xheWVyU2VsZWN0b3IgJiYgKFxuICAgICAgICAgIDxMYXllclNlbGVjdG9yXG4gICAgICAgICAgICBsYXllcnM9e19sYXllcnNcbiAgICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnByb3BzLnZpc2liaWxpdHlUb2dnbGUpXG4gICAgICAgICAgICAgIC5tYXAoKGxheWVyKSA9PiBsYXllci5yZW5kZXJTZWxlY3RvcigpKVxuICAgICAgICAgICAgICAucmV2ZXJzZSgpfVxuICAgICAgICAgICAgb25WaXNpYmlsaXR5Q2hhbmdlPXtvbkxheWVyVmlzaWJpbGl0eUNoYW5nZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICB7c2hvdWxkUmVuZGVyICYmIChcbiAgICAgICAgPE1hcCBwcm9wcz17eyAuLi5kZWNrZ2xQcm9wcywgaW5pdGlhbFZpZXdTdGF0ZTogX2luaXRpYWxWaWV3U3RhdGUgfX0gbGF5ZXJzPXtfbGF5ZXJzfSAvPlxuICAgICAgKX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5jb250cm9sQ29udGFpbmVyLCBzdHlsZXMucmlnaHQpfT5cbiAgICAgICAgPExlZ2VuZFxuICAgICAgICAgIGxheWVycz17X2xheWVyc1xuICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnByb3BzLnZpc2libGUpXG4gICAgICAgICAgICAubWFwKChsYXllcikgPT4gbGF5ZXIucmVuZGVyTGVnZW5kKCkpXG4gICAgICAgICAgICAucmV2ZXJzZSgpfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIHVzZUJvdW5kcyhcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGluaXRpYWxCb3VuZHM/OiBCb3VuZHMsXG4gIGluaXRpYWxWaWV3U3RhdGU/OiBJbml0aWFsVmlld1N0YXRlUHJvcHNcbikge1xuICByZXR1cm4gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGluaXRpYWxCb3VuZHMpKSB7XG4gICAgICByZXR1cm4gaW5pdGlhbFZpZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCBbeG1pbiwgeW1pbiwgeG1heCwgeW1heF0gPSBpbml0aWFsQm91bmRzO1xuICAgIC8vIGNvbnN0cmFpbiB0byB3ZWIgbWVyY2F0b3IgbGltaXRzXG4gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2ViX01lcmNhdG9yX3Byb2plY3Rpb25cbiAgICBjb25zdCBib3VuZHM6IFtbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdXSA9IFtcbiAgICAgIFtNYXRoLm1heCgtMTgwLCB4bWluKSwgTWF0aC5tYXgoeW1pbiwgLTg1LjA1MTEyOSldLFxuICAgICAgW01hdGgubWluKDE4MCwgeG1heCksIE1hdGgubWluKHltYXgsIDg1LjA1MTEyOSldLFxuICAgIF07XG5cbiAgICBjb25zdCB2aWV3cG9ydCA9IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICBjb25zdCB7IGxvbmdpdHVkZSwgbGF0aXR1ZGUsIHpvb20gfSA9IHZpZXdwb3J0LmZpdEJvdW5kcyhib3VuZHMpO1xuXG4gICAgcmV0dXJuIHsgLi4uaW5pdGlhbFZpZXdTdGF0ZSwgbG9uZ2l0dWRlLCBsYXRpdHVkZSwgem9vbSB9O1xuICB9LCBbaW5pdGlhbEJvdW5kcywgaW5pdGlhbFZpZXdTdGF0ZSwgd2lkdGgsIGhlaWdodF0pO1xufVxuXG5mdW5jdGlvbiB1c2VJblZpZXdwb3J0KHJlZjogUmVmT2JqZWN0PEhUTUxFbGVtZW50PiwgZW5hYmxlZDogYm9vbGVhbikge1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChlbmFibGVkICYmIHJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgICBzZXRTdGF0ZShlbnRyaWVzWzBdLmlzSW50ZXJzZWN0aW5nKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyB0aHJlc2hvbGQ6IDAgfVxuICAgICAgKTtcblxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShyZWYuY3VycmVudCk7XG4gICAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfSwgW2VuYWJsZWQsIHJlZl0pO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cbiIsImltcG9ydCB7IEluaXRpYWxWaWV3U3RhdGVQcm9wcywgV2ViTWVyY2F0b3JWaWV3cG9ydCB9IGZyb20gXCJAZGVjay5nbC9jb3JlXCI7XG5pbXBvcnQgeyBwaWNrIH0gZnJvbSBcIi4vdXRpbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1N0YXRlKHZpZXdTdGF0ZTogV2ViTWVyY2F0b3JWaWV3cG9ydCB8IEluaXRpYWxWaWV3U3RhdGVQcm9wcykge1xuICBjb25zdCB2aWV3cG9ydCA9XG4gICAgdmlld1N0YXRlIGluc3RhbmNlb2YgV2ViTWVyY2F0b3JWaWV3cG9ydCA/IHZpZXdTdGF0ZSA6IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KHZpZXdTdGF0ZSk7XG5cbiAgY29uc3QgcHJvcHMgPSBwaWNrKHZpZXdwb3J0LCBcImxvbmdpdHVkZVwiLCBcImxhdGl0dWRlXCIsIFwiem9vbVwiLCBcImJlYXJpbmdcIiwgXCJwaXRjaFwiLCBcImFsdGl0dWRlXCIpO1xuICByZXR1cm4ge1xuICAgIGJvdW5kczogdmlld3BvcnQuZ2V0Qm91bmRzKCksXG4gICAgdmlld1N0YXRlOiB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGNlbnRlcjogdmlld3BvcnQudW5wcm9qZWN0RmxhdCh2aWV3cG9ydC5jZW50ZXIpLFxuICAgIH0sXG4gIH07XG59XG4iLCJpbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHR5cGUgeyBJbml0aWFsVmlld1N0YXRlUHJvcHMsIFBpY2tJbmZvIH0gZnJvbSBcIkBkZWNrLmdsL2NvcmVcIjtcbmltcG9ydCB7IEFwcCwgQXBwUHJvcHMsIERlY2tQcm9wcyB9IGZyb20gXCIuL2FwcFwiO1xuaW1wb3J0IHR5cGUgeyBMYXllclByb3BzIH0gZnJvbSBcIi4vbGF5ZXJcIjtcbmltcG9ydCB7IGRlYm91bmNlLCBnZXRFbGVtZW50RGltZW5zaW9ucywgcGljayB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IGdldFZpZXdTdGF0ZSB9IGZyb20gXCIuL3ZpZXdwb3J0XCI7XG5pbXBvcnQgeyBnZXRQaWNrZWRPYmplY3QgfSBmcm9tIFwiLi9waWNraW5nXCI7XG5cbmV4cG9ydCBjb25zdCBiaW5kaW5nOiBIVE1MV2lkZ2V0cy5CaW5kaW5nID0ge1xuICBuYW1lOiBcInJkZWNrXCIsXG4gIHR5cGU6IFwib3V0cHV0XCIsXG4gIGZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICAvLyBjb21wdXRlIGVsIGRpbWVuc2lvbnMgaWYgaW5pdGlhbGx5IGhpZGRlblxuICAgIGlmICh3aWR0aCA9PT0gMCB8fCBoZWlnaHQgPT09IDApIHtcbiAgICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldEVsZW1lbnREaW1lbnNpb25zKGVsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFdpZGdldChlbCwgd2lkdGgsIGhlaWdodCk7XG4gIH0sXG59O1xuXG50eXBlIExheWVyVmlzaWJpbGl0eVByb3BzID0gUGljazxMYXllclByb3BzLCBcImdyb3VwTmFtZVwiIHwgXCJ2aXNpYmxlXCI+ICYge1xuICBuYW1lOiBzdHJpbmcgfCBudWxsO1xufTtcblxudHlwZSBXaWRnZXRQcm9wcyA9IFBpY2s8QXBwUHJvcHMsIFwicHJvcHNcIiB8IFwibGF5ZXJzXCIgfCBcInRoZW1lXCIgfCBcImxheWVyU2VsZWN0b3JcIiB8IFwibGF6eUxvYWRcIj47XG5cbmV4cG9ydCBjbGFzcyBXaWRnZXQgaW1wbGVtZW50cyBIVE1MV2lkZ2V0cy5XaWRnZXQsIFdpZGdldFByb3BzIHtcbiAgI2VsOiBIVE1MRWxlbWVudDtcbiAgI3dpZHRoOiBudW1iZXI7XG4gICNoZWlnaHQ6IG51bWJlcjtcbiAgcHJvcHM6IERlY2tQcm9wcyA9IHsgYmxlbmRpbmdNb2RlOiBcIm5vcm1hbFwiIH07XG4gIGxheWVyczogTGF5ZXJQcm9wc1tdID0gW107XG4gIHRoZW1lOiBcImtlcGxlclwiIHwgXCJsaWdodFwiID0gXCJrZXBsZXJcIjtcbiAgbGF5ZXJTZWxlY3RvcjogYm9vbGVhbiA9IHRydWU7XG4gIGxhenlMb2FkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoZWw6IEhUTUxFbGVtZW50LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMuI2VsID0gZWw7XG4gICAgdGhpcy4jd2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLiNoZWlnaHQgPSBoZWlnaHQ7XG4gICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vblZpZXdTdGF0ZUNoYW5nZSA9IHRoaXMub25WaWV3U3RhdGVDaGFuZ2UuYmluZCh0aGlzKTtcblxuICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHtcbiAgICAgIGNvbnN0IGRlYm91bmNlZFJlbmRlciA9IGRlYm91bmNlKChwcm9wcyA9IHt9KSA9PiB0aGlzLnJlbmRlclZhbHVlKHByb3BzKSwgNTApO1xuXG4gICAgICAvLyB1cGRhdGUgbGF5ZXJzXG4gICAgICBTaGlueS5hZGRDdXN0b21NZXNzYWdlSGFuZGxlcihgJHtlbC5pZH06bGF5ZXJgLCAobGF5ZXI6IExheWVyUHJvcHMpID0+IHtcbiAgICAgICAgY29uc3QgX2xheWVyID0gdGhpcy5sYXllcnMuZmluZCgoeCkgPT4geC5pZCA9PT0gbGF5ZXIuaWQpO1xuICAgICAgICBjb25zdCBtZXJnZWQgPSB7XG4gICAgICAgICAgLi4uX2xheWVyLFxuICAgICAgICAgIC4uLmxheWVyLFxuICAgICAgICAgIC8vIGlmIHZpc2libGUgaXMgbnVsbCwgdXNlIGV4aXN0aW5nXG4gICAgICAgICAgdmlzaWJsZTogbGF5ZXIudmlzaWJsZSA/PyBfbGF5ZXI/LnZpc2libGUsXG4gICAgICAgICAgLy8gaWYgZGF0YSBpcyBub3Qgc3VwcGxpZWQgLyBpcyBmYWxzZXkgZnJvbSBzaGlueSwgdXNlIGV4aXN0aW5nXG4gICAgICAgICAgZGF0YTogbGF5ZXIuZGF0YSA/PyBfbGF5ZXI/LmRhdGEgPz8gbnVsbCxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyB1cHNlcnRcbiAgICAgICAgdGhpcy5sYXllcnMgPVxuICAgICAgICAgIF9sYXllciA9PSBudWxsXG4gICAgICAgICAgICA/IFsuLi50aGlzLmxheWVycywgbWVyZ2VkXVxuICAgICAgICAgICAgOiB0aGlzLmxheWVycy5tYXAoKHgpID0+ICh4ID09PSBfbGF5ZXIgPyBtZXJnZWQgOiB4KSk7XG5cbiAgICAgICAgZGVib3VuY2VkUmVuZGVyKHsgbGF5ZXJzOiB0aGlzLmxheWVycyB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyB1cGRhdGUgbWFwXG4gICAgICBTaGlueS5hZGRDdXN0b21NZXNzYWdlSGFuZGxlcihgJHtlbC5pZH06ZGVja2AsICh7IHByb3BzLCB0aGVtZSwgbGF6eUxvYWQgfTogUkRlY2tQcm9wcykgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlclZhbHVlKHtcbiAgICAgICAgICBwcm9wczogeyAuLi50aGlzLnByb3BzLCAuLi5wcm9wcyB9LFxuICAgICAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgICAgICBsYXp5TG9hZDogbGF6eUxvYWQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRMYXllclZpc2liaWxpdHkgPSB0aGlzLnNldExheWVyVmlzaWJpbGl0eS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgcmVuZGVyVmFsdWUoeyBwcm9wcywgbGF5ZXJzLCB0aGVtZSwgbGF5ZXJTZWxlY3RvciwgbGF6eUxvYWQgfTogUGFydGlhbDxXaWRnZXRQcm9wcz4gPSB7fSkge1xuICAgIC8vIG1lcmdlIGluIG5ldyBwcm9wcyB3aXRoIGV4aXN0aW5nIHN0YXRlXG4gICAgY29uc3QgX3Byb3BzID0ge1xuICAgICAgcHJvcHM6IHtcbiAgICAgICAgLi4udGhpcy5wcm9wcyxcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIG9uQ2xpY2s6IHRoaXMub25DbGljayxcbiAgICAgICAgb25WaWV3U3RhdGVDaGFuZ2U6IGRlYm91bmNlKHRoaXMub25WaWV3U3RhdGVDaGFuZ2UsIDUwKSxcbiAgICAgIH0sXG4gICAgICBsYXllcnM6IGxheWVycyA/PyB0aGlzLmxheWVycyxcbiAgICAgIHRoZW1lOiB0aGVtZSA/PyB0aGlzLnRoZW1lLFxuICAgICAgbGF5ZXJTZWxlY3RvcjogbGF5ZXJTZWxlY3RvciA/PyB0aGlzLmxheWVyU2VsZWN0b3IsXG4gICAgICBsYXp5TG9hZDogbGF6eUxvYWQgPz8gdGhpcy5sYXp5TG9hZCxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgX3Byb3BzKTtcblxuICAgIFJlYWN0RE9NLnJlbmRlcihcbiAgICAgIDxBcHBcbiAgICAgICAgey4uLl9wcm9wc31cbiAgICAgICAgb25MYXllclZpc2liaWxpdHlDaGFuZ2U9e3RoaXMuc2V0TGF5ZXJWaXNpYmlsaXR5fVxuICAgICAgICB3aWR0aD17dGhpcy4jd2lkdGh9XG4gICAgICAgIGhlaWdodD17dGhpcy4jaGVpZ2h0fVxuICAgICAgLz4sXG4gICAgICB0aGlzLiNlbFxuICAgICk7XG4gIH1cblxuICAvLyBkZWNrLmdsIGhhbmRsZXMgcmVzaXplIGF1dG9tYXRpY2FsbHlcbiAgcmVzaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBHZXQgd2lkZ2V0IGlkXG4gICAqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jZWwuaWQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGxheWVycycgdmlzaWJpbGl0eS4gTGF5ZXJzIG5vdCBpbmNsdWRlZCBpbiB2aXNpYmlsaXR5IGFyZSB1bmFsdGVyZWQuXG4gICAqIEBwYXJhbSB2aXNpYmlsaXR5IHRoZSBsYXllcnMgdmlzaWJpbGl0eVxuICAgKi9cbiAgc2V0TGF5ZXJWaXNpYmlsaXR5KGxheWVyczogTGF5ZXJWaXNpYmlsaXR5UHJvcHNbXSk6IHZvaWQge1xuICAgIGlmIChsYXllcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBpc01hdGNoID0gKGxheWVyVmlzaWJsaXR5OiBMYXllclZpc2liaWxpdHlQcm9wcywgbGF5ZXI6IExheWVyUHJvcHMpID0+IHtcbiAgICAgIGNvbnN0IG5hbWVFcXVhbCA9IGxheWVyVmlzaWJsaXR5Lm5hbWUgPT09IGxheWVyLm5hbWU7XG4gICAgICBjb25zdCBncm91cEVxdWFsID0gbGF5ZXJWaXNpYmxpdHkuZ3JvdXBOYW1lID09PSBsYXllci5ncm91cE5hbWU7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIChuYW1lRXF1YWwgJiYgZ3JvdXBFcXVhbCkgfHxcbiAgICAgICAgLy8gYWxsIGxheWVycyBpbiBhIGdyb3VwXG4gICAgICAgIChsYXllclZpc2libGl0eS5uYW1lID09IG51bGwgJiYgbGF5ZXJWaXNpYmxpdHkuZ3JvdXBOYW1lICE9IG51bGwgJiYgZ3JvdXBFcXVhbClcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IF9sYXllcnMgPSB0aGlzLmxheWVycy5tYXAoKGxheWVyKSA9PiB7XG4gICAgICBjb25zdCBfbGF5ZXIgPSBsYXllcnMuZmluZCgoeCkgPT4gaXNNYXRjaCh4LCBsYXllcikgJiYgeC52aXNpYmxlICE9PSBsYXllci52aXNpYmxlKTtcbiAgICAgIHJldHVybiBfbGF5ZXIgPyB7IC4uLmxheWVyLCB2aXNpYmxlOiBfbGF5ZXIudmlzaWJsZSB9IDogbGF5ZXI7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbmRlclZhbHVlKHsgbGF5ZXJzOiBfbGF5ZXJzIH0pO1xuICB9XG5cbiAgb25DbGljayhpbmZvOiBQaWNrSW5mbzxhbnk+KSB7XG4gICAgaWYgKEhUTUxXaWRnZXRzLnNoaW55TW9kZSkge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgY29vcmRpbmF0ZTogaW5mby5jb29yZGluYXRlLFxuICAgICAgICAuLi5nZXRWaWV3U3RhdGUoaW5mby52aWV3cG9ydCksXG4gICAgICAgIGxheWVyOiBwaWNrKGluZm8ubGF5ZXI/LnByb3BzLCBcImlkXCIsIFwibmFtZVwiLCBcImdyb3VwTmFtZVwiKSxcbiAgICAgICAgb2JqZWN0OiBnZXRQaWNrZWRPYmplY3QoaW5mbyksXG4gICAgICB9O1xuXG4gICAgICBTaGlueS5zZXRJbnB1dFZhbHVlKGAke3RoaXMuaWR9X2NsaWNrYCwgZGF0YSwgeyBwcmlvcml0eTogXCJldmVudFwiIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uVmlld1N0YXRlQ2hhbmdlKHsgdmlld1N0YXRlIH06IHsgdmlld1N0YXRlOiBJbml0aWFsVmlld1N0YXRlUHJvcHMgfSkge1xuICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBnZXRWaWV3U3RhdGUodmlld1N0YXRlKTtcblxuICAgICAgU2hpbnkuc2V0SW5wdXRWYWx1ZShgJHt0aGlzLmlkfV92aWV3c3RhdGVgLCBkYXRhLCB7IHByaW9yaXR5OiBcImV2ZW50XCIgfSk7XG4gICAgfVxuICB9XG59XG5cbnR5cGUgV2lkZ2V0Q29udGFpbmVyID0gSFRNTEVsZW1lbnQgJiB7IGh0bWx3aWRnZXRfZGF0YV9pbml0X3Jlc3VsdDogV2lkZ2V0IH07XG5cbi8qKlxuICogR2V0IGFuIHJkZWNrIHdpZGdldCBpbnN0YW5jZSBieSBpZFxuICogQHBhcmFtIGlkIHRoZSB3aWRnZXQgaWRcbiAqIEByZXR1cm5zIHtXaWRnZXR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaWRnZXRCeUlkKGlkOiBzdHJpbmcpOiBXaWRnZXQgfCBudWxsIHtcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSBhcyBXaWRnZXRDb250YWluZXIgfCBudWxsO1xuICByZXR1cm4gZWxlbWVudD8uaHRtbHdpZGdldF9kYXRhX2luaXRfcmVzdWx0ID8/IG51bGw7XG59XG5cbi8qKlxuICogR2V0IGFsbCByZGVjayB3aWRnZXQgaW5zdGFuY2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaWRnZXRzKCk6IFdpZGdldFtdIHtcbiAgY29uc3QgZWxlbWVudHMgPSBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5yZGVjay5odG1sLXdpZGdldFwiKV0gYXMgV2lkZ2V0Q29udGFpbmVyW107XG4gIHJldHVybiBlbGVtZW50cy5tYXAoKHgpID0+IHguaHRtbHdpZGdldF9kYXRhX2luaXRfcmVzdWx0KS5maWx0ZXIoKHgpID0+IHggaW5zdGFuY2VvZiBXaWRnZXQpO1xufVxuXG4vKiByZWdpc3RlciB3aWRnZXQgKi9cbkhUTUxXaWRnZXRzLndpZGdldChiaW5kaW5nKTtcbiIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZnJvbS1lbnRyaWVzXCI7XG5cbmRlY2xhcmUgY29uc3QgX19WRVJTSU9OX186IHN0cmluZztcblxuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBfX1ZFUlNJT05fXztcbmV4cG9ydCAqIGZyb20gXCIuL3dpZGdldFwiO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIG5vIGJhc2VVUklcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBhbmQgbG9hZGluZyBjaHVua3Ncbi8vIHVuZGVmaW5lZCA9IGNodW5rIG5vdCBsb2FkZWQsIG51bGwgPSBjaHVuayBwcmVsb2FkZWQvcHJlZmV0Y2hlZFxuLy8gW3Jlc29sdmUsIHJlamVjdCwgUHJvbWlzZV0gPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQ0NzI6IDBcbn07XG5cbi8vIG5vIGNodW5rIG9uIGRlbWFuZCBsb2FkaW5nXG5cbi8vIG5vIHByZWZldGNoaW5nXG5cbi8vIG5vIHByZWxvYWRlZFxuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0XG5cbl9fd2VicGFja19yZXF1aXJlX18uTy5qID0gKGNodW5rSWQpID0+IChpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gPT09IDApO1xuXG4vLyBpbnN0YWxsIGEgSlNPTlAgY2FsbGJhY2sgZm9yIGNodW5rIGxvYWRpbmdcbnZhciB3ZWJwYWNrSnNvbnBDYWxsYmFjayA9IChwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbiwgZGF0YSkgPT4ge1xuXHR2YXIgW2NodW5rSWRzLCBtb3JlTW9kdWxlcywgcnVudGltZV0gPSBkYXRhO1xuXHQvLyBhZGQgXCJtb3JlTW9kdWxlc1wiIHRvIHRoZSBtb2R1bGVzIG9iamVjdCxcblx0Ly8gdGhlbiBmbGFnIGFsbCBcImNodW5rSWRzXCIgYXMgbG9hZGVkIGFuZCBmaXJlIGNhbGxiYWNrXG5cdHZhciBtb2R1bGVJZCwgY2h1bmtJZCwgaSA9IDA7XG5cdGlmKGNodW5rSWRzLnNvbWUoKGlkKSA9PiAoaW5zdGFsbGVkQ2h1bmtzW2lkXSAhPT0gMCkpKSB7XG5cdFx0Zm9yKG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG5cdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8obW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuXHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZihydW50aW1lKSB2YXIgcmVzdWx0ID0gcnVudGltZShfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblx0fVxuXHRpZihwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbikgcGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24oZGF0YSk7XG5cdGZvcig7aSA8IGNodW5rSWRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y2h1bmtJZCA9IGNodW5rSWRzW2ldO1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhpbnN0YWxsZWRDaHVua3MsIGNodW5rSWQpICYmIGluc3RhbGxlZENodW5rc1tjaHVua0lkXSkge1xuXHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdWzBdKCk7XG5cdFx0fVxuXHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9IDA7XG5cdH1cblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uTyhyZXN1bHQpO1xufVxuXG52YXIgY2h1bmtMb2FkaW5nR2xvYmFsID0gc2VsZltcIndlYnBhY2tDaHVua3JkZWNrXCJdID0gc2VsZltcIndlYnBhY2tDaHVua3JkZWNrXCJdIHx8IFtdO1xuY2h1bmtMb2FkaW5nR2xvYmFsLmZvckVhY2god2VicGFja0pzb25wQ2FsbGJhY2suYmluZChudWxsLCAwKSk7XG5jaHVua0xvYWRpbmdHbG9iYWwucHVzaCA9IHdlYnBhY2tKc29ucENhbGxiYWNrLmJpbmQobnVsbCwgY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2guYmluZChjaHVua0xvYWRpbmdHbG9iYWwpKTsiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGRlcGVuZHMgb24gb3RoZXIgbG9hZGVkIGNodW5rcyBhbmQgZXhlY3V0aW9uIG5lZWQgdG8gYmUgZGVsYXllZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLk8odW5kZWZpbmVkLCBbNDg2LDQ3NCw2MTksNTY4LDE3NSw2MjcsODExLDQyLDg5OSw2NjcsMzI0LDEzNCwxMzMsNDY4LDc0NSw1MzUsNTI4LDc4NCwzNzgsNjQ1LDM5NCw4MTYsNDg1LDY1MCw4NjksNjcsMTQsODA2LDI4Miw5NTMsNTM4LDQ5LDYzOSw4MjUsNTk2XSwgKCkgPT4gKF9fd2VicGFja19yZXF1aXJlX18oODk4MSkpKVxuX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18uTyhfX3dlYnBhY2tfZXhwb3J0c19fKTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiZGVmZXJyZWQiLCJsZWFmUHJvdG90eXBlcyIsImdldFByb3RvIiwiREVGQVVMVF9DT0xPUiIsInJnYmEiLCJyIiwiZyIsImIiLCJhIiwicGFyc2VDb2xvciIsImNvbG9yIiwidGFyZ2V0IiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidmFsdWUiLCJwYXJzZUludCIsInN1YnN0cmluZyIsIk1hdGgiLCJmbG9vciIsInBhcnNlSGV4Q29sb3IiLCJpc0FjY2Vzc29yIiwib2JqIiwidHlwZSIsImlzQWNjZXNzb3JTY2FsZSIsIkJMRU5ESU5HX01PREVTIiwiT2JqZWN0IiwiZnJlZXplIiwiYWRkaXRpdmUiLCJibGVuZEZ1bmMiLCJibGVuZEVxdWF0aW9uIiwic3VidHJhY3RpdmUiLCJub3JtYWwiLCJibGVuZGluZ1BhcmFtZXRlcnMiLCJtb2RlIiwiaXNEYXRhRnJhbWUiLCJkYXRhIiwiZmxhdHRlbiIsIm5hbWUiLCJvbGRGcmFtZSIsImZyYW1lIiwibmV3RnJhbWUiLCJmcm9tRW50cmllcyIsImVudHJpZXMiLCJtYXAiLCJrZXkiLCJrZXlzIiwiZmlsdGVyIiwiZ2VvbWV0cmllcyIsImlzTXVsdGlHZW9tZXRyeSIsImlzTXVsdGlQb2ludCIsImlzTXVsdGlMaW5lU3RyaW5nIiwiaXNNdWx0aVBvbHlnb24iLCJUeXBlRXJyb3IiLCJpc011bHRpR2VvbWV0cnlGbiIsImNvcHlWYWx1ZXMiLCJpbmRleCIsInB1c2giLCJpbmRpY2VzIiwiZ2VvbWV0cnkiLCJyZXAiLCJyZXBsYWNlIiwiTXVsdGlIaWdobGlnaHRFeHRlbnNpb24iLCJpbml0aWFsaXplU3RhdGUiLCJsYXllciIsIkxheWVycyIsInNvbWUiLCJMYXllciIsImlzUHJpbWl0aXZlTGF5ZXIiLCJ0aGlzIiwiYXR0cmlidXRlTWFuYWdlciIsImdldEF0dHJpYnV0ZU1hbmFnZXIiLCJhZGRJbnN0YW5jZWQiLCJwaWNraW5nQ29sb3JzIiwic2l6ZSIsImFjY2Vzc29yIiwib2JqZWN0IiwiZW5jb2RlUGlja2luZ0NvbG9yIiwiaW5kZXhPZiIsInBhcmVudERhdGEiLCJfX3NvdXJjZSIsInBhcmVudCIsInByb3BzIiwic2hhZGVyQXR0cmlidXRlcyIsImRpdmlzb3IiLCJpbnN0YW5jZVBpY2tpbmdDb2xvcnMiLCJwaWNrIiwiZ2V0Rmlyc3RWaXNpYmxlIiwiZWwiLCJjbGllbnRIZWlnaHQiLCJwYXJlbnRFbGVtZW50IiwiZ2V0RWxlbWVudERpbWVuc2lvbnMiLCJ2aXNpYmxlIiwiY2xpZW50V2lkdGgiLCJ3aWR0aCIsImhlaWdodCIsImdldENvbXB1dGVkU3R5bGUiLCJub2RlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYXNzaWduIiwic3R5bGUiLCJkaXNwbGF5IiwiYXBwZW5kQ2hpbGQiLCJkaW1zIiwicmVtb3ZlQ2hpbGQiLCJncm91cEJ5IiwibGlzdCIsIk1hcCIsIml0ZW0iLCJpdGVtS2V5IiwiaGFzIiwiZ2V0Iiwic2V0IiwiY2xhc3NOYW1lcyIsIngiLCJqb2luIiwiZGVib3VuY2UiLCJmbiIsIndhaXQiLCJ0aW1lb3V0IiwiYXJncyIsIndpbmRvdyIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJNYXBDYWNoZSIsIl92YWwiLCJfcmVmIiwiV2Vha01hcCIsImdldFN0b3JlIiwibWVtb2l6ZSIsImFyZzAiLCJjYWNoZSIsInNsaWNlIiwicmVkdWNlUmlnaHQiLCJhcmciLCJjaGlsZCIsIm11bHRpR2VvbWV0cmllcyIsInRlc3QiLCJnZXRNdWx0aUdlb21ldHJ5IiwicmVkdWNlIiwiZ2V0RGF0YSIsImNvbCIsImRhdGFUeXBlIiwidGFibGVIaWdobGlnaHQiLCJvYmplY3RIaWdobGlnaHQiLCJwcm9wZXJ0aWVzIiwiZ2VvanNvbkhpZ2hsaWdodCIsImVuZHNXaXRoIiwiXyIsInRhYmxlQ29sb3IiLCJvYmplY3RDb2xvciIsImdlb2pzb25Db2xvciIsInRhYmxlRGF0YSIsIm9iamVjdERhdGEiLCJnZW9qc29uRGF0YSIsImFjY2Vzc29yRm4iLCJyYW5nZSIsInBhbGV0dGUiLCJ1bmtub3duIiwic2NhbGVEYXRhIiwic2NhbGUiLCJkb21haW4iLCJjbGFtcCIsImV4cG9uZW50IiwiYmFzZSIsInNjYWxlRm4iLCJoaWdobGlnaHRGbiIsImNvbnN0cnVjdG9yIiwiY29sb3JzIiwiaXNDb2xvciIsImNvbG9yUmFuZ2UiLCJmaW5kIiwiZ2V0Q29sb3JzIiwiYWNjZXNzb3JzIiwiZ2V0QWNjZXNzb3JzIiwiX3Byb3BzIiwiZ2V0V2VpZ2h0UHJvcHMiLCJnZXRVcGRhdGVUcmlnZ2VycyIsInBhcmFtZXRlcnMiLCJibGVuZGluZ01vZGUiLCJleHRlbnNpb25zIiwicmVuZGVyU3ViTGF5ZXJzIiwiYmJveCIsIndlc3QiLCJzb3V0aCIsImVhc3QiLCJub3J0aCIsInkiLCJ6IiwidGlsZSIsImltYWdlIiwiYm91bmRzIiwic2NhbGVzIiwiZm9udHMiLCJsb2FkIiwiZm9udEZhbWlseSIsInN0YXRpYyIsInJlbmRlckxheWVyIiwidGltZSIsInVuZGVmaW5lZCIsImxvb3BMZW5ndGgiLCJhbmltYXRpb25TcGVlZCIsImFuaW1hdGlvblRpbWUiLCJyYXRpb0NvbXBsZXRlIiwiY3VycmVudFRpbWUiLCJyZW5kZXJMZWdlbmQiLCJsZWdlbmQiLCJpZCIsInJlbmRlclNlbGVjdG9yIiwiZ3JvdXBOYW1lIiwic2NhbGVQcm9wcyIsInByb3BUcmlnZ2VycyIsIkZFQVRVUkVfSUQiLCJnZXRQaWNrZWRPYmplY3QiLCJpbmZvIiwicGlja2VkIiwiaXNHZW9qc29uIiwiZ2V0RGF0YVR5cGUiLCJnZW9tcyIsImluY2x1ZGVzIiwiVG9vbHRpcCIsInRvb2x0aXAiLCJuYW1lcyIsImNvbHMiLCJjbGFzc05hbWUiLCJ0cmFuc2Zvcm0iLCJTdHJpbmciLCJsYXllcnMiLCJkZWNrZ2wiLCJ1c2VSZWYiLCJoYW5kbGVIb3ZlciIsInVzZUhvdmVyIiwibWFwYm94QWNjZXNzVG9rZW4iLCJtYXBTdHlsZSIsImNvbnRyb2xsZXIiLCJkZWNrUHJvcHMiLCJfcGFyYW1ldGVycyIsInNldFRpbWUiLCJ1c2VTdGF0ZSIsImFuaW1hdGluZyIsInVzZUFuaW1hdGlvbiIsIl9sYXllcnMiLCJGcmFnbWVudCIsInJlZiIsIm9uSG92ZXIiLCJyZXBlYXQiLCJyZXVzZU1hcHMiLCJzdGF0ZSIsInNldFN0YXRlIiwidXNlQ2FsbGJhY2siLCJlbmFibGVkIiwib25GcmFtZSIsImFuaW1hdGlvbiIsInN0YXJ0VGltZSIsIkRhdGUiLCJub3ciLCJhbmltYXRlIiwiY3VycmVudCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInVzZUVmZmVjdCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiVElDS19IRUlHSFQiLCJMZWdlbmQiLCJ0aXRsZSIsIlNjYWxlIiwic2NhbGVOYW1lIiwidG9Mb3dlckNhc2UiLCJpc0NvbnRpbnVvdXMiLCJpc0NvbnRpbnVvdXNTY2FsZSIsImlzRGlzY3JldGUiLCJpc0Rpc2NyZXRlU2NhbGUiLCJzY2FsZUJ5IiwiQ29udGludW91cyIsIkRpc2NyZXRlIiwiQ2F0ZWdvcnkiLCJ0aWNrcyIsImxpbmVzIiwiZ3JhZGllbnRIZWlnaHQiLCJzaGFwZVJlbmRlcmluZyIsImhyZWYiLCJnZXRDb2xvckdyYWRpZW50IiwicHJlc2VydmVBc3BlY3RSYXRpbyIsIngyIiwieTEiLCJ5MiIsIlRpY2tzIiwiZmlsbCIsInVua25vd25UaWNrIiwiX3JhbmdlIiwiX3RpY2tzIiwidGljayIsImR5IiwibiIsImludmVydCIsImNvcHkiLCJjYW52YXMiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsImkiLCJmaWxsU3R5bGUiLCJmaWxsUmVjdCIsInRvRGF0YVVSTCIsIk5PX0dST1VQIiwiVG9nZ2xlQnV0dG9uIiwib25DbGljayIsImNoaWxkcmVuIiwiTGF5ZXJTZWxlY3RvciIsIm9uVmlzaWJpbGl0eUNoYW5nZSIsImdyb3VwcyIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJjaGFuZ2VkIiwiZm9jdXMiLCJub25Gb2N1cyIsImlzT3BlbiIsInNldElzT3BlbiIsImhhbmRsZU9wZW5DaGFuZ2UiLCJmb250U2l6ZSIsImZyb20iLCJncm91cCIsIkNoZWNrYm94R3JvdXAiLCJvbkNoYW5nZSIsImNoZWNrYm94ZXMiLCJDaGVja2JveCIsImNoZWNrZWQiLCJpc1Zpc2libGUiLCJpbmRldGVybWluYXRlIiwiaW5wdXRSZWYiLCJjYW5jZWwiLCJDaGVja0JveEljb24iLCJDaGVja0JveCIsIkluZGV0ZXJtaW5hdGVDaGVja0JveCIsIkNoZWNrQm94T3V0bGluZUJsYW5rIiwiY2xhc3NlcyIsImRlbGF5Iiwib25UaW1lb3V0IiwicmFmIiwibG9vcCIsInRpbWVzdGFtcCIsImdsb2JhbFRoaXMiLCJBcHAiLCJ0aGVtZSIsImxhenlMb2FkIiwibGF5ZXJTZWxlY3RvciIsIm9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwiaW5pdGlhbEJvdW5kcyIsImluaXRpYWxWaWV3U3RhdGUiLCJkZWNrZ2xQcm9wcyIsIl9pbml0aWFsVmlld1N0YXRlIiwidXNlTWVtbyIsInhtaW4iLCJ5bWluIiwieG1heCIsInltYXgiLCJtYXgiLCJtaW4iLCJ2aWV3cG9ydCIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiem9vbSIsImZpdEJvdW5kcyIsInVzZUJvdW5kcyIsImNyZWF0ZSIsImNvbnRhaW5lciIsImluVmlld3BvcnQiLCJvYnNlcnZlciIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiaXNJbnRlcnNlY3RpbmciLCJ0aHJlc2hvbGQiLCJvYnNlcnZlIiwiZGlzY29ubmVjdCIsInVzZUluVmlld3BvcnQiLCJzaG91bGRSZW5kZXIiLCJ2aXNpYmlsaXR5VG9nZ2xlIiwicmV2ZXJzZSIsImdldFZpZXdTdGF0ZSIsInZpZXdTdGF0ZSIsImdldEJvdW5kcyIsImNlbnRlciIsInVucHJvamVjdEZsYXQiLCJiaW5kaW5nIiwiV2lkZ2V0IiwiYmluZCIsIm9uVmlld1N0YXRlQ2hhbmdlIiwiSFRNTFdpZGdldHMiLCJzaGlueU1vZGUiLCJkZWJvdW5jZWRSZW5kZXIiLCJyZW5kZXJWYWx1ZSIsIlNoaW55IiwiYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIiLCJfbGF5ZXIiLCJtZXJnZWQiLCJzZXRMYXllclZpc2liaWxpdHkiLCJyZXNpemUiLCJsYXllclZpc2libGl0eSIsIm5hbWVFcXVhbCIsImdyb3VwRXF1YWwiLCJpc01hdGNoIiwiY29vcmRpbmF0ZSIsInNldElucHV0VmFsdWUiLCJwcmlvcml0eSIsImdldFdpZGdldEJ5SWQiLCJlbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJodG1sd2lkZ2V0X2RhdGFfaW5pdF9yZXN1bHQiLCJnZXRXaWRnZXRzIiwicXVlcnlTZWxlY3RvckFsbCIsIndpZGdldCIsIlZFUlNJT04iLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiY2FsbCIsIm0iLCJPIiwicmVzdWx0IiwiY2h1bmtJZHMiLCJub3RGdWxmaWxsZWQiLCJJbmZpbml0eSIsImZ1bGZpbGxlZCIsImoiLCJldmVyeSIsInNwbGljZSIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ0IiwidGhlbiIsIm5zIiwiZGVmIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZvckVhY2giLCJkZWZpbml0aW9uIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsIkZ1bmN0aW9uIiwiZSIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwiaW5zdGFsbGVkQ2h1bmtzIiwiY2h1bmtJZCIsIndlYnBhY2tKc29ucENhbGxiYWNrIiwicGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24iLCJtb3JlTW9kdWxlcyIsInJ1bnRpbWUiLCJjaHVua0xvYWRpbmdHbG9iYWwiLCJfX3dlYnBhY2tfZXhwb3J0c19fIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.rdeck=t():e.rdeck=t()}(self,(()=>(()=>{var e,t,n,r={8981:(e,t,n)=>{"use strict";n.r(t),n.d(t,{VERSION:()=>xt,Widget:()=>bt,binding:()=>vt,getWidgetById:()=>jt,getWidgets:()=>wt});var r={};n.r(r),n.d(r,{AGGREGATION_OPERATION:()=>c.KM,ArcLayer:()=>l.zv,BitmapLayer:()=>l.hz,CPUGridLayer:()=>c.ab,ColumnLayer:()=>l.eJ,ContourLayer:()=>c.YY,GPUGridLayer:()=>c.ML,GeoJsonLayer:()=>l.UW,GreatCircleLayer:()=>u.GJ,GridCellLayer:()=>l.cJ,GridLayer:()=>c.mU,H3ClusterLayer:()=>u.cH,H3HexagonLayer:()=>u.bW,HeatmapLayer:()=>c.zP,HexagonLayer:()=>c.dX,IconLayer:()=>l.eE,LineLayer:()=>l.Ie,MVTLayer:()=>u.i3,PathLayer:()=>l.nr,PointCloudLayer:()=>l.U5,PolygonLayer:()=>l.dW,QuadkeyLayer:()=>u._k,S2Layer:()=>u.jJ,ScatterplotLayer:()=>l.pU,ScenegraphLayer:()=>d.S,ScreenGridLayer:()=>c.p3,SimpleMeshLayer:()=>d.L,SolidPolygonLayer:()=>l.PJ,TerrainLayer:()=>u.tr,TextLayer:()=>l.AB,Tile3DLayer:()=>u.cY,TileLayer:()=>u.Im,TripsLayer:()=>u.Fw,_AggregationLayer:()=>c.Di,_BinSorter:()=>c.l0,_CPUAggregator:()=>c.oA,_GPUGridAggregator:()=>c.Wc,_MultiIconLayer:()=>l.vb,_TextBackgroundLayer:()=>l._k,_getURLFromTemplate:()=>u.po});n(8559);var i=n(5893),o=n(3935),s=n(7294),a=n(6935),l=n(7786),c=n(9080),u=n(803),d=n(1956),p=n(5395);const h=[0,0,0,255];function f([e,t,n,r=255]){return`rgba(${e}, ${t}, ${n}, ${r/255})`}function y(e,t){return Array.isArray(e)?t||4!==e.length?((t=null!=t?t:[])[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=3===e.length?e[3]:255,t):e:"string"==typeof e?(function(e,t){if(7===e.length){const n=parseInt(e.substring(1),16);t[0]=Math.floor(n/65536),t[1]=Math.floor(n/256%256),t[2]=n%256,t[3]=255}else if(9===e.length){const n=parseInt(e.substring(1),16);t[0]=Math.floor(n/16777216),t[1]=Math.floor(n/65536%256),t[2]=Math.floor(n/256%256),t[3]=n%256}}(e,t=null!=t?t:[]),t):h}var m=n(4634),g=n(4177),v=n(458),b=n(5801),j=n(3613),w=n(602),x=n(8973),L=n(2625);function k(e){return null!==e&&"object"==typeof e&&"accessor"===e.type}function S(e){return k(e)&&"scale"in e}var C=n(9757);const N=Object.freeze({additive:{[C.Z.BLEND]:!0,blendFunc:[C.Z.SRC_ALPHA,C.Z.DST_ALPHA],blendEquation:C.Z.FUNC_ADD},subtractive:{[C.Z.BLEND]:!0,blendFunc:[C.Z.ONE,C.Z.ONE_MINUS_DST_COLOR,C.Z.SRC_ALPHA,C.Z.DST_ALPHA],blendEquation:[C.Z.FUNC_SUBTRACT,C.Z.FUNC_ADD]},normal:{[C.Z.BLEND]:!0,blendFunc:[C.Z.SRC_ALPHA,C.Z.ONE_MINUS_SRC_ALPHA,C.Z.ONE,C.Z.ONE_MINUS_SRC_ALPHA],blendEquation:[C.Z.FUNC_ADD,C.Z.FUNC_ADD]}});function _(e="normal"){var t;return null!==(t=N[e])&&void 0!==t?t:N.normal}function T(e){return null!==e&&"object"==typeof e&&"frame"in e}function A(e,{name:t,type:n}){var r,i,o,s;const a=e.frame,l=Object.fromEntries(Object.entries(a).map((([e])=>[e,[]]))),c=Object.keys(e.frame).filter((e=>e!==t)),u=a[t],d=function(e){switch(e){case"MULTIPOINT":return O;case"MULTILINESTRING":return Z;case"MULTIPOLYGON":return E;default:throw TypeError(`${e} not supported`)}}(n),p=e=>{for(const t of c)l[t].push(a[t][e])},h=[];for(let n=0;ne instanceof t))}(this))return;const e=this,t=e.getAttributeManager();t&&t.addInstanced({pickingColors:{type:C.Z.UNSIGNED_BYTE,size:3,accessor:(t,{index:n,data:r,target:i})=>{var o,s,a;if(T(r)&&Array.isArray(r.indices))return e.encodePickingColor(r.indices.indexOf(r.indices[n]),i);const l=null===(s=null===(o=null==t?void 0:t.__source)||void 0===o?void 0:o.parent)||void 0===s?void 0:s.props.data;return T(l)&&Array.isArray(l.indices)?e.encodePickingColor(l.indices.indexOf(l.indices[t.__source.index]),i):e.encodePickingColor(null!==(a=null==t?void 0:t.__source.index)&&void 0!==a?a:n,i)},shaderAttributes:{pickingColors:{divisor:0},instancePickingColors:{divisor:1}}}})}}const F=[P.Z,H.Z,I.Z,D.Z,R.Z,G.Z,U.Z];function V(e,...t){if(null==e)return null;const n=t.map((t=>[t,e[t]]));return Object.fromEntries(n)}function W(e){return e.clientHeight>0&&e.clientHeight>0?e:e.parentElement?W(e.parentElement):null}function q(e){const t=W(e);if(e===t||null==t)return[e.clientWidth,e.clientHeight];const{width:n,height:r}=getComputedStyle(e),i=document.createElement("div");Object.assign(i.style,{width:n,height:r,display:"hidden"}),t.appendChild(i);const o=[i.clientWidth,i.clientHeight];return t.removeChild(i),o}function Y(e,t){const n=new Map;for(const r of e){const e=t(r);n.has(e)?n.get(e).push(r):n.set(e,[r])}return n}function B(...e){return e.filter((e=>null!=e)).join(" ")}function $(e,t=0){let n;return(...r)=>{window.clearTimeout(n),n=window.setTimeout((()=>e(...r)),t)}}class J{constructor(){this._val=new Map,this._ref=new WeakMap}getStore(e){return"object"==typeof(t=e)&&null!==t||"function"==typeof t?this._ref:this._val;var t}has(e){return this.getStore(e).has(e)}get(e){return this.getStore(e).get(e)}set(e,t){return this.getStore(e).set(e,t),this}}function K(e){const t=new J;return(...n)=>{const r=n[0],i=n.slice(0,-1).reduceRight(((e,t)=>{if(e.has(t))return e.get(t);const n=new J;return e.set(t,n),n}),t);if(i.has(r))return i.get(r);const o=e(...n);return i.set(r,o),o}}const X=K((function(e){const t=function(e){return Object.entries(e.geometry).filter((([,e])=>/MULTI/.test(e))).map((([e,t])=>({name:e,type:t})))}(e);return 0===t.length?e:t.reduce(A,e)})),Q=K(y),ee=K((function(e,t){const n=function({col:e,dataType:t},n){if("highlightColor"===n)switch(t){case"table":return function(e){return({index:t,layer:n})=>y(n.props.data.frame[e][t])}(e);case"object":return function(e){return({object:t})=>y(t[e])}(e);case"geojson":return function(e){return({object:t})=>y(t.properties[e])}(e);default:throw TypeError(`${t} not supported`)}if(n.endsWith("Color"))switch(t){case"table":return function(e){return(t,{index:n,data:r,target:i})=>y(r.frame[e][n],i)}(e);case"object":return function(e){return(t,{target:n})=>y(t[e],n)}(e);case"geojson":return function(e){return(t,{target:n})=>y(t.properties[e],n)}(e);default:throw TypeError(`${t} not supported`)}switch(t){case"table":return function(e){return(t,{index:n,data:r})=>r.frame[e][n]}(e);case"object":return function(e){return t=>t[e]}(e);case"geojson":return function(e){return t=>t.properties[e]}(e);default:throw TypeError(`${t} not supported`)}}(e,t);return{...e,getData:n}})),te=K((function(e,t){"palette"in e&&(e.range=e.palette.map((e=>y(e))),e.unknown=y(e.unknown));const n=function(e){switch(e.scale){case"linear":return(0,m.Z)().domain(e.domain).range(e.range).unknown(e.unknown).clamp(!0);case"power":return(0,g.ZP)().exponent(e.exponent).domain(e.domain).range(e.range).unknown(e.unknown).clamp(!0);case"log":return(0,v.Z)().base(e.base).domain(e.domain).range(e.range).unknown(e.unknown).clamp(!0);case"symlog":return(0,b.Z)().domain(e.domain).range(e.range).unknown(e.unknown).clamp(!0);case"identity":return(0,j.Z)().unknown(e.unknown);case"threshold":case"quantile":return(0,w.Z)().domain(e.domain).range(e.range).unknown(e.unknown);case"category":return(0,x.Z)().domain(e.domain).range(e.range).unknown(e.unknown);case"quantize":return(0,L.Z)().domain(e.domain).range(e.range).unknown(e.unknown);default:throw TypeError(`scale ${e.scale} not supported`)}}(e),r="highlightColor"===t?function({col:e,dataType:t},n){switch(t){case"table":return function(e,t){return({index:n,layer:r})=>t(r.props.data.frame[e][n])}(e,n);case"object":return function(e,t){return({object:n})=>t(n[e])}(e,n);case"geojson":return function(e,t){return({object:n})=>t(n.properties[e])}(e,n);default:throw TypeError(`${t} not supported`)}}(e,n):function({col:e,dataType:t},n){switch(t){case"table":return function(e,t){return(n,{index:r,data:i})=>t(i.frame[e][r])}(e,n);case"object":return function(e,t){return n=>t(n[e])}(e,n);case"geojson":return function(e,t){return n=>t(n.properties[e])}(e,n);default:throw TypeError(`${t} not supported`)}}(e,n);return{...e,name:t,getData:r,scaleData:n}}));class ne{constructor({type:e,...t}){var n,r;const i=Object.entries(t),o=function(e){const t=e.filter(re).map((([e,t])=>[e,Q(t)])),n=e.find((([e])=>"colorRange"===e));n&&t.push([n[0],n[1].map((e=>Q(e)))]);return t}(i),s=function(e){return e.filter((([,e])=>k(e))).map((([e,t])=>[e,S(t)?te(t,e):ee(t,e)]))}(i);this.type=e;const a=Object.fromEntries([...i,...o,...s.map((([e,t])=>[e,t.getData])),...oe(i),["visible",null===(n=t.visible)||void 0===n||n],["updateTriggers",ie(s)],["parameters",(l=t.parameters,c=t.blendingMode,{...l,..._(c)})]]);var l,c;T(a.data)&&(a.data=X(a.data),a.extensions=[new z,...null!==(r=a.extensions)&&void 0!==r?r:[]]),"TileLayer"===e&&(a.renderSubLayers=e=>{const{bbox:{west:t,south:n,east:r,north:i},x:o,y:s,z:a}=e.tile;return new p.Z({...e,data:[{z:a,x:o,y:s}],image:e.data,bounds:[t,n,r,i]})}),this.props=a,this.scales=s.filter((([,e])=>S(e))).map((([,e])=>e)),"TextLayer"===e&&"fonts"in document&&document.fonts.load(`16px ${t.fontFamily}`)}static create(e){return new ne(e)}renderLayer(e){if("TripsLayer"===this.type&&void 0!==e){const t=this.props,{loopLength:n,animationSpeed:r}=t,i=n/r,o=e/1e3%i/i;t.currentTime=o*n}return new r[this.type]({...this.props})}renderLegend(){const e=this.scales.filter((e=>e.legend));return{id:this.props.id,name:this.props.name,scales:e}}renderSelector(){var e;return{id:this.props.id,groupName:this.props.groupName,name:this.props.name,visible:null===(e=this.props.visible)||void 0===e||e}}}function re([e,t]){return e.endsWith("Color")&&(Array.isArray(t)||"string"==typeof t)}function ie(e){const t=e=>{const{getData:t,scaleData:n,palette:r,...i}=e;return i},n=e.map((([e,n])=>[e,t(n)]));return Object.fromEntries(n)}function oe(e){return e.filter((([e])=>"getColorWeight"===e||"getElevationWeight"===e)).filter((([,e])=>null!==e&&"function"!=typeof e&&!k(e))).map((([e,t])=>[e,()=>t]))}n(6158),n(2687);var se=n(8202),ae=n(2802),le=n(17),ce=n(3295);const ue=".feature_id";function de(e,t=null){if(!e.picked)return null;null==t&&(t=function({object:e,layer:t}){return!T(t.props.data)||t instanceof ce.Z?function(e){return"Feature"===(null==e?void 0:e.type)&&"geometry"in e&&"type"in e.geometry}(e)?"geojson":"object":"table"}(e));const n=function(e){switch(e){case"table":return(e,{index:t,data:n})=>{const r=Object.keys(n.geometry),i={};for(const[e,o]of Object.entries(n.frame))r.includes(e)||(i[e]=o[t]);return i};case"object":return e=>({...e});case"geojson":return e=>({[ue]:null==e?void 0:e.id,...null==e?void 0:e.properties});default:throw TypeError(`${e} not supported`)}}(t),{object:r,index:i}=e;return n(r,{index:i,data:e.layer.props.data})}const pe="cyWLt4_G7nk5vT9hPr0o",he="Z9hHHet2RXmL0iMel3Zt",fe="jp658yEHLlesSRvwBwDl",ye="t9I8kJyjeEJEOArvMD7j",me="vovHpTur01BROrMLmEFz";function ge({info:e}){if(!e.picked||null==e.layer.props.tooltip)return null;const{x:t,y:n}=e,{name:r,tooltip:o}=e.layer.props,s=de(e,o.dataType);delete s[ue];const a=!0===o.cols?Object.keys(s):o.cols;return(0,i.jsxs)("div",{className:pe,style:{transform:`translate(${t}px, ${n}px)`},children:[(0,i.jsx)("div",{className:he,children:r}),(0,i.jsx)("table",{className:fe,children:(0,i.jsx)("tbody",{children:a.map((e=>{var t;return(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{className:ye,children:e}),(0,i.jsx)("td",{className:me,children:String(null!==(t=s[e])&&void 0!==t?t:null)})]},e)}))})})]})}function ve({props:e,layers:t}){const n=(0,s.useRef)(null),[r,o]=be(),{mapboxAccessToken:a,mapStyle:l,controller:c,parameters:u,blendingMode:d,...p}=e,h={...u,..._(d)},[f,y]=(0,s.useState)(0),m=t.some((e=>"TripsLayer"===e.type));je(m,(e=>y(e)));const g=t.map((e=>null!=e.type?e.renderLayer(f):null));return(0,i.jsxs)(s.Fragment,{children:[(0,i.jsx)(ae.Z,{ref:n,...p,parameters:h,layers:g,onHover:o,children:(0,i.jsx)(se.Z,{id:"map",controller:c,repeat:!0,children:l&&(0,i.jsx)(le.D5,{reuseMaps:!0,mapboxAccessToken:a,mapStyle:l})})}),r&&(0,i.jsx)(ge,{info:r})]})}const be=()=>{const[e,t]=(0,s.useState)(null);return[e,(0,s.useCallback)((e=>{if(!e.picked||!e.layer.props.tooltip||e.layer instanceof ce.Z)return t(null);t(e)}),[])]},je=(e,t)=>{const n=(0,s.useRef)(0),r=(0,s.useRef)(Date.now()),i=()=>{t(Date.now()-r.current),n.current=window.requestAnimationFrame(i)};(0,s.useEffect)((()=>{if(e)return n.current=window.requestAnimationFrame(i),()=>window.cancelAnimationFrame(n.current)}),[e])},we="dePkhbnJCOHYUAj_NSXj",xe="UswwkaMDoib4ytc60Zn9",Le="ci5EIFzH7r10AG6BsqiG",ke="tc2iXBk_fR6q5GWWpo9m",Se="RYWzL7KGDYHIY2NHbF5X",Ce="rn68pqskorQGGcY_sqUg",Ne="nYpzg_48IyHFet4DMSbT",_e="hrbqGf9YJYCqN3_tMI1L",Te="Nq2XC5CmWGG2PSgH92Tr",Ae="njcitPfCPlr7ohpeig92",Oe=16;function Ze({layers:e}){return 0===e.length?null:(0,i.jsx)("div",{className:we,children:e.map((e=>(0,i.jsx)(Ee,{...e},e.id)))})}function Ee({name:e,scales:t}){return 0===t.length?null:(0,i.jsxs)("div",{className:xe,children:[(0,i.jsx)("div",{className:Le,title:e,children:e}),t.map((e=>(0,i.jsx)(Me,{...e},e.name)))]})}function Me(e){var t;const n=e.name.replace(/^get/,"").replace(/([A-Z])/g," $1").toLowerCase();const r="palette"in e;const o=function(e){return"linear"===e.scale||"power"===e.scale||"log"===e.scale||"symlog"===e.scale}(e),s=function(e){return"threshold"===e.scale||"quantile"===e.scale||"quantize"===e.scale}(e);return(0,i.jsxs)("div",{className:ke,children:[(0,i.jsx)("div",{className:Se,children:n}),(0,i.jsx)("span",{className:Ce,children:"by "}),(0,i.jsx)("span",{className:Ne,title:e.col,children:null!==(t=e.scaleBy)&&void 0!==t?t:e.col}),r&&o&&(0,i.jsx)(Pe,{...e}),r&&s&&(0,i.jsx)(He,{...e}),r&&"category"===e.scale&&(0,i.jsx)(Ie,{...e})]})}const Pe=({ticks:e,scaleData:t})=>{const n=e.map(((e,t)=>t)).slice(1,-1),r=Oe*(e.length-1),o=r+11+1;return(0,i.jsxs)("svg",{className:_e,height:o,shapeRendering:"crispEdges",children:[(0,i.jsxs)("svg",{y:5,children:[(0,i.jsx)("image",{width:20,height:r,href:Re(t),preserveAspectRatio:"none"}),n.map((e=>(0,i.jsx)("line",{className:Ae,x2:20,y1:Oe*e,y2:Oe*e},e)))]}),(0,i.jsx)(De,{ticks:e,y:-2})]})},He=({ticks:e,range:t})=>{const n=t.map(f),r=Oe*(e.length-1)+11+1;return(0,i.jsxs)("svg",{className:_e,height:r,shapeRendering:"crispEdges",children:[(0,i.jsx)("svg",{y:5,children:n.map(((e,t)=>(0,i.jsx)("rect",{width:20,height:Oe,y:t*Oe,fill:e},t)))}),(0,i.jsx)(De,{ticks:e,y:-2})]})};function Ie({ticks:e,range:t,unknownTick:n,unknown:r}){const o=n?[...t,r]:t,s=n?[...e,n]:e,a=o.map(f),l=Oe*s.length;return(0,i.jsxs)("svg",{className:_e,height:l,children:[(0,i.jsx)("svg",{children:a.map(((e,t)=>(0,i.jsx)("rect",{width:20,height:14,y:1+t*Oe,fill:e},t)))}),(0,i.jsx)(De,{ticks:s})]})}function De({ticks:e,x:t=28,y:n=0}){return(0,i.jsx)("svg",{x:t,y:n,children:e.map(((e,t)=>(0,i.jsx)("text",{className:Te,y:Oe*t,dy:11,children:String(e)},t)))})}function Re(e,t=200){const n=e.range().length,r=[...Array(n).keys()].map((e=>e/(n-1))),i=e.copy().range(r).invert,o=document.createElement("canvas"),s=o.getContext("2d");o.width=1,o.height=t;for(let n=0;n{var t;return null!==(t=e.groupName)&&void 0!==t?t:`${e.name}-${ot}`})),r=(n,r,i)=>{if(i){const i=!e.filter((e=>!n.includes(e))).some((e=>e.visible));return t(e.map((e=>({...e,visible:n.includes(e)?r:i}))))}t(n.map((e=>({...e,visible:r}))))},[o,a]=(0,s.useState)(!1),l=()=>a((e=>!e));return o?(0,i.jsxs)("div",{className:$e,children:[(0,i.jsx)("div",{className:Je,children:(0,i.jsxs)(st,{className:Ke,onClick:l,tooltip:"Close",children:[(0,i.jsx)(Ve.Z,{className:it,fontSize:"small"}),(0,i.jsx)("span",{className:Xe,children:"Layers"})]})}),(0,i.jsx)("div",{className:Qe,children:Array.from(n.entries(),(([e,t,[{groupName:n}]=t])=>(0,i.jsx)(lt,{group:n,layers:t,onChange:r},e)))})]}):(0,i.jsx)(st,{className:Be,tooltip:"Layer selector",onClick:l,children:(0,i.jsx)(Ve.Z,{className:it,fontSize:"small"})})}function lt({group:e,layers:t,onChange:n}){const r=Array.from(Y(t,(e=>e.name)),(([e,t])=>(0,i.jsx)(ct,{name:e,layers:t,onChange:n},e)));return e?(0,i.jsxs)(s.Fragment,{children:[(0,i.jsx)(ct,{name:e,layers:t,onChange:n}),(0,i.jsx)("div",{className:et,children:r})]}):(0,i.jsx)(s.Fragment,{children:r})}function ct({name:e,layers:t,onChange:n}){const r=function(e){let t=e[0].visible;for(const n of e)if(n.visible!==t)return null;return t}(t),o=null===r,a=(0,s.useRef)(null);(0,s.useEffect)((()=>{a.current&&(a.current.indeterminate=o)}),[o]);const l=(0,s.useRef)((()=>!1)),c=r?We.Z:o?qe.Z:Ye.Z,u=B(tt,r||o?nt:null);return(0,i.jsxs)("label",{className:u,children:[(0,i.jsx)("input",{ref:a,className:rt,type:"checkbox",onChange:()=>{l.current()?n(t,!0,!0):l.current=ut((()=>n(t,!r,!1)),200)},checked:null==r||r}),(0,i.jsx)(c,{fontSize:"small",className:it}),(0,i.jsx)("span",{className:Xe,children:e})]})}const ut=(e,t=200)=>{const n={current:0};let r=0;const i=o=>{if(r||(r=o),o-r>t)return n.current=0,void e();n.current=globalThis.requestAnimationFrame(i)};return n.current=globalThis.requestAnimationFrame(i),()=>0!==n.current&&(globalThis.cancelAnimationFrame(n.current),n.current=0,!0)};function dt({props:e,layers:t,theme:n,lazyLoad:r,layerSelector:o,onLayerVisibilityChange:l,width:c,height:u}){const{initialBounds:d,initialViewState:p,...h}=e,f=function(e,t,n,r){return(0,s.useMemo)((()=>{if(!Array.isArray(n))return r;const[i,o,s,l]=n,c=[[Math.max(-180,i),Math.max(o,-85.051129)],[Math.min(180,s),Math.min(l,85.051129)]],u=new a.Z({width:e,height:t}),{longitude:d,latitude:p,zoom:h}=u.fitBounds(c);return{...r,longitude:d,latitude:p,zoom:h}}),[n,r,e,t])}(c,u,d,p),y=t.map(ne.create),m=(0,s.useRef)(null),g=function(e,t){const[n,r]=(0,s.useState)(!1);return(0,s.useEffect)((()=>{if(t&&e.current){const t=new IntersectionObserver((e=>{r(e[0].isIntersecting)}),{threshold:0});return t.observe(e.current),()=>t.disconnect()}}),[t,e]),n}(m,r),v=!r||g;return(0,i.jsxs)("div",{ref:m,className:B(Ge,n),children:[(0,i.jsx)("div",{className:B(Ue,ze),children:o&&(0,i.jsx)(at,{layers:y.filter((e=>e.props.visibilityToggle)).map((e=>e.renderSelector())).reverse(),onVisibilityChange:l})}),v&&(0,i.jsx)(ve,{props:{...h,initialViewState:f},layers:y}),(0,i.jsx)("div",{className:B(Ue,Fe),children:(0,i.jsx)(Ze,{layers:y.filter((e=>e.props.visible)).map((e=>e.renderLegend())).reverse()})})]})}function pt(e){const t=e instanceof a.Z?e:new a.Z(e),n=V(t,"longitude","latitude","zoom","bearing","pitch","altitude");return{bounds:t.getBounds(),viewState:{...n,center:t.unprojectFlat(t.center)}}}var ht,ft,yt,mt=function(e,t,n,r,i){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?i.call(e,n):i?i.value=n:t.set(e,n),n},gt=function(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)};const vt={name:"rdeck",type:"output",factory:(e,t,n)=>(0!==t&&0!==n||([t,n]=q(e)),new bt(e,t,n))};class bt{constructor(e,t,n){if(ht.set(this,void 0),ft.set(this,void 0),yt.set(this,void 0),this.props={blendingMode:"normal"},this.layers=[],this.theme="kepler",this.layerSelector=!0,this.lazyLoad=!1,mt(this,ht,e,"f"),mt(this,ft,t,"f"),mt(this,yt,n,"f"),this.onClick=this.onClick.bind(this),this.onViewStateChange=this.onViewStateChange.bind(this),HTMLWidgets.shinyMode){const t=$(((e={})=>this.renderValue(e)),50);Shiny.addCustomMessageHandler(`${e.id}:layer`,(e=>{var n,r,i;const o=this.layers.find((t=>t.id===e.id)),s={...o,...e,visible:null!==(n=e.visible)&&void 0!==n?n:null==o?void 0:o.visible,data:null!==(i=null!==(r=e.data)&&void 0!==r?r:null==o?void 0:o.data)&&void 0!==i?i:null};this.layers=null==o?[...this.layers,s]:this.layers.map((e=>e===o?s:e)),t({layers:this.layers})})),Shiny.addCustomMessageHandler(`${e.id}:deck`,(({props:e,theme:t,lazyLoad:n})=>{this.renderValue({props:{...this.props,...e},theme:t,lazyLoad:n})}))}this.setLayerVisibility=this.setLayerVisibility.bind(this)}renderValue({props:e,layers:t,theme:n,layerSelector:r,lazyLoad:s}={}){const a={props:{...this.props,...e,onClick:this.onClick,onViewStateChange:$(this.onViewStateChange,50)},layers:null!=t?t:this.layers,theme:null!=n?n:this.theme,layerSelector:null!=r?r:this.layerSelector,lazyLoad:null!=s?s:this.lazyLoad};Object.assign(this,a),o.render((0,i.jsx)(dt,{...a,onLayerVisibilityChange:this.setLayerVisibility,width:gt(this,ft,"f"),height:gt(this,yt,"f")}),gt(this,ht,"f"))}resize(e,t){}get id(){return gt(this,ht,"f").id}setLayerVisibility(e){if(0===e.length)return;const t=this.layers.map((t=>{const n=e.find((e=>((e,t)=>{const n=e.name===t.name,r=e.groupName===t.groupName;return n&&r||null==e.name&&null!=e.groupName&&r})(e,t)&&e.visible!==t.visible));return n?{...t,visible:n.visible}:t}));this.renderValue({layers:t})}onClick(e){var t;if(HTMLWidgets.shinyMode){const n={coordinate:e.coordinate,...pt(e.viewport),layer:V(null===(t=e.layer)||void 0===t?void 0:t.props,"id","name","groupName"),object:de(e)};Shiny.setInputValue(`${this.id}_click`,n,{priority:"event"})}}onViewStateChange({viewState:e}){if(HTMLWidgets.shinyMode){const t=pt(e);Shiny.setInputValue(`${this.id}_viewstate`,t,{priority:"event"})}}}function jt(e){var t;const n=document.getElementById(e);return null!==(t=null==n?void 0:n.htmlwidget_data_init_result)&&void 0!==t?t:null}function wt(){return[...document.querySelectorAll(".rdeck.html-widget")].map((e=>e.htmlwidget_data_init_result)).filter((e=>e instanceof bt))}ht=new WeakMap,ft=new WeakMap,yt=new WeakMap,HTMLWidgets.widget(vt);const xt="0.4.0"},9521:()=>{},9125:()=>{},9214:()=>{}},i={};function o(e){var t=i[e];if(void 0!==t)return t.exports;var n=i[e]={exports:{}};return r[e].call(n.exports,n,n.exports,o),n.exports}o.m=r,e=[],o.O=(t,n,r,i)=>{if(!n){var s=1/0;for(u=0;u=i)&&Object.keys(o.O).every((e=>o.O[e](n[l])))?n.splice(l--,1):(a=!1,i0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,r,i]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},n=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,o.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var i=Object.create(null);o.r(i);var s={};t=t||[null,n({}),n([]),n(n)];for(var a=2&r&&e;"object"==typeof a&&!~t.indexOf(a);a=n(a))Object.getOwnPropertyNames(a).forEach((t=>s[t]=()=>e[t]));return s.default=()=>e,o.d(i,s),i},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e={472:0};o.O.j=t=>0===e[t];var t=(t,n)=>{var r,i,[s,a,l]=n,c=0;if(s.some((t=>0!==e[t]))){for(r in a)o.o(a,r)&&(o.m[r]=a[r]);if(l)var u=l(o)}for(t&&t(n);co(8981)));return s=o.O(s)})())); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVVvQyxHQUhUN0IsRUFBVWdDLEVBQWFDLEdBQVcvWixFQUdoQnVRLEVBQUksRUFDM0IsR0FBR3VILEVBQVNoVyxNQUFNOEksR0FBZ0MsSUFBeEI4TyxFQUFnQjlPLEtBQWEsQ0FDdEQsSUFBSTJNLEtBQVl1QyxFQUNaeEMsRUFBb0IwQixFQUFFYyxFQUFhdkMsS0FDckNELEVBQW9CSyxFQUFFSixHQUFZdUMsRUFBWXZDLElBR2hELEdBQUd3QyxFQUFTLElBQUlsQyxFQUFTa0MsRUFBUXpDLEdBR2xDLElBREd1QyxHQUE0QkEsRUFBMkI3WixHQUNyRHVRLEVBQUl1SCxFQUFTcFosT0FBUTZSLElBQ3pCb0osRUFBVTdCLEVBQVN2SCxHQUNoQitHLEVBQW9CMEIsRUFBRVUsRUFBaUJDLElBQVlELEVBQWdCQyxJQUNyRUQsRUFBZ0JDLEdBQVMsS0FFMUJELEVBQWdCQyxHQUFXLEVBRTVCLE9BQU9yQyxFQUFvQk0sRUFBRUMsSUFHMUJtQyxFQUFxQnJjLEtBQXdCLGtCQUFJQSxLQUF3QixtQkFBSyxHQUNsRnFjLEVBQW1CbEIsUUFBUWMsRUFBcUJsRSxLQUFLLEtBQU0sSUFDM0RzRSxFQUFtQjNZLEtBQU91WSxFQUFxQmxFLEtBQUssS0FBTXNFLEVBQW1CM1ksS0FBS3FVLEtBQUtzRSxLLEdDN0N2RixJQUFJQyxFQUFzQjNDLEVBQW9CTSxPQUFFeE4sRUFBVyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksTUFBTSxJQUFPa04sRUFBb0IsUSxPQUNqTzJDLEVBQXNCM0MsRUFBb0JNLEVBQUVxQyxJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2NodW5rIGxvYWRlZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2NyZWF0ZSBmYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vLy4vd2lkZ2V0L2NvbG9yLnRzIiwid2VicGFjazovLy8uL3dpZGdldC9hY2Nlc3Nvci50cyIsIndlYnBhY2s6Ly8vLi93aWRnZXQvc2NhbGUudHMiLCJ3ZWJwYWNrOi8vLy4vd2lkZ2V0L2JsZW5kaW5nLnRzIiwid2VicGFjazovLy8uL3dpZGdldC9kYXRhLWZyYW1lLnRzIiwid2VicGFjazovLy8uL3dpZGdldC9tdWx0aS1oaWdobGlnaHQtZXh0ZW5zaW9uLnRzIiwid2VicGFjazovLy8uL3dpZGdldC91dGlsLnRzIiwid2VicGFjazovLy8uL3dpZGdldC9sYXllci50cyIsIndlYnBhY2s6Ly8vLi93aWRnZXQvcGlja2luZy50cyIsIndlYnBhY2s6Ly8vLi93aWRnZXQvdG9vbHRpcC5jc3M/MWMwNiIsIndlYnBhY2s6Ly8vLi93aWRnZXQvdG9vbHRpcC50c3giLCJ3ZWJwYWNrOi8vLy4vd2lkZ2V0L21hcC50c3giLCJ3ZWJwYWNrOi8vLy4vd2lkZ2V0L2xlZ2VuZC5jc3M/ZmRlNiIsIndlYnBhY2s6Ly8vLi93aWRnZXQvbGVnZW5kLnRzeCIsIndlYnBhY2s6Ly8vLi93aWRnZXQvYXBwLmNzcz8yNzg2Iiwid2VicGFjazovLy8uL3dpZGdldC9sYXllci1zZWxlY3Rvci5jc3M/YmIzYSIsIndlYnBhY2s6Ly8vLi93aWRnZXQvbGF5ZXItc2VsZWN0b3IudHN4Iiwid2VicGFjazovLy8uL3dpZGdldC9hcHAudHN4Iiwid2VicGFjazovLy8uL3dpZGdldC92aWV3cG9ydC50cyIsIndlYnBhY2s6Ly8vLi93aWRnZXQvd2lkZ2V0LnRzeCIsIndlYnBhY2s6Ly8vLi93aWRnZXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInJkZWNrXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInJkZWNrXCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgKCkgPT4ge1xucmV0dXJuICIsInZhciBkZWZlcnJlZCA9IFtdO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5PID0gKHJlc3VsdCwgY2h1bmtJZHMsIGZuLCBwcmlvcml0eSkgPT4ge1xuXHRpZihjaHVua0lkcykge1xuXHRcdHByaW9yaXR5ID0gcHJpb3JpdHkgfHwgMDtcblx0XHRmb3IodmFyIGkgPSBkZWZlcnJlZC5sZW5ndGg7IGkgPiAwICYmIGRlZmVycmVkW2kgLSAxXVsyXSA+IHByaW9yaXR5OyBpLS0pIGRlZmVycmVkW2ldID0gZGVmZXJyZWRbaSAtIDFdO1xuXHRcdGRlZmVycmVkW2ldID0gW2NodW5rSWRzLCBmbiwgcHJpb3JpdHldO1xuXHRcdHJldHVybjtcblx0fVxuXHR2YXIgbm90RnVsZmlsbGVkID0gSW5maW5pdHk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZGVmZXJyZWQubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgW2NodW5rSWRzLCBmbiwgcHJpb3JpdHldID0gZGVmZXJyZWRbaV07XG5cdFx0dmFyIGZ1bGZpbGxlZCA9IHRydWU7XG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBjaHVua0lkcy5sZW5ndGg7IGorKykge1xuXHRcdFx0aWYgKChwcmlvcml0eSAmIDEgPT09IDAgfHwgbm90RnVsZmlsbGVkID49IHByaW9yaXR5KSAmJiBPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLk8pLmV2ZXJ5KChrZXkpID0+IChfX3dlYnBhY2tfcmVxdWlyZV9fLk9ba2V5XShjaHVua0lkc1tqXSkpKSkge1xuXHRcdFx0XHRjaHVua0lkcy5zcGxpY2Uoai0tLCAxKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZ1bGZpbGxlZCA9IGZhbHNlO1xuXHRcdFx0XHRpZihwcmlvcml0eSA8IG5vdEZ1bGZpbGxlZCkgbm90RnVsZmlsbGVkID0gcHJpb3JpdHk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmKGZ1bGZpbGxlZCkge1xuXHRcdFx0ZGVmZXJyZWQuc3BsaWNlKGktLSwgMSlcblx0XHRcdHZhciByID0gZm4oKTtcblx0XHRcdGlmIChyICE9PSB1bmRlZmluZWQpIHJlc3VsdCA9IHI7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59OyIsInZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiA/IChvYmopID0+IChPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSkgOiAob2JqKSA9PiAob2JqLl9fcHJvdG9fXyk7XG52YXIgbGVhZlByb3RvdHlwZXM7XG4vLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLy8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8vIG1vZGUgJiAxNjogcmV0dXJuIHZhbHVlIHdoZW4gaXQncyBQcm9taXNlLWxpa2Vcbi8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbl9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG5cdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IHRoaXModmFsdWUpO1xuXHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuXHRpZih0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlKSB7XG5cdFx0aWYoKG1vZGUgJiA0KSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG5cdFx0aWYoKG1vZGUgJiAxNikgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHJldHVybiB2YWx1ZTtcblx0fVxuXHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuXHR2YXIgZGVmID0ge307XG5cdGxlYWZQcm90b3R5cGVzID0gbGVhZlByb3RvdHlwZXMgfHwgW251bGwsIGdldFByb3RvKHt9KSwgZ2V0UHJvdG8oW10pLCBnZXRQcm90byhnZXRQcm90byldO1xuXHRmb3IodmFyIGN1cnJlbnQgPSBtb2RlICYgMiAmJiB2YWx1ZTsgdHlwZW9mIGN1cnJlbnQgPT0gJ29iamVjdCcgJiYgIX5sZWFmUHJvdG90eXBlcy5pbmRleE9mKGN1cnJlbnQpOyBjdXJyZW50ID0gZ2V0UHJvdG8oY3VycmVudCkpIHtcblx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdXJyZW50KS5mb3JFYWNoKChrZXkpID0+IChkZWZba2V5XSA9ICgpID0+ICh2YWx1ZVtrZXldKSkpO1xuXHR9XG5cdGRlZlsnZGVmYXVsdCddID0gKCkgPT4gKHZhbHVlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBkZWYpO1xuXHRyZXR1cm4gbnM7XG59OyIsImNvbnN0IERFRkFVTFRfQ09MT1I6IENvbG9yID0gWzAsIDAsIDAsIDI1NV07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbG9yUHJvcChuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIG5hbWUuZW5kc1dpdGgoXCJDb2xvclwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYmEoW3IsIGcsIGIsIGEgPSAyNTVdOiBDb2xvcikge1xuICByZXR1cm4gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgJHthIC8gMjU1fSlgO1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdWJlci9kZWNrLmdsL2Jsb2IvbWFzdGVyL21vZHVsZXMvY29yZS9zcmMvdXRpbHMvY29sb3IuanNcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNvbG9yKGNvbG9yOiBzdHJpbmcgfCBDb2xvciwgdGFyZ2V0PzogQ29sb3IpOiBDb2xvciB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNvbG9yKSkge1xuICAgIGlmICghdGFyZ2V0ICYmIGNvbG9yLmxlbmd0aCA9PT0gNCkge1xuICAgICAgcmV0dXJuIGNvbG9yO1xuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0YXJnZXQgPSB0YXJnZXQgPz8gKFtdIGFzIENvbG9yKTtcbiAgICB0YXJnZXRbMF0gPSBjb2xvclswXTtcbiAgICB0YXJnZXRbMV0gPSBjb2xvclsxXTtcbiAgICB0YXJnZXRbMl0gPSBjb2xvclsyXTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGFyZ2V0WzNdID0gY29sb3IubGVuZ3RoID09PSAzID8gY29sb3JbM10gOiAyNTU7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29sb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGFyZ2V0ID0gdGFyZ2V0ID8/IChbXSBhcyBDb2xvcik7XG4gICAgcGFyc2VIZXhDb2xvcihjb2xvciwgdGFyZ2V0KTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgcmV0dXJuIERFRkFVTFRfQ09MT1I7XG59XG5cbi8vIFBhcnNlIGEgaGV4IGNvbG9yXG5mdW5jdGlvbiBwYXJzZUhleENvbG9yKGNvbG9yOiBzdHJpbmcsIHRhcmdldDogQ29sb3IpIHtcbiAgaWYgKGNvbG9yLmxlbmd0aCA9PT0gNykge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQoY29sb3Iuc3Vic3RyaW5nKDEpLCAxNik7XG4gICAgdGFyZ2V0WzBdID0gTWF0aC5mbG9vcih2YWx1ZSAvIDY1NTM2KTtcbiAgICB0YXJnZXRbMV0gPSBNYXRoLmZsb29yKCh2YWx1ZSAvIDI1NikgJSAyNTYpO1xuICAgIHRhcmdldFsyXSA9IHZhbHVlICUgMjU2O1xuICAgIHRhcmdldFszXSA9IDI1NTtcbiAgfSBlbHNlIGlmIChjb2xvci5sZW5ndGggPT09IDkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGNvbG9yLnN1YnN0cmluZygxKSwgMTYpO1xuICAgIHRhcmdldFswXSA9IE1hdGguZmxvb3IodmFsdWUgLyAxNjc3NzIxNik7XG4gICAgdGFyZ2V0WzFdID0gTWF0aC5mbG9vcigodmFsdWUgLyA2NTUzNikgJSAyNTYpO1xuICAgIHRhcmdldFsyXSA9IE1hdGguZmxvb3IoKHZhbHVlIC8gMjU2KSAlIDI1Nik7XG4gICAgdGFyZ2V0WzNdID0gdmFsdWUgJSAyNTY7XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgUGlja0luZm8sIEFjY2Vzc29yRm4gfSBmcm9tIFwiQGRlY2suZ2wvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcImdlb2pzb25cIjtcbmltcG9ydCB7IHBhcnNlQ29sb3IgfSBmcm9tIFwiLi9jb2xvclwiO1xuXG50eXBlIEFjY2Vzc29yQmFzZSA9IHtcbiAgdHlwZTogXCJhY2Nlc3NvclwiO1xuICBjb2w6IHN0cmluZztcbn07XG5cbnR5cGUgQWNjZXNzb3JUYWJsZSA9IEFjY2Vzc29yQmFzZSAmIHtcbiAgZGF0YVR5cGU6IFwidGFibGVcIjtcbiAgZ2V0RGF0YTogQWNjZXNzb3JGbjxEYXRhRnJhbWUsIGFueT47XG59O1xuXG50eXBlIEFjY2Vzc29yT2JqZWN0ID0gQWNjZXNzb3JCYXNlICYge1xuICBkYXRhVHlwZTogXCJvYmplY3RcIjtcbiAgZ2V0RGF0YTogQWNjZXNzb3JGbjxSZWNvcmQ8c3RyaW5nLCBhbnk+LCBhbnk+O1xufTtcblxudHlwZSBBY2Nlc3Nvckdlb0pzb24gPSBBY2Nlc3NvckJhc2UgJiB7XG4gIGRhdGFUeXBlOiBcImdlb2pzb25cIjtcbiAgZ2V0RGF0YTogQWNjZXNzb3JGbjxGZWF0dXJlLCBhbnk+O1xufTtcblxuZXhwb3J0IHR5cGUgQWNjZXNzb3IgPSBBY2Nlc3NvclRhYmxlIHwgQWNjZXNzb3JPYmplY3QgfCBBY2Nlc3Nvckdlb0pzb247XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FjY2Vzc29yKG9iajogYW55KTogb2JqIGlzIEFjY2Vzc29yIHtcbiAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmIG9iai50eXBlID09PSBcImFjY2Vzc29yXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhY2Nlc3NvcihvYmo6IEFjY2Vzc29yLCBuYW1lOiBzdHJpbmcpOiBBY2Nlc3NvciB7XG4gIGNvbnN0IGdldERhdGEgPSBhY2Nlc3NvckZuKG9iaiwgbmFtZSkgYXMgQWNjZXNzb3JGbjxhbnksIGFueT47XG4gIHJldHVybiB7XG4gICAgLi4ub2JqLFxuICAgIGdldERhdGEsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFjY2Vzc29yRm4oeyBjb2wsIGRhdGFUeXBlIH06IEFjY2Vzc29yLCBuYW1lOiBzdHJpbmcpOiBBY2Nlc3NvckZuPGFueSwgYW55PiB7XG4gIGlmIChuYW1lID09PSBcImhpZ2hsaWdodENvbG9yXCIpIHtcbiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICBjYXNlIFwidGFibGVcIjpcbiAgICAgICAgcmV0dXJuIHRhYmxlSGlnaGxpZ2h0KGNvbCk7XG4gICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIHJldHVybiBvYmplY3RIaWdobGlnaHQoY29sKTtcbiAgICAgIGNhc2UgXCJnZW9qc29uXCI6XG4gICAgICAgIHJldHVybiBnZW9qc29uSGlnaGxpZ2h0KGNvbCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYCR7ZGF0YVR5cGV9IG5vdCBzdXBwb3J0ZWRgKTtcbiAgICB9XG4gIH1cblxuICBpZiAobmFtZS5lbmRzV2l0aChcIkNvbG9yXCIpKSB7XG4gICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgY2FzZSBcInRhYmxlXCI6XG4gICAgICAgIHJldHVybiB0YWJsZUNvbG9yKGNvbCk7XG4gICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIHJldHVybiBvYmplY3RDb2xvcihjb2wpO1xuICAgICAgY2FzZSBcImdlb2pzb25cIjpcbiAgICAgICAgcmV0dXJuIGdlb2pzb25Db2xvcihjb2wpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKGAke2RhdGFUeXBlfSBub3Qgc3VwcG9ydGVkYCk7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgICAgcmV0dXJuIHRhYmxlRGF0YShjb2wpO1xuICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgIHJldHVybiBvYmplY3REYXRhKGNvbCk7XG4gICAgY2FzZSBcImdlb2pzb25cIjpcbiAgICAgIHJldHVybiBnZW9qc29uRGF0YShjb2wpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoYCR7ZGF0YVR5cGV9IG5vdCBzdXBwb3J0ZWRgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0YWJsZURhdGEoY29sOiBzdHJpbmcpOiBBY2Nlc3NvckZuPERhdGFGcmFtZSwgYW55PiB7XG4gIHJldHVybiAoXywgeyBpbmRleCwgZGF0YSB9KSA9PiBkYXRhLmZyYW1lW2NvbF1baW5kZXhdO1xufVxuXG5mdW5jdGlvbiB0YWJsZUNvbG9yKGNvbDogc3RyaW5nKTogQWNjZXNzb3JGbjxEYXRhRnJhbWUsIENvbG9yPiB7XG4gIHJldHVybiAoXywgeyBpbmRleCwgZGF0YSwgdGFyZ2V0IH0pID0+IHBhcnNlQ29sb3IoZGF0YS5mcmFtZVtjb2xdW2luZGV4XSwgdGFyZ2V0KTtcbn1cblxuZnVuY3Rpb24gdGFibGVIaWdobGlnaHQoY29sOiBzdHJpbmcpOiBBY2Nlc3NvckZuPFBpY2tJbmZvPG51bGw+LCBDb2xvcj4ge1xuICByZXR1cm4gKHsgaW5kZXgsIGxheWVyIH0pID0+XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHBhcnNlQ29sb3IobGF5ZXIucHJvcHMuZGF0YSEuZnJhbWVbY29sXVtpbmRleF0pO1xufVxuXG5mdW5jdGlvbiBvYmplY3REYXRhKGNvbDogc3RyaW5nKTogQWNjZXNzb3JGbjxSZWNvcmQ8c3RyaW5nLCBhbnk+LCBhbnk+IHtcbiAgcmV0dXJuIChvYmplY3QpID0+IG9iamVjdFtjb2xdO1xufVxuXG5mdW5jdGlvbiBvYmplY3RDb2xvcihjb2w6IHN0cmluZyk6IEFjY2Vzc29yRm48UmVjb3JkPHN0cmluZywgYW55PiwgQ29sb3I+IHtcbiAgcmV0dXJuIChvYmplY3QsIHsgdGFyZ2V0IH0pID0+IHBhcnNlQ29sb3Iob2JqZWN0W2NvbF0sIHRhcmdldCk7XG59XG5cbmZ1bmN0aW9uIG9iamVjdEhpZ2hsaWdodChjb2w6IHN0cmluZyk6IEFjY2Vzc29yRm48UGlja0luZm88UmVjb3JkPHN0cmluZywgYW55Pj4sIENvbG9yPiB7XG4gIHJldHVybiAoeyBvYmplY3QgfSkgPT4gcGFyc2VDb2xvcihvYmplY3RbY29sXSk7XG59XG5cbmZ1bmN0aW9uIGdlb2pzb25EYXRhKGNvbDogc3RyaW5nKTogQWNjZXNzb3JGbjxGZWF0dXJlLCBhbnk+IHtcbiAgcmV0dXJuIChvYmplY3QpID0+IG9iamVjdC5wcm9wZXJ0aWVzIVtjb2xdO1xufVxuXG5mdW5jdGlvbiBnZW9qc29uQ29sb3IoY29sOiBzdHJpbmcpOiBBY2Nlc3NvckZuPEZlYXR1cmUsIENvbG9yPiB7XG4gIHJldHVybiAob2JqZWN0LCB7IHRhcmdldCB9KSA9PiBwYXJzZUNvbG9yKG9iamVjdC5wcm9wZXJ0aWVzIVtjb2xdLCB0YXJnZXQpO1xufVxuXG5mdW5jdGlvbiBnZW9qc29uSGlnaGxpZ2h0KGNvbDogc3RyaW5nKTogQWNjZXNzb3JGbjxQaWNrSW5mbzxGZWF0dXJlPiwgQ29sb3I+IHtcbiAgcmV0dXJuICh7IG9iamVjdCB9KSA9PiBwYXJzZUNvbG9yKG9iamVjdC5wcm9wZXJ0aWVzIVtjb2xdKTtcbn1cbiIsImltcG9ydCB7XG4gIHNjYWxlTGluZWFyLFxuICBTY2FsZUxpbmVhcixcbiAgc2NhbGVMb2csXG4gIFNjYWxlTG9nYXJpdGhtaWMsXG4gIHNjYWxlT3JkaW5hbCxcbiAgU2NhbGVPcmRpbmFsLFxuICBzY2FsZVBvdyxcbiAgU2NhbGVQb3dlcixcbiAgc2NhbGVRdWFudGl6ZSxcbiAgU2NhbGVRdWFudGl6ZSxcbiAgU2NhbGVTeW1Mb2csXG4gIHNjYWxlU3ltbG9nLFxuICBTY2FsZVRocmVzaG9sZCxcbiAgc2NhbGVUaHJlc2hvbGQsXG4gIHNjYWxlSWRlbnRpdHksXG4gIFNjYWxlSWRlbnRpdHksXG59IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHR5cGUgeyBQaWNrSW5mbywgQWNjZXNzb3JGbiB9IGZyb20gXCJAZGVjay5nbC9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmUgfSBmcm9tIFwiZ2VvanNvblwiO1xuaW1wb3J0IHsgQWNjZXNzb3IsIGlzQWNjZXNzb3IgfSBmcm9tIFwiLi9hY2Nlc3NvclwiO1xuaW1wb3J0IHsgcGFyc2VDb2xvciB9IGZyb20gXCIuL2NvbG9yXCI7XG5cbnR5cGUgU2NhbGVGbiA9IChkYXRhOiBhbnkpID0+IG51bWJlciB8IENvbG9yO1xuXG50eXBlIEFjY2Vzc29yU2NhbGVCYXNlPFJhbmdlPiA9IEFjY2Vzc29yICYge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRvbWFpbjogbnVtYmVyW107XG4gIHJhbmdlOiBSYW5nZVtdO1xuICBwYWxldHRlPzogQ29sb3JbXTtcbiAgdW5rbm93bjogUmFuZ2U7XG4gIGxlZ2VuZDogYm9vbGVhbjtcbiAgdGlja3M6IHN0cmluZ1tdO1xuICBzY2FsZUJ5Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQWNjZXNzb3JTY2FsZUxpbmVhcjxSYW5nZT4gPSBBY2Nlc3NvclNjYWxlQmFzZTxSYW5nZT4gJiB7XG4gIHNjYWxlOiBcImxpbmVhclwiO1xuICBzY2FsZURhdGE6IFNjYWxlTGluZWFyPFJhbmdlLCBSYW5nZT47XG59O1xuXG5leHBvcnQgdHlwZSBBY2Nlc3NvclNjYWxlUG93ZXI8UmFuZ2U+ID0gQWNjZXNzb3JTY2FsZUJhc2U8UmFuZ2U+ICYge1xuICBzY2FsZTogXCJwb3dlclwiO1xuICBleHBvbmVudDogbnVtYmVyO1xuICBzY2FsZURhdGE6IFNjYWxlUG93ZXI8UmFuZ2UsIFJhbmdlPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFjY2Vzc29yU2NhbGVMb2c8UmFuZ2U+ID0gQWNjZXNzb3JTY2FsZUJhc2U8UmFuZ2U+ICYge1xuICBzY2FsZTogXCJsb2dcIjtcbiAgYmFzZTogbnVtYmVyO1xuICBzY2FsZURhdGE6IFNjYWxlTG9nYXJpdGhtaWM8UmFuZ2UsIFJhbmdlPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFjY2Vzc29yU2NhbGVTeW1sb2c8UmFuZ2U+ID0gQWNjZXNzb3JTY2FsZUJhc2U8UmFuZ2U+ICYge1xuICBzY2FsZTogXCJzeW1sb2dcIjtcbiAgc2NhbGVEYXRhOiBTY2FsZVN5bUxvZzxSYW5nZSwgUmFuZ2U+O1xufTtcblxuZXhwb3J0IHR5cGUgQWNjZXNzb3JTY2FsZUlkZW50aXR5PFJhbmdlPiA9IEFjY2Vzc29yU2NhbGVCYXNlPFJhbmdlPiAmIHtcbiAgc2NhbGU6IFwiaWRlbnRpdHlcIjtcbiAgc2NhbGVEYXRhOiBTY2FsZUlkZW50aXR5PFJhbmdlPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFjY2Vzc29yU2NhbGVUaHJlc2hvbGQ8UmFuZ2U+ID0gQWNjZXNzb3JTY2FsZUJhc2U8UmFuZ2U+ICYge1xuICBzY2FsZTogXCJ0aHJlc2hvbGRcIjtcbiAgc2NhbGVEYXRhOiBTY2FsZVRocmVzaG9sZDxudW1iZXIsIFJhbmdlPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFjY2Vzc29yU2NhbGVRdWFudGlsZTxSYW5nZT4gPSBBY2Nlc3NvclNjYWxlQmFzZTxSYW5nZT4gJiB7XG4gIHNjYWxlOiBcInF1YW50aWxlXCI7XG4gIHNjYWxlRGF0YTogU2NhbGVUaHJlc2hvbGQ8bnVtYmVyLCBSYW5nZT47XG59O1xuXG5leHBvcnQgdHlwZSBBY2Nlc3NvclNjYWxlQ2F0ZWdvcnk8UmFuZ2U+ID0gQWNjZXNzb3JTY2FsZUJhc2U8UmFuZ2U+ICYge1xuICBzY2FsZTogXCJjYXRlZ29yeVwiO1xuICBkb21haW46IHN0cmluZ1tdO1xuICB1bmtub3duVGljazogc3RyaW5nIHwgbnVsbDtcbiAgc2NhbGVEYXRhOiBTY2FsZU9yZGluYWw8c3RyaW5nLCBSYW5nZT47XG59O1xuXG5leHBvcnQgdHlwZSBBY2Nlc3NvclNjYWxlUXVhbnRpemU8UmFuZ2U+ID0gQWNjZXNzb3JTY2FsZUJhc2U8UmFuZ2U+ICYge1xuICBzY2FsZTogXCJxdWFudGl6ZVwiO1xuICBkb21haW46IFtudW1iZXIsIG51bWJlcl07XG4gIHNjYWxlRGF0YTogU2NhbGVRdWFudGl6ZTxSYW5nZT47XG59O1xuXG5leHBvcnQgdHlwZSBBY2Nlc3NvclNjYWxlQ29udGludW91czxSYW5nZT4gPVxuICB8IEFjY2Vzc29yU2NhbGVMaW5lYXI8UmFuZ2U+XG4gIHwgQWNjZXNzb3JTY2FsZVBvd2VyPFJhbmdlPlxuICB8IEFjY2Vzc29yU2NhbGVMb2c8UmFuZ2U+XG4gIHwgQWNjZXNzb3JTY2FsZVN5bWxvZzxSYW5nZT47XG5leHBvcnQgdHlwZSBBY2Nlc3NvclNjYWxlRGlzY3JldGU8UmFuZ2U+ID1cbiAgfCBBY2Nlc3NvclNjYWxlVGhyZXNob2xkPFJhbmdlPlxuICB8IEFjY2Vzc29yU2NhbGVRdWFudGlsZTxSYW5nZT5cbiAgfCBBY2Nlc3NvclNjYWxlUXVhbnRpemU8UmFuZ2U+O1xuZXhwb3J0IHR5cGUgQWNjZXNzb3JTY2FsZTxSYW5nZT4gPVxuICB8IEFjY2Vzc29yU2NhbGVDb250aW51b3VzPFJhbmdlPlxuICB8IEFjY2Vzc29yU2NhbGVEaXNjcmV0ZTxSYW5nZT5cbiAgfCBBY2Nlc3NvclNjYWxlQ2F0ZWdvcnk8UmFuZ2U+XG4gIHwgQWNjZXNzb3JTY2FsZUlkZW50aXR5PFJhbmdlPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWNjZXNzb3JTY2FsZShvYmo6IGFueSk6IG9iaiBpcyBBY2Nlc3NvclNjYWxlPG51bWJlciB8IENvbG9yPiB7XG4gIHJldHVybiBpc0FjY2Vzc29yKG9iaikgJiYgXCJzY2FsZVwiIGluIG9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29sb3JTY2FsZShvYmo6IEFjY2Vzc29yU2NhbGU8bnVtYmVyIHwgQ29sb3I+KTogb2JqIGlzIEFjY2Vzc29yU2NhbGU8Q29sb3I+IHtcbiAgcmV0dXJuIFwicGFsZXR0ZVwiIGluIG9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGludW91c1NjYWxlPFQ+KG9iajogQWNjZXNzb3JTY2FsZTxUPik6IG9iaiBpcyBBY2Nlc3NvclNjYWxlQ29udGludW91czxUPiB7XG4gIHJldHVybiAoXG4gICAgb2JqLnNjYWxlID09PSBcImxpbmVhclwiIHx8IG9iai5zY2FsZSA9PT0gXCJwb3dlclwiIHx8IG9iai5zY2FsZSA9PT0gXCJsb2dcIiB8fCBvYmouc2NhbGUgPT09IFwic3ltbG9nXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlzY3JldGVTY2FsZTxUPihvYmo6IEFjY2Vzc29yU2NhbGU8VD4pOiBvYmogaXMgQWNjZXNzb3JTY2FsZURpc2NyZXRlPFQ+IHtcbiAgcmV0dXJuIG9iai5zY2FsZSA9PT0gXCJ0aHJlc2hvbGRcIiB8fCBvYmouc2NhbGUgPT09IFwicXVhbnRpbGVcIiB8fCBvYmouc2NhbGUgPT09IFwicXVhbnRpemVcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFjY2Vzc29yU2NhbGUoXG4gIG9iajogQWNjZXNzb3JTY2FsZTxudW1iZXIgfCBDb2xvcj4sXG4gIG5hbWU6IHN0cmluZ1xuKTogQWNjZXNzb3JTY2FsZTxudW1iZXIgfCBDb2xvcj4ge1xuICBpZiAoXCJwYWxldHRlXCIgaW4gb2JqKSB7XG4gICAgb2JqLnJhbmdlID0gb2JqLnBhbGV0dGUhLm1hcCgoY29sb3IpID0+IHBhcnNlQ29sb3IoY29sb3IpKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb2JqLnVua25vd24gPSBwYXJzZUNvbG9yKG9iai51bmtub3duKTtcbiAgfVxuXG4gIGNvbnN0IHNjYWxlRGF0YSA9IHNjYWxlRm4ob2JqKSBhcyBhbnk7XG4gIGNvbnN0IGdldERhdGE6IEFjY2Vzc29yRm48YW55LCBhbnk+ID1cbiAgICBuYW1lID09PSBcImhpZ2hsaWdodENvbG9yXCIgPyBoaWdobGlnaHRGbihvYmosIHNjYWxlRGF0YSkgOiBhY2Nlc3NvckZuKG9iaiwgc2NhbGVEYXRhKTtcblxuICByZXR1cm4ge1xuICAgIC4uLm9iaixcbiAgICBuYW1lLFxuICAgIGdldERhdGEsXG4gICAgc2NhbGVEYXRhLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzY2FsZUZuKGFjY2Vzc29yOiBBY2Nlc3NvclNjYWxlPGFueT4pIHtcbiAgdHlwZSBUID0gbnVtYmVyIHwgQ29sb3I7XG5cbiAgc3dpdGNoIChhY2Nlc3Nvci5zY2FsZSkge1xuICAgIGNhc2UgXCJsaW5lYXJcIjpcbiAgICAgIHJldHVybiBzY2FsZUxpbmVhcjxUPigpXG4gICAgICAgIC5kb21haW4oYWNjZXNzb3IuZG9tYWluKVxuICAgICAgICAucmFuZ2UoYWNjZXNzb3IucmFuZ2UpXG4gICAgICAgIC51bmtub3duKGFjY2Vzc29yLnVua25vd24pXG4gICAgICAgIC5jbGFtcCh0cnVlKTtcbiAgICBjYXNlIFwicG93ZXJcIjpcbiAgICAgIHJldHVybiBzY2FsZVBvdzxUPigpXG4gICAgICAgIC5leHBvbmVudChhY2Nlc3Nvci5leHBvbmVudClcbiAgICAgICAgLmRvbWFpbihhY2Nlc3Nvci5kb21haW4pXG4gICAgICAgIC5yYW5nZShhY2Nlc3Nvci5yYW5nZSlcbiAgICAgICAgLnVua25vd24oYWNjZXNzb3IudW5rbm93bilcbiAgICAgICAgLmNsYW1wKHRydWUpO1xuICAgIGNhc2UgXCJsb2dcIjpcbiAgICAgIHJldHVybiBzY2FsZUxvZzxUPigpXG4gICAgICAgIC5iYXNlKGFjY2Vzc29yLmJhc2UpXG4gICAgICAgIC5kb21haW4oYWNjZXNzb3IuZG9tYWluKVxuICAgICAgICAucmFuZ2UoYWNjZXNzb3IucmFuZ2UpXG4gICAgICAgIC51bmtub3duKGFjY2Vzc29yLnVua25vd24pXG4gICAgICAgIC5jbGFtcCh0cnVlKTtcbiAgICBjYXNlIFwic3ltbG9nXCI6XG4gICAgICByZXR1cm4gc2NhbGVTeW1sb2c8VD4oKVxuICAgICAgICAuZG9tYWluKGFjY2Vzc29yLmRvbWFpbilcbiAgICAgICAgLnJhbmdlKGFjY2Vzc29yLnJhbmdlKVxuICAgICAgICAudW5rbm93bihhY2Nlc3Nvci51bmtub3duKVxuICAgICAgICAuY2xhbXAodHJ1ZSk7XG4gICAgY2FzZSBcImlkZW50aXR5XCI6XG4gICAgICByZXR1cm4gc2NhbGVJZGVudGl0eTxUPigpLnVua25vd24oYWNjZXNzb3IudW5rbm93bik7XG4gICAgY2FzZSBcInRocmVzaG9sZFwiOlxuICAgIGNhc2UgXCJxdWFudGlsZVwiOlxuICAgICAgcmV0dXJuIHNjYWxlVGhyZXNob2xkPG51bWJlciwgVD4oKVxuICAgICAgICAuZG9tYWluKGFjY2Vzc29yLmRvbWFpbilcbiAgICAgICAgLnJhbmdlKGFjY2Vzc29yLnJhbmdlKVxuICAgICAgICAudW5rbm93bihhY2Nlc3Nvci51bmtub3duKTtcbiAgICBjYXNlIFwiY2F0ZWdvcnlcIjpcbiAgICAgIHJldHVybiBzY2FsZU9yZGluYWw8VD4oKVxuICAgICAgICAuZG9tYWluKGFjY2Vzc29yLmRvbWFpbilcbiAgICAgICAgLnJhbmdlKGFjY2Vzc29yLnJhbmdlKVxuICAgICAgICAudW5rbm93bihhY2Nlc3Nvci51bmtub3duKTtcbiAgICBjYXNlIFwicXVhbnRpemVcIjpcbiAgICAgIHJldHVybiBzY2FsZVF1YW50aXplPFQ+KClcbiAgICAgICAgLmRvbWFpbihhY2Nlc3Nvci5kb21haW4pXG4gICAgICAgIC5yYW5nZShhY2Nlc3Nvci5yYW5nZSlcbiAgICAgICAgLnVua25vd24oYWNjZXNzb3IudW5rbm93bik7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IFR5cGVFcnJvcihgc2NhbGUgJHsoYWNjZXNzb3IgYXMgYW55KS5zY2FsZX0gbm90IHN1cHBvcnRlZGApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFjY2Vzc29yRm4oeyBjb2wsIGRhdGFUeXBlIH06IEFjY2Vzc29yLCBzY2FsZURhdGE6IFNjYWxlRm4pOiBBY2Nlc3NvckZuPGFueSwgYW55PiB7XG4gIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICBjYXNlIFwidGFibGVcIjpcbiAgICAgIHJldHVybiB0YWJsZURhdGEoY29sLCBzY2FsZURhdGEpO1xuICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgIHJldHVybiBvYmplY3REYXRhKGNvbCwgc2NhbGVEYXRhKTtcbiAgICBjYXNlIFwiZ2VvanNvblwiOlxuICAgICAgcmV0dXJuIGdlb2pzb25EYXRhKGNvbCwgc2NhbGVEYXRhKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgVHlwZUVycm9yKGAke2RhdGFUeXBlfSBub3Qgc3VwcG9ydGVkYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGlnaGxpZ2h0Rm4oeyBjb2wsIGRhdGFUeXBlIH06IEFjY2Vzc29yLCBzY2FsZURhdGE6IFNjYWxlRm4pOiBBY2Nlc3NvckZuPGFueSwgYW55PiB7XG4gIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICBjYXNlIFwidGFibGVcIjpcbiAgICAgIHJldHVybiB0YWJsZUhpZ2hsaWdodChjb2wsIHNjYWxlRGF0YSk7XG4gICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgcmV0dXJuIG9iamVjdEhpZ2hsaWdodChjb2wsIHNjYWxlRGF0YSk7XG4gICAgY2FzZSBcImdlb2pzb25cIjpcbiAgICAgIHJldHVybiBnZW9qc29uSGlnaGxpZ2h0KGNvbCwgc2NhbGVEYXRhKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgVHlwZUVycm9yKGAke2RhdGFUeXBlfSBub3Qgc3VwcG9ydGVkYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdGFibGVEYXRhKGNvbDogc3RyaW5nLCBzY2FsZURhdGE6IFNjYWxlRm4pOiBBY2Nlc3NvckZuPERhdGFGcmFtZSwgYW55PiB7XG4gIHJldHVybiAoXywgeyBpbmRleCwgZGF0YSB9KSA9PiBzY2FsZURhdGEoZGF0YS5mcmFtZVtjb2xdW2luZGV4XSk7XG59XG5cbmZ1bmN0aW9uIHRhYmxlSGlnaGxpZ2h0KGNvbDogc3RyaW5nLCBzY2FsZURhdGE6IFNjYWxlRm4pOiBBY2Nlc3NvckZuPFBpY2tJbmZvPG51bGw+LCBhbnk+IHtcbiAgcmV0dXJuICh7IGluZGV4LCBsYXllciB9KSA9PlxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBzY2FsZURhdGEobGF5ZXIucHJvcHMuZGF0YSEuZnJhbWVbY29sXVtpbmRleF0pO1xufVxuXG5mdW5jdGlvbiBvYmplY3REYXRhKGNvbDogc3RyaW5nLCBzY2FsZURhdGE6IFNjYWxlRm4pOiBBY2Nlc3NvckZuPFJlY29yZDxzdHJpbmcsIGFueT4sIGFueT4ge1xuICByZXR1cm4gKG9iamVjdCkgPT4gc2NhbGVEYXRhKG9iamVjdFtjb2xdKTtcbn1cblxuZnVuY3Rpb24gb2JqZWN0SGlnaGxpZ2h0KFxuICBjb2w6IHN0cmluZyxcbiAgc2NhbGVEYXRhOiBTY2FsZUZuXG4pOiBBY2Nlc3NvckZuPFBpY2tJbmZvPFJlY29yZDxzdHJpbmcsIGFueT4+LCBhbnk+IHtcbiAgcmV0dXJuICh7IG9iamVjdCB9KSA9PiBzY2FsZURhdGEob2JqZWN0W2NvbF0pO1xufVxuXG5mdW5jdGlvbiBnZW9qc29uRGF0YShjb2w6IHN0cmluZywgc2NhbGVEYXRhOiBTY2FsZUZuKTogQWNjZXNzb3JGbjxGZWF0dXJlLCBhbnk+IHtcbiAgcmV0dXJuIChvYmplY3QpID0+IHNjYWxlRGF0YShvYmplY3QucHJvcGVydGllcyFbY29sXSk7XG59XG5cbmZ1bmN0aW9uIGdlb2pzb25IaWdobGlnaHQoY29sOiBzdHJpbmcsIHNjYWxlRGF0YTogU2NhbGVGbik6IEFjY2Vzc29yRm48UGlja0luZm88RmVhdHVyZT4sIGFueT4ge1xuICByZXR1cm4gKHsgb2JqZWN0IH0pID0+IHNjYWxlRGF0YShvYmplY3QucHJvcGVydGllcyFbY29sXSk7XG59XG4iLCJpbXBvcnQgeyBkZWZhdWx0IGFzIEdMIH0gZnJvbSBcIkBsdW1hLmdsL2NvbnN0YW50c1wiO1xuXG5jb25zdCBCTEVORElOR19NT0RFUyA9IE9iamVjdC5mcmVlemUoe1xuICBhZGRpdGl2ZToge1xuICAgIFtHTC5CTEVORF06IHRydWUsXG4gICAgYmxlbmRGdW5jOiBbR0wuU1JDX0FMUEhBLCBHTC5EU1RfQUxQSEFdLFxuICAgIGJsZW5kRXF1YXRpb246IEdMLkZVTkNfQURELFxuICB9LFxuICBzdWJ0cmFjdGl2ZToge1xuICAgIFtHTC5CTEVORF06IHRydWUsXG4gICAgYmxlbmRGdW5jOiBbR0wuT05FLCBHTC5PTkVfTUlOVVNfRFNUX0NPTE9SLCBHTC5TUkNfQUxQSEEsIEdMLkRTVF9BTFBIQV0sXG4gICAgYmxlbmRFcXVhdGlvbjogW0dMLkZVTkNfU1VCVFJBQ1QsIEdMLkZVTkNfQUREXSxcbiAgfSxcbiAgbm9ybWFsOiB7XG4gICAgW0dMLkJMRU5EXTogdHJ1ZSxcbiAgICBibGVuZEZ1bmM6IFtHTC5TUkNfQUxQSEEsIEdMLk9ORV9NSU5VU19TUkNfQUxQSEEsIEdMLk9ORSwgR0wuT05FX01JTlVTX1NSQ19BTFBIQV0sXG4gICAgYmxlbmRFcXVhdGlvbjogW0dMLkZVTkNfQURELCBHTC5GVU5DX0FERF0sXG4gIH0sXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGJsZW5kaW5nUGFyYW1ldGVycyhtb2RlOiBCbGVuZGluZ01vZGUgPSBcIm5vcm1hbFwiKSB7XG4gIHJldHVybiBCTEVORElOR19NT0RFU1ttb2RlXSA/PyBCTEVORElOR19NT0RFUy5ub3JtYWw7XG59XG4iLCJpbXBvcnQgdHlwZSB7IFBvc2l0aW9uIH0gZnJvbSBcImdlb2pzb25cIjtcblxudHlwZSBHZW9tZXRyeUluZm8gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogR2VvbWV0cnlUeXBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUZyYW1lKGRhdGE6IExheWVyRGF0YSk6IGRhdGEgaXMgRGF0YUZyYW1lIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgJiYgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgXCJmcmFtZVwiIGluIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuR2VvbWV0cmllcyhkYXRhOiBEYXRhRnJhbWUpOiBEYXRhRnJhbWUge1xuICBjb25zdCBtdWx0aUdlb21ldHJpZXMgPSBnZXRNdWx0aUdlb21ldHJ5KGRhdGEpO1xuICBpZiAobXVsdGlHZW9tZXRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcmV0dXJuIG11bHRpR2VvbWV0cmllcy5yZWR1Y2UoZmxhdHRlbiwgZGF0YSk7XG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW4oZGF0YTogRGF0YUZyYW1lLCB7IG5hbWUsIHR5cGUgfTogR2VvbWV0cnlJbmZvKTogRGF0YUZyYW1lIHtcbiAgY29uc3Qgb2xkRnJhbWUgPSBkYXRhLmZyYW1lO1xuICBjb25zdCBuZXdGcmFtZSA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhvbGRGcmFtZSkubWFwKChba2V5XSkgPT4gW2tleSwgW10gYXMgYW55W11dKSk7XG5cbiAgLy8ga2V5cyBvZiBub24tZ2VvbWV0cnkgY29sc1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YS5mcmFtZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPT0gbmFtZSk7XG4gIC8vIGdlb21ldHJ5IGNvbHVtblxuICBjb25zdCBnZW9tZXRyaWVzID0gb2xkRnJhbWVbbmFtZV07XG4gIGNvbnN0IGlzTXVsdGlHZW9tZXRyeSA9IGlzTXVsdGlHZW9tZXRyeUZuKHR5cGUpO1xuICBjb25zdCBjb3B5VmFsdWVzID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBuZXdGcmFtZVtrZXldLnB1c2gob2xkRnJhbWVba2V5XVtpbmRleF0pO1xuICAgIH1cbiAgfTtcblxuICAvLyBvcmlnaW5hbCBkYXRhIGluZGljZXNcbiAgY29uc3QgaW5kaWNlcyA9IFtdO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gZ2VvbWV0cmllc1tpbmRleF07XG4gICAgaWYgKGlzTXVsdGlHZW9tZXRyeShnZW9tZXRyeSkpIHtcbiAgICAgIC8vIHNwbGl0IHRoZSBtdWx0aS1nZW9tZXRyeVxuICAgICAgbmV3RnJhbWVbbmFtZV0ucHVzaCguLi5nZW9tZXRyeSk7XG4gICAgICAvLyByZXBlYXQgb3RoZXIgY29sdW1ucyBmb3IgZWFjaCBnZW9tZXRyeSBpbiBtdWx0aS1nZW9tZXRyeVxuICAgICAgZm9yIChsZXQgcmVwID0gMDsgcmVwIDwgZ2VvbWV0cnkubGVuZ3RoOyByZXArKykge1xuICAgICAgICBjb3B5VmFsdWVzKGluZGV4KTtcbiAgICAgICAgaW5kaWNlcy5wdXNoKGRhdGEuaW5kaWNlcz8uW2luZGV4XSA/PyBpbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0ZyYW1lW25hbWVdLnB1c2goZ2VvbWV0cnkpO1xuICAgICAgY29weVZhbHVlcyhpbmRleCk7XG4gICAgICBpbmRpY2VzLnB1c2goZGF0YS5pbmRpY2VzPy5baW5kZXhdID8/IGluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxlbmd0aDogbmV3RnJhbWVbbmFtZV0ubGVuZ3RoLFxuICAgIGdlb21ldHJ5OiB7XG4gICAgICAuLi5kYXRhLmdlb21ldHJ5LFxuICAgICAgW25hbWVdOiB0eXBlLnJlcGxhY2UoXCJNVUxUSVwiLCBcIlwiKSBhcyBHZW9tZXRyeVR5cGUsXG4gICAgfSxcbiAgICBpbmRpY2VzLFxuICAgIGZyYW1lOiBuZXdGcmFtZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNNdWx0aUdlb21ldHJ5Rm4odHlwZTogR2VvbWV0cnlUeXBlKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgXCJNVUxUSVBPSU5UXCI6XG4gICAgICByZXR1cm4gaXNNdWx0aVBvaW50O1xuICAgIGNhc2UgXCJNVUxUSUxJTkVTVFJJTkdcIjpcbiAgICAgIHJldHVybiBpc011bHRpTGluZVN0cmluZztcbiAgICBjYXNlIFwiTVVMVElQT0xZR09OXCI6XG4gICAgICByZXR1cm4gaXNNdWx0aVBvbHlnb247XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IFR5cGVFcnJvcihgJHt0eXBlfSBub3Qgc3VwcG9ydGVkYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNNdWx0aVBvaW50KGdlb21ldHJ5OiBQb3NpdGlvbiB8IFBvc2l0aW9uW10pOiBnZW9tZXRyeSBpcyBQb3NpdGlvbltdIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZ2VvbWV0cnk/LlswXSk7XG59XG5cbmZ1bmN0aW9uIGlzTXVsdGlMaW5lU3RyaW5nKGdlb21ldHJ5OiBQb3NpdGlvbltdIHwgUG9zaXRpb25bXVtdKTogZ2VvbWV0cnkgaXMgUG9zaXRpb25bXVtdIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZ2VvbWV0cnk/LlswXT8uWzBdKTtcbn1cblxuZnVuY3Rpb24gaXNNdWx0aVBvbHlnb24oZ2VvbWV0cnk6IFBvc2l0aW9uW11bXSB8IFBvc2l0aW9uW11bXVtdKTogZ2VvbWV0cnkgaXMgUG9zaXRpb25bXVtdW10ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShnZW9tZXRyeT8uWzBdPy5bMF0/LlswXSk7XG59XG5cbmZ1bmN0aW9uIGdldE11bHRpR2VvbWV0cnkoZGF0YTogRGF0YUZyYW1lKTogR2VvbWV0cnlJbmZvW10ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YS5nZW9tZXRyeSlcbiAgICAuZmlsdGVyKChbLCB0eXBlXSkgPT4gL01VTFRJLy50ZXN0KHR5cGUpKVxuICAgIC5tYXAoKFtuYW1lLCB0eXBlXSkgPT4gKHsgbmFtZSwgdHlwZSB9KSk7XG59XG4iLCJpbXBvcnQgeyBMYXllciwgTGF5ZXJFeHRlbnNpb24gfSBmcm9tIFwiQGRlY2suZ2wvY29yZVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBHTCB9IGZyb20gXCJAbHVtYS5nbC9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIEFyY0xheWVyLFxuICBJY29uTGF5ZXIsXG4gIExpbmVMYXllcixcbiAgUGF0aExheWVyLFxuICBQb2ludENsb3VkTGF5ZXIsXG4gIFNjYXR0ZXJwbG90TGF5ZXIsXG4gIFNvbGlkUG9seWdvbkxheWVyLFxufSBmcm9tIFwiQGRlY2suZ2wvbGF5ZXJzXCI7XG5cbmltcG9ydCB7IGlzRGF0YUZyYW1lIH0gZnJvbSBcIi4vZGF0YS1mcmFtZVwiO1xuXG5leHBvcnQgY2xhc3MgTXVsdGlIaWdobGlnaHRFeHRlbnNpb24gZXh0ZW5kcyBMYXllckV4dGVuc2lvbiB7XG4gIGluaXRpYWxpemVTdGF0ZSgpIHtcbiAgICBpZiAoIWlzUHJpbWl0aXZlTGF5ZXIodGhpcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsYXllciA9IHRoaXM7XG4gICAgY29uc3QgYXR0cmlidXRlTWFuYWdlciA9IGxheWVyLmdldEF0dHJpYnV0ZU1hbmFnZXIoKTtcblxuICAgIGlmIChhdHRyaWJ1dGVNYW5hZ2VyKSB7XG4gICAgICBhdHRyaWJ1dGVNYW5hZ2VyLmFkZEluc3RhbmNlZCh7XG4gICAgICAgIHBpY2tpbmdDb2xvcnM6IHtcbiAgICAgICAgICB0eXBlOiBHTC5VTlNJR05FRF9CWVRFLFxuICAgICAgICAgIHNpemU6IDMsXG4gICAgICAgICAgYWNjZXNzb3I6IChvYmplY3QsIHsgaW5kZXgsIGRhdGEsIHRhcmdldCB9KSA9PiB7XG4gICAgICAgICAgICAvLyBkYXRhIGlzIGEgZGF0YWZyYW1lLCB3aXRoIGZsYXR0ZW5lZCBnZW9tZXRyaWVzP1xuICAgICAgICAgICAgaWYgKGlzRGF0YUZyYW1lKGRhdGEpICYmIEFycmF5LmlzQXJyYXkoZGF0YS5pbmRpY2VzKSkge1xuICAgICAgICAgICAgICByZXR1cm4gbGF5ZXIuZW5jb2RlUGlja2luZ0NvbG9yKGRhdGEuaW5kaWNlcy5pbmRleE9mKGRhdGEuaW5kaWNlc1tpbmRleF0pLCB0YXJnZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBzdWItbGF5ZXIsIHdoZXJlIHBhcmVudCBkYXRhIGlzIGEgZGF0YWZyYW1lIHdpdGggZmxhdHRlbmVkIGdlb21ldHJpZXM/XG4gICAgICAgICAgICBjb25zdCBwYXJlbnREYXRhID0gb2JqZWN0Py5fX3NvdXJjZT8ucGFyZW50Py5wcm9wcy5kYXRhO1xuICAgICAgICAgICAgaWYgKGlzRGF0YUZyYW1lKHBhcmVudERhdGEpICYmIEFycmF5LmlzQXJyYXkocGFyZW50RGF0YS5pbmRpY2VzKSkge1xuICAgICAgICAgICAgICByZXR1cm4gbGF5ZXIuZW5jb2RlUGlja2luZ0NvbG9yKFxuICAgICAgICAgICAgICAgIHBhcmVudERhdGEuaW5kaWNlcy5pbmRleE9mKHBhcmVudERhdGEuaW5kaWNlc1tvYmplY3QuX19zb3VyY2UuaW5kZXhdKSxcbiAgICAgICAgICAgICAgICB0YXJnZXRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZGVmYXVsdFxuICAgICAgICAgICAgcmV0dXJuIGxheWVyLmVuY29kZVBpY2tpbmdDb2xvcihvYmplY3Q/Ll9fc291cmNlLmluZGV4ID8/IGluZGV4LCB0YXJnZXQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2hhZGVyQXR0cmlidXRlczoge1xuICAgICAgICAgICAgcGlja2luZ0NvbG9yczoge1xuICAgICAgICAgICAgICBkaXZpc29yOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluc3RhbmNlUGlja2luZ0NvbG9yczoge1xuICAgICAgICAgICAgICBkaXZpc29yOiAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IExheWVycyA9IFtcbiAgQXJjTGF5ZXIsXG4gIEljb25MYXllcixcbiAgTGluZUxheWVyLFxuICBQYXRoTGF5ZXIsXG4gIFBvaW50Q2xvdWRMYXllcixcbiAgU2NhdHRlcnBsb3RMYXllcixcbiAgU29saWRQb2x5Z29uTGF5ZXIsXG5dO1xuXG50eXBlIEJhc2VMYXllciA9IExheWVyPERhdGFGcmFtZSwgYW55PjtcbmZ1bmN0aW9uIGlzUHJpbWl0aXZlTGF5ZXIobGF5ZXI6IEJhc2VMYXllciB8IExheWVyRXh0ZW5zaW9uKTogbGF5ZXIgaXMgQmFzZUxheWVyIHtcbiAgcmV0dXJuIExheWVycy5zb21lKChMYXllcikgPT4gbGF5ZXIgaW5zdGFuY2VvZiBMYXllcik7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gcHJvcGVyQ2FzZShjYW1lbENhc2U6IHN0cmluZykge1xuICByZXR1cm4gY2FtZWxDYXNlLnJlcGxhY2UoLyhbQS1aXSkvZywgXCIgJDFcIikucmVwbGFjZSgvXi4vLCAocykgPT4gcy50b1VwcGVyQ2FzZSgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmRzKGNhbWVsQ2FzZTogc3RyaW5nKSB7XG4gIHJldHVybiBjYW1lbENhc2UucmVwbGFjZSgvKFtBLVpdKS9nLCBcIiAkMVwiKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGljazxULCBLIGV4dGVuZHMga2V5b2YgVD4ob2JqZWN0OiBULCAuLi5rZXlzOiBLW10pIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBlbnRyaWVzID0ga2V5cy5tYXAoKGtleSkgPT4gW2tleSwgb2JqZWN0W2tleV1dKTtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKTtcbn1cblxuZnVuY3Rpb24gZ2V0Rmlyc3RWaXNpYmxlKGVsOiBIVE1MRWxlbWVudCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgaWYgKGVsLmNsaWVudEhlaWdodCA+IDAgJiYgZWwuY2xpZW50SGVpZ2h0ID4gMCkge1xuICAgIHJldHVybiBlbDtcbiAgfVxuXG4gIHJldHVybiBlbC5wYXJlbnRFbGVtZW50ID8gZ2V0Rmlyc3RWaXNpYmxlKGVsLnBhcmVudEVsZW1lbnQpIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnREaW1lbnNpb25zKGVsOiBIVE1MRWxlbWVudCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCB2aXNpYmxlID0gZ2V0Rmlyc3RWaXNpYmxlKGVsKTtcblxuICBpZiAoZWwgPT09IHZpc2libGUgfHwgdmlzaWJsZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtlbC5jbGllbnRXaWR0aCwgZWwuY2xpZW50SGVpZ2h0XTtcbiAgfVxuXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG4gIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBPYmplY3QuYXNzaWduKG5vZGUuc3R5bGUsIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgZGlzcGxheTogXCJoaWRkZW5cIixcbiAgfSk7XG5cbiAgdmlzaWJsZS5hcHBlbmRDaGlsZChub2RlKTtcbiAgY29uc3QgZGltczogW251bWJlciwgbnVtYmVyXSA9IFtub2RlLmNsaWVudFdpZHRoLCBub2RlLmNsaWVudEhlaWdodF07XG4gIHZpc2libGUucmVtb3ZlQ2hpbGQobm9kZSk7XG5cbiAgcmV0dXJuIGRpbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncm91cEJ5PEssIFY+KGxpc3Q6IFZbXSwga2V5OiAoeDogVikgPT4gSyk6IE1hcDxLLCBWW10+IHtcbiAgY29uc3QgbWFwID0gbmV3IE1hcDxLLCBWW10+KCk7XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3QpIHtcbiAgICBjb25zdCBpdGVtS2V5ID0ga2V5KGl0ZW0pO1xuICAgIGlmICghbWFwLmhhcyhpdGVtS2V5KSkge1xuICAgICAgbWFwLnNldChpdGVtS2V5LCBbaXRlbV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXAuZ2V0KGl0ZW1LZXkpIS5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXA7XG59XG5cbnR5cGUgTnVsbGFibGU8VD4gPSBUIHwgbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzTmFtZXMoLi4uY2xhc3NOYW1lczogTnVsbGFibGU8c3RyaW5nPltdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNsYXNzTmFtZXMuZmlsdGVyKCh4KSA9PiB4ICE9IG51bGwpLmpvaW4oXCIgXCIpO1xufVxuXG50eXBlIFZhcmlhZGljPFQ+ID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2U8VD4oZm46IFZhcmlhZGljPFQ+LCB3YWl0OiBudW1iZXIgPSAwKSB7XG4gIGxldCB0aW1lb3V0OiBudW1iZXI7XG5cbiAgcmV0dXJuICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IGZuKC4uLmFyZ3MpLCB3YWl0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoeDogYW55KSB7XG4gIHJldHVybiAodHlwZW9mIHggIT09IFwib2JqZWN0XCIgfHwgeCA9PT0gbnVsbCkgJiYgdHlwZW9mIHggIT09IFwiZnVuY3Rpb25cIjtcbn1cblxuY2xhc3MgTWFwQ2FjaGUge1xuICBwcml2YXRlIF92YWwgPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgX3JlZiA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgZ2V0U3RvcmUoa2V5OiBhbnkpIHtcbiAgICByZXR1cm4gaXNQcmltaXRpdmUoa2V5KSA/IHRoaXMuX3ZhbCA6IHRoaXMuX3JlZjtcbiAgfVxuXG4gIGhhcyhrZXk6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGtleSkuaGFzKGtleSk7XG4gIH1cblxuICBnZXQoa2V5OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdG9yZShrZXkpLmdldChrZXkpO1xuICB9XG5cbiAgc2V0KGtleTogYW55LCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuZ2V0U3RvcmUoa2V5KS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lbW9pemU8VD4oZm46IFZhcmlhZGljPFQ+KTogVmFyaWFkaWM8VD4ge1xuICAvLyBhIG5lc3RlZCBjYWNoZSBjaGFpbiwgc3VjaCB0aGF0IGVhY2ggcGFyYW0gbWFwcyB0byBhIGNhY2hlLFxuICAvLyBvciB0aGUgcmVzdWx0IG9mIGZuIGlmIGl0IGlzIHRoZSBlbmQgb2YgdGhlIGNoYWluXG4gIC8vIGUuZy4gZm9yIDMgYXJncywgKGEpID0+IChiKSA9PiAoYykgPT4gZm4oYSwgYiwgYylcbiAgY29uc3Qgcm9vdCA9IG5ldyBNYXBDYWNoZSgpO1xuXG4gIHJldHVybiAoLi4uYXJnczogYW55W10pOiBUID0+IHtcbiAgICBjb25zdCBhcmcwID0gYXJnc1swXTtcbiAgICBjb25zdCBuYXJncyA9IGFyZ3Muc2xpY2UoMCwgLTEpO1xuICAgIC8vIHdhbGsgdGhlIGNhY2hlIGNoYWluXG4gICAgY29uc3QgY2FjaGUgPSBuYXJncy5yZWR1Y2VSaWdodCgocGFyZW50OiBNYXBDYWNoZSwgYXJnOiBhbnkpID0+IHtcbiAgICAgIGlmIChwYXJlbnQuaGFzKGFyZykpIHJldHVybiBwYXJlbnQuZ2V0KGFyZyk7XG5cbiAgICAgIGNvbnN0IGNoaWxkID0gbmV3IE1hcENhY2hlKCk7XG4gICAgICBwYXJlbnQuc2V0KGFyZywgY2hpbGQpO1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH0sIHJvb3QpO1xuXG4gICAgLy8gY2FjaGUgaGl0XG4gICAgaWYgKGNhY2hlLmhhcyhhcmcwKSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChhcmcwKTtcbiAgICB9XG5cbiAgICAvLyBjYWNoZSBtaXNzXG4gICAgY29uc3QgdmFsdWUgPSBmbiguLi5hcmdzKTtcbiAgICBjYWNoZS5zZXQoYXJnMCwgdmFsdWUpO1xuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuIiwiaW1wb3J0ICogYXMgZGVjayBmcm9tIFwiLi9kZWNrLWJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgeyBMYXllciBhcyBEZWNrTGF5ZXIsIExheWVyUHJvcHMgYXMgRGVja0xheWVyUHJvcHMgfSBmcm9tIFwiQGRlY2suZ2wvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBCaXRtYXBMYXllclByb3BzIH0gZnJvbSBcIkBkZWNrLmdsL2xheWVyc1wiO1xuaW1wb3J0IHR5cGUgeyBUaWxlTGF5ZXJQcm9wcyB9IGZyb20gXCJAZGVjay5nbC9nZW8tbGF5ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IEZlYXR1cmVDb2xsZWN0aW9uIH0gZnJvbSBcImdlb2pzb25cIjtcblxuaW1wb3J0IHsgcGFyc2VDb2xvciBhcyBfcGFyc2VDb2xvciB9IGZyb20gXCIuL2NvbG9yXCI7XG5pbXBvcnQgeyBBY2Nlc3NvclNjYWxlLCBhY2Nlc3NvclNjYWxlIGFzIF9hY2Nlc3NvclNjYWxlLCBpc0FjY2Vzc29yU2NhbGUgfSBmcm9tIFwiLi9zY2FsZVwiO1xuaW1wb3J0IHsgYWNjZXNzb3IgYXMgX2FjY2Vzc29yLCBBY2Nlc3NvciwgaXNBY2Nlc3NvciB9IGZyb20gXCIuL2FjY2Vzc29yXCI7XG5pbXBvcnQgeyBibGVuZGluZ1BhcmFtZXRlcnMgfSBmcm9tIFwiLi9ibGVuZGluZ1wiO1xuaW1wb3J0IHsgZmxhdHRlbkdlb21ldHJpZXMgYXMgX2ZsYXR0ZW5HZW9tZXRyaWVzLCBpc0RhdGFGcmFtZSB9IGZyb20gXCIuL2RhdGEtZnJhbWVcIjtcbmltcG9ydCB7IE11bHRpSGlnaGxpZ2h0RXh0ZW5zaW9uIH0gZnJvbSBcIi4vbXVsdGktaGlnaGxpZ2h0LWV4dGVuc2lvblwiO1xuaW1wb3J0IHsgbWVtb2l6ZSB9IGZyb20gXCIuL3V0aWxcIjtcblxudHlwZSBMYXllckRhdGEgPSBzdHJpbmcgfCBEYXRhRnJhbWUgfCBGZWF0dXJlQ29sbGVjdGlvbjtcbnR5cGUgRW50cnk8VD4gPSBbc3RyaW5nLCBUXTtcblxuZXhwb3J0IHR5cGUgTGVnZW5kSW5mbyA9IFBpY2s8TGF5ZXJQcm9wcywgXCJpZFwiIHwgXCJuYW1lXCI+ICYge1xuICBzY2FsZXM6IEFjY2Vzc29yU2NhbGU8bnVtYmVyIHwgQ29sb3I+W107XG59O1xuXG5leHBvcnQgdHlwZSBWaXNpYmlsaXR5SW5mbyA9IFBpY2s8TGF5ZXJQcm9wcywgXCJpZFwiIHwgXCJuYW1lXCIgfCBcImdyb3VwTmFtZVwiPiAmIHtcbiAgdmlzaWJsZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5ZXJQcm9wcyBleHRlbmRzIE9taXQ8RGVja0xheWVyUHJvcHM8YW55PiwgXCJkYXRhXCI+IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGdyb3VwTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgZGF0YTogTGF5ZXJEYXRhIHwgbnVsbDtcbiAgYmxlbmRpbmdNb2RlOiBCbGVuZGluZ01vZGU7XG4gIHZpc2liaWxpdHlUb2dnbGU6IGJvb2xlYW47XG4gIHRvb2x0aXA6IFRvb2x0aXBJbmZvIHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIFRyaXBzTGF5ZXJQcm9wcyBleHRlbmRzIExheWVyUHJvcHMge1xuICBjdXJyZW50VGltZTogbnVtYmVyO1xuICBsb29wTGVuZ3RoOiBudW1iZXI7XG4gIGFuaW1hdGlvblNwZWVkOiBudW1iZXI7XG59XG5cbi8vIHBlcmZvcm1hbmNlIG9wdGltaXNhdGlvbjogYXZvaWQgc2hhbGxvdyBwcm9wIGNoYW5nZXNcbmNvbnN0IGZsYXR0ZW5HZW9tZXRyaWVzID0gbWVtb2l6ZShfZmxhdHRlbkdlb21ldHJpZXMpO1xuY29uc3QgcGFyc2VDb2xvciA9IG1lbW9pemUoX3BhcnNlQ29sb3IpO1xuY29uc3QgYWNjZXNzb3IgPSBtZW1vaXplKF9hY2Nlc3Nvcik7XG5jb25zdCBhY2Nlc3NvclNjYWxlID0gbWVtb2l6ZShfYWNjZXNzb3JTY2FsZSk7XG5cbmV4cG9ydCBjbGFzcyBMYXllciB7XG4gIHR5cGU6IHN0cmluZztcbiAgcHJvcHM6IExheWVyUHJvcHM7XG4gIHNjYWxlczogQWNjZXNzb3JTY2FsZTxhbnk+W107XG5cbiAgY29uc3RydWN0b3IoeyB0eXBlLCAuLi5wcm9wcyB9OiBMYXllclByb3BzKSB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzKTtcbiAgICBjb25zdCBjb2xvcnMgPSBnZXRDb2xvcnMoZW50cmllcyk7XG4gICAgY29uc3QgYWNjZXNzb3JzID0gZ2V0QWNjZXNzb3JzKGVudHJpZXMpO1xuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICBjb25zdCBfcHJvcHMgPSBPYmplY3QuZnJvbUVudHJpZXMoW1xuICAgICAgLi4uZW50cmllcyxcbiAgICAgIC4uLmNvbG9ycyxcbiAgICAgIC4uLmFjY2Vzc29ycy5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtuYW1lLCB2YWx1ZS5nZXREYXRhXSksXG4gICAgICAuLi5nZXRXZWlnaHRQcm9wcyhlbnRyaWVzKSxcbiAgICAgIFtcInZpc2libGVcIiwgcHJvcHMudmlzaWJsZSA/PyB0cnVlXSxcbiAgICAgIFtcInVwZGF0ZVRyaWdnZXJzXCIsIGdldFVwZGF0ZVRyaWdnZXJzKGFjY2Vzc29ycyldLFxuICAgICAgW1wicGFyYW1ldGVyc1wiLCBnZXRQYXJhbWV0ZXJzKHByb3BzLnBhcmFtZXRlcnMsIHByb3BzLmJsZW5kaW5nTW9kZSldLFxuICAgIF0pO1xuXG4gICAgLy8gbXVsdGktZ2VvbWV0cnkgaGlnaGxpZ2h0XG4gICAgaWYgKGlzRGF0YUZyYW1lKF9wcm9wcy5kYXRhKSkge1xuICAgICAgX3Byb3BzLmRhdGEgPSBmbGF0dGVuR2VvbWV0cmllcyhfcHJvcHMuZGF0YSk7XG4gICAgICBfcHJvcHMuZXh0ZW5zaW9ucyA9IFtuZXcgTXVsdGlIaWdobGlnaHRFeHRlbnNpb24oKSwgLi4uKF9wcm9wcy5leHRlbnNpb25zID8/IFtdKV07XG4gICAgfVxuXG4gICAgLy8gdGlsZS1sYXllclxuICAgIHR5cGUgVGlsZVByb3BzID0gVGlsZUxheWVyUHJvcHM8YW55PiAmIEJpdG1hcExheWVyUHJvcHM8YW55PiAmIHsgdGlsZTogYW55IH07XG4gICAgaWYgKHR5cGUgPT09IFwiVGlsZUxheWVyXCIpIHtcbiAgICAgIF9wcm9wcy5yZW5kZXJTdWJMYXllcnMgPSAocHJvcHM6IFRpbGVQcm9wcykgPT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgYmJveDogeyB3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGggfSxcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgICAgeixcbiAgICAgICAgfSA9IHByb3BzLnRpbGU7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBkZWNrLkJpdG1hcExheWVyKHtcbiAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICBkYXRhOiBbeyB6LCB4LCB5IH1dLFxuICAgICAgICAgIGltYWdlOiBwcm9wcy5kYXRhLFxuICAgICAgICAgIGJvdW5kczogW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0sXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzID0gX3Byb3BzO1xuXG4gICAgdGhpcy5zY2FsZXMgPSBhY2Nlc3NvcnNcbiAgICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gaXNBY2Nlc3NvclNjYWxlKHZhbHVlKSlcbiAgICAgIC5tYXAoKFssIHZhbHVlXSkgPT4gdmFsdWUgYXMgQWNjZXNzb3JTY2FsZTxudW1iZXIgfCBDb2xvcj4pO1xuXG4gICAgLy8gbG9hZCBmb250XG4gICAgaWYgKHR5cGUgPT09IFwiVGV4dExheWVyXCIgJiYgXCJmb250c1wiIGluIGRvY3VtZW50KSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBkb2N1bWVudC5mb250cy5sb2FkKGAxNnB4ICR7cHJvcHMuZm9udEZhbWlseX1gKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlKHByb3BzOiBMYXllclByb3BzKSB7XG4gICAgcmV0dXJuIG5ldyBMYXllcihwcm9wcyk7XG4gIH1cblxuICByZW5kZXJMYXllcih0aW1lPzogbnVtYmVyKTogRGVja0xheWVyPGFueSwgYW55PiB7XG4gICAgLy8gYW5pbWF0ZSB0cmlwcyBsYXllclxuICAgIGlmICh0aGlzLnR5cGUgPT09IFwiVHJpcHNMYXllclwiICYmIHRpbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzIGFzIFRyaXBzTGF5ZXJQcm9wcztcbiAgICAgIGNvbnN0IHsgbG9vcExlbmd0aCwgYW5pbWF0aW9uU3BlZWQgfSA9IHByb3BzO1xuICAgICAgY29uc3QgYW5pbWF0aW9uVGltZSA9IGxvb3BMZW5ndGggLyBhbmltYXRpb25TcGVlZDtcbiAgICAgIGNvbnN0IHJhdGlvQ29tcGxldGUgPSAoKHRpbWUgLyAxMDAwKSAlIGFuaW1hdGlvblRpbWUpIC8gYW5pbWF0aW9uVGltZTtcbiAgICAgIHByb3BzLmN1cnJlbnRUaW1lID0gcmF0aW9Db21wbGV0ZSAqIGxvb3BMZW5ndGg7XG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbmV3IGRlY2tbdGhpcy50eXBlXSh7IC4uLnRoaXMucHJvcHMgfSk7XG4gIH1cblxuICByZW5kZXJMZWdlbmQoKTogTGVnZW5kSW5mbyB7XG4gICAgY29uc3Qgc2NhbGVzID0gdGhpcy5zY2FsZXMuZmlsdGVyKChzY2FsZSkgPT4gc2NhbGUubGVnZW5kKTtcbiAgICByZXR1cm4geyBpZDogdGhpcy5wcm9wcy5pZCEsIG5hbWU6IHRoaXMucHJvcHMubmFtZSwgc2NhbGVzIH07XG4gIH1cblxuICByZW5kZXJTZWxlY3RvcigpOiBWaXNpYmlsaXR5SW5mbyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLnByb3BzLmlkISxcbiAgICAgIGdyb3VwTmFtZTogdGhpcy5wcm9wcy5ncm91cE5hbWUsXG4gICAgICBuYW1lOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICB2aXNpYmxlOiB0aGlzLnByb3BzLnZpc2libGUgPz8gdHJ1ZSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbG9yKFtuYW1lLCB2YWx1ZV06IFtzdHJpbmcsIGFueV0pIHtcbiAgcmV0dXJuIG5hbWUuZW5kc1dpdGgoXCJDb2xvclwiKSAmJiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29sb3JzKGVudHJpZXM6IEVudHJ5PGFueT5bXSk6IEVudHJ5PENvbG9yIHwgQ29sb3JbXT5bXSB7XG4gIGNvbnN0IGNvbG9ycyA9IGVudHJpZXNcbiAgICAuZmlsdGVyKGlzQ29sb3IpXG4gICAgLm1hcCgoW25hbWUsIGNvbG9yXSk6IEVudHJ5PENvbG9yPiA9PiBbbmFtZSwgcGFyc2VDb2xvcihjb2xvcildKTtcblxuICBjb25zdCBjb2xvclJhbmdlID0gZW50cmllcy5maW5kKChbbmFtZV0pID0+IG5hbWUgPT09IFwiY29sb3JSYW5nZVwiKTtcbiAgaWYgKGNvbG9yUmFuZ2UpIHtcbiAgICBjb2xvcnMucHVzaChbY29sb3JSYW5nZVswXSwgY29sb3JSYW5nZVsxXS5tYXAoKGNvbG9yOiBzdHJpbmcgfCBDb2xvcikgPT4gcGFyc2VDb2xvcihjb2xvcikpXSk7XG4gIH1cblxuICByZXR1cm4gY29sb3JzO1xufVxuXG5mdW5jdGlvbiBnZXRBY2Nlc3NvcnMoZW50cmllczogRW50cnk8YW55PltdKTogRW50cnk8QWNjZXNzb3IgfCBBY2Nlc3NvclNjYWxlPGFueT4+W10ge1xuICByZXR1cm4gZW50cmllc1xuICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gaXNBY2Nlc3Nvcih2YWx1ZSkpXG4gICAgLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gW1xuICAgICAgbmFtZSxcbiAgICAgIGlzQWNjZXNzb3JTY2FsZSh2YWx1ZSkgPyBhY2Nlc3NvclNjYWxlKHZhbHVlLCBuYW1lKSA6IGFjY2Vzc29yKHZhbHVlLCBuYW1lKSxcbiAgICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0VXBkYXRlVHJpZ2dlcnMoZW50cmllczogRW50cnk8QWNjZXNzb3IgfCBBY2Nlc3NvclNjYWxlPGFueT4+W10pIHtcbiAgY29uc3Qgc2NhbGVQcm9wcyA9IChhY2Nlc3NvcjogYW55KSA9PiB7XG4gICAgY29uc3QgeyBnZXREYXRhLCBzY2FsZURhdGEsIHBhbGV0dGUsIC4uLnByb3BzIH0gPSBhY2Nlc3NvcjtcbiAgICByZXR1cm4gcHJvcHM7XG4gIH07XG5cbiAgY29uc3QgcHJvcFRyaWdnZXJzID0gZW50cmllcy5tYXAoKFtuYW1lLCBhY2Nlc3Nvcl0pID0+IFtuYW1lLCBzY2FsZVByb3BzKGFjY2Vzc29yKV0pO1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKHByb3BUcmlnZ2Vycyk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlcnMocGFyYW1ldGVyczogYW55LCBibGVuZGluZ01vZGU6IEJsZW5kaW5nTW9kZSkge1xuICByZXR1cm4ge1xuICAgIC4uLnBhcmFtZXRlcnMsXG4gICAgLi4uYmxlbmRpbmdQYXJhbWV0ZXJzKGJsZW5kaW5nTW9kZSksXG4gIH07XG59XG5cbi8vIGdldENvbG9yV2VpZ2h0ICYgZ2V0RWxldmF0aW9uV2VpZ2h0IG11c3QgYmUgZnVuY3Rpb25zXG5mdW5jdGlvbiBnZXRXZWlnaHRQcm9wcyhlbnRyaWVzOiBFbnRyeTxhbnk+W10pIHtcbiAgcmV0dXJuIGVudHJpZXNcbiAgICAuZmlsdGVyKChbbmFtZV0pID0+IG5hbWUgPT09IFwiZ2V0Q29sb3JXZWlnaHRcIiB8fCBuYW1lID09PSBcImdldEVsZXZhdGlvbldlaWdodFwiKVxuICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIgJiYgIWlzQWNjZXNzb3IodmFsdWUpKVxuICAgIC5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtuYW1lLCAoKSA9PiB2YWx1ZV0pO1xufVxuIiwiaW1wb3J0IHsgX0FnZ3JlZ2F0aW9uTGF5ZXIgfSBmcm9tIFwiQGRlY2suZ2wvYWdncmVnYXRpb24tbGF5ZXJzXCI7XG5pbXBvcnQgeyBPYmplY3RJbmZvIH0gZnJvbSBcIkBkZWNrLmdsL2NvcmVcIjtcbmltcG9ydCB7IFBpY2tJbmZvIH0gZnJvbSBcImRlY2suZ2xcIjtcbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tIFwiZ2VvanNvblwiO1xuaW1wb3J0IHsgaXNEYXRhRnJhbWUgfSBmcm9tIFwiLi9kYXRhLWZyYW1lXCI7XG5cbmV4cG9ydCBjb25zdCBGRUFUVVJFX0lEID0gXCIuZmVhdHVyZV9pZFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGlja2VkT2JqZWN0KGluZm86IFBpY2tJbmZvPGFueT4sIGRhdGFUeXBlOiBEYXRhVHlwZSB8IG51bGwgPSBudWxsKSB7XG4gIGlmICghaW5mby5waWNrZWQpIHJldHVybiBudWxsO1xuXG4gIGlmIChkYXRhVHlwZSA9PSBudWxsKSB7XG4gICAgZGF0YVR5cGUgPSBnZXREYXRhVHlwZShpbmZvKTtcbiAgfVxuICBjb25zdCBnZXREYXRhID0gYWNjZXNzb3JGbihkYXRhVHlwZSk7XG5cbiAgY29uc3QgeyBvYmplY3QsIGluZGV4IH0gPSBpbmZvO1xuICBjb25zdCBkYXRhID0gaW5mby5sYXllci5wcm9wcy5kYXRhO1xuICByZXR1cm4gZ2V0RGF0YShvYmplY3QsIHsgaW5kZXgsIGRhdGEgfSk7XG59XG5cbmZ1bmN0aW9uIGdldERhdGFUeXBlKHsgb2JqZWN0LCBsYXllciB9OiBQaWNrSW5mbzxhbnk+KTogRGF0YVR5cGUge1xuICAvLyBGSVhNRTogYWRkIGRhdGF0eXBlIHRvIHRoZSBsYXllclxuICBjb25zdCBkYXRhID0gbGF5ZXIucHJvcHMuZGF0YTtcbiAgaWYgKGlzRGF0YUZyYW1lKGRhdGEpICYmICEobGF5ZXIgaW5zdGFuY2VvZiBfQWdncmVnYXRpb25MYXllcikpIHJldHVybiBcInRhYmxlXCI7XG4gIHJldHVybiBpc0dlb2pzb24ob2JqZWN0KSA/IFwiZ2VvanNvblwiIDogXCJvYmplY3RcIjtcbn1cblxuZnVuY3Rpb24gaXNHZW9qc29uKG9iamVjdDogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwpOiBvYmplY3QgaXMgRmVhdHVyZSB7XG4gIHJldHVybiBvYmplY3Q/LnR5cGUgPT09IFwiRmVhdHVyZVwiICYmIFwiZ2VvbWV0cnlcIiBpbiBvYmplY3QgJiYgXCJ0eXBlXCIgaW4gb2JqZWN0Lmdlb21ldHJ5O1xufVxuXG50eXBlIEluZm8gPSBPbWl0PE9iamVjdEluZm88RGF0YUZyYW1lLCBhbnk+LCBcInRhcmdldFwiPjtcbnR5cGUgRGF0YUZuID0gKG9iamVjdDogUmVjb3JkPHN0cmluZywgYW55PiwgaW5mbzogSW5mbykgPT4gUmVjb3JkPHN0cmluZywgYW55PjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFjY2Vzc29yRm4oZGF0YVR5cGU6IERhdGFUeXBlKTogRGF0YUZuIHtcbiAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgICAgcmV0dXJuIChfLCB7IGluZGV4LCBkYXRhIH0pID0+IHtcbiAgICAgICAgY29uc3QgZ2VvbXMgPSBPYmplY3Qua2V5cyhkYXRhLmdlb21ldHJ5KTtcbiAgICAgICAgY29uc3Qgb2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgY29sXSBvZiBPYmplY3QuZW50cmllcyhkYXRhLmZyYW1lKSkge1xuICAgICAgICAgIGlmICghZ2VvbXMuaW5jbHVkZXMoa2V5KSkgb2JqZWN0W2tleV0gPSBjb2xbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9O1xuICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgIHJldHVybiAob2JqZWN0KSA9PiAoeyAuLi5vYmplY3QgfSk7XG4gICAgY2FzZSBcImdlb2pzb25cIjpcbiAgICAgIHJldHVybiAob2JqZWN0KSA9PiAoe1xuICAgICAgICBbRkVBVFVSRV9JRF06IG9iamVjdD8uaWQsXG4gICAgICAgIC4uLm9iamVjdD8ucHJvcGVydGllcyxcbiAgICAgIH0pO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoYCR7ZGF0YVR5cGV9IG5vdCBzdXBwb3J0ZWRgKTtcbiAgfVxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b29sdGlwXCI6XCJjeVdMdDRfRzduazV2VDloUHIwb1wiLFwia2VwbGVyXCI6XCJrZXBsZXJcIixcImxpZ2h0XCI6XCJsaWdodFwiLFwibGF5ZXItbmFtZVwiOlwiWjloSEhldDJSWG1MMGlNZWwzWnRcIixcImxheWVyTmFtZVwiOlwiWjloSEhldDJSWG1MMGlNZWwzWnRcIixcInRhYmxlXCI6XCJqcDY1OHlFSExsZXNTUnZ3QndEbFwiLFwiZmllbGQtbmFtZVwiOlwidDlJOGtKeWplRUpFT0Fydk1EN2pcIixcImZpZWxkTmFtZVwiOlwidDlJOGtKeWplRUpFT0Fydk1EN2pcIixcImZpZWxkLXZhbHVlXCI6XCJ2b3ZIcFR1cjAxQlJPck1MbUVGelwiLFwiZmllbGRWYWx1ZVwiOlwidm92SHBUdXIwMUJST3JNTG1FRnpcIn07IiwiaW1wb3J0IHR5cGUgeyBQaWNrSW5mbyB9IGZyb20gXCJAZGVjay5nbC9jb3JlXCI7XG5pbXBvcnQgeyBGRUFUVVJFX0lELCBnZXRQaWNrZWRPYmplY3QgfSBmcm9tIFwiLi9waWNraW5nXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL3Rvb2x0aXAuY3NzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbHRpcFByb3BzIHtcbiAgaW5mbzogUGlja0luZm88YW55Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRvb2x0aXAoeyBpbmZvIH06IFRvb2x0aXBQcm9wcykge1xuICBpZiAoIWluZm8ucGlja2VkIHx8IGluZm8ubGF5ZXIucHJvcHMudG9vbHRpcCA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCB7IHgsIHkgfSA9IGluZm87XG4gIGNvbnN0IHsgbmFtZSwgdG9vbHRpcCB9ID0gaW5mby5sYXllci5wcm9wcztcblxuICBjb25zdCBvYmplY3QgPSBnZXRQaWNrZWRPYmplY3QoaW5mbywgdG9vbHRpcC5kYXRhVHlwZSkhO1xuICBkZWxldGUgb2JqZWN0W0ZFQVRVUkVfSURdO1xuICBjb25zdCBuYW1lcyA9IHRvb2x0aXAuY29scyA9PT0gdHJ1ZSA/IE9iamVjdC5rZXlzKG9iamVjdCkgOiB0b29sdGlwLmNvbHM7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRvb2x0aXB9IHN0eWxlPXt7IHRyYW5zZm9ybTogYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgIH19PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sYXllck5hbWV9PntuYW1lfTwvZGl2PlxuICAgICAgPHRhYmxlIGNsYXNzTmFtZT17c3R5bGVzLnRhYmxlfT5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIHtuYW1lcy5tYXAoKG5hbWUpID0+IChcbiAgICAgICAgICAgIDx0ciBrZXk9e25hbWV9PlxuICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPXtzdHlsZXMuZmllbGROYW1lfT57bmFtZX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPXtzdHlsZXMuZmllbGRWYWx1ZX0+e1N0cmluZyhvYmplY3RbbmFtZV0gPz8gbnVsbCl9PC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwiaW1wb3J0IFwibWFwYm94LWdsXCI7XG5pbXBvcnQgXCJtYXBib3gtZ2wvZGlzdC9tYXBib3gtZ2wuY3NzXCI7XG5cbmltcG9ydCB7IEZyYWdtZW50LCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQaWNrSW5mbywgTWFwVmlldyB9IGZyb20gXCJAZGVjay5nbC9jb3JlXCI7XG5pbXBvcnQgeyBEZWNrR0wgfSBmcm9tIFwiQGRlY2suZ2wvcmVhY3RcIjtcbmltcG9ydCB7IE1hcCBhcyBNYXBHTCB9IGZyb20gXCJyZWFjdC1tYXAtZ2xcIjtcbmltcG9ydCB7IExheWVyIH0gZnJvbSBcIi4vbGF5ZXJcIjtcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tIFwiLi90b29sdGlwXCI7XG5pbXBvcnQgeyBibGVuZGluZ1BhcmFtZXRlcnMgfSBmcm9tIFwiLi9ibGVuZGluZ1wiO1xuaW1wb3J0IHsgX0FnZ3JlZ2F0aW9uTGF5ZXIgfSBmcm9tIFwiQGRlY2suZ2wvYWdncmVnYXRpb24tbGF5ZXJzXCI7XG5pbXBvcnQgeyBEZWNrUHJvcHMgfSBmcm9tIFwiLi9hcHBcIjtcblxuZXhwb3J0IHR5cGUgTWFwUHJvcHMgPSB7XG4gIHByb3BzOiBEZWNrUHJvcHM7XG4gIGxheWVyczogTGF5ZXJbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBNYXAoeyBwcm9wcywgbGF5ZXJzIH06IE1hcFByb3BzKSB7XG4gIGNvbnN0IGRlY2tnbCA9IHVzZVJlZjxEZWNrR0w+KG51bGwpO1xuICBjb25zdCBbaW5mbywgaGFuZGxlSG92ZXJdID0gdXNlSG92ZXIoKTtcblxuICBjb25zdCB7IG1hcGJveEFjY2Vzc1Rva2VuLCBtYXBTdHlsZSwgY29udHJvbGxlciwgcGFyYW1ldGVycywgYmxlbmRpbmdNb2RlLCAuLi5kZWNrUHJvcHMgfSA9IHByb3BzO1xuICBjb25zdCBfcGFyYW1ldGVycyA9IHtcbiAgICAuLi5wYXJhbWV0ZXJzLFxuICAgIC4uLmJsZW5kaW5nUGFyYW1ldGVycyhibGVuZGluZ01vZGUpLFxuICB9O1xuICAvLyBsYXllciBhbmltYXRpb24gbG9vcFxuICBjb25zdCBbdGltZSwgc2V0VGltZV0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgYW5pbWF0aW5nID0gbGF5ZXJzLnNvbWUoKGxheWVyKSA9PiBsYXllci50eXBlID09PSBcIlRyaXBzTGF5ZXJcIik7XG4gIHVzZUFuaW1hdGlvbihhbmltYXRpbmcsICh0aW1lKSA9PiBzZXRUaW1lKHRpbWUpKTtcblxuICBjb25zdCBfbGF5ZXJzOiBhbnkgPSBsYXllcnMubWFwKChsYXllcikgPT4gKGxheWVyLnR5cGUgIT0gbnVsbCA/IGxheWVyLnJlbmRlckxheWVyKHRpbWUpIDogbnVsbCkpO1xuXG4gIHJldHVybiAoXG4gICAgPEZyYWdtZW50PlxuICAgICAgPERlY2tHTFxuICAgICAgICByZWY9e2RlY2tnbH1cbiAgICAgICAgey4uLmRlY2tQcm9wc31cbiAgICAgICAgcGFyYW1ldGVycz17X3BhcmFtZXRlcnN9XG4gICAgICAgIGxheWVycz17X2xheWVyc31cbiAgICAgICAgb25Ib3Zlcj17aGFuZGxlSG92ZXJ9XG4gICAgICA+XG4gICAgICAgIDxNYXBWaWV3IGlkPVwibWFwXCIgY29udHJvbGxlcj17Y29udHJvbGxlcn0gcmVwZWF0PXt0cnVlfT5cbiAgICAgICAgICB7bWFwU3R5bGUgJiYgPE1hcEdMIHJldXNlTWFwcyB7Li4ueyBtYXBib3hBY2Nlc3NUb2tlbiwgbWFwU3R5bGUgfX0gLz59XG4gICAgICAgIDwvTWFwVmlldz5cbiAgICAgIDwvRGVja0dMPlxuICAgICAge2luZm8gJiYgPFRvb2x0aXAgaW5mbz17aW5mb30gLz59XG4gICAgPC9GcmFnbWVudD5cbiAgKTtcbn1cblxuY29uc3QgdXNlSG92ZXIgPSAoKSA9PiB7XG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGU8UGlja0luZm88YW55PiB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGhhbmRsZUhvdmVyID0gdXNlQ2FsbGJhY2soKGluZm86IFBpY2tJbmZvPGFueT4pID0+IHtcbiAgICAvLyBub3QgcGlja2VkIG9yIG5vIHRvb2x0aXAgcHJvcFxuICAgIGlmICghaW5mby5waWNrZWQgfHwgIWluZm8ubGF5ZXIucHJvcHMudG9vbHRpcCB8fCBpbmZvLmxheWVyIGluc3RhbmNlb2YgX0FnZ3JlZ2F0aW9uTGF5ZXIpIHtcbiAgICAgIHJldHVybiBzZXRTdGF0ZShudWxsKTtcbiAgICB9XG5cbiAgICBzZXRTdGF0ZShpbmZvKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiBbc3RhdGUsIGhhbmRsZUhvdmVyXSBhcyBbUGlja0luZm88YW55PiB8IG51bGwsIChpbmZvOiBQaWNrSW5mbzxhbnk+KSA9PiB2b2lkXTtcbn07XG5cbmNvbnN0IHVzZUFuaW1hdGlvbiA9IChlbmFibGVkOiBib29sZWFuLCBvbkZyYW1lOiAodGltZTogbnVtYmVyKSA9PiB2b2lkKSA9PiB7XG4gIGNvbnN0IGFuaW1hdGlvbiA9IHVzZVJlZjxudW1iZXI+KDApO1xuICBjb25zdCBzdGFydFRpbWUgPSB1c2VSZWY8bnVtYmVyPihEYXRlLm5vdygpKTtcblxuICBjb25zdCBhbmltYXRlID0gKCkgPT4ge1xuICAgIG9uRnJhbWUoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZS5jdXJyZW50KTtcbiAgICBhbmltYXRpb24uY3VycmVudCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgYW5pbWF0aW9uLmN1cnJlbnQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICAgICAgcmV0dXJuICgpID0+IHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShhbmltYXRpb24uY3VycmVudCk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2VuYWJsZWRdKTtcbn07XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImtlcGxlclwiOlwia2VwbGVyXCIsXCJsaWdodFwiOlwibGlnaHRcIixcImxlZ2VuZFwiOlwiZGVQa2hibkpDT0hZVUFqX05TWGpcIixcImxheWVyXCI6XCJVc3d3a2FNRG9pYjR5dGM2MFpuOVwiLFwibGF5ZXItbmFtZVwiOlwiY2k1RUlGekg3cjEwQUc2QnNxaUdcIixcImxheWVyTmFtZVwiOlwiY2k1RUlGekg3cjEwQUc2QnNxaUdcIixcInNjYWxlXCI6XCJ0YzJpWEJrX2ZSNnE1R1dXcG85bVwiLFwic2NhbGUtbmFtZVwiOlwiUllXekw3S0dEWUhJWTJOSGJGNVhcIixcInNjYWxlTmFtZVwiOlwiUllXekw3S0dEWUhJWTJOSGJGNVhcIixcInNjYWxlLWJ5XCI6XCJybjY4cHFza29yUUdHY1lfc3FVZ1wiLFwic2NhbGVCeVwiOlwicm42OHBxc2tvclFHR2NZX3NxVWdcIixcImZpZWxkLW5hbWVcIjpcIm5ZcHpnXzQ4SXlIRmV0NERNU2JUXCIsXCJmaWVsZE5hbWVcIjpcIm5ZcHpnXzQ4SXlIRmV0NERNU2JUXCIsXCJjb2xvci1zY2FsZVwiOlwiaHJicUdmOVlKWUNxTjNfdE1JMUxcIixcImNvbG9yU2NhbGVcIjpcImhyYnFHZjlZSllDcU4zX3RNSTFMXCIsXCJ0aWNrXCI6XCJOcTJYQzVDbVdHRzJQU2dIOTJUclwiLFwibGluZVwiOlwibmpjaXRQZkNQbHI3b2hwZWlnOTJcIn07IiwiaW1wb3J0IHR5cGUgeyBTY2FsZUxpbmVhciwgU2NhbGVMb2dhcml0aG1pYywgU2NhbGVQb3dlciB9IGZyb20gXCJkMy1zY2FsZVwiO1xuaW1wb3J0IHtcbiAgQWNjZXNzb3JTY2FsZSxcbiAgQWNjZXNzb3JTY2FsZUNhdGVnb3J5LFxuICBBY2Nlc3NvclNjYWxlQ29udGludW91cyxcbiAgQWNjZXNzb3JTY2FsZURpc2NyZXRlLFxuICBpc0NvbG9yU2NhbGUsXG4gIGlzQ29udGludW91c1NjYWxlLFxuICBpc0Rpc2NyZXRlU2NhbGUsXG59IGZyb20gXCIuL3NjYWxlXCI7XG5pbXBvcnQgdHlwZSB7IExlZ2VuZEluZm8gfSBmcm9tIFwiLi9sYXllclwiO1xuaW1wb3J0IHsgcmdiYSB9IGZyb20gXCIuL2NvbG9yXCI7XG5pbXBvcnQgeyB3b3JkcyB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vbGVnZW5kLmNzc1wiO1xuXG5jb25zdCBUSUNLX0hFSUdIVCA9IDE2O1xuY29uc3QgVElDS19GT05UX1NJWkUgPSAxMTtcblxuZXhwb3J0IHR5cGUgTGVnZW5kUHJvcHMgPSB7XG4gIGxheWVyczogTGVnZW5kSW5mb1tdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIExlZ2VuZCh7IGxheWVycyB9OiBMZWdlbmRQcm9wcykge1xuICBpZiAobGF5ZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2VuZH0+XG4gICAgICB7bGF5ZXJzLm1hcCgobGF5ZXIpID0+IChcbiAgICAgICAgPExheWVyIGtleT17bGF5ZXIuaWR9IHsuLi5sYXllcn0gLz5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBMYXllcih7IG5hbWUsIHNjYWxlcyB9OiBMZWdlbmRJbmZvKSB7XG4gIGlmIChzY2FsZXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGF5ZXJ9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sYXllck5hbWV9IHRpdGxlPXtuYW1lfT5cbiAgICAgICAge25hbWV9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtzY2FsZXMubWFwKChzY2FsZSkgPT4gKFxuICAgICAgICA8U2NhbGUga2V5PXtzY2FsZS5uYW1lfSB7Li4uc2NhbGV9IC8+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU2NhbGUoc2NhbGU6IEFjY2Vzc29yU2NhbGU8bnVtYmVyIHwgQ29sb3I+KSB7XG4gIGNvbnN0IHNjYWxlTmFtZSA9IHdvcmRzKHNjYWxlLm5hbWUucmVwbGFjZSgvXmdldC8sIFwiXCIpKTtcbiAgY29uc3QgaXNDb2xvciA9IGlzQ29sb3JTY2FsZShzY2FsZSk7XG4gIGNvbnN0IGlzQ29udGludW91cyA9IGlzQ29udGludW91c1NjYWxlKHNjYWxlKTtcbiAgY29uc3QgaXNEaXNjcmV0ZSA9IGlzRGlzY3JldGVTY2FsZShzY2FsZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnNjYWxlfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuc2NhbGVOYW1lfT57c2NhbGVOYW1lfTwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc2NhbGVCeX0+YnkgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZmllbGROYW1lfSB0aXRsZT17c2NhbGUuY29sfT5cbiAgICAgICAge3NjYWxlLnNjYWxlQnkgPz8gc2NhbGUuY29sfVxuICAgICAgPC9zcGFuPlxuICAgICAge2lzQ29sb3IgJiYgaXNDb250aW51b3VzICYmIDxDb250aW51b3VzIHsuLi4oc2NhbGUgYXMgQWNjZXNzb3JTY2FsZUNvbnRpbnVvdXM8Q29sb3I+KX0gLz59XG4gICAgICB7aXNDb2xvciAmJiBpc0Rpc2NyZXRlICYmIDxEaXNjcmV0ZSB7Li4uKHNjYWxlIGFzIEFjY2Vzc29yU2NhbGVEaXNjcmV0ZTxDb2xvcj4pfSAvPn1cbiAgICAgIHtpc0NvbG9yICYmIHNjYWxlLnNjYWxlID09PSBcImNhdGVnb3J5XCIgJiYgKFxuICAgICAgICA8Q2F0ZWdvcnkgey4uLihzY2FsZSBhcyBBY2Nlc3NvclNjYWxlQ2F0ZWdvcnk8Q29sb3I+KX0gLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmNvbnN0IENvbnRpbnVvdXMgPSAoeyB0aWNrcywgc2NhbGVEYXRhIH06IEFjY2Vzc29yU2NhbGVDb250aW51b3VzPENvbG9yPikgPT4ge1xuICBjb25zdCBsaW5lcyA9IHRpY2tzLm1hcCgoXywgaW5kZXgpID0+IGluZGV4KS5zbGljZSgxLCAtMSk7XG4gIGNvbnN0IGdyYWRpZW50SGVpZ2h0ID0gVElDS19IRUlHSFQgKiAodGlja3MubGVuZ3RoIC0gMSk7XG4gIGNvbnN0IGhlaWdodCA9IGdyYWRpZW50SGVpZ2h0ICsgVElDS19GT05UX1NJWkUgKyAxO1xuXG4gIHJldHVybiAoXG4gICAgPHN2ZyBjbGFzc05hbWU9e3N0eWxlcy5jb2xvclNjYWxlfSBoZWlnaHQ9e2hlaWdodH0gc2hhcGVSZW5kZXJpbmc9XCJjcmlzcEVkZ2VzXCI+XG4gICAgICA8c3ZnIHk9ezV9PlxuICAgICAgICA8aW1hZ2VcbiAgICAgICAgICB3aWR0aD17MjB9XG4gICAgICAgICAgaGVpZ2h0PXtncmFkaWVudEhlaWdodH1cbiAgICAgICAgICBocmVmPXtnZXRDb2xvckdyYWRpZW50KHNjYWxlRGF0YSl9XG4gICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz1cIm5vbmVcIlxuICAgICAgICAvPlxuICAgICAgICB7bGluZXMubWFwKChpbmRleCkgPT4gKFxuICAgICAgICAgIDxsaW5lXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMubGluZX1cbiAgICAgICAgICAgIHgyPXsyMH1cbiAgICAgICAgICAgIHkxPXtUSUNLX0hFSUdIVCAqIGluZGV4fVxuICAgICAgICAgICAgeTI9e1RJQ0tfSEVJR0hUICogaW5kZXh9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSl9XG4gICAgICA8L3N2Zz5cbiAgICAgIDxUaWNrcyB0aWNrcz17dGlja3N9IHk9ey0yfSAvPlxuICAgIDwvc3ZnPlxuICApO1xufTtcblxuY29uc3QgRGlzY3JldGUgPSAoeyB0aWNrcywgcmFuZ2UgfTogQWNjZXNzb3JTY2FsZURpc2NyZXRlPENvbG9yPikgPT4ge1xuICBjb25zdCBjb2xvcnMgPSByYW5nZS5tYXAocmdiYSk7XG4gIGNvbnN0IHNjYWxlSGVpZ2h0ID0gVElDS19IRUlHSFQgKiAodGlja3MubGVuZ3RoIC0gMSk7XG4gIGNvbnN0IGhlaWdodCA9IHNjYWxlSGVpZ2h0ICsgVElDS19GT05UX1NJWkUgKyAxO1xuXG4gIHJldHVybiAoXG4gICAgPHN2ZyBjbGFzc05hbWU9e3N0eWxlcy5jb2xvclNjYWxlfSBoZWlnaHQ9e2hlaWdodH0gc2hhcGVSZW5kZXJpbmc9XCJjcmlzcEVkZ2VzXCI+XG4gICAgICA8c3ZnIHk9ezV9PlxuICAgICAgICB7Y29sb3JzLm1hcCgoY29sb3IsIGluZGV4KSA9PiAoXG4gICAgICAgICAgPHJlY3Qga2V5PXtpbmRleH0gd2lkdGg9ezIwfSBoZWlnaHQ9e1RJQ0tfSEVJR0hUfSB5PXtpbmRleCAqIFRJQ0tfSEVJR0hUfSBmaWxsPXtjb2xvcn0gLz5cbiAgICAgICAgKSl9XG4gICAgICA8L3N2Zz5cbiAgICAgIDxUaWNrcyB0aWNrcz17dGlja3N9IHk9ey0yfSAvPlxuICAgIDwvc3ZnPlxuICApO1xufTtcblxuZnVuY3Rpb24gQ2F0ZWdvcnkoeyB0aWNrcywgcmFuZ2UsIHVua25vd25UaWNrLCB1bmtub3duIH06IEFjY2Vzc29yU2NhbGVDYXRlZ29yeTxDb2xvcj4pIHtcbiAgY29uc3QgX3JhbmdlID0gdW5rbm93blRpY2sgPyBbLi4ucmFuZ2UsIHVua25vd25dIDogcmFuZ2U7XG4gIGNvbnN0IF90aWNrcyA9IHVua25vd25UaWNrID8gWy4uLnRpY2tzLCB1bmtub3duVGlja10gOiB0aWNrcztcbiAgY29uc3QgY29sb3JzID0gX3JhbmdlLm1hcChyZ2JhKTtcbiAgY29uc3QgaGVpZ2h0ID0gVElDS19IRUlHSFQgKiBfdGlja3MubGVuZ3RoO1xuXG4gIHJldHVybiAoXG4gICAgPHN2ZyBjbGFzc05hbWU9e3N0eWxlcy5jb2xvclNjYWxlfSBoZWlnaHQ9e2hlaWdodH0+XG4gICAgICA8c3ZnPlxuICAgICAgICB7Y29sb3JzLm1hcCgoY29sb3IsIGluZGV4KSA9PiAoXG4gICAgICAgICAgPHJlY3Qga2V5PXtpbmRleH0gd2lkdGg9ezIwfSBoZWlnaHQ9ezE0fSB5PXsxICsgaW5kZXggKiBUSUNLX0hFSUdIVH0gZmlsbD17Y29sb3J9IC8+XG4gICAgICAgICkpfVxuICAgICAgPC9zdmc+XG4gICAgICA8VGlja3MgdGlja3M9e190aWNrc30gLz5cbiAgICA8L3N2Zz5cbiAgKTtcbn1cblxudHlwZSBUaWNrc1Byb3BzID0ge1xuICB0aWNrczogYW55W107XG4gIHg/OiBzdHJpbmcgfCBudW1iZXI7XG4gIHk/OiBzdHJpbmcgfCBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBUaWNrcyh7IHRpY2tzLCB4ID0gMjgsIHkgPSAwIH06IFRpY2tzUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8c3ZnIHsuLi57IHgsIHkgfX0+XG4gICAgICB7dGlja3MubWFwKCh0aWNrLCBpbmRleCkgPT4gKFxuICAgICAgICA8dGV4dCBrZXk9e2luZGV4fSBjbGFzc05hbWU9e3N0eWxlcy50aWNrfSB5PXtUSUNLX0hFSUdIVCAqIGluZGV4fSBkeT17VElDS19GT05UX1NJWkV9PlxuICAgICAgICAgIHtTdHJpbmcodGljayl9XG4gICAgICAgIDwvdGV4dD5cbiAgICAgICkpfVxuICAgIDwvc3ZnPlxuICApO1xufVxuXG50eXBlIFNjYWxlQ29udGludW91czxUPiA9IFNjYWxlTGluZWFyPFQsIFQ+IHwgU2NhbGVQb3dlcjxULCBUPiB8IFNjYWxlTG9nYXJpdGhtaWM8VCwgVD47XG5cbmZ1bmN0aW9uIGdldENvbG9yR3JhZGllbnQoc2NhbGU6IFNjYWxlQ29udGludW91czxDb2xvcj4sIG4gPSAyMDApOiBzdHJpbmcge1xuICBjb25zdCBsZW5ndGggPSBzY2FsZS5yYW5nZSgpLmxlbmd0aDtcbiAgY29uc3QgcmFuZ2U6IGFueSA9IFsuLi5BcnJheShsZW5ndGgpLmtleXMoKV0ubWFwKCh4KSA9PiB4IC8gKGxlbmd0aCAtIDEpKTtcbiAgY29uc3QgaW52ZXJ0ID0gc2NhbGUuY29weSgpLnJhbmdlKHJhbmdlKS5pbnZlcnQ7XG5cbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gIGNhbnZhcy53aWR0aCA9IDE7XG4gIGNhbnZhcy5oZWlnaHQgPSBuO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgY29udGV4dCEuZmlsbFN0eWxlID0gcmdiYShzY2FsZShpbnZlcnQoaSAvIG4pKSk7XG4gICAgY29udGV4dCEuZmlsbFJlY3QoMCwgaSwgMSwgMSk7XG4gIH1cblxuICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTCgpO1xufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJyZGVja1wiOlwicmRlY2tcIixcImtlcGxlclwiOlwia2VwbGVyXCIsXCJsaWdodFwiOlwibGlnaHRcIixcImNvbnRyb2wtY29udGFpbmVyXCI6XCJTOUNKSVZYVkFLMEkzQ3V0ZEk2Z1wiLFwiY29udHJvbENvbnRhaW5lclwiOlwiUzlDSklWWFZBSzBJM0N1dGRJNmdcIixcImxlZnRcIjpcIllkam1DWDZ6SzZiU0syaGYxZjEwXCIsXCJyaWdodFwiOlwiVVZPcTVneFFoa3BxOHNDcVJnSTJcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJrZXBsZXJcIjpcImtlcGxlclwiLFwibGlnaHRcIjpcImxpZ2h0XCIsXCJ0b2dnbGUtYnV0dG9uXCI6XCJ2dUFPeURfNXRXbVkyUlBIVHVZWVwiLFwidG9nZ2xlQnV0dG9uXCI6XCJ2dUFPeURfNXRXbVkyUlBIVHVZWVwiLFwicGFuZWxcIjpcIm42anBwVnhFQktPajFoU0JZWjZfXCIsXCJoZWFkZXJcIjpcIktRZkhtWWJaZjVjbUs5ZTZ0M2lLXCIsXCJidXR0b25cIjpcIkxaWFl3X2lVRWVQVk5VUWdWNDBoXCIsXCJ0ZXh0XCI6XCJEYnptUDRfaEo2d1k2MjhjU1poR1wiLFwiYm9keVwiOlwieEtEampSYkpTWnhnMHh5RDBuQUlcIixcImdyb3VwLWNvbnRhaW5lclwiOlwidkxHaXBwU3VNSXl0Z1h1b2ZDS2RcIixcImdyb3VwQ29udGFpbmVyXCI6XCJ2TEdpcHBTdU1JeXRnWHVvZkNLZFwiLFwibGFiZWxcIjpcImZHMThmN1pHZXBRXzJGY1RyUGxqXCIsXCJjaGVja2VkXCI6XCJtSGtKWEFvSFJhSmk1dVRKMUhnTlwiLFwiY2hlY2tib3hcIjpcInlFbWxkcFBtNXBZX3FfUU9hWUJNXCIsXCJpY29uXCI6XCJzNE56eU04SG1VeU9Vamh3RkdUR1wifTsiLCJpbXBvcnQgeyBGcmFnbWVudCwgUHJvcHNXaXRoQ2hpbGRyZW4sIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ2hlY2tCb3hPdXRsaW5lQmxhbmssIENoZWNrQm94LCBJbmRldGVybWluYXRlQ2hlY2tCb3gsIExheWVycyB9IGZyb20gXCJAbXVpL2ljb25zLW1hdGVyaWFsXCI7XG5cbmltcG9ydCB7IFZpc2liaWxpdHlJbmZvIH0gZnJvbSBcIi4vbGF5ZXJcIjtcbmltcG9ydCB7IGNsYXNzTmFtZXMsIGdyb3VwQnkgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL2xheWVyLXNlbGVjdG9yLmNzc1wiO1xuXG5jb25zdCBOT19HUk9VUCA9IERhdGUubm93KCk7XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZUJ1dHRvblByb3BzID0gUHJvcHNXaXRoQ2hpbGRyZW48e1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHRvb2x0aXA/OiBzdHJpbmc7XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG59PjtcblxuZXhwb3J0IGZ1bmN0aW9uIFRvZ2dsZUJ1dHRvbih7IGNsYXNzTmFtZSwgdG9vbHRpcCwgb25DbGljaywgY2hpbGRyZW4gfTogVG9nZ2xlQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uIGNsYXNzTmFtZT17Y2xhc3NOYW1lfSB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17b25DbGlja30gdGl0bGU9e3Rvb2x0aXB9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgdHlwZSBMYXllclNlbGVjdG9yUHJvcHMgPSB7XG4gIGxheWVyczogVmlzaWJpbGl0eUluZm9bXTtcbiAgb25WaXNpYmlsaXR5Q2hhbmdlOiAobGF5ZXJzOiBWaXNpYmlsaXR5SW5mb1tdKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIExheWVyU2VsZWN0b3IoeyBsYXllcnMsIG9uVmlzaWJpbGl0eUNoYW5nZSB9OiBMYXllclNlbGVjdG9yUHJvcHMpIHtcbiAgY29uc3QgZ3JvdXBzID0gZ3JvdXBCeShsYXllcnMsIChsYXllcikgPT4gbGF5ZXIuZ3JvdXBOYW1lID8/IGAke2xheWVyLm5hbWV9LSR7Tk9fR1JPVVB9YCk7XG5cbiAgY29uc3QgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9IChjaGFuZ2VkOiBWaXNpYmlsaXR5SW5mb1tdLCB2aXNpYmxlOiBib29sZWFuLCBmb2N1czogYm9vbGVhbikgPT4ge1xuICAgIGlmIChmb2N1cykge1xuICAgICAgY29uc3Qgbm90Q2hhbmdlZCA9IGxheWVycy5maWx0ZXIoKGxheWVyKSA9PiAhY2hhbmdlZC5pbmNsdWRlcyhsYXllcikpO1xuICAgICAgY29uc3Qgbm9uRm9jdXMgPSAhbm90Q2hhbmdlZC5zb21lKChsYXllcikgPT4gbGF5ZXIudmlzaWJsZSk7XG4gICAgICByZXR1cm4gb25WaXNpYmlsaXR5Q2hhbmdlKFxuICAgICAgICBsYXllcnMubWFwKChsYXllcikgPT4gKHtcbiAgICAgICAgICAuLi5sYXllcixcbiAgICAgICAgICB2aXNpYmxlOiBjaGFuZ2VkLmluY2x1ZGVzKGxheWVyKSA/IHZpc2libGUgOiBub25Gb2N1cyxcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH1cblxuICAgIG9uVmlzaWJpbGl0eUNoYW5nZShjaGFuZ2VkLm1hcCgobGF5ZXIpID0+ICh7IC4uLmxheWVyLCB2aXNpYmxlIH0pKSk7XG4gIH07XG5cbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlT3BlbkNoYW5nZSA9ICgpID0+IHNldElzT3BlbigoaXNPcGVuKSA9PiAhaXNPcGVuKTtcblxuICBpZiAoIWlzT3Blbikge1xuICAgIHJldHVybiAoXG4gICAgICA8VG9nZ2xlQnV0dG9uXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRvZ2dsZUJ1dHRvbn1cbiAgICAgICAgdG9vbHRpcD1cIkxheWVyIHNlbGVjdG9yXCJcbiAgICAgICAgb25DbGljaz17aGFuZGxlT3BlbkNoYW5nZX1cbiAgICAgID5cbiAgICAgICAgPExheWVycyBjbGFzc05hbWU9e3N0eWxlcy5pY29ufSBmb250U2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgIDwvVG9nZ2xlQnV0dG9uPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucGFuZWx9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PlxuICAgICAgICA8VG9nZ2xlQnV0dG9uIGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gb25DbGljaz17aGFuZGxlT3BlbkNoYW5nZX0gdG9vbHRpcD1cIkNsb3NlXCI+XG4gICAgICAgICAgPExheWVycyBjbGFzc05hbWU9e3N0eWxlcy5pY29ufSBmb250U2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy50ZXh0fT5MYXllcnM8L3NwYW4+XG4gICAgICAgIDwvVG9nZ2xlQnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICB7QXJyYXkuZnJvbShncm91cHMuZW50cmllcygpLCAoW2tleSwgbGF5ZXJzLCBbeyBncm91cE5hbWU6IGdyb3VwIH1dID0gbGF5ZXJzXSkgPT4gKFxuICAgICAgICAgIDxDaGVja2JveEdyb3VwIGtleT17a2V5fSB7Li4ueyBncm91cCwgbGF5ZXJzLCBvbkNoYW5nZTogaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSB9fSAvPlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG50eXBlIENoZWNrYm94R3JvdXBQcm9wcyA9IHtcbiAgZ3JvdXA6IHN0cmluZyB8IG51bGw7XG4gIGxheWVyczogVmlzaWJpbGl0eUluZm9bXTtcbiAgb25DaGFuZ2U6IChsYXllcnM6IFZpc2liaWxpdHlJbmZvW10sIHZpc2libGU6IGJvb2xlYW4sIGZvY3VzOiBib29sZWFuKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gQ2hlY2tib3hHcm91cCh7IGdyb3VwLCBsYXllcnMsIG9uQ2hhbmdlIH06IENoZWNrYm94R3JvdXBQcm9wcykge1xuICBjb25zdCBjaGVja2JveGVzID0gQXJyYXkuZnJvbShcbiAgICBncm91cEJ5KGxheWVycywgKGxheWVyKSA9PiBsYXllci5uYW1lKSxcbiAgICAoW25hbWUsIGxheWVyc10pID0+IDxDaGVja2JveCBrZXk9e25hbWV9IHsuLi57IG5hbWUsIGxheWVycywgb25DaGFuZ2UgfX0gLz5cbiAgKTtcblxuICByZXR1cm4gZ3JvdXAgPyAoXG4gICAgPEZyYWdtZW50PlxuICAgICAgPENoZWNrYm94IHsuLi57IG5hbWU6IGdyb3VwLCBsYXllcnMsIG9uQ2hhbmdlIH19IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmdyb3VwQ29udGFpbmVyfT57Y2hlY2tib3hlc308L2Rpdj5cbiAgICA8L0ZyYWdtZW50PlxuICApIDogKFxuICAgIDxGcmFnbWVudD57Y2hlY2tib3hlc308L0ZyYWdtZW50PlxuICApO1xufVxuXG50eXBlIENoZWNrYm94UHJvcHMgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGF5ZXJzOiBWaXNpYmlsaXR5SW5mb1tdO1xuICBvbkNoYW5nZTogKGxheWVyczogVmlzaWJpbGl0eUluZm9bXSwgdmlzaWJsZTogYm9vbGVhbiwgZm9jdXM6IGJvb2xlYW4pID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBDaGVja2JveCh7IG5hbWUsIGxheWVycywgb25DaGFuZ2UgfTogQ2hlY2tib3hQcm9wcykge1xuICBjb25zdCBjaGVja2VkID0gaXNWaXNpYmxlKGxheWVycyk7XG4gIGNvbnN0IGluZGV0ZXJtaW5hdGUgPSBjaGVja2VkID09PSBudWxsO1xuXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xuICAgIH1cbiAgfSwgW2luZGV0ZXJtaW5hdGVdKTtcblxuICBjb25zdCBjYW5jZWwgPSB1c2VSZWY8KCkgPT4gYm9vbGVhbj4oKCkgPT4gZmFsc2UpO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoKSA9PiB7XG4gICAgLy8gaWYgYSBkZWxheSB3YXMgY2FuY2VsbGVkLCBjaGVja2JveCB3YXMgY2hlY2tlZCB3aXRoaW4gZGVsYXkgcGVyaW9kXG4gICAgY29uc3QgY2FuY2VsbGVkID0gY2FuY2VsLmN1cnJlbnQoKTtcbiAgICAvLyBkb3VibGUtY2xpY2sgLT4gc2hvdyBsYXllciBhbmQgZm9jdXNcbiAgICBpZiAoY2FuY2VsbGVkKSBvbkNoYW5nZShsYXllcnMsIHRydWUsIHRydWUpO1xuICAgIC8vIHNpbmdsZS1jbGljayAtPiBjaGFuZ2UgbGF5ZXIgd2l0aCBzbWFsbCBkZWxheVxuICAgIGVsc2UgY2FuY2VsLmN1cnJlbnQgPSBkZWxheSgoKSA9PiBvbkNoYW5nZShsYXllcnMsICFjaGVja2VkLCBmYWxzZSksIDIwMCk7XG4gIH07XG5cbiAgY29uc3QgQ2hlY2tCb3hJY29uID0gY2hlY2tlZFxuICAgID8gQ2hlY2tCb3hcbiAgICA6IGluZGV0ZXJtaW5hdGVcbiAgICA/IEluZGV0ZXJtaW5hdGVDaGVja0JveFxuICAgIDogQ2hlY2tCb3hPdXRsaW5lQmxhbms7XG5cbiAgY29uc3QgY2xhc3NlcyA9IGNsYXNzTmFtZXMoc3R5bGVzLmxhYmVsLCBjaGVja2VkIHx8IGluZGV0ZXJtaW5hdGUgPyBzdHlsZXMuY2hlY2tlZCA6IG51bGwpO1xuICByZXR1cm4gKFxuICAgIDxsYWJlbCBjbGFzc05hbWU9e2NsYXNzZXN9PlxuICAgICAgPGlucHV0XG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmNoZWNrYm94fVxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICBjaGVja2VkPXtjaGVja2VkID8/IHRydWV9XG4gICAgICAvPlxuICAgICAgPENoZWNrQm94SWNvbiBmb250U2l6ZT1cInNtYWxsXCIgY2xhc3NOYW1lPXtzdHlsZXMuaWNvbn0gLz5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnRleHR9PntuYW1lfTwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5mdW5jdGlvbiBpc1Zpc2libGUobGF5ZXJzOiBWaXNpYmlsaXR5SW5mb1tdKSB7XG4gIGxldCB2aXNpYmxlID0gbGF5ZXJzWzBdLnZpc2libGU7XG4gIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgaWYgKGxheWVyLnZpc2libGUgIT09IHZpc2libGUpIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHZpc2libGU7XG59XG5cbmNvbnN0IGRlbGF5ID0gKG9uVGltZW91dDogKCkgPT4gdm9pZCwgZGVsYXkgPSAyMDApID0+IHtcbiAgY29uc3QgcmFmID0geyBjdXJyZW50OiAwIH07XG4gIGxldCBzdGFydFRpbWUgPSAwO1xuXG4gIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICBpZiAocmFmLmN1cnJlbnQgPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgIGdsb2JhbFRoaXMuY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmLmN1cnJlbnQpO1xuICAgIHJhZi5jdXJyZW50ID0gMDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBsb29wID0gKHRpbWVzdGFtcDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKCFzdGFydFRpbWUpIHtcbiAgICAgIHN0YXJ0VGltZSA9IHRpbWVzdGFtcDtcbiAgICB9XG5cbiAgICBpZiAodGltZXN0YW1wIC0gc3RhcnRUaW1lID4gZGVsYXkpIHtcbiAgICAgIHJhZi5jdXJyZW50ID0gMDtcbiAgICAgIG9uVGltZW91dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJhZi5jdXJyZW50ID0gZ2xvYmFsVGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobG9vcCk7XG4gIH07XG5cbiAgcmFmLmN1cnJlbnQgPSBnbG9iYWxUaGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTtcbiAgcmV0dXJuIGNhbmNlbDtcbn07XG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSW5pdGlhbFZpZXdTdGF0ZVByb3BzLCBXZWJNZXJjYXRvclZpZXdwb3J0IH0gZnJvbSBcIkBkZWNrLmdsL2NvcmVcIjtcbmltcG9ydCB0eXBlIHsgRGVja0dMUHJvcHMgfSBmcm9tIFwiQGRlY2suZ2wvcmVhY3RcIjtcbmltcG9ydCB7IE1hcFByb3BzIH0gZnJvbSBcInJlYWN0LW1hcC1nbFwiO1xuXG5pbXBvcnQgeyBMYXllciwgTGF5ZXJQcm9wcywgVmlzaWJpbGl0eUluZm8gfSBmcm9tIFwiLi9sYXllclwiO1xuaW1wb3J0IHsgTWFwIH0gZnJvbSBcIi4vbWFwXCI7XG5pbXBvcnQgeyBMZWdlbmQgfSBmcm9tIFwiLi9sZWdlbmRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vYXBwLmNzc1wiO1xuaW1wb3J0IHsgY2xhc3NOYW1lcyB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IExheWVyU2VsZWN0b3IgfSBmcm9tIFwiLi9sYXllci1zZWxlY3RvclwiO1xuXG5leHBvcnQgdHlwZSBEZWNrUHJvcHMgPSBEZWNrR0xQcm9wcyAmXG4gIFBpY2s8TWFwUHJvcHMsIFwibWFwYm94QWNjZXNzVG9rZW5cIiB8IFwibWFwU3R5bGVcIj4gJiB7XG4gICAgaW5pdGlhbEJvdW5kcz86IEJvdW5kcztcbiAgICBibGVuZGluZ01vZGU6IEJsZW5kaW5nTW9kZTtcbiAgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBcHBQcm9wcyB7XG4gIHByb3BzOiBEZWNrUHJvcHM7XG4gIGxheWVyczogTGF5ZXJQcm9wc1tdO1xuICB0aGVtZTogXCJrZXBsZXJcIiB8IFwibGlnaHRcIjtcbiAgbGF6eUxvYWQ6IGJvb2xlYW47XG4gIGxheWVyU2VsZWN0b3I6IGJvb2xlYW47XG4gIG9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlOiAobGF5ZXJzOiBWaXNpYmlsaXR5SW5mb1tdKSA9PiB2b2lkO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFwcCh7XG4gIHByb3BzLFxuICBsYXllcnMsXG4gIHRoZW1lLFxuICBsYXp5TG9hZCxcbiAgbGF5ZXJTZWxlY3RvcixcbiAgb25MYXllclZpc2liaWxpdHlDaGFuZ2UsXG4gIHdpZHRoLFxuICBoZWlnaHQsXG59OiBBcHBQcm9wcykge1xuICBjb25zdCB7IGluaXRpYWxCb3VuZHMsIGluaXRpYWxWaWV3U3RhdGUsIC4uLmRlY2tnbFByb3BzIH0gPSBwcm9wcztcblxuICAvLyBmaXQgYm91bmRzXG4gIGNvbnN0IF9pbml0aWFsVmlld1N0YXRlID0gdXNlQm91bmRzKHdpZHRoLCBoZWlnaHQsIGluaXRpYWxCb3VuZHMsIGluaXRpYWxWaWV3U3RhdGUpO1xuICBjb25zdCBfbGF5ZXJzID0gbGF5ZXJzLm1hcChMYXllci5jcmVhdGUpO1xuXG4gIGNvbnN0IGNvbnRhaW5lciA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGluVmlld3BvcnQgPSB1c2VJblZpZXdwb3J0KGNvbnRhaW5lciwgbGF6eUxvYWQpO1xuICBjb25zdCBzaG91bGRSZW5kZXIgPSAhbGF6eUxvYWQgfHwgaW5WaWV3cG9ydDtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtjb250YWluZXJ9IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucmRlY2ssIHRoZW1lKX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuY29udHJvbENvbnRhaW5lciwgc3R5bGVzLmxlZnQpfT5cbiAgICAgICAge2xheWVyU2VsZWN0b3IgJiYgKFxuICAgICAgICAgIDxMYXllclNlbGVjdG9yXG4gICAgICAgICAgICBsYXllcnM9e19sYXllcnNcbiAgICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnByb3BzLnZpc2liaWxpdHlUb2dnbGUpXG4gICAgICAgICAgICAgIC5tYXAoKGxheWVyKSA9PiBsYXllci5yZW5kZXJTZWxlY3RvcigpKVxuICAgICAgICAgICAgICAucmV2ZXJzZSgpfVxuICAgICAgICAgICAgb25WaXNpYmlsaXR5Q2hhbmdlPXtvbkxheWVyVmlzaWJpbGl0eUNoYW5nZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICB7c2hvdWxkUmVuZGVyICYmIChcbiAgICAgICAgPE1hcCBwcm9wcz17eyAuLi5kZWNrZ2xQcm9wcywgaW5pdGlhbFZpZXdTdGF0ZTogX2luaXRpYWxWaWV3U3RhdGUgfX0gbGF5ZXJzPXtfbGF5ZXJzfSAvPlxuICAgICAgKX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5jb250cm9sQ29udGFpbmVyLCBzdHlsZXMucmlnaHQpfT5cbiAgICAgICAgPExlZ2VuZFxuICAgICAgICAgIGxheWVycz17X2xheWVyc1xuICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnByb3BzLnZpc2libGUpXG4gICAgICAgICAgICAubWFwKChsYXllcikgPT4gbGF5ZXIucmVuZGVyTGVnZW5kKCkpXG4gICAgICAgICAgICAucmV2ZXJzZSgpfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIHVzZUJvdW5kcyhcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGluaXRpYWxCb3VuZHM/OiBCb3VuZHMsXG4gIGluaXRpYWxWaWV3U3RhdGU/OiBJbml0aWFsVmlld1N0YXRlUHJvcHNcbikge1xuICByZXR1cm4gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGluaXRpYWxCb3VuZHMpKSB7XG4gICAgICByZXR1cm4gaW5pdGlhbFZpZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCBbeG1pbiwgeW1pbiwgeG1heCwgeW1heF0gPSBpbml0aWFsQm91bmRzO1xuICAgIC8vIGNvbnN0cmFpbiB0byB3ZWIgbWVyY2F0b3IgbGltaXRzXG4gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2ViX01lcmNhdG9yX3Byb2plY3Rpb25cbiAgICBjb25zdCBib3VuZHM6IFtbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdXSA9IFtcbiAgICAgIFtNYXRoLm1heCgtMTgwLCB4bWluKSwgTWF0aC5tYXgoeW1pbiwgLTg1LjA1MTEyOSldLFxuICAgICAgW01hdGgubWluKDE4MCwgeG1heCksIE1hdGgubWluKHltYXgsIDg1LjA1MTEyOSldLFxuICAgIF07XG5cbiAgICBjb25zdCB2aWV3cG9ydCA9IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICBjb25zdCB7IGxvbmdpdHVkZSwgbGF0aXR1ZGUsIHpvb20gfSA9IHZpZXdwb3J0LmZpdEJvdW5kcyhib3VuZHMpO1xuXG4gICAgcmV0dXJuIHsgLi4uaW5pdGlhbFZpZXdTdGF0ZSwgbG9uZ2l0dWRlLCBsYXRpdHVkZSwgem9vbSB9O1xuICB9LCBbaW5pdGlhbEJvdW5kcywgaW5pdGlhbFZpZXdTdGF0ZSwgd2lkdGgsIGhlaWdodF0pO1xufVxuXG5mdW5jdGlvbiB1c2VJblZpZXdwb3J0KHJlZjogUmVmT2JqZWN0PEhUTUxFbGVtZW50PiwgZW5hYmxlZDogYm9vbGVhbikge1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChlbmFibGVkICYmIHJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgICBzZXRTdGF0ZShlbnRyaWVzWzBdLmlzSW50ZXJzZWN0aW5nKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyB0aHJlc2hvbGQ6IDAgfVxuICAgICAgKTtcblxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShyZWYuY3VycmVudCk7XG4gICAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfSwgW2VuYWJsZWQsIHJlZl0pO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cbiIsImltcG9ydCB7IEluaXRpYWxWaWV3U3RhdGVQcm9wcywgV2ViTWVyY2F0b3JWaWV3cG9ydCB9IGZyb20gXCJAZGVjay5nbC9jb3JlXCI7XG5pbXBvcnQgeyBwaWNrIH0gZnJvbSBcIi4vdXRpbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1N0YXRlKHZpZXdTdGF0ZTogV2ViTWVyY2F0b3JWaWV3cG9ydCB8IEluaXRpYWxWaWV3U3RhdGVQcm9wcykge1xuICBjb25zdCB2aWV3cG9ydCA9XG4gICAgdmlld1N0YXRlIGluc3RhbmNlb2YgV2ViTWVyY2F0b3JWaWV3cG9ydCA/IHZpZXdTdGF0ZSA6IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KHZpZXdTdGF0ZSk7XG5cbiAgY29uc3QgcHJvcHMgPSBwaWNrKHZpZXdwb3J0LCBcImxvbmdpdHVkZVwiLCBcImxhdGl0dWRlXCIsIFwiem9vbVwiLCBcImJlYXJpbmdcIiwgXCJwaXRjaFwiLCBcImFsdGl0dWRlXCIpO1xuICByZXR1cm4ge1xuICAgIGJvdW5kczogdmlld3BvcnQuZ2V0Qm91bmRzKCksXG4gICAgdmlld1N0YXRlOiB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGNlbnRlcjogdmlld3BvcnQudW5wcm9qZWN0RmxhdCh2aWV3cG9ydC5jZW50ZXIpLFxuICAgIH0sXG4gIH07XG59XG4iLCJpbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHR5cGUgeyBJbml0aWFsVmlld1N0YXRlUHJvcHMsIFBpY2tJbmZvIH0gZnJvbSBcIkBkZWNrLmdsL2NvcmVcIjtcbmltcG9ydCB7IEFwcCwgQXBwUHJvcHMsIERlY2tQcm9wcyB9IGZyb20gXCIuL2FwcFwiO1xuaW1wb3J0IHR5cGUgeyBMYXllclByb3BzIH0gZnJvbSBcIi4vbGF5ZXJcIjtcbmltcG9ydCB7IGRlYm91bmNlLCBnZXRFbGVtZW50RGltZW5zaW9ucywgcGljayB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IGdldFZpZXdTdGF0ZSB9IGZyb20gXCIuL3ZpZXdwb3J0XCI7XG5pbXBvcnQgeyBnZXRQaWNrZWRPYmplY3QgfSBmcm9tIFwiLi9waWNraW5nXCI7XG5cbmV4cG9ydCBjb25zdCBiaW5kaW5nOiBIVE1MV2lkZ2V0cy5CaW5kaW5nID0ge1xuICBuYW1lOiBcInJkZWNrXCIsXG4gIHR5cGU6IFwib3V0cHV0XCIsXG4gIGZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICAvLyBjb21wdXRlIGVsIGRpbWVuc2lvbnMgaWYgaW5pdGlhbGx5IGhpZGRlblxuICAgIGlmICh3aWR0aCA9PT0gMCB8fCBoZWlnaHQgPT09IDApIHtcbiAgICAgIFt3aWR0aCwgaGVpZ2h0XSA9IGdldEVsZW1lbnREaW1lbnNpb25zKGVsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFdpZGdldChlbCwgd2lkdGgsIGhlaWdodCk7XG4gIH0sXG59O1xuXG50eXBlIExheWVyVmlzaWJpbGl0eVByb3BzID0gUGljazxMYXllclByb3BzLCBcImdyb3VwTmFtZVwiIHwgXCJ2aXNpYmxlXCI+ICYge1xuICBuYW1lOiBzdHJpbmcgfCBudWxsO1xufTtcblxudHlwZSBXaWRnZXRQcm9wcyA9IFBpY2s8QXBwUHJvcHMsIFwicHJvcHNcIiB8IFwibGF5ZXJzXCIgfCBcInRoZW1lXCIgfCBcImxheWVyU2VsZWN0b3JcIiB8IFwibGF6eUxvYWRcIj47XG5cbmV4cG9ydCBjbGFzcyBXaWRnZXQgaW1wbGVtZW50cyBIVE1MV2lkZ2V0cy5XaWRnZXQsIFdpZGdldFByb3BzIHtcbiAgI2VsOiBIVE1MRWxlbWVudDtcbiAgI3dpZHRoOiBudW1iZXI7XG4gICNoZWlnaHQ6IG51bWJlcjtcbiAgcHJvcHM6IERlY2tQcm9wcyA9IHsgYmxlbmRpbmdNb2RlOiBcIm5vcm1hbFwiIH07XG4gIGxheWVyczogTGF5ZXJQcm9wc1tdID0gW107XG4gIHRoZW1lOiBcImtlcGxlclwiIHwgXCJsaWdodFwiID0gXCJrZXBsZXJcIjtcbiAgbGF5ZXJTZWxlY3RvcjogYm9vbGVhbiA9IHRydWU7XG4gIGxhenlMb2FkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoZWw6IEhUTUxFbGVtZW50LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMuI2VsID0gZWw7XG4gICAgdGhpcy4jd2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLiNoZWlnaHQgPSBoZWlnaHQ7XG4gICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vblZpZXdTdGF0ZUNoYW5nZSA9IHRoaXMub25WaWV3U3RhdGVDaGFuZ2UuYmluZCh0aGlzKTtcblxuICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHtcbiAgICAgIGNvbnN0IGRlYm91bmNlZFJlbmRlciA9IGRlYm91bmNlKChwcm9wcyA9IHt9KSA9PiB0aGlzLnJlbmRlclZhbHVlKHByb3BzKSwgNTApO1xuXG4gICAgICAvLyB1cGRhdGUgbGF5ZXJzXG4gICAgICBTaGlueS5hZGRDdXN0b21NZXNzYWdlSGFuZGxlcihgJHtlbC5pZH06bGF5ZXJgLCAobGF5ZXI6IExheWVyUHJvcHMpID0+IHtcbiAgICAgICAgY29uc3QgX2xheWVyID0gdGhpcy5sYXllcnMuZmluZCgoeCkgPT4geC5pZCA9PT0gbGF5ZXIuaWQpO1xuICAgICAgICBjb25zdCBtZXJnZWQgPSB7XG4gICAgICAgICAgLi4uX2xheWVyLFxuICAgICAgICAgIC4uLmxheWVyLFxuICAgICAgICAgIC8vIGlmIHZpc2libGUgaXMgbnVsbCwgdXNlIGV4aXN0aW5nXG4gICAgICAgICAgdmlzaWJsZTogbGF5ZXIudmlzaWJsZSA/PyBfbGF5ZXI/LnZpc2libGUsXG4gICAgICAgICAgLy8gaWYgZGF0YSBpcyBub3Qgc3VwcGxpZWQgLyBpcyBmYWxzZXkgZnJvbSBzaGlueSwgdXNlIGV4aXN0aW5nXG4gICAgICAgICAgZGF0YTogbGF5ZXIuZGF0YSA/PyBfbGF5ZXI/LmRhdGEgPz8gbnVsbCxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyB1cHNlcnRcbiAgICAgICAgdGhpcy5sYXllcnMgPVxuICAgICAgICAgIF9sYXllciA9PSBudWxsXG4gICAgICAgICAgICA/IFsuLi50aGlzLmxheWVycywgbWVyZ2VkXVxuICAgICAgICAgICAgOiB0aGlzLmxheWVycy5tYXAoKHgpID0+ICh4ID09PSBfbGF5ZXIgPyBtZXJnZWQgOiB4KSk7XG5cbiAgICAgICAgZGVib3VuY2VkUmVuZGVyKHsgbGF5ZXJzOiB0aGlzLmxheWVycyB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyB1cGRhdGUgbWFwXG4gICAgICBTaGlueS5hZGRDdXN0b21NZXNzYWdlSGFuZGxlcihgJHtlbC5pZH06ZGVja2AsICh7IHByb3BzLCB0aGVtZSwgbGF6eUxvYWQgfTogUkRlY2tQcm9wcykgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlclZhbHVlKHtcbiAgICAgICAgICBwcm9wczogeyAuLi50aGlzLnByb3BzLCAuLi5wcm9wcyB9LFxuICAgICAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgICAgICBsYXp5TG9hZDogbGF6eUxvYWQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRMYXllclZpc2liaWxpdHkgPSB0aGlzLnNldExheWVyVmlzaWJpbGl0eS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgcmVuZGVyVmFsdWUoeyBwcm9wcywgbGF5ZXJzLCB0aGVtZSwgbGF5ZXJTZWxlY3RvciwgbGF6eUxvYWQgfTogUGFydGlhbDxXaWRnZXRQcm9wcz4gPSB7fSkge1xuICAgIC8vIG1lcmdlIGluIG5ldyBwcm9wcyB3aXRoIGV4aXN0aW5nIHN0YXRlXG4gICAgY29uc3QgX3Byb3BzID0ge1xuICAgICAgcHJvcHM6IHtcbiAgICAgICAgLi4udGhpcy5wcm9wcyxcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIG9uQ2xpY2s6IHRoaXMub25DbGljayxcbiAgICAgICAgb25WaWV3U3RhdGVDaGFuZ2U6IGRlYm91bmNlKHRoaXMub25WaWV3U3RhdGVDaGFuZ2UsIDUwKSxcbiAgICAgIH0sXG4gICAgICBsYXllcnM6IGxheWVycyA/PyB0aGlzLmxheWVycyxcbiAgICAgIHRoZW1lOiB0aGVtZSA/PyB0aGlzLnRoZW1lLFxuICAgICAgbGF5ZXJTZWxlY3RvcjogbGF5ZXJTZWxlY3RvciA/PyB0aGlzLmxheWVyU2VsZWN0b3IsXG4gICAgICBsYXp5TG9hZDogbGF6eUxvYWQgPz8gdGhpcy5sYXp5TG9hZCxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgX3Byb3BzKTtcblxuICAgIFJlYWN0RE9NLnJlbmRlcihcbiAgICAgIDxBcHBcbiAgICAgICAgey4uLl9wcm9wc31cbiAgICAgICAgb25MYXllclZpc2liaWxpdHlDaGFuZ2U9e3RoaXMuc2V0TGF5ZXJWaXNpYmlsaXR5fVxuICAgICAgICB3aWR0aD17dGhpcy4jd2lkdGh9XG4gICAgICAgIGhlaWdodD17dGhpcy4jaGVpZ2h0fVxuICAgICAgLz4sXG4gICAgICB0aGlzLiNlbFxuICAgICk7XG4gIH1cblxuICAvLyBkZWNrLmdsIGhhbmRsZXMgcmVzaXplIGF1dG9tYXRpY2FsbHlcbiAgcmVzaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBHZXQgd2lkZ2V0IGlkXG4gICAqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jZWwuaWQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGxheWVycycgdmlzaWJpbGl0eS4gTGF5ZXJzIG5vdCBpbmNsdWRlZCBpbiB2aXNpYmlsaXR5IGFyZSB1bmFsdGVyZWQuXG4gICAqIEBwYXJhbSB2aXNpYmlsaXR5IHRoZSBsYXllcnMgdmlzaWJpbGl0eVxuICAgKi9cbiAgc2V0TGF5ZXJWaXNpYmlsaXR5KGxheWVyczogTGF5ZXJWaXNpYmlsaXR5UHJvcHNbXSk6IHZvaWQge1xuICAgIGlmIChsYXllcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBpc01hdGNoID0gKGxheWVyVmlzaWJsaXR5OiBMYXllclZpc2liaWxpdHlQcm9wcywgbGF5ZXI6IExheWVyUHJvcHMpID0+IHtcbiAgICAgIGNvbnN0IG5hbWVFcXVhbCA9IGxheWVyVmlzaWJsaXR5Lm5hbWUgPT09IGxheWVyLm5hbWU7XG4gICAgICBjb25zdCBncm91cEVxdWFsID0gbGF5ZXJWaXNpYmxpdHkuZ3JvdXBOYW1lID09PSBsYXllci5ncm91cE5hbWU7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIChuYW1lRXF1YWwgJiYgZ3JvdXBFcXVhbCkgfHxcbiAgICAgICAgLy8gYWxsIGxheWVycyBpbiBhIGdyb3VwXG4gICAgICAgIChsYXllclZpc2libGl0eS5uYW1lID09IG51bGwgJiYgbGF5ZXJWaXNpYmxpdHkuZ3JvdXBOYW1lICE9IG51bGwgJiYgZ3JvdXBFcXVhbClcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IF9sYXllcnMgPSB0aGlzLmxheWVycy5tYXAoKGxheWVyKSA9PiB7XG4gICAgICBjb25zdCBfbGF5ZXIgPSBsYXllcnMuZmluZCgoeCkgPT4gaXNNYXRjaCh4LCBsYXllcikgJiYgeC52aXNpYmxlICE9PSBsYXllci52aXNpYmxlKTtcbiAgICAgIHJldHVybiBfbGF5ZXIgPyB7IC4uLmxheWVyLCB2aXNpYmxlOiBfbGF5ZXIudmlzaWJsZSB9IDogbGF5ZXI7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbmRlclZhbHVlKHsgbGF5ZXJzOiBfbGF5ZXJzIH0pO1xuICB9XG5cbiAgb25DbGljayhpbmZvOiBQaWNrSW5mbzxhbnk+KSB7XG4gICAgaWYgKEhUTUxXaWRnZXRzLnNoaW55TW9kZSkge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgY29vcmRpbmF0ZTogaW5mby5jb29yZGluYXRlLFxuICAgICAgICAuLi5nZXRWaWV3U3RhdGUoaW5mby52aWV3cG9ydCksXG4gICAgICAgIGxheWVyOiBwaWNrKGluZm8ubGF5ZXI/LnByb3BzLCBcImlkXCIsIFwibmFtZVwiLCBcImdyb3VwTmFtZVwiKSxcbiAgICAgICAgb2JqZWN0OiBnZXRQaWNrZWRPYmplY3QoaW5mbyksXG4gICAgICB9O1xuXG4gICAgICBTaGlueS5zZXRJbnB1dFZhbHVlKGAke3RoaXMuaWR9X2NsaWNrYCwgZGF0YSwgeyBwcmlvcml0eTogXCJldmVudFwiIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uVmlld1N0YXRlQ2hhbmdlKHsgdmlld1N0YXRlIH06IHsgdmlld1N0YXRlOiBJbml0aWFsVmlld1N0YXRlUHJvcHMgfSkge1xuICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBnZXRWaWV3U3RhdGUodmlld1N0YXRlKTtcblxuICAgICAgU2hpbnkuc2V0SW5wdXRWYWx1ZShgJHt0aGlzLmlkfV92aWV3c3RhdGVgLCBkYXRhLCB7IHByaW9yaXR5OiBcImV2ZW50XCIgfSk7XG4gICAgfVxuICB9XG59XG5cbnR5cGUgV2lkZ2V0Q29udGFpbmVyID0gSFRNTEVsZW1lbnQgJiB7IGh0bWx3aWRnZXRfZGF0YV9pbml0X3Jlc3VsdDogV2lkZ2V0IH07XG5cbi8qKlxuICogR2V0IGFuIHJkZWNrIHdpZGdldCBpbnN0YW5jZSBieSBpZFxuICogQHBhcmFtIGlkIHRoZSB3aWRnZXQgaWRcbiAqIEByZXR1cm5zIHtXaWRnZXR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaWRnZXRCeUlkKGlkOiBzdHJpbmcpOiBXaWRnZXQgfCBudWxsIHtcbiAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSBhcyBXaWRnZXRDb250YWluZXIgfCBudWxsO1xuICByZXR1cm4gZWxlbWVudD8uaHRtbHdpZGdldF9kYXRhX2luaXRfcmVzdWx0ID8/IG51bGw7XG59XG5cbi8qKlxuICogR2V0IGFsbCByZGVjayB3aWRnZXQgaW5zdGFuY2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaWRnZXRzKCk6IFdpZGdldFtdIHtcbiAgY29uc3QgZWxlbWVudHMgPSBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5yZGVjay5odG1sLXdpZGdldFwiKV0gYXMgV2lkZ2V0Q29udGFpbmVyW107XG4gIHJldHVybiBlbGVtZW50cy5tYXAoKHgpID0+IHguaHRtbHdpZGdldF9kYXRhX2luaXRfcmVzdWx0KS5maWx0ZXIoKHgpID0+IHggaW5zdGFuY2VvZiBXaWRnZXQpO1xufVxuXG4vKiByZWdpc3RlciB3aWRnZXQgKi9cbkhUTUxXaWRnZXRzLndpZGdldChiaW5kaW5nKTtcbiIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZnJvbS1lbnRyaWVzXCI7XG5cbmRlY2xhcmUgY29uc3QgX19WRVJTSU9OX186IHN0cmluZztcblxuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBfX1ZFUlNJT05fXztcbmV4cG9ydCAqIGZyb20gXCIuL3dpZGdldFwiO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIG5vIGJhc2VVUklcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBhbmQgbG9hZGluZyBjaHVua3Ncbi8vIHVuZGVmaW5lZCA9IGNodW5rIG5vdCBsb2FkZWQsIG51bGwgPSBjaHVuayBwcmVsb2FkZWQvcHJlZmV0Y2hlZFxuLy8gW3Jlc29sdmUsIHJlamVjdCwgUHJvbWlzZV0gPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQ0NzI6IDBcbn07XG5cbi8vIG5vIGNodW5rIG9uIGRlbWFuZCBsb2FkaW5nXG5cbi8vIG5vIHByZWZldGNoaW5nXG5cbi8vIG5vIHByZWxvYWRlZFxuXG4vLyBubyBITVJcblxuLy8gbm8gSE1SIG1hbmlmZXN0XG5cbl9fd2VicGFja19yZXF1aXJlX18uTy5qID0gKGNodW5rSWQpID0+IChpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gPT09IDApO1xuXG4vLyBpbnN0YWxsIGEgSlNPTlAgY2FsbGJhY2sgZm9yIGNodW5rIGxvYWRpbmdcbnZhciB3ZWJwYWNrSnNvbnBDYWxsYmFjayA9IChwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbiwgZGF0YSkgPT4ge1xuXHR2YXIgW2NodW5rSWRzLCBtb3JlTW9kdWxlcywgcnVudGltZV0gPSBkYXRhO1xuXHQvLyBhZGQgXCJtb3JlTW9kdWxlc1wiIHRvIHRoZSBtb2R1bGVzIG9iamVjdCxcblx0Ly8gdGhlbiBmbGFnIGFsbCBcImNodW5rSWRzXCIgYXMgbG9hZGVkIGFuZCBmaXJlIGNhbGxiYWNrXG5cdHZhciBtb2R1bGVJZCwgY2h1bmtJZCwgaSA9IDA7XG5cdGlmKGNodW5rSWRzLnNvbWUoKGlkKSA9PiAoaW5zdGFsbGVkQ2h1bmtzW2lkXSAhPT0gMCkpKSB7XG5cdFx0Zm9yKG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG5cdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8obW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuXHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZihydW50aW1lKSB2YXIgcmVzdWx0ID0gcnVudGltZShfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblx0fVxuXHRpZihwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbikgcGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24oZGF0YSk7XG5cdGZvcig7aSA8IGNodW5rSWRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y2h1bmtJZCA9IGNodW5rSWRzW2ldO1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhpbnN0YWxsZWRDaHVua3MsIGNodW5rSWQpICYmIGluc3RhbGxlZENodW5rc1tjaHVua0lkXSkge1xuXHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdWzBdKCk7XG5cdFx0fVxuXHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9IDA7XG5cdH1cblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uTyhyZXN1bHQpO1xufVxuXG52YXIgY2h1bmtMb2FkaW5nR2xvYmFsID0gc2VsZltcIndlYnBhY2tDaHVua3JkZWNrXCJdID0gc2VsZltcIndlYnBhY2tDaHVua3JkZWNrXCJdIHx8IFtdO1xuY2h1bmtMb2FkaW5nR2xvYmFsLmZvckVhY2god2VicGFja0pzb25wQ2FsbGJhY2suYmluZChudWxsLCAwKSk7XG5jaHVua0xvYWRpbmdHbG9iYWwucHVzaCA9IHdlYnBhY2tKc29ucENhbGxiYWNrLmJpbmQobnVsbCwgY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2guYmluZChjaHVua0xvYWRpbmdHbG9iYWwpKTsiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGRlcGVuZHMgb24gb3RoZXIgbG9hZGVkIGNodW5rcyBhbmQgZXhlY3V0aW9uIG5lZWQgdG8gYmUgZGVsYXllZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLk8odW5kZWZpbmVkLCBbNDg2LDQ3NCw2MTksNTY4LDE3NSw2MjcsODExLDQyLDg5OSw2NjcsMzI0LDEzNCwxMzMsNDY4LDc0NSw1MzUsNTI4LDc4NCwzNzgsNjQ1LDM5NCw4MTYsNDg1LDY1MCw4NjksNjcsMTQsODA2LDI4Miw5NTMsNTM4LDQ5LDYzOSw4MjUsNTk2XSwgKCkgPT4gKF9fd2VicGFja19yZXF1aXJlX18oODk4MSkpKVxuX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18uTyhfX3dlYnBhY2tfZXhwb3J0c19fKTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiZGVmZXJyZWQiLCJsZWFmUHJvdG90eXBlcyIsImdldFByb3RvIiwiREVGQVVMVF9DT0xPUiIsInJnYmEiLCJyIiwiZyIsImIiLCJhIiwicGFyc2VDb2xvciIsImNvbG9yIiwidGFyZ2V0IiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidmFsdWUiLCJwYXJzZUludCIsInN1YnN0cmluZyIsIk1hdGgiLCJmbG9vciIsInBhcnNlSGV4Q29sb3IiLCJpc0FjY2Vzc29yIiwib2JqIiwidHlwZSIsImlzQWNjZXNzb3JTY2FsZSIsIkJMRU5ESU5HX01PREVTIiwiT2JqZWN0IiwiZnJlZXplIiwiYWRkaXRpdmUiLCJibGVuZEZ1bmMiLCJibGVuZEVxdWF0aW9uIiwic3VidHJhY3RpdmUiLCJub3JtYWwiLCJibGVuZGluZ1BhcmFtZXRlcnMiLCJtb2RlIiwiaXNEYXRhRnJhbWUiLCJkYXRhIiwiZmxhdHRlbiIsIm5hbWUiLCJvbGRGcmFtZSIsImZyYW1lIiwibmV3RnJhbWUiLCJmcm9tRW50cmllcyIsImVudHJpZXMiLCJtYXAiLCJrZXkiLCJrZXlzIiwiZmlsdGVyIiwiZ2VvbWV0cmllcyIsImlzTXVsdGlHZW9tZXRyeSIsImlzTXVsdGlQb2ludCIsImlzTXVsdGlMaW5lU3RyaW5nIiwiaXNNdWx0aVBvbHlnb24iLCJUeXBlRXJyb3IiLCJpc011bHRpR2VvbWV0cnlGbiIsImNvcHlWYWx1ZXMiLCJpbmRleCIsInB1c2giLCJpbmRpY2VzIiwiZ2VvbWV0cnkiLCJyZXAiLCJyZXBsYWNlIiwiTXVsdGlIaWdobGlnaHRFeHRlbnNpb24iLCJpbml0aWFsaXplU3RhdGUiLCJsYXllciIsIkxheWVycyIsInNvbWUiLCJMYXllciIsImlzUHJpbWl0aXZlTGF5ZXIiLCJ0aGlzIiwiYXR0cmlidXRlTWFuYWdlciIsImdldEF0dHJpYnV0ZU1hbmFnZXIiLCJhZGRJbnN0YW5jZWQiLCJwaWNraW5nQ29sb3JzIiwic2l6ZSIsImFjY2Vzc29yIiwib2JqZWN0IiwiZW5jb2RlUGlja2luZ0NvbG9yIiwiaW5kZXhPZiIsInBhcmVudERhdGEiLCJfX3NvdXJjZSIsInBhcmVudCIsInByb3BzIiwic2hhZGVyQXR0cmlidXRlcyIsImRpdmlzb3IiLCJpbnN0YW5jZVBpY2tpbmdDb2xvcnMiLCJwaWNrIiwiZ2V0Rmlyc3RWaXNpYmxlIiwiZWwiLCJjbGllbnRIZWlnaHQiLCJwYXJlbnRFbGVtZW50IiwiZ2V0RWxlbWVudERpbWVuc2lvbnMiLCJ2aXNpYmxlIiwiY2xpZW50V2lkdGgiLCJ3aWR0aCIsImhlaWdodCIsImdldENvbXB1dGVkU3R5bGUiLCJub2RlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYXNzaWduIiwic3R5bGUiLCJkaXNwbGF5IiwiYXBwZW5kQ2hpbGQiLCJkaW1zIiwicmVtb3ZlQ2hpbGQiLCJncm91cEJ5IiwibGlzdCIsIk1hcCIsIml0ZW0iLCJpdGVtS2V5IiwiaGFzIiwiZ2V0Iiwic2V0IiwiY2xhc3NOYW1lcyIsIngiLCJqb2luIiwiZGVib3VuY2UiLCJmbiIsIndhaXQiLCJ0aW1lb3V0IiwiYXJncyIsIndpbmRvdyIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJNYXBDYWNoZSIsIl92YWwiLCJfcmVmIiwiV2Vha01hcCIsImdldFN0b3JlIiwibWVtb2l6ZSIsImFyZzAiLCJjYWNoZSIsInNsaWNlIiwicmVkdWNlUmlnaHQiLCJhcmciLCJjaGlsZCIsIm11bHRpR2VvbWV0cmllcyIsInRlc3QiLCJnZXRNdWx0aUdlb21ldHJ5IiwicmVkdWNlIiwiZ2V0RGF0YSIsImNvbCIsImRhdGFUeXBlIiwidGFibGVIaWdobGlnaHQiLCJvYmplY3RIaWdobGlnaHQiLCJwcm9wZXJ0aWVzIiwiZ2VvanNvbkhpZ2hsaWdodCIsImVuZHNXaXRoIiwiXyIsInRhYmxlQ29sb3IiLCJvYmplY3RDb2xvciIsImdlb2pzb25Db2xvciIsInRhYmxlRGF0YSIsIm9iamVjdERhdGEiLCJnZW9qc29uRGF0YSIsImFjY2Vzc29yRm4iLCJyYW5nZSIsInBhbGV0dGUiLCJ1bmtub3duIiwic2NhbGVEYXRhIiwic2NhbGUiLCJkb21haW4iLCJjbGFtcCIsImV4cG9uZW50IiwiYmFzZSIsInNjYWxlRm4iLCJoaWdobGlnaHRGbiIsImNvbnN0cnVjdG9yIiwiY29sb3JzIiwiaXNDb2xvciIsImNvbG9yUmFuZ2UiLCJmaW5kIiwiZ2V0Q29sb3JzIiwiYWNjZXNzb3JzIiwiZ2V0QWNjZXNzb3JzIiwiX3Byb3BzIiwiZ2V0V2VpZ2h0UHJvcHMiLCJnZXRVcGRhdGVUcmlnZ2VycyIsInBhcmFtZXRlcnMiLCJibGVuZGluZ01vZGUiLCJleHRlbnNpb25zIiwicmVuZGVyU3ViTGF5ZXJzIiwiYmJveCIsIndlc3QiLCJzb3V0aCIsImVhc3QiLCJub3J0aCIsInkiLCJ6IiwidGlsZSIsImltYWdlIiwiYm91bmRzIiwic2NhbGVzIiwiZm9udHMiLCJsb2FkIiwiZm9udEZhbWlseSIsInN0YXRpYyIsInJlbmRlckxheWVyIiwidGltZSIsInVuZGVmaW5lZCIsImxvb3BMZW5ndGgiLCJhbmltYXRpb25TcGVlZCIsImFuaW1hdGlvblRpbWUiLCJyYXRpb0NvbXBsZXRlIiwiY3VycmVudFRpbWUiLCJyZW5kZXJMZWdlbmQiLCJsZWdlbmQiLCJpZCIsInJlbmRlclNlbGVjdG9yIiwiZ3JvdXBOYW1lIiwic2NhbGVQcm9wcyIsInByb3BUcmlnZ2VycyIsIkZFQVRVUkVfSUQiLCJnZXRQaWNrZWRPYmplY3QiLCJpbmZvIiwicGlja2VkIiwiaXNHZW9qc29uIiwiZ2V0RGF0YVR5cGUiLCJnZW9tcyIsImluY2x1ZGVzIiwiVG9vbHRpcCIsInRvb2x0aXAiLCJuYW1lcyIsImNvbHMiLCJjbGFzc05hbWUiLCJ0cmFuc2Zvcm0iLCJTdHJpbmciLCJsYXllcnMiLCJkZWNrZ2wiLCJ1c2VSZWYiLCJoYW5kbGVIb3ZlciIsInVzZUhvdmVyIiwibWFwYm94QWNjZXNzVG9rZW4iLCJtYXBTdHlsZSIsImNvbnRyb2xsZXIiLCJkZWNrUHJvcHMiLCJfcGFyYW1ldGVycyIsInNldFRpbWUiLCJ1c2VTdGF0ZSIsImFuaW1hdGluZyIsInVzZUFuaW1hdGlvbiIsIl9sYXllcnMiLCJGcmFnbWVudCIsInJlZiIsIm9uSG92ZXIiLCJyZXBlYXQiLCJyZXVzZU1hcHMiLCJzdGF0ZSIsInNldFN0YXRlIiwidXNlQ2FsbGJhY2siLCJlbmFibGVkIiwib25GcmFtZSIsImFuaW1hdGlvbiIsInN0YXJ0VGltZSIsIkRhdGUiLCJub3ciLCJhbmltYXRlIiwiY3VycmVudCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInVzZUVmZmVjdCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiVElDS19IRUlHSFQiLCJMZWdlbmQiLCJ0aXRsZSIsIlNjYWxlIiwic2NhbGVOYW1lIiwidG9Mb3dlckNhc2UiLCJpc0NvbnRpbnVvdXMiLCJpc0NvbnRpbnVvdXNTY2FsZSIsImlzRGlzY3JldGUiLCJpc0Rpc2NyZXRlU2NhbGUiLCJzY2FsZUJ5IiwiQ29udGludW91cyIsIkRpc2NyZXRlIiwiQ2F0ZWdvcnkiLCJ0aWNrcyIsImxpbmVzIiwiZ3JhZGllbnRIZWlnaHQiLCJzaGFwZVJlbmRlcmluZyIsImhyZWYiLCJnZXRDb2xvckdyYWRpZW50IiwicHJlc2VydmVBc3BlY3RSYXRpbyIsIngyIiwieTEiLCJ5MiIsIlRpY2tzIiwiZmlsbCIsInVua25vd25UaWNrIiwiX3JhbmdlIiwiX3RpY2tzIiwidGljayIsImR5IiwibiIsImludmVydCIsImNvcHkiLCJjYW52YXMiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsImkiLCJmaWxsU3R5bGUiLCJmaWxsUmVjdCIsInRvRGF0YVVSTCIsIk5PX0dST1VQIiwiVG9nZ2xlQnV0dG9uIiwib25DbGljayIsImNoaWxkcmVuIiwiTGF5ZXJTZWxlY3RvciIsIm9uVmlzaWJpbGl0eUNoYW5nZSIsImdyb3VwcyIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJjaGFuZ2VkIiwiZm9jdXMiLCJub25Gb2N1cyIsImlzT3BlbiIsInNldElzT3BlbiIsImhhbmRsZU9wZW5DaGFuZ2UiLCJmb250U2l6ZSIsImZyb20iLCJncm91cCIsIkNoZWNrYm94R3JvdXAiLCJvbkNoYW5nZSIsImNoZWNrYm94ZXMiLCJDaGVja2JveCIsImNoZWNrZWQiLCJpc1Zpc2libGUiLCJpbmRldGVybWluYXRlIiwiaW5wdXRSZWYiLCJjYW5jZWwiLCJDaGVja0JveEljb24iLCJDaGVja0JveCIsIkluZGV0ZXJtaW5hdGVDaGVja0JveCIsIkNoZWNrQm94T3V0bGluZUJsYW5rIiwiY2xhc3NlcyIsImRlbGF5Iiwib25UaW1lb3V0IiwicmFmIiwibG9vcCIsInRpbWVzdGFtcCIsImdsb2JhbFRoaXMiLCJBcHAiLCJ0aGVtZSIsImxhenlMb2FkIiwibGF5ZXJTZWxlY3RvciIsIm9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwiaW5pdGlhbEJvdW5kcyIsImluaXRpYWxWaWV3U3RhdGUiLCJkZWNrZ2xQcm9wcyIsIl9pbml0aWFsVmlld1N0YXRlIiwidXNlTWVtbyIsInhtaW4iLCJ5bWluIiwieG1heCIsInltYXgiLCJtYXgiLCJtaW4iLCJ2aWV3cG9ydCIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiem9vbSIsImZpdEJvdW5kcyIsInVzZUJvdW5kcyIsImNyZWF0ZSIsImNvbnRhaW5lciIsImluVmlld3BvcnQiLCJvYnNlcnZlciIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiaXNJbnRlcnNlY3RpbmciLCJ0aHJlc2hvbGQiLCJvYnNlcnZlIiwiZGlzY29ubmVjdCIsInVzZUluVmlld3BvcnQiLCJzaG91bGRSZW5kZXIiLCJ2aXNpYmlsaXR5VG9nZ2xlIiwicmV2ZXJzZSIsImdldFZpZXdTdGF0ZSIsInZpZXdTdGF0ZSIsImdldEJvdW5kcyIsImNlbnRlciIsInVucHJvamVjdEZsYXQiLCJiaW5kaW5nIiwiV2lkZ2V0IiwiYmluZCIsIm9uVmlld1N0YXRlQ2hhbmdlIiwiSFRNTFdpZGdldHMiLCJzaGlueU1vZGUiLCJkZWJvdW5jZWRSZW5kZXIiLCJyZW5kZXJWYWx1ZSIsIlNoaW55IiwiYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIiLCJfbGF5ZXIiLCJtZXJnZWQiLCJzZXRMYXllclZpc2liaWxpdHkiLCJyZXNpemUiLCJsYXllclZpc2libGl0eSIsIm5hbWVFcXVhbCIsImdyb3VwRXF1YWwiLCJpc01hdGNoIiwiY29vcmRpbmF0ZSIsInNldElucHV0VmFsdWUiLCJwcmlvcml0eSIsImdldFdpZGdldEJ5SWQiLCJlbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJodG1sd2lkZ2V0X2RhdGFfaW5pdF9yZXN1bHQiLCJnZXRXaWRnZXRzIiwicXVlcnlTZWxlY3RvckFsbCIsIndpZGdldCIsIlZFUlNJT04iLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiY2FsbCIsIm0iLCJPIiwicmVzdWx0IiwiY2h1bmtJZHMiLCJub3RGdWxmaWxsZWQiLCJJbmZpbml0eSIsImZ1bGZpbGxlZCIsImoiLCJldmVyeSIsInNwbGljZSIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ0IiwidGhlbiIsIm5zIiwiZGVmIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZvckVhY2giLCJkZWZpbml0aW9uIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsIkZ1bmN0aW9uIiwiZSIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwiaW5zdGFsbGVkQ2h1bmtzIiwiY2h1bmtJZCIsIndlYnBhY2tKc29ucENhbGxiYWNrIiwicGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24iLCJtb3JlTW9kdWxlcyIsInJ1bnRpbWUiLCJjaHVua0xvYWRpbmdHbG9iYWwiLCJfX3dlYnBhY2tfZXhwb3J0c19fIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/inst/htmlwidgets/vendor/probe.gl.js b/inst/htmlwidgets/vendor/probe.gl.js index 26777685..e89cbb95 100644 --- a/inst/htmlwidgets/vendor/probe.gl.js +++ b/inst/htmlwidgets/vendor/probe.gl.js @@ -1 +1 @@ -"use strict";(self.webpackChunkrdeck=self.webpackChunkrdeck||[]).push([[899],{3485:(t,e,s)=>{s.d(e,{Z:()=>r});var i=s(3370),n=s(2363);const o=globalThis;function r(t){if(!t&&!(0,i.Z)())return"Node";if((0,n.Z)(t))return"Electron";const e="undefined"!=typeof navigator?navigator:{},s=t||e.userAgent||"";if(s.indexOf("Edge")>-1)return"Edge";const r=-1!==s.indexOf("MSIE "),a=-1!==s.indexOf("Trident/");return r||a?"IE":o.chrome?"Chrome":o.safari?"Safari":o.mozInnerScreenX?"Firefox":"Unknown"}},100:(t,e,s)=>{s.d(e,{CO:()=>n,N4:()=>r,u9:()=>o});const i={self:"undefined"!=typeof self&&self,window:"undefined"!=typeof window&&window,global:void 0!==s.g&&s.g,document:"undefined"!=typeof document&&document,process:"object"==typeof process&&process},n=globalThis,o=i.window||i.self||i.global,r=i.process||{};console},3370:(t,e,s)=>{s.d(e,{Z:()=>n});var i=s(2363);function n(){return!("object"==typeof process&&"[object process]"===String(process)&&!process.browser)||(0,i.Z)()}},2363:(t,e,s)=>{function i(t){if("undefined"!=typeof window&&"object"==typeof window.process&&"renderer"===window.process.type)return!0;if("undefined"!=typeof process&&"object"==typeof process.versions&&Boolean(process.versions.electron))return!0;const e="object"==typeof navigator&&"string"==typeof navigator.userAgent&&navigator.userAgent,s=t||e;return!!(s&&s.indexOf("Electron")>=0)}s.d(e,{Z:()=>i})},6989:(t,e,s)=>{s.d(e,{Z:()=>v});var i=s(4942),n=s(3370);const o="0.4.0-dev";(0,n.Z)();class r{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"sessionStorage";(0,i.Z)(this,"storage",void 0),(0,i.Z)(this,"id",void 0),(0,i.Z)(this,"config",{}),this.storage=function(t){try{const e=window[t],s="__storage_test__";return e.setItem(s,s),e.removeItem(s),e}catch(t){return null}}(s),this.id=t,this.config={},Object.assign(this.config,e),this._loadConfiguration()}getConfiguration(){return this.config}setConfiguration(t){return this.config={},this.updateConfiguration(t)}updateConfiguration(t){if(Object.assign(this.config,t),this.storage){const t=JSON.stringify(this.config);this.storage.setItem(this.id,t)}return this}_loadConfiguration(){let t={};if(this.storage){const e=this.storage.getItem(this.id);t=e?JSON.parse(e):{}}return Object.assign(this.config,t),this}}function a(t,e,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:600;const n=t.src.replace(/\(/g,"%28").replace(/\)/g,"%29");t.width>i&&(s=Math.min(s,i/t.width));const o=t.width*s,r=t.height*s,a=["font-size:1px;","padding:".concat(Math.floor(r/2),"px ").concat(Math.floor(o/2),"px;"),"line-height:".concat(r,"px;"),"background:url(".concat(n,");"),"background-size:".concat(o,"px ").concat(r,"px;"),"color:transparent;"].join("");return["".concat(e," %c+"),a]}let c;function l(t){return"string"==typeof t?c[t.toUpperCase()]||c.WHITE:t}function h(t,e){if(!t)throw new Error(e||"Assertion failed")}!function(t){t[t.BLACK=30]="BLACK",t[t.RED=31]="RED",t[t.GREEN=32]="GREEN",t[t.YELLOW=33]="YELLOW",t[t.BLUE=34]="BLUE",t[t.MAGENTA=35]="MAGENTA",t[t.CYAN=36]="CYAN",t[t.WHITE=37]="WHITE",t[t.BRIGHT_BLACK=90]="BRIGHT_BLACK",t[t.BRIGHT_RED=91]="BRIGHT_RED",t[t.BRIGHT_GREEN=92]="BRIGHT_GREEN",t[t.BRIGHT_YELLOW=93]="BRIGHT_YELLOW",t[t.BRIGHT_BLUE=94]="BRIGHT_BLUE",t[t.BRIGHT_MAGENTA=95]="BRIGHT_MAGENTA",t[t.BRIGHT_CYAN=96]="BRIGHT_CYAN",t[t.BRIGHT_WHITE=97]="BRIGHT_WHITE"}(c||(c={}));var g=s(100);function u(){let t;if(n.Z){var e,s;t=null===g.u9||void 0===g.u9||null===(e=g.u9.performance)||void 0===e||null===(s=e.now)||void 0===s?void 0:s.call(e)}else{{var i;const e=null===g.N4||void 0===g.N4||null===(i=g.N4.hrtime)||void 0===i?void 0:i.call(g.N4);t=1e3*e[0]+e[1]/1e6}}return t}const d={debug:n.Z&&console.debug||console.log,log:console.log,info:console.info,warn:console.warn,error:console.error},m={enabled:!0,level:0};function f(){}const p={},_={once:!0};class v{constructor(){let{id:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{id:""};(0,i.Z)(this,"id",void 0),(0,i.Z)(this,"VERSION",o),(0,i.Z)(this,"_startTs",u()),(0,i.Z)(this,"_deltaTs",u()),(0,i.Z)(this,"_storage",void 0),(0,i.Z)(this,"userData",{}),(0,i.Z)(this,"LOG_THROTTLE_TIMEOUT",0),this.id=t,this._storage=new r("__probe-".concat(this.id,"__"),m),this.userData={},this.timeStamp("".concat(this.id," started")),function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:["constructor"];const s=Object.getPrototypeOf(t),i=Object.getOwnPropertyNames(s);for(const s of i)"function"==typeof t[s]&&(e.find((t=>s===t))||(t[s]=t[s].bind(t)))}(this),Object.seal(this)}set level(t){this.setLevel(t)}get level(){return this.getLevel()}isEnabled(){return this._storage.config.enabled}getLevel(){return this._storage.config.level}getTotal(){return Number((u()-this._startTs).toPrecision(10))}getDelta(){return Number((u()-this._deltaTs).toPrecision(10))}set priority(t){this.level=t}get priority(){return this.level}getPriority(){return this.level}enable(){let t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._storage.updateConfiguration({enabled:t}),this}setLevel(t){return this._storage.updateConfiguration({level:t}),this}get(t){return this._storage.config[t]}set(t,e){this._storage.updateConfiguration({[t]:e})}settings(){console.table?console.table(this._storage.config):console.log(this._storage.config)}assert(t,e){h(t,e)}warn(t){return this._getLogFunction(0,t,d.warn,arguments,_)}error(t){return this._getLogFunction(0,t,d.error,arguments)}deprecated(t,e){return this.warn("`".concat(t,"` is deprecated and will be removed in a later version. Use `").concat(e,"` instead"))}removed(t,e){return this.error("`".concat(t,"` has been removed. Use `").concat(e,"` instead"))}probe(t,e){return this._getLogFunction(t,e,d.log,arguments,{time:!0,once:!0})}log(t,e){return this._getLogFunction(t,e,d.debug,arguments)}info(t,e){return this._getLogFunction(t,e,console.info,arguments)}once(t,e){for(var s=arguments.length,i=new Array(s>2?s-2:0),n=2;n{const e=a(t,s,i);console.log(...e)},t.src=e,f}const n=e.nodeName||"";if("img"===n.toLowerCase())return console.log(...a(e,s,i)),f;if("canvas"===n.toLowerCase()){const t=new Image;return t.onload=()=>console.log(...a(t,s,i)),t.src=e.toDataURL(),f}return f}({image:o,message:r,scale:c}):function(t){let{image:e,message:i="",scale:n=1}=t,o=null;try{o=s(9214)}catch(t){}if(o)return()=>o(e,{fit:"box",width:"".concat(Math.round(80*n),"%")}).then((t=>console.log(t)));return f}({image:o,message:r,scale:c}):f}time(t,e){return this._getLogFunction(t,e,console.time?console.time:console.info)}timeEnd(t,e){return this._getLogFunction(t,e,console.timeEnd?console.timeEnd:console.info)}timeStamp(t,e){return this._getLogFunction(t,e,console.timeStamp||f)}group(t,e){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{collapsed:!1};const i=T({logLevel:t,message:e,opts:s}),{collapsed:n}=s;return i.method=(n?console.groupCollapsed:console.group)||console.info,this._getLogFunction(i)}groupCollapsed(t,e){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.group(t,e,Object.assign({},s,{collapsed:!0}))}groupEnd(t){return this._getLogFunction(t,"",console.groupEnd||f)}withGroup(t,e,s){this.group(t,e)();try{s()}finally{this.groupEnd(t)()}}trace(){console.trace&&console.trace()}_shouldLog(t){return this.isEnabled()&&this.getLevel()>=b(t)}_getLogFunction(t,e,s,i,o){if(this._shouldLog(t)){o=T({logLevel:t,message:e,args:i,opts:o}),h(s=s||o.method),o.total=this.getTotal(),o.delta=this.getDelta(),this._deltaTs=u();const r=o.tag||o.message;if(o.once){if(p[r])return f;p[r]=u()}return e=function(t,e,s){if("string"==typeof e){const a=s.time?function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:8;const s=Math.max(e-t.length,0);return"".concat(" ".repeat(s)).concat(t)}(function(t){let e;return e=t<10?"".concat(t.toFixed(2),"ms"):t<100?"".concat(t.toFixed(1),"ms"):t<1e3?"".concat(t.toFixed(0),"ms"):"".concat((t/1e3).toFixed(2),"s"),e}(s.total)):"";e=s.time?"".concat(t,": ").concat(a," ").concat(e):"".concat(t,": ").concat(e),i=e,o=s.color,r=s.background,n.Z||"string"!=typeof i||(o&&(o=l(o),i="[".concat(o,"m").concat(i,"")),r&&(o=l(r),i="[".concat(r+10,"m").concat(i,""))),e=i}var i,o,r;return e}(this.id,o.message,o),s.bind(console,e,...o.args)}return f}}function b(t){if(!t)return 0;let e;switch(typeof t){case"number":e=t;break;case"object":e=t.logLevel||t.priority||0;break;default:return 0}return h(Number.isFinite(e)&&e>=0),e}function T(t){const{logLevel:e,message:s}=t;t.logLevel=b(e);const i=t.args?Array.from(t.args):[];for(;i.length&&i.shift()!==s;);switch(typeof e){case"string":case"function":void 0!==s&&i.unshift(s),t.message=e;break;case"object":Object.assign(t,e)}"function"==typeof t.message&&(t.message=t.message());const n=typeof t.message;return h("string"===n||"object"===n),Object.assign(t,{args:i},t.opts)}function w(t){for(const e in t)for(const s in t[e])return s||"untitled";return"empty"}(0,i.Z)(v,"VERSION",o)},8295:(t,e,s)=>{s.d(e,{Z:()=>r});var i=s(4942);function n(){let t;if("undefined"!=typeof window&&window.performance)t=window.performance.now();else if("undefined"!=typeof process&&process.hrtime){const e=process.hrtime();t=1e3*e[0]+e[1]/1e6}else t=Date.now();return t}class o{constructor(t,e){(0,i.Z)(this,"name",void 0),(0,i.Z)(this,"type",void 0),(0,i.Z)(this,"sampleSize",1),(0,i.Z)(this,"time",void 0),(0,i.Z)(this,"count",void 0),(0,i.Z)(this,"samples",void 0),(0,i.Z)(this,"lastTiming",void 0),(0,i.Z)(this,"lastSampleTime",void 0),(0,i.Z)(this,"lastSampleCount",void 0),(0,i.Z)(this,"_count",0),(0,i.Z)(this,"_time",0),(0,i.Z)(this,"_samples",0),(0,i.Z)(this,"_startTime",0),(0,i.Z)(this,"_timerPending",!1),this.name=t,this.type=e,this.reset()}setSampleSize(t){return this.sampleSize=t,this}incrementCount(){return this.addCount(1),this}decrementCount(){return this.subtractCount(1),this}addCount(t){return this._count+=t,this._samples++,this._checkSampling(),this}subtractCount(t){return this._count-=t,this._samples++,this._checkSampling(),this}addTime(t){return this._time+=t,this.lastTiming=t,this._samples++,this._checkSampling(),this}timeStart(){return this._startTime=n(),this._timerPending=!0,this}timeEnd(){return this._timerPending?(this.addTime(n()-this._startTime),this._timerPending=!1,this._checkSampling(),this):this}getSampleAverageCount(){return this.sampleSize>0?this.lastSampleCount/this.sampleSize:0}getSampleAverageTime(){return this.sampleSize>0?this.lastSampleTime/this.sampleSize:0}getSampleHz(){return this.lastSampleTime>0?this.sampleSize/(this.lastSampleTime/1e3):0}getAverageCount(){return this.samples>0?this.count/this.samples:0}getAverageTime(){return this.samples>0?this.time/this.samples:0}getHz(){return this.time>0?this.samples/(this.time/1e3):0}reset(){return this.time=0,this.count=0,this.samples=0,this.lastTiming=0,this.lastSampleTime=0,this.lastSampleCount=0,this._count=0,this._time=0,this._samples=0,this._startTime=0,this._timerPending=!1,this}_checkSampling(){this._samples===this.sampleSize&&(this.lastSampleTime=this._time,this.lastSampleCount=this._count,this.count+=this._count,this.time+=this._time,this.samples+=this._samples,this._time=0,this._count=0,this._samples=0)}}class r{constructor(t){(0,i.Z)(this,"id",void 0),(0,i.Z)(this,"stats",{}),this.id=t.id,this.stats={},this._initializeStats(t.stats),Object.seal(this)}get(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"count";return this._getOrCreate({name:t,type:e})}get size(){return Object.keys(this.stats).length}reset(){for(const t in this.stats)this.stats[t].reset();return this}forEach(t){for(const e in this.stats)t(this.stats[e])}getTable(){const t={};return this.forEach((e=>{t[e.name]={time:e.time||0,count:e.count||0,average:e.getAverageTime()||0,hz:e.getHz()||0}})),t}_initializeStats(){(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).forEach((t=>this._getOrCreate(t)))}_getOrCreate(t){if(!t||!t.name)return null;const{name:e,type:s}=t;return this.stats[e]||(this.stats[e]=t instanceof o?t:new o(e,s)),this.stats[e]}}}}]); \ No newline at end of file +"use strict";(self.webpackChunkrdeck=self.webpackChunkrdeck||[]).push([[899],{3485:(t,e,s)=>{s.d(e,{Z:()=>r});var i=s(3370),n=s(2363);const o=globalThis;function r(t){if(!t&&!(0,i.Z)())return"Node";if((0,n.Z)(t))return"Electron";const e="undefined"!=typeof navigator?navigator:{},s=t||e.userAgent||"";if(s.indexOf("Edge")>-1)return"Edge";const r=-1!==s.indexOf("MSIE "),a=-1!==s.indexOf("Trident/");return r||a?"IE":o.chrome?"Chrome":o.safari?"Safari":o.mozInnerScreenX?"Firefox":"Unknown"}},100:(t,e,s)=>{s.d(e,{CO:()=>n,N4:()=>r,u9:()=>o});const i={self:"undefined"!=typeof self&&self,window:"undefined"!=typeof window&&window,global:void 0!==s.g&&s.g,document:"undefined"!=typeof document&&document,process:"object"==typeof process&&process},n=globalThis,o=i.window||i.self||i.global,r=i.process||{};console},3370:(t,e,s)=>{s.d(e,{Z:()=>n});var i=s(2363);function n(){return!("object"==typeof process&&"[object process]"===String(process)&&!process.browser)||(0,i.Z)()}},2363:(t,e,s)=>{function i(t){if("undefined"!=typeof window&&"object"==typeof window.process&&"renderer"===window.process.type)return!0;if("undefined"!=typeof process&&"object"==typeof process.versions&&Boolean(process.versions.electron))return!0;const e="object"==typeof navigator&&"string"==typeof navigator.userAgent&&navigator.userAgent,s=t||e;return!!(s&&s.indexOf("Electron")>=0)}s.d(e,{Z:()=>i})},6989:(t,e,s)=>{s.d(e,{Z:()=>v});var i=s(4942),n=s(3370);const o="0.4.0";(0,n.Z)();class r{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"sessionStorage";(0,i.Z)(this,"storage",void 0),(0,i.Z)(this,"id",void 0),(0,i.Z)(this,"config",{}),this.storage=function(t){try{const e=window[t],s="__storage_test__";return e.setItem(s,s),e.removeItem(s),e}catch(t){return null}}(s),this.id=t,this.config={},Object.assign(this.config,e),this._loadConfiguration()}getConfiguration(){return this.config}setConfiguration(t){return this.config={},this.updateConfiguration(t)}updateConfiguration(t){if(Object.assign(this.config,t),this.storage){const t=JSON.stringify(this.config);this.storage.setItem(this.id,t)}return this}_loadConfiguration(){let t={};if(this.storage){const e=this.storage.getItem(this.id);t=e?JSON.parse(e):{}}return Object.assign(this.config,t),this}}function a(t,e,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:600;const n=t.src.replace(/\(/g,"%28").replace(/\)/g,"%29");t.width>i&&(s=Math.min(s,i/t.width));const o=t.width*s,r=t.height*s,a=["font-size:1px;","padding:".concat(Math.floor(r/2),"px ").concat(Math.floor(o/2),"px;"),"line-height:".concat(r,"px;"),"background:url(".concat(n,");"),"background-size:".concat(o,"px ").concat(r,"px;"),"color:transparent;"].join("");return["".concat(e," %c+"),a]}let c;function l(t){return"string"==typeof t?c[t.toUpperCase()]||c.WHITE:t}function h(t,e){if(!t)throw new Error(e||"Assertion failed")}!function(t){t[t.BLACK=30]="BLACK",t[t.RED=31]="RED",t[t.GREEN=32]="GREEN",t[t.YELLOW=33]="YELLOW",t[t.BLUE=34]="BLUE",t[t.MAGENTA=35]="MAGENTA",t[t.CYAN=36]="CYAN",t[t.WHITE=37]="WHITE",t[t.BRIGHT_BLACK=90]="BRIGHT_BLACK",t[t.BRIGHT_RED=91]="BRIGHT_RED",t[t.BRIGHT_GREEN=92]="BRIGHT_GREEN",t[t.BRIGHT_YELLOW=93]="BRIGHT_YELLOW",t[t.BRIGHT_BLUE=94]="BRIGHT_BLUE",t[t.BRIGHT_MAGENTA=95]="BRIGHT_MAGENTA",t[t.BRIGHT_CYAN=96]="BRIGHT_CYAN",t[t.BRIGHT_WHITE=97]="BRIGHT_WHITE"}(c||(c={}));var g=s(100);function u(){let t;if(n.Z){var e,s;t=null===g.u9||void 0===g.u9||null===(e=g.u9.performance)||void 0===e||null===(s=e.now)||void 0===s?void 0:s.call(e)}else{{var i;const e=null===g.N4||void 0===g.N4||null===(i=g.N4.hrtime)||void 0===i?void 0:i.call(g.N4);t=1e3*e[0]+e[1]/1e6}}return t}const d={debug:n.Z&&console.debug||console.log,log:console.log,info:console.info,warn:console.warn,error:console.error},m={enabled:!0,level:0};function f(){}const p={},_={once:!0};class v{constructor(){let{id:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{id:""};(0,i.Z)(this,"id",void 0),(0,i.Z)(this,"VERSION",o),(0,i.Z)(this,"_startTs",u()),(0,i.Z)(this,"_deltaTs",u()),(0,i.Z)(this,"_storage",void 0),(0,i.Z)(this,"userData",{}),(0,i.Z)(this,"LOG_THROTTLE_TIMEOUT",0),this.id=t,this._storage=new r("__probe-".concat(this.id,"__"),m),this.userData={},this.timeStamp("".concat(this.id," started")),function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:["constructor"];const s=Object.getPrototypeOf(t),i=Object.getOwnPropertyNames(s);for(const s of i)"function"==typeof t[s]&&(e.find((t=>s===t))||(t[s]=t[s].bind(t)))}(this),Object.seal(this)}set level(t){this.setLevel(t)}get level(){return this.getLevel()}isEnabled(){return this._storage.config.enabled}getLevel(){return this._storage.config.level}getTotal(){return Number((u()-this._startTs).toPrecision(10))}getDelta(){return Number((u()-this._deltaTs).toPrecision(10))}set priority(t){this.level=t}get priority(){return this.level}getPriority(){return this.level}enable(){let t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._storage.updateConfiguration({enabled:t}),this}setLevel(t){return this._storage.updateConfiguration({level:t}),this}get(t){return this._storage.config[t]}set(t,e){this._storage.updateConfiguration({[t]:e})}settings(){console.table?console.table(this._storage.config):console.log(this._storage.config)}assert(t,e){h(t,e)}warn(t){return this._getLogFunction(0,t,d.warn,arguments,_)}error(t){return this._getLogFunction(0,t,d.error,arguments)}deprecated(t,e){return this.warn("`".concat(t,"` is deprecated and will be removed in a later version. Use `").concat(e,"` instead"))}removed(t,e){return this.error("`".concat(t,"` has been removed. Use `").concat(e,"` instead"))}probe(t,e){return this._getLogFunction(t,e,d.log,arguments,{time:!0,once:!0})}log(t,e){return this._getLogFunction(t,e,d.debug,arguments)}info(t,e){return this._getLogFunction(t,e,console.info,arguments)}once(t,e){for(var s=arguments.length,i=new Array(s>2?s-2:0),n=2;n{const e=a(t,s,i);console.log(...e)},t.src=e,f}const n=e.nodeName||"";if("img"===n.toLowerCase())return console.log(...a(e,s,i)),f;if("canvas"===n.toLowerCase()){const t=new Image;return t.onload=()=>console.log(...a(t,s,i)),t.src=e.toDataURL(),f}return f}({image:o,message:r,scale:c}):function(t){let{image:e,message:i="",scale:n=1}=t,o=null;try{o=s(9214)}catch(t){}if(o)return()=>o(e,{fit:"box",width:"".concat(Math.round(80*n),"%")}).then((t=>console.log(t)));return f}({image:o,message:r,scale:c}):f}time(t,e){return this._getLogFunction(t,e,console.time?console.time:console.info)}timeEnd(t,e){return this._getLogFunction(t,e,console.timeEnd?console.timeEnd:console.info)}timeStamp(t,e){return this._getLogFunction(t,e,console.timeStamp||f)}group(t,e){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{collapsed:!1};const i=T({logLevel:t,message:e,opts:s}),{collapsed:n}=s;return i.method=(n?console.groupCollapsed:console.group)||console.info,this._getLogFunction(i)}groupCollapsed(t,e){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.group(t,e,Object.assign({},s,{collapsed:!0}))}groupEnd(t){return this._getLogFunction(t,"",console.groupEnd||f)}withGroup(t,e,s){this.group(t,e)();try{s()}finally{this.groupEnd(t)()}}trace(){console.trace&&console.trace()}_shouldLog(t){return this.isEnabled()&&this.getLevel()>=b(t)}_getLogFunction(t,e,s,i,o){if(this._shouldLog(t)){o=T({logLevel:t,message:e,args:i,opts:o}),h(s=s||o.method),o.total=this.getTotal(),o.delta=this.getDelta(),this._deltaTs=u();const r=o.tag||o.message;if(o.once){if(p[r])return f;p[r]=u()}return e=function(t,e,s){if("string"==typeof e){const a=s.time?function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:8;const s=Math.max(e-t.length,0);return"".concat(" ".repeat(s)).concat(t)}(function(t){let e;return e=t<10?"".concat(t.toFixed(2),"ms"):t<100?"".concat(t.toFixed(1),"ms"):t<1e3?"".concat(t.toFixed(0),"ms"):"".concat((t/1e3).toFixed(2),"s"),e}(s.total)):"";e=s.time?"".concat(t,": ").concat(a," ").concat(e):"".concat(t,": ").concat(e),i=e,o=s.color,r=s.background,n.Z||"string"!=typeof i||(o&&(o=l(o),i="[".concat(o,"m").concat(i,"")),r&&(o=l(r),i="[".concat(r+10,"m").concat(i,""))),e=i}var i,o,r;return e}(this.id,o.message,o),s.bind(console,e,...o.args)}return f}}function b(t){if(!t)return 0;let e;switch(typeof t){case"number":e=t;break;case"object":e=t.logLevel||t.priority||0;break;default:return 0}return h(Number.isFinite(e)&&e>=0),e}function T(t){const{logLevel:e,message:s}=t;t.logLevel=b(e);const i=t.args?Array.from(t.args):[];for(;i.length&&i.shift()!==s;);switch(typeof e){case"string":case"function":void 0!==s&&i.unshift(s),t.message=e;break;case"object":Object.assign(t,e)}"function"==typeof t.message&&(t.message=t.message());const n=typeof t.message;return h("string"===n||"object"===n),Object.assign(t,{args:i},t.opts)}function w(t){for(const e in t)for(const s in t[e])return s||"untitled";return"empty"}(0,i.Z)(v,"VERSION",o)},8295:(t,e,s)=>{s.d(e,{Z:()=>r});var i=s(4942);function n(){let t;if("undefined"!=typeof window&&window.performance)t=window.performance.now();else if("undefined"!=typeof process&&process.hrtime){const e=process.hrtime();t=1e3*e[0]+e[1]/1e6}else t=Date.now();return t}class o{constructor(t,e){(0,i.Z)(this,"name",void 0),(0,i.Z)(this,"type",void 0),(0,i.Z)(this,"sampleSize",1),(0,i.Z)(this,"time",void 0),(0,i.Z)(this,"count",void 0),(0,i.Z)(this,"samples",void 0),(0,i.Z)(this,"lastTiming",void 0),(0,i.Z)(this,"lastSampleTime",void 0),(0,i.Z)(this,"lastSampleCount",void 0),(0,i.Z)(this,"_count",0),(0,i.Z)(this,"_time",0),(0,i.Z)(this,"_samples",0),(0,i.Z)(this,"_startTime",0),(0,i.Z)(this,"_timerPending",!1),this.name=t,this.type=e,this.reset()}setSampleSize(t){return this.sampleSize=t,this}incrementCount(){return this.addCount(1),this}decrementCount(){return this.subtractCount(1),this}addCount(t){return this._count+=t,this._samples++,this._checkSampling(),this}subtractCount(t){return this._count-=t,this._samples++,this._checkSampling(),this}addTime(t){return this._time+=t,this.lastTiming=t,this._samples++,this._checkSampling(),this}timeStart(){return this._startTime=n(),this._timerPending=!0,this}timeEnd(){return this._timerPending?(this.addTime(n()-this._startTime),this._timerPending=!1,this._checkSampling(),this):this}getSampleAverageCount(){return this.sampleSize>0?this.lastSampleCount/this.sampleSize:0}getSampleAverageTime(){return this.sampleSize>0?this.lastSampleTime/this.sampleSize:0}getSampleHz(){return this.lastSampleTime>0?this.sampleSize/(this.lastSampleTime/1e3):0}getAverageCount(){return this.samples>0?this.count/this.samples:0}getAverageTime(){return this.samples>0?this.time/this.samples:0}getHz(){return this.time>0?this.samples/(this.time/1e3):0}reset(){return this.time=0,this.count=0,this.samples=0,this.lastTiming=0,this.lastSampleTime=0,this.lastSampleCount=0,this._count=0,this._time=0,this._samples=0,this._startTime=0,this._timerPending=!1,this}_checkSampling(){this._samples===this.sampleSize&&(this.lastSampleTime=this._time,this.lastSampleCount=this._count,this.count+=this._count,this.time+=this._time,this.samples+=this._samples,this._time=0,this._count=0,this._samples=0)}}class r{constructor(t){(0,i.Z)(this,"id",void 0),(0,i.Z)(this,"stats",{}),this.id=t.id,this.stats={},this._initializeStats(t.stats),Object.seal(this)}get(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"count";return this._getOrCreate({name:t,type:e})}get size(){return Object.keys(this.stats).length}reset(){for(const t in this.stats)this.stats[t].reset();return this}forEach(t){for(const e in this.stats)t(this.stats[e])}getTable(){const t={};return this.forEach((e=>{t[e.name]={time:e.time||0,count:e.count||0,average:e.getAverageTime()||0,hz:e.getHz()||0}})),t}_initializeStats(){(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).forEach((t=>this._getOrCreate(t)))}_getOrCreate(t){if(!t||!t.name)return null;const{name:e,type:s}=t;return this.stats[e]||(this.stats[e]=t instanceof o?t:new o(e,s)),this.stats[e]}}}}]); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a483821d..f4d6008e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rdeck", - "version": "0.4.0-dev", + "version": "0.4.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "rdeck", - "version": "0.4.0-dev", + "version": "0.4.0", "dependencies": { "@danmarshall/deckgl-typings": "^4.9.15", "@emotion/react": "^11.8.2", diff --git a/package.json b/package.json index c7282bb9..0b7ee076 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rdeck", - "version": "0.4.0-dev", + "version": "0.4.0", "private": true, "scripts": { "build": "webpack --mode production",