carbon-components-angular 5.56.3 → 5.56.5

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.
Files changed (103) hide show
  1. package/docs/documentation/classes/Overridable.html +6 -4
  2. package/docs/documentation/components/ComboBox.html +6 -6
  3. package/docs/documentation/components/Pagination.html +3 -3
  4. package/docs/documentation/directives/IconDirective.html +7 -6
  5. package/docs/documentation/injectables/I18n.html +41 -29
  6. package/docs/documentation/interfaces/PaginationTranslations.html +1 -1
  7. package/docs/documentation/js/search/search_index.js +2 -2
  8. package/docs/documentation/modules/TilesModule/dependencies.svg +106 -106
  9. package/docs/documentation/modules/TilesModule.html +106 -106
  10. package/docs/documentation/modules/TimePickerModule/dependencies.svg +36 -40
  11. package/docs/documentation/modules/TimePickerModule.html +36 -40
  12. package/docs/documentation/modules/ToggleModule/dependencies.svg +45 -41
  13. package/docs/documentation/modules/ToggleModule.html +45 -41
  14. package/docs/documentation/modules/ToggletipModule/dependencies.svg +37 -37
  15. package/docs/documentation/modules/ToggletipModule.html +37 -37
  16. package/docs/documentation/modules/TooltipModule/dependencies.svg +28 -28
  17. package/docs/documentation/modules/TooltipModule.html +28 -28
  18. package/docs/documentation/modules/TreeviewModule/dependencies.svg +28 -28
  19. package/docs/documentation/modules/TreeviewModule.html +28 -28
  20. package/docs/documentation/modules/UIShellModule/dependencies.svg +4 -4
  21. package/docs/documentation/modules/UIShellModule.html +4 -4
  22. package/docs/documentation.json +61 -61
  23. package/docs/storybook/1919.2a2b79ce.iframe.bundle.js +1 -0
  24. package/docs/storybook/7141.a08b411a.iframe.bundle.js +1 -0
  25. package/docs/storybook/{8341.d095fdee.iframe.bundle.js → 8341.8e19136f.iframe.bundle.js} +1 -1
  26. package/docs/storybook/9672.4c384e0d.iframe.bundle.js +1 -0
  27. package/docs/storybook/accordion-accordion-stories.75536b46.iframe.bundle.js +1 -0
  28. package/docs/storybook/button-button-set-stories.386c621a.iframe.bundle.js +1 -0
  29. package/docs/storybook/button-button-stories.585caa8e.iframe.bundle.js +1 -0
  30. package/docs/storybook/button-icon-button-stories.e0297847.iframe.bundle.js +1 -0
  31. package/docs/storybook/code-snippet-code-snippet-stories.07e87dc8.iframe.bundle.js +1 -0
  32. package/docs/storybook/combobox-combobox-stories.7419dc2f.iframe.bundle.js +1 -0
  33. package/docs/storybook/context-menu-context-menu-stories.7c62ce72.iframe.bundle.js +1 -0
  34. package/docs/storybook/datepicker-datepicker-stories.9d6520e8.iframe.bundle.js +1 -0
  35. package/docs/storybook/dropdown-dropdown-stories.b9550377.iframe.bundle.js +1 -0
  36. package/docs/storybook/icon-icon-stories.01483f14.iframe.bundle.js +1 -0
  37. package/docs/storybook/iframe.html +2 -2
  38. package/docs/storybook/index-stories.3c2dfd9a.iframe.bundle.js +1 -0
  39. package/docs/storybook/inline-loading-inline-loading-stories.3e44df84.iframe.bundle.js +1 -0
  40. package/docs/storybook/input-input-stories.91b3cf3f.iframe.bundle.js +1 -0
  41. package/docs/storybook/input-password-stories.84bacb0d.iframe.bundle.js +1 -0
  42. package/docs/storybook/input-textarea-stories.b8280606.iframe.bundle.js +1 -0
  43. package/docs/storybook/link-link-stories.d959ec78.iframe.bundle.js +1 -0
  44. package/docs/storybook/main.44dbc42d.iframe.bundle.js +1 -0
  45. package/docs/storybook/number-input-number-stories.6575121c.iframe.bundle.js +1 -0
  46. package/docs/storybook/patterns-loading-large-loading-stories.14eab3d2.iframe.bundle.js +1 -0
  47. package/docs/storybook/progress-bar-progress-bar-stories.b009f3f0.iframe.bundle.js +1 -0
  48. package/docs/storybook/{7141.9d9ce230.iframe.bundle.js → progress-indicator-progress-indicator-stories.633e03cd.iframe.bundle.js} +1 -1
  49. package/docs/storybook/project.json +1 -1
  50. package/docs/storybook/radio-radio-stories.befaf83a.iframe.bundle.js +1 -0
  51. package/docs/storybook/{runtime~main.115ae245.iframe.bundle.js → runtime~main.f0dc5a47.iframe.bundle.js} +1 -1
  52. package/docs/storybook/search-search-stories.b0e346d3.iframe.bundle.js +1 -0
  53. package/docs/storybook/structured-list-structured-list-stories.01f1468d.iframe.bundle.js +1 -0
  54. package/docs/storybook/tag-tag-stories.c5c2cc86.iframe.bundle.js +1 -0
  55. package/docs/storybook/treeview-treeview-stories.be34c320.iframe.bundle.js +1 -0
  56. package/docs/storybook/ui-shell-ui-shell-stories.80c8e5a5.iframe.bundle.js +1 -0
  57. package/esm2020/combobox/combobox.component.mjs +1 -1
  58. package/esm2020/i18n/i18n.service.mjs +1 -1
  59. package/esm2020/icon/icon.directive.mjs +4 -3
  60. package/esm2020/pagination/pagination.component.mjs +3 -3
  61. package/fesm2015/carbon-components-angular-combobox.mjs.map +1 -1
  62. package/fesm2015/carbon-components-angular-i18n.mjs.map +1 -1
  63. package/fesm2015/carbon-components-angular-icon.mjs +3 -2
  64. package/fesm2015/carbon-components-angular-icon.mjs.map +1 -1
  65. package/fesm2015/carbon-components-angular-pagination.mjs +2 -2
  66. package/fesm2015/carbon-components-angular-pagination.mjs.map +1 -1
  67. package/fesm2020/carbon-components-angular-combobox.mjs.map +1 -1
  68. package/fesm2020/carbon-components-angular-i18n.mjs.map +1 -1
  69. package/fesm2020/carbon-components-angular-icon.mjs +3 -2
  70. package/fesm2020/carbon-components-angular-icon.mjs.map +1 -1
  71. package/fesm2020/carbon-components-angular-pagination.mjs +2 -2
  72. package/fesm2020/carbon-components-angular-pagination.mjs.map +1 -1
  73. package/i18n/i18n.service.d.ts +3 -141
  74. package/package.json +1 -1
  75. package/docs/storybook/1919.75654e64.iframe.bundle.js +0 -1
  76. package/docs/storybook/9672.a4277bf9.iframe.bundle.js +0 -1
  77. package/docs/storybook/accordion-accordion-stories.f0e7b598.iframe.bundle.js +0 -1
  78. package/docs/storybook/button-button-set-stories.1094a620.iframe.bundle.js +0 -1
  79. package/docs/storybook/button-button-stories.a0ff29b1.iframe.bundle.js +0 -1
  80. package/docs/storybook/button-icon-button-stories.db9a9ba5.iframe.bundle.js +0 -1
  81. package/docs/storybook/code-snippet-code-snippet-stories.cc0ddba0.iframe.bundle.js +0 -1
  82. package/docs/storybook/combobox-combobox-stories.52c5cd23.iframe.bundle.js +0 -1
  83. package/docs/storybook/context-menu-context-menu-stories.431b9c7a.iframe.bundle.js +0 -1
  84. package/docs/storybook/datepicker-datepicker-stories.86cad958.iframe.bundle.js +0 -1
  85. package/docs/storybook/dropdown-dropdown-stories.0a8f052e.iframe.bundle.js +0 -1
  86. package/docs/storybook/icon-icon-stories.e234de11.iframe.bundle.js +0 -1
  87. package/docs/storybook/index-stories.69d5a816.iframe.bundle.js +0 -1
  88. package/docs/storybook/inline-loading-inline-loading-stories.fea34c40.iframe.bundle.js +0 -1
  89. package/docs/storybook/input-input-stories.68ee4653.iframe.bundle.js +0 -1
  90. package/docs/storybook/input-password-stories.3084ebfc.iframe.bundle.js +0 -1
  91. package/docs/storybook/input-textarea-stories.e3f84fc4.iframe.bundle.js +0 -1
  92. package/docs/storybook/link-link-stories.d436099f.iframe.bundle.js +0 -1
  93. package/docs/storybook/main.3f8ef62f.iframe.bundle.js +0 -1
  94. package/docs/storybook/number-input-number-stories.1e4ea9f3.iframe.bundle.js +0 -1
  95. package/docs/storybook/patterns-loading-large-loading-stories.67f20584.iframe.bundle.js +0 -1
  96. package/docs/storybook/progress-bar-progress-bar-stories.9a58678a.iframe.bundle.js +0 -1
  97. package/docs/storybook/progress-indicator-progress-indicator-stories.981734fc.iframe.bundle.js +0 -1
  98. package/docs/storybook/radio-radio-stories.035c4409.iframe.bundle.js +0 -1
  99. package/docs/storybook/search-search-stories.6bd22f30.iframe.bundle.js +0 -1
  100. package/docs/storybook/structured-list-structured-list-stories.905f4b86.iframe.bundle.js +0 -1
  101. package/docs/storybook/tag-tag-stories.8b0e9efc.iframe.bundle.js +0 -1
  102. package/docs/storybook/treeview-treeview-stories.a7ea66bb.iframe.bundle.js +0 -1
  103. package/docs/storybook/ui-shell-ui-shell-stories.157336b4.iframe.bundle.js +0 -1
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunkcarbon_components_angular=self.webpackChunkcarbon_components_angular||[]).push([[9660],{"./src/button/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{HL:()=>BaseIconButton,zx:()=>Button,hJ:()=>ButtonModule,uV:()=>ButtonSet,hU:()=>IconButton});var tslib_es6=__webpack_require__("./node_modules/tslib/tslib.es6.js"),core=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs");let Button=class Button{constructor(){this.cdsButton="primary",this.skeleton=!1,this.iconOnly=!1,this.isExpressive=!1,this.baseClass=!0}set ibmButton(type){this.cdsButton=type}get primaryButton(){return"primary"===this.cdsButton||!this.cdsButton}get secondaryButton(){return"secondary"===this.cdsButton}get tertiaryButton(){return"tertiary"===this.cdsButton}get ghostButton(){return"ghost"===this.cdsButton}get dangerButton(){return"danger"===this.cdsButton||"danger--primary"===this.cdsButton}get dangerTertiary(){return"danger--tertiary"===this.cdsButton}get dangerGhost(){return"danger--ghost"===this.cdsButton}get smallSize(){return"sm"===this.size&&!this.isExpressive}get mediumSize(){return"md"===this.size&&!this.isExpressive}get largeSize(){return"lg"===this.size}get extraLargeSize(){return"xl"===this.size}get twoExtraLargeSize(){return"2xl"===this.size}get smallLayoutSize(){return"sm"===this.size&&!this.isExpressive}get mediumLayoutSize(){return"md"===this.size&&!this.isExpressive}get largeLayoutSize(){return"lg"===this.size}get extraLargeLayoutSize(){return"xl"===this.size}get twoExtraLargeLayoutSize(){return"2xl"===this.size}};Button.propDecorators={ibmButton:[{type:core.Input}],cdsButton:[{type:core.Input}],size:[{type:core.Input}],skeleton:[{type:core.HostBinding,args:["class.cds--skeleton"]},{type:core.Input}],iconOnly:[{type:core.HostBinding,args:["class.cds--btn--icon-only"]},{type:core.Input}],isExpressive:[{type:core.HostBinding,args:["class.cds--btn--expressive"]},{type:core.Input}],baseClass:[{type:core.HostBinding,args:["class.cds--btn"]}],primaryButton:[{type:core.HostBinding,args:["class.cds--btn--primary"]}],secondaryButton:[{type:core.HostBinding,args:["class.cds--btn--secondary"]}],tertiaryButton:[{type:core.HostBinding,args:["class.cds--btn--tertiary"]}],ghostButton:[{type:core.HostBinding,args:["class.cds--btn--ghost"]}],dangerButton:[{type:core.HostBinding,args:["class.cds--btn--danger"]}],dangerTertiary:[{type:core.HostBinding,args:["class.cds--btn--danger--tertiary"]}],dangerGhost:[{type:core.HostBinding,args:["class.cds--btn--danger--ghost"]}],smallSize:[{type:core.HostBinding,args:["class.cds--btn--sm"]}],mediumSize:[{type:core.HostBinding,args:["class.cds--btn--md"]}],largeSize:[{type:core.HostBinding,args:["class.cds--btn--lg"]}],extraLargeSize:[{type:core.HostBinding,args:["class.cds--btn--xl"]}],twoExtraLargeSize:[{type:core.HostBinding,args:["class.cds--btn--2xl"]}],smallLayoutSize:[{type:core.HostBinding,args:["class.cds--layout--size-sm"]}],mediumLayoutSize:[{type:core.HostBinding,args:["class.cds--layout--size-md"]}],largeLayoutSize:[{type:core.HostBinding,args:["class.cds--layout--size-lg"]}],extraLargeLayoutSize:[{type:core.HostBinding,args:["class.cds--layout--size-xl"]}],twoExtraLargeLayoutSize:[{type:core.HostBinding,args:["class.cds--layout--size-2xl"]}]},Button=(0,tslib_es6.gn)([(0,core.Directive)({selector:"[cdsButton], [ibmButton]"})],Button);let ButtonSet=class ButtonSet{constructor(){this.buttonSetClass=!0}};ButtonSet.propDecorators={buttonSetClass:[{type:core.HostBinding,args:["class.cds--btn-set"]}]},ButtonSet=(0,tslib_es6.gn)([(0,core.Component)({selector:"cds-button-set, ibm-button-set",template:"<ng-content></ng-content>"})],ButtonSet);let BaseIconButton=class BaseIconButton{constructor(){this.caret=!0,this.dropShadow=!0,this.highContrast=!0,this.isOpen=!1,this.align="bottom",this.autoAlign=!1,this.enterDelayMs=100,this.leaveDelayMs=300}};BaseIconButton.propDecorators={caret:[{type:core.Input}],dropShadow:[{type:core.Input}],highContrast:[{type:core.Input}],isOpen:[{type:core.Input}],align:[{type:core.Input}],autoAlign:[{type:core.Input}],enterDelayMs:[{type:core.Input}],leaveDelayMs:[{type:core.Input}]},BaseIconButton=(0,tslib_es6.gn)([(0,core.Component)({template:""})],BaseIconButton);let IconButton=class IconButton extends BaseIconButton{constructor(renderer){super(),this.renderer=renderer,this.buttonId="icon-btn-"+IconButton.iconButtonCounter++,this.kind="primary",this.size="lg",this.type="button",this.isExpressive=!1,this.disabled=!1,this.showTooltipWhenDisabled=!1,this.click=new core.EventEmitter,this.focus=new core.EventEmitter,this.blur=new core.EventEmitter,this.tooltipClick=new core.EventEmitter,this.classList={},this.attributeList={}}set buttonNgClass(obj){this.classList=Object.assign({"cds--btn--disabled":this.disabled},obj)}get buttonNgClass(){return this.classList}set buttonAttributes(obj){this.button&&(Object.keys(this.attributeList).forEach((key=>{this.renderer.removeAttribute(this.button.nativeElement,key)})),Object.keys(obj).forEach((key=>{this.renderer.setAttribute(this.button.nativeElement,key,obj[key])}))),this.attributeList=obj}get buttonAttributes(){return this.buttonAttributes}ngAfterViewInit(){this.buttonAttributes=this.attributeList}emitClickEvent(event,element="button"){event.preventDefault(),event.stopPropagation(),"tooltip"!==element?this.click.emit(event):this.tooltipClick.emit(event)}};IconButton.iconButtonCounter=0,IconButton.ctorParameters=()=>[{type:core.Renderer2}],IconButton.propDecorators={buttonNgClass:[{type:core.Input}],buttonAttributes:[{type:core.Input}],button:[{type:core.ViewChild,args:["button"]}],buttonId:[{type:core.Input}],kind:[{type:core.Input}],size:[{type:core.Input}],type:[{type:core.Input}],isExpressive:[{type:core.Input}],disabled:[{type:core.Input}],description:[{type:core.Input}],showTooltipWhenDisabled:[{type:core.Input}],click:[{type:core.Output}],focus:[{type:core.Output}],blur:[{type:core.Output}],tooltipClick:[{type:core.Output}]},IconButton=(0,tslib_es6.gn)([(0,core.Component)({selector:"cds-icon-button, ibm-icon-button",template:'\n\t<cds-tooltip\n\t\tclass="cds--icon-tooltip"\n\t\t[description]="description"\n\t\t[disabled]="showTooltipWhenDisabled ? false : disabled"\n\t\t[caret]="caret"\n\t\t[dropShadow]="dropShadow"\n\t\t[highContrast]="highContrast"\n\t\t[isOpen]="isOpen"\n\t\t[align]="align"\n\t\t[autoAlign]="autoAlign"\n\t\t[enterDelayMs]="enterDelayMs"\n\t\t[leaveDelayMs]="leaveDelayMs"\n\t\t(click)="emitClickEvent($event, \'tooltip\')">\n\t\t<button\n\t\t\t#button\n\t\t\t[id]="buttonId"\n\t\t\t[disabled]="disabled"\n\t\t\t[attr.type]="type"\n\t\t\t[iconOnly]="true"\n\t\t\t[ngClass]="buttonNgClass"\n\t\t\t[cdsButton]="kind"\n\t\t\t[size]="size"\n\t\t\t[isExpressive]="isExpressive"\n\t\t\t(click)="emitClickEvent($event)"\n\t\t\t(focus)="focus.emit($event)"\n\t\t\t(blur)="blur.emit($event)">\n\t\t\t<ng-content></ng-content>\n\t\t</button>\n\t</cds-tooltip>\n\t'})],IconButton);var common=__webpack_require__("./node_modules/@angular/common/fesm2020/common.mjs"),tooltip=__webpack_require__("./src/tooltip/index.ts");let ButtonModule=class ButtonModule{};ButtonModule=(0,tslib_es6.gn)([(0,core.NgModule)({declarations:[Button,ButtonSet,BaseIconButton,IconButton],exports:[Button,ButtonSet,IconButton],imports:[common.CommonModule,tooltip.z8]})],ButtonModule)},"./src/icon/icon.directive.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>IconDirective});var tslib__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/tslib/tslib.es6.js"),_angular_core__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs"),_icon_service__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./src/icon/icon.service.ts"),_carbon_icon_helpers__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/@carbon/icon-helpers/es/index.js");let IconDirective=class IconDirective{constructor(elementRef,iconService){this.elementRef=elementRef,this.iconService=iconService,this.cdsIcon="",this.size="16",this.title="",this.ariaLabel="",this.ariaLabelledBy="",this.ariaHidden="",this.isFocusable=!1}set ibmIcon(iconName){this.cdsIcon=iconName}renderIcon(iconName){const root=this.elementRef.nativeElement;let icon;try{icon=this.iconService.get(iconName,this.size.toString())}catch(error){return void console.warn(error)}const domParser=new DOMParser,rawSVG=icon.svg,svgElement=domParser.parseFromString(rawSVG,"image/svg+xml").documentElement;let node="SVG"!==root.tagName.toUpperCase()?svgElement:svgElement.firstChild;for(root.innerHTML="";node;)root.appendChild(root.ownerDocument.importNode(node,!0)),node=node.nextSibling;const svg="SVG"!==root.tagName.toUpperCase()?svgElement:root,xmlns="http://www.w3.org/2000/svg";svg.setAttribute("xmlns",xmlns);const attributes=(0,_carbon_icon_helpers__WEBPACK_IMPORTED_MODULE_1__.u9)({width:icon.attrs.width,height:icon.attrs.height,viewBox:icon.attrs.viewBox,title:this.title,"aria-label":this.ariaLabel,"aria-labelledby":this.ariaLabelledBy,"aria-hidden":this.ariaHidden,focusable:this.isFocusable.toString(),fill:icon.attrs.fill}),attrKeys=Object.keys(attributes);for(let i=0;i<attrKeys.length;i++){const key=attrKeys[i],value=attributes[key];"title"!==key&&(value&&svg.setAttribute(key,value))}if(attributes.title){const title=document.createElementNS(xmlns,"title");title.textContent=attributes.title,IconDirective.titleIdCounter++,title.setAttribute("id",`${icon.name}-title-${IconDirective.titleIdCounter}`),svg.insertBefore(title,svg.firstElementChild),svg.setAttribute("aria-labelledby",`${icon.name}-title-${IconDirective.titleIdCounter}`)}}ngAfterViewInit(){this.renderIcon(this.cdsIcon)}ngOnChanges({cdsIcon}){cdsIcon&&!cdsIcon.isFirstChange()&&this.renderIcon(this.cdsIcon)}};IconDirective.titleIdCounter=0,IconDirective.ctorParameters=()=>[{type:_angular_core__WEBPACK_IMPORTED_MODULE_2__.ElementRef},{type:_icon_service__WEBPACK_IMPORTED_MODULE_0__.C6}],IconDirective.propDecorators={ibmIcon:[{type:_angular_core__WEBPACK_IMPORTED_MODULE_2__.Input}],cdsIcon:[{type:_angular_core__WEBPACK_IMPORTED_MODULE_2__.Input}],size:[{type:_angular_core__WEBPACK_IMPORTED_MODULE_2__.Input}],title:[{type:_angular_core__WEBPACK_IMPORTED_MODULE_2__.Input}],ariaLabel:[{type:_angular_core__WEBPACK_IMPORTED_MODULE_2__.Input}],ariaLabelledBy:[{type:_angular_core__WEBPACK_IMPORTED_MODULE_2__.Input}],ariaHidden:[{type:_angular_core__WEBPACK_IMPORTED_MODULE_2__.Input}],isFocusable:[{type:_angular_core__WEBPACK_IMPORTED_MODULE_2__.Input}]},IconDirective=(0,tslib__WEBPACK_IMPORTED_MODULE_3__.gn)([(0,_angular_core__WEBPACK_IMPORTED_MODULE_2__.Directive)({selector:"[cdsIcon], [ibmIcon]"})],IconDirective)},"./src/icon/icon.module.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{QX:()=>IconModule});var tslib__WEBPACK_IMPORTED_MODULE_56__=__webpack_require__("./node_modules/tslib/tslib.es6.js"),_angular_core__WEBPACK_IMPORTED_MODULE_55__=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs"),_angular_common__WEBPACK_IMPORTED_MODULE_57__=__webpack_require__("./node_modules/@angular/common/fesm2020/common.mjs"),_icon_directive__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./src/icon/icon.directive.ts"),_icon_service__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./src/icon/icon.service.ts"),_carbon_icons_es_add_16__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/@carbon/icons/es/add/16.js"),_carbon_icons_es_add_20__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/@carbon/icons/es/add/20.js"),_carbon_icons_es_bee_16__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./node_modules/@carbon/icons/es/bee/16.js"),_carbon_icons_es_bee_20__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./node_modules/@carbon/icons/es/bee/20.js"),_carbon_icons_es_calendar_16__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./node_modules/@carbon/icons/es/calendar/16.js"),_carbon_icons_es_carbon_16__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__("./node_modules/@carbon/icons/es/carbon/16.js"),_carbon_icons_es_carbon_20__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__("./node_modules/@carbon/icons/es/carbon/20.js"),_carbon_icons_es_caret_down_16__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__("./node_modules/@carbon/icons/es/caret--down/16.js"),_carbon_icons_es_caret_left_16__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__("./node_modules/@carbon/icons/es/caret--left/16.js"),_carbon_icons_es_caret_right_16__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/@carbon/icons/es/caret--right/16.js"),_carbon_icons_es_caret_up_16__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/@carbon/icons/es/caret--up/16.js"),_carbon_icons_es_checkmark_16__WEBPACK_IMPORTED_MODULE_13__=__webpack_require__("./node_modules/@carbon/icons/es/checkmark/16.js"),_carbon_icons_es_checkmark_filled_16__WEBPACK_IMPORTED_MODULE_14__=__webpack_require__("./node_modules/@carbon/icons/es/checkmark--filled/16.js"),_carbon_icons_es_checkmark_filled_20__WEBPACK_IMPORTED_MODULE_15__=__webpack_require__("./node_modules/@carbon/icons/es/checkmark--filled/20.js"),_carbon_icons_es_checkmark_outline_16__WEBPACK_IMPORTED_MODULE_16__=__webpack_require__("./node_modules/@carbon/icons/es/checkmark--outline/16.js"),_carbon_icons_es_chevron_down_16__WEBPACK_IMPORTED_MODULE_17__=__webpack_require__("./node_modules/@carbon/icons/es/chevron--down/16.js"),_carbon_icons_es_chevron_right_16__WEBPACK_IMPORTED_MODULE_18__=__webpack_require__("./node_modules/@carbon/icons/es/chevron--right/16.js"),_carbon_icons_es_circle_dash_16__WEBPACK_IMPORTED_MODULE_19__=__webpack_require__("./node_modules/@carbon/icons/es/circle-dash/16.js"),_carbon_icons_es_close_16__WEBPACK_IMPORTED_MODULE_20__=__webpack_require__("./node_modules/@carbon/icons/es/close/16.js"),_carbon_icons_es_close_20__WEBPACK_IMPORTED_MODULE_21__=__webpack_require__("./node_modules/@carbon/icons/es/close/20.js"),_carbon_icons_es_copy_16__WEBPACK_IMPORTED_MODULE_22__=__webpack_require__("./node_modules/@carbon/icons/es/copy/16.js"),_carbon_icons_es_copy_20__WEBPACK_IMPORTED_MODULE_23__=__webpack_require__("./node_modules/@carbon/icons/es/copy/20.js"),_carbon_icons_es_data_2_16__WEBPACK_IMPORTED_MODULE_24__=__webpack_require__("./node_modules/@carbon/icons/es/data--2/16.js"),_carbon_icons_es_data_2_20__WEBPACK_IMPORTED_MODULE_25__=__webpack_require__("./node_modules/@carbon/icons/es/data--2/20.js"),_carbon_icons_es_document_16__WEBPACK_IMPORTED_MODULE_26__=__webpack_require__("./node_modules/@carbon/icons/es/document/16.js"),_carbon_icons_es_document_20__WEBPACK_IMPORTED_MODULE_27__=__webpack_require__("./node_modules/@carbon/icons/es/document/20.js"),_carbon_icons_es_download_16__WEBPACK_IMPORTED_MODULE_28__=__webpack_require__("./node_modules/@carbon/icons/es/download/16.js"),_carbon_icons_es_error_filled_16__WEBPACK_IMPORTED_MODULE_29__=__webpack_require__("./node_modules/@carbon/icons/es/error--filled/16.js"),_carbon_icons_es_error_filled_20__WEBPACK_IMPORTED_MODULE_30__=__webpack_require__("./node_modules/@carbon/icons/es/error--filled/20.js"),_carbon_icons_es_fade_16__WEBPACK_IMPORTED_MODULE_31__=__webpack_require__("./node_modules/@carbon/icons/es/fade/16.js"),_carbon_icons_es_fade_20__WEBPACK_IMPORTED_MODULE_32__=__webpack_require__("./node_modules/@carbon/icons/es/fade/20.js"),_carbon_icons_es_folder_16__WEBPACK_IMPORTED_MODULE_33__=__webpack_require__("./node_modules/@carbon/icons/es/folder/16.js"),_carbon_icons_es_incomplete_16__WEBPACK_IMPORTED_MODULE_34__=__webpack_require__("./node_modules/@carbon/icons/es/incomplete/16.js"),_carbon_icons_es_information_filled_16__WEBPACK_IMPORTED_MODULE_35__=__webpack_require__("./node_modules/@carbon/icons/es/information--filled/16.js"),_carbon_icons_es_information_filled_20__WEBPACK_IMPORTED_MODULE_36__=__webpack_require__("./node_modules/@carbon/icons/es/information--filled/20.js"),_carbon_icons_es_information_square_filled_20__WEBPACK_IMPORTED_MODULE_37__=__webpack_require__("./node_modules/@carbon/icons/es/information--square--filled/20.js"),_carbon_icons_es_menu_16__WEBPACK_IMPORTED_MODULE_38__=__webpack_require__("./node_modules/@carbon/icons/es/menu/16.js"),_carbon_icons_es_menu_20__WEBPACK_IMPORTED_MODULE_39__=__webpack_require__("./node_modules/@carbon/icons/es/menu/20.js"),_carbon_icons_es_overflow_menu_vertical_16__WEBPACK_IMPORTED_MODULE_40__=__webpack_require__("./node_modules/@carbon/icons/es/overflow-menu--vertical/16.js"),_carbon_icons_es_overflow_menu_horizontal_16__WEBPACK_IMPORTED_MODULE_41__=__webpack_require__("./node_modules/@carbon/icons/es/overflow-menu--horizontal/16.js"),_carbon_icons_es_save_16__WEBPACK_IMPORTED_MODULE_42__=__webpack_require__("./node_modules/@carbon/icons/es/save/16.js"),_carbon_icons_es_search_16__WEBPACK_IMPORTED_MODULE_43__=__webpack_require__("./node_modules/@carbon/icons/es/search/16.js"),_carbon_icons_es_settings_16__WEBPACK_IMPORTED_MODULE_44__=__webpack_require__("./node_modules/@carbon/icons/es/settings/16.js"),_carbon_icons_es_settings_adjust_16__WEBPACK_IMPORTED_MODULE_45__=__webpack_require__("./node_modules/@carbon/icons/es/settings--adjust/16.js"),_carbon_icons_es_subtract_16__WEBPACK_IMPORTED_MODULE_46__=__webpack_require__("./node_modules/@carbon/icons/es/subtract/16.js"),_carbon_icons_es_trash_can_16__WEBPACK_IMPORTED_MODULE_47__=__webpack_require__("./node_modules/@carbon/icons/es/trash-can/16.js"),_carbon_icons_es_warning_16__WEBPACK_IMPORTED_MODULE_48__=__webpack_require__("./node_modules/@carbon/icons/es/warning/16.js"),_carbon_icons_es_warning_filled_16__WEBPACK_IMPORTED_MODULE_49__=__webpack_require__("./node_modules/@carbon/icons/es/warning--filled/16.js"),_carbon_icons_es_warning_filled_20__WEBPACK_IMPORTED_MODULE_50__=__webpack_require__("./node_modules/@carbon/icons/es/warning--filled/20.js"),_carbon_icons_es_warning_alt_filled_16__WEBPACK_IMPORTED_MODULE_51__=__webpack_require__("./node_modules/@carbon/icons/es/warning--alt--filled/16.js"),_carbon_icons_es_warning_alt_filled_20__WEBPACK_IMPORTED_MODULE_52__=__webpack_require__("./node_modules/@carbon/icons/es/warning--alt--filled/20.js"),_carbon_icons_es_view_16__WEBPACK_IMPORTED_MODULE_53__=__webpack_require__("./node_modules/@carbon/icons/es/view/16.js"),_carbon_icons_es_view_off_16__WEBPACK_IMPORTED_MODULE_54__=__webpack_require__("./node_modules/@carbon/icons/es/view--off/16.js");const ICON_SERVICE_PROVIDER={provide:_icon_service__WEBPACK_IMPORTED_MODULE_1__.C6,deps:[[new _angular_core__WEBPACK_IMPORTED_MODULE_55__.Optional,new _angular_core__WEBPACK_IMPORTED_MODULE_55__.SkipSelf,_icon_service__WEBPACK_IMPORTED_MODULE_1__.C6]],useFactory:function ICON_SERVICE_PROVIDER_FACTORY(parentService){return parentService||new _icon_service__WEBPACK_IMPORTED_MODULE_1__.C6}};let IconModule=class IconModule{constructor(iconService){this.iconService=iconService,iconService.registerAll([_carbon_icons_es_add_16__WEBPACK_IMPORTED_MODULE_2__.Z,_carbon_icons_es_add_20__WEBPACK_IMPORTED_MODULE_3__.Z,_carbon_icons_es_bee_16__WEBPACK_IMPORTED_MODULE_4__.Z,_carbon_icons_es_bee_20__WEBPACK_IMPORTED_MODULE_5__.Z,_carbon_icons_es_calendar_16__WEBPACK_IMPORTED_MODULE_6__.Z,_carbon_icons_es_carbon_16__WEBPACK_IMPORTED_MODULE_7__.Z,_carbon_icons_es_carbon_20__WEBPACK_IMPORTED_MODULE_8__.Z,_carbon_icons_es_caret_down_16__WEBPACK_IMPORTED_MODULE_9__.Z,_carbon_icons_es_caret_left_16__WEBPACK_IMPORTED_MODULE_10__.Z,_carbon_icons_es_caret_right_16__WEBPACK_IMPORTED_MODULE_11__.Z,_carbon_icons_es_caret_up_16__WEBPACK_IMPORTED_MODULE_12__.Z,_carbon_icons_es_checkmark_16__WEBPACK_IMPORTED_MODULE_13__.Z,_carbon_icons_es_checkmark_filled_16__WEBPACK_IMPORTED_MODULE_14__.Z,_carbon_icons_es_checkmark_filled_20__WEBPACK_IMPORTED_MODULE_15__.Z,_carbon_icons_es_checkmark_outline_16__WEBPACK_IMPORTED_MODULE_16__.Z,_carbon_icons_es_chevron_down_16__WEBPACK_IMPORTED_MODULE_17__.Z,_carbon_icons_es_chevron_right_16__WEBPACK_IMPORTED_MODULE_18__.Z,_carbon_icons_es_circle_dash_16__WEBPACK_IMPORTED_MODULE_19__.Z,_carbon_icons_es_close_16__WEBPACK_IMPORTED_MODULE_20__.Z,_carbon_icons_es_close_20__WEBPACK_IMPORTED_MODULE_21__.Z,_carbon_icons_es_copy_16__WEBPACK_IMPORTED_MODULE_22__.Z,_carbon_icons_es_copy_20__WEBPACK_IMPORTED_MODULE_23__.Z,_carbon_icons_es_data_2_16__WEBPACK_IMPORTED_MODULE_24__.Z,_carbon_icons_es_data_2_20__WEBPACK_IMPORTED_MODULE_25__.Z,_carbon_icons_es_document_16__WEBPACK_IMPORTED_MODULE_26__.Z,_carbon_icons_es_document_20__WEBPACK_IMPORTED_MODULE_27__.Z,_carbon_icons_es_download_16__WEBPACK_IMPORTED_MODULE_28__.Z,_carbon_icons_es_error_filled_16__WEBPACK_IMPORTED_MODULE_29__.Z,_carbon_icons_es_error_filled_20__WEBPACK_IMPORTED_MODULE_30__.Z,_carbon_icons_es_fade_16__WEBPACK_IMPORTED_MODULE_31__.Z,_carbon_icons_es_fade_20__WEBPACK_IMPORTED_MODULE_32__.Z,_carbon_icons_es_folder_16__WEBPACK_IMPORTED_MODULE_33__.Z,_carbon_icons_es_incomplete_16__WEBPACK_IMPORTED_MODULE_34__.Z,_carbon_icons_es_information_filled_16__WEBPACK_IMPORTED_MODULE_35__.Z,_carbon_icons_es_information_filled_20__WEBPACK_IMPORTED_MODULE_36__.Z,_carbon_icons_es_information_square_filled_20__WEBPACK_IMPORTED_MODULE_37__.Z,_carbon_icons_es_menu_16__WEBPACK_IMPORTED_MODULE_38__.Z,_carbon_icons_es_menu_20__WEBPACK_IMPORTED_MODULE_39__.Z,_carbon_icons_es_overflow_menu_vertical_16__WEBPACK_IMPORTED_MODULE_40__.Z,_carbon_icons_es_overflow_menu_horizontal_16__WEBPACK_IMPORTED_MODULE_41__.Z,_carbon_icons_es_save_16__WEBPACK_IMPORTED_MODULE_42__.Z,_carbon_icons_es_search_16__WEBPACK_IMPORTED_MODULE_43__.Z,_carbon_icons_es_settings_16__WEBPACK_IMPORTED_MODULE_44__.Z,_carbon_icons_es_settings_adjust_16__WEBPACK_IMPORTED_MODULE_45__.Z,_carbon_icons_es_subtract_16__WEBPACK_IMPORTED_MODULE_46__.Z,_carbon_icons_es_trash_can_16__WEBPACK_IMPORTED_MODULE_47__.Z,_carbon_icons_es_view_16__WEBPACK_IMPORTED_MODULE_53__.Z,_carbon_icons_es_view_off_16__WEBPACK_IMPORTED_MODULE_54__.Z,_carbon_icons_es_warning_16__WEBPACK_IMPORTED_MODULE_48__.Z,_carbon_icons_es_warning_filled_16__WEBPACK_IMPORTED_MODULE_49__.Z,_carbon_icons_es_warning_filled_20__WEBPACK_IMPORTED_MODULE_50__.Z,_carbon_icons_es_warning_alt_filled_16__WEBPACK_IMPORTED_MODULE_51__.Z,_carbon_icons_es_warning_alt_filled_20__WEBPACK_IMPORTED_MODULE_52__.Z])}};IconModule.ctorParameters=()=>[{type:_icon_service__WEBPACK_IMPORTED_MODULE_1__.C6}],IconModule=(0,tslib__WEBPACK_IMPORTED_MODULE_56__.gn)([(0,_angular_core__WEBPACK_IMPORTED_MODULE_55__.NgModule)({declarations:[_icon_directive__WEBPACK_IMPORTED_MODULE_0__.a],exports:[_icon_directive__WEBPACK_IMPORTED_MODULE_0__.a],imports:[_angular_common__WEBPACK_IMPORTED_MODULE_57__.CommonModule],providers:[ICON_SERVICE_PROVIDER]})],IconModule)},"./src/icon/icon.service.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{C6:()=>IconService});var tslib__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/tslib/tslib.es6.js"),_angular_core__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs"),_carbon_icon_helpers__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/@carbon/icon-helpers/es/index.js");class IconNameNotFoundError extends Error{constructor(name){super(`Icon ${name} not found`)}}class IconSizeNotFoundError extends Error{constructor(size,name){super("Size ${size} for ${name} not found")}}class IconMemoryCache extends class IconCache{}{constructor(){super(...arguments),this.iconMap=new Map}get(name,size){if(!this.iconMap.has(name))throw new IconNameNotFoundError(name);const sizeMap=this.iconMap.get(name);if(!sizeMap.has(size))throw new IconSizeNotFoundError(size,name);return sizeMap.get(size)}set(name,size,descriptor){this.iconMap.has(name)||this.iconMap.set(name,new Map);this.iconMap.get(name).set(size,descriptor)}}let IconService=class IconService{constructor(){this.iconCache=new IconMemoryCache}registerAll(descriptors){descriptors.forEach((icon=>this.register(icon)))}register(descriptor){const{name}=descriptor;this.registerAs(name,descriptor)}registerAs(name,descriptor){const{size}=descriptor;this.iconCache.set(name,size.toString(),descriptor)}get(name,size){try{const icon=this.iconCache.get(name,size.toString());return icon.svg||(icon.svg=(0,_carbon_icon_helpers__WEBPACK_IMPORTED_MODULE_0__.BB)(icon)),icon}catch(e){throw e}}configure(options){this.iconCache=options.cache}};IconService=(0,tslib__WEBPACK_IMPORTED_MODULE_1__.gn)([(0,_angular_core__WEBPACK_IMPORTED_MODULE_2__.Injectable)()],IconService)},"./src/icon/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{ar:()=>icon_directive.a,QX:()=>icon_module.QX,C6:()=>icon_service.C6});var icon_directive=__webpack_require__("./src/icon/icon.directive.ts"),icon_module=__webpack_require__("./src/icon/icon.module.ts"),icon_service=__webpack_require__("./src/icon/icon.service.ts")},"./src/layer/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{A:()=>LayerDirective,D:()=>LayerModule});var tslib_es6=__webpack_require__("./node_modules/tslib/tslib.es6.js"),core=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs");let LayerDirective=class LayerDirective{set ibmLayer(level){this.cdsLayer=level}set cdsLayer(level){"number"==typeof level&&(this._passedLevel=level,this.layer=level)}get cdsLayer(){return this._passedLevel}set layer(level){"number"==typeof level&&(this._level=Math.max(0,Math.min(level,2)),this.layerChildren&&this.layerChildren.forEach((layer=>{layer!==this&&(layer.layer="number"==typeof layer._passedLevel?layer._passedLevel:this.layer+1)})))}get layer(){return this._level}get layerOneClass(){return 0===this.layer}get layerTwoClass(){return 1===this.layer}get layerThreeClass(){return 2===this.layer}ngAfterContentInit(){"number"!=typeof this.cdsLayer&&(this.layer=1)}};LayerDirective.propDecorators={ibmLayer:[{type:core.Input}],cdsLayer:[{type:core.Input}],layerOneClass:[{type:core.HostBinding,args:["class.cds--layer-one"]}],layerTwoClass:[{type:core.HostBinding,args:["class.cds--layer-two"]}],layerThreeClass:[{type:core.HostBinding,args:["class.cds--layer-three"]}],layerChildren:[{type:core.ContentChildren,args:[LayerDirective,{descendants:!1}]}]},LayerDirective=(0,tslib_es6.gn)([(0,core.Directive)({selector:"[cdsLayer], [ibmLayer]",exportAs:"layer"})],LayerDirective);var common=__webpack_require__("./node_modules/@angular/common/fesm2020/common.mjs");let LayerModule=class LayerModule{};LayerModule=(0,tslib_es6.gn)([(0,core.NgModule)({declarations:[LayerDirective],exports:[LayerDirective],imports:[common.CommonModule]})],LayerModule)},"./src/search/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{o:()=>Search,t:()=>SearchModule});var tslib_es6=__webpack_require__("./node_modules/tslib/tslib.es6.js"),search_componentngResource=__webpack_require__("./src/search/search.component.html?ngResource"),core=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs"),fesm2020_forms=__webpack_require__("./node_modules/@angular/forms/fesm2020/forms.mjs"),i18n=__webpack_require__("./src/i18n/index.ts");let Search=class Search{constructor(elementRef,i18n){this.elementRef=elementRef,this.i18n=i18n,this.theme="dark",this.size="md",this.disabled=!1,this.toolbar=!1,this.expandable=!1,this.skeleton=!1,this.active=!1,this.tableSearch=!1,this.id=`search-${Search.searchCount}`,this.value="",this.autocomplete="on",this.label=this.i18n.get().SEARCH.LABEL,this.placeholder=this.i18n.get().SEARCH.PLACEHOLDER,this.clearButtonTitle=this.i18n.get().SEARCH.CLEAR_BUTTON,this.searchTitle="",this.fluid=!1,this.valueChange=new core.EventEmitter,this.open=new core.EventEmitter,this.clear=new core.EventEmitter,this.search=new core.EventEmitter,this.isComposing=!1,this.onTouched=()=>{},this.propagateChange=_=>{},Search.searchCount++}get containerClass(){return!(this.toolbar||this.expandable)}get fluidSkeletonClass(){return this.skeleton&&this.fluid}writeValue(value){this.value=value}registerOnChange(fn){this.propagateChange=fn}registerOnTouched(fn){this.onTouched=fn}onSearch(search){this.isComposing||(this.value=search,this.doValueChange())}onEnter(){this.search.emit(this.value)}clearSearch(){this.value="",this.clear.emit(),this.propagateChange(this.value)}doValueChange(){this.valueChange.emit(this.value),this.propagateChange(this.value)}openSearch(){this.active=!0,this.open.emit(this.active),setTimeout((()=>this.inputRef.nativeElement.focus()))}keyDown(event){(this.toolbar||this.expandable)&&("Escape"===event.key?""===this.value&&(this.active=!1,this.open.emit(this.active)):"Enter"===event.key&&this.openSearch()),"Escape"===event.key&&""!==this.value&&this.clearSearch()}focusOut(event){this.onTouched(),(this.expandable||this.toolbar)&&this.inputRef&&""===this.inputRef.nativeElement.value&&!this.elementRef.nativeElement.contains(event.relatedTarget)&&(this.active=!1,this.open.emit(this.active))}focusIn(event){this.onTouched(),!this.expandable&&!this.toolbar||!this.inputRef||event.relatedTarget||this.elementRef.nativeElement.contains(event.relatedTarget)||this.openSearch()}compositionStart(event){this.isComposing=!0}compositionEnd(event){this.isComposing=!1,this.onSearch(this.value+event.data)}};Search.searchCount=0,Search.ctorParameters=()=>[{type:core.ElementRef},{type:i18n.oc}],Search.propDecorators={containerClass:[{type:core.HostBinding,args:["class.cds--form-item"]}],fluidSkeletonClass:[{type:core.HostBinding,args:["class.cds--text-input--fluid__skeleton"]}],theme:[{type:core.Input}],size:[{type:core.Input}],disabled:[{type:core.Input}],toolbar:[{type:core.Input}],expandable:[{type:core.Input}],skeleton:[{type:core.Input}],active:[{type:core.Input}],tableSearch:[{type:core.Input}],name:[{type:core.Input}],id:[{type:core.Input}],required:[{type:core.Input}],value:[{type:core.Input}],autocomplete:[{type:core.Input}],label:[{type:core.Input}],placeholder:[{type:core.Input}],clearButtonTitle:[{type:core.Input}],searchTitle:[{type:core.Input}],ariaLabel:[{type:core.Input}],fluid:[{type:core.Input}],valueChange:[{type:core.Output}],open:[{type:core.Output}],clear:[{type:core.Output}],search:[{type:core.Output}],inputRef:[{type:core.ViewChild,args:["input"]}],keyDown:[{type:core.HostListener,args:["keydown",["$event"]]}],focusOut:[{type:core.HostListener,args:["focusout",["$event"]]}],focusIn:[{type:core.HostListener,args:["focusin",["$event"]]}],compositionStart:[{type:core.HostListener,args:["compositionstart",["$event"]]}],compositionEnd:[{type:core.HostListener,args:["compositionend",["$event"]]}]},Search=(0,tslib_es6.gn)([(0,core.Component)({selector:"cds-search, ibm-search",template:search_componentngResource,providers:[{provide:fesm2020_forms.JU,useExisting:Search,multi:!0}]})],Search);var common=__webpack_require__("./node_modules/@angular/common/fesm2020/common.mjs"),icon=__webpack_require__("./src/icon/index.ts");let SearchModule=class SearchModule{};SearchModule=(0,tslib_es6.gn)([(0,core.NgModule)({declarations:[Search],exports:[Search],imports:[fesm2020_forms.u5,common.CommonModule,i18n.LU,icon.QX]})],SearchModule)},"./src/theme/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{E:()=>ThemeDirective,O:()=>ThemeModule});var tslib_es6=__webpack_require__("./node_modules/tslib/tslib.es6.js"),core=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs"),src_layer=__webpack_require__("./src/layer/index.ts");let ThemeDirective=class ThemeDirective{constructor(){this.cdsTheme="white",this.layerClass=!0}set ibmTheme(type){this.cdsTheme=type}get whiteThemeClass(){return"white"===this.cdsTheme||!this.cdsTheme}get g10ThemeClass(){return"g10"===this.cdsTheme}get g90ThemeClass(){return"g90"===this.cdsTheme}get g100ThemeClass(){return"g100"===this.cdsTheme}ngAfterContentChecked(){this.layerChildren.toArray().forEach((layer=>{"number"!=typeof layer.cdsLayer&&(layer.cdsLayer=1)}))}};ThemeDirective.propDecorators={ibmTheme:[{type:core.Input}],cdsTheme:[{type:core.Input}],layerChildren:[{type:core.ContentChildren,args:[src_layer.A,{descendants:!1}]}],whiteThemeClass:[{type:core.HostBinding,args:["class.cds--white"]}],g10ThemeClass:[{type:core.HostBinding,args:["class.cds--g10"]}],g90ThemeClass:[{type:core.HostBinding,args:["class.cds--g90"]}],g100ThemeClass:[{type:core.HostBinding,args:["class.cds--g100"]}],layerClass:[{type:core.HostBinding,args:["class.cds--layer-one"]}]},ThemeDirective=(0,tslib_es6.gn)([(0,core.Directive)({selector:"[cdsTheme], [ibmTheme]",exportAs:"theme"})],ThemeDirective);var common=__webpack_require__("./node_modules/@angular/common/fesm2020/common.mjs");let ThemeModule=class ThemeModule{};ThemeModule=(0,tslib_es6.gn)([(0,core.NgModule)({declarations:[ThemeDirective],exports:[ThemeDirective],imports:[common.CommonModule,src_layer.D]})],ThemeModule)},"./src/ui-shell/ui-shell.stories.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{AngularRouting:()=>AngularRouting,Header:()=>Header,HeaderFluid:()=>HeaderFluid,HeaderWithRouter:()=>HeaderWithRouter,HeaderWithTemp:()=>HeaderWithTemp,SideNavigation:()=>SideNavigation,SideNavigationRail:()=>SideNavigationRail,SideNavigationRouter:()=>SideNavigationRouter,SideNavigationUseRouter:()=>SideNavigationUseRouter,SidePanel:()=>SidePanel,Together:()=>Together,WithModel:()=>WithModel,__namedExportsOrder:()=>__namedExportsOrder,default:()=>ui_shell_stories});var core=__webpack_require__("./node_modules/@angular/core/fesm2020/core.mjs"),router=__webpack_require__("./node_modules/@angular/router/fesm2020/router.mjs"),dist=__webpack_require__("./node_modules/@storybook/angular/dist/index.mjs"),search=__webpack_require__("./src/search/index.ts"),icon=__webpack_require__("./src/icon/index.ts"),theme=__webpack_require__("./src/theme/index.ts"),ui_shell=__webpack_require__("./src/ui-shell/index.ts"),tslib_es6=__webpack_require__("./node_modules/tslib/tslib.es6.js");let BarComponent=class BarComponent{};BarComponent=(0,tslib_es6.gn)([(0,core.Component)({selector:"app-bar",template:"<h1>bar</h1>"})],BarComponent);let FooComponent=class FooComponent{};FooComponent=(0,tslib_es6.gn)([(0,core.Component)({selector:"app-foo",template:"<h1>foo</h1>"})],FooComponent);let HeaderFluidComponent=class HeaderFluidComponent{constructor(){this.hasHamburger=!1}};HeaderFluidComponent.propDecorators={headerItems:[{type:core.Input}]},HeaderFluidComponent=(0,tslib_es6.gn)([(0,core.Component)({selector:"app-header-fluid",template:'\n\t\t<cds-header name="[Platform]">\n\t\t\t<cds-hamburger\n\t\t\t\t(selected)="hasHamburger = !hasHamburger"\n\t\t\t\tclass="cds--header__menu-toggle__hidden"></cds-hamburger>\n\t\t\t<cds-header-navigation [navigationItems]="headerItems"></cds-header-navigation>\n\t\t\t<cds-sidenav\n\t\t\t\t*ngIf="hasHamburger"\n\t\t\t\t[navigationItems]="headerItems"\n\t\t\t\tclass="cds--header__menu-toggle__hidden"></cds-sidenav>\n\t\t</cds-header>\n\t'})],HeaderFluidComponent);const ui_shell_stories={title:"Components/UI Shell",decorators:[(0,dist.applicationConfig)({providers:[(0,core.importProvidersFrom)(router.Bz.forRoot([{path:"bar",component:BarComponent},{path:"foo",component:FooComponent}],{useHash:!0}))]}),(0,dist.moduleMetadata)({declarations:[BarComponent,FooComponent,HeaderFluidComponent],imports:[theme.O,ui_shell.p5,icon.QX,search.t,router.Bz]})],args:{theme:"white"},argTypes:{theme:{options:["white","g10","g90","g100"],control:"radio"}},parameters:{docs:{story:{height:"30rem"}}}},Header=(args=>({props:args,template:'\n <div [cdsTheme]="theme">\n <cds-header name="[Platform]">\n <cds-hamburger *ngIf="hasHamburger" (click)="expanded($event)"></cds-hamburger>\n <cds-header-navigation>\n <cds-header-item>Catalog</cds-header-item>\n <cds-header-item isCurrentPage="true">Docs</cds-header-item>\n <cds-header-item>Support</cds-header-item>\n <cds-header-menu title="Manage">\n <cds-header-item>Link 1</cds-header-item>\n <cds-header-item>Link 2</cds-header-item>\n <cds-header-item>Link 3</cds-header-item>\n </cds-header-menu>\n </cds-header-navigation>\n <cds-header-global>\n <cds-header-action description="action">\n <svg cdsIcon="fade" size="20"></svg>\n </cds-header-action>\n <cds-header-action description="action">\n <svg cdsIcon="fade" size="20"></svg>\n </cds-header-action>\n </cds-header-global>\n </cds-header>\n </div>\n '})).bind({});Header.args={hasHamburger:!0},Header.argTypes={expanded:{action:"Menu clicked!"}};const HeaderFluid=(args=>({props:args,template:'\n \x3c!--\n app-* components are for demo purposes only.\n You can create your own implementation by using the component source found at:\n https://github.com/IBM/carbon-components-angular/tree/master/src/ui-shell/stories/header-fluid.component.ts\n --\x3e\n <app-header-fluid [headerItems]="headerItems"></app-header-fluid>\n '})).bind({});HeaderFluid.storyName="Header fluid items to side navigation",HeaderFluid.args={headerItems:[{type:"item",content:"Catalog",title:"Catalog"},{type:"item",content:"Docs",isCurrentPage:!0},{type:"item",content:"Support"},{type:"menu",title:"Manage",menuItems:[{type:"item",content:"Link 1"},{type:"item",content:"Link 2"},{type:"item",content:"Link 3"}]}]},HeaderFluid.argTypes={headerItems:{control:!1},theme:{control:!1}};const HeaderWithTemp=(args=>({props:args,template:'\n <div [cdsTheme]="theme">\n <cds-header name="[Platform]" [brand]="brandTemplate">\n <cds-hamburger *ngIf="hasHamburger" (click)="expanded($event)"></cds-hamburger>\n <cds-header-navigation>\n <cds-header-item>Catalog</cds-header-item>\n <cds-header-item>Docs</cds-header-item>\n <cds-header-item>Support</cds-header-item>\n <cds-header-menu title="Manage">\n <cds-header-item>Link 1</cds-header-item>\n <cds-header-item>Link 2</cds-header-item>\n <cds-header-item>Link 3</cds-header-item>\n </cds-header-menu>\n </cds-header-navigation>\n <cds-header-global>\n <cds-header-action description="action">\n <svg cdsIcon="fade" size="20"></svg>\n </cds-header-action>\n <cds-header-action description="action">\n <svg cdsIcon="fade" size="20"></svg>\n </cds-header-action>\n </cds-header-global>\n </cds-header>\n </div>\n <ng-template #brandTemplate>\n <a class="cds--header__name">\n <svg cdsIcon="carbon" size="32" style="stroke:white;fill:white"></svg>\n <span class="cds--header__name--prefix">IBM</span>\n [Platform]\n </a>\n </ng-template>\n '})).bind({});HeaderWithTemp.storyName="Header with template",HeaderWithTemp.args={hasHamburger:!0},HeaderWithTemp.argTypes={expanded:{action:"Menu clicked!"}};const HeaderWithRouter=(args=>({props:args,template:'\n <div [cdsTheme]="theme">\n <cds-header name="[Platform]" [route]="[\'bar\']">\n <cds-header-navigation>\n <cds-header-item [route]="[\'foo\']">Catalog</cds-header-item>\n <cds-header-item [route]="[\'bar\']">Docs</cds-header-item>\n <cds-header-item [route]="[\'foo\']">Support</cds-header-item>\n <cds-header-menu title="Manage">\n <cds-header-item [route]="[\'foo\']">Link 1</cds-header-item>\n <cds-header-item [route]="[\'bar\']">Link 2</cds-header-item>\n <cds-header-item [route]="[\'foo\']">Link 3</cds-header-item>\n </cds-header-menu>\n </cds-header-navigation>\n </cds-header>\n </div>\n <div style="margin-top: 2rem">\n <router-outlet></router-outlet>\n </div>\n '})).bind({});HeaderWithRouter.argTypes={expanded:{action:"Menu clicked!"}};const SideNavigation=(args=>({props:args,template:'\n <div [cdsTheme]="theme">\n <cds-sidenav>\n <cds-sidenav-item [active]="true">\n Link\n </cds-sidenav-item>\n <cds-sidenav-item>\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-menu title="Category title">\n <svg cdsIcon="fade" icon size="16"></svg>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n </cds-sidenav-menu>\n </cds-sidenav>\n </div>\n '})).bind({});SideNavigation.args={options:[{content:"Option 1",value:1},{content:"Option 2",value:2},{content:"Option 3",value:3}]},SideNavigation.argTypes={options:{control:!1}};const SideNavigationRouter=(args=>({props:args,template:'\n <div [cdsTheme]="theme">\n <cds-sidenav>\n <cds-sidenav-item [route]="[\'foo\']">\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-item [route]="[\'bar\']">\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-menu title="Category title">\n <svg cdsIcon="fade" icon size="16"></svg>\n <cds-sidenav-item [route]="[\'foo\']">Link</cds-sidenav-item>\n <cds-sidenav-item [route]="[\'bar\']">Link</cds-sidenav-item>\n <cds-sidenav-item [route]="[\'foo\']">Link</cds-sidenav-item>\n </cds-sidenav-menu>\n </cds-sidenav>\n </div>\n <div style="margin-left: 18rem">\n <router-outlet></router-outlet>\n </div>\n '})).bind({});SideNavigationRouter.storyName="Side Navigation with router";const SideNavigationUseRouter=(args=>({props:args,template:'\n <div [cdsTheme]="theme">\n <cds-sidenav>\n <cds-sidenav-item [route]="[\'foo\']" [useRouter]="true">\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-item [route]="[\'bar\']" [useRouter]="true" [routeExtras]="routeExtras">\n <svg cdsIcon="fade" size="16"></svg>\n Link with query params\n </cds-sidenav-item>\n <cds-sidenav-menu title="Category title">\n <svg cdsIcon="fade" icon size="16"></svg>\n <cds-sidenav-item [route]="[\'foo\']" [useRouter]="true">Link</cds-sidenav-item>\n <cds-sidenav-item [route]="[\'bar\']" [useRouter]="true">Link</cds-sidenav-item>\n <cds-sidenav-item [route]="[\'foo\']" [useRouter]="true">Link</cds-sidenav-item>\n </cds-sidenav-menu>\n </cds-sidenav>\n </div>\n <div style="margin-left: 256px">\n <router-outlet></router-outlet>\n </div>\n '})).bind({});SideNavigationUseRouter.storyName="Side Navigation with useRouter",SideNavigationUseRouter.args={routeExtras:{queryParams:{key:"value"}}};const SidePanel=(args=>({props:args,template:'\n <div [cdsTheme]="theme">\n <cds-panel expanded="true">\n <cds-switcher-list>\n <cds-switcher-list-item [route]="[\'foo\']">Switcher item one</cds-switcher-list-item>\n <cds-switcher-list-item [route]="[\'bar\']">Switcher item two</cds-switcher-list-item>\n <cds-switcher-list-item [route]="[\'foo\']">Switcher item three</cds-switcher-list-item>\n <cds-switcher-list-item [route]="[\'bar\']">Switcher item four</cds-switcher-list-item>\n </cds-switcher-list>\n </cds-panel>\n </div>\n <div>\n <router-outlet></router-outlet>\n </div>\n '})).bind({});SidePanel.storyName="Side Panel with router";const Together=(args=>({props:args,template:'\n <div>\n <cds-header name="[Platform]">\n <cds-hamburger *ngIf="hasHamburger" [active]="active" (selected)="active = !active"></cds-hamburger>\n <cds-header-navigation>\n <cds-header-item>Catalog</cds-header-item>\n <cds-header-item>Docs</cds-header-item>\n <cds-header-item>Support</cds-header-item>\n <cds-header-menu title="Manage">\n <cds-header-item>Link 1</cds-header-item>\n <cds-header-item>Link 2</cds-header-item>\n <cds-header-item>Link 3</cds-header-item>\n </cds-header-menu>\n </cds-header-navigation>\n <cds-header-global>\n <cds-header-action #firstAction description="action">\n <svg cdsIcon="fade" size="20"></svg>\n </cds-header-action>\n <cds-header-action [(active)]="secondAction" description="action">\n <svg cdsIcon="fade" size="20"></svg>\n </cds-header-action>\n </cds-header-global>\n </cds-header>\n <cds-sidenav [expanded]="active" style="margin-top: 3rem">\n <cds-sidenav-item>\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-item>\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-menu title="Category title">\n <svg cdsIcon="fade" size="16"></svg>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item [active]="hasActiveChild">Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n </cds-sidenav-menu>\n </cds-sidenav>\n <cds-panel [expanded]="firstAction.active"></cds-panel>\n <cds-panel [expanded]="secondAction">\n <cds-switcher-list>\n <cds-switcher-list-item active="true">Switcher item one</cds-switcher-list-item>\n <cds-switcher-list-item>Switcher item two</cds-switcher-list-item>\n <cds-switcher-list-item>Switcher item three</cds-switcher-list-item>\n <cds-switcher-list-item>Switcher item four</cds-switcher-list-item>\n </cds-switcher-list>\n </cds-panel>\n </div>\n '})).bind({});Together.args={hasHamburger:!0,active:!0,secondAction:!1,hasActiveChild:!0,options:[{content:"Option 1",value:1},{content:"Option 2",value:2},{content:"Option 3",value:3}]},Together.argTypes={options:{control:!1}};const SideNavigationRail=(args=>({props:args,template:'\n <div [cdsTheme]="theme">\n <cds-sidenav rail="true" [expanded]="false">\n <cds-sidenav-item>\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-item>\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-menu title="Category title">\n <svg cdsIcon="fade" icon size="16"></svg>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n </cds-sidenav-menu>\n </cds-sidenav>\n </div>\n '})).bind({});SideNavigationRail.args={options:[{content:"Option 1",value:1},{content:"Option 2",value:2},{content:"Option 3",value:3}]},SideNavigationRail.argTypes={options:{control:!1}};const WithModel=(args=>({props:args,template:'\n <div [cdsTheme]="theme">\n <cds-header name="[Platform]">\n <cds-hamburger *ngIf="hasHamburger" [active]="active" (selected)="active = !active"></cds-hamburger>\n <cds-header-navigation [navigationItems]="headerItems">\n </cds-header-navigation>\n <cds-header-global>\n <cds-header-action #firstAction description="action">\n <svg\n width="20"\n height="20"\n xmlns="http://www.w3.org/2000/svg"\n viewBox="0 0 32 32"\n aria-hidden="true">\n <path\n d="M8.24 25.14L7 26.67a14 14 0 0 0 4.18 2.44l.68-1.88a12\n 12 0 0 1-3.62-2.09zm-4.05-7.07l-2 .35A13.89 13.89 0 0 0 3.86\n 23l1.73-1a11.9 11.9 0 0 1-1.4-3.93zm7.63-13.31l-.68-1.88A14\n 14 0 0 0 7 5.33l1.24 1.53a12 12 0 0 1 3.58-2.1zM5.59\n 10L3.86 9a13.89 13.89 0 0 0-1.64 4.54l2 .35A11.9 11.9 0 0 1 5.59\n 10zM16 2v2a12 12 0 0 1 0 24v2a14 14 0 0 0 0-28z" />\n </svg>\n </cds-header-action>\n <cds-header-action #secondAction description="action">\n <svg\n width="20"\n height="20"\n xmlns="http://www.w3.org/2000/svg"\n viewBox="0 0 32 32"\n aria-hidden="true">\n <path\n d="M8.24 25.14L7 26.67a14 14 0 0 0 4.18 2.44l.68-1.88a12\n 12 0 0 1-3.62-2.09zm-4.05-7.07l-2 .35A13.89 13.89 0 0 0 3.86\n 23l1.73-1a11.9 11.9 0 0 1-1.4-3.93zm7.63-13.31l-.68-1.88A14\n 14 0 0 0 7 5.33l1.24 1.53a12 12 0 0 1 3.58-2.1zM5.59\n 10L3.86 9a13.89 13.89 0 0 0-1.64 4.54l2 .35A11.9 11.9 0 0 1 5.59\n 10zM16 2v2a12 12 0 0 1 0 24v2a14 14 0 0 0 0-28z" />\n </svg>\n </cds-header-action>\n </cds-header-global>\n </cds-header>\n <cds-sidenav [navigationItems]="headerItems" style="margin-top: 3rem">\n <cds-sidenav-menu title="Category title">\n <svg icon width="20" height="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" aria-hidden="true">\n <path\n d="M8.24 25.14L7 26.67a14 14 0 0 0 4.18 2.44l.68-1.88a12\n 12 0 0 1-3.62-2.09zm-4.05-7.07l-2 .35A13.89 13.89 0 0 0 3.86\n 23l1.73-1a11.9 11.9 0 0 1-1.4-3.93zm7.63-13.31l-.68-1.88A14\n 14 0 0 0 7 5.33l1.24 1.53a12 12 0 0 1 3.58-2.1zM5.59\n 10L3.86 9a13.89 13.89 0 0 0-1.64 4.54l2 .35A11.9 11.9 0 0 1 5.59\n 10zM16 2v2a12 12 0 0 1 0 24v2a14 14 0 0 0 0-28z" />\n </svg>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n </cds-sidenav-menu>\n </cds-sidenav>\n <cds-panel [expanded]="firstAction.active"></cds-panel>\n <cds-panel [expanded]="secondAction.active">\n <cds-switcher-list>\n <cds-switcher-list-item active="true">Switcher item one</cds-switcher-list-item>\n <cds-switcher-list-item>Switcher item two</cds-switcher-list-item>\n <cds-switcher-list-item>Switcher item three</cds-switcher-list-item>\n <cds-switcher-list-item>Switcher item four</cds-switcher-list-item>\n </cds-switcher-list>\n </cds-panel>\n </div>\n <router-outlet></router-outlet>\n '})).bind({});WithModel.args={options:[{content:"Option 1",value:1},{content:"Option 2",value:2},{content:"Option 3",value:3}],headerItems:[{type:"item",route:["foo"],content:"Catalog"},{type:"item",route:["bar"],content:"Docs"},{type:"item",route:["foo"],content:"Support"},{type:"menu",title:"Manage",trigger:"click",menuItems:[{type:"item",route:["foo"],content:"Link 1"},{type:"item",route:["bar"],content:"Link 2"}]}]},WithModel.argTypes={options:{control:!1},headerItems:{control:!1}};const AngularRouting=(args=>({props:args,template:'\n <div [cdsTheme]="theme">\n <cds-sidenav rail="true" [expanded]="false">\n <cds-sidenav-item>\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-item>\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-menu title="Category title">\n <svg cdsIcon="fade" icon size="16"></svg>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n </cds-sidenav-menu>\n </cds-sidenav>\n <div>\n '})).bind({});AngularRouting.storyName="Use angular router attributes for routing",Header.parameters={...Header.parameters,docs:{...Header.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <div [cdsTheme]="theme">\n <cds-header name="[Platform]">\n <cds-hamburger *ngIf="hasHamburger" (click)="expanded($event)"></cds-hamburger>\n <cds-header-navigation>\n <cds-header-item>Catalog</cds-header-item>\n <cds-header-item isCurrentPage="true">Docs</cds-header-item>\n <cds-header-item>Support</cds-header-item>\n <cds-header-menu title="Manage">\n <cds-header-item>Link 1</cds-header-item>\n <cds-header-item>Link 2</cds-header-item>\n <cds-header-item>Link 3</cds-header-item>\n </cds-header-menu>\n </cds-header-navigation>\n <cds-header-global>\n <cds-header-action description="action">\n <svg cdsIcon="fade" size="20"></svg>\n </cds-header-action>\n <cds-header-action description="action">\n <svg cdsIcon="fade" size="20"></svg>\n </cds-header-action>\n </cds-header-global>\n </cds-header>\n </div>\n `\n})',...Header.parameters?.docs?.source}}},HeaderFluid.parameters={...HeaderFluid.parameters,docs:{...HeaderFluid.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n \x3c!--\n app-* components are for demo purposes only.\n You can create your own implementation by using the component source found at:\n https://github.com/IBM/carbon-components-angular/tree/master/src/ui-shell/stories/header-fluid.component.ts\n --\x3e\n <app-header-fluid [headerItems]="headerItems"></app-header-fluid>\n `\n})',...HeaderFluid.parameters?.docs?.source}}},HeaderWithTemp.parameters={...HeaderWithTemp.parameters,docs:{...HeaderWithTemp.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <div [cdsTheme]="theme">\n <cds-header name="[Platform]" [brand]="brandTemplate">\n <cds-hamburger *ngIf="hasHamburger" (click)="expanded($event)"></cds-hamburger>\n <cds-header-navigation>\n <cds-header-item>Catalog</cds-header-item>\n <cds-header-item>Docs</cds-header-item>\n <cds-header-item>Support</cds-header-item>\n <cds-header-menu title="Manage">\n <cds-header-item>Link 1</cds-header-item>\n <cds-header-item>Link 2</cds-header-item>\n <cds-header-item>Link 3</cds-header-item>\n </cds-header-menu>\n </cds-header-navigation>\n <cds-header-global>\n <cds-header-action description="action">\n <svg cdsIcon="fade" size="20"></svg>\n </cds-header-action>\n <cds-header-action description="action">\n <svg cdsIcon="fade" size="20"></svg>\n </cds-header-action>\n </cds-header-global>\n </cds-header>\n </div>\n <ng-template #brandTemplate>\n <a class="cds--header__name">\n <svg cdsIcon="carbon" size="32" style="stroke:white;fill:white"></svg>\n <span class="cds--header__name--prefix">IBM</span>\n [Platform]\n </a>\n </ng-template>\n `\n})',...HeaderWithTemp.parameters?.docs?.source}}},HeaderWithRouter.parameters={...HeaderWithRouter.parameters,docs:{...HeaderWithRouter.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <div [cdsTheme]="theme">\n <cds-header name="[Platform]" [route]="[\'bar\']">\n <cds-header-navigation>\n <cds-header-item [route]="[\'foo\']">Catalog</cds-header-item>\n <cds-header-item [route]="[\'bar\']">Docs</cds-header-item>\n <cds-header-item [route]="[\'foo\']">Support</cds-header-item>\n <cds-header-menu title="Manage">\n <cds-header-item [route]="[\'foo\']">Link 1</cds-header-item>\n <cds-header-item [route]="[\'bar\']">Link 2</cds-header-item>\n <cds-header-item [route]="[\'foo\']">Link 3</cds-header-item>\n </cds-header-menu>\n </cds-header-navigation>\n </cds-header>\n </div>\n <div style="margin-top: 2rem">\n <router-outlet></router-outlet>\n </div>\n `\n})',...HeaderWithRouter.parameters?.docs?.source}}},SideNavigation.parameters={...SideNavigation.parameters,docs:{...SideNavigation.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <div [cdsTheme]="theme">\n <cds-sidenav>\n <cds-sidenav-item [active]="true">\n Link\n </cds-sidenav-item>\n <cds-sidenav-item>\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-menu title="Category title">\n <svg cdsIcon="fade" icon size="16"></svg>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n </cds-sidenav-menu>\n </cds-sidenav>\n </div>\n `\n})',...SideNavigation.parameters?.docs?.source}}},SideNavigationRouter.parameters={...SideNavigationRouter.parameters,docs:{...SideNavigationRouter.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <div [cdsTheme]="theme">\n <cds-sidenav>\n <cds-sidenav-item [route]="[\'foo\']">\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-item [route]="[\'bar\']">\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-menu title="Category title">\n <svg cdsIcon="fade" icon size="16"></svg>\n <cds-sidenav-item [route]="[\'foo\']">Link</cds-sidenav-item>\n <cds-sidenav-item [route]="[\'bar\']">Link</cds-sidenav-item>\n <cds-sidenav-item [route]="[\'foo\']">Link</cds-sidenav-item>\n </cds-sidenav-menu>\n </cds-sidenav>\n </div>\n <div style="margin-left: 18rem">\n <router-outlet></router-outlet>\n </div>\n `\n})',...SideNavigationRouter.parameters?.docs?.source}}},SideNavigationUseRouter.parameters={...SideNavigationUseRouter.parameters,docs:{...SideNavigationUseRouter.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <div [cdsTheme]="theme">\n <cds-sidenav>\n <cds-sidenav-item [route]="[\'foo\']" [useRouter]="true">\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-item [route]="[\'bar\']" [useRouter]="true" [routeExtras]="routeExtras">\n <svg cdsIcon="fade" size="16"></svg>\n Link with query params\n </cds-sidenav-item>\n <cds-sidenav-menu title="Category title">\n <svg cdsIcon="fade" icon size="16"></svg>\n <cds-sidenav-item [route]="[\'foo\']" [useRouter]="true">Link</cds-sidenav-item>\n <cds-sidenav-item [route]="[\'bar\']" [useRouter]="true">Link</cds-sidenav-item>\n <cds-sidenav-item [route]="[\'foo\']" [useRouter]="true">Link</cds-sidenav-item>\n </cds-sidenav-menu>\n </cds-sidenav>\n </div>\n <div style="margin-left: 256px">\n <router-outlet></router-outlet>\n </div>\n `\n})',...SideNavigationUseRouter.parameters?.docs?.source}}},SidePanel.parameters={...SidePanel.parameters,docs:{...SidePanel.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <div [cdsTheme]="theme">\n <cds-panel expanded="true">\n <cds-switcher-list>\n <cds-switcher-list-item [route]="[\'foo\']">Switcher item one</cds-switcher-list-item>\n <cds-switcher-list-item [route]="[\'bar\']">Switcher item two</cds-switcher-list-item>\n <cds-switcher-list-item [route]="[\'foo\']">Switcher item three</cds-switcher-list-item>\n <cds-switcher-list-item [route]="[\'bar\']">Switcher item four</cds-switcher-list-item>\n </cds-switcher-list>\n </cds-panel>\n </div>\n <div>\n <router-outlet></router-outlet>\n </div>\n `\n})',...SidePanel.parameters?.docs?.source}}},Together.parameters={...Together.parameters,docs:{...Together.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <div>\n <cds-header name="[Platform]">\n <cds-hamburger *ngIf="hasHamburger" [active]="active" (selected)="active = !active"></cds-hamburger>\n <cds-header-navigation>\n <cds-header-item>Catalog</cds-header-item>\n <cds-header-item>Docs</cds-header-item>\n <cds-header-item>Support</cds-header-item>\n <cds-header-menu title="Manage">\n <cds-header-item>Link 1</cds-header-item>\n <cds-header-item>Link 2</cds-header-item>\n <cds-header-item>Link 3</cds-header-item>\n </cds-header-menu>\n </cds-header-navigation>\n <cds-header-global>\n <cds-header-action #firstAction description="action">\n <svg cdsIcon="fade" size="20"></svg>\n </cds-header-action>\n <cds-header-action [(active)]="secondAction" description="action">\n <svg cdsIcon="fade" size="20"></svg>\n </cds-header-action>\n </cds-header-global>\n </cds-header>\n <cds-sidenav [expanded]="active" style="margin-top: 3rem">\n <cds-sidenav-item>\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-item>\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-menu title="Category title">\n <svg cdsIcon="fade" size="16"></svg>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item [active]="hasActiveChild">Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n </cds-sidenav-menu>\n </cds-sidenav>\n <cds-panel [expanded]="firstAction.active"></cds-panel>\n <cds-panel [expanded]="secondAction">\n <cds-switcher-list>\n <cds-switcher-list-item active="true">Switcher item one</cds-switcher-list-item>\n <cds-switcher-list-item>Switcher item two</cds-switcher-list-item>\n <cds-switcher-list-item>Switcher item three</cds-switcher-list-item>\n <cds-switcher-list-item>Switcher item four</cds-switcher-list-item>\n </cds-switcher-list>\n </cds-panel>\n </div>\n `\n})',...Together.parameters?.docs?.source}}},SideNavigationRail.parameters={...SideNavigationRail.parameters,docs:{...SideNavigationRail.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <div [cdsTheme]="theme">\n <cds-sidenav rail="true" [expanded]="false">\n <cds-sidenav-item>\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-item>\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-menu title="Category title">\n <svg cdsIcon="fade" icon size="16"></svg>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n </cds-sidenav-menu>\n </cds-sidenav>\n </div>\n `\n})',...SideNavigationRail.parameters?.docs?.source}}},WithModel.parameters={...WithModel.parameters,docs:{...WithModel.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <div [cdsTheme]="theme">\n <cds-header name="[Platform]">\n <cds-hamburger *ngIf="hasHamburger" [active]="active" (selected)="active = !active"></cds-hamburger>\n <cds-header-navigation [navigationItems]="headerItems">\n </cds-header-navigation>\n <cds-header-global>\n <cds-header-action #firstAction description="action">\n <svg\n width="20"\n height="20"\n xmlns="http://www.w3.org/2000/svg"\n viewBox="0 0 32 32"\n aria-hidden="true">\n <path\n d="M8.24 25.14L7 26.67a14 14 0 0 0 4.18 2.44l.68-1.88a12\n 12 0 0 1-3.62-2.09zm-4.05-7.07l-2 .35A13.89 13.89 0 0 0 3.86\n 23l1.73-1a11.9 11.9 0 0 1-1.4-3.93zm7.63-13.31l-.68-1.88A14\n 14 0 0 0 7 5.33l1.24 1.53a12 12 0 0 1 3.58-2.1zM5.59\n 10L3.86 9a13.89 13.89 0 0 0-1.64 4.54l2 .35A11.9 11.9 0 0 1 5.59\n 10zM16 2v2a12 12 0 0 1 0 24v2a14 14 0 0 0 0-28z" />\n </svg>\n </cds-header-action>\n <cds-header-action #secondAction description="action">\n <svg\n width="20"\n height="20"\n xmlns="http://www.w3.org/2000/svg"\n viewBox="0 0 32 32"\n aria-hidden="true">\n <path\n d="M8.24 25.14L7 26.67a14 14 0 0 0 4.18 2.44l.68-1.88a12\n 12 0 0 1-3.62-2.09zm-4.05-7.07l-2 .35A13.89 13.89 0 0 0 3.86\n 23l1.73-1a11.9 11.9 0 0 1-1.4-3.93zm7.63-13.31l-.68-1.88A14\n 14 0 0 0 7 5.33l1.24 1.53a12 12 0 0 1 3.58-2.1zM5.59\n 10L3.86 9a13.89 13.89 0 0 0-1.64 4.54l2 .35A11.9 11.9 0 0 1 5.59\n 10zM16 2v2a12 12 0 0 1 0 24v2a14 14 0 0 0 0-28z" />\n </svg>\n </cds-header-action>\n </cds-header-global>\n </cds-header>\n <cds-sidenav [navigationItems]="headerItems" style="margin-top: 3rem">\n <cds-sidenav-menu title="Category title">\n <svg icon width="20" height="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" aria-hidden="true">\n <path\n d="M8.24 25.14L7 26.67a14 14 0 0 0 4.18 2.44l.68-1.88a12\n 12 0 0 1-3.62-2.09zm-4.05-7.07l-2 .35A13.89 13.89 0 0 0 3.86\n 23l1.73-1a11.9 11.9 0 0 1-1.4-3.93zm7.63-13.31l-.68-1.88A14\n 14 0 0 0 7 5.33l1.24 1.53a12 12 0 0 1 3.58-2.1zM5.59\n 10L3.86 9a13.89 13.89 0 0 0-1.64 4.54l2 .35A11.9 11.9 0 0 1 5.59\n 10zM16 2v2a12 12 0 0 1 0 24v2a14 14 0 0 0 0-28z" />\n </svg>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n </cds-sidenav-menu>\n </cds-sidenav>\n <cds-panel [expanded]="firstAction.active"></cds-panel>\n <cds-panel [expanded]="secondAction.active">\n <cds-switcher-list>\n <cds-switcher-list-item active="true">Switcher item one</cds-switcher-list-item>\n <cds-switcher-list-item>Switcher item two</cds-switcher-list-item>\n <cds-switcher-list-item>Switcher item three</cds-switcher-list-item>\n <cds-switcher-list-item>Switcher item four</cds-switcher-list-item>\n </cds-switcher-list>\n </cds-panel>\n </div>\n <router-outlet></router-outlet>\n `\n})',...WithModel.parameters?.docs?.source}}},AngularRouting.parameters={...AngularRouting.parameters,docs:{...AngularRouting.parameters?.docs,source:{originalSource:'args => ({\n props: args,\n template: `\n <div [cdsTheme]="theme">\n <cds-sidenav rail="true" [expanded]="false">\n <cds-sidenav-item>\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-item>\n <svg cdsIcon="fade" size="16"></svg>\n Link\n </cds-sidenav-item>\n <cds-sidenav-menu title="Category title">\n <svg cdsIcon="fade" icon size="16"></svg>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n <cds-sidenav-item>Link</cds-sidenav-item>\n </cds-sidenav-menu>\n </cds-sidenav>\n <div>\n `\n})',...AngularRouting.parameters?.docs?.source}}};const __namedExportsOrder=["Header","HeaderFluid","HeaderWithTemp","HeaderWithRouter","SideNavigation","SideNavigationRouter","SideNavigationUseRouter","SidePanel","Together","SideNavigationRail","WithModel","AngularRouting"]},"./src/search/search.component.html?ngResource":module=>{module.exports='<div\n\tclass="cds--search"\n\t[ngClass]="{\n\t\t\'cds--search--sm\': size === \'sm\',\n\t\t\'cds--search--md\': size === \'md\',\n\t\t\'cds--search--lg\': size === \'lg\',\n\t\t\'cds--search--light\': theme === \'light\',\n\t\t\'cds--skeleton\': skeleton && !fluid,\n\t\t\'cds--search--expandable\': expandable && !tableSearch,\n\t\t\'cds--search--expanded\': expandable && !tableSearch && active,\n\t\t\'cds--toolbar-search\': toolbar && !expandable,\n\t\t\'cds--toolbar-search--active\': toolbar && !expandable && active,\n\t\t\'cds--toolbar-search-container-persistent\': tableSearch && !expandable,\n\t\t\'cds--toolbar-search-container-expandable\': tableSearch && expandable,\n\t\t\'cds--toolbar-search-container-active\': tableSearch && expandable && active,\n\t\t\'cds--search--fluid\': fluid,\n\t\t\'cds--search--disabled\': disabled\n\t}"\n\trole="search"\n\t[attr.aria-label]="ariaLabel"\n\t(click)="openSearch()">\n\t<label\n\t\tclass="cds--label"\n\t\t[for]="id"\n\t\t[ngClass]="{ \'cds--skeleton\': skeleton && fluid }">\n\t\t{{ !skeleton ? label : \'\'}}\n\t</label>\n\n\t<div *ngIf="skeleton; else enableInput" class="cds--text-input cds--skeleton"></div>\n\t<ng-template #enableInput>\n\t\t<input\n\t\t\t#input\n\t\t\tclass="cds--search-input"\n\t\t\t[type]="tableSearch || !toolbar ? \'text\' : \'search\'"\n\t\t\t[id]="id"\n\t\t\t[value]="value"\n\t\t\t[autocomplete]="autocomplete"\n\t\t\t[placeholder]="placeholder"\n\t\t\t[disabled]="disabled"\n\t\t\t[required]="required"\n\t\t\t(input)="onSearch($event.target.value)"\n\t\t\t(keyup.enter)="onEnter()"/>\n\t\t<button\n\t\t\t*ngIf="!tableSearch && toolbar"\n\t\t\tclass="cds--toolbar-search__btn"\n\t\t\t(click)="openSearch()"\n\t\t\taria-label="Open search">\n\t\t\t<svg cdsIcon="search" size="16" class="cds--search-magnifier-icon"></svg>\n\t\t</button>\n\t\t<svg\n\t\t\tcdsIcon="search"\n\t\t\t*ngIf="tableSearch || !toolbar"\n\t\t\tclass="cds--search-magnifier-icon"\n\t\t\tsize="16">\n\t\t</svg>\n\t</ng-template>\n\n\t<button\n\t\t*ngIf="tableSearch || !toolbar"\n\t\tclass="cds--search-close"\n\t\t[ngClass]="{\n\t\t\t\'cds--search-close--hidden\': !value || value.length === 0\n\t\t}"\n\t\t[title]="clearButtonTitle"\n\t\t(click)="clearSearch()">\n\t\t<span class="cds--visually-hidden">{{ clearButtonTitle }}</span>\n\t\t<svg cdsIcon="close" size="16"></svg>\n\t</button>\n</div>\n'}}]);
@@ -1068,4 +1068,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
1068
1068
  type: HostListener,
