/*! For license information please see 857.4ee32a24.js.LICENSE.txt */ "use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[857],{100:(e,t,r)=>{r.d(t,{A:()=>G});var n=r(8168),o=r(8587),a=r(6540),i=r(4164),l=r(3272),s=r(2599),c=(r(4363),r(5659)),u=r(4661),d=r(6248),p=r(8466),f=r(6165),m=r(4911),h=r(2891),A=r(1848),g=r(6852),v=r(1159),b=r(8413),y=r(1609);function x(e){return(0,y.A)("MuiSelect",e)}const S=(0,b.A)("MuiSelect",["root","select","multiple","filled","outlined","standard","disabled","focused","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput","error"]);var w,k=r(4848);const M=["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"],R=(0,A.Ay)("div",{name:"MuiSelect",slot:"Select",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[{[`&.${S.select}`]:t.select},{[`&.${S.select}`]:t[r.variant]},{[`&.${S.error}`]:t.error},{[`&.${S.multiple}`]:t.multiple}]}})(m.Ku,{[`&.${S.select}`]:{height:"auto",minHeight:"1.4375em",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"}}),C=(0,A.Ay)("svg",{name:"MuiSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.icon,r.variant&&t[`icon${(0,p.A)(r.variant)}`],r.open&&t.iconOpen]}})(m.XV),I=(0,A.Ay)("input",{shouldForwardProp:e=>(0,A._n)(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 P(e,t){return"object"==typeof t&&null!==t?e===t:String(e)===String(t)}function O(e){return null==e||"string"==typeof e&&!e.trim()}const F=a.forwardRef((function(e,t){var r;const{"aria-describedby":l,"aria-label":m,autoFocus:A,autoWidth:b,children:y,className:S,defaultOpen:F,defaultValue:$,disabled:W,displayEmpty:T,error:z=!1,IconComponent:j,inputRef:N,labelId:B,MenuProps:E={},multiple:_,name:D,onBlur:V,onChange:L,onClose:H,onFocus:q,onOpen:G,open:K,readOnly:U,renderValue:J,SelectDisplayProps:X={},tabIndex:Q,value:Y,variant:Z="standard"}=e,ee=(0,o.A)(e,M),[te,re]=(0,v.A)({controlled:Y,default:$,name:"Select"}),[ne,oe]=(0,v.A)({controlled:K,default:F,name:"Select"}),ae=a.useRef(null),ie=a.useRef(null),[le,se]=a.useState(null),{current:ce}=a.useRef(null!=K),[ue,de]=a.useState(),pe=(0,g.A)(t,N),fe=a.useCallback((e=>{ie.current=e,e&&se(e)}),[]),me=null==le?void 0:le.parentNode;a.useImperativeHandle(pe,(()=>({focus:()=>{ie.current.focus()},node:ae.current,value:te})),[te]),a.useEffect((()=>{F&&ne&&le&&!ce&&(de(b?null:me.clientWidth),ie.current.focus())}),[le,b]),a.useEffect((()=>{A&&ie.current.focus()}),[A]),a.useEffect((()=>{if(!B)return;const e=(0,d.A)(ie.current).getElementById(B);if(e){const t=()=>{getSelection().isCollapsed&&ie.current.focus()};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}}),[B]);const he=(e,t)=>{e?G&&G(t):H&&H(t),ce||(de(b?null:me.clientWidth),oe(e))},Ae=a.Children.toArray(y),ge=e=>t=>{let r;if(t.currentTarget.hasAttribute("tabindex")){if(_){r=Array.isArray(te)?te.slice():[];const t=te.indexOf(e.props.value);-1===t?r.push(e.props.value):r.splice(t,1)}else r=e.props.value;if(e.props.onClick&&e.props.onClick(t),te!==r&&(re(r),L)){const n=t.nativeEvent||t,o=new n.constructor(n.type,n);Object.defineProperty(o,"target",{writable:!0,value:{value:r,name:D}}),L(o,e)}_||he(!1,t)}},ve=null!==le&≠let be,ye;delete ee["aria-invalid"];const xe=[];let Se=!1,we=!1;((0,h.lq)({value:te})||T)&&(J?be=J(te):Se=!0);const ke=Ae.map((e=>{if(!a.isValidElement(e))return null;let t;if(_){if(!Array.isArray(te))throw new Error((0,s.A)(2));t=te.some((t=>P(t,e.props.value))),t&&Se&&xe.push(e.props.children)}else t=P(te,e.props.value),t&&Se&&(ye=e.props.children);return t&&(we=!0),a.cloneElement(e,{"aria-selected":t?"true":"false",onClick:ge(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})}));Se&&(be=_?0===xe.length?null:xe.reduce(((e,t,r)=>(e.push(t),r{const{classes:t,variant:r,disabled:n,multiple:o,open:a,error:i}=e,l={select:["select",r,n&&"disabled",o&&"multiple",i&&"error"],icon:["icon",`icon${(0,p.A)(r)}`,a&&"iconOpen",n&&"disabled"],nativeInput:["nativeInput"]};return(0,c.A)(l,x,t)})(Ie),Oe=(0,n.A)({},E.PaperProps,null==(r=E.slotProps)?void 0:r.paper),Fe=(0,u.A)();return(0,k.jsxs)(a.Fragment,{children:[(0,k.jsx)(R,(0,n.A)({ref:fe,tabIndex:Me,role:"combobox","aria-controls":Fe,"aria-disabled":W?"true":void 0,"aria-expanded":ve?"true":"false","aria-haspopup":"listbox","aria-label":m,"aria-labelledby":[B,Ce].filter(Boolean).join(" ")||void 0,"aria-describedby":l,onKeyDown:e=>{U||-1!==[" ","ArrowUp","ArrowDown","Enter"].indexOf(e.key)&&(e.preventDefault(),he(!0,e))},onMouseDown:W||U?null:e=>{0===e.button&&(e.preventDefault(),ie.current.focus(),he(!0,e))},onBlur:e=>{!ve&&V&&(Object.defineProperty(e,"target",{writable:!0,value:{value:te,name:D}}),V(e))},onFocus:q},X,{ownerState:Ie,className:(0,i.A)(X.className,Pe.select,S),id:Ce,children:O(be)?w||(w=(0,k.jsx)("span",{className:"notranslate",children:"​"})):be})),(0,k.jsx)(I,(0,n.A)({"aria-invalid":z,value:Array.isArray(te)?te.join(","):te,name:D,ref:ae,"aria-hidden":!0,onChange:e=>{const t=Ae.find((t=>t.props.value===e.target.value));void 0!==t&&(re(t.props.value),L&&L(e,t))},tabIndex:-1,disabled:W,className:Pe.nativeInput,autoFocus:A,ownerState:Ie},ee)),(0,k.jsx)(C,{as:j,className:Pe.icon,ownerState:Ie}),(0,k.jsx)(f.A,(0,n.A)({id:`menu-${D||""}`,anchorEl:me,open:ve,onClose:e=>{he(!1,e)},anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"}},E,{MenuListProps:(0,n.A)({"aria-labelledby":B,role:"listbox","aria-multiselectable":_?"true":void 0,disableListWrap:!0,id:Fe},E.MenuListProps),slotProps:(0,n.A)({},E.slotProps,{paper:(0,n.A)({},Oe,{style:(0,n.A)({minWidth:Re},null!=Oe?Oe.style:null)})}),children:ke}))]})}));var $=r(8086),W=r(9716);const T=(0,r(5003).A)((0,k.jsx)("path",{d:"M7 10l5 5 5-5z"}),"ArrowDropDown");var z=r(1881),j=r(2335),N=r(6757),B=r(3541);const E=["autoWidth","children","classes","className","defaultOpen","displayEmpty","IconComponent","id","input","inputProps","label","labelId","MenuProps","multiple","native","onClose","onOpen","open","renderValue","SelectDisplayProps","variant"],_=["root"],D={name:"MuiSelect",overridesResolver:(e,t)=>t.root,shouldForwardProp:e=>(0,A.ep)(e)&&"variant"!==e,slot:"Root"},V=(0,A.Ay)(z.A,D)(""),L=(0,A.Ay)(N.A,D)(""),H=(0,A.Ay)(j.A,D)(""),q=a.forwardRef((function(e,t){const r=(0,B.A)({name:"MuiSelect",props:e}),{autoWidth:s=!1,children:c,classes:u={},className:d,defaultOpen:p=!1,displayEmpty:f=!1,IconComponent:h=T,id:A,input:v,inputProps:b,label:y,labelId:x,MenuProps:S,multiple:w=!1,native:M=!1,onClose:R,onOpen:C,open:I,renderValue:P,SelectDisplayProps:O,variant:z="outlined"}=r,j=(0,o.A)(r,E),N=M?m.Ay:F,D=(0,W.A)(),q=(0,$.A)({props:r,muiFormControl:D,states:["variant","error"]}),G=q.variant||z,K=(0,n.A)({},r,{variant:G,classes:u}),U=(e=>{const{classes:t}=e;return t})(K),J=(0,o.A)(U,_),X=v||{standard:(0,k.jsx)(V,{ownerState:K}),outlined:(0,k.jsx)(L,{label:y,ownerState:K}),filled:(0,k.jsx)(H,{ownerState:K})}[G],Q=(0,g.A)(t,X.ref);return(0,k.jsx)(a.Fragment,{children:a.cloneElement(X,(0,n.A)({inputComponent:N,inputProps:(0,n.A)({children:c,error:q.error,IconComponent:h,variant:G,type:void 0,multiple:w},M?{id:A}:{autoWidth:s,defaultOpen:p,displayEmpty:f,labelId:x,MenuProps:S,onClose:R,onOpen:C,open:I,renderValue:P,SelectDisplayProps:(0,n.A)({id:A},O)},b,{classes:b?(0,l.A)(J,b.classes):J},v?v.props.inputProps:{})},w&&M&&"outlined"===G?{notched:!0}:{},{ref:Q,className:(0,i.A)(X.props.className,d,U.root)},!v&&{variant:G},j))})}));q.muiName="Select";const G=q},9890:(e,t,r)=>{r.d(t,{A:()=>M});var n=r(8168),o=r(8587),a=r(6540),i=r(4164),l=r(5659),s=r(4661),c=r(1848),u=r(3541),d=r(1881),p=r(2335),f=r(6757),m=r(4433),h=r(779),A=r(6347),g=r(100),v=r(8413),b=r(1609);function y(e){return(0,b.A)("MuiTextField",e)}(0,v.A)("MuiTextField",["root"]);var x=r(4848);const S=["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"],w={standard:d.A,filled:p.A,outlined:f.A},k=(0,c.Ay)(h.A,{name:"MuiTextField",slot:"Root",overridesResolver:(e,t)=>t.root})({}),M=a.forwardRef((function(e,t){const r=(0,u.A)({props:e,name:"MuiTextField"}),{autoComplete:a,autoFocus:c=!1,children:d,className:p,color:f="primary",defaultValue:h,disabled:v=!1,error:b=!1,FormHelperTextProps:M,fullWidth:R=!1,helperText:C,id:I,InputLabelProps:P,inputProps:O,InputProps:F,inputRef:$,label:W,maxRows:T,minRows:z,multiline:j=!1,name:N,onBlur:B,onChange:E,onFocus:_,placeholder:D,required:V=!1,rows:L,select:H=!1,SelectProps:q,type:G,value:K,variant:U="outlined"}=r,J=(0,o.A)(r,S),X=(0,n.A)({},r,{autoFocus:c,color:f,disabled:v,error:b,fullWidth:R,multiline:j,required:V,select:H,variant:U}),Q=(e=>{const{classes:t}=e;return(0,l.A)({root:["root"]},y,t)})(X),Y={};"outlined"===U&&(P&&void 0!==P.shrink&&(Y.notched=P.shrink),Y.label=W),H&&(q&&q.native||(Y.id=void 0),Y["aria-describedby"]=void 0);const Z=(0,s.A)(I),ee=C&&Z?`${Z}-helper-text`:void 0,te=W&&Z?`${Z}-label`:void 0,re=w[U],ne=(0,x.jsx)(re,(0,n.A)({"aria-describedby":ee,autoComplete:a,autoFocus:c,defaultValue:h,fullWidth:R,multiline:j,name:N,rows:L,maxRows:T,minRows:z,type:G,value:K,id:Z,inputRef:$,onBlur:B,onChange:E,onFocus:_,placeholder:D,inputProps:O},Y,F));return(0,x.jsxs)(k,(0,n.A)({className:(0,i.A)(Q.root,p),disabled:v,error:b,fullWidth:R,ref:t,required:V,color:f,variant:U,ownerState:X},J,{children:[null!=W&&""!==W&&(0,x.jsx)(m.A,(0,n.A)({htmlFor:Z,id:te},P,{children:W})),H?(0,x.jsx)(g.A,(0,n.A)({"aria-describedby":ee,id:Z,labelId:te,value:K,input:ne},q,{children:d})):ne,C&&(0,x.jsx)(A.A,(0,n.A)({id:ee},M,{children:C}))]}))}))},8532:(e,t,r)=>{r.d(t,{A:()=>A});var n=r(8587),o=r(8168),a=r(6540),i=r(4164),l=r(5659),s=r(3541),c=r(1848),u=r(8413),d=r(1609);function p(e){return(0,d.A)("MuiToolbar",e)}(0,u.A)("MuiToolbar",["root","gutters","regular","dense"]);var f=r(4848);const m=["className","component","disableGutters","variant"],h=(0,c.Ay)("div",{name:"MuiToolbar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,!r.disableGutters&&t.gutters,t[r.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)),A=a.forwardRef((function(e,t){const r=(0,s.A)({props:e,name:"MuiToolbar"}),{className:a,component:c="div",disableGutters:u=!1,variant:d="regular"}=r,A=(0,n.A)(r,m),g=(0,o.A)({},r,{component:c,disableGutters:u,variant:d}),v=(e=>{const{classes:t,disableGutters:r,variant:n}=e,o={root:["root",!r&&"gutters",n]};return(0,l.A)(o,p,t)})(g);return(0,f.jsx)(h,(0,o.A)({as:c,className:(0,i.A)(v.root,a),ref:t,ownerState:g},A))}))},4073:(e,t,r)=>{r.d(t,{A:()=>y});var n=r(8587),o=r(8168),a=r(6540),i=r(4164),l=r(9599),s=r(5659),c=r(1848),u=r(3541),d=r(8466),p=r(8413),f=r(1609);function m(e){return(0,f.A)("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 h=r(4848);const A=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],g=(0,c.Ay)("span",{name:"MuiTypography",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,r.variant&&t[r.variant],"inherit"!==r.align&&t[`align${(0,d.A)(r.align)}`],r.noWrap&&t.noWrap,r.gutterBottom&&t.gutterBottom,r.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}))),v={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},b={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},y=a.forwardRef((function(e,t){const r=(0,u.A)({props:e,name:"MuiTypography"}),a=(e=>b[e]||e)(r.color),c=(0,l.A)((0,o.A)({},r,{color:a})),{align:p="inherit",className:f,component:y,gutterBottom:x=!1,noWrap:S=!1,paragraph:w=!1,variant:k="body1",variantMapping:M=v}=c,R=(0,n.A)(c,A),C=(0,o.A)({},c,{align:p,color:a,className:f,component:y,gutterBottom:x,noWrap:S,paragraph:w,variant:k,variantMapping:M}),I=y||(w?"p":M[k]||v[k])||"span",P=(e=>{const{align:t,gutterBottom:r,noWrap:n,paragraph:o,variant:a,classes:i}=e,l={root:["root",a,"inherit"!==e.align&&`align${(0,d.A)(t)}`,r&&"gutterBottom",n&&"noWrap",o&&"paragraph"]};return(0,s.A)(l,m,i)})(C);return(0,h.jsx)(g,(0,o.A)({as:I,ref:t,ownerState:C,className:(0,i.A)(P.root,f)},R))}))},6147:(e,t,r)=>{r.d(t,{A:()=>a}),r(6540);var n=r(5003),o=r(4848);const a=(0,n.A)((0,o.jsx)("path",{d:"M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"}),"MoreHoriz")},2363:(e,t,r)=>{r.d(t,{A:()=>c});var n=r(8168),o=r(8587),a=(r(6540),r(835)),i=r(8312),l=r(4848);const s=["theme"];function c(e){let{theme:t}=e,r=(0,o.A)(e,s);const c=t[i.A];return(0,l.jsx)(a.A,(0,n.A)({},r,{themeId:c?i.A:void 0,theme:c||t}))}},3478:(e,t,r)=>{r.d(t,{A:()=>N});var n=r(8168),o=r(8587),a=r(2599),i=r(3272),l=r(3221),s=r(4188),c=r(3571),u=r(4279);const d={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"},m={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"},h={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"},A={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"},g={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"},v={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"},b=["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:d.white,default:d.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:d.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:d.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 S(e,t,r,n){const o=n.light||n,a=n.dark||1.5*n;e[t]||(e.hasOwnProperty(r)?e[t]=e[r]:"light"===t?e.light=(0,u.a)(e.main,o):"dark"===t&&(e.dark=(0,u.e$)(e.main,a)))}const w=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"],k={textTransform:"uppercase"},M='"Roboto", "Helvetica", "Arial", sans-serif';function R(e,t){const r="function"==typeof t?t(e):t,{fontFamily:a=M,fontSize:l=14,fontWeightLight:s=300,fontWeightRegular:c=400,fontWeightMedium:u=500,fontWeightBold:d=700,htmlFontSize:p=16,allVariants:f,pxToRem:m}=r,h=(0,o.A)(r,w),A=l/14,g=m||(e=>e/p*A+"rem"),v=(e,t,r,o,i)=>{return(0,n.A)({fontFamily:a,fontWeight:e,fontSize:g(t),lineHeight:r},a===M?{letterSpacing:(l=o/t,Math.round(1e5*l)/1e5+"em")}:{},i,f);var l},b={h1:v(s,96,1.167,-1.5),h2:v(s,60,1.2,-.5),h3:v(c,48,1.167,0),h4:v(c,34,1.235,.25),h5:v(c,24,1.334,0),h6:v(u,20,1.6,.15),subtitle1:v(c,16,1.75,.15),subtitle2:v(u,14,1.57,.1),body1:v(c,16,1.5,.15),body2:v(c,14,1.43,.15),button:v(u,14,1.75,.4,k),caption:v(c,12,1.66,.4),overline:v(c,12,2.66,1,k),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return(0,i.A)((0,n.A)({htmlFontSize:p,pxToRem:g,fontFamily:a,fontSize:l,fontWeightLight:s,fontWeightRegular:c,fontWeightMedium:u,fontWeightBold:d},b),h,{clone:!1})}function C(...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 I=["none",C(0,2,1,-1,0,1,1,0,0,1,3,0),C(0,3,1,-2,0,2,2,0,0,1,5,0),C(0,3,3,-2,0,3,4,0,0,1,8,0),C(0,2,4,-1,0,4,5,0,0,1,10,0),C(0,3,5,-1,0,5,8,0,0,1,14,0),C(0,3,5,-1,0,6,10,0,0,1,18,0),C(0,4,5,-2,0,7,10,1,0,2,16,1),C(0,5,5,-3,0,8,10,1,0,3,14,2),C(0,5,6,-3,0,9,12,1,0,3,16,2),C(0,6,6,-3,0,10,14,1,0,4,18,3),C(0,6,7,-4,0,11,15,1,0,4,20,3),C(0,7,8,-4,0,12,17,2,0,5,22,4),C(0,7,8,-4,0,13,19,2,0,5,24,4),C(0,7,9,-4,0,14,21,2,0,5,26,4),C(0,8,9,-5,0,15,22,2,0,6,28,5),C(0,8,10,-5,0,16,24,2,0,6,30,5),C(0,8,11,-5,0,17,26,2,0,6,32,5),C(0,9,11,-5,0,18,28,2,0,7,34,6),C(0,9,12,-6,0,19,29,2,0,7,36,6),C(0,10,13,-6,0,20,31,3,0,8,38,7),C(0,10,13,-6,0,21,33,3,0,8,40,7),C(0,10,14,-6,0,22,35,3,0,8,42,7),C(0,11,14,-7,0,23,36,3,0,9,44,8),C(0,11,15,-7,0,24,38,3,0,9,46,8)],P=["duration","easing","delay"],O={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)"},F={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function $(e){return`${Math.round(e)}ms`}function W(e){if(!e)return 0;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}function T(e){const t=(0,n.A)({},O,e.easing),r=(0,n.A)({},F,e.duration);return(0,n.A)({getAutoHeightDuration:W,create:(e=["all"],n={})=>{const{duration:a=r.standard,easing:i=t.easeInOut,delay:l=0}=n;return(0,o.A)(n,P),(Array.isArray(e)?e:[e]).map((e=>`${e} ${"string"==typeof a?a:$(a)} ${i} ${"string"==typeof l?l:$(l)}`)).join(",")}},e,{easing:t,duration:r})}const z={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},j=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];const N=function(e={},...t){const{mixins:r={},palette:w={},transitions:k={},typography:M={}}=e,C=(0,o.A)(e,j);if(e.vars)throw new Error((0,a.A)(18));const P=function(e){const{mode:t="light",contrastThreshold:r=3,tonalOffset:l=.2}=e,s=(0,o.A)(e,b),c=e.primary||function(e="light"){return"dark"===e?{main:A[200],light:A[50],dark:A[400]}:{main:A[700],light:A[400],dark:A[800]}}(t),w=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),k=e.error||function(e="light"){return"dark"===e?{main:m[500],light:m[300],dark:m[700]}:{main:m[700],light:m[400],dark:m[800]}}(t),M=e.info||function(e="light"){return"dark"===e?{main:g[400],light:g[300],dark:g[700]}:{main:g[700],light:g[500],dark:g[900]}}(t),R=e.success||function(e="light"){return"dark"===e?{main:v[400],light:v[300],dark:v[700]}:{main:v[800],light:v[500],dark:v[900]}}(t),C=e.warning||function(e="light"){return"dark"===e?{main:h[400],light:h[300],dark:h[700]}:{main:"#ed6c02",light:h[500],dark:h[900]}}(t);function I(e){return(0,u.eM)(e,x.text.primary)>=r?x.text.primary:y.text.primary}const P=({color:e,name:t,mainShade:r=500,lightShade:o=300,darkShade:i=700})=>{if(!(e=(0,n.A)({},e)).main&&e[r]&&(e.main=e[r]),!e.hasOwnProperty("main"))throw new Error((0,a.A)(11,t?` (${t})`:"",r));if("string"!=typeof e.main)throw new Error((0,a.A)(12,t?` (${t})`:"",JSON.stringify(e.main)));return S(e,"light",o,l),S(e,"dark",i,l),e.contrastText||(e.contrastText=I(e.main)),e},O={dark:x,light:y};return(0,i.A)((0,n.A)({common:(0,n.A)({},d),mode:t,primary:P({color:c,name:"primary"}),secondary:P({color:w,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:P({color:k,name:"error"}),warning:P({color:C,name:"warning"}),info:P({color:M,name:"info"}),success:P({color:R,name:"success"}),grey:p,contrastThreshold:r,getContrastText:I,augmentColor:P,tonalOffset:l},O[t]),s)}(w),O=(0,l.A)(e);let F=(0,i.A)(O,{mixins:($=O.breakpoints,W=r,(0,n.A)({toolbar:{minHeight:56,[$.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[$.up("sm")]:{minHeight:64}}},W)),palette:P,shadows:I.slice(),typography:R(P,M),transitions:T(k),zIndex:(0,n.A)({},z)});var $,W;return F=(0,i.A)(F,C),F=t.reduce(((e,t)=>(0,i.A)(e,t)),F),F.unstable_sxConfig=(0,n.A)({},s.A,null==C?void 0:C.unstable_sxConfig),F.unstable_sx=function(e){return(0,c.A)({sx:e,theme:this})},F}},2765:(e,t,r)=>{r.d(t,{A:()=>n});const n=(0,r(3478).A)()},8783:(e,t,r)=>{r.d(t,{A:()=>n});const n=e=>{let t;return t=e<1?5.11916*e**2:4.5*Math.log(e+1)+2,(t/100).toFixed(2)}},8312:(e,t,r)=>{r.d(t,{A:()=>n});const n="$$material"},1848:(e,t,r)=>{r.d(t,{Ay:()=>s,_n:()=>l,ep:()=>i});var n=r(1770),o=r(2765),a=r(8312);const i=e=>(0,n.MC)(e)&&"classes"!==e,l=n.MC,s=(0,n.Ay)({themeId:a.A,defaultTheme:o.A,rootShouldForwardProp:i})},4675:(e,t,r)=>{r.d(t,{A:()=>i}),r(6540);var n=r(2858),o=r(2765),a=r(8312);function i(){const e=(0,n.A)(o.A);return e[a.A]||e}},3541:(e,t,r)=>{r.d(t,{A:()=>i});var n=r(6606),o=r(2765),a=r(8312);function i({props:e,name:t}){return(0,n.A)({props:e,name:t,defaultTheme:o.A,themeId:a.A})}},5186:(e,t,r)=>{r.d(t,{c:()=>o,q:()=>n});const n=e=>e.scrollTop;function o(e,t){var r,n;const{timeout:o,easing:a,style:i={}}=e;return{duration:null!=(r=i.transitionDuration)?r:"number"==typeof o?o:o[t.mode]||0,easing:null!=(n=i.transitionTimingFunction)?n:"object"==typeof a?a[t.mode]:a,delay:i.transitionDelay}}},8466:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(3967).A},5003:(e,t,r)=>{r.d(t,{A:()=>b});var n=r(8168),o=r(6540),a=r(8587),i=r(4164),l=r(5659),s=r(8466),c=r(3541),u=r(1848),d=r(8413),p=r(1609);function f(e){return(0,p.A)("MuiSvgIcon",e)}(0,d.A)("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);var m=r(4848);const h=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],A=(0,u.Ay)("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,"inherit"!==r.color&&t[`color${(0,s.A)(r.color)}`],t[`fontSize${(0,s.A)(r.fontSize)}`]]}})((({theme:e,ownerState:t})=>{var r,n,o,a,i,l,s,c,u,d,p,f,m;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:t.hasSvgAsChild?void 0:"currentColor",flexShrink:0,transition:null==(r=e.transitions)||null==(n=r.create)?void 0:n.call(r,"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==(u=c.pxToRem)?void 0:u.call(c,35))||"2.1875rem"}[t.fontSize],color:null!=(d=null==(p=(e.vars||e).palette)||null==(p=p[t.color])?void 0:p.main)?d:{action:null==(f=(e.vars||e).palette)||null==(f=f.action)?void 0:f.active,disabled:null==(m=(e.vars||e).palette)||null==(m=m.action)?void 0:m.disabled,inherit:void 0}[t.color]}})),g=o.forwardRef((function(e,t){const r=(0,c.A)({props:e,name:"MuiSvgIcon"}),{children:u,className:d,color:p="inherit",component:g="svg",fontSize:v="medium",htmlColor:b,inheritViewBox:y=!1,titleAccess:x,viewBox:S="0 0 24 24"}=r,w=(0,a.A)(r,h),k=o.isValidElement(u)&&"svg"===u.type,M=(0,n.A)({},r,{color:p,component:g,fontSize:v,instanceFontSize:e.fontSize,inheritViewBox:y,viewBox:S,hasSvgAsChild:k}),R={};y||(R.viewBox=S);const C=(e=>{const{color:t,fontSize:r,classes:n}=e,o={root:["root","inherit"!==t&&`color${(0,s.A)(t)}`,`fontSize${(0,s.A)(r)}`]};return(0,l.A)(o,f,n)})(M);return(0,m.jsxs)(A,(0,n.A)({as:g,className:(0,i.A)(C.root,d),focusable:"false",color:b,"aria-hidden":!x||void 0,role:x?"img":void 0,ref:t},R,w,k&&u.props,{ownerState:M,children:[k?u.props.children:u,x?(0,m.jsx)("title",{children:x}):null]}))}));g.muiName="SvgIcon";const v=g;function b(e,t){function r(r,o){return(0,m.jsx)(v,(0,n.A)({"data-testid":`${t}Icon`,ref:o},r,{children:e}))}return r.muiName=v.muiName,o.memo(o.forwardRef(r))}},1935:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(4705).A},7167:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(2539).A},2070:(e,t,r)=>{r.r(t),r.d(t,{capitalize:()=>o.A,createChainedFunction:()=>a,createSvgIcon:()=>i.A,debounce:()=>l.A,deprecatedPropType:()=>s,isMuiElement:()=>c.A,ownerDocument:()=>u.A,ownerWindow:()=>d.A,requirePropFactory:()=>p,setRef:()=>f,unstable_ClassNameGenerator:()=>x,unstable_useEnhancedEffect:()=>m.A,unstable_useId:()=>h,unsupportedProp:()=>A,useControlled:()=>g.A,useEventCallback:()=>v.A,useForkRef:()=>b.A,useIsFocusVisible:()=>y.A});var n=r(9071),o=r(8466);const a=r(1210).A;var i=r(5003),l=r(1935);const s=r(3340).A;var c=r(6767),u=r(6248),d=r(3749);const p=r(60).A,f=r(989).A;var m=r(2778);const h=r(4661).A,A=r(7844).A;var g=r(1159),v=r(3034),b=r(6852),y=r(8851);const x={configure:e=>{n.A.configure(e)}}},6767:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(5755).A},6248:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(2325).A},3749:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(4877).A},1159:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(2501).A},2778:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(1529).A},3034:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(1547).A},6852:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(1523).A},8851:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(7151).A},7766:(e,t,r)=>{r.d(t,{A:()=>c});var n=r(8168),o=r(6540),a=r(3738),i=r(4022);const l="function"==typeof Symbol&&Symbol.for?Symbol.for("mui.nested"):"__THEME_NESTED__";var s=r(4848);const c=function(e){const{children:t,theme:r}=e,c=(0,i.A)(),u=o.useMemo((()=>{const e=null===c?r:function(e,t){return"function"==typeof t?t(e):(0,n.A)({},e,t)}(c,r);return null!=e&&(e[l]=null!==c),e}),[r,c]);return(0,s.jsx)(a.A.Provider,{value:u,children:t})}},3738:(e,t,r)=>{r.d(t,{A:()=>n});const n=r(6540).createContext(null)},4022:(e,t,r)=>{r.d(t,{A:()=>a});var n=r(6540),o=r(3738);function a(){return n.useContext(o.A)}},9940:(e,t,r)=>{r.d(t,{A:()=>a}),r(6540);var n=r(7437),o=r(4848);function a(e){const{styles:t,defaultTheme:r={}}=e,a="function"==typeof t?e=>{return t(null==(n=e)||0===Object.keys(n).length?r:e);var n}:t;return(0,o.jsx)(n.mL,{styles:a})}},4763:(e,t,r)=>{r.d(t,{Ay:()=>o,q_:()=>a});var n=r(1479);function o(e,t){return(0,n.A)(e,t)}const a=(e,t)=>{Array.isArray(e.__emotion_styles)&&(e.__emotion_styles=t(e.__emotion_styles))}}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QkMsR0FDdkIsTUFBTyxDQUFDLEdBQUdBLEVBQUcsUUFBUUEsRUFBRyxRQUFRQSxFQUFHLFFBQVFBLEVBQUcsdUJBQTZDLEdBQUdBLEVBQUcsUUFBUUEsRUFBRyxRQUFRQSxFQUFHLFFBQVFBLEVBQUcsd0JBQWdELEdBQUdBLEVBQUcsUUFBUUEsRUFBRyxRQUFRQSxFQUFHLFNBQVNBLEVBQUcsMEJBQW1EL0wsS0FBSyxJQUNyUixDQUdBLE1BQ0EsRUFEZ0IsQ0FBQyxPQUFROEwsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsRUFBRyxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsR0FBSSxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEVBQUcsSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEdBQUksSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEdBQUksSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEdBQUksSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEdBQUksSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSUEsRUFBYSxFQUFHLEdBQUksSUFBSyxFQUFHLEVBQUcsR0FBSSxHQUFJLEVBQUcsRUFBRyxFQUFHLEdBQUksSUNONXhDLEVB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cmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TZWxlY3Qvc2VsZWN0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TZWxlY3QvU2VsZWN0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3ZnLWljb25zL0Fycm93RHJvcERvd24uanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU2VsZWN0L1NlbGVjdC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9UZXh0RmllbGQvdGV4dEZpZWxkQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9UZXh0RmllbGQvVGV4dEZpZWxkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1Rvb2xiYXIvdG9vbGJhckNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVG9vbGJhci9Ub29sYmFyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1R5cG9ncmFwaHkvdHlwb2dyYXBoeUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeS9UeXBvZ3JhcGh5LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9Nb3JlSG9yaXouanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL1RoZW1lUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2NvbW1vbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvZ3JleS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvcHVycGxlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9yZWQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL29yYW5nZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvYmx1ZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvbGlnaHRCbHVlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9ncmVlbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlUGFsZXR0ZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVHlwb2dyYXBoeS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvc2hhZG93cy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVHJhbnNpdGlvbnMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3pJbmRleC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlVGhlbWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2NyZWF0ZU1peGlucy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvZGVmYXVsdFRoZW1lLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9nZXRPdmVybGF5QWxwaGEuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL2lkZW50aWZpZXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3N0eWxlZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvdXNlVGhlbWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3VzZVRoZW1lUHJvcHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdHJhbnNpdGlvbnMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvY2FwaXRhbGl6ZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TdmdJY29uL3N2Z0ljb25DbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1N2Z0ljb24vU3ZnSWNvbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jcmVhdGVTdmdJY29uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2RlYm91bmNlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2dldFNjcm9sbGJhclNpemUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2RlcHJlY2F0ZWRQcm9wVHlwZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9yZXF1aXJlUHJvcEZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvc2V0UmVmLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUlkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3Vuc3VwcG9ydGVkUHJvcC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9pbmRleC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9pc011aUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvb3duZXJEb2N1bWVudC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9vd25lcldpbmRvdy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VDb250cm9sbGVkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2suanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRm9ya1JlZi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VJc0ZvY3VzVmlzaWJsZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9wcml2YXRlLXRoZW1pbmcvVGhlbWVQcm92aWRlci9uZXN0ZWQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvcHJpdmF0ZS10aGVtaW5nL1RoZW1lUHJvdmlkZXIvVGhlbWVQcm92aWRlci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9wcml2YXRlLXRoZW1pbmcvdXNlVGhlbWUvVGhlbWVDb250ZXh0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3ByaXZhdGUtdGhlbWluZy91c2VUaGVtZS91c2VUaGVtZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL0dsb2JhbFN0eWxlcy9HbG9iYWxTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0VXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVNlbGVjdCcsIHNsb3QpO1xufVxuY29uc3Qgc2VsZWN0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVNlbGVjdCcsIFsncm9vdCcsICdzZWxlY3QnLCAnbXVsdGlwbGUnLCAnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJywgJ2Rpc2FibGVkJywgJ2ZvY3VzZWQnLCAnaWNvbicsICdpY29uT3BlbicsICdpY29uRmlsbGVkJywgJ2ljb25PdXRsaW5lZCcsICdpY29uU3RhbmRhcmQnLCAnbmF0aXZlSW5wdXQnLCAnZXJyb3InXSk7XG5leHBvcnQgZGVmYXVsdCBzZWxlY3RDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCB7IGZvcm1hdE11aUVycm9yTWVzc2FnZSBhcyBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIH0gZnJvbSBcIkBtdWkvdXRpbHNcIjtcbnZhciBfc3BhbjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXV0b1dpZHRoXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkZWZhdWx0T3BlblwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImRpc2FibGVkXCIsIFwiZGlzcGxheUVtcHR5XCIsIFwiZXJyb3JcIiwgXCJJY29uQ29tcG9uZW50XCIsIFwiaW5wdXRSZWZcIiwgXCJsYWJlbElkXCIsIFwiTWVudVByb3BzXCIsIFwibXVsdGlwbGVcIiwgXCJuYW1lXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkNsb3NlXCIsIFwib25Gb2N1c1wiLCBcIm9uT3BlblwiLCBcIm9wZW5cIiwgXCJyZWFkT25seVwiLCBcInJlbmRlclZhbHVlXCIsIFwiU2VsZWN0RGlzcGxheVByb3BzXCIsIFwidGFiSW5kZXhcIiwgXCJ0eXBlXCIsIFwidmFsdWVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNGcmFnbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IHJlZlR5cGUsIHVuc3RhYmxlX3VzZUlkIGFzIHVzZUlkIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgb3duZXJEb2N1bWVudCBmcm9tICcuLi91dGlscy9vd25lckRvY3VtZW50JztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IE1lbnUgZnJvbSAnLi4vTWVudS9NZW51JztcbmltcG9ydCB7IG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcywgbmF0aXZlU2VsZWN0SWNvblN0eWxlcyB9IGZyb20gJy4uL05hdGl2ZVNlbGVjdC9OYXRpdmVTZWxlY3RJbnB1dCc7XG5pbXBvcnQgeyBpc0ZpbGxlZCB9IGZyb20gJy4uL0lucHV0QmFzZS91dGlscyc7XG5pbXBvcnQgc3R5bGVkLCB7IHNsb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICcuLi91dGlscy91c2VDb250cm9sbGVkJztcbmltcG9ydCBzZWxlY3RDbGFzc2VzLCB7IGdldFNlbGVjdFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9zZWxlY3RDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBTZWxlY3RTZWxlY3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIHNsb3Q6ICdTZWxlY3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbXG4gICAgLy8gV2luIHNwZWNpZmljaXR5IG92ZXIgdGhlIGlucHV0IGJhc2VcbiAgICB7XG4gICAgICBbYCYuJHtzZWxlY3RDbGFzc2VzLnNlbGVjdH1gXTogc3R5bGVzLnNlbGVjdFxuICAgIH0sIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMuc2VsZWN0fWBdOiBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XVxuICAgIH0sIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMuZXJyb3J9YF06IHN0eWxlcy5lcnJvclxuICAgIH0sIHtcbiAgICAgIFtgJi4ke3NlbGVjdENsYXNzZXMubXVsdGlwbGV9YF06IHN0eWxlcy5tdWx0aXBsZVxuICAgIH1dO1xuICB9XG59KShuYXRpdmVTZWxlY3RTZWxlY3RTdHlsZXMsIHtcbiAgLy8gV2luIHNwZWNpZmljaXR5IG92ZXIgdGhlIGlucHV0IGJhc2VcbiAgW2AmLiR7c2VsZWN0Q2xhc3Nlcy5zZWxlY3R9YF06IHtcbiAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAvLyBSZXNldHMgZm9yIG11bHRpcGxlIHNlbGVjdCB3aXRoIGNoaXBzXG4gICAgbWluSGVpZ2h0OiAnMS40Mzc1ZW0nLFxuICAgIC8vIFJlcXVpcmVkIGZvciBzZWxlY3RcXHRleHQtZmllbGQgaGVpZ2h0IGNvbnNpc3RlbmN5XG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICB9XG59KTtcbmNvbnN0IFNlbGVjdEljb24gPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIHNsb3Q6ICdJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5pY29uLCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW2BpY29uJHtjYXBpdGFsaXplKG93bmVyU3RhdGUudmFyaWFudCl9YF0sIG93bmVyU3RhdGUub3BlbiAmJiBzdHlsZXMuaWNvbk9wZW5dO1xuICB9XG59KShuYXRpdmVTZWxlY3RJY29uU3R5bGVzKTtcbmNvbnN0IFNlbGVjdE5hdGl2ZUlucHV0ID0gc3R5bGVkKCdpbnB1dCcsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gc2xvdFNob3VsZEZvcndhcmRQcm9wKHByb3ApICYmIHByb3AgIT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aVNlbGVjdCcsXG4gIHNsb3Q6ICdOYXRpdmVJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLm5hdGl2ZUlucHV0XG59KSh7XG4gIGJvdHRvbTogMCxcbiAgbGVmdDogMCxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIG9wYWNpdHk6IDAsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCdcbn0pO1xuZnVuY3Rpb24gYXJlRXF1YWxWYWx1ZXMoYSwgYikge1xuICBpZiAodHlwZW9mIGIgPT09ICdvYmplY3QnICYmIGIgIT09IG51bGwpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfVxuXG4gIC8vIFRoZSB2YWx1ZSBjb3VsZCBiZSBhIG51bWJlciwgdGhlIERPTSB3aWxsIHN0cmluZ2lmeSBpdCBhbnl3YXkuXG4gIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKTtcbn1cbmZ1bmN0aW9uIGlzRW1wdHkoZGlzcGxheSkge1xuICByZXR1cm4gZGlzcGxheSA9PSBudWxsIHx8IHR5cGVvZiBkaXNwbGF5ID09PSAnc3RyaW5nJyAmJiAhZGlzcGxheS50cmltKCk7XG59XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICB2YXJpYW50LFxuICAgIGRpc2FibGVkLFxuICAgIG11bHRpcGxlLFxuICAgIG9wZW4sXG4gICAgZXJyb3JcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHNlbGVjdDogWydzZWxlY3QnLCB2YXJpYW50LCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBtdWx0aXBsZSAmJiAnbXVsdGlwbGUnLCBlcnJvciAmJiAnZXJyb3InXSxcbiAgICBpY29uOiBbJ2ljb24nLCBgaWNvbiR7Y2FwaXRhbGl6ZSh2YXJpYW50KX1gLCBvcGVuICYmICdpY29uT3BlbicsIGRpc2FibGVkICYmICdkaXNhYmxlZCddLFxuICAgIG5hdGl2ZUlucHV0OiBbJ25hdGl2ZUlucHV0J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRTZWxlY3RVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IFNlbGVjdElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gU2VsZWN0SW5wdXQocHJvcHMsIHJlZikge1xuICB2YXIgX01lbnVQcm9wcyRzbG90UHJvcHM7XG4gIGNvbnN0IHtcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgJ2FyaWEtbGFiZWwnOiBhcmlhTGFiZWwsXG4gICAgICBhdXRvRm9jdXMsXG4gICAgICBhdXRvV2lkdGgsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlZmF1bHRPcGVuLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNwbGF5RW1wdHksXG4gICAgICBlcnJvciA9IGZhbHNlLFxuICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgIGlucHV0UmVmOiBpbnB1dFJlZlByb3AsXG4gICAgICBsYWJlbElkLFxuICAgICAgTWVudVByb3BzID0ge30sXG4gICAgICBtdWx0aXBsZSxcbiAgICAgIG5hbWUsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uQ2xvc2UsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25PcGVuLFxuICAgICAgb3Blbjogb3BlblByb3AsXG4gICAgICByZWFkT25seSxcbiAgICAgIHJlbmRlclZhbHVlLFxuICAgICAgU2VsZWN0RGlzcGxheVByb3BzID0ge30sXG4gICAgICB0YWJJbmRleDogdGFiSW5kZXhQcm9wXG4gICAgICAvLyBjYXRjaGluZyBgdHlwZWAgZnJvbSBJbnB1dCB3aGljaCBtYWtlcyBubyBzZW5zZSBmb3IgU2VsZWN0SW5wdXRcbiAgICAgICxcblxuICAgICAgdmFsdWU6IHZhbHVlUHJvcCxcbiAgICAgIHZhcmlhbnQgPSAnc3RhbmRhcmQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVTdGF0ZV0gPSB1c2VDb250cm9sbGVkKHtcbiAgICBjb250cm9sbGVkOiB2YWx1ZVByb3AsXG4gICAgZGVmYXVsdDogZGVmYXVsdFZhbHVlLFxuICAgIG5hbWU6ICdTZWxlY3QnXG4gIH0pO1xuICBjb25zdCBbb3BlblN0YXRlLCBzZXRPcGVuU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogb3BlblByb3AsXG4gICAgZGVmYXVsdDogZGVmYXVsdE9wZW4sXG4gICAgbmFtZTogJ1NlbGVjdCdcbiAgfSk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBkaXNwbGF5UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBbZGlzcGxheU5vZGUsIHNldERpc3BsYXlOb2RlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNPcGVuQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKG9wZW5Qcm9wICE9IG51bGwpO1xuICBjb25zdCBbbWVudU1pbldpZHRoU3RhdGUsIHNldE1lbnVNaW5XaWR0aFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYocmVmLCBpbnB1dFJlZlByb3ApO1xuICBjb25zdCBoYW5kbGVEaXNwbGF5UmVmID0gUmVhY3QudXNlQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgZGlzcGxheVJlZi5jdXJyZW50ID0gbm9kZTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgc2V0RGlzcGxheU5vZGUobm9kZSk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IGFuY2hvckVsZW1lbnQgPSBkaXNwbGF5Tm9kZSA9PSBudWxsID8gdm9pZCAwIDogZGlzcGxheU5vZGUucGFyZW50Tm9kZTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShoYW5kbGVSZWYsICgpID0+ICh7XG4gICAgZm9jdXM6ICgpID0+IHtcbiAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH0sXG4gICAgbm9kZTogaW5wdXRSZWYuY3VycmVudCxcbiAgICB2YWx1ZVxuICB9KSwgW3ZhbHVlXSk7XG5cbiAgLy8gUmVzaXplIG1lbnUgb24gYGRlZmF1bHRPcGVuYCBhdXRvbWF0aWMgdG9nZ2xlLlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0T3BlbiAmJiBvcGVuU3RhdGUgJiYgZGlzcGxheU5vZGUgJiYgIWlzT3BlbkNvbnRyb2xsZWQpIHtcbiAgICAgIHNldE1lbnVNaW5XaWR0aFN0YXRlKGF1dG9XaWR0aCA/IG51bGwgOiBhbmNob3JFbGVtZW50LmNsaWVudFdpZHRoKTtcbiAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtkaXNwbGF5Tm9kZSwgYXV0b1dpZHRoXSk7XG4gIC8vIGBpc09wZW5Db250cm9sbGVkYCBpcyBpZ25vcmVkIGJlY2F1c2UgdGhlIGNvbXBvbmVudCBzaG91bGQgbmV2ZXIgc3dpdGNoIGJldHdlZW4gY29udHJvbGxlZCBhbmQgdW5jb250cm9sbGVkIG1vZGVzLlxuICAvLyBgZGVmYXVsdE9wZW5gIGFuZCBgb3BlblN0YXRlYCBhcmUgaWdub3JlZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjYWxsYmFja3MuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGF1dG9Gb2N1cykge1xuICAgICAgZGlzcGxheVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9LCBbYXV0b0ZvY3VzXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsYWJlbElkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBsYWJlbCA9IG93bmVyRG9jdW1lbnQoZGlzcGxheVJlZi5jdXJyZW50KS5nZXRFbGVtZW50QnlJZChsYWJlbElkKTtcbiAgICBpZiAobGFiZWwpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIGlmIChnZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkge1xuICAgICAgICAgIGRpc3BsYXlSZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVyKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGxhYmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlcik7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9LCBbbGFiZWxJZF0pO1xuICBjb25zdCB1cGRhdGUgPSAob3BlbiwgZXZlbnQpID0+IHtcbiAgICBpZiAob3Blbikge1xuICAgICAgaWYgKG9uT3Blbikge1xuICAgICAgICBvbk9wZW4oZXZlbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob25DbG9zZSkge1xuICAgICAgb25DbG9zZShldmVudCk7XG4gICAgfVxuICAgIGlmICghaXNPcGVuQ29udHJvbGxlZCkge1xuICAgICAgc2V0TWVudU1pbldpZHRoU3RhdGUoYXV0b1dpZHRoID8gbnVsbCA6IGFuY2hvckVsZW1lbnQuY2xpZW50V2lkdGgpO1xuICAgICAgc2V0T3BlblN0YXRlKG9wZW4pO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gZXZlbnQgPT4ge1xuICAgIC8vIElnbm9yZSBldmVyeXRoaW5nIGJ1dCBsZWZ0LWNsaWNrXG4gICAgaWYgKGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBIaWphY2sgdGhlIGRlZmF1bHQgZm9jdXMgYmVoYXZpb3IuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBkaXNwbGF5UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB1cGRhdGUodHJ1ZSwgZXZlbnQpO1xuICB9O1xuICBjb25zdCBoYW5kbGVDbG9zZSA9IGV2ZW50ID0+IHtcbiAgICB1cGRhdGUoZmFsc2UsIGV2ZW50KTtcbiAgfTtcbiAgY29uc3QgY2hpbGRyZW5BcnJheSA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pO1xuXG4gIC8vIFN1cHBvcnQgYXV0b2ZpbGwuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuQXJyYXkuZmluZChjaGlsZEl0ZW0gPT4gY2hpbGRJdGVtLnByb3BzLnZhbHVlID09PSBldmVudC50YXJnZXQudmFsdWUpO1xuICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFZhbHVlU3RhdGUoY2hpbGQucHJvcHMudmFsdWUpO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UoZXZlbnQsIGNoaWxkKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUl0ZW1DbGljayA9IGNoaWxkID0+IGV2ZW50ID0+IHtcbiAgICBsZXQgbmV3VmFsdWU7XG5cbiAgICAvLyBXZSB1c2UgdGhlIHRhYmluZGV4IGF0dHJpYnV0ZSB0byBzaWduYWwgdGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICAgIGlmICghZXZlbnQuY3VycmVudFRhcmdldC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICBuZXdWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuc2xpY2UoKSA6IFtdO1xuICAgICAgY29uc3QgaXRlbUluZGV4ID0gdmFsdWUuaW5kZXhPZihjaGlsZC5wcm9wcy52YWx1ZSk7XG4gICAgICBpZiAoaXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICBuZXdWYWx1ZS5wdXNoKGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1ZhbHVlLnNwbGljZShpdGVtSW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdWYWx1ZSA9IGNoaWxkLnByb3BzLnZhbHVlO1xuICAgIH1cbiAgICBpZiAoY2hpbGQucHJvcHMub25DbGljaykge1xuICAgICAgY2hpbGQucHJvcHMub25DbGljayhldmVudCk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgIHNldFZhbHVlU3RhdGUobmV3VmFsdWUpO1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIC8vIFJlZGVmaW5lIHRhcmdldCB0byBhbGxvdyBuYW1lIGFuZCB2YWx1ZSB0byBiZSByZWFkLlxuICAgICAgICAvLyBUaGlzIGFsbG93cyBzZWFtbGVzcyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBtb3N0IHBvcHVsYXIgZm9ybSBsaWJyYXJpZXMuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzEzNDg1I2lzc3VlY29tbWVudC02NzYwNDg0OTJcbiAgICAgICAgLy8gQ2xvbmUgdGhlIGV2ZW50IHRvIG5vdCBvdmVycmlkZSBgdGFyZ2V0YCBvZiB0aGUgb3JpZ2luYWwgZXZlbnQuXG4gICAgICAgIGNvbnN0IG5hdGl2ZUV2ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQgfHwgZXZlbnQ7XG4gICAgICAgIGNvbnN0IGNsb25lZEV2ZW50ID0gbmV3IG5hdGl2ZUV2ZW50LmNvbnN0cnVjdG9yKG5hdGl2ZUV2ZW50LnR5cGUsIG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb25lZEV2ZW50LCAndGFyZ2V0Jywge1xuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgb25DaGFuZ2UoY2xvbmVkRXZlbnQsIGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFtdWx0aXBsZSkge1xuICAgICAgdXBkYXRlKGZhbHNlLCBldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGlmICghcmVhZE9ubHkpIHtcbiAgICAgIGNvbnN0IHZhbGlkS2V5cyA9IFsnICcsICdBcnJvd1VwJywgJ0Fycm93RG93bicsXG4gICAgICAvLyBUaGUgbmF0aXZlIHNlbGVjdCBkb2Vzbid0IHJlc3BvbmQgdG8gZW50ZXIgb24gbWFjT1MsIGJ1dCBpdCdzIHJlY29tbWVuZGVkIGJ5XG4gICAgICAvLyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL2NvbWJvYm94L2V4YW1wbGVzL2NvbWJvYm94LXNlbGVjdC1vbmx5L1xuICAgICAgJ0VudGVyJ107XG4gICAgICBpZiAodmFsaWRLZXlzLmluZGV4T2YoZXZlbnQua2V5KSAhPT0gLTEpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdXBkYXRlKHRydWUsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IG9wZW4gPSBkaXNwbGF5Tm9kZSAhPT0gbnVsbCAmJiBvcGVuU3RhdGU7XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSBldmVudCA9PiB7XG4gICAgLy8gaWYgb3BlbiBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25cbiAgICBpZiAoIW9wZW4gJiYgb25CbHVyKSB7XG4gICAgICAvLyBQcmVhY3Qgc3VwcG9ydCwgdGFyZ2V0IGlzIHJlYWQgb25seSBwcm9wZXJ0eSBvbiBhIG5hdGl2ZSBldmVudC5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ3RhcmdldCcsIHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgbmFtZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICB9O1xuICBkZWxldGUgb3RoZXJbJ2FyaWEtaW52YWxpZCddO1xuICBsZXQgZGlzcGxheTtcbiAgbGV0IGRpc3BsYXlTaW5nbGU7XG4gIGNvbnN0IGRpc3BsYXlNdWx0aXBsZSA9IFtdO1xuICBsZXQgY29tcHV0ZURpc3BsYXkgPSBmYWxzZTtcbiAgbGV0IGZvdW5kTWF0Y2ggPSBmYWxzZTtcblxuICAvLyBObyBuZWVkIHRvIGRpc3BsYXkgYW55IHZhbHVlIGlmIHRoZSBmaWVsZCBpcyBlbXB0eS5cbiAgaWYgKGlzRmlsbGVkKHtcbiAgICB2YWx1ZVxuICB9KSB8fCBkaXNwbGF5RW1wdHkpIHtcbiAgICBpZiAocmVuZGVyVmFsdWUpIHtcbiAgICAgIGRpc3BsYXkgPSByZW5kZXJWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXB1dGVEaXNwbGF5ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgY29uc3QgaXRlbXMgPSBjaGlsZHJlbkFycmF5Lm1hcChjaGlsZCA9PiB7XG4gICAgaWYgKCEgLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaXNGcmFnbWVudChjaGlsZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbXCJNVUk6IFRoZSBTZWxlY3QgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHNlbGVjdGVkO1xuICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVGhlIFxcYHZhbHVlXFxgIHByb3AgbXVzdCBiZSBhbiBhcnJheSB3aGVuIHVzaW5nIHRoZSBcXGBTZWxlY3RcXGAgY29tcG9uZW50IHdpdGggXFxgbXVsdGlwbGVcXGAuYCA6IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UoMikpO1xuICAgICAgfVxuICAgICAgc2VsZWN0ZWQgPSB2YWx1ZS5zb21lKHYgPT4gYXJlRXF1YWxWYWx1ZXModiwgY2hpbGQucHJvcHMudmFsdWUpKTtcbiAgICAgIGlmIChzZWxlY3RlZCAmJiBjb21wdXRlRGlzcGxheSkge1xuICAgICAgICBkaXNwbGF5TXVsdGlwbGUucHVzaChjaGlsZC5wcm9wcy5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGVkID0gYXJlRXF1YWxWYWx1ZXModmFsdWUsIGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgIGlmIChzZWxlY3RlZCAmJiBjb21wdXRlRGlzcGxheSkge1xuICAgICAgICBkaXNwbGF5U2luZ2xlID0gY2hpbGQucHJvcHMuY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgZm91bmRNYXRjaCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAnYXJpYS1zZWxlY3RlZCc6IHNlbGVjdGVkID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgIG9uQ2xpY2s6IGhhbmRsZUl0ZW1DbGljayhjaGlsZCksXG4gICAgICBvbktleVVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgICAgIC8vIG90aGVyd2lzZSBvdXIgTWVudUl0ZW1zIGRpc3BhdGNoZXMgYSBjbGljayBldmVudFxuICAgICAgICAgIC8vIGl0J3Mgbm90IGJlaGF2aW9yIG9mIHRoZSBuYXRpdmUgPG9wdGlvbj4gYW5kIGNhdXNlc1xuICAgICAgICAgIC8vIHRoZSBzZWxlY3QgdG8gY2xvc2UgaW1tZWRpYXRlbHkgc2luY2Ugd2Ugb3BlbiBvbiBzcGFjZSBrZXlkb3duXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGQucHJvcHMub25LZXlVcCkge1xuICAgICAgICAgIGNoaWxkLnByb3BzLm9uS2V5VXAoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcm9sZTogJ29wdGlvbicsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAvLyBUaGUgdmFsdWUgaXMgbW9zdCBsaWtlbHkgbm90IGEgdmFsaWQgSFRNTCBhdHRyaWJ1dGUuXG4gICAgICAnZGF0YS12YWx1ZSc6IGNoaWxkLnByb3BzLnZhbHVlIC8vIEluc3RlYWQsIHdlIHByb3ZpZGUgaXQgYXMgYSBkYXRhIGF0dHJpYnV0ZS5cbiAgICB9KTtcbiAgfSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghZm91bmRNYXRjaCAmJiAhbXVsdGlwbGUgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGNoaWxkcmVuQXJyYXkubWFwKGNoaWxkID0+IGNoaWxkLnByb3BzLnZhbHVlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFtgTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhbiBvdXQtb2YtcmFuZ2UgdmFsdWUgXFxgJHt2YWx1ZX1cXGAgZm9yIHRoZSBzZWxlY3QgJHtuYW1lID8gYChuYW1lPVwiJHtuYW1lfVwiKSBgIDogJyd9Y29tcG9uZW50LmAsIFwiQ29uc2lkZXIgcHJvdmlkaW5nIGEgdmFsdWUgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgb3IgJycuXCIsIGBUaGUgYXZhaWxhYmxlIHZhbHVlcyBhcmUgJHt2YWx1ZXMuZmlsdGVyKHggPT4geCAhPSBudWxsKS5tYXAoeCA9PiBgXFxgJHt4fVxcYGApLmpvaW4oJywgJykgfHwgJ1wiXCInfS5gXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW2ZvdW5kTWF0Y2gsIGNoaWxkcmVuQXJyYXksIG11bHRpcGxlLCBuYW1lLCB2YWx1ZV0pO1xuICB9XG4gIGlmIChjb21wdXRlRGlzcGxheSkge1xuICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgaWYgKGRpc3BsYXlNdWx0aXBsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGlzcGxheSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwbGF5ID0gZGlzcGxheU11bHRpcGxlLnJlZHVjZSgob3V0cHV0LCBjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBvdXRwdXQucHVzaChjaGlsZCk7XG4gICAgICAgICAgaWYgKGluZGV4IDwgZGlzcGxheU11bHRpcGxlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKCcsICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LCBbXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BsYXkgPSBkaXNwbGF5U2luZ2xlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEF2b2lkIHBlcmZvcm1pbmcgYSBsYXlvdXQgY29tcHV0YXRpb24gaW4gdGhlIHJlbmRlciBtZXRob2QuXG4gIGxldCBtZW51TWluV2lkdGggPSBtZW51TWluV2lkdGhTdGF0ZTtcbiAgaWYgKCFhdXRvV2lkdGggJiYgaXNPcGVuQ29udHJvbGxlZCAmJiBkaXNwbGF5Tm9kZSkge1xuICAgIG1lbnVNaW5XaWR0aCA9IGFuY2hvckVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIH1cbiAgbGV0IHRhYkluZGV4O1xuICBpZiAodHlwZW9mIHRhYkluZGV4UHJvcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0YWJJbmRleCA9IHRhYkluZGV4UHJvcDtcbiAgfSBlbHNlIHtcbiAgICB0YWJJbmRleCA9IGRpc2FibGVkID8gbnVsbCA6IDA7XG4gIH1cbiAgY29uc3QgYnV0dG9uSWQgPSBTZWxlY3REaXNwbGF5UHJvcHMuaWQgfHwgKG5hbWUgPyBgbXVpLWNvbXBvbmVudC1zZWxlY3QtJHtuYW1lfWAgOiB1bmRlZmluZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgdmFyaWFudCxcbiAgICB2YWx1ZSxcbiAgICBvcGVuLFxuICAgIGVycm9yXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHBhcGVyUHJvcHMgPSBfZXh0ZW5kcyh7fSwgTWVudVByb3BzLlBhcGVyUHJvcHMsIChfTWVudVByb3BzJHNsb3RQcm9wcyA9IE1lbnVQcm9wcy5zbG90UHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBfTWVudVByb3BzJHNsb3RQcm9wcy5wYXBlcik7XG4gIGNvbnN0IGxpc3Rib3hJZCA9IHVzZUlkKCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFNlbGVjdFNlbGVjdCwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBoYW5kbGVEaXNwbGF5UmVmLFxuICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgcm9sZTogXCJjb21ib2JveFwiLFxuICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IGxpc3Rib3hJZCxcbiAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZCA/ICd0cnVlJyA6IHVuZGVmaW5lZCxcbiAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBvcGVuID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgIFwiYXJpYS1oYXNwb3B1cFwiOiBcImxpc3Rib3hcIixcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBbbGFiZWxJZCwgYnV0dG9uSWRdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJykgfHwgdW5kZWZpbmVkLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGFyaWFEZXNjcmliZWRieSxcbiAgICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICAgIG9uTW91c2VEb3duOiBkaXNhYmxlZCB8fCByZWFkT25seSA/IG51bGwgOiBoYW5kbGVNb3VzZURvd24sXG4gICAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzXG4gICAgfSwgU2VsZWN0RGlzcGxheVByb3BzLCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KFNlbGVjdERpc3BsYXlQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMuc2VsZWN0LCBjbGFzc05hbWUpXG4gICAgICAvLyBUaGUgaWQgaXMgcmVxdWlyZWQgZm9yIHByb3BlciBhMTF5XG4gICAgICAsXG4gICAgICBpZDogYnV0dG9uSWQsXG4gICAgICBjaGlsZHJlbjogaXNFbXB0eShkaXNwbGF5KSA/IC8vIG5vdHJhbnNsYXRlIG5lZWRlZCB3aGlsZSBHb29nbGUgVHJhbnNsYXRlIHdpbGwgbm90IGZpeCB6ZXJvLXdpZHRoIHNwYWNlIGlzc3VlXG4gICAgICBfc3BhbiB8fCAoX3NwYW4gPSAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwibm90cmFuc2xhdGVcIixcbiAgICAgICAgY2hpbGRyZW46IFwiXFx1MjAwQlwiXG4gICAgICB9KSkgOiBkaXNwbGF5XG4gICAgfSkpLCAvKiNfX1BVUkVfXyovX2pzeChTZWxlY3ROYXRpdmVJbnB1dCwgX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWludmFsaWRcIjogZXJyb3IsXG4gICAgICB2YWx1ZTogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsJykgOiB2YWx1ZSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICByZWY6IGlucHV0UmVmLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5uYXRpdmVJbnB1dCxcbiAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0sIG90aGVyKSksIC8qI19fUFVSRV9fKi9fanN4KFNlbGVjdEljb24sIHtcbiAgICAgIGFzOiBJY29uQ29tcG9uZW50LFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmljb24sXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSksIC8qI19fUFVSRV9fKi9fanN4KE1lbnUsIF9leHRlbmRzKHtcbiAgICAgIGlkOiBgbWVudS0ke25hbWUgfHwgJyd9YCxcbiAgICAgIGFuY2hvckVsOiBhbmNob3JFbGVtZW50LFxuICAgICAgb3Blbjogb3BlbixcbiAgICAgIG9uQ2xvc2U6IGhhbmRsZUNsb3NlLFxuICAgICAgYW5jaG9yT3JpZ2luOiB7XG4gICAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcbiAgICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcidcbiAgICAgIH0sXG4gICAgICB0cmFuc2Zvcm1PcmlnaW46IHtcbiAgICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgICBob3Jpem9udGFsOiAnY2VudGVyJ1xuICAgICAgfVxuICAgIH0sIE1lbnVQcm9wcywge1xuICAgICAgTWVudUxpc3RQcm9wczogX2V4dGVuZHMoe1xuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogbGFiZWxJZCxcbiAgICAgICAgcm9sZTogJ2xpc3Rib3gnLFxuICAgICAgICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiBtdWx0aXBsZSA/ICd0cnVlJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGlzYWJsZUxpc3RXcmFwOiB0cnVlLFxuICAgICAgICBpZDogbGlzdGJveElkXG4gICAgICB9LCBNZW51UHJvcHMuTWVudUxpc3RQcm9wcyksXG4gICAgICBzbG90UHJvcHM6IF9leHRlbmRzKHt9LCBNZW51UHJvcHMuc2xvdFByb3BzLCB7XG4gICAgICAgIHBhcGVyOiBfZXh0ZW5kcyh7fSwgcGFwZXJQcm9wcywge1xuICAgICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBtaW5XaWR0aDogbWVudU1pbldpZHRoXG4gICAgICAgICAgfSwgcGFwZXJQcm9wcyAhPSBudWxsID8gcGFwZXJQcm9wcy5zdHlsZSA6IG51bGwpXG4gICAgICAgIH0pXG4gICAgICB9KSxcbiAgICAgIGNoaWxkcmVuOiBpdGVtc1xuICAgIH0pKV1cbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFNlbGVjdElucHV0LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gICdhcmlhLWxhYmVsJzogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB3aWR0aCBvZiB0aGUgcG9wb3ZlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IGFjY29yZGluZyB0byB0aGUgaXRlbXMgaW5zaWRlIHRoZVxuICAgKiBtZW51LCBvdGhlcndpc2UgaXQgd2lsbCBiZSBhdCBsZWFzdCB0aGUgd2lkdGggb2YgdGhlIHNlbGVjdCBpbnB1dC5cbiAgICovXG4gIGF1dG9XaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIGVsZW1lbnRzIHRvIHBvcHVsYXRlIHRoZSBzZWxlY3Qgd2l0aC5cbiAgICogQ2FuIGJlIHNvbWUgYDxNZW51SXRlbT5gIGVsZW1lbnRzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBTZWUgW0NTUyBBUEldKCNjc3MpIGJlbG93IGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIENTUyBjbGFzcyBuYW1lIG9mIHRoZSBzZWxlY3QgZWxlbWVudC5cbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyB0b2dnbGVkIG9uIG1vdW50LiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IG9wZW4gc3RhdGUgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqIFlvdSBjYW4gb25seSB1c2UgaXQgd2hlbiB0aGUgYG5hdGl2ZWAgcHJvcCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICovXG4gIGRlZmF1bHRPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2VsZWN0IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2VsZWN0ZWQgaXRlbSBpcyBkaXNwbGF5ZWQgZXZlbiBpZiBpdHMgdmFsdWUgaXMgZW1wdHkuXG4gICAqL1xuICBkaXNwbGF5RW1wdHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYHNlbGVjdCBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRoYXQgZGlzcGxheXMgdGhlIGFycm93LlxuICAgKi9cbiAgSWNvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBJbXBlcmF0aXZlIGhhbmRsZSBpbXBsZW1lbnRpbmcgYHsgdmFsdWU6IFQsIG5vZGU6IEhUTUxFbGVtZW50LCBmb2N1cygpOiB2b2lkIH1gXG4gICAqIEVxdWl2YWxlbnQgdG8gYHJlZmBcbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogVGhlIElEIG9mIGFuIGVsZW1lbnQgdGhhdCBhY3RzIGFzIGFuIGFkZGl0aW9uYWwgbGFiZWwuIFRoZSBTZWxlY3Qgd2lsbFxuICAgKiBiZSBsYWJlbGxlZCBieSB0aGUgYWRkaXRpb25hbCBsYWJlbCBhbmQgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgKi9cbiAgbGFiZWxJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgTWVudWBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pIGVsZW1lbnQuXG4gICAqL1xuICBNZW51UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGB2YWx1ZWAgbXVzdCBiZSBhbiBhcnJheSBhbmQgdGhlIG1lbnUgd2lsbCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbnMuXG4gICAqL1xuICBtdWx0aXBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYHNlbGVjdGAgb3IgaGlkZGVuIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBhIG1lbnUgaXRlbSBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChhbnkpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NoaWxkXSBUaGUgcmVhY3QgZWxlbWVudCB0aGF0IHdhcyBzZWxlY3RlZC5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFVzZSBpbiBjb250cm9sbGVkIG1vZGUgKHNlZSBvcGVuKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBvcGVuZWQuXG4gICAqIFVzZSBpbiBjb250cm9sbGVkIG1vZGUgKHNlZSBvcGVuKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKi9cbiAgb25PcGVuOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUmVuZGVyIHRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSBgdmFsdWVgIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIHtSZWFjdE5vZGV9XG4gICAqL1xuICByZW5kZXJWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBjbGlja2FibGUgZGl2IGVsZW1lbnQuXG4gICAqL1xuICBTZWxlY3REaXNwbGF5UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0YWJJbmRleDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCB2YWx1ZS5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnc3RhbmRhcmQnLCAnb3V0bGluZWQnLCAnZmlsbGVkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgU2VsZWN0SW5wdXQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNNyAxMGw1IDUgNS01elwiXG59KSwgJ0Fycm93RHJvcERvd24nKTsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhdXRvV2lkdGhcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIiwgXCJkZWZhdWx0T3BlblwiLCBcImRpc3BsYXlFbXB0eVwiLCBcIkljb25Db21wb25lbnRcIiwgXCJpZFwiLCBcImlucHV0XCIsIFwiaW5wdXRQcm9wc1wiLCBcImxhYmVsXCIsIFwibGFiZWxJZFwiLCBcIk1lbnVQcm9wc1wiLCBcIm11bHRpcGxlXCIsIFwibmF0aXZlXCIsIFwib25DbG9zZVwiLCBcIm9uT3BlblwiLCBcIm9wZW5cIiwgXCJyZW5kZXJWYWx1ZVwiLCBcIlNlbGVjdERpc3BsYXlQcm9wc1wiLCBcInZhcmlhbnRcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJyb290XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgU2VsZWN0SW5wdXQgZnJvbSAnLi9TZWxlY3RJbnB1dCc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgQXJyb3dEcm9wRG93bkljb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL0Fycm93RHJvcERvd24nO1xuaW1wb3J0IElucHV0IGZyb20gJy4uL0lucHV0JztcbmltcG9ydCBOYXRpdmVTZWxlY3RJbnB1dCBmcm9tICcuLi9OYXRpdmVTZWxlY3QvTmF0aXZlU2VsZWN0SW5wdXQnO1xuaW1wb3J0IEZpbGxlZElucHV0IGZyb20gJy4uL0ZpbGxlZElucHV0JztcbmltcG9ydCBPdXRsaW5lZElucHV0IGZyb20gJy4uL091dGxpbmVkSW5wdXQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICByZXR1cm4gY2xhc3Nlcztcbn07XG5jb25zdCBzdHlsZWRSb290Q29uZmlnID0ge1xuICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdCxcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApICYmIHByb3AgIT09ICd2YXJpYW50JyxcbiAgc2xvdDogJ1Jvb3QnXG59O1xuY29uc3QgU3R5bGVkSW5wdXQgPSBzdHlsZWQoSW5wdXQsIHN0eWxlZFJvb3RDb25maWcpKCcnKTtcbmNvbnN0IFN0eWxlZE91dGxpbmVkSW5wdXQgPSBzdHlsZWQoT3V0bGluZWRJbnB1dCwgc3R5bGVkUm9vdENvbmZpZykoJycpO1xuY29uc3QgU3R5bGVkRmlsbGVkSW5wdXQgPSBzdHlsZWQoRmlsbGVkSW5wdXQsIHN0eWxlZFJvb3RDb25maWcpKCcnKTtcbmNvbnN0IFNlbGVjdCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFNlbGVjdChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBuYW1lOiAnTXVpU2VsZWN0JyxcbiAgICBwcm9wczogaW5Qcm9wc1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYXV0b1dpZHRoID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzZXM6IGNsYXNzZXNQcm9wID0ge30sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkZWZhdWx0T3BlbiA9IGZhbHNlLFxuICAgICAgZGlzcGxheUVtcHR5ID0gZmFsc2UsXG4gICAgICBJY29uQ29tcG9uZW50ID0gQXJyb3dEcm9wRG93bkljb24sXG4gICAgICBpZCxcbiAgICAgIGlucHV0LFxuICAgICAgaW5wdXRQcm9wcyxcbiAgICAgIGxhYmVsLFxuICAgICAgbGFiZWxJZCxcbiAgICAgIE1lbnVQcm9wcyxcbiAgICAgIG11bHRpcGxlID0gZmFsc2UsXG4gICAgICBuYXRpdmUgPSBmYWxzZSxcbiAgICAgIG9uQ2xvc2UsXG4gICAgICBvbk9wZW4sXG4gICAgICBvcGVuLFxuICAgICAgcmVuZGVyVmFsdWUsXG4gICAgICBTZWxlY3REaXNwbGF5UHJvcHMsXG4gICAgICB2YXJpYW50OiB2YXJpYW50UHJvcCA9ICdvdXRsaW5lZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgaW5wdXRDb21wb25lbnQgPSBuYXRpdmUgPyBOYXRpdmVTZWxlY3RJbnB1dCA6IFNlbGVjdElucHV0O1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWyd2YXJpYW50JywgJ2Vycm9yJ11cbiAgfSk7XG4gIGNvbnN0IHZhcmlhbnQgPSBmY3MudmFyaWFudCB8fCB2YXJpYW50UHJvcDtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHZhcmlhbnQsXG4gICAgY2xhc3NlczogY2xhc3Nlc1Byb3BcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgcmVzdE9mQ2xhc3NlcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKGNsYXNzZXMsIF9leGNsdWRlZDIpO1xuICBjb25zdCBJbnB1dENvbXBvbmVudCA9IGlucHV0IHx8IHtcbiAgICBzdGFuZGFyZDogLyojX19QVVJFX18qL19qc3goU3R5bGVkSW5wdXQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9KSxcbiAgICBvdXRsaW5lZDogLyojX19QVVJFX18qL19qc3goU3R5bGVkT3V0bGluZWRJbnB1dCwge1xuICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pLFxuICAgIGZpbGxlZDogLyojX19QVVJFX18qL19qc3goU3R5bGVkRmlsbGVkSW5wdXQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICB9KVxuICB9W3ZhcmlhbnRdO1xuICBjb25zdCBpbnB1dENvbXBvbmVudFJlZiA9IHVzZUZvcmtSZWYocmVmLCBJbnB1dENvbXBvbmVudC5yZWYpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChJbnB1dENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgLy8gTW9zdCBvZiB0aGUgbG9naWMgaXMgaW1wbGVtZW50ZWQgaW4gYFNlbGVjdElucHV0YC5cbiAgICAgIC8vIFRoZSBgU2VsZWN0YCBjb21wb25lbnQgaXMgYSBzaW1wbGUgQVBJIHdyYXBwZXIgdG8gZXhwb3NlIHNvbWV0aGluZyBiZXR0ZXIgdG8gcGxheSB3aXRoLlxuICAgICAgaW5wdXRDb21wb25lbnQsXG4gICAgICBpbnB1dFByb3BzOiBfZXh0ZW5kcyh7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICB2YXJpYW50LFxuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIC8vIFdlIHJlbmRlciBhIHNlbGVjdC4gV2UgY2FuIGlnbm9yZSB0aGUgdHlwZSBwcm92aWRlZCBieSB0aGUgYElucHV0YC5cbiAgICAgICAgbXVsdGlwbGVcbiAgICAgIH0sIG5hdGl2ZSA/IHtcbiAgICAgICAgaWRcbiAgICAgIH0gOiB7XG4gICAgICAgIGF1dG9XaWR0aCxcbiAgICAgICAgZGVmYXVsdE9wZW4sXG4gICAgICAgIGRpc3BsYXlFbXB0eSxcbiAgICAgICAgbGFiZWxJZCxcbiAgICAgICAgTWVudVByb3BzLFxuICAgICAgICBvbkNsb3NlLFxuICAgICAgICBvbk9wZW4sXG4gICAgICAgIG9wZW4sXG4gICAgICAgIHJlbmRlclZhbHVlLFxuICAgICAgICBTZWxlY3REaXNwbGF5UHJvcHM6IF9leHRlbmRzKHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LCBTZWxlY3REaXNwbGF5UHJvcHMpXG4gICAgICB9LCBpbnB1dFByb3BzLCB7XG4gICAgICAgIGNsYXNzZXM6IGlucHV0UHJvcHMgPyBkZWVwbWVyZ2UocmVzdE9mQ2xhc3NlcywgaW5wdXRQcm9wcy5jbGFzc2VzKSA6IHJlc3RPZkNsYXNzZXNcbiAgICAgIH0sIGlucHV0ID8gaW5wdXQucHJvcHMuaW5wdXRQcm9wcyA6IHt9KVxuICAgIH0sIG11bHRpcGxlICYmIG5hdGl2ZSAmJiB2YXJpYW50ID09PSAnb3V0bGluZWQnID8ge1xuICAgICAgbm90Y2hlZDogdHJ1ZVxuICAgIH0gOiB7fSwge1xuICAgICAgcmVmOiBpbnB1dENvbXBvbmVudFJlZixcbiAgICAgIGNsYXNzTmFtZTogY2xzeChJbnB1dENvbXBvbmVudC5wcm9wcy5jbGFzc05hbWUsIGNsYXNzTmFtZSwgY2xhc3Nlcy5yb290KVxuICAgIH0sICFpbnB1dCAmJiB7XG4gICAgICB2YXJpYW50XG4gICAgfSwgb3RoZXIpKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU2VsZWN0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHdpZHRoIG9mIHRoZSBwb3BvdmVyIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBpdGVtcyBpbnNpZGUgdGhlXG4gICAqIG1lbnUsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGF0IGxlYXN0IHRoZSB3aWR0aCBvZiB0aGUgc2VsZWN0IGlucHV0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b1dpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBvcHRpb24gZWxlbWVudHMgdG8gcG9wdWxhdGUgdGhlIHNlbGVjdCB3aXRoLlxuICAgKiBDYW4gYmUgc29tZSBgTWVudUl0ZW1gIHdoZW4gYG5hdGl2ZWAgaXMgZmFsc2UgYW5kIGBvcHRpb25gIHdoZW4gYG5hdGl2ZWAgaXMgdHJ1ZS5cbiAgICpcbiAgICog4pqg77iPVGhlIGBNZW51SXRlbWAgZWxlbWVudHMgKiptdXN0KiogYmUgZGlyZWN0IGRlc2NlbmRhbnRzIHdoZW4gYG5hdGl2ZWAgaXMgZmFsc2UuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxseSBvcGVuLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IG9wZW4gc3RhdGUgaXMgbm90IGNvbnRyb2xsZWQgKGkuZS4gdGhlIGBvcGVuYCBwcm9wIGlzIG5vdCBkZWZpbmVkKS5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVmYXVsdE9wZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgdmFsdWUgaXMgZGlzcGxheWVkIGV2ZW4gaWYgbm8gaXRlbXMgYXJlIHNlbGVjdGVkLlxuICAgKlxuICAgKiBJbiBvcmRlciB0byBkaXNwbGF5IGEgbWVhbmluZ2Z1bCB2YWx1ZSwgYSBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIHRvIHRoZSBgcmVuZGVyVmFsdWVgIHByb3Agd2hpY2hcbiAgICogcmV0dXJucyB0aGUgdmFsdWUgdG8gYmUgZGlzcGxheWVkIHdoZW4gbm8gaXRlbXMgYXJlIHNlbGVjdGVkLlxuICAgKlxuICAgKiDimqDvuI8gV2hlbiB1c2luZyB0aGlzIHByb3AsIG1ha2Ugc3VyZSB0aGUgbGFiZWwgZG9lc24ndCBvdmVybGFwIHdpdGggdGhlIGVtcHR5IGRpc3BsYXllZCB2YWx1ZS5cbiAgICogVGhlIGxhYmVsIHNob3VsZCBlaXRoZXIgYmUgaGlkZGVuIG9yIGZvcmNlZCB0byBhIHNocnVuayBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc3BsYXlFbXB0eTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0aGF0IGRpc3BsYXlzIHRoZSBhcnJvdy5cbiAgICogQGRlZmF1bHQgQXJyb3dEcm9wRG93bkljb25cbiAgICovXG4gIEljb25Db21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBgaWRgIG9mIHRoZSB3cmFwcGVyIGVsZW1lbnQgb3IgdGhlIGBzZWxlY3RgIGVsZW1lbnQgd2hlbiBgbmF0aXZlYC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQW4gYElucHV0YCBlbGVtZW50OyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgbWF0ZXJpYWwtdWkgc3BlY2lmaWMgYElucHV0YC5cbiAgICovXG4gIGlucHV0OiBQcm9wVHlwZXMuZWxlbWVudCxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBXaGVuIGBuYXRpdmVgIGlzIGB0cnVlYCwgdGhlIGF0dHJpYnV0ZXMgYXJlIGFwcGxpZWQgb24gdGhlIGBzZWxlY3RgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogU2VlIFtPdXRsaW5lZElucHV0I2xhYmVsXSgvbWF0ZXJpYWwtdWkvYXBpL291dGxpbmVkLWlucHV0LyNwcm9wcylcbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiBhbiBlbGVtZW50IHRoYXQgYWN0cyBhcyBhbiBhZGRpdGlvbmFsIGxhYmVsLiBUaGUgU2VsZWN0IHdpbGxcbiAgICogYmUgbGFiZWxsZWQgYnkgdGhlIGFkZGl0aW9uYWwgbGFiZWwgYW5kIHRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICovXG4gIGxhYmVsSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYE1lbnVgXSgvbWF0ZXJpYWwtdWkvYXBpL21lbnUvKSBlbGVtZW50LlxuICAgKi9cbiAgTWVudVByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogSWYgYHRydWVgLCBgdmFsdWVgIG11c3QgYmUgYW4gYXJyYXkgYW5kIHRoZSBtZW51IHdpbGwgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb25zLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHVzZXMgYSBuYXRpdmUgYHNlbGVjdGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG5hdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIGEgbWVudSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1NlbGVjdENoYW5nZUV2ZW50PFZhbHVlPn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKGFueSkuXG4gICAqICoqV2FybmluZyoqOiBUaGlzIGlzIGEgZ2VuZXJpYyBldmVudCwgbm90IGEgY2hhbmdlIGV2ZW50LCB1bmxlc3MgdGhlIGNoYW5nZSBldmVudCBpcyBjYXVzZWQgYnkgYnJvd3NlciBhdXRvZmlsbC5cbiAgICogQHBhcmFtIHtvYmplY3R9IFtjaGlsZF0gVGhlIHJlYWN0IGVsZW1lbnQgdGhhdCB3YXMgc2VsZWN0ZWQgd2hlbiBgbmF0aXZlYCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFVzZSBpdCBpbiBlaXRoZXIgY29udHJvbGxlZCAoc2VlIHRoZSBgb3BlbmAgcHJvcCksIG9yIHVuY29udHJvbGxlZCBtb2RlICh0byBkZXRlY3Qgd2hlbiB0aGUgU2VsZWN0IGNvbGxhcHNlcykuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIG9wZW5lZC5cbiAgICogVXNlIGl0IGluIGVpdGhlciBjb250cm9sbGVkIChzZWUgdGhlIGBvcGVuYCBwcm9wKSwgb3IgdW5jb250cm9sbGVkIG1vZGUgKHRvIGRldGVjdCB3aGVuIHRoZSBTZWxlY3QgZXhwYW5kcykuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIG9uT3BlbjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqIFlvdSBjYW4gb25seSB1c2UgaXQgd2hlbiB0aGUgYG5hdGl2ZWAgcHJvcCBpcyBgZmFsc2VgIChkZWZhdWx0KS5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUmVuZGVyIHRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICogWW91IGNhbiBvbmx5IHVzZSBpdCB3aGVuIHRoZSBgbmF0aXZlYCBwcm9wIGlzIGBmYWxzZWAgKGRlZmF1bHQpLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIGB2YWx1ZWAgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMge1JlYWN0Tm9kZX1cbiAgICovXG4gIHJlbmRlclZhbHVlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGNsaWNrYWJsZSBkaXYgZWxlbWVudC5cbiAgICovXG4gIFNlbGVjdERpc3BsYXlQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSBgaW5wdXRgIHZhbHVlLiBQcm92aWRpbmcgYW4gZW1wdHkgc3RyaW5nIHdpbGwgc2VsZWN0IG5vIG9wdGlvbnMuXG4gICAqIFNldCB0byBhbiBlbXB0eSBzdHJpbmcgYCcnYCBpZiB5b3UgZG9uJ3Qgd2FudCBhbnkgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zIHRvIGJlIHNlbGVjdGVkLlxuICAgKlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IGl0IG11c3QgaGF2ZSByZWZlcmVuY2UgZXF1YWxpdHkgd2l0aCB0aGUgb3B0aW9uIGluIG9yZGVyIHRvIGJlIHNlbGVjdGVkLlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgbm90IGFuIG9iamVjdCwgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBtdXN0IG1hdGNoIHdpdGggdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb3B0aW9uIGluIG9yZGVyIHRvIGJlIHNlbGVjdGVkLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJyddKSwgUHJvcFR5cGVzLmFueV0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAnb3V0bGluZWQnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5TZWxlY3QubXVpTmFtZSA9ICdTZWxlY3QnO1xuZXhwb3J0IGRlZmF1bHQgU2VsZWN0OyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0RmllbGRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVRleHRGaWVsZCcsIHNsb3QpO1xufVxuY29uc3QgdGV4dEZpZWxkQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVRleHRGaWVsZCcsIFsncm9vdCddKTtcbmV4cG9ydCBkZWZhdWx0IHRleHRGaWVsZENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXV0b0NvbXBsZXRlXCIsIFwiYXV0b0ZvY3VzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJGb3JtSGVscGVyVGV4dFByb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaGVscGVyVGV4dFwiLCBcImlkXCIsIFwiSW5wdXRMYWJlbFByb3BzXCIsIFwiaW5wdXRQcm9wc1wiLCBcIklucHV0UHJvcHNcIiwgXCJpbnB1dFJlZlwiLCBcImxhYmVsXCIsIFwibWF4Um93c1wiLCBcIm1pblJvd3NcIiwgXCJtdWx0aWxpbmVcIiwgXCJuYW1lXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkZvY3VzXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJyZXF1aXJlZFwiLCBcInJvd3NcIiwgXCJzZWxlY3RcIiwgXCJTZWxlY3RQcm9wc1wiLCBcInR5cGVcIiwgXCJ2YWx1ZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyByZWZUeXBlLCB1bnN0YWJsZV91c2VJZCBhcyB1c2VJZCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBJbnB1dCBmcm9tICcuLi9JbnB1dCc7XG5pbXBvcnQgRmlsbGVkSW5wdXQgZnJvbSAnLi4vRmlsbGVkSW5wdXQnO1xuaW1wb3J0IE91dGxpbmVkSW5wdXQgZnJvbSAnLi4vT3V0bGluZWRJbnB1dCc7XG5pbXBvcnQgSW5wdXRMYWJlbCBmcm9tICcuLi9JbnB1dExhYmVsJztcbmltcG9ydCBGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbCc7XG5pbXBvcnQgRm9ybUhlbHBlclRleHQgZnJvbSAnLi4vRm9ybUhlbHBlclRleHQnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICcuLi9TZWxlY3QnO1xuaW1wb3J0IHsgZ2V0VGV4dEZpZWxkVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi90ZXh0RmllbGRDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB2YXJpYW50Q29tcG9uZW50ID0ge1xuICBzdGFuZGFyZDogSW5wdXQsXG4gIGZpbGxlZDogRmlsbGVkSW5wdXQsXG4gIG91dGxpbmVkOiBPdXRsaW5lZElucHV0XG59O1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VGV4dEZpZWxkVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBUZXh0RmllbGRSb290ID0gc3R5bGVkKEZvcm1Db250cm9sLCB7XG4gIG5hbWU6ICdNdWlUZXh0RmllbGQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHt9KTtcblxuLyoqXG4gKiBUaGUgYFRleHRGaWVsZGAgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGZvciB0aGUgbW9zdCBjb21tb24gY2FzZXMgKDgwJSkuXG4gKiBJdCBjYW5ub3QgYmUgYWxsIHRoaW5ncyB0byBhbGwgcGVvcGxlLCBvdGhlcndpc2UgdGhlIEFQSSB3b3VsZCBncm93IG91dCBvZiBjb250cm9sLlxuICpcbiAqICMjIEFkdmFuY2VkIENvbmZpZ3VyYXRpb25cbiAqXG4gKiBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoYXQgdGhlIHRleHQgZmllbGQgaXMgYSBzaW1wbGUgYWJzdHJhY3Rpb25cbiAqIG9uIHRvcCBvZiB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKlxuICogLSBbRm9ybUNvbnRyb2xdKC9tYXRlcmlhbC11aS9hcGkvZm9ybS1jb250cm9sLylcbiAqIC0gW0lucHV0TGFiZWxdKC9tYXRlcmlhbC11aS9hcGkvaW5wdXQtbGFiZWwvKVxuICogLSBbRmlsbGVkSW5wdXRdKC9tYXRlcmlhbC11aS9hcGkvZmlsbGVkLWlucHV0LylcbiAqIC0gW091dGxpbmVkSW5wdXRdKC9tYXRlcmlhbC11aS9hcGkvb3V0bGluZWQtaW5wdXQvKVxuICogLSBbSW5wdXRdKC9tYXRlcmlhbC11aS9hcGkvaW5wdXQvKVxuICogLSBbRm9ybUhlbHBlclRleHRdKC9tYXRlcmlhbC11aS9hcGkvZm9ybS1oZWxwZXItdGV4dC8pXG4gKlxuICogSWYgeW91IHdpc2ggdG8gYWx0ZXIgdGhlIHByb3BzIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudCwgeW91IGNhbiBkbyBzbyBhcyBmb2xsb3dzOlxuICpcbiAqIGBgYGpzeFxuICogY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAqICAgc3RlcDogMzAwLFxuICogfTtcbiAqXG4gKiByZXR1cm4gPFRleHRGaWVsZCBpZD1cInRpbWVcIiB0eXBlPVwidGltZVwiIGlucHV0UHJvcHM9e2lucHV0UHJvcHN9IC8+O1xuICogYGBgXG4gKlxuICogRm9yIGFkdmFuY2VkIGNhc2VzLCBwbGVhc2UgbG9vayBhdCB0aGUgc291cmNlIG9mIFRleHRGaWVsZCBieSBjbGlja2luZyBvbiB0aGVcbiAqIFwiRWRpdCB0aGlzIHBhZ2VcIiBidXR0b24gYWJvdmUuIENvbnNpZGVyIGVpdGhlcjpcbiAqXG4gKiAtIHVzaW5nIHRoZSB1cHBlciBjYXNlIHByb3BzIGZvciBwYXNzaW5nIHZhbHVlcyBkaXJlY3RseSB0byB0aGUgY29tcG9uZW50c1xuICogLSB1c2luZyB0aGUgdW5kZXJseWluZyBjb21wb25lbnRzIGRpcmVjdGx5IGFzIHNob3duIGluIHRoZSBkZW1vc1xuICovXG5jb25zdCBUZXh0RmllbGQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUZXh0RmllbGQoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVRleHRGaWVsZCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGF1dG9Db21wbGV0ZSxcbiAgICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBlcnJvciA9IGZhbHNlLFxuICAgICAgRm9ybUhlbHBlclRleHRQcm9wcyxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgaGVscGVyVGV4dCxcbiAgICAgIGlkOiBpZE92ZXJyaWRlLFxuICAgICAgSW5wdXRMYWJlbFByb3BzLFxuICAgICAgaW5wdXRQcm9wcyxcbiAgICAgIElucHV0UHJvcHMsXG4gICAgICBpbnB1dFJlZixcbiAgICAgIGxhYmVsLFxuICAgICAgbWF4Um93cyxcbiAgICAgIG1pblJvd3MsXG4gICAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICAgIG5hbWUsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHJlcXVpcmVkID0gZmFsc2UsXG4gICAgICByb3dzLFxuICAgICAgc2VsZWN0ID0gZmFsc2UsXG4gICAgICBTZWxlY3RQcm9wcyxcbiAgICAgIHR5cGUsXG4gICAgICB2YWx1ZSxcbiAgICAgIHZhcmlhbnQgPSAnb3V0bGluZWQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhdXRvRm9jdXMsXG4gICAgY29sb3IsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZnVsbFdpZHRoLFxuICAgIG11bHRpbGluZSxcbiAgICByZXF1aXJlZCxcbiAgICBzZWxlY3QsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChzZWxlY3QgJiYgIWNoaWxkcmVuKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNVUk6IGBjaGlsZHJlbmAgbXVzdCBiZSBwYXNzZWQgd2hlbiB1c2luZyB0aGUgYFRleHRGaWVsZGAgY29tcG9uZW50IHdpdGggYHNlbGVjdGAuJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IElucHV0TW9yZSA9IHt9O1xuICBpZiAodmFyaWFudCA9PT0gJ291dGxpbmVkJykge1xuICAgIGlmIChJbnB1dExhYmVsUHJvcHMgJiYgdHlwZW9mIElucHV0TGFiZWxQcm9wcy5zaHJpbmsgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBJbnB1dE1vcmUubm90Y2hlZCA9IElucHV0TGFiZWxQcm9wcy5zaHJpbms7XG4gICAgfVxuICAgIElucHV0TW9yZS5sYWJlbCA9IGxhYmVsO1xuICB9XG4gIGlmIChzZWxlY3QpIHtcbiAgICAvLyB1bnNldCBkZWZhdWx0cyBmcm9tIHRleHRib3ggaW5wdXRzXG4gICAgaWYgKCFTZWxlY3RQcm9wcyB8fCAhU2VsZWN0UHJvcHMubmF0aXZlKSB7XG4gICAgICBJbnB1dE1vcmUuaWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIElucHV0TW9yZVsnYXJpYS1kZXNjcmliZWRieSddID0gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGlkID0gdXNlSWQoaWRPdmVycmlkZSk7XG4gIGNvbnN0IGhlbHBlclRleHRJZCA9IGhlbHBlclRleHQgJiYgaWQgPyBgJHtpZH0taGVscGVyLXRleHRgIDogdW5kZWZpbmVkO1xuICBjb25zdCBpbnB1dExhYmVsSWQgPSBsYWJlbCAmJiBpZCA/IGAke2lkfS1sYWJlbGAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IElucHV0Q29tcG9uZW50ID0gdmFyaWFudENvbXBvbmVudFt2YXJpYW50XTtcbiAgY29uc3QgSW5wdXRFbGVtZW50ID0gLyojX19QVVJFX18qL19qc3goSW5wdXRDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogaGVscGVyVGV4dElkLFxuICAgIGF1dG9Db21wbGV0ZTogYXV0b0NvbXBsZXRlLFxuICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgIG11bHRpbGluZTogbXVsdGlsaW5lLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgcm93czogcm93cyxcbiAgICBtYXhSb3dzOiBtYXhSb3dzLFxuICAgIG1pblJvd3M6IG1pblJvd3MsXG4gICAgdHlwZTogdHlwZSxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgaWQ6IGlkLFxuICAgIGlucHV0UmVmOiBpbnB1dFJlZixcbiAgICBvbkJsdXI6IG9uQmx1cixcbiAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgaW5wdXRQcm9wczogaW5wdXRQcm9wc1xuICB9LCBJbnB1dE1vcmUsIElucHV0UHJvcHMpKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhUZXh0RmllbGRSb290LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgZXJyb3I6IGVycm9yLFxuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgIHJlZjogcmVmLFxuICAgIHJlcXVpcmVkOiByZXF1aXJlZCxcbiAgICBjb2xvcjogY29sb3IsXG4gICAgdmFyaWFudDogdmFyaWFudCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtsYWJlbCAhPSBudWxsICYmIGxhYmVsICE9PSAnJyAmJiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dExhYmVsLCBfZXh0ZW5kcyh7XG4gICAgICBodG1sRm9yOiBpZCxcbiAgICAgIGlkOiBpbnB1dExhYmVsSWRcbiAgICB9LCBJbnB1dExhYmVsUHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBsYWJlbFxuICAgIH0pKSwgc2VsZWN0ID8gLyojX19QVVJFX18qL19qc3goU2VsZWN0LCBfZXh0ZW5kcyh7XG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogaGVscGVyVGV4dElkLFxuICAgICAgaWQ6IGlkLFxuICAgICAgbGFiZWxJZDogaW5wdXRMYWJlbElkLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgaW5wdXQ6IElucHV0RWxlbWVudFxuICAgIH0sIFNlbGVjdFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSkgOiBJbnB1dEVsZW1lbnQsIGhlbHBlclRleHQgJiYgLyojX19QVVJFX18qL19qc3goRm9ybUhlbHBlclRleHQsIF9leHRlbmRzKHtcbiAgICAgIGlkOiBoZWxwZXJUZXh0SWRcbiAgICB9LCBGb3JtSGVscGVyVGV4dFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogaGVscGVyVGV4dFxuICAgIH0pKV1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUZXh0RmllbGQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BGb3JtSGVscGVyVGV4dGBdKC9tYXRlcmlhbC11aS9hcGkvZm9ybS1oZWxwZXItdGV4dC8pIGVsZW1lbnQuXG4gICAqL1xuICBGb3JtSGVscGVyVGV4dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgaW5wdXQgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGhlbHBlciB0ZXh0IGNvbnRlbnQuXG4gICAqL1xuICBoZWxwZXJUZXh0OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBVc2UgdGhpcyBwcm9wIHRvIG1ha2UgYGxhYmVsYCBhbmQgYGhlbHBlclRleHRgIGFjY2Vzc2libGUgZm9yIHNjcmVlbiByZWFkZXJzLlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYElucHV0TGFiZWxgXSgvbWF0ZXJpYWwtdWkvYXBpL2lucHV0LWxhYmVsLykgZWxlbWVudC5cbiAgICogUG9pbnRlciBldmVudHMgbGlrZSBgb25DbGlja2AgYXJlIGVuYWJsZWQgaWYgYW5kIG9ubHkgaWYgYHNocmlua2AgaXMgYHRydWVgLlxuICAgKi9cbiAgSW5wdXRMYWJlbFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgSW5wdXQgZWxlbWVudC5cbiAgICogSXQgd2lsbCBiZSBhIFtgRmlsbGVkSW5wdXRgXSgvbWF0ZXJpYWwtdWkvYXBpL2ZpbGxlZC1pbnB1dC8pLFxuICAgKiBbYE91dGxpbmVkSW5wdXRgXSgvbWF0ZXJpYWwtdWkvYXBpL291dGxpbmVkLWlucHV0Lykgb3IgW2BJbnB1dGBdKC9tYXRlcmlhbC11aS9hcGkvaW5wdXQvKVxuICAgKiBjb21wb25lbnQgZGVwZW5kaW5nIG9uIHRoZSBgdmFyaWFudGAgcHJvcCB2YWx1ZS5cbiAgICovXG4gIElucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIFRoZSBsYWJlbCBjb250ZW50LlxuICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCBvciBgbm9ybWFsYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZyBvZiB0aGlzIGFuZCBjb250YWluZWQgY29tcG9uZW50cy5cbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnLCAnbm9ybWFsJ10pLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgYHRleHRhcmVhYCBlbGVtZW50IGlzIHJlbmRlcmVkIGluc3RlYWQgb2YgYW4gaW5wdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgYXMgcmVxdWlyZWQgYW5kIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIHJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFJlbmRlciBhIFtgU2VsZWN0YF0oL21hdGVyaWFsLXVpL2FwaS9zZWxlY3QvKSBlbGVtZW50IHdoaWxlIHBhc3NpbmcgdGhlIElucHV0IGVsZW1lbnQgdG8gYFNlbGVjdGAgYXMgYGlucHV0YCBwYXJhbWV0ZXIuXG4gICAqIElmIHRoaXMgb3B0aW9uIGlzIHNldCB5b3UgbXVzdCBwYXNzIHRoZSBvcHRpb25zIG9mIHRoZSBzZWxlY3QgYXMgY2hpbGRyZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzZWxlY3Q6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BTZWxlY3RgXSgvbWF0ZXJpYWwtdWkvYXBpL3NlbGVjdC8pIGVsZW1lbnQuXG4gICAqL1xuICBTZWxlY3RQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ21lZGl1bScsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8uc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFRleHRGaWVsZDsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9vbGJhclV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVG9vbGJhcicsIHNsb3QpO1xufVxuY29uc3QgdG9vbGJhckNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUb29sYmFyJywgWydyb290JywgJ2d1dHRlcnMnLCAncmVndWxhcicsICdkZW5zZSddKTtcbmV4cG9ydCBkZWZhdWx0IHRvb2xiYXJDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVHdXR0ZXJzXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRUb29sYmFyVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi90b29sYmFyQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZUd1dHRlcnMsXG4gICAgdmFyaWFudFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVHdXR0ZXJzICYmICdndXR0ZXJzJywgdmFyaWFudF1cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUb29sYmFyVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBUb29sYmFyUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpVG9vbGJhcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiBzdHlsZXMuZ3V0dGVycywgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJ1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYge1xuICBwYWRkaW5nTGVmdDogdGhlbWUuc3BhY2luZygyKSxcbiAgcGFkZGluZ1JpZ2h0OiB0aGVtZS5zcGFjaW5nKDIpLFxuICBbdGhlbWUuYnJlYWtwb2ludHMudXAoJ3NtJyldOiB7XG4gICAgcGFkZGluZ0xlZnQ6IHRoZW1lLnNwYWNpbmcoMyksXG4gICAgcGFkZGluZ1JpZ2h0OiB0aGVtZS5zcGFjaW5nKDMpXG4gIH1cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2RlbnNlJyAmJiB7XG4gIG1pbkhlaWdodDogNDhcbn0pLCAoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gb3duZXJTdGF0ZS52YXJpYW50ID09PSAncmVndWxhcicgJiYgdGhlbWUubWl4aW5zLnRvb2xiYXIpO1xuY29uc3QgVG9vbGJhciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRvb2xiYXIoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVRvb2xiYXInXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGRpc2FibGVHdXR0ZXJzID0gZmFsc2UsXG4gICAgICB2YXJpYW50ID0gJ3JlZ3VsYXInXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZUd1dHRlcnMsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVG9vbGJhclJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiByZWYsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUb29sYmFyLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBUb29sYmFyIGNoaWxkcmVuLCB1c3VhbGx5IGEgbWl4dHVyZSBvZiBgSWNvbkJ1dHRvbmAsIGBCdXR0b25gIGFuZCBgVHlwb2dyYXBoeWAuXG4gICAqIFRoZSBUb29sYmFyIGlzIGEgZmxleCBjb250YWluZXIsIGFsbG93aW5nIGZsZXggaXRlbSBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgdG8gbGF5IG91dCB0aGUgY2hpbGRyZW4uXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGRpc2FibGVzIGd1dHRlciBwYWRkaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUd1dHRlcnM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCAncmVndWxhcidcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAncmVndWxhciddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVG9vbGJhcjsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVHlwb2dyYXBoeScsIHNsb3QpO1xufVxuY29uc3QgdHlwb2dyYXBoeUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUeXBvZ3JhcGh5JywgWydyb290JywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInLCAnYm9keTEnLCAnYm9keTInLCAnaW5oZXJpdCcsICdidXR0b24nLCAnY2FwdGlvbicsICdvdmVybGluZScsICdhbGlnbkxlZnQnLCAnYWxpZ25SaWdodCcsICdhbGlnbkNlbnRlcicsICdhbGlnbkp1c3RpZnknLCAnbm9XcmFwJywgJ2d1dHRlckJvdHRvbScsICdwYXJhZ3JhcGgnXSk7XG5leHBvcnQgZGVmYXVsdCB0eXBvZ3JhcGh5Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhbGlnblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImd1dHRlckJvdHRvbVwiLCBcIm5vV3JhcFwiLCBcInBhcmFncmFwaFwiLCBcInZhcmlhbnRcIiwgXCJ2YXJpYW50TWFwcGluZ1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2V4dGVuZFN4UHJvcCBhcyBleHRlbmRTeFByb3AgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi90eXBvZ3JhcGh5Q2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGFsaWduLFxuICAgIGd1dHRlckJvdHRvbSxcbiAgICBub1dyYXAsXG4gICAgcGFyYWdyYXBoLFxuICAgIHZhcmlhbnQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIGBhbGlnbiR7Y2FwaXRhbGl6ZShhbGlnbil9YCwgZ3V0dGVyQm90dG9tICYmICdndXR0ZXJCb3R0b20nLCBub1dyYXAgJiYgJ25vV3JhcCcsIHBhcmFncmFwaCAmJiAncGFyYWdyYXBoJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgVHlwb2dyYXBoeVJvb3QgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlUeXBvZ3JhcGh5JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUudmFyaWFudCAmJiBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIHN0eWxlc1tgYWxpZ24ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5hbGlnbil9YF0sIG93bmVyU3RhdGUubm9XcmFwICYmIHN0eWxlcy5ub1dyYXAsIG93bmVyU3RhdGUuZ3V0dGVyQm90dG9tICYmIHN0eWxlcy5ndXR0ZXJCb3R0b20sIG93bmVyU3RhdGUucGFyYWdyYXBoICYmIHN0eWxlcy5wYXJhZ3JhcGhdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBtYXJnaW46IDBcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luaGVyaXQnICYmIHtcbiAgLy8gU29tZSBlbGVtZW50cywgbGlrZSA8YnV0dG9uPiBvbiBDaHJvbWUgaGF2ZSBkZWZhdWx0IGZvbnQgdGhhdCBkb2Vzbid0IGluaGVyaXQsIHJlc2V0IHRoaXMuXG4gIGZvbnQ6ICdpbmhlcml0J1xufSwgb3duZXJTdGF0ZS52YXJpYW50ICE9PSAnaW5oZXJpdCcgJiYgdGhlbWUudHlwb2dyYXBoeVtvd25lclN0YXRlLnZhcmlhbnRdLCBvd25lclN0YXRlLmFsaWduICE9PSAnaW5oZXJpdCcgJiYge1xuICB0ZXh0QWxpZ246IG93bmVyU3RhdGUuYWxpZ25cbn0sIG93bmVyU3RhdGUubm9XcmFwICYmIHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnXG59LCBvd25lclN0YXRlLmd1dHRlckJvdHRvbSAmJiB7XG4gIG1hcmdpbkJvdHRvbTogJzAuMzVlbSdcbn0sIG93bmVyU3RhdGUucGFyYWdyYXBoICYmIHtcbiAgbWFyZ2luQm90dG9tOiAxNlxufSkpO1xuY29uc3QgZGVmYXVsdFZhcmlhbnRNYXBwaW5nID0ge1xuICBoMTogJ2gxJyxcbiAgaDI6ICdoMicsXG4gIGgzOiAnaDMnLFxuICBoNDogJ2g0JyxcbiAgaDU6ICdoNScsXG4gIGg2OiAnaDYnLFxuICBzdWJ0aXRsZTE6ICdoNicsXG4gIHN1YnRpdGxlMjogJ2g2JyxcbiAgYm9keTE6ICdwJyxcbiAgYm9keTI6ICdwJyxcbiAgaW5oZXJpdDogJ3AnXG59O1xuXG4vLyBUT0RPIHY2OiBkZXByZWNhdGUgdGhlc2UgY29sb3IgdmFsdWVzIGluIHY1LnggYW5kIHJlbW92ZSB0aGUgdHJhbnNmb3JtYXRpb24gaW4gdjZcbmNvbnN0IGNvbG9yVHJhbnNmb3JtYXRpb25zID0ge1xuICBwcmltYXJ5OiAncHJpbWFyeS5tYWluJyxcbiAgdGV4dFByaW1hcnk6ICd0ZXh0LnByaW1hcnknLFxuICBzZWNvbmRhcnk6ICdzZWNvbmRhcnkubWFpbicsXG4gIHRleHRTZWNvbmRhcnk6ICd0ZXh0LnNlY29uZGFyeScsXG4gIGVycm9yOiAnZXJyb3IubWFpbidcbn07XG5jb25zdCB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzID0gY29sb3IgPT4ge1xuICByZXR1cm4gY29sb3JUcmFuc2Zvcm1hdGlvbnNbY29sb3JdIHx8IGNvbG9yO1xufTtcbmNvbnN0IFR5cG9ncmFwaHkgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUeXBvZ3JhcGh5KGluUHJvcHMsIHJlZikge1xuICBjb25zdCB0aGVtZVByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVR5cG9ncmFwaHknXG4gIH0pO1xuICBjb25zdCBjb2xvciA9IHRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnModGhlbWVQcm9wcy5jb2xvcik7XG4gIGNvbnN0IHByb3BzID0gZXh0ZW5kU3hQcm9wKF9leHRlbmRzKHt9LCB0aGVtZVByb3BzLCB7XG4gICAgY29sb3JcbiAgfSkpO1xuICBjb25zdCB7XG4gICAgICBhbGlnbiA9ICdpbmhlcml0JyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGd1dHRlckJvdHRvbSA9IGZhbHNlLFxuICAgICAgbm9XcmFwID0gZmFsc2UsXG4gICAgICBwYXJhZ3JhcGggPSBmYWxzZSxcbiAgICAgIHZhcmlhbnQgPSAnYm9keTEnLFxuICAgICAgdmFyaWFudE1hcHBpbmcgPSBkZWZhdWx0VmFyaWFudE1hcHBpbmdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGFsaWduLFxuICAgIGNvbG9yLFxuICAgIGNsYXNzTmFtZSxcbiAgICBjb21wb25lbnQsXG4gICAgZ3V0dGVyQm90dG9tLFxuICAgIG5vV3JhcCxcbiAgICBwYXJhZ3JhcGgsXG4gICAgdmFyaWFudCxcbiAgICB2YXJpYW50TWFwcGluZ1xuICB9KTtcbiAgY29uc3QgQ29tcG9uZW50ID0gY29tcG9uZW50IHx8IChwYXJhZ3JhcGggPyAncCcgOiB2YXJpYW50TWFwcGluZ1t2YXJpYW50XSB8fCBkZWZhdWx0VmFyaWFudE1hcHBpbmdbdmFyaWFudF0pIHx8ICdzcGFuJztcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHlwb2dyYXBoeVJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogQ29tcG9uZW50LFxuICAgIHJlZjogcmVmLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUeXBvZ3JhcGh5LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFNldCB0aGUgdGV4dC1hbGlnbiBvbiB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIGFsaWduOiBQcm9wVHlwZXMub25lT2YoWydjZW50ZXInLCAnaW5oZXJpdCcsICdqdXN0aWZ5JywgJ2xlZnQnLCAncmlnaHQnXSksXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdGV4dCB3aWxsIGhhdmUgYSBib3R0b20gbWFyZ2luLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZ3V0dGVyQm90dG9tOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRleHQgd2lsbCBub3Qgd3JhcCwgYnV0IGluc3RlYWQgd2lsbCB0cnVuY2F0ZSB3aXRoIGEgdGV4dCBvdmVyZmxvdyBlbGxpcHNpcy5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRleHQgb3ZlcmZsb3cgY2FuIG9ubHkgaGFwcGVuIHdpdGggYmxvY2sgb3IgaW5saW5lLWJsb2NrIGxldmVsIGVsZW1lbnRzXG4gICAqICh0aGUgZWxlbWVudCBuZWVkcyB0byBoYXZlIGEgd2lkdGggaW4gb3JkZXIgdG8gb3ZlcmZsb3cpLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbm9XcmFwOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGVsZW1lbnQgd2lsbCBiZSBhIHBhcmFncmFwaCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcGFyYWdyYXBoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIHRoZW1lIHR5cG9ncmFwaHkgc3R5bGVzLlxuICAgKiBAZGVmYXVsdCAnYm9keTEnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2JvZHkxJywgJ2JvZHkyJywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2luaGVyaXQnLCAnb3ZlcmxpbmUnLCAnc3VidGl0bGUxJywgJ3N1YnRpdGxlMiddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCBtYXBzIHRoZSB2YXJpYW50IHByb3AgdG8gYSByYW5nZSBvZiBkaWZmZXJlbnQgSFRNTCBlbGVtZW50IHR5cGVzLlxuICAgKiBGb3IgaW5zdGFuY2UsIHN1YnRpdGxlMSB0byBgPGg2PmAuXG4gICAqIElmIHlvdSB3aXNoIHRvIGNoYW5nZSB0aGF0IG1hcHBpbmcsIHlvdSBjYW4gcHJvdmlkZSB5b3VyIG93bi5cbiAgICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlIGBjb21wb25lbnRgIHByb3AuXG4gICAqIEBkZWZhdWx0IHtcbiAgICogICBoMTogJ2gxJyxcbiAgICogICBoMjogJ2gyJyxcbiAgICogICBoMzogJ2gzJyxcbiAgICogICBoNDogJ2g0JyxcbiAgICogICBoNTogJ2g1JyxcbiAgICogICBoNjogJ2g2JyxcbiAgICogICBzdWJ0aXRsZTE6ICdoNicsXG4gICAqICAgc3VidGl0bGUyOiAnaDYnLFxuICAgKiAgIGJvZHkxOiAncCcsXG4gICAqICAgYm9keTI6ICdwJyxcbiAgICogICBpbmhlcml0OiAncCcsXG4gICAqIH1cbiAgICovXG4gIHZhcmlhbnRNYXBwaW5nOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vYmplY3Rcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUeXBvZ3JhcGh5OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTYgMTBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0xMiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptLTYgMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6XCJcbn0pLCAnTW9yZUhvcml6Jyk7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1widGhlbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVGhlbWVQcm92aWRlciBhcyBTeXN0ZW1UaGVtZVByb3ZpZGVyIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGhlbWVQcm92aWRlcihfcmVmKSB7XG4gIGxldCB7XG4gICAgICB0aGVtZTogdGhlbWVJbnB1dFxuICAgIH0gPSBfcmVmLFxuICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgc2NvcGVkVGhlbWUgPSB0aGVtZUlucHV0W1RIRU1FX0lEXTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFN5c3RlbVRoZW1lUHJvdmlkZXIsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIHRoZW1lSWQ6IHNjb3BlZFRoZW1lID8gVEhFTUVfSUQgOiB1bmRlZmluZWQsXG4gICAgdGhlbWU6IHNjb3BlZFRoZW1lIHx8IHRoZW1lSW5wdXRcbiAgfSkpO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVGhlbWVQcm92aWRlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBZb3VyIGNvbXBvbmVudCB0cmVlLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogQSB0aGVtZSBvYmplY3QuIFlvdSBjYW4gcHJvdmlkZSBhIGZ1bmN0aW9uIHRvIGV4dGVuZCB0aGUgb3V0ZXIgdGhlbWUuXG4gICAqL1xuICB0aGVtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmZ1bmNdKS5pc1JlcXVpcmVkXG59IDogdm9pZCAwOyIsImNvbnN0IGNvbW1vbiA9IHtcbiAgYmxhY2s6ICcjMDAwJyxcbiAgd2hpdGU6ICcjZmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1vbjsiLCJjb25zdCBncmV5ID0ge1xuICA1MDogJyNmYWZhZmEnLFxuICAxMDA6ICcjZjVmNWY1JyxcbiAgMjAwOiAnI2VlZWVlZScsXG4gIDMwMDogJyNlMGUwZTAnLFxuICA0MDA6ICcjYmRiZGJkJyxcbiAgNTAwOiAnIzllOWU5ZScsXG4gIDYwMDogJyM3NTc1NzUnLFxuICA3MDA6ICcjNjE2MTYxJyxcbiAgODAwOiAnIzQyNDI0MicsXG4gIDkwMDogJyMyMTIxMjEnLFxuICBBMTAwOiAnI2Y1ZjVmNScsXG4gIEEyMDA6ICcjZWVlZWVlJyxcbiAgQTQwMDogJyNiZGJkYmQnLFxuICBBNzAwOiAnIzYxNjE2MSdcbn07XG5leHBvcnQgZGVmYXVsdCBncmV5OyIsImNvbnN0IHB1cnBsZSA9IHtcbiAgNTA6ICcjZjNlNWY1JyxcbiAgMTAwOiAnI2UxYmVlNycsXG4gIDIwMDogJyNjZTkzZDgnLFxuICAzMDA6ICcjYmE2OGM4JyxcbiAgNDAwOiAnI2FiNDdiYycsXG4gIDUwMDogJyM5YzI3YjAnLFxuICA2MDA6ICcjOGUyNGFhJyxcbiAgNzAwOiAnIzdiMWZhMicsXG4gIDgwMDogJyM2YTFiOWEnLFxuICA5MDA6ICcjNGExNDhjJyxcbiAgQTEwMDogJyNlYTgwZmMnLFxuICBBMjAwOiAnI2UwNDBmYicsXG4gIEE0MDA6ICcjZDUwMGY5JyxcbiAgQTcwMDogJyNhYTAwZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgcHVycGxlOyIsImNvbnN0IHJlZCA9IHtcbiAgNTA6ICcjZmZlYmVlJyxcbiAgMTAwOiAnI2ZmY2RkMicsXG4gIDIwMDogJyNlZjlhOWEnLFxuICAzMDA6ICcjZTU3MzczJyxcbiAgNDAwOiAnI2VmNTM1MCcsXG4gIDUwMDogJyNmNDQzMzYnLFxuICA2MDA6ICcjZTUzOTM1JyxcbiAgNzAwOiAnI2QzMmYyZicsXG4gIDgwMDogJyNjNjI4MjgnLFxuICA5MDA6ICcjYjcxYzFjJyxcbiAgQTEwMDogJyNmZjhhODAnLFxuICBBMjAwOiAnI2ZmNTI1MicsXG4gIEE0MDA6ICcjZmYxNzQ0JyxcbiAgQTcwMDogJyNkNTAwMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgcmVkOyIsImNvbnN0IG9yYW5nZSA9IHtcbiAgNTA6ICcjZmZmM2UwJyxcbiAgMTAwOiAnI2ZmZTBiMicsXG4gIDIwMDogJyNmZmNjODAnLFxuICAzMDA6ICcjZmZiNzRkJyxcbiAgNDAwOiAnI2ZmYTcyNicsXG4gIDUwMDogJyNmZjk4MDAnLFxuICA2MDA6ICcjZmI4YzAwJyxcbiAgNzAwOiAnI2Y1N2MwMCcsXG4gIDgwMDogJyNlZjZjMDAnLFxuICA5MDA6ICcjZTY1MTAwJyxcbiAgQTEwMDogJyNmZmQxODAnLFxuICBBMjAwOiAnI2ZmYWI0MCcsXG4gIEE0MDA6ICcjZmY5MTAwJyxcbiAgQTcwMDogJyNmZjZkMDAnXG59O1xuZXhwb3J0IGRlZmF1bHQgb3JhbmdlOyIsImNvbnN0IGJsdWUgPSB7XG4gIDUwOiAnI2UzZjJmZCcsXG4gIDEwMDogJyNiYmRlZmInLFxuICAyMDA6ICcjOTBjYWY5JyxcbiAgMzAwOiAnIzY0YjVmNicsXG4gIDQwMDogJyM0MmE1ZjUnLFxuICA1MDA6ICcjMjE5NmYzJyxcbiAgNjAwOiAnIzFlODhlNScsXG4gIDcwMDogJyMxOTc2ZDInLFxuICA4MDA6ICcjMTU2NWMwJyxcbiAgOTAwOiAnIzBkNDdhMScsXG4gIEExMDA6ICcjODJiMWZmJyxcbiAgQTIwMDogJyM0NDhhZmYnLFxuICBBNDAwOiAnIzI5NzlmZicsXG4gIEE3MDA6ICcjMjk2MmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGJsdWU7IiwiY29uc3QgbGlnaHRCbHVlID0ge1xuICA1MDogJyNlMWY1ZmUnLFxuICAxMDA6ICcjYjNlNWZjJyxcbiAgMjAwOiAnIzgxZDRmYScsXG4gIDMwMDogJyM0ZmMzZjcnLFxuICA0MDA6ICcjMjliNmY2JyxcbiAgNTAwOiAnIzAzYTlmNCcsXG4gIDYwMDogJyMwMzliZTUnLFxuICA3MDA6ICcjMDI4OGQxJyxcbiAgODAwOiAnIzAyNzdiZCcsXG4gIDkwMDogJyMwMTU3OWInLFxuICBBMTAwOiAnIzgwZDhmZicsXG4gIEEyMDA6ICcjNDBjNGZmJyxcbiAgQTQwMDogJyMwMGIwZmYnLFxuICBBNzAwOiAnIzAwOTFlYSdcbn07XG5leHBvcnQgZGVmYXVsdCBsaWdodEJsdWU7IiwiY29uc3QgZ3JlZW4gPSB7XG4gIDUwOiAnI2U4ZjVlOScsXG4gIDEwMDogJyNjOGU2YzknLFxuICAyMDA6ICcjYTVkNmE3JyxcbiAgMzAwOiAnIzgxYzc4NCcsXG4gIDQwMDogJyM2NmJiNmEnLFxuICA1MDA6ICcjNGNhZjUwJyxcbiAgNjAwOiAnIzQzYTA0NycsXG4gIDcwMDogJyMzODhlM2MnLFxuICA4MDA6ICcjMmU3ZDMyJyxcbiAgOTAwOiAnIzFiNWUyMCcsXG4gIEExMDA6ICcjYjlmNmNhJyxcbiAgQTIwMDogJyM2OWYwYWUnLFxuICBBNDAwOiAnIzAwZTY3NicsXG4gIEE3MDA6ICcjMDBjODUzJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGdyZWVuOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgeyBmb3JtYXRNdWlFcnJvck1lc3NhZ2UgYXMgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSB9IGZyb20gXCJAbXVpL3V0aWxzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJtb2RlXCIsIFwiY29udHJhc3RUaHJlc2hvbGRcIiwgXCJ0b25hbE9mZnNldFwiXTtcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgZGFya2VuLCBnZXRDb250cmFzdFJhdGlvLCBsaWdodGVuIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGNvbW1vbiBmcm9tICcuLi9jb2xvcnMvY29tbW9uJztcbmltcG9ydCBncmV5IGZyb20gJy4uL2NvbG9ycy9ncmV5JztcbmltcG9ydCBwdXJwbGUgZnJvbSAnLi4vY29sb3JzL3B1cnBsZSc7XG5pbXBvcnQgcmVkIGZyb20gJy4uL2NvbG9ycy9yZWQnO1xuaW1wb3J0IG9yYW5nZSBmcm9tICcuLi9jb2xvcnMvb3JhbmdlJztcbmltcG9ydCBibHVlIGZyb20gJy4uL2NvbG9ycy9ibHVlJztcbmltcG9ydCBsaWdodEJsdWUgZnJvbSAnLi4vY29sb3JzL2xpZ2h0Qmx1ZSc7XG5pbXBvcnQgZ3JlZW4gZnJvbSAnLi4vY29sb3JzL2dyZWVuJztcbmV4cG9ydCBjb25zdCBsaWdodCA9IHtcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSB0ZXh0LlxuICB0ZXh0OiB7XG4gICAgLy8gVGhlIG1vc3QgaW1wb3J0YW50IHRleHQuXG4gICAgcHJpbWFyeTogJ3JnYmEoMCwgMCwgMCwgMC44NyknLFxuICAgIC8vIFNlY29uZGFyeSB0ZXh0LlxuICAgIHNlY29uZGFyeTogJ3JnYmEoMCwgMCwgMCwgMC42KScsXG4gICAgLy8gRGlzYWJsZWQgdGV4dCBoYXZlIGV2ZW4gbG93ZXIgdmlzdWFsIHByb21pbmVuY2UuXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMzgpJ1xuICB9LFxuICAvLyBUaGUgY29sb3IgdXNlZCB0byBkaXZpZGUgZGlmZmVyZW50IGVsZW1lbnRzLlxuICBkaXZpZGVyOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gIC8vIFRoZSBiYWNrZ3JvdW5kIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBzdXJmYWNlcy5cbiAgLy8gQ29uc2lzdGVuY3kgYmV0d2VlbiB0aGVzZSB2YWx1ZXMgaXMgaW1wb3J0YW50LlxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6IGNvbW1vbi53aGl0ZSxcbiAgICBkZWZhdWx0OiBjb21tb24ud2hpdGVcbiAgfSxcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBhY3Rpb24gZWxlbWVudHMuXG4gIGFjdGlvbjoge1xuICAgIC8vIFRoZSBjb2xvciBvZiBhbiBhY3RpdmUgYWN0aW9uIGxpa2UgYW4gaWNvbiBidXR0b24uXG4gICAgYWN0aXZlOiAncmdiYSgwLCAwLCAwLCAwLjU0KScsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGFuIGhvdmVyZWQgYWN0aW9uLlxuICAgIGhvdmVyOiAncmdiYSgwLCAwLCAwLCAwLjA0KScsXG4gICAgaG92ZXJPcGFjaXR5OiAwLjA0LFxuICAgIC8vIFRoZSBjb2xvciBvZiBhIHNlbGVjdGVkIGFjdGlvbi5cbiAgICBzZWxlY3RlZDogJ3JnYmEoMCwgMCwgMCwgMC4wOCknLFxuICAgIHNlbGVjdGVkT3BhY2l0eTogMC4wOCxcbiAgICAvLyBUaGUgY29sb3Igb2YgYSBkaXNhYmxlZCBhY3Rpb24uXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMjYpJyxcbiAgICAvLyBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiBhIGRpc2FibGVkIGFjdGlvbi5cbiAgICBkaXNhYmxlZEJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBkaXNhYmxlZE9wYWNpdHk6IDAuMzgsXG4gICAgZm9jdXM6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBmb2N1c09wYWNpdHk6IDAuMTIsXG4gICAgYWN0aXZhdGVkT3BhY2l0eTogMC4xMlxuICB9XG59O1xuZXhwb3J0IGNvbnN0IGRhcmsgPSB7XG4gIHRleHQ6IHtcbiAgICBwcmltYXJ5OiBjb21tb24ud2hpdGUsXG4gICAgc2Vjb25kYXJ5OiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJyxcbiAgICBkaXNhYmxlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KScsXG4gICAgaWNvbjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSdcbiAgfSxcbiAgZGl2aWRlcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6ICcjMTIxMjEyJyxcbiAgICBkZWZhdWx0OiAnIzEyMTIxMidcbiAgfSxcbiAgYWN0aW9uOiB7XG4gICAgYWN0aXZlOiBjb21tb24ud2hpdGUsXG4gICAgaG92ZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpJyxcbiAgICBob3Zlck9wYWNpdHk6IDAuMDgsXG4gICAgc2VsZWN0ZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpJyxcbiAgICBzZWxlY3RlZE9wYWNpdHk6IDAuMTYsXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyknLFxuICAgIGRpc2FibGVkQmFja2dyb3VuZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGRpc2FibGVkT3BhY2l0eTogMC4zOCxcbiAgICBmb2N1czogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGZvY3VzT3BhY2l0eTogMC4xMixcbiAgICBhY3RpdmF0ZWRPcGFjaXR5OiAwLjI0XG4gIH1cbn07XG5mdW5jdGlvbiBhZGRMaWdodE9yRGFyayhpbnRlbnQsIGRpcmVjdGlvbiwgc2hhZGUsIHRvbmFsT2Zmc2V0KSB7XG4gIGNvbnN0IHRvbmFsT2Zmc2V0TGlnaHQgPSB0b25hbE9mZnNldC5saWdodCB8fCB0b25hbE9mZnNldDtcbiAgY29uc3QgdG9uYWxPZmZzZXREYXJrID0gdG9uYWxPZmZzZXQuZGFyayB8fCB0b25hbE9mZnNldCAqIDEuNTtcbiAgaWYgKCFpbnRlbnRbZGlyZWN0aW9uXSkge1xuICAgIGlmIChpbnRlbnQuaGFzT3duUHJvcGVydHkoc2hhZGUpKSB7XG4gICAgICBpbnRlbnRbZGlyZWN0aW9uXSA9IGludGVudFtzaGFkZV07XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsaWdodCcpIHtcbiAgICAgIGludGVudC5saWdodCA9IGxpZ2h0ZW4oaW50ZW50Lm1haW4sIHRvbmFsT2Zmc2V0TGlnaHQpO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZGFyaycpIHtcbiAgICAgIGludGVudC5kYXJrID0gZGFya2VuKGludGVudC5tYWluLCB0b25hbE9mZnNldERhcmspO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFByaW1hcnkobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBibHVlWzIwMF0sXG4gICAgICBsaWdodDogYmx1ZVs1MF0sXG4gICAgICBkYXJrOiBibHVlWzQwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogYmx1ZVs3MDBdLFxuICAgIGxpZ2h0OiBibHVlWzQwMF0sXG4gICAgZGFyazogYmx1ZVs4MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U2Vjb25kYXJ5KG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcHVycGxlWzIwMF0sXG4gICAgICBsaWdodDogcHVycGxlWzUwXSxcbiAgICAgIGRhcms6IHB1cnBsZVs0MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IHB1cnBsZVs1MDBdLFxuICAgIGxpZ2h0OiBwdXJwbGVbMzAwXSxcbiAgICBkYXJrOiBwdXJwbGVbNzAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEVycm9yKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcmVkWzUwMF0sXG4gICAgICBsaWdodDogcmVkWzMwMF0sXG4gICAgICBkYXJrOiByZWRbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiByZWRbNzAwXSxcbiAgICBsaWdodDogcmVkWzQwMF0sXG4gICAgZGFyazogcmVkWzgwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRJbmZvKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogbGlnaHRCbHVlWzQwMF0sXG4gICAgICBsaWdodDogbGlnaHRCbHVlWzMwMF0sXG4gICAgICBkYXJrOiBsaWdodEJsdWVbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBsaWdodEJsdWVbNzAwXSxcbiAgICBsaWdodDogbGlnaHRCbHVlWzUwMF0sXG4gICAgZGFyazogbGlnaHRCbHVlWzkwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRTdWNjZXNzKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogZ3JlZW5bNDAwXSxcbiAgICAgIGxpZ2h0OiBncmVlblszMDBdLFxuICAgICAgZGFyazogZ3JlZW5bNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBncmVlbls4MDBdLFxuICAgIGxpZ2h0OiBncmVlbls1MDBdLFxuICAgIGRhcms6IGdyZWVuWzkwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRXYXJuaW5nKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogb3JhbmdlWzQwMF0sXG4gICAgICBsaWdodDogb3JhbmdlWzMwMF0sXG4gICAgICBkYXJrOiBvcmFuZ2VbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiAnI2VkNmMwMicsXG4gICAgLy8gY2xvc2VzdCB0byBvcmFuZ2VbODAwXSB0aGF0IHBhc3MgMzoxLlxuICAgIGxpZ2h0OiBvcmFuZ2VbNTAwXSxcbiAgICBkYXJrOiBvcmFuZ2VbOTAwXVxuICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUGFsZXR0ZShwYWxldHRlKSB7XG4gIGNvbnN0IHtcbiAgICAgIG1vZGUgPSAnbGlnaHQnLFxuICAgICAgY29udHJhc3RUaHJlc2hvbGQgPSAzLFxuICAgICAgdG9uYWxPZmZzZXQgPSAwLjJcbiAgICB9ID0gcGFsZXR0ZSxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHBhbGV0dGUsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHByaW1hcnkgPSBwYWxldHRlLnByaW1hcnkgfHwgZ2V0RGVmYXVsdFByaW1hcnkobW9kZSk7XG4gIGNvbnN0IHNlY29uZGFyeSA9IHBhbGV0dGUuc2Vjb25kYXJ5IHx8IGdldERlZmF1bHRTZWNvbmRhcnkobW9kZSk7XG4gIGNvbnN0IGVycm9yID0gcGFsZXR0ZS5lcnJvciB8fCBnZXREZWZhdWx0RXJyb3IobW9kZSk7XG4gIGNvbnN0IGluZm8gPSBwYWxldHRlLmluZm8gfHwgZ2V0RGVmYXVsdEluZm8obW9kZSk7XG4gIGNvbnN0IHN1Y2Nlc3MgPSBwYWxldHRlLnN1Y2Nlc3MgfHwgZ2V0RGVmYXVsdFN1Y2Nlc3MobW9kZSk7XG4gIGNvbnN0IHdhcm5pbmcgPSBwYWxldHRlLndhcm5pbmcgfHwgZ2V0RGVmYXVsdFdhcm5pbmcobW9kZSk7XG5cbiAgLy8gVXNlIHRoZSBzYW1lIGxvZ2ljIGFzXG4gIC8vIEJvb3RzdHJhcDogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvMWQ2ZTM3MTBkZDQ0N2RlMWEyMDBmMjllOGZhNTIxZjhhMDkwOGY3MC9zY3NzL19mdW5jdGlvbnMuc2NzcyNMNTlcbiAgLy8gYW5kIG1hdGVyaWFsLWNvbXBvbmVudHMtd2ViIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYWM0NmI4ODYzYzRkYWI5ZmMyMmM0YzY2MmRjNmJkMWI2NWRkNjUyZi9wYWNrYWdlcy9tZGMtdGhlbWUvX2Z1bmN0aW9ucy5zY3NzI0w1NFxuICBmdW5jdGlvbiBnZXRDb250cmFzdFRleHQoYmFja2dyb3VuZCkge1xuICAgIGNvbnN0IGNvbnRyYXN0VGV4dCA9IGdldENvbnRyYXN0UmF0aW8oYmFja2dyb3VuZCwgZGFyay50ZXh0LnByaW1hcnkpID49IGNvbnRyYXN0VGhyZXNob2xkID8gZGFyay50ZXh0LnByaW1hcnkgOiBsaWdodC50ZXh0LnByaW1hcnk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGNvbnRyYXN0ID0gZ2V0Q29udHJhc3RSYXRpbyhiYWNrZ3JvdW5kLCBjb250cmFzdFRleHQpO1xuICAgICAgaWYgKGNvbnRyYXN0IDwgMykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgY29udHJhc3QgcmF0aW8gb2YgJHtjb250cmFzdH06MSBmb3IgJHtjb250cmFzdFRleHR9IG9uICR7YmFja2dyb3VuZH1gLCAnZmFsbHMgYmVsb3cgdGhlIFdDQUcgcmVjb21tZW5kZWQgYWJzb2x1dGUgbWluaW11bSBjb250cmFzdCByYXRpbyBvZiAzOjEuJywgJ2h0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3Zpc3VhbC1hdWRpby1jb250cmFzdC1jb250cmFzdCddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnRyYXN0VGV4dDtcbiAgfVxuICBjb25zdCBhdWdtZW50Q29sb3IgPSAoe1xuICAgIGNvbG9yLFxuICAgIG5hbWUsXG4gICAgbWFpblNoYWRlID0gNTAwLFxuICAgIGxpZ2h0U2hhZGUgPSAzMDAsXG4gICAgZGFya1NoYWRlID0gNzAwXG4gIH0pID0+IHtcbiAgICBjb2xvciA9IF9leHRlbmRzKHt9LCBjb2xvcik7XG4gICAgaWYgKCFjb2xvci5tYWluICYmIGNvbG9yW21haW5TaGFkZV0pIHtcbiAgICAgIGNvbG9yLm1haW4gPSBjb2xvclttYWluU2hhZGVdO1xuICAgIH1cbiAgICBpZiAoIWNvbG9yLmhhc093blByb3BlcnR5KCdtYWluJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgY29sb3Ike25hbWUgPyBgICgke25hbWV9KWAgOiAnJ30gcHJvdmlkZWQgdG8gYXVnbWVudENvbG9yKGNvbG9yKSBpcyBpbnZhbGlkLlxuVGhlIGNvbG9yIG9iamVjdCBuZWVkcyB0byBoYXZlIGEgXFxgbWFpblxcYCBwcm9wZXJ0eSBvciBhIFxcYCR7bWFpblNoYWRlfVxcYCBwcm9wZXJ0eS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMSwgbmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnLCBtYWluU2hhZGUpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb2xvci5tYWluICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBjb2xvciR7bmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnfSBwcm92aWRlZCB0byBhdWdtZW50Q29sb3IoY29sb3IpIGlzIGludmFsaWQuXG5cXGBjb2xvci5tYWluXFxgIHNob3VsZCBiZSBhIHN0cmluZywgYnV0IFxcYCR7SlNPTi5zdHJpbmdpZnkoY29sb3IubWFpbil9XFxgIHdhcyBwcm92aWRlZCBpbnN0ZWFkLlxuXG5EaWQgeW91IGludGVuZCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2hlcz9cblxuaW1wb3J0IHsgZ3JlZW4gfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9jb2xvcnNcIjtcblxuY29uc3QgdGhlbWUxID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IGdyZWVuLFxufSB9KTtcblxuY29uc3QgdGhlbWUyID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IHsgbWFpbjogZ3JlZW5bNTAwXSB9LFxufSB9KTtgIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMiwgbmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnLCBKU09OLnN0cmluZ2lmeShjb2xvci5tYWluKSkpO1xuICAgIH1cbiAgICBhZGRMaWdodE9yRGFyayhjb2xvciwgJ2xpZ2h0JywgbGlnaHRTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGFkZExpZ2h0T3JEYXJrKGNvbG9yLCAnZGFyaycsIGRhcmtTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGlmICghY29sb3IuY29udHJhc3RUZXh0KSB7XG4gICAgICBjb2xvci5jb250cmFzdFRleHQgPSBnZXRDb250cmFzdFRleHQoY29sb3IubWFpbik7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfTtcbiAgY29uc3QgbW9kZXMgPSB7XG4gICAgZGFyayxcbiAgICBsaWdodFxuICB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghbW9kZXNbbW9kZV0pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVGhlIHBhbGV0dGUgbW9kZSBcXGAke21vZGV9XFxgIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhbGV0dGVPdXRwdXQgPSBkZWVwbWVyZ2UoX2V4dGVuZHMoe1xuICAgIC8vIEEgY29sbGVjdGlvbiBvZiBjb21tb24gY29sb3JzLlxuICAgIGNvbW1vbjogX2V4dGVuZHMoe30sIGNvbW1vbiksXG4gICAgLy8gcHJldmVudCBtdXRhYmxlIG9iamVjdC5cbiAgICAvLyBUaGUgcGFsZXR0ZSBtb2RlLCBjYW4gYmUgbGlnaHQgb3IgZGFyay5cbiAgICBtb2RlLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgcHJpbWFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBwcmltYXJ5OiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHByaW1hcnksXG4gICAgICBuYW1lOiAncHJpbWFyeSdcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHNlY29uZGFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBzZWNvbmRhcnk6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogc2Vjb25kYXJ5LFxuICAgICAgbmFtZTogJ3NlY29uZGFyeScsXG4gICAgICBtYWluU2hhZGU6ICdBNDAwJyxcbiAgICAgIGxpZ2h0U2hhZGU6ICdBMjAwJyxcbiAgICAgIGRhcmtTaGFkZTogJ0E3MDAnXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBpbnRlcmZhY2UgZWxlbWVudHMgdGhhdCB0aGUgdXNlciBzaG91bGQgYmUgbWFkZSBhd2FyZSBvZi5cbiAgICBlcnJvcjogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBlcnJvcixcbiAgICAgIG5hbWU6ICdlcnJvcidcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHBvdGVudGlhbGx5IGRhbmdlcm91cyBhY3Rpb25zIG9yIGltcG9ydGFudCBtZXNzYWdlcy5cbiAgICB3YXJuaW5nOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHdhcm5pbmcsXG4gICAgICBuYW1lOiAnd2FybmluZydcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcHJlc2VudCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciB0aGF0IGlzIG5ldXRyYWwgYW5kIG5vdCBuZWNlc3NhcmlseSBpbXBvcnRhbnQuXG4gICAgaW5mbzogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBpbmZvLFxuICAgICAgbmFtZTogJ2luZm8nXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIGluZGljYXRlIHRoZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYW4gYWN0aW9uIHRoYXQgdXNlciB0cmlnZ2VyZWQuXG4gICAgc3VjY2VzczogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBzdWNjZXNzLFxuICAgICAgbmFtZTogJ3N1Y2Nlc3MnXG4gICAgfSksXG4gICAgLy8gVGhlIGdyZXkgY29sb3JzLlxuICAgIGdyZXksXG4gICAgLy8gVXNlZCBieSBgZ2V0Q29udHJhc3RUZXh0KClgIHRvIG1heGltaXplIHRoZSBjb250cmFzdCBiZXR3ZWVuXG4gICAgLy8gdGhlIGJhY2tncm91bmQgYW5kIHRoZSB0ZXh0LlxuICAgIGNvbnRyYXN0VGhyZXNob2xkLFxuICAgIC8vIFRha2VzIGEgYmFja2dyb3VuZCBjb2xvciBhbmQgcmV0dXJucyB0aGUgdGV4dCBjb2xvciB0aGF0IG1heGltaXplcyB0aGUgY29udHJhc3QuXG4gICAgZ2V0Q29udHJhc3RUZXh0LFxuICAgIC8vIEdlbmVyYXRlIGEgcmljaCBjb2xvciBvYmplY3QuXG4gICAgYXVnbWVudENvbG9yLFxuICAgIC8vIFVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBiZWxvdyB0byBzaGlmdCBhIGNvbG9yJ3MgbHVtaW5hbmNlIGJ5IGFwcHJveGltYXRlbHlcbiAgICAvLyB0d28gaW5kZXhlcyB3aXRoaW4gaXRzIHRvbmFsIHBhbGV0dGUuXG4gICAgLy8gRS5nLiwgc2hpZnQgZnJvbSBSZWQgNTAwIHRvIFJlZCAzMDAgb3IgUmVkIDcwMC5cbiAgICB0b25hbE9mZnNldFxuICB9LCBtb2Rlc1ttb2RlXSksIG90aGVyKTtcbiAgcmV0dXJuIHBhbGV0dGVPdXRwdXQ7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImZvbnRGYW1pbHlcIiwgXCJmb250U2l6ZVwiLCBcImZvbnRXZWlnaHRMaWdodFwiLCBcImZvbnRXZWlnaHRSZWd1bGFyXCIsIFwiZm9udFdlaWdodE1lZGl1bVwiLCBcImZvbnRXZWlnaHRCb2xkXCIsIFwiaHRtbEZvbnRTaXplXCIsIFwiYWxsVmFyaWFudHNcIiwgXCJweFRvUmVtXCJdO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5mdW5jdGlvbiByb3VuZCh2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDFlNSkgLyAxZTU7XG59XG5jb25zdCBjYXNlQWxsQ2FwcyA9IHtcbiAgdGV4dFRyYW5zZm9ybTogJ3VwcGVyY2FzZSdcbn07XG5jb25zdCBkZWZhdWx0Rm9udEZhbWlseSA9ICdcIlJvYm90b1wiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIHNhbnMtc2VyaWYnO1xuXG4vKipcbiAqIEBzZWUgQGxpbmt7aHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9kZXNpZ24vdHlwb2dyYXBoeS90aGUtdHlwZS1zeXN0ZW0uaHRtbH1cbiAqIEBzZWUgQGxpbmt7aHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9kZXNpZ24vdHlwb2dyYXBoeS91bmRlcnN0YW5kaW5nLXR5cG9ncmFwaHkuaHRtbH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVHlwb2dyYXBoeShwYWxldHRlLCB0eXBvZ3JhcGh5KSB7XG4gIGNvbnN0IF9yZWYgPSB0eXBlb2YgdHlwb2dyYXBoeSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cG9ncmFwaHkocGFsZXR0ZSkgOiB0eXBvZ3JhcGh5LFxuICAgIHtcbiAgICAgIGZvbnRGYW1pbHkgPSBkZWZhdWx0Rm9udEZhbWlseSxcbiAgICAgIC8vIFRoZSBkZWZhdWx0IGZvbnQgc2l6ZSBvZiB0aGUgTWF0ZXJpYWwgU3BlY2lmaWNhdGlvbi5cbiAgICAgIGZvbnRTaXplID0gMTQsXG4gICAgICAvLyBweFxuICAgICAgZm9udFdlaWdodExpZ2h0ID0gMzAwLFxuICAgICAgZm9udFdlaWdodFJlZ3VsYXIgPSA0MDAsXG4gICAgICBmb250V2VpZ2h0TWVkaXVtID0gNTAwLFxuICAgICAgZm9udFdlaWdodEJvbGQgPSA3MDAsXG4gICAgICAvLyBUZWxsIE1VSSB3aGF0J3MgdGhlIGZvbnQtc2l6ZSBvbiB0aGUgaHRtbCBlbGVtZW50LlxuICAgICAgLy8gMTZweCBpcyB0aGUgZGVmYXVsdCBmb250LXNpemUgdXNlZCBieSBicm93c2Vycy5cbiAgICAgIGh0bWxGb250U2l6ZSA9IDE2LFxuICAgICAgLy8gQXBwbHkgdGhlIENTUyBwcm9wZXJ0aWVzIHRvIGFsbCB0aGUgdmFyaWFudHMuXG4gICAgICBhbGxWYXJpYW50cyxcbiAgICAgIHB4VG9SZW06IHB4VG9SZW0yXG4gICAgfSA9IF9yZWYsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfcmVmLCBfZXhjbHVkZWQpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2YgZm9udFNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNVUk6IGBmb250U2l6ZWAgaXMgcmVxdWlyZWQgdG8gYmUgYSBudW1iZXIuJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaHRtbEZvbnRTaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgaHRtbEZvbnRTaXplYCBpcyByZXF1aXJlZCB0byBiZSBhIG51bWJlci4nKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY29lZiA9IGZvbnRTaXplIC8gMTQ7XG4gIGNvbnN0IHB4VG9SZW0gPSBweFRvUmVtMiB8fCAoc2l6ZSA9PiBgJHtzaXplIC8gaHRtbEZvbnRTaXplICogY29lZn1yZW1gKTtcbiAgY29uc3QgYnVpbGRWYXJpYW50ID0gKGZvbnRXZWlnaHQsIHNpemUsIGxpbmVIZWlnaHQsIGxldHRlclNwYWNpbmcsIGNhc2luZykgPT4gX2V4dGVuZHMoe1xuICAgIGZvbnRGYW1pbHksXG4gICAgZm9udFdlaWdodCxcbiAgICBmb250U2l6ZTogcHhUb1JlbShzaXplKSxcbiAgICAvLyBVbml0bGVzcyBmb2xsb3dpbmcgaHR0cHM6Ly9tZXllcndlYi5jb20vZXJpYy90aG91Z2h0cy8yMDA2LzAyLzA4L3VuaXRsZXNzLWxpbmUtaGVpZ2h0cy9cbiAgICBsaW5lSGVpZ2h0XG4gIH0sIGZvbnRGYW1pbHkgPT09IGRlZmF1bHRGb250RmFtaWx5ID8ge1xuICAgIGxldHRlclNwYWNpbmc6IGAke3JvdW5kKGxldHRlclNwYWNpbmcgLyBzaXplKX1lbWBcbiAgfSA6IHt9LCBjYXNpbmcsIGFsbFZhcmlhbnRzKTtcbiAgY29uc3QgdmFyaWFudHMgPSB7XG4gICAgaDE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TGlnaHQsIDk2LCAxLjE2NywgLTEuNSksXG4gICAgaDI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TGlnaHQsIDYwLCAxLjIsIC0wLjUpLFxuICAgIGgzOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDQ4LCAxLjE2NywgMCksXG4gICAgaDQ6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMzQsIDEuMjM1LCAwLjI1KSxcbiAgICBoNTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAyNCwgMS4zMzQsIDApLFxuICAgIGg2OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMjAsIDEuNiwgMC4xNSksXG4gICAgc3VidGl0bGUxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDE2LCAxLjc1LCAwLjE1KSxcbiAgICBzdWJ0aXRsZTI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0TWVkaXVtLCAxNCwgMS41NywgMC4xKSxcbiAgICBib2R5MTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNiwgMS41LCAwLjE1KSxcbiAgICBib2R5MjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNCwgMS40MywgMC4xNSksXG4gICAgYnV0dG9uOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMTQsIDEuNzUsIDAuNCwgY2FzZUFsbENhcHMpLFxuICAgIGNhcHRpb246IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTIsIDEuNjYsIDAuNCksXG4gICAgb3ZlcmxpbmU6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTIsIDIuNjYsIDEsIGNhc2VBbGxDYXBzKSxcbiAgICAvLyBUT0RPIHY2OiBSZW1vdmUgaGFuZGxpbmcgb2YgJ2luaGVyaXQnIHZhcmlhbnQgZnJvbSB0aGUgdGhlbWUgYXMgaXQgaXMgYWxyZWFkeSBoYW5kbGVkIGluIE1hdGVyaWFsIFVJJ3MgVHlwb2dyYXBoeSBjb21wb25lbnQuIEFsc28sIHJlbWVtYmVyIHRvIHJlbW92ZSB0aGUgYXNzb2NpYXRlZCB0eXBlcy5cbiAgICBpbmhlcml0OiB7XG4gICAgICBmb250RmFtaWx5OiAnaW5oZXJpdCcsXG4gICAgICBmb250V2VpZ2h0OiAnaW5oZXJpdCcsXG4gICAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICAgbGluZUhlaWdodDogJ2luaGVyaXQnLFxuICAgICAgbGV0dGVyU3BhY2luZzogJ2luaGVyaXQnXG4gICAgfVxuICB9O1xuICByZXR1cm4gZGVlcG1lcmdlKF9leHRlbmRzKHtcbiAgICBodG1sRm9udFNpemUsXG4gICAgcHhUb1JlbSxcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRTaXplLFxuICAgIGZvbnRXZWlnaHRMaWdodCxcbiAgICBmb250V2VpZ2h0UmVndWxhcixcbiAgICBmb250V2VpZ2h0TWVkaXVtLFxuICAgIGZvbnRXZWlnaHRCb2xkXG4gIH0sIHZhcmlhbnRzKSwgb3RoZXIsIHtcbiAgICBjbG9uZTogZmFsc2UgLy8gTm8gbmVlZCB0byBjbG9uZSBkZWVwXG4gIH0pO1xufSIsImNvbnN0IHNoYWRvd0tleVVtYnJhT3BhY2l0eSA9IDAuMjtcbmNvbnN0IHNoYWRvd0tleVBlbnVtYnJhT3BhY2l0eSA9IDAuMTQ7XG5jb25zdCBzaGFkb3dBbWJpZW50U2hhZG93T3BhY2l0eSA9IDAuMTI7XG5mdW5jdGlvbiBjcmVhdGVTaGFkb3coLi4ucHgpIHtcbiAgcmV0dXJuIFtgJHtweFswXX1weCAke3B4WzFdfXB4ICR7cHhbMl19cHggJHtweFszXX1weCByZ2JhKDAsMCwwLCR7c2hhZG93S2V5VW1icmFPcGFjaXR5fSlgLCBgJHtweFs0XX1weCAke3B4WzVdfXB4ICR7cHhbNl19cHggJHtweFs3XX1weCByZ2JhKDAsMCwwLCR7c2hhZG93S2V5UGVudW1icmFPcGFjaXR5fSlgLCBgJHtweFs4XX1weCAke3B4WzldfXB4ICR7cHhbMTBdfXB4ICR7cHhbMTFdfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dBbWJpZW50U2hhZG93T3BhY2l0eX0pYF0uam9pbignLCcpO1xufVxuXG4vLyBWYWx1ZXMgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF0ZXJpYWwtY29tcG9uZW50cy9tYXRlcmlhbC1jb21wb25lbnRzLXdlYi9ibG9iL2JlODc0N2Y5NDU3NDY2OWNiNWU3YWRkMWE3YzU0ZmE0MWE4OWNlYzcvcGFja2FnZXMvbWRjLWVsZXZhdGlvbi9fdmFyaWFibGVzLnNjc3NcbmNvbnN0IHNoYWRvd3MgPSBbJ25vbmUnLCBjcmVhdGVTaGFkb3coMCwgMiwgMSwgLTEsIDAsIDEsIDEsIDAsIDAsIDEsIDMsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgMSwgLTIsIDAsIDIsIDIsIDAsIDAsIDEsIDUsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgMywgLTIsIDAsIDMsIDQsIDAsIDAsIDEsIDgsIDApLCBjcmVhdGVTaGFkb3coMCwgMiwgNCwgLTEsIDAsIDQsIDUsIDAsIDAsIDEsIDEwLCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDUsIC0xLCAwLCA1LCA4LCAwLCAwLCAxLCAxNCwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCA1LCAtMSwgMCwgNiwgMTAsIDAsIDAsIDEsIDE4LCAwKSwgY3JlYXRlU2hhZG93KDAsIDQsIDUsIC0yLCAwLCA3LCAxMCwgMSwgMCwgMiwgMTYsIDEpLCBjcmVhdGVTaGFkb3coMCwgNSwgNSwgLTMsIDAsIDgsIDEwLCAxLCAwLCAzLCAxNCwgMiksIGNyZWF0ZVNoYWRvdygwLCA1LCA2LCAtMywgMCwgOSwgMTIsIDEsIDAsIDMsIDE2LCAyKSwgY3JlYXRlU2hhZG93KDAsIDYsIDYsIC0zLCAwLCAxMCwgMTQsIDEsIDAsIDQsIDE4LCAzKSwgY3JlYXRlU2hhZG93KDAsIDYsIDcsIC00LCAwLCAxMSwgMTUsIDEsIDAsIDQsIDIwLCAzKSwgY3JlYXRlU2hhZG93KDAsIDcsIDgsIC00LCAwLCAxMiwgMTcsIDIsIDAsIDUsIDIyLCA0KSwgY3JlYXRlU2hhZG93KDAsIDcsIDgsIC00LCAwLCAxMywgMTksIDIsIDAsIDUsIDI0LCA0KSwgY3JlYXRlU2hhZG93KDAsIDcsIDksIC00LCAwLCAxNCwgMjEsIDIsIDAsIDUsIDI2LCA0KSwgY3JlYXRlU2hhZG93KDAsIDgsIDksIC01LCAwLCAxNSwgMjIsIDIsIDAsIDYsIDI4LCA1KSwgY3JlYXRlU2hhZG93KDAsIDgsIDEwLCAtNSwgMCwgMTYsIDI0LCAyLCAwLCA2LCAzMCwgNSksIGNyZWF0ZVNoYWRvdygwLCA4LCAxMSwgLTUsIDAsIDE3LCAyNiwgMiwgMCwgNiwgMzIsIDUpLCBjcmVhdGVTaGFkb3coMCwgOSwgMTEsIC01LCAwLCAxOCwgMjgsIDIsIDAsIDcsIDM0LCA2KSwgY3JlYXRlU2hhZG93KDAsIDksIDEyLCAtNiwgMCwgMTksIDI5LCAyLCAwLCA3LCAzNiwgNiksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTMsIC02LCAwLCAyMCwgMzEsIDMsIDAsIDgsIDM4LCA3KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxMywgLTYsIDAsIDIxLCAzMywgMywgMCwgOCwgNDAsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDE0LCAtNiwgMCwgMjIsIDM1LCAzLCAwLCA4LCA0MiwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMSwgMTQsIC03LCAwLCAyMywgMzYsIDMsIDAsIDksIDQ0LCA4KSwgY3JlYXRlU2hhZG93KDAsIDExLCAxNSwgLTcsIDAsIDI0LCAzOCwgMywgMCwgOSwgNDYsIDgpXTtcbmV4cG9ydCBkZWZhdWx0IHNoYWRvd3M7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImR1cmF0aW9uXCIsIFwiZWFzaW5nXCIsIFwiZGVsYXlcIl07XG4vLyBGb2xsb3cgaHR0cHM6Ly9tYXRlcmlhbC5nb29nbGUuY29tL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctbmF0dXJhbC1lYXNpbmctY3VydmVzXG4vLyB0byBsZWFybiB0aGUgY29udGV4dCBpbiB3aGljaCBlYWNoIGVhc2luZyBzaG91bGQgYmUgdXNlZC5cbmV4cG9ydCBjb25zdCBlYXNpbmcgPSB7XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGVhc2luZyBjdXJ2ZS5cbiAgZWFzZUluT3V0OiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgZW50ZXIgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5IGZyb20gb2ZmLXNjcmVlbiBhbmRcbiAgLy8gc2xvd2x5IGRlY2VsZXJhdGUgdG8gYSByZXN0aW5nIHBvaW50LlxuICBlYXNlT3V0OiAnY3ViaWMtYmV6aWVyKDAuMCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgbGVhdmUgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5LiBUaGV5IGRvIG5vdCBkZWNlbGVyYXRlIHdoZW4gb2ZmLXNjcmVlbi5cbiAgZWFzZUluOiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSknLFxuICAvLyBUaGUgc2hhcnAgY3VydmUgaXMgdXNlZCBieSBvYmplY3RzIHRoYXQgbWF5IHJldHVybiB0byB0aGUgc2NyZWVuIGF0IGFueSB0aW1lLlxuICBzaGFycDogJ2N1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSknXG59O1xuXG4vLyBGb2xsb3cgaHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9ndWlkZWxpbmVzL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctY29tbW9uLWR1cmF0aW9uc1xuLy8gdG8gbGVhcm4gd2hlbiB1c2Ugd2hhdCB0aW1pbmdcbmV4cG9ydCBjb25zdCBkdXJhdGlvbiA9IHtcbiAgc2hvcnRlc3Q6IDE1MCxcbiAgc2hvcnRlcjogMjAwLFxuICBzaG9ydDogMjUwLFxuICAvLyBtb3N0IGJhc2ljIHJlY29tbWVuZGVkIHRpbWluZ1xuICBzdGFuZGFyZDogMzAwLFxuICAvLyB0aGlzIGlzIHRvIGJlIHVzZWQgaW4gY29tcGxleCBhbmltYXRpb25zXG4gIGNvbXBsZXg6IDM3NSxcbiAgLy8gcmVjb21tZW5kZWQgd2hlbiBzb21ldGhpbmcgaXMgZW50ZXJpbmcgc2NyZWVuXG4gIGVudGVyaW5nU2NyZWVuOiAyMjUsXG4gIC8vIHJlY29tbWVuZGVkIHdoZW4gc29tZXRoaW5nIGlzIGxlYXZpbmcgc2NyZWVuXG4gIGxlYXZpbmdTY3JlZW46IDE5NVxufTtcbmZ1bmN0aW9uIGZvcm1hdE1zKG1pbGxpc2Vjb25kcykge1xuICByZXR1cm4gYCR7TWF0aC5yb3VuZChtaWxsaXNlY29uZHMpfW1zYDtcbn1cbmZ1bmN0aW9uIGdldEF1dG9IZWlnaHREdXJhdGlvbihoZWlnaHQpIHtcbiAgaWYgKCFoZWlnaHQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCBjb25zdGFudCA9IGhlaWdodCAvIDM2O1xuXG4gIC8vIGh0dHBzOi8vd3d3LndvbGZyYW1hbHBoYS5jb20vaW5wdXQvP2k9KDQrJTJCKzE1KyorKHgrJTJGKzM2KykrKiorMC4yNSslMkIrKHgrJTJGKzM2KSslMkYrNSkrKisxMFxuICByZXR1cm4gTWF0aC5yb3VuZCgoNCArIDE1ICogY29uc3RhbnQgKiogMC4yNSArIGNvbnN0YW50IC8gNSkgKiAxMCk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUcmFuc2l0aW9ucyhpbnB1dFRyYW5zaXRpb25zKSB7XG4gIGNvbnN0IG1lcmdlZEVhc2luZyA9IF9leHRlbmRzKHt9LCBlYXNpbmcsIGlucHV0VHJhbnNpdGlvbnMuZWFzaW5nKTtcbiAgY29uc3QgbWVyZ2VkRHVyYXRpb24gPSBfZXh0ZW5kcyh7fSwgZHVyYXRpb24sIGlucHV0VHJhbnNpdGlvbnMuZHVyYXRpb24pO1xuICBjb25zdCBjcmVhdGUgPSAocHJvcHMgPSBbJ2FsbCddLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbk9wdGlvbiA9IG1lcmdlZER1cmF0aW9uLnN0YW5kYXJkLFxuICAgICAgICBlYXNpbmc6IGVhc2luZ09wdGlvbiA9IG1lcmdlZEVhc2luZy5lYXNlSW5PdXQsXG4gICAgICAgIGRlbGF5ID0gMFxuICAgICAgfSA9IG9wdGlvbnMsXG4gICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGlzU3RyaW5nID0gdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgIC8vIElFMTEgc3VwcG9ydCwgcmVwbGFjZSB3aXRoIE51bWJlci5pc05hTlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgICAgY29uc3QgaXNOdW1iZXIgPSB2YWx1ZSA9PiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpO1xuICAgICAgaWYgKCFpc1N0cmluZyhwcm9wcykgJiYgIUFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJwcm9wc1wiIG11c3QgYmUgYSBzdHJpbmcgb3IgQXJyYXkuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVtYmVyKGR1cmF0aW9uT3B0aW9uKSAmJiAhaXNTdHJpbmcoZHVyYXRpb25PcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogQXJndW1lbnQgXCJkdXJhdGlvblwiIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcgYnV0IGZvdW5kICR7ZHVyYXRpb25PcHRpb259LmApO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1N0cmluZyhlYXNpbmdPcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJlYXNpbmdcIiBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bWJlcihkZWxheSkgJiYgIWlzU3RyaW5nKGRlbGF5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwiZGVsYXlcIiBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBTZWNvbmcgYXJndW1lbnQgb2YgdHJhbnNpdGlvbi5jcmVhdGUgbXVzdCBiZSBhbiBvYmplY3QuJywgXCJBcmd1bWVudHMgc2hvdWxkIGJlIGVpdGhlciBgY3JlYXRlKCdwcm9wMScsIG9wdGlvbnMpYCBvciBgY3JlYXRlKFsncHJvcDEnLCAncHJvcDInXSwgb3B0aW9ucylgXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Qua2V5cyhvdGhlcikubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVW5yZWNvZ25pemVkIGFyZ3VtZW50KHMpIFske09iamVjdC5rZXlzKG90aGVyKS5qb2luKCcsJyl9XS5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHByb3BzKSA/IHByb3BzIDogW3Byb3BzXSkubWFwKGFuaW1hdGVkUHJvcCA9PiBgJHthbmltYXRlZFByb3B9ICR7dHlwZW9mIGR1cmF0aW9uT3B0aW9uID09PSAnc3RyaW5nJyA/IGR1cmF0aW9uT3B0aW9uIDogZm9ybWF0TXMoZHVyYXRpb25PcHRpb24pfSAke2Vhc2luZ09wdGlvbn0gJHt0eXBlb2YgZGVsYXkgPT09ICdzdHJpbmcnID8gZGVsYXkgOiBmb3JtYXRNcyhkZWxheSl9YCkuam9pbignLCcpO1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGdldEF1dG9IZWlnaHREdXJhdGlvbixcbiAgICBjcmVhdGVcbiAgfSwgaW5wdXRUcmFuc2l0aW9ucywge1xuICAgIGVhc2luZzogbWVyZ2VkRWFzaW5nLFxuICAgIGR1cmF0aW9uOiBtZXJnZWREdXJhdGlvblxuICB9KTtcbn0iLCIvLyBXZSBuZWVkIHRvIGNlbnRyYWxpemUgdGhlIHpJbmRleCBkZWZpbml0aW9ucyBhcyB0aGV5IHdvcmtcbi8vIGxpa2UgZ2xvYmFsIHZhbHVlcyBpbiB0aGUgYnJvd3Nlci5cbmNvbnN0IHpJbmRleCA9IHtcbiAgbW9iaWxlU3RlcHBlcjogMTAwMCxcbiAgZmFiOiAxMDUwLFxuICBzcGVlZERpYWw6IDEwNTAsXG4gIGFwcEJhcjogMTEwMCxcbiAgZHJhd2VyOiAxMjAwLFxuICBtb2RhbDogMTMwMCxcbiAgc25hY2tiYXI6IDE0MDAsXG4gIHRvb2x0aXA6IDE1MDBcbn07XG5leHBvcnQgZGVmYXVsdCB6SW5kZXg7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCB7IGZvcm1hdE11aUVycm9yTWVzc2FnZSBhcyBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIH0gZnJvbSBcIkBtdWkvdXRpbHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImJyZWFrcG9pbnRzXCIsIFwibWl4aW5zXCIsIFwic3BhY2luZ1wiLCBcInBhbGV0dGVcIiwgXCJ0cmFuc2l0aW9uc1wiLCBcInR5cG9ncmFwaHlcIiwgXCJzaGFwZVwiXTtcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlVGhlbWUgYXMgc3lzdGVtQ3JlYXRlVGhlbWUsIHVuc3RhYmxlX2RlZmF1bHRTeENvbmZpZyBhcyBkZWZhdWx0U3hDb25maWcsIHVuc3RhYmxlX3N0eWxlRnVuY3Rpb25TeCBhcyBzdHlsZUZ1bmN0aW9uU3ggfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IGNyZWF0ZU1peGlucyBmcm9tICcuL2NyZWF0ZU1peGlucyc7XG5pbXBvcnQgY3JlYXRlUGFsZXR0ZSBmcm9tICcuL2NyZWF0ZVBhbGV0dGUnO1xuaW1wb3J0IGNyZWF0ZVR5cG9ncmFwaHkgZnJvbSAnLi9jcmVhdGVUeXBvZ3JhcGh5JztcbmltcG9ydCBzaGFkb3dzIGZyb20gJy4vc2hhZG93cyc7XG5pbXBvcnQgY3JlYXRlVHJhbnNpdGlvbnMgZnJvbSAnLi9jcmVhdGVUcmFuc2l0aW9ucyc7XG5pbXBvcnQgekluZGV4IGZyb20gJy4vekluZGV4JztcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBtaXhpbnM6IG1peGluc0lucHV0ID0ge30sXG4gICAgICBwYWxldHRlOiBwYWxldHRlSW5wdXQgPSB7fSxcbiAgICAgIHRyYW5zaXRpb25zOiB0cmFuc2l0aW9uc0lucHV0ID0ge30sXG4gICAgICB0eXBvZ3JhcGh5OiB0eXBvZ3JhcGh5SW5wdXQgPSB7fVxuICAgIH0gPSBvcHRpb25zLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcbiAgaWYgKG9wdGlvbnMudmFycykge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBcXGB2YXJzXFxgIGlzIGEgcHJpdmF0ZSBmaWVsZCB1c2VkIGZvciBDU1MgdmFyaWFibGVzIHN1cHBvcnQuXG5QbGVhc2UgdXNlIGFub3RoZXIgbmFtZS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxOCkpO1xuICB9XG4gIGNvbnN0IHBhbGV0dGUgPSBjcmVhdGVQYWxldHRlKHBhbGV0dGVJbnB1dCk7XG4gIGNvbnN0IHN5c3RlbVRoZW1lID0gc3lzdGVtQ3JlYXRlVGhlbWUob3B0aW9ucyk7XG4gIGxldCBtdWlUaGVtZSA9IGRlZXBtZXJnZShzeXN0ZW1UaGVtZSwge1xuICAgIG1peGluczogY3JlYXRlTWl4aW5zKHN5c3RlbVRoZW1lLmJyZWFrcG9pbnRzLCBtaXhpbnNJbnB1dCksXG4gICAgcGFsZXR0ZSxcbiAgICAvLyBEb24ndCB1c2UgWy4uLnNoYWRvd3NdIHVudGlsIHlvdSd2ZSB2ZXJpZmllZCBpdHMgdHJhbnNwaWxlZCBjb2RlIGlzIG5vdCBpbnZva2luZyB0aGUgaXRlcmF0b3IgcHJvdG9jb2wuXG4gICAgc2hhZG93czogc2hhZG93cy5zbGljZSgpLFxuICAgIHR5cG9ncmFwaHk6IGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeUlucHV0KSxcbiAgICB0cmFuc2l0aW9uczogY3JlYXRlVHJhbnNpdGlvbnModHJhbnNpdGlvbnNJbnB1dCksXG4gICAgekluZGV4OiBfZXh0ZW5kcyh7fSwgekluZGV4KVxuICB9KTtcbiAgbXVpVGhlbWUgPSBkZWVwbWVyZ2UobXVpVGhlbWUsIG90aGVyKTtcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gZGVlcG1lcmdlKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVE9ETyB2NjogUmVmYWN0b3IgdG8gdXNlIGdsb2JhbFN0YXRlQ2xhc3Nlc01hcHBpbmcgZnJvbSBAbXVpL3V0aWxzIG9uY2UgYHJlYWRPbmx5YCBzdGF0ZSBjbGFzcyBpcyB1c2VkIGluIFJhdGluZyBjb21wb25lbnQuXG4gICAgY29uc3Qgc3RhdGVDbGFzc2VzID0gWydhY3RpdmUnLCAnY2hlY2tlZCcsICdjb21wbGV0ZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZXhwYW5kZWQnLCAnZm9jdXNlZCcsICdmb2N1c1Zpc2libGUnLCAncmVxdWlyZWQnLCAnc2VsZWN0ZWQnXTtcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlLCBjb21wb25lbnQpID0+IHtcbiAgICAgIGxldCBrZXk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW4sIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICBmb3IgKGtleSBpbiBub2RlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZVtrZXldO1xuICAgICAgICBpZiAoc3RhdGVDbGFzc2VzLmluZGV4T2Yoa2V5KSAhPT0gLTEgJiYgT2JqZWN0LmtleXMoY2hpbGQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVDbGFzcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzKCcnLCBrZXkpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYCR7Y29tcG9uZW50fVxcYCBjb21wb25lbnQgaW5jcmVhc2VzIGAgKyBgdGhlIENTUyBzcGVjaWZpY2l0eSBvZiB0aGUgXFxgJHtrZXl9XFxgIGludGVybmFsIHN0YXRlLmAsICdZb3UgY2FuIG5vdCBvdmVycmlkZSBpdCBsaWtlIHRoaXM6ICcsIEpTT04uc3RyaW5naWZ5KG5vZGUsIG51bGwsIDIpLCAnJywgYEluc3RlYWQsIHlvdSBuZWVkIHRvIHVzZSB0aGUgJyYuJHtzdGF0ZUNsYXNzfScgc3ludGF4OmAsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgcm9vdDoge1xuICAgICAgICAgICAgICAgIFtgJi4ke3N0YXRlQ2xhc3N9YF06IGNoaWxkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG51bGwsIDIpLCAnJywgJ2h0dHBzOi8vbXVpLmNvbS9yL3N0YXRlLWNsYXNzZXMtZ3VpZGUnXS5qb2luKCdcXG4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc3R5bGUgdG8gcHJldmVudCBnbG9iYWwgY29uZmxpY3RzLlxuICAgICAgICAgIG5vZGVba2V5XSA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyhtdWlUaGVtZS5jb21wb25lbnRzKS5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IG11aVRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50XS5zdHlsZU92ZXJyaWRlcztcbiAgICAgIGlmIChzdHlsZU92ZXJyaWRlcyAmJiBjb21wb25lbnQuaW5kZXhPZignTXVpJykgPT09IDApIHtcbiAgICAgICAgdHJhdmVyc2Uoc3R5bGVPdmVycmlkZXMsIGNvbXBvbmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgbXVpVGhlbWUudW5zdGFibGVfc3hDb25maWcgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdFN4Q29uZmlnLCBvdGhlciA9PSBudWxsID8gdm9pZCAwIDogb3RoZXIudW5zdGFibGVfc3hDb25maWcpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeCA9IGZ1bmN0aW9uIHN4KHByb3BzKSB7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICBzeDogcHJvcHMsXG4gICAgICB0aGVtZTogdGhpc1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gbXVpVGhlbWU7XG59XG5sZXQgd2FybmVkT25jZSA9IGZhbHNlO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU11aVRoZW1lKC4uLmFyZ3MpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIXdhcm5lZE9uY2UpIHtcbiAgICAgIHdhcm5lZE9uY2UgPSB0cnVlO1xuICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogdGhlIGNyZWF0ZU11aVRoZW1lIGZ1bmN0aW9uIHdhcyByZW5hbWVkIHRvIGNyZWF0ZVRoZW1lLicsICcnLCBcIllvdSBzaG91bGQgdXNlIGBpbXBvcnQgeyBjcmVhdGVUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJ2BcIl0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlVGhlbWUoLi4uYXJncyk7XG59XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVUaGVtZTsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZU1peGlucyhicmVha3BvaW50cywgbWl4aW5zKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgdG9vbGJhcjoge1xuICAgICAgbWluSGVpZ2h0OiA1NixcbiAgICAgIFticmVha3BvaW50cy51cCgneHMnKV06IHtcbiAgICAgICAgJ0BtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSknOiB7XG4gICAgICAgICAgbWluSGVpZ2h0OiA0OFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2JyZWFrcG9pbnRzLnVwKCdzbScpXToge1xuICAgICAgICBtaW5IZWlnaHQ6IDY0XG4gICAgICB9XG4gICAgfVxuICB9LCBtaXhpbnMpO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuY29uc3QgZGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRUaGVtZTsiLCIvLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vbWF0ZXJpYWwtY29tcG9uZW50cy9tYXRlcmlhbC1jb21wb25lbnRzLWlvcy9ibG9iL2JjYTM2MTA3NDA1NTk0ZDViN2IxNjI2NWE1YjBlZDY5OGY4NWE1ZWUvY29tcG9uZW50cy9FbGV2YXRpb24vc3JjL1VJQ29sb3IlMkJNYXRlcmlhbEVsZXZhdGlvbi5tI0w2MVxuY29uc3QgZ2V0T3ZlcmxheUFscGhhID0gZWxldmF0aW9uID0+IHtcbiAgbGV0IGFscGhhVmFsdWU7XG4gIGlmIChlbGV2YXRpb24gPCAxKSB7XG4gICAgYWxwaGFWYWx1ZSA9IDUuMTE5MTYgKiBlbGV2YXRpb24gKiogMjtcbiAgfSBlbHNlIHtcbiAgICBhbHBoYVZhbHVlID0gNC41ICogTWF0aC5sb2coZWxldmF0aW9uICsgMSkgKyAyO1xuICB9XG4gIHJldHVybiAoYWxwaGFWYWx1ZSAvIDEwMCkudG9GaXhlZCgyKTtcbn07XG5leHBvcnQgZGVmYXVsdCBnZXRPdmVybGF5QWxwaGE7IiwiZXhwb3J0IGRlZmF1bHQgJyQkbWF0ZXJpYWwnOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgY3JlYXRlU3R5bGVkLCBzaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5leHBvcnQgY29uc3Qgcm9vdFNob3VsZEZvcndhcmRQcm9wID0gcHJvcCA9PiBzaG91bGRGb3J3YXJkUHJvcChwcm9wKSAmJiBwcm9wICE9PSAnY2xhc3Nlcyc7XG5leHBvcnQgY29uc3Qgc2xvdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3A7XG5jb25zdCBzdHlsZWQgPSBjcmVhdGVTdHlsZWQoe1xuICB0aGVtZUlkOiBUSEVNRV9JRCxcbiAgZGVmYXVsdFRoZW1lLFxuICByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlVGhlbWUgYXMgdXNlVGhlbWVTeXN0ZW0gfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4vZGVmYXVsdFRoZW1lJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuL2lkZW50aWZpZXInO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWUoKSB7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWVTeXN0ZW0oZGVmYXVsdFRoZW1lKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VEZWJ1Z1ZhbHVlKHRoZW1lKTtcbiAgfVxuICByZXR1cm4gdGhlbWVbVEhFTUVfSURdIHx8IHRoZW1lO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgdXNlVGhlbWVQcm9wcyBhcyBzeXN0ZW1Vc2VUaGVtZVByb3BzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuL2RlZmF1bHRUaGVtZSc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi9pZGVudGlmaWVyJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lUHJvcHMoe1xuICBwcm9wcyxcbiAgbmFtZVxufSkge1xuICByZXR1cm4gc3lzdGVtVXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHMsXG4gICAgbmFtZSxcbiAgICBkZWZhdWx0VGhlbWUsXG4gICAgdGhlbWVJZDogVEhFTUVfSURcbiAgfSk7XG59IiwiZXhwb3J0IGNvbnN0IHJlZmxvdyA9IG5vZGUgPT4gbm9kZS5zY3JvbGxUb3A7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNpdGlvblByb3BzKHByb3BzLCBvcHRpb25zKSB7XG4gIHZhciBfc3R5bGUkdHJhbnNpdGlvbkR1cmEsIF9zdHlsZSR0cmFuc2l0aW9uVGltaTtcbiAgY29uc3Qge1xuICAgIHRpbWVvdXQsXG4gICAgZWFzaW5nLFxuICAgIHN0eWxlID0ge31cbiAgfSA9IHByb3BzO1xuICByZXR1cm4ge1xuICAgIGR1cmF0aW9uOiAoX3N0eWxlJHRyYW5zaXRpb25EdXJhID0gc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uKSAhPSBudWxsID8gX3N0eWxlJHRyYW5zaXRpb25EdXJhIDogdHlwZW9mIHRpbWVvdXQgPT09ICdudW1iZXInID8gdGltZW91dCA6IHRpbWVvdXRbb3B0aW9ucy5tb2RlXSB8fCAwLFxuICAgIGVhc2luZzogKF9zdHlsZSR0cmFuc2l0aW9uVGltaSA9IHN0eWxlLnRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbikgIT0gbnVsbCA/IF9zdHlsZSR0cmFuc2l0aW9uVGltaSA6IHR5cGVvZiBlYXNpbmcgPT09ICdvYmplY3QnID8gZWFzaW5nW29wdGlvbnMubW9kZV0gOiBlYXNpbmcsXG4gICAgZGVsYXk6IHN0eWxlLnRyYW5zaXRpb25EZWxheVxuICB9O1xufSIsImltcG9ydCB7IHVuc3RhYmxlX2NhcGl0YWxpemUgYXMgY2FwaXRhbGl6ZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgY2FwaXRhbGl6ZTsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpU3ZnSWNvbicsIHNsb3QpO1xufVxuY29uc3Qgc3ZnSWNvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlTdmdJY29uJywgWydyb290JywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdjb2xvckFjdGlvbicsICdjb2xvckVycm9yJywgJ2NvbG9yRGlzYWJsZWQnLCAnZm9udFNpemVJbmhlcml0JywgJ2ZvbnRTaXplU21hbGwnLCAnZm9udFNpemVNZWRpdW0nLCAnZm9udFNpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IHN2Z0ljb25DbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJmb250U2l6ZVwiLCBcImh0bWxDb2xvclwiLCBcImluaGVyaXRWaWV3Qm94XCIsIFwidGl0bGVBY2Nlc3NcIiwgXCJ2aWV3Qm94XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyB9IGZyb20gJy4vc3ZnSWNvbkNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2xvcixcbiAgICBmb250U2l6ZSxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBjb2xvciAhPT0gJ2luaGVyaXQnICYmIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgYGZvbnRTaXplJHtjYXBpdGFsaXplKGZvbnRTaXplKX1gXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldFN2Z0ljb25VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFN2Z0ljb25Sb290ID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlTdmdJY29uJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBzdHlsZXNbYGZvbnRTaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuZm9udFNpemUpfWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF90aGVtZSR0cmFuc2l0aW9ucywgX3RoZW1lJHRyYW5zaXRpb25zJGNyLCBfdGhlbWUkdHJhbnNpdGlvbnMyLCBfdGhlbWUkdHlwb2dyYXBoeSwgX3RoZW1lJHR5cG9ncmFwaHkkcHhULCBfdGhlbWUkdHlwb2dyYXBoeTIsIF90aGVtZSR0eXBvZ3JhcGh5MiRweCwgX3RoZW1lJHR5cG9ncmFwaHkzLCBfdGhlbWUkdHlwb2dyYXBoeTMkcHgsIF9wYWxldHRlJG93bmVyU3RhdGUkYywgX3BhbGV0dGUsIF9wYWxldHRlMiwgX3BhbGV0dGUzO1xuICByZXR1cm4ge1xuICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICB3aWR0aDogJzFlbScsXG4gICAgaGVpZ2h0OiAnMWVtJyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAvLyB0aGUgPHN2Zz4gd2lsbCBkZWZpbmUgdGhlIHByb3BlcnR5IHRoYXQgaGFzIGBjdXJyZW50Q29sb3JgXG4gICAgLy8gZS5nLiBoZXJvaWNvbnMgdXNlcyBmaWxsPVwibm9uZVwiIGFuZCBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgIGZpbGw6IG93bmVyU3RhdGUuaGFzU3ZnQXNDaGlsZCA/IHVuZGVmaW5lZCA6ICdjdXJyZW50Q29sb3InLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgdHJhbnNpdGlvbjogKF90aGVtZSR0cmFuc2l0aW9ucyA9IHRoZW1lLnRyYW5zaXRpb25zKSA9PSBudWxsIHx8IChfdGhlbWUkdHJhbnNpdGlvbnMkY3IgPSBfdGhlbWUkdHJhbnNpdGlvbnMuY3JlYXRlKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHRyYW5zaXRpb25zJGNyLmNhbGwoX3RoZW1lJHRyYW5zaXRpb25zLCAnZmlsbCcsIHtcbiAgICAgIGR1cmF0aW9uOiAoX3RoZW1lJHRyYW5zaXRpb25zMiA9IHRoZW1lLnRyYW5zaXRpb25zKSA9PSBudWxsIHx8IChfdGhlbWUkdHJhbnNpdGlvbnMyID0gX3RoZW1lJHRyYW5zaXRpb25zMi5kdXJhdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0cmFuc2l0aW9uczIuc2hvcnRlclxuICAgIH0pLFxuICAgIGZvbnRTaXplOiB7XG4gICAgICBpbmhlcml0OiAnaW5oZXJpdCcsXG4gICAgICBzbWFsbDogKChfdGhlbWUkdHlwb2dyYXBoeSA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgfHwgKF90aGVtZSR0eXBvZ3JhcGh5JHB4VCA9IF90aGVtZSR0eXBvZ3JhcGh5LnB4VG9SZW0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHlwb2dyYXBoeSRweFQuY2FsbChfdGhlbWUkdHlwb2dyYXBoeSwgMjApKSB8fCAnMS4yNXJlbScsXG4gICAgICBtZWRpdW06ICgoX3RoZW1lJHR5cG9ncmFwaHkyID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCB8fCAoX3RoZW1lJHR5cG9ncmFwaHkyJHB4ID0gX3RoZW1lJHR5cG9ncmFwaHkyLnB4VG9SZW0pID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHlwb2dyYXBoeTIkcHguY2FsbChfdGhlbWUkdHlwb2dyYXBoeTIsIDI0KSkgfHwgJzEuNXJlbScsXG4gICAgICBsYXJnZTogKChfdGhlbWUkdHlwb2dyYXBoeTMgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsIHx8IChfdGhlbWUkdHlwb2dyYXBoeTMkcHggPSBfdGhlbWUkdHlwb2dyYXBoeTMucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5MyRweC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5MywgMzUpKSB8fCAnMi4xODc1cmVtJ1xuICAgIH1bb3duZXJTdGF0ZS5mb250U2l6ZV0sXG4gICAgLy8gVE9ETyB2NSBkZXByZWNhdGUsIHY2IHJlbW92ZSBmb3Igc3hcbiAgICBjb2xvcjogKF9wYWxldHRlJG93bmVyU3RhdGUkYyA9IChfcGFsZXR0ZSA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsIHx8IChfcGFsZXR0ZSA9IF9wYWxldHRlW293bmVyU3RhdGUuY29sb3JdKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUubWFpbikgIT0gbnVsbCA/IF9wYWxldHRlJG93bmVyU3RhdGUkYyA6IHtcbiAgICAgIGFjdGlvbjogKF9wYWxldHRlMiA9ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlKSA9PSBudWxsIHx8IChfcGFsZXR0ZTIgPSBfcGFsZXR0ZTIuYWN0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUyLmFjdGl2ZSxcbiAgICAgIGRpc2FibGVkOiAoX3BhbGV0dGUzID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgfHwgKF9wYWxldHRlMyA9IF9wYWxldHRlMy5hY3Rpb24pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZTMuZGlzYWJsZWQsXG4gICAgICBpbmhlcml0OiB1bmRlZmluZWRcbiAgICB9W293bmVyU3RhdGUuY29sb3JdXG4gIH07XG59KTtcbmNvbnN0IFN2Z0ljb24gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBTdmdJY29uKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlTdmdJY29uJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdpbmhlcml0JyxcbiAgICAgIGNvbXBvbmVudCA9ICdzdmcnLFxuICAgICAgZm9udFNpemUgPSAnbWVkaXVtJyxcbiAgICAgIGh0bWxDb2xvcixcbiAgICAgIGluaGVyaXRWaWV3Qm94ID0gZmFsc2UsXG4gICAgICB0aXRsZUFjY2VzcyxcbiAgICAgIHZpZXdCb3ggPSAnMCAwIDI0IDI0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBoYXNTdmdBc0NoaWxkID0gLyojX19QVVJFX18qL1JlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJiBjaGlsZHJlbi50eXBlID09PSAnc3ZnJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBmb250U2l6ZSxcbiAgICBpbnN0YW5jZUZvbnRTaXplOiBpblByb3BzLmZvbnRTaXplLFxuICAgIGluaGVyaXRWaWV3Qm94LFxuICAgIHZpZXdCb3gsXG4gICAgaGFzU3ZnQXNDaGlsZFxuICB9KTtcbiAgY29uc3QgbW9yZSA9IHt9O1xuICBpZiAoIWluaGVyaXRWaWV3Qm94KSB7XG4gICAgbW9yZS52aWV3Qm94ID0gdmlld0JveDtcbiAgfVxuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoU3ZnSWNvblJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgZm9jdXNhYmxlOiBcImZhbHNlXCIsXG4gICAgY29sb3I6IGh0bWxDb2xvcixcbiAgICBcImFyaWEtaGlkZGVuXCI6IHRpdGxlQWNjZXNzID8gdW5kZWZpbmVkIDogdHJ1ZSxcbiAgICByb2xlOiB0aXRsZUFjY2VzcyA/ICdpbWcnIDogdW5kZWZpbmVkLFxuICAgIHJlZjogcmVmXG4gIH0sIG1vcmUsIG90aGVyLCBoYXNTdmdBc0NoaWxkICYmIGNoaWxkcmVuLnByb3BzLCB7XG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogW2hhc1N2Z0FzQ2hpbGQgPyBjaGlsZHJlbi5wcm9wcy5jaGlsZHJlbiA6IGNoaWxkcmVuLCB0aXRsZUFjY2VzcyA/IC8qI19fUFVSRV9fKi9fanN4KFwidGl0bGVcIiwge1xuICAgICAgY2hpbGRyZW46IHRpdGxlQWNjZXNzXG4gICAgfSkgOiBudWxsXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN2Z0ljb24ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogTm9kZSBwYXNzZWQgaW50byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogWW91IGNhbiB1c2UgdGhlIGBodG1sQ29sb3JgIHByb3AgdG8gYXBwbHkgYSBjb2xvciBhdHRyaWJ1dGUgdG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnYWN0aW9uJywgJ2Rpc2FibGVkJywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBmb250U2l6ZSBhcHBsaWVkIHRvIHRoZSBpY29uLiBEZWZhdWx0cyB0byAyNHB4LCBidXQgY2FuIGJlIGNvbmZpZ3VyZSB0byBpbmhlcml0IGZvbnQgc2l6ZS5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIGZvbnRTaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2luaGVyaXQnLCAnbGFyZ2UnLCAnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgY29sb3IgYXR0cmlidXRlIHRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGh0bWxDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJvb3Qgbm9kZSB3aWxsIGluaGVyaXQgdGhlIGN1c3RvbSBgY29tcG9uZW50YCdzIHZpZXdCb3ggYW5kIHRoZSBgdmlld0JveGBcbiAgICogcHJvcCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqIFVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHJlZmVyZW5jZSBhIGN1c3RvbSBgY29tcG9uZW50YCBhbmQgaGF2ZSBgU3ZnSWNvbmAgcGFzcyB0aGF0XG4gICAqIGBjb21wb25lbnRgJ3Mgdmlld0JveCB0byB0aGUgcm9vdCBub2RlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5oZXJpdFZpZXdCb3g6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNoYXBlLXJlbmRlcmluZyBhdHRyaWJ1dGUuIFRoZSBiZWhhdmlvciBvZiB0aGUgZGlmZmVyZW50IG9wdGlvbnMgaXMgZGVzY3JpYmVkIG9uIHRoZVxuICAgKiBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TVkcvQXR0cmlidXRlL3NoYXBlLXJlbmRlcmluZykuXG4gICAqIElmIHlvdSBhcmUgaGF2aW5nIGlzc3VlcyB3aXRoIGJsdXJyeSBpY29ucyB5b3Ugc2hvdWxkIGludmVzdGlnYXRlIHRoaXMgcHJvcC5cbiAgICovXG4gIHNoYXBlUmVuZGVyaW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogUHJvdmlkZXMgYSBodW1hbi1yZWFkYWJsZSB0aXRsZSBmb3IgdGhlIGVsZW1lbnQgdGhhdCBjb250YWlucyBpdC5cbiAgICogaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy1hY2Nlc3MvI0VxdWl2YWxlbnRcbiAgICovXG4gIHRpdGxlQWNjZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQWxsb3dzIHlvdSB0byByZWRlZmluZSB3aGF0IHRoZSBjb29yZGluYXRlcyB3aXRob3V0IHVuaXRzIG1lYW4gaW5zaWRlIGFuIFNWRyBlbGVtZW50LlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIFNWRyBlbGVtZW50IGlzIDUwMCAod2lkdGgpIGJ5IDIwMCAoaGVpZ2h0KSxcbiAgICogYW5kIHlvdSBwYXNzIHZpZXdCb3g9XCIwIDAgNTAgMjBcIixcbiAgICogdGhpcyBtZWFucyB0aGF0IHRoZSBjb29yZGluYXRlcyBpbnNpZGUgdGhlIFNWRyB3aWxsIGdvIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciAoMCwwKVxuICAgKiB0byBib3R0b20gcmlnaHQgKDUwLDIwKSBhbmQgZWFjaCB1bml0IHdpbGwgYmUgd29ydGggMTBweC5cbiAgICogQGRlZmF1bHQgJzAgMCAyNCAyNCdcbiAgICovXG4gIHZpZXdCb3g6IFByb3BUeXBlcy5zdHJpbmdcbn0gOiB2b2lkIDA7XG5TdmdJY29uLm11aU5hbWUgPSAnU3ZnSWNvbic7XG5leHBvcnQgZGVmYXVsdCBTdmdJY29uOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU3ZnSWNvbiBmcm9tICcuLi9TdmdJY29uJztcblxuLyoqXG4gKiBQcml2YXRlIG1vZHVsZSByZXNlcnZlZCBmb3IgQG11aSBwYWNrYWdlcy5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN2Z0ljb24ocGF0aCwgZGlzcGxheU5hbWUpIHtcbiAgZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCByZWYpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3ZnSWNvbiwgX2V4dGVuZHMoe1xuICAgICAgXCJkYXRhLXRlc3RpZFwiOiBgJHtkaXNwbGF5TmFtZX1JY29uYCxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBwYXRoXG4gICAgfSkpO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gTmVlZCB0byBzZXQgYGRpc3BsYXlOYW1lYCBvbiB0aGUgaW5uZXIgY29tcG9uZW50IGZvciBSZWFjdC5tZW1vLlxuICAgIC8vIFJlYWN0IHByaW9yIHRvIDE2LjE0IGlnbm9yZXMgYGRpc3BsYXlOYW1lYCBvbiB0aGUgd3JhcHBlci5cbiAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgJHtkaXNwbGF5TmFtZX1JY29uYDtcbiAgfVxuICBDb21wb25lbnQubXVpTmFtZSA9IFN2Z0ljb24ubXVpTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5tZW1vKCAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihDb21wb25lbnQpKTtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9kZWJvdW5jZSBhcyBkZWJvdW5jZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgZGVib3VuY2U7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2V0U2Nyb2xsYmFyU2l6ZSBhcyBnZXRTY3JvbGxiYXJTaXplIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBnZXRTY3JvbGxiYXJTaXplOyIsImltcG9ydCB7IHVuc3RhYmxlX2NyZWF0ZUNoYWluZWRGdW5jdGlvbiBhcyBjcmVhdGVDaGFpbmVkRnVuY3Rpb24gfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUNoYWluZWRGdW5jdGlvbjsiLCJpbXBvcnQgeyB1bnN0YWJsZV9kZXByZWNhdGVkUHJvcFR5cGUgYXMgZGVwcmVjYXRlZFByb3BUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCBkZXByZWNhdGVkUHJvcFR5cGU7IiwiaW1wb3J0IHsgdW5zdGFibGVfcmVxdWlyZVByb3BGYWN0b3J5IGFzIHJlcXVpcmVQcm9wRmFjdG9yeSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgcmVxdWlyZVByb3BGYWN0b3J5OyIsImltcG9ydCB7IHVuc3RhYmxlX3NldFJlZiBhcyBzZXRSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHNldFJlZjsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVuc3RhYmxlX3VzZUlkIGFzIHVzZUlkIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1c2VJZDsiLCJpbXBvcnQgeyB1bnN0YWJsZV91bnN1cHBvcnRlZFByb3AgYXMgdW5zdXBwb3J0ZWRQcm9wIH0gZnJvbSAnQG11aS91dGlscyc7XG5leHBvcnQgZGVmYXVsdCB1bnN1cHBvcnRlZFByb3A7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1bnN0YWJsZV9DbGFzc05hbWVHZW5lcmF0b3IgYXMgQ2xhc3NOYW1lR2VuZXJhdG9yIH0gZnJvbSAnQG11aS9iYXNlL0NsYXNzTmFtZUdlbmVyYXRvcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNhcGl0YWxpemUgfSBmcm9tICcuL2NhcGl0YWxpemUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVDaGFpbmVkRnVuY3Rpb24gfSBmcm9tICcuL2NyZWF0ZUNoYWluZWRGdW5jdGlvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZVN2Z0ljb24gfSBmcm9tICcuL2NyZWF0ZVN2Z0ljb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkZWJvdW5jZSB9IGZyb20gJy4vZGVib3VuY2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkZXByZWNhdGVkUHJvcFR5cGUgfSBmcm9tICcuL2RlcHJlY2F0ZWRQcm9wVHlwZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzTXVpRWxlbWVudCB9IGZyb20gJy4vaXNNdWlFbGVtZW50JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb3duZXJEb2N1bWVudCB9IGZyb20gJy4vb3duZXJEb2N1bWVudCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG93bmVyV2luZG93IH0gZnJvbSAnLi9vd25lcldpbmRvdyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlcXVpcmVQcm9wRmFjdG9yeSB9IGZyb20gJy4vcmVxdWlyZVByb3BGYWN0b3J5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2V0UmVmIH0gZnJvbSAnLi9zZXRSZWYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV91c2VFbmhhbmNlZEVmZmVjdCB9IGZyb20gJy4vdXNlRW5oYW5jZWRFZmZlY3QnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV91c2VJZCB9IGZyb20gJy4vdXNlSWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN1cHBvcnRlZFByb3AgfSBmcm9tICcuL3Vuc3VwcG9ydGVkUHJvcCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZUNvbnRyb2xsZWQgfSBmcm9tICcuL3VzZUNvbnRyb2xsZWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VFdmVudENhbGxiYWNrIH0gZnJvbSAnLi91c2VFdmVudENhbGxiYWNrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlRm9ya1JlZiB9IGZyb20gJy4vdXNlRm9ya1JlZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZUlzRm9jdXNWaXNpYmxlIH0gZnJvbSAnLi91c2VJc0ZvY3VzVmlzaWJsZSc7XG4vLyBUT0RPOiByZW1vdmUgdGhpcyBleHBvcnQgb25jZSBDbGFzc05hbWVHZW5lcmF0b3IgaXMgc3RhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgdW5zdGFibGVfQ2xhc3NOYW1lR2VuZXJhdG9yID0ge1xuICBjb25maWd1cmU6IGdlbmVyYXRvciA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2FybihbJ01VSTogYENsYXNzTmFtZUdlbmVyYXRvcmAgaW1wb3J0IGZyb20gYEBtdWkvbWF0ZXJpYWwvdXRpbHNgIGlzIG91dGRhdGVkIGFuZCBtaWdodCBjYXVzZSB1bmV4cGVjdGVkIGlzc3Vlcy4nLCAnJywgXCJZb3Ugc2hvdWxkIHVzZSBgaW1wb3J0IHsgdW5zdGFibGVfQ2xhc3NOYW1lR2VuZXJhdG9yIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9jbGFzc05hbWUnYCBpbnN0ZWFkXCIsICcnLCAnVGhlIGRldGFpbCBvZiB0aGUgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzMwMDExI2lzc3VlY29tbWVudC0xMDI0OTkzNDAxJywgJycsICdUaGUgdXBkYXRlZCBkb2N1bWVudGF0aW9uOiBodHRwczovL211aS5jb20vZ3VpZGVzL2NsYXNzbmFtZS1nZW5lcmF0b3IvJ10uam9pbignXFxuJykpO1xuICAgIH1cbiAgICBDbGFzc05hbWVHZW5lcmF0b3IuY29uZmlndXJlKGdlbmVyYXRvcik7XG4gIH1cbn07IiwiaW1wb3J0IHsgdW5zdGFibGVfaXNNdWlFbGVtZW50IGFzIGlzTXVpRWxlbWVudCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgaXNNdWlFbGVtZW50OyIsImltcG9ydCB7IHVuc3RhYmxlX293bmVyRG9jdW1lbnQgYXMgb3duZXJEb2N1bWVudCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgb3duZXJEb2N1bWVudDsiLCJpbXBvcnQgeyB1bnN0YWJsZV9vd25lcldpbmRvdyBhcyBvd25lcldpbmRvdyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgb3duZXJXaW5kb3c7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1bnN0YWJsZV91c2VDb250cm9sbGVkIGFzIHVzZUNvbnRyb2xsZWQgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHVzZUNvbnRyb2xsZWQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1bnN0YWJsZV91c2VFbmhhbmNlZEVmZmVjdCBhcyB1c2VFbmhhbmNlZEVmZmVjdCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRW5oYW5jZWRFZmZlY3Q7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1bnN0YWJsZV91c2VFdmVudENhbGxiYWNrIGFzIHVzZUV2ZW50Q2FsbGJhY2sgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHVzZUV2ZW50Q2FsbGJhY2s7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcmtSZWY7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1bnN0YWJsZV91c2VJc0ZvY3VzVmlzaWJsZSBhcyB1c2VJc0ZvY3VzVmlzaWJsZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQgdXNlSXNGb2N1c1Zpc2libGU7IiwiY29uc3QgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xuZXhwb3J0IGRlZmF1bHQgaGFzU3ltYm9sID8gU3ltYm9sLmZvcignbXVpLm5lc3RlZCcpIDogJ19fVEhFTUVfTkVTVEVEX18nOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGV4YWN0UHJvcCB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IFRoZW1lQ29udGV4dCBmcm9tICcuLi91c2VUaGVtZS9UaGVtZUNvbnRleHQnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3VzZVRoZW1lJztcbmltcG9ydCBuZXN0ZWQgZnJvbSAnLi9uZXN0ZWQnO1xuXG4vLyBUbyBzdXBwb3J0IGNvbXBvc2l0aW9uIG9mIHRoZW1lLlxuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIG1lcmdlT3V0ZXJMb2NhbFRoZW1lKG91dGVyVGhlbWUsIGxvY2FsVGhlbWUpIHtcbiAgaWYgKHR5cGVvZiBsb2NhbFRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgbWVyZ2VkVGhlbWUgPSBsb2NhbFRoZW1lKG91dGVyVGhlbWUpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIW1lcmdlZFRoZW1lKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFlvdSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHlvdXIgdGhlbWUgZnVuY3Rpb24sIGkuZS4nLCAnPFRoZW1lUHJvdmlkZXIgdGhlbWU9eygpID0+ICh7fSl9IC8+J10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VkVGhlbWU7XG4gIH1cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvdXRlclRoZW1lLCBsb2NhbFRoZW1lKTtcbn1cblxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCB0YWtlcyBhIGB0aGVtZWAgcHJvcC5cbiAqIEl0IG1ha2VzIHRoZSBgdGhlbWVgIGF2YWlsYWJsZSBkb3duIHRoZSBSZWFjdCB0cmVlIHRoYW5rcyB0byBSZWFjdCBjb250ZXh0LlxuICogVGhpcyBjb21wb25lbnQgc2hvdWxkIHByZWZlcmFibHkgYmUgdXNlZCBhdCAqKnRoZSByb290IG9mIHlvdXIgY29tcG9uZW50IHRyZWUqKi5cbiAqL1xuZnVuY3Rpb24gVGhlbWVQcm92aWRlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgdGhlbWU6IGxvY2FsVGhlbWVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvdXRlclRoZW1lID0gdXNlVGhlbWUoKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAob3V0ZXJUaGVtZSA9PT0gbnVsbCAmJiB0eXBlb2YgbG9jYWxUaGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogWW91IGFyZSBwcm92aWRpbmcgYSB0aGVtZSBmdW5jdGlvbiBwcm9wIHRvIHRoZSBUaGVtZVByb3ZpZGVyIGNvbXBvbmVudDonLCAnPFRoZW1lUHJvdmlkZXIgdGhlbWU9e291dGVyVGhlbWUgPT4gb3V0ZXJUaGVtZX0gLz4nLCAnJywgJ0hvd2V2ZXIsIG5vIG91dGVyIHRoZW1lIGlzIHByZXNlbnQuJywgJ01ha2Ugc3VyZSBhIHRoZW1lIGlzIGFscmVhZHkgaW5qZWN0ZWQgaGlnaGVyIGluIHRoZSBSZWFjdCB0cmVlICcgKyAnb3IgcHJvdmlkZSBhIHRoZW1lIG9iamVjdC4nXS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0ZXJUaGVtZSA9PT0gbnVsbCA/IGxvY2FsVGhlbWUgOiBtZXJnZU91dGVyTG9jYWxUaGVtZShvdXRlclRoZW1lLCBsb2NhbFRoZW1lKTtcbiAgICBpZiAob3V0cHV0ICE9IG51bGwpIHtcbiAgICAgIG91dHB1dFtuZXN0ZWRdID0gb3V0ZXJUaGVtZSAhPT0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfSwgW2xvY2FsVGhlbWUsIG91dGVyVGhlbWVdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRoZW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB0aGVtZSxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUaGVtZVByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFlvdXIgY29tcG9uZW50IHRyZWUuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBBIHRoZW1lIG9iamVjdC4gWW91IGNhbiBwcm92aWRlIGEgZnVuY3Rpb24gdG8gZXh0ZW5kIHRoZSBvdXRlciB0aGVtZS5cbiAgICovXG4gIHRoZW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pLmlzUmVxdWlyZWRcbn0gOiB2b2lkIDA7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUaGVtZVByb3ZpZGVyLnByb3BUeXBlcyA9IGV4YWN0UHJvcChUaGVtZVByb3ZpZGVyLnByb3BUeXBlcykgOiB2b2lkIDA7XG59XG5leHBvcnQgZGVmYXVsdCBUaGVtZVByb3ZpZGVyOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmNvbnN0IFRoZW1lQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgVGhlbWVDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1RoZW1lQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBUaGVtZUNvbnRleHQ7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRoZW1lQ29udGV4dCBmcm9tICcuL1RoZW1lQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaGVtZSgpIHtcbiAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRGVidWdWYWx1ZSh0aGVtZSk7XG4gIH1cbiAgcmV0dXJuIHRoZW1lO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8IE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR2xvYmFsU3R5bGVzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBzdHlsZXMsXG4gICAgZGVmYXVsdFRoZW1lID0ge31cbiAgfSA9IHByb3BzO1xuICBjb25zdCBnbG9iYWxTdHlsZXMgPSB0eXBlb2Ygc3R5bGVzID09PSAnZnVuY3Rpb24nID8gdGhlbWVJbnB1dCA9PiBzdHlsZXMoaXNFbXB0eSh0aGVtZUlucHV0KSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lSW5wdXQpIDogc3R5bGVzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBnbG9iYWxTdHlsZXNcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHbG9iYWxTdHlsZXMucHJvcFR5cGVzID0ge1xuICBkZWZhdWx0VGhlbWU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHN0eWxlczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pXG59IDogdm9pZCAwOyIsIi8qKlxuICogQG11aS9zdHlsZWQtZW5naW5lIHY1LjE1LjFcbiAqXG4gKiBAbGljZW5zZSBNSVRcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIGNsaWVudCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5pbXBvcnQgZW1TdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0eWxlZCh0YWcsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc3R5bGVzRmFjdG9yeSA9IGVtU3R5bGVkKHRhZywgb3B0aW9ucyk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuICguLi5zdHlsZXMpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnID8gYFwiJHt0YWd9XCJgIDogJ2NvbXBvbmVudCc7XG4gICAgICBpZiAoc3R5bGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBTZWVtcyBsaWtlIHlvdSBjYWxsZWQgXFxgc3R5bGVkKCR7Y29tcG9uZW50fSkoKVxcYCB3aXRob3V0IGEgXFxgc3R5bGVcXGAgYXJndW1lbnQuYCwgJ1lvdSBtdXN0IHByb3ZpZGUgYSBgc3R5bGVzYCBhcmd1bWVudDogYHN0eWxlZChcImRpdlwiKShzdHlsZVlvdUZvcmdvdFRvUGFzcylgLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGVzLnNvbWUoc3R5bGUgPT4gc3R5bGUgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiB0aGUgc3R5bGVkKCR7Y29tcG9uZW50fSkoLi4uYXJncykgQVBJIHJlcXVpcmVzIGFsbCBpdHMgYXJncyB0byBiZSBkZWZpbmVkLmApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0ZhY3RvcnkoLi4uc3R5bGVzKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBzdHlsZXNGYWN0b3J5O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyA9ICh0YWcsIHByb2Nlc3NvcikgPT4ge1xuICAvLyBFbW90aW9uIGF0dGFjaGVzIGFsbCB0aGUgc3R5bGVzIGFzIGBfX2Vtb3Rpb25fc3R5bGVzYC5cbiAgLy8gUmVmOiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2Jsb2IvMTZkOTcxZDBkYTIyOTU5NmQ2YmNjMzlkMjgyYmE5NzUzYzllZTdjZi9wYWNrYWdlcy9zdHlsZWQvc3JjL2Jhc2UuanMjTDE4NlxuICBpZiAoQXJyYXkuaXNBcnJheSh0YWcuX19lbW90aW9uX3N0eWxlcykpIHtcbiAgICB0YWcuX19lbW90aW9uX3N0eWxlcyA9IHByb2Nlc3Nvcih0YWcuX19lbW90aW9uX3N0eWxlcyk7XG4gIH1cbn07XG5leHBvcnQgeyBUaGVtZUNvbnRleHQsIGtleWZyYW1lcywgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdHlsZWRFbmdpbmVQcm92aWRlciB9IGZyb20gJy4vU3R5bGVkRW5naW5lUHJvdmlkZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHbG9iYWxTdHlsZXMgfSBmcm9tICcuL0dsb2JhbFN0eWxlcyc7Il0sIm5hbWVzIjpbImdldFNlbGVjdFV0aWxpdHlDbGFzc2VzIiwic2xvdCIsImdlbmVyYXRlVXRpbGl0eUNsYXNzIiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyIsIl9zcGFuIiwiX2V4Y2x1ZGVkIiwiU2VsZWN0U2VsZWN0Iiwic3R5bGVkIiwibmFtZSIsIm92ZXJyaWRlc1Jlc29sdmVyIiwicHJvcHMiLCJzdHlsZXMiLCJvd25lclN0YXRlIiwic2VsZWN0IiwidmFyaWFudCIsImVycm9yIiwibXVsdGlwbGUiLCJoZWlnaHQiLCJtaW5IZWlnaHQiLCJ0ZXh0T3ZlcmZsb3ciLCJ3aGl0ZVNwYWNlIiwib3ZlcmZsb3ciLCJTZWxlY3RJY29uIiwiaWNvbiIsImNhcGl0YWxpemUiLCJvcGVuIiwiaWNvbk9wZW4iLCJTZWxlY3ROYXRpdmVJbnB1dCIsInNob3VsZEZvcndhcmRQcm9wIiwicHJvcCIsIm5hdGl2ZUlucHV0IiwiYm90dG9tIiwibGVmdCIsInBvc2l0aW9uIiwib3BhY2l0eSIsInBvaW50ZXJFdmVudHMiLCJ3aWR0aCIsImJveFNpemluZyIsImFyZUVxdWFsVmFsdWVzIiwiYSIsImIiLCJTdHJpbmciLCJpc0VtcHR5IiwiZGlzcGxheSIsInRyaW0iLCJyZWYiLCJfTWVudVByb3BzJHNsb3RQcm9wcyIsImFyaWFEZXNjcmliZWRieSIsImFyaWFMYWJlbCIsImF1dG9Gb2N1cyIsImF1dG9XaWR0aCIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiZGVmYXVsdE9wZW4iLCJkZWZhdWx0VmFsdWUiLCJkaXNhYmxlZCIsImRpc3BsYXlFbXB0eSIsIkljb25Db21wb25lbnQiLCJpbnB1dFJlZiIsImlucHV0UmVmUHJvcCIsImxhYmVsSWQiLCJNZW51UHJvcHMiLCJvbkJsdXIiLCJvbkNoYW5nZSIsIm9uQ2xvc2UiLCJvbkZvY3VzIiwib25PcGVuIiwib3BlblByb3AiLCJyZWFkT25seSIsInJlbmRlclZhbHVlIiwiU2VsZWN0RGlzcGxheVByb3BzIiwidGFiSW5kZXgiLCJ0YWJJbmRleFByb3AiLCJ2YWx1ZSIsInZhbHVlUHJvcCIsIm90aGVyIiwic2V0VmFsdWVTdGF0ZSIsInVzZUNvbnRyb2xsZWQiLCJjb250cm9sbGVkIiwiZGVmYXVsdCIsIm9wZW5TdGF0ZSIsInNldE9wZW5TdGF0ZSIsImRpc3BsYXlSZWYiLCJkaXNwbGF5Tm9kZSIsInNldERpc3BsYXlOb2RlIiwiY3VycmVudCIsImlzT3BlbkNvbnRyb2xsZWQiLCJtZW51TWluV2lkdGhTdGF0ZSIsInNldE1lbnVNaW5XaWR0aFN0YXRlIiwiaGFuZGxlUmVmIiwidXNlRm9ya1JlZiIsImhhbmRsZURpc3BsYXlSZWYiLCJub2RlIiwiYW5jaG9yRWxlbWVudCIsInBhcmVudE5vZGUiLCJmb2N1cyIsImNsaWVudFdpZHRoIiwibGFiZWwiLCJvd25lckRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJoYW5kbGVyIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInVwZGF0ZSIsImV2ZW50IiwiY2hpbGRyZW5BcnJheSIsInRvQXJyYXkiLCJoYW5kbGVJdGVtQ2xpY2siLCJjaGlsZCIsIm5ld1ZhbHVlIiwiY3VycmVudFRhcmdldCIsImhhc0F0dHJpYnV0ZSIsIkFycmF5IiwiaXNBcnJheSIsInNsaWNlIiwiaXRlbUluZGV4IiwiaW5kZXhPZiIsInB1c2giLCJzcGxpY2UiLCJvbkNsaWNrIiwibmF0aXZlRXZlbnQiLCJjbG9uZWRFdmVudCIsImNvbnN0cnVjdG9yIiwidHlwZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5Iiwid3JpdGFibGUiLCJkaXNwbGF5U2luZ2xlIiwiZGlzcGxheU11bHRpcGxlIiwiY29tcHV0ZURpc3BsYXkiLCJmb3VuZE1hdGNoIiwiaXRlbXMiLCJtYXAiLCJzZWxlY3RlZCIsIkVycm9yIiwic29tZSIsInYiLCJvbktleVVwIiwia2V5IiwicHJldmVudERlZmF1bHQiLCJyb2xlIiwidW5kZWZpbmVkIiwibGVuZ3RoIiwicmVkdWNlIiwib3V0cHV0IiwiaW5kZXgiLCJtZW51TWluV2lkdGgiLCJidXR0b25JZCIsImlkIiwiY2xhc3NlcyIsInNsb3RzIiwiY29tcG9zZUNsYXNzZXMiLCJ1c2VVdGlsaXR5Q2xhc3NlcyIsInBhcGVyUHJvcHMiLCJQYXBlclByb3BzIiwic2xvdFByb3BzIiwicGFwZXIiLCJsaXN0Ym94SWQiLCJ1c2VJZCIsImZpbHRlciIsIkJvb2xlYW4iLCJqb2luIiwib25LZXlEb3duIiwib25Nb3VzZURvd24iLCJidXR0b24iLCJjbHN4IiwiZmluZCIsImNoaWxkSXRlbSIsInRhcmdldCIsImFzIiwiTWVudSIsImFuY2hvckVsIiwiYW5jaG9yT3JpZ2luIiwidmVydGljYWwiLCJob3Jpem9udGFsIiwidHJhbnNmb3JtT3JpZ2luIiwiTWVudUxpc3RQcm9wcyIsImRpc2FibGVMaXN0V3JhcCIsInN0eWxlIiwibWluV2lkdGgiLCJkIiwiX2V4Y2x1ZGVkMiIsInN0eWxlZFJvb3RDb25maWciLCJyb290IiwiU3R5bGVkSW5wdXQiLCJJbnB1dCIsIlN0eWxlZE91dGxpbmVkSW5wdXQiLCJPdXRsaW5lZElucHV0IiwiU3R5bGVkRmlsbGVkSW5wdXQiLCJGaWxsZWRJbnB1dCIsIlNlbGVjdCIsImluUHJvcHMiLCJ1c2VUaGVtZVByb3BzIiwiY2xhc3Nlc1Byb3AiLCJBcnJvd0Ryb3BEb3duIiwiaW5wdXQiLCJpbnB1dFByb3BzIiwibmF0aXZlIiwidmFyaWFudFByb3AiLCJpbnB1dENvbXBvbmVudCIsIk5hdGl2ZVNlbGVjdElucHV0IiwibXVpRm9ybUNvbnRyb2wiLCJ1c2VGb3JtQ29udHJvbCIsImZjcyIsImZvcm1Db250cm9sU3RhdGUiLCJzdGF0ZXMiLCJyZXN0T2ZDbGFzc2VzIiwiSW5wdXRDb21wb25lbnQiLCJzdGFuZGFyZCIsIm91dGxpbmVkIiwiZmlsbGVkIiwiaW5wdXRDb21wb25lbnRSZWYiLCJkZWVwbWVyZ2UiLCJub3RjaGVkIiwibXVpTmFtZSIsImdldFRleHRGaWVsZFV0aWxpdHlDbGFzcyIsInZhcmlhbnRDb21wb25lbnQiLCJUZXh0RmllbGRSb290IiwiRm9ybUNvbnRyb2wiLCJhdXRvQ29tcGxldGUiLCJjb2xvciIsIkZvcm1IZWxwZXJUZXh0UHJvcHMiLCJmdWxsV2lkdGgiLCJoZWxwZXJUZXh0IiwiaWRPdmVycmlkZSIsIklucHV0TGFiZWxQcm9wcyIsIklucHV0UHJvcHMiLCJtYXhSb3dzIiwibWluUm93cyIsIm11bHRpbGluZSIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJyb3dzIiwiU2VsZWN0UHJvcHMiLCJJbnB1dE1vcmUiLCJzaHJpbmsiLCJoZWxwZXJUZXh0SWQiLCJpbnB1dExhYmVsSWQiLCJJbnB1dEVsZW1lbnQiLCJJbnB1dExhYmVsIiwiaHRtbEZvciIsIkZvcm1IZWxwZXJUZXh0IiwiZ2V0VG9vbGJhclV0aWxpdHlDbGFzcyIsIlRvb2xiYXJSb290IiwiZGlzYWJsZUd1dHRlcnMiLCJndXR0ZXJzIiwidGhlbWUiLCJhbGlnbkl0ZW1zIiwicGFkZGluZ0xlZnQiLCJzcGFjaW5nIiwicGFkZGluZ1JpZ2h0IiwiYnJlYWtwb2ludHMiLCJ1cCIsIm1peGlucyIsInRvb2xiYXIiLCJjb21wb25lbnQiLCJnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzIiwiVHlwb2dyYXBoeVJvb3QiLCJhbGlnbiIsIm5vV3JhcCIsImd1dHRlckJvdHRvbSIsInBhcmFncmFwaCIsIm1hcmdpbiIsImZvbnQiLCJ0eXBvZ3JhcGh5IiwidGV4dEFsaWduIiwibWFyZ2luQm90dG9tIiwiZGVmYXVsdFZhcmlhbnRNYXBwaW5nIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2Iiwic3VidGl0bGUxIiwic3VidGl0bGUyIiwiYm9keTEiLCJib2R5MiIsImluaGVyaXQiLCJjb2xvclRyYW5zZm9ybWF0aW9ucyIsInByaW1hcnkiLCJ0ZXh0UHJpbWFyeSIsInNlY29uZGFyeSIsInRleHRTZWNvbmRhcnkiLCJ0aGVtZVByb3BzIiwidHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyIsImV4dGVuZFN4UHJvcCIsInZhcmlhbnRNYXBwaW5nIiwiQ29tcG9uZW50IiwiVGhlbWVQcm92aWRlciIsIl9yZWYiLCJ0aGVtZUlucHV0Iiwic2NvcGVkVGhlbWUiLCJ0aGVtZUlkIiwiYmxhY2siLCJ3aGl0ZSIsIkExMDAiLCJBMjAwIiwiQTQwMCIsIkE3MDAiLCJsaWdodCIsInRleHQiLCJkaXZpZGVyIiwiYmFja2dyb3VuZCIsImFjdGlvbiIsImFjdGl2ZSIsImhvdmVyIiwiaG92ZXJPcGFjaXR5Iiwic2VsZWN0ZWRPcGFjaXR5IiwiZGlzYWJsZWRCYWNrZ3JvdW5kIiwiZGlzYWJsZWRPcGFjaXR5IiwiZm9jdXNPcGFjaXR5IiwiYWN0aXZhdGVkT3BhY2l0eSIsImRhcmsiLCJhZGRMaWdodE9yRGFyayIsImludGVudCIsImRpcmVjdGlvbiIsInNoYWRlIiwidG9uYWxPZmZzZXQiLCJ0b25hbE9mZnNldExpZ2h0IiwidG9uYWxPZmZzZXREYXJrIiwiaGFzT3duUHJvcGVydHkiLCJtYWluIiwiY2FzZUFsbENhcHMiLCJ0ZXh0VHJhbnNmb3JtIiwiZGVmYXVsdEZvbnRGYW1pbHkiLCJjcmVhdGVUeXBvZ3JhcGh5IiwicGFsZXR0ZSIsImZvbnRGYW1pbHkiLCJmb250U2l6ZSIsImZvbnRXZWlnaHRMaWdodCIsImZvbnRXZWlnaHRSZWd1bGFyIiwiZm9udFdlaWdodE1lZGl1bSIsImZvbnRXZWlnaHRCb2xkIiwiaHRtbEZvbnRTaXplIiwiYWxsVmFyaWFudHMiLCJweFRvUmVtIiwicHhUb1JlbTIiLCJjb2VmIiwic2l6ZSIsImJ1aWxkVmFyaWFudCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0IiwibGV0dGVyU3BhY2luZyIsImNhc2luZyIsIk1hdGgiLCJyb3VuZCIsInZhcmlhbnRzIiwiY2FwdGlvbiIsIm92ZXJsaW5lIiwiY2xvbmUiLCJjcmVhdGVTaGFkb3ciLCJweCIsImVhc2luZyIsImVhc2VJbk91dCIsImVhc2VPdXQiLCJlYXNlSW4iLCJzaGFycCIsImR1cmF0aW9uIiwic2hvcnRlc3QiLCJzaG9ydGVyIiwic2hvcnQiLCJjb21wbGV4IiwiZW50ZXJpbmdTY3JlZW4iLCJsZWF2aW5nU2NyZWVuIiwiZm9ybWF0TXMiLCJtaWxsaXNlY29uZHMiLCJnZXRBdXRvSGVpZ2h0RHVyYXRpb24iLCJjb25zdGFudCIsImNyZWF0ZVRyYW5zaXRpb25zIiwiaW5wdXRUcmFuc2l0aW9ucyIsIm1lcmdlZEVhc2luZyIsIm1lcmdlZER1cmF0aW9uIiwiY3JlYXRlIiwib3B0aW9ucyIsImR1cmF0aW9uT3B0aW9uIiwiZWFzaW5nT3B0aW9uIiwiZGVsYXkiLCJhbmltYXRlZFByb3AiLCJtb2JpbGVTdGVwcGVyIiwiZmFiIiwic3BlZWREaWFsIiwiYXBwQmFyIiwiZHJhd2VyIiwibW9kYWwiLCJzbmFja2JhciIsInRvb2x0aXAiLCJhcmdzIiwibWl4aW5zSW5wdXQiLCJwYWxldHRlSW5wdXQiLCJ0cmFuc2l0aW9ucyIsInRyYW5zaXRpb25zSW5wdXQiLCJ0eXBvZ3JhcGh5SW5wdXQiLCJ2YXJzIiwibW9kZSIsImNvbnRyYXN0VGhyZXNob2xkIiwiZ2V0RGVmYXVsdFByaW1hcnkiLCJnZXREZWZhdWx0U2Vjb25kYXJ5IiwiZ2V0RGVmYXVsdEVycm9yIiwiaW5mbyIsImdldERlZmF1bHRJbmZvIiwic3VjY2VzcyIsImdldERlZmF1bHRTdWNjZXNzIiwid2FybmluZyIsImdldERlZmF1bHRXYXJuaW5nIiwiZ2V0Q29udHJhc3RUZXh0IiwiYXVnbWVudENvbG9yIiwibWFpblNoYWRlIiwibGlnaHRTaGFkZSIsImRhcmtTaGFkZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb250cmFzdFRleHQiLCJtb2RlcyIsImNvbW1vbiIsImdyZXkiLCJjcmVhdGVQYWxldHRlIiwic3lzdGVtVGhlbWUiLCJtdWlUaGVtZSIsInNoYWRvd3MiLCJ6SW5kZXgiLCJhY2MiLCJhcmd1bWVudCIsInVuc3RhYmxlX3N4Q29uZmlnIiwiZGVmYXVsdFN4Q29uZmlnIiwidW5zdGFibGVfc3giLCJzdHlsZUZ1bmN0aW9uU3giLCJzeCIsInRoaXMiLCJlbGV2YXRpb24iLCJhbHBoYVZhbHVlIiwibG9nIiwidG9GaXhlZCIsInJvb3RTaG91bGRGb3J3YXJkUHJvcCIsInNsb3RTaG91bGRGb3J3YXJkUHJvcCIsImRlZmF1bHRUaGVtZSIsInVzZVRoZW1lIiwicmVmbG93Iiwic2Nyb2xsVG9wIiwiZ2V0VHJhbnNpdGlvblByb3BzIiwiX3N0eWxlJHRyYW5zaXRpb25EdXJhIiwiX3N0eWxlJHRyYW5zaXRpb25UaW1pIiwidGltZW91dCIsInRyYW5zaXRpb25EdXJhdGlvbiIsInRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiIsInRyYW5zaXRpb25EZWxheSIsImdldFN2Z0ljb25VdGlsaXR5Q2xhc3MiLCJTdmdJY29uUm9vdCIsIl90aGVtZSR0cmFuc2l0aW9ucyIsIl90aGVtZSR0cmFuc2l0aW9ucyRjciIsIl90aGVtZSR0cmFuc2l0aW9uczIiLCJfdGhlbWUkdHlwb2dyYXBoeSIsIl90aGVtZSR0eXBvZ3JhcGh5JHB4VCIsIl90aGVtZSR0eXBvZ3JhcGh5MiIsIl90aGVtZSR0eXBvZ3JhcGh5MiRweCIsIl90aGVtZSR0eXBvZ3JhcGh5MyIsIl90aGVtZSR0eXBvZ3JhcGh5MyRweCIsIl9wYWxldHRlJG93bmVyU3RhdGUkYyIsIl9wYWxldHRlIiwiX3BhbGV0dGUyIiwiX3BhbGV0dGUzIiwidXNlclNlbGVjdCIsImZpbGwiLCJoYXNTdmdBc0NoaWxkIiwiZmxleFNocmluayIsInRyYW5zaXRpb24iLCJjYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsIlN2Z0ljb24iLCJodG1sQ29sb3IiLCJpbmhlcml0Vmlld0JveCIsInRpdGxlQWNjZXNzIiwidmlld0JveCIsImluc3RhbmNlRm9udFNpemUiLCJtb3JlIiwiZm9jdXNhYmxlIiwiY3JlYXRlU3ZnSWNvbiIsInBhdGgiLCJkaXNwbGF5TmFtZSIsInVuc3RhYmxlX0NsYXNzTmFtZUdlbmVyYXRvciIsImNvbmZpZ3VyZSIsImdlbmVyYXRvciIsIkNsYXNzTmFtZUdlbmVyYXRvciIsIlN5bWJvbCIsImZvciIsImxvY2FsVGhlbWUiLCJvdXRlclRoZW1lIiwibWVyZ2VPdXRlckxvY2FsVGhlbWUiLCJuZXN0ZWQiLCJUaGVtZUNvbnRleHQiLCJQcm92aWRlciIsIkdsb2JhbFN0eWxlcyIsImdsb2JhbFN0eWxlcyIsIm9iaiIsImtleXMiLCJ0YWciLCJpbnRlcm5hbF9wcm9jZXNzU3R5bGVzIiwicHJvY2Vzc29yIiwiX19lbW90aW9uX3N0eWxlcyJdLCJzb3VyY2VSb290IjoiIn0=