@touchtech/baselayer-ui 5.1.0 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- !function(e,t){for(var n in t)e[n]=t[n]}(exports,function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=12)}([function(e,t){e.exports=require("react")},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return a}));var r=Array.isArray;function a(e){var t="";if("string"==typeof e||"number"==typeof e)return e||"";if(r(e))for(var n,o=0;o<e.length;o++)""!==(n=a(e[o]))&&(t+=(t&&" ")+n);else for(var o in e)e.hasOwnProperty(o)&&e[o]&&(t+=(t&&" ")+o);return t}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Icon=void 0;var a=n(36);Object.defineProperty(t,"Icon",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Button=void 0;var a=n(13);Object.defineProperty(t,"Button",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonBadge=void 0;var a=n(15);Object.defineProperty(t,"ButtonBadge",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Label=void 0;var a=n(21);Object.defineProperty(t,"Label",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonLink=void 0;var a=n(17);Object.defineProperty(t,"ButtonLink",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSwatch=void 0;var a=n(26);Object.defineProperty(t,"ColorSwatch",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Modal=void 0;var a=n(31);Object.defineProperty(t,"Modal",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Clickable=void 0;var a=r(n(0)),o=n(3),i=n(2),u=r(n(38)),l=r(n(39));t.Clickable=function(e){var t=e.display,n=e.isDisabled,r=e.onClick;return e.selectedItem,a.default.createElement(o.Button,{align:"left",disabled:n,onClick:r,size:"medium",stretchHorizontally:!0},a.default.createElement("div",{className:u.default.container},t,a.default.createElement(i.Icon,{alt:"Dropdown",src:l.default})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MenuLinkItem=t.MenuItem=t.MenuContainer=t.Menu=void 0;var a=n(40);Object.defineProperty(t,"Menu",{enumerable:!0,get:function(){return r(a).default}});var o=n(42);Object.defineProperty(t,"MenuContainer",{enumerable:!0,get:function(){return r(o).default}});var i=n(44);Object.defineProperty(t,"MenuItem",{enumerable:!0,get:function(){return r(i).default}});var u=n(46);Object.defineProperty(t,"MenuLinkItem",{enumerable:!0,get:function(){return r(u).default}})},function(e,t,n){"use strict";n.r(t),t.default={listViewItem:"VKYoNtWTZui2AO1IlyJMTw=="}},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),a(n(3),t),a(n(4),t),a(n(6),t),a(n(19),t),a(n(24),t),a(n(7),t),a(n(29),t),a(n(34),t),a(n(48),t),a(n(51),t),a(n(2),t),a(n(54),t),a(n(57),t),a(n(60),t),a(n(5),t),a(n(63),t),a(n(10),t),a(n(8),t),a(n(68),t),a(n(71),t),a(n(74),t),a(n(79),t)},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(14));t.default=function(e){var t,n=e.children,r=e.className,u=e.onClick,l=e.containerRef,d=e.disabled,c=void 0!==d&&d,f=e.inverted,s=void 0!==f&&f,v=e.rounded,p=void 0!==v&&v,m=e.noShadow,h=void 0!==m&&m,y=e.noPadding,b=void 0!==y&&y,g=e.noBorder,_=void 0!==g&&g,O=e.transparent,w=void 0!==O&&O,j=e.stretchHorizontally,P=void 0!==j&&j,M=e.stretchVertically,E=void 0!==M&&M,k=e.autoFocus,C=void 0!==k&&k,x=e.offsetSides,S=void 0===x?[]:x,N=e.align,D=void 0===N?"center":N,A=e.size,I=void 0===A?"medium":A,B=e.type;return a.default.createElement("button",{ref:l,className:(0,o.default)([i.default.container,i.default[I],i.default[D],(t={},t[i.default.inverted]=s,t[i.default.rounded]=p,t[i.default.noShadow]=h,t[i.default.noPadding]=b,t[i.default.noBorder]=_,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=P,t[i.default.stretchVertically]=E,t[i.default.leftOffset]=p&&S.includes("left"),t[i.default.rightOffset]=p&&S.includes("right"),t),r]),disabled:c,autoFocus:C,onClick:u,type:B,role:"button"},"string"!=typeof n&&Array.isArray(n)&&n.length?a.default.createElement("div",{className:i.default.content},n):n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"xynuMu8XZSsonDuksl6AQg==",left:"Pkp0HhNHttoWIb2dwpGntw==",small:"wDOeeJGCZm0k2ZpNzFbeHg==",large:"_5QjBWtl7YXy4em4X3GPbRA==",xlarge:"kN0Lga4fBOgcigDqtODRdg==",inverted:"+5nsTnLlNOX8KFQiUhT1kQ==",rounded:"BjP-JNWJjoBfNMMztnyWOQ==",rightOffset:"lGJwNcol8CAknqxY+8Dfqg==",leftOffset:"EV+g6hUA1qv8LQ9RqgrQRQ==",noShadow:"Z3uPLrryqINfRjZppwU6NQ==",noBorder:"eEghG6GXB9IzyD3jrNZfAA==",transparent:"ss7DhVgF5JGspCASdZUYBg==",stretchHorizontally:"i8QPSr4cHYhJ7Aiue+cx0g==",stretchVertically:"WSximUM9kxYGc5VRc0iZlA==",noPadding:"SgXchjz4dJr+tc8ykLnE1A==",content:"xn8yfjN6mexRXIgyNhmkiw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(16));t.default=function(e){var t=e.children,n=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.buttonBadge,n])},t)}},function(e,t,n){"use strict";n.r(t),t.default={buttonBadge:"RSjbRiXFWAfBzcCoaMpXeA=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=o(n(18));t.default=function(e){var t,n=e.as,o=e.children,d=e.className,c=e.size,f=e.containerRef,s=e.inverted,v=void 0!==s&&s,p=e.rounded,m=void 0!==p&&p,h=e.transparent,y=void 0!==h&&h,b=e.noShadow,g=void 0!==b&&b,_=e.noPadding,O=void 0!==_&&_,w=e.noBorder,j=void 0!==w&&w,P=e.stretchHorizontally,M=void 0!==P&&P,E=e.stretchVertically,k=void 0!==E&&E,C=e.disabled,x=void 0!==C&&C,S=e.offsetSides,N=void 0===S?[]:S,D=e.align,A=void 0===D?"center":D,I=a(e,["as","children","className","size","containerRef","inverted","rounded","transparent","noShadow","noPadding","noBorder","stretchHorizontally","stretchVertically","disabled","offsetSides","align"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:f,"data-testid":"button-link",className:(0,u.default)([l.default.container,l.default[c],l.default[A],(t={},t[l.default.inverted]=v,t[l.default.rounded]=m,t[l.default.noShadow]=g,t[l.default.noPadding]=O,t[l.default.noBorder]=j,t[l.default.disabled]=x,t[l.default.transparent]=y,t[l.default.stretchHorizontally]=M,t[l.default.stretchVertically]=k,t[l.default.leftOffset]=m&&N.includes("left"),t[l.default.rightOffset]=m&&N.includes("right"),t),d])},I),"string"!=typeof o&&Array.isArray(o)&&o.length?i.default.createElement("div",{className:l.default.content},o):o)}},function(e,t,n){"use strict";n.r(t),t.default={container:"ZIr9w--fSivqWVGoSp14tA==",left:"rRyu9AVGwX+-xjTOMTSE1w==",small:"_0DBhGJvcbjEMlSqEofF-rw==",medium:"a6+zcUY6XKy94zAqUYaE6w==",large:"W+v4vFebQkxw1cdiKY-Kvg==",xlarge:"dY91DQRYUaWT4EzOJJ+GBg==",inverted:"yplCpylL4Ides+cOrqSimQ==",rounded:"MREY09+d69vV84hZnJuLYw==",rightOffset:"Hsao7mFW3lYTrNhfWvfxWw==",leftOffset:"MXlL3O8KUYeVAYcSsnNs9w==",noShadow:"Hqz4CqQcO4s0MTawrDr0oA==",transparent:"h1hNwc2UlM0C5F-xdga5dw==",stretchHorizontally:"Tmyq4+uHU+JJeYNdBH8L2Q==",stretchVertically:"JzzGnTt4aM3+9rVlNQWi0A==",noPadding:"UvI8Unjc9X0zN2l5W+tmrQ==",noBorder:"Qp5uBnQgJFoZHgYShzAPcw==",disabled:"ZXljkYpPWjDJLC4BEGMprw==",content:"_0n2MnOfJPm2wxs4M2nbGHA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=void 0;var a=n(20);Object.defineProperty(t,"Checkbox",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=n(5),c=i(n(23));t.default=function(e){var t=e.label,n=e.onChange,r=e.placeholder,a=e.checked,o=e.disabled,i=e.name,f=e.className,s=e.indeterminate,v=e.size,p=void 0===v?"medium":v,m=e.autoFocus,h=void 0!==m&&m,y=(0,u.useCallback)((function(e){return n(e.target.checked)}),[n]);return u.default.createElement(d.Label,{value:t},u.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=s)},checked:a,disabled:o,className:(0,l.default)([c.default.checkbox,f,c.default[p]]),onChange:y,placeholder:r,name:i,type:"checkbox",autoFocus:h}))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(22));t.default=function(e){var t=e.className,n=e.children,r=e.value,u=e.containerRef;return a.default.createElement("label",{ref:u,className:(0,o.default)([i.default.container,t])},r,n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"bR7PO8yRFtUlN1vsP7ecRQ=="}},function(e,t,n){"use strict";n.r(t),t.default={checkbox:"CBQZ4Pp1clb+5R8IlCO4gQ==",small:"_5jbjut7Ggt7gxenjyf9LbQ==",medium:"iPAOw2ZsNJA0nWDXqWC37g==",large:"LEykXs9mEESdwo6iZoMdUw==",xlarge:"uqpACEJ1obA4bRlaeAT27g=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorPicker=void 0;var a=n(25);Object.defineProperty(t,"ColorPicker",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(7),u=r(n(28));t.default=function(e){var t=e.colors,n=e.containerRef,r=e.onSelect,l=e.selectedColor,d=e.direction,c=void 0===d?"vertical":d,f=e.canToggle,s=void 0!==f&&f;return a.default.createElement("div",{ref:n,className:(0,o.default)([u.default.colorPicker,u.default[c]])},t.map((function(e){return a.default.createElement(i.ColorSwatch,{key:e.key,color:e,isSelected:e.key===(null==l?void 0:l.key),onClick:function(){s&&e.key===(null==l?void 0:l.key)?r(null):r(e)}})})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(27));t.default=function(e){var t,n=e.color,r=e.containerRef,u=e.isSelected,l=void 0!==u&&u,d=e.size,c=void 0===d?"medium":d,f=e.onClick;return a.default.createElement("button",{ref:r,className:(0,o.default)([i.default.colorSwatch,i.default[c],(t={},t[i.default.selected]=l,t)]),"data-testid":"color-swatch",onClick:f,style:{backgroundColor:n.hexCode}},n.label&&a.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},function(e,t,n){"use strict";n.r(t),t.default={colorSwatch:"uTf7mYfXeNT7Gn0znnR8DQ==",small:"aAbezjOmw2NyT9RU7PuyOA==",large:"Qc6SCvqbnnhJ3ztgzPZOFA==",xlarge:"_6oBBZDkRkzf7tF4bhyDtAA==",selected:"nicZfgMk+uQFPypJIkQubw==",srOnly:"GHpHEB1QXDyjeR9VnEd1Tg=="}},function(e,t,n){"use strict";n.r(t),t.default={colorPicker:"DKtP55bOfUTB1kDa-iUHqQ==",horizontal:"_34Lj8-b-13C8L09RsMineg==",vertical:"_1yugGQs4Ek0t3T8tgoKxVQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ConfirmationModal=void 0;var a=n(30);Object.defineProperty(t,"ConfirmationModal",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(8),u=r(n(33));function l(e){var t,n=e.children,r=e.containerRef,l=e.header,d=e.isOpen,c=e.buttonsLeft,f=void 0===c?[]:c,s=e.buttonsRight,v=void 0===s?[]:s,p=e.onClose,m=void 0===p?function(){}:p,h=e.noPadding,y=void 0!==h&&h,b=e.noOverlay,g=void 0!==b&&b,_=e.noShadow,O=void 0!==_&&_,w=e.baseZIndex,j=void 0===w?1019:w;return a.default.createElement(i.Modal,{containerRef:r,isOpen:d,onClose:m,noOverlay:g,noShadow:O,baseZIndex:j},a.default.createElement("div",{className:u.default.container},a.default.createElement("h1",{className:u.default.modalHeader},l),a.default.createElement("div",{className:(0,o.default)([u.default.modalContent,(t={},t[u.default.noPadding]=y,t)])},n),a.default.createElement("div",{className:u.default.modalButtonsContainer},a.default.createElement("div",{className:u.default.modalButtons},f),a.default.createElement("div",{className:u.default.modalButtons},v))))}l.displayName="ConfirmationModal",t.default=l},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=n(83),d=i(n(1)),c=i(n(32));t.default=function(e){var t,n,r=e.children,a=e.containerRef,o=e.isOpen,i=e.button,f=e.transparent,s=void 0!==f&&f,v=e.noShadow,p=void 0!==v&&v,m=e.noOverlay,h=void 0!==m&&m,y=e.onClose,b=void 0===y?function(){}:y,g=e.baseZIndex,_=void 0===g?1009:g;(0,l.useHotkeys)("Escape",b);var O=(0,u.useCallback)((function(){b()}),[b]);return o&&u.default.createElement("div",{ref:a},u.default.createElement("div",{style:{zIndex:_},className:(0,d.default)([c.default.overlay,(t={},t[c.default.noOverlay]=h,t)]),"data-testid":"modal-overlay",onClick:O}),u.default.createElement("div",{style:{zIndex:_+1},className:(0,d.default)([c.default.modal,(n={},n[c.default.transparent]=s,n[c.default.noShadow]=p,n)]),"data-testid":"modal"},r),i&&u.default.createElement("div",{style:{zIndex:_+2},className:c.default.modalButton},i))}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"pU6IB2r0LpCFPXgTvOr2gA==",noOverlay:"_5SUR9Fh-fHTy4Xr6mQC+pA==",modal:"LCAT83muXsAGrPUHQ1y+hQ==",transparent:"WHU8Qbpz+AvT-YpuQeUK-Q==",noShadow:"Gi1VTmg3GPNxnX91-m0-5g==",modalButton:"lfnfHu+xyeEjcQbAQwjITg=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"jvKSi-fKufcpK9eBWWFCLg==",modalHeader:"cx1RoQdgAbenvVXU8B7fSw==",modalContent:"ZD4v3HE-AYZXV0ITWDF7Gg==",noPadding:"_1zFF8xqyo77UxG2v549BeA==",modalButtonsContainer:"_4hQhCe5U7YByhnhO+-Gqiw==",modalButtons:"JoILbW5FnZixaJ7ETvo8+w=="}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DropdownClickable=t.Dropdown=void 0;var r=n(35);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return r.Dropdown}});var a=n(9);Object.defineProperty(t,"DropdownClickable",{enumerable:!0,get:function(){return a.Clickable}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Dropdown=void 0;var i=o(n(0)),u=n(82),l=n(9),d=n(10);function c(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,a=e.display,o=e.renderClickable,c=e.selectedItem,f=(0,i.useState)(!1),s=f[0],v=f[1],p=(0,u.useOutsideClick)((function(){return v(!1)})),m=!n||0===n.length,h=function(){return v(!s)};return i.default.createElement(d.MenuContainer,{button:"function"==typeof o?o({display:a,isDisabled:m,selectedItem:c,toggleIsOpen:h}):i.default.createElement(l.Clickable,{display:a,isDisabled:m,selectedItem:c,onClick:h}),placement:{vertical:"bottom",horizontal:"left"},ref:p},i.default.createElement(d.Menu,{isOpen:s},n&&n.map((function(e){return i.default.createElement(d.MenuItem,{isActive:e.id===(null==c?void 0:c.id),key:e.id,onClick:function(){return function(e){r(e),v(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==c?void 0:c.id)}):e.name)}))))}t.Dropdown=c,t.default=c},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(37));t.default=function(e){var t,n=e.src,r=e.alt,u=e.containerRef,l=e.size,d=void 0===l?"medium":l,c=e.inverted,f=void 0!==c&&c;return a.default.createElement("img",{ref:u,className:(0,o.default)([i.default.icon,i.default[d],(t={},t[i.default.inverted]=f,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},function(e,t,n){"use strict";n.r(t),t.default={icon:"YA2IHQD4oppOioZICHwzww==",small:"qdzs2EMmBdb0MzNS0iDhMA==",medium:"I6eEGIBK59OkdpwUouaauQ==",large:"_2bi6IEYhdMbPgPJfwoPjuA==",xlarge:"ckkr4ZFOVGuCN4EjPMqeGA==",inverted:"em5rL4nAH1Iwf3MHeIePmg=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"w0CpasjYyLR-i2PNIn9Esg=="}},function(e,t,n){"use strict";n.r(t),t.default="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14 5L7.5 12L1 5' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(41));t.default=function(e){var t,n,r=e.children,u=e.containerRef,l=e.className,d=e.isOpen,c=void 0===d||d,f=e.header,s=e.footer;return c?a.default.createElement(a.default.Fragment,null,a.default.createElement("div",{ref:u,className:(0,o.default)([i.default.menu,(t={},t[i.default.open]=c,t),l])},a.default.createElement("div",{className:i.default.scrollContainer},f&&c&&a.default.createElement("h3",{className:i.default.header},f),a.default.createElement("ul",null,c&&r)),s&&c&&a.default.createElement("div",{className:(0,o.default)([i.default.footer,(n={},n[i.default.noBorder]=!r,n)])},s))):null}},function(e,t,n){"use strict";n.r(t),t.default={menu:"rSBfsFNjjooJsDH-X+YXbw==",open:"vX7vgA9ZlF7T9ER9VJodbQ==",entrance:"GpB2LsadhuGJZvKoNOdozA==",header:"oATlBFgepZ5gAZAr-CxnAA==",footer:"wKeE73zYfb-7cRN-F8OY1g==",noBorder:"LD6LDvs-ylMrPgslj4x3hg==",scrollContainer:"T+bIpal+WHUH-hA0Gw5rVg=="}},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=i(n(43));t.default=(0,u.forwardRef)((function(e,t){var n=e.children,r=e.button,a=e.className,o=e.placement,i=void 0===o?{horizontal:"left",vertical:"bottom"}:o;return u.default.createElement("div",{ref:t,className:(0,l.default)([d.default.container,a])},r,u.default.createElement("div",{className:(0,l.default)([d.default.menuContainer,d.default[i.horizontal],d.default[i.vertical]])},n))}))},function(e,t,n){"use strict";n.r(t),t.default={container:"qcvDSfFt+w0ja2fqPc0S5w==",menuContainer:"Lwr1a3bP-95aezzmacoJfw==",top:"bBHbs+FWi6-zwWMZImF+NA==",right:"B8M42NwoZ8pUVm5R4JJv1g==",left:"pOG7tXfTFk8qqXtNC0E-Ow==",bottom:"ucvN0EFMns8bfVvsi9j9yQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(45));t.default=function(e){var t,n,r=e.children,u=e.className,l=e.onClick,d=e.noPadding,c=void 0!==d&&d,f=e.isActive,s=void 0!==f&&f;return a.default.createElement("li",{className:(0,o.default)([i.default.menuItem,(t={},t[i.default.active]=s,t),(n={},n[i.default.noPadding]=c,n),u]),onClick:l},r)}},function(e,t,n){"use strict";n.r(t),t.default={menuItem:"mJd7dRZNOwYe8I9CqFlzrg==",noPadding:"xckDOdnPPYKTkym2awtrjA==",active:"x+yrCq5Bu+jgX7SRUr9few=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=o(n(47));t.default=function(e){var t,n=e.as,o=e.children,d=e.className,c=e.noPadding,f=void 0!==c&&c,s=a(e,["as","children","className","noPadding"]);return void 0===n&&(n="a"),i.default.createElement(n,r({"data-testid":"menu-link-item",className:(0,u.default)([l.default.menuLinkItem,d,(t={},t[l.default.noPadding]=f,t)])},s),o)}},function(e,t,n){"use strict";n.r(t),t.default={menuLinkItem:"oEr8ZJXLnZyDJBORZtIV4w==",noPadding:"_3TNIJAetASyzbI+KlLTHCw==",active:"ghauCTPTBEJAuAo632z5fQ==",menuItem:"n1xn4EYuxEqOc3fCEamz3Q=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileInput=void 0;var a=n(49);Object.defineProperty(t,"FileInput",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(50));t.default=function(e){var t,n=e.children,r=e.accept,u=e.onChange,l=e.inputRef,d=e.multiple,c=void 0!==d&&d,f=e.disabled,s=void 0!==f&&f,v=e.inverted,p=void 0!==v&&v,m=e.noShadow,h=void 0!==m&&m,y=e.noBorder,b=void 0!==y&&y,g=e.noPadding,_=void 0!==g&&g,O=e.transparent,w=void 0!==O&&O,j=e.stretchHorizontally,P=void 0!==j&&j,M=e.stretchVertically,E=void 0!==M&&M,k=e.rounded,C=void 0!==k&&k,x=e.size,S=void 0===x?"medium":x;return a.default.createElement("label",{className:(0,o.default)([i.default.label,i.default[S],(t={},t[i.default.inverted]=p,t[i.default.rounded]=C,t[i.default.noShadow]=h,t[i.default.noBorder]=b,t[i.default.noPadding]=_,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=P,t[i.default.stretchVertically]=E,t)])},a.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:c,ref:l,disabled:s,onChange:u}),n)}},function(e,t,n){"use strict";n.r(t),t.default={input:"eUqa35+Em2Lch26Nxjbu+Q==",label:"nxW21h8UI0MNtwo2kcAdIw==",small:"Nda1pAcGJcyDDES5EVJsow==",large:"zqLS3YHXtjlMBsFOzrvEZg==",xlarge:"VZl5WyAkv301-hCCze5MnQ==",inverted:"vlSaJQJhzt6INvWi8NtUwg==",rounded:"b-x5TrySNGCF9HY8J3HtAA==",noShadow:"_5wl14Jjf1yxHwALxmEw6MQ==",noBorder:"dlXWQOlNe+aFkVbPxDLm4A==",noPadding:"iPxUG-ON1XLOkfVPzt7NYQ==",transparent:"BPXI9u3hgAydAc5BzzkCNg==",stretchHorizontally:"JM3JVXt77nH9ur+aL+RYDg==",stretchVertically:"MXaskffWz2k-hqtHRt2vOQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FloatingPanel=void 0;var a=n(52);Object.defineProperty(t,"FloatingPanel",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(53));t.default=function(e){var t,n=e.children,r=e.containerRef,u=e.layout,l=void 0===u?"column":u,d=e.placement,c=void 0===d?{horizontal:"center",vertical:"bottom",parent:"viewport"}:d,f="center"===c.horizontal?"horizontalCenter":c.horizontal,s="center"===c.vertical?"verticalCenter":c.vertical;return a.default.createElement("div",{ref:r,"data-testid":"floating-panel",className:(0,o.default)([i.default.container,i.default[f],i.default[s],i.default[l],(t={},t[i.default.fixed]="container"!==c.parent,t)])},n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"kUTCq7sO5cQHrn20PJUCmw==",row:"tdnc1bDHDmGbgAc7SJr69Q==",column:"Mmt076N6AxyH4NRDpCO7WA==",fixed:"_92ebQvJ5xNKJS8zakK7S2A==",plain:"y+idDxZ+5Mpp7OI3GPLAEg==",transparent:"CDqoiK0gCTJpnJgVoYgJDQ==",top:"GPsHlNPDbD6KdNQEGj8zQQ==",topEdge:"xRg0oANrxsxXNByIpnNJvw==",topOnEdge:"QAyeFFGRonxXS9FgJ2d+Ww==",right:"I8EDCJzo0ZwTtgbVTMmzdg==",rightEdge:"W2Ahm3xua2veC3ICT2KQNA==",rightOnEdge:"yjBCQYEA8mWiI98CFX5Lsw==",bottom:"WJxzXQL-5NPvDgneVgkVwA==",bottomEdge:"GVJs--pLDjWvu9C-y34ycw==",bottomOnEdge:"DDVd-PplxnLpSLFlGtFhnw==",left:"oUTMvjL0HxGenU7kJdSxHA==",leftEdge:"BiNsAkMZui+5i-KzYxq0cQ==",leftOnEdge:"_1v8imH0MTj-rMZ0rC-ihQg==",horizontalCenter:"D4p5Aa063Tnm7m0uaGhLkw==",verticalCenter:"_2deG-Y2A3zw6kF+WBnEmjw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButton=void 0;var a=n(55);Object.defineProperty(t,"IconButton",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(2),u=r(n(56)),l=n(4);t.default=function(e){var t,n=e.className,r=e.containerRef,d=e.src,c=e.alt,f=e.badgeContent,s=void 0===f?null:f,v=e.offsetSides,p=void 0===v?[]:v,m=e.onClick,h=void 0===m?function(){}:m,y=e.disabled,b=void 0!==y&&y,g=e.inverted,_=void 0!==g&&g,O=e.noShadow,w=void 0!==O&&O,j=e.noBorder,P=void 0!==j&&j,M=e.transparent,E=void 0!==M&&M,k=e.rounded,C=void 0!==k&&k,x=e.size,S=void 0===x?"medium":x,N=e.type,D=void 0===N?"button":N;return a.default.createElement("button",{ref:r,className:(0,o.default)([u.default.container,u.default[S],(t={},t[u.default.inverted]=_,t[u.default.rounded]=C,t[u.default.noShadow]=w,t[u.default.noBorder]=P,t[u.default.transparent]=E,t[u.default.topOffset]=C&&p.includes("top"),t[u.default.rightOffset]=C&&p.includes("right"),t[u.default.bottomOffset]=C&&p.includes("bottom"),t[u.default.leftOffset]=C&&p.includes("left"),t),n]),disabled:b,onClick:h,type:D,role:"button"},a.default.createElement(i.Icon,{src:d,alt:c,size:S,inverted:_}),s&&a.default.createElement(l.ButtonBadge,null,s))}},function(e,t,n){"use strict";n.r(t),t.default={container:"BvQtsUAa-fQPmXbvVSVCNQ==",small:"_8Zf4LzceiIoer7PIVR8BYA==",medium:"_7PF2dnJgZxIE+tS33xK4KA==",large:"EbOYvGKXiAabohi4Oy1CMw==",xlarge:"uOfZ9LiGznaBGIux40pFGg==",rounded:"vAj0xmjXJTfDbWICVKBo2g==",topOffset:"_8YSs-khIDzIefRRh5zH3+Q==",rightOffset:"q4jIl2XFObvsDM-4Qxvtuw==",bottomOffset:"_82KbEcEZzcR5VqHlx862PQ==",leftOffset:"xnc1+ODFmBPiif5JoqTndA==",inverted:"bhVUTdkQltctmrZe0T72kw==",noShadow:"nsgh2c6cHtzxaRrLkv6Fzw==",noBorder:"Vzy6C4djtpfL2pV5oYcOPw==",transparent:"FvdPS-+1tlsTZ1ciElsvxQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButtonLink=void 0;var a=n(58);Object.defineProperty(t,"IconButtonLink",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=n(2),d=o(n(59)),c=n(4);t.default=function(e){var t,n=e.as,o=e.containerRef,f=e.className,s=e.src,v=e.alt,p=e.badgeContent,m=void 0===p?null:p,h=e.inverted,y=void 0!==h&&h,b=e.noShadow,g=void 0!==b&&b,_=e.noBorder,O=void 0!==_&&_,w=e.transparent,j=void 0!==w&&w,P=e.rounded,M=void 0!==P&&P,E=e.offsetSides,k=void 0===E?[]:E,C=e.disabled,x=void 0!==C&&C,S=e.size,N=void 0===S?"medium":S,D=a(e,["as","containerRef","className","src","alt","badgeContent","inverted","noShadow","noBorder","transparent","rounded","offsetSides","disabled","size"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:o,"data-testid":"icon-button-link",className:(0,u.default)([d.default.container,d.default[N],(t={},t[d.default.inverted]=y,t[d.default.rounded]=M,t[d.default.noShadow]=g,t[d.default.noBorder]=O,t[d.default.disabled]=x,t[d.default.transparent]=j,t[d.default.topOffset]=M&&k.includes("top"),t[d.default.rightOffset]=M&&k.includes("right"),t[d.default.bottomOffset]=M&&k.includes("bottom"),t[d.default.leftOffset]=M&&k.includes("left"),t),f])},D),i.default.createElement(l.Icon,{src:s,alt:v,size:N,inverted:y}),m&&i.default.createElement(c.ButtonBadge,null,m))}},function(e,t,n){"use strict";n.r(t),t.default={container:"mUhC7XBYehNl1f+N5hRO4A==",small:"sMS1FgM3wwLg+LguvcXDwg==",medium:"_1jU85mEP5iaWyncLLb8lSA==",large:"cIgggS2f5PaBCITfts0rAg==",xlarge:"T2zaomwLYHQx-YF-vDtwHw==",rounded:"FMAh6gsFRrUfF-C+hxFJSA==",topOffset:"yYvrImQZypKtJ0cb+hEdWQ==",rightOffset:"EiLQUe+BD8ubxdj+JQuHzw==",bottomOffset:"_0qHNIRsm+MR9ryXpJmENQQ==",leftOffset:"LmIMlxvqkRjiIgYLHxaZBg==",inverted:"Bc+Rh6B97+74jkeMdCtrzg==",noShadow:"iGGCGif2yScMISDk-2mkFQ==",noBorder:"dnjn1oFtNVFN2fRWmKkZ3A==",transparent:"ZwiF0u6KTJDgwRC4WSL3rA==",disabled:"mcZLJzT7Vs7blQ9Rxw7RUw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Image=void 0;var a=n(61);Object.defineProperty(t,"Image",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(62));t.default=function(e){var t=e.src,n=e.alt,r=e.srcWidth,u=e.srcHeight,l=e.children,d=e.containerRef,c=e.layout,f=void 0===c?"contain":c,s=e.decoding,v=void 0===s?"auto":s,p=e.loading,m=void 0===p?"eager":p,h=a.default.createElement("img",{className:(0,o.default)([i.default.image,i.default[f]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:r,height:u,decoding:v,loading:m});return l?a.default.createElement("div",{ref:d,className:(0,o.default)([i.default.container,i.default.hasOverlay])},h,l&&a.default.createElement("div",{className:i.default.overlay},l)):h}},function(e,t,n){"use strict";n.r(t),t.default={container:"_9gQSR-+gqo5rDvWPmQoAeQ==",hasOverlay:"ii3+6K+FW4YjeQFm-IN3sA==",overlay:"_00ExNc3Kw+HOfTCFa34GIw==",image:"rwD5rHcZFRNa4dHo6j3JyQ==",cover:"_6AaN1T6SY6Eej+FaQta42g==",contain:"EQDkP0F5zzJitF8uO6H+mA==",stretchHorizontally:"GBKPkc8rsyjUVuCp1OlBoQ==",stretchVertically:"_5SzwSJ+6Z4R-Ya11gwLrSQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ListViewLinkItem=t.ListViewItem=t.ListView=void 0;var a=n(64);Object.defineProperty(t,"ListView",{enumerable:!0,get:function(){return r(a).default}});var o=n(66);Object.defineProperty(t,"ListViewItem",{enumerable:!0,get:function(){return r(o).default}});var i=n(67);Object.defineProperty(t,"ListViewLinkItem",{enumerable:!0,get:function(){return r(i).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(65));t.default=function(e){var t=e.children,n=e.className,r=e.containerRef,u=e.header,l=e.headerActions;return a.default.createElement("div",{ref:r,className:(0,o.default)([i.default.container,n])},(u||l)&&a.default.createElement("div",{className:i.default.header},u&&a.default.createElement("h3",{className:i.default.headerLabel},u),l),a.default.createElement("ul",{className:i.default.list},t))}},function(e,t,n){"use strict";n.r(t),t.default={container:"lJzdP0mnfpglFSYtKKYzJw==",header:"_82vCQ7xr0NkY4UlySPkpkw==",headerLabel:"unWePdIKn4XawRuL7CPD0g==",list:"_5BX+ZZ-AaQutczbDS2e5-w=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(3),u=r(n(11));t.default=function(e){var t=e.children,n=e.active,r=void 0!==n&&n,l=e.disabled,d=void 0!==l&&l,c=e.transparent,f=void 0!==c&&c,s=e.noPadding,v=void 0!==s&&s,p=e.size,m=void 0===p?"medium":p,h=e.align,y=void 0===h?"center":h,b=e.onClick,g=void 0===b?function(){}:b;return a.default.createElement("li",{className:(0,o.default)([u.default.listViewItem])},a.default.createElement(i.Button,{onClick:g,disabled:d,inverted:r,transparent:f,noPadding:v,align:y,size:m,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=n(6),d=o(n(11));t.default=function(e){var t=e.children,n=e.as,o=e.active,c=void 0!==o&&o,f=e.transparent,s=void 0!==f&&f,v=e.noPadding,p=void 0!==v&&v,m=e.align,h=void 0===m?"center":m,y=e.size,b=void 0===y?"medium":y,g=a(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,u.default)([d.default.listViewItem])},i.default.createElement(l.ButtonLink,r({as:n,inverted:c,transparent:s,noPadding:p,align:h,size:b,stretchHorizontally:!0,noShadow:!0,noBorder:!0},g),t))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Overlay=void 0;var a=n(69);Object.defineProperty(t,"Overlay",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(70));t.default=function(e){var t,n=e.children,r=e.containerRef,u=e.transparent,l=void 0!==u&&u,d=e.isFixed,c=void 0!==d&&d,f=e.onClick,s=void 0===f?function(){}:f;return a.default.createElement("div",{ref:r,"data-testid":"overlay",className:(0,o.default)([i.default.overlay,(t={},t[i.default.transparent]=l,t[i.default.fixed]=c,t)]),onClick:s},n)}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"EIB9-l58gC3ZvtW8vtUALA==",transparent:"CM1-n3sG8YNd73qJVXM22g==",fixed:"oO1iTNlPjda1fjrYeyLuUA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextInput=void 0;var a=n(72);Object.defineProperty(t,"TextInput",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=n(5),c=i(n(73));t.default=function(e){var t,n=e.label,r=e.onChange,a=e.onBlur,o=e.onKeyDown,i=e.placeholder,f=e.value,s=e.name,v=e.inputRef,p=e.size,m=void 0===p?"medium":p,h=e.type,y=void 0===h?"text":h,b=e.autoFocus,g=void 0!==b&&b,_=e.noBorder,O=void 0!==_&&_,w=(0,u.useCallback)((function(e){r&&r(e.target.value)}),[r]),j=u.default.createElement("input",{"data-testid":"input",ref:v,className:(0,l.default)([c.default.textInput,c.default[m],(t={},t[c.default.noBorder]=O,t)]),onChange:w,onBlur:a,onKeyDown:o,placeholder:i,name:s,type:y,value:f,autoFocus:g});return n?u.default.createElement(d.Label,{value:n},j):u.default.createElement(u.default.Fragment,null,j)}},function(e,t,n){"use strict";n.r(t),t.default={textInput:"h6PYJAzytVOk9BeK5Z0+kg==",small:"UXn-BCVg81yMd8FoUfxKSA==",medium:"_4aiP6gxNHhrWbac4k1grUw==",large:"MlnPXYOUyQ7hgI7sw1o0xA==",xlarge:"HGBuKJa9XjxB8uVhKop03A==",noBorder:"sPnSCGUNZXroElSQR193GQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ToastContainer=t.Toast=void 0;var a=n(75);Object.defineProperty(t,"Toast",{enumerable:!0,get:function(){return r(a).default}});var o=n(77);Object.defineProperty(t,"ToastContainer",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(76));t.default=function(e){var t=e.children,n=e.containerRef,r=e.onClick,i=void 0===r?function(){}:r;return a.default.createElement("div",{ref:n,className:o.default.toast,onClick:i,"data-testid":"toast"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toast:"vWa2-1mOFU+iV14jq7QPsQ==",entrance:"fTsWsKrAKlwT+GOE4wAySQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(78));t.default=function(e){var t=e.children,n=e.baseZIndex;return a.default.createElement("div",{className:(0,o.default)([i.default.toastContainer]),style:{zIndex:n},"data-testid":"toast-container"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toastContainer:"_2-Xu2sZMvN9tgDs+iyLc9Q=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Video=void 0;var a=n(80);Object.defineProperty(t,"Video",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(81));t.default=function(e){var t=e.src,n=e.type,r=e.children,u=e.containerRef,l=e.poster,d=e.muted,c=void 0===d||d,f=e.loop,s=void 0===f||f,v=e.autoPlay,p=void 0===v||v,m=e.layout,h=void 0===m?"contain":m;return r?a.default.createElement("div",{ref:u,className:(0,o.default)([i.default.container,i.default.hasOverlay])},a.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,o.default)([i.default.video,i.default[h]]),muted:c,loop:s,autoPlay:p,poster:l,playsInline:!0},a.default.createElement("source",{"data-testid":"source",src:t,type:n})),r&&a.default.createElement("div",{className:i.default.overlay},r)):a.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,o.default)([i.default.video,i.default[h]]),muted:c,loop:s,autoPlay:p,poster:l,playsInline:!0},a.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},function(e,t,n){"use strict";n.r(t),t.default={container:"ulWE-Epr85F0mUt7O1gUTQ==",hasOverlay:"zK7u1nkjc8x7YDAfYQCTpw==",video:"fR4D56LfduoBW-fimfbT0w==",cover:"VXQs4PUnWGyw56g60ZtfWg==",contain:"gxflUzO4rqCBAGuzsYEIew==",stretchHorizontally:"I-63Km4NY1W4QgMhfgU5Mg==",stretchVertically:"vNNhJlgITM+onf7zdzaufg==",overlay:"wxul7UUZlmarF86SGrd-tw=="}},function(e,t,n){"use strict";n.r(t),n.d(t,"useOutsideClick",(function(){return a})),n.d(t,"usePromise",(function(){return l})),n.d(t,"useSWRHooksConfig",(function(){return ee})),n.d(t,"useToggle",(function(){return te}));var r=n(0);function a(e){var t=Object(r.useRef)();return Object(r.useEffect)((function(){var n=function(n){t.current&&!t.current.contains(n.target)&&e(n)};return document.addEventListener("mouseup",n),document.addEventListener("touchend",n),function(){document.removeEventListener("mouseup",n),document.removeEventListener("touchend",n)}}),[e]),t}
1
+ !function(e,t){for(var n in t)e[n]=t[n]}(exports,function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=12)}([function(e,t){e.exports=require("react")},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return a}));var r=Array.isArray;function a(e){var t="";if("string"==typeof e||"number"==typeof e)return e||"";if(r(e))for(var n,o=0;o<e.length;o++)""!==(n=a(e[o]))&&(t+=(t&&" ")+n);else for(var o in e)e.hasOwnProperty(o)&&e[o]&&(t+=(t&&" ")+o);return t}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Icon=void 0;var a=n(36);Object.defineProperty(t,"Icon",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Button=void 0;var a=n(13);Object.defineProperty(t,"Button",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonBadge=void 0;var a=n(15);Object.defineProperty(t,"ButtonBadge",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Label=void 0;var a=n(21);Object.defineProperty(t,"Label",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonLink=void 0;var a=n(17);Object.defineProperty(t,"ButtonLink",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSwatch=void 0;var a=n(26);Object.defineProperty(t,"ColorSwatch",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Modal=void 0;var a=n(31);Object.defineProperty(t,"Modal",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Clickable=void 0;var a=r(n(0)),o=n(3),i=n(2),u=r(n(38)),l=r(n(39));t.Clickable=function(e){var t=e.display,n=e.isDisabled,r=e.onClick;return a.default.createElement(o.Button,{align:"left",disabled:n,onClick:r,size:"medium",stretchHorizontally:!0},a.default.createElement("div",{className:u.default.container},t,a.default.createElement(i.Icon,{alt:"Dropdown",src:l.default})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MenuLinkItem=t.MenuItem=t.MenuContainer=t.Menu=void 0;var a=n(40);Object.defineProperty(t,"Menu",{enumerable:!0,get:function(){return r(a).default}});var o=n(42);Object.defineProperty(t,"MenuContainer",{enumerable:!0,get:function(){return r(o).default}});var i=n(44);Object.defineProperty(t,"MenuItem",{enumerable:!0,get:function(){return r(i).default}});var u=n(46);Object.defineProperty(t,"MenuLinkItem",{enumerable:!0,get:function(){return r(u).default}})},function(e,t,n){"use strict";n.r(t),t.default={listViewItem:"VKYoNtWTZui2AO1IlyJMTw=="}},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),a(n(3),t),a(n(4),t),a(n(6),t),a(n(19),t),a(n(24),t),a(n(7),t),a(n(29),t),a(n(34),t),a(n(48),t),a(n(51),t),a(n(2),t),a(n(54),t),a(n(57),t),a(n(60),t),a(n(5),t),a(n(63),t),a(n(10),t),a(n(8),t),a(n(68),t),a(n(71),t),a(n(74),t),a(n(79),t),a(n(82),t)},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(14));t.default=function(e){var t,n=e.children,r=e.className,u=e.onClick,l=e.containerRef,d=e.disabled,c=void 0!==d&&d,f=e.inverted,s=void 0!==f&&f,v=e.rounded,p=void 0!==v&&v,m=e.noShadow,h=void 0!==m&&m,y=e.noPadding,b=void 0!==y&&y,g=e.noBorder,_=void 0!==g&&g,O=e.transparent,w=void 0!==O&&O,P=e.stretchHorizontally,j=void 0!==P&&P,M=e.stretchVertically,E=void 0!==M&&M,k=e.autoFocus,C=void 0!==k&&k,x=e.offsetSides,N=void 0===x?[]:x,S=e.align,D=void 0===S?"center":S,A=e.size,B=void 0===A?"medium":A,L=e.type;return a.default.createElement("button",{ref:l,className:(0,o.default)([i.default.container,i.default[B],i.default[D],(t={},t[i.default.inverted]=s,t[i.default.rounded]=p,t[i.default.noShadow]=h,t[i.default.noPadding]=b,t[i.default.noBorder]=_,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=j,t[i.default.stretchVertically]=E,t[i.default.leftOffset]=p&&N.includes("left"),t[i.default.rightOffset]=p&&N.includes("right"),t),r]),disabled:c,autoFocus:C,onClick:u,type:L,role:"button"},"string"!=typeof n&&Array.isArray(n)&&n.length?a.default.createElement("div",{className:i.default.content},n):n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"xynuMu8XZSsonDuksl6AQg==",left:"Pkp0HhNHttoWIb2dwpGntw==",small:"wDOeeJGCZm0k2ZpNzFbeHg==",large:"_5QjBWtl7YXy4em4X3GPbRA==",xlarge:"kN0Lga4fBOgcigDqtODRdg==",inverted:"+5nsTnLlNOX8KFQiUhT1kQ==",rounded:"BjP-JNWJjoBfNMMztnyWOQ==",rightOffset:"lGJwNcol8CAknqxY+8Dfqg==",leftOffset:"EV+g6hUA1qv8LQ9RqgrQRQ==",noShadow:"Z3uPLrryqINfRjZppwU6NQ==",noBorder:"eEghG6GXB9IzyD3jrNZfAA==",transparent:"ss7DhVgF5JGspCASdZUYBg==",stretchHorizontally:"i8QPSr4cHYhJ7Aiue+cx0g==",stretchVertically:"WSximUM9kxYGc5VRc0iZlA==",noPadding:"SgXchjz4dJr+tc8ykLnE1A==",content:"xn8yfjN6mexRXIgyNhmkiw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(16));t.default=function(e){var t=e.children,n=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.buttonBadge,n])},t)}},function(e,t,n){"use strict";n.r(t),t.default={buttonBadge:"RSjbRiXFWAfBzcCoaMpXeA=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=o(n(18));t.default=function(e){var t,n=e.as,o=e.children,d=e.className,c=e.size,f=e.containerRef,s=e.inverted,v=void 0!==s&&s,p=e.rounded,m=void 0!==p&&p,h=e.transparent,y=void 0!==h&&h,b=e.noShadow,g=void 0!==b&&b,_=e.noPadding,O=void 0!==_&&_,w=e.noBorder,P=void 0!==w&&w,j=e.stretchHorizontally,M=void 0!==j&&j,E=e.stretchVertically,k=void 0!==E&&E,C=e.disabled,x=void 0!==C&&C,N=e.offsetSides,S=void 0===N?[]:N,D=e.align,A=void 0===D?"center":D,B=a(e,["as","children","className","size","containerRef","inverted","rounded","transparent","noShadow","noPadding","noBorder","stretchHorizontally","stretchVertically","disabled","offsetSides","align"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:f,"data-testid":"button-link",className:(0,u.default)([l.default.container,l.default[c],l.default[A],(t={},t[l.default.inverted]=v,t[l.default.rounded]=m,t[l.default.noShadow]=g,t[l.default.noPadding]=O,t[l.default.noBorder]=P,t[l.default.disabled]=x,t[l.default.transparent]=y,t[l.default.stretchHorizontally]=M,t[l.default.stretchVertically]=k,t[l.default.leftOffset]=m&&S.includes("left"),t[l.default.rightOffset]=m&&S.includes("right"),t),d])},B),"string"!=typeof o&&Array.isArray(o)&&o.length?i.default.createElement("div",{className:l.default.content},o):o)}},function(e,t,n){"use strict";n.r(t),t.default={container:"ZIr9w--fSivqWVGoSp14tA==",left:"rRyu9AVGwX+-xjTOMTSE1w==",small:"_0DBhGJvcbjEMlSqEofF-rw==",medium:"a6+zcUY6XKy94zAqUYaE6w==",large:"W+v4vFebQkxw1cdiKY-Kvg==",xlarge:"dY91DQRYUaWT4EzOJJ+GBg==",inverted:"yplCpylL4Ides+cOrqSimQ==",rounded:"MREY09+d69vV84hZnJuLYw==",rightOffset:"Hsao7mFW3lYTrNhfWvfxWw==",leftOffset:"MXlL3O8KUYeVAYcSsnNs9w==",noShadow:"Hqz4CqQcO4s0MTawrDr0oA==",transparent:"h1hNwc2UlM0C5F-xdga5dw==",stretchHorizontally:"Tmyq4+uHU+JJeYNdBH8L2Q==",stretchVertically:"JzzGnTt4aM3+9rVlNQWi0A==",noPadding:"UvI8Unjc9X0zN2l5W+tmrQ==",noBorder:"Qp5uBnQgJFoZHgYShzAPcw==",disabled:"ZXljkYpPWjDJLC4BEGMprw==",content:"_0n2MnOfJPm2wxs4M2nbGHA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=void 0;var a=n(20);Object.defineProperty(t,"Checkbox",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=n(5),c=i(n(23));t.default=function(e){var t=e.label,n=e.onChange,r=e.placeholder,a=e.checked,o=e.disabled,i=e.name,f=e.className,s=e.indeterminate,v=e.size,p=void 0===v?"medium":v,m=e.autoFocus,h=void 0!==m&&m,y=(0,u.useCallback)((function(e){return n(e.target.checked)}),[n]);return u.default.createElement(d.Label,{value:t},u.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=s)},checked:a,disabled:o,className:(0,l.default)([c.default.checkbox,f,c.default[p]]),onChange:y,placeholder:r,name:i,type:"checkbox",autoFocus:h}))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(22));t.default=function(e){var t=e.className,n=e.children,r=e.value,u=e.containerRef;return a.default.createElement("label",{ref:u,className:(0,o.default)([i.default.container,t])},r,n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"bR7PO8yRFtUlN1vsP7ecRQ=="}},function(e,t,n){"use strict";n.r(t),t.default={checkbox:"CBQZ4Pp1clb+5R8IlCO4gQ==",small:"_5jbjut7Ggt7gxenjyf9LbQ==",medium:"iPAOw2ZsNJA0nWDXqWC37g==",large:"LEykXs9mEESdwo6iZoMdUw==",xlarge:"uqpACEJ1obA4bRlaeAT27g=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorPicker=void 0;var a=n(25);Object.defineProperty(t,"ColorPicker",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(7),u=r(n(28));t.default=function(e){var t=e.colors,n=e.containerRef,r=e.onSelect,l=e.selectedColor,d=e.direction,c=void 0===d?"vertical":d,f=e.canToggle,s=void 0!==f&&f;return a.default.createElement("div",{ref:n,className:(0,o.default)([u.default.colorPicker,u.default[c]])},t.map((function(e){return a.default.createElement(i.ColorSwatch,{key:e.key,color:e,isSelected:e.key===(null==l?void 0:l.key),onClick:function(){s&&e.key===(null==l?void 0:l.key)?r(null):r(e)}})})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(27));t.default=function(e){var t,n=e.color,r=e.containerRef,u=e.isSelected,l=void 0!==u&&u,d=e.size,c=void 0===d?"medium":d,f=e.onClick;return a.default.createElement("button",{ref:r,className:(0,o.default)([i.default.colorSwatch,i.default[c],(t={},t[i.default.selected]=l,t)]),"data-testid":"color-swatch",onClick:f,style:{backgroundColor:n.hexCode}},n.label&&a.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},function(e,t,n){"use strict";n.r(t),t.default={colorSwatch:"uTf7mYfXeNT7Gn0znnR8DQ==",small:"aAbezjOmw2NyT9RU7PuyOA==",large:"Qc6SCvqbnnhJ3ztgzPZOFA==",xlarge:"_6oBBZDkRkzf7tF4bhyDtAA==",selected:"nicZfgMk+uQFPypJIkQubw==",srOnly:"GHpHEB1QXDyjeR9VnEd1Tg=="}},function(e,t,n){"use strict";n.r(t),t.default={colorPicker:"DKtP55bOfUTB1kDa-iUHqQ==",horizontal:"_34Lj8-b-13C8L09RsMineg==",vertical:"_1yugGQs4Ek0t3T8tgoKxVQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ConfirmationModal=void 0;var a=n(30);Object.defineProperty(t,"ConfirmationModal",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(8),u=r(n(33));function l(e){var t,n=e.children,r=e.containerRef,l=e.header,d=e.isOpen,c=e.buttonsLeft,f=void 0===c?[]:c,s=e.buttonsRight,v=void 0===s?[]:s,p=e.onClose,m=void 0===p?function(){}:p,h=e.noPadding,y=void 0!==h&&h,b=e.noOverlay,g=void 0!==b&&b,_=e.noShadow,O=void 0!==_&&_,w=e.baseZIndex,P=void 0===w?1019:w;return a.default.createElement(i.Modal,{containerRef:r,isOpen:d,onClose:m,noOverlay:g,noShadow:O,baseZIndex:P},a.default.createElement("div",{className:u.default.container},!!l&&a.default.createElement("h1",{className:u.default.modalHeader},l),a.default.createElement("div",{className:(0,o.default)([u.default.modalContent,(t={},t[u.default.noPadding]=y,t)])},n),a.default.createElement("div",{className:u.default.modalButtonsContainer},a.default.createElement("div",{className:u.default.modalButtons},f),a.default.createElement("div",{className:u.default.modalButtons},v))))}l.displayName="ConfirmationModal",t.default=l},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=n(87),d=i(n(1)),c=i(n(32));t.default=function(e){var t,n,r=e.children,a=e.containerRef,o=e.isOpen,i=e.button,f=e.transparent,s=void 0!==f&&f,v=e.noShadow,p=void 0!==v&&v,m=e.noOverlay,h=void 0!==m&&m,y=e.onClose,b=void 0===y?function(){}:y,g=e.baseZIndex,_=void 0===g?1009:g;(0,l.useHotkeys)("Escape",b);var O=(0,u.useCallback)((function(){b()}),[b]);return o&&u.default.createElement("div",{ref:a},u.default.createElement("div",{style:{zIndex:_},className:(0,d.default)([c.default.overlay,(t={},t[c.default.noOverlay]=h,t)]),"data-testid":"modal-overlay",onClick:O}),u.default.createElement("div",{style:{zIndex:_+1},className:(0,d.default)([c.default.modal,(n={},n[c.default.transparent]=s,n[c.default.noShadow]=p,n)]),"data-testid":"modal"},r),i&&u.default.createElement("div",{style:{zIndex:_+2},className:c.default.modalButton},i))}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"pU6IB2r0LpCFPXgTvOr2gA==",noOverlay:"_5SUR9Fh-fHTy4Xr6mQC+pA==",modal:"LCAT83muXsAGrPUHQ1y+hQ==",transparent:"WHU8Qbpz+AvT-YpuQeUK-Q==",noShadow:"Gi1VTmg3GPNxnX91-m0-5g==",modalButton:"lfnfHu+xyeEjcQbAQwjITg=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"jvKSi-fKufcpK9eBWWFCLg==",modalHeader:"cx1RoQdgAbenvVXU8B7fSw==",modalContent:"ZD4v3HE-AYZXV0ITWDF7Gg==",noPadding:"_1zFF8xqyo77UxG2v549BeA==",modalButtonsContainer:"_4hQhCe5U7YByhnhO+-Gqiw==",modalButtons:"JoILbW5FnZixaJ7ETvo8+w=="}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DropdownClickable=t.Dropdown=void 0;var r=n(35);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return r.Dropdown}});var a=n(9);Object.defineProperty(t,"DropdownClickable",{enumerable:!0,get:function(){return a.Clickable}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Dropdown=void 0;var i=o(n(0)),u=n(86),l=n(9),d=n(10);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,a=e.display,o=e.renderClickable,c=e.selectedItem,f=(0,i.useState)(!1),s=f[0],v=f[1],p=(0,u.useOutsideClick)((function(){return v(!1)})),m=!n||0===n.length,h=function(){return v(!s)};return i.default.createElement(d.MenuContainer,{button:"function"==typeof o?o({display:a,isDisabled:m,selectedItem:c,toggleIsOpen:h}):i.default.createElement(l.Clickable,{display:a,isDisabled:m,onClick:h}),placement:{vertical:"bottom",horizontal:"left"},ref:p},i.default.createElement(d.Menu,{isOpen:s},n&&n.map((function(e){return i.default.createElement(d.MenuItem,{isActive:e.id===(null==c?void 0:c.id),key:e.id,onClick:function(){return function(e){r(e),v(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==c?void 0:c.id)}):e.name)}))))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(37));t.default=function(e){var t,n=e.src,r=e.alt,u=e.containerRef,l=e.size,d=void 0===l?"medium":l,c=e.inverted,f=void 0!==c&&c;return a.default.createElement("img",{ref:u,className:(0,o.default)([i.default.icon,i.default[d],(t={},t[i.default.inverted]=f,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},function(e,t,n){"use strict";n.r(t),t.default={icon:"YA2IHQD4oppOioZICHwzww==",small:"qdzs2EMmBdb0MzNS0iDhMA==",medium:"I6eEGIBK59OkdpwUouaauQ==",large:"_2bi6IEYhdMbPgPJfwoPjuA==",xlarge:"ckkr4ZFOVGuCN4EjPMqeGA==",inverted:"em5rL4nAH1Iwf3MHeIePmg=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"w0CpasjYyLR-i2PNIn9Esg=="}},function(e,t,n){"use strict";n.r(t),t.default="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14 5L7.5 12L1 5' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(41));t.default=function(e){var t,n,r=e.children,u=e.containerRef,l=e.className,d=e.isOpen,c=void 0===d||d,f=e.header,s=e.footer;return c?a.default.createElement(a.default.Fragment,null,a.default.createElement("div",{ref:u,className:(0,o.default)([i.default.menu,(t={},t[i.default.open]=c,t),l])},a.default.createElement("div",{className:i.default.scrollContainer},f&&c&&a.default.createElement("h3",{className:i.default.header},f),a.default.createElement("ul",null,c&&r)),s&&c&&a.default.createElement("div",{className:(0,o.default)([i.default.footer,(n={},n[i.default.noBorder]=!r,n)])},s))):null}},function(e,t,n){"use strict";n.r(t),t.default={menu:"rSBfsFNjjooJsDH-X+YXbw==",open:"vX7vgA9ZlF7T9ER9VJodbQ==",entrance:"GpB2LsadhuGJZvKoNOdozA==",header:"oATlBFgepZ5gAZAr-CxnAA==",footer:"wKeE73zYfb-7cRN-F8OY1g==",noBorder:"LD6LDvs-ylMrPgslj4x3hg==",scrollContainer:"T+bIpal+WHUH-hA0Gw5rVg=="}},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=i(n(43));t.default=(0,u.forwardRef)((function(e,t){var n=e.children,r=e.button,a=e.className,o=e.placement,i=void 0===o?{horizontal:"left",vertical:"bottom"}:o;return u.default.createElement("div",{ref:t,className:(0,l.default)([d.default.container,a])},r,u.default.createElement("div",{className:(0,l.default)([d.default.menuContainer,d.default[i.horizontal],d.default[i.vertical]])},n))}))},function(e,t,n){"use strict";n.r(t),t.default={container:"qcvDSfFt+w0ja2fqPc0S5w==",menuContainer:"Lwr1a3bP-95aezzmacoJfw==",top:"bBHbs+FWi6-zwWMZImF+NA==",right:"B8M42NwoZ8pUVm5R4JJv1g==",left:"pOG7tXfTFk8qqXtNC0E-Ow==",bottom:"ucvN0EFMns8bfVvsi9j9yQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(45));t.default=function(e){var t,n,r=e.children,u=e.className,l=e.onClick,d=e.noPadding,c=void 0!==d&&d,f=e.isActive,s=void 0!==f&&f;return a.default.createElement("li",{className:(0,o.default)([i.default.menuItem,(t={},t[i.default.active]=s,t),(n={},n[i.default.noPadding]=c,n),u]),onClick:l},r)}},function(e,t,n){"use strict";n.r(t),t.default={menuItem:"mJd7dRZNOwYe8I9CqFlzrg==",noPadding:"xckDOdnPPYKTkym2awtrjA==",active:"x+yrCq5Bu+jgX7SRUr9few=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=o(n(47));t.default=function(e){var t,n=e.as,o=e.children,d=e.className,c=e.noPadding,f=void 0!==c&&c,s=a(e,["as","children","className","noPadding"]);return void 0===n&&(n="a"),i.default.createElement(n,r({"data-testid":"menu-link-item",className:(0,u.default)([l.default.menuLinkItem,d,(t={},t[l.default.noPadding]=f,t)])},s),o)}},function(e,t,n){"use strict";n.r(t),t.default={menuLinkItem:"oEr8ZJXLnZyDJBORZtIV4w==",noPadding:"_3TNIJAetASyzbI+KlLTHCw==",active:"ghauCTPTBEJAuAo632z5fQ==",menuItem:"n1xn4EYuxEqOc3fCEamz3Q=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileInput=void 0;var a=n(49);Object.defineProperty(t,"FileInput",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(50));t.default=function(e){var t,n=e.children,r=e.accept,u=e.onChange,l=e.inputRef,d=e.multiple,c=void 0!==d&&d,f=e.disabled,s=void 0!==f&&f,v=e.inverted,p=void 0!==v&&v,m=e.noShadow,h=void 0!==m&&m,y=e.noBorder,b=void 0!==y&&y,g=e.noPadding,_=void 0!==g&&g,O=e.transparent,w=void 0!==O&&O,P=e.stretchHorizontally,j=void 0!==P&&P,M=e.stretchVertically,E=void 0!==M&&M,k=e.rounded,C=void 0!==k&&k,x=e.size,N=void 0===x?"medium":x;return a.default.createElement("label",{className:(0,o.default)([i.default.label,i.default[N],(t={},t[i.default.inverted]=p,t[i.default.rounded]=C,t[i.default.noShadow]=h,t[i.default.noBorder]=b,t[i.default.noPadding]=_,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=j,t[i.default.stretchVertically]=E,t)])},a.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:c,ref:l,disabled:s,onChange:u}),n)}},function(e,t,n){"use strict";n.r(t),t.default={input:"eUqa35+Em2Lch26Nxjbu+Q==",label:"nxW21h8UI0MNtwo2kcAdIw==",small:"Nda1pAcGJcyDDES5EVJsow==",large:"zqLS3YHXtjlMBsFOzrvEZg==",xlarge:"VZl5WyAkv301-hCCze5MnQ==",inverted:"vlSaJQJhzt6INvWi8NtUwg==",rounded:"b-x5TrySNGCF9HY8J3HtAA==",noShadow:"_5wl14Jjf1yxHwALxmEw6MQ==",noBorder:"dlXWQOlNe+aFkVbPxDLm4A==",noPadding:"iPxUG-ON1XLOkfVPzt7NYQ==",transparent:"BPXI9u3hgAydAc5BzzkCNg==",stretchHorizontally:"JM3JVXt77nH9ur+aL+RYDg==",stretchVertically:"MXaskffWz2k-hqtHRt2vOQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FloatingPanel=void 0;var a=n(52);Object.defineProperty(t,"FloatingPanel",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(53));t.default=function(e){var t,n=e.children,r=e.containerRef,u=e.layout,l=void 0===u?"column":u,d=e.placement,c=void 0===d?{horizontal:"center",vertical:"bottom",parent:"viewport"}:d,f="center"===c.horizontal?"horizontalCenter":c.horizontal,s="center"===c.vertical?"verticalCenter":c.vertical;return a.default.createElement("div",{ref:r,"data-testid":"floating-panel",className:(0,o.default)([i.default.container,i.default[f],i.default[s],i.default[l],(t={},t[i.default.fixed]="container"!==c.parent,t)])},n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"kUTCq7sO5cQHrn20PJUCmw==",row:"tdnc1bDHDmGbgAc7SJr69Q==",column:"Mmt076N6AxyH4NRDpCO7WA==",fixed:"_92ebQvJ5xNKJS8zakK7S2A==",plain:"y+idDxZ+5Mpp7OI3GPLAEg==",transparent:"CDqoiK0gCTJpnJgVoYgJDQ==",top:"GPsHlNPDbD6KdNQEGj8zQQ==",topEdge:"xRg0oANrxsxXNByIpnNJvw==",topOnEdge:"QAyeFFGRonxXS9FgJ2d+Ww==",right:"I8EDCJzo0ZwTtgbVTMmzdg==",rightEdge:"W2Ahm3xua2veC3ICT2KQNA==",rightOnEdge:"yjBCQYEA8mWiI98CFX5Lsw==",bottom:"WJxzXQL-5NPvDgneVgkVwA==",bottomEdge:"GVJs--pLDjWvu9C-y34ycw==",bottomOnEdge:"DDVd-PplxnLpSLFlGtFhnw==",left:"oUTMvjL0HxGenU7kJdSxHA==",leftEdge:"BiNsAkMZui+5i-KzYxq0cQ==",leftOnEdge:"_1v8imH0MTj-rMZ0rC-ihQg==",horizontalCenter:"D4p5Aa063Tnm7m0uaGhLkw==",verticalCenter:"_2deG-Y2A3zw6kF+WBnEmjw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButton=void 0;var a=n(55);Object.defineProperty(t,"IconButton",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(2),u=r(n(56)),l=n(4);t.default=function(e){var t,n=e.className,r=e.containerRef,d=e.src,c=e.alt,f=e.badgeContent,s=void 0===f?null:f,v=e.offsetSides,p=void 0===v?[]:v,m=e.onClick,h=void 0===m?function(){}:m,y=e.disabled,b=void 0!==y&&y,g=e.inverted,_=void 0!==g&&g,O=e.noShadow,w=void 0!==O&&O,P=e.noBorder,j=void 0!==P&&P,M=e.transparent,E=void 0!==M&&M,k=e.rounded,C=void 0!==k&&k,x=e.size,N=void 0===x?"medium":x,S=e.type,D=void 0===S?"button":S;return a.default.createElement("button",{ref:r,className:(0,o.default)([u.default.container,u.default[N],(t={},t[u.default.inverted]=_,t[u.default.rounded]=C,t[u.default.noShadow]=w,t[u.default.noBorder]=j,t[u.default.transparent]=E,t[u.default.topOffset]=C&&p.includes("top"),t[u.default.rightOffset]=C&&p.includes("right"),t[u.default.bottomOffset]=C&&p.includes("bottom"),t[u.default.leftOffset]=C&&p.includes("left"),t),n]),disabled:b,onClick:h,type:D,role:"button"},a.default.createElement(i.Icon,{src:d,alt:c,size:N,inverted:_}),s&&a.default.createElement(l.ButtonBadge,null,s))}},function(e,t,n){"use strict";n.r(t),t.default={container:"BvQtsUAa-fQPmXbvVSVCNQ==",small:"_8Zf4LzceiIoer7PIVR8BYA==",medium:"_7PF2dnJgZxIE+tS33xK4KA==",large:"EbOYvGKXiAabohi4Oy1CMw==",xlarge:"uOfZ9LiGznaBGIux40pFGg==",rounded:"vAj0xmjXJTfDbWICVKBo2g==",topOffset:"_8YSs-khIDzIefRRh5zH3+Q==",rightOffset:"q4jIl2XFObvsDM-4Qxvtuw==",bottomOffset:"_82KbEcEZzcR5VqHlx862PQ==",leftOffset:"xnc1+ODFmBPiif5JoqTndA==",inverted:"bhVUTdkQltctmrZe0T72kw==",noShadow:"nsgh2c6cHtzxaRrLkv6Fzw==",noBorder:"Vzy6C4djtpfL2pV5oYcOPw==",transparent:"FvdPS-+1tlsTZ1ciElsvxQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButtonLink=void 0;var a=n(58);Object.defineProperty(t,"IconButtonLink",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=n(2),d=o(n(59)),c=n(4);t.default=function(e){var t,n=e.as,o=e.containerRef,f=e.className,s=e.src,v=e.alt,p=e.badgeContent,m=void 0===p?null:p,h=e.inverted,y=void 0!==h&&h,b=e.noShadow,g=void 0!==b&&b,_=e.noBorder,O=void 0!==_&&_,w=e.transparent,P=void 0!==w&&w,j=e.rounded,M=void 0!==j&&j,E=e.offsetSides,k=void 0===E?[]:E,C=e.disabled,x=void 0!==C&&C,N=e.size,S=void 0===N?"medium":N,D=a(e,["as","containerRef","className","src","alt","badgeContent","inverted","noShadow","noBorder","transparent","rounded","offsetSides","disabled","size"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:o,"data-testid":"icon-button-link",className:(0,u.default)([d.default.container,d.default[S],(t={},t[d.default.inverted]=y,t[d.default.rounded]=M,t[d.default.noShadow]=g,t[d.default.noBorder]=O,t[d.default.disabled]=x,t[d.default.transparent]=P,t[d.default.topOffset]=M&&k.includes("top"),t[d.default.rightOffset]=M&&k.includes("right"),t[d.default.bottomOffset]=M&&k.includes("bottom"),t[d.default.leftOffset]=M&&k.includes("left"),t),f])},D),i.default.createElement(l.Icon,{src:s,alt:v,size:S,inverted:y}),m&&i.default.createElement(c.ButtonBadge,null,m))}},function(e,t,n){"use strict";n.r(t),t.default={container:"mUhC7XBYehNl1f+N5hRO4A==",small:"sMS1FgM3wwLg+LguvcXDwg==",medium:"_1jU85mEP5iaWyncLLb8lSA==",large:"cIgggS2f5PaBCITfts0rAg==",xlarge:"T2zaomwLYHQx-YF-vDtwHw==",rounded:"FMAh6gsFRrUfF-C+hxFJSA==",topOffset:"yYvrImQZypKtJ0cb+hEdWQ==",rightOffset:"EiLQUe+BD8ubxdj+JQuHzw==",bottomOffset:"_0qHNIRsm+MR9ryXpJmENQQ==",leftOffset:"LmIMlxvqkRjiIgYLHxaZBg==",inverted:"Bc+Rh6B97+74jkeMdCtrzg==",noShadow:"iGGCGif2yScMISDk-2mkFQ==",noBorder:"dnjn1oFtNVFN2fRWmKkZ3A==",transparent:"ZwiF0u6KTJDgwRC4WSL3rA==",disabled:"mcZLJzT7Vs7blQ9Rxw7RUw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Image=void 0;var a=n(61);Object.defineProperty(t,"Image",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(62));t.default=function(e){var t=e.src,n=e.alt,r=e.srcWidth,u=e.srcHeight,l=e.children,d=e.containerRef,c=e.layout,f=void 0===c?"contain":c,s=e.decoding,v=void 0===s?"auto":s,p=e.loading,m=void 0===p?"eager":p,h=a.default.createElement("img",{className:(0,o.default)([i.default.image,i.default[f]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:r,height:u,decoding:v,loading:m});return l?a.default.createElement("div",{ref:d,className:(0,o.default)([i.default.container,i.default.hasOverlay])},h,l&&a.default.createElement("div",{className:i.default.overlay},l)):h}},function(e,t,n){"use strict";n.r(t),t.default={container:"_9gQSR-+gqo5rDvWPmQoAeQ==",hasOverlay:"ii3+6K+FW4YjeQFm-IN3sA==",overlay:"_00ExNc3Kw+HOfTCFa34GIw==",image:"rwD5rHcZFRNa4dHo6j3JyQ==",cover:"_6AaN1T6SY6Eej+FaQta42g==",contain:"EQDkP0F5zzJitF8uO6H+mA==",stretchHorizontally:"GBKPkc8rsyjUVuCp1OlBoQ==",stretchVertically:"_5SzwSJ+6Z4R-Ya11gwLrSQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ListViewLinkItem=t.ListViewItem=t.ListView=void 0;var a=n(64);Object.defineProperty(t,"ListView",{enumerable:!0,get:function(){return r(a).default}});var o=n(66);Object.defineProperty(t,"ListViewItem",{enumerable:!0,get:function(){return r(o).default}});var i=n(67);Object.defineProperty(t,"ListViewLinkItem",{enumerable:!0,get:function(){return r(i).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(65));t.default=function(e){var t=e.children,n=e.className,r=e.containerRef,u=e.header,l=e.headerActions;return a.default.createElement("div",{ref:r,className:(0,o.default)([i.default.container,n])},(u||l)&&a.default.createElement("div",{className:i.default.header},u&&a.default.createElement("h3",{className:i.default.headerLabel},u),l),a.default.createElement("ul",{className:i.default.list},t))}},function(e,t,n){"use strict";n.r(t),t.default={container:"lJzdP0mnfpglFSYtKKYzJw==",header:"_82vCQ7xr0NkY4UlySPkpkw==",headerLabel:"unWePdIKn4XawRuL7CPD0g==",list:"_5BX+ZZ-AaQutczbDS2e5-w=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(3),u=r(n(11));t.default=function(e){var t=e.children,n=e.active,r=void 0!==n&&n,l=e.disabled,d=void 0!==l&&l,c=e.transparent,f=void 0!==c&&c,s=e.noPadding,v=void 0!==s&&s,p=e.size,m=void 0===p?"medium":p,h=e.align,y=void 0===h?"center":h,b=e.onClick,g=void 0===b?function(){}:b;return a.default.createElement("li",{className:(0,o.default)([u.default.listViewItem])},a.default.createElement(i.Button,{onClick:g,disabled:d,inverted:r,transparent:f,noPadding:v,align:y,size:m,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=n(6),d=o(n(11));t.default=function(e){var t=e.children,n=e.as,o=e.active,c=void 0!==o&&o,f=e.transparent,s=void 0!==f&&f,v=e.noPadding,p=void 0!==v&&v,m=e.align,h=void 0===m?"center":m,y=e.size,b=void 0===y?"medium":y,g=a(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,u.default)([d.default.listViewItem])},i.default.createElement(l.ButtonLink,r({as:n,inverted:c,transparent:s,noPadding:p,align:h,size:b,stretchHorizontally:!0,noShadow:!0,noBorder:!0},g),t))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Overlay=void 0;var a=n(69);Object.defineProperty(t,"Overlay",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(70));t.default=function(e){var t,n=e.children,r=e.containerRef,u=e.transparent,l=void 0!==u&&u,d=e.isFixed,c=void 0!==d&&d,f=e.onClick,s=void 0===f?function(){}:f;return a.default.createElement("div",{ref:r,"data-testid":"overlay",className:(0,o.default)([i.default.overlay,(t={},t[i.default.transparent]=l,t[i.default.fixed]=c,t)]),onClick:s},n)}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"EIB9-l58gC3ZvtW8vtUALA==",transparent:"CM1-n3sG8YNd73qJVXM22g==",fixed:"oO1iTNlPjda1fjrYeyLuUA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextInput=void 0;var a=n(72);Object.defineProperty(t,"TextInput",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=n(5),c=i(n(73));t.default=function(e){var t,n=e.label,r=e.onChange,a=e.onBlur,o=e.onKeyDown,i=e.placeholder,f=e.value,s=e.name,v=e.inputRef,p=e.size,m=void 0===p?"medium":p,h=e.type,y=void 0===h?"text":h,b=e.autoFocus,g=void 0!==b&&b,_=e.noBorder,O=void 0!==_&&_,w=(0,u.useCallback)((function(e){r&&r(e.target.value)}),[r]),P=u.default.createElement("input",{"data-testid":"input",ref:v,className:(0,l.default)([c.default.textInput,c.default[m],(t={},t[c.default.noBorder]=O,t)]),onChange:w,onBlur:a,onKeyDown:o,placeholder:i,name:s,type:y,value:f,autoFocus:g});return n?u.default.createElement(d.Label,{value:n},P):u.default.createElement(u.default.Fragment,null,P)}},function(e,t,n){"use strict";n.r(t),t.default={textInput:"h6PYJAzytVOk9BeK5Z0+kg==",small:"UXn-BCVg81yMd8FoUfxKSA==",medium:"_4aiP6gxNHhrWbac4k1grUw==",large:"MlnPXYOUyQ7hgI7sw1o0xA==",xlarge:"HGBuKJa9XjxB8uVhKop03A==",noBorder:"sPnSCGUNZXroElSQR193GQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ToastContainer=t.Toast=void 0;var a=n(75);Object.defineProperty(t,"Toast",{enumerable:!0,get:function(){return r(a).default}});var o=n(77);Object.defineProperty(t,"ToastContainer",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(76));t.default=function(e){var t=e.children,n=e.containerRef,r=e.onClick,i=void 0===r?function(){}:r;return a.default.createElement("div",{ref:n,className:o.default.toast,onClick:i,"data-testid":"toast"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toast:"vWa2-1mOFU+iV14jq7QPsQ==",entrance:"fTsWsKrAKlwT+GOE4wAySQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(78));t.default=function(e){var t=e.children,n=e.baseZIndex;return a.default.createElement("div",{className:(0,o.default)([i.default.toastContainer]),style:{zIndex:n},"data-testid":"toast-container"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toastContainer:"_2-Xu2sZMvN9tgDs+iyLc9Q=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Video=void 0;var a=n(80);Object.defineProperty(t,"Video",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(81));t.default=function(e){var t=e.src,n=e.type,r=e.children,u=e.containerRef,l=e.poster,d=e.muted,c=void 0===d||d,f=e.loop,s=void 0===f||f,v=e.autoPlay,p=void 0===v||v,m=e.layout,h=void 0===m?"contain":m;return r?a.default.createElement("div",{ref:u,className:(0,o.default)([i.default.container,i.default.hasOverlay])},a.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,o.default)([i.default.video,i.default[h]]),muted:c,loop:s,autoPlay:p,poster:l,playsInline:!0},a.default.createElement("source",{"data-testid":"source",src:t,type:n})),r&&a.default.createElement("div",{className:i.default.overlay},r)):a.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,o.default)([i.default.video,i.default[h]]),muted:c,loop:s,autoPlay:p,poster:l,playsInline:!0},a.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},function(e,t,n){"use strict";n.r(t),t.default={container:"ulWE-Epr85F0mUt7O1gUTQ==",hasOverlay:"zK7u1nkjc8x7YDAfYQCTpw==",video:"fR4D56LfduoBW-fimfbT0w==",cover:"VXQs4PUnWGyw56g60ZtfWg==",contain:"gxflUzO4rqCBAGuzsYEIew==",stretchHorizontally:"I-63Km4NY1W4QgMhfgU5Mg==",stretchVertically:"vNNhJlgITM+onf7zdzaufg==",overlay:"wxul7UUZlmarF86SGrd-tw=="}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var r=n(83);Object.defineProperty(t,"Numpad",{enumerable:!0,get:function(){return r.Numpad}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var a=r(n(0)),o=n(3),i=n(2),u=r(n(84)),l=r(n(85)),d=function(e,t){return 10*e+t};t.Numpad=a.default.forwardRef((function(e,t){var n=e.number,r=e.onChange,c=e.disabled,f=void 0!==c&&c,s=function(e){return function(t){t.preventDefault(),r(e)}},v=Array(10).fill(0).map((function(e,t){var r=(t+1)%10;return a.default.createElement(o.Button,{key:t,disabled:f,noBorder:!0,noShadow:!0,onClick:s(d(n,r))},r)}));return a.default.createElement("div",{className:u.default.numpad,"data-testid":"numpad",ref:t},a.default.createElement("div",{className:u.default.numbers},v,a.default.createElement(o.Button,{disabled:f,noBorder:!0,noShadow:!0,transparent:!0,onClick:s(Math.floor(n/10))},a.default.createElement(i.Icon,{alt:"Backspace",src:l.default}))))}))},function(e,t,n){"use strict";n.r(t),t.default={numpad:"PeO+2pBILmGhuXf+mQPJCg==",numbers:"_3+Y8DdO4vBJJtOOqRBhtqg=="}},function(e,t,n){"use strict";n.r(t),t.default="data:image/svg+xml,%3csvg width='69' height='27' viewBox='0 0 69 27' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.1333 26L13.7886 26.3622C13.8816 26.4507 14.005 26.5 14.1333 26.5V26ZM1 13.5L0.655287 13.1378C0.556127 13.2322 0.5 13.3631 0.5 13.5C0.5 13.6369 0.556127 13.7678 0.655287 13.8622L1 13.5ZM14.1333 1V0.5C14.005 0.5 13.8816 0.549345 13.7886 0.637822L14.1333 1ZM67.5 2V25H68.5V2H67.5ZM63.4667 25.5H14.1333V26.5H63.4667V25.5ZM14.478 25.6378L1.34471 13.1378L0.655287 13.8622L13.7886 26.3622L14.478 25.6378ZM1.34471 13.8622L14.478 1.36218L13.7886 0.637822L0.655287 13.1378L1.34471 13.8622ZM14.1333 1.5H63.4667V0.5H14.1333V1.5ZM67 25.5H63.4667V26.5H67V25.5ZM67 0.5H63.4667V1.5H67V0.5ZM67.5 25C67.5 25.2761 67.2761 25.5 67 25.5V26.5C67.8284 26.5 68.5 25.8284 68.5 25H67.5ZM68.5 2C68.5 1.17157 67.8284 0.5 67 0.5V1.5C67.2761 1.5 67.5 1.72386 67.5 2H68.5Z' fill='%23262626'/%3e %3cpath d='M32.6464 6.35355L46.6464 20.3536L47.3536 19.6464L33.3536 5.64645L32.6464 6.35355ZM46.6464 5.64645L32.6464 19.6464L33.3536 20.3536L47.3536 6.35355L46.6464 5.64645Z' fill='%23262626'/%3e %3c/svg%3e"},function(e,t,n){"use strict";n.r(t),n.d(t,"useOutsideClick",(function(){return a})),n.d(t,"usePromise",(function(){return l})),n.d(t,"useSWRHooksConfig",(function(){return ee})),n.d(t,"useToggle",(function(){return te}));var r=n(0);function a(e){var t=Object(r.useRef)();return Object(r.useEffect)((function(){var n=function(n){t.current&&!t.current.contains(n.target)&&e(n)};return document.addEventListener("mouseup",n),document.addEventListener("touchend",n),function(){document.removeEventListener("mouseup",n),document.removeEventListener("touchend",n)}}),[e]),t}function o(e,t,n,r){return new(n||(n=Promise))((function(a,o){function i(e){try{l(r.next(e))}catch(e){o(e)}}function u(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,u)}l((r=r.apply(e,t||[])).next())}))}function i(e,t){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(o){return function(u){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(a=2&o[0]?r.return:o[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;switch(r=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(a=i.trys,(a=a.length>0&&a[a.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3])){i.label=o[1];break}if(6===o[0]&&i.label<a[1]){i.label=a[1],a=o;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(o);break}a[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,u])}}}Object.create;function u(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,a,o=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)i.push(r.value)}catch(e){a={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(a)throw a.error}}return i}Object.create;function l(){var e=this,t=u(Object(r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],a=t[1],l=Object(r.useRef)(!1);return Object(r.useEffect)((function(){return function(){l.current=!0}}),[]),[n,Object(r.useCallback)((function(t){return o(e,void 0,void 0,(function(){var e,n;return i(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),a({data:void 0,error:void 0,isPending:!0,isResolved:!1,isRejected:!1,isSettled:!1}),[4,t];case 1:return e=r.sent(),!1===l.current&&a({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===l.current&&a({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))}))}),[l])]}
2
2
  /*! *****************************************************************************
3
3
  Copyright (c) Microsoft Corporation.
4
4
 
@@ -12,29 +12,14 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12
12
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
13
13
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
14
  PERFORMANCE OF THIS SOFTWARE.
15
- ***************************************************************************** */function o(e,t,n,r){return new(n||(n=Promise))((function(a,o){function i(e){try{l(r.next(e))}catch(e){o(e)}}function u(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,u)}l((r=r.apply(e,t||[])).next())}))}function i(e,t){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(o){return function(u){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(a=2&o[0]?r.return:o[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;switch(r=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(a=i.trys,(a=a.length>0&&a[a.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3])){i.label=o[1];break}if(6===o[0]&&i.label<a[1]){i.label=a[1],a=o;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(o);break}a[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,u])}}}Object.create;function u(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,a,o=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)i.push(r.value)}catch(e){a={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(a)throw a.error}}return i}Object.create;function l(){var e=this,t=u(Object(r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],a=t[1],l=Object(r.useRef)(!1);return Object(r.useEffect)((function(){return function(){l.current=!0}}),[]),[n,Object(r.useCallback)((function(t){return o(e,void 0,void 0,(function(){var e,n;return i(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),a({data:void 0,error:void 0,isPending:!0,isResolved:!1,isRejected:!1,isSettled:!1}),[4,t];case 1:return e=r.sent(),!1===l.current&&a({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===l.current&&a({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))}))}),[l])]}
16
- /*! *****************************************************************************
17
- Copyright (c) Microsoft Corporation.
18
-
19
- Permission to use, copy, modify, and/or distribute this software for any
20
- purpose with or without fee is hereby granted.
21
-
22
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
23
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
24
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
25
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
26
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
27
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28
- PERFORMANCE OF THIS SOFTWARE.
29
- ***************************************************************************** */function d(e,t,n,r){return new(n||(n=Promise))((function(a,o){function i(e){try{l(r.next(e))}catch(e){o(e)}}function u(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,u)}l((r=r.apply(e,t||[])).next())}))}function c(e,t){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(o){return function(u){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(a=2&o[0]?r.return:o[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;switch(r=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(a=i.trys,(a=a.length>0&&a[a.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3])){i.label=o[1];break}if(6===o[0]&&i.label<a[1]){i.label=a[1],a=o;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(o);break}a[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,u])}}}var f,s=function(){},v=s(),p=Object,m=function(e){return e===v},h=function(e){return"function"==typeof e},y=function(e,t){return p.assign({},e,t)},b=function(){return"undefined"!=typeof window},g=new WeakMap,_=0,O=function(e){var t,n,r=typeof e,a=e&&e.constructor,o=a==Date;if(p(e)!==e||o||a==RegExp)t=o?e.toJSON():"symbol"==r?e.toString():"string"==r?JSON.stringify(e):""+e;else{if(t=g.get(e))return t;if(t=++_+"~",g.set(e,t),a==Array){for(t="@",n=0;n<e.length;n++)t+=O(e[n])+",";g.set(e,t)}if(a==p){t="#";for(var i=p.keys(e).sort();!m(n=i.pop());)m(e[n])||(t+=n+":"+O(e[n])+",");g.set(e,t)}}return t},w=!0,j=b(),P="undefined"!=typeof document,M=j&&window.addEventListener?window.addEventListener.bind(window):s,E=P?document.addEventListener.bind(document):s,k=j&&window.removeEventListener?window.removeEventListener.bind(window):s,C=P?document.removeEventListener.bind(document):s,x={isOnline:function(){return w},isVisible:function(){var e=P&&document.visibilityState;return m(e)||"hidden"!==e}},S={initFocus:function(e){return E("visibilitychange",e),M("focus",e),function(){C("visibilitychange",e),k("focus",e)}},initReconnect:function(e){var t=function(){w=!0,e()},n=function(){w=!1};return M("online",t),M("offline",n),function(){k("online",t),k("offline",n)}}},N=!b()||"Deno"in window,D=function(e){return b()&&void 0!==window.requestAnimationFrame?window.requestAnimationFrame(e):setTimeout(e,1)},A=N?r.useEffect:r.useLayoutEffect,I="undefined"!=typeof navigator&&navigator.connection,B=!N&&I&&(["slow-2g","2g"].includes(I.effectiveType)||I.saveData),z=function(e){if(h(e))try{e=e()}catch(t){e=""}var t=[].concat(e);return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?O(e):"",t,e?"$swr$"+e:""]},R=new WeakMap,L=function(e,t,n,r,a,o,i){void 0===i&&(i=!0);var u=R.get(e),l=u[0],d=u[1],c=u[3],f=l[t],s=d[t];if(i&&s)for(var v=0;v<s.length;++v)s[v](n,r,a);return o&&(delete c[t],f&&f[0])?f[0](2).then((function(){return e.get(t)})):e.get(t)},Q=0,T=function(){return++Q},F=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return d(void 0,void 0,void 0,(function(){var t,n,r,a,o,i,u,l,d,f,s,p,b,g,_,O,w,j,P,M;return c(this,(function(c){switch(c.label){case 0:if(t=e[0],n=e[1],r=e[2],a=e[3],i=!!m((o="boolean"==typeof a?{revalidate:a}:a||{}).populateCache)||o.populateCache,u=!1!==o.revalidate,l=!1!==o.rollbackOnError,d=o.optimisticData,f=z(n),s=f[0],p=f[2],!s)return[2];if(b=R.get(t),g=b[2],e.length<3)return[2,L(t,s,t.get(s),v,v,u,!0)];if(_=r,w=T(),g[s]=[w,0],j=!m(d),P=t.get(s),j&&(t.set(s,d),L(t,s,d)),h(_))try{_=_(t.get(s))}catch(e){O=e}return _&&h(_.then)?[4,_.catch((function(e){O=e}))]:[3,2];case 1:if(_=c.sent(),w!==g[s][0]){if(O)throw O;return[2,_]}O&&j&&l&&(i=!0,_=P,t.set(s,P)),c.label=2;case 2:return i&&(O||(h(i)&&(_=i(_,P)),t.set(s,_)),t.set(p,y(t.get(p),{error:O}))),g[s][1]=T(),[4,L(t,s,_,O,v,u,!!i)];case 3:if(M=c.sent(),O)throw O;return[2,i?M:_]}}))}))},V=function(e,t){for(var n in e)e[n][0]&&e[n][0](t)},H=function(e,t){if(!R.has(e)){var n=y(S,t),r={},a=F.bind(v,e),o=s;if(R.set(e,[r,{},{},{},a]),!N){var i=n.initFocus(setTimeout.bind(v,V.bind(v,r,0))),u=n.initReconnect(setTimeout.bind(v,V.bind(v,r,1)));o=function(){i&&i(),u&&u(),R.delete(e)}}return[e,a,o]}return[e,R.get(e)[4]]},J=H(new Map),K=J[0],G=J[1],U=y({onLoadingSlow:s,onSuccess:s,onError:s,onErrorRetry:function(e,t,n,r,a){var o=n.errorRetryCount,i=a.retryCount,u=~~((Math.random()+.5)*(1<<(i<8?i:8)))*n.errorRetryInterval;!m(o)&&i>o||setTimeout(r,u,a)},onDiscarded:s,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:B?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:B?5e3:3e3,compare:function(e,t){return O(e)==O(t)},isPaused:function(){return!1},cache:K,mutate:G,fallback:{}},x),Z=function(e,t){var n=y(e,t);if(t){var r=e.use,a=e.fallback,o=t.use,i=t.fallback;r&&o&&(n.use=r.concat(o)),a&&i&&(n.fallback=y(a,i))}return n},Y=Object(r.createContext)({}),W=function(e){return h(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(null===e[1]?e[2]:e[1])||{}]},X=function(){return y(U,Object(r.useContext)(Y))},q=function(e,t,n){var r=t[e]||(t[e]=[]);return r.push(n),function(){var e=r.indexOf(n);e>=0&&(r[e]=r[r.length-1],r.pop())}},$={dedupe:!0};p.defineProperty((function(e){var t=e.value,n=Z(Object(r.useContext)(Y),t),a=t&&t.provider,o=Object(r.useState)((function(){return a?H(a(n.cache||K),t):v}))[0];return o&&(n.cache=o[0],n.mutate=o[1]),A((function(){return o?o[2]:v}),[]),Object(r.createElement)(Y.Provider,y(e,{value:n}))}),"default",{value:U}),f=function(e,t,n){var a=n.cache,o=n.compare,i=n.fallbackData,u=n.suspense,l=n.revalidateOnMount,f=n.refreshInterval,s=n.refreshWhenHidden,p=n.refreshWhenOffline,b=R.get(a),g=b[0],_=b[1],O=b[2],w=b[3],j=z(e),P=j[0],M=j[1],E=j[2],k=Object(r.useRef)(!1),C=Object(r.useRef)(!1),x=Object(r.useRef)(P),S=Object(r.useRef)(t),I=Object(r.useRef)(n),B=function(){return I.current},Q=function(){return B().isVisible()&&B().isOnline()},V=function(e){return a.set(E,y(a.get(E),e))},H=a.get(P),J=m(i)?n.fallback[P]:i,K=m(H)?J:H,G=a.get(E)||{},U=G.error,Z=!k.current,Y=function(){return Z&&!m(l)?l:!B().isPaused()&&(u?!m(K):m(K)||n.revalidateIfStale)},W=!(!P||!t)&&(!!G.isValidating||Z&&Y()),X=function(e,t){var n=Object(r.useState)({})[1],a=Object(r.useRef)(e),o=Object(r.useRef)({data:!1,error:!1,isValidating:!1}),i=Object(r.useCallback)((function(e){var r=!1,i=a.current;for(var u in e){var l=u;i[l]!==e[l]&&(i[l]=e[l],o.current[l]&&(r=!0))}r&&!t.current&&n({})}),[]);return A((function(){a.current=e})),[a,o.current,i]}({data:K,error:U,isValidating:W},C),ee=X[0],te=X[1],ne=X[2],re=Object(r.useCallback)((function(e){return d(void 0,void 0,void 0,(function(){var t,r,i,u,l,d,f,s,p,y,b,g,_;return c(this,(function(c){switch(c.label){case 0:if(t=S.current,!P||!t||C.current||B().isPaused())return[2,!1];u=!0,l=e||{},d=!w[P]||!l.dedupe,f=function(){return!C.current&&P===x.current&&k.current},s=function(){var e=w[P];e&&e[1]===i&&delete w[P]},p={isValidating:!1},y=function(){V({isValidating:!1}),f()&&ne(p)},V({isValidating:!0}),ne({isValidating:!0}),c.label=1;case 1:return c.trys.push([1,3,,4]),d&&(L(a,P,ee.current.data,ee.current.error,!0),n.loadingTimeout&&!a.get(P)&&setTimeout((function(){u&&f()&&B().onLoadingSlow(P,n)}),n.loadingTimeout),w[P]=[t.apply(void 0,M),T()]),_=w[P],r=_[0],i=_[1],[4,r];case 2:return r=c.sent(),d&&setTimeout(s,n.dedupingInterval),w[P]&&w[P][1]===i?(V({error:v}),p.error=v,b=O[P],!m(b)&&(i<=b[0]||i<=b[1]||0===b[1])?(y(),d&&f()&&B().onDiscarded(P),[2,!1]):(o(ee.current.data,r)?p.data=ee.current.data:p.data=r,o(a.get(P),r)||a.set(P,r),d&&f()&&B().onSuccess(r,P,n),[3,4])):(d&&f()&&B().onDiscarded(P),[2,!1]);case 3:return g=c.sent(),s(),B().isPaused()||(V({error:g}),p.error=g,d&&f()&&(B().onError(g,P,n),("boolean"==typeof n.shouldRetryOnError&&n.shouldRetryOnError||h(n.shouldRetryOnError)&&n.shouldRetryOnError(g))&&Q()&&B().onErrorRetry(g,P,n,re,{retryCount:(l.retryCount||0)+1,dedupe:!0}))),[3,4];case 4:return u=!1,y(),f()&&d&&L(a,P,p.data,p.error,!1),[2,!0]}}))}))}),[P]),ae=Object(r.useCallback)(F.bind(v,a,(function(){return x.current})),[]);if(A((function(){S.current=t,I.current=n})),A((function(){if(P){var e=P!==x.current,t=re.bind(v,$),n=0,r=q(P,_,(function(e,t,n){ne(y({error:t,isValidating:n},o(ee.current.data,e)?v:{data:e}))})),a=q(P,g,(function(e){if(0==e){var r=Date.now();B().revalidateOnFocus&&r>n&&Q()&&(n=r+B().focusThrottleInterval,t())}else if(1==e)B().revalidateOnReconnect&&Q()&&t();else if(2==e)return re()}));return C.current=!1,x.current=P,k.current=!0,e&&ne({data:K,error:U,isValidating:W}),Y()&&(m(K)||N?t():D(t)),function(){C.current=!0,r(),a()}}}),[P,re]),A((function(){var e;function t(){var t=h(f)?f(K):f;t&&-1!==e&&(e=setTimeout(n,t))}function n(){ee.current.error||!s&&!B().isVisible()||!p&&!B().isOnline()?t():re($).then(t)}return t(),function(){e&&(clearTimeout(e),e=-1)}}),[f,s,p,re]),Object(r.useDebugValue)(K),u&&m(K)&&P)throw S.current=t,I.current=n,C.current=!1,m(U)?re($):U;return{mutate:ae,get data(){return te.data=!0,K},get error(){return te.error=!0,U},get isValidating(){return te.isValidating=!0,W}}};function ee(){var e=X();return Object(r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function te(e){void 0===e&&(e=!1);var t=u(Object(r.useState)(e),2),n=t[0],a=t[1];return[n,Object(r.useCallback)((function(e){a("boolean"==typeof e?e:function(e){return!e})}),[])]}},function(e,t,n){"use strict";n.r(t),n.d(t,"isHotkeyPressed",(function(){return N})),n.d(t,"useHotkeys",(function(){return S})),n.d(t,"useIsHotkeyPressed",(function(){return C}));
30
- /*!
31
- * hotkeys-js v3.8.7
32
- * A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
33
- *
34
- * Copyright (c) 2021 kenny wong <wowohoo@qq.com>
35
- * http://jaywcjlove.github.io/hotkeys
15
+ ***************************************************************************** */function d(e,t,n,r){return new(n||(n=Promise))((function(a,o){function i(e){try{l(r.next(e))}catch(e){o(e)}}function u(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,u)}l((r=r.apply(e,t||[])).next())}))}function c(e,t){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(o){return function(u){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(a=2&o[0]?r.return:o[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;switch(r=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(a=i.trys,(a=a.length>0&&a[a.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3])){i.label=o[1];break}if(6===o[0]&&i.label<a[1]){i.label=a[1],a=o;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(o);break}a[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,u])}}}var f,s=function(){},v=s(),p=Object,m=function(e){return e===v},h=function(e){return"function"==typeof e},y=function(e,t){return p.assign({},e,t)},b=function(){return"undefined"!=typeof window},g=new WeakMap,_=0,O=function(e){var t,n,r=typeof e,a=e&&e.constructor,o=a==Date;if(p(e)!==e||o||a==RegExp)t=o?e.toJSON():"symbol"==r?e.toString():"string"==r?JSON.stringify(e):""+e;else{if(t=g.get(e))return t;if(t=++_+"~",g.set(e,t),a==Array){for(t="@",n=0;n<e.length;n++)t+=O(e[n])+",";g.set(e,t)}if(a==p){t="#";for(var i=p.keys(e).sort();!m(n=i.pop());)m(e[n])||(t+=n+":"+O(e[n])+",");g.set(e,t)}}return t},w=!0,P=b(),j="undefined"!=typeof document,M=P&&window.addEventListener?window.addEventListener.bind(window):s,E=j?document.addEventListener.bind(document):s,k=P&&window.removeEventListener?window.removeEventListener.bind(window):s,C=j?document.removeEventListener.bind(document):s,x={isOnline:function(){return w},isVisible:function(){var e=j&&document.visibilityState;return m(e)||"hidden"!==e}},N={initFocus:function(e){return E("visibilitychange",e),M("focus",e),function(){C("visibilitychange",e),k("focus",e)}},initReconnect:function(e){var t=function(){w=!0,e()},n=function(){w=!1};return M("online",t),M("offline",n),function(){k("online",t),k("offline",n)}}},S=!b()||"Deno"in window,D=function(e){return b()&&void 0!==window.requestAnimationFrame?window.requestAnimationFrame(e):setTimeout(e,1)},A=S?r.useEffect:r.useLayoutEffect,B="undefined"!=typeof navigator&&navigator.connection,L=!S&&B&&(["slow-2g","2g"].includes(B.effectiveType)||B.saveData),I=function(e){if(h(e))try{e=e()}catch(t){e=""}var t=[].concat(e);return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?O(e):"",t,e?"$swr$"+e:""]},R=new WeakMap,z=function(e,t,n,r,a,o,i){void 0===i&&(i=!0);var u=R.get(e),l=u[0],d=u[1],c=u[3],f=l[t],s=d[t];if(i&&s)for(var v=0;v<s.length;++v)s[v](n,r,a);return o&&(delete c[t],f&&f[0])?f[0](2).then((function(){return e.get(t)})):e.get(t)},Q=0,V=function(){return++Q},T=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return d(void 0,void 0,void 0,(function(){var t,n,r,a,o,i,u,l,d,f,s,p,b,g,_,O,w,P,j,M,E;return c(this,(function(c){switch(c.label){case 0:if(t=e[0],n=e[1],r=e[2],a=e[3],i=!!m((o="boolean"==typeof a?{revalidate:a}:a||{}).populateCache)||o.populateCache,u=!1!==o.revalidate,l=!1!==o.rollbackOnError,d=o.optimisticData,f=I(n),s=f[0],p=f[2],!s)return[2];if(b=R.get(t),g=b[2],e.length<3)return[2,z(t,s,t.get(s),v,v,u,!0)];if(_=r,w=V(),g[s]=[w,0],P=!m(d),j=t.get(s),P&&(M=h(d)?d(j):d,t.set(s,M),z(t,s,M)),h(_))try{_=_(t.get(s))}catch(e){O=e}return _&&h(_.then)?[4,_.catch((function(e){O=e}))]:[3,2];case 1:if(_=c.sent(),w!==g[s][0]){if(O)throw O;return[2,_]}O&&P&&l&&(i=!0,_=j,t.set(s,j)),c.label=2;case 2:return i&&(O||(h(i)&&(_=i(_,j)),t.set(s,_)),t.set(p,y(t.get(p),{error:O}))),g[s][1]=V(),[4,z(t,s,_,O,v,u,!!i)];case 3:if(E=c.sent(),O)throw O;return[2,i?E:_]}}))}))},H=function(e,t){for(var n in e)e[n][0]&&e[n][0](t)},F=function(e,t){if(!R.has(e)){var n=y(N,t),r={},a=T.bind(v,e),o=s;if(R.set(e,[r,{},{},{},a]),!S){var i=n.initFocus(setTimeout.bind(v,H.bind(v,r,0))),u=n.initReconnect(setTimeout.bind(v,H.bind(v,r,1)));o=function(){i&&i(),u&&u(),R.delete(e)}}return[e,a,o]}return[e,R.get(e)[4]]},J=F(new Map),Z=J[0],K=J[1],G=y({onLoadingSlow:s,onSuccess:s,onError:s,onErrorRetry:function(e,t,n,r,a){var o=n.errorRetryCount,i=a.retryCount,u=~~((Math.random()+.5)*(1<<(i<8?i:8)))*n.errorRetryInterval;!m(o)&&i>o||setTimeout(r,u,a)},onDiscarded:s,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:L?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:L?5e3:3e3,compare:function(e,t){return O(e)==O(t)},isPaused:function(){return!1},cache:Z,mutate:K,fallback:{}},x),U=function(e,t){var n=y(e,t);if(t){var r=e.use,a=e.fallback,o=t.use,i=t.fallback;r&&o&&(n.use=r.concat(o)),a&&i&&(n.fallback=y(a,i))}return n},Y=Object(r.createContext)({}),W=function(e){return h(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(null===e[1]?e[2]:e[1])||{}]},X=function(){return y(G,Object(r.useContext)(Y))},q=function(e,t,n){var r=t[e]||(t[e]=[]);return r.push(n),function(){var e=r.indexOf(n);e>=0&&(r[e]=r[r.length-1],r.pop())}},$={dedupe:!0};p.defineProperty((function(e){var t=e.value,n=U(Object(r.useContext)(Y),t),a=t&&t.provider,o=Object(r.useState)((function(){return a?F(a(n.cache||Z),t):v}))[0];return o&&(n.cache=o[0],n.mutate=o[1]),A((function(){return o?o[2]:v}),[]),Object(r.createElement)(Y.Provider,y(e,{value:n}))}),"default",{value:G}),f=function(e,t,n){var a=n.cache,o=n.compare,i=n.fallbackData,u=n.suspense,l=n.revalidateOnMount,f=n.refreshInterval,s=n.refreshWhenHidden,p=n.refreshWhenOffline,b=R.get(a),g=b[0],_=b[1],O=b[2],w=b[3],P=I(e),j=P[0],M=P[1],E=P[2],k=Object(r.useRef)(!1),C=Object(r.useRef)(!1),x=Object(r.useRef)(j),N=Object(r.useRef)(t),B=Object(r.useRef)(n),L=function(){return B.current},Q=function(){return L().isVisible()&&L().isOnline()},H=function(e){return a.set(E,y(a.get(E),e))},F=a.get(j),J=m(i)?n.fallback[j]:i,Z=m(F)?J:F,K=a.get(E)||{},G=K.error,U=!k.current,Y=function(){return U&&!m(l)?l:!L().isPaused()&&(u?!m(Z)&&n.revalidateIfStale:m(Z)||n.revalidateIfStale)},W=!(!j||!t)&&(!!K.isValidating||U&&Y()),X=function(e,t){var n=Object(r.useState)({})[1],a=Object(r.useRef)(e),o=Object(r.useRef)({data:!1,error:!1,isValidating:!1}),i=Object(r.useCallback)((function(e){var r=!1,i=a.current;for(var u in e){var l=u;i[l]!==e[l]&&(i[l]=e[l],o.current[l]&&(r=!0))}r&&!t.current&&n({})}),[]);return A((function(){a.current=e})),[a,o.current,i]}({data:Z,error:G,isValidating:W},C),ee=X[0],te=X[1],ne=X[2],re=Object(r.useCallback)((function(e){return d(void 0,void 0,void 0,(function(){var t,r,i,u,l,d,f,s,p,y,b,g,_;return c(this,(function(c){switch(c.label){case 0:if(t=N.current,!j||!t||C.current||L().isPaused())return[2,!1];u=!0,l=e||{},d=!w[j]||!l.dedupe,f=function(){return!C.current&&j===x.current&&k.current},s=function(){var e=w[j];e&&e[1]===i&&delete w[j]},p={isValidating:!1},y=function(){H({isValidating:!1}),f()&&ne(p)},H({isValidating:!0}),ne({isValidating:!0}),c.label=1;case 1:return c.trys.push([1,3,,4]),d&&(z(a,j,ee.current.data,ee.current.error,!0),n.loadingTimeout&&!a.get(j)&&setTimeout((function(){u&&f()&&L().onLoadingSlow(j,n)}),n.loadingTimeout),w[j]=[t.apply(void 0,M),V()]),_=w[j],r=_[0],i=_[1],[4,r];case 2:return r=c.sent(),d&&setTimeout(s,n.dedupingInterval),w[j]&&w[j][1]===i?(H({error:v}),p.error=v,b=O[j],!m(b)&&(i<=b[0]||i<=b[1]||0===b[1])?(y(),d&&f()&&L().onDiscarded(j),[2,!1]):(o(ee.current.data,r)?p.data=ee.current.data:p.data=r,o(a.get(j),r)||a.set(j,r),d&&f()&&L().onSuccess(r,j,n),[3,4])):(d&&f()&&L().onDiscarded(j),[2,!1]);case 3:return g=c.sent(),s(),L().isPaused()||(H({error:g}),p.error=g,d&&f()&&(L().onError(g,j,n),("boolean"==typeof n.shouldRetryOnError&&n.shouldRetryOnError||h(n.shouldRetryOnError)&&n.shouldRetryOnError(g))&&Q()&&L().onErrorRetry(g,j,n,re,{retryCount:(l.retryCount||0)+1,dedupe:!0}))),[3,4];case 4:return u=!1,y(),f()&&d&&z(a,j,p.data,p.error,!1),[2,!0]}}))}))}),[j]),ae=Object(r.useCallback)(T.bind(v,a,(function(){return x.current})),[]);if(A((function(){N.current=t,B.current=n})),A((function(){if(j){var e=j!==x.current,t=re.bind(v,$),n=0,r=q(j,_,(function(e,t,n){ne(y({error:t,isValidating:n},o(ee.current.data,e)?v:{data:e}))})),a=q(j,g,(function(e){if(0==e){var r=Date.now();L().revalidateOnFocus&&r>n&&Q()&&(n=r+L().focusThrottleInterval,t())}else if(1==e)L().revalidateOnReconnect&&Q()&&t();else if(2==e)return re()}));return C.current=!1,x.current=j,k.current=!0,e&&ne({data:Z,error:G,isValidating:W}),Y()&&(m(Z)||S?t():D(t)),function(){C.current=!0,r(),a()}}}),[j,re]),A((function(){var e;function t(){var t=h(f)?f(Z):f;t&&-1!==e&&(e=setTimeout(n,t))}function n(){ee.current.error||!s&&!L().isVisible()||!p&&!L().isOnline()?t():re($).then(t)}return t(),function(){e&&(clearTimeout(e),e=-1)}}),[f,s,p,re]),Object(r.useDebugValue)(Z),u&&m(Z)&&j)throw N.current=t,B.current=n,C.current=!1,m(G)?re($):G;return{mutate:ae,get data(){return te.data=!0,Z},get error(){return te.error=!0,G},get isValidating(){return te.isValidating=!0,W}}};function ee(){var e=X();return Object(r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function te(e){void 0===e&&(e=!1);var t=u(Object(r.useState)(e),2),n=t[0],a=t[1];return[n,Object(r.useCallback)((function(e){a("boolean"==typeof e?e:function(e){return!e})}),[])]}},function(e,t,n){"use strict";n.r(t),n.d(t,"isHotkeyPressed",(function(){return S})),n.d(t,"useHotkeys",(function(){return N})),n.d(t,"useIsHotkeyPressed",(function(){return C}));
16
+ /**!
17
+ * hotkeys-js v3.9.3
18
+ * A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
36
19
  *
37
- * Licensed under the MIT license.
20
+ * Copyright (c) 2022 kenny wong <wowohoo@qq.com>
21
+ * http://jaywcjlove.github.io/hotkeys
22
+ * Licensed under the MIT license
38
23
  */
39
- var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function a(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on".concat(t),(function(){n(window.event)}))}function o(e,t){for(var n=t.slice(0,t.length-1),r=0;r<n.length;r++)n[r]=e[n[r].toLowerCase()];return n}function i(e){"string"!=typeof e&&(e="");for(var t=(e=e.replace(/\s/g,"")).split(","),n=t.lastIndexOf("");n>=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}for(var u={backspace:8,tab:9,clear:12,enter:13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":r?173:189,"=":r?61:187,";":r?59:186,"'":222,"[":219,"]":221,"\\":220},l={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},d={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},c={16:!1,18:!1,17:!1,91:!1},f={},s=1;s<20;s++)u["f".concat(s)]=111+s;var v=[],p="all",m=[],h=function(e){return u[e.toLowerCase()]||l[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function y(e){p=e||"all"}function b(){return p||"all"}var g=function(e){var t=e.key,n=e.scope,r=e.method,a=e.splitKey,u=void 0===a?"+":a;i(t).forEach((function(e){var t=e.split(u),a=t.length,i=t[a-1],d="*"===i?"*":h(i);if(f[d]){n||(n=b());var c=a>1?o(l,t):[];f[d]=f[d].map((function(e){return(!r||e.method===r)&&e.scope===n&&function(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,a=!0,o=0;o<n.length;o++)-1===r.indexOf(n[o])&&(a=!1);return a}(e.mods,c)?{}:e}))}}))};function _(e,t,n){var r;if(t.scope===n||"all"===t.scope){for(var a in r=t.mods.length>0,c)Object.prototype.hasOwnProperty.call(c,a)&&(!c[a]&&t.mods.indexOf(+a)>-1||c[a]&&-1===t.mods.indexOf(+a))&&(r=!1);(0!==t.mods.length||c[16]||c[18]||c[17]||c[91])&&!r&&"*"!==t.shortcut||!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0))}}function O(e){var t=f["*"],n=e.keyCode||e.which||e.charCode;if(w.filter.call(this,e)){if(93!==n&&224!==n||(n=91),-1===v.indexOf(n)&&229!==n&&v.push(n),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=d[t];e[t]&&-1===v.indexOf(n)?v.push(n):!e[t]&&v.indexOf(n)>-1?v.splice(v.indexOf(n),1):"metaKey"===t&&e[t]&&3===v.length&&(e.ctrlKey||e.shiftKey||e.altKey||(v=v.slice(v.indexOf(n))))})),n in c){for(var r in c[n]=!0,l)l[r]===n&&(w[r]=!0);if(!t)return}for(var a in c)Object.prototype.hasOwnProperty.call(c,a)&&(c[a]=e[d[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===v.indexOf(17)&&v.push(17),-1===v.indexOf(18)&&v.push(18),c[17]=!0,c[18]=!0);var o=b();if(t)for(var i=0;i<t.length;i++)t[i].scope===o&&("keydown"===e.type&&t[i].keydown||"keyup"===e.type&&t[i].keyup)&&_(e,t[i],o);if(n in f)for(var u=0;u<f[n].length;u++)if(("keydown"===e.type&&f[n][u].keydown||"keyup"===e.type&&f[n][u].keyup)&&f[n][u].key){for(var s=f[n][u],p=s.splitKey,m=s.key.split(p),y=[],g=0;g<m.length;g++)y.push(h(m[g]));y.sort().join("")===v.sort().join("")&&_(e,s,o)}}}function w(e,t,n){v=[];var r=i(e),u=[],d="all",s=document,p=0,y=!1,b=!0,g="+";for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(d=t.scope),t.element&&(s=t.element),t.keyup&&(y=t.keyup),void 0!==t.keydown&&(b=t.keydown),"string"==typeof t.splitKey&&(g=t.splitKey)),"string"==typeof t&&(d=t);p<r.length;p++)u=[],(e=r[p].split(g)).length>1&&(u=o(l,e)),(e="*"===(e=e[e.length-1])?"*":h(e))in f||(f[e]=[]),f[e].push({keyup:y,keydown:b,scope:d,mods:u,shortcut:r[p],method:n,key:r[p],splitKey:g});void 0!==s&&!function(e){return m.indexOf(e)>-1}(s)&&window&&(m.push(s),a(s,"keydown",(function(e){O(e)})),a(window,"focus",(function(){v=[]})),a(s,"keyup",(function(e){O(e),function(e){var t=e.keyCode||e.which||e.charCode,n=v.indexOf(t);if(n>=0&&v.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&v.splice(0,v.length),93!==t&&224!==t||(t=91),t in c)for(var r in c[t]=!1,l)l[r]===t&&(w[r]=!1)}(e)})))}var j={setScope:y,getScope:b,deleteScope:function(e,t){var n,r;for(var a in e||(e=b()),f)if(Object.prototype.hasOwnProperty.call(f,a))for(n=f[a],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;b()===e&&y(t||"all")},getPressedKeyCodes:function(){return v.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=h(e)),-1!==v.indexOf(e)},filter:function(e){var t=e.target||e.srcElement,n=t.tagName,r=!0;return!t.isContentEditable&&("INPUT"!==n&&"TEXTAREA"!==n&&"SELECT"!==n||t.readOnly)||(r=!1),r},unbind:function(e){if(e){if(Array.isArray(e))e.forEach((function(e){e.key&&g(e)}));else if("object"==typeof e)e.key&&g(e);else if("string"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var a=n[0],o=n[1];"function"==typeof a&&(o=a,a=""),g({key:e,scope:a,method:o,splitKey:"+"})}}else Object.keys(f).forEach((function(e){return delete f[e]}))}};for(var P in j)Object.prototype.hasOwnProperty.call(j,P)&&(w[P]=j[P]);if("undefined"!=typeof window){var M=window.hotkeys;w.noConflict=function(e){return e&&window.hotkeys===w&&(window.hotkeys=M),w},window.hotkeys=w}var E=w,k=n(0);function C(){return E.isPressed}E.filter=function(){return!0};var x=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))};function S(e,t,n,r){n instanceof Array&&(r=n,n=void 0);var a=n||{},o=a.enableOnTags,i=a.filter,u=a.keyup,l=a.keydown,d=a.filterPreventDefault,c=void 0===d||d,f=a.enabled,s=void 0===f||f,v=a.enableOnContentEditable,p=void 0!==v&&v,m=Object(k.useRef)(null),h=Object(k.useCallback)((function(e,n){var r;return i&&!i(e)?!c:!!(x(e,["INPUT","TEXTAREA","SELECT"])&&!x(e,o)||null!=(r=e.target)&&r.isContentEditable&&!p)||(null===m.current||document.activeElement===m.current)&&(t(e,n),!0)}),r?[m,o,i].concat(r):[m,o,i]);return Object(k.useEffect)((function(){if(s)return u&&!0!==l&&(n.keydown=!1),E(e,n||{},h),function(){return E.unbind(e,h)};E.unbind(e,h)}),[h,e,s]),m}var N=E.isPressed}]));
40
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzPzlhNGUiLCJ3ZWJwYWNrOi8vLy4vc3JjL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24ubW9kdWxlLmNzcz9jZDQ2Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25CYWRnZS9CdXR0b25CYWRnZS5tb2R1bGUuY3NzPzMyYWIiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsubW9kdWxlLmNzcz8wODQxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwubW9kdWxlLmNzcz8xZjExIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94Lm1vZHVsZS5jc3M/NGVlYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9Db2xvclBpY2tlci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3M/MjNlYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5tb2R1bGUuY3NzP2UxODgiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Nb2RhbC9Nb2RhbC5tb2R1bGUuY3NzPzBlZGYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzcz8yN2IzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi5tb2R1bGUuY3NzPzliOTMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLm1vZHVsZS5jc3M/M2ViOSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY2FyZXQtZG93bi5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUubW9kdWxlLmNzcz8zNzA5Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3M/OTZkMiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLm1vZHVsZS5jc3M/NTA0OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0ubW9kdWxlLmNzcz8wNDI3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0Lm1vZHVsZS5jc3M/MTI5OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLm1vZHVsZS5jc3M/N2FiZiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/ZDI4ZCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzcz9jYzM3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS5tb2R1bGUuY3NzPzk1YTciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/NDY0ZSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3TGlua0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8yMWM1Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/Y2QzNiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz9jZjYxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzPzlhMzYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLm1vZHVsZS5jc3M/ZTIyMyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VPdXRzaWRlQ2xpY2svdXNlT3V0c2lkZUNsaWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlUHJvbWlzZS91c2VQcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zd3IvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlU1dSSG9va3NDb25maWcvdXNlU1dSSG9va3NDb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlVG9nZ2xlL3VzZVRvZ2dsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaG90a2V5cy1qcy9kaXN0L2hvdGtleXMuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1ob3RrZXlzLWhvb2svZGlzdC9yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzIl0sIm5hbWVzIjpbImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJleHBvcnRzIiwibW9kdWxlIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwicmVxdWlyZSIsImlzQXJyYXkiLCJBcnJheSIsImNjIiwib2JqIiwib3V0IiwidG1wIiwiayIsImxlbmd0aCIsImRlZmF1bHQiLCJkaXNwbGF5IiwiaXNEaXNhYmxlZCIsImhhbmRsZUNsaWNrIiwiQnV0dG9uIiwiYWxpZ24iLCJkaXNhYmxlZCIsIm9uQ2xpY2siLCJzaXplIiwic3RyZXRjaEhvcml6b250YWxseSIsImNsYXNzTmFtZSIsImNvbnRhaW5lciIsIkljb24iLCJhbHQiLCJzcmMiLCJjaGlsZHJlbiIsImNvbnRhaW5lclJlZiIsImludmVydGVkIiwicm91bmRlZCIsIm5vU2hhZG93Iiwibm9QYWRkaW5nIiwibm9Cb3JkZXIiLCJ0cmFuc3BhcmVudCIsInN0cmV0Y2hWZXJ0aWNhbGx5IiwiYXV0b0ZvY3VzIiwib2Zmc2V0U2lkZXMiLCJ0eXBlIiwicmVmIiwibGVmdE9mZnNldCIsImluY2x1ZGVzIiwicmlnaHRPZmZzZXQiLCJyb2xlIiwiY29udGVudCIsImJ1dHRvbkJhZGdlIiwiQ29tcG9uZW50IiwicHJvcHMiLCJsYWJlbCIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImhhbmRsZUNoYW5nZSIsInVzZUNhbGxiYWNrIiwiZSIsInRhcmdldCIsIkxhYmVsIiwiaW5wdXRSZWYiLCJjaGVja2JveCIsImNvbG9ycyIsIm9uU2VsZWN0Iiwic2VsZWN0ZWRDb2xvciIsImRpcmVjdGlvbiIsImNhblRvZ2dsZSIsImNvbG9yUGlja2VyIiwibWFwIiwiY29sb3IiLCJDb2xvclN3YXRjaCIsImlzU2VsZWN0ZWQiLCJjb2xvclN3YXRjaCIsInNlbGVjdGVkIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJoZXhDb2RlIiwic3JPbmx5IiwiQ29uZmlybWF0aW9uTW9kYWwiLCJoZWFkZXIiLCJpc09wZW4iLCJidXR0b25zTGVmdCIsImJ1dHRvbnNSaWdodCIsIm9uQ2xvc2UiLCJub092ZXJsYXkiLCJiYXNlWkluZGV4IiwiTW9kYWwiLCJtb2RhbEhlYWRlciIsIm1vZGFsQ29udGVudCIsIm1vZGFsQnV0dG9uc0NvbnRhaW5lciIsIm1vZGFsQnV0dG9ucyIsImRpc3BsYXlOYW1lIiwiYnV0dG9uIiwidXNlSG90a2V5cyIsImhhbmRsZU92ZXJsYXlDbGljayIsInpJbmRleCIsIm92ZXJsYXkiLCJtb2RhbCIsIm1vZGFsQnV0dG9uIiwiRHJvcGRvd24iLCJDbGlja2FibGUiLCJpdGVtQm9keVJlbmRlcmVyIiwiaXRlbXMiLCJoYW5kbGVTZWxlY3QiLCJyZW5kZXJDbGlja2FibGUiLCJzZWxlY3RlZEl0ZW0iLCJ1c2VTdGF0ZSIsInNldElzT3BlbiIsInVzZU91dHNpZGVDbGljayIsInRvZ2dsZUlzT3BlbiIsIk1lbnVDb250YWluZXIiLCJwbGFjZW1lbnQiLCJ2ZXJ0aWNhbCIsImhvcml6b250YWwiLCJNZW51IiwiaXRlbSIsIk1lbnVJdGVtIiwiaXNBY3RpdmUiLCJpZCIsImljb24iLCJjcm9zc09yaWdpbiIsImZvb3RlciIsIm1lbnUiLCJvcGVuIiwic2Nyb2xsQ29udGFpbmVyIiwiZm9yd2FyZFJlZiIsIm1lbnVDb250YWluZXIiLCJtZW51SXRlbSIsImFjdGl2ZSIsIm1lbnVMaW5rSXRlbSIsImFjY2VwdCIsIm11bHRpcGxlIiwiaW5wdXQiLCJsYXlvdXQiLCJwYXJlbnQiLCJob3Jpem9udGFsUGxhY2VtZW50IiwidmVydGljYWxQbGFjZW1lbnQiLCJmaXhlZCIsImJhZGdlQ29udGVudCIsInRvcE9mZnNldCIsImJvdHRvbU9mZnNldCIsIkJ1dHRvbkJhZGdlIiwic3JjV2lkdGgiLCJzcmNIZWlnaHQiLCJkZWNvZGluZyIsImxvYWRpbmciLCJpbWFnZUVsZW1lbnQiLCJpbWFnZSIsIndpZHRoIiwiaGVpZ2h0IiwiaGFzT3ZlcmxheSIsImhlYWRlckFjdGlvbnMiLCJoZWFkZXJMYWJlbCIsImxpc3QiLCJsaXN0Vmlld0l0ZW0iLCJCdXR0b25MaW5rIiwiYXMiLCJpc0ZpeGVkIiwib25CbHVyIiwib25LZXlEb3duIiwiaW5wdXRFbGVtZW50IiwidGV4dElucHV0IiwidG9hc3QiLCJ0b2FzdENvbnRhaW5lciIsInBvc3RlciIsIm11dGVkIiwibG9vcCIsImF1dG9QbGF5IiwidmlkZW8iLCJwbGF5c0lubGluZSIsImNhbGxiYWNrIiwiZXZlbnQiLCJjdXJyZW50IiwiY29udGFpbnMiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsImYiLCJ5IiwiZyIsIl8iLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJpdGVyYXRvciIsInRoaXMiLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJwb3AiLCJwdXNoIiwiX19yZWFkIiwiYXIiLCJlcnJvciIsInVzZVByb21pc2UiLCJfdGhpcyIsIl9hIiwiZGF0YSIsInVuZGVmaW5lZCIsImlzUGVuZGluZyIsImlzUmVzb2x2ZWQiLCJpc1JlamVjdGVkIiwiaXNTZXR0bGVkIiwic2V0UmVzdWx0IiwiaGFzVW5tb3VudGVkIiwicHJvbWlzZSIsImVycm9yXzEiLCJob29rIiwibm9vcCIsIlVOREVGSU5FRCIsIk9CSkVDVCIsImlzVW5kZWZpbmVkIiwiaXNGdW5jdGlvbiIsIm1lcmdlT2JqZWN0cyIsImEiLCJiIiwiYXNzaWduIiwiaGFzV2luZG93Iiwid2luZG93IiwidGFibGUiLCJXZWFrTWFwIiwiY291bnRlciIsInN0YWJsZUhhc2giLCJhcmciLCJpbmRleCIsImNvbnN0cnVjdG9yIiwiaXNEYXRlIiwiRGF0ZSIsIlJlZ0V4cCIsInRvSlNPTiIsInRvU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsInNldCIsImtleXMiLCJzb3J0Iiwib25saW5lIiwiaGFzV2luIiwiaGFzRG9jIiwib25XaW5kb3dFdmVudCIsIm9uRG9jdW1lbnRFdmVudCIsIm9mZldpbmRvd0V2ZW50Iiwib2ZmRG9jdW1lbnRFdmVudCIsInByZXNldCIsImlzT25saW5lIiwiaXNWaXNpYmxlIiwidmlzaWJpbGl0eVN0YXRlIiwiZGVmYXVsdENvbmZpZ09wdGlvbnMiLCJpbml0Rm9jdXMiLCJpbml0UmVjb25uZWN0Iiwib25PbmxpbmUiLCJvbk9mZmxpbmUiLCJJU19TRVJWRVIiLCJyQUYiLCJzZXRUaW1lb3V0IiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsIm5hdmlnYXRvckNvbm5lY3Rpb24iLCJuYXZpZ2F0b3IiLCJjb25uZWN0aW9uIiwic2xvd0Nvbm5lY3Rpb24iLCJlZmZlY3RpdmVUeXBlIiwic2F2ZURhdGEiLCJzZXJpYWxpemUiLCJlcnIiLCJhcmdzIiwiY29uY2F0IiwiU1dSR2xvYmFsU3RhdGUiLCJicm9hZGNhc3RTdGF0ZSIsImNhY2hlIiwiaXNWYWxpZGF0aW5nIiwicmV2YWxpZGF0ZSIsImJyb2FkY2FzdCIsIkVWRU5UX1JFVkFMSURBVE9SUyIsIlNUQVRFX1VQREFURVJTIiwiRkVUQ0giLCJyZXZhbGlkYXRvcnMiLCJ1cGRhdGVycyIsIl9fdGltZXN0YW1wIiwiZ2V0VGltZXN0YW1wIiwiaW50ZXJuYWxNdXRhdGUiLCJfaSIsImFyZ3VtZW50cyIsIl9rZXkiLCJfZGF0YSIsIl9vcHRzIiwib3B0aW9ucyIsInBvcHVsYXRlQ2FjaGUiLCJyb2xsYmFja09uRXJyb3IiLCJvcHRpbWlzdGljRGF0YSIsImtleUluZm8iLCJfYiIsIk1VVEFUSU9OIiwiYmVmb3JlTXV0YXRpb25UcyIsImhhc09wdGltaXN0aWNEYXRhIiwicm9sbGJhY2tEYXRhIiwicmVzIiwiX2MiLCJjYXRjaCIsInJldmFsaWRhdGVBbGxLZXlzIiwiaW5pdENhY2hlIiwicHJvdmlkZXIiLCJoYXMiLCJvcHRzIiwibXV0YXRlIiwidW5tb3VudCIsInJlbGVhc2VGb2N1c18xIiwicmVsZWFzZVJlY29ubmVjdF8xIiwiZGVsZXRlIiwiTWFwIiwiZGVmYXVsdENvbmZpZyIsIm9uTG9hZGluZ1Nsb3ciLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwib25FcnJvclJldHJ5IiwiX18iLCJjb25maWciLCJtYXhSZXRyeUNvdW50IiwiZXJyb3JSZXRyeUNvdW50IiwiY3VycmVudFJldHJ5Q291bnQiLCJyZXRyeUNvdW50IiwidGltZW91dCIsIk1hdGgiLCJyYW5kb20iLCJlcnJvclJldHJ5SW50ZXJ2YWwiLCJvbkRpc2NhcmRlZCIsInJldmFsaWRhdGVPbkZvY3VzIiwicmV2YWxpZGF0ZU9uUmVjb25uZWN0IiwicmV2YWxpZGF0ZUlmU3RhbGUiLCJzaG91bGRSZXRyeU9uRXJyb3IiLCJmb2N1c1Rocm90dGxlSW50ZXJ2YWwiLCJkZWR1cGluZ0ludGVydmFsIiwibG9hZGluZ1RpbWVvdXQiLCJjb21wYXJlIiwiY3VycmVudERhdGEiLCJuZXdEYXRhIiwiaXNQYXVzZWQiLCJmYWxsYmFjayIsIm1lcmdlQ29uZmlncyIsInUxIiwidXNlIiwiZjEiLCJ1MiIsImYyIiwiU1dSQ29uZmlnQ29udGV4dCIsIm5vcm1hbGl6ZSIsInVzZVNXUkNvbmZpZyIsInN1YnNjcmliZUNhbGxiYWNrIiwiY2FsbGJhY2tzIiwia2V5ZWRSZXZhbGlkYXRvcnMiLCJpbmRleE9mIiwiV0lUSF9ERURVUEUiLCJkZWR1cGUiLCJleHRlbmRlZENvbmZpZyIsImNhY2hlQ29udGV4dCIsIlByb3ZpZGVyIiwiZmV0Y2hlciIsImZhbGxiYWNrRGF0YSIsInN1c3BlbnNlIiwicmV2YWxpZGF0ZU9uTW91bnQiLCJyZWZyZXNoSW50ZXJ2YWwiLCJyZWZyZXNoV2hlbkhpZGRlbiIsInJlZnJlc2hXaGVuT2ZmbGluZSIsImZuQXJncyIsImluaXRpYWxNb3VudGVkUmVmIiwidW5tb3VudGVkUmVmIiwia2V5UmVmIiwiZmV0Y2hlclJlZiIsImNvbmZpZ1JlZiIsImdldENvbmZpZyIsInBhdGNoRmV0Y2hJbmZvIiwiaW5mbyIsImNhY2hlZCIsImlzSW5pdGlhbE1vdW50Iiwic2hvdWxkUmV2YWxpZGF0ZSIsInN0YXRlIiwicmVyZW5kZXIiLCJzdGF0ZVJlZiIsInN0YXRlRGVwZW5kZW5jaWVzUmVmIiwic2V0U3RhdGUiLCJwYXlsb2FkIiwic2hvdWxkUmVyZW5kZXIiLCJjdXJyZW50U3RhdGUiLCJ1c2VTdGF0ZVdpdGhEZXBzIiwic3RhdGVEZXBlbmRlbmNpZXMiLCJyZXZhbGlkYXRlT3B0cyIsImN1cnJlbnRGZXRjaGVyIiwic3RhcnRBdCIsInNob3VsZFN0YXJ0TmV3UmVxdWVzdCIsImlzQ3VycmVudEtleU1vdW50ZWQiLCJjbGVhbnVwU3RhdGUiLCJuZXdTdGF0ZSIsImZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSIsIm11dGF0aW9uSW5mbyIsImVycl8xIiwicmVxdWVzdEluZm8iLCJib3VuZE11dGF0ZSIsImtleUNoYW5nZWQiLCJzb2Z0UmV2YWxpZGF0ZSIsIm5leHRGb2N1c1JldmFsaWRhdGVkQXQiLCJ1bnN1YlVwZGF0ZSIsInVwZGF0ZWREYXRhIiwidXBkYXRlZEVycm9yIiwidXBkYXRlZElzVmFsaWRhdGluZyIsInVuc3ViRXZlbnRzIiwibm93IiwidGltZXIiLCJpbnRlcnZhbCIsImV4ZWN1dGUiLCJjbGVhclRpbWVvdXQiLCJ1c2VTV1JIb29rc0NvbmZpZyIsInN3ckNvbmZpZyIsInVzZVRvZ2dsZSIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJpc2ZmIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJhZGRFdmVudCIsIm1ldGhvZCIsImF0dGFjaEV2ZW50IiwiZ2V0TW9kcyIsIm1vZGlmaWVyIiwibW9kcyIsInNsaWNlIiwiZ2V0S2V5cyIsInJlcGxhY2UiLCJzcGxpdCIsImxhc3RJbmRleE9mIiwic3BsaWNlIiwiX2tleU1hcCIsImJhY2tzcGFjZSIsInRhYiIsImNsZWFyIiwiZW50ZXIiLCJyZXR1cm4iLCJlc2MiLCJlc2NhcGUiLCJzcGFjZSIsImxlZnQiLCJ1cCIsInJpZ2h0IiwiZG93biIsImRlbCIsImlucyIsImluc2VydCIsImhvbWUiLCJlbmQiLCJwYWdldXAiLCJwYWdlZG93biIsImNhcHNsb2NrIiwibnVtXzAiLCJudW1fMSIsIm51bV8yIiwibnVtXzMiLCJudW1fNCIsIm51bV81IiwibnVtXzYiLCJudW1fNyIsIm51bV84IiwibnVtXzkiLCJudW1fbXVsdGlwbHkiLCJudW1fYWRkIiwibnVtX2VudGVyIiwibnVtX3N1YnRyYWN0IiwibnVtX2RlY2ltYWwiLCJudW1fZGl2aWRlIiwiJyIsIl9tb2RpZmllciIsInNoaWZ0Iiwib3B0aW9uIiwiY3RybCIsImNvbnRyb2wiLCJjbWQiLCJjb21tYW5kIiwibW9kaWZpZXJNYXAiLCIxNiIsIjE4IiwiMTciLCI5MSIsInNoaWZ0S2V5IiwiY3RybEtleSIsImFsdEtleSIsIm1ldGFLZXkiLCJfbW9kcyIsIl9oYW5kbGVycyIsIl9kb3duS2V5cyIsIl9zY29wZSIsImVsZW1lbnRIYXNCaW5kRXZlbnQiLCJjb2RlIiwieCIsInRvVXBwZXJDYXNlIiwiY2hhckNvZGVBdCIsInNldFNjb3BlIiwic2NvcGUiLCJnZXRTY29wZSIsImVhY2hVbmJpbmQiLCJfcmVmIiwiX3JlZiRzcGxpdEtleSIsInNwbGl0S2V5IiwiZm9yRWFjaCIsIm9yaWdpbktleSIsInVuYmluZEtleXMiLCJsZW4iLCJsYXN0S2V5Iiwia2V5Q29kZSIsInJlY29yZCIsImExIiwiYTIiLCJhcnIxIiwiYXJyMiIsImlzSW5kZXgiLCJjb21wYXJlQXJyYXkiLCJldmVudEhhbmRsZXIiLCJoYW5kbGVyIiwibW9kaWZpZXJzTWF0Y2giLCJzaG9ydGN1dCIsInByZXZlbnREZWZhdWx0IiwicmV0dXJuVmFsdWUiLCJzdG9wUHJvcGFnYXRpb24iLCJjYW5jZWxCdWJibGUiLCJkaXNwYXRjaCIsImFzdGVyaXNrIiwid2hpY2giLCJjaGFyQ29kZSIsImhvdGtleXMiLCJmaWx0ZXIiLCJrZXlOYW1lIiwia2V5TnVtIiwiZ2V0TW9kaWZpZXJTdGF0ZSIsImtleWRvd24iLCJrZXl1cCIsImtleVNob3J0Y3V0IiwiX2Rvd25LZXlzQ3VycmVudCIsImpvaW4iLCJlbGVtZW50IiwiaXNFbGVtZW50QmluZCIsImNsZWFyTW9kaWZpZXIiLCJfYXBpIiwiZGVsZXRlU2NvcGUiLCJuZXdTY29wZSIsImhhbmRsZXJzIiwiZ2V0UHJlc3NlZEtleUNvZGVzIiwiaXNQcmVzc2VkIiwic3JjRWxlbWVudCIsInRhZ05hbWUiLCJmbGFnIiwiaXNDb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInVuYmluZCIsImtleXNJbmZvIiwiX2xlbiIsIl9ob3RrZXlzIiwibm9Db25mbGljdCIsImRlZXAiLCJ1c2VJc0hvdGtleVByZXNzZWQiLCJ0YWdGaWx0ZXIiLCJlbmFibGVPblRhZ3MiLCJ0YXJnZXRUYWdOYW1lIiwiQm9vbGVhbiIsImRlcHMiLCJfcmVmMiIsIl9yZWYyJGZpbHRlclByZXZlbnREZSIsImZpbHRlclByZXZlbnREZWZhdWx0IiwiX3JlZjIkZW5hYmxlZCIsImVuYWJsZWQiLCJfcmVmMiRlbmFibGVPbkNvbnRlbnQiLCJlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSIsIm1lbW9pc2VkQ2FsbGJhY2siLCJrZXlib2FyZEV2ZW50IiwiaG90a2V5c0V2ZW50IiwiX2tleWJvYXJkRXZlbnQkdGFyZ2V0IiwiYWN0aXZlRWxlbWVudCIsImlzSG90a2V5UHJlc3NlZCJdLCJtYXBwaW5ncyI6IjZEQUNFLElBQUlBLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVDLFFBR25DLElBQUlDLEVBQVNKLEVBQWlCRSxHQUFZLENBQ3pDRyxFQUFHSCxFQUNISSxHQUFHLEVBQ0hILFFBQVMsSUFVVixPQU5BSSxFQUFRTCxHQUFVTSxLQUFLSixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTRixHQUcvREcsRUFBT0UsR0FBSSxFQUdK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RUFBUW5CLE9BQU81VCxFQUFNK1UsSUFYNUIsRUFBUW5CLE9BQU81VCxFQUFNK1UsS0FhdEIsQ0FBQ0EsRUFBa0IvVSxFQUFNNFUsSUFDckJoaUIsRUFHVCxJQUFJd2lCLEVBQWtCLEVBQVE5QiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMik7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJ2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2Mob2JqKSB7XG4gIHZhciBvdXQgPSBcIlwiXG5cbiAgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJudW1iZXJcIikgcmV0dXJuIG9iaiB8fCBcIlwiXG5cbiAgaWYgKGlzQXJyYXkob2JqKSlcbiAgICBmb3IgKHZhciBrID0gMCwgdG1wOyBrIDwgb2JqLmxlbmd0aDsgaysrKSB7XG4gICAgICBpZiAoKHRtcCA9IGNjKG9ialtrXSkpICE9PSBcIlwiKSB7XG4gICAgICAgIG91dCArPSAob3V0ICYmIFwiIFwiKSArIHRtcFxuICAgICAgfVxuICAgIH1cbiAgZWxzZVxuICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspICYmIG9ialtrXSkgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsga1xuICAgIH1cblxuICByZXR1cm4gb3V0XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb24gfSBmcm9tIFwiLi9JY29uXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbiB9IGZyb20gXCIuL0J1dHRvblwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25CYWRnZSB9IGZyb20gXCIuL0J1dHRvbkJhZGdlXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIExhYmVsIH0gZnJvbSBcIi4vTGFiZWxcIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uTGluayB9IGZyb20gXCIuL0J1dHRvbkxpbmtcIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi9Db2xvclN3YXRjaFwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBNb2RhbCB9IGZyb20gXCIuL01vZGFsXCI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHsgSXRlbSwgUmVuZGVyRGlzcGxheVByb3BzIH0gZnJvbSBcIi4vRHJvcGRvd25cIjtcblxuaW1wb3J0IGNzcyBmcm9tIFwiLi9DbGlja2FibGUubW9kdWxlLmNzc1wiO1xuXG5pbXBvcnQgaWNvbk1lbnUgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jYXJldC1kb3duLnN2Z1wiO1xuXG5leHBvcnQgdHlwZSBDbGlja2FibGVQcm9wczxUIGV4dGVuZHMgSXRlbT4gPSBPbWl0PFJlbmRlckRpc3BsYXlQcm9wczxUPiwgXCJ0b2dnbGVJc09wZW5cIj4gJiB7XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ2xpY2thYmxlPFQgZXh0ZW5kcyBJdGVtPih7XG4gIGRpc3BsYXksXG4gIGlzRGlzYWJsZWQsXG4gIG9uQ2xpY2s6IGhhbmRsZUNsaWNrLFxuICBzZWxlY3RlZEl0ZW0sXG59OiBDbGlja2FibGVQcm9wczxUPikge1xuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGFsaWduPVwibGVmdFwiXG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5jb250YWluZXJ9PlxuICAgICAgICB7ZGlzcGxheX1cbiAgICAgICAgPEljb24gYWx0PVwiRHJvcGRvd25cIiBzcmM9e2ljb25NZW51fSAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9CdXR0b24+XG4gICk7XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1lbnUgfSBmcm9tIFwiLi9NZW51XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVDb250YWluZXIsIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVJdGVtIH0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUxpbmtJdGVtIH0gZnJvbSBcIi4vTWVudUxpbmtJdGVtXCI7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImxpc3RWaWV3SXRlbVwiOlwiVktZb050V1RadWkyQU8xSWx5Sk1Udz09XCJ9OyIsImV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkJhZGdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ2hlY2tib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JQaWNrZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmlsZUlucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xpc3RWaWV3XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvT3ZlcmxheVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UZXh0SW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVG9hc3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVmlkZW9cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIEJ1dHRvblByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJsZWZ0XCIgfCBcInJpZ2h0XCI+O1xufTtcblxuZnVuY3Rpb24gQnV0dG9uKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbiAgY29udGFpbmVyUmVmLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlLFxufTogQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgY2hpbGRyZW4ubGVuZ3RoID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApfVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b247XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwieHludU11OFhaU3NvbkR1a3NsNkFRZz09XCIsXCJsZWZ0XCI6XCJQa3AwSGhOSHR0b1dJYjJkd3BHbnR3PT1cIixcInNtYWxsXCI6XCJ3RE9lZUpHQ1ptMGsyWnBOekZiZUhnPT1cIixcImxhcmdlXCI6XCJfNVFqQld0bDdZWHk0ZW00WDNHUGJSQT09XCIsXCJ4bGFyZ2VcIjpcImtOMExnYTRmQk9nY2lnRHF0T0RSZGc9PVwiLFwiaW52ZXJ0ZWRcIjpcIis1bnNUbkxsTk9YOEtGUWlVaFQxa1E9PVwiLFwicm91bmRlZFwiOlwiQmpQLUpOV0pqb0JmTk1NenRueVdPUT09XCIsXCJyaWdodE9mZnNldFwiOlwibEdKd05jb2w4Q0FrbnF4WSs4RGZxZz09XCIsXCJsZWZ0T2Zmc2V0XCI6XCJFVitnNmhVQTFxdjhMUTlScWdyUVJRPT1cIixcIm5vU2hhZG93XCI6XCJaM3VQTHJyeXFJTmZSalpwcHdVNk5RPT1cIixcIm5vQm9yZGVyXCI6XCJlRWdoRzZHWEI5SXp5RDNqck5aZkFBPT1cIixcInRyYW5zcGFyZW50XCI6XCJzczdEaFZnRjVKR3NwQ0FTZFpVWUJnPT1cIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcImk4UVBTcjRjSFloSjdBaXVlK2N4MGc9PVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIldTeGltVU05a3hZR2M1VlJjMGlabEE9PVwiLFwibm9QYWRkaW5nXCI6XCJTZ1hjaGp6NGRKcit0Yzh5a0xuRTFBPT1cIixcImNvbnRlbnRcIjpcInhuOHlmak42bWV4UlhJZ3lOaG1raXc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uQmFkZ2UubW9kdWxlLmNzc1wiO1xuXG50eXBlIEJ1dHRvbkJhZGdlUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbkJhZGdlKHsgY2hpbGRyZW4sIGNsYXNzTmFtZSB9OiBCdXR0b25CYWRnZVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuYnV0dG9uQmFkZ2UsIGNsYXNzTmFtZV0pfT57Y2hpbGRyZW59PC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkJhZGdlO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJidXR0b25CYWRnZVwiOlwiUlNqYlJpWEZXQWZCemNDb2FNcFhlQT09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG5cbnR5cGUgQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gICAgICBpbnZlcnRlZD86IGJvb2xlYW47XG4gICAgICByb3VuZGVkPzogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgICAgIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgICAgIG5vUGFkZGluZz86IGJvb2xlYW47XG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgICAgIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgICAgIHNpemU/OiBTaXplO1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcbiAgICAgIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEJ1dHRvbkxpbmsoe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzaXplLFxuICBjb250YWluZXJSZWYsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICAuLi5wcm9wc1xufTogQnV0dG9uTGlua1Byb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJidXR0b24tbGlua1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkxpbms7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiWklyOXctLWZTaXZxV1ZHb1NwMTR0QT09XCIsXCJsZWZ0XCI6XCJyUnl1OUFWR3dYKy14alRPTVRTRTF3PT1cIixcInNtYWxsXCI6XCJfMERCaEdKdmNiakVNbFNxRW9mRi1ydz09XCIsXCJtZWRpdW1cIjpcImE2K3pjVVk2WEt5OTR6QXFVWWFFNnc9PVwiLFwibGFyZ2VcIjpcIlcrdjR2RmViUWt4dzFjZGlLWS1Ldmc9PVwiLFwieGxhcmdlXCI6XCJkWTkxRFFSWVVhV1Q0RXpPSkorR0JnPT1cIixcImludmVydGVkXCI6XCJ5cGxDcHlsTDRJZGVzK2NPcnFTaW1RPT1cIixcInJvdW5kZWRcIjpcIk1SRVkwOStkNjl2Vjg0aFpuSnVMWXc9PVwiLFwicmlnaHRPZmZzZXRcIjpcIkhzYW83bUZXM2xZVHJOaGZXdmZ4V3c9PVwiLFwibGVmdE9mZnNldFwiOlwiTVhsTDNPOEtVWWVWQVljU3NuTnM5dz09XCIsXCJub1NoYWRvd1wiOlwiSHF6NENxUWNPNHMwTVRhd3JEcjBvQT09XCIsXCJ0cmFuc3BhcmVudFwiOlwiaDFoTndjMlVsTTBDNUYteGRnYTVkdz09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJUbXlxNCt1SFUrSkplWU5kQkg4TDJRPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJKenpHblR0NGFNMys5clZsTlFXaTBBPT1cIixcIm5vUGFkZGluZ1wiOlwiVXZJOFVuamM5WDB6TjJsNVcrdG1yUT09XCIsXCJub0JvcmRlclwiOlwiUXA1dUJuUWdKRm9aSGdZU2h6QVBjdz09XCIsXCJkaXNhYmxlZFwiOlwiWlhsamtZcFBXakRKTEM0QkVHTXBydz09XCIsXCJjb250ZW50XCI6XCJfMG4yTW5PZkpQbTJ3eHM0TTJuYkdIQT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tib3ggfSBmcm9tIFwiLi9DaGVja2JveFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ2hlY2tib3gubW9kdWxlLmNzc1wiO1xuXG50eXBlIENoZWNrYm94UHJvcHMgPSB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvbkNoYW5nZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgY2hlY2tlZD86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgc2l6ZT86IFNpemU7XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGluZGV0ZXJtaW5hdGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG5cbn07XG5cbmZ1bmN0aW9uIENoZWNrYm94KHtcbiAgbGFiZWwsXG4gIG9uQ2hhbmdlLFxuICBwbGFjZWhvbGRlcixcbiAgY2hlY2tlZCxcbiAgZGlzYWJsZWQsXG4gIG5hbWUsXG4gIGNsYXNzTmFtZSxcbiAgaW5kZXRlcm1pbmF0ZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxufTogQ2hlY2tib3hQcm9wcykge1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICAgICAgb25DaGFuZ2UoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQpLFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxMYWJlbCB2YWx1ZT17bGFiZWx9ID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBkYXRhLXRlc3RpZD1cImNoZWNrYm94XCJcbiAgICAgICAgcmVmPXsoaW5wdXRSZWYpID0+IHtcbiAgICAgICAgICBpZiAoaW5wdXRSZWYpIHtcbiAgICAgICAgICAgIGlucHV0UmVmLmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY2hlY2tib3gsIGNsYXNzTmFtZSwgc3R5bGVzW3NpemVdXSl9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICAvPlxuICAgIDwvTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94O1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGFiZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIExhYmVsSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxMYWJlbEVsZW1lbnQ+O1xuICB2YWx1ZTogUmVhY3ROb2RlO1xufTtcblxuZnVuY3Rpb24gTGFiZWwoeyBjbGFzc05hbWUsIGNoaWxkcmVuLCB2YWx1ZSwgY29udGFpbmVyUmVmIH06IExhYmVsSW5wdXRQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX1cbiAgICA+XG4gICAgICB7dmFsdWV9XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGFiZWw7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiYlI3UE84eVJGdFVsTjF2c1A3ZWNSUT09XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY2hlY2tib3hcIjpcIkNCUVo0UHAxY2xiKzVSOElsQ080Z1E9PVwiLFwic21hbGxcIjpcIl81amJqdXQ3R2d0N2d4ZW5qeWY5TGJRPT1cIixcIm1lZGl1bVwiOlwiaVBBT3cyWnNOSkEwbldEWHFXQzM3Zz09XCIsXCJsYXJnZVwiOlwiTEV5a1hzOW1FRVNkd282aVpvTWRVdz09XCIsXCJ4bGFyZ2VcIjpcInVxcEFDRUoxb2JBNGJSbGFlQVQyN2c9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yUGlja2VyIH0gZnJvbSBcIi4vQ29sb3JQaWNrZXJcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi4vQ29sb3JTd2F0Y2hcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JQaWNrZXIubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclBpY2tlclByb3BzID0ge1xuICBjb2xvcnM6IENvbG9yW107XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGRpcmVjdGlvbj86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xuICBvblNlbGVjdDogKGNvbG9yOiBDb2xvcikgPT4gdm9pZDtcbiAgc2VsZWN0ZWRDb2xvcj86IENvbG9yO1xuICBjYW5Ub2dnbGU/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gQ29sb3JQaWNrZXIoe1xuICBjb2xvcnMsXG4gIGNvbnRhaW5lclJlZixcbiAgb25TZWxlY3QsXG4gIHNlbGVjdGVkQ29sb3IsXG4gIGRpcmVjdGlvbiA9IFwidmVydGljYWxcIixcbiAgY2FuVG9nZ2xlID0gZmFsc2UsXG59OiBDb2xvclBpY2tlclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29sb3JQaWNrZXIsIHN0eWxlc1tkaXJlY3Rpb25dXSl9XG4gICAgPlxuICAgICAge2NvbG9ycy5tYXAoKGNvbG9yOiBDb2xvcikgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVTZWxlY3QgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGNhblRvZ2dsZSAmJiBjb2xvci5rZXkgPT09IHNlbGVjdGVkQ29sb3I/LmtleSkge1xuICAgICAgICAgICAgb25TZWxlY3QobnVsbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KGNvbG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Q29sb3JTd2F0Y2hcbiAgICAgICAgICAgIGtleT17Y29sb3Iua2V5fVxuICAgICAgICAgICAgY29sb3I9e2NvbG9yfVxuICAgICAgICAgICAgaXNTZWxlY3RlZD17Y29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXl9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclBpY2tlcjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db2xvclN3YXRjaC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDb2xvciwgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIENvbG9yU3dhdGNoUHJvcHMgPSB7XG4gIGNvbG9yOiBDb2xvcjtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIENvbG9yU3dhdGNoKHtcbiAgY29sb3IsXG4gIGNvbnRhaW5lclJlZixcbiAgaXNTZWxlY3RlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgb25DbGljayxcbn06IENvbG9yU3dhdGNoUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29sb3JTd2F0Y2gsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuc2VsZWN0ZWRdOiBpc1NlbGVjdGVkLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBkYXRhLXRlc3RpZD1cImNvbG9yLXN3YXRjaFwiXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBjb2xvci5oZXhDb2RlIH19XG4gICAgPlxuICAgICAge2NvbG9yLmxhYmVsICYmIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnNyT25seX0+e2BTZWxlY3QgJHtjb2xvci5sYWJlbH0gY29sb3JgfTwvc3Bhbj59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yU3dhdGNoO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb2xvclN3YXRjaFwiOlwidVRmN21ZZlhlTlQ3R24wem5uUjhEUT09XCIsXCJzbWFsbFwiOlwiYUFiZXpqT213Mk55VDlSVTdQdXlPQT09XCIsXCJsYXJnZVwiOlwiUWM2U0N2cWJubmhKM3p0Z3pQWk9GQT09XCIsXCJ4bGFyZ2VcIjpcIl82b0JCWkRrUmt6Zjd0RjRiaHlEdEFBPT1cIixcInNlbGVjdGVkXCI6XCJuaWNaZmdNayt1UUZQeXBKSWtRdWJ3PT1cIixcInNyT25seVwiOlwiR0hwSEVCMVFYRHlqZVI5Vm5FZDFUZz09XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JQaWNrZXJcIjpcIkRLdFA1NWJPZlVUQjFrRGEtaVVIcVE9PVwiLFwiaG9yaXpvbnRhbFwiOlwiXzM0TGo4LWItMTNDOEwwOVJzTWluZWc9PVwiLFwidmVydGljYWxcIjpcIl8xeXVnR1FzNEVrMHQzVDh0Z29LeFZRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb25maXJtYXRpb25Nb2RhbCB9IGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3RFbGVtZW50LCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuLi9Nb2RhbFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQ29uZmlybWF0aW9uTW9kYWxQcm9wcyA9IHtcbiAgYnV0dG9uc0xlZnQ/OiBSZWFjdEVsZW1lbnRbXTtcbiAgYnV0dG9uc1JpZ2h0PzogUmVhY3RFbGVtZW50W107XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBoZWFkZXI6IHN0cmluZztcbiAgaXNPcGVuOiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBub092ZXJsYXk/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gQ29uZmlybWF0aW9uTW9kYWwoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGlzT3BlbixcbiAgYnV0dG9uc0xlZnQgPSBbXSxcbiAgYnV0dG9uc1JpZ2h0ID0gW10sXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBiYXNlWkluZGV4ID0gMTAxOSxcbn06IENvbmZpcm1hdGlvbk1vZGFsUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8TW9kYWxcbiAgICAgIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgbm9PdmVybGF5PXtub092ZXJsYXl9XG4gICAgICBub1NoYWRvdz17bm9TaGFkb3d9XG4gICAgICBiYXNlWkluZGV4PXtiYXNlWkluZGV4fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgPGgxIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsSGVhZGVyfT57aGVhZGVyfTwvaDE+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbENvbnRlbnQsXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zTGVmdH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNSaWdodH08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L01vZGFsPlxuICApO1xufVxuXG5Db25maXJtYXRpb25Nb2RhbC5kaXNwbGF5TmFtZSA9IFwiQ29uZmlybWF0aW9uTW9kYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlybWF0aW9uTW9kYWw7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VIb3RrZXlzIH0gZnJvbSBcInJlYWN0LWhvdGtleXMtaG9va1wiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01vZGFsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNb2RhbFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBpc09wZW46IGJvb2xlYW47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBidXR0b24/OiBSZWFjdE5vZGU7XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub092ZXJsYXk/OiBib29sZWFuO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gTW9kYWwoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBpc09wZW4sXG4gIGJ1dHRvbixcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9PdmVybGF5ID0gZmFsc2UsXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcbiAgYmFzZVpJbmRleCA9IDEwMDksXG59OiBNb2RhbFByb3BzKSB7XG4gIHVzZUhvdGtleXMoXCJFc2NhcGVcIiwgb25DbG9zZSk7XG5cbiAgY29uc3QgaGFuZGxlT3ZlcmxheUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uQ2xvc2UoKTtcbiAgfSwgW29uQ2xvc2VdKTtcblxuICByZXR1cm4gKFxuICAgIGlzT3BlbiAmJiAoXG4gICAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm92ZXJsYXksXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9PdmVybGF5XTogbm9PdmVybGF5IH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPdmVybGF5Q2xpY2t9XG4gICAgICAgIC8+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAxIH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubW9kYWwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtidXR0b24gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDIgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtidXR0b259XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJwVTZJQjJyMExwQ0ZQWGdUdk9yMmdBPT1cIixcIm5vT3ZlcmxheVwiOlwiXzVTVVI5RmgtZkhUeTRYcjZtUUMrcEE9PVwiLFwibW9kYWxcIjpcIkxDQVQ4M211WHNBR3JQVUhRMXkraFE9PVwiLFwidHJhbnNwYXJlbnRcIjpcIldIVThRYnB6K0F2VC1ZcHVRZVVLLVE9PVwiLFwibm9TaGFkb3dcIjpcIkdpMVZUbWczR1BOeG5YOTEtbTAtNWc9PVwiLFwibW9kYWxCdXR0b25cIjpcImxmbmZIdSt4eWVFamNRYkFRd2pJVGc9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwianZLU2ktZkt1ZmNwSzllQldXRkNMZz09XCIsXCJtb2RhbEhlYWRlclwiOlwiY3gxUm9RZGdBYmVudlZYVThCN2ZTdz09XCIsXCJtb2RhbENvbnRlbnRcIjpcIlpENHYzSEUtQVlaWFYwSVRXREY3R2c9PVwiLFwibm9QYWRkaW5nXCI6XCJfMXpGRjh4cXlvNzdVeEcydjU0OUJlQT09XCIsXCJtb2RhbEJ1dHRvbnNDb250YWluZXJcIjpcIl80aFFoQ2U1VTdZQnlobmhPKy1HcWl3PT1cIixcIm1vZGFsQnV0dG9uc1wiOlwiSm9JTGJXNUZuWml4YUo3RVR2bzgrdz09XCJ9OyIsImV4cG9ydCB7XG4gIERyb3Bkb3duLFxuICBEcm9wZG93blByb3BzLFxuICBJdGVtIGFzIERyb3Bkb3duSXRlbSxcbiAgSXRlbUJvZHlSZW5kZXJlckZuIGFzIERyb3Bkb3duSXRlbUJvZHlSZW5kZXJlckZuLFxuICBSZW5kZXJDbGlja2FibGVGbiBhcyBEcm9wZG93blJlbmRlckNsaWNrYWJsZUZuLFxuICBSZW5kZXJEaXNwbGF5UHJvcHMgYXMgRHJvcGRvd25SZW5kZXJEaXNwbGF5UHJvcHMsXG59IGZyb20gXCIuL0Ryb3Bkb3duXCI7XG5leHBvcnQge1xuICBDbGlja2FibGUgYXMgRHJvcGRvd25DbGlja2FibGUsXG4gIENsaWNrYWJsZVByb3BzIGFzIERyb3Bkb3duQ2xpY2thYmxlUHJvcHNcbn0gZnJvbSBcIi4vQ2xpY2thYmxlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3RDaGlsZCwgUmVhY3RFbGVtZW50LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlT3V0c2lkZUNsaWNrIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5cbmltcG9ydCB7IENsaWNrYWJsZSB9IGZyb20gXCIuL0NsaWNrYWJsZVwiO1xuaW1wb3J0IHsgTWVudSwgTWVudUNvbnRhaW5lciwgTWVudUl0ZW0gfSBmcm9tIFwiLi4vTWVudVwiO1xuXG5leHBvcnQgdHlwZSBJdGVtID0geyBpZDogbnVtYmVyIHwgc3RyaW5nOyBuYW1lOiBzdHJpbmcgfTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyRGlzcGxheVByb3BzPFQgZXh0ZW5kcyBJdGVtPiA9IFBpY2s8XG4gIERyb3Bkb3duUHJvcHM8VD4sXG4gIFwiZGlzcGxheVwiIHwgXCJzZWxlY3RlZEl0ZW1cIlxuPiAmIHsgaXNEaXNhYmxlZDogYm9vbGVhbjsgdG9nZ2xlSXNPcGVuOiAoKSA9PiB2b2lkIH07XG5cbmV4cG9ydCB0eXBlIFJlbmRlckNsaWNrYWJsZUZuPFQgZXh0ZW5kcyBJdGVtPiA9IChcbiAgcHJvcHM6IFJlbmRlckRpc3BsYXlQcm9wczxUPlxuKSA9PiBSZWFjdEVsZW1lbnQ7XG5cbmV4cG9ydCB0eXBlIEl0ZW1Cb2R5UmVuZGVyZXJGbjxUIGV4dGVuZHMgSXRlbT4gPSAoc3RhdGU6IHtcbiAgaXRlbTogVDtcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbn0pID0+IFJlYWN0Q2hpbGQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25Qcm9wczxUIGV4dGVuZHMgSXRlbT4ge1xuICBpdGVtQm9keVJlbmRlcmVyPzogSXRlbUJvZHlSZW5kZXJlckZuPFQ+O1xuICBpdGVtczogVFtdO1xuICBvblNlbGVjdDogKGl0ZW06IFQpID0+IHZvaWQ7XG4gIGRpc3BsYXk6IFJlYWN0Q2hpbGQ7XG4gIHJlbmRlckNsaWNrYWJsZT86IFJlbmRlckNsaWNrYWJsZUZuPFQ+O1xuICBzZWxlY3RlZEl0ZW06IFQgfCBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcGRvd248VCBleHRlbmRzIEl0ZW0+KHtcbiAgaXRlbUJvZHlSZW5kZXJlcixcbiAgaXRlbXMsXG4gIG9uU2VsZWN0OiBoYW5kbGVTZWxlY3QsXG4gIGRpc3BsYXksXG4gIHJlbmRlckNsaWNrYWJsZSxcbiAgc2VsZWN0ZWRJdGVtLFxufTogRHJvcGRvd25Qcm9wczxUPikge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4gc2V0SXNPcGVuKGZhbHNlKSk7XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGl0ZW06IFQpID0+IHtcbiAgICBoYW5kbGVTZWxlY3QoaXRlbSk7XG4gICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgfTtcbiAgY29uc3QgaXNEaXNhYmxlZCA9ICFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHRvZ2dsZUlzT3BlbiA9ICgpID0+IHNldElzT3BlbighaXNPcGVuKTtcblxuICByZXR1cm4gKFxuICAgIDxNZW51Q29udGFpbmVyXG4gICAgICBidXR0b249e1xuICAgICAgICB0eXBlb2YgcmVuZGVyQ2xpY2thYmxlID09PSBcImZ1bmN0aW9uXCIgPyAoXG4gICAgICAgICAgcmVuZGVyQ2xpY2thYmxlKHtcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBpc0Rpc2FibGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLFxuICAgICAgICAgICAgdG9nZ2xlSXNPcGVuLFxuICAgICAgICAgIH0pXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPENsaWNrYWJsZVxuICAgICAgICAgICAgZGlzcGxheT17ZGlzcGxheX1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW09e3NlbGVjdGVkSXRlbX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZUlzT3Blbn1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9XG4gICAgICBwbGFjZW1lbnQ9e3sgdmVydGljYWw6IFwiYm90dG9tXCIsIGhvcml6b250YWw6IFwibGVmdFwiIH19XG4gICAgICByZWY9e3JlZn1cbiAgICA+XG4gICAgICA8TWVudSBpc09wZW49e2lzT3Blbn0+XG4gICAgICAgIHtpdGVtcyAmJlxuICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgICAgPE1lbnVJdGVtXG4gICAgICAgICAgICAgIGlzQWN0aXZlPXtpdGVtLmlkID09PSBzZWxlY3RlZEl0ZW0/LmlkfVxuICAgICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNsaWNrKGl0ZW0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aXRlbUJvZHlSZW5kZXJlclxuICAgICAgICAgICAgICAgID8gaXRlbUJvZHlSZW5kZXJlcih7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGl0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWQsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogaXRlbS5uYW1lfVxuICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICApKX1cbiAgICAgIDwvTWVudT5cbiAgICA8L01lbnVDb250YWluZXI+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IERyb3Bkb3duO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uLm1vZHVsZS5jc3NcIjtcblxudHlwZSBJY29uUHJvcHMgPSB7XG4gIGFsdD86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxJbWFnZUVsZW1lbnQ+O1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHNyYzogc3RyaW5nO1xuICBzaXplPzogXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIiB8IFwieGxhcmdlXCI7XG59O1xuZnVuY3Rpb24gSWNvbih7XG4gIHNyYyxcbiAgYWx0LFxuICBjb250YWluZXJSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxufTogSWNvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGltZ1xuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmljb24sXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgeyBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQgfSxcbiAgICAgIF0pfVxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgLz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaWNvblwiOlwiWUEySUhRRDRvcHBPaW9aSUNId3p3dz09XCIsXCJzbWFsbFwiOlwicWR6czJFTW1CZGIwTXpOUzBpRGhNQT09XCIsXCJtZWRpdW1cIjpcIkk2ZUVHSUJLNTlPa2Rwd1VvdWFhdVE9PVwiLFwibGFyZ2VcIjpcIl8yYmk2SUVZaGRNYlBnUEpmd29QanVBPT1cIixcInhsYXJnZVwiOlwiY2trcjRaRk9WR3VDTjRFalBNcWVHQT09XCIsXCJpbnZlcnRlZFwiOlwiZW01ckw0bkFIMUl3ZjNNSGVJZVBtZz09XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ3MENwYXNqWXlMUi1pMlBOSW45RXNnPT1cIn07IiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE0IDVMNy41IDEyTDEgNScgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLWxpbmVjYXA9J3NxdWFyZScvJTNlICUzYy9zdmclM2VcIiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnUubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc09wZW4/OiBib29sZWFuO1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGZvb3Rlcj86IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIE1lbnUoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBjbGFzc05hbWUsXG4gIGlzT3BlbiA9IHRydWUsXG4gIGhlYWRlcixcbiAgZm9vdGVyLFxufTogTWVudVByb3BzKSB7XG4gIGlmICghaXNPcGVuKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMubWVudSxcbiAgICAgICAgICB7IFtzdHlsZXMub3Blbl06IGlzT3BlbiB9LFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgXSl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuc2Nyb2xsQ29udGFpbmVyfT5cbiAgICAgICAgICB7aGVhZGVyICYmIGlzT3BlbiAmJiA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT57aGVhZGVyfTwvaDM+fVxuICAgICAgICAgIDx1bD57aXNPcGVuICYmIGNoaWxkcmVufTwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7Zm9vdGVyICYmIGlzT3BlbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgIHN0eWxlcy5mb290ZXIsXG4gICAgICAgICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06ICFjaGlsZHJlbiB9LFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2Zvb3Rlcn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51XCI6XCJyU0Jmc0ZOampvb0pzREgtWCtZWGJ3PT1cIixcIm9wZW5cIjpcInZYN3ZnQTlabEY3VDlFUjlWSm9kYlE9PVwiLFwiZW50cmFuY2VcIjpcIkdwQjJMc2FkaHVHSlp2S29OT2RvekE9PVwiLFwiaGVhZGVyXCI6XCJvQVRsQkZnZXBaNWdBWkFyLUN4bkFBPT1cIixcImZvb3RlclwiOlwid0tlRTczellmYi03Y1JOLUY4T1kxZz09XCIsXCJub0JvcmRlclwiOlwiTEQ2TER2cy15bE1yUGdzbGo0eDNoZz09XCIsXCJzY3JvbGxDb250YWluZXJcIjpcIlQrYklwYWwrV0hVSC1oQTBHdzVyVmc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWFjdEVsZW1lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEZvcndhcmRlZFJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE1lbnVQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6IFwicmlnaHRcIiB8IFwibGVmdFwiO1xuICB2ZXJ0aWNhbDogXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG59O1xuXG50eXBlIE1lbnVDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYnV0dG9uPzogUmVhY3RFbGVtZW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59O1xuXG5mdW5jdGlvbiBNZW51Q29udGFpbmVyKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgYnV0dG9uLFxuICAgIGNsYXNzTmFtZSxcbiAgICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwibGVmdFwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiB9LFxuICB9OiBNZW51Q29udGFpbmVyUHJvcHMsXG4gIHJlZjogRm9yd2FyZGVkUmVmPEhUTUxEaXZFbGVtZW50PlxuKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAge2J1dHRvbn1cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMubWVudUNvbnRhaW5lcixcbiAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50Lmhvcml6b250YWxdLFxuICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnQudmVydGljYWxdLFxuICAgICAgICBdKX1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcndhcmRSZWYoTWVudUNvbnRhaW5lcik7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwicWN2RFNmRnQrdzBqYTJmcVBjMFM1dz09XCIsXCJtZW51Q29udGFpbmVyXCI6XCJMd3IxYTNiUC05NWFlenptYWNvSmZ3PT1cIixcInRvcFwiOlwiYkJIYnMrRldpNi16d1dNWkltRitOQT09XCIsXCJyaWdodFwiOlwiQjhNNDJOd29aOHBVVm01UjRKSnYxZz09XCIsXCJsZWZ0XCI6XCJwT0c3dFhmVEZrOHFxWHROQzBFLU93PT1cIixcImJvdHRvbVwiOlwidWN2TjBFRk1uczhiZlZ2c2k5ajl5UT09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUl0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTExJRWxlbWVudD4pID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBNZW51SXRlbSh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBpc0FjdGl2ZSA9IGZhbHNlLFxufTogTWVudUl0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51SXRlbSxcbiAgICAgICAgeyBbc3R5bGVzLmFjdGl2ZV06IGlzQWN0aXZlIH0sXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUl0ZW1cIjpcIm1KZDdkUlpOT3dZZThJOUNxRmx6cmc9PVwiLFwibm9QYWRkaW5nXCI6XCJ4Y2tET2RuUFBZS1RreW0yYXd0cmpBPT1cIixcImFjdGl2ZVwiOlwieCt5ckNxNUJ1K2pnWDdTUlVyOWZldz09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUxpbmtJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51TGlua0l0ZW1Qcm9wcyA9XG4gIHwge1xuICAgICAgYXM6IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBNZW51TGlua0l0ZW0oe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IE1lbnVMaW5rSXRlbVByb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIGRhdGEtdGVzdGlkPVwibWVudS1saW5rLWl0ZW1cIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51TGlua0l0ZW0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51TGlua0l0ZW07XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVMaW5rSXRlbVwiOlwib0VyOFpKWExuWnlESkJPUlp0SVY0dz09XCIsXCJub1BhZGRpbmdcIjpcIl8zVE5JSkFldEFTeXpiSStLbExUSEN3PT1cIixcImFjdGl2ZVwiOlwiZ2hhdUNUUFRCRUpBdUFvNjMyejVmUT09XCIsXCJtZW51SXRlbVwiOlwibjF4bjRFWXV4RXFPYzNmQ0VhbXozUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZUlucHV0IH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG5leHBvcnQgeyBGaWxlSW5wdXRTaXplIH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GaWxlSW5wdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRTaXplID0gU2l6ZTtcblxudHlwZSBQcm9wcyA9IHtcbiAgb25DaGFuZ2U6IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYWNjZXB0Pzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIHNpemU/OiBGaWxlSW5wdXRTaXplO1xufTtcblxuZnVuY3Rpb24gRmlsZUlucHV0KHtcbiAgY2hpbGRyZW4sXG4gIGFjY2VwdCxcbiAgb25DaGFuZ2UsXG4gIGlucHV0UmVmLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubGFiZWwsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmlucHV0fVxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGlkPVwiZmlsZVwiXG4gICAgICAgIGFjY2VwdD17YWNjZXB0fVxuICAgICAgICBtdWx0aXBsZT17bXVsdGlwbGV9XG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxlSW5wdXQ7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImlucHV0XCI6XCJlVXFhMzUrRW0yTGNoMjZOeGpidStRPT1cIixcImxhYmVsXCI6XCJueFcyMWg4VUkwTU50d28ya2NBZEl3PT1cIixcInNtYWxsXCI6XCJOZGExcEFjR0pjeURERVM1RVZKc293PT1cIixcImxhcmdlXCI6XCJ6cUxTM1lIWHRqbE1Cc0ZPenJ2RVpnPT1cIixcInhsYXJnZVwiOlwiVlpsNVd5QWt2MzAxLWhDQ3plNU1uUT09XCIsXCJpbnZlcnRlZFwiOlwidmxTYUpRSmh6dDZJTnZXaThOdFV3Zz09XCIsXCJyb3VuZGVkXCI6XCJiLXg1VHJ5U05HQ0Y5SFk4SjNIdEFBPT1cIixcIm5vU2hhZG93XCI6XCJfNXdsMTRKamYxeXhId0FMeG1FdzZNUT09XCIsXCJub0JvcmRlclwiOlwiZGxYV1FPbE5lK2FGa1ZiUHhETG00QT09XCIsXCJub1BhZGRpbmdcIjpcImlQeFVHLU9OMVhMT2tmVlB6dDdOWVE9PVwiLFwidHJhbnNwYXJlbnRcIjpcIkJQWEk5dTNoZ0F5ZEFjNUJ6emtDTmc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSk0zSlZYdDc3bkg5dXIrYUwrUllEZz09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiTVhhc2tmZld6MmstaHF0SFJ0MnZPUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvYXRpbmdQYW5lbCB9IGZyb20gXCIuL0Zsb2F0aW5nUGFuZWxcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFBsYWNlbWVudCA9IHtcbiAgaG9yaXpvbnRhbDpcbiAgICB8IFwicmlnaHRcIlxuICAgIHwgXCJyaWdodEVkZ2VcIlxuICAgIHwgXCJyaWdodE9uRWRnZVwiXG4gICAgfCBcImxlZnRcIlxuICAgIHwgXCJsZWZ0RWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJsZWZ0T25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHZlcnRpY2FsOlxuICAgIHwgXCJ0b3BcIlxuICAgIHwgXCJ0b3BFZGdlXCJcbiAgICB8IFwidG9wT25FZGdlXCJcbiAgICB8IFwiYm90dG9tXCJcbiAgICB8IFwiYm90dG9tRWRnZVwiXG4gICAgfCBcImJvdHRvbU9uRWRnZVwiXG4gICAgfCBcImNlbnRlclwiO1xuICBwYXJlbnQ6IFwidmlld3BvcnRcIiB8IFwiY29udGFpbmVyXCI7XG59O1xuXG50eXBlIEZsb2F0aW5nUGFuZWxQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgbGF5b3V0PzogXCJjb2x1bW5cIiB8IFwicm93XCI7XG4gIHBsYWNlbWVudD86IFBsYWNlbWVudDtcbn07XG5cbmZ1bmN0aW9uIEZsb2F0aW5nUGFuZWwoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbHVtblwiLFxuICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwiY2VudGVyXCIsIHZlcnRpY2FsOiBcImJvdHRvbVwiLCBwYXJlbnQ6IFwidmlld3BvcnRcIiB9LFxufTogRmxvYXRpbmdQYW5lbFByb3BzKSB7XG4gIGNvbnN0IGhvcml6b250YWxQbGFjZW1lbnQgPVxuICAgIHBsYWNlbWVudC5ob3Jpem9udGFsID09PSBcImNlbnRlclwiXG4gICAgICA/IFwiaG9yaXpvbnRhbENlbnRlclwiXG4gICAgICA6IHBsYWNlbWVudC5ob3Jpem9udGFsO1xuXG4gIGNvbnN0IHZlcnRpY2FsUGxhY2VtZW50ID1cbiAgICBwbGFjZW1lbnQudmVydGljYWwgPT09IFwiY2VudGVyXCIgPyBcInZlcnRpY2FsQ2VudGVyXCIgOiBwbGFjZW1lbnQudmVydGljYWw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiZmxvYXRpbmctcGFuZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tob3Jpem9udGFsUGxhY2VtZW50XSxcbiAgICAgICAgc3R5bGVzW3ZlcnRpY2FsUGxhY2VtZW50XSxcbiAgICAgICAgc3R5bGVzW2xheW91dF0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogcGxhY2VtZW50LnBhcmVudCAhPT0gXCJjb250YWluZXJcIixcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxvYXRpbmdQYW5lbDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJrVVRDcTdzTzVjUUhybjIwUEpVQ213PT1cIixcInJvd1wiOlwidGRuYzFiREhEbUdiZ0FjN1NKcjY5UT09XCIsXCJjb2x1bW5cIjpcIk1tdDA3Nk42QXh5SDROUkRwQ083V0E9PVwiLFwiZml4ZWRcIjpcIl85MmViUXZKNXhOS0pTOHpha0s3UzJBPT1cIixcInBsYWluXCI6XCJ5K2lkRHhaKzVNcHA3T0kzR1BMQUVnPT1cIixcInRyYW5zcGFyZW50XCI6XCJDRHFvaUswZ0NUSnBuSmdWb1lnSkRRPT1cIixcInRvcFwiOlwiR1BzSGxOUERiRDZLZE5RRUdqOHpRUT09XCIsXCJ0b3BFZGdlXCI6XCJ4Umcwb0FOcnhzeFhOQnlJcG5OSnZ3PT1cIixcInRvcE9uRWRnZVwiOlwiUUF5ZUZGR1JvbnhYUzlGZ0oyZCtXdz09XCIsXCJyaWdodFwiOlwiSThFRENKem8wWndUdGdiVlRNbXpkZz09XCIsXCJyaWdodEVkZ2VcIjpcIlcyQWhtM3h1YTJ2ZUMzSUNUMktRTkE9PVwiLFwicmlnaHRPbkVkZ2VcIjpcInlqQkNRWUVBOG1XaUk5OENGWDVMc3c9PVwiLFwiYm90dG9tXCI6XCJXSnh6WFFMLTVOUHZEZ25lVmdrVndBPT1cIixcImJvdHRvbUVkZ2VcIjpcIkdWSnMtLXBMRGpXdnU5Qy15MzR5Y3c9PVwiLFwiYm90dG9tT25FZGdlXCI6XCJERFZkLVBwbHhuTHBTTEZsR3RGaG53PT1cIixcImxlZnRcIjpcIm9VVE12akwwSHhHZW5VN2tKZFN4SEE9PVwiLFwibGVmdEVkZ2VcIjpcIkJpTnNBa01adWkrNWktS3pZeHEwY1E9PVwiLFwibGVmdE9uRWRnZVwiOlwiXzF2OGltSDBNVGotck1aMHJDLWloUWc9PVwiLFwiaG9yaXpvbnRhbENlbnRlclwiOlwiRDRwNUFhMDYzVG5tN20wdWFHaExrdz09XCIsXCJ2ZXJ0aWNhbENlbnRlclwiOlwiXzJkZUctWTJBM3p3NmtGK1dCbkVtanc9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b24gfSBmcm9tIFwiLi9JY29uQnV0dG9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgSWNvbkJ1dHRvblByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIHNyYzogc3RyaW5nO1xuICBhbHQ6IHN0cmluZztcbiAgYmFkZ2VDb250ZW50PzogUmVhY3ROb2RlO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHNpemU/OiBTaXplO1xuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIj47XG59O1xuXG5mdW5jdGlvbiBJY29uQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICBjb250YWluZXJSZWYsXG4gIHNyYyxcbiAgYWx0LFxuICBiYWRnZUNvbnRlbnQgPSBudWxsLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcImJ1dHRvblwiLFxufTogSWNvbkJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XG4gICAgICB7YmFkZ2VDb250ZW50ICYmIDxCdXR0b25CYWRnZT57YmFkZ2VDb250ZW50fTwvQnV0dG9uQmFkZ2U+fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIkJ2UXRzVUFhLWZRUG1YYnZWU1ZDTlE9PVwiLFwic21hbGxcIjpcIl84WmY0THpjZWlJb2VyN1BJVlI4QllBPT1cIixcIm1lZGl1bVwiOlwiXzdQRjJkbkpnWnhJRSt0UzMzeEs0S0E9PVwiLFwibGFyZ2VcIjpcIkViT1l2R0tYaUFhYm9oaTRPeTFDTXc9PVwiLFwieGxhcmdlXCI6XCJ1T2ZaOUxpR3puYUJHSXV4NDBwRkdnPT1cIixcInJvdW5kZWRcIjpcInZBajB4bWpYSlRmRGJXSUNWS0JvMmc9PVwiLFwidG9wT2Zmc2V0XCI6XCJfOFlTcy1raElEekllZlJSaDV6SDMrUT09XCIsXCJyaWdodE9mZnNldFwiOlwicTRqSWwyWEZPYnZzRE0tNFF4dnR1dz09XCIsXCJib3R0b21PZmZzZXRcIjpcIl84MktiRWNFWnpjUjVWcUhseDg2MlBRPT1cIixcImxlZnRPZmZzZXRcIjpcInhuYzErT0RGbUJQaWlmNUpvcVRuZEE9PVwiLFwiaW52ZXJ0ZWRcIjpcImJoVlVUZGtRbHRjdG1yWmUwVDcya3c9PVwiLFwibm9TaGFkb3dcIjpcIm5zZ2gyYzZjSHR6eGFSckxrdjZGenc9PVwiLFwibm9Cb3JkZXJcIjpcIlZ6eTZDNGRqdHBmTDJwVjVvWWNPUHc9PVwiLFwidHJhbnNwYXJlbnRcIjpcIkZ2ZFBTLSsxdGxzVFoxY2lFbHN2eFE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b25MaW5rIH0gZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmtcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5cbnR5cGUgT2Zmc2V0U2lkZSA9IFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI7XG5cbnR5cGUgSWNvbkJ1dHRvbkxpbmtQcm9wcyA9XG4gIHwge1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gICAgICBzcmM6IHN0cmluZztcbiAgICAgIGFsdDogc3RyaW5nO1xuICAgICAgYmFkZ2VDb250ZW50PzogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICAgICAgcm91bmRlZD86IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XG4gICAgICBzaXplPzogU2l6ZTtcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XG4gICAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gSWNvbkJ1dHRvbkxpbmsoe1xuICBhczogQ29tcG9uZW50LFxuICBjb250YWluZXJSZWYsXG4gIGNsYXNzTmFtZSxcbiAgc3JjLFxuICBhbHQsXG4gIGJhZGdlQ29udGVudCA9IG51bGwsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIC4uLnByb3BzXG59OiBJY29uQnV0dG9uTGlua1Byb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uLWJ1dHRvbi1saW5rXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCxcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8SWNvbiBzcmM9e3NyY30gYWx0PXthbHR9IHNpemU9e3NpemV9IGludmVydGVkPXtpbnZlcnRlZH0gLz5cbiAgICAgIHtiYWRnZUNvbnRlbnQgJiYgPEJ1dHRvbkJhZGdlPntiYWRnZUNvbnRlbnR9PC9CdXR0b25CYWRnZT59XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b25MaW5rO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIm1VaEM3WEJZZWhObDFmK041aFJPNEE9PVwiLFwic21hbGxcIjpcInNNUzFGZ00zd3dMZytMZ3V2Y1hEd2c9PVwiLFwibWVkaXVtXCI6XCJfMWpVODVtRVA1aWFXeW5jTExiOGxTQT09XCIsXCJsYXJnZVwiOlwiY0lnZ2dTMmY1UGFCQ0lUZnRzMHJBZz09XCIsXCJ4bGFyZ2VcIjpcIlQyemFvbXdMWUhReC1ZRi12RHR3SHc9PVwiLFwicm91bmRlZFwiOlwiRk1BaDZnc0ZSclVmRi1DK2h4RkpTQT09XCIsXCJ0b3BPZmZzZXRcIjpcInlZdnJJbVFaeXBLdEowY2IraEVkV1E9PVwiLFwicmlnaHRPZmZzZXRcIjpcIkVpTFFVZStCRDh1YnhkaitKUXVIenc9PVwiLFwiYm90dG9tT2Zmc2V0XCI6XCJfMHFITklSc20rTVI5cnlYcEptRU5RUT09XCIsXCJsZWZ0T2Zmc2V0XCI6XCJMbUlNbHh2cWtSamlJZ1lMSHhhWkJnPT1cIixcImludmVydGVkXCI6XCJCYytSaDZCOTcrNzRqa2VNZEN0cnpnPT1cIixcIm5vU2hhZG93XCI6XCJpR0dDR2lmMnlTY01JU0RrLTJta0ZRPT1cIixcIm5vQm9yZGVyXCI6XCJkbmpuMW9GdE5WRk4yZlJXbUtrWjNBPT1cIixcInRyYW5zcGFyZW50XCI6XCJad2lGMHU2S1RKRGd3UkM0V1NMM3JBPT1cIixcImRpc2FibGVkXCI6XCJtY1pMSnpUN1ZzN2JsUTlSeHc3UlV3PT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJbWFnZSwgSW1hZ2VQcm9wcyB9IGZyb20gXCIuL0ltYWdlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSW1hZ2UubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBJbWFnZVByb3BzID0ge1xuICBhbHQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvdmVyXCIgfCBcImNvbnRhaW5cIiB8IFwic3RyZXRjaEhvcml6b250YWxseVwiIHwgXCJzdHJldGNoVmVydGljYWxseVwiO1xuICBzcmM6IHN0cmluZztcbiAgc3JjV2lkdGg/OiBudW1iZXI7XG4gIHNyY0hlaWdodD86IG51bWJlcjtcbiAgZGVjb2Rpbmc/OiBcImFzeW5jXCIgfCBcInN5bmNcIiB8IFwiYXV0b1wiLFxuICBsb2FkaW5nPzogXCJlYWdlclwiIHwgXCJsYXp5XCJcbn07XG5cbmZ1bmN0aW9uIEltYWdlQ29tcG9uZW50KHtcbiAgc3JjLFxuICBhbHQsXG4gIHNyY1dpZHRoLFxuICBzcmNIZWlnaHQsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGxheW91dCA9IFwiY29udGFpblwiLFxuICBkZWNvZGluZz0gXCJhdXRvXCIsXG4gIGxvYWRpbmc9IFwiZWFnZXJcIlxufTogSW1hZ2VQcm9wcykge1xuICBjb25zdCBpbWFnZUVsZW1lbnQgPSAoXG4gICAgPGltZ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmltYWdlLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbWFnZVwiXG4gICAgICBhbHQ9e2FsdH1cbiAgICAgIHNyYz17c3JjfVxuICAgICAgd2lkdGg9e3NyY1dpZHRofVxuICAgICAgaGVpZ2h0PXtzcmNIZWlnaHR9XG4gICAgICBkZWNvZGluZz17ZGVjb2Rpbmd9XG4gICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgIC8+XG4gICk7XG5cbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICB7aW1hZ2VFbGVtZW50fVxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICBpbWFnZUVsZW1lbnRcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VDb21wb25lbnQ7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzlnUVNSLStncW81ckR2V1BtUW9BZVE9PVwiLFwiaGFzT3ZlcmxheVwiOlwiaWkzKzZLK0ZXNFlqZVFGbS1JTjNzQT09XCIsXCJvdmVybGF5XCI6XCJfMDBFeE5jM0t3K0hPZlRDRmEzNEdJdz09XCIsXCJpbWFnZVwiOlwicndENXJIY1pGUk5hNGRIbzZqM0p5UT09XCIsXCJjb3ZlclwiOlwiXzZBYU4xVDZTWTZFZWorRmFRdGE0Mmc9PVwiLFwiY29udGFpblwiOlwiRVFEa1AwRjV6ekppdEY4dU82SCttQT09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJHQktQa2M4cnN5alVWdUNwMU9sQm9RPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJfNVN6d1NKKzZaNFItWWExMWd3THJTUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXcgfSBmcm9tIFwiLi9MaXN0Vmlld1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0l0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXdMaW5rSXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3TGlua0l0ZW1cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBMaXN0Vmlld1Byb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGhlYWRlcj86IHN0cmluZztcbiAgaGVhZGVyQWN0aW9ucz86IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3KHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGhlYWRlckFjdGlvbnMsXG59OiBMaXN0Vmlld1Byb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgeyhoZWFkZXIgfHwgaGVhZGVyQWN0aW9ucykgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+XG4gICAgICAgICAge2hlYWRlciAmJiA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyTGFiZWx9PntoZWFkZXJ9PC9oMz59XG4gICAgICAgICAge2hlYWRlckFjdGlvbnN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDx1bCBjbGFzc05hbWU9e3N0eWxlcy5saXN0fT57Y2hpbGRyZW59PC91bD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXc7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwibEp6ZFAwbW5mcGdsRlNZdEtLWXpKdz09XCIsXCJoZWFkZXJcIjpcIl84MnZDUTd4cjBOa1k0VWx5U1BrcGt3PT1cIixcImhlYWRlckxhYmVsXCI6XCJ1bldlUGRJS240WGF3UnVMN0NQRDBnPT1cIixcImxpc3RcIjpcIl81QlgrWlotQWFRdXRjemJEUzJlNS13PT1cIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGlzdFZpZXdJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gTGlzdFZpZXdJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGFjdGl2ZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgb25DbGljayA9ICgpID0+IHt9LFxufTogTGlzdFZpZXdJdGVtUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxuICAgICAgICBhbGlnbj17YWxpZ259XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9CdXR0b24+XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdJdGVtO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQnV0dG9uTGluayB9IGZyb20gXCIuLi9CdXR0b25MaW5rXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgTGlzdFZpZXdMaW5rSXRlbVByb3BzID1cbiAgfCB7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50OiBib29sZWFuO1xuICAgICAgbm9QYWRkaW5nOiBib29sZWFuO1xuICAgICAgYWxpZ246IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICAgIHNpemU6IFNpemU7XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gTGlzdFZpZXdMaW5rSXRlbSh7XG4gIGNoaWxkcmVuLFxuICBhczogQ29tcG9uZW50LFxuICBhY3RpdmUgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIC4uLnByb3BzXG59OiBMaXN0Vmlld0xpbmtJdGVtUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XG4gICAgICA8QnV0dG9uTGlua1xuICAgICAgICBhcz17Q29tcG9uZW50fVxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxuICAgICAgICBhbGlnbj17YWxpZ259XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0J1dHRvbkxpbms+XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdMaW5rSXRlbTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgT3ZlcmxheSB9IGZyb20gXCIuL092ZXJsYXlcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9PdmVybGF5Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBPdmVybGF5UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgaXNGaXhlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gT3ZlcmxheSh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIGlzRml4ZWQgPSBmYWxzZSxcbiAgb25DbGljayA9ICgpID0+IHt9LFxufTogT3ZlcmxheVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cIm92ZXJsYXlcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuZml4ZWRdOiBpc0ZpeGVkLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT3ZlcmxheTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwiRUlCOS1sNThnQzNadnRXOHZ0VUFMQT09XCIsXCJ0cmFuc3BhcmVudFwiOlwiQ00xLW4zc0c4WU5kNzNxSlZYTTIyZz09XCIsXCJmaXhlZFwiOlwib08xaVRObFBqZGExZmpyWWV5THVVQT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGV4dElucHV0IH0gZnJvbSBcIi4vVGV4dElucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGV4dElucHV0Lm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUsIFRleHRJbnB1dFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBUZXh0SW5wdXRQcm9wcyA9IHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uQmx1cj86ICgpID0+IHZvaWQ7XG4gIG9uS2V5RG93bj86IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogVGV4dElucHV0VHlwZTtcbiAgc2l6ZT86IFNpemU7XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG59O1xuXG5mdW5jdGlvbiBUZXh0SW5wdXQoe1xuICBsYWJlbCxcbiAgb25DaGFuZ2UsXG4gIG9uQmx1cixcbiAgb25LZXlEb3duLFxuICBwbGFjZWhvbGRlcixcbiAgdmFsdWUsXG4gIG5hbWUsXG4gIGlucHV0UmVmLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSA9IFwidGV4dFwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbn06IFRleHRJbnB1dFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlXVxuICApO1xuXG4gIGNvbnN0IGlucHV0RWxlbWVudCA9IChcbiAgICA8aW5wdXRcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW5wdXRcIlxuICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50ZXh0SW5wdXQsIHN0eWxlc1tzaXplXSwge1tzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcn1dKX1cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgbmFtZT17bmFtZX1cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAvPlxuICApO1xuICBpZiAobGFiZWwpIHtcbiAgICByZXR1cm4gPExhYmVsIHZhbHVlPXtsYWJlbH0+e2lucHV0RWxlbWVudH08L0xhYmVsPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gPD57aW5wdXRFbGVtZW50fTwvPjtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0ZXh0SW5wdXRcIjpcImg2UFlKQXp5dFZPazlCZUs1WjAra2c9PVwiLFwic21hbGxcIjpcIlVYbi1CQ1ZnODF5TWQ4Rm9VZnhLU0E9PVwiLFwibWVkaXVtXCI6XCJfNGFpUDZneE5IaHJXYmFjNGsxZ3JVdz09XCIsXCJsYXJnZVwiOlwiTWxuUFhZT1V5UTdoZ0k3c3cxbzB4QT09XCIsXCJ4bGFyZ2VcIjpcIkhHQnVLSmE5WGp4Qjh1VmhLb3AwM0E9PVwiLFwibm9Cb3JkZXJcIjpcInNQblNDR1VOWlhyb0VsU1FSMTkzR1E9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0IH0gZnJvbSBcIi4vVG9hc3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3RDb250YWluZXIgfSBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lclwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3QubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gVG9hc3QoeyBjaGlsZHJlbiwgY29udGFpbmVyUmVmLCBvbkNsaWNrID0gKCkgPT4ge30gfTogVG9hc3RQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudG9hc3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdFwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RcIjpcInZXYTItMW1PRlUraVYxNGpxN1FQc1E9PVwiLFwiZW50cmFuY2VcIjpcImZUc1dzS3JBS2x3VCtHT0U0d0F5U1E9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3RDb250YWluZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0Q29udGFpbmVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcbmZ1bmN0aW9uIFRvYXN0Q29udGFpbmVyKHsgY2hpbGRyZW4sIGJhc2VaSW5kZXggfTogVG9hc3RDb250YWluZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50b2FzdENvbnRhaW5lcl0pfVxuICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0LWNvbnRhaW5lclwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdENvbnRhaW5lcjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RDb250YWluZXJcIjpcIl8yLVh1MnNaTXZOOXRnRHMraXlMYzlRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBWaWRlbywgVmlkZW9Qcm9wcyB9IGZyb20gXCIuL1ZpZGVvXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9WaWRlby5tb2R1bGUuY3NzXCI7XG5cbi8qKlxuICogVGhlcmUgaXMgYSBrbm93biBpc3N1ZSBpbiBSZWFjdCBpbiByZWdhcmRzIHRvIHRoZSAnbXV0ZWQnIHByb3BlcnR5IHdoaWNoIGNhdXNlcyB0aGUgd2FybmluZzpcbiAqIFwiV2FybmluZzogdW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuXCJcbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEwMzg5XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY1NDRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvcmVhY3QtdGVzdGluZy1saWJyYXJ5L2lzc3Vlcy80NzBcbiAqL1xuXG50eXBlIExheW91dCA9IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XG5cbmV4cG9ydCB0eXBlIFZpZGVvUHJvcHMgPSB7XG4gIHNyYzogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGxheW91dD86IExheW91dDtcbiAgYXV0b1BsYXk/OiBib29sZWFuO1xuICBsb29wPzogYm9vbGVhbjtcbiAgbXV0ZWQ/OiBib29sZWFuO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgcG9zdGVyPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVmlkZW8oe1xuICBzcmMsXG4gIHR5cGUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIHBvc3RlcixcbiAgbXV0ZWQgPSB0cnVlLFxuICBsb29wID0gdHJ1ZSxcbiAgYXV0b1BsYXkgPSB0cnVlLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbn06IFZpZGVvUHJvcHMpIHtcbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICA8dmlkZW9cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICAgIGxvb3A9e2xvb3B9XG4gICAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cbiAgICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICAgIHBsYXlzSW5saW5lXG4gICAgICA+XG4gICAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICAgIDwvdmlkZW8+XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIDx2aWRlb1xuICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICBsb29wPXtsb29wfVxuICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxuICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICBwbGF5c0lubGluZVxuICAgID5cbiAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICA8L3ZpZGVvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaWRlbztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ1bFdFLUVwcjg1RjBtVXQ3TzFnVVRRPT1cIixcImhhc092ZXJsYXlcIjpcInpLN3UxbmtqYzh4N1lEQWZZUUNUcHc9PVwiLFwidmlkZW9cIjpcImZSNEQ1NkxmZHVvQlctZmltZmJUMHc9PVwiLFwiY292ZXJcIjpcIlZYUXM0UFVuV0d5dzU2ZzYwWnRmV2c9PVwiLFwiY29udGFpblwiOlwiZ3hmbFV6TzRycUNCQUd1enNZRUlldz09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJJLTYzS200TlkxVzRRZ01oZmdVNU1nPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJ2Tk5oSmxnSVRNK29uZjd6ZHphdWZnPT1cIixcIm92ZXJsYXlcIjpcInd4dWw3VVVabG1hckY4NlNHcmQtdHc9PVwifTsiLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlT3V0c2lkZUNsaWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlZiA9IHVzZVJlZigpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBoYW5kbGVDbGljayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCFyZWYuY3VycmVudCB8fCByZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICB9O1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljayk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljayk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljayk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgaGFuZGxlQ2xpY2spO1xuICAgICAgICB9O1xuICAgIH0sIFtjYWxsYmFja10pO1xuICAgIHJldHVybiByZWY7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VPdXRzaWRlQ2xpY2suanMubWFwIiwiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICByZXR1cm4gcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcclxuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xyXG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yLCBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVByb21pc2UoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoe1xuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICB9KSwgMiksIHJlc3VsdCA9IF9hWzBdLCBzZXRSZXN1bHQgPSBfYVsxXTtcbiAgICAvLyBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgaWYgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB1bm1vdW50ZWRcbiAgICAvLyB3aGlsZSB0aGUgcHJvbWlzZSB3YXMgc3RpbGwgcGVuZGluZyB0byBhdm9pZCBzZXR0aW5nIHN0YXRlXG4gICAgLy8gb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cbiAgICB2YXIgaGFzVW5tb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaGFzVW5tb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAocHJvbWlzZSkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSwgZXJyb3JfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDNdKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHByb21pc2VdO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VubW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBkYXRhXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGVycm9yXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbm1vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7IH0sIFtoYXNVbm1vdW50ZWRdKTtcbiAgICByZXR1cm4gW3Jlc3VsdCwgZGlzcGF0Y2hdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlUHJvbWlzZS5qcy5tYXAiLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlU3RhdGUsIGNyZWF0ZUVsZW1lbnQsIHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZURlYnVnVmFsdWUgfSBmcm9tICdyZWFjdCc7XG5cbi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcblxyXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgfTtcbi8vIFVzaW5nIG5vb3AoKSBhcyB0aGUgdW5kZWZpbmVkIHZhbHVlIGFzIHVuZGVmaW5lZCBjYW4gcG9zc2libHkgYmUgcmVwbGFjZWRcbi8vIGJ5IHNvbWV0aGluZyBlbHNlLiAgUHJldHRpZXIgaWdub3JlIGFuZCBleHRyYSBwYXJlbnRoZXNlcyBhcmUgbmVjZXNzYXJ5IGhlcmVcbi8vIHRvIGVuc3VyZSB0aGF0IHRzYyBkb2Vzbid0IHJlbW92ZSB0aGUgX19OT0lOTElORV9fIGNvbW1lbnQuXG4vLyBwcmV0dGllci1pZ25vcmVcbnZhciBVTkRFRklORUQgPSAoIC8qI19fTk9JTkxJTkVfXyovbm9vcCgpKTtcbnZhciBPQkpFQ1QgPSBPYmplY3Q7XG52YXIgaXNVbmRlZmluZWQgPSBmdW5jdGlvbiAodikgeyByZXR1cm4gdiA9PT0gVU5ERUZJTkVEOyB9O1xudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gdHlwZW9mIHYgPT0gJ2Z1bmN0aW9uJzsgfTtcbnZhciBtZXJnZU9iamVjdHMgPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gT0JKRUNULmFzc2lnbih7fSwgYSwgYik7IH07XG52YXIgU1RSX1VOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuLy8gTk9URTogVXNlIGZ1bmN0aW9uIHRvIGd1YXJhbnRlZSBpdCdzIHJlLWV2YWx1YXRlZCBiZXR3ZWVuIGpzZG9tIGFuZCBub2RlIHJ1bnRpbWUgZm9yIHRlc3RzLlxudmFyIGhhc1dpbmRvdyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT0gU1RSX1VOREVGSU5FRDsgfTtcbnZhciBoYXNEb2N1bWVudCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVvZiBkb2N1bWVudCAhPSBTVFJfVU5ERUZJTkVEOyB9O1xudmFyIGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaGFzV2luZG93KCkgJiYgdHlwZW9mIHdpbmRvd1sncmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10gIT0gU1RSX1VOREVGSU5FRDtcbn07XG5cbi8vIHVzZSBXZWFrTWFwIHRvIHN0b3JlIHRoZSBvYmplY3QtPmtleSBtYXBwaW5nXG4vLyBzbyB0aGUgb2JqZWN0cyBjYW4gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuXG4vLyBXZWFrTWFwIHVzZXMgYSBoYXNodGFibGUgdW5kZXIgdGhlIGhvb2QsIHNvIHRoZSBsb29rdXBcbi8vIGNvbXBsZXhpdHkgaXMgYWxtb3N0IE8oMSkuXG52YXIgdGFibGUgPSBuZXcgV2Vha01hcCgpO1xuLy8gY291bnRlciBvZiB0aGUga2V5XG52YXIgY291bnRlciA9IDA7XG4vLyBBIHN0YWJsZSBoYXNoIGltcGxlbWVudGF0aW9uIHRoYXQgc3VwcG9ydHM6XG4vLyAtIEZhc3QgYW5kIGVuc3VyZXMgdW5pcXVlIGhhc2ggcHJvcGVydGllc1xuLy8gLSBIYW5kbGVzIHVuc2VyaWFsaXphYmxlIHZhbHVlc1xuLy8gLSBIYW5kbGVzIG9iamVjdCBrZXkgb3JkZXJpbmdcbi8vIC0gR2VuZXJhdGVzIHNob3J0IHJlc3VsdHNcbi8vXG4vLyBUaGlzIGlzIG5vdCBhIHNlcmlhbGl6YXRpb24gZnVuY3Rpb24sIGFuZCB0aGUgcmVzdWx0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlXG4vLyBwYXJzaWJsZS5cbnZhciBzdGFibGVIYXNoID0gZnVuY3Rpb24gKGFyZykge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIGFyZztcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcmcgJiYgYXJnLmNvbnN0cnVjdG9yO1xuICAgIHZhciBpc0RhdGUgPSBjb25zdHJ1Y3RvciA9PSBEYXRlO1xuICAgIHZhciByZXN1bHQ7XG4gICAgdmFyIGluZGV4O1xuICAgIGlmIChPQkpFQ1QoYXJnKSA9PT0gYXJnICYmICFpc0RhdGUgJiYgY29uc3RydWN0b3IgIT0gUmVnRXhwKSB7XG4gICAgICAgIC8vIE9iamVjdC9mdW5jdGlvbiwgbm90IG51bGwvZGF0ZS9yZWdleHAuIFVzZSBXZWFrTWFwIHRvIHN0b3JlIHRoZSBpZCBmaXJzdC5cbiAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGhhc2hlZCwgZGlyZWN0bHkgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICAgIHJlc3VsdCA9IHRhYmxlLmdldChhcmcpO1xuICAgICAgICBpZiAocmVzdWx0KVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGhhc2ggZmlyc3QgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3Rpb24gYmVmb3JlIGVudGVyaW5nIHRoZVxuICAgICAgICAvLyByZWN1cnNpdmUgYHN0YWJsZUhhc2hgIGNhbGxzLlxuICAgICAgICAvLyBGb3Igb3RoZXIgb2JqZWN0cyBsaWtlIHNldCBhbmQgbWFwLCB3ZSB1c2UgdGhpcyBpZCBkaXJlY3RseSBhcyB0aGUgaGFzaC5cbiAgICAgICAgcmVzdWx0ID0gKytjb3VudGVyICsgJ34nO1xuICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICBpZiAoY29uc3RydWN0b3IgPT0gQXJyYXkpIHtcbiAgICAgICAgICAgIC8vIEFycmF5LlxuICAgICAgICAgICAgcmVzdWx0ID0gJ0AnO1xuICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJnLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdGFibGVIYXNoKGFyZ1tpbmRleF0pICsgJywnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uc3RydWN0b3IgPT0gT0JKRUNUKSB7XG4gICAgICAgICAgICAvLyBPYmplY3QsIHNvcnQga2V5cy5cbiAgICAgICAgICAgIHJlc3VsdCA9ICcjJztcbiAgICAgICAgICAgIHZhciBrZXlzID0gT0JKRUNULmtleXMoYXJnKS5zb3J0KCk7XG4gICAgICAgICAgICB3aGlsZSAoIWlzVW5kZWZpbmVkKChpbmRleCA9IGtleXMucG9wKCkpKSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGluZGV4ICsgJzonICsgc3RhYmxlSGFzaChhcmdbaW5kZXhdKSArICcsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBpc0RhdGVcbiAgICAgICAgICAgID8gYXJnLnRvSlNPTigpXG4gICAgICAgICAgICA6IHR5cGUgPT0gJ3N5bWJvbCdcbiAgICAgICAgICAgICAgICA/IGFyZy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgOiB0eXBlID09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoYXJnKVxuICAgICAgICAgICAgICAgICAgICA6ICcnICsgYXJnO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBEdWUgdG8gYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTY3ODA3NSxcbiAqIGl0J3Mgbm90IHJlbGlhYmxlIHRvIGRldGVjdCBpZiB0aGUgYnJvd3NlciBpcyBjdXJyZW50bHkgb25saW5lIG9yIG9mZmxpbmVcbiAqIGJhc2VkIG9uIGBuYXZpZ2F0b3Iub25MaW5lYC5cbiAqIEFzIGEgd29yayBhcm91bmQsIHdlIGFsd2F5cyBhc3N1bWUgaXQncyBvbmxpbmUgb24gZmlyc3QgbG9hZCwgYW5kIGNoYW5nZVxuICogdGhlIHN0YXR1cyB1cG9uIGBvbmxpbmVgIG9yIGBvZmZsaW5lYCBldmVudHMuXG4gKi9cbnZhciBvbmxpbmUgPSB0cnVlO1xudmFyIGlzT25saW5lID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb25saW5lOyB9O1xudmFyIGhhc1dpbiA9IGhhc1dpbmRvdygpO1xudmFyIGhhc0RvYyA9IGhhc0RvY3VtZW50KCk7XG4vLyBGb3Igbm9kZSBhbmQgUmVhY3QgTmF0aXZlLCBgYWRkL3JlbW92ZUV2ZW50TGlzdGVuZXJgIGRvZXNuJ3QgZXhpc3Qgb24gd2luZG93LlxudmFyIG9uV2luZG93RXZlbnQgPSBoYXNXaW4gJiYgd2luZG93LmFkZEV2ZW50TGlzdGVuZXJcbiAgICA/IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyLmJpbmQod2luZG93KVxuICAgIDogbm9vcDtcbnZhciBvbkRvY3VtZW50RXZlbnQgPSBoYXNEb2MgPyBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyLmJpbmQoZG9jdW1lbnQpIDogbm9vcDtcbnZhciBvZmZXaW5kb3dFdmVudCA9IGhhc1dpbiAmJiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lclxuICAgID8gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh3aW5kb3cpXG4gICAgOiBub29wO1xudmFyIG9mZkRvY3VtZW50RXZlbnQgPSBoYXNEb2NcbiAgICA/IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZChkb2N1bWVudClcbiAgICA6IG5vb3A7XG52YXIgaXNWaXNpYmxlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2aXNpYmlsaXR5U3RhdGUgPSBoYXNEb2MgJiYgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlO1xuICAgIHJldHVybiBpc1VuZGVmaW5lZCh2aXNpYmlsaXR5U3RhdGUpIHx8IHZpc2liaWxpdHlTdGF0ZSAhPT0gJ2hpZGRlbic7XG59O1xudmFyIGluaXRGb2N1cyA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIC8vIGZvY3VzIHJldmFsaWRhdGVcbiAgICBvbkRvY3VtZW50RXZlbnQoJ3Zpc2liaWxpdHljaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgb25XaW5kb3dFdmVudCgnZm9jdXMnLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb2ZmRG9jdW1lbnRFdmVudCgndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ2ZvY3VzJywgY2FsbGJhY2spO1xuICAgIH07XG59O1xudmFyIGluaXRSZWNvbm5lY3QgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyByZXZhbGlkYXRlIG9uIHJlY29ubmVjdGVkXG4gICAgdmFyIG9uT25saW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBvbmxpbmUgPSB0cnVlO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gICAgLy8gbm90aGluZyB0byByZXZhbGlkYXRlLCBqdXN0IHVwZGF0ZSB0aGUgc3RhdHVzXG4gICAgdmFyIG9uT2ZmbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb25saW5lID0gZmFsc2U7XG4gICAgfTtcbiAgICBvbldpbmRvd0V2ZW50KCdvbmxpbmUnLCBvbk9ubGluZSk7XG4gICAgb25XaW5kb3dFdmVudCgnb2ZmbGluZScsIG9uT2ZmbGluZSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29ubGluZScsIG9uT25saW5lKTtcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIH07XG59O1xudmFyIHByZXNldCA9IHtcbiAgICBpc09ubGluZTogaXNPbmxpbmUsXG4gICAgaXNWaXNpYmxlOiBpc1Zpc2libGVcbn07XG52YXIgZGVmYXVsdENvbmZpZ09wdGlvbnMgPSB7XG4gICAgaW5pdEZvY3VzOiBpbml0Rm9jdXMsXG4gICAgaW5pdFJlY29ubmVjdDogaW5pdFJlY29ubmVjdFxufTtcblxudmFyIElTX1NFUlZFUiA9ICFoYXNXaW5kb3coKSB8fCAnRGVubycgaW4gd2luZG93O1xuLy8gUG9seWZpbGwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgckFGID0gZnVuY3Rpb24gKGYpIHtcbiAgICByZXR1cm4gaGFzUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkgPyB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddKGYpIDogc2V0VGltZW91dChmLCAxKTtcbn07XG4vLyBSZWFjdCBjdXJyZW50bHkgdGhyb3dzIGEgd2FybmluZyB3aGVuIHVzaW5nIHVzZUxheW91dEVmZmVjdCBvbiB0aGUgc2VydmVyLlxuLy8gVG8gZ2V0IGFyb3VuZCBpdCwgd2UgY2FuIGNvbmRpdGlvbmFsbHkgdXNlRWZmZWN0IG9uIHRoZSBzZXJ2ZXIgKG5vLW9wKSBhbmRcbi8vIHVzZUxheW91dEVmZmVjdCBpbiB0aGUgYnJvd3Nlci5cbnZhciB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gSVNfU0VSVkVSID8gdXNlRWZmZWN0IDogdXNlTGF5b3V0RWZmZWN0O1xuLy8gVGhpcyBhc3NpZ25tZW50IGlzIHRvIGV4dGVuZCB0aGUgTmF2aWdhdG9yIHR5cGUgdG8gdXNlIGVmZmVjdGl2ZVR5cGUuXG52YXIgbmF2aWdhdG9yQ29ubmVjdGlvbiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmXG4gICAgbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4vLyBBZGp1c3QgdGhlIGNvbmZpZyBiYXNlZCBvbiBzbG93IGNvbm5lY3Rpb24gc3RhdHVzICg8PSA3MEticHMpLlxudmFyIHNsb3dDb25uZWN0aW9uID0gIUlTX1NFUlZFUiAmJlxuICAgIG5hdmlnYXRvckNvbm5lY3Rpb24gJiZcbiAgICAoWydzbG93LTJnJywgJzJnJ10uaW5jbHVkZXMobmF2aWdhdG9yQ29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlKSB8fFxuICAgICAgICBuYXZpZ2F0b3JDb25uZWN0aW9uLnNhdmVEYXRhKTtcblxudmFyIHNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihrZXkpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXMgbm90IHJlYWR5XG4gICAgICAgICAgICBrZXkgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgYXJncyA9IFtdLmNvbmNhdChrZXkpO1xuICAgIC8vIElmIGtleSBpcyBub3QgZmFsc3ksIG9yIG5vdCBhbiBlbXB0eSBhcnJheSwgaGFzaCBpdC5cbiAgICBrZXkgPVxuICAgICAgICB0eXBlb2Yga2V5ID09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGtleVxuICAgICAgICAgICAgOiAoQXJyYXkuaXNBcnJheShrZXkpID8ga2V5Lmxlbmd0aCA6IGtleSlcbiAgICAgICAgICAgICAgICA/IHN0YWJsZUhhc2goa2V5KVxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgdmFyIGluZm9LZXkgPSBrZXkgPyAnJHN3ciQnICsga2V5IDogJyc7XG4gICAgcmV0dXJuIFtrZXksIGFyZ3MsIGluZm9LZXldO1xufTtcblxuLy8gR2xvYmFsIHN0YXRlIHVzZWQgdG8gZGVkdXBsaWNhdGUgcmVxdWVzdHMgYW5kIHN0b3JlIGxpc3RlbmVyc1xudmFyIFNXUkdsb2JhbFN0YXRlID0gbmV3IFdlYWtNYXAoKTtcblxudmFyIEZPQ1VTX0VWRU5UID0gMDtcbnZhciBSRUNPTk5FQ1RfRVZFTlQgPSAxO1xudmFyIE1VVEFURV9FVkVOVCA9IDI7XG5cbnZhciBicm9hZGNhc3RTdGF0ZSA9IGZ1bmN0aW9uIChjYWNoZSwga2V5LCBkYXRhLCBlcnJvciwgaXNWYWxpZGF0aW5nLCByZXZhbGlkYXRlLCBicm9hZGNhc3QpIHtcbiAgICBpZiAoYnJvYWRjYXN0ID09PSB2b2lkIDApIHsgYnJvYWRjYXN0ID0gdHJ1ZTsgfVxuICAgIHZhciBfYSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSksIEVWRU5UX1JFVkFMSURBVE9SUyA9IF9hWzBdLCBTVEFURV9VUERBVEVSUyA9IF9hWzFdLCBGRVRDSCA9IF9hWzNdO1xuICAgIHZhciByZXZhbGlkYXRvcnMgPSBFVkVOVF9SRVZBTElEQVRPUlNba2V5XTtcbiAgICB2YXIgdXBkYXRlcnMgPSBTVEFURV9VUERBVEVSU1trZXldO1xuICAgIC8vIENhY2hlIHdhcyBwb3B1bGF0ZWQsIHVwZGF0ZSBzdGF0ZXMgb2YgYWxsIGhvb2tzLlxuICAgIGlmIChicm9hZGNhc3QgJiYgdXBkYXRlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdXBkYXRlcnNbaV0oZGF0YSwgZXJyb3IsIGlzVmFsaWRhdGluZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgd2UgYWxzbyBuZWVkIHRvIHJldmFsaWRhdGUsIG9ubHkgZG8gaXQgZm9yIHRoZSBmaXJzdCBob29rLlxuICAgIGlmIChyZXZhbGlkYXRlKSB7XG4gICAgICAgIC8vIEludmFsaWRhdGUgdGhlIGtleSBieSBkZWxldGluZyB0aGUgY29uY3VycmVudCByZXF1ZXN0IG1hcmtlcnMgc28gbmV3XG4gICAgICAgIC8vIHJlcXVlc3RzIHdpbGwgbm90IGJlIGRlZHVwZWQuXG4gICAgICAgIGRlbGV0ZSBGRVRDSFtrZXldO1xuICAgICAgICBpZiAocmV2YWxpZGF0b3JzICYmIHJldmFsaWRhdG9yc1swXSkge1xuICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdG9yc1swXShNVVRBVEVfRVZFTlQpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbn07XG5cbi8vIEdsb2JhbCB0aW1lc3RhbXAuXG52YXIgX190aW1lc3RhbXAgPSAwO1xudmFyIGdldFRpbWVzdGFtcCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICsrX190aW1lc3RhbXA7IH07XG5cbnZhciBpbnRlcm5hbE11dGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjYWNoZSwgX2tleSwgX2RhdGEsIF9vcHRzLCBvcHRpb25zLCBwb3B1bGF0ZUNhY2hlLCByZXZhbGlkYXRlLCByb2xsYmFja09uRXJyb3IsIG9wdGltaXN0aWNEYXRhLCBfYSwga2V5LCBrZXlJbmZvLCBfYiwgTVVUQVRJT04sIGRhdGEsIGVycm9yLCBiZWZvcmVNdXRhdGlvblRzLCBoYXNPcHRpbWlzdGljRGF0YSwgcm9sbGJhY2tEYXRhLCByZXM7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlID0gYXJnc1swXSwgX2tleSA9IGFyZ3NbMV0sIF9kYXRhID0gYXJnc1syXSwgX29wdHMgPSBhcmdzWzNdO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gdHlwZW9mIF9vcHRzID09PSAnYm9vbGVhbicgPyB7IHJldmFsaWRhdGU6IF9vcHRzIH0gOiBfb3B0cyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGVDYWNoZSA9IGlzVW5kZWZpbmVkKG9wdGlvbnMucG9wdWxhdGVDYWNoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBvcHRpb25zLnBvcHVsYXRlQ2FjaGU7XG4gICAgICAgICAgICAgICAgICAgIHJldmFsaWRhdGUgPSBvcHRpb25zLnJldmFsaWRhdGUgIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByb2xsYmFja09uRXJyb3IgPSBvcHRpb25zLnJvbGxiYWNrT25FcnJvciAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIG9wdGltaXN0aWNEYXRhID0gb3B0aW9ucy5vcHRpbWlzdGljRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgX2EgPSBzZXJpYWxpemUoX2tleSksIGtleSA9IF9hWzBdLCBrZXlJbmZvID0gX2FbMl07XG4gICAgICAgICAgICAgICAgICAgIGlmICgha2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICBfYiA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSksIE1VVEFUSU9OID0gX2JbMl07XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG5ldyBkYXRhIHByb3ZpZGVkLCByZXZhbGlkYXRlIHRoZSBrZXkgd2l0aCBjdXJyZW50IHN0YXRlLlxuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZhbGlkYXRlIGFuZCBicm9hZGNhc3Qgc3RhdGUuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgYnJvYWRjYXN0U3RhdGUoY2FjaGUsIGtleSwgY2FjaGUuZ2V0KGtleSksIFVOREVGSU5FRCwgVU5ERUZJTkVELCByZXZhbGlkYXRlLCB0cnVlKV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9kYXRhO1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmVNdXRhdGlvblRzID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgICAgICAgICAgICAgIE1VVEFUSU9OW2tleV0gPSBbYmVmb3JlTXV0YXRpb25UcywgMF07XG4gICAgICAgICAgICAgICAgICAgIGhhc09wdGltaXN0aWNEYXRhID0gIWlzVW5kZWZpbmVkKG9wdGltaXN0aWNEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcm9sbGJhY2tEYXRhID0gY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvIG9wdGltaXN0aWMgZGF0YSB1cGRhdGUuXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNPcHRpbWlzdGljRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuc2V0KGtleSwgb3B0aW1pc3RpY0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJvYWRjYXN0U3RhdGUoY2FjaGUsIGtleSwgb3B0aW1pc3RpY0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBgZGF0YWAgaXMgYSBmdW5jdGlvbiwgY2FsbCBpdCBwYXNzaW5nIGN1cnJlbnQgY2FjaGUgdmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhKGNhY2hlLmdldChrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCB0aHJvd3MgYW4gZXJyb3Igc3luY2hyb25vdXNseSwgd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEudGhlbikpKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgZGF0YS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgb3RoZXIgbXV0YXRpb25zIGhhdmUgb2NjdXJyZWQgc2luY2Ugd2UndmUgc3RhcnRlZCB0aGlzIG11dGF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhIHJhY2Ugd2UgZG9uJ3QgdXBkYXRlIGNhY2hlIG9yIGJyb2FkY2FzdCB0aGUgY2hhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCByZXR1cm4gdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIG11dGF0aW9uIGlzIGFzeW5jLCB3ZSBuZWVkIHRvIGNoZWNrIHRpbWVzdGFtcHMgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gYXZvaWQgcmFjZSBjb25kaXRpb25zLlxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2Muc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBvdGhlciBtdXRhdGlvbnMgaGF2ZSBvY2N1cnJlZCBzaW5jZSB3ZSd2ZSBzdGFydGVkIHRoaXMgbXV0YXRpb24uXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSByYWNlIHdlIGRvbid0IHVwZGF0ZSBjYWNoZSBvciBicm9hZGNhc3QgdGhlIGNoYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgLy8ganVzdCByZXR1cm4gdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgICAgIGlmIChiZWZvcmVNdXRhdGlvblRzICE9PSBNVVRBVElPTltrZXldWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZGF0YV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyb3IgJiYgaGFzT3B0aW1pc3RpY0RhdGEgJiYgcm9sbGJhY2tPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSb2xsYmFjay4gQWx3YXlzIHBvcHVsYXRlIHRoZSBjYWNoZSBpbiB0aGlzIGNhc2UgYnV0IHdpdGhvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybWluZyB0aGUgZGF0YS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlQ2FjaGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJvbGxiYWNrRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnNldChrZXksIHJvbGxiYWNrRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ugc2hvdWxkIHdyaXRlIGJhY2sgdGhlIGNhY2hlIGFmdGVyIHJlcXVlc3QuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3B1bGF0ZUNhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSByZXN1bHQgaW50byBkYXRhLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHBvcHVsYXRlQ2FjaGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwb3B1bGF0ZUNhY2hlKGRhdGEsIHJvbGxiYWNrRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIGNhY2hlZCBkYXRhIGlmIHRoZXJlJ3Mgbm8gZXJyb3IuIERhdGEgY2FuIGJlIGB1bmRlZmluZWRgIGhlcmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuc2V0KGtleSwgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgdXBkYXRlIG9yIHJlc2V0IHRoZSBlcnJvci5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnNldChrZXlJbmZvLCBtZXJnZU9iamVjdHMoY2FjaGUuZ2V0KGtleUluZm8pLCB7IGVycm9yOiBlcnJvciB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHRpbWVzdGFtcCB0byBtYXJrIHRoZSBtdXRhdGlvbiBoYXMgZW5kZWQuXG4gICAgICAgICAgICAgICAgICAgIE1VVEFUSU9OW2tleV1bMV0gPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgYnJvYWRjYXN0U3RhdGUoY2FjaGUsIGtleSwgZGF0YSwgZXJyb3IsIFVOREVGSU5FRCwgcmV2YWxpZGF0ZSwgISFwb3B1bGF0ZUNhY2hlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgZXJyb3Igb3IgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IF9jLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgZXJyb3Igb3IgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBwb3B1bGF0ZUNhY2hlID8gcmVzIDogZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxudmFyIHJldmFsaWRhdGVBbGxLZXlzID0gZnVuY3Rpb24gKHJldmFsaWRhdG9ycywgdHlwZSkge1xuICAgIGZvciAodmFyIGtleSBpbiByZXZhbGlkYXRvcnMpIHtcbiAgICAgICAgaWYgKHJldmFsaWRhdG9yc1trZXldWzBdKVxuICAgICAgICAgICAgcmV2YWxpZGF0b3JzW2tleV1bMF0odHlwZSk7XG4gICAgfVxufTtcbnZhciBpbml0Q2FjaGUgPSBmdW5jdGlvbiAocHJvdmlkZXIsIG9wdGlvbnMpIHtcbiAgICAvLyBUaGUgZ2xvYmFsIHN0YXRlIGZvciBhIHNwZWNpZmljIHByb3ZpZGVyIHdpbGwgYmUgdXNlZCB0byBkZWR1cGxpY2F0ZVxuICAgIC8vIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnMuIEFzIHdlbGwgYXMgYSBtdXRhdGUgZnVuY3Rpb24gdGhhdCBib3VuZCB0b1xuICAgIC8vIHRoZSBjYWNoZS5cbiAgICAvLyBQcm92aWRlcidzIGdsb2JhbCBzdGF0ZSBtaWdodCBiZSBhbHJlYWR5IGluaXRpYWxpemVkLiBMZXQncyB0cnkgdG8gZ2V0IHRoZVxuICAgIC8vIGdsb2JhbCBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3ZpZGVyIGZpcnN0LlxuICAgIGlmICghU1dSR2xvYmFsU3RhdGUuaGFzKHByb3ZpZGVyKSkge1xuICAgICAgICB2YXIgb3B0cyA9IG1lcmdlT2JqZWN0cyhkZWZhdWx0Q29uZmlnT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZ2xvYmFsIHN0YXRlIGJvdW5kIHRvIHRoZSBwcm92aWRlciwgY3JlYXRlIGEgbmV3IG9uZSB3aXRoIHRoZVxuICAgICAgICAvLyBuZXcgbXV0YXRlIGZ1bmN0aW9uLlxuICAgICAgICB2YXIgRVZFTlRfUkVWQUxJREFUT1JTID0ge307XG4gICAgICAgIHZhciBtdXRhdGUgPSBpbnRlcm5hbE11dGF0ZS5iaW5kKFVOREVGSU5FRCwgcHJvdmlkZXIpO1xuICAgICAgICB2YXIgdW5tb3VudCA9IG5vb3A7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgc3RhdGUgaWYgaXQncyBuZXcsIG9yIHRoZSBwcm92aWRlciBoYXMgYmVlbiBleHRlbmRlZC5cbiAgICAgICAgU1dSR2xvYmFsU3RhdGUuc2V0KHByb3ZpZGVyLCBbRVZFTlRfUkVWQUxJREFUT1JTLCB7fSwge30sIHt9LCBtdXRhdGVdKTtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm92aWRlciwgd2UgbmVlZCB0byBpbml0aWFsaXplIGl0IGFuZCBzZXR1cCBET00gZXZlbnRzXG4gICAgICAgIC8vIGxpc3RlbmVycyBmb3IgYGZvY3VzYCBhbmQgYHJlY29ubmVjdGAgYWN0aW9ucy5cbiAgICAgICAgaWYgKCFJU19TRVJWRVIpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gbGlzdGVuaW5nIHRvIHRoZSBuYXRpdmUgZXZlbnRzIGZvciBhdXRvIHJldmFsaWRhdGlvbnMsXG4gICAgICAgICAgICAvLyB3ZSBpbnRlbnRpb25hbGx5IHB1dCBhIGRlbGF5IChzZXRUaW1lb3V0KSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZVxuICAgICAgICAgICAgLy8gZmlyZWQgYWZ0ZXIgaW1tZWRpYXRlIEphdmFTY3JpcHQgZXhlY3V0aW9ucywgd2hpY2ggY2FuIHBvc3NpYmx5IGJlXG4gICAgICAgICAgICAvLyBSZWFjdCdzIHN0YXRlIHVwZGF0ZXMuXG4gICAgICAgICAgICAvLyBUaGlzIGF2b2lkcyBzb21lIHVubmVjZXNzYXJ5IHJldmFsaWRhdGlvbnMgc3VjaCBhc1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9zd3IvaXNzdWVzLzE2ODAuXG4gICAgICAgICAgICB2YXIgcmVsZWFzZUZvY3VzXzEgPSBvcHRzLmluaXRGb2N1cyhzZXRUaW1lb3V0LmJpbmQoVU5ERUZJTkVELCByZXZhbGlkYXRlQWxsS2V5cy5iaW5kKFVOREVGSU5FRCwgRVZFTlRfUkVWQUxJREFUT1JTLCBGT0NVU19FVkVOVCkpKTtcbiAgICAgICAgICAgIHZhciByZWxlYXNlUmVjb25uZWN0XzEgPSBvcHRzLmluaXRSZWNvbm5lY3Qoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgUkVDT05ORUNUX0VWRU5UKSkpO1xuICAgICAgICAgICAgdW5tb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZWxlYXNlRm9jdXNfMSAmJiByZWxlYXNlRm9jdXNfMSgpO1xuICAgICAgICAgICAgICAgIHJlbGVhc2VSZWNvbm5lY3RfMSAmJiByZWxlYXNlUmVjb25uZWN0XzEoKTtcbiAgICAgICAgICAgICAgICAvLyBXaGVuIHVuLW1vdW50aW5nLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgY2FjaGUgcHJvdmlkZXIgZnJvbSB0aGUgc3RhdGVcbiAgICAgICAgICAgICAgICAvLyBzdG9yYWdlIHRvbyBiZWNhdXNlIGl0J3MgYSBzaWRlLWVmZmVjdC4gT3RoZXJ3aXNlIHdoZW4gcmUtbW91bnRpbmcgd2VcbiAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCByZS1yZWdpc3RlciB0aG9zZSBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgICAgICAgICAgU1dSR2xvYmFsU3RhdGUuZGVsZXRlKHByb3ZpZGVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgbWlnaHQgd2FudCB0byBpbmplY3QgYW4gZXh0cmEgbGF5ZXIgb24gdG9wIG9mIGBwcm92aWRlcmAgaW4gdGhlIGZ1dHVyZSxcbiAgICAgICAgLy8gc3VjaCBhcyBrZXkgc2VyaWFsaXphdGlvbiwgYXV0byBHQywgZXRjLlxuICAgICAgICAvLyBGb3Igbm93LCBpdCdzIGp1c3QgYSBgTWFwYCBpbnRlcmZhY2Ugd2l0aG91dCBhbnkgbW9kaWZpY2F0aW9ucy5cbiAgICAgICAgcmV0dXJuIFtwcm92aWRlciwgbXV0YXRlLCB1bm1vdW50XTtcbiAgICB9XG4gICAgcmV0dXJuIFtwcm92aWRlciwgU1dSR2xvYmFsU3RhdGUuZ2V0KHByb3ZpZGVyKVs0XV07XG59O1xuXG4vLyBlcnJvciByZXRyeVxudmFyIG9uRXJyb3JSZXRyeSA9IGZ1bmN0aW9uIChfLCBfXywgY29uZmlnLCByZXZhbGlkYXRlLCBvcHRzKSB7XG4gICAgdmFyIG1heFJldHJ5Q291bnQgPSBjb25maWcuZXJyb3JSZXRyeUNvdW50O1xuICAgIHZhciBjdXJyZW50UmV0cnlDb3VudCA9IG9wdHMucmV0cnlDb3VudDtcbiAgICAvLyBFeHBvbmVudGlhbCBiYWNrb2ZmXG4gICAgdmFyIHRpbWVvdXQgPSB+figoTWF0aC5yYW5kb20oKSArIDAuNSkgKlxuICAgICAgICAoMSA8PCAoY3VycmVudFJldHJ5Q291bnQgPCA4ID8gY3VycmVudFJldHJ5Q291bnQgOiA4KSkpICogY29uZmlnLmVycm9yUmV0cnlJbnRlcnZhbDtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1heFJldHJ5Q291bnQpICYmIGN1cnJlbnRSZXRyeUNvdW50ID4gbWF4UmV0cnlDb3VudCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQocmV2YWxpZGF0ZSwgdGltZW91dCwgb3B0cyk7XG59O1xuLy8gRGVmYXVsdCBjYWNoZSBwcm92aWRlclxudmFyIF9hID0gaW5pdENhY2hlKG5ldyBNYXAoKSksIGNhY2hlID0gX2FbMF0sIG11dGF0ZSA9IF9hWzFdO1xuLy8gRGVmYXVsdCBjb25maWdcbnZhciBkZWZhdWx0Q29uZmlnID0gbWVyZ2VPYmplY3RzKHtcbiAgICAvLyBldmVudHNcbiAgICBvbkxvYWRpbmdTbG93OiBub29wLFxuICAgIG9uU3VjY2Vzczogbm9vcCxcbiAgICBvbkVycm9yOiBub29wLFxuICAgIG9uRXJyb3JSZXRyeTogb25FcnJvclJldHJ5LFxuICAgIG9uRGlzY2FyZGVkOiBub29wLFxuICAgIC8vIHN3aXRjaGVzXG4gICAgcmV2YWxpZGF0ZU9uRm9jdXM6IHRydWUsXG4gICAgcmV2YWxpZGF0ZU9uUmVjb25uZWN0OiB0cnVlLFxuICAgIHJldmFsaWRhdGVJZlN0YWxlOiB0cnVlLFxuICAgIHNob3VsZFJldHJ5T25FcnJvcjogdHJ1ZSxcbiAgICAvLyB0aW1lb3V0c1xuICAgIGVycm9yUmV0cnlJbnRlcnZhbDogc2xvd0Nvbm5lY3Rpb24gPyAxMDAwMCA6IDUwMDAsXG4gICAgZm9jdXNUaHJvdHRsZUludGVydmFsOiA1ICogMTAwMCxcbiAgICBkZWR1cGluZ0ludGVydmFsOiAyICogMTAwMCxcbiAgICBsb2FkaW5nVGltZW91dDogc2xvd0Nvbm5lY3Rpb24gPyA1MDAwIDogMzAwMCxcbiAgICAvLyBwcm92aWRlcnNcbiAgICBjb21wYXJlOiBmdW5jdGlvbiAoY3VycmVudERhdGEsIG5ld0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHN0YWJsZUhhc2goY3VycmVudERhdGEpID09IHN0YWJsZUhhc2gobmV3RGF0YSk7XG4gICAgfSxcbiAgICBpc1BhdXNlZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH0sXG4gICAgY2FjaGU6IGNhY2hlLFxuICAgIG11dGF0ZTogbXV0YXRlLFxuICAgIGZhbGxiYWNrOiB7fVxufSwgXG4vLyB1c2Ugd2ViIHByZXNldCBieSBkZWZhdWx0XG5wcmVzZXQpO1xuXG52YXIgbWVyZ2VDb25maWdzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3QgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIG9yaWdpbmFsIGhlcmUuXG4gICAgdmFyIHYgPSBtZXJnZU9iamVjdHMoYSwgYik7XG4gICAgLy8gSWYgdHdvIGNvbmZpZ3MgYXJlIHByb3ZpZGVkLCBtZXJnZSB0aGVpciBgdXNlYCBhbmQgYGZhbGxiYWNrYCBvcHRpb25zLlxuICAgIGlmIChiKSB7XG4gICAgICAgIHZhciB1MSA9IGEudXNlLCBmMSA9IGEuZmFsbGJhY2s7XG4gICAgICAgIHZhciB1MiA9IGIudXNlLCBmMiA9IGIuZmFsbGJhY2s7XG4gICAgICAgIGlmICh1MSAmJiB1Mikge1xuICAgICAgICAgICAgdi51c2UgPSB1MS5jb25jYXQodTIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmMSAmJiBmMikge1xuICAgICAgICAgICAgdi5mYWxsYmFjayA9IG1lcmdlT2JqZWN0cyhmMSwgZjIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xufTtcblxudmFyIFNXUkNvbmZpZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9KTtcbnZhciBTV1JDb25maWckMSA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuICAgIC8vIEV4dGVuZCBwYXJlbnQgY29udGV4dCB2YWx1ZXMgYW5kIG1pZGRsZXdhcmUuXG4gICAgdmFyIGV4dGVuZGVkQ29uZmlnID0gbWVyZ2VDb25maWdzKHVzZUNvbnRleHQoU1dSQ29uZmlnQ29udGV4dCksIHZhbHVlKTtcbiAgICAvLyBTaG91bGQgbm90IHVzZSB0aGUgaW5oZXJpdGVkIHByb3ZpZGVyLlxuICAgIHZhciBwcm92aWRlciA9IHZhbHVlICYmIHZhbHVlLnByb3ZpZGVyO1xuICAgIC8vIFVzZSBhIGxhenkgaW5pdGlhbGl6ZWQgc3RhdGUgdG8gY3JlYXRlIHRoZSBjYWNoZSBvbiBmaXJzdCBhY2Nlc3MuXG4gICAgdmFyIGNhY2hlQ29udGV4dCA9IHVzZVN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyXG4gICAgICAgICAgICA/IGluaXRDYWNoZShwcm92aWRlcihleHRlbmRlZENvbmZpZy5jYWNoZSB8fCBjYWNoZSksIHZhbHVlKVxuICAgICAgICAgICAgOiBVTkRFRklORUQ7XG4gICAgfSlbMF07XG4gICAgLy8gT3ZlcnJpZGUgdGhlIGNhY2hlIGlmIGEgbmV3IHByb3ZpZGVyIGlzIGdpdmVuLlxuICAgIGlmIChjYWNoZUNvbnRleHQpIHtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcuY2FjaGUgPSBjYWNoZUNvbnRleHRbMF07XG4gICAgICAgIGV4dGVuZGVkQ29uZmlnLm11dGF0ZSA9IGNhY2hlQ29udGV4dFsxXTtcbiAgICB9XG4gICAgLy8gVW5zdWJzY3JpYmUgZXZlbnRzLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkgeyByZXR1cm4gKGNhY2hlQ29udGV4dCA/IGNhY2hlQ29udGV4dFsyXSA6IFVOREVGSU5FRCk7IH0sIFtdKTtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChTV1JDb25maWdDb250ZXh0LlByb3ZpZGVyLCBtZXJnZU9iamVjdHMocHJvcHMsIHtcbiAgICAgICAgdmFsdWU6IGV4dGVuZGVkQ29uZmlnXG4gICAgfSkpO1xufTtcblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBzdGF0ZSB3aXRoIGRlcGVuZGVuY3ktdHJhY2tpbmcuXG4gKi9cbnZhciB1c2VTdGF0ZVdpdGhEZXBzID0gZnVuY3Rpb24gKHN0YXRlLCB1bm1vdW50ZWRSZWYpIHtcbiAgICB2YXIgcmVyZW5kZXIgPSB1c2VTdGF0ZSh7fSlbMV07XG4gICAgdmFyIHN0YXRlUmVmID0gdXNlUmVmKHN0YXRlKTtcbiAgICAvLyBJZiBhIHN0YXRlIHByb3BlcnR5IChkYXRhLCBlcnJvciBvciBpc1ZhbGlkYXRpbmcpIGlzIGFjY2Vzc2VkIGJ5IHRoZSByZW5kZXJcbiAgICAvLyBmdW5jdGlvbiwgd2UgbWFyayB0aGUgcHJvcGVydHkgYXMgYSBkZXBlbmRlbmN5IHNvIGlmIGl0IGlzIHVwZGF0ZWQgYWdhaW5cbiAgICAvLyBpbiB0aGUgZnV0dXJlLCB3ZSB0cmlnZ2VyIGEgcmVyZW5kZXIuXG4gICAgLy8gVGhpcyBpcyBhbHNvIGtub3duIGFzIGRlcGVuZGVuY3ktdHJhY2tpbmcuXG4gICAgdmFyIHN0YXRlRGVwZW5kZW5jaWVzUmVmID0gdXNlUmVmKHtcbiAgICAgICAgZGF0YTogZmFsc2UsXG4gICAgICAgIGVycm9yOiBmYWxzZSxcbiAgICAgICAgaXNWYWxpZGF0aW5nOiBmYWxzZVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBwYXlsb2FkIFRvIGNoYW5nZSBzdGF0ZVJlZiwgcGFzcyB0aGUgdmFsdWVzIGV4cGxpY2l0bHkgdG8gc2V0U3RhdGU6XG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIHNldFN0YXRlKHtcbiAgICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICAgKiAgIGRhdGE6IG5ld0RhdGEgLy8gc2V0IGRhdGEgdG8gbmV3RGF0YVxuICAgICAqICAgZXJyb3I6IHVuZGVmaW5lZCAvLyBzZXQgZXJyb3IgdG8gdW5kZWZpbmVkXG4gICAgICogfSlcbiAgICAgKlxuICAgICAqIHNldFN0YXRlKHtcbiAgICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICAgKiAgIGRhdGE6IHVuZGVmaW5lZCAvLyBzZXQgZGF0YSB0byB1bmRlZmluZWRcbiAgICAgKiAgIGVycm9yOiBlcnIgLy8gc2V0IGVycm9yIHRvIGVyclxuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdmFyIHNldFN0YXRlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHNob3VsZFJlcmVuZGVyID0gZmFsc2U7XG4gICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBzdGF0ZVJlZi5jdXJyZW50O1xuICAgICAgICBmb3IgKHZhciBfIGluIHBheWxvYWQpIHtcbiAgICAgICAgICAgIHZhciBrID0gXztcbiAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCwgdXBkYXRlIHRoZSBzdGF0ZSBhbmQgbWFyayByZXJlbmRlciBhc1xuICAgICAgICAgICAgLy8gbmVlZGVkLlxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZVtrXSAhPT0gcGF5bG9hZFtrXSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZVtrXSA9IHBheWxvYWRba107XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIGFjY2Vzc2VkIGJ5IHRoZSBjb21wb25lbnQsIGEgcmVyZW5kZXIgc2hvdWxkIGJlXG4gICAgICAgICAgICAgICAgLy8gdHJpZ2dlcmVkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZURlcGVuZGVuY2llc1JlZi5jdXJyZW50W2tdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFJlcmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZFJlcmVuZGVyICYmICF1bm1vdW50ZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgcmVyZW5kZXIoe30pO1xuICAgICAgICB9XG4gICAgfSwgXG4gICAgLy8gY29uZmlnLnN1c3BlbnNlIGlzbid0IGFsbG93ZWQgdG8gY2hhbmdlIGR1cmluZyB0aGUgbGlmZWN5Y2xlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtdKTtcbiAgICAvLyBBbHdheXMgdXBkYXRlIHRoZSBzdGF0ZSByZWZlcmVuY2UuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHN0YXRlUmVmLmN1cnJlbnQgPSBzdGF0ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gW3N0YXRlUmVmLCBzdGF0ZURlcGVuZGVuY2llc1JlZi5jdXJyZW50LCBzZXRTdGF0ZV07XG59O1xuXG52YXIgbm9ybWFsaXplID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihhcmdzWzFdKVxuICAgICAgICA/IFthcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdIHx8IHt9XVxuICAgICAgICA6IFthcmdzWzBdLCBudWxsLCAoYXJnc1sxXSA9PT0gbnVsbCA/IGFyZ3NbMl0gOiBhcmdzWzFdKSB8fCB7fV07XG59O1xuXG52YXIgdXNlU1dSQ29uZmlnID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZywgdXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KSk7XG59O1xuXG4vLyBJdCdzIHRyaWNreSB0byBwYXNzIGdlbmVyaWMgdHlwZXMgYXMgcGFyYW1ldGVycywgc28gd2UganVzdCBkaXJlY3RseSBvdmVycmlkZVxuLy8gdGhlIHR5cGVzIGhlcmUuXG52YXIgd2l0aEFyZ3MgPSBmdW5jdGlvbiAoaG9vaykge1xuICAgIHJldHVybiBmdW5jdGlvbiB1c2VTV1JBcmdzKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIC8vIEdldCB0aGUgZGVmYXVsdCBhbmQgaW5oZXJpdGVkIGNvbmZpZ3VyYXRpb24uXG4gICAgICAgIHZhciBmYWxsYmFja0NvbmZpZyA9IHVzZVNXUkNvbmZpZygpO1xuICAgICAgICAvLyBOb3JtYWxpemUgYXJndW1lbnRzLlxuICAgICAgICB2YXIgX2EgPSBub3JtYWxpemUoYXJncyksIGtleSA9IF9hWzBdLCBmbiA9IF9hWzFdLCBfY29uZmlnID0gX2FbMl07XG4gICAgICAgIC8vIE1lcmdlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAgICB2YXIgY29uZmlnID0gbWVyZ2VDb25maWdzKGZhbGxiYWNrQ29uZmlnLCBfY29uZmlnKTtcbiAgICAgICAgLy8gQXBwbHkgbWlkZGxld2FyZVxuICAgICAgICB2YXIgbmV4dCA9IGhvb2s7XG4gICAgICAgIHZhciB1c2UgPSBjb25maWcudXNlO1xuICAgICAgICBpZiAodXNlKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gdXNlLmxlbmd0aDsgaS0tID4gMDspIHtcbiAgICAgICAgICAgICAgICBuZXh0ID0gdXNlW2ldKG5leHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0KGtleSwgZm4gfHwgY29uZmlnLmZldGNoZXIsIGNvbmZpZyk7XG4gICAgfTtcbn07XG5cbi8vIEFkZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGEgbGlzdCBvZiBrZXllZCBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIHJldHVyblxuLy8gdGhlIHVuc3Vic2NyaWJlIGZ1bmN0aW9uLlxudmFyIHN1YnNjcmliZUNhbGxiYWNrID0gZnVuY3Rpb24gKGtleSwgY2FsbGJhY2tzLCBjYWxsYmFjaykge1xuICAgIHZhciBrZXllZFJldmFsaWRhdG9ycyA9IGNhbGxiYWNrc1trZXldIHx8IChjYWxsYmFja3Nba2V5XSA9IFtdKTtcbiAgICBrZXllZFJldmFsaWRhdG9ycy5wdXNoKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5kZXggPSBrZXllZFJldmFsaWRhdG9ycy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIC8vIE8oMSk6IGZhc3RlciB0aGFuIHNwbGljZVxuICAgICAgICAgICAga2V5ZWRSZXZhbGlkYXRvcnNbaW5kZXhdID0ga2V5ZWRSZXZhbGlkYXRvcnNba2V5ZWRSZXZhbGlkYXRvcnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBrZXllZFJldmFsaWRhdG9ycy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuXG52YXIgV0lUSF9ERURVUEUgPSB7IGRlZHVwZTogdHJ1ZSB9O1xudmFyIHVzZVNXUkhhbmRsZXIgPSBmdW5jdGlvbiAoX2tleSwgZmV0Y2hlciwgY29uZmlnKSB7XG4gICAgdmFyIGNhY2hlID0gY29uZmlnLmNhY2hlLCBjb21wYXJlID0gY29uZmlnLmNvbXBhcmUsIGZhbGxiYWNrRGF0YSA9IGNvbmZpZy5mYWxsYmFja0RhdGEsIHN1c3BlbnNlID0gY29uZmlnLnN1c3BlbnNlLCByZXZhbGlkYXRlT25Nb3VudCA9IGNvbmZpZy5yZXZhbGlkYXRlT25Nb3VudCwgcmVmcmVzaEludGVydmFsID0gY29uZmlnLnJlZnJlc2hJbnRlcnZhbCwgcmVmcmVzaFdoZW5IaWRkZW4gPSBjb25maWcucmVmcmVzaFdoZW5IaWRkZW4sIHJlZnJlc2hXaGVuT2ZmbGluZSA9IGNvbmZpZy5yZWZyZXNoV2hlbk9mZmxpbmU7XG4gICAgdmFyIF9hID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKSwgRVZFTlRfUkVWQUxJREFUT1JTID0gX2FbMF0sIFNUQVRFX1VQREFURVJTID0gX2FbMV0sIE1VVEFUSU9OID0gX2FbMl0sIEZFVENIID0gX2FbM107XG4gICAgLy8gYGtleWAgaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIFNXUiBgZGF0YWAgc3RhdGUsIGBrZXlJbmZvYCBob2xkcyBleHRyYVxuICAgIC8vIHN0YXRlcyBzdWNoIGFzIGBlcnJvcmAgYW5kIGBpc1ZhbGlkYXRpbmdgIGluc2lkZSxcbiAgICAvLyBhbGwgb2YgdGhlbSBhcmUgZGVyaXZlZCBmcm9tIGBfa2V5YC5cbiAgICAvLyBgZm5BcmdzYCBpcyBhbiBhcnJheSBvZiBhcmd1bWVudHMgcGFyc2VkIGZyb20gdGhlIGtleSwgd2hpY2ggd2lsbCBiZSBwYXNzZWRcbiAgICAvLyB0byB0aGUgZmV0Y2hlci5cbiAgICB2YXIgX2IgPSBzZXJpYWxpemUoX2tleSksIGtleSA9IF9iWzBdLCBmbkFyZ3MgPSBfYlsxXSwga2V5SW5mbyA9IF9iWzJdO1xuICAgIC8vIElmIGl0J3MgdGhlIGluaXRpYWwgcmVuZGVyIG9mIHRoaXMgaG9vay5cbiAgICB2YXIgaW5pdGlhbE1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIC8vIElmIHRoZSBob29rIGlzIHVubW91bnRlZCBhbHJlYWR5LiBUaGlzIHdpbGwgYmUgdXNlZCB0byBwcmV2ZW50IHNvbWUgZWZmZWN0c1xuICAgIC8vIHRvIGJlIGNhbGxlZCBhZnRlciB1bm1vdW50aW5nLlxuICAgIHZhciB1bm1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIC8vIFJlZnMgdG8ga2VlcCB0aGUga2V5IGFuZCBjb25maWcuXG4gICAgdmFyIGtleVJlZiA9IHVzZVJlZihrZXkpO1xuICAgIHZhciBmZXRjaGVyUmVmID0gdXNlUmVmKGZldGNoZXIpO1xuICAgIHZhciBjb25maWdSZWYgPSB1c2VSZWYoY29uZmlnKTtcbiAgICB2YXIgZ2V0Q29uZmlnID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZmlnUmVmLmN1cnJlbnQ7IH07XG4gICAgdmFyIGlzQWN0aXZlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkgJiYgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKTsgfTtcbiAgICB2YXIgcGF0Y2hGZXRjaEluZm8gPSBmdW5jdGlvbiAoaW5mbykge1xuICAgICAgICByZXR1cm4gY2FjaGUuc2V0KGtleUluZm8sIG1lcmdlT2JqZWN0cyhjYWNoZS5nZXQoa2V5SW5mbyksIGluZm8pKTtcbiAgICB9O1xuICAgIC8vIEdldCB0aGUgY3VycmVudCBzdGF0ZSB0aGF0IFNXUiBzaG91bGQgcmV0dXJuLlxuICAgIHZhciBjYWNoZWQgPSBjYWNoZS5nZXQoa2V5KTtcbiAgICB2YXIgZmFsbGJhY2sgPSBpc1VuZGVmaW5lZChmYWxsYmFja0RhdGEpXG4gICAgICAgID8gY29uZmlnLmZhbGxiYWNrW2tleV1cbiAgICAgICAgOiBmYWxsYmFja0RhdGE7XG4gICAgdmFyIGRhdGEgPSBpc1VuZGVmaW5lZChjYWNoZWQpID8gZmFsbGJhY2sgOiBjYWNoZWQ7XG4gICAgdmFyIGluZm8gPSBjYWNoZS5nZXQoa2V5SW5mbykgfHwge307XG4gICAgdmFyIGVycm9yID0gaW5mby5lcnJvcjtcbiAgICB2YXIgaXNJbml0aWFsTW91bnQgPSAhaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudDtcbiAgICAvLyAtIFN1c3BlbnNlIG1vZGUgYW5kIHRoZXJlJ3Mgc3RhbGUgZGF0YSBmb3IgdGhlIGluaXRpYWwgcmVuZGVyLlxuICAgIC8vIC0gTm90IHN1c3BlbnNlIG1vZGUgYW5kIHRoZXJlIGlzIG5vIGZhbGxiYWNrIGRhdGEgYW5kIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgZW5hYmxlZC5cbiAgICAvLyAtIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgZW5hYmxlZCBidXQgYGRhdGFgIGlzIG5vdCBkZWZpbmVkLlxuICAgIHZhciBzaG91bGRSZXZhbGlkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBJZiBgcmV2YWxpZGF0ZU9uTW91bnRgIGlzIHNldCwgd2UgdGFrZSB0aGUgdmFsdWUgZGlyZWN0bHkuXG4gICAgICAgIGlmIChpc0luaXRpYWxNb3VudCAmJiAhaXNVbmRlZmluZWQocmV2YWxpZGF0ZU9uTW91bnQpKVxuICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdGVPbk1vdW50O1xuICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChnZXRDb25maWcoKS5pc1BhdXNlZCgpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gc3VzcGVuc2VcbiAgICAgICAgICAgID8gLy8gVW5kZXIgc3VzcGVuc2UgbW9kZSwgaXQgd2lsbCBhbHdheXMgZmV0Y2ggb24gcmVuZGVyIGlmIHRoZXJlIGlzIG5vXG4gICAgICAgICAgICAgICAgLy8gc3RhbGUgZGF0YSBzbyBubyBuZWVkIHRvIHJldmFsaWRhdGUgaW1tZWRpYXRlbHkgb24gbW91bnQgYWdhaW4uXG4gICAgICAgICAgICAgICAgIWlzVW5kZWZpbmVkKGRhdGEpXG4gICAgICAgICAgICA6IC8vIElmIHRoZXJlIGlzIG5vIHN0YWxlIGRhdGEsIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZSBvbiBtb3VudDtcbiAgICAgICAgICAgICAgICAvLyBJZiBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIHNldCB0byB0cnVlLCB3ZSB3aWxsIGFsd2F5cyByZXZhbGlkYXRlLlxuICAgICAgICAgICAgICAgIGlzVW5kZWZpbmVkKGRhdGEpIHx8IGNvbmZpZy5yZXZhbGlkYXRlSWZTdGFsZTtcbiAgICB9O1xuICAgIC8vIFJlc29sdmUgdGhlIGN1cnJlbnQgdmFsaWRhdGluZyBzdGF0ZS5cbiAgICB2YXIgcmVzb2x2ZVZhbGlkYXRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICgha2V5IHx8ICFmZXRjaGVyKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoaW5mby5pc1ZhbGlkYXRpbmcpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gSWYgaXQncyBub3QgbW91bnRlZCB5ZXQgYW5kIGl0IHNob3VsZCByZXZhbGlkYXRlIG9uIG1vdW50LCByZXZhbGlkYXRlLlxuICAgICAgICByZXR1cm4gaXNJbml0aWFsTW91bnQgJiYgc2hvdWxkUmV2YWxpZGF0ZSgpO1xuICAgIH07XG4gICAgdmFyIGlzVmFsaWRhdGluZyA9IHJlc29sdmVWYWxpZGF0aW5nKCk7XG4gICAgdmFyIF9jID0gdXNlU3RhdGVXaXRoRGVwcyh7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgaXNWYWxpZGF0aW5nOiBpc1ZhbGlkYXRpbmdcbiAgICB9LCB1bm1vdW50ZWRSZWYpLCBzdGF0ZVJlZiA9IF9jWzBdLCBzdGF0ZURlcGVuZGVuY2llcyA9IF9jWzFdLCBzZXRTdGF0ZSA9IF9jWzJdO1xuICAgIC8vIFRoZSByZXZhbGlkYXRpb24gZnVuY3Rpb24gaXMgYSBjYXJlZnVsbHkgY3JhZnRlZCB3cmFwcGVyIG9mIHRoZSBvcmlnaW5hbFxuICAgIC8vIGBmZXRjaGVyYCwgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgbWFueSBlZGdlIGNhc2VzLlxuICAgIHZhciByZXZhbGlkYXRlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHJldmFsaWRhdGVPcHRzKSB7IHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY3VycmVudEZldGNoZXIsIG5ld0RhdGEsIHN0YXJ0QXQsIGxvYWRpbmcsIG9wdHMsIHNob3VsZFN0YXJ0TmV3UmVxdWVzdCwgaXNDdXJyZW50S2V5TW91bnRlZCwgY2xlYW51cFN0YXRlLCBuZXdTdGF0ZSwgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlLCBtdXRhdGlvbkluZm8sIGVycl8xO1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGZXRjaGVyID0gZmV0Y2hlclJlZi5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIWN1cnJlbnRGZXRjaGVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGZhbHNlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgb3B0cyA9IHJldmFsaWRhdGVPcHRzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRTdGFydE5ld1JlcXVlc3QgPSAhRkVUQ0hba2V5XSB8fCAhb3B0cy5kZWR1cGU7XG4gICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudEtleU1vdW50ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXVubW91bnRlZFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09PSBrZXlSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNsZWFudXBTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3Mgc3RpbGwgdGhlIHNhbWUgcmVxdWVzdCBiZWZvcmUgZGVsZXRpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdEluZm8gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RJbmZvICYmIHJlcXVlc3RJbmZvWzFdID09PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlID0geyBpc1ZhbGlkYXRpbmc6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoRmV0Y2hJbmZvKHsgaXNWYWxpZGF0aW5nOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBvbmx5IHNldCBzdGF0ZSBpZiBpdCdzIHNhZmUgKHN0aWxsIG1vdW50ZWQgd2l0aCB0aGUgc2FtZSBrZXkpLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgZmV0Y2hpbmcuIENoYW5nZSB0aGUgYGlzVmFsaWRhdGluZ2Agc3RhdGUsIHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoRmV0Y2hJbmZvKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWRhdGluZzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoeyBpc1ZhbGlkYXRpbmc6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgMywgLCA0XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlbGwgYWxsIG90aGVyIGhvb2tzIHRvIGNoYW5nZSB0aGUgYGlzVmFsaWRhdGluZ2Agc3RhdGUuXG4gICAgICAgICAgICAgICAgICAgICAgICBicm9hZGNhc3RTdGF0ZShjYWNoZSwga2V5LCBzdGF0ZVJlZi5jdXJyZW50LmRhdGEsIHN0YXRlUmVmLmN1cnJlbnQuZXJyb3IsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm8gY2FjaGUgYmVpbmcgcmVuZGVyZWQgY3VycmVudGx5IChpdCBzaG93cyBhIGJsYW5rIHBhZ2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgdHJpZ2dlciB0aGUgbG9hZGluZyBzbG93IGV2ZW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5sb2FkaW5nVGltZW91dCAmJiAhY2FjaGUuZ2V0KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRpbmcgJiYgaXNDdXJyZW50S2V5TW91bnRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkxvYWRpbmdTbG93KGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZy5sb2FkaW5nVGltZW91dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgcmVxdWVzdCBhbmQgc2F2ZSB0aGUgdGltZXN0YW1wLlxuICAgICAgICAgICAgICAgICAgICAgICAgRkVUQ0hba2V5XSA9IFtjdXJyZW50RmV0Y2hlci5hcHBseSh2b2lkIDAsIGZuQXJncyksIGdldFRpbWVzdGFtcCgpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYSA9IEZFVENIW2tleV0sIG5ld0RhdGEgPSBfYVswXSwgc3RhcnRBdCA9IF9hWzFdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBuZXdEYXRhXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIG5ld0RhdGEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IGlzbid0IGludGVycnVwdGVkLCBjbGVhbiBpdCB1cCBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZHVwbGljYXRpb24gaW50ZXJ2YWwuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNsZWFudXBTdGF0ZSwgY29uZmlnLmRlZHVwaW5nSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3JlIG90aGVyIG9uZ29pbmcgcmVxdWVzdChzKSwgc3RhcnRlZCBhZnRlciB0aGUgY3VycmVudCBvbmUsXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBjdXJyZW50IG9uZSB0byBhdm9pZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgICAgICAgICAgIC8vICAgcmVxMS0tLS0tLS0tLS0tLS0tLS0tLT5yZXMxICAgICAgICAoY3VycmVudCBvbmUpXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICByZXEyLS0tLS0tLS0tLS0tLS0tLT5yZXMyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSByZXF1ZXN0IHRoYXQgZmlyZWQgbGF0ZXIgd2lsbCBhbHdheXMgYmUga2VwdC5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRpbWVzdGFtcCBtYXliZSBiZSBgdW5kZWZpbmVkYCBvciBhIG51bWJlclxuICAgICAgICAgICAgICAgICAgICBpZiAoIUZFVENIW2tleV0gfHwgRkVUQ0hba2V5XVsxXSAhPT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0N1cnJlbnRLZXlNb3VudGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25EaXNjYXJkZWQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZmFsc2VdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIGVycm9yLlxuICAgICAgICAgICAgICAgICAgICBwYXRjaEZldGNoSW5mbyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogVU5ERUZJTkVEXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZS5lcnJvciA9IFVOREVGSU5FRDtcbiAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25JbmZvID0gTVVUQVRJT05ba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChtdXRhdGlvbkluZm8pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydEF0IDw9IG11dGF0aW9uSW5mb1swXSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QXQgPD0gbXV0YXRpb25JbmZvWzFdIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25JbmZvWzFdID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBmYWxzZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRGVlcCBjb21wYXJlIHdpdGggbGF0ZXN0IHN0YXRlIHRvIGF2b2lkIGV4dHJhIHJlLXJlbmRlcnMuXG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciBsb2NhbCBzdGF0ZSwgY29tcGFyZSBhbmQgYXNzaWduLlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmUoc3RhdGVSZWYuY3VycmVudC5kYXRhLCBuZXdEYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUuZGF0YSA9IG5ld0RhdGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIGFuZCBuZXdEYXRhIGFyZSBkZWVwbHkgZXF1YWxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IHNob3VsZCBiZSBzYWZlIHRvIGJyb2FkY2FzdCB0aGUgc3RhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUuZGF0YSA9IHN0YXRlUmVmLmN1cnJlbnQuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbiwgYGJyb2Nhc3RTdGF0ZWAgaW52b2tlcyB0aGUgYG9uU3RhdGVVcGRhdGVgIGZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggdGFrZXMgY2FyZSBvZiBhdm9pZGluZyB0aGUgcmUtcmVuZGVyXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGdsb2JhbCBzdGF0ZSwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBrZXkgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL3B1bGwvMTA1OFxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmUoY2FjaGUuZ2V0KGtleSksIG5ld0RhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zZXQoa2V5LCBuZXdEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIHRoZSBzdWNjZXNzZnVsIGNhbGxiYWNrIGlmIGl0J3MgdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0N1cnJlbnRLZXlNb3VudGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vblN1Y2Nlc3MobmV3RGF0YSwga2V5LCBjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgZXJyXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFudXBTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBOb3QgcGF1c2VkLCB3ZSBjb250aW51ZSBoYW5kbGluZyB0aGUgZXJyb3IuIE90aGVyd2lzZSBkaXNjYXJkIGl0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWdldENvbmZpZygpLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBhIG5ldyBlcnJvciwgZG9uJ3QgdXNlIGRlZXAgY29tcGFyaXNvbiBmb3IgZXJyb3JzLlxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hGZXRjaEluZm8oeyBlcnJvcjogZXJyXzEgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZS5lcnJvciA9IGVycl8xO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IgZXZlbnQgYW5kIHJldHJ5IGxvZ2ljLiBPbmx5IGZvciB0aGUgYWN0dWFsIHJlcXVlc3QsIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVkdXBlZCBvbmVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCAmJiBpc0N1cnJlbnRLZXlNb3VudGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkVycm9yKGVycl8xLCBrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgY29uZmlnLnNob3VsZFJldHJ5T25FcnJvciA9PT0gJ2Jvb2xlYW4nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaG91bGRSZXRyeU9uRXJyb3IpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGNvbmZpZy5zaG91bGRSZXRyeU9uRXJyb3IpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuc2hvdWxkUmV0cnlPbkVycm9yKGVycl8xKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXRyeWluZywgZGVkdXBlIGlzIGFsd2F5cyBlbmFibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGFjdGl2ZSwgc3RvcC4gSXQgd2lsbCBhdXRvIHJldmFsaWRhdGUgd2hlbiByZWZvY3VzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciByZWNvbm5lY3RpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkVycm9yUmV0cnkoZXJyXzEsIGtleSwgY29uZmlnLCByZXZhbGlkYXRlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudDogKG9wdHMucmV0cnlDb3VudCB8fCAwKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVkdXBlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIC8vIE1hcmsgbG9hZGluZyBhcyBzdG9wcGVkLlxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBob29rJ3Mgc3RhdGUuXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBIZXJlIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIHJlcXVlc3QsIG5lZWQgdG8gdGVsbCBhbGwgb3RoZXIgaG9va3MgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZWlyIHN0YXRlcy5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSAmJiBzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2FkY2FzdFN0YXRlKGNhY2hlLCBrZXksIG5ld1N0YXRlLmRhdGEsIG5ld1N0YXRlLmVycm9yLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRydWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsgfSwgXG4gICAgLy8gYHNldFN0YXRlYCBpcyBpbW11dGFibGUsIGFuZCBgZXZlbnRzQ2FsbGJhY2tgLCBgZm5BcmdzYCwgYGtleUluZm9gLFxuICAgIC8vIGFuZCBga2V5VmFsaWRhdGluZ2AgYXJlIGRlcGVuZGluZyBvbiBga2V5YCwgc28gd2UgY2FuIGV4Y2x1ZGUgdGhlbSBmcm9tXG4gICAgLy8gdGhlIGRlcHMgYXJyYXkuXG4gICAgLy9cbiAgICAvLyBGSVhNRTpcbiAgICAvLyBgZm5gIGFuZCBgY29uZmlnYCBtaWdodCBiZSBjaGFuZ2VkIGR1cmluZyB0aGUgbGlmZWN5Y2xlLFxuICAgIC8vIGJ1dCB0aGV5IG1pZ2h0IGJlIGNoYW5nZWQgZXZlcnkgcmVuZGVyIGxpa2UgdGhpcy5cbiAgICAvLyBgdXNlU1dSKCdrZXknLCAoKSA9PiBmZXRjaCgnL2FwaS8nKSwgeyBzdXNwZW5zZTogdHJ1ZSB9KWBcbiAgICAvLyBTbyB3ZSBvbWl0IHRoZSB2YWx1ZXMgZnJvbSB0aGUgZGVwcyBhcnJheVxuICAgIC8vIGV2ZW4gdGhvdWdoIGl0IG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBba2V5XSk7XG4gICAgLy8gU2ltaWxhciB0byB0aGUgZ2xvYmFsIG11dGF0ZSwgYnV0IGJvdW5kIHRvIHRoZSBjdXJyZW50IGNhY2hlIGFuZCBrZXkuXG4gICAgLy8gYGNhY2hlYCBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgdmFyIGJvdW5kTXV0YXRlID0gdXNlQ2FsbGJhY2soXG4gICAgLy8gQnkgdXNpbmcgYGJpbmRgIHdlIGRvbid0IG5lZWQgdG8gbW9kaWZ5IHRoZSBzaXplIG9mIHRoZSByZXN0IGFyZ3VtZW50cy5cbiAgICAvLyBEdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8zNzE4MSwgd2UgaGF2ZSB0b1xuICAgIC8vIGNhc3QgaXQgdG8gYW55IGZvciBub3cuXG4gICAgaW50ZXJuYWxNdXRhdGUuYmluZChVTkRFRklORUQsIGNhY2hlLCBmdW5jdGlvbiAoKSB7IHJldHVybiBrZXlSZWYuY3VycmVudDsgfSksIFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgLy8gQWx3YXlzIHVwZGF0ZSBmZXRjaGVyIGFuZCBjb25maWcgcmVmcy5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZmV0Y2hlclJlZi5jdXJyZW50ID0gZmV0Y2hlcjtcbiAgICAgICAgY29uZmlnUmVmLmN1cnJlbnQgPSBjb25maWc7XG4gICAgfSk7XG4gICAgLy8gQWZ0ZXIgbW91bnRlZCBvciBrZXkgY2hhbmdlZC5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFrZXkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBrZXlDaGFuZ2VkID0ga2V5ICE9PSBrZXlSZWYuY3VycmVudDtcbiAgICAgICAgdmFyIHNvZnRSZXZhbGlkYXRlID0gcmV2YWxpZGF0ZS5iaW5kKFVOREVGSU5FRCwgV0lUSF9ERURVUEUpO1xuICAgICAgICAvLyBFeHBvc2Ugc3RhdGUgdXBkYXRlciB0byBnbG9iYWwgZXZlbnQgbGlzdGVuZXJzLiBTbyB3ZSBjYW4gdXBkYXRlIGhvb2snc1xuICAgICAgICAvLyBpbnRlcm5hbCBzdGF0ZSBmcm9tIHRoZSBvdXRzaWRlLlxuICAgICAgICB2YXIgb25TdGF0ZVVwZGF0ZSA9IGZ1bmN0aW9uICh1cGRhdGVkRGF0YSwgdXBkYXRlZEVycm9yLCB1cGRhdGVkSXNWYWxpZGF0aW5nKSB7XG4gICAgICAgICAgICBzZXRTdGF0ZShtZXJnZU9iamVjdHMoe1xuICAgICAgICAgICAgICAgIGVycm9yOiB1cGRhdGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB1cGRhdGVkSXNWYWxpZGF0aW5nXG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8vIFNpbmNlIGBzZXRTdGF0ZWAgb25seSBzaGFsbG93bHkgY29tcGFyZXMgc3RhdGVzLCB3ZSBkbyBhIGRlZXBcbiAgICAgICAgICAgIC8vIGNvbXBhcmlzb24gaGVyZS5cbiAgICAgICAgICAgIGNvbXBhcmUoc3RhdGVSZWYuY3VycmVudC5kYXRhLCB1cGRhdGVkRGF0YSlcbiAgICAgICAgICAgICAgICA/IFVOREVGSU5FRFxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB1cGRhdGVkRGF0YVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gRXhwb3NlIHJldmFsaWRhdG9ycyB0byBnbG9iYWwgZXZlbnQgbGlzdGVuZXJzLiBTbyB3ZSBjYW4gdHJpZ2dlclxuICAgICAgICAvLyByZXZhbGlkYXRpb24gZnJvbSB0aGUgb3V0c2lkZS5cbiAgICAgICAgdmFyIG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSAwO1xuICAgICAgICB2YXIgb25SZXZhbGlkYXRlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09IEZPQ1VTX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPbkZvY3VzICYmXG4gICAgICAgICAgICAgICAgICAgIG5vdyA+IG5leHRGb2N1c1JldmFsaWRhdGVkQXQgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ID0gbm93ICsgZ2V0Q29uZmlnKCkuZm9jdXNUaHJvdHRsZUludGVydmFsO1xuICAgICAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gUkVDT05ORUNUX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPblJlY29ubmVjdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBNVVRBVEVfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgdW5zdWJVcGRhdGUgPSBzdWJzY3JpYmVDYWxsYmFjayhrZXksIFNUQVRFX1VQREFURVJTLCBvblN0YXRlVXBkYXRlKTtcbiAgICAgICAgdmFyIHVuc3ViRXZlbnRzID0gc3Vic2NyaWJlQ2FsbGJhY2soa2V5LCBFVkVOVF9SRVZBTElEQVRPUlMsIG9uUmV2YWxpZGF0ZSk7XG4gICAgICAgIC8vIE1hcmsgdGhlIGNvbXBvbmVudCBhcyBtb3VudGVkIGFuZCB1cGRhdGUgY29ycmVzcG9uZGluZyByZWZzLlxuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICBrZXlSZWYuY3VycmVudCA9IGtleTtcbiAgICAgICAgaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIC8vIFdoZW4gYGtleWAgdXBkYXRlcywgcmVzZXQgdGhlIHN0YXRlIHRvIHRoZSBpbml0aWFsIHZhbHVlXG4gICAgICAgIC8vIGFuZCB0cmlnZ2VyIGEgcmVyZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgICAgICBpZiAoa2V5Q2hhbmdlZCkge1xuICAgICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIGlzVmFsaWRhdGluZzogaXNWYWxpZGF0aW5nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmlnZ2VyIGEgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoc2hvdWxkUmV2YWxpZGF0ZSgpKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRGVsYXkgdGhlIHJldmFsaWRhdGUgaWYgd2UgaGF2ZSBkYXRhIHRvIHJldHVybiBzbyB3ZSB3b24ndCBibG9ja1xuICAgICAgICAgICAgICAgIC8vIHJlbmRlcmluZy5cbiAgICAgICAgICAgICAgICByQUYoc29mdFJldmFsaWRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBNYXJrIGl0IGFzIHVubW91bnRlZC5cbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHVuc3ViVXBkYXRlKCk7XG4gICAgICAgICAgICB1bnN1YkV2ZW50cygpO1xuICAgICAgICB9O1xuICAgIH0sIFtrZXksIHJldmFsaWRhdGVdKTtcbiAgICAvLyBQb2xsaW5nXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0aW1lcjtcbiAgICAgICAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgcGFzc2VkIGludGVydmFsXG4gICAgICAgICAgICAvLyAuLi5vciBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHVwZGF0ZWQgZGF0YSB0byBnZXQgdGhlIGludGVydmFsXG4gICAgICAgICAgICB2YXIgaW50ZXJ2YWwgPSBpc0Z1bmN0aW9uKHJlZnJlc2hJbnRlcnZhbClcbiAgICAgICAgICAgICAgICA/IHJlZnJlc2hJbnRlcnZhbChkYXRhKVxuICAgICAgICAgICAgICAgIDogcmVmcmVzaEludGVydmFsO1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzdGFydCBuZXh0IGludGVydmFsIGlmIGByZWZyZXNoSW50ZXJ2YWxgIGlzIG5vdCAwLCBhbmQ6XG4gICAgICAgICAgICAvLyAtIGBmb3JjZWAgaXMgdHJ1ZSwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHBvbGxpbmdcbiAgICAgICAgICAgIC8vIC0gb3IgYHRpbWVyYCBpcyBub3QgMCwgd2hpY2ggbWVhbnMgdGhlIGVmZmVjdCB3YXNuJ3QgY2FuY2VsZWRcbiAgICAgICAgICAgIGlmIChpbnRlcnZhbCAmJiB0aW1lciAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZXhlY3V0ZSwgaW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIE9LIHRvIGV4ZWN1dGU6XG4gICAgICAgICAgICAvLyBPbmx5IHJldmFsaWRhdGUgd2hlbiB0aGUgcGFnZSBpcyB2aXNpYmxlLCBvbmxpbmUgYW5kIG5vdCBlcnJvcmVkLlxuICAgICAgICAgICAgaWYgKCFzdGF0ZVJlZi5jdXJyZW50LmVycm9yICYmXG4gICAgICAgICAgICAgICAgKHJlZnJlc2hXaGVuSGlkZGVuIHx8IGdldENvbmZpZygpLmlzVmlzaWJsZSgpKSAmJlxuICAgICAgICAgICAgICAgIChyZWZyZXNoV2hlbk9mZmxpbmUgfHwgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKSkpIHtcbiAgICAgICAgICAgICAgICByZXZhbGlkYXRlKFdJVEhfREVEVVBFKS50aGVuKG5leHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gU2NoZWR1bGUgbmV4dCBpbnRlcnZhbCB0byBjaGVjayBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICB0aW1lciA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtyZWZyZXNoSW50ZXJ2YWwsIHJlZnJlc2hXaGVuSGlkZGVuLCByZWZyZXNoV2hlbk9mZmxpbmUsIHJldmFsaWRhdGVdKTtcbiAgICAvLyBEaXNwbGF5IGRlYnVnIGluZm8gaW4gUmVhY3QgRGV2VG9vbHMuXG4gICAgdXNlRGVidWdWYWx1ZShkYXRhKTtcbiAgICAvLyBJbiBTdXNwZW5zZSBtb2RlLCB3ZSBjYW4ndCByZXR1cm4gdGhlIGVtcHR5IGBkYXRhYCBzdGF0ZS5cbiAgICAvLyBJZiB0aGVyZSBpcyBgZXJyb3JgLCB0aGUgYGVycm9yYCBuZWVkcyB0byBiZSB0aHJvd24gdG8gdGhlIGVycm9yIGJvdW5kYXJ5LlxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGBlcnJvcmAsIHRoZSBgcmV2YWxpZGF0aW9uYCBwcm9taXNlIG5lZWRzIHRvIGJlIHRocm93biB0b1xuICAgIC8vIHRoZSBzdXNwZW5zZSBib3VuZGFyeS5cbiAgICBpZiAoc3VzcGVuc2UgJiYgaXNVbmRlZmluZWQoZGF0YSkgJiYga2V5KSB7XG4gICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgZmV0Y2hlciBhbmQgY29uZmlnIHJlZnMgZXZlbiB3aXRoIHRoZSBTdXNwZW5zZSBtb2RlLlxuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhyb3cgaXNVbmRlZmluZWQoZXJyb3IpID8gcmV2YWxpZGF0ZShXSVRIX0RFRFVQRSkgOiBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbXV0YXRlOiBib3VuZE11dGF0ZSxcbiAgICAgICAgZ2V0IGRhdGEoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5kYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBpc1ZhbGlkYXRpbmcoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc1ZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRhdGluZztcbiAgICAgICAgfVxuICAgIH07XG59O1xudmFyIFNXUkNvbmZpZyA9IE9CSkVDVC5kZWZpbmVQcm9wZXJ0eShTV1JDb25maWckMSwgJ2RlZmF1bHQnLCB7XG4gICAgdmFsdWU6IGRlZmF1bHRDb25maWdcbn0pO1xudmFyIHVuc3RhYmxlX3NlcmlhbGl6ZSA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHNlcmlhbGl6ZShrZXkpWzBdOyB9O1xudmFyIHVzZVNXUiA9IHdpdGhBcmdzKHVzZVNXUkhhbmRsZXIpO1xuXG4vLyB1c2VTV1JcblxuZXhwb3J0IHsgU1dSQ29uZmlnLCB1c2VTV1IgYXMgZGVmYXVsdCwgbXV0YXRlLCB1bnN0YWJsZV9zZXJpYWxpemUsIHVzZVNXUkNvbmZpZyB9O1xuIiwiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU1dSQ29uZmlnIH0gZnJvbSBcInN3clwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlU1dSSG9va3NDb25maWcoKSB7XG4gICAgdmFyIHN3ckNvbmZpZyA9IHVzZVNXUkNvbmZpZygpO1xuICAgIHZhciB2YWx1ZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkgeyByZXR1cm4gKHsgbXV0YXRlOiBzd3JDb25maWcubXV0YXRlLCBjYWNoZTogc3dyQ29uZmlnLmNhY2hlIH0pOyB9LCBbc3dyQ29uZmlnLm11dGF0ZSwgc3dyQ29uZmlnLmNhY2hlXSk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlU1dSSG9va3NDb25maWcuanMubWFwIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRvZ2dsZShpbml0aWFsVmFsdWUpIHtcbiAgICBpZiAoaW5pdGlhbFZhbHVlID09PSB2b2lkIDApIHsgaW5pdGlhbFZhbHVlID0gZmFsc2U7IH1cbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoaW5pdGlhbFZhbHVlKSwgMiksIHZhbHVlID0gX2FbMF0sIHNldFZhbHVlID0gX2FbMV07XG4gICAgdmFyIHRvZ2dsZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0VmFsdWUoZnVuY3Rpb24gKHByZXZWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhcHJldlZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIFt2YWx1ZSwgdG9nZ2xlXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVRvZ2dsZS5qcy5tYXAiLCIvKiFcbiAqIGhvdGtleXMtanMgdjMuOC43XG4gKiBBIHNpbXBsZSBtaWNyby1saWJyYXJ5IGZvciBkZWZpbmluZyBhbmQgZGlzcGF0Y2hpbmcga2V5Ym9hcmQgc2hvcnRjdXRzLiBJdCBoYXMgbm8gZGVwZW5kZW5jaWVzLlxuICogXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjEga2Vubnkgd29uZyA8d293b2hvb0BxcS5jb20+XG4gKiBodHRwOi8vamF5d2NqbG92ZS5naXRodWIuaW8vaG90a2V5c1xuICogXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKi9cblxudmFyIGlzZmYgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyA/IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXJlZm94JykgPiAwIDogZmFsc2U7IC8vIOe7keWumuS6i+S7tlxuXG5mdW5jdGlvbiBhZGRFdmVudChvYmplY3QsIGV2ZW50LCBtZXRob2QpIHtcbiAgaWYgKG9iamVjdC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgb2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG1ldGhvZCwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKG9iamVjdC5hdHRhY2hFdmVudCkge1xuICAgIG9iamVjdC5hdHRhY2hFdmVudChcIm9uXCIuY29uY2F0KGV2ZW50KSwgZnVuY3Rpb24gKCkge1xuICAgICAgbWV0aG9kKHdpbmRvdy5ldmVudCk7XG4gICAgfSk7XG4gIH1cbn0gLy8g5L+u6aWw6ZSu6L2s5o2i5oiQ5a+55bqU55qE6ZSu56CBXG5cblxuZnVuY3Rpb24gZ2V0TW9kcyhtb2RpZmllciwga2V5KSB7XG4gIHZhciBtb2RzID0ga2V5LnNsaWNlKDAsIGtleS5sZW5ndGggLSAxKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZHMubGVuZ3RoOyBpKyspIHtcbiAgICBtb2RzW2ldID0gbW9kaWZpZXJbbW9kc1tpXS50b0xvd2VyQ2FzZSgpXTtcbiAgfVxuXG4gIHJldHVybiBtb2RzO1xufSAvLyDlpITnkIbkvKDnmoRrZXnlrZfnrKbkuLLovazmjaLmiJDmlbDnu4RcblxuXG5mdW5jdGlvbiBnZXRLZXlzKGtleSkge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIGtleSA9ICcnO1xuICBrZXkgPSBrZXkucmVwbGFjZSgvXFxzL2csICcnKTsgLy8g5Yy56YWN5Lu75L2V56m655m95a2X56ymLOWMheaLrOepuuagvOOAgeWItuihqOespuOAgeaNoumhteespuetieetiVxuXG4gIHZhciBrZXlzID0ga2V5LnNwbGl0KCcsJyk7IC8vIOWQjOaXtuiuvue9ruWkmuS4quW/q+aNt+mUru+8jOS7pScsJ+WIhuWJslxuXG4gIHZhciBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpOyAvLyDlv6vmjbfplK7lj6/og73ljIXlkKsnLCfvvIzpnIDnibnmrorlpITnkIZcblxuICBmb3IgKDsgaW5kZXggPj0gMDspIHtcbiAgICBrZXlzW2luZGV4IC0gMV0gKz0gJywnO1xuICAgIGtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59IC8vIOavlOi+g+S/rumlsOmUrueahOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGNvbXBhcmVBcnJheShhMSwgYTIpIHtcbiAgdmFyIGFycjEgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTEgOiBhMjtcbiAgdmFyIGFycjIgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTIgOiBhMTtcbiAgdmFyIGlzSW5kZXggPSB0cnVlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnIyLmluZGV4T2YoYXJyMVtpXSkgPT09IC0xKSBpc0luZGV4ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNJbmRleDtcbn1cblxudmFyIF9rZXlNYXAgPSB7XG4gIGJhY2tzcGFjZTogOCxcbiAgdGFiOiA5LFxuICBjbGVhcjogMTIsXG4gIGVudGVyOiAxMyxcbiAgcmV0dXJuOiAxMyxcbiAgZXNjOiAyNyxcbiAgZXNjYXBlOiAyNyxcbiAgc3BhY2U6IDMyLFxuICBsZWZ0OiAzNyxcbiAgdXA6IDM4LFxuICByaWdodDogMzksXG4gIGRvd246IDQwLFxuICBkZWw6IDQ2LFxuICBkZWxldGU6IDQ2LFxuICBpbnM6IDQ1LFxuICBpbnNlcnQ6IDQ1LFxuICBob21lOiAzNixcbiAgZW5kOiAzNSxcbiAgcGFnZXVwOiAzMyxcbiAgcGFnZWRvd246IDM0LFxuICBjYXBzbG9jazogMjAsXG4gIG51bV8wOiA5NixcbiAgbnVtXzE6IDk3LFxuICBudW1fMjogOTgsXG4gIG51bV8zOiA5OSxcbiAgbnVtXzQ6IDEwMCxcbiAgbnVtXzU6IDEwMSxcbiAgbnVtXzY6IDEwMixcbiAgbnVtXzc6IDEwMyxcbiAgbnVtXzg6IDEwNCxcbiAgbnVtXzk6IDEwNSxcbiAgbnVtX211bHRpcGx5OiAxMDYsXG4gIG51bV9hZGQ6IDEwNyxcbiAgbnVtX2VudGVyOiAxMDgsXG4gIG51bV9zdWJ0cmFjdDogMTA5LFxuICBudW1fZGVjaW1hbDogMTEwLFxuICBudW1fZGl2aWRlOiAxMTEsXG4gICfih6onOiAyMCxcbiAgJywnOiAxODgsXG4gICcuJzogMTkwLFxuICAnLyc6IDE5MSxcbiAgJ2AnOiAxOTIsXG4gICctJzogaXNmZiA/IDE3MyA6IDE4OSxcbiAgJz0nOiBpc2ZmID8gNjEgOiAxODcsXG4gICc7JzogaXNmZiA/IDU5IDogMTg2LFxuICAnXFwnJzogMjIyLFxuICAnWyc6IDIxOSxcbiAgJ10nOiAyMjEsXG4gICdcXFxcJzogMjIwXG59OyAvLyBNb2RpZmllciBLZXlzXG5cbnZhciBfbW9kaWZpZXIgPSB7XG4gIC8vIHNoaWZ0S2V5XG4gICfih6cnOiAxNixcbiAgc2hpZnQ6IDE2LFxuICAvLyBhbHRLZXlcbiAgJ+KMpSc6IDE4LFxuICBhbHQ6IDE4LFxuICBvcHRpb246IDE4LFxuICAvLyBjdHJsS2V5XG4gICfijIMnOiAxNyxcbiAgY3RybDogMTcsXG4gIGNvbnRyb2w6IDE3LFxuICAvLyBtZXRhS2V5XG4gICfijJgnOiA5MSxcbiAgY21kOiA5MSxcbiAgY29tbWFuZDogOTFcbn07XG52YXIgbW9kaWZpZXJNYXAgPSB7XG4gIDE2OiAnc2hpZnRLZXknLFxuICAxODogJ2FsdEtleScsXG4gIDE3OiAnY3RybEtleScsXG4gIDkxOiAnbWV0YUtleScsXG4gIHNoaWZ0S2V5OiAxNixcbiAgY3RybEtleTogMTcsXG4gIGFsdEtleTogMTgsXG4gIG1ldGFLZXk6IDkxXG59O1xudmFyIF9tb2RzID0ge1xuICAxNjogZmFsc2UsXG4gIDE4OiBmYWxzZSxcbiAgMTc6IGZhbHNlLFxuICA5MTogZmFsc2Vcbn07XG52YXIgX2hhbmRsZXJzID0ge307IC8vIEYxfkYxMiBzcGVjaWFsIGtleVxuXG5mb3IgKHZhciBrID0gMTsgayA8IDIwOyBrKyspIHtcbiAgX2tleU1hcFtcImZcIi5jb25jYXQoayldID0gMTExICsgaztcbn1cblxudmFyIF9kb3duS2V5cyA9IFtdOyAvLyDorrDlvZXmkYHkuIvnmoTnu5HlrprplK5cblxudmFyIF9zY29wZSA9ICdhbGwnOyAvLyDpu5jorqTng63plK7ojIPlm7RcblxudmFyIGVsZW1lbnRIYXNCaW5kRXZlbnQgPSBbXTsgLy8g5bey57uR5a6a5LqL5Lu255qE6IqC54K56K6w5b2VXG4vLyDov5Tlm57plK7noIFcblxudmFyIGNvZGUgPSBmdW5jdGlvbiBjb2RlKHgpIHtcbiAgcmV0dXJuIF9rZXlNYXBbeC50b0xvd2VyQ2FzZSgpXSB8fCBfbW9kaWZpZXJbeC50b0xvd2VyQ2FzZSgpXSB8fCB4LnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKTtcbn07IC8vIOiuvue9ruiOt+WPluW9k+WJjeiMg+WbtO+8iOm7mOiupOS4uifmiYDmnIkn77yJXG5cblxuZnVuY3Rpb24gc2V0U2NvcGUoc2NvcGUpIHtcbiAgX3Njb3BlID0gc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluW9k+WJjeiMg+WbtFxuXG5cbmZ1bmN0aW9uIGdldFNjb3BlKCkge1xuICByZXR1cm4gX3Njb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5bmkYHkuIvnu5HlrprplK7nmoTplK7lgLxcblxuXG5mdW5jdGlvbiBnZXRQcmVzc2VkS2V5Q29kZXMoKSB7XG4gIHJldHVybiBfZG93bktleXMuc2xpY2UoMCk7XG59IC8vIOihqOWNleaOp+S7tuaOp+S7tuWIpOaWrSDov5Tlm54gQm9vbGVhblxuLy8gaG90a2V5IGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4gZmlsdGVyIHJldHVybiB0cnVlXG5cblxuZnVuY3Rpb24gZmlsdGVyKGV2ZW50KSB7XG4gIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgdmFyIHRhZ05hbWUgPSB0YXJnZXQudGFnTmFtZTtcbiAgdmFyIGZsYWcgPSB0cnVlOyAvLyBpZ25vcmU6IGlzQ29udGVudEVkaXRhYmxlID09PSAndHJ1ZScsIDxpbnB1dD4gYW5kIDx0ZXh0YXJlYT4gd2hlbiByZWFkT25seSBzdGF0ZSBpcyBmYWxzZSwgPHNlbGVjdD5cblxuICBpZiAodGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlIHx8ICh0YWdOYW1lID09PSAnSU5QVVQnIHx8IHRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgdGFnTmFtZSA9PT0gJ1NFTEVDVCcpICYmICF0YXJnZXQucmVhZE9ubHkpIHtcbiAgICBmbGFnID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmxhZztcbn0gLy8g5Yik5pat5pGB5LiL55qE6ZSu5piv5ZCm5Li65p+Q5Liq6ZSu77yM6L+U5ZuedHJ1ZeaIluiAhWZhbHNlXG5cblxuZnVuY3Rpb24gaXNQcmVzc2VkKGtleUNvZGUpIHtcbiAgaWYgKHR5cGVvZiBrZXlDb2RlID09PSAnc3RyaW5nJykge1xuICAgIGtleUNvZGUgPSBjb2RlKGtleUNvZGUpOyAvLyDovazmjaLmiJDplK7noIFcbiAgfVxuXG4gIHJldHVybiBfZG93bktleXMuaW5kZXhPZihrZXlDb2RlKSAhPT0gLTE7XG59IC8vIOW+queOr+WIoOmZpGhhbmRsZXJz5Lit55qE5omA5pyJIHNjb3BlKOiMg+WbtClcblxuXG5mdW5jdGlvbiBkZWxldGVTY29wZShzY29wZSwgbmV3U2NvcGUpIHtcbiAgdmFyIGhhbmRsZXJzO1xuICB2YXIgaTsgLy8g5rKh5pyJ5oyH5a6ac2NvcGXvvIzojrflj5ZzY29wZVxuXG4gIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gX2hhbmRsZXJzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfaGFuZGxlcnMsIGtleSkpIHtcbiAgICAgIGhhbmRsZXJzID0gX2hhbmRsZXJzW2tleV07XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7KSB7XG4gICAgICAgIGlmIChoYW5kbGVyc1tpXS5zY29wZSA9PT0gc2NvcGUpIGhhbmRsZXJzLnNwbGljZShpLCAxKTtlbHNlIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8g5aaC5p6cc2NvcGXooqvliKDpmaTvvIzlsIZzY29wZemHjee9ruS4umFsbFxuXG5cbiAgaWYgKGdldFNjb3BlKCkgPT09IHNjb3BlKSBzZXRTY29wZShuZXdTY29wZSB8fCAnYWxsJyk7XG59IC8vIOa4hemZpOS/rumlsOmUrlxuXG5cbmZ1bmN0aW9uIGNsZWFyTW9kaWZpZXIoZXZlbnQpIHtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7XG5cbiAgdmFyIGkgPSBfZG93bktleXMuaW5kZXhPZihrZXkpOyAvLyDku47liJfooajkuK3muIXpmaTmjInljovov4fnmoTplK5cblxuXG4gIGlmIChpID49IDApIHtcbiAgICBfZG93bktleXMuc3BsaWNlKGksIDEpO1xuICB9IC8vIOeJueauiuWkhOeQhiBjbW1hbmQg6ZSu77yM5ZyoIGNtbWFuZCDnu4TlkIjlv6vmjbfplK4ga2V5dXAg5Y+q5omn6KGM5LiA5qyh55qE6Zeu6aKYXG5cblxuICBpZiAoZXZlbnQua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnbWV0YScpIHtcbiAgICBfZG93bktleXMuc3BsaWNlKDAsIF9kb3duS2V5cy5sZW5ndGgpO1xuICB9IC8vIOS/rumlsOmUriBzaGlmdEtleSBhbHRLZXkgY3RybEtleSAoY29tbWFuZHx8bWV0YUtleSkg5riF6ZmkXG5cblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSBmYWxzZTsgLy8g5bCG5L+u6aWw6ZSu6YeN572u5Li6ZmFsc2VcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5iaW5kKGtleXNJbmZvKSB7XG4gIC8vIHVuYmluZCgpLCB1bmJpbmQgYWxsIGtleXNcbiAgaWYgKCFrZXlzSW5mbykge1xuICAgIE9iamVjdC5rZXlzKF9oYW5kbGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gZGVsZXRlIF9oYW5kbGVyc1trZXldO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5c0luZm8pKSB7XG4gICAgLy8gc3VwcG9ydCBsaWtlIDogdW5iaW5kKFt7a2V5OiAnY3RybCthJywgc2NvcGU6ICdzMSd9LCB7a2V5OiAnY3RybC1hJywgc2NvcGU6ICdzMicsIHNwbGl0S2V5OiAnLSd9XSlcbiAgICBrZXlzSW5mby5mb3JFYWNoKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICBpZiAoaW5mby5rZXkpIGVhY2hVbmJpbmQoaW5mbyk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleXNJbmZvID09PSAnb2JqZWN0Jykge1xuICAgIC8vIHN1cHBvcnQgbGlrZSB1bmJpbmQoe2tleTogJ2N0cmwrYSwgY3RybCtiJywgc2NvcGU6J2FiYyd9KVxuICAgIGlmIChrZXlzSW5mby5rZXkpIGVhY2hVbmJpbmQoa2V5c0luZm8pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ3N0cmluZycpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IG9sZCBtZXRob2RcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgdmFyIHNjb3BlID0gYXJnc1swXSxcbiAgICAgICAgbWV0aG9kID0gYXJnc1sxXTtcblxuICAgIGlmICh0eXBlb2Ygc2NvcGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1ldGhvZCA9IHNjb3BlO1xuICAgICAgc2NvcGUgPSAnJztcbiAgICB9XG5cbiAgICBlYWNoVW5iaW5kKHtcbiAgICAgIGtleToga2V5c0luZm8sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHNwbGl0S2V5OiAnKydcbiAgICB9KTtcbiAgfVxufSAvLyDop6PpmaTnu5Hlrprmn5DkuKrojIPlm7TnmoTlv6vmjbfplK5cblxuXG52YXIgZWFjaFVuYmluZCA9IGZ1bmN0aW9uIGVhY2hVbmJpbmQoX3JlZikge1xuICB2YXIga2V5ID0gX3JlZi5rZXksXG4gICAgICBzY29wZSA9IF9yZWYuc2NvcGUsXG4gICAgICBtZXRob2QgPSBfcmVmLm1ldGhvZCxcbiAgICAgIF9yZWYkc3BsaXRLZXkgPSBfcmVmLnNwbGl0S2V5LFxuICAgICAgc3BsaXRLZXkgPSBfcmVmJHNwbGl0S2V5ID09PSB2b2lkIDAgPyAnKycgOiBfcmVmJHNwbGl0S2V5O1xuICB2YXIgbXVsdGlwbGVLZXlzID0gZ2V0S2V5cyhrZXkpO1xuICBtdWx0aXBsZUtleXMuZm9yRWFjaChmdW5jdGlvbiAob3JpZ2luS2V5KSB7XG4gICAgdmFyIHVuYmluZEtleXMgPSBvcmlnaW5LZXkuc3BsaXQoc3BsaXRLZXkpO1xuICAgIHZhciBsZW4gPSB1bmJpbmRLZXlzLmxlbmd0aDtcbiAgICB2YXIgbGFzdEtleSA9IHVuYmluZEtleXNbbGVuIC0gMV07XG4gICAgdmFyIGtleUNvZGUgPSBsYXN0S2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGxhc3RLZXkpO1xuICAgIGlmICghX2hhbmRsZXJzW2tleUNvZGVdKSByZXR1cm47IC8vIOWIpOaWreaYr+WQpuS8oOWFpeiMg+WbtO+8jOayoeacieWwseiOt+WPluiMg+WbtFxuXG4gICAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIHZhciBtb2RzID0gbGVuID4gMSA/IGdldE1vZHMoX21vZGlmaWVyLCB1bmJpbmRLZXlzKSA6IFtdO1xuICAgIF9oYW5kbGVyc1trZXlDb2RlXSA9IF9oYW5kbGVyc1trZXlDb2RlXS5tYXAoZnVuY3Rpb24gKHJlY29yZCkge1xuICAgICAgLy8g6YCa6L+H5Ye95pWw5Yik5pat77yM5piv5ZCm6Kej6Zmk57uR5a6a77yM5Ye95pWw55u4562J55u05o6l6L+U5ZueXG4gICAgICB2YXIgaXNNYXRjaGluZ01ldGhvZCA9IG1ldGhvZCA/IHJlY29yZC5tZXRob2QgPT09IG1ldGhvZCA6IHRydWU7XG5cbiAgICAgIGlmIChpc01hdGNoaW5nTWV0aG9kICYmIHJlY29yZC5zY29wZSA9PT0gc2NvcGUgJiYgY29tcGFyZUFycmF5KHJlY29yZC5tb2RzLCBtb2RzKSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfSk7XG4gIH0pO1xufTsgLy8g5a+555uR5ZCs5a+55bqU5b+r5o236ZSu55qE5Zue6LCD5Ye95pWw6L+b6KGM5aSE55CGXG5cblxuZnVuY3Rpb24gZXZlbnRIYW5kbGVyKGV2ZW50LCBoYW5kbGVyLCBzY29wZSkge1xuICB2YXIgbW9kaWZpZXJzTWF0Y2g7IC8vIOeci+Wug+aYr+WQpuWcqOW9k+WJjeiMg+WbtFxuXG4gIGlmIChoYW5kbGVyLnNjb3BlID09PSBzY29wZSB8fCBoYW5kbGVyLnNjb3BlID09PSAnYWxsJykge1xuICAgIC8vIOajgOafpeaYr+WQpuWMuemFjeS/rumlsOespu+8iOWmguaenOaciei/lOWbnnRydWXvvIlcbiAgICBtb2RpZmllcnNNYXRjaCA9IGhhbmRsZXIubW9kcy5sZW5ndGggPiAwO1xuXG4gICAgZm9yICh2YXIgeSBpbiBfbW9kcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgeSkpIHtcbiAgICAgICAgaWYgKCFfbW9kc1t5XSAmJiBoYW5kbGVyLm1vZHMuaW5kZXhPZigreSkgPiAtMSB8fCBfbW9kc1t5XSAmJiBoYW5kbGVyLm1vZHMuaW5kZXhPZigreSkgPT09IC0xKSB7XG4gICAgICAgICAgbW9kaWZpZXJzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8g6LCD55So5aSE55CG56iL5bqP77yM5aaC5p6c5piv5L+u6aWw6ZSu5LiN5YGa5aSE55CGXG5cblxuICAgIGlmIChoYW5kbGVyLm1vZHMubGVuZ3RoID09PSAwICYmICFfbW9kc1sxNl0gJiYgIV9tb2RzWzE4XSAmJiAhX21vZHNbMTddICYmICFfbW9kc1s5MV0gfHwgbW9kaWZpZXJzTWF0Y2ggfHwgaGFuZGxlci5zaG9ydGN1dCA9PT0gJyonKSB7XG4gICAgICBpZiAoaGFuZGxlci5tZXRob2QoZXZlbnQsIGhhbmRsZXIpID09PSBmYWxzZSkge1xuICAgICAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZWxzZSBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKGV2ZW50LmNhbmNlbEJ1YmJsZSkgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8g5aSE55CGa2V5ZG93buS6i+S7tlxuXG5cbmZ1bmN0aW9uIGRpc3BhdGNoKGV2ZW50KSB7XG4gIHZhciBhc3RlcmlzayA9IF9oYW5kbGVyc1snKiddO1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTsgLy8g6KGo5Y2V5o6n5Lu26L+H5rukIOm7mOiupOihqOWNleaOp+S7tuS4jeinpuWPkeW/q+aNt+mUrlxuXG4gIGlmICghaG90a2V5cy5maWx0ZXIuY2FsbCh0aGlzLCBldmVudCkpIHJldHVybjsgLy8gR2Vja28oRmlyZWZveCnnmoRjb21tYW5k6ZSu5YC8MjI077yM5ZyoV2Via2l0KENocm9tZSnkuK3kv53mjIHkuIDoh7RcbiAgLy8gV2Via2l05bem5Y+zIGNvbW1hbmQg6ZSu5YC85LiN5LiA5qC3XG5cbiAgaWYgKGtleSA9PT0gOTMgfHwga2V5ID09PSAyMjQpIGtleSA9IDkxO1xuICAvKipcbiAgICogQ29sbGVjdCBib3VuZCBrZXlzXG4gICAqIElmIGFuIElucHV0IE1ldGhvZCBFZGl0b3IgaXMgcHJvY2Vzc2luZyBrZXkgaW5wdXQgYW5kIHRoZSBldmVudCBpcyBrZXlkb3duLCByZXR1cm4gMjI5LlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNTA0MzkzNC9pcy1pdC1vay10by1pZ25vcmUta2V5ZG93bi1ldmVudHMtd2l0aC1rZXljb2RlLTIyOVxuICAgKiBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctZG9tLzIwMTBKdWxTZXAvYXR0LTAxODIva2V5Q29kZS1zcGVjLmh0bWxcbiAgICovXG5cbiAgaWYgKF9kb3duS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmIGtleSAhPT0gMjI5KSBfZG93bktleXMucHVzaChrZXkpO1xuICAvKipcbiAgICogSmVzdCB0ZXN0IGNhc2VzIGFyZSByZXF1aXJlZC5cbiAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgKi9cblxuICBbJ2N0cmxLZXknLCAnYWx0S2V5JywgJ3NoaWZ0S2V5JywgJ21ldGFLZXknXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXlOYW1lKSB7XG4gICAgdmFyIGtleU51bSA9IG1vZGlmaWVyTWFwW2tleU5hbWVdO1xuXG4gICAgaWYgKGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaChrZXlOdW0pO1xuICAgIH0gZWxzZSBpZiAoIWV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkgPiAtMSkge1xuICAgICAgX2Rvd25LZXlzLnNwbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pLCAxKTtcbiAgICB9IGVsc2UgaWYgKGtleU5hbWUgPT09ICdtZXRhS2V5JyAmJiBldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMubGVuZ3RoID09PSAzKSB7XG4gICAgICAvKipcbiAgICAgICAqIEZpeCBpZiBDb21tYW5kIGlzIHByZXNzZWQ6XG4gICAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgKi9cbiAgICAgIGlmICghKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5KSkge1xuICAgICAgICBfZG93bktleXMgPSBfZG93bktleXMuc2xpY2UoX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSB0cnVlOyAvLyDlsIbnibnmrorlrZfnrKbnmoRrZXnms6jlhozliLAgaG90a2V5cyDkuIpcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYXN0ZXJpc2spIHJldHVybjtcbiAgfSAvLyDlsIYgbW9kaWZpZXJNYXAg6YeM6Z2i55qE5L+u6aWw6ZSu57uR5a6a5YiwIGV2ZW50IOS4rVxuXG5cbiAgZm9yICh2YXIgZSBpbiBfbW9kcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX21vZHMsIGUpKSB7XG4gICAgICBfbW9kc1tlXSA9IGV2ZW50W21vZGlmaWVyTWFwW2VdXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXl3Y2psb3ZlL2hvdGtleXMvcHVsbC8xMjlcbiAgICogVGhpcyBzb2x2ZXMgdGhlIGlzc3VlIGluIEZpcmVmb3ggb24gV2luZG93cyB3aGVyZSBob3RrZXlzIGNvcnJlc3BvbmRpbmcgdG8gc3BlY2lhbCBjaGFyYWN0ZXJzIHdvdWxkIG5vdCB0cmlnZ2VyLlxuICAgKiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgY3RybCthbHQrbSBvbiBhIFN3ZWRpc2gga2V5Ym9hcmQgd2hpY2ggaXMgdXNlZCB0byB0eXBlIM68LlxuICAgKiBCcm93c2VyIHN1cHBvcnQ6IGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9a2V5Ym9hcmRldmVudC1nZXRtb2RpZmllcnN0YXRlXG4gICAqL1xuXG5cbiAgaWYgKGV2ZW50LmdldE1vZGlmaWVyU3RhdGUgJiYgIShldmVudC5hbHRLZXkgJiYgIWV2ZW50LmN0cmxLZXkpICYmIGV2ZW50LmdldE1vZGlmaWVyU3RhdGUoJ0FsdEdyYXBoJykpIHtcbiAgICBpZiAoX2Rvd25LZXlzLmluZGV4T2YoMTcpID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goMTcpO1xuICAgIH1cblxuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxOCkgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxOCk7XG4gICAgfVxuXG4gICAgX21vZHNbMTddID0gdHJ1ZTtcbiAgICBfbW9kc1sxOF0gPSB0cnVlO1xuICB9IC8vIOiOt+WPluiMg+WbtCDpu5jorqTkuLogYGFsbGBcblxuXG4gIHZhciBzY29wZSA9IGdldFNjb3BlKCk7IC8vIOWvueS7u+S9leW/q+aNt+mUrumDvemcgOimgeWBmueahOWkhOeQhlxuXG4gIGlmIChhc3Rlcmlzaykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXN0ZXJpc2subGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhc3Rlcmlza1tpXS5zY29wZSA9PT0gc2NvcGUgJiYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyAmJiBhc3Rlcmlza1tpXS5rZXlkb3duIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgYXN0ZXJpc2tbaV0ua2V5dXApKSB7XG4gICAgICAgIGV2ZW50SGFuZGxlcihldmVudCwgYXN0ZXJpc2tbaV0sIHNjb3BlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8ga2V5IOS4jeWcqCBfaGFuZGxlcnMg5Lit6L+U5ZueXG5cblxuICBpZiAoIShrZXkgaW4gX2hhbmRsZXJzKSkgcmV0dXJuO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBfaGFuZGxlcnNba2V5XS5sZW5ndGg7IF9pKyspIHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIF9oYW5kbGVyc1trZXldW19pXS5rZXlkb3duIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleXVwKSB7XG4gICAgICBpZiAoX2hhbmRsZXJzW2tleV1bX2ldLmtleSkge1xuICAgICAgICB2YXIgcmVjb3JkID0gX2hhbmRsZXJzW2tleV1bX2ldO1xuICAgICAgICB2YXIgc3BsaXRLZXkgPSByZWNvcmQuc3BsaXRLZXk7XG4gICAgICAgIHZhciBrZXlTaG9ydGN1dCA9IHJlY29yZC5rZXkuc3BsaXQoc3BsaXRLZXkpO1xuICAgICAgICB2YXIgX2Rvd25LZXlzQ3VycmVudCA9IFtdOyAvLyDorrDlvZXlvZPliY3mjInplK7plK7lgLxcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGtleVNob3J0Y3V0Lmxlbmd0aDsgYSsrKSB7XG4gICAgICAgICAgX2Rvd25LZXlzQ3VycmVudC5wdXNoKGNvZGUoa2V5U2hvcnRjdXRbYV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfZG93bktleXNDdXJyZW50LnNvcnQoKS5qb2luKCcnKSA9PT0gX2Rvd25LZXlzLnNvcnQoKS5qb2luKCcnKSkge1xuICAgICAgICAgIC8vIOaJvuWIsOWkhOeQhuWGheWuuVxuICAgICAgICAgIGV2ZW50SGFuZGxlcihldmVudCwgcmVjb3JkLCBzY29wZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8g5Yik5patIGVsZW1lbnQg5piv5ZCm5bey57uP57uR5a6a5LqL5Lu2XG5cblxuZnVuY3Rpb24gaXNFbGVtZW50QmluZChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50SGFzQmluZEV2ZW50LmluZGV4T2YoZWxlbWVudCkgPiAtMTtcbn1cblxuZnVuY3Rpb24gaG90a2V5cyhrZXksIG9wdGlvbiwgbWV0aG9kKSB7XG4gIF9kb3duS2V5cyA9IFtdO1xuICB2YXIga2V5cyA9IGdldEtleXMoa2V5KTsgLy8g6ZyA6KaB5aSE55CG55qE5b+r5o236ZSu5YiX6KGoXG5cbiAgdmFyIG1vZHMgPSBbXTtcbiAgdmFyIHNjb3BlID0gJ2FsbCc7IC8vIHNjb3Bl6buY6K6k5Li6YWxs77yM5omA5pyJ6IyD5Zu06YO95pyJ5pWIXG5cbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudDsgLy8g5b+r5o236ZSu5LqL5Lu257uR5a6a6IqC54K5XG5cbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5dXAgPSBmYWxzZTtcbiAgdmFyIGtleWRvd24gPSB0cnVlO1xuICB2YXIgc3BsaXRLZXkgPSAnKyc7IC8vIOWvueS4uuiuvuWumuiMg+WbtOeahOWIpOaWrVxuXG4gIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbWV0aG9kID0gb3B0aW9uO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvcHRpb24pID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIGlmIChvcHRpb24uc2NvcGUpIHNjb3BlID0gb3B0aW9uLnNjb3BlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmVsZW1lbnQpIGVsZW1lbnQgPSBvcHRpb24uZWxlbWVudDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXl1cCkga2V5dXAgPSBvcHRpb24ua2V5dXA7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24ua2V5ZG93biAhPT0gdW5kZWZpbmVkKSBrZXlkb3duID0gb3B0aW9uLmtleWRvd247IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9uLnNwbGl0S2V5ID09PSAnc3RyaW5nJykgc3BsaXRLZXkgPSBvcHRpb24uc3BsaXRLZXk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgc2NvcGUgPSBvcHRpb247IC8vIOWvueS6juavj+S4quW/q+aNt+mUrui/m+ihjOWkhOeQhlxuXG4gIGZvciAoOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV0uc3BsaXQoc3BsaXRLZXkpOyAvLyDmjInplK7liJfooahcblxuICAgIG1vZHMgPSBbXTsgLy8g5aaC5p6c5piv57uE5ZCI5b+r5o236ZSu5Y+W5b6X57uE5ZCI5b+r5o236ZSuXG5cbiAgICBpZiAoa2V5Lmxlbmd0aCA+IDEpIG1vZHMgPSBnZXRNb2RzKF9tb2RpZmllciwga2V5KTsgLy8g5bCG6Z2e5L+u6aWw6ZSu6L2s5YyW5Li66ZSu56CBXG5cbiAgICBrZXkgPSBrZXlba2V5Lmxlbmd0aCAtIDFdO1xuICAgIGtleSA9IGtleSA9PT0gJyonID8gJyonIDogY29kZShrZXkpOyAvLyAq6KGo56S65Yy56YWN5omA5pyJ5b+r5o236ZSuXG4gICAgLy8g5Yik5pata2V55piv5ZCm5ZyoX2hhbmRsZXJz5Lit77yM5LiN5Zyo5bCx6LWL5LiA5Liq56m65pWw57uEXG5cbiAgICBpZiAoIShrZXkgaW4gX2hhbmRsZXJzKSkgX2hhbmRsZXJzW2tleV0gPSBbXTtcblxuICAgIF9oYW5kbGVyc1trZXldLnB1c2goe1xuICAgICAga2V5dXA6IGtleXVwLFxuICAgICAga2V5ZG93bjoga2V5ZG93bixcbiAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgIG1vZHM6IG1vZHMsXG4gICAgICBzaG9ydGN1dDoga2V5c1tpXSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAga2V5OiBrZXlzW2ldLFxuICAgICAgc3BsaXRLZXk6IHNwbGl0S2V5XG4gICAgfSk7XG4gIH0gLy8g5Zyo5YWo5bGAZG9jdW1lbnTkuIrorr7nva7lv6vmjbfplK5cblxuXG4gIGlmICh0eXBlb2YgZWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRWxlbWVudEJpbmQoZWxlbWVudCkgJiYgd2luZG93KSB7XG4gICAgZWxlbWVudEhhc0JpbmRFdmVudC5wdXNoKGVsZW1lbnQpO1xuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUpO1xuICAgIH0pO1xuICAgIGFkZEV2ZW50KHdpbmRvdywgJ2ZvY3VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgX2Rvd25LZXlzID0gW107XG4gICAgfSk7XG4gICAgYWRkRXZlbnQoZWxlbWVudCwgJ2tleXVwJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUpO1xuICAgICAgY2xlYXJNb2RpZmllcihlKTtcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgX2FwaSA9IHtcbiAgc2V0U2NvcGU6IHNldFNjb3BlLFxuICBnZXRTY29wZTogZ2V0U2NvcGUsXG4gIGRlbGV0ZVNjb3BlOiBkZWxldGVTY29wZSxcbiAgZ2V0UHJlc3NlZEtleUNvZGVzOiBnZXRQcmVzc2VkS2V5Q29kZXMsXG4gIGlzUHJlc3NlZDogaXNQcmVzc2VkLFxuICBmaWx0ZXI6IGZpbHRlcixcbiAgdW5iaW5kOiB1bmJpbmRcbn07XG5cbmZvciAodmFyIGEgaW4gX2FwaSkge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9hcGksIGEpKSB7XG4gICAgaG90a2V5c1thXSA9IF9hcGlbYV07XG4gIH1cbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBfaG90a2V5cyA9IHdpbmRvdy5ob3RrZXlzO1xuXG4gIGhvdGtleXMubm9Db25mbGljdCA9IGZ1bmN0aW9uIChkZWVwKSB7XG4gICAgaWYgKGRlZXAgJiYgd2luZG93LmhvdGtleXMgPT09IGhvdGtleXMpIHtcbiAgICAgIHdpbmRvdy5ob3RrZXlzID0gX2hvdGtleXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdGtleXM7XG4gIH07XG5cbiAgd2luZG93LmhvdGtleXMgPSBob3RrZXlzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBob3RrZXlzO1xuIiwiaW1wb3J0IGhvdGtleXMgZnJvbSAnaG90a2V5cy1qcyc7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxyXG4gKiBAZGVwcmVjYXRlZCBVc2UgaXNIb3RrZXlQcmVzc2VkIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCB2ZXJzaW9uIDQuXHJcbiAqL1xuXG5mdW5jdGlvbiB1c2VJc0hvdGtleVByZXNzZWQoKSB7XG4gIHJldHVybiBob3RrZXlzLmlzUHJlc3NlZDtcbn1cblxuaG90a2V5cy5maWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIHRhZ0ZpbHRlciA9IGZ1bmN0aW9uIHRhZ0ZpbHRlcihfcmVmLCBlbmFibGVPblRhZ3MpIHtcbiAgdmFyIHRhcmdldCA9IF9yZWYudGFyZ2V0O1xuICB2YXIgdGFyZ2V0VGFnTmFtZSA9IHRhcmdldCAmJiB0YXJnZXQudGFnTmFtZTtcbiAgcmV0dXJuIEJvb2xlYW4odGFyZ2V0VGFnTmFtZSAmJiBlbmFibGVPblRhZ3MgJiYgZW5hYmxlT25UYWdzLmluY2x1ZGVzKHRhcmdldFRhZ05hbWUpKTtcbn07XG5cbnZhciBpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0ID0gZnVuY3Rpb24gaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChldikge1xuICByZXR1cm4gdGFnRmlsdGVyKGV2LCBbJ0lOUFVUJywgJ1RFWFRBUkVBJywgJ1NFTEVDVCddKTtcbn07XG5cbmZ1bmN0aW9uIHVzZUhvdGtleXMoa2V5cywgY2FsbGJhY2ssIG9wdGlvbnMsIGRlcHMpIHtcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIGRlcHMgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgX3JlZjIgPSBvcHRpb25zIHx8IHt9LFxuICAgICAgZW5hYmxlT25UYWdzID0gX3JlZjIuZW5hYmxlT25UYWdzLFxuICAgICAgZmlsdGVyID0gX3JlZjIuZmlsdGVyLFxuICAgICAga2V5dXAgPSBfcmVmMi5rZXl1cCxcbiAgICAgIGtleWRvd24gPSBfcmVmMi5rZXlkb3duLFxuICAgICAgX3JlZjIkZmlsdGVyUHJldmVudERlID0gX3JlZjIuZmlsdGVyUHJldmVudERlZmF1bHQsXG4gICAgICBmaWx0ZXJQcmV2ZW50RGVmYXVsdCA9IF9yZWYyJGZpbHRlclByZXZlbnREZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGZpbHRlclByZXZlbnREZSxcbiAgICAgIF9yZWYyJGVuYWJsZWQgPSBfcmVmMi5lbmFibGVkLFxuICAgICAgZW5hYmxlZCA9IF9yZWYyJGVuYWJsZWQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRlbmFibGVkLFxuICAgICAgX3JlZjIkZW5hYmxlT25Db250ZW50ID0gX3JlZjIuZW5hYmxlT25Db250ZW50RWRpdGFibGUsXG4gICAgICBlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSA9IF9yZWYyJGVuYWJsZU9uQ29udGVudCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRlbmFibGVPbkNvbnRlbnQ7XG5cbiAgdmFyIHJlZiA9IHVzZVJlZihudWxsKTsgLy8gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGNhbGxiYWNrIGRldGVybWluZXMgaWYgdGhlIGJyb3dzZXJzIGRlZmF1bHQgYmVoYXZpb3IgaXMgcHJldmVudGVkLlxuXG4gIHZhciBtZW1vaXNlZENhbGxiYWNrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCkge1xuICAgIHZhciBfa2V5Ym9hcmRFdmVudCR0YXJnZXQ7XG5cbiAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXIoa2V5Ym9hcmRFdmVudCkpIHtcbiAgICAgIHJldHVybiAhZmlsdGVyUHJldmVudERlZmF1bHQ7XG4gICAgfSAvLyBDaGVjayB3aGV0aGVyIHRoZSBob3RrZXlzIHdhcyB0cmlnZ2VyZWQgaW5zaWRlIGFuIGlucHV0IGFuZCB0aGF0IGlucHV0IGlzIGVuYWJsZWQgb3IgaWYgaXQgd2FzIHRyaWdnZXJlZCBieSBhIGNvbnRlbnQgZWRpdGFibGUgdGFnIGFuZCBpdCBpcyBlbmFibGVkLlxuXG5cbiAgICBpZiAoaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChrZXlib2FyZEV2ZW50KSAmJiAhdGFnRmlsdGVyKGtleWJvYXJkRXZlbnQsIGVuYWJsZU9uVGFncykgfHwgKF9rZXlib2FyZEV2ZW50JHRhcmdldCA9IGtleWJvYXJkRXZlbnQudGFyZ2V0KSAhPSBudWxsICYmIF9rZXlib2FyZEV2ZW50JHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSAmJiAhZW5hYmxlT25Db250ZW50RWRpdGFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyZWYuY3VycmVudCA9PT0gbnVsbCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSByZWYuY3VycmVudCkge1xuICAgICAgY2FsbGJhY2soa2V5Ym9hcmRFdmVudCwgaG90a2V5c0V2ZW50KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgZGVwcyA/IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXS5jb25jYXQoZGVwcykgOiBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJbiB0aGlzIGNhc2Uga2V5ZG93biBpcyBsaWtlbHkgdW5kZWZpbmVkLCBzbyB3ZSBzZXQgaXQgdG8gZmFsc2UsIHNpbmNlIGhvdGtleXMgbmVlZHMgdGhlIGBrZXlkb3duYCBrZXkgdG8gaGF2ZSBhIHZhbHVlLlxuXG5cbiAgICBpZiAoa2V5dXAgJiYga2V5ZG93biAhPT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5rZXlkb3duID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaG90a2V5cyhrZXlzLCBvcHRpb25zIHx8IHt9LCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhvdGtleXMudW5iaW5kKGtleXMsIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIH07XG4gIH0sIFttZW1vaXNlZENhbGxiYWNrLCBrZXlzLCBlbmFibGVkXSk7XG4gIHJldHVybiByZWY7XG59XG5cbnZhciBpc0hvdGtleVByZXNzZWQgPSBob3RrZXlzLmlzUHJlc3NlZDtcblxuZXhwb3J0IHsgaXNIb3RrZXlQcmVzc2VkLCB1c2VIb3RrZXlzLCB1c2VJc0hvdGtleVByZXNzZWQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlYWN0LWhvdGtleXMtaG9vay5lc20uanMubWFwXG4iXSwic291cmNlUm9vdCI6IiJ9
24
+ var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function a(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on".concat(t),(function(){n(window.event)}))}function o(e,t){for(var n=t.slice(0,t.length-1),r=0;r<n.length;r++)n[r]=e[n[r].toLowerCase()];return n}function i(e){"string"!=typeof e&&(e="");for(var t=(e=e.replace(/\s/g,"")).split(","),n=t.lastIndexOf("");n>=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}for(var u={backspace:8,tab:9,clear:12,enter:13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":r?173:189,"=":r?61:187,";":r?59:186,"'":222,"[":219,"]":221,"\\":220},l={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},d={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},c={16:!1,18:!1,17:!1,91:!1},f={},s=1;s<20;s++)u["f".concat(s)]=111+s;var v=[],p=!1,m="all",h=[],y=function(e){return u[e.toLowerCase()]||l[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function b(e){m=e||"all"}function g(){return m||"all"}var _=function(e){var t=e.key,n=e.scope,r=e.method,a=e.splitKey,u=void 0===a?"+":a;i(t).forEach((function(e){var t=e.split(u),a=t.length,i=t[a-1],d="*"===i?"*":y(i);if(f[d]){n||(n=g());var c=a>1?o(l,t):[];f[d]=f[d].filter((function(e){return!((!r||e.method===r)&&e.scope===n&&function(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,a=!0,o=0;o<n.length;o++)-1===r.indexOf(n[o])&&(a=!1);return a}(e.mods,c))}))}}))};function O(e,t,n,r){var a;if(t.element===r&&(t.scope===n||"all"===t.scope)){for(var o in a=t.mods.length>0,c)Object.prototype.hasOwnProperty.call(c,o)&&(!c[o]&&t.mods.indexOf(+o)>-1||c[o]&&-1===t.mods.indexOf(+o))&&(a=!1);(0!==t.mods.length||c[16]||c[18]||c[17]||c[91])&&!a&&"*"!==t.shortcut||!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0))}}function w(e,t){var n=f["*"],r=e.keyCode||e.which||e.charCode;if(P.filter.call(this,e)){if(93!==r&&224!==r||(r=91),-1===v.indexOf(r)&&229!==r&&v.push(r),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=d[t];e[t]&&-1===v.indexOf(n)?v.push(n):!e[t]&&v.indexOf(n)>-1?v.splice(v.indexOf(n),1):"metaKey"===t&&e[t]&&3===v.length&&(e.ctrlKey||e.shiftKey||e.altKey||(v=v.slice(v.indexOf(n))))})),r in c){for(var a in c[r]=!0,l)l[a]===r&&(P[a]=!0);if(!n)return}for(var o in c)Object.prototype.hasOwnProperty.call(c,o)&&(c[o]=e[d[o]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===v.indexOf(17)&&v.push(17),-1===v.indexOf(18)&&v.push(18),c[17]=!0,c[18]=!0);var i=g();if(n)for(var u=0;u<n.length;u++)n[u].scope===i&&("keydown"===e.type&&n[u].keydown||"keyup"===e.type&&n[u].keyup)&&O(e,n[u],i,t);if(r in f)for(var s=0;s<f[r].length;s++)if(("keydown"===e.type&&f[r][s].keydown||"keyup"===e.type&&f[r][s].keyup)&&f[r][s].key){for(var p=f[r][s],m=p.splitKey,h=p.key.split(m),b=[],_=0;_<h.length;_++)b.push(y(h[_]));b.sort().join("")===v.sort().join("")&&O(e,p,i,t)}}}function P(e,t,n){v=[];var r=i(e),u=[],d="all",s=document,m=0,b=!1,g=!0,_="+",O=!1;for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(d=t.scope),t.element&&(s=t.element),t.keyup&&(b=t.keyup),void 0!==t.keydown&&(g=t.keydown),void 0!==t.capture&&(O=t.capture),"string"==typeof t.splitKey&&(_=t.splitKey)),"string"==typeof t&&(d=t);m<r.length;m++)u=[],(e=r[m].split(_)).length>1&&(u=o(l,e)),(e="*"===(e=e[e.length-1])?"*":y(e))in f||(f[e]=[]),f[e].push({keyup:b,keydown:g,scope:d,mods:u,shortcut:r[m],method:n,key:r[m],splitKey:_,element:s});void 0!==s&&!function(e){return h.indexOf(e)>-1}(s)&&window&&(h.push(s),a(s,"keydown",(function(e){w(e,s)}),O),p||(p=!0,a(window,"focus",(function(){v=[]}),O)),a(s,"keyup",(function(e){w(e,s),function(e){var t=e.keyCode||e.which||e.charCode,n=v.indexOf(t);if(n>=0&&v.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&v.splice(0,v.length),93!==t&&224!==t||(t=91),t in c)for(var r in c[t]=!1,l)l[r]===t&&(P[r]=!1)}(e)}),O))}var j={setScope:b,getScope:g,deleteScope:function(e,t){var n,r;for(var a in e||(e=g()),f)if(Object.prototype.hasOwnProperty.call(f,a))for(n=f[a],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;g()===e&&b(t||"all")},getPressedKeyCodes:function(){return v.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=y(e)),-1!==v.indexOf(e)},filter:function(e){var t=e.target||e.srcElement,n=t.tagName,r=!0;return!t.isContentEditable&&("INPUT"!==n&&"TEXTAREA"!==n&&"SELECT"!==n||t.readOnly)||(r=!1),r},trigger:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all";Object.keys(f).forEach((function(n){var r=f[n].find((function(n){return n.scope===t&&n.shortcut===e}));r&&r.method&&r.method()}))},unbind:function(e){if(e){if(Array.isArray(e))e.forEach((function(e){e.key&&_(e)}));else if("object"==typeof e)e.key&&_(e);else if("string"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var a=n[0],o=n[1];"function"==typeof a&&(o=a,a=""),_({key:e,scope:a,method:o,splitKey:"+"})}}else Object.keys(f).forEach((function(e){return delete f[e]}))},keyMap:u,modifier:l,modifierMap:d};for(var M in j)Object.prototype.hasOwnProperty.call(j,M)&&(P[M]=j[M]);if("undefined"!=typeof window){var E=window.hotkeys;P.noConflict=function(e){return e&&window.hotkeys===P&&(window.hotkeys=E),P},window.hotkeys=P}var k=n(0);function C(){return P.isPressed}P.filter=function(){return!0};var x=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))};function N(e,t,n,r){n instanceof Array&&(r=n,n=void 0);var a=n||{},o=a.enableOnTags,i=a.filter,u=a.keyup,l=a.keydown,d=a.filterPreventDefault,c=void 0===d||d,f=a.enabled,s=void 0===f||f,v=a.enableOnContentEditable,p=void 0!==v&&v,m=Object(k.useRef)(null),h=Object(k.useCallback)((function(e,n){var r;return i&&!i(e)?!c:!!(x(e,["INPUT","TEXTAREA","SELECT"])&&!x(e,o)||null!=(r=e.target)&&r.isContentEditable&&!p)||(null===m.current||document.activeElement===m.current)&&(t(e,n),!0)}),r?[m,o,i].concat(r):[m,o,i]);return Object(k.useEffect)((function(){if(s)return u&&!0!==l&&(n.keydown=!1),P(e,n||{},h),function(){return P.unbind(e,h)};P.unbind(e,h)}),[h,e,s]),m}var S=P.isPressed}]));
25
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzPzlhNGUiLCJ3ZWJwYWNrOi8vLy4vc3JjL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24ubW9kdWxlLmNzcz9jZDQ2Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25CYWRnZS9CdXR0b25CYWRnZS5tb2R1bGUuY3NzPzMyYWIiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsubW9kdWxlLmNzcz8wODQxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwubW9kdWxlLmNzcz8xZjExIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94Lm1vZHVsZS5jc3M/NGVlYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9Db2xvclBpY2tlci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3M/MjNlYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5tb2R1bGUuY3NzP2UxODgiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Nb2RhbC9Nb2RhbC5tb2R1bGUuY3NzPzBlZGYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzcz8yN2IzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi5tb2R1bGUuY3NzPzliOTMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLm1vZHVsZS5jc3M/M2ViOSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY2FyZXQtZG93bi5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUubW9kdWxlLmNzcz8zNzA5Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3M/OTZkMiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLm1vZHVsZS5jc3M/NTA0OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0ubW9kdWxlLmNzcz8wNDI3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0Lm1vZHVsZS5jc3M/MTI5OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLm1vZHVsZS5jc3M/N2FiZiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/ZDI4ZCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzcz9jYzM3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS5tb2R1bGUuY3NzPzk1YTciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/NDY0ZSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3TGlua0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8yMWM1Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/Y2QzNiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz9jZjYxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzPzlhMzYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLm1vZHVsZS5jc3M/ZTIyMyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC5tb2R1bGUuY3NzPzQ3ZjAiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2JhY2tzcGFjZS5zdmciLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlT3V0c2lkZUNsaWNrL3VzZU91dHNpZGVDbGljay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVByb21pc2UvdXNlUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3dyL2Rpc3QvaW5kZXguZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVNXUkhvb2tzQ29uZmlnL3VzZVNXUkhvb2tzQ29uZmlnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVRvZ2dsZS91c2VUb2dnbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hvdGtleXMtanMvZGlzdC9ob3RrZXlzLmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaG90a2V5cy1ob29rL2Rpc3QvcmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsInJlcXVpcmUiLCJpc0FycmF5IiwiQXJyYXkiLCJjYyIsIm9iaiIsIm91dCIsInRtcCIsImsiLCJsZW5ndGgiLCJkZWZhdWx0IiwiZGlzcGxheSIsImlzRGlzYWJsZWQiLCJoYW5kbGVDbGljayIsIkJ1dHRvbiIsImFsaWduIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwic2l6ZSIsInN0cmV0Y2hIb3Jpem9udGFsbHkiLCJjbGFzc05hbWUiLCJjb250YWluZXIiLCJJY29uIiwiYWx0Iiwic3JjIiwiY2hpbGRyZW4iLCJjb250YWluZXJSZWYiLCJpbnZlcnRlZCIsInJvdW5kZWQiLCJub1NoYWRvdyIsIm5vUGFkZGluZyIsIm5vQm9yZGVyIiwidHJhbnNwYXJlbnQiLCJzdHJldGNoVmVydGljYWxseSIsImF1dG9Gb2N1cyIsIm9mZnNldFNpZGVzIiwidHlwZSIsInJlZiIsImxlZnRPZmZzZXQiLCJpbmNsdWRlcyIsInJpZ2h0T2Zmc2V0Iiwicm9sZSIsImNvbnRlbnQiLCJidXR0b25CYWRnZSIsIkNvbXBvbmVudCIsInByb3BzIiwibGFiZWwiLCJvbkNoYW5nZSIsInBsYWNlaG9sZGVyIiwiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiLCJoYW5kbGVDaGFuZ2UiLCJ1c2VDYWxsYmFjayIsImUiLCJ0YXJnZXQiLCJMYWJlbCIsImlucHV0UmVmIiwiY2hlY2tib3giLCJjb2xvcnMiLCJvblNlbGVjdCIsInNlbGVjdGVkQ29sb3IiLCJkaXJlY3Rpb24iLCJjYW5Ub2dnbGUiLCJjb2xvclBpY2tlciIsIm1hcCIsImNvbG9yIiwiQ29sb3JTd2F0Y2giLCJpc1NlbGVjdGVkIiwiY29sb3JTd2F0Y2giLCJzZWxlY3RlZCIsInN0eWxlIiwiYmFja2dyb3VuZENvbG9yIiwiaGV4Q29kZSIsInNyT25seSIsIkNvbmZpcm1hdGlvbk1vZGFsIiwiaGVhZGVyIiwiaXNPcGVuIiwiYnV0dG9uc0xlZnQiLCJidXR0b25zUmlnaHQiLCJvbkNsb3NlIiwibm9PdmVybGF5IiwiYmFzZVpJbmRleCIsIk1vZGFsIiwibW9kYWxIZWFkZXIiLCJtb2RhbENvbnRlbnQiLCJtb2RhbEJ1dHRvbnNDb250YWluZXIiLCJtb2RhbEJ1dHRvbnMiLCJkaXNwbGF5TmFtZSIsImJ1dHRvbiIsInVzZUhvdGtleXMiLCJoYW5kbGVPdmVybGF5Q2xpY2siLCJ6SW5kZXgiLCJvdmVybGF5IiwibW9kYWwiLCJtb2RhbEJ1dHRvbiIsIkRyb3Bkb3duIiwiQ2xpY2thYmxlIiwiaXRlbUJvZHlSZW5kZXJlciIsIml0ZW1zIiwiaGFuZGxlU2VsZWN0IiwicmVuZGVyQ2xpY2thYmxlIiwic2VsZWN0ZWRJdGVtIiwidXNlU3RhdGUiLCJzZXRJc09wZW4iLCJ1c2VPdXRzaWRlQ2xpY2siLCJ0b2dnbGVJc09wZW4iLCJNZW51Q29udGFpbmVyIiwicGxhY2VtZW50IiwidmVydGljYWwiLCJob3Jpem9udGFsIiwiTWVudSIsIml0ZW0iLCJNZW51SXRlbSIsImlzQWN0aXZlIiwiaWQiLCJpY29uIiwiY3Jvc3NPcmlnaW4iLCJmb290ZXIiLCJtZW51Iiwib3BlbiIsInNjcm9sbENvbnRhaW5lciIsImZvcndhcmRSZWYiLCJtZW51Q29udGFpbmVyIiwibWVudUl0ZW0iLCJhY3RpdmUiLCJtZW51TGlua0l0ZW0iLCJhY2NlcHQiLCJtdWx0aXBsZSIsImlucHV0IiwibGF5b3V0IiwicGFyZW50IiwiaG9yaXpvbnRhbFBsYWNlbWVudCIsInZlcnRpY2FsUGxhY2VtZW50IiwiZml4ZWQiLCJiYWRnZUNvbnRlbnQiLCJ0b3BPZmZzZXQiLCJib3R0b21PZmZzZXQiLCJCdXR0b25CYWRnZSIsInNyY1dpZHRoIiwic3JjSGVpZ2h0IiwiZGVjb2RpbmciLCJsb2FkaW5nIiwiaW1hZ2VFbGVtZW50IiwiaW1hZ2UiLCJ3aWR0aCIsImhlaWdodCIsImhhc092ZXJsYXkiLCJoZWFkZXJBY3Rpb25zIiwiaGVhZGVyTGFiZWwiLCJsaXN0IiwibGlzdFZpZXdJdGVtIiwiQnV0dG9uTGluayIsImFzIiwiaXNGaXhlZCIsIm9uQmx1ciIsIm9uS2V5RG93biIsImlucHV0RWxlbWVudCIsInRleHRJbnB1dCIsInRvYXN0IiwidG9hc3RDb250YWluZXIiLCJwb3N0ZXIiLCJtdXRlZCIsImxvb3AiLCJhdXRvUGxheSIsInZpZGVvIiwicGxheXNJbmxpbmUiLCJOdW1wYWQiLCJhcHBlbmREaWdpdCIsIm51bWJlciIsImRpZ2l0IiwiZW1pdE51bWJlciIsIm5ld051bWJlciIsInByZXZlbnREZWZhdWx0IiwiTnVtcGFkS2V5cyIsImZpbGwiLCJfIiwiaW5kZXgiLCJudW1wYWRWYWx1ZSIsIm51bXBhZCIsIm51bWJlcnMiLCJNYXRoIiwiZmxvb3IiLCJjYWxsYmFjayIsImV2ZW50IiwiY3VycmVudCIsImNvbnRhaW5zIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9fYXdhaXRlciIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiUCIsImdlbmVyYXRvciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsIm5leHQiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX2dlbmVyYXRvciIsImJvZHkiLCJmIiwieSIsImciLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJpdGVyYXRvciIsInRoaXMiLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJwb3AiLCJwdXNoIiwiX19yZWFkIiwiYXIiLCJlcnJvciIsInVzZVByb21pc2UiLCJfdGhpcyIsIl9hIiwiZGF0YSIsInVuZGVmaW5lZCIsImlzUGVuZGluZyIsImlzUmVzb2x2ZWQiLCJpc1JlamVjdGVkIiwiaXNTZXR0bGVkIiwic2V0UmVzdWx0IiwiaGFzVW5tb3VudGVkIiwicHJvbWlzZSIsImVycm9yXzEiLCJob29rIiwibm9vcCIsIlVOREVGSU5FRCIsIk9CSkVDVCIsImlzVW5kZWZpbmVkIiwiaXNGdW5jdGlvbiIsIm1lcmdlT2JqZWN0cyIsImEiLCJiIiwiYXNzaWduIiwiaGFzV2luZG93Iiwid2luZG93IiwidGFibGUiLCJXZWFrTWFwIiwiY291bnRlciIsInN0YWJsZUhhc2giLCJhcmciLCJjb25zdHJ1Y3RvciIsImlzRGF0ZSIsIkRhdGUiLCJSZWdFeHAiLCJ0b0pTT04iLCJ0b1N0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzZXQiLCJrZXlzIiwic29ydCIsIm9ubGluZSIsImhhc1dpbiIsImhhc0RvYyIsIm9uV2luZG93RXZlbnQiLCJvbkRvY3VtZW50RXZlbnQiLCJvZmZXaW5kb3dFdmVudCIsIm9mZkRvY3VtZW50RXZlbnQiLCJwcmVzZXQiLCJpc09ubGluZSIsImlzVmlzaWJsZSIsInZpc2liaWxpdHlTdGF0ZSIsImRlZmF1bHRDb25maWdPcHRpb25zIiwiaW5pdEZvY3VzIiwiaW5pdFJlY29ubmVjdCIsIm9uT25saW5lIiwib25PZmZsaW5lIiwiSVNfU0VSVkVSIiwickFGIiwic2V0VGltZW91dCIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJuYXZpZ2F0b3JDb25uZWN0aW9uIiwibmF2aWdhdG9yIiwiY29ubmVjdGlvbiIsInNsb3dDb25uZWN0aW9uIiwiZWZmZWN0aXZlVHlwZSIsInNhdmVEYXRhIiwic2VyaWFsaXplIiwiZXJyIiwiYXJncyIsImNvbmNhdCIsIlNXUkdsb2JhbFN0YXRlIiwiYnJvYWRjYXN0U3RhdGUiLCJjYWNoZSIsImlzVmFsaWRhdGluZyIsInJldmFsaWRhdGUiLCJicm9hZGNhc3QiLCJFVkVOVF9SRVZBTElEQVRPUlMiLCJTVEFURV9VUERBVEVSUyIsIkZFVENIIiwicmV2YWxpZGF0b3JzIiwidXBkYXRlcnMiLCJfX3RpbWVzdGFtcCIsImdldFRpbWVzdGFtcCIsImludGVybmFsTXV0YXRlIiwiX2kiLCJhcmd1bWVudHMiLCJfa2V5IiwiX2RhdGEiLCJfb3B0cyIsIm9wdGlvbnMiLCJwb3B1bGF0ZUNhY2hlIiwicm9sbGJhY2tPbkVycm9yIiwiY3VzdG9tT3B0aW1pc3RpY0RhdGEiLCJrZXlJbmZvIiwiX2IiLCJNVVRBVElPTiIsImJlZm9yZU11dGF0aW9uVHMiLCJoYXNDdXN0b21PcHRpbWlzdGljRGF0YSIsInJvbGxiYWNrRGF0YSIsIm9wdGltaXN0aWNEYXRhIiwicmVzIiwiX2MiLCJjYXRjaCIsInJldmFsaWRhdGVBbGxLZXlzIiwiaW5pdENhY2hlIiwicHJvdmlkZXIiLCJoYXMiLCJvcHRzIiwibXV0YXRlIiwidW5tb3VudCIsInJlbGVhc2VGb2N1c18xIiwicmVsZWFzZVJlY29ubmVjdF8xIiwiZGVsZXRlIiwiTWFwIiwiZGVmYXVsdENvbmZpZyIsIm9uTG9hZGluZ1Nsb3ciLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwib25FcnJvclJldHJ5IiwiX18iLCJjb25maWciLCJtYXhSZXRyeUNvdW50IiwiZXJyb3JSZXRyeUNvdW50IiwiY3VycmVudFJldHJ5Q291bnQiLCJyZXRyeUNvdW50IiwidGltZW91dCIsInJhbmRvbSIsImVycm9yUmV0cnlJbnRlcnZhbCIsIm9uRGlzY2FyZGVkIiwicmV2YWxpZGF0ZU9uRm9jdXMiLCJyZXZhbGlkYXRlT25SZWNvbm5lY3QiLCJyZXZhbGlkYXRlSWZTdGFsZSIsInNob3VsZFJldHJ5T25FcnJvciIsImZvY3VzVGhyb3R0bGVJbnRlcnZhbCIsImRlZHVwaW5nSW50ZXJ2YWwiLCJsb2FkaW5nVGltZW91dCIsImNvbXBhcmUiLCJjdXJyZW50RGF0YSIsIm5ld0RhdGEiLCJpc1BhdXNlZCIsImZhbGxiYWNrIiwibWVyZ2VDb25maWdzIiwidTEiLCJ1c2UiLCJmMSIsInUyIiwiZjIiLCJTV1JDb25maWdDb250ZXh0Iiwibm9ybWFsaXplIiwidXNlU1dSQ29uZmlnIiwic3Vic2NyaWJlQ2FsbGJhY2siLCJjYWxsYmFja3MiLCJrZXllZFJldmFsaWRhdG9ycyIsImluZGV4T2YiLCJXSVRIX0RFRFVQRSIsImRlZHVwZSIsImV4dGVuZGVkQ29uZmlnIiwiY2FjaGVDb250ZXh0IiwiUHJvdmlkZXIiLCJmZXRjaGVyIiwiZmFsbGJhY2tEYXRhIiwic3VzcGVuc2UiLCJyZXZhbGlkYXRlT25Nb3VudCIsInJlZnJlc2hJbnRlcnZhbCIsInJlZnJlc2hXaGVuSGlkZGVuIiwicmVmcmVzaFdoZW5PZmZsaW5lIiwiZm5BcmdzIiwiaW5pdGlhbE1vdW50ZWRSZWYiLCJ1bm1vdW50ZWRSZWYiLCJrZXlSZWYiLCJmZXRjaGVyUmVmIiwiY29uZmlnUmVmIiwiZ2V0Q29uZmlnIiwicGF0Y2hGZXRjaEluZm8iLCJpbmZvIiwiY2FjaGVkIiwiaXNJbml0aWFsTW91bnQiLCJzaG91bGRSZXZhbGlkYXRlIiwic3RhdGUiLCJyZXJlbmRlciIsInN0YXRlUmVmIiwic3RhdGVEZXBlbmRlbmNpZXNSZWYiLCJzZXRTdGF0ZSIsInBheWxvYWQiLCJzaG91bGRSZXJlbmRlciIsImN1cnJlbnRTdGF0ZSIsInVzZVN0YXRlV2l0aERlcHMiLCJzdGF0ZURlcGVuZGVuY2llcyIsInJldmFsaWRhdGVPcHRzIiwiY3VycmVudEZldGNoZXIiLCJzdGFydEF0Iiwic2hvdWxkU3RhcnROZXdSZXF1ZXN0IiwiaXNDdXJyZW50S2V5TW91bnRlZCIsImNsZWFudXBTdGF0ZSIsIm5ld1N0YXRlIiwiZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlIiwibXV0YXRpb25JbmZvIiwiZXJyXzEiLCJyZXF1ZXN0SW5mbyIsImJvdW5kTXV0YXRlIiwia2V5Q2hhbmdlZCIsInNvZnRSZXZhbGlkYXRlIiwibmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCIsInVuc3ViVXBkYXRlIiwidXBkYXRlZERhdGEiLCJ1cGRhdGVkRXJyb3IiLCJ1cGRhdGVkSXNWYWxpZGF0aW5nIiwidW5zdWJFdmVudHMiLCJub3ciLCJ0aW1lciIsImludGVydmFsIiwiZXhlY3V0ZSIsImNsZWFyVGltZW91dCIsInVzZVNXUkhvb2tzQ29uZmlnIiwic3dyQ29uZmlnIiwidXNlVG9nZ2xlIiwiaW5pdGlhbFZhbHVlIiwic2V0VmFsdWUiLCJuZXdWYWx1ZSIsInByZXZWYWx1ZSIsImlzZmYiLCJ1c2VyQWdlbnQiLCJ0b0xvd2VyQ2FzZSIsImFkZEV2ZW50IiwibWV0aG9kIiwidXNlQ2FwdHVyZSIsImF0dGFjaEV2ZW50IiwiZ2V0TW9kcyIsIm1vZGlmaWVyIiwibW9kcyIsInNsaWNlIiwiZ2V0S2V5cyIsInJlcGxhY2UiLCJzcGxpdCIsImxhc3RJbmRleE9mIiwic3BsaWNlIiwiX2tleU1hcCIsImJhY2tzcGFjZSIsInRhYiIsImNsZWFyIiwiZW50ZXIiLCJyZXR1cm4iLCJlc2MiLCJlc2NhcGUiLCJzcGFjZSIsImxlZnQiLCJ1cCIsInJpZ2h0IiwiZG93biIsImRlbCIsImlucyIsImluc2VydCIsImhvbWUiLCJlbmQiLCJwYWdldXAiLCJwYWdlZG93biIsImNhcHNsb2NrIiwibnVtXzAiLCJudW1fMSIsIm51bV8yIiwibnVtXzMiLCJudW1fNCIsIm51bV81IiwibnVtXzYiLCJudW1fNyIsIm51bV84IiwibnVtXzkiLCJudW1fbXVsdGlwbHkiLCJudW1fYWRkIiwibnVtX2VudGVyIiwibnVtX3N1YnRyYWN0IiwibnVtX2RlY2ltYWwiLCJudW1fZGl2aWRlIiwiJyIsIl9tb2RpZmllciIsInNoaWZ0Iiwib3B0aW9uIiwiY3RybCIsImNvbnRyb2wiLCJjbWQiLCJjb21tYW5kIiwibW9kaWZpZXJNYXAiLCIxNiIsIjE4IiwiMTciLCI5MSIsInNoaWZ0S2V5IiwiY3RybEtleSIsImFsdEtleSIsIm1ldGFLZXkiLCJfbW9kcyIsIl9oYW5kbGVycyIsIl9kb3duS2V5cyIsIndpbkxpc3RlbmRGb2N1cyIsIl9zY29wZSIsImVsZW1lbnRIYXNCaW5kRXZlbnQiLCJjb2RlIiwieCIsInRvVXBwZXJDYXNlIiwiY2hhckNvZGVBdCIsInNldFNjb3BlIiwic2NvcGUiLCJnZXRTY29wZSIsImVhY2hVbmJpbmQiLCJfcmVmIiwiX3JlZiRzcGxpdEtleSIsInNwbGl0S2V5IiwiZm9yRWFjaCIsIm9yaWdpbktleSIsInVuYmluZEtleXMiLCJsZW4iLCJsYXN0S2V5Iiwia2V5Q29kZSIsImZpbHRlciIsInJlY29yZCIsImExIiwiYTIiLCJhcnIxIiwiYXJyMiIsImlzSW5kZXgiLCJjb21wYXJlQXJyYXkiLCJldmVudEhhbmRsZXIiLCJoYW5kbGVyIiwiZWxlbWVudCIsIm1vZGlmaWVyc01hdGNoIiwic2hvcnRjdXQiLCJyZXR1cm5WYWx1ZSIsInN0b3BQcm9wYWdhdGlvbiIsImNhbmNlbEJ1YmJsZSIsImRpc3BhdGNoIiwiYXN0ZXJpc2siLCJ3aGljaCIsImNoYXJDb2RlIiwiaG90a2V5cyIsImtleU5hbWUiLCJrZXlOdW0iLCJnZXRNb2RpZmllclN0YXRlIiwia2V5ZG93biIsImtleXVwIiwia2V5U2hvcnRjdXQiLCJfZG93bktleXNDdXJyZW50Iiwiam9pbiIsImNhcHR1cmUiLCJpc0VsZW1lbnRCaW5kIiwiY2xlYXJNb2RpZmllciIsIl9hcGkiLCJkZWxldGVTY29wZSIsIm5ld1Njb3BlIiwiaGFuZGxlcnMiLCJnZXRQcmVzc2VkS2V5Q29kZXMiLCJpc1ByZXNzZWQiLCJzcmNFbGVtZW50IiwidGFnTmFtZSIsImZsYWciLCJpc0NvbnRlbnRFZGl0YWJsZSIsInJlYWRPbmx5IiwidHJpZ2dlciIsImZpbmQiLCJ1bmJpbmQiLCJrZXlzSW5mbyIsIl9sZW4iLCJrZXlNYXAiLCJfaG90a2V5cyIsIm5vQ29uZmxpY3QiLCJkZWVwIiwidXNlSXNIb3RrZXlQcmVzc2VkIiwidGFnRmlsdGVyIiwiZW5hYmxlT25UYWdzIiwidGFyZ2V0VGFnTmFtZSIsIkJvb2xlYW4iLCJkZXBzIiwiX3JlZjIiLCJfcmVmMiRmaWx0ZXJQcmV2ZW50RGUiLCJmaWx0ZXJQcmV2ZW50RGVmYXVsdCIsIl9yZWYyJGVuYWJsZWQiLCJlbmFibGVkIiwiX3JlZjIkZW5hYmxlT25Db250ZW50IiwiZW5hYmxlT25Db250ZW50RWRpdGFibGUiLCJtZW1vaXNlZENhbGxiYWNrIiwia2V5Ym9hcmRFdmVudCIsImhvdGtleXNFdmVudCIsIl9rZXlib2FyZEV2ZW50JHRhcmdldCIsImFjdGl2ZUVsZW1lbnQiLCJpc0hvdGtleVByZXNzZWQiXSwibWFwcGluZ3MiOiI2REFDRSxJQUFJQSxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9BQU9GLEVBQWlCRSxHQUFVQyxRQUduQyxJQUFJQyxFQUFTSixFQUFpQkUsR0FBWSxDQUN6Q0csRUFBR0gsRUFDSEksR0FBRyxFQUNISCxRQUFTLElBVVYsT0FOQUksRUFBUUwsR0FBVU0sS0FBS0osRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU0YsR0FHL0RHLEVBQU9FLEdBQUksRUFHSkYsRUFBT0QsUUEwRGYsT0FyREFGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxFQUFNLENBQUVLLFlBQVksRUFBTUMsSUFBS0wsS0FLaEVaLEVBQW9Ca0IsRUFBSSxTQUFTaEIsR0FDWCxvQkFBWGlCLFFBQTBCQSxPQUFPQyxhQUMxQ04sT0FBT0MsZUFBZWIsRUFBU2lCLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3RFAsT0FBT0MsZUFBZWIsRUFBUyxhQUFjLENBQUVtQixPQUFPLEtBUXZEckIsRUFBb0JzQixFQUFJLFNBQVNELEVBQU9FLEdBRXZDLEdBRFUsRUFBUEEsSUFBVUYsRUFBUXJCLEVBQW9CcUIsSUFDL0IsRUFBUEUsRUFBVSxPQUFPRixFQUNwQixHQUFXLEVBQVBFLEdBQThCLGlCQUFWRixHQUFzQkEsR0FBU0EsRUFBTUcsV0FBWSxPQUFPSCxFQUNoRixJQUFJSSxFQUFLWCxPQUFP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VixFQUFNaVYsSUFDckJuakIsRUFHVCxJQUFJMmpCLEVBQWtCbEQsRUFBUWlCIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEyKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpOyIsInZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYyhvYmopIHtcbiAgdmFyIG91dCA9IFwiXCJcblxuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiKSByZXR1cm4gb2JqIHx8IFwiXCJcblxuICBpZiAoaXNBcnJheShvYmopKVxuICAgIGZvciAodmFyIGsgPSAwLCB0bXA7IGsgPCBvYmoubGVuZ3RoOyBrKyspIHtcbiAgICAgIGlmICgodG1wID0gY2Mob2JqW2tdKSkgIT09IFwiXCIpIHtcbiAgICAgICAgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsgdG1wXG4gICAgICB9XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykgJiYgb2JqW2tdKSBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyBrXG4gICAgfVxuXG4gIHJldHVybiBvdXRcbn1cbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbiB9IGZyb20gXCIuL0ljb25cIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uIH0gZnJvbSBcIi4vQnV0dG9uXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4vQnV0dG9uQmFkZ2VcIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGFiZWwgfSBmcm9tIFwiLi9MYWJlbFwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25MaW5rIH0gZnJvbSBcIi4vQnV0dG9uTGlua1wiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclN3YXRjaCB9IGZyb20gXCIuL0NvbG9yU3dhdGNoXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgeyBJdGVtLCBSZW5kZXJEaXNwbGF5UHJvcHMgfSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL0NsaWNrYWJsZS5tb2R1bGUuY3NzXCI7XG5cbmltcG9ydCBpY29uTWVudSBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XG5cbmV4cG9ydCB0eXBlIENsaWNrYWJsZVByb3BzPFQgZXh0ZW5kcyBJdGVtPiA9IE9taXQ8XG4gIFJlbmRlckRpc3BsYXlQcm9wczxUPixcbiAgXCJzZWxlY3RlZEl0ZW1cIiB8IFwidG9nZ2xlSXNPcGVuXCJcbj4gJiB7XG4gIG9uQ2xpY2s6IFJlbmRlckRpc3BsYXlQcm9wczxUPltcInRvZ2dsZUlzT3BlblwiXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBDbGlja2FibGU8VCBleHRlbmRzIEl0ZW0+KHtcbiAgZGlzcGxheSxcbiAgaXNEaXNhYmxlZCxcbiAgb25DbGljazogaGFuZGxlQ2xpY2ssXG59OiBDbGlja2FibGVQcm9wczxUPikge1xuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGFsaWduPVwibGVmdFwiXG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5jb250YWluZXJ9PlxuICAgICAgICB7ZGlzcGxheX1cbiAgICAgICAgPEljb24gYWx0PVwiRHJvcGRvd25cIiBzcmM9e2ljb25NZW51fSAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9CdXR0b24+XG4gICk7XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1lbnUgfSBmcm9tIFwiLi9NZW51XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVDb250YWluZXIsIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVJdGVtIH0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUxpbmtJdGVtIH0gZnJvbSBcIi4vTWVudUxpbmtJdGVtXCI7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImxpc3RWaWV3SXRlbVwiOlwiVktZb050V1RadWkyQU8xSWx5Sk1Udz09XCJ9OyIsImV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkJhZGdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ2hlY2tib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JQaWNrZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmlsZUlucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xpc3RWaWV3XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvT3ZlcmxheVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UZXh0SW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVG9hc3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVmlkZW9cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTnVtcGFkXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBCdXR0b25Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHNpemU/OiBTaXplO1xuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICBvZmZzZXRTaWRlcz86IEFycmF5PFwibGVmdFwiIHwgXCJyaWdodFwiPjtcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIGNvbnRhaW5lclJlZixcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSxcbn06IEJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiZcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKX1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInh5bnVNdThYWlNzb25EdWtzbDZBUWc9PVwiLFwibGVmdFwiOlwiUGtwMEhoTkh0dG9XSWIyZHdwR250dz09XCIsXCJzbWFsbFwiOlwid0RPZWVKR0NabTBrMlpwTnpGYmVIZz09XCIsXCJsYXJnZVwiOlwiXzVRakJXdGw3WVh5NGVtNFgzR1BiUkE9PVwiLFwieGxhcmdlXCI6XCJrTjBMZ2E0ZkJPZ2NpZ0RxdE9EUmRnPT1cIixcImludmVydGVkXCI6XCIrNW5zVG5MbE5PWDhLRlFpVWhUMWtRPT1cIixcInJvdW5kZWRcIjpcIkJqUC1KTldKam9CZk5NTXp0bnlXT1E9PVwiLFwicmlnaHRPZmZzZXRcIjpcImxHSndOY29sOENBa25xeFkrOERmcWc9PVwiLFwibGVmdE9mZnNldFwiOlwiRVYrZzZoVUExcXY4TFE5UnFnclFSUT09XCIsXCJub1NoYWRvd1wiOlwiWjN1UExycnlxSU5mUmpacHB3VTZOUT09XCIsXCJub0JvcmRlclwiOlwiZUVnaEc2R1hCOUl6eUQzanJOWmZBQT09XCIsXCJ0cmFuc3BhcmVudFwiOlwic3M3RGhWZ0Y1SkdzcENBU2RaVVlCZz09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJpOFFQU3I0Y0hZaEo3QWl1ZStjeDBnPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJXU3hpbVVNOWt4WUdjNVZSYzBpWmxBPT1cIixcIm5vUGFkZGluZ1wiOlwiU2dYY2hqejRkSnIrdGM4eWtMbkUxQT09XCIsXCJjb250ZW50XCI6XCJ4bjh5ZmpONm1leFJYSWd5Tmhta2l3PT1cIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3NcIjtcblxudHlwZSBCdXR0b25CYWRnZVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBCdXR0b25CYWRnZSh7IGNoaWxkcmVuLCBjbGFzc05hbWUgfTogQnV0dG9uQmFkZ2VQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmJ1dHRvbkJhZGdlLCBjbGFzc05hbWVdKX0+e2NoaWxkcmVufTwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25CYWRnZTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiYnV0dG9uQmFkZ2VcIjpcIlJTamJSaVhGV0FmQnpjQ29hTXBYZUE9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgT2Zmc2V0U2lkZSA9IFwibGVmdFwiIHwgXCJyaWdodFwiO1xuXG50eXBlIEJ1dHRvbkxpbmtQcm9wcyA9XG4gIHwge1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICAgICAgcm91bmRlZD86IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gICAgICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gICAgICBzaXplPzogU2l6ZTtcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XG4gICAgICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBCdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc2l6ZSxcbiAgY29udGFpbmVyUmVmLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgLi4ucHJvcHNcbn06IEJ1dHRvbkxpbmtQcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgY2hpbGRyZW4ubGVuZ3RoID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApfVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25MaW5rO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlpJcjl3LS1mU2l2cVdWR29TcDE0dEE9PVwiLFwibGVmdFwiOlwiclJ5dTlBVkd3WCsteGpUT01UU0Uxdz09XCIsXCJzbWFsbFwiOlwiXzBEQmhHSnZjYmpFTWxTcUVvZkYtcnc9PVwiLFwibWVkaXVtXCI6XCJhNit6Y1VZNlhLeTk0ekFxVVlhRTZ3PT1cIixcImxhcmdlXCI6XCJXK3Y0dkZlYlFreHcxY2RpS1ktS3ZnPT1cIixcInhsYXJnZVwiOlwiZFk5MURRUllVYVdUNEV6T0pKK0dCZz09XCIsXCJpbnZlcnRlZFwiOlwieXBsQ3B5bEw0SWRlcytjT3JxU2ltUT09XCIsXCJyb3VuZGVkXCI6XCJNUkVZMDkrZDY5dlY4NGhabkp1TFl3PT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJIc2FvN21GVzNsWVRyTmhmV3ZmeFd3PT1cIixcImxlZnRPZmZzZXRcIjpcIk1YbEwzTzhLVVllVkFZY1Nzbk5zOXc9PVwiLFwibm9TaGFkb3dcIjpcIkhxejRDcVFjTzRzME1UYXdyRHIwb0E9PVwiLFwidHJhbnNwYXJlbnRcIjpcImgxaE53YzJVbE0wQzVGLXhkZ2E1ZHc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiVG15cTQrdUhVK0pKZVlOZEJIOEwyUT09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiSnp6R25UdDRhTTMrOXJWbE5RV2kwQT09XCIsXCJub1BhZGRpbmdcIjpcIlV2SThVbmpjOVgwek4ybDVXK3RtclE9PVwiLFwibm9Cb3JkZXJcIjpcIlFwNXVCblFnSkZvWkhnWVNoekFQY3c9PVwiLFwiZGlzYWJsZWRcIjpcIlpYbGprWXBQV2pESkxDNEJFR01wcnc9PVwiLFwiY29udGVudFwiOlwiXzBuMk1uT2ZKUG0yd3hzNE0ybmJHSEE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vQ2hlY2tib3hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NoZWNrYm94Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBDaGVja2JveFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNpemU/OiBTaXplO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuXG59O1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgcGxhY2Vob2xkZXIsXG4gIGNoZWNrZWQsXG4gIGRpc2FibGVkLFxuICBuYW1lLFxuICBjbGFzc05hbWUsXG4gIGluZGV0ZXJtaW5hdGUsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbn06IENoZWNrYm94UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8TGFiZWwgdmFsdWU9e2xhYmVsfSA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJjaGVja2JveFwiXG4gICAgICAgIHJlZj17KGlucHV0UmVmKSA9PiB7XG4gICAgICAgICAgaWYgKGlucHV0UmVmKSB7XG4gICAgICAgICAgICBpbnB1dFJlZi5pbmRldGVybWluYXRlID0gaW5kZXRlcm1pbmF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNoZWNrYm94LCBjbGFzc05hbWUsIHN0eWxlc1tzaXplXV0pfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgLz5cbiAgICA8L0xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDaGVja2JveDtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xhYmVsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMYWJlbElucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MTGFiZWxFbGVtZW50PjtcbiAgdmFsdWU6IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExhYmVsKHsgY2xhc3NOYW1lLCBjaGlsZHJlbiwgdmFsdWUsIGNvbnRhaW5lclJlZiB9OiBMYWJlbElucHV0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9XG4gICAgPlxuICAgICAge3ZhbHVlfVxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExhYmVsO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImJSN1BPOHlSRnRVbE4xdnNQN2VjUlE9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNoZWNrYm94XCI6XCJDQlFaNFBwMWNsYis1UjhJbENPNGdRPT1cIixcInNtYWxsXCI6XCJfNWpianV0N0dndDdneGVuanlmOUxiUT09XCIsXCJtZWRpdW1cIjpcImlQQU93MlpzTkpBMG5XRFhxV0MzN2c9PVwiLFwibGFyZ2VcIjpcIkxFeWtYczltRUVTZHdvNmlab01kVXc9PVwiLFwieGxhcmdlXCI6XCJ1cXBBQ0VKMW9iQTRiUmxhZUFUMjdnPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclBpY2tlciB9IGZyb20gXCIuL0NvbG9yUGlja2VyXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IENvbG9yU3dhdGNoIH0gZnJvbSBcIi4uL0NvbG9yU3dhdGNoXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yUGlja2VyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQ29sb3JQaWNrZXJQcm9wcyA9IHtcbiAgY29sb3JzOiBDb2xvcltdO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBkaXJlY3Rpb24/OiBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjtcbiAgb25TZWxlY3Q6IChjb2xvcjogQ29sb3IpID0+IHZvaWQ7XG4gIHNlbGVjdGVkQ29sb3I/OiBDb2xvcjtcbiAgY2FuVG9nZ2xlPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIENvbG9yUGlja2VyKHtcbiAgY29sb3JzLFxuICBjb250YWluZXJSZWYsXG4gIG9uU2VsZWN0LFxuICBzZWxlY3RlZENvbG9yLFxuICBkaXJlY3Rpb24gPSBcInZlcnRpY2FsXCIsXG4gIGNhblRvZ2dsZSA9IGZhbHNlLFxufTogQ29sb3JQaWNrZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbG9yUGlja2VyLCBzdHlsZXNbZGlyZWN0aW9uXV0pfVxuICAgID5cbiAgICAgIHtjb2xvcnMubWFwKChjb2xvcjogQ29sb3IpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChjYW5Ub2dnbGUgJiYgY29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXkpIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KG51bGwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvblNlbGVjdChjb2xvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPENvbG9yU3dhdGNoXG4gICAgICAgICAgICBrZXk9e2NvbG9yLmtleX1cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvcn1cbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e2NvbG9yLmtleSA9PT0gc2VsZWN0ZWRDb2xvcj8ua2V5fVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0fVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JQaWNrZXI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JTd2F0Y2gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IsIFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclN3YXRjaFByb3BzID0ge1xuICBjb2xvcjogQ29sb3I7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBDb2xvclN3YXRjaCh7XG4gIGNvbG9yLFxuICBjb250YWluZXJSZWYsXG4gIGlzU2VsZWN0ZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIG9uQ2xpY2ssXG59OiBDb2xvclN3YXRjaFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbG9yU3dhdGNoLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnNlbGVjdGVkXTogaXNTZWxlY3RlZCxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJjb2xvci1zd2F0Y2hcIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogY29sb3IuaGV4Q29kZSB9fVxuICAgID5cbiAgICAgIHtjb2xvci5sYWJlbCAmJiA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zck9ubHl9PntgU2VsZWN0ICR7Y29sb3IubGFiZWx9IGNvbG9yYH08L3NwYW4+fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclN3YXRjaDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JTd2F0Y2hcIjpcInVUZjdtWWZYZU5UN0duMHpublI4RFE9PVwiLFwic21hbGxcIjpcImFBYmV6ak9tdzJOeVQ5UlU3UHV5T0E9PVwiLFwibGFyZ2VcIjpcIlFjNlNDdnFibm5oSjN6dGd6UFpPRkE9PVwiLFwieGxhcmdlXCI6XCJfNm9CQlpEa1JremY3dEY0Ymh5RHRBQT09XCIsXCJzZWxlY3RlZFwiOlwibmljWmZnTWsrdVFGUHlwSklrUXVidz09XCIsXCJzck9ubHlcIjpcIkdIcEhFQjFRWER5amVSOVZuRWQxVGc9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yUGlja2VyXCI6XCJES3RQNTViT2ZVVEIxa0RhLWlVSHFRPT1cIixcImhvcml6b250YWxcIjpcIl8zNExqOC1iLTEzQzhMMDlSc01pbmVnPT1cIixcInZlcnRpY2FsXCI6XCJfMXl1Z0dRczRFazB0M1Q4dGdvS3hWUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0RWxlbWVudCwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTW9kYWwgfSBmcm9tIFwiLi4vTW9kYWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIENvbmZpcm1hdGlvbk1vZGFsUHJvcHMgPSB7XG4gIGJ1dHRvbnNMZWZ0PzogUmVhY3RFbGVtZW50W107XG4gIGJ1dHRvbnNSaWdodD86IFJlYWN0RWxlbWVudFtdO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaGVhZGVyPzogc3RyaW5nO1xuICBpc09wZW46IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBDb25maXJtYXRpb25Nb2RhbCh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGhlYWRlcixcbiAgaXNPcGVuLFxuICBidXR0b25zTGVmdCA9IFtdLFxuICBidXR0b25zUmlnaHQgPSBbXSxcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9PdmVybGF5ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIGJhc2VaSW5kZXggPSAxMDE5LFxufTogQ29uZmlybWF0aW9uTW9kYWxQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxNb2RhbFxuICAgICAgY29udGFpbmVyUmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICBub092ZXJsYXk9e25vT3ZlcmxheX1cbiAgICAgIG5vU2hhZG93PXtub1NoYWRvd31cbiAgICAgIGJhc2VaSW5kZXg9e2Jhc2VaSW5kZXh9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgICB7ISFoZWFkZXIgJiYgPGgxIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsSGVhZGVyfT57aGVhZGVyfTwvaDE+fVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubW9kYWxDb250ZW50LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc0xlZnR9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zUmlnaHR9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn1cblxuQ29uZmlybWF0aW9uTW9kYWwuZGlzcGxheU5hbWUgPSBcIkNvbmZpcm1hdGlvbk1vZGFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IENvbmZpcm1hdGlvbk1vZGFsO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlSG90a2V5cyB9IGZyb20gXCJyZWFjdC1ob3RrZXlzLWhvb2tcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTW9kYWxQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYnV0dG9uPzogUmVhY3ROb2RlO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIE1vZGFsKHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgaXNPcGVuLFxuICBidXR0b24sXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBvbkNsb3NlID0gKCkgPT4ge30sXG4gIGJhc2VaSW5kZXggPSAxMDA5LFxufTogTW9kYWxQcm9wcykge1xuICB1c2VIb3RrZXlzKFwiRXNjYXBlXCIsIG9uQ2xvc2UpO1xuXG4gIGNvbnN0IGhhbmRsZU92ZXJsYXlDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvbkNsb3NlKCk7XG4gIH0sIFtvbkNsb3NlXSk7XG5cbiAgcmV0dXJuIChcbiAgICBpc09wZW4gJiYgKFxuICAgICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vT3ZlcmxheV06IG5vT3ZlcmxheSB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlT3ZlcmxheUNsaWNrfVxuICAgICAgICAvPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMSB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1vZGFsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiXG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7YnV0dG9uICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAyIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YnV0dG9ufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwicFU2SUIycjBMcENGUFhnVHZPcjJnQT09XCIsXCJub092ZXJsYXlcIjpcIl81U1VSOUZoLWZIVHk0WHI2bVFDK3BBPT1cIixcIm1vZGFsXCI6XCJMQ0FUODNtdVhzQUdyUFVIUTF5K2hRPT1cIixcInRyYW5zcGFyZW50XCI6XCJXSFU4UWJweitBdlQtWXB1UWVVSy1RPT1cIixcIm5vU2hhZG93XCI6XCJHaTFWVG1nM0dQTnhuWDkxLW0wLTVnPT1cIixcIm1vZGFsQnV0dG9uXCI6XCJsZm5mSHUreHllRWpjUWJBUXdqSVRnPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImp2S1NpLWZLdWZjcEs5ZUJXV0ZDTGc9PVwiLFwibW9kYWxIZWFkZXJcIjpcImN4MVJvUWRnQWJlbnZWWFU4QjdmU3c9PVwiLFwibW9kYWxDb250ZW50XCI6XCJaRDR2M0hFLUFZWlhWMElUV0RGN0dnPT1cIixcIm5vUGFkZGluZ1wiOlwiXzF6RkY4eHF5bzc3VXhHMnY1NDlCZUE9PVwiLFwibW9kYWxCdXR0b25zQ29udGFpbmVyXCI6XCJfNGhRaENlNVU3WUJ5aG5oTystR3Fpdz09XCIsXCJtb2RhbEJ1dHRvbnNcIjpcIkpvSUxiVzVGblppeGFKN0VUdm84K3c9PVwifTsiLCJleHBvcnQge1xuICBEcm9wZG93bixcbiAgRHJvcGRvd25Qcm9wcyxcbiAgSXRlbSBhcyBEcm9wZG93bkl0ZW0sXG4gIEl0ZW1Cb2R5UmVuZGVyZXJGbiBhcyBEcm9wZG93bkl0ZW1Cb2R5UmVuZGVyZXJGbixcbiAgUmVuZGVyQ2xpY2thYmxlRm4gYXMgRHJvcGRvd25SZW5kZXJDbGlja2FibGVGbixcbiAgUmVuZGVyRGlzcGxheVByb3BzIGFzIERyb3Bkb3duUmVuZGVyRGlzcGxheVByb3BzLFxufSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuZXhwb3J0IHtcbiAgQ2xpY2thYmxlIGFzIERyb3Bkb3duQ2xpY2thYmxlLFxuICBDbGlja2FibGVQcm9wcyBhcyBEcm9wZG93bkNsaWNrYWJsZVByb3BzXG59IGZyb20gXCIuL0NsaWNrYWJsZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Q2hpbGQsIFJlYWN0RWxlbWVudCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZU91dHNpZGVDbGljayB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuXG5pbXBvcnQgeyBDbGlja2FibGUgfSBmcm9tIFwiLi9DbGlja2FibGVcIjtcbmltcG9ydCB7IE1lbnUsIE1lbnVDb250YWluZXIsIE1lbnVJdGVtIH0gZnJvbSBcIi4uL01lbnVcIjtcblxuZXhwb3J0IHR5cGUgSXRlbSA9IHsgaWQ6IG51bWJlciB8IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIFJlbmRlckRpc3BsYXlQcm9wczxUIGV4dGVuZHMgSXRlbT4gPSBQaWNrPFxuICBEcm9wZG93blByb3BzPFQ+LFxuICBcImRpc3BsYXlcIiB8IFwic2VsZWN0ZWRJdGVtXCJcbj4gJiB7IGlzRGlzYWJsZWQ6IGJvb2xlYW47IHRvZ2dsZUlzT3BlbjogKCkgPT4gdm9pZCB9O1xuXG5leHBvcnQgdHlwZSBSZW5kZXJDbGlja2FibGVGbjxUIGV4dGVuZHMgSXRlbT4gPSAoXG4gIHByb3BzOiBSZW5kZXJEaXNwbGF5UHJvcHM8VD5cbikgPT4gUmVhY3RFbGVtZW50O1xuXG5leHBvcnQgdHlwZSBJdGVtQm9keVJlbmRlcmVyRm48VCBleHRlbmRzIEl0ZW0+ID0gKHN0YXRlOiB7XG4gIGl0ZW06IFQ7XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG59KSA9PiBSZWFjdENoaWxkO1xuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duUHJvcHM8VCBleHRlbmRzIEl0ZW0+IHtcbiAgaXRlbUJvZHlSZW5kZXJlcj86IEl0ZW1Cb2R5UmVuZGVyZXJGbjxUPjtcbiAgaXRlbXM6IFRbXTtcbiAgb25TZWxlY3Q6IChpdGVtOiBUKSA9PiB2b2lkO1xuICBkaXNwbGF5OiBSZWFjdENoaWxkO1xuICByZW5kZXJDbGlja2FibGU/OiBSZW5kZXJDbGlja2FibGVGbjxUPjtcbiAgc2VsZWN0ZWRJdGVtOiBUIHwgbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERyb3Bkb3duPFQgZXh0ZW5kcyBJdGVtPih7XG4gIGl0ZW1Cb2R5UmVuZGVyZXIsXG4gIGl0ZW1zLFxuICBvblNlbGVjdDogaGFuZGxlU2VsZWN0LFxuICBkaXNwbGF5LFxuICByZW5kZXJDbGlja2FibGUsXG4gIHNlbGVjdGVkSXRlbSxcbn06IERyb3Bkb3duUHJvcHM8VD4pIHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcmVmID0gdXNlT3V0c2lkZUNsaWNrKCgpID0+IHNldElzT3BlbihmYWxzZSkpO1xuICBjb25zdCBoYW5kbGVDbGljayA9IChpdGVtOiBUKSA9PiB7XG4gICAgaGFuZGxlU2VsZWN0KGl0ZW0pO1xuICAgIHNldElzT3BlbihmYWxzZSk7XG4gIH07XG4gIGNvbnN0IGlzRGlzYWJsZWQgPSAhaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwO1xuICBjb25zdCB0b2dnbGVJc09wZW4gPSAoKSA9PiBzZXRJc09wZW4oIWlzT3Blbik7XG5cbiAgcmV0dXJuIChcbiAgICA8TWVudUNvbnRhaW5lclxuICAgICAgYnV0dG9uPXtcbiAgICAgICAgdHlwZW9mIHJlbmRlckNsaWNrYWJsZSA9PT0gXCJmdW5jdGlvblwiID8gKFxuICAgICAgICAgIHJlbmRlckNsaWNrYWJsZSh7XG4gICAgICAgICAgICBkaXNwbGF5LFxuICAgICAgICAgICAgaXNEaXNhYmxlZCxcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbSxcbiAgICAgICAgICAgIHRvZ2dsZUlzT3BlbixcbiAgICAgICAgICB9KVxuICAgICAgICApIDogKFxuICAgICAgICAgIDxDbGlja2FibGVcbiAgICAgICAgICAgIGRpc3BsYXk9e2Rpc3BsYXl9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgb25DbGljaz17dG9nZ2xlSXNPcGVufVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHBsYWNlbWVudD17eyB2ZXJ0aWNhbDogXCJib3R0b21cIiwgaG9yaXpvbnRhbDogXCJsZWZ0XCIgfX1cbiAgICAgIHJlZj17cmVmfVxuICAgID5cbiAgICAgIDxNZW51IGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAge2l0ZW1zICYmXG4gICAgICAgICAgaXRlbXMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgICA8TWVudUl0ZW1cbiAgICAgICAgICAgICAgaXNBY3RpdmU9e2l0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWR9XG4gICAgICAgICAgICAgIGtleT17aXRlbS5pZH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ2xpY2soaXRlbSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtpdGVtQm9keVJlbmRlcmVyXG4gICAgICAgICAgICAgICAgPyBpdGVtQm9keVJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogaXRlbS5pZCA9PT0gc2VsZWN0ZWRJdGVtPy5pZCxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBpdGVtLm5hbWV9XG4gICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICkpfVxuICAgICAgPC9NZW51PlxuICAgIDwvTWVudUNvbnRhaW5lcj5cbiAgKTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbi5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgSWNvblByb3BzID0ge1xuICBhbHQ/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MSW1hZ2VFbGVtZW50PjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBzcmM6IHN0cmluZztcbiAgc2l6ZT86IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCIgfCBcInhsYXJnZVwiO1xufTtcblxuZnVuY3Rpb24gSWNvbih7XG4gIHNyYyxcbiAgYWx0LFxuICBjb250YWluZXJSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxufTogSWNvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGltZ1xuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmljb24sXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgeyBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQgfSxcbiAgICAgIF0pfVxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgLz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaWNvblwiOlwiWUEySUhRRDRvcHBPaW9aSUNId3p3dz09XCIsXCJzbWFsbFwiOlwicWR6czJFTW1CZGIwTXpOUzBpRGhNQT09XCIsXCJtZWRpdW1cIjpcIkk2ZUVHSUJLNTlPa2Rwd1VvdWFhdVE9PVwiLFwibGFyZ2VcIjpcIl8yYmk2SUVZaGRNYlBnUEpmd29QanVBPT1cIixcInhsYXJnZVwiOlwiY2trcjRaRk9WR3VDTjRFalBNcWVHQT09XCIsXCJpbnZlcnRlZFwiOlwiZW01ckw0bkFIMUl3ZjNNSGVJZVBtZz09XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ3MENwYXNqWXlMUi1pMlBOSW45RXNnPT1cIn07IiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE0IDVMNy41IDEyTDEgNScgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLWxpbmVjYXA9J3NxdWFyZScvJTNlICUzYy9zdmclM2VcIiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnUubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc09wZW4/OiBib29sZWFuO1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGZvb3Rlcj86IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIE1lbnUoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBjbGFzc05hbWUsXG4gIGlzT3BlbiA9IHRydWUsXG4gIGhlYWRlcixcbiAgZm9vdGVyLFxufTogTWVudVByb3BzKSB7XG4gIGlmICghaXNPcGVuKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMubWVudSxcbiAgICAgICAgICB7IFtzdHlsZXMub3Blbl06IGlzT3BlbiB9LFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgXSl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuc2Nyb2xsQ29udGFpbmVyfT5cbiAgICAgICAgICB7aGVhZGVyICYmIGlzT3BlbiAmJiA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT57aGVhZGVyfTwvaDM+fVxuICAgICAgICAgIDx1bD57aXNPcGVuICYmIGNoaWxkcmVufTwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7Zm9vdGVyICYmIGlzT3BlbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgIHN0eWxlcy5mb290ZXIsXG4gICAgICAgICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06ICFjaGlsZHJlbiB9LFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2Zvb3Rlcn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51XCI6XCJyU0Jmc0ZOampvb0pzREgtWCtZWGJ3PT1cIixcIm9wZW5cIjpcInZYN3ZnQTlabEY3VDlFUjlWSm9kYlE9PVwiLFwiZW50cmFuY2VcIjpcIkdwQjJMc2FkaHVHSlp2S29OT2RvekE9PVwiLFwiaGVhZGVyXCI6XCJvQVRsQkZnZXBaNWdBWkFyLUN4bkFBPT1cIixcImZvb3RlclwiOlwid0tlRTczellmYi03Y1JOLUY4T1kxZz09XCIsXCJub0JvcmRlclwiOlwiTEQ2TER2cy15bE1yUGdzbGo0eDNoZz09XCIsXCJzY3JvbGxDb250YWluZXJcIjpcIlQrYklwYWwrV0hVSC1oQTBHdzVyVmc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWFjdEVsZW1lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEZvcndhcmRlZFJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE1lbnVQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6IFwicmlnaHRcIiB8IFwibGVmdFwiO1xuICB2ZXJ0aWNhbDogXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG59O1xuXG50eXBlIE1lbnVDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYnV0dG9uPzogUmVhY3RFbGVtZW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59O1xuXG5mdW5jdGlvbiBNZW51Q29udGFpbmVyKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgYnV0dG9uLFxuICAgIGNsYXNzTmFtZSxcbiAgICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwibGVmdFwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiB9LFxuICB9OiBNZW51Q29udGFpbmVyUHJvcHMsXG4gIHJlZjogRm9yd2FyZGVkUmVmPEhUTUxEaXZFbGVtZW50PlxuKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAge2J1dHRvbn1cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMubWVudUNvbnRhaW5lcixcbiAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50Lmhvcml6b250YWxdLFxuICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnQudmVydGljYWxdLFxuICAgICAgICBdKX1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcndhcmRSZWYoTWVudUNvbnRhaW5lcik7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwicWN2RFNmRnQrdzBqYTJmcVBjMFM1dz09XCIsXCJtZW51Q29udGFpbmVyXCI6XCJMd3IxYTNiUC05NWFlenptYWNvSmZ3PT1cIixcInRvcFwiOlwiYkJIYnMrRldpNi16d1dNWkltRitOQT09XCIsXCJyaWdodFwiOlwiQjhNNDJOd29aOHBVVm01UjRKSnYxZz09XCIsXCJsZWZ0XCI6XCJwT0c3dFhmVEZrOHFxWHROQzBFLU93PT1cIixcImJvdHRvbVwiOlwidWN2TjBFRk1uczhiZlZ2c2k5ajl5UT09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUl0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTExJRWxlbWVudD4pID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBNZW51SXRlbSh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBpc0FjdGl2ZSA9IGZhbHNlLFxufTogTWVudUl0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51SXRlbSxcbiAgICAgICAgeyBbc3R5bGVzLmFjdGl2ZV06IGlzQWN0aXZlIH0sXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUl0ZW1cIjpcIm1KZDdkUlpOT3dZZThJOUNxRmx6cmc9PVwiLFwibm9QYWRkaW5nXCI6XCJ4Y2tET2RuUFBZS1RreW0yYXd0cmpBPT1cIixcImFjdGl2ZVwiOlwieCt5ckNxNUJ1K2pnWDdTUlVyOWZldz09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUxpbmtJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51TGlua0l0ZW1Qcm9wcyA9XG4gIHwge1xuICAgICAgYXM6IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBNZW51TGlua0l0ZW0oe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IE1lbnVMaW5rSXRlbVByb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIGRhdGEtdGVzdGlkPVwibWVudS1saW5rLWl0ZW1cIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51TGlua0l0ZW0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51TGlua0l0ZW07XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVMaW5rSXRlbVwiOlwib0VyOFpKWExuWnlESkJPUlp0SVY0dz09XCIsXCJub1BhZGRpbmdcIjpcIl8zVE5JSkFldEFTeXpiSStLbExUSEN3PT1cIixcImFjdGl2ZVwiOlwiZ2hhdUNUUFRCRUpBdUFvNjMyejVmUT09XCIsXCJtZW51SXRlbVwiOlwibjF4bjRFWXV4RXFPYzNmQ0VhbXozUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZUlucHV0IH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG5leHBvcnQgeyBGaWxlSW5wdXRTaXplIH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GaWxlSW5wdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRTaXplID0gU2l6ZTtcblxudHlwZSBQcm9wcyA9IHtcbiAgb25DaGFuZ2U6IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYWNjZXB0Pzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIHNpemU/OiBGaWxlSW5wdXRTaXplO1xufTtcblxuZnVuY3Rpb24gRmlsZUlucHV0KHtcbiAgY2hpbGRyZW4sXG4gIGFjY2VwdCxcbiAgb25DaGFuZ2UsXG4gIGlucHV0UmVmLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubGFiZWwsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmlucHV0fVxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGlkPVwiZmlsZVwiXG4gICAgICAgIGFjY2VwdD17YWNjZXB0fVxuICAgICAgICBtdWx0aXBsZT17bXVsdGlwbGV9XG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxlSW5wdXQ7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImlucHV0XCI6XCJlVXFhMzUrRW0yTGNoMjZOeGpidStRPT1cIixcImxhYmVsXCI6XCJueFcyMWg4VUkwTU50d28ya2NBZEl3PT1cIixcInNtYWxsXCI6XCJOZGExcEFjR0pjeURERVM1RVZKc293PT1cIixcImxhcmdlXCI6XCJ6cUxTM1lIWHRqbE1Cc0ZPenJ2RVpnPT1cIixcInhsYXJnZVwiOlwiVlpsNVd5QWt2MzAxLWhDQ3plNU1uUT09XCIsXCJpbnZlcnRlZFwiOlwidmxTYUpRSmh6dDZJTnZXaThOdFV3Zz09XCIsXCJyb3VuZGVkXCI6XCJiLXg1VHJ5U05HQ0Y5SFk4SjNIdEFBPT1cIixcIm5vU2hhZG93XCI6XCJfNXdsMTRKamYxeXhId0FMeG1FdzZNUT09XCIsXCJub0JvcmRlclwiOlwiZGxYV1FPbE5lK2FGa1ZiUHhETG00QT09XCIsXCJub1BhZGRpbmdcIjpcImlQeFVHLU9OMVhMT2tmVlB6dDdOWVE9PVwiLFwidHJhbnNwYXJlbnRcIjpcIkJQWEk5dTNoZ0F5ZEFjNUJ6emtDTmc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSk0zSlZYdDc3bkg5dXIrYUwrUllEZz09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiTVhhc2tmZld6MmstaHF0SFJ0MnZPUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvYXRpbmdQYW5lbCB9IGZyb20gXCIuL0Zsb2F0aW5nUGFuZWxcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFBsYWNlbWVudCA9IHtcbiAgaG9yaXpvbnRhbDpcbiAgICB8IFwicmlnaHRcIlxuICAgIHwgXCJyaWdodEVkZ2VcIlxuICAgIHwgXCJyaWdodE9uRWRnZVwiXG4gICAgfCBcImxlZnRcIlxuICAgIHwgXCJsZWZ0RWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJsZWZ0T25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHZlcnRpY2FsOlxuICAgIHwgXCJ0b3BcIlxuICAgIHwgXCJ0b3BFZGdlXCJcbiAgICB8IFwidG9wT25FZGdlXCJcbiAgICB8IFwiYm90dG9tXCJcbiAgICB8IFwiYm90dG9tRWRnZVwiXG4gICAgfCBcImJvdHRvbU9uRWRnZVwiXG4gICAgfCBcImNlbnRlclwiO1xuICBwYXJlbnQ6IFwidmlld3BvcnRcIiB8IFwiY29udGFpbmVyXCI7XG59O1xuXG50eXBlIEZsb2F0aW5nUGFuZWxQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgbGF5b3V0PzogXCJjb2x1bW5cIiB8IFwicm93XCI7XG4gIHBsYWNlbWVudD86IFBsYWNlbWVudDtcbn07XG5cbmZ1bmN0aW9uIEZsb2F0aW5nUGFuZWwoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbHVtblwiLFxuICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwiY2VudGVyXCIsIHZlcnRpY2FsOiBcImJvdHRvbVwiLCBwYXJlbnQ6IFwidmlld3BvcnRcIiB9LFxufTogRmxvYXRpbmdQYW5lbFByb3BzKSB7XG4gIGNvbnN0IGhvcml6b250YWxQbGFjZW1lbnQgPVxuICAgIHBsYWNlbWVudC5ob3Jpem9udGFsID09PSBcImNlbnRlclwiXG4gICAgICA/IFwiaG9yaXpvbnRhbENlbnRlclwiXG4gICAgICA6IHBsYWNlbWVudC5ob3Jpem9udGFsO1xuXG4gIGNvbnN0IHZlcnRpY2FsUGxhY2VtZW50ID1cbiAgICBwbGFjZW1lbnQudmVydGljYWwgPT09IFwiY2VudGVyXCIgPyBcInZlcnRpY2FsQ2VudGVyXCIgOiBwbGFjZW1lbnQudmVydGljYWw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiZmxvYXRpbmctcGFuZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tob3Jpem9udGFsUGxhY2VtZW50XSxcbiAgICAgICAgc3R5bGVzW3ZlcnRpY2FsUGxhY2VtZW50XSxcbiAgICAgICAgc3R5bGVzW2xheW91dF0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogcGxhY2VtZW50LnBhcmVudCAhPT0gXCJjb250YWluZXJcIixcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxvYXRpbmdQYW5lbDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJrVVRDcTdzTzVjUUhybjIwUEpVQ213PT1cIixcInJvd1wiOlwidGRuYzFiREhEbUdiZ0FjN1NKcjY5UT09XCIsXCJjb2x1bW5cIjpcIk1tdDA3Nk42QXh5SDROUkRwQ083V0E9PVwiLFwiZml4ZWRcIjpcIl85MmViUXZKNXhOS0pTOHpha0s3UzJBPT1cIixcInBsYWluXCI6XCJ5K2lkRHhaKzVNcHA3T0kzR1BMQUVnPT1cIixcInRyYW5zcGFyZW50XCI6XCJDRHFvaUswZ0NUSnBuSmdWb1lnSkRRPT1cIixcInRvcFwiOlwiR1BzSGxOUERiRDZLZE5RRUdqOHpRUT09XCIsXCJ0b3BFZGdlXCI6XCJ4Umcwb0FOcnhzeFhOQnlJcG5OSnZ3PT1cIixcInRvcE9uRWRnZVwiOlwiUUF5ZUZGR1JvbnhYUzlGZ0oyZCtXdz09XCIsXCJyaWdodFwiOlwiSThFRENKem8wWndUdGdiVlRNbXpkZz09XCIsXCJyaWdodEVkZ2VcIjpcIlcyQWhtM3h1YTJ2ZUMzSUNUMktRTkE9PVwiLFwicmlnaHRPbkVkZ2VcIjpcInlqQkNRWUVBOG1XaUk5OENGWDVMc3c9PVwiLFwiYm90dG9tXCI6XCJXSnh6WFFMLTVOUHZEZ25lVmdrVndBPT1cIixcImJvdHRvbUVkZ2VcIjpcIkdWSnMtLXBMRGpXdnU5Qy15MzR5Y3c9PVwiLFwiYm90dG9tT25FZGdlXCI6XCJERFZkLVBwbHhuTHBTTEZsR3RGaG53PT1cIixcImxlZnRcIjpcIm9VVE12akwwSHhHZW5VN2tKZFN4SEE9PVwiLFwibGVmdEVkZ2VcIjpcIkJpTnNBa01adWkrNWktS3pZeHEwY1E9PVwiLFwibGVmdE9uRWRnZVwiOlwiXzF2OGltSDBNVGotck1aMHJDLWloUWc9PVwiLFwiaG9yaXpvbnRhbENlbnRlclwiOlwiRDRwNUFhMDYzVG5tN20wdWFHaExrdz09XCIsXCJ2ZXJ0aWNhbENlbnRlclwiOlwiXzJkZUctWTJBM3p3NmtGK1dCbkVtanc9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b24gfSBmcm9tIFwiLi9JY29uQnV0dG9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgSWNvbkJ1dHRvblByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIHNyYzogc3RyaW5nO1xuICBhbHQ6IHN0cmluZztcbiAgYmFkZ2VDb250ZW50PzogUmVhY3ROb2RlO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHNpemU/OiBTaXplO1xuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIj47XG59O1xuXG5mdW5jdGlvbiBJY29uQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICBjb250YWluZXJSZWYsXG4gIHNyYyxcbiAgYWx0LFxuICBiYWRnZUNvbnRlbnQgPSBudWxsLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcImJ1dHRvblwiLFxufTogSWNvbkJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XG4gICAgICB7YmFkZ2VDb250ZW50ICYmIDxCdXR0b25CYWRnZT57YmFkZ2VDb250ZW50fTwvQnV0dG9uQmFkZ2U+fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIkJ2UXRzVUFhLWZRUG1YYnZWU1ZDTlE9PVwiLFwic21hbGxcIjpcIl84WmY0THpjZWlJb2VyN1BJVlI4QllBPT1cIixcIm1lZGl1bVwiOlwiXzdQRjJkbkpnWnhJRSt0UzMzeEs0S0E9PVwiLFwibGFyZ2VcIjpcIkViT1l2R0tYaUFhYm9oaTRPeTFDTXc9PVwiLFwieGxhcmdlXCI6XCJ1T2ZaOUxpR3puYUJHSXV4NDBwRkdnPT1cIixcInJvdW5kZWRcIjpcInZBajB4bWpYSlRmRGJXSUNWS0JvMmc9PVwiLFwidG9wT2Zmc2V0XCI6XCJfOFlTcy1raElEekllZlJSaDV6SDMrUT09XCIsXCJyaWdodE9mZnNldFwiOlwicTRqSWwyWEZPYnZzRE0tNFF4dnR1dz09XCIsXCJib3R0b21PZmZzZXRcIjpcIl84MktiRWNFWnpjUjVWcUhseDg2MlBRPT1cIixcImxlZnRPZmZzZXRcIjpcInhuYzErT0RGbUJQaWlmNUpvcVRuZEE9PVwiLFwiaW52ZXJ0ZWRcIjpcImJoVlVUZGtRbHRjdG1yWmUwVDcya3c9PVwiLFwibm9TaGFkb3dcIjpcIm5zZ2gyYzZjSHR6eGFSckxrdjZGenc9PVwiLFwibm9Cb3JkZXJcIjpcIlZ6eTZDNGRqdHBmTDJwVjVvWWNPUHc9PVwiLFwidHJhbnNwYXJlbnRcIjpcIkZ2ZFBTLSsxdGxzVFoxY2lFbHN2eFE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b25MaW5rIH0gZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmtcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5cbnR5cGUgT2Zmc2V0U2lkZSA9IFwidG9wXCIgfCBcInJpZ2h0XCIgfCBcImJvdHRvbVwiIHwgXCJsZWZ0XCI7XG5cbnR5cGUgSWNvbkJ1dHRvbkxpbmtQcm9wcyA9XG4gIHwge1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gICAgICBzcmM6IHN0cmluZztcbiAgICAgIGFsdDogc3RyaW5nO1xuICAgICAgYmFkZ2VDb250ZW50PzogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICAgICAgcm91bmRlZD86IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XG4gICAgICBzaXplPzogU2l6ZTtcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XG4gICAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gSWNvbkJ1dHRvbkxpbmsoe1xuICBhczogQ29tcG9uZW50LFxuICBjb250YWluZXJSZWYsXG4gIGNsYXNzTmFtZSxcbiAgc3JjLFxuICBhbHQsXG4gIGJhZGdlQ29udGVudCA9IG51bGwsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIC4uLnByb3BzXG59OiBJY29uQnV0dG9uTGlua1Byb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uLWJ1dHRvbi1saW5rXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCxcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8SWNvbiBzcmM9e3NyY30gYWx0PXthbHR9IHNpemU9e3NpemV9IGludmVydGVkPXtpbnZlcnRlZH0gLz5cbiAgICAgIHtiYWRnZUNvbnRlbnQgJiYgPEJ1dHRvbkJhZGdlPntiYWRnZUNvbnRlbnR9PC9CdXR0b25CYWRnZT59XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b25MaW5rO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIm1VaEM3WEJZZWhObDFmK041aFJPNEE9PVwiLFwic21hbGxcIjpcInNNUzFGZ00zd3dMZytMZ3V2Y1hEd2c9PVwiLFwibWVkaXVtXCI6XCJfMWpVODVtRVA1aWFXeW5jTExiOGxTQT09XCIsXCJsYXJnZVwiOlwiY0lnZ2dTMmY1UGFCQ0lUZnRzMHJBZz09XCIsXCJ4bGFyZ2VcIjpcIlQyemFvbXdMWUhReC1ZRi12RHR3SHc9PVwiLFwicm91bmRlZFwiOlwiRk1BaDZnc0ZSclVmRi1DK2h4RkpTQT09XCIsXCJ0b3BPZmZzZXRcIjpcInlZdnJJbVFaeXBLdEowY2IraEVkV1E9PVwiLFwicmlnaHRPZmZzZXRcIjpcIkVpTFFVZStCRDh1YnhkaitKUXVIenc9PVwiLFwiYm90dG9tT2Zmc2V0XCI6XCJfMHFITklSc20rTVI5cnlYcEptRU5RUT09XCIsXCJsZWZ0T2Zmc2V0XCI6XCJMbUlNbHh2cWtSamlJZ1lMSHhhWkJnPT1cIixcImludmVydGVkXCI6XCJCYytSaDZCOTcrNzRqa2VNZEN0cnpnPT1cIixcIm5vU2hhZG93XCI6XCJpR0dDR2lmMnlTY01JU0RrLTJta0ZRPT1cIixcIm5vQm9yZGVyXCI6XCJkbmpuMW9GdE5WRk4yZlJXbUtrWjNBPT1cIixcInRyYW5zcGFyZW50XCI6XCJad2lGMHU2S1RKRGd3UkM0V1NMM3JBPT1cIixcImRpc2FibGVkXCI6XCJtY1pMSnpUN1ZzN2JsUTlSeHc3UlV3PT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJbWFnZSwgSW1hZ2VQcm9wcyB9IGZyb20gXCIuL0ltYWdlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSW1hZ2UubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBJbWFnZVByb3BzID0ge1xuICBhbHQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvdmVyXCIgfCBcImNvbnRhaW5cIiB8IFwic3RyZXRjaEhvcml6b250YWxseVwiIHwgXCJzdHJldGNoVmVydGljYWxseVwiO1xuICBzcmM6IHN0cmluZztcbiAgc3JjV2lkdGg/OiBudW1iZXI7XG4gIHNyY0hlaWdodD86IG51bWJlcjtcbiAgZGVjb2Rpbmc/OiBcImFzeW5jXCIgfCBcInN5bmNcIiB8IFwiYXV0b1wiLFxuICBsb2FkaW5nPzogXCJlYWdlclwiIHwgXCJsYXp5XCJcbn07XG5cbmZ1bmN0aW9uIEltYWdlQ29tcG9uZW50KHtcbiAgc3JjLFxuICBhbHQsXG4gIHNyY1dpZHRoLFxuICBzcmNIZWlnaHQsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGxheW91dCA9IFwiY29udGFpblwiLFxuICBkZWNvZGluZz0gXCJhdXRvXCIsXG4gIGxvYWRpbmc9IFwiZWFnZXJcIlxufTogSW1hZ2VQcm9wcykge1xuICBjb25zdCBpbWFnZUVsZW1lbnQgPSAoXG4gICAgPGltZ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmltYWdlLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbWFnZVwiXG4gICAgICBhbHQ9e2FsdH1cbiAgICAgIHNyYz17c3JjfVxuICAgICAgd2lkdGg9e3NyY1dpZHRofVxuICAgICAgaGVpZ2h0PXtzcmNIZWlnaHR9XG4gICAgICBkZWNvZGluZz17ZGVjb2Rpbmd9XG4gICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgIC8+XG4gICk7XG5cbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICB7aW1hZ2VFbGVtZW50fVxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICBpbWFnZUVsZW1lbnRcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VDb21wb25lbnQ7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzlnUVNSLStncW81ckR2V1BtUW9BZVE9PVwiLFwiaGFzT3ZlcmxheVwiOlwiaWkzKzZLK0ZXNFlqZVFGbS1JTjNzQT09XCIsXCJvdmVybGF5XCI6XCJfMDBFeE5jM0t3K0hPZlRDRmEzNEdJdz09XCIsXCJpbWFnZVwiOlwicndENXJIY1pGUk5hNGRIbzZqM0p5UT09XCIsXCJjb3ZlclwiOlwiXzZBYU4xVDZTWTZFZWorRmFRdGE0Mmc9PVwiLFwiY29udGFpblwiOlwiRVFEa1AwRjV6ekppdEY4dU82SCttQT09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJHQktQa2M4cnN5alVWdUNwMU9sQm9RPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJfNVN6d1NKKzZaNFItWWExMWd3THJTUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXcgfSBmcm9tIFwiLi9MaXN0Vmlld1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0l0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXdMaW5rSXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3TGlua0l0ZW1cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBMaXN0Vmlld1Byb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGhlYWRlcj86IHN0cmluZztcbiAgaGVhZGVyQWN0aW9ucz86IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3KHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGhlYWRlckFjdGlvbnMsXG59OiBMaXN0Vmlld1Byb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgeyhoZWFkZXIgfHwgaGVhZGVyQWN0aW9ucykgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+XG4gICAgICAgICAge2hlYWRlciAmJiA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyTGFiZWx9PntoZWFkZXJ9PC9oMz59XG4gICAgICAgICAge2hlYWRlckFjdGlvbnN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDx1bCBjbGFzc05hbWU9e3N0eWxlcy5saXN0fT57Y2hpbGRyZW59PC91bD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXc7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwibEp6ZFAwbW5mcGdsRlNZdEtLWXpKdz09XCIsXCJoZWFkZXJcIjpcIl84MnZDUTd4cjBOa1k0VWx5U1BrcGt3PT1cIixcImhlYWRlckxhYmVsXCI6XCJ1bldlUGRJS240WGF3UnVMN0NQRDBnPT1cIixcImxpc3RcIjpcIl81QlgrWlotQWFRdXRjemJEUzJlNS13PT1cIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGlzdFZpZXdJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gTGlzdFZpZXdJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGFjdGl2ZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgb25DbGljayA9ICgpID0+IHt9LFxufTogTGlzdFZpZXdJdGVtUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxuICAgICAgICBhbGlnbj17YWxpZ259XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9CdXR0b24+XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdJdGVtO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQnV0dG9uTGluayB9IGZyb20gXCIuLi9CdXR0b25MaW5rXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgTGlzdFZpZXdMaW5rSXRlbVByb3BzID1cbiAgfCB7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50OiBib29sZWFuO1xuICAgICAgbm9QYWRkaW5nOiBib29sZWFuO1xuICAgICAgYWxpZ246IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICAgIHNpemU6IFNpemU7XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gTGlzdFZpZXdMaW5rSXRlbSh7XG4gIGNoaWxkcmVuLFxuICBhczogQ29tcG9uZW50LFxuICBhY3RpdmUgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIC4uLnByb3BzXG59OiBMaXN0Vmlld0xpbmtJdGVtUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XG4gICAgICA8QnV0dG9uTGlua1xuICAgICAgICBhcz17Q29tcG9uZW50fVxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxuICAgICAgICBhbGlnbj17YWxpZ259XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0J1dHRvbkxpbms+XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdMaW5rSXRlbTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgT3ZlcmxheSB9IGZyb20gXCIuL092ZXJsYXlcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9PdmVybGF5Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBPdmVybGF5UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgaXNGaXhlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gT3ZlcmxheSh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIGlzRml4ZWQgPSBmYWxzZSxcbiAgb25DbGljayA9ICgpID0+IHt9LFxufTogT3ZlcmxheVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cIm92ZXJsYXlcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuZml4ZWRdOiBpc0ZpeGVkLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT3ZlcmxheTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwiRUlCOS1sNThnQzNadnRXOHZ0VUFMQT09XCIsXCJ0cmFuc3BhcmVudFwiOlwiQ00xLW4zc0c4WU5kNzNxSlZYTTIyZz09XCIsXCJmaXhlZFwiOlwib08xaVRObFBqZGExZmpyWWV5THVVQT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGV4dElucHV0IH0gZnJvbSBcIi4vVGV4dElucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGV4dElucHV0Lm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUsIFRleHRJbnB1dFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBUZXh0SW5wdXRQcm9wcyA9IHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uQmx1cj86ICgpID0+IHZvaWQ7XG4gIG9uS2V5RG93bj86IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogVGV4dElucHV0VHlwZTtcbiAgc2l6ZT86IFNpemU7XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG59O1xuXG5mdW5jdGlvbiBUZXh0SW5wdXQoe1xuICBsYWJlbCxcbiAgb25DaGFuZ2UsXG4gIG9uQmx1cixcbiAgb25LZXlEb3duLFxuICBwbGFjZWhvbGRlcixcbiAgdmFsdWUsXG4gIG5hbWUsXG4gIGlucHV0UmVmLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSA9IFwidGV4dFwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbn06IFRleHRJbnB1dFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlXVxuICApO1xuXG4gIGNvbnN0IGlucHV0RWxlbWVudCA9IChcbiAgICA8aW5wdXRcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW5wdXRcIlxuICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50ZXh0SW5wdXQsIHN0eWxlc1tzaXplXSwge1tzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcn1dKX1cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgbmFtZT17bmFtZX1cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAvPlxuICApO1xuICBpZiAobGFiZWwpIHtcbiAgICByZXR1cm4gPExhYmVsIHZhbHVlPXtsYWJlbH0+e2lucHV0RWxlbWVudH08L0xhYmVsPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gPD57aW5wdXRFbGVtZW50fTwvPjtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0ZXh0SW5wdXRcIjpcImg2UFlKQXp5dFZPazlCZUs1WjAra2c9PVwiLFwic21hbGxcIjpcIlVYbi1CQ1ZnODF5TWQ4Rm9VZnhLU0E9PVwiLFwibWVkaXVtXCI6XCJfNGFpUDZneE5IaHJXYmFjNGsxZ3JVdz09XCIsXCJsYXJnZVwiOlwiTWxuUFhZT1V5UTdoZ0k3c3cxbzB4QT09XCIsXCJ4bGFyZ2VcIjpcIkhHQnVLSmE5WGp4Qjh1VmhLb3AwM0E9PVwiLFwibm9Cb3JkZXJcIjpcInNQblNDR1VOWlhyb0VsU1FSMTkzR1E9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0IH0gZnJvbSBcIi4vVG9hc3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3RDb250YWluZXIgfSBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lclwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3QubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gVG9hc3QoeyBjaGlsZHJlbiwgY29udGFpbmVyUmVmLCBvbkNsaWNrID0gKCkgPT4ge30gfTogVG9hc3RQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudG9hc3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdFwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RcIjpcInZXYTItMW1PRlUraVYxNGpxN1FQc1E9PVwiLFwiZW50cmFuY2VcIjpcImZUc1dzS3JBS2x3VCtHT0U0d0F5U1E9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3RDb250YWluZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0Q29udGFpbmVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcbmZ1bmN0aW9uIFRvYXN0Q29udGFpbmVyKHsgY2hpbGRyZW4sIGJhc2VaSW5kZXggfTogVG9hc3RDb250YWluZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50b2FzdENvbnRhaW5lcl0pfVxuICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0LWNvbnRhaW5lclwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdENvbnRhaW5lcjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RDb250YWluZXJcIjpcIl8yLVh1MnNaTXZOOXRnRHMraXlMYzlRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBWaWRlbywgVmlkZW9Qcm9wcyB9IGZyb20gXCIuL1ZpZGVvXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9WaWRlby5tb2R1bGUuY3NzXCI7XG5cbi8qKlxuICogVGhlcmUgaXMgYSBrbm93biBpc3N1ZSBpbiBSZWFjdCBpbiByZWdhcmRzIHRvIHRoZSAnbXV0ZWQnIHByb3BlcnR5IHdoaWNoIGNhdXNlcyB0aGUgd2FybmluZzpcbiAqIFwiV2FybmluZzogdW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuXCJcbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEwMzg5XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY1NDRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvcmVhY3QtdGVzdGluZy1saWJyYXJ5L2lzc3Vlcy80NzBcbiAqL1xuXG50eXBlIExheW91dCA9IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XG5cbmV4cG9ydCB0eXBlIFZpZGVvUHJvcHMgPSB7XG4gIHNyYzogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGxheW91dD86IExheW91dDtcbiAgYXV0b1BsYXk/OiBib29sZWFuO1xuICBsb29wPzogYm9vbGVhbjtcbiAgbXV0ZWQ/OiBib29sZWFuO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgcG9zdGVyPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVmlkZW8oe1xuICBzcmMsXG4gIHR5cGUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIHBvc3RlcixcbiAgbXV0ZWQgPSB0cnVlLFxuICBsb29wID0gdHJ1ZSxcbiAgYXV0b1BsYXkgPSB0cnVlLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbn06IFZpZGVvUHJvcHMpIHtcbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICA8dmlkZW9cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICAgIGxvb3A9e2xvb3B9XG4gICAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cbiAgICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICAgIHBsYXlzSW5saW5lXG4gICAgICA+XG4gICAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICAgIDwvdmlkZW8+XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIDx2aWRlb1xuICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICBsb29wPXtsb29wfVxuICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxuICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICBwbGF5c0lubGluZVxuICAgID5cbiAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICA8L3ZpZGVvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaWRlbztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ1bFdFLUVwcjg1RjBtVXQ3TzFnVVRRPT1cIixcImhhc092ZXJsYXlcIjpcInpLN3UxbmtqYzh4N1lEQWZZUUNUcHc9PVwiLFwidmlkZW9cIjpcImZSNEQ1NkxmZHVvQlctZmltZmJUMHc9PVwiLFwiY292ZXJcIjpcIlZYUXM0UFVuV0d5dzU2ZzYwWnRmV2c9PVwiLFwiY29udGFpblwiOlwiZ3hmbFV6TzRycUNCQUd1enNZRUlldz09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJJLTYzS200TlkxVzRRZ01oZmdVNU1nPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJ2Tk5oSmxnSVRNK29uZjd6ZHphdWZnPT1cIixcIm92ZXJsYXlcIjpcInd4dWw3VVVabG1hckY4NlNHcmQtdHc9PVwifTsiLCJleHBvcnQgeyBOdW1wYWQgfSBmcm9tIFwiLi9OdW1wYWRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL051bXBhZC5tb2R1bGUuY3NzXCI7XG5cbmltcG9ydCBiYWNrc3BhY2VJY29uIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvYmFja3NwYWNlLnN2Z1wiO1xuXG50eXBlIERpZ2l0ID0gMCB8IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDcgfCA4IHwgOTtcblxuY29uc3QgYXBwZW5kRGlnaXQgPSAobnVtYmVyOiBudW1iZXIsIGRpZ2l0OiBEaWdpdCkgPT4ge1xuICByZXR1cm4gbnVtYmVyICogMTAgKyBkaWdpdDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnVtcGFkUHJvcHMge1xuICBudW1iZXI6IG51bWJlcjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBvbkNoYW5nZTogKG5ld051bWJlcjogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgTnVtcGFkID0gUmVhY3QuZm9yd2FyZFJlZjxIVE1MRGl2RWxlbWVudCwgTnVtcGFkUHJvcHM+KFxuICAoeyBudW1iZXIsIG9uQ2hhbmdlLCBkaXNhYmxlZCA9IGZhbHNlIH0sIHJlZikgPT4ge1xuICAgIGNvbnN0IGVtaXROdW1iZXIgPVxuICAgICAgKG5ld051bWJlcjogbnVtYmVyKSA9PlxuICAgICAgKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQsIE1vdXNlRXZlbnQ+KSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25DaGFuZ2UobmV3TnVtYmVyKTtcbiAgICAgIH07XG5cbiAgICBjb25zdCBOdW1wYWRLZXlzID0gQXJyYXkoMTApXG4gICAgICAuZmlsbCgwKVxuICAgICAgLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbnVtcGFkVmFsdWUgPSAoKGluZGV4ICsgMSkgJSAxMCkgYXMgRGlnaXQ7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICBub1NoYWRvd1xuICAgICAgICAgICAgb25DbGljaz17ZW1pdE51bWJlcihhcHBlbmREaWdpdChudW1iZXIsIG51bXBhZFZhbHVlKSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge251bXBhZFZhbHVlfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5udW1wYWR9IGRhdGEtdGVzdGlkPVwibnVtcGFkXCIgcmVmPXtyZWZ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLm51bWJlcnN9PlxuICAgICAgICAgIHtOdW1wYWRLZXlzfVxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICBub1NoYWRvd1xuICAgICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIG9uQ2xpY2s9e2VtaXROdW1iZXIoTWF0aC5mbG9vcihudW1iZXIgLyAxMCkpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGFsdD1cIkJhY2tzcGFjZVwiIHNyYz17YmFja3NwYWNlSWNvbn0gLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4pO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJudW1wYWRcIjpcIlBlTysycEJJTG1HaHVYZittUVBKQ2c9PVwiLFwibnVtYmVyc1wiOlwiXzMrWThEZE80dkJKSnRPT3FSQmh0cWc9PVwifTsiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzY5JyBoZWlnaHQ9JzI3JyB2aWV3Qm94PScwIDAgNjkgMjcnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQuMTMzMyAyNkwxMy43ODg2IDI2LjM2MjJDMTMuODgxNiAyNi40NTA3IDE0LjAwNSAyNi41IDE0LjEzMzMgMjYuNVYyNlpNMSAxMy41TDAuNjU1Mjg3IDEzLjEzNzhDMC41NTYxMjcgMTMuMjMyMiAwLjUgMTMuMzYzMSAwLjUgMTMuNUMwLjUgMTMuNjM2OSAwLjU1NjEyNyAxMy43Njc4IDAuNjU1Mjg3IDEzLjg2MjJMMSAxMy41Wk0xNC4xMzMzIDFWMC41QzE0LjAwNSAwLjUgMTMuODgxNiAwLjU0OTM0NSAxMy43ODg2IDAuNjM3ODIyTDE0LjEzMzMgMVpNNjcuNSAyVjI1SDY4LjVWMkg2Ny41Wk02My40NjY3IDI1LjVIMTQuMTMzM1YyNi41SDYzLjQ2NjdWMjUuNVpNMTQuNDc4IDI1LjYzNzhMMS4zNDQ3MSAxMy4xMzc4TDAuNjU1Mjg3IDEzLjg2MjJMMTMuNzg4NiAyNi4zNjIyTDE0LjQ3OCAyNS42Mzc4Wk0xLjM0NDcxIDEzLjg2MjJMMTQuNDc4IDEuMzYyMThMMTMuNzg4NiAwLjYzNzgyMkwwLjY1NTI4NyAxMy4xMzc4TDEuMzQ0NzEgMTMuODYyMlpNMTQuMTMzMyAxLjVINjMuNDY2N1YwLjVIMTQuMTMzM1YxLjVaTTY3IDI1LjVINjMuNDY2N1YyNi41SDY3VjI1LjVaTTY3IDAuNUg2My40NjY3VjEuNUg2N1YwLjVaTTY3LjUgMjVDNjcuNSAyNS4yNzYxIDY3LjI3NjEgMjUuNSA2NyAyNS41VjI2LjVDNjcuODI4NCAyNi41IDY4LjUgMjUuODI4NCA2OC41IDI1SDY3LjVaTTY4LjUgMkM2OC41IDEuMTcxNTcgNjcuODI4NCAwLjUgNjcgMC41VjEuNUM2Ny4yNzYxIDEuNSA2Ny41IDEuNzIzODYgNjcuNSAySDY4LjVaJyBmaWxsPSclMjMyNjI2MjYnLyUzZSAlM2NwYXRoIGQ9J00zMi42NDY0IDYuMzUzNTVMNDYuNjQ2NCAyMC4zNTM2TDQ3LjM1MzYgMTkuNjQ2NEwzMy4zNTM2IDUuNjQ2NDVMMzIuNjQ2NCA2LjM1MzU1Wk00Ni42NDY0IDUuNjQ2NDVMMzIuNjQ2NCAxOS42NDY0TDMzLjM1MzYgMjAuMzUzNkw0Ny4zNTM2IDYuMzUzNTVMNDYuNjQ2NCA1LjY0NjQ1WicgZmlsbD0nJTIzMjYyNjI2Jy8lM2UgJTNjL3N2ZyUzZVwiIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU91dHNpZGVDbGljayhjYWxsYmFjaykge1xuICAgIHZhciByZWYgPSB1c2VSZWYoKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghcmVmLmN1cnJlbnQgfHwgcmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgfTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlQ2xpY2spO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgaGFuZGxlQ2xpY2spO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlQ2xpY2spO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrKTtcbiAgICAgICAgfTtcbiAgICB9LCBbY2FsbGJhY2tdKTtcbiAgICByZXR1cm4gcmVmO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlT3V0c2lkZUNsaWNrLmpzLm1hcCIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcclxuICAgICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICByZXR1cm4gcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcclxuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xyXG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxufVxyXG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yLCBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVByb21pc2UoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoe1xuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICB9KSwgMiksIHJlc3VsdCA9IF9hWzBdLCBzZXRSZXN1bHQgPSBfYVsxXTtcbiAgICAvLyBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgaWYgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB1bm1vdW50ZWRcbiAgICAvLyB3aGlsZSB0aGUgcHJvbWlzZSB3YXMgc3RpbGwgcGVuZGluZyB0byBhdm9pZCBzZXR0aW5nIHN0YXRlXG4gICAgLy8gb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cbiAgICB2YXIgaGFzVW5tb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaGFzVW5tb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAocHJvbWlzZSkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSwgZXJyb3JfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDNdKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHByb21pc2VdO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VubW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBkYXRhXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGVycm9yXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbm1vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7IH0sIFtoYXNVbm1vdW50ZWRdKTtcbiAgICByZXR1cm4gW3Jlc3VsdCwgZGlzcGF0Y2hdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlUHJvbWlzZS5qcy5tYXAiLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlU3RhdGUsIGNyZWF0ZUVsZW1lbnQsIHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZURlYnVnVmFsdWUgfSBmcm9tICdyZWFjdCc7XG5cbi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcblxyXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgfTtcbi8vIFVzaW5nIG5vb3AoKSBhcyB0aGUgdW5kZWZpbmVkIHZhbHVlIGFzIHVuZGVmaW5lZCBjYW4gcG9zc2libHkgYmUgcmVwbGFjZWRcbi8vIGJ5IHNvbWV0aGluZyBlbHNlLiAgUHJldHRpZXIgaWdub3JlIGFuZCBleHRyYSBwYXJlbnRoZXNlcyBhcmUgbmVjZXNzYXJ5IGhlcmVcbi8vIHRvIGVuc3VyZSB0aGF0IHRzYyBkb2Vzbid0IHJlbW92ZSB0aGUgX19OT0lOTElORV9fIGNvbW1lbnQuXG4vLyBwcmV0dGllci1pZ25vcmVcbnZhciBVTkRFRklORUQgPSAoIC8qI19fTk9JTkxJTkVfXyovbm9vcCgpKTtcbnZhciBPQkpFQ1QgPSBPYmplY3Q7XG52YXIgaXNVbmRlZmluZWQgPSBmdW5jdGlvbiAodikgeyByZXR1cm4gdiA9PT0gVU5ERUZJTkVEOyB9O1xudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gdHlwZW9mIHYgPT0gJ2Z1bmN0aW9uJzsgfTtcbnZhciBtZXJnZU9iamVjdHMgPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gT0JKRUNULmFzc2lnbih7fSwgYSwgYik7IH07XG52YXIgU1RSX1VOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuLy8gTk9URTogVXNlIGZ1bmN0aW9uIHRvIGd1YXJhbnRlZSBpdCdzIHJlLWV2YWx1YXRlZCBiZXR3ZWVuIGpzZG9tIGFuZCBub2RlIHJ1bnRpbWUgZm9yIHRlc3RzLlxudmFyIGhhc1dpbmRvdyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT0gU1RSX1VOREVGSU5FRDsgfTtcbnZhciBoYXNEb2N1bWVudCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGVvZiBkb2N1bWVudCAhPSBTVFJfVU5ERUZJTkVEOyB9O1xudmFyIGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaGFzV2luZG93KCkgJiYgdHlwZW9mIHdpbmRvd1sncmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10gIT0gU1RSX1VOREVGSU5FRDtcbn07XG5cbi8vIHVzZSBXZWFrTWFwIHRvIHN0b3JlIHRoZSBvYmplY3QtPmtleSBtYXBwaW5nXG4vLyBzbyB0aGUgb2JqZWN0cyBjYW4gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuXG4vLyBXZWFrTWFwIHVzZXMgYSBoYXNodGFibGUgdW5kZXIgdGhlIGhvb2QsIHNvIHRoZSBsb29rdXBcbi8vIGNvbXBsZXhpdHkgaXMgYWxtb3N0IE8oMSkuXG52YXIgdGFibGUgPSBuZXcgV2Vha01hcCgpO1xuLy8gY291bnRlciBvZiB0aGUga2V5XG52YXIgY291bnRlciA9IDA7XG4vLyBBIHN0YWJsZSBoYXNoIGltcGxlbWVudGF0aW9uIHRoYXQgc3VwcG9ydHM6XG4vLyAtIEZhc3QgYW5kIGVuc3VyZXMgdW5pcXVlIGhhc2ggcHJvcGVydGllc1xuLy8gLSBIYW5kbGVzIHVuc2VyaWFsaXphYmxlIHZhbHVlc1xuLy8gLSBIYW5kbGVzIG9iamVjdCBrZXkgb3JkZXJpbmdcbi8vIC0gR2VuZXJhdGVzIHNob3J0IHJlc3VsdHNcbi8vXG4vLyBUaGlzIGlzIG5vdCBhIHNlcmlhbGl6YXRpb24gZnVuY3Rpb24sIGFuZCB0aGUgcmVzdWx0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlXG4vLyBwYXJzaWJsZS5cbnZhciBzdGFibGVIYXNoID0gZnVuY3Rpb24gKGFyZykge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIGFyZztcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcmcgJiYgYXJnLmNvbnN0cnVjdG9yO1xuICAgIHZhciBpc0RhdGUgPSBjb25zdHJ1Y3RvciA9PSBEYXRlO1xuICAgIHZhciByZXN1bHQ7XG4gICAgdmFyIGluZGV4O1xuICAgIGlmIChPQkpFQ1QoYXJnKSA9PT0gYXJnICYmICFpc0RhdGUgJiYgY29uc3RydWN0b3IgIT0gUmVnRXhwKSB7XG4gICAgICAgIC8vIE9iamVjdC9mdW5jdGlvbiwgbm90IG51bGwvZGF0ZS9yZWdleHAuIFVzZSBXZWFrTWFwIHRvIHN0b3JlIHRoZSBpZCBmaXJzdC5cbiAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGhhc2hlZCwgZGlyZWN0bHkgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICAgIHJlc3VsdCA9IHRhYmxlLmdldChhcmcpO1xuICAgICAgICBpZiAocmVzdWx0KVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGhhc2ggZmlyc3QgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3Rpb24gYmVmb3JlIGVudGVyaW5nIHRoZVxuICAgICAgICAvLyByZWN1cnNpdmUgYHN0YWJsZUhhc2hgIGNhbGxzLlxuICAgICAgICAvLyBGb3Igb3RoZXIgb2JqZWN0cyBsaWtlIHNldCBhbmQgbWFwLCB3ZSB1c2UgdGhpcyBpZCBkaXJlY3RseSBhcyB0aGUgaGFzaC5cbiAgICAgICAgcmVzdWx0ID0gKytjb3VudGVyICsgJ34nO1xuICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICBpZiAoY29uc3RydWN0b3IgPT0gQXJyYXkpIHtcbiAgICAgICAgICAgIC8vIEFycmF5LlxuICAgICAgICAgICAgcmVzdWx0ID0gJ0AnO1xuICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJnLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdGFibGVIYXNoKGFyZ1tpbmRleF0pICsgJywnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uc3RydWN0b3IgPT0gT0JKRUNUKSB7XG4gICAgICAgICAgICAvLyBPYmplY3QsIHNvcnQga2V5cy5cbiAgICAgICAgICAgIHJlc3VsdCA9ICcjJztcbiAgICAgICAgICAgIHZhciBrZXlzID0gT0JKRUNULmtleXMoYXJnKS5zb3J0KCk7XG4gICAgICAgICAgICB3aGlsZSAoIWlzVW5kZWZpbmVkKChpbmRleCA9IGtleXMucG9wKCkpKSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGluZGV4ICsgJzonICsgc3RhYmxlSGFzaChhcmdbaW5kZXhdKSArICcsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBpc0RhdGVcbiAgICAgICAgICAgID8gYXJnLnRvSlNPTigpXG4gICAgICAgICAgICA6IHR5cGUgPT0gJ3N5bWJvbCdcbiAgICAgICAgICAgICAgICA/IGFyZy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgOiB0eXBlID09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoYXJnKVxuICAgICAgICAgICAgICAgICAgICA6ICcnICsgYXJnO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBEdWUgdG8gYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTY3ODA3NSxcbiAqIGl0J3Mgbm90IHJlbGlhYmxlIHRvIGRldGVjdCBpZiB0aGUgYnJvd3NlciBpcyBjdXJyZW50bHkgb25saW5lIG9yIG9mZmxpbmVcbiAqIGJhc2VkIG9uIGBuYXZpZ2F0b3Iub25MaW5lYC5cbiAqIEFzIGEgd29yayBhcm91bmQsIHdlIGFsd2F5cyBhc3N1bWUgaXQncyBvbmxpbmUgb24gZmlyc3QgbG9hZCwgYW5kIGNoYW5nZVxuICogdGhlIHN0YXR1cyB1cG9uIGBvbmxpbmVgIG9yIGBvZmZsaW5lYCBldmVudHMuXG4gKi9cbnZhciBvbmxpbmUgPSB0cnVlO1xudmFyIGlzT25saW5lID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb25saW5lOyB9O1xudmFyIGhhc1dpbiA9IGhhc1dpbmRvdygpO1xudmFyIGhhc0RvYyA9IGhhc0RvY3VtZW50KCk7XG4vLyBGb3Igbm9kZSBhbmQgUmVhY3QgTmF0aXZlLCBgYWRkL3JlbW92ZUV2ZW50TGlzdGVuZXJgIGRvZXNuJ3QgZXhpc3Qgb24gd2luZG93LlxudmFyIG9uV2luZG93RXZlbnQgPSBoYXNXaW4gJiYgd2luZG93LmFkZEV2ZW50TGlzdGVuZXJcbiAgICA/IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyLmJpbmQod2luZG93KVxuICAgIDogbm9vcDtcbnZhciBvbkRvY3VtZW50RXZlbnQgPSBoYXNEb2MgPyBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyLmJpbmQoZG9jdW1lbnQpIDogbm9vcDtcbnZhciBvZmZXaW5kb3dFdmVudCA9IGhhc1dpbiAmJiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lclxuICAgID8gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh3aW5kb3cpXG4gICAgOiBub29wO1xudmFyIG9mZkRvY3VtZW50RXZlbnQgPSBoYXNEb2NcbiAgICA/IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZChkb2N1bWVudClcbiAgICA6IG5vb3A7XG52YXIgaXNWaXNpYmxlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2aXNpYmlsaXR5U3RhdGUgPSBoYXNEb2MgJiYgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlO1xuICAgIHJldHVybiBpc1VuZGVmaW5lZCh2aXNpYmlsaXR5U3RhdGUpIHx8IHZpc2liaWxpdHlTdGF0ZSAhPT0gJ2hpZGRlbic7XG59O1xudmFyIGluaXRGb2N1cyA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIC8vIGZvY3VzIHJldmFsaWRhdGVcbiAgICBvbkRvY3VtZW50RXZlbnQoJ3Zpc2liaWxpdHljaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgb25XaW5kb3dFdmVudCgnZm9jdXMnLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb2ZmRG9jdW1lbnRFdmVudCgndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ2ZvY3VzJywgY2FsbGJhY2spO1xuICAgIH07XG59O1xudmFyIGluaXRSZWNvbm5lY3QgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyByZXZhbGlkYXRlIG9uIHJlY29ubmVjdGVkXG4gICAgdmFyIG9uT25saW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBvbmxpbmUgPSB0cnVlO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gICAgLy8gbm90aGluZyB0byByZXZhbGlkYXRlLCBqdXN0IHVwZGF0ZSB0aGUgc3RhdHVzXG4gICAgdmFyIG9uT2ZmbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb25saW5lID0gZmFsc2U7XG4gICAgfTtcbiAgICBvbldpbmRvd0V2ZW50KCdvbmxpbmUnLCBvbk9ubGluZSk7XG4gICAgb25XaW5kb3dFdmVudCgnb2ZmbGluZScsIG9uT2ZmbGluZSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29ubGluZScsIG9uT25saW5lKTtcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIH07XG59O1xudmFyIHByZXNldCA9IHtcbiAgICBpc09ubGluZTogaXNPbmxpbmUsXG4gICAgaXNWaXNpYmxlOiBpc1Zpc2libGVcbn07XG52YXIgZGVmYXVsdENvbmZpZ09wdGlvbnMgPSB7XG4gICAgaW5pdEZvY3VzOiBpbml0Rm9jdXMsXG4gICAgaW5pdFJlY29ubmVjdDogaW5pdFJlY29ubmVjdFxufTtcblxudmFyIElTX1NFUlZFUiA9ICFoYXNXaW5kb3coKSB8fCAnRGVubycgaW4gd2luZG93O1xuLy8gUG9seWZpbGwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG52YXIgckFGID0gZnVuY3Rpb24gKGYpIHtcbiAgICByZXR1cm4gaGFzUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkgPyB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddKGYpIDogc2V0VGltZW91dChmLCAxKTtcbn07XG4vLyBSZWFjdCBjdXJyZW50bHkgdGhyb3dzIGEgd2FybmluZyB3aGVuIHVzaW5nIHVzZUxheW91dEVmZmVjdCBvbiB0aGUgc2VydmVyLlxuLy8gVG8gZ2V0IGFyb3VuZCBpdCwgd2UgY2FuIGNvbmRpdGlvbmFsbHkgdXNlRWZmZWN0IG9uIHRoZSBzZXJ2ZXIgKG5vLW9wKSBhbmRcbi8vIHVzZUxheW91dEVmZmVjdCBpbiB0aGUgYnJvd3Nlci5cbnZhciB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gSVNfU0VSVkVSID8gdXNlRWZmZWN0IDogdXNlTGF5b3V0RWZmZWN0O1xuLy8gVGhpcyBhc3NpZ25tZW50IGlzIHRvIGV4dGVuZCB0aGUgTmF2aWdhdG9yIHR5cGUgdG8gdXNlIGVmZmVjdGl2ZVR5cGUuXG52YXIgbmF2aWdhdG9yQ29ubmVjdGlvbiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmXG4gICAgbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4vLyBBZGp1c3QgdGhlIGNvbmZpZyBiYXNlZCBvbiBzbG93IGNvbm5lY3Rpb24gc3RhdHVzICg8PSA3MEticHMpLlxudmFyIHNsb3dDb25uZWN0aW9uID0gIUlTX1NFUlZFUiAmJlxuICAgIG5hdmlnYXRvckNvbm5lY3Rpb24gJiZcbiAgICAoWydzbG93LTJnJywgJzJnJ10uaW5jbHVkZXMobmF2aWdhdG9yQ29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlKSB8fFxuICAgICAgICBuYXZpZ2F0b3JDb25uZWN0aW9uLnNhdmVEYXRhKTtcblxudmFyIHNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihrZXkpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXMgbm90IHJlYWR5XG4gICAgICAgICAgICBrZXkgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgYXJncyA9IFtdLmNvbmNhdChrZXkpO1xuICAgIC8vIElmIGtleSBpcyBub3QgZmFsc3ksIG9yIG5vdCBhbiBlbXB0eSBhcnJheSwgaGFzaCBpdC5cbiAgICBrZXkgPVxuICAgICAgICB0eXBlb2Yga2V5ID09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGtleVxuICAgICAgICAgICAgOiAoQXJyYXkuaXNBcnJheShrZXkpID8ga2V5Lmxlbmd0aCA6IGtleSlcbiAgICAgICAgICAgICAgICA/IHN0YWJsZUhhc2goa2V5KVxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgdmFyIGluZm9LZXkgPSBrZXkgPyAnJHN3ciQnICsga2V5IDogJyc7XG4gICAgcmV0dXJuIFtrZXksIGFyZ3MsIGluZm9LZXldO1xufTtcblxuLy8gR2xvYmFsIHN0YXRlIHVzZWQgdG8gZGVkdXBsaWNhdGUgcmVxdWVzdHMgYW5kIHN0b3JlIGxpc3RlbmVyc1xudmFyIFNXUkdsb2JhbFN0YXRlID0gbmV3IFdlYWtNYXAoKTtcblxudmFyIEZPQ1VTX0VWRU5UID0gMDtcbnZhciBSRUNPTk5FQ1RfRVZFTlQgPSAxO1xudmFyIE1VVEFURV9FVkVOVCA9IDI7XG5cbnZhciBicm9hZGNhc3RTdGF0ZSA9IGZ1bmN0aW9uIChjYWNoZSwga2V5LCBkYXRhLCBlcnJvciwgaXNWYWxpZGF0aW5nLCByZXZhbGlkYXRlLCBicm9hZGNhc3QpIHtcbiAgICBpZiAoYnJvYWRjYXN0ID09PSB2b2lkIDApIHsgYnJvYWRjYXN0ID0gdHJ1ZTsgfVxuICAgIHZhciBfYSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSksIEVWRU5UX1JFVkFMSURBVE9SUyA9IF9hWzBdLCBTVEFURV9VUERBVEVSUyA9IF9hWzFdLCBGRVRDSCA9IF9hWzNdO1xuICAgIHZhciByZXZhbGlkYXRvcnMgPSBFVkVOVF9SRVZBTElEQVRPUlNba2V5XTtcbiAgICB2YXIgdXBkYXRlcnMgPSBTVEFURV9VUERBVEVSU1trZXldO1xuICAgIC8vIENhY2hlIHdhcyBwb3B1bGF0ZWQsIHVwZGF0ZSBzdGF0ZXMgb2YgYWxsIGhvb2tzLlxuICAgIGlmIChicm9hZGNhc3QgJiYgdXBkYXRlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdXBkYXRlcnNbaV0oZGF0YSwgZXJyb3IsIGlzVmFsaWRhdGluZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgd2UgYWxzbyBuZWVkIHRvIHJldmFsaWRhdGUsIG9ubHkgZG8gaXQgZm9yIHRoZSBmaXJzdCBob29rLlxuICAgIGlmIChyZXZhbGlkYXRlKSB7XG4gICAgICAgIC8vIEludmFsaWRhdGUgdGhlIGtleSBieSBkZWxldGluZyB0aGUgY29uY3VycmVudCByZXF1ZXN0IG1hcmtlcnMgc28gbmV3XG4gICAgICAgIC8vIHJlcXVlc3RzIHdpbGwgbm90IGJlIGRlZHVwZWQuXG4gICAgICAgIGRlbGV0ZSBGRVRDSFtrZXldO1xuICAgICAgICBpZiAocmV2YWxpZGF0b3JzICYmIHJldmFsaWRhdG9yc1swXSkge1xuICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdG9yc1swXShNVVRBVEVfRVZFTlQpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbn07XG5cbi8vIEdsb2JhbCB0aW1lc3RhbXAuXG52YXIgX190aW1lc3RhbXAgPSAwO1xudmFyIGdldFRpbWVzdGFtcCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICsrX190aW1lc3RhbXA7IH07XG5cbnZhciBpbnRlcm5hbE11dGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjYWNoZSwgX2tleSwgX2RhdGEsIF9vcHRzLCBvcHRpb25zLCBwb3B1bGF0ZUNhY2hlLCByZXZhbGlkYXRlLCByb2xsYmFja09uRXJyb3IsIGN1c3RvbU9wdGltaXN0aWNEYXRhLCBfYSwga2V5LCBrZXlJbmZvLCBfYiwgTVVUQVRJT04sIGRhdGEsIGVycm9yLCBiZWZvcmVNdXRhdGlvblRzLCBoYXNDdXN0b21PcHRpbWlzdGljRGF0YSwgcm9sbGJhY2tEYXRhLCBvcHRpbWlzdGljRGF0YSwgcmVzO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IGFyZ3NbMF0sIF9rZXkgPSBhcmdzWzFdLCBfZGF0YSA9IGFyZ3NbMl0sIF9vcHRzID0gYXJnc1szXTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHR5cGVvZiBfb3B0cyA9PT0gJ2Jvb2xlYW4nID8geyByZXZhbGlkYXRlOiBfb3B0cyB9IDogX29wdHMgfHwge307XG4gICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlQ2FjaGUgPSBpc1VuZGVmaW5lZChvcHRpb25zLnBvcHVsYXRlQ2FjaGUpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogb3B0aW9ucy5wb3B1bGF0ZUNhY2hlO1xuICAgICAgICAgICAgICAgICAgICByZXZhbGlkYXRlID0gb3B0aW9ucy5yZXZhbGlkYXRlICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcm9sbGJhY2tPbkVycm9yID0gb3B0aW9ucy5yb2xsYmFja09uRXJyb3IgIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjdXN0b21PcHRpbWlzdGljRGF0YSA9IG9wdGlvbnMub3B0aW1pc3RpY0RhdGE7XG4gICAgICAgICAgICAgICAgICAgIF9hID0gc2VyaWFsaXplKF9rZXkpLCBrZXkgPSBfYVswXSwga2V5SW5mbyA9IF9hWzJdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICAgICAgX2IgPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpLCBNVVRBVElPTiA9IF9iWzJdO1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBuZXcgZGF0YSBwcm92aWRlZCwgcmV2YWxpZGF0ZSB0aGUga2V5IHdpdGggY3VycmVudCBzdGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBhbmQgYnJvYWRjYXN0IHN0YXRlLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGJyb2FkY2FzdFN0YXRlKGNhY2hlLCBrZXksIGNhY2hlLmdldChrZXkpLCBVTkRFRklORUQsIFVOREVGSU5FRCwgcmV2YWxpZGF0ZSwgdHJ1ZSldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBfZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlTXV0YXRpb25UcyA9IGdldFRpbWVzdGFtcCgpO1xuICAgICAgICAgICAgICAgICAgICBNVVRBVElPTltrZXldID0gW2JlZm9yZU11dGF0aW9uVHMsIDBdO1xuICAgICAgICAgICAgICAgICAgICBoYXNDdXN0b21PcHRpbWlzdGljRGF0YSA9ICFpc1VuZGVmaW5lZChjdXN0b21PcHRpbWlzdGljRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJvbGxiYWNrRGF0YSA9IGNhY2hlLmdldChrZXkpO1xuICAgICAgICAgICAgICAgICAgICAvLyBEbyBvcHRpbWlzdGljIGRhdGEgdXBkYXRlLlxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQ3VzdG9tT3B0aW1pc3RpY0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXN0aWNEYXRhID0gaXNGdW5jdGlvbihjdXN0b21PcHRpbWlzdGljRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGN1c3RvbU9wdGltaXN0aWNEYXRhKHJvbGxiYWNrRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1c3RvbU9wdGltaXN0aWNEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuc2V0KGtleSwgb3B0aW1pc3RpY0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJvYWRjYXN0U3RhdGUoY2FjaGUsIGtleSwgb3B0aW1pc3RpY0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBgZGF0YWAgaXMgYSBmdW5jdGlvbiwgY2FsbCBpdCBwYXNzaW5nIGN1cnJlbnQgY2FjaGUgdmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhKGNhY2hlLmdldChrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCB0aHJvd3MgYW4gZXJyb3Igc3luY2hyb25vdXNseSwgd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEudGhlbikpKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgZGF0YS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgb3RoZXIgbXV0YXRpb25zIGhhdmUgb2NjdXJyZWQgc2luY2Ugd2UndmUgc3RhcnRlZCB0aGlzIG11dGF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhIHJhY2Ugd2UgZG9uJ3QgdXBkYXRlIGNhY2hlIG9yIGJyb2FkY2FzdCB0aGUgY2hhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCByZXR1cm4gdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIG11dGF0aW9uIGlzIGFzeW5jLCB3ZSBuZWVkIHRvIGNoZWNrIHRpbWVzdGFtcHMgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gYXZvaWQgcmFjZSBjb25kaXRpb25zLlxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2Muc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBvdGhlciBtdXRhdGlvbnMgaGF2ZSBvY2N1cnJlZCBzaW5jZSB3ZSd2ZSBzdGFydGVkIHRoaXMgbXV0YXRpb24uXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSByYWNlIHdlIGRvbid0IHVwZGF0ZSBjYWNoZSBvciBicm9hZGNhc3QgdGhlIGNoYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgLy8ganVzdCByZXR1cm4gdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgICAgIGlmIChiZWZvcmVNdXRhdGlvblRzICE9PSBNVVRBVElPTltrZXldWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZGF0YV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyb3IgJiYgaGFzQ3VzdG9tT3B0aW1pc3RpY0RhdGEgJiYgcm9sbGJhY2tPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSb2xsYmFjay4gQWx3YXlzIHBvcHVsYXRlIHRoZSBjYWNoZSBpbiB0aGlzIGNhc2UgYnV0IHdpdGhvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybWluZyB0aGUgZGF0YS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVsYXRlQ2FjaGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJvbGxiYWNrRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnNldChrZXksIHJvbGxiYWNrRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ugc2hvdWxkIHdyaXRlIGJhY2sgdGhlIGNhY2hlIGFmdGVyIHJlcXVlc3QuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3B1bGF0ZUNhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSByZXN1bHQgaW50byBkYXRhLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHBvcHVsYXRlQ2FjaGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwb3B1bGF0ZUNhY2hlKGRhdGEsIHJvbGxiYWNrRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIGNhY2hlZCBkYXRhIGlmIHRoZXJlJ3Mgbm8gZXJyb3IuIERhdGEgY2FuIGJlIGB1bmRlZmluZWRgIGhlcmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuc2V0KGtleSwgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgdXBkYXRlIG9yIHJlc2V0IHRoZSBlcnJvci5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnNldChrZXlJbmZvLCBtZXJnZU9iamVjdHMoY2FjaGUuZ2V0KGtleUluZm8pLCB7IGVycm9yOiBlcnJvciB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHRpbWVzdGFtcCB0byBtYXJrIHRoZSBtdXRhdGlvbiBoYXMgZW5kZWQuXG4gICAgICAgICAgICAgICAgICAgIE1VVEFUSU9OW2tleV1bMV0gPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgYnJvYWRjYXN0U3RhdGUoY2FjaGUsIGtleSwgZGF0YSwgZXJyb3IsIFVOREVGSU5FRCwgcmV2YWxpZGF0ZSwgISFwb3B1bGF0ZUNhY2hlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgZXJyb3Igb3IgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IF9jLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgZXJyb3Igb3IgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBwb3B1bGF0ZUNhY2hlID8gcmVzIDogZGF0YV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxudmFyIHJldmFsaWRhdGVBbGxLZXlzID0gZnVuY3Rpb24gKHJldmFsaWRhdG9ycywgdHlwZSkge1xuICAgIGZvciAodmFyIGtleSBpbiByZXZhbGlkYXRvcnMpIHtcbiAgICAgICAgaWYgKHJldmFsaWRhdG9yc1trZXldWzBdKVxuICAgICAgICAgICAgcmV2YWxpZGF0b3JzW2tleV1bMF0odHlwZSk7XG4gICAgfVxufTtcbnZhciBpbml0Q2FjaGUgPSBmdW5jdGlvbiAocHJvdmlkZXIsIG9wdGlvbnMpIHtcbiAgICAvLyBUaGUgZ2xvYmFsIHN0YXRlIGZvciBhIHNwZWNpZmljIHByb3ZpZGVyIHdpbGwgYmUgdXNlZCB0byBkZWR1cGxpY2F0ZVxuICAgIC8vIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnMuIEFzIHdlbGwgYXMgYSBtdXRhdGUgZnVuY3Rpb24gdGhhdCBib3VuZCB0b1xuICAgIC8vIHRoZSBjYWNoZS5cbiAgICAvLyBQcm92aWRlcidzIGdsb2JhbCBzdGF0ZSBtaWdodCBiZSBhbHJlYWR5IGluaXRpYWxpemVkLiBMZXQncyB0cnkgdG8gZ2V0IHRoZVxuICAgIC8vIGdsb2JhbCBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3ZpZGVyIGZpcnN0LlxuICAgIGlmICghU1dSR2xvYmFsU3RhdGUuaGFzKHByb3ZpZGVyKSkge1xuICAgICAgICB2YXIgb3B0cyA9IG1lcmdlT2JqZWN0cyhkZWZhdWx0Q29uZmlnT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZ2xvYmFsIHN0YXRlIGJvdW5kIHRvIHRoZSBwcm92aWRlciwgY3JlYXRlIGEgbmV3IG9uZSB3aXRoIHRoZVxuICAgICAgICAvLyBuZXcgbXV0YXRlIGZ1bmN0aW9uLlxuICAgICAgICB2YXIgRVZFTlRfUkVWQUxJREFUT1JTID0ge307XG4gICAgICAgIHZhciBtdXRhdGUgPSBpbnRlcm5hbE11dGF0ZS5iaW5kKFVOREVGSU5FRCwgcHJvdmlkZXIpO1xuICAgICAgICB2YXIgdW5tb3VudCA9IG5vb3A7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgc3RhdGUgaWYgaXQncyBuZXcsIG9yIHRoZSBwcm92aWRlciBoYXMgYmVlbiBleHRlbmRlZC5cbiAgICAgICAgU1dSR2xvYmFsU3RhdGUuc2V0KHByb3ZpZGVyLCBbRVZFTlRfUkVWQUxJREFUT1JTLCB7fSwge30sIHt9LCBtdXRhdGVdKTtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm92aWRlciwgd2UgbmVlZCB0byBpbml0aWFsaXplIGl0IGFuZCBzZXR1cCBET00gZXZlbnRzXG4gICAgICAgIC8vIGxpc3RlbmVycyBmb3IgYGZvY3VzYCBhbmQgYHJlY29ubmVjdGAgYWN0aW9ucy5cbiAgICAgICAgaWYgKCFJU19TRVJWRVIpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gbGlzdGVuaW5nIHRvIHRoZSBuYXRpdmUgZXZlbnRzIGZvciBhdXRvIHJldmFsaWRhdGlvbnMsXG4gICAgICAgICAgICAvLyB3ZSBpbnRlbnRpb25hbGx5IHB1dCBhIGRlbGF5IChzZXRUaW1lb3V0KSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZVxuICAgICAgICAgICAgLy8gZmlyZWQgYWZ0ZXIgaW1tZWRpYXRlIEphdmFTY3JpcHQgZXhlY3V0aW9ucywgd2hpY2ggY2FuIHBvc3NpYmx5IGJlXG4gICAgICAgICAgICAvLyBSZWFjdCdzIHN0YXRlIHVwZGF0ZXMuXG4gICAgICAgICAgICAvLyBUaGlzIGF2b2lkcyBzb21lIHVubmVjZXNzYXJ5IHJldmFsaWRhdGlvbnMgc3VjaCBhc1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9zd3IvaXNzdWVzLzE2ODAuXG4gICAgICAgICAgICB2YXIgcmVsZWFzZUZvY3VzXzEgPSBvcHRzLmluaXRGb2N1cyhzZXRUaW1lb3V0LmJpbmQoVU5ERUZJTkVELCByZXZhbGlkYXRlQWxsS2V5cy5iaW5kKFVOREVGSU5FRCwgRVZFTlRfUkVWQUxJREFUT1JTLCBGT0NVU19FVkVOVCkpKTtcbiAgICAgICAgICAgIHZhciByZWxlYXNlUmVjb25uZWN0XzEgPSBvcHRzLmluaXRSZWNvbm5lY3Qoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgUkVDT05ORUNUX0VWRU5UKSkpO1xuICAgICAgICAgICAgdW5tb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZWxlYXNlRm9jdXNfMSAmJiByZWxlYXNlRm9jdXNfMSgpO1xuICAgICAgICAgICAgICAgIHJlbGVhc2VSZWNvbm5lY3RfMSAmJiByZWxlYXNlUmVjb25uZWN0XzEoKTtcbiAgICAgICAgICAgICAgICAvLyBXaGVuIHVuLW1vdW50aW5nLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgY2FjaGUgcHJvdmlkZXIgZnJvbSB0aGUgc3RhdGVcbiAgICAgICAgICAgICAgICAvLyBzdG9yYWdlIHRvbyBiZWNhdXNlIGl0J3MgYSBzaWRlLWVmZmVjdC4gT3RoZXJ3aXNlIHdoZW4gcmUtbW91bnRpbmcgd2VcbiAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCByZS1yZWdpc3RlciB0aG9zZSBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgICAgICAgICAgU1dSR2xvYmFsU3RhdGUuZGVsZXRlKHByb3ZpZGVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgbWlnaHQgd2FudCB0byBpbmplY3QgYW4gZXh0cmEgbGF5ZXIgb24gdG9wIG9mIGBwcm92aWRlcmAgaW4gdGhlIGZ1dHVyZSxcbiAgICAgICAgLy8gc3VjaCBhcyBrZXkgc2VyaWFsaXphdGlvbiwgYXV0byBHQywgZXRjLlxuICAgICAgICAvLyBGb3Igbm93LCBpdCdzIGp1c3QgYSBgTWFwYCBpbnRlcmZhY2Ugd2l0aG91dCBhbnkgbW9kaWZpY2F0aW9ucy5cbiAgICAgICAgcmV0dXJuIFtwcm92aWRlciwgbXV0YXRlLCB1bm1vdW50XTtcbiAgICB9XG4gICAgcmV0dXJuIFtwcm92aWRlciwgU1dSR2xvYmFsU3RhdGUuZ2V0KHByb3ZpZGVyKVs0XV07XG59O1xuXG4vLyBlcnJvciByZXRyeVxudmFyIG9uRXJyb3JSZXRyeSA9IGZ1bmN0aW9uIChfLCBfXywgY29uZmlnLCByZXZhbGlkYXRlLCBvcHRzKSB7XG4gICAgdmFyIG1heFJldHJ5Q291bnQgPSBjb25maWcuZXJyb3JSZXRyeUNvdW50O1xuICAgIHZhciBjdXJyZW50UmV0cnlDb3VudCA9IG9wdHMucmV0cnlDb3VudDtcbiAgICAvLyBFeHBvbmVudGlhbCBiYWNrb2ZmXG4gICAgdmFyIHRpbWVvdXQgPSB+figoTWF0aC5yYW5kb20oKSArIDAuNSkgKlxuICAgICAgICAoMSA8PCAoY3VycmVudFJldHJ5Q291bnQgPCA4ID8gY3VycmVudFJldHJ5Q291bnQgOiA4KSkpICogY29uZmlnLmVycm9yUmV0cnlJbnRlcnZhbDtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1heFJldHJ5Q291bnQpICYmIGN1cnJlbnRSZXRyeUNvdW50ID4gbWF4UmV0cnlDb3VudCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQocmV2YWxpZGF0ZSwgdGltZW91dCwgb3B0cyk7XG59O1xuLy8gRGVmYXVsdCBjYWNoZSBwcm92aWRlclxudmFyIF9hID0gaW5pdENhY2hlKG5ldyBNYXAoKSksIGNhY2hlID0gX2FbMF0sIG11dGF0ZSA9IF9hWzFdO1xuLy8gRGVmYXVsdCBjb25maWdcbnZhciBkZWZhdWx0Q29uZmlnID0gbWVyZ2VPYmplY3RzKHtcbiAgICAvLyBldmVudHNcbiAgICBvbkxvYWRpbmdTbG93OiBub29wLFxuICAgIG9uU3VjY2Vzczogbm9vcCxcbiAgICBvbkVycm9yOiBub29wLFxuICAgIG9uRXJyb3JSZXRyeTogb25FcnJvclJldHJ5LFxuICAgIG9uRGlzY2FyZGVkOiBub29wLFxuICAgIC8vIHN3aXRjaGVzXG4gICAgcmV2YWxpZGF0ZU9uRm9jdXM6IHRydWUsXG4gICAgcmV2YWxpZGF0ZU9uUmVjb25uZWN0OiB0cnVlLFxuICAgIHJldmFsaWRhdGVJZlN0YWxlOiB0cnVlLFxuICAgIHNob3VsZFJldHJ5T25FcnJvcjogdHJ1ZSxcbiAgICAvLyB0aW1lb3V0c1xuICAgIGVycm9yUmV0cnlJbnRlcnZhbDogc2xvd0Nvbm5lY3Rpb24gPyAxMDAwMCA6IDUwMDAsXG4gICAgZm9jdXNUaHJvdHRsZUludGVydmFsOiA1ICogMTAwMCxcbiAgICBkZWR1cGluZ0ludGVydmFsOiAyICogMTAwMCxcbiAgICBsb2FkaW5nVGltZW91dDogc2xvd0Nvbm5lY3Rpb24gPyA1MDAwIDogMzAwMCxcbiAgICAvLyBwcm92aWRlcnNcbiAgICBjb21wYXJlOiBmdW5jdGlvbiAoY3VycmVudERhdGEsIG5ld0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHN0YWJsZUhhc2goY3VycmVudERhdGEpID09IHN0YWJsZUhhc2gobmV3RGF0YSk7XG4gICAgfSxcbiAgICBpc1BhdXNlZDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH0sXG4gICAgY2FjaGU6IGNhY2hlLFxuICAgIG11dGF0ZTogbXV0YXRlLFxuICAgIGZhbGxiYWNrOiB7fVxufSwgXG4vLyB1c2Ugd2ViIHByZXNldCBieSBkZWZhdWx0XG5wcmVzZXQpO1xuXG52YXIgbWVyZ2VDb25maWdzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3QgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIG9yaWdpbmFsIGhlcmUuXG4gICAgdmFyIHYgPSBtZXJnZU9iamVjdHMoYSwgYik7XG4gICAgLy8gSWYgdHdvIGNvbmZpZ3MgYXJlIHByb3ZpZGVkLCBtZXJnZSB0aGVpciBgdXNlYCBhbmQgYGZhbGxiYWNrYCBvcHRpb25zLlxuICAgIGlmIChiKSB7XG4gICAgICAgIHZhciB1MSA9IGEudXNlLCBmMSA9IGEuZmFsbGJhY2s7XG4gICAgICAgIHZhciB1MiA9IGIudXNlLCBmMiA9IGIuZmFsbGJhY2s7XG4gICAgICAgIGlmICh1MSAmJiB1Mikge1xuICAgICAgICAgICAgdi51c2UgPSB1MS5jb25jYXQodTIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmMSAmJiBmMikge1xuICAgICAgICAgICAgdi5mYWxsYmFjayA9IG1lcmdlT2JqZWN0cyhmMSwgZjIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xufTtcblxudmFyIFNXUkNvbmZpZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9KTtcbnZhciBTV1JDb25maWckMSA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuICAgIC8vIEV4dGVuZCBwYXJlbnQgY29udGV4dCB2YWx1ZXMgYW5kIG1pZGRsZXdhcmUuXG4gICAgdmFyIGV4dGVuZGVkQ29uZmlnID0gbWVyZ2VDb25maWdzKHVzZUNvbnRleHQoU1dSQ29uZmlnQ29udGV4dCksIHZhbHVlKTtcbiAgICAvLyBTaG91bGQgbm90IHVzZSB0aGUgaW5oZXJpdGVkIHByb3ZpZGVyLlxuICAgIHZhciBwcm92aWRlciA9IHZhbHVlICYmIHZhbHVlLnByb3ZpZGVyO1xuICAgIC8vIFVzZSBhIGxhenkgaW5pdGlhbGl6ZWQgc3RhdGUgdG8gY3JlYXRlIHRoZSBjYWNoZSBvbiBmaXJzdCBhY2Nlc3MuXG4gICAgdmFyIGNhY2hlQ29udGV4dCA9IHVzZVN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyXG4gICAgICAgICAgICA/IGluaXRDYWNoZShwcm92aWRlcihleHRlbmRlZENvbmZpZy5jYWNoZSB8fCBjYWNoZSksIHZhbHVlKVxuICAgICAgICAgICAgOiBVTkRFRklORUQ7XG4gICAgfSlbMF07XG4gICAgLy8gT3ZlcnJpZGUgdGhlIGNhY2hlIGlmIGEgbmV3IHByb3ZpZGVyIGlzIGdpdmVuLlxuICAgIGlmIChjYWNoZUNvbnRleHQpIHtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcuY2FjaGUgPSBjYWNoZUNvbnRleHRbMF07XG4gICAgICAgIGV4dGVuZGVkQ29uZmlnLm11dGF0ZSA9IGNhY2hlQ29udGV4dFsxXTtcbiAgICB9XG4gICAgLy8gVW5zdWJzY3JpYmUgZXZlbnRzLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkgeyByZXR1cm4gKGNhY2hlQ29udGV4dCA/IGNhY2hlQ29udGV4dFsyXSA6IFVOREVGSU5FRCk7IH0sIFtdKTtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChTV1JDb25maWdDb250ZXh0LlByb3ZpZGVyLCBtZXJnZU9iamVjdHMocHJvcHMsIHtcbiAgICAgICAgdmFsdWU6IGV4dGVuZGVkQ29uZmlnXG4gICAgfSkpO1xufTtcblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBzdGF0ZSB3aXRoIGRlcGVuZGVuY3ktdHJhY2tpbmcuXG4gKi9cbnZhciB1c2VTdGF0ZVdpdGhEZXBzID0gZnVuY3Rpb24gKHN0YXRlLCB1bm1vdW50ZWRSZWYpIHtcbiAgICB2YXIgcmVyZW5kZXIgPSB1c2VTdGF0ZSh7fSlbMV07XG4gICAgdmFyIHN0YXRlUmVmID0gdXNlUmVmKHN0YXRlKTtcbiAgICAvLyBJZiBhIHN0YXRlIHByb3BlcnR5IChkYXRhLCBlcnJvciBvciBpc1ZhbGlkYXRpbmcpIGlzIGFjY2Vzc2VkIGJ5IHRoZSByZW5kZXJcbiAgICAvLyBmdW5jdGlvbiwgd2UgbWFyayB0aGUgcHJvcGVydHkgYXMgYSBkZXBlbmRlbmN5IHNvIGlmIGl0IGlzIHVwZGF0ZWQgYWdhaW5cbiAgICAvLyBpbiB0aGUgZnV0dXJlLCB3ZSB0cmlnZ2VyIGEgcmVyZW5kZXIuXG4gICAgLy8gVGhpcyBpcyBhbHNvIGtub3duIGFzIGRlcGVuZGVuY3ktdHJhY2tpbmcuXG4gICAgdmFyIHN0YXRlRGVwZW5kZW5jaWVzUmVmID0gdXNlUmVmKHtcbiAgICAgICAgZGF0YTogZmFsc2UsXG4gICAgICAgIGVycm9yOiBmYWxzZSxcbiAgICAgICAgaXNWYWxpZGF0aW5nOiBmYWxzZVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBwYXlsb2FkIFRvIGNoYW5nZSBzdGF0ZVJlZiwgcGFzcyB0aGUgdmFsdWVzIGV4cGxpY2l0bHkgdG8gc2V0U3RhdGU6XG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIHNldFN0YXRlKHtcbiAgICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICAgKiAgIGRhdGE6IG5ld0RhdGEgLy8gc2V0IGRhdGEgdG8gbmV3RGF0YVxuICAgICAqICAgZXJyb3I6IHVuZGVmaW5lZCAvLyBzZXQgZXJyb3IgdG8gdW5kZWZpbmVkXG4gICAgICogfSlcbiAgICAgKlxuICAgICAqIHNldFN0YXRlKHtcbiAgICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICAgKiAgIGRhdGE6IHVuZGVmaW5lZCAvLyBzZXQgZGF0YSB0byB1bmRlZmluZWRcbiAgICAgKiAgIGVycm9yOiBlcnIgLy8gc2V0IGVycm9yIHRvIGVyclxuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdmFyIHNldFN0YXRlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHBheWxvYWQpIHtcbiAgICAgICAgdmFyIHNob3VsZFJlcmVuZGVyID0gZmFsc2U7XG4gICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBzdGF0ZVJlZi5jdXJyZW50O1xuICAgICAgICBmb3IgKHZhciBfIGluIHBheWxvYWQpIHtcbiAgICAgICAgICAgIHZhciBrID0gXztcbiAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCwgdXBkYXRlIHRoZSBzdGF0ZSBhbmQgbWFyayByZXJlbmRlciBhc1xuICAgICAgICAgICAgLy8gbmVlZGVkLlxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZVtrXSAhPT0gcGF5bG9hZFtrXSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZVtrXSA9IHBheWxvYWRba107XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIGFjY2Vzc2VkIGJ5IHRoZSBjb21wb25lbnQsIGEgcmVyZW5kZXIgc2hvdWxkIGJlXG4gICAgICAgICAgICAgICAgLy8gdHJpZ2dlcmVkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZURlcGVuZGVuY2llc1JlZi5jdXJyZW50W2tdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFJlcmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZFJlcmVuZGVyICYmICF1bm1vdW50ZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgcmVyZW5kZXIoe30pO1xuICAgICAgICB9XG4gICAgfSwgXG4gICAgLy8gY29uZmlnLnN1c3BlbnNlIGlzbid0IGFsbG93ZWQgdG8gY2hhbmdlIGR1cmluZyB0aGUgbGlmZWN5Y2xlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtdKTtcbiAgICAvLyBBbHdheXMgdXBkYXRlIHRoZSBzdGF0ZSByZWZlcmVuY2UuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHN0YXRlUmVmLmN1cnJlbnQgPSBzdGF0ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gW3N0YXRlUmVmLCBzdGF0ZURlcGVuZGVuY2llc1JlZi5jdXJyZW50LCBzZXRTdGF0ZV07XG59O1xuXG52YXIgbm9ybWFsaXplID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihhcmdzWzFdKVxuICAgICAgICA/IFthcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdIHx8IHt9XVxuICAgICAgICA6IFthcmdzWzBdLCBudWxsLCAoYXJnc1sxXSA9PT0gbnVsbCA/IGFyZ3NbMl0gOiBhcmdzWzFdKSB8fCB7fV07XG59O1xuXG52YXIgdXNlU1dSQ29uZmlnID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZywgdXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KSk7XG59O1xuXG4vLyBJdCdzIHRyaWNreSB0byBwYXNzIGdlbmVyaWMgdHlwZXMgYXMgcGFyYW1ldGVycywgc28gd2UganVzdCBkaXJlY3RseSBvdmVycmlkZVxuLy8gdGhlIHR5cGVzIGhlcmUuXG52YXIgd2l0aEFyZ3MgPSBmdW5jdGlvbiAoaG9vaykge1xuICAgIHJldHVybiBmdW5jdGlvbiB1c2VTV1JBcmdzKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIC8vIEdldCB0aGUgZGVmYXVsdCBhbmQgaW5oZXJpdGVkIGNvbmZpZ3VyYXRpb24uXG4gICAgICAgIHZhciBmYWxsYmFja0NvbmZpZyA9IHVzZVNXUkNvbmZpZygpO1xuICAgICAgICAvLyBOb3JtYWxpemUgYXJndW1lbnRzLlxuICAgICAgICB2YXIgX2EgPSBub3JtYWxpemUoYXJncyksIGtleSA9IF9hWzBdLCBmbiA9IF9hWzFdLCBfY29uZmlnID0gX2FbMl07XG4gICAgICAgIC8vIE1lcmdlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAgICB2YXIgY29uZmlnID0gbWVyZ2VDb25maWdzKGZhbGxiYWNrQ29uZmlnLCBfY29uZmlnKTtcbiAgICAgICAgLy8gQXBwbHkgbWlkZGxld2FyZVxuICAgICAgICB2YXIgbmV4dCA9IGhvb2s7XG4gICAgICAgIHZhciB1c2UgPSBjb25maWcudXNlO1xuICAgICAgICBpZiAodXNlKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gdXNlLmxlbmd0aDsgaS0tID4gMDspIHtcbiAgICAgICAgICAgICAgICBuZXh0ID0gdXNlW2ldKG5leHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0KGtleSwgZm4gfHwgY29uZmlnLmZldGNoZXIsIGNvbmZpZyk7XG4gICAgfTtcbn07XG5cbi8vIEFkZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGEgbGlzdCBvZiBrZXllZCBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIHJldHVyblxuLy8gdGhlIHVuc3Vic2NyaWJlIGZ1bmN0aW9uLlxudmFyIHN1YnNjcmliZUNhbGxiYWNrID0gZnVuY3Rpb24gKGtleSwgY2FsbGJhY2tzLCBjYWxsYmFjaykge1xuICAgIHZhciBrZXllZFJldmFsaWRhdG9ycyA9IGNhbGxiYWNrc1trZXldIHx8IChjYWxsYmFja3Nba2V5XSA9IFtdKTtcbiAgICBrZXllZFJldmFsaWRhdG9ycy5wdXNoKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5kZXggPSBrZXllZFJldmFsaWRhdG9ycy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIC8vIE8oMSk6IGZhc3RlciB0aGFuIHNwbGljZVxuICAgICAgICAgICAga2V5ZWRSZXZhbGlkYXRvcnNbaW5kZXhdID0ga2V5ZWRSZXZhbGlkYXRvcnNba2V5ZWRSZXZhbGlkYXRvcnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBrZXllZFJldmFsaWRhdG9ycy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuXG52YXIgV0lUSF9ERURVUEUgPSB7IGRlZHVwZTogdHJ1ZSB9O1xudmFyIHVzZVNXUkhhbmRsZXIgPSBmdW5jdGlvbiAoX2tleSwgZmV0Y2hlciwgY29uZmlnKSB7XG4gICAgdmFyIGNhY2hlID0gY29uZmlnLmNhY2hlLCBjb21wYXJlID0gY29uZmlnLmNvbXBhcmUsIGZhbGxiYWNrRGF0YSA9IGNvbmZpZy5mYWxsYmFja0RhdGEsIHN1c3BlbnNlID0gY29uZmlnLnN1c3BlbnNlLCByZXZhbGlkYXRlT25Nb3VudCA9IGNvbmZpZy5yZXZhbGlkYXRlT25Nb3VudCwgcmVmcmVzaEludGVydmFsID0gY29uZmlnLnJlZnJlc2hJbnRlcnZhbCwgcmVmcmVzaFdoZW5IaWRkZW4gPSBjb25maWcucmVmcmVzaFdoZW5IaWRkZW4sIHJlZnJlc2hXaGVuT2ZmbGluZSA9IGNvbmZpZy5yZWZyZXNoV2hlbk9mZmxpbmU7XG4gICAgdmFyIF9hID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKSwgRVZFTlRfUkVWQUxJREFUT1JTID0gX2FbMF0sIFNUQVRFX1VQREFURVJTID0gX2FbMV0sIE1VVEFUSU9OID0gX2FbMl0sIEZFVENIID0gX2FbM107XG4gICAgLy8gYGtleWAgaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIFNXUiBgZGF0YWAgc3RhdGUsIGBrZXlJbmZvYCBob2xkcyBleHRyYVxuICAgIC8vIHN0YXRlcyBzdWNoIGFzIGBlcnJvcmAgYW5kIGBpc1ZhbGlkYXRpbmdgIGluc2lkZSxcbiAgICAvLyBhbGwgb2YgdGhlbSBhcmUgZGVyaXZlZCBmcm9tIGBfa2V5YC5cbiAgICAvLyBgZm5BcmdzYCBpcyBhbiBhcnJheSBvZiBhcmd1bWVudHMgcGFyc2VkIGZyb20gdGhlIGtleSwgd2hpY2ggd2lsbCBiZSBwYXNzZWRcbiAgICAvLyB0byB0aGUgZmV0Y2hlci5cbiAgICB2YXIgX2IgPSBzZXJpYWxpemUoX2tleSksIGtleSA9IF9iWzBdLCBmbkFyZ3MgPSBfYlsxXSwga2V5SW5mbyA9IF9iWzJdO1xuICAgIC8vIElmIGl0J3MgdGhlIGluaXRpYWwgcmVuZGVyIG9mIHRoaXMgaG9vay5cbiAgICB2YXIgaW5pdGlhbE1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIC8vIElmIHRoZSBob29rIGlzIHVubW91bnRlZCBhbHJlYWR5LiBUaGlzIHdpbGwgYmUgdXNlZCB0byBwcmV2ZW50IHNvbWUgZWZmZWN0c1xuICAgIC8vIHRvIGJlIGNhbGxlZCBhZnRlciB1bm1vdW50aW5nLlxuICAgIHZhciB1bm1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIC8vIFJlZnMgdG8ga2VlcCB0aGUga2V5IGFuZCBjb25maWcuXG4gICAgdmFyIGtleVJlZiA9IHVzZVJlZihrZXkpO1xuICAgIHZhciBmZXRjaGVyUmVmID0gdXNlUmVmKGZldGNoZXIpO1xuICAgIHZhciBjb25maWdSZWYgPSB1c2VSZWYoY29uZmlnKTtcbiAgICB2YXIgZ2V0Q29uZmlnID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZmlnUmVmLmN1cnJlbnQ7IH07XG4gICAgdmFyIGlzQWN0aXZlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkgJiYgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKTsgfTtcbiAgICB2YXIgcGF0Y2hGZXRjaEluZm8gPSBmdW5jdGlvbiAoaW5mbykge1xuICAgICAgICByZXR1cm4gY2FjaGUuc2V0KGtleUluZm8sIG1lcmdlT2JqZWN0cyhjYWNoZS5nZXQoa2V5SW5mbyksIGluZm8pKTtcbiAgICB9O1xuICAgIC8vIEdldCB0aGUgY3VycmVudCBzdGF0ZSB0aGF0IFNXUiBzaG91bGQgcmV0dXJuLlxuICAgIHZhciBjYWNoZWQgPSBjYWNoZS5nZXQoa2V5KTtcbiAgICB2YXIgZmFsbGJhY2sgPSBpc1VuZGVmaW5lZChmYWxsYmFja0RhdGEpXG4gICAgICAgID8gY29uZmlnLmZhbGxiYWNrW2tleV1cbiAgICAgICAgOiBmYWxsYmFja0RhdGE7XG4gICAgdmFyIGRhdGEgPSBpc1VuZGVmaW5lZChjYWNoZWQpID8gZmFsbGJhY2sgOiBjYWNoZWQ7XG4gICAgdmFyIGluZm8gPSBjYWNoZS5nZXQoa2V5SW5mbykgfHwge307XG4gICAgdmFyIGVycm9yID0gaW5mby5lcnJvcjtcbiAgICB2YXIgaXNJbml0aWFsTW91bnQgPSAhaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudDtcbiAgICAvLyAtIFN1c3BlbnNlIG1vZGUgYW5kIHRoZXJlJ3Mgc3RhbGUgZGF0YSBmb3IgdGhlIGluaXRpYWwgcmVuZGVyLlxuICAgIC8vIC0gTm90IHN1c3BlbnNlIG1vZGUgYW5kIHRoZXJlIGlzIG5vIGZhbGxiYWNrIGRhdGEgYW5kIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgZW5hYmxlZC5cbiAgICAvLyAtIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgZW5hYmxlZCBidXQgYGRhdGFgIGlzIG5vdCBkZWZpbmVkLlxuICAgIHZhciBzaG91bGRSZXZhbGlkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBJZiBgcmV2YWxpZGF0ZU9uTW91bnRgIGlzIHNldCwgd2UgdGFrZSB0aGUgdmFsdWUgZGlyZWN0bHkuXG4gICAgICAgIGlmIChpc0luaXRpYWxNb3VudCAmJiAhaXNVbmRlZmluZWQocmV2YWxpZGF0ZU9uTW91bnQpKVxuICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdGVPbk1vdW50O1xuICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChnZXRDb25maWcoKS5pc1BhdXNlZCgpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBVbmRlciBzdXNwZW5zZSBtb2RlLCBpdCB3aWxsIGFsd2F5cyBmZXRjaCBvbiByZW5kZXIgaWYgdGhlcmUgaXMgbm9cbiAgICAgICAgLy8gc3RhbGUgZGF0YSBzbyBubyBuZWVkIHRvIHJldmFsaWRhdGUgaW1tZWRpYXRlbHkgb24gbW91bnQgYWdhaW4uXG4gICAgICAgIC8vIElmIGRhdGEgZXhpc3RzLCBvbmx5IHJldmFsaWRhdGUgaWYgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyB0cnVlLlxuICAgICAgICBpZiAoc3VzcGVuc2UpXG4gICAgICAgICAgICByZXR1cm4gaXNVbmRlZmluZWQoZGF0YSkgPyBmYWxzZSA6IGNvbmZpZy5yZXZhbGlkYXRlSWZTdGFsZTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3RhbGUgZGF0YSwgd2UgbmVlZCB0byByZXZhbGlkYXRlIG9uIG1vdW50O1xuICAgICAgICAvLyBJZiBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIHNldCB0byB0cnVlLCB3ZSB3aWxsIGFsd2F5cyByZXZhbGlkYXRlLlxuICAgICAgICByZXR1cm4gaXNVbmRlZmluZWQoZGF0YSkgfHwgY29uZmlnLnJldmFsaWRhdGVJZlN0YWxlO1xuICAgIH07XG4gICAgLy8gUmVzb2x2ZSB0aGUgY3VycmVudCB2YWxpZGF0aW5nIHN0YXRlLlxuICAgIHZhciByZXNvbHZlVmFsaWRhdGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFrZXkgfHwgIWZldGNoZXIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChpbmZvLmlzVmFsaWRhdGluZylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBJZiBpdCdzIG5vdCBtb3VudGVkIHlldCBhbmQgaXQgc2hvdWxkIHJldmFsaWRhdGUgb24gbW91bnQsIHJldmFsaWRhdGUuXG4gICAgICAgIHJldHVybiBpc0luaXRpYWxNb3VudCAmJiBzaG91bGRSZXZhbGlkYXRlKCk7XG4gICAgfTtcbiAgICB2YXIgaXNWYWxpZGF0aW5nID0gcmVzb2x2ZVZhbGlkYXRpbmcoKTtcbiAgICB2YXIgX2MgPSB1c2VTdGF0ZVdpdGhEZXBzKHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICBpc1ZhbGlkYXRpbmc6IGlzVmFsaWRhdGluZ1xuICAgIH0sIHVubW91bnRlZFJlZiksIHN0YXRlUmVmID0gX2NbMF0sIHN0YXRlRGVwZW5kZW5jaWVzID0gX2NbMV0sIHNldFN0YXRlID0gX2NbMl07XG4gICAgLy8gVGhlIHJldmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBhIGNhcmVmdWxseSBjcmFmdGVkIHdyYXBwZXIgb2YgdGhlIG9yaWdpbmFsXG4gICAgLy8gYGZldGNoZXJgLCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBtYW55IGVkZ2UgY2FzZXMuXG4gICAgdmFyIHJldmFsaWRhdGUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAocmV2YWxpZGF0ZU9wdHMpIHsgcmV0dXJuIF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjdXJyZW50RmV0Y2hlciwgbmV3RGF0YSwgc3RhcnRBdCwgbG9hZGluZywgb3B0cywgc2hvdWxkU3RhcnROZXdSZXF1ZXN0LCBpc0N1cnJlbnRLZXlNb3VudGVkLCBjbGVhbnVwU3RhdGUsIG5ld1N0YXRlLCBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUsIG11dGF0aW9uSW5mbywgZXJyXzE7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZldGNoZXIgPSBmZXRjaGVyUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICgha2V5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhY3VycmVudEZldGNoZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZmFsc2VdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBvcHRzID0gcmV2YWxpZGF0ZU9wdHMgfHwge307XG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFN0YXJ0TmV3UmVxdWVzdCA9ICFGRVRDSFtrZXldIHx8ICFvcHRzLmRlZHVwZTtcbiAgICAgICAgICAgICAgICAgICAgaXNDdXJyZW50S2V5TW91bnRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhdW5tb3VudGVkUmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPT09IGtleVJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cFN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBzdGlsbCB0aGUgc2FtZSByZXF1ZXN0IGJlZm9yZSBkZWxldGluZy5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0SW5mbyA9IEZFVENIW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEluZm8gJiYgcmVxdWVzdEluZm9bMV0gPT09IHN0YXJ0QXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgRkVUQ0hba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUgPSB7IGlzVmFsaWRhdGluZzogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hGZXRjaEluZm8oeyBpc1ZhbGlkYXRpbmc6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIG9ubHkgc2V0IHN0YXRlIGlmIGl0J3Mgc2FmZSAoc3RpbGwgbW91bnRlZCB3aXRoIHRoZSBzYW1lIGtleSkuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNDdXJyZW50S2V5TW91bnRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUobmV3U3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBmZXRjaGluZy4gQ2hhbmdlIHRoZSBgaXNWYWxpZGF0aW5nYCBzdGF0ZSwgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hGZXRjaEluZm8oe1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7IGlzVmFsaWRhdGluZzogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAzLCAsIDRdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGVsbCBhbGwgb3RoZXIgaG9va3MgdG8gY2hhbmdlIHRoZSBgaXNWYWxpZGF0aW5nYCBzdGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2FkY2FzdFN0YXRlKGNhY2hlLCBrZXksIHN0YXRlUmVmLmN1cnJlbnQuZGF0YSwgc3RhdGVSZWYuY3VycmVudC5lcnJvciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBubyBjYWNoZSBiZWluZyByZW5kZXJlZCBjdXJyZW50bHkgKGl0IHNob3dzIGEgYmxhbmsgcGFnZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSB0cmlnZ2VyIHRoZSBsb2FkaW5nIHNsb3cgZXZlbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmxvYWRpbmdUaW1lb3V0ICYmICFjYWNoZS5nZXQoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZyAmJiBpc0N1cnJlbnRLZXlNb3VudGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uTG9hZGluZ1Nsb3coa2V5LCBjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSByZXF1ZXN0IGFuZCBzYXZlIHRoZSB0aW1lc3RhbXAuXG4gICAgICAgICAgICAgICAgICAgICAgICBGRVRDSFtrZXldID0gW2N1cnJlbnRGZXRjaGVyLmFwcGx5KHZvaWQgMCwgZm5BcmdzKSwgZ2V0VGltZXN0YW1wKCldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9hID0gRkVUQ0hba2V5XSwgbmV3RGF0YSA9IF9hWzBdLCBzdGFydEF0ID0gX2FbMV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIG5ld0RhdGFdO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgbmV3RGF0YSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXNuJ3QgaW50ZXJydXB0ZWQsIGNsZWFuIGl0IHVwIGFmdGVyIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVkdXBsaWNhdGlvbiBpbnRlcnZhbC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2xlYW51cFN0YXRlLCBjb25maWcuZGVkdXBpbmdJbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgb3RoZXIgb25nb2luZyByZXF1ZXN0KHMpLCBzdGFydGVkIGFmdGVyIHRoZSBjdXJyZW50IG9uZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBpZ25vcmUgdGhlIGN1cnJlbnQgb25lIHRvIGF2b2lkIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uczpcbiAgICAgICAgICAgICAgICAgICAgLy8gICByZXExLS0tLS0tLS0tLS0tLS0tLS0tPnJlczEgICAgICAgIChjdXJyZW50IG9uZSlcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHJlcTItLS0tLS0tLS0tLS0tLS0tPnJlczJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHJlcXVlc3QgdGhhdCBmaXJlZCBsYXRlciB3aWxsIGFsd2F5cyBiZSBrZXB0LlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdGltZXN0YW1wIG1heWJlIGJlIGB1bmRlZmluZWRgIG9yIGEgbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIGlmICghRkVUQ0hba2V5XSB8fCBGRVRDSFtrZXldWzFdICE9PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBmYWxzZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoRmV0Y2hJbmZvKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBVTkRFRklORURcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlLmVycm9yID0gVU5ERUZJTkVEO1xuICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbkluZm8gPSBNVVRBVElPTltrZXldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKG11dGF0aW9uSW5mbykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgMVxuICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0QXQgPD0gbXV0YXRpb25JbmZvWzBdIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBdCA8PSBtdXRhdGlvbkluZm9bMV0gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbkluZm9bMV0gPT09IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNDdXJyZW50S2V5TW91bnRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRGlzY2FyZGVkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGZhbHNlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBEZWVwIGNvbXBhcmUgd2l0aCBsYXRlc3Qgc3RhdGUgdG8gYXZvaWQgZXh0cmEgcmUtcmVuZGVycy5cbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGxvY2FsIHN0YXRlLCBjb21wYXJlIGFuZCBhc3NpZ24uXG4gICAgICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShzdGF0ZVJlZi5jdXJyZW50LmRhdGEsIG5ld0RhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZS5kYXRhID0gbmV3RGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhdGEgYW5kIG5ld0RhdGEgYXJlIGRlZXBseSBlcXVhbFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQgc2hvdWxkIGJlIHNhZmUgdG8gYnJvYWRjYXN0IHRoZSBzdGFsZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZS5kYXRhID0gc3RhdGVSZWYuY3VycmVudC5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLCBgYnJvY2FzdFN0YXRlYCBpbnZva2VzIHRoZSBgb25TdGF0ZVVwZGF0ZWAgZnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGljaCB0YWtlcyBjYXJlIG9mIGF2b2lkaW5nIHRoZSByZS1yZW5kZXJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZ2xvYmFsIHN0YXRlLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGtleSBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9zd3IvcHVsbC8xMDU4XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjYWNoZS5nZXQoa2V5KSwgbmV3RGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnNldChrZXksIG5ld0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgdGhlIHN1Y2Nlc3NmdWwgY2FsbGJhY2sgaWYgaXQncyB0aGUgb3JpZ2luYWwgcmVxdWVzdC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uU3VjY2VzcyhuZXdEYXRhLCBrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNF07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBlcnJfMSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vdCBwYXVzZWQsIHdlIGNvbnRpbnVlIGhhbmRsaW5nIHRoZSBlcnJvci4gT3RoZXJ3aXNlIGRpc2NhcmQgaXQuXG4gICAgICAgICAgICAgICAgICAgIGlmICghZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGEgbmV3IGVycm9yLCBkb24ndCB1c2UgZGVlcCBjb21wYXJpc29uIGZvciBlcnJvcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaEZldGNoSW5mbyh7IGVycm9yOiBlcnJfMSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlLmVycm9yID0gZXJyXzE7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFcnJvciBldmVudCBhbmQgcmV0cnkgbG9naWMuIE9ubHkgZm9yIHRoZSBhY3R1YWwgcmVxdWVzdCwgbm90XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWR1cGVkIG9uZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0ICYmIGlzQ3VycmVudEtleU1vdW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRXJyb3IoZXJyXzEsIGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiBjb25maWcuc2hvdWxkUmV0cnlPbkVycm9yID09PSAnYm9vbGVhbicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNob3VsZFJldHJ5T25FcnJvcikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oY29uZmlnLnNob3VsZFJldHJ5T25FcnJvcikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaG91bGRSZXRyeU9uRXJyb3IoZXJyXzEpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHJldHJ5aW5nLCBkZWR1cGUgaXMgYWx3YXlzIGVuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgYWN0aXZlLCBzdG9wLiBJdCB3aWxsIGF1dG8gcmV2YWxpZGF0ZSB3aGVuIHJlZm9jdXNpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIHJlY29ubmVjdGluZy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRXJyb3JSZXRyeShlcnJfMSwga2V5LCBjb25maWcsIHJldmFsaWRhdGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50OiAob3B0cy5yZXRyeUNvdW50IHx8IDApICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWR1cGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgLy8gTWFyayBsb2FkaW5nIGFzIHN0b3BwZWQuXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBjdXJyZW50IGhvb2sncyBzdGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEhlcmUgaXMgdGhlIHNvdXJjZSBvZiB0aGUgcmVxdWVzdCwgbmVlZCB0byB0ZWxsIGFsbCBvdGhlciBob29rcyB0b1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlaXIgc3RhdGVzLlxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDdXJyZW50S2V5TW91bnRlZCgpICYmIHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJvYWRjYXN0U3RhdGUoY2FjaGUsIGtleSwgbmV3U3RhdGUuZGF0YSwgbmV3U3RhdGUuZXJyb3IsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgdHJ1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyB9LCBcbiAgICAvLyBgc2V0U3RhdGVgIGlzIGltbXV0YWJsZSwgYW5kIGBldmVudHNDYWxsYmFja2AsIGBmbkFyZ3NgLCBga2V5SW5mb2AsXG4gICAgLy8gYW5kIGBrZXlWYWxpZGF0aW5nYCBhcmUgZGVwZW5kaW5nIG9uIGBrZXlgLCBzbyB3ZSBjYW4gZXhjbHVkZSB0aGVtIGZyb21cbiAgICAvLyB0aGUgZGVwcyBhcnJheS5cbiAgICAvL1xuICAgIC8vIEZJWE1FOlxuICAgIC8vIGBmbmAgYW5kIGBjb25maWdgIG1pZ2h0IGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBsaWZlY3ljbGUsXG4gICAgLy8gYnV0IHRoZXkgbWlnaHQgYmUgY2hhbmdlZCBldmVyeSByZW5kZXIgbGlrZSB0aGlzLlxuICAgIC8vIGB1c2VTV1IoJ2tleScsICgpID0+IGZldGNoKCcvYXBpLycpLCB7IHN1c3BlbnNlOiB0cnVlIH0pYFxuICAgIC8vIFNvIHdlIG9taXQgdGhlIHZhbHVlcyBmcm9tIHRoZSBkZXBzIGFycmF5XG4gICAgLy8gZXZlbiB0aG91Z2ggaXQgbWlnaHQgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcnMuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtrZXldKTtcbiAgICAvLyBTaW1pbGFyIHRvIHRoZSBnbG9iYWwgbXV0YXRlLCBidXQgYm91bmQgdG8gdGhlIGN1cnJlbnQgY2FjaGUgYW5kIGtleS5cbiAgICAvLyBgY2FjaGVgIGlzbid0IGFsbG93ZWQgdG8gY2hhbmdlIGR1cmluZyB0aGUgbGlmZWN5Y2xlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB2YXIgYm91bmRNdXRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAvLyBCeSB1c2luZyBgYmluZGAgd2UgZG9uJ3QgbmVlZCB0byBtb2RpZnkgdGhlIHNpemUgb2YgdGhlIHJlc3QgYXJndW1lbnRzLlxuICAgIC8vIER1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzM3MTgxLCB3ZSBoYXZlIHRvXG4gICAgLy8gY2FzdCBpdCB0byBhbnkgZm9yIG5vdy5cbiAgICBpbnRlcm5hbE11dGF0ZS5iaW5kKFVOREVGSU5FRCwgY2FjaGUsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGtleVJlZi5jdXJyZW50OyB9KSwgXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtdKTtcbiAgICAvLyBBbHdheXMgdXBkYXRlIGZldGNoZXIgYW5kIGNvbmZpZyByZWZzLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICB9KTtcbiAgICAvLyBBZnRlciBtb3VudGVkIG9yIGtleSBjaGFuZ2VkLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWtleSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGtleUNoYW5nZWQgPSBrZXkgIT09IGtleVJlZi5jdXJyZW50O1xuICAgICAgICB2YXIgc29mdFJldmFsaWRhdGUgPSByZXZhbGlkYXRlLmJpbmQoVU5ERUZJTkVELCBXSVRIX0RFRFVQRSk7XG4gICAgICAgIC8vIEV4cG9zZSBzdGF0ZSB1cGRhdGVyIHRvIGdsb2JhbCBldmVudCBsaXN0ZW5lcnMuIFNvIHdlIGNhbiB1cGRhdGUgaG9vaydzXG4gICAgICAgIC8vIGludGVybmFsIHN0YXRlIGZyb20gdGhlIG91dHNpZGUuXG4gICAgICAgIHZhciBvblN0YXRlVXBkYXRlID0gZnVuY3Rpb24gKHVwZGF0ZWREYXRhLCB1cGRhdGVkRXJyb3IsIHVwZGF0ZWRJc1ZhbGlkYXRpbmcpIHtcbiAgICAgICAgICAgIHNldFN0YXRlKG1lcmdlT2JqZWN0cyh7XG4gICAgICAgICAgICAgICAgZXJyb3I6IHVwZGF0ZWRFcnJvcixcbiAgICAgICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IHVwZGF0ZWRJc1ZhbGlkYXRpbmdcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLy8gU2luY2UgYHNldFN0YXRlYCBvbmx5IHNoYWxsb3dseSBjb21wYXJlcyBzdGF0ZXMsIHdlIGRvIGEgZGVlcFxuICAgICAgICAgICAgLy8gY29tcGFyaXNvbiBoZXJlLlxuICAgICAgICAgICAgY29tcGFyZShzdGF0ZVJlZi5jdXJyZW50LmRhdGEsIHVwZGF0ZWREYXRhKVxuICAgICAgICAgICAgICAgID8gVU5ERUZJTkVEXG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHVwZGF0ZWREYXRhXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICB9O1xuICAgICAgICAvLyBFeHBvc2UgcmV2YWxpZGF0b3JzIHRvIGdsb2JhbCBldmVudCBsaXN0ZW5lcnMuIFNvIHdlIGNhbiB0cmlnZ2VyXG4gICAgICAgIC8vIHJldmFsaWRhdGlvbiBmcm9tIHRoZSBvdXRzaWRlLlxuICAgICAgICB2YXIgbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCA9IDA7XG4gICAgICAgIHZhciBvblJldmFsaWRhdGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT0gRk9DVVNfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uRm9jdXMgJiZcbiAgICAgICAgICAgICAgICAgICAgbm93ID4gbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCAmJlxuICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSBub3cgKyBnZXRDb25maWcoKS5mb2N1c1Rocm90dGxlSW50ZXJ2YWw7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBSRUNPTk5FQ1RfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uUmVjb25uZWN0ICYmIGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc29mdFJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IE1VVEFURV9FVkVOVCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH07XG4gICAgICAgIHZhciB1bnN1YlVwZGF0ZSA9IHN1YnNjcmliZUNhbGxiYWNrKGtleSwgU1RBVEVfVVBEQVRFUlMsIG9uU3RhdGVVcGRhdGUpO1xuICAgICAgICB2YXIgdW5zdWJFdmVudHMgPSBzdWJzY3JpYmVDYWxsYmFjayhrZXksIEVWRU5UX1JFVkFMSURBVE9SUywgb25SZXZhbGlkYXRlKTtcbiAgICAgICAgLy8gTWFyayB0aGUgY29tcG9uZW50IGFzIG1vdW50ZWQgYW5kIHVwZGF0ZSBjb3JyZXNwb25kaW5nIHJlZnMuXG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIGtleVJlZi5jdXJyZW50ID0ga2V5O1xuICAgICAgICBpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gV2hlbiBga2V5YCB1cGRhdGVzLCByZXNldCB0aGUgc3RhdGUgdG8gdGhlIGluaXRpYWwgdmFsdWVcbiAgICAgICAgLy8gYW5kIHRyaWdnZXIgYSByZXJlbmRlciBpZiBuZWNlc3NhcnkuXG4gICAgICAgIGlmIChrZXlDaGFuZ2VkKSB7XG4gICAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiBpc1ZhbGlkYXRpbmdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyaWdnZXIgYSByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChzaG91bGRSZXZhbGlkYXRlKCkpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChkYXRhKSB8fCBJU19TRVJWRVIpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXZhbGlkYXRlIGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEZWxheSB0aGUgcmV2YWxpZGF0ZSBpZiB3ZSBoYXZlIGRhdGEgdG8gcmV0dXJuIHNvIHdlIHdvbid0IGJsb2NrXG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nLlxuICAgICAgICAgICAgICAgIHJBRihzb2Z0UmV2YWxpZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIE1hcmsgaXQgYXMgdW5tb3VudGVkLlxuICAgICAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgdW5zdWJVcGRhdGUoKTtcbiAgICAgICAgICAgIHVuc3ViRXZlbnRzKCk7XG4gICAgICAgIH07XG4gICAgfSwgW2tleSwgcmV2YWxpZGF0ZV0pO1xuICAgIC8vIFBvbGxpbmdcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHRpbWVyO1xuICAgICAgICBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgLy8gVXNlIHRoZSBwYXNzZWQgaW50ZXJ2YWxcbiAgICAgICAgICAgIC8vIC4uLm9yIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgdXBkYXRlZCBkYXRhIHRvIGdldCB0aGUgaW50ZXJ2YWxcbiAgICAgICAgICAgIHZhciBpbnRlcnZhbCA9IGlzRnVuY3Rpb24ocmVmcmVzaEludGVydmFsKVxuICAgICAgICAgICAgICAgID8gcmVmcmVzaEludGVydmFsKGRhdGEpXG4gICAgICAgICAgICAgICAgOiByZWZyZXNoSW50ZXJ2YWw7XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHN0YXJ0IG5leHQgaW50ZXJ2YWwgaWYgYHJlZnJlc2hJbnRlcnZhbGAgaXMgbm90IDAsIGFuZDpcbiAgICAgICAgICAgIC8vIC0gYGZvcmNlYCBpcyB0cnVlLCB3aGljaCBpcyB0aGUgc3RhcnQgb2YgcG9sbGluZ1xuICAgICAgICAgICAgLy8gLSBvciBgdGltZXJgIGlzIG5vdCAwLCB3aGljaCBtZWFucyB0aGUgZWZmZWN0IHdhc24ndCBjYW5jZWxlZFxuICAgICAgICAgICAgaWYgKGludGVydmFsICYmIHRpbWVyICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChleGVjdXRlLCBpbnRlcnZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZXhlY3V0ZSgpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgT0sgdG8gZXhlY3V0ZTpcbiAgICAgICAgICAgIC8vIE9ubHkgcmV2YWxpZGF0ZSB3aGVuIHRoZSBwYWdlIGlzIHZpc2libGUsIG9ubGluZSBhbmQgbm90IGVycm9yZWQuXG4gICAgICAgICAgICBpZiAoIXN0YXRlUmVmLmN1cnJlbnQuZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAocmVmcmVzaFdoZW5IaWRkZW4gfHwgZ2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkpICYmXG4gICAgICAgICAgICAgICAgKHJlZnJlc2hXaGVuT2ZmbGluZSB8fCBnZXRDb25maWcoKS5pc09ubGluZSgpKSkge1xuICAgICAgICAgICAgICAgIHJldmFsaWRhdGUoV0lUSF9ERURVUEUpLnRoZW4obmV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBTY2hlZHVsZSBuZXh0IGludGVydmFsIHRvIGNoZWNrIGFnYWluLlxuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICAgIHRpbWVyID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW3JlZnJlc2hJbnRlcnZhbCwgcmVmcmVzaFdoZW5IaWRkZW4sIHJlZnJlc2hXaGVuT2ZmbGluZSwgcmV2YWxpZGF0ZV0pO1xuICAgIC8vIERpc3BsYXkgZGVidWcgaW5mbyBpbiBSZWFjdCBEZXZUb29scy5cbiAgICB1c2VEZWJ1Z1ZhbHVlKGRhdGEpO1xuICAgIC8vIEluIFN1c3BlbnNlIG1vZGUsIHdlIGNhbid0IHJldHVybiB0aGUgZW1wdHkgYGRhdGFgIHN0YXRlLlxuICAgIC8vIElmIHRoZXJlIGlzIGBlcnJvcmAsIHRoZSBgZXJyb3JgIG5lZWRzIHRvIGJlIHRocm93biB0byB0aGUgZXJyb3IgYm91bmRhcnkuXG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYGVycm9yYCwgdGhlIGByZXZhbGlkYXRpb25gIHByb21pc2UgbmVlZHMgdG8gYmUgdGhyb3duIHRvXG4gICAgLy8gdGhlIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAgIGlmIChzdXNwZW5zZSAmJiBpc1VuZGVmaW5lZChkYXRhKSAmJiBrZXkpIHtcbiAgICAgICAgLy8gQWx3YXlzIHVwZGF0ZSBmZXRjaGVyIGFuZCBjb25maWcgcmVmcyBldmVuIHdpdGggdGhlIFN1c3BlbnNlIG1vZGUuXG4gICAgICAgIGZldGNoZXJSZWYuY3VycmVudCA9IGZldGNoZXI7XG4gICAgICAgIGNvbmZpZ1JlZi5jdXJyZW50ID0gY29uZmlnO1xuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB0aHJvdyBpc1VuZGVmaW5lZChlcnJvcikgPyByZXZhbGlkYXRlKFdJVEhfREVEVVBFKSA6IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBtdXRhdGU6IGJvdW5kTXV0YXRlLFxuICAgICAgICBnZXQgZGF0YSgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBlcnJvcigpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzVmFsaWRhdGluZygpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmlzVmFsaWRhdGluZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gaXNWYWxpZGF0aW5nO1xuICAgICAgICB9XG4gICAgfTtcbn07XG52YXIgU1dSQ29uZmlnID0gT0JKRUNULmRlZmluZVByb3BlcnR5KFNXUkNvbmZpZyQxLCAnZGVmYXVsdCcsIHtcbiAgICB2YWx1ZTogZGVmYXVsdENvbmZpZ1xufSk7XG52YXIgdW5zdGFibGVfc2VyaWFsaXplID0gZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gc2VyaWFsaXplKGtleSlbMF07IH07XG52YXIgdXNlU1dSID0gd2l0aEFyZ3ModXNlU1dSSGFuZGxlcik7XG5cbi8vIHVzZVNXUlxuXG5leHBvcnQgeyBTV1JDb25maWcsIHVzZVNXUiBhcyBkZWZhdWx0LCBtdXRhdGUsIHVuc3RhYmxlX3NlcmlhbGl6ZSwgdXNlU1dSQ29uZmlnIH07XG4iLCJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTV1JDb25maWcgfSBmcm9tIFwic3dyXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTV1JIb29rc0NvbmZpZygpIHtcbiAgICB2YXIgc3dyQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgdmFyIHZhbHVlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiAoeyBtdXRhdGU6IHN3ckNvbmZpZy5tdXRhdGUsIGNhY2hlOiBzd3JDb25maWcuY2FjaGUgfSk7IH0sIFtzd3JDb25maWcubXV0YXRlLCBzd3JDb25maWcuY2FjaGVdKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VTV1JIb29rc0NvbmZpZy5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVG9nZ2xlKGluaXRpYWxWYWx1ZSkge1xuICAgIGlmIChpbml0aWFsVmFsdWUgPT09IHZvaWQgMCkgeyBpbml0aWFsVmFsdWUgPSBmYWxzZTsgfVxuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZShpbml0aWFsVmFsdWUpLCAyKSwgdmFsdWUgPSBfYVswXSwgc2V0VmFsdWUgPSBfYVsxXTtcbiAgICB2YXIgdG9nZ2xlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShmdW5jdGlvbiAocHJldlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcmV2VmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gW3ZhbHVlLCB0b2dnbGVdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlVG9nZ2xlLmpzLm1hcCIsIi8qKiEgXG4gKiBob3RrZXlzLWpzIHYzLjkuMyBcbiAqIEEgc2ltcGxlIG1pY3JvLWxpYnJhcnkgZm9yIGRlZmluaW5nIGFuZCBkaXNwYXRjaGluZyBrZXlib2FyZCBzaG9ydGN1dHMuIEl0IGhhcyBubyBkZXBlbmRlbmNpZXMuIFxuICogXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjIga2Vubnkgd29uZyA8d293b2hvb0BxcS5jb20+IFxuICogaHR0cDovL2pheXdjamxvdmUuZ2l0aHViLmlvL2hvdGtleXMgXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgXG4gKi9cblxudmFyIGlzZmYgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyA/IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXJlZm94JykgPiAwIDogZmFsc2U7IC8vIOe7keWumuS6i+S7tlxuXG5mdW5jdGlvbiBhZGRFdmVudChvYmplY3QsIGV2ZW50LCBtZXRob2QsIHVzZUNhcHR1cmUpIHtcbiAgaWYgKG9iamVjdC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgb2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG1ldGhvZCwgdXNlQ2FwdHVyZSk7XG4gIH0gZWxzZSBpZiAob2JqZWN0LmF0dGFjaEV2ZW50KSB7XG4gICAgb2JqZWN0LmF0dGFjaEV2ZW50KFwib25cIi5jb25jYXQoZXZlbnQpLCBmdW5jdGlvbiAoKSB7XG4gICAgICBtZXRob2Qod2luZG93LmV2ZW50KTtcbiAgICB9KTtcbiAgfVxufSAvLyDkv67ppbDplK7ovazmjaLmiJDlr7nlupTnmoTplK7noIFcblxuXG5mdW5jdGlvbiBnZXRNb2RzKG1vZGlmaWVyLCBrZXkpIHtcbiAgdmFyIG1vZHMgPSBrZXkuc2xpY2UoMCwga2V5Lmxlbmd0aCAtIDEpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kcy5sZW5ndGg7IGkrKykge1xuICAgIG1vZHNbaV0gPSBtb2RpZmllclttb2RzW2ldLnRvTG93ZXJDYXNlKCldO1xuICB9XG5cbiAgcmV0dXJuIG1vZHM7XG59IC8vIOWkhOeQhuS8oOeahGtleeWtl+espuS4sui9rOaNouaIkOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGdldEtleXMoa2V5KSB7XG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykga2V5ID0gJyc7XG4gIGtleSA9IGtleS5yZXBsYWNlKC9cXHMvZywgJycpOyAvLyDljLnphY3ku7vkvZXnqbrnmb3lrZfnrKYs5YyF5ous56m65qC844CB5Yi26KGo56ym44CB5o2i6aG156ym562J562JXG5cbiAgdmFyIGtleXMgPSBrZXkuc3BsaXQoJywnKTsgLy8g5ZCM5pe26K6+572u5aSa5Liq5b+r5o236ZSu77yM5LulJywn5YiG5YmyXG5cbiAgdmFyIGluZGV4ID0ga2V5cy5sYXN0SW5kZXhPZignJyk7IC8vIOW/q+aNt+mUruWPr+iDveWMheWQqycsJ++8jOmcgOeJueauiuWkhOeQhlxuXG4gIGZvciAoOyBpbmRleCA+PSAwOykge1xuICAgIGtleXNbaW5kZXggLSAxXSArPSAnLCc7XG4gICAga2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGluZGV4ID0ga2V5cy5sYXN0SW5kZXhPZignJyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn0gLy8g5q+U6L6D5L+u6aWw6ZSu55qE5pWw57uEXG5cblxuZnVuY3Rpb24gY29tcGFyZUFycmF5KGExLCBhMikge1xuICB2YXIgYXJyMSA9IGExLmxlbmd0aCA+PSBhMi5sZW5ndGggPyBhMSA6IGEyO1xuICB2YXIgYXJyMiA9IGExLmxlbmd0aCA+PSBhMi5sZW5ndGggPyBhMiA6IGExO1xuICB2YXIgaXNJbmRleCA9IHRydWU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFycjIuaW5kZXhPZihhcnIxW2ldKSA9PT0gLTEpIGlzSW5kZXggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc0luZGV4O1xufVxuXG52YXIgX2tleU1hcCA9IHtcbiAgYmFja3NwYWNlOiA4LFxuICB0YWI6IDksXG4gIGNsZWFyOiAxMixcbiAgZW50ZXI6IDEzLFxuICByZXR1cm46IDEzLFxuICBlc2M6IDI3LFxuICBlc2NhcGU6IDI3LFxuICBzcGFjZTogMzIsXG4gIGxlZnQ6IDM3LFxuICB1cDogMzgsXG4gIHJpZ2h0OiAzOSxcbiAgZG93bjogNDAsXG4gIGRlbDogNDYsXG4gIGRlbGV0ZTogNDYsXG4gIGluczogNDUsXG4gIGluc2VydDogNDUsXG4gIGhvbWU6IDM2LFxuICBlbmQ6IDM1LFxuICBwYWdldXA6IDMzLFxuICBwYWdlZG93bjogMzQsXG4gIGNhcHNsb2NrOiAyMCxcbiAgbnVtXzA6IDk2LFxuICBudW1fMTogOTcsXG4gIG51bV8yOiA5OCxcbiAgbnVtXzM6IDk5LFxuICBudW1fNDogMTAwLFxuICBudW1fNTogMTAxLFxuICBudW1fNjogMTAyLFxuICBudW1fNzogMTAzLFxuICBudW1fODogMTA0LFxuICBudW1fOTogMTA1LFxuICBudW1fbXVsdGlwbHk6IDEwNixcbiAgbnVtX2FkZDogMTA3LFxuICBudW1fZW50ZXI6IDEwOCxcbiAgbnVtX3N1YnRyYWN0OiAxMDksXG4gIG51bV9kZWNpbWFsOiAxMTAsXG4gIG51bV9kaXZpZGU6IDExMSxcbiAgJ+KHqic6IDIwLFxuICAnLCc6IDE4OCxcbiAgJy4nOiAxOTAsXG4gICcvJzogMTkxLFxuICAnYCc6IDE5MixcbiAgJy0nOiBpc2ZmID8gMTczIDogMTg5LFxuICAnPSc6IGlzZmYgPyA2MSA6IDE4NyxcbiAgJzsnOiBpc2ZmID8gNTkgOiAxODYsXG4gICdcXCcnOiAyMjIsXG4gICdbJzogMjE5LFxuICAnXSc6IDIyMSxcbiAgJ1xcXFwnOiAyMjBcbn07IC8vIE1vZGlmaWVyIEtleXNcblxudmFyIF9tb2RpZmllciA9IHtcbiAgLy8gc2hpZnRLZXlcbiAgJ+KHpyc6IDE2LFxuICBzaGlmdDogMTYsXG4gIC8vIGFsdEtleVxuICAn4oylJzogMTgsXG4gIGFsdDogMTgsXG4gIG9wdGlvbjogMTgsXG4gIC8vIGN0cmxLZXlcbiAgJ+KMgyc6IDE3LFxuICBjdHJsOiAxNyxcbiAgY29udHJvbDogMTcsXG4gIC8vIG1ldGFLZXlcbiAgJ+KMmCc6IDkxLFxuICBjbWQ6IDkxLFxuICBjb21tYW5kOiA5MVxufTtcbnZhciBtb2RpZmllck1hcCA9IHtcbiAgMTY6ICdzaGlmdEtleScsXG4gIDE4OiAnYWx0S2V5JyxcbiAgMTc6ICdjdHJsS2V5JyxcbiAgOTE6ICdtZXRhS2V5JyxcbiAgc2hpZnRLZXk6IDE2LFxuICBjdHJsS2V5OiAxNyxcbiAgYWx0S2V5OiAxOCxcbiAgbWV0YUtleTogOTFcbn07XG52YXIgX21vZHMgPSB7XG4gIDE2OiBmYWxzZSxcbiAgMTg6IGZhbHNlLFxuICAxNzogZmFsc2UsXG4gIDkxOiBmYWxzZVxufTtcbnZhciBfaGFuZGxlcnMgPSB7fTsgLy8gRjF+RjEyIHNwZWNpYWwga2V5XG5cbmZvciAodmFyIGsgPSAxOyBrIDwgMjA7IGsrKykge1xuICBfa2V5TWFwW1wiZlwiLmNvbmNhdChrKV0gPSAxMTEgKyBrO1xufVxuXG52YXIgX2Rvd25LZXlzID0gW107IC8vIOiusOW9leaRgeS4i+eahOe7keWumumUrlxuXG52YXIgd2luTGlzdGVuZEZvY3VzID0gZmFsc2U7IC8vIHdpbmRvd+aYr+WQpuW3sue7j+ebkeWQrOS6hmZvY3Vz5LqL5Lu2XG5cbnZhciBfc2NvcGUgPSAnYWxsJzsgLy8g6buY6K6k54Ot6ZSu6IyD5Zu0XG5cbnZhciBlbGVtZW50SGFzQmluZEV2ZW50ID0gW107IC8vIOW3sue7keWumuS6i+S7tueahOiKgueCueiusOW9lVxuLy8g6L+U5Zue6ZSu56CBXG5cbnZhciBjb2RlID0gZnVuY3Rpb24gY29kZSh4KSB7XG4gIHJldHVybiBfa2V5TWFwW3gudG9Mb3dlckNhc2UoKV0gfHwgX21vZGlmaWVyW3gudG9Mb3dlckNhc2UoKV0gfHwgeC50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCk7XG59OyAvLyDorr7nva7ojrflj5blvZPliY3ojIPlm7TvvIjpu5jorqTkuLon5omA5pyJJ++8iVxuXG5cbmZ1bmN0aW9uIHNldFNjb3BlKHNjb3BlKSB7XG4gIF9zY29wZSA9IHNjb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5blvZPliY3ojIPlm7RcblxuXG5mdW5jdGlvbiBnZXRTY29wZSgpIHtcbiAgcmV0dXJuIF9zY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5pGB5LiL57uR5a6a6ZSu55qE6ZSu5YC8XG5cblxuZnVuY3Rpb24gZ2V0UHJlc3NlZEtleUNvZGVzKCkge1xuICByZXR1cm4gX2Rvd25LZXlzLnNsaWNlKDApO1xufSAvLyDooajljZXmjqfku7bmjqfku7bliKTmlq0g6L+U5ZueIEJvb2xlYW5cbi8vIGhvdGtleSBpcyBlZmZlY3RpdmUgb25seSB3aGVuIGZpbHRlciByZXR1cm4gdHJ1ZVxuXG5cbmZ1bmN0aW9uIGZpbHRlcihldmVudCkge1xuICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gIHZhciB0YWdOYW1lID0gdGFyZ2V0LnRhZ05hbWU7XG4gIHZhciBmbGFnID0gdHJ1ZTsgLy8gaWdub3JlOiBpc0NvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnLCA8aW5wdXQ+IGFuZCA8dGV4dGFyZWE+IHdoZW4gcmVhZE9ubHkgc3RhdGUgaXMgZmFsc2UsIDxzZWxlY3Q+XG5cbiAgaWYgKHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSB8fCAodGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YWdOYW1lID09PSAnVEVYVEFSRUEnIHx8IHRhZ05hbWUgPT09ICdTRUxFQ1QnKSAmJiAhdGFyZ2V0LnJlYWRPbmx5KSB7XG4gICAgZmxhZyA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZsYWc7XG59IC8vIOWIpOaWreaRgeS4i+eahOmUruaYr+WQpuS4uuafkOS4qumUru+8jOi/lOWbnnRydWXmiJbogIVmYWxzZVxuXG5cbmZ1bmN0aW9uIGlzUHJlc3NlZChrZXlDb2RlKSB7XG4gIGlmICh0eXBlb2Yga2V5Q29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICBrZXlDb2RlID0gY29kZShrZXlDb2RlKTsgLy8g6L2s5o2i5oiQ6ZSu56CBXG4gIH1cblxuICByZXR1cm4gX2Rvd25LZXlzLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xO1xufSAvLyDlvqrnjq/liKDpmaRoYW5kbGVyc+S4reeahOaJgOaciSBzY29wZSjojIPlm7QpXG5cblxuZnVuY3Rpb24gZGVsZXRlU2NvcGUoc2NvcGUsIG5ld1Njb3BlKSB7XG4gIHZhciBoYW5kbGVycztcbiAgdmFyIGk7IC8vIOayoeacieaMh+WumnNjb3Bl77yM6I635Y+Wc2NvcGVcblxuICBpZiAoIXNjb3BlKSBzY29wZSA9IGdldFNjb3BlKCk7XG5cbiAgZm9yICh2YXIga2V5IGluIF9oYW5kbGVycykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2hhbmRsZXJzLCBrZXkpKSB7XG4gICAgICBoYW5kbGVycyA9IF9oYW5kbGVyc1trZXldO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOykge1xuICAgICAgICBpZiAoaGFuZGxlcnNbaV0uc2NvcGUgPT09IHNjb3BlKSBoYW5kbGVycy5zcGxpY2UoaSwgMSk7ZWxzZSBpKys7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIOWmguaenHNjb3Bl6KKr5Yig6Zmk77yM5bCGc2NvcGXph43nva7kuLphbGxcblxuXG4gIGlmIChnZXRTY29wZSgpID09PSBzY29wZSkgc2V0U2NvcGUobmV3U2NvcGUgfHwgJ2FsbCcpO1xufSAvLyDmuIXpmaTkv67ppbDplK5cblxuXG5mdW5jdGlvbiBjbGVhck1vZGlmaWVyKGV2ZW50KSB7XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlO1xuXG4gIHZhciBpID0gX2Rvd25LZXlzLmluZGV4T2Yoa2V5KTsgLy8g5LuO5YiX6KGo5Lit5riF6Zmk5oyJ5Y6L6L+H55qE6ZSuXG5cblxuICBpZiAoaSA+PSAwKSB7XG4gICAgX2Rvd25LZXlzLnNwbGljZShpLCAxKTtcbiAgfSAvLyDnibnmrorlpITnkIYgY21tYW5kIOmUru+8jOWcqCBjbW1hbmQg57uE5ZCI5b+r5o236ZSuIGtleXVwIOWPquaJp+ihjOS4gOasoeeahOmXrumimFxuXG5cbiAgaWYgKGV2ZW50LmtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ21ldGEnKSB7XG4gICAgX2Rvd25LZXlzLnNwbGljZSgwLCBfZG93bktleXMubGVuZ3RoKTtcbiAgfSAvLyDkv67ppbDplK4gc2hpZnRLZXkgYWx0S2V5IGN0cmxLZXkgKGNvbW1hbmR8fG1ldGFLZXkpIOa4hemZpFxuXG5cbiAgaWYgKGtleSA9PT0gOTMgfHwga2V5ID09PSAyMjQpIGtleSA9IDkxO1xuXG4gIGlmIChrZXkgaW4gX21vZHMpIHtcbiAgICBfbW9kc1trZXldID0gZmFsc2U7IC8vIOWwhuS/rumlsOmUrumHjee9ruS4umZhbHNlXG5cbiAgICBmb3IgKHZhciBrIGluIF9tb2RpZmllcikge1xuICAgICAgaWYgKF9tb2RpZmllcltrXSA9PT0ga2V5KSBob3RrZXlzW2tdID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVuYmluZChrZXlzSW5mbykge1xuICAvLyB1bmJpbmQoKSwgdW5iaW5kIGFsbCBrZXlzXG4gIGlmICgha2V5c0luZm8pIHtcbiAgICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGRlbGV0ZSBfaGFuZGxlcnNba2V5XTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXNJbmZvKSkge1xuICAgIC8vIHN1cHBvcnQgbGlrZSA6IHVuYmluZChbe2tleTogJ2N0cmwrYScsIHNjb3BlOiAnczEnfSwge2tleTogJ2N0cmwtYScsIHNjb3BlOiAnczInLCBzcGxpdEtleTogJy0nfV0pXG4gICAga2V5c0luZm8uZm9yRWFjaChmdW5jdGlvbiAoaW5mbykge1xuICAgICAgaWYgKGluZm8ua2V5KSBlYWNoVW5iaW5kKGluZm8pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgdW5iaW5kKHtrZXk6ICdjdHJsK2EsIGN0cmwrYicsIHNjb3BlOidhYmMnfSlcbiAgICBpZiAoa2V5c0luZm8ua2V5KSBlYWNoVW5iaW5kKGtleXNJbmZvKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdzdHJpbmcnKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBvbGQgbWV0aG9kXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHZhciBzY29wZSA9IGFyZ3NbMF0sXG4gICAgICAgIG1ldGhvZCA9IGFyZ3NbMV07XG5cbiAgICBpZiAodHlwZW9mIHNjb3BlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBtZXRob2QgPSBzY29wZTtcbiAgICAgIHNjb3BlID0gJyc7XG4gICAgfVxuXG4gICAgZWFjaFVuYmluZCh7XG4gICAgICBrZXk6IGtleXNJbmZvLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBzcGxpdEtleTogJysnXG4gICAgfSk7XG4gIH1cbn0gLy8g6Kej6Zmk57uR5a6a5p+Q5Liq6IyD5Zu055qE5b+r5o236ZSuXG5cblxudmFyIGVhY2hVbmJpbmQgPSBmdW5jdGlvbiBlYWNoVW5iaW5kKF9yZWYpIHtcbiAgdmFyIGtleSA9IF9yZWYua2V5LFxuICAgICAgc2NvcGUgPSBfcmVmLnNjb3BlLFxuICAgICAgbWV0aG9kID0gX3JlZi5tZXRob2QsXG4gICAgICBfcmVmJHNwbGl0S2V5ID0gX3JlZi5zcGxpdEtleSxcbiAgICAgIHNwbGl0S2V5ID0gX3JlZiRzcGxpdEtleSA9PT0gdm9pZCAwID8gJysnIDogX3JlZiRzcGxpdEtleTtcbiAgdmFyIG11bHRpcGxlS2V5cyA9IGdldEtleXMoa2V5KTtcbiAgbXVsdGlwbGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKG9yaWdpbktleSkge1xuICAgIHZhciB1bmJpbmRLZXlzID0gb3JpZ2luS2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICB2YXIgbGVuID0gdW5iaW5kS2V5cy5sZW5ndGg7XG4gICAgdmFyIGxhc3RLZXkgPSB1bmJpbmRLZXlzW2xlbiAtIDFdO1xuICAgIHZhciBrZXlDb2RlID0gbGFzdEtleSA9PT0gJyonID8gJyonIDogY29kZShsYXN0S2V5KTtcbiAgICBpZiAoIV9oYW5kbGVyc1trZXlDb2RlXSkgcmV0dXJuOyAvLyDliKTmlq3mmK/lkKbkvKDlhaXojIPlm7TvvIzmsqHmnInlsLHojrflj5bojIPlm7RcblxuICAgIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICB2YXIgbW9kcyA9IGxlbiA+IDEgPyBnZXRNb2RzKF9tb2RpZmllciwgdW5iaW5kS2V5cykgOiBbXTtcbiAgICBfaGFuZGxlcnNba2V5Q29kZV0gPSBfaGFuZGxlcnNba2V5Q29kZV0uZmlsdGVyKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgIC8vIOmAmui/h+WHveaVsOWIpOaWre+8jOaYr+WQpuino+mZpOe7keWumu+8jOWHveaVsOebuOetieebtOaOpei/lOWbnlxuICAgICAgdmFyIGlzTWF0Y2hpbmdNZXRob2QgPSBtZXRob2QgPyByZWNvcmQubWV0aG9kID09PSBtZXRob2QgOiB0cnVlO1xuICAgICAgcmV0dXJuICEoaXNNYXRjaGluZ01ldGhvZCAmJiByZWNvcmQuc2NvcGUgPT09IHNjb3BlICYmIGNvbXBhcmVBcnJheShyZWNvcmQubW9kcywgbW9kcykpO1xuICAgIH0pO1xuICB9KTtcbn07IC8vIOWvueebkeWQrOWvueW6lOW/q+aNt+mUrueahOWbnuiwg+WHveaVsOi/m+ihjOWkhOeQhlxuXG5cbmZ1bmN0aW9uIGV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlciwgc2NvcGUsIGVsZW1lbnQpIHtcbiAgaWYgKGhhbmRsZXIuZWxlbWVudCAhPT0gZWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtb2RpZmllcnNNYXRjaDsgLy8g55yL5a6D5piv5ZCm5Zyo5b2T5YmN6IyD5Zu0XG5cbiAgaWYgKGhhbmRsZXIuc2NvcGUgPT09IHNjb3BlIHx8IGhhbmRsZXIuc2NvcGUgPT09ICdhbGwnKSB7XG4gICAgLy8g5qOA5p+l5piv5ZCm5Yy56YWN5L+u6aWw56ym77yI5aaC5p6c5pyJ6L+U5ZuedHJ1Ze+8iVxuICAgIG1vZGlmaWVyc01hdGNoID0gaGFuZGxlci5tb2RzLmxlbmd0aCA+IDA7XG5cbiAgICBmb3IgKHZhciB5IGluIF9tb2RzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCB5KSkge1xuICAgICAgICBpZiAoIV9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA+IC0xIHx8IF9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA9PT0gLTEpIHtcbiAgICAgICAgICBtb2RpZmllcnNNYXRjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyDosIPnlKjlpITnkIbnqIvluo/vvIzlpoLmnpzmmK/kv67ppbDplK7kuI3lgZrlpITnkIZcblxuXG4gICAgaWYgKGhhbmRsZXIubW9kcy5sZW5ndGggPT09IDAgJiYgIV9tb2RzWzE2XSAmJiAhX21vZHNbMThdICYmICFfbW9kc1sxN10gJiYgIV9tb2RzWzkxXSB8fCBtb2RpZmllcnNNYXRjaCB8fCBoYW5kbGVyLnNob3J0Y3V0ID09PSAnKicpIHtcbiAgICAgIGlmIChoYW5kbGVyLm1ldGhvZChldmVudCwgaGFuZGxlcikgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtlbHNlIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZXZlbnQuY2FuY2VsQnViYmxlKSBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDlpITnkIZrZXlkb3du5LqL5Lu2XG5cblxuZnVuY3Rpb24gZGlzcGF0Y2goZXZlbnQsIGVsZW1lbnQpIHtcbiAgdmFyIGFzdGVyaXNrID0gX2hhbmRsZXJzWycqJ107XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlOyAvLyDooajljZXmjqfku7bov4fmu6Qg6buY6K6k6KGo5Y2V5o6n5Lu25LiN6Kem5Y+R5b+r5o236ZSuXG5cbiAgaWYgKCFob3RrZXlzLmZpbHRlci5jYWxsKHRoaXMsIGV2ZW50KSkgcmV0dXJuOyAvLyBHZWNrbyhGaXJlZm94KeeahGNvbW1hbmTplK7lgLwyMjTvvIzlnKhXZWJraXQoQ2hyb21lKeS4reS/neaMgeS4gOiHtFxuICAvLyBXZWJraXTlt6blj7MgY29tbWFuZCDplK7lgLzkuI3kuIDmoLdcblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG4gIC8qKlxuICAgKiBDb2xsZWN0IGJvdW5kIGtleXNcbiAgICogSWYgYW4gSW5wdXQgTWV0aG9kIEVkaXRvciBpcyBwcm9jZXNzaW5nIGtleSBpbnB1dCBhbmQgdGhlIGV2ZW50IGlzIGtleWRvd24sIHJldHVybiAyMjkuXG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI1MDQzOTM0L2lzLWl0LW9rLXRvLWlnbm9yZS1rZXlkb3duLWV2ZW50cy13aXRoLWtleWNvZGUtMjI5XG4gICAqIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3d3dy1kb20vMjAxMEp1bFNlcC9hdHQtMDE4Mi9rZXlDb2RlLXNwZWMuaHRtbFxuICAgKi9cblxuICBpZiAoX2Rvd25LZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiYga2V5ICE9PSAyMjkpIF9kb3duS2V5cy5wdXNoKGtleSk7XG4gIC8qKlxuICAgKiBKZXN0IHRlc3QgY2FzZXMgYXJlIHJlcXVpcmVkLlxuICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAqL1xuXG4gIFsnY3RybEtleScsICdhbHRLZXknLCAnc2hpZnRLZXknLCAnbWV0YUtleSddLmZvckVhY2goZnVuY3Rpb24gKGtleU5hbWUpIHtcbiAgICB2YXIga2V5TnVtID0gbW9kaWZpZXJNYXBba2V5TmFtZV07XG5cbiAgICBpZiAoZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKGtleU51bSk7XG4gICAgfSBlbHNlIGlmICghZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA+IC0xKSB7XG4gICAgICBfZG93bktleXMuc3BsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSksIDEpO1xuICAgIH0gZWxzZSBpZiAoa2V5TmFtZSA9PT0gJ21ldGFLZXknICYmIGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8qKlxuICAgICAgICogRml4IGlmIENvbW1hbmQgaXMgcHJlc3NlZDpcbiAgICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAqL1xuICAgICAgaWYgKCEoZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkpKSB7XG4gICAgICAgIF9kb3duS2V5cyA9IF9kb3duS2V5cy5zbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IHRydWU7IC8vIOWwhueJueauiuWtl+espueahGtleeazqOWGjOWIsCBob3RrZXlzIOS4ilxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFhc3RlcmlzaykgcmV0dXJuO1xuICB9IC8vIOWwhiBtb2RpZmllck1hcCDph4zpnaLnmoTkv67ppbDplK7nu5HlrprliLAgZXZlbnQg5LitXG5cblxuICBmb3IgKHZhciBlIGluIF9tb2RzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgZSkpIHtcbiAgICAgIF9tb2RzW2VdID0gZXZlbnRbbW9kaWZpZXJNYXBbZV1dO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pheXdjamxvdmUvaG90a2V5cy9wdWxsLzEyOVxuICAgKiBUaGlzIHNvbHZlcyB0aGUgaXNzdWUgaW4gRmlyZWZveCBvbiBXaW5kb3dzIHdoZXJlIGhvdGtleXMgY29ycmVzcG9uZGluZyB0byBzcGVjaWFsIGNoYXJhY3RlcnMgd291bGQgbm90IHRyaWdnZXIuXG4gICAqIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyBjdHJsK2FsdCttIG9uIGEgU3dlZGlzaCBrZXlib2FyZCB3aGljaCBpcyB1c2VkIHRvIHR5cGUgzrwuXG4gICAqIEJyb3dzZXIgc3VwcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS8jZmVhdD1rZXlib2FyZGV2ZW50LWdldG1vZGlmaWVyc3RhdGVcbiAgICovXG5cblxuICBpZiAoZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSAmJiAhKGV2ZW50LmFsdEtleSAmJiAhZXZlbnQuY3RybEtleSkgJiYgZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSgnQWx0R3JhcGgnKSkge1xuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxNykgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxNyk7XG4gICAgfVxuXG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE4KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE4KTtcbiAgICB9XG5cbiAgICBfbW9kc1sxN10gPSB0cnVlO1xuICAgIF9tb2RzWzE4XSA9IHRydWU7XG4gIH0gLy8g6I635Y+W6IyD5Zu0IOm7mOiupOS4uiBgYWxsYFxuXG5cbiAgdmFyIHNjb3BlID0gZ2V0U2NvcGUoKTsgLy8g5a+55Lu75L2V5b+r5o236ZSu6YO96ZyA6KaB5YGa55qE5aSE55CGXG5cbiAgaWYgKGFzdGVyaXNrKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc3Rlcmlzay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFzdGVyaXNrW2ldLnNjb3BlID09PSBzY29wZSAmJiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIGFzdGVyaXNrW2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBhc3Rlcmlza1tpXS5rZXl1cCkpIHtcbiAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCBhc3Rlcmlza1tpXSwgc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBrZXkg5LiN5ZyoIF9oYW5kbGVycyDkuK3ov5Tlm55cblxuXG4gIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSByZXR1cm47XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IF9oYW5kbGVyc1trZXldLmxlbmd0aDsgX2krKykge1xuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5dXApIHtcbiAgICAgIGlmIChfaGFuZGxlcnNba2V5XVtfaV0ua2V5KSB7XG4gICAgICAgIHZhciByZWNvcmQgPSBfaGFuZGxlcnNba2V5XVtfaV07XG4gICAgICAgIHZhciBzcGxpdEtleSA9IHJlY29yZC5zcGxpdEtleTtcbiAgICAgICAgdmFyIGtleVNob3J0Y3V0ID0gcmVjb3JkLmtleS5zcGxpdChzcGxpdEtleSk7XG4gICAgICAgIHZhciBfZG93bktleXNDdXJyZW50ID0gW107IC8vIOiusOW9leW9k+WJjeaMiemUrumUruWAvFxuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwga2V5U2hvcnRjdXQubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICBfZG93bktleXNDdXJyZW50LnB1c2goY29kZShrZXlTaG9ydGN1dFthXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9kb3duS2V5c0N1cnJlbnQuc29ydCgpLmpvaW4oJycpID09PSBfZG93bktleXMuc29ydCgpLmpvaW4oJycpKSB7XG4gICAgICAgICAgLy8g5om+5Yiw5aSE55CG5YaF5a65XG4gICAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCByZWNvcmQsIHNjb3BlLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDliKTmlq0gZWxlbWVudCDmmK/lkKblt7Lnu4/nu5Hlrprkuovku7ZcblxuXG5mdW5jdGlvbiBpc0VsZW1lbnRCaW5kKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnRIYXNCaW5kRXZlbnQuaW5kZXhPZihlbGVtZW50KSA+IC0xO1xufVxuXG5mdW5jdGlvbiBob3RrZXlzKGtleSwgb3B0aW9uLCBtZXRob2QpIHtcbiAgX2Rvd25LZXlzID0gW107XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhrZXkpOyAvLyDpnIDopoHlpITnkIbnmoTlv6vmjbfplK7liJfooahcblxuICB2YXIgbW9kcyA9IFtdO1xuICB2YXIgc2NvcGUgPSAnYWxsJzsgLy8gc2NvcGXpu5jorqTkuLphbGzvvIzmiYDmnInojIPlm7Tpg73mnInmlYhcblxuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50OyAvLyDlv6vmjbfplK7kuovku7bnu5HlrproioLngrlcblxuICB2YXIgaSA9IDA7XG4gIHZhciBrZXl1cCA9IGZhbHNlO1xuICB2YXIga2V5ZG93biA9IHRydWU7XG4gIHZhciBzcGxpdEtleSA9ICcrJztcbiAgdmFyIGNhcHR1cmUgPSBmYWxzZTsgLy8g5a+55Li66K6+5a6a6IyD5Zu055qE5Yik5patXG5cbiAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBtZXRob2QgPSBvcHRpb247XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbikgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgaWYgKG9wdGlvbi5zY29wZSkgc2NvcGUgPSBvcHRpb24uc2NvcGU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24uZWxlbWVudCkgZWxlbWVudCA9IG9wdGlvbi5lbGVtZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleXVwKSBrZXl1cCA9IG9wdGlvbi5rZXl1cDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXlkb3duICE9PSB1bmRlZmluZWQpIGtleWRvd24gPSBvcHRpb24ua2V5ZG93bjsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5jYXB0dXJlICE9PSB1bmRlZmluZWQpIGNhcHR1cmUgPSBvcHRpb24uY2FwdHVyZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb24uc3BsaXRLZXkgPT09ICdzdHJpbmcnKSBzcGxpdEtleSA9IG9wdGlvbi5zcGxpdEtleTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSBzY29wZSA9IG9wdGlvbjsgLy8g5a+55LqO5q+P5Liq5b+r5o236ZSu6L+b6KGM5aSE55CGXG5cbiAgZm9yICg7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXS5zcGxpdChzcGxpdEtleSk7IC8vIOaMiemUruWIl+ihqFxuXG4gICAgbW9kcyA9IFtdOyAvLyDlpoLmnpzmmK/nu4TlkIjlv6vmjbfplK7lj5blvpfnu4TlkIjlv6vmjbfplK5cblxuICAgIGlmIChrZXkubGVuZ3RoID4gMSkgbW9kcyA9IGdldE1vZHMoX21vZGlmaWVyLCBrZXkpOyAvLyDlsIbpnZ7kv67ppbDplK7ovazljJbkuLrplK7noIFcblxuICAgIGtleSA9IGtleVtrZXkubGVuZ3RoIC0gMV07XG4gICAga2V5ID0ga2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGtleSk7IC8vICrooajnpLrljLnphY3miYDmnInlv6vmjbfplK5cbiAgICAvLyDliKTmlq1rZXnmmK/lkKblnKhfaGFuZGxlcnPkuK3vvIzkuI3lnKjlsLHotYvkuIDkuKrnqbrmlbDnu4RcblxuICAgIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSBfaGFuZGxlcnNba2V5XSA9IFtdO1xuXG4gICAgX2hhbmRsZXJzW2tleV0ucHVzaCh7XG4gICAgICBrZXl1cDoga2V5dXAsXG4gICAgICBrZXlkb3duOiBrZXlkb3duLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbW9kczogbW9kcyxcbiAgICAgIHNob3J0Y3V0OiBrZXlzW2ldLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBrZXk6IGtleXNbaV0sXG4gICAgICBzcGxpdEtleTogc3BsaXRLZXksXG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSk7XG4gIH0gLy8g5Zyo5YWo5bGAZG9jdW1lbnTkuIrorr7nva7lv6vmjbfplK5cblxuXG4gIGlmICh0eXBlb2YgZWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRWxlbWVudEJpbmQoZWxlbWVudCkgJiYgd2luZG93KSB7XG4gICAgZWxlbWVudEhhc0JpbmRFdmVudC5wdXNoKGVsZW1lbnQpO1xuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUsIGVsZW1lbnQpO1xuICAgIH0sIGNhcHR1cmUpO1xuXG4gICAgaWYgKCF3aW5MaXN0ZW5kRm9jdXMpIHtcbiAgICAgIHdpbkxpc3RlbmRGb2N1cyA9IHRydWU7XG4gICAgICBhZGRFdmVudCh3aW5kb3csICdmb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gW107XG4gICAgICB9LCBjYXB0dXJlKTtcbiAgICB9XG5cbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5dXAnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSwgZWxlbWVudCk7XG4gICAgICBjbGVhck1vZGlmaWVyKGUpO1xuICAgIH0sIGNhcHR1cmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIoc2hvcnRjdXQpIHtcbiAgdmFyIHNjb3BlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnYWxsJztcbiAgT2JqZWN0LmtleXMoX2hhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZGF0YSA9IF9oYW5kbGVyc1trZXldLmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLnNjb3BlID09PSBzY29wZSAmJiBpdGVtLnNob3J0Y3V0ID09PSBzaG9ydGN1dDtcbiAgICB9KTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEubWV0aG9kKSB7XG4gICAgICBkYXRhLm1ldGhvZCgpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBfYXBpID0ge1xuICBzZXRTY29wZTogc2V0U2NvcGUsXG4gIGdldFNjb3BlOiBnZXRTY29wZSxcbiAgZGVsZXRlU2NvcGU6IGRlbGV0ZVNjb3BlLFxuICBnZXRQcmVzc2VkS2V5Q29kZXM6IGdldFByZXNzZWRLZXlDb2RlcyxcbiAgaXNQcmVzc2VkOiBpc1ByZXNzZWQsXG4gIGZpbHRlcjogZmlsdGVyLFxuICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICB1bmJpbmQ6IHVuYmluZCxcbiAga2V5TWFwOiBfa2V5TWFwLFxuICBtb2RpZmllcjogX21vZGlmaWVyLFxuICBtb2RpZmllck1hcDogbW9kaWZpZXJNYXBcbn07XG5cbmZvciAodmFyIGEgaW4gX2FwaSkge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9hcGksIGEpKSB7XG4gICAgaG90a2V5c1thXSA9IF9hcGlbYV07XG4gIH1cbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBfaG90a2V5cyA9IHdpbmRvdy5ob3RrZXlzO1xuXG4gIGhvdGtleXMubm9Db25mbGljdCA9IGZ1bmN0aW9uIChkZWVwKSB7XG4gICAgaWYgKGRlZXAgJiYgd2luZG93LmhvdGtleXMgPT09IGhvdGtleXMpIHtcbiAgICAgIHdpbmRvdy5ob3RrZXlzID0gX2hvdGtleXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdGtleXM7XG4gIH07XG5cbiAgd2luZG93LmhvdGtleXMgPSBob3RrZXlzO1xufVxuXG5leHBvcnQgeyBob3RrZXlzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBob3RrZXlzIGZyb20gJ2hvdGtleXMtanMnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIGlzSG90a2V5UHJlc3NlZCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgdmVyc2lvbiA0LlxyXG4gKi9cblxuZnVuY3Rpb24gdXNlSXNIb3RrZXlQcmVzc2VkKCkge1xuICByZXR1cm4gaG90a2V5cy5pc1ByZXNzZWQ7XG59XG5cbmhvdGtleXMuZmlsdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciB0YWdGaWx0ZXIgPSBmdW5jdGlvbiB0YWdGaWx0ZXIoX3JlZiwgZW5hYmxlT25UYWdzKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmLnRhcmdldDtcbiAgdmFyIHRhcmdldFRhZ05hbWUgPSB0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWU7XG4gIHJldHVybiBCb29sZWFuKHRhcmdldFRhZ05hbWUgJiYgZW5hYmxlT25UYWdzICYmIGVuYWJsZU9uVGFncy5pbmNsdWRlcyh0YXJnZXRUYWdOYW1lKSk7XG59O1xuXG52YXIgaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCA9IGZ1bmN0aW9uIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoZXYpIHtcbiAgcmV0dXJuIHRhZ0ZpbHRlcihldiwgWydJTlBVVCcsICdURVhUQVJFQScsICdTRUxFQ1QnXSk7XG59O1xuXG5mdW5jdGlvbiB1c2VIb3RrZXlzKGtleXMsIGNhbGxiYWNrLCBvcHRpb25zLCBkZXBzKSB7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICBkZXBzID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIF9yZWYyID0gb3B0aW9ucyB8fCB7fSxcbiAgICAgIGVuYWJsZU9uVGFncyA9IF9yZWYyLmVuYWJsZU9uVGFncyxcbiAgICAgIGZpbHRlciA9IF9yZWYyLmZpbHRlcixcbiAgICAgIGtleXVwID0gX3JlZjIua2V5dXAsXG4gICAgICBrZXlkb3duID0gX3JlZjIua2V5ZG93bixcbiAgICAgIF9yZWYyJGZpbHRlclByZXZlbnREZSA9IF9yZWYyLmZpbHRlclByZXZlbnREZWZhdWx0LFxuICAgICAgZmlsdGVyUHJldmVudERlZmF1bHQgPSBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUsXG4gICAgICBfcmVmMiRlbmFibGVkID0gX3JlZjIuZW5hYmxlZCxcbiAgICAgIGVuYWJsZWQgPSBfcmVmMiRlbmFibGVkID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZW5hYmxlZCxcbiAgICAgIF9yZWYyJGVuYWJsZU9uQ29udGVudCA9IF9yZWYyLmVuYWJsZU9uQ29udGVudEVkaXRhYmxlLFxuICAgICAgZW5hYmxlT25Db250ZW50RWRpdGFibGUgPSBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkZW5hYmxlT25Db250ZW50O1xuXG4gIHZhciByZWYgPSB1c2VSZWYobnVsbCk7IC8vIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBjYWxsYmFjayBkZXRlcm1pbmVzIGlmIHRoZSBicm93c2VycyBkZWZhdWx0IGJlaGF2aW9yIGlzIHByZXZlbnRlZC5cblxuICB2YXIgbWVtb2lzZWRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpIHtcbiAgICB2YXIgX2tleWJvYXJkRXZlbnQkdGFyZ2V0O1xuXG4gICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyKGtleWJvYXJkRXZlbnQpKSB7XG4gICAgICByZXR1cm4gIWZpbHRlclByZXZlbnREZWZhdWx0O1xuICAgIH0gLy8gQ2hlY2sgd2hldGhlciB0aGUgaG90a2V5cyB3YXMgdHJpZ2dlcmVkIGluc2lkZSBhbiBpbnB1dCBhbmQgdGhhdCBpbnB1dCBpcyBlbmFibGVkIG9yIGlmIGl0IHdhcyB0cmlnZ2VyZWQgYnkgYSBjb250ZW50IGVkaXRhYmxlIHRhZyBhbmQgaXQgaXMgZW5hYmxlZC5cblxuXG4gICAgaWYgKGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoa2V5Ym9hcmRFdmVudCkgJiYgIXRhZ0ZpbHRlcihrZXlib2FyZEV2ZW50LCBlbmFibGVPblRhZ3MpIHx8IChfa2V5Ym9hcmRFdmVudCR0YXJnZXQgPSBrZXlib2FyZEV2ZW50LnRhcmdldCkgIT0gbnVsbCAmJiBfa2V5Ym9hcmRFdmVudCR0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgJiYgIWVuYWJsZU9uQ29udGVudEVkaXRhYmxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVmLmN1cnJlbnQgPT09IG51bGwgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcmVmLmN1cnJlbnQpIHtcbiAgICAgIGNhbGxiYWNrKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIGRlcHMgPyBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0uY29uY2F0KGRlcHMpIDogW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIGhvdGtleXMudW5iaW5kKGtleXMsIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSW4gdGhpcyBjYXNlIGtleWRvd24gaXMgbGlrZWx5IHVuZGVmaW5lZCwgc28gd2Ugc2V0IGl0IHRvIGZhbHNlLCBzaW5jZSBob3RrZXlzIG5lZWRzIHRoZSBga2V5ZG93bmAga2V5IHRvIGhhdmUgYSB2YWx1ZS5cblxuXG4gICAgaWYgKGtleXVwICYmIGtleWRvd24gIT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMua2V5ZG93biA9IGZhbHNlO1xuICAgIH1cblxuICAgIGhvdGtleXMoa2V5cywgb3B0aW9ucyB8fCB7fSwgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICB9O1xuICB9LCBbbWVtb2lzZWRDYWxsYmFjaywga2V5cywgZW5hYmxlZF0pO1xuICByZXR1cm4gcmVmO1xufVxuXG52YXIgaXNIb3RrZXlQcmVzc2VkID0gaG90a2V5cy5pc1ByZXNzZWQ7XG5cbmV4cG9ydCB7IGlzSG90a2V5UHJlc3NlZCwgdXNlSG90a2V5cywgdXNlSXNIb3RrZXlQcmVzc2VkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzLm1hcFxuIl0sInNvdXJjZVJvb3QiOiIifQ==