@touchtech/baselayer-ui 7.2.0 → 7.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=11)}([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(12);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.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(14),t),a(n(5),t),a(n(19),t),a(n(24),t),a(n(6),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(4),t),a(n(63),t),a(n(9),t),a(n(7),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(13));t.default=function(e){var t,n=e.children,r=e.className,u=e.onClick,l=e.onPointerDown,d=e.containerRef,c=e.disabled,f=void 0!==c&&c,s=e.inverted,v=void 0!==s&&s,p=e.rounded,m=void 0!==p&&p,h=e.noShadow,y=void 0!==h&&h,b=e.noPadding,g=void 0!==b&&b,_=e.noBorder,O=void 0!==_&&_,w=e.transparent,P=void 0!==w&&w,j=e.stretchHorizontally,M=void 0!==j&&j,E=e.stretchVertically,k=void 0!==E&&E,C=e.autoFocus,x=void 0!==C&&C,N=e.offsetSides,D=void 0===N?[]:N,S=e.align,A=void 0===S?"center":S,B=e.size,I=void 0===B?"medium":B,L=e.type;return a.default.createElement("button",{ref:d,className:(0,o.default)([i.default.container,i.default[I],i.default[A],(t={},t[i.default.inverted]=v,t[i.default.rounded]=m,t[i.default.noShadow]=y,t[i.default.noPadding]=g,t[i.default.noBorder]=O,t[i.default.transparent]=P,t[i.default.stretchHorizontally]=M,t[i.default.stretchVertically]=k,t[i.default.leftOffset]=m&&D.includes("left"),t[i.default.rightOffset]=m&&D.includes("right"),t),r]),disabled:f,autoFocus:x,type:L,role:"button",onClick:u,onPointerDown:l},"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}),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});var a=r(n(0)),o=r(n(1)),i=r(n(16));t.default=function(e){var t,n=e.children,r=e.inverted,u=void 0!==r&&r,l=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.buttonBadge,(t={},t[i.default.inverted]=u,t),l])},n)}},function(e,t,n){"use strict";n.r(t),t.default={buttonBadge:"RSjbRiXFWAfBzcCoaMpXeA==",inverted:"X4o4OKsS1T4miIs0Cq5x-g=="}},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,D=void 0===N?[]:N,S=e.align,A=void 0===S?"center":S,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&&D.includes("left"),t[l.default.rightOffset]=m&&D.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(4),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(6),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(7),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(8);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(8),d=n(9);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,a=e.display,o=e.renderClickable,c=e.selectedItem,f=e.placement,s=void 0===f?{vertical:"bottom",horizontal:"left"}:f,v=(0,i.useState)(!1),p=v[0],m=v[1],h=(0,u.useOutsideClick)((function(){return m(!1)})),y=!n||0===n.length,b=function(){return m(!p)};return i.default.createElement(d.MenuContainer,{button:"function"==typeof o?o({display:a,isDisabled:y,selectedItem:c,toggleIsOpen:b}):i.default.createElement(l.Clickable,{display:a,isDisabled:y,onClick:b}),placement:s,ref:h},i.default.createElement(d.Menu,{isOpen:p},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),m(!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));t.default=function(e){var t,n=e.className,r=e.containerRef,l=e.children,d=e.src,c=e.alt,f=e.offsetSides,s=void 0===f?[]:f,v=e.onClick,p=void 0===v?function(){}:v,m=e.disabled,h=void 0!==m&&m,y=e.inverted,b=void 0!==y&&y,g=e.noShadow,_=void 0!==g&&g,O=e.noBorder,w=void 0!==O&&O,P=e.transparent,j=void 0!==P&&P,M=e.rounded,E=void 0!==M&&M,k=e.size,C=void 0===k?"medium":k,x=e.type,N=void 0===x?"button":x;return a.default.createElement("button",{ref:r,className:(0,o.default)([u.default.container,u.default[C],(t={},t[u.default.inverted]=b,t[u.default.rounded]=E,t[u.default.noShadow]=_,t[u.default.noBorder]=w,t[u.default.transparent]=j,t[u.default.topOffset]=E&&s.includes("top"),t[u.default.rightOffset]=E&&s.includes("right"),t[u.default.bottomOffset]=E&&s.includes("bottom"),t[u.default.leftOffset]=E&&s.includes("left"),t),n]),disabled:h,onClick:p,type:N,role:"button"},a.default.createElement(i.Icon,{src:d,alt:c,size:C,inverted:b}),l)}},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));t.default=function(e){var t,n=e.as,o=e.containerRef,c=e.children,f=e.className,s=e.src,v=e.alt,p=e.inverted,m=void 0!==p&&p,h=e.noShadow,y=void 0!==h&&h,b=e.noBorder,g=void 0!==b&&b,_=e.transparent,O=void 0!==_&&_,w=e.rounded,P=void 0!==w&&w,j=e.offsetSides,M=void 0===j?[]:j,E=e.disabled,k=void 0!==E&&E,C=e.size,x=void 0===C?"medium":C,N=a(e,["as","containerRef","children","className","src","alt","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[x],(t={},t[d.default.inverted]=m,t[d.default.rounded]=P,t[d.default.noShadow]=y,t[d.default.noBorder]=g,t[d.default.disabled]=k,t[d.default.transparent]=O,t[d.default.topOffset]=P&&M.includes("top"),t[d.default.rightOffset]=P&&M.includes("right"),t[d.default.bottomOffset]=P&&M.includes("bottom"),t[d.default.leftOffset]=P&&M.includes("left"),t),f])},N),i.default.createElement(l.Icon,{src:s,alt:v,size:x,inverted:m}),c)}},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=e.style,y=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,style:h});return l?a.default.createElement("div",{ref:d,className:(0,o.default)([i.default.container,i.default.hasOverlay])},y,l&&a.default.createElement("div",{className:i.default.overlay},l)):y}},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,id:u.id},u.text),l),a.default.createElement("ul",{"aria-labelledby":null==u?void 0:u.id,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(10));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(5),d=o(n(10));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(4),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.pattern,p=e.inputRef,m=e.size,h=void 0===m?"medium":m,y=e.type,b=void 0===y?"text":y,g=e.autoFocus,_=void 0!==g&&g,O=e.noBorder,w=void 0!==O&&O,P=(0,u.useCallback)((function(e){r&&r(e.target.value)}),[r]),j=u.default.createElement("input",{"data-testid":"input",ref:p,className:(0,l.default)([c.default.textInput,c.default[h],(t={},t[c.default.noBorder]=w,t)]),onChange:P,onBlur:a,onKeyDown:o,pattern:v,placeholder:i,name:s,type:b,value:f,autoFocus:_});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";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},c=function(e){return Math.floor(e/10)},f=["0","1","2","3","4","5","6","7","8","9"];t.Numpad=a.default.forwardRef((function(e,t){var n=e.number,r=e.onChange,s=e.disabled,v=void 0!==s&&s,p=function(e){return function(t){t.stopPropagation(),r(e)}},m=Array(10).fill(0).map((function(e,t){var r=(t+1)%10;return a.default.createElement(o.Button,{key:t,disabled:v,noBorder:!0,noShadow:!0,onPointerDown:p(d(n,r))},r)}));return a.default.createElement("div",{className:u.default.numpad,ref:t,tabIndex:-1,onKeyDown:function(e){if("Backspace"===e.key)e.stopPropagation(),r(c(n));else if(f.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(d(n,t))}},"data-testid":"numpad"},a.default.createElement("div",{className:u.default.numbers},m,a.default.createElement(o.Button,{disabled:v,noBorder:!0,noShadow:!0,transparent:!0,onPointerDown:p(c(n))},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 o})),n.d(t,"usePromise",(function(){return d})),n.d(t,"useSWRHooksConfig",(function(){return te})),n.d(t,"useToggle",(function(){return ne}));var r=n(0),a={capture:!0};function o(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,a),document.addEventListener("touchend",n,a),function(){document.removeEventListener("mouseup",n,a),document.removeEventListener("touchend",n,a)}}),[e]),t}function i(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 u(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 l(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 d(){var e=this,t=l(Object(r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],a=t[1],o=Object(r.useRef)(!1);return Object(r.useEffect)((function(){return function(){o.current=!0}}),[]),[n,Object(r.useCallback)((function(t){return i(e,void 0,void 0,(function(){var e,n;return u(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===o.current&&a({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===o.current&&a({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))}))}),[o])]}
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(37);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.Label=void 0;var a=n(22);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(18);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(27);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(32);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(39)),l=r(n(40));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(41);Object.defineProperty(t,"Menu",{enumerable:!0,get:function(){return r(a).default}});var o=n(10);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";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}),t.PlacementContext=void 0;var u=o(n(0)),l=i(n(1)),d=i(n(42));t.PlacementContext=u.default.createContext(void 0),t.default=(0,u.forwardRef)((function(e,n){var r=e.children,a=e.button,o=e.className,i=e.placement,c=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return u.default.createElement("div",{ref:n,className:(0,l.default)([d.default.container,o])},a,u.default.createElement(t.PlacementContext.Provider,{value:(0,u.useMemo)((function(){return c}),[c])},u.default.createElement("div",{className:(0,l.default)([d.default.menuContainer,d.default[c.horizontal],d.default[c.vertical]])},r)))}))},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(15),t),a(n(5),t),a(n(20),t),a(n(25),t),a(n(6),t),a(n(30),t),a(n(35),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(4),t),a(n(63),t),a(n(9),t),a(n(7),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.onPointerDown,d=e.containerRef,c=e.disabled,f=void 0!==c&&c,s=e.inverted,v=void 0!==s&&s,p=e.rounded,m=void 0!==p&&p,h=e.noShadow,y=void 0!==h&&h,b=e.noPadding,g=void 0!==b&&b,_=e.noBorder,O=void 0!==_&&_,w=e.transparent,P=void 0!==w&&w,j=e.stretchHorizontally,M=void 0!==j&&j,E=e.stretchVertically,k=void 0!==E&&E,C=e.autoFocus,x=void 0!==C&&C,S=e.offsetSides,D=void 0===S?[]:S,N=e.align,A=void 0===N?"center":N,B=e.size,I=void 0===B?"medium":B,L=e.type;return a.default.createElement("button",{ref:d,className:(0,o.default)([i.default.container,i.default[I],i.default[A],(t={},t[i.default.inverted]=v,t[i.default.rounded]=m,t[i.default.noShadow]=y,t[i.default.noPadding]=g,t[i.default.noBorder]=O,t[i.default.transparent]=P,t[i.default.stretchHorizontally]=M,t[i.default.stretchVertically]=k,t[i.default.leftOffset]=m&&D.includes("left"),t[i.default.rightOffset]=m&&D.includes("right"),t),r]),disabled:f,autoFocus:x,type:L,role:"button",onClick:u,onPointerDown:l},"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}),t.ButtonBadge=void 0;var a=n(16);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});var a=r(n(0)),o=r(n(1)),i=r(n(17));t.default=function(e){var t,n=e.children,r=e.inverted,u=void 0!==r&&r,l=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.buttonBadge,(t={},t[i.default.inverted]=u,t),l])},n)}},function(e,t,n){"use strict";n.r(t),t.default={buttonBadge:"RSjbRiXFWAfBzcCoaMpXeA==",inverted:"X4o4OKsS1T4miIs0Cq5x-g=="}},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(19));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,S=e.offsetSides,D=void 0===S?[]:S,N=e.align,A=void 0===N?"center":N,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&&D.includes("left"),t[l.default.rightOffset]=m&&D.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(21);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(4),c=i(n(24));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(23));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(26);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(6),u=r(n(29));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(28));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(31);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(7),u=r(n(34));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(33));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(36);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return r.Dropdown}});var a=n(8);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(8),d=n(9);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,a=e.display,o=e.renderClickable,c=e.selectedItem,f=e.placement,s=void 0===f?{vertical:"bottom",horizontal:"left"}:f,v=(0,i.useState)(!1),p=v[0],m=v[1],h=(0,u.useOutsideClick)((function(){return m(!1)})),y=!n||0===n.length,b=function(){return m(!p)};return i.default.createElement(d.MenuContainer,{button:"function"==typeof o?o({display:a,isDisabled:y,selectedItem:c,toggleIsOpen:b}):i.default.createElement(l.Clickable,{display:a,isDisabled:y,onClick:b}),placement:s,ref:h},i.default.createElement(d.Menu,{isOpen:p},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),m(!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(38));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.__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(10),c=i(n(43));t.default=function(e){var t,n,r=e.children,a=e.containerRef,o=e.className,i=e.isOpen,f=void 0===i||i,s=e.header,v=e.footer,p=(0,u.useContext)(d.PlacementContext),m=(0,u.useRef)(null),h=a||m;if(!p)throw new Error("Menu component must be wrapped by a MenuContainer component.");return(0,u.useLayoutEffect)((function(){if(h.current){var e=h.current.getBoundingClientRect(),t=e.top,n=e.bottom,r="top"===p.vertical?t:window.innerHeight-n;if(r<0){var a=h.current.querySelector("ul"),o=a.querySelector("li"),i=a.clientHeight+r;a.style.maxHeight="calc(".concat(i,"px - ").concat(getComputedStyle(o).minHeight,")")}}}),[f,p]),f?u.default.createElement(u.default.Fragment,null,u.default.createElement("div",{ref:h,className:(0,l.default)([c.default.menu,(t={},t[c.default.open]=f,t),o])},u.default.createElement("div",null,s&&f&&u.default.createElement("h3",{className:c.default.header},s),u.default.createElement("ul",null,r)),v&&f&&u.default.createElement("div",{className:(0,l.default)([c.default.footer,(n={},n[c.default.noBorder]=!r,n)])},v))):null}},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";n.r(t),t.default={menu:"rSBfsFNjjooJsDH-X+YXbw==",open:"vX7vgA9ZlF7T9ER9VJodbQ==",entrance:"GpB2LsadhuGJZvKoNOdozA==",header:"oATlBFgepZ5gAZAr-CxnAA==",footer:"wKeE73zYfb-7cRN-F8OY1g==",noBorder:"LD6LDvs-ylMrPgslj4x3hg=="}},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,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]=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.className,r=e.children,u=e.containerRef,l=e.layout,d=void 0===l?"column":l,c=e.placement,f=void 0===c?{horizontal:"center",vertical:"bottom",parent:"viewport"}:c,s="center"===f.horizontal?"horizontalCenter":f.horizontal,v="center"===f.vertical?"verticalCenter":f.vertical;return a.default.createElement("div",{ref:u,"data-testid":"floating-panel",className:(0,o.default)([i.default.container,i.default[s],i.default[v],i.default[d],(t={},t[i.default.fixed]="container"!==f.parent,t),n])},r)}},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));t.default=function(e){var t,n=e.className,r=e.containerRef,l=e.children,d=e.src,c=e.alt,f=e.offsetSides,s=void 0===f?[]:f,v=e.onClick,p=void 0===v?function(){}:v,m=e.disabled,h=void 0!==m&&m,y=e.inverted,b=void 0!==y&&y,g=e.noShadow,_=void 0!==g&&g,O=e.noBorder,w=void 0!==O&&O,P=e.transparent,j=void 0!==P&&P,M=e.rounded,E=void 0!==M&&M,k=e.size,C=void 0===k?"medium":k,x=e.type,S=void 0===x?"button":x;return a.default.createElement("button",{ref:r,className:(0,o.default)([u.default.container,u.default[C],(t={},t[u.default.inverted]=b,t[u.default.rounded]=E,t[u.default.noShadow]=_,t[u.default.noBorder]=w,t[u.default.transparent]=j,t[u.default.topOffset]=E&&s.includes("top"),t[u.default.rightOffset]=E&&s.includes("right"),t[u.default.bottomOffset]=E&&s.includes("bottom"),t[u.default.leftOffset]=E&&s.includes("left"),t),n]),disabled:h,onClick:p,type:S,role:"button"},a.default.createElement(i.Icon,{src:d,alt:c,size:C,inverted:b}),l)}},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));t.default=function(e){var t,n=e.as,o=e.containerRef,c=e.children,f=e.className,s=e.src,v=e.alt,p=e.inverted,m=void 0!==p&&p,h=e.noShadow,y=void 0!==h&&h,b=e.noBorder,g=void 0!==b&&b,_=e.transparent,O=void 0!==_&&_,w=e.rounded,P=void 0!==w&&w,j=e.offsetSides,M=void 0===j?[]:j,E=e.disabled,k=void 0!==E&&E,C=e.size,x=void 0===C?"medium":C,S=a(e,["as","containerRef","children","className","src","alt","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[x],(t={},t[d.default.inverted]=m,t[d.default.rounded]=P,t[d.default.noShadow]=y,t[d.default.noBorder]=g,t[d.default.disabled]=k,t[d.default.transparent]=O,t[d.default.topOffset]=P&&M.includes("top"),t[d.default.rightOffset]=P&&M.includes("right"),t[d.default.bottomOffset]=P&&M.includes("bottom"),t[d.default.leftOffset]=P&&M.includes("left"),t),f])},S),i.default.createElement(l.Icon,{src:s,alt:v,size:x,inverted:m}),c)}},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=e.style,y=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,style:h});return l?a.default.createElement("div",{ref:d,className:(0,o.default)([i.default.container,i.default.hasOverlay])},y,l&&a.default.createElement("div",{className:i.default.overlay},l)):y}},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,id:u.id},u.text),l),a.default.createElement("ul",{"aria-labelledby":null==u?void 0:u.id,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(5),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(4),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.pattern,p=e.inputRef,m=e.size,h=void 0===m?"medium":m,y=e.type,b=void 0===y?"text":y,g=e.autoFocus,_=void 0!==g&&g,O=e.noBorder,w=void 0!==O&&O,P=(0,u.useCallback)((function(e){r&&r(e.target.value)}),[r]),j=u.default.createElement("input",{"data-testid":"input",ref:p,className:(0,l.default)([c.default.textInput,c.default[h],(t={},t[c.default.noBorder]=w,t)]),onChange:P,onBlur:a,onKeyDown:o,pattern:v,placeholder:i,name:s,type:b,value:f,autoFocus:_});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";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},c=function(e){return Math.floor(e/10)},f=["0","1","2","3","4","5","6","7","8","9"];t.Numpad=a.default.forwardRef((function(e,t){var n=e.number,r=e.onChange,s=e.disabled,v=void 0!==s&&s,p=function(e){return function(t){t.stopPropagation(),r(e)}},m=Array(10).fill(0).map((function(e,t){var r=(t+1)%10;return a.default.createElement(o.Button,{key:t,disabled:v,noBorder:!0,noShadow:!0,onPointerDown:p(d(n,r))},r)}));return a.default.createElement("div",{className:u.default.numpad,ref:t,tabIndex:-1,onKeyDown:function(e){if("Backspace"===e.key)e.stopPropagation(),r(c(n));else if(f.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(d(n,t))}},"data-testid":"numpad"},a.default.createElement("div",{className:u.default.numbers},m,a.default.createElement(o.Button,{disabled:v,noBorder:!0,noShadow:!0,transparent:!0,onPointerDown:p(c(n))},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 o})),n.d(t,"usePromise",(function(){return d})),n.d(t,"useSWRHooksConfig",(function(){return te})),n.d(t,"useToggle",(function(){return ne}));var r=n(0),a={capture:!0};function o(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,a),document.addEventListener("touchend",n,a),function(){document.removeEventListener("mouseup",n,a),document.removeEventListener("touchend",n,a)}}),[e]),t}function i(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 u(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 l(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 d(){var e=this,t=l(Object(r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],a=t[1],o=Object(r.useRef)(!1);return Object(r.useEffect)((function(){return function(){o.current=!0}}),[]),[n,Object(r.useCallback)((function(t){return i(e,void 0,void 0,(function(){var e,n;return u(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===o.current&&a({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===o.current&&a({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))}))}),[o])]}
2
2
  /*! *****************************************************************************
3
3
  Copyright (c) Microsoft Corporation.
4
4
 
@@ -12,7 +12,7 @@ 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 c(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 f(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 s,v=function(){},p=v(),m=Object,h=function(e){return e===p},y=function(e){return"function"==typeof e},b=function(e,t){return m.assign({},e,t)},g=function(){return"undefined"!=typeof window},_=new WeakMap,O=0,w=function(e){var t,n,r=typeof e,a=e&&e.constructor,o=a==Date;if(m(e)!==e||o||a==RegExp)t=o?e.toJSON():"symbol"==r?e.toString():"string"==r?JSON.stringify(e):""+e;else{if(t=_.get(e))return t;if(t=++O+"~",_.set(e,t),a==Array){for(t="@",n=0;n<e.length;n++)t+=w(e[n])+",";_.set(e,t)}if(a==m){t="#";for(var i=m.keys(e).sort();!h(n=i.pop());)h(e[n])||(t+=n+":"+w(e[n])+",");_.set(e,t)}}return t},P=!0,j=g(),M="undefined"!=typeof document,E=j&&window.addEventListener?window.addEventListener.bind(window):v,k=M?document.addEventListener.bind(document):v,C=j&&window.removeEventListener?window.removeEventListener.bind(window):v,x=M?document.removeEventListener.bind(document):v,N={isOnline:function(){return P},isVisible:function(){var e=M&&document.visibilityState;return h(e)||"hidden"!==e}},D={initFocus:function(e){return k("visibilitychange",e),E("focus",e),function(){x("visibilitychange",e),C("focus",e)}},initReconnect:function(e){var t=function(){P=!0,e()},n=function(){P=!1};return E("online",t),E("offline",n),function(){C("online",t),C("offline",n)}}},S=!g()||"Deno"in window,A=function(e){return g()&&void 0!==window.requestAnimationFrame?window.requestAnimationFrame(e):setTimeout(e,1)},B=S?r.useEffect:r.useLayoutEffect,I="undefined"!=typeof navigator&&navigator.connection,L=!S&&I&&(["slow-2g","2g"].includes(I.effectiveType)||I.saveData),R=function(e){if(y(e))try{e=e()}catch(t){e=""}var t=[].concat(e);return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?w(e):"",t,e?"$swr$"+e:""]},z=new WeakMap,Q=function(e,t,n,r,a,o,i){void 0===i&&(i=!0);var u=z.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)},V=0,T=function(){return++V},H=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return c(void 0,void 0,void 0,(function(){var t,n,r,a,o,i,u,l,d,c,s,v,m,g,_,O,w,P,j,M,E;return f(this,(function(f){switch(f.label){case 0:if(t=e[0],n=e[1],r=e[2],a=e[3],i=!!h((o="boolean"==typeof a?{revalidate:a}:a||{}).populateCache)||o.populateCache,u=!1!==o.revalidate,l=!1!==o.rollbackOnError,d=o.optimisticData,c=R(n),s=c[0],v=c[2],!s)return[2];if(m=z.get(t),g=m[2],e.length<3)return[2,Q(t,s,t.get(s),p,p,u,!0)];if(_=r,w=T(),g[s]=[w,0],P=!h(d),j=t.get(s),P&&(M=y(d)?d(j):d,t.set(s,M),Q(t,s,M)),y(_))try{_=_(t.get(s))}catch(e){O=e}return _&&y(_.then)?[4,_.catch((function(e){O=e}))]:[3,2];case 1:if(_=f.sent(),w!==g[s][0]){if(O)throw O;return[2,_]}O&&P&&l&&(i=!0,_=j,t.set(s,j)),f.label=2;case 2:return i&&(O||(y(i)&&(_=i(_,j)),t.set(s,_)),t.set(v,b(t.get(v),{error:O}))),g[s][1]=T(),[4,Q(t,s,_,O,p,u,!!i)];case 3:if(E=f.sent(),O)throw O;return[2,i?E:_]}}))}))},F=function(e,t){for(var n in e)e[n][0]&&e[n][0](t)},J=function(e,t){if(!z.has(e)){var n=b(D,t),r={},a=H.bind(p,e),o=v;if(z.set(e,[r,{},{},{},a]),!S){var i=n.initFocus(setTimeout.bind(p,F.bind(p,r,0))),u=n.initReconnect(setTimeout.bind(p,F.bind(p,r,1)));o=function(){i&&i(),u&&u(),z.delete(e)}}return[e,a,o]}return[e,z.get(e)[4]]},Z=J(new Map),K=Z[0],G=Z[1],U=b({onLoadingSlow:v,onSuccess:v,onError:v,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;!h(o)&&i>o||setTimeout(r,u,a)},onDiscarded:v,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 w(e)==w(t)},isPaused:function(){return!1},cache:K,mutate:G,fallback:{}},N),Y=function(e,t){var n=b(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=b(a,i))}return n},W=Object(r.createContext)({}),X=function(e){return y(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(null===e[1]?e[2]:e[1])||{}]},q=function(){return b(U,Object(r.useContext)(W))},$=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())}},ee={dedupe:!0};m.defineProperty((function(e){var t=e.value,n=Y(Object(r.useContext)(W),t),a=t&&t.provider,o=Object(r.useState)((function(){return a?J(a(n.cache||K),t):p}))[0];return o&&(n.cache=o[0],n.mutate=o[1]),B((function(){return o?o[2]:p}),[]),Object(r.createElement)(W.Provider,b(e,{value:n}))}),"default",{value:U}),s=function(e,t,n){var a=n.cache,o=n.compare,i=n.fallbackData,u=n.suspense,l=n.revalidateOnMount,d=n.refreshInterval,s=n.refreshWhenHidden,v=n.refreshWhenOffline,m=z.get(a),g=m[0],_=m[1],O=m[2],w=m[3],P=R(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),D=Object(r.useRef)(n),I=function(){return D.current},L=function(){return I().isVisible()&&I().isOnline()},V=function(e){return a.set(E,b(a.get(E),e))},F=a.get(j),J=h(i)?n.fallback[j]:i,Z=h(F)?J:F,K=a.get(E)||{},G=K.error,U=!k.current,Y=function(){return U&&!h(l)?l:!I().isPaused()&&(u?!h(Z)&&n.revalidateIfStale:h(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 B((function(){a.current=e})),[a,o.current,i]}({data:Z,error:G,isValidating:W},C),q=X[0],te=X[1],ne=X[2],re=Object(r.useCallback)((function(e){return c(void 0,void 0,void 0,(function(){var t,r,i,u,l,d,c,s,v,m,b,g,_;return f(this,(function(f){switch(f.label){case 0:if(t=N.current,!j||!t||C.current||I().isPaused())return[2,!1];u=!0,l=e||{},d=!w[j]||!l.dedupe,c=function(){return!C.current&&j===x.current&&k.current},s=function(){var e=w[j];e&&e[1]===i&&delete w[j]},v={isValidating:!1},m=function(){V({isValidating:!1}),c()&&ne(v)},V({isValidating:!0}),ne({isValidating:!0}),f.label=1;case 1:return f.trys.push([1,3,,4]),d&&(Q(a,j,q.current.data,q.current.error,!0),n.loadingTimeout&&!a.get(j)&&setTimeout((function(){u&&c()&&I().onLoadingSlow(j,n)}),n.loadingTimeout),w[j]=[t.apply(void 0,M),T()]),_=w[j],r=_[0],i=_[1],[4,r];case 2:return r=f.sent(),d&&setTimeout(s,n.dedupingInterval),w[j]&&w[j][1]===i?(V({error:p}),v.error=p,b=O[j],!h(b)&&(i<=b[0]||i<=b[1]||0===b[1])?(m(),d&&c()&&I().onDiscarded(j),[2,!1]):(o(q.current.data,r)?v.data=q.current.data:v.data=r,o(a.get(j),r)||a.set(j,r),d&&c()&&I().onSuccess(r,j,n),[3,4])):(d&&c()&&I().onDiscarded(j),[2,!1]);case 3:return g=f.sent(),s(),I().isPaused()||(V({error:g}),v.error=g,d&&c()&&(I().onError(g,j,n),("boolean"==typeof n.shouldRetryOnError&&n.shouldRetryOnError||y(n.shouldRetryOnError)&&n.shouldRetryOnError(g))&&L()&&I().onErrorRetry(g,j,n,re,{retryCount:(l.retryCount||0)+1,dedupe:!0}))),[3,4];case 4:return u=!1,m(),c()&&d&&Q(a,j,v.data,v.error,!1),[2,!0]}}))}))}),[j]),ae=Object(r.useCallback)(H.bind(p,a,(function(){return x.current})),[]);if(B((function(){N.current=t,D.current=n})),B((function(){if(j){var e=j!==x.current,t=re.bind(p,ee),n=0,r=$(j,_,(function(e,t,n){ne(b({error:t,isValidating:n},o(q.current.data,e)?p:{data:e}))})),a=$(j,g,(function(e){if(0==e){var r=Date.now();I().revalidateOnFocus&&r>n&&L()&&(n=r+I().focusThrottleInterval,t())}else if(1==e)I().revalidateOnReconnect&&L()&&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()&&(h(Z)||S?t():A(t)),function(){C.current=!0,r(),a()}}}),[j,re]),B((function(){var e;function t(){var t=y(d)?d(Z):d;t&&-1!==e&&(e=setTimeout(n,t))}function n(){q.current.error||!s&&!I().isVisible()||!v&&!I().isOnline()?t():re(ee).then(t)}return t(),function(){e&&(clearTimeout(e),e=-1)}}),[d,s,v,re]),Object(r.useDebugValue)(Z),u&&h(Z)&&j)throw N.current=t,D.current=n,C.current=!1,h(G)?re(ee):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 te(){var e=q();return Object(r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function ne(e){void 0===e&&(e=!1);var t=l(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 D})),n.d(t,"useHotkeys",(function(){return N})),n.d(t,"useIsHotkeyPressed",(function(){return C}));
15
+ ***************************************************************************** */function c(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 f(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 s,v=function(){},p=v(),m=Object,h=function(e){return e===p},y=function(e){return"function"==typeof e},b=function(e,t){return m.assign({},e,t)},g=function(){return"undefined"!=typeof window},_=new WeakMap,O=0,w=function(e){var t,n,r=typeof e,a=e&&e.constructor,o=a==Date;if(m(e)!==e||o||a==RegExp)t=o?e.toJSON():"symbol"==r?e.toString():"string"==r?JSON.stringify(e):""+e;else{if(t=_.get(e))return t;if(t=++O+"~",_.set(e,t),a==Array){for(t="@",n=0;n<e.length;n++)t+=w(e[n])+",";_.set(e,t)}if(a==m){t="#";for(var i=m.keys(e).sort();!h(n=i.pop());)h(e[n])||(t+=n+":"+w(e[n])+",");_.set(e,t)}}return t},P=!0,j=g(),M="undefined"!=typeof document,E=j&&window.addEventListener?window.addEventListener.bind(window):v,k=M?document.addEventListener.bind(document):v,C=j&&window.removeEventListener?window.removeEventListener.bind(window):v,x=M?document.removeEventListener.bind(document):v,S={isOnline:function(){return P},isVisible:function(){var e=M&&document.visibilityState;return h(e)||"hidden"!==e}},D={initFocus:function(e){return k("visibilitychange",e),E("focus",e),function(){x("visibilitychange",e),C("focus",e)}},initReconnect:function(e){var t=function(){P=!0,e()},n=function(){P=!1};return E("online",t),E("offline",n),function(){C("online",t),C("offline",n)}}},N=!g()||"Deno"in window,A=function(e){return g()&&void 0!==window.requestAnimationFrame?window.requestAnimationFrame(e):setTimeout(e,1)},B=N?r.useEffect:r.useLayoutEffect,I="undefined"!=typeof navigator&&navigator.connection,L=!N&&I&&(["slow-2g","2g"].includes(I.effectiveType)||I.saveData),R=function(e){if(y(e))try{e=e()}catch(t){e=""}var t=[].concat(e);return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?w(e):"",t,e?"$swr$"+e:""]},z=new WeakMap,Q=function(e,t,n,r,a,o,i){void 0===i&&(i=!0);var u=z.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)},V=0,T=function(){return++V},H=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return c(void 0,void 0,void 0,(function(){var t,n,r,a,o,i,u,l,d,c,s,v,m,g,_,O,w,P,j,M,E;return f(this,(function(f){switch(f.label){case 0:if(t=e[0],n=e[1],r=e[2],a=e[3],i=!!h((o="boolean"==typeof a?{revalidate:a}:a||{}).populateCache)||o.populateCache,u=!1!==o.revalidate,l=!1!==o.rollbackOnError,d=o.optimisticData,c=R(n),s=c[0],v=c[2],!s)return[2];if(m=z.get(t),g=m[2],e.length<3)return[2,Q(t,s,t.get(s),p,p,u,!0)];if(_=r,w=T(),g[s]=[w,0],P=!h(d),j=t.get(s),P&&(M=y(d)?d(j):d,t.set(s,M),Q(t,s,M)),y(_))try{_=_(t.get(s))}catch(e){O=e}return _&&y(_.then)?[4,_.catch((function(e){O=e}))]:[3,2];case 1:if(_=f.sent(),w!==g[s][0]){if(O)throw O;return[2,_]}O&&P&&l&&(i=!0,_=j,t.set(s,j)),f.label=2;case 2:return i&&(O||(y(i)&&(_=i(_,j)),t.set(s,_)),t.set(v,b(t.get(v),{error:O}))),g[s][1]=T(),[4,Q(t,s,_,O,p,u,!!i)];case 3:if(E=f.sent(),O)throw O;return[2,i?E:_]}}))}))},F=function(e,t){for(var n in e)e[n][0]&&e[n][0](t)},J=function(e,t){if(!z.has(e)){var n=b(D,t),r={},a=H.bind(p,e),o=v;if(z.set(e,[r,{},{},{},a]),!N){var i=n.initFocus(setTimeout.bind(p,F.bind(p,r,0))),u=n.initReconnect(setTimeout.bind(p,F.bind(p,r,1)));o=function(){i&&i(),u&&u(),z.delete(e)}}return[e,a,o]}return[e,z.get(e)[4]]},Z=J(new Map),K=Z[0],G=Z[1],U=b({onLoadingSlow:v,onSuccess:v,onError:v,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;!h(o)&&i>o||setTimeout(r,u,a)},onDiscarded:v,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 w(e)==w(t)},isPaused:function(){return!1},cache:K,mutate:G,fallback:{}},S),Y=function(e,t){var n=b(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=b(a,i))}return n},X=Object(r.createContext)({}),W=function(e){return y(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(null===e[1]?e[2]:e[1])||{}]},q=function(){return b(U,Object(r.useContext)(X))},$=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())}},ee={dedupe:!0};m.defineProperty((function(e){var t=e.value,n=Y(Object(r.useContext)(X),t),a=t&&t.provider,o=Object(r.useState)((function(){return a?J(a(n.cache||K),t):p}))[0];return o&&(n.cache=o[0],n.mutate=o[1]),B((function(){return o?o[2]:p}),[]),Object(r.createElement)(X.Provider,b(e,{value:n}))}),"default",{value:U}),s=function(e,t,n){var a=n.cache,o=n.compare,i=n.fallbackData,u=n.suspense,l=n.revalidateOnMount,d=n.refreshInterval,s=n.refreshWhenHidden,v=n.refreshWhenOffline,m=z.get(a),g=m[0],_=m[1],O=m[2],w=m[3],P=R(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),S=Object(r.useRef)(t),D=Object(r.useRef)(n),I=function(){return D.current},L=function(){return I().isVisible()&&I().isOnline()},V=function(e){return a.set(E,b(a.get(E),e))},F=a.get(j),J=h(i)?n.fallback[j]:i,Z=h(F)?J:F,K=a.get(E)||{},G=K.error,U=!k.current,Y=function(){return U&&!h(l)?l:!I().isPaused()&&(u?!h(Z)&&n.revalidateIfStale:h(Z)||n.revalidateIfStale)},X=!(!j||!t)&&(!!K.isValidating||U&&Y()),W=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 B((function(){a.current=e})),[a,o.current,i]}({data:Z,error:G,isValidating:X},C),q=W[0],te=W[1],ne=W[2],re=Object(r.useCallback)((function(e){return c(void 0,void 0,void 0,(function(){var t,r,i,u,l,d,c,s,v,m,b,g,_;return f(this,(function(f){switch(f.label){case 0:if(t=S.current,!j||!t||C.current||I().isPaused())return[2,!1];u=!0,l=e||{},d=!w[j]||!l.dedupe,c=function(){return!C.current&&j===x.current&&k.current},s=function(){var e=w[j];e&&e[1]===i&&delete w[j]},v={isValidating:!1},m=function(){V({isValidating:!1}),c()&&ne(v)},V({isValidating:!0}),ne({isValidating:!0}),f.label=1;case 1:return f.trys.push([1,3,,4]),d&&(Q(a,j,q.current.data,q.current.error,!0),n.loadingTimeout&&!a.get(j)&&setTimeout((function(){u&&c()&&I().onLoadingSlow(j,n)}),n.loadingTimeout),w[j]=[t.apply(void 0,M),T()]),_=w[j],r=_[0],i=_[1],[4,r];case 2:return r=f.sent(),d&&setTimeout(s,n.dedupingInterval),w[j]&&w[j][1]===i?(V({error:p}),v.error=p,b=O[j],!h(b)&&(i<=b[0]||i<=b[1]||0===b[1])?(m(),d&&c()&&I().onDiscarded(j),[2,!1]):(o(q.current.data,r)?v.data=q.current.data:v.data=r,o(a.get(j),r)||a.set(j,r),d&&c()&&I().onSuccess(r,j,n),[3,4])):(d&&c()&&I().onDiscarded(j),[2,!1]);case 3:return g=f.sent(),s(),I().isPaused()||(V({error:g}),v.error=g,d&&c()&&(I().onError(g,j,n),("boolean"==typeof n.shouldRetryOnError&&n.shouldRetryOnError||y(n.shouldRetryOnError)&&n.shouldRetryOnError(g))&&L()&&I().onErrorRetry(g,j,n,re,{retryCount:(l.retryCount||0)+1,dedupe:!0}))),[3,4];case 4:return u=!1,m(),c()&&d&&Q(a,j,v.data,v.error,!1),[2,!0]}}))}))}),[j]),ae=Object(r.useCallback)(H.bind(p,a,(function(){return x.current})),[]);if(B((function(){S.current=t,D.current=n})),B((function(){if(j){var e=j!==x.current,t=re.bind(p,ee),n=0,r=$(j,_,(function(e,t,n){ne(b({error:t,isValidating:n},o(q.current.data,e)?p:{data:e}))})),a=$(j,g,(function(e){if(0==e){var r=Date.now();I().revalidateOnFocus&&r>n&&L()&&(n=r+I().focusThrottleInterval,t())}else if(1==e)I().revalidateOnReconnect&&L()&&t();else if(2==e)return re()}));return C.current=!1,x.current=j,k.current=!0,e&&ne({data:Z,error:G,isValidating:X}),Y()&&(h(Z)||N?t():A(t)),function(){C.current=!0,r(),a()}}}),[j,re]),B((function(){var e;function t(){var t=y(d)?d(Z):d;t&&-1!==e&&(e=setTimeout(n,t))}function n(){q.current.error||!s&&!I().isVisible()||!v&&!I().isOnline()?t():re(ee).then(t)}return t(),function(){e&&(clearTimeout(e),e=-1)}}),[d,s,v,re]),Object(r.useDebugValue)(Z),u&&h(Z)&&j)throw S.current=t,D.current=n,C.current=!1,h(G)?re(ee):G;return{mutate:ae,get data(){return te.data=!0,Z},get error(){return te.error=!0,G},get isValidating(){return te.isValidating=!0,X}}};function te(){var e=q();return Object(r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function ne(e){void 0===e&&(e=!1);var t=l(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 D})),n.d(t,"useHotkeys",(function(){return S})),n.d(t,"useIsHotkeyPressed",(function(){return C}));
16
16
  /**!
17
17
  * hotkeys-js v3.9.3
18
18
  * A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
@@ -21,5 +21,5 @@ PERFORMANCE OF THIS SOFTWARE.
21
21
  * http://jaywcjlove.github.io/hotkeys
22
22
  * Licensed under the MIT license
23
23
  */
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 D=P.isPressed}]));
25
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzPzlhNGUiLCJ3ZWJwYWNrOi8vLy4vc3JjL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24ubW9kdWxlLmNzcz9jZDQ2Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25CYWRnZS9CdXR0b25CYWRnZS5tb2R1bGUuY3NzPzMyYWIiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsubW9kdWxlLmNzcz8wODQxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwubW9kdWxlLmNzcz8xZjExIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94Lm1vZHVsZS5jc3M/NGVlYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9Db2xvclBpY2tlci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3M/MjNlYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5tb2R1bGUuY3NzP2UxODgiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Nb2RhbC9Nb2RhbC5tb2R1bGUuY3NzPzBlZGYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzcz8yN2IzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi5tb2R1bGUuY3NzPzliOTMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLm1vZHVsZS5jc3M/M2ViOSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY2FyZXQtZG93bi5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUubW9kdWxlLmNzcz8zNzA5Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3M/OTZkMiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLm1vZHVsZS5jc3M/NTA0OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0ubW9kdWxlLmNzcz8wNDI3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0Lm1vZHVsZS5jc3M/MTI5OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLm1vZHVsZS5jc3M/N2FiZiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/ZDI4ZCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzcz9jYzM3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS5tb2R1bGUuY3NzPzk1YTciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/NDY0ZSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3TGlua0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8yMWM1Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/Y2QzNiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz9jZjYxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzPzlhMzYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLm1vZHVsZS5jc3M/ZTIyMyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC5tb2R1bGUuY3NzPzQ3ZjAiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2JhY2tzcGFjZS5zdmciLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlT3V0c2lkZUNsaWNrL3VzZU91dHNpZGVDbGljay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVByb21pc2UvdXNlUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3dyL2Rpc3QvaW5kZXguZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVNXUkhvb2tzQ29uZmlnL3VzZVNXUkhvb2tzQ29uZmlnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVRvZ2dsZS91c2VUb2dnbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hvdGtleXMtanMvZGlzdC9ob3RrZXlzLmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaG90a2V5cy1ob29rL2Rpc3QvcmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsInJlcXVpcmUiLCJpc0FycmF5IiwiQXJyYXkiLCJjYyIsIm9iaiIsIm91dCIsInRtcCIsImsiLCJsZW5ndGgiLCJkZWZhdWx0IiwiZGlzcGxheSIsImlzRGlzYWJsZWQiLCJoYW5kbGVDbGljayIsIkJ1dHRvbiIsImFsaWduIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwic2l6ZSIsInN0cmV0Y2hIb3Jpem9udGFsbHkiLCJjbGFzc05hbWUiLCJjb250YWluZXIiLCJJY29uIiwiYWx0Iiwic3JjIiwiY2hpbGRyZW4iLCJvblBvaW50ZXJEb3duIiwiY29udGFpbmVyUmVmIiwiaW52ZXJ0ZWQiLCJyb3VuZGVkIiwibm9TaGFkb3ciLCJub1BhZGRpbmciLCJub0JvcmRlciIsInRyYW5zcGFyZW50Iiwic3RyZXRjaFZlcnRpY2FsbHkiLCJhdXRvRm9jdXMiLCJvZmZzZXRTaWRlcyIsInR5cGUiLCJyZWYiLCJsZWZ0T2Zmc2V0IiwiaW5jbHVkZXMiLCJyaWdodE9mZnNldCIsInJvbGUiLCJjb250ZW50IiwiYnV0dG9uQmFkZ2UiLCJDb21wb25lbnQiLCJwcm9wcyIsImxhYmVsIiwib25DaGFuZ2UiLCJwbGFjZWhvbGRlciIsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiaGFuZGxlQ2hhbmdlIiwidXNlQ2FsbGJhY2siLCJlIiwidGFyZ2V0IiwiTGFiZWwiLCJpbnB1dFJlZiIsImNoZWNrYm94IiwiY29sb3JzIiwib25TZWxlY3QiLCJzZWxlY3RlZENvbG9yIiwiZGlyZWN0aW9uIiwiY2FuVG9nZ2xlIiwiY29sb3JQaWNrZXIiLCJtYXAiLCJjb2xvciIsIkNvbG9yU3dhdGNoIiwiaXNTZWxlY3RlZCIsImNvbG9yU3dhdGNoIiwic2VsZWN0ZWQiLCJzdHlsZSIsImJhY2tncm91bmRDb2xvciIsImhleENvZGUiLCJzck9ubHkiLCJDb25maXJtYXRpb25Nb2RhbCIsImhlYWRlciIsImlzT3BlbiIsImJ1dHRvbnNMZWZ0IiwiYnV0dG9uc1JpZ2h0Iiwib25DbG9zZSIsIm5vT3ZlcmxheSIsImJhc2VaSW5kZXgiLCJNb2RhbCIsIm1vZGFsSGVhZGVyIiwibW9kYWxDb250ZW50IiwibW9kYWxCdXR0b25zQ29udGFpbmVyIiwibW9kYWxCdXR0b25zIiwiZGlzcGxheU5hbWUiLCJidXR0b24iLCJ1c2VIb3RrZXlzIiwiaGFuZGxlT3ZlcmxheUNsaWNrIiwiekluZGV4Iiwib3ZlcmxheSIsIm1vZGFsIiwibW9kYWxCdXR0b24iLCJEcm9wZG93biIsIkNsaWNrYWJsZSIsIml0ZW1Cb2R5UmVuZGVyZXIiLCJpdGVtcyIsImhhbmRsZVNlbGVjdCIsInJlbmRlckNsaWNrYWJsZSIsInNlbGVjdGVkSXRlbSIsInBsYWNlbWVudCIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInVzZVN0YXRlIiwic2V0SXNPcGVuIiwidXNlT3V0c2lkZUNsaWNrIiwidG9nZ2xlSXNPcGVuIiwiTWVudUNvbnRhaW5lciIsIk1lbnUiLCJpdGVtIiwiTWVudUl0ZW0iLCJpc0FjdGl2ZSIsImlkIiwiaWNvbiIsImNyb3NzT3JpZ2luIiwiZm9vdGVyIiwibWVudSIsIm9wZW4iLCJzY3JvbGxDb250YWluZXIiLCJmb3J3YXJkUmVmIiwibWVudUNvbnRhaW5lciIsIm1lbnVJdGVtIiwiYWN0aXZlIiwibWVudUxpbmtJdGVtIiwiYWNjZXB0IiwibXVsdGlwbGUiLCJpbnB1dCIsImxheW91dCIsInBhcmVudCIsImhvcml6b250YWxQbGFjZW1lbnQiLCJ2ZXJ0aWNhbFBsYWNlbWVudCIsImZpeGVkIiwidG9wT2Zmc2V0IiwiYm90dG9tT2Zmc2V0Iiwic3JjV2lkdGgiLCJzcmNIZWlnaHQiLCJkZWNvZGluZyIsImxvYWRpbmciLCJpbWFnZUVsZW1lbnQiLCJpbWFnZSIsIndpZHRoIiwiaGVpZ2h0IiwiaGFzT3ZlcmxheSIsImhlYWRlckFjdGlvbnMiLCJoZWFkZXJMYWJlbCIsInRleHQiLCJsaXN0IiwibGlzdFZpZXdJdGVtIiwiQnV0dG9uTGluayIsImFzIiwiaXNGaXhlZCIsIm9uQmx1ciIsIm9uS2V5RG93biIsInBhdHRlcm4iLCJpbnB1dEVsZW1lbnQiLCJ0ZXh0SW5wdXQiLCJ0b2FzdCIsInRvYXN0Q29udGFpbmVyIiwicG9zdGVyIiwibXV0ZWQiLCJsb29wIiwiYXV0b1BsYXkiLCJ2aWRlbyIsInBsYXlzSW5saW5lIiwiTnVtcGFkIiwiYXBwZW5kRGlnaXQiLCJudW1iZXIiLCJkaWdpdCIsInBvcERpZ2l0IiwiTWF0aCIsImZsb29yIiwiZXZlbnREaWdpdEtleXMiLCJjcmVhdGVFbWl0TnVtYmVySGFuZGxlciIsIm5ld051bWJlciIsInN0b3BQcm9wYWdhdGlvbiIsIk51bXBhZEtleXMiLCJmaWxsIiwiXyIsImluZGV4IiwibnVtcGFkVmFsdWUiLCJudW1wYWQiLCJ0YWJJbmRleCIsInBhcnNlSW50IiwibnVtYmVycyIsIm9wdGlvbnMiLCJjYXB0dXJlIiwiY2FsbGJhY2siLCJldmVudCIsImN1cnJlbnQiLCJjb250YWlucyIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsImFwcGx5IiwiX19nZW5lcmF0b3IiLCJib2R5IiwiZiIsInkiLCJnIiwic2VudCIsInRyeXMiLCJvcHMiLCJ2ZXJiIiwiaXRlcmF0b3IiLCJ0aGlzIiwidiIsIm9wIiwiVHlwZUVycm9yIiwicG9wIiwicHVzaCIsIl9fcmVhZCIsImFyIiwiZXJyb3IiLCJ1c2VQcm9taXNlIiwiX3RoaXMiLCJfYSIsImRhdGEiLCJ1bmRlZmluZWQiLCJpc1BlbmRpbmciLCJpc1Jlc29sdmVkIiwiaXNSZWplY3RlZCIsImlzU2V0dGxlZCIsInNldFJlc3VsdCIsImhhc1VubW91bnRlZCIsInByb21pc2UiLCJlcnJvcl8xIiwiaG9vayIsIm5vb3AiLCJVTkRFRklORUQiLCJPQkpFQ1QiLCJpc1VuZGVmaW5lZCIsImlzRnVuY3Rpb24iLCJtZXJnZU9iamVjdHMiLCJhIiwiYiIsImFzc2lnbiIsImhhc1dpbmRvdyIsIndpbmRvdyIsInRhYmxlIiwiV2Vha01hcCIsImNvdW50ZXIiLCJzdGFibGVIYXNoIiwiYXJnIiwiY29uc3RydWN0b3IiLCJpc0RhdGUiLCJEYXRlIiwiUmVnRXhwIiwidG9KU09OIiwidG9TdHJpbmciLCJKU09OIiwic3RyaW5naWZ5Iiwic2V0Iiwia2V5cyIsInNvcnQiLCJvbmxpbmUiLCJoYXNXaW4iLCJoYXNEb2MiLCJvbldpbmRvd0V2ZW50Iiwib25Eb2N1bWVudEV2ZW50Iiwib2ZmV2luZG93RXZlbnQiLCJvZmZEb2N1bWVudEV2ZW50IiwicHJlc2V0IiwiaXNPbmxpbmUiLCJpc1Zpc2libGUiLCJ2aXNpYmlsaXR5U3RhdGUiLCJkZWZhdWx0Q29uZmlnT3B0aW9ucyIsImluaXRGb2N1cyIsImluaXRSZWNvbm5lY3QiLCJvbk9ubGluZSIsIm9uT2ZmbGluZSIsIklTX1NFUlZFUiIsInJBRiIsInNldFRpbWVvdXQiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwibmF2aWdhdG9yQ29ubmVjdGlvbiIsIm5hdmlnYXRvciIsImNvbm5lY3Rpb24iLCJzbG93Q29ubmVjdGlvbiIsImVmZmVjdGl2ZVR5cGUiLCJzYXZlRGF0YSIsInNlcmlhbGl6ZSIsImVyciIsImFyZ3MiLCJjb25jYXQiLCJTV1JHbG9iYWxTdGF0ZSIsImJyb2FkY2FzdFN0YXRlIiwiY2FjaGUiLCJpc1ZhbGlkYXRpbmciLCJyZXZhbGlkYXRlIiwiYnJvYWRjYXN0IiwiRVZFTlRfUkVWQUxJREFUT1JTIiwiU1RBVEVfVVBEQVRFUlMiLCJGRVRDSCIsInJldmFsaWRhdG9ycyIsInVwZGF0ZXJzIiwiX190aW1lc3RhbXAiLCJnZXRUaW1lc3RhbXAiLCJpbnRlcm5hbE11dGF0ZSIsIl9pIiwiYXJndW1lbnRzIiwiX2tleSIsIl9kYXRhIiwiX29wdHMiLCJwb3B1bGF0ZUNhY2hlIiwicm9sbGJhY2tPbkVycm9yIiwiY3VzdG9tT3B0aW1pc3RpY0RhdGEiLCJrZXlJbmZvIiwiX2IiLCJNVVRBVElPTiIsImJlZm9yZU11dGF0aW9uVHMiLCJoYXNDdXN0b21PcHRpbWlzdGljRGF0YSIsInJvbGxiYWNrRGF0YSIsIm9wdGltaXN0aWNEYXRhIiwicmVzIiwiX2MiLCJjYXRjaCIsInJldmFsaWRhdGVBbGxLZXlzIiwiaW5pdENhY2hlIiwicHJvdmlkZXIiLCJoYXMiLCJvcHRzIiwibXV0YXRlIiwidW5tb3VudCIsInJlbGVhc2VGb2N1c18xIiwicmVsZWFzZVJlY29ubmVjdF8xIiwiZGVsZXRlIiwiTWFwIiwiZGVmYXVsdENvbmZpZyIsIm9uTG9hZGluZ1Nsb3ciLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwib25FcnJvclJldHJ5IiwiX18iLCJjb25maWciLCJtYXhSZXRyeUNvdW50IiwiZXJyb3JSZXRyeUNvdW50IiwiY3VycmVudFJldHJ5Q291bnQiLCJyZXRyeUNvdW50IiwidGltZW91dCIsInJhbmRvbSIsImVycm9yUmV0cnlJbnRlcnZhbCIsIm9uRGlzY2FyZGVkIiwicmV2YWxpZGF0ZU9uRm9jdXMiLCJyZXZhbGlkYXRlT25SZWNvbm5lY3QiLCJyZXZhbGlkYXRlSWZTdGFsZSIsInNob3VsZFJldHJ5T25FcnJvciIsImZvY3VzVGhyb3R0bGVJbnRlcnZhbCIsImRlZHVwaW5nSW50ZXJ2YWwiLCJsb2FkaW5nVGltZW91dCIsImNvbXBhcmUiLCJjdXJyZW50RGF0YSIsIm5ld0RhdGEiLCJpc1BhdXNlZCIsImZhbGxiYWNrIiwibWVyZ2VDb25maWdzIiwidTEiLCJ1c2UiLCJmMSIsInUyIiwiZjIiLCJTV1JDb25maWdDb250ZXh0Iiwibm9ybWFsaXplIiwidXNlU1dSQ29uZmlnIiwic3Vic2NyaWJlQ2FsbGJhY2siLCJjYWxsYmFja3MiLCJrZXllZFJldmFsaWRhdG9ycyIsImluZGV4T2YiLCJXSVRIX0RFRFVQRSIsImRlZHVwZSIsImV4dGVuZGVkQ29uZmlnIiwiY2FjaGVDb250ZXh0IiwiUHJvdmlkZXIiLCJmZXRjaGVyIiwiZmFsbGJhY2tEYXRhIiwic3VzcGVuc2UiLCJyZXZhbGlkYXRlT25Nb3VudCIsInJlZnJlc2hJbnRlcnZhbCIsInJlZnJlc2hXaGVuSGlkZGVuIiwicmVmcmVzaFdoZW5PZmZsaW5lIiwiZm5BcmdzIiwiaW5pdGlhbE1vdW50ZWRSZWYiLCJ1bm1vdW50ZWRSZWYiLCJrZXlSZWYiLCJmZXRjaGVyUmVmIiwiY29uZmlnUmVmIiwiZ2V0Q29uZmlnIiwicGF0Y2hGZXRjaEluZm8iLCJpbmZvIiwiY2FjaGVkIiwiaXNJbml0aWFsTW91bnQiLCJzaG91bGRSZXZhbGlkYXRlIiwic3RhdGUiLCJyZXJlbmRlciIsInN0YXRlUmVmIiwic3RhdGVEZXBlbmRlbmNpZXNSZWYiLCJzZXRTdGF0ZSIsInBheWxvYWQiLCJzaG91bGRSZXJlbmRlciIsImN1cnJlbnRTdGF0ZSIsInVzZVN0YXRlV2l0aERlcHMiLCJzdGF0ZURlcGVuZGVuY2llcyIsInJldmFsaWRhdGVPcHRzIiwiY3VycmVudEZldGNoZXIiLCJzdGFydEF0Iiwic2hvdWxkU3RhcnROZXdSZXF1ZXN0IiwiaXNDdXJyZW50S2V5TW91bnRlZCIsImNsZWFudXBTdGF0ZSIsIm5ld1N0YXRlIiwiZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlIiwibXV0YXRpb25JbmZvIiwiZXJyXzEiLCJyZXF1ZXN0SW5mbyIsImJvdW5kTXV0YXRlIiwia2V5Q2hhbmdlZCIsInNvZnRSZXZhbGlkYXRlIiwibmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCIsInVuc3ViVXBkYXRlIiwidXBkYXRlZERhdGEiLCJ1cGRhdGVkRXJyb3IiLCJ1cGRhdGVkSXNWYWxpZGF0aW5nIiwidW5zdWJFdmVudHMiLCJub3ciLCJ0aW1lciIsImludGVydmFsIiwiZXhlY3V0ZSIsImNsZWFyVGltZW91dCIsInVzZVNXUkhvb2tzQ29uZmlnIiwic3dyQ29uZmlnIiwidXNlVG9nZ2xlIiwiaW5pdGlhbFZhbHVlIiwic2V0VmFsdWUiLCJuZXdWYWx1ZSIsInByZXZWYWx1ZSIsImlzZmYiLCJ1c2VyQWdlbnQiLCJ0b0xvd2VyQ2FzZSIsImFkZEV2ZW50IiwibWV0aG9kIiwidXNlQ2FwdHVyZSIsImF0dGFjaEV2ZW50IiwiZ2V0TW9kcyIsIm1vZGlmaWVyIiwibW9kcyIsInNsaWNlIiwiZ2V0S2V5cyIsInJlcGxhY2UiLCJzcGxpdCIsImxhc3RJbmRleE9mIiwic3BsaWNlIiwiX2tleU1hcCIsImJhY2tzcGFjZSIsInRhYiIsImNsZWFyIiwiZW50ZXIiLCJyZXR1cm4iLCJlc2MiLCJlc2NhcGUiLCJzcGFjZSIsImxlZnQiLCJ1cCIsInJpZ2h0IiwiZG93biIsImRlbCIsImlucyIsImluc2VydCIsImhvbWUiLCJlbmQiLCJwYWdldXAiLCJwYWdlZG93biIsImNhcHNsb2NrIiwibnVtXzAiLCJudW1fMSIsIm51bV8yIiwibnVtXzMiLCJudW1fNCIsIm51bV81IiwibnVtXzYiLCJudW1fNyIsIm51bV84IiwibnVtXzkiLCJudW1fbXVsdGlwbHkiLCJudW1fYWRkIiwibnVtX2VudGVyIiwibnVtX3N1YnRyYWN0IiwibnVtX2RlY2ltYWwiLCJudW1fZGl2aWRlIiwiJyIsIl9tb2RpZmllciIsInNoaWZ0Iiwib3B0aW9uIiwiY3RybCIsImNvbnRyb2wiLCJjbWQiLCJjb21tYW5kIiwibW9kaWZpZXJNYXAiLCIxNiIsIjE4IiwiMTciLCI5MSIsInNoaWZ0S2V5IiwiY3RybEtleSIsImFsdEtleSIsIm1ldGFLZXkiLCJfbW9kcyIsIl9oYW5kbGVycyIsIl9kb3duS2V5cyIsIndpbkxpc3RlbmRGb2N1cyIsIl9zY29wZSIsImVsZW1lbnRIYXNCaW5kRXZlbnQiLCJjb2RlIiwieCIsInRvVXBwZXJDYXNlIiwiY2hhckNvZGVBdCIsInNldFNjb3BlIiwic2NvcGUiLCJnZXRTY29wZSIsImVhY2hVbmJpbmQiLCJfcmVmIiwiX3JlZiRzcGxpdEtleSIsInNwbGl0S2V5IiwiZm9yRWFjaCIsIm9yaWdpbktleSIsInVuYmluZEtleXMiLCJsZW4iLCJsYXN0S2V5Iiwia2V5Q29kZSIsImZpbHRlciIsInJlY29yZCIsImExIiwiYTIiLCJhcnIxIiwiYXJyMiIsImlzSW5kZXgiLCJjb21wYXJlQXJyYXkiLCJldmVudEhhbmRsZXIiLCJoYW5kbGVyIiwiZWxlbWVudCIsIm1vZGlmaWVyc01hdGNoIiwic2hvcnRjdXQiLCJwcmV2ZW50RGVmYXVsdCIsInJldHVyblZhbHVlIiwiY2FuY2VsQnViYmxlIiwiZGlzcGF0Y2giLCJhc3RlcmlzayIsIndoaWNoIiwiY2hhckNvZGUiLCJob3RrZXlzIiwia2V5TmFtZSIsImtleU51bSIsImdldE1vZGlmaWVyU3RhdGUiLCJrZXlkb3duIiwia2V5dXAiLCJrZXlTaG9ydGN1dCIsIl9kb3duS2V5c0N1cnJlbnQiLCJqb2luIiwiaXNFbGVtZW50QmluZCIsImNsZWFyTW9kaWZpZXIiLCJfYXBpIiwiZGVsZXRlU2NvcGUiLCJuZXdTY29wZSIsImhhbmRsZXJzIiwiZ2V0UHJlc3NlZEtleUNvZGVzIiwiaXNQcmVzc2VkIiwic3JjRWxlbWVudCIsInRhZ05hbWUiLCJmbGFnIiwiaXNDb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInRyaWdnZXIiLCJmaW5kIiwidW5iaW5kIiwia2V5c0luZm8iLCJfbGVuIiwia2V5TWFwIiwiX2hvdGtleXMiLCJub0NvbmZsaWN0IiwiZGVlcCIsInVzZUlzSG90a2V5UHJlc3NlZCIsInRhZ0ZpbHRlciIsImVuYWJsZU9uVGFncyIsInRhcmdldFRhZ05hbWUiLCJCb29sZWFuIiwiZGVwcyIsIl9yZWYyIiwiX3JlZjIkZmlsdGVyUHJldmVudERlIiwiZmlsdGVyUHJldmVudERlZmF1bHQiLCJfcmVmMiRlbmFibGVkIiwiZW5hYmxlZCIsIl9yZWYyJGVuYWJsZU9uQ29udGVudCIsImVuYWJsZU9uQ29udGVudEVkaXRhYmxlIiwibWVtb2lzZWRDYWxsYmFjayIsImtleWJvYXJkRXZlbnQiLCJob3RrZXlzRXZlbnQiLCJfa2V5Ym9hcmRFdmVudCR0YXJnZXQiLCJhY3RpdmVFbGVtZW50IiwiaXNIb3RrZXlQcmVzc2VkIl0sIm1hcHBpbmdzIjoiNkRBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBMERmLE9BckRBRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JVLEVBQUksU0FBU1IsRUFBU1MsRUFBTUMsR0FDM0NaLEVBQW9CYSxFQUFFWCxFQUFTUyxJQUNsQ0csT0FBT0MsZUFBZWIsRUFBU1MsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFWixFQUFvQmtCLEVBQUksU0FBU2hCLEdBQ1gsb0JBQVhpQixRQUEwQkEsT0FBT0MsYUFDMUNOLE9BQU9DLGVBQWViLEVBQVNpQixPQUFPQyxZQUFhLENBQUVDLE1BQU8sV0FFN0RQLE9BQU9DLGVBQWViLEVBQVMsYUFBYyxDQUFFbUIsT0FBTyxLQVF2RHJCLEVBQW9Cc0IsRUFBSSxTQUFTRCxFQUFPRSxHQUV2QyxHQURVLEVBQVBBLElBQVVGLEVBQVFyQixFQUFvQnFCLElBQy9CLEVBQVBFLEVBQVUsT0FBT0YsRUFDcEIsR0FBVyxFQUFQ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QW9ELElBQTFCRCxHQUEyQ0EsRUFFckV4akIsRUFBTSxpQkFBTyxNQUViMGpCLEVBQW1CLHVCQUFZLFNBQVVDLEVBQWVDLEdBQzFELElBQUlDLEVBRUosT0FBSW5FLElBQVdBLEVBQU9pRSxJQUNaTixLQTNCTFAsRUErQitCYSxFQS9CakIsQ0FBQyxRQUFTLFdBQVksYUErQmNiLEVBQVVhLEVBQWVaLElBQW1FLE9BQWpEYyxFQUF3QkYsRUFBYzFpQixTQUFtQjRpQixFQUFzQjNCLG9CQUFzQnVCLEtBSW5MLE9BQWhCempCLEVBQUl5SixTQUFvQkUsU0FBU21hLGdCQUFrQjlqQixFQUFJeUosV0FDekRGLEVBQVNvYSxFQUFlQyxJQUNqQixLQUlSVixFQUFPLENBQUNsakIsRUFBSytpQixFQUFjckQsR0FBUW5QLE9BQU8yUyxHQUFRLENBQUNsakIsRUFBSytpQixFQUFjckQsSUFpQnpFLE9BaEJBLHFCQUFVLFdBQ1IsR0FBSzZELEVBV0wsT0FMSXBDLElBQXFCLElBQVpELElBQ1g3WCxFQUFRNlgsU0FBVSxHQUdwQkosRUFBUXRTLEVBQU1uRixHQUFXLEdBQUlxYSxHQUN0QixXQUNMLE9BQU81QyxFQUFRd0IsT0FBTzlULEVBQU1rVixJQVg1QjVDLEVBQVF3QixPQUFPOVQsRUFBTWtWLEtBYXRCLENBQUNBLEVBQWtCbFYsRUFBTStVLElBQ3JCdmpCLEVBR1QsSUFBSStqQixFQUFrQmpELEVBQVFnQiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJ2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2Mob2JqKSB7XG4gIHZhciBvdXQgPSBcIlwiXG5cbiAgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJudW1iZXJcIikgcmV0dXJuIG9iaiB8fCBcIlwiXG5cbiAgaWYgKGlzQXJyYXkob2JqKSlcbiAgICBmb3IgKHZhciBrID0gMCwgdG1wOyBrIDwgb2JqLmxlbmd0aDsgaysrKSB7XG4gICAgICBpZiAoKHRtcCA9IGNjKG9ialtrXSkpICE9PSBcIlwiKSB7XG4gICAgICAgIG91dCArPSAob3V0ICYmIFwiIFwiKSArIHRtcFxuICAgICAgfVxuICAgIH1cbiAgZWxzZVxuICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspICYmIG9ialtrXSkgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsga1xuICAgIH1cblxuICByZXR1cm4gb3V0XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb24gfSBmcm9tIFwiLi9JY29uXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbiB9IGZyb20gXCIuL0J1dHRvblwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMYWJlbCB9IGZyb20gXCIuL0xhYmVsXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9CdXR0b25MaW5rXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yU3dhdGNoIH0gZnJvbSBcIi4vQ29sb3JTd2F0Y2hcIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTW9kYWwgfSBmcm9tIFwiLi9Nb2RhbFwiO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCB7IEl0ZW0sIFJlbmRlckRpc3BsYXlQcm9wcyB9IGZyb20gXCIuL0Ryb3Bkb3duXCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vQ2xpY2thYmxlLm1vZHVsZS5jc3NcIjtcblxuaW1wb3J0IGljb25NZW51IGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY2FyZXQtZG93bi5zdmdcIjtcblxuZXhwb3J0IHR5cGUgQ2xpY2thYmxlUHJvcHM8VCBleHRlbmRzIEl0ZW0+ID0gT21pdDxcbiAgUmVuZGVyRGlzcGxheVByb3BzPFQ+LFxuICBcInNlbGVjdGVkSXRlbVwiIHwgXCJ0b2dnbGVJc09wZW5cIlxuPiAmIHtcbiAgb25DbGljazogUmVuZGVyRGlzcGxheVByb3BzPFQ+W1widG9nZ2xlSXNPcGVuXCJdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENsaWNrYWJsZTxUIGV4dGVuZHMgSXRlbT4oe1xuICBkaXNwbGF5LFxuICBpc0Rpc2FibGVkLFxuICBvbkNsaWNrOiBoYW5kbGVDbGljayxcbn06IENsaWNrYWJsZVByb3BzPFQ+KSB7XG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgYWxpZ249XCJsZWZ0XCJcbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmNvbnRhaW5lcn0+XG4gICAgICAgIHtkaXNwbGF5fVxuICAgICAgICA8SWNvbiBhbHQ9XCJEcm9wZG93blwiIHNyYz17aWNvbk1lbnV9IC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dHRvbj5cbiAgKTtcbn1cbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudSB9IGZyb20gXCIuL01lbnVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUNvbnRhaW5lciwgTWVudVBsYWNlbWVudCB9IGZyb20gXCIuL01lbnVDb250YWluZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUl0ZW0gfSBmcm9tIFwiLi9NZW51SXRlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51TGlua0l0ZW0gfSBmcm9tIFwiLi9NZW51TGlua0l0ZW1cIjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibGlzdFZpZXdJdGVtXCI6XCJWS1lvTnRXVFp1aTJBTzFJbHlKTVR3PT1cIn07IiwiZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uTGlua1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9DaGVja2JveFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclBpY2tlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclN3YXRjaFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ecm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9GaWxlSW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGlzdFZpZXdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTWVudVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Nb2RhbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9PdmVybGF5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RleHRJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ub2FzdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9WaWRlb1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9OdW1wYWRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQnV0dG9uUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50LCBNb3VzZUV2ZW50PikgPT4gdm9pZDtcbiAgb25Qb2ludGVyRG93bj86IChldmVudDogUmVhY3QuUG9pbnRlckV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJsZWZ0XCIgfCBcInJpZ2h0XCI+O1xufTtcblxuZnVuY3Rpb24gQnV0dG9uKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbiAgb25Qb2ludGVyRG93bixcbiAgY29udGFpbmVyUmVmLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlLFxufTogQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIG9uUG9pbnRlckRvd249e29uUG9pbnRlckRvd259XG4gICAgPlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiZcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKX1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInh5bnVNdThYWlNzb25EdWtzbDZBUWc9PVwiLFwibGVmdFwiOlwiUGtwMEhoTkh0dG9XSWIyZHdwR250dz09XCIsXCJzbWFsbFwiOlwid0RPZWVKR0NabTBrMlpwTnpGYmVIZz09XCIsXCJsYXJnZVwiOlwiXzVRakJXdGw3WVh5NGVtNFgzR1BiUkE9PVwiLFwieGxhcmdlXCI6XCJrTjBMZ2E0ZkJPZ2NpZ0RxdE9EUmRnPT1cIixcImludmVydGVkXCI6XCIrNW5zVG5MbE5PWDhLRlFpVWhUMWtRPT1cIixcInJvdW5kZWRcIjpcIkJqUC1KTldKam9CZk5NTXp0bnlXT1E9PVwiLFwicmlnaHRPZmZzZXRcIjpcImxHSndOY29sOENBa25xeFkrOERmcWc9PVwiLFwibGVmdE9mZnNldFwiOlwiRVYrZzZoVUExcXY4TFE5UnFnclFSUT09XCIsXCJub1NoYWRvd1wiOlwiWjN1UExycnlxSU5mUmpacHB3VTZOUT09XCIsXCJub0JvcmRlclwiOlwiZUVnaEc2R1hCOUl6eUQzanJOWmZBQT09XCIsXCJ0cmFuc3BhcmVudFwiOlwic3M3RGhWZ0Y1SkdzcENBU2RaVVlCZz09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJpOFFQU3I0Y0hZaEo3QWl1ZStjeDBnPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJXU3hpbVVNOWt4WUdjNVZSYzBpWmxBPT1cIixcIm5vUGFkZGluZ1wiOlwiU2dYY2hqejRkSnIrdGM4eWtMbkUxQT09XCIsXCJjb250ZW50XCI6XCJ4bjh5ZmpONm1leFJYSWd5Tmhta2l3PT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25CYWRnZSB9IGZyb20gXCIuL0J1dHRvbkJhZGdlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uQmFkZ2UubW9kdWxlLmNzc1wiO1xuXG50eXBlIEJ1dHRvbkJhZGdlUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gQnV0dG9uQmFkZ2UoeyBjaGlsZHJlbiwgaW52ZXJ0ZWQgPSBmYWxzZSwgY2xhc3NOYW1lIH06IEJ1dHRvbkJhZGdlUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5idXR0b25CYWRnZSwge1tzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZH0sIGNsYXNzTmFtZV0pfT57Y2hpbGRyZW59PC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkJhZGdlO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJidXR0b25CYWRnZVwiOlwiUlNqYlJpWEZXQWZCemNDb2FNcFhlQT09XCIsXCJpbnZlcnRlZFwiOlwiWDRvNE9Lc1MxVDRtaUlzMENxNXgtZz09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG5cbnR5cGUgQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gICAgICBpbnZlcnRlZD86IGJvb2xlYW47XG4gICAgICByb3VuZGVkPzogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgICAgIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgICAgIG5vUGFkZGluZz86IGJvb2xlYW47XG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgICAgIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgICAgIHNpemU/OiBTaXplO1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcbiAgICAgIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEJ1dHRvbkxpbmsoe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzaXplLFxuICBjb250YWluZXJSZWYsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICAuLi5wcm9wc1xufTogQnV0dG9uTGlua1Byb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJidXR0b24tbGlua1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkxpbms7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiWklyOXctLWZTaXZxV1ZHb1NwMTR0QT09XCIsXCJsZWZ0XCI6XCJyUnl1OUFWR3dYKy14alRPTVRTRTF3PT1cIixcInNtYWxsXCI6XCJfMERCaEdKdmNiakVNbFNxRW9mRi1ydz09XCIsXCJtZWRpdW1cIjpcImE2K3pjVVk2WEt5OTR6QXFVWWFFNnc9PVwiLFwibGFyZ2VcIjpcIlcrdjR2RmViUWt4dzFjZGlLWS1Ldmc9PVwiLFwieGxhcmdlXCI6XCJkWTkxRFFSWVVhV1Q0RXpPSkorR0JnPT1cIixcImludmVydGVkXCI6XCJ5cGxDcHlsTDRJZGVzK2NPcnFTaW1RPT1cIixcInJvdW5kZWRcIjpcIk1SRVkwOStkNjl2Vjg0aFpuSnVMWXc9PVwiLFwicmlnaHRPZmZzZXRcIjpcIkhzYW83bUZXM2xZVHJOaGZXdmZ4V3c9PVwiLFwibGVmdE9mZnNldFwiOlwiTVhsTDNPOEtVWWVWQVljU3NuTnM5dz09XCIsXCJub1NoYWRvd1wiOlwiSHF6NENxUWNPNHMwTVRhd3JEcjBvQT09XCIsXCJ0cmFuc3BhcmVudFwiOlwiaDFoTndjMlVsTTBDNUYteGRnYTVkdz09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJUbXlxNCt1SFUrSkplWU5kQkg4TDJRPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJKenpHblR0NGFNMys5clZsTlFXaTBBPT1cIixcIm5vUGFkZGluZ1wiOlwiVXZJOFVuamM5WDB6TjJsNVcrdG1yUT09XCIsXCJub0JvcmRlclwiOlwiUXA1dUJuUWdKRm9aSGdZU2h6QVBjdz09XCIsXCJkaXNhYmxlZFwiOlwiWlhsamtZcFBXakRKTEM0QkVHTXBydz09XCIsXCJjb250ZW50XCI6XCJfMG4yTW5PZkpQbTJ3eHM0TTJuYkdIQT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tib3ggfSBmcm9tIFwiLi9DaGVja2JveFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ2hlY2tib3gubW9kdWxlLmNzc1wiO1xuXG50eXBlIENoZWNrYm94UHJvcHMgPSB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvbkNoYW5nZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgY2hlY2tlZD86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgc2l6ZT86IFNpemU7XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGluZGV0ZXJtaW5hdGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG5cbn07XG5cbmZ1bmN0aW9uIENoZWNrYm94KHtcbiAgbGFiZWwsXG4gIG9uQ2hhbmdlLFxuICBwbGFjZWhvbGRlcixcbiAgY2hlY2tlZCxcbiAgZGlzYWJsZWQsXG4gIG5hbWUsXG4gIGNsYXNzTmFtZSxcbiAgaW5kZXRlcm1pbmF0ZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxufTogQ2hlY2tib3hQcm9wcykge1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICAgICAgb25DaGFuZ2UoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQpLFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxMYWJlbCB2YWx1ZT17bGFiZWx9ID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBkYXRhLXRlc3RpZD1cImNoZWNrYm94XCJcbiAgICAgICAgcmVmPXsoaW5wdXRSZWYpID0+IHtcbiAgICAgICAgICBpZiAoaW5wdXRSZWYpIHtcbiAgICAgICAgICAgIGlucHV0UmVmLmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY2hlY2tib3gsIGNsYXNzTmFtZSwgc3R5bGVzW3NpemVdXSl9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICAvPlxuICAgIDwvTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94O1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGFiZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIExhYmVsSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxMYWJlbEVsZW1lbnQ+O1xuICB2YWx1ZTogUmVhY3ROb2RlO1xufTtcblxuZnVuY3Rpb24gTGFiZWwoeyBjbGFzc05hbWUsIGNoaWxkcmVuLCB2YWx1ZSwgY29udGFpbmVyUmVmIH06IExhYmVsSW5wdXRQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX1cbiAgICA+XG4gICAgICB7dmFsdWV9XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGFiZWw7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiYlI3UE84eVJGdFVsTjF2c1A3ZWNSUT09XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY2hlY2tib3hcIjpcIkNCUVo0UHAxY2xiKzVSOElsQ080Z1E9PVwiLFwic21hbGxcIjpcIl81amJqdXQ3R2d0N2d4ZW5qeWY5TGJRPT1cIixcIm1lZGl1bVwiOlwiaVBBT3cyWnNOSkEwbldEWHFXQzM3Zz09XCIsXCJsYXJnZVwiOlwiTEV5a1hzOW1FRVNkd282aVpvTWRVdz09XCIsXCJ4bGFyZ2VcIjpcInVxcEFDRUoxb2JBNGJSbGFlQVQyN2c9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yUGlja2VyIH0gZnJvbSBcIi4vQ29sb3JQaWNrZXJcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi4vQ29sb3JTd2F0Y2hcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JQaWNrZXIubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclBpY2tlclByb3BzID0ge1xuICBjb2xvcnM6IENvbG9yW107XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGRpcmVjdGlvbj86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xuICBvblNlbGVjdDogKGNvbG9yOiBDb2xvcikgPT4gdm9pZDtcbiAgc2VsZWN0ZWRDb2xvcj86IENvbG9yO1xuICBjYW5Ub2dnbGU/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gQ29sb3JQaWNrZXIoe1xuICBjb2xvcnMsXG4gIGNvbnRhaW5lclJlZixcbiAgb25TZWxlY3QsXG4gIHNlbGVjdGVkQ29sb3IsXG4gIGRpcmVjdGlvbiA9IFwidmVydGljYWxcIixcbiAgY2FuVG9nZ2xlID0gZmFsc2UsXG59OiBDb2xvclBpY2tlclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29sb3JQaWNrZXIsIHN0eWxlc1tkaXJlY3Rpb25dXSl9XG4gICAgPlxuICAgICAge2NvbG9ycy5tYXAoKGNvbG9yOiBDb2xvcikgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVTZWxlY3QgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGNhblRvZ2dsZSAmJiBjb2xvci5rZXkgPT09IHNlbGVjdGVkQ29sb3I/LmtleSkge1xuICAgICAgICAgICAgb25TZWxlY3QobnVsbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KGNvbG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Q29sb3JTd2F0Y2hcbiAgICAgICAgICAgIGtleT17Y29sb3Iua2V5fVxuICAgICAgICAgICAgY29sb3I9e2NvbG9yfVxuICAgICAgICAgICAgaXNTZWxlY3RlZD17Y29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXl9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclBpY2tlcjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db2xvclN3YXRjaC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDb2xvciwgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIENvbG9yU3dhdGNoUHJvcHMgPSB7XG4gIGNvbG9yOiBDb2xvcjtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIENvbG9yU3dhdGNoKHtcbiAgY29sb3IsXG4gIGNvbnRhaW5lclJlZixcbiAgaXNTZWxlY3RlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgb25DbGljayxcbn06IENvbG9yU3dhdGNoUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29sb3JTd2F0Y2gsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuc2VsZWN0ZWRdOiBpc1NlbGVjdGVkLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBkYXRhLXRlc3RpZD1cImNvbG9yLXN3YXRjaFwiXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBjb2xvci5oZXhDb2RlIH19XG4gICAgPlxuICAgICAge2NvbG9yLmxhYmVsICYmIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnNyT25seX0+e2BTZWxlY3QgJHtjb2xvci5sYWJlbH0gY29sb3JgfTwvc3Bhbj59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yU3dhdGNoO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb2xvclN3YXRjaFwiOlwidVRmN21ZZlhlTlQ3R24wem5uUjhEUT09XCIsXCJzbWFsbFwiOlwiYUFiZXpqT213Mk55VDlSVTdQdXlPQT09XCIsXCJsYXJnZVwiOlwiUWM2U0N2cWJubmhKM3p0Z3pQWk9GQT09XCIsXCJ4bGFyZ2VcIjpcIl82b0JCWkRrUmt6Zjd0RjRiaHlEdEFBPT1cIixcInNlbGVjdGVkXCI6XCJuaWNaZmdNayt1UUZQeXBKSWtRdWJ3PT1cIixcInNyT25seVwiOlwiR0hwSEVCMVFYRHlqZVI5Vm5FZDFUZz09XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JQaWNrZXJcIjpcIkRLdFA1NWJPZlVUQjFrRGEtaVVIcVE9PVwiLFwiaG9yaXpvbnRhbFwiOlwiXzM0TGo4LWItMTNDOEwwOVJzTWluZWc9PVwiLFwidmVydGljYWxcIjpcIl8xeXVnR1FzNEVrMHQzVDh0Z29LeFZRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb25maXJtYXRpb25Nb2RhbCB9IGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3RFbGVtZW50LCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuLi9Nb2RhbFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQ29uZmlybWF0aW9uTW9kYWxQcm9wcyA9IHtcbiAgYnV0dG9uc0xlZnQ/OiBSZWFjdEVsZW1lbnRbXTtcbiAgYnV0dG9uc1JpZ2h0PzogUmVhY3RFbGVtZW50W107XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIENvbmZpcm1hdGlvbk1vZGFsKHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgaGVhZGVyLFxuICBpc09wZW4sXG4gIGJ1dHRvbnNMZWZ0ID0gW10sXG4gIGJ1dHRvbnNSaWdodCA9IFtdLFxuICBvbkNsb3NlID0gKCkgPT4ge30sXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub092ZXJsYXkgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgYmFzZVpJbmRleCA9IDEwMTksXG59OiBDb25maXJtYXRpb25Nb2RhbFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPE1vZGFsXG4gICAgICBjb250YWluZXJSZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgIG5vT3ZlcmxheT17bm9PdmVybGF5fVxuICAgICAgbm9TaGFkb3c9e25vU2hhZG93fVxuICAgICAgYmFzZVpJbmRleD17YmFzZVpJbmRleH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIHshIWhlYWRlciAmJiA8aDEgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxIZWFkZXJ9PntoZWFkZXJ9PC9oMT59XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbENvbnRlbnQsXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zTGVmdH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNSaWdodH08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L01vZGFsPlxuICApO1xufVxuXG5Db25maXJtYXRpb25Nb2RhbC5kaXNwbGF5TmFtZSA9IFwiQ29uZmlybWF0aW9uTW9kYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlybWF0aW9uTW9kYWw7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VIb3RrZXlzIH0gZnJvbSBcInJlYWN0LWhvdGtleXMtaG9va1wiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01vZGFsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNb2RhbFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBpc09wZW46IGJvb2xlYW47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBidXR0b24/OiBSZWFjdE5vZGU7XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub092ZXJsYXk/OiBib29sZWFuO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gTW9kYWwoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBpc09wZW4sXG4gIGJ1dHRvbixcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9PdmVybGF5ID0gZmFsc2UsXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcbiAgYmFzZVpJbmRleCA9IDEwMDksXG59OiBNb2RhbFByb3BzKSB7XG4gIHVzZUhvdGtleXMoXCJFc2NhcGVcIiwgb25DbG9zZSk7XG5cbiAgY29uc3QgaGFuZGxlT3ZlcmxheUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uQ2xvc2UoKTtcbiAgfSwgW29uQ2xvc2VdKTtcblxuICByZXR1cm4gKFxuICAgIGlzT3BlbiAmJiAoXG4gICAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm92ZXJsYXksXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9PdmVybGF5XTogbm9PdmVybGF5IH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPdmVybGF5Q2xpY2t9XG4gICAgICAgIC8+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAxIH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubW9kYWwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtidXR0b24gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDIgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtidXR0b259XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJwVTZJQjJyMExwQ0ZQWGdUdk9yMmdBPT1cIixcIm5vT3ZlcmxheVwiOlwiXzVTVVI5RmgtZkhUeTRYcjZtUUMrcEE9PVwiLFwibW9kYWxcIjpcIkxDQVQ4M211WHNBR3JQVUhRMXkraFE9PVwiLFwidHJhbnNwYXJlbnRcIjpcIldIVThRYnB6K0F2VC1ZcHVRZVVLLVE9PVwiLFwibm9TaGFkb3dcIjpcIkdpMVZUbWczR1BOeG5YOTEtbTAtNWc9PVwiLFwibW9kYWxCdXR0b25cIjpcImxmbmZIdSt4eWVFamNRYkFRd2pJVGc9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwianZLU2ktZkt1ZmNwSzllQldXRkNMZz09XCIsXCJtb2RhbEhlYWRlclwiOlwiY3gxUm9RZGdBYmVudlZYVThCN2ZTdz09XCIsXCJtb2RhbENvbnRlbnRcIjpcIlpENHYzSEUtQVlaWFYwSVRXREY3R2c9PVwiLFwibm9QYWRkaW5nXCI6XCJfMXpGRjh4cXlvNzdVeEcydjU0OUJlQT09XCIsXCJtb2RhbEJ1dHRvbnNDb250YWluZXJcIjpcIl80aFFoQ2U1VTdZQnlobmhPKy1HcWl3PT1cIixcIm1vZGFsQnV0dG9uc1wiOlwiSm9JTGJXNUZuWml4YUo3RVR2bzgrdz09XCJ9OyIsImV4cG9ydCB7XG4gIERyb3Bkb3duLFxuICBEcm9wZG93blByb3BzLFxuICBJdGVtIGFzIERyb3Bkb3duSXRlbSxcbiAgSXRlbUJvZHlSZW5kZXJlckZuIGFzIERyb3Bkb3duSXRlbUJvZHlSZW5kZXJlckZuLFxuICBSZW5kZXJDbGlja2FibGVGbiBhcyBEcm9wZG93blJlbmRlckNsaWNrYWJsZUZuLFxuICBSZW5kZXJEaXNwbGF5UHJvcHMgYXMgRHJvcGRvd25SZW5kZXJEaXNwbGF5UHJvcHMsXG59IGZyb20gXCIuL0Ryb3Bkb3duXCI7XG5leHBvcnQge1xuICBDbGlja2FibGUgYXMgRHJvcGRvd25DbGlja2FibGUsXG4gIENsaWNrYWJsZVByb3BzIGFzIERyb3Bkb3duQ2xpY2thYmxlUHJvcHNcbn0gZnJvbSBcIi4vQ2xpY2thYmxlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3RDaGlsZCwgUmVhY3RFbGVtZW50LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlT3V0c2lkZUNsaWNrIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5cbmltcG9ydCB7IENsaWNrYWJsZSB9IGZyb20gXCIuL0NsaWNrYWJsZVwiO1xuaW1wb3J0IHsgTWVudSwgTWVudUNvbnRhaW5lciwgTWVudUl0ZW0sIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi4vTWVudVwiO1xuXG5leHBvcnQgdHlwZSBJdGVtID0geyBpZDogbnVtYmVyIHwgc3RyaW5nOyBuYW1lOiBzdHJpbmcgfTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyRGlzcGxheVByb3BzPFQgZXh0ZW5kcyBJdGVtPiA9IFBpY2s8XG4gIERyb3Bkb3duUHJvcHM8VD4sXG4gIFwiZGlzcGxheVwiIHwgXCJzZWxlY3RlZEl0ZW1cIlxuPiAmIHsgaXNEaXNhYmxlZDogYm9vbGVhbjsgdG9nZ2xlSXNPcGVuOiAoKSA9PiB2b2lkIH07XG5cbmV4cG9ydCB0eXBlIFJlbmRlckNsaWNrYWJsZUZuPFQgZXh0ZW5kcyBJdGVtPiA9IChcbiAgcHJvcHM6IFJlbmRlckRpc3BsYXlQcm9wczxUPlxuKSA9PiBSZWFjdEVsZW1lbnQ7XG5cbmV4cG9ydCB0eXBlIEl0ZW1Cb2R5UmVuZGVyZXJGbjxUIGV4dGVuZHMgSXRlbT4gPSAoc3RhdGU6IHtcbiAgaXRlbTogVDtcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbn0pID0+IFJlYWN0Q2hpbGQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25Qcm9wczxUIGV4dGVuZHMgSXRlbT4ge1xuICBpdGVtQm9keVJlbmRlcmVyPzogSXRlbUJvZHlSZW5kZXJlckZuPFQ+O1xuICBpdGVtczogVFtdO1xuICBvblNlbGVjdDogKGl0ZW06IFQpID0+IHZvaWQ7XG4gIGRpc3BsYXk6IFJlYWN0Q2hpbGQ7XG4gIHJlbmRlckNsaWNrYWJsZT86IFJlbmRlckNsaWNrYWJsZUZuPFQ+O1xuICBzZWxlY3RlZEl0ZW06IFQgfCBudWxsO1xuICBwbGFjZW1lbnQ/OiBNZW51UGxhY2VtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcGRvd248VCBleHRlbmRzIEl0ZW0+KHtcbiAgaXRlbUJvZHlSZW5kZXJlcixcbiAgaXRlbXMsXG4gIG9uU2VsZWN0OiBoYW5kbGVTZWxlY3QsXG4gIGRpc3BsYXksXG4gIHJlbmRlckNsaWNrYWJsZSxcbiAgc2VsZWN0ZWRJdGVtLFxuICBwbGFjZW1lbnQgPSB7IHZlcnRpY2FsOiBcImJvdHRvbVwiLCBob3Jpem9udGFsOiBcImxlZnRcIiB9XG59OiBEcm9wZG93blByb3BzPFQ+KSB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiBzZXRJc09wZW4oZmFsc2UpKTtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoaXRlbTogVCkgPT4ge1xuICAgIGhhbmRsZVNlbGVjdChpdGVtKTtcbiAgICBzZXRJc09wZW4oZmFsc2UpO1xuICB9O1xuICBjb25zdCBpc0Rpc2FibGVkID0gIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgdG9nZ2xlSXNPcGVuID0gKCkgPT4gc2V0SXNPcGVuKCFpc09wZW4pO1xuXG4gIHJldHVybiAoXG4gICAgPE1lbnVDb250YWluZXJcbiAgICAgIGJ1dHRvbj17XG4gICAgICAgIHR5cGVvZiByZW5kZXJDbGlja2FibGUgPT09IFwiZnVuY3Rpb25cIiA/IChcbiAgICAgICAgICByZW5kZXJDbGlja2FibGUoe1xuICAgICAgICAgICAgZGlzcGxheSxcbiAgICAgICAgICAgIGlzRGlzYWJsZWQsXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW0sXG4gICAgICAgICAgICB0b2dnbGVJc09wZW4sXG4gICAgICAgICAgfSlcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Q2xpY2thYmxlXG4gICAgICAgICAgICBkaXNwbGF5PXtkaXNwbGF5fVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZUlzT3Blbn1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9XG4gICAgICBwbGFjZW1lbnQ9e3BsYWNlbWVudH1cbiAgICAgIHJlZj17cmVmfVxuICAgID5cbiAgICAgIDxNZW51IGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAge2l0ZW1zICYmXG4gICAgICAgICAgaXRlbXMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgICA8TWVudUl0ZW1cbiAgICAgICAgICAgICAgaXNBY3RpdmU9e2l0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWR9XG4gICAgICAgICAgICAgIGtleT17aXRlbS5pZH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ2xpY2soaXRlbSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtpdGVtQm9keVJlbmRlcmVyXG4gICAgICAgICAgICAgICAgPyBpdGVtQm9keVJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogaXRlbS5pZCA9PT0gc2VsZWN0ZWRJdGVtPy5pZCxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBpdGVtLm5hbWV9XG4gICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICkpfVxuICAgICAgPC9NZW51PlxuICAgIDwvTWVudUNvbnRhaW5lcj5cbiAgKTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbi5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgSWNvblByb3BzID0ge1xuICBhbHQ/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MSW1hZ2VFbGVtZW50PjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBzcmM6IHN0cmluZztcbiAgc2l6ZT86IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCIgfCBcInhsYXJnZVwiO1xufTtcblxuZnVuY3Rpb24gSWNvbih7XG4gIHNyYyxcbiAgYWx0LFxuICBjb250YWluZXJSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxufTogSWNvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGltZ1xuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmljb24sXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgeyBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQgfSxcbiAgICAgIF0pfVxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpY29uXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgLz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaWNvblwiOlwiWUEySUhRRDRvcHBPaW9aSUNId3p3dz09XCIsXCJzbWFsbFwiOlwicWR6czJFTW1CZGIwTXpOUzBpRGhNQT09XCIsXCJtZWRpdW1cIjpcIkk2ZUVHSUJLNTlPa2Rwd1VvdWFhdVE9PVwiLFwibGFyZ2VcIjpcIl8yYmk2SUVZaGRNYlBnUEpmd29QanVBPT1cIixcInhsYXJnZVwiOlwiY2trcjRaRk9WR3VDTjRFalBNcWVHQT09XCIsXCJpbnZlcnRlZFwiOlwiZW01ckw0bkFIMUl3ZjNNSGVJZVBtZz09XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ3MENwYXNqWXlMUi1pMlBOSW45RXNnPT1cIn07IiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE0IDVMNy41IDEyTDEgNScgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLWxpbmVjYXA9J3NxdWFyZScvJTNlICUzYy9zdmclM2VcIiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnUubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc09wZW4/OiBib29sZWFuO1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGZvb3Rlcj86IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIE1lbnUoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBjbGFzc05hbWUsXG4gIGlzT3BlbiA9IHRydWUsXG4gIGhlYWRlcixcbiAgZm9vdGVyLFxufTogTWVudVByb3BzKSB7XG4gIGlmICghaXNPcGVuKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMubWVudSxcbiAgICAgICAgICB7IFtzdHlsZXMub3Blbl06IGlzT3BlbiB9LFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgXSl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuc2Nyb2xsQ29udGFpbmVyfT5cbiAgICAgICAgICB7aGVhZGVyICYmIGlzT3BlbiAmJiA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT57aGVhZGVyfTwvaDM+fVxuICAgICAgICAgIDx1bD57aXNPcGVuICYmIGNoaWxkcmVufTwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7Zm9vdGVyICYmIGlzT3BlbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgIHN0eWxlcy5mb290ZXIsXG4gICAgICAgICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06ICFjaGlsZHJlbiB9LFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2Zvb3Rlcn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51XCI6XCJyU0Jmc0ZOampvb0pzREgtWCtZWGJ3PT1cIixcIm9wZW5cIjpcInZYN3ZnQTlabEY3VDlFUjlWSm9kYlE9PVwiLFwiZW50cmFuY2VcIjpcIkdwQjJMc2FkaHVHSlp2S29OT2RvekE9PVwiLFwiaGVhZGVyXCI6XCJvQVRsQkZnZXBaNWdBWkFyLUN4bkFBPT1cIixcImZvb3RlclwiOlwid0tlRTczellmYi03Y1JOLUY4T1kxZz09XCIsXCJub0JvcmRlclwiOlwiTEQ2TER2cy15bE1yUGdzbGo0eDNoZz09XCIsXCJzY3JvbGxDb250YWluZXJcIjpcIlQrYklwYWwrV0hVSC1oQTBHdzVyVmc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWFjdEVsZW1lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEZvcndhcmRlZFJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE1lbnVQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6IFwicmlnaHRcIiB8IFwibGVmdFwiO1xuICB2ZXJ0aWNhbDogXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG59O1xuXG50eXBlIE1lbnVDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYnV0dG9uPzogUmVhY3RFbGVtZW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59O1xuXG5mdW5jdGlvbiBNZW51Q29udGFpbmVyKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgYnV0dG9uLFxuICAgIGNsYXNzTmFtZSxcbiAgICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwibGVmdFwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiB9LFxuICB9OiBNZW51Q29udGFpbmVyUHJvcHMsXG4gIHJlZjogRm9yd2FyZGVkUmVmPEhUTUxEaXZFbGVtZW50PlxuKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAge2J1dHRvbn1cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMubWVudUNvbnRhaW5lcixcbiAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50Lmhvcml6b250YWxdLFxuICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnQudmVydGljYWxdLFxuICAgICAgICBdKX1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcndhcmRSZWYoTWVudUNvbnRhaW5lcik7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwicWN2RFNmRnQrdzBqYTJmcVBjMFM1dz09XCIsXCJtZW51Q29udGFpbmVyXCI6XCJMd3IxYTNiUC05NWFlenptYWNvSmZ3PT1cIixcInRvcFwiOlwiYkJIYnMrRldpNi16d1dNWkltRitOQT09XCIsXCJyaWdodFwiOlwiQjhNNDJOd29aOHBVVm01UjRKSnYxZz09XCIsXCJsZWZ0XCI6XCJwT0c3dFhmVEZrOHFxWHROQzBFLU93PT1cIixcImJvdHRvbVwiOlwidWN2TjBFRk1uczhiZlZ2c2k5ajl5UT09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUl0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTExJRWxlbWVudD4pID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBNZW51SXRlbSh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBpc0FjdGl2ZSA9IGZhbHNlLFxufTogTWVudUl0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51SXRlbSxcbiAgICAgICAgeyBbc3R5bGVzLmFjdGl2ZV06IGlzQWN0aXZlIH0sXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUl0ZW1cIjpcIm1KZDdkUlpOT3dZZThJOUNxRmx6cmc9PVwiLFwibm9QYWRkaW5nXCI6XCJ4Y2tET2RuUFBZS1RreW0yYXd0cmpBPT1cIixcImFjdGl2ZVwiOlwieCt5ckNxNUJ1K2pnWDdTUlVyOWZldz09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUxpbmtJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51TGlua0l0ZW1Qcm9wcyA9XG4gIHwge1xuICAgICAgYXM6IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBNZW51TGlua0l0ZW0oe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IE1lbnVMaW5rSXRlbVByb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIGRhdGEtdGVzdGlkPVwibWVudS1saW5rLWl0ZW1cIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51TGlua0l0ZW0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51TGlua0l0ZW07XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVMaW5rSXRlbVwiOlwib0VyOFpKWExuWnlESkJPUlp0SVY0dz09XCIsXCJub1BhZGRpbmdcIjpcIl8zVE5JSkFldEFTeXpiSStLbExUSEN3PT1cIixcImFjdGl2ZVwiOlwiZ2hhdUNUUFRCRUpBdUFvNjMyejVmUT09XCIsXCJtZW51SXRlbVwiOlwibjF4bjRFWXV4RXFPYzNmQ0VhbXozUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZUlucHV0IH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG5leHBvcnQgeyBGaWxlSW5wdXRTaXplIH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GaWxlSW5wdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRTaXplID0gU2l6ZTtcblxudHlwZSBQcm9wcyA9IHtcbiAgb25DaGFuZ2U6IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYWNjZXB0Pzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIHNpemU/OiBGaWxlSW5wdXRTaXplO1xufTtcblxuZnVuY3Rpb24gRmlsZUlucHV0KHtcbiAgY2hpbGRyZW4sXG4gIGFjY2VwdCxcbiAgb25DaGFuZ2UsXG4gIGlucHV0UmVmLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubGFiZWwsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmlucHV0fVxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGlkPVwiZmlsZVwiXG4gICAgICAgIGFjY2VwdD17YWNjZXB0fVxuICAgICAgICBtdWx0aXBsZT17bXVsdGlwbGV9XG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxlSW5wdXQ7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImlucHV0XCI6XCJlVXFhMzUrRW0yTGNoMjZOeGpidStRPT1cIixcImxhYmVsXCI6XCJueFcyMWg4VUkwTU50d28ya2NBZEl3PT1cIixcInNtYWxsXCI6XCJOZGExcEFjR0pjeURERVM1RVZKc293PT1cIixcImxhcmdlXCI6XCJ6cUxTM1lIWHRqbE1Cc0ZPenJ2RVpnPT1cIixcInhsYXJnZVwiOlwiVlpsNVd5QWt2MzAxLWhDQ3plNU1uUT09XCIsXCJpbnZlcnRlZFwiOlwidmxTYUpRSmh6dDZJTnZXaThOdFV3Zz09XCIsXCJyb3VuZGVkXCI6XCJiLXg1VHJ5U05HQ0Y5SFk4SjNIdEFBPT1cIixcIm5vU2hhZG93XCI6XCJfNXdsMTRKamYxeXhId0FMeG1FdzZNUT09XCIsXCJub0JvcmRlclwiOlwiZGxYV1FPbE5lK2FGa1ZiUHhETG00QT09XCIsXCJub1BhZGRpbmdcIjpcImlQeFVHLU9OMVhMT2tmVlB6dDdOWVE9PVwiLFwidHJhbnNwYXJlbnRcIjpcIkJQWEk5dTNoZ0F5ZEFjNUJ6emtDTmc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSk0zSlZYdDc3bkg5dXIrYUwrUllEZz09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiTVhhc2tmZld6MmstaHF0SFJ0MnZPUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvYXRpbmdQYW5lbCB9IGZyb20gXCIuL0Zsb2F0aW5nUGFuZWxcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFBsYWNlbWVudCA9IHtcbiAgaG9yaXpvbnRhbDpcbiAgICB8IFwicmlnaHRcIlxuICAgIHwgXCJyaWdodEVkZ2VcIlxuICAgIHwgXCJyaWdodE9uRWRnZVwiXG4gICAgfCBcImxlZnRcIlxuICAgIHwgXCJsZWZ0RWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJsZWZ0T25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHZlcnRpY2FsOlxuICAgIHwgXCJ0b3BcIlxuICAgIHwgXCJ0b3BFZGdlXCJcbiAgICB8IFwidG9wT25FZGdlXCJcbiAgICB8IFwiYm90dG9tXCJcbiAgICB8IFwiYm90dG9tRWRnZVwiXG4gICAgfCBcImJvdHRvbU9uRWRnZVwiXG4gICAgfCBcImNlbnRlclwiO1xuICBwYXJlbnQ6IFwidmlld3BvcnRcIiB8IFwiY29udGFpbmVyXCI7XG59O1xuXG50eXBlIEZsb2F0aW5nUGFuZWxQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgbGF5b3V0PzogXCJjb2x1bW5cIiB8IFwicm93XCI7XG4gIHBsYWNlbWVudD86IFBsYWNlbWVudDtcbn07XG5cbmZ1bmN0aW9uIEZsb2F0aW5nUGFuZWwoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbHVtblwiLFxuICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwiY2VudGVyXCIsIHZlcnRpY2FsOiBcImJvdHRvbVwiLCBwYXJlbnQ6IFwidmlld3BvcnRcIiB9LFxufTogRmxvYXRpbmdQYW5lbFByb3BzKSB7XG4gIGNvbnN0IGhvcml6b250YWxQbGFjZW1lbnQgPVxuICAgIHBsYWNlbWVudC5ob3Jpem9udGFsID09PSBcImNlbnRlclwiXG4gICAgICA/IFwiaG9yaXpvbnRhbENlbnRlclwiXG4gICAgICA6IHBsYWNlbWVudC5ob3Jpem9udGFsO1xuXG4gIGNvbnN0IHZlcnRpY2FsUGxhY2VtZW50ID1cbiAgICBwbGFjZW1lbnQudmVydGljYWwgPT09IFwiY2VudGVyXCIgPyBcInZlcnRpY2FsQ2VudGVyXCIgOiBwbGFjZW1lbnQudmVydGljYWw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiZmxvYXRpbmctcGFuZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tob3Jpem9udGFsUGxhY2VtZW50XSxcbiAgICAgICAgc3R5bGVzW3ZlcnRpY2FsUGxhY2VtZW50XSxcbiAgICAgICAgc3R5bGVzW2xheW91dF0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogcGxhY2VtZW50LnBhcmVudCAhPT0gXCJjb250YWluZXJcIixcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxvYXRpbmdQYW5lbDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJrVVRDcTdzTzVjUUhybjIwUEpVQ213PT1cIixcInJvd1wiOlwidGRuYzFiREhEbUdiZ0FjN1NKcjY5UT09XCIsXCJjb2x1bW5cIjpcIk1tdDA3Nk42QXh5SDROUkRwQ083V0E9PVwiLFwiZml4ZWRcIjpcIl85MmViUXZKNXhOS0pTOHpha0s3UzJBPT1cIixcInBsYWluXCI6XCJ5K2lkRHhaKzVNcHA3T0kzR1BMQUVnPT1cIixcInRyYW5zcGFyZW50XCI6XCJDRHFvaUswZ0NUSnBuSmdWb1lnSkRRPT1cIixcInRvcFwiOlwiR1BzSGxOUERiRDZLZE5RRUdqOHpRUT09XCIsXCJ0b3BFZGdlXCI6XCJ4Umcwb0FOcnhzeFhOQnlJcG5OSnZ3PT1cIixcInRvcE9uRWRnZVwiOlwiUUF5ZUZGR1JvbnhYUzlGZ0oyZCtXdz09XCIsXCJyaWdodFwiOlwiSThFRENKem8wWndUdGdiVlRNbXpkZz09XCIsXCJyaWdodEVkZ2VcIjpcIlcyQWhtM3h1YTJ2ZUMzSUNUMktRTkE9PVwiLFwicmlnaHRPbkVkZ2VcIjpcInlqQkNRWUVBOG1XaUk5OENGWDVMc3c9PVwiLFwiYm90dG9tXCI6XCJXSnh6WFFMLTVOUHZEZ25lVmdrVndBPT1cIixcImJvdHRvbUVkZ2VcIjpcIkdWSnMtLXBMRGpXdnU5Qy15MzR5Y3c9PVwiLFwiYm90dG9tT25FZGdlXCI6XCJERFZkLVBwbHhuTHBTTEZsR3RGaG53PT1cIixcImxlZnRcIjpcIm9VVE12akwwSHhHZW5VN2tKZFN4SEE9PVwiLFwibGVmdEVkZ2VcIjpcIkJpTnNBa01adWkrNWktS3pZeHEwY1E9PVwiLFwibGVmdE9uRWRnZVwiOlwiXzF2OGltSDBNVGotck1aMHJDLWloUWc9PVwiLFwiaG9yaXpvbnRhbENlbnRlclwiOlwiRDRwNUFhMDYzVG5tN20wdWFHaExrdz09XCIsXCJ2ZXJ0aWNhbENlbnRlclwiOlwiXzJkZUctWTJBM3p3NmtGK1dCbkVtanc9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b24gfSBmcm9tIFwiLi9JY29uQnV0dG9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgSWNvbkJ1dHRvblByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBzcmM6IHN0cmluZztcbiAgYWx0OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiPjtcbn07XG5cbmZ1bmN0aW9uIEljb25CdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIGNvbnRhaW5lclJlZixcbiAgY2hpbGRyZW4sXG4gIHNyYyxcbiAgYWx0LFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcImJ1dHRvblwiLFxufTogSWNvbkJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b247XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiQnZRdHNVQWEtZlFQbVhidlZTVkNOUT09XCIsXCJzbWFsbFwiOlwiXzhaZjRMemNlaUlvZXI3UElWUjhCWUE9PVwiLFwibWVkaXVtXCI6XCJfN1BGMmRuSmdaeElFK3RTMzN4SzRLQT09XCIsXCJsYXJnZVwiOlwiRWJPWXZHS1hpQWFib2hpNE95MUNNdz09XCIsXCJ4bGFyZ2VcIjpcInVPZlo5TGlHem5hQkdJdXg0MHBGR2c9PVwiLFwicm91bmRlZFwiOlwidkFqMHhtalhKVGZEYldJQ1ZLQm8yZz09XCIsXCJ0b3BPZmZzZXRcIjpcIl84WVNzLWtoSUR6SWVmUlJoNXpIMytRPT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJxNGpJbDJYRk9idnNETS00UXh2dHV3PT1cIixcImJvdHRvbU9mZnNldFwiOlwiXzgyS2JFY0VaemNSNVZxSGx4ODYyUFE9PVwiLFwibGVmdE9mZnNldFwiOlwieG5jMStPREZtQlBpaWY1Sm9xVG5kQT09XCIsXCJpbnZlcnRlZFwiOlwiYmhWVVRka1FsdGN0bXJaZTBUNzJrdz09XCIsXCJub1NoYWRvd1wiOlwibnNnaDJjNmNIdHp4YVJyTGt2NkZ6dz09XCIsXCJub0JvcmRlclwiOlwiVnp5NkM0ZGp0cGZMMnBWNW9ZY09Qdz09XCIsXCJ0cmFuc3BhcmVudFwiOlwiRnZkUFMtKzF0bHNUWjFjaUVsc3Z4UT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9JY29uQnV0dG9uTGlua1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIjtcblxudHlwZSBJY29uQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcbiAgICAgIHNyYzogc3RyaW5nO1xuICAgICAgYWx0OiBzdHJpbmc7XG4gICAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc2l6ZT86IFNpemU7XG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEljb25CdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY29udGFpbmVyUmVmLFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzcmMsXG4gIGFsdCxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IEljb25CdXR0b25MaW5rUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImljb24tYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uTGluaztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJtVWhDN1hCWWVoTmwxZitONWhSTzRBPT1cIixcInNtYWxsXCI6XCJzTVMxRmdNM3d3TGcrTGd1dmNYRHdnPT1cIixcIm1lZGl1bVwiOlwiXzFqVTg1bUVQNWlhV3luY0xMYjhsU0E9PVwiLFwibGFyZ2VcIjpcImNJZ2dnUzJmNVBhQkNJVGZ0czByQWc9PVwiLFwieGxhcmdlXCI6XCJUMnphb213TFlIUXgtWUYtdkR0d0h3PT1cIixcInJvdW5kZWRcIjpcIkZNQWg2Z3NGUnJVZkYtQytoeEZKU0E9PVwiLFwidG9wT2Zmc2V0XCI6XCJ5WXZySW1RWnlwS3RKMGNiK2hFZFdRPT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJFaUxRVWUrQkQ4dWJ4ZGorSlF1SHp3PT1cIixcImJvdHRvbU9mZnNldFwiOlwiXzBxSE5JUnNtK01SOXJ5WHBKbUVOUVE9PVwiLFwibGVmdE9mZnNldFwiOlwiTG1JTWx4dnFrUmppSWdZTEh4YVpCZz09XCIsXCJpbnZlcnRlZFwiOlwiQmMrUmg2Qjk3Kzc0amtlTWRDdHJ6Zz09XCIsXCJub1NoYWRvd1wiOlwiaUdHQ0dpZjJ5U2NNSVNEay0ybWtGUT09XCIsXCJub0JvcmRlclwiOlwiZG5qbjFvRnROVkZOMmZSV21La1ozQT09XCIsXCJ0cmFuc3BhcmVudFwiOlwiWndpRjB1NktUSkRnd1JDNFdTTDNyQT09XCIsXCJkaXNhYmxlZFwiOlwibWNaTEp6VDdWczdibFE5Unh3N1JVdz09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSW1hZ2UsIEltYWdlUHJvcHMgfSBmcm9tIFwiLi9JbWFnZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ltYWdlLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgSW1hZ2VQcm9wcyA9IHtcbiAgYWx0Pzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgbGF5b3V0PzogXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcbiAgc3JjOiBzdHJpbmc7XG4gIHNyY1dpZHRoPzogbnVtYmVyO1xuICBzcmNIZWlnaHQ/OiBudW1iZXI7XG4gIGRlY29kaW5nPzogXCJhc3luY1wiIHwgXCJzeW5jXCIgfCBcImF1dG9cIjtcbiAgbG9hZGluZz86IFwiZWFnZXJcIiB8IFwibGF6eVwiO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG59O1xuXG5mdW5jdGlvbiBJbWFnZUNvbXBvbmVudCh7XG4gIHNyYyxcbiAgYWx0LFxuICBzcmNXaWR0aCxcbiAgc3JjSGVpZ2h0LFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbiAgZGVjb2RpbmcgPSBcImF1dG9cIixcbiAgbG9hZGluZyA9IFwiZWFnZXJcIixcbiAgc3R5bGUsXG59OiBJbWFnZVByb3BzKSB7XG4gIGNvbnN0IGltYWdlRWxlbWVudCA9IChcbiAgICA8aW1nXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaW1hZ2UsIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImltYWdlXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgICB3aWR0aD17c3JjV2lkdGh9XG4gICAgICBoZWlnaHQ9e3NyY0hlaWdodH1cbiAgICAgIGRlY29kaW5nPXtkZWNvZGluZ31cbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgLz5cbiAgKTtcblxuICByZXR1cm4gY2hpbGRyZW4gPyAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxuICAgID5cbiAgICAgIHtpbWFnZUVsZW1lbnR9XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIGltYWdlRWxlbWVudFxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZUNvbXBvbmVudDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJfOWdRU1ItK2dxbzVyRHZXUG1Rb0FlUT09XCIsXCJoYXNPdmVybGF5XCI6XCJpaTMrNksrRlc0WWplUUZtLUlOM3NBPT1cIixcIm92ZXJsYXlcIjpcIl8wMEV4TmMzS3crSE9mVENGYTM0R0l3PT1cIixcImltYWdlXCI6XCJyd0Q1ckhjWkZSTmE0ZEhvNmozSnlRPT1cIixcImNvdmVyXCI6XCJfNkFhTjFUNlNZNkVlaitGYVF0YTQyZz09XCIsXCJjb250YWluXCI6XCJFUURrUDBGNXp6Sml0Rjh1TzZIK21BPT1cIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkdCS1BrYzhyc3lqVVZ1Q3AxT2xCb1E9PVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIl81U3p3U0orNlo0Ui1ZYTExZ3dMclNRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0VmlldyB9IGZyb20gXCIuL0xpc3RWaWV3XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3SXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3SXRlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0xpbmtJdGVtIH0gZnJvbSBcIi4vTGlzdFZpZXdMaW5rSXRlbVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXcubW9kdWxlLmNzc1wiO1xuXG50eXBlIExpc3RWaWV3UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaGVhZGVyPzogeyB0ZXh0OiBzdHJpbmc7IGlkOiBzdHJpbmcgfTtcbiAgaGVhZGVyQWN0aW9ucz86IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3KHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGhlYWRlckFjdGlvbnMsXG59OiBMaXN0Vmlld1Byb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgeyhoZWFkZXIgfHwgaGVhZGVyQWN0aW9ucykgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+XG4gICAgICAgICAge2hlYWRlciAmJiAoXG4gICAgICAgICAgICA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyTGFiZWx9IGlkPXtoZWFkZXIuaWR9PlxuICAgICAgICAgICAgICB7aGVhZGVyLnRleHR9XG4gICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hlYWRlckFjdGlvbnN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDx1bCBhcmlhLWxhYmVsbGVkYnk9e2hlYWRlcj8uaWR9IGNsYXNzTmFtZT17c3R5bGVzLmxpc3R9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0VmlldztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJsSnpkUDBtbmZwZ2xGU1l0S0tZekp3PT1cIixcImhlYWRlclwiOlwiXzgydkNRN3hyME5rWTRVbHlTUGtwa3c9PVwiLFwiaGVhZGVyTGFiZWxcIjpcInVuV2VQZElLbjRYYXdSdUw3Q1BEMGc9PVwiLFwibGlzdFwiOlwiXzVCWCtaWi1BYVF1dGN6YkRTMmU1LXc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMaXN0Vmlld0l0ZW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0l0ZW0oe1xuICBjaGlsZHJlbixcbiAgYWN0aXZlID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBMaXN0Vmlld0l0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0l0ZW07XG4iLCJpbXBvcnQgUmVhY3QsIHsgRWxlbWVudFR5cGUsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBCdXR0b25MaW5rIH0gZnJvbSBcIi4uL0J1dHRvbkxpbmtcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBMaXN0Vmlld0xpbmtJdGVtUHJvcHMgPVxuICB8IHtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgYWN0aXZlOiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ6IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc6IGJvb2xlYW47XG4gICAgICBhbGlnbjogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgICAgc2l6ZTogU2l6ZTtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0xpbmtJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGFzOiBDb21wb25lbnQsXG4gIGFjdGl2ZSA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IExpc3RWaWV3TGlua0l0ZW1Qcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cbiAgICAgIDxCdXR0b25MaW5rXG4gICAgICAgIGFzPXtDb21wb25lbnR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQnV0dG9uTGluaz5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0xpbmtJdGVtO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPdmVybGF5IH0gZnJvbSBcIi4vT3ZlcmxheVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL092ZXJsYXkubW9kdWxlLmNzc1wiO1xuXG50eXBlIE92ZXJsYXlQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBpc0ZpeGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBPdmVybGF5KHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgaXNGaXhlZCA9IGZhbHNlLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBPdmVybGF5UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwib3ZlcmxheVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm92ZXJsYXksXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IGlzRml4ZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPdmVybGF5O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJFSUI5LWw1OGdDM1p2dFc4dnRVQUxBPT1cIixcInRyYW5zcGFyZW50XCI6XCJDTTEtbjNzRzhZTmQ3M3FKVlhNMjJnPT1cIixcImZpeGVkXCI6XCJvTzFpVE5sUGpkYTFmanJZZXlMdVVBPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0SW5wdXQgfSBmcm9tIFwiLi9UZXh0SW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UZXh0SW5wdXQubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSwgVGV4dElucHV0VHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIFRleHRJbnB1dFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgb25CbHVyPzogKCkgPT4gdm9pZDtcbiAgb25LZXlEb3duPzogKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBhdHRlcm4/OiBzdHJpbmc7XG4gIHR5cGU/OiBUZXh0SW5wdXRUeXBlO1xuICBzaXplPzogU2l6ZTtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50Pjtcbn07XG5cbmZ1bmN0aW9uIFRleHRJbnB1dCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgb25CbHVyLFxuICBvbktleURvd24sXG4gIHBsYWNlaG9sZGVyLFxuICB2YWx1ZSxcbiAgbmFtZSxcbiAgcGF0dGVybixcbiAgaW5wdXRSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlID0gXCJ0ZXh0XCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxufTogVGV4dElucHV0UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gKFxuICAgIDxpbnB1dFxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dFwiXG4gICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnRleHRJbnB1dCwgc3R5bGVzW3NpemVdLCB7W3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyfV0pfVxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgICBwYXR0ZXJuPXtwYXR0ZXJufVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgbmFtZT17bmFtZX1cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAvPlxuICApO1xuICBpZiAobGFiZWwpIHtcbiAgICByZXR1cm4gPExhYmVsIHZhbHVlPXtsYWJlbH0+e2lucHV0RWxlbWVudH08L0xhYmVsPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gPD57aW5wdXRFbGVtZW50fTwvPjtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0ZXh0SW5wdXRcIjpcImg2UFlKQXp5dFZPazlCZUs1WjAra2c9PVwiLFwic21hbGxcIjpcIlVYbi1CQ1ZnODF5TWQ4Rm9VZnhLU0E9PVwiLFwibWVkaXVtXCI6XCJfNGFpUDZneE5IaHJXYmFjNGsxZ3JVdz09XCIsXCJsYXJnZVwiOlwiTWxuUFhZT1V5UTdoZ0k3c3cxbzB4QT09XCIsXCJ4bGFyZ2VcIjpcIkhHQnVLSmE5WGp4Qjh1VmhLb3AwM0E9PVwiLFwibm9Cb3JkZXJcIjpcInNQblNDR1VOWlhyb0VsU1FSMTkzR1E9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0IH0gZnJvbSBcIi4vVG9hc3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3RDb250YWluZXIgfSBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lclwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3QubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gVG9hc3QoeyBjaGlsZHJlbiwgY29udGFpbmVyUmVmLCBvbkNsaWNrID0gKCkgPT4ge30gfTogVG9hc3RQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudG9hc3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdFwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RcIjpcInZXYTItMW1PRlUraVYxNGpxN1FQc1E9PVwiLFwiZW50cmFuY2VcIjpcImZUc1dzS3JBS2x3VCtHT0U0d0F5U1E9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3RDb250YWluZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0Q29udGFpbmVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcbmZ1bmN0aW9uIFRvYXN0Q29udGFpbmVyKHsgY2hpbGRyZW4sIGJhc2VaSW5kZXggfTogVG9hc3RDb250YWluZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50b2FzdENvbnRhaW5lcl0pfVxuICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0LWNvbnRhaW5lclwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdENvbnRhaW5lcjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RDb250YWluZXJcIjpcIl8yLVh1MnNaTXZOOXRnRHMraXlMYzlRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBWaWRlbywgVmlkZW9Qcm9wcyB9IGZyb20gXCIuL1ZpZGVvXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9WaWRlby5tb2R1bGUuY3NzXCI7XG5cbi8qKlxuICogVGhlcmUgaXMgYSBrbm93biBpc3N1ZSBpbiBSZWFjdCBpbiByZWdhcmRzIHRvIHRoZSAnbXV0ZWQnIHByb3BlcnR5IHdoaWNoIGNhdXNlcyB0aGUgd2FybmluZzpcbiAqIFwiV2FybmluZzogdW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuXCJcbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEwMzg5XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY1NDRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvcmVhY3QtdGVzdGluZy1saWJyYXJ5L2lzc3Vlcy80NzBcbiAqL1xuXG50eXBlIExheW91dCA9IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XG5cbmV4cG9ydCB0eXBlIFZpZGVvUHJvcHMgPSB7XG4gIHNyYzogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGxheW91dD86IExheW91dDtcbiAgYXV0b1BsYXk/OiBib29sZWFuO1xuICBsb29wPzogYm9vbGVhbjtcbiAgbXV0ZWQ/OiBib29sZWFuO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgcG9zdGVyPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVmlkZW8oe1xuICBzcmMsXG4gIHR5cGUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIHBvc3RlcixcbiAgbXV0ZWQgPSB0cnVlLFxuICBsb29wID0gdHJ1ZSxcbiAgYXV0b1BsYXkgPSB0cnVlLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbn06IFZpZGVvUHJvcHMpIHtcbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICA8dmlkZW9cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICAgIGxvb3A9e2xvb3B9XG4gICAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cbiAgICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICAgIHBsYXlzSW5saW5lXG4gICAgICA+XG4gICAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICAgIDwvdmlkZW8+XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIDx2aWRlb1xuICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICBsb29wPXtsb29wfVxuICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxuICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICBwbGF5c0lubGluZVxuICAgID5cbiAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICA8L3ZpZGVvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaWRlbztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ1bFdFLUVwcjg1RjBtVXQ3TzFnVVRRPT1cIixcImhhc092ZXJsYXlcIjpcInpLN3UxbmtqYzh4N1lEQWZZUUNUcHc9PVwiLFwidmlkZW9cIjpcImZSNEQ1NkxmZHVvQlctZmltZmJUMHc9PVwiLFwiY292ZXJcIjpcIlZYUXM0UFVuV0d5dzU2ZzYwWnRmV2c9PVwiLFwiY29udGFpblwiOlwiZ3hmbFV6TzRycUNCQUd1enNZRUlldz09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJJLTYzS200TlkxVzRRZ01oZmdVNU1nPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJ2Tk5oSmxnSVRNK29uZjd6ZHphdWZnPT1cIixcIm92ZXJsYXlcIjpcInd4dWw3VVVabG1hckY4NlNHcmQtdHc9PVwifTsiLCJleHBvcnQgeyBOdW1wYWQgfSBmcm9tIFwiLi9OdW1wYWRcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vTnVtcGFkLm1vZHVsZS5jc3NcIjtcblxuaW1wb3J0IGJhY2tzcGFjZUljb24gZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnXCI7XG5cbnR5cGUgRGlnaXQgPSAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgNyB8IDggfCA5O1xuXG5jb25zdCBhcHBlbmREaWdpdCA9IChudW1iZXI6IG51bWJlciwgZGlnaXQ6IERpZ2l0KSA9PiB7XG4gIHJldHVybiBudW1iZXIgKiAxMCArIGRpZ2l0O1xufTtcblxuY29uc3QgcG9wRGlnaXQgPSAobnVtYmVyOiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyIC8gMTApO1xufTtcblxuY29uc3QgZXZlbnREaWdpdEtleXMgPSBbXCIwXCIsIFwiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCJdO1xuXG5leHBvcnQgaW50ZXJmYWNlIE51bXBhZFByb3BzIHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25DaGFuZ2U6IChuZXdOdW1iZXI6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IE51bXBhZCA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTERpdkVsZW1lbnQsIE51bXBhZFByb3BzPihcbiAgKHsgbnVtYmVyLCBvbkNoYW5nZSwgZGlzYWJsZWQgPSBmYWxzZSB9LCByZWYpID0+IHsgICAgXG4gICAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSBcIkJhY2tzcGFjZVwiKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgb25DaGFuZ2UocG9wRGlnaXQobnVtYmVyKSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50RGlnaXRLZXlzLmluY2x1ZGVzKGUua2V5KSkge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGRpZ2l0ID0gcGFyc2VJbnQoZS5rZXksIDEwKSBhcyBEaWdpdDtcbiAgICAgICAgb25DaGFuZ2UoYXBwZW5kRGlnaXQobnVtYmVyLCBkaWdpdCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVFbWl0TnVtYmVySGFuZGxlciA9IChuZXdOdW1iZXI6IG51bWJlcikgPT5cbiAgICAgIChlOiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgb25DaGFuZ2UobmV3TnVtYmVyKTtcbiAgICAgIH07XG5cbiAgICBjb25zdCBOdW1wYWRLZXlzID0gQXJyYXkoMTApXG4gICAgICAuZmlsbCgwKVxuICAgICAgLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbnVtcGFkVmFsdWUgPSAoKGluZGV4ICsgMSkgJSAxMCkgYXMgRGlnaXQ7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICBub1NoYWRvd1xuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17Y3JlYXRlRW1pdE51bWJlckhhbmRsZXIoYXBwZW5kRGlnaXQobnVtYmVyLCBudW1wYWRWYWx1ZSkpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtudW1wYWRWYWx1ZX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MubnVtcGFkfSByZWY9e3JlZn0gdGFiSW5kZXg9ey0xfSBvbktleURvd249e2hhbmRsZUtleURvd259IGRhdGEtdGVzdGlkPVwibnVtcGFkXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MubnVtYmVyc30+XG4gICAgICAgICAge051bXBhZEtleXN9XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgIG5vU2hhZG93XG4gICAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17Y3JlYXRlRW1pdE51bWJlckhhbmRsZXIocG9wRGlnaXQobnVtYmVyKSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gYWx0PVwiQmFja3NwYWNlXCIgc3JjPXtiYWNrc3BhY2VJY29ufSAvPlxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbik7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm51bXBhZFwiOlwiUGVPKzJwQklMbUdodVhmK21RUEpDZz09XCIsXCJudW1iZXJzXCI6XCJfMytZOERkTzR2QkpKdE9PcVJCaHRxZz09XCJ9OyIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nNjknIGhlaWdodD0nMjcnIHZpZXdCb3g9JzAgMCA2OSAyNycgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNC4xMzMzIDI2TDEzLjc4ODYgMjYuMzYyMkMxMy44ODE2IDI2LjQ1MDcgMTQuMDA1IDI2LjUgMTQuMTMzMyAyNi41VjI2Wk0xIDEzLjVMMC42NTUyODcgMTMuMTM3OEMwLjU1NjEyNyAxMy4yMzIyIDAuNSAxMy4zNjMxIDAuNSAxMy41QzAuNSAxMy42MzY5IDAuNTU2MTI3IDEzLjc2NzggMC42NTUyODcgMTMuODYyMkwxIDEzLjVaTTE0LjEzMzMgMVYwLjVDMTQuMDA1IDAuNSAxMy44ODE2IDAuNTQ5MzQ1IDEzLjc4ODYgMC42Mzc4MjJMMTQuMTMzMyAxWk02Ny41IDJWMjVINjguNVYySDY3LjVaTTYzLjQ2NjcgMjUuNUgxNC4xMzMzVjI2LjVINjMuNDY2N1YyNS41Wk0xNC40NzggMjUuNjM3OEwxLjM0NDcxIDEzLjEzNzhMMC42NTUyODcgMTMuODYyMkwxMy43ODg2IDI2LjM2MjJMMTQuNDc4IDI1LjYzNzhaTTEuMzQ0NzEgMTMuODYyMkwxNC40NzggMS4zNjIxOEwxMy43ODg2IDAuNjM3ODIyTDAuNjU1Mjg3IDEzLjEzNzhMMS4zNDQ3MSAxMy44NjIyWk0xNC4xMzMzIDEuNUg2My40NjY3VjAuNUgxNC4xMzMzVjEuNVpNNjcgMjUuNUg2My40NjY3VjI2LjVINjdWMjUuNVpNNjcgMC41SDYzLjQ2NjdWMS41SDY3VjAuNVpNNjcuNSAyNUM2Ny41IDI1LjI3NjEgNjcuMjc2MSAyNS41IDY3IDI1LjVWMjYuNUM2Ny44Mjg0IDI2LjUgNjguNSAyNS44Mjg0IDY4LjUgMjVINjcuNVpNNjguNSAyQzY4LjUgMS4xNzE1NyA2Ny44Mjg0IDAuNSA2NyAwLjVWMS41QzY3LjI3NjEgMS41IDY3LjUgMS43MjM4NiA2Ny41IDJINjguNVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzY3BhdGggZD0nTTMyLjY0NjQgNi4zNTM1NUw0Ni42NDY0IDIwLjM1MzZMNDcuMzUzNiAxOS42NDY0TDMzLjM1MzYgNS42NDY0NUwzMi42NDY0IDYuMzUzNTVaTTQ2LjY0NjQgNS42NDY0NUwzMi42NDY0IDE5LjY0NjRMMzMuMzUzNiAyMC4zNTM2TDQ3LjM1MzYgNi4zNTM1NUw0Ni42NDY0IDUuNjQ2NDVaJyBmaWxsPSclMjMyNjI2MjYnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xudmFyIG9wdGlvbnMgPSB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VPdXRzaWRlQ2xpY2soY2FsbGJhY2spIHtcbiAgICB2YXIgcmVmID0gdXNlUmVmKCk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGhhbmRsZUNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIXJlZi5jdXJyZW50IHx8IHJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgfSwgW2NhbGxiYWNrXSk7XG4gICAgcmV0dXJuIHJlZjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZU91dHNpZGVDbGljay5qcy5tYXAiLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XHJcbiAgICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcclxuICAgIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XHJcbn1cclxuIiwiaW1wb3J0IHsgX19hd2FpdGVyLCBfX2dlbmVyYXRvciwgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VQcm9taXNlKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKHtcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgIGlzU2V0dGxlZDogZmFsc2UsXG4gICAgfSksIDIpLCByZXN1bHQgPSBfYVswXSwgc2V0UmVzdWx0ID0gX2FbMV07XG4gICAgLy8gV2UgbmVlZCB0byBrZWVwIHRyYWNrIGlmIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gdW5tb3VudGVkXG4gICAgLy8gd2hpbGUgdGhlIHByb21pc2Ugd2FzIHN0aWxsIHBlbmRpbmcgdG8gYXZvaWQgc2V0dGluZyBzdGF0ZVxuICAgIC8vIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXG4gICAgdmFyIGhhc1VubW91bnRlZCA9IHVzZVJlZihmYWxzZSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGhhc1VubW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIGRpc3BhdGNoID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHByb21pc2UpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEsIGVycm9yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMCwgMiwgLCAzXSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBwcm9taXNlXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbm1vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZGF0YV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBlcnJvcl8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVW5tb3VudGVkLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcl8xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgM107XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyB9LCBbaGFzVW5tb3VudGVkXSk7XG4gICAgcmV0dXJuIFtyZXN1bHQsIGRpc3BhdGNoXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVByb21pc2UuanMubWFwIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCBjcmVhdGVFbGVtZW50LCB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VEZWJ1Z1ZhbHVlIH0gZnJvbSAncmVhY3QnO1xuXG4vKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IH07XG4vLyBVc2luZyBub29wKCkgYXMgdGhlIHVuZGVmaW5lZCB2YWx1ZSBhcyB1bmRlZmluZWQgY2FuIHBvc3NpYmx5IGJlIHJlcGxhY2VkXG4vLyBieSBzb21ldGhpbmcgZWxzZS4gIFByZXR0aWVyIGlnbm9yZSBhbmQgZXh0cmEgcGFyZW50aGVzZXMgYXJlIG5lY2Vzc2FyeSBoZXJlXG4vLyB0byBlbnN1cmUgdGhhdCB0c2MgZG9lc24ndCByZW1vdmUgdGhlIF9fTk9JTkxJTkVfXyBjb21tZW50LlxuLy8gcHJldHRpZXItaWdub3JlXG52YXIgVU5ERUZJTkVEID0gKCAvKiNfX05PSU5MSU5FX18qL25vb3AoKSk7XG52YXIgT0JKRUNUID0gT2JqZWN0O1xudmFyIGlzVW5kZWZpbmVkID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgPT09IFVOREVGSU5FRDsgfTtcbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHR5cGVvZiB2ID09ICdmdW5jdGlvbic7IH07XG52YXIgbWVyZ2VPYmplY3RzID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIE9CSkVDVC5hc3NpZ24oe30sIGEsIGIpOyB9O1xudmFyIFNUUl9VTkRFRklORUQgPSAndW5kZWZpbmVkJztcbi8vIE5PVEU6IFVzZSBmdW5jdGlvbiB0byBndWFyYW50ZWUgaXQncyByZS1ldmFsdWF0ZWQgYmV0d2VlbiBqc2RvbSBhbmQgbm9kZSBydW50aW1lIGZvciB0ZXN0cy5cbnZhciBoYXNXaW5kb3cgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlb2Ygd2luZG93ICE9IFNUUl9VTkRFRklORUQ7IH07XG52YXIgaGFzRG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlb2YgZG9jdW1lbnQgIT0gU1RSX1VOREVGSU5FRDsgfTtcbnZhciBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGhhc1dpbmRvdygpICYmIHR5cGVvZiB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddICE9IFNUUl9VTkRFRklORUQ7XG59O1xuXG4vLyB1c2UgV2Vha01hcCB0byBzdG9yZSB0aGUgb2JqZWN0LT5rZXkgbWFwcGluZ1xuLy8gc28gdGhlIG9iamVjdHMgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkLlxuLy8gV2Vha01hcCB1c2VzIGEgaGFzaHRhYmxlIHVuZGVyIHRoZSBob29kLCBzbyB0aGUgbG9va3VwXG4vLyBjb21wbGV4aXR5IGlzIGFsbW9zdCBPKDEpLlxudmFyIHRhYmxlID0gbmV3IFdlYWtNYXAoKTtcbi8vIGNvdW50ZXIgb2YgdGhlIGtleVxudmFyIGNvdW50ZXIgPSAwO1xuLy8gQSBzdGFibGUgaGFzaCBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1cHBvcnRzOlxuLy8gLSBGYXN0IGFuZCBlbnN1cmVzIHVuaXF1ZSBoYXNoIHByb3BlcnRpZXNcbi8vIC0gSGFuZGxlcyB1bnNlcmlhbGl6YWJsZSB2YWx1ZXNcbi8vIC0gSGFuZGxlcyBvYmplY3Qga2V5IG9yZGVyaW5nXG4vLyAtIEdlbmVyYXRlcyBzaG9ydCByZXN1bHRzXG4vL1xuLy8gVGhpcyBpcyBub3QgYSBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbmQgdGhlIHJlc3VsdCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZVxuLy8gcGFyc2libGUuXG52YXIgc3RhYmxlSGFzaCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBhcmc7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJnICYmIGFyZy5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgaXNEYXRlID0gY29uc3RydWN0b3IgPT0gRGF0ZTtcbiAgICB2YXIgcmVzdWx0O1xuICAgIHZhciBpbmRleDtcbiAgICBpZiAoT0JKRUNUKGFyZykgPT09IGFyZyAmJiAhaXNEYXRlICYmIGNvbnN0cnVjdG9yICE9IFJlZ0V4cCkge1xuICAgICAgICAvLyBPYmplY3QvZnVuY3Rpb24sIG5vdCBudWxsL2RhdGUvcmVnZXhwLiBVc2UgV2Vha01hcCB0byBzdG9yZSB0aGUgaWQgZmlyc3QuXG4gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBoYXNoZWQsIGRpcmVjdGx5IHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAgICByZXN1bHQgPSB0YWJsZS5nZXQoYXJnKTtcbiAgICAgICAgaWYgKHJlc3VsdClcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBoYXNoIGZpcnN0IGZvciBjaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0aW9uIGJlZm9yZSBlbnRlcmluZyB0aGVcbiAgICAgICAgLy8gcmVjdXJzaXZlIGBzdGFibGVIYXNoYCBjYWxscy5cbiAgICAgICAgLy8gRm9yIG90aGVyIG9iamVjdHMgbGlrZSBzZXQgYW5kIG1hcCwgd2UgdXNlIHRoaXMgaWQgZGlyZWN0bHkgYXMgdGhlIGhhc2guXG4gICAgICAgIHJlc3VsdCA9ICsrY291bnRlciArICd+JztcbiAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09IEFycmF5KSB7XG4gICAgICAgICAgICAvLyBBcnJheS5cbiAgICAgICAgICAgIHJlc3VsdCA9ICdAJztcbiAgICAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFyZy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RhYmxlSGFzaChhcmdbaW5kZXhdKSArICcsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09IE9CSkVDVCkge1xuICAgICAgICAgICAgLy8gT2JqZWN0LCBzb3J0IGtleXMuXG4gICAgICAgICAgICByZXN1bHQgPSAnIyc7XG4gICAgICAgICAgICB2YXIga2V5cyA9IE9CSkVDVC5rZXlzKGFyZykuc29ydCgpO1xuICAgICAgICAgICAgd2hpbGUgKCFpc1VuZGVmaW5lZCgoaW5kZXggPSBrZXlzLnBvcCgpKSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ1tpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbmRleCArICc6JyArIHN0YWJsZUhhc2goYXJnW2luZGV4XSkgKyAnLCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gaXNEYXRlXG4gICAgICAgICAgICA/IGFyZy50b0pTT04oKVxuICAgICAgICAgICAgOiB0eXBlID09ICdzeW1ib2wnXG4gICAgICAgICAgICAgICAgPyBhcmcudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIDogdHlwZSA9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KGFyZylcbiAgICAgICAgICAgICAgICAgICAgOiAnJyArIGFyZztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogRHVlIHRvIGJ1ZyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02NzgwNzUsXG4gKiBpdCdzIG5vdCByZWxpYWJsZSB0byBkZXRlY3QgaWYgdGhlIGJyb3dzZXIgaXMgY3VycmVudGx5IG9ubGluZSBvciBvZmZsaW5lXG4gKiBiYXNlZCBvbiBgbmF2aWdhdG9yLm9uTGluZWAuXG4gKiBBcyBhIHdvcmsgYXJvdW5kLCB3ZSBhbHdheXMgYXNzdW1lIGl0J3Mgb25saW5lIG9uIGZpcnN0IGxvYWQsIGFuZCBjaGFuZ2VcbiAqIHRoZSBzdGF0dXMgdXBvbiBgb25saW5lYCBvciBgb2ZmbGluZWAgZXZlbnRzLlxuICovXG52YXIgb25saW5lID0gdHJ1ZTtcbnZhciBpc09ubGluZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9ubGluZTsgfTtcbnZhciBoYXNXaW4gPSBoYXNXaW5kb3coKTtcbnZhciBoYXNEb2MgPSBoYXNEb2N1bWVudCgpO1xuLy8gRm9yIG5vZGUgYW5kIFJlYWN0IE5hdGl2ZSwgYGFkZC9yZW1vdmVFdmVudExpc3RlbmVyYCBkb2Vzbid0IGV4aXN0IG9uIHdpbmRvdy5cbnZhciBvbldpbmRvd0V2ZW50ID0gaGFzV2luICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyXG4gICAgPyB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHdpbmRvdylcbiAgICA6IG5vb3A7XG52YXIgb25Eb2N1bWVudEV2ZW50ID0gaGFzRG9jID8gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKGRvY3VtZW50KSA6IG5vb3A7XG52YXIgb2ZmV2luZG93RXZlbnQgPSBoYXNXaW4gJiYgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXJcbiAgICA/IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQod2luZG93KVxuICAgIDogbm9vcDtcbnZhciBvZmZEb2N1bWVudEV2ZW50ID0gaGFzRG9jXG4gICAgPyBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQoZG9jdW1lbnQpXG4gICAgOiBub29wO1xudmFyIGlzVmlzaWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmlzaWJpbGl0eVN0YXRlID0gaGFzRG9jICYmIGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTtcbiAgICByZXR1cm4gaXNVbmRlZmluZWQodmlzaWJpbGl0eVN0YXRlKSB8fCB2aXNpYmlsaXR5U3RhdGUgIT09ICdoaWRkZW4nO1xufTtcbnZhciBpbml0Rm9jdXMgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBmb2N1cyByZXZhbGlkYXRlXG4gICAgb25Eb2N1bWVudEV2ZW50KCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgIG9uV2luZG93RXZlbnQoJ2ZvY3VzJywgY2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9mZkRvY3VtZW50RXZlbnQoJ3Zpc2liaWxpdHljaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdmb2N1cycsIGNhbGxiYWNrKTtcbiAgICB9O1xufTtcbnZhciBpbml0UmVjb25uZWN0ID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gcmV2YWxpZGF0ZSBvbiByZWNvbm5lY3RlZFxuICAgIHZhciBvbk9ubGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb25saW5lID0gdHJ1ZTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICAgIC8vIG5vdGhpbmcgdG8gcmV2YWxpZGF0ZSwganVzdCB1cGRhdGUgdGhlIHN0YXR1c1xuICAgIHZhciBvbk9mZmxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9ubGluZSA9IGZhbHNlO1xuICAgIH07XG4gICAgb25XaW5kb3dFdmVudCgnb25saW5lJywgb25PbmxpbmUpO1xuICAgIG9uV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdvbmxpbmUnLCBvbk9ubGluZSk7XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdvZmZsaW5lJywgb25PZmZsaW5lKTtcbiAgICB9O1xufTtcbnZhciBwcmVzZXQgPSB7XG4gICAgaXNPbmxpbmU6IGlzT25saW5lLFxuICAgIGlzVmlzaWJsZTogaXNWaXNpYmxlXG59O1xudmFyIGRlZmF1bHRDb25maWdPcHRpb25zID0ge1xuICAgIGluaXRGb2N1czogaW5pdEZvY3VzLFxuICAgIGluaXRSZWNvbm5lY3Q6IGluaXRSZWNvbm5lY3Rcbn07XG5cbnZhciBJU19TRVJWRVIgPSAhaGFzV2luZG93KCkgfHwgJ0Rlbm8nIGluIHdpbmRvdztcbi8vIFBvbHlmaWxsIHJlcXVlc3RBbmltYXRpb25GcmFtZVxudmFyIHJBRiA9IGZ1bmN0aW9uIChmKSB7XG4gICAgcmV0dXJuIGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSgpID8gd2luZG93WydyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXShmKSA6IHNldFRpbWVvdXQoZiwgMSk7XG59O1xuLy8gUmVhY3QgY3VycmVudGx5IHRocm93cyBhIHdhcm5pbmcgd2hlbiB1c2luZyB1c2VMYXlvdXRFZmZlY3Qgb24gdGhlIHNlcnZlci5cbi8vIFRvIGdldCBhcm91bmQgaXQsIHdlIGNhbiBjb25kaXRpb25hbGx5IHVzZUVmZmVjdCBvbiB0aGUgc2VydmVyIChuby1vcCkgYW5kXG4vLyB1c2VMYXlvdXRFZmZlY3QgaW4gdGhlIGJyb3dzZXIuXG52YXIgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IElTX1NFUlZFUiA/IHVzZUVmZmVjdCA6IHVzZUxheW91dEVmZmVjdDtcbi8vIFRoaXMgYXNzaWdubWVudCBpcyB0byBleHRlbmQgdGhlIE5hdmlnYXRvciB0eXBlIHRvIHVzZSBlZmZlY3RpdmVUeXBlLlxudmFyIG5hdmlnYXRvckNvbm5lY3Rpb24gPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIG5hdmlnYXRvci5jb25uZWN0aW9uO1xuLy8gQWRqdXN0IHRoZSBjb25maWcgYmFzZWQgb24gc2xvdyBjb25uZWN0aW9uIHN0YXR1cyAoPD0gNzBLYnBzKS5cbnZhciBzbG93Q29ubmVjdGlvbiA9ICFJU19TRVJWRVIgJiZcbiAgICBuYXZpZ2F0b3JDb25uZWN0aW9uICYmXG4gICAgKFsnc2xvdy0yZycsICcyZyddLmluY2x1ZGVzKG5hdmlnYXRvckNvbm5lY3Rpb24uZWZmZWN0aXZlVHlwZSkgfHxcbiAgICAgICAgbmF2aWdhdG9yQ29ubmVjdGlvbi5zYXZlRGF0YSk7XG5cbnZhciBzZXJpYWxpemUgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oa2V5KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAga2V5ID0ga2V5KCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzIG5vdCByZWFkeVxuICAgICAgICAgICAga2V5ID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGFyZ3MgPSBbXS5jb25jYXQoa2V5KTtcbiAgICAvLyBJZiBrZXkgaXMgbm90IGZhbHN5LCBvciBub3QgYW4gZW1wdHkgYXJyYXksIGhhc2ggaXQuXG4gICAga2V5ID1cbiAgICAgICAgdHlwZW9mIGtleSA9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBrZXlcbiAgICAgICAgICAgIDogKEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleS5sZW5ndGggOiBrZXkpXG4gICAgICAgICAgICAgICAgPyBzdGFibGVIYXNoKGtleSlcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgIHZhciBpbmZvS2V5ID0ga2V5ID8gJyRzd3IkJyArIGtleSA6ICcnO1xuICAgIHJldHVybiBba2V5LCBhcmdzLCBpbmZvS2V5XTtcbn07XG5cbi8vIEdsb2JhbCBzdGF0ZSB1c2VkIHRvIGRlZHVwbGljYXRlIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnNcbnZhciBTV1JHbG9iYWxTdGF0ZSA9IG5ldyBXZWFrTWFwKCk7XG5cbnZhciBGT0NVU19FVkVOVCA9IDA7XG52YXIgUkVDT05ORUNUX0VWRU5UID0gMTtcbnZhciBNVVRBVEVfRVZFTlQgPSAyO1xuXG52YXIgYnJvYWRjYXN0U3RhdGUgPSBmdW5jdGlvbiAoY2FjaGUsIGtleSwgZGF0YSwgZXJyb3IsIGlzVmFsaWRhdGluZywgcmV2YWxpZGF0ZSwgYnJvYWRjYXN0KSB7XG4gICAgaWYgKGJyb2FkY2FzdCA9PT0gdm9pZCAwKSB7IGJyb2FkY2FzdCA9IHRydWU7IH1cbiAgICB2YXIgX2EgPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpLCBFVkVOVF9SRVZBTElEQVRPUlMgPSBfYVswXSwgU1RBVEVfVVBEQVRFUlMgPSBfYVsxXSwgRkVUQ0ggPSBfYVszXTtcbiAgICB2YXIgcmV2YWxpZGF0b3JzID0gRVZFTlRfUkVWQUxJREFUT1JTW2tleV07XG4gICAgdmFyIHVwZGF0ZXJzID0gU1RBVEVfVVBEQVRFUlNba2V5XTtcbiAgICAvLyBDYWNoZSB3YXMgcG9wdWxhdGVkLCB1cGRhdGUgc3RhdGVzIG9mIGFsbCBob29rcy5cbiAgICBpZiAoYnJvYWRjYXN0ICYmIHVwZGF0ZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXBkYXRlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHVwZGF0ZXJzW2ldKGRhdGEsIGVycm9yLCBpc1ZhbGlkYXRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGFsc28gbmVlZCB0byByZXZhbGlkYXRlLCBvbmx5IGRvIGl0IGZvciB0aGUgZmlyc3QgaG9vay5cbiAgICBpZiAocmV2YWxpZGF0ZSkge1xuICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBrZXkgYnkgZGVsZXRpbmcgdGhlIGNvbmN1cnJlbnQgcmVxdWVzdCBtYXJrZXJzIHNvIG5ld1xuICAgICAgICAvLyByZXF1ZXN0cyB3aWxsIG5vdCBiZSBkZWR1cGVkLlxuICAgICAgICBkZWxldGUgRkVUQ0hba2V5XTtcbiAgICAgICAgaWYgKHJldmFsaWRhdG9ycyAmJiByZXZhbGlkYXRvcnNbMF0pIHtcbiAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRvcnNbMF0oTVVUQVRFX0VWRU5UKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG59O1xuXG4vLyBHbG9iYWwgdGltZXN0YW1wLlxudmFyIF9fdGltZXN0YW1wID0gMDtcbnZhciBnZXRUaW1lc3RhbXAgPSBmdW5jdGlvbiAoKSB7IHJldHVybiArK19fdGltZXN0YW1wOyB9O1xuXG52YXIgaW50ZXJuYWxNdXRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2FjaGUsIF9rZXksIF9kYXRhLCBfb3B0cywgb3B0aW9ucywgcG9wdWxhdGVDYWNoZSwgcmV2YWxpZGF0ZSwgcm9sbGJhY2tPbkVycm9yLCBjdXN0b21PcHRpbWlzdGljRGF0YSwgX2EsIGtleSwga2V5SW5mbywgX2IsIE1VVEFUSU9OLCBkYXRhLCBlcnJvciwgYmVmb3JlTXV0YXRpb25UcywgaGFzQ3VzdG9tT3B0aW1pc3RpY0RhdGEsIHJvbGxiYWNrRGF0YSwgb3B0aW1pc3RpY0RhdGEsIHJlcztcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xuICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSBhcmdzWzBdLCBfa2V5ID0gYXJnc1sxXSwgX2RhdGEgPSBhcmdzWzJdLCBfb3B0cyA9IGFyZ3NbM107XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0eXBlb2YgX29wdHMgPT09ICdib29sZWFuJyA/IHsgcmV2YWxpZGF0ZTogX29wdHMgfSA6IF9vcHRzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZUNhY2hlID0gaXNVbmRlZmluZWQob3B0aW9ucy5wb3B1bGF0ZUNhY2hlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG9wdGlvbnMucG9wdWxhdGVDYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgcmV2YWxpZGF0ZSA9IG9wdGlvbnMucmV2YWxpZGF0ZSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJvbGxiYWNrT25FcnJvciA9IG9wdGlvbnMucm9sbGJhY2tPbkVycm9yICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tT3B0aW1pc3RpY0RhdGEgPSBvcHRpb25zLm9wdGltaXN0aWNEYXRhO1xuICAgICAgICAgICAgICAgICAgICBfYSA9IHNlcmlhbGl6ZShfa2V5KSwga2V5ID0gX2FbMF0sIGtleUluZm8gPSBfYVsyXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgIF9iID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKSwgTVVUQVRJT04gPSBfYlsyXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbmV3IGRhdGEgcHJvdmlkZWQsIHJldmFsaWRhdGUgdGhlIGtleSB3aXRoIGN1cnJlbnQgc3RhdGUuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldmFsaWRhdGUgYW5kIGJyb2FkY2FzdCBzdGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBicm9hZGNhc3RTdGF0ZShjYWNoZSwga2V5LCBjYWNoZS5nZXQoa2V5KSwgVU5ERUZJTkVELCBVTkRFRklORUQsIHJldmFsaWRhdGUsIHRydWUpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2RhdGE7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZU11dGF0aW9uVHMgPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgICAgICAgICAgICAgTVVUQVRJT05ba2V5XSA9IFtiZWZvcmVNdXRhdGlvblRzLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgaGFzQ3VzdG9tT3B0aW1pc3RpY0RhdGEgPSAhaXNVbmRlZmluZWQoY3VzdG9tT3B0aW1pc3RpY0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICByb2xsYmFja0RhdGEgPSBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gb3B0aW1pc3RpYyBkYXRhIHVwZGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0N1c3RvbU9wdGltaXN0aWNEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWlzdGljRGF0YSA9IGlzRnVuY3Rpb24oY3VzdG9tT3B0aW1pc3RpY0RhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXN0b21PcHRpbWlzdGljRGF0YShyb2xsYmFja0RhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXN0b21PcHRpbWlzdGljRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnNldChrZXksIG9wdGltaXN0aWNEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2FkY2FzdFN0YXRlKGNhY2hlLCBrZXksIG9wdGltaXN0aWNEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYGRhdGFgIGlzIGEgZnVuY3Rpb24sIGNhbGwgaXQgcGFzc2luZyBjdXJyZW50IGNhY2hlIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YShjYWNoZS5nZXQoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQgdGhyb3dzIGFuIGVycm9yIHN5bmNocm9ub3VzbHksIHdlIHNob3VsZG4ndCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhLnRoZW4pKSkgcmV0dXJuIFszIC8qYnJlYWsqLywgMl07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGRhdGEuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIG90aGVyIG11dGF0aW9ucyBoYXZlIG9jY3VycmVkIHNpbmNlIHdlJ3ZlIHN0YXJ0ZWQgdGhpcyBtdXRhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSByYWNlIHdlIGRvbid0IHVwZGF0ZSBjYWNoZSBvciBicm9hZGNhc3QgdGhlIGNoYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgcmV0dXJuIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBtdXRhdGlvbiBpcyBhc3luYywgd2UgbmVlZCB0byBjaGVjayB0aW1lc3RhbXBzIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9ucy5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9jLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgb3RoZXIgbXV0YXRpb25zIGhhdmUgb2NjdXJyZWQgc2luY2Ugd2UndmUgc3RhcnRlZCB0aGlzIG11dGF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEgcmFjZSB3ZSBkb24ndCB1cGRhdGUgY2FjaGUgb3IgYnJvYWRjYXN0IHRoZSBjaGFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgcmV0dXJuIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgICAgICBpZiAoYmVmb3JlTXV0YXRpb25UcyAhPT0gTVVUQVRJT05ba2V5XVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGRhdGFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVycm9yICYmIGhhc0N1c3RvbU9wdGltaXN0aWNEYXRhICYmIHJvbGxiYWNrT25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUm9sbGJhY2suIEFsd2F5cyBwb3B1bGF0ZSB0aGUgY2FjaGUgaW4gdGhpcyBjYXNlIGJ1dCB3aXRob3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm1pbmcgdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZUNhY2hlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSByb2xsYmFja0RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zZXQoa2V5LCByb2xsYmFja0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9jLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHNob3VsZCB3cml0ZSBiYWNrIHRoZSBjYWNoZSBhZnRlciByZXF1ZXN0LlxuICAgICAgICAgICAgICAgICAgICBpZiAocG9wdWxhdGVDYWNoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgcmVzdWx0IGludG8gZGF0YS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwb3B1bGF0ZUNhY2hlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcG9wdWxhdGVDYWNoZShkYXRhLCByb2xsYmFja0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSBjYWNoZWQgZGF0YSBpZiB0aGVyZSdzIG5vIGVycm9yLiBEYXRhIGNhbiBiZSBgdW5kZWZpbmVkYCBoZXJlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnNldChrZXksIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHVwZGF0ZSBvciByZXNldCB0aGUgZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zZXQoa2V5SW5mbywgbWVyZ2VPYmplY3RzKGNhY2hlLmdldChrZXlJbmZvKSwgeyBlcnJvcjogZXJyb3IgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSB0aW1lc3RhbXAgdG8gbWFyayB0aGUgbXV0YXRpb24gaGFzIGVuZGVkLlxuICAgICAgICAgICAgICAgICAgICBNVVRBVElPTltrZXldWzFdID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGJyb2FkY2FzdFN0YXRlKGNhY2hlLCBrZXksIGRhdGEsIGVycm9yLCBVTkRFRklORUQsIHJldmFsaWRhdGUsICEhcG9wdWxhdGVDYWNoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGVycm9yIG9yIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXMgPSBfYy5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGVycm9yIG9yIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgcG9wdWxhdGVDYWNoZSA/IHJlcyA6IGRhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbnZhciByZXZhbGlkYXRlQWxsS2V5cyA9IGZ1bmN0aW9uIChyZXZhbGlkYXRvcnMsIHR5cGUpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcmV2YWxpZGF0b3JzKSB7XG4gICAgICAgIGlmIChyZXZhbGlkYXRvcnNba2V5XVswXSlcbiAgICAgICAgICAgIHJldmFsaWRhdG9yc1trZXldWzBdKHR5cGUpO1xuICAgIH1cbn07XG52YXIgaW5pdENhY2hlID0gZnVuY3Rpb24gKHByb3ZpZGVyLCBvcHRpb25zKSB7XG4gICAgLy8gVGhlIGdsb2JhbCBzdGF0ZSBmb3IgYSBzcGVjaWZpYyBwcm92aWRlciB3aWxsIGJlIHVzZWQgdG8gZGVkdXBsaWNhdGVcbiAgICAvLyByZXF1ZXN0cyBhbmQgc3RvcmUgbGlzdGVuZXJzLiBBcyB3ZWxsIGFzIGEgbXV0YXRlIGZ1bmN0aW9uIHRoYXQgYm91bmQgdG9cbiAgICAvLyB0aGUgY2FjaGUuXG4gICAgLy8gUHJvdmlkZXIncyBnbG9iYWwgc3RhdGUgbWlnaHQgYmUgYWxyZWFkeSBpbml0aWFsaXplZC4gTGV0J3MgdHJ5IHRvIGdldCB0aGVcbiAgICAvLyBnbG9iYWwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm92aWRlciBmaXJzdC5cbiAgICBpZiAoIVNXUkdsb2JhbFN0YXRlLmhhcyhwcm92aWRlcikpIHtcbiAgICAgICAgdmFyIG9wdHMgPSBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZ09wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGdsb2JhbCBzdGF0ZSBib3VuZCB0byB0aGUgcHJvdmlkZXIsIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCB0aGVcbiAgICAgICAgLy8gbmV3IG11dGF0ZSBmdW5jdGlvbi5cbiAgICAgICAgdmFyIEVWRU5UX1JFVkFMSURBVE9SUyA9IHt9O1xuICAgICAgICB2YXIgbXV0YXRlID0gaW50ZXJuYWxNdXRhdGUuYmluZChVTkRFRklORUQsIHByb3ZpZGVyKTtcbiAgICAgICAgdmFyIHVubW91bnQgPSBub29wO1xuICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YXRlIGlmIGl0J3MgbmV3LCBvciB0aGUgcHJvdmlkZXIgaGFzIGJlZW4gZXh0ZW5kZWQuXG4gICAgICAgIFNXUkdsb2JhbFN0YXRlLnNldChwcm92aWRlciwgW0VWRU5UX1JFVkFMSURBVE9SUywge30sIHt9LCB7fSwgbXV0YXRlXSk7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvdmlkZXIsIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBpdCBhbmQgc2V0dXAgRE9NIGV2ZW50c1xuICAgICAgICAvLyBsaXN0ZW5lcnMgZm9yIGBmb2N1c2AgYW5kIGByZWNvbm5lY3RgIGFjdGlvbnMuXG4gICAgICAgIGlmICghSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAvLyBXaGVuIGxpc3RlbmluZyB0byB0aGUgbmF0aXZlIGV2ZW50cyBmb3IgYXV0byByZXZhbGlkYXRpb25zLFxuICAgICAgICAgICAgLy8gd2UgaW50ZW50aW9uYWxseSBwdXQgYSBkZWxheSAoc2V0VGltZW91dCkgaGVyZSB0byBtYWtlIHN1cmUgdGhleSBhcmVcbiAgICAgICAgICAgIC8vIGZpcmVkIGFmdGVyIGltbWVkaWF0ZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbnMsIHdoaWNoIGNhbiBwb3NzaWJseSBiZVxuICAgICAgICAgICAgLy8gUmVhY3QncyBzdGF0ZSB1cGRhdGVzLlxuICAgICAgICAgICAgLy8gVGhpcyBhdm9pZHMgc29tZSB1bm5lY2Vzc2FyeSByZXZhbGlkYXRpb25zIHN1Y2ggYXNcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL2lzc3Vlcy8xNjgwLlxuICAgICAgICAgICAgdmFyIHJlbGVhc2VGb2N1c18xID0gb3B0cy5pbml0Rm9jdXMoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgRk9DVVNfRVZFTlQpKSk7XG4gICAgICAgICAgICB2YXIgcmVsZWFzZVJlY29ubmVjdF8xID0gb3B0cy5pbml0UmVjb25uZWN0KHNldFRpbWVvdXQuYmluZChVTkRFRklORUQsIHJldmFsaWRhdGVBbGxLZXlzLmJpbmQoVU5ERUZJTkVELCBFVkVOVF9SRVZBTElEQVRPUlMsIFJFQ09OTkVDVF9FVkVOVCkpKTtcbiAgICAgICAgICAgIHVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVsZWFzZUZvY3VzXzEgJiYgcmVsZWFzZUZvY3VzXzEoKTtcbiAgICAgICAgICAgICAgICByZWxlYXNlUmVjb25uZWN0XzEgJiYgcmVsZWFzZVJlY29ubmVjdF8xKCk7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiB1bi1tb3VudGluZywgd2UgbmVlZCB0byByZW1vdmUgdGhlIGNhY2hlIHByb3ZpZGVyIGZyb20gdGhlIHN0YXRlXG4gICAgICAgICAgICAgICAgLy8gc3RvcmFnZSB0b28gYmVjYXVzZSBpdCdzIGEgc2lkZS1lZmZlY3QuIE90aGVyd2lzZSB3aGVuIHJlLW1vdW50aW5nIHdlXG4gICAgICAgICAgICAgICAgLy8gd2lsbCBub3QgcmUtcmVnaXN0ZXIgdGhvc2UgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLmRlbGV0ZShwcm92aWRlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gaW5qZWN0IGFuIGV4dHJhIGxheWVyIG9uIHRvcCBvZiBgcHJvdmlkZXJgIGluIHRoZSBmdXR1cmUsXG4gICAgICAgIC8vIHN1Y2ggYXMga2V5IHNlcmlhbGl6YXRpb24sIGF1dG8gR0MsIGV0Yy5cbiAgICAgICAgLy8gRm9yIG5vdywgaXQncyBqdXN0IGEgYE1hcGAgaW50ZXJmYWNlIHdpdGhvdXQgYW55IG1vZGlmaWNhdGlvbnMuXG4gICAgICAgIHJldHVybiBbcHJvdmlkZXIsIG11dGF0ZSwgdW5tb3VudF07XG4gICAgfVxuICAgIHJldHVybiBbcHJvdmlkZXIsIFNXUkdsb2JhbFN0YXRlLmdldChwcm92aWRlcilbNF1dO1xufTtcblxuLy8gZXJyb3IgcmV0cnlcbnZhciBvbkVycm9yUmV0cnkgPSBmdW5jdGlvbiAoXywgX18sIGNvbmZpZywgcmV2YWxpZGF0ZSwgb3B0cykge1xuICAgIHZhciBtYXhSZXRyeUNvdW50ID0gY29uZmlnLmVycm9yUmV0cnlDb3VudDtcbiAgICB2YXIgY3VycmVudFJldHJ5Q291bnQgPSBvcHRzLnJldHJ5Q291bnQ7XG4gICAgLy8gRXhwb25lbnRpYWwgYmFja29mZlxuICAgIHZhciB0aW1lb3V0ID0gfn4oKE1hdGgucmFuZG9tKCkgKyAwLjUpICpcbiAgICAgICAgKDEgPDwgKGN1cnJlbnRSZXRyeUNvdW50IDwgOCA/IGN1cnJlbnRSZXRyeUNvdW50IDogOCkpKSAqIGNvbmZpZy5lcnJvclJldHJ5SW50ZXJ2YWw7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtYXhSZXRyeUNvdW50KSAmJiBjdXJyZW50UmV0cnlDb3VudCA+IG1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KHJldmFsaWRhdGUsIHRpbWVvdXQsIG9wdHMpO1xufTtcbi8vIERlZmF1bHQgY2FjaGUgcHJvdmlkZXJcbnZhciBfYSA9IGluaXRDYWNoZShuZXcgTWFwKCkpLCBjYWNoZSA9IF9hWzBdLCBtdXRhdGUgPSBfYVsxXTtcbi8vIERlZmF1bHQgY29uZmlnXG52YXIgZGVmYXVsdENvbmZpZyA9IG1lcmdlT2JqZWN0cyh7XG4gICAgLy8gZXZlbnRzXG4gICAgb25Mb2FkaW5nU2xvdzogbm9vcCxcbiAgICBvblN1Y2Nlc3M6IG5vb3AsXG4gICAgb25FcnJvcjogbm9vcCxcbiAgICBvbkVycm9yUmV0cnk6IG9uRXJyb3JSZXRyeSxcbiAgICBvbkRpc2NhcmRlZDogbm9vcCxcbiAgICAvLyBzd2l0Y2hlc1xuICAgIHJldmFsaWRhdGVPbkZvY3VzOiB0cnVlLFxuICAgIHJldmFsaWRhdGVPblJlY29ubmVjdDogdHJ1ZSxcbiAgICByZXZhbGlkYXRlSWZTdGFsZTogdHJ1ZSxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IHRydWUsXG4gICAgLy8gdGltZW91dHNcbiAgICBlcnJvclJldHJ5SW50ZXJ2YWw6IHNsb3dDb25uZWN0aW9uID8gMTAwMDAgOiA1MDAwLFxuICAgIGZvY3VzVGhyb3R0bGVJbnRlcnZhbDogNSAqIDEwMDAsXG4gICAgZGVkdXBpbmdJbnRlcnZhbDogMiAqIDEwMDAsXG4gICAgbG9hZGluZ1RpbWVvdXQ6IHNsb3dDb25uZWN0aW9uID8gNTAwMCA6IDMwMDAsXG4gICAgLy8gcHJvdmlkZXJzXG4gICAgY29tcGFyZTogZnVuY3Rpb24gKGN1cnJlbnREYXRhLCBuZXdEYXRhKSB7XG4gICAgICAgIHJldHVybiBzdGFibGVIYXNoKGN1cnJlbnREYXRhKSA9PSBzdGFibGVIYXNoKG5ld0RhdGEpO1xuICAgIH0sXG4gICAgaXNQYXVzZWQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9LFxuICAgIGNhY2hlOiBjYWNoZSxcbiAgICBtdXRhdGU6IG11dGF0ZSxcbiAgICBmYWxsYmFjazoge31cbn0sIFxuLy8gdXNlIHdlYiBwcmVzZXQgYnkgZGVmYXVsdFxucHJlc2V0KTtcblxudmFyIG1lcmdlQ29uZmlncyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgb2JqZWN0IHRvIGF2b2lkIG11dGF0aW5nIHRoZSBvcmlnaW5hbCBoZXJlLlxuICAgIHZhciB2ID0gbWVyZ2VPYmplY3RzKGEsIGIpO1xuICAgIC8vIElmIHR3byBjb25maWdzIGFyZSBwcm92aWRlZCwgbWVyZ2UgdGhlaXIgYHVzZWAgYW5kIGBmYWxsYmFja2Agb3B0aW9ucy5cbiAgICBpZiAoYikge1xuICAgICAgICB2YXIgdTEgPSBhLnVzZSwgZjEgPSBhLmZhbGxiYWNrO1xuICAgICAgICB2YXIgdTIgPSBiLnVzZSwgZjIgPSBiLmZhbGxiYWNrO1xuICAgICAgICBpZiAodTEgJiYgdTIpIHtcbiAgICAgICAgICAgIHYudXNlID0gdTEuY29uY2F0KHUyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZjEgJiYgZjIpIHtcbiAgICAgICAgICAgIHYuZmFsbGJhY2sgPSBtZXJnZU9iamVjdHMoZjEsIGYyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbn07XG5cbnZhciBTV1JDb25maWdDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG52YXIgU1dSQ29uZmlnJDEgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcbiAgICAvLyBFeHRlbmQgcGFyZW50IGNvbnRleHQgdmFsdWVzIGFuZCBtaWRkbGV3YXJlLlxuICAgIHZhciBleHRlbmRlZENvbmZpZyA9IG1lcmdlQ29uZmlncyh1c2VDb250ZXh0KFNXUkNvbmZpZ0NvbnRleHQpLCB2YWx1ZSk7XG4gICAgLy8gU2hvdWxkIG5vdCB1c2UgdGhlIGluaGVyaXRlZCBwcm92aWRlci5cbiAgICB2YXIgcHJvdmlkZXIgPSB2YWx1ZSAmJiB2YWx1ZS5wcm92aWRlcjtcbiAgICAvLyBVc2UgYSBsYXp5IGluaXRpYWxpemVkIHN0YXRlIHRvIGNyZWF0ZSB0aGUgY2FjaGUgb24gZmlyc3QgYWNjZXNzLlxuICAgIHZhciBjYWNoZUNvbnRleHQgPSB1c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBwcm92aWRlclxuICAgICAgICAgICAgPyBpbml0Q2FjaGUocHJvdmlkZXIoZXh0ZW5kZWRDb25maWcuY2FjaGUgfHwgY2FjaGUpLCB2YWx1ZSlcbiAgICAgICAgICAgIDogVU5ERUZJTkVEO1xuICAgIH0pWzBdO1xuICAgIC8vIE92ZXJyaWRlIHRoZSBjYWNoZSBpZiBhIG5ldyBwcm92aWRlciBpcyBnaXZlbi5cbiAgICBpZiAoY2FjaGVDb250ZXh0KSB7XG4gICAgICAgIGV4dGVuZGVkQ29uZmlnLmNhY2hlID0gY2FjaGVDb250ZXh0WzBdO1xuICAgICAgICBleHRlbmRlZENvbmZpZy5tdXRhdGUgPSBjYWNoZUNvbnRleHRbMV07XG4gICAgfVxuICAgIC8vIFVuc3Vic2NyaWJlIGV2ZW50cy5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIChjYWNoZUNvbnRleHQgPyBjYWNoZUNvbnRleHRbMl0gOiBVTkRFRklORUQpOyB9LCBbXSk7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoU1dSQ29uZmlnQ29udGV4dC5Qcm92aWRlciwgbWVyZ2VPYmplY3RzKHByb3BzLCB7XG4gICAgICAgIHZhbHVlOiBleHRlbmRlZENvbmZpZ1xuICAgIH0pKTtcbn07XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2Ygc3RhdGUgd2l0aCBkZXBlbmRlbmN5LXRyYWNraW5nLlxuICovXG52YXIgdXNlU3RhdGVXaXRoRGVwcyA9IGZ1bmN0aW9uIChzdGF0ZSwgdW5tb3VudGVkUmVmKSB7XG4gICAgdmFyIHJlcmVuZGVyID0gdXNlU3RhdGUoe30pWzFdO1xuICAgIHZhciBzdGF0ZVJlZiA9IHVzZVJlZihzdGF0ZSk7XG4gICAgLy8gSWYgYSBzdGF0ZSBwcm9wZXJ0eSAoZGF0YSwgZXJyb3Igb3IgaXNWYWxpZGF0aW5nKSBpcyBhY2Nlc3NlZCBieSB0aGUgcmVuZGVyXG4gICAgLy8gZnVuY3Rpb24sIHdlIG1hcmsgdGhlIHByb3BlcnR5IGFzIGEgZGVwZW5kZW5jeSBzbyBpZiBpdCBpcyB1cGRhdGVkIGFnYWluXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSwgd2UgdHJpZ2dlciBhIHJlcmVuZGVyLlxuICAgIC8vIFRoaXMgaXMgYWxzbyBrbm93biBhcyBkZXBlbmRlbmN5LXRyYWNraW5nLlxuICAgIHZhciBzdGF0ZURlcGVuZGVuY2llc1JlZiA9IHVzZVJlZih7XG4gICAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgICBlcnJvcjogZmFsc2UsXG4gICAgICAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcGF5bG9hZCBUbyBjaGFuZ2Ugc3RhdGVSZWYsIHBhc3MgdGhlIHZhbHVlcyBleHBsaWNpdGx5IHRvIHNldFN0YXRlOlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiBzZXRTdGF0ZSh7XG4gICAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAgICogICBkYXRhOiBuZXdEYXRhIC8vIHNldCBkYXRhIHRvIG5ld0RhdGFcbiAgICAgKiAgIGVycm9yOiB1bmRlZmluZWQgLy8gc2V0IGVycm9yIHRvIHVuZGVmaW5lZFxuICAgICAqIH0pXG4gICAgICpcbiAgICAgKiBzZXRTdGF0ZSh7XG4gICAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAgICogICBkYXRhOiB1bmRlZmluZWQgLy8gc2V0IGRhdGEgdG8gdW5kZWZpbmVkXG4gICAgICogICBlcnJvcjogZXJyIC8vIHNldCBlcnJvciB0byBlcnJcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHZhciBzZXRTdGF0ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChwYXlsb2FkKSB7XG4gICAgICAgIHZhciBzaG91bGRSZXJlbmRlciA9IGZhbHNlO1xuICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gc3RhdGVSZWYuY3VycmVudDtcbiAgICAgICAgZm9yICh2YXIgXyBpbiBwYXlsb2FkKSB7XG4gICAgICAgICAgICB2YXIgayA9IF87XG4gICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaGFzIGNoYW5nZWQsIHVwZGF0ZSB0aGUgc3RhdGUgYW5kIG1hcmsgcmVyZW5kZXIgYXNcbiAgICAgICAgICAgIC8vIG5lZWRlZC5cbiAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGVba10gIT09IHBheWxvYWRba10pIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGVba10gPSBwYXlsb2FkW2tdO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCBieSB0aGUgY29tcG9uZW50LCBhIHJlcmVuZGVyIHNob3VsZCBiZVxuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXJlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudFtrXSkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRSZXJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRSZXJlbmRlciAmJiAhdW5tb3VudGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJlcmVuZGVyKHt9KTtcbiAgICAgICAgfVxuICAgIH0sIFxuICAgIC8vIGNvbmZpZy5zdXNwZW5zZSBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgLy8gQWx3YXlzIHVwZGF0ZSB0aGUgc3RhdGUgcmVmZXJlbmNlLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBzdGF0ZVJlZi5jdXJyZW50ID0gc3RhdGU7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtzdGF0ZVJlZiwgc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudCwgc2V0U3RhdGVdO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oYXJnc1sxXSlcbiAgICAgICAgPyBbYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSB8fCB7fV1cbiAgICAgICAgOiBbYXJnc1swXSwgbnVsbCwgKGFyZ3NbMV0gPT09IG51bGwgPyBhcmdzWzJdIDogYXJnc1sxXSkgfHwge31dO1xufTtcblxudmFyIHVzZVNXUkNvbmZpZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbWVyZ2VPYmplY3RzKGRlZmF1bHRDb25maWcsIHVzZUNvbnRleHQoU1dSQ29uZmlnQ29udGV4dCkpO1xufTtcblxuLy8gSXQncyB0cmlja3kgdG8gcGFzcyBnZW5lcmljIHR5cGVzIGFzIHBhcmFtZXRlcnMsIHNvIHdlIGp1c3QgZGlyZWN0bHkgb3ZlcnJpZGVcbi8vIHRoZSB0eXBlcyBoZXJlLlxudmFyIHdpdGhBcmdzID0gZnVuY3Rpb24gKGhvb2spIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gdXNlU1dSQXJncygpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBHZXQgdGhlIGRlZmF1bHQgYW5kIGluaGVyaXRlZCBjb25maWd1cmF0aW9uLlxuICAgICAgICB2YXIgZmFsbGJhY2tDb25maWcgPSB1c2VTV1JDb25maWcoKTtcbiAgICAgICAgLy8gTm9ybWFsaXplIGFyZ3VtZW50cy5cbiAgICAgICAgdmFyIF9hID0gbm9ybWFsaXplKGFyZ3MpLCBrZXkgPSBfYVswXSwgZm4gPSBfYVsxXSwgX2NvbmZpZyA9IF9hWzJdO1xuICAgICAgICAvLyBNZXJnZSBjb25maWd1cmF0aW9ucy5cbiAgICAgICAgdmFyIGNvbmZpZyA9IG1lcmdlQ29uZmlncyhmYWxsYmFja0NvbmZpZywgX2NvbmZpZyk7XG4gICAgICAgIC8vIEFwcGx5IG1pZGRsZXdhcmVcbiAgICAgICAgdmFyIG5leHQgPSBob29rO1xuICAgICAgICB2YXIgdXNlID0gY29uZmlnLnVzZTtcbiAgICAgICAgaWYgKHVzZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHVzZS5sZW5ndGg7IGktLSA+IDA7KSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IHVzZVtpXShuZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dChrZXksIGZuIHx8IGNvbmZpZy5mZXRjaGVyLCBjb25maWcpO1xuICAgIH07XG59O1xuXG4vLyBBZGQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBhIGxpc3Qgb2Yga2V5ZWQgY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCByZXR1cm5cbi8vIHRoZSB1bnN1YnNjcmliZSBmdW5jdGlvbi5cbnZhciBzdWJzY3JpYmVDYWxsYmFjayA9IGZ1bmN0aW9uIChrZXksIGNhbGxiYWNrcywgY2FsbGJhY2spIHtcbiAgICB2YXIga2V5ZWRSZXZhbGlkYXRvcnMgPSBjYWxsYmFja3Nba2V5XSB8fCAoY2FsbGJhY2tzW2tleV0gPSBbXSk7XG4gICAga2V5ZWRSZXZhbGlkYXRvcnMucHVzaChjYWxsYmFjayk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGluZGV4ID0ga2V5ZWRSZXZhbGlkYXRvcnMuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAvLyBPKDEpOiBmYXN0ZXIgdGhhbiBzcGxpY2VcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzW2luZGV4XSA9IGtleWVkUmV2YWxpZGF0b3JzW2tleWVkUmV2YWxpZGF0b3JzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAga2V5ZWRSZXZhbGlkYXRvcnMucG9wKCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxudmFyIFdJVEhfREVEVVBFID0geyBkZWR1cGU6IHRydWUgfTtcbnZhciB1c2VTV1JIYW5kbGVyID0gZnVuY3Rpb24gKF9rZXksIGZldGNoZXIsIGNvbmZpZykge1xuICAgIHZhciBjYWNoZSA9IGNvbmZpZy5jYWNoZSwgY29tcGFyZSA9IGNvbmZpZy5jb21wYXJlLCBmYWxsYmFja0RhdGEgPSBjb25maWcuZmFsbGJhY2tEYXRhLCBzdXNwZW5zZSA9IGNvbmZpZy5zdXNwZW5zZSwgcmV2YWxpZGF0ZU9uTW91bnQgPSBjb25maWcucmV2YWxpZGF0ZU9uTW91bnQsIHJlZnJlc2hJbnRlcnZhbCA9IGNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwsIHJlZnJlc2hXaGVuSGlkZGVuID0gY29uZmlnLnJlZnJlc2hXaGVuSGlkZGVuLCByZWZyZXNoV2hlbk9mZmxpbmUgPSBjb25maWcucmVmcmVzaFdoZW5PZmZsaW5lO1xuICAgIHZhciBfYSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSksIEVWRU5UX1JFVkFMSURBVE9SUyA9IF9hWzBdLCBTVEFURV9VUERBVEVSUyA9IF9hWzFdLCBNVVRBVElPTiA9IF9hWzJdLCBGRVRDSCA9IF9hWzNdO1xuICAgIC8vIGBrZXlgIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBTV1IgYGRhdGFgIHN0YXRlLCBga2V5SW5mb2AgaG9sZHMgZXh0cmFcbiAgICAvLyBzdGF0ZXMgc3VjaCBhcyBgZXJyb3JgIGFuZCBgaXNWYWxpZGF0aW5nYCBpbnNpZGUsXG4gICAgLy8gYWxsIG9mIHRoZW0gYXJlIGRlcml2ZWQgZnJvbSBgX2tleWAuXG4gICAgLy8gYGZuQXJnc2AgaXMgYW4gYXJyYXkgb2YgYXJndW1lbnRzIHBhcnNlZCBmcm9tIHRoZSBrZXksIHdoaWNoIHdpbGwgYmUgcGFzc2VkXG4gICAgLy8gdG8gdGhlIGZldGNoZXIuXG4gICAgdmFyIF9iID0gc2VyaWFsaXplKF9rZXkpLCBrZXkgPSBfYlswXSwgZm5BcmdzID0gX2JbMV0sIGtleUluZm8gPSBfYlsyXTtcbiAgICAvLyBJZiBpdCdzIHRoZSBpbml0aWFsIHJlbmRlciBvZiB0aGlzIGhvb2suXG4gICAgdmFyIGluaXRpYWxNb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBJZiB0aGUgaG9vayBpcyB1bm1vdW50ZWQgYWxyZWFkeS4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gcHJldmVudCBzb21lIGVmZmVjdHNcbiAgICAvLyB0byBiZSBjYWxsZWQgYWZ0ZXIgdW5tb3VudGluZy5cbiAgICB2YXIgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBSZWZzIHRvIGtlZXAgdGhlIGtleSBhbmQgY29uZmlnLlxuICAgIHZhciBrZXlSZWYgPSB1c2VSZWYoa2V5KTtcbiAgICB2YXIgZmV0Y2hlclJlZiA9IHVzZVJlZihmZXRjaGVyKTtcbiAgICB2YXIgY29uZmlnUmVmID0gdXNlUmVmKGNvbmZpZyk7XG4gICAgdmFyIGdldENvbmZpZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmZpZ1JlZi5jdXJyZW50OyB9O1xuICAgIHZhciBpc0FjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldENvbmZpZygpLmlzVmlzaWJsZSgpICYmIGdldENvbmZpZygpLmlzT25saW5lKCk7IH07XG4gICAgdmFyIHBhdGNoRmV0Y2hJbmZvID0gZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlLnNldChrZXlJbmZvLCBtZXJnZU9iamVjdHMoY2FjaGUuZ2V0KGtleUluZm8pLCBpbmZvKSk7XG4gICAgfTtcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgdGhhdCBTV1Igc2hvdWxkIHJldHVybi5cbiAgICB2YXIgY2FjaGVkID0gY2FjaGUuZ2V0KGtleSk7XG4gICAgdmFyIGZhbGxiYWNrID0gaXNVbmRlZmluZWQoZmFsbGJhY2tEYXRhKVxuICAgICAgICA/IGNvbmZpZy5mYWxsYmFja1trZXldXG4gICAgICAgIDogZmFsbGJhY2tEYXRhO1xuICAgIHZhciBkYXRhID0gaXNVbmRlZmluZWQoY2FjaGVkKSA/IGZhbGxiYWNrIDogY2FjaGVkO1xuICAgIHZhciBpbmZvID0gY2FjaGUuZ2V0KGtleUluZm8pIHx8IHt9O1xuICAgIHZhciBlcnJvciA9IGluZm8uZXJyb3I7XG4gICAgdmFyIGlzSW5pdGlhbE1vdW50ID0gIWluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgLy8gLSBTdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSdzIHN0YWxlIGRhdGEgZm9yIHRoZSBpbml0aWFsIHJlbmRlci5cbiAgICAvLyAtIE5vdCBzdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSBpcyBubyBmYWxsYmFjayBkYXRhIGFuZCBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQuXG4gICAgLy8gLSBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQgYnV0IGBkYXRhYCBpcyBub3QgZGVmaW5lZC5cbiAgICB2YXIgc2hvdWxkUmV2YWxpZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICBpZiAoaXNJbml0aWFsTW91bnQgJiYgIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVPbk1vdW50KSlcbiAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRlT25Nb3VudDtcbiAgICAgICAgLy8gSWYgaXQncyBwYXVzZWQsIHdlIHNraXAgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gVW5kZXIgc3VzcGVuc2UgbW9kZSwgaXQgd2lsbCBhbHdheXMgZmV0Y2ggb24gcmVuZGVyIGlmIHRoZXJlIGlzIG5vXG4gICAgICAgIC8vIHN0YWxlIGRhdGEgc28gbm8gbmVlZCB0byByZXZhbGlkYXRlIGltbWVkaWF0ZWx5IG9uIG1vdW50IGFnYWluLlxuICAgICAgICAvLyBJZiBkYXRhIGV4aXN0cywgb25seSByZXZhbGlkYXRlIGlmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgdHJ1ZS5cbiAgICAgICAgaWYgKHN1c3BlbnNlKVxuICAgICAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpID8gZmFsc2UgOiBjb25maWcucmV2YWxpZGF0ZUlmU3RhbGU7XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHN0YWxlIGRhdGEsIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZSBvbiBtb3VudDtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBzZXQgdG8gdHJ1ZSwgd2Ugd2lsbCBhbHdheXMgcmV2YWxpZGF0ZS5cbiAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpIHx8IGNvbmZpZy5yZXZhbGlkYXRlSWZTdGFsZTtcbiAgICB9O1xuICAgIC8vIFJlc29sdmUgdGhlIGN1cnJlbnQgdmFsaWRhdGluZyBzdGF0ZS5cbiAgICB2YXIgcmVzb2x2ZVZhbGlkYXRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICgha2V5IHx8ICFmZXRjaGVyKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoaW5mby5pc1ZhbGlkYXRpbmcpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gSWYgaXQncyBub3QgbW91bnRlZCB5ZXQgYW5kIGl0IHNob3VsZCByZXZhbGlkYXRlIG9uIG1vdW50LCByZXZhbGlkYXRlLlxuICAgICAgICByZXR1cm4gaXNJbml0aWFsTW91bnQgJiYgc2hvdWxkUmV2YWxpZGF0ZSgpO1xuICAgIH07XG4gICAgdmFyIGlzVmFsaWRhdGluZyA9IHJlc29sdmVWYWxpZGF0aW5nKCk7XG4gICAgdmFyIF9jID0gdXNlU3RhdGVXaXRoRGVwcyh7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgaXNWYWxpZGF0aW5nOiBpc1ZhbGlkYXRpbmdcbiAgICB9LCB1bm1vdW50ZWRSZWYpLCBzdGF0ZVJlZiA9IF9jWzBdLCBzdGF0ZURlcGVuZGVuY2llcyA9IF9jWzFdLCBzZXRTdGF0ZSA9IF9jWzJdO1xuICAgIC8vIFRoZSByZXZhbGlkYXRpb24gZnVuY3Rpb24gaXMgYSBjYXJlZnVsbHkgY3JhZnRlZCB3cmFwcGVyIG9mIHRoZSBvcmlnaW5hbFxuICAgIC8vIGBmZXRjaGVyYCwgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgbWFueSBlZGdlIGNhc2VzLlxuICAgIHZhciByZXZhbGlkYXRlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHJldmFsaWRhdGVPcHRzKSB7IHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY3VycmVudEZldGNoZXIsIG5ld0RhdGEsIHN0YXJ0QXQsIGxvYWRpbmcsIG9wdHMsIHNob3VsZFN0YXJ0TmV3UmVxdWVzdCwgaXNDdXJyZW50S2V5TW91bnRlZCwgY2xlYW51cFN0YXRlLCBuZXdTdGF0ZSwgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlLCBtdXRhdGlvbkluZm8sIGVycl8xO1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGZXRjaGVyID0gZmV0Y2hlclJlZi5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIWN1cnJlbnRGZXRjaGVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGZhbHNlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgb3B0cyA9IHJldmFsaWRhdGVPcHRzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRTdGFydE5ld1JlcXVlc3QgPSAhRkVUQ0hba2V5XSB8fCAhb3B0cy5kZWR1cGU7XG4gICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudEtleU1vdW50ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXVubW91bnRlZFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09PSBrZXlSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNsZWFudXBTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3Mgc3RpbGwgdGhlIHNhbWUgcmVxdWVzdCBiZWZvcmUgZGVsZXRpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdEluZm8gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RJbmZvICYmIHJlcXVlc3RJbmZvWzFdID09PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlID0geyBpc1ZhbGlkYXRpbmc6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoRmV0Y2hJbmZvKHsgaXNWYWxpZGF0aW5nOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBvbmx5IHNldCBzdGF0ZSBpZiBpdCdzIHNhZmUgKHN0aWxsIG1vdW50ZWQgd2l0aCB0aGUgc2FtZSBrZXkpLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgZmV0Y2hpbmcuIENoYW5nZSB0aGUgYGlzVmFsaWRhdGluZ2Agc3RhdGUsIHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoRmV0Y2hJbmZvKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWRhdGluZzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoeyBpc1ZhbGlkYXRpbmc6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgMywgLCA0XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlbGwgYWxsIG90aGVyIGhvb2tzIHRvIGNoYW5nZSB0aGUgYGlzVmFsaWRhdGluZ2Agc3RhdGUuXG4gICAgICAgICAgICAgICAgICAgICAgICBicm9hZGNhc3RTdGF0ZShjYWNoZSwga2V5LCBzdGF0ZVJlZi5jdXJyZW50LmRhdGEsIHN0YXRlUmVmLmN1cnJlbnQuZXJyb3IsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm8gY2FjaGUgYmVpbmcgcmVuZGVyZWQgY3VycmVudGx5IChpdCBzaG93cyBhIGJsYW5rIHBhZ2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgdHJpZ2dlciB0aGUgbG9hZGluZyBzbG93IGV2ZW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5sb2FkaW5nVGltZW91dCAmJiAhY2FjaGUuZ2V0KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRpbmcgJiYgaXNDdXJyZW50S2V5TW91bnRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkxvYWRpbmdTbG93KGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZy5sb2FkaW5nVGltZW91dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgcmVxdWVzdCBhbmQgc2F2ZSB0aGUgdGltZXN0YW1wLlxuICAgICAgICAgICAgICAgICAgICAgICAgRkVUQ0hba2V5XSA9IFtjdXJyZW50RmV0Y2hlci5hcHBseSh2b2lkIDAsIGZuQXJncyksIGdldFRpbWVzdGFtcCgpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYSA9IEZFVENIW2tleV0sIG5ld0RhdGEgPSBfYVswXSwgc3RhcnRBdCA9IF9hWzFdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBuZXdEYXRhXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIG5ld0RhdGEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IGlzbid0IGludGVycnVwdGVkLCBjbGVhbiBpdCB1cCBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZHVwbGljYXRpb24gaW50ZXJ2YWwuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNsZWFudXBTdGF0ZSwgY29uZmlnLmRlZHVwaW5nSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3JlIG90aGVyIG9uZ29pbmcgcmVxdWVzdChzKSwgc3RhcnRlZCBhZnRlciB0aGUgY3VycmVudCBvbmUsXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBjdXJyZW50IG9uZSB0byBhdm9pZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgICAgICAgICAgIC8vICAgcmVxMS0tLS0tLS0tLS0tLS0tLS0tLT5yZXMxICAgICAgICAoY3VycmVudCBvbmUpXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICByZXEyLS0tLS0tLS0tLS0tLS0tLT5yZXMyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSByZXF1ZXN0IHRoYXQgZmlyZWQgbGF0ZXIgd2lsbCBhbHdheXMgYmUga2VwdC5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRpbWVzdGFtcCBtYXliZSBiZSBgdW5kZWZpbmVkYCBvciBhIG51bWJlclxuICAgICAgICAgICAgICAgICAgICBpZiAoIUZFVENIW2tleV0gfHwgRkVUQ0hba2V5XVsxXSAhPT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0N1cnJlbnRLZXlNb3VudGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25EaXNjYXJkZWQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZmFsc2VdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIGVycm9yLlxuICAgICAgICAgICAgICAgICAgICBwYXRjaEZldGNoSW5mbyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogVU5ERUZJTkVEXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZS5lcnJvciA9IFVOREVGSU5FRDtcbiAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25JbmZvID0gTVVUQVRJT05ba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChtdXRhdGlvbkluZm8pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydEF0IDw9IG11dGF0aW9uSW5mb1swXSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QXQgPD0gbXV0YXRpb25JbmZvWzFdIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25JbmZvWzFdID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBmYWxzZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRGVlcCBjb21wYXJlIHdpdGggbGF0ZXN0IHN0YXRlIHRvIGF2b2lkIGV4dHJhIHJlLXJlbmRlcnMuXG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciBsb2NhbCBzdGF0ZSwgY29tcGFyZSBhbmQgYXNzaWduLlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmUoc3RhdGVSZWYuY3VycmVudC5kYXRhLCBuZXdEYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUuZGF0YSA9IG5ld0RhdGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIGFuZCBuZXdEYXRhIGFyZSBkZWVwbHkgZXF1YWxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IHNob3VsZCBiZSBzYWZlIHRvIGJyb2FkY2FzdCB0aGUgc3RhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUuZGF0YSA9IHN0YXRlUmVmLmN1cnJlbnQuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbiwgYGJyb2Nhc3RTdGF0ZWAgaW52b2tlcyB0aGUgYG9uU3RhdGVVcGRhdGVgIGZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggdGFrZXMgY2FyZSBvZiBhdm9pZGluZyB0aGUgcmUtcmVuZGVyXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGdsb2JhbCBzdGF0ZSwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBrZXkgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL3B1bGwvMTA1OFxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmUoY2FjaGUuZ2V0KGtleSksIG5ld0RhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zZXQoa2V5LCBuZXdEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIHRoZSBzdWNjZXNzZnVsIGNhbGxiYWNrIGlmIGl0J3MgdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0N1cnJlbnRLZXlNb3VudGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vblN1Y2Nlc3MobmV3RGF0YSwga2V5LCBjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgZXJyXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFudXBTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBOb3QgcGF1c2VkLCB3ZSBjb250aW51ZSBoYW5kbGluZyB0aGUgZXJyb3IuIE90aGVyd2lzZSBkaXNjYXJkIGl0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWdldENvbmZpZygpLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBhIG5ldyBlcnJvciwgZG9uJ3QgdXNlIGRlZXAgY29tcGFyaXNvbiBmb3IgZXJyb3JzLlxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hGZXRjaEluZm8oeyBlcnJvcjogZXJyXzEgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZS5lcnJvciA9IGVycl8xO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IgZXZlbnQgYW5kIHJldHJ5IGxvZ2ljLiBPbmx5IGZvciB0aGUgYWN0dWFsIHJlcXVlc3QsIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVkdXBlZCBvbmVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCAmJiBpc0N1cnJlbnRLZXlNb3VudGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkVycm9yKGVycl8xLCBrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgY29uZmlnLnNob3VsZFJldHJ5T25FcnJvciA9PT0gJ2Jvb2xlYW4nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaG91bGRSZXRyeU9uRXJyb3IpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGNvbmZpZy5zaG91bGRSZXRyeU9uRXJyb3IpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuc2hvdWxkUmV0cnlPbkVycm9yKGVycl8xKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXRyeWluZywgZGVkdXBlIGlzIGFsd2F5cyBlbmFibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGFjdGl2ZSwgc3RvcC4gSXQgd2lsbCBhdXRvIHJldmFsaWRhdGUgd2hlbiByZWZvY3VzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciByZWNvbm5lY3RpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkVycm9yUmV0cnkoZXJyXzEsIGtleSwgY29uZmlnLCByZXZhbGlkYXRlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudDogKG9wdHMucmV0cnlDb3VudCB8fCAwKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVkdXBlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIC8vIE1hcmsgbG9hZGluZyBhcyBzdG9wcGVkLlxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBob29rJ3Mgc3RhdGUuXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBIZXJlIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIHJlcXVlc3QsIG5lZWQgdG8gdGVsbCBhbGwgb3RoZXIgaG9va3MgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZWlyIHN0YXRlcy5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSAmJiBzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2FkY2FzdFN0YXRlKGNhY2hlLCBrZXksIG5ld1N0YXRlLmRhdGEsIG5ld1N0YXRlLmVycm9yLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRydWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsgfSwgXG4gICAgLy8gYHNldFN0YXRlYCBpcyBpbW11dGFibGUsIGFuZCBgZXZlbnRzQ2FsbGJhY2tgLCBgZm5BcmdzYCwgYGtleUluZm9gLFxuICAgIC8vIGFuZCBga2V5VmFsaWRhdGluZ2AgYXJlIGRlcGVuZGluZyBvbiBga2V5YCwgc28gd2UgY2FuIGV4Y2x1ZGUgdGhlbSBmcm9tXG4gICAgLy8gdGhlIGRlcHMgYXJyYXkuXG4gICAgLy9cbiAgICAvLyBGSVhNRTpcbiAgICAvLyBgZm5gIGFuZCBgY29uZmlnYCBtaWdodCBiZSBjaGFuZ2VkIGR1cmluZyB0aGUgbGlmZWN5Y2xlLFxuICAgIC8vIGJ1dCB0aGV5IG1pZ2h0IGJlIGNoYW5nZWQgZXZlcnkgcmVuZGVyIGxpa2UgdGhpcy5cbiAgICAvLyBgdXNlU1dSKCdrZXknLCAoKSA9PiBmZXRjaCgnL2FwaS8nKSwgeyBzdXNwZW5zZTogdHJ1ZSB9KWBcbiAgICAvLyBTbyB3ZSBvbWl0IHRoZSB2YWx1ZXMgZnJvbSB0aGUgZGVwcyBhcnJheVxuICAgIC8vIGV2ZW4gdGhvdWdoIGl0IG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBba2V5XSk7XG4gICAgLy8gU2ltaWxhciB0byB0aGUgZ2xvYmFsIG11dGF0ZSwgYnV0IGJvdW5kIHRvIHRoZSBjdXJyZW50IGNhY2hlIGFuZCBrZXkuXG4gICAgLy8gYGNhY2hlYCBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgdmFyIGJvdW5kTXV0YXRlID0gdXNlQ2FsbGJhY2soXG4gICAgLy8gQnkgdXNpbmcgYGJpbmRgIHdlIGRvbid0IG5lZWQgdG8gbW9kaWZ5IHRoZSBzaXplIG9mIHRoZSByZXN0IGFyZ3VtZW50cy5cbiAgICAvLyBEdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8zNzE4MSwgd2UgaGF2ZSB0b1xuICAgIC8vIGNhc3QgaXQgdG8gYW55IGZvciBub3cuXG4gICAgaW50ZXJuYWxNdXRhdGUuYmluZChVTkRFRklORUQsIGNhY2hlLCBmdW5jdGlvbiAoKSB7IHJldHVybiBrZXlSZWYuY3VycmVudDsgfSksIFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgLy8gQWx3YXlzIHVwZGF0ZSBmZXRjaGVyIGFuZCBjb25maWcgcmVmcy5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZmV0Y2hlclJlZi5jdXJyZW50ID0gZmV0Y2hlcjtcbiAgICAgICAgY29uZmlnUmVmLmN1cnJlbnQgPSBjb25maWc7XG4gICAgfSk7XG4gICAgLy8gQWZ0ZXIgbW91bnRlZCBvciBrZXkgY2hhbmdlZC5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFrZXkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBrZXlDaGFuZ2VkID0ga2V5ICE9PSBrZXlSZWYuY3VycmVudDtcbiAgICAgICAgdmFyIHNvZnRSZXZhbGlkYXRlID0gcmV2YWxpZGF0ZS5iaW5kKFVOREVGSU5FRCwgV0lUSF9ERURVUEUpO1xuICAgICAgICAvLyBFeHBvc2Ugc3RhdGUgdXBkYXRlciB0byBnbG9iYWwgZXZlbnQgbGlzdGVuZXJzLiBTbyB3ZSBjYW4gdXBkYXRlIGhvb2snc1xuICAgICAgICAvLyBpbnRlcm5hbCBzdGF0ZSBmcm9tIHRoZSBvdXRzaWRlLlxuICAgICAgICB2YXIgb25TdGF0ZVVwZGF0ZSA9IGZ1bmN0aW9uICh1cGRhdGVkRGF0YSwgdXBkYXRlZEVycm9yLCB1cGRhdGVkSXNWYWxpZGF0aW5nKSB7XG4gICAgICAgICAgICBzZXRTdGF0ZShtZXJnZU9iamVjdHMoe1xuICAgICAgICAgICAgICAgIGVycm9yOiB1cGRhdGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB1cGRhdGVkSXNWYWxpZGF0aW5nXG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8vIFNpbmNlIGBzZXRTdGF0ZWAgb25seSBzaGFsbG93bHkgY29tcGFyZXMgc3RhdGVzLCB3ZSBkbyBhIGRlZXBcbiAgICAgICAgICAgIC8vIGNvbXBhcmlzb24gaGVyZS5cbiAgICAgICAgICAgIGNvbXBhcmUoc3RhdGVSZWYuY3VycmVudC5kYXRhLCB1cGRhdGVkRGF0YSlcbiAgICAgICAgICAgICAgICA/IFVOREVGSU5FRFxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB1cGRhdGVkRGF0YVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gRXhwb3NlIHJldmFsaWRhdG9ycyB0byBnbG9iYWwgZXZlbnQgbGlzdGVuZXJzLiBTbyB3ZSBjYW4gdHJpZ2dlclxuICAgICAgICAvLyByZXZhbGlkYXRpb24gZnJvbSB0aGUgb3V0c2lkZS5cbiAgICAgICAgdmFyIG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSAwO1xuICAgICAgICB2YXIgb25SZXZhbGlkYXRlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09IEZPQ1VTX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPbkZvY3VzICYmXG4gICAgICAgICAgICAgICAgICAgIG5vdyA+IG5leHRGb2N1c1JldmFsaWRhdGVkQXQgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ID0gbm93ICsgZ2V0Q29uZmlnKCkuZm9jdXNUaHJvdHRsZUludGVydmFsO1xuICAgICAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gUkVDT05ORUNUX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPblJlY29ubmVjdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBNVVRBVEVfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgdW5zdWJVcGRhdGUgPSBzdWJzY3JpYmVDYWxsYmFjayhrZXksIFNUQVRFX1VQREFURVJTLCBvblN0YXRlVXBkYXRlKTtcbiAgICAgICAgdmFyIHVuc3ViRXZlbnRzID0gc3Vic2NyaWJlQ2FsbGJhY2soa2V5LCBFVkVOVF9SRVZBTElEQVRPUlMsIG9uUmV2YWxpZGF0ZSk7XG4gICAgICAgIC8vIE1hcmsgdGhlIGNvbXBvbmVudCBhcyBtb3VudGVkIGFuZCB1cGRhdGUgY29ycmVzcG9uZGluZyByZWZzLlxuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICBrZXlSZWYuY3VycmVudCA9IGtleTtcbiAgICAgICAgaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIC8vIFdoZW4gYGtleWAgdXBkYXRlcywgcmVzZXQgdGhlIHN0YXRlIHRvIHRoZSBpbml0aWFsIHZhbHVlXG4gICAgICAgIC8vIGFuZCB0cmlnZ2VyIGEgcmVyZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgICAgICBpZiAoa2V5Q2hhbmdlZCkge1xuICAgICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIGlzVmFsaWRhdGluZzogaXNWYWxpZGF0aW5nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmlnZ2VyIGEgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoc2hvdWxkUmV2YWxpZGF0ZSgpKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRGVsYXkgdGhlIHJldmFsaWRhdGUgaWYgd2UgaGF2ZSBkYXRhIHRvIHJldHVybiBzbyB3ZSB3b24ndCBibG9ja1xuICAgICAgICAgICAgICAgIC8vIHJlbmRlcmluZy5cbiAgICAgICAgICAgICAgICByQUYoc29mdFJldmFsaWRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBNYXJrIGl0IGFzIHVubW91bnRlZC5cbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHVuc3ViVXBkYXRlKCk7XG4gICAgICAgICAgICB1bnN1YkV2ZW50cygpO1xuICAgICAgICB9O1xuICAgIH0sIFtrZXksIHJldmFsaWRhdGVdKTtcbiAgICAvLyBQb2xsaW5nXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0aW1lcjtcbiAgICAgICAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgcGFzc2VkIGludGVydmFsXG4gICAgICAgICAgICAvLyAuLi5vciBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHVwZGF0ZWQgZGF0YSB0byBnZXQgdGhlIGludGVydmFsXG4gICAgICAgICAgICB2YXIgaW50ZXJ2YWwgPSBpc0Z1bmN0aW9uKHJlZnJlc2hJbnRlcnZhbClcbiAgICAgICAgICAgICAgICA/IHJlZnJlc2hJbnRlcnZhbChkYXRhKVxuICAgICAgICAgICAgICAgIDogcmVmcmVzaEludGVydmFsO1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzdGFydCBuZXh0IGludGVydmFsIGlmIGByZWZyZXNoSW50ZXJ2YWxgIGlzIG5vdCAwLCBhbmQ6XG4gICAgICAgICAgICAvLyAtIGBmb3JjZWAgaXMgdHJ1ZSwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHBvbGxpbmdcbiAgICAgICAgICAgIC8vIC0gb3IgYHRpbWVyYCBpcyBub3QgMCwgd2hpY2ggbWVhbnMgdGhlIGVmZmVjdCB3YXNuJ3QgY2FuY2VsZWRcbiAgICAgICAgICAgIGlmIChpbnRlcnZhbCAmJiB0aW1lciAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZXhlY3V0ZSwgaW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIE9LIHRvIGV4ZWN1dGU6XG4gICAgICAgICAgICAvLyBPbmx5IHJldmFsaWRhdGUgd2hlbiB0aGUgcGFnZSBpcyB2aXNpYmxlLCBvbmxpbmUgYW5kIG5vdCBlcnJvcmVkLlxuICAgICAgICAgICAgaWYgKCFzdGF0ZVJlZi5jdXJyZW50LmVycm9yICYmXG4gICAgICAgICAgICAgICAgKHJlZnJlc2hXaGVuSGlkZGVuIHx8IGdldENvbmZpZygpLmlzVmlzaWJsZSgpKSAmJlxuICAgICAgICAgICAgICAgIChyZWZyZXNoV2hlbk9mZmxpbmUgfHwgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKSkpIHtcbiAgICAgICAgICAgICAgICByZXZhbGlkYXRlKFdJVEhfREVEVVBFKS50aGVuKG5leHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gU2NoZWR1bGUgbmV4dCBpbnRlcnZhbCB0byBjaGVjayBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICB0aW1lciA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtyZWZyZXNoSW50ZXJ2YWwsIHJlZnJlc2hXaGVuSGlkZGVuLCByZWZyZXNoV2hlbk9mZmxpbmUsIHJldmFsaWRhdGVdKTtcbiAgICAvLyBEaXNwbGF5IGRlYnVnIGluZm8gaW4gUmVhY3QgRGV2VG9vbHMuXG4gICAgdXNlRGVidWdWYWx1ZShkYXRhKTtcbiAgICAvLyBJbiBTdXNwZW5zZSBtb2RlLCB3ZSBjYW4ndCByZXR1cm4gdGhlIGVtcHR5IGBkYXRhYCBzdGF0ZS5cbiAgICAvLyBJZiB0aGVyZSBpcyBgZXJyb3JgLCB0aGUgYGVycm9yYCBuZWVkcyB0byBiZSB0aHJvd24gdG8gdGhlIGVycm9yIGJvdW5kYXJ5LlxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGBlcnJvcmAsIHRoZSBgcmV2YWxpZGF0aW9uYCBwcm9taXNlIG5lZWRzIHRvIGJlIHRocm93biB0b1xuICAgIC8vIHRoZSBzdXNwZW5zZSBib3VuZGFyeS5cbiAgICBpZiAoc3VzcGVuc2UgJiYgaXNVbmRlZmluZWQoZGF0YSkgJiYga2V5KSB7XG4gICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgZmV0Y2hlciBhbmQgY29uZmlnIHJlZnMgZXZlbiB3aXRoIHRoZSBTdXNwZW5zZSBtb2RlLlxuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhyb3cgaXNVbmRlZmluZWQoZXJyb3IpID8gcmV2YWxpZGF0ZShXSVRIX0RFRFVQRSkgOiBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbXV0YXRlOiBib3VuZE11dGF0ZSxcbiAgICAgICAgZ2V0IGRhdGEoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5kYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBpc1ZhbGlkYXRpbmcoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc1ZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRhdGluZztcbiAgICAgICAgfVxuICAgIH07XG59O1xudmFyIFNXUkNvbmZpZyA9IE9CSkVDVC5kZWZpbmVQcm9wZXJ0eShTV1JDb25maWckMSwgJ2RlZmF1bHQnLCB7XG4gICAgdmFsdWU6IGRlZmF1bHRDb25maWdcbn0pO1xudmFyIHVuc3RhYmxlX3NlcmlhbGl6ZSA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHNlcmlhbGl6ZShrZXkpWzBdOyB9O1xudmFyIHVzZVNXUiA9IHdpdGhBcmdzKHVzZVNXUkhhbmRsZXIpO1xuXG4vLyB1c2VTV1JcblxuZXhwb3J0IHsgU1dSQ29uZmlnLCB1c2VTV1IgYXMgZGVmYXVsdCwgbXV0YXRlLCB1bnN0YWJsZV9zZXJpYWxpemUsIHVzZVNXUkNvbmZpZyB9O1xuIiwiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU1dSQ29uZmlnIH0gZnJvbSBcInN3clwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlU1dSSG9va3NDb25maWcoKSB7XG4gICAgdmFyIHN3ckNvbmZpZyA9IHVzZVNXUkNvbmZpZygpO1xuICAgIHZhciB2YWx1ZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkgeyByZXR1cm4gKHsgbXV0YXRlOiBzd3JDb25maWcubXV0YXRlLCBjYWNoZTogc3dyQ29uZmlnLmNhY2hlIH0pOyB9LCBbc3dyQ29uZmlnLm11dGF0ZSwgc3dyQ29uZmlnLmNhY2hlXSk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlU1dSSG9va3NDb25maWcuanMubWFwIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRvZ2dsZShpbml0aWFsVmFsdWUpIHtcbiAgICBpZiAoaW5pdGlhbFZhbHVlID09PSB2b2lkIDApIHsgaW5pdGlhbFZhbHVlID0gZmFsc2U7IH1cbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoaW5pdGlhbFZhbHVlKSwgMiksIHZhbHVlID0gX2FbMF0sIHNldFZhbHVlID0gX2FbMV07XG4gICAgdmFyIHRvZ2dsZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0VmFsdWUoZnVuY3Rpb24gKHByZXZWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhcHJldlZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIFt2YWx1ZSwgdG9nZ2xlXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVRvZ2dsZS5qcy5tYXAiLCIvKiohIFxuICogaG90a2V5cy1qcyB2My45LjMgXG4gKiBBIHNpbXBsZSBtaWNyby1saWJyYXJ5IGZvciBkZWZpbmluZyBhbmQgZGlzcGF0Y2hpbmcga2V5Ym9hcmQgc2hvcnRjdXRzLiBJdCBoYXMgbm8gZGVwZW5kZW5jaWVzLiBcbiAqIFxuICogQ29weXJpZ2h0IChjKSAyMDIyIGtlbm55IHdvbmcgPHdvd29ob29AcXEuY29tPiBcbiAqIGh0dHA6Ly9qYXl3Y2psb3ZlLmdpdGh1Yi5pby9ob3RrZXlzIFxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIFxuICovXG5cbnZhciBpc2ZmID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gMCA6IGZhbHNlOyAvLyDnu5Hlrprkuovku7ZcblxuZnVuY3Rpb24gYWRkRXZlbnQob2JqZWN0LCBldmVudCwgbWV0aG9kLCB1c2VDYXB0dXJlKSB7XG4gIGlmIChvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIG9iamVjdC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBtZXRob2QsIHVzZUNhcHR1cmUpO1xuICB9IGVsc2UgaWYgKG9iamVjdC5hdHRhY2hFdmVudCkge1xuICAgIG9iamVjdC5hdHRhY2hFdmVudChcIm9uXCIuY29uY2F0KGV2ZW50KSwgZnVuY3Rpb24gKCkge1xuICAgICAgbWV0aG9kKHdpbmRvdy5ldmVudCk7XG4gICAgfSk7XG4gIH1cbn0gLy8g5L+u6aWw6ZSu6L2s5o2i5oiQ5a+55bqU55qE6ZSu56CBXG5cblxuZnVuY3Rpb24gZ2V0TW9kcyhtb2RpZmllciwga2V5KSB7XG4gIHZhciBtb2RzID0ga2V5LnNsaWNlKDAsIGtleS5sZW5ndGggLSAxKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZHMubGVuZ3RoOyBpKyspIHtcbiAgICBtb2RzW2ldID0gbW9kaWZpZXJbbW9kc1tpXS50b0xvd2VyQ2FzZSgpXTtcbiAgfVxuXG4gIHJldHVybiBtb2RzO1xufSAvLyDlpITnkIbkvKDnmoRrZXnlrZfnrKbkuLLovazmjaLmiJDmlbDnu4RcblxuXG5mdW5jdGlvbiBnZXRLZXlzKGtleSkge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIGtleSA9ICcnO1xuICBrZXkgPSBrZXkucmVwbGFjZSgvXFxzL2csICcnKTsgLy8g5Yy56YWN5Lu75L2V56m655m95a2X56ymLOWMheaLrOepuuagvOOAgeWItuihqOespuOAgeaNoumhteespuetieetiVxuXG4gIHZhciBrZXlzID0ga2V5LnNwbGl0KCcsJyk7IC8vIOWQjOaXtuiuvue9ruWkmuS4quW/q+aNt+mUru+8jOS7pScsJ+WIhuWJslxuXG4gIHZhciBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpOyAvLyDlv6vmjbfplK7lj6/og73ljIXlkKsnLCfvvIzpnIDnibnmrorlpITnkIZcblxuICBmb3IgKDsgaW5kZXggPj0gMDspIHtcbiAgICBrZXlzW2luZGV4IC0gMV0gKz0gJywnO1xuICAgIGtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59IC8vIOavlOi+g+S/rumlsOmUrueahOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGNvbXBhcmVBcnJheShhMSwgYTIpIHtcbiAgdmFyIGFycjEgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTEgOiBhMjtcbiAgdmFyIGFycjIgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTIgOiBhMTtcbiAgdmFyIGlzSW5kZXggPSB0cnVlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnIyLmluZGV4T2YoYXJyMVtpXSkgPT09IC0xKSBpc0luZGV4ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNJbmRleDtcbn1cblxudmFyIF9rZXlNYXAgPSB7XG4gIGJhY2tzcGFjZTogOCxcbiAgdGFiOiA5LFxuICBjbGVhcjogMTIsXG4gIGVudGVyOiAxMyxcbiAgcmV0dXJuOiAxMyxcbiAgZXNjOiAyNyxcbiAgZXNjYXBlOiAyNyxcbiAgc3BhY2U6IDMyLFxuICBsZWZ0OiAzNyxcbiAgdXA6IDM4LFxuICByaWdodDogMzksXG4gIGRvd246IDQwLFxuICBkZWw6IDQ2LFxuICBkZWxldGU6IDQ2LFxuICBpbnM6IDQ1LFxuICBpbnNlcnQ6IDQ1LFxuICBob21lOiAzNixcbiAgZW5kOiAzNSxcbiAgcGFnZXVwOiAzMyxcbiAgcGFnZWRvd246IDM0LFxuICBjYXBzbG9jazogMjAsXG4gIG51bV8wOiA5NixcbiAgbnVtXzE6IDk3LFxuICBudW1fMjogOTgsXG4gIG51bV8zOiA5OSxcbiAgbnVtXzQ6IDEwMCxcbiAgbnVtXzU6IDEwMSxcbiAgbnVtXzY6IDEwMixcbiAgbnVtXzc6IDEwMyxcbiAgbnVtXzg6IDEwNCxcbiAgbnVtXzk6IDEwNSxcbiAgbnVtX211bHRpcGx5OiAxMDYsXG4gIG51bV9hZGQ6IDEwNyxcbiAgbnVtX2VudGVyOiAxMDgsXG4gIG51bV9zdWJ0cmFjdDogMTA5LFxuICBudW1fZGVjaW1hbDogMTEwLFxuICBudW1fZGl2aWRlOiAxMTEsXG4gICfih6onOiAyMCxcbiAgJywnOiAxODgsXG4gICcuJzogMTkwLFxuICAnLyc6IDE5MSxcbiAgJ2AnOiAxOTIsXG4gICctJzogaXNmZiA/IDE3MyA6IDE4OSxcbiAgJz0nOiBpc2ZmID8gNjEgOiAxODcsXG4gICc7JzogaXNmZiA/IDU5IDogMTg2LFxuICAnXFwnJzogMjIyLFxuICAnWyc6IDIxOSxcbiAgJ10nOiAyMjEsXG4gICdcXFxcJzogMjIwXG59OyAvLyBNb2RpZmllciBLZXlzXG5cbnZhciBfbW9kaWZpZXIgPSB7XG4gIC8vIHNoaWZ0S2V5XG4gICfih6cnOiAxNixcbiAgc2hpZnQ6IDE2LFxuICAvLyBhbHRLZXlcbiAgJ+KMpSc6IDE4LFxuICBhbHQ6IDE4LFxuICBvcHRpb246IDE4LFxuICAvLyBjdHJsS2V5XG4gICfijIMnOiAxNyxcbiAgY3RybDogMTcsXG4gIGNvbnRyb2w6IDE3LFxuICAvLyBtZXRhS2V5XG4gICfijJgnOiA5MSxcbiAgY21kOiA5MSxcbiAgY29tbWFuZDogOTFcbn07XG52YXIgbW9kaWZpZXJNYXAgPSB7XG4gIDE2OiAnc2hpZnRLZXknLFxuICAxODogJ2FsdEtleScsXG4gIDE3OiAnY3RybEtleScsXG4gIDkxOiAnbWV0YUtleScsXG4gIHNoaWZ0S2V5OiAxNixcbiAgY3RybEtleTogMTcsXG4gIGFsdEtleTogMTgsXG4gIG1ldGFLZXk6IDkxXG59O1xudmFyIF9tb2RzID0ge1xuICAxNjogZmFsc2UsXG4gIDE4OiBmYWxzZSxcbiAgMTc6IGZhbHNlLFxuICA5MTogZmFsc2Vcbn07XG52YXIgX2hhbmRsZXJzID0ge307IC8vIEYxfkYxMiBzcGVjaWFsIGtleVxuXG5mb3IgKHZhciBrID0gMTsgayA8IDIwOyBrKyspIHtcbiAgX2tleU1hcFtcImZcIi5jb25jYXQoayldID0gMTExICsgaztcbn1cblxudmFyIF9kb3duS2V5cyA9IFtdOyAvLyDorrDlvZXmkYHkuIvnmoTnu5HlrprplK5cblxudmFyIHdpbkxpc3RlbmRGb2N1cyA9IGZhbHNlOyAvLyB3aW5kb3fmmK/lkKblt7Lnu4/nm5HlkKzkuoZmb2N1c+S6i+S7tlxuXG52YXIgX3Njb3BlID0gJ2FsbCc7IC8vIOm7mOiupOeDremUruiMg+WbtFxuXG52YXIgZWxlbWVudEhhc0JpbmRFdmVudCA9IFtdOyAvLyDlt7Lnu5Hlrprkuovku7bnmoToioLngrnorrDlvZVcbi8vIOi/lOWbnumUrueggVxuXG52YXIgY29kZSA9IGZ1bmN0aW9uIGNvZGUoeCkge1xuICByZXR1cm4gX2tleU1hcFt4LnRvTG93ZXJDYXNlKCldIHx8IF9tb2RpZmllclt4LnRvTG93ZXJDYXNlKCldIHx8IHgudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApO1xufTsgLy8g6K6+572u6I635Y+W5b2T5YmN6IyD5Zu077yI6buY6K6k5Li6J+aJgOaciSfvvIlcblxuXG5mdW5jdGlvbiBzZXRTY29wZShzY29wZSkge1xuICBfc2NvcGUgPSBzY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5b2T5YmN6IyD5Zu0XG5cblxuZnVuY3Rpb24gZ2V0U2NvcGUoKSB7XG4gIHJldHVybiBfc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluaRgeS4i+e7keWumumUrueahOmUruWAvFxuXG5cbmZ1bmN0aW9uIGdldFByZXNzZWRLZXlDb2RlcygpIHtcbiAgcmV0dXJuIF9kb3duS2V5cy5zbGljZSgwKTtcbn0gLy8g6KGo5Y2V5o6n5Lu25o6n5Lu25Yik5patIOi/lOWbniBCb29sZWFuXG4vLyBob3RrZXkgaXMgZWZmZWN0aXZlIG9ubHkgd2hlbiBmaWx0ZXIgcmV0dXJuIHRydWVcblxuXG5mdW5jdGlvbiBmaWx0ZXIoZXZlbnQpIHtcbiAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICB2YXIgdGFnTmFtZSA9IHRhcmdldC50YWdOYW1lO1xuICB2YXIgZmxhZyA9IHRydWU7IC8vIGlnbm9yZTogaXNDb250ZW50RWRpdGFibGUgPT09ICd0cnVlJywgPGlucHV0PiBhbmQgPHRleHRhcmVhPiB3aGVuIHJlYWRPbmx5IHN0YXRlIGlzIGZhbHNlLCA8c2VsZWN0PlxuXG4gIGlmICh0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgfHwgKHRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCB0YWdOYW1lID09PSAnU0VMRUNUJykgJiYgIXRhcmdldC5yZWFkT25seSkge1xuICAgIGZsYWcgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmbGFnO1xufSAvLyDliKTmlq3mkYHkuIvnmoTplK7mmK/lkKbkuLrmn5DkuKrplK7vvIzov5Tlm550cnVl5oiW6ICFZmFsc2VcblxuXG5mdW5jdGlvbiBpc1ByZXNzZWQoa2V5Q29kZSkge1xuICBpZiAodHlwZW9mIGtleUNvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAga2V5Q29kZSA9IGNvZGUoa2V5Q29kZSk7IC8vIOi9rOaNouaIkOmUrueggVxuICB9XG5cbiAgcmV0dXJuIF9kb3duS2V5cy5pbmRleE9mKGtleUNvZGUpICE9PSAtMTtcbn0gLy8g5b6q546v5Yig6ZmkaGFuZGxlcnPkuK3nmoTmiYDmnIkgc2NvcGUo6IyD5Zu0KVxuXG5cbmZ1bmN0aW9uIGRlbGV0ZVNjb3BlKHNjb3BlLCBuZXdTY29wZSkge1xuICB2YXIgaGFuZGxlcnM7XG4gIHZhciBpOyAvLyDmsqHmnInmjIflrppzY29wZe+8jOiOt+WPlnNjb3BlXG5cbiAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuXG4gIGZvciAodmFyIGtleSBpbiBfaGFuZGxlcnMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9oYW5kbGVycywga2V5KSkge1xuICAgICAgaGFuZGxlcnMgPSBfaGFuZGxlcnNba2V5XTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDspIHtcbiAgICAgICAgaWYgKGhhbmRsZXJzW2ldLnNjb3BlID09PSBzY29wZSkgaGFuZGxlcnMuc3BsaWNlKGksIDEpO2Vsc2UgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyDlpoLmnpxzY29wZeiiq+WIoOmZpO+8jOWwhnNjb3Bl6YeN572u5Li6YWxsXG5cblxuICBpZiAoZ2V0U2NvcGUoKSA9PT0gc2NvcGUpIHNldFNjb3BlKG5ld1Njb3BlIHx8ICdhbGwnKTtcbn0gLy8g5riF6Zmk5L+u6aWw6ZSuXG5cblxuZnVuY3Rpb24gY2xlYXJNb2RpZmllcihldmVudCkge1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTtcblxuICB2YXIgaSA9IF9kb3duS2V5cy5pbmRleE9mKGtleSk7IC8vIOS7juWIl+ihqOS4rea4hemZpOaMieWOi+i/h+eahOmUrlxuXG5cbiAgaWYgKGkgPj0gMCkge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoaSwgMSk7XG4gIH0gLy8g54m55q6K5aSE55CGIGNtbWFuZCDplK7vvIzlnKggY21tYW5kIOe7hOWQiOW/q+aNt+mUriBrZXl1cCDlj6rmiafooYzkuIDmrKHnmoTpl67pophcblxuXG4gIGlmIChldmVudC5rZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdtZXRhJykge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoMCwgX2Rvd25LZXlzLmxlbmd0aCk7XG4gIH0gLy8g5L+u6aWw6ZSuIHNoaWZ0S2V5IGFsdEtleSBjdHJsS2V5IChjb21tYW5kfHxtZXRhS2V5KSDmuIXpmaRcblxuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IGZhbHNlOyAvLyDlsIbkv67ppbDplK7ph43nva7kuLpmYWxzZVxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bmJpbmQoa2V5c0luZm8pIHtcbiAgLy8gdW5iaW5kKCksIHVuYmluZCBhbGwga2V5c1xuICBpZiAoIWtleXNJbmZvKSB7XG4gICAgT2JqZWN0LmtleXMoX2hhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBkZWxldGUgX2hhbmRsZXJzW2tleV07XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShrZXlzSW5mbykpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgOiB1bmJpbmQoW3trZXk6ICdjdHJsK2EnLCBzY29wZTogJ3MxJ30sIHtrZXk6ICdjdHJsLWEnLCBzY29wZTogJ3MyJywgc3BsaXRLZXk6ICctJ31dKVxuICAgIGtleXNJbmZvLmZvckVhY2goZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgIGlmIChpbmZvLmtleSkgZWFjaFVuYmluZChpbmZvKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdvYmplY3QnKSB7XG4gICAgLy8gc3VwcG9ydCBsaWtlIHVuYmluZCh7a2V5OiAnY3RybCthLCBjdHJsK2InLCBzY29wZTonYWJjJ30pXG4gICAgaWYgKGtleXNJbmZvLmtleSkgZWFjaFVuYmluZChrZXlzSW5mbyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleXNJbmZvID09PSAnc3RyaW5nJykge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnQgb2xkIG1ldGhvZFxuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB2YXIgc2NvcGUgPSBhcmdzWzBdLFxuICAgICAgICBtZXRob2QgPSBhcmdzWzFdO1xuXG4gICAgaWYgKHR5cGVvZiBzY29wZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbWV0aG9kID0gc2NvcGU7XG4gICAgICBzY29wZSA9ICcnO1xuICAgIH1cblxuICAgIGVhY2hVbmJpbmQoe1xuICAgICAga2V5OiBrZXlzSW5mbyxcbiAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgc3BsaXRLZXk6ICcrJ1xuICAgIH0pO1xuICB9XG59IC8vIOino+mZpOe7keWumuafkOS4quiMg+WbtOeahOW/q+aNt+mUrlxuXG5cbnZhciBlYWNoVW5iaW5kID0gZnVuY3Rpb24gZWFjaFVuYmluZChfcmVmKSB7XG4gIHZhciBrZXkgPSBfcmVmLmtleSxcbiAgICAgIHNjb3BlID0gX3JlZi5zY29wZSxcbiAgICAgIG1ldGhvZCA9IF9yZWYubWV0aG9kLFxuICAgICAgX3JlZiRzcGxpdEtleSA9IF9yZWYuc3BsaXRLZXksXG4gICAgICBzcGxpdEtleSA9IF9yZWYkc3BsaXRLZXkgPT09IHZvaWQgMCA/ICcrJyA6IF9yZWYkc3BsaXRLZXk7XG4gIHZhciBtdWx0aXBsZUtleXMgPSBnZXRLZXlzKGtleSk7XG4gIG11bHRpcGxlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChvcmlnaW5LZXkpIHtcbiAgICB2YXIgdW5iaW5kS2V5cyA9IG9yaWdpbktleS5zcGxpdChzcGxpdEtleSk7XG4gICAgdmFyIGxlbiA9IHVuYmluZEtleXMubGVuZ3RoO1xuICAgIHZhciBsYXN0S2V5ID0gdW5iaW5kS2V5c1tsZW4gLSAxXTtcbiAgICB2YXIga2V5Q29kZSA9IGxhc3RLZXkgPT09ICcqJyA/ICcqJyA6IGNvZGUobGFzdEtleSk7XG4gICAgaWYgKCFfaGFuZGxlcnNba2V5Q29kZV0pIHJldHVybjsgLy8g5Yik5pat5piv5ZCm5Lyg5YWl6IyD5Zu077yM5rKh5pyJ5bCx6I635Y+W6IyD5Zu0XG5cbiAgICBpZiAoIXNjb3BlKSBzY29wZSA9IGdldFNjb3BlKCk7XG4gICAgdmFyIG1vZHMgPSBsZW4gPiAxID8gZ2V0TW9kcyhfbW9kaWZpZXIsIHVuYmluZEtleXMpIDogW107XG4gICAgX2hhbmRsZXJzW2tleUNvZGVdID0gX2hhbmRsZXJzW2tleUNvZGVdLmZpbHRlcihmdW5jdGlvbiAocmVjb3JkKSB7XG4gICAgICAvLyDpgJrov4flh73mlbDliKTmlq3vvIzmmK/lkKbop6PpmaTnu5HlrprvvIzlh73mlbDnm7jnrYnnm7TmjqXov5Tlm55cbiAgICAgIHZhciBpc01hdGNoaW5nTWV0aG9kID0gbWV0aG9kID8gcmVjb3JkLm1ldGhvZCA9PT0gbWV0aG9kIDogdHJ1ZTtcbiAgICAgIHJldHVybiAhKGlzTWF0Y2hpbmdNZXRob2QgJiYgcmVjb3JkLnNjb3BlID09PSBzY29wZSAmJiBjb21wYXJlQXJyYXkocmVjb3JkLm1vZHMsIG1vZHMpKTtcbiAgICB9KTtcbiAgfSk7XG59OyAvLyDlr7nnm5HlkKzlr7nlupTlv6vmjbfplK7nmoTlm57osIPlh73mlbDov5vooYzlpITnkIZcblxuXG5mdW5jdGlvbiBldmVudEhhbmRsZXIoZXZlbnQsIGhhbmRsZXIsIHNjb3BlLCBlbGVtZW50KSB7XG4gIGlmIChoYW5kbGVyLmVsZW1lbnQgIT09IGVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbW9kaWZpZXJzTWF0Y2g7IC8vIOeci+Wug+aYr+WQpuWcqOW9k+WJjeiMg+WbtFxuXG4gIGlmIChoYW5kbGVyLnNjb3BlID09PSBzY29wZSB8fCBoYW5kbGVyLnNjb3BlID09PSAnYWxsJykge1xuICAgIC8vIOajgOafpeaYr+WQpuWMuemFjeS/rumlsOespu+8iOWmguaenOaciei/lOWbnnRydWXvvIlcbiAgICBtb2RpZmllcnNNYXRjaCA9IGhhbmRsZXIubW9kcy5sZW5ndGggPiAwO1xuXG4gICAgZm9yICh2YXIgeSBpbiBfbW9kcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgeSkpIHtcbiAgICAgICAgaWYgKCFfbW9kc1t5XSAmJiBoYW5kbGVyLm1vZHMuaW5kZXhPZigreSkgPiAtMSB8fCBfbW9kc1t5XSAmJiBoYW5kbGVyLm1vZHMuaW5kZXhPZigreSkgPT09IC0xKSB7XG4gICAgICAgICAgbW9kaWZpZXJzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8g6LCD55So5aSE55CG56iL5bqP77yM5aaC5p6c5piv5L+u6aWw6ZSu5LiN5YGa5aSE55CGXG5cblxuICAgIGlmIChoYW5kbGVyLm1vZHMubGVuZ3RoID09PSAwICYmICFfbW9kc1sxNl0gJiYgIV9tb2RzWzE4XSAmJiAhX21vZHNbMTddICYmICFfbW9kc1s5MV0gfHwgbW9kaWZpZXJzTWF0Y2ggfHwgaGFuZGxlci5zaG9ydGN1dCA9PT0gJyonKSB7XG4gICAgICBpZiAoaGFuZGxlci5tZXRob2QoZXZlbnQsIGhhbmRsZXIpID09PSBmYWxzZSkge1xuICAgICAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZWxzZSBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKGV2ZW50LmNhbmNlbEJ1YmJsZSkgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8g5aSE55CGa2V5ZG93buS6i+S7tlxuXG5cbmZ1bmN0aW9uIGRpc3BhdGNoKGV2ZW50LCBlbGVtZW50KSB7XG4gIHZhciBhc3RlcmlzayA9IF9oYW5kbGVyc1snKiddO1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTsgLy8g6KGo5Y2V5o6n5Lu26L+H5rukIOm7mOiupOihqOWNleaOp+S7tuS4jeinpuWPkeW/q+aNt+mUrlxuXG4gIGlmICghaG90a2V5cy5maWx0ZXIuY2FsbCh0aGlzLCBldmVudCkpIHJldHVybjsgLy8gR2Vja28oRmlyZWZveCnnmoRjb21tYW5k6ZSu5YC8MjI077yM5ZyoV2Via2l0KENocm9tZSnkuK3kv53mjIHkuIDoh7RcbiAgLy8gV2Via2l05bem5Y+zIGNvbW1hbmQg6ZSu5YC85LiN5LiA5qC3XG5cbiAgaWYgKGtleSA9PT0gOTMgfHwga2V5ID09PSAyMjQpIGtleSA9IDkxO1xuICAvKipcbiAgICogQ29sbGVjdCBib3VuZCBrZXlzXG4gICAqIElmIGFuIElucHV0IE1ldGhvZCBFZGl0b3IgaXMgcHJvY2Vzc2luZyBrZXkgaW5wdXQgYW5kIHRoZSBldmVudCBpcyBrZXlkb3duLCByZXR1cm4gMjI5LlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNTA0MzkzNC9pcy1pdC1vay10by1pZ25vcmUta2V5ZG93bi1ldmVudHMtd2l0aC1rZXljb2RlLTIyOVxuICAgKiBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctZG9tLzIwMTBKdWxTZXAvYXR0LTAxODIva2V5Q29kZS1zcGVjLmh0bWxcbiAgICovXG5cbiAgaWYgKF9kb3duS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmIGtleSAhPT0gMjI5KSBfZG93bktleXMucHVzaChrZXkpO1xuICAvKipcbiAgICogSmVzdCB0ZXN0IGNhc2VzIGFyZSByZXF1aXJlZC5cbiAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgKi9cblxuICBbJ2N0cmxLZXknLCAnYWx0S2V5JywgJ3NoaWZ0S2V5JywgJ21ldGFLZXknXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXlOYW1lKSB7XG4gICAgdmFyIGtleU51bSA9IG1vZGlmaWVyTWFwW2tleU5hbWVdO1xuXG4gICAgaWYgKGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaChrZXlOdW0pO1xuICAgIH0gZWxzZSBpZiAoIWV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkgPiAtMSkge1xuICAgICAgX2Rvd25LZXlzLnNwbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pLCAxKTtcbiAgICB9IGVsc2UgaWYgKGtleU5hbWUgPT09ICdtZXRhS2V5JyAmJiBldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMubGVuZ3RoID09PSAzKSB7XG4gICAgICAvKipcbiAgICAgICAqIEZpeCBpZiBDb21tYW5kIGlzIHByZXNzZWQ6XG4gICAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgKi9cbiAgICAgIGlmICghKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5KSkge1xuICAgICAgICBfZG93bktleXMgPSBfZG93bktleXMuc2xpY2UoX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSB0cnVlOyAvLyDlsIbnibnmrorlrZfnrKbnmoRrZXnms6jlhozliLAgaG90a2V5cyDkuIpcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYXN0ZXJpc2spIHJldHVybjtcbiAgfSAvLyDlsIYgbW9kaWZpZXJNYXAg6YeM6Z2i55qE5L+u6aWw6ZSu57uR5a6a5YiwIGV2ZW50IOS4rVxuXG5cbiAgZm9yICh2YXIgZSBpbiBfbW9kcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX21vZHMsIGUpKSB7XG4gICAgICBfbW9kc1tlXSA9IGV2ZW50W21vZGlmaWVyTWFwW2VdXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXl3Y2psb3ZlL2hvdGtleXMvcHVsbC8xMjlcbiAgICogVGhpcyBzb2x2ZXMgdGhlIGlzc3VlIGluIEZpcmVmb3ggb24gV2luZG93cyB3aGVyZSBob3RrZXlzIGNvcnJlc3BvbmRpbmcgdG8gc3BlY2lhbCBjaGFyYWN0ZXJzIHdvdWxkIG5vdCB0cmlnZ2VyLlxuICAgKiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgY3RybCthbHQrbSBvbiBhIFN3ZWRpc2gga2V5Ym9hcmQgd2hpY2ggaXMgdXNlZCB0byB0eXBlIM68LlxuICAgKiBCcm93c2VyIHN1cHBvcnQ6IGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9a2V5Ym9hcmRldmVudC1nZXRtb2RpZmllcnN0YXRlXG4gICAqL1xuXG5cbiAgaWYgKGV2ZW50LmdldE1vZGlmaWVyU3RhdGUgJiYgIShldmVudC5hbHRLZXkgJiYgIWV2ZW50LmN0cmxLZXkpICYmIGV2ZW50LmdldE1vZGlmaWVyU3RhdGUoJ0FsdEdyYXBoJykpIHtcbiAgICBpZiAoX2Rvd25LZXlzLmluZGV4T2YoMTcpID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goMTcpO1xuICAgIH1cblxuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxOCkgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxOCk7XG4gICAgfVxuXG4gICAgX21vZHNbMTddID0gdHJ1ZTtcbiAgICBfbW9kc1sxOF0gPSB0cnVlO1xuICB9IC8vIOiOt+WPluiMg+WbtCDpu5jorqTkuLogYGFsbGBcblxuXG4gIHZhciBzY29wZSA9IGdldFNjb3BlKCk7IC8vIOWvueS7u+S9leW/q+aNt+mUrumDvemcgOimgeWBmueahOWkhOeQhlxuXG4gIGlmIChhc3Rlcmlzaykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXN0ZXJpc2subGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhc3Rlcmlza1tpXS5zY29wZSA9PT0gc2NvcGUgJiYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyAmJiBhc3Rlcmlza1tpXS5rZXlkb3duIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgYXN0ZXJpc2tbaV0ua2V5dXApKSB7XG4gICAgICAgIGV2ZW50SGFuZGxlcihldmVudCwgYXN0ZXJpc2tbaV0sIHNjb3BlLCBlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8ga2V5IOS4jeWcqCBfaGFuZGxlcnMg5Lit6L+U5ZueXG5cblxuICBpZiAoIShrZXkgaW4gX2hhbmRsZXJzKSkgcmV0dXJuO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBfaGFuZGxlcnNba2V5XS5sZW5ndGg7IF9pKyspIHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIF9oYW5kbGVyc1trZXldW19pXS5rZXlkb3duIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleXVwKSB7XG4gICAgICBpZiAoX2hhbmRsZXJzW2tleV1bX2ldLmtleSkge1xuICAgICAgICB2YXIgcmVjb3JkID0gX2hhbmRsZXJzW2tleV1bX2ldO1xuICAgICAgICB2YXIgc3BsaXRLZXkgPSByZWNvcmQuc3BsaXRLZXk7XG4gICAgICAgIHZhciBrZXlTaG9ydGN1dCA9IHJlY29yZC5rZXkuc3BsaXQoc3BsaXRLZXkpO1xuICAgICAgICB2YXIgX2Rvd25LZXlzQ3VycmVudCA9IFtdOyAvLyDorrDlvZXlvZPliY3mjInplK7plK7lgLxcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGtleVNob3J0Y3V0Lmxlbmd0aDsgYSsrKSB7XG4gICAgICAgICAgX2Rvd25LZXlzQ3VycmVudC5wdXNoKGNvZGUoa2V5U2hvcnRjdXRbYV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfZG93bktleXNDdXJyZW50LnNvcnQoKS5qb2luKCcnKSA9PT0gX2Rvd25LZXlzLnNvcnQoKS5qb2luKCcnKSkge1xuICAgICAgICAgIC8vIOaJvuWIsOWkhOeQhuWGheWuuVxuICAgICAgICAgIGV2ZW50SGFuZGxlcihldmVudCwgcmVjb3JkLCBzY29wZSwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8g5Yik5patIGVsZW1lbnQg5piv5ZCm5bey57uP57uR5a6a5LqL5Lu2XG5cblxuZnVuY3Rpb24gaXNFbGVtZW50QmluZChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50SGFzQmluZEV2ZW50LmluZGV4T2YoZWxlbWVudCkgPiAtMTtcbn1cblxuZnVuY3Rpb24gaG90a2V5cyhrZXksIG9wdGlvbiwgbWV0aG9kKSB7XG4gIF9kb3duS2V5cyA9IFtdO1xuICB2YXIga2V5cyA9IGdldEtleXMoa2V5KTsgLy8g6ZyA6KaB5aSE55CG55qE5b+r5o236ZSu5YiX6KGoXG5cbiAgdmFyIG1vZHMgPSBbXTtcbiAgdmFyIHNjb3BlID0gJ2FsbCc7IC8vIHNjb3Bl6buY6K6k5Li6YWxs77yM5omA5pyJ6IyD5Zu06YO95pyJ5pWIXG5cbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudDsgLy8g5b+r5o236ZSu5LqL5Lu257uR5a6a6IqC54K5XG5cbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5dXAgPSBmYWxzZTtcbiAgdmFyIGtleWRvd24gPSB0cnVlO1xuICB2YXIgc3BsaXRLZXkgPSAnKyc7XG4gIHZhciBjYXB0dXJlID0gZmFsc2U7IC8vIOWvueS4uuiuvuWumuiMg+WbtOeahOWIpOaWrVxuXG4gIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbWV0aG9kID0gb3B0aW9uO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvcHRpb24pID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIGlmIChvcHRpb24uc2NvcGUpIHNjb3BlID0gb3B0aW9uLnNjb3BlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmVsZW1lbnQpIGVsZW1lbnQgPSBvcHRpb24uZWxlbWVudDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXl1cCkga2V5dXAgPSBvcHRpb24ua2V5dXA7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24ua2V5ZG93biAhPT0gdW5kZWZpbmVkKSBrZXlkb3duID0gb3B0aW9uLmtleWRvd247IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24uY2FwdHVyZSAhPT0gdW5kZWZpbmVkKSBjYXB0dXJlID0gb3B0aW9uLmNhcHR1cmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9uLnNwbGl0S2V5ID09PSAnc3RyaW5nJykgc3BsaXRLZXkgPSBvcHRpb24uc3BsaXRLZXk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgc2NvcGUgPSBvcHRpb247IC8vIOWvueS6juavj+S4quW/q+aNt+mUrui/m+ihjOWkhOeQhlxuXG4gIGZvciAoOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV0uc3BsaXQoc3BsaXRLZXkpOyAvLyDmjInplK7liJfooahcblxuICAgIG1vZHMgPSBbXTsgLy8g5aaC5p6c5piv57uE5ZCI5b+r5o236ZSu5Y+W5b6X57uE5ZCI5b+r5o236ZSuXG5cbiAgICBpZiAoa2V5Lmxlbmd0aCA+IDEpIG1vZHMgPSBnZXRNb2RzKF9tb2RpZmllciwga2V5KTsgLy8g5bCG6Z2e5L+u6aWw6ZSu6L2s5YyW5Li66ZSu56CBXG5cbiAgICBrZXkgPSBrZXlba2V5Lmxlbmd0aCAtIDFdO1xuICAgIGtleSA9IGtleSA9PT0gJyonID8gJyonIDogY29kZShrZXkpOyAvLyAq6KGo56S65Yy56YWN5omA5pyJ5b+r5o236ZSuXG4gICAgLy8g5Yik5pata2V55piv5ZCm5ZyoX2hhbmRsZXJz5Lit77yM5LiN5Zyo5bCx6LWL5LiA5Liq56m65pWw57uEXG5cbiAgICBpZiAoIShrZXkgaW4gX2hhbmRsZXJzKSkgX2hhbmRsZXJzW2tleV0gPSBbXTtcblxuICAgIF9oYW5kbGVyc1trZXldLnB1c2goe1xuICAgICAga2V5dXA6IGtleXVwLFxuICAgICAga2V5ZG93bjoga2V5ZG93bixcbiAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgIG1vZHM6IG1vZHMsXG4gICAgICBzaG9ydGN1dDoga2V5c1tpXSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAga2V5OiBrZXlzW2ldLFxuICAgICAgc3BsaXRLZXk6IHNwbGl0S2V5LFxuICAgICAgZWxlbWVudDogZWxlbWVudFxuICAgIH0pO1xuICB9IC8vIOWcqOWFqOWxgGRvY3VtZW505LiK6K6+572u5b+r5o236ZSuXG5cblxuICBpZiAodHlwZW9mIGVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmICFpc0VsZW1lbnRCaW5kKGVsZW1lbnQpICYmIHdpbmRvdykge1xuICAgIGVsZW1lbnRIYXNCaW5kRXZlbnQucHVzaChlbGVtZW50KTtcbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkaXNwYXRjaChlLCBlbGVtZW50KTtcbiAgICB9LCBjYXB0dXJlKTtcblxuICAgIGlmICghd2luTGlzdGVuZEZvY3VzKSB7XG4gICAgICB3aW5MaXN0ZW5kRm9jdXMgPSB0cnVlO1xuICAgICAgYWRkRXZlbnQod2luZG93LCAnZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9kb3duS2V5cyA9IFtdO1xuICAgICAgfSwgY2FwdHVyZSk7XG4gICAgfVxuXG4gICAgYWRkRXZlbnQoZWxlbWVudCwgJ2tleXVwJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUsIGVsZW1lbnQpO1xuICAgICAgY2xlYXJNb2RpZmllcihlKTtcbiAgICB9LCBjYXB0dXJlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmlnZ2VyKHNob3J0Y3V0KSB7XG4gIHZhciBzY29wZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2FsbCc7XG4gIE9iamVjdC5rZXlzKF9oYW5kbGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGRhdGEgPSBfaGFuZGxlcnNba2V5XS5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5zY29wZSA9PT0gc2NvcGUgJiYgaXRlbS5zaG9ydGN1dCA9PT0gc2hvcnRjdXQ7XG4gICAgfSk7XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLm1ldGhvZCkge1xuICAgICAgZGF0YS5tZXRob2QoKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgX2FwaSA9IHtcbiAgc2V0U2NvcGU6IHNldFNjb3BlLFxuICBnZXRTY29wZTogZ2V0U2NvcGUsXG4gIGRlbGV0ZVNjb3BlOiBkZWxldGVTY29wZSxcbiAgZ2V0UHJlc3NlZEtleUNvZGVzOiBnZXRQcmVzc2VkS2V5Q29kZXMsXG4gIGlzUHJlc3NlZDogaXNQcmVzc2VkLFxuICBmaWx0ZXI6IGZpbHRlcixcbiAgdHJpZ2dlcjogdHJpZ2dlcixcbiAgdW5iaW5kOiB1bmJpbmQsXG4gIGtleU1hcDogX2tleU1hcCxcbiAgbW9kaWZpZXI6IF9tb2RpZmllcixcbiAgbW9kaWZpZXJNYXA6IG1vZGlmaWVyTWFwXG59O1xuXG5mb3IgKHZhciBhIGluIF9hcGkpIHtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfYXBpLCBhKSkge1xuICAgIGhvdGtleXNbYV0gPSBfYXBpW2FdO1xuICB9XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB2YXIgX2hvdGtleXMgPSB3aW5kb3cuaG90a2V5cztcblxuICBob3RrZXlzLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoZGVlcCkge1xuICAgIGlmIChkZWVwICYmIHdpbmRvdy5ob3RrZXlzID09PSBob3RrZXlzKSB7XG4gICAgICB3aW5kb3cuaG90a2V5cyA9IF9ob3RrZXlzO1xuICAgIH1cblxuICAgIHJldHVybiBob3RrZXlzO1xuICB9O1xuXG4gIHdpbmRvdy5ob3RrZXlzID0gaG90a2V5cztcbn1cblxuZXhwb3J0IHsgaG90a2V5cyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgaG90a2V5cyBmcm9tICdob3RrZXlzLWpzJztcbmltcG9ydCB7IHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIFVzZSBpc0hvdGtleVByZXNzZWQgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIHZlcnNpb24gNC5cclxuICovXG5cbmZ1bmN0aW9uIHVzZUlzSG90a2V5UHJlc3NlZCgpIHtcbiAgcmV0dXJuIGhvdGtleXMuaXNQcmVzc2VkO1xufVxuXG5ob3RrZXlzLmZpbHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG52YXIgdGFnRmlsdGVyID0gZnVuY3Rpb24gdGFnRmlsdGVyKF9yZWYsIGVuYWJsZU9uVGFncykge1xuICB2YXIgdGFyZ2V0ID0gX3JlZi50YXJnZXQ7XG4gIHZhciB0YXJnZXRUYWdOYW1lID0gdGFyZ2V0ICYmIHRhcmdldC50YWdOYW1lO1xuICByZXR1cm4gQm9vbGVhbih0YXJnZXRUYWdOYW1lICYmIGVuYWJsZU9uVGFncyAmJiBlbmFibGVPblRhZ3MuaW5jbHVkZXModGFyZ2V0VGFnTmFtZSkpO1xufTtcblxudmFyIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQgPSBmdW5jdGlvbiBpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGV2KSB7XG4gIHJldHVybiB0YWdGaWx0ZXIoZXYsIFsnSU5QVVQnLCAnVEVYVEFSRUEnLCAnU0VMRUNUJ10pO1xufTtcblxuZnVuY3Rpb24gdXNlSG90a2V5cyhrZXlzLCBjYWxsYmFjaywgb3B0aW9ucywgZGVwcykge1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgZGVwcyA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciBfcmVmMiA9IG9wdGlvbnMgfHwge30sXG4gICAgICBlbmFibGVPblRhZ3MgPSBfcmVmMi5lbmFibGVPblRhZ3MsXG4gICAgICBmaWx0ZXIgPSBfcmVmMi5maWx0ZXIsXG4gICAgICBrZXl1cCA9IF9yZWYyLmtleXVwLFxuICAgICAga2V5ZG93biA9IF9yZWYyLmtleWRvd24sXG4gICAgICBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPSBfcmVmMi5maWx0ZXJQcmV2ZW50RGVmYXVsdCxcbiAgICAgIGZpbHRlclByZXZlbnREZWZhdWx0ID0gX3JlZjIkZmlsdGVyUHJldmVudERlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZmlsdGVyUHJldmVudERlLFxuICAgICAgX3JlZjIkZW5hYmxlZCA9IF9yZWYyLmVuYWJsZWQsXG4gICAgICBlbmFibGVkID0gX3JlZjIkZW5hYmxlZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGVuYWJsZWQsXG4gICAgICBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPSBfcmVmMi5lbmFibGVPbkNvbnRlbnRFZGl0YWJsZSxcbiAgICAgIGVuYWJsZU9uQ29udGVudEVkaXRhYmxlID0gX3JlZjIkZW5hYmxlT25Db250ZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJGVuYWJsZU9uQ29udGVudDtcblxuICB2YXIgcmVmID0gdXNlUmVmKG51bGwpOyAvLyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgY2FsbGJhY2sgZGV0ZXJtaW5lcyBpZiB0aGUgYnJvd3NlcnMgZGVmYXVsdCBiZWhhdmlvciBpcyBwcmV2ZW50ZWQuXG5cbiAgdmFyIG1lbW9pc2VkQ2FsbGJhY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoa2V5Ym9hcmRFdmVudCwgaG90a2V5c0V2ZW50KSB7XG4gICAgdmFyIF9rZXlib2FyZEV2ZW50JHRhcmdldDtcblxuICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihrZXlib2FyZEV2ZW50KSkge1xuICAgICAgcmV0dXJuICFmaWx0ZXJQcmV2ZW50RGVmYXVsdDtcbiAgICB9IC8vIENoZWNrIHdoZXRoZXIgdGhlIGhvdGtleXMgd2FzIHRyaWdnZXJlZCBpbnNpZGUgYW4gaW5wdXQgYW5kIHRoYXQgaW5wdXQgaXMgZW5hYmxlZCBvciBpZiBpdCB3YXMgdHJpZ2dlcmVkIGJ5IGEgY29udGVudCBlZGl0YWJsZSB0YWcgYW5kIGl0IGlzIGVuYWJsZWQuXG5cblxuICAgIGlmIChpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGtleWJvYXJkRXZlbnQpICYmICF0YWdGaWx0ZXIoa2V5Ym9hcmRFdmVudCwgZW5hYmxlT25UYWdzKSB8fCAoX2tleWJvYXJkRXZlbnQkdGFyZ2V0ID0ga2V5Ym9hcmRFdmVudC50YXJnZXQpICE9IG51bGwgJiYgX2tleWJvYXJkRXZlbnQkdGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlICYmICFlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlZi5jdXJyZW50ID09PSBudWxsIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHJlZi5jdXJyZW50KSB7XG4gICAgICBjYWxsYmFjayhrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCBkZXBzID8gW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdLmNvbmNhdChkZXBzKSA6IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEluIHRoaXMgY2FzZSBrZXlkb3duIGlzIGxpa2VseSB1bmRlZmluZWQsIHNvIHdlIHNldCBpdCB0byBmYWxzZSwgc2luY2UgaG90a2V5cyBuZWVkcyB0aGUgYGtleWRvd25gIGtleSB0byBoYXZlIGEgdmFsdWUuXG5cblxuICAgIGlmIChrZXl1cCAmJiBrZXlkb3duICE9PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLmtleWRvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBob3RrZXlzKGtleXMsIG9wdGlvbnMgfHwge30sIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgfTtcbiAgfSwgW21lbW9pc2VkQ2FsbGJhY2ssIGtleXMsIGVuYWJsZWRdKTtcbiAgcmV0dXJuIHJlZjtcbn1cblxudmFyIGlzSG90a2V5UHJlc3NlZCA9IGhvdGtleXMuaXNQcmVzc2VkO1xuXG5leHBvcnQgeyBpc0hvdGtleVByZXNzZWQsIHVzZUhvdGtleXMsIHVzZUlzSG90a2V5UHJlc3NlZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcy5tYXBcbiJdLCJzb3VyY2VSb290IjoiIn0=
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 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),P(e,n||{},h),function(){return P.unbind(e,h)};P.unbind(e,h)}),[h,e,s]),m}var D=P.isPressed}]));
25
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3M/OWE0ZSIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL0J1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL0J1dHRvbi5tb2R1bGUuY3NzP2NkNDYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3M/MzJhYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvQnV0dG9uTGluay5tb2R1bGUuY3NzPzA4NDEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC5tb2R1bGUuY3NzPzFmMTEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gubW9kdWxlLmNzcz80ZWViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gubW9kdWxlLmNzcz8yM2ViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ZTE4OCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLm1vZHVsZS5jc3M/MGVkZiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzPzI3YjMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vRHJvcGRvd24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbi9JY29uLm1vZHVsZS5jc3M/OWI5MyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ecm9wZG93bi9DbGlja2FibGUubW9kdWxlLmNzcz8zZWI5Iiwid2VicGFjazovLy8uL2Fzc2V0cy9jYXJldC1kb3duLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzPzk2ZDIiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Lm1vZHVsZS5jc3M/MzcwOSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLm1vZHVsZS5jc3M/NTA0OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0ubW9kdWxlLmNzcz8wNDI3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0Lm1vZHVsZS5jc3M/MTI5OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9GbG9hdGluZ1BhbmVsLm1vZHVsZS5jc3M/N2FiZiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/ZDI4ZCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzcz9jYzM3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS5tb2R1bGUuY3NzPzk1YTciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXcudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/NDY0ZSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3TGlua0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8yMWM1Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/Y2QzNiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz9jZjYxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzPzlhMzYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLm1vZHVsZS5jc3M/ZTIyMyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC5tb2R1bGUuY3NzPzQ3ZjAiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2JhY2tzcGFjZS5zdmciLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlT3V0c2lkZUNsaWNrL3VzZU91dHNpZGVDbGljay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVByb21pc2UvdXNlUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3dyL2Rpc3QvaW5kZXguZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVNXUkhvb2tzQ29uZmlnL3VzZVNXUkhvb2tzQ29uZmlnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVRvZ2dsZS91c2VUb2dnbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hvdGtleXMtanMvZGlzdC9ob3RrZXlzLmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaG90a2V5cy1ob29rL2Rpc3QvcmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsInJlcXVpcmUiLCJpc0FycmF5IiwiQXJyYXkiLCJjYyIsIm9iaiIsIm91dCIsInRtcCIsImsiLCJsZW5ndGgiLCJkZWZhdWx0IiwiZGlzcGxheSIsImlzRGlzYWJsZWQiLCJoYW5kbGVDbGljayIsIkJ1dHRvbiIsImFsaWduIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwic2l6ZSIsInN0cmV0Y2hIb3Jpem9udGFsbHkiLCJjbGFzc05hbWUiLCJjb250YWluZXIiLCJJY29uIiwiYWx0Iiwic3JjIiwiUGxhY2VtZW50Q29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJ1bmRlZmluZWQiLCJmb3J3YXJkUmVmIiwicmVmIiwiY2hpbGRyZW4iLCJidXR0b24iLCJwbGFjZW1lbnQiLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJQcm92aWRlciIsInVzZU1lbW8iLCJtZW51Q29udGFpbmVyIiwib25Qb2ludGVyRG93biIsImNvbnRhaW5lclJlZiIsImludmVydGVkIiwicm91bmRlZCIsIm5vU2hhZG93Iiwibm9QYWRkaW5nIiwibm9Cb3JkZXIiLCJ0cmFuc3BhcmVudCIsInN0cmV0Y2hWZXJ0aWNhbGx5IiwiYXV0b0ZvY3VzIiwib2Zmc2V0U2lkZXMiLCJ0eXBlIiwibGVmdE9mZnNldCIsImluY2x1ZGVzIiwicmlnaHRPZmZzZXQiLCJyb2xlIiwiY29udGVudCIsImJ1dHRvbkJhZGdlIiwiQ29tcG9uZW50IiwicHJvcHMiLCJsYWJlbCIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImhhbmRsZUNoYW5nZSIsInVzZUNhbGxiYWNrIiwiZSIsInRhcmdldCIsIkxhYmVsIiwiaW5wdXRSZWYiLCJjaGVja2JveCIsImNvbG9ycyIsIm9uU2VsZWN0Iiwic2VsZWN0ZWRDb2xvciIsImRpcmVjdGlvbiIsImNhblRvZ2dsZSIsImNvbG9yUGlja2VyIiwibWFwIiwiY29sb3IiLCJDb2xvclN3YXRjaCIsImlzU2VsZWN0ZWQiLCJjb2xvclN3YXRjaCIsInNlbGVjdGVkIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJoZXhDb2RlIiwic3JPbmx5IiwiQ29uZmlybWF0aW9uTW9kYWwiLCJoZWFkZXIiLCJpc09wZW4iLCJidXR0b25zTGVmdCIsImJ1dHRvbnNSaWdodCIsIm9uQ2xvc2UiLCJub092ZXJsYXkiLCJiYXNlWkluZGV4IiwiTW9kYWwiLCJtb2RhbEhlYWRlciIsIm1vZGFsQ29udGVudCIsIm1vZGFsQnV0dG9uc0NvbnRhaW5lciIsIm1vZGFsQnV0dG9ucyIsImRpc3BsYXlOYW1lIiwidXNlSG90a2V5cyIsImhhbmRsZU92ZXJsYXlDbGljayIsInpJbmRleCIsIm92ZXJsYXkiLCJtb2RhbCIsIm1vZGFsQnV0dG9uIiwiRHJvcGRvd24iLCJDbGlja2FibGUiLCJpdGVtQm9keVJlbmRlcmVyIiwiaXRlbXMiLCJoYW5kbGVTZWxlY3QiLCJyZW5kZXJDbGlja2FibGUiLCJzZWxlY3RlZEl0ZW0iLCJ1c2VTdGF0ZSIsInNldElzT3BlbiIsInVzZU91dHNpZGVDbGljayIsInRvZ2dsZUlzT3BlbiIsIk1lbnVDb250YWluZXIiLCJNZW51IiwiaXRlbSIsIk1lbnVJdGVtIiwiaXNBY3RpdmUiLCJpZCIsImljb24iLCJjcm9zc09yaWdpbiIsImZvb3RlciIsIm1lbnVQbGFjZW1lbnQiLCJ1c2VDb250ZXh0IiwiaW5uZXJSZWYiLCJ1c2VSZWYiLCJFcnJvciIsInVzZUxheW91dEVmZmVjdCIsImN1cnJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJib3R0b20iLCJkaXN0YW5jZVRvRWRnZSIsIndpbmRvdyIsImlubmVySGVpZ2h0IiwidWxFbCIsInF1ZXJ5U2VsZWN0b3IiLCJsaUVsIiwibmV3SGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwibWF4SGVpZ2h0IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsIm1pbkhlaWdodCIsIm1lbnUiLCJvcGVuIiwibWVudUl0ZW0iLCJhY3RpdmUiLCJtZW51TGlua0l0ZW0iLCJhY2NlcHQiLCJtdWx0aXBsZSIsImlucHV0IiwibGF5b3V0IiwicGFyZW50IiwiaG9yaXpvbnRhbFBsYWNlbWVudCIsInZlcnRpY2FsUGxhY2VtZW50IiwiZml4ZWQiLCJ0b3BPZmZzZXQiLCJib3R0b21PZmZzZXQiLCJzcmNXaWR0aCIsInNyY0hlaWdodCIsImRlY29kaW5nIiwibG9hZGluZyIsImltYWdlRWxlbWVudCIsImltYWdlIiwid2lkdGgiLCJoZWlnaHQiLCJoYXNPdmVybGF5IiwiaGVhZGVyQWN0aW9ucyIsImhlYWRlckxhYmVsIiwidGV4dCIsImxpc3QiLCJsaXN0Vmlld0l0ZW0iLCJCdXR0b25MaW5rIiwiYXMiLCJpc0ZpeGVkIiwib25CbHVyIiwib25LZXlEb3duIiwicGF0dGVybiIsImlucHV0RWxlbWVudCIsInRleHRJbnB1dCIsInRvYXN0IiwidG9hc3RDb250YWluZXIiLCJwb3N0ZXIiLCJtdXRlZCIsImxvb3AiLCJhdXRvUGxheSIsInZpZGVvIiwicGxheXNJbmxpbmUiLCJOdW1wYWQiLCJhcHBlbmREaWdpdCIsIm51bWJlciIsImRpZ2l0IiwicG9wRGlnaXQiLCJNYXRoIiwiZmxvb3IiLCJldmVudERpZ2l0S2V5cyIsImNyZWF0ZUVtaXROdW1iZXJIYW5kbGVyIiwibmV3TnVtYmVyIiwic3RvcFByb3BhZ2F0aW9uIiwiTnVtcGFkS2V5cyIsImZpbGwiLCJfIiwiaW5kZXgiLCJudW1wYWRWYWx1ZSIsIm51bXBhZCIsInRhYkluZGV4IiwicGFyc2VJbnQiLCJudW1iZXJzIiwib3B0aW9ucyIsImNhcHR1cmUiLCJjYWxsYmFjayIsImV2ZW50IiwiY29udGFpbnMiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsImYiLCJ5IiwiZyIsInNlbnQiLCJ0cnlzIiwib3BzIiwidmVyYiIsIml0ZXJhdG9yIiwidGhpcyIsInYiLCJvcCIsIlR5cGVFcnJvciIsInBvcCIsInB1c2giLCJfX3JlYWQiLCJhciIsImVycm9yIiwidXNlUHJvbWlzZSIsIl90aGlzIiwiX2EiLCJkYXRhIiwiaXNQZW5kaW5nIiwiaXNSZXNvbHZlZCIsImlzUmVqZWN0ZWQiLCJpc1NldHRsZWQiLCJzZXRSZXN1bHQiLCJoYXNVbm1vdW50ZWQiLCJwcm9taXNlIiwiZXJyb3JfMSIsImhvb2siLCJub29wIiwiVU5ERUZJTkVEIiwiT0JKRUNUIiwiaXNVbmRlZmluZWQiLCJpc0Z1bmN0aW9uIiwibWVyZ2VPYmplY3RzIiwiYSIsImIiLCJhc3NpZ24iLCJoYXNXaW5kb3ciLCJ0YWJsZSIsIldlYWtNYXAiLCJjb3VudGVyIiwic3RhYmxlSGFzaCIsImFyZyIsImNvbnN0cnVjdG9yIiwiaXNEYXRlIiwiRGF0ZSIsIlJlZ0V4cCIsInRvSlNPTiIsInRvU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsInNldCIsImtleXMiLCJzb3J0Iiwib25saW5lIiwiaGFzV2luIiwiaGFzRG9jIiwib25XaW5kb3dFdmVudCIsIm9uRG9jdW1lbnRFdmVudCIsIm9mZldpbmRvd0V2ZW50Iiwib2ZmRG9jdW1lbnRFdmVudCIsInByZXNldCIsImlzT25saW5lIiwiaXNWaXNpYmxlIiwidmlzaWJpbGl0eVN0YXRlIiwiZGVmYXVsdENvbmZpZ09wdGlvbnMiLCJpbml0Rm9jdXMiLCJpbml0UmVjb25uZWN0Iiwib25PbmxpbmUiLCJvbk9mZmxpbmUiLCJJU19TRVJWRVIiLCJyQUYiLCJzZXRUaW1lb3V0IiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsIm5hdmlnYXRvckNvbm5lY3Rpb24iLCJuYXZpZ2F0b3IiLCJjb25uZWN0aW9uIiwic2xvd0Nvbm5lY3Rpb24iLCJlZmZlY3RpdmVUeXBlIiwic2F2ZURhdGEiLCJzZXJpYWxpemUiLCJlcnIiLCJhcmdzIiwiY29uY2F0IiwiU1dSR2xvYmFsU3RhdGUiLCJicm9hZGNhc3RTdGF0ZSIsImNhY2hlIiwiaXNWYWxpZGF0aW5nIiwicmV2YWxpZGF0ZSIsImJyb2FkY2FzdCIsIkVWRU5UX1JFVkFMSURBVE9SUyIsIlNUQVRFX1VQREFURVJTIiwiRkVUQ0giLCJyZXZhbGlkYXRvcnMiLCJ1cGRhdGVycyIsIl9fdGltZXN0YW1wIiwiZ2V0VGltZXN0YW1wIiwiaW50ZXJuYWxNdXRhdGUiLCJfaSIsImFyZ3VtZW50cyIsIl9rZXkiLCJfZGF0YSIsIl9vcHRzIiwicG9wdWxhdGVDYWNoZSIsInJvbGxiYWNrT25FcnJvciIsImN1c3RvbU9wdGltaXN0aWNEYXRhIiwia2V5SW5mbyIsIl9iIiwiTVVUQVRJT04iLCJiZWZvcmVNdXRhdGlvblRzIiwiaGFzQ3VzdG9tT3B0aW1pc3RpY0RhdGEiLCJyb2xsYmFja0RhdGEiLCJvcHRpbWlzdGljRGF0YSIsInJlcyIsIl9jIiwiY2F0Y2giLCJyZXZhbGlkYXRlQWxsS2V5cyIsImluaXRDYWNoZSIsInByb3ZpZGVyIiwiaGFzIiwib3B0cyIsIm11dGF0ZSIsInVubW91bnQiLCJyZWxlYXNlRm9jdXNfMSIsInJlbGVhc2VSZWNvbm5lY3RfMSIsImRlbGV0ZSIsIk1hcCIsImRlZmF1bHRDb25maWciLCJvbkxvYWRpbmdTbG93Iiwib25TdWNjZXNzIiwib25FcnJvciIsIm9uRXJyb3JSZXRyeSIsIl9fIiwiY29uZmlnIiwibWF4UmV0cnlDb3VudCIsImVycm9yUmV0cnlDb3VudCIsImN1cnJlbnRSZXRyeUNvdW50IiwicmV0cnlDb3VudCIsInRpbWVvdXQiLCJyYW5kb20iLCJlcnJvclJldHJ5SW50ZXJ2YWwiLCJvbkRpc2NhcmRlZCIsInJldmFsaWRhdGVPbkZvY3VzIiwicmV2YWxpZGF0ZU9uUmVjb25uZWN0IiwicmV2YWxpZGF0ZUlmU3RhbGUiLCJzaG91bGRSZXRyeU9uRXJyb3IiLCJmb2N1c1Rocm90dGxlSW50ZXJ2YWwiLCJkZWR1cGluZ0ludGVydmFsIiwibG9hZGluZ1RpbWVvdXQiLCJjb21wYXJlIiwiY3VycmVudERhdGEiLCJuZXdEYXRhIiwiaXNQYXVzZWQiLCJmYWxsYmFjayIsIm1lcmdlQ29uZmlncyIsInUxIiwidXNlIiwiZjEiLCJ1MiIsImYyIiwiU1dSQ29uZmlnQ29udGV4dCIsIm5vcm1hbGl6ZSIsInVzZVNXUkNvbmZpZyIsInN1YnNjcmliZUNhbGxiYWNrIiwiY2FsbGJhY2tzIiwia2V5ZWRSZXZhbGlkYXRvcnMiLCJpbmRleE9mIiwiV0lUSF9ERURVUEUiLCJkZWR1cGUiLCJleHRlbmRlZENvbmZpZyIsImNhY2hlQ29udGV4dCIsImZldGNoZXIiLCJmYWxsYmFja0RhdGEiLCJzdXNwZW5zZSIsInJldmFsaWRhdGVPbk1vdW50IiwicmVmcmVzaEludGVydmFsIiwicmVmcmVzaFdoZW5IaWRkZW4iLCJyZWZyZXNoV2hlbk9mZmxpbmUiLCJmbkFyZ3MiLCJpbml0aWFsTW91bnRlZFJlZiIsInVubW91bnRlZFJlZiIsImtleVJlZiIsImZldGNoZXJSZWYiLCJjb25maWdSZWYiLCJnZXRDb25maWciLCJwYXRjaEZldGNoSW5mbyIsImluZm8iLCJjYWNoZWQiLCJpc0luaXRpYWxNb3VudCIsInNob3VsZFJldmFsaWRhdGUiLCJzdGF0ZSIsInJlcmVuZGVyIiwic3RhdGVSZWYiLCJzdGF0ZURlcGVuZGVuY2llc1JlZiIsInNldFN0YXRlIiwicGF5bG9hZCIsInNob3VsZFJlcmVuZGVyIiwiY3VycmVudFN0YXRlIiwidXNlU3RhdGVXaXRoRGVwcyIsInN0YXRlRGVwZW5kZW5jaWVzIiwicmV2YWxpZGF0ZU9wdHMiLCJjdXJyZW50RmV0Y2hlciIsInN0YXJ0QXQiLCJzaG91bGRTdGFydE5ld1JlcXVlc3QiLCJpc0N1cnJlbnRLZXlNb3VudGVkIiwiY2xlYW51cFN0YXRlIiwibmV3U3RhdGUiLCJmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUiLCJtdXRhdGlvbkluZm8iLCJlcnJfMSIsInJlcXVlc3RJbmZvIiwiYm91bmRNdXRhdGUiLCJrZXlDaGFuZ2VkIiwic29mdFJldmFsaWRhdGUiLCJuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0IiwidW5zdWJVcGRhdGUiLCJ1cGRhdGVkRGF0YSIsInVwZGF0ZWRFcnJvciIsInVwZGF0ZWRJc1ZhbGlkYXRpbmciLCJ1bnN1YkV2ZW50cyIsIm5vdyIsInRpbWVyIiwiaW50ZXJ2YWwiLCJleGVjdXRlIiwiY2xlYXJUaW1lb3V0IiwidXNlU1dSSG9va3NDb25maWciLCJzd3JDb25maWciLCJ1c2VUb2dnbGUiLCJpbml0aWFsVmFsdWUiLCJzZXRWYWx1ZSIsIm5ld1ZhbHVlIiwicHJldlZhbHVlIiwiaXNmZiIsInVzZXJBZ2VudCIsInRvTG93ZXJDYXNlIiwiYWRkRXZlbnQiLCJtZXRob2QiLCJ1c2VDYXB0dXJlIiwiYXR0YWNoRXZlbnQiLCJnZXRNb2RzIiwibW9kaWZpZXIiLCJtb2RzIiwic2xpY2UiLCJnZXRLZXlzIiwicmVwbGFjZSIsInNwbGl0IiwibGFzdEluZGV4T2YiLCJzcGxpY2UiLCJfa2V5TWFwIiwiYmFja3NwYWNlIiwidGFiIiwiY2xlYXIiLCJlbnRlciIsInJldHVybiIsImVzYyIsImVzY2FwZSIsInNwYWNlIiwibGVmdCIsInVwIiwicmlnaHQiLCJkb3duIiwiZGVsIiwiaW5zIiwiaW5zZXJ0IiwiaG9tZSIsImVuZCIsInBhZ2V1cCIsInBhZ2Vkb3duIiwiY2Fwc2xvY2siLCJudW1fMCIsIm51bV8xIiwibnVtXzIiLCJudW1fMyIsIm51bV80IiwibnVtXzUiLCJudW1fNiIsIm51bV83IiwibnVtXzgiLCJudW1fOSIsIm51bV9tdWx0aXBseSIsIm51bV9hZGQiLCJudW1fZW50ZXIiLCJudW1fc3VidHJhY3QiLCJudW1fZGVjaW1hbCIsIm51bV9kaXZpZGUiLCInIiwiX21vZGlmaWVyIiwic2hpZnQiLCJvcHRpb24iLCJjdHJsIiwiY29udHJvbCIsImNtZCIsImNvbW1hbmQiLCJtb2RpZmllck1hcCIsIjE2IiwiMTgiLCIxNyIsIjkxIiwic2hpZnRLZXkiLCJjdHJsS2V5IiwiYWx0S2V5IiwibWV0YUtleSIsIl9tb2RzIiwiX2hhbmRsZXJzIiwiX2Rvd25LZXlzIiwid2luTGlzdGVuZEZvY3VzIiwiX3Njb3BlIiwiZWxlbWVudEhhc0JpbmRFdmVudCIsImNvZGUiLCJ4IiwidG9VcHBlckNhc2UiLCJjaGFyQ29kZUF0Iiwic2V0U2NvcGUiLCJzY29wZSIsImdldFNjb3BlIiwiZWFjaFVuYmluZCIsIl9yZWYiLCJfcmVmJHNwbGl0S2V5Iiwic3BsaXRLZXkiLCJmb3JFYWNoIiwib3JpZ2luS2V5IiwidW5iaW5kS2V5cyIsImxlbiIsImxhc3RLZXkiLCJrZXlDb2RlIiwiZmlsdGVyIiwicmVjb3JkIiwiYTEiLCJhMiIsImFycjEiLCJhcnIyIiwiaXNJbmRleCIsImNvbXBhcmVBcnJheSIsImV2ZW50SGFuZGxlciIsImhhbmRsZXIiLCJlbGVtZW50IiwibW9kaWZpZXJzTWF0Y2giLCJzaG9ydGN1dCIsInByZXZlbnREZWZhdWx0IiwicmV0dXJuVmFsdWUiLCJjYW5jZWxCdWJibGUiLCJkaXNwYXRjaCIsImFzdGVyaXNrIiwid2hpY2giLCJjaGFyQ29kZSIsImhvdGtleXMiLCJrZXlOYW1lIiwia2V5TnVtIiwiZ2V0TW9kaWZpZXJTdGF0ZSIsImtleWRvd24iLCJrZXl1cCIsImtleVNob3J0Y3V0IiwiX2Rvd25LZXlzQ3VycmVudCIsImpvaW4iLCJpc0VsZW1lbnRCaW5kIiwiY2xlYXJNb2RpZmllciIsIl9hcGkiLCJkZWxldGVTY29wZSIsIm5ld1Njb3BlIiwiaGFuZGxlcnMiLCJnZXRQcmVzc2VkS2V5Q29kZXMiLCJpc1ByZXNzZWQiLCJzcmNFbGVtZW50IiwidGFnTmFtZSIsImZsYWciLCJpc0NvbnRlbnRFZGl0YWJsZSIsInJlYWRPbmx5IiwidHJpZ2dlciIsImZpbmQiLCJ1bmJpbmQiLCJrZXlzSW5mbyIsIl9sZW4iLCJrZXlNYXAiLCJfaG90a2V5cyIsIm5vQ29uZmxpY3QiLCJkZWVwIiwidXNlSXNIb3RrZXlQcmVzc2VkIiwidGFnRmlsdGVyIiwiZW5hYmxlT25UYWdzIiwidGFyZ2V0VGFnTmFtZSIsIkJvb2xlYW4iLCJkZXBzIiwiX3JlZjIiLCJfcmVmMiRmaWx0ZXJQcmV2ZW50RGUiLCJmaWx0ZXJQcmV2ZW50RGVmYXVsdCIsIl9yZWYyJGVuYWJsZWQiLCJlbmFibGVkIiwiX3JlZjIkZW5hYmxlT25Db250ZW50IiwiZW5hYmxlT25Db250ZW50RWRpdGFibGUiLCJtZW1vaXNlZENhbGxiYWNrIiwia2V5Ym9hcmRFdmVudCIsImhvdGtleXNFdmVudCIsIl9rZXlib2FyZEV2ZW50JHRhcmdldCIsImFjdGl2ZUVsZW1lbnQiLCJpc0hvdGtleVByZXNzZWQiXSwibWFwcGluZ3MiOiI2REFDRSxJQUFJQSxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9BQU9GLEVBQWlCRSxHQUFVQyxRQUduQyxJQUFJQyxFQUFTSixFQUFpQkUsR0FBWSxDQUN6Q0csRUFBR0gsRUFDSEksR0FBRyxFQUNISCxRQUFTLElBVVYsT0FOQUksRUFBUUwsR0FBVU0sS0FBS0osRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU0YsR0FHL0RHLEVBQU9FLEdBQUksRUFHSkYsRUFBT0QsUUEwRGYsT0FyREFGLEVBQW9CUSxFQUFJRixFQUd4Qk4sRUFBb0JTLEVBQUlWLEVBR3hCQyxFQUFvQlUsRUFBSSxTQUFTUixFQUFTUyxFQUFNQyxHQUMzQ1osRUFBb0JhLEVBQUVYLEVBQVNTLElBQ2xDRyxPQUFPQyxlQUFlYixFQUFTUyxFQUFNLENBQUVLLFlB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d0JMLEVBQU1NLHdCQUM5QkEsT0FBb0QsSUFBMUJELEdBQTJDQSxFQUVyRXJsQixFQUFNLGlCQUFPLE1BRWJ1bEIsRUFBbUIsdUJBQVksU0FBVUMsRUFBZUMsR0FDMUQsSUFBSUMsRUFFSixPQUFJbkUsSUFBV0EsRUFBT2lFLElBQ1pOLEtBM0JMUCxFQStCK0JhLEVBL0JqQixDQUFDLFFBQVMsV0FBWSxhQStCY2IsRUFBVWEsRUFBZVosSUFBbUUsT0FBakRjLEVBQXdCRixFQUFjbmpCLFNBQW1CcWpCLEVBQXNCM0Isb0JBQXNCdUIsS0FJbkwsT0FBaEJ0bEIsRUFBSXVHLFNBQW9Cb0YsU0FBU2dhLGdCQUFrQjNsQixFQUFJdUcsV0FDekRpRixFQUFTZ2EsRUFBZUMsSUFDakIsS0FJUlYsRUFBTyxDQUFDL2tCLEVBQUs0a0IsRUFBY3JELEdBQVFsUCxPQUFPMFMsR0FBUSxDQUFDL2tCLEVBQUs0a0IsRUFBY3JELElBaUJ6RSxPQWhCQSxxQkFBVSxXQUNSLEdBQUs2RCxFQVdMLE9BTElwQyxJQUFxQixJQUFaRCxJQUNYelgsRUFBUXlYLFNBQVUsR0FHcEJKLEVBQVFyUyxFQUFNaEYsR0FBVyxHQUFJaWEsR0FDdEIsV0FDTCxPQUFPNUMsRUFBUXdCLE9BQU83VCxFQUFNaVYsSUFYNUI1QyxFQUFRd0IsT0FBTzdULEVBQU1pVixLQWF0QixDQUFDQSxFQUFrQmpWLEVBQU04VSxJQUNyQnBsQixFQUdULElBQUk0bEIsRUFBa0JqRCxFQUFRZ0IiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTIpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwidmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNjKG9iaikge1xuICB2YXIgb3V0ID0gXCJcIlxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIpIHJldHVybiBvYmogfHwgXCJcIlxuXG4gIGlmIChpc0FycmF5KG9iaikpXG4gICAgZm9yICh2YXIgayA9IDAsIHRtcDsgayA8IG9iai5sZW5ndGg7IGsrKykge1xuICAgICAgaWYgKCh0bXAgPSBjYyhvYmpba10pKSAhPT0gXCJcIikge1xuICAgICAgICBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyB0bXBcbiAgICAgIH1cbiAgICB9XG4gIGVsc2VcbiAgICBmb3IgKHZhciBrIGluIG9iaikge1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrKSAmJiBvYmpba10pIG91dCArPSAob3V0ICYmIFwiIFwiKSArIGtcbiAgICB9XG5cbiAgcmV0dXJuIG91dFxufVxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uIH0gZnJvbSBcIi4vSWNvblwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwiLi9CdXR0b25cIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGFiZWwgfSBmcm9tIFwiLi9MYWJlbFwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25MaW5rIH0gZnJvbSBcIi4vQnV0dG9uTGlua1wiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclN3YXRjaCB9IGZyb20gXCIuL0NvbG9yU3dhdGNoXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgeyBJdGVtLCBSZW5kZXJEaXNwbGF5UHJvcHMgfSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL0NsaWNrYWJsZS5tb2R1bGUuY3NzXCI7XG5cbmltcG9ydCBpY29uTWVudSBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XG5cbmV4cG9ydCB0eXBlIENsaWNrYWJsZVByb3BzPFQgZXh0ZW5kcyBJdGVtPiA9IE9taXQ8XG4gIFJlbmRlckRpc3BsYXlQcm9wczxUPixcbiAgXCJzZWxlY3RlZEl0ZW1cIiB8IFwidG9nZ2xlSXNPcGVuXCJcbj4gJiB7XG4gIG9uQ2xpY2s6IFJlbmRlckRpc3BsYXlQcm9wczxUPltcInRvZ2dsZUlzT3BlblwiXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBDbGlja2FibGU8VCBleHRlbmRzIEl0ZW0+KHtcbiAgZGlzcGxheSxcbiAgaXNEaXNhYmxlZCxcbiAgb25DbGljazogaGFuZGxlQ2xpY2ssXG59OiBDbGlja2FibGVQcm9wczxUPikge1xuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGFsaWduPVwibGVmdFwiXG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5jb250YWluZXJ9PlxuICAgICAgICB7ZGlzcGxheX1cbiAgICAgICAgPEljb24gYWx0PVwiRHJvcGRvd25cIiBzcmM9e2ljb25NZW51fSAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9CdXR0b24+XG4gICk7XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1lbnUgfSBmcm9tIFwiLi9NZW51XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVDb250YWluZXIsIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVJdGVtIH0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUxpbmtJdGVtIH0gZnJvbSBcIi4vTWVudUxpbmtJdGVtXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWFjdEVsZW1lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEZvcndhcmRlZFJlZixcbiAgdXNlTWVtbyxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE1lbnVQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6IFwicmlnaHRcIiB8IFwibGVmdFwiO1xuICB2ZXJ0aWNhbDogXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG59O1xuXG50eXBlIE1lbnVDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYnV0dG9uPzogUmVhY3RFbGVtZW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgUGxhY2VtZW50Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8XG4gIE1lbnVDb250YWluZXJQcm9wc1tcInBsYWNlbWVudFwiXSB8IHVuZGVmaW5lZFxuPih1bmRlZmluZWQpO1xuXG5mdW5jdGlvbiBNZW51Q29udGFpbmVyKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgYnV0dG9uLFxuICAgIGNsYXNzTmFtZSxcbiAgICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwibGVmdFwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiB9LFxuICB9OiBNZW51Q29udGFpbmVyUHJvcHMsXG4gIHJlZjogRm9yd2FyZGVkUmVmPEhUTUxEaXZFbGVtZW50PlxuKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAge2J1dHRvbn1cbiAgICAgIDxQbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt1c2VNZW1vKCgpID0+IHBsYWNlbWVudCwgW3BsYWNlbWVudF0pfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1lbnVDb250YWluZXIsXG4gICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50Lmhvcml6b250YWxdLFxuICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC52ZXJ0aWNhbF0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9QbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3J3YXJkUmVmKE1lbnVDb250YWluZXIpO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJsaXN0Vmlld0l0ZW1cIjpcIlZLWW9OdFdUWnVpMkFPMUlseUpNVHc9PVwifTsiLCJleHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25CYWRnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25MaW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NoZWNrYm94XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbG9yUGlja2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbG9yU3dhdGNoXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0Ryb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ZpbGVJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvbkJ1dHRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uTGlua1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JbWFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9MYWJlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9MaXN0Vmlld1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9NZW51XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01vZGFsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL092ZXJsYXlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGV4dElucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RvYXN0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1ZpZGVvXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL051bXBhZFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBCdXR0b25Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQsIE1vdXNlRXZlbnQ+KSA9PiB2b2lkO1xuICBvblBvaW50ZXJEb3duPzogKGV2ZW50OiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB2b2lkO1xuICBzaXplPzogU2l6ZTtcbiAgdHlwZT86IFwic3VibWl0XCIgfCBcInJlc2V0XCIgfCBcImJ1dHRvblwiO1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcImxlZnRcIiB8IFwicmlnaHRcIj47XG59O1xuXG5mdW5jdGlvbiBCdXR0b24oe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBvbkNsaWNrLFxuICBvblBvaW50ZXJEb3duLFxuICBjb250YWluZXJSZWYsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUsXG59OiBCdXR0b25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgb25Qb2ludGVyRG93bj17b25Qb2ludGVyRG93bn1cbiAgICA+XG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgY2hpbGRyZW4ubGVuZ3RoID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApfVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b247XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwieHludU11OFhaU3NvbkR1a3NsNkFRZz09XCIsXCJsZWZ0XCI6XCJQa3AwSGhOSHR0b1dJYjJkd3BHbnR3PT1cIixcInNtYWxsXCI6XCJ3RE9lZUpHQ1ptMGsyWnBOekZiZUhnPT1cIixcImxhcmdlXCI6XCJfNVFqQld0bDdZWHk0ZW00WDNHUGJSQT09XCIsXCJ4bGFyZ2VcIjpcImtOMExnYTRmQk9nY2lnRHF0T0RSZGc9PVwiLFwiaW52ZXJ0ZWRcIjpcIis1bnNUbkxsTk9YOEtGUWlVaFQxa1E9PVwiLFwicm91bmRlZFwiOlwiQmpQLUpOV0pqb0JmTk1NenRueVdPUT09XCIsXCJyaWdodE9mZnNldFwiOlwibEdKd05jb2w4Q0FrbnF4WSs4RGZxZz09XCIsXCJsZWZ0T2Zmc2V0XCI6XCJFVitnNmhVQTFxdjhMUTlScWdyUVJRPT1cIixcIm5vU2hhZG93XCI6XCJaM3VQTHJyeXFJTmZSalpwcHdVNk5RPT1cIixcIm5vQm9yZGVyXCI6XCJlRWdoRzZHWEI5SXp5RDNqck5aZkFBPT1cIixcInRyYW5zcGFyZW50XCI6XCJzczdEaFZnRjVKR3NwQ0FTZFpVWUJnPT1cIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcImk4UVBTcjRjSFloSjdBaXVlK2N4MGc9PVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIldTeGltVU05a3hZR2M1VlJjMGlabEE9PVwiLFwibm9QYWRkaW5nXCI6XCJTZ1hjaGp6NGRKcit0Yzh5a0xuRTFBPT1cIixcImNvbnRlbnRcIjpcInhuOHlmak42bWV4UlhJZ3lOaG1raXc9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4vQnV0dG9uQmFkZ2VcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25CYWRnZS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQnV0dG9uQmFkZ2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBCdXR0b25CYWRnZSh7IGNoaWxkcmVuLCBpbnZlcnRlZCA9IGZhbHNlLCBjbGFzc05hbWUgfTogQnV0dG9uQmFkZ2VQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmJ1dHRvbkJhZGdlLCB7W3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkfSwgY2xhc3NOYW1lXSl9PntjaGlsZHJlbn08L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uQmFkZ2U7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImJ1dHRvbkJhZGdlXCI6XCJSU2piUmlYRldBZkJ6Y0NvYU1wWGVBPT1cIixcImludmVydGVkXCI6XCJYNG80T0tzUzFUNG1pSXMwQ3E1eC1nPT1cIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgRWxlbWVudFR5cGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIE9mZnNldFNpZGUgPSBcImxlZnRcIiB8IFwicmlnaHRcIjtcblxudHlwZSBCdXR0b25MaW5rUHJvcHMgPVxuICB8IHtcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgICAgIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHk/OiBib29sZWFuO1xuICAgICAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICAgICAgc2l6ZT86IFNpemU7XG4gICAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xuICAgICAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gQnV0dG9uTGluayh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIHNpemUsXG4gIGNvbnRhaW5lclJlZixcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIC4uLnByb3BzXG59OiBCdXR0b25MaW5rUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImJ1dHRvbi1saW5rXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCxcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiZcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKX1cbiAgICA8L0NvbXBvbmVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uTGluaztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJaSXI5dy0tZlNpdnFXVkdvU3AxNHRBPT1cIixcImxlZnRcIjpcInJSeXU5QVZHd1grLXhqVE9NVFNFMXc9PVwiLFwic21hbGxcIjpcIl8wREJoR0p2Y2JqRU1sU3FFb2ZGLXJ3PT1cIixcIm1lZGl1bVwiOlwiYTYremNVWTZYS3k5NHpBcVVZYUU2dz09XCIsXCJsYXJnZVwiOlwiVyt2NHZGZWJRa3h3MWNkaUtZLUt2Zz09XCIsXCJ4bGFyZ2VcIjpcImRZOTFEUVJZVWFXVDRFek9KSitHQmc9PVwiLFwiaW52ZXJ0ZWRcIjpcInlwbENweWxMNElkZXMrY09ycVNpbVE9PVwiLFwicm91bmRlZFwiOlwiTVJFWTA5K2Q2OXZWODRoWm5KdUxZdz09XCIsXCJyaWdodE9mZnNldFwiOlwiSHNhbzdtRlczbFlUck5oZld2ZnhXdz09XCIsXCJsZWZ0T2Zmc2V0XCI6XCJNWGxMM084S1VZZVZBWWNTc25Oczl3PT1cIixcIm5vU2hhZG93XCI6XCJIcXo0Q3FRY080czBNVGF3ckRyMG9BPT1cIixcInRyYW5zcGFyZW50XCI6XCJoMWhOd2MyVWxNMEM1Ri14ZGdhNWR3PT1cIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIlRteXE0K3VIVStKSmVZTmRCSDhMMlE9PVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIkp6ekduVHQ0YU0zKzlyVmxOUVdpMEE9PVwiLFwibm9QYWRkaW5nXCI6XCJVdkk4VW5qYzlYMHpOMmw1Vyt0bXJRPT1cIixcIm5vQm9yZGVyXCI6XCJRcDV1Qm5RZ0pGb1pIZ1lTaHpBUGN3PT1cIixcImRpc2FibGVkXCI6XCJaWGxqa1lwUFdqREpMQzRCRUdNcHJ3PT1cIixcImNvbnRlbnRcIjpcIl8wbjJNbk9mSlBtMnd4czRNMm5iR0hBPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGVja2JveCB9IGZyb20gXCIuL0NoZWNrYm94XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9DaGVja2JveC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQ2hlY2tib3hQcm9wcyA9IHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG9uQ2hhbmdlOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBuYW1lPzogc3RyaW5nO1xuICBzaXplPzogU2l6ZTtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgaW5kZXRlcm1pbmF0ZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcblxufTtcblxuZnVuY3Rpb24gQ2hlY2tib3goe1xuICBsYWJlbCxcbiAgb25DaGFuZ2UsXG4gIHBsYWNlaG9sZGVyLFxuICBjaGVja2VkLFxuICBkaXNhYmxlZCxcbiAgbmFtZSxcbiAgY2xhc3NOYW1lLFxuICBpbmRldGVybWluYXRlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG59OiBDaGVja2JveFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+XG4gICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCksXG4gICAgW29uQ2hhbmdlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPExhYmVsIHZhbHVlPXtsYWJlbH0gPlxuICAgICAgPGlucHV0XG4gICAgICAgIGRhdGEtdGVzdGlkPVwiY2hlY2tib3hcIlxuICAgICAgICByZWY9eyhpbnB1dFJlZikgPT4ge1xuICAgICAgICAgIGlmIChpbnB1dFJlZikge1xuICAgICAgICAgICAgaW5wdXRSZWYuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jaGVja2JveCwgY2xhc3NOYW1lLCBzdHlsZXNbc2l6ZV1dKX1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIC8+XG4gICAgPC9MYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MYWJlbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGFiZWxJbnB1dFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTExhYmVsRWxlbWVudD47XG4gIHZhbHVlOiBSZWFjdE5vZGU7XG59O1xuXG5mdW5jdGlvbiBMYWJlbCh7IGNsYXNzTmFtZSwgY2hpbGRyZW4sIHZhbHVlLCBjb250YWluZXJSZWYgfTogTGFiZWxJbnB1dFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxhYmVsXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfVxuICAgID5cbiAgICAgIHt2YWx1ZX1cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMYWJlbDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJiUjdQTzh5UkZ0VWxOMXZzUDdlY1JRPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjaGVja2JveFwiOlwiQ0JRWjRQcDFjbGIrNVI4SWxDTzRnUT09XCIsXCJzbWFsbFwiOlwiXzVqYmp1dDdHZ3Q3Z3hlbmp5ZjlMYlE9PVwiLFwibWVkaXVtXCI6XCJpUEFPdzJac05KQTBuV0RYcVdDMzdnPT1cIixcImxhcmdlXCI6XCJMRXlrWHM5bUVFU2R3bzZpWm9NZFV3PT1cIixcInhsYXJnZVwiOlwidXFwQUNFSjFvYkE0YlJsYWVBVDI3Zz09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JQaWNrZXIgfSBmcm9tIFwiLi9Db2xvclBpY2tlclwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBDb2xvclN3YXRjaCB9IGZyb20gXCIuLi9Db2xvclN3YXRjaFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db2xvclBpY2tlci5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDb2xvciB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIENvbG9yUGlja2VyUHJvcHMgPSB7XG4gIGNvbG9yczogQ29sb3JbXTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgZGlyZWN0aW9uPzogXCJob3Jpem9udGFsXCIgfCBcInZlcnRpY2FsXCI7XG4gIG9uU2VsZWN0OiAoY29sb3I6IENvbG9yKSA9PiB2b2lkO1xuICBzZWxlY3RlZENvbG9yPzogQ29sb3I7XG4gIGNhblRvZ2dsZT86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBDb2xvclBpY2tlcih7XG4gIGNvbG9ycyxcbiAgY29udGFpbmVyUmVmLFxuICBvblNlbGVjdCxcbiAgc2VsZWN0ZWRDb2xvcixcbiAgZGlyZWN0aW9uID0gXCJ2ZXJ0aWNhbFwiLFxuICBjYW5Ub2dnbGUgPSBmYWxzZSxcbn06IENvbG9yUGlja2VyUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb2xvclBpY2tlciwgc3R5bGVzW2RpcmVjdGlvbl1dKX1cbiAgICA+XG4gICAgICB7Y29sb3JzLm1hcCgoY29sb3I6IENvbG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZVNlbGVjdCA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoY2FuVG9nZ2xlICYmIGNvbG9yLmtleSA9PT0gc2VsZWN0ZWRDb2xvcj8ua2V5KSB7XG4gICAgICAgICAgICBvblNlbGVjdChudWxsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb25TZWxlY3QoY29sb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxDb2xvclN3YXRjaFxuICAgICAgICAgICAga2V5PXtjb2xvci5rZXl9XG4gICAgICAgICAgICBjb2xvcj17Y29sb3J9XG4gICAgICAgICAgICBpc1NlbGVjdGVkPXtjb2xvci5rZXkgPT09IHNlbGVjdGVkQ29sb3I/LmtleX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbGVjdH1cbiAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yUGlja2VyO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbG9yLCBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQ29sb3JTd2F0Y2hQcm9wcyA9IHtcbiAgY29sb3I6IENvbG9yO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBpc1NlbGVjdGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gQ29sb3JTd2F0Y2goe1xuICBjb2xvcixcbiAgY29udGFpbmVyUmVmLFxuICBpc1NlbGVjdGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBvbkNsaWNrLFxufTogQ29sb3JTd2F0Y2hQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb2xvclN3YXRjaCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5zZWxlY3RlZF06IGlzU2VsZWN0ZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIGRhdGEtdGVzdGlkPVwiY29sb3Itc3dhdGNoXCJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmhleENvZGUgfX1cbiAgICA+XG4gICAgICB7Y29sb3IubGFiZWwgJiYgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc3JPbmx5fT57YFNlbGVjdCAke2NvbG9yLmxhYmVsfSBjb2xvcmB9PC9zcGFuPn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JTd2F0Y2g7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yU3dhdGNoXCI6XCJ1VGY3bVlmWGVOVDdHbjB6bm5SOERRPT1cIixcInNtYWxsXCI6XCJhQWJlempPbXcyTnlUOVJVN1B1eU9BPT1cIixcImxhcmdlXCI6XCJRYzZTQ3ZxYm5uaEozenRnelBaT0ZBPT1cIixcInhsYXJnZVwiOlwiXzZvQkJaRGtSa3pmN3RGNGJoeUR0QUE9PVwiLFwic2VsZWN0ZWRcIjpcIm5pY1pmZ01rK3VRRlB5cEpJa1F1Ync9PVwiLFwic3JPbmx5XCI6XCJHSHBIRUIxUVhEeWplUjlWbkVkMVRnPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb2xvclBpY2tlclwiOlwiREt0UDU1Yk9mVVRCMWtEYS1pVUhxUT09XCIsXCJob3Jpem9udGFsXCI6XCJfMzRMajgtYi0xM0M4TDA5UnNNaW5lZz09XCIsXCJ2ZXJ0aWNhbFwiOlwiXzF5dWdHUXM0RWswdDNUOHRnb0t4VlE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbmZpcm1hdGlvbk1vZGFsIH0gZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWxcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IE1vZGFsIH0gZnJvbSBcIi4uL01vZGFsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBDb25maXJtYXRpb25Nb2RhbFByb3BzID0ge1xuICBidXR0b25zTGVmdD86IFJlYWN0RWxlbWVudFtdO1xuICBidXR0b25zUmlnaHQ/OiBSZWFjdEVsZW1lbnRbXTtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGhlYWRlcj86IHN0cmluZztcbiAgaXNPcGVuOiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBub092ZXJsYXk/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gQ29uZmlybWF0aW9uTW9kYWwoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGlzT3BlbixcbiAgYnV0dG9uc0xlZnQgPSBbXSxcbiAgYnV0dG9uc1JpZ2h0ID0gW10sXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBiYXNlWkluZGV4ID0gMTAxOSxcbn06IENvbmZpcm1hdGlvbk1vZGFsUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8TW9kYWxcbiAgICAgIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgbm9PdmVybGF5PXtub092ZXJsYXl9XG4gICAgICBub1NoYWRvdz17bm9TaGFkb3d9XG4gICAgICBiYXNlWkluZGV4PXtiYXNlWkluZGV4fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgeyEhaGVhZGVyICYmIDxoMSBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEhlYWRlcn0+e2hlYWRlcn08L2gxPn1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1vZGFsQ29udGVudCxcbiAgICAgICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zQ29udGFpbmVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNMZWZ0fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc1JpZ2h0fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvTW9kYWw+XG4gICk7XG59XG5cbkNvbmZpcm1hdGlvbk1vZGFsLmRpc3BsYXlOYW1lID0gXCJDb25maXJtYXRpb25Nb2RhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBDb25maXJtYXRpb25Nb2RhbDtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUhvdGtleXMgfSBmcm9tIFwicmVhY3QtaG90a2V5cy1ob29rXCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTW9kYWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1vZGFsUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIGJ1dHRvbj86IFJlYWN0Tm9kZTtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBNb2RhbCh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGlzT3BlbixcbiAgYnV0dG9uLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub092ZXJsYXkgPSBmYWxzZSxcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxuICBiYXNlWkluZGV4ID0gMTAwOSxcbn06IE1vZGFsUHJvcHMpIHtcbiAgdXNlSG90a2V5cyhcIkVzY2FwZVwiLCBvbkNsb3NlKTtcblxuICBjb25zdCBoYW5kbGVPdmVybGF5Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgb25DbG9zZSgpO1xuICB9LCBbb25DbG9zZV0pO1xuXG4gIHJldHVybiAoXG4gICAgaXNPcGVuICYmIChcbiAgICAgIDxkaXYgcmVmPXtjb250YWluZXJSZWZ9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMub3ZlcmxheSxcbiAgICAgICAgICAgIHsgW3N0eWxlcy5ub092ZXJsYXldOiBub092ZXJsYXkgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLW92ZXJsYXlcIlxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU92ZXJsYXlDbGlja31cbiAgICAgICAgLz5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDEgfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWxcIlxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2J1dHRvbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMiB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b259XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2J1dHRvbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWw7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm92ZXJsYXlcIjpcInBVNklCMnIwTHBDRlBYZ1R2T3IyZ0E9PVwiLFwibm9PdmVybGF5XCI6XCJfNVNVUjlGaC1mSFR5NFhyNm1RQytwQT09XCIsXCJtb2RhbFwiOlwiTENBVDgzbXVYc0FHclBVSFExeStoUT09XCIsXCJ0cmFuc3BhcmVudFwiOlwiV0hVOFFicHorQXZULVlwdVFlVUstUT09XCIsXCJub1NoYWRvd1wiOlwiR2kxVlRtZzNHUE54blg5MS1tMC01Zz09XCIsXCJtb2RhbEJ1dHRvblwiOlwibGZuZkh1K3h5ZUVqY1FiQVF3aklUZz09XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJqdktTaS1mS3VmY3BLOWVCV1dGQ0xnPT1cIixcIm1vZGFsSGVhZGVyXCI6XCJjeDFSb1FkZ0FiZW52VlhVOEI3ZlN3PT1cIixcIm1vZGFsQ29udGVudFwiOlwiWkQ0djNIRS1BWVpYVjBJVFdERjdHZz09XCIsXCJub1BhZGRpbmdcIjpcIl8xekZGOHhxeW83N1V4RzJ2NTQ5QmVBPT1cIixcIm1vZGFsQnV0dG9uc0NvbnRhaW5lclwiOlwiXzRoUWhDZTVVN1lCeWhuaE8rLUdxaXc9PVwiLFwibW9kYWxCdXR0b25zXCI6XCJKb0lMYlc1Rm5aaXhhSjdFVHZvOCt3PT1cIn07IiwiZXhwb3J0IHtcbiAgRHJvcGRvd24sXG4gIERyb3Bkb3duUHJvcHMsXG4gIEl0ZW0gYXMgRHJvcGRvd25JdGVtLFxuICBJdGVtQm9keVJlbmRlcmVyRm4gYXMgRHJvcGRvd25JdGVtQm9keVJlbmRlcmVyRm4sXG4gIFJlbmRlckNsaWNrYWJsZUZuIGFzIERyb3Bkb3duUmVuZGVyQ2xpY2thYmxlRm4sXG4gIFJlbmRlckRpc3BsYXlQcm9wcyBhcyBEcm9wZG93blJlbmRlckRpc3BsYXlQcm9wcyxcbn0gZnJvbSBcIi4vRHJvcGRvd25cIjtcbmV4cG9ydCB7XG4gIENsaWNrYWJsZSBhcyBEcm9wZG93bkNsaWNrYWJsZSxcbiAgQ2xpY2thYmxlUHJvcHMgYXMgRHJvcGRvd25DbGlja2FibGVQcm9wc1xufSBmcm9tIFwiLi9DbGlja2FibGVcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdENoaWxkLCBSZWFjdEVsZW1lbnQsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VPdXRzaWRlQ2xpY2sgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcblxuaW1wb3J0IHsgQ2xpY2thYmxlIH0gZnJvbSBcIi4vQ2xpY2thYmxlXCI7XG5pbXBvcnQgeyBNZW51LCBNZW51Q29udGFpbmVyLCBNZW51SXRlbSwgTWVudVBsYWNlbWVudCB9IGZyb20gXCIuLi9NZW51XCI7XG5cbmV4cG9ydCB0eXBlIEl0ZW0gPSB7IGlkOiBudW1iZXIgfCBzdHJpbmc7IG5hbWU6IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBSZW5kZXJEaXNwbGF5UHJvcHM8VCBleHRlbmRzIEl0ZW0+ID0gUGljazxcbiAgRHJvcGRvd25Qcm9wczxUPixcbiAgXCJkaXNwbGF5XCIgfCBcInNlbGVjdGVkSXRlbVwiXG4+ICYgeyBpc0Rpc2FibGVkOiBib29sZWFuOyB0b2dnbGVJc09wZW46ICgpID0+IHZvaWQgfTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyQ2xpY2thYmxlRm48VCBleHRlbmRzIEl0ZW0+ID0gKFxuICBwcm9wczogUmVuZGVyRGlzcGxheVByb3BzPFQ+XG4pID0+IFJlYWN0RWxlbWVudDtcblxuZXhwb3J0IHR5cGUgSXRlbUJvZHlSZW5kZXJlckZuPFQgZXh0ZW5kcyBJdGVtPiA9IChzdGF0ZToge1xuICBpdGVtOiBUO1xuICBpc1NlbGVjdGVkOiBib29sZWFuO1xufSkgPT4gUmVhY3RDaGlsZDtcblxuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93blByb3BzPFQgZXh0ZW5kcyBJdGVtPiB7XG4gIGl0ZW1Cb2R5UmVuZGVyZXI/OiBJdGVtQm9keVJlbmRlcmVyRm48VD47XG4gIGl0ZW1zOiBUW107XG4gIG9uU2VsZWN0OiAoaXRlbTogVCkgPT4gdm9pZDtcbiAgZGlzcGxheTogUmVhY3RDaGlsZDtcbiAgcmVuZGVyQ2xpY2thYmxlPzogUmVuZGVyQ2xpY2thYmxlRm48VD47XG4gIHNlbGVjdGVkSXRlbTogVCB8IG51bGw7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wZG93bjxUIGV4dGVuZHMgSXRlbT4oe1xuICBpdGVtQm9keVJlbmRlcmVyLFxuICBpdGVtcyxcbiAgb25TZWxlY3Q6IGhhbmRsZVNlbGVjdCxcbiAgZGlzcGxheSxcbiAgcmVuZGVyQ2xpY2thYmxlLFxuICBzZWxlY3RlZEl0ZW0sXG4gIHBsYWNlbWVudCA9IHsgdmVydGljYWw6IFwiYm90dG9tXCIsIGhvcml6b250YWw6IFwibGVmdFwiIH1cbn06IERyb3Bkb3duUHJvcHM8VD4pIHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcmVmID0gdXNlT3V0c2lkZUNsaWNrKCgpID0+IHNldElzT3BlbihmYWxzZSkpO1xuICBjb25zdCBoYW5kbGVDbGljayA9IChpdGVtOiBUKSA9PiB7XG4gICAgaGFuZGxlU2VsZWN0KGl0ZW0pO1xuICAgIHNldElzT3BlbihmYWxzZSk7XG4gIH07XG4gIGNvbnN0IGlzRGlzYWJsZWQgPSAhaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwO1xuICBjb25zdCB0b2dnbGVJc09wZW4gPSAoKSA9PiBzZXRJc09wZW4oIWlzT3Blbik7XG5cbiAgcmV0dXJuIChcbiAgICA8TWVudUNvbnRhaW5lclxuICAgICAgYnV0dG9uPXtcbiAgICAgICAgdHlwZW9mIHJlbmRlckNsaWNrYWJsZSA9PT0gXCJmdW5jdGlvblwiID8gKFxuICAgICAgICAgIHJlbmRlckNsaWNrYWJsZSh7XG4gICAgICAgICAgICBkaXNwbGF5LFxuICAgICAgICAgICAgaXNEaXNhYmxlZCxcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbSxcbiAgICAgICAgICAgIHRvZ2dsZUlzT3BlbixcbiAgICAgICAgICB9KVxuICAgICAgICApIDogKFxuICAgICAgICAgIDxDbGlja2FibGVcbiAgICAgICAgICAgIGRpc3BsYXk9e2Rpc3BsYXl9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgb25DbGljaz17dG9nZ2xlSXNPcGVufVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHBsYWNlbWVudD17cGxhY2VtZW50fVxuICAgICAgcmVmPXtyZWZ9XG4gICAgPlxuICAgICAgPE1lbnUgaXNPcGVuPXtpc09wZW59PlxuICAgICAgICB7aXRlbXMgJiZcbiAgICAgICAgICBpdGVtcy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgICBpc0FjdGl2ZT17aXRlbS5pZCA9PT0gc2VsZWN0ZWRJdGVtPy5pZH1cbiAgICAgICAgICAgICAga2V5PXtpdGVtLmlkfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDbGljayhpdGVtKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2l0ZW1Cb2R5UmVuZGVyZXJcbiAgICAgICAgICAgICAgICA/IGl0ZW1Cb2R5UmVuZGVyZXIoe1xuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpdGVtLmlkID09PSBzZWxlY3RlZEl0ZW0/LmlkLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IGl0ZW0ubmFtZX1cbiAgICAgICAgICAgIDwvTWVudUl0ZW0+XG4gICAgICAgICAgKSl9XG4gICAgICA8L01lbnU+XG4gICAgPC9NZW51Q29udGFpbmVyPlxuICApO1xufVxuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uLm1vZHVsZS5jc3NcIjtcblxudHlwZSBJY29uUHJvcHMgPSB7XG4gIGFsdD86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxJbWFnZUVsZW1lbnQ+O1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHNyYzogc3RyaW5nO1xuICBzaXplPzogXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIiB8IFwieGxhcmdlXCI7XG59O1xuXG5mdW5jdGlvbiBJY29uKHtcbiAgc3JjLFxuICBhbHQsXG4gIGNvbnRhaW5lclJlZixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGludmVydGVkID0gZmFsc2UsXG59OiBJY29uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8aW1nXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuaWNvbixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7IFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCB9LFxuICAgICAgXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImljb25cIlxuICAgICAgYWx0PXthbHR9XG4gICAgICBzcmM9e3NyY31cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpY29uXCI6XCJZQTJJSFFENG9wcE9pb1pJQ0h3end3PT1cIixcInNtYWxsXCI6XCJxZHpzMkVNbUJkYjBNek5TMGlEaE1BPT1cIixcIm1lZGl1bVwiOlwiSTZlRUdJQks1OU9rZHB3VW91YWF1UT09XCIsXCJsYXJnZVwiOlwiXzJiaTZJRVloZE1iUGdQSmZ3b1BqdUE9PVwiLFwieGxhcmdlXCI6XCJja2tyNFpGT1ZHdUNONEVqUE1xZUdBPT1cIixcImludmVydGVkXCI6XCJlbTVyTDRuQUgxSXdmM01IZUllUG1nPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIncwQ3Bhc2pZeUxSLWkyUE5JbjlFc2c9PVwifTsiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQgNUw3LjUgMTJMMSA1JyBzdHJva2U9J2JsYWNrJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiaW1wb3J0IFJlYWN0LCB7XG4gIFJlYWN0Tm9kZSxcbiAgUmVmT2JqZWN0LFxuICB1c2VDb250ZXh0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IFBsYWNlbWVudENvbnRleHQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnUubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc09wZW4/OiBib29sZWFuO1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGZvb3Rlcj86IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIE1lbnUoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBjbGFzc05hbWUsXG4gIGlzT3BlbiA9IHRydWUsXG4gIGhlYWRlcixcbiAgZm9vdGVyLFxufTogTWVudVByb3BzKSB7XG4gIGNvbnN0IG1lbnVQbGFjZW1lbnQgPSB1c2VDb250ZXh0KFBsYWNlbWVudENvbnRleHQpO1xuICBjb25zdCBpbm5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCByZWYgPSBjb250YWluZXJSZWYgfHwgaW5uZXJSZWY7XG5cbiAgaWYgKCFtZW51UGxhY2VtZW50KVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiTWVudSBjb21wb25lbnQgbXVzdCBiZSB3cmFwcGVkIGJ5IGEgTWVudUNvbnRhaW5lciBjb21wb25lbnQuXCJcbiAgICApO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCB7IHRvcCwgYm90dG9tIH0gPSByZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9FZGdlID1cbiAgICAgICAgbWVudVBsYWNlbWVudC52ZXJ0aWNhbCA9PT0gXCJ0b3BcIiA/IHRvcCA6IHdpbmRvdy5pbm5lckhlaWdodCAtIGJvdHRvbTtcblxuICAgICAgaWYgKGRpc3RhbmNlVG9FZGdlIDwgMCkge1xuICAgICAgICBjb25zdCB1bEVsID0gcmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcihcInVsXCIpO1xuICAgICAgICBjb25zdCBsaUVsID0gdWxFbC5xdWVyeVNlbGVjdG9yKFwibGlcIik7XG4gICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IHVsRWwuY2xpZW50SGVpZ2h0ICsgZGlzdGFuY2VUb0VkZ2U7XG4gICAgICAgIHVsRWwuc3R5bGUubWF4SGVpZ2h0ID0gYGNhbGMoJHtuZXdIZWlnaHR9cHggLSAke1xuICAgICAgICAgIGdldENvbXB1dGVkU3R5bGUobGlFbCkubWluSGVpZ2h0XG4gICAgICAgIH0pYDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpc09wZW4sIG1lbnVQbGFjZW1lbnRdKTtcblxuICBpZiAoIWlzT3Blbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgc3R5bGVzLm1lbnUsXG4gICAgICAgICAgeyBbc3R5bGVzLm9wZW5dOiBpc09wZW4gfSxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIF0pfVxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHtoZWFkZXIgJiYgaXNPcGVuICYmIDxoMyBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PntoZWFkZXJ9PC9oMz59XG4gICAgICAgICAgPHVsPntjaGlsZHJlbn08L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2Zvb3RlciAmJiBpc09wZW4gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgICBzdHlsZXMuZm9vdGVyLFxuICAgICAgICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiAhY2hpbGRyZW4gfSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmb290ZXJ9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVudTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJxY3ZEU2ZGdCt3MGphMmZxUGMwUzV3PT1cIixcIm1lbnVDb250YWluZXJcIjpcIkx3cjFhM2JQLTk1YWV6em1hY29KZnc9PVwiLFwidG9wXCI6XCJiQkhicytGV2k2LXp3V01aSW1GK05BPT1cIixcInJpZ2h0XCI6XCJCOE00Mk53b1o4cFVWbTVSNEpKdjFnPT1cIixcImxlZnRcIjpcInBPRzd0WGZURms4cXFYdE5DMEUtT3c9PVwiLFwiYm90dG9tXCI6XCJ1Y3ZOMEVGTW5zOGJmVnZzaTlqOXlRPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51XCI6XCJyU0Jmc0ZOampvb0pzREgtWCtZWGJ3PT1cIixcIm9wZW5cIjpcInZYN3ZnQTlabEY3VDlFUjlWSm9kYlE9PVwiLFwiZW50cmFuY2VcIjpcIkdwQjJMc2FkaHVHSlp2S29OT2RvekE9PVwiLFwiaGVhZGVyXCI6XCJvQVRsQkZnZXBaNWdBWkFyLUN4bkFBPT1cIixcImZvb3RlclwiOlwid0tlRTczellmYi03Y1JOLUY4T1kxZz09XCIsXCJub0JvcmRlclwiOlwiTEQ2TER2cy15bE1yUGdzbGo0eDNoZz09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUl0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTExJRWxlbWVudD4pID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBNZW51SXRlbSh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBpc0FjdGl2ZSA9IGZhbHNlLFxufTogTWVudUl0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51SXRlbSxcbiAgICAgICAgeyBbc3R5bGVzLmFjdGl2ZV06IGlzQWN0aXZlIH0sXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUl0ZW1cIjpcIm1KZDdkUlpOT3dZZThJOUNxRmx6cmc9PVwiLFwibm9QYWRkaW5nXCI6XCJ4Y2tET2RuUFBZS1RreW0yYXd0cmpBPT1cIixcImFjdGl2ZVwiOlwieCt5ckNxNUJ1K2pnWDdTUlVyOWZldz09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUxpbmtJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51TGlua0l0ZW1Qcm9wcyA9XG4gIHwge1xuICAgICAgYXM6IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBNZW51TGlua0l0ZW0oe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IE1lbnVMaW5rSXRlbVByb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIGRhdGEtdGVzdGlkPVwibWVudS1saW5rLWl0ZW1cIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51TGlua0l0ZW0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51TGlua0l0ZW07XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVMaW5rSXRlbVwiOlwib0VyOFpKWExuWnlESkJPUlp0SVY0dz09XCIsXCJub1BhZGRpbmdcIjpcIl8zVE5JSkFldEFTeXpiSStLbExUSEN3PT1cIixcImFjdGl2ZVwiOlwiZ2hhdUNUUFRCRUpBdUFvNjMyejVmUT09XCIsXCJtZW51SXRlbVwiOlwibjF4bjRFWXV4RXFPYzNmQ0VhbXozUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZUlucHV0IH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG5leHBvcnQgeyBGaWxlSW5wdXRTaXplIH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GaWxlSW5wdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRTaXplID0gU2l6ZTtcblxudHlwZSBQcm9wcyA9IHtcbiAgb25DaGFuZ2U6IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYWNjZXB0Pzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIHNpemU/OiBGaWxlSW5wdXRTaXplO1xufTtcblxuZnVuY3Rpb24gRmlsZUlucHV0KHtcbiAgY2hpbGRyZW4sXG4gIGFjY2VwdCxcbiAgb25DaGFuZ2UsXG4gIGlucHV0UmVmLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubGFiZWwsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmlucHV0fVxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGlkPVwiZmlsZVwiXG4gICAgICAgIGFjY2VwdD17YWNjZXB0fVxuICAgICAgICBtdWx0aXBsZT17bXVsdGlwbGV9XG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxlSW5wdXQ7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImlucHV0XCI6XCJlVXFhMzUrRW0yTGNoMjZOeGpidStRPT1cIixcImxhYmVsXCI6XCJueFcyMWg4VUkwTU50d28ya2NBZEl3PT1cIixcInNtYWxsXCI6XCJOZGExcEFjR0pjeURERVM1RVZKc293PT1cIixcImxhcmdlXCI6XCJ6cUxTM1lIWHRqbE1Cc0ZPenJ2RVpnPT1cIixcInhsYXJnZVwiOlwiVlpsNVd5QWt2MzAxLWhDQ3plNU1uUT09XCIsXCJpbnZlcnRlZFwiOlwidmxTYUpRSmh6dDZJTnZXaThOdFV3Zz09XCIsXCJyb3VuZGVkXCI6XCJiLXg1VHJ5U05HQ0Y5SFk4SjNIdEFBPT1cIixcIm5vU2hhZG93XCI6XCJfNXdsMTRKamYxeXhId0FMeG1FdzZNUT09XCIsXCJub0JvcmRlclwiOlwiZGxYV1FPbE5lK2FGa1ZiUHhETG00QT09XCIsXCJub1BhZGRpbmdcIjpcImlQeFVHLU9OMVhMT2tmVlB6dDdOWVE9PVwiLFwidHJhbnNwYXJlbnRcIjpcIkJQWEk5dTNoZ0F5ZEFjNUJ6emtDTmc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSk0zSlZYdDc3bkg5dXIrYUwrUllEZz09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiTVhhc2tmZld6MmstaHF0SFJ0MnZPUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvYXRpbmdQYW5lbCB9IGZyb20gXCIuL0Zsb2F0aW5nUGFuZWxcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFBsYWNlbWVudCA9IHtcbiAgaG9yaXpvbnRhbDpcbiAgICB8IFwicmlnaHRcIlxuICAgIHwgXCJyaWdodEVkZ2VcIlxuICAgIHwgXCJyaWdodE9uRWRnZVwiXG4gICAgfCBcImxlZnRcIlxuICAgIHwgXCJsZWZ0RWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJsZWZ0T25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHZlcnRpY2FsOlxuICAgIHwgXCJ0b3BcIlxuICAgIHwgXCJ0b3BFZGdlXCJcbiAgICB8IFwidG9wT25FZGdlXCJcbiAgICB8IFwiYm90dG9tXCJcbiAgICB8IFwiYm90dG9tRWRnZVwiXG4gICAgfCBcImJvdHRvbU9uRWRnZVwiXG4gICAgfCBcImNlbnRlclwiO1xuICBwYXJlbnQ6IFwidmlld3BvcnRcIiB8IFwiY29udGFpbmVyXCI7XG59O1xuXG50eXBlIEZsb2F0aW5nUGFuZWxQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvbHVtblwiIHwgXCJyb3dcIjtcbiAgcGxhY2VtZW50PzogUGxhY2VtZW50O1xufTtcblxuZnVuY3Rpb24gRmxvYXRpbmdQYW5lbCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgbGF5b3V0ID0gXCJjb2x1bW5cIixcbiAgcGxhY2VtZW50ID0geyBob3Jpem9udGFsOiBcImNlbnRlclwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiwgcGFyZW50OiBcInZpZXdwb3J0XCIgfSxcbn06IEZsb2F0aW5nUGFuZWxQcm9wcykge1xuICBjb25zdCBob3Jpem9udGFsUGxhY2VtZW50ID1cbiAgICBwbGFjZW1lbnQuaG9yaXpvbnRhbCA9PT0gXCJjZW50ZXJcIlxuICAgICAgPyBcImhvcml6b250YWxDZW50ZXJcIlxuICAgICAgOiBwbGFjZW1lbnQuaG9yaXpvbnRhbDtcblxuICBjb25zdCB2ZXJ0aWNhbFBsYWNlbWVudCA9XG4gICAgcGxhY2VtZW50LnZlcnRpY2FsID09PSBcImNlbnRlclwiID8gXCJ2ZXJ0aWNhbENlbnRlclwiIDogcGxhY2VtZW50LnZlcnRpY2FsO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImZsb2F0aW5nLXBhbmVsXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbaG9yaXpvbnRhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1t2ZXJ0aWNhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1tsYXlvdXRdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IHBsYWNlbWVudC5wYXJlbnQgIT09IFwiY29udGFpbmVyXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxvYXRpbmdQYW5lbDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJrVVRDcTdzTzVjUUhybjIwUEpVQ213PT1cIixcInJvd1wiOlwidGRuYzFiREhEbUdiZ0FjN1NKcjY5UT09XCIsXCJjb2x1bW5cIjpcIk1tdDA3Nk42QXh5SDROUkRwQ083V0E9PVwiLFwiZml4ZWRcIjpcIl85MmViUXZKNXhOS0pTOHpha0s3UzJBPT1cIixcInBsYWluXCI6XCJ5K2lkRHhaKzVNcHA3T0kzR1BMQUVnPT1cIixcInRyYW5zcGFyZW50XCI6XCJDRHFvaUswZ0NUSnBuSmdWb1lnSkRRPT1cIixcInRvcFwiOlwiR1BzSGxOUERiRDZLZE5RRUdqOHpRUT09XCIsXCJ0b3BFZGdlXCI6XCJ4Umcwb0FOcnhzeFhOQnlJcG5OSnZ3PT1cIixcInRvcE9uRWRnZVwiOlwiUUF5ZUZGR1JvbnhYUzlGZ0oyZCtXdz09XCIsXCJyaWdodFwiOlwiSThFRENKem8wWndUdGdiVlRNbXpkZz09XCIsXCJyaWdodEVkZ2VcIjpcIlcyQWhtM3h1YTJ2ZUMzSUNUMktRTkE9PVwiLFwicmlnaHRPbkVkZ2VcIjpcInlqQkNRWUVBOG1XaUk5OENGWDVMc3c9PVwiLFwiYm90dG9tXCI6XCJXSnh6WFFMLTVOUHZEZ25lVmdrVndBPT1cIixcImJvdHRvbUVkZ2VcIjpcIkdWSnMtLXBMRGpXdnU5Qy15MzR5Y3c9PVwiLFwiYm90dG9tT25FZGdlXCI6XCJERFZkLVBwbHhuTHBTTEZsR3RGaG53PT1cIixcImxlZnRcIjpcIm9VVE12akwwSHhHZW5VN2tKZFN4SEE9PVwiLFwibGVmdEVkZ2VcIjpcIkJpTnNBa01adWkrNWktS3pZeHEwY1E9PVwiLFwibGVmdE9uRWRnZVwiOlwiXzF2OGltSDBNVGotck1aMHJDLWloUWc9PVwiLFwiaG9yaXpvbnRhbENlbnRlclwiOlwiRDRwNUFhMDYzVG5tN20wdWFHaExrdz09XCIsXCJ2ZXJ0aWNhbENlbnRlclwiOlwiXzJkZUctWTJBM3p3NmtGK1dCbkVtanc9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b24gfSBmcm9tIFwiLi9JY29uQnV0dG9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgSWNvbkJ1dHRvblByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBzcmM6IHN0cmluZztcbiAgYWx0OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiPjtcbn07XG5cbmZ1bmN0aW9uIEljb25CdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIGNvbnRhaW5lclJlZixcbiAgY2hpbGRyZW4sXG4gIHNyYyxcbiAgYWx0LFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcImJ1dHRvblwiLFxufTogSWNvbkJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b247XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiQnZRdHNVQWEtZlFQbVhidlZTVkNOUT09XCIsXCJzbWFsbFwiOlwiXzhaZjRMemNlaUlvZXI3UElWUjhCWUE9PVwiLFwibWVkaXVtXCI6XCJfN1BGMmRuSmdaeElFK3RTMzN4SzRLQT09XCIsXCJsYXJnZVwiOlwiRWJPWXZHS1hpQWFib2hpNE95MUNNdz09XCIsXCJ4bGFyZ2VcIjpcInVPZlo5TGlHem5hQkdJdXg0MHBGR2c9PVwiLFwicm91bmRlZFwiOlwidkFqMHhtalhKVGZEYldJQ1ZLQm8yZz09XCIsXCJ0b3BPZmZzZXRcIjpcIl84WVNzLWtoSUR6SWVmUlJoNXpIMytRPT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJxNGpJbDJYRk9idnNETS00UXh2dHV3PT1cIixcImJvdHRvbU9mZnNldFwiOlwiXzgyS2JFY0VaemNSNVZxSGx4ODYyUFE9PVwiLFwibGVmdE9mZnNldFwiOlwieG5jMStPREZtQlBpaWY1Sm9xVG5kQT09XCIsXCJpbnZlcnRlZFwiOlwiYmhWVVRka1FsdGN0bXJaZTBUNzJrdz09XCIsXCJub1NoYWRvd1wiOlwibnNnaDJjNmNIdHp4YVJyTGt2NkZ6dz09XCIsXCJub0JvcmRlclwiOlwiVnp5NkM0ZGp0cGZMMnBWNW9ZY09Qdz09XCIsXCJ0cmFuc3BhcmVudFwiOlwiRnZkUFMtKzF0bHNUWjFjaUVsc3Z4UT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9JY29uQnV0dG9uTGlua1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIjtcblxudHlwZSBJY29uQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcbiAgICAgIHNyYzogc3RyaW5nO1xuICAgICAgYWx0OiBzdHJpbmc7XG4gICAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc2l6ZT86IFNpemU7XG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEljb25CdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY29udGFpbmVyUmVmLFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzcmMsXG4gIGFsdCxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IEljb25CdXR0b25MaW5rUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImljb24tYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uTGluaztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJtVWhDN1hCWWVoTmwxZitONWhSTzRBPT1cIixcInNtYWxsXCI6XCJzTVMxRmdNM3d3TGcrTGd1dmNYRHdnPT1cIixcIm1lZGl1bVwiOlwiXzFqVTg1bUVQNWlhV3luY0xMYjhsU0E9PVwiLFwibGFyZ2VcIjpcImNJZ2dnUzJmNVBhQkNJVGZ0czByQWc9PVwiLFwieGxhcmdlXCI6XCJUMnphb213TFlIUXgtWUYtdkR0d0h3PT1cIixcInJvdW5kZWRcIjpcIkZNQWg2Z3NGUnJVZkYtQytoeEZKU0E9PVwiLFwidG9wT2Zmc2V0XCI6XCJ5WXZySW1RWnlwS3RKMGNiK2hFZFdRPT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJFaUxRVWUrQkQ4dWJ4ZGorSlF1SHp3PT1cIixcImJvdHRvbU9mZnNldFwiOlwiXzBxSE5JUnNtK01SOXJ5WHBKbUVOUVE9PVwiLFwibGVmdE9mZnNldFwiOlwiTG1JTWx4dnFrUmppSWdZTEh4YVpCZz09XCIsXCJpbnZlcnRlZFwiOlwiQmMrUmg2Qjk3Kzc0amtlTWRDdHJ6Zz09XCIsXCJub1NoYWRvd1wiOlwiaUdHQ0dpZjJ5U2NNSVNEay0ybWtGUT09XCIsXCJub0JvcmRlclwiOlwiZG5qbjFvRnROVkZOMmZSV21La1ozQT09XCIsXCJ0cmFuc3BhcmVudFwiOlwiWndpRjB1NktUSkRnd1JDNFdTTDNyQT09XCIsXCJkaXNhYmxlZFwiOlwibWNaTEp6VDdWczdibFE5Unh3N1JVdz09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSW1hZ2UsIEltYWdlUHJvcHMgfSBmcm9tIFwiLi9JbWFnZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ltYWdlLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgSW1hZ2VQcm9wcyA9IHtcbiAgYWx0Pzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgbGF5b3V0PzogXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcbiAgc3JjOiBzdHJpbmc7XG4gIHNyY1dpZHRoPzogbnVtYmVyO1xuICBzcmNIZWlnaHQ/OiBudW1iZXI7XG4gIGRlY29kaW5nPzogXCJhc3luY1wiIHwgXCJzeW5jXCIgfCBcImF1dG9cIjtcbiAgbG9hZGluZz86IFwiZWFnZXJcIiB8IFwibGF6eVwiO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG59O1xuXG5mdW5jdGlvbiBJbWFnZUNvbXBvbmVudCh7XG4gIHNyYyxcbiAgYWx0LFxuICBzcmNXaWR0aCxcbiAgc3JjSGVpZ2h0LFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbiAgZGVjb2RpbmcgPSBcImF1dG9cIixcbiAgbG9hZGluZyA9IFwiZWFnZXJcIixcbiAgc3R5bGUsXG59OiBJbWFnZVByb3BzKSB7XG4gIGNvbnN0IGltYWdlRWxlbWVudCA9IChcbiAgICA8aW1nXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaW1hZ2UsIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImltYWdlXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgICB3aWR0aD17c3JjV2lkdGh9XG4gICAgICBoZWlnaHQ9e3NyY0hlaWdodH1cbiAgICAgIGRlY29kaW5nPXtkZWNvZGluZ31cbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgLz5cbiAgKTtcblxuICByZXR1cm4gY2hpbGRyZW4gPyAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxuICAgID5cbiAgICAgIHtpbWFnZUVsZW1lbnR9XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIGltYWdlRWxlbWVudFxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZUNvbXBvbmVudDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJfOWdRU1ItK2dxbzVyRHZXUG1Rb0FlUT09XCIsXCJoYXNPdmVybGF5XCI6XCJpaTMrNksrRlc0WWplUUZtLUlOM3NBPT1cIixcIm92ZXJsYXlcIjpcIl8wMEV4TmMzS3crSE9mVENGYTM0R0l3PT1cIixcImltYWdlXCI6XCJyd0Q1ckhjWkZSTmE0ZEhvNmozSnlRPT1cIixcImNvdmVyXCI6XCJfNkFhTjFUNlNZNkVlaitGYVF0YTQyZz09XCIsXCJjb250YWluXCI6XCJFUURrUDBGNXp6Sml0Rjh1TzZIK21BPT1cIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkdCS1BrYzhyc3lqVVZ1Q3AxT2xCb1E9PVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIl81U3p3U0orNlo0Ui1ZYTExZ3dMclNRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0VmlldyB9IGZyb20gXCIuL0xpc3RWaWV3XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3SXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3SXRlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0xpbmtJdGVtIH0gZnJvbSBcIi4vTGlzdFZpZXdMaW5rSXRlbVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXcubW9kdWxlLmNzc1wiO1xuXG50eXBlIExpc3RWaWV3UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaGVhZGVyPzogeyB0ZXh0OiBzdHJpbmc7IGlkOiBzdHJpbmcgfTtcbiAgaGVhZGVyQWN0aW9ucz86IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3KHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGhlYWRlckFjdGlvbnMsXG59OiBMaXN0Vmlld1Byb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgeyhoZWFkZXIgfHwgaGVhZGVyQWN0aW9ucykgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+XG4gICAgICAgICAge2hlYWRlciAmJiAoXG4gICAgICAgICAgICA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyTGFiZWx9IGlkPXtoZWFkZXIuaWR9PlxuICAgICAgICAgICAgICB7aGVhZGVyLnRleHR9XG4gICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hlYWRlckFjdGlvbnN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDx1bCBhcmlhLWxhYmVsbGVkYnk9e2hlYWRlcj8uaWR9IGNsYXNzTmFtZT17c3R5bGVzLmxpc3R9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0VmlldztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJsSnpkUDBtbmZwZ2xGU1l0S0tZekp3PT1cIixcImhlYWRlclwiOlwiXzgydkNRN3hyME5rWTRVbHlTUGtwa3c9PVwiLFwiaGVhZGVyTGFiZWxcIjpcInVuV2VQZElLbjRYYXdSdUw3Q1BEMGc9PVwiLFwibGlzdFwiOlwiXzVCWCtaWi1BYVF1dGN6YkRTMmU1LXc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMaXN0Vmlld0l0ZW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0l0ZW0oe1xuICBjaGlsZHJlbixcbiAgYWN0aXZlID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBMaXN0Vmlld0l0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0l0ZW07XG4iLCJpbXBvcnQgUmVhY3QsIHsgRWxlbWVudFR5cGUsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBCdXR0b25MaW5rIH0gZnJvbSBcIi4uL0J1dHRvbkxpbmtcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBMaXN0Vmlld0xpbmtJdGVtUHJvcHMgPVxuICB8IHtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgYWN0aXZlOiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ6IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc6IGJvb2xlYW47XG4gICAgICBhbGlnbjogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgICAgc2l6ZTogU2l6ZTtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0xpbmtJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGFzOiBDb21wb25lbnQsXG4gIGFjdGl2ZSA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IExpc3RWaWV3TGlua0l0ZW1Qcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cbiAgICAgIDxCdXR0b25MaW5rXG4gICAgICAgIGFzPXtDb21wb25lbnR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQnV0dG9uTGluaz5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0xpbmtJdGVtO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPdmVybGF5IH0gZnJvbSBcIi4vT3ZlcmxheVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL092ZXJsYXkubW9kdWxlLmNzc1wiO1xuXG50eXBlIE92ZXJsYXlQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBpc0ZpeGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBPdmVybGF5KHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgaXNGaXhlZCA9IGZhbHNlLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBPdmVybGF5UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwib3ZlcmxheVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm92ZXJsYXksXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IGlzRml4ZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPdmVybGF5O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJFSUI5LWw1OGdDM1p2dFc4dnRVQUxBPT1cIixcInRyYW5zcGFyZW50XCI6XCJDTTEtbjNzRzhZTmQ3M3FKVlhNMjJnPT1cIixcImZpeGVkXCI6XCJvTzFpVE5sUGpkYTFmanJZZXlMdVVBPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0SW5wdXQgfSBmcm9tIFwiLi9UZXh0SW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UZXh0SW5wdXQubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSwgVGV4dElucHV0VHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIFRleHRJbnB1dFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgb25CbHVyPzogKCkgPT4gdm9pZDtcbiAgb25LZXlEb3duPzogKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBhdHRlcm4/OiBzdHJpbmc7XG4gIHR5cGU/OiBUZXh0SW5wdXRUeXBlO1xuICBzaXplPzogU2l6ZTtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50Pjtcbn07XG5cbmZ1bmN0aW9uIFRleHRJbnB1dCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgb25CbHVyLFxuICBvbktleURvd24sXG4gIHBsYWNlaG9sZGVyLFxuICB2YWx1ZSxcbiAgbmFtZSxcbiAgcGF0dGVybixcbiAgaW5wdXRSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlID0gXCJ0ZXh0XCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxufTogVGV4dElucHV0UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gKFxuICAgIDxpbnB1dFxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dFwiXG4gICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnRleHRJbnB1dCwgc3R5bGVzW3NpemVdLCB7W3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyfV0pfVxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgICBwYXR0ZXJuPXtwYXR0ZXJufVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgbmFtZT17bmFtZX1cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAvPlxuICApO1xuICBpZiAobGFiZWwpIHtcbiAgICByZXR1cm4gPExhYmVsIHZhbHVlPXtsYWJlbH0+e2lucHV0RWxlbWVudH08L0xhYmVsPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gPD57aW5wdXRFbGVtZW50fTwvPjtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0ZXh0SW5wdXRcIjpcImg2UFlKQXp5dFZPazlCZUs1WjAra2c9PVwiLFwic21hbGxcIjpcIlVYbi1CQ1ZnODF5TWQ4Rm9VZnhLU0E9PVwiLFwibWVkaXVtXCI6XCJfNGFpUDZneE5IaHJXYmFjNGsxZ3JVdz09XCIsXCJsYXJnZVwiOlwiTWxuUFhZT1V5UTdoZ0k3c3cxbzB4QT09XCIsXCJ4bGFyZ2VcIjpcIkhHQnVLSmE5WGp4Qjh1VmhLb3AwM0E9PVwiLFwibm9Cb3JkZXJcIjpcInNQblNDR1VOWlhyb0VsU1FSMTkzR1E9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0IH0gZnJvbSBcIi4vVG9hc3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3RDb250YWluZXIgfSBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lclwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3QubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gVG9hc3QoeyBjaGlsZHJlbiwgY29udGFpbmVyUmVmLCBvbkNsaWNrID0gKCkgPT4ge30gfTogVG9hc3RQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudG9hc3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdFwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RcIjpcInZXYTItMW1PRlUraVYxNGpxN1FQc1E9PVwiLFwiZW50cmFuY2VcIjpcImZUc1dzS3JBS2x3VCtHT0U0d0F5U1E9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3RDb250YWluZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0Q29udGFpbmVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcbmZ1bmN0aW9uIFRvYXN0Q29udGFpbmVyKHsgY2hpbGRyZW4sIGJhc2VaSW5kZXggfTogVG9hc3RDb250YWluZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50b2FzdENvbnRhaW5lcl0pfVxuICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0LWNvbnRhaW5lclwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdENvbnRhaW5lcjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RDb250YWluZXJcIjpcIl8yLVh1MnNaTXZOOXRnRHMraXlMYzlRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBWaWRlbywgVmlkZW9Qcm9wcyB9IGZyb20gXCIuL1ZpZGVvXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9WaWRlby5tb2R1bGUuY3NzXCI7XG5cbi8qKlxuICogVGhlcmUgaXMgYSBrbm93biBpc3N1ZSBpbiBSZWFjdCBpbiByZWdhcmRzIHRvIHRoZSAnbXV0ZWQnIHByb3BlcnR5IHdoaWNoIGNhdXNlcyB0aGUgd2FybmluZzpcbiAqIFwiV2FybmluZzogdW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuXCJcbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEwMzg5XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY1NDRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvcmVhY3QtdGVzdGluZy1saWJyYXJ5L2lzc3Vlcy80NzBcbiAqL1xuXG50eXBlIExheW91dCA9IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XG5cbmV4cG9ydCB0eXBlIFZpZGVvUHJvcHMgPSB7XG4gIHNyYzogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGxheW91dD86IExheW91dDtcbiAgYXV0b1BsYXk/OiBib29sZWFuO1xuICBsb29wPzogYm9vbGVhbjtcbiAgbXV0ZWQ/OiBib29sZWFuO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgcG9zdGVyPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVmlkZW8oe1xuICBzcmMsXG4gIHR5cGUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIHBvc3RlcixcbiAgbXV0ZWQgPSB0cnVlLFxuICBsb29wID0gdHJ1ZSxcbiAgYXV0b1BsYXkgPSB0cnVlLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbn06IFZpZGVvUHJvcHMpIHtcbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICA8dmlkZW9cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICAgIGxvb3A9e2xvb3B9XG4gICAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cbiAgICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICAgIHBsYXlzSW5saW5lXG4gICAgICA+XG4gICAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICAgIDwvdmlkZW8+XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIDx2aWRlb1xuICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICBsb29wPXtsb29wfVxuICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxuICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICBwbGF5c0lubGluZVxuICAgID5cbiAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICA8L3ZpZGVvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaWRlbztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ1bFdFLUVwcjg1RjBtVXQ3TzFnVVRRPT1cIixcImhhc092ZXJsYXlcIjpcInpLN3UxbmtqYzh4N1lEQWZZUUNUcHc9PVwiLFwidmlkZW9cIjpcImZSNEQ1NkxmZHVvQlctZmltZmJUMHc9PVwiLFwiY292ZXJcIjpcIlZYUXM0UFVuV0d5dzU2ZzYwWnRmV2c9PVwiLFwiY29udGFpblwiOlwiZ3hmbFV6TzRycUNCQUd1enNZRUlldz09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJJLTYzS200TlkxVzRRZ01oZmdVNU1nPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJ2Tk5oSmxnSVRNK29uZjd6ZHphdWZnPT1cIixcIm92ZXJsYXlcIjpcInd4dWw3VVVabG1hckY4NlNHcmQtdHc9PVwifTsiLCJleHBvcnQgeyBOdW1wYWQgfSBmcm9tIFwiLi9OdW1wYWRcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vTnVtcGFkLm1vZHVsZS5jc3NcIjtcblxuaW1wb3J0IGJhY2tzcGFjZUljb24gZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnXCI7XG5cbnR5cGUgRGlnaXQgPSAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgNyB8IDggfCA5O1xuXG5jb25zdCBhcHBlbmREaWdpdCA9IChudW1iZXI6IG51bWJlciwgZGlnaXQ6IERpZ2l0KSA9PiB7XG4gIHJldHVybiBudW1iZXIgKiAxMCArIGRpZ2l0O1xufTtcblxuY29uc3QgcG9wRGlnaXQgPSAobnVtYmVyOiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyIC8gMTApO1xufTtcblxuY29uc3QgZXZlbnREaWdpdEtleXMgPSBbXCIwXCIsIFwiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCJdO1xuXG5leHBvcnQgaW50ZXJmYWNlIE51bXBhZFByb3BzIHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25DaGFuZ2U6IChuZXdOdW1iZXI6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IE51bXBhZCA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTERpdkVsZW1lbnQsIE51bXBhZFByb3BzPihcbiAgKHsgbnVtYmVyLCBvbkNoYW5nZSwgZGlzYWJsZWQgPSBmYWxzZSB9LCByZWYpID0+IHsgICAgXG4gICAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSBcIkJhY2tzcGFjZVwiKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgb25DaGFuZ2UocG9wRGlnaXQobnVtYmVyKSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50RGlnaXRLZXlzLmluY2x1ZGVzKGUua2V5KSkge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGRpZ2l0ID0gcGFyc2VJbnQoZS5rZXksIDEwKSBhcyBEaWdpdDtcbiAgICAgICAgb25DaGFuZ2UoYXBwZW5kRGlnaXQobnVtYmVyLCBkaWdpdCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVFbWl0TnVtYmVySGFuZGxlciA9IChuZXdOdW1iZXI6IG51bWJlcikgPT5cbiAgICAgIChlOiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgb25DaGFuZ2UobmV3TnVtYmVyKTtcbiAgICAgIH07XG5cbiAgICBjb25zdCBOdW1wYWRLZXlzID0gQXJyYXkoMTApXG4gICAgICAuZmlsbCgwKVxuICAgICAgLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbnVtcGFkVmFsdWUgPSAoKGluZGV4ICsgMSkgJSAxMCkgYXMgRGlnaXQ7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICBub1NoYWRvd1xuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17Y3JlYXRlRW1pdE51bWJlckhhbmRsZXIoYXBwZW5kRGlnaXQobnVtYmVyLCBudW1wYWRWYWx1ZSkpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtudW1wYWRWYWx1ZX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MubnVtcGFkfSByZWY9e3JlZn0gdGFiSW5kZXg9ey0xfSBvbktleURvd249e2hhbmRsZUtleURvd259IGRhdGEtdGVzdGlkPVwibnVtcGFkXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MubnVtYmVyc30+XG4gICAgICAgICAge051bXBhZEtleXN9XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgIG5vU2hhZG93XG4gICAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17Y3JlYXRlRW1pdE51bWJlckhhbmRsZXIocG9wRGlnaXQobnVtYmVyKSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gYWx0PVwiQmFja3NwYWNlXCIgc3JjPXtiYWNrc3BhY2VJY29ufSAvPlxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbik7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm51bXBhZFwiOlwiUGVPKzJwQklMbUdodVhmK21RUEpDZz09XCIsXCJudW1iZXJzXCI6XCJfMytZOERkTzR2QkpKdE9PcVJCaHRxZz09XCJ9OyIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nNjknIGhlaWdodD0nMjcnIHZpZXdCb3g9JzAgMCA2OSAyNycgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNC4xMzMzIDI2TDEzLjc4ODYgMjYuMzYyMkMxMy44ODE2IDI2LjQ1MDcgMTQuMDA1IDI2LjUgMTQuMTMzMyAyNi41VjI2Wk0xIDEzLjVMMC42NTUyODcgMTMuMTM3OEMwLjU1NjEyNyAxMy4yMzIyIDAuNSAxMy4zNjMxIDAuNSAxMy41QzAuNSAxMy42MzY5IDAuNTU2MTI3IDEzLjc2NzggMC42NTUyODcgMTMuODYyMkwxIDEzLjVaTTE0LjEzMzMgMVYwLjVDMTQuMDA1IDAuNSAxMy44ODE2IDAuNTQ5MzQ1IDEzLjc4ODYgMC42Mzc4MjJMMTQuMTMzMyAxWk02Ny41IDJWMjVINjguNVYySDY3LjVaTTYzLjQ2NjcgMjUuNUgxNC4xMzMzVjI2LjVINjMuNDY2N1YyNS41Wk0xNC40NzggMjUuNjM3OEwxLjM0NDcxIDEzLjEzNzhMMC42NTUyODcgMTMuODYyMkwxMy43ODg2IDI2LjM2MjJMMTQuNDc4IDI1LjYzNzhaTTEuMzQ0NzEgMTMuODYyMkwxNC40NzggMS4zNjIxOEwxMy43ODg2IDAuNjM3ODIyTDAuNjU1Mjg3IDEzLjEzNzhMMS4zNDQ3MSAxMy44NjIyWk0xNC4xMzMzIDEuNUg2My40NjY3VjAuNUgxNC4xMzMzVjEuNVpNNjcgMjUuNUg2My40NjY3VjI2LjVINjdWMjUuNVpNNjcgMC41SDYzLjQ2NjdWMS41SDY3VjAuNVpNNjcuNSAyNUM2Ny41IDI1LjI3NjEgNjcuMjc2MSAyNS41IDY3IDI1LjVWMjYuNUM2Ny44Mjg0IDI2LjUgNjguNSAyNS44Mjg0IDY4LjUgMjVINjcuNVpNNjguNSAyQzY4LjUgMS4xNzE1NyA2Ny44Mjg0IDAuNSA2NyAwLjVWMS41QzY3LjI3NjEgMS41IDY3LjUgMS43MjM4NiA2Ny41IDJINjguNVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzY3BhdGggZD0nTTMyLjY0NjQgNi4zNTM1NUw0Ni42NDY0IDIwLjM1MzZMNDcuMzUzNiAxOS42NDY0TDMzLjM1MzYgNS42NDY0NUwzMi42NDY0IDYuMzUzNTVaTTQ2LjY0NjQgNS42NDY0NUwzMi42NDY0IDE5LjY0NjRMMzMuMzUzNiAyMC4zNTM2TDQ3LjM1MzYgNi4zNTM1NUw0Ni42NDY0IDUuNjQ2NDVaJyBmaWxsPSclMjMyNjI2MjYnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xudmFyIG9wdGlvbnMgPSB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VPdXRzaWRlQ2xpY2soY2FsbGJhY2spIHtcbiAgICB2YXIgcmVmID0gdXNlUmVmKCk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGhhbmRsZUNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIXJlZi5jdXJyZW50IHx8IHJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgfSwgW2NhbGxiYWNrXSk7XG4gICAgcmV0dXJuIHJlZjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZU91dHNpZGVDbGljay5qcy5tYXAiLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XHJcbiAgICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcclxuICAgIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XHJcbn1cclxuIiwiaW1wb3J0IHsgX19hd2FpdGVyLCBfX2dlbmVyYXRvciwgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VQcm9taXNlKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKHtcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgIGlzU2V0dGxlZDogZmFsc2UsXG4gICAgfSksIDIpLCByZXN1bHQgPSBfYVswXSwgc2V0UmVzdWx0ID0gX2FbMV07XG4gICAgLy8gV2UgbmVlZCB0byBrZWVwIHRyYWNrIGlmIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gdW5tb3VudGVkXG4gICAgLy8gd2hpbGUgdGhlIHByb21pc2Ugd2FzIHN0aWxsIHBlbmRpbmcgdG8gYXZvaWQgc2V0dGluZyBzdGF0ZVxuICAgIC8vIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXG4gICAgdmFyIGhhc1VubW91bnRlZCA9IHVzZVJlZihmYWxzZSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGhhc1VubW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIGRpc3BhdGNoID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHByb21pc2UpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEsIGVycm9yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMCwgMiwgLCAzXSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBwcm9taXNlXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbm1vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZGF0YV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBlcnJvcl8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVW5tb3VudGVkLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcl8xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgM107XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyB9LCBbaGFzVW5tb3VudGVkXSk7XG4gICAgcmV0dXJuIFtyZXN1bHQsIGRpc3BhdGNoXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVByb21pc2UuanMubWFwIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCBjcmVhdGVFbGVtZW50LCB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VEZWJ1Z1ZhbHVlIH0gZnJvbSAncmVhY3QnO1xuXG4vKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IH07XG4vLyBVc2luZyBub29wKCkgYXMgdGhlIHVuZGVmaW5lZCB2YWx1ZSBhcyB1bmRlZmluZWQgY2FuIHBvc3NpYmx5IGJlIHJlcGxhY2VkXG4vLyBieSBzb21ldGhpbmcgZWxzZS4gIFByZXR0aWVyIGlnbm9yZSBhbmQgZXh0cmEgcGFyZW50aGVzZXMgYXJlIG5lY2Vzc2FyeSBoZXJlXG4vLyB0byBlbnN1cmUgdGhhdCB0c2MgZG9lc24ndCByZW1vdmUgdGhlIF9fTk9JTkxJTkVfXyBjb21tZW50LlxuLy8gcHJldHRpZXItaWdub3JlXG52YXIgVU5ERUZJTkVEID0gKCAvKiNfX05PSU5MSU5FX18qL25vb3AoKSk7XG52YXIgT0JKRUNUID0gT2JqZWN0O1xudmFyIGlzVW5kZWZpbmVkID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgPT09IFVOREVGSU5FRDsgfTtcbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHR5cGVvZiB2ID09ICdmdW5jdGlvbic7IH07XG52YXIgbWVyZ2VPYmplY3RzID0gZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIE9CSkVDVC5hc3NpZ24oe30sIGEsIGIpOyB9O1xudmFyIFNUUl9VTkRFRklORUQgPSAndW5kZWZpbmVkJztcbi8vIE5PVEU6IFVzZSBmdW5jdGlvbiB0byBndWFyYW50ZWUgaXQncyByZS1ldmFsdWF0ZWQgYmV0d2VlbiBqc2RvbSBhbmQgbm9kZSBydW50aW1lIGZvciB0ZXN0cy5cbnZhciBoYXNXaW5kb3cgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlb2Ygd2luZG93ICE9IFNUUl9VTkRFRklORUQ7IH07XG52YXIgaGFzRG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlb2YgZG9jdW1lbnQgIT0gU1RSX1VOREVGSU5FRDsgfTtcbnZhciBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGhhc1dpbmRvdygpICYmIHR5cGVvZiB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddICE9IFNUUl9VTkRFRklORUQ7XG59O1xuXG4vLyB1c2UgV2Vha01hcCB0byBzdG9yZSB0aGUgb2JqZWN0LT5rZXkgbWFwcGluZ1xuLy8gc28gdGhlIG9iamVjdHMgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkLlxuLy8gV2Vha01hcCB1c2VzIGEgaGFzaHRhYmxlIHVuZGVyIHRoZSBob29kLCBzbyB0aGUgbG9va3VwXG4vLyBjb21wbGV4aXR5IGlzIGFsbW9zdCBPKDEpLlxudmFyIHRhYmxlID0gbmV3IFdlYWtNYXAoKTtcbi8vIGNvdW50ZXIgb2YgdGhlIGtleVxudmFyIGNvdW50ZXIgPSAwO1xuLy8gQSBzdGFibGUgaGFzaCBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1cHBvcnRzOlxuLy8gLSBGYXN0IGFuZCBlbnN1cmVzIHVuaXF1ZSBoYXNoIHByb3BlcnRpZXNcbi8vIC0gSGFuZGxlcyB1bnNlcmlhbGl6YWJsZSB2YWx1ZXNcbi8vIC0gSGFuZGxlcyBvYmplY3Qga2V5IG9yZGVyaW5nXG4vLyAtIEdlbmVyYXRlcyBzaG9ydCByZXN1bHRzXG4vL1xuLy8gVGhpcyBpcyBub3QgYSBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbmQgdGhlIHJlc3VsdCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZVxuLy8gcGFyc2libGUuXG52YXIgc3RhYmxlSGFzaCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBhcmc7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJnICYmIGFyZy5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgaXNEYXRlID0gY29uc3RydWN0b3IgPT0gRGF0ZTtcbiAgICB2YXIgcmVzdWx0O1xuICAgIHZhciBpbmRleDtcbiAgICBpZiAoT0JKRUNUKGFyZykgPT09IGFyZyAmJiAhaXNEYXRlICYmIGNvbnN0cnVjdG9yICE9IFJlZ0V4cCkge1xuICAgICAgICAvLyBPYmplY3QvZnVuY3Rpb24sIG5vdCBudWxsL2RhdGUvcmVnZXhwLiBVc2UgV2Vha01hcCB0byBzdG9yZSB0aGUgaWQgZmlyc3QuXG4gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBoYXNoZWQsIGRpcmVjdGx5IHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAgICByZXN1bHQgPSB0YWJsZS5nZXQoYXJnKTtcbiAgICAgICAgaWYgKHJlc3VsdClcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBoYXNoIGZpcnN0IGZvciBjaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0aW9uIGJlZm9yZSBlbnRlcmluZyB0aGVcbiAgICAgICAgLy8gcmVjdXJzaXZlIGBzdGFibGVIYXNoYCBjYWxscy5cbiAgICAgICAgLy8gRm9yIG90aGVyIG9iamVjdHMgbGlrZSBzZXQgYW5kIG1hcCwgd2UgdXNlIHRoaXMgaWQgZGlyZWN0bHkgYXMgdGhlIGhhc2guXG4gICAgICAgIHJlc3VsdCA9ICsrY291bnRlciArICd+JztcbiAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09IEFycmF5KSB7XG4gICAgICAgICAgICAvLyBBcnJheS5cbiAgICAgICAgICAgIHJlc3VsdCA9ICdAJztcbiAgICAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFyZy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RhYmxlSGFzaChhcmdbaW5kZXhdKSArICcsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09IE9CSkVDVCkge1xuICAgICAgICAgICAgLy8gT2JqZWN0LCBzb3J0IGtleXMuXG4gICAgICAgICAgICByZXN1bHQgPSAnIyc7XG4gICAgICAgICAgICB2YXIga2V5cyA9IE9CSkVDVC5rZXlzKGFyZykuc29ydCgpO1xuICAgICAgICAgICAgd2hpbGUgKCFpc1VuZGVmaW5lZCgoaW5kZXggPSBrZXlzLnBvcCgpKSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ1tpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbmRleCArICc6JyArIHN0YWJsZUhhc2goYXJnW2luZGV4XSkgKyAnLCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gaXNEYXRlXG4gICAgICAgICAgICA/IGFyZy50b0pTT04oKVxuICAgICAgICAgICAgOiB0eXBlID09ICdzeW1ib2wnXG4gICAgICAgICAgICAgICAgPyBhcmcudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIDogdHlwZSA9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KGFyZylcbiAgICAgICAgICAgICAgICAgICAgOiAnJyArIGFyZztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogRHVlIHRvIGJ1ZyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02NzgwNzUsXG4gKiBpdCdzIG5vdCByZWxpYWJsZSB0byBkZXRlY3QgaWYgdGhlIGJyb3dzZXIgaXMgY3VycmVudGx5IG9ubGluZSBvciBvZmZsaW5lXG4gKiBiYXNlZCBvbiBgbmF2aWdhdG9yLm9uTGluZWAuXG4gKiBBcyBhIHdvcmsgYXJvdW5kLCB3ZSBhbHdheXMgYXNzdW1lIGl0J3Mgb25saW5lIG9uIGZpcnN0IGxvYWQsIGFuZCBjaGFuZ2VcbiAqIHRoZSBzdGF0dXMgdXBvbiBgb25saW5lYCBvciBgb2ZmbGluZWAgZXZlbnRzLlxuICovXG52YXIgb25saW5lID0gdHJ1ZTtcbnZhciBpc09ubGluZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9ubGluZTsgfTtcbnZhciBoYXNXaW4gPSBoYXNXaW5kb3coKTtcbnZhciBoYXNEb2MgPSBoYXNEb2N1bWVudCgpO1xuLy8gRm9yIG5vZGUgYW5kIFJlYWN0IE5hdGl2ZSwgYGFkZC9yZW1vdmVFdmVudExpc3RlbmVyYCBkb2Vzbid0IGV4aXN0IG9uIHdpbmRvdy5cbnZhciBvbldpbmRvd0V2ZW50ID0gaGFzV2luICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyXG4gICAgPyB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHdpbmRvdylcbiAgICA6IG5vb3A7XG52YXIgb25Eb2N1bWVudEV2ZW50ID0gaGFzRG9jID8gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKGRvY3VtZW50KSA6IG5vb3A7XG52YXIgb2ZmV2luZG93RXZlbnQgPSBoYXNXaW4gJiYgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXJcbiAgICA/IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQod2luZG93KVxuICAgIDogbm9vcDtcbnZhciBvZmZEb2N1bWVudEV2ZW50ID0gaGFzRG9jXG4gICAgPyBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQoZG9jdW1lbnQpXG4gICAgOiBub29wO1xudmFyIGlzVmlzaWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmlzaWJpbGl0eVN0YXRlID0gaGFzRG9jICYmIGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTtcbiAgICByZXR1cm4gaXNVbmRlZmluZWQodmlzaWJpbGl0eVN0YXRlKSB8fCB2aXNpYmlsaXR5U3RhdGUgIT09ICdoaWRkZW4nO1xufTtcbnZhciBpbml0Rm9jdXMgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBmb2N1cyByZXZhbGlkYXRlXG4gICAgb25Eb2N1bWVudEV2ZW50KCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgIG9uV2luZG93RXZlbnQoJ2ZvY3VzJywgY2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9mZkRvY3VtZW50RXZlbnQoJ3Zpc2liaWxpdHljaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdmb2N1cycsIGNhbGxiYWNrKTtcbiAgICB9O1xufTtcbnZhciBpbml0UmVjb25uZWN0ID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gcmV2YWxpZGF0ZSBvbiByZWNvbm5lY3RlZFxuICAgIHZhciBvbk9ubGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb25saW5lID0gdHJ1ZTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICAgIC8vIG5vdGhpbmcgdG8gcmV2YWxpZGF0ZSwganVzdCB1cGRhdGUgdGhlIHN0YXR1c1xuICAgIHZhciBvbk9mZmxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9ubGluZSA9IGZhbHNlO1xuICAgIH07XG4gICAgb25XaW5kb3dFdmVudCgnb25saW5lJywgb25PbmxpbmUpO1xuICAgIG9uV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdvbmxpbmUnLCBvbk9ubGluZSk7XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdvZmZsaW5lJywgb25PZmZsaW5lKTtcbiAgICB9O1xufTtcbnZhciBwcmVzZXQgPSB7XG4gICAgaXNPbmxpbmU6IGlzT25saW5lLFxuICAgIGlzVmlzaWJsZTogaXNWaXNpYmxlXG59O1xudmFyIGRlZmF1bHRDb25maWdPcHRpb25zID0ge1xuICAgIGluaXRGb2N1czogaW5pdEZvY3VzLFxuICAgIGluaXRSZWNvbm5lY3Q6IGluaXRSZWNvbm5lY3Rcbn07XG5cbnZhciBJU19TRVJWRVIgPSAhaGFzV2luZG93KCkgfHwgJ0Rlbm8nIGluIHdpbmRvdztcbi8vIFBvbHlmaWxsIHJlcXVlc3RBbmltYXRpb25GcmFtZVxudmFyIHJBRiA9IGZ1bmN0aW9uIChmKSB7XG4gICAgcmV0dXJuIGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSgpID8gd2luZG93WydyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXShmKSA6IHNldFRpbWVvdXQoZiwgMSk7XG59O1xuLy8gUmVhY3QgY3VycmVudGx5IHRocm93cyBhIHdhcm5pbmcgd2hlbiB1c2luZyB1c2VMYXlvdXRFZmZlY3Qgb24gdGhlIHNlcnZlci5cbi8vIFRvIGdldCBhcm91bmQgaXQsIHdlIGNhbiBjb25kaXRpb25hbGx5IHVzZUVmZmVjdCBvbiB0aGUgc2VydmVyIChuby1vcCkgYW5kXG4vLyB1c2VMYXlvdXRFZmZlY3QgaW4gdGhlIGJyb3dzZXIuXG52YXIgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IElTX1NFUlZFUiA/IHVzZUVmZmVjdCA6IHVzZUxheW91dEVmZmVjdDtcbi8vIFRoaXMgYXNzaWdubWVudCBpcyB0byBleHRlbmQgdGhlIE5hdmlnYXRvciB0eXBlIHRvIHVzZSBlZmZlY3RpdmVUeXBlLlxudmFyIG5hdmlnYXRvckNvbm5lY3Rpb24gPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIG5hdmlnYXRvci5jb25uZWN0aW9uO1xuLy8gQWRqdXN0IHRoZSBjb25maWcgYmFzZWQgb24gc2xvdyBjb25uZWN0aW9uIHN0YXR1cyAoPD0gNzBLYnBzKS5cbnZhciBzbG93Q29ubmVjdGlvbiA9ICFJU19TRVJWRVIgJiZcbiAgICBuYXZpZ2F0b3JDb25uZWN0aW9uICYmXG4gICAgKFsnc2xvdy0yZycsICcyZyddLmluY2x1ZGVzKG5hdmlnYXRvckNvbm5lY3Rpb24uZWZmZWN0aXZlVHlwZSkgfHxcbiAgICAgICAgbmF2aWdhdG9yQ29ubmVjdGlvbi5zYXZlRGF0YSk7XG5cbnZhciBzZXJpYWxpemUgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oa2V5KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAga2V5ID0ga2V5KCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzIG5vdCByZWFkeVxuICAgICAgICAgICAga2V5ID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGFyZ3MgPSBbXS5jb25jYXQoa2V5KTtcbiAgICAvLyBJZiBrZXkgaXMgbm90IGZhbHN5LCBvciBub3QgYW4gZW1wdHkgYXJyYXksIGhhc2ggaXQuXG4gICAga2V5ID1cbiAgICAgICAgdHlwZW9mIGtleSA9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBrZXlcbiAgICAgICAgICAgIDogKEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleS5sZW5ndGggOiBrZXkpXG4gICAgICAgICAgICAgICAgPyBzdGFibGVIYXNoKGtleSlcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgIHZhciBpbmZvS2V5ID0ga2V5ID8gJyRzd3IkJyArIGtleSA6ICcnO1xuICAgIHJldHVybiBba2V5LCBhcmdzLCBpbmZvS2V5XTtcbn07XG5cbi8vIEdsb2JhbCBzdGF0ZSB1c2VkIHRvIGRlZHVwbGljYXRlIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnNcbnZhciBTV1JHbG9iYWxTdGF0ZSA9IG5ldyBXZWFrTWFwKCk7XG5cbnZhciBGT0NVU19FVkVOVCA9IDA7XG52YXIgUkVDT05ORUNUX0VWRU5UID0gMTtcbnZhciBNVVRBVEVfRVZFTlQgPSAyO1xuXG52YXIgYnJvYWRjYXN0U3RhdGUgPSBmdW5jdGlvbiAoY2FjaGUsIGtleSwgZGF0YSwgZXJyb3IsIGlzVmFsaWRhdGluZywgcmV2YWxpZGF0ZSwgYnJvYWRjYXN0KSB7XG4gICAgaWYgKGJyb2FkY2FzdCA9PT0gdm9pZCAwKSB7IGJyb2FkY2FzdCA9IHRydWU7IH1cbiAgICB2YXIgX2EgPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpLCBFVkVOVF9SRVZBTElEQVRPUlMgPSBfYVswXSwgU1RBVEVfVVBEQVRFUlMgPSBfYVsxXSwgRkVUQ0ggPSBfYVszXTtcbiAgICB2YXIgcmV2YWxpZGF0b3JzID0gRVZFTlRfUkVWQUxJREFUT1JTW2tleV07XG4gICAgdmFyIHVwZGF0ZXJzID0gU1RBVEVfVVBEQVRFUlNba2V5XTtcbiAgICAvLyBDYWNoZSB3YXMgcG9wdWxhdGVkLCB1cGRhdGUgc3RhdGVzIG9mIGFsbCBob29rcy5cbiAgICBpZiAoYnJvYWRjYXN0ICYmIHVwZGF0ZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXBkYXRlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHVwZGF0ZXJzW2ldKGRhdGEsIGVycm9yLCBpc1ZhbGlkYXRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGFsc28gbmVlZCB0byByZXZhbGlkYXRlLCBvbmx5IGRvIGl0IGZvciB0aGUgZmlyc3QgaG9vay5cbiAgICBpZiAocmV2YWxpZGF0ZSkge1xuICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBrZXkgYnkgZGVsZXRpbmcgdGhlIGNvbmN1cnJlbnQgcmVxdWVzdCBtYXJrZXJzIHNvIG5ld1xuICAgICAgICAvLyByZXF1ZXN0cyB3aWxsIG5vdCBiZSBkZWR1cGVkLlxuICAgICAgICBkZWxldGUgRkVUQ0hba2V5XTtcbiAgICAgICAgaWYgKHJldmFsaWRhdG9ycyAmJiByZXZhbGlkYXRvcnNbMF0pIHtcbiAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRvcnNbMF0oTVVUQVRFX0VWRU5UKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG59O1xuXG4vLyBHbG9iYWwgdGltZXN0YW1wLlxudmFyIF9fdGltZXN0YW1wID0gMDtcbnZhciBnZXRUaW1lc3RhbXAgPSBmdW5jdGlvbiAoKSB7IHJldHVybiArK19fdGltZXN0YW1wOyB9O1xuXG52YXIgaW50ZXJuYWxNdXRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2FjaGUsIF9rZXksIF9kYXRhLCBfb3B0cywgb3B0aW9ucywgcG9wdWxhdGVDYWNoZSwgcmV2YWxpZGF0ZSwgcm9sbGJhY2tPbkVycm9yLCBjdXN0b21PcHRpbWlzdGljRGF0YSwgX2EsIGtleSwga2V5SW5mbywgX2IsIE1VVEFUSU9OLCBkYXRhLCBlcnJvciwgYmVmb3JlTXV0YXRpb25UcywgaGFzQ3VzdG9tT3B0aW1pc3RpY0RhdGEsIHJvbGxiYWNrRGF0YSwgb3B0aW1pc3RpY0RhdGEsIHJlcztcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xuICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSBhcmdzWzBdLCBfa2V5ID0gYXJnc1sxXSwgX2RhdGEgPSBhcmdzWzJdLCBfb3B0cyA9IGFyZ3NbM107XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0eXBlb2YgX29wdHMgPT09ICdib29sZWFuJyA/IHsgcmV2YWxpZGF0ZTogX29wdHMgfSA6IF9vcHRzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZUNhY2hlID0gaXNVbmRlZmluZWQob3B0aW9ucy5wb3B1bGF0ZUNhY2hlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG9wdGlvbnMucG9wdWxhdGVDYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgcmV2YWxpZGF0ZSA9IG9wdGlvbnMucmV2YWxpZGF0ZSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJvbGxiYWNrT25FcnJvciA9IG9wdGlvbnMucm9sbGJhY2tPbkVycm9yICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tT3B0aW1pc3RpY0RhdGEgPSBvcHRpb25zLm9wdGltaXN0aWNEYXRhO1xuICAgICAgICAgICAgICAgICAgICBfYSA9IHNlcmlhbGl6ZShfa2V5KSwga2V5ID0gX2FbMF0sIGtleUluZm8gPSBfYVsyXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgICAgIF9iID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKSwgTVVUQVRJT04gPSBfYlsyXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbmV3IGRhdGEgcHJvdmlkZWQsIHJldmFsaWRhdGUgdGhlIGtleSB3aXRoIGN1cnJlbnQgc3RhdGUuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldmFsaWRhdGUgYW5kIGJyb2FkY2FzdCBzdGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBicm9hZGNhc3RTdGF0ZShjYWNoZSwga2V5LCBjYWNoZS5nZXQoa2V5KSwgVU5ERUZJTkVELCBVTkRFRklORUQsIHJldmFsaWRhdGUsIHRydWUpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2RhdGE7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZU11dGF0aW9uVHMgPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgICAgICAgICAgICAgTVVUQVRJT05ba2V5XSA9IFtiZWZvcmVNdXRhdGlvblRzLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgaGFzQ3VzdG9tT3B0aW1pc3RpY0RhdGEgPSAhaXNVbmRlZmluZWQoY3VzdG9tT3B0aW1pc3RpY0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICByb2xsYmFja0RhdGEgPSBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gb3B0aW1pc3RpYyBkYXRhIHVwZGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0N1c3RvbU9wdGltaXN0aWNEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWlzdGljRGF0YSA9IGlzRnVuY3Rpb24oY3VzdG9tT3B0aW1pc3RpY0RhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXN0b21PcHRpbWlzdGljRGF0YShyb2xsYmFja0RhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXN0b21PcHRpbWlzdGljRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnNldChrZXksIG9wdGltaXN0aWNEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2FkY2FzdFN0YXRlKGNhY2hlLCBrZXksIG9wdGltaXN0aWNEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYGRhdGFgIGlzIGEgZnVuY3Rpb24sIGNhbGwgaXQgcGFzc2luZyBjdXJyZW50IGNhY2hlIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YShjYWNoZS5nZXQoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQgdGhyb3dzIGFuIGVycm9yIHN5bmNocm9ub3VzbHksIHdlIHNob3VsZG4ndCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhLnRoZW4pKSkgcmV0dXJuIFszIC8qYnJlYWsqLywgMl07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGRhdGEuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIG90aGVyIG11dGF0aW9ucyBoYXZlIG9jY3VycmVkIHNpbmNlIHdlJ3ZlIHN0YXJ0ZWQgdGhpcyBtdXRhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSByYWNlIHdlIGRvbid0IHVwZGF0ZSBjYWNoZSBvciBicm9hZGNhc3QgdGhlIGNoYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgcmV0dXJuIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBtdXRhdGlvbiBpcyBhc3luYywgd2UgbmVlZCB0byBjaGVjayB0aW1lc3RhbXBzIHRvXG4gICAgICAgICAgICAgICAgICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9ucy5cbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9jLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgb3RoZXIgbXV0YXRpb25zIGhhdmUgb2NjdXJyZWQgc2luY2Ugd2UndmUgc3RhcnRlZCB0aGlzIG11dGF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEgcmFjZSB3ZSBkb24ndCB1cGRhdGUgY2FjaGUgb3IgYnJvYWRjYXN0IHRoZSBjaGFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgcmV0dXJuIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgICAgICBpZiAoYmVmb3JlTXV0YXRpb25UcyAhPT0gTVVUQVRJT05ba2V5XVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGRhdGFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVycm9yICYmIGhhc0N1c3RvbU9wdGltaXN0aWNEYXRhICYmIHJvbGxiYWNrT25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUm9sbGJhY2suIEFsd2F5cyBwb3B1bGF0ZSB0aGUgY2FjaGUgaW4gdGhpcyBjYXNlIGJ1dCB3aXRob3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm1pbmcgdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZUNhY2hlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSByb2xsYmFja0RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zZXQoa2V5LCByb2xsYmFja0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9jLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHNob3VsZCB3cml0ZSBiYWNrIHRoZSBjYWNoZSBhZnRlciByZXF1ZXN0LlxuICAgICAgICAgICAgICAgICAgICBpZiAocG9wdWxhdGVDYWNoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgcmVzdWx0IGludG8gZGF0YS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwb3B1bGF0ZUNhY2hlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gcG9wdWxhdGVDYWNoZShkYXRhLCByb2xsYmFja0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSBjYWNoZWQgZGF0YSBpZiB0aGVyZSdzIG5vIGVycm9yLiBEYXRhIGNhbiBiZSBgdW5kZWZpbmVkYCBoZXJlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnNldChrZXksIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHVwZGF0ZSBvciByZXNldCB0aGUgZXJyb3IuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zZXQoa2V5SW5mbywgbWVyZ2VPYmplY3RzKGNhY2hlLmdldChrZXlJbmZvKSwgeyBlcnJvcjogZXJyb3IgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSB0aW1lc3RhbXAgdG8gbWFyayB0aGUgbXV0YXRpb24gaGFzIGVuZGVkLlxuICAgICAgICAgICAgICAgICAgICBNVVRBVElPTltrZXldWzFdID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIGJyb2FkY2FzdFN0YXRlKGNhY2hlLCBrZXksIGRhdGEsIGVycm9yLCBVTkRFRklORUQsIHJldmFsaWRhdGUsICEhcG9wdWxhdGVDYWNoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGVycm9yIG9yIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXMgPSBfYy5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGVycm9yIG9yIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgcG9wdWxhdGVDYWNoZSA/IHJlcyA6IGRhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbnZhciByZXZhbGlkYXRlQWxsS2V5cyA9IGZ1bmN0aW9uIChyZXZhbGlkYXRvcnMsIHR5cGUpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcmV2YWxpZGF0b3JzKSB7XG4gICAgICAgIGlmIChyZXZhbGlkYXRvcnNba2V5XVswXSlcbiAgICAgICAgICAgIHJldmFsaWRhdG9yc1trZXldWzBdKHR5cGUpO1xuICAgIH1cbn07XG52YXIgaW5pdENhY2hlID0gZnVuY3Rpb24gKHByb3ZpZGVyLCBvcHRpb25zKSB7XG4gICAgLy8gVGhlIGdsb2JhbCBzdGF0ZSBmb3IgYSBzcGVjaWZpYyBwcm92aWRlciB3aWxsIGJlIHVzZWQgdG8gZGVkdXBsaWNhdGVcbiAgICAvLyByZXF1ZXN0cyBhbmQgc3RvcmUgbGlzdGVuZXJzLiBBcyB3ZWxsIGFzIGEgbXV0YXRlIGZ1bmN0aW9uIHRoYXQgYm91bmQgdG9cbiAgICAvLyB0aGUgY2FjaGUuXG4gICAgLy8gUHJvdmlkZXIncyBnbG9iYWwgc3RhdGUgbWlnaHQgYmUgYWxyZWFkeSBpbml0aWFsaXplZC4gTGV0J3MgdHJ5IHRvIGdldCB0aGVcbiAgICAvLyBnbG9iYWwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm92aWRlciBmaXJzdC5cbiAgICBpZiAoIVNXUkdsb2JhbFN0YXRlLmhhcyhwcm92aWRlcikpIHtcbiAgICAgICAgdmFyIG9wdHMgPSBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZ09wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGdsb2JhbCBzdGF0ZSBib3VuZCB0byB0aGUgcHJvdmlkZXIsIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCB0aGVcbiAgICAgICAgLy8gbmV3IG11dGF0ZSBmdW5jdGlvbi5cbiAgICAgICAgdmFyIEVWRU5UX1JFVkFMSURBVE9SUyA9IHt9O1xuICAgICAgICB2YXIgbXV0YXRlID0gaW50ZXJuYWxNdXRhdGUuYmluZChVTkRFRklORUQsIHByb3ZpZGVyKTtcbiAgICAgICAgdmFyIHVubW91bnQgPSBub29wO1xuICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YXRlIGlmIGl0J3MgbmV3LCBvciB0aGUgcHJvdmlkZXIgaGFzIGJlZW4gZXh0ZW5kZWQuXG4gICAgICAgIFNXUkdsb2JhbFN0YXRlLnNldChwcm92aWRlciwgW0VWRU5UX1JFVkFMSURBVE9SUywge30sIHt9LCB7fSwgbXV0YXRlXSk7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvdmlkZXIsIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBpdCBhbmQgc2V0dXAgRE9NIGV2ZW50c1xuICAgICAgICAvLyBsaXN0ZW5lcnMgZm9yIGBmb2N1c2AgYW5kIGByZWNvbm5lY3RgIGFjdGlvbnMuXG4gICAgICAgIGlmICghSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAvLyBXaGVuIGxpc3RlbmluZyB0byB0aGUgbmF0aXZlIGV2ZW50cyBmb3IgYXV0byByZXZhbGlkYXRpb25zLFxuICAgICAgICAgICAgLy8gd2UgaW50ZW50aW9uYWxseSBwdXQgYSBkZWxheSAoc2V0VGltZW91dCkgaGVyZSB0byBtYWtlIHN1cmUgdGhleSBhcmVcbiAgICAgICAgICAgIC8vIGZpcmVkIGFmdGVyIGltbWVkaWF0ZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbnMsIHdoaWNoIGNhbiBwb3NzaWJseSBiZVxuICAgICAgICAgICAgLy8gUmVhY3QncyBzdGF0ZSB1cGRhdGVzLlxuICAgICAgICAgICAgLy8gVGhpcyBhdm9pZHMgc29tZSB1bm5lY2Vzc2FyeSByZXZhbGlkYXRpb25zIHN1Y2ggYXNcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL2lzc3Vlcy8xNjgwLlxuICAgICAgICAgICAgdmFyIHJlbGVhc2VGb2N1c18xID0gb3B0cy5pbml0Rm9jdXMoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgRk9DVVNfRVZFTlQpKSk7XG4gICAgICAgICAgICB2YXIgcmVsZWFzZVJlY29ubmVjdF8xID0gb3B0cy5pbml0UmVjb25uZWN0KHNldFRpbWVvdXQuYmluZChVTkRFRklORUQsIHJldmFsaWRhdGVBbGxLZXlzLmJpbmQoVU5ERUZJTkVELCBFVkVOVF9SRVZBTElEQVRPUlMsIFJFQ09OTkVDVF9FVkVOVCkpKTtcbiAgICAgICAgICAgIHVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVsZWFzZUZvY3VzXzEgJiYgcmVsZWFzZUZvY3VzXzEoKTtcbiAgICAgICAgICAgICAgICByZWxlYXNlUmVjb25uZWN0XzEgJiYgcmVsZWFzZVJlY29ubmVjdF8xKCk7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiB1bi1tb3VudGluZywgd2UgbmVlZCB0byByZW1vdmUgdGhlIGNhY2hlIHByb3ZpZGVyIGZyb20gdGhlIHN0YXRlXG4gICAgICAgICAgICAgICAgLy8gc3RvcmFnZSB0b28gYmVjYXVzZSBpdCdzIGEgc2lkZS1lZmZlY3QuIE90aGVyd2lzZSB3aGVuIHJlLW1vdW50aW5nIHdlXG4gICAgICAgICAgICAgICAgLy8gd2lsbCBub3QgcmUtcmVnaXN0ZXIgdGhvc2UgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLmRlbGV0ZShwcm92aWRlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gaW5qZWN0IGFuIGV4dHJhIGxheWVyIG9uIHRvcCBvZiBgcHJvdmlkZXJgIGluIHRoZSBmdXR1cmUsXG4gICAgICAgIC8vIHN1Y2ggYXMga2V5IHNlcmlhbGl6YXRpb24sIGF1dG8gR0MsIGV0Yy5cbiAgICAgICAgLy8gRm9yIG5vdywgaXQncyBqdXN0IGEgYE1hcGAgaW50ZXJmYWNlIHdpdGhvdXQgYW55IG1vZGlmaWNhdGlvbnMuXG4gICAgICAgIHJldHVybiBbcHJvdmlkZXIsIG11dGF0ZSwgdW5tb3VudF07XG4gICAgfVxuICAgIHJldHVybiBbcHJvdmlkZXIsIFNXUkdsb2JhbFN0YXRlLmdldChwcm92aWRlcilbNF1dO1xufTtcblxuLy8gZXJyb3IgcmV0cnlcbnZhciBvbkVycm9yUmV0cnkgPSBmdW5jdGlvbiAoXywgX18sIGNvbmZpZywgcmV2YWxpZGF0ZSwgb3B0cykge1xuICAgIHZhciBtYXhSZXRyeUNvdW50ID0gY29uZmlnLmVycm9yUmV0cnlDb3VudDtcbiAgICB2YXIgY3VycmVudFJldHJ5Q291bnQgPSBvcHRzLnJldHJ5Q291bnQ7XG4gICAgLy8gRXhwb25lbnRpYWwgYmFja29mZlxuICAgIHZhciB0aW1lb3V0ID0gfn4oKE1hdGgucmFuZG9tKCkgKyAwLjUpICpcbiAgICAgICAgKDEgPDwgKGN1cnJlbnRSZXRyeUNvdW50IDwgOCA/IGN1cnJlbnRSZXRyeUNvdW50IDogOCkpKSAqIGNvbmZpZy5lcnJvclJldHJ5SW50ZXJ2YWw7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtYXhSZXRyeUNvdW50KSAmJiBjdXJyZW50UmV0cnlDb3VudCA+IG1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KHJldmFsaWRhdGUsIHRpbWVvdXQsIG9wdHMpO1xufTtcbi8vIERlZmF1bHQgY2FjaGUgcHJvdmlkZXJcbnZhciBfYSA9IGluaXRDYWNoZShuZXcgTWFwKCkpLCBjYWNoZSA9IF9hWzBdLCBtdXRhdGUgPSBfYVsxXTtcbi8vIERlZmF1bHQgY29uZmlnXG52YXIgZGVmYXVsdENvbmZpZyA9IG1lcmdlT2JqZWN0cyh7XG4gICAgLy8gZXZlbnRzXG4gICAgb25Mb2FkaW5nU2xvdzogbm9vcCxcbiAgICBvblN1Y2Nlc3M6IG5vb3AsXG4gICAgb25FcnJvcjogbm9vcCxcbiAgICBvbkVycm9yUmV0cnk6IG9uRXJyb3JSZXRyeSxcbiAgICBvbkRpc2NhcmRlZDogbm9vcCxcbiAgICAvLyBzd2l0Y2hlc1xuICAgIHJldmFsaWRhdGVPbkZvY3VzOiB0cnVlLFxuICAgIHJldmFsaWRhdGVPblJlY29ubmVjdDogdHJ1ZSxcbiAgICByZXZhbGlkYXRlSWZTdGFsZTogdHJ1ZSxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IHRydWUsXG4gICAgLy8gdGltZW91dHNcbiAgICBlcnJvclJldHJ5SW50ZXJ2YWw6IHNsb3dDb25uZWN0aW9uID8gMTAwMDAgOiA1MDAwLFxuICAgIGZvY3VzVGhyb3R0bGVJbnRlcnZhbDogNSAqIDEwMDAsXG4gICAgZGVkdXBpbmdJbnRlcnZhbDogMiAqIDEwMDAsXG4gICAgbG9hZGluZ1RpbWVvdXQ6IHNsb3dDb25uZWN0aW9uID8gNTAwMCA6IDMwMDAsXG4gICAgLy8gcHJvdmlkZXJzXG4gICAgY29tcGFyZTogZnVuY3Rpb24gKGN1cnJlbnREYXRhLCBuZXdEYXRhKSB7XG4gICAgICAgIHJldHVybiBzdGFibGVIYXNoKGN1cnJlbnREYXRhKSA9PSBzdGFibGVIYXNoKG5ld0RhdGEpO1xuICAgIH0sXG4gICAgaXNQYXVzZWQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9LFxuICAgIGNhY2hlOiBjYWNoZSxcbiAgICBtdXRhdGU6IG11dGF0ZSxcbiAgICBmYWxsYmFjazoge31cbn0sIFxuLy8gdXNlIHdlYiBwcmVzZXQgYnkgZGVmYXVsdFxucHJlc2V0KTtcblxudmFyIG1lcmdlQ29uZmlncyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgb2JqZWN0IHRvIGF2b2lkIG11dGF0aW5nIHRoZSBvcmlnaW5hbCBoZXJlLlxuICAgIHZhciB2ID0gbWVyZ2VPYmplY3RzKGEsIGIpO1xuICAgIC8vIElmIHR3byBjb25maWdzIGFyZSBwcm92aWRlZCwgbWVyZ2UgdGhlaXIgYHVzZWAgYW5kIGBmYWxsYmFja2Agb3B0aW9ucy5cbiAgICBpZiAoYikge1xuICAgICAgICB2YXIgdTEgPSBhLnVzZSwgZjEgPSBhLmZhbGxiYWNrO1xuICAgICAgICB2YXIgdTIgPSBiLnVzZSwgZjIgPSBiLmZhbGxiYWNrO1xuICAgICAgICBpZiAodTEgJiYgdTIpIHtcbiAgICAgICAgICAgIHYudXNlID0gdTEuY29uY2F0KHUyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZjEgJiYgZjIpIHtcbiAgICAgICAgICAgIHYuZmFsbGJhY2sgPSBtZXJnZU9iamVjdHMoZjEsIGYyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbn07XG5cbnZhciBTV1JDb25maWdDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG52YXIgU1dSQ29uZmlnJDEgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcbiAgICAvLyBFeHRlbmQgcGFyZW50IGNvbnRleHQgdmFsdWVzIGFuZCBtaWRkbGV3YXJlLlxuICAgIHZhciBleHRlbmRlZENvbmZpZyA9IG1lcmdlQ29uZmlncyh1c2VDb250ZXh0KFNXUkNvbmZpZ0NvbnRleHQpLCB2YWx1ZSk7XG4gICAgLy8gU2hvdWxkIG5vdCB1c2UgdGhlIGluaGVyaXRlZCBwcm92aWRlci5cbiAgICB2YXIgcHJvdmlkZXIgPSB2YWx1ZSAmJiB2YWx1ZS5wcm92aWRlcjtcbiAgICAvLyBVc2UgYSBsYXp5IGluaXRpYWxpemVkIHN0YXRlIHRvIGNyZWF0ZSB0aGUgY2FjaGUgb24gZmlyc3QgYWNjZXNzLlxuICAgIHZhciBjYWNoZUNvbnRleHQgPSB1c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBwcm92aWRlclxuICAgICAgICAgICAgPyBpbml0Q2FjaGUocHJvdmlkZXIoZXh0ZW5kZWRDb25maWcuY2FjaGUgfHwgY2FjaGUpLCB2YWx1ZSlcbiAgICAgICAgICAgIDogVU5ERUZJTkVEO1xuICAgIH0pWzBdO1xuICAgIC8vIE92ZXJyaWRlIHRoZSBjYWNoZSBpZiBhIG5ldyBwcm92aWRlciBpcyBnaXZlbi5cbiAgICBpZiAoY2FjaGVDb250ZXh0KSB7XG4gICAgICAgIGV4dGVuZGVkQ29uZmlnLmNhY2hlID0gY2FjaGVDb250ZXh0WzBdO1xuICAgICAgICBleHRlbmRlZENvbmZpZy5tdXRhdGUgPSBjYWNoZUNvbnRleHRbMV07XG4gICAgfVxuICAgIC8vIFVuc3Vic2NyaWJlIGV2ZW50cy5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIChjYWNoZUNvbnRleHQgPyBjYWNoZUNvbnRleHRbMl0gOiBVTkRFRklORUQpOyB9LCBbXSk7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoU1dSQ29uZmlnQ29udGV4dC5Qcm92aWRlciwgbWVyZ2VPYmplY3RzKHByb3BzLCB7XG4gICAgICAgIHZhbHVlOiBleHRlbmRlZENvbmZpZ1xuICAgIH0pKTtcbn07XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2Ygc3RhdGUgd2l0aCBkZXBlbmRlbmN5LXRyYWNraW5nLlxuICovXG52YXIgdXNlU3RhdGVXaXRoRGVwcyA9IGZ1bmN0aW9uIChzdGF0ZSwgdW5tb3VudGVkUmVmKSB7XG4gICAgdmFyIHJlcmVuZGVyID0gdXNlU3RhdGUoe30pWzFdO1xuICAgIHZhciBzdGF0ZVJlZiA9IHVzZVJlZihzdGF0ZSk7XG4gICAgLy8gSWYgYSBzdGF0ZSBwcm9wZXJ0eSAoZGF0YSwgZXJyb3Igb3IgaXNWYWxpZGF0aW5nKSBpcyBhY2Nlc3NlZCBieSB0aGUgcmVuZGVyXG4gICAgLy8gZnVuY3Rpb24sIHdlIG1hcmsgdGhlIHByb3BlcnR5IGFzIGEgZGVwZW5kZW5jeSBzbyBpZiBpdCBpcyB1cGRhdGVkIGFnYWluXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSwgd2UgdHJpZ2dlciBhIHJlcmVuZGVyLlxuICAgIC8vIFRoaXMgaXMgYWxzbyBrbm93biBhcyBkZXBlbmRlbmN5LXRyYWNraW5nLlxuICAgIHZhciBzdGF0ZURlcGVuZGVuY2llc1JlZiA9IHVzZVJlZih7XG4gICAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgICBlcnJvcjogZmFsc2UsXG4gICAgICAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcGF5bG9hZCBUbyBjaGFuZ2Ugc3RhdGVSZWYsIHBhc3MgdGhlIHZhbHVlcyBleHBsaWNpdGx5IHRvIHNldFN0YXRlOlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiBzZXRTdGF0ZSh7XG4gICAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAgICogICBkYXRhOiBuZXdEYXRhIC8vIHNldCBkYXRhIHRvIG5ld0RhdGFcbiAgICAgKiAgIGVycm9yOiB1bmRlZmluZWQgLy8gc2V0IGVycm9yIHRvIHVuZGVmaW5lZFxuICAgICAqIH0pXG4gICAgICpcbiAgICAgKiBzZXRTdGF0ZSh7XG4gICAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAgICogICBkYXRhOiB1bmRlZmluZWQgLy8gc2V0IGRhdGEgdG8gdW5kZWZpbmVkXG4gICAgICogICBlcnJvcjogZXJyIC8vIHNldCBlcnJvciB0byBlcnJcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHZhciBzZXRTdGF0ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChwYXlsb2FkKSB7XG4gICAgICAgIHZhciBzaG91bGRSZXJlbmRlciA9IGZhbHNlO1xuICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gc3RhdGVSZWYuY3VycmVudDtcbiAgICAgICAgZm9yICh2YXIgXyBpbiBwYXlsb2FkKSB7XG4gICAgICAgICAgICB2YXIgayA9IF87XG4gICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaGFzIGNoYW5nZWQsIHVwZGF0ZSB0aGUgc3RhdGUgYW5kIG1hcmsgcmVyZW5kZXIgYXNcbiAgICAgICAgICAgIC8vIG5lZWRlZC5cbiAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGVba10gIT09IHBheWxvYWRba10pIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGVba10gPSBwYXlsb2FkW2tdO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCBieSB0aGUgY29tcG9uZW50LCBhIHJlcmVuZGVyIHNob3VsZCBiZVxuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXJlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudFtrXSkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRSZXJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRSZXJlbmRlciAmJiAhdW5tb3VudGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJlcmVuZGVyKHt9KTtcbiAgICAgICAgfVxuICAgIH0sIFxuICAgIC8vIGNvbmZpZy5zdXNwZW5zZSBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgLy8gQWx3YXlzIHVwZGF0ZSB0aGUgc3RhdGUgcmVmZXJlbmNlLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBzdGF0ZVJlZi5jdXJyZW50ID0gc3RhdGU7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtzdGF0ZVJlZiwgc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudCwgc2V0U3RhdGVdO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oYXJnc1sxXSlcbiAgICAgICAgPyBbYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSB8fCB7fV1cbiAgICAgICAgOiBbYXJnc1swXSwgbnVsbCwgKGFyZ3NbMV0gPT09IG51bGwgPyBhcmdzWzJdIDogYXJnc1sxXSkgfHwge31dO1xufTtcblxudmFyIHVzZVNXUkNvbmZpZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbWVyZ2VPYmplY3RzKGRlZmF1bHRDb25maWcsIHVzZUNvbnRleHQoU1dSQ29uZmlnQ29udGV4dCkpO1xufTtcblxuLy8gSXQncyB0cmlja3kgdG8gcGFzcyBnZW5lcmljIHR5cGVzIGFzIHBhcmFtZXRlcnMsIHNvIHdlIGp1c3QgZGlyZWN0bHkgb3ZlcnJpZGVcbi8vIHRoZSB0eXBlcyBoZXJlLlxudmFyIHdpdGhBcmdzID0gZnVuY3Rpb24gKGhvb2spIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gdXNlU1dSQXJncygpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBHZXQgdGhlIGRlZmF1bHQgYW5kIGluaGVyaXRlZCBjb25maWd1cmF0aW9uLlxuICAgICAgICB2YXIgZmFsbGJhY2tDb25maWcgPSB1c2VTV1JDb25maWcoKTtcbiAgICAgICAgLy8gTm9ybWFsaXplIGFyZ3VtZW50cy5cbiAgICAgICAgdmFyIF9hID0gbm9ybWFsaXplKGFyZ3MpLCBrZXkgPSBfYVswXSwgZm4gPSBfYVsxXSwgX2NvbmZpZyA9IF9hWzJdO1xuICAgICAgICAvLyBNZXJnZSBjb25maWd1cmF0aW9ucy5cbiAgICAgICAgdmFyIGNvbmZpZyA9IG1lcmdlQ29uZmlncyhmYWxsYmFja0NvbmZpZywgX2NvbmZpZyk7XG4gICAgICAgIC8vIEFwcGx5IG1pZGRsZXdhcmVcbiAgICAgICAgdmFyIG5leHQgPSBob29rO1xuICAgICAgICB2YXIgdXNlID0gY29uZmlnLnVzZTtcbiAgICAgICAgaWYgKHVzZSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHVzZS5sZW5ndGg7IGktLSA+IDA7KSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IHVzZVtpXShuZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dChrZXksIGZuIHx8IGNvbmZpZy5mZXRjaGVyLCBjb25maWcpO1xuICAgIH07XG59O1xuXG4vLyBBZGQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBhIGxpc3Qgb2Yga2V5ZWQgY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCByZXR1cm5cbi8vIHRoZSB1bnN1YnNjcmliZSBmdW5jdGlvbi5cbnZhciBzdWJzY3JpYmVDYWxsYmFjayA9IGZ1bmN0aW9uIChrZXksIGNhbGxiYWNrcywgY2FsbGJhY2spIHtcbiAgICB2YXIga2V5ZWRSZXZhbGlkYXRvcnMgPSBjYWxsYmFja3Nba2V5XSB8fCAoY2FsbGJhY2tzW2tleV0gPSBbXSk7XG4gICAga2V5ZWRSZXZhbGlkYXRvcnMucHVzaChjYWxsYmFjayk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGluZGV4ID0ga2V5ZWRSZXZhbGlkYXRvcnMuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAvLyBPKDEpOiBmYXN0ZXIgdGhhbiBzcGxpY2VcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzW2luZGV4XSA9IGtleWVkUmV2YWxpZGF0b3JzW2tleWVkUmV2YWxpZGF0b3JzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAga2V5ZWRSZXZhbGlkYXRvcnMucG9wKCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxudmFyIFdJVEhfREVEVVBFID0geyBkZWR1cGU6IHRydWUgfTtcbnZhciB1c2VTV1JIYW5kbGVyID0gZnVuY3Rpb24gKF9rZXksIGZldGNoZXIsIGNvbmZpZykge1xuICAgIHZhciBjYWNoZSA9IGNvbmZpZy5jYWNoZSwgY29tcGFyZSA9IGNvbmZpZy5jb21wYXJlLCBmYWxsYmFja0RhdGEgPSBjb25maWcuZmFsbGJhY2tEYXRhLCBzdXNwZW5zZSA9IGNvbmZpZy5zdXNwZW5zZSwgcmV2YWxpZGF0ZU9uTW91bnQgPSBjb25maWcucmV2YWxpZGF0ZU9uTW91bnQsIHJlZnJlc2hJbnRlcnZhbCA9IGNvbmZpZy5yZWZyZXNoSW50ZXJ2YWwsIHJlZnJlc2hXaGVuSGlkZGVuID0gY29uZmlnLnJlZnJlc2hXaGVuSGlkZGVuLCByZWZyZXNoV2hlbk9mZmxpbmUgPSBjb25maWcucmVmcmVzaFdoZW5PZmZsaW5lO1xuICAgIHZhciBfYSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSksIEVWRU5UX1JFVkFMSURBVE9SUyA9IF9hWzBdLCBTVEFURV9VUERBVEVSUyA9IF9hWzFdLCBNVVRBVElPTiA9IF9hWzJdLCBGRVRDSCA9IF9hWzNdO1xuICAgIC8vIGBrZXlgIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBTV1IgYGRhdGFgIHN0YXRlLCBga2V5SW5mb2AgaG9sZHMgZXh0cmFcbiAgICAvLyBzdGF0ZXMgc3VjaCBhcyBgZXJyb3JgIGFuZCBgaXNWYWxpZGF0aW5nYCBpbnNpZGUsXG4gICAgLy8gYWxsIG9mIHRoZW0gYXJlIGRlcml2ZWQgZnJvbSBgX2tleWAuXG4gICAgLy8gYGZuQXJnc2AgaXMgYW4gYXJyYXkgb2YgYXJndW1lbnRzIHBhcnNlZCBmcm9tIHRoZSBrZXksIHdoaWNoIHdpbGwgYmUgcGFzc2VkXG4gICAgLy8gdG8gdGhlIGZldGNoZXIuXG4gICAgdmFyIF9iID0gc2VyaWFsaXplKF9rZXkpLCBrZXkgPSBfYlswXSwgZm5BcmdzID0gX2JbMV0sIGtleUluZm8gPSBfYlsyXTtcbiAgICAvLyBJZiBpdCdzIHRoZSBpbml0aWFsIHJlbmRlciBvZiB0aGlzIGhvb2suXG4gICAgdmFyIGluaXRpYWxNb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBJZiB0aGUgaG9vayBpcyB1bm1vdW50ZWQgYWxyZWFkeS4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gcHJldmVudCBzb21lIGVmZmVjdHNcbiAgICAvLyB0byBiZSBjYWxsZWQgYWZ0ZXIgdW5tb3VudGluZy5cbiAgICB2YXIgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBSZWZzIHRvIGtlZXAgdGhlIGtleSBhbmQgY29uZmlnLlxuICAgIHZhciBrZXlSZWYgPSB1c2VSZWYoa2V5KTtcbiAgICB2YXIgZmV0Y2hlclJlZiA9IHVzZVJlZihmZXRjaGVyKTtcbiAgICB2YXIgY29uZmlnUmVmID0gdXNlUmVmKGNvbmZpZyk7XG4gICAgdmFyIGdldENvbmZpZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmZpZ1JlZi5jdXJyZW50OyB9O1xuICAgIHZhciBpc0FjdGl2ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldENvbmZpZygpLmlzVmlzaWJsZSgpICYmIGdldENvbmZpZygpLmlzT25saW5lKCk7IH07XG4gICAgdmFyIHBhdGNoRmV0Y2hJbmZvID0gZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlLnNldChrZXlJbmZvLCBtZXJnZU9iamVjdHMoY2FjaGUuZ2V0KGtleUluZm8pLCBpbmZvKSk7XG4gICAgfTtcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgdGhhdCBTV1Igc2hvdWxkIHJldHVybi5cbiAgICB2YXIgY2FjaGVkID0gY2FjaGUuZ2V0KGtleSk7XG4gICAgdmFyIGZhbGxiYWNrID0gaXNVbmRlZmluZWQoZmFsbGJhY2tEYXRhKVxuICAgICAgICA/IGNvbmZpZy5mYWxsYmFja1trZXldXG4gICAgICAgIDogZmFsbGJhY2tEYXRhO1xuICAgIHZhciBkYXRhID0gaXNVbmRlZmluZWQoY2FjaGVkKSA/IGZhbGxiYWNrIDogY2FjaGVkO1xuICAgIHZhciBpbmZvID0gY2FjaGUuZ2V0KGtleUluZm8pIHx8IHt9O1xuICAgIHZhciBlcnJvciA9IGluZm8uZXJyb3I7XG4gICAgdmFyIGlzSW5pdGlhbE1vdW50ID0gIWluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgLy8gLSBTdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSdzIHN0YWxlIGRhdGEgZm9yIHRoZSBpbml0aWFsIHJlbmRlci5cbiAgICAvLyAtIE5vdCBzdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSBpcyBubyBmYWxsYmFjayBkYXRhIGFuZCBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQuXG4gICAgLy8gLSBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQgYnV0IGBkYXRhYCBpcyBub3QgZGVmaW5lZC5cbiAgICB2YXIgc2hvdWxkUmV2YWxpZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICBpZiAoaXNJbml0aWFsTW91bnQgJiYgIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVPbk1vdW50KSlcbiAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRlT25Nb3VudDtcbiAgICAgICAgLy8gSWYgaXQncyBwYXVzZWQsIHdlIHNraXAgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gVW5kZXIgc3VzcGVuc2UgbW9kZSwgaXQgd2lsbCBhbHdheXMgZmV0Y2ggb24gcmVuZGVyIGlmIHRoZXJlIGlzIG5vXG4gICAgICAgIC8vIHN0YWxlIGRhdGEgc28gbm8gbmVlZCB0byByZXZhbGlkYXRlIGltbWVkaWF0ZWx5IG9uIG1vdW50IGFnYWluLlxuICAgICAgICAvLyBJZiBkYXRhIGV4aXN0cywgb25seSByZXZhbGlkYXRlIGlmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgdHJ1ZS5cbiAgICAgICAgaWYgKHN1c3BlbnNlKVxuICAgICAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpID8gZmFsc2UgOiBjb25maWcucmV2YWxpZGF0ZUlmU3RhbGU7XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHN0YWxlIGRhdGEsIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZSBvbiBtb3VudDtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBzZXQgdG8gdHJ1ZSwgd2Ugd2lsbCBhbHdheXMgcmV2YWxpZGF0ZS5cbiAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpIHx8IGNvbmZpZy5yZXZhbGlkYXRlSWZTdGFsZTtcbiAgICB9O1xuICAgIC8vIFJlc29sdmUgdGhlIGN1cnJlbnQgdmFsaWRhdGluZyBzdGF0ZS5cbiAgICB2YXIgcmVzb2x2ZVZhbGlkYXRpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICgha2V5IHx8ICFmZXRjaGVyKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoaW5mby5pc1ZhbGlkYXRpbmcpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gSWYgaXQncyBub3QgbW91bnRlZCB5ZXQgYW5kIGl0IHNob3VsZCByZXZhbGlkYXRlIG9uIG1vdW50LCByZXZhbGlkYXRlLlxuICAgICAgICByZXR1cm4gaXNJbml0aWFsTW91bnQgJiYgc2hvdWxkUmV2YWxpZGF0ZSgpO1xuICAgIH07XG4gICAgdmFyIGlzVmFsaWRhdGluZyA9IHJlc29sdmVWYWxpZGF0aW5nKCk7XG4gICAgdmFyIF9jID0gdXNlU3RhdGVXaXRoRGVwcyh7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgaXNWYWxpZGF0aW5nOiBpc1ZhbGlkYXRpbmdcbiAgICB9LCB1bm1vdW50ZWRSZWYpLCBzdGF0ZVJlZiA9IF9jWzBdLCBzdGF0ZURlcGVuZGVuY2llcyA9IF9jWzFdLCBzZXRTdGF0ZSA9IF9jWzJdO1xuICAgIC8vIFRoZSByZXZhbGlkYXRpb24gZnVuY3Rpb24gaXMgYSBjYXJlZnVsbHkgY3JhZnRlZCB3cmFwcGVyIG9mIHRoZSBvcmlnaW5hbFxuICAgIC8vIGBmZXRjaGVyYCwgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgbWFueSBlZGdlIGNhc2VzLlxuICAgIHZhciByZXZhbGlkYXRlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHJldmFsaWRhdGVPcHRzKSB7IHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY3VycmVudEZldGNoZXIsIG5ld0RhdGEsIHN0YXJ0QXQsIGxvYWRpbmcsIG9wdHMsIHNob3VsZFN0YXJ0TmV3UmVxdWVzdCwgaXNDdXJyZW50S2V5TW91bnRlZCwgY2xlYW51cFN0YXRlLCBuZXdTdGF0ZSwgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlLCBtdXRhdGlvbkluZm8sIGVycl8xO1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGZXRjaGVyID0gZmV0Y2hlclJlZi5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIWN1cnJlbnRGZXRjaGVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGZhbHNlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgb3B0cyA9IHJldmFsaWRhdGVPcHRzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRTdGFydE5ld1JlcXVlc3QgPSAhRkVUQ0hba2V5XSB8fCAhb3B0cy5kZWR1cGU7XG4gICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudEtleU1vdW50ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXVubW91bnRlZFJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09PSBrZXlSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNsZWFudXBTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3Mgc3RpbGwgdGhlIHNhbWUgcmVxdWVzdCBiZWZvcmUgZGVsZXRpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdEluZm8gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RJbmZvICYmIHJlcXVlc3RJbmZvWzFdID09PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlID0geyBpc1ZhbGlkYXRpbmc6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoRmV0Y2hJbmZvKHsgaXNWYWxpZGF0aW5nOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBvbmx5IHNldCBzdGF0ZSBpZiBpdCdzIHNhZmUgKHN0aWxsIG1vdW50ZWQgd2l0aCB0aGUgc2FtZSBrZXkpLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgZmV0Y2hpbmcuIENoYW5nZSB0aGUgYGlzVmFsaWRhdGluZ2Agc3RhdGUsIHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoRmV0Y2hJbmZvKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWRhdGluZzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoeyBpc1ZhbGlkYXRpbmc6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgMywgLCA0XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRlbGwgYWxsIG90aGVyIGhvb2tzIHRvIGNoYW5nZSB0aGUgYGlzVmFsaWRhdGluZ2Agc3RhdGUuXG4gICAgICAgICAgICAgICAgICAgICAgICBicm9hZGNhc3RTdGF0ZShjYWNoZSwga2V5LCBzdGF0ZVJlZi5jdXJyZW50LmRhdGEsIHN0YXRlUmVmLmN1cnJlbnQuZXJyb3IsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm8gY2FjaGUgYmVpbmcgcmVuZGVyZWQgY3VycmVudGx5IChpdCBzaG93cyBhIGJsYW5rIHBhZ2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgdHJpZ2dlciB0aGUgbG9hZGluZyBzbG93IGV2ZW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5sb2FkaW5nVGltZW91dCAmJiAhY2FjaGUuZ2V0KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRpbmcgJiYgaXNDdXJyZW50S2V5TW91bnRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkxvYWRpbmdTbG93KGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZy5sb2FkaW5nVGltZW91dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgcmVxdWVzdCBhbmQgc2F2ZSB0aGUgdGltZXN0YW1wLlxuICAgICAgICAgICAgICAgICAgICAgICAgRkVUQ0hba2V5XSA9IFtjdXJyZW50RmV0Y2hlci5hcHBseSh2b2lkIDAsIGZuQXJncyksIGdldFRpbWVzdGFtcCgpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYSA9IEZFVENIW2tleV0sIG5ld0RhdGEgPSBfYVswXSwgc3RhcnRBdCA9IF9hWzFdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBuZXdEYXRhXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIG5ld0RhdGEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IGlzbid0IGludGVycnVwdGVkLCBjbGVhbiBpdCB1cCBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZHVwbGljYXRpb24gaW50ZXJ2YWwuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNsZWFudXBTdGF0ZSwgY29uZmlnLmRlZHVwaW5nSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3JlIG90aGVyIG9uZ29pbmcgcmVxdWVzdChzKSwgc3RhcnRlZCBhZnRlciB0aGUgY3VycmVudCBvbmUsXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBjdXJyZW50IG9uZSB0byBhdm9pZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgICAgICAgICAgIC8vICAgcmVxMS0tLS0tLS0tLS0tLS0tLS0tLT5yZXMxICAgICAgICAoY3VycmVudCBvbmUpXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICByZXEyLS0tLS0tLS0tLS0tLS0tLT5yZXMyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSByZXF1ZXN0IHRoYXQgZmlyZWQgbGF0ZXIgd2lsbCBhbHdheXMgYmUga2VwdC5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRpbWVzdGFtcCBtYXliZSBiZSBgdW5kZWZpbmVkYCBvciBhIG51bWJlclxuICAgICAgICAgICAgICAgICAgICBpZiAoIUZFVENIW2tleV0gfHwgRkVUQ0hba2V5XVsxXSAhPT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0N1cnJlbnRLZXlNb3VudGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25EaXNjYXJkZWQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZmFsc2VdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIGVycm9yLlxuICAgICAgICAgICAgICAgICAgICBwYXRjaEZldGNoSW5mbyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogVU5ERUZJTkVEXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZS5lcnJvciA9IFVOREVGSU5FRDtcbiAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25JbmZvID0gTVVUQVRJT05ba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChtdXRhdGlvbkluZm8pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydEF0IDw9IG11dGF0aW9uSW5mb1swXSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QXQgPD0gbXV0YXRpb25JbmZvWzFdIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FzZSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25JbmZvWzFdID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBmYWxzZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRGVlcCBjb21wYXJlIHdpdGggbGF0ZXN0IHN0YXRlIHRvIGF2b2lkIGV4dHJhIHJlLXJlbmRlcnMuXG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciBsb2NhbCBzdGF0ZSwgY29tcGFyZSBhbmQgYXNzaWduLlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmUoc3RhdGVSZWYuY3VycmVudC5kYXRhLCBuZXdEYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUuZGF0YSA9IG5ld0RhdGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIGFuZCBuZXdEYXRhIGFyZSBkZWVwbHkgZXF1YWxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IHNob3VsZCBiZSBzYWZlIHRvIGJyb2FkY2FzdCB0aGUgc3RhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUuZGF0YSA9IHN0YXRlUmVmLmN1cnJlbnQuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbiwgYGJyb2Nhc3RTdGF0ZWAgaW52b2tlcyB0aGUgYG9uU3RhdGVVcGRhdGVgIGZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggdGFrZXMgY2FyZSBvZiBhdm9pZGluZyB0aGUgcmUtcmVuZGVyXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGdsb2JhbCBzdGF0ZSwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBrZXkgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL3B1bGwvMTA1OFxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmUoY2FjaGUuZ2V0KGtleSksIG5ld0RhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zZXQoa2V5LCBuZXdEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIHRoZSBzdWNjZXNzZnVsIGNhbGxiYWNrIGlmIGl0J3MgdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0N1cnJlbnRLZXlNb3VudGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vblN1Y2Nlc3MobmV3RGF0YSwga2V5LCBjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgZXJyXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFudXBTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBOb3QgcGF1c2VkLCB3ZSBjb250aW51ZSBoYW5kbGluZyB0aGUgZXJyb3IuIE90aGVyd2lzZSBkaXNjYXJkIGl0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWdldENvbmZpZygpLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBhIG5ldyBlcnJvciwgZG9uJ3QgdXNlIGRlZXAgY29tcGFyaXNvbiBmb3IgZXJyb3JzLlxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hGZXRjaEluZm8oeyBlcnJvcjogZXJyXzEgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZS5lcnJvciA9IGVycl8xO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IgZXZlbnQgYW5kIHJldHJ5IGxvZ2ljLiBPbmx5IGZvciB0aGUgYWN0dWFsIHJlcXVlc3QsIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVkdXBlZCBvbmVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCAmJiBpc0N1cnJlbnRLZXlNb3VudGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkVycm9yKGVycl8xLCBrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlb2YgY29uZmlnLnNob3VsZFJldHJ5T25FcnJvciA9PT0gJ2Jvb2xlYW4nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaG91bGRSZXRyeU9uRXJyb3IpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGNvbmZpZy5zaG91bGRSZXRyeU9uRXJyb3IpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuc2hvdWxkUmV0cnlPbkVycm9yKGVycl8xKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXRyeWluZywgZGVkdXBlIGlzIGFsd2F5cyBlbmFibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGFjdGl2ZSwgc3RvcC4gSXQgd2lsbCBhdXRvIHJldmFsaWRhdGUgd2hlbiByZWZvY3VzaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciByZWNvbm5lY3RpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkVycm9yUmV0cnkoZXJyXzEsIGtleSwgY29uZmlnLCByZXZhbGlkYXRlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudDogKG9wdHMucmV0cnlDb3VudCB8fCAwKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVkdXBlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIC8vIE1hcmsgbG9hZGluZyBhcyBzdG9wcGVkLlxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBob29rJ3Mgc3RhdGUuXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBIZXJlIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIHJlcXVlc3QsIG5lZWQgdG8gdGVsbCBhbGwgb3RoZXIgaG9va3MgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZWlyIHN0YXRlcy5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudEtleU1vdW50ZWQoKSAmJiBzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2FkY2FzdFN0YXRlKGNhY2hlLCBrZXksIG5ld1N0YXRlLmRhdGEsIG5ld1N0YXRlLmVycm9yLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRydWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsgfSwgXG4gICAgLy8gYHNldFN0YXRlYCBpcyBpbW11dGFibGUsIGFuZCBgZXZlbnRzQ2FsbGJhY2tgLCBgZm5BcmdzYCwgYGtleUluZm9gLFxuICAgIC8vIGFuZCBga2V5VmFsaWRhdGluZ2AgYXJlIGRlcGVuZGluZyBvbiBga2V5YCwgc28gd2UgY2FuIGV4Y2x1ZGUgdGhlbSBmcm9tXG4gICAgLy8gdGhlIGRlcHMgYXJyYXkuXG4gICAgLy9cbiAgICAvLyBGSVhNRTpcbiAgICAvLyBgZm5gIGFuZCBgY29uZmlnYCBtaWdodCBiZSBjaGFuZ2VkIGR1cmluZyB0aGUgbGlmZWN5Y2xlLFxuICAgIC8vIGJ1dCB0aGV5IG1pZ2h0IGJlIGNoYW5nZWQgZXZlcnkgcmVuZGVyIGxpa2UgdGhpcy5cbiAgICAvLyBgdXNlU1dSKCdrZXknLCAoKSA9PiBmZXRjaCgnL2FwaS8nKSwgeyBzdXNwZW5zZTogdHJ1ZSB9KWBcbiAgICAvLyBTbyB3ZSBvbWl0IHRoZSB2YWx1ZXMgZnJvbSB0aGUgZGVwcyBhcnJheVxuICAgIC8vIGV2ZW4gdGhvdWdoIGl0IG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBba2V5XSk7XG4gICAgLy8gU2ltaWxhciB0byB0aGUgZ2xvYmFsIG11dGF0ZSwgYnV0IGJvdW5kIHRvIHRoZSBjdXJyZW50IGNhY2hlIGFuZCBrZXkuXG4gICAgLy8gYGNhY2hlYCBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgdmFyIGJvdW5kTXV0YXRlID0gdXNlQ2FsbGJhY2soXG4gICAgLy8gQnkgdXNpbmcgYGJpbmRgIHdlIGRvbid0IG5lZWQgdG8gbW9kaWZ5IHRoZSBzaXplIG9mIHRoZSByZXN0IGFyZ3VtZW50cy5cbiAgICAvLyBEdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8zNzE4MSwgd2UgaGF2ZSB0b1xuICAgIC8vIGNhc3QgaXQgdG8gYW55IGZvciBub3cuXG4gICAgaW50ZXJuYWxNdXRhdGUuYmluZChVTkRFRklORUQsIGNhY2hlLCBmdW5jdGlvbiAoKSB7IHJldHVybiBrZXlSZWYuY3VycmVudDsgfSksIFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgLy8gQWx3YXlzIHVwZGF0ZSBmZXRjaGVyIGFuZCBjb25maWcgcmVmcy5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZmV0Y2hlclJlZi5jdXJyZW50ID0gZmV0Y2hlcjtcbiAgICAgICAgY29uZmlnUmVmLmN1cnJlbnQgPSBjb25maWc7XG4gICAgfSk7XG4gICAgLy8gQWZ0ZXIgbW91bnRlZCBvciBrZXkgY2hhbmdlZC5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFrZXkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBrZXlDaGFuZ2VkID0ga2V5ICE9PSBrZXlSZWYuY3VycmVudDtcbiAgICAgICAgdmFyIHNvZnRSZXZhbGlkYXRlID0gcmV2YWxpZGF0ZS5iaW5kKFVOREVGSU5FRCwgV0lUSF9ERURVUEUpO1xuICAgICAgICAvLyBFeHBvc2Ugc3RhdGUgdXBkYXRlciB0byBnbG9iYWwgZXZlbnQgbGlzdGVuZXJzLiBTbyB3ZSBjYW4gdXBkYXRlIGhvb2snc1xuICAgICAgICAvLyBpbnRlcm5hbCBzdGF0ZSBmcm9tIHRoZSBvdXRzaWRlLlxuICAgICAgICB2YXIgb25TdGF0ZVVwZGF0ZSA9IGZ1bmN0aW9uICh1cGRhdGVkRGF0YSwgdXBkYXRlZEVycm9yLCB1cGRhdGVkSXNWYWxpZGF0aW5nKSB7XG4gICAgICAgICAgICBzZXRTdGF0ZShtZXJnZU9iamVjdHMoe1xuICAgICAgICAgICAgICAgIGVycm9yOiB1cGRhdGVkRXJyb3IsXG4gICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB1cGRhdGVkSXNWYWxpZGF0aW5nXG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8vIFNpbmNlIGBzZXRTdGF0ZWAgb25seSBzaGFsbG93bHkgY29tcGFyZXMgc3RhdGVzLCB3ZSBkbyBhIGRlZXBcbiAgICAgICAgICAgIC8vIGNvbXBhcmlzb24gaGVyZS5cbiAgICAgICAgICAgIGNvbXBhcmUoc3RhdGVSZWYuY3VycmVudC5kYXRhLCB1cGRhdGVkRGF0YSlcbiAgICAgICAgICAgICAgICA/IFVOREVGSU5FRFxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB1cGRhdGVkRGF0YVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gRXhwb3NlIHJldmFsaWRhdG9ycyB0byBnbG9iYWwgZXZlbnQgbGlzdGVuZXJzLiBTbyB3ZSBjYW4gdHJpZ2dlclxuICAgICAgICAvLyByZXZhbGlkYXRpb24gZnJvbSB0aGUgb3V0c2lkZS5cbiAgICAgICAgdmFyIG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSAwO1xuICAgICAgICB2YXIgb25SZXZhbGlkYXRlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09IEZPQ1VTX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPbkZvY3VzICYmXG4gICAgICAgICAgICAgICAgICAgIG5vdyA+IG5leHRGb2N1c1JldmFsaWRhdGVkQXQgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ID0gbm93ICsgZ2V0Q29uZmlnKCkuZm9jdXNUaHJvdHRsZUludGVydmFsO1xuICAgICAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gUkVDT05ORUNUX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPblJlY29ubmVjdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBNVVRBVEVfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgdW5zdWJVcGRhdGUgPSBzdWJzY3JpYmVDYWxsYmFjayhrZXksIFNUQVRFX1VQREFURVJTLCBvblN0YXRlVXBkYXRlKTtcbiAgICAgICAgdmFyIHVuc3ViRXZlbnRzID0gc3Vic2NyaWJlQ2FsbGJhY2soa2V5LCBFVkVOVF9SRVZBTElEQVRPUlMsIG9uUmV2YWxpZGF0ZSk7XG4gICAgICAgIC8vIE1hcmsgdGhlIGNvbXBvbmVudCBhcyBtb3VudGVkIGFuZCB1cGRhdGUgY29ycmVzcG9uZGluZyByZWZzLlxuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICBrZXlSZWYuY3VycmVudCA9IGtleTtcbiAgICAgICAgaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIC8vIFdoZW4gYGtleWAgdXBkYXRlcywgcmVzZXQgdGhlIHN0YXRlIHRvIHRoZSBpbml0aWFsIHZhbHVlXG4gICAgICAgIC8vIGFuZCB0cmlnZ2VyIGEgcmVyZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgICAgICBpZiAoa2V5Q2hhbmdlZCkge1xuICAgICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIGlzVmFsaWRhdGluZzogaXNWYWxpZGF0aW5nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmlnZ2VyIGEgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoc2hvdWxkUmV2YWxpZGF0ZSgpKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRGVsYXkgdGhlIHJldmFsaWRhdGUgaWYgd2UgaGF2ZSBkYXRhIHRvIHJldHVybiBzbyB3ZSB3b24ndCBibG9ja1xuICAgICAgICAgICAgICAgIC8vIHJlbmRlcmluZy5cbiAgICAgICAgICAgICAgICByQUYoc29mdFJldmFsaWRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBNYXJrIGl0IGFzIHVubW91bnRlZC5cbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHVuc3ViVXBkYXRlKCk7XG4gICAgICAgICAgICB1bnN1YkV2ZW50cygpO1xuICAgICAgICB9O1xuICAgIH0sIFtrZXksIHJldmFsaWRhdGVdKTtcbiAgICAvLyBQb2xsaW5nXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0aW1lcjtcbiAgICAgICAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgcGFzc2VkIGludGVydmFsXG4gICAgICAgICAgICAvLyAuLi5vciBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHVwZGF0ZWQgZGF0YSB0byBnZXQgdGhlIGludGVydmFsXG4gICAgICAgICAgICB2YXIgaW50ZXJ2YWwgPSBpc0Z1bmN0aW9uKHJlZnJlc2hJbnRlcnZhbClcbiAgICAgICAgICAgICAgICA/IHJlZnJlc2hJbnRlcnZhbChkYXRhKVxuICAgICAgICAgICAgICAgIDogcmVmcmVzaEludGVydmFsO1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzdGFydCBuZXh0IGludGVydmFsIGlmIGByZWZyZXNoSW50ZXJ2YWxgIGlzIG5vdCAwLCBhbmQ6XG4gICAgICAgICAgICAvLyAtIGBmb3JjZWAgaXMgdHJ1ZSwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHBvbGxpbmdcbiAgICAgICAgICAgIC8vIC0gb3IgYHRpbWVyYCBpcyBub3QgMCwgd2hpY2ggbWVhbnMgdGhlIGVmZmVjdCB3YXNuJ3QgY2FuY2VsZWRcbiAgICAgICAgICAgIGlmIChpbnRlcnZhbCAmJiB0aW1lciAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZXhlY3V0ZSwgaW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIE9LIHRvIGV4ZWN1dGU6XG4gICAgICAgICAgICAvLyBPbmx5IHJldmFsaWRhdGUgd2hlbiB0aGUgcGFnZSBpcyB2aXNpYmxlLCBvbmxpbmUgYW5kIG5vdCBlcnJvcmVkLlxuICAgICAgICAgICAgaWYgKCFzdGF0ZVJlZi5jdXJyZW50LmVycm9yICYmXG4gICAgICAgICAgICAgICAgKHJlZnJlc2hXaGVuSGlkZGVuIHx8IGdldENvbmZpZygpLmlzVmlzaWJsZSgpKSAmJlxuICAgICAgICAgICAgICAgIChyZWZyZXNoV2hlbk9mZmxpbmUgfHwgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKSkpIHtcbiAgICAgICAgICAgICAgICByZXZhbGlkYXRlKFdJVEhfREVEVVBFKS50aGVuKG5leHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gU2NoZWR1bGUgbmV4dCBpbnRlcnZhbCB0byBjaGVjayBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICB0aW1lciA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtyZWZyZXNoSW50ZXJ2YWwsIHJlZnJlc2hXaGVuSGlkZGVuLCByZWZyZXNoV2hlbk9mZmxpbmUsIHJldmFsaWRhdGVdKTtcbiAgICAvLyBEaXNwbGF5IGRlYnVnIGluZm8gaW4gUmVhY3QgRGV2VG9vbHMuXG4gICAgdXNlRGVidWdWYWx1ZShkYXRhKTtcbiAgICAvLyBJbiBTdXNwZW5zZSBtb2RlLCB3ZSBjYW4ndCByZXR1cm4gdGhlIGVtcHR5IGBkYXRhYCBzdGF0ZS5cbiAgICAvLyBJZiB0aGVyZSBpcyBgZXJyb3JgLCB0aGUgYGVycm9yYCBuZWVkcyB0byBiZSB0aHJvd24gdG8gdGhlIGVycm9yIGJvdW5kYXJ5LlxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGBlcnJvcmAsIHRoZSBgcmV2YWxpZGF0aW9uYCBwcm9taXNlIG5lZWRzIHRvIGJlIHRocm93biB0b1xuICAgIC8vIHRoZSBzdXNwZW5zZSBib3VuZGFyeS5cbiAgICBpZiAoc3VzcGVuc2UgJiYgaXNVbmRlZmluZWQoZGF0YSkgJiYga2V5KSB7XG4gICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgZmV0Y2hlciBhbmQgY29uZmlnIHJlZnMgZXZlbiB3aXRoIHRoZSBTdXNwZW5zZSBtb2RlLlxuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhyb3cgaXNVbmRlZmluZWQoZXJyb3IpID8gcmV2YWxpZGF0ZShXSVRIX0RFRFVQRSkgOiBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbXV0YXRlOiBib3VuZE11dGF0ZSxcbiAgICAgICAgZ2V0IGRhdGEoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5kYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBpc1ZhbGlkYXRpbmcoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc1ZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRhdGluZztcbiAgICAgICAgfVxuICAgIH07XG59O1xudmFyIFNXUkNvbmZpZyA9IE9CSkVDVC5kZWZpbmVQcm9wZXJ0eShTV1JDb25maWckMSwgJ2RlZmF1bHQnLCB7XG4gICAgdmFsdWU6IGRlZmF1bHRDb25maWdcbn0pO1xudmFyIHVuc3RhYmxlX3NlcmlhbGl6ZSA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHNlcmlhbGl6ZShrZXkpWzBdOyB9O1xudmFyIHVzZVNXUiA9IHdpdGhBcmdzKHVzZVNXUkhhbmRsZXIpO1xuXG4vLyB1c2VTV1JcblxuZXhwb3J0IHsgU1dSQ29uZmlnLCB1c2VTV1IgYXMgZGVmYXVsdCwgbXV0YXRlLCB1bnN0YWJsZV9zZXJpYWxpemUsIHVzZVNXUkNvbmZpZyB9O1xuIiwiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU1dSQ29uZmlnIH0gZnJvbSBcInN3clwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlU1dSSG9va3NDb25maWcoKSB7XG4gICAgdmFyIHN3ckNvbmZpZyA9IHVzZVNXUkNvbmZpZygpO1xuICAgIHZhciB2YWx1ZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkgeyByZXR1cm4gKHsgbXV0YXRlOiBzd3JDb25maWcubXV0YXRlLCBjYWNoZTogc3dyQ29uZmlnLmNhY2hlIH0pOyB9LCBbc3dyQ29uZmlnLm11dGF0ZSwgc3dyQ29uZmlnLmNhY2hlXSk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlU1dSSG9va3NDb25maWcuanMubWFwIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRvZ2dsZShpbml0aWFsVmFsdWUpIHtcbiAgICBpZiAoaW5pdGlhbFZhbHVlID09PSB2b2lkIDApIHsgaW5pdGlhbFZhbHVlID0gZmFsc2U7IH1cbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoaW5pdGlhbFZhbHVlKSwgMiksIHZhbHVlID0gX2FbMF0sIHNldFZhbHVlID0gX2FbMV07XG4gICAgdmFyIHRvZ2dsZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0VmFsdWUoZnVuY3Rpb24gKHByZXZWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhcHJldlZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIFt2YWx1ZSwgdG9nZ2xlXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVRvZ2dsZS5qcy5tYXAiLCIvKiohIFxuICogaG90a2V5cy1qcyB2My45LjMgXG4gKiBBIHNpbXBsZSBtaWNyby1saWJyYXJ5IGZvciBkZWZpbmluZyBhbmQgZGlzcGF0Y2hpbmcga2V5Ym9hcmQgc2hvcnRjdXRzLiBJdCBoYXMgbm8gZGVwZW5kZW5jaWVzLiBcbiAqIFxuICogQ29weXJpZ2h0IChjKSAyMDIyIGtlbm55IHdvbmcgPHdvd29ob29AcXEuY29tPiBcbiAqIGh0dHA6Ly9qYXl3Y2psb3ZlLmdpdGh1Yi5pby9ob3RrZXlzIFxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIFxuICovXG5cbnZhciBpc2ZmID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gMCA6IGZhbHNlOyAvLyDnu5Hlrprkuovku7ZcblxuZnVuY3Rpb24gYWRkRXZlbnQob2JqZWN0LCBldmVudCwgbWV0aG9kLCB1c2VDYXB0dXJlKSB7XG4gIGlmIChvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIG9iamVjdC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBtZXRob2QsIHVzZUNhcHR1cmUpO1xuICB9IGVsc2UgaWYgKG9iamVjdC5hdHRhY2hFdmVudCkge1xuICAgIG9iamVjdC5hdHRhY2hFdmVudChcIm9uXCIuY29uY2F0KGV2ZW50KSwgZnVuY3Rpb24gKCkge1xuICAgICAgbWV0aG9kKHdpbmRvdy5ldmVudCk7XG4gICAgfSk7XG4gIH1cbn0gLy8g5L+u6aWw6ZSu6L2s5o2i5oiQ5a+55bqU55qE6ZSu56CBXG5cblxuZnVuY3Rpb24gZ2V0TW9kcyhtb2RpZmllciwga2V5KSB7XG4gIHZhciBtb2RzID0ga2V5LnNsaWNlKDAsIGtleS5sZW5ndGggLSAxKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZHMubGVuZ3RoOyBpKyspIHtcbiAgICBtb2RzW2ldID0gbW9kaWZpZXJbbW9kc1tpXS50b0xvd2VyQ2FzZSgpXTtcbiAgfVxuXG4gIHJldHVybiBtb2RzO1xufSAvLyDlpITnkIbkvKDnmoRrZXnlrZfnrKbkuLLovazmjaLmiJDmlbDnu4RcblxuXG5mdW5jdGlvbiBnZXRLZXlzKGtleSkge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIGtleSA9ICcnO1xuICBrZXkgPSBrZXkucmVwbGFjZSgvXFxzL2csICcnKTsgLy8g5Yy56YWN5Lu75L2V56m655m95a2X56ymLOWMheaLrOepuuagvOOAgeWItuihqOespuOAgeaNoumhteespuetieetiVxuXG4gIHZhciBrZXlzID0ga2V5LnNwbGl0KCcsJyk7IC8vIOWQjOaXtuiuvue9ruWkmuS4quW/q+aNt+mUru+8jOS7pScsJ+WIhuWJslxuXG4gIHZhciBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpOyAvLyDlv6vmjbfplK7lj6/og73ljIXlkKsnLCfvvIzpnIDnibnmrorlpITnkIZcblxuICBmb3IgKDsgaW5kZXggPj0gMDspIHtcbiAgICBrZXlzW2luZGV4IC0gMV0gKz0gJywnO1xuICAgIGtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59IC8vIOavlOi+g+S/rumlsOmUrueahOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGNvbXBhcmVBcnJheShhMSwgYTIpIHtcbiAgdmFyIGFycjEgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTEgOiBhMjtcbiAgdmFyIGFycjIgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTIgOiBhMTtcbiAgdmFyIGlzSW5kZXggPSB0cnVlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnIyLmluZGV4T2YoYXJyMVtpXSkgPT09IC0xKSBpc0luZGV4ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNJbmRleDtcbn1cblxudmFyIF9rZXlNYXAgPSB7XG4gIGJhY2tzcGFjZTogOCxcbiAgdGFiOiA5LFxuICBjbGVhcjogMTIsXG4gIGVudGVyOiAxMyxcbiAgcmV0dXJuOiAxMyxcbiAgZXNjOiAyNyxcbiAgZXNjYXBlOiAyNyxcbiAgc3BhY2U6IDMyLFxuICBsZWZ0OiAzNyxcbiAgdXA6IDM4LFxuICByaWdodDogMzksXG4gIGRvd246IDQwLFxuICBkZWw6IDQ2LFxuICBkZWxldGU6IDQ2LFxuICBpbnM6IDQ1LFxuICBpbnNlcnQ6IDQ1LFxuICBob21lOiAzNixcbiAgZW5kOiAzNSxcbiAgcGFnZXVwOiAzMyxcbiAgcGFnZWRvd246IDM0LFxuICBjYXBzbG9jazogMjAsXG4gIG51bV8wOiA5NixcbiAgbnVtXzE6IDk3LFxuICBudW1fMjogOTgsXG4gIG51bV8zOiA5OSxcbiAgbnVtXzQ6IDEwMCxcbiAgbnVtXzU6IDEwMSxcbiAgbnVtXzY6IDEwMixcbiAgbnVtXzc6IDEwMyxcbiAgbnVtXzg6IDEwNCxcbiAgbnVtXzk6IDEwNSxcbiAgbnVtX211bHRpcGx5OiAxMDYsXG4gIG51bV9hZGQ6IDEwNyxcbiAgbnVtX2VudGVyOiAxMDgsXG4gIG51bV9zdWJ0cmFjdDogMTA5LFxuICBudW1fZGVjaW1hbDogMTEwLFxuICBudW1fZGl2aWRlOiAxMTEsXG4gICfih6onOiAyMCxcbiAgJywnOiAxODgsXG4gICcuJzogMTkwLFxuICAnLyc6IDE5MSxcbiAgJ2AnOiAxOTIsXG4gICctJzogaXNmZiA/IDE3MyA6IDE4OSxcbiAgJz0nOiBpc2ZmID8gNjEgOiAxODcsXG4gICc7JzogaXNmZiA/IDU5IDogMTg2LFxuICAnXFwnJzogMjIyLFxuICAnWyc6IDIxOSxcbiAgJ10nOiAyMjEsXG4gICdcXFxcJzogMjIwXG59OyAvLyBNb2RpZmllciBLZXlzXG5cbnZhciBfbW9kaWZpZXIgPSB7XG4gIC8vIHNoaWZ0S2V5XG4gICfih6cnOiAxNixcbiAgc2hpZnQ6IDE2LFxuICAvLyBhbHRLZXlcbiAgJ+KMpSc6IDE4LFxuICBhbHQ6IDE4LFxuICBvcHRpb246IDE4LFxuICAvLyBjdHJsS2V5XG4gICfijIMnOiAxNyxcbiAgY3RybDogMTcsXG4gIGNvbnRyb2w6IDE3LFxuICAvLyBtZXRhS2V5XG4gICfijJgnOiA5MSxcbiAgY21kOiA5MSxcbiAgY29tbWFuZDogOTFcbn07XG52YXIgbW9kaWZpZXJNYXAgPSB7XG4gIDE2OiAnc2hpZnRLZXknLFxuICAxODogJ2FsdEtleScsXG4gIDE3OiAnY3RybEtleScsXG4gIDkxOiAnbWV0YUtleScsXG4gIHNoaWZ0S2V5OiAxNixcbiAgY3RybEtleTogMTcsXG4gIGFsdEtleTogMTgsXG4gIG1ldGFLZXk6IDkxXG59O1xudmFyIF9tb2RzID0ge1xuICAxNjogZmFsc2UsXG4gIDE4OiBmYWxzZSxcbiAgMTc6IGZhbHNlLFxuICA5MTogZmFsc2Vcbn07XG52YXIgX2hhbmRsZXJzID0ge307IC8vIEYxfkYxMiBzcGVjaWFsIGtleVxuXG5mb3IgKHZhciBrID0gMTsgayA8IDIwOyBrKyspIHtcbiAgX2tleU1hcFtcImZcIi5jb25jYXQoayldID0gMTExICsgaztcbn1cblxudmFyIF9kb3duS2V5cyA9IFtdOyAvLyDorrDlvZXmkYHkuIvnmoTnu5HlrprplK5cblxudmFyIHdpbkxpc3RlbmRGb2N1cyA9IGZhbHNlOyAvLyB3aW5kb3fmmK/lkKblt7Lnu4/nm5HlkKzkuoZmb2N1c+S6i+S7tlxuXG52YXIgX3Njb3BlID0gJ2FsbCc7IC8vIOm7mOiupOeDremUruiMg+WbtFxuXG52YXIgZWxlbWVudEhhc0JpbmRFdmVudCA9IFtdOyAvLyDlt7Lnu5Hlrprkuovku7bnmoToioLngrnorrDlvZVcbi8vIOi/lOWbnumUrueggVxuXG52YXIgY29kZSA9IGZ1bmN0aW9uIGNvZGUoeCkge1xuICByZXR1cm4gX2tleU1hcFt4LnRvTG93ZXJDYXNlKCldIHx8IF9tb2RpZmllclt4LnRvTG93ZXJDYXNlKCldIHx8IHgudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApO1xufTsgLy8g6K6+572u6I635Y+W5b2T5YmN6IyD5Zu077yI6buY6K6k5Li6J+aJgOaciSfvvIlcblxuXG5mdW5jdGlvbiBzZXRTY29wZShzY29wZSkge1xuICBfc2NvcGUgPSBzY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5b2T5YmN6IyD5Zu0XG5cblxuZnVuY3Rpb24gZ2V0U2NvcGUoKSB7XG4gIHJldHVybiBfc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluaRgeS4i+e7keWumumUrueahOmUruWAvFxuXG5cbmZ1bmN0aW9uIGdldFByZXNzZWRLZXlDb2RlcygpIHtcbiAgcmV0dXJuIF9kb3duS2V5cy5zbGljZSgwKTtcbn0gLy8g6KGo5Y2V5o6n5Lu25o6n5Lu25Yik5patIOi/lOWbniBCb29sZWFuXG4vLyBob3RrZXkgaXMgZWZmZWN0aXZlIG9ubHkgd2hlbiBmaWx0ZXIgcmV0dXJuIHRydWVcblxuXG5mdW5jdGlvbiBmaWx0ZXIoZXZlbnQpIHtcbiAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICB2YXIgdGFnTmFtZSA9IHRhcmdldC50YWdOYW1lO1xuICB2YXIgZmxhZyA9IHRydWU7IC8vIGlnbm9yZTogaXNDb250ZW50RWRpdGFibGUgPT09ICd0cnVlJywgPGlucHV0PiBhbmQgPHRleHRhcmVhPiB3aGVuIHJlYWRPbmx5IHN0YXRlIGlzIGZhbHNlLCA8c2VsZWN0PlxuXG4gIGlmICh0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgfHwgKHRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCB0YWdOYW1lID09PSAnU0VMRUNUJykgJiYgIXRhcmdldC5yZWFkT25seSkge1xuICAgIGZsYWcgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmbGFnO1xufSAvLyDliKTmlq3mkYHkuIvnmoTplK7mmK/lkKbkuLrmn5DkuKrplK7vvIzov5Tlm550cnVl5oiW6ICFZmFsc2VcblxuXG5mdW5jdGlvbiBpc1ByZXNzZWQoa2V5Q29kZSkge1xuICBpZiAodHlwZW9mIGtleUNvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAga2V5Q29kZSA9IGNvZGUoa2V5Q29kZSk7IC8vIOi9rOaNouaIkOmUrueggVxuICB9XG5cbiAgcmV0dXJuIF9kb3duS2V5cy5pbmRleE9mKGtleUNvZGUpICE9PSAtMTtcbn0gLy8g5b6q546v5Yig6ZmkaGFuZGxlcnPkuK3nmoTmiYDmnIkgc2NvcGUo6IyD5Zu0KVxuXG5cbmZ1bmN0aW9uIGRlbGV0ZVNjb3BlKHNjb3BlLCBuZXdTY29wZSkge1xuICB2YXIgaGFuZGxlcnM7XG4gIHZhciBpOyAvLyDmsqHmnInmjIflrppzY29wZe+8jOiOt+WPlnNjb3BlXG5cbiAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuXG4gIGZvciAodmFyIGtleSBpbiBfaGFuZGxlcnMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9oYW5kbGVycywga2V5KSkge1xuICAgICAgaGFuZGxlcnMgPSBfaGFuZGxlcnNba2V5XTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDspIHtcbiAgICAgICAgaWYgKGhhbmRsZXJzW2ldLnNjb3BlID09PSBzY29wZSkgaGFuZGxlcnMuc3BsaWNlKGksIDEpO2Vsc2UgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyDlpoLmnpxzY29wZeiiq+WIoOmZpO+8jOWwhnNjb3Bl6YeN572u5Li6YWxsXG5cblxuICBpZiAoZ2V0U2NvcGUoKSA9PT0gc2NvcGUpIHNldFNjb3BlKG5ld1Njb3BlIHx8ICdhbGwnKTtcbn0gLy8g5riF6Zmk5L+u6aWw6ZSuXG5cblxuZnVuY3Rpb24gY2xlYXJNb2RpZmllcihldmVudCkge1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTtcblxuICB2YXIgaSA9IF9kb3duS2V5cy5pbmRleE9mKGtleSk7IC8vIOS7juWIl+ihqOS4rea4hemZpOaMieWOi+i/h+eahOmUrlxuXG5cbiAgaWYgKGkgPj0gMCkge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoaSwgMSk7XG4gIH0gLy8g54m55q6K5aSE55CGIGNtbWFuZCDplK7vvIzlnKggY21tYW5kIOe7hOWQiOW/q+aNt+mUriBrZXl1cCDlj6rmiafooYzkuIDmrKHnmoTpl67pophcblxuXG4gIGlmIChldmVudC5rZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdtZXRhJykge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoMCwgX2Rvd25LZXlzLmxlbmd0aCk7XG4gIH0gLy8g5L+u6aWw6ZSuIHNoaWZ0S2V5IGFsdEtleSBjdHJsS2V5IChjb21tYW5kfHxtZXRhS2V5KSDmuIXpmaRcblxuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IGZhbHNlOyAvLyDlsIbkv67ppbDplK7ph43nva7kuLpmYWxzZVxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bmJpbmQoa2V5c0luZm8pIHtcbiAgLy8gdW5iaW5kKCksIHVuYmluZCBhbGwga2V5c1xuICBpZiAoIWtleXNJbmZvKSB7XG4gICAgT2JqZWN0LmtleXMoX2hhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiBkZWxldGUgX2hhbmRsZXJzW2tleV07XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShrZXlzSW5mbykpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgOiB1bmJpbmQoW3trZXk6ICdjdHJsK2EnLCBzY29wZTogJ3MxJ30sIHtrZXk6ICdjdHJsLWEnLCBzY29wZTogJ3MyJywgc3BsaXRLZXk6ICctJ31dKVxuICAgIGtleXNJbmZvLmZvckVhY2goZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgIGlmIChpbmZvLmtleSkgZWFjaFVuYmluZChpbmZvKTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdvYmplY3QnKSB7XG4gICAgLy8gc3VwcG9ydCBsaWtlIHVuYmluZCh7a2V5OiAnY3RybCthLCBjdHJsK2InLCBzY29wZTonYWJjJ30pXG4gICAgaWYgKGtleXNJbmZvLmtleSkgZWFjaFVuYmluZChrZXlzSW5mbyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleXNJbmZvID09PSAnc3RyaW5nJykge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnQgb2xkIG1ldGhvZFxuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB2YXIgc2NvcGUgPSBhcmdzWzBdLFxuICAgICAgICBtZXRob2QgPSBhcmdzWzFdO1xuXG4gICAgaWYgKHR5cGVvZiBzY29wZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbWV0aG9kID0gc2NvcGU7XG4gICAgICBzY29wZSA9ICcnO1xuICAgIH1cblxuICAgIGVhY2hVbmJpbmQoe1xuICAgICAga2V5OiBrZXlzSW5mbyxcbiAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgc3BsaXRLZXk6ICcrJ1xuICAgIH0pO1xuICB9XG59IC8vIOino+mZpOe7keWumuafkOS4quiMg+WbtOeahOW/q+aNt+mUrlxuXG5cbnZhciBlYWNoVW5iaW5kID0gZnVuY3Rpb24gZWFjaFVuYmluZChfcmVmKSB7XG4gIHZhciBrZXkgPSBfcmVmLmtleSxcbiAgICAgIHNjb3BlID0gX3JlZi5zY29wZSxcbiAgICAgIG1ldGhvZCA9IF9yZWYubWV0aG9kLFxuICAgICAgX3JlZiRzcGxpdEtleSA9IF9yZWYuc3BsaXRLZXksXG4gICAgICBzcGxpdEtleSA9IF9yZWYkc3BsaXRLZXkgPT09IHZvaWQgMCA/ICcrJyA6IF9yZWYkc3BsaXRLZXk7XG4gIHZhciBtdWx0aXBsZUtleXMgPSBnZXRLZXlzKGtleSk7XG4gIG11bHRpcGxlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChvcmlnaW5LZXkpIHtcbiAgICB2YXIgdW5iaW5kS2V5cyA9IG9yaWdpbktleS5zcGxpdChzcGxpdEtleSk7XG4gICAgdmFyIGxlbiA9IHVuYmluZEtleXMubGVuZ3RoO1xuICAgIHZhciBsYXN0S2V5ID0gdW5iaW5kS2V5c1tsZW4gLSAxXTtcbiAgICB2YXIga2V5Q29kZSA9IGxhc3RLZXkgPT09ICcqJyA/ICcqJyA6IGNvZGUobGFzdEtleSk7XG4gICAgaWYgKCFfaGFuZGxlcnNba2V5Q29kZV0pIHJldHVybjsgLy8g5Yik5pat5piv5ZCm5Lyg5YWl6IyD5Zu077yM5rKh5pyJ5bCx6I635Y+W6IyD5Zu0XG5cbiAgICBpZiAoIXNjb3BlKSBzY29wZSA9IGdldFNjb3BlKCk7XG4gICAgdmFyIG1vZHMgPSBsZW4gPiAxID8gZ2V0TW9kcyhfbW9kaWZpZXIsIHVuYmluZEtleXMpIDogW107XG4gICAgX2hhbmRsZXJzW2tleUNvZGVdID0gX2hhbmRsZXJzW2tleUNvZGVdLmZpbHRlcihmdW5jdGlvbiAocmVjb3JkKSB7XG4gICAgICAvLyDpgJrov4flh73mlbDliKTmlq3vvIzmmK/lkKbop6PpmaTnu5HlrprvvIzlh73mlbDnm7jnrYnnm7TmjqXov5Tlm55cbiAgICAgIHZhciBpc01hdGNoaW5nTWV0aG9kID0gbWV0aG9kID8gcmVjb3JkLm1ldGhvZCA9PT0gbWV0aG9kIDogdHJ1ZTtcbiAgICAgIHJldHVybiAhKGlzTWF0Y2hpbmdNZXRob2QgJiYgcmVjb3JkLnNjb3BlID09PSBzY29wZSAmJiBjb21wYXJlQXJyYXkocmVjb3JkLm1vZHMsIG1vZHMpKTtcbiAgICB9KTtcbiAgfSk7XG59OyAvLyDlr7nnm5HlkKzlr7nlupTlv6vmjbfplK7nmoTlm57osIPlh73mlbDov5vooYzlpITnkIZcblxuXG5mdW5jdGlvbiBldmVudEhhbmRsZXIoZXZlbnQsIGhhbmRsZXIsIHNjb3BlLCBlbGVtZW50KSB7XG4gIGlmIChoYW5kbGVyLmVsZW1lbnQgIT09IGVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbW9kaWZpZXJzTWF0Y2g7IC8vIOeci+Wug+aYr+WQpuWcqOW9k+WJjeiMg+WbtFxuXG4gIGlmIChoYW5kbGVyLnNjb3BlID09PSBzY29wZSB8fCBoYW5kbGVyLnNjb3BlID09PSAnYWxsJykge1xuICAgIC8vIOajgOafpeaYr+WQpuWMuemFjeS/rumlsOespu+8iOWmguaenOaciei/lOWbnnRydWXvvIlcbiAgICBtb2RpZmllcnNNYXRjaCA9IGhhbmRsZXIubW9kcy5sZW5ndGggPiAwO1xuXG4gICAgZm9yICh2YXIgeSBpbiBfbW9kcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgeSkpIHtcbiAgICAgICAgaWYgKCFfbW9kc1t5XSAmJiBoYW5kbGVyLm1vZHMuaW5kZXhPZigreSkgPiAtMSB8fCBfbW9kc1t5XSAmJiBoYW5kbGVyLm1vZHMuaW5kZXhPZigreSkgPT09IC0xKSB7XG4gICAgICAgICAgbW9kaWZpZXJzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8g6LCD55So5aSE55CG56iL5bqP77yM5aaC5p6c5piv5L+u6aWw6ZSu5LiN5YGa5aSE55CGXG5cblxuICAgIGlmIChoYW5kbGVyLm1vZHMubGVuZ3RoID09PSAwICYmICFfbW9kc1sxNl0gJiYgIV9tb2RzWzE4XSAmJiAhX21vZHNbMTddICYmICFfbW9kc1s5MV0gfHwgbW9kaWZpZXJzTWF0Y2ggfHwgaGFuZGxlci5zaG9ydGN1dCA9PT0gJyonKSB7XG4gICAgICBpZiAoaGFuZGxlci5tZXRob2QoZXZlbnQsIGhhbmRsZXIpID09PSBmYWxzZSkge1xuICAgICAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZWxzZSBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKGV2ZW50LmNhbmNlbEJ1YmJsZSkgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8g5aSE55CGa2V5ZG93buS6i+S7tlxuXG5cbmZ1bmN0aW9uIGRpc3BhdGNoKGV2ZW50LCBlbGVtZW50KSB7XG4gIHZhciBhc3RlcmlzayA9IF9oYW5kbGVyc1snKiddO1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTsgLy8g6KGo5Y2V5o6n5Lu26L+H5rukIOm7mOiupOihqOWNleaOp+S7tuS4jeinpuWPkeW/q+aNt+mUrlxuXG4gIGlmICghaG90a2V5cy5maWx0ZXIuY2FsbCh0aGlzLCBldmVudCkpIHJldHVybjsgLy8gR2Vja28oRmlyZWZveCnnmoRjb21tYW5k6ZSu5YC8MjI077yM5ZyoV2Via2l0KENocm9tZSnkuK3kv53mjIHkuIDoh7RcbiAgLy8gV2Via2l05bem5Y+zIGNvbW1hbmQg6ZSu5YC85LiN5LiA5qC3XG5cbiAgaWYgKGtleSA9PT0gOTMgfHwga2V5ID09PSAyMjQpIGtleSA9IDkxO1xuICAvKipcbiAgICogQ29sbGVjdCBib3VuZCBrZXlzXG4gICAqIElmIGFuIElucHV0IE1ldGhvZCBFZGl0b3IgaXMgcHJvY2Vzc2luZyBrZXkgaW5wdXQgYW5kIHRoZSBldmVudCBpcyBrZXlkb3duLCByZXR1cm4gMjI5LlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNTA0MzkzNC9pcy1pdC1vay10by1pZ25vcmUta2V5ZG93bi1ldmVudHMtd2l0aC1rZXljb2RlLTIyOVxuICAgKiBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctZG9tLzIwMTBKdWxTZXAvYXR0LTAxODIva2V5Q29kZS1zcGVjLmh0bWxcbiAgICovXG5cbiAgaWYgKF9kb3duS2V5cy5pbmRleE9mKGtleSkgPT09IC0xICYmIGtleSAhPT0gMjI5KSBfZG93bktleXMucHVzaChrZXkpO1xuICAvKipcbiAgICogSmVzdCB0ZXN0IGNhc2VzIGFyZSByZXF1aXJlZC5cbiAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgKi9cblxuICBbJ2N0cmxLZXknLCAnYWx0S2V5JywgJ3NoaWZ0S2V5JywgJ21ldGFLZXknXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXlOYW1lKSB7XG4gICAgdmFyIGtleU51bSA9IG1vZGlmaWVyTWFwW2tleU5hbWVdO1xuXG4gICAgaWYgKGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaChrZXlOdW0pO1xuICAgIH0gZWxzZSBpZiAoIWV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkgPiAtMSkge1xuICAgICAgX2Rvd25LZXlzLnNwbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pLCAxKTtcbiAgICB9IGVsc2UgaWYgKGtleU5hbWUgPT09ICdtZXRhS2V5JyAmJiBldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMubGVuZ3RoID09PSAzKSB7XG4gICAgICAvKipcbiAgICAgICAqIEZpeCBpZiBDb21tYW5kIGlzIHByZXNzZWQ6XG4gICAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgKi9cbiAgICAgIGlmICghKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5KSkge1xuICAgICAgICBfZG93bktleXMgPSBfZG93bktleXMuc2xpY2UoX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSB0cnVlOyAvLyDlsIbnibnmrorlrZfnrKbnmoRrZXnms6jlhozliLAgaG90a2V5cyDkuIpcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghYXN0ZXJpc2spIHJldHVybjtcbiAgfSAvLyDlsIYgbW9kaWZpZXJNYXAg6YeM6Z2i55qE5L+u6aWw6ZSu57uR5a6a5YiwIGV2ZW50IOS4rVxuXG5cbiAgZm9yICh2YXIgZSBpbiBfbW9kcykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX21vZHMsIGUpKSB7XG4gICAgICBfbW9kc1tlXSA9IGV2ZW50W21vZGlmaWVyTWFwW2VdXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qYXl3Y2psb3ZlL2hvdGtleXMvcHVsbC8xMjlcbiAgICogVGhpcyBzb2x2ZXMgdGhlIGlzc3VlIGluIEZpcmVmb3ggb24gV2luZG93cyB3aGVyZSBob3RrZXlzIGNvcnJlc3BvbmRpbmcgdG8gc3BlY2lhbCBjaGFyYWN0ZXJzIHdvdWxkIG5vdCB0cmlnZ2VyLlxuICAgKiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgY3RybCthbHQrbSBvbiBhIFN3ZWRpc2gga2V5Ym9hcmQgd2hpY2ggaXMgdXNlZCB0byB0eXBlIM68LlxuICAgKiBCcm93c2VyIHN1cHBvcnQ6IGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9a2V5Ym9hcmRldmVudC1nZXRtb2RpZmllcnN0YXRlXG4gICAqL1xuXG5cbiAgaWYgKGV2ZW50LmdldE1vZGlmaWVyU3RhdGUgJiYgIShldmVudC5hbHRLZXkgJiYgIWV2ZW50LmN0cmxLZXkpICYmIGV2ZW50LmdldE1vZGlmaWVyU3RhdGUoJ0FsdEdyYXBoJykpIHtcbiAgICBpZiAoX2Rvd25LZXlzLmluZGV4T2YoMTcpID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goMTcpO1xuICAgIH1cblxuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxOCkgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxOCk7XG4gICAgfVxuXG4gICAgX21vZHNbMTddID0gdHJ1ZTtcbiAgICBfbW9kc1sxOF0gPSB0cnVlO1xuICB9IC8vIOiOt+WPluiMg+WbtCDpu5jorqTkuLogYGFsbGBcblxuXG4gIHZhciBzY29wZSA9IGdldFNjb3BlKCk7IC8vIOWvueS7u+S9leW/q+aNt+mUrumDvemcgOimgeWBmueahOWkhOeQhlxuXG4gIGlmIChhc3Rlcmlzaykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXN0ZXJpc2subGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhc3Rlcmlza1tpXS5zY29wZSA9PT0gc2NvcGUgJiYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyAmJiBhc3Rlcmlza1tpXS5rZXlkb3duIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgYXN0ZXJpc2tbaV0ua2V5dXApKSB7XG4gICAgICAgIGV2ZW50SGFuZGxlcihldmVudCwgYXN0ZXJpc2tbaV0sIHNjb3BlLCBlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8ga2V5IOS4jeWcqCBfaGFuZGxlcnMg5Lit6L+U5ZueXG5cblxuICBpZiAoIShrZXkgaW4gX2hhbmRsZXJzKSkgcmV0dXJuO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBfaGFuZGxlcnNba2V5XS5sZW5ndGg7IF9pKyspIHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIF9oYW5kbGVyc1trZXldW19pXS5rZXlkb3duIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleXVwKSB7XG4gICAgICBpZiAoX2hhbmRsZXJzW2tleV1bX2ldLmtleSkge1xuICAgICAgICB2YXIgcmVjb3JkID0gX2hhbmRsZXJzW2tleV1bX2ldO1xuICAgICAgICB2YXIgc3BsaXRLZXkgPSByZWNvcmQuc3BsaXRLZXk7XG4gICAgICAgIHZhciBrZXlTaG9ydGN1dCA9IHJlY29yZC5rZXkuc3BsaXQoc3BsaXRLZXkpO1xuICAgICAgICB2YXIgX2Rvd25LZXlzQ3VycmVudCA9IFtdOyAvLyDorrDlvZXlvZPliY3mjInplK7plK7lgLxcblxuICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGtleVNob3J0Y3V0Lmxlbmd0aDsgYSsrKSB7XG4gICAgICAgICAgX2Rvd25LZXlzQ3VycmVudC5wdXNoKGNvZGUoa2V5U2hvcnRjdXRbYV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfZG93bktleXNDdXJyZW50LnNvcnQoKS5qb2luKCcnKSA9PT0gX2Rvd25LZXlzLnNvcnQoKS5qb2luKCcnKSkge1xuICAgICAgICAgIC8vIOaJvuWIsOWkhOeQhuWGheWuuVxuICAgICAgICAgIGV2ZW50SGFuZGxlcihldmVudCwgcmVjb3JkLCBzY29wZSwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8g5Yik5patIGVsZW1lbnQg5piv5ZCm5bey57uP57uR5a6a5LqL5Lu2XG5cblxuZnVuY3Rpb24gaXNFbGVtZW50QmluZChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50SGFzQmluZEV2ZW50LmluZGV4T2YoZWxlbWVudCkgPiAtMTtcbn1cblxuZnVuY3Rpb24gaG90a2V5cyhrZXksIG9wdGlvbiwgbWV0aG9kKSB7XG4gIF9kb3duS2V5cyA9IFtdO1xuICB2YXIga2V5cyA9IGdldEtleXMoa2V5KTsgLy8g6ZyA6KaB5aSE55CG55qE5b+r5o236ZSu5YiX6KGoXG5cbiAgdmFyIG1vZHMgPSBbXTtcbiAgdmFyIHNjb3BlID0gJ2FsbCc7IC8vIHNjb3Bl6buY6K6k5Li6YWxs77yM5omA5pyJ6IyD5Zu06YO95pyJ5pWIXG5cbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudDsgLy8g5b+r5o236ZSu5LqL5Lu257uR5a6a6IqC54K5XG5cbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5dXAgPSBmYWxzZTtcbiAgdmFyIGtleWRvd24gPSB0cnVlO1xuICB2YXIgc3BsaXRLZXkgPSAnKyc7XG4gIHZhciBjYXB0dXJlID0gZmFsc2U7IC8vIOWvueS4uuiuvuWumuiMg+WbtOeahOWIpOaWrVxuXG4gIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbWV0aG9kID0gb3B0aW9uO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvcHRpb24pID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIGlmIChvcHRpb24uc2NvcGUpIHNjb3BlID0gb3B0aW9uLnNjb3BlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmVsZW1lbnQpIGVsZW1lbnQgPSBvcHRpb24uZWxlbWVudDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXl1cCkga2V5dXAgPSBvcHRpb24ua2V5dXA7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24ua2V5ZG93biAhPT0gdW5kZWZpbmVkKSBrZXlkb3duID0gb3B0aW9uLmtleWRvd247IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24uY2FwdHVyZSAhPT0gdW5kZWZpbmVkKSBjYXB0dXJlID0gb3B0aW9uLmNhcHR1cmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9uLnNwbGl0S2V5ID09PSAnc3RyaW5nJykgc3BsaXRLZXkgPSBvcHRpb24uc3BsaXRLZXk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgc2NvcGUgPSBvcHRpb247IC8vIOWvueS6juavj+S4quW/q+aNt+mUrui/m+ihjOWkhOeQhlxuXG4gIGZvciAoOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV0uc3BsaXQoc3BsaXRLZXkpOyAvLyDmjInplK7liJfooahcblxuICAgIG1vZHMgPSBbXTsgLy8g5aaC5p6c5piv57uE5ZCI5b+r5o236ZSu5Y+W5b6X57uE5ZCI5b+r5o236ZSuXG5cbiAgICBpZiAoa2V5Lmxlbmd0aCA+IDEpIG1vZHMgPSBnZXRNb2RzKF9tb2RpZmllciwga2V5KTsgLy8g5bCG6Z2e5L+u6aWw6ZSu6L2s5YyW5Li66ZSu56CBXG5cbiAgICBrZXkgPSBrZXlba2V5Lmxlbmd0aCAtIDFdO1xuICAgIGtleSA9IGtleSA9PT0gJyonID8gJyonIDogY29kZShrZXkpOyAvLyAq6KGo56S65Yy56YWN5omA5pyJ5b+r5o236ZSuXG4gICAgLy8g5Yik5pata2V55piv5ZCm5ZyoX2hhbmRsZXJz5Lit77yM5LiN5Zyo5bCx6LWL5LiA5Liq56m65pWw57uEXG5cbiAgICBpZiAoIShrZXkgaW4gX2hhbmRsZXJzKSkgX2hhbmRsZXJzW2tleV0gPSBbXTtcblxuICAgIF9oYW5kbGVyc1trZXldLnB1c2goe1xuICAgICAga2V5dXA6IGtleXVwLFxuICAgICAga2V5ZG93bjoga2V5ZG93bixcbiAgICAgIHNjb3BlOiBzY29wZSxcbiAgICAgIG1vZHM6IG1vZHMsXG4gICAgICBzaG9ydGN1dDoga2V5c1tpXSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAga2V5OiBrZXlzW2ldLFxuICAgICAgc3BsaXRLZXk6IHNwbGl0S2V5LFxuICAgICAgZWxlbWVudDogZWxlbWVudFxuICAgIH0pO1xuICB9IC8vIOWcqOWFqOWxgGRvY3VtZW505LiK6K6+572u5b+r5o236ZSuXG5cblxuICBpZiAodHlwZW9mIGVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmICFpc0VsZW1lbnRCaW5kKGVsZW1lbnQpICYmIHdpbmRvdykge1xuICAgIGVsZW1lbnRIYXNCaW5kRXZlbnQucHVzaChlbGVtZW50KTtcbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkaXNwYXRjaChlLCBlbGVtZW50KTtcbiAgICB9LCBjYXB0dXJlKTtcblxuICAgIGlmICghd2luTGlzdGVuZEZvY3VzKSB7XG4gICAgICB3aW5MaXN0ZW5kRm9jdXMgPSB0cnVlO1xuICAgICAgYWRkRXZlbnQod2luZG93LCAnZm9jdXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF9kb3duS2V5cyA9IFtdO1xuICAgICAgfSwgY2FwdHVyZSk7XG4gICAgfVxuXG4gICAgYWRkRXZlbnQoZWxlbWVudCwgJ2tleXVwJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUsIGVsZW1lbnQpO1xuICAgICAgY2xlYXJNb2RpZmllcihlKTtcbiAgICB9LCBjYXB0dXJlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmlnZ2VyKHNob3J0Y3V0KSB7XG4gIHZhciBzY29wZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2FsbCc7XG4gIE9iamVjdC5rZXlzKF9oYW5kbGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGRhdGEgPSBfaGFuZGxlcnNba2V5XS5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5zY29wZSA9PT0gc2NvcGUgJiYgaXRlbS5zaG9ydGN1dCA9PT0gc2hvcnRjdXQ7XG4gICAgfSk7XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLm1ldGhvZCkge1xuICAgICAgZGF0YS5tZXRob2QoKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgX2FwaSA9IHtcbiAgc2V0U2NvcGU6IHNldFNjb3BlLFxuICBnZXRTY29wZTogZ2V0U2NvcGUsXG4gIGRlbGV0ZVNjb3BlOiBkZWxldGVTY29wZSxcbiAgZ2V0UHJlc3NlZEtleUNvZGVzOiBnZXRQcmVzc2VkS2V5Q29kZXMsXG4gIGlzUHJlc3NlZDogaXNQcmVzc2VkLFxuICBmaWx0ZXI6IGZpbHRlcixcbiAgdHJpZ2dlcjogdHJpZ2dlcixcbiAgdW5iaW5kOiB1bmJpbmQsXG4gIGtleU1hcDogX2tleU1hcCxcbiAgbW9kaWZpZXI6IF9tb2RpZmllcixcbiAgbW9kaWZpZXJNYXA6IG1vZGlmaWVyTWFwXG59O1xuXG5mb3IgKHZhciBhIGluIF9hcGkpIHtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfYXBpLCBhKSkge1xuICAgIGhvdGtleXNbYV0gPSBfYXBpW2FdO1xuICB9XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICB2YXIgX2hvdGtleXMgPSB3aW5kb3cuaG90a2V5cztcblxuICBob3RrZXlzLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoZGVlcCkge1xuICAgIGlmIChkZWVwICYmIHdpbmRvdy5ob3RrZXlzID09PSBob3RrZXlzKSB7XG4gICAgICB3aW5kb3cuaG90a2V5cyA9IF9ob3RrZXlzO1xuICAgIH1cblxuICAgIHJldHVybiBob3RrZXlzO1xuICB9O1xuXG4gIHdpbmRvdy5ob3RrZXlzID0gaG90a2V5cztcbn1cblxuZXhwb3J0IHsgaG90a2V5cyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgaG90a2V5cyBmcm9tICdob3RrZXlzLWpzJztcbmltcG9ydCB7IHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIFVzZSBpc0hvdGtleVByZXNzZWQgaW5zdGVhZC4gV2lsbCBiZSByZW1vdmVkIHZlcnNpb24gNC5cclxuICovXG5cbmZ1bmN0aW9uIHVzZUlzSG90a2V5UHJlc3NlZCgpIHtcbiAgcmV0dXJuIGhvdGtleXMuaXNQcmVzc2VkO1xufVxuXG5ob3RrZXlzLmZpbHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG52YXIgdGFnRmlsdGVyID0gZnVuY3Rpb24gdGFnRmlsdGVyKF9yZWYsIGVuYWJsZU9uVGFncykge1xuICB2YXIgdGFyZ2V0ID0gX3JlZi50YXJnZXQ7XG4gIHZhciB0YXJnZXRUYWdOYW1lID0gdGFyZ2V0ICYmIHRhcmdldC50YWdOYW1lO1xuICByZXR1cm4gQm9vbGVhbih0YXJnZXRUYWdOYW1lICYmIGVuYWJsZU9uVGFncyAmJiBlbmFibGVPblRhZ3MuaW5jbHVkZXModGFyZ2V0VGFnTmFtZSkpO1xufTtcblxudmFyIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQgPSBmdW5jdGlvbiBpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGV2KSB7XG4gIHJldHVybiB0YWdGaWx0ZXIoZXYsIFsnSU5QVVQnLCAnVEVYVEFSRUEnLCAnU0VMRUNUJ10pO1xufTtcblxuZnVuY3Rpb24gdXNlSG90a2V5cyhrZXlzLCBjYWxsYmFjaywgb3B0aW9ucywgZGVwcykge1xuICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgZGVwcyA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciBfcmVmMiA9IG9wdGlvbnMgfHwge30sXG4gICAgICBlbmFibGVPblRhZ3MgPSBfcmVmMi5lbmFibGVPblRhZ3MsXG4gICAgICBmaWx0ZXIgPSBfcmVmMi5maWx0ZXIsXG4gICAgICBrZXl1cCA9IF9yZWYyLmtleXVwLFxuICAgICAga2V5ZG93biA9IF9yZWYyLmtleWRvd24sXG4gICAgICBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPSBfcmVmMi5maWx0ZXJQcmV2ZW50RGVmYXVsdCxcbiAgICAgIGZpbHRlclByZXZlbnREZWZhdWx0ID0gX3JlZjIkZmlsdGVyUHJldmVudERlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZmlsdGVyUHJldmVudERlLFxuICAgICAgX3JlZjIkZW5hYmxlZCA9IF9yZWYyLmVuYWJsZWQsXG4gICAgICBlbmFibGVkID0gX3JlZjIkZW5hYmxlZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGVuYWJsZWQsXG4gICAgICBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPSBfcmVmMi5lbmFibGVPbkNvbnRlbnRFZGl0YWJsZSxcbiAgICAgIGVuYWJsZU9uQ29udGVudEVkaXRhYmxlID0gX3JlZjIkZW5hYmxlT25Db250ZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJGVuYWJsZU9uQ29udGVudDtcblxuICB2YXIgcmVmID0gdXNlUmVmKG51bGwpOyAvLyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgY2FsbGJhY2sgZGV0ZXJtaW5lcyBpZiB0aGUgYnJvd3NlcnMgZGVmYXVsdCBiZWhhdmlvciBpcyBwcmV2ZW50ZWQuXG5cbiAgdmFyIG1lbW9pc2VkQ2FsbGJhY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoa2V5Ym9hcmRFdmVudCwgaG90a2V5c0V2ZW50KSB7XG4gICAgdmFyIF9rZXlib2FyZEV2ZW50JHRhcmdldDtcblxuICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihrZXlib2FyZEV2ZW50KSkge1xuICAgICAgcmV0dXJuICFmaWx0ZXJQcmV2ZW50RGVmYXVsdDtcbiAgICB9IC8vIENoZWNrIHdoZXRoZXIgdGhlIGhvdGtleXMgd2FzIHRyaWdnZXJlZCBpbnNpZGUgYW4gaW5wdXQgYW5kIHRoYXQgaW5wdXQgaXMgZW5hYmxlZCBvciBpZiBpdCB3YXMgdHJpZ2dlcmVkIGJ5IGEgY29udGVudCBlZGl0YWJsZSB0YWcgYW5kIGl0IGlzIGVuYWJsZWQuXG5cblxuICAgIGlmIChpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGtleWJvYXJkRXZlbnQpICYmICF0YWdGaWx0ZXIoa2V5Ym9hcmRFdmVudCwgZW5hYmxlT25UYWdzKSB8fCAoX2tleWJvYXJkRXZlbnQkdGFyZ2V0ID0ga2V5Ym9hcmRFdmVudC50YXJnZXQpICE9IG51bGwgJiYgX2tleWJvYXJkRXZlbnQkdGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlICYmICFlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlZi5jdXJyZW50ID09PSBudWxsIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHJlZi5jdXJyZW50KSB7XG4gICAgICBjYWxsYmFjayhrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCBkZXBzID8gW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdLmNvbmNhdChkZXBzKSA6IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEluIHRoaXMgY2FzZSBrZXlkb3duIGlzIGxpa2VseSB1bmRlZmluZWQsIHNvIHdlIHNldCBpdCB0byBmYWxzZSwgc2luY2UgaG90a2V5cyBuZWVkcyB0aGUgYGtleWRvd25gIGtleSB0byBoYXZlIGEgdmFsdWUuXG5cblxuICAgIGlmIChrZXl1cCAmJiBrZXlkb3duICE9PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLmtleWRvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBob3RrZXlzKGtleXMsIG9wdGlvbnMgfHwge30sIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgfTtcbiAgfSwgW21lbW9pc2VkQ2FsbGJhY2ssIGtleXMsIGVuYWJsZWRdKTtcbiAgcmV0dXJuIHJlZjtcbn1cblxudmFyIGlzSG90a2V5UHJlc3NlZCA9IGhvdGtleXMuaXNQcmVzc2VkO1xuXG5leHBvcnQgeyBpc0hvdGtleVByZXNzZWQsIHVzZUhvdGtleXMsIHVzZUlzSG90a2V5UHJlc3NlZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcy5tYXBcbiJdLCJzb3VyY2VSb290IjoiIn0=