1069
1069
  args: ["keydown", ["$event"]]
1070
1070
  }] } });
1071
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixTQUFTLEVBQ1QsWUFBWSxFQUdaLFdBQVcsRUFDWCxXQUFXLEVBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFtQixNQUFNLG9DQUFvQyxDQUFDO0FBRTNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7QUFJekM7Ozs7Ozs7Ozs7O0dBV0c7QUFvS0gsTUFBTSxPQUFPLFFBQVE7SUE4UXBCOztPQUVHO0lBQ0gsWUFDVyxVQUFzQixFQUN0QixlQUFnQyxFQUNoQyxJQUFVO1FBRlYsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsU0FBSSxHQUFKLElBQUksQ0FBTTtRQTVNWixPQUFFLEdBQUcsWUFBWSxRQUFRLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztRQUM1QyxZQUFPLEdBQUcsa0JBQWtCLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBQ2hFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBeUJHO1FBQ00sVUFBSyxHQUFvQixFQUFFLENBQUM7UUFDckM7O1dBRUc7UUFDTSxTQUFJLEdBQXVCLFFBQVEsQ0FBQztRQUM3Qzs7V0FFRztRQUNNLFNBQUksR0FBdUIsSUFBSSxDQUFDO1FBU3pDOztXQUVHO1FBQ00sY0FBUyxHQUFH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c0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRPbkNoYW5nZXMsXG5cdENvbnRlbnRDaGlsZCxcblx0SW5wdXQsXG5cdE91dHB1dCxcblx0SG9zdExpc3RlbmVyLFxuXHRFbGVtZW50UmVmLFxuXHRWaWV3Q2hpbGQsXG5cdEV2ZW50RW1pdHRlcixcblx0QWZ0ZXJWaWV3SW5pdCxcblx0QWZ0ZXJDb250ZW50SW5pdCxcblx0SG9zdEJpbmRpbmcsXG5cdFRlbXBsYXRlUmVmLFxuXHRPbkRlc3Ryb3lcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFic3RyYWN0RHJvcGRvd25WaWV3LCBEcm9wZG93blNlcnZpY2UgfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9kcm9wZG93blwiO1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9kcm9wZG93blwiO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHtcblx0Z2V0U2Nyb2xsYWJsZVBhcmVudHMsXG5cdGhhc1Njcm9sbGFibGVQYXJlbnRzXG59IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL3V0aWxzXCI7XG5pbXBvcnQgeyBJMThuLCBPdmVycmlkYWJsZSB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL2kxOG5cIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuXG4vKipcbiAqIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQ29tYm9Cb3hNb2R1bGUgfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbiAqIGBgYFxuICpcbiAqIENvbWJvQm94ZXMgYXJlIHNpbWlsYXIgdG8gZHJvcGRvd25zLCBleGNlcHQgYSBjb21ib2JveCBwcm92aWRlcyBhbiBpbnB1dCBmaWVsZCBmb3IgdXNlcnMgdG8gc2VhcmNoIGl0ZW1zIGFuZCAob3B0aW9uYWxseSkgYWRkIHRoZWlyIG93bi5cbiAqIE11bHRpLXNlbGVjdCBjb21ib2JveGVzIGFsc28gcHJvdmlkZSBcInBpbGxzXCIgb2Ygc2VsZWN0ZWQgaXRlbXMuXG4gKlxuICogW1NlZSBkZW1vXSguLi8uLi8/cGF0aD0vc3RvcnkvY29tcG9uZW50cy1jb21ib2JveC0tYmFzaWMpXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJjZHMtY29tYm8tYm94LCBpYm0tY29tYm8tYm94XCIsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X193cmFwcGVyXCJcblx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0J2Nkcy0tbGlzdC1ib3hfX3dyYXBwZXItLWZsdWlkJzogZmx1aWQsXG5cdFx0XHRcdCdjZHMtLWxpc3QtYm94X193cmFwcGVyLS1mbHVpZC0taW52YWxpZCc6IGZsdWlkICYmIGludmFsaWQsXG5cdFx0XHRcdCdjZHMtLWxpc3QtYm94X193cmFwcGVyLS1mbHVpZC0tZm9jdXMnOiBmbHVpZCAmJiBfaXNGb2N1c2VkXG5cdFx0XHR9XCI+XG5cdFx0XHQ8bGFiZWxcblx0XHRcdFx0Km5nSWY9XCJsYWJlbFwiXG5cdFx0XHRcdFtmb3JdPVwiaWRcIlxuXHRcdFx0XHRbaWRdPVwibGFiZWxJZFwiXG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1sYWJlbFwiXG5cdFx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0XHQnY2RzLS1sYWJlbC0tZGlzYWJsZWQnOiBkaXNhYmxlZCxcblx0XHRcdFx0XHQnY2RzLS12aXN1YWxseS1oaWRkZW4nOiBoaWRlTGFiZWxcblx0XHRcdFx0fVwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUobGFiZWwpXCI+e3tsYWJlbH19PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUobGFiZWwpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0PC9sYWJlbD5cblx0XHRcdDxkaXZcblx0XHRcdFx0I2xpc3Rib3hcblx0XHRcdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0XHRcdCdjZHMtLW11bHRpLXNlbGVjdCBjZHMtLW11bHRpLXNlbGVjdC0tZmlsdGVyYWJsZSc6IHR5cGUgPT09ICdtdWx0aScsXG5cdFx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWxpZ2h0JzogdGhlbWUgPT09ICdsaWdodCcsXG5cdFx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWV4cGFuZGVkJzogb3Blbixcblx0XHRcdFx0XHQnY2RzLS1saXN0LWJveC0tc20nOiBzaXplID09PSAnc20nLFxuXHRcdFx0XHRcdCdjZHMtLWxpc3QtYm94LS1tZCc6IHNpemUgPT09ICdtZCcsXG5cdFx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWxnJzogc2l6ZSA9PT0gJ2xnJyxcblx0XHRcdFx0XHQnY2RzLS1saXN0LWJveC0tZGlzYWJsZWQnOiBkaXNhYmxlZCxcblx0XHRcdFx0XHQnY2RzLS1jb21iby1ib3gtLXJlYWRvbmx5JzogcmVhZG9ubHksXG5cdFx0XHRcdFx0J2Nkcy0tY29tYm8tYm94LS13YXJuaW5nIGNkcy0tbGlzdC1ib3gtLXdhcm5pbmcnOiB3YXJuLFxuXHRcdFx0XHRcdCdjZHMtLWxpc3QtYm94LS1pbnZhbGlkJzogaW52YWxpZFxuXHRcdFx0XHR9XCJcblx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94IGNkcy0tY29tYm8tYm94XCJcblx0XHRcdFx0W2F0dHIuZGF0YS1pbnZhbGlkXT1cIihpbnZhbGlkID8gdHJ1ZSA6IG51bGwpXCI+XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hfX2ZpZWxkXCJcblx0XHRcdFx0XHQoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKVwiXG5cdFx0XHRcdFx0KGJsdXIpPVwib25CbHVyKClcIj5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHQqbmdJZj1cInR5cGUgPT09ICdtdWx0aScgJiYgcGlsbHMubGVuZ3RoID4gMFwiXG5cdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tdGFnIGNkcy0tdGFnLS1maWx0ZXIgY2RzLS10YWctLWhpZ2gtY29udHJhc3RcIlxuXHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwieydjZHMtLXRhZy0tZGlzYWJsZWQnOiBkaXNhYmxlZCB8fCByZWFkb25seX1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiY2RzLS10YWdfX2xhYmVsXCI+e3sgcGlsbHMubGVuZ3RoIH19PC9zcGFuPlxuXHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNsZWFyU2VsZWN0ZWQoJGV2ZW50KVwiXG5cdFx0XHRcdFx0XHRcdChibHVyKT1cIm9uQmx1cigpXCJcblx0XHRcdFx0XHRcdFx0KGtleWRvd24uZW50ZXIpPVwiY2xlYXJTZWxlY3RlZCgkZXZlbnQpXCJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLXRhZ19fY2xvc2UtaWNvblwiXG5cdFx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMFwiXG5cdFx0XHRcdFx0XHRcdFt0aXRsZV09XCJjbGVhclNlbGVjdGlvbnNUaXRsZVwiXG5cdFx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCByZWFkb25seVwiXG5cdFx0XHRcdFx0XHRcdFthdHRyLmFyaWEtbGFiZWxdPVwiY2xlYXJTZWxlY3Rpb25BcmlhXCI+XG5cdFx0XHRcdFx0XHRcdDxzdmdcblx0XHRcdFx0XHRcdFx0XHRmb2N1c2FibGU9XCJmYWxzZVwiXG5cdFx0XHRcdFx0XHRcdFx0cHJlc2VydmVBc3BlY3RSYXRpbz1cInhNaWRZTWlkIG1lZXRcIlxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwid2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcIlxuXHRcdFx0XHRcdFx0XHRcdHJvbGU9XCJpbWdcIlxuXHRcdFx0XHRcdFx0XHRcdHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuXHRcdFx0XHRcdFx0XHRcdHdpZHRoPVwiMTZcIlxuXHRcdFx0XHRcdFx0XHRcdGhlaWdodD1cIjE2XCJcblx0XHRcdFx0XHRcdFx0XHR2aWV3Qm94PVwiMCAwIDE2IDE2XCJcblx0XHRcdFx0XHRcdFx0XHRhcmlhLWhpZGRlbj1cInRydWVcIj5cblx0XHRcdFx0XHRcdFx0XHQ8cGF0aCBkPVwiTTEyIDQuN2wtLjctLjdMOCA3LjMgNC43IDRsLS43LjdMNy4zIDggNCAxMS4zbC43LjdMOCA4LjdsMy4zIDMuMy43LS43TDguNyA4elwiPjwvcGF0aD5cblx0XHRcdFx0XHRcdFx0PC9zdmc+XG5cdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8aW5wdXRcblx0XHRcdFx0XHRcdCNpbnB1dFxuXHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdFx0YXV0b2NvbXBsZXRlPVwib2ZmXCJcblx0XHRcdFx0XHRcdHJvbGU9XCJjb21ib2JveFwiXG5cdFx0XHRcdFx0XHRbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuXHRcdFx0XHRcdFx0W3JlYWRPbmx5XT1cInJlYWRvbmx5XCJcblx0XHRcdFx0XHRcdChpbnB1dCk9XCJvblNlYXJjaCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG5cdFx0XHRcdFx0XHQoZm9jdXMpPVwiZmx1aWQgPyBoYW5kbGVGb2N1cygkZXZlbnQpIDogbnVsbFwiXG5cdFx0XHRcdFx0XHQoYmx1cik9XCJmbHVpZCA/IGhhbmRsZUZvY3VzKCRldmVudCkgOiBvbkJsdXIoKVwiXG5cdFx0XHRcdFx0XHQoa2V5ZG93bi5lbnRlcik9XCJvblN1Ym1pdCgkZXZlbnQpXCJcblx0XHRcdFx0XHRcdFt2YWx1ZV09XCJzZWxlY3RlZFZhbHVlXCJcblx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS10ZXh0LWlucHV0XCJcblx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS10ZXh0LWlucHV0LS1lbXB0eSc6ICFzaG93Q2xlYXJCdXR0b259XCJcblx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMFwiXG5cdFx0XHRcdFx0XHRbaWRdPVwiaWRcIlxuXHRcdFx0XHRcdFx0W2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsSWRcIlxuXHRcdFx0XHRcdFx0W2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuXCJcblx0XHRcdFx0XHRcdGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcblx0XHRcdFx0XHRcdFthdHRyLm1heGxlbmd0aF09XCJtYXhMZW5ndGhcIlxuXHRcdFx0XHRcdFx0W2F0dHIuYXJpYS1jb250cm9sc109XCJvcGVuID8gdmlldz8ubGlzdElkIDogbnVsbFwiXG5cdFx0XHRcdFx0XHRbYXR0ci5hcmlhLWF1dG9jb21wbGV0ZV09XCJhdXRvY29tcGxldGVcIlxuXHRcdFx0XHRcdFx0W3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIvPlxuXHRcdFx0XHRcdDxzdmdcblx0XHRcdFx0XHRcdCpuZ0lmPVwiaW52YWxpZFwiXG5cdFx0XHRcdFx0XHRjZHNJY29uPVwid2FybmluZy0tZmlsbGVkXCJcblx0XHRcdFx0XHRcdHNpemU9XCIxNlwiXG5cdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hfX2ludmFsaWQtaWNvblwiPlxuXHRcdFx0XHRcdDwvc3ZnPlxuXHRcdFx0XHRcdDxzdmdcblx0XHRcdFx0XHRcdCpuZ0lmPVwiIWludmFsaWQgJiYgd2FyblwiXG5cdFx0XHRcdFx0XHRjZHNJY29uPVwid2FybmluZy0tYWx0LS1maWxsZWRcIlxuXHRcdFx0XHRcdFx0c2l6ZT1cIjE2XCJcblx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveF9faW52YWxpZC1pY29uIGNkcy0tbGlzdC1ib3hfX2ludmFsaWQtaWNvbi0td2FybmluZ1wiPlxuXHRcdFx0XHRcdDwvc3ZnPlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdCpuZ0lmPVwic2hvd0NsZWFyQnV0dG9uXCJcblx0XHRcdFx0XHRcdHJvbGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19zZWxlY3Rpb25cIlxuXHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIwXCJcblx0XHRcdFx0XHRcdFthdHRyLmFyaWEtbGFiZWxdPVwiY2xlYXJTZWxlY3Rpb25BcmlhXCJcblx0XHRcdFx0XHRcdFt0aXRsZV09XCJjbGVhclNlbGVjdGlvblRpdGxlXCJcblx0XHRcdFx0XHRcdChrZXl1cC5lbnRlcik9XCJjbGVhcklucHV0KCRldmVudClcIlxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cImNsZWFySW5wdXQoJGV2ZW50KVwiXG5cdFx0XHRcdFx0XHQoYmx1cik9XCJvbkJsdXIoKVwiPlxuXHRcdFx0XHRcdFx0PHN2ZyBjZHNJY29uPVwiY2xvc2VcIiBzaXplPVwiMTZcIj48L3N2Zz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdHJvbGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19tZW51LWljb25cIlxuXHRcdFx0XHRcdFx0dGFiaW5kZXg9XCItMVwiXG5cdFx0XHRcdFx0XHRbdGl0bGVdPVwib3BlbiA/IGNsb3NlTWVudUFyaWEgOiBvcGVuTWVudUFyaWFcIlxuXHRcdFx0XHRcdFx0W2F0dHIuYXJpYS1sYWJlbF09XCJvcGVuID8gY2xvc2VNZW51QXJpYSA6IG9wZW5NZW51QXJpYVwiXG5cdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7J2Nkcy0tbGlzdC1ib3hfX21lbnUtaWNvbi0tb3Blbic6IG9wZW59XCI+XG5cdFx0XHRcdFx0XHQ8c3ZnIGNkc0ljb249XCJjaGV2cm9uLS1kb3duXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG5cdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0I2Ryb3Bkb3duTWVudVxuXHRcdFx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0XHRcdCdjZHMtLWxpc3QtYm94LS11cCc6IHRoaXMuZHJvcFVwICE9PSBudWxsICYmIHRoaXMuZHJvcFVwICE9PSB1bmRlZmluZWQgPyBkcm9wVXAgOiBfZHJvcFVwXG5cdFx0XHRcdFx0fVwiPlxuXHRcdFx0XHRcdDxuZy1jb250ZW50ICpuZ0lmPVwib3BlblwiPjwvbmctY29udGVudD5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxociAqbmdJZj1cImZsdWlkXCIgY2xhc3M9XCJjZHMtLWxpc3QtYm94X19kaXZpZGVyXCIgLz5cblx0XHRcdDxkaXZcblx0XHRcdFx0Km5nSWY9XCJoZWxwZXJUZXh0ICYmICFpbnZhbGlkICYmICF3YXJuICYmICFmbHVpZFwiXG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1mb3JtX19oZWxwZXItdGV4dFwiXG5cdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1mb3JtX19oZWxwZXItdGV4dC0tZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKGhlbHBlclRleHQpXCI+e3toZWxwZXJUZXh0fX08L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShoZWxwZXJUZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlbHBlclRleHRcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2ICpuZ0lmPVwiaW52YWxpZFwiIGNsYXNzPVwiY2RzLS1mb3JtLXJlcXVpcmVtZW50XCI+XG5cdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShpbnZhbGlkVGV4dClcIj57eyBpbnZhbGlkVGV4dCB9fTwvbmctY29udGFpbmVyPlxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGludmFsaWRUZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImludmFsaWRUZXh0XCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiAqbmdJZj1cIiFpbnZhbGlkICYmIHdhcm5cIiBjbGFzcz1cImNkcy0tZm9ybS1yZXF1aXJlbWVudFwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUod2FyblRleHQpXCI+e3t3YXJuVGV4dH19PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUod2FyblRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwid2FyblRleHRcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdGAsXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IENvbWJvQm94LFxuXHRcdFx0bXVsdGk6IHRydWVcblx0XHR9XG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgQ29tYm9Cb3ggaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG5cdC8qKlxuXHQgKiBUZXh0IHRvIHNob3cgd2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkLlxuXHQgKi9cblx0QElucHV0KCkgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9wbGFjZWhvbGRlci5vdmVycmlkZSh2YWx1ZSk7XG5cdH1cblxuXHRnZXQgcGxhY2Vob2xkZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyLnZhbHVlO1xuXHR9XG5cdC8qKlxuXHQgKiBWYWx1ZSB0byBkaXNwbGF5IGZvciBhY2Nlc3NpYmlsaXR5IHB1cnBvc2VzIG9uIHRoZSBjb21ib2JveCBjb250cm9sIG1lbnUgd2hlbiBjbG9zZWRcblx0ICovXG5cdEBJbnB1dCgpIHNldCBvcGVuTWVudUFyaWEodmFsdWU6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPikge1xuXHRcdHRoaXMuX29wZW5NZW51QXJpYS5vdmVycmlkZSh2YWx1ZSk7XG5cdH1cblxuXHRnZXQgb3Blbk1lbnVBcmlhKCkge1xuXHRcdHJldHVybiB0aGlzLl9vcGVuTWVudUFyaWEudmFsdWU7XG5cdH1cblx0LyoqXG5cdCAqIFZhbHVlIHRvIGRpc3BsYXkgZm9yIGFjY2Vzc2liaWxpdHkgcHVycG9zZXMgb24gdGhlIGNvbWJvYm94IGNvbnRyb2wgbWVudSB3aGVuIG9wZW5lZFxuXHQgKi9cblx0QElucHV0KCkgc2V0IGNsb3NlTWVudUFyaWEodmFsdWU6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPikge1xuXHRcdHRoaXMuX2Nsb3NlTWVudUFyaWEub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IGNsb3NlTWVudUFyaWEoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nsb3NlTWVudUFyaWEudmFsdWU7XG5cdH1cblx0LyoqXG5cdCAqIFZhbHVlIHRvIGRpc3BsYXkgb24gdGhlIGNsZWFyIHNlbGVjdGlvbnMgaWNvbiwgd2hlbiBtdWx0aSBpcyBzZWxlY3RlZFxuXHQgKi9cblx0QElucHV0KCkgc2V0IGNsZWFyU2VsZWN0aW9uc1RpdGxlKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9jbGVhclNlbGVjdGlvbnNUaXRsZS5vdmVycmlkZSh2YWx1ZSk7XG5cdH1cblxuXHRnZXQgY2xlYXJTZWxlY3Rpb25zVGl0bGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NsZWFyU2VsZWN0aW9uc1RpdGxlLnZhbHVlO1xuXHR9XG5cdC8qKlxuXHQgKiBWYWx1ZSB0byBkaXNwbGF5IGZvciBhY2Nlc3NpYmlsaXR5IHB1cnBvc2VzIHRvIGNsZWFyIHNlbGVjdGlvbnMsIHdoZW4gbXVsdGkgaXMgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIHNldCBjbGVhclNlbGVjdGlvbnNBcmlhKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9jbGVhclNlbGVjdGlvbnNBcmlhLm92ZXJyaWRlKHZhbHVlKTtcblx0fVxuXG5cdGdldCBjbGVhclNlbGVjdGlvbnNBcmlhKCkge1xuXHRcdHJldHVybiB0aGlzLl9jbGVhclNlbGVjdGlvbnNBcmlhLnZhbHVlO1xuXHR9XG5cdC8qKlxuXHQgKiBWYWx1ZSB0byBkaXNwbGF5IG9uIHRoZSBjbGVhciB0aGUgc2VsZWN0ZWQgaXRlbSBpY29uLCB3aGVuIHNpbmdsZSBpcyBzZWxlY3RlZFxuXHQgKi9cblx0QElucHV0KCkgc2V0IGNsZWFyU2VsZWN0aW9uVGl0bGUodmFsdWU6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPikge1xuXHRcdHRoaXMuX2NsZWFyU2VsZWN0aW9uVGl0bGUub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IGNsZWFyU2VsZWN0aW9uVGl0bGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NsZWFyU2VsZWN0aW9uVGl0bGUudmFsdWU7XG5cdH1cblx0LyoqXG5cdCAqIFZhbHVlIHRvIGRpc3BsYXkgZm9yIGFjY2Vzc2liaWxpdHkgcHVycG9zZXMgb24gdGhlIGNsZWFyIHRoZSBzZWxlY3RlZCBpdGVtIGljb24sIHdoZW4gc2luZ2xlIGlzIHNlbGVjdGVkXG5cdCAqL1xuXHRASW5wdXQoKSBzZXQgY2xlYXJTZWxlY3Rpb25BcmlhKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9jbGVhclNlbGVjdGlvbkFyaWEub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IGNsZWFyU2VsZWN0aW9uQXJpYSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2xlYXJTZWxlY3Rpb25BcmlhLnZhbHVlO1xuXHR9XG5cdHN0YXRpYyBjb21ib0JveENvdW50ID0gMDtcblx0QElucHV0KCkgaWQgPSBgY29tYm9ib3gtJHtDb21ib0JveC5jb21ib0JveENvdW50Kyt9YDtcblx0QElucHV0KCkgbGFiZWxJZCA9IGBjb21ib2JveC1sYWJlbC0ke0NvbWJvQm94LmNvbWJvQm94Q291bnQrK31gO1xuXHQvKipcblx0ICogTGlzdCBvZiBpdGVtcyB0byBmaWxsIHRoZSBjb250ZW50IHdpdGguXG5cdCAqXG5cdCAqICoqRXhhbXBsZToqKlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIGl0ZW1zID0gW1xuXHQgKlx0XHR7XG5cdCAqXHRcdFx0Y29udGVudDogXCJBYmFjdXNcIixcblx0ICpcdFx0XHRzZWxlY3RlZDogZmFsc2Vcblx0ICpcdFx0fSxcblx0ICpcdFx0e1xuXHQgKlx0XHRcdGNvbnRlbnQ6IFwiQnl0ZVwiLFxuXHQgKlx0XHRcdHNlbGVjdGVkOiBmYWxzZSxcblx0ICpcdFx0fSxcblx0ICpcdFx0e1xuXHQgKlx0XHRcdGNvbnRlbnQ6IFwiQ29tcHV0ZXJcIixcblx0ICpcdFx0XHRzZWxlY3RlZDogZmFsc2Vcblx0ICpcdFx0fSxcblx0ICpcdFx0e1xuXHQgKlx0XHRcdGNvbnRlbnQ6IFwiRGlnaXRhbFwiLFxuXHQgKlx0XHRcdHNlbGVjdGVkOiBmYWxzZVxuXHQgKlx0XHR9XG5cdCAqIF07XG5cdCAqIGBgYFxuXHQgKlxuXHQgKi9cblx0QElucHV0KCkgaXRlbXM6IEFycmF5PExpc3RJdGVtPiA9IFtdO1xuXHQvKipcblx0ICogQ29tYm8gYm94IHR5cGUgKHN1cHBvcnRpbmcgc2luZ2xlIG9yIG11bHRpIHNlbGVjdGlvbiBvZiBpdGVtcykuXG5cdCAqL1xuXHRASW5wdXQoKSB0eXBlOiBcInNpbmdsZVwiIHwgXCJtdWx0aVwiID0gXCJzaW5nbGVcIjtcblx0LyoqXG5cdCAqIENvbWJvIGJveCByZW5kZXIgc2l6ZS5cblx0ICovXG5cdEBJbnB1dCgpIHNpemU6IFwic21cIiB8IFwibWRcIiB8IFwibGdcIiA9IFwibWRcIjtcblx0LyoqXG5cdCAqIFNwZWNpZmllcyB0aGUgcHJvcGVydHkgdG8gYmUgdXNlZCBhcyB0aGUgcmV0dXJuIHZhbHVlIHRvIGBuZ01vZGVsYFxuXHQgKi9cblx0QElucHV0KCkgaXRlbVZhbHVlS2V5OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBMYWJlbCBmb3IgdGhlIGNvbWJvYm94LlxuXHQgKi9cblx0QElucHV0KCkgbGFiZWw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgKiBIaWRlIGxhYmVsIHdoaWxlIGtlZXBpbmcgaXQgYWNjZXNzaWJsZSBmb3Igc2NyZWVuIHJlYWRlcnNcblx0ICovXG5cdEBJbnB1dCgpIGhpZGVMYWJlbCA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0cyB0aGUgb3B0aW9uYWwgaGVscGVyIHRleHQuXG5cdCAqL1xuXHRASW5wdXQoKSBoZWxwZXJUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogc2V0IHRvIGB0cnVlYCB0byBwbGFjZSB0aGUgZHJvcGRvd24gdmlldyBpbmxpbmUgd2l0aCB0aGUgY29tcG9uZW50XG5cdCAqL1xuXHRASW5wdXQoKSBhcHBlbmRJbmxpbmU6IGJvb2xlYW4gPSBudWxsO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCB0byBzaG93IHRoZSBpbnZhbGlkIHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuXHQvKipcblx0ICogVmFsdWUgZGlzcGxheWVkIGlmIGNvbWJvYm94IGlzIGluIGFuIGludmFsaWQgc3RhdGUuXG5cdCAqL1xuXHRASW5wdXQoKSBpbnZhbGlkVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCogU2V0IHRvIGB0cnVlYCB0byBzaG93IGEgd2FybmluZyAoY29udGVudHMgc2V0IGJ5IHdhcm5UZXh0KVxuXHQqL1xuXHRASW5wdXQoKSB3YXJuID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB3YXJuaW5nIHRleHRcblx0ICovXG5cdEBJbnB1dCgpIHdhcm5UZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogTWF4IGxlbmd0aCB2YWx1ZSB0byBsaW1pdCBpbnB1dCBjaGFyYWN0ZXJzXG5cdCAqL1xuXHRASW5wdXQoKSBtYXhMZW5ndGg6IG51bWJlciA9IG51bGw7XG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSB2NSAtIFVzZSBgY2RzTGF5ZXJgIGRpcmVjdGl2ZSBpbnN0ZWFkXG5cdCAqL1xuXHRASW5wdXQoKSB0aGVtZTogXCJsaWdodFwiIHwgXCJkYXJrXCIgPSBcImRhcmtcIjtcblx0LyoqXG5cdCAqIFNwZWNpZnkgZmVlZGJhY2sgKG1vZGUpIG9mIHRoZSBzZWxlY3Rpb24uXG5cdCAqIGB0b3BgOiBzZWxlY3RlZCBpdGVtIGp1bXBzIHRvIHRvcFxuXHQgKiBgZml4ZWRgOiBzZWxlY3RlZCBpdGVtIHN0YXlzIGF0IGl0cyBwb3NpdGlvblxuXHQgKiBgdG9wLWFmdGVyLXJlb3BlbmA6IHNlbGVjdGVkIGl0ZW0ganVtcCB0byB0b3AgYWZ0ZXIgcmVvcGVuIGRyb3Bkb3duXG5cdCAqL1xuXHRASW5wdXQoKSBzZWxlY3Rpb25GZWVkYmFjazogXCJ0b3BcIiB8IFwiZml4ZWRcIiB8IFwidG9wLWFmdGVyLXJlb3BlblwiID0gXCJ0b3AtYWZ0ZXItcmVvcGVuXCI7XG5cdC8qKlxuXHQgKiBTcGVjaWZ5IGFyaWEtYXV0b2NvbXBsZXRlIGF0dHJpYnV0ZSBvZiB0ZXh0IGlucHV0LlxuXHQgKiBcImxpc3RcIiwgaXMgdGhlIGV4cGVjdGVkIHZhbHVlIGZvciBhIGNvbWJvYm94IHRoYXQgaW52b2tlcyBhIGRyb3AtZG93biBsaXN0XG5cdCAqL1xuXHRASW5wdXQoKSBhdXRvY29tcGxldGUgPSBcImxpc3RcIjtcblx0LyoqXG5cdCAqIE92ZXJyaWRlcyB0aGUgYXV0b21hdGljIGRyb3BVcC5cblx0ICovXG5cdEBJbnB1dCgpIGRyb3BVcDogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gZGlzYWJsZSBjb21ib2JveC5cblx0ICovXG5cdEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGZvciByZWFkb25seSBzdGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBFeHBlcmltZW50YWw6IGVuYWJsZSBmbHVpZCBzdGF0ZVxuXHQgKi9cblx0QElucHV0KCkgZmx1aWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIEVtaXRzIGEgTGlzdEl0ZW1cblx0ICpcblx0ICogRXhhbXBsZTpcblx0ICogYGBgamF2YXNjcmlwdFxuXHQgKiB7XG5cdCAqIFx0XHRjb250ZW50OiBcIm9uZVwiLFxuXHQgKiBcdFx0c2VsZWN0ZWQ6IHRydWVcblx0ICogfVxuXHQgKiBgYGBcblx0ICovXG5cdEBPdXRwdXQoKSBzZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TGlzdEl0ZW0gfCBMaXN0SXRlbVtdPigpO1xuXHQvKipcblx0ICogSW50ZW5kZWQgdG8gYmUgdXNlZCB0byBhZGQgaXRlbXMgdG8gdGhlIGxpc3QuXG5cdCAqXG5cdCAqIEVtaXRzIGFuIGV2ZW50IHRoYXQgaW5jbHVkZXMgdGhlIGN1cnJlbnQgaXRlbSBsaXN0LCB0aGUgc3VnZ2VzdGVkIGluZGV4IGZvciB0aGUgbmV3IGl0ZW0sIGFuZCBhIHNpbXBsZSBMaXN0SXRlbVxuXHQgKlxuXHQgKiBFeGFtcGxlOlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqXHR7XG5cdCAqXHRcdGl0ZW1zOiBbe2NvbnRlbnQ6IFwib25lXCIsIHNlbGVjdGVkOiB0cnVlfSwge2NvbnRlbnQ6IFwidHdvXCIsIHNlbGVjdGVkOiB0cnVlfV0sXG5cdCAqXHRcdGluZGV4OiAxLFxuXHQgKlx0XHR2YWx1ZToge1xuXHQgKlx0XHRcdGNvbnRlbnQ6IFwic29tZSB1c2VyIHN0cmluZ1wiLFxuXHQgKlx0XHRcdHNlbGVjdGVkOiBmYWxzZVxuXHQgKlx0XHR9XG5cdCAqXHR9XG5cdCAqIGBgYFxuXHQgKlxuXHQgKlxuXHQgKiBFeGFtcGxlOlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIHtcblx0ICpcdGFmdGVyOiAxLFxuXHQgKlx0dmFsdWU6IFwic29tZSB1c2VyIHN0cmluZ1wiXG5cdCAqIH1cblx0ICogYGBgXG5cdCAqL1xuXHRAT3V0cHV0KCkgc3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG5cdFx0aXRlbXM6IExpc3RJdGVtW10sXG5cdFx0aW5kZXg6IG51bWJlcixcblx0XHR2YWx1ZToge1xuXHRcdFx0Y29udGVudDogc3RyaW5nLFxuXHRcdFx0c2VsZWN0ZWQ6IGJvb2xlYW5cblx0XHR9XG5cdH0+KCk7XG5cdC8qKiBFbWl0cyBhbiBlbXB0eSBldmVudCB3aGVuIHRoZSBtZW51IGlzIGNsb3NlZCAqL1xuXHRAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cdC8qKiBFbWl0cyB0aGUgc2VhcmNoIHN0cmluZyBmcm9tIHRoZSBpbnB1dCAqL1xuXHRAT3V0cHV0KCkgc2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cdC8qKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBjbGVhciBidXR0b24gaXMgY2xpY2tlZC4gKi9cblx0QE91dHB1dCgpIGNsZWFyID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblx0LyoqIENvbnRlbnRDaGlsZCByZWZlcmVuY2UgdG8gdGhlIGluc3RhbnRpYXRlZCBkcm9wZG93biBsaXN0ICovXG5cdEBDb250ZW50Q2hpbGQoQWJzdHJhY3REcm9wZG93blZpZXcsIHsgc3RhdGljOiB0cnVlIH0pIHZpZXc6IEFic3RyYWN0RHJvcGRvd25WaWV3O1xuXHRAVmlld0NoaWxkKFwiZHJvcGRvd25NZW51XCIpIGRyb3Bkb3duTWVudTtcblx0QFZpZXdDaGlsZChcImlucHV0XCIsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0OiBFbGVtZW50UmVmO1xuXHRAVmlld0NoaWxkKFwibGlzdGJveFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBsaXN0Ym94OiBFbGVtZW50UmVmO1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWxpc3QtYm94X193cmFwcGVyXCIpIGhvc3RDbGFzcyA9IHRydWU7XG5cblx0cHVibGljIG9wZW4gPSBmYWxzZTtcblxuXHRwdWJsaWMgc2hvd0NsZWFyQnV0dG9uID0gZmFsc2U7XG5cblx0LyoqIFNlbGVjdGVkIGl0ZW1zIGZvciBtdWx0aS1zZWxlY3QgY29tYm8tYm94ZXMuICovXG5cdHB1YmxpYyBwaWxscyA9IFtdO1xuXHQvKiogdXNlZCB0byB1cGRhdGUgdGhlIGRpc3BsYXlWYWx1ZSAqL1xuXHRwdWJsaWMgc2VsZWN0ZWRWYWx1ZSA9IFwiXCI7XG5cblx0b3V0c2lkZUNsaWNrID0gdGhpcy5fb3V0c2lkZUNsaWNrLmJpbmQodGhpcyk7XG5cdGtleWJvYXJkTmF2ID0gdGhpcy5fa2V5Ym9hcmROYXYuYmluZCh0aGlzKTtcblx0LyoqXG5cdCAqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGBkcm9wLXVwYCBjbGFzcyBpcyBhcHBsaWVkXG5cdCAqL1xuXHRfZHJvcFVwID0gZmFsc2U7XG5cblx0cHJvdGVjdGVkIG5vb3AgPSB0aGlzLl9ub29wLmJpbmQodGhpcyk7XG5cdHByb3RlY3RlZCBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IHRoaXMuX25vb3A7XG5cdHByb3RlY3RlZCBwcm9wYWdhdGVDaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IHRoaXMuX25vb3A7XG5cblx0cHJvdGVjdGVkIF9wbGFjZWhvbGRlciA9IHRoaXMuaTE4bi5nZXRPdmVycmlkYWJsZShcIkNPTUJPQk9YLlBMQUNFSE9MREVSXCIpO1xuXHRwcm90ZWN0ZWQgX2Nsb3NlTWVudUFyaWEgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJDT01CT0JPWC5BMTFZLkNMT1NFX01FTlVcIik7XG5cdHByb3RlY3RlZCBfb3Blbk1lbnVBcmlhID0gdGhpcy5pMThuLmdldE92ZXJyaWRhYmxlKFwiQ09NQk9CT1guQTExWS5PUEVOX01FTlVcIik7XG5cdHByb3RlY3RlZCBfY2xlYXJTZWxlY3Rpb25zVGl0bGUgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJDT01CT0JPWC5DTEVBUl9TRUxFQ1RJT05TXCIpO1xuXHRwcm90ZWN0ZWQgX2NsZWFyU2VsZWN0aW9uc0FyaWEgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJDT01CT0JPWC5BMTFZLkNMRUFSX1NFTEVDVElPTlNcIik7XG5cdHByb3RlY3RlZCBfY2xlYXJTZWxlY3Rpb25UaXRsZSA9IHRoaXMuaTE4bi5nZXRPdmVycmlkYWJsZShcIkNPTUJPQk9YLkNMRUFSX1NFTEVDVEVEXCIpO1xuXHRwcm90ZWN0ZWQgX2NsZWFyU2VsZWN0aW9uQXJpYSA9IHRoaXMuaTE4bi5nZXRPdmVycmlkYWJsZShcIkNPTUJPQk9YLkExMVkuQ0xFQVJfU0VMRUNURURcIik7XG5cblx0cHJvdGVjdGVkIF9pc0ZvY3VzZWQgPSBmYWxzZTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBDb21ib0JveC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuXHRcdHByb3RlY3RlZCBkcm9wZG93blNlcnZpY2U6IERyb3Bkb3duU2VydmljZSxcblx0XHRwcm90ZWN0ZWQgaTE4bjogSTE4blxuXHQpIHt9XG5cblx0LyoqXG5cdCAqIExpZmVjeWNsZSBob29rLlxuXHQgKiBVcGRhdGVzIHBpbGxzIGlmIG5lY2Vzc2FyeS5cblx0ICpcblx0ICovXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcblx0XHRpZiAoY2hhbmdlcy5pdGVtcykge1xuXHRcdFx0dGhpcy52aWV3Lml0ZW1zID0gY2hhbmdlcy5pdGVtcy5jdXJyZW50VmFsdWU7XG5cdFx0XHR0aGlzLnVwZGF0ZVNlbGVjdGVkKCk7XG5cdFx0XHQvLyBJZiBuZXcgaXRlbXMgYXJlIGFkZGVkIGludG8gdGhlIGNvbWJvYm94IHdoaWxlIHRoZXJlIGlzIHNlYXJjaCBpbnB1dCxcblx0XHRcdC8vIHJlcGVhdCB0aGUgc2VhcmNoLiBTZWFyY2ggc2hvdWxkIG9ubHkgdHJpZ2dlciBmb3IgdHlwZSAnc2luZ2xlJyB3aGVuIHRoZXJlIGlzIG5vIHZhbHVlIHNlbGVjdGVkLlxuXHRcdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiIHx8ICh0aGlzLnR5cGUgPT09IFwic2luZ2xlXCIgJiYgIXRoaXMuc2VsZWN0ZWRWYWx1ZSkpIHtcblx0XHRcdFx0dGhpcy5vblNlYXJjaCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBpbml0aWFsIHN0YXRlIHRoYXQgZGVwZW5kcyBvbiBjaGlsZCBjb21wb25lbnRzXG5cdCAqIFN1YnNjcmliZXMgdG8gc2VsZWN0IGV2ZW50cyBhbmQgaGFuZGxlcyBmb2N1cy9maWx0ZXJpbmcvaW5pdGlhbCBsaXN0IHVwZGF0ZXNcblx0ICovXG5cdG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcblx0XHRpZiAodGhpcy52aWV3KSB7XG5cdFx0XHR0aGlzLnZpZXcudHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGV2ZW50IGlzIG9yZ2FuaWMgKGlzVXBkYXRlID09PSBmYWxzZSkgb3IgcHJvZ3JhbW1hdGljXG5cdFx0XHRjb25zdCBpc1VwZGF0ZSA9IGV2ZW50ID0+IGV2ZW50ICYmIGV2ZW50LmlzVXBkYXRlO1xuXG5cdFx0XHR0aGlzLnZpZXcuc2VsZWN0LnN1YnNjcmliZShldmVudCA9PiB7XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlUGlsbHMoKTtcblx0XHRcdFx0XHRpZiAoIWlzVXBkYXRlKGV2ZW50KSkge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuaXRlbVZhbHVlS2V5ICYmIHRoaXMudmlldy5nZXRTZWxlY3RlZCgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlcyA9IHRoaXMudmlldy5nZXRTZWxlY3RlZCgpLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5pdGVtVmFsdWVLZXldKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2VDYWxsYmFjayh2YWx1ZXMpO1xuXHRcdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIGp1c3QgcGFzcyB1cCB0aGUgdmFsdWVzIGZyb20gYGdldFNlbGVjdGVkYFxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2VDYWxsYmFjayh0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBJZiB0eXBlIGlzIHNpbmdsZSwgZHJvcGRvd24gbGlzdCB3aWxsIGVtaXQgYW4gb2JqZWN0XG5cdFx0XHRcdFx0aWYgKGV2ZW50Lml0ZW0gJiYgZXZlbnQuaXRlbS5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0dGhpcy5zaG93Q2xlYXJCdXR0b24gPSB0cnVlO1xuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZFZhbHVlID0gZXZlbnQuaXRlbS5jb250ZW50O1xuXG5cdFx0XHRcdFx0XHRpZiAoIWlzVXBkYXRlKGV2ZW50KSkge1xuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5pdGVtVmFsdWVLZXkpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZUNhbGxiYWNrKGV2ZW50Lml0ZW1bdGhpcy5pdGVtVmFsdWVLZXldKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZUNhbGxiYWNrKGV2ZW50Lml0ZW0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IFwiXCI7XG5cdFx0XHRcdFx0XHRpZiAoIWlzVXBkYXRlKGV2ZW50KSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZUNhbGxiYWNrKG51bGwpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBub3QgZ3VhcmRpbmcgdGhlc2Ugc2luY2UgdGhlIG5hdGl2ZUVsZW1lbnQgaGFzIHRvIGJlIGxvYWRlZFxuXHRcdFx0XHRcdC8vIGZvciBzZWxlY3QgdG8gZXZlbiBmaXJlXG5cdFx0XHRcdFx0Ly8gb25seSBmb2N1cyBmb3IgXCJvcmdhbmljXCIgc2VsZWN0aW9uc1xuXHRcdFx0XHRcdGlmICghaXNVcGRhdGUoZXZlbnQpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIikuZm9jdXMoKTtcblx0XHRcdFx0XHRcdHRoaXMudmlldy5maWx0ZXJCeShcIlwiKTtcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWQuZW1pdChldmVudC5pdGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5jbG9zZURyb3Bkb3duKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Ly8gdXBkYXRlIHRoZSByZXN0IG9mIGNvbWJvYm94IHdpdGggYW55IHByZS1zZWxlY3RlZCBpdGVtc1xuXHRcdFx0Ly8gc2V0VGltZW91dCBqdXN0IGRlZmVycyB0aGUgY2FsbCB0byB0aGUgbmV4dCBjaGVjayBjeWNsZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMudXBkYXRlU2VsZWN0ZWQoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnZpZXcuYmx1ckludGVudC5waXBlKGZpbHRlcih2ID0+IHYgPT09IFwidG9wXCIpKS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmNkcy0tdGV4dC1pbnB1dFwiKS5mb2N1cygpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEJpbmRzIGV2ZW50IGhhbmRsZXJzIGFnYWluc3QgdGhlIHJlbmRlcmVkIHZpZXdcblx0ICovXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHQvLyBpZiBhcHBlbmRJbmxpbmUgaXMgZGVmYXVsdCB2YWx1ZWQgKG51bGwpIHdlIHNob3VsZDpcblx0XHQvLyAxLiBpZiB0aGVyZSBhcmUgc2Nyb2xsYWJsZSBwYXJlbnRzIChub3QgaW5jbHVkaW5nIGJvZHkpIGRvbid0IGFwcGVuZCBpbmxpbmVcblx0XHQvLyAgICB0aGlzIHNob3VsZCBhbHNvIGNvdmVyIHRoZSBjYXNlIHdoZXJlIHRoZSBkcm9wZG93biBpcyBpbiBhIG1vZGFsXG5cdFx0Ly8gICAgKHdoZXJlIHdlIF9kb18gd2FudCB0byBhcHBlbmQgdG8gdGhlIHBsYWNlaG9sZGVyKVxuXHRcdGlmICh0aGlzLmFwcGVuZElubGluZSA9PT0gbnVsbCAmJiBoYXNTY3JvbGxhYmxlUGFyZW50cyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpIHtcblx0XHRcdHRoaXMuYXBwZW5kSW5saW5lID0gZmFsc2U7XG5cdFx0Ly8gMi4gb3RoZXJ3aXNlIHdlIHNob3VsZCBhcHBlbmQgaW5saW5lXG5cdFx0fSBlbHNlIGlmICh0aGlzLmFwcGVuZElubGluZSA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy5hcHBlbmRJbmxpbmUgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmluZyB0aGUgYERyb3Bkb3duYCBmcm9tIHRoZSBib2R5IGlmIGl0IGlzIGFwcGVuZGVkIHRvIHRoZSBib2R5LlxuXHQgKi9cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0aWYgKCF0aGlzLmFwcGVuZElubGluZSkge1xuXHRcdFx0dGhpcy5fYXBwZW5kVG9Ecm9wZG93bigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIGBFc2NhcGUvVGFiYCBrZXkgY2xvc2luZyB0aGUgZHJvcGRvd24sIGFuZCBhcnJvdyB1cC9kb3duIGZvY3VzIHRvL2Zyb20gdGhlIGRyb3Bkb3duIGxpc3QuXG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKFwia2V5ZG93blwiLCBbXCIkZXZlbnRcIl0pXG5cdGhvc3RrZXlzKGV2OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0aWYgKGV2LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0dGhpcy5jbG9zZURyb3Bkb3duKCk7XG5cdFx0fSBlbHNlIGlmICgoZXYua2V5ID09PSBcIkFycm93RG93blwiKVxuXHRcdFx0JiYgKCF0aGlzLmRyb3Bkb3duTWVudSB8fCAhdGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5jb250YWlucyhldi50YXJnZXQpKSkge1xuXHRcdFx0ZXYucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMub3BlbkRyb3Bkb3duKCk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy52aWV3LmluaXRGb2N1cygpOyB9LCAwKTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLm9wZW4gJiYgZXYua2V5ID09PSBcIlRhYlwiICYmXG5cdFx0XHQodGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5jb250YWlucyhldi50YXJnZXQgYXMgTm9kZSkgfHwgZXYudGFyZ2V0ID09PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpXG5cdFx0KSB7XG5cdFx0XHR0aGlzLmNsb3NlRHJvcGRvd24oKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcGVuICYmIGV2LmtleSA9PT0gXCJUYWJcIiAmJiBldi5zaGlmdEtleSkge1xuXHRcdFx0dGhpcy5jbG9zZURyb3Bkb3duKCk7XG5cdFx0fVxuXHR9XG5cblx0Lypcblx0ICogbm8tb3AgbWV0aG9kIGZvciBudWxsIGV2ZW50IGxpc3RlbmVycywgYW5kIG90aGVyIG5vIG9wIGNhbGxzXG5cdCAqL1xuXHRfbm9vcCgpIHt9XG5cblx0Lypcblx0ICogcHJvcGFnYXRlcyB0aGUgdmFsdWUgcHJvdmlkZWQgZnJvbSBuZ01vZGVsXG5cdCAqL1xuXHR3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcblx0XHRpZiAodGhpcy50eXBlID09PSBcInNpbmdsZVwiKSB7XG5cdFx0XHRpZiAodGhpcy5pdGVtVmFsdWVLZXkpIHtcblx0XHRcdFx0Ly8gY2xvbmUgdGhlIHNwZWNpZmllZCBpdGVtIGFuZCB1cGRhdGUgaXRzIHN0YXRlXG5cdFx0XHRcdGNvbnN0IG5ld1ZhbHVlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy52aWV3LmdldExpc3RJdGVtcygpLmZpbmQoaXRlbSA9PiBpdGVtW3RoaXMuaXRlbVZhbHVlS2V5XSA9PT0gdmFsdWUpKTtcblx0XHRcdFx0bmV3VmFsdWUuc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQoW25ld1ZhbHVlXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBhbGwgaXRlbXMgaW4gcHJvcGFnYXRlU2VsZWN0ZWQgbXVzdCBiZSBpdGVyYWJsZVxuXHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQoW3ZhbHVlIHx8IFwiXCJdKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc2hvd0NsZWFyQnV0dG9uID0gISEodmFsdWUgJiYgdGhpcy52aWV3LmdldFNlbGVjdGVkKCkubGVuZ3RoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuaXRlbVZhbHVlS2V5KSB7XG5cdFx0XHRcdC8vIGNsb25lIHRoZSBpdGVtcyBhbmQgdXBkYXRlIHRoZWlyIHN0YXRlIGJhc2VkIG9uIHRoZSByZWNlaXZlZCB2YWx1ZSBhcnJheVxuXHRcdFx0XHQvLyB0aGlzIHdheSB3ZSBkb24ndCBsb3NlIGFueSBhZGRpdGlvbmFsIG1ldGFkYXRhIHRoYXQgbWF5IGJlIHBhc3NlZCBpbiB2aWEgdGhlIGBpdGVtc2AgSW5wdXRcblx0XHRcdFx0bGV0IG5ld1ZhbHVlcyA9IFtdO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgdmFsdWUgPz8gW10pIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy52aWV3LmdldExpc3RJdGVtcygpKSB7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbVt0aGlzLml0ZW1WYWx1ZUtleV0gPT09IHYpIHtcblx0XHRcdFx0XHRcdFx0bmV3VmFsdWVzLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgaXRlbSwgeyBzZWxlY3RlZDogdHJ1ZSB9KSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMudmlldy5wcm9wYWdhdGVTZWxlY3RlZChuZXdWYWx1ZXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy52aWV3LnByb3BhZ2F0ZVNlbGVjdGVkKHZhbHVlID8gdmFsdWUgOiBbXCJcIl0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLnVwZGF0ZVNlbGVjdGVkKCk7XG5cdH1cblxuXHRvbkJsdXIoKSB7XG5cdFx0dGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xuXHR9XG5cblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2VDYWxsYmFjayA9IGZuO1xuXHR9XG5cblx0cmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuXHRcdHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBgQ29udHJvbFZhbHVlQWNjZXNzb3JgIG1ldGhvZCB0byBwcm9ncmFtbWF0aWNhbGx5IGRpc2FibGUgdGhlIGNvbWJvYm94LlxuXHQgKlxuXHQgKiBleDogYHRoaXMuZm9ybUdyb3VwLmdldChcIm15Q29vbENvbWJvYm94XCIpLmRpc2FibGUoKTtgXG5cdCAqL1xuXHRzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgYnkgYG4tcGlsbC1pbnB1dGAgd2hlbiB0aGUgc2VsZWN0ZWQgcGlsbHMgaGF2ZSBjaGFuZ2VkLlxuXHQgKi9cblx0cHVibGljIHVwZGF0ZVBpbGxzKCkge1xuXHRcdHRoaXMucGlsbHMgPSB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKSB8fCBbXTtcblx0XHR0aGlzLmNoZWNrRm9yUmVvcmRlcigpO1xuXHR9XG5cblx0cHVibGljIGNsZWFyU2VsZWN0ZWQoZXZlbnQpIHtcblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5tYXAoaXRlbSA9PiB7XG5cdFx0XHRpZiAoIWl0ZW0uZGlzYWJsZWQpIHtcblx0XHRcdFx0aXRlbS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0fSk7XG5cdFx0dGhpcy52aWV3Lml0ZW1zID0gdGhpcy5pdGVtcztcblx0XHR0aGlzLnVwZGF0ZVBpbGxzKCk7XG5cdFx0Ly8gY2xlYXJTZWxlY3RlZCBjYW4gb25seSBmaXJlIG9uIHR5cGU9bXVsdGlcblx0XHQvLyBzbyB3ZSBqdXN0IGVtaXQgZ2V0U2VsZWN0ZWQoKSAoanVzdCBpbiBjYXNlIHRoZXJlJ3MgYW55IGRpc2FibGVkIGJ1dCBzZWxlY3RlZCBpdGVtcylcblx0XHRjb25zdCBzZWxlY3RlZCA9IHRoaXMudmlldy5nZXRTZWxlY3RlZCgpO1xuXG5cdFx0Ly8gaW4gY2FzZSB0aGVyZSBhcmUgZGlzYWJsZWQgaXRlbXMgdGhleSBzaG91bGQgYmUgbWFwcGVkIGFjY29yZGluZyB0byBpdGVtVmFsdWVLZXlcbiAgICAgICAgaWYgKHRoaXMuaXRlbVZhbHVlS2V5ICYmIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBzZWxlY3RlZC5tYXAoKGl0ZW0pID0+IGl0ZW1bdGhpcy5pdGVtVmFsdWVLZXldKTtcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlQ2FsbGJhY2sodmFsdWVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlQ2FsbGJhY2soc2VsZWN0ZWQpO1xuICAgICAgICB9XG5cblx0XHR0aGlzLnNlbGVjdGVkLmVtaXQoc2VsZWN0ZWQgYXMgYW55KTtcblx0XHR0aGlzLmNsZWFyLmVtaXQoZXZlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgZHJvcGRvd24gYW5kIGVtaXRzIHRoZSBjbG9zZSBldmVudC5cblx0ICovXG5cdHB1YmxpYyBjbG9zZURyb3Bkb3duKCkge1xuXHRcdHRoaXMub3BlbiA9IGZhbHNlO1xuXHRcdHRoaXMuY2hlY2tGb3JSZW9yZGVyKCk7XG5cdFx0dGhpcy5jbG9zZS5lbWl0KCk7XG5cdFx0aWYgKCF0aGlzLmFwcGVuZElubGluZSkge1xuXHRcdFx0dGhpcy5fYXBwZW5kVG9Ecm9wZG93bigpO1xuXHRcdH1cblxuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLm91dHNpZGVDbGljaywgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGRyb3Bkb3duLlxuXHQgKi9cblx0cHVibGljIG9wZW5Ecm9wZG93bigpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7IHJldHVybjsgfVxuXHRcdHRoaXMub3BlbiA9IHRydWU7XG5cdFx0dGhpcy5fZHJvcFVwID0gZmFsc2U7XG5cblx0XHRpZiAoIXRoaXMuYXBwZW5kSW5saW5lKSB7XG5cdFx0XHR0aGlzLl9hcHBlbmRUb0JvZHkoKTtcblx0XHR9XG5cblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5vdXRzaWRlQ2xpY2ssIHRydWUpO1xuXG5cdFx0Ly8gc2V0IHRoZSBkcm9wZG93biBtZW51IHRvIGRyb3AgdXAgaWYgaXQgaXMgbmVhciB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW5cblx0XHQvLyBzZXRUaW1lb3V0IGxldHMgdXMgZG8gdGhlIGNhbGN1bGF0aW9ucyBhZnRlciBpdCBpcyB2aXNpYmxlIGluIHRoZSBET01cblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLmRyb3BVcCA9PT0gbnVsbCB8fCB0aGlzLmRyb3BVcCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuX2Ryb3BVcCA9IHRoaXMuX3Nob3VsZERyb3BVcCgpO1xuXHRcdFx0fVxuXHRcdH0sIDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvZ2dsZXMgdGhlIGRyb3Bkb3duLlxuXHQgKi9cblx0cHVibGljIHRvZ2dsZURyb3Bkb3duKCkge1xuXHRcdGlmICh0aGlzLm9wZW4pIHtcblx0XHRcdHRoaXMuY2xvc2VEcm9wZG93bigpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9wZW5Ecm9wZG93bigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBsaXN0IGdyb3VwIGZpbHRlciwgYW5kIG1hbmFnZXMgc2luZ2xlIHNlbGVjdCBpdGVtIHNlbGVjdGlvbi5cblx0ICovXG5cdHB1YmxpYyBvblNlYXJjaChzZWFyY2hTdHJpbmcsIHNob3VsZEVtaXRTZWFyY2ggPSB0cnVlKSB7XG5cdFx0aWYgKHNob3VsZEVtaXRTZWFyY2gpIHtcblx0XHRcdHRoaXMuc2VhcmNoLmVtaXQoc2VhcmNoU3RyaW5nKTtcblx0XHR9XG5cdFx0dGhpcy5zaG93Q2xlYXJCdXR0b24gPSAhIXNlYXJjaFN0cmluZztcblx0XHR0aGlzLnZpZXcuZmlsdGVyQnkoc2VhcmNoU3RyaW5nKTtcblx0XHRpZiAoc2VhcmNoU3RyaW5nICE9PSBcIlwiKSB7XG5cdFx0XHRpZiAoIXRoaXMub3Blbikge1xuXHRcdFx0XHR0aGlzLm9wZW5Ecm9wZG93bigpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNlbGVjdGVkVmFsdWUgPSBcIlwiO1xuXHRcdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiICYmXG5cdFx0XHRcdCh0aGlzLnNlbGVjdGlvbkZlZWRiYWNrID09PSBcInRvcFwiIHx8IHRoaXMuc2VsZWN0aW9uRmVlZGJhY2sgPT09IFwidG9wLWFmdGVyLXJlb3BlblwiKSkge1xuXHRcdFx0XHR0aGlzLnZpZXcucmVvcmRlclNlbGVjdGVkKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICh0aGlzLnR5cGUgPT09IFwic2luZ2xlXCIpIHtcblx0XHRcdC8vIGRlc2VsZWN0IGlmIHRoZSBpbnB1dCBkb2Vzbid0IG1hdGNoIHRoZSBjb250ZW50XG5cdFx0XHQvLyBvZiBhbnkgZ2l2ZW4gaXRlbVxuXHRcdFx0Y29uc3QgbWF0Y2hlcyA9IHRoaXMudmlldy5nZXRMaXN0SXRlbXMoKS5zb21lKGl0ZW0gPT4gaXRlbS5jb250ZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkpKTtcblx0XHRcdGlmICghbWF0Y2hlcykge1xuXHRcdFx0XHRjb25zdCBzZWxlY3RlZCA9IHRoaXMudmlldy5nZXRTZWxlY3RlZCgpO1xuXHRcdFx0XHRpZiAoIXNlbGVjdGVkIHx8ICFzZWxlY3RlZFswXSkge1xuXHRcdFx0XHRcdHRoaXMudmlldy5maWx0ZXJCeShzZWFyY2hTdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVuZGVkIHRvIGJlIHVzZWQgdG8gYWRkIGl0ZW1zIHRvIHRoZSBsaXN0LlxuXHQgKi9cblx0cHVibGljIG9uU3VibWl0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0dGhpcy5zdWJtaXQuZW1pdCh7XG5cdFx0XHRpdGVtczogdGhpcy52aWV3LmdldExpc3RJdGVtcygpLFxuXHRcdFx0aW5kZXg6IDAsXG5cdFx0XHR2YWx1ZToge1xuXHRcdFx0XHRjb250ZW50OiAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLFxuXHRcdFx0XHRzZWxlY3RlZDogZmFsc2Vcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGNsZWFySW5wdXQoZXZlbnQpIHtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0aWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnR5cGUgPT09IFwic2luZ2xlXCIpIHsgLy8gZG9uJ3Qgd2FudCB0byBjbGVhciBzZWxlY3RlZCBvciBjbG9zZSBpZiBtdWx0aVxuXHRcdFx0dGhpcy5jbGVhclNlbGVjdGVkKGV2ZW50KTtcblx0XHRcdHRoaXMuY2xvc2VEcm9wZG93bigpO1xuXHRcdH1cblxuXHRcdHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IFwiXCI7XG5cdFx0dGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcblxuXHRcdHRoaXMuc2hvd0NsZWFyQnV0dG9uID0gZmFsc2U7XG5cdFx0dGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0dGhpcy5vblNlYXJjaCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuXHR9XG5cblx0cHVibGljIGlzVGVtcGxhdGUodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIGtleWJvYXJkIGV2ZW50cyBzbyB1c2VycyBhcmUgY29udHJvbGxpbmcgdGhlIGBEcm9wZG93bmAgaW5zdGVhZCBvZiB1bmludGVudGlvbmFsbHkgY29udHJvbGxpbmcgb3V0c2lkZSBlbGVtZW50cy5cblx0ICovXG5cdF9rZXlib2FyZE5hdihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXHRcdGlmICgoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSAmJiB0aGlzLm9wZW4pIHtcblx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOyAgLy8gZG9uJ3QgdW5pbnRlbnRpb25hbGx5IGNsb3NlIG1vZGFsIGlmIGluc2lkZSBvZiBpdFxuXHRcdH1cblx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5jbG9zZURyb3Bkb3duKCk7XG5cdFx0XHR0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMub3BlbiAmJiBldmVudC5rZXkgPT09IFwiVGFiXCIpIHtcblx0XHRcdC8vIHRoaXMgd2F5IGZvY3VzIHdpbGwgc3RhcnQgb24gdGhlIG5leHQgZm9jdXNhYmxlIGl0ZW0gZnJvbSB0aGUgZHJvcGRvd25cblx0XHRcdC8vIG5vdCB0aGUgdG9wIG9mIHRoZSBib2R5IVxuXHRcdFx0dGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHR0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudChcImtleWRvd25cIiwgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBrZXk6IFwiVGFiXCIgfSkpO1xuXHRcdFx0dGhpcy5jbG9zZURyb3Bkb3duKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGBEcm9wZG93bmAgbGlzdCBhcyBhbiBlbGVtZW50IHRoYXQgaXMgYXBwZW5kZWQgdG8gdGhlIERPTSBib2R5LlxuXHQgKi9cblx0X2FwcGVuZFRvQm9keSgpIHtcblx0XHR0aGlzLmRyb3Bkb3duU2VydmljZS5hcHBlbmRUb0JvZHkoXG5cdFx0XHR0aGlzLmxpc3Rib3gubmF0aXZlRWxlbWVudCxcblx0XHRcdHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRgJHt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc05hbWV9JHt0aGlzLm9wZW4gPyBcIiBjZHMtLWxpc3QtYm94LS1leHBhbmRlZFwiIDogXCJcIn1gKTtcblx0XHR0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMua2V5Ym9hcmROYXYsIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGBEcm9wZG93bmAgbGlzdCBhcHBlbmRpbmcgaXQgdG8gdGhlIGRyb3Bkb3duIHBhcmVudCBvYmplY3QgaW5zdGVhZCBvZiB0aGUgYm9keS5cblx0ICovXG5cdF9hcHBlbmRUb0Ryb3Bkb3duKCkge1xuXHRcdHRoaXMuZHJvcGRvd25TZXJ2aWNlLmFwcGVuZFRvRHJvcGRvd24odGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXHRcdHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlib2FyZE5hdiwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgYERyb3Bkb3duYCBsaXN0IGlzIHZpc2libGUgd2l0aGluIGFsbCBzY3JvbGxhYmxlIHBhcmVudHMuXG5cdCAqIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBpbiBhIHZhbHVlIHRvIHRoZSBgZHJvcFVwYCBpbnB1dC5cblx0ICovXG5cdF9zaG91bGREcm9wVXAoKSB7XG5cdFx0Ly8gY2hlY2sgaWYgZHJvcGRvd25NZW51IGV4aXN0cyBmaXJzdC5cblx0XHRjb25zdCBtZW51ID0gdGhpcy5kcm9wZG93bk1lbnUgJiYgdGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmNkcy0tbGlzdC1ib3hfX21lbnVcIik7XG5cdFx0Ly8gY2hlY2sgaWYgbWVudSBleGlzdHMgZmlyc3QuXG5cdFx0Y29uc3QgbWVudVJlY3QgPSBtZW51ICYmIG1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0aWYgKG1lbnUgJiYgbWVudVJlY3QpIHtcblx0XHRcdGNvbnN0IHNjcm9sbGFibGVQYXJlbnRzID0gZ2V0U2Nyb2xsYWJsZVBhcmVudHMobWVudSk7XG5cdFx0XHRyZXR1cm4gc2Nyb2xsYWJsZVBhcmVudHMucmVkdWNlKChzaG91bGREcm9wVXA6IGJvb2xlYW4sIHBhcmVudDogSFRNTEVsZW1lbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyZW50UmVjdCA9IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0Y29uc3QgaXNCZWxvd1BhcmVudCA9ICEobWVudVJlY3QuYm90dG9tIDw9IHBhcmVudFJlY3QuYm90dG9tKTtcblx0XHRcdFx0cmV0dXJuIHNob3VsZERyb3BVcCB8fCBpc0JlbG93UGFyZW50O1xuXHRcdFx0fSwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBgRHJvcGRvd25gIGxpc3QuXG5cdCAqL1xuXHRfb3V0c2lkZUNsaWNrKGV2ZW50KSB7XG5cdFx0aWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG5cdFx0XHQvLyBpZiB3ZSdyZSBhcHBlbmRUb0JvZHkgdGhlIGxpc3QgaXNuJ3Qgd2l0aGluIHRoZSBfZWxlbWVudFJlZixcblx0XHRcdC8vIHNvIHdlJ3ZlIGdvdCB0byBjaGVjayBpZiBvdXIgdGFyZ2V0IGlzIHBvc3NpYmx5IGluIHRoZXJlIHRvby5cblx0XHRcdCF0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcblx0XHRcdHRoaXMuY2xvc2VEcm9wZG93bigpO1xuXHRcdH1cblx0fVxuXG5cdGhhbmRsZUZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG5cdFx0dGhpcy5faXNGb2N1c2VkID0gZXZlbnQudHlwZSA9PT0gXCJmb2N1c1wiO1xuXHR9XG5cblx0cHJvdGVjdGVkIHVwZGF0ZVNlbGVjdGVkKCkge1xuXHRcdGNvbnN0IHNlbGVjdGVkID0gdGhpcy52aWV3LmdldFNlbGVjdGVkKCk7XG5cdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZVBpbGxzKCk7XG5cdFx0fSBlbHNlIGlmIChzZWxlY3RlZCkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBzZWxlY3RlZFswXSA/IHNlbGVjdGVkWzBdLmNvbnRlbnQgOiBcIlwiO1xuXHRcdFx0Y29uc3QgY2hhbmdlQ2FsbGJhY2tWYWx1ZSA9IHNlbGVjdGVkWzBdID8gc2VsZWN0ZWRbMF0gOiBcIlwiO1xuXHRcdFx0dGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWU7XG5cdFx0XHR0aGlzLnNob3dDbGVhckJ1dHRvbiA9ICEhdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIGNoZWNrRm9yUmVvcmRlcigpIHtcblx0XHRjb25zdCB0b3BBZnRlclJlb3BlbiA9ICF0aGlzLm9wZW4gJiYgdGhpcy5zZWxlY3Rpb25GZWVkYmFjayA9PT0gXCJ0b3AtYWZ0ZXItcmVvcGVuXCI7XG5cdFx0aWYgKCh0aGlzLnR5cGUgPT09IFwibXVsdGlcIikgJiYgKHRvcEFmdGVyUmVvcGVuIHx8IHRoaXMuc2VsZWN0aW9uRmVlZGJhY2sgPT09IFwidG9wXCIpKSB7XG5cdFx0XHR0aGlzLnZpZXcucmVvcmRlclNlbGVjdGVkKHRydWUpO1xuXHRcdH1cblx0fVxufVxuIl19
1071
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixTQUFTLEVBQ1QsWUFBWSxFQUdaLFdBQVcsRUFDWCxXQUFXLEVBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFtQixNQUFNLG9DQUFvQyxDQUFDO0FBRTNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7QUFJekM7Ozs7Ozs7Ozs7O0dBV0c7QUFvS0gsTUFBTSxPQUFPLFFBQVE7SUE4UXBCOztPQUVHO0lBQ0gsWUFDVyxVQUFzQixFQUN0QixlQUFnQyxFQUNoQyxJQUFVO1FBRlYsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsU0FBSSxHQUFKLElBQUksQ0FBTTtRQTVNWixPQUFFLEdBQUcsWUFBWSxRQUFRLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztRQUM1QyxZQUFPLEdBQUcsa0JBQWtCLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBQ2hFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBeUJHO1FBQ00sVUFBSyxHQUFvQixFQUFFLENBQUM7UUFDckM7O1dBRUc7UUFDTSxTQUFJLEdBQXVCLFFBQVEsQ0FBQztRQUM3Qzs7V0FFRztRQUNNLFNBQUksR0FBdUIsSUFBSSxDQUFDO1FBU3pDOztXQUVHO1FBQ00sY0FBUyxHQUFH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c0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRPbkNoYW5nZXMsXG5cdENvbnRlbnRDaGlsZCxcblx0SW5wdXQsXG5cdE91dHB1dCxcblx0SG9zdExpc3RlbmVyLFxuXHRFbGVtZW50UmVmLFxuXHRWaWV3Q2hpbGQsXG5cdEV2ZW50RW1pdHRlcixcblx0QWZ0ZXJWaWV3SW5pdCxcblx0QWZ0ZXJDb250ZW50SW5pdCxcblx0SG9zdEJpbmRpbmcsXG5cdFRlbXBsYXRlUmVmLFxuXHRPbkRlc3Ryb3lcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFic3RyYWN0RHJvcGRvd25WaWV3LCBEcm9wZG93blNlcnZpY2UgfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9kcm9wZG93blwiO1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9kcm9wZG93blwiO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHtcblx0Z2V0U2Nyb2xsYWJsZVBhcmVudHMsXG5cdGhhc1Njcm9sbGFibGVQYXJlbnRzXG59IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL3V0aWxzXCI7XG5pbXBvcnQgeyBJMThuLCBPdmVycmlkYWJsZSB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL2kxOG5cIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuXG4vKipcbiAqIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQ29tYm9Cb3hNb2R1bGUgfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbiAqIGBgYFxuICpcbiAqIENvbWJvQm94ZXMgYXJlIHNpbWlsYXIgdG8gZHJvcGRvd25zLCBleGNlcHQgYSBjb21ib2JveCBwcm92aWRlcyBhbiBpbnB1dCBmaWVsZCBmb3IgdXNlcnMgdG8gc2VhcmNoIGl0ZW1zIGFuZCAob3B0aW9uYWxseSkgYWRkIHRoZWlyIG93bi5cbiAqIE11bHRpLXNlbGVjdCBjb21ib2JveGVzIGFsc28gcHJvdmlkZSBcInBpbGxzXCIgb2Ygc2VsZWN0ZWQgaXRlbXMuXG4gKlxuICogW1NlZSBkZW1vXSguLi8uLi8/cGF0aD0vc3RvcnkvY29tcG9uZW50cy1jb21ib2JveC0tYmFzaWMpXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJjZHMtY29tYm8tYm94LCBpYm0tY29tYm8tYm94XCIsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X193cmFwcGVyXCJcblx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0J2Nkcy0tbGlzdC1ib3hfX3dyYXBwZXItLWZsdWlkJzogZmx1aWQsXG5cdFx0XHRcdCdjZHMtLWxpc3QtYm94X193cmFwcGVyLS1mbHVpZC0taW52YWxpZCc6IGZsdWlkICYmIGludmFsaWQsXG5cdFx0XHRcdCdjZHMtLWxpc3QtYm94X193cmFwcGVyLS1mbHVpZC0tZm9jdXMnOiBmbHVpZCAmJiBfaXNGb2N1c2VkXG5cdFx0XHR9XCI+XG5cdFx0XHQ8bGFiZWxcblx0XHRcdFx0Km5nSWY9XCJsYWJlbFwiXG5cdFx0XHRcdFtmb3JdPVwiaWRcIlxuXHRcdFx0XHRbaWRdPVwibGFiZWxJZFwiXG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1sYWJlbFwiXG5cdFx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0XHQnY2RzLS1sYWJlbC0tZGlzYWJsZWQnOiBkaXNhYmxlZCxcblx0XHRcdFx0XHQnY2RzLS12aXN1YWxseS1oaWRkZW4nOiBoaWRlTGFiZWxcblx0XHRcdFx0fVwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUobGFiZWwpXCI+e3tsYWJlbH19PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUobGFiZWwpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0PC9sYWJlbD5cblx0XHRcdDxkaXZcblx0XHRcdFx0I2xpc3Rib3hcblx0XHRcdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0XHRcdCdjZHMtLW11bHRpLXNlbGVjdCBjZHMtLW11bHRpLXNlbGVjdC0tZmlsdGVyYWJsZSc6IHR5cGUgPT09ICdtdWx0aScsXG5cdFx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWxpZ2h0JzogdGhlbWUgPT09ICdsaWdodCcsXG5cdFx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWV4cGFuZGVkJzogb3Blbixcblx0XHRcdFx0XHQnY2RzLS1saXN0LWJveC0tc20nOiBzaXplID09PSAnc20nLFxuXHRcdFx0XHRcdCdjZHMtLWxpc3QtYm94LS1tZCc6IHNpemUgPT09ICdtZCcsXG5cdFx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWxnJzogc2l6ZSA9PT0gJ2xnJyxcblx0XHRcdFx0XHQnY2RzLS1saXN0LWJveC0tZGlzYWJsZWQnOiBkaXNhYmxlZCxcblx0XHRcdFx0XHQnY2RzLS1jb21iby1ib3gtLXJlYWRvbmx5JzogcmVhZG9ubHksXG5cdFx0XHRcdFx0J2Nkcy0tY29tYm8tYm94LS13YXJuaW5nIGNkcy0tbGlzdC1ib3gtLXdhcm5pbmcnOiB3YXJuLFxuXHRcdFx0XHRcdCdjZHMtLWxpc3QtYm94LS1pbnZhbGlkJzogaW52YWxpZFxuXHRcdFx0XHR9XCJcblx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94IGNkcy0tY29tYm8tYm94XCJcblx0XHRcdFx0W2F0dHIuZGF0YS1pbnZhbGlkXT1cIihpbnZhbGlkID8gdHJ1ZSA6IG51bGwpXCI+XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hfX2ZpZWxkXCJcblx0XHRcdFx0XHQoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKVwiXG5cdFx0XHRcdFx0KGJsdXIpPVwib25CbHVyKClcIj5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHQqbmdJZj1cInR5cGUgPT09ICdtdWx0aScgJiYgcGlsbHMubGVuZ3RoID4gMFwiXG5cdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tdGFnIGNkcy0tdGFnLS1maWx0ZXIgY2RzLS10YWctLWhpZ2gtY29udHJhc3RcIlxuXHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwieydjZHMtLXRhZy0tZGlzYWJsZWQnOiBkaXNhYmxlZCB8fCByZWFkb25seX1cIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiY2RzLS10YWdfX2xhYmVsXCI+e3sgcGlsbHMubGVuZ3RoIH19PC9zcGFuPlxuXHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNsZWFyU2VsZWN0ZWQoJGV2ZW50KVwiXG5cdFx0XHRcdFx0XHRcdChibHVyKT1cIm9uQmx1cigpXCJcblx0XHRcdFx0XHRcdFx0KGtleWRvd24uZW50ZXIpPVwiY2xlYXJTZWxlY3RlZCgkZXZlbnQpXCJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLXRhZ19fY2xvc2UtaWNvblwiXG5cdFx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMFwiXG5cdFx0XHRcdFx0XHRcdFt0aXRsZV09XCJjbGVhclNlbGVjdGlvbnNUaXRsZVwiXG5cdFx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCByZWFkb25seVwiXG5cdFx0XHRcdFx0XHRcdFthdHRyLmFyaWEtbGFiZWxdPVwiY2xlYXJTZWxlY3Rpb25BcmlhXCI+XG5cdFx0XHRcdFx0XHRcdDxzdmdcblx0XHRcdFx0XHRcdFx0XHRmb2N1c2FibGU9XCJmYWxzZVwiXG5cdFx0XHRcdFx0XHRcdFx0cHJlc2VydmVBc3BlY3RSYXRpbz1cInhNaWRZTWlkIG1lZXRcIlxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwid2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcIlxuXHRcdFx0XHRcdFx0XHRcdHJvbGU9XCJpbWdcIlxuXHRcdFx0XHRcdFx0XHRcdHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuXHRcdFx0XHRcdFx0XHRcdHdpZHRoPVwiMTZcIlxuXHRcdFx0XHRcdFx0XHRcdGhlaWdodD1cIjE2XCJcblx0XHRcdFx0XHRcdFx0XHR2aWV3Qm94PVwiMCAwIDE2IDE2XCJcblx0XHRcdFx0XHRcdFx0XHRhcmlhLWhpZGRlbj1cInRydWVcIj5cblx0XHRcdFx0XHRcdFx0XHQ8cGF0aCBkPVwiTTEyIDQuN2wtLjctLjdMOCA3LjMgNC43IDRsLS43LjdMNy4zIDggNCAxMS4zbC43LjdMOCA4LjdsMy4zIDMuMy43LS43TDguNyA4elwiPjwvcGF0aD5cblx0XHRcdFx0XHRcdFx0PC9zdmc+XG5cdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8aW5wdXRcblx0XHRcdFx0XHRcdCNpbnB1dFxuXHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdFx0YXV0b2NvbXBsZXRlPVwib2ZmXCJcblx0XHRcdFx0XHRcdHJvbGU9XCJjb21ib2JveFwiXG5cdFx0XHRcdFx0XHRbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuXHRcdFx0XHRcdFx0W3JlYWRPbmx5XT1cInJlYWRvbmx5XCJcblx0XHRcdFx0XHRcdChpbnB1dCk9XCJvblNlYXJjaCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG5cdFx0XHRcdFx0XHQoZm9jdXMpPVwiZmx1aWQgPyBoYW5kbGVGb2N1cygkZXZlbnQpIDogbnVsbFwiXG5cdFx0XHRcdFx0XHQoYmx1cik9XCJmbHVpZCA/IGhhbmRsZUZvY3VzKCRldmVudCkgOiBvbkJsdXIoKVwiXG5cdFx0XHRcdFx0XHQoa2V5ZG93bi5lbnRlcik9XCJvblN1Ym1pdCgkZXZlbnQpXCJcblx0XHRcdFx0XHRcdFt2YWx1ZV09XCJzZWxlY3RlZFZhbHVlXCJcblx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS10ZXh0LWlucHV0XCJcblx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS10ZXh0LWlucHV0LS1lbXB0eSc6ICFzaG93Q2xlYXJCdXR0b259XCJcblx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMFwiXG5cdFx0XHRcdFx0XHRbaWRdPVwiaWRcIlxuXHRcdFx0XHRcdFx0W2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsSWRcIlxuXHRcdFx0XHRcdFx0W2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuXCJcblx0XHRcdFx0XHRcdGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcblx0XHRcdFx0XHRcdFthdHRyLm1heGxlbmd0aF09XCJtYXhMZW5ndGhcIlxuXHRcdFx0XHRcdFx0W2F0dHIuYXJpYS1jb250cm9sc109XCJvcGVuID8gdmlldz8ubGlzdElkIDogbnVsbFwiXG5cdFx0XHRcdFx0XHRbYXR0ci5hcmlhLWF1dG9jb21wbGV0ZV09XCJhdXRvY29tcGxldGVcIlxuXHRcdFx0XHRcdFx0W3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIvPlxuXHRcdFx0XHRcdDxzdmdcblx0XHRcdFx0XHRcdCpuZ0lmPVwiaW52YWxpZFwiXG5cdFx0XHRcdFx0XHRjZHNJY29uPVwid2FybmluZy0tZmlsbGVkXCJcblx0XHRcdFx0XHRcdHNpemU9XCIxNlwiXG5cdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hfX2ludmFsaWQtaWNvblwiPlxuXHRcdFx0XHRcdDwvc3ZnPlxuXHRcdFx0XHRcdDxzdmdcblx0XHRcdFx0XHRcdCpuZ0lmPVwiIWludmFsaWQgJiYgd2FyblwiXG5cdFx0XHRcdFx0XHRjZHNJY29uPVwid2FybmluZy0tYWx0LS1maWxsZWRcIlxuXHRcdFx0XHRcdFx0c2l6ZT1cIjE2XCJcblx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveF9faW52YWxpZC1pY29uIGNkcy0tbGlzdC1ib3hfX2ludmFsaWQtaWNvbi0td2FybmluZ1wiPlxuXHRcdFx0XHRcdDwvc3ZnPlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdCpuZ0lmPVwic2hvd0NsZWFyQnV0dG9uXCJcblx0XHRcdFx0XHRcdHJvbGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19zZWxlY3Rpb25cIlxuXHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIwXCJcblx0XHRcdFx0XHRcdFthdHRyLmFyaWEtbGFiZWxdPVwiY2xlYXJTZWxlY3Rpb25BcmlhXCJcblx0XHRcdFx0XHRcdFt0aXRsZV09XCJjbGVhclNlbGVjdGlvblRpdGxlXCJcblx0XHRcdFx0XHRcdChrZXl1cC5lbnRlcik9XCJjbGVhcklucHV0KCRldmVudClcIlxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cImNsZWFySW5wdXQoJGV2ZW50KVwiXG5cdFx0XHRcdFx0XHQoYmx1cik9XCJvbkJsdXIoKVwiPlxuXHRcdFx0XHRcdFx0PHN2ZyBjZHNJY29uPVwiY2xvc2VcIiBzaXplPVwiMTZcIj48L3N2Zz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdHJvbGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19tZW51LWljb25cIlxuXHRcdFx0XHRcdFx0dGFiaW5kZXg9XCItMVwiXG5cdFx0XHRcdFx0XHRbdGl0bGVdPVwib3BlbiA/IGNsb3NlTWVudUFyaWEgOiBvcGVuTWVudUFyaWFcIlxuXHRcdFx0XHRcdFx0W2F0dHIuYXJpYS1sYWJlbF09XCJvcGVuID8gY2xvc2VNZW51QXJpYSA6IG9wZW5NZW51QXJpYVwiXG5cdFx0XHRcdFx0XHRbbmdDbGFzc109XCJ7J2Nkcy0tbGlzdC1ib3hfX21lbnUtaWNvbi0tb3Blbic6IG9wZW59XCI+XG5cdFx0XHRcdFx0XHQ8c3ZnIGNkc0ljb249XCJjaGV2cm9uLS1kb3duXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG5cdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0I2Ryb3Bkb3duTWVudVxuXHRcdFx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0XHRcdCdjZHMtLWxpc3QtYm94LS11cCc6IHRoaXMuZHJvcFVwICE9PSBudWxsICYmIHRoaXMuZHJvcFVwICE9PSB1bmRlZmluZWQgPyBkcm9wVXAgOiBfZHJvcFVwXG5cdFx0XHRcdFx0fVwiPlxuXHRcdFx0XHRcdDxuZy1jb250ZW50ICpuZ0lmPVwib3BlblwiPjwvbmctY29udGVudD5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxociAqbmdJZj1cImZsdWlkXCIgY2xhc3M9XCJjZHMtLWxpc3QtYm94X19kaXZpZGVyXCIgLz5cblx0XHRcdDxkaXZcblx0XHRcdFx0Km5nSWY9XCJoZWxwZXJUZXh0ICYmICFpbnZhbGlkICYmICF3YXJuICYmICFmbHVpZFwiXG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1mb3JtX19oZWxwZXItdGV4dFwiXG5cdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1mb3JtX19oZWxwZXItdGV4dC0tZGlzYWJsZWQnOiBkaXNhYmxlZH1cIj5cblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKGhlbHBlclRleHQpXCI+e3toZWxwZXJUZXh0fX08L25nLWNvbnRhaW5lcj5cblx0XHRcdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShoZWxwZXJUZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlbHBlclRleHRcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2ICpuZ0lmPVwiaW52YWxpZFwiIGNsYXNzPVwiY2RzLS1mb3JtLXJlcXVpcmVtZW50XCI+XG5cdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShpbnZhbGlkVGV4dClcIj57eyBpbnZhbGlkVGV4dCB9fTwvbmctY29udGFpbmVyPlxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGludmFsaWRUZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImludmFsaWRUZXh0XCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiAqbmdJZj1cIiFpbnZhbGlkICYmIHdhcm5cIiBjbGFzcz1cImNkcy0tZm9ybS1yZXF1aXJlbWVudFwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUod2FyblRleHQpXCI+e3t3YXJuVGV4dH19PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUod2FyblRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwid2FyblRleHRcIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdGAsXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IENvbWJvQm94LFxuXHRcdFx0bXVsdGk6IHRydWVcblx0XHR9XG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgQ29tYm9Cb3ggaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG5cdC8qKlxuXHQgKiBUZXh0IHRvIHNob3cgd2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkLlxuXHQgKi9cblx0QElucHV0KCkgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9wbGFjZWhvbGRlci5vdmVycmlkZSh2YWx1ZSk7XG5cdH1cblxuXHRnZXQgcGxhY2Vob2xkZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyLnZhbHVlO1xuXHR9XG5cdC8qKlxuXHQgKiBWYWx1ZSB0byBkaXNwbGF5IGZvciBhY2Nlc3NpYmlsaXR5IHB1cnBvc2VzIG9uIHRoZSBjb21ib2JveCBjb250cm9sIG1lbnUgd2hlbiBjbG9zZWRcblx0ICovXG5cdEBJbnB1dCgpIHNldCBvcGVuTWVudUFyaWEodmFsdWU6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPikge1xuXHRcdHRoaXMuX29wZW5NZW51QXJpYS5vdmVycmlkZSh2YWx1ZSk7XG5cdH1cblxuXHRnZXQgb3Blbk1lbnVBcmlhKCkge1xuXHRcdHJldHVybiB0aGlzLl9vcGVuTWVudUFyaWEudmFsdWU7XG5cdH1cblx0LyoqXG5cdCAqIFZhbHVlIHRvIGRpc3BsYXkgZm9yIGFjY2Vzc2liaWxpdHkgcHVycG9zZXMgb24gdGhlIGNvbWJvYm94IGNvbnRyb2wgbWVudSB3aGVuIG9wZW5lZFxuXHQgKi9cblx0QElucHV0KCkgc2V0IGNsb3NlTWVudUFyaWEodmFsdWU6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPikge1xuXHRcdHRoaXMuX2Nsb3NlTWVudUFyaWEub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IGNsb3NlTWVudUFyaWEoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2Nsb3NlTWVudUFyaWEudmFsdWU7XG5cdH1cblx0LyoqXG5cdCAqIFZhbHVlIHRvIGRpc3BsYXkgb24gdGhlIGNsZWFyIHNlbGVjdGlvbnMgaWNvbiwgd2hlbiBtdWx0aSBpcyBzZWxlY3RlZFxuXHQgKi9cblx0QElucHV0KCkgc2V0IGNsZWFyU2VsZWN0aW9uc1RpdGxlKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9jbGVhclNlbGVjdGlvbnNUaXRsZS5vdmVycmlkZSh2YWx1ZSk7XG5cdH1cblxuXHRnZXQgY2xlYXJTZWxlY3Rpb25zVGl0bGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NsZWFyU2VsZWN0aW9uc1RpdGxlLnZhbHVlO1xuXHR9XG5cdC8qKlxuXHQgKiBWYWx1ZSB0byBkaXNwbGF5IGZvciBhY2Nlc3NpYmlsaXR5IHB1cnBvc2VzIHRvIGNsZWFyIHNlbGVjdGlvbnMsIHdoZW4gbXVsdGkgaXMgc2VsZWN0ZWRcblx0ICovXG5cdEBJbnB1dCgpIHNldCBjbGVhclNlbGVjdGlvbnNBcmlhKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9jbGVhclNlbGVjdGlvbnNBcmlhLm92ZXJyaWRlKHZhbHVlKTtcblx0fVxuXG5cdGdldCBjbGVhclNlbGVjdGlvbnNBcmlhKCkge1xuXHRcdHJldHVybiB0aGlzLl9jbGVhclNlbGVjdGlvbnNBcmlhLnZhbHVlO1xuXHR9XG5cdC8qKlxuXHQgKiBWYWx1ZSB0byBkaXNwbGF5IG9uIHRoZSBjbGVhciB0aGUgc2VsZWN0ZWQgaXRlbSBpY29uLCB3aGVuIHNpbmdsZSBpcyBzZWxlY3RlZFxuXHQgKi9cblx0QElucHV0KCkgc2V0IGNsZWFyU2VsZWN0aW9uVGl0bGUodmFsdWU6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPikge1xuXHRcdHRoaXMuX2NsZWFyU2VsZWN0aW9uVGl0bGUub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IGNsZWFyU2VsZWN0aW9uVGl0bGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NsZWFyU2VsZWN0aW9uVGl0bGUudmFsdWU7XG5cdH1cblx0LyoqXG5cdCAqIFZhbHVlIHRvIGRpc3BsYXkgZm9yIGFjY2Vzc2liaWxpdHkgcHVycG9zZXMgb24gdGhlIGNsZWFyIHRoZSBzZWxlY3RlZCBpdGVtIGljb24sIHdoZW4gc2luZ2xlIGlzIHNlbGVjdGVkXG5cdCAqL1xuXHRASW5wdXQoKSBzZXQgY2xlYXJTZWxlY3Rpb25BcmlhKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9jbGVhclNlbGVjdGlvbkFyaWEub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IGNsZWFyU2VsZWN0aW9uQXJpYSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fY2xlYXJTZWxlY3Rpb25BcmlhLnZhbHVlO1xuXHR9XG5cdHN0YXRpYyBjb21ib0JveENvdW50ID0gMDtcblx0QElucHV0KCkgaWQgPSBgY29tYm9ib3gtJHtDb21ib0JveC5jb21ib0JveENvdW50Kyt9YDtcblx0QElucHV0KCkgbGFiZWxJZCA9IGBjb21ib2JveC1sYWJlbC0ke0NvbWJvQm94LmNvbWJvQm94Q291bnQrK31gO1xuXHQvKipcblx0ICogTGlzdCBvZiBpdGVtcyB0byBmaWxsIHRoZSBjb250ZW50IHdpdGguXG5cdCAqXG5cdCAqICoqRXhhbXBsZToqKlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIGl0ZW1zID0gW1xuXHQgKlx0XHR7XG5cdCAqXHRcdFx0Y29udGVudDogXCJBYmFjdXNcIixcblx0ICpcdFx0XHRzZWxlY3RlZDogZmFsc2Vcblx0ICpcdFx0fSxcblx0ICpcdFx0e1xuXHQgKlx0XHRcdGNvbnRlbnQ6IFwiQnl0ZVwiLFxuXHQgKlx0XHRcdHNlbGVjdGVkOiBmYWxzZSxcblx0ICpcdFx0fSxcblx0ICpcdFx0e1xuXHQgKlx0XHRcdGNvbnRlbnQ6IFwiQ29tcHV0ZXJcIixcblx0ICpcdFx0XHRzZWxlY3RlZDogZmFsc2Vcblx0ICpcdFx0fSxcblx0ICpcdFx0e1xuXHQgKlx0XHRcdGNvbnRlbnQ6IFwiRGlnaXRhbFwiLFxuXHQgKlx0XHRcdHNlbGVjdGVkOiBmYWxzZVxuXHQgKlx0XHR9XG5cdCAqIF07XG5cdCAqIGBgYFxuXHQgKlxuXHQgKi9cblx0QElucHV0KCkgaXRlbXM6IEFycmF5PExpc3RJdGVtPiA9IFtdO1xuXHQvKipcblx0ICogQ29tYm8gYm94IHR5cGUgKHN1cHBvcnRpbmcgc2luZ2xlIG9yIG11bHRpIHNlbGVjdGlvbiBvZiBpdGVtcykuXG5cdCAqL1xuXHRASW5wdXQoKSB0eXBlOiBcInNpbmdsZVwiIHwgXCJtdWx0aVwiID0gXCJzaW5nbGVcIjtcblx0LyoqXG5cdCAqIENvbWJvIGJveCByZW5kZXIgc2l6ZS5cblx0ICovXG5cdEBJbnB1dCgpIHNpemU6IFwic21cIiB8IFwibWRcIiB8IFwibGdcIiA9IFwibWRcIjtcblx0LyoqXG5cdCAqIFNwZWNpZmllcyB0aGUgcHJvcGVydHkgdG8gYmUgdXNlZCBhcyB0aGUgcmV0dXJuIHZhbHVlIHRvIGBuZ01vZGVsYFxuXHQgKi9cblx0QElucHV0KCkgaXRlbVZhbHVlS2V5OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBMYWJlbCBmb3IgdGhlIGNvbWJvYm94LlxuXHQgKi9cblx0QElucHV0KCkgbGFiZWw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgKiBIaWRlIGxhYmVsIHdoaWxlIGtlZXBpbmcgaXQgYWNjZXNzaWJsZSBmb3Igc2NyZWVuIHJlYWRlcnNcblx0ICovXG5cdEBJbnB1dCgpIGhpZGVMYWJlbCA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0cyB0aGUgb3B0aW9uYWwgaGVscGVyIHRleHQuXG5cdCAqL1xuXHRASW5wdXQoKSBoZWxwZXJUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogc2V0IHRvIGB0cnVlYCB0byBwbGFjZSB0aGUgZHJvcGRvd24gdmlldyBpbmxpbmUgd2l0aCB0aGUgY29tcG9uZW50XG5cdCAqL1xuXHRASW5wdXQoKSBhcHBlbmRJbmxpbmU6IGJvb2xlYW4gPSBudWxsO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCB0byBzaG93IHRoZSBpbnZhbGlkIHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuXHQvKipcblx0ICogVmFsdWUgZGlzcGxheWVkIGlmIGNvbWJvYm94IGlzIGluIGFuIGludmFsaWQgc3RhdGUuXG5cdCAqL1xuXHRASW5wdXQoKSBpbnZhbGlkVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCogU2V0IHRvIGB0cnVlYCB0byBzaG93IGEgd2FybmluZyAoY29udGVudHMgc2V0IGJ5IHdhcm5UZXh0KVxuXHQqL1xuXHRASW5wdXQoKSB3YXJuID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB3YXJuaW5nIHRleHRcblx0ICovXG5cdEBJbnB1dCgpIHdhcm5UZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogTWF4IGxlbmd0aCB2YWx1ZSB0byBsaW1pdCBpbnB1dCBjaGFyYWN0ZXJzXG5cdCAqL1xuXHRASW5wdXQoKSBtYXhMZW5ndGg6IG51bWJlciA9IG51bGw7XG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSB2NSAtIFVzZSBgY2RzTGF5ZXJgIGRpcmVjdGl2ZSBpbnN0ZWFkXG5cdCAqL1xuXHRASW5wdXQoKSB0aGVtZTogXCJsaWdodFwiIHwgXCJkYXJrXCIgPSBcImRhcmtcIjtcblx0LyoqXG5cdCAqIFNwZWNpZnkgZmVlZGJhY2sgKG1vZGUpIG9mIHRoZSBzZWxlY3Rpb24uXG5cdCAqIGB0b3BgOiBzZWxlY3RlZCBpdGVtIGp1bXBzIHRvIHRvcFxuXHQgKiBgZml4ZWRgOiBzZWxlY3RlZCBpdGVtIHN0YXlzIGF0IGl0cyBwb3NpdGlvblxuXHQgKiBgdG9wLWFmdGVyLXJlb3BlbmA6IHNlbGVjdGVkIGl0ZW0ganVtcCB0byB0b3AgYWZ0ZXIgcmVvcGVuIGRyb3Bkb3duXG5cdCAqL1xuXHRASW5wdXQoKSBzZWxlY3Rpb25GZWVkYmFjazogXCJ0b3BcIiB8IFwiZml4ZWRcIiB8IFwidG9wLWFmdGVyLXJlb3BlblwiID0gXCJ0b3AtYWZ0ZXItcmVvcGVuXCI7XG5cdC8qKlxuXHQgKiBTcGVjaWZ5IGFyaWEtYXV0b2NvbXBsZXRlIGF0dHJpYnV0ZSBvZiB0ZXh0IGlucHV0LlxuXHQgKiBcImxpc3RcIiwgaXMgdGhlIGV4cGVjdGVkIHZhbHVlIGZvciBhIGNvbWJvYm94IHRoYXQgaW52b2tlcyBhIGRyb3AtZG93biBsaXN0XG5cdCAqL1xuXHRASW5wdXQoKSBhdXRvY29tcGxldGUgPSBcImxpc3RcIjtcblx0LyoqXG5cdCAqIE92ZXJyaWRlcyB0aGUgYXV0b21hdGljIGRyb3BVcC5cblx0ICovXG5cdEBJbnB1dCgpIGRyb3BVcDogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gZGlzYWJsZSBjb21ib2JveC5cblx0ICovXG5cdEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGZvciByZWFkb25seSBzdGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBFeHBlcmltZW50YWw6IGVuYWJsZSBmbHVpZCBzdGF0ZVxuXHQgKi9cblx0QElucHV0KCkgZmx1aWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIEVtaXRzIGEgTGlzdEl0ZW1cblx0ICpcblx0ICogRXhhbXBsZTpcblx0ICogYGBgamF2YXNjcmlwdFxuXHQgKiB7XG5cdCAqIFx0XHRjb250ZW50OiBcIm9uZVwiLFxuXHQgKiBcdFx0c2VsZWN0ZWQ6IHRydWVcblx0ICogfVxuXHQgKiBgYGBcblx0ICovXG5cdEBPdXRwdXQoKSBzZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TGlzdEl0ZW0gfCBMaXN0SXRlbVtdPigpO1xuXHQvKipcblx0ICogSW50ZW5kZWQgdG8gYmUgdXNlZCB0byBhZGQgaXRlbXMgdG8gdGhlIGxpc3QuXG5cdCAqXG5cdCAqIEVtaXRzIGFuIGV2ZW50IHRoYXQgaW5jbHVkZXMgdGhlIGN1cnJlbnQgaXRlbSBsaXN0LCB0aGUgc3VnZ2VzdGVkIGluZGV4IGZvciB0aGUgbmV3IGl0ZW0sIGFuZCBhIHNpbXBsZSBMaXN0SXRlbVxuXHQgKlxuXHQgKiBFeGFtcGxlOlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqXHR7XG5cdCAqXHRcdGl0ZW1zOiBbe2NvbnRlbnQ6IFwib25lXCIsIHNlbGVjdGVkOiB0cnVlfSwge2NvbnRlbnQ6IFwidHdvXCIsIHNlbGVjdGVkOiB0cnVlfV0sXG5cdCAqXHRcdGluZGV4OiAxLFxuXHQgKlx0XHR2YWx1ZToge1xuXHQgKlx0XHRcdGNvbnRlbnQ6IFwic29tZSB1c2VyIHN0cmluZ1wiLFxuXHQgKlx0XHRcdHNlbGVjdGVkOiBmYWxzZVxuXHQgKlx0XHR9XG5cdCAqXHR9XG5cdCAqIGBgYFxuXHQgKlxuXHQgKlxuXHQgKiBFeGFtcGxlOlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIHtcblx0ICpcdGFmdGVyOiAxLFxuXHQgKlx0dmFsdWU6IFwic29tZSB1c2VyIHN0cmluZ1wiXG5cdCAqIH1cblx0ICogYGBgXG5cdCAqL1xuXHRAT3V0cHV0KCkgc3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG5cdFx0aXRlbXM6IExpc3RJdGVtW10sXG5cdFx0aW5kZXg6IG51bWJlcixcblx0XHR2YWx1ZToge1xuXHRcdFx0Y29udGVudDogc3RyaW5nLFxuXHRcdFx0c2VsZWN0ZWQ6IGJvb2xlYW5cblx0XHR9XG5cdH0+KCk7XG5cdC8qKiBFbWl0cyBhbiBlbXB0eSBldmVudCB3aGVuIHRoZSBtZW51IGlzIGNsb3NlZCAqL1xuXHRAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cdC8qKiBFbWl0cyB0aGUgc2VhcmNoIHN0cmluZyBmcm9tIHRoZSBpbnB1dCAqL1xuXHRAT3V0cHV0KCkgc2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cdC8qKiBFbWl0cyBhbiBldmVudCB3aGVuIHRoZSBjbGVhciBidXR0b24gaXMgY2xpY2tlZC4gKi9cblx0QE91dHB1dCgpIGNsZWFyID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblx0LyoqIENvbnRlbnRDaGlsZCByZWZlcmVuY2UgdG8gdGhlIGluc3RhbnRpYXRlZCBkcm9wZG93biBsaXN0ICovXG5cdEBDb250ZW50Q2hpbGQoQWJzdHJhY3REcm9wZG93blZpZXcsIHsgc3RhdGljOiB0cnVlIH0pIHZpZXc6IEFic3RyYWN0RHJvcGRvd25WaWV3O1xuXHRAVmlld0NoaWxkKFwiZHJvcGRvd25NZW51XCIpIGRyb3Bkb3duTWVudTtcblx0QFZpZXdDaGlsZChcImlucHV0XCIsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0OiBFbGVtZW50UmVmO1xuXHRAVmlld0NoaWxkKFwibGlzdGJveFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBsaXN0Ym94OiBFbGVtZW50UmVmO1xuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWxpc3QtYm94X193cmFwcGVyXCIpIGhvc3RDbGFzcyA9IHRydWU7XG5cblx0cHVibGljIG9wZW4gPSBmYWxzZTtcblxuXHRwdWJsaWMgc2hvd0NsZWFyQnV0dG9uID0gZmFsc2U7XG5cblx0LyoqIFNlbGVjdGVkIGl0ZW1zIGZvciBtdWx0aS1zZWxlY3QgY29tYm8tYm94ZXMuICovXG5cdHB1YmxpYyBwaWxscyA9IFtdO1xuXHQvKiogdXNlZCB0byB1cGRhdGUgdGhlIGRpc3BsYXlWYWx1ZSAqL1xuXHRwdWJsaWMgc2VsZWN0ZWRWYWx1ZSA9IFwiXCI7XG5cblx0b3V0c2lkZUNsaWNrID0gdGhpcy5fb3V0c2lkZUNsaWNrLmJpbmQodGhpcyk7XG5cdGtleWJvYXJkTmF2ID0gdGhpcy5fa2V5Ym9hcmROYXYuYmluZCh0aGlzKTtcblx0LyoqXG5cdCAqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGBkcm9wLXVwYCBjbGFzcyBpcyBhcHBsaWVkXG5cdCAqL1xuXHRfZHJvcFVwID0gZmFsc2U7XG5cblx0cHJvdGVjdGVkIG5vb3AgPSB0aGlzLl9ub29wLmJpbmQodGhpcyk7XG5cdHByb3RlY3RlZCBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IHRoaXMuX25vb3A7XG5cdHByb3RlY3RlZCBwcm9wYWdhdGVDaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IHRoaXMuX25vb3A7XG5cblx0cHJvdGVjdGVkIF9wbGFjZWhvbGRlciA9IHRoaXMuaTE4bi5nZXRPdmVycmlkYWJsZShcIkNPTUJPQk9YLlBMQUNFSE9MREVSXCIpO1xuXHRwcm90ZWN0ZWQgX2Nsb3NlTWVudUFyaWEgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJDT01CT0JPWC5BMTFZLkNMT1NFX01FTlVcIik7XG5cdHByb3RlY3RlZCBfb3Blbk1lbnVBcmlhID0gdGhpcy5pMThuLmdldE92ZXJyaWRhYmxlKFwiQ09NQk9CT1guQTExWS5PUEVOX01FTlVcIik7XG5cdHByb3RlY3RlZCBfY2xlYXJTZWxlY3Rpb25zVGl0bGUgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJDT01CT0JPWC5DTEVBUl9TRUxFQ1RJT05TXCIpO1xuXHRwcm90ZWN0ZWQgX2NsZWFyU2VsZWN0aW9uc0FyaWEgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJDT01CT0JPWC5BMTFZLkNMRUFSX1NFTEVDVElPTlNcIik7XG5cdHByb3RlY3RlZCBfY2xlYXJTZWxlY3Rpb25UaXRsZSA9IHRoaXMuaTE4bi5nZXRPdmVycmlkYWJsZShcIkNPTUJPQk9YLkNMRUFSX1NFTEVDVEVEXCIpO1xuXHRwcm90ZWN0ZWQgX2NsZWFyU2VsZWN0aW9uQXJpYSA9IHRoaXMuaTE4bi5nZXRPdmVycmlkYWJsZShcIkNPTUJPQk9YLkExMVkuQ0xFQVJfU0VMRUNURURcIik7XG5cblx0cHJvdGVjdGVkIF9pc0ZvY3VzZWQgPSBmYWxzZTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBDb21ib0JveC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuXHRcdHByb3RlY3RlZCBkcm9wZG93blNlcnZpY2U6IERyb3Bkb3duU2VydmljZSxcblx0XHRwcm90ZWN0ZWQgaTE4bjogSTE4blxuXHQpIHt9XG5cblx0LyoqXG5cdCAqIExpZmVjeWNsZSBob29rLlxuXHQgKiBVcGRhdGVzIHBpbGxzIGlmIG5lY2Vzc2FyeS5cblx0ICpcblx0ICovXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcblx0XHRpZiAoY2hhbmdlcy5pdGVtcykge1xuXHRcdFx0dGhpcy52aWV3Lml0ZW1zID0gY2hhbmdlcy5pdGVtcy5jdXJyZW50VmFsdWU7XG5cdFx0XHR0aGlzLnVwZGF0ZVNlbGVjdGVkKCk7XG5cdFx0XHQvLyBJZiBuZXcgaXRlbXMgYXJlIGFkZGVkIGludG8gdGhlIGNvbWJvYm94IHdoaWxlIHRoZXJlIGlzIHNlYXJjaCBpbnB1dCxcblx0XHRcdC8vIHJlcGVhdCB0aGUgc2VhcmNoLiBTZWFyY2ggc2hvdWxkIG9ubHkgdHJpZ2dlciBmb3IgdHlwZSAnc2luZ2xlJyB3aGVuIHRoZXJlIGlzIG5vIHZhbHVlIHNlbGVjdGVkLlxuXHRcdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiIHx8ICh0aGlzLnR5cGUgPT09IFwic2luZ2xlXCIgJiYgIXRoaXMuc2VsZWN0ZWRWYWx1ZSkpIHtcblx0XHRcdFx0dGhpcy5vblNlYXJjaCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBpbml0aWFsIHN0YXRlIHRoYXQgZGVwZW5kcyBvbiBjaGlsZCBjb21wb25lbnRzXG5cdCAqIFN1YnNjcmliZXMgdG8gc2VsZWN0IGV2ZW50cyBhbmQgaGFuZGxlcyBmb2N1cy9maWx0ZXJpbmcvaW5pdGlhbCBsaXN0IHVwZGF0ZXNcblx0ICovXG5cdG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcblx0XHRpZiAodGhpcy52aWV3KSB7XG5cdFx0XHR0aGlzLnZpZXcudHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGV2ZW50IGlzIG9yZ2FuaWMgKGlzVXBkYXRlID09PSBmYWxzZSkgb3IgcHJvZ3JhbW1hdGljXG5cdFx0XHRjb25zdCBpc1VwZGF0ZSA9IGV2ZW50ID0+IGV2ZW50ICYmIGV2ZW50LmlzVXBkYXRlO1xuXG5cdFx0XHR0aGlzLnZpZXcuc2VsZWN0LnN1YnNjcmliZShldmVudCA9PiB7XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlUGlsbHMoKTtcblx0XHRcdFx0XHRpZiAoIWlzVXBkYXRlKGV2ZW50KSkge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuaXRlbVZhbHVlS2V5ICYmIHRoaXMudmlldy5nZXRTZWxlY3RlZCgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlcyA9IHRoaXMudmlldy5nZXRTZWxlY3RlZCgpLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5pdGVtVmFsdWVLZXldKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2VDYWxsYmFjayh2YWx1ZXMpO1xuXHRcdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIGp1c3QgcGFzcyB1cCB0aGUgdmFsdWVzIGZyb20gYGdldFNlbGVjdGVkYFxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2VDYWxsYmFjayh0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBJZiB0eXBlIGlzIHNpbmdsZSwgZHJvcGRvd24gbGlzdCB3aWxsIGVtaXQgYW4gb2JqZWN0XG5cdFx0XHRcdFx0aWYgKGV2ZW50Lml0ZW0gJiYgZXZlbnQuaXRlbS5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdFx0dGhpcy5zaG93Q2xlYXJCdXR0b24gPSB0cnVlO1xuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZFZhbHVlID0gZXZlbnQuaXRlbS5jb250ZW50O1xuXG5cdFx0XHRcdFx0XHRpZiAoIWlzVXBkYXRlKGV2ZW50KSkge1xuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5pdGVtVmFsdWVLZXkpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZUNhbGxiYWNrKGV2ZW50Lml0ZW1bdGhpcy5pdGVtVmFsdWVLZXldKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZUNhbGxiYWNrKGV2ZW50Lml0ZW0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IFwiXCI7XG5cdFx0XHRcdFx0XHRpZiAoIWlzVXBkYXRlKGV2ZW50KSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZUNhbGxiYWNrKG51bGwpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBub3QgZ3VhcmRpbmcgdGhlc2Ugc2luY2UgdGhlIG5hdGl2ZUVsZW1lbnQgaGFzIHRvIGJlIGxvYWRlZFxuXHRcdFx0XHRcdC8vIGZvciBzZWxlY3QgdG8gZXZlbiBmaXJlXG5cdFx0XHRcdFx0Ly8gb25seSBmb2N1cyBmb3IgXCJvcmdhbmljXCIgc2VsZWN0aW9uc1xuXHRcdFx0XHRcdGlmICghaXNVcGRhdGUoZXZlbnQpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIikuZm9jdXMoKTtcblx0XHRcdFx0XHRcdHRoaXMudmlldy5maWx0ZXJCeShcIlwiKTtcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWQuZW1pdChldmVudC5pdGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5jbG9zZURyb3Bkb3duKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Ly8gdXBkYXRlIHRoZSByZXN0IG9mIGNvbWJvYm94IHdpdGggYW55IHByZS1zZWxlY3RlZCBpdGVtc1xuXHRcdFx0Ly8gc2V0VGltZW91dCBqdXN0IGRlZmVycyB0aGUgY2FsbCB0byB0aGUgbmV4dCBjaGVjayBjeWNsZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMudXBkYXRlU2VsZWN0ZWQoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnZpZXcuYmx1ckludGVudC5waXBlKGZpbHRlcih2ID0+IHYgPT09IFwidG9wXCIpKS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmNkcy0tdGV4dC1pbnB1dFwiKS5mb2N1cygpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEJpbmRzIGV2ZW50IGhhbmRsZXJzIGFnYWluc3QgdGhlIHJlbmRlcmVkIHZpZXdcblx0ICovXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHQvLyBpZiBhcHBlbmRJbmxpbmUgaXMgZGVmYXVsdCB2YWx1ZWQgKG51bGwpIHdlIHNob3VsZDpcblx0XHQvLyAxLiBpZiB0aGVyZSBhcmUgc2Nyb2xsYWJsZSBwYXJlbnRzIChub3QgaW5jbHVkaW5nIGJvZHkpIGRvbid0IGFwcGVuZCBpbmxpbmVcblx0XHQvLyAgICB0aGlzIHNob3VsZCBhbHNvIGNvdmVyIHRoZSBjYXNlIHdoZXJlIHRoZSBkcm9wZG93biBpcyBpbiBhIG1vZGFsXG5cdFx0Ly8gICAgKHdoZXJlIHdlIF9kb18gd2FudCB0byBhcHBlbmQgdG8gdGhlIHBsYWNlaG9sZGVyKVxuXHRcdGlmICh0aGlzLmFwcGVuZElubGluZSA9PT0gbnVsbCAmJiBoYXNTY3JvbGxhYmxlUGFyZW50cyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpIHtcblx0XHRcdHRoaXMuYXBwZW5kSW5saW5lID0gZmFsc2U7XG5cdFx0Ly8gMi4gb3RoZXJ3aXNlIHdlIHNob3VsZCBhcHBlbmQgaW5saW5lXG5cdFx0fSBlbHNlIGlmICh0aGlzLmFwcGVuZElubGluZSA9PT0gbnVsbCkge1xuXHRcdFx0dGhpcy5hcHBlbmRJbmxpbmUgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmluZyB0aGUgYERyb3Bkb3duYCBmcm9tIHRoZSBib2R5IGlmIGl0IGlzIGFwcGVuZGVkIHRvIHRoZSBib2R5LlxuXHQgKi9cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0aWYgKCF0aGlzLmFwcGVuZElubGluZSkge1xuXHRcdFx0dGhpcy5fYXBwZW5kVG9Ecm9wZG93bigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIGBFc2NhcGUvVGFiYCBrZXkgY2xvc2luZyB0aGUgZHJvcGRvd24sIGFuZCBhcnJvdyB1cC9kb3duIGZvY3VzIHRvL2Zyb20gdGhlIGRyb3Bkb3duIGxpc3QuXG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKFwia2V5ZG93blwiLCBbXCIkZXZlbnRcIl0pXG5cdGhvc3RrZXlzKGV2OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0aWYgKGV2LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0dGhpcy5jbG9zZURyb3Bkb3duKCk7XG5cdFx0fSBlbHNlIGlmICgoZXYua2V5ID09PSBcIkFycm93RG93blwiKVxuXHRcdFx0JiYgKCF0aGlzLmRyb3Bkb3duTWVudSB8fCAhdGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5jb250YWlucyhldi50YXJnZXQpKSkge1xuXHRcdFx0ZXYucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMub3BlbkRyb3Bkb3duKCk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy52aWV3LmluaXRGb2N1cygpOyB9LCAwKTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLm9wZW4gJiYgZXYua2V5ID09PSBcIlRhYlwiICYmXG5cdFx0XHQodGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5jb250YWlucyhldi50YXJnZXQgYXMgTm9kZSkgfHwgZXYudGFyZ2V0ID09PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpXG5cdFx0KSB7XG5cdFx0XHR0aGlzLmNsb3NlRHJvcGRvd24oKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vcGVuICYmIGV2LmtleSA9PT0gXCJUYWJcIiAmJiBldi5zaGlmdEtleSkge1xuXHRcdFx0dGhpcy5jbG9zZURyb3Bkb3duKCk7XG5cdFx0fVxuXHR9XG5cblx0Lypcblx0ICogbm8tb3AgbWV0aG9kIGZvciBudWxsIGV2ZW50IGxpc3RlbmVycywgYW5kIG90aGVyIG5vIG9wIGNhbGxzXG5cdCAqL1xuXHRfbm9vcCgpIHt9XG5cblx0Lypcblx0ICogcHJvcGFnYXRlcyB0aGUgdmFsdWUgcHJvdmlkZWQgZnJvbSBuZ01vZGVsXG5cdCAqL1xuXHR3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcblx0XHRpZiAodGhpcy50eXBlID09PSBcInNpbmdsZVwiKSB7XG5cdFx0XHRpZiAodGhpcy5pdGVtVmFsdWVLZXkpIHtcblx0XHRcdFx0Ly8gY2xvbmUgdGhlIHNwZWNpZmllZCBpdGVtIGFuZCB1cGRhdGUgaXRzIHN0YXRlXG5cdFx0XHRcdGNvbnN0IG5ld1ZhbHVlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy52aWV3LmdldExpc3RJdGVtcygpLmZpbmQoaXRlbSA9PiBpdGVtW3RoaXMuaXRlbVZhbHVlS2V5XSA9PT0gdmFsdWUpKTtcblx0XHRcdFx0bmV3VmFsdWUuc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQoW25ld1ZhbHVlXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBhbGwgaXRlbXMgaW4gcHJvcGFnYXRlU2VsZWN0ZWQgbXVzdCBiZSBpdGVyYWJsZVxuXHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQoW3ZhbHVlIHx8IFwiXCJdKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc2hvd0NsZWFyQnV0dG9uID0gISEodmFsdWUgJiYgdGhpcy52aWV3LmdldFNlbGVjdGVkKCkubGVuZ3RoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuaXRlbVZhbHVlS2V5KSB7XG5cdFx0XHRcdC8vIGNsb25lIHRoZSBpdGVtcyBhbmQgdXBkYXRlIHRoZWlyIHN0YXRlIGJhc2VkIG9uIHRoZSByZWNlaXZlZCB2YWx1ZSBhcnJheVxuXHRcdFx0XHQvLyB0aGlzIHdheSB3ZSBkb24ndCBsb3NlIGFueSBhZGRpdGlvbmFsIG1ldGFkYXRhIHRoYXQgbWF5IGJlIHBhc3NlZCBpbiB2aWEgdGhlIGBpdGVtc2AgSW5wdXRcblx0XHRcdFx0bGV0IG5ld1ZhbHVlcyA9IFtdO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgdmFsdWUgPz8gW10pIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy52aWV3LmdldExpc3RJdGVtcygpKSB7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbVt0aGlzLml0ZW1WYWx1ZUtleV0gPT09IHYpIHtcblx0XHRcdFx0XHRcdFx0bmV3VmFsdWVzLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgaXRlbSwgeyBzZWxlY3RlZDogdHJ1ZSB9KSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMudmlldy5wcm9wYWdhdGVTZWxlY3RlZChuZXdWYWx1ZXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy52aWV3LnByb3BhZ2F0ZVNlbGVjdGVkKHZhbHVlID8gdmFsdWUgOiBbXCJcIl0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLnVwZGF0ZVNlbGVjdGVkKCk7XG5cdH1cblxuXHRvbkJsdXIoKSB7XG5cdFx0dGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xuXHR9XG5cblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2VDYWxsYmFjayA9IGZuO1xuXHR9XG5cblx0cmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuXHRcdHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBgQ29udHJvbFZhbHVlQWNjZXNzb3JgIG1ldGhvZCB0byBwcm9ncmFtbWF0aWNhbGx5IGRpc2FibGUgdGhlIGNvbWJvYm94LlxuXHQgKlxuXHQgKiBleDogYHRoaXMuZm9ybUdyb3VwLmdldChcIm15Q29vbENvbWJvYm94XCIpLmRpc2FibGUoKTtgXG5cdCAqL1xuXHRzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgYnkgYG4tcGlsbC1pbnB1dGAgd2hlbiB0aGUgc2VsZWN0ZWQgcGlsbHMgaGF2ZSBjaGFuZ2VkLlxuXHQgKi9cblx0cHVibGljIHVwZGF0ZVBpbGxzKCkge1xuXHRcdHRoaXMucGlsbHMgPSB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKSB8fCBbXTtcblx0XHR0aGlzLmNoZWNrRm9yUmVvcmRlcigpO1xuXHR9XG5cblx0cHVibGljIGNsZWFyU2VsZWN0ZWQoZXZlbnQpIHtcblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5tYXAoaXRlbSA9PiB7XG5cdFx0XHRpZiAoIWl0ZW0uZGlzYWJsZWQpIHtcblx0XHRcdFx0aXRlbS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0fSk7XG5cdFx0dGhpcy52aWV3Lml0ZW1zID0gdGhpcy5pdGVtcztcblx0XHR0aGlzLnVwZGF0ZVBpbGxzKCk7XG5cdFx0Ly8gY2xlYXJTZWxlY3RlZCBjYW4gb25seSBmaXJlIG9uIHR5cGU9bXVsdGlcblx0XHQvLyBzbyB3ZSBqdXN0IGVtaXQgZ2V0U2VsZWN0ZWQoKSAoanVzdCBpbiBjYXNlIHRoZXJlJ3MgYW55IGRpc2FibGVkIGJ1dCBzZWxlY3RlZCBpdGVtcylcblx0XHRjb25zdCBzZWxlY3RlZCA9IHRoaXMudmlldy5nZXRTZWxlY3RlZCgpO1xuXG5cdFx0Ly8gaW4gY2FzZSB0aGVyZSBhcmUgZGlzYWJsZWQgaXRlbXMgdGhleSBzaG91bGQgYmUgbWFwcGVkIGFjY29yZGluZyB0byBpdGVtVmFsdWVLZXlcblx0XHRpZiAodGhpcy5pdGVtVmFsdWVLZXkgJiYgc2VsZWN0ZWQpIHtcblx0XHRcdGNvbnN0IHZhbHVlcyA9IHNlbGVjdGVkLm1hcCgoaXRlbSkgPT4gaXRlbVt0aGlzLml0ZW1WYWx1ZUtleV0pO1xuXHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2VDYWxsYmFjayh2YWx1ZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZUNhbGxiYWNrKHNlbGVjdGVkKTtcblx0XHR9XG5cblx0XHR0aGlzLnNlbGVjdGVkLmVtaXQoc2VsZWN0ZWQgYXMgYW55KTtcblx0XHR0aGlzLmNsZWFyLmVtaXQoZXZlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgZHJvcGRvd24gYW5kIGVtaXRzIHRoZSBjbG9zZSBldmVudC5cblx0ICovXG5cdHB1YmxpYyBjbG9zZURyb3Bkb3duKCkge1xuXHRcdHRoaXMub3BlbiA9IGZhbHNlO1xuXHRcdHRoaXMuY2hlY2tGb3JSZW9yZGVyKCk7XG5cdFx0dGhpcy5jbG9zZS5lbWl0KCk7XG5cdFx0aWYgKCF0aGlzLmFwcGVuZElubGluZSkge1xuXHRcdFx0dGhpcy5fYXBwZW5kVG9Ecm9wZG93bigpO1xuXHRcdH1cblxuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLm91dHNpZGVDbGljaywgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGRyb3Bkb3duLlxuXHQgKi9cblx0cHVibGljIG9wZW5Ecm9wZG93bigpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7IHJldHVybjsgfVxuXHRcdHRoaXMub3BlbiA9IHRydWU7XG5cdFx0dGhpcy5fZHJvcFVwID0gZmFsc2U7XG5cblx0XHRpZiAoIXRoaXMuYXBwZW5kSW5saW5lKSB7XG5cdFx0XHR0aGlzLl9hcHBlbmRUb0JvZHkoKTtcblx0XHR9XG5cblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5vdXRzaWRlQ2xpY2ssIHRydWUpO1xuXG5cdFx0Ly8gc2V0IHRoZSBkcm9wZG93biBtZW51IHRvIGRyb3AgdXAgaWYgaXQgaXMgbmVhciB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW5cblx0XHQvLyBzZXRUaW1lb3V0IGxldHMgdXMgZG8gdGhlIGNhbGN1bGF0aW9ucyBhZnRlciBpdCBpcyB2aXNpYmxlIGluIHRoZSBET01cblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLmRyb3BVcCA9PT0gbnVsbCB8fCB0aGlzLmRyb3BVcCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuX2Ryb3BVcCA9IHRoaXMuX3Nob3VsZERyb3BVcCgpO1xuXHRcdFx0fVxuXHRcdH0sIDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvZ2dsZXMgdGhlIGRyb3Bkb3duLlxuXHQgKi9cblx0cHVibGljIHRvZ2dsZURyb3Bkb3duKCkge1xuXHRcdGlmICh0aGlzLm9wZW4pIHtcblx0XHRcdHRoaXMuY2xvc2VEcm9wZG93bigpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9wZW5Ecm9wZG93bigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBsaXN0IGdyb3VwIGZpbHRlciwgYW5kIG1hbmFnZXMgc2luZ2xlIHNlbGVjdCBpdGVtIHNlbGVjdGlvbi5cblx0ICovXG5cdHB1YmxpYyBvblNlYXJjaChzZWFyY2hTdHJpbmcsIHNob3VsZEVtaXRTZWFyY2ggPSB0cnVlKSB7XG5cdFx0aWYgKHNob3VsZEVtaXRTZWFyY2gpIHtcblx0XHRcdHRoaXMuc2VhcmNoLmVtaXQoc2VhcmNoU3RyaW5nKTtcblx0XHR9XG5cdFx0dGhpcy5zaG93Q2xlYXJCdXR0b24gPSAhIXNlYXJjaFN0cmluZztcblx0XHR0aGlzLnZpZXcuZmlsdGVyQnkoc2VhcmNoU3RyaW5nKTtcblx0XHRpZiAoc2VhcmNoU3RyaW5nICE9PSBcIlwiKSB7XG5cdFx0XHRpZiAoIXRoaXMub3Blbikge1xuXHRcdFx0XHR0aGlzLm9wZW5Ecm9wZG93bigpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNlbGVjdGVkVmFsdWUgPSBcIlwiO1xuXHRcdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiICYmXG5cdFx0XHRcdCh0aGlzLnNlbGVjdGlvbkZlZWRiYWNrID09PSBcInRvcFwiIHx8IHRoaXMuc2VsZWN0aW9uRmVlZGJhY2sgPT09IFwidG9wLWFmdGVyLXJlb3BlblwiKSkge1xuXHRcdFx0XHR0aGlzLnZpZXcucmVvcmRlclNlbGVjdGVkKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICh0aGlzLnR5cGUgPT09IFwic2luZ2xlXCIpIHtcblx0XHRcdC8vIGRlc2VsZWN0IGlmIHRoZSBpbnB1dCBkb2Vzbid0IG1hdGNoIHRoZSBjb250ZW50XG5cdFx0XHQvLyBvZiBhbnkgZ2l2ZW4gaXRlbVxuXHRcdFx0Y29uc3QgbWF0Y2hlcyA9IHRoaXMudmlldy5nZXRMaXN0SXRlbXMoKS5zb21lKGl0ZW0gPT4gaXRlbS5jb250ZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkpKTtcblx0XHRcdGlmICghbWF0Y2hlcykge1xuXHRcdFx0XHRjb25zdCBzZWxlY3RlZCA9IHRoaXMudmlldy5nZXRTZWxlY3RlZCgpO1xuXHRcdFx0XHRpZiAoIXNlbGVjdGVkIHx8ICFzZWxlY3RlZFswXSkge1xuXHRcdFx0XHRcdHRoaXMudmlldy5maWx0ZXJCeShzZWFyY2hTdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVuZGVkIHRvIGJlIHVzZWQgdG8gYWRkIGl0ZW1zIHRvIHRoZSBsaXN0LlxuXHQgKi9cblx0cHVibGljIG9uU3VibWl0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0dGhpcy5zdWJtaXQuZW1pdCh7XG5cdFx0XHRpdGVtczogdGhpcy52aWV3LmdldExpc3RJdGVtcygpLFxuXHRcdFx0aW5kZXg6IDAsXG5cdFx0XHR2YWx1ZToge1xuXHRcdFx0XHRjb250ZW50OiAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLFxuXHRcdFx0XHRzZWxlY3RlZDogZmFsc2Vcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGNsZWFySW5wdXQoZXZlbnQpIHtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0aWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnR5cGUgPT09IFwic2luZ2xlXCIpIHsgLy8gZG9uJ3Qgd2FudCB0byBjbGVhciBzZWxlY3RlZCBvciBjbG9zZSBpZiBtdWx0aVxuXHRcdFx0dGhpcy5jbGVhclNlbGVjdGVkKGV2ZW50KTtcblx0XHRcdHRoaXMuY2xvc2VEcm9wZG93bigpO1xuXHRcdH1cblxuXHRcdHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IFwiXCI7XG5cdFx0dGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcblxuXHRcdHRoaXMuc2hvd0NsZWFyQnV0dG9uID0gZmFsc2U7XG5cdFx0dGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0dGhpcy5vblNlYXJjaCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuXHR9XG5cblx0cHVibGljIGlzVGVtcGxhdGUodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIGtleWJvYXJkIGV2ZW50cyBzbyB1c2VycyBhcmUgY29udHJvbGxpbmcgdGhlIGBEcm9wZG93bmAgaW5zdGVhZCBvZiB1bmludGVudGlvbmFsbHkgY29udHJvbGxpbmcgb3V0c2lkZSBlbGVtZW50cy5cblx0ICovXG5cdF9rZXlib2FyZE5hdihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXHRcdGlmICgoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSAmJiB0aGlzLm9wZW4pIHtcblx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOyAgLy8gZG9uJ3QgdW5pbnRlbnRpb25hbGx5IGNsb3NlIG1vZGFsIGlmIGluc2lkZSBvZiBpdFxuXHRcdH1cblx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5jbG9zZURyb3Bkb3duKCk7XG5cdFx0XHR0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMub3BlbiAmJiBldmVudC5rZXkgPT09IFwiVGFiXCIpIHtcblx0XHRcdC8vIHRoaXMgd2F5IGZvY3VzIHdpbGwgc3RhcnQgb24gdGhlIG5leHQgZm9jdXNhYmxlIGl0ZW0gZnJvbSB0aGUgZHJvcGRvd25cblx0XHRcdC8vIG5vdCB0aGUgdG9wIG9mIHRoZSBib2R5IVxuXHRcdFx0dGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHR0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudChcImtleWRvd25cIiwgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBrZXk6IFwiVGFiXCIgfSkpO1xuXHRcdFx0dGhpcy5jbG9zZURyb3Bkb3duKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGBEcm9wZG93bmAgbGlzdCBhcyBhbiBlbGVtZW50IHRoYXQgaXMgYXBwZW5kZWQgdG8gdGhlIERPTSBib2R5LlxuXHQgKi9cblx0X2FwcGVuZFRvQm9keSgpIHtcblx0XHR0aGlzLmRyb3Bkb3duU2VydmljZS5hcHBlbmRUb0JvZHkoXG5cdFx0XHR0aGlzLmxpc3Rib3gubmF0aXZlRWxlbWVudCxcblx0XHRcdHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRgJHt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc05hbWV9JHt0aGlzLm9wZW4gPyBcIiBjZHMtLWxpc3QtYm94LS1leHBhbmRlZFwiIDogXCJcIn1gKTtcblx0XHR0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMua2V5Ym9hcmROYXYsIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGBEcm9wZG93bmAgbGlzdCBhcHBlbmRpbmcgaXQgdG8gdGhlIGRyb3Bkb3duIHBhcmVudCBvYmplY3QgaW5zdGVhZCBvZiB0aGUgYm9keS5cblx0ICovXG5cdF9hcHBlbmRUb0Ryb3Bkb3duKCkge1xuXHRcdHRoaXMuZHJvcGRvd25TZXJ2aWNlLmFwcGVuZFRvRHJvcGRvd24odGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXHRcdHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlib2FyZE5hdiwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgYERyb3Bkb3duYCBsaXN0IGlzIHZpc2libGUgd2l0aGluIGFsbCBzY3JvbGxhYmxlIHBhcmVudHMuXG5cdCAqIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBpbiBhIHZhbHVlIHRvIHRoZSBgZHJvcFVwYCBpbnB1dC5cblx0ICovXG5cdF9zaG91bGREcm9wVXAoKSB7XG5cdFx0Ly8gY2hlY2sgaWYgZHJvcGRvd25NZW51IGV4aXN0cyBmaXJzdC5cblx0XHRjb25zdCBtZW51ID0gdGhpcy5kcm9wZG93bk1lbnUgJiYgdGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmNkcy0tbGlzdC1ib3hfX21lbnVcIik7XG5cdFx0Ly8gY2hlY2sgaWYgbWVudSBleGlzdHMgZmlyc3QuXG5cdFx0Y29uc3QgbWVudVJlY3QgPSBtZW51ICYmIG1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0aWYgKG1lbnUgJiYgbWVudVJlY3QpIHtcblx0XHRcdGNvbnN0IHNjcm9sbGFibGVQYXJlbnRzID0gZ2V0U2Nyb2xsYWJsZVBhcmVudHMobWVudSk7XG5cdFx0XHRyZXR1cm4gc2Nyb2xsYWJsZVBhcmVudHMucmVkdWNlKChzaG91bGREcm9wVXA6IGJvb2xlYW4sIHBhcmVudDogSFRNTEVsZW1lbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyZW50UmVjdCA9IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0Y29uc3QgaXNCZWxvd1BhcmVudCA9ICEobWVudVJlY3QuYm90dG9tIDw9IHBhcmVudFJlY3QuYm90dG9tKTtcblx0XHRcdFx0cmV0dXJuIHNob3VsZERyb3BVcCB8fCBpc0JlbG93UGFyZW50O1xuXHRcdFx0fSwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBgRHJvcGRvd25gIGxpc3QuXG5cdCAqL1xuXHRfb3V0c2lkZUNsaWNrKGV2ZW50KSB7XG5cdFx0aWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG5cdFx0XHQvLyBpZiB3ZSdyZSBhcHBlbmRUb0JvZHkgdGhlIGxpc3QgaXNuJ3Qgd2l0aGluIHRoZSBfZWxlbWVudFJlZixcblx0XHRcdC8vIHNvIHdlJ3ZlIGdvdCB0byBjaGVjayBpZiBvdXIgdGFyZ2V0IGlzIHBvc3NpYmx5IGluIHRoZXJlIHRvby5cblx0XHRcdCF0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcblx0XHRcdHRoaXMuY2xvc2VEcm9wZG93bigpO1xuXHRcdH1cblx0fVxuXG5cdGhhbmRsZUZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG5cdFx0dGhpcy5faXNGb2N1c2VkID0gZXZlbnQudHlwZSA9PT0gXCJmb2N1c1wiO1xuXHR9XG5cblx0cHJvdGVjdGVkIHVwZGF0ZVNlbGVjdGVkKCkge1xuXHRcdGNvbnN0IHNlbGVjdGVkID0gdGhpcy52aWV3LmdldFNlbGVjdGVkKCk7XG5cdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZVBpbGxzKCk7XG5cdFx0fSBlbHNlIGlmIChzZWxlY3RlZCkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBzZWxlY3RlZFswXSA/IHNlbGVjdGVkWzBdLmNvbnRlbnQgOiBcIlwiO1xuXHRcdFx0Y29uc3QgY2hhbmdlQ2FsbGJhY2tWYWx1ZSA9IHNlbGVjdGVkWzBdID8gc2VsZWN0ZWRbMF0gOiBcIlwiO1xuXHRcdFx0dGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWU7XG5cdFx0XHR0aGlzLnNob3dDbGVhckJ1dHRvbiA9ICEhdmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIGNoZWNrRm9yUmVvcmRlcigpIHtcblx0XHRjb25zdCB0b3BBZnRlclJlb3BlbiA9ICF0aGlzLm9wZW4gJiYgdGhpcy5zZWxlY3Rpb25GZWVkYmFjayA9PT0gXCJ0b3AtYWZ0ZXItcmVvcGVuXCI7XG5cdFx0aWYgKCh0aGlzLnR5cGUgPT09IFwibXVsdGlcIikgJiYgKHRvcEFmdGVyUmVvcGVuIHx8IHRoaXMuc2VsZWN0aW9uRmVlZGJhY2sgPT09IFwidG9wXCIpKSB7XG5cdFx0XHR0aGlzLnZpZXcucmVvcmRlclNlbGVjdGVkKHRydWUpO1xuXHRcdH1cblx0fVxufVxuIl19