"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[95],{8161:(e,t,o)=>{o.d(t,{A:()=>c});var r=o(7413),n=o(9071),a=o(3478),i=o(8312);const s=(0,o(8413).A)("MuiBox",["root"]),l=(0,a.A)(),c=(0,r.A)({themeId:i.A,defaultTheme:l,defaultClassName:s.root,generateClassName:n.A.generate})},6612:(e,t,o)=>{o.d(t,{A:()=>$});var r=o(8168),n=o(8587),a=o(6540),i=(o(4363),o(4164)),s=o(5659),l=o(7339),c=o(1848),d=o(3541),u=o(4073),p=o(4279),h=o(6147),m=o(8850),v=o(4848);const g=["slots","slotProps"],f=(0,c.Ay)(m.A)((({theme:e})=>(0,r.A)({display:"flex",marginLeft:`calc(${e.spacing(1)} * 0.5)`,marginRight:`calc(${e.spacing(1)} * 0.5)`},"light"===e.palette.mode?{backgroundColor:e.palette.grey[100],color:e.palette.grey[700]}:{backgroundColor:e.palette.grey[700],color:e.palette.grey[100]},{borderRadius:2,"&:hover, &:focus":(0,r.A)({},"light"===e.palette.mode?{backgroundColor:e.palette.grey[200]}:{backgroundColor:e.palette.grey[600]}),"&:active":(0,r.A)({boxShadow:e.shadows[0]},"light"===e.palette.mode?{backgroundColor:(0,p.tL)(e.palette.grey[200],.12)}:{backgroundColor:(0,p.tL)(e.palette.grey[600],.12)})}))),b=(0,c.Ay)(h.A)({width:24,height:16}),x=function(e){const{slots:t={},slotProps:o={}}=e,a=(0,n.A)(e,g),i=e;return(0,v.jsx)("li",{children:(0,v.jsx)(f,(0,r.A)({focusRipple:!0},a,{ownerState:i,children:(0,v.jsx)(b,(0,r.A)({as:t.CollapsedIcon,ownerState:i},o.collapsedIcon))}))})};var y=o(8413),A=o(1609);function S(e){return(0,A.A)("MuiBreadcrumbs",e)}const C=(0,y.A)("MuiBreadcrumbs",["root","ol","li","separator"]),k=["children","className","component","slots","slotProps","expandText","itemsAfterCollapse","itemsBeforeCollapse","maxItems","separator"],w=(0,c.Ay)(u.A,{name:"MuiBreadcrumbs",slot:"Root",overridesResolver:(e,t)=>[{[`& .${C.li}`]:t.li},t.root]})({}),R=(0,c.Ay)("ol",{name:"MuiBreadcrumbs",slot:"Ol",overridesResolver:(e,t)=>t.ol})({display:"flex",flexWrap:"wrap",alignItems:"center",padding:0,margin:0,listStyle:"none"}),z=(0,c.Ay)("li",{name:"MuiBreadcrumbs",slot:"Separator",overridesResolver:(e,t)=>t.separator})({display:"flex",userSelect:"none",marginLeft:8,marginRight:8});function M(e,t,o,r){return e.reduce(((n,a,i)=>(i{const{classes:t}=e;return(0,s.A)({root:["root"],li:["li"],ol:["ol"],separator:["separator"]},S,t)})(I),T=(0,l.Q)({elementType:h.CollapsedIcon,externalSlotProps:m.collapsedIcon,ownerState:I}),B=a.useRef(null),P=a.Children.toArray(c).filter((e=>a.isValidElement(e))).map(((e,t)=>(0,v.jsx)("li",{className:E.li,children:e},`child-${t}`)));return(0,v.jsx)(w,(0,r.A)({ref:t,component:p,color:"text.secondary",className:(0,i.A)(E.root,u),ownerState:I},C,{children:(0,v.jsx)(R,{className:E.ol,ref:B,ownerState:I,children:M(z||y&&P.length<=y?P:(e=>b+f>=e.length?e:[...e.slice(0,b),(0,v.jsx)(x,{"aria-label":g,slots:{CollapsedIcon:h.CollapsedIcon},slotProps:{collapsedIcon:T},onClick:()=>{$(!0);const e=B.current.querySelector("a[href],button,[tabindex]");e&&e.focus()}},"ellipsis"),...e.slice(e.length-f,e.length)])(P),E.separator,A,I)})}))}))},6990:(e,t,o)=>{o.d(t,{A:()=>R});var r=o(8587),n=o(8168),a=o(6540),i=o(4164),s=o(3726),l=o(5659),c=o(4279),d=o(1848),u=o(3541),p=o(8850),h=o(8466),m=o(8413),v=o(1609);function g(e){return(0,v.A)("MuiButton",e)}const f=(0,m.A)("MuiButton",["root","text","textInherit","textPrimary","textSecondary","textSuccess","textError","textInfo","textWarning","outlined","outlinedInherit","outlinedPrimary","outlinedSecondary","outlinedSuccess","outlinedError","outlinedInfo","outlinedWarning","contained","containedInherit","containedPrimary","containedSecondary","containedSuccess","containedError","containedInfo","containedWarning","disableElevation","focusVisible","disabled","colorInherit","textSizeSmall","textSizeMedium","textSizeLarge","outlinedSizeSmall","outlinedSizeMedium","outlinedSizeLarge","containedSizeSmall","containedSizeMedium","containedSizeLarge","sizeMedium","sizeSmall","sizeLarge","fullWidth","startIcon","endIcon","iconSizeSmall","iconSizeMedium","iconSizeLarge"]),b=a.createContext({}),x=a.createContext(void 0);var y=o(4848);const A=["children","color","component","className","disabled","disableElevation","disableFocusRipple","endIcon","focusVisibleClassName","fullWidth","size","startIcon","type","variant"],S=e=>(0,n.A)({},"small"===e.size&&{"& > *:nth-of-type(1)":{fontSize:18}},"medium"===e.size&&{"& > *:nth-of-type(1)":{fontSize:20}},"large"===e.size&&{"& > *:nth-of-type(1)":{fontSize:22}}),C=(0,d.Ay)(p.A,{shouldForwardProp:e=>(0,d.ep)(e)||"classes"===e,name:"MuiButton",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[o.variant],t[`${o.variant}${(0,h.A)(o.color)}`],t[`size${(0,h.A)(o.size)}`],t[`${o.variant}Size${(0,h.A)(o.size)}`],"inherit"===o.color&&t.colorInherit,o.disableElevation&&t.disableElevation,o.fullWidth&&t.fullWidth]}})((({theme:e,ownerState:t})=>{var o,r;const a="light"===e.palette.mode?e.palette.grey[300]:e.palette.grey[800],i="light"===e.palette.mode?e.palette.grey.A100:e.palette.grey[700];return(0,n.A)({},e.typography.button,{minWidth:64,padding:"6px 16px",borderRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create(["background-color","box-shadow","border-color","color"],{duration:e.transitions.duration.short}),"&:hover":(0,n.A)({textDecoration:"none",backgroundColor:e.vars?`rgba(${e.vars.palette.text.primaryChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,c.X4)(e.palette.text.primary,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"text"===t.variant&&"inherit"!==t.color&&{backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,c.X4)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"outlined"===t.variant&&"inherit"!==t.color&&{border:`1px solid ${(e.vars||e).palette[t.color].main}`,backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,c.X4)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"contained"===t.variant&&{backgroundColor:e.vars?e.vars.palette.Button.inheritContainedHoverBg:i,boxShadow:(e.vars||e).shadows[4],"@media (hover: none)":{boxShadow:(e.vars||e).shadows[2],backgroundColor:(e.vars||e).palette.grey[300]}},"contained"===t.variant&&"inherit"!==t.color&&{backgroundColor:(e.vars||e).palette[t.color].dark,"@media (hover: none)":{backgroundColor:(e.vars||e).palette[t.color].main}}),"&:active":(0,n.A)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[8]}),[`&.${f.focusVisible}`]:(0,n.A)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[6]}),[`&.${f.disabled}`]:(0,n.A)({color:(e.vars||e).palette.action.disabled},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.action.disabledBackground}`},"contained"===t.variant&&{color:(e.vars||e).palette.action.disabled,boxShadow:(e.vars||e).shadows[0],backgroundColor:(e.vars||e).palette.action.disabledBackground})},"text"===t.variant&&{padding:"6px 8px"},"text"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main},"outlined"===t.variant&&{padding:"5px 15px",border:"1px solid currentColor"},"outlined"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main,border:e.vars?`1px solid rgba(${e.vars.palette[t.color].mainChannel} / 0.5)`:`1px solid ${(0,c.X4)(e.palette[t.color].main,.5)}`},"contained"===t.variant&&{color:e.vars?e.vars.palette.text.primary:null==(o=(r=e.palette).getContrastText)?void 0:o.call(r,e.palette.grey[300]),backgroundColor:e.vars?e.vars.palette.Button.inheritContainedBg:a,boxShadow:(e.vars||e).shadows[2]},"contained"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].contrastText,backgroundColor:(e.vars||e).palette[t.color].main},"inherit"===t.color&&{color:"inherit",borderColor:"currentColor"},"small"===t.size&&"text"===t.variant&&{padding:"4px 5px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"text"===t.variant&&{padding:"8px 11px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"outlined"===t.variant&&{padding:"3px 9px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"outlined"===t.variant&&{padding:"7px 21px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"contained"===t.variant&&{padding:"4px 10px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"contained"===t.variant&&{padding:"8px 22px",fontSize:e.typography.pxToRem(15)},t.fullWidth&&{width:"100%"})}),(({ownerState:e})=>e.disableElevation&&{boxShadow:"none","&:hover":{boxShadow:"none"},[`&.${f.focusVisible}`]:{boxShadow:"none"},"&:active":{boxShadow:"none"},[`&.${f.disabled}`]:{boxShadow:"none"}})),k=(0,d.Ay)("span",{name:"MuiButton",slot:"StartIcon",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.startIcon,t[`iconSize${(0,h.A)(o.size)}`]]}})((({ownerState:e})=>(0,n.A)({display:"inherit",marginRight:8,marginLeft:-4},"small"===e.size&&{marginLeft:-2},S(e)))),w=(0,d.Ay)("span",{name:"MuiButton",slot:"EndIcon",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.endIcon,t[`iconSize${(0,h.A)(o.size)}`]]}})((({ownerState:e})=>(0,n.A)({display:"inherit",marginRight:-4,marginLeft:8},"small"===e.size&&{marginRight:-2},S(e)))),R=a.forwardRef((function(e,t){const o=a.useContext(b),c=a.useContext(x),d=(0,s.A)(o,e),p=(0,u.A)({props:d,name:"MuiButton"}),{children:m,color:v="primary",component:f="button",className:S,disabled:R=!1,disableElevation:z=!1,disableFocusRipple:M=!1,endIcon:$,focusVisibleClassName:I,fullWidth:E=!1,size:T="medium",startIcon:B,type:P,variant:N="text"}=p,L=(0,r.A)(p,A),j=(0,n.A)({},p,{color:v,component:f,disabled:R,disableElevation:z,disableFocusRipple:M,fullWidth:E,size:T,type:P,variant:N}),V=(e=>{const{color:t,disableElevation:o,fullWidth:r,size:a,variant:i,classes:s}=e,c={root:["root",i,`${i}${(0,h.A)(t)}`,`size${(0,h.A)(a)}`,`${i}Size${(0,h.A)(a)}`,"inherit"===t&&"colorInherit",o&&"disableElevation",r&&"fullWidth"],label:["label"],startIcon:["startIcon",`iconSize${(0,h.A)(a)}`],endIcon:["endIcon",`iconSize${(0,h.A)(a)}`]},d=(0,l.A)(c,g,s);return(0,n.A)({},s,d)})(j),W=B&&(0,y.jsx)(k,{className:V.startIcon,ownerState:j,children:B}),D=$&&(0,y.jsx)(w,{className:V.endIcon,ownerState:j,children:$}),F=c||"";return(0,y.jsxs)(C,(0,n.A)({ownerState:j,className:(0,i.A)(o.className,V.root,S,F),component:f,disabled:R,focusRipple:!M,focusVisibleClassName:(0,i.A)(V.focusVisible,I),ref:t,type:P},L,{classes:V,children:[W,m,D]}))}))},8850:(e,t,o)=>{o.d(t,{A:()=>N});var r=o(8168),n=o(8587),a=o(6540),i=o(4164),s=o(5659),l=o(1848),c=o(3541),d=o(6852),u=o(3034),p=o(8851),h=o(2618),m=o(7437),v=o(4848);var g=o(8413);const f=(0,g.A)("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),b=["center","classes","className"];let x,y,A,S,C=e=>e;const k=(0,m.i7)(x||(x=C` 0% { transform: scale(0); opacity: 0.1; } 100% { transform: scale(1); opacity: 0.3; } `)),w=(0,m.i7)(y||(y=C` 0% { opacity: 1; } 100% { opacity: 0; } `)),R=(0,m.i7)(A||(A=C` 0% { transform: scale(1); } 50% { transform: scale(0.92); } 100% { transform: scale(1); } `)),z=(0,l.Ay)("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),M=(0,l.Ay)((function(e){const{className:t,classes:o,pulsate:r=!1,rippleX:n,rippleY:s,rippleSize:l,in:c,onExited:d,timeout:u}=e,[p,h]=a.useState(!1),m=(0,i.A)(t,o.ripple,o.rippleVisible,r&&o.ripplePulsate),g={width:l,height:l,top:-l/2+s,left:-l/2+n},f=(0,i.A)(o.child,p&&o.childLeaving,r&&o.childPulsate);return c||p||h(!0),a.useEffect((()=>{if(!c&&null!=d){const e=setTimeout(d,u);return()=>{clearTimeout(e)}}}),[d,c,u]),(0,v.jsx)("span",{className:m,style:g,children:(0,v.jsx)("span",{className:f})})}),{name:"MuiTouchRipple",slot:"Ripple"})(S||(S=C` opacity: 0; position: absolute; &.${0} { opacity: 0.3; transform: scale(1); animation-name: ${0}; animation-duration: ${0}ms; animation-timing-function: ${0}; } &.${0} { animation-duration: ${0}ms; } & .${0} { opacity: 1; display: block; width: 100%; height: 100%; border-radius: 50%; background-color: currentColor; } & .${0} { opacity: 0; animation-name: ${0}; animation-duration: ${0}ms; animation-timing-function: ${0}; } & .${0} { position: absolute; /* @noflip */ left: 0px; top: 0; animation-name: ${0}; animation-duration: 2500ms; animation-timing-function: ${0}; animation-iteration-count: infinite; animation-delay: 200ms; } `),f.rippleVisible,k,550,(({theme:e})=>e.transitions.easing.easeInOut),f.ripplePulsate,(({theme:e})=>e.transitions.duration.shorter),f.child,f.childLeaving,w,550,(({theme:e})=>e.transitions.easing.easeInOut),f.childPulsate,R,(({theme:e})=>e.transitions.easing.easeInOut)),$=a.forwardRef((function(e,t){const o=(0,c.A)({props:e,name:"MuiTouchRipple"}),{center:s=!1,classes:l={},className:d}=o,u=(0,n.A)(o,b),[p,m]=a.useState([]),g=a.useRef(0),x=a.useRef(null);a.useEffect((()=>{x.current&&(x.current(),x.current=null)}),[p]);const y=a.useRef(!1),A=a.useRef(0),S=a.useRef(null),C=a.useRef(null);a.useEffect((()=>()=>{A.current&&clearTimeout(A.current)}),[]);const k=a.useCallback((e=>{const{pulsate:t,rippleX:o,rippleY:r,rippleSize:n,cb:a}=e;m((e=>[...e,(0,v.jsx)(M,{classes:{ripple:(0,i.A)(l.ripple,f.ripple),rippleVisible:(0,i.A)(l.rippleVisible,f.rippleVisible),ripplePulsate:(0,i.A)(l.ripplePulsate,f.ripplePulsate),child:(0,i.A)(l.child,f.child),childLeaving:(0,i.A)(l.childLeaving,f.childLeaving),childPulsate:(0,i.A)(l.childPulsate,f.childPulsate)},timeout:550,pulsate:t,rippleX:o,rippleY:r,rippleSize:n},g.current)])),g.current+=1,x.current=a}),[l]),w=a.useCallback(((e={},t={},o=(()=>{}))=>{const{pulsate:r=!1,center:n=s||t.pulsate,fakeElement:a=!1}=t;if("mousedown"===(null==e?void 0:e.type)&&y.current)return void(y.current=!1);"touchstart"===(null==e?void 0:e.type)&&(y.current=!0);const i=a?null:C.current,l=i?i.getBoundingClientRect():{width:0,height:0,left:0,top:0};let c,d,u;if(n||void 0===e||0===e.clientX&&0===e.clientY||!e.clientX&&!e.touches)c=Math.round(l.width/2),d=Math.round(l.height/2);else{const{clientX:t,clientY:o}=e.touches&&e.touches.length>0?e.touches[0]:e;c=Math.round(t-l.left),d=Math.round(o-l.top)}if(n)u=Math.sqrt((2*l.width**2+l.height**2)/3),u%2==0&&(u+=1);else{const e=2*Math.max(Math.abs((i?i.clientWidth:0)-c),c)+2,t=2*Math.max(Math.abs((i?i.clientHeight:0)-d),d)+2;u=Math.sqrt(e**2+t**2)}null!=e&&e.touches?null===S.current&&(S.current=()=>{k({pulsate:r,rippleX:c,rippleY:d,rippleSize:u,cb:o})},A.current=setTimeout((()=>{S.current&&(S.current(),S.current=null)}),80)):k({pulsate:r,rippleX:c,rippleY:d,rippleSize:u,cb:o})}),[s,k]),R=a.useCallback((()=>{w({},{pulsate:!0})}),[w]),$=a.useCallback(((e,t)=>{if(clearTimeout(A.current),"touchend"===(null==e?void 0:e.type)&&S.current)return S.current(),S.current=null,void(A.current=setTimeout((()=>{$(e,t)})));S.current=null,m((e=>e.length>0?e.slice(1):e)),x.current=t}),[]);return a.useImperativeHandle(t,(()=>({pulsate:R,start:w,stop:$})),[R,w,$]),(0,v.jsx)(z,(0,r.A)({className:(0,i.A)(f.root,l.root,d),ref:C},u,{children:(0,v.jsx)(h.A,{component:null,exit:!0,children:p})}))}));var I=o(1609);function E(e){return(0,I.A)("MuiButtonBase",e)}const T=(0,g.A)("MuiButtonBase",["root","disabled","focusVisible"]),B=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],P=(0,l.Ay)("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(e,t)=>t.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${T.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),N=a.forwardRef((function(e,t){const o=(0,c.A)({props:e,name:"MuiButtonBase"}),{action:l,centerRipple:h=!1,children:m,className:g,component:f="button",disabled:b=!1,disableRipple:x=!1,disableTouchRipple:y=!1,focusRipple:A=!1,LinkComponent:S="a",onBlur:C,onClick:k,onContextMenu:w,onDragLeave:R,onFocus:z,onFocusVisible:M,onKeyDown:I,onKeyUp:T,onMouseDown:N,onMouseLeave:L,onMouseUp:j,onTouchEnd:V,onTouchMove:W,onTouchStart:D,tabIndex:F=0,TouchRippleProps:O,touchRippleRef:X,type:H}=o,Y=(0,n.A)(o,B),K=a.useRef(null),U=a.useRef(null),q=(0,d.A)(U,X),{isFocusVisibleRef:G,onFocus:_,onBlur:Q,ref:J}=(0,p.A)(),[Z,ee]=a.useState(!1);b&&Z&&ee(!1),a.useImperativeHandle(l,(()=>({focusVisible:()=>{ee(!0),K.current.focus()}})),[]);const[te,oe]=a.useState(!1);a.useEffect((()=>{oe(!0)}),[]);const re=te&&!x&&!b;function ne(e,t,o=y){return(0,u.A)((r=>(t&&t(r),!o&&U.current&&U.current[e](r),!0)))}a.useEffect((()=>{Z&&A&&!x&&te&&U.current.pulsate()}),[x,A,Z,te]);const ae=ne("start",N),ie=ne("stop",w),se=ne("stop",R),le=ne("stop",j),ce=ne("stop",(e=>{Z&&e.preventDefault(),L&&L(e)})),de=ne("start",D),ue=ne("stop",V),pe=ne("stop",W),he=ne("stop",(e=>{Q(e),!1===G.current&&ee(!1),C&&C(e)}),!1),me=(0,u.A)((e=>{K.current||(K.current=e.currentTarget),_(e),!0===G.current&&(ee(!0),M&&M(e)),z&&z(e)})),ve=()=>{const e=K.current;return f&&"button"!==f&&!("A"===e.tagName&&e.href)},ge=a.useRef(!1),fe=(0,u.A)((e=>{A&&!ge.current&&Z&&U.current&&" "===e.key&&(ge.current=!0,U.current.stop(e,(()=>{U.current.start(e)}))),e.target===e.currentTarget&&ve()&&" "===e.key&&e.preventDefault(),I&&I(e),e.target===e.currentTarget&&ve()&&"Enter"===e.key&&!b&&(e.preventDefault(),k&&k(e))})),be=(0,u.A)((e=>{A&&" "===e.key&&U.current&&Z&&!e.defaultPrevented&&(ge.current=!1,U.current.stop(e,(()=>{U.current.pulsate(e)}))),T&&T(e),k&&e.target===e.currentTarget&&ve()&&" "===e.key&&!e.defaultPrevented&&k(e)}));let xe=f;"button"===xe&&(Y.href||Y.to)&&(xe=S);const ye={};"button"===xe?(ye.type=void 0===H?"button":H,ye.disabled=b):(Y.href||Y.to||(ye.role="button"),b&&(ye["aria-disabled"]=b));const Ae=(0,d.A)(t,J,K),Se=(0,r.A)({},o,{centerRipple:h,component:f,disabled:b,disableRipple:x,disableTouchRipple:y,focusRipple:A,tabIndex:F,focusVisible:Z}),Ce=(e=>{const{disabled:t,focusVisible:o,focusVisibleClassName:r,classes:n}=e,a={root:["root",t&&"disabled",o&&"focusVisible"]},i=(0,s.A)(a,E,n);return o&&r&&(i.root+=` ${r}`),i})(Se);return(0,v.jsxs)(P,(0,r.A)({as:xe,className:(0,i.A)(Ce.root,g),ownerState:Se,onBlur:he,onClick:k,onContextMenu:ie,onFocus:me,onKeyDown:fe,onKeyUp:be,onMouseDown:ae,onMouseLeave:ce,onMouseUp:le,onDragLeave:se,onTouchEnd:ue,onTouchMove:pe,onTouchStart:de,ref:Ae,tabIndex:b?-1:F,type:H},ye,Y,{children:[m,re?(0,v.jsx)($,(0,r.A)({ref:q,center:h},O)):null]}))}))},3357:(e,t,o)=>{o.d(t,{A:()=>z});var r=o(8587),n=o(8168),a=o(6540),i=o(4164),s=o(5659),l=o(7437),c=o(8466),d=o(3541),u=o(1848),p=o(8413),h=o(1609);function m(e){return(0,h.A)("MuiCircularProgress",e)}(0,p.A)("MuiCircularProgress",["root","determinate","indeterminate","colorPrimary","colorSecondary","svg","circle","circleDeterminate","circleIndeterminate","circleDisableShrink"]);var v=o(4848);const g=["className","color","disableShrink","size","style","thickness","value","variant"];let f,b,x,y,A=e=>e;const S=(0,l.i7)(f||(f=A` 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } `)),C=(0,l.i7)(b||(b=A` 0% { stroke-dasharray: 1px, 200px; stroke-dashoffset: 0; } 50% { stroke-dasharray: 100px, 200px; stroke-dashoffset: -15px; } 100% { stroke-dasharray: 100px, 200px; stroke-dashoffset: -125px; } `)),k=(0,u.Ay)("span",{name:"MuiCircularProgress",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[o.variant],t[`color${(0,c.A)(o.color)}`]]}})((({ownerState:e,theme:t})=>(0,n.A)({display:"inline-block"},"determinate"===e.variant&&{transition:t.transitions.create("transform")},"inherit"!==e.color&&{color:(t.vars||t).palette[e.color].main})),(({ownerState:e})=>"indeterminate"===e.variant&&(0,l.AH)(x||(x=A` animation: ${0} 1.4s linear infinite; `),S))),w=(0,u.Ay)("svg",{name:"MuiCircularProgress",slot:"Svg",overridesResolver:(e,t)=>t.svg})({display:"block"}),R=(0,u.Ay)("circle",{name:"MuiCircularProgress",slot:"Circle",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.circle,t[`circle${(0,c.A)(o.variant)}`],o.disableShrink&&t.circleDisableShrink]}})((({ownerState:e,theme:t})=>(0,n.A)({stroke:"currentColor"},"determinate"===e.variant&&{transition:t.transitions.create("stroke-dashoffset")},"indeterminate"===e.variant&&{strokeDasharray:"80px, 200px",strokeDashoffset:0})),(({ownerState:e})=>"indeterminate"===e.variant&&!e.disableShrink&&(0,l.AH)(y||(y=A` animation: ${0} 1.4s ease-in-out infinite; `),C))),z=a.forwardRef((function(e,t){const o=(0,d.A)({props:e,name:"MuiCircularProgress"}),{className:a,color:l="primary",disableShrink:u=!1,size:p=40,style:h,thickness:f=3.6,value:b=0,variant:x="indeterminate"}=o,y=(0,r.A)(o,g),A=(0,n.A)({},o,{color:l,disableShrink:u,size:p,thickness:f,value:b,variant:x}),S=(e=>{const{classes:t,variant:o,color:r,disableShrink:n}=e,a={root:["root",o,`color${(0,c.A)(r)}`],svg:["svg"],circle:["circle",`circle${(0,c.A)(o)}`,n&&"circleDisableShrink"]};return(0,s.A)(a,m,t)})(A),C={},z={},M={};if("determinate"===x){const e=2*Math.PI*((44-f)/2);C.strokeDasharray=e.toFixed(3),M["aria-valuenow"]=Math.round(b),C.strokeDashoffset=`${((100-b)/100*e).toFixed(3)}px`,z.transform="rotate(-90deg)"}return(0,v.jsx)(k,(0,n.A)({className:(0,i.A)(S.root,a),style:(0,n.A)({width:p,height:p},z,h),ownerState:A,ref:t,role:"progressbar"},M,y,{children:(0,v.jsx)(w,{className:S.svg,ownerState:A,viewBox:"22 22 44 44",children:(0,v.jsx)(R,{className:S.circle,style:C,ownerState:A,cx:44,cy:44,r:(44-f)/2,fill:"none",strokeWidth:f})})}))}))},7951:(e,t,o)=>{o.d(t,{A:()=>s});var r=o(988),n=o(8466),a=o(1848),i=o(3541);const s=(0,r.A)({createStyledComponent:(0,a.Ay)("div",{name:"MuiContainer",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[`maxWidth${(0,n.A)(String(o.maxWidth))}`],o.fixed&&t.fixed,o.disableGutters&&t.disableGutters]}}),useThemeProps:e=>(0,i.A)({props:e,name:"MuiContainer"})})},4519:(e,t,o)=>{o.d(t,{Ay:()=>d});var r=o(8168),n=o(6540),a=o(3541),i=o(5327),s=o(4848);const l=(e,t)=>(0,r.A)({WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",boxSizing:"border-box",WebkitTextSizeAdjust:"100%"},t&&!e.vars&&{colorScheme:e.palette.mode}),c=e=>(0,r.A)({color:(e.vars||e).palette.text.primary},e.typography.body1,{backgroundColor:(e.vars||e).palette.background.default,"@media print":{backgroundColor:(e.vars||e).palette.common.white}}),d=function(e){const t=(0,a.A)({props:e,name:"MuiCssBaseline"}),{children:o,enableColorScheme:d=!1}=t;return(0,s.jsxs)(n.Fragment,{children:[(0,s.jsx)(i.A,{styles:e=>((e,t=!1)=>{var o;const n={};t&&e.colorSchemes&&Object.entries(e.colorSchemes).forEach((([t,o])=>{var r;n[e.getColorSchemeSelector(t).replace(/\s*&/,"")]={colorScheme:null==(r=o.palette)?void 0:r.mode}}));let a=(0,r.A)({html:l(e,t),"*, *::before, *::after":{boxSizing:"inherit"},"strong, b":{fontWeight:e.typography.fontWeightBold},body:(0,r.A)({margin:0},c(e),{"&::backdrop":{backgroundColor:(e.vars||e).palette.background.default}})},n);const i=null==(o=e.components)||null==(o=o.MuiCssBaseline)?void 0:o.styleOverrides;return i&&(a=[a,i]),a})(e,d)}),o]})}},1347:(e,t,o)=>{o.d(t,{A:()=>r});const r=(0,o(8413).A)("MuiDivider",["root","absolute","fullWidth","inset","middle","flexItem","light","vertical","withChildren","withChildrenVertical","textAlignRight","textAlignLeft","wrapper","wrapperVertical"])},973:(e,t,o)=>{o.d(t,{A:()=>h});var r=o(8168),n=o(8587),a=o(6540),i=o(7353),s=o(4675),l=o(5186),c=o(6852),d=o(4848);const u=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"],p={entering:{opacity:1},entered:{opacity:1}},h=a.forwardRef((function(e,t){const o=(0,s.A)(),h={enter:o.transitions.duration.enteringScreen,exit:o.transitions.duration.leavingScreen},{addEndListener:m,appear:v=!0,children:g,easing:f,in:b,onEnter:x,onEntered:y,onEntering:A,onExit:S,onExited:C,onExiting:k,style:w,timeout:R=h,TransitionComponent:z=i.Ay}=e,M=(0,n.A)(e,u),$=a.useRef(null),I=(0,c.A)($,g.ref,t),E=e=>t=>{if(e){const o=$.current;void 0===t?e(o):e(o,t)}},T=E(A),B=E(((e,t)=>{(0,l.q)(e);const r=(0,l.c)({style:w,timeout:R,easing:f},{mode:"enter"});e.style.webkitTransition=o.transitions.create("opacity",r),e.style.transition=o.transitions.create("opacity",r),x&&x(e,t)})),P=E(y),N=E(k),L=E((e=>{const t=(0,l.c)({style:w,timeout:R,easing:f},{mode:"exit"});e.style.webkitTransition=o.transitions.create("opacity",t),e.style.transition=o.transitions.create("opacity",t),S&&S(e)})),j=E(C);return(0,d.jsx)(z,(0,r.A)({appear:v,in:b,nodeRef:$,onEnter:B,onEntered:P,onEntering:T,onExit:L,onExited:j,onExiting:N,addEndListener:e=>{m&&m($.current,e)},timeout:R},M,{children:(e,t)=>a.cloneElement(g,(0,r.A)({style:(0,r.A)({opacity:0,visibility:"exited"!==e||b?void 0:"hidden"},p[e],w,g.props.style),ref:I},t))}))}))}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZixVQUFXYSxFQUNYbkIsZUFoQjJCc0IsSUFDdkJ0QixHQUVGQSxFQUFlUSxFQUFROVUsUUFBUzRWLEVBQ2xDLEVBYUE3TixRQUFTQSxHQUNSbEgsRUFBTyxDQUNSM0MsU0FBVSxDQUFDMlgsRUFBT0MsSUFDSSxlQUFtQjVYLEdBQVUsT0FBUyxDQUN4RDJLLE9BQU8sT0FBUyxDQUNkbUwsUUFBUyxFQUNUK0IsV0FBc0IsV0FBVkYsR0FBdUJoTyxPQUFvQnhGLEVBQVgsVUFDM0N0RCxFQUFPOFcsR0FBUWhOLEVBQU8zSyxFQUFTTCxNQUFNZ0wsT0FDeEN2SSxJQUFLMFAsR0FDSjhGLE1BR1QsRyIsInNvdXJjZXMiOlsid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0JveC9ib3hDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0JveC9Cb3guanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnJlYWRjcnVtYnMvQnJlYWRjcnVtYkNvbGxhcHNlZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CcmVhZGNydW1icy9icmVhZGNydW1ic0NsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnJlYWRjcnVtYnMvQnJlYWRjcnVtYnMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uL2J1dHRvbkNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uR3JvdXAvQnV0dG9uR3JvdXBDb250ZXh0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkdyb3VwL0J1dHRvbkdyb3VwQnV0dG9uQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b24vQnV0dG9uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvdG91Y2hSaXBwbGVDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvVG91Y2hSaXBwbGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9SaXBwbGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9idXR0b25CYXNlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25CYXNlL0J1dHRvbkJhc2UuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ2lyY3VsYXJQcm9ncmVzcy9jaXJjdWxhclByb2dyZXNzQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9DaXJjdWxhclByb2dyZXNzL0NpcmN1bGFyUHJvZ3Jlc3MuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ29udGFpbmVyL0NvbnRhaW5lci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Dc3NCYXNlbGluZS9Dc3NCYXNlbGluZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9EaXZpZGVyL2RpdmlkZXJDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0ZhZGUvRmFkZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmNvbnN0IGJveENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCb3gnLCBbJ3Jvb3QnXSk7XG5leHBvcnQgZGVmYXVsdCBib3hDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgY3JlYXRlQm94IH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVuc3RhYmxlX0NsYXNzTmFtZUdlbmVyYXRvciBhcyBDbGFzc05hbWVHZW5lcmF0b3IgfSBmcm9tICcuLi9jbGFzc05hbWUnO1xuaW1wb3J0IHsgY3JlYXRlVGhlbWUgfSBmcm9tICcuLi9zdHlsZXMnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4uL3N0eWxlcy9pZGVudGlmaWVyJztcbmltcG9ydCBib3hDbGFzc2VzIGZyb20gJy4vYm94Q2xhc3Nlcyc7XG5jb25zdCBkZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuY29uc3QgQm94ID0gY3JlYXRlQm94KHtcbiAgdGhlbWVJZDogVEhFTUVfSUQsXG4gIGRlZmF1bHRUaGVtZSxcbiAgZGVmYXVsdENsYXNzTmFtZTogYm94Q2xhc3Nlcy5yb290LFxuICBnZW5lcmF0ZUNsYXNzTmFtZTogQ2xhc3NOYW1lR2VuZXJhdG9yLmdlbmVyYXRlXG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJveC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJveDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJzbG90c1wiLCBcInNsb3RQcm9wc1wiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBlbXBoYXNpemUgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IE1vcmVIb3Jpekljb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL01vcmVIb3Jpeic7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBCcmVhZGNydW1iQ29sbGFwc2VkQnV0dG9uID0gc3R5bGVkKEJ1dHRvbkJhc2UpKCh7XG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgbWFyZ2luTGVmdDogYGNhbGMoJHt0aGVtZS5zcGFjaW5nKDEpfSAqIDAuNSlgLFxuICBtYXJnaW5SaWdodDogYGNhbGMoJHt0aGVtZS5zcGFjaW5nKDEpfSAqIDAuNSlgXG59LCB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyB7XG4gIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5ncmV5WzEwMF0sXG4gIGNvbG9yOiB0aGVtZS5wYWxldHRlLmdyZXlbNzAwXVxufSA6IHtcbiAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5wYWxldHRlLmdyZXlbNzAwXSxcbiAgY29sb3I6IHRoZW1lLnBhbGV0dGUuZ3JleVsxMDBdXG59LCB7XG4gIGJvcmRlclJhZGl1czogMixcbiAgJyY6aG92ZXIsICY6Zm9jdXMnOiBfZXh0ZW5kcyh7fSwgdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8ge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5ncmV5WzIwMF1cbiAgfSA6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ3JleVs2MDBdXG4gIH0pLFxuICAnJjphY3RpdmUnOiBfZXh0ZW5kcyh7XG4gICAgYm94U2hhZG93OiB0aGVtZS5zaGFkb3dzWzBdXG4gIH0sIHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGVtcGhhc2l6ZSh0aGVtZS5wYWxldHRlLmdyZXlbMjAwXSwgMC4xMilcbiAgfSA6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGVtcGhhc2l6ZSh0aGVtZS5wYWxldHRlLmdyZXlbNjAwXSwgMC4xMilcbiAgfSlcbn0pKTtcbmNvbnN0IEJyZWFkY3J1bWJDb2xsYXBzZWRJY29uID0gc3R5bGVkKE1vcmVIb3Jpekljb24pKHtcbiAgd2lkdGg6IDI0LFxuICBoZWlnaHQ6IDE2XG59KTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiBCcmVhZGNydW1iQ29sbGFwc2VkKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICBzbG90UHJvcHMgPSB7fVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBwcm9wcztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFwibGlcIiwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChCcmVhZGNydW1iQ29sbGFwc2VkQnV0dG9uLCBfZXh0ZW5kcyh7XG4gICAgICBmb2N1c1JpcHBsZTogdHJ1ZVxuICAgIH0sIG90aGVyUHJvcHMsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goQnJlYWRjcnVtYkNvbGxhcHNlZEljb24sIF9leHRlbmRzKHtcbiAgICAgICAgYXM6IHNsb3RzLkNvbGxhcHNlZEljb24sXG4gICAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGVcbiAgICAgIH0sIHNsb3RQcm9wcy5jb2xsYXBzZWRJY29uKSlcbiAgICB9KSlcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCcmVhZGNydW1iQ29sbGFwc2VkLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciB0aGUgQ29sbGFwc2VkSWNvbiBzbG90LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNvbGxhcHNlZEljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBCcmVhZGN1bWJDb2xsYXBzZWQuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBDb2xsYXBzZWRJY29uOiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQnJlYWRjcnVtYkNvbGxhcHNlZDsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnJlYWRjcnVtYnNVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUJyZWFkY3J1bWJzJywgc2xvdCk7XG59XG5jb25zdCBicmVhZGNydW1ic0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCcmVhZGNydW1icycsIFsncm9vdCcsICdvbCcsICdsaScsICdzZXBhcmF0b3InXSk7XG5leHBvcnQgZGVmYXVsdCBicmVhZGNydW1ic0NsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJzbG90c1wiLCBcInNsb3RQcm9wc1wiLCBcImV4cGFuZFRleHRcIiwgXCJpdGVtc0FmdGVyQ29sbGFwc2VcIiwgXCJpdGVtc0JlZm9yZUNvbGxhcHNlXCIsIFwibWF4SXRlbXNcIiwgXCJzZXBhcmF0b3JcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZyYWdtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgaW50ZWdlclByb3BUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcywgdXNlU2xvdFByb3BzIH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tICcuLi9UeXBvZ3JhcGh5JztcbmltcG9ydCBCcmVhZGNydW1iQ29sbGFwc2VkIGZyb20gJy4vQnJlYWRjcnVtYkNvbGxhcHNlZCc7XG5pbXBvcnQgYnJlYWRjcnVtYnNDbGFzc2VzLCB7IGdldEJyZWFkY3J1bWJzVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9icmVhZGNydW1ic0NsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBsaTogWydsaSddLFxuICAgIG9sOiBbJ29sJ10sXG4gICAgc2VwYXJhdG9yOiBbJ3NlcGFyYXRvciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QnJlYWRjcnVtYnNVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IEJyZWFkY3J1bWJzUm9vdCA9IHN0eWxlZChUeXBvZ3JhcGh5LCB7XG4gIG5hbWU6ICdNdWlCcmVhZGNydW1icycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgcmV0dXJuIFt7XG4gICAgICBbYCYgLiR7YnJlYWRjcnVtYnNDbGFzc2VzLmxpfWBdOiBzdHlsZXMubGlcbiAgICB9LCBzdHlsZXMucm9vdF07XG4gIH1cbn0pKHt9KTtcbmNvbnN0IEJyZWFkY3J1bWJzT2wgPSBzdHlsZWQoJ29sJywge1xuICBuYW1lOiAnTXVpQnJlYWRjcnVtYnMnLFxuICBzbG90OiAnT2wnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5vbFxufSkoe1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhXcmFwOiAnd3JhcCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBwYWRkaW5nOiAwLFxuICBtYXJnaW46IDAsXG4gIGxpc3RTdHlsZTogJ25vbmUnXG59KTtcbmNvbnN0IEJyZWFkY3J1bWJzU2VwYXJhdG9yID0gc3R5bGVkKCdsaScsIHtcbiAgbmFtZTogJ011aUJyZWFkY3J1bWJzJyxcbiAgc2xvdDogJ1NlcGFyYXRvcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnNlcGFyYXRvclxufSkoe1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgbWFyZ2luTGVmdDogOCxcbiAgbWFyZ2luUmlnaHQ6IDhcbn0pO1xuZnVuY3Rpb24gaW5zZXJ0U2VwYXJhdG9ycyhpdGVtcywgY2xhc3NOYW1lLCBzZXBhcmF0b3IsIG93bmVyU3RhdGUpIHtcbiAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgoYWNjLCBjdXJyZW50LCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgIGFjYyA9IGFjYy5jb25jYXQoY3VycmVudCwgLyojX19QVVJFX18qL19qc3goQnJlYWRjcnVtYnNTZXBhcmF0b3IsIHtcbiAgICAgICAgXCJhcmlhLWhpZGRlblwiOiB0cnVlLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgICAgY2hpbGRyZW46IHNlcGFyYXRvclxuICAgICAgfSwgYHNlcGFyYXRvci0ke2luZGV4fWApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjLnB1c2goY3VycmVudCk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcbn1cbmNvbnN0IEJyZWFkY3J1bWJzID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQnJlYWRjcnVtYnMoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUJyZWFkY3J1bWJzJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAnbmF2JyxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICBzbG90UHJvcHMgPSB7fSxcbiAgICAgIGV4cGFuZFRleHQgPSAnU2hvdyBwYXRoJyxcbiAgICAgIGl0ZW1zQWZ0ZXJDb2xsYXBzZSA9IDEsXG4gICAgICBpdGVtc0JlZm9yZUNvbGxhcHNlID0gMSxcbiAgICAgIG1heEl0ZW1zID0gOCxcbiAgICAgIHNlcGFyYXRvciA9ICcvJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBbZXhwYW5kZWQsIHNldEV4cGFuZGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBleHBhbmRlZCxcbiAgICBleHBhbmRUZXh0LFxuICAgIGl0ZW1zQWZ0ZXJDb2xsYXBzZSxcbiAgICBpdGVtc0JlZm9yZUNvbGxhcHNlLFxuICAgIG1heEl0ZW1zLFxuICAgIHNlcGFyYXRvclxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBjb2xsYXBzZWRJY29uU2xvdFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogc2xvdHMuQ29sbGFwc2VkSWNvbixcbiAgICBleHRlcm5hbFNsb3RQcm9wczogc2xvdFByb3BzLmNvbGxhcHNlZEljb24sXG4gICAgb3duZXJTdGF0ZVxuICB9KTtcbiAgY29uc3QgbGlzdFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgcmVuZGVySXRlbXNCZWZvcmVBbmRBZnRlciA9IGFsbEl0ZW1zID0+IHtcbiAgICBjb25zdCBoYW5kbGVDbGlja0V4cGFuZCA9ICgpID0+IHtcbiAgICAgIHNldEV4cGFuZGVkKHRydWUpO1xuXG4gICAgICAvLyBUaGUgY2xpY2tlZCBlbGVtZW50IHJlY2VpdmVkIHRoZSBmb2N1cyBidXQgZ2V0cyByZW1vdmVkIGZyb20gdGhlIERPTS5cbiAgICAgIC8vIExldCdzIGtlZXAgdGhlIGZvY3VzIGluIHRoZSBjb21wb25lbnQgYWZ0ZXIgZXhwYW5kaW5nLlxuICAgICAgLy8gTW92aW5nIGl0IHRvIHRoZSA8b2w+IG9yIDxuYXY+IGRvZXMgbm90IGNhdXNlIGFueSBhbm5vdW5jZW1lbnQgaW4gTlZEQS5cbiAgICAgIC8vIEJ5IG1vdmluZyBpdCB0byBzb21lIGxpbmsvYnV0dG9uIGF0IGxlYXN0IHdlIGhhdmUgc29tZSBhbm5vdW5jZW1lbnQuXG4gICAgICBjb25zdCBmb2N1c2FibGUgPSBsaXN0UmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcignYVtocmVmXSxidXR0b24sW3RhYmluZGV4XScpO1xuICAgICAgaWYgKGZvY3VzYWJsZSkge1xuICAgICAgICBmb2N1c2FibGUuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gVGhpcyBkZWZlbmRzIGFnYWluc3Qgc29tZW9uZSBwYXNzaW5nIHdlaXJkIGlucHV0LCB0byBlbnN1cmUgdGhhdCBpZiBhbGxcbiAgICAvLyBpdGVtcyB3b3VsZCBiZSBzaG93biBhbnl3YXksIHdlIGp1c3Qgc2hvdyBhbGwgaXRlbXMgd2l0aG91dCB0aGUgRWxsaXBzaXNJdGVtXG4gICAgaWYgKGl0ZW1zQmVmb3JlQ29sbGFwc2UgKyBpdGVtc0FmdGVyQ29sbGFwc2UgPj0gYWxsSXRlbXMubGVuZ3RoKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uIG9mIHByb3BzIHRvIHRoZSBCcmVhZGNydW1icy4nLCBgaXRlbXNBZnRlckNvbGxhcHNlPXske2l0ZW1zQWZ0ZXJDb2xsYXBzZX19ICsgaXRlbXNCZWZvcmVDb2xsYXBzZT17JHtpdGVtc0JlZm9yZUNvbGxhcHNlfX0gPj0gbWF4SXRlbXM9eyR7bWF4SXRlbXN9fWBdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhbGxJdGVtcztcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5hbGxJdGVtcy5zbGljZSgwLCBpdGVtc0JlZm9yZUNvbGxhcHNlKSwgLyojX19QVVJFX18qL19qc3goQnJlYWRjcnVtYkNvbGxhcHNlZCwge1xuICAgICAgXCJhcmlhLWxhYmVsXCI6IGV4cGFuZFRleHQsXG4gICAgICBzbG90czoge1xuICAgICAgICBDb2xsYXBzZWRJY29uOiBzbG90cy5Db2xsYXBzZWRJY29uXG4gICAgICB9LFxuICAgICAgc2xvdFByb3BzOiB7XG4gICAgICAgIGNvbGxhcHNlZEljb246IGNvbGxhcHNlZEljb25TbG90UHJvcHNcbiAgICAgIH0sXG4gICAgICBvbkNsaWNrOiBoYW5kbGVDbGlja0V4cGFuZFxuICAgIH0sIFwiZWxsaXBzaXNcIiksIC4uLmFsbEl0ZW1zLnNsaWNlKGFsbEl0ZW1zLmxlbmd0aCAtIGl0ZW1zQWZ0ZXJDb2xsYXBzZSwgYWxsSXRlbXMubGVuZ3RoKV07XG4gIH07XG4gIGNvbnN0IGFsbEl0ZW1zID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikuZmlsdGVyKGNoaWxkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGlzRnJhZ21lbnQoY2hpbGQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW1wiTVVJOiBUaGUgQnJlYWRjcnVtYnMgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCk7XG4gIH0pLm1hcCgoY2hpbGQsIGluZGV4KSA9PiAvKiNfX1BVUkVfXyovX2pzeChcImxpXCIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMubGksXG4gICAgY2hpbGRyZW46IGNoaWxkXG4gIH0sIGBjaGlsZC0ke2luZGV4fWApKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEJyZWFkY3J1bWJzUm9vdCwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgIGNvbG9yOiBcInRleHQuc2Vjb25kYXJ5XCIsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEJyZWFkY3J1bWJzT2wsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5vbCxcbiAgICAgIHJlZjogbGlzdFJlZixcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjaGlsZHJlbjogaW5zZXJ0U2VwYXJhdG9ycyhleHBhbmRlZCB8fCBtYXhJdGVtcyAmJiBhbGxJdGVtcy5sZW5ndGggPD0gbWF4SXRlbXMgPyBhbGxJdGVtcyA6IHJlbmRlckl0ZW1zQmVmb3JlQW5kQWZ0ZXIoYWxsSXRlbXMpLCBjbGFzc2VzLnNlcGFyYXRvciwgc2VwYXJhdG9yLCBvd25lclN0YXRlKVxuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQnJlYWRjcnVtYnMucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGxhYmVsIGZvciB0aGUgZXhwYW5kIGJ1dHRvbi5cbiAgICpcbiAgICogRm9yIGxvY2FsaXphdGlvbiBwdXJwb3NlcywgeW91IGNhbiB1c2UgdGhlIHByb3ZpZGVkIFt0cmFuc2xhdGlvbnNdKC9tYXRlcmlhbC11aS9ndWlkZXMvbG9jYWxpemF0aW9uLykuXG4gICAqIEBkZWZhdWx0ICdTaG93IHBhdGgnXG4gICAqL1xuICBleHBhbmRUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgbWF4IGl0ZW1zIGlzIGV4Y2VlZGVkLCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIHNob3cgYWZ0ZXIgdGhlIGVsbGlwc2lzLlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBpdGVtc0FmdGVyQ29sbGFwc2U6IGludGVnZXJQcm9wVHlwZSxcbiAgLyoqXG4gICAqIElmIG1heCBpdGVtcyBpcyBleGNlZWRlZCwgdGhlIG51bWJlciBvZiBpdGVtcyB0byBzaG93IGJlZm9yZSB0aGUgZWxsaXBzaXMuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIGl0ZW1zQmVmb3JlQ29sbGFwc2U6IGludGVnZXJQcm9wVHlwZSxcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnJlYWRjcnVtYnMgdG8gZGlzcGxheS4gV2hlbiB0aGVyZSBhcmUgbW9yZVxuICAgKiB0aGFuIHRoZSBtYXhpbXVtIG51bWJlciwgb25seSB0aGUgZmlyc3QgYGl0ZW1zQmVmb3JlQ29sbGFwc2VgIGFuZCBsYXN0IGBpdGVtc0FmdGVyQ29sbGFwc2VgXG4gICAqIHdpbGwgYmUgc2hvd24sIHdpdGggYW4gZWxsaXBzaXMgaW4gYmV0d2Vlbi5cbiAgICogQGRlZmF1bHQgOFxuICAgKi9cbiAgbWF4SXRlbXM6IGludGVnZXJQcm9wVHlwZSxcbiAgLyoqXG4gICAqIEN1c3RvbSBzZXBhcmF0b3Igbm9kZS5cbiAgICogQGRlZmF1bHQgJy8nXG4gICAqL1xuICBzZXBhcmF0b3I6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIEJyZWFkY3VtYi5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjb2xsYXBzZWRJY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZSB0aGUgQnJlYWRjdW1iLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgQ29sbGFwc2VkSWNvbjogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQnJlYWRjcnVtYnM7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQnV0dG9uJywgc2xvdCk7XG59XG5jb25zdCBidXR0b25DbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQnV0dG9uJywgWydyb290JywgJ3RleHQnLCAndGV4dEluaGVyaXQnLCAndGV4dFByaW1hcnknLCAndGV4dFNlY29uZGFyeScsICd0ZXh0U3VjY2VzcycsICd0ZXh0RXJyb3InLCAndGV4dEluZm8nLCAndGV4dFdhcm5pbmcnLCAnb3V0bGluZWQnLCAnb3V0bGluZWRJbmhlcml0JywgJ291dGxpbmVkUHJpbWFyeScsICdvdXRsaW5lZFNlY29uZGFyeScsICdvdXRsaW5lZFN1Y2Nlc3MnLCAnb3V0bGluZWRFcnJvcicsICdvdXRsaW5lZEluZm8nLCAnb3V0bGluZWRXYXJuaW5nJywgJ2NvbnRhaW5lZCcsICdjb250YWluZWRJbmhlcml0JywgJ2NvbnRhaW5lZFByaW1hcnknLCAnY29udGFpbmVkU2Vjb25kYXJ5JywgJ2NvbnRhaW5lZFN1Y2Nlc3MnLCAnY29udGFpbmVkRXJyb3InLCAnY29udGFpbmVkSW5mbycsICdjb250YWluZWRXYXJuaW5nJywgJ2Rpc2FibGVFbGV2YXRpb24nLCAnZm9jdXNWaXNpYmxlJywgJ2Rpc2FibGVkJywgJ2NvbG9ySW5oZXJpdCcsICd0ZXh0U2l6ZVNtYWxsJywgJ3RleHRTaXplTWVkaXVtJywgJ3RleHRTaXplTGFyZ2UnLCAnb3V0bGluZWRTaXplU21hbGwnLCAnb3V0bGluZWRTaXplTWVkaXVtJywgJ291dGxpbmVkU2l6ZUxhcmdlJywgJ2NvbnRhaW5lZFNpemVTbWFsbCcsICdjb250YWluZWRTaXplTWVkaXVtJywgJ2NvbnRhaW5lZFNpemVMYXJnZScsICdzaXplTWVkaXVtJywgJ3NpemVTbWFsbCcsICdzaXplTGFyZ2UnLCAnZnVsbFdpZHRoJywgJ3N0YXJ0SWNvbicsICdlbmRJY29uJywgJ2ljb25TaXplU21hbGwnLCAnaWNvblNpemVNZWRpdW0nLCAnaWNvblNpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IGJ1dHRvbkNsYXNzZXM7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBCdXR0b25Hcm91cENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBCdXR0b25Hcm91cENvbnRleHQuZGlzcGxheU5hbWUgPSAnQnV0dG9uR3JvdXBDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkdyb3VwQ29udGV4dDsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IEJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQuZGlzcGxheU5hbWUgPSAnQnV0dG9uR3JvdXBCdXR0b25Db250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlRWxldmF0aW9uXCIsIFwiZGlzYWJsZUZvY3VzUmlwcGxlXCIsIFwiZW5kSWNvblwiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcImZ1bGxXaWR0aFwiLCBcInNpemVcIiwgXCJzdGFydEljb25cIiwgXCJ0eXBlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGludGVybmFsX3Jlc29sdmVQcm9wcyBhcyByZXNvbHZlUHJvcHMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBCdXR0b25CYXNlIGZyb20gJy4uL0J1dHRvbkJhc2UnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgYnV0dG9uQ2xhc3NlcywgeyBnZXRCdXR0b25VdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2J1dHRvbkNsYXNzZXMnO1xuaW1wb3J0IEJ1dHRvbkdyb3VwQ29udGV4dCBmcm9tICcuLi9CdXR0b25Hcm91cC9CdXR0b25Hcm91cENvbnRleHQnO1xuaW1wb3J0IEJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dCBmcm9tICcuLi9CdXR0b25Hcm91cC9CdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlRWxldmF0aW9uLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBzaXplLFxuICAgIHZhcmlhbnQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgYCR7dmFyaWFudH0ke2NhcGl0YWxpemUoY29sb3IpfWAsIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWAsIGAke3ZhcmlhbnR9U2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCBjb2xvciA9PT0gJ2luaGVyaXQnICYmICdjb2xvckluaGVyaXQnLCBkaXNhYmxlRWxldmF0aW9uICYmICdkaXNhYmxlRWxldmF0aW9uJywgZnVsbFdpZHRoICYmICdmdWxsV2lkdGgnXSxcbiAgICBsYWJlbDogWydsYWJlbCddLFxuICAgIHN0YXJ0SWNvbjogWydzdGFydEljb24nLCBgaWNvblNpemUke2NhcGl0YWxpemUoc2l6ZSl9YF0sXG4gICAgZW5kSWNvbjogWydlbmRJY29uJywgYGljb25TaXplJHtjYXBpdGFsaXplKHNpemUpfWBdXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRCdXR0b25VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgY29tbW9uSWNvblN0eWxlcyA9IG93bmVyU3RhdGUgPT4gX2V4dGVuZHMoe30sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICcmID4gKjpudGgtb2YtdHlwZSgxKSc6IHtcbiAgICBmb250U2l6ZTogMThcbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnbWVkaXVtJyAmJiB7XG4gICcmID4gKjpudGgtb2YtdHlwZSgxKSc6IHtcbiAgICBmb250U2l6ZTogMjBcbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnbGFyZ2UnICYmIHtcbiAgJyYgPiAqOm50aC1vZi10eXBlKDEpJzoge1xuICAgIGZvbnRTaXplOiAyMlxuICB9XG59KTtcbmNvbnN0IEJ1dHRvblJvb3QgPSBzdHlsZWQoQnV0dG9uQmFzZSwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpQnV0dG9uJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBzdHlsZXNbYCR7b3duZXJTdGF0ZS52YXJpYW50fSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXSwgc3R5bGVzW2BzaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF0sIHN0eWxlc1tgJHtvd25lclN0YXRlLnZhcmlhbnR9U2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBvd25lclN0YXRlLmNvbG9yID09PSAnaW5oZXJpdCcgJiYgc3R5bGVzLmNvbG9ySW5oZXJpdCwgb3duZXJTdGF0ZS5kaXNhYmxlRWxldmF0aW9uICYmIHN0eWxlcy5kaXNhYmxlRWxldmF0aW9uLCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiBzdHlsZXMuZnVsbFdpZHRoXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgdmFyIF90aGVtZSRwYWxldHRlJGdldENvbiwgX3RoZW1lJHBhbGV0dGU7XG4gIGNvbnN0IGluaGVyaXRDb250YWluZWRCYWNrZ3JvdW5kQ29sb3IgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyB0aGVtZS5wYWxldHRlLmdyZXlbMzAwXSA6IHRoZW1lLnBhbGV0dGUuZ3JleVs4MDBdO1xuICBjb25zdCBpbmhlcml0Q29udGFpbmVkSG92ZXJCYWNrZ3JvdW5kQ29sb3IgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyB0aGVtZS5wYWxldHRlLmdyZXkuQTEwMCA6IHRoZW1lLnBhbGV0dGUuZ3JleVs3MDBdO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIHRoZW1lLnR5cG9ncmFwaHkuYnV0dG9uLCB7XG4gICAgbWluV2lkdGg6IDY0LFxuICAgIHBhZGRpbmc6ICc2cHggMTZweCcsXG4gICAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZShbJ2JhY2tncm91bmQtY29sb3InLCAnYm94LXNoYWRvdycsICdib3JkZXItY29sb3InLCAnY29sb3InXSwge1xuICAgICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0XG4gICAgfSksXG4gICAgJyY6aG92ZXInOiBfZXh0ZW5kcyh7XG4gICAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUudGV4dC5wcmltYXJ5Q2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS50ZXh0LnByaW1hcnksIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICd0ZXh0JyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgfVxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbn1gLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgfVxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkJ1dHRvbi5pbmhlcml0Q29udGFpbmVkSG92ZXJCZyA6IGluaGVyaXRDb250YWluZWRIb3ZlckJhY2tncm91bmRDb2xvcixcbiAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbNF0sXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzJdLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmdyZXlbMzAwXVxuICAgICAgfVxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0uZGFyayxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxuICAgICAgfVxuICAgIH0pLFxuICAgICcmOmFjdGl2ZSc6IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbOF1cbiAgICB9KSxcbiAgICBbYCYuJHtidXR0b25DbGFzc2VzLmZvY3VzVmlzaWJsZX1gXTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1s2XVxuICAgIH0pLFxuICAgIFtgJi4ke2J1dHRvbkNsYXNzZXMuZGlzYWJsZWR9YF06IF9leHRlbmRzKHtcbiAgICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkQmFja2dyb3VuZH1gXG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkLFxuICAgICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1swXSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkQmFja2dyb3VuZFxuICAgIH0pXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3RleHQnICYmIHtcbiAgICBwYWRkaW5nOiAnNnB4IDhweCdcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc1cHggMTVweCcsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkIGN1cnJlbnRDb2xvcidcbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sXG4gICAgYm9yZGVyOiB0aGVtZS52YXJzID8gYDFweCBzb2xpZCByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5DaGFubmVsfSAvIDAuNSlgIDogYDFweCBzb2xpZCAke2FscGhhKHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgMC41KX1gXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgIGNvbG9yOiB0aGVtZS52YXJzID9cbiAgICAvLyB0aGlzIGlzIHNhZmUgYmVjYXVzZSBncmV5IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIGRlZmF1bHQgbGlnaHQvZGFyayBtb2RlXG4gICAgdGhlbWUudmFycy5wYWxldHRlLnRleHQucHJpbWFyeSA6IChfdGhlbWUkcGFsZXR0ZSRnZXRDb24gPSAoX3RoZW1lJHBhbGV0dGUgPSB0aGVtZS5wYWxldHRlKS5nZXRDb250cmFzdFRleHQpID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkcGFsZXR0ZSRnZXRDb24uY2FsbChfdGhlbWUkcGFsZXR0ZSwgdGhlbWUucGFsZXR0ZS5ncmV5WzMwMF0pLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5CdXR0b24uaW5oZXJpdENvbnRhaW5lZEJnIDogaW5oZXJpdENvbnRhaW5lZEJhY2tncm91bmRDb2xvcixcbiAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzJdXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0uY29udHJhc3RUZXh0LFxuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxuICB9LCBvd25lclN0YXRlLmNvbG9yID09PSAnaW5oZXJpdCcgJiYge1xuICAgIGNvbG9yOiAnaW5oZXJpdCcsXG4gICAgYm9yZGVyQ29sb3I6ICdjdXJyZW50Q29sb3InXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICd0ZXh0JyAmJiB7XG4gICAgcGFkZGluZzogJzRweCA1cHgnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTMpXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ2xhcmdlJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICd0ZXh0JyAmJiB7XG4gICAgcGFkZGluZzogJzhweCAxMXB4JyxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDE1KVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICBwYWRkaW5nOiAnM3B4IDlweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMylcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnbGFyZ2UnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gICAgcGFkZGluZzogJzdweCAyMXB4JyxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDE1KVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgcGFkZGluZzogJzRweCAxMHB4JyxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDEzKVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdsYXJnZScgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgcGFkZGluZzogJzhweCAyMnB4JyxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDE1KVxuICB9LCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gICAgd2lkdGg6ICcxMDAlJ1xuICB9KTtcbn0sICh7XG4gIG93bmVyU3RhdGVcbn0pID0+IG93bmVyU3RhdGUuZGlzYWJsZUVsZXZhdGlvbiAmJiB7XG4gIGJveFNoYWRvdzogJ25vbmUnLFxuICAnJjpob3Zlcic6IHtcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9LFxuICBbYCYuJHtidXR0b25DbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgIGJveFNoYWRvdzogJ25vbmUnXG4gIH0sXG4gICcmOmFjdGl2ZSc6IHtcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9LFxuICBbYCYuJHtidXR0b25DbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgYm94U2hhZG93OiAnbm9uZSdcbiAgfVxufSk7XG5jb25zdCBCdXR0b25TdGFydEljb24gPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlCdXR0b24nLFxuICBzbG90OiAnU3RhcnRJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5zdGFydEljb24sIHN0eWxlc1tgaWNvblNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXV07XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2luaGVyaXQnLFxuICBtYXJnaW5SaWdodDogOCxcbiAgbWFyZ2luTGVmdDogLTRcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIG1hcmdpbkxlZnQ6IC0yXG59LCBjb21tb25JY29uU3R5bGVzKG93bmVyU3RhdGUpKSk7XG5jb25zdCBCdXR0b25FbmRJY29uID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpQnV0dG9uJyxcbiAgc2xvdDogJ0VuZEljb24nLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLmVuZEljb24sIHN0eWxlc1tgaWNvblNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXV07XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2luaGVyaXQnLFxuICBtYXJnaW5SaWdodDogLTQsXG4gIG1hcmdpbkxlZnQ6IDhcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIG1hcmdpblJpZ2h0OiAtMlxufSwgY29tbW9uSWNvblN0eWxlcyhvd25lclN0YXRlKSkpO1xuY29uc3QgQnV0dG9uID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQnV0dG9uKGluUHJvcHMsIHJlZikge1xuICAvLyBwcm9wcyBwcmlvcml0eTogYGluUHJvcHNgID4gYGNvbnRleHRQcm9wc2AgPiBgdGhlbWVEZWZhdWx0UHJvcHNgXG4gIGNvbnN0IGNvbnRleHRQcm9wcyA9IFJlYWN0LnVzZUNvbnRleHQoQnV0dG9uR3JvdXBDb250ZXh0KTtcbiAgY29uc3QgYnV0dG9uR3JvdXBCdXR0b25Db250ZXh0UG9zaXRpb25DbGFzc05hbWUgPSBSZWFjdC51c2VDb250ZXh0KEJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dCk7XG4gIGNvbnN0IHJlc29sdmVkUHJvcHMgPSByZXNvbHZlUHJvcHMoY29udGV4dFByb3BzLCBpblByb3BzKTtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogcmVzb2x2ZWRQcm9wcyxcbiAgICBuYW1lOiAnTXVpQnV0dG9uJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICAgIGNvbXBvbmVudCA9ICdidXR0b24nLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVFbGV2YXRpb24gPSBmYWxzZSxcbiAgICAgIGRpc2FibGVGb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgICAgZW5kSWNvbjogZW5kSWNvblByb3AsXG4gICAgICBmb2N1c1Zpc2libGVDbGFzc05hbWUsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICAgIHN0YXJ0SWNvbjogc3RhcnRJY29uUHJvcCxcbiAgICAgIHR5cGUsXG4gICAgICB2YXJpYW50ID0gJ3RleHQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZUVsZXZhdGlvbixcbiAgICBkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgZnVsbFdpZHRoLFxuICAgIHNpemUsXG4gICAgdHlwZSxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHN0YXJ0SWNvbiA9IHN0YXJ0SWNvblByb3AgJiYgLyojX19QVVJFX18qL19qc3goQnV0dG9uU3RhcnRJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLnN0YXJ0SWNvbixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNoaWxkcmVuOiBzdGFydEljb25Qcm9wXG4gIH0pO1xuICBjb25zdCBlbmRJY29uID0gZW5kSWNvblByb3AgJiYgLyojX19QVVJFX18qL19qc3goQnV0dG9uRW5kSWNvbiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5lbmRJY29uLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2hpbGRyZW46IGVuZEljb25Qcm9wXG4gIH0pO1xuICBjb25zdCBwb3NpdGlvbkNsYXNzTmFtZSA9IGJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dFBvc2l0aW9uQ2xhc3NOYW1lIHx8ICcnO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEJ1dHRvblJvb3QsIF9leHRlbmRzKHtcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjb250ZXh0UHJvcHMuY2xhc3NOYW1lLCBjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSwgcG9zaXRpb25DbGFzc05hbWUpLFxuICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBmb2N1c1JpcHBsZTogIWRpc2FibGVGb2N1c1JpcHBsZSxcbiAgICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5mb2N1c1Zpc2libGUsIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSksXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgY2hpbGRyZW46IFtzdGFydEljb24sIGNoaWxkcmVuLCBlbmRJY29uXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJ1dHRvbi5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdzdWNjZXNzJywgJ2Vycm9yJywgJ2luZm8nLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIG5vIGVsZXZhdGlvbiBpcyB1c2VkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVsZXZhdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSAga2V5Ym9hcmQgZm9jdXMgcmlwcGxlIGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUZvY3VzUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqXG4gICAqIOKaoO+4jyBXaXRob3V0IGEgcmlwcGxlIHRoZXJlIGlzIG5vIHN0eWxpbmcgZm9yIDpmb2N1cy12aXNpYmxlIGJ5IGRlZmF1bHQuIEJlIHN1cmVcbiAgICogdG8gaGlnaGxpZ2h0IHRoZSBlbGVtZW50IGJ5IGFwcGx5aW5nIHNlcGFyYXRlIHN0eWxlcyB3aXRoIHRoZSBgLk11aS1mb2N1c1Zpc2libGVgIGNsYXNzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbGVtZW50IHBsYWNlZCBhZnRlciB0aGUgY2hpbGRyZW4uXG4gICAqL1xuICBlbmRJY29uOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJ1dHRvbiB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgVVJMIHRvIGxpbmsgdG8gd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAqIElmIGRlZmluZWQsIGFuIGBhYCBlbGVtZW50IHdpbGwgYmUgdXNlZCBhcyB0aGUgcm9vdCBub2RlLlxuICAgKi9cbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIGBzbWFsbGAgaXMgZXF1aXZhbGVudCB0byB0aGUgZGVuc2UgYnV0dG9uIHN0eWxpbmcuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3NtYWxsJywgJ21lZGl1bScsICdsYXJnZSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogRWxlbWVudCBwbGFjZWQgYmVmb3JlIHRoZSBjaGlsZHJlbi5cbiAgICovXG4gIHN0YXJ0SWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydidXR0b24nLCAncmVzZXQnLCAnc3VibWl0J10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjb250YWluZWQnLCAnb3V0bGluZWQnLCAndGV4dCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUb3VjaFJpcHBsZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpVG91Y2hSaXBwbGUnLCBzbG90KTtcbn1cbmNvbnN0IHRvdWNoUmlwcGxlQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVRvdWNoUmlwcGxlJywgWydyb290JywgJ3JpcHBsZScsICdyaXBwbGVWaXNpYmxlJywgJ3JpcHBsZVB1bHNhdGUnLCAnY2hpbGQnLCAnY2hpbGRMZWF2aW5nJywgJ2NoaWxkUHVsc2F0ZSddKTtcbmV4cG9ydCBkZWZhdWx0IHRvdWNoUmlwcGxlQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjZW50ZXJcIiwgXCJjbGFzc2VzXCIsIFwiY2xhc3NOYW1lXCJdO1xubGV0IF8gPSB0ID0+IHQsXG4gIF90LFxuICBfdDIsXG4gIF90MyxcbiAgX3Q0O1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFRyYW5zaXRpb25Hcm91cCB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IFJpcHBsZSBmcm9tICcuL1JpcHBsZSc7XG5pbXBvcnQgdG91Y2hSaXBwbGVDbGFzc2VzIGZyb20gJy4vdG91Y2hSaXBwbGVDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBEVVJBVElPTiA9IDU1MDtcbmV4cG9ydCBjb25zdCBERUxBWV9SSVBQTEUgPSA4MDtcbmNvbnN0IGVudGVyS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QgfHwgKF90ID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG4gICAgb3BhY2l0eTogMC4xO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAwLjM7XG4gIH1cbmApKTtcbmNvbnN0IGV4aXRLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDIgfHwgKF90MiA9IF9gXG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuYCkpO1xuY29uc3QgcHVsc2F0ZUtleWZyYW1lID0ga2V5ZnJhbWVzKF90MyB8fCAoX3QzID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cblxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45Mik7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG5gKSk7XG5leHBvcnQgY29uc3QgVG91Y2hSaXBwbGVSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnLFxuICBzbG90OiAnUm9vdCdcbn0pKHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDAsXG4gIHRvcDogMCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgbGVmdDogMCxcbiAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbn0pO1xuXG4vLyBUaGlzIGBzdHlsZWQoKWAgZnVuY3Rpb24gaW52b2tlcyBrZXlmcmFtZXMuIGBzdHlsZWQtY29tcG9uZW50c2Agb25seSBzdXBwb3J0cyBrZXlmcmFtZXNcbi8vIGluIHN0cmluZyB0ZW1wbGF0ZXMuIERvIG5vdCBjb252ZXJ0IHRoZXNlIHN0eWxlcyBpbiBKUyBvYmplY3QgYXMgaXQgd2lsbCBicmVhay5cbmV4cG9ydCBjb25zdCBUb3VjaFJpcHBsZVJpcHBsZSA9IHN0eWxlZChSaXBwbGUsIHtcbiAgbmFtZTogJ011aVRvdWNoUmlwcGxlJyxcbiAgc2xvdDogJ1JpcHBsZSdcbn0pKF90NCB8fCAoX3Q0ID0gX2BcbiAgb3BhY2l0eTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuXG4gICYuJHswfSB7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgfVxuXG4gICYuJHswfSB7XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gIH1cblxuICAmIC4kezB9IHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246ICR7MH1tcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8qIEBub2ZsaXAgKi9cbiAgICBsZWZ0OiAwcHg7XG4gICAgdG9wOiAwO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMjUwMG1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAyMDBtcztcbiAgfVxuYCksIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCBlbnRlcktleWZyYW1lLCBEVVJBVElPTiwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVQdWxzYXRlLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlciwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRMZWF2aW5nLCBleGl0S2V5ZnJhbWUsIERVUkFUSU9OLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkUHVsc2F0ZSwgcHVsc2F0ZUtleWZyYW1lLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqXG4gKiBUT0RPIHY1OiBNYWtlIHByaXZhdGVcbiAqL1xuY29uc3QgVG91Y2hSaXBwbGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUb3VjaFJpcHBsZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjZW50ZXI6IGNlbnRlclByb3AgPSBmYWxzZSxcbiAgICAgIGNsYXNzZXMgPSB7fSxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBbcmlwcGxlcywgc2V0UmlwcGxlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gIGNvbnN0IG5leHRLZXkgPSBSZWFjdC51c2VSZWYoMCk7XG4gIGNvbnN0IHJpcHBsZUNhbGxiYWNrID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyaXBwbGVDYWxsYmFjay5jdXJyZW50KSB7XG4gICAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50KCk7XG4gICAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtyaXBwbGVzXSk7XG5cbiAgLy8gVXNlZCB0byBmaWx0ZXIgb3V0IG1vdXNlIGVtdWxhdGVkIGV2ZW50cyBvbiBtb2JpbGUuXG4gIGNvbnN0IGlnbm9yaW5nTW91c2VEb3duID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgLy8gV2UgdXNlIGEgdGltZXIgaW4gb3JkZXIgdG8gb25seSBzaG93IHRoZSByaXBwbGVzIGZvciB0b3VjaCBcImNsaWNrXCIgbGlrZSBldmVudHMuXG4gIC8vIFdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB0aGUgcmlwcGxlIGZvciB0b3VjaCBzY3JvbGwgZXZlbnRzLlxuICBjb25zdCBzdGFydFRpbWVyID0gUmVhY3QudXNlUmVmKDApO1xuXG4gIC8vIFRoaXMgaXMgdGhlIGhvb2sgY2FsbGVkIG9uY2UgdGhlIHByZXZpb3VzIHRpbWVvdXQgaXMgcmVhZHkuXG4gIGNvbnN0IHN0YXJ0VGltZXJDb21taXQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGNvbnRhaW5lciA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHN0YXJ0VGltZXIuY3VycmVudCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoc3RhcnRUaW1lci5jdXJyZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG4gIGNvbnN0IHN0YXJ0Q29tbWl0ID0gUmVhY3QudXNlQ2FsbGJhY2socGFyYW1zID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBwdWxzYXRlLFxuICAgICAgcmlwcGxlWCxcbiAgICAgIHJpcHBsZVksXG4gICAgICByaXBwbGVTaXplLFxuICAgICAgY2JcbiAgICB9ID0gcGFyYW1zO1xuICAgIHNldFJpcHBsZXMob2xkUmlwcGxlcyA9PiBbLi4ub2xkUmlwcGxlcywgLyojX19QVVJFX18qL19qc3goVG91Y2hSaXBwbGVSaXBwbGUsIHtcbiAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgcmlwcGxlOiBjbHN4KGNsYXNzZXMucmlwcGxlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlKSxcbiAgICAgICAgcmlwcGxlVmlzaWJsZTogY2xzeChjbGFzc2VzLnJpcHBsZVZpc2libGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVWaXNpYmxlKSxcbiAgICAgICAgcmlwcGxlUHVsc2F0ZTogY2xzeChjbGFzc2VzLnJpcHBsZVB1bHNhdGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVQdWxzYXRlKSxcbiAgICAgICAgY2hpbGQ6IGNsc3goY2xhc3Nlcy5jaGlsZCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkKSxcbiAgICAgICAgY2hpbGRMZWF2aW5nOiBjbHN4KGNsYXNzZXMuY2hpbGRMZWF2aW5nLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRMZWF2aW5nKSxcbiAgICAgICAgY2hpbGRQdWxzYXRlOiBjbHN4KGNsYXNzZXMuY2hpbGRQdWxzYXRlLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRQdWxzYXRlKVxuICAgICAgfSxcbiAgICAgIHRpbWVvdXQ6IERVUkFUSU9OLFxuICAgICAgcHVsc2F0ZTogcHVsc2F0ZSxcbiAgICAgIHJpcHBsZVg6IHJpcHBsZVgsXG4gICAgICByaXBwbGVZOiByaXBwbGVZLFxuICAgICAgcmlwcGxlU2l6ZTogcmlwcGxlU2l6ZVxuICAgIH0sIG5leHRLZXkuY3VycmVudCldKTtcbiAgICBuZXh0S2V5LmN1cnJlbnQgKz0gMTtcbiAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gY2I7XG4gIH0sIFtjbGFzc2VzXSk7XG4gIGNvbnN0IHN0YXJ0ID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50ID0ge30sIG9wdGlvbnMgPSB7fSwgY2IgPSAoKSA9PiB7fSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHB1bHNhdGUgPSBmYWxzZSxcbiAgICAgIGNlbnRlciA9IGNlbnRlclByb3AgfHwgb3B0aW9ucy5wdWxzYXRlLFxuICAgICAgZmFrZUVsZW1lbnQgPSBmYWxzZSAvLyBGb3IgdGVzdCBwdXJwb3Nlc1xuICAgIH0gPSBvcHRpb25zO1xuICAgIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSAnbW91c2Vkb3duJyAmJiBpZ25vcmluZ01vdXNlRG93bi5jdXJyZW50KSB7XG4gICAgICBpZ25vcmluZ01vdXNlRG93bi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSAndG91Y2hzdGFydCcpIHtcbiAgICAgIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50ID0gZmFrZUVsZW1lbnQgPyBudWxsIDogY29udGFpbmVyLmN1cnJlbnQ7XG4gICAgY29uc3QgcmVjdCA9IGVsZW1lbnQgPyBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwXG4gICAgfTtcblxuICAgIC8vIEdldCB0aGUgc2l6ZSBvZiB0aGUgcmlwcGxlXG4gICAgbGV0IHJpcHBsZVg7XG4gICAgbGV0IHJpcHBsZVk7XG4gICAgbGV0IHJpcHBsZVNpemU7XG4gICAgaWYgKGNlbnRlciB8fCBldmVudCA9PT0gdW5kZWZpbmVkIHx8IGV2ZW50LmNsaWVudFggPT09IDAgJiYgZXZlbnQuY2xpZW50WSA9PT0gMCB8fCAhZXZlbnQuY2xpZW50WCAmJiAhZXZlbnQudG91Y2hlcykge1xuICAgICAgcmlwcGxlWCA9IE1hdGgucm91bmQocmVjdC53aWR0aCAvIDIpO1xuICAgICAgcmlwcGxlWSA9IE1hdGgucm91bmQocmVjdC5oZWlnaHQgLyAyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjbGllbnRYLFxuICAgICAgICBjbGllbnRZXG4gICAgICB9ID0gZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDAgPyBldmVudC50b3VjaGVzWzBdIDogZXZlbnQ7XG4gICAgICByaXBwbGVYID0gTWF0aC5yb3VuZChjbGllbnRYIC0gcmVjdC5sZWZ0KTtcbiAgICAgIHJpcHBsZVkgPSBNYXRoLnJvdW5kKGNsaWVudFkgLSByZWN0LnRvcCk7XG4gICAgfVxuICAgIGlmIChjZW50ZXIpIHtcbiAgICAgIHJpcHBsZVNpemUgPSBNYXRoLnNxcnQoKDIgKiByZWN0LndpZHRoICoqIDIgKyByZWN0LmhlaWdodCAqKiAyKSAvIDMpO1xuXG4gICAgICAvLyBGb3Igc29tZSByZWFzb24gdGhlIGFuaW1hdGlvbiBpcyBicm9rZW4gb24gTW9iaWxlIENocm9tZSBpZiB0aGUgc2l6ZSBpcyBldmVuLlxuICAgICAgaWYgKHJpcHBsZVNpemUgJSAyID09PSAwKSB7XG4gICAgICAgIHJpcHBsZVNpemUgKz0gMTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2l6ZVggPSBNYXRoLm1heChNYXRoLmFicygoZWxlbWVudCA/IGVsZW1lbnQuY2xpZW50V2lkdGggOiAwKSAtIHJpcHBsZVgpLCByaXBwbGVYKSAqIDIgKyAyO1xuICAgICAgY29uc3Qgc2l6ZVkgPSBNYXRoLm1heChNYXRoLmFicygoZWxlbWVudCA/IGVsZW1lbnQuY2xpZW50SGVpZ2h0IDogMCkgLSByaXBwbGVZKSwgcmlwcGxlWSkgKiAyICsgMjtcbiAgICAgIHJpcHBsZVNpemUgPSBNYXRoLnNxcnQoc2l6ZVggKiogMiArIHNpemVZICoqIDIpO1xuICAgIH1cblxuICAgIC8vIFRvdWNoZSBkZXZpY2VzXG4gICAgaWYgKGV2ZW50ICE9IG51bGwgJiYgZXZlbnQudG91Y2hlcykge1xuICAgICAgLy8gY2hlY2sgdGhhdCB0aGlzIGlzbid0IGFub3RoZXIgdG91Y2hzdGFydCBkdWUgdG8gbXVsdGl0b3VjaFxuICAgICAgLy8gb3RoZXJ3aXNlIHdlIHdpbGwgb25seSBjbGVhciBhIHNpbmdsZSB0aW1lciB3aGVuIHVubW91bnRpbmcgd2hpbGUgdHdvXG4gICAgICAvLyBhcmUgcnVubmluZ1xuICAgICAgaWYgKHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBQcmVwYXJlIHRoZSByaXBwbGUgZWZmZWN0LlxuICAgICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSAoKSA9PiB7XG4gICAgICAgICAgc3RhcnRDb21taXQoe1xuICAgICAgICAgICAgcHVsc2F0ZSxcbiAgICAgICAgICAgIHJpcHBsZVgsXG4gICAgICAgICAgICByaXBwbGVZLFxuICAgICAgICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgICAgICAgIGNiXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIERlbGF5IHRoZSBleGVjdXRpb24gb2YgdGhlIHJpcHBsZSBlZmZlY3QuXG4gICAgICAgIHN0YXJ0VGltZXIuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmIChzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCgpO1xuICAgICAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIERFTEFZX1JJUFBMRSk7IC8vIFdlIGhhdmUgdG8gbWFrZSBhIHRyYWRlb2ZmIHdpdGggdGhpcyB2YWx1ZS5cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRDb21taXQoe1xuICAgICAgICBwdWxzYXRlLFxuICAgICAgICByaXBwbGVYLFxuICAgICAgICByaXBwbGVZLFxuICAgICAgICByaXBwbGVTaXplLFxuICAgICAgICBjYlxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbY2VudGVyUHJvcCwgc3RhcnRDb21taXRdKTtcbiAgY29uc3QgcHVsc2F0ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzdGFydCh7fSwge1xuICAgICAgcHVsc2F0ZTogdHJ1ZVxuICAgIH0pO1xuICB9LCBbc3RhcnRdKTtcbiAgY29uc3Qgc3RvcCA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCwgY2IpID0+IHtcbiAgICBjbGVhclRpbWVvdXQoc3RhcnRUaW1lci5jdXJyZW50KTtcblxuICAgIC8vIFRoZSB0b3VjaCBpbnRlcmFjdGlvbiBvY2N1cnMgdG9vIHF1aWNrbHkuXG4gICAgLy8gV2Ugc3RpbGwgd2FudCB0byBzaG93IHJpcHBsZSBlZmZlY3QuXG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICd0b3VjaGVuZCcgJiYgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KSB7XG4gICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQoKTtcbiAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgICBzdGFydFRpbWVyLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc3RvcChldmVudCwgY2IpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgc2V0UmlwcGxlcyhvbGRSaXBwbGVzID0+IHtcbiAgICAgIGlmIChvbGRSaXBwbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIG9sZFJpcHBsZXMuc2xpY2UoMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xkUmlwcGxlcztcbiAgICB9KTtcbiAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gY2I7XG4gIH0sIFtdKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgcHVsc2F0ZSxcbiAgICBzdGFydCxcbiAgICBzdG9wXG4gIH0pLCBbcHVsc2F0ZSwgc3RhcnQsIHN0b3BdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFRvdWNoUmlwcGxlUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeCh0b3VjaFJpcHBsZUNsYXNzZXMucm9vdCwgY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogY29udGFpbmVyXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KFRyYW5zaXRpb25Hcm91cCwge1xuICAgICAgY29tcG9uZW50OiBudWxsLFxuICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgIGNoaWxkcmVuOiByaXBwbGVzXG4gICAgfSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUb3VjaFJpcHBsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgc3RhcnRzIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGNvbXBvbmVudFxuICAgKiByYXRoZXIgdGhhbiBhdCB0aGUgcG9pbnQgb2YgaW50ZXJhY3Rpb24uXG4gICAqL1xuICBjZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKiBTZWUgW0NTUyBBUEldKCNjc3MpIGJlbG93IGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVG91Y2hSaXBwbGU7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIFJpcHBsZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGNsYXNzZXMsXG4gICAgcHVsc2F0ZSA9IGZhbHNlLFxuICAgIHJpcHBsZVgsXG4gICAgcmlwcGxlWSxcbiAgICByaXBwbGVTaXplLFxuICAgIGluOiBpblByb3AsXG4gICAgb25FeGl0ZWQsXG4gICAgdGltZW91dFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtsZWF2aW5nLCBzZXRMZWF2aW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcmlwcGxlQ2xhc3NOYW1lID0gY2xzeChjbGFzc05hbWUsIGNsYXNzZXMucmlwcGxlLCBjbGFzc2VzLnJpcHBsZVZpc2libGUsIHB1bHNhdGUgJiYgY2xhc3Nlcy5yaXBwbGVQdWxzYXRlKTtcbiAgY29uc3QgcmlwcGxlU3R5bGVzID0ge1xuICAgIHdpZHRoOiByaXBwbGVTaXplLFxuICAgIGhlaWdodDogcmlwcGxlU2l6ZSxcbiAgICB0b3A6IC0ocmlwcGxlU2l6ZSAvIDIpICsgcmlwcGxlWSxcbiAgICBsZWZ0OiAtKHJpcHBsZVNpemUgLyAyKSArIHJpcHBsZVhcbiAgfTtcbiAgY29uc3QgY2hpbGRDbGFzc05hbWUgPSBjbHN4KGNsYXNzZXMuY2hpbGQsIGxlYXZpbmcgJiYgY2xhc3Nlcy5jaGlsZExlYXZpbmcsIHB1bHNhdGUgJiYgY2xhc3Nlcy5jaGlsZFB1bHNhdGUpO1xuICBpZiAoIWluUHJvcCAmJiAhbGVhdmluZykge1xuICAgIHNldExlYXZpbmcodHJ1ZSk7XG4gIH1cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWluUHJvcCAmJiBvbkV4aXRlZCAhPSBudWxsKSB7XG4gICAgICAvLyByZWFjdC10cmFuc2l0aW9uLWdyb3VwI29uRXhpdGVkXG4gICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KG9uRXhpdGVkLCB0aW1lb3V0KTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW29uRXhpdGVkLCBpblByb3AsIHRpbWVvdXRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiByaXBwbGVDbGFzc05hbWUsXG4gICAgc3R5bGU6IHJpcHBsZVN0eWxlcyxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2hpbGRDbGFzc05hbWVcbiAgICB9KVxuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFJpcHBsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIFNlZSBbQ1NTIEFQSV0oI2NzcykgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZSAtIGluamVjdGVkIGZyb20gVHJhbnNpdGlvbkdyb3VwXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlIC0gaW5qZWN0ZWQgZnJvbSBUcmFuc2l0aW9uR3JvdXBcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBwdWxzYXRlcywgdHlwaWNhbGx5IGluZGljYXRpbmcgdGhlIGtleWJvYXJkIGZvY3VzIHN0YXRlIG9mIGFuIGVsZW1lbnQuXG4gICAqL1xuICBwdWxzYXRlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIERpYW1ldGVyIG9mIHRoZSByaXBwbGUuXG4gICAqL1xuICByaXBwbGVTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcmlwcGxlIGNlbnRlci5cbiAgICovXG4gIHJpcHBsZVg6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBWZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgcmlwcGxlIGNlbnRlci5cbiAgICovXG4gIHJpcHBsZVk6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBleGl0IGRlbGF5XG4gICAqL1xuICB0aW1lb3V0OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBSaXBwbGU7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUJ1dHRvbkJhc2UnLCBzbG90KTtcbn1cbmNvbnN0IGJ1dHRvbkJhc2VDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQnV0dG9uQmFzZScsIFsncm9vdCcsICdkaXNhYmxlZCcsICdmb2N1c1Zpc2libGUnXSk7XG5leHBvcnQgZGVmYXVsdCBidXR0b25CYXNlQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhY3Rpb25cIiwgXCJjZW50ZXJSaXBwbGVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZGlzYWJsZVJpcHBsZVwiLCBcImRpc2FibGVUb3VjaFJpcHBsZVwiLCBcImZvY3VzUmlwcGxlXCIsIFwiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lXCIsIFwiTGlua0NvbXBvbmVudFwiLCBcIm9uQmx1clwiLCBcIm9uQ2xpY2tcIiwgXCJvbkNvbnRleHRNZW51XCIsIFwib25EcmFnTGVhdmVcIiwgXCJvbkZvY3VzXCIsIFwib25Gb2N1c1Zpc2libGVcIiwgXCJvbktleURvd25cIiwgXCJvbktleVVwXCIsIFwib25Nb3VzZURvd25cIiwgXCJvbk1vdXNlTGVhdmVcIiwgXCJvbk1vdXNlVXBcIiwgXCJvblRvdWNoRW5kXCIsIFwib25Ub3VjaE1vdmVcIiwgXCJvblRvdWNoU3RhcnRcIiwgXCJ0YWJJbmRleFwiLCBcIlRvdWNoUmlwcGxlUHJvcHNcIiwgXCJ0b3VjaFJpcHBsZVJlZlwiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiwgcmVmVHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnLi4vdXRpbHMvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgdXNlSXNGb2N1c1Zpc2libGUgZnJvbSAnLi4vdXRpbHMvdXNlSXNGb2N1c1Zpc2libGUnO1xuaW1wb3J0IFRvdWNoUmlwcGxlIGZyb20gJy4vVG91Y2hSaXBwbGUnO1xuaW1wb3J0IGJ1dHRvbkJhc2VDbGFzc2VzLCB7IGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2J1dHRvbkJhc2VDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgZGlzYWJsZWQsXG4gICAgZm9jdXNWaXNpYmxlLFxuICAgIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBmb2N1c1Zpc2libGUgJiYgJ2ZvY3VzVmlzaWJsZSddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgaWYgKGZvY3VzVmlzaWJsZSAmJiBmb2N1c1Zpc2libGVDbGFzc05hbWUpIHtcbiAgICBjb21wb3NlZENsYXNzZXMucm9vdCArPSBgICR7Zm9jdXNWaXNpYmxlQ2xhc3NOYW1lfWA7XG4gIH1cbiAgcmV0dXJuIGNvbXBvc2VkQ2xhc3Nlcztcbn07XG5leHBvcnQgY29uc3QgQnV0dG9uQmFzZVJvb3QgPSBzdHlsZWQoJ2J1dHRvbicsIHtcbiAgbmFtZTogJ011aUJ1dHRvbkJhc2UnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnJvb3Rcbn0pKHtcbiAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAvLyBSZXNldCBkZWZhdWx0IHZhbHVlXG4gIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gIG91dGxpbmU6IDAsXG4gIGJvcmRlcjogMCxcbiAgbWFyZ2luOiAwLFxuICAvLyBSZW1vdmUgdGhlIG1hcmdpbiBpbiBTYWZhcmlcbiAgYm9yZGVyUmFkaXVzOiAwLFxuICBwYWRkaW5nOiAwLFxuICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gRmlyZWZveFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgdXNlclNlbGVjdDogJ25vbmUnLFxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgTW96QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZScsXG4gIC8vIFJlc2V0XG4gIHRleHREZWNvcmF0aW9uOiAnbm9uZScsXG4gIC8vIFNvIHdlIHRha2UgcHJlY2VkZW50IG92ZXIgdGhlIHN0eWxlIG9mIGEgbmF0aXZlIDxhIC8+IGVsZW1lbnQuXG4gIGNvbG9yOiAnaW5oZXJpdCcsXG4gICcmOjotbW96LWZvY3VzLWlubmVyJzoge1xuICAgIGJvcmRlclN0eWxlOiAnbm9uZScgLy8gUmVtb3ZlIEZpcmVmb3ggZG90dGVkIG91dGxpbmUuXG4gIH0sXG4gIFtgJi4ke2J1dHRvbkJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgIC8vIERpc2FibGUgbGluayBpbnRlcmFjdGlvbnNcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9LFxuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIGNvbG9yQWRqdXN0OiAnZXhhY3QnXG4gIH1cbn0pO1xuXG4vKipcbiAqIGBCdXR0b25CYXNlYCBjb250YWlucyBhcyBmZXcgc3R5bGVzIGFzIHBvc3NpYmxlLlxuICogSXQgYWltcyB0byBiZSBhIHNpbXBsZSBidWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBidXR0b24uXG4gKiBJdCBjb250YWlucyBhIGxvYWQgb2Ygc3R5bGUgcmVzZXQgYW5kIHNvbWUgZm9jdXMvcmlwcGxlIGxvZ2ljLlxuICovXG5jb25zdCBCdXR0b25CYXNlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQnV0dG9uQmFzZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQnV0dG9uQmFzZSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNlbnRlclJpcHBsZSA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQgPSAnYnV0dG9uJyxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUmlwcGxlID0gZmFsc2UsXG4gICAgICBkaXNhYmxlVG91Y2hSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGZvY3VzUmlwcGxlID0gZmFsc2UsXG4gICAgICBMaW5rQ29tcG9uZW50ID0gJ2EnLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uQ29udGV4dE1lbnUsXG4gICAgICBvbkRyYWdMZWF2ZSxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkZvY3VzVmlzaWJsZSxcbiAgICAgIG9uS2V5RG93bixcbiAgICAgIG9uS2V5VXAsXG4gICAgICBvbk1vdXNlRG93bixcbiAgICAgIG9uTW91c2VMZWF2ZSxcbiAgICAgIG9uTW91c2VVcCxcbiAgICAgIG9uVG91Y2hFbmQsXG4gICAgICBvblRvdWNoTW92ZSxcbiAgICAgIG9uVG91Y2hTdGFydCxcbiAgICAgIHRhYkluZGV4ID0gMCxcbiAgICAgIFRvdWNoUmlwcGxlUHJvcHMsXG4gICAgICB0b3VjaFJpcHBsZVJlZixcbiAgICAgIHR5cGVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgYnV0dG9uUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCByaXBwbGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJpcHBsZVJlZiA9IHVzZUZvcmtSZWYocmlwcGxlUmVmLCB0b3VjaFJpcHBsZVJlZik7XG4gIGNvbnN0IHtcbiAgICBpc0ZvY3VzVmlzaWJsZVJlZixcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1c1Zpc2libGUsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyVmlzaWJsZSxcbiAgICByZWY6IGZvY3VzVmlzaWJsZVJlZlxuICB9ID0gdXNlSXNGb2N1c1Zpc2libGUoKTtcbiAgY29uc3QgW2ZvY3VzVmlzaWJsZSwgc2V0Rm9jdXNWaXNpYmxlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgaWYgKGRpc2FibGVkICYmIGZvY3VzVmlzaWJsZSkge1xuICAgIHNldEZvY3VzVmlzaWJsZShmYWxzZSk7XG4gIH1cbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb24sICgpID0+ICh7XG4gICAgZm9jdXNWaXNpYmxlOiAoKSA9PiB7XG4gICAgICBzZXRGb2N1c1Zpc2libGUodHJ1ZSk7XG4gICAgICBidXR0b25SZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSksIFtdKTtcbiAgY29uc3QgW21vdW50ZWRTdGF0ZSwgc2V0TW91bnRlZFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRNb3VudGVkU3RhdGUodHJ1ZSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgZW5hYmxlVG91Y2hSaXBwbGUgPSBtb3VudGVkU3RhdGUgJiYgIWRpc2FibGVSaXBwbGUgJiYgIWRpc2FibGVkO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChmb2N1c1Zpc2libGUgJiYgZm9jdXNSaXBwbGUgJiYgIWRpc2FibGVSaXBwbGUgJiYgbW91bnRlZFN0YXRlKSB7XG4gICAgICByaXBwbGVSZWYuY3VycmVudC5wdWxzYXRlKCk7XG4gICAgfVxuICB9LCBbZGlzYWJsZVJpcHBsZSwgZm9jdXNSaXBwbGUsIGZvY3VzVmlzaWJsZSwgbW91bnRlZFN0YXRlXSk7XG4gIGZ1bmN0aW9uIHVzZVJpcHBsZUhhbmRsZXIocmlwcGxlQWN0aW9uLCBldmVudENhbGxiYWNrLCBza2lwUmlwcGxlQWN0aW9uID0gZGlzYWJsZVRvdWNoUmlwcGxlKSB7XG4gICAgcmV0dXJuIHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50Q2FsbGJhY2spIHtcbiAgICAgICAgZXZlbnRDYWxsYmFjayhldmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBpZ25vcmUgPSBza2lwUmlwcGxlQWN0aW9uO1xuICAgICAgaWYgKCFpZ25vcmUgJiYgcmlwcGxlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnRbcmlwcGxlQWN0aW9uXShldmVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSB1c2VSaXBwbGVIYW5kbGVyKCdzdGFydCcsIG9uTW91c2VEb3duKTtcbiAgY29uc3QgaGFuZGxlQ29udGV4dE1lbnUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Db250ZXh0TWVudSk7XG4gIGNvbnN0IGhhbmRsZURyYWdMZWF2ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvbkRyYWdMZWF2ZSk7XG4gIGNvbnN0IGhhbmRsZU1vdXNlVXAgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Nb3VzZVVwKTtcbiAgY29uc3QgaGFuZGxlTW91c2VMZWF2ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBldmVudCA9PiB7XG4gICAgaWYgKGZvY3VzVmlzaWJsZSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKG9uTW91c2VMZWF2ZSkge1xuICAgICAgb25Nb3VzZUxlYXZlKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVUb3VjaFN0YXJ0ID0gdXNlUmlwcGxlSGFuZGxlcignc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICBjb25zdCBoYW5kbGVUb3VjaEVuZCA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvblRvdWNoRW5kKTtcbiAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uVG91Y2hNb3ZlKTtcbiAgY29uc3QgaGFuZGxlQmx1ciA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBldmVudCA9PiB7XG4gICAgaGFuZGxlQmx1clZpc2libGUoZXZlbnQpO1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKG9uQmx1cikge1xuICAgICAgb25CbHVyKGV2ZW50KTtcbiAgICB9XG4gIH0sIGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlRm9jdXMgPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBGaXggZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzc2OVxuICAgIGlmICghYnV0dG9uUmVmLmN1cnJlbnQpIHtcbiAgICAgIGJ1dHRvblJlZi5jdXJyZW50ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICB9XG4gICAgaGFuZGxlRm9jdXNWaXNpYmxlKGV2ZW50KTtcbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gdHJ1ZSkge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKHRydWUpO1xuICAgICAgaWYgKG9uRm9jdXNWaXNpYmxlKSB7XG4gICAgICAgIG9uRm9jdXNWaXNpYmxlKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgIG9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGlzTm9uTmF0aXZlQnV0dG9uID0gKCkgPT4ge1xuICAgIGNvbnN0IGJ1dHRvbiA9IGJ1dHRvblJlZi5jdXJyZW50O1xuICAgIHJldHVybiBjb21wb25lbnQgJiYgY29tcG9uZW50ICE9PSAnYnV0dG9uJyAmJiAhKGJ1dHRvbi50YWdOYW1lID09PSAnQScgJiYgYnV0dG9uLmhyZWYpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBJRTExIHNoaW0gZm9yIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L3JlcGVhdFxuICAgKi9cbiAgY29uc3Qga2V5ZG93blJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBDaGVjayBpZiBrZXkgaXMgYWxyZWFkeSBkb3duIHRvIGF2b2lkIHJlcGVhdHMgYmVpbmcgY291bnRlZCBhcyBtdWx0aXBsZSBhY3RpdmF0aW9uc1xuICAgIGlmIChmb2N1c1JpcHBsZSAmJiAha2V5ZG93blJlZi5jdXJyZW50ICYmIGZvY3VzVmlzaWJsZSAmJiByaXBwbGVSZWYuY3VycmVudCAmJiBldmVudC5rZXkgPT09ICcgJykge1xuICAgICAga2V5ZG93blJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0b3AoZXZlbnQsICgpID0+IHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnQuc3RhcnQoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgaXNOb25OYXRpdmVCdXR0b24oKSAmJiBldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKG9uS2V5RG93bikge1xuICAgICAgb25LZXlEb3duKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBLZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGZvciBub24gaW50ZXJhY3RpdmUgZWxlbWVudHNcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTm9uTmF0aXZlQnV0dG9uKCkgJiYgZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFkaXNhYmxlZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGhhbmRsZUtleVVwID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gY2FsbGluZyBwcmV2ZW50RGVmYXVsdCBpbiBrZXlVcCBvbiBhIDxidXR0b24+IHdpbGwgbm90IGRpc3BhdGNoIGEgY2xpY2sgZXZlbnQgaWYgU3BhY2UgaXMgcHJlc3NlZFxuICAgIC8vIGh0dHBzOi8vY29kZXNhbmRib3guaW8vcC9zYW5kYm94L2J1dHRvbi1rZXl1cC1wcmV2ZW50ZGVmYXVsdC1kbjdmMFxuICAgIGlmIChmb2N1c1JpcHBsZSAmJiBldmVudC5rZXkgPT09ICcgJyAmJiByaXBwbGVSZWYuY3VycmVudCAmJiBmb2N1c1Zpc2libGUgJiYgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIGtleWRvd25SZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmlwcGxlUmVmLmN1cnJlbnQuc3RvcChldmVudCwgKCkgPT4ge1xuICAgICAgICByaXBwbGVSZWYuY3VycmVudC5wdWxzYXRlKGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAob25LZXlVcCkge1xuICAgICAgb25LZXlVcChldmVudCk7XG4gICAgfVxuXG4gICAgLy8gS2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSBmb3Igbm9uIGludGVyYWN0aXZlIGVsZW1lbnRzXG4gICAgaWYgKG9uQ2xpY2sgJiYgZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTm9uTmF0aXZlQnV0dG9uKCkgJiYgZXZlbnQua2V5ID09PSAnICcgJiYgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfSk7XG4gIGxldCBDb21wb25lbnRQcm9wID0gY29tcG9uZW50O1xuICBpZiAoQ29tcG9uZW50UHJvcCA9PT0gJ2J1dHRvbicgJiYgKG90aGVyLmhyZWYgfHwgb3RoZXIudG8pKSB7XG4gICAgQ29tcG9uZW50UHJvcCA9IExpbmtDb21wb25lbnQ7XG4gIH1cbiAgY29uc3QgYnV0dG9uUHJvcHMgPSB7fTtcbiAgaWYgKENvbXBvbmVudFByb3AgPT09ICdidXR0b24nKSB7XG4gICAgYnV0dG9uUHJvcHMudHlwZSA9IHR5cGUgPT09IHVuZGVmaW5lZCA/ICdidXR0b24nIDogdHlwZTtcbiAgICBidXR0b25Qcm9wcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9IGVsc2Uge1xuICAgIGlmICghb3RoZXIuaHJlZiAmJiAhb3RoZXIudG8pIHtcbiAgICAgIGJ1dHRvblByb3BzLnJvbGUgPSAnYnV0dG9uJztcbiAgICB9XG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICBidXR0b25Qcm9wc1snYXJpYS1kaXNhYmxlZCddID0gZGlzYWJsZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYocmVmLCBmb2N1c1Zpc2libGVSZWYsIGJ1dHRvblJlZik7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChlbmFibGVUb3VjaFJpcHBsZSAmJiAhcmlwcGxlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogVGhlIGBjb21wb25lbnRgIHByb3AgcHJvdmlkZWQgdG8gQnV0dG9uQmFzZSBpcyBpbnZhbGlkLicsICdQbGVhc2UgbWFrZSBzdXJlIHRoZSBjaGlsZHJlbiBwcm9wIGlzIHJlbmRlcmVkIGluIHRoaXMgY3VzdG9tIGNvbXBvbmVudC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW2VuYWJsZVRvdWNoUmlwcGxlXSk7XG4gIH1cbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNlbnRlclJpcHBsZSxcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZVJpcHBsZSxcbiAgICBkaXNhYmxlVG91Y2hSaXBwbGUsXG4gICAgZm9jdXNSaXBwbGUsXG4gICAgdGFiSW5kZXgsXG4gICAgZm9jdXNWaXNpYmxlXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoQnV0dG9uQmFzZVJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogQ29tcG9uZW50UHJvcCxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgb25Db250ZXh0TWVudTogaGFuZGxlQ29udGV4dE1lbnUsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxuICAgIG9uS2V5VXA6IGhhbmRsZUtleVVwLFxuICAgIG9uTW91c2VEb3duOiBoYW5kbGVNb3VzZURvd24sXG4gICAgb25Nb3VzZUxlYXZlOiBoYW5kbGVNb3VzZUxlYXZlLFxuICAgIG9uTW91c2VVcDogaGFuZGxlTW91c2VVcCxcbiAgICBvbkRyYWdMZWF2ZTogaGFuZGxlRHJhZ0xlYXZlLFxuICAgIG9uVG91Y2hFbmQ6IGhhbmRsZVRvdWNoRW5kLFxuICAgIG9uVG91Y2hNb3ZlOiBoYW5kbGVUb3VjaE1vdmUsXG4gICAgb25Ub3VjaFN0YXJ0OiBoYW5kbGVUb3VjaFN0YXJ0LFxuICAgIHJlZjogaGFuZGxlUmVmLFxuICAgIHRhYkluZGV4OiBkaXNhYmxlZCA/IC0xIDogdGFiSW5kZXgsXG4gICAgdHlwZTogdHlwZVxuICB9LCBidXR0b25Qcm9wcywgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogW2NoaWxkcmVuLCBlbmFibGVUb3VjaFJpcHBsZSA/XG4gICAgLyojX19QVVJFX18qL1xuICAgIC8qIFRvdWNoUmlwcGxlIGlzIG9ubHkgbmVlZGVkIGNsaWVudC1zaWRlLCB4MiBib29zdCBvbiB0aGUgc2VydmVyLiAqL1xuICAgIF9qc3goVG91Y2hSaXBwbGUsIF9leHRlbmRzKHtcbiAgICAgIHJlZjogaGFuZGxlUmlwcGxlUmVmLFxuICAgICAgY2VudGVyOiBjZW50ZXJSaXBwbGVcbiAgICB9LCBUb3VjaFJpcHBsZVByb3BzKSkgOiBudWxsXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJ1dHRvbkJhc2UucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogQSByZWYgZm9yIGltcGVyYXRpdmUgYWN0aW9ucy5cbiAgICogSXQgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgYGZvY3VzVmlzaWJsZSgpYCBhY3Rpb24uXG4gICAqL1xuICBhY3Rpb246IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGVzIGFyZSBjZW50ZXJlZC5cbiAgICogVGhleSB3b24ndCBzdGFydCBhdCB0aGUgY3Vyc29yIGludGVyYWN0aW9uIHBvc2l0aW9uLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2VudGVyUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZixcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqXG4gICAqIOKaoO+4jyBXaXRob3V0IGEgcmlwcGxlIHRoZXJlIGlzIG5vIHN0eWxpbmcgZm9yIDpmb2N1cy12aXNpYmxlIGJ5IGRlZmF1bHQuIEJlIHN1cmVcbiAgICogdG8gaGlnaGxpZ2h0IHRoZSBlbGVtZW50IGJ5IGFwcGx5aW5nIHNlcGFyYXRlIHN0eWxlcyB3aXRoIHRoZSBgLk11aS1mb2N1c1Zpc2libGVgIGNsYXNzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0b3VjaCByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVRvdWNoUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJhc2UgYnV0dG9uIHdpbGwgaGF2ZSBhIGtleWJvYXJkIGZvY3VzIHJpcHBsZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZvY3VzUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBjYW4gaGVscCBpZGVudGlmeSB3aGljaCBlbGVtZW50IGhhcyBrZXlib2FyZCBmb2N1cy5cbiAgICogVGhlIGNsYXNzIG5hbWUgd2lsbCBiZSBhcHBsaWVkIHdoZW4gdGhlIGVsZW1lbnQgZ2FpbnMgdGhlIGZvY3VzIHRocm91Z2gga2V5Ym9hcmQgaW50ZXJhY3Rpb24uXG4gICAqIEl0J3MgYSBwb2x5ZmlsbCBmb3IgdGhlIFtDU1MgOmZvY3VzLXZpc2libGUgc2VsZWN0b3JdKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9zZWxlY3RvcnMtNC8jdGhlLWZvY3VzLXZpc2libGUtcHNldWRvKS5cbiAgICogVGhlIHJhdGlvbmFsZSBmb3IgdXNpbmcgdGhpcyBmZWF0dXJlIFtpcyBleHBsYWluZWQgaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZS9ibG9iL0hFQUQvZXhwbGFpbmVyLm1kKS5cbiAgICogQSBbcG9seWZpbGwgY2FuIGJlIHVzZWRdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUpIHRvIGFwcGx5IGEgYGZvY3VzLXZpc2libGVgIGNsYXNzIHRvIG90aGVyIGNvbXBvbmVudHNcbiAgICogaWYgbmVlZGVkLlxuICAgKi9cbiAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgaHJlZjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8uYW55LFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIHRvIHJlbmRlciBhIGxpbmsgd2hlbiB0aGUgYGhyZWZgIHByb3AgaXMgcHJvdmlkZWQuXG4gICAqIEBkZWZhdWx0ICdhJ1xuICAgKi9cbiAgTGlua0NvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Db250ZXh0TWVudTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkRyYWdMZWF2ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBmb2N1c2VkIHdpdGggYSBrZXlib2FyZC5cbiAgICogV2UgdHJpZ2dlciBhIGBvbkZvY3VzYCBjYWxsYmFjayB0b28uXG4gICAqL1xuICBvbkZvY3VzVmlzaWJsZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlRG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbk1vdXNlTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZVVwOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hFbmQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Ub3VjaE1vdmU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Ub3VjaFN0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHRhYkluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgYFRvdWNoUmlwcGxlYCBlbGVtZW50LlxuICAgKi9cbiAgVG91Y2hSaXBwbGVQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEEgcmVmIHRoYXQgcG9pbnRzIHRvIHRoZSBgVG91Y2hSaXBwbGVgIGVsZW1lbnQuXG4gICAqL1xuICB0b3VjaFJpcHBsZVJlZjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY3VycmVudDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHB1bHNhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBzdGFydDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgIHN0b3A6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbiAgICB9KVxuICB9KV0pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYnV0dG9uJywgJ3Jlc2V0JywgJ3N1Ym1pdCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uQmFzZTsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2lyY3VsYXJQcm9ncmVzc1V0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQ2lyY3VsYXJQcm9ncmVzcycsIHNsb3QpO1xufVxuY29uc3QgY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlDaXJjdWxhclByb2dyZXNzJywgWydyb290JywgJ2RldGVybWluYXRlJywgJ2luZGV0ZXJtaW5hdGUnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ3N2ZycsICdjaXJjbGUnLCAnY2lyY2xlRGV0ZXJtaW5hdGUnLCAnY2lyY2xlSW5kZXRlcm1pbmF0ZScsICdjaXJjbGVEaXNhYmxlU2hyaW5rJ10pO1xuZXhwb3J0IGRlZmF1bHQgY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJkaXNhYmxlU2hyaW5rXCIsIFwic2l6ZVwiLCBcInN0eWxlXCIsIFwidGhpY2tuZXNzXCIsIFwidmFsdWVcIiwgXCJ2YXJpYW50XCJdO1xubGV0IF8gPSB0ID0+IHQsXG4gIF90LFxuICBfdDIsXG4gIF90MyxcbiAgX3Q0O1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgY2hhaW5Qcm9wVHlwZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGtleWZyYW1lcywgY3NzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0Q2lyY3VsYXJQcm9ncmVzc1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFNJWkUgPSA0NDtcbmNvbnN0IGNpcmN1bGFyUm90YXRlS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QgfHwgKF90ID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxuYCkpO1xuY29uc3QgY2lyY3VsYXJEYXNoS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QyIHx8IChfdDIgPSBfYFxuICAwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMXB4LCAyMDBweDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcbiAgfVxuXG4gIDUwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMTAwcHgsIDIwMHB4O1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTVweDtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEwMHB4LCAyMDBweDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTEyNXB4O1xuICB9XG5gKSk7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICB2YXJpYW50LFxuICAgIGNvbG9yLFxuICAgIGRpc2FibGVTaHJpbmtcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YF0sXG4gICAgc3ZnOiBbJ3N2ZyddLFxuICAgIGNpcmNsZTogWydjaXJjbGUnLCBgY2lyY2xlJHtjYXBpdGFsaXplKHZhcmlhbnQpfWAsIGRpc2FibGVTaHJpbmsgJiYgJ2NpcmNsZURpc2FibGVTaHJpbmsnXVxuICB9O1xuICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IENpcmN1bGFyUHJvZ3Jlc3NSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpQ2lyY3VsYXJQcm9ncmVzcycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXV07XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdkZXRlcm1pbmF0ZScgJiYge1xuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScpXG59LCBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxufSksICh7XG4gIG93bmVyU3RhdGVcbn0pID0+IG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luZGV0ZXJtaW5hdGUnICYmIGNzcyhfdDMgfHwgKF90MyA9IF9gXG4gICAgICBhbmltYXRpb246ICR7MH0gMS40cyBsaW5lYXIgaW5maW5pdGU7XG4gICAgYCksIGNpcmN1bGFyUm90YXRlS2V5ZnJhbWUpKTtcbmNvbnN0IENpcmN1bGFyUHJvZ3Jlc3NTVkcgPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLFxuICBzbG90OiAnU3ZnJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMuc3ZnXG59KSh7XG4gIGRpc3BsYXk6ICdibG9jaycgLy8gS2VlcHMgdGhlIHByb2dyZXNzIGNlbnRlcmVkXG59KTtcbmNvbnN0IENpcmN1bGFyUHJvZ3Jlc3NDaXJjbGUgPSBzdHlsZWQoJ2NpcmNsZScsIHtcbiAgbmFtZTogJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLFxuICBzbG90OiAnQ2lyY2xlJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5jaXJjbGUsIHN0eWxlc1tgY2lyY2xlJHtjYXBpdGFsaXplKG93bmVyU3RhdGUudmFyaWFudCl9YF0sIG93bmVyU3RhdGUuZGlzYWJsZVNocmluayAmJiBzdHlsZXMuY2lyY2xlRGlzYWJsZVNocmlua107XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHN0cm9rZTogJ2N1cnJlbnRDb2xvcidcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2RldGVybWluYXRlJyAmJiB7XG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnc3Ryb2tlLWRhc2hvZmZzZXQnKVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnaW5kZXRlcm1pbmF0ZScgJiYge1xuICAvLyBTb21lIGRlZmF1bHQgdmFsdWUgdGhhdCBsb29rcyBmaW5lIHdhaXRpbmcgZm9yIHRoZSBhbmltYXRpb24gdG8ga2lja3MgaW4uXG4gIHN0cm9rZURhc2hhcnJheTogJzgwcHgsIDIwMHB4JyxcbiAgc3Ryb2tlRGFzaG9mZnNldDogMCAvLyBBZGQgdGhlIHVuaXQgdG8gZml4IGEgRWRnZSAxNiBhbmQgYmVsb3cgYnVnLlxufSksICh7XG4gIG93bmVyU3RhdGVcbn0pID0+IG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luZGV0ZXJtaW5hdGUnICYmICFvd25lclN0YXRlLmRpc2FibGVTaHJpbmsgJiYgY3NzKF90NCB8fCAoX3Q0ID0gX2BcbiAgICAgIGFuaW1hdGlvbjogJHswfSAxLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgIGApLCBjaXJjdWxhckRhc2hLZXlmcmFtZSkpO1xuXG4vKipcbiAqICMjIEFSSUFcbiAqXG4gKiBJZiB0aGUgcHJvZ3Jlc3MgYmFyIGlzIGRlc2NyaWJpbmcgdGhlIGxvYWRpbmcgcHJvZ3Jlc3Mgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbiBvZiBhIHBhZ2UsXG4gKiB5b3Ugc2hvdWxkIHVzZSBgYXJpYS1kZXNjcmliZWRieWAgdG8gcG9pbnQgdG8gdGhlIHByb2dyZXNzIGJhciwgYW5kIHNldCB0aGUgYGFyaWEtYnVzeWBcbiAqIGF0dHJpYnV0ZSB0byBgdHJ1ZWAgb24gdGhhdCByZWdpb24gdW50aWwgaXQgaGFzIGZpbmlzaGVkIGxvYWRpbmcuXG4gKi9cbmNvbnN0IENpcmN1bGFyUHJvZ3Jlc3MgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBDaXJjdWxhclByb2dyZXNzKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBkaXNhYmxlU2hyaW5rID0gZmFsc2UsXG4gICAgICBzaXplID0gNDAsXG4gICAgICBzdHlsZSxcbiAgICAgIHRoaWNrbmVzcyA9IDMuNixcbiAgICAgIHZhbHVlID0gMCxcbiAgICAgIHZhcmlhbnQgPSAnaW5kZXRlcm1pbmF0ZSdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yLFxuICAgIGRpc2FibGVTaHJpbmssXG4gICAgc2l6ZSxcbiAgICB0aGlja25lc3MsXG4gICAgdmFsdWUsXG4gICAgdmFyaWFudFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCBjaXJjbGVTdHlsZSA9IHt9O1xuICBjb25zdCByb290U3R5bGUgPSB7fTtcbiAgY29uc3Qgcm9vdFByb3BzID0ge307XG4gIGlmICh2YXJpYW50ID09PSAnZGV0ZXJtaW5hdGUnKSB7XG4gICAgY29uc3QgY2lyY3VtZmVyZW5jZSA9IDIgKiBNYXRoLlBJICogKChTSVpFIC0gdGhpY2tuZXNzKSAvIDIpO1xuICAgIGNpcmNsZVN0eWxlLnN0cm9rZURhc2hhcnJheSA9IGNpcmN1bWZlcmVuY2UudG9GaXhlZCgzKTtcbiAgICByb290UHJvcHNbJ2FyaWEtdmFsdWVub3cnXSA9IE1hdGgucm91bmQodmFsdWUpO1xuICAgIGNpcmNsZVN0eWxlLnN0cm9rZURhc2hvZmZzZXQgPSBgJHsoKDEwMCAtIHZhbHVlKSAvIDEwMCAqIGNpcmN1bWZlcmVuY2UpLnRvRml4ZWQoMyl9cHhgO1xuICAgIHJvb3RTdHlsZS50cmFuc2Zvcm0gPSAncm90YXRlKC05MGRlZyknO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChDaXJjdWxhclByb2dyZXNzUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgIHdpZHRoOiBzaXplLFxuICAgICAgaGVpZ2h0OiBzaXplXG4gICAgfSwgcm9vdFN0eWxlLCBzdHlsZSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZixcbiAgICByb2xlOiBcInByb2dyZXNzYmFyXCJcbiAgfSwgcm9vdFByb3BzLCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChDaXJjdWxhclByb2dyZXNzU1ZHLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuc3ZnLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIHZpZXdCb3g6IGAke1NJWkUgLyAyfSAke1NJWkUgLyAyfSAke1NJWkV9ICR7U0laRX1gLFxuICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KENpcmN1bGFyUHJvZ3Jlc3NDaXJjbGUsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmNpcmNsZSxcbiAgICAgICAgc3R5bGU6IGNpcmNsZVN0eWxlLFxuICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICBjeDogU0laRSxcbiAgICAgICAgY3k6IFNJWkUsXG4gICAgICAgIHI6IChTSVpFIC0gdGhpY2tuZXNzKSAvIDIsXG4gICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICBzdHJva2VXaWR0aDogdGhpY2tuZXNzXG4gICAgICB9KVxuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ2lyY3VsYXJQcm9ncmVzcy5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydpbmhlcml0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzaHJpbmsgYW5pbWF0aW9uIGlzIGRpc2FibGVkLlxuICAgKiBUaGlzIG9ubHkgd29ya3MgaWYgdmFyaWFudCBpcyBgaW5kZXRlcm1pbmF0ZWAuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlU2hyaW5rOiBjaGFpblByb3BUeXBlcyhQcm9wVHlwZXMuYm9vbCwgcHJvcHMgPT4ge1xuICAgIGlmIChwcm9wcy5kaXNhYmxlU2hyaW5rICYmIHByb3BzLnZhcmlhbnQgJiYgcHJvcHMudmFyaWFudCAhPT0gJ2luZGV0ZXJtaW5hdGUnKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKCdNVUk6IFlvdSBoYXZlIHByb3ZpZGVkIHRoZSBgZGlzYWJsZVNocmlua2AgcHJvcCAnICsgJ3dpdGggYSB2YXJpYW50IG90aGVyIHRoYW4gYGluZGV0ZXJtaW5hdGVgLiBUaGlzIHdpbGwgaGF2ZSBubyBlZmZlY3QuJyk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIElmIHVzaW5nIGEgbnVtYmVyLCB0aGUgcGl4ZWwgdW5pdCBpcyBhc3N1bWVkLlxuICAgKiBJZiB1c2luZyBhIHN0cmluZywgeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgQ1NTIHVuaXQsIGUuZy4gJzNyZW0nLlxuICAgKiBAZGVmYXVsdCA0MFxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdGhpY2tuZXNzIG9mIHRoZSBjaXJjbGUuXG4gICAqIEBkZWZhdWx0IDMuNlxuICAgKi9cbiAgdGhpY2tuZXNzOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IgZm9yIHRoZSBkZXRlcm1pbmF0ZSB2YXJpYW50LlxuICAgKiBWYWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIFVzZSBpbmRldGVybWluYXRlIHdoZW4gdGhlcmUgaXMgbm8gcHJvZ3Jlc3MgdmFsdWUuXG4gICAqIEBkZWZhdWx0ICdpbmRldGVybWluYXRlJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzLm9uZU9mKFsnZGV0ZXJtaW5hdGUnLCAnaW5kZXRlcm1pbmF0ZSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IENpcmN1bGFyUHJvZ3Jlc3M7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlQ29udGFpbmVyIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuY29uc3QgQ29udGFpbmVyID0gY3JlYXRlQ29udGFpbmVyKHtcbiAgY3JlYXRlU3R5bGVkQ29tcG9uZW50OiBzdHlsZWQoJ2RpdicsIHtcbiAgICBuYW1lOiAnTXVpQ29udGFpbmVyJyxcbiAgICBzbG90OiAnUm9vdCcsXG4gICAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG93bmVyU3RhdGVcbiAgICAgIH0gPSBwcm9wcztcbiAgICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tgbWF4V2lkdGgke2NhcGl0YWxpemUoU3RyaW5nKG93bmVyU3RhdGUubWF4V2lkdGgpKX1gXSwgb3duZXJTdGF0ZS5maXhlZCAmJiBzdHlsZXMuZml4ZWQsIG93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYgc3R5bGVzLmRpc2FibGVHdXR0ZXJzXTtcbiAgICB9XG4gIH0pLFxuICB1c2VUaGVtZVByb3BzOiBpblByb3BzID0+IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlDb250YWluZXInXG4gIH0pXG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENvbnRhaW5lci5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsZWZ0IGFuZCByaWdodCBwYWRkaW5nIGlzIHJlbW92ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlR3V0dGVyczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBTZXQgdGhlIG1heC13aWR0aCB0byBtYXRjaCB0aGUgbWluLXdpZHRoIG9mIHRoZSBjdXJyZW50IGJyZWFrcG9pbnQuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSdkIHByZWZlciB0byBkZXNpZ24gZm9yIGEgZml4ZWQgc2V0IG9mIHNpemVzXG4gICAqIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGFjY29tbW9kYXRlIGEgZnVsbHkgZmx1aWQgdmlld3BvcnQuXG4gICAqIEl0J3MgZmx1aWQgYnkgZGVmYXVsdC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZpeGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgbWF4LXdpZHRoIG9mIHRoZSBjb250YWluZXIuXG4gICAqIFRoZSBjb250YWluZXIgd2lkdGggZ3Jvd3Mgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgc2NyZWVuLlxuICAgKiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGBtYXhXaWR0aGAuXG4gICAqIEBkZWZhdWx0ICdsZydcbiAgICovXG4gIG1heFdpZHRoOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJywgZmFsc2VdKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ29udGFpbmVyOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IEdsb2JhbFN0eWxlcyBmcm9tICcuLi9HbG9iYWxTdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBjb25zdCBodG1sID0gKHRoZW1lLCBlbmFibGVDb2xvclNjaGVtZSkgPT4gX2V4dGVuZHMoe1xuICBXZWJraXRGb250U21vb3RoaW5nOiAnYW50aWFsaWFzZWQnLFxuICAvLyBBbnRpYWxpYXNpbmcuXG4gIE1vek9zeEZvbnRTbW9vdGhpbmc6ICdncmF5c2NhbGUnLFxuICAvLyBBbnRpYWxpYXNpbmcuXG4gIC8vIENoYW5nZSBmcm9tIGBib3gtc2l6aW5nOiBjb250ZW50LWJveGAgc28gdGhhdCBgd2lkdGhgXG4gIC8vIGlzIG5vdCBhZmZlY3RlZCBieSBgcGFkZGluZ2Agb3IgYGJvcmRlcmAuXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAvLyBGaXggZm9udCByZXNpemUgcHJvYmxlbSBpbiBpT1NcbiAgV2Via2l0VGV4dFNpemVBZGp1c3Q6ICcxMDAlJ1xufSwgZW5hYmxlQ29sb3JTY2hlbWUgJiYgIXRoZW1lLnZhcnMgJiYge1xuICBjb2xvclNjaGVtZTogdGhlbWUucGFsZXR0ZS5tb2RlXG59KTtcbmV4cG9ydCBjb25zdCBib2R5ID0gdGhlbWUgPT4gX2V4dGVuZHMoe1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5wcmltYXJ5XG59LCB0aGVtZS50eXBvZ3JhcGh5LmJvZHkxLCB7XG4gIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYmFja2dyb3VuZC5kZWZhdWx0LFxuICAnQG1lZGlhIHByaW50Jzoge1xuICAgIC8vIFNhdmUgcHJpbnRlciBpbmsuXG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5jb21tb24ud2hpdGVcbiAgfVxufSk7XG5leHBvcnQgY29uc3Qgc3R5bGVzID0gKHRoZW1lLCBlbmFibGVDb2xvclNjaGVtZSA9IGZhbHNlKSA9PiB7XG4gIHZhciBfdGhlbWUkY29tcG9uZW50cztcbiAgY29uc3QgY29sb3JTY2hlbWVTdHlsZXMgPSB7fTtcbiAgaWYgKGVuYWJsZUNvbG9yU2NoZW1lICYmIHRoZW1lLmNvbG9yU2NoZW1lcykge1xuICAgIE9iamVjdC5lbnRyaWVzKHRoZW1lLmNvbG9yU2NoZW1lcykuZm9yRWFjaCgoW2tleSwgc2NoZW1lXSkgPT4ge1xuICAgICAgdmFyIF9zY2hlbWUkcGFsZXR0ZTtcbiAgICAgIGNvbG9yU2NoZW1lU3R5bGVzW3RoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3Ioa2V5KS5yZXBsYWNlKC9cXHMqJi8sICcnKV0gPSB7XG4gICAgICAgIGNvbG9yU2NoZW1lOiAoX3NjaGVtZSRwYWxldHRlID0gc2NoZW1lLnBhbGV0dGUpID09IG51bGwgPyB2b2lkIDAgOiBfc2NoZW1lJHBhbGV0dGUubW9kZVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBsZXQgZGVmYXVsdFN0eWxlcyA9IF9leHRlbmRzKHtcbiAgICBodG1sOiBodG1sKHRoZW1lLCBlbmFibGVDb2xvclNjaGVtZSksXG4gICAgJyosICo6OmJlZm9yZSwgKjo6YWZ0ZXInOiB7XG4gICAgICBib3hTaXppbmc6ICdpbmhlcml0J1xuICAgIH0sXG4gICAgJ3N0cm9uZywgYic6IHtcbiAgICAgIGZvbnRXZWlnaHQ6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFdlaWdodEJvbGRcbiAgICB9LFxuICAgIGJvZHk6IF9leHRlbmRzKHtcbiAgICAgIG1hcmdpbjogMFxuICAgIH0sIGJvZHkodGhlbWUpLCB7XG4gICAgICAvLyBBZGQgc3VwcG9ydCBmb3IgZG9jdW1lbnQuYm9keS5yZXF1ZXN0RnVsbFNjcmVlbigpLlxuICAgICAgLy8gT3RoZXIgZWxlbWVudHMsIGlmIGJhY2tncm91bmQgdHJhbnNwYXJlbnQsIGFyZSBub3Qgc3VwcG9ydGVkLlxuICAgICAgJyY6OmJhY2tkcm9wJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmJhY2tncm91bmQuZGVmYXVsdFxuICAgICAgfVxuICAgIH0pXG4gIH0sIGNvbG9yU2NoZW1lU3R5bGVzKTtcbiAgY29uc3QgdGhlbWVPdmVycmlkZXMgPSAoX3RoZW1lJGNvbXBvbmVudHMgPSB0aGVtZS5jb21wb25lbnRzKSA9PSBudWxsIHx8IChfdGhlbWUkY29tcG9uZW50cyA9IF90aGVtZSRjb21wb25lbnRzLk11aUNzc0Jhc2VsaW5lKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJGNvbXBvbmVudHMuc3R5bGVPdmVycmlkZXM7XG4gIGlmICh0aGVtZU92ZXJyaWRlcykge1xuICAgIGRlZmF1bHRTdHlsZXMgPSBbZGVmYXVsdFN0eWxlcywgdGhlbWVPdmVycmlkZXNdO1xuICB9XG4gIHJldHVybiBkZWZhdWx0U3R5bGVzO1xufTtcblxuLyoqXG4gKiBLaWNrc3RhcnQgYW4gZWxlZ2FudCwgY29uc2lzdGVudCwgYW5kIHNpbXBsZSBiYXNlbGluZSB0byBidWlsZCB1cG9uLlxuICovXG5mdW5jdGlvbiBDc3NCYXNlbGluZShpblByb3BzKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUNzc0Jhc2VsaW5lJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGVuYWJsZUNvbG9yU2NoZW1lID0gZmFsc2VcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChHbG9iYWxTdHlsZXMsIHtcbiAgICAgIHN0eWxlczogdGhlbWUgPT4gc3R5bGVzKHRoZW1lLCBlbmFibGVDb2xvclNjaGVtZSlcbiAgICB9KSwgY2hpbGRyZW5dXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ3NzQmFzZWxpbmUucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogWW91IGNhbiB3cmFwIGEgbm9kZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEVuYWJsZSBgY29sb3Itc2NoZW1lYCBDU1MgcHJvcGVydHkgdG8gdXNlIGB0aGVtZS5wYWxldHRlLm1vZGVgLlxuICAgKiBGb3IgbW9yZSBkZXRhaWxzLCBjaGVjayBvdXQgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NvbG9yLXNjaGVtZVxuICAgKiBGb3IgYnJvd3NlciBzdXBwb3J0LCBjaGVjayBvdXQgaHR0cHM6Ly9jYW5pdXNlLmNvbS8/c2VhcmNoPWNvbG9yLXNjaGVtZVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZW5hYmxlQ29sb3JTY2hlbWU6IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ3NzQmFzZWxpbmU7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpdmlkZXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aURpdmlkZXInLCBzbG90KTtcbn1cbmNvbnN0IGRpdmlkZXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpRGl2aWRlcicsIFsncm9vdCcsICdhYnNvbHV0ZScsICdmdWxsV2lkdGgnLCAnaW5zZXQnLCAnbWlkZGxlJywgJ2ZsZXhJdGVtJywgJ2xpZ2h0JywgJ3ZlcnRpY2FsJywgJ3dpdGhDaGlsZHJlbicsICd3aXRoQ2hpbGRyZW5WZXJ0aWNhbCcsICd0ZXh0QWxpZ25SaWdodCcsICd0ZXh0QWxpZ25MZWZ0JywgJ3dyYXBwZXInLCAnd3JhcHBlclZlcnRpY2FsJ10pO1xuZXhwb3J0IGRlZmF1bHQgZGl2aWRlckNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWRkRW5kTGlzdGVuZXJcIiwgXCJhcHBlYXJcIiwgXCJjaGlsZHJlblwiLCBcImVhc2luZ1wiLCBcImluXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRlZFwiLCBcIm9uRXhpdGluZ1wiLCBcInN0eWxlXCIsIFwidGltZW91dFwiLCBcIlRyYW5zaXRpb25Db21wb25lbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuaW1wb3J0IHsgZWxlbWVudEFjY2VwdGluZ1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgeyByZWZsb3csIGdldFRyYW5zaXRpb25Qcm9wcyB9IGZyb20gJy4uL3RyYW5zaXRpb25zL3V0aWxzJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHN0eWxlcyA9IHtcbiAgZW50ZXJpbmc6IHtcbiAgICBvcGFjaXR5OiAxXG4gIH0sXG4gIGVudGVyZWQ6IHtcbiAgICBvcGFjaXR5OiAxXG4gIH1cbn07XG5cbi8qKlxuICogVGhlIEZhZGUgdHJhbnNpdGlvbiBpcyB1c2VkIGJ5IHRoZSBbTW9kYWxdKC9tYXRlcmlhbC11aS9yZWFjdC1tb2RhbC8pIGNvbXBvbmVudC5cbiAqIEl0IHVzZXMgW3JlYWN0LXRyYW5zaXRpb24tZ3JvdXBdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXApIGludGVybmFsbHkuXG4gKi9cbmNvbnN0IEZhZGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGYWRlKHByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCBkZWZhdWx0VGltZW91dCA9IHtcbiAgICBlbnRlcjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uZW50ZXJpbmdTY3JlZW4sXG4gICAgZXhpdDogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24ubGVhdmluZ1NjcmVlblxuICB9O1xuICBjb25zdCB7XG4gICAgICBhZGRFbmRMaXN0ZW5lcixcbiAgICAgIGFwcGVhciA9IHRydWUsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGVhc2luZyxcbiAgICAgIGluOiBpblByb3AsXG4gICAgICBvbkVudGVyLFxuICAgICAgb25FbnRlcmVkLFxuICAgICAgb25FbnRlcmluZyxcbiAgICAgIG9uRXhpdCxcbiAgICAgIG9uRXhpdGVkLFxuICAgICAgb25FeGl0aW5nLFxuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0ID0gZGVmYXVsdFRpbWVvdXQsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgICAgVHJhbnNpdGlvbkNvbXBvbmVudCA9IFRyYW5zaXRpb25cbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgZW5hYmxlU3RyaWN0TW9kZUNvbXBhdCA9IHRydWU7XG4gIGNvbnN0IG5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobm9kZVJlZiwgY2hpbGRyZW4ucmVmLCByZWYpO1xuICBjb25zdCBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrID0gY2FsbGJhY2sgPT4gbWF5YmVJc0FwcGVhcmluZyA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZVJlZi5jdXJyZW50O1xuXG4gICAgICAvLyBvbkVudGVyWHh4IGFuZCBvbkV4aXRYeHggY2FsbGJhY2tzIGhhdmUgYSBkaWZmZXJlbnQgYXJndW1lbnRzLmxlbmd0aCB2YWx1ZS5cbiAgICAgIGlmIChtYXliZUlzQXBwZWFyaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhub2RlLCBtYXliZUlzQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUVudGVyaW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkVudGVyaW5nKTtcbiAgY29uc3QgaGFuZGxlRW50ZXIgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKChub2RlLCBpc0FwcGVhcmluZykgPT4ge1xuICAgIHJlZmxvdyhub2RlKTsgLy8gU28gdGhlIGFuaW1hdGlvbiBhbHdheXMgc3RhcnQgZnJvbSB0aGUgc3RhcnQuXG5cbiAgICBjb25zdCB0cmFuc2l0aW9uUHJvcHMgPSBnZXRUcmFuc2l0aW9uUHJvcHMoe1xuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZWFzaW5nXG4gICAgfSwge1xuICAgICAgbW9kZTogJ2VudGVyJ1xuICAgIH0pO1xuICAgIG5vZGUuc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5JywgdHJhbnNpdGlvblByb3BzKTtcbiAgICBpZiAob25FbnRlcikge1xuICAgICAgb25FbnRlcihub2RlLCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRW50ZXJlZCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FbnRlcmVkKTtcbiAgY29uc3QgaGFuZGxlRXhpdGluZyA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sob25FeGl0aW5nKTtcbiAgY29uc3QgaGFuZGxlRXhpdCA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sobm9kZSA9PiB7XG4gICAgY29uc3QgdHJhbnNpdGlvblByb3BzID0gZ2V0VHJhbnNpdGlvblByb3BzKHtcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVhc2luZ1xuICAgIH0sIHtcbiAgICAgIG1vZGU6ICdleGl0J1xuICAgIH0pO1xuICAgIG5vZGUuc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnb3BhY2l0eScsIHRyYW5zaXRpb25Qcm9wcyk7XG4gICAgbm9kZS5zdHlsZS50cmFuc2l0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5JywgdHJhbnNpdGlvblByb3BzKTtcbiAgICBpZiAob25FeGl0KSB7XG4gICAgICBvbkV4aXQobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRlZCk7XG4gIGNvbnN0IGhhbmRsZUFkZEVuZExpc3RlbmVyID0gbmV4dCA9PiB7XG4gICAgaWYgKGFkZEVuZExpc3RlbmVyKSB7XG4gICAgICAvLyBPbGQgY2FsbCBzaWduYXR1cmUgYmVmb3JlIGByZWFjdC10cmFuc2l0aW9uLWdyb3VwYCBpbXBsZW1lbnRlZCBgbm9kZVJlZmBcbiAgICAgIGFkZEVuZExpc3RlbmVyKG5vZGVSZWYuY3VycmVudCwgbmV4dCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGFwcGVhcjogYXBwZWFyLFxuICAgIGluOiBpblByb3AsXG4gICAgbm9kZVJlZjogZW5hYmxlU3RyaWN0TW9kZUNvbXBhdCA/IG5vZGVSZWYgOiB1bmRlZmluZWQsXG4gICAgb25FbnRlcjogaGFuZGxlRW50ZXIsXG4gICAgb25FbnRlcmVkOiBoYW5kbGVFbnRlcmVkLFxuICAgIG9uRW50ZXJpbmc6IGhhbmRsZUVudGVyaW5nLFxuICAgIG9uRXhpdDogaGFuZGxlRXhpdCxcbiAgICBvbkV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgIG9uRXhpdGluZzogaGFuZGxlRXhpdGluZyxcbiAgICBhZGRFbmRMaXN0ZW5lcjogaGFuZGxlQWRkRW5kTGlzdGVuZXIsXG4gICAgdGltZW91dDogdGltZW91dFxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAoc3RhdGUsIGNoaWxkUHJvcHMpID0+IHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB2aXNpYmlsaXR5OiBzdGF0ZSA9PT0gJ2V4aXRlZCcgJiYgIWluUHJvcCA/ICdoaWRkZW4nIDogdW5kZWZpbmVkXG4gICAgICAgIH0sIHN0eWxlc1tzdGF0ZV0sIHN0eWxlLCBjaGlsZHJlbi5wcm9wcy5zdHlsZSksXG4gICAgICAgIHJlZjogaGFuZGxlUmVmXG4gICAgICB9LCBjaGlsZFByb3BzKSk7XG4gICAgfVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEZhZGUucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIHRyYW5zaXRpb24gZW5kIHRyaWdnZXIuIENhbGxlZCB3aXRoIHRoZSB0cmFuc2l0aW9uaW5nIERPTVxuICAgKiBub2RlIGFuZCBhIGRvbmUgY2FsbGJhY2suIEFsbG93cyBmb3IgbW9yZSBmaW5lIGdyYWluZWQgdHJhbnNpdGlvbiBlbmRcbiAgICogbG9naWMuIE5vdGU6IFRpbWVvdXRzIGFyZSBzdGlsbCB1c2VkIGFzIGEgZmFsbGJhY2sgaWYgcHJvdmlkZWQuXG4gICAqL1xuICBhZGRFbmRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBlbnRlciB0cmFuc2l0aW9uIHdoZW4gaXQgZmlyc3QgbW91bnRzIGlmIGBpbmAgaXMgYWxzbyBgdHJ1ZWAuXG4gICAqIFNldCB0aGlzIHRvIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQSBzaW5nbGUgY2hpbGQgY29udGVudCBlbGVtZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IGVsZW1lbnRBY2NlcHRpbmdSZWYuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSB0cmFuc2l0aW9uIHRpbWluZyBmdW5jdGlvbi5cbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIGVhc2luZyBvciBhIG9iamVjdCBjb250YWluaW5nIGVudGVyIGFuZCBleGl0IHZhbHVlcy5cbiAgICovXG4gIGVhc2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBlbnRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBleGl0OiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCB0cmFuc2l0aW9uIGluLlxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGR1cmF0aW9uIGZvciB0aGUgdHJhbnNpdGlvbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgdGltZW91dCBmb3IgYWxsIHRyYW5zaXRpb25zLCBvciBpbmRpdmlkdWFsbHkgd2l0aCBhbiBvYmplY3QuXG4gICAqIEBkZWZhdWx0IHtcbiAgICogICBlbnRlcjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uZW50ZXJpbmdTY3JlZW4sXG4gICAqICAgZXhpdDogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24ubGVhdmluZ1NjcmVlbixcbiAgICogfVxuICAgKi9cbiAgdGltZW91dDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRmFkZTsiXSwibmFtZXMiOlsiZGVmYXVsdFRoZW1lIiwiY3JlYXRlVGhlbWUiLCJjcmVhdGVCb3giLCJ0aGVtZUlkIiwiZGVmYXVsdENsYXNzTmFtZSIsInJvb3QiLCJnZW5lcmF0ZUNsYXNzTmFtZSIsIkNsYXNzTmFtZUdlbmVyYXRvciIsImdlbmVyYXRlIiwiX2V4Y2x1ZGVkIiwiQnJlYWRjcnVtYkNvbGxhcHNlZEJ1dHRvbiIsInN0eWxlZCIsIkJ1dHRvbkJhc2UiLCJ0aGVtZSIsImRpc3BsYXkiLCJtYXJnaW5MZWZ0Iiwic3BhY2luZyIsIm1hcmdpblJpZ2h0IiwicGFsZXR0ZSIsIm1vZGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJncmV5IiwiY29sb3IiLCJib3JkZXJSYWRpdXMiLCJib3hTaGFkb3ciLCJzaGFkb3dzIiwiQnJlYWRjcnVtYkNvbGxhcHNlZEljb24iLCJNb3JlSG9yaXoiLCJ3aWR0aCIsImhlaWdodCIsInByb3BzIiwic2xvdHMiLCJzbG90UHJvcHMiLCJvdGhlclByb3BzIiwib3duZXJTdGF0ZSIsImNoaWxkcmVuIiwiZm9jdXNSaXBwbGUiLCJhcyIsIkNvbGxhcHNlZEljb24iLCJjb2xsYXBzZWRJY29uIiwiZ2V0QnJlYWRjcnVtYnNVdGlsaXR5Q2xhc3MiLCJzbG90IiwiZ2VuZXJhdGVVdGlsaXR5Q2xhc3MiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIiwiQnJlYWRjcnVtYnNSb290IiwiVHlwb2dyYXBoeSIsIm5hbWUiLCJvdmVycmlkZXNSZXNvbHZlciIsInN0eWxlcyIsImxpIiwiQnJlYWRjcnVtYnNPbCIsIm9sIiwiZmxleFdyYXAiLCJhbGlnbkl0ZW1zIiwicGFkZGluZyIsIm1hcmdpbiIsImxpc3RTdHlsZSIsIkJyZWFkY3J1bWJzU2VwYXJhdG9yIiwic2VwYXJhdG9yIiwidXNlclNlbGVjdCIsImluc2VydFNlcGFyYXRvcnMiLCJpdGVtcyIsImNsYXNzTmFtZSIsInJlZHVjZSIsImFjYyIsImN1cnJlbnQiLCJpbmRleCIsImxlbmd0aCIsImNvbmNhdCIsInB1c2giLCJpblByb3BzIiwicmVmIiwidXNlVGhlbWVQcm9wcyIsImNvbXBvbmVudCIsImV4cGFuZFRleHQiLCJpdGVtc0FmdGVyQ29sbGFwc2UiLCJpdGVtc0JlZm9yZUNvbGxhcHNlIiwibWF4SXRlbXMiLCJvdGhlciIsImV4cGFuZGVkIiwic2V0RXhwYW5kZWQiLCJjbGFzc2VzIiwiY29tcG9zZUNsYXNzZXMiLCJ1c2VVdGlsaXR5Q2xhc3NlcyIsImNvbGxhcHNlZEljb25TbG90UHJvcHMiLCJ1c2VTbG90UHJvcHMiLCJlbGVtZW50VHlwZSIsImV4dGVybmFsU2xvdFByb3BzIiwibGlzdFJlZiIsImFsbEl0ZW1zIiwidG9BcnJheSIsImZpbHRlciIsImNoaWxkIiwibWFwIiwiY2xzeCIsInNsaWNlIiwib25DbGljayIsImZvY3VzYWJsZSIsInF1ZXJ5U2VsZWN0b3IiLCJmb2N1cyIsInJlbmRlckl0ZW1zQmVmb3JlQW5kQWZ0ZXIiLCJnZXRCdXR0b25VdGlsaXR5Q2xhc3MiLCJ1bmRlZmluZWQiLCJjb21tb25JY29uU3R5bGVzIiwic2l6ZSIsImZvbnRTaXplIiwiQnV0dG9uUm9vdCIsInNob3VsZEZvcndhcmRQcm9wIiwicHJvcCIsInZhcmlhbnQiLCJjYXBpdGFsaXplIiwiY29sb3JJbmhlcml0IiwiZGlzYWJsZUVsZXZhdGlvbiIsImZ1bGxXaWR0aCIsIl90aGVtZSRwYWxldHRlJGdldENvbiIsIl90aGVtZSRwYWxldHRlIiwiaW5oZXJpdENvbnRhaW5lZEJhY2tncm91bmRDb2xvciIsImluaGVyaXRDb250YWluZWRIb3ZlckJhY2tncm91bmRDb2xvciIsIkExMDAiLCJ0eXBvZ3JhcGh5IiwiYnV0dG9uIiwibWluV2lkdGgiLCJ2YXJzIiwic2hhcGUiLCJ0cmFuc2l0aW9uIiwidHJhbnNpdGlvbnMiLCJjcmVhdGUiLCJkdXJhdGlvbiIsInNob3J0IiwidGV4dERlY29yYXRpb24iLCJ0ZXh0IiwicHJpbWFyeUNoYW5uZWwiLCJhY3Rpb24iLCJob3Zlck9wYWNpdHkiLCJwcmltYXJ5IiwibWFpbkNoYW5uZWwiLCJtYWluIiwiYm9yZGVyIiwiQnV0dG9uIiwiaW5oZXJpdENvbnRhaW5lZEhvdmVyQmciLCJkYXJrIiwiZm9jdXNWaXNpYmxlIiwiZGlzYWJsZWQiLCJkaXNhYmxlZEJhY2tncm91bmQiLCJnZXRDb250cmFzdFRleHQiLCJjYWxsIiwiaW5oZXJpdENvbnRhaW5lZEJnIiwiY29udHJhc3RUZXh0IiwiYm9yZGVyQ29sb3IiLCJweFRvUmVtIiwiQnV0dG9uU3RhcnRJY29uIiwic3RhcnRJY29uIiwiQnV0dG9uRW5kSWNvbiIsImVuZEljb24iLCJjb250ZXh0UHJvcHMiLCJidXR0b25Hcm91cEJ1dHRvbkNvbnRleHRQb3NpdGlvbkNsYXNzTmFtZSIsInJlc29sdmVkUHJvcHMiLCJyZXNvbHZlUHJvcHMiLCJkaXNhYmxlRm9jdXNSaXBwbGUiLCJlbmRJY29uUHJvcCIsImZvY3VzVmlzaWJsZUNsYXNzTmFtZSIsInN0YXJ0SWNvblByb3AiLCJ0eXBlIiwibGFiZWwiLCJjb21wb3NlZENsYXNzZXMiLCJwb3NpdGlvbkNsYXNzTmFtZSIsIl90IiwiX3QyIiwiX3QzIiwiX3Q0IiwiXyIsInQiLCJlbnRlcktleWZyYW1lIiwiZXhpdEtleWZyYW1lIiwicHVsc2F0ZUtleWZyYW1lIiwiVG91Y2hSaXBwbGVSb290Iiwib3ZlcmZsb3ciLCJwb2ludGVyRXZlbnRzIiwicG9zaXRpb24iLCJ6SW5kZXgiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJUb3VjaFJpcHBsZVJpcHBsZSIsInB1bHNhdGUiLCJyaXBwbGVYIiwicmlwcGxlWSIsInJpcHBsZVNpemUiLCJpbiIsImluUHJvcCIsIm9uRXhpdGVkIiwidGltZW91dCIsImxlYXZpbmciLCJzZXRMZWF2aW5nIiwicmlwcGxlQ2xhc3NOYW1lIiwicmlwcGxlIiwicmlwcGxlVmlzaWJsZSIsInJpcHBsZVB1bHNhdGUiLCJyaXBwbGVTdHlsZXMiLCJjaGlsZENsYXNzTmFtZSIsImNoaWxkTGVhdmluZyIsImNoaWxkUHVsc2F0ZSIsInRpbWVvdXRJZCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzdHlsZSIsImVhc2luZyIsImVhc2VJbk91dCIsInNob3J0ZXIiLCJjZW50ZXIiLCJjZW50ZXJQcm9wIiwicmlwcGxlcyIsInNldFJpcHBsZXMiLCJuZXh0S2V5IiwicmlwcGxlQ2FsbGJhY2siLCJpZ25vcmluZ01vdXNlRG93biIsInN0YXJ0VGltZXIiLCJzdGFydFRpbWVyQ29tbWl0IiwiY29udGFpbmVyIiwic3RhcnRDb21taXQiLCJwYXJhbXMiLCJjYiIsIm9sZFJpcHBsZXMiLCJzdGFydCIsImV2ZW50Iiwib3B0aW9ucyIsImZha2VFbGVtZW50IiwiZWxlbWVudCIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJjbGllbnRYIiwiY2xpZW50WSIsInRvdWNoZXMiLCJNYXRoIiwicm91bmQiLCJzcXJ0Iiwic2l6ZVgiLCJtYXgiLCJhYnMiLCJjbGllbnRXaWR0aCIsInNpemVZIiwiY2xpZW50SGVpZ2h0Iiwic3RvcCIsIlRyYW5zaXRpb25Hcm91cCIsImV4aXQiLCJnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzIiwiQnV0dG9uQmFzZVJvb3QiLCJqdXN0aWZ5Q29udGVudCIsImJveFNpemluZyIsIldlYmtpdFRhcEhpZ2hsaWdodENvbG9yIiwib3V0bGluZSIsImN1cnNvciIsInZlcnRpY2FsQWxpZ24iLCJNb3pBcHBlYXJhbmNlIiwiV2Via2l0QXBwZWFyYW5jZSIsImJvcmRlclN0eWxlIiwiY29sb3JBZGp1c3QiLCJjZW50ZXJSaXBwbGUiLCJkaXNhYmxlUmlwcGxlIiwiZGlzYWJsZVRvdWNoUmlwcGxlIiwiTGlua0NvbXBvbmVudCIsIm9uQmx1ciIsIm9uQ29udGV4dE1lbnUiLCJvbkRyYWdMZWF2ZSIsIm9uRm9jdXMiLCJvbkZvY3VzVmlzaWJsZSIsIm9uS2V5RG93biIsIm9uS2V5VXAiLCJvbk1vdXNlRG93biIsIm9uTW91c2VMZWF2ZSIsIm9uTW91c2VVcCIsIm9uVG91Y2hFbmQiLCJvblRvdWNoTW92ZSIsIm9uVG91Y2hTdGFydCIsInRhYkluZGV4IiwiVG91Y2hSaXBwbGVQcm9wcyIsInRvdWNoUmlwcGxlUmVmIiwiYnV0dG9uUmVmIiwicmlwcGxlUmVmIiwiaGFuZGxlUmlwcGxlUmVmIiwidXNlRm9ya1JlZiIsImlzRm9jdXNWaXNpYmxlUmVmIiwiaGFuZGxlRm9jdXNWaXNpYmxlIiwiaGFuZGxlQmx1clZpc2libGUiLCJmb2N1c1Zpc2libGVSZWYiLCJ1c2VJc0ZvY3VzVmlzaWJsZSIsInNldEZvY3VzVmlzaWJsZSIsIm1vdW50ZWRTdGF0ZSIsInNldE1vdW50ZWRTdGF0ZSIsImVuYWJsZVRvdWNoUmlwcGxlIiwidXNlUmlwcGxlSGFuZGxlciIsInJpcHBsZUFjdGlvbiIsImV2ZW50Q2FsbGJhY2siLCJza2lwUmlwcGxlQWN0aW9uIiwidXNlRXZlbnRDYWxsYmFjayIsImhhbmRsZU1vdXNlRG93biIsImhhbmRsZUNvbnRleHRNZW51IiwiaGFuZGxlRHJhZ0xlYXZlIiwiaGFuZGxlTW91c2VVcCIsImhhbmRsZU1vdXNlTGVhdmUiLCJwcmV2ZW50RGVmYXVsdCIsImhhbmRsZVRvdWNoU3RhcnQiLCJoYW5kbGVUb3VjaEVuZCIsImhhbmRsZVRvdWNoTW92ZSIsImhhbmRsZUJsdXIiLCJoYW5kbGVGb2N1cyIsImN1cnJlbnRUYXJnZXQiLCJpc05vbk5hdGl2ZUJ1dHRvbiIsInRhZ05hbWUiLCJocmVmIiwia2V5ZG93blJlZiIsImhhbmRsZUtleURvd24iLCJrZXkiLCJ0YXJnZXQiLCJoYW5kbGVLZXlVcCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJDb21wb25lbnRQcm9wIiwidG8iLCJidXR0b25Qcm9wcyIsInJvbGUiLCJoYW5kbGVSZWYiLCJnZXRDaXJjdWxhclByb2dyZXNzVXRpbGl0eUNsYXNzIiwiY2lyY3VsYXJSb3RhdGVLZXlmcmFtZSIsImNpcmN1bGFyRGFzaEtleWZyYW1lIiwiQ2lyY3VsYXJQcm9ncmVzc1Jvb3QiLCJDaXJjdWxhclByb2dyZXNzU1ZHIiwic3ZnIiwiQ2lyY3VsYXJQcm9ncmVzc0NpcmNsZSIsImNpcmNsZSIsImRpc2FibGVTaHJpbmsiLCJjaXJjbGVEaXNhYmxlU2hyaW5rIiwic3Ryb2tlIiwic3Ryb2tlRGFzaGFycmF5Iiwic3Ryb2tlRGFzaG9mZnNldCIsInRoaWNrbmVzcyIsInZhbHVlIiwiY2lyY2xlU3R5bGUiLCJyb290U3R5bGUiLCJyb290UHJvcHMiLCJjaXJjdW1mZXJlbmNlIiwiUEkiLCJ0b0ZpeGVkIiwidHJhbnNmb3JtIiwidmlld0JveCIsImN4IiwiY3kiLCJyIiwiZmlsbCIsInN0cm9rZVdpZHRoIiwiY3JlYXRlU3R5bGVkQ29tcG9uZW50IiwiU3RyaW5nIiwibWF4V2lkdGgiLCJmaXhlZCIsImRpc2FibGVHdXR0ZXJzIiwiaHRtbCIsImVuYWJsZUNvbG9yU2NoZW1lIiwiV2Via2l0Rm9udFNtb290aGluZyIsIk1vek9zeEZvbnRTbW9vdGhpbmciLCJXZWJraXRUZXh0U2l6ZUFkanVzdCIsImNvbG9yU2NoZW1lIiwiYm9keSIsImJvZHkxIiwiYmFja2dyb3VuZCIsImRlZmF1bHQiLCJjb21tb24iLCJ3aGl0ZSIsIl90aGVtZSRjb21wb25lbnRzIiwiY29sb3JTY2hlbWVTdHlsZXMiLCJjb2xvclNjaGVtZXMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZm9yRWFjaCIsInNjaGVtZSIsIl9zY2hlbWUkcGFsZXR0ZSIsImdldENvbG9yU2NoZW1lU2VsZWN0b3IiLCJyZXBsYWNlIiwiZGVmYXVsdFN0eWxlcyIsImZvbnRXZWlnaHQiLCJmb250V2VpZ2h0Qm9sZCIsInRoZW1lT3ZlcnJpZGVzIiwiY29tcG9uZW50cyIsIk11aUNzc0Jhc2VsaW5lIiwic3R5bGVPdmVycmlkZXMiLCJlbnRlcmluZyIsIm9wYWNpdHkiLCJlbnRlcmVkIiwiZGVmYXVsdFRpbWVvdXQiLCJlbnRlciIsImVudGVyaW5nU2NyZWVuIiwibGVhdmluZ1NjcmVlbiIsImFkZEVuZExpc3RlbmVyIiwiYXBwZWFyIiwib25FbnRlciIsIm9uRW50ZXJlZCIsIm9uRW50ZXJpbmciLCJvbkV4aXQiLCJvbkV4aXRpbmciLCJUcmFuc2l0aW9uQ29tcG9uZW50Iiwibm9kZVJlZiIsIm5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2siLCJjYWxsYmFjayIsIm1heWJlSXNBcHBlYXJpbmciLCJub2RlIiwiaGFuZGxlRW50ZXJpbmciLCJoYW5kbGVFbnRlciIsImlzQXBwZWFyaW5nIiwidHJhbnNpdGlvblByb3BzIiwid2Via2l0VHJhbnNpdGlvbiIsImhhbmRsZUVudGVyZWQiLCJoYW5kbGVFeGl0aW5nIiwiaGFuZGxlRXhpdCIsImhhbmRsZUV4aXRlZCIsIm5leHQiLCJzdGF0ZSIsImNoaWxkUHJvcHMiLCJ2aXNpYmlsaXR5Il0sInNvdXJjZVJvb3QiOiIifQ==