"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[620],{6723:(e,t,o)=>{o.d(t,{Z:()=>y});var n=o(3366),r=o(7462),i=o(7294),a=o(9766),s=o(4780),l=o(8543),d=o(948),u=o(1657),c=o(1588),p=o(4867),m=o(5827);function f(e){return(0,p.Z)("MuiFilledInput",e)}const h=(0,r.Z)({},m.Z,(0,c.Z)("MuiFilledInput",["root","underline","input"]));var v=o(5893);const b=["disableUnderline","components","componentsProps","fullWidth","hiddenLabel","inputComponent","multiline","slotProps","slots","type"],g=(0,d.ZP)(l.Ej,{shouldForwardProp:e=>(0,d.FO)(e)||"classes"===e,name:"MuiFilledInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[...(0,l.Gx)(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.Z)({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}},[`&.${h.focused}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a},[`&.${h.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"},[`&.${h.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${h.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(.${h.disabled}, .${h.error}):before`]:{borderBottom:`1px solid ${(e.vars||e).palette.text.primary}`},[`&.${h.disabled}:before`]:{borderBottomStyle:"dotted"}},t.startAdornment&&{paddingLeft:12},t.endAdornment&&{paddingRight:12},t.multiline&&(0,r.Z)({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}))})),Z=(0,d.ZP)(l.rA,{name:"MuiFilledInput",slot:"Input",overridesResolver:l._o})((({theme:e,ownerState:t})=>(0,r.Z)({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,c;const p=(0,u.Z)({props:e,name:"MuiFilledInput"}),{components:m={},componentsProps:h,fullWidth:x=!1,inputComponent:y="input",multiline:w=!1,slotProps:S,slots:k={},type:P="text"}=p,C=(0,n.Z)(p,b),R=(0,r.Z)({},p,{fullWidth:x,inputComponent:y,multiline:w,type:P}),M=(e=>{const{classes:t,disableUnderline:o}=e,n={root:["root",!o&&"underline"],input:["input"]},i=(0,s.Z)(n,f,t);return(0,r.Z)({},t,i)})(p),$={root:{ownerState:R},input:{ownerState:R}},F=(null!=S?S:h)?(0,a.Z)($,null!=S?S:h):$,E=null!=(o=null!=(i=k.root)?i:m.Root)?o:g,z=null!=(d=null!=(c=k.input)?c:m.Input)?d:Z;return(0,v.jsx)(l.ZP,(0,r.Z)({slots:{root:E,input:z},componentsProps:F,fullWidth:x,inputComponent:y,multiline:w,ref:t,type:P},C,{classes:M}))}));x.muiName="Input";const y=x},6446:(e,t,o)=>{o.d(t,{Z:()=>x});var n=o(3366),r=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(1657),d=o(948),u=o(5108),c=o(8216),p=o(6798),m=o(7167),f=o(1588),h=o(4867);function v(e){return(0,h.Z)("MuiFormControl",e)}(0,f.Z)("MuiFormControl",["root","marginNone","marginNormal","marginDense","fullWidth","disabled"]);var b=o(5893);const g=["children","className","color","component","disabled","error","focused","fullWidth","hiddenLabel","margin","required","size","variant"],Z=(0,d.ZP)("div",{name:"MuiFormControl",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,r.Z)({},t.root,t[`margin${(0,c.Z)(e.margin)}`],e.fullWidth&&t.fullWidth)})((({ownerState:e})=>(0,r.Z)({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%"}))),x=i.forwardRef((function(e,t){const o=(0,l.Z)({props:e,name:"MuiFormControl"}),{children:d,className:f,color:h="primary",component:x="div",disabled:y=!1,error:w=!1,focused:S,fullWidth:k=!1,hiddenLabel:P=!1,margin:C="none",required:R=!1,size:M="medium",variant:$="outlined"}=o,F=(0,n.Z)(o,g),E=(0,r.Z)({},o,{color:h,component:x,disabled:y,error:w,fullWidth:k,hiddenLabel:P,margin:C,required:R,size:M,variant:$}),z=(e=>{const{classes:t,margin:o,fullWidth:n}=e,r={root:["root","none"!==o&&`margin${(0,c.Z)(o)}`,n&&"fullWidth"]};return(0,s.Z)(r,v,t)})(E),[N,I]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{if(!(0,p.Z)(t,["Input","Select"]))return;const o=(0,p.Z)(t,["Select"])?t.props.input:t;o&&(0,u.B7)(o.props)&&(e=!0)})),e})),[T,L]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{(0,p.Z)(t,["Input","Select"])&&((0,u.vd)(t.props,!0)||(0,u.vd)(t.props.inputProps,!0))&&(e=!0)})),e})),[O,W]=i.useState(!1);y&&O&&W(!1);const B=void 0===S||y?O:S;let A;const j=i.useMemo((()=>({adornedStart:N,setAdornedStart:I,color:h,disabled:y,error:w,filled:T,focused:B,fullWidth:k,hiddenLabel:P,size:M,onBlur:()=>{W(!1)},onEmpty:()=>{L(!1)},onFilled:()=>{L(!0)},onFocus:()=>{W(!0)},registerEffect:A,required:R,variant:$})),[N,h,y,w,T,B,k,P,A,R,M,$]);return(0,b.jsx)(m.Z.Provider,{value:j,children:(0,b.jsx)(Z,(0,r.Z)({as:x,ownerState:E,className:(0,a.Z)(z.root,f),ref:t},F,{children:d}))})}))},7167:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o(7294).createContext(void 0)},5704:(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,{Z:()=>n})},4423:(e,t,o)=>{o.d(t,{Z:()=>i});var n=o(7294),r=o(7167);function i(){return n.useContext(r.Z)}},3460:(e,t,o)=>{o.d(t,{Z:()=>y});var n=o(3366),r=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(5704),d=o(4423),u=o(948),c=o(8216),p=o(1588),m=o(4867);function f(e){return(0,m.Z)("MuiFormHelperText",e)}const h=(0,p.Z)("MuiFormHelperText",["root","error","disabled","sizeSmall","sizeMedium","contained","focused","filled","required"]);var v,b=o(1657),g=o(5893);const Z=["children","className","component","disabled","error","filled","focused","margin","required","variant"],x=(0,u.ZP)("p",{name:"MuiFormHelperText",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,o.size&&t[`size${(0,c.Z)(o.size)}`],o.contained&&t.contained,o.filled&&t.filled]}})((({theme:e,ownerState:t})=>(0,r.Z)({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}))),y=i.forwardRef((function(e,t){const o=(0,b.Z)({props:e,name:"MuiFormHelperText"}),{children:i,className:u,component:p="p"}=o,m=(0,n.Z)(o,Z),h=(0,d.Z)(),y=(0,l.Z)({props:o,muiFormControl:h,states:["variant","size","disabled","error","filled","focused","required"]}),w=(0,r.Z)({},o,{component:p,contained:"filled"===y.variant||"outlined"===y.variant,variant:y.variant,size:y.size,disabled:y.disabled,error:y.error,filled:y.filled,focused:y.focused,required:y.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.Z)(n)}`,o&&"contained",l&&"focused",a&&"filled",d&&"required"]};return(0,s.Z)(u,f,t)})(w);return(0,g.jsx)(x,(0,r.Z)({as:p,ownerState:w,className:(0,a.Z)(S.root,u),ref:t},m,{children:" "===i?v||(v=(0,g.jsx)("span",{className:"notranslate",children:"​"})):i}))}))},6294:(e,t,o)=>{o.d(t,{Z:()=>l});var n=o(7462),r=(o(7294),o(5723)),i=o(247),a=o(606),s=o(5893);const l=function(e){return(0,s.jsx)(r.Z,(0,n.Z)({},e,{defaultTheme:i.Z,themeId:a.Z}))}},5725:(e,t,o)=>{o.d(t,{ZP:()=>P});var n=o(3366),r=o(7462),i=o(7294),a=o(512),s=o(5408),l=o(9707),d=o(4780),u=o(948),c=o(1657),p=o(2734);const m=i.createContext();var f=o(1588),h=o(4867);function v(e){return(0,h.Z)("MuiGrid",e)}const b=["auto",!0,1,2,3,4,5,6,7,8,9,10,11,12],g=(0,f.Z)("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}`)),...b.map((e=>`grid-xs-${e}`)),...b.map((e=>`grid-sm-${e}`)),...b.map((e=>`grid-md-${e}`)),...b.map((e=>`grid-lg-${e}`)),...b.map((e=>`grid-xl-${e}`))]);var Z=o(5893);const x=["className","columns","columnSpacing","component","container","direction","item","rowSpacing","spacing","wrap","zeroMinWidth"];function y(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.ZP)("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.Z)({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.P$)({values:t.direction,breakpoints:e.breakpoints.values});return(0,s.k9)({theme:e},o,(e=>{const t={flexDirection:e};return 0===e.indexOf("column")&&(t[`& > .${g.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.P$)({values:n,breakpoints:e.breakpoints.values});let o;"object"==typeof t&&(o=w({breakpoints:e.breakpoints.values,values:t})),r=(0,s.k9)({theme:e},t,((t,n)=>{var r;const i=e.spacing(t);return"0px"!==i?{marginTop:`-${y(i)}`,[`& > .${g.item}`]:{paddingTop:y(i)}}:null!=(r=o)&&r.includes(n)?{}:{marginTop:0,[`& > .${g.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.P$)({values:n,breakpoints:e.breakpoints.values});let o;"object"==typeof t&&(o=w({breakpoints:e.breakpoints.values,values:t})),r=(0,s.k9)({theme:e},t,((t,n)=>{var r;const i=e.spacing(t);return"0px"!==i?{width:`calc(100% + ${y(i)})`,marginLeft:`-${y(i)}`,[`& > .${g.item}`]:{paddingLeft:y(i)}}:null!=(r=o)&&r.includes(n)?{}:{width:"100%",marginLeft:0,[`& > .${g.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.P$)({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} + ${y(o)})`;c={flexBasis:e,maxWidth:e}}}a=(0,r.Z)({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.Z)({props:e,name:"MuiGrid"}),{breakpoints:s}=(0,p.Z)(),u=(0,l.Z)(o),{className:f,columns:h,columnSpacing:b,component:g="div",container:y=!1,direction:w="row",item:k=!1,rowSpacing:P,spacing:C=0,wrap:R="wrap",zeroMinWidth:M=!1}=u,$=(0,n.Z)(u,x),F=P||C,E=b||C,z=i.useContext(m),N=y?h||12:z,I={},T=(0,r.Z)({},$);s.keys.forEach((e=>{null!=$[e]&&(I[e]=$[e],delete T[e])}));const L=(0,r.Z)({},u,{columns:N,container:y,direction:w,item:k,rowSpacing:F,columnSpacing:E,wrap:R,zeroMinWidth:M,spacing:C},I,{breakpoints:s.keys}),O=(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.Z)(p,v,t)})(L);return(0,Z.jsx)(m.Provider,{value:N,children:(0,Z.jsx)(S,(0,r.Z)({ownerState:L,className:(0,a.Z)(O.root,f),as:g,ref:t},T))})})),P=k},3981:(e,t,o)=>{o.d(t,{Z:()=>y});var n=o(3366),r=o(7462),i=o(7294),a=o(4780),s=o(9766),l=o(8543),d=o(948),u=o(1657),c=o(1588),p=o(4867),m=o(5827);function f(e){return(0,p.Z)("MuiInput",e)}const h=(0,r.Z)({},m.Z,(0,c.Z)("MuiInput",["root","underline","input"]));var v=o(5893);const b=["disableUnderline","components","componentsProps","fullWidth","inputComponent","multiline","slotProps","slots","type"],g=(0,d.ZP)(l.Ej,{shouldForwardProp:e=>(0,d.FO)(e)||"classes"===e,name:"MuiInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[...(0,l.Gx)(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.Z)({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"},[`&.${h.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${h.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(.${h.disabled}, .${h.error}):before`]:{borderBottom:`2px solid ${(e.vars||e).palette.text.primary}`,"@media (hover: none)":{borderBottom:`1px solid ${o}`}},[`&.${h.disabled}:before`]:{borderBottomStyle:"dotted"}})})),Z=(0,d.ZP)(l.rA,{name:"MuiInput",slot:"Input",overridesResolver:l._o})({}),x=i.forwardRef((function(e,t){var o,i,d,c;const p=(0,u.Z)({props:e,name:"MuiInput"}),{disableUnderline:m,components:h={},componentsProps:x,fullWidth:y=!1,inputComponent:w="input",multiline:S=!1,slotProps:k,slots:P={},type:C="text"}=p,R=(0,n.Z)(p,b),M=(e=>{const{classes:t,disableUnderline:o}=e,n={root:["root",!o&&"underline"],input:["input"]},i=(0,a.Z)(n,f,t);return(0,r.Z)({},t,i)})(p),$={root:{ownerState:{disableUnderline:m}}},F=(null!=k?k:x)?(0,s.Z)(null!=k?k:x,$):$,E=null!=(o=null!=(i=P.root)?i:h.Root)?o:g,z=null!=(d=null!=(c=P.input)?c:h.Input)?d:Z;return(0,v.jsx)(l.ZP,(0,r.Z)({slots:{root:E,input:z},slotProps:F,fullWidth:y,inputComponent:w,multiline:S,ref:t,type:C},R,{classes:M}))}));x.muiName="Input";const y=x},8543:(e,t,o)=>{o.d(t,{Ej:()=>C,Gx:()=>k,ZP:()=>$,_o:()=>P,rA:()=>R});var n=o(3366),r=o(7462),i=o(1387),a=o(7294),s=o(512),l=o(4780),d=o(7598),u=o(8442),c=o(5704),p=o(7167),m=o(4423),f=o(948),h=o(1657),v=o(8216),b=o(1705),g=o(8974),Z=o(6294),x=o(5108),y=o(5827),w=o(5893);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,v.Z)(o.color)}`],o.fullWidth&&t.fullWidth,o.hiddenLabel&&t.hiddenLabel]},P=(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]},C=(0,f.ZP)("div",{name:"MuiInputBase",slot:"Root",overridesResolver:k})((({theme:e,ownerState:t})=>(0,r.Z)({},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",[`&.${y.Z.disabled}`]:{color:(e.vars||e).palette.text.disabled,cursor:"default"}},t.multiline&&(0,r.Z)({padding:"4px 0 5px"},"small"===t.size&&{paddingTop:1}),t.fullWidth&&{width:"100%"}))),R=(0,f.ZP)("input",{name:"MuiInputBase",slot:"Input",overridesResolver:P})((({theme:e,ownerState:t})=>{const o="light"===e.palette.mode,n=(0,r.Z)({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.Z)({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] + .${y.Z.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},[`&.${y.Z.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"})})),M=(0,w.jsx)(Z.Z,{styles:{"@keyframes mui-auto-fill":{from:{display:"block"}},"@keyframes mui-auto-fill-cancel":{from:{display:"block"}}}}),$=a.forwardRef((function(e,t){var o;const f=(0,h.Z)({props:e,name:"MuiInputBase"}),{"aria-describedby":Z,autoComplete:k,autoFocus:P,className:$,components:F={},componentsProps:E={},defaultValue:z,disabled:N,disableInjectingGlobalStyles:I,endAdornment:T,fullWidth:L=!1,id:O,inputComponent:W="input",inputProps:B={},inputRef:A,maxRows:j,minRows:q,multiline:D=!1,name:H,onBlur:G,onChange:K,onClick:U,onFocus:V,onKeyDown:X,onKeyUp:_,placeholder:J,readOnly:Y,renderSuffix:Q,rows:ee,slotProps:te={},slots:oe={},startAdornment:ne,type:re="text",value:ie}=f,ae=(0,n.Z)(f,S),se=null!=B.value?B.value:ie,{current:le}=a.useRef(null!=se),de=a.useRef(),ue=a.useCallback((e=>{}),[]),ce=(0,b.Z)(de,A,B.ref,ue),[pe,me]=a.useState(!1),fe=(0,m.Z)(),he=(0,c.Z)({props:f,muiFormControl:fe,states:["color","disabled","error","hiddenLabel","size","required","filled"]});he.focused=fe?fe.focused:pe,a.useEffect((()=>{!fe&&N&&pe&&(me(!1),G&&G())}),[fe,N,pe,G]);const ve=fe&&fe.onFilled,be=fe&&fe.onEmpty,ge=a.useCallback((e=>{(0,x.vd)(e)?ve&&ve():be&&be()}),[ve,be]);(0,g.Z)((()=>{le&&ge({value:se})}),[se,ge,le]),a.useEffect((()=>{ge(de.current)}),[]);let Ze=W,xe=B;D&&"input"===Ze&&(xe=ee?(0,r.Z)({type:void 0,minRows:ee,maxRows:ee},xe):(0,r.Z)({type:void 0,maxRows:j,minRows:q},xe),Ze=d.u),a.useEffect((()=>{fe&&fe.setAdornedStart(Boolean(ne))}),[fe,ne]);const ye=(0,r.Z)({},f,{color:he.color||"primary",disabled:he.disabled,endAdornment:T,error:he.error,focused:he.focused,formControl:fe,fullWidth:L,hiddenLabel:he.hiddenLabel,multiline:D,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,b={root:["root",`color${(0,v.Z)(o)}`,n&&"disabled",r&&"error",d&&"fullWidth",a&&"focused",s&&"formControl",m&&"medium"!==m&&`size${(0,v.Z)(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.Z)(b,y.u,t)})(ye),Se=oe.root||F.Root||C,ke=te.root||E.root||{},Pe=oe.input||F.Input||R;return xe=(0,r.Z)({},xe,null!=(o=te.input)?o:E.input),(0,w.jsxs)(a.Fragment,{children:[!I&&M,(0,w.jsxs)(Se,(0,r.Z)({},ke,!(0,u.X)(Se)&&{ownerState:(0,r.Z)({},ye,ke.ownerState)},{ref:t,onClick:e=>{de.current&&e.currentTarget===e.target&&de.current.focus(),U&&U(e)}},ae,{className:(0,s.Z)(we.root,ke.className,$,Y&&"MuiInputBase-readOnly"),children:[ne,(0,w.jsx)(p.Z.Provider,{value:null,children:(0,w.jsx)(Pe,(0,r.Z)({ownerState:ye,"aria-invalid":he.error,"aria-describedby":Z,autoComplete:k,autoFocus:P,defaultValue:z,disabled:he.disabled,id:O,onAnimationStart:e=>{ge("mui-auto-fill-cancel"===e.animationName?de.current:{value:"x"})},name:H,placeholder:J,readOnly:Y,required:he.required,rows:ee,value:se,onKeyDown:X,onKeyUp:_,type:re},xe,!(0,u.X)(Pe)&&{as:Ze,ownerState:(0,r.Z)({},ye,xe.ownerState)},{ref:ce,className:(0,s.Z)(we.input,xe.className,Y&&"MuiInputBase-readOnly"),onBlur:e=>{G&&G(e),B.onBlur&&B.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.Z)(1));ge({value:t.value})}B.onChange&&B.onChange(e,...t),K&&K(e,...t)},onFocus:e=>{he.disabled?e.stopPropagation():(V&&V(e),B.onFocus&&B.onFocus(e),fe&&fe.onFocus?fe.onFocus(e):me(!0))}}))}),T,Q?Q((0,r.Z)({},he,{startAdornment:ne})):null]}))]})}))},5827:(e,t,o)=>{o.d(t,{Z:()=>a,u:()=>i});var n=o(1588),r=o(4867);function i(e){return(0,r.Z)("MuiInputBase",e)}const a=(0,n.Z)("MuiInputBase",["root","formControl","focused","disabled","adornedStart","adornedEnd","error","sizeSmall","multiline","colorSecondary","fullWidth","hiddenLabel","readOnly","input","inputSizeSmall","inputMultiline","inputTypeSearch","inputAdornedStart","inputAdornedEnd","inputHiddenLabel"])},5108:(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,{B7:()=>i,vd:()=>r})},7666:(e,t,o)=>{o.d(t,{Z:()=>P});var n=o(3366),r=o(7462),i=o(7294),a=o(4780),s=o(512),l=o(5704),d=o(4423),u=o(8216),c=o(1657),p=o(948),m=o(1588),f=o(4867);function h(e){return(0,f.Z)("MuiFormLabel",e)}const v=(0,m.Z)("MuiFormLabel",["root","colorSecondary","focused","disabled","error","filled","required","asterisk"]);var b=o(5893);const g=["children","className","color","component","disabled","error","filled","focused","required"],Z=(0,p.ZP)("label",{name:"MuiFormLabel",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,r.Z)({},t.root,"secondary"===e.color&&t.colorSecondary,e.filled&&t.filled)})((({theme:e,ownerState:t})=>(0,r.Z)({color:(e.vars||e).palette.text.secondary},e.typography.body1,{lineHeight:"1.4375em",padding:0,position:"relative",[`&.${v.focused}`]:{color:(e.vars||e).palette[t.color].main},[`&.${v.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${v.error}`]:{color:(e.vars||e).palette.error.main}}))),x=(0,p.ZP)("span",{name:"MuiFormLabel",slot:"Asterisk",overridesResolver:(e,t)=>t.asterisk})((({theme:e})=>({[`&.${v.error}`]:{color:(e.vars||e).palette.error.main}}))),y=i.forwardRef((function(e,t){const o=(0,c.Z)({props:e,name:"MuiFormLabel"}),{children:i,className:p,component:m="label"}=o,f=(0,n.Z)(o,g),v=(0,d.Z)(),y=(0,l.Z)({props:o,muiFormControl:v,states:["color","required","focused","disabled","error","filled"]}),w=(0,r.Z)({},o,{color:y.color||"primary",component:m,disabled:y.disabled,error:y.error,filled:y.filled,focused:y.focused,required:y.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.Z)(o)}`,r&&"disabled",i&&"error",s&&"filled",n&&"focused",l&&"required"],asterisk:["asterisk",i&&"error"]};return(0,a.Z)(d,h,t)})(w);return(0,b.jsxs)(Z,(0,r.Z)({as:m,ownerState:w,className:(0,s.Z)(S.root,p),ref:t},f,{children:[i,y.required&&(0,b.jsxs)(x,{ownerState:w,"aria-hidden":!0,className:S.asterisk,children:[" ","*"]})]}))}));function w(e){return(0,f.Z)("MuiInputLabel",e)}(0,m.Z)("MuiInputLabel",["root","focused","disabled","error","required","asterisk","formControl","sizeSmall","shrink","animated","standard","filled","outlined"]);const S=["disableAnimation","margin","shrink","variant","className"],k=(0,p.ZP)(y,{shouldForwardProp:e=>(0,p.FO)(e)||"classes"===e,name:"MuiInputLabel",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[{[`& .${v.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.Z)({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.Z)({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.Z)({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.Z)({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)"})))),P=i.forwardRef((function(e,t){const o=(0,c.Z)({name:"MuiInputLabel",props:e}),{disableAnimation:i=!1,shrink:p,className:m}=o,f=(0,n.Z)(o,S),h=(0,d.Z)();let v=p;void 0===v&&h&&(v=h.filled||h.focused||h.adornedStart);const g=(0,l.Z)({props:o,muiFormControl:h,states:["size","variant","required","focused"]}),Z=(0,r.Z)({},o,{disableAnimation:i,formControl:h,shrink:v,size:g.size,variant:g.variant,required:g.required,focused:g.focused}),x=(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.Z)(n)}`,l],asterisk:[d&&"asterisk"]},p=(0,a.Z)(c,w,t);return(0,r.Z)({},t,p)})(Z);return(0,b.jsx)(k,(0,r.Z)({"data-shrink":v,ownerState:Z,ref:t,className:(0,s.Z)(x.root,m)},f,{classes:x}))}))},9773:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o(7294).createContext({})},7719:(e,t,o)=>{o.d(t,{Z:()=>ve});var n=o(7462),r=o(3366),i=o(7294),a=(o(9864),o(512)),s=o(4780),l=o(4391),d=o(8038),u=o(948),c=o(1657),p=o(9773),m=o(1588),f=o(4867);function h(e){return(0,f.Z)("MuiList",e)}(0,m.Z)("MuiList",["root","padding","dense","subheader"]);var v=o(5893);const b=["children","className","component","dense","disablePadding","subheader"],g=(0,u.ZP)("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.Z)({listStyle:"none",margin:0,padding:0,position:"relative"},!e.disablePadding&&{paddingTop:8,paddingBottom:8},e.subheader&&{paddingTop:0}))),Z=i.forwardRef((function(e,t){const o=(0,c.Z)({props:e,name:"MuiList"}),{children:l,className:d,component:u="ul",dense:m=!1,disablePadding:f=!1,subheader:Z}=o,x=(0,r.Z)(o,b),y=i.useMemo((()=>({dense:m})),[m]),w=(0,n.Z)({},o,{component:u,dense:m,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.Z)(i,h,t)})(w);return(0,v.jsx)(p.Z.Provider,{value:y,children:(0,v.jsxs)(g,(0,n.Z)({as:u,className:(0,a.Z)(S.root,d),ref:t,ownerState:w},x,{children:[Z,l]}))})}));var x=o(256),y=o(1705),w=o(8974);const S=["actions","autoFocus","autoFocusItem","children","className","disabledItemsFocusable","disableListWrap","onKeyDown","variant"];function k(e,t,o){return e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:o?null:e.firstChild}function P(e,t,o){return e===t?o?e.firstChild:e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:o?null:e.lastChild}function C(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 R(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")&&C(s,i)&&!t)return s.focus(),!0;s=r(e,s,o)}return!1}const M=i.forwardRef((function(e,t){const{actions:o,autoFocus:a=!1,autoFocusItem:s=!1,children:l,className:u,disabledItemsFocusable:c=!1,disableListWrap:p=!1,onKeyDown:m,variant:f="selectedMenu"}=e,h=(0,r.Z)(e,S),b=i.useRef(null),g=i.useRef({keys:[],repeating:!0,previousKeyMatched:!0,lastTime:null});(0,w.Z)((()=>{a&&b.current.focus()}),[a]),i.useImperativeHandle(o,(()=>({adjustStyleForScrollbar:(e,t)=>{const o=!b.current.style.width;if(e.clientHeight{i.isValidElement(e)?(e.props.disabled||("selectedMenu"===f&&e.props.selected||-1===$)&&($=t),$===t&&(e.props.disabled||e.props.muiSkipListHighlight||e.type.muiSkipListHighlight)&&($+=1,$>=l.length&&($=-1))):$===t&&($+=1,$>=l.length&&($=-1))}));const F=i.Children.map(l,((e,t)=>{if(t===$){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,v.jsx)(Z,(0,n.Z)({role:"menu",ref:M,className:u,onKeyDown:e=>{const t=b.current,o=e.key,n=(0,d.Z)(t).activeElement;if("ArrowDown"===o)e.preventDefault(),R(t,n,p,c,k);else if("ArrowUp"===o)e.preventDefault(),R(t,n,p,c,P);else if("Home"===o)e.preventDefault(),R(t,null,p,c,k);else if("End"===o)e.preventDefault(),R(t,null,p,c,P);else if(1===o.length){const r=g.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&&C(n,r);r.previousKeyMatched&&(s||R(t,n,!1,c,k,r))?e.preventDefault():r.previousKeyMatched=!1}m&&m(e)},tabIndex:a?0:-1},h,{children:F}))}));var $=o(8442),F=o(7144),E=o(5340),z=o(8052),N=o(2734),I=o(577);const T=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"];function L(e){return`scale(${e}, ${e**2})`}const O={entering:{opacity:1,transform:L(1)},entered:{opacity:1,transform:"none"}},W="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:a=!0,children:s,easing:l,in:d,onEnter:u,onEntered:c,onEntering:p,onExit:m,onExited:f,onExiting:h,style:b,timeout:g="auto",TransitionComponent:Z=z.ZP}=e,x=(0,r.Z)(e,T),w=i.useRef(),S=i.useRef(),k=(0,N.Z)(),P=i.useRef(null),C=(0,y.Z)(P,s.ref,t),R=e=>t=>{if(e){const o=P.current;void 0===t?e(o):e(o,t)}},M=R(p),$=R(((e,t)=>{(0,I.n)(e);const{duration:o,delay:n,easing:r}=(0,I.C)({style:b,timeout:g,easing:l},{mode:"enter"});let i;"auto"===g?(i=k.transitions.getAutoHeightDuration(e.clientHeight),S.current=i):i=o,e.style.transition=[k.transitions.create("opacity",{duration:i,delay:n}),k.transitions.create("transform",{duration:W?i:.666*i,delay:n,easing:r})].join(","),u&&u(e,t)})),F=R(c),E=R(h),B=R((e=>{const{duration:t,delay:o,easing:n}=(0,I.C)({style:b,timeout:g,easing:l},{mode:"exit"});let r;"auto"===g?(r=k.transitions.getAutoHeightDuration(e.clientHeight),S.current=r):r=t,e.style.transition=[k.transitions.create("opacity",{duration:r,delay:o}),k.transitions.create("transform",{duration:W?r:.666*r,delay:W?o:o||.333*r,easing:n})].join(","),e.style.opacity=0,e.style.transform=L(.75),m&&m(e)})),A=R(f);return i.useEffect((()=>()=>{clearTimeout(w.current)}),[]),(0,v.jsx)(Z,(0,n.Z)({appear:a,in:d,nodeRef:P,onEnter:$,onEntered:F,onEntering:M,onExit:B,onExited:A,onExiting:E,addEndListener:e=>{"auto"===g&&(w.current=setTimeout(e,S.current||0)),o&&o(P.current,e)},timeout:"auto"===g?null:g},x,{children:(e,t)=>i.cloneElement(s,(0,n.Z)({style:(0,n.Z)({opacity:0,transform:L(.75),visibility:"exited"!==e||d?void 0:"hidden"},O[e],b,s.props.style),ref:C},t))}))}));B.muiSupportAuto=!0;const A=B;var j=o(6556),q=o(3470),D=o(8385),H=o(4567);function G(e){return(0,f.Z)("MuiModal",e)}(0,m.Z)("MuiModal",["root","hidden","backdrop"]);const K=["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"],U=(0,u.ZP)("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,n.Z)({position:"fixed",zIndex:(e.vars||e).zIndex.modal,right:0,bottom:0,top:0,left:0},!t.open&&t.exited&&{visibility:"hidden"}))),V=(0,u.ZP)(H.Z,{name:"MuiModal",slot:"Backdrop",overridesResolver:(e,t)=>t.backdrop})({zIndex:-1}),X=i.forwardRef((function(e,t){var o,d,u,p,m,f;const h=(0,c.Z)({name:"MuiModal",props:e}),{BackdropComponent:b=V,BackdropProps:g,className:Z,closeAfterTransition:x=!1,children:y,container:w,component:S,components:k={},componentsProps:P={},disableAutoFocus:C=!1,disableEnforceFocus:R=!1,disableEscapeKeyDown:M=!1,disablePortal:$=!1,disableRestoreFocus:F=!1,disableScrollLock:E=!1,hideBackdrop:z=!1,keepMounted:N=!1,onBackdropClick:I,open:T,slotProps:L,slots:O}=h,W=(0,r.Z)(h,K),B=(0,n.Z)({},h,{closeAfterTransition:x,disableAutoFocus:C,disableEnforceFocus:R,disableEscapeKeyDown:M,disablePortal:$,disableRestoreFocus:F,disableScrollLock:E,hideBackdrop:z,keepMounted:N}),{getRootProps:A,getBackdropProps:H,getTransitionProps:X,portalRef:_,isTopModal:J,exited:Y,hasTransition:Q}=(0,j.d)((0,n.Z)({},B,{rootRef:t})),ee=(0,n.Z)({},B,{exited:Y}),te=(e=>{const{open:t,exited:o,classes:n}=e,r={root:["root",!t&&o&&"hidden"],backdrop:["backdrop"]};return(0,s.Z)(r,G,n)})(ee),oe={};if(void 0===y.props.tabIndex&&(oe.tabIndex="-1"),Q){const{onEnter:e,onExited:t}=X();oe.onEnter=e,oe.onExited=t}const ne=null!=(o=null!=(d=null==O?void 0:O.root)?d:k.Root)?o:U,re=null!=(u=null!=(p=null==O?void 0:O.backdrop)?p:k.Backdrop)?u:b,ie=null!=(m=null==L?void 0:L.root)?m:P.root,ae=null!=(f=null==L?void 0:L.backdrop)?f:P.backdrop,se=(0,l.y)({elementType:ne,externalSlotProps:ie,externalForwardedProps:W,getSlotProps:A,additionalProps:{ref:t,as:S},ownerState:ee,className:(0,a.Z)(Z,null==ie?void 0:ie.className,null==te?void 0:te.root,!ee.open&&ee.exited&&(null==te?void 0:te.hidden))}),le=(0,l.y)({elementType:re,externalSlotProps:ae,additionalProps:g,getSlotProps:e=>H((0,n.Z)({},e,{onClick:t=>{I&&I(t),null!=e&&e.onClick&&e.onClick(t)}})),className:(0,a.Z)(null==ae?void 0:ae.className,null==g?void 0:g.className,null==te?void 0:te.backdrop),ownerState:ee});return N||T||Q&&!Y?(0,v.jsx)(D.h,{ref:_,container:w,disablePortal:$,children:(0,v.jsxs)(ne,(0,n.Z)({},se,{children:[!z&&b?(0,v.jsx)(re,(0,n.Z)({},le)):null,(0,v.jsx)(q.i,{disableEnforceFocus:R,disableAutoFocus:C,disableRestoreFocus:F,isEnabled:J,open:T,children:i.cloneElement(y,oe)})]}))}):null}));var _=o(6501);function J(e){return(0,f.Z)("MuiPopover",e)}(0,m.Z)("MuiPopover",["root","paper"]);const Y=["onEntering"],Q=["action","anchorEl","anchorOrigin","anchorPosition","anchorReference","children","className","container","elevation","marginThreshold","open","PaperProps","slots","slotProps","transformOrigin","TransitionComponent","transitionDuration","TransitionProps","disableScrollLock"],ee=["slotProps"];function te(e,t){let o=0;return"number"==typeof t?o=t:"center"===t?o=e.height/2:"bottom"===t&&(o=e.height),o}function oe(e,t){let o=0;return"number"==typeof t?o=t:"center"===t?o=e.width/2:"right"===t&&(o=e.width),o}function ne(e){return[e.horizontal,e.vertical].map((e=>"number"==typeof e?`${e}px`:e)).join(" ")}function re(e){return"function"==typeof e?e():e}const ie=(0,u.ZP)(X,{name:"MuiPopover",slot:"Root",overridesResolver:(e,t)=>t.root})({}),ae=(0,u.ZP)(_.Z,{name:"MuiPopover",slot:"Paper",overridesResolver:(e,t)=>t.paper})({position:"absolute",overflowY:"auto",overflowX:"hidden",minWidth:16,minHeight:16,maxWidth:"calc(100% - 32px)",maxHeight:"calc(100% - 32px)",outline:0}),se=i.forwardRef((function(e,t){var o,u,p;const m=(0,c.Z)({props:e,name:"MuiPopover"}),{action:f,anchorEl:h,anchorOrigin:b={vertical:"top",horizontal:"left"},anchorPosition:g,anchorReference:Z="anchorEl",children:x,className:w,container:S,elevation:k=8,marginThreshold:P=16,open:C,PaperProps:R={},slots:M,slotProps:z,transformOrigin:N={vertical:"top",horizontal:"left"},TransitionComponent:I=A,transitionDuration:T="auto",TransitionProps:{onEntering:L}={},disableScrollLock:O=!1}=m,W=(0,r.Z)(m.TransitionProps,Y),B=(0,r.Z)(m,Q),j=null!=(o=null==z?void 0:z.paper)?o:R,q=i.useRef(),D=(0,y.Z)(q,j.ref),H=(0,n.Z)({},m,{anchorOrigin:b,anchorReference:Z,elevation:k,marginThreshold:P,externalPaperSlotProps:j,transformOrigin:N,TransitionComponent:I,transitionDuration:T,TransitionProps:W}),G=(e=>{const{classes:t}=e;return(0,s.Z)({root:["root"],paper:["paper"]},J,t)})(H),K=i.useCallback((()=>{if("anchorPosition"===Z)return g;const e=re(h),t=(e&&1===e.nodeType?e:(0,d.Z)(q.current).body).getBoundingClientRect();return{top:t.top+te(t,b.vertical),left:t.left+oe(t,b.horizontal)}}),[h,b.horizontal,b.vertical,g,Z]),U=i.useCallback((e=>({vertical:te(e,N.vertical),horizontal:oe(e,N.horizontal)})),[N.horizontal,N.vertical]),V=i.useCallback((e=>{const t={width:e.offsetWidth,height:e.offsetHeight},o=U(t);if("none"===Z)return{top:null,left:null,transformOrigin:ne(o)};const n=K();let r=n.top-o.vertical,i=n.left-o.horizontal;const a=r+t.height,s=i+t.width,l=(0,E.Z)(re(h)),d=l.innerHeight-P,u=l.innerWidth-P;if(null!==P&&rd){const e=a-d;r-=e,o.vertical+=e}if(null!==P&&iu){const e=s-u;i-=e,o.horizontal+=e}return{top:`${Math.round(r)}px`,left:`${Math.round(i)}px`,transformOrigin:ne(o)}}),[h,Z,K,U,P]),[X,_]=i.useState(C),se=i.useCallback((()=>{const e=q.current;if(!e)return;const t=V(e);null!==t.top&&(e.style.top=t.top),null!==t.left&&(e.style.left=t.left),e.style.transformOrigin=t.transformOrigin,_(!0)}),[V]);i.useEffect((()=>(O&&window.addEventListener("scroll",se),()=>window.removeEventListener("scroll",se))),[h,O,se]),i.useEffect((()=>{C&&se()})),i.useImperativeHandle(f,(()=>C?{updatePosition:()=>{se()}}:null),[C,se]),i.useEffect((()=>{if(!C)return;const e=(0,F.Z)((()=>{se()})),t=(0,E.Z)(h);return t.addEventListener("resize",e),()=>{e.clear(),t.removeEventListener("resize",e)}}),[h,C,se]);let le=T;"auto"!==T||I.muiSupportAuto||(le=void 0);const de=S||(h?(0,d.Z)(re(h)).body:void 0),ue=null!=(u=null==M?void 0:M.root)?u:ie,ce=null!=(p=null==M?void 0:M.paper)?p:ae,pe=(0,l.y)({elementType:ce,externalSlotProps:(0,n.Z)({},j,{style:X?j.style:(0,n.Z)({},j.style,{opacity:0})}),additionalProps:{elevation:k,ref:D},ownerState:H,className:(0,a.Z)(G.paper,null==j?void 0:j.className)}),me=(0,l.y)({elementType:ue,externalSlotProps:(null==z?void 0:z.root)||{},externalForwardedProps:B,additionalProps:{ref:t,slotProps:{backdrop:{invisible:!0}},container:de,open:C},ownerState:H,className:(0,a.Z)(G.root,w)}),{slotProps:fe}=me,he=(0,r.Z)(me,ee);return(0,v.jsx)(ue,(0,n.Z)({},he,!(0,$.X)(ue)&&{slotProps:fe,disableScrollLock:O},{children:(0,v.jsx)(I,(0,n.Z)({appear:!0,in:C,onEntering:(e,t)=>{L&&L(e,t),se()},onExited:()=>{_(!1)},timeout:le},W,{children:(0,v.jsx)(ce,(0,n.Z)({},pe,{children:x}))}))}))}));function le(e){return(0,f.Z)("MuiMenu",e)}(0,m.Z)("MuiMenu",["root","paper","list"]);const de=["onEntering"],ue=["autoFocus","children","className","disableAutoFocusItem","MenuListProps","onClose","open","PaperProps","PopoverClasses","transitionDuration","TransitionProps","variant","slots","slotProps"],ce={vertical:"top",horizontal:"right"},pe={vertical:"top",horizontal:"left"},me=(0,u.ZP)(se,{shouldForwardProp:e=>(0,u.FO)(e)||"classes"===e,name:"MuiMenu",slot:"Root",overridesResolver:(e,t)=>t.root})({}),fe=(0,u.ZP)(ae,{name:"MuiMenu",slot:"Paper",overridesResolver:(e,t)=>t.paper})({maxHeight:"calc(100% - 96px)",WebkitOverflowScrolling:"touch"}),he=(0,u.ZP)(M,{name:"MuiMenu",slot:"List",overridesResolver:(e,t)=>t.list})({outline:0}),ve=i.forwardRef((function(e,t){var o,d;const u=(0,c.Z)({props:e,name:"MuiMenu"}),{autoFocus:p=!0,children:m,className:f,disableAutoFocusItem:h=!1,MenuListProps:b={},onClose:g,open:Z,PaperProps:x={},PopoverClasses:y,transitionDuration:w="auto",TransitionProps:{onEntering:S}={},variant:k="selectedMenu",slots:P={},slotProps:C={}}=u,R=(0,r.Z)(u.TransitionProps,de),M=(0,r.Z)(u,ue),$=(0,N.Z)(),F="rtl"===$.direction,E=(0,n.Z)({},u,{autoFocus:p,disableAutoFocusItem:h,MenuListProps:b,onEntering:S,PaperProps:x,transitionDuration:w,TransitionProps:R,variant:k}),z=(e=>{const{classes:t}=e;return(0,s.Z)({root:["root"],paper:["paper"],list:["list"]},le,t)})(E),I=p&&!h&&Z,T=i.useRef(null);let L=-1;i.Children.map(m,((e,t)=>{i.isValidElement(e)&&(e.props.disabled||("selectedMenu"===k&&e.props.selected||-1===L)&&(L=t))}));const O=null!=(o=P.paper)?o:fe,W=null!=(d=C.paper)?d:x,B=(0,l.y)({elementType:P.root,externalSlotProps:C.root,ownerState:E,className:[z.root,f]}),A=(0,l.y)({elementType:O,externalSlotProps:W,ownerState:E,className:z.paper});return(0,v.jsx)(me,(0,n.Z)({onClose:g,anchorOrigin:{vertical:"bottom",horizontal:F?"right":"left"},transformOrigin:F?ce:pe,slots:{paper:O,root:P.root},slotProps:{root:B,paper:A},open:Z,ref:t,transitionDuration:w,TransitionProps:(0,n.Z)({onEntering:(e,t)=>{T.current&&T.current.adjustStyleForScrollbar(e,$),S&&S(e,t)}},R),ownerState:E},M,{classes:y,children:(0,v.jsx)(he,(0,n.Z)({onKeyDown:e=>{"Tab"===e.key&&(e.preventDefault(),g&&g(e,"tabKeyDown"))},actions:T,autoFocus:p&&(-1===L||h),autoFocusItem:I,variant:k},b,{className:(0,a.Z)(z.list,b.className),children:m}))}))}))},1753:(e,t,o)=>{o.d(t,{Z:()=>P});var n=o(3366),r=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(1796),d=o(948),u=o(1657),c=o(9773),p=o(539),m=o(8974),f=o(1705),h=o(5097),v=o(1588);const b=(0,v.Z)("MuiListItemIcon",["root","alignItemsFlexStart"]),g=(0,v.Z)("MuiListItemText",["root","multiline","dense","inset","primary","secondary"]);var Z=o(4867);function x(e){return(0,Z.Z)("MuiMenuItem",e)}const y=(0,v.Z)("MuiMenuItem",["root","focusVisible","dense","disabled","divider","gutters","selected"]);var w=o(5893);const S=["autoFocus","component","dense","divider","disableGutters","focusVisibleClassName","role","tabIndex","className"],k=(0,d.ZP)(p.Z,{shouldForwardProp:e=>(0,d.FO)(e)||"classes"===e,name:"MuiMenuItem",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,o.dense&&t.dense,o.divider&&t.divider,!o.disableGutters&&t.gutters]}})((({theme:e,ownerState:t})=>(0,r.Z)({},e.typography.body1,{display:"flex",justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",minHeight:48,paddingTop:6,paddingBottom:6,boxSizing:"border-box",whiteSpace:"nowrap"},!t.disableGutters&&{paddingLeft:16,paddingRight:16},t.divider&&{borderBottom:`1px solid ${(e.vars||e).palette.divider}`,backgroundClip:"padding-box"},{"&:hover":{textDecoration:"none",backgroundColor:(e.vars||e).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${y.selected}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,l.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity),[`&.${y.focusVisible}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.focusOpacity}))`:(0,l.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.focusOpacity)}},[`&.${y.selected}:hover`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.hoverOpacity}))`:(0,l.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,l.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity)}},[`&.${y.focusVisible}`]:{backgroundColor:(e.vars||e).palette.action.focus},[`&.${y.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity},[`& + .${h.Z.root}`]:{marginTop:e.spacing(1),marginBottom:e.spacing(1)},[`& + .${h.Z.inset}`]:{marginLeft:52},[`& .${g.root}`]:{marginTop:0,marginBottom:0},[`& .${g.inset}`]:{paddingLeft:36},[`& .${b.root}`]:{minWidth:36}},!t.dense&&{[e.breakpoints.up("sm")]:{minHeight:"auto"}},t.dense&&(0,r.Z)({minHeight:32,paddingTop:4,paddingBottom:4},e.typography.body2,{[`& .${b.root} svg`]:{fontSize:"1.25rem"}})))),P=i.forwardRef((function(e,t){const o=(0,u.Z)({props:e,name:"MuiMenuItem"}),{autoFocus:l=!1,component:d="li",dense:p=!1,divider:h=!1,disableGutters:v=!1,focusVisibleClassName:b,role:g="menuitem",tabIndex:Z,className:y}=o,P=(0,n.Z)(o,S),C=i.useContext(c.Z),R=i.useMemo((()=>({dense:p||C.dense||!1,disableGutters:v})),[C.dense,p,v]),M=i.useRef(null);(0,m.Z)((()=>{l&&M.current&&M.current.focus()}),[l]);const $=(0,r.Z)({},o,{dense:R.dense,divider:h,disableGutters:v}),F=(e=>{const{disabled:t,dense:o,divider:n,disableGutters:i,selected:a,classes:l}=e,d={root:["root",o&&"dense",t&&"disabled",!i&&"gutters",n&&"divider",a&&"selected"]},u=(0,s.Z)(d,x,l);return(0,r.Z)({},l,u)})(o),E=(0,f.Z)(M,t);let z;return o.disabled||(z=void 0!==Z?Z:-1),(0,w.jsx)(c.Z.Provider,{value:R,children:(0,w.jsx)(k,(0,r.Z)({ref:E,role:g,tabIndex:z,component:d,focusVisibleClassName:(0,a.Z)(F.focusVisible,b),className:(0,a.Z)(F.root,y)},P,{ownerState:$,classes:F}))})}))},5961:(e,t,o)=>{o.d(t,{ZP:()=>x,SJ:()=>g,wU:()=>v});var n=o(3366),r=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(8216),d=o(1588),u=o(4867);function c(e){return(0,u.Z)("MuiNativeSelect",e)}const p=(0,d.Z)("MuiNativeSelect",["root","select","multiple","filled","outlined","standard","disabled","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput","error"]);var m=o(948),f=o(5893);const h=["className","disabled","error","IconComponent","inputRef","variant"],v=({ownerState:e,theme:t})=>(0,r.Z)({MozAppearance:"none",WebkitAppearance:"none",userSelect:"none",borderRadius:0,cursor:"pointer","&:focus":(0,r.Z)({},t.vars?{backgroundColor:`rgba(${t.vars.palette.common.onBackgroundChannel} / 0.05)`}:{backgroundColor:"light"===t.palette.mode?"rgba(0, 0, 0, 0.05)":"rgba(255, 255, 255, 0.05)"},{borderRadius:0}),"&::-ms-expand":{display:"none"},[`&.${p.disabled}`]:{cursor:"default"},"&[multiple]":{height:"auto"},"&:not([multiple]) option, &:not([multiple]) optgroup":{backgroundColor:(t.vars||t).palette.background.paper},"&&&":{paddingRight:24,minWidth:16}},"filled"===e.variant&&{"&&&":{paddingRight:32}},"outlined"===e.variant&&{borderRadius:(t.vars||t).shape.borderRadius,"&:focus":{borderRadius:(t.vars||t).shape.borderRadius},"&&&":{paddingRight:32}}),b=(0,m.ZP)("select",{name:"MuiNativeSelect",slot:"Select",shouldForwardProp:m.FO,overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.select,t[o.variant],o.error&&t.error,{[`&.${p.multiple}`]:t.multiple}]}})(v),g=({ownerState:e,theme:t})=>(0,r.Z)({position:"absolute",right:0,top:"calc(50% - .5em)",pointerEvents:"none",color:(t.vars||t).palette.action.active,[`&.${p.disabled}`]:{color:(t.vars||t).palette.action.disabled}},e.open&&{transform:"rotate(180deg)"},"filled"===e.variant&&{right:7},"outlined"===e.variant&&{right:7}),Z=(0,m.ZP)("svg",{name:"MuiNativeSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.icon,o.variant&&t[`icon${(0,l.Z)(o.variant)}`],o.open&&t.iconOpen]}})(g),x=i.forwardRef((function(e,t){const{className:o,disabled:d,error:u,IconComponent:p,inputRef:m,variant:v="standard"}=e,g=(0,n.Z)(e,h),x=(0,r.Z)({},e,{disabled:d,variant:v,error:u}),y=(e=>{const{classes:t,variant:o,disabled:n,multiple:r,open:i,error:a}=e,d={select:["select",o,n&&"disabled",r&&"multiple",a&&"error"],icon:["icon",`icon${(0,l.Z)(o)}`,i&&"iconOpen",n&&"disabled"]};return(0,s.Z)(d,c,t)})(x);return(0,f.jsxs)(i.Fragment,{children:[(0,f.jsx)(b,(0,r.Z)({ownerState:x,className:(0,a.Z)(y.select,o),disabled:d,ref:m||t},g)),e.multiple?null:(0,f.jsx)(Z,{as:p,ownerState:x,className:y.icon})]})}))},3031:(e,t,o)=>{o.d(t,{Z:()=>R});var n,r=o(3366),i=o(7462),a=o(7294),s=o(4780),l=o(948),d=o(5893);const u=["children","classes","className","label","notched"],c=(0,l.ZP)("fieldset",{shouldForwardProp:l.FO})({textAlign:"left",position:"absolute",bottom:0,right:0,top:-5,left:0,margin:0,padding:"0 8px",pointerEvents:"none",borderRadius:"inherit",borderStyle:"solid",borderWidth:1,overflow:"hidden",minWidth:"0%"}),p=(0,l.ZP)("legend",{shouldForwardProp:l.FO})((({ownerState:e,theme:t})=>(0,i.Z)({float:"unset",width:"auto",overflow:"hidden"},!e.withLabel&&{padding:0,lineHeight:"11px",transition:t.transitions.create("width",{duration:150,easing:t.transitions.easing.easeOut})},e.withLabel&&(0,i.Z)({display:"block",padding:0,height:11,fontSize:"0.75em",visibility:"hidden",maxWidth:.01,transition:t.transitions.create("max-width",{duration:50,easing:t.transitions.easing.easeOut}),whiteSpace:"nowrap","& > span":{paddingLeft:5,paddingRight:5,display:"inline-block",opacity:0,visibility:"visible"}},e.notched&&{maxWidth:"100%",transition:t.transitions.create("max-width",{duration:100,easing:t.transitions.easing.easeOut,delay:50})}))));var m=o(4423),f=o(5704),h=o(1588),v=o(4867),b=o(5827);function g(e){return(0,v.Z)("MuiOutlinedInput",e)}const Z=(0,i.Z)({},b.Z,(0,h.Z)("MuiOutlinedInput",["root","notchedOutline","input"]));var x=o(8543),y=o(1657);const w=["components","fullWidth","inputComponent","label","multiline","notched","slots","type"],S=(0,l.ZP)(x.Ej,{shouldForwardProp:e=>(0,l.FO)(e)||"classes"===e,name:"MuiOutlinedInput",slot:"Root",overridesResolver:x.Gx})((({theme:e,ownerState:t})=>{const o="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return(0,i.Z)({position:"relative",borderRadius:(e.vars||e).shape.borderRadius,[`&:hover .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette.text.primary},"@media (hover: none)":{[`&:hover .${Z.notchedOutline}`]:{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:o}},[`&.${Z.focused} .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette[t.color].main,borderWidth:2},[`&.${Z.error} .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette.error.main},[`&.${Z.disabled} .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette.action.disabled}},t.startAdornment&&{paddingLeft:14},t.endAdornment&&{paddingRight:14},t.multiline&&(0,i.Z)({padding:"16.5px 14px"},"small"===t.size&&{padding:"8.5px 14px"}))})),k=(0,l.ZP)((function(e){const{className:t,label:o,notched:a}=e,s=(0,r.Z)(e,u),l=null!=o&&""!==o,m=(0,i.Z)({},e,{notched:a,withLabel:l});return(0,d.jsx)(c,(0,i.Z)({"aria-hidden":!0,className:t,ownerState:m},s,{children:(0,d.jsx)(p,{ownerState:m,children:l?(0,d.jsx)("span",{children:o}):n||(n=(0,d.jsx)("span",{className:"notranslate",children:"​"}))})}))}),{name:"MuiOutlinedInput",slot:"NotchedOutline",overridesResolver:(e,t)=>t.notchedOutline})((({theme:e})=>{const t="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:t}})),P=(0,l.ZP)(x.rA,{name:"MuiOutlinedInput",slot:"Input",overridesResolver:x._o})((({theme:e,ownerState:t})=>(0,i.Z)({padding:"16.5px 14px"},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:"light"===e.palette.mode?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:"light"===e.palette.mode?null:"#fff",caretColor:"light"===e.palette.mode?null:"#fff",borderRadius:"inherit"}},e.vars&&{"&:-webkit-autofill":{borderRadius:"inherit"},[e.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},"small"===t.size&&{padding:"8.5px 14px"},t.multiline&&{padding:0},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0}))),C=a.forwardRef((function(e,t){var o,n,l,u,c;const p=(0,y.Z)({props:e,name:"MuiOutlinedInput"}),{components:h={},fullWidth:v=!1,inputComponent:b="input",label:Z,multiline:C=!1,notched:R,slots:M={},type:$="text"}=p,F=(0,r.Z)(p,w),E=(e=>{const{classes:t}=e,o=(0,s.Z)({root:["root"],notchedOutline:["notchedOutline"],input:["input"]},g,t);return(0,i.Z)({},t,o)})(p),z=(0,m.Z)(),N=(0,f.Z)({props:p,muiFormControl:z,states:["color","disabled","error","focused","hiddenLabel","size","required"]}),I=(0,i.Z)({},p,{color:N.color||"primary",disabled:N.disabled,error:N.error,focused:N.focused,formControl:z,fullWidth:v,hiddenLabel:N.hiddenLabel,multiline:C,size:N.size,type:$}),T=null!=(o=null!=(n=M.root)?n:h.Root)?o:S,L=null!=(l=null!=(u=M.input)?u:h.Input)?l:P;return(0,d.jsx)(x.ZP,(0,i.Z)({slots:{root:T,input:L},renderSuffix:e=>(0,d.jsx)(k,{ownerState:I,className:E.notchedOutline,label:null!=Z&&""!==Z&&N.required?c||(c=(0,d.jsxs)(a.Fragment,{children:[Z," ","*"]})):Z,notched:void 0!==R?R:Boolean(e.startAdornment||e.filled||e.focused)}),fullWidth:v,inputComponent:b,multiline:C,ref:t,type:$},F,{classes:(0,i.Z)({},E,{notchedOutline:null})}))}));C.muiName="Input";const R=C},6501:(e,t,o)=>{o.d(t,{Z:()=>g});var n=o(3366),r=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(1796),d=o(948),u=o(2029),c=o(1657),p=o(1588),m=o(4867);function f(e){return(0,m.Z)("MuiPaper",e)}(0,p.Z)("MuiPaper",["root","rounded","outlined","elevation","elevation0","elevation1","elevation2","elevation3","elevation4","elevation5","elevation6","elevation7","elevation8","elevation9","elevation10","elevation11","elevation12","elevation13","elevation14","elevation15","elevation16","elevation17","elevation18","elevation19","elevation20","elevation21","elevation22","elevation23","elevation24"]);var h=o(5893);const v=["className","component","elevation","square","variant"],b=(0,d.ZP)("div",{name:"MuiPaper",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[o.variant],!o.square&&t.rounded,"elevation"===o.variant&&t[`elevation${o.elevation}`]]}})((({theme:e,ownerState:t})=>{var o;return(0,r.Z)({backgroundColor:(e.vars||e).palette.background.paper,color:(e.vars||e).palette.text.primary,transition:e.transitions.create("box-shadow")},!t.square&&{borderRadius:e.shape.borderRadius},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.divider}`},"elevation"===t.variant&&(0,r.Z)({boxShadow:(e.vars||e).shadows[t.elevation]},!e.vars&&"dark"===e.palette.mode&&{backgroundImage:`linear-gradient(${(0,l.Fq)("#fff",(0,u.Z)(t.elevation))}, ${(0,l.Fq)("#fff",(0,u.Z)(t.elevation))})`},e.vars&&{backgroundImage:null==(o=e.vars.overlays)?void 0:o[t.elevation]}))})),g=i.forwardRef((function(e,t){const o=(0,c.Z)({props:e,name:"MuiPaper"}),{className:i,component:l="div",elevation:d=1,square:u=!1,variant:p="elevation"}=o,m=(0,n.Z)(o,v),g=(0,r.Z)({},o,{component:l,elevation:d,square:u,variant:p}),Z=(e=>{const{square:t,elevation:o,variant:n,classes:r}=e,i={root:["root",n,!t&&"rounded","elevation"===n&&`elevation${o}`]};return(0,s.Z)(i,f,r)})(g);return(0,h.jsx)(b,(0,r.Z)({as:l,ownerState:g,className:(0,a.Z)(Z.root,i),ref:t},m))}))}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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cmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9GaWxsZWRJbnB1dC9maWxsZWRJbnB1dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRmlsbGVkSW5wdXQvRmlsbGVkSW5wdXQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1IZWxwZXJUZXh0L2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtSGVscGVyVGV4dC9Gb3JtSGVscGVyVGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9HbG9iYWxTdHlsZXMvR2xvYmFsU3R5bGVzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dyaWQvR3JpZENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvR3JpZC9ncmlkQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9HcmlkL0dyaWQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXQvaW5wdXRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0L0lucHV0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0QmFzZS9JbnB1dEJhc2UuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlL2lucHV0QmFzZUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlL3V0aWxzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1MYWJlbC9mb3JtTGFiZWxDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1MYWJlbC9Gb3JtTGFiZWwuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRMYWJlbC9pbnB1dExhYmVsQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dExhYmVsL0lucHV0TGFiZWwuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGlzdC9MaXN0Q29udGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0L2xpc3RDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3QvTGlzdC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9NZW51TGlzdC9NZW51TGlzdC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Hcm93L0dyb3cuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTW9kYWwvbW9kYWxDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01vZGFsL01vZGFsLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BvcG92ZXIvcG9wb3ZlckNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUG9wb3Zlci9Qb3BvdmVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01lbnUvbWVudUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudS9NZW51LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtSWNvbi9saXN0SXRlbUljb25DbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtVGV4dC9saXN0SXRlbVRleHRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01lbnVJdGVtL21lbnVJdGVtQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9NZW51SXRlbS9NZW51SXRlbS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9OYXRpdmVTZWxlY3QvbmF0aXZlU2VsZWN0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9OYXRpdmVTZWxlY3QvTmF0aXZlU2VsZWN0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvT3V0bGluZWRJbnB1dC9Ob3RjaGVkT3V0bGluZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9PdXRsaW5lZElucHV0L291dGxpbmVkSW5wdXRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL091dGxpbmVkSW5wdXQvT3V0bGluZWRJbnB1dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9QYXBlci9wYXBlckNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUGFwZXIvUGFwZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5pbXBvcnQgeyBpbnB1dEJhc2VDbGFzc2VzIH0gZnJvbSAnLi4vSW5wdXRCYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxsZWRJbnB1dFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRmlsbGVkSW5wdXQnLCBzbG90KTtcbn1cbmNvbnN0IGZpbGxlZElucHV0Q2xhc3NlcyA9IF9leHRlbmRzKHt9LCBpbnB1dEJhc2VDbGFzc2VzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGaWxsZWRJbnB1dCcsIFsncm9vdCcsICd1bmRlcmxpbmUnLCAnaW5wdXQnXSkpO1xuZXhwb3J0IGRlZmF1bHQgZmlsbGVkSW5wdXRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImRpc2FibGVVbmRlcmxpbmVcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaGlkZGVuTGFiZWxcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcIm11bHRpbGluZVwiLCBcInNsb3RQcm9wc1wiLCBcInNsb3RzXCIsIFwidHlwZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlZlR5cGUsIGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBJbnB1dEJhc2UgZnJvbSAnLi4vSW5wdXRCYXNlJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgZmlsbGVkSW5wdXRDbGFzc2VzLCB7IGdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9maWxsZWRJbnB1dENsYXNzZXMnO1xuaW1wb3J0IHsgcm9vdE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlciwgaW5wdXRPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyLCBJbnB1dEJhc2VSb290LCBJbnB1dEJhc2VDb21wb25lbnQgYXMgSW5wdXRCYXNlSW5wdXQgfSBmcm9tICcuLi9JbnB1dEJhc2UvSW5wdXRCYXNlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlVW5kZXJsaW5lXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZVVuZGVybGluZSAmJiAndW5kZXJsaW5lJ10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgRmlsbGVkSW5wdXRSb290ID0gc3R5bGVkKElucHV0QmFzZVJvb3QsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUZpbGxlZElucHV0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbLi4uaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCBzdHlsZXMpLCAhb3duZXJTdGF0ZS5kaXNhYmxlVW5kZXJsaW5lICYmIHN0eWxlcy51bmRlcmxpbmVdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3BhbGV0dGU7XG4gIGNvbnN0IGxpZ2h0ID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnO1xuICBjb25zdCBib3R0b21MaW5lQ29sb3IgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuNDIpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknO1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuMDYpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDkpJztcbiAgY29uc3QgaG92ZXJCYWNrZ3JvdW5kID0gbGlnaHQgPyAncmdiYSgwLCAwLCAwLCAwLjA5KScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEzKSc7XG4gIGNvbnN0IGRpc2FibGVkQmFja2dyb3VuZCA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC4xMiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknO1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvcixcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYmFja2dyb3VuZC1jb2xvcicsIHtcbiAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLFxuICAgICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICAgIH0pLFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmhvdmVyQmcgOiBob3ZlckJhY2tncm91bmQsXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuYmcgOiBiYWNrZ3JvdW5kQ29sb3JcbiAgICAgIH1cbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5mb2N1c2VkfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuYmcgOiBiYWNrZ3JvdW5kQ29sb3JcbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmRpc2FibGVkQmcgOiBkaXNhYmxlZEJhY2tncm91bmRcbiAgICB9XG4gIH0sICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYge1xuICAgICcmOmFmdGVyJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMnB4IHNvbGlkICR7KF9wYWxldHRlID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvciB8fCAncHJpbWFyeSddKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUubWFpbn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDApJyxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlcixcbiAgICAgICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmZvY3VzZWR9OmFmdGVyYF06IHtcbiAgICAgIC8vIHRyYW5zbGF0ZVgoMCkgaXMgYSB3b3JrYXJvdW5kIGZvciBTYWZhcmkgdHJhbnNmb3JtIHNjYWxlIGJ1Z1xuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzMxNzY2XG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMSkgdHJhbnNsYXRlWCgwKSdcbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5lcnJvcn1gXToge1xuICAgICAgJyY6YmVmb3JlLCAmOmFmdGVyJzoge1xuICAgICAgICBib3JkZXJCb3R0b21Db2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICAgICAgfVxuICAgIH0sXG4gICAgJyY6YmVmb3JlJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7dGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvICR7dGhlbWUudmFycy5vcGFjaXR5LmlucHV0VW5kZXJsaW5lfSlgIDogYm90dG9tTGluZUNvbG9yfWAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgLy8gRG9pbmcgdGhlIG90aGVyIHdheSBhcm91bmQgY3Jhc2ggb24gSUUxMSBcIicnXCIgaHR0cHM6Ly9naXRodWIuY29tL2Nzc2luanMvanNzL2lzc3Vlcy8yNDJcbiAgICAgIGNvbnRlbnQ6ICdcIlxcXFwwMGEwXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICByaWdodDogMCxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYm9yZGVyLWJvdHRvbS1jb2xvcicsIHtcbiAgICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXJcbiAgICAgIH0pLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnIC8vIFRyYW5zcGFyZW50IHRvIHRoZSBob3ZlciBzdHlsZS5cbiAgICB9LFxuICAgIFtgJjpob3Zlcjpub3QoLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfSwgLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmVycm9yfSk6YmVmb3JlYF06IHtcbiAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeX1gXG4gICAgfSxcbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZGlzYWJsZWR9OmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b21TdHlsZTogJ2RvdHRlZCdcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYge1xuICAgIHBhZGRpbmdMZWZ0OiAxMlxuICB9LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gICAgcGFkZGluZ1JpZ2h0OiAxMlxuICB9LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBfZXh0ZW5kcyh7XG4gICAgcGFkZGluZzogJzI1cHggMTJweCA4cHgnXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZ1RvcDogMjEsXG4gICAgcGFkZGluZ0JvdHRvbTogNFxuICB9LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHtcbiAgICBwYWRkaW5nVG9wOiAxNixcbiAgICBwYWRkaW5nQm90dG9tOiAxN1xuICB9LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZ1RvcDogOCxcbiAgICBwYWRkaW5nQm90dG9tOiA5XG4gIH0pKTtcbn0pO1xuY29uc3QgRmlsbGVkSW5wdXRJbnB1dCA9IHN0eWxlZChJbnB1dEJhc2VJbnB1dCwge1xuICBuYW1lOiAnTXVpRmlsbGVkSW5wdXQnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcGFkZGluZ1RvcDogMjUsXG4gIHBhZGRpbmdSaWdodDogMTIsXG4gIHBhZGRpbmdCb3R0b206IDgsXG4gIHBhZGRpbmdMZWZ0OiAxMlxufSwgIXRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIFdlYmtpdEJveFNoYWRvdzogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcwIDAgMCAxMDBweCAjMjY2Nzk4IGluc2V0JyxcbiAgICBXZWJraXRUZXh0RmlsbENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGNhcmV0Q29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnI2ZmZicsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogJ2luaGVyaXQnLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAnaW5oZXJpdCdcbiAgfVxufSwgdGhlbWUudmFycyAmJiB7XG4gICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogJ2luaGVyaXQnLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAnaW5oZXJpdCdcbiAgfSxcbiAgW3RoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3IoJ2RhcmsnKV06IHtcbiAgICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgICAgV2Via2l0Qm94U2hhZG93OiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgICBXZWJraXRUZXh0RmlsbENvbG9yOiAnI2ZmZicsXG4gICAgICBjYXJldENvbG9yOiAnI2ZmZidcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdUb3A6IDIxLFxuICBwYWRkaW5nQm90dG9tOiA0XG59LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHtcbiAgcGFkZGluZ1RvcDogMTYsXG4gIHBhZGRpbmdCb3R0b206IDE3XG59LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ0xlZnQ6IDBcbn0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgcGFkZGluZ1JpZ2h0OiAwXG59LCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdUb3A6IDgsXG4gIHBhZGRpbmdCb3R0b206IDlcbn0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHtcbiAgcGFkZGluZ1RvcDogMCxcbiAgcGFkZGluZ0JvdHRvbTogMCxcbiAgcGFkZGluZ0xlZnQ6IDAsXG4gIHBhZGRpbmdSaWdodDogMFxufSkpO1xuY29uc3QgRmlsbGVkSW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGaWxsZWRJbnB1dChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRyb290LCBfcmVmMiwgX3Nsb3RzJGlucHV0O1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGaWxsZWRJbnB1dCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wczogY29tcG9uZW50c1Byb3BzUHJvcCxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgLy8gZGVjbGFyZSBoZXJlIHRvIHByZXZlbnQgc3ByZWFkaW5nIHRvIERPTVxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBzbG90UHJvcHMsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgdHlwZSA9ICd0ZXh0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZnVsbFdpZHRoLFxuICAgIGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZSxcbiAgICB0eXBlXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcyA9IHtcbiAgICByb290OiB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSxcbiAgICBpbnB1dDoge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH1cbiAgfTtcbiAgY29uc3QgY29tcG9uZW50c1Byb3BzID0gKHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCkgPyBkZWVwbWVyZ2UoZmlsbGVkSW5wdXRDb21wb25lbnRzUHJvcHMsIHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCkgOiBmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcztcbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBGaWxsZWRJbnB1dFJvb3Q7XG4gIGNvbnN0IElucHV0U2xvdCA9IChfcmVmMiA9IChfc2xvdHMkaW5wdXQgPSBzbG90cy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90cyRpbnB1dCA6IGNvbXBvbmVudHMuSW5wdXQpICE9IG51bGwgPyBfcmVmMiA6IEZpbGxlZElucHV0SW5wdXQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICBzbG90czoge1xuICAgICAgcm9vdDogUm9vdFNsb3QsXG4gICAgICBpbnB1dDogSW5wdXRTbG90XG4gICAgfSxcbiAgICBjb21wb25lbnRzUHJvcHM6IGNvbXBvbmVudHNQcm9wcyxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudDogaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGaWxsZWRJbnB1dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90UHJvcHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdFByb3BzYCBwcm9wIGluc3RlYWQsIGFzIGBjb21wb25lbnRzUHJvcHNgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IHdpbGwgbm90IGhhdmUgYW4gdW5kZXJsaW5lLlxuICAgKi9cbiAgZGlzYWJsZVVuZGVybGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBoaWRkZW4uXG4gICAqIFRoaXMgaXMgdXNlZCB0byBpbmNyZWFzZSBkZW5zaXR5IGZvciBhIGBGaWxsZWRJbnB1dGAuXG4gICAqIEJlIHN1cmUgdG8gYWRkIGBhcmlhLWxhYmVsYCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZGVuTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAnbm9uZSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIFtUZXh0YXJlYUF1dG9zaXplXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKSBlbGVtZW50IGlzIHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIHJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5GaWxsZWRJbnB1dC5tdWlOYW1lID0gJ0lucHV0JztcbmV4cG9ydCBkZWZhdWx0IEZpbGxlZElucHV0OyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGb3JtQ29udHJvbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUNvbnRyb2xDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRm9ybUNvbnRyb2wnLCBbJ3Jvb3QnLCAnbWFyZ2luTm9uZScsICdtYXJnaW5Ob3JtYWwnLCAnbWFyZ2luRGVuc2UnLCAnZnVsbFdpZHRoJywgJ2Rpc2FibGVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgZm9ybUNvbnRyb2xDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCIsIFwiZm9jdXNlZFwiLCBcImZ1bGxXaWR0aFwiLCBcImhpZGRlbkxhYmVsXCIsIFwibWFyZ2luXCIsIFwicmVxdWlyZWRcIiwgXCJzaXplXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBpc0ZpbGxlZCwgaXNBZG9ybmVkU3RhcnQgfSBmcm9tICcuLi9JbnB1dEJhc2UvdXRpbHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgaXNNdWlFbGVtZW50IGZyb20gJy4uL3V0aWxzL2lzTXVpRWxlbWVudCc7XG5pbXBvcnQgRm9ybUNvbnRyb2xDb250ZXh0IGZyb20gJy4vRm9ybUNvbnRyb2xDb250ZXh0JztcbmltcG9ydCB7IGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL2Zvcm1Db250cm9sQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgbWFyZ2luLFxuICAgIGZ1bGxXaWR0aFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgbWFyZ2luICE9PSAnbm9uZScgJiYgYG1hcmdpbiR7Y2FwaXRhbGl6ZShtYXJnaW4pfWAsIGZ1bGxXaWR0aCAmJiAnZnVsbFdpZHRoJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBGb3JtQ29udHJvbFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUZvcm1Db250cm9sJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHN0eWxlcykgPT4ge1xuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3R5bGVzLnJvb3QsIHN0eWxlc1tgbWFyZ2luJHtjYXBpdGFsaXplKG93bmVyU3RhdGUubWFyZ2luKX1gXSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYgc3R5bGVzLmZ1bGxXaWR0aCk7XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAvLyBSZXNldCBmaWVsZHNldCBkZWZhdWx0IHN0eWxlLlxuICBtaW5XaWR0aDogMCxcbiAgcGFkZGluZzogMCxcbiAgbWFyZ2luOiAwLFxuICBib3JkZXI6IDAsXG4gIHZlcnRpY2FsQWxpZ246ICd0b3AnXG59LCBvd25lclN0YXRlLm1hcmdpbiA9PT0gJ25vcm1hbCcgJiYge1xuICBtYXJnaW5Ub3A6IDE2LFxuICBtYXJnaW5Cb3R0b206IDhcbn0sIG93bmVyU3RhdGUubWFyZ2luID09PSAnZGVuc2UnICYmIHtcbiAgbWFyZ2luVG9wOiA4LFxuICBtYXJnaW5Cb3R0b206IDRcbn0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHtcbiAgd2lkdGg6ICcxMDAlJ1xufSkpO1xuXG4vKipcbiAqIFByb3ZpZGVzIGNvbnRleHQgc3VjaCBhcyBmaWxsZWQvZm9jdXNlZC9lcnJvci9yZXF1aXJlZCBmb3IgZm9ybSBpbnB1dHMuXG4gKiBSZWx5aW5nIG9uIHRoZSBjb250ZXh0IHByb3ZpZGVzIGhpZ2ggZmxleGliaWxpdHkgYW5kIGVuc3VyZXMgdGhhdCB0aGUgc3RhdGUgYWx3YXlzIHN0YXlzXG4gKiBjb25zaXN0ZW50IGFjcm9zcyB0aGUgY2hpbGRyZW4gb2YgdGhlIGBGb3JtQ29udHJvbGAuXG4gKiBUaGlzIGNvbnRleHQgaXMgdXNlZCBieSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKlxuICogIC0gRm9ybUxhYmVsXG4gKiAgLSBGb3JtSGVscGVyVGV4dFxuICogIC0gSW5wdXRcbiAqICAtIElucHV0TGFiZWxcbiAqXG4gKiBZb3UgY2FuIGZpbmQgb25lIGNvbXBvc2l0aW9uIGV4YW1wbGUgYmVsb3cgYW5kIG1vcmUgZ29pbmcgdG8gW3RoZSBkZW1vc10oL21hdGVyaWFsLXVpL3JlYWN0LXRleHQtZmllbGQvI2NvbXBvbmVudHMpLlxuICpcbiAqIGBgYGpzeFxuICogPEZvcm1Db250cm9sPlxuICogICA8SW5wdXRMYWJlbCBodG1sRm9yPVwibXktaW5wdXRcIj5FbWFpbCBhZGRyZXNzPC9JbnB1dExhYmVsPlxuICogICA8SW5wdXQgaWQ9XCJteS1pbnB1dFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJteS1oZWxwZXItdGV4dFwiIC8+XG4gKiAgIDxGb3JtSGVscGVyVGV4dCBpZD1cIm15LWhlbHBlci10ZXh0XCI+V2UnbGwgbmV2ZXIgc2hhcmUgeW91ciBlbWFpbC48L0Zvcm1IZWxwZXJUZXh0PlxuICogPC9Gb3JtQ29udHJvbD5cbiAqIGBgYFxuICpcbiAqIOKaoO+4jyBPbmx5IG9uZSBgSW5wdXRCYXNlYCBjYW4gYmUgdXNlZCB3aXRoaW4gYSBGb3JtQ29udHJvbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdmlzdWFsIGluY29uc2lzdGVuY2llcy5cbiAqIEZvciBpbnN0YW5jZSwgb25seSBvbmUgaW5wdXQgY2FuIGJlIGZvY3VzZWQgYXQgdGhlIHNhbWUgdGltZSwgdGhlIHN0YXRlIHNob3VsZG4ndCBiZSBzaGFyZWQuXG4gKi9cbmNvbnN0IEZvcm1Db250cm9sID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUNvbnRyb2woaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1Db250cm9sJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGVycm9yID0gZmFsc2UsXG4gICAgICBmb2N1c2VkOiB2aXN1YWxseUZvY3VzZWQsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGhpZGRlbkxhYmVsID0gZmFsc2UsXG4gICAgICBtYXJnaW4gPSAnbm9uZScsXG4gICAgICByZXF1aXJlZCA9IGZhbHNlLFxuICAgICAgc2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgdmFyaWFudCA9ICdvdXRsaW5lZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGNvbXBvbmVudCxcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWwsXG4gICAgbWFyZ2luLFxuICAgIHJlcXVpcmVkLFxuICAgIHNpemUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBbYWRvcm5lZFN0YXJ0LCBzZXRBZG9ybmVkU3RhcnRdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgIC8vIFdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgZmluZCB0aGUgSW5wdXQgaW4gb3JkZXJcbiAgICAvLyB0byBmdWxseSBzdXBwb3J0IHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICBsZXQgaW5pdGlhbEFkb3JuZWRTdGFydCA9IGZhbHNlO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgICBpZiAoIWlzTXVpRWxlbWVudChjaGlsZCwgWydJbnB1dCcsICdTZWxlY3QnXSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXQgPSBpc011aUVsZW1lbnQoY2hpbGQsIFsnU2VsZWN0J10pID8gY2hpbGQucHJvcHMuaW5wdXQgOiBjaGlsZDtcbiAgICAgICAgaWYgKGlucHV0ICYmIGlzQWRvcm5lZFN0YXJ0KGlucHV0LnByb3BzKSkge1xuICAgICAgICAgIGluaXRpYWxBZG9ybmVkU3RhcnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxBZG9ybmVkU3RhcnQ7XG4gIH0pO1xuICBjb25zdCBbZmlsbGVkLCBzZXRGaWxsZWRdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgIC8vIFdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgZmluZCB0aGUgSW5wdXQgaW4gb3JkZXJcbiAgICAvLyB0byBmdWxseSBzdXBwb3J0IHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICBsZXQgaW5pdGlhbEZpbGxlZCA9IGZhbHNlO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgICBpZiAoIWlzTXVpRWxlbWVudChjaGlsZCwgWydJbnB1dCcsICdTZWxlY3QnXSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRmlsbGVkKGNoaWxkLnByb3BzLCB0cnVlKSB8fCBpc0ZpbGxlZChjaGlsZC5wcm9wcy5pbnB1dFByb3BzLCB0cnVlKSkge1xuICAgICAgICAgIGluaXRpYWxGaWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxGaWxsZWQ7XG4gIH0pO1xuICBjb25zdCBbZm9jdXNlZFN0YXRlLCBzZXRGb2N1c2VkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgaWYgKGRpc2FibGVkICYmIGZvY3VzZWRTdGF0ZSkge1xuICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICB9XG4gIGNvbnN0IGZvY3VzZWQgPSB2aXN1YWxseUZvY3VzZWQgIT09IHVuZGVmaW5lZCAmJiAhZGlzYWJsZWQgPyB2aXN1YWxseUZvY3VzZWQgOiBmb2N1c2VkU3RhdGU7XG4gIGxldCByZWdpc3RlckVmZmVjdDtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBjb25zdCByZWdpc3RlcmVkSW5wdXQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgIHJlZ2lzdGVyRWZmZWN0ID0gKCkgPT4ge1xuICAgICAgaWYgKHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZXJlIGFyZSBtdWx0aXBsZSBgSW5wdXRCYXNlYCBjb21wb25lbnRzIGluc2lkZSBhIEZvcm1Db250cm9sLicsICdUaGlzIGNyZWF0ZXMgdmlzdWFsIGluY29uc2lzdGVuY2llcywgb25seSB1c2Ugb25lIGBJbnB1dEJhc2VgLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICAgIHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJlZ2lzdGVyZWRJbnB1dC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9O1xuICAgIH07XG4gIH1cbiAgY29uc3QgY2hpbGRDb250ZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkb3JuZWRTdGFydCxcbiAgICAgIHNldEFkb3JuZWRTdGFydCxcbiAgICAgIGNvbG9yLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBlcnJvcixcbiAgICAgIGZpbGxlZCxcbiAgICAgIGZvY3VzZWQsXG4gICAgICBmdWxsV2lkdGgsXG4gICAgICBoaWRkZW5MYWJlbCxcbiAgICAgIHNpemUsXG4gICAgICBvbkJsdXI6ICgpID0+IHtcbiAgICAgICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgb25FbXB0eTogKCkgPT4ge1xuICAgICAgICBzZXRGaWxsZWQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIG9uRmlsbGVkOiAoKSA9PiB7XG4gICAgICAgIHNldEZpbGxlZCh0cnVlKTtcbiAgICAgIH0sXG4gICAgICBvbkZvY3VzOiAoKSA9PiB7XG4gICAgICAgIHNldEZvY3VzZWQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgcmVnaXN0ZXJFZmZlY3QsXG4gICAgICByZXF1aXJlZCxcbiAgICAgIHZhcmlhbnRcbiAgICB9O1xuICB9LCBbYWRvcm5lZFN0YXJ0LCBjb2xvciwgZGlzYWJsZWQsIGVycm9yLCBmaWxsZWQsIGZvY3VzZWQsIGZ1bGxXaWR0aCwgaGlkZGVuTGFiZWwsIHJlZ2lzdGVyRWZmZWN0LCByZXF1aXJlZCwgc2l6ZSwgdmFyaWFudF0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNoaWxkQ29udGV4dCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goRm9ybUNvbnRyb2xSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgICByZWY6IHJlZlxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZvcm1Db250cm9sLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCwgaW5wdXQgYW5kIGhlbHBlciB0ZXh0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNwbGF5ZWQgaW4gZm9jdXNlZCBzdGF0ZS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGhpZGRlbi5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGluY3JlYXNlIGRlbnNpdHkgZm9yIGEgYEZpbGxlZElucHV0YC5cbiAgICogQmUgc3VyZSB0byBhZGQgYGFyaWEtbGFiZWxgIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRkZW5MYWJlbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgIG9yIGBub3JtYWxgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nIG9mIHRoaXMgYW5kIGNvbnRhaW5lZCBjb21wb25lbnRzLlxuICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZScsICdub3JtYWwnXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ291dGxpbmVkJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZmlsbGVkJywgJ291dGxpbmVkJywgJ3N0YW5kYXJkJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2w7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBGb3JtQ29udHJvbENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRm9ybUNvbnRyb2xDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0Zvcm1Db250cm9sQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBGb3JtQ29udHJvbENvbnRleHQ7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gIHByb3BzLFxuICBzdGF0ZXMsXG4gIG11aUZvcm1Db250cm9sXG59KSB7XG4gIHJldHVybiBzdGF0ZXMucmVkdWNlKChhY2MsIHN0YXRlKSA9PiB7XG4gICAgYWNjW3N0YXRlXSA9IHByb3BzW3N0YXRlXTtcbiAgICBpZiAobXVpRm9ybUNvbnRyb2wpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcHNbc3RhdGVdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBhY2Nbc3RhdGVdID0gbXVpRm9ybUNvbnRyb2xbc3RhdGVdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRm9ybUNvbnRyb2xDb250ZXh0IGZyb20gJy4vRm9ybUNvbnRyb2xDb250ZXh0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUZvcm1Db250cm9sKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChGb3JtQ29udHJvbENvbnRleHQpO1xufSIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlGb3JtSGVscGVyVGV4dCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUhlbHBlclRleHRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRm9ybUhlbHBlclRleHQnLCBbJ3Jvb3QnLCAnZXJyb3InLCAnZGlzYWJsZWQnLCAnc2l6ZVNtYWxsJywgJ3NpemVNZWRpdW0nLCAnY29udGFpbmVkJywgJ2ZvY3VzZWQnLCAnZmlsbGVkJywgJ3JlcXVpcmVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgZm9ybUhlbHBlclRleHRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbnZhciBfc3BhbjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImZpbGxlZFwiLCBcImZvY3VzZWRcIiwgXCJtYXJnaW5cIiwgXCJyZXF1aXJlZFwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgZm9ybUhlbHBlclRleHRDbGFzc2VzLCB7IGdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuL2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcyc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29udGFpbmVkLFxuICAgIHNpemUsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZmlsbGVkLFxuICAgIGZvY3VzZWQsXG4gICAgcmVxdWlyZWRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGVycm9yICYmICdlcnJvcicsIHNpemUgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgY29udGFpbmVkICYmICdjb250YWluZWQnLCBmb2N1c2VkICYmICdmb2N1c2VkJywgZmlsbGVkICYmICdmaWxsZWQnLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEZvcm1IZWxwZXJUZXh0Um9vdCA9IHN0eWxlZCgncCcsIHtcbiAgbmFtZTogJ011aUZvcm1IZWxwZXJUZXh0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuc2l6ZSAmJiBzdHlsZXNbYHNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXSwgb3duZXJTdGF0ZS5jb250YWluZWQgJiYgc3R5bGVzLmNvbnRhaW5lZCwgb3duZXJTdGF0ZS5maWxsZWQgJiYgc3R5bGVzLmZpbGxlZF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnNlY29uZGFyeVxufSwgdGhlbWUudHlwb2dyYXBoeS5jYXB0aW9uLCB7XG4gIHRleHRBbGlnbjogJ2xlZnQnLFxuICBtYXJnaW5Ub3A6IDMsXG4gIG1hcmdpblJpZ2h0OiAwLFxuICBtYXJnaW5Cb3R0b206IDAsXG4gIG1hcmdpbkxlZnQ6IDAsXG4gIFtgJi4ke2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkXG4gIH0sXG4gIFtgJi4ke2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcy5lcnJvcn1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIG1hcmdpblRvcDogNFxufSwgb3duZXJTdGF0ZS5jb250YWluZWQgJiYge1xuICBtYXJnaW5MZWZ0OiAxNCxcbiAgbWFyZ2luUmlnaHQ6IDE0XG59KSk7XG5jb25zdCBGb3JtSGVscGVyVGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1IZWxwZXJUZXh0KGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtSGVscGVyVGV4dCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ3AnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ3ZhcmlhbnQnLCAnc2l6ZScsICdkaXNhYmxlZCcsICdlcnJvcicsICdmaWxsZWQnLCAnZm9jdXNlZCcsICdyZXF1aXJlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGNvbnRhaW5lZDogZmNzLnZhcmlhbnQgPT09ICdmaWxsZWQnIHx8IGZjcy52YXJpYW50ID09PSAnb3V0bGluZWQnLFxuICAgIHZhcmlhbnQ6IGZjcy52YXJpYW50LFxuICAgIHNpemU6IGZjcy5zaXplLFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmaWxsZWQ6IGZjcy5maWxsZWQsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgcmVxdWlyZWQ6IGZjcy5yZXF1aXJlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRm9ybUhlbHBlclRleHRSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogY2hpbGRyZW4gPT09ICcgJyA/IC8vIG5vdHJhbnNsYXRlIG5lZWRlZCB3aGlsZSBHb29nbGUgVHJhbnNsYXRlIHdpbGwgbm90IGZpeCB6ZXJvLXdpZHRoIHNwYWNlIGlzc3VlXG4gICAgX3NwYW4gfHwgKF9zcGFuID0gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJub3RyYW5zbGF0ZVwiLFxuICAgICAgY2hpbGRyZW46IFwiXFx1MjAwQlwiXG4gICAgfSkpIDogY2hpbGRyZW5cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtSGVscGVyVGV4dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBJZiBgJyAnYCBpcyBwcm92aWRlZCwgdGhlIGNvbXBvbmVudCByZXNlcnZlcyBvbmUgbGluZSBoZWlnaHQgZm9yIGRpc3BsYXlpbmcgYSBmdXR1cmUgbWVzc2FnZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgaGVscGVyIHRleHQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCB1c2UgZmlsbGVkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgZmlsbGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCB1c2UgZm9jdXNlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZSddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGhlbHBlciB0ZXh0IHNob3VsZCB1c2UgcmVxdWlyZWQgY2xhc3NlcyBrZXkuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUhlbHBlclRleHQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBHbG9iYWxTdHlsZXMgYXMgU3lzdGVtR2xvYmFsU3R5bGVzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGRlZmF1bHRUaGVtZSBmcm9tICcuLi9zdHlsZXMvZGVmYXVsdFRoZW1lJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuLi9zdHlsZXMvaWRlbnRpZmllcic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gR2xvYmFsU3R5bGVzKHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChTeXN0ZW1HbG9iYWxTdHlsZXMsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRlZmF1bHRUaGVtZTogZGVmYXVsdFRoZW1lLFxuICAgIHRoZW1lSWQ6IFRIRU1FX0lEXG4gIH0pKTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEdsb2JhbFN0eWxlcy5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgc3R5bGVzIHlvdSB3YW50IHRvIGFwcGx5IGdsb2JhbGx5LlxuICAgKi9cbiAgc3R5bGVzOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5ib29sXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBHbG9iYWxTdHlsZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgR3JpZENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCgpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgR3JpZENvbnRleHQuZGlzcGxheU5hbWUgPSAnR3JpZENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgR3JpZENvbnRleHQ7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdyaWRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUdyaWQnLCBzbG90KTtcbn1cbmNvbnN0IFNQQUNJTkdTID0gWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXTtcbmNvbnN0IERJUkVDVElPTlMgPSBbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXTtcbmNvbnN0IFdSQVBTID0gWydub3dyYXAnLCAnd3JhcC1yZXZlcnNlJywgJ3dyYXAnXTtcbmNvbnN0IEdSSURfU0laRVMgPSBbJ2F1dG8nLCB0cnVlLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyXTtcbmNvbnN0IGdyaWRDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpR3JpZCcsIFsncm9vdCcsICdjb250YWluZXInLCAnaXRlbScsICd6ZXJvTWluV2lkdGgnLFxuLy8gc3BhY2luZ3Ncbi4uLlNQQUNJTkdTLm1hcChzcGFjaW5nID0+IGBzcGFjaW5nLXhzLSR7c3BhY2luZ31gKSxcbi8vIGRpcmVjdGlvbiB2YWx1ZXNcbi4uLkRJUkVDVElPTlMubWFwKGRpcmVjdGlvbiA9PiBgZGlyZWN0aW9uLXhzLSR7ZGlyZWN0aW9ufWApLFxuLy8gd3JhcCB2YWx1ZXNcbi4uLldSQVBTLm1hcCh3cmFwID0+IGB3cmFwLXhzLSR7d3JhcH1gKSxcbi8vIGdyaWQgc2l6ZXMgZm9yIGFsbCBicmVha3BvaW50c1xuLi4uR1JJRF9TSVpFUy5tYXAoc2l6ZSA9PiBgZ3JpZC14cy0ke3NpemV9YCksIC4uLkdSSURfU0laRVMubWFwKHNpemUgPT4gYGdyaWQtc20tJHtzaXplfWApLCAuLi5HUklEX1NJWkVTLm1hcChzaXplID0+IGBncmlkLW1kLSR7c2l6ZX1gKSwgLi4uR1JJRF9TSVpFUy5tYXAoc2l6ZSA9PiBgZ3JpZC1sZy0ke3NpemV9YCksIC4uLkdSSURfU0laRVMubWFwKHNpemUgPT4gYGdyaWQteGwtJHtzaXplfWApXSk7XG5leHBvcnQgZGVmYXVsdCBncmlkQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbi8vIEEgZ3JpZCBjb21wb25lbnQgdXNpbmcgdGhlIGZvbGxvd2luZyBsaWJzIGFzIGluc3BpcmF0aW9uLlxuLy9cbi8vIEZvciB0aGUgaW1wbGVtZW50YXRpb246XG4vLyAtIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzQuMy9sYXlvdXQvZ3JpZC9cbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2tyaXN0b2Zlcmpvc2VwaC9mbGV4Ym94Z3JpZC9ibG9iL21hc3Rlci9zcmMvY3NzL2ZsZXhib3hncmlkLmNzc1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vcm95bGVlMDcwNC9yZWFjdC1mbGV4Ym94LWdyaWRcbi8vIC0gaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyanMub3JnL2xhdGVzdC9sYXlvdXQvaW50cm9kdWN0aW9uXG4vL1xuLy8gRm9sbG93IHRoaXMgZmxleGJveCBHdWlkZSB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtb2RlbDpcbi8vIC0gaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvYS1ndWlkZS10by1mbGV4Ym94L1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbHVtbnNcIiwgXCJjb2x1bW5TcGFjaW5nXCIsIFwiY29tcG9uZW50XCIsIFwiY29udGFpbmVyXCIsIFwiZGlyZWN0aW9uXCIsIFwiaXRlbVwiLCBcInJvd1NwYWNpbmdcIiwgXCJzcGFjaW5nXCIsIFwid3JhcFwiLCBcInplcm9NaW5XaWR0aFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2V4dGVuZFN4UHJvcCBhcyBleHRlbmRTeFByb3AsIGhhbmRsZUJyZWFrcG9pbnRzLCB1bnN0YWJsZV9yZXNvbHZlQnJlYWtwb2ludFZhbHVlcyBhcyByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCByZXF1aXJlUHJvcEZhY3RvcnkgZnJvbSAnLi4vdXRpbHMvcmVxdWlyZVByb3BGYWN0b3J5JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCBHcmlkQ29udGV4dCBmcm9tICcuL0dyaWRDb250ZXh0JztcbmltcG9ydCBncmlkQ2xhc3NlcywgeyBnZXRHcmlkVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9ncmlkQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gZ2V0T2Zmc2V0KHZhbCkge1xuICBjb25zdCBwYXJzZSA9IHBhcnNlRmxvYXQodmFsKTtcbiAgcmV0dXJuIGAke3BhcnNlfSR7U3RyaW5nKHZhbCkucmVwbGFjZShTdHJpbmcocGFyc2UpLCAnJykgfHwgJ3B4J31gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlR3JpZCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSB7XG4gIGxldCBzaXplO1xuICByZXR1cm4gdGhlbWUuYnJlYWtwb2ludHMua2V5cy5yZWR1Y2UoKGdsb2JhbFN0eWxlcywgYnJlYWtwb2ludCkgPT4ge1xuICAgIC8vIFVzZSBzaWRlIGVmZmVjdCBvdmVyIGltbXV0YWJpbGl0eSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLlxuICAgIGxldCBzdHlsZXMgPSB7fTtcbiAgICBpZiAob3duZXJTdGF0ZVticmVha3BvaW50XSkge1xuICAgICAgc2l6ZSA9IG93bmVyU3RhdGVbYnJlYWtwb2ludF07XG4gICAgfVxuICAgIGlmICghc2l6ZSkge1xuICAgICAgcmV0dXJuIGdsb2JhbFN0eWxlcztcbiAgICB9XG4gICAgaWYgKHNpemUgPT09IHRydWUpIHtcbiAgICAgIC8vIEZvciB0aGUgYXV0byBsYXlvdXRpbmdcbiAgICAgIHN0eWxlcyA9IHtcbiAgICAgICAgZmxleEJhc2lzOiAwLFxuICAgICAgICBmbGV4R3JvdzogMSxcbiAgICAgICAgbWF4V2lkdGg6ICcxMDAlJ1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHNpemUgPT09ICdhdXRvJykge1xuICAgICAgc3R5bGVzID0ge1xuICAgICAgICBmbGV4QmFzaXM6ICdhdXRvJyxcbiAgICAgICAgZmxleEdyb3c6IDAsXG4gICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgIG1heFdpZHRoOiAnbm9uZScsXG4gICAgICAgIHdpZHRoOiAnYXV0bydcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbHVtbnNCcmVha3BvaW50VmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuY29sdW1ucyxcbiAgICAgICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IHR5cGVvZiBjb2x1bW5zQnJlYWtwb2ludFZhbHVlcyA9PT0gJ29iamVjdCcgPyBjb2x1bW5zQnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSA6IGNvbHVtbnNCcmVha3BvaW50VmFsdWVzO1xuICAgICAgaWYgKGNvbHVtblZhbHVlID09PSB1bmRlZmluZWQgfHwgY29sdW1uVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbFN0eWxlcztcbiAgICAgIH1cbiAgICAgIC8vIEtlZXAgNyBzaWduaWZpY2FudCBudW1iZXJzLlxuICAgICAgY29uc3Qgd2lkdGggPSBgJHtNYXRoLnJvdW5kKHNpemUgLyBjb2x1bW5WYWx1ZSAqIDEwZTcpIC8gMTBlNX0lYDtcbiAgICAgIGxldCBtb3JlID0ge307XG4gICAgICBpZiAob3duZXJTdGF0ZS5jb250YWluZXIgJiYgb3duZXJTdGF0ZS5pdGVtICYmIG93bmVyU3RhdGUuY29sdW1uU3BhY2luZyAhPT0gMCkge1xuICAgICAgICBjb25zdCB0aGVtZVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nKG93bmVyU3RhdGUuY29sdW1uU3BhY2luZyk7XG4gICAgICAgIGlmICh0aGVtZVNwYWNpbmcgIT09ICcwcHgnKSB7XG4gICAgICAgICAgY29uc3QgZnVsbFdpZHRoID0gYGNhbGMoJHt3aWR0aH0gKyAke2dldE9mZnNldCh0aGVtZVNwYWNpbmcpfSlgO1xuICAgICAgICAgIG1vcmUgPSB7XG4gICAgICAgICAgICBmbGV4QmFzaXM6IGZ1bGxXaWR0aCxcbiAgICAgICAgICAgIG1heFdpZHRoOiBmdWxsV2lkdGhcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENsb3NlIHRvIHRoZSBib290c3RyYXAgaW1wbGVtZW50YXRpb246XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi84ZmNjYWEyNDM5ZTk3ZWM3MmE0YjdkYzQyY2NjMWY2NDk3OTBhZGIwL3Njc3MvbWl4aW5zL19ncmlkLnNjc3MjTDQxXG4gICAgICBzdHlsZXMgPSBfZXh0ZW5kcyh7XG4gICAgICAgIGZsZXhCYXNpczogd2lkdGgsXG4gICAgICAgIGZsZXhHcm93OiAwLFxuICAgICAgICBtYXhXaWR0aDogd2lkdGhcbiAgICAgIH0sIG1vcmUpO1xuICAgIH1cblxuICAgIC8vIE5vIG5lZWQgZm9yIGEgbWVkaWEgcXVlcnkgZm9yIHRoZSBmaXJzdCBzaXplLlxuICAgIGlmICh0aGVtZS5icmVha3BvaW50cy52YWx1ZXNbYnJlYWtwb2ludF0gPT09IDApIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oZ2xvYmFsU3R5bGVzLCBzdHlsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnbG9iYWxTdHlsZXNbdGhlbWUuYnJlYWtwb2ludHMudXAoYnJlYWtwb2ludCldID0gc3R5bGVzO1xuICAgIH1cbiAgICByZXR1cm4gZ2xvYmFsU3R5bGVzO1xuICB9LCB7fSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVEaXJlY3Rpb24oe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkge1xuICBjb25zdCBkaXJlY3Rpb25WYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgdmFsdWVzOiBvd25lclN0YXRlLmRpcmVjdGlvbixcbiAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzXG4gIH0pO1xuICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgIHRoZW1lXG4gIH0sIGRpcmVjdGlvblZhbHVlcywgcHJvcFZhbHVlID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSB7XG4gICAgICBmbGV4RGlyZWN0aW9uOiBwcm9wVmFsdWVcbiAgICB9O1xuICAgIGlmIChwcm9wVmFsdWUuaW5kZXhPZignY29sdW1uJykgPT09IDApIHtcbiAgICAgIG91dHB1dFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF0gPSB7XG4gICAgICAgIG1heFdpZHRoOiAnbm9uZSdcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHplcm8gdmFsdWUgYnJlYWtwb2ludCBrZXlzIGJlZm9yZSBhIG5vbi16ZXJvIHZhbHVlIGJyZWFrcG9pbnQga2V5LlxuICogQGV4YW1wbGUgeyB4czogMCwgc206IDAsIG1kOiAyLCBsZzogMCwgeGw6IDAgfSBvciBbMCwgMCwgMiwgMCwgMF1cbiAqIEByZXR1cm5zIFt4cywgc21dXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RaZXJvVmFsdWVCcmVha3BvaW50S2V5cyh7XG4gIGJyZWFrcG9pbnRzLFxuICB2YWx1ZXNcbn0pIHtcbiAgbGV0IG5vblplcm9LZXkgPSAnJztcbiAgT2JqZWN0LmtleXModmFsdWVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKG5vblplcm9LZXkgIT09ICcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh2YWx1ZXNba2V5XSAhPT0gMCkge1xuICAgICAgbm9uWmVyb0tleSA9IGtleTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzb3J0ZWRCcmVha3BvaW50S2V5c0J5VmFsdWUgPSBPYmplY3Qua2V5cyhicmVha3BvaW50cykuc29ydCgoYSwgYikgPT4ge1xuICAgIHJldHVybiBicmVha3BvaW50c1thXSAtIGJyZWFrcG9pbnRzW2JdO1xuICB9KTtcbiAgcmV0dXJuIHNvcnRlZEJyZWFrcG9pbnRLZXlzQnlWYWx1ZS5zbGljZSgwLCBzb3J0ZWRCcmVha3BvaW50S2V5c0J5VmFsdWUuaW5kZXhPZihub25aZXJvS2V5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSb3dHYXAoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkge1xuICBjb25zdCB7XG4gICAgY29udGFpbmVyLFxuICAgIHJvd1NwYWNpbmdcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGxldCBzdHlsZXMgPSB7fTtcbiAgaWYgKGNvbnRhaW5lciAmJiByb3dTcGFjaW5nICE9PSAwKSB7XG4gICAgY29uc3Qgcm93U3BhY2luZ1ZhbHVlcyA9IHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICAgIHZhbHVlczogcm93U3BhY2luZyxcbiAgICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgICB9KTtcbiAgICBsZXQgemVyb1ZhbHVlQnJlYWtwb2ludEtleXM7XG4gICAgaWYgKHR5cGVvZiByb3dTcGFjaW5nVmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgemVyb1ZhbHVlQnJlYWtwb2ludEtleXMgPSBleHRyYWN0WmVyb1ZhbHVlQnJlYWtwb2ludEtleXMoe1xuICAgICAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzLFxuICAgICAgICB2YWx1ZXM6IHJvd1NwYWNpbmdWYWx1ZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzdHlsZXMgPSBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgICB0aGVtZVxuICAgIH0sIHJvd1NwYWNpbmdWYWx1ZXMsIChwcm9wVmFsdWUsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAgIHZhciBfemVyb1ZhbHVlQnJlYWtwb2ludEs7XG4gICAgICBjb25zdCB0aGVtZVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nKHByb3BWYWx1ZSk7XG4gICAgICBpZiAodGhlbWVTcGFjaW5nICE9PSAnMHB4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1hcmdpblRvcDogYC0ke2dldE9mZnNldCh0aGVtZVNwYWNpbmcpfWAsXG4gICAgICAgICAgW2AmID4gLiR7Z3JpZENsYXNzZXMuaXRlbX1gXToge1xuICAgICAgICAgICAgcGFkZGluZ1RvcDogZ2V0T2Zmc2V0KHRoZW1lU3BhY2luZylcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKF96ZXJvVmFsdWVCcmVha3BvaW50SyA9IHplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzKSAhPSBudWxsICYmIF96ZXJvVmFsdWVCcmVha3BvaW50Sy5pbmNsdWRlcyhicmVha3BvaW50KSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXJnaW5Ub3A6IDAsXG4gICAgICAgIFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF06IHtcbiAgICAgICAgICBwYWRkaW5nVG9wOiAwXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHN0eWxlcztcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNvbHVtbkdhcCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSB7XG4gIGNvbnN0IHtcbiAgICBjb250YWluZXIsXG4gICAgY29sdW1uU3BhY2luZ1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgbGV0IHN0eWxlcyA9IHt9O1xuICBpZiAoY29udGFpbmVyICYmIGNvbHVtblNwYWNpbmcgIT09IDApIHtcbiAgICBjb25zdCBjb2x1bW5TcGFjaW5nVmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgICAgdmFsdWVzOiBjb2x1bW5TcGFjaW5nLFxuICAgICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1xuICAgIH0pO1xuICAgIGxldCB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cztcbiAgICBpZiAodHlwZW9mIGNvbHVtblNwYWNpbmdWYWx1ZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cyA9IGV4dHJhY3RaZXJvVmFsdWVCcmVha3BvaW50S2V5cyh7XG4gICAgICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXMsXG4gICAgICAgIHZhbHVlczogY29sdW1uU3BhY2luZ1ZhbHVlc1xuICAgICAgfSk7XG4gICAgfVxuICAgIHN0eWxlcyA9IGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICAgIHRoZW1lXG4gICAgfSwgY29sdW1uU3BhY2luZ1ZhbHVlcywgKHByb3BWYWx1ZSwgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgdmFyIF96ZXJvVmFsdWVCcmVha3BvaW50SzI7XG4gICAgICBjb25zdCB0aGVtZVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nKHByb3BWYWx1ZSk7XG4gICAgICBpZiAodGhlbWVTcGFjaW5nICE9PSAnMHB4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHdpZHRoOiBgY2FsYygxMDAlICsgJHtnZXRPZmZzZXQodGhlbWVTcGFjaW5nKX0pYCxcbiAgICAgICAgICBtYXJnaW5MZWZ0OiBgLSR7Z2V0T2Zmc2V0KHRoZW1lU3BhY2luZyl9YCxcbiAgICAgICAgICBbYCYgPiAuJHtncmlkQ2xhc3Nlcy5pdGVtfWBdOiB7XG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogZ2V0T2Zmc2V0KHRoZW1lU3BhY2luZylcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKF96ZXJvVmFsdWVCcmVha3BvaW50SzIgPSB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cykgIT0gbnVsbCAmJiBfemVyb1ZhbHVlQnJlYWtwb2ludEsyLmluY2x1ZGVzKGJyZWFrcG9pbnQpKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIG1hcmdpbkxlZnQ6IDAsXG4gICAgICAgIFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF06IHtcbiAgICAgICAgICBwYWRkaW5nTGVmdDogMFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBzdHlsZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNwYWNpbmdTdHlsZXMoc3BhY2luZywgYnJlYWtwb2ludHMsIHN0eWxlcyA9IHt9KSB7XG4gIC8vIHVuZGVmaW5lZC9udWxsIG9yIGBzcGFjaW5nYCA8PSAwXG4gIGlmICghc3BhY2luZyB8fCBzcGFjaW5nIDw9IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLy8gaW4gY2FzZSBvZiBzdHJpbmcvbnVtYmVyIGBzcGFjaW5nYFxuICBpZiAodHlwZW9mIHNwYWNpbmcgPT09ICdzdHJpbmcnICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyKHNwYWNpbmcpKSB8fCB0eXBlb2Ygc3BhY2luZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gW3N0eWxlc1tgc3BhY2luZy14cy0ke1N0cmluZyhzcGFjaW5nKX1gXV07XG4gIH1cbiAgLy8gaW4gY2FzZSBvZiBvYmplY3QgYHNwYWNpbmdgXG4gIGNvbnN0IHNwYWNpbmdTdHlsZXMgPSBbXTtcbiAgYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHNwYWNpbmdbYnJlYWtwb2ludF07XG4gICAgaWYgKE51bWJlcih2YWx1ZSkgPiAwKSB7XG4gICAgICBzcGFjaW5nU3R5bGVzLnB1c2goc3R5bGVzW2BzcGFjaW5nLSR7YnJlYWtwb2ludH0tJHtTdHJpbmcodmFsdWUpfWBdKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3BhY2luZ1N0eWxlcztcbn1cblxuLy8gRGVmYXVsdCBDU1MgdmFsdWVzXG4vLyBmbGV4OiAnMCAxIGF1dG8nLFxuLy8gZmxleERpcmVjdGlvbjogJ3JvdycsXG4vLyBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCcsXG4vLyBmbGV4V3JhcDogJ25vd3JhcCcsXG4vLyBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtc3RhcnQnLFxuY29uc3QgR3JpZFJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUdyaWQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgY29udGFpbmVyLFxuICAgICAgZGlyZWN0aW9uLFxuICAgICAgaXRlbSxcbiAgICAgIHNwYWNpbmcsXG4gICAgICB3cmFwLFxuICAgICAgemVyb01pbldpZHRoLFxuICAgICAgYnJlYWtwb2ludHNcbiAgICB9ID0gb3duZXJTdGF0ZTtcbiAgICBsZXQgc3BhY2luZ1N0eWxlcyA9IFtdO1xuXG4gICAgLy8gaW4gY2FzZSBvZiBncmlkIGl0ZW1cbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBzcGFjaW5nU3R5bGVzID0gcmVzb2x2ZVNwYWNpbmdTdHlsZXMoc3BhY2luZywgYnJlYWtwb2ludHMsIHN0eWxlcyk7XG4gICAgfVxuICAgIGNvbnN0IGJyZWFrcG9pbnRzU3R5bGVzID0gW107XG4gICAgYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3duZXJTdGF0ZVticmVha3BvaW50XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBicmVha3BvaW50c1N0eWxlcy5wdXNoKHN0eWxlc1tgZ3JpZC0ke2JyZWFrcG9pbnR9LSR7U3RyaW5nKHZhbHVlKX1gXSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgY29udGFpbmVyICYmIHN0eWxlcy5jb250YWluZXIsIGl0ZW0gJiYgc3R5bGVzLml0ZW0sIHplcm9NaW5XaWR0aCAmJiBzdHlsZXMuemVyb01pbldpZHRoLCAuLi5zcGFjaW5nU3R5bGVzLCBkaXJlY3Rpb24gIT09ICdyb3cnICYmIHN0eWxlc1tgZGlyZWN0aW9uLXhzLSR7U3RyaW5nKGRpcmVjdGlvbil9YF0sIHdyYXAgIT09ICd3cmFwJyAmJiBzdHlsZXNbYHdyYXAteHMtJHtTdHJpbmcod3JhcCl9YF0sIC4uLmJyZWFrcG9pbnRzU3R5bGVzXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBib3hTaXppbmc6ICdib3JkZXItYm94J1xufSwgb3duZXJTdGF0ZS5jb250YWluZXIgJiYge1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhXcmFwOiAnd3JhcCcsXG4gIHdpZHRoOiAnMTAwJSdcbn0sIG93bmVyU3RhdGUuaXRlbSAmJiB7XG4gIG1hcmdpbjogMCAvLyBGb3IgaW5zdGFuY2UsIGl0J3MgdXNlZnVsIHdoZW4gdXNlZCB3aXRoIGEgYGZpZ3VyZWAgZWxlbWVudC5cbn0sIG93bmVyU3RhdGUuemVyb01pbldpZHRoICYmIHtcbiAgbWluV2lkdGg6IDBcbn0sIG93bmVyU3RhdGUud3JhcCAhPT0gJ3dyYXAnICYmIHtcbiAgZmxleFdyYXA6IG93bmVyU3RhdGUud3JhcFxufSksIGdlbmVyYXRlRGlyZWN0aW9uLCBnZW5lcmF0ZVJvd0dhcCwgZ2VuZXJhdGVDb2x1bW5HYXAsIGdlbmVyYXRlR3JpZCk7XG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNwYWNpbmdDbGFzc2VzKHNwYWNpbmcsIGJyZWFrcG9pbnRzKSB7XG4gIC8vIHVuZGVmaW5lZC9udWxsIG9yIGBzcGFjaW5nYCA8PSAwXG4gIGlmICghc3BhY2luZyB8fCBzcGFjaW5nIDw9IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgLy8gaW4gY2FzZSBvZiBzdHJpbmcvbnVtYmVyIGBzcGFjaW5nYFxuICBpZiAodHlwZW9mIHNwYWNpbmcgPT09ICdzdHJpbmcnICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyKHNwYWNpbmcpKSB8fCB0eXBlb2Ygc3BhY2luZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gW2BzcGFjaW5nLXhzLSR7U3RyaW5nKHNwYWNpbmcpfWBdO1xuICB9XG4gIC8vIGluIGNhc2Ugb2Ygb2JqZWN0IGBzcGFjaW5nYFxuICBjb25zdCBjbGFzc2VzID0gW107XG4gIGJyZWFrcG9pbnRzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBzcGFjaW5nW2JyZWFrcG9pbnRdO1xuICAgIGlmIChOdW1iZXIodmFsdWUpID4gMCkge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gYHNwYWNpbmctJHticmVha3BvaW50fS0ke1N0cmluZyh2YWx1ZSl9YDtcbiAgICAgIGNsYXNzZXMucHVzaChjbGFzc05hbWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjbGFzc2VzO1xufVxuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29udGFpbmVyLFxuICAgIGRpcmVjdGlvbixcbiAgICBpdGVtLFxuICAgIHNwYWNpbmcsXG4gICAgd3JhcCxcbiAgICB6ZXJvTWluV2lkdGgsXG4gICAgYnJlYWtwb2ludHNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGxldCBzcGFjaW5nQ2xhc3NlcyA9IFtdO1xuXG4gIC8vIGluIGNhc2Ugb2YgZ3JpZCBpdGVtXG4gIGlmIChjb250YWluZXIpIHtcbiAgICBzcGFjaW5nQ2xhc3NlcyA9IHJlc29sdmVTcGFjaW5nQ2xhc3NlcyhzcGFjaW5nLCBicmVha3BvaW50cyk7XG4gIH1cbiAgY29uc3QgYnJlYWtwb2ludHNDbGFzc2VzID0gW107XG4gIGJyZWFrcG9pbnRzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBvd25lclN0YXRlW2JyZWFrcG9pbnRdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgYnJlYWtwb2ludHNDbGFzc2VzLnB1c2goYGdyaWQtJHticmVha3BvaW50fS0ke1N0cmluZyh2YWx1ZSl9YCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgY29udGFpbmVyICYmICdjb250YWluZXInLCBpdGVtICYmICdpdGVtJywgemVyb01pbldpZHRoICYmICd6ZXJvTWluV2lkdGgnLCAuLi5zcGFjaW5nQ2xhc3NlcywgZGlyZWN0aW9uICE9PSAncm93JyAmJiBgZGlyZWN0aW9uLXhzLSR7U3RyaW5nKGRpcmVjdGlvbil9YCwgd3JhcCAhPT0gJ3dyYXAnICYmIGB3cmFwLXhzLSR7U3RyaW5nKHdyYXApfWAsIC4uLmJyZWFrcG9pbnRzQ2xhc3Nlc11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRHcmlkVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBHcmlkID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gR3JpZChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWVQcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlHcmlkJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgIGJyZWFrcG9pbnRzXG4gIH0gPSB1c2VUaGVtZSgpO1xuICBjb25zdCBwcm9wcyA9IGV4dGVuZFN4UHJvcCh0aGVtZVByb3BzKTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sdW1uczogY29sdW1uc1Byb3AsXG4gICAgICBjb2x1bW5TcGFjaW5nOiBjb2x1bW5TcGFjaW5nUHJvcCxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgY29udGFpbmVyID0gZmFsc2UsXG4gICAgICBkaXJlY3Rpb24gPSAncm93JyxcbiAgICAgIGl0ZW0gPSBmYWxzZSxcbiAgICAgIHJvd1NwYWNpbmc6IHJvd1NwYWNpbmdQcm9wLFxuICAgICAgc3BhY2luZyA9IDAsXG4gICAgICB3cmFwID0gJ3dyYXAnLFxuICAgICAgemVyb01pbldpZHRoID0gZmFsc2VcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgcm93U3BhY2luZyA9IHJvd1NwYWNpbmdQcm9wIHx8IHNwYWNpbmc7XG4gIGNvbnN0IGNvbHVtblNwYWNpbmcgPSBjb2x1bW5TcGFjaW5nUHJvcCB8fCBzcGFjaW5nO1xuICBjb25zdCBjb2x1bW5zQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoR3JpZENvbnRleHQpO1xuXG4gIC8vIGNvbHVtbnMgc2V0IHdpdGggZGVmYXVsdCBicmVha3BvaW50IHVuaXQgb2YgMTJcbiAgY29uc3QgY29sdW1ucyA9IGNvbnRhaW5lciA/IGNvbHVtbnNQcm9wIHx8IDEyIDogY29sdW1uc0NvbnRleHQ7XG4gIGNvbnN0IGJyZWFrcG9pbnRzVmFsdWVzID0ge307XG4gIGNvbnN0IG90aGVyRmlsdGVyZWQgPSBfZXh0ZW5kcyh7fSwgb3RoZXIpO1xuICBicmVha3BvaW50cy5rZXlzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgaWYgKG90aGVyW2JyZWFrcG9pbnRdICE9IG51bGwpIHtcbiAgICAgIGJyZWFrcG9pbnRzVmFsdWVzW2JyZWFrcG9pbnRdID0gb3RoZXJbYnJlYWtwb2ludF07XG4gICAgICBkZWxldGUgb3RoZXJGaWx0ZXJlZFticmVha3BvaW50XTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sdW1ucyxcbiAgICBjb250YWluZXIsXG4gICAgZGlyZWN0aW9uLFxuICAgIGl0ZW0sXG4gICAgcm93U3BhY2luZyxcbiAgICBjb2x1bW5TcGFjaW5nLFxuICAgIHdyYXAsXG4gICAgemVyb01pbldpZHRoLFxuICAgIHNwYWNpbmdcbiAgfSwgYnJlYWtwb2ludHNWYWx1ZXMsIHtcbiAgICBicmVha3BvaW50czogYnJlYWtwb2ludHMua2V5c1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goR3JpZENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29sdW1ucyxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goR3JpZFJvb3QsIF9leHRlbmRzKHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgb3RoZXJGaWx0ZXJlZCkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHcmlkLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjb2x1bW5zLlxuICAgKiBAZGVmYXVsdCAxMlxuICAgKi9cbiAgY29sdW1uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlciksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGhvcml6b250YWwgc3BhY2UgYmV0d2VlbiB0aGUgdHlwZSBgaXRlbWAgY29tcG9uZW50cy5cbiAgICogSXQgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgYHNwYWNpbmdgIHByb3AuXG4gICAqL1xuICBjb2x1bW5TcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIGhhdmUgdGhlIGZsZXggKmNvbnRhaW5lciogYmVoYXZpb3IuXG4gICAqIFlvdSBzaG91bGQgYmUgd3JhcHBpbmcgKml0ZW1zKiB3aXRoIGEgKmNvbnRhaW5lciouXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgYGZsZXgtZGlyZWN0aW9uYCBzdHlsZSBwcm9wZXJ0eS5cbiAgICogSXQgaXMgYXBwbGllZCBmb3IgYWxsIHNjcmVlbiBzaXplcy5cbiAgICogQGRlZmF1bHQgJ3JvdydcbiAgICovXG4gIGRpcmVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY29sdW1uLXJldmVyc2UnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ3JvdyddKSwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mKFsnY29sdW1uLXJldmVyc2UnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ3JvdyddKSksIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIGhhdmUgdGhlIGZsZXggKml0ZW0qIGJlaGF2aW9yLlxuICAgKiBZb3Ugc2hvdWxkIGJlIHdyYXBwaW5nICppdGVtcyogd2l0aCBhICpjb250YWluZXIqLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaXRlbTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIHRoZSBgbGdgIGJyZWFrcG9pbnQgYW5kIHdpZGVyIHNjcmVlbnMgaWYgbm90IG92ZXJyaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBsZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIElmIGEgbnVtYmVyLCBpdCBzZXRzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgZ3JpZCBpdGVtIHVzZXMuXG4gICAqIEl0IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIGNvbnRhaW5lciAoMTIgYnkgZGVmYXVsdCkuXG4gICAqIElmICdhdXRvJywgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIG1hdGNoZXMgaXRzIGNvbnRlbnQuXG4gICAqIElmIGZhbHNlLCB0aGUgcHJvcCBpcyBpZ25vcmVkLlxuICAgKiBJZiB0cnVlLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggZ3Jvd3MgdG8gdXNlIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGdyaWQgY29udGFpbmVyLlxuICAgKiBUaGUgdmFsdWUgaXMgYXBwbGllZCBmb3IgdGhlIGBtZGAgYnJlYWtwb2ludCBhbmQgd2lkZXIgc2NyZWVucyBpZiBub3Qgb3ZlcnJpZGRlbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG1kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuYm9vbF0pLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgdmVydGljYWwgc3BhY2UgYmV0d2VlbiB0aGUgdHlwZSBgaXRlbWAgY29tcG9uZW50cy5cbiAgICogSXQgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBvZiB0aGUgYHNwYWNpbmdgIHByb3AuXG4gICAqL1xuICByb3dTcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIHRoZSBgc21gIGJyZWFrcG9pbnQgYW5kIHdpZGVyIHNjcmVlbnMgaWYgbm90IG92ZXJyaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzbTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHNwYWNlIGJldHdlZW4gdGhlIHR5cGUgYGl0ZW1gIGNvbXBvbmVudHMuXG4gICAqIEl0IGNhbiBvbmx5IGJlIHVzZWQgb24gYSB0eXBlIGBjb250YWluZXJgIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgc3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgYGZsZXgtd3JhcGAgc3R5bGUgcHJvcGVydHkuXG4gICAqIEl0J3MgYXBwbGllZCBmb3IgYWxsIHNjcmVlbiBzaXplcy5cbiAgICogQGRlZmF1bHQgJ3dyYXAnXG4gICAqL1xuICB3cmFwOiBQcm9wVHlwZXMub25lT2YoWydub3dyYXAnLCAnd3JhcC1yZXZlcnNlJywgJ3dyYXAnXSksXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIHRoZSBgeGxgIGJyZWFrcG9pbnQgYW5kIHdpZGVyIHNjcmVlbnMgaWYgbm90IG92ZXJyaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB4bDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIElmIGEgbnVtYmVyLCBpdCBzZXRzIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGUgZ3JpZCBpdGVtIHVzZXMuXG4gICAqIEl0IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIGNvbnRhaW5lciAoMTIgYnkgZGVmYXVsdCkuXG4gICAqIElmICdhdXRvJywgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIG1hdGNoZXMgaXRzIGNvbnRlbnQuXG4gICAqIElmIGZhbHNlLCB0aGUgcHJvcCBpcyBpZ25vcmVkLlxuICAgKiBJZiB0cnVlLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggZ3Jvd3MgdG8gdXNlIHRoZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGdyaWQgY29udGFpbmVyLlxuICAgKiBUaGUgdmFsdWUgaXMgYXBwbGllZCBmb3IgYWxsIHRoZSBzY3JlZW4gc2l6ZXMgd2l0aCB0aGUgbG93ZXN0IHByaW9yaXR5LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgeHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5ib29sXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGl0IHNldHMgYG1pbi13aWR0aDogMGAgb24gdGhlIGl0ZW0uXG4gICAqIFJlZmVyIHRvIHRoZSBsaW1pdGF0aW9ucyBzZWN0aW9uIG9mIHRoZSBkb2N1bWVudGF0aW9uIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSB1c2UgY2FzZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHplcm9NaW5XaWR0aDogUHJvcFR5cGVzLmJvb2xcbn0gOiB2b2lkIDA7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBjb25zdCByZXF1aXJlUHJvcCA9IHJlcXVpcmVQcm9wRmFjdG9yeSgnR3JpZCcsIEdyaWQpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25jYXRcbiAgR3JpZFsncHJvcFR5cGVzJyArICcnXSA9IF9leHRlbmRzKHt9LCBHcmlkLnByb3BUeXBlcywge1xuICAgIGRpcmVjdGlvbjogcmVxdWlyZVByb3AoJ2NvbnRhaW5lcicpLFxuICAgIGxnOiByZXF1aXJlUHJvcCgnaXRlbScpLFxuICAgIG1kOiByZXF1aXJlUHJvcCgnaXRlbScpLFxuICAgIHNtOiByZXF1aXJlUHJvcCgnaXRlbScpLFxuICAgIHNwYWNpbmc6IHJlcXVpcmVQcm9wKCdjb250YWluZXInKSxcbiAgICB3cmFwOiByZXF1aXJlUHJvcCgnY29udGFpbmVyJyksXG4gICAgeHM6IHJlcXVpcmVQcm9wKCdpdGVtJyksXG4gICAgemVyb01pbldpZHRoOiByZXF1aXJlUHJvcCgnaXRlbScpXG4gIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgR3JpZDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCB7IGlucHV0QmFzZUNsYXNzZXMgfSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlJbnB1dCcsIHNsb3QpO1xufVxuY29uc3QgaW5wdXRDbGFzc2VzID0gX2V4dGVuZHMoe30sIGlucHV0QmFzZUNsYXNzZXMsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUlucHV0JywgWydyb290JywgJ3VuZGVybGluZScsICdpbnB1dCddKSk7XG5leHBvcnQgZGVmYXVsdCBpbnB1dENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZVVuZGVybGluZVwiLCBcImNvbXBvbmVudHNcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcIm11bHRpbGluZVwiLCBcInNsb3RQcm9wc1wiLCBcInNsb3RzXCIsIFwidHlwZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyByZWZUeXBlLCBkZWVwbWVyZ2UgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBJbnB1dEJhc2UgZnJvbSAnLi4vSW5wdXRCYXNlJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgaW5wdXRDbGFzc2VzLCB7IGdldElucHV0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9pbnB1dENsYXNzZXMnO1xuaW1wb3J0IHsgcm9vdE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlciwgaW5wdXRPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyLCBJbnB1dEJhc2VSb290LCBJbnB1dEJhc2VDb21wb25lbnQgYXMgSW5wdXRCYXNlSW5wdXQgfSBmcm9tICcuLi9JbnB1dEJhc2UvSW5wdXRCYXNlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlVW5kZXJsaW5lXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZVVuZGVybGluZSAmJiAndW5kZXJsaW5lJ10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SW5wdXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgSW5wdXRSb290ID0gc3R5bGVkKElucHV0QmFzZVJvb3QsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUlucHV0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbLi4uaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCBzdHlsZXMpLCAhb3duZXJTdGF0ZS5kaXNhYmxlVW5kZXJsaW5lICYmIHN0eWxlcy51bmRlcmxpbmVdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICBjb25zdCBsaWdodCA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JztcbiAgbGV0IGJvdHRvbUxpbmVDb2xvciA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC40MiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSc7XG4gIGlmICh0aGVtZS52YXJzKSB7XG4gICAgYm90dG9tTGluZUNvbG9yID0gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gJHt0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRVbmRlcmxpbmV9KWA7XG4gIH1cbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICB9LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHtcbiAgICAnbGFiZWwgKyAmJzoge1xuICAgICAgbWFyZ2luVG9wOiAxNlxuICAgIH1cbiAgfSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiB7XG4gICAgJyY6YWZ0ZXInOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAycHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWlufWAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgYm90dG9tOiAwLFxuICAgICAgLy8gRG9pbmcgdGhlIG90aGVyIHdheSBhcm91bmQgY3Jhc2ggb24gSUUxMSBcIicnXCIgaHR0cHM6Ly9naXRodWIuY29tL2Nzc2luanMvanNzL2lzc3Vlcy8yNDJcbiAgICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMCknLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLFxuICAgICAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gICAgICB9KSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyAvLyBUcmFuc3BhcmVudCB0byB0aGUgaG92ZXIgc3R5bGUuXG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dENsYXNzZXMuZm9jdXNlZH06YWZ0ZXJgXToge1xuICAgICAgLy8gdHJhbnNsYXRlWCgwKSBpcyBhIHdvcmthcm91bmQgZm9yIFNhZmFyaSB0cmFuc2Zvcm0gc2NhbGUgYnVnXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMzE3NjZcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgxKSB0cmFuc2xhdGVYKDApJ1xuICAgIH0sXG4gICAgW2AmLiR7aW5wdXRDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgICAnJjpiZWZvcmUsICY6YWZ0ZXInOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbUNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gICAgICB9XG4gICAgfSxcbiAgICAnJjpiZWZvcmUnOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHtib3R0b21MaW5lQ29sb3J9YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXFxcXDAwYTBcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3JkZXItYm90dG9tLWNvbG9yJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG4gICAgW2AmOmhvdmVyOm5vdCguJHtpbnB1dENsYXNzZXMuZGlzYWJsZWR9LCAuJHtpbnB1dENsYXNzZXMuZXJyb3J9KTpiZWZvcmVgXToge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMnB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5fWAsXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHtib3R0b21MaW5lQ29sb3J9YFxuICAgICAgfVxuICAgIH0sXG4gICAgW2AmLiR7aW5wdXRDbGFzc2VzLmRpc2FibGVkfTpiZWZvcmVgXToge1xuICAgICAgYm9yZGVyQm90dG9tU3R5bGU6ICdkb3R0ZWQnXG4gICAgfVxuICB9KTtcbn0pO1xuY29uc3QgSW5wdXRJbnB1dCA9IHN0eWxlZChJbnB1dEJhc2VJbnB1dCwge1xuICBuYW1lOiAnTXVpSW5wdXQnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoe30pO1xuY29uc3QgSW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBJbnB1dChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90cyRyb290LCBfcmVmMiwgX3Nsb3RzJGlucHV0O1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlJbnB1dCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGRpc2FibGVVbmRlcmxpbmUsXG4gICAgICBjb21wb25lbnRzID0ge30sXG4gICAgICBjb21wb25lbnRzUHJvcHM6IGNvbXBvbmVudHNQcm9wc1Byb3AsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgc2xvdFByb3BzLFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIHR5cGUgPSAndGV4dCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKHByb3BzKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IHtcbiAgICBkaXNhYmxlVW5kZXJsaW5lXG4gIH07XG4gIGNvbnN0IGlucHV0Q29tcG9uZW50c1Byb3BzID0ge1xuICAgIHJvb3Q6IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9XG4gIH07XG4gIGNvbnN0IGNvbXBvbmVudHNQcm9wcyA9IChzbG90UHJvcHMgIT0gbnVsbCA/IHNsb3RQcm9wcyA6IGNvbXBvbmVudHNQcm9wc1Byb3ApID8gZGVlcG1lcmdlKHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCwgaW5wdXRDb21wb25lbnRzUHJvcHMpIDogaW5wdXRDb21wb25lbnRzUHJvcHM7XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9yZWYgPSAoX3Nsb3RzJHJvb3QgPSBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBjb21wb25lbnRzLlJvb3QpICE9IG51bGwgPyBfcmVmIDogSW5wdXRSb290O1xuICBjb25zdCBJbnB1dFNsb3QgPSAoX3JlZjIgPSAoX3Nsb3RzJGlucHV0ID0gc2xvdHMuaW5wdXQpICE9IG51bGwgPyBfc2xvdHMkaW5wdXQgOiBjb21wb25lbnRzLklucHV0KSAhPSBudWxsID8gX3JlZjIgOiBJbnB1dElucHV0O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSW5wdXRCYXNlLCBfZXh0ZW5kcyh7XG4gICAgc2xvdHM6IHtcbiAgICAgIHJvb3Q6IFJvb3RTbG90LFxuICAgICAgaW5wdXQ6IElucHV0U2xvdFxuICAgIH0sXG4gICAgc2xvdFByb3BzOiBjb21wb25lbnRzUHJvcHMsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgaW5wdXRDb21wb25lbnQ6IGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZTogbXVsdGlsaW5lLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gSW5wdXQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgbm90IGhhdmUgYW4gdW5kZXJsaW5lLlxuICAgKi9cbiAgZGlzYWJsZVVuZGVybGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJdCBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICogKG5vdCBmcm9tIGludGVyYWN0aW5nIHdpdGggdGhlIGZpZWxkKS5cbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzUHJvcHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFN0YXJ0IGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgc3RhcnRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LiBJdCBzaG91bGQgYmUgW2EgdmFsaWQgSFRNTDUgaW5wdXQgdHlwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0Zvcm1fJTNDaW5wdXQlM0VfdHlwZXMpLlxuICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudCwgcmVxdWlyZWQgZm9yIGEgY29udHJvbGxlZCBjb21wb25lbnQuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbklucHV0Lm11aU5hbWUgPSAnSW5wdXQnO1xuZXhwb3J0IGRlZmF1bHQgSW5wdXQ7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGFzIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgfSBmcm9tIFwiQG11aS91dGlsc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXJpYS1kZXNjcmliZWRieVwiLCBcImF1dG9Db21wbGV0ZVwiLCBcImF1dG9Gb2N1c1wiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50c1wiLCBcImNvbXBvbmVudHNQcm9wc1wiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlc1wiLCBcImVuZEFkb3JubWVudFwiLCBcImVycm9yXCIsIFwiZnVsbFdpZHRoXCIsIFwiaWRcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcImlucHV0UHJvcHNcIiwgXCJpbnB1dFJlZlwiLCBcIm1hcmdpblwiLCBcIm1heFJvd3NcIiwgXCJtaW5Sb3dzXCIsIFwibXVsdGlsaW5lXCIsIFwibmFtZVwiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25DbGlja1wiLCBcIm9uRm9jdXNcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJyZWFkT25seVwiLCBcInJlbmRlclN1ZmZpeFwiLCBcInJvd3NcIiwgXCJzaXplXCIsIFwic2xvdFByb3BzXCIsIFwic2xvdHNcIiwgXCJzdGFydEFkb3JubWVudFwiLCBcInR5cGVcIiwgXCJ2YWx1ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHJlZlR5cGUsIGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcywgaXNIb3N0Q29tcG9uZW50LCBUZXh0YXJlYUF1dG9zaXplIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBmb3JtQ29udHJvbFN0YXRlIGZyb20gJy4uL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sU3RhdGUnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuLi9Gb3JtQ29udHJvbC9Gb3JtQ29udHJvbENvbnRleHQnO1xuaW1wb3J0IHVzZUZvcm1Db250cm9sIGZyb20gJy4uL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmltcG9ydCBHbG9iYWxTdHlsZXMgZnJvbSAnLi4vR2xvYmFsU3R5bGVzJztcbmltcG9ydCB7IGlzRmlsbGVkIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgaW5wdXRCYXNlQ2xhc3NlcywgeyBnZXRJbnB1dEJhc2VVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2lucHV0QmFzZUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBjb25zdCByb290T3ZlcnJpZGVzUmVzb2x2ZXIgPSAocHJvcHMsIHN0eWxlcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3duZXJTdGF0ZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuZm9ybUNvbnRyb2wgJiYgc3R5bGVzLmZvcm1Db250cm9sLCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHN0eWxlcy5hZG9ybmVkU3RhcnQsIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHN0eWxlcy5hZG9ybmVkRW5kLCBvd25lclN0YXRlLmVycm9yICYmIHN0eWxlcy5lcnJvciwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHN0eWxlcy5zaXplU21hbGwsIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHN0eWxlcy5tdWx0aWxpbmUsIG93bmVyU3RhdGUuY29sb3IgJiYgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYgc3R5bGVzLmZ1bGxXaWR0aCwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiBzdHlsZXMuaGlkZGVuTGFiZWxdO1xufTtcbmV4cG9ydCBjb25zdCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyID0gKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgY29uc3Qge1xuICAgIG93bmVyU3RhdGVcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gW3N0eWxlcy5pbnB1dCwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHN0eWxlcy5pbnB1dFNpemVTbWFsbCwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgc3R5bGVzLmlucHV0TXVsdGlsaW5lLCBvd25lclN0YXRlLnR5cGUgPT09ICdzZWFyY2gnICYmIHN0eWxlcy5pbnB1dFR5cGVTZWFyY2gsIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYgc3R5bGVzLmlucHV0QWRvcm5lZFN0YXJ0LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiBzdHlsZXMuaW5wdXRBZG9ybmVkRW5kLCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHN0eWxlcy5pbnB1dEhpZGRlbkxhYmVsXTtcbn07XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlZCxcbiAgICBlcnJvcixcbiAgICBlbmRBZG9ybm1lbnQsXG4gICAgZm9jdXNlZCxcbiAgICBmb3JtQ29udHJvbCxcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWwsXG4gICAgbXVsdGlsaW5lLFxuICAgIHJlYWRPbmx5LFxuICAgIHNpemUsXG4gICAgc3RhcnRBZG9ybm1lbnQsXG4gICAgdHlwZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBmdWxsV2lkdGggJiYgJ2Z1bGxXaWR0aCcsIGZvY3VzZWQgJiYgJ2ZvY3VzZWQnLCBmb3JtQ29udHJvbCAmJiAnZm9ybUNvbnRyb2wnLCBzaXplICYmIHNpemUgIT09ICdtZWRpdW0nICYmIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWAsIG11bHRpbGluZSAmJiAnbXVsdGlsaW5lJywgc3RhcnRBZG9ybm1lbnQgJiYgJ2Fkb3JuZWRTdGFydCcsIGVuZEFkb3JubWVudCAmJiAnYWRvcm5lZEVuZCcsIGhpZGRlbkxhYmVsICYmICdoaWRkZW5MYWJlbCcsIHJlYWRPbmx5ICYmICdyZWFkT25seSddLFxuICAgIGlucHV0OiBbJ2lucHV0JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgdHlwZSA9PT0gJ3NlYXJjaCcgJiYgJ2lucHV0VHlwZVNlYXJjaCcsIG11bHRpbGluZSAmJiAnaW5wdXRNdWx0aWxpbmUnLCBzaXplID09PSAnc21hbGwnICYmICdpbnB1dFNpemVTbWFsbCcsIGhpZGRlbkxhYmVsICYmICdpbnB1dEhpZGRlbkxhYmVsJywgc3RhcnRBZG9ybm1lbnQgJiYgJ2lucHV0QWRvcm5lZFN0YXJ0JywgZW5kQWRvcm5tZW50ICYmICdpbnB1dEFkb3JuZWRFbmQnLCByZWFkT25seSAmJiAncmVhZE9ubHknXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldElucHV0QmFzZVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IElucHV0QmFzZVJvb3QgPSBzdHlsZWQoJ2RpdicsIHtcbiAgbmFtZTogJ011aUlucHV0QmFzZScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IHJvb3RPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHt9LCB0aGVtZS50eXBvZ3JhcGh5LmJvZHkxLCB7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnksXG4gIGxpbmVIZWlnaHQ6ICcxLjQzNzVlbScsXG4gIC8vIDIzcHhcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIC8vIFByZXZlbnQgcGFkZGluZyBpc3N1ZSB3aXRoIGZ1bGxXaWR0aC5cbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGN1cnNvcjogJ3RleHQnLFxuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgW2AmLiR7aW5wdXRCYXNlQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkLFxuICAgIGN1cnNvcjogJ2RlZmF1bHQnXG4gIH1cbn0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIF9leHRlbmRzKHtcbiAgcGFkZGluZzogJzRweCAwIDVweCdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHBhZGRpbmdUb3A6IDFcbn0pLCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gIHdpZHRoOiAnMTAwJSdcbn0pKTtcbmV4cG9ydCBjb25zdCBJbnB1dEJhc2VDb21wb25lbnQgPSBzdHlsZWQoJ2lucHV0Jywge1xuICBuYW1lOiAnTXVpSW5wdXRCYXNlJyxcbiAgc2xvdDogJ0lucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIGNvbnN0IGxpZ2h0ID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnO1xuICBjb25zdCBwbGFjZWhvbGRlciA9IF9leHRlbmRzKHtcbiAgICBjb2xvcjogJ2N1cnJlbnRDb2xvcidcbiAgfSwgdGhlbWUudmFycyA/IHtcbiAgICBvcGFjaXR5OiB0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRQbGFjZWhvbGRlclxuICB9IDoge1xuICAgIG9wYWNpdHk6IGxpZ2h0ID8gMC40MiA6IDAuNVxuICB9LCB7XG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5Jywge1xuICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXJcbiAgICB9KVxuICB9KTtcbiAgY29uc3QgcGxhY2Vob2xkZXJIaWRkZW4gPSB7XG4gICAgb3BhY2l0eTogJzAgIWltcG9ydGFudCdcbiAgfTtcbiAgY29uc3QgcGxhY2Vob2xkZXJWaXNpYmxlID0gdGhlbWUudmFycyA/IHtcbiAgICBvcGFjaXR5OiB0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRQbGFjZWhvbGRlclxuICB9IDoge1xuICAgIG9wYWNpdHk6IGxpZ2h0ID8gMC40MiA6IDAuNVxuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGZvbnQ6ICdpbmhlcml0JyxcbiAgICBsZXR0ZXJTcGFjaW5nOiAnaW5oZXJpdCcsXG4gICAgY29sb3I6ICdjdXJyZW50Q29sb3InLFxuICAgIHBhZGRpbmc6ICc0cHggMCA1cHgnLFxuICAgIGJvcmRlcjogMCxcbiAgICBib3hTaXppbmc6ICdjb250ZW50LWJveCcsXG4gICAgYmFja2dyb3VuZDogJ25vbmUnLFxuICAgIGhlaWdodDogJzEuNDM3NWVtJyxcbiAgICAvLyBSZXNldCAyM3B4dGhlIG5hdGl2ZSBpbnB1dCBsaW5lLWhlaWdodFxuICAgIG1hcmdpbjogMCxcbiAgICAvLyBSZXNldCBmb3IgU2FmYXJpXG4gICAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAvLyBNYWtlIHRoZSBmbGV4IGl0ZW0gc2hyaW5rIHdpdGggRmlyZWZveFxuICAgIG1pbldpZHRoOiAwLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgLy8gRml4IElFMTEgd2lkdGggaXNzdWVcbiAgICBhbmltYXRpb25OYW1lOiAnbXVpLWF1dG8tZmlsbC1jYW5jZWwnLFxuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAnMTBtcycsXG4gICAgJyY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAnJjo6LW1vei1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgIC8vIEZpcmVmb3ggMTkrXG4gICAgJyY6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgLy8gSUUxMVxuICAgICcmOjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAvLyBFZGdlXG4gICAgJyY6Zm9jdXMnOiB7XG4gICAgICBvdXRsaW5lOiAwXG4gICAgfSxcbiAgICAvLyBSZXNldCBGaXJlZm94IGludmFsaWQgcmVxdWlyZWQgaW5wdXQgc3R5bGVcbiAgICAnJjppbnZhbGlkJzoge1xuICAgICAgYm94U2hhZG93OiAnbm9uZSdcbiAgICB9LFxuICAgICcmOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uJzoge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIHdoZW4gdHlwZT1zZWFyY2guXG4gICAgICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZSdcbiAgICB9LFxuICAgIC8vIFNob3cgYW5kIGhpZGUgdGhlIHBsYWNlaG9sZGVyIGxvZ2ljXG4gICAgW2BsYWJlbFtkYXRhLXNocmluaz1mYWxzZV0gKyAuJHtpbnB1dEJhc2VDbGFzc2VzLmZvcm1Db250cm9sfSAmYF06IHtcbiAgICAgICcmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAnJjo6LW1vei1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgLy8gRmlyZWZveCAxOStcbiAgICAgICcmOi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgLy8gSUUxMVxuICAgICAgJyY6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVySGlkZGVuLFxuICAgICAgLy8gRWRnZVxuICAgICAgJyY6Zm9jdXM6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUsXG4gICAgICAnJjpmb2N1czo6LW1vei1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSxcbiAgICAgIC8vIEZpcmVmb3ggMTkrXG4gICAgICAnJjpmb2N1czotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUsXG4gICAgICAvLyBJRTExXG4gICAgICAnJjpmb2N1czo6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlIC8vIEVkZ2VcbiAgICB9LFxuICAgIFtgJi4ke2lucHV0QmFzZUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAvLyBSZXNldCBpT1Mgb3BhY2l0eVxuICAgICAgV2Via2l0VGV4dEZpbGxDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZCAvLyBGaXggb3BhY2l0eSBTYWZhcmkgYnVnXG4gICAgfSxcbiAgICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICc1MDAwcycsXG4gICAgICBhbmltYXRpb25OYW1lOiAnbXVpLWF1dG8tZmlsbCdcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZ1RvcDogMVxuICB9LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiB7XG4gICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgcmVzaXplOiAnbm9uZScsXG4gICAgcGFkZGluZzogMCxcbiAgICBwYWRkaW5nVG9wOiAwXG4gIH0sIG93bmVyU3RhdGUudHlwZSA9PT0gJ3NlYXJjaCcgJiYge1xuICAgIC8vIEltcHJvdmUgdHlwZSBzZWFyY2ggc3R5bGUuXG4gICAgTW96QXBwZWFyYW5jZTogJ3RleHRmaWVsZCdcbiAgfSk7XG59KTtcbmNvbnN0IGlucHV0R2xvYmFsU3R5bGVzID0gLyojX19QVVJFX18qL19qc3goR2xvYmFsU3R5bGVzLCB7XG4gIHN0eWxlczoge1xuICAgICdAa2V5ZnJhbWVzIG11aS1hdXRvLWZpbGwnOiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICAgIH1cbiAgICB9LFxuICAgICdAa2V5ZnJhbWVzIG11aS1hdXRvLWZpbGwtY2FuY2VsJzoge1xuICAgICAgZnJvbToge1xuICAgICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBgSW5wdXRCYXNlYCBjb250YWlucyBhcyBmZXcgc3R5bGVzIGFzIHBvc3NpYmxlLlxuICogSXQgYWltcyB0byBiZSBhIHNpbXBsZSBidWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYW4gaW5wdXQuXG4gKiBJdCBjb250YWlucyBhIGxvYWQgb2Ygc3R5bGUgcmVzZXQgYW5kIHNvbWUgc3RhdGUgbG9naWMuXG4gKi9cbmNvbnN0IElucHV0QmFzZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0QmFzZShpblByb3BzLCByZWYpIHtcbiAgdmFyIF9zbG90UHJvcHMkaW5wdXQ7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUlucHV0QmFzZSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgYXV0b0NvbXBsZXRlLFxuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXMsXG4gICAgICBlbmRBZG9ybm1lbnQsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGlkLFxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgaW5wdXRQcm9wczogaW5wdXRQcm9wc1Byb3AgPSB7fSxcbiAgICAgIGlucHV0UmVmOiBpbnB1dFJlZlByb3AsXG4gICAgICBtYXhSb3dzLFxuICAgICAgbWluUm93cyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICByZWFkT25seSxcbiAgICAgIHJlbmRlclN1ZmZpeCxcbiAgICAgIHJvd3MsXG4gICAgICBzbG90UHJvcHMgPSB7fSxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICBzdGFydEFkb3JubWVudCxcbiAgICAgIHR5cGUgPSAndGV4dCcsXG4gICAgICB2YWx1ZTogdmFsdWVQcm9wXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHZhbHVlID0gaW5wdXRQcm9wc1Byb3AudmFsdWUgIT0gbnVsbCA/IGlucHV0UHJvcHNQcm9wLnZhbHVlIDogdmFsdWVQcm9wO1xuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNDb250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYodmFsdWUgIT0gbnVsbCk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGhhbmRsZUlucHV0UmVmV2FybmluZyA9IFJlYWN0LnVzZUNhbGxiYWNrKGluc3RhbmNlID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLm5vZGVOYW1lICE9PSAnSU5QVVQnICYmICFpbnN0YW5jZS5mb2N1cykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhIGBpbnB1dENvbXBvbmVudGAgdG8gdGhlIGlucHV0IGNvbXBvbmVudCcsICd0aGF0IGRvZXMgbm90IGNvcnJlY3RseSBoYW5kbGUgdGhlIGByZWZgIHByb3AuJywgJ01ha2Ugc3VyZSB0aGUgYHJlZmAgcHJvcCBpcyBjYWxsZWQgd2l0aCBhIEhUTUxJbnB1dEVsZW1lbnQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW10pO1xuICBjb25zdCBoYW5kbGVJbnB1dFJlZiA9IHVzZUZvcmtSZWYoaW5wdXRSZWYsIGlucHV0UmVmUHJvcCwgaW5wdXRQcm9wc1Byb3AucmVmLCBoYW5kbGVJbnB1dFJlZldhcm5pbmcpO1xuICBjb25zdCBbZm9jdXNlZCwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKG11aUZvcm1Db250cm9sKSB7XG4gICAgICAgIHJldHVybiBtdWlGb3JtQ29udHJvbC5yZWdpc3RlckVmZmVjdCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LCBbbXVpRm9ybUNvbnRyb2xdKTtcbiAgfVxuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnY29sb3InLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnaGlkZGVuTGFiZWwnLCAnc2l6ZScsICdyZXF1aXJlZCcsICdmaWxsZWQnXVxuICB9KTtcbiAgZmNzLmZvY3VzZWQgPSBtdWlGb3JtQ29udHJvbCA/IG11aUZvcm1Db250cm9sLmZvY3VzZWQgOiBmb2N1c2VkO1xuXG4gIC8vIFRoZSBibHVyIHdvbid0IGZpcmUgd2hlbiB0aGUgZGlzYWJsZWQgc3RhdGUgaXMgc2V0IG9uIGEgZm9jdXNlZCBpbnB1dC5cbiAgLy8gV2UgbmVlZCB0byBib29rIGtlZXAgdGhlIGZvY3VzZWQgc3RhdGUgbWFudWFsbHkuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtdWlGb3JtQ29udHJvbCAmJiBkaXNhYmxlZCAmJiBmb2N1c2VkKSB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICAgIGlmIChvbkJsdXIpIHtcbiAgICAgICAgb25CbHVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbbXVpRm9ybUNvbnRyb2wsIGRpc2FibGVkLCBmb2N1c2VkLCBvbkJsdXJdKTtcbiAgY29uc3Qgb25GaWxsZWQgPSBtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkZpbGxlZDtcbiAgY29uc3Qgb25FbXB0eSA9IG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRW1wdHk7XG4gIGNvbnN0IGNoZWNrRGlydHkgPSBSZWFjdC51c2VDYWxsYmFjayhvYmogPT4ge1xuICAgIGlmIChpc0ZpbGxlZChvYmopKSB7XG4gICAgICBpZiAob25GaWxsZWQpIHtcbiAgICAgICAgb25GaWxsZWQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9uRW1wdHkpIHtcbiAgICAgIG9uRW1wdHkoKTtcbiAgICB9XG4gIH0sIFtvbkZpbGxlZCwgb25FbXB0eV0pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQ29udHJvbGxlZCkge1xuICAgICAgY2hlY2tEaXJ0eSh7XG4gICAgICAgIHZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgY2hlY2tEaXJ0eSwgaXNDb250cm9sbGVkXSk7XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gZXZlbnQgPT4ge1xuICAgIC8vIEZpeCBhIGJ1ZyB3aXRoIElFMTEgd2hlcmUgdGhlIGZvY3VzL2JsdXIgZXZlbnRzIGFyZSB0cmlnZ2VyZWRcbiAgICAvLyB3aGlsZSB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgIGlmIChmY3MuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICAgIGlmIChpbnB1dFByb3BzUHJvcC5vbkZvY3VzKSB7XG4gICAgICBpbnB1dFByb3BzUHJvcC5vbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRm9jdXMpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLm9uRm9jdXMoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlQmx1ciA9IGV2ZW50ID0+IHtcbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25CbHVyKSB7XG4gICAgICBpbnB1dFByb3BzUHJvcC5vbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAobXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25CbHVyKSB7XG4gICAgICBtdWlGb3JtQ29udHJvbC5vbkJsdXIoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChldmVudCwgLi4uYXJncykgPT4ge1xuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0IHx8IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBFeHBlY3RlZCB2YWxpZCBpbnB1dCB0YXJnZXQuIERpZCB5b3UgdXNlIGEgY3VzdG9tIFxcYGlucHV0Q29tcG9uZW50XFxgIGFuZCBmb3JnZXQgdG8gZm9yd2FyZCByZWZzPyBTZWUgaHR0cHM6Ly9tdWkuY29tL3IvaW5wdXQtY29tcG9uZW50LXJlZi1pbnRlcmZhY2UgZm9yIG1vcmUgaW5mby5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxKSk7XG4gICAgICB9XG4gICAgICBjaGVja0RpcnR5KHtcbiAgICAgICAgdmFsdWU6IGVsZW1lbnQudmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25DaGFuZ2UpIHtcbiAgICAgIGlucHV0UHJvcHNQcm9wLm9uQ2hhbmdlKGV2ZW50LCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIGluIHRoZSB3aWxsVXBkYXRlXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShldmVudCwgLi4uYXJncyk7XG4gICAgfVxuICB9O1xuXG4gIC8vIENoZWNrIHRoZSBpbnB1dCBzdGF0ZSBvbiBtb3VudCwgaW4gY2FzZSBpdCB3YXMgZmlsbGVkIGJ5IHRoZSB1c2VyXG4gIC8vIG9yIGF1dG8gZmlsbGVkIGJ5IHRoZSBicm93c2VyIGJlZm9yZSB0aGUgaHlkcmF0aW9uIChmb3IgU1NSKS5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjaGVja0RpcnR5KGlucHV0UmVmLmN1cnJlbnQpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuICBjb25zdCBoYW5kbGVDbGljayA9IGV2ZW50ID0+IHtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCAmJiBldmVudC5jdXJyZW50VGFyZ2V0ID09PSBldmVudC50YXJnZXQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgbGV0IElucHV0Q29tcG9uZW50ID0gaW5wdXRDb21wb25lbnQ7XG4gIGxldCBpbnB1dFByb3BzID0gaW5wdXRQcm9wc1Byb3A7XG4gIGlmIChtdWx0aWxpbmUgJiYgSW5wdXRDb21wb25lbnQgPT09ICdpbnB1dCcpIHtcbiAgICBpZiAocm93cykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKG1pblJvd3MgfHwgbWF4Um93cykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignTVVJOiBZb3UgY2FuIG5vdCB1c2UgdGhlIGBtaW5Sb3dzYCBvciBgbWF4Um93c2AgcHJvcHMgd2hlbiB0aGUgaW5wdXQgYHJvd3NgIHByb3AgaXMgc2V0LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIG1pblJvd3M6IHJvd3MsXG4gICAgICAgIG1heFJvd3M6IHJvd3NcbiAgICAgIH0sIGlucHV0UHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIG1heFJvd3MsXG4gICAgICAgIG1pblJvd3NcbiAgICAgIH0sIGlucHV0UHJvcHMpO1xuICAgIH1cbiAgICBJbnB1dENvbXBvbmVudCA9IFRleHRhcmVhQXV0b3NpemU7XG4gIH1cbiAgY29uc3QgaGFuZGxlQXV0b0ZpbGwgPSBldmVudCA9PiB7XG4gICAgLy8gUHJvdmlkZSBhIGZha2UgdmFsdWUgYXMgQ2hyb21lIG1pZ2h0IG5vdCBsZXQgeW91IGFjY2VzcyBpdCBmb3Igc2VjdXJpdHkgcmVhc29ucy5cbiAgICBjaGVja0RpcnR5KGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdtdWktYXV0by1maWxsLWNhbmNlbCcgPyBpbnB1dFJlZi5jdXJyZW50IDoge1xuICAgICAgdmFsdWU6ICd4J1xuICAgIH0pO1xuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgbXVpRm9ybUNvbnRyb2wuc2V0QWRvcm5lZFN0YXJ0KEJvb2xlYW4oc3RhcnRBZG9ybm1lbnQpKTtcbiAgICB9XG4gIH0sIFttdWlGb3JtQ29udHJvbCwgc3RhcnRBZG9ybm1lbnRdKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yOiBmY3MuY29sb3IgfHwgJ3ByaW1hcnknLFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZW5kQWRvcm5tZW50LFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbDogZmNzLmhpZGRlbkxhYmVsLFxuICAgIG11bHRpbGluZSxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICBzdGFydEFkb3JubWVudCxcbiAgICB0eXBlXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IFJvb3QgPSBzbG90cy5yb290IHx8IGNvbXBvbmVudHMuUm9vdCB8fCBJbnB1dEJhc2VSb290O1xuICBjb25zdCByb290UHJvcHMgPSBzbG90UHJvcHMucm9vdCB8fCBjb21wb25lbnRzUHJvcHMucm9vdCB8fCB7fTtcbiAgY29uc3QgSW5wdXQgPSBzbG90cy5pbnB1dCB8fCBjb21wb25lbnRzLklucHV0IHx8IElucHV0QmFzZUNvbXBvbmVudDtcbiAgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHt9LCBpbnB1dFByb3BzLCAoX3Nsb3RQcm9wcyRpbnB1dCA9IHNsb3RQcm9wcy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkaW5wdXQgOiBjb21wb25lbnRzUHJvcHMuaW5wdXQpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFshZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlcyAmJiBpbnB1dEdsb2JhbFN0eWxlcywgLyojX19QVVJFX18qL19qc3hzKFJvb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsICFpc0hvc3RDb21wb25lbnQoUm9vdCkgJiYge1xuICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHJvb3RQcm9wcy5vd25lclN0YXRlKVxuICAgIH0sIHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgb25DbGljazogaGFuZGxlQ2xpY2tcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgcm9vdFByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lLCByZWFkT25seSAmJiAnTXVpSW5wdXRCYXNlLXJlYWRPbmx5JyksXG4gICAgICBjaGlsZHJlbjogW3N0YXJ0QWRvcm5tZW50LCAvKiNfX1BVUkVfXyovX2pzeChGb3JtQ29udHJvbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dCwgX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogZmNzLmVycm9yLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAgICAgYXV0b0NvbXBsZXRlOiBhdXRvQ29tcGxldGUsXG4gICAgICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgb25BbmltYXRpb25TdGFydDogaGFuZGxlQXV0b0ZpbGwsXG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgICAgcmVhZE9ubHk6IHJlYWRPbmx5LFxuICAgICAgICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWQsXG4gICAgICAgICAgcm93czogcm93cyxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgb25LZXlEb3duOiBvbktleURvd24sXG4gICAgICAgICAgb25LZXlVcDogb25LZXlVcCxcbiAgICAgICAgICB0eXBlOiB0eXBlXG4gICAgICAgIH0sIGlucHV0UHJvcHMsICFpc0hvc3RDb21wb25lbnQoSW5wdXQpICYmIHtcbiAgICAgICAgICBhczogSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIGlucHV0UHJvcHMub3duZXJTdGF0ZSlcbiAgICAgICAgfSwge1xuICAgICAgICAgIHJlZjogaGFuZGxlSW5wdXRSZWYsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuaW5wdXQsIGlucHV0UHJvcHMuY2xhc3NOYW1lLCByZWFkT25seSAmJiAnTXVpSW5wdXRCYXNlLXJlYWRPbmx5JyksXG4gICAgICAgICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXNcbiAgICAgICAgfSkpXG4gICAgICB9KSwgZW5kQWRvcm5tZW50LCByZW5kZXJTdWZmaXggPyByZW5kZXJTdWZmaXgoX2V4dGVuZHMoe30sIGZjcywge1xuICAgICAgICBzdGFydEFkb3JubWVudFxuICAgICAgfSkpIDogbnVsbF1cbiAgICB9KSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dEJhc2UucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIEdsb2JhbFN0eWxlcyBmb3IgdGhlIGF1dG8tZmlsbCBrZXlmcmFtZXMgd2lsbCBub3QgYmUgaW5qZWN0ZWQvcmVtb3ZlZCBvbiBtb3VudC91bm1vdW50LiBNYWtlIHN1cmUgdG8gaW5qZWN0IHRoZW0gYXQgdGhlIHRvcCBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKiBUaGlzIG9wdGlvbiBpcyBpbnRlbmRlZCB0byBoZWxwIHdpdGggYm9vc3RpbmcgdGhlIGluaXRpYWwgcmVuZGVyaW5nIHBlcmZvcm1hbmNlIGlmIHlvdSBhcmUgbG9hZGluZyBhIGJpZyBhbW91bnQgb2YgSW5wdXQgY29tcG9uZW50cyBhdCBvbmNlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGBpbnB1dGAgaXMgYmx1cnJlZC5cbiAgICpcbiAgICogTm90aWNlIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IChldmVudCkgbWlnaHQgYmUgdW5kZWZpbmVkLlxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBgaW5wdXRgIGRvZXNuJ3Qgc2F0aXNmeSBpdHMgY29uc3RyYWludHMuXG4gICAqL1xuICBvbkludmFsaWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5VXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZW5kZXJTdWZmaXg6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBJbnB1dEJhc2U7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0QmFzZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpSW5wdXRCYXNlJywgc2xvdCk7XG59XG5jb25zdCBpbnB1dEJhc2VDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXRCYXNlJywgWydyb290JywgJ2Zvcm1Db250cm9sJywgJ2ZvY3VzZWQnLCAnZGlzYWJsZWQnLCAnYWRvcm5lZFN0YXJ0JywgJ2Fkb3JuZWRFbmQnLCAnZXJyb3InLCAnc2l6ZVNtYWxsJywgJ211bHRpbGluZScsICdjb2xvclNlY29uZGFyeScsICdmdWxsV2lkdGgnLCAnaGlkZGVuTGFiZWwnLCAncmVhZE9ubHknLCAnaW5wdXQnLCAnaW5wdXRTaXplU21hbGwnLCAnaW5wdXRNdWx0aWxpbmUnLCAnaW5wdXRUeXBlU2VhcmNoJywgJ2lucHV0QWRvcm5lZFN0YXJ0JywgJ2lucHV0QWRvcm5lZEVuZCcsICdpbnB1dEhpZGRlbkxhYmVsJ10pO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRCYXNlQ2xhc3NlczsiLCIvLyBTdXBwb3J0cyBkZXRlcm1pbmF0aW9uIG9mIGlzQ29udHJvbGxlZCgpLlxuLy8gQ29udHJvbGxlZCBpbnB1dCBhY2NlcHRzIGl0cyBjdXJyZW50IHZhbHVlIGFzIGEgcHJvcC5cbi8vXG4vLyBAc2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvZm9ybXMuaHRtbCNjb250cm9sbGVkLWNvbXBvbmVudHNcbi8vIEBwYXJhbSB2YWx1ZVxuLy8gQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgc3RyaW5nIChpbmNsdWRpbmcgJycpIG9yIG51bWJlciAoaW5jbHVkaW5nIHplcm8pXG5leHBvcnQgZnVuY3Rpb24gaGFzVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgIShBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApO1xufVxuXG4vLyBEZXRlcm1pbmUgaWYgZmllbGQgaXMgZW1wdHkgb3IgZmlsbGVkLlxuLy8gUmVzcG9uc2UgZGV0ZXJtaW5lcyBpZiBsYWJlbCBpcyBwcmVzZW50ZWQgYWJvdmUgZmllbGQgb3IgYXMgcGxhY2Vob2xkZXIuXG4vL1xuLy8gQHBhcmFtIG9ialxuLy8gQHBhcmFtIFNTUlxuLy8gQHJldHVybnMge2Jvb2xlYW59IEZhbHNlIHdoZW4gbm90IHByZXNlbnQgb3IgZW1wdHkgc3RyaW5nLlxuLy8gICAgICAgICAgICAgICAgICAgIFRydWUgd2hlbiBhbnkgbnVtYmVyIG9yIHN0cmluZyB3aXRoIGxlbmd0aC5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbGxlZChvYmosIFNTUiA9IGZhbHNlKSB7XG4gIHJldHVybiBvYmogJiYgKGhhc1ZhbHVlKG9iai52YWx1ZSkgJiYgb2JqLnZhbHVlICE9PSAnJyB8fCBTU1IgJiYgaGFzVmFsdWUob2JqLmRlZmF1bHRWYWx1ZSkgJiYgb2JqLmRlZmF1bHRWYWx1ZSAhPT0gJycpO1xufVxuXG4vLyBEZXRlcm1pbmUgaWYgYW4gSW5wdXQgaXMgYWRvcm5lZCBvbiBzdGFydC5cbi8vIEl0J3MgY29ycmVzcG9uZGluZyB0byB0aGUgbGVmdCB3aXRoIExUUi5cbi8vXG4vLyBAcGFyYW0gb2JqXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gRmFsc2Ugd2hlbiBubyBhZG9ybm1lbnRzLlxuLy8gICAgICAgICAgICAgICAgICAgIFRydWUgd2hlbiBhZG9ybmVkIGF0IHRoZSBzdGFydC5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fkb3JuZWRTdGFydChvYmopIHtcbiAgcmV0dXJuIG9iai5zdGFydEFkb3JubWVudDtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1MYWJlbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUxhYmVsQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1MYWJlbCcsIFsncm9vdCcsICdjb2xvclNlY29uZGFyeScsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCcsICdyZXF1aXJlZCcsICdhc3RlcmlzayddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1MYWJlbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmaWxsZWRcIiwgXCJmb2N1c2VkXCIsIFwicmVxdWlyZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgZm9ybUxhYmVsQ2xhc3NlcywgeyBnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUxhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb2xvcixcbiAgICBmb2N1c2VkLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZpbGxlZCxcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBmaWxsZWQgJiYgJ2ZpbGxlZCcsIGZvY3VzZWQgJiYgJ2ZvY3VzZWQnLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXSxcbiAgICBhc3RlcmlzazogWydhc3RlcmlzaycsIGVycm9yICYmICdlcnJvciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBGb3JtTGFiZWxSb290ID0gc3R5bGVkKCdsYWJlbCcsIHtcbiAgbmFtZTogJ011aUZvcm1MYWJlbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBvd25lclN0YXRlLmNvbG9yID09PSAnc2Vjb25kYXJ5JyAmJiBzdHlsZXMuY29sb3JTZWNvbmRhcnksIG93bmVyU3RhdGUuZmlsbGVkICYmIHN0eWxlcy5maWxsZWQpO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5zZWNvbmRhcnlcbn0sIHRoZW1lLnR5cG9ncmFwaHkuYm9keTEsIHtcbiAgbGluZUhlaWdodDogJzEuNDM3NWVtJyxcbiAgcGFkZGluZzogMCxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZm9jdXNlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gIH0sXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZFxuICB9LFxuICBbYCYuJHtmb3JtTGFiZWxDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSkpO1xuY29uc3QgQXN0ZXJpc2tDb21wb25lbnQgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlGb3JtTGFiZWwnLFxuICBzbG90OiAnQXN0ZXJpc2snLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5hc3Rlcmlza1xufSkoKHtcbiAgdGhlbWVcbn0pID0+ICh7XG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICB9XG59KSk7XG5jb25zdCBGb3JtTGFiZWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtTGFiZWwoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1MYWJlbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2xhYmVsJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydjb2xvcicsICdyZXF1aXJlZCcsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3I6IGZjcy5jb2xvciB8fCAncHJpbWFyeScsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmaWxsZWQ6IGZjcy5maWxsZWQsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgcmVxdWlyZWQ6IGZjcy5yZXF1aXJlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEZvcm1MYWJlbFJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbY2hpbGRyZW4sIGZjcy5yZXF1aXJlZCAmJiAvKiNfX1BVUkVfXyovX2pzeHMoQXN0ZXJpc2tDb21wb25lbnQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuYXN0ZXJpc2ssXG4gICAgICBjaGlsZHJlbjogW1wiXFx1MjAwOVwiLCAnKiddXG4gICAgfSldXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUxhYmVsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2Vycm9yJywgJ2luZm8nLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHNob3VsZCB1c2UgZmlsbGVkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgZmlsbGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IG9mIHRoaXMgbGFiZWwgaXMgZm9jdXNlZCAodXNlZCBieSBgRm9ybUdyb3VwYCBjb21wb25lbnRzKS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUxhYmVsOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dExhYmVsVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUlucHV0TGFiZWwnLCBzbG90KTtcbn1cbmNvbnN0IGlucHV0TGFiZWxDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXRMYWJlbCcsIFsncm9vdCcsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ3JlcXVpcmVkJywgJ2FzdGVyaXNrJywgJ2Zvcm1Db250cm9sJywgJ3NpemVTbWFsbCcsICdzaHJpbmsnLCAnYW5pbWF0ZWQnLCAnc3RhbmRhcmQnLCAnZmlsbGVkJywgJ291dGxpbmVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRMYWJlbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZUFuaW1hdGlvblwiLCBcIm1hcmdpblwiLCBcInNocmlua1wiLCBcInZhcmlhbnRcIiwgXCJjbGFzc05hbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgRm9ybUxhYmVsLCB7IGZvcm1MYWJlbENsYXNzZXMgfSBmcm9tICcuLi9Gb3JtTGFiZWwnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9pbnB1dExhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZm9ybUNvbnRyb2wsXG4gICAgc2l6ZSxcbiAgICBzaHJpbmssXG4gICAgZGlzYWJsZUFuaW1hdGlvbixcbiAgICB2YXJpYW50LFxuICAgIHJlcXVpcmVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBmb3JtQ29udHJvbCAmJiAnZm9ybUNvbnRyb2wnLCAhZGlzYWJsZUFuaW1hdGlvbiAmJiAnYW5pbWF0ZWQnLCBzaHJpbmsgJiYgJ3NocmluaycsIHNpemUgJiYgc2l6ZSAhPT0gJ25vcm1hbCcgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgdmFyaWFudF0sXG4gICAgYXN0ZXJpc2s6IFtyZXF1aXJlZCAmJiAnYXN0ZXJpc2snXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IElucHV0TGFiZWxSb290ID0gc3R5bGVkKEZvcm1MYWJlbCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpSW5wdXRMYWJlbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3tcbiAgICAgIFtgJiAuJHtmb3JtTGFiZWxDbGFzc2VzLmFzdGVyaXNrfWBdOiBzdHlsZXMuYXN0ZXJpc2tcbiAgICB9LCBzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiBzdHlsZXMuZm9ybUNvbnRyb2wsIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBzdHlsZXMuc2l6ZVNtYWxsLCBvd25lclN0YXRlLnNocmluayAmJiBzdHlsZXMuc2hyaW5rLCAhb3duZXJTdGF0ZS5kaXNhYmxlQW5pbWF0aW9uICYmIHN0eWxlcy5hbmltYXRlZCwgb3duZXJTdGF0ZS5mb2N1c2VkICYmIHN0eWxlcy5mb2N1c2VkLCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICBtYXhXaWR0aDogJzEwMCUnXG59LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIGxlZnQ6IDAsXG4gIHRvcDogMCxcbiAgLy8gc2xpZ2h0IGFsdGVyYXRpb24gdG8gc3BlYyBzcGFjaW5nIHRvIG1hdGNoIHZpc3VhbCBzcGVjIHJlc3VsdFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgMjBweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAvLyBDb21wZW5zYXRpb24gZm9yIHRoZSBgSW5wdXQuaW5wdXRTaXplU21hbGxgIHN0eWxlLlxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgMTdweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNocmluayAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgwLCAtMS41cHgpIHNjYWxlKDAuNzUpJyxcbiAgdHJhbnNmb3JtT3JpZ2luOiAndG9wIGxlZnQnLFxuICBtYXhXaWR0aDogJzEzMyUnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlQW5pbWF0aW9uICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKFsnY29sb3InLCAndHJhbnNmb3JtJywgJ21heC13aWR0aCddLCB7XG4gICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICB9KVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZmlsbGVkJyAmJiBfZXh0ZW5kcyh7XG4gIC8vIENocm9tZSdzIGF1dG9maWxsIGZlYXR1cmUgZ2l2ZXMgdGhlIGlucHV0IGZpZWxkIGEgeWVsbG93IGJhY2tncm91bmQuXG4gIC8vIFNpbmNlIHRoZSBpbnB1dCBmaWVsZCBpcyBiZWhpbmQgdGhlIGxhYmVsIGluIHRoZSBIVE1MIHRyZWUsXG4gIC8vIHRoZSBpbnB1dCBmaWVsZCBpcyBkcmF3biBsYXN0IGFuZCBoaWRlcyB0aGUgbGFiZWwgd2l0aCBhbiBvcGFxdWUgYmFja2dyb3VuZCBjb2xvci5cbiAgLy8gekluZGV4OiAxIHdpbGwgcmFpc2UgdGhlIGxhYmVsIGFib3ZlIG9wYXF1ZSBiYWNrZ3JvdW5kLWNvbG9ycyBvZiBpbnB1dC5cbiAgekluZGV4OiAxLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMnB4LCAxNnB4KSBzY2FsZSgxKScsXG4gIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gMjRweCknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgMTNweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNocmluayAmJiBfZXh0ZW5kcyh7XG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgcG9pbnRlckV2ZW50czogJ2F1dG8nLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgN3B4KSBzY2FsZSgwLjc1KScsXG4gIG1heFdpZHRoOiAnY2FsYygxMzMlIC0gMjRweCknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgNHB4KSBzY2FsZSgwLjc1KSdcbn0pKSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIF9leHRlbmRzKHtcbiAgLy8gc2VlIGNvbW1lbnQgYWJvdmUgb24gZmlsbGVkLnpJbmRleFxuICB6SW5kZXg6IDEsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDE0cHgsIDE2cHgpIHNjYWxlKDEpJyxcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSAyNHB4KSdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxNHB4LCA5cHgpIHNjYWxlKDEpJ1xufSwgb3duZXJTdGF0ZS5zaHJpbmsgJiYge1xuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHBvaW50ZXJFdmVudHM6ICdhdXRvJyxcbiAgLy8gVGhlb3JldGljYWxseSwgd2Ugc2hvdWxkIGhhdmUgKDgrNSkqMi8wLjc1ID0gMzRweFxuICAvLyBidXQgaXQgZmVlbHMgYSBiZXR0ZXIgd2hlbiBpdCBibGVlZHMgYSBiaXQgb24gdGhlIGxlZnQsIHNvIDMycHguXG4gIG1heFdpZHRoOiAnY2FsYygxMzMlIC0gMzJweCknLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTRweCwgLTlweCkgc2NhbGUoMC43NSknXG59KSkpO1xuY29uc3QgSW5wdXRMYWJlbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0TGFiZWwoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgbmFtZTogJ011aUlucHV0TGFiZWwnLFxuICAgIHByb3BzOiBpblByb3BzXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBkaXNhYmxlQW5pbWF0aW9uID0gZmFsc2UsXG4gICAgICBzaHJpbms6IHNocmlua1Byb3AsXG4gICAgICBjbGFzc05hbWVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgbXVpRm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbCgpO1xuICBsZXQgc2hyaW5rID0gc2hyaW5rUHJvcDtcbiAgaWYgKHR5cGVvZiBzaHJpbmsgPT09ICd1bmRlZmluZWQnICYmIG11aUZvcm1Db250cm9sKSB7XG4gICAgc2hyaW5rID0gbXVpRm9ybUNvbnRyb2wuZmlsbGVkIHx8IG11aUZvcm1Db250cm9sLmZvY3VzZWQgfHwgbXVpRm9ybUNvbnRyb2wuYWRvcm5lZFN0YXJ0O1xuICB9XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydzaXplJywgJ3ZhcmlhbnQnLCAncmVxdWlyZWQnLCAnZm9jdXNlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZUFuaW1hdGlvbixcbiAgICBmb3JtQ29udHJvbDogbXVpRm9ybUNvbnRyb2wsXG4gICAgc2hyaW5rLFxuICAgIHNpemU6IGZjcy5zaXplLFxuICAgIHZhcmlhbnQ6IGZjcy52YXJpYW50LFxuICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWQsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KElucHV0TGFiZWxSb290LCBfZXh0ZW5kcyh7XG4gICAgXCJkYXRhLXNocmlua1wiOiBzaHJpbmssXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZixcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IElucHV0TGFiZWwucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZXJyb3InLCAnaW5mbycsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRyYW5zaXRpb24gYW5pbWF0aW9uIGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUFuaW1hdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIG9mIHRoaXMgbGFiZWwgaXMgZm9jdXNlZC5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZSddKSxcbiAgLyoqXG4gICAqIGlmIGB0cnVlYCwgdGhlIGxhYmVsIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgYGlucHV0YCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIHNocnVuay5cbiAgICovXG4gIHNocmluazogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnbm9ybWFsJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydub3JtYWwnLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IElucHV0TGFiZWw7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgTGlzdENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBMaXN0Q29udGV4dC5kaXNwbGF5TmFtZSA9ICdMaXN0Q29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBMaXN0Q29udGV4dDsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdCcsIHNsb3QpO1xufVxuY29uc3QgbGlzdENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaXN0JywgWydyb290JywgJ3BhZGRpbmcnLCAnZGVuc2UnLCAnc3ViaGVhZGVyJ10pO1xuZXhwb3J0IGRlZmF1bHQgbGlzdENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJkZW5zZVwiLCBcImRpc2FibGVQYWRkaW5nXCIsIFwic3ViaGVhZGVyXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBMaXN0Q29udGV4dCBmcm9tICcuL0xpc3RDb250ZXh0JztcbmltcG9ydCB7IGdldExpc3RVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2xpc3RDbGFzc2VzJztcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlUGFkZGluZyxcbiAgICBkZW5zZSxcbiAgICBzdWJoZWFkZXJcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFkaXNhYmxlUGFkZGluZyAmJiAncGFkZGluZycsIGRlbnNlICYmICdkZW5zZScsIHN1YmhlYWRlciAmJiAnc3ViaGVhZGVyJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRMaXN0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBMaXN0Um9vdCA9IHN0eWxlZCgndWwnLCB7XG4gIG5hbWU6ICdNdWlMaXN0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsICFvd25lclN0YXRlLmRpc2FibGVQYWRkaW5nICYmIHN0eWxlcy5wYWRkaW5nLCBvd25lclN0YXRlLmRlbnNlICYmIHN0eWxlcy5kZW5zZSwgb3duZXJTdGF0ZS5zdWJoZWFkZXIgJiYgc3R5bGVzLnN1YmhlYWRlcl07XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgbGlzdFN0eWxlOiAnbm9uZScsXG4gIG1hcmdpbjogMCxcbiAgcGFkZGluZzogMCxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbn0sICFvd25lclN0YXRlLmRpc2FibGVQYWRkaW5nICYmIHtcbiAgcGFkZGluZ1RvcDogOCxcbiAgcGFkZGluZ0JvdHRvbTogOFxufSwgb3duZXJTdGF0ZS5zdWJoZWFkZXIgJiYge1xuICBwYWRkaW5nVG9wOiAwXG59KSk7XG5jb25zdCBMaXN0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTGlzdChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTGlzdCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ3VsJyxcbiAgICAgIGRlbnNlID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUGFkZGluZyA9IGZhbHNlLFxuICAgICAgc3ViaGVhZGVyXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZGVuc2VcbiAgfSksIFtkZW5zZV0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGRlbnNlLFxuICAgIGRpc2FibGVQYWRkaW5nXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaXN0Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeHMoTGlzdFJvb3QsIF9leHRlbmRzKHtcbiAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWYsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNoaWxkcmVuOiBbc3ViaGVhZGVyLCBjaGlsZHJlbl1cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IExpc3QucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgY29tcGFjdCB2ZXJ0aWNhbCBwYWRkaW5nIGRlc2lnbmVkIGZvciBrZXlib2FyZCBhbmQgbW91c2UgaW5wdXQgaXMgdXNlZCBmb3JcbiAgICogdGhlIGxpc3QgYW5kIGxpc3QgaXRlbXMuXG4gICAqIFRoZSBwcm9wIGlzIGF2YWlsYWJsZSB0byBkZXNjZW5kYW50IGNvbXBvbmVudHMgYXMgdGhlIGBkZW5zZWAgY29udGV4dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlbnNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdmVydGljYWwgcGFkZGluZyBpcyByZW1vdmVkIGZyb20gdGhlIGxpc3QuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUGFkZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgc3ViaGVhZGVyLCBub3JtYWxseSBgTGlzdFN1YmhlYWRlcmAuXG4gICAqL1xuICBzdWJoZWFkZXI6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTGlzdDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhY3Rpb25zXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXV0b0ZvY3VzSXRlbVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZVwiLCBcImRpc2FibGVMaXN0V3JhcFwiLCBcIm9uS2V5RG93blwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZyYWdtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJy4uL3V0aWxzL293bmVyRG9jdW1lbnQnO1xuaW1wb3J0IExpc3QgZnJvbSAnLi4vTGlzdCc7XG5pbXBvcnQgZ2V0U2Nyb2xsYmFyU2l6ZSBmcm9tICcuLi91dGlscy9nZXRTY3JvbGxiYXJTaXplJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBuZXh0SXRlbShsaXN0LCBpdGVtLCBkaXNhYmxlTGlzdFdyYXApIHtcbiAgaWYgKGxpc3QgPT09IGl0ZW0pIHtcbiAgICByZXR1cm4gbGlzdC5maXJzdENoaWxkO1xuICB9XG4gIGlmIChpdGVtICYmIGl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgcmV0dXJuIGl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICB9XG4gIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBudWxsIDogbGlzdC5maXJzdENoaWxkO1xufVxuZnVuY3Rpb24gcHJldmlvdXNJdGVtKGxpc3QsIGl0ZW0sIGRpc2FibGVMaXN0V3JhcCkge1xuICBpZiAobGlzdCA9PT0gaXRlbSkge1xuICAgIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBsaXN0LmZpcnN0Q2hpbGQgOiBsaXN0Lmxhc3RDaGlsZDtcbiAgfVxuICBpZiAoaXRlbSAmJiBpdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcbiAgICByZXR1cm4gaXRlbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICB9XG4gIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBudWxsIDogbGlzdC5sYXN0Q2hpbGQ7XG59XG5mdW5jdGlvbiB0ZXh0Q3JpdGVyaWFNYXRjaGVzKG5leHRGb2N1cywgdGV4dENyaXRlcmlhKSB7XG4gIGlmICh0ZXh0Q3JpdGVyaWEgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxldCB0ZXh0ID0gbmV4dEZvY3VzLmlubmVyVGV4dDtcbiAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIGpzZG9tIGRvZXNuJ3Qgc3VwcG9ydCBpbm5lclRleHRcbiAgICB0ZXh0ID0gbmV4dEZvY3VzLnRleHRDb250ZW50O1xuICB9XG4gIHRleHQgPSB0ZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAodGV4dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHRleHRDcml0ZXJpYS5yZXBlYXRpbmcpIHtcbiAgICByZXR1cm4gdGV4dFswXSA9PT0gdGV4dENyaXRlcmlhLmtleXNbMF07XG4gIH1cbiAgcmV0dXJuIHRleHQuaW5kZXhPZih0ZXh0Q3JpdGVyaWEua2V5cy5qb2luKCcnKSkgPT09IDA7XG59XG5mdW5jdGlvbiBtb3ZlRm9jdXMobGlzdCwgY3VycmVudEZvY3VzLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIHRyYXZlcnNhbEZ1bmN0aW9uLCB0ZXh0Q3JpdGVyaWEpIHtcbiAgbGV0IHdyYXBwZWRPbmNlID0gZmFsc2U7XG4gIGxldCBuZXh0Rm9jdXMgPSB0cmF2ZXJzYWxGdW5jdGlvbihsaXN0LCBjdXJyZW50Rm9jdXMsIGN1cnJlbnRGb2N1cyA/IGRpc2FibGVMaXN0V3JhcCA6IGZhbHNlKTtcbiAgd2hpbGUgKG5leHRGb2N1cykge1xuICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcC5cbiAgICBpZiAobmV4dEZvY3VzID09PSBsaXN0LmZpcnN0Q2hpbGQpIHtcbiAgICAgIGlmICh3cmFwcGVkT25jZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB3cmFwcGVkT25jZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gU2FtZSBsb2dpYyBhcyB1c2VBdXRvY29tcGxldGUuanNcbiAgICBjb25zdCBuZXh0Rm9jdXNEaXNhYmxlZCA9IGRpc2FibGVkSXRlbXNGb2N1c2FibGUgPyBmYWxzZSA6IG5leHRGb2N1cy5kaXNhYmxlZCB8fCBuZXh0Rm9jdXMuZ2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJykgPT09ICd0cnVlJztcbiAgICBpZiAoIW5leHRGb2N1cy5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHwgIXRleHRDcml0ZXJpYU1hdGNoZXMobmV4dEZvY3VzLCB0ZXh0Q3JpdGVyaWEpIHx8IG5leHRGb2N1c0Rpc2FibGVkKSB7XG4gICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IGVsZW1lbnQuXG4gICAgICBuZXh0Rm9jdXMgPSB0cmF2ZXJzYWxGdW5jdGlvbihsaXN0LCBuZXh0Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRGb2N1cy5mb2N1cygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBBIHBlcm1hbmVudGx5IGRpc3BsYXllZCBtZW51IGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL21lbnUtYnV0dG9uLy5cbiAqIEl0J3MgZXhwb3NlZCB0byBoZWxwIGN1c3RvbWl6YXRpb24gb2YgdGhlIFtgTWVudWBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pIGNvbXBvbmVudCBpZiB5b3VcbiAqIHVzZSBpdCBzZXBhcmF0ZWx5IHlvdSBuZWVkIHRvIG1vdmUgZm9jdXMgaW50byB0aGUgY29tcG9uZW50IG1hbnVhbGx5LiBPbmNlXG4gKiB0aGUgZm9jdXMgaXMgcGxhY2VkIGluc2lkZSB0aGUgY29tcG9uZW50IGl0IGlzIGZ1bGx5IGtleWJvYXJkIGFjY2Vzc2libGUuXG4gKi9cbmNvbnN0IE1lbnVMaXN0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTWVudUxpc3QocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgICAvLyBwcml2YXRlXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgICAgYWN0aW9ucyxcbiAgICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgICAgYXV0b0ZvY3VzSXRlbSA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlID0gZmFsc2UsXG4gICAgICBkaXNhYmxlTGlzdFdyYXAgPSBmYWxzZSxcbiAgICAgIG9uS2V5RG93bixcbiAgICAgIHZhcmlhbnQgPSAnc2VsZWN0ZWRNZW51J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBsaXN0UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCB0ZXh0Q3JpdGVyaWFSZWYgPSBSZWFjdC51c2VSZWYoe1xuICAgIGtleXM6IFtdLFxuICAgIHJlcGVhdGluZzogdHJ1ZSxcbiAgICBwcmV2aW91c0tleU1hdGNoZWQ6IHRydWUsXG4gICAgbGFzdFRpbWU6IG51bGxcbiAgfSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBsaXN0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFthdXRvRm9jdXNdKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb25zLCAoKSA9PiAoe1xuICAgIGFkanVzdFN0eWxlRm9yU2Nyb2xsYmFyOiAoY29udGFpbmVyRWxlbWVudCwgdGhlbWUpID0+IHtcbiAgICAgIC8vIExldCdzIGlnbm9yZSB0aGF0IHBpZWNlIG9mIGxvZ2ljIGlmIHVzZXJzIGFyZSBhbHJlYWR5IG92ZXJyaWRpbmcgdGhlIHdpZHRoXG4gICAgICAvLyBvZiB0aGUgbWVudS5cbiAgICAgIGNvbnN0IG5vRXhwbGljaXRXaWR0aCA9ICFsaXN0UmVmLmN1cnJlbnQuc3R5bGUud2lkdGg7XG4gICAgICBpZiAoY29udGFpbmVyRWxlbWVudC5jbGllbnRIZWlnaHQgPCBsaXN0UmVmLmN1cnJlbnQuY2xpZW50SGVpZ2h0ICYmIG5vRXhwbGljaXRXaWR0aCkge1xuICAgICAgICBjb25zdCBzY3JvbGxiYXJTaXplID0gYCR7Z2V0U2Nyb2xsYmFyU2l6ZShvd25lckRvY3VtZW50KGNvbnRhaW5lckVsZW1lbnQpKX1weGA7XG4gICAgICAgIGxpc3RSZWYuY3VycmVudC5zdHlsZVt0aGVtZS5kaXJlY3Rpb24gPT09ICdydGwnID8gJ3BhZGRpbmdMZWZ0JyA6ICdwYWRkaW5nUmlnaHQnXSA9IHNjcm9sbGJhclNpemU7XG4gICAgICAgIGxpc3RSZWYuY3VycmVudC5zdHlsZS53aWR0aCA9IGBjYWxjKDEwMCUgKyAke3Njcm9sbGJhclNpemV9KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFJlZi5jdXJyZW50O1xuICAgIH1cbiAgfSksIFtdKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBsaXN0ID0gbGlzdFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7RWxlbWVudH0gLSB3aWxsIGFsd2F5cyBiZSBkZWZpbmVkIHNpbmNlIHdlIGFyZSBpbiBhIGtleWRvd24gaGFuZGxlclxuICAgICAqIGF0dGFjaGVkIHRvIGFuIGVsZW1lbnQuIEEga2V5ZG93biBldmVudCBpcyBlaXRoZXIgZGlzcGF0Y2hlZCB0byB0aGUgYWN0aXZlRWxlbWVudFxuICAgICAqIG9yIGRvY3VtZW50LmJvZHkgb3IgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LiBPbmx5IHRoZSBmaXJzdCBjYXNlIHdpbGxcbiAgICAgKiB0cmlnZ2VyIHRoaXMgc3BlY2lmaWMgaGFuZGxlci5cbiAgICAgKi9cbiAgICBjb25zdCBjdXJyZW50Rm9jdXMgPSBvd25lckRvY3VtZW50KGxpc3QpLmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIC8vIFByZXZlbnQgc2Nyb2xsIG9mIHRoZSBwYWdlXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgcHJldmlvdXNJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIG51bGwsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgbmV4dEl0ZW0pO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnRW5kJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBudWxsLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIHByZXZpb3VzSXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjcml0ZXJpYSA9IHRleHRDcml0ZXJpYVJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgbG93ZXJLZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGN1cnJUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICBpZiAoY3JpdGVyaWEua2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIFJlc2V0XG4gICAgICAgIGlmIChjdXJyVGltZSAtIGNyaXRlcmlhLmxhc3RUaW1lID4gNTAwKSB7XG4gICAgICAgICAgY3JpdGVyaWEua2V5cyA9IFtdO1xuICAgICAgICAgIGNyaXRlcmlhLnJlcGVhdGluZyA9IHRydWU7XG4gICAgICAgICAgY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjcml0ZXJpYS5yZXBlYXRpbmcgJiYgbG93ZXJLZXkgIT09IGNyaXRlcmlhLmtleXNbMF0pIHtcbiAgICAgICAgICBjcml0ZXJpYS5yZXBlYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3JpdGVyaWEubGFzdFRpbWUgPSBjdXJyVGltZTtcbiAgICAgIGNyaXRlcmlhLmtleXMucHVzaChsb3dlcktleSk7XG4gICAgICBjb25zdCBrZWVwRm9jdXNPbkN1cnJlbnQgPSBjdXJyZW50Rm9jdXMgJiYgIWNyaXRlcmlhLnJlcGVhdGluZyAmJiB0ZXh0Q3JpdGVyaWFNYXRjaGVzKGN1cnJlbnRGb2N1cywgY3JpdGVyaWEpO1xuICAgICAgaWYgKGNyaXRlcmlhLnByZXZpb3VzS2V5TWF0Y2hlZCAmJiAoa2VlcEZvY3VzT25DdXJyZW50IHx8IG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGZhbHNlLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSwgY3JpdGVyaWEpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbktleURvd24pIHtcbiAgICAgIG9uS2V5RG93bihldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKGxpc3RSZWYsIHJlZik7XG5cbiAgLyoqXG4gICAqIHRoZSBpbmRleCBvZiB0aGUgaXRlbSBzaG91bGQgcmVjZWl2ZSBmb2N1c1xuICAgKiBpbiBhIGB2YXJpYW50PVwic2VsZWN0ZWRNZW51XCJgIGl0J3MgdGhlIGZpcnN0IGBzZWxlY3RlZGAgaXRlbVxuICAgKiBvdGhlcndpc2UgaXQncyB0aGUgdmVyeSBmaXJzdCBpdGVtLlxuICAgKi9cbiAgbGV0IGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAvLyBzaW5jZSB3ZSBpbmplY3QgZm9jdXMgcmVsYXRlZCBwcm9wcyBpbnRvIGNoaWxkcmVuIHdlIGhhdmUgdG8gZG8gYSBsb29rYWhlYWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlcmUgaXMgYSBgc2VsZWN0ZWRgIGl0ZW0uIFdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBsYXN0IGBzZWxlY3RlZGBcbiAgLy8gaXRlbSBhbmQgdXNlIHRoZSBmaXJzdCB2YWxpZCBpdGVtIGFzIGEgZmFsbGJhY2tcbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIGlmIChhY3RpdmVJdGVtSW5kZXggPT09IGluZGV4KSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCArPSAxO1xuICAgICAgICBpZiAoYWN0aXZlSXRlbUluZGV4ID49IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIC8vIHRoZXJlIGFyZSBubyBmb2N1c2FibGUgaXRlbXMgd2l0aGluIHRoZSBsaXN0LlxuICAgICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaXNGcmFnbWVudChjaGlsZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbXCJNVUk6IFRoZSBNZW51IGNvbXBvbmVudCBkb2Vzbid0IGFjY2VwdCBhIEZyYWdtZW50IGFzIGEgY2hpbGQuXCIsICdDb25zaWRlciBwcm92aWRpbmcgYW4gYXJyYXkgaW5zdGVhZC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghY2hpbGQucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh2YXJpYW50ID09PSAnc2VsZWN0ZWRNZW51JyAmJiBjaGlsZC5wcm9wcy5zZWxlY3RlZCkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlSXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gaW5kZXggJiYgKGNoaWxkLnByb3BzLmRpc2FibGVkIHx8IGNoaWxkLnByb3BzLm11aVNraXBMaXN0SGlnaGxpZ2h0IHx8IGNoaWxkLnR5cGUubXVpU2tpcExpc3RIaWdobGlnaHQpKSB7XG4gICAgICBhY3RpdmVJdGVtSW5kZXggKz0gMTtcbiAgICAgIGlmIChhY3RpdmVJdGVtSW5kZXggPj0gY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIC8vIHRoZXJlIGFyZSBubyBmb2N1c2FibGUgaXRlbXMgd2l0aGluIHRoZSBsaXN0LlxuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBpdGVtcyA9IFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gYWN0aXZlSXRlbUluZGV4KSB7XG4gICAgICBjb25zdCBuZXdDaGlsZFByb3BzID0ge307XG4gICAgICBpZiAoYXV0b0ZvY3VzSXRlbSkge1xuICAgICAgICBuZXdDaGlsZFByb3BzLmF1dG9Gb2N1cyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGQucHJvcHMudGFiSW5kZXggPT09IHVuZGVmaW5lZCAmJiB2YXJpYW50ID09PSAnc2VsZWN0ZWRNZW51Jykge1xuICAgICAgICBuZXdDaGlsZFByb3BzLnRhYkluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCBuZXdDaGlsZFByb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3QsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcIm1lbnVcIixcbiAgICByZWY6IGhhbmRsZVJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgdGFiSW5kZXg6IGF1dG9Gb2N1cyA/IDAgOiAtMVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBpdGVtc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE1lbnVMaXN0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBmb2N1cyB0aGUgYFtyb2xlPVwibWVudVwiXWAgY29udGFpbmVyIGFuZCBtb3ZlIGludG8gdGFiIG9yZGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBmb2N1cyB0aGUgZmlyc3QgbWVudWl0ZW0gaWYgYHZhcmlhbnQ9XCJtZW51XCJgIG9yIHNlbGVjdGVkIGl0ZW1cbiAgICogaWYgYHZhcmlhbnQ9XCJzZWxlY3RlZE1lbnVcImAuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXNJdGVtOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE1lbnVMaXN0IGNvbnRlbnRzLCBub3JtYWxseSBgTWVudUl0ZW1gcy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBhbGxvdyBmb2N1cyBvbiBkaXNhYmxlZCBpdGVtcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkSXRlbXNGb2N1c2FibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbWVudSBpdGVtcyB3aWxsIG5vdCB3cmFwIGZvY3VzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUxpc3RXcmFwOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuIFVzZSBgbWVudWAgdG8gcHJldmVudCBzZWxlY3RlZCBpdGVtcyBmcm9tIGltcGFjdGluZyB0aGUgaW5pdGlhbCBmb2N1c1xuICAgKiBhbmQgdGhlIHZlcnRpY2FsIGFsaWdubWVudCByZWxhdGl2ZSB0byB0aGUgYW5jaG9yIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdzZWxlY3RlZE1lbnUnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydtZW51JywgJ3NlbGVjdGVkTWVudSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1lbnVMaXN0OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFkZEVuZExpc3RlbmVyXCIsIFwiYXBwZWFyXCIsIFwiY2hpbGRyZW5cIiwgXCJlYXNpbmdcIiwgXCJpblwiLCBcIm9uRW50ZXJcIiwgXCJvbkVudGVyZWRcIiwgXCJvbkVudGVyaW5nXCIsIFwib25FeGl0XCIsIFwib25FeGl0ZWRcIiwgXCJvbkV4aXRpbmdcIiwgXCJzdHlsZVwiLCBcInRpbWVvdXRcIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGVsZW1lbnRBY2NlcHRpbmdSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsgZ2V0VHJhbnNpdGlvblByb3BzLCByZWZsb3cgfSBmcm9tICcuLi90cmFuc2l0aW9ucy91dGlscyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBnZXRTY2FsZSh2YWx1ZSkge1xuICByZXR1cm4gYHNjYWxlKCR7dmFsdWV9LCAke3ZhbHVlICoqIDJ9KWA7XG59XG5jb25zdCBzdHlsZXMgPSB7XG4gIGVudGVyaW5nOiB7XG4gICAgb3BhY2l0eTogMSxcbiAgICB0cmFuc2Zvcm06IGdldFNjYWxlKDEpXG4gIH0sXG4gIGVudGVyZWQ6IHtcbiAgICBvcGFjaXR5OiAxLFxuICAgIHRyYW5zZm9ybTogJ25vbmUnXG4gIH1cbn07XG5cbi8qXG4gVE9ETyB2NjogcmVtb3ZlXG4gQ29uZGl0aW9uYWxseSBhcHBseSBhIHdvcmthcm91bmQgZm9yIHRoZSBDU1MgdHJhbnNpdGlvbiBidWcgaW4gU2FmYXJpIDE1LjQgLyBXZWJLaXQgYnJvd3NlcnMuXG4gKi9cbmNvbnN0IGlzV2ViS2l0MTU0ID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgL14oKD8hY2hyb21lfGFuZHJvaWQpLikqKHNhZmFyaXxtb2JpbGUpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvKG9zIHx2ZXJzaW9uXFwvKTE1KC58Xyk0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuLyoqXG4gKiBUaGUgR3JvdyB0cmFuc2l0aW9uIGlzIHVzZWQgYnkgdGhlIFtUb29sdGlwXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdG9vbHRpcC8pIGFuZFxuICogW1BvcG92ZXJdKC9tYXRlcmlhbC11aS9yZWFjdC1wb3BvdmVyLykgY29tcG9uZW50cy5cbiAqIEl0IHVzZXMgW3JlYWN0LXRyYW5zaXRpb24tZ3JvdXBdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXApIGludGVybmFsbHkuXG4gKi9cbmNvbnN0IEdyb3cgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBHcm93KHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgYWRkRW5kTGlzdGVuZXIsXG4gICAgICBhcHBlYXIgPSB0cnVlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBlYXNpbmcsXG4gICAgICBpbjogaW5Qcm9wLFxuICAgICAgb25FbnRlcixcbiAgICAgIG9uRW50ZXJlZCxcbiAgICAgIG9uRW50ZXJpbmcsXG4gICAgICBvbkV4aXQsXG4gICAgICBvbkV4aXRlZCxcbiAgICAgIG9uRXhpdGluZyxcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCA9ICdhdXRvJyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gVHJhbnNpdGlvblxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB0aW1lciA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBhdXRvVGltZW91dCA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IG5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobm9kZVJlZiwgY2hpbGRyZW4ucmVmLCByZWYpO1xuICBjb25zdCBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrID0gY2FsbGJhY2sgPT4gbWF5YmVJc0FwcGVhcmluZyA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZVJlZi5jdXJyZW50O1xuXG4gICAgICAvLyBvbkVudGVyWHh4IGFuZCBvbkV4aXRYeHggY2FsbGJhY2tzIGhhdmUgYSBkaWZmZXJlbnQgYXJndW1lbnRzLmxlbmd0aCB2YWx1ZS5cbiAgICAgIGlmIChtYXliZUlzQXBwZWFyaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhub2RlLCBtYXliZUlzQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUVudGVyaW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkVudGVyaW5nKTtcbiAgY29uc3QgaGFuZGxlRW50ZXIgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKChub2RlLCBpc0FwcGVhcmluZykgPT4ge1xuICAgIHJlZmxvdyhub2RlKTsgLy8gU28gdGhlIGFuaW1hdGlvbiBhbHdheXMgc3RhcnQgZnJvbSB0aGUgc3RhcnQuXG5cbiAgICBjb25zdCB7XG4gICAgICBkdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgZGVsYXksXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0gPSBnZXRUcmFuc2l0aW9uUHJvcHMoe1xuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZWFzaW5nXG4gICAgfSwge1xuICAgICAgbW9kZTogJ2VudGVyJ1xuICAgIH0pO1xuICAgIGxldCBkdXJhdGlvbjtcbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICBkdXJhdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmdldEF1dG9IZWlnaHREdXJhdGlvbihub2RlLmNsaWVudEhlaWdodCk7XG4gICAgICBhdXRvVGltZW91dC5jdXJyZW50ID0gZHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uO1xuICAgIH1cbiAgICBub2RlLnN0eWxlLnRyYW5zaXRpb24gPSBbdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5Jywge1xuICAgICAgZHVyYXRpb24sXG4gICAgICBkZWxheVxuICAgIH0pLCB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgIGR1cmF0aW9uOiBpc1dlYktpdDE1NCA/IGR1cmF0aW9uIDogZHVyYXRpb24gKiAwLjY2NixcbiAgICAgIGRlbGF5LFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9KV0uam9pbignLCcpO1xuICAgIGlmIChvbkVudGVyKSB7XG4gICAgICBvbkVudGVyKG5vZGUsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFbnRlcmVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkVudGVyZWQpO1xuICBjb25zdCBoYW5kbGVFeGl0aW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRpbmcpO1xuICBjb25zdCBoYW5kbGVFeGl0ID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhub2RlID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgZGVsYXksXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0gPSBnZXRUcmFuc2l0aW9uUHJvcHMoe1xuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZWFzaW5nXG4gICAgfSwge1xuICAgICAgbW9kZTogJ2V4aXQnXG4gICAgfSk7XG4gICAgbGV0IGR1cmF0aW9uO1xuICAgIGlmICh0aW1lb3V0ID09PSAnYXV0bycpIHtcbiAgICAgIGR1cmF0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuZ2V0QXV0b0hlaWdodER1cmF0aW9uKG5vZGUuY2xpZW50SGVpZ2h0KTtcbiAgICAgIGF1dG9UaW1lb3V0LmN1cnJlbnQgPSBkdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb247XG4gICAgfVxuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IFt0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGRlbGF5XG4gICAgfSksIHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgZHVyYXRpb246IGlzV2ViS2l0MTU0ID8gZHVyYXRpb24gOiBkdXJhdGlvbiAqIDAuNjY2LFxuICAgICAgZGVsYXk6IGlzV2ViS2l0MTU0ID8gZGVsYXkgOiBkZWxheSB8fCBkdXJhdGlvbiAqIDAuMzMzLFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9KV0uam9pbignLCcpO1xuICAgIG5vZGUuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgbm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBnZXRTY2FsZSgwLjc1KTtcbiAgICBpZiAob25FeGl0KSB7XG4gICAgICBvbkV4aXQobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRlZCk7XG4gIGNvbnN0IGhhbmRsZUFkZEVuZExpc3RlbmVyID0gbmV4dCA9PiB7XG4gICAgaWYgKHRpbWVvdXQgPT09ICdhdXRvJykge1xuICAgICAgdGltZXIuY3VycmVudCA9IHNldFRpbWVvdXQobmV4dCwgYXV0b1RpbWVvdXQuY3VycmVudCB8fCAwKTtcbiAgICB9XG4gICAgaWYgKGFkZEVuZExpc3RlbmVyKSB7XG4gICAgICAvLyBPbGQgY2FsbCBzaWduYXR1cmUgYmVmb3JlIGByZWFjdC10cmFuc2l0aW9uLWdyb3VwYCBpbXBsZW1lbnRlZCBgbm9kZVJlZmBcbiAgICAgIGFkZEVuZExpc3RlbmVyKG5vZGVSZWYuY3VycmVudCwgbmV4dCk7XG4gICAgfVxuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGFwcGVhcjogYXBwZWFyLFxuICAgIGluOiBpblByb3AsXG4gICAgbm9kZVJlZjogbm9kZVJlZixcbiAgICBvbkVudGVyOiBoYW5kbGVFbnRlcixcbiAgICBvbkVudGVyZWQ6IGhhbmRsZUVudGVyZWQsXG4gICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmcsXG4gICAgb25FeGl0OiBoYW5kbGVFeGl0LFxuICAgIG9uRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgb25FeGl0aW5nOiBoYW5kbGVFeGl0aW5nLFxuICAgIGFkZEVuZExpc3RlbmVyOiBoYW5kbGVBZGRFbmRMaXN0ZW5lcixcbiAgICB0aW1lb3V0OiB0aW1lb3V0ID09PSAnYXV0bycgPyBudWxsIDogdGltZW91dFxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAoc3RhdGUsIGNoaWxkUHJvcHMpID0+IHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB0cmFuc2Zvcm06IGdldFNjYWxlKDAuNzUpLFxuICAgICAgICAgIHZpc2liaWxpdHk6IHN0YXRlID09PSAnZXhpdGVkJyAmJiAhaW5Qcm9wID8gJ2hpZGRlbicgOiB1bmRlZmluZWRcbiAgICAgICAgfSwgc3R5bGVzW3N0YXRlXSwgc3R5bGUsIGNoaWxkcmVuLnByb3BzLnN0eWxlKSxcbiAgICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICAgIH0sIGNoaWxkUHJvcHMpKTtcbiAgICB9XG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR3Jvdy5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmcgRE9NXG4gICAqIG5vZGUgYW5kIGEgZG9uZSBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gTm90ZTogVGltZW91dHMgYXJlIHN0aWxsIHVzZWQgYXMgYSBmYWxsYmFjayBpZiBwcm92aWRlZC5cbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFBlcmZvcm0gdGhlIGVudGVyIHRyYW5zaXRpb24gd2hlbiBpdCBmaXJzdCBtb3VudHMgaWYgYGluYCBpcyBhbHNvIGB0cnVlYC5cbiAgICogU2V0IHRoaXMgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3IuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVGhlIHRyYW5zaXRpb24gdGltaW5nIGZ1bmN0aW9uLlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgZWFzaW5nIG9yIGEgb2JqZWN0IGNvbnRhaW5pbmcgZW50ZXIgYW5kIGV4aXQgdmFsdWVzLlxuICAgKi9cbiAgZWFzaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGVudGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIHRyYW5zaXRpb24gaW4uXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gZm9yIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnMsIG9yIGluZGl2aWR1YWxseSB3aXRoIGFuIG9iamVjdC5cbiAgICpcbiAgICogU2V0IHRvICdhdXRvJyB0byBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZSB0cmFuc2l0aW9uIHRpbWUgYmFzZWQgb24gaGVpZ2h0LlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKVxufSA6IHZvaWQgMDtcbkdyb3cubXVpU3VwcG9ydEF1dG8gPSB0cnVlO1xuZXhwb3J0IGRlZmF1bHQgR3JvdzsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kYWxVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU1vZGFsJywgc2xvdCk7XG59XG5jb25zdCBtb2RhbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlNb2RhbCcsIFsncm9vdCcsICdoaWRkZW4nLCAnYmFja2Ryb3AnXSk7XG5leHBvcnQgZGVmYXVsdCBtb2RhbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiQmFja2Ryb3BDb21wb25lbnRcIiwgXCJCYWNrZHJvcFByb3BzXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiLCBcImNsb3NlQWZ0ZXJUcmFuc2l0aW9uXCIsIFwiY2hpbGRyZW5cIiwgXCJjb250YWluZXJcIiwgXCJjb21wb25lbnRcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZGlzYWJsZUF1dG9Gb2N1c1wiLCBcImRpc2FibGVFbmZvcmNlRm9jdXNcIiwgXCJkaXNhYmxlRXNjYXBlS2V5RG93blwiLCBcImRpc2FibGVQb3J0YWxcIiwgXCJkaXNhYmxlUmVzdG9yZUZvY3VzXCIsIFwiZGlzYWJsZVNjcm9sbExvY2tcIiwgXCJoaWRlQmFja2Ryb3BcIiwgXCJrZWVwTW91bnRlZFwiLCBcIm9uQmFja2Ryb3BDbGlja1wiLCBcIm9uQ2xvc2VcIiwgXCJvblRyYW5zaXRpb25FbnRlclwiLCBcIm9uVHJhbnNpdGlvbkV4aXRlZFwiLCBcIm9wZW5cIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInRoZW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgZWxlbWVudEFjY2VwdGluZ1JlZiwgSFRNTEVsZW1lbnRUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1c2VTbG90UHJvcHMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgdW5zdGFibGVfdXNlTW9kYWwgYXMgdXNlTW9kYWwgfSBmcm9tICdAbXVpL2Jhc2UvdW5zdGFibGVfdXNlTW9kYWwnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuLi9VbnN0YWJsZV9UcmFwRm9jdXMnO1xuaW1wb3J0IFBvcnRhbCBmcm9tICcuLi9Qb3J0YWwnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBCYWNrZHJvcCBmcm9tICcuLi9CYWNrZHJvcCc7XG5pbXBvcnQgeyBnZXRNb2RhbFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbW9kYWxDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgb3BlbixcbiAgICBleGl0ZWQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIW9wZW4gJiYgZXhpdGVkICYmICdoaWRkZW4nXSxcbiAgICBiYWNrZHJvcDogWydiYWNrZHJvcCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TW9kYWxVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IE1vZGFsUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpTW9kYWwnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgIW93bmVyU3RhdGUub3BlbiAmJiBvd25lclN0YXRlLmV4aXRlZCAmJiBzdHlsZXMuaGlkZGVuXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcG9zaXRpb246ICdmaXhlZCcsXG4gIHpJbmRleDogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnpJbmRleC5tb2RhbCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgdG9wOiAwLFxuICBsZWZ0OiAwXG59LCAhb3duZXJTdGF0ZS5vcGVuICYmIG93bmVyU3RhdGUuZXhpdGVkICYmIHtcbiAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbn0pKTtcbmNvbnN0IE1vZGFsQmFja2Ryb3AgPSBzdHlsZWQoQmFja2Ryb3AsIHtcbiAgbmFtZTogJ011aU1vZGFsJyxcbiAgc2xvdDogJ0JhY2tkcm9wJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgcmV0dXJuIHN0eWxlcy5iYWNrZHJvcDtcbiAgfVxufSkoe1xuICB6SW5kZXg6IC0xXG59KTtcblxuLyoqXG4gKiBNb2RhbCBpcyBhIGxvd2VyLWxldmVsIGNvbnN0cnVjdCB0aGF0IGlzIGxldmVyYWdlZCBieSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKlxuICogLSBbRGlhbG9nXSgvbWF0ZXJpYWwtdWkvYXBpL2RpYWxvZy8pXG4gKiAtIFtEcmF3ZXJdKC9tYXRlcmlhbC11aS9hcGkvZHJhd2VyLylcbiAqIC0gW01lbnVdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pXG4gKiAtIFtQb3BvdmVyXSgvbWF0ZXJpYWwtdWkvYXBpL3BvcG92ZXIvKVxuICpcbiAqIElmIHlvdSBhcmUgY3JlYXRpbmcgYSBtb2RhbCBkaWFsb2csIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUgW0RpYWxvZ10oL21hdGVyaWFsLXVpL2FwaS9kaWFsb2cvKSBjb21wb25lbnRcbiAqIHJhdGhlciB0aGFuIGRpcmVjdGx5IHVzaW5nIE1vZGFsLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHNoYXJlcyBtYW55IGNvbmNlcHRzIHdpdGggW3JlYWN0LW92ZXJsYXlzXShodHRwczovL3JlYWN0LWJvb3RzdHJhcC5naXRodWIuaW8vcmVhY3Qtb3ZlcmxheXMvI21vZGFscykuXG4gKi9cbmNvbnN0IE1vZGFsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTW9kYWwoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdHMkcm9vdCwgX3JlZjIsIF9zbG90cyRiYWNrZHJvcCwgX3Nsb3RQcm9wcyRyb290LCBfc2xvdFByb3BzJGJhY2tkcm9wO1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIG5hbWU6ICdNdWlNb2RhbCcsXG4gICAgcHJvcHM6IGluUHJvcHNcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIEJhY2tkcm9wQ29tcG9uZW50ID0gTW9kYWxCYWNrZHJvcCxcbiAgICAgIEJhY2tkcm9wUHJvcHMsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjbG9zZUFmdGVyVHJhbnNpdGlvbiA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb21wb25lbnQsXG4gICAgICBjb21wb25lbnRzID0ge30sXG4gICAgICBjb21wb25lbnRzUHJvcHMgPSB7fSxcbiAgICAgIGRpc2FibGVBdXRvRm9jdXMgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVFbmZvcmNlRm9jdXMgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVFc2NhcGVLZXlEb3duID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUG9ydGFsID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUmVzdG9yZUZvY3VzID0gZmFsc2UsXG4gICAgICBkaXNhYmxlU2Nyb2xsTG9jayA9IGZhbHNlLFxuICAgICAgaGlkZUJhY2tkcm9wID0gZmFsc2UsXG4gICAgICBrZWVwTW91bnRlZCA9IGZhbHNlLFxuICAgICAgb25CYWNrZHJvcENsaWNrLFxuICAgICAgb3BlbixcbiAgICAgIHNsb3RQcm9wcyxcbiAgICAgIHNsb3RzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBwcm9wc1dpdGhEZWZhdWx0cyA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uLFxuICAgIGRpc2FibGVBdXRvRm9jdXMsXG4gICAgZGlzYWJsZUVuZm9yY2VGb2N1cyxcbiAgICBkaXNhYmxlRXNjYXBlS2V5RG93bixcbiAgICBkaXNhYmxlUG9ydGFsLFxuICAgIGRpc2FibGVSZXN0b3JlRm9jdXMsXG4gICAgZGlzYWJsZVNjcm9sbExvY2ssXG4gICAgaGlkZUJhY2tkcm9wLFxuICAgIGtlZXBNb3VudGVkXG4gIH0pO1xuICBjb25zdCB7XG4gICAgZ2V0Um9vdFByb3BzLFxuICAgIGdldEJhY2tkcm9wUHJvcHMsXG4gICAgZ2V0VHJhbnNpdGlvblByb3BzLFxuICAgIHBvcnRhbFJlZixcbiAgICBpc1RvcE1vZGFsLFxuICAgIGV4aXRlZCxcbiAgICBoYXNUcmFuc2l0aW9uXG4gIH0gPSB1c2VNb2RhbChfZXh0ZW5kcyh7fSwgcHJvcHNXaXRoRGVmYXVsdHMsIHtcbiAgICByb290UmVmOiByZWZcbiAgfSkpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzV2l0aERlZmF1bHRzLCB7XG4gICAgZXhpdGVkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IGNoaWxkUHJvcHMgPSB7fTtcbiAgaWYgKGNoaWxkcmVuLnByb3BzLnRhYkluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICBjaGlsZFByb3BzLnRhYkluZGV4ID0gJy0xJztcbiAgfVxuXG4gIC8vIEl0J3MgYSBUcmFuc2l0aW9uIGxpa2UgY29tcG9uZW50XG4gIGlmIChoYXNUcmFuc2l0aW9uKSB7XG4gICAgY29uc3Qge1xuICAgICAgb25FbnRlcixcbiAgICAgIG9uRXhpdGVkXG4gICAgfSA9IGdldFRyYW5zaXRpb25Qcm9wcygpO1xuICAgIGNoaWxkUHJvcHMub25FbnRlciA9IG9uRW50ZXI7XG4gICAgY2hpbGRQcm9wcy5vbkV4aXRlZCA9IG9uRXhpdGVkO1xuICB9XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9yZWYgPSAoX3Nsb3RzJHJvb3QgPSBzbG90cyA9PSBudWxsID8gdm9pZCAwIDogc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6IE1vZGFsUm9vdDtcbiAgY29uc3QgQmFja2Ryb3BTbG90ID0gKF9yZWYyID0gKF9zbG90cyRiYWNrZHJvcCA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5iYWNrZHJvcCkgIT0gbnVsbCA/IF9zbG90cyRiYWNrZHJvcCA6IGNvbXBvbmVudHMuQmFja2Ryb3ApICE9IG51bGwgPyBfcmVmMiA6IEJhY2tkcm9wQ29tcG9uZW50O1xuICBjb25zdCByb290U2xvdFByb3BzID0gKF9zbG90UHJvcHMkcm9vdCA9IHNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogc2xvdFByb3BzLnJvb3QpICE9IG51bGwgPyBfc2xvdFByb3BzJHJvb3QgOiBjb21wb25lbnRzUHJvcHMucm9vdDtcbiAgY29uc3QgYmFja2Ryb3BTbG90UHJvcHMgPSAoX3Nsb3RQcm9wcyRiYWNrZHJvcCA9IHNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogc2xvdFByb3BzLmJhY2tkcm9wKSAhPSBudWxsID8gX3Nsb3RQcm9wcyRiYWNrZHJvcCA6IGNvbXBvbmVudHNQcm9wcy5iYWNrZHJvcDtcbiAgY29uc3Qgcm9vdFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogUm9vdFNsb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IHJvb3RTbG90UHJvcHMsXG4gICAgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wczogb3RoZXIsXG4gICAgZ2V0U2xvdFByb3BzOiBnZXRSb290UHJvcHMsXG4gICAgYWRkaXRpb25hbFByb3BzOiB7XG4gICAgICByZWYsXG4gICAgICBhczogY29tcG9uZW50XG4gICAgfSxcbiAgICBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc05hbWUsIHJvb3RTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHJvb3RTbG90UHJvcHMuY2xhc3NOYW1lLCBjbGFzc2VzID09IG51bGwgPyB2b2lkIDAgOiBjbGFzc2VzLnJvb3QsICFvd25lclN0YXRlLm9wZW4gJiYgb3duZXJTdGF0ZS5leGl0ZWQgJiYgKGNsYXNzZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsYXNzZXMuaGlkZGVuKSlcbiAgfSk7XG4gIGNvbnN0IGJhY2tkcm9wUHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBCYWNrZHJvcFNsb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IGJhY2tkcm9wU2xvdFByb3BzLFxuICAgIGFkZGl0aW9uYWxQcm9wczogQmFja2Ryb3BQcm9wcyxcbiAgICBnZXRTbG90UHJvcHM6IG90aGVySGFuZGxlcnMgPT4ge1xuICAgICAgcmV0dXJuIGdldEJhY2tkcm9wUHJvcHMoX2V4dGVuZHMoe30sIG90aGVySGFuZGxlcnMsIHtcbiAgICAgICAgb25DbGljazogZSA9PiB7XG4gICAgICAgICAgaWYgKG9uQmFja2Ryb3BDbGljaykge1xuICAgICAgICAgICAgb25CYWNrZHJvcENsaWNrKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3RoZXJIYW5kbGVycyAhPSBudWxsICYmIG90aGVySGFuZGxlcnMub25DbGljaykge1xuICAgICAgICAgICAgb3RoZXJIYW5kbGVycy5vbkNsaWNrKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0sXG4gICAgY2xhc3NOYW1lOiBjbHN4KGJhY2tkcm9wU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBiYWNrZHJvcFNsb3RQcm9wcy5jbGFzc05hbWUsIEJhY2tkcm9wUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IEJhY2tkcm9wUHJvcHMuY2xhc3NOYW1lLCBjbGFzc2VzID09IG51bGwgPyB2b2lkIDAgOiBjbGFzc2VzLmJhY2tkcm9wKSxcbiAgICBvd25lclN0YXRlXG4gIH0pO1xuICBpZiAoIWtlZXBNb3VudGVkICYmICFvcGVuICYmICghaGFzVHJhbnNpdGlvbiB8fCBleGl0ZWQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFBvcnRhbCwge1xuICAgIHJlZjogcG9ydGFsUmVmLFxuICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgIGRpc2FibGVQb3J0YWw6IGRpc2FibGVQb3J0YWwsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4cyhSb290U2xvdCwgX2V4dGVuZHMoe30sIHJvb3RQcm9wcywge1xuICAgICAgY2hpbGRyZW46IFshaGlkZUJhY2tkcm9wICYmIEJhY2tkcm9wQ29tcG9uZW50ID8gLyojX19QVVJFX18qL19qc3goQmFja2Ryb3BTbG90LCBfZXh0ZW5kcyh7fSwgYmFja2Ryb3BQcm9wcykpIDogbnVsbCwgLyojX19QVVJFX18qL19qc3goRm9jdXNUcmFwLCB7XG4gICAgICAgIGRpc2FibGVFbmZvcmNlRm9jdXM6IGRpc2FibGVFbmZvcmNlRm9jdXMsXG4gICAgICAgIGRpc2FibGVBdXRvRm9jdXM6IGRpc2FibGVBdXRvRm9jdXMsXG4gICAgICAgIGRpc2FibGVSZXN0b3JlRm9jdXM6IGRpc2FibGVSZXN0b3JlRm9jdXMsXG4gICAgICAgIGlzRW5hYmxlZDogaXNUb3BNb2RhbCxcbiAgICAgICAgb3Blbjogb3BlbixcbiAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIGNoaWxkUHJvcHMpXG4gICAgICB9KV1cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE1vZGFsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIEEgYmFja2Ryb3AgY29tcG9uZW50LiBUaGlzIHByb3AgZW5hYmxlcyBjdXN0b20gYmFja2Ryb3AgcmVuZGVyaW5nLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNsb3RzLmJhY2tkcm9wYCBpbnN0ZWFkLiBXaGlsZSB0aGlzIHByb3AgY3VycmVudGx5IHdvcmtzLCBpdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi5cbiAgICogVXNlIHRoZSBgc2xvdHMuYmFja2Ryb3BgIHByb3AgdG8gbWFrZSB5b3VyIGFwcGxpY2F0aW9uIHJlYWR5IGZvciB0aGUgbmV4dCB2ZXJzaW9uIG9mIE1hdGVyaWFsIFVJLlxuICAgKiBAZGVmYXVsdCBzdHlsZWQoQmFja2Ryb3AsIHtcbiAgICogICBuYW1lOiAnTXVpTW9kYWwnLFxuICAgKiAgIHNsb3Q6ICdCYWNrZHJvcCcsXG4gICAqICAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAqICAgICByZXR1cm4gc3R5bGVzLmJhY2tkcm9wO1xuICAgKiAgIH0sXG4gICAqIH0pKHtcbiAgICogICB6SW5kZXg6IC0xLFxuICAgKiB9KVxuICAgKi9cbiAgQmFja2Ryb3BDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgQmFja2Ryb3BgXSgvbWF0ZXJpYWwtdWkvYXBpL2JhY2tkcm9wLykgZWxlbWVudC5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzbG90UHJvcHMuYmFja2Ryb3BgIGluc3RlYWQuXG4gICAqL1xuICBCYWNrZHJvcFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQSBzaW5nbGUgY2hpbGQgY29udGVudCBlbGVtZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IGVsZW1lbnRBY2NlcHRpbmdSZWYuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byB0cnVlIHRoZSBNb2RhbCB3YWl0cyB1bnRpbCBhIG5lc3RlZCBUcmFuc2l0aW9uIGlzIGNvbXBsZXRlZCBiZWZvcmUgY2xvc2luZy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIEJhY2tkcm9wOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90UHJvcHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdFByb3BzYCBwcm9wIGluc3RlYWQsIGFzIGBjb21wb25lbnRzUHJvcHNgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJhY2tkcm9wOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQgb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZS5cbiAgICogVGhlIGBjb250YWluZXJgIHdpbGwgaGF2ZSB0aGUgcG9ydGFsIGNoaWxkcmVuIGFwcGVuZGVkIHRvIGl0LlxuICAgKlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIGNhbGxiYWNrLCB3aGljaCBpcyBjYWxsZWQgaW4gYSBSZWFjdCBsYXlvdXQgZWZmZWN0LlxuICAgKiBUaGlzIGxldHMgeW91IHNldCB0aGUgY29udGFpbmVyIGZyb20gYSByZWYsIGFuZCBhbHNvIG1ha2VzIHNlcnZlci1zaWRlIHJlbmRlcmluZyBwb3NzaWJsZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBub3QgYXV0b21hdGljYWxseSBzaGlmdCBmb2N1cyB0byBpdHNlbGYgd2hlbiBpdCBvcGVucywgYW5kXG4gICAqIHJlcGxhY2UgaXQgdG8gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50IHdoZW4gaXQgY2xvc2VzLlxuICAgKiBUaGlzIGFsc28gd29ya3MgY29ycmVjdGx5IHdpdGggYW55IG1vZGFsIGNoaWxkcmVuIHRoYXQgaGF2ZSB0aGUgYGRpc2FibGVBdXRvRm9jdXNgIHByb3AuXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSBtb2RhbCBsZXNzXG4gICAqIGFjY2Vzc2libGUgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgbGlrZSBzY3JlZW4gcmVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBub3QgcHJldmVudCBmb2N1cyBmcm9tIGxlYXZpbmcgdGhlIG1vZGFsIHdoaWxlIG9wZW4uXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSBtb2RhbCBsZXNzXG4gICAqIGFjY2Vzc2libGUgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgbGlrZSBzY3JlZW4gcmVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFbmZvcmNlRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBoaXR0aW5nIGVzY2FwZSB3aWxsIG5vdCBmaXJlIHRoZSBgb25DbG9zZWAgY2FsbGJhY2suXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRXNjYXBlS2V5RG93bjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgYGNoaWxkcmVuYCB3aWxsIGJlIHVuZGVyIHRoZSBET00gaGllcmFyY2h5IG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBvcnRhbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCByZXN0b3JlIGZvY3VzIHRvIHByZXZpb3VzbHkgZm9jdXNlZCBlbGVtZW50IG9uY2VcbiAgICogbW9kYWwgaXMgaGlkZGVuIG9yIHVubW91bnRlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSZXN0b3JlRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRGlzYWJsZSB0aGUgc2Nyb2xsIGxvY2sgYmVoYXZpb3IuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlU2Nyb2xsTG9jazogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYWNrZHJvcCBpcyBub3QgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRlQmFja2Ryb3A6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQWx3YXlzIGtlZXAgdGhlIGNoaWxkcmVuIGluIHRoZSBET00uXG4gICAqIFRoaXMgcHJvcCBjYW4gYmUgdXNlZnVsIGluIFNFTyBzaXR1YXRpb24gb3JcbiAgICogd2hlbiB5b3Ugd2FudCB0byBtYXhpbWl6ZSB0aGUgcmVzcG9uc2l2ZW5lc3Mgb2YgdGhlIE1vZGFsLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAga2VlcE1vdW50ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgYmFja2Ryb3AgaXMgY2xpY2tlZC5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBgb25DbG9zZWAgcHJvcCB3aXRoIHRoZSBgcmVhc29uYCBhcmd1bWVudCB0byBoYW5kbGUgdGhlIGBiYWNrZHJvcENsaWNrYCBldmVudHMuXG4gICAqL1xuICBvbkJhY2tkcm9wQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVGhlIGByZWFzb25gIHBhcmFtZXRlciBjYW4gb3B0aW9uYWxseSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHJlc3BvbnNlIHRvIGBvbkNsb3NlYC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIENhbiBiZTogYFwiZXNjYXBlS2V5RG93blwiYCwgYFwiYmFja2Ryb3BDbGlja1wiYC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQSBmdW5jdGlvbiBjYWxsZWQgd2hlbiBhIHRyYW5zaXRpb24gZW50ZXJzLlxuICAgKi9cbiAgb25UcmFuc2l0aW9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQSBmdW5jdGlvbiBjYWxsZWQgd2hlbiBhIHRyYW5zaXRpb24gaGFzIGV4aXRlZC5cbiAgICovXG4gIG9uVHJhbnNpdGlvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIE1vZGFsLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJhY2tkcm9wOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBNb2RhbC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJhY2tkcm9wOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTW9kYWw7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcG92ZXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVBvcG92ZXInLCBzbG90KTtcbn1cbmNvbnN0IHBvcG92ZXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpUG9wb3ZlcicsIFsncm9vdCcsICdwYXBlciddKTtcbmV4cG9ydCBkZWZhdWx0IHBvcG92ZXJDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm9uRW50ZXJpbmdcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJhY3Rpb25cIiwgXCJhbmNob3JFbFwiLCBcImFuY2hvck9yaWdpblwiLCBcImFuY2hvclBvc2l0aW9uXCIsIFwiYW5jaG9yUmVmZXJlbmNlXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb250YWluZXJcIiwgXCJlbGV2YXRpb25cIiwgXCJtYXJnaW5UaHJlc2hvbGRcIiwgXCJvcGVuXCIsIFwiUGFwZXJQcm9wc1wiLCBcInNsb3RzXCIsIFwic2xvdFByb3BzXCIsIFwidHJhbnNmb3JtT3JpZ2luXCIsIFwiVHJhbnNpdGlvbkNvbXBvbmVudFwiLCBcInRyYW5zaXRpb25EdXJhdGlvblwiLCBcIlRyYW5zaXRpb25Qcm9wc1wiLCBcImRpc2FibGVTY3JvbGxMb2NrXCJdLFxuICBfZXhjbHVkZWQzID0gW1wic2xvdFByb3BzXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMsIHVzZVNsb3RQcm9wcywgaXNIb3N0Q29tcG9uZW50IH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IGNoYWluUHJvcFR5cGVzLCBpbnRlZ2VyUHJvcFR5cGUsIGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmLCByZWZUeXBlLCBIVE1MRWxlbWVudFR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSAnLi4vdXRpbHMvZGVib3VuY2UnO1xuaW1wb3J0IG93bmVyRG9jdW1lbnQgZnJvbSAnLi4vdXRpbHMvb3duZXJEb2N1bWVudCc7XG5pbXBvcnQgb3duZXJXaW5kb3cgZnJvbSAnLi4vdXRpbHMvb3duZXJXaW5kb3cnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgR3JvdyBmcm9tICcuLi9Hcm93JztcbmltcG9ydCBNb2RhbCBmcm9tICcuLi9Nb2RhbCc7XG5pbXBvcnQgUGFwZXJCYXNlIGZyb20gJy4uL1BhcGVyJztcbmltcG9ydCB7IGdldFBvcG92ZXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3BvcG92ZXJDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZnVuY3Rpb24gZ2V0T2Zmc2V0VG9wKHJlY3QsIHZlcnRpY2FsKSB7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBpZiAodHlwZW9mIHZlcnRpY2FsID09PSAnbnVtYmVyJykge1xuICAgIG9mZnNldCA9IHZlcnRpY2FsO1xuICB9IGVsc2UgaWYgKHZlcnRpY2FsID09PSAnY2VudGVyJykge1xuICAgIG9mZnNldCA9IHJlY3QuaGVpZ2h0IC8gMjtcbiAgfSBlbHNlIGlmICh2ZXJ0aWNhbCA9PT0gJ2JvdHRvbScpIHtcbiAgICBvZmZzZXQgPSByZWN0LmhlaWdodDtcbiAgfVxuICByZXR1cm4gb2Zmc2V0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE9mZnNldExlZnQocmVjdCwgaG9yaXpvbnRhbCkge1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgaWYgKHR5cGVvZiBob3Jpem9udGFsID09PSAnbnVtYmVyJykge1xuICAgIG9mZnNldCA9IGhvcml6b250YWw7XG4gIH0gZWxzZSBpZiAoaG9yaXpvbnRhbCA9PT0gJ2NlbnRlcicpIHtcbiAgICBvZmZzZXQgPSByZWN0LndpZHRoIC8gMjtcbiAgfSBlbHNlIGlmIChob3Jpem9udGFsID09PSAncmlnaHQnKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC53aWR0aDtcbiAgfVxuICByZXR1cm4gb2Zmc2V0O1xufVxuZnVuY3Rpb24gZ2V0VHJhbnNmb3JtT3JpZ2luVmFsdWUodHJhbnNmb3JtT3JpZ2luKSB7XG4gIHJldHVybiBbdHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwsIHRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbF0ubWFwKG4gPT4gdHlwZW9mIG4gPT09ICdudW1iZXInID8gYCR7bn1weGAgOiBuKS5qb2luKCcgJyk7XG59XG5mdW5jdGlvbiByZXNvbHZlQW5jaG9yRWwoYW5jaG9yRWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBhbmNob3JFbCA9PT0gJ2Z1bmN0aW9uJyA/IGFuY2hvckVsKCkgOiBhbmNob3JFbDtcbn1cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBwYXBlcjogWydwYXBlciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0UG9wb3ZlclV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IFBvcG92ZXJSb290ID0gc3R5bGVkKE1vZGFsLCB7XG4gIG5hbWU6ICdNdWlQb3BvdmVyJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7fSk7XG5leHBvcnQgY29uc3QgUG9wb3ZlclBhcGVyID0gc3R5bGVkKFBhcGVyQmFzZSwge1xuICBuYW1lOiAnTXVpUG9wb3ZlcicsXG4gIHNsb3Q6ICdQYXBlcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnBhcGVyXG59KSh7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgb3ZlcmZsb3dYOiAnaGlkZGVuJyxcbiAgLy8gU28gd2Ugc2VlIHRoZSBwb3BvdmVyIHdoZW4gaXQncyBlbXB0eS5cbiAgLy8gSXQncyBtb3N0IGxpa2VseSBvbiBpc3N1ZSBvbiB1c2VybGFuZC5cbiAgbWluV2lkdGg6IDE2LFxuICBtaW5IZWlnaHQ6IDE2LFxuICBtYXhXaWR0aDogJ2NhbGMoMTAwJSAtIDMycHgpJyxcbiAgbWF4SGVpZ2h0OiAnY2FsYygxMDAlIC0gMzJweCknLFxuICAvLyBXZSBkaXNhYmxlIHRoZSBmb2N1cyByaW5nIGZvciBtb3VzZSwgdG91Y2ggYW5kIGtleWJvYXJkIHVzZXJzLlxuICBvdXRsaW5lOiAwXG59KTtcbmNvbnN0IFBvcG92ZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBQb3BvdmVyKGluUHJvcHMsIHJlZikge1xuICB2YXIgX3Nsb3RQcm9wcyRwYXBlciwgX3Nsb3RzJHJvb3QsIF9zbG90cyRwYXBlcjtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpUG9wb3ZlcidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGFuY2hvckVsLFxuICAgICAgYW5jaG9yT3JpZ2luID0ge1xuICAgICAgICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAgICAgIGhvcml6b250YWw6ICdsZWZ0J1xuICAgICAgfSxcbiAgICAgIGFuY2hvclBvc2l0aW9uLFxuICAgICAgYW5jaG9yUmVmZXJlbmNlID0gJ2FuY2hvckVsJyxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXJQcm9wLFxuICAgICAgZWxldmF0aW9uID0gOCxcbiAgICAgIG1hcmdpblRocmVzaG9sZCA9IDE2LFxuICAgICAgb3BlbixcbiAgICAgIFBhcGVyUHJvcHM6IFBhcGVyUHJvcHNQcm9wID0ge30sXG4gICAgICBzbG90cyxcbiAgICAgIHNsb3RQcm9wcyxcbiAgICAgIHRyYW5zZm9ybU9yaWdpbiA9IHtcbiAgICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgICBob3Jpem9udGFsOiAnbGVmdCdcbiAgICAgIH0sXG4gICAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gR3JvdyxcbiAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uUHJvcCA9ICdhdXRvJyxcbiAgICAgIFRyYW5zaXRpb25Qcm9wczoge1xuICAgICAgICBvbkVudGVyaW5nXG4gICAgICB9ID0ge30sXG4gICAgICBkaXNhYmxlU2Nyb2xsTG9jayA9IGZhbHNlXG4gICAgfSA9IHByb3BzLFxuICAgIFRyYW5zaXRpb25Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLlRyYW5zaXRpb25Qcm9wcywgX2V4Y2x1ZGVkKSxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQyKTtcbiAgY29uc3QgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcyA9IChfc2xvdFByb3BzJHBhcGVyID0gc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMucGFwZXIpICE9IG51bGwgPyBfc2xvdFByb3BzJHBhcGVyIDogUGFwZXJQcm9wc1Byb3A7XG4gIGNvbnN0IHBhcGVyUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGhhbmRsZVBhcGVyUmVmID0gdXNlRm9ya1JlZihwYXBlclJlZiwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcy5yZWYpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYW5jaG9yT3JpZ2luLFxuICAgIGFuY2hvclJlZmVyZW5jZSxcbiAgICBlbGV2YXRpb24sXG4gICAgbWFyZ2luVGhyZXNob2xkLFxuICAgIGV4dGVybmFsUGFwZXJTbG90UHJvcHMsXG4gICAgdHJhbnNmb3JtT3JpZ2luLFxuICAgIFRyYW5zaXRpb25Db21wb25lbnQsXG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb25Qcm9wLFxuICAgIFRyYW5zaXRpb25Qcm9wc1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuXG4gIC8vIFJldHVybnMgdGhlIHRvcC9sZWZ0IG9mZnNldCBvZiB0aGUgcG9zaXRpb25cbiAgLy8gdG8gYXR0YWNoIHRvIG9uIHRoZSBhbmNob3IgZWxlbWVudCAob3IgYm9keSBpZiBub25lIGlzIHByb3ZpZGVkKVxuICBjb25zdCBnZXRBbmNob3JPZmZzZXQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGFuY2hvclJlZmVyZW5jZSA9PT0gJ2FuY2hvclBvc2l0aW9uJykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFhbmNob3JQb3NpdGlvbikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogWW91IG5lZWQgdG8gcHJvdmlkZSBhIGBhbmNob3JQb3NpdGlvbmAgcHJvcCB3aGVuIHVzaW5nICcgKyAnPFBvcG92ZXIgYW5jaG9yUmVmZXJlbmNlPVwiYW5jaG9yUG9zaXRpb25cIiAvPi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFuY2hvclBvc2l0aW9uO1xuICAgIH1cbiAgICBjb25zdCByZXNvbHZlZEFuY2hvckVsID0gcmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKTtcblxuICAgIC8vIElmIGFuIGFuY2hvciBlbGVtZW50IHdhc24ndCBwcm92aWRlZCwganVzdCB1c2UgdGhlIHBhcmVudCBib2R5IGVsZW1lbnQgb2YgdGhpcyBQb3BvdmVyXG4gICAgY29uc3QgYW5jaG9yRWxlbWVudCA9IHJlc29sdmVkQW5jaG9yRWwgJiYgcmVzb2x2ZWRBbmNob3JFbC5ub2RlVHlwZSA9PT0gMSA/IHJlc29sdmVkQW5jaG9yRWwgOiBvd25lckRvY3VtZW50KHBhcGVyUmVmLmN1cnJlbnQpLmJvZHk7XG4gICAgY29uc3QgYW5jaG9yUmVjdCA9IGFuY2hvckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGJveCA9IGFuY2hvckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJiBib3gudG9wID09PSAwICYmIGJveC5sZWZ0ID09PSAwICYmIGJveC5yaWdodCA9PT0gMCAmJiBib3guYm90dG9tID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgJ1RoZSBhbmNob3IgZWxlbWVudCBzaG91bGQgYmUgcGFydCBvZiB0aGUgZG9jdW1lbnQgbGF5b3V0LicsIFwiTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHByZXNlbnQgaW4gdGhlIGRvY3VtZW50IG9yIHRoYXQgaXQncyBub3QgZGlzcGxheSBub25lLlwiXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0b3A6IGFuY2hvclJlY3QudG9wICsgZ2V0T2Zmc2V0VG9wKGFuY2hvclJlY3QsIGFuY2hvck9yaWdpbi52ZXJ0aWNhbCksXG4gICAgICBsZWZ0OiBhbmNob3JSZWN0LmxlZnQgKyBnZXRPZmZzZXRMZWZ0KGFuY2hvclJlY3QsIGFuY2hvck9yaWdpbi5ob3Jpem9udGFsKVxuICAgIH07XG4gIH0sIFthbmNob3JFbCwgYW5jaG9yT3JpZ2luLmhvcml6b250YWwsIGFuY2hvck9yaWdpbi52ZXJ0aWNhbCwgYW5jaG9yUG9zaXRpb24sIGFuY2hvclJlZmVyZW5jZV0pO1xuXG4gIC8vIFJldHVybnMgdGhlIGJhc2UgdHJhbnNmb3JtIG9yaWdpbiB1c2luZyB0aGUgZWxlbWVudFxuICBjb25zdCBnZXRUcmFuc2Zvcm1PcmlnaW4gPSBSZWFjdC51c2VDYWxsYmFjayhlbGVtUmVjdCA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnRpY2FsOiBnZXRPZmZzZXRUb3AoZWxlbVJlY3QsIHRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbCksXG4gICAgICBob3Jpem9udGFsOiBnZXRPZmZzZXRMZWZ0KGVsZW1SZWN0LCB0cmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbClcbiAgICB9O1xuICB9LCBbdHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwsIHRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbF0pO1xuICBjb25zdCBnZXRQb3NpdGlvbmluZ1N0eWxlID0gUmVhY3QudXNlQ2FsbGJhY2soZWxlbWVudCA9PiB7XG4gICAgY29uc3QgZWxlbVJlY3QgPSB7XG4gICAgICB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICAgIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHRcbiAgICB9O1xuXG4gICAgLy8gR2V0IHRoZSB0cmFuc2Zvcm0gb3JpZ2luIHBvaW50IG9uIHRoZSBlbGVtZW50IGl0c2VsZlxuICAgIGNvbnN0IGVsZW1UcmFuc2Zvcm1PcmlnaW4gPSBnZXRUcmFuc2Zvcm1PcmlnaW4oZWxlbVJlY3QpO1xuICAgIGlmIChhbmNob3JSZWZlcmVuY2UgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiBudWxsLFxuICAgICAgICBsZWZ0OiBudWxsLFxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW46IGdldFRyYW5zZm9ybU9yaWdpblZhbHVlKGVsZW1UcmFuc2Zvcm1PcmlnaW4pXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgb2Zmc2V0IG9mIHRoZSBhbmNob3JpbmcgZWxlbWVudFxuICAgIGNvbnN0IGFuY2hvck9mZnNldCA9IGdldEFuY2hvck9mZnNldCgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGVsZW1lbnQgcG9zaXRpb25pbmdcbiAgICBsZXQgdG9wID0gYW5jaG9yT2Zmc2V0LnRvcCAtIGVsZW1UcmFuc2Zvcm1PcmlnaW4udmVydGljYWw7XG4gICAgbGV0IGxlZnQgPSBhbmNob3JPZmZzZXQubGVmdCAtIGVsZW1UcmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbDtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBlbGVtUmVjdC5oZWlnaHQ7XG4gICAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgZWxlbVJlY3Qud2lkdGg7XG5cbiAgICAvLyBVc2UgdGhlIHBhcmVudCB3aW5kb3cgb2YgdGhlIGFuY2hvckVsIGlmIHByb3ZpZGVkXG4gICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3cocmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSk7XG5cbiAgICAvLyBXaW5kb3cgdGhyZXNob2xkcyB0YWtpbmcgcmVxdWlyZWQgbWFyZ2luIGludG8gYWNjb3VudFxuICAgIGNvbnN0IGhlaWdodFRocmVzaG9sZCA9IGNvbnRhaW5lcldpbmRvdy5pbm5lckhlaWdodCAtIG1hcmdpblRocmVzaG9sZDtcbiAgICBjb25zdCB3aWR0aFRocmVzaG9sZCA9IGNvbnRhaW5lcldpbmRvdy5pbm5lcldpZHRoIC0gbWFyZ2luVGhyZXNob2xkO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHZlcnRpY2FsIGF4aXMgbmVlZHMgc2hpZnRpbmdcbiAgICBpZiAobWFyZ2luVGhyZXNob2xkICE9PSBudWxsICYmIHRvcCA8IG1hcmdpblRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IHRvcCAtIG1hcmdpblRocmVzaG9sZDtcbiAgICAgIHRvcCAtPSBkaWZmO1xuICAgICAgZWxlbVRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbCArPSBkaWZmO1xuICAgIH0gZWxzZSBpZiAobWFyZ2luVGhyZXNob2xkICE9PSBudWxsICYmIGJvdHRvbSA+IGhlaWdodFRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IGJvdHRvbSAtIGhlaWdodFRocmVzaG9sZDtcbiAgICAgIHRvcCAtPSBkaWZmO1xuICAgICAgZWxlbVRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbCArPSBkaWZmO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGVsZW1SZWN0LmhlaWdodCA+IGhlaWdodFRocmVzaG9sZCAmJiBlbGVtUmVjdC5oZWlnaHQgJiYgaGVpZ2h0VGhyZXNob2xkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBwb3BvdmVyIGNvbXBvbmVudCBpcyB0b28gdGFsbC4nLCBgU29tZSBwYXJ0IG9mIGl0IGNhbiBub3QgYmUgc2VlbiBvbiB0aGUgc2NyZWVuICgke2VsZW1SZWN0LmhlaWdodCAtIGhlaWdodFRocmVzaG9sZH1weCkuYCwgJ1BsZWFzZSBjb25zaWRlciBhZGRpbmcgYSBgbWF4LWhlaWdodGAgdG8gaW1wcm92ZSB0aGUgdXNlci1leHBlcmllbmNlLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgaG9yaXpvbnRhbCBheGlzIG5lZWRzIHNoaWZ0aW5nXG4gICAgaWYgKG1hcmdpblRocmVzaG9sZCAhPT0gbnVsbCAmJiBsZWZ0IDwgbWFyZ2luVGhyZXNob2xkKSB7XG4gICAgICBjb25zdCBkaWZmID0gbGVmdCAtIG1hcmdpblRocmVzaG9sZDtcbiAgICAgIGxlZnQgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbCArPSBkaWZmO1xuICAgIH0gZWxzZSBpZiAocmlnaHQgPiB3aWR0aFRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IHJpZ2h0IC0gd2lkdGhUaHJlc2hvbGQ7XG4gICAgICBsZWZ0IC09IGRpZmY7XG4gICAgICBlbGVtVHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwgKz0gZGlmZjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogYCR7TWF0aC5yb3VuZCh0b3ApfXB4YCxcbiAgICAgIGxlZnQ6IGAke01hdGgucm91bmQobGVmdCl9cHhgLFxuICAgICAgdHJhbnNmb3JtT3JpZ2luOiBnZXRUcmFuc2Zvcm1PcmlnaW5WYWx1ZShlbGVtVHJhbnNmb3JtT3JpZ2luKVxuICAgIH07XG4gIH0sIFthbmNob3JFbCwgYW5jaG9yUmVmZXJlbmNlLCBnZXRBbmNob3JPZmZzZXQsIGdldFRyYW5zZm9ybU9yaWdpbiwgbWFyZ2luVGhyZXNob2xkXSk7XG4gIGNvbnN0IFtpc1Bvc2l0aW9uZWQsIHNldElzUG9zaXRpb25lZF0gPSBSZWFjdC51c2VTdGF0ZShvcGVuKTtcbiAgY29uc3Qgc2V0UG9zaXRpb25pbmdTdHlsZXMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IHBhcGVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBvc2l0aW9uaW5nID0gZ2V0UG9zaXRpb25pbmdTdHlsZShlbGVtZW50KTtcbiAgICBpZiAocG9zaXRpb25pbmcudG9wICE9PSBudWxsKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IHBvc2l0aW9uaW5nLnRvcDtcbiAgICB9XG4gICAgaWYgKHBvc2l0aW9uaW5nLmxlZnQgIT09IG51bGwpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IHBvc2l0aW9uaW5nLmxlZnQ7XG4gICAgfVxuICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gcG9zaXRpb25pbmcudHJhbnNmb3JtT3JpZ2luO1xuICAgIHNldElzUG9zaXRpb25lZCh0cnVlKTtcbiAgfSwgW2dldFBvc2l0aW9uaW5nU3R5bGVdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZVNjcm9sbExvY2spIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzZXRQb3NpdGlvbmluZ1N0eWxlcyk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2V0UG9zaXRpb25pbmdTdHlsZXMpO1xuICB9LCBbYW5jaG9yRWwsIGRpc2FibGVTY3JvbGxMb2NrLCBzZXRQb3NpdGlvbmluZ1N0eWxlc10pO1xuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IChlbGVtZW50LCBpc0FwcGVhcmluZykgPT4ge1xuICAgIGlmIChvbkVudGVyaW5nKSB7XG4gICAgICBvbkVudGVyaW5nKGVsZW1lbnQsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gICAgc2V0UG9zaXRpb25pbmdTdHlsZXMoKTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gKCkgPT4ge1xuICAgIHNldElzUG9zaXRpb25lZChmYWxzZSk7XG4gIH07XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gICAgfVxuICB9KTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb24sICgpID0+IG9wZW4gPyB7XG4gICAgdXBkYXRlUG9zaXRpb246ICgpID0+IHtcbiAgICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gICAgfVxuICB9IDogbnVsbCwgW29wZW4sIHNldFBvc2l0aW9uaW5nU3R5bGVzXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBoYW5kbGVSZXNpemUgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICBzZXRQb3NpdGlvbmluZ1N0eWxlcygpO1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpbmRvdyA9IG93bmVyV2luZG93KGFuY2hvckVsKTtcbiAgICBjb250YWluZXJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaGFuZGxlUmVzaXplLmNsZWFyKCk7XG4gICAgICBjb250YWluZXJXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICB9O1xuICB9LCBbYW5jaG9yRWwsIG9wZW4sIHNldFBvc2l0aW9uaW5nU3R5bGVzXSk7XG4gIGxldCB0cmFuc2l0aW9uRHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb25Qcm9wO1xuICBpZiAodHJhbnNpdGlvbkR1cmF0aW9uUHJvcCA9PT0gJ2F1dG8nICYmICFUcmFuc2l0aW9uQ29tcG9uZW50Lm11aVN1cHBvcnRBdXRvKSB7XG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gSWYgdGhlIGNvbnRhaW5lciBwcm9wIGlzIHByb3ZpZGVkLCB1c2UgdGhhdFxuICAvLyBJZiB0aGUgYW5jaG9yRWwgcHJvcCBpcyBwcm92aWRlZCwgdXNlIGl0cyBwYXJlbnQgYm9keSBlbGVtZW50IGFzIHRoZSBjb250YWluZXJcbiAgLy8gSWYgbmVpdGhlciBhcmUgcHJvdmlkZWQgbGV0IHRoZSBNb2RhbCB0YWtlIGNhcmUgb2YgY2hvb3NpbmcgdGhlIGNvbnRhaW5lclxuICBjb25zdCBjb250YWluZXIgPSBjb250YWluZXJQcm9wIHx8IChhbmNob3JFbCA/IG93bmVyRG9jdW1lbnQocmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSkuYm9keSA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9zbG90cyRyb290ID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IFBvcG92ZXJSb290O1xuICBjb25zdCBQYXBlclNsb3QgPSAoX3Nsb3RzJHBhcGVyID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RzJHBhcGVyIDogUG9wb3ZlclBhcGVyO1xuICBjb25zdCBwYXBlclByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogUGFwZXJTbG90LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBfZXh0ZW5kcyh7fSwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcywge1xuICAgICAgc3R5bGU6IGlzUG9zaXRpb25lZCA/IGV4dGVybmFsUGFwZXJTbG90UHJvcHMuc3R5bGUgOiBfZXh0ZW5kcyh7fSwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcy5zdHlsZSwge1xuICAgICAgICBvcGFjaXR5OiAwXG4gICAgICB9KVxuICAgIH0pLFxuICAgIGFkZGl0aW9uYWxQcm9wczoge1xuICAgICAgZWxldmF0aW9uLFxuICAgICAgcmVmOiBoYW5kbGVQYXBlclJlZlxuICAgIH0sXG4gICAgb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5wYXBlciwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxQYXBlclNsb3RQcm9wcy5jbGFzc05hbWUpXG4gIH0pO1xuICBjb25zdCBfdXNlU2xvdFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICAgIGVsZW1lbnRUeXBlOiBSb290U2xvdCxcbiAgICAgIGV4dGVybmFsU2xvdFByb3BzOiAoc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMucm9vdCkgfHwge30sXG4gICAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiBvdGhlcixcbiAgICAgIGFkZGl0aW9uYWxQcm9wczoge1xuICAgICAgICByZWYsXG4gICAgICAgIHNsb3RQcm9wczoge1xuICAgICAgICAgIGJhY2tkcm9wOiB7XG4gICAgICAgICAgICBpbnZpc2libGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgb3BlblxuICAgICAgfSxcbiAgICAgIG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gICAgfSksXG4gICAge1xuICAgICAgc2xvdFByb3BzOiByb290U2xvdFByb3BzUHJvcFxuICAgIH0gPSBfdXNlU2xvdFByb3BzLFxuICAgIHJvb3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF91c2VTbG90UHJvcHMsIF9leGNsdWRlZDMpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUm9vdFNsb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsICFpc0hvc3RDb21wb25lbnQoUm9vdFNsb3QpICYmIHtcbiAgICBzbG90UHJvcHM6IHJvb3RTbG90UHJvcHNQcm9wLFxuICAgIGRpc2FibGVTY3JvbGxMb2NrXG4gIH0sIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgYXBwZWFyOiB0cnVlLFxuICAgICAgaW46IG9wZW4sXG4gICAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZyxcbiAgICAgIG9uRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgICB0aW1lb3V0OiB0cmFuc2l0aW9uRHVyYXRpb25cbiAgICB9LCBUcmFuc2l0aW9uUHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChQYXBlclNsb3QsIF9leHRlbmRzKHt9LCBwYXBlclByb3BzLCB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgfSkpXG4gICAgfSkpXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUG9wb3Zlci5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBBIHJlZiBmb3IgaW1wZXJhdGl2ZSBhY3Rpb25zLlxuICAgKiBJdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyB1cGRhdGVQb3NpdGlvbigpIGFjdGlvbi5cbiAgICovXG4gIGFjdGlvbjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgW1BvcG92ZXJWaXJ0dWFsRWxlbWVudF0oL21hdGVyaWFsLXVpL3JlYWN0LXBvcG92ZXIvI3ZpcnR1YWwtZWxlbWVudCksXG4gICAqIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGVpdGhlci5cbiAgICogSXQncyB1c2VkIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqL1xuICBhbmNob3JFbDogY2hhaW5Qcm9wVHlwZXMoUHJvcFR5cGVzLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLCBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzLm9wZW4gJiYgKCFwcm9wcy5hbmNob3JSZWZlcmVuY2UgfHwgcHJvcHMuYW5jaG9yUmVmZXJlbmNlID09PSAnYW5jaG9yRWwnKSkge1xuICAgICAgY29uc3QgcmVzb2x2ZWRBbmNob3JFbCA9IHJlc29sdmVBbmNob3JFbChwcm9wcy5hbmNob3JFbCk7XG4gICAgICBpZiAocmVzb2x2ZWRBbmNob3JFbCAmJiByZXNvbHZlZEFuY2hvckVsLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgIGNvbnN0IGJveCA9IHJlc29sdmVkQW5jaG9yRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmIGJveC50b3AgPT09IDAgJiYgYm94LmxlZnQgPT09IDAgJiYgYm94LnJpZ2h0ID09PSAwICYmIGJveC5ib3R0b20gPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFsnTVVJOiBUaGUgYGFuY2hvckVsYCBwcm9wIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQgaXMgaW52YWxpZC4nLCAnVGhlIGFuY2hvciBlbGVtZW50IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBsYXlvdXQuJywgXCJNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgcHJlc2VudCBpbiB0aGUgZG9jdW1lbnQgb3IgdGhhdCBpdCdzIG5vdCBkaXNwbGF5IG5vbmUuXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgYEl0IHNob3VsZCBiZSBhbiBFbGVtZW50IG9yIFBvcG92ZXJWaXJ0dWFsRWxlbWVudCBpbnN0YW5jZSBidXQgaXQncyBcXGAke3Jlc29sdmVkQW5jaG9yRWx9XFxgIGluc3RlYWQuYF0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBwb2ludCBvbiB0aGUgYW5jaG9yIHdoZXJlIHRoZSBwb3BvdmVyJ3NcbiAgICogYGFuY2hvckVsYCB3aWxsIGF0dGFjaCB0by4gVGhpcyBpcyBub3QgdXNlZCB3aGVuIHRoZVxuICAgKiBhbmNob3JSZWZlcmVuY2UgaXMgJ2FuY2hvclBvc2l0aW9uJy5cbiAgICpcbiAgICogT3B0aW9uczpcbiAgICogdmVydGljYWw6IFt0b3AsIGNlbnRlciwgYm90dG9tXTtcbiAgICogaG9yaXpvbnRhbDogW2xlZnQsIGNlbnRlciwgcmlnaHRdLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgdmVydGljYWw6ICd0b3AnLFxuICAgKiAgIGhvcml6b250YWw6ICdsZWZ0JyxcbiAgICogfVxuICAgKi9cbiAgYW5jaG9yT3JpZ2luOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhvcml6b250YWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdsZWZ0JywgJ3JpZ2h0J10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZCxcbiAgICB2ZXJ0aWNhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ2NlbnRlcicsICd0b3AnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkXG4gIH0pLFxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgcG9zaXRpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKiBUaGUgY29vcmRpbmF0ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBhcHBsaWNhdGlvbidzIGNsaWVudCBhcmVhLlxuICAgKi9cbiAgYW5jaG9yUG9zaXRpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbGVmdDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIHRvcDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG4gIH0pLFxuICAvKipcbiAgICogVGhpcyBkZXRlcm1pbmVzIHdoaWNoIGFuY2hvciBwcm9wIHRvIHJlZmVyIHRvIHdoZW4gc2V0dGluZ1xuICAgKiB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqIEBkZWZhdWx0ICdhbmNob3JFbCdcbiAgICovXG4gIGFuY2hvclJlZmVyZW5jZTogUHJvcFR5cGVzLm9uZU9mKFsnYW5jaG9yRWwnLCAnYW5jaG9yUG9zaXRpb24nLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50LCBjb21wb25lbnQgaW5zdGFuY2UsIG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBlaXRoZXIuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIHBhc3NlZCB0byB0aGUgTW9kYWwgY29tcG9uZW50LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSBib2R5IG9mIHRoZSBhbmNob3JFbCdzIHRvcC1sZXZlbCBkb2N1bWVudCBvYmplY3QsXG4gICAqIHNvIGl0J3Mgc2ltcGx5IGBkb2N1bWVudC5ib2R5YCBtb3N0IG9mIHRoZSB0aW1lLlxuICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHNjcm9sbCBsb2NrIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNjcm9sbExvY2s6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGVsZXZhdGlvbiBvZiB0aGUgcG9wb3Zlci5cbiAgICogQGRlZmF1bHQgOFxuICAgKi9cbiAgZWxldmF0aW9uOiBpbnRlZ2VyUHJvcFR5cGUsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IGNsb3NlIHRvIHRoZSBlZGdlIG9mIHRoZSB3aW5kb3cgdGhlIHBvcG92ZXIgY2FuIGFwcGVhci5cbiAgICogSWYgbnVsbCwgdGhlIHBvcG92ZXIgd2lsbCBub3QgYmUgY29uc3RyYWluZWQgYnkgdGhlIHdpbmRvdy5cbiAgICogQGRlZmF1bHQgMTZcbiAgICovXG4gIG1hcmdpblRocmVzaG9sZDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFRoZSBgcmVhc29uYCBwYXJhbWV0ZXIgY2FuIG9wdGlvbmFsbHkgYmUgdXNlZCB0byBjb250cm9sIHRoZSByZXNwb25zZSB0byBgb25DbG9zZWAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYFBhcGVyYF0oL21hdGVyaWFsLXVpL2FwaS9wYXBlci8pIGVsZW1lbnQuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgYHNsb3RQcm9wcy5wYXBlcmAgYW5kIHdpbGwgYmUgb3ZlcnJpZGVuIGJ5IGl0IGlmIGJvdGggYXJlIHVzZWQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc2xvdFByb3BzLnBhcGVyYCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgUGFwZXJQcm9wczogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8uc2hhcGUoe1xuICAgIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWZcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBwYXBlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgICByb290OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHBhcGVyOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgcG9pbnQgb24gdGhlIHBvcG92ZXIgd2hpY2hcbiAgICogd2lsbCBhdHRhY2ggdG8gdGhlIGFuY2hvcidzIG9yaWdpbi5cbiAgICpcbiAgICogT3B0aW9uczpcbiAgICogdmVydGljYWw6IFt0b3AsIGNlbnRlciwgYm90dG9tLCB4KHB4KV07XG4gICAqIGhvcml6b250YWw6IFtsZWZ0LCBjZW50ZXIsIHJpZ2h0LCB4KHB4KV0uXG4gICAqIEBkZWZhdWx0IHtcbiAgICogICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAqICAgaG9yaXpvbnRhbDogJ2xlZnQnLFxuICAgKiB9XG4gICAqL1xuICB0cmFuc2Zvcm1PcmlnaW46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaG9yaXpvbnRhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY2VudGVyJywgJ2xlZnQnLCAncmlnaHQnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkLFxuICAgIHZlcnRpY2FsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib3R0b20nLCAnY2VudGVyJywgJ3RvcCddKSwgUHJvcFR5cGVzLm51bWJlcl0pLmlzUmVxdWlyZWRcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSB0cmFuc2l0aW9uLlxuICAgKiBbRm9sbG93IHRoaXMgZ3VpZGVdKC9tYXRlcmlhbC11aS90cmFuc2l0aW9ucy8jdHJhbnNpdGlvbmNvbXBvbmVudC1wcm9wKSB0byBsZWFybiBtb3JlIGFib3V0IHRoZSByZXF1aXJlbWVudHMgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBHcm93XG4gICAqL1xuICBUcmFuc2l0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBTZXQgdG8gJ2F1dG8nIHRvIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIHRyYW5zaXRpb24gdGltZSBiYXNlZCBvbiBoZWlnaHQuXG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFwcGVhcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBleGl0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pXSksXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSB0cmFuc2l0aW9uIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBlbGVtZW50IGlzIGJhc2VkIG9uIHRoaXMgW2BUcmFuc2l0aW9uYF0oaHR0cDovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24vKSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBUcmFuc2l0aW9uUHJvcHM6IFByb3BUeXBlcy5vYmplY3Rcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBQb3BvdmVyOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlNZW51Jywgc2xvdCk7XG59XG5jb25zdCBtZW51Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU1lbnUnLCBbJ3Jvb3QnLCAncGFwZXInLCAnbGlzdCddKTtcbmV4cG9ydCBkZWZhdWx0IG1lbnVDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm9uRW50ZXJpbmdcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJhdXRvRm9jdXNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVBdXRvRm9jdXNJdGVtXCIsIFwiTWVudUxpc3RQcm9wc1wiLCBcIm9uQ2xvc2VcIiwgXCJvcGVuXCIsIFwiUGFwZXJQcm9wc1wiLCBcIlBvcG92ZXJDbGFzc2VzXCIsIFwidHJhbnNpdGlvbkR1cmF0aW9uXCIsIFwiVHJhbnNpdGlvblByb3BzXCIsIFwidmFyaWFudFwiLCBcInNsb3RzXCIsIFwic2xvdFByb3BzXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNGcmFnbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IHVzZVNsb3RQcm9wcyB9IGZyb20gJ0BtdWkvYmFzZS91dGlscyc7XG5pbXBvcnQgeyBIVE1MRWxlbWVudFR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBNZW51TGlzdCBmcm9tICcuLi9NZW51TGlzdCc7XG5pbXBvcnQgUG9wb3ZlciwgeyBQb3BvdmVyUGFwZXIgfSBmcm9tICcuLi9Qb3BvdmVyJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGdldE1lbnVVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL21lbnVDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBSVExfT1JJR0lOID0ge1xuICB2ZXJ0aWNhbDogJ3RvcCcsXG4gIGhvcml6b250YWw6ICdyaWdodCdcbn07XG5jb25zdCBMVFJfT1JJR0lOID0ge1xuICB2ZXJ0aWNhbDogJ3RvcCcsXG4gIGhvcml6b250YWw6ICdsZWZ0J1xufTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBwYXBlcjogWydwYXBlciddLFxuICAgIGxpc3Q6IFsnbGlzdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TWVudVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgTWVudVJvb3QgPSBzdHlsZWQoUG9wb3Zlciwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpTWVudScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuZXhwb3J0IGNvbnN0IE1lbnVQYXBlciA9IHN0eWxlZChQb3BvdmVyUGFwZXIsIHtcbiAgbmFtZTogJ011aU1lbnUnLFxuICBzbG90OiAnUGFwZXInLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5wYXBlclxufSkoe1xuICAvLyBzcGVjWjogVGhlIG1heGltdW0gaGVpZ2h0IG9mIGEgc2ltcGxlIG1lbnUgc2hvdWxkIGJlIG9uZSBvciBtb3JlIHJvd3MgbGVzcyB0aGFuIHRoZSB2aWV3XG4gIC8vIGhlaWdodC4gVGhpcyBlbnN1cmVzIGEgdGFwcGFibGUgYXJlYSBvdXRzaWRlIG9mIHRoZSBzaW1wbGUgbWVudSB3aXRoIHdoaWNoIHRvIGRpc21pc3NcbiAgLy8gdGhlIG1lbnUuXG4gIG1heEhlaWdodDogJ2NhbGMoMTAwJSAtIDk2cHgpJyxcbiAgLy8gQWRkIGlPUyBtb21lbnR1bSBzY3JvbGxpbmcgZm9yIGlPUyA8IDEzLjBcbiAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCdcbn0pO1xuY29uc3QgTWVudU1lbnVMaXN0ID0gc3R5bGVkKE1lbnVMaXN0LCB7XG4gIG5hbWU6ICdNdWlNZW51JyxcbiAgc2xvdDogJ0xpc3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5saXN0XG59KSh7XG4gIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gIG91dGxpbmU6IDBcbn0pO1xuY29uc3QgTWVudSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE1lbnUoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfc2xvdHMkcGFwZXIsIF9zbG90UHJvcHMkcGFwZXI7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aU1lbnUnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhdXRvRm9jdXMgPSB0cnVlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkaXNhYmxlQXV0b0ZvY3VzSXRlbSA9IGZhbHNlLFxuICAgICAgTWVudUxpc3RQcm9wcyA9IHt9LFxuICAgICAgb25DbG9zZSxcbiAgICAgIG9wZW4sXG4gICAgICBQYXBlclByb3BzID0ge30sXG4gICAgICBQb3BvdmVyQ2xhc3NlcyxcbiAgICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9ICdhdXRvJyxcbiAgICAgIFRyYW5zaXRpb25Qcm9wczoge1xuICAgICAgICBvbkVudGVyaW5nXG4gICAgICB9ID0ge30sXG4gICAgICB2YXJpYW50ID0gJ3NlbGVjdGVkTWVudScsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgc2xvdFByb3BzID0ge31cbiAgICB9ID0gcHJvcHMsXG4gICAgVHJhbnNpdGlvblByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMuVHJhbnNpdGlvblByb3BzLCBfZXhjbHVkZWQpLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZDIpO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IGlzUnRsID0gdGhlbWUuZGlyZWN0aW9uID09PSAncnRsJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGF1dG9Gb2N1cyxcbiAgICBkaXNhYmxlQXV0b0ZvY3VzSXRlbSxcbiAgICBNZW51TGlzdFByb3BzLFxuICAgIG9uRW50ZXJpbmcsXG4gICAgUGFwZXJQcm9wcyxcbiAgICB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgVHJhbnNpdGlvblByb3BzLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgYXV0b0ZvY3VzSXRlbSA9IGF1dG9Gb2N1cyAmJiAhZGlzYWJsZUF1dG9Gb2N1c0l0ZW0gJiYgb3BlbjtcbiAgY29uc3QgbWVudUxpc3RBY3Rpb25zUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IChlbGVtZW50LCBpc0FwcGVhcmluZykgPT4ge1xuICAgIGlmIChtZW51TGlzdEFjdGlvbnNSZWYuY3VycmVudCkge1xuICAgICAgbWVudUxpc3RBY3Rpb25zUmVmLmN1cnJlbnQuYWRqdXN0U3R5bGVGb3JTY3JvbGxiYXIoZWxlbWVudCwgdGhlbWUpO1xuICAgIH1cbiAgICBpZiAob25FbnRlcmluZykge1xuICAgICAgb25FbnRlcmluZyhlbGVtZW50LCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVMaXN0S2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIG9uQ2xvc2UoZXZlbnQsICd0YWJLZXlEb3duJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gc2hvdWxkIHJlY2VpdmUgZm9jdXNcbiAgICogaW4gYSBgdmFyaWFudD1cInNlbGVjdGVkTWVudVwiYCBpdCdzIHRoZSBmaXJzdCBgc2VsZWN0ZWRgIGl0ZW1cbiAgICogb3RoZXJ3aXNlIGl0J3MgdGhlIHZlcnkgZmlyc3QgaXRlbS5cbiAgICovXG4gIGxldCBhY3RpdmVJdGVtSW5kZXggPSAtMTtcbiAgLy8gc2luY2Ugd2UgaW5qZWN0IGZvY3VzIHJlbGF0ZWQgcHJvcHMgaW50byBjaGlsZHJlbiB3ZSBoYXZlIHRvIGRvIGEgbG9va2FoZWFkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGEgYHNlbGVjdGVkYCBpdGVtLiBXZSdyZSBsb29raW5nIGZvciB0aGUgbGFzdCBgc2VsZWN0ZWRgXG4gIC8vIGl0ZW0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsaWQgaXRlbSBhcyBhIGZhbGxiYWNrXG4gIFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZyYWdtZW50KGNoaWxkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtcIk1VSTogVGhlIE1lbnUgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjaGlsZC5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgaWYgKHZhcmlhbnQgPT09ICdzZWxlY3RlZE1lbnUnICYmIGNoaWxkLnByb3BzLnNlbGVjdGVkKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmVJdGVtSW5kZXggPT09IC0xKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IFBhcGVyU2xvdCA9IChfc2xvdHMkcGFwZXIgPSBzbG90cy5wYXBlcikgIT0gbnVsbCA/IF9zbG90cyRwYXBlciA6IE1lbnVQYXBlcjtcbiAgY29uc3QgcGFwZXJFeHRlcm5hbFNsb3RQcm9wcyA9IChfc2xvdFByb3BzJHBhcGVyID0gc2xvdFByb3BzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RQcm9wcyRwYXBlciA6IFBhcGVyUHJvcHM7XG4gIGNvbnN0IHJvb3RTbG90UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBzbG90cy5yb290LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBzbG90UHJvcHMucm9vdCxcbiAgICBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogW2NsYXNzZXMucm9vdCwgY2xhc3NOYW1lXVxuICB9KTtcbiAgY29uc3QgcGFwZXJTbG90UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBQYXBlclNsb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IHBhcGVyRXh0ZXJuYWxTbG90UHJvcHMsXG4gICAgb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMucGFwZXJcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChNZW51Um9vdCwgX2V4dGVuZHMoe1xuICAgIG9uQ2xvc2U6IG9uQ2xvc2UsXG4gICAgYW5jaG9yT3JpZ2luOiB7XG4gICAgICB2ZXJ0aWNhbDogJ2JvdHRvbScsXG4gICAgICBob3Jpem9udGFsOiBpc1J0bCA/ICdyaWdodCcgOiAnbGVmdCdcbiAgICB9LFxuICAgIHRyYW5zZm9ybU9yaWdpbjogaXNSdGwgPyBSVExfT1JJR0lOIDogTFRSX09SSUdJTixcbiAgICBzbG90czoge1xuICAgICAgcGFwZXI6IFBhcGVyU2xvdCxcbiAgICAgIHJvb3Q6IHNsb3RzLnJvb3RcbiAgICB9LFxuICAgIHNsb3RQcm9wczoge1xuICAgICAgcm9vdDogcm9vdFNsb3RQcm9wcyxcbiAgICAgIHBhcGVyOiBwYXBlclNsb3RQcm9wc1xuICAgIH0sXG4gICAgb3Blbjogb3BlbixcbiAgICByZWY6IHJlZixcbiAgICB0cmFuc2l0aW9uRHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICBUcmFuc2l0aW9uUHJvcHM6IF9leHRlbmRzKHtcbiAgICAgIG9uRW50ZXJpbmc6IGhhbmRsZUVudGVyaW5nXG4gICAgfSwgVHJhbnNpdGlvblByb3BzKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogUG9wb3ZlckNsYXNzZXMsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KE1lbnVNZW51TGlzdCwgX2V4dGVuZHMoe1xuICAgICAgb25LZXlEb3duOiBoYW5kbGVMaXN0S2V5RG93bixcbiAgICAgIGFjdGlvbnM6IG1lbnVMaXN0QWN0aW9uc1JlZixcbiAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzICYmIChhY3RpdmVJdGVtSW5kZXggPT09IC0xIHx8IGRpc2FibGVBdXRvRm9jdXNJdGVtKSxcbiAgICAgIGF1dG9Gb2N1c0l0ZW06IGF1dG9Gb2N1c0l0ZW0sXG4gICAgICB2YXJpYW50OiB2YXJpYW50XG4gICAgfSwgTWVudUxpc3RQcm9wcywge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMubGlzdCwgTWVudUxpc3RQcm9wcy5jbGFzc05hbWUpLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTWVudS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQsIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZS5cbiAgICogSXQncyB1c2VkIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIG1lbnUuXG4gICAqL1xuICBhbmNob3JFbDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAgKERlZmF1bHQpIHdpbGwgZm9jdXMgdGhlIGBbcm9sZT1cIm1lbnVcIl1gIGlmIG5vIGZvY3VzYWJsZSBjaGlsZCBpcyBmb3VuZC4gRGlzYWJsZWRcbiAgICogY2hpbGRyZW4gYXJlIG5vdCBmb2N1c2FibGUuIElmIHlvdSBzZXQgdGhpcyBwcm9wIHRvIGBmYWxzZWAgZm9jdXMgd2lsbCBiZSBwbGFjZWRcbiAgICogb24gdGhlIHBhcmVudCBtb2RhbCBjb250YWluZXIuIFRoaXMgaGFzIHNldmVyZSBhY2Nlc3NpYmlsaXR5IGltcGxpY2F0aW9uc1xuICAgKiBhbmQgc2hvdWxkIG9ubHkgYmUgY29uc2lkZXJlZCBpZiB5b3UgbWFuYWdlIGZvY3VzIG90aGVyd2lzZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE1lbnUgY29udGVudHMsIG5vcm1hbGx5IGBNZW51SXRlbWBzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFdoZW4gb3BlbmluZyB0aGUgbWVudSB3aWxsIG5vdCBmb2N1cyB0aGUgYWN0aXZlIGl0ZW0gYnV0IHRoZSBgW3JvbGU9XCJtZW51XCJdYFxuICAgKiB1bmxlc3MgYGF1dG9Gb2N1c2AgaXMgYWxzbyBzZXQgdG8gYGZhbHNlYC4gTm90IHVzaW5nIHRoZSBkZWZhdWx0IG1lYW5zIG5vdFxuICAgKiBmb2xsb3dpbmcgV0FJLUFSSUEgYXV0aG9yaW5nIHByYWN0aWNlcy4gUGxlYXNlIGJlIGNvbnNpZGVyYXRlIGFib3V0IHBvc3NpYmxlXG4gICAqIGFjY2Vzc2liaWxpdHkgaW1wbGljYXRpb25zLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUF1dG9Gb2N1c0l0ZW06IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BNZW51TGlzdGBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS1saXN0LykgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIE1lbnVMaXN0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gQ2FuIGJlOiBgXCJlc2NhcGVLZXlEb3duXCJgLCBgXCJiYWNrZHJvcENsaWNrXCJgLCBgXCJ0YWJLZXlEb3duXCJgLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgUGFwZXJQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIGBjbGFzc2VzYCBwcm9wIGFwcGxpZWQgdG8gdGhlIFtgUG9wb3ZlcmBdKC9tYXRlcmlhbC11aS9hcGkvcG9wb3Zlci8pIGVsZW1lbnQuXG4gICAqL1xuICBQb3BvdmVyQ2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHBhcGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGFwZXI6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSB0cmFuc2l0aW9uIGluIGBtc2AsIG9yICdhdXRvJ1xuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHA6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLykgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgVHJhbnNpdGlvblByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLiBVc2UgYG1lbnVgIHRvIHByZXZlbnQgc2VsZWN0ZWQgaXRlbXMgZnJvbSBpbXBhY3RpbmcgdGhlIGluaXRpYWwgZm9jdXMuXG4gICAqIEBkZWZhdWx0ICdzZWxlY3RlZE1lbnUnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydtZW51JywgJ3NlbGVjdGVkTWVudSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1lbnU7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RJdGVtSWNvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdEl0ZW1JY29uJywgc2xvdCk7XG59XG5jb25zdCBsaXN0SXRlbUljb25DbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTGlzdEl0ZW1JY29uJywgWydyb290JywgJ2FsaWduSXRlbXNGbGV4U3RhcnQnXSk7XG5leHBvcnQgZGVmYXVsdCBsaXN0SXRlbUljb25DbGFzc2VzOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0SXRlbVRleHRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUxpc3RJdGVtVGV4dCcsIHNsb3QpO1xufVxuY29uc3QgbGlzdEl0ZW1UZXh0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3RJdGVtVGV4dCcsIFsncm9vdCcsICdtdWx0aWxpbmUnLCAnZGVuc2UnLCAnaW5zZXQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknXSk7XG5leHBvcnQgZGVmYXVsdCBsaXN0SXRlbVRleHRDbGFzc2VzOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51SXRlbVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTWVudUl0ZW0nLCBzbG90KTtcbn1cbmNvbnN0IG1lbnVJdGVtQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU1lbnVJdGVtJywgWydyb290JywgJ2ZvY3VzVmlzaWJsZScsICdkZW5zZScsICdkaXNhYmxlZCcsICdkaXZpZGVyJywgJ2d1dHRlcnMnLCAnc2VsZWN0ZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBtZW51SXRlbUNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXV0b0ZvY3VzXCIsIFwiY29tcG9uZW50XCIsIFwiZGVuc2VcIiwgXCJkaXZpZGVyXCIsIFwiZGlzYWJsZUd1dHRlcnNcIiwgXCJmb2N1c1Zpc2libGVDbGFzc05hbWVcIiwgXCJyb2xlXCIsIFwidGFiSW5kZXhcIiwgXCJjbGFzc05hbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBhbHBoYSB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgTGlzdENvbnRleHQgZnJvbSAnLi4vTGlzdC9MaXN0Q29udGV4dCc7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91dGlscy91c2VFbmhhbmNlZEVmZmVjdCc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB7IGRpdmlkZXJDbGFzc2VzIH0gZnJvbSAnLi4vRGl2aWRlcic7XG5pbXBvcnQgeyBsaXN0SXRlbUljb25DbGFzc2VzIH0gZnJvbSAnLi4vTGlzdEl0ZW1JY29uJztcbmltcG9ydCB7IGxpc3RJdGVtVGV4dENsYXNzZXMgfSBmcm9tICcuLi9MaXN0SXRlbVRleHQnO1xuaW1wb3J0IG1lbnVJdGVtQ2xhc3NlcywgeyBnZXRNZW51SXRlbVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbWVudUl0ZW1DbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3Qgb3ZlcnJpZGVzUmVzb2x2ZXIgPSAocHJvcHMsIHN0eWxlcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3duZXJTdGF0ZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuZGVuc2UgJiYgc3R5bGVzLmRlbnNlLCBvd25lclN0YXRlLmRpdmlkZXIgJiYgc3R5bGVzLmRpdmlkZXIsICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHN0eWxlcy5ndXR0ZXJzXTtcbn07XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgZGlzYWJsZWQsXG4gICAgZGVuc2UsXG4gICAgZGl2aWRlcixcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICBzZWxlY3RlZCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkZW5zZSAmJiAnZGVuc2UnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCAhZGlzYWJsZUd1dHRlcnMgJiYgJ2d1dHRlcnMnLCBkaXZpZGVyICYmICdkaXZpZGVyJywgc2VsZWN0ZWQgJiYgJ3NlbGVjdGVkJ11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldE1lbnVJdGVtVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IE1lbnVJdGVtUm9vdCA9IHN0eWxlZChCdXR0b25CYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlNZW51SXRlbScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7fSwgdGhlbWUudHlwb2dyYXBoeS5ib2R5MSwge1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGp1c3RpZnlDb250ZW50OiAnZmxleC1zdGFydCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgbWluSGVpZ2h0OiA0OCxcbiAgcGFkZGluZ1RvcDogNixcbiAgcGFkZGluZ0JvdHRvbTogNixcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiB7XG4gIHBhZGRpbmdMZWZ0OiAxNixcbiAgcGFkZGluZ1JpZ2h0OiAxNlxufSwgb3duZXJTdGF0ZS5kaXZpZGVyICYmIHtcbiAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZGl2aWRlcn1gLFxuICBiYWNrZ3JvdW5kQ2xpcDogJ3BhZGRpbmctYm94J1xufSwge1xuICAnJjpob3Zlcic6IHtcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmhvdmVyLFxuICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgfVxuICB9LFxuICBbYCYuJHttZW51SXRlbUNsYXNzZXMuc2VsZWN0ZWR9YF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5KSxcbiAgICBbYCYuJHttZW51SXRlbUNsYXNzZXMuZm9jdXNWaXNpYmxlfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvIGNhbGMoJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0gKyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uZm9jdXNPcGFjaXR5fSkpYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkgKyB0aGVtZS5wYWxldHRlLmFjdGlvbi5mb2N1c09wYWNpdHkpXG4gICAgfVxuICB9LFxuICBbYCYuJHttZW51SXRlbUNsYXNzZXMuc2VsZWN0ZWR9OmhvdmVyYF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvIGNhbGMoJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0gKyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSkpYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkgKyB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUucHJpbWFyeS5tYWluQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSlcbiAgICB9XG4gIH0sXG4gIFtgJi4ke21lbnVJdGVtQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5mb2N1c1xuICB9LFxuICBbYCYuJHttZW51SXRlbUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBvcGFjaXR5OiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRPcGFjaXR5XG4gIH0sXG4gIFtgJiArIC4ke2RpdmlkZXJDbGFzc2VzLnJvb3R9YF06IHtcbiAgICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcoMSksXG4gICAgbWFyZ2luQm90dG9tOiB0aGVtZS5zcGFjaW5nKDEpXG4gIH0sXG4gIFtgJiArIC4ke2RpdmlkZXJDbGFzc2VzLmluc2V0fWBdOiB7XG4gICAgbWFyZ2luTGVmdDogNTJcbiAgfSxcbiAgW2AmIC4ke2xpc3RJdGVtVGV4dENsYXNzZXMucm9vdH1gXToge1xuICAgIG1hcmdpblRvcDogMCxcbiAgICBtYXJnaW5Cb3R0b206IDBcbiAgfSxcbiAgW2AmIC4ke2xpc3RJdGVtVGV4dENsYXNzZXMuaW5zZXR9YF06IHtcbiAgICBwYWRkaW5nTGVmdDogMzZcbiAgfSxcbiAgW2AmIC4ke2xpc3RJdGVtSWNvbkNsYXNzZXMucm9vdH1gXToge1xuICAgIG1pbldpZHRoOiAzNlxuICB9XG59LCAhb3duZXJTdGF0ZS5kZW5zZSAmJiB7XG4gIFt0aGVtZS5icmVha3BvaW50cy51cCgnc20nKV06IHtcbiAgICBtaW5IZWlnaHQ6ICdhdXRvJ1xuICB9XG59LCBvd25lclN0YXRlLmRlbnNlICYmIF9leHRlbmRzKHtcbiAgbWluSGVpZ2h0OiAzMixcbiAgLy8gaHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9jb21wb25lbnRzL21lbnVzI3NwZWNzID4gRGVuc2VcbiAgcGFkZGluZ1RvcDogNCxcbiAgcGFkZGluZ0JvdHRvbTogNFxufSwgdGhlbWUudHlwb2dyYXBoeS5ib2R5Miwge1xuICBbYCYgLiR7bGlzdEl0ZW1JY29uQ2xhc3Nlcy5yb290fSBzdmdgXToge1xuICAgIGZvbnRTaXplOiAnMS4yNXJlbSdcbiAgfVxufSkpKTtcbmNvbnN0IE1lbnVJdGVtID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTWVudUl0ZW0oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aU1lbnVJdGVtJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgICBjb21wb25lbnQgPSAnbGknLFxuICAgICAgZGVuc2UgPSBmYWxzZSxcbiAgICAgIGRpdmlkZXIgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVHdXR0ZXJzID0gZmFsc2UsXG4gICAgICBmb2N1c1Zpc2libGVDbGFzc05hbWUsXG4gICAgICByb2xlID0gJ21lbnVpdGVtJyxcbiAgICAgIHRhYkluZGV4OiB0YWJJbmRleFByb3AsXG4gICAgICBjbGFzc05hbWVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoTGlzdENvbnRleHQpO1xuICBjb25zdCBjaGlsZENvbnRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZGVuc2U6IGRlbnNlIHx8IGNvbnRleHQuZGVuc2UgfHwgZmFsc2UsXG4gICAgZGlzYWJsZUd1dHRlcnNcbiAgfSksIFtjb250ZXh0LmRlbnNlLCBkZW5zZSwgZGlzYWJsZUd1dHRlcnNdKTtcbiAgY29uc3QgbWVudUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBpZiAobWVudUl0ZW1SZWYuY3VycmVudCkge1xuICAgICAgICBtZW51SXRlbVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBVbmFibGUgdG8gc2V0IGZvY3VzIHRvIGEgTWVudUl0ZW0gd2hvc2UgY29tcG9uZW50IGhhcyBub3QgYmVlbiByZW5kZXJlZC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFthdXRvRm9jdXNdKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRlbnNlOiBjaGlsZENvbnRleHQuZGVuc2UsXG4gICAgZGl2aWRlcixcbiAgICBkaXNhYmxlR3V0dGVyc1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKHByb3BzKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihtZW51SXRlbVJlZiwgcmVmKTtcbiAgbGV0IHRhYkluZGV4O1xuICBpZiAoIXByb3BzLmRpc2FibGVkKSB7XG4gICAgdGFiSW5kZXggPSB0YWJJbmRleFByb3AgIT09IHVuZGVmaW5lZCA/IHRhYkluZGV4UHJvcCA6IC0xO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaXN0Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjaGlsZENvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KE1lbnVJdGVtUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBoYW5kbGVSZWYsXG4gICAgICByb2xlOiByb2xlLFxuICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsXG4gICAgICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5mb2N1c1Zpc2libGUsIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSksXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc2VzOiBjbGFzc2VzXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNZW51SXRlbS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsaXN0IGl0ZW0gaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKiBGb2N1cyB3aWxsIGFsc28gYmUgdHJpZ2dlcmVkIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzIGZyb20gZmFsc2UgdG8gdHJ1ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBjb21wYWN0IHZlcnRpY2FsIHBhZGRpbmcgZGVzaWduZWQgZm9yIGtleWJvYXJkIGFuZCBtb3VzZSBpbnB1dCBpcyB1c2VkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBNZW51IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlbnNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxlZnQgYW5kIHJpZ2h0IHBhZGRpbmcgaXMgcmVtb3ZlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVHdXR0ZXJzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSAxcHggbGlnaHQgYm9yZGVyIGlzIGFkZGVkIHRvIHRoZSBib3R0b20gb2YgdGhlIG1lbnUgaXRlbS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpdmlkZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhpcyBwcm9wIGNhbiBoZWxwIGlkZW50aWZ5IHdoaWNoIGVsZW1lbnQgaGFzIGtleWJvYXJkIGZvY3VzLlxuICAgKiBUaGUgY2xhc3MgbmFtZSB3aWxsIGJlIGFwcGxpZWQgd2hlbiB0aGUgZWxlbWVudCBnYWlucyB0aGUgZm9jdXMgdGhyb3VnaCBrZXlib2FyZCBpbnRlcmFjdGlvbi5cbiAgICogSXQncyBhIHBvbHlmaWxsIGZvciB0aGUgW0NTUyA6Zm9jdXMtdmlzaWJsZSBzZWxlY3Rvcl0oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3NlbGVjdG9ycy00LyN0aGUtZm9jdXMtdmlzaWJsZS1wc2V1ZG8pLlxuICAgKiBUaGUgcmF0aW9uYWxlIGZvciB1c2luZyB0aGlzIGZlYXR1cmUgW2lzIGV4cGxhaW5lZCBoZXJlXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlL2Jsb2IvSEVBRC9leHBsYWluZXIubWQpLlxuICAgKiBBIFtwb2x5ZmlsbCBjYW4gYmUgdXNlZF0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZSkgdG8gYXBwbHkgYSBgZm9jdXMtdmlzaWJsZWAgY2xhc3MgdG8gb3RoZXIgY29tcG9uZW50c1xuICAgKiBpZiBuZWVkZWQuXG4gICAqL1xuICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByb2xlOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2VsZWN0ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB0YWJJbmRleDogUHJvcFR5cGVzLm51bWJlclxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1lbnVJdGVtOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXROYXRpdmVTZWxlY3RVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTmF0aXZlU2VsZWN0Jywgc2xvdCk7XG59XG5jb25zdCBuYXRpdmVTZWxlY3RDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTmF0aXZlU2VsZWN0JywgWydyb290JywgJ3NlbGVjdCcsICdtdWx0aXBsZScsICdmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnLCAnZGlzYWJsZWQnLCAnaWNvbicsICdpY29uT3BlbicsICdpY29uRmlsbGVkJywgJ2ljb25PdXRsaW5lZCcsICdpY29uU3RhbmRhcmQnLCAnbmF0aXZlSW5wdXQnLCAnZXJyb3InXSk7XG5leHBvcnQgZGVmYXVsdCBuYXRpdmVTZWxlY3RDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJJY29uQ29tcG9uZW50XCIsIFwiaW5wdXRSZWZcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgcmVmVHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgbmF0aXZlU2VsZWN0Q2xhc3NlcywgeyBnZXROYXRpdmVTZWxlY3RVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vbmF0aXZlU2VsZWN0Q2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHZhcmlhbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgbXVsdGlwbGUsXG4gICAgb3BlbixcbiAgICBlcnJvclxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgc2VsZWN0OiBbJ3NlbGVjdCcsIHZhcmlhbnQsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIG11bHRpcGxlICYmICdtdWx0aXBsZScsIGVycm9yICYmICdlcnJvciddLFxuICAgIGljb246IFsnaWNvbicsIGBpY29uJHtjYXBpdGFsaXplKHZhcmlhbnQpfWAsIG9wZW4gJiYgJ2ljb25PcGVuJywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXROYXRpdmVTZWxlY3RVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcyA9ICh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICAvLyBXaGVuIGludGVyYWN0aW5nIHF1aWNrbHksIHRoZSB0ZXh0IGNhbiBlbmQgdXAgc2VsZWN0ZWQuXG4gIC8vIE5hdGl2ZSBzZWxlY3QgY2FuJ3QgYmUgc2VsZWN0ZWQgZWl0aGVyLlxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIGJvcmRlclJhZGl1czogMCxcbiAgLy8gUmVzZXRcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gICcmOmZvY3VzJzogX2V4dGVuZHMoe30sIHRoZW1lLnZhcnMgPyB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAwLjA1KWBcbiAgfSA6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/ICdyZ2JhKDAsIDAsIDAsIDAuMDUpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpJ1xuICB9LCB7XG4gICAgYm9yZGVyUmFkaXVzOiAwIC8vIFJlc2V0IENocm9tZSBzdHlsZVxuICB9KSxcbiAgLy8gUmVtb3ZlIElFMTEgYXJyb3dcbiAgJyY6Oi1tcy1leHBhbmQnOiB7XG4gICAgZGlzcGxheTogJ25vbmUnXG4gIH0sXG4gIFtgJi4ke25hdGl2ZVNlbGVjdENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9LFxuICAnJlttdWx0aXBsZV0nOiB7XG4gICAgaGVpZ2h0OiAnYXV0bydcbiAgfSxcbiAgJyY6bm90KFttdWx0aXBsZV0pIG9wdGlvbiwgJjpub3QoW211bHRpcGxlXSkgb3B0Z3JvdXAnOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5iYWNrZ3JvdW5kLnBhcGVyXG4gIH0sXG4gIC8vIEJ1bXAgc3BlY2lmaWNpdHkgdG8gYWxsb3cgZXh0ZW5kaW5nIGN1c3RvbSBpbnB1dHNcbiAgJyYmJic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDI0LFxuICAgIG1pbldpZHRoOiAxNiAvLyBTbyBpdCBkb2Vzbid0IGNvbGxhcHNlLlxuICB9XG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdmaWxsZWQnICYmIHtcbiAgJyYmJic6IHtcbiAgICBwYWRkaW5nUmlnaHQ6IDMyXG4gIH1cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gIGJvcmRlclJhZGl1czogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYXBlLmJvcmRlclJhZGl1cyxcbiAgJyY6Zm9jdXMnOiB7XG4gICAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzIC8vIFJlc2V0IHRoZSByZXNldCBmb3IgQ2hyb21lIHN0eWxlXG4gIH0sXG4gICcmJiYnOiB7XG4gICAgcGFkZGluZ1JpZ2h0OiAzMlxuICB9XG59KTtcbmNvbnN0IE5hdGl2ZVNlbGVjdFNlbGVjdCA9IHN0eWxlZCgnc2VsZWN0Jywge1xuICBuYW1lOiAnTXVpTmF0aXZlU2VsZWN0JyxcbiAgc2xvdDogJ1NlbGVjdCcsXG4gIHNob3VsZEZvcndhcmRQcm9wOiByb290U2hvdWxkRm9yd2FyZFByb3AsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuc2VsZWN0LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5lcnJvciAmJiBzdHlsZXMuZXJyb3IsIHtcbiAgICAgIFtgJi4ke25hdGl2ZVNlbGVjdENsYXNzZXMubXVsdGlwbGV9YF06IHN0eWxlcy5tdWx0aXBsZVxuICAgIH1dO1xuICB9XG59KShuYXRpdmVTZWxlY3RTZWxlY3RTdHlsZXMpO1xuZXhwb3J0IGNvbnN0IG5hdGl2ZVNlbGVjdEljb25TdHlsZXMgPSAoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICAvLyBXZSB1c2UgYSBwb3NpdGlvbiBhYnNvbHV0ZSBvdmVyIGEgZmxleGJveCBpbiBvcmRlciB0byBmb3J3YXJkIHRoZSBwb2ludGVyIGV2ZW50c1xuICAvLyB0byB0aGUgaW5wdXQgYW5kIHRvIHN1cHBvcnQgd3JhcHBpbmcgdGFncy4uXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICByaWdodDogMCxcbiAgdG9wOiAnY2FsYyg1MCUgLSAuNWVtKScsXG4gIC8vIENlbnRlciB2ZXJ0aWNhbGx5LCBoZWlnaHQgaXMgMWVtXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgLy8gRG9uJ3QgYmxvY2sgcG9pbnRlciBldmVudHMgb24gdGhlIHNlbGVjdCB1bmRlciB0aGUgaWNvbi5cbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5hY3RpdmUsXG4gIFtgJi4ke25hdGl2ZVNlbGVjdENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gIH1cbn0sIG93bmVyU3RhdGUub3BlbiAmJiB7XG4gIHRyYW5zZm9ybTogJ3JvdGF0ZSgxODBkZWcpJ1xufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZmlsbGVkJyAmJiB7XG4gIHJpZ2h0OiA3XG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICByaWdodDogN1xufSk7XG5jb25zdCBOYXRpdmVTZWxlY3RJY29uID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlOYXRpdmVTZWxlY3QnLFxuICBzbG90OiAnSWNvbicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuaWNvbiwgb3duZXJTdGF0ZS52YXJpYW50ICYmIHN0eWxlc1tgaWNvbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnZhcmlhbnQpfWBdLCBvd25lclN0YXRlLm9wZW4gJiYgc3R5bGVzLmljb25PcGVuXTtcbiAgfVxufSkobmF0aXZlU2VsZWN0SWNvblN0eWxlcyk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgTmF0aXZlU2VsZWN0SW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBOYXRpdmVTZWxlY3RJbnB1dChwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZXJyb3IsXG4gICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgaW5wdXRSZWYsXG4gICAgICB2YXJpYW50ID0gJ3N0YW5kYXJkJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZWQsXG4gICAgdmFyaWFudCxcbiAgICBlcnJvclxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChOYXRpdmVTZWxlY3RTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5zZWxlY3QsIGNsYXNzTmFtZSksXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICByZWY6IGlucHV0UmVmIHx8IHJlZlxuICAgIH0sIG90aGVyKSksIHByb3BzLm11bHRpcGxlID8gbnVsbCA6IC8qI19fUFVSRV9fKi9fanN4KE5hdGl2ZVNlbGVjdEljb24sIHtcbiAgICAgIGFzOiBJY29uQ29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5pY29uXG4gICAgfSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBOYXRpdmVTZWxlY3RJbnB1dC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uIGVsZW1lbnRzIHRvIHBvcHVsYXRlIHRoZSBzZWxlY3Qgd2l0aC5cbiAgICogQ2FuIGJlIHNvbWUgYDxvcHRpb24+YCBlbGVtZW50cy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogU2VlIFtDU1MgQVBJXSgjY3NzKSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBDU1MgY2xhc3MgbmFtZSBvZiB0aGUgc2VsZWN0IGVsZW1lbnQuXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzZWxlY3QgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgc2VsZWN0IGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdGhhdCBkaXNwbGF5cyB0aGUgYXJyb3cuXG4gICAqL1xuICBJY29uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFVzZSB0aGF0IHByb3AgdG8gcGFzcyBhIHJlZiB0byB0aGUgbmF0aXZlIHNlbGVjdCBlbGVtZW50LlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBtdWx0aXBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYHNlbGVjdGAgb3IgaGlkZGVuIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIGEgbWVudSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgdmFsdWUuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ3N0YW5kYXJkJywgJ291dGxpbmVkJywgJ2ZpbGxlZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE5hdGl2ZVNlbGVjdElucHV0OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbnZhciBfc3BhbjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiLCBcImxhYmVsXCIsIFwibm90Y2hlZFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IE5vdGNoZWRPdXRsaW5lUm9vdCA9IHN0eWxlZCgnZmllbGRzZXQnLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pKHtcbiAgdGV4dEFsaWduOiAnbGVmdCcsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBib3R0b206IDAsXG4gIHJpZ2h0OiAwLFxuICB0b3A6IC01LFxuICBsZWZ0OiAwLFxuICBtYXJnaW46IDAsXG4gIHBhZGRpbmc6ICcwIDhweCcsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCcsXG4gIGJvcmRlclN0eWxlOiAnc29saWQnLFxuICBib3JkZXJXaWR0aDogMSxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBtaW5XaWR0aDogJzAlJ1xufSk7XG5jb25zdCBOb3RjaGVkT3V0bGluZUxlZ2VuZCA9IHN0eWxlZCgnbGVnZW5kJywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcm9vdFNob3VsZEZvcndhcmRQcm9wXG59KSgoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBmbG9hdDogJ3Vuc2V0JyxcbiAgLy8gRml4IGNvbmZsaWN0IHdpdGggYm9vdHN0cmFwXG4gIHdpZHRoOiAnYXV0bycsXG4gIC8vIEZpeCBjb25mbGljdCB3aXRoIGJvb3RzdHJhcFxuICBvdmVyZmxvdzogJ2hpZGRlbidcbn0sICFvd25lclN0YXRlLndpdGhMYWJlbCAmJiB7XG4gIHBhZGRpbmc6IDAsXG4gIGxpbmVIZWlnaHQ6ICcxMXB4JyxcbiAgLy8gc3luYyB3aXRoIGBoZWlnaHRgIGluIGBsZWdlbmRgIHN0eWxlc1xuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3dpZHRoJywge1xuICAgIGR1cmF0aW9uOiAxNTAsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICB9KVxufSwgb3duZXJTdGF0ZS53aXRoTGFiZWwgJiYgX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnYmxvY2snLFxuICAvLyBGaXggY29uZmxpY3Qgd2l0aCBub3JtYWxpemUuY3NzIGFuZCBzYW5pdGl6ZS5jc3NcbiAgcGFkZGluZzogMCxcbiAgaGVpZ2h0OiAxMSxcbiAgLy8gc3luYyB3aXRoIGBsaW5lSGVpZ2h0YCBpbiBgbGVnZW5kYCBzdHlsZXNcbiAgZm9udFNpemU6ICcwLjc1ZW0nLFxuICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgbWF4V2lkdGg6IDAuMDEsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnbWF4LXdpZHRoJywge1xuICAgIGR1cmF0aW9uOiA1MCxcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0XG4gIH0pLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgJyYgPiBzcGFuJzoge1xuICAgIHBhZGRpbmdMZWZ0OiA1LFxuICAgIHBhZGRpbmdSaWdodDogNSxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICBvcGFjaXR5OiAwLFxuICAgIHZpc2liaWxpdHk6ICd2aXNpYmxlJ1xuICB9XG59LCBvd25lclN0YXRlLm5vdGNoZWQgJiYge1xuICBtYXhXaWR0aDogJzEwMCUnLFxuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ21heC13aWR0aCcsIHtcbiAgICBkdXJhdGlvbjogMTAwLFxuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXQsXG4gICAgZGVsYXk6IDUwXG4gIH0pXG59KSkpO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE5vdGNoZWRPdXRsaW5lKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGxhYmVsLFxuICAgICAgbm90Y2hlZFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB3aXRoTGFiZWwgPSBsYWJlbCAhPSBudWxsICYmIGxhYmVsICE9PSAnJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIG5vdGNoZWQsXG4gICAgd2l0aExhYmVsXG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goTm90Y2hlZE91dGxpbmVSb290LCBfZXh0ZW5kcyh7XG4gICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goTm90Y2hlZE91dGxpbmVMZWdlbmQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjaGlsZHJlbjogd2l0aExhYmVsID8gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgICB9KSA6IC8vIG5vdHJhbnNsYXRlIG5lZWRlZCB3aGlsZSBHb29nbGUgVHJhbnNsYXRlIHdpbGwgbm90IGZpeCB6ZXJvLXdpZHRoIHNwYWNlIGlzc3VlXG4gICAgICBfc3BhbiB8fCAoX3NwYW4gPSAvKiNfX1BVUkVfXyovX2pzeChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwibm90cmFuc2xhdGVcIixcbiAgICAgICAgY2hpbGRyZW46IFwiXFx1MjAwQlwiXG4gICAgICB9KSlcbiAgICB9KVxuICB9KSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBOb3RjaGVkT3V0bGluZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBTZWUgW0NTUyBBUEldKCNjc3MpIGJlbG93IGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGxhYmVsLlxuICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgb3V0bGluZSBpcyBub3RjaGVkIHRvIGFjY29tbW9kYXRlIHRoZSBsYWJlbC5cbiAgICovXG4gIG5vdGNoZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdFxufSA6IHZvaWQgMDsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmltcG9ydCB7IGlucHV0QmFzZUNsYXNzZXMgfSBmcm9tICcuLi9JbnB1dEJhc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE91dGxpbmVkSW5wdXRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU91dGxpbmVkSW5wdXQnLCBzbG90KTtcbn1cbmNvbnN0IG91dGxpbmVkSW5wdXRDbGFzc2VzID0gX2V4dGVuZHMoe30sIGlucHV0QmFzZUNsYXNzZXMsIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU91dGxpbmVkSW5wdXQnLCBbJ3Jvb3QnLCAnbm90Y2hlZE91dGxpbmUnLCAnaW5wdXQnXSkpO1xuZXhwb3J0IGRlZmF1bHQgb3V0bGluZWRJbnB1dENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY29tcG9uZW50c1wiLCBcImZ1bGxXaWR0aFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwibGFiZWxcIiwgXCJtdWx0aWxpbmVcIiwgXCJub3RjaGVkXCIsIFwic2xvdHNcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHJlZlR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBOb3RjaGVkT3V0bGluZSBmcm9tICcuL05vdGNoZWRPdXRsaW5lJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgb3V0bGluZWRJbnB1dENsYXNzZXMsIHsgZ2V0T3V0bGluZWRJbnB1dFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vb3V0bGluZWRJbnB1dENsYXNzZXMnO1xuaW1wb3J0IElucHV0QmFzZSwgeyByb290T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyLCBpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIsIElucHV0QmFzZVJvb3QsIElucHV0QmFzZUNvbXBvbmVudCBhcyBJbnB1dEJhc2VJbnB1dCB9IGZyb20gJy4uL0lucHV0QmFzZS9JbnB1dEJhc2UnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBub3RjaGVkT3V0bGluZTogWydub3RjaGVkT3V0bGluZSddLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldE91dGxpbmVkSW5wdXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgT3V0bGluZWRJbnB1dFJvb3QgPSBzdHlsZWQoSW5wdXRCYXNlUm9vdCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpT3V0bGluZWRJbnB1dCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgYm9yZGVyQ29sb3IgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyAncmdiYSgwLCAwLCAwLCAwLjIzKScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIzKSc7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIFtgJjpob3ZlciAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeVxuICAgIH0sXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBbYCY6aG92ZXIgLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgICAgYm9yZGVyQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAwLjIzKWAgOiBib3JkZXJDb2xvclxuICAgICAgfVxuICAgIH0sXG4gICAgW2AmLiR7b3V0bGluZWRJbnB1dENsYXNzZXMuZm9jdXNlZH0gLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgIGJvcmRlckNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLFxuICAgICAgYm9yZGVyV2lkdGg6IDJcbiAgICB9LFxuICAgIFtgJi4ke291dGxpbmVkSW5wdXRDbGFzc2VzLmVycm9yfSAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgICB9LFxuICAgIFtgJi4ke291dGxpbmVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfSAuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5ub3RjaGVkT3V0bGluZX1gXToge1xuICAgICAgYm9yZGVyQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZFxuICAgIH1cbiAgfSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gICAgcGFkZGluZ0xlZnQ6IDE0XG4gIH0sIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nUmlnaHQ6IDE0XG4gIH0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIF9leHRlbmRzKHtcbiAgICBwYWRkaW5nOiAnMTYuNXB4IDE0cHgnXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZzogJzguNXB4IDE0cHgnXG4gIH0pKTtcbn0pO1xuY29uc3QgTm90Y2hlZE91dGxpbmVSb290ID0gc3R5bGVkKE5vdGNoZWRPdXRsaW5lLCB7XG4gIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0JyxcbiAgc2xvdDogJ05vdGNoZWRPdXRsaW5lJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMubm90Y2hlZE91dGxpbmVcbn0pKCh7XG4gIHRoZW1lXG59KSA9PiB7XG4gIGNvbnN0IGJvcmRlckNvbG9yID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gJ3JnYmEoMCwgMCwgMCwgMC4yMyknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMyknO1xuICByZXR1cm4ge1xuICAgIGJvcmRlckNvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gMC4yMylgIDogYm9yZGVyQ29sb3JcbiAgfTtcbn0pO1xuY29uc3QgT3V0bGluZWRJbnB1dElucHV0ID0gc3R5bGVkKElucHV0QmFzZUlucHV0LCB7XG4gIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0JyxcbiAgc2xvdDogJ0lucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBhZGRpbmc6ICcxNi41cHggMTRweCdcbn0sICF0aGVtZS52YXJzICYmIHtcbiAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICBXZWJraXRCb3hTaGFkb3c6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgV2Via2l0VGV4dEZpbGxDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcjZmZmJyxcbiAgICBjYXJldENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGJvcmRlclJhZGl1czogJ2luaGVyaXQnXG4gIH1cbn0sIHRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIGJvcmRlclJhZGl1czogJ2luaGVyaXQnXG4gIH0sXG4gIFt0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKCdkYXJrJyldOiB7XG4gICAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICAgIFdlYmtpdEJveFNoYWRvdzogJzAgMCAwIDEwMHB4ICMyNjY3OTggaW5zZXQnLFxuICAgICAgV2Via2l0VGV4dEZpbGxDb2xvcjogJyNmZmYnLFxuICAgICAgY2FyZXRDb2xvcjogJyNmZmYnXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBwYWRkaW5nOiAnOC41cHggMTRweCdcbn0sIG93bmVyU3RhdGUubXVsdGlsaW5lICYmIHtcbiAgcGFkZGluZzogMFxufSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdMZWZ0OiAwXG59LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdSaWdodDogMFxufSkpO1xuY29uc3QgT3V0bGluZWRJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE91dGxpbmVkSW5wdXQoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdHMkcm9vdCwgX3JlZjIsIF9zbG90cyRpbnB1dCwgX1JlYWN0JEZyYWdtZW50O1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlPdXRsaW5lZElucHV0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBpbnB1dENvbXBvbmVudCA9ICdpbnB1dCcsXG4gICAgICBsYWJlbCxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgbm90Y2hlZCxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICB0eXBlID0gJ3RleHQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhwcm9wcyk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZmNzID0gZm9ybUNvbnRyb2xTdGF0ZSh7XG4gICAgcHJvcHMsXG4gICAgbXVpRm9ybUNvbnRyb2wsXG4gICAgc3RhdGVzOiBbJ2NvbG9yJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZvY3VzZWQnLCAnaGlkZGVuTGFiZWwnLCAnc2l6ZScsICdyZXF1aXJlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3I6IGZjcy5jb2xvciB8fCAncHJpbWFyeScsXG4gICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICBlcnJvcjogZmNzLmVycm9yLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkLFxuICAgIGZvcm1Db250cm9sOiBtdWlGb3JtQ29udHJvbCxcbiAgICBmdWxsV2lkdGgsXG4gICAgaGlkZGVuTGFiZWw6IGZjcy5oaWRkZW5MYWJlbCxcbiAgICBtdWx0aWxpbmUsXG4gICAgc2l6ZTogZmNzLnNpemUsXG4gICAgdHlwZVxuICB9KTtcbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBPdXRsaW5lZElucHV0Um9vdDtcbiAgY29uc3QgSW5wdXRTbG90ID0gKF9yZWYyID0gKF9zbG90cyRpbnB1dCA9IHNsb3RzLmlucHV0KSAhPSBudWxsID8gX3Nsb3RzJGlucHV0IDogY29tcG9uZW50cy5JbnB1dCkgIT0gbnVsbCA/IF9yZWYyIDogT3V0bGluZWRJbnB1dElucHV0O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSW5wdXRCYXNlLCBfZXh0ZW5kcyh7XG4gICAgc2xvdHM6IHtcbiAgICAgIHJvb3Q6IFJvb3RTbG90LFxuICAgICAgaW5wdXQ6IElucHV0U2xvdFxuICAgIH0sXG4gICAgcmVuZGVyU3VmZml4OiBzdGF0ZSA9PiAvKiNfX1BVUkVfXyovX2pzeChOb3RjaGVkT3V0bGluZVJvb3QsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMubm90Y2hlZE91dGxpbmUsXG4gICAgICBsYWJlbDogbGFiZWwgIT0gbnVsbCAmJiBsYWJlbCAhPT0gJycgJiYgZmNzLnJlcXVpcmVkID8gX1JlYWN0JEZyYWdtZW50IHx8IChfUmVhY3QkRnJhZ21lbnQgPSAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IFtsYWJlbCwgXCJcXHUyMDA5XCIsICcqJ11cbiAgICAgIH0pKSA6IGxhYmVsLFxuICAgICAgbm90Y2hlZDogdHlwZW9mIG5vdGNoZWQgIT09ICd1bmRlZmluZWQnID8gbm90Y2hlZCA6IEJvb2xlYW4oc3RhdGUuc3RhcnRBZG9ybm1lbnQgfHwgc3RhdGUuZmlsbGVkIHx8IHN0YXRlLmZvY3VzZWQpXG4gICAgfSksXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgaW5wdXRDb21wb25lbnQ6IGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZTogbXVsdGlsaW5lLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBfZXh0ZW5kcyh7fSwgY2xhc3Nlcywge1xuICAgICAgbm90Y2hlZE91dGxpbmU6IG51bGxcbiAgICB9KVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE91dGxpbmVkSW5wdXQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRW5kIGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgZW5kQWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2lucHV0J1xuICAgKi9cbiAgaW5wdXRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogVGhlIGxhYmVsIG9mIHRoZSBgaW5wdXRgLiBJdCBpcyBvbmx5IHVzZWQgZm9yIGxheW91dC4gVGhlIGFjdHVhbCBsYWJlbGxpbmdcbiAgICogaXMgaGFuZGxlZCBieSBgSW5wdXRMYWJlbGAuXG4gICAqL1xuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgZGVuc2VgLCB3aWxsIGFkanVzdCB2ZXJ0aWNhbCBzcGFjaW5nLiBUaGlzIGlzIG5vcm1hbGx5IG9idGFpbmVkIHZpYSBjb250ZXh0IGZyb21cbiAgICogRm9ybUNvbnRyb2wuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdub25lJ2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMub25lT2YoWydkZW5zZScsICdub25lJ10pLFxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1heFJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIE1pbmltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtaW5Sb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGEgW1RleHRhcmVhQXV0b3NpemVdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0YXJlYS1hdXRvc2l6ZS8pIGVsZW1lbnQgaXMgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtdWx0aWxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBvdXRsaW5lIGlzIG5vdGNoZWQgdG8gYWNjb21tb2RhdGUgdGhlIGxhYmVsLlxuICAgKi9cbiAgbm90Y2hlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyB2YWx1ZSBieSBhY2Nlc3NpbmcgYGV2ZW50LnRhcmdldC52YWx1ZWAgKHN0cmluZykuXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc2hvcnQgaGludCBkaXNwbGF5ZWQgaW4gdGhlIGBpbnB1dGAgYmVmb3JlIHRoZSB1c2VyIGVudGVycyBhIHZhbHVlLlxuICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJdCBwcmV2ZW50cyB0aGUgdXNlciBmcm9tIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICogKG5vdCBmcm9tIGludGVyYWN0aW5nIHdpdGggdGhlIGZpZWxkKS5cbiAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyByZXF1aXJlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5PdXRsaW5lZElucHV0Lm11aU5hbWUgPSAnSW5wdXQnO1xuZXhwb3J0IGRlZmF1bHQgT3V0bGluZWRJbnB1dDsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFwZXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVBhcGVyJywgc2xvdCk7XG59XG5jb25zdCBwYXBlckNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlQYXBlcicsIFsncm9vdCcsICdyb3VuZGVkJywgJ291dGxpbmVkJywgJ2VsZXZhdGlvbicsICdlbGV2YXRpb24wJywgJ2VsZXZhdGlvbjEnLCAnZWxldmF0aW9uMicsICdlbGV2YXRpb24zJywgJ2VsZXZhdGlvbjQnLCAnZWxldmF0aW9uNScsICdlbGV2YXRpb242JywgJ2VsZXZhdGlvbjcnLCAnZWxldmF0aW9uOCcsICdlbGV2YXRpb245JywgJ2VsZXZhdGlvbjEwJywgJ2VsZXZhdGlvbjExJywgJ2VsZXZhdGlvbjEyJywgJ2VsZXZhdGlvbjEzJywgJ2VsZXZhdGlvbjE0JywgJ2VsZXZhdGlvbjE1JywgJ2VsZXZhdGlvbjE2JywgJ2VsZXZhdGlvbjE3JywgJ2VsZXZhdGlvbjE4JywgJ2VsZXZhdGlvbjE5JywgJ2VsZXZhdGlvbjIwJywgJ2VsZXZhdGlvbjIxJywgJ2VsZXZhdGlvbjIyJywgJ2VsZXZhdGlvbjIzJywgJ2VsZXZhdGlvbjI0J10pO1xuZXhwb3J0IGRlZmF1bHQgcGFwZXJDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImVsZXZhdGlvblwiLCBcInNxdWFyZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBjaGFpblByb3BUeXBlcywgaW50ZWdlclByb3BUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBhbHBoYSB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgZ2V0T3ZlcmxheUFscGhhIGZyb20gJy4uL3N0eWxlcy9nZXRPdmVybGF5QWxwaGEnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgeyBnZXRQYXBlclV0aWxpdHlDbGFzcyB9IGZyb20gJy4vcGFwZXJDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgc3F1YXJlLFxuICAgIGVsZXZhdGlvbixcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsICFzcXVhcmUgJiYgJ3JvdW5kZWQnLCB2YXJpYW50ID09PSAnZWxldmF0aW9uJyAmJiBgZWxldmF0aW9uJHtlbGV2YXRpb259YF1cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRQYXBlclV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgUGFwZXJSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlQYXBlcicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgIW93bmVyU3RhdGUuc3F1YXJlICYmIHN0eWxlcy5yb3VuZGVkLCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdlbGV2YXRpb24nICYmIHN0eWxlc1tgZWxldmF0aW9uJHtvd25lclN0YXRlLmVsZXZhdGlvbn1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfdGhlbWUkdmFycyRvdmVybGF5cztcbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmJhY2tncm91bmQucGFwZXIsXG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeSxcbiAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ2JveC1zaGFkb3cnKVxuICB9LCAhb3duZXJTdGF0ZS5zcXVhcmUgJiYge1xuICAgIGJvcmRlclJhZGl1czogdGhlbWUuc2hhcGUuYm9yZGVyUmFkaXVzXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZGl2aWRlcn1gXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2VsZXZhdGlvbicgJiYgX2V4dGVuZHMoe1xuICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3Nbb3duZXJTdGF0ZS5lbGV2YXRpb25dXG4gIH0sICF0aGVtZS52YXJzICYmIHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2RhcmsnICYmIHtcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IGBsaW5lYXItZ3JhZGllbnQoJHthbHBoYSgnI2ZmZicsIGdldE92ZXJsYXlBbHBoYShvd25lclN0YXRlLmVsZXZhdGlvbikpfSwgJHthbHBoYSgnI2ZmZicsIGdldE92ZXJsYXlBbHBoYShvd25lclN0YXRlLmVsZXZhdGlvbikpfSlgXG4gIH0sIHRoZW1lLnZhcnMgJiYge1xuICAgIGJhY2tncm91bmRJbWFnZTogKF90aGVtZSR2YXJzJG92ZXJsYXlzID0gdGhlbWUudmFycy5vdmVybGF5cykgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR2YXJzJG92ZXJsYXlzW293bmVyU3RhdGUuZWxldmF0aW9uXVxuICB9KSk7XG59KTtcbmNvbnN0IFBhcGVyID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gUGFwZXIoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVBhcGVyJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2RpdicsXG4gICAgICBlbGV2YXRpb24gPSAxLFxuICAgICAgc3F1YXJlID0gZmFsc2UsXG4gICAgICB2YXJpYW50ID0gJ2VsZXZhdGlvbidcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBlbGV2YXRpb24sXG4gICAgc3F1YXJlLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gICAgaWYgKHRoZW1lLnNoYWRvd3NbZWxldmF0aW9uXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgZWxldmF0aW9uIHByb3ZpZGVkIDxQYXBlciBlbGV2YXRpb249eyR7ZWxldmF0aW9ufX0+IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHRoZW1lLmAsIGBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgXFxgdGhlbWUuc2hhZG93c1ske2VsZXZhdGlvbn1dXFxgIGlzIGRlZmluZWQuYF0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUGFwZXJSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IGNvbXBvbmVudCxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUGFwZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFNoYWRvdyBkZXB0aCwgY29ycmVzcG9uZHMgdG8gYGRwYCBpbiB0aGUgc3BlYy5cbiAgICogSXQgYWNjZXB0cyB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAyNCBpbmNsdXNpdmUuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIGVsZXZhdGlvbjogY2hhaW5Qcm9wVHlwZXMoaW50ZWdlclByb3BUeXBlLCBwcm9wcyA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZWxldmF0aW9uLFxuICAgICAgdmFyaWFudFxuICAgIH0gPSBwcm9wcztcbiAgICBpZiAoZWxldmF0aW9uID4gMCAmJiB2YXJpYW50ID09PSAnb3V0bGluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKGBNVUk6IENvbWJpbmluZyBcXGBlbGV2YXRpb249eyR7ZWxldmF0aW9ufX1cXGAgd2l0aCBcXGB2YXJpYW50PVwiJHt2YXJpYW50fVwiXFxgIGhhcyBubyBlZmZlY3QuIEVpdGhlciB1c2UgXFxgZWxldmF0aW9uPXswfVxcYCBvciB1c2UgYSBkaWZmZXJlbnQgXFxgdmFyaWFudFxcYC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCByb3VuZGVkIGNvcm5lcnMgYXJlIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc3F1YXJlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogQGRlZmF1bHQgJ2VsZXZhdGlvbidcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnZWxldmF0aW9uJywgJ291dGxpbmVkJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBQYXBlcjsiXSwibmFtZXMiOlsiZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3MiLCJzbG90IiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3MiLCJpbnB1dEJhc2VDbGFzc2VzIiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyIsIl9leGNsdWRlZCIsIkZpbGxlZElucHV0Um9vdCIsInN0eWxlZCIsIklucHV0QmFzZSIsInNob3VsZEZvcndhcmRQcm9wIiwicHJvcCIsIm5hbWUiLCJvdmVycmlkZXNSZXNvbHZlciIsInByb3BzIiwic3R5bGVzIiwib3duZXJTdGF0ZSIsImRpc2FibGVVbmRlcmxpbmUiLCJ1bmRlcmxpbmUiLCJ0aGVtZSIsIl9wYWxldHRlIiwibGlnaHQiLCJwYWxldHRlIiwibW9kZSIsImJvdHRvbUxpbmVDb2xvciIsImJhY2tncm91bmRDb2xvciIsImhvdmVyQmFja2dyb3VuZCIsImRpc2FibGVkQmFja2dyb3VuZCIsInBvc2l0aW9uIiwidmFycyIsIkZpbGxlZElucHV0IiwiYmciLCJib3JkZXJUb3BMZWZ0UmFkaXVzIiwic2hhcGUiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJUb3BSaWdodFJhZGl1cyIsInRyYW5zaXRpb24iLCJ0cmFuc2l0aW9ucyIsImNyZWF0ZSIsImR1cmF0aW9uIiwic2hvcnRlciIsImVhc2luZyIsImVhc2VPdXQiLCJob3ZlckJnIiwiZm9jdXNlZCIsImRpc2FibGVkIiwiZGlzYWJsZWRCZyIsImJvcmRlckJvdHRvbSIsImNvbG9yIiwibWFpbiIsImxlZnQiLCJib3R0b20iLCJjb250ZW50IiwicmlnaHQiLCJ0cmFuc2Zvcm0iLCJwb2ludGVyRXZlbnRzIiwiZXJyb3IiLCJib3JkZXJCb3R0b21Db2xvciIsImNvbW1vbiIsIm9uQmFja2dyb3VuZENoYW5uZWwiLCJvcGFjaXR5IiwiaW5wdXRVbmRlcmxpbmUiLCJ0ZXh0IiwicHJpbWFyeSIsImJvcmRlckJvdHRvbVN0eWxlIiwic3RhcnRBZG9ybm1lbnQiLCJwYWRkaW5nTGVmdCIsImVuZEFkb3JubWVudCIsInBhZGRpbmdSaWdodCIsIm11bHRpbGluZSIsInBhZGRpbmciLCJzaXplIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iLCJoaWRkZW5MYWJlbCIsIkZpbGxlZElucHV0SW5wdXQiLCJXZWJraXRCb3hTaGFkb3ciLCJXZWJraXRUZXh0RmlsbENvbG9yIiwiY2FyZXRDb2xvciIsImdldENvbG9yU2NoZW1lU2VsZWN0b3IiLCJpblByb3BzIiwicmVmIiwiX3JlZiIsIl9zbG90cyRyb290IiwiX3JlZjIiLCJfc2xvdHMkaW5wdXQiLCJ1c2VUaGVtZVByb3BzIiwiY29tcG9uZW50cyIsImNvbXBvbmVudHNQcm9wcyIsImNvbXBvbmVudHNQcm9wc1Byb3AiLCJmdWxsV2lkdGgiLCJpbnB1dENvbXBvbmVudCIsInNsb3RQcm9wcyIsInNsb3RzIiwidHlwZSIsIm90aGVyIiwiY2xhc3NlcyIsInJvb3QiLCJpbnB1dCIsImNvbXBvc2VkQ2xhc3NlcyIsImNvbXBvc2VDbGFzc2VzIiwidXNlVXRpbGl0eUNsYXNzZXMiLCJmaWxsZWRJbnB1dENvbXBvbmVudHNQcm9wcyIsImRlZXBtZXJnZSIsIlJvb3RTbG90IiwiUm9vdCIsIklucHV0U2xvdCIsIklucHV0IiwibXVpTmFtZSIsImdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMiLCJGb3JtQ29udHJvbFJvb3QiLCJjYXBpdGFsaXplIiwibWFyZ2luIiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJtaW5XaWR0aCIsImJvcmRlciIsInZlcnRpY2FsQWxpZ24iLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJ3aWR0aCIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiY29tcG9uZW50IiwidmlzdWFsbHlGb2N1c2VkIiwicmVxdWlyZWQiLCJ2YXJpYW50IiwiYWRvcm5lZFN0YXJ0Iiwic2V0QWRvcm5lZFN0YXJ0IiwiaW5pdGlhbEFkb3JuZWRTdGFydCIsImZvckVhY2giLCJjaGlsZCIsImlzTXVpRWxlbWVudCIsImZpbGxlZCIsInNldEZpbGxlZCIsImluaXRpYWxGaWxsZWQiLCJpbnB1dFByb3BzIiwiZm9jdXNlZFN0YXRlIiwic2V0Rm9jdXNlZCIsInVuZGVmaW5lZCIsInJlZ2lzdGVyRWZmZWN0IiwiY2hpbGRDb250ZXh0Iiwib25CbHVyIiwib25FbXB0eSIsIm9uRmlsbGVkIiwib25Gb2N1cyIsIkZvcm1Db250cm9sQ29udGV4dCIsIlByb3ZpZGVyIiwidmFsdWUiLCJhcyIsImNsc3giLCJmb3JtQ29udHJvbFN0YXRlIiwic3RhdGVzIiwibXVpRm9ybUNvbnRyb2wiLCJyZWR1Y2UiLCJhY2MiLCJzdGF0ZSIsInVzZUZvcm1Db250cm9sIiwiZ2V0Rm9ybUhlbHBlclRleHRVdGlsaXR5Q2xhc3NlcyIsIl9zcGFuIiwiRm9ybUhlbHBlclRleHRSb290IiwiY29udGFpbmVkIiwic2Vjb25kYXJ5IiwidHlwb2dyYXBoeSIsImNhcHRpb24iLCJ0ZXh0QWxpZ24iLCJtYXJnaW5SaWdodCIsIm1hcmdpbkxlZnQiLCJmY3MiLCJkZWZhdWx0VGhlbWUiLCJ0aGVtZUlkIiwiZ2V0R3JpZFV0aWxpdHlDbGFzcyIsIkdSSURfU0laRVMiLCJtYXAiLCJzcGFjaW5nIiwiZGlyZWN0aW9uIiwid3JhcCIsImdldE9mZnNldCIsInZhbCIsInBhcnNlIiwicGFyc2VGbG9hdCIsIlN0cmluZyIsInJlcGxhY2UiLCJleHRyYWN0WmVyb1ZhbHVlQnJlYWtwb2ludEtleXMiLCJicmVha3BvaW50cyIsInZhbHVlcyIsIm5vblplcm9LZXkiLCJPYmplY3QiLCJrZXlzIiwia2V5Iiwic29ydGVkQnJlYWtwb2ludEtleXNCeVZhbHVlIiwic29ydCIsImEiLCJiIiwic2xpY2UiLCJpbmRleE9mIiwiR3JpZFJvb3QiLCJjb250YWluZXIiLCJpdGVtIiwiemVyb01pbldpZHRoIiwic3BhY2luZ1N0eWxlcyIsIk51bWJlciIsImlzTmFOIiwiYnJlYWtwb2ludCIsInB1c2giLCJyZXNvbHZlU3BhY2luZ1N0eWxlcyIsImJyZWFrcG9pbnRzU3R5bGVzIiwiYm94U2l6aW5nIiwiZmxleFdyYXAiLCJkaXJlY3Rpb25WYWx1ZXMiLCJwcm9wVmFsdWUiLCJvdXRwdXQiLCJtYXhXaWR0aCIsInJvd1NwYWNpbmciLCJyb3dTcGFjaW5nVmFsdWVzIiwiemVyb1ZhbHVlQnJlYWtwb2ludEtleXMiLCJfemVyb1ZhbHVlQnJlYWtwb2ludEsiLCJ0aGVtZVNwYWNpbmciLCJpbmNsdWRlcyIsImNvbHVtblNwYWNpbmciLCJjb2x1bW5TcGFjaW5nVmFsdWVzIiwiX3plcm9WYWx1ZUJyZWFrcG9pbnRLMiIsImdsb2JhbFN0eWxlcyIsImZsZXhCYXNpcyIsImZsZXhHcm93IiwiZmxleFNocmluayIsImNvbHVtbnNCcmVha3BvaW50VmFsdWVzIiwiY29sdW1ucyIsImNvbHVtblZhbHVlIiwiTWF0aCIsInJvdW5kIiwibW9yZSIsImFzc2lnbiIsInVwIiwiR3JpZCIsInRoZW1lUHJvcHMiLCJ1c2VUaGVtZSIsImV4dGVuZFN4UHJvcCIsImNvbHVtbnNQcm9wIiwiY29sdW1uU3BhY2luZ1Byb3AiLCJyb3dTcGFjaW5nUHJvcCIsImNvbHVtbnNDb250ZXh0IiwiYnJlYWtwb2ludHNWYWx1ZXMiLCJvdGhlckZpbHRlcmVkIiwic3BhY2luZ0NsYXNzZXMiLCJyZXNvbHZlU3BhY2luZ0NsYXNzZXMiLCJicmVha3BvaW50c0NsYXNzZXMiLCJnZXRJbnB1dFV0aWxpdHlDbGFzcyIsIklucHV0Um9vdCIsImZvcm1Db250cm9sIiwiSW5wdXRJbnB1dCIsImlucHV0Q29tcG9uZW50c1Byb3BzIiwicm9vdE92ZXJyaWRlc1Jlc29sdmVyIiwiYWRvcm5lZEVuZCIsInNpemVTbWFsbCIsImlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIiLCJpbnB1dFNpemVTbWFsbCIsImlucHV0TXVsdGlsaW5lIiwiaW5wdXRUeXBlU2VhcmNoIiwiaW5wdXRBZG9ybmVkU3RhcnQiLCJpbnB1dEFkb3JuZWRFbmQiLCJpbnB1dEhpZGRlbkxhYmVsIiwiSW5wdXRCYXNlUm9vdCIsImJvZHkxIiwibGluZUhlaWdodCIsImN1cnNvciIsImFsaWduSXRlbXMiLCJJbnB1dEJhc2VDb21wb25lbnQiLCJwbGFjZWhvbGRlciIsImlucHV0UGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlckhpZGRlbiIsInBsYWNlaG9sZGVyVmlzaWJsZSIsImZvbnQiLCJsZXR0ZXJTcGFjaW5nIiwiYmFja2dyb3VuZCIsImhlaWdodCIsIldlYmtpdFRhcEhpZ2hsaWdodENvbG9yIiwiYW5pbWF0aW9uTmFtZSIsImFuaW1hdGlvbkR1cmF0aW9uIiwib3V0bGluZSIsImJveFNoYWRvdyIsIldlYmtpdEFwcGVhcmFuY2UiLCJyZXNpemUiLCJNb3pBcHBlYXJhbmNlIiwiaW5wdXRHbG9iYWxTdHlsZXMiLCJmcm9tIiwiX3Nsb3RQcm9wcyRpbnB1dCIsImFyaWFEZXNjcmliZWRieSIsImF1dG9Db21wbGV0ZSIsImF1dG9Gb2N1cyIsImRlZmF1bHRWYWx1ZSIsImRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXMiLCJpZCIsImlucHV0UHJvcHNQcm9wIiwiaW5wdXRSZWYiLCJpbnB1dFJlZlByb3AiLCJtYXhSb3dzIiwibWluUm93cyIsIm9uQ2hhbmdlIiwib25DbGljayIsIm9uS2V5RG93biIsIm9uS2V5VXAiLCJyZWFkT25seSIsInJlbmRlclN1ZmZpeCIsInJvd3MiLCJ2YWx1ZVByb3AiLCJjdXJyZW50IiwiaXNDb250cm9sbGVkIiwiaGFuZGxlSW5wdXRSZWZXYXJuaW5nIiwiaW5zdGFuY2UiLCJoYW5kbGVJbnB1dFJlZiIsImNoZWNrRGlydHkiLCJvYmoiLCJJbnB1dENvbXBvbmVudCIsIkJvb2xlYW4iLCJyb290UHJvcHMiLCJldmVudCIsImN1cnJlbnRUYXJnZXQiLCJ0YXJnZXQiLCJmb2N1cyIsIm9uQW5pbWF0aW9uU3RhcnQiLCJhcmdzIiwiZWxlbWVudCIsIkVycm9yIiwic3RvcFByb3BhZ2F0aW9uIiwiZ2V0SW5wdXRCYXNlVXRpbGl0eUNsYXNzIiwiaGFzVmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJpc0ZpbGxlZCIsIlNTUiIsImlzQWRvcm5lZFN0YXJ0IiwiZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMiLCJGb3JtTGFiZWxSb290IiwiY29sb3JTZWNvbmRhcnkiLCJBc3Rlcmlza0NvbXBvbmVudCIsImFzdGVyaXNrIiwiZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzIiwiSW5wdXRMYWJlbFJvb3QiLCJzaHJpbmsiLCJkaXNhYmxlQW5pbWF0aW9uIiwiYW5pbWF0ZWQiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJ3aGl0ZVNwYWNlIiwib3ZlcmZsb3ciLCJ0ZXh0T3ZlcmZsb3ciLCJ0b3AiLCJ6SW5kZXgiLCJ1c2VyU2VsZWN0Iiwic2hyaW5rUHJvcCIsImdldExpc3RVdGlsaXR5Q2xhc3MiLCJMaXN0Um9vdCIsImRpc2FibGVQYWRkaW5nIiwiZGVuc2UiLCJzdWJoZWFkZXIiLCJsaXN0U3R5bGUiLCJjb250ZXh0IiwiTGlzdENvbnRleHQiLCJuZXh0SXRlbSIsImxpc3QiLCJkaXNhYmxlTGlzdFdyYXAiLCJmaXJzdENoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNJdGVtIiwibGFzdENoaWxkIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsInRleHRDcml0ZXJpYU1hdGNoZXMiLCJuZXh0Rm9jdXMiLCJ0ZXh0Q3JpdGVyaWEiLCJpbm5lclRleHQiLCJ0ZXh0Q29udGVudCIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInJlcGVhdGluZyIsImpvaW4iLCJtb3ZlRm9jdXMiLCJjdXJyZW50Rm9jdXMiLCJkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlIiwidHJhdmVyc2FsRnVuY3Rpb24iLCJ3cmFwcGVkT25jZSIsIm5leHRGb2N1c0Rpc2FibGVkIiwiZ2V0QXR0cmlidXRlIiwiaGFzQXR0cmlidXRlIiwiYWN0aW9ucyIsImF1dG9Gb2N1c0l0ZW0iLCJsaXN0UmVmIiwidGV4dENyaXRlcmlhUmVmIiwicHJldmlvdXNLZXlNYXRjaGVkIiwibGFzdFRpbWUiLCJ1c2VFbmhhbmNlZEVmZmVjdCIsImFkanVzdFN0eWxlRm9yU2Nyb2xsYmFyIiwiY29udGFpbmVyRWxlbWVudCIsIm5vRXhwbGljaXRXaWR0aCIsInN0eWxlIiwiY2xpZW50SGVpZ2h0Iiwic2Nyb2xsYmFyU2l6ZSIsImdldFNjcm9sbGJhclNpemUiLCJvd25lckRvY3VtZW50IiwiaGFuZGxlUmVmIiwidXNlRm9ya1JlZiIsImFjdGl2ZUl0ZW1JbmRleCIsImluZGV4Iiwic2VsZWN0ZWQiLCJtdWlTa2lwTGlzdEhpZ2hsaWdodCIsIml0ZW1zIiwibmV3Q2hpbGRQcm9wcyIsInRhYkluZGV4Iiwicm9sZSIsImFjdGl2ZUVsZW1lbnQiLCJwcmV2ZW50RGVmYXVsdCIsImNyaXRlcmlhIiwibG93ZXJLZXkiLCJjdXJyVGltZSIsInBlcmZvcm1hbmNlIiwibm93Iiwia2VlcEZvY3VzT25DdXJyZW50IiwiZ2V0U2NhbGUiLCJlbnRlcmluZyIsImVudGVyZWQiLCJpc1dlYktpdDE1NCIsIm5hdmlnYXRvciIsInRlc3QiLCJ1c2VyQWdlbnQiLCJHcm93IiwiYWRkRW5kTGlzdGVuZXIiLCJhcHBlYXIiLCJpbiIsImluUHJvcCIsIm9uRW50ZXIiLCJvbkVudGVyZWQiLCJvbkVudGVyaW5nIiwib25FeGl0Iiwib25FeGl0ZWQiLCJvbkV4aXRpbmciLCJ0aW1lb3V0IiwiVHJhbnNpdGlvbkNvbXBvbmVudCIsIlRyYW5zaXRpb24iLCJ0aW1lciIsImF1dG9UaW1lb3V0Iiwibm9kZVJlZiIsIm5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2siLCJjYWxsYmFjayIsIm1heWJlSXNBcHBlYXJpbmciLCJub2RlIiwiaGFuZGxlRW50ZXJpbmciLCJoYW5kbGVFbnRlciIsImlzQXBwZWFyaW5nIiwidHJhbnNpdGlvbkR1cmF0aW9uIiwiZGVsYXkiLCJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24iLCJnZXRBdXRvSGVpZ2h0RHVyYXRpb24iLCJoYW5kbGVFbnRlcmVkIiwiaGFuZGxlRXhpdGluZyIsImhhbmRsZUV4aXQiLCJoYW5kbGVFeGl0ZWQiLCJjbGVhclRpbWVvdXQiLCJuZXh0Iiwic2V0VGltZW91dCIsImNoaWxkUHJvcHMiLCJ2aXNpYmlsaXR5IiwibXVpU3VwcG9ydEF1dG8iLCJnZXRNb2RhbFV0aWxpdHlDbGFzcyIsIk1vZGFsUm9vdCIsIm9wZW4iLCJleGl0ZWQiLCJoaWRkZW4iLCJtb2RhbCIsIk1vZGFsQmFja2Ryb3AiLCJCYWNrZHJvcCIsImJhY2tkcm9wIiwiX3Nsb3RzJGJhY2tkcm9wIiwiX3Nsb3RQcm9wcyRyb290IiwiX3Nsb3RQcm9wcyRiYWNrZHJvcCIsIkJhY2tkcm9wQ29tcG9uZW50IiwiQmFja2Ryb3BQcm9wcyIsImNsb3NlQWZ0ZXJUcmFuc2l0aW9uIiwiZGlzYWJsZUF1dG9Gb2N1cyIsImRpc2FibGVFbmZvcmNlRm9jdXMiLCJkaXNhYmxlRXNjYXBlS2V5RG93biIsImRpc2FibGVQb3J0YWwiLCJkaXNhYmxlUmVzdG9yZUZvY3VzIiwiZGlzYWJsZVNjcm9sbExvY2siLCJoaWRlQmFja2Ryb3AiLCJrZWVwTW91bnRlZCIsIm9uQmFja2Ryb3BDbGljayIsInByb3BzV2l0aERlZmF1bHRzIiwiZ2V0Um9vdFByb3BzIiwiZ2V0QmFja2Ryb3BQcm9wcyIsImdldFRyYW5zaXRpb25Qcm9wcyIsInBvcnRhbFJlZiIsImlzVG9wTW9kYWwiLCJoYXNUcmFuc2l0aW9uIiwidXNlTW9kYWwiLCJyb290UmVmIiwiQmFja2Ryb3BTbG90Iiwicm9vdFNsb3RQcm9wcyIsImJhY2tkcm9wU2xvdFByb3BzIiwidXNlU2xvdFByb3BzIiwiZWxlbWVudFR5cGUiLCJleHRlcm5hbFNsb3RQcm9wcyIsImV4dGVybmFsRm9yd2FyZGVkUHJvcHMiLCJnZXRTbG90UHJvcHMiLCJhZGRpdGlvbmFsUHJvcHMiLCJiYWNrZHJvcFByb3BzIiwib3RoZXJIYW5kbGVycyIsImUiLCJQb3J0YWwiLCJGb2N1c1RyYXAiLCJpc0VuYWJsZWQiLCJnZXRQb3BvdmVyVXRpbGl0eUNsYXNzIiwiX2V4Y2x1ZGVkMiIsIl9leGNsdWRlZDMiLCJnZXRPZmZzZXRUb3AiLCJyZWN0IiwidmVydGljYWwiLCJvZmZzZXQiLCJnZXRPZmZzZXRMZWZ0IiwiaG9yaXpvbnRhbCIsImdldFRyYW5zZm9ybU9yaWdpblZhbHVlIiwibiIsInJlc29sdmVBbmNob3JFbCIsImFuY2hvckVsIiwiUG9wb3ZlclJvb3QiLCJQb3BvdmVyUGFwZXIiLCJQYXBlciIsInBhcGVyIiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwiX3Nsb3RQcm9wcyRwYXBlciIsIl9zbG90cyRwYXBlciIsImFjdGlvbiIsImFuY2hvck9yaWdpbiIsImFuY2hvclBvc2l0aW9uIiwiYW5jaG9yUmVmZXJlbmNlIiwiY29udGFpbmVyUHJvcCIsImVsZXZhdGlvbiIsIm1hcmdpblRocmVzaG9sZCIsIlBhcGVyUHJvcHMiLCJQYXBlclByb3BzUHJvcCIsInRyYW5zaXRpb25EdXJhdGlvblByb3AiLCJUcmFuc2l0aW9uUHJvcHMiLCJleHRlcm5hbFBhcGVyU2xvdFByb3BzIiwicGFwZXJSZWYiLCJoYW5kbGVQYXBlclJlZiIsImdldEFuY2hvck9mZnNldCIsInJlc29sdmVkQW5jaG9yRWwiLCJhbmNob3JSZWN0Iiwibm9kZVR5cGUiLCJib2R5IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0VHJhbnNmb3JtT3JpZ2luIiwiZWxlbVJlY3QiLCJnZXRQb3NpdGlvbmluZ1N0eWxlIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJlbGVtVHJhbnNmb3JtT3JpZ2luIiwiYW5jaG9yT2Zmc2V0IiwiY29udGFpbmVyV2luZG93Iiwib3duZXJXaW5kb3ciLCJoZWlnaHRUaHJlc2hvbGQiLCJpbm5lckhlaWdodCIsIndpZHRoVGhyZXNob2xkIiwiaW5uZXJXaWR0aCIsImRpZmYiLCJpc1Bvc2l0aW9uZWQiLCJzZXRJc1Bvc2l0aW9uZWQiLCJzZXRQb3NpdGlvbmluZ1N0eWxlcyIsInBvc2l0aW9uaW5nIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ1cGRhdGVQb3NpdGlvbiIsImhhbmRsZVJlc2l6ZSIsImRlYm91bmNlIiwiY2xlYXIiLCJQYXBlclNsb3QiLCJwYXBlclByb3BzIiwiX3VzZVNsb3RQcm9wcyIsImludmlzaWJsZSIsInJvb3RTbG90UHJvcHNQcm9wIiwiaXNIb3N0Q29tcG9uZW50IiwiZ2V0TWVudVV0aWxpdHlDbGFzcyIsIlJUTF9PUklHSU4iLCJMVFJfT1JJR0lOIiwiTWVudVJvb3QiLCJNZW51UGFwZXIiLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsIk1lbnVNZW51TGlzdCIsImRpc2FibGVBdXRvRm9jdXNJdGVtIiwiTWVudUxpc3RQcm9wcyIsIm9uQ2xvc2UiLCJQb3BvdmVyQ2xhc3NlcyIsImlzUnRsIiwibWVudUxpc3RBY3Rpb25zUmVmIiwicGFwZXJFeHRlcm5hbFNsb3RQcm9wcyIsInBhcGVyU2xvdFByb3BzIiwiZ2V0TWVudUl0ZW1VdGlsaXR5Q2xhc3MiLCJNZW51SXRlbVJvb3QiLCJCdXR0b25CYXNlIiwiZGl2aWRlciIsImRpc2FibGVHdXR0ZXJzIiwiZ3V0dGVycyIsImp1c3RpZnlDb250ZW50IiwidGV4dERlY29yYXRpb24iLCJiYWNrZ3JvdW5kQ2xpcCIsImhvdmVyIiwibWFpbkNoYW5uZWwiLCJzZWxlY3RlZE9wYWNpdHkiLCJmb2N1c1Zpc2libGUiLCJmb2N1c09wYWNpdHkiLCJob3Zlck9wYWNpdHkiLCJkaXNhYmxlZE9wYWNpdHkiLCJkaXZpZGVyQ2xhc3NlcyIsImluc2V0IiwiYm9keTIiLCJmb250U2l6ZSIsImZvY3VzVmlzaWJsZUNsYXNzTmFtZSIsInRhYkluZGV4UHJvcCIsIm1lbnVJdGVtUmVmIiwiZ2V0TmF0aXZlU2VsZWN0VXRpbGl0eUNsYXNzZXMiLCJuYXRpdmVTZWxlY3RTZWxlY3RTdHlsZXMiLCJOYXRpdmVTZWxlY3RTZWxlY3QiLCJzZWxlY3QiLCJtdWx0aXBsZSIsIm5hdGl2ZVNlbGVjdEljb25TdHlsZXMiLCJhY3RpdmUiLCJOYXRpdmVTZWxlY3RJY29uIiwiaWNvbiIsImljb25PcGVuIiwiSWNvbkNvbXBvbmVudCIsIk5vdGNoZWRPdXRsaW5lUm9vdCIsImJvcmRlclN0eWxlIiwiYm9yZGVyV2lkdGgiLCJOb3RjaGVkT3V0bGluZUxlZ2VuZCIsImZsb2F0Iiwid2l0aExhYmVsIiwibm90Y2hlZCIsImdldE91dGxpbmVkSW5wdXRVdGlsaXR5Q2xhc3MiLCJPdXRsaW5lZElucHV0Um9vdCIsImJvcmRlckNvbG9yIiwibm90Y2hlZE91dGxpbmUiLCJsYWJlbCIsIk91dGxpbmVkSW5wdXRJbnB1dCIsIk91dGxpbmVkSW5wdXQiLCJfUmVhY3QkRnJhZ21lbnQiLCJnZXRQYXBlclV0aWxpdHlDbGFzcyIsIlBhcGVyUm9vdCIsInNxdWFyZSIsInJvdW5kZWQiLCJfdGhlbWUkdmFycyRvdmVybGF5cyIsInNoYWRvd3MiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJnZXRPdmVybGF5QWxwaGEiLCJvdmVybGF5cyJdLCJzb3VyY2VSb290IjoiIn0=