"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[993],{2335:(e,t,o)=>{o.d(t,{A:()=>w});var n=o(8587),r=o(8168),i=o(6540),a=o(1317),s=o(5659),l=o(627),d=o(1848),u=o(9770),c=o(5669),p=o(8413),m=o(1609),f=o(1175);function h(e){return(0,m.Ay)("MuiFilledInput",e)}const b=(0,r.A)({},f.A,(0,p.A)("MuiFilledInput",["root","underline","input"]));var g=o(4848);const A=["disableUnderline","components","componentsProps","fullWidth","hiddenLabel","inputComponent","multiline","slotProps","slots","type"],v=(0,d.Ay)(l.Sh,{shouldForwardProp:e=>(0,u.A)(e)||"classes"===e,name:"MuiFilledInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[...(0,l.WC)(e,t),!o.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{var o;const n="light"===e.palette.mode,i=n?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)",a=n?"rgba(0, 0, 0, 0.06)":"rgba(255, 255, 255, 0.09)",s=n?"rgba(0, 0, 0, 0.09)":"rgba(255, 255, 255, 0.13)",l=n?"rgba(0, 0, 0, 0.12)":"rgba(255, 255, 255, 0.12)";return(0,r.A)({position:"relative",backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a,borderTopLeftRadius:(e.vars||e).shape.borderRadius,borderTopRightRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create("background-color",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),"&:hover":{backgroundColor:e.vars?e.vars.palette.FilledInput.hoverBg:s,"@media (hover: none)":{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a}},[`&.${b.focused}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a},[`&.${b.disabled}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.disabledBg:l}},!t.disableUnderline&&{"&::after":{borderBottom:`2px solid ${null==(o=(e.vars||e).palette[t.color||"primary"])?void 0:o.main}`,left:0,bottom:0,content:'""',position:"absolute",right:0,transform:"scaleX(0)",transition:e.transitions.create("transform",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:"none"},[`&.${b.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${b.error}`]:{"&::before, &::after":{borderBottomColor:(e.vars||e).palette.error.main}},"&::before":{borderBottom:`1px solid ${e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`:i}`,left:0,bottom:0,content:'"\\00a0"',position:"absolute",right:0,transition:e.transitions.create("border-bottom-color",{duration:e.transitions.duration.shorter}),pointerEvents:"none"},[`&:hover:not(.${b.disabled}, .${b.error}):before`]:{borderBottom:`1px solid ${(e.vars||e).palette.text.primary}`},[`&.${b.disabled}:before`]:{borderBottomStyle:"dotted"}},t.startAdornment&&{paddingLeft:12},t.endAdornment&&{paddingRight:12},t.multiline&&(0,r.A)({padding:"25px 12px 8px"},"small"===t.size&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17},t.hiddenLabel&&"small"===t.size&&{paddingTop:8,paddingBottom:9}))})),y=(0,d.Ay)(l.f3,{name:"MuiFilledInput",slot:"Input",overridesResolver:l.Oj})((({theme:e,ownerState:t})=>(0,r.A)({paddingTop:25,paddingRight:12,paddingBottom:8,paddingLeft:12},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:"light"===e.palette.mode?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:"light"===e.palette.mode?null:"#fff",caretColor:"light"===e.palette.mode?null:"#fff",borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"}},e.vars&&{"&:-webkit-autofill":{borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"},[e.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},"small"===t.size&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0},t.hiddenLabel&&"small"===t.size&&{paddingTop:8,paddingBottom:9},t.multiline&&{paddingTop:0,paddingBottom:0,paddingLeft:0,paddingRight:0}))),x=i.forwardRef((function(e,t){var o,i,d,u;const p=(0,c.b)({props:e,name:"MuiFilledInput"}),{components:m={},componentsProps:f,fullWidth:b=!1,inputComponent:x="input",multiline:w=!1,slotProps:S,slots:k={},type:C="text"}=p,R=(0,n.A)(p,A),M=(0,r.A)({},p,{fullWidth:b,inputComponent:x,multiline:w,type:C}),E=(e=>{const{classes:t,disableUnderline:o}=e,n={root:["root",!o&&"underline"],input:["input"]},i=(0,s.A)(n,h,t);return(0,r.A)({},t,i)})(p),P={root:{ownerState:M},input:{ownerState:M}},T=(null!=S?S:f)?(0,a.A)(P,null!=S?S:f):P,$=null!=(o=null!=(i=k.root)?i:m.Root)?o:v,F=null!=(d=null!=(u=k.input)?u:m.Input)?d:y;return(0,g.jsx)(l.Ay,(0,r.A)({slots:{root:$,input:F},componentsProps:T,fullWidth:b,inputComponent:x,multiline:w,ref:t,type:C},R,{classes:E}))}));x.muiName="Input";const w=x},779:(e,t,o)=>{o.d(t,{A:()=>y});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(5669),d=o(1848),u=o(2891),c=o(8466),p=o(6767),m=o(3800),f=o(8413),h=o(1609);function b(e){return(0,h.Ay)("MuiFormControl",e)}(0,f.A)("MuiFormControl",["root","marginNone","marginNormal","marginDense","fullWidth","disabled"]);var g=o(4848);const A=["children","className","color","component","disabled","error","focused","fullWidth","hiddenLabel","margin","required","size","variant"],v=(0,d.Ay)("div",{name:"MuiFormControl",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,r.A)({},t.root,t[`margin${(0,c.A)(e.margin)}`],e.fullWidth&&t.fullWidth)})((({ownerState:e})=>(0,r.A)({display:"inline-flex",flexDirection:"column",position:"relative",minWidth:0,padding:0,margin:0,border:0,verticalAlign:"top"},"normal"===e.margin&&{marginTop:16,marginBottom:8},"dense"===e.margin&&{marginTop:8,marginBottom:4},e.fullWidth&&{width:"100%"}))),y=i.forwardRef((function(e,t){const o=(0,l.b)({props:e,name:"MuiFormControl"}),{children:d,className:f,color:h="primary",component:y="div",disabled:x=!1,error:w=!1,focused:S,fullWidth:k=!1,hiddenLabel:C=!1,margin:R="none",required:M=!1,size:E="medium",variant:P="outlined"}=o,T=(0,n.A)(o,A),$=(0,r.A)({},o,{color:h,component:y,disabled:x,error:w,fullWidth:k,hiddenLabel:C,margin:R,required:M,size:E,variant:P}),F=(e=>{const{classes:t,margin:o,fullWidth:n}=e,r={root:["root","none"!==o&&`margin${(0,c.A)(o)}`,n&&"fullWidth"]};return(0,s.A)(r,b,t)})($),[L,z]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{if(!(0,p.A)(t,["Input","Select"]))return;const o=(0,p.A)(t,["Select"])?t.props.input:t;o&&(0,u.gr)(o.props)&&(e=!0)})),e})),[N,W]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{(0,p.A)(t,["Input","Select"])&&((0,u.lq)(t.props,!0)||(0,u.lq)(t.props.inputProps,!0))&&(e=!0)})),e})),[I,B]=i.useState(!1);x&&I&&B(!1);const j=void 0===S||x?I:S;let O;const D=i.useMemo((()=>({adornedStart:L,setAdornedStart:z,color:h,disabled:x,error:w,filled:N,focused:j,fullWidth:k,hiddenLabel:C,size:E,onBlur:()=>{B(!1)},onEmpty:()=>{W(!1)},onFilled:()=>{W(!0)},onFocus:()=>{B(!0)},registerEffect:O,required:M,variant:P})),[L,h,x,w,N,j,k,C,O,M,E,P]);return(0,g.jsx)(m.A.Provider,{value:D,children:(0,g.jsx)(v,(0,r.A)({as:y,ownerState:$,className:(0,a.A)(F.root,f),ref:t},T,{children:d}))})}))},3800:(e,t,o)=>{o.d(t,{A:()=>n});const n=o(6540).createContext(void 0)},8086:(e,t,o)=>{function n({props:e,states:t,muiFormControl:o}){return t.reduce(((t,n)=>(t[n]=e[n],o&&void 0===e[n]&&(t[n]=o[n]),t)),{})}o.d(t,{A:()=>n})},9716:(e,t,o)=>{o.d(t,{A:()=>i});var n=o(6540),r=o(3800);function i(){return n.useContext(r.A)}},6347:(e,t,o)=>{o.d(t,{A:()=>x});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(8086),d=o(9716),u=o(1848),c=o(8466),p=o(8413),m=o(1609);function f(e){return(0,m.Ay)("MuiFormHelperText",e)}const h=(0,p.A)("MuiFormHelperText",["root","error","disabled","sizeSmall","sizeMedium","contained","focused","filled","required"]);var b,g=o(5669),A=o(4848);const v=["children","className","component","disabled","error","filled","focused","margin","required","variant"],y=(0,u.Ay)("p",{name:"MuiFormHelperText",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,o.size&&t[`size${(0,c.A)(o.size)}`],o.contained&&t.contained,o.filled&&t.filled]}})((({theme:e,ownerState:t})=>(0,r.A)({color:(e.vars||e).palette.text.secondary},e.typography.caption,{textAlign:"left",marginTop:3,marginRight:0,marginBottom:0,marginLeft:0,[`&.${h.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${h.error}`]:{color:(e.vars||e).palette.error.main}},"small"===t.size&&{marginTop:4},t.contained&&{marginLeft:14,marginRight:14}))),x=i.forwardRef((function(e,t){const o=(0,g.b)({props:e,name:"MuiFormHelperText"}),{children:i,className:u,component:p="p"}=o,m=(0,n.A)(o,v),h=(0,d.A)(),x=(0,l.A)({props:o,muiFormControl:h,states:["variant","size","disabled","error","filled","focused","required"]}),w=(0,r.A)({},o,{component:p,contained:"filled"===x.variant||"outlined"===x.variant,variant:x.variant,size:x.size,disabled:x.disabled,error:x.error,filled:x.filled,focused:x.focused,required:x.required}),S=(e=>{const{classes:t,contained:o,size:n,disabled:r,error:i,filled:a,focused:l,required:d}=e,u={root:["root",r&&"disabled",i&&"error",n&&`size${(0,c.A)(n)}`,o&&"contained",l&&"focused",a&&"filled",d&&"required"]};return(0,s.A)(u,f,t)})(w);return(0,A.jsx)(y,(0,r.A)({as:p,ownerState:w,className:(0,a.A)(S.root,u),ref:t},m,{children:" "===i?b||(b=(0,A.jsx)("span",{className:"notranslate",children:"​"})):i}))}))},5327:(e,t,o)=>{o.d(t,{A:()=>l});var n=o(8168),r=(o(6540),o(2967)),i=o(2765),a=o(8312),s=o(4848);const l=function(e){return(0,s.jsx)(r.A,(0,n.A)({},e,{defaultTheme:i.A,themeId:a.A}))}},8239:(e,t,o)=>{o.d(t,{Ay:()=>C});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(9452),l=o(9599),d=o(5659),u=o(1848),c=o(5669),p=o(4675);const m=i.createContext();var f=o(8413),h=o(1609);function b(e){return(0,h.Ay)("MuiGrid",e)}const g=["auto",!0,1,2,3,4,5,6,7,8,9,10,11,12],A=(0,f.A)("MuiGrid",["root","container","item","zeroMinWidth",...[0,1,2,3,4,5,6,7,8,9,10].map((e=>`spacing-xs-${e}`)),...["column-reverse","column","row-reverse","row"].map((e=>`direction-xs-${e}`)),...["nowrap","wrap-reverse","wrap"].map((e=>`wrap-xs-${e}`)),...g.map((e=>`grid-xs-${e}`)),...g.map((e=>`grid-sm-${e}`)),...g.map((e=>`grid-md-${e}`)),...g.map((e=>`grid-lg-${e}`)),...g.map((e=>`grid-xl-${e}`))]);var v=o(4848);const y=["className","columns","columnSpacing","component","container","direction","item","rowSpacing","spacing","wrap","zeroMinWidth"];function x(e){const t=parseFloat(e);return`${t}${String(e).replace(String(t),"")||"px"}`}function w({breakpoints:e,values:t}){let o="";Object.keys(t).forEach((e=>{""===o&&0!==t[e]&&(o=e)}));const n=Object.keys(e).sort(((t,o)=>e[t]-e[o]));return n.slice(0,n.indexOf(o))}const S=(0,u.Ay)("div",{name:"MuiGrid",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e,{container:n,direction:r,item:i,spacing:a,wrap:s,zeroMinWidth:l,breakpoints:d}=o;let u=[];n&&(u=function(e,t,o={}){if(!e||e<=0)return[];if("string"==typeof e&&!Number.isNaN(Number(e))||"number"==typeof e)return[o[`spacing-xs-${String(e)}`]];const n=[];return t.forEach((t=>{const r=e[t];Number(r)>0&&n.push(o[`spacing-${t}-${String(r)}`])})),n}(a,d,t));const c=[];return d.forEach((e=>{const n=o[e];n&&c.push(t[`grid-${e}-${String(n)}`])})),[t.root,n&&t.container,i&&t.item,l&&t.zeroMinWidth,...u,"row"!==r&&t[`direction-xs-${String(r)}`],"wrap"!==s&&t[`wrap-xs-${String(s)}`],...c]}})((({ownerState:e})=>(0,r.A)({boxSizing:"border-box"},e.container&&{display:"flex",flexWrap:"wrap",width:"100%"},e.item&&{margin:0},e.zeroMinWidth&&{minWidth:0},"wrap"!==e.wrap&&{flexWrap:e.wrap})),(function({theme:e,ownerState:t}){const o=(0,s.kW)({values:t.direction,breakpoints:e.breakpoints.values});return(0,s.NI)({theme:e},o,(e=>{const t={flexDirection:e};return 0===e.indexOf("column")&&(t[`& > .${A.item}`]={maxWidth:"none"}),t}))}),(function({theme:e,ownerState:t}){const{container:o,rowSpacing:n}=t;let r={};if(o&&0!==n){const t=(0,s.kW)({values:n,breakpoints:e.breakpoints.values});let o;"object"==typeof t&&(o=w({breakpoints:e.breakpoints.values,values:t})),r=(0,s.NI)({theme:e},t,((t,n)=>{var r;const i=e.spacing(t);return"0px"!==i?{marginTop:`-${x(i)}`,[`& > .${A.item}`]:{paddingTop:x(i)}}:null!=(r=o)&&r.includes(n)?{}:{marginTop:0,[`& > .${A.item}`]:{paddingTop:0}}}))}return r}),(function({theme:e,ownerState:t}){const{container:o,columnSpacing:n}=t;let r={};if(o&&0!==n){const t=(0,s.kW)({values:n,breakpoints:e.breakpoints.values});let o;"object"==typeof t&&(o=w({breakpoints:e.breakpoints.values,values:t})),r=(0,s.NI)({theme:e},t,((t,n)=>{var r;const i=e.spacing(t);return"0px"!==i?{width:`calc(100% + ${x(i)})`,marginLeft:`-${x(i)}`,[`& > .${A.item}`]:{paddingLeft:x(i)}}:null!=(r=o)&&r.includes(n)?{}:{width:"100%",marginLeft:0,[`& > .${A.item}`]:{paddingLeft:0}}}))}return r}),(function({theme:e,ownerState:t}){let o;return e.breakpoints.keys.reduce(((n,i)=>{let a={};if(t[i]&&(o=t[i]),!o)return n;if(!0===o)a={flexBasis:0,flexGrow:1,maxWidth:"100%"};else if("auto"===o)a={flexBasis:"auto",flexGrow:0,flexShrink:0,maxWidth:"none",width:"auto"};else{const l=(0,s.kW)({values:t.columns,breakpoints:e.breakpoints.values}),d="object"==typeof l?l[i]:l;if(null==d)return n;const u=Math.round(o/d*1e8)/1e6+"%";let c={};if(t.container&&t.item&&0!==t.columnSpacing){const o=e.spacing(t.columnSpacing);if("0px"!==o){const e=`calc(${u} + ${x(o)})`;c={flexBasis:e,maxWidth:e}}}a=(0,r.A)({flexBasis:u,flexGrow:0,maxWidth:u},c)}return 0===e.breakpoints.values[i]?Object.assign(n,a):n[e.breakpoints.up(i)]=a,n}),{})})),k=i.forwardRef((function(e,t){const o=(0,c.b)({props:e,name:"MuiGrid"}),{breakpoints:s}=(0,p.A)(),u=(0,l.A)(o),{className:f,columns:h,columnSpacing:g,component:A="div",container:x=!1,direction:w="row",item:k=!1,rowSpacing:C,spacing:R=0,wrap:M="wrap",zeroMinWidth:E=!1}=u,P=(0,n.A)(u,y),T=C||R,$=g||R,F=i.useContext(m),L=x?h||12:F,z={},N=(0,r.A)({},P);s.keys.forEach((e=>{null!=P[e]&&(z[e]=P[e],delete N[e])}));const W=(0,r.A)({},u,{columns:L,container:x,direction:w,item:k,rowSpacing:T,columnSpacing:$,wrap:M,zeroMinWidth:E,spacing:R},z,{breakpoints:s.keys}),I=(e=>{const{classes:t,container:o,direction:n,item:r,spacing:i,wrap:a,zeroMinWidth:s,breakpoints:l}=e;let u=[];o&&(u=function(e,t){if(!e||e<=0)return[];if("string"==typeof e&&!Number.isNaN(Number(e))||"number"==typeof e)return[`spacing-xs-${String(e)}`];const o=[];return t.forEach((t=>{const n=e[t];if(Number(n)>0){const e=`spacing-${t}-${String(n)}`;o.push(e)}})),o}(i,l));const c=[];l.forEach((t=>{const o=e[t];o&&c.push(`grid-${t}-${String(o)}`)}));const p={root:["root",o&&"container",r&&"item",s&&"zeroMinWidth",...u,"row"!==n&&`direction-xs-${String(n)}`,"wrap"!==a&&`wrap-xs-${String(a)}`,...c]};return(0,d.A)(p,b,t)})(W);return(0,v.jsx)(m.Provider,{value:L,children:(0,v.jsx)(S,(0,r.A)({ownerState:W,className:(0,a.A)(I.root,f),as:A,ref:t},N))})})),C=k},7467:(e,t,o)=>{o.d(t,{A:()=>g});var n=o(8168),r=o(8587),i=o(6540),a=o(3068),s=o(7353),l=o(4675),d=o(5186),u=o(6852),c=o(4848);const p=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"];function m(e){return`scale(${e}, ${e**2})`}const f={entering:{opacity:1,transform:m(1)},entered:{opacity:1,transform:"none"}},h="undefined"!=typeof navigator&&/^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent)&&/(os |version\/)15(.|_)4/i.test(navigator.userAgent),b=i.forwardRef((function(e,t){const{addEndListener:o,appear:b=!0,children:g,easing:A,in:v,onEnter:y,onEntered:x,onEntering:w,onExit:S,onExited:k,onExiting:C,style:R,timeout:M="auto",TransitionComponent:E=s.Ay}=e,P=(0,r.A)(e,p),T=(0,a.A)(),$=i.useRef(),F=(0,l.A)(),L=i.useRef(null),z=(0,u.A)(L,g.ref,t),N=e=>t=>{if(e){const o=L.current;void 0===t?e(o):e(o,t)}},W=N(w),I=N(((e,t)=>{(0,d.q)(e);const{duration:o,delay:n,easing:r}=(0,d.c)({style:R,timeout:M,easing:A},{mode:"enter"});let i;"auto"===M?(i=F.transitions.getAutoHeightDuration(e.clientHeight),$.current=i):i=o,e.style.transition=[F.transitions.create("opacity",{duration:i,delay:n}),F.transitions.create("transform",{duration:h?i:.666*i,delay:n,easing:r})].join(","),y&&y(e,t)})),B=N(x),j=N(C),O=N((e=>{const{duration:t,delay:o,easing:n}=(0,d.c)({style:R,timeout:M,easing:A},{mode:"exit"});let r;"auto"===M?(r=F.transitions.getAutoHeightDuration(e.clientHeight),$.current=r):r=t,e.style.transition=[F.transitions.create("opacity",{duration:r,delay:o}),F.transitions.create("transform",{duration:h?r:.666*r,delay:h?o:o||.333*r,easing:n})].join(","),e.style.opacity=0,e.style.transform=m(.75),S&&S(e)})),D=N(k);return(0,c.jsx)(E,(0,n.A)({appear:b,in:v,nodeRef:L,onEnter:I,onEntered:B,onEntering:W,onExit:O,onExited:D,onExiting:j,addEndListener:e=>{"auto"===M&&T.start($.current||0,e),o&&o(L.current,e)},timeout:"auto"===M?null:M},P,{children:(e,t)=>i.cloneElement(g,(0,n.A)({style:(0,n.A)({opacity:0,transform:m(.75),visibility:"exited"!==e||v?void 0:"hidden"},f[e],R,g.props.style),ref:z},t))}))}));b.muiSupportAuto=!0;const g=b},1881:(e,t,o)=>{o.d(t,{A:()=>w});var n=o(8587),r=o(8168),i=o(6540),a=o(5659),s=o(1317),l=o(627),d=o(1848),u=o(9770),c=o(5669),p=o(8413),m=o(1609),f=o(1175);function h(e){return(0,m.Ay)("MuiInput",e)}const b=(0,r.A)({},f.A,(0,p.A)("MuiInput",["root","underline","input"]));var g=o(4848);const A=["disableUnderline","components","componentsProps","fullWidth","inputComponent","multiline","slotProps","slots","type"],v=(0,d.Ay)(l.Sh,{shouldForwardProp:e=>(0,u.A)(e)||"classes"===e,name:"MuiInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[...(0,l.WC)(e,t),!o.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{let o="light"===e.palette.mode?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)";return e.vars&&(o=`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`),(0,r.A)({position:"relative"},t.formControl&&{"label + &":{marginTop:16}},!t.disableUnderline&&{"&::after":{borderBottom:`2px solid ${(e.vars||e).palette[t.color].main}`,left:0,bottom:0,content:'""',position:"absolute",right:0,transform:"scaleX(0)",transition:e.transitions.create("transform",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:"none"},[`&.${b.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${b.error}`]:{"&::before, &::after":{borderBottomColor:(e.vars||e).palette.error.main}},"&::before":{borderBottom:`1px solid ${o}`,left:0,bottom:0,content:'"\\00a0"',position:"absolute",right:0,transition:e.transitions.create("border-bottom-color",{duration:e.transitions.duration.shorter}),pointerEvents:"none"},[`&:hover:not(.${b.disabled}, .${b.error}):before`]:{borderBottom:`2px solid ${(e.vars||e).palette.text.primary}`,"@media (hover: none)":{borderBottom:`1px solid ${o}`}},[`&.${b.disabled}:before`]:{borderBottomStyle:"dotted"}})})),y=(0,d.Ay)(l.f3,{name:"MuiInput",slot:"Input",overridesResolver:l.Oj})({}),x=i.forwardRef((function(e,t){var o,i,d,u;const p=(0,c.b)({props:e,name:"MuiInput"}),{disableUnderline:m,components:f={},componentsProps:b,fullWidth:x=!1,inputComponent:w="input",multiline:S=!1,slotProps:k,slots:C={},type:R="text"}=p,M=(0,n.A)(p,A),E=(e=>{const{classes:t,disableUnderline:o}=e,n={root:["root",!o&&"underline"],input:["input"]},i=(0,a.A)(n,h,t);return(0,r.A)({},t,i)})(p),P={root:{ownerState:{disableUnderline:m}}},T=(null!=k?k:b)?(0,s.A)(null!=k?k:b,P):P,$=null!=(o=null!=(i=C.root)?i:f.Root)?o:v,F=null!=(d=null!=(u=C.input)?u:f.Input)?d:y;return(0,g.jsx)(l.Ay,(0,r.A)({slots:{root:$,input:F},slotProps:T,fullWidth:x,inputComponent:w,multiline:S,ref:t,type:R},M,{classes:E}))}));x.muiName="Input";const w=x},627:(e,t,o)=>{o.d(t,{Ay:()=>P,Oj:()=>C,Sh:()=>R,WC:()=>k,f3:()=>M});var n=o(8587),r=o(8168),i=o(9453),a=o(6540),s=o(4164),l=o(5659),d=o(2197),u=o(3561),c=o(8086),p=o(3800),m=o(9716),f=o(1848),h=o(5669),b=o(8466),g=o(6852),A=o(2778),v=o(5327),y=o(2891),x=o(1175),w=o(4848);const S=["aria-describedby","autoComplete","autoFocus","className","color","components","componentsProps","defaultValue","disabled","disableInjectingGlobalStyles","endAdornment","error","fullWidth","id","inputComponent","inputProps","inputRef","margin","maxRows","minRows","multiline","name","onBlur","onChange","onClick","onFocus","onKeyDown","onKeyUp","placeholder","readOnly","renderSuffix","rows","size","slotProps","slots","startAdornment","type","value"],k=(e,t)=>{const{ownerState:o}=e;return[t.root,o.formControl&&t.formControl,o.startAdornment&&t.adornedStart,o.endAdornment&&t.adornedEnd,o.error&&t.error,"small"===o.size&&t.sizeSmall,o.multiline&&t.multiline,o.color&&t[`color${(0,b.A)(o.color)}`],o.fullWidth&&t.fullWidth,o.hiddenLabel&&t.hiddenLabel]},C=(e,t)=>{const{ownerState:o}=e;return[t.input,"small"===o.size&&t.inputSizeSmall,o.multiline&&t.inputMultiline,"search"===o.type&&t.inputTypeSearch,o.startAdornment&&t.inputAdornedStart,o.endAdornment&&t.inputAdornedEnd,o.hiddenLabel&&t.inputHiddenLabel]},R=(0,f.Ay)("div",{name:"MuiInputBase",slot:"Root",overridesResolver:k})((({theme:e,ownerState:t})=>(0,r.A)({},e.typography.body1,{color:(e.vars||e).palette.text.primary,lineHeight:"1.4375em",boxSizing:"border-box",position:"relative",cursor:"text",display:"inline-flex",alignItems:"center",[`&.${x.A.disabled}`]:{color:(e.vars||e).palette.text.disabled,cursor:"default"}},t.multiline&&(0,r.A)({padding:"4px 0 5px"},"small"===t.size&&{paddingTop:1}),t.fullWidth&&{width:"100%"}))),M=(0,f.Ay)("input",{name:"MuiInputBase",slot:"Input",overridesResolver:C})((({theme:e,ownerState:t})=>{const o="light"===e.palette.mode,n=(0,r.A)({color:"currentColor"},e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:o?.42:.5},{transition:e.transitions.create("opacity",{duration:e.transitions.duration.shorter})}),i={opacity:"0 !important"},a=e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:o?.42:.5};return(0,r.A)({font:"inherit",letterSpacing:"inherit",color:"currentColor",padding:"4px 0 5px",border:0,boxSizing:"content-box",background:"none",height:"1.4375em",margin:0,WebkitTapHighlightColor:"transparent",display:"block",minWidth:0,width:"100%",animationName:"mui-auto-fill-cancel",animationDuration:"10ms","&::-webkit-input-placeholder":n,"&::-moz-placeholder":n,"&:-ms-input-placeholder":n,"&::-ms-input-placeholder":n,"&:focus":{outline:0},"&:invalid":{boxShadow:"none"},"&::-webkit-search-decoration":{WebkitAppearance:"none"},[`label[data-shrink=false] + .${x.A.formControl} &`]:{"&::-webkit-input-placeholder":i,"&::-moz-placeholder":i,"&:-ms-input-placeholder":i,"&::-ms-input-placeholder":i,"&:focus::-webkit-input-placeholder":a,"&:focus::-moz-placeholder":a,"&:focus:-ms-input-placeholder":a,"&:focus::-ms-input-placeholder":a},[`&.${x.A.disabled}`]:{opacity:1,WebkitTextFillColor:(e.vars||e).palette.text.disabled},"&:-webkit-autofill":{animationDuration:"5000s",animationName:"mui-auto-fill"}},"small"===t.size&&{paddingTop:1},t.multiline&&{height:"auto",resize:"none",padding:0,paddingTop:0},"search"===t.type&&{MozAppearance:"textfield"})})),E=(0,w.jsx)(v.A,{styles:{"@keyframes mui-auto-fill":{from:{display:"block"}},"@keyframes mui-auto-fill-cancel":{from:{display:"block"}}}}),P=a.forwardRef((function(e,t){var o;const f=(0,h.b)({props:e,name:"MuiInputBase"}),{"aria-describedby":v,autoComplete:k,autoFocus:C,className:P,components:T={},componentsProps:$={},defaultValue:F,disabled:L,disableInjectingGlobalStyles:z,endAdornment:N,fullWidth:W=!1,id:I,inputComponent:B="input",inputProps:j={},inputRef:O,maxRows:D,minRows:q,multiline:H=!1,name:K,onBlur:U,onChange:V,onClick:G,onFocus:X,onKeyDown:Y,onKeyUp:_,placeholder:J,readOnly:Q,renderSuffix:Z,rows:ee,slotProps:te={},slots:oe={},startAdornment:ne,type:re="text",value:ie}=f,ae=(0,n.A)(f,S),se=null!=j.value?j.value:ie,{current:le}=a.useRef(null!=se),de=a.useRef(),ue=a.useCallback((e=>{}),[]),ce=(0,g.A)(de,O,j.ref,ue),[pe,me]=a.useState(!1),fe=(0,m.A)(),he=(0,c.A)({props:f,muiFormControl:fe,states:["color","disabled","error","hiddenLabel","size","required","filled"]});he.focused=fe?fe.focused:pe,a.useEffect((()=>{!fe&&L&&pe&&(me(!1),U&&U())}),[fe,L,pe,U]);const be=fe&&fe.onFilled,ge=fe&&fe.onEmpty,Ae=a.useCallback((e=>{(0,y.lq)(e)?be&&be():ge&&ge()}),[be,ge]);(0,A.A)((()=>{le&&Ae({value:se})}),[se,Ae,le]),a.useEffect((()=>{Ae(de.current)}),[]);let ve=B,ye=j;H&&"input"===ve&&(ye=ee?(0,r.A)({type:void 0,minRows:ee,maxRows:ee},ye):(0,r.A)({type:void 0,maxRows:D,minRows:q},ye),ve=u.A),a.useEffect((()=>{fe&&fe.setAdornedStart(Boolean(ne))}),[fe,ne]);const xe=(0,r.A)({},f,{color:he.color||"primary",disabled:he.disabled,endAdornment:N,error:he.error,focused:he.focused,formControl:fe,fullWidth:W,hiddenLabel:he.hiddenLabel,multiline:H,size:he.size,startAdornment:ne,type:re}),we=(e=>{const{classes:t,color:o,disabled:n,error:r,endAdornment:i,focused:a,formControl:s,fullWidth:d,hiddenLabel:u,multiline:c,readOnly:p,size:m,startAdornment:f,type:h}=e,g={root:["root",`color${(0,b.A)(o)}`,n&&"disabled",r&&"error",d&&"fullWidth",a&&"focused",s&&"formControl",m&&"medium"!==m&&`size${(0,b.A)(m)}`,c&&"multiline",f&&"adornedStart",i&&"adornedEnd",u&&"hiddenLabel",p&&"readOnly"],input:["input",n&&"disabled","search"===h&&"inputTypeSearch",c&&"inputMultiline","small"===m&&"inputSizeSmall",u&&"inputHiddenLabel",f&&"inputAdornedStart",i&&"inputAdornedEnd",p&&"readOnly"]};return(0,l.A)(g,x.g,t)})(xe),Se=oe.root||T.Root||R,ke=te.root||$.root||{},Ce=oe.input||T.Input||M;return ye=(0,r.A)({},ye,null!=(o=te.input)?o:$.input),(0,w.jsxs)(a.Fragment,{children:[!z&&E,(0,w.jsxs)(Se,(0,r.A)({},ke,!(0,d.A)(Se)&&{ownerState:(0,r.A)({},xe,ke.ownerState)},{ref:t,onClick:e=>{de.current&&e.currentTarget===e.target&&de.current.focus(),G&&G(e)}},ae,{className:(0,s.A)(we.root,ke.className,P,Q&&"MuiInputBase-readOnly"),children:[ne,(0,w.jsx)(p.A.Provider,{value:null,children:(0,w.jsx)(Ce,(0,r.A)({ownerState:xe,"aria-invalid":he.error,"aria-describedby":v,autoComplete:k,autoFocus:C,defaultValue:F,disabled:he.disabled,id:I,onAnimationStart:e=>{Ae("mui-auto-fill-cancel"===e.animationName?de.current:{value:"x"})},name:K,placeholder:J,readOnly:Q,required:he.required,rows:ee,value:se,onKeyDown:Y,onKeyUp:_,type:re},ye,!(0,d.A)(Ce)&&{as:ve,ownerState:(0,r.A)({},xe,ye.ownerState)},{ref:ce,className:(0,s.A)(we.input,ye.className,Q&&"MuiInputBase-readOnly"),onBlur:e=>{U&&U(e),j.onBlur&&j.onBlur(e),fe&&fe.onBlur?fe.onBlur(e):me(!1)},onChange:(e,...t)=>{if(!le){const t=e.target||de.current;if(null==t)throw new Error((0,i.A)(1));Ae({value:t.value})}j.onChange&&j.onChange(e,...t),V&&V(e,...t)},onFocus:e=>{he.disabled?e.stopPropagation():(X&&X(e),j.onFocus&&j.onFocus(e),fe&&fe.onFocus?fe.onFocus(e):me(!0))}}))}),N,Z?Z((0,r.A)({},he,{startAdornment:ne})):null]}))]})}))},1175:(e,t,o)=>{o.d(t,{A:()=>a,g:()=>i});var n=o(8413),r=o(1609);function i(e){return(0,r.Ay)("MuiInputBase",e)}const a=(0,n.A)("MuiInputBase",["root","formControl","focused","disabled","adornedStart","adornedEnd","error","sizeSmall","multiline","colorSecondary","fullWidth","hiddenLabel","readOnly","input","inputSizeSmall","inputMultiline","inputTypeSearch","inputAdornedStart","inputAdornedEnd","inputHiddenLabel"])},2891:(e,t,o)=>{function n(e){return null!=e&&!(Array.isArray(e)&&0===e.length)}function r(e,t=!1){return e&&(n(e.value)&&""!==e.value||t&&n(e.defaultValue)&&""!==e.defaultValue)}function i(e){return e.startAdornment}o.d(t,{gr:()=>i,lq:()=>r})},4433:(e,t,o)=>{o.d(t,{A:()=>R});var n=o(8587),r=o(8168),i=o(6540),a=o(5659),s=o(4164),l=o(8086),d=o(9716),u=o(8466),c=o(5669),p=o(1848),m=o(8413),f=o(1609);function h(e){return(0,f.Ay)("MuiFormLabel",e)}const b=(0,m.A)("MuiFormLabel",["root","colorSecondary","focused","disabled","error","filled","required","asterisk"]);var g=o(4848);const A=["children","className","color","component","disabled","error","filled","focused","required"],v=(0,p.Ay)("label",{name:"MuiFormLabel",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,r.A)({},t.root,"secondary"===e.color&&t.colorSecondary,e.filled&&t.filled)})((({theme:e,ownerState:t})=>(0,r.A)({color:(e.vars||e).palette.text.secondary},e.typography.body1,{lineHeight:"1.4375em",padding:0,position:"relative",[`&.${b.focused}`]:{color:(e.vars||e).palette[t.color].main},[`&.${b.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${b.error}`]:{color:(e.vars||e).palette.error.main}}))),y=(0,p.Ay)("span",{name:"MuiFormLabel",slot:"Asterisk",overridesResolver:(e,t)=>t.asterisk})((({theme:e})=>({[`&.${b.error}`]:{color:(e.vars||e).palette.error.main}}))),x=i.forwardRef((function(e,t){const o=(0,c.b)({props:e,name:"MuiFormLabel"}),{children:i,className:p,component:m="label"}=o,f=(0,n.A)(o,A),b=(0,d.A)(),x=(0,l.A)({props:o,muiFormControl:b,states:["color","required","focused","disabled","error","filled"]}),w=(0,r.A)({},o,{color:x.color||"primary",component:m,disabled:x.disabled,error:x.error,filled:x.filled,focused:x.focused,required:x.required}),S=(e=>{const{classes:t,color:o,focused:n,disabled:r,error:i,filled:s,required:l}=e,d={root:["root",`color${(0,u.A)(o)}`,r&&"disabled",i&&"error",s&&"filled",n&&"focused",l&&"required"],asterisk:["asterisk",i&&"error"]};return(0,a.A)(d,h,t)})(w);return(0,g.jsxs)(v,(0,r.A)({as:m,ownerState:w,className:(0,s.A)(S.root,p),ref:t},f,{children:[i,x.required&&(0,g.jsxs)(y,{ownerState:w,"aria-hidden":!0,className:S.asterisk,children:[" ","*"]})]}))}));var w=o(9770);function S(e){return(0,f.Ay)("MuiInputLabel",e)}(0,m.A)("MuiInputLabel",["root","focused","disabled","error","required","asterisk","formControl","sizeSmall","shrink","animated","standard","filled","outlined"]);const k=["disableAnimation","margin","shrink","variant","className"],C=(0,p.Ay)(x,{shouldForwardProp:e=>(0,w.A)(e)||"classes"===e,name:"MuiInputLabel",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[{[`& .${b.asterisk}`]:t.asterisk},t.root,o.formControl&&t.formControl,"small"===o.size&&t.sizeSmall,o.shrink&&t.shrink,!o.disableAnimation&&t.animated,o.focused&&t.focused,t[o.variant]]}})((({theme:e,ownerState:t})=>(0,r.A)({display:"block",transformOrigin:"top left",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%"},t.formControl&&{position:"absolute",left:0,top:0,transform:"translate(0, 20px) scale(1)"},"small"===t.size&&{transform:"translate(0, 17px) scale(1)"},t.shrink&&{transform:"translate(0, -1.5px) scale(0.75)",transformOrigin:"top left",maxWidth:"133%"},!t.disableAnimation&&{transition:e.transitions.create(["color","transform","max-width"],{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut})},"filled"===t.variant&&(0,r.A)({zIndex:1,pointerEvents:"none",transform:"translate(12px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===t.size&&{transform:"translate(12px, 13px) scale(1)"},t.shrink&&(0,r.A)({userSelect:"none",pointerEvents:"auto",transform:"translate(12px, 7px) scale(0.75)",maxWidth:"calc(133% - 24px)"},"small"===t.size&&{transform:"translate(12px, 4px) scale(0.75)"})),"outlined"===t.variant&&(0,r.A)({zIndex:1,pointerEvents:"none",transform:"translate(14px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===t.size&&{transform:"translate(14px, 9px) scale(1)"},t.shrink&&{userSelect:"none",pointerEvents:"auto",maxWidth:"calc(133% - 32px)",transform:"translate(14px, -9px) scale(0.75)"})))),R=i.forwardRef((function(e,t){const o=(0,c.b)({name:"MuiInputLabel",props:e}),{disableAnimation:i=!1,shrink:p,className:m}=o,f=(0,n.A)(o,k),h=(0,d.A)();let b=p;void 0===b&&h&&(b=h.filled||h.focused||h.adornedStart);const A=(0,l.A)({props:o,muiFormControl:h,states:["size","variant","required","focused"]}),v=(0,r.A)({},o,{disableAnimation:i,formControl:h,shrink:b,size:A.size,variant:A.variant,required:A.required,focused:A.focused}),y=(e=>{const{classes:t,formControl:o,size:n,shrink:i,disableAnimation:s,variant:l,required:d}=e,c={root:["root",o&&"formControl",!s&&"animated",i&&"shrink",n&&"normal"!==n&&`size${(0,u.A)(n)}`,l],asterisk:[d&&"asterisk"]},p=(0,a.A)(c,S,t);return(0,r.A)({},t,p)})(v);return(0,g.jsx)(C,(0,r.A)({"data-shrink":b,ownerState:v,ref:t,className:(0,s.A)(y.root,m)},f,{classes:y}))}))},5001:(e,t,o)=>{o.d(t,{A:()=>C});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(8466),d=o(1848),u=o(5669),c=o(8851),p=o(6852),m=o(4073),f=o(8413),h=o(1609);function b(e){return(0,h.Ay)("MuiLink",e)}const g=(0,f.A)("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]);var A=o(6481),v=o(771);const y={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},x=({theme:e,ownerState:t})=>{const o=(e=>y[e]||e)(t.color),n=(0,A.Yn)(e,`palette.${o}`,!1)||t.color,r=(0,A.Yn)(e,`palette.${o}Channel`);return"vars"in e&&r?`rgba(${r} / 0.4)`:(0,v.X4)(n,.4)};var w=o(4848);const S=["className","color","component","onBlur","onFocus","TypographyClasses","underline","variant","sx"],k=(0,d.Ay)(m.A,{name:"MuiLink",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[`underline${(0,l.A)(o.underline)}`],"button"===o.component&&t.button]}})((({theme:e,ownerState:t})=>(0,r.A)({},"none"===t.underline&&{textDecoration:"none"},"hover"===t.underline&&{textDecoration:"none","&:hover":{textDecoration:"underline"}},"always"===t.underline&&(0,r.A)({textDecoration:"underline"},"inherit"!==t.color&&{textDecorationColor:x({theme:e,ownerState:t})},{"&:hover":{textDecorationColor:"inherit"}}),"button"===t.component&&{position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"},[`&.${g.focusVisible}`]:{outline:"auto"}}))),C=i.forwardRef((function(e,t){const o=(0,u.b)({props:e,name:"MuiLink"}),{className:d,color:m="primary",component:f="a",onBlur:h,onFocus:g,TypographyClasses:A,underline:v="always",variant:x="inherit",sx:C}=o,R=(0,n.A)(o,S),{isFocusVisibleRef:M,onBlur:E,onFocus:P,ref:T}=(0,c.A)(),[$,F]=i.useState(!1),L=(0,p.A)(t,T),z=(0,r.A)({},o,{color:m,component:f,focusVisible:$,underline:v,variant:x}),N=(e=>{const{classes:t,component:o,focusVisible:n,underline:r}=e,i={root:["root",`underline${(0,l.A)(r)}`,"button"===o&&"button",n&&"focusVisible"]};return(0,s.A)(i,b,t)})(z);return(0,w.jsx)(k,(0,r.A)({color:m,className:(0,a.A)(N.root,d),classes:A,component:f,onBlur:e=>{E(e),!1===M.current&&F(!1),h&&h(e)},onFocus:e=>{P(e),!0===M.current&&F(!0),g&&g(e)},ref:L,ownerState:z,variant:x,sx:[...Object.keys(y).includes(m)?[]:[{color:m}],...Array.isArray(C)?C:[C]]},R))}))},5734:(e,t,o)=>{o.d(t,{A:()=>O});var n=o(8168),r=o(8587),i=o(6540),a=(o(4363),o(4164)),s=o(5659),l=o(3788),d=o(9329),u=o(6248),c=o(1848),p=o(5669);const m=i.createContext({});var f=o(8413),h=o(1609);function b(e){return(0,h.Ay)("MuiList",e)}(0,f.A)("MuiList",["root","padding","dense","subheader"]);var g=o(4848);const A=["children","className","component","dense","disablePadding","subheader"],v=(0,c.Ay)("ul",{name:"MuiList",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,!o.disablePadding&&t.padding,o.dense&&t.dense,o.subheader&&t.subheader]}})((({ownerState:e})=>(0,n.A)({listStyle:"none",margin:0,padding:0,position:"relative"},!e.disablePadding&&{paddingTop:8,paddingBottom:8},e.subheader&&{paddingTop:0}))),y=i.forwardRef((function(e,t){const o=(0,p.b)({props:e,name:"MuiList"}),{children:l,className:d,component:u="ul",dense:c=!1,disablePadding:f=!1,subheader:h}=o,y=(0,r.A)(o,A),x=i.useMemo((()=>({dense:c})),[c]),w=(0,n.A)({},o,{component:u,dense:c,disablePadding:f}),S=(e=>{const{classes:t,disablePadding:o,dense:n,subheader:r}=e,i={root:["root",!o&&"padding",n&&"dense",r&&"subheader"]};return(0,s.A)(i,b,t)})(w);return(0,g.jsx)(m.Provider,{value:x,children:(0,g.jsxs)(v,(0,n.A)({as:u,className:(0,a.A)(S.root,d),ref:t,ownerState:w},y,{children:[h,l]}))})}));var x=o(7167),w=o(6852),S=o(2778);const k=["actions","autoFocus","autoFocusItem","children","className","disabledItemsFocusable","disableListWrap","onKeyDown","variant"];function C(e,t,o){return e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:o?null:e.firstChild}function R(e,t,o){return e===t?o?e.firstChild:e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:o?null:e.lastChild}function M(e,t){if(void 0===t)return!0;let o=e.innerText;return void 0===o&&(o=e.textContent),o=o.trim().toLowerCase(),0!==o.length&&(t.repeating?o[0]===t.keys[0]:0===o.indexOf(t.keys.join("")))}function E(e,t,o,n,r,i){let a=!1,s=r(e,t,!!t&&o);for(;s;){if(s===e.firstChild){if(a)return!1;a=!0}const t=!n&&(s.disabled||"true"===s.getAttribute("aria-disabled"));if(s.hasAttribute("tabindex")&&M(s,i)&&!t)return s.focus(),!0;s=r(e,s,o)}return!1}const P=i.forwardRef((function(e,t){const{actions:o,autoFocus:a=!1,autoFocusItem:s=!1,children:l,className:d,disabledItemsFocusable:c=!1,disableListWrap:p=!1,onKeyDown:m,variant:f="selectedMenu"}=e,h=(0,r.A)(e,k),b=i.useRef(null),A=i.useRef({keys:[],repeating:!0,previousKeyMatched:!0,lastTime:null});(0,S.A)((()=>{a&&b.current.focus()}),[a]),i.useImperativeHandle(o,(()=>({adjustStyleForScrollbar:(e,{direction:t})=>{const o=!b.current.style.width;if(e.clientHeight{i.isValidElement(e)?(e.props.disabled||("selectedMenu"===f&&e.props.selected||-1===P)&&(P=t),P===t&&(e.props.disabled||e.props.muiSkipListHighlight||e.type.muiSkipListHighlight)&&(P+=1,P>=l.length&&(P=-1))):P===t&&(P+=1,P>=l.length&&(P=-1))}));const T=i.Children.map(l,((e,t)=>{if(t===P){const t={};return s&&(t.autoFocus=!0),void 0===e.props.tabIndex&&"selectedMenu"===f&&(t.tabIndex=0),i.cloneElement(e,t)}return e}));return(0,g.jsx)(y,(0,n.A)({role:"menu",ref:v,className:d,onKeyDown:e=>{const t=b.current,o=e.key,n=(0,u.A)(t).activeElement;if("ArrowDown"===o)e.preventDefault(),E(t,n,p,c,C);else if("ArrowUp"===o)e.preventDefault(),E(t,n,p,c,R);else if("Home"===o)e.preventDefault(),E(t,null,p,c,C);else if("End"===o)e.preventDefault(),E(t,null,p,c,R);else if(1===o.length){const r=A.current,i=o.toLowerCase(),a=performance.now();r.keys.length>0&&(a-r.lastTime>500?(r.keys=[],r.repeating=!0,r.previousKeyMatched=!0):r.repeating&&i!==r.keys[0]&&(r.repeating=!1)),r.lastTime=a,r.keys.push(i);const s=n&&!r.repeating&&M(n,r);r.previousKeyMatched&&(s||E(t,n,!1,c,C,r))?e.preventDefault():r.previousKeyMatched=!1}m&&m(e)},tabIndex:a?0:-1},h,{children:T}))}));var T=o(5406),$=o(9770);function F(e){return(0,h.Ay)("MuiMenu",e)}(0,f.A)("MuiMenu",["root","paper","list"]);const L=["onEntering"],z=["autoFocus","children","className","disableAutoFocusItem","MenuListProps","onClose","open","PaperProps","PopoverClasses","transitionDuration","TransitionProps","variant","slots","slotProps"],N={vertical:"top",horizontal:"right"},W={vertical:"top",horizontal:"left"},I=(0,c.Ay)(T.Ay,{shouldForwardProp:e=>(0,$.A)(e)||"classes"===e,name:"MuiMenu",slot:"Root",overridesResolver:(e,t)=>t.root})({}),B=(0,c.Ay)(T.IJ,{name:"MuiMenu",slot:"Paper",overridesResolver:(e,t)=>t.paper})({maxHeight:"calc(100% - 96px)",WebkitOverflowScrolling:"touch"}),j=(0,c.Ay)(P,{name:"MuiMenu",slot:"List",overridesResolver:(e,t)=>t.list})({outline:0}),O=i.forwardRef((function(e,t){var o,u;const c=(0,p.b)({props:e,name:"MuiMenu"}),{autoFocus:m=!0,children:f,className:h,disableAutoFocusItem:b=!1,MenuListProps:A={},onClose:v,open:y,PaperProps:x={},PopoverClasses:w,transitionDuration:S="auto",TransitionProps:{onEntering:k}={},variant:C="selectedMenu",slots:R={},slotProps:M={}}=c,E=(0,r.A)(c.TransitionProps,L),P=(0,r.A)(c,z),T=(0,l.I)(),$=(0,n.A)({},c,{autoFocus:m,disableAutoFocusItem:b,MenuListProps:A,onEntering:k,PaperProps:x,transitionDuration:S,TransitionProps:E,variant:C}),O=(e=>{const{classes:t}=e;return(0,s.A)({root:["root"],paper:["paper"],list:["list"]},F,t)})($),D=m&&!b&&y,q=i.useRef(null);let H=-1;i.Children.map(f,((e,t)=>{i.isValidElement(e)&&(e.props.disabled||("selectedMenu"===C&&e.props.selected||-1===H)&&(H=t))}));const K=null!=(o=R.paper)?o:B,U=null!=(u=M.paper)?u:x,V=(0,d.A)({elementType:R.root,externalSlotProps:M.root,ownerState:$,className:[O.root,h]}),G=(0,d.A)({elementType:K,externalSlotProps:U,ownerState:$,className:O.paper});return(0,g.jsx)(I,(0,n.A)({onClose:v,anchorOrigin:{vertical:"bottom",horizontal:T?"right":"left"},transformOrigin:T?N:W,slots:{paper:K,root:R.root},slotProps:{root:V,paper:G},open:y,ref:t,transitionDuration:S,TransitionProps:(0,n.A)({onEntering:(e,t)=>{q.current&&q.current.adjustStyleForScrollbar(e,{direction:T?"rtl":"ltr"}),k&&k(e,t)}},E),ownerState:$},P,{classes:w,children:(0,g.jsx)(j,(0,n.A)({onKeyDown:e=>{"Tab"===e.key&&(e.preventDefault(),v&&v(e,"tabKeyDown"))},actions:q,autoFocus:m&&(-1===H||b),autoFocusItem:D,variant:C},A,{className:(0,a.A)(O.list,A.className),children:f}))}))}))},3025:(e,t,o)=>{o.d(t,{A:()=>L});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(9329),d=o(3524),u=o(5061),c=o(1848),p=o(5669),m=o(7419),f=o(1523),h=o(2325),b=o(1547),g=o(6673),A=o(4959),v=o(4877),y=o(3205);function x(e,t){t?e.setAttribute("aria-hidden","true"):e.removeAttribute("aria-hidden")}function w(e){return parseInt((0,v.A)(e).getComputedStyle(e).paddingRight,10)||0}function S(e,t,o,n,r){const i=[t,o,...n];[].forEach.call(e.children,(e=>{const t=-1===i.indexOf(e),o=!function(e){const t=-1!==["TEMPLATE","SCRIPT","STYLE","LINK","MAP","META","NOSCRIPT","PICTURE","COL","COLGROUP","PARAM","SLOT","SOURCE","TRACK"].indexOf(e.tagName),o="INPUT"===e.tagName&&"hidden"===e.getAttribute("type");return t||o}(e);t&&o&&x(e,r)}))}function k(e,t){let o=-1;return e.some(((e,n)=>!!t(e)&&(o=n,!0))),o}const C=new class{constructor(){this.containers=void 0,this.modals=void 0,this.modals=[],this.containers=[]}add(e,t){let o=this.modals.indexOf(e);if(-1!==o)return o;o=this.modals.length,this.modals.push(e),e.modalRef&&x(e.modalRef,!1);const n=function(e){const t=[];return[].forEach.call(e.children,(e=>{"true"===e.getAttribute("aria-hidden")&&t.push(e)})),t}(t);S(t,e.mount,e.modalRef,n,!0);const r=k(this.containers,(e=>e.container===t));return-1!==r?(this.containers[r].modals.push(e),o):(this.containers.push({modals:[e],container:t,restore:null,hiddenSiblings:n}),o)}mount(e,t){const o=k(this.containers,(t=>-1!==t.modals.indexOf(e))),n=this.containers[o];n.restore||(n.restore=function(e,t){const o=[],n=e.container;if(!t.disableScrollLock){if(function(e){const t=(0,h.A)(e);return t.body===e?(0,v.A)(e).innerWidth>t.documentElement.clientWidth:e.scrollHeight>e.clientHeight}(n)){const e=(0,y.A)((0,h.A)(n));o.push({value:n.style.paddingRight,property:"padding-right",el:n}),n.style.paddingRight=`${w(n)+e}px`;const t=(0,h.A)(n).querySelectorAll(".mui-fixed");[].forEach.call(t,(t=>{o.push({value:t.style.paddingRight,property:"padding-right",el:t}),t.style.paddingRight=`${w(t)+e}px`}))}let e;if(n.parentNode instanceof DocumentFragment)e=(0,h.A)(n).body;else{const t=n.parentElement,o=(0,v.A)(n);e="HTML"===(null==t?void 0:t.nodeName)&&"scroll"===o.getComputedStyle(t).overflowY?t:n}o.push({value:e.style.overflow,property:"overflow",el:e},{value:e.style.overflowX,property:"overflow-x",el:e},{value:e.style.overflowY,property:"overflow-y",el:e}),e.style.overflow="hidden"}return()=>{o.forEach((({value:e,el:t,property:o})=>{e?t.style.setProperty(o,e):t.style.removeProperty(o)}))}}(n,t))}remove(e,t=!0){const o=this.modals.indexOf(e);if(-1===o)return o;const n=k(this.containers,(t=>-1!==t.modals.indexOf(e))),r=this.containers[n];if(r.modals.splice(r.modals.indexOf(e),1),this.modals.splice(o,1),0===r.modals.length)r.restore&&r.restore(),e.modalRef&&x(e.modalRef,t),S(r.container,e.mount,e.modalRef,r.hiddenSiblings,!1),this.containers.splice(n,1);else{const e=r.modals[r.modals.length-1];e.modalRef&&x(e.modalRef,!1)}return o}isTopModal(e){return this.modals.length>0&&this.modals[this.modals.length-1]===e}};var R=o(8413),M=o(1609);function E(e){return(0,M.Ay)("MuiModal",e)}(0,R.A)("MuiModal",["root","hidden","backdrop"]);var P=o(4848);const T=["BackdropComponent","BackdropProps","classes","className","closeAfterTransition","children","container","component","components","componentsProps","disableAutoFocus","disableEnforceFocus","disableEscapeKeyDown","disablePortal","disableRestoreFocus","disableScrollLock","hideBackdrop","keepMounted","onBackdropClick","onClose","onTransitionEnter","onTransitionExited","open","slotProps","slots","theme"],$=(0,c.Ay)("div",{name:"MuiModal",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,!o.open&&o.exited&&t.hidden]}})((({theme:e,ownerState:t})=>(0,r.A)({position:"fixed",zIndex:(e.vars||e).zIndex.modal,right:0,bottom:0,top:0,left:0},!t.open&&t.exited&&{visibility:"hidden"}))),F=(0,c.Ay)(m.A,{name:"MuiModal",slot:"Backdrop",overridesResolver:(e,t)=>t.backdrop})({zIndex:-1}),L=i.forwardRef((function(e,t){var o,c,m,v,y,w;const S=(0,p.b)({name:"MuiModal",props:e}),{BackdropComponent:k=F,BackdropProps:R,className:M,closeAfterTransition:L=!1,children:z,container:N,component:W,components:I={},componentsProps:B={},disableAutoFocus:j=!1,disableEnforceFocus:O=!1,disableEscapeKeyDown:D=!1,disablePortal:q=!1,disableRestoreFocus:H=!1,disableScrollLock:K=!1,hideBackdrop:U=!1,keepMounted:V=!1,onBackdropClick:G,open:X,slotProps:Y,slots:_}=S,J=(0,n.A)(S,T),Q=(0,r.A)({},S,{closeAfterTransition:L,disableAutoFocus:j,disableEnforceFocus:O,disableEscapeKeyDown:D,disablePortal:q,disableRestoreFocus:H,disableScrollLock:K,hideBackdrop:U,keepMounted:V}),{getRootProps:Z,getBackdropProps:ee,getTransitionProps:te,portalRef:oe,isTopModal:ne,exited:re,hasTransition:ie}=function(e){const{container:t,disableEscapeKeyDown:o=!1,disableScrollLock:n=!1,manager:a=C,closeAfterTransition:s=!1,onTransitionEnter:l,onTransitionExited:d,children:u,onClose:c,open:p,rootRef:m}=e,v=i.useRef({}),y=i.useRef(null),w=i.useRef(null),S=(0,f.A)(w,m),[k,R]=i.useState(!p),M=function(e){return!!e&&e.props.hasOwnProperty("in")}(u);let E=!0;"false"!==e["aria-hidden"]&&!1!==e["aria-hidden"]||(E=!1);const P=()=>(v.current.modalRef=w.current,v.current.mount=y.current,v.current),T=()=>{a.mount(P(),{disableScrollLock:n}),w.current&&(w.current.scrollTop=0)},$=(0,b.A)((()=>{const e=function(e){return"function"==typeof e?e():e}(t)||(0,h.A)(y.current).body;a.add(P(),e),w.current&&T()})),F=i.useCallback((()=>a.isTopModal(P())),[a]),L=(0,b.A)((e=>{y.current=e,e&&(p&&F()?T():w.current&&x(w.current,E))})),z=i.useCallback((()=>{a.remove(P(),E)}),[E,a]);i.useEffect((()=>()=>{z()}),[z]),i.useEffect((()=>{p?$():M&&s||z()}),[p,z,M,s,$]);const N=e=>t=>{var n;null==(n=e.onKeyDown)||n.call(e,t),"Escape"===t.key&&229!==t.which&&F()&&(o||(t.stopPropagation(),c&&c(t,"escapeKeyDown")))},W=e=>t=>{var o;null==(o=e.onClick)||o.call(e,t),t.target===t.currentTarget&&c&&c(t,"backdropClick")};return{getRootProps:(t={})=>{const o=(0,A.A)(e);delete o.onTransitionEnter,delete o.onTransitionExited;const n=(0,r.A)({},o,t);return(0,r.A)({role:"presentation"},n,{onKeyDown:N(n),ref:S})},getBackdropProps:(e={})=>{const t=e;return(0,r.A)({"aria-hidden":!0},t,{onClick:W(t),open:p})},getTransitionProps:()=>({onEnter:(0,g.A)((()=>{R(!1),l&&l()}),null==u?void 0:u.props.onEnter),onExited:(0,g.A)((()=>{R(!0),d&&d(),s&&z()}),null==u?void 0:u.props.onExited)}),rootRef:S,portalRef:L,isTopModal:F,exited:k,hasTransition:M}}((0,r.A)({},Q,{rootRef:t})),ae=(0,r.A)({},Q,{exited:re}),se=(e=>{const{open:t,exited:o,classes:n}=e,r={root:["root",!t&&o&&"hidden"],backdrop:["backdrop"]};return(0,s.A)(r,E,n)})(ae),le={};if(void 0===z.props.tabIndex&&(le.tabIndex="-1"),ie){const{onEnter:e,onExited:t}=te();le.onEnter=e,le.onExited=t}const de=null!=(o=null!=(c=null==_?void 0:_.root)?c:I.Root)?o:$,ue=null!=(m=null!=(v=null==_?void 0:_.backdrop)?v:I.Backdrop)?m:k,ce=null!=(y=null==Y?void 0:Y.root)?y:B.root,pe=null!=(w=null==Y?void 0:Y.backdrop)?w:B.backdrop,me=(0,l.A)({elementType:de,externalSlotProps:ce,externalForwardedProps:J,getSlotProps:Z,additionalProps:{ref:t,as:W},ownerState:ae,className:(0,a.A)(M,null==ce?void 0:ce.className,null==se?void 0:se.root,!ae.open&&ae.exited&&(null==se?void 0:se.hidden))}),fe=(0,l.A)({elementType:ue,externalSlotProps:pe,additionalProps:R,getSlotProps:e=>ee((0,r.A)({},e,{onClick:t=>{G&&G(t),null!=e&&e.onClick&&e.onClick(t)}})),className:(0,a.A)(null==pe?void 0:pe.className,null==R?void 0:R.className,null==se?void 0:se.backdrop),ownerState:ae});return V||X||ie&&!re?(0,P.jsx)(u.A,{ref:oe,container:N,disablePortal:q,children:(0,P.jsxs)(de,(0,r.A)({},me,{children:[!U&&k?(0,P.jsx)(ue,(0,r.A)({},fe)):null,(0,P.jsx)(d.A,{disableEnforceFocus:O,disableAutoFocus:j,disableRestoreFocus:H,isEnabled:ne,open:X,children:i.cloneElement(z,le)})]}))}):null}))}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFjblksVUFBc0IsTUFBWDFCLFFBQWtCLEVBQVNBLEdBQVFDLE1BQU9oRixHQUFXb2UsTUFBUXBlLEdBQVd3akIsU0FBc0IsTUFBWHplLFFBQWtCLEVBQVNBLEdBQVEwZSxXQUV2TTBELElBQWdCLEVBQUF0SSxFQUFBLEdBQWEsQ0FDakNDLFlBQWFnSSxHQUNiL0gsa0JBQW1CZ0ksR0FDbkJHLGdCQUFpQmpELEVBQ2pCZ0QsYUFBY1osR0FDTHhCLElBQWlCLE9BQVMsQ0FBQyxFQUFHd0IsRUFBZSxDQUNsRDNSLFFBQVMwUyxJQUNIMUMsR0FDRkEsRUFBZ0IwQyxHQUVHLE1BQWpCZixHQUF5QkEsRUFBYzNSLFNBQ3pDMlIsRUFBYzNSLFFBQVEwUyxFQUN4QixLQUlOM2dCLFdBQVcsRUFBQTRCLEVBQUEsR0FBMEIsTUFBckIwZSxRQUE0QixFQUFTQSxHQUFrQnRnQixVQUE0QixNQUFqQndkLE9BQXdCLEVBQVNBLEVBQWN4ZCxVQUFzQixNQUFYMUIsUUFBa0IsRUFBU0EsR0FBUTZlLFVBQy9LNWpCLGdCQUVGLE9BQUt5a0IsR0FBZ0JyRyxHQUFVNEcsS0FBaUJ4QixJQUc1QixTQUFLNkQsRUFBQSxFQUFRLENBQy9CcGpCLElBQUs4Z0IsR0FDTDNaLFVBQVdBLEVBQ1hrWixjQUFlQSxFQUNmOWQsVUFBdUIsVUFBTWpCLElBQVUsT0FBUyxDQUFDLEVBQUdtUSxHQUFXLENBQzdEbFAsU0FBVSxFQUFFZ2UsR0FBZ0JSLEdBQWlDLFNBQUs4QyxJQUFjLE9BQVMsQ0FBQyxFQUFHSyxLQUFrQixNQUFtQixTQUFLRyxFQUFBLEVBQVcsQ0FDaEpsRCxvQkFBcUJBLEVBQ3JCRCxpQkFBa0JBLEVBQ2xCSSxvQkFBcUJBLEVBQ3JCZ0QsVUFBV2xFLEdBQ1hqRixLQUFNQSxFQUNONVgsU0FBdUIsZUFBbUJBLEVBQVUySyxZQWJqRCxJQWlCWCxHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRmlsbGVkSW5wdXQvZmlsbGVkSW5wdXRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0ZpbGxlZElucHV0L0ZpbGxlZElucHV0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtSGVscGVyVGV4dC9mb3JtSGVscGVyVGV4dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUhlbHBlclRleHQvRm9ybUhlbHBlclRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvR2xvYmFsU3R5bGVzL0dsb2JhbFN0eWxlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9HcmlkL0dyaWRDb250ZXh0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dyaWQvZ3JpZENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvR3JpZC9HcmlkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dyb3cvR3Jvdy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dC9pbnB1dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXQvSW5wdXQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlL0lucHV0QmFzZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvaW5wdXRCYXNlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUxhYmVsL2Zvcm1MYWJlbENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUxhYmVsL0Zvcm1MYWJlbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dExhYmVsL2lucHV0TGFiZWxDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0TGFiZWwvSW5wdXRMYWJlbC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaW5rL2xpbmtDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpbmsvZ2V0VGV4dERlY29yYXRpb24uanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGluay9MaW5rLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3QvTGlzdENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdC9saXN0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0L0xpc3QuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudUxpc3QvTWVudUxpc3QuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudS9tZW51Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9NZW51L01lbnUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTW9kYWwvTW9kYWxNYW5hZ2VyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01vZGFsL3VzZU1vZGFsLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01vZGFsL21vZGFsQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Nb2RhbC9Nb2RhbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5pbXBvcnQgeyBpbnB1dEJhc2VDbGFzc2VzIH0gZnJvbSAnLi4vSW5wdXRCYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxsZWRJbnB1dFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRmlsbGVkSW5wdXQnLCBzbG90KTtcbn1cbmNvbnN0IGZpbGxlZElucHV0Q2xhc3NlcyA9IF9leHRlbmRzKHt9LCBpbnB1dEJhc2VDbGFzc2VzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGaWxsZWRJbnB1dCcsIFsncm9vdCcsICd1bmRlcmxpbmUnLCAnaW5wdXQnXSkpO1xuZXhwb3J0IGRlZmF1bHQgZmlsbGVkSW5wdXRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImRpc2FibGVVbmRlcmxpbmVcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaGlkZGVuTGFiZWxcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcIm11bHRpbGluZVwiLCBcInNsb3RQcm9wc1wiLCBcInNsb3RzXCIsIFwidHlwZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgSW5wdXRCYXNlIGZyb20gJy4uL0lucHV0QmFzZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IGZpbGxlZElucHV0Q2xhc3NlcywgeyBnZXRGaWxsZWRJbnB1dFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vZmlsbGVkSW5wdXRDbGFzc2VzJztcbmltcG9ydCB7IHJvb3RPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIsIGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlciwgSW5wdXRCYXNlUm9vdCwgSW5wdXRCYXNlQ29tcG9uZW50IGFzIElucHV0QmFzZUlucHV0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL0lucHV0QmFzZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZVVuZGVybGluZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVVbmRlcmxpbmUgJiYgJ3VuZGVybGluZSddLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IEZpbGxlZElucHV0Um9vdCA9IHN0eWxlZChJbnB1dEJhc2VSb290LCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlGaWxsZWRJbnB1dCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gWy4uLmlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlcihwcm9wcywgc3R5bGVzKSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiBzdHlsZXMudW5kZXJsaW5lXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF9wYWxldHRlO1xuICBjb25zdCBsaWdodCA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JztcbiAgY29uc3QgYm90dG9tTGluZUNvbG9yID0gbGlnaHQgPyAncmdiYSgwLCAwLCAwLCAwLjQyKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJztcbiAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gbGlnaHQgPyAncmdiYSgwLCAwLCAwLCAwLjA2KScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA5KSc7XG4gIGNvbnN0IGhvdmVyQmFja2dyb3VuZCA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC4wOSknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMyknO1xuICBjb25zdCBkaXNhYmxlZEJhY2tncm91bmQgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpJztcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuYmcgOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYXBlLmJvcmRlclJhZGl1cyxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYXBlLmJvcmRlclJhZGl1cyxcbiAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ2JhY2tncm91bmQtY29sb3InLCB7XG4gICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlcixcbiAgICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgICB9KSxcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5ob3ZlckJnIDogaG92ZXJCYWNrZ3JvdW5kLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmJnIDogYmFja2dyb3VuZENvbG9yXG4gICAgICB9XG4gICAgfSxcbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZm9jdXNlZH1gXToge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmJnIDogYmFja2dyb3VuZENvbG9yXG4gICAgfSxcbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5kaXNhYmxlZEJnIDogZGlzYWJsZWRCYWNrZ3JvdW5kXG4gICAgfVxuICB9LCAhb3duZXJTdGF0ZS5kaXNhYmxlVW5kZXJsaW5lICYmIHtcbiAgICAnJjo6YWZ0ZXInOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAycHggc29saWQgJHsoX3BhbGV0dGUgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yIHx8ICdwcmltYXJ5J10pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZS5tYWlufWAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgLy8gRG9pbmcgdGhlIG90aGVyIHdheSBhcm91bmQgY3Jhc2ggb24gSUUxMSBcIicnXCIgaHR0cHM6Ly9naXRodWIuY29tL2Nzc2luanMvanNzL2lzc3Vlcy8yNDJcbiAgICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMCknLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLFxuICAgICAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gICAgICB9KSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyAvLyBUcmFuc3BhcmVudCB0byB0aGUgaG92ZXIgc3R5bGUuXG4gICAgfSxcbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZm9jdXNlZH06YWZ0ZXJgXToge1xuICAgICAgLy8gdHJhbnNsYXRlWCgwKSBpcyBhIHdvcmthcm91bmQgZm9yIFNhZmFyaSB0cmFuc2Zvcm0gc2NhbGUgYnVnXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMzE3NjZcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgxKSB0cmFuc2xhdGVYKDApJ1xuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgICAnJjo6YmVmb3JlLCAmOjphZnRlcic6IHtcbiAgICAgICAgYm9yZGVyQm90dG9tQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgICAgIH1cbiAgICB9LFxuICAgICcmOjpiZWZvcmUnOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHt0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gJHt0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRVbmRlcmxpbmV9KWAgOiBib3R0b21MaW5lQ29sb3J9YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXFxcXDAwYTBcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3JkZXItYm90dG9tLWNvbG9yJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG4gICAgW2AmOmhvdmVyOm5vdCguJHtmaWxsZWRJbnB1dENsYXNzZXMuZGlzYWJsZWR9LCAuJHtmaWxsZWRJbnB1dENsYXNzZXMuZXJyb3J9KTpiZWZvcmVgXToge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5fWBcbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5kaXNhYmxlZH06YmVmb3JlYF06IHtcbiAgICAgIGJvcmRlckJvdHRvbVN0eWxlOiAnZG90dGVkJ1xuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gICAgcGFkZGluZ0xlZnQ6IDEyXG4gIH0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nUmlnaHQ6IDEyXG4gIH0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIF9leHRlbmRzKHtcbiAgICBwYWRkaW5nOiAnMjVweCAxMnB4IDhweCdcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgICBwYWRkaW5nVG9wOiAyMSxcbiAgICBwYWRkaW5nQm90dG9tOiA0XG4gIH0sIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYge1xuICAgIHBhZGRpbmdUb3A6IDE2LFxuICAgIHBhZGRpbmdCb3R0b206IDE3XG4gIH0sIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgICBwYWRkaW5nVG9wOiA4LFxuICAgIHBhZGRpbmdCb3R0b206IDlcbiAgfSkpO1xufSk7XG5jb25zdCBGaWxsZWRJbnB1dElucHV0ID0gc3R5bGVkKElucHV0QmFzZUlucHV0LCB7XG4gIG5hbWU6ICdNdWlGaWxsZWRJbnB1dCcsXG4gIHNsb3Q6ICdJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwYWRkaW5nVG9wOiAyNSxcbiAgcGFkZGluZ1JpZ2h0OiAxMixcbiAgcGFkZGluZ0JvdHRvbTogOCxcbiAgcGFkZGluZ0xlZnQ6IDEyXG59LCAhdGhlbWUudmFycyAmJiB7XG4gICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgV2Via2l0Qm94U2hhZG93OiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJzAgMCAwIDEwMHB4ICMyNjY3OTggaW5zZXQnLFxuICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnI2ZmZicsXG4gICAgY2FyZXRDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcjZmZmJyxcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAnaW5oZXJpdCcsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICdpbmhlcml0J1xuICB9XG59LCB0aGVtZS52YXJzICYmIHtcbiAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAnaW5oZXJpdCcsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICdpbmhlcml0J1xuICB9LFxuICBbdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvcignZGFyaycpXToge1xuICAgICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgICBXZWJraXRCb3hTaGFkb3c6ICcwIDAgMCAxMDBweCAjMjY2Nzk4IGluc2V0JyxcbiAgICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6ICcjZmZmJyxcbiAgICAgIGNhcmV0Q29sb3I6ICcjZmZmJ1xuICAgIH1cbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgcGFkZGluZ1RvcDogMjEsXG4gIHBhZGRpbmdCb3R0b206IDRcbn0sIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYge1xuICBwYWRkaW5nVG9wOiAxNixcbiAgcGFkZGluZ0JvdHRvbTogMTdcbn0sIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYge1xuICBwYWRkaW5nTGVmdDogMFxufSwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYge1xuICBwYWRkaW5nUmlnaHQ6IDBcbn0sIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgcGFkZGluZ1RvcDogOCxcbiAgcGFkZGluZ0JvdHRvbTogOVxufSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYge1xuICBwYWRkaW5nVG9wOiAwLFxuICBwYWRkaW5nQm90dG9tOiAwLFxuICBwYWRkaW5nTGVmdDogMCxcbiAgcGFkZGluZ1JpZ2h0OiAwXG59KSk7XG5jb25zdCBGaWxsZWRJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZpbGxlZElucHV0KGluUHJvcHMsIHJlZikge1xuICB2YXIgX3JlZiwgX3Nsb3RzJHJvb3QsIF9yZWYyLCBfc2xvdHMkaW5wdXQ7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRmlsbGVkSW5wdXQnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjb21wb25lbnRzID0ge30sXG4gICAgICBjb21wb25lbnRzUHJvcHM6IGNvbXBvbmVudHNQcm9wc1Byb3AsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIC8vIGRlY2xhcmUgaGVyZSB0byBwcmV2ZW50IHNwcmVhZGluZyB0byBET01cbiAgICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgc2xvdFByb3BzLFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIHR5cGUgPSAndGV4dCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudCxcbiAgICBtdWx0aWxpbmUsXG4gICAgdHlwZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKHByb3BzKTtcbiAgY29uc3QgZmlsbGVkSW5wdXRDb21wb25lbnRzUHJvcHMgPSB7XG4gICAgcm9vdDoge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0sXG4gICAgaW5wdXQ6IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9XG4gIH07XG4gIGNvbnN0IGNvbXBvbmVudHNQcm9wcyA9IChzbG90UHJvcHMgIT0gbnVsbCA/IHNsb3RQcm9wcyA6IGNvbXBvbmVudHNQcm9wc1Byb3ApID8gZGVlcG1lcmdlKGZpbGxlZElucHV0Q29tcG9uZW50c1Byb3BzLCBzbG90UHJvcHMgIT0gbnVsbCA/IHNsb3RQcm9wcyA6IGNvbXBvbmVudHNQcm9wc1Byb3ApIDogZmlsbGVkSW5wdXRDb21wb25lbnRzUHJvcHM7XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9yZWYgPSAoX3Nsb3RzJHJvb3QgPSBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBjb21wb25lbnRzLlJvb3QpICE9IG51bGwgPyBfcmVmIDogRmlsbGVkSW5wdXRSb290O1xuICBjb25zdCBJbnB1dFNsb3QgPSAoX3JlZjIgPSAoX3Nsb3RzJGlucHV0ID0gc2xvdHMuaW5wdXQpICE9IG51bGwgPyBfc2xvdHMkaW5wdXQgOiBjb21wb25lbnRzLklucHV0KSAhPSBudWxsID8gX3JlZjIgOiBGaWxsZWRJbnB1dElucHV0O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSW5wdXRCYXNlLCBfZXh0ZW5kcyh7XG4gICAgc2xvdHM6IHtcbiAgICAgIHJvb3Q6IFJvb3RTbG90LFxuICAgICAgaW5wdXQ6IElucHV0U2xvdFxuICAgIH0sXG4gICAgY29tcG9uZW50c1Byb3BzOiBjb21wb25lbnRzUHJvcHMsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgaW5wdXRDb21wb25lbnQ6IGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZTogbXVsdGlsaW5lLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRmlsbGVkSW5wdXQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBpbnB1dCB3aWxsIG5vdCBoYXZlIGFuIHVuZGVybGluZS5cbiAgICovXG4gIGRpc2FibGVVbmRlcmxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRW5kIGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgZW5kQWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgaGlkZGVuLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gaW5jcmVhc2UgZGVuc2l0eSBmb3IgYSBgRmlsbGVkSW5wdXRgLlxuICAgKiBCZSBzdXJlIHRvIGFkZCBgYXJpYS1sYWJlbGAgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGhpZGRlbkxhYmVsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbnB1dCdcbiAgICovXG4gIGlucHV0Q29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNQcm9wc2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogU3RhcnQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBzdGFydEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuRmlsbGVkSW5wdXQubXVpTmFtZSA9ICdJbnB1dCc7XG5leHBvcnQgZGVmYXVsdCBGaWxsZWRJbnB1dDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1Db250cm9sJywgc2xvdCk7XG59XG5jb25zdCBmb3JtQ29udHJvbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtQ29udHJvbCcsIFsncm9vdCcsICdtYXJnaW5Ob25lJywgJ21hcmdpbk5vcm1hbCcsICdtYXJnaW5EZW5zZScsICdmdWxsV2lkdGgnLCAnZGlzYWJsZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtQ29udHJvbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmb2N1c2VkXCIsIFwiZnVsbFdpZHRoXCIsIFwiaGlkZGVuTGFiZWxcIiwgXCJtYXJnaW5cIiwgXCJyZXF1aXJlZFwiLCBcInNpemVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGlzRmlsbGVkLCBpc0Fkb3JuZWRTdGFydCB9IGZyb20gJy4uL0lucHV0QmFzZS91dGlscyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBpc011aUVsZW1lbnQgZnJvbSAnLi4vdXRpbHMvaXNNdWlFbGVtZW50JztcbmltcG9ydCBGb3JtQ29udHJvbENvbnRleHQgZnJvbSAnLi9Gb3JtQ29udHJvbENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUNvbnRyb2xDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBtYXJnaW4sXG4gICAgZnVsbFdpZHRoXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBtYXJnaW4gIT09ICdub25lJyAmJiBgbWFyZ2luJHtjYXBpdGFsaXplKG1hcmdpbil9YCwgZnVsbFdpZHRoICYmICdmdWxsV2lkdGgnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEZvcm1Db250cm9sUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpRm9ybUNvbnRyb2wnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAoe1xuICAgIG93bmVyU3RhdGVcbiAgfSwgc3R5bGVzKSA9PiB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdHlsZXMucm9vdCwgc3R5bGVzW2BtYXJnaW4ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5tYXJnaW4pfWBdLCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiBzdHlsZXMuZnVsbFdpZHRoKTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIC8vIFJlc2V0IGZpZWxkc2V0IGRlZmF1bHQgc3R5bGUuXG4gIG1pbldpZHRoOiAwLFxuICBwYWRkaW5nOiAwLFxuICBtYXJnaW46IDAsXG4gIGJvcmRlcjogMCxcbiAgdmVydGljYWxBbGlnbjogJ3RvcCdcbn0sIG93bmVyU3RhdGUubWFyZ2luID09PSAnbm9ybWFsJyAmJiB7XG4gIG1hcmdpblRvcDogMTYsXG4gIG1hcmdpbkJvdHRvbTogOFxufSwgb3duZXJTdGF0ZS5tYXJnaW4gPT09ICdkZW5zZScgJiYge1xuICBtYXJnaW5Ub3A6IDgsXG4gIG1hcmdpbkJvdHRvbTogNFxufSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYge1xuICB3aWR0aDogJzEwMCUnXG59KSk7XG5cbi8qKlxuICogUHJvdmlkZXMgY29udGV4dCBzdWNoIGFzIGZpbGxlZC9mb2N1c2VkL2Vycm9yL3JlcXVpcmVkIGZvciBmb3JtIGlucHV0cy5cbiAqIFJlbHlpbmcgb24gdGhlIGNvbnRleHQgcHJvdmlkZXMgaGlnaCBmbGV4aWJpbGl0eSBhbmQgZW5zdXJlcyB0aGF0IHRoZSBzdGF0ZSBhbHdheXMgc3RheXNcbiAqIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBjaGlsZHJlbiBvZiB0aGUgYEZvcm1Db250cm9sYC5cbiAqIFRoaXMgY29udGV4dCBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAqXG4gKiAgLSBGb3JtTGFiZWxcbiAqICAtIEZvcm1IZWxwZXJUZXh0XG4gKiAgLSBJbnB1dFxuICogIC0gSW5wdXRMYWJlbFxuICpcbiAqIFlvdSBjYW4gZmluZCBvbmUgY29tcG9zaXRpb24gZXhhbXBsZSBiZWxvdyBhbmQgbW9yZSBnb2luZyB0byBbdGhlIGRlbW9zXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dC1maWVsZC8jY29tcG9uZW50cykuXG4gKlxuICogYGBganN4XG4gKiA8Rm9ybUNvbnRyb2w+XG4gKiAgIDxJbnB1dExhYmVsIGh0bWxGb3I9XCJteS1pbnB1dFwiPkVtYWlsIGFkZHJlc3M8L0lucHV0TGFiZWw+XG4gKiAgIDxJbnB1dCBpZD1cIm15LWlucHV0XCIgYXJpYS1kZXNjcmliZWRieT1cIm15LWhlbHBlci10ZXh0XCIgLz5cbiAqICAgPEZvcm1IZWxwZXJUZXh0IGlkPVwibXktaGVscGVyLXRleHRcIj5XZSdsbCBuZXZlciBzaGFyZSB5b3VyIGVtYWlsLjwvRm9ybUhlbHBlclRleHQ+XG4gKiA8L0Zvcm1Db250cm9sPlxuICogYGBgXG4gKlxuICog4pqg77iPIE9ubHkgb25lIGBJbnB1dEJhc2VgIGNhbiBiZSB1c2VkIHdpdGhpbiBhIEZvcm1Db250cm9sIGJlY2F1c2UgaXQgY3JlYXRlcyB2aXN1YWwgaW5jb25zaXN0ZW5jaWVzLlxuICogRm9yIGluc3RhbmNlLCBvbmx5IG9uZSBpbnB1dCBjYW4gYmUgZm9jdXNlZCBhdCB0aGUgc2FtZSB0aW1lLCB0aGUgc3RhdGUgc2hvdWxkbid0IGJlIHNoYXJlZC5cbiAqL1xuY29uc3QgRm9ybUNvbnRyb2wgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtQ29udHJvbChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VEZWZhdWx0UHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtQ29udHJvbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBlcnJvciA9IGZhbHNlLFxuICAgICAgZm9jdXNlZDogdmlzdWFsbHlGb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBoaWRkZW5MYWJlbCA9IGZhbHNlLFxuICAgICAgbWFyZ2luID0gJ25vbmUnLFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICAgIHZhcmlhbnQgPSAnb3V0bGluZWQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsLFxuICAgIG1hcmdpbixcbiAgICByZXF1aXJlZCxcbiAgICBzaXplLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgW2Fkb3JuZWRTdGFydCwgc2V0QWRvcm5lZFN0YXJ0XSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxBZG9ybmVkU3RhcnQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gaXNNdWlFbGVtZW50KGNoaWxkLCBbJ1NlbGVjdCddKSA/IGNoaWxkLnByb3BzLmlucHV0IDogY2hpbGQ7XG4gICAgICAgIGlmIChpbnB1dCAmJiBpc0Fkb3JuZWRTdGFydChpbnB1dC5wcm9wcykpIHtcbiAgICAgICAgICBpbml0aWFsQWRvcm5lZFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsQWRvcm5lZFN0YXJ0O1xuICB9KTtcbiAgY29uc3QgW2ZpbGxlZCwgc2V0RmlsbGVkXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxGaWxsZWQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0ZpbGxlZChjaGlsZC5wcm9wcywgdHJ1ZSkgfHwgaXNGaWxsZWQoY2hpbGQucHJvcHMuaW5wdXRQcm9wcywgdHJ1ZSkpIHtcbiAgICAgICAgICBpbml0aWFsRmlsbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsRmlsbGVkO1xuICB9KTtcbiAgY29uc3QgW2ZvY3VzZWRTdGF0ZSwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c2VkU3RhdGUpIHtcbiAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgfVxuICBjb25zdCBmb2N1c2VkID0gdmlzdWFsbHlGb2N1c2VkICE9PSB1bmRlZmluZWQgJiYgIWRpc2FibGVkID8gdmlzdWFsbHlGb2N1c2VkIDogZm9jdXNlZFN0YXRlO1xuICBsZXQgcmVnaXN0ZXJFZmZlY3Q7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgcmVnaXN0ZXJlZElucHV0ID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICByZWdpc3RlckVmZmVjdCA9ICgpID0+IHtcbiAgICAgIGlmIChyZWdpc3RlcmVkSW5wdXQuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGVyZSBhcmUgbXVsdGlwbGUgYElucHV0QmFzZWAgY29tcG9uZW50cyBpbnNpZGUgYSBGb3JtQ29udHJvbC4nLCAnVGhpcyBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMsIG9ubHkgdXNlIG9uZSBgSW5wdXRCYXNlYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IHRydWU7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfTtcbiAgICB9O1xuICB9XG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhZG9ybmVkU3RhcnQsXG4gICAgICBzZXRBZG9ybmVkU3RhcnQsXG4gICAgICBjb2xvcixcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZXJyb3IsXG4gICAgICBmaWxsZWQsXG4gICAgICBmb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoLFxuICAgICAgaGlkZGVuTGFiZWwsXG4gICAgICBzaXplLFxuICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIG9uRW1wdHk6ICgpID0+IHtcbiAgICAgICAgc2V0RmlsbGVkKGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBvbkZpbGxlZDogKCkgPT4ge1xuICAgICAgICBzZXRGaWxsZWQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgICAgfSxcbiAgICAgIHJlZ2lzdGVyRWZmZWN0LFxuICAgICAgcmVxdWlyZWQsXG4gICAgICB2YXJpYW50XG4gICAgfTtcbiAgfSwgW2Fkb3JuZWRTdGFydCwgY29sb3IsIGRpc2FibGVkLCBlcnJvciwgZmlsbGVkLCBmb2N1c2VkLCBmdWxsV2lkdGgsIGhpZGRlbkxhYmVsLCByZWdpc3RlckVmZmVjdCwgcmVxdWlyZWQsIHNpemUsIHZhcmlhbnRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjaGlsZENvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtQ29udHJvbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwsIGlucHV0IGFuZCBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzcGxheWVkIGluIGZvY3VzZWQgc3RhdGUuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBoaWRkZW4uXG4gICAqIFRoaXMgaXMgdXNlZCB0byBpbmNyZWFzZSBkZW5zaXR5IGZvciBhIGBGaWxsZWRJbnB1dGAuXG4gICAqIEJlIHN1cmUgdG8gYWRkIGBhcmlhLWxhYmVsYCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZGVuTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCBvciBgbm9ybWFsYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZyBvZiB0aGlzIGFuZCBjb250YWluZWQgY29tcG9uZW50cy5cbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnLCAnbm9ybWFsJ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1Db250cm9sOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgRm9ybUNvbnRyb2xDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEZvcm1Db250cm9sQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdGb3JtQ29udHJvbENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2xDb250ZXh0OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1Db250cm9sU3RhdGUoe1xuICBwcm9wcyxcbiAgc3RhdGVzLFxuICBtdWlGb3JtQ29udHJvbFxufSkge1xuICByZXR1cm4gc3RhdGVzLnJlZHVjZSgoYWNjLCBzdGF0ZSkgPT4ge1xuICAgIGFjY1tzdGF0ZV0gPSBwcm9wc1tzdGF0ZV07XG4gICAgaWYgKG11aUZvcm1Db250cm9sKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzW3N0YXRlXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgYWNjW3N0YXRlXSA9IG11aUZvcm1Db250cm9sW3N0YXRlXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGb3JtQ29udHJvbCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoRm9ybUNvbnRyb2xDb250ZXh0KTtcbn0iLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1IZWxwZXJUZXh0Jywgc2xvdCk7XG59XG5jb25zdCBmb3JtSGVscGVyVGV4dENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtSGVscGVyVGV4dCcsIFsncm9vdCcsICdlcnJvcicsICdkaXNhYmxlZCcsICdzaXplU21hbGwnLCAnc2l6ZU1lZGl1bScsICdjb250YWluZWQnLCAnZm9jdXNlZCcsICdmaWxsZWQnLCAncmVxdWlyZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtSGVscGVyVGV4dENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xudmFyIF9zcGFuO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiZmlsbGVkXCIsIFwiZm9jdXNlZFwiLCBcIm1hcmdpblwiLCBcInJlcXVpcmVkXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBmb3JtSGVscGVyVGV4dENsYXNzZXMsIHsgZ2V0Rm9ybUhlbHBlclRleHRVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUhlbHBlclRleHRDbGFzc2VzJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb250YWluZWQsXG4gICAgc2l6ZSxcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBmaWxsZWQsXG4gICAgZm9jdXNlZCxcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgZXJyb3IgJiYgJ2Vycm9yJywgc2l6ZSAmJiBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCBjb250YWluZWQgJiYgJ2NvbnRhaW5lZCcsIGZvY3VzZWQgJiYgJ2ZvY3VzZWQnLCBmaWxsZWQgJiYgJ2ZpbGxlZCcsIHJlcXVpcmVkICYmICdyZXF1aXJlZCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUhlbHBlclRleHRVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgRm9ybUhlbHBlclRleHRSb290ID0gc3R5bGVkKCdwJywge1xuICBuYW1lOiAnTXVpRm9ybUhlbHBlclRleHQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5zaXplICYmIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBvd25lclN0YXRlLmNvbnRhaW5lZCAmJiBzdHlsZXMuY29udGFpbmVkLCBvd25lclN0YXRlLmZpbGxlZCAmJiBzdHlsZXMuZmlsbGVkXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuc2Vjb25kYXJ5XG59LCB0aGVtZS50eXBvZ3JhcGh5LmNhcHRpb24sIHtcbiAgdGV4dEFsaWduOiAnbGVmdCcsXG4gIG1hcmdpblRvcDogMyxcbiAgbWFyZ2luUmlnaHQ6IDAsXG4gIG1hcmdpbkJvdHRvbTogMCxcbiAgbWFyZ2luTGVmdDogMCxcbiAgW2AmLiR7Zm9ybUhlbHBlclRleHRDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWRcbiAgfSxcbiAgW2AmLiR7Zm9ybUhlbHBlclRleHRDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgbWFyZ2luVG9wOiA0XG59LCBvd25lclN0YXRlLmNvbnRhaW5lZCAmJiB7XG4gIG1hcmdpbkxlZnQ6IDE0LFxuICBtYXJnaW5SaWdodDogMTRcbn0pKTtcbmNvbnN0IEZvcm1IZWxwZXJUZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUhlbHBlclRleHQoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRm9ybUhlbHBlclRleHQnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdwJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWyd2YXJpYW50JywgJ3NpemUnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZmlsbGVkJywgJ2ZvY3VzZWQnLCAncmVxdWlyZWQnXVxuICB9KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBjb250YWluZWQ6IGZjcy52YXJpYW50ID09PSAnZmlsbGVkJyB8fCBmY3MudmFyaWFudCA9PT0gJ291dGxpbmVkJyxcbiAgICB2YXJpYW50OiBmY3MudmFyaWFudCxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZmlsbGVkOiBmY3MuZmlsbGVkLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkLFxuICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1IZWxwZXJUZXh0Um9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IGNoaWxkcmVuID09PSAnICcgPyAvLyBub3RyYW5zbGF0ZSBuZWVkZWQgd2hpbGUgR29vZ2xlIFRyYW5zbGF0ZSB3aWxsIG5vdCBmaXggemVyby13aWR0aCBzcGFjZSBpc3N1ZVxuICAgIF9zcGFuIHx8IChfc3BhbiA9IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwibm90cmFuc2xhdGVcIixcbiAgICAgIGNoaWxkcmVuOiBcIlxcdTIwMEJcIlxuICAgIH0pKSA6IGNoaWxkcmVuXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUhlbHBlclRleHQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogSWYgYCcgJ2AgaXMgcHJvdmlkZWQsIHRoZSBjb21wb25lbnQgcmVzZXJ2ZXMgb25lIGxpbmUgaGVpZ2h0IGZvciBkaXNwbGF5aW5nIGEgZnV0dXJlIG1lc3NhZ2UuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGhlbHBlciB0ZXh0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBoZWxwZXIgdGV4dCBzaG91bGQgdXNlIGZpbGxlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIGZpbGxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBoZWxwZXIgdGV4dCBzaG91bGQgdXNlIGZvY3VzZWQgY2xhc3NlcyBrZXkuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBoZWxwZXIgdGV4dCBzaG91bGQgdXNlIHJlcXVpcmVkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1IZWxwZXJUZXh0OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgR2xvYmFsU3R5bGVzIGFzIFN5c3RlbUdsb2JhbFN0eWxlcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi4vc3R5bGVzL2RlZmF1bHRUaGVtZSc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi4vc3R5bGVzL2lkZW50aWZpZXInO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIEdsb2JhbFN0eWxlcyhwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3lzdGVtR2xvYmFsU3R5bGVzLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkZWZhdWx0VGhlbWU6IGRlZmF1bHRUaGVtZSxcbiAgICB0aGVtZUlkOiBUSEVNRV9JRFxuICB9KSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHbG9iYWxTdHlsZXMucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIHN0eWxlcyB5b3Ugd2FudCB0byBhcHBseSBnbG9iYWxseS5cbiAgICovXG4gIHN0eWxlczogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuYm9vbF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgR2xvYmFsU3R5bGVzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IEdyaWRDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEdyaWRDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0dyaWRDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IEdyaWRDb250ZXh0OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0R3JpZFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpR3JpZCcsIHNsb3QpO1xufVxuY29uc3QgU1BBQ0lOR1MgPSBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdO1xuY29uc3QgRElSRUNUSU9OUyA9IFsnY29sdW1uLXJldmVyc2UnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ3JvdyddO1xuY29uc3QgV1JBUFMgPSBbJ25vd3JhcCcsICd3cmFwLXJldmVyc2UnLCAnd3JhcCddO1xuY29uc3QgR1JJRF9TSVpFUyA9IFsnYXV0bycsIHRydWUsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTJdO1xuY29uc3QgZ3JpZENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlHcmlkJywgWydyb290JywgJ2NvbnRhaW5lcicsICdpdGVtJywgJ3plcm9NaW5XaWR0aCcsXG4vLyBzcGFjaW5nc1xuLi4uU1BBQ0lOR1MubWFwKHNwYWNpbmcgPT4gYHNwYWNpbmcteHMtJHtzcGFjaW5nfWApLFxuLy8gZGlyZWN0aW9uIHZhbHVlc1xuLi4uRElSRUNUSU9OUy5tYXAoZGlyZWN0aW9uID0+IGBkaXJlY3Rpb24teHMtJHtkaXJlY3Rpb259YCksXG4vLyB3cmFwIHZhbHVlc1xuLi4uV1JBUFMubWFwKHdyYXAgPT4gYHdyYXAteHMtJHt3cmFwfWApLFxuLy8gZ3JpZCBzaXplcyBmb3IgYWxsIGJyZWFrcG9pbnRzXG4uLi5HUklEX1NJWkVTLm1hcChzaXplID0+IGBncmlkLXhzLSR7c2l6ZX1gKSwgLi4uR1JJRF9TSVpFUy5tYXAoc2l6ZSA9PiBgZ3JpZC1zbS0ke3NpemV9YCksIC4uLkdSSURfU0laRVMubWFwKHNpemUgPT4gYGdyaWQtbWQtJHtzaXplfWApLCAuLi5HUklEX1NJWkVTLm1hcChzaXplID0+IGBncmlkLWxnLSR7c2l6ZX1gKSwgLi4uR1JJRF9TSVpFUy5tYXAoc2l6ZSA9PiBgZ3JpZC14bC0ke3NpemV9YCldKTtcbmV4cG9ydCBkZWZhdWx0IGdyaWRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuLy8gQSBncmlkIGNvbXBvbmVudCB1c2luZyB0aGUgZm9sbG93aW5nIGxpYnMgYXMgaW5zcGlyYXRpb24uXG4vL1xuLy8gRm9yIHRoZSBpbXBsZW1lbnRhdGlvbjpcbi8vIC0gaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvNC4zL2xheW91dC9ncmlkL1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20va3Jpc3RvZmVyam9zZXBoL2ZsZXhib3hncmlkL2Jsb2IvbWFzdGVyL3NyYy9jc3MvZmxleGJveGdyaWQuY3NzXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9yb3lsZWUwNzA0L3JlYWN0LWZsZXhib3gtZ3JpZFxuLy8gLSBodHRwczovL21hdGVyaWFsLmFuZ3VsYXJqcy5vcmcvbGF0ZXN0L2xheW91dC9pbnRyb2R1Y3Rpb25cbi8vXG4vLyBGb2xsb3cgdGhpcyBmbGV4Ym94IEd1aWRlIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIG1vZGVsOlxuLy8gLSBodHRwczovL2Nzcy10cmlja3MuY29tL3NuaXBwZXRzL2Nzcy9hLWd1aWRlLXRvLWZsZXhib3gvXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29sdW1uc1wiLCBcImNvbHVtblNwYWNpbmdcIiwgXCJjb21wb25lbnRcIiwgXCJjb250YWluZXJcIiwgXCJkaXJlY3Rpb25cIiwgXCJpdGVtXCIsIFwicm93U3BhY2luZ1wiLCBcInNwYWNpbmdcIiwgXCJ3cmFwXCIsIFwiemVyb01pbldpZHRoXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMsIHVuc3RhYmxlX3Jlc29sdmVCcmVha3BvaW50VmFsdWVzIGFzIHJlc29sdmVCcmVha3BvaW50VmFsdWVzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHsgZXh0ZW5kU3hQcm9wIH0gZnJvbSAnQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4JztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCByZXF1aXJlUHJvcEZhY3RvcnkgZnJvbSAnLi4vdXRpbHMvcmVxdWlyZVByb3BGYWN0b3J5JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCBHcmlkQ29udGV4dCBmcm9tICcuL0dyaWRDb250ZXh0JztcbmltcG9ydCBncmlkQ2xhc3NlcywgeyBnZXRHcmlkVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9ncmlkQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gZ2V0T2Zmc2V0KHZhbCkge1xuICBjb25zdCBwYXJzZSA9IHBhcnNlRmxvYXQodmFsKTtcbiAgcmV0dXJuIGAke3BhcnNlfSR7U3RyaW5nKHZhbCkucmVwbGFjZShTdHJpbmcocGFyc2UpLCAnJykgfHwgJ3B4J31gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlR3JpZCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSB7XG4gIGxldCBzaXplO1xuICByZXR1cm4gdGhlbWUuYnJlYWtwb2ludHMua2V5cy5yZWR1Y2UoKGdsb2JhbFN0eWxlcywgYnJlYWtwb2ludCkgPT4ge1xuICAgIC8vIFVzZSBzaWRlIGVmZmVjdCBvdmVyIGltbXV0YWJpbGl0eSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLlxuICAgIGxldCBzdHlsZXMgPSB7fTtcbiAgICBpZiAob3duZXJTdGF0ZVticmVha3BvaW50XSkge1xuICAgICAgc2l6ZSA9IG93bmVyU3RhdGVbYnJlYWtwb2ludF07XG4gICAgfVxuICAgIGlmICghc2l6ZSkge1xuICAgICAgcmV0dXJuIGdsb2JhbFN0eWxlcztcbiAgICB9XG4gICAgaWYgKHNpemUgPT09IHRydWUpIHtcbiAgICAgIC8vIEZvciB0aGUgYXV0byBsYXlvdXRpbmdcbiAgICAgIHN0eWxlcyA9IHtcbiAgICAgICAgZmxleEJhc2lzOiAwLFxuICAgICAgICBmbGV4R3JvdzogMSxcbiAgICAgICAgbWF4V2lkdGg6ICcxMDAlJ1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHNpemUgPT09ICdhdXRvJykge1xuICAgICAgc3R5bGVzID0ge1xuICAgICAgICBmbGV4QmFzaXM6ICdhdXRvJyxcbiAgICAgICAgZmxleEdyb3c6IDAsXG4gICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgIG1heFdpZHRoOiAnbm9uZScsXG4gICAgICAgIHdpZHRoOiAnYXV0bydcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbHVtbnNCcmVha3BvaW50VmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuY29sdW1ucyxcbiAgICAgICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IHR5cGVvZiBjb2x1bW5zQnJlYWtwb2ludFZhbHVlcyA9PT0gJ29iamVjdCcgPyBjb2x1bW5zQnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSA6IGNvbHVtbnNCcmVha3BvaW50VmFsdWVzO1xuICAgICAgaWYgKGNvbHVtblZhbHVlID09PSB1bmRlZmluZWQgfHwgY29sdW1uVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFN0eWxlcztcbiAgICAgIH1cbiAgICAgIC8vIEtlZXAgNyBzaWduaWZpY2FudCBudW1iZXJzLlxuICAgICAgY29uc3Qgd2lkdGggPSBgJHtNYXRoLnJvdW5kKHNpemUgLyBjb2x1bW5WYWx1ZSAqIDEwZTcpIC8gMTBlNX0lYDtcbiAgICAgIGxldCBtb3JlID0ge307XG4gICAgICBpZiAob3duZXJTdGF0ZS5jb250YWluZXIgJiYgb3duZXJTdGF0ZS5pdGVtICYmIG93bmVyU3RhdGUuY29sdW1uU3BhY2luZyAhPT0gMCkge1xuICAgICAgICBjb25zdCB0aGVtZVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nKG93bmVyU3RhdGUuY29sdW1uU3BhY2luZyk7XG4gICAgICAgIGlmICh0aGVtZVNwYWNpbmcgIT09ICcwcHgnKSB7XG4gICAgICAgICAgY29uc3QgZnVsbFdpZHRoID0gYGNhbGMoJHt3aWR0aH0gKyAke2dldE9mZnNldCh0aGVtZVNwYWNpbmcpfSlgO1xuICAgICAgICAgIG1vcmUgPSB7XG4gICAgICAgICAgICBmbGV4QmFzaXM6IGZ1bGxXaWR0aCxcbiAgICAgICAgICAgIG1heFdpZHRoOiBmdWxsV2lkdGhcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENsb3NlIHRvIHRoZSBib290c3RyYXAgaW1wbGVtZW50YXRpb246XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi84ZmNjYWEyNDM5ZTk3ZWM3MmE0YjdkYzQyY2NjMWY2NDk3OTBhZGIwL3Njc3MvbWl4aW5zL19ncmlkLnNjc3MjTDQxXG4gICAgICBzdHlsZXMgPSBfZXh0ZW5kcyh7XG4gICAgICAgIGZsZXhCYXNpczogd2lkdGgsXG4gICAgICAgIGZsZXhHcm93OiAwLFxuICAgICAgICBtYXhXaWR0aDogd2lkdGhcbiAgICAgIH0sIG1vcmUpO1xuICAgIH1cblxuICAgIC8vIE5vIG5lZWQgZm9yIGEgbWVkaWEgcXVlcnkgZm9yIHRoZSBmaXJzdCBzaXplLlxuICAgIGlmICh0aGVtZS5icmVha3BvaW50cy52YWx1ZXNbYnJlYWtwb2ludF0gPT09IDApIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oZ2xvYmFsU3R5bGVzLCBzdHlsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnbG9iYWxTdHlsZXNbdGhlbWUuYnJlYWtwb2ludHMudXAoYnJlYWtwb2ludCldID0gc3R5bGVzO1xuICAgIH1cbiAgICByZXR1cm4gZ2xvYmFsU3R5bGVzO1xuICB9LCB7fSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVEaXJlY3Rpb24oe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkge1xuICBjb25zdCBkaXJlY3Rpb25WYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgdmFsdWVzOiBvd25lclN0YXRlLmRpcmVjdGlvbixcbiAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzXG4gIH0pO1xuICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgIHRoZW1lXG4gIH0sIGRpcmVjdGlvblZhbHVlcywgcHJvcFZhbHVlID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSB7XG4gICAgICBmbGV4RGlyZWN0aW9uOiBwcm9wVmFsdWVcbiAgICB9O1xuICAgIGlmIChwcm9wVmFsdWUuaW5kZXhPZignY29sdW1uJykgPT09IDApIHtcbiAgICAgIG91dHB1dFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF0gPSB7XG4gICAgICAgIG1heFdpZHRoOiAnbm9uZSdcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHplcm8gdmFsdWUgYnJlYWtwb2ludCBrZXlzIGJlZm9yZSBhIG5vbi16ZXJvIHZhbHVlIGJyZWFrcG9pbnQga2V5LlxuICogQGV4YW1wbGUgeyB4czogMCwgc206IDAsIG1kOiAyLCBsZzogMCwgeGw6IDAgfSBvciBbMCwgMCwgMiwgMCwgMF1cbiAqIEByZXR1cm5zIFt4cywgc21dXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RaZXJvVmFsdWVCcmVha3BvaW50S2V5cyh7XG4gIGJyZWFrcG9pbnRzLFxuICB2YWx1ZXNcbn0pIHtcbiAgbGV0IG5vblplcm9LZXkgPSAnJztcbiAgT2JqZWN0LmtleXModmFsdWVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKG5vblplcm9LZXkgIT09ICcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh2YWx1ZXNba2V5XSAhPT0gMCkge1xuICAgICAgbm9uWmVyb0tleSA9IGtleTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzb3J0ZWRCcmVha3BvaW50S2V5c0J5VmFsdWUgPSBPYmplY3Qua2V5cyhicmVha3BvaW50cykuc29ydCgoYSwgYikgPT4ge1xuICAgIHJldHVybiBicmVha3BvaW50c1thXSAtIGJyZWFrcG9pbnRzW2JdO1xuICB9KTtcbiAgcmV0dXJuIHNvcnRlZEJyZWFrcG9pbnRLZXlzQnlWYWx1ZS5zbGljZSgwLCBzb3J0ZWRCcmVha3BvaW50S2V5c0J5VmFsdWUuaW5kZXhPZihub25aZXJvS2V5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSb3dHYXAoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkge1xuICBjb25zdCB7XG4gICAgY29udGFpbmVyLFxuICAgIHJvd1NwYWNpbmdcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGxldCBzdHlsZXMgPSB7fTtcbiAgaWYgKGNvbnRhaW5lciAmJiByb3dTcGFjaW5nICE9PSAwKSB7XG4gICAgY29uc3Qgcm93U3BhY2luZ1ZhbHVlcyA9IHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICAgIHZhbHVlczogcm93U3BhY2luZyxcbiAgICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgICB9KTtcbiAgICBsZXQgemVyb1ZhbHVlQnJlYWtwb2ludEtleXM7XG4gICAgaWYgKHR5cGVvZiByb3dTcGFjaW5nVmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgemVyb1ZhbHVlQnJlYWtwb2ludEtleXMgPSBleHRyYWN0WmVyb1ZhbHVlQnJlYWtwb2ludEtleXMoe1xuICAgICAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzLFxuICAgICAgICB2YWx1ZXM6IHJvd1NwYWNpbmdWYWx1ZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzdHlsZXMgPSBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgICB0aGVtZVxuICAgIH0sIHJvd1NwYWNpbmdWYWx1ZXMsIChwcm9wVmFsdWUsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAgIHZhciBfemVyb1ZhbHVlQnJlYWtwb2ludEs7XG4gICAgICBjb25zdCB0aGVtZVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nKHByb3BWYWx1ZSk7XG4gICAgICBpZiAodGhlbWVTcGFjaW5nICE9PSAnMHB4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1hcmdpblRvcDogYC0ke2dldE9mZnNldCh0aGVtZVNwYWNpbmcpfWAsXG4gICAgICAgICAgW2AmID4gLiR7Z3JpZENsYXNzZXMuaXRlbX1gXToge1xuICAgICAgICAgICAgcGFkZGluZ1RvcDogZ2V0T2Zmc2V0KHRoZW1lU3BhY2luZylcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKF96ZXJvVmFsdWVCcmVha3BvaW50SyA9IHplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzKSAhPSBudWxsICYmIF96ZXJvVmFsdWVCcmVha3BvaW50Sy5pbmNsdWRlcyhicmVha3BvaW50KSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXJnaW5Ub3A6IDAsXG4gICAgICAgIFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF06IHtcbiAgICAgICAgICBwYWRkaW5nVG9wOiAwXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHN0eWxlcztcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNvbHVtbkdhcCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSB7XG4gIGNvbnN0IHtcbiAgICBjb250YWluZXIsXG4gICAgY29sdW1uU3BhY2luZ1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgbGV0IHN0eWxlcyA9IHt9O1xuICBpZiAoY29udGFpbmVyICYmIGNvbHVtblNwYWNpbmcgIT09IDApIHtcbiAgICBjb25zdCBjb2x1bW5TcGFjaW5nVmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgdmFsdWVzOiBjb2x1bW5TcGFjaW5nLFxuICAgICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1xuICAgIH0pO1xuICAgIGxldCB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cztcbiAgICBpZiAodHlwZW9mIGNvbHVtblNwYWNpbmdWYWx1ZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cyA9IGV4dHJhY3RaZXJvVmFsdWVCcmVha3BvaW50S2V5cyh7XG4gICAgICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXMsXG4gICAgICAgIHZhbHVlczogY29sdW1uU3BhY2luZ1ZhbHVlc1xuICAgICAgfSk7XG4gICAgfVxuICAgIHN0eWxlcyA9IGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICAgIHRoZW1lXG4gICAgfSwgY29sdW1uU3BhY2luZ1ZhbHVlcywgKHByb3BWYWx1ZSwgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgdmFyIF96ZXJvVmFsdWVCcmVha3BvaW50SzI7XG4gICAgICBjb25zdCB0aGVtZVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nKHByb3BWYWx1ZSk7XG4gICAgICBpZiAodGhlbWVTcGFjaW5nICE9PSAnMHB4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHdpZHRoOiBgY2FsYygxMDAlICsgJHtnZXRPZmZzZXQodGhlbWVTcGFjaW5nKX0pYCxcbiAgICAgICAgICBtYXJnaW5MZWZ0OiBgLSR7Z2V0T2Zmc2V0KHRoZW1lU3BhY2luZyl9YCxcbiAgICAgICAgICBbYCYgPiAuJHtncmlkQ2xhc3Nlcy5pdGVtfWBdOiB7XG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogZ2V0T2Zmc2V0KHRoZW1lU3BhY2luZylcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKF96ZXJvVmFsdWVCcmVha3BvaW50SzIgPSB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cykgIT0gbnVsbCAmJiBfemVyb1ZhbHVlQnJlYWtwb2ludEsyLmluY2x1ZGVzKGJyZWFrcG9pbnQpKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIG1hcmdpbkxlZnQ6IDAsXG4gICAgICAgIFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF06IHtcbiAgICAgICAgICBwYWRkaW5nTGVmdDogMFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBzdHlsZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNwYWNpbmdTdHlsZXMoc3BhY2luZywgYnJlYWtwb2ludHMsIHN0eWxlcyA9IHt9KSB7XG4gIC8vIHVuZGVmaW5lZC9udWxsIG9yIGBzcGFjaW5nYCA8PSAwXG4gIGlmICghc3BhY2luZyB8fCBzcGFjaW5nIDw9IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLy8gaW4gY2FzZSBvZiBzdHJpbmcvbnVtYmVyIGBzcGFjaW5nYFxuICBpZiAodHlwZW9mIHNwYWNpbmcgPT09ICdzdHJpbmcnICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyKHNwYWNpbmcpKSB8fCB0eXBlb2Ygc3BhY2luZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gW3N0eWxlc1tgc3BhY2luZy14cy0ke1N0cmluZyhzcGFjaW5nKX1gXV07XG4gIH1cbiAgLy8gaW4gY2FzZSBvZiBvYmplY3QgYHNwYWNpbmdgXG4gIGNvbnN0IHNwYWNpbmdTdHlsZXMgPSBbXTtcbiAgYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHNwYWNpbmdbYnJlYWtwb2ludF07XG4gICAgaWYgKE51bWJlcih2YWx1ZSkgPiAwKSB7XG4gICAgICBzcGFjaW5nU3R5bGVzLnB1c2goc3R5bGVzW2BzcGFjaW5nLSR7YnJlYWtwb2ludH0tJHtTdHJpbmcodmFsdWUpfWBdKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3BhY2luZ1N0eWxlcztcbn1cblxuLy8gRGVmYXVsdCBDU1MgdmFsdWVzXG4vLyBmbGV4OiAnMCAxIGF1dG8nLFxuLy8gZmxleERpcmVjdGlvbjogJ3JvdycsXG4vLyBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCcsXG4vLyBmbGV4V3JhcDogJ25vd3JhcCcsXG4vLyBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtc3RhcnQnLFxuY29uc3QgR3JpZFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUdyaWQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgY29udGFpbmVyLFxuICAgICAgZGlyZWN0aW9uLFxuICAgICAgaXRlbSxcbiAgICAgIHNwYWNpbmcsXG4gICAgICB3cmFwLFxuICAgICAgemVyb01pbldpZHRoLFxuICAgICAgYnJlYWtwb2ludHNcbiAgICB9ID0gb3duZXJTdGF0ZTtcbiAgICBsZXQgc3BhY2luZ1N0eWxlcyA9IFtdO1xuXG4gICAgLy8gaW4gY2FzZSBvZiBncmlkIGl0ZW1cbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBzcGFjaW5nU3R5bGVzID0gcmVzb2x2ZVNwYWNpbmdTdHlsZXMoc3BhY2luZywgYnJlYWtwb2ludHMsIHN0eWxlcyk7XG4gICAgfVxuICAgIGNvbnN0IGJyZWFrcG9pbnRzU3R5bGVzID0gW107XG4gICAgYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3duZXJTdGF0ZVticmVha3BvaW50XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBicmVha3BvaW50c1N0eWxlcy5wdXNoKHN0eWxlc1tgZ3JpZC0ke2JyZWFrcG9pbnR9LSR7U3RyaW5nKHZhbHVlKX1gXSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgY29udGFpbmVyICYmIHN0eWxlcy5jb250YWluZXIsIGl0ZW0gJiYgc3R5bGVzLml0ZW0sIHplcm9NaW5XaWR0aCAmJiBzdHlsZXMuemVyb01pbldpZHRoLCAuLi5zcGFjaW5nU3R5bGVzLCBkaXJlY3Rpb24gIT09ICdyb3cnICYmIHN0eWxlc1tgZGlyZWN0aW9uLXhzLSR7U3RyaW5nKGRpcmVjdGlvbil9YF0sIHdyYXAgIT09ICd3cmFwJyAmJiBzdHlsZXNbYHdyYXAteHMtJHtTdHJpbmcod3JhcCl9YF0sIC4uLmJyZWFrcG9pbnRzU3R5bGVzXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBib3hTaXppbmc6ICdib3JkZXItYm94J1xufSwgb3duZXJTdGF0ZS5jb250YWluZXIgJiYge1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhXcmFwOiAnd3JhcCcsXG4gIHdpZHRoOiAnMTAwJSdcbn0sIG93bmVyU3RhdGUuaXRlbSAmJiB7XG4gIG1hcmdpbjogMCAvLyBGb3IgaW5zdGFuY2UsIGl0J3MgdXNlZnVsIHdoZW4gdXNlZCB3aXRoIGEgYGZpZ3VyZWAgZWxlbWVudC5cbn0sIG93bmVyU3RhdGUuemVyb01pbldpZHRoICYmIHtcbiAgbWluV2lkdGg6IDBcbn0sIG93bmVyU3RhdGUud3JhcCAhPT0gJ3dyYXAnICYmIHtcbiAgZmxleFdyYXA6IG93bmVyU3RhdGUud3JhcFxufSksIGdlbmVyYXRlRGlyZWN0aW9uLCBnZW5lcmF0ZVJvd0dhcCwgZ2VuZXJhdGVDb2x1bW5HYXAsIGdlbmVyYXRlR3JpZCk7XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNwYWNpbmdDbGFzc2VzKHNwYWNpbmcsIGJyZWFrcG9pbnRzKSB7XG4gIC8vIHVuZGVmaW5lZC9udWxsIG9yIGBzcGFjaW5nYCA8PSAwXG4gIGlmICghc3BhY2luZyB8fCBzcGFjaW5nIDw9IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLy8gaW4gY2FzZSBvZiBzdHJpbmcvbnVtYmVyIGBzcGFjaW5nYFxuICBpZiAodHlwZW9mIHNwYWNpbmcgPT09ICdzdHJpbmcnICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyKHNwYWNpbmcpKSB8fCB0eXBlb2Ygc3BhY2luZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gW2BzcGFjaW5nLXhzLSR7U3RyaW5nKHNwYWNpbmcpfWBdO1xuICB9XG4gIC8vIGluIGNhc2Ugb2Ygb2JqZWN0IGBzcGFjaW5nYFxuICBjb25zdCBjbGFzc2VzID0gW107XG4gIGJyZWFrcG9pbnRzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBzcGFjaW5nW2JyZWFrcG9pbnRdO1xuICAgIGlmIChOdW1iZXIodmFsdWUpID4gMCkge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gYHNwYWNpbmctJHticmVha3BvaW50fS0ke1N0cmluZyh2YWx1ZSl9YDtcbiAgICAgIGNsYXNzZXMucHVzaChjbGFzc05hbWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjbGFzc2VzO1xufVxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29udGFpbmVyLFxuICAgIGRpcmVjdGlvbixcbiAgICBpdGVtLFxuICAgIHNwYWNpbmcsXG4gICAgd3JhcCxcbiAgICB6ZXJvTWluV2lkdGgsXG4gICAgYnJlYWtwb2ludHNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGxldCBzcGFjaW5nQ2xhc3NlcyA9IFtdO1xuXG4gIC8vIGluIGNhc2Ugb2YgZ3JpZCBpdGVtXG4gIGlmIChjb250YWluZXIpIHtcbiAgICBzcGFjaW5nQ2xhc3NlcyA9IHJlc29sdmVTcGFjaW5nQ2xhc3NlcyhzcGFjaW5nLCBicmVha3BvaW50cyk7XG4gIH1cbiAgY29uc3QgYnJlYWtwb2ludHNDbGFzc2VzID0gW107XG4gIGJyZWFrcG9pbnRzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBvd25lclN0YXRlW2JyZWFrcG9pbnRdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgYnJlYWtwb2ludHNDbGFzc2VzLnB1c2goYGdyaWQtJHticmVha3BvaW50fS0ke1N0cmluZyh2YWx1ZSl9YCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgY29udGFpbmVyICYmICdjb250YWluZXInLCBpdGVtICYmICdpdGVtJywgemVyb01pbldpZHRoICYmICd6ZXJvTWluV2lkdGgnLCAuLi5zcGFjaW5nQ2xhc3NlcywgZGlyZWN0aW9uICE9PSAncm93JyAmJiBgZGlyZWN0aW9uLXhzLSR7U3RyaW5nKGRpcmVjdGlvbil9YCwgd3JhcCAhPT0gJ3dyYXAnICYmIGB3cmFwLXhzLSR7U3RyaW5nKHdyYXApfWAsIC4uLmJyZWFrcG9pbnRzQ2xhc3Nlc11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRHcmlkVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBHcmlkID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gR3JpZChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWVQcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUdyaWQnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgYnJlYWtwb2ludHNcbiAgfSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IHByb3BzID0gZXh0ZW5kU3hQcm9wKHRoZW1lUHJvcHMpO1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2x1bW5zOiBjb2x1bW5zUHJvcCxcbiAgICAgIGNvbHVtblNwYWNpbmc6IGNvbHVtblNwYWNpbmdQcm9wLFxuICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICBjb250YWluZXIgPSBmYWxzZSxcbiAgICAgIGRpcmVjdGlvbiA9ICdyb3cnLFxuICAgICAgaXRlbSA9IGZhbHNlLFxuICAgICAgcm93U3BhY2luZzogcm93U3BhY2luZ1Byb3AsXG4gICAgICBzcGFjaW5nID0gMCxcbiAgICAgIHdyYXAgPSAnd3JhcCcsXG4gICAgICB6ZXJvTWluV2lkdGggPSBmYWxzZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCByb3dTcGFjaW5nID0gcm93U3BhY2luZ1Byb3AgfHwgc3BhY2luZztcbiAgY29uc3QgY29sdW1uU3BhY2luZyA9IGNvbHVtblNwYWNpbmdQcm9wIHx8IHNwYWNpbmc7XG4gIGNvbnN0IGNvbHVtbnNDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChHcmlkQ29udGV4dCk7XG5cbiAgLy8gY29sdW1ucyBzZXQgd2l0aCBkZWZhdWx0IGJyZWFrcG9pbnQgdW5pdCBvZiAxMlxuICBjb25zdCBjb2x1bW5zID0gY29udGFpbmVyID8gY29sdW1uc1Byb3AgfHwgMTIgOiBjb2x1bW5zQ29udGV4dDtcbiAgY29uc3QgYnJlYWtwb2ludHNWYWx1ZXMgPSB7fTtcbiAgY29uc3Qgb3RoZXJGaWx0ZXJlZCA9IF9leHRlbmRzKHt9LCBvdGhlcik7XG4gIGJyZWFrcG9pbnRzLmtleXMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICBpZiAob3RoZXJbYnJlYWtwb2ludF0gIT0gbnVsbCkge1xuICAgICAgYnJlYWtwb2ludHNWYWx1ZXNbYnJlYWtwb2ludF0gPSBvdGhlclticmVha3BvaW50XTtcbiAgICAgIGRlbGV0ZSBvdGhlckZpbHRlcmVkW2JyZWFrcG9pbnRdO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2x1bW5zLFxuICAgIGNvbnRhaW5lcixcbiAgICBkaXJlY3Rpb24sXG4gICAgaXRlbSxcbiAgICByb3dTcGFjaW5nLFxuICAgIGNvbHVtblNwYWNpbmcsXG4gICAgd3JhcCxcbiAgICB6ZXJvTWluV2lkdGgsXG4gICAgc3BhY2luZ1xuICB9LCBicmVha3BvaW50c1ZhbHVlcywge1xuICAgIGJyZWFrcG9pbnRzOiBicmVha3BvaW50cy5rZXlzXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChHcmlkQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb2x1bW5zLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChHcmlkUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBvdGhlckZpbHRlcmVkKSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEdyaWQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMuXG4gICAqIEBkZWZhdWx0IDEyXG4gICAqL1xuICBjb2x1bW5zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubnVtYmVyKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgaG9yaXpvbnRhbCBzcGFjZSBiZXR3ZWVuIHRoZSB0eXBlIGBpdGVtYCBjb21wb25lbnRzLlxuICAgKiBJdCBvdmVycmlkZXMgdGhlIHZhbHVlIG9mIHRoZSBgc3BhY2luZ2AgcHJvcC5cbiAgICovXG4gIGNvbHVtblNwYWNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgaGF2ZSB0aGUgZmxleCAqY29udGFpbmVyKiBiZWhhdmlvci5cbiAgICogWW91IHNob3VsZCBiZSB3cmFwcGluZyAqaXRlbXMqIHdpdGggYSAqY29udGFpbmVyKi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBgZmxleC1kaXJlY3Rpb25gIHN0eWxlIHByb3BlcnR5LlxuICAgKiBJdCBpcyBhcHBsaWVkIGZvciBhbGwgc2NyZWVuIHNpemVzLlxuICAgKiBAZGVmYXVsdCAncm93J1xuICAgKi9cbiAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2YoWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J10pKSwgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgaGF2ZSB0aGUgZmxleCAqaXRlbSogYmVoYXZpb3IuXG4gICAqIFlvdSBzaG91bGQgYmUgd3JhcHBpbmcgKml0ZW1zKiB3aXRoIGEgKmNvbnRhaW5lciouXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpdGVtOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGEgbnVtYmVyLCBpdCBzZXRzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgZ3JpZCBpdGVtIHVzZXMuXG4gICAqIEl0IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIGNvbnRhaW5lciAoMTIgYnkgZGVmYXVsdCkuXG4gICAqIElmICdhdXRvJywgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIG1hdGNoZXMgaXRzIGNvbnRlbnQuXG4gICAqIElmIGZhbHNlLCB0aGUgcHJvcCBpcyBpZ25vcmVkLlxuICAgKiBJZiB0cnVlLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggZ3Jvd3MgdG8gdXNlIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGdyaWQgY29udGFpbmVyLlxuICAgKiBUaGUgdmFsdWUgaXMgYXBwbGllZCBmb3IgdGhlIGBsZ2AgYnJlYWtwb2ludCBhbmQgd2lkZXIgc2NyZWVucyBpZiBub3Qgb3ZlcnJpZGRlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGxnOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuYm9vbF0pLFxuICAvKipcbiAgICogSWYgYSBudW1iZXIsIGl0IHNldHMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSBncmlkIGl0ZW0gdXNlcy5cbiAgICogSXQgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgY29udGFpbmVyICgxMiBieSBkZWZhdWx0KS5cbiAgICogSWYgJ2F1dG8nLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggbWF0Y2hlcyBpdHMgY29udGVudC5cbiAgICogSWYgZmFsc2UsIHRoZSBwcm9wIGlzIGlnbm9yZWQuXG4gICAqIElmIHRydWUsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBncm93cyB0byB1c2UgdGhlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgZ3JpZCBjb250YWluZXIuXG4gICAqIFRoZSB2YWx1ZSBpcyBhcHBsaWVkIGZvciB0aGUgYG1kYCBicmVha3BvaW50IGFuZCB3aWRlciBzY3JlZW5zIGlmIG5vdCBvdmVycmlkZGVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5ib29sXSksXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSB2ZXJ0aWNhbCBzcGFjZSBiZXR3ZWVuIHRoZSB0eXBlIGBpdGVtYCBjb21wb25lbnRzLlxuICAgKiBJdCBvdmVycmlkZXMgdGhlIHZhbHVlIG9mIHRoZSBgc3BhY2luZ2AgcHJvcC5cbiAgICovXG4gIHJvd1NwYWNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGEgbnVtYmVyLCBpdCBzZXRzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgZ3JpZCBpdGVtIHVzZXMuXG4gICAqIEl0IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIGNvbnRhaW5lciAoMTIgYnkgZGVmYXVsdCkuXG4gICAqIElmICdhdXRvJywgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIG1hdGNoZXMgaXRzIGNvbnRlbnQuXG4gICAqIElmIGZhbHNlLCB0aGUgcHJvcCBpcyBpZ25vcmVkLlxuICAgKiBJZiB0cnVlLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggZ3Jvd3MgdG8gdXNlIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGdyaWQgY29udGFpbmVyLlxuICAgKiBUaGUgdmFsdWUgaXMgYXBwbGllZCBmb3IgdGhlIGBzbWAgYnJlYWtwb2ludCBhbmQgd2lkZXIgc2NyZWVucyBpZiBub3Qgb3ZlcnJpZGRlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNtOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuYm9vbF0pLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgdHlwZSBgaXRlbWAgY29tcG9uZW50cy5cbiAgICogSXQgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHR5cGUgYGNvbnRhaW5lcmAgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBzcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBgZmxleC13cmFwYCBzdHlsZSBwcm9wZXJ0eS5cbiAgICogSXQncyBhcHBsaWVkIGZvciBhbGwgc2NyZWVuIHNpemVzLlxuICAgKiBAZGVmYXVsdCAnd3JhcCdcbiAgICovXG4gIHdyYXA6IFByb3BUeXBlcy5vbmVPZihbJ25vd3JhcCcsICd3cmFwLXJldmVyc2UnLCAnd3JhcCddKSxcbiAgLyoqXG4gICAqIElmIGEgbnVtYmVyLCBpdCBzZXRzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgZ3JpZCBpdGVtIHVzZXMuXG4gICAqIEl0IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIGNvbnRhaW5lciAoMTIgYnkgZGVmYXVsdCkuXG4gICAqIElmICdhdXRvJywgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIG1hdGNoZXMgaXRzIGNvbnRlbnQuXG4gICAqIElmIGZhbHNlLCB0aGUgcHJvcCBpcyBpZ25vcmVkLlxuICAgKiBJZiB0cnVlLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggZ3Jvd3MgdG8gdXNlIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGdyaWQgY29udGFpbmVyLlxuICAgKiBUaGUgdmFsdWUgaXMgYXBwbGllZCBmb3IgdGhlIGB4bGAgYnJlYWtwb2ludCBhbmQgd2lkZXIgc2NyZWVucyBpZiBub3Qgb3ZlcnJpZGRlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHhsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuYm9vbF0pLFxuICAvKipcbiAgICogSWYgYSBudW1iZXIsIGl0IHNldHMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSBncmlkIGl0ZW0gdXNlcy5cbiAgICogSXQgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgY29udGFpbmVyICgxMiBieSBkZWZhdWx0KS5cbiAgICogSWYgJ2F1dG8nLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggbWF0Y2hlcyBpdHMgY29udGVudC5cbiAgICogSWYgZmFsc2UsIHRoZSBwcm9wIGlzIGlnbm9yZWQuXG4gICAqIElmIHRydWUsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBncm93cyB0byB1c2UgdGhlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgZ3JpZCBjb250YWluZXIuXG4gICAqIFRoZSB2YWx1ZSBpcyBhcHBsaWVkIGZvciBhbGwgdGhlIHNjcmVlbiBzaXplcyB3aXRoIHRoZSBsb3dlc3QgcHJpb3JpdHkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB4czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaXQgc2V0cyBgbWluLXdpZHRoOiAwYCBvbiB0aGUgaXRlbS5cbiAgICogUmVmZXIgdG8gdGhlIGxpbWl0YXRpb25zIHNlY3Rpb24gb2YgdGhlIGRvY3VtZW50YXRpb24gdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHVzZSBjYXNlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgemVyb01pbldpZHRoOiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGNvbnN0IHJlcXVpcmVQcm9wID0gcmVxdWlyZVByb3BGYWN0b3J5KCdHcmlkJywgR3JpZCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbmNhdFxuICBHcmlkWydwcm9wVHlwZXMnICsgJyddID0gX2V4dGVuZHMoe30sIEdyaWQucHJvcFR5cGVzLCB7XG4gICAgZGlyZWN0aW9uOiByZXF1aXJlUHJvcCgnY29udGFpbmVyJyksXG4gICAgbGc6IHJlcXVpcmVQcm9wKCdpdGVtJyksXG4gICAgbWQ6IHJlcXVpcmVQcm9wKCdpdGVtJyksXG4gICAgc206IHJlcXVpcmVQcm9wKCdpdGVtJyksXG4gICAgc3BhY2luZzogcmVxdWlyZVByb3AoJ2NvbnRhaW5lcicpLFxuICAgIHdyYXA6IHJlcXVpcmVQcm9wKCdjb250YWluZXInKSxcbiAgICB4czogcmVxdWlyZVByb3AoJ2l0ZW0nKSxcbiAgICB6ZXJvTWluV2lkdGg6IHJlcXVpcmVQcm9wKCdpdGVtJylcbiAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBHcmlkOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFkZEVuZExpc3RlbmVyXCIsIFwiYXBwZWFyXCIsIFwiY2hpbGRyZW5cIiwgXCJlYXNpbmdcIiwgXCJpblwiLCBcIm9uRW50ZXJcIiwgXCJvbkVudGVyZWRcIiwgXCJvbkVudGVyaW5nXCIsIFwib25FeGl0XCIsIFwib25FeGl0ZWRcIiwgXCJvbkV4aXRpbmdcIiwgXCJzdHlsZVwiLCBcInRpbWVvdXRcIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB1c2VUaW1lb3V0IGZyb20gJ0BtdWkvdXRpbHMvdXNlVGltZW91dCc7XG5pbXBvcnQgZWxlbWVudEFjY2VwdGluZ1JlZiBmcm9tICdAbXVpL3V0aWxzL2VsZW1lbnRBY2NlcHRpbmdSZWYnO1xuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgeyBnZXRUcmFuc2l0aW9uUHJvcHMsIHJlZmxvdyB9IGZyb20gJy4uL3RyYW5zaXRpb25zL3V0aWxzJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIGdldFNjYWxlKHZhbHVlKSB7XG4gIHJldHVybiBgc2NhbGUoJHt2YWx1ZX0sICR7dmFsdWUgKiogMn0pYDtcbn1cbmNvbnN0IHN0eWxlcyA9IHtcbiAgZW50ZXJpbmc6IHtcbiAgICBvcGFjaXR5OiAxLFxuICAgIHRyYW5zZm9ybTogZ2V0U2NhbGUoMSlcbiAgfSxcbiAgZW50ZXJlZDoge1xuICAgIG9wYWNpdHk6IDEsXG4gICAgdHJhbnNmb3JtOiAnbm9uZSdcbiAgfVxufTtcblxuLypcbiBUT0RPIHY2OiByZW1vdmVcbiBDb25kaXRpb25hbGx5IGFwcGx5IGEgd29ya2Fyb3VuZCBmb3IgdGhlIENTUyB0cmFuc2l0aW9uIGJ1ZyBpbiBTYWZhcmkgMTUuNCAvIFdlYktpdCBicm93c2Vycy5cbiAqL1xuY29uc3QgaXNXZWJLaXQxNTQgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSooc2FmYXJpfG1vYmlsZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmIC8ob3MgfHZlcnNpb25cXC8pMTUoLnxfKTQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4vKipcbiAqIFRoZSBHcm93IHRyYW5zaXRpb24gaXMgdXNlZCBieSB0aGUgW1Rvb2x0aXBdKC9tYXRlcmlhbC11aS9yZWFjdC10b29sdGlwLykgYW5kXG4gKiBbUG9wb3Zlcl0oL21hdGVyaWFsLXVpL3JlYWN0LXBvcG92ZXIvKSBjb21wb25lbnRzLlxuICogSXQgdXNlcyBbcmVhY3QtdHJhbnNpdGlvbi1ncm91cF0oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cCkgaW50ZXJuYWxseS5cbiAqL1xuY29uc3QgR3JvdyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEdyb3cocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgICBhZGRFbmRMaXN0ZW5lcixcbiAgICAgIGFwcGVhciA9IHRydWUsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGVhc2luZyxcbiAgICAgIGluOiBpblByb3AsXG4gICAgICBvbkVudGVyLFxuICAgICAgb25FbnRlcmVkLFxuICAgICAgb25FbnRlcmluZyxcbiAgICAgIG9uRXhpdCxcbiAgICAgIG9uRXhpdGVkLFxuICAgICAgb25FeGl0aW5nLFxuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0ID0gJ2F1dG8nLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICAgIFRyYW5zaXRpb25Db21wb25lbnQgPSBUcmFuc2l0aW9uXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHRpbWVyID0gdXNlVGltZW91dCgpO1xuICBjb25zdCBhdXRvVGltZW91dCA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IG5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobm9kZVJlZiwgY2hpbGRyZW4ucmVmLCByZWYpO1xuICBjb25zdCBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrID0gY2FsbGJhY2sgPT4gbWF5YmVJc0FwcGVhcmluZyA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZVJlZi5jdXJyZW50O1xuXG4gICAgICAvLyBvbkVudGVyWHh4IGFuZCBvbkV4aXRYeHggY2FsbGJhY2tzIGhhdmUgYSBkaWZmZXJlbnQgYXJndW1lbnRzLmxlbmd0aCB2YWx1ZS5cbiAgICAgIGlmIChtYXliZUlzQXBwZWFyaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhub2RlLCBtYXliZUlzQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUVudGVyaW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkVudGVyaW5nKTtcbiAgY29uc3QgaGFuZGxlRW50ZXIgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKChub2RlLCBpc0FwcGVhcmluZykgPT4ge1xuICAgIHJlZmxvdyhub2RlKTsgLy8gU28gdGhlIGFuaW1hdGlvbiBhbHdheXMgc3RhcnQgZnJvbSB0aGUgc3RhcnQuXG5cbiAgICBjb25zdCB7XG4gICAgICBkdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgZGVsYXksXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0gPSBnZXRUcmFuc2l0aW9uUHJvcHMoe1xuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZWFzaW5nXG4gICAgfSwge1xuICAgICAgbW9kZTogJ2VudGVyJ1xuICAgIH0pO1xuICAgIGxldCBkdXJhdGlvbjtcbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICBkdXJhdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmdldEF1dG9IZWlnaHREdXJhdGlvbihub2RlLmNsaWVudEhlaWdodCk7XG4gICAgICBhdXRvVGltZW91dC5jdXJyZW50ID0gZHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uO1xuICAgIH1cbiAgICBub2RlLnN0eWxlLnRyYW5zaXRpb24gPSBbdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5Jywge1xuICAgICAgZHVyYXRpb24sXG4gICAgICBkZWxheVxuICAgIH0pLCB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgIGR1cmF0aW9uOiBpc1dlYktpdDE1NCA/IGR1cmF0aW9uIDogZHVyYXRpb24gKiAwLjY2NixcbiAgICAgIGRlbGF5LFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9KV0uam9pbignLCcpO1xuICAgIGlmIChvbkVudGVyKSB7XG4gICAgICBvbkVudGVyKG5vZGUsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFbnRlcmVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkVudGVyZWQpO1xuICBjb25zdCBoYW5kbGVFeGl0aW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRpbmcpO1xuICBjb25zdCBoYW5kbGVFeGl0ID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhub2RlID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgZGVsYXksXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0gPSBnZXRUcmFuc2l0aW9uUHJvcHMoe1xuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZWFzaW5nXG4gICAgfSwge1xuICAgICAgbW9kZTogJ2V4aXQnXG4gICAgfSk7XG4gICAgbGV0IGR1cmF0aW9uO1xuICAgIGlmICh0aW1lb3V0ID09PSAnYXV0bycpIHtcbiAgICAgIGR1cmF0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuZ2V0QXV0b0hlaWdodER1cmF0aW9uKG5vZGUuY2xpZW50SGVpZ2h0KTtcbiAgICAgIGF1dG9UaW1lb3V0LmN1cnJlbnQgPSBkdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb247XG4gICAgfVxuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IFt0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGRlbGF5XG4gICAgfSksIHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgZHVyYXRpb246IGlzV2ViS2l0MTU0ID8gZHVyYXRpb24gOiBkdXJhdGlvbiAqIDAuNjY2LFxuICAgICAgZGVsYXk6IGlzV2ViS2l0MTU0ID8gZGVsYXkgOiBkZWxheSB8fCBkdXJhdGlvbiAqIDAuMzMzLFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9KV0uam9pbignLCcpO1xuICAgIG5vZGUuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgbm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBnZXRTY2FsZSgwLjc1KTtcbiAgICBpZiAob25FeGl0KSB7XG4gICAgICBvbkV4aXQobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRlZCk7XG4gIGNvbnN0IGhhbmRsZUFkZEVuZExpc3RlbmVyID0gbmV4dCA9PiB7XG4gICAgaWYgKHRpbWVvdXQgPT09ICdhdXRvJykge1xuICAgICAgdGltZXIuc3RhcnQoYXV0b1RpbWVvdXQuY3VycmVudCB8fCAwLCBuZXh0KTtcbiAgICB9XG4gICAgaWYgKGFkZEVuZExpc3RlbmVyKSB7XG4gICAgICAvLyBPbGQgY2FsbCBzaWduYXR1cmUgYmVmb3JlIGByZWFjdC10cmFuc2l0aW9uLWdyb3VwYCBpbXBsZW1lbnRlZCBgbm9kZVJlZmBcbiAgICAgIGFkZEVuZExpc3RlbmVyKG5vZGVSZWYuY3VycmVudCwgbmV4dCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGFwcGVhcjogYXBwZWFyLFxuICAgIGluOiBpblByb3AsXG4gICAgbm9kZVJlZjogbm9kZVJlZixcbiAgICBvbkVudGVyOiBoYW5kbGVFbnRlcixcbiAgICBvbkVudGVyZWQ6IGhhbmRsZUVudGVyZWQsXG4gICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmcsXG4gICAgb25FeGl0OiBoYW5kbGVFeGl0LFxuICAgIG9uRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgb25FeGl0aW5nOiBoYW5kbGVFeGl0aW5nLFxuICAgIGFkZEVuZExpc3RlbmVyOiBoYW5kbGVBZGRFbmRMaXN0ZW5lcixcbiAgICB0aW1lb3V0OiB0aW1lb3V0ID09PSAnYXV0bycgPyBudWxsIDogdGltZW91dFxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAoc3RhdGUsIGNoaWxkUHJvcHMpID0+IHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB0cmFuc2Zvcm06IGdldFNjYWxlKDAuNzUpLFxuICAgICAgICAgIHZpc2liaWxpdHk6IHN0YXRlID09PSAnZXhpdGVkJyAmJiAhaW5Qcm9wID8gJ2hpZGRlbicgOiB1bmRlZmluZWRcbiAgICAgICAgfSwgc3R5bGVzW3N0YXRlXSwgc3R5bGUsIGNoaWxkcmVuLnByb3BzLnN0eWxlKSxcbiAgICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICAgIH0sIGNoaWxkUHJvcHMpKTtcbiAgICB9XG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR3Jvdy5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmcgRE9NXG4gICAqIG5vZGUgYW5kIGEgZG9uZSBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gTm90ZTogVGltZW91dHMgYXJlIHN0aWxsIHVzZWQgYXMgYSBmYWxsYmFjayBpZiBwcm92aWRlZC5cbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFBlcmZvcm0gdGhlIGVudGVyIHRyYW5zaXRpb24gd2hlbiBpdCBmaXJzdCBtb3VudHMgaWYgYGluYCBpcyBhbHNvIGB0cnVlYC5cbiAgICogU2V0IHRoaXMgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3IuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVGhlIHRyYW5zaXRpb24gdGltaW5nIGZ1bmN0aW9uLlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgZWFzaW5nIG9yIGEgb2JqZWN0IGNvbnRhaW5pbmcgZW50ZXIgYW5kIGV4aXQgdmFsdWVzLlxuICAgKi9cbiAgZWFzaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGVudGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIHRyYW5zaXRpb24gaW4uXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gZm9yIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnMsIG9yIGluZGl2aWR1YWxseSB3aXRoIGFuIG9iamVjdC5cbiAgICpcbiAgICogU2V0IHRvICdhdXRvJyB0byBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZSB0cmFuc2l0aW9uIHRpbWUgYmFzZWQgb24gaGVpZ2h0LlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKVxufSA6IHZvaWQgMDtcbkdyb3cubXVpU3VwcG9ydEF1dG8gPSB0cnVlO1xuZXhwb3J0IGRlZmF1bHQgR3JvdzsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5pbXBvcnQgeyBpbnB1dEJhc2VDbGFzc2VzIH0gZnJvbSAnLi4vSW5wdXRCYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpSW5wdXQnLCBzbG90KTtcbn1cbmNvbnN0IGlucHV0Q2xhc3NlcyA9IF9leHRlbmRzKHt9LCBpbnB1dEJhc2VDbGFzc2VzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlJbnB1dCcsIFsncm9vdCcsICd1bmRlcmxpbmUnLCAnaW5wdXQnXSkpO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImRpc2FibGVVbmRlcmxpbmVcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaW5wdXRDb21wb25lbnRcIiwgXCJtdWx0aWxpbmVcIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IElucHV0QmFzZSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBpbnB1dENsYXNzZXMsIHsgZ2V0SW5wdXRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2lucHV0Q2xhc3Nlcyc7XG5pbXBvcnQgeyByb290T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyLCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIsIElucHV0QmFzZVJvb3QsIElucHV0QmFzZUNvbXBvbmVudCBhcyBJbnB1dEJhc2VJbnB1dCB9IGZyb20gJy4uL0lucHV0QmFzZS9JbnB1dEJhc2UnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVVbmRlcmxpbmVcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFkaXNhYmxlVW5kZXJsaW5lICYmICd1bmRlcmxpbmUnXSxcbiAgICBpbnB1dDogWydpbnB1dCddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRJbnB1dFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBJbnB1dFJvb3QgPSBzdHlsZWQoSW5wdXRCYXNlUm9vdCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpSW5wdXQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFsuLi5pbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIocHJvcHMsIHN0eWxlcyksICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYgc3R5bGVzLnVuZGVybGluZV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIGNvbnN0IGxpZ2h0ID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnO1xuICBsZXQgYm90dG9tTGluZUNvbG9yID0gbGlnaHQgPyAncmdiYSgwLCAwLCAwLCAwLjQyKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJztcbiAgaWYgKHRoZW1lLnZhcnMpIHtcbiAgICBib3R0b21MaW5lQ29sb3IgPSBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMub3BhY2l0eS5pbnB1dFVuZGVybGluZX0pYDtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gIH0sIG93bmVyU3RhdGUuZm9ybUNvbnRyb2wgJiYge1xuICAgICdsYWJlbCArICYnOiB7XG4gICAgICBtYXJnaW5Ub3A6IDE2XG4gICAgfVxuICB9LCAhb3duZXJTdGF0ZS5kaXNhYmxlVW5kZXJsaW5lICYmIHtcbiAgICAnJjo6YWZ0ZXInOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAycHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWlufWAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgLy8gRG9pbmcgdGhlIG90aGVyIHdheSBhcm91bmQgY3Jhc2ggb24gSUUxMSBcIicnXCIgaHR0cHM6Ly9naXRodWIuY29tL2Nzc2luanMvanNzL2lzc3Vlcy8yNDJcbiAgICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMCknLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLFxuICAgICAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gICAgICB9KSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyAvLyBUcmFuc3BhcmVudCB0byB0aGUgaG92ZXIgc3R5bGUuXG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dENsYXNzZXMuZm9jdXNlZH06YWZ0ZXJgXToge1xuICAgICAgLy8gdHJhbnNsYXRlWCgwKSBpcyBhIHdvcmthcm91bmQgZm9yIFNhZmFyaSB0cmFuc2Zvcm0gc2NhbGUgYnVnXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMzE3NjZcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgxKSB0cmFuc2xhdGVYKDApJ1xuICAgIH0sXG4gICAgW2AmLiR7aW5wdXRDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgICAnJjo6YmVmb3JlLCAmOjphZnRlcic6IHtcbiAgICAgICAgYm9yZGVyQm90dG9tQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgICAgIH1cbiAgICB9LFxuICAgICcmOjpiZWZvcmUnOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHtib3R0b21MaW5lQ29sb3J9YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXFxcXDAwYTBcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3JkZXItYm90dG9tLWNvbG9yJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG4gICAgW2AmOmhvdmVyOm5vdCguJHtpbnB1dENsYXNzZXMuZGlzYWJsZWR9LCAuJHtpbnB1dENsYXNzZXMuZXJyb3J9KTpiZWZvcmVgXToge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMnB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5fWAsXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHtib3R0b21MaW5lQ29sb3J9YFxuICAgICAgfVxuICAgIH0sXG4gICAgW2AmLiR7aW5wdXRDbGFzc2VzLmRpc2FibGVkfTpiZWZvcmVgXToge1xuICAgICAgYm9yZGVyQm90dG9tU3R5bGU6ICdkb3R0ZWQnXG4gICAgfVxuICB9KTtcbn0pO1xuY29uc3QgSW5wdXRJbnB1dCA9IHN0eWxlZChJbnB1dEJhc2VJbnB1dCwge1xuICBuYW1lOiAnTXVpSW5wdXQnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoe30pO1xuY29uc3QgSW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBJbnB1dChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRyb290LCBfcmVmMiwgX3Nsb3RzJGlucHV0O1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUlucHV0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgZGlzYWJsZVVuZGVybGluZSxcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wczogY29tcG9uZW50c1Byb3BzUHJvcCxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBzbG90UHJvcHMsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgdHlwZSA9ICd0ZXh0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBvd25lclN0YXRlID0ge1xuICAgIGRpc2FibGVVbmRlcmxpbmVcbiAgfTtcbiAgY29uc3QgaW5wdXRDb21wb25lbnRzUHJvcHMgPSB7XG4gICAgcm9vdDoge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH1cbiAgfTtcbiAgY29uc3QgY29tcG9uZW50c1Byb3BzID0gKHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCkgPyBkZWVwbWVyZ2Uoc2xvdFByb3BzICE9IG51bGwgPyBzbG90UHJvcHMgOiBjb21wb25lbnRzUHJvcHNQcm9wLCBpbnB1dENvbXBvbmVudHNQcm9wcykgOiBpbnB1dENvbXBvbmVudHNQcm9wcztcbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBJbnB1dFJvb3Q7XG4gIGNvbnN0IElucHV0U2xvdCA9IChfcmVmMiA9IChfc2xvdHMkaW5wdXQgPSBzbG90cy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90cyRpbnB1dCA6IGNvbXBvbmVudHMuSW5wdXQpICE9IG51bGwgPyBfcmVmMiA6IElucHV0SW5wdXQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICBzbG90czoge1xuICAgICAgcm9vdDogUm9vdFNsb3QsXG4gICAgICBpbnB1dDogSW5wdXRTbG90XG4gICAgfSxcbiAgICBzbG90UHJvcHM6IGNvbXBvbmVudHNQcm9wcyxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudDogaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90UHJvcHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdFByb3BzYCBwcm9wIGluc3RlYWQsIGFzIGBjb21wb25lbnRzUHJvcHNgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBub3QgaGF2ZSBhbiB1bmRlcmxpbmUuXG4gICAqL1xuICBkaXNhYmxlVW5kZXJsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEVuZCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIGVuZEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbnB1dCdcbiAgICovXG4gIGlucHV0Q29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNQcm9wc2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogU3RhcnQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBzdGFydEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuSW5wdXQubXVpTmFtZSA9ICdJbnB1dCc7XG5leHBvcnQgZGVmYXVsdCBJbnB1dDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJhdXRvQ29tcGxldGVcIiwgXCJhdXRvRm9jdXNcIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJkaXNhYmxlZFwiLCBcImRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXNcIiwgXCJlbmRBZG9ybm1lbnRcIiwgXCJlcnJvclwiLCBcImZ1bGxXaWR0aFwiLCBcImlkXCIsIFwiaW5wdXRDb21wb25lbnRcIiwgXCJpbnB1dFByb3BzXCIsIFwiaW5wdXRSZWZcIiwgXCJtYXJnaW5cIiwgXCJtYXhSb3dzXCIsIFwibWluUm93c1wiLCBcIm11bHRpbGluZVwiLCBcIm5hbWVcIiwgXCJvbkJsdXJcIiwgXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tcIiwgXCJvbkZvY3VzXCIsIFwib25LZXlEb3duXCIsIFwib25LZXlVcFwiLCBcInBsYWNlaG9sZGVyXCIsIFwicmVhZE9ubHlcIiwgXCJyZW5kZXJTdWZmaXhcIiwgXCJyb3dzXCIsIFwic2l6ZVwiLCBcInNsb3RQcm9wc1wiLCBcInNsb3RzXCIsIFwic3RhcnRBZG9ybm1lbnRcIiwgXCJ0eXBlXCIsIFwidmFsdWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYgZnJvbSAnQG11aS91dGlscy9lbGVtZW50VHlwZUFjY2VwdGluZ1JlZic7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGlzSG9zdENvbXBvbmVudCBmcm9tICdAbXVpL3V0aWxzL2lzSG9zdENvbXBvbmVudCc7XG5pbXBvcnQgVGV4dGFyZWFBdXRvc2l6ZSBmcm9tICcuLi9UZXh0YXJlYUF1dG9zaXplJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuLi9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbENvbnRleHQnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmltcG9ydCBHbG9iYWxTdHlsZXMgZnJvbSAnLi4vR2xvYmFsU3R5bGVzJztcbmltcG9ydCB7IGlzRmlsbGVkIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgaW5wdXRCYXNlQ2xhc3NlcywgeyBnZXRJbnB1dEJhc2VVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2lucHV0QmFzZUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBjb25zdCByb290T3ZlcnJpZGVzUmVzb2x2ZXIgPSAocHJvcHMsIHN0eWxlcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3duZXJTdGF0ZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuZm9ybUNvbnRyb2wgJiYgc3R5bGVzLmZvcm1Db250cm9sLCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHN0eWxlcy5hZG9ybmVkU3RhcnQsIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHN0eWxlcy5hZG9ybmVkRW5kLCBvd25lclN0YXRlLmVycm9yICYmIHN0eWxlcy5lcnJvciwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHN0eWxlcy5zaXplU21hbGwsIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHN0eWxlcy5tdWx0aWxpbmUsIG93bmVyU3RhdGUuY29sb3IgJiYgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYgc3R5bGVzLmZ1bGxXaWR0aCwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiBzdHlsZXMuaGlkZGVuTGFiZWxdO1xufTtcbmV4cG9ydCBjb25zdCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyID0gKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgY29uc3Qge1xuICAgIG93bmVyU3RhdGVcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3N0eWxlcy5pbnB1dCwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHN0eWxlcy5pbnB1dFNpemVTbWFsbCwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgc3R5bGVzLmlucHV0TXVsdGlsaW5lLCBvd25lclN0YXRlLnR5cGUgPT09ICdzZWFyY2gnICYmIHN0eWxlcy5pbnB1dFR5cGVTZWFyY2gsIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYgc3R5bGVzLmlucHV0QWRvcm5lZFN0YXJ0LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiBzdHlsZXMuaW5wdXRBZG9ybmVkRW5kLCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHN0eWxlcy5pbnB1dEhpZGRlbkxhYmVsXTtcbn07XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBlbmRBZG9ybm1lbnQsXG4gICAgZm9jdXNlZCxcbiAgICBmb3JtQ29udHJvbCxcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWwsXG4gICAgbXVsdGlsaW5lLFxuICAgIHJlYWRPbmx5LFxuICAgIHNpemUsXG4gICAgc3RhcnRBZG9ybm1lbnQsXG4gICAgdHlwZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBmdWxsV2lkdGggJiYgJ2Z1bGxXaWR0aCcsIGZvY3VzZWQgJiYgJ2ZvY3VzZWQnLCBmb3JtQ29udHJvbCAmJiAnZm9ybUNvbnRyb2wnLCBzaXplICYmIHNpemUgIT09ICdtZWRpdW0nICYmIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWAsIG11bHRpbGluZSAmJiAnbXVsdGlsaW5lJywgc3RhcnRBZG9ybm1lbnQgJiYgJ2Fkb3JuZWRTdGFydCcsIGVuZEFkb3JubWVudCAmJiAnYWRvcm5lZEVuZCcsIGhpZGRlbkxhYmVsICYmICdoaWRkZW5MYWJlbCcsIHJlYWRPbmx5ICYmICdyZWFkT25seSddLFxuICAgIGlucHV0OiBbJ2lucHV0JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgdHlwZSA9PT0gJ3NlYXJjaCcgJiYgJ2lucHV0VHlwZVNlYXJjaCcsIG11bHRpbGluZSAmJiAnaW5wdXRNdWx0aWxpbmUnLCBzaXplID09PSAnc21hbGwnICYmICdpbnB1dFNpemVTbWFsbCcsIGhpZGRlbkxhYmVsICYmICdpbnB1dEhpZGRlbkxhYmVsJywgc3RhcnRBZG9ybm1lbnQgJiYgJ2lucHV0QWRvcm5lZFN0YXJ0JywgZW5kQWRvcm5tZW50ICYmICdpbnB1dEFkb3JuZWRFbmQnLCByZWFkT25seSAmJiAncmVhZE9ubHknXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldElucHV0QmFzZVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IElucHV0QmFzZVJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUlucHV0QmFzZScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IHJvb3RPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHt9LCB0aGVtZS50eXBvZ3JhcGh5LmJvZHkxLCB7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnksXG4gIGxpbmVIZWlnaHQ6ICcxLjQzNzVlbScsXG4gIC8vIDIzcHhcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIC8vIFByZXZlbnQgcGFkZGluZyBpc3N1ZSB3aXRoIGZ1bGxXaWR0aC5cbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGN1cnNvcjogJ3RleHQnLFxuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgW2AmLiR7aW5wdXRCYXNlQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkLFxuICAgIGN1cnNvcjogJ2RlZmF1bHQnXG4gIH1cbn0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIF9leHRlbmRzKHtcbiAgcGFkZGluZzogJzRweCAwIDVweCdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdUb3A6IDFcbn0pLCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gIHdpZHRoOiAnMTAwJSdcbn0pKTtcbmV4cG9ydCBjb25zdCBJbnB1dEJhc2VDb21wb25lbnQgPSBzdHlsZWQoJ2lucHV0Jywge1xuICBuYW1lOiAnTXVpSW5wdXRCYXNlJyxcbiAgc2xvdDogJ0lucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIGNvbnN0IGxpZ2h0ID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnO1xuICBjb25zdCBwbGFjZWhvbGRlciA9IF9leHRlbmRzKHtcbiAgICBjb2xvcjogJ2N1cnJlbnRDb2xvcidcbiAgfSwgdGhlbWUudmFycyA/IHtcbiAgICBvcGFjaXR5OiB0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRQbGFjZWhvbGRlclxuICB9IDoge1xuICAgIG9wYWNpdHk6IGxpZ2h0ID8gMC40MiA6IDAuNVxuICB9LCB7XG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5Jywge1xuICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXJcbiAgICB9KVxuICB9KTtcbiAgY29uc3QgcGxhY2Vob2xkZXJIaWRkZW4gPSB7XG4gICAgb3BhY2l0eTogJzAgIWltcG9ydGFudCdcbiAgfTtcbiAgY29uc3QgcGxhY2Vob2xkZXJWaXNpYmxlID0gdGhlbWUudmFycyA/IHtcbiAgICBvcGFjaXR5OiB0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRQbGFjZWhvbGRlclxuICB9IDoge1xuICAgIG9wYWNpdHk6IGxpZ2h0ID8gMC40MiA6IDAuNVxuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGZvbnQ6ICdpbmhlcml0JyxcbiAgICBsZXR0ZXJTcGFjaW5nOiAnaW5oZXJpdCcsXG4gICAgY29sb3I6ICdjdXJyZW50Q29sb3InLFxuICAgIHBhZGRpbmc6ICc0cHggMCA1cHgnLFxuICAgIGJvcmRlcjogMCxcbiAgICBib3hTaXppbmc6ICdjb250ZW50LWJveCcsXG4gICAgYmFja2dyb3VuZDogJ25vbmUnLFxuICAgIGhlaWdodDogJzEuNDM3NWVtJyxcbiAgICAvLyBSZXNldCAyM3B4dGhlIG5hdGl2ZSBpbnB1dCBsaW5lLWhlaWdodFxuICAgIG1hcmdpbjogMCxcbiAgICAvLyBSZXNldCBmb3IgU2FmYXJpXG4gICAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAvLyBNYWtlIHRoZSBmbGV4IGl0ZW0gc2hyaW5rIHdpdGggRmlyZWZveFxuICAgIG1pbldpZHRoOiAwLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgLy8gRml4IElFMTEgd2lkdGggaXNzdWVcbiAgICBhbmltYXRpb25OYW1lOiAnbXVpLWF1dG8tZmlsbC1jYW5jZWwnLFxuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnMTBtcycsXG4gICAgJyY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAnJjo6LW1vei1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgIC8vIEZpcmVmb3ggMTkrXG4gICAgJyY6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgLy8gSUUxMVxuICAgICcmOjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAvLyBFZGdlXG4gICAgJyY6Zm9jdXMnOiB7XG4gICAgICBvdXRsaW5lOiAwXG4gICAgfSxcbiAgICAvLyBSZXNldCBGaXJlZm94IGludmFsaWQgcmVxdWlyZWQgaW5wdXQgc3R5bGVcbiAgICAnJjppbnZhbGlkJzoge1xuICAgICAgYm94U2hhZG93OiAnbm9uZSdcbiAgICB9LFxuICAgICcmOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uJzoge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIHdoZW4gdHlwZT1zZWFyY2guXG4gICAgICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZSdcbiAgICB9LFxuICAgIC8vIFNob3cgYW5kIGhpZGUgdGhlIHBsYWNlaG9sZGVyIGxvZ2ljXG4gICAgW2BsYWJlbFtkYXRhLXNocmluaz1mYWxzZV0gKyAuJHtpbnB1dEJhc2VDbGFzc2VzLmZvcm1Db250cm9sfSAmYF06IHtcbiAgICAgICcmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAnJjo6LW1vei1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgLy8gRmlyZWZveCAxOStcbiAgICAgICcmOi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgLy8gSUUxMVxuICAgICAgJyY6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgLy8gRWRnZVxuICAgICAgJyY6Zm9jdXM6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUsXG4gICAgICAnJjpmb2N1czo6LW1vei1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSxcbiAgICAgIC8vIEZpcmVmb3ggMTkrXG4gICAgICAnJjpmb2N1czotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUsXG4gICAgICAvLyBJRTExXG4gICAgICAnJjpmb2N1czo6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlIC8vIEVkZ2VcbiAgICB9LFxuICAgIFtgJi4ke2lucHV0QmFzZUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAvLyBSZXNldCBpT1Mgb3BhY2l0eVxuICAgICAgV2Via2l0VGV4dEZpbGxDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZCAvLyBGaXggb3BhY2l0eSBTYWZhcmkgYnVnXG4gICAgfSxcbiAgICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICc1MDAwcycsXG4gICAgICBhbmltYXRpb25OYW1lOiAnbXVpLWF1dG8tZmlsbCdcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZ1RvcDogMVxuICB9LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiB7XG4gICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgcmVzaXplOiAnbm9uZScsXG4gICAgcGFkZGluZzogMCxcbiAgICBwYWRkaW5nVG9wOiAwXG4gIH0sIG93bmVyU3RhdGUudHlwZSA9PT0gJ3NlYXJjaCcgJiYge1xuICAgIC8vIEltcHJvdmUgdHlwZSBzZWFyY2ggc3R5bGUuXG4gICAgTW96QXBwZWFyYW5jZTogJ3RleHRmaWVsZCdcbiAgfSk7XG59KTtcbmNvbnN0IGlucHV0R2xvYmFsU3R5bGVzID0gLyojX19QVVJFX18qL19qc3goR2xvYmFsU3R5bGVzLCB7XG4gIHN0eWxlczoge1xuICAgICdAa2V5ZnJhbWVzIG11aS1hdXRvLWZpbGwnOiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICAgIH1cbiAgICB9LFxuICAgICdAa2V5ZnJhbWVzIG11aS1hdXRvLWZpbGwtY2FuY2VsJzoge1xuICAgICAgZnJvbToge1xuICAgICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBgSW5wdXRCYXNlYCBjb250YWlucyBhcyBmZXcgc3R5bGVzIGFzIHBvc3NpYmxlLlxuICogSXQgYWltcyB0byBiZSBhIHNpbXBsZSBidWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYW4gaW5wdXQuXG4gKiBJdCBjb250YWlucyBhIGxvYWQgb2Ygc3R5bGUgcmVzZXQgYW5kIHNvbWUgc3RhdGUgbG9naWMuXG4gKi9cbmNvbnN0IElucHV0QmFzZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0QmFzZShpblByb3BzLCByZWYpIHtcbiAgdmFyIF9zbG90UHJvcHMkaW5wdXQ7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpSW5wdXRCYXNlJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICBhdXRvQ29tcGxldGUsXG4gICAgICBhdXRvRm9jdXMsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnRzID0ge30sXG4gICAgICBjb21wb25lbnRzUHJvcHMgPSB7fSxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlcyxcbiAgICAgIGVuZEFkb3JubWVudCxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgaWQsXG4gICAgICBpbnB1dENvbXBvbmVudCA9ICdpbnB1dCcsXG4gICAgICBpbnB1dFByb3BzOiBpbnB1dFByb3BzUHJvcCA9IHt9LFxuICAgICAgaW5wdXRSZWY6IGlucHV0UmVmUHJvcCxcbiAgICAgIG1heFJvd3MsXG4gICAgICBtaW5Sb3dzLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBuYW1lLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbkNsaWNrLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uS2V5RG93bixcbiAgICAgIG9uS2V5VXAsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHJlYWRPbmx5LFxuICAgICAgcmVuZGVyU3VmZml4LFxuICAgICAgcm93cyxcbiAgICAgIHNsb3RQcm9wcyA9IHt9LFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIHN0YXJ0QWRvcm5tZW50LFxuICAgICAgdHlwZSA9ICd0ZXh0JyxcbiAgICAgIHZhbHVlOiB2YWx1ZVByb3BcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgdmFsdWUgPSBpbnB1dFByb3BzUHJvcC52YWx1ZSAhPSBudWxsID8gaW5wdXRQcm9wc1Byb3AudmFsdWUgOiB2YWx1ZVByb3A7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50OiBpc0NvbnRyb2xsZWRcbiAgfSA9IFJlYWN0LnVzZVJlZih2YWx1ZSAhPSBudWxsKTtcbiAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgY29uc3QgaGFuZGxlSW5wdXRSZWZXYXJuaW5nID0gUmVhY3QudXNlQ2FsbGJhY2soaW5zdGFuY2UgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2Uubm9kZU5hbWUgIT09ICdJTlBVVCcgJiYgIWluc3RhbmNlLmZvY3VzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFlvdSBoYXZlIHByb3ZpZGVkIGEgYGlucHV0Q29tcG9uZW50YCB0byB0aGUgaW5wdXQgY29tcG9uZW50JywgJ3RoYXQgZG9lcyBub3QgY29ycmVjdGx5IGhhbmRsZSB0aGUgYHJlZmAgcHJvcC4nLCAnTWFrZSBzdXJlIHRoZSBgcmVmYCBwcm9wIGlzIGNhbGxlZCB3aXRoIGEgSFRNTElucHV0RWxlbWVudC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IGhhbmRsZUlucHV0UmVmID0gdXNlRm9ya1JlZihpbnB1dFJlZiwgaW5wdXRSZWZQcm9wLCBpbnB1dFByb3BzUHJvcC5yZWYsIGhhbmRsZUlucHV0UmVmV2FybmluZyk7XG4gIGNvbnN0IFtmb2N1c2VkLCBzZXRGb2N1c2VkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAobXVpRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgcmV0dXJuIG11aUZvcm1Db250cm9sLnJlZ2lzdGVyRWZmZWN0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sIFttdWlGb3JtQ29udHJvbF0pO1xuICB9XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydjb2xvcicsICdkaXNhYmxlZCcsICdlcnJvcicsICdoaWRkZW5MYWJlbCcsICdzaXplJywgJ3JlcXVpcmVkJywgJ2ZpbGxlZCddXG4gIH0pO1xuICBmY3MuZm9jdXNlZCA9IG11aUZvcm1Db250cm9sID8gbXVpRm9ybUNvbnRyb2wuZm9jdXNlZCA6IGZvY3VzZWQ7XG5cbiAgLy8gVGhlIGJsdXIgd29uJ3QgZmlyZSB3aGVuIHRoZSBkaXNhYmxlZCBzdGF0ZSBpcyBzZXQgb24gYSBmb2N1c2VkIGlucHV0LlxuICAvLyBXZSBuZWVkIHRvIGJvb2sga2VlcCB0aGUgZm9jdXNlZCBzdGF0ZSBtYW51YWxseS5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW11aUZvcm1Db250cm9sICYmIGRpc2FibGVkICYmIGZvY3VzZWQpIHtcbiAgICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICAgICAgaWYgKG9uQmx1cikge1xuICAgICAgICBvbkJsdXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFttdWlGb3JtQ29udHJvbCwgZGlzYWJsZWQsIGZvY3VzZWQsIG9uQmx1cl0pO1xuICBjb25zdCBvbkZpbGxlZCA9IG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRmlsbGVkO1xuICBjb25zdCBvbkVtcHR5ID0gbXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25FbXB0eTtcbiAgY29uc3QgY2hlY2tEaXJ0eSA9IFJlYWN0LnVzZUNhbGxiYWNrKG9iaiA9PiB7XG4gICAgaWYgKGlzRmlsbGVkKG9iaikpIHtcbiAgICAgIGlmIChvbkZpbGxlZCkge1xuICAgICAgICBvbkZpbGxlZCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob25FbXB0eSkge1xuICAgICAgb25FbXB0eSgpO1xuICAgIH1cbiAgfSwgW29uRmlsbGVkLCBvbkVtcHR5XSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNDb250cm9sbGVkKSB7XG4gICAgICBjaGVja0RpcnR5KHtcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW3ZhbHVlLCBjaGVja0RpcnR5LCBpc0NvbnRyb2xsZWRdKTtcbiAgY29uc3QgaGFuZGxlRm9jdXMgPSBldmVudCA9PiB7XG4gICAgLy8gRml4IGEgYnVnIHdpdGggSUUxMSB3aGVyZSB0aGUgZm9jdXMvYmx1ciBldmVudHMgYXJlIHRyaWdnZXJlZFxuICAgIC8vIHdoaWxlIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAgaWYgKGZjcy5kaXNhYmxlZCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvbkZvY3VzKSB7XG4gICAgICBvbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKGlucHV0UHJvcHNQcm9wLm9uRm9jdXMpIHtcbiAgICAgIGlucHV0UHJvcHNQcm9wLm9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAobXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25Gb2N1cykge1xuICAgICAgbXVpRm9ybUNvbnRyb2wub25Gb2N1cyhldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldEZvY3VzZWQodHJ1ZSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVCbHVyID0gZXZlbnQgPT4ge1xuICAgIGlmIChvbkJsdXIpIHtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICAgIGlmIChpbnB1dFByb3BzUHJvcC5vbkJsdXIpIHtcbiAgICAgIGlucHV0UHJvcHNQcm9wLm9uQmx1cihldmVudCk7XG4gICAgfVxuICAgIGlmIChtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkJsdXIpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLm9uQmx1cihldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGV2ZW50LCAuLi5hcmdzKSA9PiB7XG4gICAgaWYgKCFpc0NvbnRyb2xsZWQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQgfHwgaW5wdXRSZWYuY3VycmVudDtcbiAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IEV4cGVjdGVkIHZhbGlkIGlucHV0IHRhcmdldC4gRGlkIHlvdSB1c2UgYSBjdXN0b20gXFxgaW5wdXRDb21wb25lbnRcXGAgYW5kIGZvcmdldCB0byBmb3J3YXJkIHJlZnM/IFNlZSBodHRwczovL211aS5jb20vci9pbnB1dC1jb21wb25lbnQtcmVmLWludGVyZmFjZSBmb3IgbW9yZSBpbmZvLmAgOiBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlKDEpKTtcbiAgICAgIH1cbiAgICAgIGNoZWNrRGlydHkoe1xuICAgICAgICB2YWx1ZTogZWxlbWVudC52YWx1ZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpbnB1dFByb3BzUHJvcC5vbkNoYW5nZSkge1xuICAgICAgaW5wdXRQcm9wc1Byb3Aub25DaGFuZ2UoZXZlbnQsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm0gaW4gdGhlIHdpbGxVcGRhdGVcbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIG9uQ2hhbmdlKGV2ZW50LCAuLi5hcmdzKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gQ2hlY2sgdGhlIGlucHV0IHN0YXRlIG9uIG1vdW50LCBpbiBjYXNlIGl0IHdhcyBmaWxsZWQgYnkgdGhlIHVzZXJcbiAgLy8gb3IgYXV0byBmaWxsZWQgYnkgdGhlIGJyb3dzZXIgYmVmb3JlIHRoZSBoeWRyYXRpb24gKGZvciBTU1IpLlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNoZWNrRGlydHkoaW5wdXRSZWYuY3VycmVudCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gZXZlbnQgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50ICYmIGV2ZW50LmN1cnJlbnRUYXJnZXQgPT09IGV2ZW50LnRhcmdldCkge1xuICAgICAgaW5wdXRSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgICBpZiAob25DbGljaykge1xuICAgICAgb25DbGljayhldmVudCk7XG4gICAgfVxuICB9O1xuICBsZXQgSW5wdXRDb21wb25lbnQgPSBpbnB1dENvbXBvbmVudDtcbiAgbGV0IGlucHV0UHJvcHMgPSBpbnB1dFByb3BzUHJvcDtcbiAgaWYgKG11bHRpbGluZSAmJiBJbnB1dENvbXBvbmVudCA9PT0gJ2lucHV0Jykge1xuICAgIGlmIChyb3dzKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAobWluUm93cyB8fCBtYXhSb3dzKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdNVUk6IFlvdSBjYW4gbm90IHVzZSB0aGUgYG1pblJvd3NgIG9yIGBtYXhSb3dzYCBwcm9wcyB3aGVuIHRoZSBpbnB1dCBgcm93c2AgcHJvcCBpcyBzZXQuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlucHV0UHJvcHMgPSBfZXh0ZW5kcyh7XG4gICAgICAgIHR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgbWluUm93czogcm93cyxcbiAgICAgICAgbWF4Um93czogcm93c1xuICAgICAgfSwgaW5wdXRQcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0UHJvcHMgPSBfZXh0ZW5kcyh7XG4gICAgICAgIHR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4Um93cyxcbiAgICAgICAgbWluUm93c1xuICAgICAgfSwgaW5wdXRQcm9wcyk7XG4gICAgfVxuICAgIElucHV0Q29tcG9uZW50ID0gVGV4dGFyZWFBdXRvc2l6ZTtcbiAgfVxuICBjb25zdCBoYW5kbGVBdXRvRmlsbCA9IGV2ZW50ID0+IHtcbiAgICAvLyBQcm92aWRlIGEgZmFrZSB2YWx1ZSBhcyBDaHJvbWUgbWlnaHQgbm90IGxldCB5b3UgYWNjZXNzIGl0IGZvciBzZWN1cml0eSByZWFzb25zLlxuICAgIGNoZWNrRGlydHkoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ211aS1hdXRvLWZpbGwtY2FuY2VsJyA/IGlucHV0UmVmLmN1cnJlbnQgOiB7XG4gICAgICB2YWx1ZTogJ3gnXG4gICAgfSk7XG4gIH07XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG11aUZvcm1Db250cm9sKSB7XG4gICAgICBtdWlGb3JtQ29udHJvbC5zZXRBZG9ybmVkU3RhcnQoQm9vbGVhbihzdGFydEFkb3JubWVudCkpO1xuICAgIH1cbiAgfSwgW211aUZvcm1Db250cm9sLCBzdGFydEFkb3JubWVudF0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3I6IGZjcy5jb2xvciB8fCAncHJpbWFyeScsXG4gICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICBlbmRBZG9ybm1lbnQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmb2N1c2VkOiBmY3MuZm9jdXNlZCxcbiAgICBmb3JtQ29udHJvbDogbXVpRm9ybUNvbnRyb2wsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsOiBmY3MuaGlkZGVuTGFiZWwsXG4gICAgbXVsdGlsaW5lLFxuICAgIHNpemU6IGZjcy5zaXplLFxuICAgIHN0YXJ0QWRvcm5tZW50LFxuICAgIHR5cGVcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgUm9vdCA9IHNsb3RzLnJvb3QgfHwgY29tcG9uZW50cy5Sb290IHx8IElucHV0QmFzZVJvb3Q7XG4gIGNvbnN0IHJvb3RQcm9wcyA9IHNsb3RQcm9wcy5yb290IHx8IGNvbXBvbmVudHNQcm9wcy5yb290IHx8IHt9O1xuICBjb25zdCBJbnB1dCA9IHNsb3RzLmlucHV0IHx8IGNvbXBvbmVudHMuSW5wdXQgfHwgSW5wdXRCYXNlQ29tcG9uZW50O1xuICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe30sIGlucHV0UHJvcHMsIChfc2xvdFByb3BzJGlucHV0ID0gc2xvdFByb3BzLmlucHV0KSAhPSBudWxsID8gX3Nsb3RQcm9wcyRpbnB1dCA6IGNvbXBvbmVudHNQcm9wcy5pbnB1dCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogWyFkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzICYmIGlucHV0R2xvYmFsU3R5bGVzLCAvKiNfX1BVUkVfXyovX2pzeHMoUm9vdCwgX2V4dGVuZHMoe30sIHJvb3RQcm9wcywgIWlzSG9zdENvbXBvbmVudChSb290KSAmJiB7XG4gICAgICBvd25lclN0YXRlOiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZSwgcm9vdFByb3BzLm93bmVyU3RhdGUpXG4gICAgfSwge1xuICAgICAgcmVmOiByZWYsXG4gICAgICBvbkNsaWNrOiBoYW5kbGVDbGlja1xuICAgIH0sIG90aGVyLCB7XG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCByb290UHJvcHMuY2xhc3NOYW1lLCBjbGFzc05hbWUsIHJlYWRPbmx5ICYmICdNdWlJbnB1dEJhc2UtcmVhZE9ubHknKSxcbiAgICAgIGNoaWxkcmVuOiBbc3RhcnRBZG9ybm1lbnQsIC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KElucHV0LCBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBmY3MuZXJyb3IsXG4gICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IGFyaWFEZXNjcmliZWRieSxcbiAgICAgICAgICBhdXRvQ29tcGxldGU6IGF1dG9Db21wbGV0ZSxcbiAgICAgICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBvbkFuaW1hdGlvblN0YXJ0OiBoYW5kbGVBdXRvRmlsbCxcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICAgICAgICByZWFkT25seTogcmVhZE9ubHksXG4gICAgICAgICAgcmVxdWlyZWQ6IGZjcy5yZXF1aXJlZCxcbiAgICAgICAgICByb3dzOiByb3dzLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBvbktleURvd246IG9uS2V5RG93bixcbiAgICAgICAgICBvbktleVVwOiBvbktleVVwLFxuICAgICAgICAgIHR5cGU6IHR5cGVcbiAgICAgICAgfSwgaW5wdXRQcm9wcywgIWlzSG9zdENvbXBvbmVudChJbnB1dCkgJiYge1xuICAgICAgICAgIGFzOiBJbnB1dENvbXBvbmVudCxcbiAgICAgICAgICBvd25lclN0YXRlOiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZSwgaW5wdXRQcm9wcy5vd25lclN0YXRlKVxuICAgICAgICB9LCB7XG4gICAgICAgICAgcmVmOiBoYW5kbGVJbnB1dFJlZixcbiAgICAgICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5pbnB1dCwgaW5wdXRQcm9wcy5jbGFzc05hbWUsIHJlYWRPbmx5ICYmICdNdWlJbnB1dEJhc2UtcmVhZE9ubHknKSxcbiAgICAgICAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgICAgICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICAgICAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1xuICAgICAgICB9KSlcbiAgICAgIH0pLCBlbmRBZG9ybm1lbnQsIHJlbmRlclN1ZmZpeCA/IHJlbmRlclN1ZmZpeChfZXh0ZW5kcyh7fSwgZmNzLCB7XG4gICAgICAgIHN0YXJ0QWRvcm5tZW50XG4gICAgICB9KSkgOiBudWxsXVxuICAgIH0pKV1cbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IElucHV0QmFzZS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICAnYXJpYS1kZXNjcmliZWRieSc6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90UHJvcHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdFByb3BzYCBwcm9wIGluc3RlYWQsIGFzIGBjb21wb25lbnRzUHJvcHNgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgR2xvYmFsU3R5bGVzIGZvciB0aGUgYXV0by1maWxsIGtleWZyYW1lcyB3aWxsIG5vdCBiZSBpbmplY3RlZC9yZW1vdmVkIG9uIG1vdW50L3VubW91bnQuIE1ha2Ugc3VyZSB0byBpbmplY3QgdGhlbSBhdCB0aGUgdG9wIG9mIHlvdXIgYXBwbGljYXRpb24uXG4gICAqIFRoaXMgb3B0aW9uIGlzIGludGVuZGVkIHRvIGhlbHAgd2l0aCBib29zdGluZyB0aGUgaW5pdGlhbCByZW5kZXJpbmcgcGVyZm9ybWFuY2UgaWYgeW91IGFyZSBsb2FkaW5nIGEgYmlnIGFtb3VudCBvZiBJbnB1dCBjb21wb25lbnRzIGF0IG9uY2UuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEVuZCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIGVuZEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbnB1dCdcbiAgICovXG4gIGlucHV0Q29tcG9uZW50OiBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZixcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAnbm9uZSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIFtUZXh0YXJlYUF1dG9zaXplXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKSBlbGVtZW50IGlzIHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgYGlucHV0YCBpcyBibHVycmVkLlxuICAgKlxuICAgKiBOb3RpY2UgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgKGV2ZW50KSBtaWdodCBiZSB1bmRlZmluZWQuXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGBpbnB1dGAgZG9lc24ndCBzYXRpc2Z5IGl0cyBjb25zdHJhaW50cy5cbiAgICovXG4gIG9uSW52YWxpZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJdCBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICogKG5vdCBmcm9tIGludGVyYWN0aW5nIHdpdGggdGhlIGZpZWxkKS5cbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHJlbmRlclN1ZmZpeDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIHJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ21lZGl1bScsICdzbWFsbCddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzUHJvcHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFN0YXJ0IGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgc3RhcnRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IElucHV0QmFzZTsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0QmFzZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpSW5wdXRCYXNlJywgc2xvdCk7XG59XG5jb25zdCBpbnB1dEJhc2VDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXRCYXNlJywgWydyb290JywgJ2Zvcm1Db250cm9sJywgJ2ZvY3VzZWQnLCAnZGlzYWJsZWQnLCAnYWRvcm5lZFN0YXJ0JywgJ2Fkb3JuZWRFbmQnLCAnZXJyb3InLCAnc2l6ZVNtYWxsJywgJ211bHRpbGluZScsICdjb2xvclNlY29uZGFyeScsICdmdWxsV2lkdGgnLCAnaGlkZGVuTGFiZWwnLCAncmVhZE9ubHknLCAnaW5wdXQnLCAnaW5wdXRTaXplU21hbGwnLCAnaW5wdXRNdWx0aWxpbmUnLCAnaW5wdXRUeXBlU2VhcmNoJywgJ2lucHV0QWRvcm5lZFN0YXJ0JywgJ2lucHV0QWRvcm5lZEVuZCcsICdpbnB1dEhpZGRlbkxhYmVsJ10pO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRCYXNlQ2xhc3NlczsiLCIvLyBTdXBwb3J0cyBkZXRlcm1pbmF0aW9uIG9mIGlzQ29udHJvbGxlZCgpLlxuLy8gQ29udHJvbGxlZCBpbnB1dCBhY2NlcHRzIGl0cyBjdXJyZW50IHZhbHVlIGFzIGEgcHJvcC5cbi8vXG4vLyBAc2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvZm9ybXMuaHRtbCNjb250cm9sbGVkLWNvbXBvbmVudHNcbi8vIEBwYXJhbSB2YWx1ZVxuLy8gQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgc3RyaW5nIChpbmNsdWRpbmcgJycpIG9yIG51bWJlciAoaW5jbHVkaW5nIHplcm8pXG5leHBvcnQgZnVuY3Rpb24gaGFzVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgIShBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApO1xufVxuXG4vLyBEZXRlcm1pbmUgaWYgZmllbGQgaXMgZW1wdHkgb3IgZmlsbGVkLlxuLy8gUmVzcG9uc2UgZGV0ZXJtaW5lcyBpZiBsYWJlbCBpcyBwcmVzZW50ZWQgYWJvdmUgZmllbGQgb3IgYXMgcGxhY2Vob2xkZXIuXG4vL1xuLy8gQHBhcmFtIG9ialxuLy8gQHBhcmFtIFNTUlxuLy8gQHJldHVybnMge2Jvb2xlYW59IEZhbHNlIHdoZW4gbm90IHByZXNlbnQgb3IgZW1wdHkgc3RyaW5nLlxuLy8gICAgICAgICAgICAgICAgICAgIFRydWUgd2hlbiBhbnkgbnVtYmVyIG9yIHN0cmluZyB3aXRoIGxlbmd0aC5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbGxlZChvYmosIFNTUiA9IGZhbHNlKSB7XG4gIHJldHVybiBvYmogJiYgKGhhc1ZhbHVlKG9iai52YWx1ZSkgJiYgb2JqLnZhbHVlICE9PSAnJyB8fCBTU1IgJiYgaGFzVmFsdWUob2JqLmRlZmF1bHRWYWx1ZSkgJiYgb2JqLmRlZmF1bHRWYWx1ZSAhPT0gJycpO1xufVxuXG4vLyBEZXRlcm1pbmUgaWYgYW4gSW5wdXQgaXMgYWRvcm5lZCBvbiBzdGFydC5cbi8vIEl0J3MgY29ycmVzcG9uZGluZyB0byB0aGUgbGVmdCB3aXRoIExUUi5cbi8vXG4vLyBAcGFyYW0gb2JqXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gRmFsc2Ugd2hlbiBubyBhZG9ybm1lbnRzLlxuLy8gICAgICAgICAgICAgICAgICAgIFRydWUgd2hlbiBhZG9ybmVkIGF0IHRoZSBzdGFydC5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fkb3JuZWRTdGFydChvYmopIHtcbiAgcmV0dXJuIG9iai5zdGFydEFkb3JubWVudDtcbn0iLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1MYWJlbFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGb3JtTGFiZWwnLCBzbG90KTtcbn1cbmNvbnN0IGZvcm1MYWJlbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtTGFiZWwnLCBbJ3Jvb3QnLCAnY29sb3JTZWNvbmRhcnknLCAnZm9jdXNlZCcsICdkaXNhYmxlZCcsICdlcnJvcicsICdmaWxsZWQnLCAncmVxdWlyZWQnLCAnYXN0ZXJpc2snXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtTGFiZWxDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiZmlsbGVkXCIsIFwiZm9jdXNlZFwiLCBcInJlcXVpcmVkXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IGZvcm1MYWJlbENsYXNzZXMsIHsgZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL2Zvcm1MYWJlbENsYXNzZXMnO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29sb3IsXG4gICAgZm9jdXNlZCxcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBmaWxsZWQsXG4gICAgcmVxdWlyZWRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgZXJyb3IgJiYgJ2Vycm9yJywgZmlsbGVkICYmICdmaWxsZWQnLCBmb2N1c2VkICYmICdmb2N1c2VkJywgcmVxdWlyZWQgJiYgJ3JlcXVpcmVkJ10sXG4gICAgYXN0ZXJpc2s6IFsnYXN0ZXJpc2snLCBlcnJvciAmJiAnZXJyb3InXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZvcm1MYWJlbFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgRm9ybUxhYmVsUm9vdCA9IHN0eWxlZCgnbGFiZWwnLCB7XG4gIG5hbWU6ICdNdWlGb3JtTGFiZWwnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAoe1xuICAgIG93bmVyU3RhdGVcbiAgfSwgc3R5bGVzKSA9PiB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ3NlY29uZGFyeScgJiYgc3R5bGVzLmNvbG9yU2Vjb25kYXJ5LCBvd25lclN0YXRlLmZpbGxlZCAmJiBzdHlsZXMuZmlsbGVkKTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuc2Vjb25kYXJ5XG59LCB0aGVtZS50eXBvZ3JhcGh5LmJvZHkxLCB7XG4gIGxpbmVIZWlnaHQ6ICcxLjQzNzVlbScsXG4gIHBhZGRpbmc6IDAsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBbYCYuJHtmb3JtTGFiZWxDbGFzc2VzLmZvY3VzZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxuICB9LFxuICBbYCYuJHtmb3JtTGFiZWxDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWRcbiAgfSxcbiAgW2AmLiR7Zm9ybUxhYmVsQ2xhc3Nlcy5lcnJvcn1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gIH1cbn0pKTtcbmNvbnN0IEFzdGVyaXNrQ29tcG9uZW50ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpRm9ybUxhYmVsJyxcbiAgc2xvdDogJ0FzdGVyaXNrJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuYXN0ZXJpc2tcbn0pKCh7XG4gIHRoZW1lXG59KSA9PiAoe1xuICBbYCYuJHtmb3JtTGFiZWxDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSkpO1xuY29uc3QgRm9ybUxhYmVsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUxhYmVsKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1MYWJlbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2xhYmVsJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydjb2xvcicsICdyZXF1aXJlZCcsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3I6IGZjcy5jb2xvciB8fCAncHJpbWFyeScsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmaWxsZWQ6IGZjcy5maWxsZWQsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgcmVxdWlyZWQ6IGZjcy5yZXF1aXJlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEZvcm1MYWJlbFJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbY2hpbGRyZW4sIGZjcy5yZXF1aXJlZCAmJiAvKiNfX1BVUkVfXyovX2pzeHMoQXN0ZXJpc2tDb21wb25lbnQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuYXN0ZXJpc2ssXG4gICAgICBjaGlsZHJlbjogW1wiXFx1MjAwOVwiLCAnKiddXG4gICAgfSldXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUxhYmVsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2Vycm9yJywgJ2luZm8nLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHNob3VsZCB1c2UgZmlsbGVkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgZmlsbGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IG9mIHRoaXMgbGFiZWwgaXMgZm9jdXNlZCAodXNlZCBieSBgRm9ybUdyb3VwYCBjb21wb25lbnRzKS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUxhYmVsOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlJbnB1dExhYmVsJywgc2xvdCk7XG59XG5jb25zdCBpbnB1dExhYmVsQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUlucHV0TGFiZWwnLCBbJ3Jvb3QnLCAnZm9jdXNlZCcsICdkaXNhYmxlZCcsICdlcnJvcicsICdyZXF1aXJlZCcsICdhc3RlcmlzaycsICdmb3JtQ29udHJvbCcsICdzaXplU21hbGwnLCAnc2hyaW5rJywgJ2FuaW1hdGVkJywgJ3N0YW5kYXJkJywgJ2ZpbGxlZCcsICdvdXRsaW5lZCddKTtcbmV4cG9ydCBkZWZhdWx0IGlucHV0TGFiZWxDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImRpc2FibGVBbmltYXRpb25cIiwgXCJtYXJnaW5cIiwgXCJzaHJpbmtcIiwgXCJ2YXJpYW50XCIsIFwiY2xhc3NOYW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IEZvcm1MYWJlbCwgeyBmb3JtTGFiZWxDbGFzc2VzIH0gZnJvbSAnLi4vRm9ybUxhYmVsJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldElucHV0TGFiZWxVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vaW5wdXRMYWJlbENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGZvcm1Db250cm9sLFxuICAgIHNpemUsXG4gICAgc2hyaW5rLFxuICAgIGRpc2FibGVBbmltYXRpb24sXG4gICAgdmFyaWFudCxcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZm9ybUNvbnRyb2wgJiYgJ2Zvcm1Db250cm9sJywgIWRpc2FibGVBbmltYXRpb24gJiYgJ2FuaW1hdGVkJywgc2hyaW5rICYmICdzaHJpbmsnLCBzaXplICYmIHNpemUgIT09ICdub3JtYWwnICYmIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWAsIHZhcmlhbnRdLFxuICAgIGFzdGVyaXNrOiBbcmVxdWlyZWQgJiYgJ2FzdGVyaXNrJ11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldElucHV0TGFiZWxVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgY2xhc3NlcywgY29tcG9zZWRDbGFzc2VzKTtcbn07XG5jb25zdCBJbnB1dExhYmVsUm9vdCA9IHN0eWxlZChGb3JtTGFiZWwsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUlucHV0TGFiZWwnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFt7XG4gICAgICBbYCYgLiR7Zm9ybUxhYmVsQ2xhc3Nlcy5hc3Rlcmlza31gXTogc3R5bGVzLmFzdGVyaXNrXG4gICAgfSwgc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuZm9ybUNvbnRyb2wgJiYgc3R5bGVzLmZvcm1Db250cm9sLCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgc3R5bGVzLnNpemVTbWFsbCwgb3duZXJTdGF0ZS5zaHJpbmsgJiYgc3R5bGVzLnNocmluaywgIW93bmVyU3RhdGUuZGlzYWJsZUFuaW1hdGlvbiAmJiBzdHlsZXMuYW5pbWF0ZWQsIG93bmVyU3RhdGUuZm9jdXNlZCAmJiBzdHlsZXMuZm9jdXNlZCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnYmxvY2snLFxuICB0cmFuc2Zvcm1PcmlnaW46ICd0b3AgbGVmdCcsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgbWF4V2lkdGg6ICcxMDAlJ1xufSwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiB7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBsZWZ0OiAwLFxuICB0b3A6IDAsXG4gIC8vIHNsaWdodCBhbHRlcmF0aW9uIHRvIHNwZWMgc3BhY2luZyB0byBtYXRjaCB2aXN1YWwgc3BlYyByZXN1bHRcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsIDIwcHgpIHNjYWxlKDEpJ1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgLy8gQ29tcGVuc2F0aW9uIGZvciB0aGUgYElucHV0LmlucHV0U2l6ZVNtYWxsYCBzdHlsZS5cbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsIDE3cHgpIHNjYWxlKDEpJ1xufSwgb3duZXJTdGF0ZS5zaHJpbmsgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgLTEuNXB4KSBzY2FsZSgwLjc1KScsXG4gIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgbWF4V2lkdGg6ICcxMzMlJ1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZUFuaW1hdGlvbiAmJiB7XG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZShbJ2NvbG9yJywgJ3RyYW5zZm9ybScsICdtYXgtd2lkdGgnXSwge1xuICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLFxuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgfSlcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2ZpbGxlZCcgJiYgX2V4dGVuZHMoe1xuICAvLyBDaHJvbWUncyBhdXRvZmlsbCBmZWF0dXJlIGdpdmVzIHRoZSBpbnB1dCBmaWVsZCBhIHllbGxvdyBiYWNrZ3JvdW5kLlxuICAvLyBTaW5jZSB0aGUgaW5wdXQgZmllbGQgaXMgYmVoaW5kIHRoZSBsYWJlbCBpbiB0aGUgSFRNTCB0cmVlLFxuICAvLyB0aGUgaW5wdXQgZmllbGQgaXMgZHJhd24gbGFzdCBhbmQgaGlkZXMgdGhlIGxhYmVsIHdpdGggYW4gb3BhcXVlIGJhY2tncm91bmQgY29sb3IuXG4gIC8vIHpJbmRleDogMSB3aWxsIHJhaXNlIHRoZSBsYWJlbCBhYm92ZSBvcGFxdWUgYmFja2dyb3VuZC1jb2xvcnMgb2YgaW5wdXQuXG4gIHpJbmRleDogMSxcbiAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgMTZweCkgc2NhbGUoMSknLFxuICBtYXhXaWR0aDogJ2NhbGMoMTAwJSAtIDI0cHgpJ1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDEycHgsIDEzcHgpIHNjYWxlKDEpJ1xufSwgb3duZXJTdGF0ZS5zaHJpbmsgJiYgX2V4dGVuZHMoe1xuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHBvaW50ZXJFdmVudHM6ICdhdXRvJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDEycHgsIDdweCkgc2NhbGUoMC43NSknLFxuICBtYXhXaWR0aDogJ2NhbGMoMTMzJSAtIDI0cHgpJ1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDEycHgsIDRweCkgc2NhbGUoMC43NSknXG59KSksIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiBfZXh0ZW5kcyh7XG4gIC8vIHNlZSBjb21tZW50IGFib3ZlIG9uIGZpbGxlZC56SW5kZXhcbiAgekluZGV4OiAxLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxNHB4LCAxNnB4KSBzY2FsZSgxKScsXG4gIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gMjRweCknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTRweCwgOXB4KSBzY2FsZSgxKSdcbn0sIG93bmVyU3RhdGUuc2hyaW5rICYmIHtcbiAgdXNlclNlbGVjdDogJ25vbmUnLFxuICBwb2ludGVyRXZlbnRzOiAnYXV0bycsXG4gIC8vIFRoZW9yZXRpY2FsbHksIHdlIHNob3VsZCBoYXZlICg4KzUpKjIvMC43NSA9IDM0cHhcbiAgLy8gYnV0IGl0IGZlZWxzIGEgYmV0dGVyIHdoZW4gaXQgYmxlZWRzIGEgYml0IG9uIHRoZSBsZWZ0LCBzbyAzMnB4LlxuICBtYXhXaWR0aDogJ2NhbGMoMTMzJSAtIDMycHgpJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDE0cHgsIC05cHgpIHNjYWxlKDAuNzUpJ1xufSkpKTtcbmNvbnN0IElucHV0TGFiZWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBJbnB1dExhYmVsKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgbmFtZTogJ011aUlucHV0TGFiZWwnLFxuICAgIHByb3BzOiBpblByb3BzXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBkaXNhYmxlQW5pbWF0aW9uID0gZmFsc2UsXG4gICAgICBzaHJpbms6IHNocmlua1Byb3AsXG4gICAgICBjbGFzc05hbWVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBsZXQgc2hyaW5rID0gc2hyaW5rUHJvcDtcbiAgaWYgKHR5cGVvZiBzaHJpbmsgPT09ICd1bmRlZmluZWQnICYmIG11aUZvcm1Db250cm9sKSB7XG4gICAgc2hyaW5rID0gbXVpRm9ybUNvbnRyb2wuZmlsbGVkIHx8IG11aUZvcm1Db250cm9sLmZvY3VzZWQgfHwgbXVpRm9ybUNvbnRyb2wuYWRvcm5lZFN0YXJ0O1xuICB9XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydzaXplJywgJ3ZhcmlhbnQnLCAncmVxdWlyZWQnLCAnZm9jdXNlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZUFuaW1hdGlvbixcbiAgICBmb3JtQ29udHJvbDogbXVpRm9ybUNvbnRyb2wsXG4gICAgc2hyaW5rLFxuICAgIHNpemU6IGZjcy5zaXplLFxuICAgIHZhcmlhbnQ6IGZjcy52YXJpYW50LFxuICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWQsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KElucHV0TGFiZWxSb290LCBfZXh0ZW5kcyh7XG4gICAgXCJkYXRhLXNocmlua1wiOiBzaHJpbmssXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZixcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IElucHV0TGFiZWwucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZXJyb3InLCAnaW5mbycsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRyYW5zaXRpb24gYW5pbWF0aW9uIGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUFuaW1hdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIG9mIHRoaXMgbGFiZWwgaXMgZm9jdXNlZC5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZSddKSxcbiAgLyoqXG4gICAqIGlmIGB0cnVlYCwgdGhlIGxhYmVsIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgYGlucHV0YCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIHNocnVuay5cbiAgICovXG4gIHNocmluazogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnbm9ybWFsJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydub3JtYWwnLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IElucHV0TGFiZWw7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5rVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlMaW5rJywgc2xvdCk7XG59XG5jb25zdCBsaW5rQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpbmsnLCBbJ3Jvb3QnLCAndW5kZXJsaW5lTm9uZScsICd1bmRlcmxpbmVIb3ZlcicsICd1bmRlcmxpbmVBbHdheXMnLCAnYnV0dG9uJywgJ2ZvY3VzVmlzaWJsZSddKTtcbmV4cG9ydCBkZWZhdWx0IGxpbmtDbGFzc2VzOyIsImltcG9ydCB7IGdldFBhdGggfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgeyBhbHBoYSB9IGZyb20gJ0BtdWkvc3lzdGVtL2NvbG9yTWFuaXB1bGF0b3InO1xuZXhwb3J0IGNvbnN0IGNvbG9yVHJhbnNmb3JtYXRpb25zID0ge1xuICBwcmltYXJ5OiAncHJpbWFyeS5tYWluJyxcbiAgdGV4dFByaW1hcnk6ICd0ZXh0LnByaW1hcnknLFxuICBzZWNvbmRhcnk6ICdzZWNvbmRhcnkubWFpbicsXG4gIHRleHRTZWNvbmRhcnk6ICd0ZXh0LnNlY29uZGFyeScsXG4gIGVycm9yOiAnZXJyb3IubWFpbidcbn07XG5jb25zdCB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzID0gY29sb3IgPT4ge1xuICByZXR1cm4gY29sb3JUcmFuc2Zvcm1hdGlvbnNbY29sb3JdIHx8IGNvbG9yO1xufTtcbmNvbnN0IGdldFRleHREZWNvcmF0aW9uID0gKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgdHJhbnNmb3JtZWRDb2xvciA9IHRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMob3duZXJTdGF0ZS5jb2xvcik7XG4gIGNvbnN0IGNvbG9yID0gZ2V0UGF0aCh0aGVtZSwgYHBhbGV0dGUuJHt0cmFuc2Zvcm1lZENvbG9yfWAsIGZhbHNlKSB8fCBvd25lclN0YXRlLmNvbG9yO1xuICBjb25zdCBjaGFubmVsQ29sb3IgPSBnZXRQYXRoKHRoZW1lLCBgcGFsZXR0ZS4ke3RyYW5zZm9ybWVkQ29sb3J9Q2hhbm5lbGApO1xuICBpZiAoJ3ZhcnMnIGluIHRoZW1lICYmIGNoYW5uZWxDb2xvcikge1xuICAgIHJldHVybiBgcmdiYSgke2NoYW5uZWxDb2xvcn0gLyAwLjQpYDtcbiAgfVxuICByZXR1cm4gYWxwaGEoY29sb3IsIDAuNCk7XG59O1xuZXhwb3J0IGRlZmF1bHQgZ2V0VGV4dERlY29yYXRpb247IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJvbkJsdXJcIiwgXCJvbkZvY3VzXCIsIFwiVHlwb2dyYXBoeUNsYXNzZXNcIiwgXCJ1bmRlcmxpbmVcIiwgXCJ2YXJpYW50XCIsIFwic3hcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYgZnJvbSAnQG11aS91dGlscy9lbGVtZW50VHlwZUFjY2VwdGluZ1JlZic7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgdXNlSXNGb2N1c1Zpc2libGUgZnJvbSAnLi4vdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tICcuLi9UeXBvZ3JhcGh5JztcbmltcG9ydCBsaW5rQ2xhc3NlcywgeyBnZXRMaW5rVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9saW5rQ2xhc3Nlcyc7XG5pbXBvcnQgZ2V0VGV4dERlY29yYXRpb24sIHsgY29sb3JUcmFuc2Zvcm1hdGlvbnMgfSBmcm9tICcuL2dldFRleHREZWNvcmF0aW9uJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb21wb25lbnQsXG4gICAgZm9jdXNWaXNpYmxlLFxuICAgIHVuZGVybGluZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYHVuZGVybGluZSR7Y2FwaXRhbGl6ZSh1bmRlcmxpbmUpfWAsIGNvbXBvbmVudCA9PT0gJ2J1dHRvbicgJiYgJ2J1dHRvbicsIGZvY3VzVmlzaWJsZSAmJiAnZm9jdXNWaXNpYmxlJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRMaW5rVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBMaW5rUm9vdCA9IHN0eWxlZChUeXBvZ3JhcGh5LCB7XG4gIG5hbWU6ICdNdWlMaW5rJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tgdW5kZXJsaW5lJHtjYXBpdGFsaXplKG93bmVyU3RhdGUudW5kZXJsaW5lKX1gXSwgb3duZXJTdGF0ZS5jb21wb25lbnQgPT09ICdidXR0b24nICYmIHN0eWxlcy5idXR0b25dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICByZXR1cm4gX2V4dGVuZHMoe30sIG93bmVyU3RhdGUudW5kZXJsaW5lID09PSAnbm9uZScgJiYge1xuICAgIHRleHREZWNvcmF0aW9uOiAnbm9uZSdcbiAgfSwgb3duZXJTdGF0ZS51bmRlcmxpbmUgPT09ICdob3ZlcicgJiYge1xuICAgIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICB0ZXh0RGVjb3JhdGlvbjogJ3VuZGVybGluZSdcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUudW5kZXJsaW5lID09PSAnYWx3YXlzJyAmJiBfZXh0ZW5kcyh7XG4gICAgdGV4dERlY29yYXRpb246ICd1bmRlcmxpbmUnXG4gIH0sIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgdGV4dERlY29yYXRpb25Db2xvcjogZ2V0VGV4dERlY29yYXRpb24oe1xuICAgICAgdGhlbWUsXG4gICAgICBvd25lclN0YXRlXG4gICAgfSlcbiAgfSwge1xuICAgICcmOmhvdmVyJzoge1xuICAgICAgdGV4dERlY29yYXRpb25Db2xvcjogJ2luaGVyaXQnXG4gICAgfVxuICB9KSwgb3duZXJTdGF0ZS5jb21wb25lbnQgPT09ICdidXR0b24nICYmIHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgLy8gUmVzZXQgZGVmYXVsdCB2YWx1ZVxuICAgIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gICAgb3V0bGluZTogMCxcbiAgICBib3JkZXI6IDAsXG4gICAgbWFyZ2luOiAwLFxuICAgIC8vIFJlbW92ZSB0aGUgbWFyZ2luIGluIFNhZmFyaVxuICAgIGJvcmRlclJhZGl1czogMCxcbiAgICBwYWRkaW5nOiAwLFxuICAgIC8vIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBGaXJlZm94XG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAgIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgICAvLyBSZXNldFxuICAgIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJyxcbiAgICAvLyBSZXNldFxuICAgICcmOjotbW96LWZvY3VzLWlubmVyJzoge1xuICAgICAgYm9yZGVyU3R5bGU6ICdub25lJyAvLyBSZW1vdmUgRmlyZWZveCBkb3R0ZWQgb3V0bGluZS5cbiAgICB9LFxuICAgIFtgJi4ke2xpbmtDbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgICAgb3V0bGluZTogJ2F1dG8nXG4gICAgfVxuICB9KTtcbn0pO1xuY29uc3QgTGluayA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIExpbmsoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTGluaydcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgY29tcG9uZW50ID0gJ2EnLFxuICAgICAgb25CbHVyLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIFR5cG9ncmFwaHlDbGFzc2VzLFxuICAgICAgdW5kZXJsaW5lID0gJ2Fsd2F5cycsXG4gICAgICB2YXJpYW50ID0gJ2luaGVyaXQnLFxuICAgICAgc3hcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qge1xuICAgIGlzRm9jdXNWaXNpYmxlUmVmLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1clZpc2libGUsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXNWaXNpYmxlLFxuICAgIHJlZjogZm9jdXNWaXNpYmxlUmVmXG4gIH0gPSB1c2VJc0ZvY3VzVmlzaWJsZSgpO1xuICBjb25zdCBbZm9jdXNWaXNpYmxlLCBzZXRGb2N1c1Zpc2libGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVyUmVmID0gdXNlRm9ya1JlZihyZWYsIGZvY3VzVmlzaWJsZVJlZik7XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSBldmVudCA9PiB7XG4gICAgaGFuZGxlQmx1clZpc2libGUoZXZlbnQpO1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKG9uQmx1cikge1xuICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gZXZlbnQgPT4ge1xuICAgIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCk7XG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICB9XG4gICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgIG9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBmb2N1c1Zpc2libGUsXG4gICAgdW5kZXJsaW5lLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpbmtSb290LCBfZXh0ZW5kcyh7XG4gICAgY29sb3I6IGNvbG9yLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgY2xhc3NlczogVHlwb2dyYXBoeUNsYXNzZXMsXG4gICAgY29tcG9uZW50OiBjb21wb25lbnQsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgIHJlZjogaGFuZGxlclJlZixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIHZhcmlhbnQ6IHZhcmlhbnQsXG4gICAgc3g6IFsuLi4oIU9iamVjdC5rZXlzKGNvbG9yVHJhbnNmb3JtYXRpb25zKS5pbmNsdWRlcyhjb2xvcikgPyBbe1xuICAgICAgY29sb3JcbiAgICB9XSA6IFtdKSwgLi4uKEFycmF5LmlzQXJyYXkoc3gpID8gc3ggOiBbc3hdKV1cbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTGluay5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgbGluay5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8uYW55LFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZixcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIGBjbGFzc2VzYCBwcm9wIGFwcGxpZWQgdG8gdGhlIFtgVHlwb2dyYXBoeWBdKC9tYXRlcmlhbC11aS9hcGkvdHlwb2dyYXBoeS8pIGVsZW1lbnQuXG4gICAqL1xuICBUeXBvZ3JhcGh5Q2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZW4gdGhlIGxpbmsgc2hvdWxkIGhhdmUgYW4gdW5kZXJsaW5lLlxuICAgKiBAZGVmYXVsdCAnYWx3YXlzJ1xuICAgKi9cbiAgdW5kZXJsaW5lOiBQcm9wVHlwZXMub25lT2YoWydhbHdheXMnLCAnaG92ZXInLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIHRoZW1lIHR5cG9ncmFwaHkgc3R5bGVzLlxuICAgKiBAZGVmYXVsdCAnaW5oZXJpdCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm9keTEnLCAnYm9keTInLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaW5oZXJpdCcsICdvdmVybGluZScsICdzdWJ0aXRsZTEnLCAnc3VidGl0bGUyJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBMaW5rOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IExpc3RDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgTGlzdENvbnRleHQuZGlzcGxheU5hbWUgPSAnTGlzdENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgTGlzdENvbnRleHQ7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlMaXN0Jywgc2xvdCk7XG59XG5jb25zdCBsaXN0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3QnLCBbJ3Jvb3QnLCAncGFkZGluZycsICdkZW5zZScsICdzdWJoZWFkZXInXSk7XG5leHBvcnQgZGVmYXVsdCBsaXN0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRlbnNlXCIsIFwiZGlzYWJsZVBhZGRpbmdcIiwgXCJzdWJoZWFkZXJcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IExpc3RDb250ZXh0IGZyb20gJy4vTGlzdENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0TGlzdFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbGlzdENsYXNzZXMnO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGRpc2FibGVQYWRkaW5nLFxuICAgIGRlbnNlLFxuICAgIHN1YmhlYWRlclxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVQYWRkaW5nICYmICdwYWRkaW5nJywgZGVuc2UgJiYgJ2RlbnNlJywgc3ViaGVhZGVyICYmICdzdWJoZWFkZXInXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldExpc3RVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IExpc3RSb290ID0gc3R5bGVkKCd1bCcsIHtcbiAgbmFtZTogJ011aUxpc3QnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYgc3R5bGVzLnBhZGRpbmcsIG93bmVyU3RhdGUuZGVuc2UgJiYgc3R5bGVzLmRlbnNlLCBvd25lclN0YXRlLnN1YmhlYWRlciAmJiBzdHlsZXMuc3ViaGVhZGVyXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBsaXN0U3R5bGU6ICdub25lJyxcbiAgbWFyZ2luOiAwLFxuICBwYWRkaW5nOiAwLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xufSwgIW93bmVyU3RhdGUuZGlzYWJsZVBhZGRpbmcgJiYge1xuICBwYWRkaW5nVG9wOiA4LFxuICBwYWRkaW5nQm90dG9tOiA4XG59LCBvd25lclN0YXRlLnN1YmhlYWRlciAmJiB7XG4gIHBhZGRpbmdUb3A6IDBcbn0pKTtcbmNvbnN0IExpc3QgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBMaXN0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUxpc3QnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICd1bCcsXG4gICAgICBkZW5zZSA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVBhZGRpbmcgPSBmYWxzZSxcbiAgICAgIHN1YmhlYWRlclxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBjb250ZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIGRlbnNlXG4gIH0pLCBbZGVuc2VdKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBkZW5zZSxcbiAgICBkaXNhYmxlUGFkZGluZ1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTGlzdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3hzKExpc3RSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjaGlsZHJlbjogW3N1YmhlYWRlciwgY2hpbGRyZW5dXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBMaXN0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGNvbXBhY3QgdmVydGljYWwgcGFkZGluZyBkZXNpZ25lZCBmb3Iga2V5Ym9hcmQgYW5kIG1vdXNlIGlucHV0IGlzIHVzZWQgZm9yXG4gICAqIHRoZSBsaXN0IGFuZCBsaXN0IGl0ZW1zLlxuICAgKiBUaGUgcHJvcCBpcyBhdmFpbGFibGUgdG8gZGVzY2VuZGFudCBjb21wb25lbnRzIGFzIHRoZSBgZGVuc2VgIGNvbnRleHQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZW5zZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHZlcnRpY2FsIHBhZGRpbmcgaXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBhZGRpbmc6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIHN1YmhlYWRlciwgbm9ybWFsbHkgYExpc3RTdWJoZWFkZXJgLlxuICAgKi9cbiAgc3ViaGVhZGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IExpc3Q7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWN0aW9uc1wiLCBcImF1dG9Gb2N1c1wiLCBcImF1dG9Gb2N1c0l0ZW1cIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkSXRlbXNGb2N1c2FibGVcIiwgXCJkaXNhYmxlTGlzdFdyYXBcIiwgXCJvbktleURvd25cIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNGcmFnbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgb3duZXJEb2N1bWVudCBmcm9tICcuLi91dGlscy9vd25lckRvY3VtZW50JztcbmltcG9ydCBMaXN0IGZyb20gJy4uL0xpc3QnO1xuaW1wb3J0IGdldFNjcm9sbGJhclNpemUgZnJvbSAnLi4vdXRpbHMvZ2V0U2Nyb2xsYmFyU2l6ZSc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91dGlscy91c2VFbmhhbmNlZEVmZmVjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gbmV4dEl0ZW0obGlzdCwgaXRlbSwgZGlzYWJsZUxpc3RXcmFwKSB7XG4gIGlmIChsaXN0ID09PSBpdGVtKSB7XG4gICAgcmV0dXJuIGxpc3QuZmlyc3RDaGlsZDtcbiAgfVxuICBpZiAoaXRlbSAmJiBpdGVtLm5leHRFbGVtZW50U2libGluZykge1xuICAgIHJldHVybiBpdGVtLm5leHRFbGVtZW50U2libGluZztcbiAgfVxuICByZXR1cm4gZGlzYWJsZUxpc3RXcmFwID8gbnVsbCA6IGxpc3QuZmlyc3RDaGlsZDtcbn1cbmZ1bmN0aW9uIHByZXZpb3VzSXRlbShsaXN0LCBpdGVtLCBkaXNhYmxlTGlzdFdyYXApIHtcbiAgaWYgKGxpc3QgPT09IGl0ZW0pIHtcbiAgICByZXR1cm4gZGlzYWJsZUxpc3RXcmFwID8gbGlzdC5maXJzdENoaWxkIDogbGlzdC5sYXN0Q2hpbGQ7XG4gIH1cbiAgaWYgKGl0ZW0gJiYgaXRlbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgcmV0dXJuIGl0ZW0ucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgfVxuICByZXR1cm4gZGlzYWJsZUxpc3RXcmFwID8gbnVsbCA6IGxpc3QubGFzdENoaWxkO1xufVxuZnVuY3Rpb24gdGV4dENyaXRlcmlhTWF0Y2hlcyhuZXh0Rm9jdXMsIHRleHRDcml0ZXJpYSkge1xuICBpZiAodGV4dENyaXRlcmlhID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsZXQgdGV4dCA9IG5leHRGb2N1cy5pbm5lclRleHQ7XG4gIGlmICh0ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBqc2RvbSBkb2Vzbid0IHN1cHBvcnQgaW5uZXJUZXh0XG4gICAgdGV4dCA9IG5leHRGb2N1cy50ZXh0Q29udGVudDtcbiAgfVxuICB0ZXh0ID0gdGV4dC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0ZXh0Q3JpdGVyaWEucmVwZWF0aW5nKSB7XG4gICAgcmV0dXJuIHRleHRbMF0gPT09IHRleHRDcml0ZXJpYS5rZXlzWzBdO1xuICB9XG4gIHJldHVybiB0ZXh0LmluZGV4T2YodGV4dENyaXRlcmlhLmtleXMuam9pbignJykpID09PSAwO1xufVxuZnVuY3Rpb24gbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCB0cmF2ZXJzYWxGdW5jdGlvbiwgdGV4dENyaXRlcmlhKSB7XG4gIGxldCB3cmFwcGVkT25jZSA9IGZhbHNlO1xuICBsZXQgbmV4dEZvY3VzID0gdHJhdmVyc2FsRnVuY3Rpb24obGlzdCwgY3VycmVudEZvY3VzLCBjdXJyZW50Rm9jdXMgPyBkaXNhYmxlTGlzdFdyYXAgOiBmYWxzZSk7XG4gIHdoaWxlIChuZXh0Rm9jdXMpIHtcbiAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AuXG4gICAgaWYgKG5leHRGb2N1cyA9PT0gbGlzdC5maXJzdENoaWxkKSB7XG4gICAgICBpZiAod3JhcHBlZE9uY2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgd3JhcHBlZE9uY2UgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFNhbWUgbG9naWMgYXMgdXNlQXV0b2NvbXBsZXRlLmpzXG4gICAgY29uc3QgbmV4dEZvY3VzRGlzYWJsZWQgPSBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlID8gZmFsc2UgOiBuZXh0Rm9jdXMuZGlzYWJsZWQgfHwgbmV4dEZvY3VzLmdldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcpID09PSAndHJ1ZSc7XG4gICAgaWYgKCFuZXh0Rm9jdXMuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpIHx8ICF0ZXh0Q3JpdGVyaWFNYXRjaGVzKG5leHRGb2N1cywgdGV4dENyaXRlcmlhKSB8fCBuZXh0Rm9jdXNEaXNhYmxlZCkge1xuICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBlbGVtZW50LlxuICAgICAgbmV4dEZvY3VzID0gdHJhdmVyc2FsRnVuY3Rpb24obGlzdCwgbmV4dEZvY3VzLCBkaXNhYmxlTGlzdFdyYXApO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Rm9jdXMuZm9jdXMoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQSBwZXJtYW5lbnRseSBkaXNwbGF5ZWQgbWVudSBmb2xsb3dpbmcgaHR0cHM6Ly93d3cudzMub3JnL1dBSS9BUklBL2FwZy9wYXR0ZXJucy9tZW51LWJ1dHRvbi8uXG4gKiBJdCdzIGV4cG9zZWQgdG8gaGVscCBjdXN0b21pemF0aW9uIG9mIHRoZSBbYE1lbnVgXSgvbWF0ZXJpYWwtdWkvYXBpL21lbnUvKSBjb21wb25lbnQgaWYgeW91XG4gKiB1c2UgaXQgc2VwYXJhdGVseSB5b3UgbmVlZCB0byBtb3ZlIGZvY3VzIGludG8gdGhlIGNvbXBvbmVudCBtYW51YWxseS4gT25jZVxuICogdGhlIGZvY3VzIGlzIHBsYWNlZCBpbnNpZGUgdGhlIGNvbXBvbmVudCBpdCBpcyBmdWxseSBrZXlib2FyZCBhY2Nlc3NpYmxlLlxuICovXG5jb25zdCBNZW51TGlzdCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE1lbnVMaXN0KHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgLy8gcHJpdmF0ZVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICAgIGFjdGlvbnMsXG4gICAgICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgICAgIGF1dG9Gb2N1c0l0ZW0gPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUxpc3RXcmFwID0gZmFsc2UsXG4gICAgICBvbktleURvd24sXG4gICAgICB2YXJpYW50ID0gJ3NlbGVjdGVkTWVudSdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgbGlzdFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgdGV4dENyaXRlcmlhUmVmID0gUmVhY3QudXNlUmVmKHtcbiAgICBrZXlzOiBbXSxcbiAgICByZXBlYXRpbmc6IHRydWUsXG4gICAgcHJldmlvdXNLZXlNYXRjaGVkOiB0cnVlLFxuICAgIGxhc3RUaW1lOiBudWxsXG4gIH0pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGF1dG9Gb2N1cykge1xuICAgICAgbGlzdFJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9LCBbYXV0b0ZvY3VzXSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoYWN0aW9ucywgKCkgPT4gKHtcbiAgICBhZGp1c3RTdHlsZUZvclNjcm9sbGJhcjogKGNvbnRhaW5lckVsZW1lbnQsIHtcbiAgICAgIGRpcmVjdGlvblxuICAgIH0pID0+IHtcbiAgICAgIC8vIExldCdzIGlnbm9yZSB0aGF0IHBpZWNlIG9mIGxvZ2ljIGlmIHVzZXJzIGFyZSBhbHJlYWR5IG92ZXJyaWRpbmcgdGhlIHdpZHRoXG4gICAgICAvLyBvZiB0aGUgbWVudS5cbiAgICAgIGNvbnN0IG5vRXhwbGljaXRXaWR0aCA9ICFsaXN0UmVmLmN1cnJlbnQuc3R5bGUud2lkdGg7XG4gICAgICBpZiAoY29udGFpbmVyRWxlbWVudC5jbGllbnRIZWlnaHQgPCBsaXN0UmVmLmN1cnJlbnQuY2xpZW50SGVpZ2h0ICYmIG5vRXhwbGljaXRXaWR0aCkge1xuICAgICAgICBjb25zdCBzY3JvbGxiYXJTaXplID0gYCR7Z2V0U2Nyb2xsYmFyU2l6ZShvd25lckRvY3VtZW50KGNvbnRhaW5lckVsZW1lbnQpKX1weGA7XG4gICAgICAgIGxpc3RSZWYuY3VycmVudC5zdHlsZVtkaXJlY3Rpb24gPT09ICdydGwnID8gJ3BhZGRpbmdMZWZ0JyA6ICdwYWRkaW5nUmlnaHQnXSA9IHNjcm9sbGJhclNpemU7XG4gICAgICAgIGxpc3RSZWYuY3VycmVudC5zdHlsZS53aWR0aCA9IGBjYWxjKDEwMCUgKyAke3Njcm9sbGJhclNpemV9KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFJlZi5jdXJyZW50O1xuICAgIH1cbiAgfSksIFtdKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBsaXN0ID0gbGlzdFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7RWxlbWVudH0gLSB3aWxsIGFsd2F5cyBiZSBkZWZpbmVkIHNpbmNlIHdlIGFyZSBpbiBhIGtleWRvd24gaGFuZGxlclxuICAgICAqIGF0dGFjaGVkIHRvIGFuIGVsZW1lbnQuIEEga2V5ZG93biBldmVudCBpcyBlaXRoZXIgZGlzcGF0Y2hlZCB0byB0aGUgYWN0aXZlRWxlbWVudFxuICAgICAqIG9yIGRvY3VtZW50LmJvZHkgb3IgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LiBPbmx5IHRoZSBmaXJzdCBjYXNlIHdpbGxcbiAgICAgKiB0cmlnZ2VyIHRoaXMgc3BlY2lmaWMgaGFuZGxlci5cbiAgICAgKi9cbiAgICBjb25zdCBjdXJyZW50Rm9jdXMgPSBvd25lckRvY3VtZW50KGxpc3QpLmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIC8vIFByZXZlbnQgc2Nyb2xsIG9mIHRoZSBwYWdlXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgcHJldmlvdXNJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIG51bGwsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgbmV4dEl0ZW0pO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnRW5kJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBudWxsLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIHByZXZpb3VzSXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjcml0ZXJpYSA9IHRleHRDcml0ZXJpYVJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgbG93ZXJLZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGN1cnJUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICBpZiAoY3JpdGVyaWEua2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIFJlc2V0XG4gICAgICAgIGlmIChjdXJyVGltZSAtIGNyaXRlcmlhLmxhc3RUaW1lID4gNTAwKSB7XG4gICAgICAgICAgY3JpdGVyaWEua2V5cyA9IFtdO1xuICAgICAgICAgIGNyaXRlcmlhLnJlcGVhdGluZyA9IHRydWU7XG4gICAgICAgICAgY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjcml0ZXJpYS5yZXBlYXRpbmcgJiYgbG93ZXJLZXkgIT09IGNyaXRlcmlhLmtleXNbMF0pIHtcbiAgICAgICAgICBjcml0ZXJpYS5yZXBlYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3JpdGVyaWEubGFzdFRpbWUgPSBjdXJyVGltZTtcbiAgICAgIGNyaXRlcmlhLmtleXMucHVzaChsb3dlcktleSk7XG4gICAgICBjb25zdCBrZWVwRm9jdXNPbkN1cnJlbnQgPSBjdXJyZW50Rm9jdXMgJiYgIWNyaXRlcmlhLnJlcGVhdGluZyAmJiB0ZXh0Q3JpdGVyaWFNYXRjaGVzKGN1cnJlbnRGb2N1cywgY3JpdGVyaWEpO1xuICAgICAgaWYgKGNyaXRlcmlhLnByZXZpb3VzS2V5TWF0Y2hlZCAmJiAoa2VlcEZvY3VzT25DdXJyZW50IHx8IG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGZhbHNlLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSwgY3JpdGVyaWEpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbktleURvd24pIHtcbiAgICAgIG9uS2V5RG93bihldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKGxpc3RSZWYsIHJlZik7XG5cbiAgLyoqXG4gICAqIHRoZSBpbmRleCBvZiB0aGUgaXRlbSBzaG91bGQgcmVjZWl2ZSBmb2N1c1xuICAgKiBpbiBhIGB2YXJpYW50PVwic2VsZWN0ZWRNZW51XCJgIGl0J3MgdGhlIGZpcnN0IGBzZWxlY3RlZGAgaXRlbVxuICAgKiBvdGhlcndpc2UgaXQncyB0aGUgdmVyeSBmaXJzdCBpdGVtLlxuICAgKi9cbiAgbGV0IGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAvLyBzaW5jZSB3ZSBpbmplY3QgZm9jdXMgcmVsYXRlZCBwcm9wcyBpbnRvIGNoaWxkcmVuIHdlIGhhdmUgdG8gZG8gYSBsb29rYWhlYWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlcmUgaXMgYSBgc2VsZWN0ZWRgIGl0ZW0uIFdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBsYXN0IGBzZWxlY3RlZGBcbiAgLy8gaXRlbSBhbmQgdXNlIHRoZSBmaXJzdCB2YWxpZCBpdGVtIGFzIGEgZmFsbGJhY2tcbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIGlmIChhY3RpdmVJdGVtSW5kZXggPT09IGluZGV4KSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCArPSAxO1xuICAgICAgICBpZiAoYWN0aXZlSXRlbUluZGV4ID49IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIC8vIHRoZXJlIGFyZSBubyBmb2N1c2FibGUgaXRlbXMgd2l0aGluIHRoZSBsaXN0LlxuICAgICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaXNGcmFnbWVudChjaGlsZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbXCJNVUk6IFRoZSBNZW51IGNvbXBvbmVudCBkb2Vzbid0IGFjY2VwdCBhIEZyYWdtZW50IGFzIGEgY2hpbGQuXCIsICdDb25zaWRlciBwcm92aWRpbmcgYW4gYXJyYXkgaW5zdGVhZC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghY2hpbGQucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh2YXJpYW50ID09PSAnc2VsZWN0ZWRNZW51JyAmJiBjaGlsZC5wcm9wcy5zZWxlY3RlZCkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlSXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gaW5kZXggJiYgKGNoaWxkLnByb3BzLmRpc2FibGVkIHx8IGNoaWxkLnByb3BzLm11aVNraXBMaXN0SGlnaGxpZ2h0IHx8IGNoaWxkLnR5cGUubXVpU2tpcExpc3RIaWdobGlnaHQpKSB7XG4gICAgICBhY3RpdmVJdGVtSW5kZXggKz0gMTtcbiAgICAgIGlmIChhY3RpdmVJdGVtSW5kZXggPj0gY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIC8vIHRoZXJlIGFyZSBubyBmb2N1c2FibGUgaXRlbXMgd2l0aGluIHRoZSBsaXN0LlxuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBpdGVtcyA9IFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gYWN0aXZlSXRlbUluZGV4KSB7XG4gICAgICBjb25zdCBuZXdDaGlsZFByb3BzID0ge307XG4gICAgICBpZiAoYXV0b0ZvY3VzSXRlbSkge1xuICAgICAgICBuZXdDaGlsZFByb3BzLmF1dG9Gb2N1cyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGQucHJvcHMudGFiSW5kZXggPT09IHVuZGVmaW5lZCAmJiB2YXJpYW50ID09PSAnc2VsZWN0ZWRNZW51Jykge1xuICAgICAgICBuZXdDaGlsZFByb3BzLnRhYkluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCBuZXdDaGlsZFByb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3QsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcIm1lbnVcIixcbiAgICByZWY6IGhhbmRsZVJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgdGFiSW5kZXg6IGF1dG9Gb2N1cyA/IDAgOiAtMVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBpdGVtc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE1lbnVMaXN0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBmb2N1cyB0aGUgYFtyb2xlPVwibWVudVwiXWAgY29udGFpbmVyIGFuZCBtb3ZlIGludG8gdGFiIG9yZGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBmb2N1cyB0aGUgZmlyc3QgbWVudWl0ZW0gaWYgYHZhcmlhbnQ9XCJtZW51XCJgIG9yIHNlbGVjdGVkIGl0ZW1cbiAgICogaWYgYHZhcmlhbnQ9XCJzZWxlY3RlZE1lbnVcImAuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXNJdGVtOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE1lbnVMaXN0IGNvbnRlbnRzLCBub3JtYWxseSBgTWVudUl0ZW1gcy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBhbGxvdyBmb2N1cyBvbiBkaXNhYmxlZCBpdGVtcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkSXRlbXNGb2N1c2FibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbWVudSBpdGVtcyB3aWxsIG5vdCB3cmFwIGZvY3VzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUxpc3RXcmFwOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuIFVzZSBgbWVudWAgdG8gcHJldmVudCBzZWxlY3RlZCBpdGVtcyBmcm9tIGltcGFjdGluZyB0aGUgaW5pdGlhbCBmb2N1c1xuICAgKiBhbmQgdGhlIHZlcnRpY2FsIGFsaWdubWVudCByZWxhdGl2ZSB0byB0aGUgYW5jaG9yIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdzZWxlY3RlZE1lbnUnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydtZW51JywgJ3NlbGVjdGVkTWVudSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1lbnVMaXN0OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVudVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTWVudScsIHNsb3QpO1xufVxuY29uc3QgbWVudUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlNZW51JywgWydyb290JywgJ3BhcGVyJywgJ2xpc3QnXSk7XG5leHBvcnQgZGVmYXVsdCBtZW51Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvbkVudGVyaW5nXCJdLFxuICBfZXhjbHVkZWQyID0gW1wiYXV0b0ZvY3VzXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlQXV0b0ZvY3VzSXRlbVwiLCBcIk1lbnVMaXN0UHJvcHNcIiwgXCJvbkNsb3NlXCIsIFwib3BlblwiLCBcIlBhcGVyUHJvcHNcIiwgXCJQb3BvdmVyQ2xhc3Nlc1wiLCBcInRyYW5zaXRpb25EdXJhdGlvblwiLCBcIlRyYW5zaXRpb25Qcm9wc1wiLCBcInZhcmlhbnRcIiwgXCJzbG90c1wiLCBcInNsb3RQcm9wc1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzRnJhZ21lbnQgfSBmcm9tICdyZWFjdC1pcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgSFRNTEVsZW1lbnRUeXBlIGZyb20gJ0BtdWkvdXRpbHMvSFRNTEVsZW1lbnRUeXBlJztcbmltcG9ydCB7IHVzZVJ0bCB9IGZyb20gJ0BtdWkvc3lzdGVtL1J0bFByb3ZpZGVyJztcbmltcG9ydCB1c2VTbG90UHJvcHMgZnJvbSAnQG11aS91dGlscy91c2VTbG90UHJvcHMnO1xuaW1wb3J0IE1lbnVMaXN0IGZyb20gJy4uL01lbnVMaXN0JztcbmltcG9ydCBQb3BvdmVyLCB7IFBvcG92ZXJQYXBlciB9IGZyb20gJy4uL1BvcG92ZXInO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCB7IGdldE1lbnVVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL21lbnVDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBSVExfT1JJR0lOID0ge1xuICB2ZXJ0aWNhbDogJ3RvcCcsXG4gIGhvcml6b250YWw6ICdyaWdodCdcbn07XG5jb25zdCBMVFJfT1JJR0lOID0ge1xuICB2ZXJ0aWNhbDogJ3RvcCcsXG4gIGhvcml6b250YWw6ICdsZWZ0J1xufTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBwYXBlcjogWydwYXBlciddLFxuICAgIGxpc3Q6IFsnbGlzdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TWVudVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgTWVudVJvb3QgPSBzdHlsZWQoUG9wb3Zlciwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpTWVudScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuZXhwb3J0IGNvbnN0IE1lbnVQYXBlciA9IHN0eWxlZChQb3BvdmVyUGFwZXIsIHtcbiAgbmFtZTogJ011aU1lbnUnLFxuICBzbG90OiAnUGFwZXInLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5wYXBlclxufSkoe1xuICAvLyBzcGVjWjogVGhlIG1heGltdW0gaGVpZ2h0IG9mIGEgc2ltcGxlIG1lbnUgc2hvdWxkIGJlIG9uZSBvciBtb3JlIHJvd3MgbGVzcyB0aGFuIHRoZSB2aWV3XG4gIC8vIGhlaWdodC4gVGhpcyBlbnN1cmVzIGEgdGFwcGFibGUgYXJlYSBvdXRzaWRlIG9mIHRoZSBzaW1wbGUgbWVudSB3aXRoIHdoaWNoIHRvIGRpc21pc3NcbiAgLy8gdGhlIG1lbnUuXG4gIG1heEhlaWdodDogJ2NhbGMoMTAwJSAtIDk2cHgpJyxcbiAgLy8gQWRkIGlPUyBtb21lbnR1bSBzY3JvbGxpbmcgZm9yIGlPUyA8IDEzLjBcbiAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCdcbn0pO1xuY29uc3QgTWVudU1lbnVMaXN0ID0gc3R5bGVkKE1lbnVMaXN0LCB7XG4gIG5hbWU6ICdNdWlNZW51JyxcbiAgc2xvdDogJ0xpc3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5saXN0XG59KSh7XG4gIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gIG91dGxpbmU6IDBcbn0pO1xuY29uc3QgTWVudSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE1lbnUoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfc2xvdHMkcGFwZXIsIF9zbG90UHJvcHMkcGFwZXI7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTWVudSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGF1dG9Gb2N1cyA9IHRydWUsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRpc2FibGVBdXRvRm9jdXNJdGVtID0gZmFsc2UsXG4gICAgICBNZW51TGlzdFByb3BzID0ge30sXG4gICAgICBvbkNsb3NlLFxuICAgICAgb3BlbixcbiAgICAgIFBhcGVyUHJvcHMgPSB7fSxcbiAgICAgIFBvcG92ZXJDbGFzc2VzLFxuICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gJ2F1dG8nLFxuICAgICAgVHJhbnNpdGlvblByb3BzOiB7XG4gICAgICAgIG9uRW50ZXJpbmdcbiAgICAgIH0gPSB7fSxcbiAgICAgIHZhcmlhbnQgPSAnc2VsZWN0ZWRNZW51JyxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICBzbG90UHJvcHMgPSB7fVxuICAgIH0gPSBwcm9wcyxcbiAgICBUcmFuc2l0aW9uUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcy5UcmFuc2l0aW9uUHJvcHMsIF9leGNsdWRlZCksXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkMik7XG4gIGNvbnN0IGlzUnRsID0gdXNlUnRsKCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhdXRvRm9jdXMsXG4gICAgZGlzYWJsZUF1dG9Gb2N1c0l0ZW0sXG4gICAgTWVudUxpc3RQcm9wcyxcbiAgICBvbkVudGVyaW5nLFxuICAgIFBhcGVyUHJvcHMsXG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgIFRyYW5zaXRpb25Qcm9wcyxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IGF1dG9Gb2N1c0l0ZW0gPSBhdXRvRm9jdXMgJiYgIWRpc2FibGVBdXRvRm9jdXNJdGVtICYmIG9wZW47XG4gIGNvbnN0IG1lbnVMaXN0QWN0aW9uc1JlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlRW50ZXJpbmcgPSAoZWxlbWVudCwgaXNBcHBlYXJpbmcpID0+IHtcbiAgICBpZiAobWVudUxpc3RBY3Rpb25zUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1lbnVMaXN0QWN0aW9uc1JlZi5jdXJyZW50LmFkanVzdFN0eWxlRm9yU2Nyb2xsYmFyKGVsZW1lbnQsIHtcbiAgICAgICAgZGlyZWN0aW9uOiBpc1J0bCA/ICdydGwnIDogJ2x0cidcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAob25FbnRlcmluZykge1xuICAgICAgb25FbnRlcmluZyhlbGVtZW50LCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVMaXN0S2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIG9uQ2xvc2UoZXZlbnQsICd0YWJLZXlEb3duJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gc2hvdWxkIHJlY2VpdmUgZm9jdXNcbiAgICogaW4gYSBgdmFyaWFudD1cInNlbGVjdGVkTWVudVwiYCBpdCdzIHRoZSBmaXJzdCBgc2VsZWN0ZWRgIGl0ZW1cbiAgICogb3RoZXJ3aXNlIGl0J3MgdGhlIHZlcnkgZmlyc3QgaXRlbS5cbiAgICovXG4gIGxldCBhY3RpdmVJdGVtSW5kZXggPSAtMTtcbiAgLy8gc2luY2Ugd2UgaW5qZWN0IGZvY3VzIHJlbGF0ZWQgcHJvcHMgaW50byBjaGlsZHJlbiB3ZSBoYXZlIHRvIGRvIGEgbG9va2FoZWFkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGEgYHNlbGVjdGVkYCBpdGVtLiBXZSdyZSBsb29raW5nIGZvciB0aGUgbGFzdCBgc2VsZWN0ZWRgXG4gIC8vIGl0ZW0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsaWQgaXRlbSBhcyBhIGZhbGxiYWNrXG4gIFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZyYWdtZW50KGNoaWxkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtcIk1VSTogVGhlIE1lbnUgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjaGlsZC5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgaWYgKHZhcmlhbnQgPT09ICdzZWxlY3RlZE1lbnUnICYmIGNoaWxkLnByb3BzLnNlbGVjdGVkKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmVJdGVtSW5kZXggPT09IC0xKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IFBhcGVyU2xvdCA9IChfc2xvdHMkcGFwZXIgPSBzbG90cy5wYXBlcikgIT0gbnVsbCA/IF9zbG90cyRwYXBlciA6IE1lbnVQYXBlcjtcbiAgY29uc3QgcGFwZXJFeHRlcm5hbFNsb3RQcm9wcyA9IChfc2xvdFByb3BzJHBhcGVyID0gc2xvdFByb3BzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RQcm9wcyRwYXBlciA6IFBhcGVyUHJvcHM7XG4gIGNvbnN0IHJvb3RTbG90UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBzbG90cy5yb290LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBzbG90UHJvcHMucm9vdCxcbiAgICBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogW2NsYXNzZXMucm9vdCwgY2xhc3NOYW1lXVxuICB9KTtcbiAgY29uc3QgcGFwZXJTbG90UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBQYXBlclNsb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IHBhcGVyRXh0ZXJuYWxTbG90UHJvcHMsXG4gICAgb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMucGFwZXJcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChNZW51Um9vdCwgX2V4dGVuZHMoe1xuICAgIG9uQ2xvc2U6IG9uQ2xvc2UsXG4gICAgYW5jaG9yT3JpZ2luOiB7XG4gICAgICB2ZXJ0aWNhbDogJ2JvdHRvbScsXG4gICAgICBob3Jpem9udGFsOiBpc1J0bCA/ICdyaWdodCcgOiAnbGVmdCdcbiAgICB9LFxuICAgIHRyYW5zZm9ybU9yaWdpbjogaXNSdGwgPyBSVExfT1JJR0lOIDogTFRSX09SSUdJTixcbiAgICBzbG90czoge1xuICAgICAgcGFwZXI6IFBhcGVyU2xvdCxcbiAgICAgIHJvb3Q6IHNsb3RzLnJvb3RcbiAgICB9LFxuICAgIHNsb3RQcm9wczoge1xuICAgICAgcm9vdDogcm9vdFNsb3RQcm9wcyxcbiAgICAgIHBhcGVyOiBwYXBlclNsb3RQcm9wc1xuICAgIH0sXG4gICAgb3Blbjogb3BlbixcbiAgICByZWY6IHJlZixcbiAgICB0cmFuc2l0aW9uRHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICBUcmFuc2l0aW9uUHJvcHM6IF9leHRlbmRzKHtcbiAgICAgIG9uRW50ZXJpbmc6IGhhbmRsZUVudGVyaW5nXG4gICAgfSwgVHJhbnNpdGlvblByb3BzKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogUG9wb3ZlckNsYXNzZXMsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KE1lbnVNZW51TGlzdCwgX2V4dGVuZHMoe1xuICAgICAgb25LZXlEb3duOiBoYW5kbGVMaXN0S2V5RG93bixcbiAgICAgIGFjdGlvbnM6IG1lbnVMaXN0QWN0aW9uc1JlZixcbiAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzICYmIChhY3RpdmVJdGVtSW5kZXggPT09IC0xIHx8IGRpc2FibGVBdXRvRm9jdXNJdGVtKSxcbiAgICAgIGF1dG9Gb2N1c0l0ZW06IGF1dG9Gb2N1c0l0ZW0sXG4gICAgICB2YXJpYW50OiB2YXJpYW50XG4gICAgfSwgTWVudUxpc3RQcm9wcywge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMubGlzdCwgTWVudUxpc3RQcm9wcy5jbGFzc05hbWUpLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTWVudS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQsIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZS5cbiAgICogSXQncyB1c2VkIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIG1lbnUuXG4gICAqL1xuICBhbmNob3JFbDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAgKERlZmF1bHQpIHdpbGwgZm9jdXMgdGhlIGBbcm9sZT1cIm1lbnVcIl1gIGlmIG5vIGZvY3VzYWJsZSBjaGlsZCBpcyBmb3VuZC4gRGlzYWJsZWRcbiAgICogY2hpbGRyZW4gYXJlIG5vdCBmb2N1c2FibGUuIElmIHlvdSBzZXQgdGhpcyBwcm9wIHRvIGBmYWxzZWAgZm9jdXMgd2lsbCBiZSBwbGFjZWRcbiAgICogb24gdGhlIHBhcmVudCBtb2RhbCBjb250YWluZXIuIFRoaXMgaGFzIHNldmVyZSBhY2Nlc3NpYmlsaXR5IGltcGxpY2F0aW9uc1xuICAgKiBhbmQgc2hvdWxkIG9ubHkgYmUgY29uc2lkZXJlZCBpZiB5b3UgbWFuYWdlIGZvY3VzIG90aGVyd2lzZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE1lbnUgY29udGVudHMsIG5vcm1hbGx5IGBNZW51SXRlbWBzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFdoZW4gb3BlbmluZyB0aGUgbWVudSB3aWxsIG5vdCBmb2N1cyB0aGUgYWN0aXZlIGl0ZW0gYnV0IHRoZSBgW3JvbGU9XCJtZW51XCJdYFxuICAgKiB1bmxlc3MgYGF1dG9Gb2N1c2AgaXMgYWxzbyBzZXQgdG8gYGZhbHNlYC4gTm90IHVzaW5nIHRoZSBkZWZhdWx0IG1lYW5zIG5vdFxuICAgKiBmb2xsb3dpbmcgV0FJLUFSSUEgYXV0aG9yaW5nIHByYWN0aWNlcy4gUGxlYXNlIGJlIGNvbnNpZGVyYXRlIGFib3V0IHBvc3NpYmxlXG4gICAqIGFjY2Vzc2liaWxpdHkgaW1wbGljYXRpb25zLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUF1dG9Gb2N1c0l0ZW06IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BNZW51TGlzdGBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS1saXN0LykgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIE1lbnVMaXN0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gQ2FuIGJlOiBgXCJlc2NhcGVLZXlEb3duXCJgLCBgXCJiYWNrZHJvcENsaWNrXCJgLCBgXCJ0YWJLZXlEb3duXCJgLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgUGFwZXJQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIGBjbGFzc2VzYCBwcm9wIGFwcGxpZWQgdG8gdGhlIFtgUG9wb3ZlcmBdKC9tYXRlcmlhbC11aS9hcGkvcG9wb3Zlci8pIGVsZW1lbnQuXG4gICAqL1xuICBQb3BvdmVyQ2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHBhcGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGFwZXI6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSB0cmFuc2l0aW9uIGluIGBtc2AsIG9yICdhdXRvJ1xuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbi8pIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIFRyYW5zaXRpb25Qcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS4gVXNlIGBtZW51YCB0byBwcmV2ZW50IHNlbGVjdGVkIGl0ZW1zIGZyb20gaW1wYWN0aW5nIHRoZSBpbml0aWFsIGZvY3VzLlxuICAgKiBAZGVmYXVsdCAnc2VsZWN0ZWRNZW51J1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnbWVudScsICdzZWxlY3RlZE1lbnUnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBNZW51OyIsImltcG9ydCB7IHVuc3RhYmxlX293bmVyV2luZG93IGFzIG93bmVyV2luZG93LCB1bnN0YWJsZV9vd25lckRvY3VtZW50IGFzIG93bmVyRG9jdW1lbnQsIHVuc3RhYmxlX2dldFNjcm9sbGJhclNpemUgYXMgZ2V0U2Nyb2xsYmFyU2l6ZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuLy8gSXMgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgZGlzcGxheWVkP1xuZnVuY3Rpb24gaXNPdmVyZmxvd2luZyhjb250YWluZXIpIHtcbiAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChjb250YWluZXIpO1xuICBpZiAoZG9jLmJvZHkgPT09IGNvbnRhaW5lcikge1xuICAgIHJldHVybiBvd25lcldpbmRvdyhjb250YWluZXIpLmlubmVyV2lkdGggPiBkb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICB9XG4gIHJldHVybiBjb250YWluZXIuc2Nyb2xsSGVpZ2h0ID4gY29udGFpbmVyLmNsaWVudEhlaWdodDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhcmlhSGlkZGVuKGVsZW1lbnQsIHNob3cpIHtcbiAgaWYgKHNob3cpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRQYWRkaW5nUmlnaHQoZWxlbWVudCkge1xuICByZXR1cm4gcGFyc2VJbnQob3duZXJXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wYWRkaW5nUmlnaHQsIDEwKSB8fCAwO1xufVxuZnVuY3Rpb24gaXNBcmlhSGlkZGVuRm9yYmlkZGVuT25FbGVtZW50KGVsZW1lbnQpIHtcbiAgLy8gVGhlIGZvcmJpZGRlbiBIVE1MIHRhZ3MgYXJlIHRoZSBvbmVzIGZyb20gQVJJQSBzcGVjaWZpY2F0aW9uIHRoYXRcbiAgLy8gY2FuIGJlIGNoaWxkcmVuIG9mIGJvZHkgYW5kIGNhbid0IGhhdmUgYXJpYS1oaWRkZW4gYXR0cmlidXRlLlxuICAvLyBjZi4gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWwtYXJpYS8jZG9jY29uZm9ybWFuY2VcbiAgY29uc3QgZm9yYmlkZGVuVGFnTmFtZXMgPSBbJ1RFTVBMQVRFJywgJ1NDUklQVCcsICdTVFlMRScsICdMSU5LJywgJ01BUCcsICdNRVRBJywgJ05PU0NSSVBUJywgJ1BJQ1RVUkUnLCAnQ09MJywgJ0NPTEdST1VQJywgJ1BBUkFNJywgJ1NMT1QnLCAnU09VUkNFJywgJ1RSQUNLJ107XG4gIGNvbnN0IGlzRm9yYmlkZGVuVGFnTmFtZSA9IGZvcmJpZGRlblRhZ05hbWVzLmluZGV4T2YoZWxlbWVudC50YWdOYW1lKSAhPT0gLTE7XG4gIGNvbnN0IGlzSW5wdXRIaWRkZW4gPSBlbGVtZW50LnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ2hpZGRlbic7XG4gIHJldHVybiBpc0ZvcmJpZGRlblRhZ05hbWUgfHwgaXNJbnB1dEhpZGRlbjtcbn1cbmZ1bmN0aW9uIGFyaWFIaWRkZW5TaWJsaW5ncyhjb250YWluZXIsIG1vdW50RWxlbWVudCwgY3VycmVudEVsZW1lbnQsIGVsZW1lbnRzVG9FeGNsdWRlLCBzaG93KSB7XG4gIGNvbnN0IGJsYWNrbGlzdCA9IFttb3VudEVsZW1lbnQsIGN1cnJlbnRFbGVtZW50LCAuLi5lbGVtZW50c1RvRXhjbHVkZV07XG4gIFtdLmZvckVhY2guY2FsbChjb250YWluZXIuY2hpbGRyZW4sIGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IGlzTm90RXhjbHVkZWRFbGVtZW50ID0gYmxhY2tsaXN0LmluZGV4T2YoZWxlbWVudCkgPT09IC0xO1xuICAgIGNvbnN0IGlzTm90Rm9yYmlkZGVuRWxlbWVudCA9ICFpc0FyaWFIaWRkZW5Gb3JiaWRkZW5PbkVsZW1lbnQoZWxlbWVudCk7XG4gICAgaWYgKGlzTm90RXhjbHVkZWRFbGVtZW50ICYmIGlzTm90Rm9yYmlkZGVuRWxlbWVudCkge1xuICAgICAgYXJpYUhpZGRlbihlbGVtZW50LCBzaG93KTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gZmluZEluZGV4T2YoaXRlbXMsIGNhbGxiYWNrKSB7XG4gIGxldCBpZHggPSAtMTtcbiAgaXRlbXMuc29tZSgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBpZiAoY2FsbGJhY2soaXRlbSkpIHtcbiAgICAgIGlkeCA9IGluZGV4O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiBpZHg7XG59XG5mdW5jdGlvbiBoYW5kbGVDb250YWluZXIoY29udGFpbmVySW5mbywgcHJvcHMpIHtcbiAgY29uc3QgcmVzdG9yZVN0eWxlID0gW107XG4gIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRhaW5lckluZm8uY29udGFpbmVyO1xuICBpZiAoIXByb3BzLmRpc2FibGVTY3JvbGxMb2NrKSB7XG4gICAgaWYgKGlzT3ZlcmZsb3dpbmcoY29udGFpbmVyKSkge1xuICAgICAgLy8gQ29tcHV0ZSB0aGUgc2l6ZSBiZWZvcmUgYXBwbHlpbmcgb3ZlcmZsb3cgaGlkZGVuIHRvIGF2b2lkIGFueSBzY3JvbGwganVtcHMuXG4gICAgICBjb25zdCBzY3JvbGxiYXJTaXplID0gZ2V0U2Nyb2xsYmFyU2l6ZShvd25lckRvY3VtZW50KGNvbnRhaW5lcikpO1xuICAgICAgcmVzdG9yZVN0eWxlLnB1c2goe1xuICAgICAgICB2YWx1ZTogY29udGFpbmVyLnN0eWxlLnBhZGRpbmdSaWdodCxcbiAgICAgICAgcHJvcGVydHk6ICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgICAgZWw6IGNvbnRhaW5lclxuICAgICAgfSk7XG4gICAgICAvLyBVc2UgY29tcHV0ZWQgc3R5bGUsIGhlcmUgdG8gZ2V0IHRoZSByZWFsIHBhZGRpbmcgdG8gYWRkIG91ciBzY3JvbGxiYXIgd2lkdGguXG4gICAgICBjb250YWluZXIuc3R5bGUucGFkZGluZ1JpZ2h0ID0gYCR7Z2V0UGFkZGluZ1JpZ2h0KGNvbnRhaW5lcikgKyBzY3JvbGxiYXJTaXplfXB4YDtcblxuICAgICAgLy8gLm11aS1maXhlZCBpcyBhIGdsb2JhbCBoZWxwZXIuXG4gICAgICBjb25zdCBmaXhlZEVsZW1lbnRzID0gb3duZXJEb2N1bWVudChjb250YWluZXIpLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tdWktZml4ZWQnKTtcbiAgICAgIFtdLmZvckVhY2guY2FsbChmaXhlZEVsZW1lbnRzLCBlbGVtZW50ID0+IHtcbiAgICAgICAgcmVzdG9yZVN0eWxlLnB1c2goe1xuICAgICAgICAgIHZhbHVlOiBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCxcbiAgICAgICAgICBwcm9wZXJ0eTogJ3BhZGRpbmctcmlnaHQnLFxuICAgICAgICAgIGVsOiBlbGVtZW50XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IGAke2dldFBhZGRpbmdSaWdodChlbGVtZW50KSArIHNjcm9sbGJhclNpemV9cHhgO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBzY3JvbGxDb250YWluZXI7XG4gICAgaWYgKGNvbnRhaW5lci5wYXJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgc2Nyb2xsQ29udGFpbmVyID0gb3duZXJEb2N1bWVudChjb250YWluZXIpLmJvZHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN1cHBvcnQgaHRtbCBvdmVyZmxvdy15OiBhdXRvIGZvciBzY3JvbGwgc3RhYmlsaXR5IGJldHdlZW4gcGFnZXNcbiAgICAgIC8vIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL2ZvcmNlLXZlcnRpY2FsLXNjcm9sbGJhci9cbiAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRhaW5lci5wYXJlbnRFbGVtZW50O1xuICAgICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3coY29udGFpbmVyKTtcbiAgICAgIHNjcm9sbENvbnRhaW5lciA9IChwYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBhcmVudC5ub2RlTmFtZSkgPT09ICdIVE1MJyAmJiBjb250YWluZXJXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpLm92ZXJmbG93WSA9PT0gJ3Njcm9sbCcgPyBwYXJlbnQgOiBjb250YWluZXI7XG4gICAgfVxuXG4gICAgLy8gQmxvY2sgdGhlIHNjcm9sbCBldmVuIGlmIG5vIHNjcm9sbGJhciBpcyB2aXNpYmxlIHRvIGFjY291bnQgZm9yIG1vYmlsZSBrZXlib2FyZFxuICAgIC8vIHNjcmVlbnNpemUgc2hyaW5rLlxuICAgIHJlc3RvcmVTdHlsZS5wdXNoKHtcbiAgICAgIHZhbHVlOiBzY3JvbGxDb250YWluZXIuc3R5bGUub3ZlcmZsb3csXG4gICAgICBwcm9wZXJ0eTogJ292ZXJmbG93JyxcbiAgICAgIGVsOiBzY3JvbGxDb250YWluZXJcbiAgICB9LCB7XG4gICAgICB2YWx1ZTogc2Nyb2xsQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93WCxcbiAgICAgIHByb3BlcnR5OiAnb3ZlcmZsb3cteCcsXG4gICAgICBlbDogc2Nyb2xsQ29udGFpbmVyXG4gICAgfSwge1xuICAgICAgdmFsdWU6IHNjcm9sbENvbnRhaW5lci5zdHlsZS5vdmVyZmxvd1ksXG4gICAgICBwcm9wZXJ0eTogJ292ZXJmbG93LXknLFxuICAgICAgZWw6IHNjcm9sbENvbnRhaW5lclxuICAgIH0pO1xuICAgIHNjcm9sbENvbnRhaW5lci5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICB9XG4gIGNvbnN0IHJlc3RvcmUgPSAoKSA9PiB7XG4gICAgcmVzdG9yZVN0eWxlLmZvckVhY2goKHtcbiAgICAgIHZhbHVlLFxuICAgICAgZWwsXG4gICAgICBwcm9wZXJ0eVxuICAgIH0pID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICByZXR1cm4gcmVzdG9yZTtcbn1cbmZ1bmN0aW9uIGdldEhpZGRlblNpYmxpbmdzKGNvbnRhaW5lcikge1xuICBjb25zdCBoaWRkZW5TaWJsaW5ncyA9IFtdO1xuICBbXS5mb3JFYWNoLmNhbGwoY29udGFpbmVyLmNoaWxkcmVuLCBlbGVtZW50ID0+IHtcbiAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJykgPT09ICd0cnVlJykge1xuICAgICAgaGlkZGVuU2libGluZ3MucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaGlkZGVuU2libGluZ3M7XG59XG4vKipcbiAqIEBpZ25vcmUgLSBkbyBub3QgZG9jdW1lbnQuXG4gKlxuICogUHJvcGVyIHN0YXRlIG1hbmFnZW1lbnQgZm9yIGNvbnRhaW5lcnMgYW5kIHRoZSBtb2RhbHMgaW4gdGhvc2UgY29udGFpbmVycy5cbiAqIFNpbXBsaWZpZWQsIGJ1dCBpbnNwaXJlZCBieSByZWFjdC1vdmVybGF5J3MgTW9kYWxNYW5hZ2VyIGNsYXNzLlxuICogVXNlZCBieSB0aGUgTW9kYWwgdG8gZW5zdXJlIHByb3BlciBzdHlsaW5nIG9mIGNvbnRhaW5lcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2RhbE1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lcnMgPSB2b2lkIDA7XG4gICAgdGhpcy5tb2RhbHMgPSB2b2lkIDA7XG4gICAgdGhpcy5tb2RhbHMgPSBbXTtcbiAgICB0aGlzLmNvbnRhaW5lcnMgPSBbXTtcbiAgfVxuICBhZGQobW9kYWwsIGNvbnRhaW5lcikge1xuICAgIGxldCBtb2RhbEluZGV4ID0gdGhpcy5tb2RhbHMuaW5kZXhPZihtb2RhbCk7XG4gICAgaWYgKG1vZGFsSW5kZXggIT09IC0xKSB7XG4gICAgICByZXR1cm4gbW9kYWxJbmRleDtcbiAgICB9XG4gICAgbW9kYWxJbmRleCA9IHRoaXMubW9kYWxzLmxlbmd0aDtcbiAgICB0aGlzLm1vZGFscy5wdXNoKG1vZGFsKTtcblxuICAgIC8vIElmIHRoZSBtb2RhbCB3ZSBhcmUgYWRkaW5nIGlzIGFscmVhZHkgaW4gdGhlIERPTS5cbiAgICBpZiAobW9kYWwubW9kYWxSZWYpIHtcbiAgICAgIGFyaWFIaWRkZW4obW9kYWwubW9kYWxSZWYsIGZhbHNlKTtcbiAgICB9XG4gICAgY29uc3QgaGlkZGVuU2libGluZ3MgPSBnZXRIaWRkZW5TaWJsaW5ncyhjb250YWluZXIpO1xuICAgIGFyaWFIaWRkZW5TaWJsaW5ncyhjb250YWluZXIsIG1vZGFsLm1vdW50LCBtb2RhbC5tb2RhbFJlZiwgaGlkZGVuU2libGluZ3MsIHRydWUpO1xuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0uY29udGFpbmVyID09PSBjb250YWluZXIpO1xuICAgIGlmIChjb250YWluZXJJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyc1tjb250YWluZXJJbmRleF0ubW9kYWxzLnB1c2gobW9kYWwpO1xuICAgICAgcmV0dXJuIG1vZGFsSW5kZXg7XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVycy5wdXNoKHtcbiAgICAgIG1vZGFsczogW21vZGFsXSxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHJlc3RvcmU6IG51bGwsXG4gICAgICBoaWRkZW5TaWJsaW5nc1xuICAgIH0pO1xuICAgIHJldHVybiBtb2RhbEluZGV4O1xuICB9XG4gIG1vdW50KG1vZGFsLCBwcm9wcykge1xuICAgIGNvbnN0IGNvbnRhaW5lckluZGV4ID0gZmluZEluZGV4T2YodGhpcy5jb250YWluZXJzLCBpdGVtID0+IGl0ZW0ubW9kYWxzLmluZGV4T2YobW9kYWwpICE9PSAtMSk7XG4gICAgY29uc3QgY29udGFpbmVySW5mbyA9IHRoaXMuY29udGFpbmVyc1tjb250YWluZXJJbmRleF07XG4gICAgaWYgKCFjb250YWluZXJJbmZvLnJlc3RvcmUpIHtcbiAgICAgIGNvbnRhaW5lckluZm8ucmVzdG9yZSA9IGhhbmRsZUNvbnRhaW5lcihjb250YWluZXJJbmZvLCBwcm9wcyk7XG4gICAgfVxuICB9XG4gIHJlbW92ZShtb2RhbCwgYXJpYUhpZGRlblN0YXRlID0gdHJ1ZSkge1xuICAgIGNvbnN0IG1vZGFsSW5kZXggPSB0aGlzLm1vZGFscy5pbmRleE9mKG1vZGFsKTtcbiAgICBpZiAobW9kYWxJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBtb2RhbEluZGV4O1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXJJbmRleCA9IGZpbmRJbmRleE9mKHRoaXMuY29udGFpbmVycywgaXRlbSA9PiBpdGVtLm1vZGFscy5pbmRleE9mKG1vZGFsKSAhPT0gLTEpO1xuICAgIGNvbnN0IGNvbnRhaW5lckluZm8gPSB0aGlzLmNvbnRhaW5lcnNbY29udGFpbmVySW5kZXhdO1xuICAgIGNvbnRhaW5lckluZm8ubW9kYWxzLnNwbGljZShjb250YWluZXJJbmZvLm1vZGFscy5pbmRleE9mKG1vZGFsKSwgMSk7XG4gICAgdGhpcy5tb2RhbHMuc3BsaWNlKG1vZGFsSW5kZXgsIDEpO1xuXG4gICAgLy8gSWYgdGhhdCB3YXMgdGhlIGxhc3QgbW9kYWwgaW4gYSBjb250YWluZXIsIGNsZWFuIHVwIHRoZSBjb250YWluZXIuXG4gICAgaWYgKGNvbnRhaW5lckluZm8ubW9kYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gVGhlIG1vZGFsIG1pZ2h0IGJlIGNsb3NlZCBiZWZvcmUgaXQgaGFkIHRoZSBjaGFuY2UgdG8gYmUgbW91bnRlZCBpbiB0aGUgRE9NLlxuICAgICAgaWYgKGNvbnRhaW5lckluZm8ucmVzdG9yZSkge1xuICAgICAgICBjb250YWluZXJJbmZvLnJlc3RvcmUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChtb2RhbC5tb2RhbFJlZikge1xuICAgICAgICAvLyBJbiBjYXNlIHRoZSBtb2RhbCB3YXNuJ3QgaW4gdGhlIERPTSB5ZXQuXG4gICAgICAgIGFyaWFIaWRkZW4obW9kYWwubW9kYWxSZWYsIGFyaWFIaWRkZW5TdGF0ZSk7XG4gICAgICB9XG4gICAgICBhcmlhSGlkZGVuU2libGluZ3MoY29udGFpbmVySW5mby5jb250YWluZXIsIG1vZGFsLm1vdW50LCBtb2RhbC5tb2RhbFJlZiwgY29udGFpbmVySW5mby5oaWRkZW5TaWJsaW5ncywgZmFsc2UpO1xuICAgICAgdGhpcy5jb250YWluZXJzLnNwbGljZShjb250YWluZXJJbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSBtYWtlIHN1cmUgdGhlIG5leHQgdG9wIG1vZGFsIGlzIHZpc2libGUgdG8gYSBzY3JlZW4gcmVhZGVyLlxuICAgICAgY29uc3QgbmV4dFRvcCA9IGNvbnRhaW5lckluZm8ubW9kYWxzW2NvbnRhaW5lckluZm8ubW9kYWxzLmxlbmd0aCAtIDFdO1xuICAgICAgLy8gYXMgc29vbiBhcyBhIG1vZGFsIGlzIGFkZGluZyBpdHMgbW9kYWxSZWYgaXMgdW5kZWZpbmVkLiBpdCBjYW4ndCBzZXRcbiAgICAgIC8vIGFyaWEtaGlkZGVuIGJlY2F1c2UgdGhlIGRvbSBlbGVtZW50IGRvZXNuJ3QgZXhpc3QgZWl0aGVyXG4gICAgICAvLyB3aGVuIG1vZGFsIHdhcyB1bm1vdW50ZWQgYmVmb3JlIG1vZGFsUmVmIGdldHMgbnVsbFxuICAgICAgaWYgKG5leHRUb3AubW9kYWxSZWYpIHtcbiAgICAgICAgYXJpYUhpZGRlbihuZXh0VG9wLm1vZGFsUmVmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2RhbEluZGV4O1xuICB9XG4gIGlzVG9wTW9kYWwobW9kYWwpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbHMubGVuZ3RoID4gMCAmJiB0aGlzLm1vZGFsc1t0aGlzLm1vZGFscy5sZW5ndGggLSAxXSA9PT0gbW9kYWw7XG4gIH1cbn0iLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdW5zdGFibGVfb3duZXJEb2N1bWVudCBhcyBvd25lckRvY3VtZW50LCB1bnN0YWJsZV91c2VGb3JrUmVmIGFzIHVzZUZvcmtSZWYsIHVuc3RhYmxlX3VzZUV2ZW50Q2FsbGJhY2sgYXMgdXNlRXZlbnRDYWxsYmFjaywgdW5zdGFibGVfY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIGFzIGNyZWF0ZUNoYWluZWRGdW5jdGlvbiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGV4dHJhY3RFdmVudEhhbmRsZXJzIGZyb20gJ0BtdWkvdXRpbHMvZXh0cmFjdEV2ZW50SGFuZGxlcnMnO1xuaW1wb3J0IHsgTW9kYWxNYW5hZ2VyLCBhcmlhSGlkZGVuIH0gZnJvbSAnLi9Nb2RhbE1hbmFnZXInO1xuZnVuY3Rpb24gZ2V0Q29udGFpbmVyKGNvbnRhaW5lcikge1xuICByZXR1cm4gdHlwZW9mIGNvbnRhaW5lciA9PT0gJ2Z1bmN0aW9uJyA/IGNvbnRhaW5lcigpIDogY29udGFpbmVyO1xufVxuZnVuY3Rpb24gZ2V0SGFzVHJhbnNpdGlvbihjaGlsZHJlbikge1xuICByZXR1cm4gY2hpbGRyZW4gPyBjaGlsZHJlbi5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaW4nKSA6IGZhbHNlO1xufVxuXG4vLyBBIG1vZGFsIG1hbmFnZXIgdXNlZCB0byB0cmFjayBhbmQgbWFuYWdlIHRoZSBzdGF0ZSBvZiBvcGVuIE1vZGFscy5cbi8vIE1vZGFscyBkb24ndCBvcGVuIG9uIHRoZSBzZXJ2ZXIgc28gdGhpcyB3b24ndCBjb25mbGljdCB3aXRoIGNvbmN1cnJlbnQgcmVxdWVzdHMuXG5jb25zdCBkZWZhdWx0TWFuYWdlciA9IG5ldyBNb2RhbE1hbmFnZXIoKTtcbi8qKlxuICpcbiAqIERlbW9zOlxuICpcbiAqIC0gW01vZGFsXShodHRwczovL211aS5jb20vYmFzZS11aS9yZWFjdC1tb2RhbC8jaG9vaylcbiAqXG4gKiBBUEk6XG4gKlxuICogLSBbdXNlTW9kYWwgQVBJXShodHRwczovL211aS5jb20vYmFzZS11aS9yZWFjdC1tb2RhbC9ob29rcy1hcGkvI3VzZS1tb2RhbClcbiAqL1xuZnVuY3Rpb24gdXNlTW9kYWwocGFyYW1ldGVycykge1xuICBjb25zdCB7XG4gICAgY29udGFpbmVyLFxuICAgIGRpc2FibGVFc2NhcGVLZXlEb3duID0gZmFsc2UsXG4gICAgZGlzYWJsZVNjcm9sbExvY2sgPSBmYWxzZSxcbiAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIGxvZ2ljIC0gQmFzZSBVSSBzdXBwb3J0cyB0aGUgbWFuYWdlciBhcyBhIHByb3AgdG9vXG4gICAgbWFuYWdlciA9IGRlZmF1bHRNYW5hZ2VyLFxuICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uID0gZmFsc2UsXG4gICAgb25UcmFuc2l0aW9uRW50ZXIsXG4gICAgb25UcmFuc2l0aW9uRXhpdGVkLFxuICAgIGNoaWxkcmVuLFxuICAgIG9uQ2xvc2UsXG4gICAgb3BlbixcbiAgICByb290UmVmXG4gIH0gPSBwYXJhbWV0ZXJzO1xuXG4gIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgbG9naWNcbiAgY29uc3QgbW9kYWwgPSBSZWFjdC51c2VSZWYoe30pO1xuICBjb25zdCBtb3VudE5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IG1vZGFsUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKG1vZGFsUmVmLCByb290UmVmKTtcbiAgY29uc3QgW2V4aXRlZCwgc2V0RXhpdGVkXSA9IFJlYWN0LnVzZVN0YXRlKCFvcGVuKTtcbiAgY29uc3QgaGFzVHJhbnNpdGlvbiA9IGdldEhhc1RyYW5zaXRpb24oY2hpbGRyZW4pO1xuICBsZXQgYXJpYUhpZGRlblByb3AgPSB0cnVlO1xuICBpZiAocGFyYW1ldGVyc1snYXJpYS1oaWRkZW4nXSA9PT0gJ2ZhbHNlJyB8fCBwYXJhbWV0ZXJzWydhcmlhLWhpZGRlbiddID09PSBmYWxzZSkge1xuICAgIGFyaWFIaWRkZW5Qcm9wID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgZ2V0RG9jID0gKCkgPT4gb3duZXJEb2N1bWVudChtb3VudE5vZGVSZWYuY3VycmVudCk7XG4gIGNvbnN0IGdldE1vZGFsID0gKCkgPT4ge1xuICAgIG1vZGFsLmN1cnJlbnQubW9kYWxSZWYgPSBtb2RhbFJlZi5jdXJyZW50O1xuICAgIG1vZGFsLmN1cnJlbnQubW91bnQgPSBtb3VudE5vZGVSZWYuY3VycmVudDtcbiAgICByZXR1cm4gbW9kYWwuY3VycmVudDtcbiAgfTtcbiAgY29uc3QgaGFuZGxlTW91bnRlZCA9ICgpID0+IHtcbiAgICBtYW5hZ2VyLm1vdW50KGdldE1vZGFsKCksIHtcbiAgICAgIGRpc2FibGVTY3JvbGxMb2NrXG4gICAgfSk7XG5cbiAgICAvLyBGaXggYSBidWcgb24gQ2hyb21lIHdoZXJlIHRoZSBzY3JvbGwgaXNuJ3QgaW5pdGlhbGx5IDAuXG4gICAgaWYgKG1vZGFsUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1vZGFsUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZU9wZW4gPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCByZXNvbHZlZENvbnRhaW5lciA9IGdldENvbnRhaW5lcihjb250YWluZXIpIHx8IGdldERvYygpLmJvZHk7XG4gICAgbWFuYWdlci5hZGQoZ2V0TW9kYWwoKSwgcmVzb2x2ZWRDb250YWluZXIpO1xuXG4gICAgLy8gVGhlIGVsZW1lbnQgd2FzIGFscmVhZHkgbW91bnRlZC5cbiAgICBpZiAobW9kYWxSZWYuY3VycmVudCkge1xuICAgICAgaGFuZGxlTW91bnRlZCgpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGlzVG9wTW9kYWwgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBtYW5hZ2VyLmlzVG9wTW9kYWwoZ2V0TW9kYWwoKSksIFttYW5hZ2VyXSk7XG4gIGNvbnN0IGhhbmRsZVBvcnRhbFJlZiA9IHVzZUV2ZW50Q2FsbGJhY2sobm9kZSA9PiB7XG4gICAgbW91bnROb2RlUmVmLmN1cnJlbnQgPSBub2RlO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiBpc1RvcE1vZGFsKCkpIHtcbiAgICAgIGhhbmRsZU1vdW50ZWQoKTtcbiAgICB9IGVsc2UgaWYgKG1vZGFsUmVmLmN1cnJlbnQpIHtcbiAgICAgIGFyaWFIaWRkZW4obW9kYWxSZWYuY3VycmVudCwgYXJpYUhpZGRlblByb3ApO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG1hbmFnZXIucmVtb3ZlKGdldE1vZGFsKCksIGFyaWFIaWRkZW5Qcm9wKTtcbiAgfSwgW2FyaWFIaWRkZW5Qcm9wLCBtYW5hZ2VyXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgfTtcbiAgfSwgW2hhbmRsZUNsb3NlXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIGhhbmRsZU9wZW4oKTtcbiAgICB9IGVsc2UgaWYgKCFoYXNUcmFuc2l0aW9uIHx8ICFjbG9zZUFmdGVyVHJhbnNpdGlvbikge1xuICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9XG4gIH0sIFtvcGVuLCBoYW5kbGVDbG9zZSwgaGFzVHJhbnNpdGlvbiwgY2xvc2VBZnRlclRyYW5zaXRpb24sIGhhbmRsZU9wZW5dKTtcbiAgY29uc3QgY3JlYXRlSGFuZGxlS2V5RG93biA9IG90aGVySGFuZGxlcnMgPT4gZXZlbnQgPT4ge1xuICAgIHZhciBfb3RoZXJIYW5kbGVycyRvbktleUQ7XG4gICAgKF9vdGhlckhhbmRsZXJzJG9uS2V5RCA9IG90aGVySGFuZGxlcnMub25LZXlEb3duKSA9PSBudWxsIHx8IF9vdGhlckhhbmRsZXJzJG9uS2V5RC5jYWxsKG90aGVySGFuZGxlcnMsIGV2ZW50KTtcblxuICAgIC8vIFRoZSBoYW5kbGVyIGRvZXNuJ3QgdGFrZSBldmVudC5kZWZhdWx0UHJldmVudGVkIGludG8gYWNjb3VudDpcbiAgICAvL1xuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCkgaXMgbWVhbnQgdG8gc3RvcCBkZWZhdWx0IGJlaGF2aW9ycyBsaWtlXG4gICAgLy8gY2xpY2tpbmcgYSBjaGVja2JveCB0byBjaGVjayBpdCwgaGl0dGluZyBhIGJ1dHRvbiB0byBzdWJtaXQgYSBmb3JtLFxuICAgIC8vIGFuZCBoaXR0aW5nIGxlZnQgYXJyb3cgdG8gbW92ZSB0aGUgY3Vyc29yIGluIGEgdGV4dCBpbnB1dCBldGMuXG4gICAgLy8gT25seSBzcGVjaWFsIEhUTUwgZWxlbWVudHMgaGF2ZSB0aGVzZSBkZWZhdWx0IGJlaGF2aW9ycy5cbiAgICBpZiAoZXZlbnQua2V5ICE9PSAnRXNjYXBlJyB8fCBldmVudC53aGljaCA9PT0gMjI5IHx8XG4gICAgLy8gV2FpdCB1bnRpbCBJTUUgaXMgc2V0dGxlZC5cbiAgICAhaXNUb3BNb2RhbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghZGlzYWJsZUVzY2FwZUtleURvd24pIHtcbiAgICAgIC8vIFN3YWxsb3cgdGhlIGV2ZW50LCBpbiBjYXNlIHNvbWVvbmUgaXMgbGlzdGVuaW5nIGZvciB0aGUgZXNjYXBlIGtleSBvbiB0aGUgYm9keS5cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgb25DbG9zZShldmVudCwgJ2VzY2FwZUtleURvd24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGNyZWF0ZUhhbmRsZUJhY2tkcm9wQ2xpY2sgPSBvdGhlckhhbmRsZXJzID0+IGV2ZW50ID0+IHtcbiAgICB2YXIgX290aGVySGFuZGxlcnMkb25DbGljO1xuICAgIChfb3RoZXJIYW5kbGVycyRvbkNsaWMgPSBvdGhlckhhbmRsZXJzLm9uQ2xpY2spID09IG51bGwgfHwgX290aGVySGFuZGxlcnMkb25DbGljLmNhbGwob3RoZXJIYW5kbGVycywgZXZlbnQpO1xuICAgIGlmIChldmVudC50YXJnZXQgIT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgIG9uQ2xvc2UoZXZlbnQsICdiYWNrZHJvcENsaWNrJyk7XG4gICAgfVxuICB9O1xuICBjb25zdCBnZXRSb290UHJvcHMgPSAob3RoZXJIYW5kbGVycyA9IHt9KSA9PiB7XG4gICAgY29uc3QgcHJvcHNFdmVudEhhbmRsZXJzID0gZXh0cmFjdEV2ZW50SGFuZGxlcnMocGFyYW1ldGVycyk7XG5cbiAgICAvLyBUaGUgY3VzdG9tIGV2ZW50IGhhbmRsZXJzIHNob3VsZG4ndCBiZSBzcHJlYWQgb24gdGhlIHJvb3QgZWxlbWVudFxuICAgIGRlbGV0ZSBwcm9wc0V2ZW50SGFuZGxlcnMub25UcmFuc2l0aW9uRW50ZXI7XG4gICAgZGVsZXRlIHByb3BzRXZlbnRIYW5kbGVycy5vblRyYW5zaXRpb25FeGl0ZWQ7XG4gICAgY29uc3QgZXh0ZXJuYWxFdmVudEhhbmRsZXJzID0gX2V4dGVuZHMoe30sIHByb3BzRXZlbnRIYW5kbGVycywgb3RoZXJIYW5kbGVycyk7XG4gICAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICAgIHJvbGU6ICdwcmVzZW50YXRpb24nXG4gICAgfSwgZXh0ZXJuYWxFdmVudEhhbmRsZXJzLCB7XG4gICAgICBvbktleURvd246IGNyZWF0ZUhhbmRsZUtleURvd24oZXh0ZXJuYWxFdmVudEhhbmRsZXJzKSxcbiAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGdldEJhY2tkcm9wUHJvcHMgPSAob3RoZXJIYW5kbGVycyA9IHt9KSA9PiB7XG4gICAgY29uc3QgZXh0ZXJuYWxFdmVudEhhbmRsZXJzID0gb3RoZXJIYW5kbGVycztcbiAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgJ2FyaWEtaGlkZGVuJzogdHJ1ZVxuICAgIH0sIGV4dGVybmFsRXZlbnRIYW5kbGVycywge1xuICAgICAgb25DbGljazogY3JlYXRlSGFuZGxlQmFja2Ryb3BDbGljayhleHRlcm5hbEV2ZW50SGFuZGxlcnMpLFxuICAgICAgb3BlblxuICAgIH0pO1xuICB9O1xuICBjb25zdCBnZXRUcmFuc2l0aW9uUHJvcHMgPSAoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlRW50ZXIgPSAoKSA9PiB7XG4gICAgICBzZXRFeGl0ZWQoZmFsc2UpO1xuICAgICAgaWYgKG9uVHJhbnNpdGlvbkVudGVyKSB7XG4gICAgICAgIG9uVHJhbnNpdGlvbkVudGVyKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVFeGl0ZWQgPSAoKSA9PiB7XG4gICAgICBzZXRFeGl0ZWQodHJ1ZSk7XG4gICAgICBpZiAob25UcmFuc2l0aW9uRXhpdGVkKSB7XG4gICAgICAgIG9uVHJhbnNpdGlvbkV4aXRlZCgpO1xuICAgICAgfVxuICAgICAgaWYgKGNsb3NlQWZ0ZXJUcmFuc2l0aW9uKSB7XG4gICAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgb25FbnRlcjogY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKGhhbmRsZUVudGVyLCBjaGlsZHJlbiA9PSBudWxsID8gdm9pZCAwIDogY2hpbGRyZW4ucHJvcHMub25FbnRlciksXG4gICAgICBvbkV4aXRlZDogY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKGhhbmRsZUV4aXRlZCwgY2hpbGRyZW4gPT0gbnVsbCA/IHZvaWQgMCA6IGNoaWxkcmVuLnByb3BzLm9uRXhpdGVkKVxuICAgIH07XG4gIH07XG4gIHJldHVybiB7XG4gICAgZ2V0Um9vdFByb3BzLFxuICAgIGdldEJhY2tkcm9wUHJvcHMsXG4gICAgZ2V0VHJhbnNpdGlvblByb3BzLFxuICAgIHJvb3RSZWY6IGhhbmRsZVJlZixcbiAgICBwb3J0YWxSZWY6IGhhbmRsZVBvcnRhbFJlZixcbiAgICBpc1RvcE1vZGFsLFxuICAgIGV4aXRlZCxcbiAgICBoYXNUcmFuc2l0aW9uXG4gIH07XG59XG5leHBvcnQgZGVmYXVsdCB1c2VNb2RhbDsiLCJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGFsVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlNb2RhbCcsIHNsb3QpO1xufVxuY29uc3QgbW9kYWxDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTW9kYWwnLCBbJ3Jvb3QnLCAnaGlkZGVuJywgJ2JhY2tkcm9wJ10pO1xuZXhwb3J0IGRlZmF1bHQgbW9kYWxDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIkJhY2tkcm9wQ29tcG9uZW50XCIsIFwiQmFja2Ryb3BQcm9wc1wiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIiwgXCJjbG9zZUFmdGVyVHJhbnNpdGlvblwiLCBcImNoaWxkcmVuXCIsIFwiY29udGFpbmVyXCIsIFwiY29tcG9uZW50XCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImRpc2FibGVBdXRvRm9jdXNcIiwgXCJkaXNhYmxlRW5mb3JjZUZvY3VzXCIsIFwiZGlzYWJsZUVzY2FwZUtleURvd25cIiwgXCJkaXNhYmxlUG9ydGFsXCIsIFwiZGlzYWJsZVJlc3RvcmVGb2N1c1wiLCBcImRpc2FibGVTY3JvbGxMb2NrXCIsIFwiaGlkZUJhY2tkcm9wXCIsIFwia2VlcE1vdW50ZWRcIiwgXCJvbkJhY2tkcm9wQ2xpY2tcIiwgXCJvbkNsb3NlXCIsIFwib25UcmFuc2l0aW9uRW50ZXJcIiwgXCJvblRyYW5zaXRpb25FeGl0ZWRcIiwgXCJvcGVuXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJ0aGVtZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBIVE1MRWxlbWVudFR5cGUgZnJvbSAnQG11aS91dGlscy9IVE1MRWxlbWVudFR5cGUnO1xuaW1wb3J0IGVsZW1lbnRBY2NlcHRpbmdSZWYgZnJvbSAnQG11aS91dGlscy9lbGVtZW50QWNjZXB0aW5nUmVmJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB1c2VTbG90UHJvcHMgZnJvbSAnQG11aS91dGlscy91c2VTbG90UHJvcHMnO1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuLi9VbnN0YWJsZV9UcmFwRm9jdXMnO1xuaW1wb3J0IFBvcnRhbCBmcm9tICcuLi9Qb3J0YWwnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBCYWNrZHJvcCBmcm9tICcuLi9CYWNrZHJvcCc7XG5pbXBvcnQgdXNlTW9kYWwgZnJvbSAnLi91c2VNb2RhbCc7XG5pbXBvcnQgeyBnZXRNb2RhbFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbW9kYWxDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgb3BlbixcbiAgICBleGl0ZWQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIW9wZW4gJiYgZXhpdGVkICYmICdoaWRkZW4nXSxcbiAgICBiYWNrZHJvcDogWydiYWNrZHJvcCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TW9kYWxVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IE1vZGFsUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpTW9kYWwnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgIW93bmVyU3RhdGUub3BlbiAmJiBvd25lclN0YXRlLmV4aXRlZCAmJiBzdHlsZXMuaGlkZGVuXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcG9zaXRpb246ICdmaXhlZCcsXG4gIHpJbmRleDogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnpJbmRleC5tb2RhbCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgdG9wOiAwLFxuICBsZWZ0OiAwXG59LCAhb3duZXJTdGF0ZS5vcGVuICYmIG93bmVyU3RhdGUuZXhpdGVkICYmIHtcbiAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbn0pKTtcbmNvbnN0IE1vZGFsQmFja2Ryb3AgPSBzdHlsZWQoQmFja2Ryb3AsIHtcbiAgbmFtZTogJ011aU1vZGFsJyxcbiAgc2xvdDogJ0JhY2tkcm9wJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgcmV0dXJuIHN0eWxlcy5iYWNrZHJvcDtcbiAgfVxufSkoe1xuICB6SW5kZXg6IC0xXG59KTtcblxuLyoqXG4gKiBNb2RhbCBpcyBhIGxvd2VyLWxldmVsIGNvbnN0cnVjdCB0aGF0IGlzIGxldmVyYWdlZCBieSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKlxuICogLSBbRGlhbG9nXSgvbWF0ZXJpYWwtdWkvYXBpL2RpYWxvZy8pXG4gKiAtIFtEcmF3ZXJdKC9tYXRlcmlhbC11aS9hcGkvZHJhd2VyLylcbiAqIC0gW01lbnVdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pXG4gKiAtIFtQb3BvdmVyXSgvbWF0ZXJpYWwtdWkvYXBpL3BvcG92ZXIvKVxuICpcbiAqIElmIHlvdSBhcmUgY3JlYXRpbmcgYSBtb2RhbCBkaWFsb2csIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUgW0RpYWxvZ10oL21hdGVyaWFsLXVpL2FwaS9kaWFsb2cvKSBjb21wb25lbnRcbiAqIHJhdGhlciB0aGFuIGRpcmVjdGx5IHVzaW5nIE1vZGFsLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHNoYXJlcyBtYW55IGNvbmNlcHRzIHdpdGggW3JlYWN0LW92ZXJsYXlzXShodHRwczovL3JlYWN0LWJvb3RzdHJhcC5naXRodWIuaW8vcmVhY3Qtb3ZlcmxheXMvI21vZGFscykuXG4gKi9cbmNvbnN0IE1vZGFsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTW9kYWwoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdHMkcm9vdCwgX3JlZjIsIF9zbG90cyRiYWNrZHJvcCwgX3Nsb3RQcm9wcyRyb290LCBfc2xvdFByb3BzJGJhY2tkcm9wO1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgbmFtZTogJ011aU1vZGFsJyxcbiAgICBwcm9wczogaW5Qcm9wc1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgQmFja2Ryb3BDb21wb25lbnQgPSBNb2RhbEJhY2tkcm9wLFxuICAgICAgQmFja2Ryb3BQcm9wcyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uID0gZmFsc2UsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgICAgZGlzYWJsZUF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUVuZm9yY2VGb2N1cyA9IGZhbHNlLFxuICAgICAgZGlzYWJsZUVzY2FwZUtleURvd24gPSBmYWxzZSxcbiAgICAgIGRpc2FibGVQb3J0YWwgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVSZXN0b3JlRm9jdXMgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVTY3JvbGxMb2NrID0gZmFsc2UsXG4gICAgICBoaWRlQmFja2Ryb3AgPSBmYWxzZSxcbiAgICAgIGtlZXBNb3VudGVkID0gZmFsc2UsXG4gICAgICBvbkJhY2tkcm9wQ2xpY2ssXG4gICAgICBvcGVuLFxuICAgICAgc2xvdFByb3BzLFxuICAgICAgc2xvdHNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHByb3BzV2l0aERlZmF1bHRzID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2xvc2VBZnRlclRyYW5zaXRpb24sXG4gICAgZGlzYWJsZUF1dG9Gb2N1cyxcbiAgICBkaXNhYmxlRW5mb3JjZUZvY3VzLFxuICAgIGRpc2FibGVFc2NhcGVLZXlEb3duLFxuICAgIGRpc2FibGVQb3J0YWwsXG4gICAgZGlzYWJsZVJlc3RvcmVGb2N1cyxcbiAgICBkaXNhYmxlU2Nyb2xsTG9jayxcbiAgICBoaWRlQmFja2Ryb3AsXG4gICAga2VlcE1vdW50ZWRcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICBnZXRSb290UHJvcHMsXG4gICAgZ2V0QmFja2Ryb3BQcm9wcyxcbiAgICBnZXRUcmFuc2l0aW9uUHJvcHMsXG4gICAgcG9ydGFsUmVmLFxuICAgIGlzVG9wTW9kYWwsXG4gICAgZXhpdGVkLFxuICAgIGhhc1RyYW5zaXRpb25cbiAgfSA9IHVzZU1vZGFsKF9leHRlbmRzKHt9LCBwcm9wc1dpdGhEZWZhdWx0cywge1xuICAgIHJvb3RSZWY6IHJlZlxuICB9KSk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHNXaXRoRGVmYXVsdHMsIHtcbiAgICBleGl0ZWRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgY2hpbGRQcm9wcyA9IHt9O1xuICBpZiAoY2hpbGRyZW4ucHJvcHMudGFiSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgIGNoaWxkUHJvcHMudGFiSW5kZXggPSAnLTEnO1xuICB9XG5cbiAgLy8gSXQncyBhIFRyYW5zaXRpb24gbGlrZSBjb21wb25lbnRcbiAgaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgICBjb25zdCB7XG4gICAgICBvbkVudGVyLFxuICAgICAgb25FeGl0ZWRcbiAgICB9ID0gZ2V0VHJhbnNpdGlvblByb3BzKCk7XG4gICAgY2hpbGRQcm9wcy5vbkVudGVyID0gb25FbnRlcjtcbiAgICBjaGlsZFByb3BzLm9uRXhpdGVkID0gb25FeGl0ZWQ7XG4gIH1cbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBjb21wb25lbnRzLlJvb3QpICE9IG51bGwgPyBfcmVmIDogTW9kYWxSb290O1xuICBjb25zdCBCYWNrZHJvcFNsb3QgPSAoX3JlZjIgPSAoX3Nsb3RzJGJhY2tkcm9wID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLmJhY2tkcm9wKSAhPSBudWxsID8gX3Nsb3RzJGJhY2tkcm9wIDogY29tcG9uZW50cy5CYWNrZHJvcCkgIT0gbnVsbCA/IF9yZWYyIDogQmFja2Ryb3BDb21wb25lbnQ7XG4gIGNvbnN0IHJvb3RTbG90UHJvcHMgPSAoX3Nsb3RQcm9wcyRyb290ID0gc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMucm9vdCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkcm9vdCA6IGNvbXBvbmVudHNQcm9wcy5yb290O1xuICBjb25zdCBiYWNrZHJvcFNsb3RQcm9wcyA9IChfc2xvdFByb3BzJGJhY2tkcm9wID0gc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMuYmFja2Ryb3ApICE9IG51bGwgPyBfc2xvdFByb3BzJGJhY2tkcm9wIDogY29tcG9uZW50c1Byb3BzLmJhY2tkcm9wO1xuICBjb25zdCByb290UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBSb290U2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogcm9vdFNsb3RQcm9wcyxcbiAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiBvdGhlcixcbiAgICBnZXRTbG90UHJvcHM6IGdldFJvb3RQcm9wcyxcbiAgICBhZGRpdGlvbmFsUHJvcHM6IHtcbiAgICAgIHJlZixcbiAgICAgIGFzOiBjb21wb25lbnRcbiAgICB9LFxuICAgIG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzTmFtZSwgcm9vdFNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogcm9vdFNsb3RQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsYXNzZXMucm9vdCwgIW93bmVyU3RhdGUub3BlbiAmJiBvd25lclN0YXRlLmV4aXRlZCAmJiAoY2xhc3NlcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3Nlcy5oaWRkZW4pKVxuICB9KTtcbiAgY29uc3QgYmFja2Ryb3BQcm9wcyA9IHVzZVNsb3RQcm9wcyh7XG4gICAgZWxlbWVudFR5cGU6IEJhY2tkcm9wU2xvdCxcbiAgICBleHRlcm5hbFNsb3RQcm9wczogYmFja2Ryb3BTbG90UHJvcHMsXG4gICAgYWRkaXRpb25hbFByb3BzOiBCYWNrZHJvcFByb3BzLFxuICAgIGdldFNsb3RQcm9wczogb3RoZXJIYW5kbGVycyA9PiB7XG4gICAgICByZXR1cm4gZ2V0QmFja2Ryb3BQcm9wcyhfZXh0ZW5kcyh7fSwgb3RoZXJIYW5kbGVycywge1xuICAgICAgICBvbkNsaWNrOiBlID0+IHtcbiAgICAgICAgICBpZiAob25CYWNrZHJvcENsaWNrKSB7XG4gICAgICAgICAgICBvbkJhY2tkcm9wQ2xpY2soZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvdGhlckhhbmRsZXJzICE9IG51bGwgJiYgb3RoZXJIYW5kbGVycy5vbkNsaWNrKSB7XG4gICAgICAgICAgICBvdGhlckhhbmRsZXJzLm9uQ2xpY2soZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSxcbiAgICBjbGFzc05hbWU6IGNsc3goYmFja2Ryb3BTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGJhY2tkcm9wU2xvdFByb3BzLmNsYXNzTmFtZSwgQmFja2Ryb3BQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogQmFja2Ryb3BQcm9wcy5jbGFzc05hbWUsIGNsYXNzZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsYXNzZXMuYmFja2Ryb3ApLFxuICAgIG93bmVyU3RhdGVcbiAgfSk7XG4gIGlmICgha2VlcE1vdW50ZWQgJiYgIW9wZW4gJiYgKCFoYXNUcmFuc2l0aW9uIHx8IGV4aXRlZCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUG9ydGFsLCB7XG4gICAgcmVmOiBwb3J0YWxSZWYsXG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgZGlzYWJsZVBvcnRhbDogZGlzYWJsZVBvcnRhbCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3hzKFJvb3RTbG90LCBfZXh0ZW5kcyh7fSwgcm9vdFByb3BzLCB7XG4gICAgICBjaGlsZHJlbjogWyFoaWRlQmFja2Ryb3AgJiYgQmFja2Ryb3BDb21wb25lbnQgPyAvKiNfX1BVUkVfXyovX2pzeChCYWNrZHJvcFNsb3QsIF9leHRlbmRzKHt9LCBiYWNrZHJvcFByb3BzKSkgOiBudWxsLCAvKiNfX1BVUkVfXyovX2pzeChGb2N1c1RyYXAsIHtcbiAgICAgICAgZGlzYWJsZUVuZm9yY2VGb2N1czogZGlzYWJsZUVuZm9yY2VGb2N1cyxcbiAgICAgICAgZGlzYWJsZUF1dG9Gb2N1czogZGlzYWJsZUF1dG9Gb2N1cyxcbiAgICAgICAgZGlzYWJsZVJlc3RvcmVGb2N1czogZGlzYWJsZVJlc3RvcmVGb2N1cyxcbiAgICAgICAgaXNFbmFibGVkOiBpc1RvcE1vZGFsLFxuICAgICAgICBvcGVuOiBvcGVuLFxuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgY2hpbGRQcm9wcylcbiAgICAgIH0pXVxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTW9kYWwucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQSBiYWNrZHJvcCBjb21wb25lbnQuIFRoaXMgcHJvcCBlbmFibGVzIGN1c3RvbSBiYWNrZHJvcCByZW5kZXJpbmcuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc2xvdHMuYmFja2Ryb3BgIGluc3RlYWQuIFdoaWxlIHRoaXMgcHJvcCBjdXJyZW50bHkgd29ya3MsIGl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uLlxuICAgKiBVc2UgdGhlIGBzbG90cy5iYWNrZHJvcGAgcHJvcCB0byBtYWtlIHlvdXIgYXBwbGljYXRpb24gcmVhZHkgZm9yIHRoZSBuZXh0IHZlcnNpb24gb2YgTWF0ZXJpYWwgVUkuXG4gICAqIEBkZWZhdWx0IHN0eWxlZChCYWNrZHJvcCwge1xuICAgKiAgIG5hbWU6ICdNdWlNb2RhbCcsXG4gICAqICAgc2xvdDogJ0JhY2tkcm9wJyxcbiAgICogICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICogICAgIHJldHVybiBzdHlsZXMuYmFja2Ryb3A7XG4gICAqICAgfSxcbiAgICogfSkoe1xuICAgKiAgIHpJbmRleDogLTEsXG4gICAqIH0pXG4gICAqL1xuICBCYWNrZHJvcENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BCYWNrZHJvcGBdKC9tYXRlcmlhbC11aS9hcGkvYmFja2Ryb3AvKSBlbGVtZW50LlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNsb3RQcm9wcy5iYWNrZHJvcGAgaW5zdGVhZC5cbiAgICovXG4gIEJhY2tkcm9wUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUgdGhlIE1vZGFsIHdhaXRzIHVudGlsIGEgbmVzdGVkIFRyYW5zaXRpb24gaXMgY29tcGxldGVkIGJlZm9yZSBjbG9zaW5nLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2xvc2VBZnRlclRyYW5zaXRpb246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgQmFja2Ryb3A6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RQcm9wc2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90UHJvcHNgIHByb3AgaW5zdGVhZCwgYXMgYGNvbXBvbmVudHNQcm9wc2Agd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFja2Ryb3A6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCBvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25lLlxuICAgKiBUaGUgYGNvbnRhaW5lcmAgd2lsbCBoYXZlIHRoZSBwb3J0YWwgY2hpbGRyZW4gYXBwZW5kZWQgdG8gaXQuXG4gICAqXG4gICAqIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgY2FsbGJhY2ssIHdoaWNoIGlzIGNhbGxlZCBpbiBhIFJlYWN0IGxheW91dCBlZmZlY3QuXG4gICAqIFRoaXMgbGV0cyB5b3Ugc2V0IHRoZSBjb250YWluZXIgZnJvbSBhIHJlZiwgYW5kIGFsc28gbWFrZXMgc2VydmVyLXNpZGUgcmVuZGVyaW5nIHBvc3NpYmxlLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSBib2R5IG9mIHRoZSB0b3AtbGV2ZWwgZG9jdW1lbnQgb2JqZWN0LFxuICAgKiBzbyBpdCdzIHNpbXBseSBgZG9jdW1lbnQuYm9keWAgbW9zdCBvZiB0aGUgdGltZS5cbiAgICovXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IHNoaWZ0IGZvY3VzIHRvIGl0c2VsZiB3aGVuIGl0IG9wZW5zLCBhbmRcbiAgICogcmVwbGFjZSBpdCB0byB0aGUgbGFzdCBmb2N1c2VkIGVsZW1lbnQgd2hlbiBpdCBjbG9zZXMuXG4gICAqIFRoaXMgYWxzbyB3b3JrcyBjb3JyZWN0bHkgd2l0aCBhbnkgbW9kYWwgY2hpbGRyZW4gdGhhdCBoYXZlIHRoZSBgZGlzYWJsZUF1dG9Gb2N1c2AgcHJvcC5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIG1vZGFsIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCBwcmV2ZW50IGZvY3VzIGZyb20gbGVhdmluZyB0aGUgbW9kYWwgd2hpbGUgb3Blbi5cbiAgICpcbiAgICogR2VuZXJhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGJlIHNldCB0byBgdHJ1ZWAgYXMgaXQgbWFrZXMgdGhlIG1vZGFsIGxlc3NcbiAgICogYWNjZXNzaWJsZSB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLCBsaWtlIHNjcmVlbiByZWFkZXJzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVuZm9yY2VGb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGhpdHRpbmcgZXNjYXBlIHdpbGwgbm90IGZpcmUgdGhlIGBvbkNsb3NlYCBjYWxsYmFjay5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFc2NhcGVLZXlEb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBgY2hpbGRyZW5gIHdpbGwgYmUgdW5kZXIgdGhlIERPTSBoaWVyYXJjaHkgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUG9ydGFsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG1vZGFsIHdpbGwgbm90IHJlc3RvcmUgZm9jdXMgdG8gcHJldmlvdXNseSBmb2N1c2VkIGVsZW1lbnQgb25jZVxuICAgKiBtb2RhbCBpcyBoaWRkZW4gb3IgdW5tb3VudGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJlc3RvcmVGb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBzY3JvbGwgbG9jayBiZWhhdmlvci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVTY3JvbGxMb2NrOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJhY2tkcm9wIGlzIG5vdCByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGhpZGVCYWNrZHJvcDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBBbHdheXMga2VlcCB0aGUgY2hpbGRyZW4gaW4gdGhlIERPTS5cbiAgICogVGhpcyBwcm9wIGNhbiBiZSB1c2VmdWwgaW4gU0VPIHNpdHVhdGlvbiBvclxuICAgKiB3aGVuIHlvdSB3YW50IHRvIG1heGltaXplIHRoZSByZXNwb25zaXZlbmVzcyBvZiB0aGUgTW9kYWwuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBrZWVwTW91bnRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBiYWNrZHJvcCBpcyBjbGlja2VkLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBvbkNsb3NlYCBwcm9wIHdpdGggdGhlIGByZWFzb25gIGFyZ3VtZW50IHRvIGhhbmRsZSB0aGUgYGJhY2tkcm9wQ2xpY2tgIGV2ZW50cy5cbiAgICovXG4gIG9uQmFja2Ryb3BDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKiBUaGUgYHJlYXNvbmAgcGFyYW1ldGVyIGNhbiBvcHRpb25hbGx5IGJlIHVzZWQgdG8gY29udHJvbCB0aGUgcmVzcG9uc2UgdG8gYG9uQ2xvc2VgLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gQ2FuIGJlOiBgXCJlc2NhcGVLZXlEb3duXCJgLCBgXCJiYWNrZHJvcENsaWNrXCJgLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgdHJhbnNpdGlvbiBlbnRlcnMuXG4gICAqL1xuICBvblRyYW5zaXRpb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgdHJhbnNpdGlvbiBoYXMgZXhpdGVkLlxuICAgKi9cbiAgb25UcmFuc2l0aW9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgcHJvcHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgTW9kYWwuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFja2Ryb3A6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgcm9vdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIE1vZGFsLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYmFja2Ryb3A6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBNb2RhbDsiXSwibmFtZXMiOlsiZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3MiLCJzbG90IiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3MiLCJpbnB1dEJhc2VDbGFzc2VzIiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyIsIl9leGNsdWRlZCIsIkZpbGxlZElucHV0Um9vdCIsInN0eWxlZCIsIklucHV0QmFzZSIsInNob3VsZEZvcndhcmRQcm9wIiwicHJvcCIsInJvb3RTaG91bGRGb3J3YXJkUHJvcCIsIm5hbWUiLCJvdmVycmlkZXNSZXNvbHZlciIsInByb3BzIiwic3R5bGVzIiwib3duZXJTdGF0ZSIsImRpc2FibGVVbmRlcmxpbmUiLCJ1bmRlcmxpbmUiLCJ0aGVtZSIsIl9wYWxldHRlIiwibGlnaHQiLCJwYWxldHRlIiwibW9kZSIsImJvdHRvbUxpbmVDb2xvciIsImJhY2tncm91bmRDb2xvciIsImhvdmVyQmFja2dyb3VuZCIsImRpc2FibGVkQmFja2dyb3VuZCIsInBvc2l0aW9uIiwidmFycyIsIkZpbGxlZElucHV0IiwiYmciLCJib3JkZXJUb3BMZWZ0UmFkaXVzIiwic2hhcGUiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJUb3BSaWdodFJhZGl1cyIsInRyYW5zaXRpb24iLCJ0cmFuc2l0aW9ucyIsImNyZWF0ZSIsImR1cmF0aW9uIiwic2hvcnRlciIsImVhc2luZyIsImVhc2VPdXQiLCJob3ZlckJnIiwiZm9jdXNlZCIsImRpc2FibGVkIiwiZGlzYWJsZWRCZyIsImJvcmRlckJvdHRvbSIsImNvbG9yIiwibWFpbiIsImxlZnQiLCJib3R0b20iLCJjb250ZW50IiwicmlnaHQiLCJ0cmFuc2Zvcm0iLCJwb2ludGVyRXZlbnRzIiwiZXJyb3IiLCJib3JkZXJCb3R0b21Db2xvciIsImNvbW1vbiIsIm9uQmFja2dyb3VuZENoYW5uZWwiLCJvcGFjaXR5IiwiaW5wdXRVbmRlcmxpbmUiLCJ0ZXh0IiwicHJpbWFyeSIsImJvcmRlckJvdHRvbVN0eWxlIiwic3RhcnRBZG9ybm1lbnQiLCJwYWRkaW5nTGVmdCIsImVuZEFkb3JubWVudCIsInBhZGRpbmdSaWdodCIsIm11bHRpbGluZSIsInBhZGRpbmciLCJzaXplIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iLCJoaWRkZW5MYWJlbCIsIkZpbGxlZElucHV0SW5wdXQiLCJXZWJraXRCb3hTaGFkb3ciLCJXZWJraXRUZXh0RmlsbENvbG9yIiwiY2FyZXRDb2xvciIsImdldENvbG9yU2NoZW1lU2VsZWN0b3IiLCJpblByb3BzIiwicmVmIiwiX3JlZiIsIl9zbG90cyRyb290IiwiX3JlZjIiLCJfc2xvdHMkaW5wdXQiLCJjb21wb25lbnRzIiwiY29tcG9uZW50c1Byb3BzIiwiY29tcG9uZW50c1Byb3BzUHJvcCIsImZ1bGxXaWR0aCIsImlucHV0Q29tcG9uZW50Iiwic2xvdFByb3BzIiwic2xvdHMiLCJ0eXBlIiwib3RoZXIiLCJjbGFzc2VzIiwicm9vdCIsImlucHV0IiwiY29tcG9zZWRDbGFzc2VzIiwiY29tcG9zZUNsYXNzZXMiLCJ1c2VVdGlsaXR5Q2xhc3NlcyIsImZpbGxlZElucHV0Q29tcG9uZW50c1Byb3BzIiwiZGVlcG1lcmdlIiwiUm9vdFNsb3QiLCJSb290IiwiSW5wdXRTbG90IiwiSW5wdXQiLCJtdWlOYW1lIiwiZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyIsIkZvcm1Db250cm9sUm9vdCIsImNhcGl0YWxpemUiLCJtYXJnaW4iLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsIm1pbldpZHRoIiwiYm9yZGVyIiwidmVydGljYWxBbGlnbiIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsIndpZHRoIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJjb21wb25lbnQiLCJ2aXN1YWxseUZvY3VzZWQiLCJyZXF1aXJlZCIsInZhcmlhbnQiLCJhZG9ybmVkU3RhcnQiLCJzZXRBZG9ybmVkU3RhcnQiLCJpbml0aWFsQWRvcm5lZFN0YXJ0IiwiZm9yRWFjaCIsImNoaWxkIiwiaXNNdWlFbGVtZW50IiwiZmlsbGVkIiwic2V0RmlsbGVkIiwiaW5pdGlhbEZpbGxlZCIsImlucHV0UHJvcHMiLCJmb2N1c2VkU3RhdGUiLCJzZXRGb2N1c2VkIiwidW5kZWZpbmVkIiwicmVnaXN0ZXJFZmZlY3QiLCJjaGlsZENvbnRleHQiLCJvbkJsdXIiLCJvbkVtcHR5Iiwib25GaWxsZWQiLCJvbkZvY3VzIiwiRm9ybUNvbnRyb2xDb250ZXh0IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsImFzIiwiY2xzeCIsImZvcm1Db250cm9sU3RhdGUiLCJzdGF0ZXMiLCJtdWlGb3JtQ29udHJvbCIsInJlZHVjZSIsImFjYyIsInN0YXRlIiwidXNlRm9ybUNvbnRyb2wiLCJnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzIiwiX3NwYW4iLCJGb3JtSGVscGVyVGV4dFJvb3QiLCJjb250YWluZWQiLCJzZWNvbmRhcnkiLCJ0eXBvZ3JhcGh5IiwiY2FwdGlvbiIsInRleHRBbGlnbiIsIm1hcmdpblJpZ2h0IiwibWFyZ2luTGVmdCIsImZjcyIsImRlZmF1bHRUaGVtZSIsInRoZW1lSWQiLCJnZXRHcmlkVXRpbGl0eUNsYXNzIiwiR1JJRF9TSVpFUyIsIm1hcCIsInNwYWNpbmciLCJkaXJlY3Rpb24iLCJ3cmFwIiwiZ2V0T2Zmc2V0IiwidmFsIiwicGFyc2UiLCJwYXJzZUZsb2F0IiwiU3RyaW5nIiwicmVwbGFjZSIsImV4dHJhY3RaZXJvVmFsdWVCcmVha3BvaW50S2V5cyIsImJyZWFrcG9pbnRzIiwidmFsdWVzIiwibm9uWmVyb0tleSIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJzb3J0ZWRCcmVha3BvaW50S2V5c0J5VmFsdWUiLCJzb3J0IiwiYSIsImIiLCJzbGljZSIsImluZGV4T2YiLCJHcmlkUm9vdCIsImNvbnRhaW5lciIsIml0ZW0iLCJ6ZXJvTWluV2lkdGgiLCJzcGFjaW5nU3R5bGVzIiwiTnVtYmVyIiwiaXNOYU4iLCJicmVha3BvaW50IiwicHVzaCIsInJlc29sdmVTcGFjaW5nU3R5bGVzIiwiYnJlYWtwb2ludHNTdHlsZXMiLCJib3hTaXppbmciLCJmbGV4V3JhcCIsImRpcmVjdGlvblZhbHVlcyIsInByb3BWYWx1ZSIsIm91dHB1dCIsIm1heFdpZHRoIiwicm93U3BhY2luZyIsInJvd1NwYWNpbmdWYWx1ZXMiLCJ6ZXJvVmFsdWVCcmVha3BvaW50S2V5cyIsIl96ZXJvVmFsdWVCcmVha3BvaW50SyIsInRoZW1lU3BhY2luZyIsImluY2x1ZGVzIiwiY29sdW1uU3BhY2luZyIsImNvbHVtblNwYWNpbmdWYWx1ZXMiLCJfemVyb1ZhbHVlQnJlYWtwb2ludEsyIiwiZ2xvYmFsU3R5bGVzIiwiZmxleEJhc2lzIiwiZmxleEdyb3ciLCJmbGV4U2hyaW5rIiwiY29sdW1uc0JyZWFrcG9pbnRWYWx1ZXMiLCJjb2x1bW5zIiwiY29sdW1uVmFsdWUiLCJNYXRoIiwicm91bmQiLCJtb3JlIiwiYXNzaWduIiwidXAiLCJHcmlkIiwidGhlbWVQcm9wcyIsInVzZVRoZW1lIiwiZXh0ZW5kU3hQcm9wIiwiY29sdW1uc1Byb3AiLCJjb2x1bW5TcGFjaW5nUHJvcCIsInJvd1NwYWNpbmdQcm9wIiwiY29sdW1uc0NvbnRleHQiLCJicmVha3BvaW50c1ZhbHVlcyIsIm90aGVyRmlsdGVyZWQiLCJzcGFjaW5nQ2xhc3NlcyIsInJlc29sdmVTcGFjaW5nQ2xhc3NlcyIsImJyZWFrcG9pbnRzQ2xhc3NlcyIsImdldFNjYWxlIiwiZW50ZXJpbmciLCJlbnRlcmVkIiwiaXNXZWJLaXQxNTQiLCJuYXZpZ2F0b3IiLCJ0ZXN0IiwidXNlckFnZW50IiwiR3JvdyIsImFkZEVuZExpc3RlbmVyIiwiYXBwZWFyIiwiaW4iLCJpblByb3AiLCJvbkVudGVyIiwib25FbnRlcmVkIiwib25FbnRlcmluZyIsIm9uRXhpdCIsIm9uRXhpdGVkIiwib25FeGl0aW5nIiwic3R5bGUiLCJ0aW1lb3V0IiwiVHJhbnNpdGlvbkNvbXBvbmVudCIsInRpbWVyIiwiYXV0b1RpbWVvdXQiLCJub2RlUmVmIiwiaGFuZGxlUmVmIiwibm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayIsImNhbGxiYWNrIiwibWF5YmVJc0FwcGVhcmluZyIsIm5vZGUiLCJjdXJyZW50IiwiaGFuZGxlRW50ZXJpbmciLCJoYW5kbGVFbnRlciIsImlzQXBwZWFyaW5nIiwidHJhbnNpdGlvbkR1cmF0aW9uIiwiZGVsYXkiLCJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24iLCJnZXRBdXRvSGVpZ2h0RHVyYXRpb24iLCJjbGllbnRIZWlnaHQiLCJqb2luIiwiaGFuZGxlRW50ZXJlZCIsImhhbmRsZUV4aXRpbmciLCJoYW5kbGVFeGl0IiwiaGFuZGxlRXhpdGVkIiwibmV4dCIsInN0YXJ0IiwiY2hpbGRQcm9wcyIsInZpc2liaWxpdHkiLCJtdWlTdXBwb3J0QXV0byIsImdldElucHV0VXRpbGl0eUNsYXNzIiwiSW5wdXRSb290IiwiZm9ybUNvbnRyb2wiLCJJbnB1dElucHV0IiwiaW5wdXRDb21wb25lbnRzUHJvcHMiLCJyb290T3ZlcnJpZGVzUmVzb2x2ZXIiLCJhZG9ybmVkRW5kIiwic2l6ZVNtYWxsIiwiaW5wdXRPdmVycmlkZXNSZXNvbHZlciIsImlucHV0U2l6ZVNtYWxsIiwiaW5wdXRNdWx0aWxpbmUiLCJpbnB1dFR5cGVTZWFyY2giLCJpbnB1dEFkb3JuZWRTdGFydCIsImlucHV0QWRvcm5lZEVuZCIsImlucHV0SGlkZGVuTGFiZWwiLCJJbnB1dEJhc2VSb290IiwiYm9keTEiLCJsaW5lSGVpZ2h0IiwiY3Vyc29yIiwiYWxpZ25JdGVtcyIsIklucHV0QmFzZUNvbXBvbmVudCIsInBsYWNlaG9sZGVyIiwiaW5wdXRQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVySGlkZGVuIiwicGxhY2Vob2xkZXJWaXNpYmxlIiwiZm9udCIsImxldHRlclNwYWNpbmciLCJiYWNrZ3JvdW5kIiwiaGVpZ2h0IiwiV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3IiLCJhbmltYXRpb25OYW1lIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJvdXRsaW5lIiwiYm94U2hhZG93IiwiV2Via2l0QXBwZWFyYW5jZSIsInJlc2l6ZSIsIk1vekFwcGVhcmFuY2UiLCJpbnB1dEdsb2JhbFN0eWxlcyIsImZyb20iLCJfc2xvdFByb3BzJGlucHV0IiwiYXJpYURlc2NyaWJlZGJ5IiwiYXV0b0NvbXBsZXRlIiwiYXV0b0ZvY3VzIiwiZGVmYXVsdFZhbHVlIiwiZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlcyIsImlkIiwiaW5wdXRQcm9wc1Byb3AiLCJpbnB1dFJlZiIsImlucHV0UmVmUHJvcCIsIm1heFJvd3MiLCJtaW5Sb3dzIiwib25DaGFuZ2UiLCJvbkNsaWNrIiwib25LZXlEb3duIiwib25LZXlVcCIsInJlYWRPbmx5IiwicmVuZGVyU3VmZml4Iiwicm93cyIsInZhbHVlUHJvcCIsImlzQ29udHJvbGxlZCIsImhhbmRsZUlucHV0UmVmV2FybmluZyIsImluc3RhbmNlIiwiaGFuZGxlSW5wdXRSZWYiLCJjaGVja0RpcnR5Iiwib2JqIiwiSW5wdXRDb21wb25lbnQiLCJCb29sZWFuIiwiZyIsInJvb3RQcm9wcyIsImV2ZW50IiwiY3VycmVudFRhcmdldCIsInRhcmdldCIsImZvY3VzIiwib25BbmltYXRpb25TdGFydCIsImFyZ3MiLCJlbGVtZW50IiwiRXJyb3IiLCJzdG9wUHJvcGFnYXRpb24iLCJnZXRJbnB1dEJhc2VVdGlsaXR5Q2xhc3MiLCJoYXNWYWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImlzRmlsbGVkIiwiU1NSIiwiaXNBZG9ybmVkU3RhcnQiLCJnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcyIsIkZvcm1MYWJlbFJvb3QiLCJjb2xvclNlY29uZGFyeSIsIkFzdGVyaXNrQ29tcG9uZW50IiwiYXN0ZXJpc2siLCJnZXRJbnB1dExhYmVsVXRpbGl0eUNsYXNzZXMiLCJJbnB1dExhYmVsUm9vdCIsInNocmluayIsImRpc2FibGVBbmltYXRpb24iLCJhbmltYXRlZCIsInRyYW5zZm9ybU9yaWdpbiIsIndoaXRlU3BhY2UiLCJvdmVyZmxvdyIsInRleHRPdmVyZmxvdyIsInRvcCIsInpJbmRleCIsInVzZXJTZWxlY3QiLCJzaHJpbmtQcm9wIiwiZ2V0TGlua1V0aWxpdHlDbGFzcyIsImNvbG9yVHJhbnNmb3JtYXRpb25zIiwidGV4dFByaW1hcnkiLCJ0ZXh0U2Vjb25kYXJ5IiwidHJhbnNmb3JtZWRDb2xvciIsInRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMiLCJjaGFubmVsQ29sb3IiLCJMaW5rUm9vdCIsIlR5cG9ncmFwaHkiLCJidXR0b24iLCJ0ZXh0RGVjb3JhdGlvbiIsInRleHREZWNvcmF0aW9uQ29sb3IiLCJib3JkZXJTdHlsZSIsImZvY3VzVmlzaWJsZSIsIlR5cG9ncmFwaHlDbGFzc2VzIiwic3giLCJpc0ZvY3VzVmlzaWJsZVJlZiIsImhhbmRsZUJsdXJWaXNpYmxlIiwiaGFuZGxlRm9jdXNWaXNpYmxlIiwiZm9jdXNWaXNpYmxlUmVmIiwidXNlSXNGb2N1c1Zpc2libGUiLCJzZXRGb2N1c1Zpc2libGUiLCJoYW5kbGVyUmVmIiwidXNlRm9ya1JlZiIsImdldExpc3RVdGlsaXR5Q2xhc3MiLCJMaXN0Um9vdCIsImRpc2FibGVQYWRkaW5nIiwiZGVuc2UiLCJzdWJoZWFkZXIiLCJsaXN0U3R5bGUiLCJjb250ZXh0IiwibmV4dEl0ZW0iLCJsaXN0IiwiZGlzYWJsZUxpc3RXcmFwIiwiZmlyc3RDaGlsZCIsIm5leHRFbGVtZW50U2libGluZyIsInByZXZpb3VzSXRlbSIsImxhc3RDaGlsZCIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJ0ZXh0Q3JpdGVyaWFNYXRjaGVzIiwibmV4dEZvY3VzIiwidGV4dENyaXRlcmlhIiwiaW5uZXJUZXh0IiwidGV4dENvbnRlbnQiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJyZXBlYXRpbmciLCJtb3ZlRm9jdXMiLCJjdXJyZW50Rm9jdXMiLCJkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlIiwidHJhdmVyc2FsRnVuY3Rpb24iLCJ3cmFwcGVkT25jZSIsIm5leHRGb2N1c0Rpc2FibGVkIiwiZ2V0QXR0cmlidXRlIiwiaGFzQXR0cmlidXRlIiwiYWN0aW9ucyIsImF1dG9Gb2N1c0l0ZW0iLCJsaXN0UmVmIiwidGV4dENyaXRlcmlhUmVmIiwicHJldmlvdXNLZXlNYXRjaGVkIiwibGFzdFRpbWUiLCJ1c2VFbmhhbmNlZEVmZmVjdCIsImFkanVzdFN0eWxlRm9yU2Nyb2xsYmFyIiwiY29udGFpbmVyRWxlbWVudCIsIm5vRXhwbGljaXRXaWR0aCIsInNjcm9sbGJhclNpemUiLCJnZXRTY3JvbGxiYXJTaXplIiwib3duZXJEb2N1bWVudCIsImFjdGl2ZUl0ZW1JbmRleCIsImluZGV4Iiwic2VsZWN0ZWQiLCJtdWlTa2lwTGlzdEhpZ2hsaWdodCIsIml0ZW1zIiwibmV3Q2hpbGRQcm9wcyIsInRhYkluZGV4Iiwicm9sZSIsImFjdGl2ZUVsZW1lbnQiLCJwcmV2ZW50RGVmYXVsdCIsImNyaXRlcmlhIiwibG93ZXJLZXkiLCJjdXJyVGltZSIsInBlcmZvcm1hbmNlIiwibm93Iiwia2VlcEZvY3VzT25DdXJyZW50IiwiZ2V0TWVudVV0aWxpdHlDbGFzcyIsIl9leGNsdWRlZDIiLCJSVExfT1JJR0lOIiwidmVydGljYWwiLCJob3Jpem9udGFsIiwiTFRSX09SSUdJTiIsIk1lbnVSb290IiwiUG9wb3ZlciIsIk1lbnVQYXBlciIsInBhcGVyIiwibWF4SGVpZ2h0IiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJNZW51TWVudUxpc3QiLCJfc2xvdHMkcGFwZXIiLCJfc2xvdFByb3BzJHBhcGVyIiwiZGlzYWJsZUF1dG9Gb2N1c0l0ZW0iLCJNZW51TGlzdFByb3BzIiwib25DbG9zZSIsIm9wZW4iLCJQYXBlclByb3BzIiwiUG9wb3ZlckNsYXNzZXMiLCJUcmFuc2l0aW9uUHJvcHMiLCJpc1J0bCIsIm1lbnVMaXN0QWN0aW9uc1JlZiIsIlBhcGVyU2xvdCIsInBhcGVyRXh0ZXJuYWxTbG90UHJvcHMiLCJyb290U2xvdFByb3BzIiwidXNlU2xvdFByb3BzIiwiZWxlbWVudFR5cGUiLCJleHRlcm5hbFNsb3RQcm9wcyIsInBhcGVyU2xvdFByb3BzIiwiYW5jaG9yT3JpZ2luIiwiYXJpYUhpZGRlbiIsInNob3ciLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJnZXRQYWRkaW5nUmlnaHQiLCJwYXJzZUludCIsIm93bmVyV2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImFyaWFIaWRkZW5TaWJsaW5ncyIsIm1vdW50RWxlbWVudCIsImN1cnJlbnRFbGVtZW50IiwiZWxlbWVudHNUb0V4Y2x1ZGUiLCJibGFja2xpc3QiLCJjYWxsIiwiaXNOb3RFeGNsdWRlZEVsZW1lbnQiLCJpc05vdEZvcmJpZGRlbkVsZW1lbnQiLCJpc0ZvcmJpZGRlblRhZ05hbWUiLCJ0YWdOYW1lIiwiaXNJbnB1dEhpZGRlbiIsImlzQXJpYUhpZGRlbkZvcmJpZGRlbk9uRWxlbWVudCIsImZpbmRJbmRleE9mIiwiaWR4Iiwic29tZSIsImRlZmF1bHRNYW5hZ2VyIiwiY29uc3RydWN0b3IiLCJ0aGlzIiwiY29udGFpbmVycyIsIm1vZGFscyIsImFkZCIsIm1vZGFsIiwibW9kYWxJbmRleCIsIm1vZGFsUmVmIiwiaGlkZGVuU2libGluZ3MiLCJnZXRIaWRkZW5TaWJsaW5ncyIsIm1vdW50IiwiY29udGFpbmVySW5kZXgiLCJyZXN0b3JlIiwiY29udGFpbmVySW5mbyIsInJlc3RvcmVTdHlsZSIsImRpc2FibGVTY3JvbGxMb2NrIiwiZG9jIiwiYm9keSIsImlubmVyV2lkdGgiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRXaWR0aCIsInNjcm9sbEhlaWdodCIsImlzT3ZlcmZsb3dpbmciLCJwcm9wZXJ0eSIsImVsIiwiZml4ZWRFbGVtZW50cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJzY3JvbGxDb250YWluZXIiLCJwYXJlbnROb2RlIiwiRG9jdW1lbnRGcmFnbWVudCIsInBhcmVudCIsInBhcmVudEVsZW1lbnQiLCJjb250YWluZXJXaW5kb3ciLCJub2RlTmFtZSIsIm92ZXJmbG93WSIsIm92ZXJmbG93WCIsInNldFByb3BlcnR5IiwicmVtb3ZlUHJvcGVydHkiLCJoYW5kbGVDb250YWluZXIiLCJyZW1vdmUiLCJhcmlhSGlkZGVuU3RhdGUiLCJzcGxpY2UiLCJuZXh0VG9wIiwiaXNUb3BNb2RhbCIsImdldE1vZGFsVXRpbGl0eUNsYXNzIiwiTW9kYWxSb290IiwiZXhpdGVkIiwiaGlkZGVuIiwiTW9kYWxCYWNrZHJvcCIsIkJhY2tkcm9wIiwiYmFja2Ryb3AiLCJfc2xvdHMkYmFja2Ryb3AiLCJfc2xvdFByb3BzJHJvb3QiLCJfc2xvdFByb3BzJGJhY2tkcm9wIiwiQmFja2Ryb3BDb21wb25lbnQiLCJCYWNrZHJvcFByb3BzIiwiY2xvc2VBZnRlclRyYW5zaXRpb24iLCJkaXNhYmxlQXV0b0ZvY3VzIiwiZGlzYWJsZUVuZm9yY2VGb2N1cyIsImRpc2FibGVFc2NhcGVLZXlEb3duIiwiZGlzYWJsZVBvcnRhbCIsImRpc2FibGVSZXN0b3JlRm9jdXMiLCJoaWRlQmFja2Ryb3AiLCJrZWVwTW91bnRlZCIsIm9uQmFja2Ryb3BDbGljayIsInByb3BzV2l0aERlZmF1bHRzIiwiZ2V0Um9vdFByb3BzIiwiZ2V0QmFja2Ryb3BQcm9wcyIsImdldFRyYW5zaXRpb25Qcm9wcyIsInBvcnRhbFJlZiIsImhhc1RyYW5zaXRpb24iLCJwYXJhbWV0ZXJzIiwibWFuYWdlciIsIm9uVHJhbnNpdGlvbkVudGVyIiwib25UcmFuc2l0aW9uRXhpdGVkIiwicm9vdFJlZiIsIm1vdW50Tm9kZVJlZiIsInNldEV4aXRlZCIsImhhc093blByb3BlcnR5IiwiZ2V0SGFzVHJhbnNpdGlvbiIsImFyaWFIaWRkZW5Qcm9wIiwiZ2V0TW9kYWwiLCJoYW5kbGVNb3VudGVkIiwic2Nyb2xsVG9wIiwiaGFuZGxlT3BlbiIsInVzZUV2ZW50Q2FsbGJhY2siLCJyZXNvbHZlZENvbnRhaW5lciIsImdldENvbnRhaW5lciIsImhhbmRsZVBvcnRhbFJlZiIsImhhbmRsZUNsb3NlIiwiY3JlYXRlSGFuZGxlS2V5RG93biIsIm90aGVySGFuZGxlcnMiLCJfb3RoZXJIYW5kbGVycyRvbktleUQiLCJ3aGljaCIsImNyZWF0ZUhhbmRsZUJhY2tkcm9wQ2xpY2siLCJfb3RoZXJIYW5kbGVycyRvbkNsaWMiLCJwcm9wc0V2ZW50SGFuZGxlcnMiLCJleHRyYWN0RXZlbnRIYW5kbGVycyIsImV4dGVybmFsRXZlbnRIYW5kbGVycyIsImNyZWF0ZUNoYWluZWRGdW5jdGlvbiIsIkJhY2tkcm9wU2xvdCIsImJhY2tkcm9wU2xvdFByb3BzIiwiZXh0ZXJuYWxGb3J3YXJkZWRQcm9wcyIsImdldFNsb3RQcm9wcyIsImFkZGl0aW9uYWxQcm9wcyIsImJhY2tkcm9wUHJvcHMiLCJlIiwiUG9ydGFsIiwiRm9jdXNUcmFwIiwiaXNFbmFibGVkIl0sInNvdXJjZVJvb3QiOiIifQ==