"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[853],{538:(e,t,n)=>{n.d(t,{A:()=>b});var r=n(8587),o=n(8168),a=n(6540),i=n(4164),l=n(5659),s=n(771),c=n(1848);const d=e=>{let t;return t=e<1?5.11916*e**2:4.5*Math.log(e+1)+2,(t/100).toFixed(2)};var u=n(5669),p=n(8413),f=n(1609);function h(e){return(0,f.Ay)("MuiPaper",e)}(0,p.A)("MuiPaper",["root","rounded","outlined","elevation","elevation0","elevation1","elevation2","elevation3","elevation4","elevation5","elevation6","elevation7","elevation8","elevation9","elevation10","elevation11","elevation12","elevation13","elevation14","elevation15","elevation16","elevation17","elevation18","elevation19","elevation20","elevation21","elevation22","elevation23","elevation24"]);var m=n(4848);const v=["className","component","elevation","square","variant"],A=(0,c.Ay)("div",{name:"MuiPaper",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],!n.square&&t.rounded,"elevation"===n.variant&&t[`elevation${n.elevation}`]]}})((({theme:e,ownerState:t})=>{var n;return(0,o.A)({backgroundColor:(e.vars||e).palette.background.paper,color:(e.vars||e).palette.text.primary,transition:e.transitions.create("box-shadow")},!t.square&&{borderRadius:e.shape.borderRadius},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.divider}`},"elevation"===t.variant&&(0,o.A)({boxShadow:(e.vars||e).shadows[t.elevation]},!e.vars&&"dark"===e.palette.mode&&{backgroundImage:`linear-gradient(${(0,s.X4)("#fff",d(t.elevation))}, ${(0,s.X4)("#fff",d(t.elevation))})`},e.vars&&{backgroundImage:null==(n=e.vars.overlays)?void 0:n[t.elevation]}))})),b=a.forwardRef((function(e,t){const n=(0,u.b)({props:e,name:"MuiPaper"}),{className:a,component:s="div",elevation:c=1,square:d=!1,variant:p="elevation"}=n,f=(0,r.A)(n,v),b=(0,o.A)({},n,{component:s,elevation:c,square:d,variant:p}),g=(e=>{const{square:t,elevation:n,variant:r,classes:o}=e,a={root:["root",r,!t&&"rounded","elevation"===r&&`elevation${n}`]};return(0,l.A)(a,h,o)})(b);return(0,m.jsx)(A,(0,o.A)({as:s,ownerState:b,className:(0,i.A)(g.root,a),ref:t},f))}))},1749:(e,t,n)=>{n.d(t,{IJ:()=>M,Ay:()=>N});var r=n(8168),o=n(8587),a=n(6540),i=n(4164),l=n(5659),s=n(9329),c=n(2197),d=n(1848),u=n(5669),p=n(1935),f=n(6248),h=n(3749),m=n(6852),v=n(7467),A=n(5406),b=n(538),g=n(8413),y=n(1609);function x(e){return(0,y.Ay)("MuiPopover",e)}(0,g.A)("MuiPopover",["root","paper"]);var w=n(4848);const S=["onEntering"],R=["action","anchorEl","anchorOrigin","anchorPosition","anchorReference","children","className","container","elevation","marginThreshold","open","PaperProps","slots","slotProps","transformOrigin","TransitionComponent","transitionDuration","TransitionProps","disableScrollLock"],P=["slotProps"];function k(e,t){let n=0;return"number"==typeof t?n=t:"center"===t?n=e.height/2:"bottom"===t&&(n=e.height),n}function O(e,t){let n=0;return"number"==typeof t?n=t:"center"===t?n=e.width/2:"right"===t&&(n=e.width),n}function C(e){return[e.horizontal,e.vertical].map((e=>"number"==typeof e?`${e}px`:e)).join(" ")}function I(e){return"function"==typeof e?e():e}const E=(0,d.Ay)(A.A,{name:"MuiPopover",slot:"Root",overridesResolver:(e,t)=>t.root})({}),M=(0,d.Ay)(b.A,{name:"MuiPopover",slot:"Paper",overridesResolver:(e,t)=>t.paper})({position:"absolute",overflowY:"auto",overflowX:"hidden",minWidth:16,minHeight:16,maxWidth:"calc(100% - 32px)",maxHeight:"calc(100% - 32px)",outline:0}),N=a.forwardRef((function(e,t){var n,d,A;const b=(0,u.b)({props:e,name:"MuiPopover"}),{action:g,anchorEl:y,anchorOrigin:N={vertical:"top",horizontal:"left"},anchorPosition:F,anchorReference:$="anchorEl",children:T,className:W,container:z,elevation:j=8,marginThreshold:B=16,open:L,PaperProps:D={},slots:H,slotProps:V,transformOrigin:q={vertical:"top",horizontal:"left"},TransitionComponent:_=v.A,transitionDuration:G="auto",TransitionProps:{onEntering:U}={},disableScrollLock:K=!1}=b,J=(0,o.A)(b.TransitionProps,S),X=(0,o.A)(b,R),Y=null!=(n=null==V?void 0:V.paper)?n:D,Z=a.useRef(),Q=(0,m.A)(Z,Y.ref),ee=(0,r.A)({},b,{anchorOrigin:N,anchorReference:$,elevation:j,marginThreshold:B,externalPaperSlotProps:Y,transformOrigin:q,TransitionComponent:_,transitionDuration:G,TransitionProps:J}),te=(e=>{const{classes:t}=e;return(0,l.A)({root:["root"],paper:["paper"]},x,t)})(ee),ne=a.useCallback((()=>{if("anchorPosition"===$)return F;const e=I(y),t=(e&&1===e.nodeType?e:(0,f.A)(Z.current).body).getBoundingClientRect();return{top:t.top+k(t,N.vertical),left:t.left+O(t,N.horizontal)}}),[y,N.horizontal,N.vertical,F,$]),re=a.useCallback((e=>({vertical:k(e,q.vertical),horizontal:O(e,q.horizontal)})),[q.horizontal,q.vertical]),oe=a.useCallback((e=>{const t={width:e.offsetWidth,height:e.offsetHeight},n=re(t);if("none"===$)return{top:null,left:null,transformOrigin:C(n)};const r=ne();let o=r.top-n.vertical,a=r.left-n.horizontal;const i=o+t.height,l=a+t.width,s=(0,h.A)(I(y)),c=s.innerHeight-B,d=s.innerWidth-B;if(null!==B&&oc){const e=i-c;o-=e,n.vertical+=e}if(null!==B&&ad){const e=l-d;a-=e,n.horizontal+=e}return{top:`${Math.round(o)}px`,left:`${Math.round(a)}px`,transformOrigin:C(n)}}),[y,$,ne,re,B]),[ae,ie]=a.useState(L),le=a.useCallback((()=>{const e=Z.current;if(!e)return;const t=oe(e);null!==t.top&&(e.style.top=t.top),null!==t.left&&(e.style.left=t.left),e.style.transformOrigin=t.transformOrigin,ie(!0)}),[oe]);a.useEffect((()=>(K&&window.addEventListener("scroll",le),()=>window.removeEventListener("scroll",le))),[y,K,le]),a.useEffect((()=>{L&&le()})),a.useImperativeHandle(g,(()=>L?{updatePosition:()=>{le()}}:null),[L,le]),a.useEffect((()=>{if(!L)return;const e=(0,p.A)((()=>{le()})),t=(0,h.A)(y);return t.addEventListener("resize",e),()=>{e.clear(),t.removeEventListener("resize",e)}}),[y,L,le]);let se=G;"auto"!==G||_.muiSupportAuto||(se=void 0);const ce=z||(y?(0,f.A)(I(y)).body:void 0),de=null!=(d=null==H?void 0:H.root)?d:E,ue=null!=(A=null==H?void 0:H.paper)?A:M,pe=(0,s.A)({elementType:ue,externalSlotProps:(0,r.A)({},Y,{style:ae?Y.style:(0,r.A)({},Y.style,{opacity:0})}),additionalProps:{elevation:j,ref:Q},ownerState:ee,className:(0,i.A)(te.paper,null==Y?void 0:Y.className)}),fe=(0,s.A)({elementType:de,externalSlotProps:(null==V?void 0:V.root)||{},externalForwardedProps:X,additionalProps:{ref:t,slotProps:{backdrop:{invisible:!0}},container:ce,open:L},ownerState:ee,className:(0,i.A)(te.root,W)}),{slotProps:he}=fe,me=(0,o.A)(fe,P);return(0,w.jsx)(de,(0,r.A)({},me,!(0,c.A)(de)&&{slotProps:he,disableScrollLock:K},{children:(0,w.jsx)(_,(0,r.A)({appear:!0,in:L,onEntering:(e,t)=>{U&&U(e,t),le()},onExited:()=>{ie(!1)},timeout:se},J,{children:(0,w.jsx)(ue,(0,r.A)({},pe,{children:T}))}))}))}))},5061:(e,t,n)=>{n.d(t,{A:()=>c});var r=n(6540),o=n(961),a=n(1523),i=n(1529),l=n(7365),s=n(4848);const c=r.forwardRef((function(e,t){const{children:n,container:c,disablePortal:d=!1}=e,[u,p]=r.useState(null),f=(0,a.A)(r.isValidElement(n)?n.ref:null,t);if((0,i.A)((()=>{d||p(function(e){return"function"==typeof e?e():e}(c)||document.body)}),[c,d]),(0,i.A)((()=>{if(u&&!d)return(0,l.A)(t,u),()=>{(0,l.A)(t,null)}}),[t,u,d]),d){if(r.isValidElement(n)){const e={ref:f};return r.cloneElement(n,e)}return(0,s.jsx)(r.Fragment,{children:n})}return(0,s.jsx)(r.Fragment,{children:u?o.createPortal(n,u):u})}))},815:(e,t,n)=>{n.d(t,{A:()=>i});var r=n(7163),o=n(1848),a=n(5669);const i=(0,r.A)({createStyledComponent:(0,o.Ay)("div",{name:"MuiStack",slot:"Root",overridesResolver:(e,t)=>t.root}),useThemeProps:e=>(0,a.b)({props:e,name:"MuiStack"})})},105:(e,t,n)=>{n.d(t,{A:()=>we});var r,o=n(8168),a=n(8587),i=n(6540),l=n(4164),s=n(5659),c=n(4661),d=n(1848),u=n(5669),p=n(1881),f=n(2335),h=n(9770),m=n(4848);const v=["children","classes","className","label","notched"],A=(0,d.Ay)("fieldset",{shouldForwardProp:h.A})({textAlign:"left",position:"absolute",bottom:0,right:0,top:-5,left:0,margin:0,padding:"0 8px",pointerEvents:"none",borderRadius:"inherit",borderStyle:"solid",borderWidth:1,overflow:"hidden",minWidth:"0%"}),b=(0,d.Ay)("legend",{shouldForwardProp:h.A})((({ownerState:e,theme:t})=>(0,o.A)({float:"unset",width:"auto",overflow:"hidden"},!e.withLabel&&{padding:0,lineHeight:"11px",transition:t.transitions.create("width",{duration:150,easing:t.transitions.easing.easeOut})},e.withLabel&&(0,o.A)({display:"block",padding:0,height:11,fontSize:"0.75em",visibility:"hidden",maxWidth:.01,transition:t.transitions.create("max-width",{duration:50,easing:t.transitions.easing.easeOut}),whiteSpace:"nowrap","& > span":{paddingLeft:5,paddingRight:5,display:"inline-block",opacity:0,visibility:"visible"}},e.notched&&{maxWidth:"100%",transition:t.transitions.create("max-width",{duration:100,easing:t.transitions.easing.easeOut,delay:50})}))));var g=n(9716),y=n(8086),x=n(8413),w=n(1609),S=n(1175);function R(e){return(0,w.Ay)("MuiOutlinedInput",e)}const P=(0,o.A)({},S.A,(0,x.A)("MuiOutlinedInput",["root","notchedOutline","input"]));var k=n(627);const O=["components","fullWidth","inputComponent","label","multiline","notched","slots","type"],C=(0,d.Ay)(k.Sh,{shouldForwardProp:e=>(0,h.A)(e)||"classes"===e,name:"MuiOutlinedInput",slot:"Root",overridesResolver:k.WC})((({theme:e,ownerState:t})=>{const n="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return(0,o.A)({position:"relative",borderRadius:(e.vars||e).shape.borderRadius,[`&:hover .${P.notchedOutline}`]:{borderColor:(e.vars||e).palette.text.primary},"@media (hover: none)":{[`&:hover .${P.notchedOutline}`]:{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:n}},[`&.${P.focused} .${P.notchedOutline}`]:{borderColor:(e.vars||e).palette[t.color].main,borderWidth:2},[`&.${P.error} .${P.notchedOutline}`]:{borderColor:(e.vars||e).palette.error.main},[`&.${P.disabled} .${P.notchedOutline}`]:{borderColor:(e.vars||e).palette.action.disabled}},t.startAdornment&&{paddingLeft:14},t.endAdornment&&{paddingRight:14},t.multiline&&(0,o.A)({padding:"16.5px 14px"},"small"===t.size&&{padding:"8.5px 14px"}))})),I=(0,d.Ay)((function(e){const{className:t,label:n,notched:i}=e,l=(0,a.A)(e,v),s=null!=n&&""!==n,c=(0,o.A)({},e,{notched:i,withLabel:s});return(0,m.jsx)(A,(0,o.A)({"aria-hidden":!0,className:t,ownerState:c},l,{children:(0,m.jsx)(b,{ownerState:c,children:s?(0,m.jsx)("span",{children:n}):r||(r=(0,m.jsx)("span",{className:"notranslate",children:"​"}))})}))}),{name:"MuiOutlinedInput",slot:"NotchedOutline",overridesResolver:(e,t)=>t.notchedOutline})((({theme:e})=>{const t="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:t}})),E=(0,d.Ay)(k.f3,{name:"MuiOutlinedInput",slot:"Input",overridesResolver:k.Oj})((({theme:e,ownerState:t})=>(0,o.A)({padding:"16.5px 14px"},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:"light"===e.palette.mode?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:"light"===e.palette.mode?null:"#fff",caretColor:"light"===e.palette.mode?null:"#fff",borderRadius:"inherit"}},e.vars&&{"&:-webkit-autofill":{borderRadius:"inherit"},[e.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},"small"===t.size&&{padding:"8.5px 14px"},t.multiline&&{padding:0},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0}))),M=i.forwardRef((function(e,t){var n,r,l,c,d;const p=(0,u.b)({props:e,name:"MuiOutlinedInput"}),{components:f={},fullWidth:h=!1,inputComponent:v="input",label:A,multiline:b=!1,notched:x,slots:w={},type:S="text"}=p,P=(0,a.A)(p,O),M=(e=>{const{classes:t}=e,n=(0,s.A)({root:["root"],notchedOutline:["notchedOutline"],input:["input"]},R,t);return(0,o.A)({},t,n)})(p),N=(0,g.A)(),F=(0,y.A)({props:p,muiFormControl:N,states:["color","disabled","error","focused","hiddenLabel","size","required"]}),$=(0,o.A)({},p,{color:F.color||"primary",disabled:F.disabled,error:F.error,focused:F.focused,formControl:N,fullWidth:h,hiddenLabel:F.hiddenLabel,multiline:b,size:F.size,type:S}),T=null!=(n=null!=(r=w.root)?r:f.Root)?n:C,W=null!=(l=null!=(c=w.input)?c:f.Input)?l:E;return(0,m.jsx)(k.Ay,(0,o.A)({slots:{root:T,input:W},renderSuffix:e=>(0,m.jsx)(I,{ownerState:$,className:M.notchedOutline,label:null!=A&&""!==A&&F.required?d||(d=(0,m.jsxs)(i.Fragment,{children:[A," ","*"]})):A,notched:void 0!==x?x:Boolean(e.startAdornment||e.filled||e.focused)}),fullWidth:h,inputComponent:v,multiline:b,ref:t,type:S},P,{classes:(0,o.A)({},M,{notchedOutline:null})}))}));M.muiName="Input";const N=M;var F=n(4433),$=n(779),T=n(6347),W=n(1317),z=n(9453),j=(n(4363),n(6248)),B=n(8466),L=n(8708);function D(e){return(0,w.Ay)("MuiNativeSelect",e)}const H=(0,x.A)("MuiNativeSelect",["root","select","multiple","filled","outlined","standard","disabled","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput","error"]),V=["className","disabled","error","IconComponent","inputRef","variant"],q=({ownerState:e,theme:t})=>(0,o.A)({MozAppearance:"none",WebkitAppearance:"none",userSelect:"none",borderRadius:0,cursor:"pointer","&:focus":(0,o.A)({},t.vars?{backgroundColor:`rgba(${t.vars.palette.common.onBackgroundChannel} / 0.05)`}:{backgroundColor:"light"===t.palette.mode?"rgba(0, 0, 0, 0.05)":"rgba(255, 255, 255, 0.05)"},{borderRadius:0}),"&::-ms-expand":{display:"none"},[`&.${H.disabled}`]:{cursor:"default"},"&[multiple]":{height:"auto"},"&:not([multiple]) option, &:not([multiple]) optgroup":{backgroundColor:(t.vars||t).palette.background.paper},"&&&":{paddingRight:24,minWidth:16}},"filled"===e.variant&&{"&&&":{paddingRight:32}},"outlined"===e.variant&&{borderRadius:(t.vars||t).shape.borderRadius,"&:focus":{borderRadius:(t.vars||t).shape.borderRadius},"&&&":{paddingRight:32}}),_=(0,d.Ay)("select",{name:"MuiNativeSelect",slot:"Select",shouldForwardProp:h.A,overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.select,t[n.variant],n.error&&t.error,{[`&.${H.multiple}`]:t.multiple}]}})(q),G=({ownerState:e,theme:t})=>(0,o.A)({position:"absolute",right:0,top:"calc(50% - .5em)",pointerEvents:"none",color:(t.vars||t).palette.action.active,[`&.${H.disabled}`]:{color:(t.vars||t).palette.action.disabled}},e.open&&{transform:"rotate(180deg)"},"filled"===e.variant&&{right:7},"outlined"===e.variant&&{right:7}),U=(0,d.Ay)("svg",{name:"MuiNativeSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.icon,n.variant&&t[`icon${(0,B.A)(n.variant)}`],n.open&&t.iconOpen]}})(G),K=i.forwardRef((function(e,t){const{className:n,disabled:r,error:c,IconComponent:d,inputRef:u,variant:p="standard"}=e,f=(0,a.A)(e,V),h=(0,o.A)({},e,{disabled:r,variant:p,error:c}),v=(e=>{const{classes:t,variant:n,disabled:r,multiple:o,open:a,error:i}=e,l={select:["select",n,r&&"disabled",o&&"multiple",i&&"error"],icon:["icon",`icon${(0,B.A)(n)}`,a&&"iconOpen",r&&"disabled"]};return(0,s.A)(l,D,t)})(h);return(0,m.jsxs)(i.Fragment,{children:[(0,m.jsx)(_,(0,o.A)({ownerState:h,className:(0,l.A)(v.select,n),disabled:r,ref:u||t},f)),e.multiple?null:(0,m.jsx)(U,{as:d,ownerState:h,className:v.icon})]})}));var J=n(2891),X=n(4438),Y=n(6852),Z=n(1159);function Q(e){return(0,w.Ay)("MuiSelect",e)}const ee=(0,x.A)("MuiSelect",["root","select","multiple","filled","outlined","standard","disabled","focused","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput","error"]);var te;const ne=["aria-describedby","aria-label","autoFocus","autoWidth","children","className","defaultOpen","defaultValue","disabled","displayEmpty","error","IconComponent","inputRef","labelId","MenuProps","multiple","name","onBlur","onChange","onClose","onFocus","onOpen","open","readOnly","renderValue","SelectDisplayProps","tabIndex","type","value","variant"],re=(0,d.Ay)("div",{name:"MuiSelect",slot:"Select",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[{[`&.${ee.select}`]:t.select},{[`&.${ee.select}`]:t[n.variant]},{[`&.${ee.error}`]:t.error},{[`&.${ee.multiple}`]:t.multiple}]}})(q,{[`&.${ee.select}`]:{height:"auto",minHeight:"1.4375em",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"}}),oe=(0,d.Ay)("svg",{name:"MuiSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.icon,n.variant&&t[`icon${(0,B.A)(n.variant)}`],n.open&&t.iconOpen]}})(G),ae=(0,d.Ay)("input",{shouldForwardProp:e=>(0,X.A)(e)&&"classes"!==e,name:"MuiSelect",slot:"NativeInput",overridesResolver:(e,t)=>t.nativeInput})({bottom:0,left:0,position:"absolute",opacity:0,pointerEvents:"none",width:"100%",boxSizing:"border-box"});function ie(e,t){return"object"==typeof t&&null!==t?e===t:String(e)===String(t)}function le(e){return null==e||"string"==typeof e&&!e.trim()}const se=i.forwardRef((function(e,t){var n;const{"aria-describedby":r,"aria-label":d,autoFocus:u,autoWidth:p,children:f,className:h,defaultOpen:v,defaultValue:A,disabled:b,displayEmpty:g,error:y=!1,IconComponent:x,inputRef:w,labelId:S,MenuProps:R={},multiple:P,name:k,onBlur:O,onChange:C,onClose:I,onFocus:E,onOpen:M,open:N,readOnly:F,renderValue:$,SelectDisplayProps:T={},tabIndex:W,value:D,variant:H="standard"}=e,V=(0,a.A)(e,ne),[q,_]=(0,Z.A)({controlled:D,default:A,name:"Select"}),[G,U]=(0,Z.A)({controlled:N,default:v,name:"Select"}),K=i.useRef(null),X=i.useRef(null),[ee,se]=i.useState(null),{current:ce}=i.useRef(null!=N),[de,ue]=i.useState(),pe=(0,Y.A)(t,w),fe=i.useCallback((e=>{X.current=e,e&&se(e)}),[]),he=null==ee?void 0:ee.parentNode;i.useImperativeHandle(pe,(()=>({focus:()=>{X.current.focus()},node:K.current,value:q})),[q]),i.useEffect((()=>{v&&G&&ee&&!ce&&(ue(p?null:he.clientWidth),X.current.focus())}),[ee,p]),i.useEffect((()=>{u&&X.current.focus()}),[u]),i.useEffect((()=>{if(!S)return;const e=(0,j.A)(X.current).getElementById(S);if(e){const t=()=>{getSelection().isCollapsed&&X.current.focus()};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}}),[S]);const me=(e,t)=>{e?M&&M(t):I&&I(t),ce||(ue(p?null:he.clientWidth),U(e))},ve=i.Children.toArray(f),Ae=e=>t=>{let n;if(t.currentTarget.hasAttribute("tabindex")){if(P){n=Array.isArray(q)?q.slice():[];const t=q.indexOf(e.props.value);-1===t?n.push(e.props.value):n.splice(t,1)}else n=e.props.value;if(e.props.onClick&&e.props.onClick(t),q!==n&&(_(n),C)){const r=t.nativeEvent||t,o=new r.constructor(r.type,r);Object.defineProperty(o,"target",{writable:!0,value:{value:n,name:k}}),C(o,e)}P||me(!1,t)}},be=null!==ee&&G;let ge,ye;delete V["aria-invalid"];const xe=[];let we=!1,Se=!1;((0,J.lq)({value:q})||g)&&($?ge=$(q):we=!0);const Re=ve.map((e=>{if(!i.isValidElement(e))return null;let t;if(P){if(!Array.isArray(q))throw new Error((0,z.A)(2));t=q.some((t=>ie(t,e.props.value))),t&&we&&xe.push(e.props.children)}else t=ie(q,e.props.value),t&&we&&(ye=e.props.children);return t&&(Se=!0),i.cloneElement(e,{"aria-selected":t?"true":"false",onClick:Ae(e),onKeyUp:t=>{" "===t.key&&t.preventDefault(),e.props.onKeyUp&&e.props.onKeyUp(t)},role:"option",selected:t,value:void 0,"data-value":e.props.value})}));we&&(ge=P?0===xe.length?null:xe.reduce(((e,t,n)=>(e.push(t),n{const{classes:t,variant:n,disabled:r,multiple:o,open:a,error:i}=e,l={select:["select",n,r&&"disabled",o&&"multiple",i&&"error"],icon:["icon",`icon${(0,B.A)(n)}`,a&&"iconOpen",r&&"disabled"],nativeInput:["nativeInput"]};return(0,s.A)(l,Q,t)})(Ce),Ee=(0,o.A)({},R.PaperProps,null==(n=R.slotProps)?void 0:n.paper),Me=(0,c.A)();return(0,m.jsxs)(i.Fragment,{children:[(0,m.jsx)(re,(0,o.A)({ref:fe,tabIndex:Pe,role:"combobox","aria-controls":Me,"aria-disabled":b?"true":void 0,"aria-expanded":be?"true":"false","aria-haspopup":"listbox","aria-label":d,"aria-labelledby":[S,Oe].filter(Boolean).join(" ")||void 0,"aria-describedby":r,onKeyDown:e=>{F||-1!==[" ","ArrowUp","ArrowDown","Enter"].indexOf(e.key)&&(e.preventDefault(),me(!0,e))},onMouseDown:b||F?null:e=>{0===e.button&&(e.preventDefault(),X.current.focus(),me(!0,e))},onBlur:e=>{!be&&O&&(Object.defineProperty(e,"target",{writable:!0,value:{value:q,name:k}}),O(e))},onFocus:E},T,{ownerState:Ce,className:(0,l.A)(T.className,Ie.select,h),id:Oe,children:le(ge)?te||(te=(0,m.jsx)("span",{className:"notranslate",children:"​"})):ge})),(0,m.jsx)(ae,(0,o.A)({"aria-invalid":y,value:Array.isArray(q)?q.join(","):q,name:k,ref:K,"aria-hidden":!0,onChange:e=>{const t=ve.find((t=>t.props.value===e.target.value));void 0!==t&&(_(t.props.value),C&&C(e,t))},tabIndex:-1,disabled:b,className:Ie.nativeInput,autoFocus:u,ownerState:Ce},V)),(0,m.jsx)(oe,{as:x,className:Ie.icon,ownerState:Ce}),(0,m.jsx)(L.A,(0,o.A)({id:`menu-${k||""}`,anchorEl:he,open:be,onClose:e=>{me(!1,e)},anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"}},R,{MenuListProps:(0,o.A)({"aria-labelledby":S,role:"listbox","aria-multiselectable":P?"true":void 0,disableListWrap:!0,id:Me},R.MenuListProps),slotProps:(0,o.A)({},R.slotProps,{paper:(0,o.A)({},Ee,{style:(0,o.A)({minWidth:ke},null!=Ee?Ee.style:null)})}),children:Re}))]})})),ce=(0,n(5003).A)((0,m.jsx)("path",{d:"M7 10l5 5 5-5z"}),"ArrowDropDown"),de=["autoWidth","children","classes","className","defaultOpen","displayEmpty","IconComponent","id","input","inputProps","label","labelId","MenuProps","multiple","native","onClose","onOpen","open","renderValue","SelectDisplayProps","variant"],ue=["root"],pe={name:"MuiSelect",overridesResolver:(e,t)=>t.root,shouldForwardProp:e=>(0,h.A)(e)&&"variant"!==e,slot:"Root"},fe=(0,d.Ay)(p.A,pe)(""),he=(0,d.Ay)(N,pe)(""),me=(0,d.Ay)(f.A,pe)(""),ve=i.forwardRef((function(e,t){const n=(0,u.b)({name:"MuiSelect",props:e}),{autoWidth:r=!1,children:s,classes:c={},className:d,defaultOpen:p=!1,displayEmpty:f=!1,IconComponent:h=ce,id:v,input:A,inputProps:b,label:x,labelId:w,MenuProps:S,multiple:R=!1,native:P=!1,onClose:k,onOpen:O,open:C,renderValue:I,SelectDisplayProps:E,variant:M="outlined"}=n,N=(0,a.A)(n,de),F=P?K:se,$=(0,g.A)(),T=(0,y.A)({props:n,muiFormControl:$,states:["variant","error"]}),z=T.variant||M,j=(0,o.A)({},n,{variant:z,classes:c}),B=(e=>{const{classes:t}=e;return t})(j),L=(0,a.A)(B,ue),D=A||{standard:(0,m.jsx)(fe,{ownerState:j}),outlined:(0,m.jsx)(he,{label:x,ownerState:j}),filled:(0,m.jsx)(me,{ownerState:j})}[z],H=(0,Y.A)(t,D.ref);return(0,m.jsx)(i.Fragment,{children:i.cloneElement(D,(0,o.A)({inputComponent:F,inputProps:(0,o.A)({children:s,error:T.error,IconComponent:h,variant:z,type:void 0,multiple:R},P?{id:v}:{autoWidth:r,defaultOpen:p,displayEmpty:f,labelId:w,MenuProps:S,onClose:k,onOpen:O,open:C,renderValue:I,SelectDisplayProps:(0,o.A)({id:v},E)},b,{classes:b?(0,W.A)(L,b.classes):L},A?A.props.inputProps:{})},(R&&P||f)&&"outlined"===z?{notched:!0}:{},{ref:H,className:(0,l.A)(D.props.className,d,B.root)},!A&&{variant:z},N))})}));ve.muiName="Select";const Ae=ve;function be(e){return(0,w.Ay)("MuiTextField",e)}(0,x.A)("MuiTextField",["root"]);const ge=["autoComplete","autoFocus","children","className","color","defaultValue","disabled","error","FormHelperTextProps","fullWidth","helperText","id","InputLabelProps","inputProps","InputProps","inputRef","label","maxRows","minRows","multiline","name","onBlur","onChange","onFocus","placeholder","required","rows","select","SelectProps","type","value","variant"],ye={standard:p.A,filled:f.A,outlined:N},xe=(0,d.Ay)($.A,{name:"MuiTextField",slot:"Root",overridesResolver:(e,t)=>t.root})({}),we=i.forwardRef((function(e,t){const n=(0,u.b)({props:e,name:"MuiTextField"}),{autoComplete:r,autoFocus:i=!1,children:d,className:p,color:f="primary",defaultValue:h,disabled:v=!1,error:A=!1,FormHelperTextProps:b,fullWidth:g=!1,helperText:y,id:x,InputLabelProps:w,inputProps:S,InputProps:R,inputRef:P,label:k,maxRows:O,minRows:C,multiline:I=!1,name:E,onBlur:M,onChange:N,onFocus:$,placeholder:W,required:z=!1,rows:j,select:B=!1,SelectProps:L,type:D,value:H,variant:V="outlined"}=n,q=(0,a.A)(n,ge),_=(0,o.A)({},n,{autoFocus:i,color:f,disabled:v,error:A,fullWidth:g,multiline:I,required:z,select:B,variant:V}),G=(e=>{const{classes:t}=e;return(0,s.A)({root:["root"]},be,t)})(_),U={};"outlined"===V&&(w&&void 0!==w.shrink&&(U.notched=w.shrink),U.label=k),B&&(L&&L.native||(U.id=void 0),U["aria-describedby"]=void 0);const K=(0,c.A)(x),J=y&&K?`${K}-helper-text`:void 0,X=k&&K?`${K}-label`:void 0,Y=ye[V],Z=(0,m.jsx)(Y,(0,o.A)({"aria-describedby":J,autoComplete:r,autoFocus:i,defaultValue:h,fullWidth:g,multiline:I,name:E,rows:j,maxRows:O,minRows:C,type:D,value:H,id:K,inputRef:P,onBlur:M,onChange:N,onFocus:$,placeholder:W,inputProps:S},U,R));return(0,m.jsxs)(xe,(0,o.A)({className:(0,l.A)(G.root,p),disabled:v,error:A,fullWidth:g,ref:t,required:z,color:f,variant:V,ownerState:_},q,{children:[null!=k&&""!==k&&(0,m.jsx)(F.A,(0,o.A)({htmlFor:K,id:X},w,{children:k})),B?(0,m.jsx)(Ae,(0,o.A)({"aria-describedby":J,id:K,labelId:X,value:H,input:Z},L,{children:d})):Z,y&&(0,m.jsx)(T.A,(0,o.A)({id:J},b,{children:y}))]}))}))},3561:(e,t,n)=>{n.d(t,{A:()=>h});var r=n(8168),o=n(8587),a=n(6540),i=n(1523),l=n(4877),s=n(1529),c=n(4705),d=n(4848);const u=["onChange","maxRows","minRows","style","value"];function p(e){return parseInt(e,10)||0}const f={visibility:"hidden",position:"absolute",overflow:"hidden",height:0,top:0,left:0,transform:"translateZ(0)"},h=a.forwardRef((function(e,t){const{onChange:n,maxRows:h,minRows:m=1,style:v,value:A}=e,b=(0,o.A)(e,u),{current:g}=a.useRef(null!=A),y=a.useRef(null),x=(0,i.A)(t,y),w=a.useRef(null),S=a.useRef(null),R=a.useCallback((()=>{const t=y.current,n=(0,l.A)(t).getComputedStyle(t);if("0px"===n.width)return{outerHeightStyle:0,overflowing:!1};const r=S.current;r.style.width=n.width,r.value=t.value||e.placeholder||"x","\n"===r.value.slice(-1)&&(r.value+=" ");const o=n.boxSizing,a=p(n.paddingBottom)+p(n.paddingTop),i=p(n.borderBottomWidth)+p(n.borderTopWidth),s=r.scrollHeight;r.value="x";const c=r.scrollHeight;let d=s;return m&&(d=Math.max(Number(m)*c,d)),h&&(d=Math.min(Number(h)*c,d)),d=Math.max(d,c),{outerHeightStyle:d+("border-box"===o?a+i:0),overflowing:Math.abs(d-s)<=1}}),[h,m,e.placeholder]),P=a.useCallback((()=>{const e=R();if(null==(t=e)||0===Object.keys(t).length||0===t.outerHeightStyle&&!t.overflowing)return;var t;const n=e.outerHeightStyle,r=y.current;w.current!==n&&(w.current=n,r.style.height=`${n}px`),r.style.overflow=e.overflowing?"hidden":""}),[R]);return(0,s.A)((()=>{const e=()=>{P()};const t=(0,c.A)(e),n=y.current,r=(0,l.A)(n);let o;return r.addEventListener("resize",t),"undefined"!=typeof ResizeObserver&&(o=new ResizeObserver(e),o.observe(n)),()=>{t.clear(),cancelAnimationFrame(undefined),r.removeEventListener("resize",t),o&&o.disconnect()}}),[R,P]),(0,s.A)((()=>{P()})),(0,d.jsxs)(a.Fragment,{children:[(0,d.jsx)("textarea",(0,r.A)({value:A,onChange:e=>{g||P(),n&&n(e)},ref:x,rows:m,style:v},b)),(0,d.jsx)("textarea",{"aria-hidden":!0,className:e.className,readOnly:!0,ref:S,tabIndex:-1,style:(0,r.A)({},f,v,{paddingTop:0,paddingBottom:0})})]})}))},8532:(e,t,n)=>{n.d(t,{A:()=>v});var r=n(8587),o=n(8168),a=n(6540),i=n(4164),l=n(5659),s=n(5669),c=n(1848),d=n(8413),u=n(1609);function p(e){return(0,u.Ay)("MuiToolbar",e)}(0,d.A)("MuiToolbar",["root","gutters","regular","dense"]);var f=n(4848);const h=["className","component","disableGutters","variant"],m=(0,c.Ay)("div",{name:"MuiToolbar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.disableGutters&&t.gutters,t[n.variant]]}})((({theme:e,ownerState:t})=>(0,o.A)({position:"relative",display:"flex",alignItems:"center"},!t.disableGutters&&{paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up("sm")]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}},"dense"===t.variant&&{minHeight:48})),(({theme:e,ownerState:t})=>"regular"===t.variant&&e.mixins.toolbar)),v=a.forwardRef((function(e,t){const n=(0,s.b)({props:e,name:"MuiToolbar"}),{className:a,component:c="div",disableGutters:d=!1,variant:u="regular"}=n,v=(0,r.A)(n,h),A=(0,o.A)({},n,{component:c,disableGutters:d,variant:u}),b=(e=>{const{classes:t,disableGutters:n,variant:r}=e,o={root:["root",!n&&"gutters",r]};return(0,l.A)(o,p,t)})(A);return(0,f.jsx)(m,(0,o.A)({as:c,className:(0,i.A)(b.root,a),ref:t,ownerState:A},v))}))},4073:(e,t,n)=>{n.d(t,{A:()=>y});var r=n(8587),o=n(8168),a=n(6540),i=n(4164),l=n(9599),s=n(5659),c=n(1848),d=n(5669),u=n(8466),p=n(8413),f=n(1609);function h(e){return(0,f.Ay)("MuiTypography",e)}(0,p.A)("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]);var m=n(4848);const v=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],A=(0,c.Ay)("span",{name:"MuiTypography",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.variant&&t[n.variant],"inherit"!==n.align&&t[`align${(0,u.A)(n.align)}`],n.noWrap&&t.noWrap,n.gutterBottom&&t.gutterBottom,n.paragraph&&t.paragraph]}})((({theme:e,ownerState:t})=>(0,o.A)({margin:0},"inherit"===t.variant&&{font:"inherit"},"inherit"!==t.variant&&e.typography[t.variant],"inherit"!==t.align&&{textAlign:t.align},t.noWrap&&{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},t.gutterBottom&&{marginBottom:"0.35em"},t.paragraph&&{marginBottom:16}))),b={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},g={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},y=a.forwardRef((function(e,t){const n=(0,d.b)({props:e,name:"MuiTypography"}),a=(e=>g[e]||e)(n.color),c=(0,l.A)((0,o.A)({},n,{color:a})),{align:p="inherit",className:f,component:y,gutterBottom:x=!1,noWrap:w=!1,paragraph:S=!1,variant:R="body1",variantMapping:P=b}=c,k=(0,r.A)(c,v),O=(0,o.A)({},c,{align:p,color:a,className:f,component:y,gutterBottom:x,noWrap:w,paragraph:S,variant:R,variantMapping:P}),C=y||(S?"p":P[R]||b[R])||"span",I=(e=>{const{align:t,gutterBottom:n,noWrap:r,paragraph:o,variant:a,classes:i}=e,l={root:["root",a,"inherit"!==e.align&&`align${(0,u.A)(t)}`,n&&"gutterBottom",r&&"noWrap",o&&"paragraph"]};return(0,s.A)(l,h,i)})(O);return(0,m.jsx)(A,(0,o.A)({as:C,ref:t,ownerState:O,className:(0,i.A)(I.root,f)},k))}))},3524:(e,t,n)=>{n.d(t,{A:()=>d});var r=n(6540),o=n(1523),a=n(2325),i=n(4848);const l=["input","select","textarea","a[href]","button","[tabindex]","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])'].join(",");function s(e){const t=[],n=[];return Array.from(e.querySelectorAll(l)).forEach(((e,r)=>{const o=function(e){const t=parseInt(e.getAttribute("tabindex")||"",10);return Number.isNaN(t)?"true"===e.contentEditable||("AUDIO"===e.nodeName||"VIDEO"===e.nodeName||"DETAILS"===e.nodeName)&&null===e.getAttribute("tabindex")?0:e.tabIndex:t}(e);-1!==o&&function(e){return!(e.disabled||"INPUT"===e.tagName&&"hidden"===e.type||function(e){if("INPUT"!==e.tagName||"radio"!==e.type)return!1;if(!e.name)return!1;const t=t=>e.ownerDocument.querySelector(`input[type="radio"]${t}`);let n=t(`[name="${e.name}"]:checked`);return n||(n=t(`[name="${e.name}"]`)),n!==e}(e))}(e)&&(0===o?t.push(e):n.push({documentOrder:r,tabIndex:o,node:e}))})),n.sort(((e,t)=>e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex)).map((e=>e.node)).concat(t)}function c(){return!0}const d=function(e){const{children:t,disableAutoFocus:n=!1,disableEnforceFocus:l=!1,disableRestoreFocus:d=!1,getTabbable:u=s,isEnabled:p=c,open:f}=e,h=r.useRef(!1),m=r.useRef(null),v=r.useRef(null),A=r.useRef(null),b=r.useRef(null),g=r.useRef(!1),y=r.useRef(null),x=(0,o.A)(t.ref,y),w=r.useRef(null);r.useEffect((()=>{f&&y.current&&(g.current=!n)}),[n,f]),r.useEffect((()=>{if(!f||!y.current)return;const e=(0,a.A)(y.current);return y.current.contains(e.activeElement)||(y.current.hasAttribute("tabIndex")||y.current.setAttribute("tabIndex","-1"),g.current&&y.current.focus()),()=>{d||(A.current&&A.current.focus&&(h.current=!0,A.current.focus()),A.current=null)}}),[f]),r.useEffect((()=>{if(!f||!y.current)return;const e=(0,a.A)(y.current),t=t=>{w.current=t,!l&&p()&&"Tab"===t.key&&e.activeElement===y.current&&t.shiftKey&&(h.current=!0,v.current&&v.current.focus())},n=()=>{const t=y.current;if(null===t)return;if(!e.hasFocus()||!p()||h.current)return void(h.current=!1);if(t.contains(e.activeElement))return;if(l&&e.activeElement!==m.current&&e.activeElement!==v.current)return;if(e.activeElement!==b.current)b.current=null;else if(null!==b.current)return;if(!g.current)return;let n=[];if(e.activeElement!==m.current&&e.activeElement!==v.current||(n=u(y.current)),n.length>0){var r,o;const e=Boolean((null==(r=w.current)?void 0:r.shiftKey)&&"Tab"===(null==(o=w.current)?void 0:o.key)),t=n[0],a=n[n.length-1];"string"!=typeof t&&"string"!=typeof a&&(e?a.focus():t.focus())}else t.focus()};e.addEventListener("focusin",n),e.addEventListener("keydown",t,!0);const r=setInterval((()=>{e.activeElement&&"BODY"===e.activeElement.tagName&&n()}),50);return()=>{clearInterval(r),e.removeEventListener("focusin",n),e.removeEventListener("keydown",t,!0)}}),[n,l,d,p,f,u]);const S=e=>{null===A.current&&(A.current=e.relatedTarget),g.current=!0};return(0,i.jsxs)(r.Fragment,{children:[(0,i.jsx)("div",{tabIndex:f?0:-1,onFocus:S,ref:m,"data-testid":"sentinelStart"}),r.cloneElement(t,{ref:x,onFocus:e=>{null===A.current&&(A.current=e.relatedTarget),g.current=!0,b.current=e.target;const n=t.props.onFocus;n&&n(e)}}),(0,i.jsx)("div",{tabIndex:f?0:-1,onFocus:S,ref:v,"data-testid":"sentinelEnd"})]})}},2363:(e,t,n)=>{n.d(t,{A:()=>c});var r=n(8168),o=n(8587),a=(n(6540),n(4572)),i=n(8312),l=n(4848);const s=["theme"];function c(e){let{theme:t}=e,n=(0,o.A)(e,s);const c=t[i.A];return(0,l.jsx)(a.A,(0,r.A)({},n,{themeId:c?i.A:void 0,theme:c||t}))}},6544:(e,t,n)=>{n.d(t,{A:()=>N});var r=n(8168),o=n(8587),a=n(9453),i=n(1317),l=n(4188),s=n(3571),c=n(8749),d=n(771);const u={black:"#000",white:"#fff"},p={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},f={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},h={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},m={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},v={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},A={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},b={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},g=["mode","contrastThreshold","tonalOffset"],y={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:u.white,default:u.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},x={text:{primary:u.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:u.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function w(e,t,n,r){const o=r.light||r,a=r.dark||1.5*r;e[t]||(e.hasOwnProperty(n)?e[t]=e[n]:"light"===t?e.light=(0,d.a)(e.main,o):"dark"===t&&(e.dark=(0,d.e$)(e.main,a)))}const S=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"],R={textTransform:"uppercase"},P='"Roboto", "Helvetica", "Arial", sans-serif';function k(e,t){const n="function"==typeof t?t(e):t,{fontFamily:a=P,fontSize:l=14,fontWeightLight:s=300,fontWeightRegular:c=400,fontWeightMedium:d=500,fontWeightBold:u=700,htmlFontSize:p=16,allVariants:f,pxToRem:h}=n,m=(0,o.A)(n,S),v=l/14,A=h||(e=>e/p*v+"rem"),b=(e,t,n,o,i)=>{return(0,r.A)({fontFamily:a,fontWeight:e,fontSize:A(t),lineHeight:n},a===P?{letterSpacing:(l=o/t,Math.round(1e5*l)/1e5+"em")}:{},i,f);var l},g={h1:b(s,96,1.167,-1.5),h2:b(s,60,1.2,-.5),h3:b(c,48,1.167,0),h4:b(c,34,1.235,.25),h5:b(c,24,1.334,0),h6:b(d,20,1.6,.15),subtitle1:b(c,16,1.75,.15),subtitle2:b(d,14,1.57,.1),body1:b(c,16,1.5,.15),body2:b(c,14,1.43,.15),button:b(d,14,1.75,.4,R),caption:b(c,12,1.66,.4),overline:b(c,12,2.66,1,R),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return(0,i.A)((0,r.A)({htmlFontSize:p,pxToRem:A,fontFamily:a,fontSize:l,fontWeightLight:s,fontWeightRegular:c,fontWeightMedium:d,fontWeightBold:u},g),m,{clone:!1})}function O(...e){return[`${e[0]}px ${e[1]}px ${e[2]}px ${e[3]}px rgba(0,0,0,0.2)`,`${e[4]}px ${e[5]}px ${e[6]}px ${e[7]}px rgba(0,0,0,0.14)`,`${e[8]}px ${e[9]}px ${e[10]}px ${e[11]}px rgba(0,0,0,0.12)`].join(",")}const C=["none",O(0,2,1,-1,0,1,1,0,0,1,3,0),O(0,3,1,-2,0,2,2,0,0,1,5,0),O(0,3,3,-2,0,3,4,0,0,1,8,0),O(0,2,4,-1,0,4,5,0,0,1,10,0),O(0,3,5,-1,0,5,8,0,0,1,14,0),O(0,3,5,-1,0,6,10,0,0,1,18,0),O(0,4,5,-2,0,7,10,1,0,2,16,1),O(0,5,5,-3,0,8,10,1,0,3,14,2),O(0,5,6,-3,0,9,12,1,0,3,16,2),O(0,6,6,-3,0,10,14,1,0,4,18,3),O(0,6,7,-4,0,11,15,1,0,4,20,3),O(0,7,8,-4,0,12,17,2,0,5,22,4),O(0,7,8,-4,0,13,19,2,0,5,24,4),O(0,7,9,-4,0,14,21,2,0,5,26,4),O(0,8,9,-5,0,15,22,2,0,6,28,5),O(0,8,10,-5,0,16,24,2,0,6,30,5),O(0,8,11,-5,0,17,26,2,0,6,32,5),O(0,9,11,-5,0,18,28,2,0,7,34,6),O(0,9,12,-6,0,19,29,2,0,7,36,6),O(0,10,13,-6,0,20,31,3,0,8,38,7),O(0,10,13,-6,0,21,33,3,0,8,40,7),O(0,10,14,-6,0,22,35,3,0,8,42,7),O(0,11,14,-7,0,23,36,3,0,9,44,8),O(0,11,15,-7,0,24,38,3,0,9,46,8)];var I=n(7091);const E={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},M=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];const N=function(e={},...t){const{mixins:n={},palette:S={},transitions:R={},typography:P={}}=e,O=(0,o.A)(e,M);if(e.vars)throw new Error((0,a.A)(18));const N=function(e){const{mode:t="light",contrastThreshold:n=3,tonalOffset:l=.2}=e,s=(0,o.A)(e,g),c=e.primary||function(e="light"){return"dark"===e?{main:v[200],light:v[50],dark:v[400]}:{main:v[700],light:v[400],dark:v[800]}}(t),S=e.secondary||function(e="light"){return"dark"===e?{main:f[200],light:f[50],dark:f[400]}:{main:f[500],light:f[300],dark:f[700]}}(t),R=e.error||function(e="light"){return"dark"===e?{main:h[500],light:h[300],dark:h[700]}:{main:h[700],light:h[400],dark:h[800]}}(t),P=e.info||function(e="light"){return"dark"===e?{main:A[400],light:A[300],dark:A[700]}:{main:A[700],light:A[500],dark:A[900]}}(t),k=e.success||function(e="light"){return"dark"===e?{main:b[400],light:b[300],dark:b[700]}:{main:b[800],light:b[500],dark:b[900]}}(t),O=e.warning||function(e="light"){return"dark"===e?{main:m[400],light:m[300],dark:m[700]}:{main:"#ed6c02",light:m[500],dark:m[900]}}(t);function C(e){return(0,d.eM)(e,x.text.primary)>=n?x.text.primary:y.text.primary}const I=({color:e,name:t,mainShade:n=500,lightShade:o=300,darkShade:i=700})=>{if(!(e=(0,r.A)({},e)).main&&e[n]&&(e.main=e[n]),!e.hasOwnProperty("main"))throw new Error((0,a.A)(11,t?` (${t})`:"",n));if("string"!=typeof e.main)throw new Error((0,a.A)(12,t?` (${t})`:"",JSON.stringify(e.main)));return w(e,"light",o,l),w(e,"dark",i,l),e.contrastText||(e.contrastText=C(e.main)),e},E={dark:x,light:y};return(0,i.A)((0,r.A)({common:(0,r.A)({},u),mode:t,primary:I({color:c,name:"primary"}),secondary:I({color:S,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:I({color:R,name:"error"}),warning:I({color:O,name:"warning"}),info:I({color:P,name:"info"}),success:I({color:k,name:"success"}),grey:p,contrastThreshold:n,getContrastText:C,augmentColor:I,tonalOffset:l},E[t]),s)}(S),F=(0,c.A)(e);let $=(0,i.A)(F,{mixins:(T=F.breakpoints,W=n,(0,r.A)({toolbar:{minHeight:56,[T.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[T.up("sm")]:{minHeight:64}}},W)),palette:N,shadows:C.slice(),typography:k(N,P),transitions:(0,I.Ay)(R),zIndex:(0,r.A)({},E)});var T,W;return $=(0,i.A)($,O),$=t.reduce(((e,t)=>(0,i.A)(e,t)),$),$.unstable_sxConfig=(0,r.A)({},l.A,null==O?void 0:O.unstable_sxConfig),$.unstable_sx=function(e){return(0,s.A)({sx:e,theme:this})},$}},7091:(e,t,n)=>{n.d(t,{Ay:()=>d,p0:()=>l});var r=n(8587),o=n(8168);const a=["duration","easing","delay"],i={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},l={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function s(e){return`${Math.round(e)}ms`}function c(e){if(!e)return 0;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}function d(e){const t=(0,o.A)({},i,e.easing),n=(0,o.A)({},l,e.duration);return(0,o.A)({getAutoHeightDuration:c,create:(e=["all"],o={})=>{const{duration:i=n.standard,easing:l=t.easeInOut,delay:c=0}=o;return(0,r.A)(o,a),(Array.isArray(e)?e:[e]).map((e=>`${e} ${"string"==typeof i?i:s(i)} ${l} ${"string"==typeof c?c:s(c)}`)).join(",")}},e,{easing:t,duration:n})}},2765:(e,t,n)=>{n.d(t,{A:()=>r});const r=(0,n(6544).A)()},8312:(e,t,n)=>{n.d(t,{A:()=>r});const r="$$material"},9770:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(4438);const o=e=>(0,r.A)(e)&&"classes"!==e},4438:(e,t,n)=>{n.d(t,{A:()=>r});const r=function(e){return"ownerState"!==e&&"theme"!==e&&"sx"!==e&&"as"!==e}},1848:(e,t,n)=>{n.d(t,{Ay:()=>l});var r=n(6461),o=n(2765),a=n(8312),i=n(9770);const l=(0,r.Ay)({themeId:a.A,defaultTheme:o.A,rootShouldForwardProp:i.A})},4675:(e,t,n)=>{n.d(t,{A:()=>i}),n(6540);var r=n(2858),o=n(2765),a=n(8312);function i(){const e=(0,r.A)(o.A);return e[a.A]||e}},5186:(e,t,n)=>{n.d(t,{c:()=>o,q:()=>r});const r=e=>e.scrollTop;function o(e,t){var n,r;const{timeout:o,easing:a,style:i={}}=e;return{duration:null!=(n=i.transitionDuration)?n:"number"==typeof o?o:o[t.mode]||0,easing:null!=(r=i.transitionTimingFunction)?r:"object"==typeof a?a[t.mode]:a,delay:i.transitionDelay}}},8466:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(3967).A},5003:(e,t,n)=>{n.d(t,{A:()=>g});var r=n(8168),o=n(6540),a=n(8587),i=n(4164),l=n(5659),s=n(8466),c=n(5669),d=n(1848),u=n(8413),p=n(1609);function f(e){return(0,p.Ay)("MuiSvgIcon",e)}(0,u.A)("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);var h=n(4848);const m=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],v=(0,d.Ay)("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,"inherit"!==n.color&&t[`color${(0,s.A)(n.color)}`],t[`fontSize${(0,s.A)(n.fontSize)}`]]}})((({theme:e,ownerState:t})=>{var n,r,o,a,i,l,s,c,d,u,p,f,h;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:t.hasSvgAsChild?void 0:"currentColor",flexShrink:0,transition:null==(n=e.transitions)||null==(r=n.create)?void 0:r.call(n,"fill",{duration:null==(o=e.transitions)||null==(o=o.duration)?void 0:o.shorter}),fontSize:{inherit:"inherit",small:(null==(a=e.typography)||null==(i=a.pxToRem)?void 0:i.call(a,20))||"1.25rem",medium:(null==(l=e.typography)||null==(s=l.pxToRem)?void 0:s.call(l,24))||"1.5rem",large:(null==(c=e.typography)||null==(d=c.pxToRem)?void 0:d.call(c,35))||"2.1875rem"}[t.fontSize],color:null!=(u=null==(p=(e.vars||e).palette)||null==(p=p[t.color])?void 0:p.main)?u:{action:null==(f=(e.vars||e).palette)||null==(f=f.action)?void 0:f.active,disabled:null==(h=(e.vars||e).palette)||null==(h=h.action)?void 0:h.disabled,inherit:void 0}[t.color]}})),A=o.forwardRef((function(e,t){const n=(0,c.b)({props:e,name:"MuiSvgIcon"}),{children:d,className:u,color:p="inherit",component:A="svg",fontSize:b="medium",htmlColor:g,inheritViewBox:y=!1,titleAccess:x,viewBox:w="0 0 24 24"}=n,S=(0,a.A)(n,m),R=o.isValidElement(d)&&"svg"===d.type,P=(0,r.A)({},n,{color:p,component:A,fontSize:b,instanceFontSize:e.fontSize,inheritViewBox:y,viewBox:w,hasSvgAsChild:R}),k={};y||(k.viewBox=w);const O=(e=>{const{color:t,fontSize:n,classes:r}=e,o={root:["root","inherit"!==t&&`color${(0,s.A)(t)}`,`fontSize${(0,s.A)(n)}`]};return(0,l.A)(o,f,r)})(P);return(0,h.jsxs)(v,(0,r.A)({as:A,className:(0,i.A)(O.root,u),focusable:"false",color:g,"aria-hidden":!x||void 0,role:x?"img":void 0,ref:t},k,S,R&&d.props,{ownerState:P,children:[R?d.props.children:d,x?(0,h.jsx)("title",{children:x}):null]}))}));A.muiName="SvgIcon";const b=A;function g(e,t){function n(n,o){return(0,h.jsx)(b,(0,r.A)({"data-testid":`${t}Icon`,ref:o},n,{children:e}))}return n.muiName=b.muiName,o.memo(o.forwardRef(n))}},1935:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(4705).A},7167:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(3205).A},2070:(e,t,n)=>{n.r(t),n.d(t,{capitalize:()=>o.A,createChainedFunction:()=>a,createSvgIcon:()=>i.A,debounce:()=>l.A,deprecatedPropType:()=>s,isMuiElement:()=>c.A,ownerDocument:()=>d.A,ownerWindow:()=>u.A,requirePropFactory:()=>p,setRef:()=>f,unstable_ClassNameGenerator:()=>x,unstable_useEnhancedEffect:()=>h.A,unstable_useId:()=>m,unsupportedProp:()=>v,useControlled:()=>A.A,useEventCallback:()=>b.A,useForkRef:()=>g.A,useIsFocusVisible:()=>y.A});var r=n(9071),o=n(8466);const a=n(6673).A;var i=n(5003),l=n(1935);const s=n(859).A;var c=n(6767),d=n(6248),u=n(3749);const p=n(9931).A,f=n(7365).A;var h=n(2778);const m=n(4661).A,v=n(4149).A;var A=n(1159),b=n(3034),g=n(6852),y=n(8851);const x={configure:e=>{r.A.configure(e)}}},6767:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(8473).A},6248:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(2325).A},3749:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(4877).A},1159:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(2501).A},2778:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(1529).A},3034:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(1547).A},6852:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(1523).A},8851:(e,t,n)=>{n.d(t,{A:()=>r});const r=n(3313).A},6025:(e,t,n)=>{n.d(t,{A:()=>p});var r=n(8168),o=n(8587),a=n(1523),i=n(2879),l=n(6677),s=n(2505);const c=["className","elementType","ownerState","externalForwardedProps","getSlotOwnerState","internalForwardedProps"],d=["component","slots","slotProps"],u=["component"];function p(e,t){const{className:n,elementType:p,ownerState:f,externalForwardedProps:h,getSlotOwnerState:m,internalForwardedProps:v}=t,A=(0,o.A)(t,c),{component:b,slots:g={[e]:void 0},slotProps:y={[e]:void 0}}=h,x=(0,o.A)(h,d),w=g[e]||p,S=(0,l.A)(y[e],f),R=(0,s.A)((0,r.A)({className:n},A,{externalForwardedProps:"root"===e?x:void 0,externalSlotProps:S})),{props:{component:P},internalRef:k}=R,O=(0,o.A)(R.props,u),C=(0,a.A)(k,null==S?void 0:S.ref,t.ref),I=m?m(O):{},E=(0,r.A)({},f,I),M="root"===e?P||b:P,N=(0,i.A)(w,(0,r.A)({},"root"===e&&!b&&!g[e]&&v,"root"!==e&&!g[e]&&v,O,M&&{as:M},{ref:C}),E);return Object.keys(I).forEach((e=>{delete N[e]})),[w,N]}}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxJQUFLLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxJQUFLLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxJQUFLLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsRUFBRyxJQUFLLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFHLEVBQUcsR0FBSSxHQUFJQSxFQUFhLEVBQUcsR0FBSSxJQUFLLEVBQUcsRUFBRyxHQUFJLEdBQUksRUFBRyxFQUFH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aUMsU0FBVHJKLEVBQWtCbUMsT0FBUXdHLEVBQ2xETSxrQkFBbUJra0IsTUFHbkJqdEIsT0FDRWdDLFVBQVdtckIsR0FDWixZQUNEQyxHQUNFRixFQUNKRyxHQUFjLE9BQThCSCxFQUFnQmx0QixNQUFPMEMsR0FDL0RaLEdBQU0sT0FBV3NyQixFQUF3QyxNQUEzQkgsT0FBa0MsRUFBU0EsRUFBd0JuckIsSUFBSzZxQixFQUFXN3FCLEtBQ2pId3JCLEVBQWlCVCxFQUFvQkEsRUFBa0JRLEdBQWUsQ0FBQyxFQUN2RUUsR0FBa0IsT0FBUyxDQUFDLEVBQUdydEIsRUFBWW90QixHQUMzQ0UsRUFBeUIsU0FBVDF0QixFQUFrQnF0QixHQUFpQkgsRUFBZ0JHLEVBQ25FbnRCLEdBQVEsT0FBaUI4SSxHQUFhLE9BQVMsQ0FBQyxFQUFZLFNBQVRoSixJQUFvQmt0QixJQUFrQjdxQixFQUFNckMsSUFBU2d0QixFQUFpQyxTQUFUaHRCLElBQW9CcUMsRUFBTXJDLElBQVNndEIsRUFBd0JPLEVBQWFHLEdBQWlCLENBQzdObHJCLEdBQUlrckIsR0FDSCxDQUNEMXJCLFFBQ0V5ckIsR0FJSixPQUhBalksT0FBT3FHLEtBQUsyUixHQUFnQnJPLFNBQVF3TyxXQUMzQnp0QixFQUFNeXRCLEVBQVMsSUFFakIsQ0FBQzNrQixFQUFhOUksRUFDdkIsQyIsInNvdXJjZXMiOlsid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9nZXRPdmVybGF5QWxwaGEuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUGFwZXIvcGFwZXJDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BhcGVyL1BhcGVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BvcG92ZXIvcG9wb3ZlckNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUG9wb3Zlci9Qb3BvdmVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BvcnRhbC9Qb3J0YWwuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU3RhY2svU3RhY2suanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvT3V0bGluZWRJbnB1dC9Ob3RjaGVkT3V0bGluZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9PdXRsaW5lZElucHV0L291dGxpbmVkSW5wdXRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL091dGxpbmVkSW5wdXQvT3V0bGluZWRJbnB1dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9OYXRpdmVTZWxlY3QvbmF0aXZlU2VsZWN0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9OYXRpdmVTZWxlY3QvTmF0aXZlU2VsZWN0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU2VsZWN0L3NlbGVjdENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU2VsZWN0L1NlbGVjdElucHV0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9BcnJvd0Ryb3BEb3duLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1NlbGVjdC9TZWxlY3QuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVGV4dEZpZWxkL3RleHRGaWVsZENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVGV4dEZpZWxkL1RleHRGaWVsZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9UZXh0YXJlYUF1dG9zaXplL1RleHRhcmVhQXV0b3NpemUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVG9vbGJhci90b29sYmFyQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Ub29sYmFyL1Rvb2xiYXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeS90eXBvZ3JhcGh5Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5L1R5cG9ncmFwaHkuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVW5zdGFibGVfVHJhcEZvY3VzL0ZvY3VzVHJhcC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvVGhlbWVQcm92aWRlci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvY29tbW9uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9ncmV5LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9wdXJwbGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL3JlZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvb3JhbmdlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9ibHVlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9saWdodEJsdWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2dyZWVuLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVQYWxldHRlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUeXBvZ3JhcGh5LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zaGFkb3dzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy96SW5kZXguanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZVRoZW1lLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVNaXhpbnMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZVRyYW5zaXRpb25zLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9kZWZhdWx0VGhlbWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2lkZW50aWZpZXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3Jvb3RTaG91bGRGb3J3YXJkUHJvcC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvc2xvdFNob3VsZEZvcndhcmRQcm9wLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zdHlsZWQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3VzZVRoZW1lLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3RyYW5zaXRpb25zL3V0aWxzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2NhcGl0YWxpemUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU3ZnSWNvbi9zdmdJY29uQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TdmdJY29uL1N2Z0ljb24uanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvY3JlYXRlU3ZnSWNvbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9kZWJvdW5jZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9nZXRTY3JvbGxiYXJTaXplLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2NyZWF0ZUNoYWluZWRGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9kZXByZWNhdGVkUHJvcFR5cGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvcmVxdWlyZVByb3BGYWN0b3J5LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3NldFJlZi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VJZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91bnN1cHBvcnRlZFByb3AuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvaXNNdWlFbGVtZW50LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL293bmVyRG9jdW1lbnQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvb3duZXJXaW5kb3cuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlQ29udHJvbGxlZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VFbmhhbmNlZEVmZmVjdC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VFdmVudENhbGxiYWNrLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUZvcmtSZWYuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlU2xvdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vbWF0ZXJpYWwtY29tcG9uZW50cy9tYXRlcmlhbC1jb21wb25lbnRzLWlvcy9ibG9iL2JjYTM2MTA3NDA1NTk0ZDViN2IxNjI2NWE1YjBlZDY5OGY4NWE1ZWUvY29tcG9uZW50cy9FbGV2YXRpb24vc3JjL1VJQ29sb3IlMkJNYXRlcmlhbEVsZXZhdGlvbi5tI0w2MVxuY29uc3QgZ2V0T3ZlcmxheUFscGhhID0gZWxldmF0aW9uID0+IHtcbiAgbGV0IGFscGhhVmFsdWU7XG4gIGlmIChlbGV2YXRpb24gPCAxKSB7XG4gICAgYWxwaGFWYWx1ZSA9IDUuMTE5MTYgKiBlbGV2YXRpb24gKiogMjtcbiAgfSBlbHNlIHtcbiAgICBhbHBoYVZhbHVlID0gNC41ICogTWF0aC5sb2coZWxldmF0aW9uICsgMSkgKyAyO1xuICB9XG4gIHJldHVybiAoYWxwaGFWYWx1ZSAvIDEwMCkudG9GaXhlZCgyKTtcbn07XG5leHBvcnQgZGVmYXVsdCBnZXRPdmVybGF5QWxwaGE7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXBlclV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpUGFwZXInLCBzbG90KTtcbn1cbmNvbnN0IHBhcGVyQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVBhcGVyJywgWydyb290JywgJ3JvdW5kZWQnLCAnb3V0bGluZWQnLCAnZWxldmF0aW9uJywgJ2VsZXZhdGlvbjAnLCAnZWxldmF0aW9uMScsICdlbGV2YXRpb24yJywgJ2VsZXZhdGlvbjMnLCAnZWxldmF0aW9uNCcsICdlbGV2YXRpb241JywgJ2VsZXZhdGlvbjYnLCAnZWxldmF0aW9uNycsICdlbGV2YXRpb244JywgJ2VsZXZhdGlvbjknLCAnZWxldmF0aW9uMTAnLCAnZWxldmF0aW9uMTEnLCAnZWxldmF0aW9uMTInLCAnZWxldmF0aW9uMTMnLCAnZWxldmF0aW9uMTQnLCAnZWxldmF0aW9uMTUnLCAnZWxldmF0aW9uMTYnLCAnZWxldmF0aW9uMTcnLCAnZWxldmF0aW9uMTgnLCAnZWxldmF0aW9uMTknLCAnZWxldmF0aW9uMjAnLCAnZWxldmF0aW9uMjEnLCAnZWxldmF0aW9uMjInLCAnZWxldmF0aW9uMjMnLCAnZWxldmF0aW9uMjQnXSk7XG5leHBvcnQgZGVmYXVsdCBwYXBlckNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZWxldmF0aW9uXCIsIFwic3F1YXJlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBpbnRlZ2VyUHJvcFR5cGUgZnJvbSAnQG11aS91dGlscy9pbnRlZ2VyUHJvcFR5cGUnO1xuaW1wb3J0IGNoYWluUHJvcFR5cGVzIGZyb20gJ0BtdWkvdXRpbHMvY2hhaW5Qcm9wVHlwZXMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgZ2V0T3ZlcmxheUFscGhhIGZyb20gJy4uL3N0eWxlcy9nZXRPdmVybGF5QWxwaGEnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgeyBnZXRQYXBlclV0aWxpdHlDbGFzcyB9IGZyb20gJy4vcGFwZXJDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgc3F1YXJlLFxuICAgIGVsZXZhdGlvbixcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsICFzcXVhcmUgJiYgJ3JvdW5kZWQnLCB2YXJpYW50ID09PSAnZWxldmF0aW9uJyAmJiBgZWxldmF0aW9uJHtlbGV2YXRpb259YF1cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRQYXBlclV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgUGFwZXJSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlQYXBlcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgIW93bmVyU3RhdGUuc3F1YXJlICYmIHN0eWxlcy5yb3VuZGVkLCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdlbGV2YXRpb24nICYmIHN0eWxlc1tgZWxldmF0aW9uJHtvd25lclN0YXRlLmVsZXZhdGlvbn1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfdGhlbWUkdmFycyRvdmVybGF5cztcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmJhY2tncm91bmQucGFwZXIsXG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeSxcbiAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ2JveC1zaGFkb3cnKVxuICB9LCAhb3duZXJTdGF0ZS5zcXVhcmUgJiYge1xuICAgIGJvcmRlclJhZGl1czogdGhlbWUuc2hhcGUuYm9yZGVyUmFkaXVzXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZGl2aWRlcn1gXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2VsZXZhdGlvbicgJiYgX2V4dGVuZHMoe1xuICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3Nbb3duZXJTdGF0ZS5lbGV2YXRpb25dXG4gIH0sICF0aGVtZS52YXJzICYmIHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2RhcmsnICYmIHtcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IGBsaW5lYXItZ3JhZGllbnQoJHthbHBoYSgnI2ZmZicsIGdldE92ZXJsYXlBbHBoYShvd25lclN0YXRlLmVsZXZhdGlvbikpfSwgJHthbHBoYSgnI2ZmZicsIGdldE92ZXJsYXlBbHBoYShvd25lclN0YXRlLmVsZXZhdGlvbikpfSlgXG4gIH0sIHRoZW1lLnZhcnMgJiYge1xuICAgIGJhY2tncm91bmRJbWFnZTogKF90aGVtZSR2YXJzJG92ZXJsYXlzID0gdGhlbWUudmFycy5vdmVybGF5cykgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR2YXJzJG92ZXJsYXlzW293bmVyU3RhdGUuZWxldmF0aW9uXVxuICB9KSk7XG59KTtcbmNvbnN0IFBhcGVyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUGFwZXIoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpUGFwZXInXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGVsZXZhdGlvbiA9IDEsXG4gICAgICBzcXVhcmUgPSBmYWxzZSxcbiAgICAgIHZhcmlhbnQgPSAnZWxldmF0aW9uJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGVsZXZhdGlvbixcbiAgICBzcXVhcmUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgICBpZiAodGhlbWUuc2hhZG93c1tlbGV2YXRpb25dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBlbGV2YXRpb24gcHJvdmlkZWQgPFBhcGVyIGVsZXZhdGlvbj17JHtlbGV2YXRpb259fT4gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgdGhlbWUuYCwgYFBsZWFzZSBtYWtlIHN1cmUgdGhhdCBcXGB0aGVtZS5zaGFkb3dzWyR7ZWxldmF0aW9ufV1cXGAgaXMgZGVmaW5lZC5gXS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQYXBlclJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBQYXBlci5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogU2hhZG93IGRlcHRoLCBjb3JyZXNwb25kcyB0byBgZHBgIGluIHRoZSBzcGVjLlxuICAgKiBJdCBhY2NlcHRzIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDI0IGluY2x1c2l2ZS5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgZWxldmF0aW9uOiBjaGFpblByb3BUeXBlcyhpbnRlZ2VyUHJvcFR5cGUsIHByb3BzID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBlbGV2YXRpb24sXG4gICAgICB2YXJpYW50XG4gICAgfSA9IHByb3BzO1xuICAgIGlmIChlbGV2YXRpb24gPiAwICYmIHZhcmlhbnQgPT09ICdvdXRsaW5lZCcpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoYE1VSTogQ29tYmluaW5nIFxcYGVsZXZhdGlvbj17JHtlbGV2YXRpb259fVxcYCB3aXRoIFxcYHZhcmlhbnQ9XCIke3ZhcmlhbnR9XCJcXGAgaGFzIG5vIGVmZmVjdC4gRWl0aGVyIHVzZSBcXGBlbGV2YXRpb249ezB9XFxgIG9yIHVzZSBhIGRpZmZlcmVudCBcXGB2YXJpYW50XFxgLmApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHJvdW5kZWQgY29ybmVycyBhcmUgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzcXVhcmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAnZWxldmF0aW9uJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydlbGV2YXRpb24nLCAnb3V0bGluZWQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFBhcGVyOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wb3ZlclV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpUG9wb3ZlcicsIHNsb3QpO1xufVxuY29uc3QgcG9wb3ZlckNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlQb3BvdmVyJywgWydyb290JywgJ3BhcGVyJ10pO1xuZXhwb3J0IGRlZmF1bHQgcG9wb3ZlckNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wib25FbnRlcmluZ1wiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcImFjdGlvblwiLCBcImFuY2hvckVsXCIsIFwiYW5jaG9yT3JpZ2luXCIsIFwiYW5jaG9yUG9zaXRpb25cIiwgXCJhbmNob3JSZWZlcmVuY2VcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbnRhaW5lclwiLCBcImVsZXZhdGlvblwiLCBcIm1hcmdpblRocmVzaG9sZFwiLCBcIm9wZW5cIiwgXCJQYXBlclByb3BzXCIsIFwic2xvdHNcIiwgXCJzbG90UHJvcHNcIiwgXCJ0cmFuc2Zvcm1PcmlnaW5cIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCIsIFwidHJhbnNpdGlvbkR1cmF0aW9uXCIsIFwiVHJhbnNpdGlvblByb3BzXCIsIFwiZGlzYWJsZVNjcm9sbExvY2tcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJzbG90UHJvcHNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgSFRNTEVsZW1lbnRUeXBlIGZyb20gJ0BtdWkvdXRpbHMvSFRNTEVsZW1lbnRUeXBlJztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYgZnJvbSAnQG11aS91dGlscy9lbGVtZW50VHlwZUFjY2VwdGluZ1JlZic7XG5pbXBvcnQgaW50ZWdlclByb3BUeXBlIGZyb20gJ0BtdWkvdXRpbHMvaW50ZWdlclByb3BUeXBlJztcbmltcG9ydCBjaGFpblByb3BUeXBlcyBmcm9tICdAbXVpL3V0aWxzL2NoYWluUHJvcFR5cGVzJztcbmltcG9ydCB1c2VTbG90UHJvcHMgZnJvbSAnQG11aS91dGlscy91c2VTbG90UHJvcHMnO1xuaW1wb3J0IGlzSG9zdENvbXBvbmVudCBmcm9tICdAbXVpL3V0aWxzL2lzSG9zdENvbXBvbmVudCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJy4uL3V0aWxzL2RlYm91bmNlJztcbmltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJy4uL3V0aWxzL293bmVyRG9jdW1lbnQnO1xuaW1wb3J0IG93bmVyV2luZG93IGZyb20gJy4uL3V0aWxzL293bmVyV2luZG93JztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IEdyb3cgZnJvbSAnLi4vR3Jvdyc7XG5pbXBvcnQgTW9kYWwgZnJvbSAnLi4vTW9kYWwnO1xuaW1wb3J0IFBhcGVyQmFzZSBmcm9tICcuLi9QYXBlcic7XG5pbXBvcnQgeyBnZXRQb3BvdmVyVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9wb3BvdmVyQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9mZnNldFRvcChyZWN0LCB2ZXJ0aWNhbCkge1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgaWYgKHR5cGVvZiB2ZXJ0aWNhbCA9PT0gJ251bWJlcicpIHtcbiAgICBvZmZzZXQgPSB2ZXJ0aWNhbDtcbiAgfSBlbHNlIGlmICh2ZXJ0aWNhbCA9PT0gJ2NlbnRlcicpIHtcbiAgICBvZmZzZXQgPSByZWN0LmhlaWdodCAvIDI7XG4gIH0gZWxzZSBpZiAodmVydGljYWwgPT09ICdib3R0b20nKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC5oZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIG9mZnNldDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRPZmZzZXRMZWZ0KHJlY3QsIGhvcml6b250YWwpIHtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGlmICh0eXBlb2YgaG9yaXpvbnRhbCA9PT0gJ251bWJlcicpIHtcbiAgICBvZmZzZXQgPSBob3Jpem9udGFsO1xuICB9IGVsc2UgaWYgKGhvcml6b250YWwgPT09ICdjZW50ZXInKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC53aWR0aCAvIDI7XG4gIH0gZWxzZSBpZiAoaG9yaXpvbnRhbCA9PT0gJ3JpZ2h0Jykge1xuICAgIG9mZnNldCA9IHJlY3Qud2lkdGg7XG4gIH1cbiAgcmV0dXJuIG9mZnNldDtcbn1cbmZ1bmN0aW9uIGdldFRyYW5zZm9ybU9yaWdpblZhbHVlKHRyYW5zZm9ybU9yaWdpbikge1xuICByZXR1cm4gW3RyYW5zZm9ybU9yaWdpbi5ob3Jpem9udGFsLCB0cmFuc2Zvcm1PcmlnaW4udmVydGljYWxdLm1hcChuID0+IHR5cGVvZiBuID09PSAnbnVtYmVyJyA/IGAke259cHhgIDogbikuam9pbignICcpO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSB7XG4gIHJldHVybiB0eXBlb2YgYW5jaG9yRWwgPT09ICdmdW5jdGlvbicgPyBhbmNob3JFbCgpIDogYW5jaG9yRWw7XG59XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J10sXG4gICAgcGFwZXI6IFsncGFwZXInXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFBvcG92ZXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBQb3BvdmVyUm9vdCA9IHN0eWxlZChNb2RhbCwge1xuICBuYW1lOiAnTXVpUG9wb3ZlcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuZXhwb3J0IGNvbnN0IFBvcG92ZXJQYXBlciA9IHN0eWxlZChQYXBlckJhc2UsIHtcbiAgbmFtZTogJ011aVBvcG92ZXInLFxuICBzbG90OiAnUGFwZXInLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5wYXBlclxufSkoe1xuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gIC8vIFNvIHdlIHNlZSB0aGUgcG9wb3ZlciB3aGVuIGl0J3MgZW1wdHkuXG4gIC8vIEl0J3MgbW9zdCBsaWtlbHkgb24gaXNzdWUgb24gdXNlcmxhbmQuXG4gIG1pbldpZHRoOiAxNixcbiAgbWluSGVpZ2h0OiAxNixcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSAzMnB4KScsXG4gIG1heEhlaWdodDogJ2NhbGMoMTAwJSAtIDMycHgpJyxcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMFxufSk7XG5jb25zdCBQb3BvdmVyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUG9wb3ZlcihpblByb3BzLCByZWYpIHtcbiAgdmFyIF9zbG90UHJvcHMkcGFwZXIsIF9zbG90cyRyb290LCBfc2xvdHMkcGFwZXI7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpUG9wb3ZlcidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGFuY2hvckVsLFxuICAgICAgYW5jaG9yT3JpZ2luID0ge1xuICAgICAgICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAgICAgIGhvcml6b250YWw6ICdsZWZ0J1xuICAgICAgfSxcbiAgICAgIGFuY2hvclBvc2l0aW9uLFxuICAgICAgYW5jaG9yUmVmZXJlbmNlID0gJ2FuY2hvckVsJyxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXJQcm9wLFxuICAgICAgZWxldmF0aW9uID0gOCxcbiAgICAgIG1hcmdpblRocmVzaG9sZCA9IDE2LFxuICAgICAgb3BlbixcbiAgICAgIFBhcGVyUHJvcHM6IFBhcGVyUHJvcHNQcm9wID0ge30sXG4gICAgICBzbG90cyxcbiAgICAgIHNsb3RQcm9wcyxcbiAgICAgIHRyYW5zZm9ybU9yaWdpbiA9IHtcbiAgICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgICBob3Jpem9udGFsOiAnbGVmdCdcbiAgICAgIH0sXG4gICAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gR3JvdyxcbiAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uUHJvcCA9ICdhdXRvJyxcbiAgICAgIFRyYW5zaXRpb25Qcm9wczoge1xuICAgICAgICBvbkVudGVyaW5nXG4gICAgICB9ID0ge30sXG4gICAgICBkaXNhYmxlU2Nyb2xsTG9jayA9IGZhbHNlXG4gICAgfSA9IHByb3BzLFxuICAgIFRyYW5zaXRpb25Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLlRyYW5zaXRpb25Qcm9wcywgX2V4Y2x1ZGVkKSxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQyKTtcbiAgY29uc3QgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcyA9IChfc2xvdFByb3BzJHBhcGVyID0gc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMucGFwZXIpICE9IG51bGwgPyBfc2xvdFByb3BzJHBhcGVyIDogUGFwZXJQcm9wc1Byb3A7XG4gIGNvbnN0IHBhcGVyUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGhhbmRsZVBhcGVyUmVmID0gdXNlRm9ya1JlZihwYXBlclJlZiwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcy5yZWYpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYW5jaG9yT3JpZ2luLFxuICAgIGFuY2hvclJlZmVyZW5jZSxcbiAgICBlbGV2YXRpb24sXG4gICAgbWFyZ2luVGhyZXNob2xkLFxuICAgIGV4dGVybmFsUGFwZXJTbG90UHJvcHMsXG4gICAgdHJhbnNmb3JtT3JpZ2luLFxuICAgIFRyYW5zaXRpb25Db21wb25lbnQsXG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb25Qcm9wLFxuICAgIFRyYW5zaXRpb25Qcm9wc1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuXG4gIC8vIFJldHVybnMgdGhlIHRvcC9sZWZ0IG9mZnNldCBvZiB0aGUgcG9zaXRpb25cbiAgLy8gdG8gYXR0YWNoIHRvIG9uIHRoZSBhbmNob3IgZWxlbWVudCAob3IgYm9keSBpZiBub25lIGlzIHByb3ZpZGVkKVxuICBjb25zdCBnZXRBbmNob3JPZmZzZXQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGFuY2hvclJlZmVyZW5jZSA9PT0gJ2FuY2hvclBvc2l0aW9uJykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFhbmNob3JQb3NpdGlvbikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogWW91IG5lZWQgdG8gcHJvdmlkZSBhIGBhbmNob3JQb3NpdGlvbmAgcHJvcCB3aGVuIHVzaW5nICcgKyAnPFBvcG92ZXIgYW5jaG9yUmVmZXJlbmNlPVwiYW5jaG9yUG9zaXRpb25cIiAvPi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFuY2hvclBvc2l0aW9uO1xuICAgIH1cbiAgICBjb25zdCByZXNvbHZlZEFuY2hvckVsID0gcmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKTtcblxuICAgIC8vIElmIGFuIGFuY2hvciBlbGVtZW50IHdhc24ndCBwcm92aWRlZCwganVzdCB1c2UgdGhlIHBhcmVudCBib2R5IGVsZW1lbnQgb2YgdGhpcyBQb3BvdmVyXG4gICAgY29uc3QgYW5jaG9yRWxlbWVudCA9IHJlc29sdmVkQW5jaG9yRWwgJiYgcmVzb2x2ZWRBbmNob3JFbC5ub2RlVHlwZSA9PT0gMSA/IHJlc29sdmVkQW5jaG9yRWwgOiBvd25lckRvY3VtZW50KHBhcGVyUmVmLmN1cnJlbnQpLmJvZHk7XG4gICAgY29uc3QgYW5jaG9yUmVjdCA9IGFuY2hvckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGJveCA9IGFuY2hvckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJiBib3gudG9wID09PSAwICYmIGJveC5sZWZ0ID09PSAwICYmIGJveC5yaWdodCA9PT0gMCAmJiBib3guYm90dG9tID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgJ1RoZSBhbmNob3IgZWxlbWVudCBzaG91bGQgYmUgcGFydCBvZiB0aGUgZG9jdW1lbnQgbGF5b3V0LicsIFwiTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHByZXNlbnQgaW4gdGhlIGRvY3VtZW50IG9yIHRoYXQgaXQncyBub3QgZGlzcGxheSBub25lLlwiXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0b3A6IGFuY2hvclJlY3QudG9wICsgZ2V0T2Zmc2V0VG9wKGFuY2hvclJlY3QsIGFuY2hvck9yaWdpbi52ZXJ0aWNhbCksXG4gICAgICBsZWZ0OiBhbmNob3JSZWN0LmxlZnQgKyBnZXRPZmZzZXRMZWZ0KGFuY2hvclJlY3QsIGFuY2hvck9yaWdpbi5ob3Jpem9udGFsKVxuICAgIH07XG4gIH0sIFthbmNob3JFbCwgYW5jaG9yT3JpZ2luLmhvcml6b250YWwsIGFuY2hvck9yaWdpbi52ZXJ0aWNhbCwgYW5jaG9yUG9zaXRpb24sIGFuY2hvclJlZmVyZW5jZV0pO1xuXG4gIC8vIFJldHVybnMgdGhlIGJhc2UgdHJhbnNmb3JtIG9yaWdpbiB1c2luZyB0aGUgZWxlbWVudFxuICBjb25zdCBnZXRUcmFuc2Zvcm1PcmlnaW4gPSBSZWFjdC51c2VDYWxsYmFjayhlbGVtUmVjdCA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnRpY2FsOiBnZXRPZmZzZXRUb3AoZWxlbVJlY3QsIHRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbCksXG4gICAgICBob3Jpem9udGFsOiBnZXRPZmZzZXRMZWZ0KGVsZW1SZWN0LCB0cmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbClcbiAgICB9O1xuICB9LCBbdHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwsIHRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbF0pO1xuICBjb25zdCBnZXRQb3NpdGlvbmluZ1N0eWxlID0gUmVhY3QudXNlQ2FsbGJhY2soZWxlbWVudCA9PiB7XG4gICAgY29uc3QgZWxlbVJlY3QgPSB7XG4gICAgICB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICAgIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHRcbiAgICB9O1xuXG4gICAgLy8gR2V0IHRoZSB0cmFuc2Zvcm0gb3JpZ2luIHBvaW50IG9uIHRoZSBlbGVtZW50IGl0c2VsZlxuICAgIGNvbnN0IGVsZW1UcmFuc2Zvcm1PcmlnaW4gPSBnZXRUcmFuc2Zvcm1PcmlnaW4oZWxlbVJlY3QpO1xuICAgIGlmIChhbmNob3JSZWZlcmVuY2UgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiBudWxsLFxuICAgICAgICBsZWZ0OiBudWxsLFxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW46IGdldFRyYW5zZm9ybU9yaWdpblZhbHVlKGVsZW1UcmFuc2Zvcm1PcmlnaW4pXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgb2Zmc2V0IG9mIHRoZSBhbmNob3JpbmcgZWxlbWVudFxuICAgIGNvbnN0IGFuY2hvck9mZnNldCA9IGdldEFuY2hvck9mZnNldCgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGVsZW1lbnQgcG9zaXRpb25pbmdcbiAgICBsZXQgdG9wID0gYW5jaG9yT2Zmc2V0LnRvcCAtIGVsZW1UcmFuc2Zvcm1PcmlnaW4udmVydGljYWw7XG4gICAgbGV0IGxlZnQgPSBhbmNob3JPZmZzZXQubGVmdCAtIGVsZW1UcmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbDtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBlbGVtUmVjdC5oZWlnaHQ7XG4gICAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgZWxlbVJlY3Qud2lkdGg7XG5cbiAgICAvLyBVc2UgdGhlIHBhcmVudCB3aW5kb3cgb2YgdGhlIGFuY2hvckVsIGlmIHByb3ZpZGVkXG4gICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3cocmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSk7XG5cbiAgICAvLyBXaW5kb3cgdGhyZXNob2xkcyB0YWtpbmcgcmVxdWlyZWQgbWFyZ2luIGludG8gYWNjb3VudFxuICAgIGNvbnN0IGhlaWdodFRocmVzaG9sZCA9IGNvbnRhaW5lcldpbmRvdy5pbm5lckhlaWdodCAtIG1hcmdpblRocmVzaG9sZDtcbiAgICBjb25zdCB3aWR0aFRocmVzaG9sZCA9IGNvbnRhaW5lcldpbmRvdy5pbm5lcldpZHRoIC0gbWFyZ2luVGhyZXNob2xkO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHZlcnRpY2FsIGF4aXMgbmVlZHMgc2hpZnRpbmdcbiAgICBpZiAobWFyZ2luVGhyZXNob2xkICE9PSBudWxsICYmIHRvcCA8IG1hcmdpblRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IHRvcCAtIG1hcmdpblRocmVzaG9sZDtcbiAgICAgIHRvcCAtPSBkaWZmO1xuICAgICAgZWxlbVRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbCArPSBkaWZmO1xuICAgIH0gZWxzZSBpZiAobWFyZ2luVGhyZXNob2xkICE9PSBudWxsICYmIGJvdHRvbSA+IGhlaWdodFRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IGJvdHRvbSAtIGhlaWdodFRocmVzaG9sZDtcbiAgICAgIHRvcCAtPSBkaWZmO1xuICAgICAgZWxlbVRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbCArPSBkaWZmO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGVsZW1SZWN0LmhlaWdodCA+IGhlaWdodFRocmVzaG9sZCAmJiBlbGVtUmVjdC5oZWlnaHQgJiYgaGVpZ2h0VGhyZXNob2xkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBwb3BvdmVyIGNvbXBvbmVudCBpcyB0b28gdGFsbC4nLCBgU29tZSBwYXJ0IG9mIGl0IGNhbiBub3QgYmUgc2VlbiBvbiB0aGUgc2NyZWVuICgke2VsZW1SZWN0LmhlaWdodCAtIGhlaWdodFRocmVzaG9sZH1weCkuYCwgJ1BsZWFzZSBjb25zaWRlciBhZGRpbmcgYSBgbWF4LWhlaWdodGAgdG8gaW1wcm92ZSB0aGUgdXNlci1leHBlcmllbmNlLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgaG9yaXpvbnRhbCBheGlzIG5lZWRzIHNoaWZ0aW5nXG4gICAgaWYgKG1hcmdpblRocmVzaG9sZCAhPT0gbnVsbCAmJiBsZWZ0IDwgbWFyZ2luVGhyZXNob2xkKSB7XG4gICAgICBjb25zdCBkaWZmID0gbGVmdCAtIG1hcmdpblRocmVzaG9sZDtcbiAgICAgIGxlZnQgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbCArPSBkaWZmO1xuICAgIH0gZWxzZSBpZiAocmlnaHQgPiB3aWR0aFRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IHJpZ2h0IC0gd2lkdGhUaHJlc2hvbGQ7XG4gICAgICBsZWZ0IC09IGRpZmY7XG4gICAgICBlbGVtVHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwgKz0gZGlmZjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogYCR7TWF0aC5yb3VuZCh0b3ApfXB4YCxcbiAgICAgIGxlZnQ6IGAke01hdGgucm91bmQobGVmdCl9cHhgLFxuICAgICAgdHJhbnNmb3JtT3JpZ2luOiBnZXRUcmFuc2Zvcm1PcmlnaW5WYWx1ZShlbGVtVHJhbnNmb3JtT3JpZ2luKVxuICAgIH07XG4gIH0sIFthbmNob3JFbCwgYW5jaG9yUmVmZXJlbmNlLCBnZXRBbmNob3JPZmZzZXQsIGdldFRyYW5zZm9ybU9yaWdpbiwgbWFyZ2luVGhyZXNob2xkXSk7XG4gIGNvbnN0IFtpc1Bvc2l0aW9uZWQsIHNldElzUG9zaXRpb25lZF0gPSBSZWFjdC51c2VTdGF0ZShvcGVuKTtcbiAgY29uc3Qgc2V0UG9zaXRpb25pbmdTdHlsZXMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IHBhcGVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBvc2l0aW9uaW5nID0gZ2V0UG9zaXRpb25pbmdTdHlsZShlbGVtZW50KTtcbiAgICBpZiAocG9zaXRpb25pbmcudG9wICE9PSBudWxsKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IHBvc2l0aW9uaW5nLnRvcDtcbiAgICB9XG4gICAgaWYgKHBvc2l0aW9uaW5nLmxlZnQgIT09IG51bGwpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IHBvc2l0aW9uaW5nLmxlZnQ7XG4gICAgfVxuICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gcG9zaXRpb25pbmcudHJhbnNmb3JtT3JpZ2luO1xuICAgIHNldElzUG9zaXRpb25lZCh0cnVlKTtcbiAgfSwgW2dldFBvc2l0aW9uaW5nU3R5bGVdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZVNjcm9sbExvY2spIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzZXRQb3NpdGlvbmluZ1N0eWxlcyk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2V0UG9zaXRpb25pbmdTdHlsZXMpO1xuICB9LCBbYW5jaG9yRWwsIGRpc2FibGVTY3JvbGxMb2NrLCBzZXRQb3NpdGlvbmluZ1N0eWxlc10pO1xuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IChlbGVtZW50LCBpc0FwcGVhcmluZykgPT4ge1xuICAgIGlmIChvbkVudGVyaW5nKSB7XG4gICAgICBvbkVudGVyaW5nKGVsZW1lbnQsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gICAgc2V0UG9zaXRpb25pbmdTdHlsZXMoKTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gKCkgPT4ge1xuICAgIHNldElzUG9zaXRpb25lZChmYWxzZSk7XG4gIH07XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gICAgfVxuICB9KTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb24sICgpID0+IG9wZW4gPyB7XG4gICAgdXBkYXRlUG9zaXRpb246ICgpID0+IHtcbiAgICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gICAgfVxuICB9IDogbnVsbCwgW29wZW4sIHNldFBvc2l0aW9uaW5nU3R5bGVzXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBoYW5kbGVSZXNpemUgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICBzZXRQb3NpdGlvbmluZ1N0eWxlcygpO1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpbmRvdyA9IG93bmVyV2luZG93KGFuY2hvckVsKTtcbiAgICBjb250YWluZXJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaGFuZGxlUmVzaXplLmNsZWFyKCk7XG4gICAgICBjb250YWluZXJXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICB9O1xuICB9LCBbYW5jaG9yRWwsIG9wZW4sIHNldFBvc2l0aW9uaW5nU3R5bGVzXSk7XG4gIGxldCB0cmFuc2l0aW9uRHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb25Qcm9wO1xuICBpZiAodHJhbnNpdGlvbkR1cmF0aW9uUHJvcCA9PT0gJ2F1dG8nICYmICFUcmFuc2l0aW9uQ29tcG9uZW50Lm11aVN1cHBvcnRBdXRvKSB7XG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gSWYgdGhlIGNvbnRhaW5lciBwcm9wIGlzIHByb3ZpZGVkLCB1c2UgdGhhdFxuICAvLyBJZiB0aGUgYW5jaG9yRWwgcHJvcCBpcyBwcm92aWRlZCwgdXNlIGl0cyBwYXJlbnQgYm9keSBlbGVtZW50IGFzIHRoZSBjb250YWluZXJcbiAgLy8gSWYgbmVpdGhlciBhcmUgcHJvdmlkZWQgbGV0IHRoZSBNb2RhbCB0YWtlIGNhcmUgb2YgY2hvb3NpbmcgdGhlIGNvbnRhaW5lclxuICBjb25zdCBjb250YWluZXIgPSBjb250YWluZXJQcm9wIHx8IChhbmNob3JFbCA/IG93bmVyRG9jdW1lbnQocmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSkuYm9keSA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9zbG90cyRyb290ID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IFBvcG92ZXJSb290O1xuICBjb25zdCBQYXBlclNsb3QgPSAoX3Nsb3RzJHBhcGVyID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RzJHBhcGVyIDogUG9wb3ZlclBhcGVyO1xuICBjb25zdCBwYXBlclByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogUGFwZXJTbG90LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBfZXh0ZW5kcyh7fSwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcywge1xuICAgICAgc3R5bGU6IGlzUG9zaXRpb25lZCA/IGV4dGVybmFsUGFwZXJTbG90UHJvcHMuc3R5bGUgOiBfZXh0ZW5kcyh7fSwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcy5zdHlsZSwge1xuICAgICAgICBvcGFjaXR5OiAwXG4gICAgICB9KVxuICAgIH0pLFxuICAgIGFkZGl0aW9uYWxQcm9wczoge1xuICAgICAgZWxldmF0aW9uLFxuICAgICAgcmVmOiBoYW5kbGVQYXBlclJlZlxuICAgIH0sXG4gICAgb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5wYXBlciwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxQYXBlclNsb3RQcm9wcy5jbGFzc05hbWUpXG4gIH0pO1xuICBjb25zdCBfdXNlU2xvdFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICAgIGVsZW1lbnRUeXBlOiBSb290U2xvdCxcbiAgICAgIGV4dGVybmFsU2xvdFByb3BzOiAoc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMucm9vdCkgfHwge30sXG4gICAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiBvdGhlcixcbiAgICAgIGFkZGl0aW9uYWxQcm9wczoge1xuICAgICAgICByZWYsXG4gICAgICAgIHNsb3RQcm9wczoge1xuICAgICAgICAgIGJhY2tkcm9wOiB7XG4gICAgICAgICAgICBpbnZpc2libGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgb3BlblxuICAgICAgfSxcbiAgICAgIG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gICAgfSksXG4gICAge1xuICAgICAgc2xvdFByb3BzOiByb290U2xvdFByb3BzUHJvcFxuICAgIH0gPSBfdXNlU2xvdFByb3BzLFxuICAgIHJvb3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF91c2VTbG90UHJvcHMsIF9leGNsdWRlZDMpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUm9vdFNsb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsICFpc0hvc3RDb21wb25lbnQoUm9vdFNsb3QpICYmIHtcbiAgICBzbG90UHJvcHM6IHJvb3RTbG90UHJvcHNQcm9wLFxuICAgIGRpc2FibGVTY3JvbGxMb2NrXG4gIH0sIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgYXBwZWFyOiB0cnVlLFxuICAgICAgaW46IG9wZW4sXG4gICAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZyxcbiAgICAgIG9uRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgICB0aW1lb3V0OiB0cmFuc2l0aW9uRHVyYXRpb25cbiAgICB9LCBUcmFuc2l0aW9uUHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChQYXBlclNsb3QsIF9leHRlbmRzKHt9LCBwYXBlclByb3BzLCB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgfSkpXG4gICAgfSkpXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUG9wb3Zlci5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBBIHJlZiBmb3IgaW1wZXJhdGl2ZSBhY3Rpb25zLlxuICAgKiBJdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyB1cGRhdGVQb3NpdGlvbigpIGFjdGlvbi5cbiAgICovXG4gIGFjdGlvbjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgW1BvcG92ZXJWaXJ0dWFsRWxlbWVudF0oL21hdGVyaWFsLXVpL3JlYWN0LXBvcG92ZXIvI3ZpcnR1YWwtZWxlbWVudCksXG4gICAqIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGVpdGhlci5cbiAgICogSXQncyB1c2VkIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqL1xuICBhbmNob3JFbDogY2hhaW5Qcm9wVHlwZXMoUHJvcFR5cGVzLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLCBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzLm9wZW4gJiYgKCFwcm9wcy5hbmNob3JSZWZlcmVuY2UgfHwgcHJvcHMuYW5jaG9yUmVmZXJlbmNlID09PSAnYW5jaG9yRWwnKSkge1xuICAgICAgY29uc3QgcmVzb2x2ZWRBbmNob3JFbCA9IHJlc29sdmVBbmNob3JFbChwcm9wcy5hbmNob3JFbCk7XG4gICAgICBpZiAocmVzb2x2ZWRBbmNob3JFbCAmJiByZXNvbHZlZEFuY2hvckVsLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgIGNvbnN0IGJveCA9IHJlc29sdmVkQW5jaG9yRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmIGJveC50b3AgPT09IDAgJiYgYm94LmxlZnQgPT09IDAgJiYgYm94LnJpZ2h0ID09PSAwICYmIGJveC5ib3R0b20gPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFsnTVVJOiBUaGUgYGFuY2hvckVsYCBwcm9wIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQgaXMgaW52YWxpZC4nLCAnVGhlIGFuY2hvciBlbGVtZW50IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBsYXlvdXQuJywgXCJNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgcHJlc2VudCBpbiB0aGUgZG9jdW1lbnQgb3IgdGhhdCBpdCdzIG5vdCBkaXNwbGF5IG5vbmUuXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgYEl0IHNob3VsZCBiZSBhbiBFbGVtZW50IG9yIFBvcG92ZXJWaXJ0dWFsRWxlbWVudCBpbnN0YW5jZSBidXQgaXQncyBcXGAke3Jlc29sdmVkQW5jaG9yRWx9XFxgIGluc3RlYWQuYF0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBwb2ludCBvbiB0aGUgYW5jaG9yIHdoZXJlIHRoZSBwb3BvdmVyJ3NcbiAgICogYGFuY2hvckVsYCB3aWxsIGF0dGFjaCB0by4gVGhpcyBpcyBub3QgdXNlZCB3aGVuIHRoZVxuICAgKiBhbmNob3JSZWZlcmVuY2UgaXMgJ2FuY2hvclBvc2l0aW9uJy5cbiAgICpcbiAgICogT3B0aW9uczpcbiAgICogdmVydGljYWw6IFt0b3AsIGNlbnRlciwgYm90dG9tXTtcbiAgICogaG9yaXpvbnRhbDogW2xlZnQsIGNlbnRlciwgcmlnaHRdLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgdmVydGljYWw6ICd0b3AnLFxuICAgKiAgIGhvcml6b250YWw6ICdsZWZ0JyxcbiAgICogfVxuICAgKi9cbiAgYW5jaG9yT3JpZ2luOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhvcml6b250YWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdsZWZ0JywgJ3JpZ2h0J10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZCxcbiAgICB2ZXJ0aWNhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ2NlbnRlcicsICd0b3AnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkXG4gIH0pLFxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgcG9zaXRpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKiBUaGUgY29vcmRpbmF0ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBhcHBsaWNhdGlvbidzIGNsaWVudCBhcmVhLlxuICAgKi9cbiAgYW5jaG9yUG9zaXRpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbGVmdDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIHRvcDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG4gIH0pLFxuICAvKipcbiAgICogVGhpcyBkZXRlcm1pbmVzIHdoaWNoIGFuY2hvciBwcm9wIHRvIHJlZmVyIHRvIHdoZW4gc2V0dGluZ1xuICAgKiB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqIEBkZWZhdWx0ICdhbmNob3JFbCdcbiAgICovXG4gIGFuY2hvclJlZmVyZW5jZTogUHJvcFR5cGVzLm9uZU9mKFsnYW5jaG9yRWwnLCAnYW5jaG9yUG9zaXRpb24nLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50LCBjb21wb25lbnQgaW5zdGFuY2UsIG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBlaXRoZXIuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIHBhc3NlZCB0byB0aGUgTW9kYWwgY29tcG9uZW50LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSBib2R5IG9mIHRoZSBhbmNob3JFbCdzIHRvcC1sZXZlbCBkb2N1bWVudCBvYmplY3QsXG4gICAqIHNvIGl0J3Mgc2ltcGx5IGBkb2N1bWVudC5ib2R5YCBtb3N0IG9mIHRoZSB0aW1lLlxuICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHNjcm9sbCBsb2NrIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNjcm9sbExvY2s6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGVsZXZhdGlvbiBvZiB0aGUgcG9wb3Zlci5cbiAgICogQGRlZmF1bHQgOFxuICAgKi9cbiAgZWxldmF0aW9uOiBpbnRlZ2VyUHJvcFR5cGUsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IGNsb3NlIHRvIHRoZSBlZGdlIG9mIHRoZSB3aW5kb3cgdGhlIHBvcG92ZXIgY2FuIGFwcGVhci5cbiAgICogSWYgbnVsbCwgdGhlIHBvcG92ZXIgd2lsbCBub3QgYmUgY29uc3RyYWluZWQgYnkgdGhlIHdpbmRvdy5cbiAgICogQGRlZmF1bHQgMTZcbiAgICovXG4gIG1hcmdpblRocmVzaG9sZDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFRoZSBgcmVhc29uYCBwYXJhbWV0ZXIgY2FuIG9wdGlvbmFsbHkgYmUgdXNlZCB0byBjb250cm9sIHRoZSByZXNwb25zZSB0byBgb25DbG9zZWAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYFBhcGVyYF0oL21hdGVyaWFsLXVpL2FwaS9wYXBlci8pIGVsZW1lbnQuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgYHNsb3RQcm9wcy5wYXBlcmAgYW5kIHdpbGwgYmUgb3ZlcnJpZGVuIGJ5IGl0IGlmIGJvdGggYXJlIHVzZWQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc2xvdFByb3BzLnBhcGVyYCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgUGFwZXJQcm9wczogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8uc2hhcGUoe1xuICAgIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWZcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBwYXBlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgICByb290OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHBhcGVyOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgcG9pbnQgb24gdGhlIHBvcG92ZXIgd2hpY2hcbiAgICogd2lsbCBhdHRhY2ggdG8gdGhlIGFuY2hvcidzIG9yaWdpbi5cbiAgICpcbiAgICogT3B0aW9uczpcbiAgICogdmVydGljYWw6IFt0b3AsIGNlbnRlciwgYm90dG9tLCB4KHB4KV07XG4gICAqIGhvcml6b250YWw6IFtsZWZ0LCBjZW50ZXIsIHJpZ2h0LCB4KHB4KV0uXG4gICAqIEBkZWZhdWx0IHtcbiAgICogICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAqICAgaG9yaXpvbnRhbDogJ2xlZnQnLFxuICAgKiB9XG4gICAqL1xuICB0cmFuc2Zvcm1PcmlnaW46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaG9yaXpvbnRhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY2VudGVyJywgJ2xlZnQnLCAncmlnaHQnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkLFxuICAgIHZlcnRpY2FsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib3R0b20nLCAnY2VudGVyJywgJ3RvcCddKSwgUHJvcFR5cGVzLm51bWJlcl0pLmlzUmVxdWlyZWRcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSB0cmFuc2l0aW9uLlxuICAgKiBbRm9sbG93IHRoaXMgZ3VpZGVdKC9tYXRlcmlhbC11aS90cmFuc2l0aW9ucy8jdHJhbnNpdGlvbmNvbXBvbmVudC1wcm9wKSB0byBsZWFybiBtb3JlIGFib3V0IHRoZSByZXF1aXJlbWVudHMgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBHcm93XG4gICAqL1xuICBUcmFuc2l0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBTZXQgdG8gJ2F1dG8nIHRvIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIHRyYW5zaXRpb24gdGltZSBiYXNlZCBvbiBoZWlnaHQuXG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFwcGVhcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBleGl0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pXSksXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSB0cmFuc2l0aW9uIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBlbGVtZW50IGlzIGJhc2VkIG9uIHRoaXMgW2BUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLykgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgVHJhbnNpdGlvblByb3BzOiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUG9wb3ZlcjsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZXhhY3RQcm9wLCBIVE1MRWxlbWVudFR5cGUsIHVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0IGFzIHVzZUVuaGFuY2VkRWZmZWN0LCB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYsIHVuc3RhYmxlX3NldFJlZiBhcyBzZXRSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBnZXRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIHJldHVybiB0eXBlb2YgY29udGFpbmVyID09PSAnZnVuY3Rpb24nID8gY29udGFpbmVyKCkgOiBjb250YWluZXI7XG59XG5cbi8qKlxuICogUG9ydGFscyBwcm92aWRlIGEgZmlyc3QtY2xhc3Mgd2F5IHRvIHJlbmRlciBjaGlsZHJlbiBpbnRvIGEgRE9NIG5vZGVcbiAqIHRoYXQgZXhpc3RzIG91dHNpZGUgdGhlIERPTSBoaWVyYXJjaHkgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gKlxuICogRGVtb3M6XG4gKlxuICogLSBbUG9ydGFsXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvcmVhY3QtcG9ydGFsLylcbiAqXG4gKiBBUEk6XG4gKlxuICogLSBbUG9ydGFsIEFQSV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2FwaS9wb3J0YWwvKVxuICovXG5jb25zdCBQb3J0YWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBQb3J0YWwocHJvcHMsIGZvcndhcmRlZFJlZikge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY29udGFpbmVyLFxuICAgIGRpc2FibGVQb3J0YWwgPSBmYWxzZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFttb3VudE5vZGUsIHNldE1vdW50Tm9kZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBUT0RPIHVwc3RyZWFtIGZpeFxuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKCAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pID8gY2hpbGRyZW4ucmVmIDogbnVsbCwgZm9yd2FyZGVkUmVmKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZGlzYWJsZVBvcnRhbCkge1xuICAgICAgc2V0TW91bnROb2RlKGdldENvbnRhaW5lcihjb250YWluZXIpIHx8IGRvY3VtZW50LmJvZHkpO1xuICAgIH1cbiAgfSwgW2NvbnRhaW5lciwgZGlzYWJsZVBvcnRhbF0pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1vdW50Tm9kZSAmJiAhZGlzYWJsZVBvcnRhbCkge1xuICAgICAgc2V0UmVmKGZvcndhcmRlZFJlZiwgbW91bnROb2RlKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHNldFJlZihmb3J3YXJkZWRSZWYsIG51bGwpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW2ZvcndhcmRlZFJlZiwgbW91bnROb2RlLCBkaXNhYmxlUG9ydGFsXSk7XG4gIGlmIChkaXNhYmxlUG9ydGFsKSB7XG4gICAgaWYgKCAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICBjb25zdCBuZXdQcm9wcyA9IHtcbiAgICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICAgIH07XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgbmV3UHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmVhY3QuRnJhZ21lbnQsIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBtb3VudE5vZGUgPyAvKiNfX1BVUkVfXyovUmVhY3RET00uY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBtb3VudE5vZGUpIDogbW91bnROb2RlXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBQb3J0YWwucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4g4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNoaWxkcmVuIHRvIHJlbmRlciBpbnRvIHRoZSBgY29udGFpbmVyYC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25lLlxuICAgKiBUaGUgYGNvbnRhaW5lcmAgd2lsbCBoYXZlIHRoZSBwb3J0YWwgY2hpbGRyZW4gYXBwZW5kZWQgdG8gaXQuXG4gICAqXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgY2FsbGJhY2ssIHdoaWNoIGlzIGNhbGxlZCBpbiBhIFJlYWN0IGxheW91dCBlZmZlY3QuXG4gICAqIFRoaXMgbGV0cyB5b3Ugc2V0IHRoZSBjb250YWluZXIgZnJvbSBhIHJlZiwgYW5kIGFsc28gbWFrZXMgc2VydmVyLXNpZGUgcmVuZGVyaW5nIHBvc3NpYmxlLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSBib2R5IG9mIHRoZSB0b3AtbGV2ZWwgZG9jdW1lbnQgb2JqZWN0LFxuICAgKiBzbyBpdCdzIHNpbXBseSBgZG9jdW1lbnQuYm9keWAgbW9zdCBvZiB0aGUgdGltZS5cbiAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBUaGUgYGNoaWxkcmVuYCB3aWxsIGJlIHVuZGVyIHRoZSBET00gaGllcmFyY2h5IG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBvcnRhbDogUHJvcFR5cGVzLmJvb2xcbn0gOiB2b2lkIDA7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgUG9ydGFsWydwcm9wVHlwZXMnICsgJyddID0gZXhhY3RQcm9wKFBvcnRhbC5wcm9wVHlwZXMpO1xufVxuZXhwb3J0IGRlZmF1bHQgUG9ydGFsOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVN0YWNrIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmNvbnN0IFN0YWNrID0gY3JlYXRlU3RhY2soe1xuICBjcmVhdGVTdHlsZWRDb21wb25lbnQ6IHN0eWxlZCgnZGl2Jywge1xuICAgIG5hbWU6ICdNdWlTdGFjaycsXG4gICAgc2xvdDogJ1Jvb3QnLFxuICAgIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3RcbiAgfSksXG4gIHVzZVRoZW1lUHJvcHM6IGluUHJvcHMgPT4gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpU3RhY2snXG4gIH0pXG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN0YWNrLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGBmbGV4LWRpcmVjdGlvbmAgc3R5bGUgcHJvcGVydHkuXG4gICAqIEl0IGlzIGFwcGxpZWQgZm9yIGFsbCBzY3JlZW4gc2l6ZXMuXG4gICAqIEBkZWZhdWx0ICdjb2x1bW4nXG4gICAqL1xuICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSksIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSkpLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBBZGQgYW4gZWxlbWVudCBiZXR3ZWVuIGVhY2ggY2hpbGQuXG4gICAqL1xuICBkaXZpZGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHNwYWNlIGJldHdlZW4gaW1tZWRpYXRlIGNoaWxkcmVuLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBzcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AsIHdoaWNoIGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIENTUyBmbGV4Ym94IGBnYXBgIGlzIHVzZWQgaW5zdGVhZCBvZiBhcHBseWluZyBgbWFyZ2luYCB0byBjaGlsZHJlbi5cbiAgICpcbiAgICogV2hpbGUgQ1NTIGBnYXBgIHJlbW92ZXMgdGhlIFtrbm93biBsaW1pdGF0aW9uc10oaHR0cHM6Ly9tdWkuY29tL2pveS11aS9yZWFjdC1zdGFjay8jbGltaXRhdGlvbnMpLFxuICAgKiBpdCBpcyBub3QgZnVsbHkgc3VwcG9ydGVkIGluIHNvbWUgYnJvd3NlcnMuIFdlIHJlY29tbWVuZCBjaGVja2luZyBodHRwczovL2Nhbml1c2UuY29tLz9zZWFyY2g9ZmxleCUyMGdhcCBiZWZvcmUgdXNpbmcgdGhpcyBmbGFnLlxuICAgKlxuICAgKiBUbyBlbmFibGUgdGhpcyBmbGFnIGdsb2JhbGx5LCBmb2xsb3cgdGhlIFt0aGVtZSdzIGRlZmF1bHQgcHJvcHNdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3RoZW1lLWNvbXBvbmVudHMvI2RlZmF1bHQtcHJvcHMpIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB1c2VGbGV4R2FwOiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFN0YWNrOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbnZhciBfc3BhbjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiLCBcImxhYmVsXCIsIFwibm90Y2hlZFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IE5vdGNoZWRPdXRsaW5lUm9vdCA9IHN0eWxlZCgnZmllbGRzZXQnLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pKHtcbiAgdGV4dEFsaWduOiAnbGVmdCcsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBib3R0b206IDAsXG4gIHJpZ2h0OiAwLFxuICB0b3A6IC01LFxuICBsZWZ0OiAwLFxuICBtYXJnaW46IDAsXG4gIHBhZGRpbmc6ICcwIDhweCcsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCcsXG4gIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICBib3JkZXJXaWR0aDogMSxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBtaW5XaWR0aDogJzAlJ1xufSk7XG5jb25zdCBOb3RjaGVkT3V0bGluZUxlZ2VuZCA9IHN0eWxlZCgnbGVnZW5kJywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcm9vdFNob3VsZEZvcndhcmRQcm9wXG59KSgoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBmbG9hdDogJ3Vuc2V0JyxcbiAgLy8gRml4IGNvbmZsaWN0IHdpdGggYm9vdHN0cmFwXG4gIHdpZHRoOiAnYXV0bycsXG4gIC8vIEZpeCBjb25mbGljdCB3aXRoIGJvb3RzdHJhcFxuICBvdmVyZmxvdzogJ2hpZGRlbidcbn0sICFvd25lclN0YXRlLndpdGhMYWJlbCAmJiB7XG4gIHBhZGRpbmc6IDAsXG4gIGxpbmVIZWlnaHQ6ICcxMXB4JyxcbiAgLy8gc3luYyB3aXRoIGBoZWlnaHRgIGluIGBsZWdlbmRgIHN0eWxlc1xuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3dpZHRoJywge1xuICAgIGR1cmF0aW9uOiAxNTAsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICB9KVxufSwgb3duZXJTdGF0ZS53aXRoTGFiZWwgJiYgX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnYmxvY2snLFxuICAvLyBGaXggY29uZmxpY3Qgd2l0aCBub3JtYWxpemUuY3NzIGFuZCBzYW5pdGl6ZS5jc3NcbiAgcGFkZGluZzogMCxcbiAgaGVpZ2h0OiAxMSxcbiAgLy8gc3luYyB3aXRoIGBsaW5lSGVpZ2h0YCBpbiBgbGVnZW5kYCBzdHlsZXNcbiAgZm9udFNpemU6ICcwLjc1ZW0nLFxuICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgbWF4V2lkdGg6IDAuMDEsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnbWF4LXdpZHRoJywge1xuICAgIGR1cmF0aW9uOiA1MCxcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gIH0pLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgJyYgPiBzcGFuJzoge1xuICAgIHBhZGRpbmdMZWZ0OiA1LFxuICAgIHBhZGRpbmdSaWdodDogNSxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICBvcGFjaXR5OiAwLFxuICAgIHZpc2liaWxpdHk6ICd2aXNpYmxlJ1xuICB9XG59LCBvd25lclN0YXRlLm5vdGNoZWQgJiYge1xuICBtYXhXaWR0aDogJzEwMCUnLFxuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ21heC13aWR0aCcsIHtcbiAgICBkdXJhdGlvbjogMTAwLFxuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXQsXG4gICAgZGVsYXk6IDUwXG4gIH0pXG59KSkpO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE5vdGNoZWRPdXRsaW5lKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGxhYmVsLFxuICAgICAgbm90Y2hlZFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB3aXRoTGFiZWwgPSBsYWJlbCAhPSBudWxsICYmIGxhYmVsICE9PSAnJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIG5vdGNoZWQsXG4gICAgd2l0aExhYmVsXG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTm90Y2hlZE91dGxpbmVSb290LCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goTm90Y2hlZE91dGxpbmVMZWdlbmQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjaGlsZHJlbjogd2l0aExhYmVsID8gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgICB9KSA6IC8vIG5vdHJhbnNsYXRlIG5lZWRlZCB3aGlsZSBHb29nbGUgVHJhbnNsYXRlIHdpbGwgbm90IGZpeCB6ZXJvLXdpZHRoIHNwYWNlIGlzc3VlXG4gICAgICBfc3BhbiB8fCAoX3NwYW4gPSAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwibm90cmFuc2xhdGVcIixcbiAgICAgICAgY2hpbGRyZW46IFwiXFx1MjAwQlwiXG4gICAgICB9KSlcbiAgICB9KVxuICB9KSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBOb3RjaGVkT3V0bGluZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBsYWJlbC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG91dGxpbmUgaXMgbm90Y2hlZCB0byBhY2NvbW1vZGF0ZSB0aGUgbGFiZWwuXG4gICAqL1xuICBub3RjaGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3Rcbn0gOiB2b2lkIDA7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IHsgaW5wdXRCYXNlQ2xhc3NlcyB9IGZyb20gJy4uL0lucHV0QmFzZSc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0bGluZWRJbnB1dFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpT3V0bGluZWRJbnB1dCcsIHNsb3QpO1xufVxuY29uc3Qgb3V0bGluZWRJbnB1dENsYXNzZXMgPSBfZXh0ZW5kcyh7fSwgaW5wdXRCYXNlQ2xhc3NlcywgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpT3V0bGluZWRJbnB1dCcsIFsncm9vdCcsICdub3RjaGVkT3V0bGluZScsICdpbnB1dCddKSk7XG5leHBvcnQgZGVmYXVsdCBvdXRsaW5lZElucHV0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjb21wb25lbnRzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaW5wdXRDb21wb25lbnRcIiwgXCJsYWJlbFwiLCBcIm11bHRpbGluZVwiLCBcIm5vdGNoZWRcIiwgXCJzbG90c1wiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBOb3RjaGVkT3V0bGluZSBmcm9tICcuL05vdGNoZWRPdXRsaW5lJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgb3V0bGluZWRJbnB1dENsYXNzZXMsIHsgZ2V0T3V0bGluZWRJbnB1dFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vb3V0bGluZWRJbnB1dENsYXNzZXMnO1xuaW1wb3J0IElucHV0QmFzZSwgeyByb290T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyLCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIsIElucHV0QmFzZVJvb3QsIElucHV0QmFzZUNvbXBvbmVudCBhcyBJbnB1dEJhc2VJbnB1dCB9IGZyb20gJy4uL0lucHV0QmFzZS9JbnB1dEJhc2UnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBub3RjaGVkT3V0bGluZTogWydub3RjaGVkT3V0bGluZSddLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldE91dGxpbmVkSW5wdXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgT3V0bGluZWRJbnB1dFJvb3QgPSBzdHlsZWQoSW5wdXRCYXNlUm9vdCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpT3V0bGluZWRJbnB1dCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgYm9yZGVyQ29sb3IgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyAncmdiYSgwLCAwLCAwLCAwLjIzKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIzKSc7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIFtgJjpob3ZlciAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeVxuICAgIH0sXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBbYCY6aG92ZXIgLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgICAgYm9yZGVyQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAwLjIzKWAgOiBib3JkZXJDb2xvclxuICAgICAgfVxuICAgIH0sXG4gICAgW2AmLiR7b3V0bGluZWRJbnB1dENsYXNzZXMuZm9jdXNlZH0gLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgIGJvcmRlckNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLFxuICAgICAgYm9yZGVyV2lkdGg6IDJcbiAgICB9LFxuICAgIFtgJi4ke291dGxpbmVkSW5wdXRDbGFzc2VzLmVycm9yfSAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgICB9LFxuICAgIFtgJi4ke291dGxpbmVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfSAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZFxuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gICAgcGFkZGluZ0xlZnQ6IDE0XG4gIH0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nUmlnaHQ6IDE0XG4gIH0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIF9leHRlbmRzKHtcbiAgICBwYWRkaW5nOiAnMTYuNXB4IDE0cHgnXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZzogJzguNXB4IDE0cHgnXG4gIH0pKTtcbn0pO1xuY29uc3QgTm90Y2hlZE91dGxpbmVSb290ID0gc3R5bGVkKE5vdGNoZWRPdXRsaW5lLCB7XG4gIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0JyxcbiAgc2xvdDogJ05vdGNoZWRPdXRsaW5lJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMubm90Y2hlZE91dGxpbmVcbn0pKCh7XG4gIHRoZW1lXG59KSA9PiB7XG4gIGNvbnN0IGJvcmRlckNvbG9yID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gJ3JnYmEoMCwgMCwgMCwgMC4yMyknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMyknO1xuICByZXR1cm4ge1xuICAgIGJvcmRlckNvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gMC4yMylgIDogYm9yZGVyQ29sb3JcbiAgfTtcbn0pO1xuY29uc3QgT3V0bGluZWRJbnB1dElucHV0ID0gc3R5bGVkKElucHV0QmFzZUlucHV0LCB7XG4gIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0JyxcbiAgc2xvdDogJ0lucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBhZGRpbmc6ICcxNi41cHggMTRweCdcbn0sICF0aGVtZS52YXJzICYmIHtcbiAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICBXZWJraXRCb3hTaGFkb3c6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgV2Via2l0VGV4dEZpbGxDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcjZmZmJyxcbiAgICBjYXJldENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGJvcmRlclJhZGl1czogJ2luaGVyaXQnXG4gIH1cbn0sIHRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIGJvcmRlclJhZGl1czogJ2luaGVyaXQnXG4gIH0sXG4gIFt0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKCdkYXJrJyldOiB7XG4gICAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICAgIFdlYmtpdEJveFNoYWRvdzogJzAgMCAwIDEwMHB4ICMyNjY3OTggaW5zZXQnLFxuICAgICAgV2Via2l0VGV4dEZpbGxDb2xvcjogJyNmZmYnLFxuICAgICAgY2FyZXRDb2xvcjogJyNmZmYnXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBwYWRkaW5nOiAnOC41cHggMTRweCdcbn0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHtcbiAgcGFkZGluZzogMFxufSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdMZWZ0OiAwXG59LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdSaWdodDogMFxufSkpO1xuY29uc3QgT3V0bGluZWRJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE91dGxpbmVkSW5wdXQoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdHMkcm9vdCwgX3JlZjIsIF9zbG90cyRpbnB1dCwgX1JlYWN0JEZyYWdtZW50O1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aU91dGxpbmVkSW5wdXQnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjb21wb25lbnRzID0ge30sXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICAgIGxhYmVsLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBub3RjaGVkLFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIHR5cGUgPSAndGV4dCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKHByb3BzKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnY29sb3InLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZm9jdXNlZCcsICdoaWRkZW5MYWJlbCcsICdzaXplJywgJ3JlcXVpcmVkJ11cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcjogZmNzLmNvbG9yIHx8ICdwcmltYXJ5JyxcbiAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbDogZmNzLmhpZGRlbkxhYmVsLFxuICAgIG11bHRpbGluZSxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICB0eXBlXG4gIH0pO1xuICBjb25zdCBSb290U2xvdCA9IChfcmVmID0gKF9zbG90cyRyb290ID0gc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6IE91dGxpbmVkSW5wdXRSb290O1xuICBjb25zdCBJbnB1dFNsb3QgPSAoX3JlZjIgPSAoX3Nsb3RzJGlucHV0ID0gc2xvdHMuaW5wdXQpICE9IG51bGwgPyBfc2xvdHMkaW5wdXQgOiBjb21wb25lbnRzLklucHV0KSAhPSBudWxsID8gX3JlZjIgOiBPdXRsaW5lZElucHV0SW5wdXQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICBzbG90czoge1xuICAgICAgcm9vdDogUm9vdFNsb3QsXG4gICAgICBpbnB1dDogSW5wdXRTbG90XG4gICAgfSxcbiAgICByZW5kZXJTdWZmaXg6IHN0YXRlID0+IC8qI19fUFVSRV9fKi9fanN4KE5vdGNoZWRPdXRsaW5lUm9vdCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5ub3RjaGVkT3V0bGluZSxcbiAgICAgIGxhYmVsOiBsYWJlbCAhPSBudWxsICYmIGxhYmVsICE9PSAnJyAmJiBmY3MucmVxdWlyZWQgPyBfUmVhY3QkRnJhZ21lbnQgfHwgKF9SZWFjdCRGcmFnbWVudCA9IC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogW2xhYmVsLCBcIlxcdTIwMDlcIiwgJyonXVxuICAgICAgfSkpIDogbGFiZWwsXG4gICAgICBub3RjaGVkOiB0eXBlb2Ygbm90Y2hlZCAhPT0gJ3VuZGVmaW5lZCcgPyBub3RjaGVkIDogQm9vbGVhbihzdGF0ZS5zdGFydEFkb3JubWVudCB8fCBzdGF0ZS5maWxsZWQgfHwgc3RhdGUuZm9jdXNlZClcbiAgICB9KSxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudDogaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IF9leHRlbmRzKHt9LCBjbGFzc2VzLCB7XG4gICAgICBub3RjaGVkT3V0bGluZTogbnVsbFxuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gT3V0bGluZWRJbnB1dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgb2YgdGhlIGBpbnB1dGAuIEl0IGlzIG9ubHkgdXNlZCBmb3IgbGF5b3V0LiBUaGUgYWN0dWFsIGxhYmVsbGluZ1xuICAgKiBpcyBoYW5kbGVkIGJ5IGBJbnB1dExhYmVsYC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG91dGxpbmUgaXMgbm90Y2hlZCB0byBhY2NvbW1vZGF0ZSB0aGUgbGFiZWwuXG4gICAqL1xuICBub3RjaGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFN0YXJ0IGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgc3RhcnRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbk91dGxpbmVkSW5wdXQubXVpTmFtZSA9ICdJbnB1dCc7XG5leHBvcnQgZGVmYXVsdCBPdXRsaW5lZElucHV0OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmF0aXZlU2VsZWN0VXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU5hdGl2ZVNlbGVjdCcsIHNsb3QpO1xufVxuY29uc3QgbmF0aXZlU2VsZWN0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU5hdGl2ZVNlbGVjdCcsIFsncm9vdCcsICdzZWxlY3QnLCAnbXVsdGlwbGUnLCAnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJywgJ2Rpc2FibGVkJywgJ2ljb24nLCAnaWNvbk9wZW4nLCAnaWNvbkZpbGxlZCcsICdpY29uT3V0bGluZWQnLCAnaWNvblN0YW5kYXJkJywgJ25hdGl2ZUlucHV0JywgJ2Vycm9yJ10pO1xuZXhwb3J0IGRlZmF1bHQgbmF0aXZlU2VsZWN0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiSWNvbkNvbXBvbmVudFwiLCBcImlucHV0UmVmXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBuYXRpdmVTZWxlY3RDbGFzc2VzLCB7IGdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9uYXRpdmVTZWxlY3RDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgdmFyaWFudCxcbiAgICBkaXNhYmxlZCxcbiAgICBtdWx0aXBsZSxcbiAgICBvcGVuLFxuICAgIGVycm9yXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICBzZWxlY3Q6IFsnc2VsZWN0JywgdmFyaWFudCwgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgbXVsdGlwbGUgJiYgJ211bHRpcGxlJywgZXJyb3IgJiYgJ2Vycm9yJ10sXG4gICAgaWNvbjogWydpY29uJywgYGljb24ke2NhcGl0YWxpemUodmFyaWFudCl9YCwgb3BlbiAmJiAnaWNvbk9wZW4nLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgbmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzID0gKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IF9leHRlbmRzKHtcbiAgTW96QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZScsXG4gIC8vIFJlc2V0XG4gIC8vIFdoZW4gaW50ZXJhY3RpbmcgcXVpY2tseSwgdGhlIHRleHQgY2FuIGVuZCB1cCBzZWxlY3RlZC5cbiAgLy8gTmF0aXZlIHNlbGVjdCBjYW4ndCBiZSBzZWxlY3RlZCBlaXRoZXIuXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgYm9yZGVyUmFkaXVzOiAwLFxuICAvLyBSZXNldFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgJyY6Zm9jdXMnOiBfZXh0ZW5kcyh7fSwgdGhlbWUudmFycyA/IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvIDAuMDUpYFxuICB9IDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gJ3JnYmEoMCwgMCwgMCwgMC4wNSknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSknXG4gIH0sIHtcbiAgICBib3JkZXJSYWRpdXM6IDAgLy8gUmVzZXQgQ2hyb21lIHN0eWxlXG4gIH0pLFxuICAvLyBSZW1vdmUgSUUxMSBhcnJvd1xuICAnJjo6LW1zLWV4cGFuZCc6IHtcbiAgICBkaXNwbGF5OiAnbm9uZSdcbiAgfSxcbiAgW2AmLiR7bmF0aXZlU2VsZWN0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGN1cnNvcjogJ2RlZmF1bHQnXG4gIH0sXG4gICcmW211bHRpcGxlXSc6IHtcbiAgICBoZWlnaHQ6ICdhdXRvJ1xuICB9LFxuICAnJjpub3QoW211bHRpcGxlXSkgb3B0aW9uLCAmOm5vdChbbXVsdGlwbGVdKSBvcHRncm91cCc6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmJhY2tncm91bmQucGFwZXJcbiAgfSxcbiAgLy8gQnVtcCBzcGVjaWZpY2l0eSB0byBhbGxvdyBleHRlbmRpbmcgY3VzdG9tIGlucHV0c1xuICAnJiYmJzoge1xuICAgIHBhZGRpbmdSaWdodDogMjQsXG4gICAgbWluV2lkdGg6IDE2IC8vIFNvIGl0IGRvZXNuJ3QgY29sbGFwc2UuXG4gIH1cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2ZpbGxlZCcgJiYge1xuICAnJiYmJzoge1xuICAgIHBhZGRpbmdSaWdodDogMzJcbiAgfVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAnJjpmb2N1cyc6IHtcbiAgICBib3JkZXJSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMgLy8gUmVzZXQgdGhlIHJlc2V0IGZvciBDaHJvbWUgc3R5bGVcbiAgfSxcbiAgJyYmJic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDMyXG4gIH1cbn0pO1xuY29uc3QgTmF0aXZlU2VsZWN0U2VsZWN0ID0gc3R5bGVkKCdzZWxlY3QnLCB7XG4gIG5hbWU6ICdNdWlOYXRpdmVTZWxlY3QnLFxuICBzbG90OiAnU2VsZWN0JyxcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcCxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5zZWxlY3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmVycm9yICYmIHN0eWxlcy5lcnJvciwge1xuICAgICAgW2AmLiR7bmF0aXZlU2VsZWN0Q2xhc3Nlcy5tdWx0aXBsZX1gXTogc3R5bGVzLm11bHRpcGxlXG4gICAgfV07XG4gIH1cbn0pKG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcyk7XG5leHBvcnQgY29uc3QgbmF0aXZlU2VsZWN0SWNvblN0eWxlcyA9ICh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIC8vIFdlIHVzZSBhIHBvc2l0aW9uIGFic29sdXRlIG92ZXIgYSBmbGV4Ym94IGluIG9yZGVyIHRvIGZvcndhcmQgdGhlIHBvaW50ZXIgZXZlbnRzXG4gIC8vIHRvIHRoZSBpbnB1dCBhbmQgdG8gc3VwcG9ydCB3cmFwcGluZyB0YWdzLi5cbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHJpZ2h0OiAwLFxuICB0b3A6ICdjYWxjKDUwJSAtIC41ZW0pJyxcbiAgLy8gQ2VudGVyIHZlcnRpY2FsbHksIGhlaWdodCBpcyAxZW1cbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAvLyBEb24ndCBibG9jayBwb2ludGVyIGV2ZW50cyBvbiB0aGUgc2VsZWN0IHVuZGVyIHRoZSBpY29uLlxuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZSxcbiAgW2AmLiR7bmF0aXZlU2VsZWN0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgfVxufSwgb3duZXJTdGF0ZS5vcGVuICYmIHtcbiAgdHJhbnNmb3JtOiAncm90YXRlKDE4MGRlZyknXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIHtcbiAgcmlnaHQ6IDdcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gIHJpZ2h0OiA3XG59KTtcbmNvbnN0IE5hdGl2ZVNlbGVjdEljb24gPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aU5hdGl2ZVNlbGVjdCcsXG4gIHNsb3Q6ICdJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5pY29uLCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW2BpY29uJHtjYXBpdGFsaXplKG93bmVyU3RhdGUudmFyaWFudCl9YF0sIG93bmVyU3RhdGUub3BlbiAmJiBzdHlsZXMuaWNvbk9wZW5dO1xuICB9XG59KShuYXRpdmVTZWxlY3RJY29uU3R5bGVzKTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBOYXRpdmVTZWxlY3RJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE5hdGl2ZVNlbGVjdElucHV0KHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBlcnJvcixcbiAgICAgIEljb25Db21wb25lbnQsXG4gICAgICBpbnB1dFJlZixcbiAgICAgIHZhcmlhbnQgPSAnc3RhbmRhcmQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkaXNhYmxlZCxcbiAgICB2YXJpYW50LFxuICAgIGVycm9yXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KE5hdGl2ZVNlbGVjdFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnNlbGVjdCwgY2xhc3NOYW1lKSxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIHJlZjogaW5wdXRSZWYgfHwgcmVmXG4gICAgfSwgb3RoZXIpKSwgcHJvcHMubXVsdGlwbGUgPyBudWxsIDogLyojX19QVVJFX18qL19qc3goTmF0aXZlU2VsZWN0SWNvbiwge1xuICAgICAgYXM6IEljb25Db21wb25lbnQsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmljb25cbiAgICB9KV1cbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE5hdGl2ZVNlbGVjdElucHV0LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gZWxlbWVudHMgdG8gcG9wdWxhdGUgdGhlIHNlbGVjdCB3aXRoLlxuICAgKiBDYW4gYmUgc29tZSBgPG9wdGlvbj5gIGVsZW1lbnRzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBDU1MgY2xhc3MgbmFtZSBvZiB0aGUgc2VsZWN0IGVsZW1lbnQuXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzZWxlY3QgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgc2VsZWN0IGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdGhhdCBkaXNwbGF5cyB0aGUgYXJyb3cuXG4gICAqL1xuICBJY29uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFVzZSB0aGF0IHByb3AgdG8gcGFzcyBhIHJlZiB0byB0aGUgbmF0aXZlIHNlbGVjdCBlbGVtZW50LlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBtdWx0aXBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYHNlbGVjdGAgb3IgaGlkZGVuIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIGEgbWVudSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgdmFsdWUuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ3N0YW5kYXJkJywgJ291dGxpbmVkJywgJ2ZpbGxlZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZVNlbGVjdElucHV0OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0VXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVNlbGVjdCcsIHNsb3QpO1xufVxuY29uc3Qgc2VsZWN0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVNlbGVjdCcsIFsncm9vdCcsICdzZWxlY3QnLCAnbXVsdGlwbGUnLCAnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJywgJ2Rpc2FibGVkJywgJ2ZvY3VzZWQnLCAnaWNvbicsICdpY29uT3BlbicsICdpY29uRmlsbGVkJywgJ2ljb25PdXRsaW5lZCcsICdpY29uU3RhbmRhcmQnLCAnbmF0aXZlSW5wdXQnLCAnZXJyb3InXSk7XG5leHBvcnQgZGVmYXVsdCBzZWxlY3RDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xudmFyIF9zcGFuO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXJpYS1kZXNjcmliZWRieVwiLCBcImFyaWEtbGFiZWxcIiwgXCJhdXRvRm9jdXNcIiwgXCJhdXRvV2lkdGhcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRlZmF1bHRPcGVuXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNwbGF5RW1wdHlcIiwgXCJlcnJvclwiLCBcIkljb25Db21wb25lbnRcIiwgXCJpbnB1dFJlZlwiLCBcImxhYmVsSWRcIiwgXCJNZW51UHJvcHNcIiwgXCJtdWx0aXBsZVwiLCBcIm5hbWVcIiwgXCJvbkJsdXJcIiwgXCJvbkNoYW5nZVwiLCBcIm9uQ2xvc2VcIiwgXCJvbkZvY3VzXCIsIFwib25PcGVuXCIsIFwib3BlblwiLCBcInJlYWRPbmx5XCIsIFwicmVuZGVyVmFsdWVcIiwgXCJTZWxlY3REaXNwbGF5UHJvcHNcIiwgXCJ0YWJJbmRleFwiLCBcInR5cGVcIiwgXCJ2YWx1ZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZyYWdtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHVzZUlkIGZyb20gJ0BtdWkvdXRpbHMvdXNlSWQnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJy4uL3V0aWxzL293bmVyRG9jdW1lbnQnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgTWVudSBmcm9tICcuLi9NZW51L01lbnUnO1xuaW1wb3J0IHsgbmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzLCBuYXRpdmVTZWxlY3RJY29uU3R5bGVzIH0gZnJvbSAnLi4vTmF0aXZlU2VsZWN0L05hdGl2ZVNlbGVjdElucHV0JztcbmltcG9ydCB7IGlzRmlsbGVkIH0gZnJvbSAnLi4vSW5wdXRCYXNlL3V0aWxzJztcbmltcG9ydCBzdHlsZWQsIHsgc2xvdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VDb250cm9sbGVkIGZyb20gJy4uL3V0aWxzL3VzZUNvbnRyb2xsZWQnO1xuaW1wb3J0IHNlbGVjdENsYXNzZXMsIHsgZ2V0U2VsZWN0VXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL3NlbGVjdENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFNlbGVjdFNlbGVjdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgc2xvdDogJ1NlbGVjdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtcbiAgICAvLyBXaW4gc3BlY2lmaWNpdHkgb3ZlciB0aGUgaW5wdXQgYmFzZVxuICAgIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMuc2VsZWN0fWBdOiBzdHlsZXMuc2VsZWN0XG4gICAgfSwge1xuICAgICAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5zZWxlY3R9YF06IHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdXG4gICAgfSwge1xuICAgICAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5lcnJvcn1gXTogc3R5bGVzLmVycm9yXG4gICAgfSwge1xuICAgICAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5tdWx0aXBsZX1gXTogc3R5bGVzLm11bHRpcGxlXG4gICAgfV07XG4gIH1cbn0pKG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcywge1xuICAvLyBXaW4gc3BlY2lmaWNpdHkgb3ZlciB0aGUgaW5wdXQgYmFzZVxuICBbYCYuJHtzZWxlY3RDbGFzc2VzLnNlbGVjdH1gXToge1xuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIC8vIFJlc2V0cyBmb3IgbXVsdGlwbGUgc2VsZWN0IHdpdGggY2hpcHNcbiAgICBtaW5IZWlnaHQ6ICcxLjQzNzVlbScsXG4gICAgLy8gUmVxdWlyZWQgZm9yIHNlbGVjdFxcdGV4dC1maWVsZCBoZWlnaHQgY29uc2lzdGVuY3lcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gIH1cbn0pO1xuY29uc3QgU2VsZWN0SWNvbiA9IHN0eWxlZCgnc3ZnJywge1xuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgc2xvdDogJ0ljb24nLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLmljb24sIG93bmVyU3RhdGUudmFyaWFudCAmJiBzdHlsZXNbYGljb24ke2NhcGl0YWxpemUob3duZXJTdGF0ZS52YXJpYW50KX1gXSwgb3duZXJTdGF0ZS5vcGVuICYmIHN0eWxlcy5pY29uT3Blbl07XG4gIH1cbn0pKG5hdGl2ZVNlbGVjdEljb25TdHlsZXMpO1xuY29uc3QgU2VsZWN0TmF0aXZlSW5wdXQgPSBzdHlsZWQoJ2lucHV0Jywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiBzbG90U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgJiYgcHJvcCAhPT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgc2xvdDogJ05hdGl2ZUlucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMubmF0aXZlSW5wdXRcbn0pKHtcbiAgYm90dG9tOiAwLFxuICBsZWZ0OiAwLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgb3BhY2l0eTogMCxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICB3aWR0aDogJzEwMCUnLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94J1xufSk7XG5mdW5jdGlvbiBhcmVFcXVhbFZhbHVlcyhhLCBiKSB7XG4gIGlmICh0eXBlb2YgYiA9PT0gJ29iamVjdCcgJiYgYiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBhID09PSBiO1xuICB9XG5cbiAgLy8gVGhlIHZhbHVlIGNvdWxkIGJlIGEgbnVtYmVyLCB0aGUgRE9NIHdpbGwgc3RyaW5naWZ5IGl0IGFueXdheS5cbiAgcmV0dXJuIFN0cmluZyhhKSA9PT0gU3RyaW5nKGIpO1xufVxuZnVuY3Rpb24gaXNFbXB0eShkaXNwbGF5KSB7XG4gIHJldHVybiBkaXNwbGF5ID09IG51bGwgfHwgdHlwZW9mIGRpc3BsYXkgPT09ICdzdHJpbmcnICYmICFkaXNwbGF5LnRyaW0oKTtcbn1cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHZhcmlhbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgbXVsdGlwbGUsXG4gICAgb3BlbixcbiAgICBlcnJvclxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgc2VsZWN0OiBbJ3NlbGVjdCcsIHZhcmlhbnQsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIG11bHRpcGxlICYmICdtdWx0aXBsZScsIGVycm9yICYmICdlcnJvciddLFxuICAgIGljb246IFsnaWNvbicsIGBpY29uJHtjYXBpdGFsaXplKHZhcmlhbnQpfWAsIG9wZW4gJiYgJ2ljb25PcGVuJywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJ10sXG4gICAgbmF0aXZlSW5wdXQ6IFsnbmF0aXZlSW5wdXQnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFNlbGVjdFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgU2VsZWN0SW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBTZWxlY3RJbnB1dChwcm9wcywgcmVmKSB7XG4gIHZhciBfTWVudVByb3BzJHNsb3RQcm9wcztcbiAgY29uc3Qge1xuICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbCxcbiAgICAgIGF1dG9Gb2N1cyxcbiAgICAgIGF1dG9XaWR0aCxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGVmYXVsdE9wZW4sXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRpc3BsYXlFbXB0eSxcbiAgICAgIGVycm9yID0gZmFsc2UsXG4gICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgaW5wdXRSZWY6IGlucHV0UmVmUHJvcCxcbiAgICAgIGxhYmVsSWQsXG4gICAgICBNZW51UHJvcHMgPSB7fSxcbiAgICAgIG11bHRpcGxlLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25DbG9zZSxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbk9wZW4sXG4gICAgICBvcGVuOiBvcGVuUHJvcCxcbiAgICAgIHJlYWRPbmx5LFxuICAgICAgcmVuZGVyVmFsdWUsXG4gICAgICBTZWxlY3REaXNwbGF5UHJvcHMgPSB7fSxcbiAgICAgIHRhYkluZGV4OiB0YWJJbmRleFByb3BcbiAgICAgIC8vIGNhdGNoaW5nIGB0eXBlYCBmcm9tIElucHV0IHdoaWNoIG1ha2VzIG5vIHNlbnNlIGZvciBTZWxlY3RJbnB1dFxuICAgICAgLFxuXG4gICAgICB2YWx1ZTogdmFsdWVQcm9wLFxuICAgICAgdmFyaWFudCA9ICdzdGFuZGFyZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZVN0YXRlXSA9IHVzZUNvbnRyb2xsZWQoe1xuICAgIGNvbnRyb2xsZWQ6IHZhbHVlUHJvcCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsXG4gICAgbmFtZTogJ1NlbGVjdCdcbiAgfSk7XG4gIGNvbnN0IFtvcGVuU3RhdGUsIHNldE9wZW5TdGF0ZV0gPSB1c2VDb250cm9sbGVkKHtcbiAgICBjb250cm9sbGVkOiBvcGVuUHJvcCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0T3BlbixcbiAgICBuYW1lOiAnU2VsZWN0J1xuICB9KTtcbiAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGRpc3BsYXlSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IFtkaXNwbGF5Tm9kZSwgc2V0RGlzcGxheU5vZGVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50OiBpc09wZW5Db250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYob3BlblByb3AgIT0gbnVsbCk7XG4gIGNvbnN0IFttZW51TWluV2lkdGhTdGF0ZSwgc2V0TWVudU1pbldpZHRoU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihyZWYsIGlucHV0UmVmUHJvcCk7XG4gIGNvbnN0IGhhbmRsZURpc3BsYXlSZWYgPSBSZWFjdC51c2VDYWxsYmFjayhub2RlID0+IHtcbiAgICBkaXNwbGF5UmVmLmN1cnJlbnQgPSBub2RlO1xuICAgIGlmIChub2RlKSB7XG4gICAgICBzZXREaXNwbGF5Tm9kZShub2RlKTtcbiAgICB9XG4gIH0sIFtdKTtcbiAgY29uc3QgYW5jaG9yRWxlbWVudCA9IGRpc3BsYXlOb2RlID09IG51bGwgPyB2b2lkIDAgOiBkaXNwbGF5Tm9kZS5wYXJlbnROb2RlO1xuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKGhhbmRsZVJlZiwgKCkgPT4gKHtcbiAgICBmb2N1czogKCkgPT4ge1xuICAgICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfSxcbiAgICBub2RlOiBpbnB1dFJlZi5jdXJyZW50LFxuICAgIHZhbHVlXG4gIH0pLCBbdmFsdWVdKTtcblxuICAvLyBSZXNpemUgbWVudSBvbiBgZGVmYXVsdE9wZW5gIGF1dG9tYXRpYyB0b2dnbGUuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRlZmF1bHRPcGVuICYmIG9wZW5TdGF0ZSAmJiBkaXNwbGF5Tm9kZSAmJiAhaXNPcGVuQ29udHJvbGxlZCkge1xuICAgICAgc2V0TWVudU1pbldpZHRoU3RhdGUoYXV0b1dpZHRoID8gbnVsbCA6IGFuY2hvckVsZW1lbnQuY2xpZW50V2lkdGgpO1xuICAgICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2Rpc3BsYXlOb2RlLCBhdXRvV2lkdGhdKTtcbiAgLy8gYGlzT3BlbkNvbnRyb2xsZWRgIGlzIGlnbm9yZWQgYmVjYXVzZSB0aGUgY29tcG9uZW50IHNob3VsZCBuZXZlciBzd2l0Y2ggYmV0d2VlbiBjb250cm9sbGVkIGFuZCB1bmNvbnRyb2xsZWQgbW9kZXMuXG4gIC8vIGBkZWZhdWx0T3BlbmAgYW5kIGBvcGVuU3RhdGVgIGFyZSBpZ25vcmVkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNhbGxiYWNrcy5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFthdXRvRm9jdXNdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWxhYmVsSWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGxhYmVsID0gb3duZXJEb2N1bWVudChkaXNwbGF5UmVmLmN1cnJlbnQpLmdldEVsZW1lbnRCeUlkKGxhYmVsSWQpO1xuICAgIGlmIChsYWJlbCkge1xuICAgICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgaWYgKGdldFNlbGVjdGlvbigpLmlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsYWJlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZXIpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgbGFiZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVyKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtsYWJlbElkXSk7XG4gIGNvbnN0IHVwZGF0ZSA9IChvcGVuLCBldmVudCkgPT4ge1xuICAgIGlmIChvcGVuKSB7XG4gICAgICBpZiAob25PcGVuKSB7XG4gICAgICAgIG9uT3BlbihldmVudCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvbkNsb3NlKSB7XG4gICAgICBvbkNsb3NlKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKCFpc09wZW5Db250cm9sbGVkKSB7XG4gICAgICBzZXRNZW51TWluV2lkdGhTdGF0ZShhdXRvV2lkdGggPyBudWxsIDogYW5jaG9yRWxlbWVudC5jbGllbnRXaWR0aCk7XG4gICAgICBzZXRPcGVuU3RhdGUob3Blbik7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSBldmVudCA9PiB7XG4gICAgLy8gSWdub3JlIGV2ZXJ5dGhpbmcgYnV0IGxlZnQtY2xpY2tcbiAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEhpamFjayB0aGUgZGVmYXVsdCBmb2N1cyBiZWhhdmlvci5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIHVwZGF0ZSh0cnVlLCBldmVudCk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gZXZlbnQgPT4ge1xuICAgIHVwZGF0ZShmYWxzZSwgZXZlbnQpO1xuICB9O1xuICBjb25zdCBjaGlsZHJlbkFycmF5ID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbik7XG5cbiAgLy8gU3VwcG9ydCBhdXRvZmlsbC5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5BcnJheS5maW5kKGNoaWxkSXRlbSA9PiBjaGlsZEl0ZW0ucHJvcHMudmFsdWUgPT09IGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgaWYgKGNoaWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0VmFsdWVTdGF0ZShjaGlsZC5wcm9wcy52YWx1ZSk7XG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShldmVudCwgY2hpbGQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlSXRlbUNsaWNrID0gY2hpbGQgPT4gZXZlbnQgPT4ge1xuICAgIGxldCBuZXdWYWx1ZTtcblxuICAgIC8vIFdlIHVzZSB0aGUgdGFiaW5kZXggYXR0cmlidXRlIHRvIHNpZ25hbCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gICAgaWYgKCFldmVudC5jdXJyZW50VGFyZ2V0Lmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgIG5ld1ZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5zbGljZSgpIDogW107XG4gICAgICBjb25zdCBpdGVtSW5kZXggPSB2YWx1ZS5pbmRleE9mKGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgIGlmIChpdGVtSW5kZXggPT09IC0xKSB7XG4gICAgICAgIG5ld1ZhbHVlLnB1c2goY2hpbGQucHJvcHMudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1ZhbHVlID0gY2hpbGQucHJvcHMudmFsdWU7XG4gICAgfVxuICAgIGlmIChjaGlsZC5wcm9wcy5vbkNsaWNrKSB7XG4gICAgICBjaGlsZC5wcm9wcy5vbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgc2V0VmFsdWVTdGF0ZShuZXdWYWx1ZSk7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgLy8gUmVkZWZpbmUgdGFyZ2V0IHRvIGFsbG93IG5hbWUgYW5kIHZhbHVlIHRvIGJlIHJlYWQuXG4gICAgICAgIC8vIFRoaXMgYWxsb3dzIHNlYW1sZXNzIGludGVncmF0aW9uIHdpdGggdGhlIG1vc3QgcG9wdWxhciBmb3JtIGxpYnJhcmllcy5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMTM0ODUjaXNzdWVjb21tZW50LTY3NjA0ODQ5MlxuICAgICAgICAvLyBDbG9uZSB0aGUgZXZlbnQgdG8gbm90IG92ZXJyaWRlIGB0YXJnZXRgIG9mIHRoZSBvcmlnaW5hbCBldmVudC5cbiAgICAgICAgY29uc3QgbmF0aXZlRXZlbnQgPSBldmVudC5uYXRpdmVFdmVudCB8fCBldmVudDtcbiAgICAgICAgY29uc3QgY2xvbmVkRXZlbnQgPSBuZXcgbmF0aXZlRXZlbnQuY29uc3RydWN0b3IobmF0aXZlRXZlbnQudHlwZSwgbmF0aXZlRXZlbnQpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2xvbmVkRXZlbnQsICd0YXJnZXQnLCB7XG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBvbkNoYW5nZShjbG9uZWRFdmVudCwgY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW11bHRpcGxlKSB7XG4gICAgICB1cGRhdGUoZmFsc2UsIGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSBldmVudCA9PiB7XG4gICAgaWYgKCFyZWFkT25seSkge1xuICAgICAgY29uc3QgdmFsaWRLZXlzID0gWycgJywgJ0Fycm93VXAnLCAnQXJyb3dEb3duJyxcbiAgICAgIC8vIFRoZSBuYXRpdmUgc2VsZWN0IGRvZXNuJ3QgcmVzcG9uZCB0byBlbnRlciBvbiBtYWNPUywgYnV0IGl0J3MgcmVjb21tZW5kZWQgYnlcbiAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvY29tYm9ib3gvZXhhbXBsZXMvY29tYm9ib3gtc2VsZWN0LW9ubHkvXG4gICAgICAnRW50ZXInXTtcbiAgICAgIGlmICh2YWxpZEtleXMuaW5kZXhPZihldmVudC5rZXkpICE9PSAtMSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB1cGRhdGUodHJ1ZSwgZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3Qgb3BlbiA9IGRpc3BsYXlOb2RlICE9PSBudWxsICYmIG9wZW5TdGF0ZTtcbiAgY29uc3QgaGFuZGxlQmx1ciA9IGV2ZW50ID0+IHtcbiAgICAvLyBpZiBvcGVuIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvblxuICAgIGlmICghb3BlbiAmJiBvbkJsdXIpIHtcbiAgICAgIC8vIFByZWFjdCBzdXBwb3J0LCB0YXJnZXQgaXMgcmVhZCBvbmx5IHByb3BlcnR5IG9uIGEgbmF0aXZlIGV2ZW50LlxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV2ZW50LCAndGFyZ2V0Jywge1xuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBuYW1lXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGRlbGV0ZSBvdGhlclsnYXJpYS1pbnZhbGlkJ107XG4gIGxldCBkaXNwbGF5O1xuICBsZXQgZGlzcGxheVNpbmdsZTtcbiAgY29uc3QgZGlzcGxheU11bHRpcGxlID0gW107XG4gIGxldCBjb21wdXRlRGlzcGxheSA9IGZhbHNlO1xuICBsZXQgZm91bmRNYXRjaCA9IGZhbHNlO1xuXG4gIC8vIE5vIG5lZWQgdG8gZGlzcGxheSBhbnkgdmFsdWUgaWYgdGhlIGZpZWxkIGlzIGVtcHR5LlxuICBpZiAoaXNGaWxsZWQoe1xuICAgIHZhbHVlXG4gIH0pIHx8IGRpc3BsYXlFbXB0eSkge1xuICAgIGlmIChyZW5kZXJWYWx1ZSkge1xuICAgICAgZGlzcGxheSA9IHJlbmRlclZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcHV0ZURpc3BsYXkgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBjb25zdCBpdGVtcyA9IGNoaWxkcmVuQXJyYXkubWFwKGNoaWxkID0+IHtcbiAgICBpZiAoISAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZyYWdtZW50KGNoaWxkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtcIk1VSTogVGhlIFNlbGVjdCBjb21wb25lbnQgZG9lc24ndCBhY2NlcHQgYSBGcmFnbWVudCBhcyBhIGNoaWxkLlwiLCAnQ29uc2lkZXIgcHJvdmlkaW5nIGFuIGFycmF5IGluc3RlYWQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgc2VsZWN0ZWQ7XG4gICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgXFxgdmFsdWVcXGAgcHJvcCBtdXN0IGJlIGFuIGFycmF5IHdoZW4gdXNpbmcgdGhlIFxcYFNlbGVjdFxcYCBjb21wb25lbnQgd2l0aCBcXGBtdWx0aXBsZVxcYC5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgyKSk7XG4gICAgICB9XG4gICAgICBzZWxlY3RlZCA9IHZhbHVlLnNvbWUodiA9PiBhcmVFcXVhbFZhbHVlcyh2LCBjaGlsZC5wcm9wcy52YWx1ZSkpO1xuICAgICAgaWYgKHNlbGVjdGVkICYmIGNvbXB1dGVEaXNwbGF5KSB7XG4gICAgICAgIGRpc3BsYXlNdWx0aXBsZS5wdXNoKGNoaWxkLnByb3BzLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWQgPSBhcmVFcXVhbFZhbHVlcyh2YWx1ZSwgY2hpbGQucHJvcHMudmFsdWUpO1xuICAgICAgaWYgKHNlbGVjdGVkICYmIGNvbXB1dGVEaXNwbGF5KSB7XG4gICAgICAgIGRpc3BsYXlTaW5nbGUgPSBjaGlsZC5wcm9wcy5jaGlsZHJlbjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICBmb3VuZE1hdGNoID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICdhcmlhLXNlbGVjdGVkJzogc2VsZWN0ZWQgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgb25DbGljazogaGFuZGxlSXRlbUNsaWNrKGNoaWxkKSxcbiAgICAgIG9uS2V5VXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIG91ciBNZW51SXRlbXMgZGlzcGF0Y2hlcyBhIGNsaWNrIGV2ZW50XG4gICAgICAgICAgLy8gaXQncyBub3QgYmVoYXZpb3Igb2YgdGhlIG5hdGl2ZSA8b3B0aW9uPiBhbmQgY2F1c2VzXG4gICAgICAgICAgLy8gdGhlIHNlbGVjdCB0byBjbG9zZSBpbW1lZGlhdGVseSBzaW5jZSB3ZSBvcGVuIG9uIHNwYWNlIGtleWRvd25cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZC5wcm9wcy5vbktleVVwKSB7XG4gICAgICAgICAgY2hpbGQucHJvcHMub25LZXlVcChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByb2xlOiAnb3B0aW9uJyxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFRoZSB2YWx1ZSBpcyBtb3N0IGxpa2VseSBub3QgYSB2YWxpZCBIVE1MIGF0dHJpYnV0ZS5cbiAgICAgICdkYXRhLXZhbHVlJzogY2hpbGQucHJvcHMudmFsdWUgLy8gSW5zdGVhZCwgd2UgcHJvdmlkZSBpdCBhcyBhIGRhdGEgYXR0cmlidXRlLlxuICAgIH0pO1xuICB9KTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFmb3VuZE1hdGNoICYmICFtdWx0aXBsZSAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gY2hpbGRyZW5BcnJheS5tYXAoY2hpbGQgPT4gY2hpbGQucHJvcHMudmFsdWUpO1xuICAgICAgICBjb25zb2xlLndhcm4oW2BNVUk6IFlvdSBoYXZlIHByb3ZpZGVkIGFuIG91dC1vZi1yYW5nZSB2YWx1ZSBcXGAke3ZhbHVlfVxcYCBmb3IgdGhlIHNlbGVjdCAke25hbWUgPyBgKG5hbWU9XCIke25hbWV9XCIpIGAgOiAnJ31jb21wb25lbnQuYCwgXCJDb25zaWRlciBwcm92aWRpbmcgYSB2YWx1ZSB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBvciAnJy5cIiwgYFRoZSBhdmFpbGFibGUgdmFsdWVzIGFyZSAke3ZhbHVlcy5maWx0ZXIoeCA9PiB4ICE9IG51bGwpLm1hcCh4ID0+IGBcXGAke3h9XFxgYCkuam9pbignLCAnKSB8fCAnXCJcIid9LmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbZm91bmRNYXRjaCwgY2hpbGRyZW5BcnJheSwgbXVsdGlwbGUsIG5hbWUsIHZhbHVlXSk7XG4gIH1cbiAgaWYgKGNvbXB1dGVEaXNwbGF5KSB7XG4gICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICBpZiAoZGlzcGxheU11bHRpcGxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwbGF5ID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5TXVsdGlwbGUucmVkdWNlKChvdXRwdXQsIGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIG91dHB1dC5wdXNoKGNoaWxkKTtcbiAgICAgICAgICBpZiAoaW5kZXggPCBkaXNwbGF5TXVsdGlwbGUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgb3V0cHV0LnB1c2goJywgJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH0sIFtdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGxheSA9IGRpc3BsYXlTaW5nbGU7XG4gICAgfVxuICB9XG5cbiAgLy8gQXZvaWQgcGVyZm9ybWluZyBhIGxheW91dCBjb21wdXRhdGlvbiBpbiB0aGUgcmVuZGVyIG1ldGhvZC5cbiAgbGV0IG1lbnVNaW5XaWR0aCA9IG1lbnVNaW5XaWR0aFN0YXRlO1xuICBpZiAoIWF1dG9XaWR0aCAmJiBpc09wZW5Db250cm9sbGVkICYmIGRpc3BsYXlOb2RlKSB7XG4gICAgbWVudU1pbldpZHRoID0gYW5jaG9yRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgfVxuICBsZXQgdGFiSW5kZXg7XG4gIGlmICh0eXBlb2YgdGFiSW5kZXhQcm9wICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRhYkluZGV4ID0gdGFiSW5kZXhQcm9wO1xuICB9IGVsc2Uge1xuICAgIHRhYkluZGV4ID0gZGlzYWJsZWQgPyBudWxsIDogMDtcbiAgfVxuICBjb25zdCBidXR0b25JZCA9IFNlbGVjdERpc3BsYXlQcm9wcy5pZCB8fCAobmFtZSA/IGBtdWktY29tcG9uZW50LXNlbGVjdC0ke25hbWV9YCA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICB2YXJpYW50LFxuICAgIHZhbHVlLFxuICAgIG9wZW4sXG4gICAgZXJyb3JcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgcGFwZXJQcm9wcyA9IF9leHRlbmRzKHt9LCBNZW51UHJvcHMuUGFwZXJQcm9wcywgKF9NZW51UHJvcHMkc2xvdFByb3BzID0gTWVudVByb3BzLnNsb3RQcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9NZW51UHJvcHMkc2xvdFByb3BzLnBhcGVyKTtcbiAgY29uc3QgbGlzdGJveElkID0gdXNlSWQoKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goU2VsZWN0U2VsZWN0LCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IGhhbmRsZURpc3BsYXlSZWYsXG4gICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICByb2xlOiBcImNvbWJvYm94XCIsXG4gICAgICBcImFyaWEtY29udHJvbHNcIjogbGlzdGJveElkLFxuICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IGRpc2FibGVkID8gJ3RydWUnIDogdW5kZWZpbmVkLFxuICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IG9wZW4gPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgXCJhcmlhLWhhc3BvcHVwXCI6IFwibGlzdGJveFwiLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFtsYWJlbElkLCBidXR0b25JZF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKSB8fCB1bmRlZmluZWQsXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgb25Nb3VzZURvd246IGRpc2FibGVkIHx8IHJlYWRPbmx5ID8gbnVsbCA6IGhhbmRsZU1vdXNlRG93bixcbiAgICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICAgIG9uRm9jdXM6IG9uRm9jdXNcbiAgICB9LCBTZWxlY3REaXNwbGF5UHJvcHMsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goU2VsZWN0RGlzcGxheVByb3BzLmNsYXNzTmFtZSwgY2xhc3Nlcy5zZWxlY3QsIGNsYXNzTmFtZSlcbiAgICAgIC8vIFRoZSBpZCBpcyByZXF1aXJlZCBmb3IgcHJvcGVyIGExMXlcbiAgICAgICxcbiAgICAgIGlkOiBidXR0b25JZCxcbiAgICAgIGNoaWxkcmVuOiBpc0VtcHR5KGRpc3BsYXkpID8gLy8gbm90cmFuc2xhdGUgbmVlZGVkIHdoaWxlIEdvb2dsZSBUcmFuc2xhdGUgd2lsbCBub3QgZml4IHplcm8td2lkdGggc3BhY2UgaXNzdWVcbiAgICAgIF9zcGFuIHx8IChfc3BhbiA9IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJub3RyYW5zbGF0ZVwiLFxuICAgICAgICBjaGlsZHJlbjogXCJcXHUyMDBCXCJcbiAgICAgIH0pKSA6IGRpc3BsYXlcbiAgICB9KSksIC8qI19fUFVSRV9fKi9fanN4KFNlbGVjdE5hdGl2ZUlucHV0LCBfZXh0ZW5kcyh7XG4gICAgICBcImFyaWEtaW52YWxpZFwiOiBlcnJvcixcbiAgICAgIHZhbHVlOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywnKSA6IHZhbHVlLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLm5hdGl2ZUlucHV0LFxuICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSwgb3RoZXIpKSwgLyojX19QVVJFX18qL19qc3goU2VsZWN0SWNvbiwge1xuICAgICAgYXM6IEljb25Db21wb25lbnQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuaWNvbixcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9KSwgLyojX19QVVJFX18qL19qc3goTWVudSwgX2V4dGVuZHMoe1xuICAgICAgaWQ6IGBtZW51LSR7bmFtZSB8fCAnJ31gLFxuICAgICAgYW5jaG9yRWw6IGFuY2hvckVsZW1lbnQsXG4gICAgICBvcGVuOiBvcGVuLFxuICAgICAgb25DbG9zZTogaGFuZGxlQ2xvc2UsXG4gICAgICBhbmNob3JPcmlnaW46IHtcbiAgICAgICAgdmVydGljYWw6ICdib3R0b20nLFxuICAgICAgICBob3Jpem9udGFsOiAnY2VudGVyJ1xuICAgICAgfSxcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjoge1xuICAgICAgICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAgICAgIGhvcml6b250YWw6ICdjZW50ZXInXG4gICAgICB9XG4gICAgfSwgTWVudVByb3BzLCB7XG4gICAgICBNZW51TGlzdFByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiBsYWJlbElkLFxuICAgICAgICByb2xlOiAnbGlzdGJveCcsXG4gICAgICAgICdhcmlhLW11bHRpc2VsZWN0YWJsZSc6IG11bHRpcGxlID8gJ3RydWUnIDogdW5kZWZpbmVkLFxuICAgICAgICBkaXNhYmxlTGlzdFdyYXA6IHRydWUsXG4gICAgICAgIGlkOiBsaXN0Ym94SWRcbiAgICAgIH0sIE1lbnVQcm9wcy5NZW51TGlzdFByb3BzKSxcbiAgICAgIHNsb3RQcm9wczogX2V4dGVuZHMoe30sIE1lbnVQcm9wcy5zbG90UHJvcHMsIHtcbiAgICAgICAgcGFwZXI6IF9leHRlbmRzKHt9LCBwYXBlclByb3BzLCB7XG4gICAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICAgIG1pbldpZHRoOiBtZW51TWluV2lkdGhcbiAgICAgICAgICB9LCBwYXBlclByb3BzICE9IG51bGwgPyBwYXBlclByb3BzLnN0eWxlIDogbnVsbClcbiAgICAgICAgfSlcbiAgICAgIH0pLFxuICAgICAgY2hpbGRyZW46IGl0ZW1zXG4gICAgfSkpXVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU2VsZWN0SW5wdXQucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtbGFiZWwnOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHdpZHRoIG9mIHRoZSBwb3BvdmVyIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBpdGVtcyBpbnNpZGUgdGhlXG4gICAqIG1lbnUsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGF0IGxlYXN0IHRoZSB3aWR0aCBvZiB0aGUgc2VsZWN0IGlucHV0LlxuICAgKi9cbiAgYXV0b1dpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gZWxlbWVudHMgdG8gcG9wdWxhdGUgdGhlIHNlbGVjdCB3aXRoLlxuICAgKiBDYW4gYmUgc29tZSBgPE1lbnVJdGVtPmAgZWxlbWVudHMuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIENTUyBjbGFzcyBuYW1lIG9mIHRoZSBzZWxlY3QgZWxlbWVudC5cbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyB0b2dnbGVkIG9uIG1vdW50LiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IG9wZW4gc3RhdGUgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqIFlvdSBjYW4gb25seSB1c2UgaXQgd2hlbiB0aGUgYG5hdGl2ZWAgcHJvcCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICovXG4gIGRlZmF1bHRPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2VsZWN0IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2VsZWN0ZWQgaXRlbSBpcyBkaXNwbGF5ZWQgZXZlbiBpZiBpdHMgdmFsdWUgaXMgZW1wdHkuXG4gICAqL1xuICBkaXNwbGF5RW1wdHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYHNlbGVjdCBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRoYXQgZGlzcGxheXMgdGhlIGFycm93LlxuICAgKi9cbiAgSWNvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBJbXBlcmF0aXZlIGhhbmRsZSBpbXBsZW1lbnRpbmcgYHsgdmFsdWU6IFQsIG5vZGU6IEhUTUxFbGVtZW50LCBmb2N1cygpOiB2b2lkIH1gXG4gICAqIEVxdWl2YWxlbnQgdG8gYHJlZmBcbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogVGhlIElEIG9mIGFuIGVsZW1lbnQgdGhhdCBhY3RzIGFzIGFuIGFkZGl0aW9uYWwgbGFiZWwuIFRoZSBTZWxlY3Qgd2lsbFxuICAgKiBiZSBsYWJlbGxlZCBieSB0aGUgYWRkaXRpb25hbCBsYWJlbCBhbmQgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKi9cbiAgbGFiZWxJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgTWVudWBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pIGVsZW1lbnQuXG4gICAqL1xuICBNZW51UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGB2YWx1ZWAgbXVzdCBiZSBhbiBhcnJheSBhbmQgdGhlIG1lbnUgd2lsbCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbnMuXG4gICAqL1xuICBtdWx0aXBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYHNlbGVjdGAgb3IgaGlkZGVuIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBhIG1lbnUgaXRlbSBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChhbnkpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NoaWxkXSBUaGUgcmVhY3QgZWxlbWVudCB0aGF0IHdhcyBzZWxlY3RlZC5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFVzZSBpbiBjb250cm9sbGVkIG1vZGUgKHNlZSBvcGVuKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBvcGVuZWQuXG4gICAqIFVzZSBpbiBjb250cm9sbGVkIG1vZGUgKHNlZSBvcGVuKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25PcGVuOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUmVuZGVyIHRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSBgdmFsdWVgIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIHtSZWFjdE5vZGV9XG4gICAqL1xuICByZW5kZXJWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBjbGlja2FibGUgZGl2IGVsZW1lbnQuXG4gICAqL1xuICBTZWxlY3REaXNwbGF5UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0YWJJbmRleDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCB2YWx1ZS5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnc3RhbmRhcmQnLCAnb3V0bGluZWQnLCAnZmlsbGVkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgU2VsZWN0SW5wdXQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNNyAxMGw1IDUgNS01elwiXG59KSwgJ0Fycm93RHJvcERvd24nKTsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhdXRvV2lkdGhcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIiwgXCJkZWZhdWx0T3BlblwiLCBcImRpc3BsYXlFbXB0eVwiLCBcIkljb25Db21wb25lbnRcIiwgXCJpZFwiLCBcImlucHV0XCIsIFwiaW5wdXRQcm9wc1wiLCBcImxhYmVsXCIsIFwibGFiZWxJZFwiLCBcIk1lbnVQcm9wc1wiLCBcIm11bHRpcGxlXCIsIFwibmF0aXZlXCIsIFwib25DbG9zZVwiLCBcIm9uT3BlblwiLCBcIm9wZW5cIiwgXCJyZW5kZXJWYWx1ZVwiLCBcIlNlbGVjdERpc3BsYXlQcm9wc1wiLCBcInZhcmlhbnRcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJyb290XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgU2VsZWN0SW5wdXQgZnJvbSAnLi9TZWxlY3RJbnB1dCc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgQXJyb3dEcm9wRG93bkljb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL0Fycm93RHJvcERvd24nO1xuaW1wb3J0IElucHV0IGZyb20gJy4uL0lucHV0JztcbmltcG9ydCBOYXRpdmVTZWxlY3RJbnB1dCBmcm9tICcuLi9OYXRpdmVTZWxlY3QvTmF0aXZlU2VsZWN0SW5wdXQnO1xuaW1wb3J0IEZpbGxlZElucHV0IGZyb20gJy4uL0ZpbGxlZElucHV0JztcbmltcG9ydCBPdXRsaW5lZElucHV0IGZyb20gJy4uL091dGxpbmVkSW5wdXQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICByZXR1cm4gY2xhc3Nlcztcbn07XG5jb25zdCBzdHlsZWRSb290Q29uZmlnID0ge1xuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdCxcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApICYmIHByb3AgIT09ICd2YXJpYW50JyxcbiAgc2xvdDogJ1Jvb3QnXG59O1xuY29uc3QgU3R5bGVkSW5wdXQgPSBzdHlsZWQoSW5wdXQsIHN0eWxlZFJvb3RDb25maWcpKCcnKTtcbmNvbnN0IFN0eWxlZE91dGxpbmVkSW5wdXQgPSBzdHlsZWQoT3V0bGluZWRJbnB1dCwgc3R5bGVkUm9vdENvbmZpZykoJycpO1xuY29uc3QgU3R5bGVkRmlsbGVkSW5wdXQgPSBzdHlsZWQoRmlsbGVkSW5wdXQsIHN0eWxlZFJvb3RDb25maWcpKCcnKTtcbmNvbnN0IFNlbGVjdCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFNlbGVjdChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIG5hbWU6ICdNdWlTZWxlY3QnLFxuICAgIHByb3BzOiBpblByb3BzXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhdXRvV2lkdGggPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NlczogY2xhc3Nlc1Byb3AgPSB7fSxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlZmF1bHRPcGVuID0gZmFsc2UsXG4gICAgICBkaXNwbGF5RW1wdHkgPSBmYWxzZSxcbiAgICAgIEljb25Db21wb25lbnQgPSBBcnJvd0Ryb3BEb3duSWNvbixcbiAgICAgIGlkLFxuICAgICAgaW5wdXQsXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgbGFiZWwsXG4gICAgICBsYWJlbElkLFxuICAgICAgTWVudVByb3BzLFxuICAgICAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgICAgIG5hdGl2ZSA9IGZhbHNlLFxuICAgICAgb25DbG9zZSxcbiAgICAgIG9uT3BlbixcbiAgICAgIG9wZW4sXG4gICAgICByZW5kZXJWYWx1ZSxcbiAgICAgIFNlbGVjdERpc3BsYXlQcm9wcyxcbiAgICAgIHZhcmlhbnQ6IHZhcmlhbnRQcm9wID0gJ291dGxpbmVkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBpbnB1dENvbXBvbmVudCA9IG5hdGl2ZSA/IE5hdGl2ZVNlbGVjdElucHV0IDogU2VsZWN0SW5wdXQ7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ3ZhcmlhbnQnLCAnZXJyb3InXVxuICB9KTtcbiAgY29uc3QgdmFyaWFudCA9IGZjcy52YXJpYW50IHx8IHZhcmlhbnRQcm9wO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzOiBjbGFzc2VzUHJvcFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCByZXN0T2ZDbGFzc2VzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoY2xhc3NlcywgX2V4Y2x1ZGVkMik7XG4gIGNvbnN0IElucHV0Q29tcG9uZW50ID0gaW5wdXQgfHwge1xuICAgIHN0YW5kYXJkOiAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRJbnB1dCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pLFxuICAgIG91dGxpbmVkOiAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRPdXRsaW5lZElucHV0LCB7XG4gICAgICBsYWJlbDogbGFiZWwsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSksXG4gICAgZmlsbGVkOiAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRGaWxsZWRJbnB1dCwge1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pXG4gIH1bdmFyaWFudF07XG4gIGNvbnN0IGlucHV0Q29tcG9uZW50UmVmID0gdXNlRm9ya1JlZihyZWYsIElucHV0Q29tcG9uZW50LnJlZik7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KElucHV0Q29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICAvLyBNb3N0IG9mIHRoZSBsb2dpYyBpcyBpbXBsZW1lbnRlZCBpbiBgU2VsZWN0SW5wdXRgLlxuICAgICAgLy8gVGhlIGBTZWxlY3RgIGNvbXBvbmVudCBpcyBhIHNpbXBsZSBBUEkgd3JhcHBlciB0byBleHBvc2Ugc29tZXRoaW5nIGJldHRlciB0byBwbGF5IHdpdGguXG4gICAgICBpbnB1dENvbXBvbmVudCxcbiAgICAgIGlucHV0UHJvcHM6IF9leHRlbmRzKHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgICAgIEljb25Db21wb25lbnQsXG4gICAgICAgIHZhcmlhbnQsXG4gICAgICAgIHR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gV2UgcmVuZGVyIGEgc2VsZWN0LiBXZSBjYW4gaWdub3JlIHRoZSB0eXBlIHByb3ZpZGVkIGJ5IHRoZSBgSW5wdXRgLlxuICAgICAgICBtdWx0aXBsZVxuICAgICAgfSwgbmF0aXZlID8ge1xuICAgICAgICBpZFxuICAgICAgfSA6IHtcbiAgICAgICAgYXV0b1dpZHRoLFxuICAgICAgICBkZWZhdWx0T3BlbixcbiAgICAgICAgZGlzcGxheUVtcHR5LFxuICAgICAgICBsYWJlbElkLFxuICAgICAgICBNZW51UHJvcHMsXG4gICAgICAgIG9uQ2xvc2UsXG4gICAgICAgIG9uT3BlbixcbiAgICAgICAgb3BlbixcbiAgICAgICAgcmVuZGVyVmFsdWUsXG4gICAgICAgIFNlbGVjdERpc3BsYXlQcm9wczogX2V4dGVuZHMoe1xuICAgICAgICAgIGlkXG4gICAgICAgIH0sIFNlbGVjdERpc3BsYXlQcm9wcylcbiAgICAgIH0sIGlucHV0UHJvcHMsIHtcbiAgICAgICAgY2xhc3NlczogaW5wdXRQcm9wcyA/IGRlZXBtZXJnZShyZXN0T2ZDbGFzc2VzLCBpbnB1dFByb3BzLmNsYXNzZXMpIDogcmVzdE9mQ2xhc3Nlc1xuICAgICAgfSwgaW5wdXQgPyBpbnB1dC5wcm9wcy5pbnB1dFByb3BzIDoge30pXG4gICAgfSwgKG11bHRpcGxlICYmIG5hdGl2ZSB8fCBkaXNwbGF5RW1wdHkpICYmIHZhcmlhbnQgPT09ICdvdXRsaW5lZCcgPyB7XG4gICAgICBub3RjaGVkOiB0cnVlXG4gICAgfSA6IHt9LCB7XG4gICAgICByZWY6IGlucHV0Q29tcG9uZW50UmVmLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KElucHV0Q29tcG9uZW50LnByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lLCBjbGFzc2VzLnJvb3QpXG4gICAgfSwgIWlucHV0ICYmIHtcbiAgICAgIHZhcmlhbnRcbiAgICB9LCBvdGhlcikpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBTZWxlY3QucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgd2lkdGggb2YgdGhlIHBvcG92ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIGl0ZW1zIGluc2lkZSB0aGVcbiAgICogbWVudSwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgYXQgbGVhc3QgdGhlIHdpZHRoIG9mIHRoZSBzZWxlY3QgaW5wdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIG9wdGlvbiBlbGVtZW50cyB0byBwb3B1bGF0ZSB0aGUgc2VsZWN0IHdpdGguXG4gICAqIENhbiBiZSBzb21lIGBNZW51SXRlbWAgd2hlbiBgbmF0aXZlYCBpcyBmYWxzZSBhbmQgYG9wdGlvbmAgd2hlbiBgbmF0aXZlYCBpcyB0cnVlLlxuICAgKlxuICAgKiDimqDvuI9UaGUgYE1lbnVJdGVtYCBlbGVtZW50cyAqKm11c3QqKiBiZSBkaXJlY3QgZGVzY2VuZGFudHMgd2hlbiBgbmF0aXZlYCBpcyBmYWxzZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGx5IG9wZW4uIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgb3BlbiBzdGF0ZSBpcyBub3QgY29udHJvbGxlZCAoaS5lLiB0aGUgYG9wZW5gIHByb3AgaXMgbm90IGRlZmluZWQpLlxuICAgKiBZb3UgY2FuIG9ubHkgdXNlIGl0IHdoZW4gdGhlIGBuYXRpdmVgIHByb3AgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWZhdWx0T3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSB2YWx1ZSBpcyBkaXNwbGF5ZWQgZXZlbiBpZiBubyBpdGVtcyBhcmUgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEluIG9yZGVyIHRvIGRpc3BsYXkgYSBtZWFuaW5nZnVsIHZhbHVlLCBhIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGByZW5kZXJWYWx1ZWAgcHJvcCB3aGljaFxuICAgKiByZXR1cm5zIHRoZSB2YWx1ZSB0byBiZSBkaXNwbGF5ZWQgd2hlbiBubyBpdGVtcyBhcmUgc2VsZWN0ZWQuXG4gICAqXG4gICAqIOKaoO+4jyBXaGVuIHVzaW5nIHRoaXMgcHJvcCwgbWFrZSBzdXJlIHRoZSBsYWJlbCBkb2Vzbid0IG92ZXJsYXAgd2l0aCB0aGUgZW1wdHkgZGlzcGxheWVkIHZhbHVlLlxuICAgKiBUaGUgbGFiZWwgc2hvdWxkIGVpdGhlciBiZSBoaWRkZW4gb3IgZm9yY2VkIHRvIGEgc2hydW5rIHN0YXRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzcGxheUVtcHR5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRoYXQgZGlzcGxheXMgdGhlIGFycm93LlxuICAgKiBAZGVmYXVsdCBBcnJvd0Ryb3BEb3duSWNvblxuICAgKi9cbiAgSWNvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGBpZGAgb2YgdGhlIHdyYXBwZXIgZWxlbWVudCBvciB0aGUgYHNlbGVjdGAgZWxlbWVudCB3aGVuIGBuYXRpdmVgLlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBBbiBgSW5wdXRgIGVsZW1lbnQ7IGRvZXMgbm90IGhhdmUgdG8gYmUgYSBtYXRlcmlhbC11aSBzcGVjaWZpYyBgSW5wdXRgLlxuICAgKi9cbiAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50LFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIFdoZW4gYG5hdGl2ZWAgaXMgYHRydWVgLCB0aGUgYXR0cmlidXRlcyBhcmUgYXBwbGllZCBvbiB0aGUgYHNlbGVjdGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBTZWUgW091dGxpbmVkSW5wdXQjbGFiZWxdKC9tYXRlcmlhbC11aS9hcGkvb3V0bGluZWQtaW5wdXQvI3Byb3BzKVxuICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIElEIG9mIGFuIGVsZW1lbnQgdGhhdCBhY3RzIGFzIGFuIGFkZGl0aW9uYWwgbGFiZWwuIFRoZSBTZWxlY3Qgd2lsbFxuICAgKiBiZSBsYWJlbGxlZCBieSB0aGUgYWRkaXRpb25hbCBsYWJlbCBhbmQgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKi9cbiAgbGFiZWxJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgTWVudWBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pIGVsZW1lbnQuXG4gICAqL1xuICBNZW51UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGB2YWx1ZWAgbXVzdCBiZSBhbiBhcnJheSBhbmQgdGhlIG1lbnUgd2lsbCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbnMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aXBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgdXNlcyBhIG5hdGl2ZSBgc2VsZWN0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbmF0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gYSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7U2VsZWN0Q2hhbmdlRXZlbnQ8VmFsdWU+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoYW55KS5cbiAgICogKipXYXJuaW5nKio6IFRoaXMgaXMgYSBnZW5lcmljIGV2ZW50LCBub3QgYSBjaGFuZ2UgZXZlbnQsIHVubGVzcyB0aGUgY2hhbmdlIGV2ZW50IGlzIGNhdXNlZCBieSBicm93c2VyIGF1dG9maWxsLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NoaWxkXSBUaGUgcmVhY3QgZWxlbWVudCB0aGF0IHdhcyBzZWxlY3RlZCB3aGVuIGBuYXRpdmVgIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVXNlIGl0IGluIGVpdGhlciBjb250cm9sbGVkIChzZWUgdGhlIGBvcGVuYCBwcm9wKSwgb3IgdW5jb250cm9sbGVkIG1vZGUgKHRvIGRldGVjdCB3aGVuIHRoZSBTZWxlY3QgY29sbGFwc2VzKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgb3BlbmVkLlxuICAgKiBVc2UgaXQgaW4gZWl0aGVyIGNvbnRyb2xsZWQgKHNlZSB0aGUgYG9wZW5gIHByb3ApLCBvciB1bmNvbnRyb2xsZWQgbW9kZSAodG8gZGV0ZWN0IHdoZW4gdGhlIFNlbGVjdCBleHBhbmRzKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25PcGVuOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKi9cbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKiBZb3UgY2FuIG9ubHkgdXNlIGl0IHdoZW4gdGhlIGBuYXRpdmVgIHByb3AgaXMgYGZhbHNlYCAoZGVmYXVsdCkuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSBUaGUgYHZhbHVlYCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyB7UmVhY3ROb2RlfVxuICAgKi9cbiAgcmVuZGVyVmFsdWU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgY2xpY2thYmxlIGRpdiBlbGVtZW50LlxuICAgKi9cbiAgU2VsZWN0RGlzcGxheVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIGBpbnB1dGAgdmFsdWUuIFByb3ZpZGluZyBhbiBlbXB0eSBzdHJpbmcgd2lsbCBzZWxlY3Qgbm8gb3B0aW9ucy5cbiAgICogU2V0IHRvIGFuIGVtcHR5IHN0cmluZyBgJydgIGlmIHlvdSBkb24ndCB3YW50IGFueSBvZiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgdG8gYmUgc2VsZWN0ZWQuXG4gICAqXG4gICAqIElmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QgaXQgbXVzdCBoYXZlIHJlZmVyZW5jZSBlcXVhbGl0eSB3aXRoIHRoZSBvcHRpb24gaW4gb3JkZXIgdG8gYmUgc2VsZWN0ZWQuXG4gICAqIElmIHRoZSB2YWx1ZSBpcyBub3QgYW4gb2JqZWN0LCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG11c3QgbWF0Y2ggd2l0aCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvcHRpb24gaW4gb3JkZXIgdG8gYmUgc2VsZWN0ZWQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnJ10pLCBQcm9wVHlwZXMuYW55XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcblNlbGVjdC5tdWlOYW1lID0gJ1NlbGVjdCc7XG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVRleHRGaWVsZCcsIHNsb3QpO1xufVxuY29uc3QgdGV4dEZpZWxkQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVRleHRGaWVsZCcsIFsncm9vdCddKTtcbmV4cG9ydCBkZWZhdWx0IHRleHRGaWVsZENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXV0b0NvbXBsZXRlXCIsIFwiYXV0b0ZvY3VzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJGb3JtSGVscGVyVGV4dFByb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaGVscGVyVGV4dFwiLCBcImlkXCIsIFwiSW5wdXRMYWJlbFByb3BzXCIsIFwiaW5wdXRQcm9wc1wiLCBcIklucHV0UHJvcHNcIiwgXCJpbnB1dFJlZlwiLCBcImxhYmVsXCIsIFwibWF4Um93c1wiLCBcIm1pblJvd3NcIiwgXCJtdWx0aWxpbmVcIiwgXCJuYW1lXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkZvY3VzXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJyZXF1aXJlZFwiLCBcInJvd3NcIiwgXCJzZWxlY3RcIiwgXCJTZWxlY3RQcm9wc1wiLCBcInR5cGVcIiwgXCJ2YWx1ZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgdXNlSWQgZnJvbSAnQG11aS91dGlscy91c2VJZCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBJbnB1dCBmcm9tICcuLi9JbnB1dCc7XG5pbXBvcnQgRmlsbGVkSW5wdXQgZnJvbSAnLi4vRmlsbGVkSW5wdXQnO1xuaW1wb3J0IE91dGxpbmVkSW5wdXQgZnJvbSAnLi4vT3V0bGluZWRJbnB1dCc7XG5pbXBvcnQgSW5wdXRMYWJlbCBmcm9tICcuLi9JbnB1dExhYmVsJztcbmltcG9ydCBGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbCc7XG5pbXBvcnQgRm9ybUhlbHBlclRleHQgZnJvbSAnLi4vRm9ybUhlbHBlclRleHQnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICcuLi9TZWxlY3QnO1xuaW1wb3J0IHsgZ2V0VGV4dEZpZWxkVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi90ZXh0RmllbGRDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB2YXJpYW50Q29tcG9uZW50ID0ge1xuICBzdGFuZGFyZDogSW5wdXQsXG4gIGZpbGxlZDogRmlsbGVkSW5wdXQsXG4gIG91dGxpbmVkOiBPdXRsaW5lZElucHV0XG59O1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VGV4dEZpZWxkVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBUZXh0RmllbGRSb290ID0gc3R5bGVkKEZvcm1Db250cm9sLCB7XG4gIG5hbWU6ICdNdWlUZXh0RmllbGQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHt9KTtcblxuLyoqXG4gKiBUaGUgYFRleHRGaWVsZGAgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGZvciB0aGUgbW9zdCBjb21tb24gY2FzZXMgKDgwJSkuXG4gKiBJdCBjYW5ub3QgYmUgYWxsIHRoaW5ncyB0byBhbGwgcGVvcGxlLCBvdGhlcndpc2UgdGhlIEFQSSB3b3VsZCBncm93IG91dCBvZiBjb250cm9sLlxuICpcbiAqICMjIEFkdmFuY2VkIENvbmZpZ3VyYXRpb25cbiAqXG4gKiBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoYXQgdGhlIHRleHQgZmllbGQgaXMgYSBzaW1wbGUgYWJzdHJhY3Rpb25cbiAqIG9uIHRvcCBvZiB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKlxuICogLSBbRm9ybUNvbnRyb2xdKC9tYXRlcmlhbC11aS9hcGkvZm9ybS1jb250cm9sLylcbiAqIC0gW0lucHV0TGFiZWxdKC9tYXRlcmlhbC11aS9hcGkvaW5wdXQtbGFiZWwvKVxuICogLSBbRmlsbGVkSW5wdXRdKC9tYXRlcmlhbC11aS9hcGkvZmlsbGVkLWlucHV0LylcbiAqIC0gW091dGxpbmVkSW5wdXRdKC9tYXRlcmlhbC11aS9hcGkvb3V0bGluZWQtaW5wdXQvKVxuICogLSBbSW5wdXRdKC9tYXRlcmlhbC11aS9hcGkvaW5wdXQvKVxuICogLSBbRm9ybUhlbHBlclRleHRdKC9tYXRlcmlhbC11aS9hcGkvZm9ybS1oZWxwZXItdGV4dC8pXG4gKlxuICogSWYgeW91IHdpc2ggdG8gYWx0ZXIgdGhlIHByb3BzIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudCwgeW91IGNhbiBkbyBzbyBhcyBmb2xsb3dzOlxuICpcbiAqIGBgYGpzeFxuICogY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAqICAgc3RlcDogMzAwLFxuICogfTtcbiAqXG4gKiByZXR1cm4gPFRleHRGaWVsZCBpZD1cInRpbWVcIiB0eXBlPVwidGltZVwiIGlucHV0UHJvcHM9e2lucHV0UHJvcHN9IC8+O1xuICogYGBgXG4gKlxuICogRm9yIGFkdmFuY2VkIGNhc2VzLCBwbGVhc2UgbG9vayBhdCB0aGUgc291cmNlIG9mIFRleHRGaWVsZCBieSBjbGlja2luZyBvbiB0aGVcbiAqIFwiRWRpdCB0aGlzIHBhZ2VcIiBidXR0b24gYWJvdmUuIENvbnNpZGVyIGVpdGhlcjpcbiAqXG4gKiAtIHVzaW5nIHRoZSB1cHBlciBjYXNlIHByb3BzIGZvciBwYXNzaW5nIHZhbHVlcyBkaXJlY3RseSB0byB0aGUgY29tcG9uZW50c1xuICogLSB1c2luZyB0aGUgdW5kZXJseWluZyBjb21wb25lbnRzIGRpcmVjdGx5IGFzIHNob3duIGluIHRoZSBkZW1vc1xuICovXG5jb25zdCBUZXh0RmllbGQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUZXh0RmllbGQoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVGV4dEZpZWxkJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYXV0b0NvbXBsZXRlLFxuICAgICAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGVycm9yID0gZmFsc2UsXG4gICAgICBGb3JtSGVscGVyVGV4dFByb3BzLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBoZWxwZXJUZXh0LFxuICAgICAgaWQ6IGlkT3ZlcnJpZGUsXG4gICAgICBJbnB1dExhYmVsUHJvcHMsXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgSW5wdXRQcm9wcyxcbiAgICAgIGlucHV0UmVmLFxuICAgICAgbGFiZWwsXG4gICAgICBtYXhSb3dzLFxuICAgICAgbWluUm93cyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHJvd3MsXG4gICAgICBzZWxlY3QgPSBmYWxzZSxcbiAgICAgIFNlbGVjdFByb3BzLFxuICAgICAgdHlwZSxcbiAgICAgIHZhbHVlLFxuICAgICAgdmFyaWFudCA9ICdvdXRsaW5lZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGF1dG9Gb2N1cyxcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBmdWxsV2lkdGgsXG4gICAgbXVsdGlsaW5lLFxuICAgIHJlcXVpcmVkLFxuICAgIHNlbGVjdCxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHNlbGVjdCAmJiAhY2hpbGRyZW4pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGNoaWxkcmVuYCBtdXN0IGJlIHBhc3NlZCB3aGVuIHVzaW5nIHRoZSBgVGV4dEZpZWxkYCBjb21wb25lbnQgd2l0aCBgc2VsZWN0YC4nKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgSW5wdXRNb3JlID0ge307XG4gIGlmICh2YXJpYW50ID09PSAnb3V0bGluZWQnKSB7XG4gICAgaWYgKElucHV0TGFiZWxQcm9wcyAmJiB0eXBlb2YgSW5wdXRMYWJlbFByb3BzLnNocmluayAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIElucHV0TW9yZS5ub3RjaGVkID0gSW5wdXRMYWJlbFByb3BzLnNocmluaztcbiAgICB9XG4gICAgSW5wdXRNb3JlLmxhYmVsID0gbGFiZWw7XG4gIH1cbiAgaWYgKHNlbGVjdCkge1xuICAgIC8vIHVuc2V0IGRlZmF1bHRzIGZyb20gdGV4dGJveCBpbnB1dHNcbiAgICBpZiAoIVNlbGVjdFByb3BzIHx8ICFTZWxlY3RQcm9wcy5uYXRpdmUpIHtcbiAgICAgIElucHV0TW9yZS5pZCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgSW5wdXRNb3JlWydhcmlhLWRlc2NyaWJlZGJ5J10gPSB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaWQgPSB1c2VJZChpZE92ZXJyaWRlKTtcbiAgY29uc3QgaGVscGVyVGV4dElkID0gaGVscGVyVGV4dCAmJiBpZCA/IGAke2lkfS1oZWxwZXItdGV4dGAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGlucHV0TGFiZWxJZCA9IGxhYmVsICYmIGlkID8gYCR7aWR9LWxhYmVsYCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgSW5wdXRDb21wb25lbnQgPSB2YXJpYW50Q29tcG9uZW50W3ZhcmlhbnRdO1xuICBjb25zdCBJbnB1dEVsZW1lbnQgPSAvKiNfX1BVUkVfXyovX2pzeChJbnB1dENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBoZWxwZXJUZXh0SWQsXG4gICAgYXV0b0NvbXBsZXRlOiBhdXRvQ29tcGxldGUsXG4gICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgbmFtZTogbmFtZSxcbiAgICByb3dzOiByb3dzLFxuICAgIG1heFJvd3M6IG1heFJvd3MsXG4gICAgbWluUm93czogbWluUm93cyxcbiAgICB0eXBlOiB0eXBlLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBpZDogaWQsXG4gICAgaW5wdXRSZWY6IGlucHV0UmVmLFxuICAgIG9uQmx1cjogb25CbHVyLFxuICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICBvbkZvY3VzOiBvbkZvY3VzLFxuICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICBpbnB1dFByb3BzOiBpbnB1dFByb3BzXG4gIH0sIElucHV0TW9yZSwgSW5wdXRQcm9wcykpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFRleHRGaWVsZFJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBlcnJvcjogZXJyb3IsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgcmVmOiByZWYsXG4gICAgcmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgIGNvbG9yOiBjb2xvcixcbiAgICB2YXJpYW50OiB2YXJpYW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogW2xhYmVsICE9IG51bGwgJiYgbGFiZWwgIT09ICcnICYmIC8qI19fUFVSRV9fKi9fanN4KElucHV0TGFiZWwsIF9leHRlbmRzKHtcbiAgICAgIGh0bWxGb3I6IGlkLFxuICAgICAgaWQ6IGlucHV0TGFiZWxJZFxuICAgIH0sIElucHV0TGFiZWxQcm9wcywge1xuICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgfSkpLCBzZWxlY3QgPyAvKiNfX1BVUkVfXyovX2pzeChTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBoZWxwZXJUZXh0SWQsXG4gICAgICBpZDogaWQsXG4gICAgICBsYWJlbElkOiBpbnB1dExhYmVsSWQsXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBpbnB1dDogSW5wdXRFbGVtZW50XG4gICAgfSwgU2VsZWN0UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pKSA6IElucHV0RWxlbWVudCwgaGVscGVyVGV4dCAmJiAvKiNfX1BVUkVfXyovX2pzeChGb3JtSGVscGVyVGV4dCwgX2V4dGVuZHMoe1xuICAgICAgaWQ6IGhlbHBlclRleHRJZFxuICAgIH0sIEZvcm1IZWxwZXJUZXh0UHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBoZWxwZXJUZXh0XG4gICAgfSkpXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRleHRGaWVsZC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYEZvcm1IZWxwZXJUZXh0YF0oL21hdGVyaWFsLXVpL2FwaS9mb3JtLWhlbHBlci10ZXh0LykgZWxlbWVudC5cbiAgICovXG4gIEZvcm1IZWxwZXJUZXh0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBpbnB1dCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaGVscGVyIHRleHQgY29udGVudC5cbiAgICovXG4gIGhlbHBlclRleHQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIFVzZSB0aGlzIHByb3AgdG8gbWFrZSBgbGFiZWxgIGFuZCBgaGVscGVyVGV4dGAgYWNjZXNzaWJsZSBmb3Igc2NyZWVuIHJlYWRlcnMuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgSW5wdXRMYWJlbGBdKC9tYXRlcmlhbC11aS9hcGkvaW5wdXQtbGFiZWwvKSBlbGVtZW50LlxuICAgKiBQb2ludGVyIGV2ZW50cyBsaWtlIGBvbkNsaWNrYCBhcmUgZW5hYmxlZCBpZiBhbmQgb25seSBpZiBgc2hyaW5rYCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBJbnB1dExhYmVsUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBJbnB1dCBlbGVtZW50LlxuICAgKiBJdCB3aWxsIGJlIGEgW2BGaWxsZWRJbnB1dGBdKC9tYXRlcmlhbC11aS9hcGkvZmlsbGVkLWlucHV0LyksXG4gICAqIFtgT3V0bGluZWRJbnB1dGBdKC9tYXRlcmlhbC11aS9hcGkvb3V0bGluZWQtaW5wdXQvKSBvciBbYElucHV0YF0oL21hdGVyaWFsLXVpL2FwaS9pbnB1dC8pXG4gICAqIGNvbXBvbmVudCBkZXBlbmRpbmcgb24gdGhlIGB2YXJpYW50YCBwcm9wIHZhbHVlLlxuICAgKi9cbiAgSW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogVGhlIGxhYmVsIGNvbnRlbnQuXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgIG9yIGBub3JtYWxgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nIG9mIHRoaXMgYW5kIGNvbnRhaW5lZCBjb21wb25lbnRzLlxuICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZScsICdub3JtYWwnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBgdGV4dGFyZWFgIGVsZW1lbnQgaXMgcmVuZGVyZWQgaW5zdGVhZCBvZiBhbiBpbnB1dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBhcyByZXF1aXJlZCBhbmQgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogUmVuZGVyIGEgW2BTZWxlY3RgXSgvbWF0ZXJpYWwtdWkvYXBpL3NlbGVjdC8pIGVsZW1lbnQgd2hpbGUgcGFzc2luZyB0aGUgSW5wdXQgZWxlbWVudCB0byBgU2VsZWN0YCBhcyBgaW5wdXRgIHBhcmFtZXRlci5cbiAgICogSWYgdGhpcyBvcHRpb24gaXMgc2V0IHlvdSBtdXN0IHBhc3MgdGhlIG9wdGlvbnMgb2YgdGhlIHNlbGVjdCBhcyBjaGlsZHJlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYFNlbGVjdGBdKC9tYXRlcmlhbC11aS9hcGkvc2VsZWN0LykgZWxlbWVudC5cbiAgICovXG4gIFNlbGVjdFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ291dGxpbmVkJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVGV4dEZpZWxkOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm9uQ2hhbmdlXCIsIFwibWF4Um93c1wiLCBcIm1pblJvd3NcIiwgXCJzdHlsZVwiLCBcInZhbHVlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVuc3RhYmxlX2RlYm91bmNlIGFzIGRlYm91bmNlLCB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYsIHVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0IGFzIHVzZUVuaGFuY2VkRWZmZWN0LCB1bnN0YWJsZV9vd25lcldpbmRvdyBhcyBvd25lcldpbmRvdyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIGdldFN0eWxlVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCkgfHwgMDtcbn1cbmNvbnN0IHN0eWxlcyA9IHtcbiAgc2hhZG93OiB7XG4gICAgLy8gVmlzaWJpbGl0eSBuZWVkZWQgdG8gaGlkZSB0aGUgZXh0cmEgdGV4dCBhcmVhIG9uIGlQYWRzXG4gICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgLy8gUmVtb3ZlIGZyb20gdGhlIGNvbnRlbnQgZmxvd1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIC8vIElnbm9yZSB0aGUgc2Nyb2xsYmFyIHdpZHRoXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIGhlaWdodDogMCxcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogMCxcbiAgICAvLyBDcmVhdGUgYSBuZXcgbGF5ZXIsIGluY3JlYXNlIHRoZSBpc29sYXRpb24gb2YgdGhlIGNvbXB1dGVkIHZhbHVlc1xuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVooMCknXG4gIH1cbn07XG5mdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8IE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwIHx8IG9iai5vdXRlckhlaWdodFN0eWxlID09PSAwICYmICFvYmoub3ZlcmZsb3dpbmc7XG59XG5cbi8qKlxuICpcbiAqIERlbW9zOlxuICpcbiAqIC0gW1RleHRhcmVhIEF1dG9zaXplXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKVxuICpcbiAqIEFQSTpcbiAqXG4gKiAtIFtUZXh0YXJlYUF1dG9zaXplIEFQSV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2FwaS90ZXh0YXJlYS1hdXRvc2l6ZS8pXG4gKi9cbmNvbnN0IFRleHRhcmVhQXV0b3NpemUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUZXh0YXJlYUF1dG9zaXplKHByb3BzLCBmb3J3YXJkZWRSZWYpIHtcbiAgY29uc3Qge1xuICAgICAgb25DaGFuZ2UsXG4gICAgICBtYXhSb3dzLFxuICAgICAgbWluUm93cyA9IDEsXG4gICAgICBzdHlsZSxcbiAgICAgIHZhbHVlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50OiBpc0NvbnRyb2xsZWRcbiAgfSA9IFJlYWN0LnVzZVJlZih2YWx1ZSAhPSBudWxsKTtcbiAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYoZm9yd2FyZGVkUmVmLCBpbnB1dFJlZik7XG4gIGNvbnN0IGhlaWdodFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3Qgc2hhZG93UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBjYWxjdWxhdGVUZXh0YXJlYVN0eWxlcyA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3coaW5wdXQpO1xuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBjb250YWluZXJXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpbnB1dCk7XG5cbiAgICAvLyBJZiBpbnB1dCdzIHdpZHRoIGlzIHNocnVuayBhbmQgaXQncyBub3QgdmlzaWJsZSwgZG9uJ3Qgc3luYyBoZWlnaHQuXG4gICAgaWYgKGNvbXB1dGVkU3R5bGUud2lkdGggPT09ICcwcHgnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRlckhlaWdodFN0eWxlOiAwLFxuICAgICAgICBvdmVyZmxvd2luZzogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGlucHV0U2hhbGxvdyA9IHNoYWRvd1JlZi5jdXJyZW50O1xuICAgIGlucHV0U2hhbGxvdy5zdHlsZS53aWR0aCA9IGNvbXB1dGVkU3R5bGUud2lkdGg7XG4gICAgaW5wdXRTaGFsbG93LnZhbHVlID0gaW5wdXQudmFsdWUgfHwgcHJvcHMucGxhY2Vob2xkZXIgfHwgJ3gnO1xuICAgIGlmIChpbnB1dFNoYWxsb3cudmFsdWUuc2xpY2UoLTEpID09PSAnXFxuJykge1xuICAgICAgLy8gQ2VydGFpbiBmb250cyB3aGljaCBvdmVyZmxvdyB0aGUgbGluZSBoZWlnaHQgd2lsbCBjYXVzZSB0aGUgdGV4dGFyZWFcbiAgICAgIC8vIHRvIHJlcG9ydCBhIGRpZmZlcmVudCBzY3JvbGxIZWlnaHQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGxhc3QgbGluZVxuICAgICAgLy8gaXMgZW1wdHkuIE1ha2UgaXQgbm9uLWVtcHR5IHRvIGF2b2lkIHRoaXMgaXNzdWUuXG4gICAgICBpbnB1dFNoYWxsb3cudmFsdWUgKz0gJyAnO1xuICAgIH1cbiAgICBjb25zdCBib3hTaXppbmcgPSBjb21wdXRlZFN0eWxlLmJveFNpemluZztcbiAgICBjb25zdCBwYWRkaW5nID0gZ2V0U3R5bGVWYWx1ZShjb21wdXRlZFN0eWxlLnBhZGRpbmdCb3R0b20pICsgZ2V0U3R5bGVWYWx1ZShjb21wdXRlZFN0eWxlLnBhZGRpbmdUb3ApO1xuICAgIGNvbnN0IGJvcmRlciA9IGdldFN0eWxlVmFsdWUoY29tcHV0ZWRTdHlsZS5ib3JkZXJCb3R0b21XaWR0aCkgKyBnZXRTdHlsZVZhbHVlKGNvbXB1dGVkU3R5bGUuYm9yZGVyVG9wV2lkdGgpO1xuXG4gICAgLy8gVGhlIGhlaWdodCBvZiB0aGUgaW5uZXIgY29udGVudFxuICAgIGNvbnN0IGlubmVySGVpZ2h0ID0gaW5wdXRTaGFsbG93LnNjcm9sbEhlaWdodDtcblxuICAgIC8vIE1lYXN1cmUgaGVpZ2h0IG9mIGEgdGV4dGFyZWEgd2l0aCBhIHNpbmdsZSByb3dcbiAgICBpbnB1dFNoYWxsb3cudmFsdWUgPSAneCc7XG4gICAgY29uc3Qgc2luZ2xlUm93SGVpZ2h0ID0gaW5wdXRTaGFsbG93LnNjcm9sbEhlaWdodDtcblxuICAgIC8vIFRoZSBoZWlnaHQgb2YgdGhlIG91dGVyIGNvbnRlbnRcbiAgICBsZXQgb3V0ZXJIZWlnaHQgPSBpbm5lckhlaWdodDtcbiAgICBpZiAobWluUm93cykge1xuICAgICAgb3V0ZXJIZWlnaHQgPSBNYXRoLm1heChOdW1iZXIobWluUm93cykgKiBzaW5nbGVSb3dIZWlnaHQsIG91dGVySGVpZ2h0KTtcbiAgICB9XG4gICAgaWYgKG1heFJvd3MpIHtcbiAgICAgIG91dGVySGVpZ2h0ID0gTWF0aC5taW4oTnVtYmVyKG1heFJvd3MpICogc2luZ2xlUm93SGVpZ2h0LCBvdXRlckhlaWdodCk7XG4gICAgfVxuICAgIG91dGVySGVpZ2h0ID0gTWF0aC5tYXgob3V0ZXJIZWlnaHQsIHNpbmdsZVJvd0hlaWdodCk7XG5cbiAgICAvLyBUYWtlIHRoZSBib3ggc2l6aW5nIGludG8gYWNjb3VudCBmb3IgYXBwbHlpbmcgdGhpcyB2YWx1ZSBhcyBhIHN0eWxlLlxuICAgIGNvbnN0IG91dGVySGVpZ2h0U3R5bGUgPSBvdXRlckhlaWdodCArIChib3hTaXppbmcgPT09ICdib3JkZXItYm94JyA/IHBhZGRpbmcgKyBib3JkZXIgOiAwKTtcbiAgICBjb25zdCBvdmVyZmxvd2luZyA9IE1hdGguYWJzKG91dGVySGVpZ2h0IC0gaW5uZXJIZWlnaHQpIDw9IDE7XG4gICAgcmV0dXJuIHtcbiAgICAgIG91dGVySGVpZ2h0U3R5bGUsXG4gICAgICBvdmVyZmxvd2luZ1xuICAgIH07XG4gIH0sIFttYXhSb3dzLCBtaW5Sb3dzLCBwcm9wcy5wbGFjZWhvbGRlcl0pO1xuICBjb25zdCBzeW5jSGVpZ2h0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHRleHRhcmVhU3R5bGVzID0gY2FsY3VsYXRlVGV4dGFyZWFTdHlsZXMoKTtcbiAgICBpZiAoaXNFbXB0eSh0ZXh0YXJlYVN0eWxlcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3V0ZXJIZWlnaHRTdHlsZSA9IHRleHRhcmVhU3R5bGVzLm91dGVySGVpZ2h0U3R5bGU7XG4gICAgY29uc3QgaW5wdXQgPSBpbnB1dFJlZi5jdXJyZW50O1xuICAgIGlmIChoZWlnaHRSZWYuY3VycmVudCAhPT0gb3V0ZXJIZWlnaHRTdHlsZSkge1xuICAgICAgaGVpZ2h0UmVmLmN1cnJlbnQgPSBvdXRlckhlaWdodFN0eWxlO1xuICAgICAgaW5wdXQuc3R5bGUuaGVpZ2h0ID0gYCR7b3V0ZXJIZWlnaHRTdHlsZX1weGA7XG4gICAgfVxuICAgIGlucHV0LnN0eWxlLm92ZXJmbG93ID0gdGV4dGFyZWFTdHlsZXMub3ZlcmZsb3dpbmcgPyAnaGlkZGVuJyA6ICcnO1xuICB9LCBbY2FsY3VsYXRlVGV4dGFyZWFTdHlsZXNdKTtcbiAgdXNlRW5oYW5jZWRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIHN5bmNIZWlnaHQoKTtcbiAgICB9O1xuICAgIC8vIFdvcmthcm91bmQgYSBcIlJlc2l6ZU9ic2VydmVyIGxvb3AgY29tcGxldGVkIHdpdGggdW5kZWxpdmVyZWQgbm90aWZpY2F0aW9uc1wiIGVycm9yXG4gICAgLy8gaW4gdGVzdC5cbiAgICAvLyBOb3RlIHRoYXQgd2UgbWlnaHQgbmVlZCB0byB1c2UgdGhpcyBsb2dpYyBpbiBwcm9kdWN0aW9uIHBlciBodHRwczovL2dpdGh1Yi5jb20vV0lDRy9yZXNpemUtb2JzZXJ2ZXIvaXNzdWVzLzM4XG4gICAgLy8gQWxzbyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tdWkteC9pc3N1ZXMvODczM1xuICAgIGxldCByQUY7XG4gICAgY29uc3QgckFGSGFuZGxlUmVzaXplID0gKCkgPT4ge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUockFGKTtcbiAgICAgIHJBRiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGhhbmRsZVJlc2l6ZSgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBkZWJvdW5jZUhhbmRsZVJlc2l6ZSA9IGRlYm91bmNlKGhhbmRsZVJlc2l6ZSk7XG4gICAgY29uc3QgaW5wdXQgPSBpbnB1dFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGNvbnRhaW5lcldpbmRvdyA9IG93bmVyV2luZG93KGlucHV0KTtcbiAgICBjb250YWluZXJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZGVib3VuY2VIYW5kbGVSZXNpemUpO1xuICAgIGxldCByZXNpemVPYnNlcnZlcjtcbiAgICBpZiAodHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICd0ZXN0JyA/IHJBRkhhbmRsZVJlc2l6ZSA6IGhhbmRsZVJlc2l6ZSk7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGlucHV0KTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRlYm91bmNlSGFuZGxlUmVzaXplLmNsZWFyKCk7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyQUYpO1xuICAgICAgY29udGFpbmVyV2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGRlYm91bmNlSGFuZGxlUmVzaXplKTtcbiAgICAgIGlmIChyZXNpemVPYnNlcnZlcikge1xuICAgICAgICByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2NhbGN1bGF0ZVRleHRhcmVhU3R5bGVzLCBzeW5jSGVpZ2h0XSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBzeW5jSGVpZ2h0KCk7XG4gIH0pO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSBldmVudCA9PiB7XG4gICAgaWYgKCFpc0NvbnRyb2xsZWQpIHtcbiAgICAgIHN5bmNIZWlnaHQoKTtcbiAgICB9XG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShldmVudCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChcInRleHRhcmVhXCIsIF9leHRlbmRzKHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgICByZWY6IGhhbmRsZVJlZlxuICAgICAgLy8gQXBwbHkgdGhlIHJvd3MgcHJvcCB0byBnZXQgYSBcImNvcnJlY3RcIiBmaXJzdCBTU1IgcGFpbnRcbiAgICAgICxcbiAgICAgIHJvd3M6IG1pblJvd3MsXG4gICAgICBzdHlsZTogc3R5bGVcbiAgICB9LCBvdGhlcikpLCAvKiNfX1BVUkVfXyovX2pzeChcInRleHRhcmVhXCIsIHtcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICAgIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgICByZWY6IHNoYWRvd1JlZixcbiAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7fSwgc3R5bGVzLnNoYWRvdywgc3R5bGUsIHtcbiAgICAgICAgcGFkZGluZ1RvcDogMCxcbiAgICAgICAgcGFkZGluZ0JvdHRvbTogMFxuICAgICAgfSlcbiAgICB9KV1cbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRleHRhcmVhQXV0b3NpemUucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4g4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5LlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5LlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUZXh0YXJlYUF1dG9zaXplOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9vbGJhclV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVG9vbGJhcicsIHNsb3QpO1xufVxuY29uc3QgdG9vbGJhckNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUb29sYmFyJywgWydyb290JywgJ2d1dHRlcnMnLCAncmVndWxhcicsICdkZW5zZSddKTtcbmV4cG9ydCBkZWZhdWx0IHRvb2xiYXJDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVHdXR0ZXJzXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRUb29sYmFyVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi90b29sYmFyQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZUd1dHRlcnMsXG4gICAgdmFyaWFudFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVHdXR0ZXJzICYmICdndXR0ZXJzJywgdmFyaWFudF1cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUb29sYmFyVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBUb29sYmFyUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpVG9vbGJhcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiBzdHlsZXMuZ3V0dGVycywgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJ1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYge1xuICBwYWRkaW5nTGVmdDogdGhlbWUuc3BhY2luZygyKSxcbiAgcGFkZGluZ1JpZ2h0OiB0aGVtZS5zcGFjaW5nKDIpLFxuICBbdGhlbWUuYnJlYWtwb2ludHMudXAoJ3NtJyldOiB7XG4gICAgcGFkZGluZ0xlZnQ6IHRoZW1lLnNwYWNpbmcoMyksXG4gICAgcGFkZGluZ1JpZ2h0OiB0aGVtZS5zcGFjaW5nKDMpXG4gIH1cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2RlbnNlJyAmJiB7XG4gIG1pbkhlaWdodDogNDhcbn0pLCAoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gb3duZXJTdGF0ZS52YXJpYW50ID09PSAncmVndWxhcicgJiYgdGhlbWUubWl4aW5zLnRvb2xiYXIpO1xuY29uc3QgVG9vbGJhciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRvb2xiYXIoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVG9vbGJhcidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgZGlzYWJsZUd1dHRlcnMgPSBmYWxzZSxcbiAgICAgIHZhcmlhbnQgPSAncmVndWxhcidcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUb29sYmFyUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRvb2xiYXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIFRvb2xiYXIgY2hpbGRyZW4sIHVzdWFsbHkgYSBtaXh0dXJlIG9mIGBJY29uQnV0dG9uYCwgYEJ1dHRvbmAgYW5kIGBUeXBvZ3JhcGh5YC5cbiAgICogVGhlIFRvb2xiYXIgaXMgYSBmbGV4IGNvbnRhaW5lciwgYWxsb3dpbmcgZmxleCBpdGVtIHByb3BlcnRpZXMgdG8gYmUgdXNlZCB0byBsYXkgb3V0IHRoZSBjaGlsZHJlbi5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgZGlzYWJsZXMgZ3V0dGVyIHBhZGRpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlR3V0dGVyczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdyZWd1bGFyJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdyZWd1bGFyJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUb29sYmFyOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVHlwb2dyYXBoeScsIHNsb3QpO1xufVxuY29uc3QgdHlwb2dyYXBoeUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUeXBvZ3JhcGh5JywgWydyb290JywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInLCAnYm9keTEnLCAnYm9keTInLCAnaW5oZXJpdCcsICdidXR0b24nLCAnY2FwdGlvbicsICdvdmVybGluZScsICdhbGlnbkxlZnQnLCAnYWxpZ25SaWdodCcsICdhbGlnbkNlbnRlcicsICdhbGlnbkp1c3RpZnknLCAnbm9XcmFwJywgJ2d1dHRlckJvdHRvbScsICdwYXJhZ3JhcGgnXSk7XG5leHBvcnQgZGVmYXVsdCB0eXBvZ3JhcGh5Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhbGlnblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImd1dHRlckJvdHRvbVwiLCBcIm5vV3JhcFwiLCBcInBhcmFncmFwaFwiLCBcInZhcmlhbnRcIiwgXCJ2YXJpYW50TWFwcGluZ1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGV4dGVuZFN4UHJvcCB9IGZyb20gJ0BtdWkvc3lzdGVtL3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi90eXBvZ3JhcGh5Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGFsaWduLFxuICAgIGd1dHRlckJvdHRvbSxcbiAgICBub1dyYXAsXG4gICAgcGFyYWdyYXBoLFxuICAgIHZhcmlhbnQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIGBhbGlnbiR7Y2FwaXRhbGl6ZShhbGlnbil9YCwgZ3V0dGVyQm90dG9tICYmICdndXR0ZXJCb3R0b20nLCBub1dyYXAgJiYgJ25vV3JhcCcsIHBhcmFncmFwaCAmJiAncGFyYWdyYXBoJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgVHlwb2dyYXBoeVJvb3QgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlUeXBvZ3JhcGh5JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUudmFyaWFudCAmJiBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIHN0eWxlc1tgYWxpZ24ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5hbGlnbil9YF0sIG93bmVyU3RhdGUubm9XcmFwICYmIHN0eWxlcy5ub1dyYXAsIG93bmVyU3RhdGUuZ3V0dGVyQm90dG9tICYmIHN0eWxlcy5ndXR0ZXJCb3R0b20sIG93bmVyU3RhdGUucGFyYWdyYXBoICYmIHN0eWxlcy5wYXJhZ3JhcGhdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBtYXJnaW46IDBcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luaGVyaXQnICYmIHtcbiAgLy8gU29tZSBlbGVtZW50cywgbGlrZSA8YnV0dG9uPiBvbiBDaHJvbWUgaGF2ZSBkZWZhdWx0IGZvbnQgdGhhdCBkb2Vzbid0IGluaGVyaXQsIHJlc2V0IHRoaXMuXG4gIGZvbnQ6ICdpbmhlcml0J1xufSwgb3duZXJTdGF0ZS52YXJpYW50ICE9PSAnaW5oZXJpdCcgJiYgdGhlbWUudHlwb2dyYXBoeVtvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYge1xuICB0ZXh0QWxpZ246IG93bmVyU3RhdGUuYWxpZ25cbn0sIG93bmVyU3RhdGUubm9XcmFwICYmIHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnXG59LCBvd25lclN0YXRlLmd1dHRlckJvdHRvbSAmJiB7XG4gIG1hcmdpbkJvdHRvbTogJzAuMzVlbSdcbn0sIG93bmVyU3RhdGUucGFyYWdyYXBoICYmIHtcbiAgbWFyZ2luQm90dG9tOiAxNlxufSkpO1xuY29uc3QgZGVmYXVsdFZhcmlhbnRNYXBwaW5nID0ge1xuICBoMTogJ2gxJyxcbiAgaDI6ICdoMicsXG4gIGgzOiAnaDMnLFxuICBoNDogJ2g0JyxcbiAgaDU6ICdoNScsXG4gIGg2OiAnaDYnLFxuICBzdWJ0aXRsZTE6ICdoNicsXG4gIHN1YnRpdGxlMjogJ2g2JyxcbiAgYm9keTE6ICdwJyxcbiAgYm9keTI6ICdwJyxcbiAgaW5oZXJpdDogJ3AnXG59O1xuXG4vLyBUT0RPIHY2OiBkZXByZWNhdGUgdGhlc2UgY29sb3IgdmFsdWVzIGluIHY1LnggYW5kIHJlbW92ZSB0aGUgdHJhbnNmb3JtYXRpb24gaW4gdjZcbmNvbnN0IGNvbG9yVHJhbnNmb3JtYXRpb25zID0ge1xuICBwcmltYXJ5OiAncHJpbWFyeS5tYWluJyxcbiAgdGV4dFByaW1hcnk6ICd0ZXh0LnByaW1hcnknLFxuICBzZWNvbmRhcnk6ICdzZWNvbmRhcnkubWFpbicsXG4gIHRleHRTZWNvbmRhcnk6ICd0ZXh0LnNlY29uZGFyeScsXG4gIGVycm9yOiAnZXJyb3IubWFpbidcbn07XG5jb25zdCB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzID0gY29sb3IgPT4ge1xuICByZXR1cm4gY29sb3JUcmFuc2Zvcm1hdGlvbnNbY29sb3JdIHx8IGNvbG9yO1xufTtcbmNvbnN0IFR5cG9ncmFwaHkgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUeXBvZ3JhcGh5KGluUHJvcHMsIHJlZikge1xuICBjb25zdCB0aGVtZVByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVHlwb2dyYXBoeSdcbiAgfSk7XG4gIGNvbnN0IGNvbG9yID0gdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyh0aGVtZVByb3BzLmNvbG9yKTtcbiAgY29uc3QgcHJvcHMgPSBleHRlbmRTeFByb3AoX2V4dGVuZHMoe30sIHRoZW1lUHJvcHMsIHtcbiAgICBjb2xvclxuICB9KSk7XG4gIGNvbnN0IHtcbiAgICAgIGFsaWduID0gJ2luaGVyaXQnLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50LFxuICAgICAgZ3V0dGVyQm90dG9tID0gZmFsc2UsXG4gICAgICBub1dyYXAgPSBmYWxzZSxcbiAgICAgIHBhcmFncmFwaCA9IGZhbHNlLFxuICAgICAgdmFyaWFudCA9ICdib2R5MScsXG4gICAgICB2YXJpYW50TWFwcGluZyA9IGRlZmF1bHRWYXJpYW50TWFwcGluZ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYWxpZ24sXG4gICAgY29sb3IsXG4gICAgY2xhc3NOYW1lLFxuICAgIGNvbXBvbmVudCxcbiAgICBndXR0ZXJCb3R0b20sXG4gICAgbm9XcmFwLFxuICAgIHBhcmFncmFwaCxcbiAgICB2YXJpYW50LFxuICAgIHZhcmlhbnRNYXBwaW5nXG4gIH0pO1xuICBjb25zdCBDb21wb25lbnQgPSBjb21wb25lbnQgfHwgKHBhcmFncmFwaCA/ICdwJyA6IHZhcmlhbnRNYXBwaW5nW3ZhcmlhbnRdIHx8IGRlZmF1bHRWYXJpYW50TWFwcGluZ1t2YXJpYW50XSkgfHwgJ3NwYW4nO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUeXBvZ3JhcGh5Um9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBDb21wb25lbnQsXG4gICAgcmVmOiByZWYsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFR5cG9ncmFwaHkucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogU2V0IHRoZSB0ZXh0LWFsaWduIG9uIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbmhlcml0J1xuICAgKi9cbiAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdpbmhlcml0JywgJ2p1c3RpZnknLCAnbGVmdCcsICdyaWdodCddKSxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IHdpbGwgaGF2ZSBhIGJvdHRvbSBtYXJnaW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBndXR0ZXJCb3R0b206IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdGV4dCB3aWxsIG5vdCB3cmFwLCBidXQgaW5zdGVhZCB3aWxsIHRydW5jYXRlIHdpdGggYSB0ZXh0IG92ZXJmbG93IGVsbGlwc2lzLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGV4dCBvdmVyZmxvdyBjYW4gb25seSBoYXBwZW4gd2l0aCBibG9jayBvciBpbmxpbmUtYmxvY2sgbGV2ZWwgZWxlbWVudHNcbiAgICogKHRoZSBlbGVtZW50IG5lZWRzIHRvIGhhdmUgYSB3aWR0aCBpbiBvcmRlciB0byBvdmVyZmxvdykuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBub1dyYXA6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgZWxlbWVudCB3aWxsIGJlIGEgcGFyYWdyYXBoIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwYXJhZ3JhcGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogQXBwbGllcyB0aGUgdGhlbWUgdHlwb2dyYXBoeSBzdHlsZXMuXG4gICAqIEBkZWZhdWx0ICdib2R5MSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm9keTEnLCAnYm9keTInLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaW5oZXJpdCcsICdvdmVybGluZScsICdzdWJ0aXRsZTEnLCAnc3VidGl0bGUyJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IG1hcHMgdGhlIHZhcmlhbnQgcHJvcCB0byBhIHJhbmdlIG9mIGRpZmZlcmVudCBIVE1MIGVsZW1lbnQgdHlwZXMuXG4gICAqIEZvciBpbnN0YW5jZSwgc3VidGl0bGUxIHRvIGA8aDY+YC5cbiAgICogSWYgeW91IHdpc2ggdG8gY2hhbmdlIHRoYXQgbWFwcGluZywgeW91IGNhbiBwcm92aWRlIHlvdXIgb3duLlxuICAgKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSB0aGUgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIGgxOiAnaDEnLFxuICAgKiAgIGgyOiAnaDInLFxuICAgKiAgIGgzOiAnaDMnLFxuICAgKiAgIGg0OiAnaDQnLFxuICAgKiAgIGg1OiAnaDUnLFxuICAgKiAgIGg2OiAnaDYnLFxuICAgKiAgIHN1YnRpdGxlMTogJ2g2JyxcbiAgICogICBzdWJ0aXRsZTI6ICdoNicsXG4gICAqICAgYm9keTE6ICdwJyxcbiAgICogICBib2R5MjogJ3AnLFxuICAgKiAgIGluaGVyaXQ6ICdwJyxcbiAgICogfVxuICAgKi9cbiAgdmFyaWFudE1hcHBpbmc6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9iamVjdFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFR5cG9ncmFwaHk7IiwiJ3VzZSBjbGllbnQnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjb25zaXN0ZW50LXJldHVybiwganN4LWExMXkvbm8tbm9uaW50ZXJhY3RpdmUtdGFiaW5kZXggKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBleGFjdFByb3AsIGVsZW1lbnRBY2NlcHRpbmdSZWYsIHVuc3RhYmxlX3VzZUZvcmtSZWYgYXMgdXNlRm9ya1JlZiwgdW5zdGFibGVfb3duZXJEb2N1bWVudCBhcyBvd25lckRvY3VtZW50IH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2ZvY3VzLXRyYXAvdGFiYmFibGVcbmNvbnN0IGNhbmRpZGF0ZXNTZWxlY3RvciA9IFsnaW5wdXQnLCAnc2VsZWN0JywgJ3RleHRhcmVhJywgJ2FbaHJlZl0nLCAnYnV0dG9uJywgJ1t0YWJpbmRleF0nLCAnYXVkaW9bY29udHJvbHNdJywgJ3ZpZGVvW2NvbnRyb2xzXScsICdbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKSddLmpvaW4oJywnKTtcbmZ1bmN0aW9uIGdldFRhYkluZGV4KG5vZGUpIHtcbiAgY29uc3QgdGFiaW5kZXhBdHRyID0gcGFyc2VJbnQobm9kZS5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHwgJycsIDEwKTtcbiAgaWYgKCFOdW1iZXIuaXNOYU4odGFiaW5kZXhBdHRyKSkge1xuICAgIHJldHVybiB0YWJpbmRleEF0dHI7XG4gIH1cblxuICAvLyBCcm93c2VycyBkbyBub3QgcmV0dXJuIGB0YWJJbmRleGAgY29ycmVjdGx5IGZvciBjb250ZW50RWRpdGFibGUgbm9kZXM7XG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTY2MTEwOCZxPWNvbnRlbnRlZGl0YWJsZSUyMHRhYmluZGV4JmNhbj0yXG4gIC8vIHNvIGlmIHRoZXkgZG9uJ3QgaGF2ZSBhIHRhYmluZGV4IGF0dHJpYnV0ZSBzcGVjaWZpY2FsbHkgc2V0LCBhc3N1bWUgaXQncyAwLlxuICAvLyBpbiBDaHJvbWUsIDxkZXRhaWxzLz4sIDxhdWRpbyBjb250cm9scy8+IGFuZCA8dmlkZW8gY29udHJvbHMvPiBlbGVtZW50cyBnZXQgYSBkZWZhdWx0XG4gIC8vICBgdGFiSW5kZXhgIG9mIC0xIHdoZW4gdGhlICd0YWJpbmRleCcgYXR0cmlidXRlIGlzbid0IHNwZWNpZmllZCBpbiB0aGUgRE9NLFxuICAvLyAgeWV0IHRoZXkgYXJlIHN0aWxsIHBhcnQgb2YgdGhlIHJlZ3VsYXIgdGFiIG9yZGVyOyBpbiBGRiwgdGhleSBnZXQgYSBkZWZhdWx0XG4gIC8vICBgdGFiSW5kZXhgIG9mIDA7IHNpbmNlIENocm9tZSBzdGlsbCBwdXRzIHRob3NlIGVsZW1lbnRzIGluIHRoZSByZWd1bGFyIHRhYlxuICAvLyAgb3JkZXIsIGNvbnNpZGVyIHRoZWlyIHRhYiBpbmRleCB0byBiZSAwLlxuICBpZiAobm9kZS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJyB8fCAobm9kZS5ub2RlTmFtZSA9PT0gJ0FVRElPJyB8fCBub2RlLm5vZGVOYW1lID09PSAnVklERU8nIHx8IG5vZGUubm9kZU5hbWUgPT09ICdERVRBSUxTJykgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykgPT09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gbm9kZS50YWJJbmRleDtcbn1cbmZ1bmN0aW9uIGlzTm9uVGFiYmFibGVSYWRpbyhub2RlKSB7XG4gIGlmIChub2RlLnRhZ05hbWUgIT09ICdJTlBVVCcgfHwgbm9kZS50eXBlICE9PSAncmFkaW8nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghbm9kZS5uYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGdldFJhZGlvID0gc2VsZWN0b3IgPT4gbm9kZS5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYGlucHV0W3R5cGU9XCJyYWRpb1wiXSR7c2VsZWN0b3J9YCk7XG4gIGxldCByb3ZpbmcgPSBnZXRSYWRpbyhgW25hbWU9XCIke25vZGUubmFtZX1cIl06Y2hlY2tlZGApO1xuICBpZiAoIXJvdmluZykge1xuICAgIHJvdmluZyA9IGdldFJhZGlvKGBbbmFtZT1cIiR7bm9kZS5uYW1lfVwiXWApO1xuICB9XG4gIHJldHVybiByb3ZpbmcgIT09IG5vZGU7XG59XG5mdW5jdGlvbiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlKG5vZGUpIHtcbiAgaWYgKG5vZGUuZGlzYWJsZWQgfHwgbm9kZS50YWdOYW1lID09PSAnSU5QVVQnICYmIG5vZGUudHlwZSA9PT0gJ2hpZGRlbicgfHwgaXNOb25UYWJiYWJsZVJhZGlvKG5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZGVmYXVsdEdldFRhYmJhYmxlKHJvb3QpIHtcbiAgY29uc3QgcmVndWxhclRhYk5vZGVzID0gW107XG4gIGNvbnN0IG9yZGVyZWRUYWJOb2RlcyA9IFtdO1xuICBBcnJheS5mcm9tKHJvb3QucXVlcnlTZWxlY3RvckFsbChjYW5kaWRhdGVzU2VsZWN0b3IpKS5mb3JFYWNoKChub2RlLCBpKSA9PiB7XG4gICAgY29uc3Qgbm9kZVRhYkluZGV4ID0gZ2V0VGFiSW5kZXgobm9kZSk7XG4gICAgaWYgKG5vZGVUYWJJbmRleCA9PT0gLTEgfHwgIWlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUobm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5vZGVUYWJJbmRleCA9PT0gMCkge1xuICAgICAgcmVndWxhclRhYk5vZGVzLnB1c2gobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9yZGVyZWRUYWJOb2Rlcy5wdXNoKHtcbiAgICAgICAgZG9jdW1lbnRPcmRlcjogaSxcbiAgICAgICAgdGFiSW5kZXg6IG5vZGVUYWJJbmRleCxcbiAgICAgICAgbm9kZTogbm9kZVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG9yZGVyZWRUYWJOb2Rlcy5zb3J0KChhLCBiKSA9PiBhLnRhYkluZGV4ID09PSBiLnRhYkluZGV4ID8gYS5kb2N1bWVudE9yZGVyIC0gYi5kb2N1bWVudE9yZGVyIDogYS50YWJJbmRleCAtIGIudGFiSW5kZXgpLm1hcChhID0+IGEubm9kZSkuY29uY2F0KHJlZ3VsYXJUYWJOb2Rlcyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0SXNFbmFibGVkKCkge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiBGb2N1c1RyYXAocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGRpc2FibGVBdXRvRm9jdXMgPSBmYWxzZSxcbiAgICBkaXNhYmxlRW5mb3JjZUZvY3VzID0gZmFsc2UsXG4gICAgZGlzYWJsZVJlc3RvcmVGb2N1cyA9IGZhbHNlLFxuICAgIGdldFRhYmJhYmxlID0gZGVmYXVsdEdldFRhYmJhYmxlLFxuICAgIGlzRW5hYmxlZCA9IGRlZmF1bHRJc0VuYWJsZWQsXG4gICAgb3BlblxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGlnbm9yZU5leHRFbmZvcmNlRm9jdXMgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBzZW50aW5lbFN0YXJ0ID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBzZW50aW5lbEVuZCA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3Qgbm9kZVRvUmVzdG9yZSA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgcmVhY3RGb2N1c0V2ZW50VGFyZ2V0ID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICAvLyBUaGlzIHZhcmlhYmxlIGlzIHVzZWZ1bCB3aGVuIGRpc2FibGVBdXRvRm9jdXMgaXMgdHJ1ZS5cbiAgLy8gSXQgd2FpdHMgZm9yIHRoZSBhY3RpdmUgZWxlbWVudCB0byBtb3ZlIGludG8gdGhlIGNvbXBvbmVudCB0byBhY3RpdmF0ZS5cbiAgY29uc3QgYWN0aXZhdGVkID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qgcm9vdFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBUT0RPIHVwc3RyZWFtIGZpeFxuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKGNoaWxkcmVuLnJlZiwgcm9vdFJlZik7XG4gIGNvbnN0IGxhc3RLZXlkb3duID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFdlIG1pZ2h0IHJlbmRlciBhbiBlbXB0eSBjaGlsZC5cbiAgICBpZiAoIW9wZW4gfHwgIXJvb3RSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhY3RpdmF0ZWQuY3VycmVudCA9ICFkaXNhYmxlQXV0b0ZvY3VzO1xuICB9LCBbZGlzYWJsZUF1dG9Gb2N1cywgb3Blbl0pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFdlIG1pZ2h0IHJlbmRlciBhbiBlbXB0eSBjaGlsZC5cbiAgICBpZiAoIW9wZW4gfHwgIXJvb3RSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkb2MgPSBvd25lckRvY3VtZW50KHJvb3RSZWYuY3VycmVudCk7XG4gICAgaWYgKCFyb290UmVmLmN1cnJlbnQuY29udGFpbnMoZG9jLmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICBpZiAoIXJvb3RSZWYuY3VycmVudC5oYXNBdHRyaWJ1dGUoJ3RhYkluZGV4JykpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGUgbW9kYWwgY29udGVudCBub2RlIGRvZXMgbm90IGFjY2VwdCBmb2N1cy4nLCAnRm9yIHRoZSBiZW5lZml0IG9mIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMsICcgKyAndGhlIHRhYkluZGV4IG9mIHRoZSBub2RlIGlzIGJlaW5nIHNldCB0byBcIi0xXCIuJ10uam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJvb3RSZWYuY3VycmVudC5zZXRBdHRyaWJ1dGUoJ3RhYkluZGV4JywgJy0xJyk7XG4gICAgICB9XG4gICAgICBpZiAoYWN0aXZhdGVkLmN1cnJlbnQpIHtcbiAgICAgICAgcm9vdFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAvLyByZXN0b3JlTGFzdEZvY3VzKClcbiAgICAgIGlmICghZGlzYWJsZVJlc3RvcmVGb2N1cykge1xuICAgICAgICAvLyBJbiBJRTExIGl0IGlzIHBvc3NpYmxlIGZvciBkb2N1bWVudC5hY3RpdmVFbGVtZW50IHRvIGJlIG51bGwgcmVzdWx0aW5nXG4gICAgICAgIC8vIGluIG5vZGVUb1Jlc3RvcmUuY3VycmVudCBiZWluZyBudWxsLlxuICAgICAgICAvLyBOb3QgYWxsIGVsZW1lbnRzIGluIElFMTEgaGF2ZSBhIGZvY3VzIG1ldGhvZC5cbiAgICAgICAgLy8gT25jZSBJRTExIHN1cHBvcnQgaXMgZHJvcHBlZCB0aGUgZm9jdXMoKSBjYWxsIGNhbiBiZSB1bmNvbmRpdGlvbmFsLlxuICAgICAgICBpZiAobm9kZVRvUmVzdG9yZS5jdXJyZW50ICYmIG5vZGVUb1Jlc3RvcmUuY3VycmVudC5mb2N1cykge1xuICAgICAgICAgIGlnbm9yZU5leHRFbmZvcmNlRm9jdXMuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuICAgIC8vIE1pc3NpbmcgYGRpc2FibGVSZXN0b3JlRm9jdXNgIHdoaWNoIGlzIGZpbmUuXG4gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBjaGFuZ2luZyB0aGF0IHByb3Agb24gYW4gb3BlbiBGb2N1c1RyYXBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtvcGVuXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gV2UgbWlnaHQgcmVuZGVyIGFuIGVtcHR5IGNoaWxkLlxuICAgIGlmICghb3BlbiB8fCAhcm9vdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRvYyA9IG93bmVyRG9jdW1lbnQocm9vdFJlZi5jdXJyZW50KTtcbiAgICBjb25zdCBsb29wRm9jdXMgPSBuYXRpdmVFdmVudCA9PiB7XG4gICAgICBsYXN0S2V5ZG93bi5jdXJyZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICBpZiAoZGlzYWJsZUVuZm9yY2VGb2N1cyB8fCAhaXNFbmFibGVkKCkgfHwgbmF0aXZlRXZlbnQua2V5ICE9PSAnVGFiJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV4dCB0YWIgc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHBsYWNlLlxuICAgICAgLy8gZG9jLmFjdGl2ZUVsZW1lbnQgcmVmZXJzIHRvIHRoZSBvcmlnaW4uXG4gICAgICBpZiAoZG9jLmFjdGl2ZUVsZW1lbnQgPT09IHJvb3RSZWYuY3VycmVudCAmJiBuYXRpdmVFdmVudC5zaGlmdEtleSkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGlnbm9yZSB0aGUgbmV4dCBjb250YWluIGFzXG4gICAgICAgIC8vIGl0IHdpbGwgdHJ5IHRvIG1vdmUgdGhlIGZvY3VzIGJhY2sgdG8gdGhlIHJvb3RSZWYgZWxlbWVudC5cbiAgICAgICAgaWdub3JlTmV4dEVuZm9yY2VGb2N1cy5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgaWYgKHNlbnRpbmVsRW5kLmN1cnJlbnQpIHtcbiAgICAgICAgICBzZW50aW5lbEVuZC5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNvbnRhaW4gPSAoKSA9PiB7XG4gICAgICBjb25zdCByb290RWxlbWVudCA9IHJvb3RSZWYuY3VycmVudDtcblxuICAgICAgLy8gQ2xlYW51cCBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkIGxhemlseSBpbiBSZWFjdCAxNy5cbiAgICAgIC8vIENvbnRhaW4gY2FuIGJlIGNhbGxlZCBiZXR3ZWVuIHRoZSBjb21wb25lbnQgYmVpbmcgdW5tb3VudGVkIGFuZCBpdHMgY2xlYW51cCBmdW5jdGlvbiBiZWluZyBydW4uXG4gICAgICBpZiAocm9vdEVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFkb2MuaGFzRm9jdXMoKSB8fCAhaXNFbmFibGVkKCkgfHwgaWdub3JlTmV4dEVuZm9yY2VGb2N1cy5jdXJyZW50KSB7XG4gICAgICAgIGlnbm9yZU5leHRFbmZvcmNlRm9jdXMuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBmb2N1cyBpcyBhbHJlYWR5IGluc2lkZVxuICAgICAgaWYgKHJvb3RFbGVtZW50LmNvbnRhaW5zKGRvYy5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBkaXNhYmxlRW5mb3JjZUZvY3VzIGlzIHNldCBhbmQgdGhlIGZvY3VzIGlzIG91dHNpZGUgb2YgdGhlIGZvY3VzIHRyYXAgKGFuZCBzZW50aW5lbCBub2RlcylcbiAgICAgIGlmIChkaXNhYmxlRW5mb3JjZUZvY3VzICYmIGRvYy5hY3RpdmVFbGVtZW50ICE9PSBzZW50aW5lbFN0YXJ0LmN1cnJlbnQgJiYgZG9jLmFjdGl2ZUVsZW1lbnQgIT09IHNlbnRpbmVsRW5kLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgZm9jdXMgZXZlbnQgaXMgbm90IGNvbWluZyBmcm9tIGluc2lkZSB0aGUgY2hpbGRyZW4ncyByZWFjdCB0cmVlLCByZXNldCB0aGUgcmVmc1xuICAgICAgaWYgKGRvYy5hY3RpdmVFbGVtZW50ICE9PSByZWFjdEZvY3VzRXZlbnRUYXJnZXQuY3VycmVudCkge1xuICAgICAgICByZWFjdEZvY3VzRXZlbnRUYXJnZXQuY3VycmVudCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHJlYWN0Rm9jdXNFdmVudFRhcmdldC5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghYWN0aXZhdGVkLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IHRhYmJhYmxlID0gW107XG4gICAgICBpZiAoZG9jLmFjdGl2ZUVsZW1lbnQgPT09IHNlbnRpbmVsU3RhcnQuY3VycmVudCB8fCBkb2MuYWN0aXZlRWxlbWVudCA9PT0gc2VudGluZWxFbmQuY3VycmVudCkge1xuICAgICAgICB0YWJiYWJsZSA9IGdldFRhYmJhYmxlKHJvb3RSZWYuY3VycmVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIG9uZSBvZiB0aGUgc2VudGluZWwgbm9kZXMgd2FzIGZvY3VzZWQsIHNvIG1vdmUgdGhlIGZvY3VzXG4gICAgICAvLyB0byB0aGUgZmlyc3QvbGFzdCB0YWJiYWJsZSBlbGVtZW50IGluc2lkZSB0aGUgZm9jdXMgdHJhcFxuICAgICAgaWYgKHRhYmJhYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIF9sYXN0S2V5ZG93biRjdXJyZW50LCBfbGFzdEtleWRvd24kY3VycmVudDI7XG4gICAgICAgIGNvbnN0IGlzU2hpZnRUYWIgPSBCb29sZWFuKCgoX2xhc3RLZXlkb3duJGN1cnJlbnQgPSBsYXN0S2V5ZG93bi5jdXJyZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2xhc3RLZXlkb3duJGN1cnJlbnQuc2hpZnRLZXkpICYmICgoX2xhc3RLZXlkb3duJGN1cnJlbnQyID0gbGFzdEtleWRvd24uY3VycmVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9sYXN0S2V5ZG93biRjdXJyZW50Mi5rZXkpID09PSAnVGFiJyk7XG4gICAgICAgIGNvbnN0IGZvY3VzTmV4dCA9IHRhYmJhYmxlWzBdO1xuICAgICAgICBjb25zdCBmb2N1c1ByZXZpb3VzID0gdGFiYmFibGVbdGFiYmFibGUubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0eXBlb2YgZm9jdXNOZXh0ICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgZm9jdXNQcmV2aW91cyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAoaXNTaGlmdFRhYikge1xuICAgICAgICAgICAgZm9jdXNQcmV2aW91cy5mb2N1cygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb2N1c05leHQuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm8gdGFiYmFibGUgZWxlbWVudHMgaW4gdGhlIHRyYXAgZm9jdXMgb3IgdGhlIGZvY3VzIHdhcyBvdXRzaWRlIG9mIHRoZSBmb2N1cyB0cmFwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb290RWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBjb250YWluKTtcbiAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGxvb3BGb2N1cywgdHJ1ZSk7XG5cbiAgICAvLyBXaXRoIEVkZ2UsIFNhZmFyaSBhbmQgRmlyZWZveCwgbm8gZm9jdXMgcmVsYXRlZCBldmVudHMgYXJlIGZpcmVkIHdoZW4gdGhlIGZvY3VzZWQgYXJlYSBzdG9wcyBiZWluZyBhIGZvY3VzZWQgYXJlYS5cbiAgICAvLyBmb3IgZXhhbXBsZSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD01NTk1NjEuXG4gICAgLy8gSW5zdGVhZCwgd2UgY2FuIGxvb2sgaWYgdGhlIGFjdGl2ZSBlbGVtZW50IHdhcyByZXN0b3JlZCBvbiB0aGUgQk9EWSBlbGVtZW50LlxuICAgIC8vXG4gICAgLy8gVGhlIHdoYXR3ZyBzcGVjIGRlZmluZXMgaG93IHRoZSBicm93c2VyIHNob3VsZCBiZWhhdmUgYnV0IGRvZXMgbm90IGV4cGxpY2l0bHkgbWVudGlvbiBhbnkgZXZlbnRzOlxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2ludGVyYWN0aW9uLmh0bWwjZm9jdXMtZml4dXAtcnVsZS5cbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmIChkb2MuYWN0aXZlRWxlbWVudCAmJiBkb2MuYWN0aXZlRWxlbWVudC50YWdOYW1lID09PSAnQk9EWScpIHtcbiAgICAgICAgY29udGFpbigpO1xuICAgICAgfVxuICAgIH0sIDUwKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIGNvbnRhaW4pO1xuICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBsb29wRm9jdXMsIHRydWUpO1xuICAgIH07XG4gIH0sIFtkaXNhYmxlQXV0b0ZvY3VzLCBkaXNhYmxlRW5mb3JjZUZvY3VzLCBkaXNhYmxlUmVzdG9yZUZvY3VzLCBpc0VuYWJsZWQsIG9wZW4sIGdldFRhYmJhYmxlXSk7XG4gIGNvbnN0IG9uRm9jdXMgPSBldmVudCA9PiB7XG4gICAgaWYgKG5vZGVUb1Jlc3RvcmUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICB9XG4gICAgYWN0aXZhdGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgIHJlYWN0Rm9jdXNFdmVudFRhcmdldC5jdXJyZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgIGNvbnN0IGNoaWxkcmVuUHJvcHNIYW5kbGVyID0gY2hpbGRyZW4ucHJvcHMub25Gb2N1cztcbiAgICBpZiAoY2hpbGRyZW5Qcm9wc0hhbmRsZXIpIHtcbiAgICAgIGNoaWxkcmVuUHJvcHNIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUZvY3VzU2VudGluZWwgPSBldmVudCA9PiB7XG4gICAgaWYgKG5vZGVUb1Jlc3RvcmUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgbm9kZVRvUmVzdG9yZS5jdXJyZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICB9XG4gICAgYWN0aXZhdGVkLmN1cnJlbnQgPSB0cnVlO1xuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChcImRpdlwiLCB7XG4gICAgICB0YWJJbmRleDogb3BlbiA/IDAgOiAtMSxcbiAgICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzU2VudGluZWwsXG4gICAgICByZWY6IHNlbnRpbmVsU3RhcnQsXG4gICAgICBcImRhdGEtdGVzdGlkXCI6IFwic2VudGluZWxTdGFydFwiXG4gICAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgIHJlZjogaGFuZGxlUmVmLFxuICAgICAgb25Gb2N1c1xuICAgIH0pLCAvKiNfX1BVUkVfXyovX2pzeChcImRpdlwiLCB7XG4gICAgICB0YWJJbmRleDogb3BlbiA/IDAgOiAtMSxcbiAgICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzU2VudGluZWwsXG4gICAgICByZWY6IHNlbnRpbmVsRW5kLFxuICAgICAgXCJkYXRhLXRlc3RpZFwiOiBcInNlbnRpbmVsRW5kXCJcbiAgICB9KV1cbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb2N1c1RyYXAucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4g4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQSBzaW5nbGUgY2hpbGQgY29udGVudCBlbGVtZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IGVsZW1lbnRBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBmb2N1cyB0cmFwIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgc2hpZnQgZm9jdXMgdG8gaXRzZWxmIHdoZW4gaXQgb3BlbnMsIGFuZFxuICAgKiByZXBsYWNlIGl0IHRvIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudCB3aGVuIGl0IGNsb3Nlcy5cbiAgICogVGhpcyBhbHNvIHdvcmtzIGNvcnJlY3RseSB3aXRoIGFueSBmb2N1cyB0cmFwIGNoaWxkcmVuIHRoYXQgaGF2ZSB0aGUgYGRpc2FibGVBdXRvRm9jdXNgIHByb3AuXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSBmb2N1cyB0cmFwIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBmb2N1cyB0cmFwIHdpbGwgbm90IHByZXZlbnQgZm9jdXMgZnJvbSBsZWF2aW5nIHRoZSBmb2N1cyB0cmFwIHdoaWxlIG9wZW4uXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSBmb2N1cyB0cmFwIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVuZm9yY2VGb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBmb2N1cyB0cmFwIHdpbGwgbm90IHJlc3RvcmUgZm9jdXMgdG8gcHJldmlvdXNseSBmb2N1c2VkIGVsZW1lbnQgb25jZVxuICAgKiBmb2N1cyB0cmFwIGlzIGhpZGRlbiBvciB1bm1vdW50ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUmVzdG9yZUZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2Ygb3JkZXJlZCB0YWJiYWJsZSBub2RlcyAoaS5lLiBpbiB0YWIgb3JkZXIpIHdpdGhpbiB0aGUgcm9vdC5cbiAgICogRm9yIGluc3RhbmNlLCB5b3UgY2FuIHByb3ZpZGUgdGhlIFwidGFiYmFibGVcIiBucG0gZGVwZW5kZW5jeS5cbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcm9vdFxuICAgKi9cbiAgZ2V0VGFiYmFibGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhpcyBwcm9wIGV4dGVuZHMgdGhlIGBvcGVuYCBwcm9wLlxuICAgKiBJdCBhbGxvd3MgdG8gdG9nZ2xlIHRoZSBvcGVuIHN0YXRlIHdpdGhvdXQgaGF2aW5nIHRvIHdhaXQgZm9yIGEgcmVyZW5kZXIgd2hlbiBjaGFuZ2luZyB0aGUgYG9wZW5gIHByb3AuXG4gICAqIFRoaXMgcHJvcCBzaG91bGQgYmUgbWVtb2l6ZWQuXG4gICAqIEl0IGNhbiBiZSB1c2VkIHRvIHN1cHBvcnQgbXVsdGlwbGUgZm9jdXMgdHJhcCBtb3VudGVkIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAqIEBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRJc0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAqICAgcmV0dXJuIHRydWU7XG4gICAqIH1cbiAgICovXG4gIGlzRW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGZvY3VzIGlzIGxvY2tlZC5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWRcbn0gOiB2b2lkIDA7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgRm9jdXNUcmFwWydwcm9wVHlwZXMnICsgJyddID0gZXhhY3RQcm9wKEZvY3VzVHJhcC5wcm9wVHlwZXMpO1xufVxuZXhwb3J0IGRlZmF1bHQgRm9jdXNUcmFwOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInRoZW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFRoZW1lUHJvdmlkZXIgYXMgU3lzdGVtVGhlbWVQcm92aWRlciB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuL2lkZW50aWZpZXInO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIoX3JlZikge1xuICBsZXQge1xuICAgICAgdGhlbWU6IHRoZW1lSW5wdXRcbiAgICB9ID0gX3JlZixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHNjb3BlZFRoZW1lID0gdGhlbWVJbnB1dFtUSEVNRV9JRF07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChTeXN0ZW1UaGVtZVByb3ZpZGVyLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICB0aGVtZUlkOiBzY29wZWRUaGVtZSA/IFRIRU1FX0lEIDogdW5kZWZpbmVkLFxuICAgIHRoZW1lOiBzY29wZWRUaGVtZSB8fCB0aGVtZUlucHV0XG4gIH0pKTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEEgdGhlbWUgb2JqZWN0LiBZb3UgY2FuIHByb3ZpZGUgYSBmdW5jdGlvbiB0byBleHRlbmQgdGhlIG91dGVyIHRoZW1lLlxuICAgKi9cbiAgdGhlbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5mdW5jXSkuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDsiLCJjb25zdCBjb21tb24gPSB7XG4gIGJsYWNrOiAnIzAwMCcsXG4gIHdoaXRlOiAnI2ZmZidcbn07XG5leHBvcnQgZGVmYXVsdCBjb21tb247IiwiY29uc3QgZ3JleSA9IHtcbiAgNTA6ICcjZmFmYWZhJyxcbiAgMTAwOiAnI2Y1ZjVmNScsXG4gIDIwMDogJyNlZWVlZWUnLFxuICAzMDA6ICcjZTBlMGUwJyxcbiAgNDAwOiAnI2JkYmRiZCcsXG4gIDUwMDogJyM5ZTllOWUnLFxuICA2MDA6ICcjNzU3NTc1JyxcbiAgNzAwOiAnIzYxNjE2MScsXG4gIDgwMDogJyM0MjQyNDInLFxuICA5MDA6ICcjMjEyMTIxJyxcbiAgQTEwMDogJyNmNWY1ZjUnLFxuICBBMjAwOiAnI2VlZWVlZScsXG4gIEE0MDA6ICcjYmRiZGJkJyxcbiAgQTcwMDogJyM2MTYxNjEnXG59O1xuZXhwb3J0IGRlZmF1bHQgZ3JleTsiLCJjb25zdCBwdXJwbGUgPSB7XG4gIDUwOiAnI2YzZTVmNScsXG4gIDEwMDogJyNlMWJlZTcnLFxuICAyMDA6ICcjY2U5M2Q4JyxcbiAgMzAwOiAnI2JhNjhjOCcsXG4gIDQwMDogJyNhYjQ3YmMnLFxuICA1MDA6ICcjOWMyN2IwJyxcbiAgNjAwOiAnIzhlMjRhYScsXG4gIDcwMDogJyM3YjFmYTInLFxuICA4MDA6ICcjNmExYjlhJyxcbiAgOTAwOiAnIzRhMTQ4YycsXG4gIEExMDA6ICcjZWE4MGZjJyxcbiAgQTIwMDogJyNlMDQwZmInLFxuICBBNDAwOiAnI2Q1MDBmOScsXG4gIEE3MDA6ICcjYWEwMGZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IHB1cnBsZTsiLCJjb25zdCByZWQgPSB7XG4gIDUwOiAnI2ZmZWJlZScsXG4gIDEwMDogJyNmZmNkZDInLFxuICAyMDA6ICcjZWY5YTlhJyxcbiAgMzAwOiAnI2U1NzM3MycsXG4gIDQwMDogJyNlZjUzNTAnLFxuICA1MDA6ICcjZjQ0MzM2JyxcbiAgNjAwOiAnI2U1MzkzNScsXG4gIDcwMDogJyNkMzJmMmYnLFxuICA4MDA6ICcjYzYyODI4JyxcbiAgOTAwOiAnI2I3MWMxYycsXG4gIEExMDA6ICcjZmY4YTgwJyxcbiAgQTIwMDogJyNmZjUyNTInLFxuICBBNDAwOiAnI2ZmMTc0NCcsXG4gIEE3MDA6ICcjZDUwMDAwJ1xufTtcbmV4cG9ydCBkZWZhdWx0IHJlZDsiLCJjb25zdCBvcmFuZ2UgPSB7XG4gIDUwOiAnI2ZmZjNlMCcsXG4gIDEwMDogJyNmZmUwYjInLFxuICAyMDA6ICcjZmZjYzgwJyxcbiAgMzAwOiAnI2ZmYjc0ZCcsXG4gIDQwMDogJyNmZmE3MjYnLFxuICA1MDA6ICcjZmY5ODAwJyxcbiAgNjAwOiAnI2ZiOGMwMCcsXG4gIDcwMDogJyNmNTdjMDAnLFxuICA4MDA6ICcjZWY2YzAwJyxcbiAgOTAwOiAnI2U2NTEwMCcsXG4gIEExMDA6ICcjZmZkMTgwJyxcbiAgQTIwMDogJyNmZmFiNDAnLFxuICBBNDAwOiAnI2ZmOTEwMCcsXG4gIEE3MDA6ICcjZmY2ZDAwJ1xufTtcbmV4cG9ydCBkZWZhdWx0IG9yYW5nZTsiLCJjb25zdCBibHVlID0ge1xuICA1MDogJyNlM2YyZmQnLFxuICAxMDA6ICcjYmJkZWZiJyxcbiAgMjAwOiAnIzkwY2FmOScsXG4gIDMwMDogJyM2NGI1ZjYnLFxuICA0MDA6ICcjNDJhNWY1JyxcbiAgNTAwOiAnIzIxOTZmMycsXG4gIDYwMDogJyMxZTg4ZTUnLFxuICA3MDA6ICcjMTk3NmQyJyxcbiAgODAwOiAnIzE1NjVjMCcsXG4gIDkwMDogJyMwZDQ3YTEnLFxuICBBMTAwOiAnIzgyYjFmZicsXG4gIEEyMDA6ICcjNDQ4YWZmJyxcbiAgQTQwMDogJyMyOTc5ZmYnLFxuICBBNzAwOiAnIzI5NjJmZidcbn07XG5leHBvcnQgZGVmYXVsdCBibHVlOyIsImNvbnN0IGxpZ2h0Qmx1ZSA9IHtcbiAgNTA6ICcjZTFmNWZlJyxcbiAgMTAwOiAnI2IzZTVmYycsXG4gIDIwMDogJyM4MWQ0ZmEnLFxuICAzMDA6ICcjNGZjM2Y3JyxcbiAgNDAwOiAnIzI5YjZmNicsXG4gIDUwMDogJyMwM2E5ZjQnLFxuICA2MDA6ICcjMDM5YmU1JyxcbiAgNzAwOiAnIzAyODhkMScsXG4gIDgwMDogJyMwMjc3YmQnLFxuICA5MDA6ICcjMDE1NzliJyxcbiAgQTEwMDogJyM4MGQ4ZmYnLFxuICBBMjAwOiAnIzQwYzRmZicsXG4gIEE0MDA6ICcjMDBiMGZmJyxcbiAgQTcwMDogJyMwMDkxZWEnXG59O1xuZXhwb3J0IGRlZmF1bHQgbGlnaHRCbHVlOyIsImNvbnN0IGdyZWVuID0ge1xuICA1MDogJyNlOGY1ZTknLFxuICAxMDA6ICcjYzhlNmM5JyxcbiAgMjAwOiAnI2E1ZDZhNycsXG4gIDMwMDogJyM4MWM3ODQnLFxuICA0MDA6ICcjNjZiYjZhJyxcbiAgNTAwOiAnIzRjYWY1MCcsXG4gIDYwMDogJyM0M2EwNDcnLFxuICA3MDA6ICcjMzg4ZTNjJyxcbiAgODAwOiAnIzJlN2QzMicsXG4gIDkwMDogJyMxYjVlMjAnLFxuICBBMTAwOiAnI2I5ZjZjYScsXG4gIEEyMDA6ICcjNjlmMGFlJyxcbiAgQTQwMDogJyMwMGU2NzYnLFxuICBBNzAwOiAnIzAwYzg1Mydcbn07XG5leHBvcnQgZGVmYXVsdCBncmVlbjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgZnJvbSBcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJtb2RlXCIsIFwiY29udHJhc3RUaHJlc2hvbGRcIiwgXCJ0b25hbE9mZnNldFwiXTtcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IHsgZGFya2VuLCBnZXRDb250cmFzdFJhdGlvLCBsaWdodGVuIH0gZnJvbSAnQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvcic7XG5pbXBvcnQgY29tbW9uIGZyb20gJy4uL2NvbG9ycy9jb21tb24nO1xuaW1wb3J0IGdyZXkgZnJvbSAnLi4vY29sb3JzL2dyZXknO1xuaW1wb3J0IHB1cnBsZSBmcm9tICcuLi9jb2xvcnMvcHVycGxlJztcbmltcG9ydCByZWQgZnJvbSAnLi4vY29sb3JzL3JlZCc7XG5pbXBvcnQgb3JhbmdlIGZyb20gJy4uL2NvbG9ycy9vcmFuZ2UnO1xuaW1wb3J0IGJsdWUgZnJvbSAnLi4vY29sb3JzL2JsdWUnO1xuaW1wb3J0IGxpZ2h0Qmx1ZSBmcm9tICcuLi9jb2xvcnMvbGlnaHRCbHVlJztcbmltcG9ydCBncmVlbiBmcm9tICcuLi9jb2xvcnMvZ3JlZW4nO1xuZXhwb3J0IGNvbnN0IGxpZ2h0ID0ge1xuICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gc3R5bGUgdGhlIHRleHQuXG4gIHRleHQ6IHtcbiAgICAvLyBUaGUgbW9zdCBpbXBvcnRhbnQgdGV4dC5cbiAgICBwcmltYXJ5OiAncmdiYSgwLCAwLCAwLCAwLjg3KScsXG4gICAgLy8gU2Vjb25kYXJ5IHRleHQuXG4gICAgc2Vjb25kYXJ5OiAncmdiYSgwLCAwLCAwLCAwLjYpJyxcbiAgICAvLyBEaXNhYmxlZCB0ZXh0IGhhdmUgZXZlbiBsb3dlciB2aXN1YWwgcHJvbWluZW5jZS5cbiAgICBkaXNhYmxlZDogJ3JnYmEoMCwgMCwgMCwgMC4zOCknXG4gIH0sXG4gIC8vIFRoZSBjb2xvciB1c2VkIHRvIGRpdmlkZSBkaWZmZXJlbnQgZWxlbWVudHMuXG4gIGRpdmlkZXI6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgLy8gVGhlIGJhY2tncm91bmQgY29sb3JzIHVzZWQgdG8gc3R5bGUgdGhlIHN1cmZhY2VzLlxuICAvLyBDb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZXNlIHZhbHVlcyBpcyBpbXBvcnRhbnQuXG4gIGJhY2tncm91bmQ6IHtcbiAgICBwYXBlcjogY29tbW9uLndoaXRlLFxuICAgIGRlZmF1bHQ6IGNvbW1vbi53aGl0ZVxuICB9LFxuICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gc3R5bGUgdGhlIGFjdGlvbiBlbGVtZW50cy5cbiAgYWN0aW9uOiB7XG4gICAgLy8gVGhlIGNvbG9yIG9mIGFuIGFjdGl2ZSBhY3Rpb24gbGlrZSBhbiBpY29uIGJ1dHRvbi5cbiAgICBhY3RpdmU6ICdyZ2JhKDAsIDAsIDAsIDAuNTQpJyxcbiAgICAvLyBUaGUgY29sb3Igb2YgYW4gaG92ZXJlZCBhY3Rpb24uXG4gICAgaG92ZXI6ICdyZ2JhKDAsIDAsIDAsIDAuMDQpJyxcbiAgICBob3Zlck9wYWNpdHk6IDAuMDQsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGEgc2VsZWN0ZWQgYWN0aW9uLlxuICAgIHNlbGVjdGVkOiAncmdiYSgwLCAwLCAwLCAwLjA4KScsXG4gICAgc2VsZWN0ZWRPcGFjaXR5OiAwLjA4LFxuICAgIC8vIFRoZSBjb2xvciBvZiBhIGRpc2FibGVkIGFjdGlvbi5cbiAgICBkaXNhYmxlZDogJ3JnYmEoMCwgMCwgMCwgMC4yNiknLFxuICAgIC8vIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIGEgZGlzYWJsZWQgYWN0aW9uLlxuICAgIGRpc2FibGVkQmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC4xMiknLFxuICAgIGRpc2FibGVkT3BhY2l0eTogMC4zOCxcbiAgICBmb2N1czogJ3JnYmEoMCwgMCwgMCwgMC4xMiknLFxuICAgIGZvY3VzT3BhY2l0eTogMC4xMixcbiAgICBhY3RpdmF0ZWRPcGFjaXR5OiAwLjEyXG4gIH1cbn07XG5leHBvcnQgY29uc3QgZGFyayA9IHtcbiAgdGV4dDoge1xuICAgIHByaW1hcnk6IGNvbW1vbi53aGl0ZSxcbiAgICBzZWNvbmRhcnk6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxuICAgIGRpc2FibGVkOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpJyxcbiAgICBpY29uOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpJ1xuICB9LFxuICBkaXZpZGVyOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKScsXG4gIGJhY2tncm91bmQ6IHtcbiAgICBwYXBlcjogJyMxMjEyMTInLFxuICAgIGRlZmF1bHQ6ICcjMTIxMjEyJ1xuICB9LFxuICBhY3Rpb246IHtcbiAgICBhY3RpdmU6IGNvbW1vbi53aGl0ZSxcbiAgICBob3ZlcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCknLFxuICAgIGhvdmVyT3BhY2l0eTogMC4wOCxcbiAgICBzZWxlY3RlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNiknLFxuICAgIHNlbGVjdGVkT3BhY2l0eTogMC4xNixcbiAgICBkaXNhYmxlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKScsXG4gICAgZGlzYWJsZWRCYWNrZ3JvdW5kOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKScsXG4gICAgZGlzYWJsZWRPcGFjaXR5OiAwLjM4LFxuICAgIGZvY3VzOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKScsXG4gICAgZm9jdXNPcGFjaXR5OiAwLjEyLFxuICAgIGFjdGl2YXRlZE9wYWNpdHk6IDAuMjRcbiAgfVxufTtcbmZ1bmN0aW9uIGFkZExpZ2h0T3JEYXJrKGludGVudCwgZGlyZWN0aW9uLCBzaGFkZSwgdG9uYWxPZmZzZXQpIHtcbiAgY29uc3QgdG9uYWxPZmZzZXRMaWdodCA9IHRvbmFsT2Zmc2V0LmxpZ2h0IHx8IHRvbmFsT2Zmc2V0O1xuICBjb25zdCB0b25hbE9mZnNldERhcmsgPSB0b25hbE9mZnNldC5kYXJrIHx8IHRvbmFsT2Zmc2V0ICogMS41O1xuICBpZiAoIWludGVudFtkaXJlY3Rpb25dKSB7XG4gICAgaWYgKGludGVudC5oYXNPd25Qcm9wZXJ0eShzaGFkZSkpIHtcbiAgICAgIGludGVudFtkaXJlY3Rpb25dID0gaW50ZW50W3NoYWRlXTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2xpZ2h0Jykge1xuICAgICAgaW50ZW50LmxpZ2h0ID0gbGlnaHRlbihpbnRlbnQubWFpbiwgdG9uYWxPZmZzZXRMaWdodCk7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdkYXJrJykge1xuICAgICAgaW50ZW50LmRhcmsgPSBkYXJrZW4oaW50ZW50Lm1haW4sIHRvbmFsT2Zmc2V0RGFyayk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0UHJpbWFyeShtb2RlID0gJ2xpZ2h0Jykge1xuICBpZiAobW9kZSA9PT0gJ2RhcmsnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1haW46IGJsdWVbMjAwXSxcbiAgICAgIGxpZ2h0OiBibHVlWzUwXSxcbiAgICAgIGRhcms6IGJsdWVbNDAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBibHVlWzcwMF0sXG4gICAgbGlnaHQ6IGJsdWVbNDAwXSxcbiAgICBkYXJrOiBibHVlWzgwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRTZWNvbmRhcnkobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBwdXJwbGVbMjAwXSxcbiAgICAgIGxpZ2h0OiBwdXJwbGVbNTBdLFxuICAgICAgZGFyazogcHVycGxlWzQwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogcHVycGxlWzUwMF0sXG4gICAgbGlnaHQ6IHB1cnBsZVszMDBdLFxuICAgIGRhcms6IHB1cnBsZVs3MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0RXJyb3IobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiByZWRbNTAwXSxcbiAgICAgIGxpZ2h0OiByZWRbMzAwXSxcbiAgICAgIGRhcms6IHJlZFs3MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IHJlZFs3MDBdLFxuICAgIGxpZ2h0OiByZWRbNDAwXSxcbiAgICBkYXJrOiByZWRbODAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEluZm8obW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBsaWdodEJsdWVbNDAwXSxcbiAgICAgIGxpZ2h0OiBsaWdodEJsdWVbMzAwXSxcbiAgICAgIGRhcms6IGxpZ2h0Qmx1ZVs3MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IGxpZ2h0Qmx1ZVs3MDBdLFxuICAgIGxpZ2h0OiBsaWdodEJsdWVbNTAwXSxcbiAgICBkYXJrOiBsaWdodEJsdWVbOTAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFN1Y2Nlc3MobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBncmVlbls0MDBdLFxuICAgICAgbGlnaHQ6IGdyZWVuWzMwMF0sXG4gICAgICBkYXJrOiBncmVlbls3MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IGdyZWVuWzgwMF0sXG4gICAgbGlnaHQ6IGdyZWVuWzUwMF0sXG4gICAgZGFyazogZ3JlZW5bOTAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFdhcm5pbmcobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBvcmFuZ2VbNDAwXSxcbiAgICAgIGxpZ2h0OiBvcmFuZ2VbMzAwXSxcbiAgICAgIGRhcms6IG9yYW5nZVs3MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46ICcjZWQ2YzAyJyxcbiAgICAvLyBjbG9zZXN0IHRvIG9yYW5nZVs4MDBdIHRoYXQgcGFzcyAzOjEuXG4gICAgbGlnaHQ6IG9yYW5nZVs1MDBdLFxuICAgIGRhcms6IG9yYW5nZVs5MDBdXG4gIH07XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVQYWxldHRlKHBhbGV0dGUpIHtcbiAgY29uc3Qge1xuICAgICAgbW9kZSA9ICdsaWdodCcsXG4gICAgICBjb250cmFzdFRocmVzaG9sZCA9IDMsXG4gICAgICB0b25hbE9mZnNldCA9IDAuMlxuICAgIH0gPSBwYWxldHRlLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocGFsZXR0ZSwgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgcHJpbWFyeSA9IHBhbGV0dGUucHJpbWFyeSB8fCBnZXREZWZhdWx0UHJpbWFyeShtb2RlKTtcbiAgY29uc3Qgc2Vjb25kYXJ5ID0gcGFsZXR0ZS5zZWNvbmRhcnkgfHwgZ2V0RGVmYXVsdFNlY29uZGFyeShtb2RlKTtcbiAgY29uc3QgZXJyb3IgPSBwYWxldHRlLmVycm9yIHx8IGdldERlZmF1bHRFcnJvcihtb2RlKTtcbiAgY29uc3QgaW5mbyA9IHBhbGV0dGUuaW5mbyB8fCBnZXREZWZhdWx0SW5mbyhtb2RlKTtcbiAgY29uc3Qgc3VjY2VzcyA9IHBhbGV0dGUuc3VjY2VzcyB8fCBnZXREZWZhdWx0U3VjY2Vzcyhtb2RlKTtcbiAgY29uc3Qgd2FybmluZyA9IHBhbGV0dGUud2FybmluZyB8fCBnZXREZWZhdWx0V2FybmluZyhtb2RlKTtcblxuICAvLyBVc2UgdGhlIHNhbWUgbG9naWMgYXNcbiAgLy8gQm9vdHN0cmFwOiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi8xZDZlMzcxMGRkNDQ3ZGUxYTIwMGYyOWU4ZmE1MjFmOGEwOTA4ZjcwL3Njc3MvX2Z1bmN0aW9ucy5zY3NzI0w1OVxuICAvLyBhbmQgbWF0ZXJpYWwtY29tcG9uZW50cy13ZWIgaHR0cHM6Ly9naXRodWIuY29tL21hdGVyaWFsLWNvbXBvbmVudHMvbWF0ZXJpYWwtY29tcG9uZW50cy13ZWIvYmxvYi9hYzQ2Yjg4NjNjNGRhYjlmYzIyYzRjNjYyZGM2YmQxYjY1ZGQ2NTJmL3BhY2thZ2VzL21kYy10aGVtZS9fZnVuY3Rpb25zLnNjc3MjTDU0XG4gIGZ1bmN0aW9uIGdldENvbnRyYXN0VGV4dChiYWNrZ3JvdW5kKSB7XG4gICAgY29uc3QgY29udHJhc3RUZXh0ID0gZ2V0Q29udHJhc3RSYXRpbyhiYWNrZ3JvdW5kLCBkYXJrLnRleHQucHJpbWFyeSkgPj0gY29udHJhc3RUaHJlc2hvbGQgPyBkYXJrLnRleHQucHJpbWFyeSA6IGxpZ2h0LnRleHQucHJpbWFyeTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc3QgY29udHJhc3QgPSBnZXRDb250cmFzdFJhdGlvKGJhY2tncm91bmQsIGNvbnRyYXN0VGV4dCk7XG4gICAgICBpZiAoY29udHJhc3QgPCAzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBjb250cmFzdCByYXRpbyBvZiAke2NvbnRyYXN0fToxIGZvciAke2NvbnRyYXN0VGV4dH0gb24gJHtiYWNrZ3JvdW5kfWAsICdmYWxscyBiZWxvdyB0aGUgV0NBRyByZWNvbW1lbmRlZCBhYnNvbHV0ZSBtaW5pbXVtIGNvbnRyYXN0IHJhdGlvIG9mIDM6MS4nLCAnaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jdmlzdWFsLWF1ZGlvLWNvbnRyYXN0LWNvbnRyYXN0J10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29udHJhc3RUZXh0O1xuICB9XG4gIGNvbnN0IGF1Z21lbnRDb2xvciA9ICh7XG4gICAgY29sb3IsXG4gICAgbmFtZSxcbiAgICBtYWluU2hhZGUgPSA1MDAsXG4gICAgbGlnaHRTaGFkZSA9IDMwMCxcbiAgICBkYXJrU2hhZGUgPSA3MDBcbiAgfSkgPT4ge1xuICAgIGNvbG9yID0gX2V4dGVuZHMoe30sIGNvbG9yKTtcbiAgICBpZiAoIWNvbG9yLm1haW4gJiYgY29sb3JbbWFpblNoYWRlXSkge1xuICAgICAgY29sb3IubWFpbiA9IGNvbG9yW21haW5TaGFkZV07XG4gICAgfVxuICAgIGlmICghY29sb3IuaGFzT3duUHJvcGVydHkoJ21haW4nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBjb2xvciR7bmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnfSBwcm92aWRlZCB0byBhdWdtZW50Q29sb3IoY29sb3IpIGlzIGludmFsaWQuXG5UaGUgY29sb3Igb2JqZWN0IG5lZWRzIHRvIGhhdmUgYSBcXGBtYWluXFxgIHByb3BlcnR5IG9yIGEgXFxgJHttYWluU2hhZGV9XFxgIHByb3BlcnR5LmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDExLCBuYW1lID8gYCAoJHtuYW1lfSlgIDogJycsIG1haW5TaGFkZSkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbG9yLm1haW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVGhlIGNvbG9yJHtuYW1lID8gYCAoJHtuYW1lfSlgIDogJyd9IHByb3ZpZGVkIHRvIGF1Z21lbnRDb2xvcihjb2xvcikgaXMgaW52YWxpZC5cblxcYGNvbG9yLm1haW5cXGAgc2hvdWxkIGJlIGEgc3RyaW5nLCBidXQgXFxgJHtKU09OLnN0cmluZ2lmeShjb2xvci5tYWluKX1cXGAgd2FzIHByb3ZpZGVkIGluc3RlYWQuXG5cbkRpZCB5b3UgaW50ZW5kIHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBhcHByb2FjaGVzP1xuXG5pbXBvcnQgeyBncmVlbiB9IGZyb20gXCJAbXVpL21hdGVyaWFsL2NvbG9yc1wiO1xuXG5jb25zdCB0aGVtZTEgPSBjcmVhdGVUaGVtZSh7IHBhbGV0dGU6IHtcbiAgcHJpbWFyeTogZ3JlZW4sXG59IH0pO1xuXG5jb25zdCB0aGVtZTIgPSBjcmVhdGVUaGVtZSh7IHBhbGV0dGU6IHtcbiAgcHJpbWFyeTogeyBtYWluOiBncmVlbls1MDBdIH0sXG59IH0pO2AgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDEyLCBuYW1lID8gYCAoJHtuYW1lfSlgIDogJycsIEpTT04uc3RyaW5naWZ5KGNvbG9yLm1haW4pKSk7XG4gICAgfVxuICAgIGFkZExpZ2h0T3JEYXJrKGNvbG9yLCAnbGlnaHQnLCBsaWdodFNoYWRlLCB0b25hbE9mZnNldCk7XG4gICAgYWRkTGlnaHRPckRhcmsoY29sb3IsICdkYXJrJywgZGFya1NoYWRlLCB0b25hbE9mZnNldCk7XG4gICAgaWYgKCFjb2xvci5jb250cmFzdFRleHQpIHtcbiAgICAgIGNvbG9yLmNvbnRyYXN0VGV4dCA9IGdldENvbnRyYXN0VGV4dChjb2xvci5tYWluKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9O1xuICBjb25zdCBtb2RlcyA9IHtcbiAgICBkYXJrLFxuICAgIGxpZ2h0XG4gIH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKCFtb2Rlc1ttb2RlXSkge1xuICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBUaGUgcGFsZXR0ZSBtb2RlIFxcYCR7bW9kZX1cXGAgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFsZXR0ZU91dHB1dCA9IGRlZXBtZXJnZShfZXh0ZW5kcyh7XG4gICAgLy8gQSBjb2xsZWN0aW9uIG9mIGNvbW1vbiBjb2xvcnMuXG4gICAgY29tbW9uOiBfZXh0ZW5kcyh7fSwgY29tbW9uKSxcbiAgICAvLyBwcmV2ZW50IG11dGFibGUgb2JqZWN0LlxuICAgIC8vIFRoZSBwYWxldHRlIG1vZGUsIGNhbiBiZSBsaWdodCBvciBkYXJrLlxuICAgIG1vZGUsXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBwcmltYXJ5IGludGVyZmFjZSBlbGVtZW50cyBmb3IgYSB1c2VyLlxuICAgIHByaW1hcnk6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogcHJpbWFyeSxcbiAgICAgIG5hbWU6ICdwcmltYXJ5J1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgc2Vjb25kYXJ5IGludGVyZmFjZSBlbGVtZW50cyBmb3IgYSB1c2VyLlxuICAgIHNlY29uZGFyeTogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBzZWNvbmRhcnksXG4gICAgICBuYW1lOiAnc2Vjb25kYXJ5JyxcbiAgICAgIG1haW5TaGFkZTogJ0E0MDAnLFxuICAgICAgbGlnaHRTaGFkZTogJ0EyMDAnLFxuICAgICAgZGFya1NoYWRlOiAnQTcwMCdcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IGludGVyZmFjZSBlbGVtZW50cyB0aGF0IHRoZSB1c2VyIHNob3VsZCBiZSBtYWRlIGF3YXJlIG9mLlxuICAgIGVycm9yOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IGVycm9yLFxuICAgICAgbmFtZTogJ2Vycm9yJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGFjdGlvbnMgb3IgaW1wb3J0YW50IG1lc3NhZ2VzLlxuICAgIHdhcm5pbmc6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogd2FybmluZyxcbiAgICAgIG5hbWU6ICd3YXJuaW5nJ1xuICAgIH0pLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byBwcmVzZW50IGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyIHRoYXQgaXMgbmV1dHJhbCBhbmQgbm90IG5lY2Vzc2FyaWx5IGltcG9ydGFudC5cbiAgICBpbmZvOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IGluZm8sXG4gICAgICBuYW1lOiAnaW5mbydcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiBhbiBhY3Rpb24gdGhhdCB1c2VyIHRyaWdnZXJlZC5cbiAgICBzdWNjZXNzOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHN1Y2Nlc3MsXG4gICAgICBuYW1lOiAnc3VjY2VzcydcbiAgICB9KSxcbiAgICAvLyBUaGUgZ3JleSBjb2xvcnMuXG4gICAgZ3JleSxcbiAgICAvLyBVc2VkIGJ5IGBnZXRDb250cmFzdFRleHQoKWAgdG8gbWF4aW1pemUgdGhlIGNvbnRyYXN0IGJldHdlZW5cbiAgICAvLyB0aGUgYmFja2dyb3VuZCBhbmQgdGhlIHRleHQuXG4gICAgY29udHJhc3RUaHJlc2hvbGQsXG4gICAgLy8gVGFrZXMgYSBiYWNrZ3JvdW5kIGNvbG9yIGFuZCByZXR1cm5zIHRoZSB0ZXh0IGNvbG9yIHRoYXQgbWF4aW1pemVzIHRoZSBjb250cmFzdC5cbiAgICBnZXRDb250cmFzdFRleHQsXG4gICAgLy8gR2VuZXJhdGUgYSByaWNoIGNvbG9yIG9iamVjdC5cbiAgICBhdWdtZW50Q29sb3IsXG4gICAgLy8gVXNlZCBieSB0aGUgZnVuY3Rpb25zIGJlbG93IHRvIHNoaWZ0IGEgY29sb3IncyBsdW1pbmFuY2UgYnkgYXBwcm94aW1hdGVseVxuICAgIC8vIHR3byBpbmRleGVzIHdpdGhpbiBpdHMgdG9uYWwgcGFsZXR0ZS5cbiAgICAvLyBFLmcuLCBzaGlmdCBmcm9tIFJlZCA1MDAgdG8gUmVkIDMwMCBvciBSZWQgNzAwLlxuICAgIHRvbmFsT2Zmc2V0XG4gIH0sIG1vZGVzW21vZGVdKSwgb3RoZXIpO1xuICByZXR1cm4gcGFsZXR0ZU91dHB1dDtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZm9udEZhbWlseVwiLCBcImZvbnRTaXplXCIsIFwiZm9udFdlaWdodExpZ2h0XCIsIFwiZm9udFdlaWdodFJlZ3VsYXJcIiwgXCJmb250V2VpZ2h0TWVkaXVtXCIsIFwiZm9udFdlaWdodEJvbGRcIiwgXCJodG1sRm9udFNpemVcIiwgXCJhbGxWYXJpYW50c1wiLCBcInB4VG9SZW1cIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmZ1bmN0aW9uIHJvdW5kKHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogMWU1KSAvIDFlNTtcbn1cbmNvbnN0IGNhc2VBbGxDYXBzID0ge1xuICB0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJ1xufTtcbmNvbnN0IGRlZmF1bHRGb250RmFtaWx5ID0gJ1wiUm9ib3RvXCIsIFwiSGVsdmV0aWNhXCIsIFwiQXJpYWxcIiwgc2Fucy1zZXJpZic7XG5cbi8qKlxuICogQHNlZSBAbGlua3todHRwczovL20yLm1hdGVyaWFsLmlvL2Rlc2lnbi90eXBvZ3JhcGh5L3RoZS10eXBlLXN5c3RlbS5odG1sfVxuICogQHNlZSBAbGlua3todHRwczovL20yLm1hdGVyaWFsLmlvL2Rlc2lnbi90eXBvZ3JhcGh5L3VuZGVyc3RhbmRpbmctdHlwb2dyYXBoeS5odG1sfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUeXBvZ3JhcGh5KHBhbGV0dGUsIHR5cG9ncmFwaHkpIHtcbiAgY29uc3QgX3JlZiA9IHR5cGVvZiB0eXBvZ3JhcGh5ID09PSAnZnVuY3Rpb24nID8gdHlwb2dyYXBoeShwYWxldHRlKSA6IHR5cG9ncmFwaHksXG4gICAge1xuICAgICAgZm9udEZhbWlseSA9IGRlZmF1bHRGb250RmFtaWx5LFxuICAgICAgLy8gVGhlIGRlZmF1bHQgZm9udCBzaXplIG9mIHRoZSBNYXRlcmlhbCBTcGVjaWZpY2F0aW9uLlxuICAgICAgZm9udFNpemUgPSAxNCxcbiAgICAgIC8vIHB4XG4gICAgICBmb250V2VpZ2h0TGlnaHQgPSAzMDAsXG4gICAgICBmb250V2VpZ2h0UmVndWxhciA9IDQwMCxcbiAgICAgIGZvbnRXZWlnaHRNZWRpdW0gPSA1MDAsXG4gICAgICBmb250V2VpZ2h0Qm9sZCA9IDcwMCxcbiAgICAgIC8vIFRlbGwgTVVJIHdoYXQncyB0aGUgZm9udC1zaXplIG9uIHRoZSBodG1sIGVsZW1lbnQuXG4gICAgICAvLyAxNnB4IGlzIHRoZSBkZWZhdWx0IGZvbnQtc2l6ZSB1c2VkIGJ5IGJyb3dzZXJzLlxuICAgICAgaHRtbEZvbnRTaXplID0gMTYsXG4gICAgICAvLyBBcHBseSB0aGUgQ1NTIHByb3BlcnRpZXMgdG8gYWxsIHRoZSB2YXJpYW50cy5cbiAgICAgIGFsbFZhcmlhbnRzLFxuICAgICAgcHhUb1JlbTogcHhUb1JlbTJcbiAgICB9ID0gX3JlZixcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBmb250U2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGZvbnRTaXplYCBpcyByZXF1aXJlZCB0byBiZSBhIG51bWJlci4nKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBodG1sRm9udFNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNVUk6IGBodG1sRm9udFNpemVgIGlzIHJlcXVpcmVkIHRvIGJlIGEgbnVtYmVyLicpO1xuICAgIH1cbiAgfVxuICBjb25zdCBjb2VmID0gZm9udFNpemUgLyAxNDtcbiAgY29uc3QgcHhUb1JlbSA9IHB4VG9SZW0yIHx8IChzaXplID0+IGAke3NpemUgLyBodG1sRm9udFNpemUgKiBjb2VmfXJlbWApO1xuICBjb25zdCBidWlsZFZhcmlhbnQgPSAoZm9udFdlaWdodCwgc2l6ZSwgbGluZUhlaWdodCwgbGV0dGVyU3BhY2luZywgY2FzaW5nKSA9PiBfZXh0ZW5kcyh7XG4gICAgZm9udEZhbWlseSxcbiAgICBmb250V2VpZ2h0LFxuICAgIGZvbnRTaXplOiBweFRvUmVtKHNpemUpLFxuICAgIC8vIFVuaXRsZXNzIGZvbGxvd2luZyBodHRwczovL21leWVyd2ViLmNvbS9lcmljL3Rob3VnaHRzLzIwMDYvMDIvMDgvdW5pdGxlc3MtbGluZS1oZWlnaHRzL1xuICAgIGxpbmVIZWlnaHRcbiAgfSwgZm9udEZhbWlseSA9PT0gZGVmYXVsdEZvbnRGYW1pbHkgPyB7XG4gICAgbGV0dGVyU3BhY2luZzogYCR7cm91bmQobGV0dGVyU3BhY2luZyAvIHNpemUpfWVtYFxuICB9IDoge30sIGNhc2luZywgYWxsVmFyaWFudHMpO1xuICBjb25zdCB2YXJpYW50cyA9IHtcbiAgICBoMTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRMaWdodCwgOTYsIDEuMTY3LCAtMS41KSxcbiAgICBoMjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRMaWdodCwgNjAsIDEuMiwgLTAuNSksXG4gICAgaDM6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgNDgsIDEuMTY3LCAwKSxcbiAgICBoNDogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAzNCwgMS4yMzUsIDAuMjUpLFxuICAgIGg1OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDI0LCAxLjMzNCwgMCksXG4gICAgaDY6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TWVkaXVtLCAyMCwgMS42LCAwLjE1KSxcbiAgICBzdWJ0aXRsZTE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTYsIDEuNzUsIDAuMTUpLFxuICAgIHN1YnRpdGxlMjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDE0LCAxLjU3LCAwLjEpLFxuICAgIGJvZHkxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDE2LCAxLjUsIDAuMTUpLFxuICAgIGJvZHkyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDE0LCAxLjQzLCAwLjE1KSxcbiAgICBidXR0b246IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TWVkaXVtLCAxNCwgMS43NSwgMC40LCBjYXNlQWxsQ2FwcyksXG4gICAgY2FwdGlvbjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxMiwgMS42NiwgMC40KSxcbiAgICBvdmVybGluZTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxMiwgMi42NiwgMSwgY2FzZUFsbENhcHMpLFxuICAgIC8vIFRPRE8gdjY6IFJlbW92ZSBoYW5kbGluZyBvZiAnaW5oZXJpdCcgdmFyaWFudCBmcm9tIHRoZSB0aGVtZSBhcyBpdCBpcyBhbHJlYWR5IGhhbmRsZWQgaW4gTWF0ZXJpYWwgVUkncyBUeXBvZ3JhcGh5IGNvbXBvbmVudC4gQWxzbywgcmVtZW1iZXIgdG8gcmVtb3ZlIHRoZSBhc3NvY2lhdGVkIHR5cGVzLlxuICAgIGluaGVyaXQ6IHtcbiAgICAgIGZvbnRGYW1pbHk6ICdpbmhlcml0JyxcbiAgICAgIGZvbnRXZWlnaHQ6ICdpbmhlcml0JyxcbiAgICAgIGZvbnRTaXplOiAnaW5oZXJpdCcsXG4gICAgICBsaW5lSGVpZ2h0OiAnaW5oZXJpdCcsXG4gICAgICBsZXR0ZXJTcGFjaW5nOiAnaW5oZXJpdCdcbiAgICB9XG4gIH07XG4gIHJldHVybiBkZWVwbWVyZ2UoX2V4dGVuZHMoe1xuICAgIGh0bWxGb250U2l6ZSxcbiAgICBweFRvUmVtLFxuICAgIGZvbnRGYW1pbHksXG4gICAgZm9udFNpemUsXG4gICAgZm9udFdlaWdodExpZ2h0LFxuICAgIGZvbnRXZWlnaHRSZWd1bGFyLFxuICAgIGZvbnRXZWlnaHRNZWRpdW0sXG4gICAgZm9udFdlaWdodEJvbGRcbiAgfSwgdmFyaWFudHMpLCBvdGhlciwge1xuICAgIGNsb25lOiBmYWxzZSAvLyBObyBuZWVkIHRvIGNsb25lIGRlZXBcbiAgfSk7XG59IiwiY29uc3Qgc2hhZG93S2V5VW1icmFPcGFjaXR5ID0gMC4yO1xuY29uc3Qgc2hhZG93S2V5UGVudW1icmFPcGFjaXR5ID0gMC4xNDtcbmNvbnN0IHNoYWRvd0FtYmllbnRTaGFkb3dPcGFjaXR5ID0gMC4xMjtcbmZ1bmN0aW9uIGNyZWF0ZVNoYWRvdyguLi5weCkge1xuICByZXR1cm4gW2Ake3B4WzBdfXB4ICR7cHhbMV19cHggJHtweFsyXX1weCAke3B4WzNdfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlVbWJyYU9wYWNpdHl9KWAsIGAke3B4WzRdfXB4ICR7cHhbNV19cHggJHtweFs2XX1weCAke3B4WzddfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlQZW51bWJyYU9wYWNpdHl9KWAsIGAke3B4WzhdfXB4ICR7cHhbOV19cHggJHtweFsxMF19cHggJHtweFsxMV19cHggcmdiYSgwLDAsMCwke3NoYWRvd0FtYmllbnRTaGFkb3dPcGFjaXR5fSlgXS5qb2luKCcsJyk7XG59XG5cbi8vIFZhbHVlcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYmU4NzQ3Zjk0NTc0NjY5Y2I1ZTdhZGQxYTdjNTRmYTQxYTg5Y2VjNy9wYWNrYWdlcy9tZGMtZWxldmF0aW9uL192YXJpYWJsZXMuc2Nzc1xuY29uc3Qgc2hhZG93cyA9IFsnbm9uZScsIGNyZWF0ZVNoYWRvdygwLCAyLCAxLCAtMSwgMCwgMSwgMSwgMCwgMCwgMSwgMywgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCAxLCAtMiwgMCwgMiwgMiwgMCwgMCwgMSwgNSwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCAzLCAtMiwgMCwgMywgNCwgMCwgMCwgMSwgOCwgMCksIGNyZWF0ZVNoYWRvdygwLCAyLCA0LCAtMSwgMCwgNCwgNSwgMCwgMCwgMSwgMTAsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgNSwgLTEsIDAsIDUsIDgsIDAsIDAsIDEsIDE0LCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDUsIC0xLCAwLCA2LCAxMCwgMCwgMCwgMSwgMTgsIDApLCBjcmVhdGVTaGFkb3coMCwgNCwgNSwgLTIsIDAsIDcsIDEwLCAxLCAwLCAyLCAxNiwgMSksIGNyZWF0ZVNoYWRvdygwLCA1LCA1LCAtMywgMCwgOCwgMTAsIDEsIDAsIDMsIDE0LCAyKSwgY3JlYXRlU2hhZG93KDAsIDUsIDYsIC0zLCAwLCA5LCAxMiwgMSwgMCwgMywgMTYsIDIpLCBjcmVhdGVTaGFkb3coMCwgNiwgNiwgLTMsIDAsIDEwLCAxNCwgMSwgMCwgNCwgMTgsIDMpLCBjcmVhdGVTaGFkb3coMCwgNiwgNywgLTQsIDAsIDExLCAxNSwgMSwgMCwgNCwgMjAsIDMpLCBjcmVhdGVTaGFkb3coMCwgNywgOCwgLTQsIDAsIDEyLCAxNywgMiwgMCwgNSwgMjIsIDQpLCBjcmVhdGVTaGFkb3coMCwgNywgOCwgLTQsIDAsIDEzLCAxOSwgMiwgMCwgNSwgMjQsIDQpLCBjcmVhdGVTaGFkb3coMCwgNywgOSwgLTQsIDAsIDE0LCAyMSwgMiwgMCwgNSwgMjYsIDQpLCBjcmVhdGVTaGFkb3coMCwgOCwgOSwgLTUsIDAsIDE1LCAyMiwgMiwgMCwgNiwgMjgsIDUpLCBjcmVhdGVTaGFkb3coMCwgOCwgMTAsIC01LCAwLCAxNiwgMjQsIDIsIDAsIDYsIDMwLCA1KSwgY3JlYXRlU2hhZG93KDAsIDgsIDExLCAtNSwgMCwgMTcsIDI2LCAyLCAwLCA2LCAzMiwgNSksIGNyZWF0ZVNoYWRvdygwLCA5LCAxMSwgLTUsIDAsIDE4LCAyOCwgMiwgMCwgNywgMzQsIDYpLCBjcmVhdGVTaGFkb3coMCwgOSwgMTIsIC02LCAwLCAxOSwgMjksIDIsIDAsIDcsIDM2LCA2KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxMywgLTYsIDAsIDIwLCAzMSwgMywgMCwgOCwgMzgsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDEzLCAtNiwgMCwgMjEsIDMzLCAzLCAwLCA4LCA0MCwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTQsIC02LCAwLCAyMiwgMzUsIDMsIDAsIDgsIDQyLCA3KSwgY3JlYXRlU2hhZG93KDAsIDExLCAxNCwgLTcsIDAsIDIzLCAzNiwgMywgMCwgOSwgNDQsIDgpLCBjcmVhdGVTaGFkb3coMCwgMTEsIDE1LCAtNywgMCwgMjQsIDM4LCAzLCAwLCA5LCA0NiwgOCldO1xuZXhwb3J0IGRlZmF1bHQgc2hhZG93czsiLCIvLyBXZSBuZWVkIHRvIGNlbnRyYWxpemUgdGhlIHpJbmRleCBkZWZpbml0aW9ucyBhcyB0aGV5IHdvcmtcbi8vIGxpa2UgZ2xvYmFsIHZhbHVlcyBpbiB0aGUgYnJvd3Nlci5cbmNvbnN0IHpJbmRleCA9IHtcbiAgbW9iaWxlU3RlcHBlcjogMTAwMCxcbiAgZmFiOiAxMDUwLFxuICBzcGVlZERpYWw6IDEwNTAsXG4gIGFwcEJhcjogMTEwMCxcbiAgZHJhd2VyOiAxMjAwLFxuICBtb2RhbDogMTMwMCxcbiAgc25hY2tiYXI6IDE0MDAsXG4gIHRvb2x0aXA6IDE1MDBcbn07XG5leHBvcnQgZGVmYXVsdCB6SW5kZXg7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYnJlYWtwb2ludHNcIiwgXCJtaXhpbnNcIiwgXCJzcGFjaW5nXCIsIFwicGFsZXR0ZVwiLCBcInRyYW5zaXRpb25zXCIsIFwidHlwb2dyYXBoeVwiLCBcInNoYXBlXCJdO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgc3R5bGVGdW5jdGlvblN4LCB7IHVuc3RhYmxlX2RlZmF1bHRTeENvbmZpZyBhcyBkZWZhdWx0U3hDb25maWcgfSBmcm9tICdAbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IHN5c3RlbUNyZWF0ZVRoZW1lIGZyb20gJ0BtdWkvc3lzdGVtL2NyZWF0ZVRoZW1lJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCBjcmVhdGVNaXhpbnMgZnJvbSAnLi9jcmVhdGVNaXhpbnMnO1xuaW1wb3J0IGNyZWF0ZVBhbGV0dGUgZnJvbSAnLi9jcmVhdGVQYWxldHRlJztcbmltcG9ydCBjcmVhdGVUeXBvZ3JhcGh5IGZyb20gJy4vY3JlYXRlVHlwb2dyYXBoeSc7XG5pbXBvcnQgc2hhZG93cyBmcm9tICcuL3NoYWRvd3MnO1xuaW1wb3J0IGNyZWF0ZVRyYW5zaXRpb25zIGZyb20gJy4vY3JlYXRlVHJhbnNpdGlvbnMnO1xuaW1wb3J0IHpJbmRleCBmcm9tICcuL3pJbmRleCc7XG5mdW5jdGlvbiBjcmVhdGVUaGVtZShvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgY29uc3Qge1xuICAgICAgbWl4aW5zOiBtaXhpbnNJbnB1dCA9IHt9LFxuICAgICAgcGFsZXR0ZTogcGFsZXR0ZUlucHV0ID0ge30sXG4gICAgICB0cmFuc2l0aW9uczogdHJhbnNpdGlvbnNJbnB1dCA9IHt9LFxuICAgICAgdHlwb2dyYXBoeTogdHlwb2dyYXBoeUlucHV0ID0ge31cbiAgICB9ID0gb3B0aW9ucyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG4gIGlmIChvcHRpb25zLnZhcnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogXFxgdmFyc1xcYCBpcyBhIHByaXZhdGUgZmllbGQgdXNlZCBmb3IgQ1NTIHZhcmlhYmxlcyBzdXBwb3J0LlxuUGxlYXNlIHVzZSBhbm90aGVyIG5hbWUuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMTgpKTtcbiAgfVxuICBjb25zdCBwYWxldHRlID0gY3JlYXRlUGFsZXR0ZShwYWxldHRlSW5wdXQpO1xuICBjb25zdCBzeXN0ZW1UaGVtZSA9IHN5c3RlbUNyZWF0ZVRoZW1lKG9wdGlvbnMpO1xuICBsZXQgbXVpVGhlbWUgPSBkZWVwbWVyZ2Uoc3lzdGVtVGhlbWUsIHtcbiAgICBtaXhpbnM6IGNyZWF0ZU1peGlucyhzeXN0ZW1UaGVtZS5icmVha3BvaW50cywgbWl4aW5zSW5wdXQpLFxuICAgIHBhbGV0dGUsXG4gICAgLy8gRG9uJ3QgdXNlIFsuLi5zaGFkb3dzXSB1bnRpbCB5b3UndmUgdmVyaWZpZWQgaXRzIHRyYW5zcGlsZWQgY29kZSBpcyBub3QgaW52b2tpbmcgdGhlIGl0ZXJhdG9yIHByb3RvY29sLlxuICAgIHNoYWRvd3M6IHNoYWRvd3Muc2xpY2UoKSxcbiAgICB0eXBvZ3JhcGh5OiBjcmVhdGVUeXBvZ3JhcGh5KHBhbGV0dGUsIHR5cG9ncmFwaHlJbnB1dCksXG4gICAgdHJhbnNpdGlvbnM6IGNyZWF0ZVRyYW5zaXRpb25zKHRyYW5zaXRpb25zSW5wdXQpLFxuICAgIHpJbmRleDogX2V4dGVuZHMoe30sIHpJbmRleClcbiAgfSk7XG4gIG11aVRoZW1lID0gZGVlcG1lcmdlKG11aVRoZW1lLCBvdGhlcik7XG4gIG11aVRoZW1lID0gYXJncy5yZWR1Y2UoKGFjYywgYXJndW1lbnQpID0+IGRlZXBtZXJnZShhY2MsIGFyZ3VtZW50KSwgbXVpVGhlbWUpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIFRPRE8gdjY6IFJlZmFjdG9yIHRvIHVzZSBnbG9iYWxTdGF0ZUNsYXNzZXNNYXBwaW5nIGZyb20gQG11aS91dGlscyBvbmNlIGByZWFkT25seWAgc3RhdGUgY2xhc3MgaXMgdXNlZCBpbiBSYXRpbmcgY29tcG9uZW50LlxuICAgIGNvbnN0IHN0YXRlQ2xhc3NlcyA9IFsnYWN0aXZlJywgJ2NoZWNrZWQnLCAnY29tcGxldGVkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2V4cGFuZGVkJywgJ2ZvY3VzZWQnLCAnZm9jdXNWaXNpYmxlJywgJ3JlcXVpcmVkJywgJ3NlbGVjdGVkJ107XG4gICAgY29uc3QgdHJhdmVyc2UgPSAobm9kZSwgY29tcG9uZW50KSA9PiB7XG4gICAgICBsZXQga2V5O1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluLCBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgZm9yIChrZXkgaW4gbm9kZSkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IG5vZGVba2V5XTtcbiAgICAgICAgaWYgKHN0YXRlQ2xhc3Nlcy5pbmRleE9mKGtleSkgIT09IC0xICYmIE9iamVjdC5rZXlzKGNoaWxkKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlQ2xhc3MgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnJywga2V5KTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBcXGAke2NvbXBvbmVudH1cXGAgY29tcG9uZW50IGluY3JlYXNlcyBgICsgYHRoZSBDU1Mgc3BlY2lmaWNpdHkgb2YgdGhlIFxcYCR7a2V5fVxcYCBpbnRlcm5hbCBzdGF0ZS5gLCAnWW91IGNhbiBub3Qgb3ZlcnJpZGUgaXQgbGlrZSB0aGlzOiAnLCBKU09OLnN0cmluZ2lmeShub2RlLCBudWxsLCAyKSwgJycsIGBJbnN0ZWFkLCB5b3UgbmVlZCB0byB1c2UgdGhlICcmLiR7c3RhdGVDbGFzc30nIHN5bnRheDpgLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIHJvb3Q6IHtcbiAgICAgICAgICAgICAgICBbYCYuJHtzdGF0ZUNsYXNzfWBdOiBjaGlsZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBudWxsLCAyKSwgJycsICdodHRwczovL211aS5jb20vci9zdGF0ZS1jbGFzc2VzLWd1aWRlJ10uam9pbignXFxuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZW1vdmUgdGhlIHN0eWxlIHRvIHByZXZlbnQgZ2xvYmFsIGNvbmZsaWN0cy5cbiAgICAgICAgICBub2RlW2tleV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgT2JqZWN0LmtleXMobXVpVGhlbWUuY29tcG9uZW50cykuZm9yRWFjaChjb21wb25lbnQgPT4ge1xuICAgICAgY29uc3Qgc3R5bGVPdmVycmlkZXMgPSBtdWlUaGVtZS5jb21wb25lbnRzW2NvbXBvbmVudF0uc3R5bGVPdmVycmlkZXM7XG4gICAgICBpZiAoc3R5bGVPdmVycmlkZXMgJiYgY29tcG9uZW50LmluZGV4T2YoJ011aScpID09PSAwKSB7XG4gICAgICAgIHRyYXZlcnNlKHN0eWxlT3ZlcnJpZGVzLCBjb21wb25lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnID0gX2V4dGVuZHMoe30sIGRlZmF1bHRTeENvbmZpZywgb3RoZXIgPT0gbnVsbCA/IHZvaWQgMCA6IG90aGVyLnVuc3RhYmxlX3N4Q29uZmlnKTtcbiAgbXVpVGhlbWUudW5zdGFibGVfc3ggPSBmdW5jdGlvbiBzeChwcm9wcykge1xuICAgIHJldHVybiBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgc3g6IHByb3BzLFxuICAgICAgdGhlbWU6IHRoaXNcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIG11aVRoZW1lO1xufVxubGV0IHdhcm5lZE9uY2UgPSBmYWxzZTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNdWlUaGVtZSguLi5hcmdzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKCF3YXJuZWRPbmNlKSB7XG4gICAgICB3YXJuZWRPbmNlID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IHRoZSBjcmVhdGVNdWlUaGVtZSBmdW5jdGlvbiB3YXMgcmVuYW1lZCB0byBjcmVhdGVUaGVtZS4nLCAnJywgXCJZb3Ugc2hvdWxkIHVzZSBgaW1wb3J0IHsgY3JlYXRlVGhlbWUgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcydgXCJdLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZVRoZW1lKC4uLmFyZ3MpO1xufVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVGhlbWU7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVNaXhpbnMoYnJlYWtwb2ludHMsIG1peGlucykge1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIHRvb2xiYXI6IHtcbiAgICAgIG1pbkhlaWdodDogNTYsXG4gICAgICBbYnJlYWtwb2ludHMudXAoJ3hzJyldOiB7XG4gICAgICAgICdAbWVkaWEgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpJzoge1xuICAgICAgICAgIG1pbkhlaWdodDogNDhcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFticmVha3BvaW50cy51cCgnc20nKV06IHtcbiAgICAgICAgbWluSGVpZ2h0OiA2NFxuICAgICAgfVxuICAgIH1cbiAgfSwgbWl4aW5zKTtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZHVyYXRpb25cIiwgXCJlYXNpbmdcIiwgXCJkZWxheVwiXTtcbi8vIEZvbGxvdyBodHRwczovL21hdGVyaWFsLmdvb2dsZS5jb20vbW90aW9uL2R1cmF0aW9uLWVhc2luZy5odG1sI2R1cmF0aW9uLWVhc2luZy1uYXR1cmFsLWVhc2luZy1jdXJ2ZXNcbi8vIHRvIGxlYXJuIHRoZSBjb250ZXh0IGluIHdoaWNoIGVhY2ggZWFzaW5nIHNob3VsZCBiZSB1c2VkLlxuZXhwb3J0IGNvbnN0IGVhc2luZyA9IHtcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gZWFzaW5nIGN1cnZlLlxuICBlYXNlSW5PdXQ6ICdjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJyxcbiAgLy8gT2JqZWN0cyBlbnRlciB0aGUgc2NyZWVuIGF0IGZ1bGwgdmVsb2NpdHkgZnJvbSBvZmYtc2NyZWVuIGFuZFxuICAvLyBzbG93bHkgZGVjZWxlcmF0ZSB0byBhIHJlc3RpbmcgcG9pbnQuXG4gIGVhc2VPdXQ6ICdjdWJpYy1iZXppZXIoMC4wLCAwLCAwLjIsIDEpJyxcbiAgLy8gT2JqZWN0cyBsZWF2ZSB0aGUgc2NyZWVuIGF0IGZ1bGwgdmVsb2NpdHkuIFRoZXkgZG8gbm90IGRlY2VsZXJhdGUgd2hlbiBvZmYtc2NyZWVuLlxuICBlYXNlSW46ICdjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKScsXG4gIC8vIFRoZSBzaGFycCBjdXJ2ZSBpcyB1c2VkIGJ5IG9iamVjdHMgdGhhdCBtYXkgcmV0dXJuIHRvIHRoZSBzY3JlZW4gYXQgYW55IHRpbWUuXG4gIHNoYXJwOiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSdcbn07XG5cbi8vIEZvbGxvdyBodHRwczovL20yLm1hdGVyaWFsLmlvL2d1aWRlbGluZXMvbW90aW9uL2R1cmF0aW9uLWVhc2luZy5odG1sI2R1cmF0aW9uLWVhc2luZy1jb21tb24tZHVyYXRpb25zXG4vLyB0byBsZWFybiB3aGVuIHVzZSB3aGF0IHRpbWluZ1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uID0ge1xuICBzaG9ydGVzdDogMTUwLFxuICBzaG9ydGVyOiAyMDAsXG4gIHNob3J0OiAyNTAsXG4gIC8vIG1vc3QgYmFzaWMgcmVjb21tZW5kZWQgdGltaW5nXG4gIHN0YW5kYXJkOiAzMDAsXG4gIC8vIHRoaXMgaXMgdG8gYmUgdXNlZCBpbiBjb21wbGV4IGFuaW1hdGlvbnNcbiAgY29tcGxleDogMzc1LFxuICAvLyByZWNvbW1lbmRlZCB3aGVuIHNvbWV0aGluZyBpcyBlbnRlcmluZyBzY3JlZW5cbiAgZW50ZXJpbmdTY3JlZW46IDIyNSxcbiAgLy8gcmVjb21tZW5kZWQgd2hlbiBzb21ldGhpbmcgaXMgbGVhdmluZyBzY3JlZW5cbiAgbGVhdmluZ1NjcmVlbjogMTk1XG59O1xuZnVuY3Rpb24gZm9ybWF0TXMobWlsbGlzZWNvbmRzKSB7XG4gIHJldHVybiBgJHtNYXRoLnJvdW5kKG1pbGxpc2Vjb25kcyl9bXNgO1xufVxuZnVuY3Rpb24gZ2V0QXV0b0hlaWdodER1cmF0aW9uKGhlaWdodCkge1xuICBpZiAoIWhlaWdodCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNvbnN0IGNvbnN0YW50ID0gaGVpZ2h0IC8gMzY7XG5cbiAgLy8gaHR0cHM6Ly93d3cud29sZnJhbWFscGhhLmNvbS9pbnB1dC8/aT0oNCslMkIrMTUrKisoeCslMkYrMzYrKSsqKiswLjI1KyUyQisoeCslMkYrMzYpKyUyRis1KSsqKzEwXG4gIHJldHVybiBNYXRoLnJvdW5kKCg0ICsgMTUgKiBjb25zdGFudCAqKiAwLjI1ICsgY29uc3RhbnQgLyA1KSAqIDEwKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVRyYW5zaXRpb25zKGlucHV0VHJhbnNpdGlvbnMpIHtcbiAgY29uc3QgbWVyZ2VkRWFzaW5nID0gX2V4dGVuZHMoe30sIGVhc2luZywgaW5wdXRUcmFuc2l0aW9ucy5lYXNpbmcpO1xuICBjb25zdCBtZXJnZWREdXJhdGlvbiA9IF9leHRlbmRzKHt9LCBkdXJhdGlvbiwgaW5wdXRUcmFuc2l0aW9ucy5kdXJhdGlvbik7XG4gIGNvbnN0IGNyZWF0ZSA9IChwcm9wcyA9IFsnYWxsJ10sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uT3B0aW9uID0gbWVyZ2VkRHVyYXRpb24uc3RhbmRhcmQsXG4gICAgICAgIGVhc2luZzogZWFzaW5nT3B0aW9uID0gbWVyZ2VkRWFzaW5nLmVhc2VJbk91dCxcbiAgICAgICAgZGVsYXkgPSAwXG4gICAgICB9ID0gb3B0aW9ucyxcbiAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc3QgaXNTdHJpbmcgPSB2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuICAgICAgLy8gSUUxMSBzdXBwb3J0LCByZXBsYWNlIHdpdGggTnVtYmVyLmlzTmFOXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gICAgICBjb25zdCBpc051bWJlciA9IHZhbHVlID0+ICFpc05hTihwYXJzZUZsb2F0KHZhbHVlKSk7XG4gICAgICBpZiAoIWlzU3RyaW5nKHByb3BzKSAmJiAhQXJyYXkuaXNBcnJheShwcm9wcykpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBBcmd1bWVudCBcInByb3BzXCIgbXVzdCBiZSBhIHN0cmluZyBvciBBcnJheS4nKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNOdW1iZXIoZHVyYXRpb25PcHRpb24pICYmICFpc1N0cmluZyhkdXJhdGlvbk9wdGlvbikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBBcmd1bWVudCBcImR1cmF0aW9uXCIgbXVzdCBiZSBhIG51bWJlciBvciBhIHN0cmluZyBidXQgZm91bmQgJHtkdXJhdGlvbk9wdGlvbn0uYCk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzU3RyaW5nKGVhc2luZ09wdGlvbikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBBcmd1bWVudCBcImVhc2luZ1wiIG11c3QgYmUgYSBzdHJpbmcuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVtYmVyKGRlbGF5KSAmJiAhaXNTdHJpbmcoZGVsYXkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJkZWxheVwiIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcuJyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFNlY29uZyBhcmd1bWVudCBvZiB0cmFuc2l0aW9uLmNyZWF0ZSBtdXN0IGJlIGFuIG9iamVjdC4nLCBcIkFyZ3VtZW50cyBzaG91bGQgYmUgZWl0aGVyIGBjcmVhdGUoJ3Byb3AxJywgb3B0aW9ucylgIG9yIGBjcmVhdGUoWydwcm9wMScsICdwcm9wMiddLCBvcHRpb25zKWBcIl0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5rZXlzKG90aGVyKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBVbnJlY29nbml6ZWQgYXJndW1lbnQocykgWyR7T2JqZWN0LmtleXMob3RoZXIpLmpvaW4oJywnKX1dLmApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkocHJvcHMpID8gcHJvcHMgOiBbcHJvcHNdKS5tYXAoYW5pbWF0ZWRQcm9wID0+IGAke2FuaW1hdGVkUHJvcH0gJHt0eXBlb2YgZHVyYXRpb25PcHRpb24gPT09ICdzdHJpbmcnID8gZHVyYXRpb25PcHRpb24gOiBmb3JtYXRNcyhkdXJhdGlvbk9wdGlvbil9ICR7ZWFzaW5nT3B0aW9ufSAke3R5cGVvZiBkZWxheSA9PT0gJ3N0cmluZycgPyBkZWxheSA6IGZvcm1hdE1zKGRlbGF5KX1gKS5qb2luKCcsJyk7XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgZ2V0QXV0b0hlaWdodER1cmF0aW9uLFxuICAgIGNyZWF0ZVxuICB9LCBpbnB1dFRyYW5zaXRpb25zLCB7XG4gICAgZWFzaW5nOiBtZXJnZWRFYXNpbmcsXG4gICAgZHVyYXRpb246IG1lcmdlZER1cmF0aW9uXG4gIH0pO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuY29uc3QgZGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRUaGVtZTsiLCJleHBvcnQgZGVmYXVsdCAnJCRtYXRlcmlhbCc7IiwiaW1wb3J0IHNsb3RTaG91bGRGb3J3YXJkUHJvcCBmcm9tICcuL3Nsb3RTaG91bGRGb3J3YXJkUHJvcCc7XG5jb25zdCByb290U2hvdWxkRm9yd2FyZFByb3AgPSBwcm9wID0+IHNsb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSAmJiBwcm9wICE9PSAnY2xhc3Nlcyc7XG5leHBvcnQgZGVmYXVsdCByb290U2hvdWxkRm9yd2FyZFByb3A7IiwiLy8gY29waWVkIGZyb20gQG11aS9zeXN0ZW0vY3JlYXRlU3R5bGVkXG5mdW5jdGlvbiBzbG90U2hvdWxkRm9yd2FyZFByb3AocHJvcCkge1xuICByZXR1cm4gcHJvcCAhPT0gJ293bmVyU3RhdGUnICYmIHByb3AgIT09ICd0aGVtZScgJiYgcHJvcCAhPT0gJ3N4JyAmJiBwcm9wICE9PSAnYXMnO1xufVxuZXhwb3J0IGRlZmF1bHQgc2xvdFNob3VsZEZvcndhcmRQcm9wOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IGNyZWF0ZVN0eWxlZCBmcm9tICdAbXVpL3N5c3RlbS9jcmVhdGVTdHlsZWQnO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuL2RlZmF1bHRUaGVtZSc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi9pZGVudGlmaWVyJztcbmltcG9ydCByb290U2hvdWxkRm9yd2FyZFByb3AgZnJvbSAnLi9yb290U2hvdWxkRm9yd2FyZFByb3AnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzbG90U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuL3Nsb3RTaG91bGRGb3J3YXJkUHJvcCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4vcm9vdFNob3VsZEZvcndhcmRQcm9wJztcbmNvbnN0IHN0eWxlZCA9IGNyZWF0ZVN0eWxlZCh7XG4gIHRoZW1lSWQ6IFRIRU1FX0lELFxuICBkZWZhdWx0VGhlbWUsXG4gIHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSk7XG5leHBvcnQgZGVmYXVsdCBzdHlsZWQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUaGVtZSBhcyB1c2VUaGVtZVN5c3RlbSB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaGVtZSgpIHtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZVN5c3RlbShkZWZhdWx0VGhlbWUpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZURlYnVnVmFsdWUodGhlbWUpO1xuICB9XG4gIHJldHVybiB0aGVtZVtUSEVNRV9JRF0gfHwgdGhlbWU7XG59IiwiZXhwb3J0IGNvbnN0IHJlZmxvdyA9IG5vZGUgPT4gbm9kZS5zY3JvbGxUb3A7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNpdGlvblByb3BzKHByb3BzLCBvcHRpb25zKSB7XG4gIHZhciBfc3R5bGUkdHJhbnNpdGlvbkR1cmEsIF9zdHlsZSR0cmFuc2l0aW9uVGltaTtcbiAgY29uc3Qge1xuICAgIHRpbWVvdXQsXG4gICAgZWFzaW5nLFxuICAgIHN0eWxlID0ge31cbiAgfSA9IHByb3BzO1xuICByZXR1cm4ge1xuICAgIGR1cmF0aW9uOiAoX3N0eWxlJHRyYW5zaXRpb25EdXJhID0gc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uKSAhPSBudWxsID8gX3N0eWxlJHRyYW5zaXRpb25EdXJhIDogdHlwZW9mIHRpbWVvdXQgPT09ICdudW1iZXInID8gdGltZW91dCA6IHRpbWVvdXRbb3B0aW9ucy5tb2RlXSB8fCAwLFxuICAgIGVhc2luZzogKF9zdHlsZSR0cmFuc2l0aW9uVGltaSA9IHN0eWxlLnRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbikgIT0gbnVsbCA/IF9zdHlsZSR0cmFuc2l0aW9uVGltaSA6IHR5cGVvZiBlYXNpbmcgPT09ICdvYmplY3QnID8gZWFzaW5nW29wdGlvbnMubW9kZV0gOiBlYXNpbmcsXG4gICAgZGVsYXk6IHN0eWxlLnRyYW5zaXRpb25EZWxheVxuICB9O1xufSIsImltcG9ydCBjYXBpdGFsaXplIGZyb20gJ0BtdWkvdXRpbHMvY2FwaXRhbGl6ZSc7XG5leHBvcnQgZGVmYXVsdCBjYXBpdGFsaXplOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpU3ZnSWNvbicsIHNsb3QpO1xufVxuY29uc3Qgc3ZnSWNvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlTdmdJY29uJywgWydyb290JywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdjb2xvckFjdGlvbicsICdjb2xvckVycm9yJywgJ2NvbG9yRGlzYWJsZWQnLCAnZm9udFNpemVJbmhlcml0JywgJ2ZvbnRTaXplU21hbGwnLCAnZm9udFNpemVNZWRpdW0nLCAnZm9udFNpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IHN2Z0ljb25DbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJmb250U2l6ZVwiLCBcImh0bWxDb2xvclwiLCBcImluaGVyaXRWaWV3Qm94XCIsIFwidGl0bGVBY2Nlc3NcIiwgXCJ2aWV3Qm94XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vc3ZnSWNvbkNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2xvcixcbiAgICBmb250U2l6ZSxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBjb2xvciAhPT0gJ2luaGVyaXQnICYmIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgYGZvbnRTaXplJHtjYXBpdGFsaXplKGZvbnRTaXplKX1gXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFN2Z0ljb25VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFN2Z0ljb25Sb290ID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlTdmdJY29uJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBzdHlsZXNbYGZvbnRTaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuZm9udFNpemUpfWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF90aGVtZSR0cmFuc2l0aW9ucywgX3RoZW1lJHRyYW5zaXRpb25zJGNyLCBfdGhlbWUkdHJhbnNpdGlvbnMyLCBfdGhlbWUkdHlwb2dyYXBoeSwgX3RoZW1lJHR5cG9ncmFwaHkkcHhULCBfdGhlbWUkdHlwb2dyYXBoeTIsIF90aGVtZSR0eXBvZ3JhcGh5MiRweCwgX3RoZW1lJHR5cG9ncmFwaHkzLCBfdGhlbWUkdHlwb2dyYXBoeTMkcHgsIF9wYWxldHRlJG93bmVyU3RhdGUkYywgX3BhbGV0dGUsIF9wYWxldHRlMiwgX3BhbGV0dGUzO1xuICByZXR1cm4ge1xuICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICB3aWR0aDogJzFlbScsXG4gICAgaGVpZ2h0OiAnMWVtJyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAvLyB0aGUgPHN2Zz4gd2lsbCBkZWZpbmUgdGhlIHByb3BlcnR5IHRoYXQgaGFzIGBjdXJyZW50Q29sb3JgXG4gICAgLy8gZm9yIGV4YW1wbGUgaGVyb2ljb25zIHVzZXMgZmlsbD1cIm5vbmVcIiBhbmQgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICBmaWxsOiBvd25lclN0YXRlLmhhc1N2Z0FzQ2hpbGQgPyB1bmRlZmluZWQgOiAnY3VycmVudENvbG9yJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIHRyYW5zaXRpb246IChfdGhlbWUkdHJhbnNpdGlvbnMgPSB0aGVtZS50cmFuc2l0aW9ucykgPT0gbnVsbCB8fCAoX3RoZW1lJHRyYW5zaXRpb25zJGNyID0gX3RoZW1lJHRyYW5zaXRpb25zLmNyZWF0ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0cmFuc2l0aW9ucyRjci5jYWxsKF90aGVtZSR0cmFuc2l0aW9ucywgJ2ZpbGwnLCB7XG4gICAgICBkdXJhdGlvbjogKF90aGVtZSR0cmFuc2l0aW9uczIgPSB0aGVtZS50cmFuc2l0aW9ucykgPT0gbnVsbCB8fCAoX3RoZW1lJHRyYW5zaXRpb25zMiA9IF90aGVtZSR0cmFuc2l0aW9uczIuZHVyYXRpb24pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHJhbnNpdGlvbnMyLnNob3J0ZXJcbiAgICB9KSxcbiAgICBmb250U2l6ZToge1xuICAgICAgaW5oZXJpdDogJ2luaGVyaXQnLFxuICAgICAgc21hbGw6ICgoX3RoZW1lJHR5cG9ncmFwaHkgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsIHx8IChfdGhlbWUkdHlwb2dyYXBoeSRweFQgPSBfdGhlbWUkdHlwb2dyYXBoeS5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkkcHhULmNhbGwoX3RoZW1lJHR5cG9ncmFwaHksIDIwKSkgfHwgJzEuMjVyZW0nLFxuICAgICAgbWVkaXVtOiAoKF90aGVtZSR0eXBvZ3JhcGh5MiA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgfHwgKF90aGVtZSR0eXBvZ3JhcGh5MiRweCA9IF90aGVtZSR0eXBvZ3JhcGh5Mi5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkyJHB4LmNhbGwoX3RoZW1lJHR5cG9ncmFwaHkyLCAyNCkpIHx8ICcxLjVyZW0nLFxuICAgICAgbGFyZ2U6ICgoX3RoZW1lJHR5cG9ncmFwaHkzID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCB8fCAoX3RoZW1lJHR5cG9ncmFwaHkzJHB4ID0gX3RoZW1lJHR5cG9ncmFwaHkzLnB4VG9SZW0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHlwb2dyYXBoeTMkcHguY2FsbChfdGhlbWUkdHlwb2dyYXBoeTMsIDM1KSkgfHwgJzIuMTg3NXJlbSdcbiAgICB9W293bmVyU3RhdGUuZm9udFNpemVdLFxuICAgIC8vIFRPRE8gdjUgZGVwcmVjYXRlLCB2NiByZW1vdmUgZm9yIHN4XG4gICAgY29sb3I6IChfcGFsZXR0ZSRvd25lclN0YXRlJGMgPSAoX3BhbGV0dGUgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUgPSBfcGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlLm1haW4pICE9IG51bGwgPyBfcGFsZXR0ZSRvd25lclN0YXRlJGMgOiB7XG4gICAgICBhY3Rpb246IChfcGFsZXR0ZTIgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUyID0gX3BhbGV0dGUyLmFjdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlMi5hY3RpdmUsXG4gICAgICBkaXNhYmxlZDogKF9wYWxldHRlMyA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsIHx8IChfcGFsZXR0ZTMgPSBfcGFsZXR0ZTMuYWN0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUzLmRpc2FibGVkLFxuICAgICAgaW5oZXJpdDogdW5kZWZpbmVkXG4gICAgfVtvd25lclN0YXRlLmNvbG9yXVxuICB9O1xufSk7XG5jb25zdCBTdmdJY29uID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU3ZnSWNvbihpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlTdmdJY29uJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdpbmhlcml0JyxcbiAgICAgIGNvbXBvbmVudCA9ICdzdmcnLFxuICAgICAgZm9udFNpemUgPSAnbWVkaXVtJyxcbiAgICAgIGh0bWxDb2xvcixcbiAgICAgIGluaGVyaXRWaWV3Qm94ID0gZmFsc2UsXG4gICAgICB0aXRsZUFjY2VzcyxcbiAgICAgIHZpZXdCb3ggPSAnMCAwIDI0IDI0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBoYXNTdmdBc0NoaWxkID0gLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJiBjaGlsZHJlbi50eXBlID09PSAnc3ZnJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBmb250U2l6ZSxcbiAgICBpbnN0YW5jZUZvbnRTaXplOiBpblByb3BzLmZvbnRTaXplLFxuICAgIGluaGVyaXRWaWV3Qm94LFxuICAgIHZpZXdCb3gsXG4gICAgaGFzU3ZnQXNDaGlsZFxuICB9KTtcbiAgY29uc3QgbW9yZSA9IHt9O1xuICBpZiAoIWluaGVyaXRWaWV3Qm94KSB7XG4gICAgbW9yZS52aWV3Qm94ID0gdmlld0JveDtcbiAgfVxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoU3ZnSWNvblJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgZm9jdXNhYmxlOiBcImZhbHNlXCIsXG4gICAgY29sb3I6IGh0bWxDb2xvcixcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRpdGxlQWNjZXNzID8gdW5kZWZpbmVkIDogdHJ1ZSxcbiAgICByb2xlOiB0aXRsZUFjY2VzcyA/ICdpbWcnIDogdW5kZWZpbmVkLFxuICAgIHJlZjogcmVmXG4gIH0sIG1vcmUsIG90aGVyLCBoYXNTdmdBc0NoaWxkICYmIGNoaWxkcmVuLnByb3BzLCB7XG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogW2hhc1N2Z0FzQ2hpbGQgPyBjaGlsZHJlbi5wcm9wcy5jaGlsZHJlbiA6IGNoaWxkcmVuLCB0aXRsZUFjY2VzcyA/IC8qI19fUFVSRV9fKi9fanN4KFwidGl0bGVcIiwge1xuICAgICAgY2hpbGRyZW46IHRpdGxlQWNjZXNzXG4gICAgfSkgOiBudWxsXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN2Z0ljb24ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogTm9kZSBwYXNzZWQgaW50byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogWW91IGNhbiB1c2UgdGhlIGBodG1sQ29sb3JgIHByb3AgdG8gYXBwbHkgYSBjb2xvciBhdHRyaWJ1dGUgdG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnYWN0aW9uJywgJ2Rpc2FibGVkJywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBmb250U2l6ZSBhcHBsaWVkIHRvIHRoZSBpY29uLiBEZWZhdWx0cyB0byAyNHB4LCBidXQgY2FuIGJlIGNvbmZpZ3VyZSB0byBpbmhlcml0IGZvbnQgc2l6ZS5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIGZvbnRTaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnbGFyZ2UnLCAnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgY29sb3IgYXR0cmlidXRlIHRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGh0bWxDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJvb3Qgbm9kZSB3aWxsIGluaGVyaXQgdGhlIGN1c3RvbSBgY29tcG9uZW50YCdzIHZpZXdCb3ggYW5kIHRoZSBgdmlld0JveGBcbiAgICogcHJvcCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqIFVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHJlZmVyZW5jZSBhIGN1c3RvbSBgY29tcG9uZW50YCBhbmQgaGF2ZSBgU3ZnSWNvbmAgcGFzcyB0aGF0XG4gICAqIGBjb21wb25lbnRgJ3Mgdmlld0JveCB0byB0aGUgcm9vdCBub2RlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5oZXJpdFZpZXdCb3g6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNoYXBlLXJlbmRlcmluZyBhdHRyaWJ1dGUuIFRoZSBiZWhhdmlvciBvZiB0aGUgZGlmZmVyZW50IG9wdGlvbnMgaXMgZGVzY3JpYmVkIG9uIHRoZVxuICAgKiBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlL3NoYXBlLXJlbmRlcmluZykuXG4gICAqIElmIHlvdSBhcmUgaGF2aW5nIGlzc3VlcyB3aXRoIGJsdXJyeSBpY29ucyB5b3Ugc2hvdWxkIGludmVzdGlnYXRlIHRoaXMgcHJvcC5cbiAgICovXG4gIHNoYXBlUmVuZGVyaW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogUHJvdmlkZXMgYSBodW1hbi1yZWFkYWJsZSB0aXRsZSBmb3IgdGhlIGVsZW1lbnQgdGhhdCBjb250YWlucyBpdC5cbiAgICogaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy1hY2Nlc3MvI0VxdWl2YWxlbnRcbiAgICovXG4gIHRpdGxlQWNjZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQWxsb3dzIHlvdSB0byByZWRlZmluZSB3aGF0IHRoZSBjb29yZGluYXRlcyB3aXRob3V0IHVuaXRzIG1lYW4gaW5zaWRlIGFuIFNWRyBlbGVtZW50LlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIFNWRyBlbGVtZW50IGlzIDUwMCAod2lkdGgpIGJ5IDIwMCAoaGVpZ2h0KSxcbiAgICogYW5kIHlvdSBwYXNzIHZpZXdCb3g9XCIwIDAgNTAgMjBcIixcbiAgICogdGhpcyBtZWFucyB0aGF0IHRoZSBjb29yZGluYXRlcyBpbnNpZGUgdGhlIFNWRyB3aWxsIGdvIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciAoMCwwKVxuICAgKiB0byBib3R0b20gcmlnaHQgKDUwLDIwKSBhbmQgZWFjaCB1bml0IHdpbGwgYmUgd29ydGggMTBweC5cbiAgICogQGRlZmF1bHQgJzAgMCAyNCAyNCdcbiAgICovXG4gIHZpZXdCb3g6IFByb3BUeXBlcy5zdHJpbmdcbn0gOiB2b2lkIDA7XG5TdmdJY29uLm11aU5hbWUgPSAnU3ZnSWNvbic7XG5leHBvcnQgZGVmYXVsdCBTdmdJY29uOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU3ZnSWNvbiBmcm9tICcuLi9TdmdJY29uJztcblxuLyoqXG4gKiBQcml2YXRlIG1vZHVsZSByZXNlcnZlZCBmb3IgQG11aSBwYWNrYWdlcy5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN2Z0ljb24ocGF0aCwgZGlzcGxheU5hbWUpIHtcbiAgZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCByZWYpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3ZnSWNvbiwgX2V4dGVuZHMoe1xuICAgICAgXCJkYXRhLXRlc3RpZFwiOiBgJHtkaXNwbGF5TmFtZX1JY29uYCxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBwYXRoXG4gICAgfSkpO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gTmVlZCB0byBzZXQgYGRpc3BsYXlOYW1lYCBvbiB0aGUgaW5uZXIgY29tcG9uZW50IGZvciBSZWFjdC5tZW1vLlxuICAgIC8vIFJlYWN0IHByaW9yIHRvIDE2LjE0IGlnbm9yZXMgYGRpc3BsYXlOYW1lYCBvbiB0aGUgd3JhcHBlci5cbiAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgJHtkaXNwbGF5TmFtZX1JY29uYDtcbiAgfVxuICBDb21wb25lbnQubXVpTmFtZSA9IFN2Z0ljb24ubXVpTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5tZW1vKCAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihDb21wb25lbnQpKTtcbn0iLCJpbXBvcnQgZGVib3VuY2UgZnJvbSAnQG11aS91dGlscy9kZWJvdW5jZSc7XG5leHBvcnQgZGVmYXVsdCBkZWJvdW5jZTsiLCJpbXBvcnQgZ2V0U2Nyb2xsYmFyU2l6ZSBmcm9tICdAbXVpL3V0aWxzL2dldFNjcm9sbGJhclNpemUnO1xuZXhwb3J0IGRlZmF1bHQgZ2V0U2Nyb2xsYmFyU2l6ZTsiLCJpbXBvcnQgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIGZyb20gJ0BtdWkvdXRpbHMvY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uJztcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUNoYWluZWRGdW5jdGlvbjsiLCJpbXBvcnQgZGVwcmVjYXRlZFByb3BUeXBlIGZyb20gJ0BtdWkvdXRpbHMvZGVwcmVjYXRlZFByb3BUeXBlJztcbmV4cG9ydCBkZWZhdWx0IGRlcHJlY2F0ZWRQcm9wVHlwZTsiLCJpbXBvcnQgcmVxdWlyZVByb3BGYWN0b3J5IGZyb20gJ0BtdWkvdXRpbHMvcmVxdWlyZVByb3BGYWN0b3J5JztcbmV4cG9ydCBkZWZhdWx0IHJlcXVpcmVQcm9wRmFjdG9yeTsiLCJpbXBvcnQgc2V0UmVmIGZyb20gJ0BtdWkvdXRpbHMvc2V0UmVmJztcbmV4cG9ydCBkZWZhdWx0IHNldFJlZjsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VJZCBmcm9tICdAbXVpL3V0aWxzL3VzZUlkJztcbmV4cG9ydCBkZWZhdWx0IHVzZUlkOyIsImltcG9ydCB1bnN1cHBvcnRlZFByb3AgZnJvbSAnQG11aS91dGlscy91bnN1cHBvcnRlZFByb3AnO1xuZXhwb3J0IGRlZmF1bHQgdW5zdXBwb3J0ZWRQcm9wOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgdW5zdGFibGVfQ2xhc3NOYW1lR2VuZXJhdG9yIGFzIENsYXNzTmFtZUdlbmVyYXRvciB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjYXBpdGFsaXplIH0gZnJvbSAnLi9jYXBpdGFsaXplJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIH0gZnJvbSAnLi9jcmVhdGVDaGFpbmVkRnVuY3Rpb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVTdmdJY29uIH0gZnJvbSAnLi9jcmVhdGVTdmdJY29uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGVib3VuY2UgfSBmcm9tICcuL2RlYm91bmNlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGVwcmVjYXRlZFByb3BUeXBlIH0gZnJvbSAnLi9kZXByZWNhdGVkUHJvcFR5cGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc011aUVsZW1lbnQgfSBmcm9tICcuL2lzTXVpRWxlbWVudCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG93bmVyRG9jdW1lbnQgfSBmcm9tICcuL293bmVyRG9jdW1lbnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvd25lcldpbmRvdyB9IGZyb20gJy4vb3duZXJXaW5kb3cnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByZXF1aXJlUHJvcEZhY3RvcnkgfSBmcm9tICcuL3JlcXVpcmVQcm9wRmFjdG9yeSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNldFJlZiB9IGZyb20gJy4vc2V0UmVmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfdXNlRW5oYW5jZWRFZmZlY3QgfSBmcm9tICcuL3VzZUVuaGFuY2VkRWZmZWN0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfdXNlSWQgfSBmcm9tICcuL3VzZUlkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdXBwb3J0ZWRQcm9wIH0gZnJvbSAnLi91bnN1cHBvcnRlZFByb3AnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VDb250cm9sbGVkIH0gZnJvbSAnLi91c2VDb250cm9sbGVkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlRXZlbnRDYWxsYmFjayB9IGZyb20gJy4vdXNlRXZlbnRDYWxsYmFjayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZUZvcmtSZWYgfSBmcm9tICcuL3VzZUZvcmtSZWYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VJc0ZvY3VzVmlzaWJsZSB9IGZyb20gJy4vdXNlSXNGb2N1c1Zpc2libGUnO1xuLy8gVE9ETzogcmVtb3ZlIHRoaXMgZXhwb3J0IG9uY2UgQ2xhc3NOYW1lR2VuZXJhdG9yIGlzIHN0YWJsZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IHVuc3RhYmxlX0NsYXNzTmFtZUdlbmVyYXRvciA9IHtcbiAgY29uZmlndXJlOiBnZW5lcmF0b3IgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4oWydNVUk6IGBDbGFzc05hbWVHZW5lcmF0b3JgIGltcG9ydCBmcm9tIGBAbXVpL21hdGVyaWFsL3V0aWxzYCBpcyBvdXRkYXRlZCBhbmQgbWlnaHQgY2F1c2UgdW5leHBlY3RlZCBpc3N1ZXMuJywgJycsIFwiWW91IHNob3VsZCB1c2UgYGltcG9ydCB7IHVuc3RhYmxlX0NsYXNzTmFtZUdlbmVyYXRvciB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvY2xhc3NOYW1lJ2AgaW5zdGVhZFwiLCAnJywgJ1RoZSBkZXRhaWwgb2YgdGhlIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy8zMDAxMSNpc3N1ZWNvbW1lbnQtMTAyNDk5MzQwMScsICcnLCAnVGhlIHVwZGF0ZWQgZG9jdW1lbnRhdGlvbjogaHR0cHM6Ly9tdWkuY29tL2d1aWRlcy9jbGFzc25hbWUtZ2VuZXJhdG9yLyddLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gICAgQ2xhc3NOYW1lR2VuZXJhdG9yLmNvbmZpZ3VyZShnZW5lcmF0b3IpO1xuICB9XG59OyIsImltcG9ydCBpc011aUVsZW1lbnQgZnJvbSAnQG11aS91dGlscy9pc011aUVsZW1lbnQnO1xuZXhwb3J0IGRlZmF1bHQgaXNNdWlFbGVtZW50OyIsImltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJ0BtdWkvdXRpbHMvb3duZXJEb2N1bWVudCc7XG5leHBvcnQgZGVmYXVsdCBvd25lckRvY3VtZW50OyIsImltcG9ydCBvd25lcldpbmRvdyBmcm9tICdAbXVpL3V0aWxzL293bmVyV2luZG93JztcbmV4cG9ydCBkZWZhdWx0IG93bmVyV2luZG93OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHVzZUNvbnRyb2xsZWQgZnJvbSAnQG11aS91dGlscy91c2VDb250cm9sbGVkJztcbmV4cG9ydCBkZWZhdWx0IHVzZUNvbnRyb2xsZWQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlRW5oYW5jZWRFZmZlY3QgZnJvbSAnQG11aS91dGlscy91c2VFbmhhbmNlZEVmZmVjdCc7XG5leHBvcnQgZGVmYXVsdCB1c2VFbmhhbmNlZEVmZmVjdDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJ0BtdWkvdXRpbHMvdXNlRXZlbnRDYWxsYmFjayc7XG5leHBvcnQgZGVmYXVsdCB1c2VFdmVudENhbGxiYWNrOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnQG11aS91dGlscy91c2VGb3JrUmVmJztcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcmtSZWY7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlSXNGb2N1c1Zpc2libGUgZnJvbSAnQG11aS91dGlscy91c2VJc0ZvY3VzVmlzaWJsZSc7XG5leHBvcnQgZGVmYXVsdCB1c2VJc0ZvY3VzVmlzaWJsZTsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJlbGVtZW50VHlwZVwiLCBcIm93bmVyU3RhdGVcIiwgXCJleHRlcm5hbEZvcndhcmRlZFByb3BzXCIsIFwiZ2V0U2xvdE93bmVyU3RhdGVcIiwgXCJpbnRlcm5hbEZvcndhcmRlZFByb3BzXCJdLFxuICBfZXhjbHVkZWQyID0gW1wiY29tcG9uZW50XCIsIFwic2xvdHNcIiwgXCJzbG90UHJvcHNcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJjb21wb25lbnRcIl07XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICdAbXVpL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IGFwcGVuZE93bmVyU3RhdGUgZnJvbSAnQG11aS91dGlscy9hcHBlbmRPd25lclN0YXRlJztcbmltcG9ydCByZXNvbHZlQ29tcG9uZW50UHJvcHMgZnJvbSAnQG11aS91dGlscy9yZXNvbHZlQ29tcG9uZW50UHJvcHMnO1xuaW1wb3J0IG1lcmdlU2xvdFByb3BzIGZyb20gJ0BtdWkvdXRpbHMvbWVyZ2VTbG90UHJvcHMnO1xuLyoqXG4gKiBBbiBpbnRlcm5hbCBmdW5jdGlvbiB0byBjcmVhdGUgYSBNYXRlcmlhbCBVSSBzbG90LlxuICpcbiAqIFRoaXMgaXMgYW4gYWR2YW5jZWQgdmVyc2lvbiBvZiBCYXNlIFVJIGB1c2VTbG90UHJvcHNgIGJlY2F1c2UgTWF0ZXJpYWwgVUkgYWxsb3dzIGxlYWYgY29tcG9uZW50IHRvIGJlIGN1c3RvbWl6ZWQgdmlhIGBjb21wb25lbnRgIHByb3BcbiAqIHdoaWxlIEJhc2UgVUkgZG9lcyBub3QgbmVlZCB0byBzdXBwb3J0IGxlYWYgY29tcG9uZW50IGN1c3RvbWl6YXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWU6IG5hbWUgb2YgdGhlIHNsb3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyB7W1Nsb3QsIHNsb3RQcm9wc119IFRoZSBzbG90J3MgUmVhY3QgY29tcG9uZW50IGFuZCB0aGUgc2xvdCdzIHByb3BzXG4gKlxuICogTm90ZTogdGhlIHJldHVybmVkIHNsb3QncyBwcm9wc1xuICogLSB3aWxsIG5ldmVyIGNvbnRhaW4gYGNvbXBvbmVudGAgcHJvcC5cbiAqIC0gbWlnaHQgY29udGFpbiBgYXNgIHByb3AuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVNsb3QoXG4vKipcbiAqIFRoZSBzbG90J3MgbmFtZS4gQWxsIE1hdGVyaWFsIFVJIGNvbXBvbmVudHMgc2hvdWxkIGhhdmUgYHJvb3RgIHNsb3QuXG4gKlxuICogSWYgdGhlIG5hbWUgaXMgYHJvb3RgLCB0aGUgbG9naWMgYmVoYXZlcyBkaWZmZXJlbnRseSBmcm9tIG90aGVyIHNsb3RzLFxuICogZS5nLiB0aGUgYGV4dGVybmFsRm9yd2FyZGVkUHJvcHNgIGFyZSBzcHJlYWQgdG8gYHJvb3RgIHNsb3QgYnV0IG5vdCBvdGhlciBzbG90cy5cbiAqL1xubmFtZSwgcGFyYW1ldGVycykge1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBlbGVtZW50VHlwZTogaW5pdGlhbEVsZW1lbnRUeXBlLFxuICAgICAgb3duZXJTdGF0ZSxcbiAgICAgIGV4dGVybmFsRm9yd2FyZGVkUHJvcHMsXG4gICAgICBnZXRTbG90T3duZXJTdGF0ZSxcbiAgICAgIGludGVybmFsRm9yd2FyZGVkUHJvcHNcbiAgICB9ID0gcGFyYW1ldGVycyxcbiAgICB1c2VTbG90UHJvcHNQYXJhbXMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwYXJhbWV0ZXJzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB7XG4gICAgICBjb21wb25lbnQ6IHJvb3RDb21wb25lbnQsXG4gICAgICBzbG90cyA9IHtcbiAgICAgICAgW25hbWVdOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICBzbG90UHJvcHMgPSB7XG4gICAgICAgIFtuYW1lXTogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSA9IGV4dGVybmFsRm9yd2FyZGVkUHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShleHRlcm5hbEZvcndhcmRlZFByb3BzLCBfZXhjbHVkZWQyKTtcbiAgY29uc3QgZWxlbWVudFR5cGUgPSBzbG90c1tuYW1lXSB8fCBpbml0aWFsRWxlbWVudFR5cGU7XG5cbiAgLy8gYHNsb3RQcm9wc1tuYW1lXWAgY2FuIGJlIGEgY2FsbGJhY2sgdGhhdCByZWNlaXZlcyB0aGUgY29tcG9uZW50J3Mgb3duZXJTdGF0ZS5cbiAgLy8gYHJlc29sdmVkQ29tcG9uZW50c1Byb3BzYCBpcyBhbHdheXMgYSBwbGFpbiBvYmplY3QuXG4gIGNvbnN0IHJlc29sdmVkQ29tcG9uZW50c1Byb3BzID0gcmVzb2x2ZUNvbXBvbmVudFByb3BzKHNsb3RQcm9wc1tuYW1lXSwgb3duZXJTdGF0ZSk7XG4gIGNvbnN0IF9tZXJnZVNsb3RQcm9wcyA9IG1lcmdlU2xvdFByb3BzKF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0sIHVzZVNsb3RQcm9wc1BhcmFtcywge1xuICAgICAgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wczogbmFtZSA9PT0gJ3Jvb3QnID8gb3RoZXIgOiB1bmRlZmluZWQsXG4gICAgICBleHRlcm5hbFNsb3RQcm9wczogcmVzb2x2ZWRDb21wb25lbnRzUHJvcHNcbiAgICB9KSksXG4gICAge1xuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY29tcG9uZW50OiBzbG90Q29tcG9uZW50XG4gICAgICB9LFxuICAgICAgaW50ZXJuYWxSZWZcbiAgICB9ID0gX21lcmdlU2xvdFByb3BzLFxuICAgIG1lcmdlZFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX21lcmdlU2xvdFByb3BzLnByb3BzLCBfZXhjbHVkZWQzKTtcbiAgY29uc3QgcmVmID0gdXNlRm9ya1JlZihpbnRlcm5hbFJlZiwgcmVzb2x2ZWRDb21wb25lbnRzUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHJlc29sdmVkQ29tcG9uZW50c1Byb3BzLnJlZiwgcGFyYW1ldGVycy5yZWYpO1xuICBjb25zdCBzbG90T3duZXJTdGF0ZSA9IGdldFNsb3RPd25lclN0YXRlID8gZ2V0U2xvdE93bmVyU3RhdGUobWVyZ2VkUHJvcHMpIDoge307XG4gIGNvbnN0IGZpbmFsT3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLCBzbG90T3duZXJTdGF0ZSk7XG4gIGNvbnN0IExlYWZDb21wb25lbnQgPSBuYW1lID09PSAncm9vdCcgPyBzbG90Q29tcG9uZW50IHx8IHJvb3RDb21wb25lbnQgOiBzbG90Q29tcG9uZW50O1xuICBjb25zdCBwcm9wcyA9IGFwcGVuZE93bmVyU3RhdGUoZWxlbWVudFR5cGUsIF9leHRlbmRzKHt9LCBuYW1lID09PSAncm9vdCcgJiYgIXJvb3RDb21wb25lbnQgJiYgIXNsb3RzW25hbWVdICYmIGludGVybmFsRm9yd2FyZGVkUHJvcHMsIG5hbWUgIT09ICdyb290JyAmJiAhc2xvdHNbbmFtZV0gJiYgaW50ZXJuYWxGb3J3YXJkZWRQcm9wcywgbWVyZ2VkUHJvcHMsIExlYWZDb21wb25lbnQgJiYge1xuICAgIGFzOiBMZWFmQ29tcG9uZW50XG4gIH0sIHtcbiAgICByZWZcbiAgfSksIGZpbmFsT3duZXJTdGF0ZSk7XG4gIE9iamVjdC5rZXlzKHNsb3RPd25lclN0YXRlKS5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICBkZWxldGUgcHJvcHNbcHJvcE5hbWVdO1xuICB9KTtcbiAgcmV0dXJuIFtlbGVtZW50VHlwZSwgcHJvcHNdO1xufSJdLCJuYW1lcyI6WyJlbGV2YXRpb24iLCJhbHBoYVZhbHVlIiwiTWF0aCIsImxvZyIsInRvRml4ZWQiLCJnZXRQYXBlclV0aWxpdHlDbGFzcyIsInNsb3QiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzcyIsImdlbmVyYXRlVXRpbGl0eUNsYXNzZXMiLCJfZXhjbHVkZWQiLCJQYXBlclJvb3QiLCJzdHlsZWQiLCJuYW1lIiwib3ZlcnJpZGVzUmVzb2x2ZXIiLCJwcm9wcyIsInN0eWxlcyIsIm93bmVyU3RhdGUiLCJyb290IiwidmFyaWFudCIsInNxdWFyZSIsInJvdW5kZWQiLCJ0aGVtZSIsIl90aGVtZSR2YXJzJG92ZXJsYXlzIiwiYmFja2dyb3VuZENvbG9yIiwidmFycyIsInBhbGV0dGUiLCJiYWNrZ3JvdW5kIiwicGFwZXIiLCJjb2xvciIsInRleHQiLCJwcmltYXJ5IiwidHJhbnNpdGlvbiIsInRyYW5zaXRpb25zIiwiY3JlYXRlIiwiYm9yZGVyUmFkaXVzIiwic2hhcGUiLCJib3JkZXIiLCJkaXZpZGVyIiwiYm94U2hhZG93Iiwic2hhZG93cyIsIm1vZGUiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJvdmVybGF5cyIsImluUHJvcHMiLCJyZWYiLCJjbGFzc05hbWUiLCJjb21wb25lbnQiLCJvdGhlciIsImNsYXNzZXMiLCJzbG90cyIsImNvbXBvc2VDbGFzc2VzIiwidXNlVXRpbGl0eUNsYXNzZXMiLCJhcyIsImNsc3giLCJnZXRQb3BvdmVyVXRpbGl0eUNsYXNzIiwiX2V4Y2x1ZGVkMiIsIl9leGNsdWRlZDMiLCJnZXRPZmZzZXRUb3AiLCJyZWN0IiwidmVydGljYWwiLCJvZmZzZXQiLCJoZWlnaHQiLCJnZXRPZmZzZXRMZWZ0IiwiaG9yaXpvbnRhbCIsIndpZHRoIiwiZ2V0VHJhbnNmb3JtT3JpZ2luVmFsdWUiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJtYXAiLCJuIiwiam9pbiIsInJlc29sdmVBbmNob3JFbCIsImFuY2hvckVsIiwiUG9wb3ZlclJvb3QiLCJNb2RhbCIsIlBvcG92ZXJQYXBlciIsIlBhcGVyIiwicG9zaXRpb24iLCJvdmVyZmxvd1kiLCJvdmVyZmxvd1giLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0Iiwib3V0bGluZSIsIl9zbG90UHJvcHMkcGFwZXIiLCJfc2xvdHMkcm9vdCIsIl9zbG90cyRwYXBlciIsImFjdGlvbiIsImFuY2hvck9yaWdpbiIsImFuY2hvclBvc2l0aW9uIiwiYW5jaG9yUmVmZXJlbmNlIiwiY2hpbGRyZW4iLCJjb250YWluZXIiLCJjb250YWluZXJQcm9wIiwibWFyZ2luVGhyZXNob2xkIiwib3BlbiIsIlBhcGVyUHJvcHMiLCJQYXBlclByb3BzUHJvcCIsInNsb3RQcm9wcyIsIlRyYW5zaXRpb25Db21wb25lbnQiLCJHcm93IiwidHJhbnNpdGlvbkR1cmF0aW9uIiwidHJhbnNpdGlvbkR1cmF0aW9uUHJvcCIsIlRyYW5zaXRpb25Qcm9wcyIsIm9uRW50ZXJpbmciLCJkaXNhYmxlU2Nyb2xsTG9jayIsImV4dGVybmFsUGFwZXJTbG90UHJvcHMiLCJwYXBlclJlZiIsImhhbmRsZVBhcGVyUmVmIiwidXNlRm9ya1JlZiIsImdldEFuY2hvck9mZnNldCIsInJlc29sdmVkQW5jaG9yRWwiLCJhbmNob3JSZWN0Iiwibm9kZVR5cGUiLCJvd25lckRvY3VtZW50IiwiY3VycmVudCIsImJvZHkiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3AiLCJsZWZ0IiwiZ2V0VHJhbnNmb3JtT3JpZ2luIiwiZWxlbVJlY3QiLCJnZXRQb3NpdGlvbmluZ1N0eWxlIiwiZWxlbWVudCIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiZWxlbVRyYW5zZm9ybU9yaWdpbiIsImFuY2hvck9mZnNldCIsImJvdHRvbSIsInJpZ2h0IiwiY29udGFpbmVyV2luZG93Iiwib3duZXJXaW5kb3ciLCJoZWlnaHRUaHJlc2hvbGQiLCJpbm5lckhlaWdodCIsIndpZHRoVGhyZXNob2xkIiwiaW5uZXJXaWR0aCIsImRpZmYiLCJyb3VuZCIsImlzUG9zaXRpb25lZCIsInNldElzUG9zaXRpb25lZCIsInNldFBvc2l0aW9uaW5nU3R5bGVzIiwicG9zaXRpb25pbmciLCJzdHlsZSIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidXBkYXRlUG9zaXRpb24iLCJoYW5kbGVSZXNpemUiLCJkZWJvdW5jZSIsImNsZWFyIiwibXVpU3VwcG9ydEF1dG8iLCJ1bmRlZmluZWQiLCJSb290U2xvdCIsIlBhcGVyU2xvdCIsInBhcGVyUHJvcHMiLCJ1c2VTbG90UHJvcHMiLCJlbGVtZW50VHlwZSIsImV4dGVybmFsU2xvdFByb3BzIiwib3BhY2l0eSIsImFkZGl0aW9uYWxQcm9wcyIsIl91c2VTbG90UHJvcHMiLCJleHRlcm5hbEZvcndhcmRlZFByb3BzIiwiYmFja2Ryb3AiLCJpbnZpc2libGUiLCJyb290U2xvdFByb3BzUHJvcCIsInJvb3RQcm9wcyIsImlzSG9zdENvbXBvbmVudCIsImFwcGVhciIsImluIiwiaXNBcHBlYXJpbmciLCJvbkV4aXRlZCIsInRpbWVvdXQiLCJmb3J3YXJkZWRSZWYiLCJkaXNhYmxlUG9ydGFsIiwibW91bnROb2RlIiwic2V0TW91bnROb2RlIiwiaGFuZGxlUmVmIiwiZ2V0Q29udGFpbmVyIiwiZG9jdW1lbnQiLCJuZXdQcm9wcyIsImNyZWF0ZVN0eWxlZENvbXBvbmVudCIsInVzZVRoZW1lUHJvcHMiLCJfc3BhbiIsIk5vdGNoZWRPdXRsaW5lUm9vdCIsInNob3VsZEZvcndhcmRQcm9wIiwicm9vdFNob3VsZEZvcndhcmRQcm9wIiwidGV4dEFsaWduIiwibWFyZ2luIiwicGFkZGluZyIsInBvaW50ZXJFdmVudHMiLCJib3JkZXJTdHlsZSIsImJvcmRlcldpZHRoIiwib3ZlcmZsb3ciLCJOb3RjaGVkT3V0bGluZUxlZ2VuZCIsImZsb2F0Iiwid2l0aExhYmVsIiwibGluZUhlaWdodCIsImR1cmF0aW9uIiwiZWFzaW5nIiwiZWFzZU91dCIsImRpc3BsYXkiLCJmb250U2l6ZSIsInZpc2liaWxpdHkiLCJ3aGl0ZVNwYWNlIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJub3RjaGVkIiwiZGVsYXkiLCJnZXRPdXRsaW5lZElucHV0VXRpbGl0eUNsYXNzIiwiaW5wdXRCYXNlQ2xhc3NlcyIsIk91dGxpbmVkSW5wdXRSb290IiwiSW5wdXRCYXNlIiwicHJvcCIsImJvcmRlckNvbG9yIiwibm90Y2hlZE91dGxpbmUiLCJjb21tb24iLCJvbkJhY2tncm91bmRDaGFubmVsIiwiZm9jdXNlZCIsIm1haW4iLCJlcnJvciIsImRpc2FibGVkIiwic3RhcnRBZG9ybm1lbnQiLCJlbmRBZG9ybm1lbnQiLCJtdWx0aWxpbmUiLCJzaXplIiwibGFiZWwiLCJPdXRsaW5lZElucHV0SW5wdXQiLCJXZWJraXRCb3hTaGFkb3ciLCJXZWJraXRUZXh0RmlsbENvbG9yIiwiY2FyZXRDb2xvciIsImdldENvbG9yU2NoZW1lU2VsZWN0b3IiLCJPdXRsaW5lZElucHV0IiwiX3JlZiIsIl9yZWYyIiwiX3Nsb3RzJGlucHV0IiwiX1JlYWN0JEZyYWdtZW50IiwiY29tcG9uZW50cyIsImZ1bGxXaWR0aCIsImlucHV0Q29tcG9uZW50IiwidHlwZSIsImNvbXBvc2VkQ2xhc3NlcyIsImlucHV0IiwibXVpRm9ybUNvbnRyb2wiLCJ1c2VGb3JtQ29udHJvbCIsImZjcyIsImZvcm1Db250cm9sU3RhdGUiLCJzdGF0ZXMiLCJmb3JtQ29udHJvbCIsImhpZGRlbkxhYmVsIiwiUm9vdCIsIklucHV0U2xvdCIsIklucHV0IiwicmVuZGVyU3VmZml4Iiwic3RhdGUiLCJyZXF1aXJlZCIsIkJvb2xlYW4iLCJmaWxsZWQiLCJtdWlOYW1lIiwiZ2V0TmF0aXZlU2VsZWN0VXRpbGl0eUNsYXNzZXMiLCJuYXRpdmVTZWxlY3RTZWxlY3RTdHlsZXMiLCJNb3pBcHBlYXJhbmNlIiwiV2Via2l0QXBwZWFyYW5jZSIsInVzZXJTZWxlY3QiLCJjdXJzb3IiLCJOYXRpdmVTZWxlY3RTZWxlY3QiLCJzZWxlY3QiLCJtdWx0aXBsZSIsIm5hdGl2ZVNlbGVjdEljb25TdHlsZXMiLCJhY3RpdmUiLCJ0cmFuc2Zvcm0iLCJOYXRpdmVTZWxlY3RJY29uIiwiaWNvbiIsImNhcGl0YWxpemUiLCJpY29uT3BlbiIsIkljb25Db21wb25lbnQiLCJpbnB1dFJlZiIsImdldFNlbGVjdFV0aWxpdHlDbGFzc2VzIiwiU2VsZWN0U2VsZWN0IiwidGV4dE92ZXJmbG93IiwiU2VsZWN0SWNvbiIsIlNlbGVjdE5hdGl2ZUlucHV0Iiwic2xvdFNob3VsZEZvcndhcmRQcm9wIiwibmF0aXZlSW5wdXQiLCJib3hTaXppbmciLCJhcmVFcXVhbFZhbHVlcyIsImEiLCJiIiwiU3RyaW5nIiwiaXNFbXB0eSIsInRyaW0iLCJfTWVudVByb3BzJHNsb3RQcm9wcyIsImFyaWFEZXNjcmliZWRieSIsImFyaWFMYWJlbCIsImF1dG9Gb2N1cyIsImF1dG9XaWR0aCIsImRlZmF1bHRPcGVuIiwiZGVmYXVsdFZhbHVlIiwiZGlzcGxheUVtcHR5IiwiaW5wdXRSZWZQcm9wIiwibGFiZWxJZCIsIk1lbnVQcm9wcyIsIm9uQmx1ciIsIm9uQ2hhbmdlIiwib25DbG9zZSIsIm9uRm9jdXMiLCJvbk9wZW4iLCJvcGVuUHJvcCIsInJlYWRPbmx5IiwicmVuZGVyVmFsdWUiLCJTZWxlY3REaXNwbGF5UHJvcHMiLCJ0YWJJbmRleCIsInRhYkluZGV4UHJvcCIsInZhbHVlIiwidmFsdWVQcm9wIiwic2V0VmFsdWVTdGF0ZSIsInVzZUNvbnRyb2xsZWQiLCJjb250cm9sbGVkIiwiZGVmYXVsdCIsIm9wZW5TdGF0ZSIsInNldE9wZW5TdGF0ZSIsImRpc3BsYXlSZWYiLCJkaXNwbGF5Tm9kZSIsInNldERpc3BsYXlOb2RlIiwiaXNPcGVuQ29udHJvbGxlZCIsIm1lbnVNaW5XaWR0aFN0YXRlIiwic2V0TWVudU1pbldpZHRoU3RhdGUiLCJoYW5kbGVEaXNwbGF5UmVmIiwibm9kZSIsImFuY2hvckVsZW1lbnQiLCJwYXJlbnROb2RlIiwiZm9jdXMiLCJjbGllbnRXaWR0aCIsImdldEVsZW1lbnRCeUlkIiwiaGFuZGxlciIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwidXBkYXRlIiwiZXZlbnQiLCJjaGlsZHJlbkFycmF5IiwidG9BcnJheSIsImhhbmRsZUl0ZW1DbGljayIsImNoaWxkIiwibmV3VmFsdWUiLCJjdXJyZW50VGFyZ2V0IiwiaGFzQXR0cmlidXRlIiwiQXJyYXkiLCJpc0FycmF5Iiwic2xpY2UiLCJpdGVtSW5kZXgiLCJpbmRleE9mIiwicHVzaCIsInNwbGljZSIsIm9uQ2xpY2siLCJuYXRpdmVFdmVudCIsImNsb25lZEV2ZW50IiwiY29uc3RydWN0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIndyaXRhYmxlIiwiZGlzcGxheVNpbmdsZSIsImRpc3BsYXlNdWx0aXBsZSIsImNvbXB1dGVEaXNwbGF5IiwiZm91bmRNYXRjaCIsIml0ZW1zIiwic2VsZWN0ZWQiLCJFcnJvciIsInNvbWUiLCJ2Iiwib25LZXlVcCIsImtleSIsInByZXZlbnREZWZhdWx0Iiwicm9sZSIsImxlbmd0aCIsInJlZHVjZSIsIm91dHB1dCIsImluZGV4IiwibWVudU1pbldpZHRoIiwiYnV0dG9uSWQiLCJpZCIsImxpc3Rib3hJZCIsInVzZUlkIiwiZmlsdGVyIiwib25LZXlEb3duIiwib25Nb3VzZURvd24iLCJidXR0b24iLCJmaW5kIiwiY2hpbGRJdGVtIiwidGFyZ2V0IiwiTWVudSIsIk1lbnVMaXN0UHJvcHMiLCJkaXNhYmxlTGlzdFdyYXAiLCJkIiwic3R5bGVkUm9vdENvbmZpZyIsIlN0eWxlZElucHV0IiwiU3R5bGVkT3V0bGluZWRJbnB1dCIsIlN0eWxlZEZpbGxlZElucHV0IiwiRmlsbGVkSW5wdXQiLCJTZWxlY3QiLCJjbGFzc2VzUHJvcCIsIkFycm93RHJvcERvd24iLCJpbnB1dFByb3BzIiwibmF0aXZlIiwidmFyaWFudFByb3AiLCJyZXN0T2ZDbGFzc2VzIiwiSW5wdXRDb21wb25lbnQiLCJzdGFuZGFyZCIsIm91dGxpbmVkIiwiaW5wdXRDb21wb25lbnRSZWYiLCJkZWVwbWVyZ2UiLCJnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3MiLCJ2YXJpYW50Q29tcG9uZW50IiwiVGV4dEZpZWxkUm9vdCIsIkZvcm1Db250cm9sIiwiYXV0b0NvbXBsZXRlIiwiRm9ybUhlbHBlclRleHRQcm9wcyIsImhlbHBlclRleHQiLCJpZE92ZXJyaWRlIiwiSW5wdXRMYWJlbFByb3BzIiwiSW5wdXRQcm9wcyIsIm1heFJvd3MiLCJtaW5Sb3dzIiwicGxhY2Vob2xkZXIiLCJyb3dzIiwiU2VsZWN0UHJvcHMiLCJJbnB1dE1vcmUiLCJzaHJpbmsiLCJoZWxwZXJUZXh0SWQiLCJpbnB1dExhYmVsSWQiLCJJbnB1dEVsZW1lbnQiLCJJbnB1dExhYmVsIiwiaHRtbEZvciIsIkZvcm1IZWxwZXJUZXh0IiwiZ2V0U3R5bGVWYWx1ZSIsInBhcnNlSW50IiwiaXNDb250cm9sbGVkIiwiaGVpZ2h0UmVmIiwic2hhZG93UmVmIiwiY2FsY3VsYXRlVGV4dGFyZWFTdHlsZXMiLCJjb21wdXRlZFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsIm91dGVySGVpZ2h0U3R5bGUiLCJvdmVyZmxvd2luZyIsImlucHV0U2hhbGxvdyIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nVG9wIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsInNjcm9sbEhlaWdodCIsInNpbmdsZVJvd0hlaWdodCIsIm91dGVySGVpZ2h0IiwibWF4IiwiTnVtYmVyIiwibWluIiwiYWJzIiwic3luY0hlaWdodCIsInRleHRhcmVhU3R5bGVzIiwib2JqIiwia2V5cyIsImRlYm91bmNlSGFuZGxlUmVzaXplIiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsInJBRiIsImRpc2Nvbm5lY3QiLCJnZXRUb29sYmFyVXRpbGl0eUNsYXNzIiwiVG9vbGJhclJvb3QiLCJkaXNhYmxlR3V0dGVycyIsImd1dHRlcnMiLCJhbGlnbkl0ZW1zIiwic3BhY2luZyIsImJyZWFrcG9pbnRzIiwidXAiLCJtaXhpbnMiLCJ0b29sYmFyIiwiZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyIsIlR5cG9ncmFwaHlSb290IiwiYWxpZ24iLCJub1dyYXAiLCJndXR0ZXJCb3R0b20iLCJwYXJhZ3JhcGgiLCJmb250IiwidHlwb2dyYXBoeSIsIm1hcmdpbkJvdHRvbSIsImRlZmF1bHRWYXJpYW50TWFwcGluZyIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsInN1YnRpdGxlMSIsInN1YnRpdGxlMiIsImJvZHkxIiwiYm9keTIiLCJpbmhlcml0IiwiY29sb3JUcmFuc2Zvcm1hdGlvbnMiLCJ0ZXh0UHJpbWFyeSIsInNlY29uZGFyeSIsInRleHRTZWNvbmRhcnkiLCJ0aGVtZVByb3BzIiwidHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyIsImV4dGVuZFN4UHJvcCIsInZhcmlhbnRNYXBwaW5nIiwiQ29tcG9uZW50IiwiY2FuZGlkYXRlc1NlbGVjdG9yIiwiZGVmYXVsdEdldFRhYmJhYmxlIiwicmVndWxhclRhYk5vZGVzIiwib3JkZXJlZFRhYk5vZGVzIiwiZnJvbSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwiaSIsIm5vZGVUYWJJbmRleCIsInRhYmluZGV4QXR0ciIsImdldEF0dHJpYnV0ZSIsImlzTmFOIiwiY29udGVudEVkaXRhYmxlIiwibm9kZU5hbWUiLCJnZXRUYWJJbmRleCIsInRhZ05hbWUiLCJnZXRSYWRpbyIsInNlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsInJvdmluZyIsImlzTm9uVGFiYmFibGVSYWRpbyIsImlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUiLCJkb2N1bWVudE9yZGVyIiwic29ydCIsImNvbmNhdCIsImRlZmF1bHRJc0VuYWJsZWQiLCJkaXNhYmxlQXV0b0ZvY3VzIiwiZGlzYWJsZUVuZm9yY2VGb2N1cyIsImRpc2FibGVSZXN0b3JlRm9jdXMiLCJnZXRUYWJiYWJsZSIsImlzRW5hYmxlZCIsImlnbm9yZU5leHRFbmZvcmNlRm9jdXMiLCJzZW50aW5lbFN0YXJ0Iiwic2VudGluZWxFbmQiLCJub2RlVG9SZXN0b3JlIiwicmVhY3RGb2N1c0V2ZW50VGFyZ2V0IiwiYWN0aXZhdGVkIiwicm9vdFJlZiIsImxhc3RLZXlkb3duIiwiZG9jIiwiY29udGFpbnMiLCJhY3RpdmVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwibG9vcEZvY3VzIiwic2hpZnRLZXkiLCJjb250YWluIiwicm9vdEVsZW1lbnQiLCJoYXNGb2N1cyIsInRhYmJhYmxlIiwiX2xhc3RLZXlkb3duJGN1cnJlbnQiLCJfbGFzdEtleWRvd24kY3VycmVudDIiLCJpc1NoaWZ0VGFiIiwiZm9jdXNOZXh0IiwiZm9jdXNQcmV2aW91cyIsImludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiaGFuZGxlRm9jdXNTZW50aW5lbCIsInJlbGF0ZWRUYXJnZXQiLCJjaGlsZHJlblByb3BzSGFuZGxlciIsIlRoZW1lUHJvdmlkZXIiLCJ0aGVtZUlucHV0Iiwic2NvcGVkVGhlbWUiLCJ0aGVtZUlkIiwiYmxhY2siLCJ3aGl0ZSIsIkExMDAiLCJBMjAwIiwiQTQwMCIsIkE3MDAiLCJsaWdodCIsImhvdmVyIiwiaG92ZXJPcGFjaXR5Iiwic2VsZWN0ZWRPcGFjaXR5IiwiZGlzYWJsZWRCYWNrZ3JvdW5kIiwiZGlzYWJsZWRPcGFjaXR5IiwiZm9jdXNPcGFjaXR5IiwiYWN0aXZhdGVkT3BhY2l0eSIsImRhcmsiLCJhZGRMaWdodE9yRGFyayIsImludGVudCIsImRpcmVjdGlvbiIsInNoYWRlIiwidG9uYWxPZmZzZXQiLCJ0b25hbE9mZnNldExpZ2h0IiwidG9uYWxPZmZzZXREYXJrIiwiaGFzT3duUHJvcGVydHkiLCJjYXNlQWxsQ2FwcyIsInRleHRUcmFuc2Zvcm0iLCJkZWZhdWx0Rm9udEZhbWlseSIsImNyZWF0ZVR5cG9ncmFwaHkiLCJmb250RmFtaWx5IiwiZm9udFdlaWdodExpZ2h0IiwiZm9udFdlaWdodFJlZ3VsYXIiLCJmb250V2VpZ2h0TWVkaXVtIiwiZm9udFdlaWdodEJvbGQiLCJodG1sRm9udFNpemUiLCJhbGxWYXJpYW50cyIsInB4VG9SZW0iLCJweFRvUmVtMiIsImNvZWYiLCJidWlsZFZhcmlhbnQiLCJmb250V2VpZ2h0IiwibGV0dGVyU3BhY2luZyIsImNhc2luZyIsInZhcmlhbnRzIiwiY2FwdGlvbiIsIm92ZXJsaW5lIiwiY2xvbmUiLCJjcmVhdGVTaGFkb3ciLCJweCIsIm1vYmlsZVN0ZXBwZXIiLCJmYWIiLCJzcGVlZERpYWwiLCJhcHBCYXIiLCJkcmF3ZXIiLCJtb2RhbCIsInNuYWNrYmFyIiwidG9vbHRpcCIsIm9wdGlvbnMiLCJhcmdzIiwibWl4aW5zSW5wdXQiLCJwYWxldHRlSW5wdXQiLCJ0cmFuc2l0aW9uc0lucHV0IiwidHlwb2dyYXBoeUlucHV0IiwiY29udHJhc3RUaHJlc2hvbGQiLCJnZXREZWZhdWx0UHJpbWFyeSIsImdldERlZmF1bHRTZWNvbmRhcnkiLCJnZXREZWZhdWx0RXJyb3IiLCJpbmZvIiwiZ2V0RGVmYXVsdEluZm8iLCJzdWNjZXNzIiwiZ2V0RGVmYXVsdFN1Y2Nlc3MiLCJ3YXJuaW5nIiwiZ2V0RGVmYXVsdFdhcm5pbmciLCJnZXRDb250cmFzdFRleHQiLCJhdWdtZW50Q29sb3IiLCJtYWluU2hhZGUiLCJsaWdodFNoYWRlIiwiZGFya1NoYWRlIiwiSlNPTiIsInN0cmluZ2lmeSIsImNvbnRyYXN0VGV4dCIsIm1vZGVzIiwiZ3JleSIsImNyZWF0ZVBhbGV0dGUiLCJzeXN0ZW1UaGVtZSIsIm11aVRoZW1lIiwiY3JlYXRlVHJhbnNpdGlvbnMiLCJ6SW5kZXgiLCJhY2MiLCJhcmd1bWVudCIsInVuc3RhYmxlX3N4Q29uZmlnIiwiZGVmYXVsdFN4Q29uZmlnIiwidW5zdGFibGVfc3giLCJzdHlsZUZ1bmN0aW9uU3giLCJzeCIsInRoaXMiLCJlYXNlSW5PdXQiLCJlYXNlSW4iLCJzaGFycCIsInNob3J0ZXN0Iiwic2hvcnRlciIsInNob3J0IiwiY29tcGxleCIsImVudGVyaW5nU2NyZWVuIiwibGVhdmluZ1NjcmVlbiIsImZvcm1hdE1zIiwibWlsbGlzZWNvbmRzIiwiZ2V0QXV0b0hlaWdodER1cmF0aW9uIiwiY29uc3RhbnQiLCJpbnB1dFRyYW5zaXRpb25zIiwibWVyZ2VkRWFzaW5nIiwibWVyZ2VkRHVyYXRpb24iLCJkdXJhdGlvbk9wdGlvbiIsImVhc2luZ09wdGlvbiIsImFuaW1hdGVkUHJvcCIsImRlZmF1bHRUaGVtZSIsInVzZVRoZW1lIiwicmVmbG93Iiwic2Nyb2xsVG9wIiwiZ2V0VHJhbnNpdGlvblByb3BzIiwiX3N0eWxlJHRyYW5zaXRpb25EdXJhIiwiX3N0eWxlJHRyYW5zaXRpb25UaW1pIiwidHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uIiwidHJhbnNpdGlvbkRlbGF5IiwiZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyIsIlN2Z0ljb25Sb290IiwiX3RoZW1lJHRyYW5zaXRpb25zIiwiX3RoZW1lJHRyYW5zaXRpb25zJGNyIiwiX3RoZW1lJHRyYW5zaXRpb25zMiIsIl90aGVtZSR0eXBvZ3JhcGh5IiwiX3RoZW1lJHR5cG9ncmFwaHkkcHhUIiwiX3RoZW1lJHR5cG9ncmFwaHkyIiwiX3RoZW1lJHR5cG9ncmFwaHkyJHB4IiwiX3RoZW1lJHR5cG9ncmFwaHkzIiwiX3RoZW1lJHR5cG9ncmFwaHkzJHB4IiwiX3BhbGV0dGUkb3duZXJTdGF0ZSRjIiwiX3BhbGV0dGUiLCJfcGFsZXR0ZTIiLCJfcGFsZXR0ZTMiLCJmaWxsIiwiaGFzU3ZnQXNDaGlsZCIsImZsZXhTaHJpbmsiLCJjYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsIlN2Z0ljb24iLCJodG1sQ29sb3IiLCJpbmhlcml0Vmlld0JveCIsInRpdGxlQWNjZXNzIiwidmlld0JveCIsImluc3RhbmNlRm9udFNpemUiLCJtb3JlIiwiZm9jdXNhYmxlIiwiY3JlYXRlU3ZnSWNvbiIsInBhdGgiLCJkaXNwbGF5TmFtZSIsInVuc3RhYmxlX0NsYXNzTmFtZUdlbmVyYXRvciIsImNvbmZpZ3VyZSIsImdlbmVyYXRvciIsIkNsYXNzTmFtZUdlbmVyYXRvciIsInVzZVNsb3QiLCJwYXJhbWV0ZXJzIiwiaW5pdGlhbEVsZW1lbnRUeXBlIiwiZ2V0U2xvdE93bmVyU3RhdGUiLCJpbnRlcm5hbEZvcndhcmRlZFByb3BzIiwidXNlU2xvdFByb3BzUGFyYW1zIiwicm9vdENvbXBvbmVudCIsInJlc29sdmVkQ29tcG9uZW50c1Byb3BzIiwiX21lcmdlU2xvdFByb3BzIiwic2xvdENvbXBvbmVudCIsImludGVybmFsUmVmIiwibWVyZ2VkUHJvcHMiLCJzbG90T3duZXJTdGF0ZSIsImZpbmFsT3duZXJTdGF0ZSIsIkxlYWZDb21wb25lbnQiLCJwcm9wTmFtZSJdLCJzb3VyY2VSb290IjoiIn0=