@ruc-lib/drawer 2.0.1 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -32,6 +32,16 @@ If you only need the Drawer component:
32
32
  npm install @ruc-lib/drawer
33
33
  ```
34
34
 
35
+ ### 📦 Version Compatibility
36
+
37
+ Please ensure you install the correct version of `@ruc-lib/drawer` based on your Angular version.
38
+
39
+ | Angular Version | Compatible `@ruc-lib/drawer` Version |
40
+ |--------------------|------------------------------------------|
41
+ | 15.x.x | `npm install @ruc-lib/drawer@^3.0.0` |
42
+ | 16.x.x | `npm install @ruc-lib/drawer@^3.0.0` |
43
+
44
+
35
45
  ## Usage
36
46
 
37
47
  ### 1. Import the Module
@@ -203,6 +213,22 @@ export class AppComponent {
203
213
  }
204
214
  ```
205
215
 
216
+ > ⚠️ **IMPORTANT: Custom Theme Usage in Angular Material**
217
+
218
+ When implementing **custom themes**, such as:
219
+
220
+ ```scss
221
+ .custom-theme-1 {
222
+ @include angular-material-theme($custom-theme);
223
+ }
224
+
225
+ // You must also include the typography mixin to ensure text styles are applied correctly as shown below:
226
+ .custom-theme-1 {
227
+ @include angular-material-theme($custom-theme);
228
+ @include mat.typography-level($theme-custom-typography-name, body-1);
229
+ }
230
+ ```
231
+
206
232
  # Contribution
207
233
 
208
234
  Contributions are welcome! Feel free to open issues or pull requests for any enhancements or fixes.
@@ -338,7 +338,7 @@ export class RuclibDrawerComponent {
338
338
  }
339
339
  }
340
340
  RuclibDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RuclibDrawerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
341
- RuclibDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RuclibDrawerComponent, selector: "uxp-ruclib-drawer", inputs: { rucInputData: "rucInputData", customTheme: "customTheme" }, outputs: { rucEvent: "rucEvent" }, host: { listeners: { "document:keydown.escape": "onKeydownHandler($event)" } }, viewQueries: [{ propertyName: "drawerComponentHost", first: true, predicate: ["drawerComponentHost"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: "<!-- \r\n Custom Backdrop element.\r\n Visible only when:\r\n - rucInputData.mode is 'over'\r\n - rucInputData.hasBackdrop is true (or undefined, defaulting to true)\r\n - drawerAnimationState is 'in' (drawer is open or opening)\r\n Animates using 'backdropFade' trigger.\r\n Clicking the backdrop will toggle the drawer for the current position.\r\n Background color can be customized via rucInputData.backdropBackgroundColor.\r\n-->\r\n<div class=\"custom-backdrop\"\r\n *ngIf=\"rucInputData.mode === 'over' && (rucInputData.hasBackdrop ?? true) && drawerAnimationState === 'in'\"\r\n [@backdropFade]=\"backdropAnimationParams\"\r\n (click)=\"handleBackdropClick()\"\r\n [style.background-color]=\"rucInputData.hasBackdrop ? rucInputData.backdropBackgroundColor : ''\">\r\n</div>\r\n\r\n<!-- \r\n Custom Dynamic Drawer element.\r\n This is the main panel that slides in and out.\r\n - Applies CSS classes based on currentDrawerPosition and customTheme.\r\n - Dynamically sets width and height based on drawer orientation and input data.\r\n - Uses one of four animation triggers (slideInOutLeft, slideInOutRight, slideInOutTop, slideInOutBottom)\r\n based on currentDrawerPosition. Only the active trigger runs its animation; others are set to an\r\n instant 'out' state to prevent interference.\r\n - Animation completion events are handled by onAnimationDone().\r\n-->\r\n<div class=\"dynamic-drawer\"\r\n [ngClass]=\"'drawer-' + currentDrawerPosition + ' ' + (customTheme || '')\"\r\n [style.width]=\"!isVerticalLayout ? effectiveDrawerDimension : '100%'\"\r\n [style.height]=\"isVerticalLayout ? effectiveDrawerDimension : '100%'\"\r\n\r\n [@slideInOutLeft]=\"currentDrawerPosition === 'left' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutLeft.done)=\"currentDrawerPosition === 'left' && onAnimationDone($event)\"\r\n\r\n [@slideInOutRight]=\"currentDrawerPosition === 'right' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutRight.done)=\"currentDrawerPosition === 'right' && onAnimationDone($event)\"\r\n\r\n [@slideInOutTop]=\"currentDrawerPosition === 'top' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutTop.done)=\"currentDrawerPosition === 'top' && onAnimationDone($event)\"\r\n\r\n [@slideInOutBottom]=\"currentDrawerPosition === 'bottom' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutBottom.done)=\"currentDrawerPosition === 'bottom' && onAnimationDone($event)\">\r\n\r\n <!-- Wrapper for the content inside the drawer, handles padding and layout. -->\r\n <div class=\"drawer-content-wrapper\">\r\n <!-- Optional title for the drawer. -->\r\n <h2 *ngIf=\"rucInputData.content?.drawerTitle\" class=\"ruclib-drawer-title\">\r\n {{ rucInputData.content?.drawerTitle }}\r\n </h2>\r\n <!-- \r\n Optional close button inside the drawer.\r\n Toggles the drawer for the current position when clicked.\r\n ARIA label provides accessibility.\r\n Dimensions can be customized via rucInputData.closeButtonDimensions.\r\n -->\r\n <button *ngIf=\"rucInputData.showCloseIcon\"\r\n mat-icon-button class=\"ruclib-drawer-close-button\"\r\n (click)=\"toggleDrawer(currentDrawerPosition)\"\r\n [attr.aria-label]=\"'Close ' + currentDrawerPosition + ' drawer'\"\r\n [style.width]=\"rucInputData.closeButtonDimensions?.width\"\r\n [style.height]=\"rucInputData.closeButtonDimensions?.height\">\r\n <!-- Material icon for the close button. Size can be customized. -->\r\n <mat-icon [style.font-size]=\"rucInputData.closeButtonDimensions?.iconSize\">close</mat-icon>\r\n </button>\r\n <!-- Main body content of the drawer. -->\r\n <div class=\"ruclib-drawer-body\">\r\n <!-- Host for dynamically injected component -->\r\n <ng-template #drawerComponentHost></ng-template>\r\n <!-- Fallback to HTML content if no component is provided -->\r\n <div *ngIf=\"!rucInputData.content?.drawerContentComponent\" [innerHTML]=\"rucInputData.content?.drawerBody || '' | safeHtml\"></div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- \r\n Angular Material Drawer Container.\r\n Acts as the main container for the drawer system, especially if 'side' or 'push' modes\r\n were to be implemented with MatDrawer's native behavior. With custom fixed-position animations,\r\n its primary role here is to host the mat-drawer-content.\r\n - Applies 'vertical-layout' class if the drawer is top/bottom.\r\n - MatDrawer's own backdrop is disabled as a custom one is used.\r\n-->\r\n<mat-drawer-container\r\n class=\"ruclib-drawer-container\"\r\n [class.vertical-layout]=\"isVerticalLayout\"\r\n [hasBackdrop]=\"false\"> <!-- MatDrawer's backdrop is not used with custom animation -->\r\n <mat-drawer-content class=\"ruclib-main-content\">\r\n <button [disabled]=\"rucInputData.disableToggleButtonInMainContent\"\r\n mat-raised-button\r\n color=\"primary\"\r\n title=\"Toggle Drawer\"\r\n class=\"drawer-toggle-button\"\r\n [style.width]=\"rucInputData.toggleButtonDimensions?.width\"\r\n [style.height]=\"rucInputData.toggleButtonDimensions?.height\"\r\n [style.padding]=\"rucInputData.toggleButtonDimensions?.padding\"\r\n [style.font-size]=\"rucInputData.toggleButtonDimensions?.fontSize\"\r\n (click)=\"toggleDrawer(currentDrawerPosition)\"\r\n [attr.aria-label]=\"getToggleButtonAriaLabel()\"\r\n [attr.aria-expanded]=\"drawerAnimationState === 'in'\">\r\n <!-- Optional Material icon for the toggle button. Show only if no image URL is provided. -->\r\n <mat-icon *ngIf=\"rucInputData.toggleButtonIcon && !rucInputData.toggleButtonImageUrl\" [style.font-size]=\"rucInputData.toggleButtonDimensions?.iconSize\">{{ rucInputData.toggleButtonIcon }}</mat-icon>\r\n <!-- Optional image for the toggle button. If present, it should fill the button. -->\r\n <img *ngIf=\"rucInputData.toggleButtonImageUrl\"\r\n [src]=\"rucInputData.toggleButtonImageUrl\"\r\n [alt]=\"rucInputData.toggleButtonImageAlt || 'Toggle Drawer'\"\r\n class=\"ruclib-drawer-toggle-image\"\r\n [style.width]=\"rucInputData.toggleButtonDimensions?.width\"\r\n [style.height]=\"rucInputData.toggleButtonDimensions?.height\"\r\n [style.padding]=\"rucInputData.toggleButtonDimensions?.padding\">\r\n <!-- Text for the toggle button. Show only if NO icon AND NO image URL is provided. -->\r\n <span *ngIf=\"!rucInputData.toggleButtonIcon && !rucInputData.toggleButtonImageUrl && (rucInputData.toggleButtonText?.open || rucInputData.toggleButtonText?.close)\">\r\n {{ drawerAnimationState === 'in' ? (rucInputData.toggleButtonText?.close || 'Close') : (rucInputData.toggleButtonText?.open || 'Open') }}\r\n </span>\r\n <!-- Text for the toggle button when an icon (but NO image) IS also present. -->\r\n <span *ngIf=\"rucInputData.toggleButtonIcon && !rucInputData.toggleButtonImageUrl && (rucInputData.toggleButtonText?.open || rucInputData.toggleButtonText?.close)\" class=\"toggle-button-text-with-icon\">\r\n {{ drawerAnimationState === 'in' ? (rucInputData.toggleButtonText?.close || 'Close') : (rucInputData.toggleButtonText?.open || 'Open') }}\r\n </span>\r\n </button>\r\n <!-- Main application content area, rendered from HTML string via safeHtml pipe. -->\r\n <div [innerHTML]=\"rucInputData.content?.mainBody || '' | safeHtml\"></div>\r\n </mat-drawer-content>\r\n</mat-drawer-container>", styles: [":host{display:block;position:relative;overflow:hidden}.custom-backdrop{position:absolute;inset:0;background-color:#000;z-index:999;visibility:hidden}.ruclib-drawer-container{width:100%;height:400px;border:1px solid #ccc;position:relative;overflow:hidden}.drawer-content-wrapper{padding:16px;position:relative;box-sizing:border-box;height:100%;display:flex;flex-direction:column}.ruclib-drawer-title{margin-top:0;margin-bottom:16px;font-size:1.5em;flex-shrink:0}.ruclib-drawer-close-button{position:absolute;top:8px;right:8px;padding:5px 0 0!important;flex-shrink:0}.ruclib-drawer-body{flex-grow:1;overflow-y:auto;word-break:break-word}.dynamic-drawer{background-color:var(--mat-sidenav-content-background-color, white);position:absolute;box-sizing:border-box;box-shadow:0 2px 10px #0003;z-index:1000;overflow:hidden}.dynamic-drawer.drawer-left{top:0;bottom:0;left:0}.dynamic-drawer.drawer-right{top:0;bottom:0;right:0}.dynamic-drawer.drawer-top{top:0;left:0;right:0}.dynamic-drawer.drawer-bottom{bottom:0;left:0;right:0}.dynamic-drawer.light-theme{background-color:#fff;color:#000000de}.dynamic-drawer.light-theme .ruclib-drawer-title{color:#000000de}.dynamic-drawer.light-theme .ruclib-drawer-close-button .mat-icon{color:#0000008a}.dynamic-drawer.dark-theme{background-color:#424242;color:#fff}.dynamic-drawer.dark-theme .ruclib-drawer-title,.dynamic-drawer.dark-theme .ruclib-drawer-close-button .mat-icon{color:#fff}.dynamic-drawer.custom-theme-one{background-color:#fff;color:#000000de}.dynamic-drawer.custom-theme-one .ruclib-drawer-title{color:#000000de}.dynamic-drawer.custom-theme-one .ruclib-drawer-close-button .mat-icon{color:#0000008a}.dynamic-drawer.custom-theme-two{background-color:#424242;color:#fff}.dynamic-drawer.custom-theme-two .ruclib-drawer-title,.dynamic-drawer.custom-theme-two .ruclib-drawer-close-button .mat-icon{color:#fff}.ruclib-drawer-toggle-image{object-fit:contain;display:block}.drawer-toggle-button{margin-bottom:15px;display:inline-flex;align-items:center;justify-content:center;gap:8px}.ruclib-main-content{padding:16px;display:flex;flex-direction:column;align-items:flex-start}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i4.MatDrawerContent, selector: "mat-drawer-content" }, { kind: "pipe", type: i5.SafeHtmlPipe, name: "safeHtml" }], animations: [
341
+ RuclibDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RuclibDrawerComponent, selector: "uxp-ruclib-drawer", inputs: { rucInputData: "rucInputData", customTheme: "customTheme" }, outputs: { rucEvent: "rucEvent" }, host: { listeners: { "document:keydown.escape": "onKeydownHandler($event)" } }, viewQueries: [{ propertyName: "drawerComponentHost", first: true, predicate: ["drawerComponentHost"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: "<!-- \r\n Custom Backdrop element.\r\n Visible only when:\r\n - rucInputData.mode is 'over'\r\n - rucInputData.hasBackdrop is true (or undefined, defaulting to true)\r\n - drawerAnimationState is 'in' (drawer is open or opening)\r\n Animates using 'backdropFade' trigger.\r\n Clicking the backdrop will toggle the drawer for the current position.\r\n Background color can be customized via rucInputData.backdropBackgroundColor.\r\n-->\r\n<div class=\"custom-backdrop\"\r\n *ngIf=\"rucInputData.mode === 'over' && (rucInputData.hasBackdrop ?? true) && drawerAnimationState === 'in'\"\r\n [@backdropFade]=\"backdropAnimationParams\"\r\n (click)=\"handleBackdropClick()\"\r\n [style.background-color]=\"rucInputData.hasBackdrop ? rucInputData.backdropBackgroundColor : ''\">\r\n</div>\r\n\r\n<!-- \r\n Custom Dynamic Drawer element.\r\n This is the main panel that slides in and out.\r\n - Applies CSS classes based on currentDrawerPosition and customTheme.\r\n - Dynamically sets width and height based on drawer orientation and input data.\r\n - Uses one of four animation triggers (slideInOutLeft, slideInOutRight, slideInOutTop, slideInOutBottom)\r\n based on currentDrawerPosition. Only the active trigger runs its animation; others are set to an\r\n instant 'out' state to prevent interference.\r\n - Animation completion events are handled by onAnimationDone().\r\n-->\r\n\r\n<div class=\"main\">\r\n <div class=\"dynamic-drawer\"\r\n [ngClass]=\"'drawer-' + currentDrawerPosition + ' ' + (customTheme || '')\"\r\n [style.width]=\"!isVerticalLayout ? effectiveDrawerDimension : '100%'\"\r\n [style.height]=\"isVerticalLayout ? effectiveDrawerDimension : '100%'\"\r\n\r\n [@slideInOutLeft]=\"currentDrawerPosition === 'left' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutLeft.done)=\"currentDrawerPosition === 'left' && onAnimationDone($event)\"\r\n\r\n [@slideInOutRight]=\"currentDrawerPosition === 'right' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutRight.done)=\"currentDrawerPosition === 'right' && onAnimationDone($event)\"\r\n\r\n [@slideInOutTop]=\"currentDrawerPosition === 'top' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutTop.done)=\"currentDrawerPosition === 'top' && onAnimationDone($event)\"\r\n\r\n [@slideInOutBottom]=\"currentDrawerPosition === 'bottom' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutBottom.done)=\"currentDrawerPosition === 'bottom' && onAnimationDone($event)\">\r\n\r\n <!-- Wrapper for the content inside the drawer, handles padding and layout. -->\r\n <div class=\"drawer-content-wrapper\">\r\n <!-- Optional title for the drawer. -->\r\n <h2 *ngIf=\"rucInputData.content?.drawerTitle\" class=\"ruclib-drawer-title\">\r\n {{ rucInputData.content?.drawerTitle }}\r\n </h2>\r\n <!-- \r\n Optional close button inside the drawer.\r\n Toggles the drawer for the current position when clicked.\r\n ARIA label provides accessibility.\r\n Dimensions can be customized via rucInputData.closeButtonDimensions.\r\n -->\r\n <button *ngIf=\"rucInputData.showCloseIcon\"\r\n mat-icon-button class=\"ruclib-drawer-close-button\"\r\n (click)=\"toggleDrawer(currentDrawerPosition)\"\r\n [attr.aria-label]=\"'Close ' + currentDrawerPosition + ' drawer'\"\r\n [style.width]=\"rucInputData.closeButtonDimensions?.width\"\r\n [style.height]=\"rucInputData.closeButtonDimensions?.height\">\r\n <!-- Material icon for the close button. Size can be customized. -->\r\n <mat-icon [style.font-size]=\"rucInputData.closeButtonDimensions?.iconSize\">close</mat-icon>\r\n </button>\r\n <!-- Main body content of the drawer. -->\r\n <div class=\"ruclib-drawer-body\">\r\n <!-- Host for dynamically injected component -->\r\n <ng-template #drawerComponentHost></ng-template>\r\n <!-- Fallback to HTML content if no component is provided -->\r\n <div *ngIf=\"!rucInputData.content?.drawerContentComponent\" [innerHTML]=\"rucInputData.content?.drawerBody || '' | safeHtml\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- \r\n Angular Material Drawer Container.\r\n Acts as the main container for the drawer system, especially if 'side' or 'push' modes\r\n were to be implemented with MatDrawer's native behavior. With custom fixed-position animations,\r\n its primary role here is to host the mat-drawer-content.\r\n - Applies 'vertical-layout' class if the drawer is top/bottom.\r\n - MatDrawer's own backdrop is disabled as a custom one is used.\r\n-->\r\n<mat-drawer-container\r\n class=\"ruclib-drawer-container\"\r\n [class.vertical-layout]=\"isVerticalLayout\"\r\n [hasBackdrop]=\"false\"> <!-- MatDrawer's backdrop is not used with custom animation -->\r\n <mat-drawer-content class=\"ruclib-main-content\">\r\n <button [disabled]=\"rucInputData.disableToggleButtonInMainContent\"\r\n mat-raised-button\r\n color=\"primary\"\r\n title=\"Toggle Drawer\"\r\n class=\"drawer-toggle-button\"\r\n [style.width]=\"rucInputData.toggleButtonDimensions?.width\"\r\n [style.height]=\"rucInputData.toggleButtonDimensions?.height\"\r\n [style.padding]=\"rucInputData.toggleButtonDimensions?.padding\"\r\n [style.font-size]=\"rucInputData.toggleButtonDimensions?.fontSize\"\r\n (click)=\"toggleDrawer(currentDrawerPosition)\"\r\n [attr.aria-label]=\"getToggleButtonAriaLabel()\"\r\n [attr.aria-expanded]=\"drawerAnimationState === 'in'\">\r\n <!-- Optional Material icon for the toggle button. Show only if no image URL is provided. -->\r\n <mat-icon *ngIf=\"rucInputData.toggleButtonIcon && !rucInputData.toggleButtonImageUrl\" [style.font-size]=\"rucInputData.toggleButtonDimensions?.iconSize\">{{ rucInputData.toggleButtonIcon }}</mat-icon>\r\n <!-- Optional image for the toggle button. If present, it should fill the button. -->\r\n <img *ngIf=\"rucInputData.toggleButtonImageUrl\"\r\n [src]=\"rucInputData.toggleButtonImageUrl\"\r\n [alt]=\"rucInputData.toggleButtonImageAlt || 'Toggle Drawer'\"\r\n class=\"ruclib-drawer-toggle-image\"\r\n [style.width]=\"rucInputData.toggleButtonDimensions?.width\"\r\n [style.height]=\"rucInputData.toggleButtonDimensions?.height\"\r\n [style.padding]=\"rucInputData.toggleButtonDimensions?.padding\">\r\n <!-- Text for the toggle button. Show only if NO icon AND NO image URL is provided. -->\r\n <span *ngIf=\"!rucInputData.toggleButtonIcon && !rucInputData.toggleButtonImageUrl && (rucInputData.toggleButtonText?.open || rucInputData.toggleButtonText?.close)\">\r\n {{ drawerAnimationState === 'in' ? (rucInputData.toggleButtonText?.close || 'Close') : (rucInputData.toggleButtonText?.open || 'Open') }}\r\n </span>\r\n <!-- Text for the toggle button when an icon (but NO image) IS also present. -->\r\n <span *ngIf=\"rucInputData.toggleButtonIcon && !rucInputData.toggleButtonImageUrl && (rucInputData.toggleButtonText?.open || rucInputData.toggleButtonText?.close)\" class=\"toggle-button-text-with-icon\">\r\n {{ drawerAnimationState === 'in' ? (rucInputData.toggleButtonText?.close || 'Close') : (rucInputData.toggleButtonText?.open || 'Open') }}\r\n </span>\r\n </button>\r\n <!-- Main application content area, rendered from HTML string via safeHtml pipe. -->\r\n <div [innerHTML]=\"rucInputData.content?.mainBody || '' | safeHtml\"></div>\r\n </mat-drawer-content>\r\n</mat-drawer-container>", styles: [".mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.main{font-size:16px;font-weight:400;line-height:24px;font-family:Roboto,sans-serif;letter-spacing:.03125em}.ruc-custom-theme{font-size:14px;font-weight:400;line-height:20px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-mdc-option{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal)}.ruc-custom-theme .mat-mdc-card-title{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-headline6-font-size, 20px);line-height:var(--mdc-typography-headline6-line-height, 32px);font-weight:var(--mdc-typography-headline6-font-weight, 500);letter-spacing:var(--mdc-typography-headline6-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-transform:var(--mdc-typography-headline6-text-transform, none)}.ruc-custom-theme .mat-mdc-card-subtitle{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle2-font-size, 20px);line-height:var(--mdc-typography-subtitle2-line-height, 24px);font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle2-text-transform, none)}.ruc-custom-theme .mat-mdc-tooltip{--mdc-plain-tooltip-supporting-text-font: Roboto, sans-serif;--mdc-plain-tooltip-supporting-text-size: 12px;--mdc-plain-tooltip-supporting-text-weight: 400;--mdc-plain-tooltip-supporting-text-tracking: normal}.ruc-custom-theme .mat-mdc-form-field-infix{min-height:56px}.ruc-custom-theme .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:28px}.ruc-custom-theme .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY( -34.75px) scale(var(--mat-mdc-form-field-floating-label-scale, .75));transform:var(--mat-mdc-form-field-label-transform)}.ruc-custom-theme .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:16px;padding-bottom:16px}.ruc-custom-theme .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding-top:24px;padding-bottom:8px}.ruc-custom-theme .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix{padding-top:16px;padding-bottom:16px}.ruc-custom-theme .mdc-text-field__input,.ruc-custom-theme .mdc-text-field__affix{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none)}.ruc-custom-theme .mdc-text-field--textarea .mdc-text-field__input{line-height:1.5rem}.ruc-custom-theme .mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none)}.ruc-custom-theme .mat-mdc-form-field-subscript-wrapper,.ruc-custom-theme .mat-mdc-form-field-bottom-align:before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-caption-font-size, 12px);line-height:var(--mdc-typography-caption-line-height, 20px);font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:var(--mdc-typography-caption-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:var(--mdc-typography-caption-text-transform, none)}.ruc-custom-theme .mat-mdc-form-field,.ruc-custom-theme .mat-mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:var(--mdc-typography-body1-text-transform, none)}.ruc-custom-theme .mat-mdc-form-field .mdc-text-field--outlined .mdc-floating-label--float-above{font-size:calc(15px * var(--mat-mdc-form-field-floating-label-scale, .75))}.ruc-custom-theme .mat-mdc-form-field .mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:15px}.ruc-custom-theme .mat-mdc-select-panel{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);line-height:var(--mdc-typography-subtitle1-line-height, 28px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none);line-height:24px}.ruc-custom-theme .mat-mdc-select{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:var(--mdc-typography-body1-text-transform, none)}.ruc-custom-theme .mat-mdc-autocomplete-panel{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);line-height:var(--mdc-typography-subtitle1-line-height, 28px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none);line-height:24px}.ruc-custom-theme .mat-mdc-dialog-container{--mdc-dialog-subhead-font: Roboto, sans-serif;--mdc-dialog-subhead-line-height: 32px;--mdc-dialog-subhead-size: 20px;--mdc-dialog-subhead-weight: 500;--mdc-dialog-subhead-tracking: normal;--mdc-dialog-supporting-text-font: Roboto, sans-serif;--mdc-dialog-supporting-text-line-height: 24px;--mdc-dialog-supporting-text-size: 15px;--mdc-dialog-supporting-text-weight: 400;--mdc-dialog-supporting-text-tracking: normal}.ruc-custom-theme .mat-mdc-chip{height:32px}.ruc-custom-theme .mat-mdc-standard-chip{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body2-font-size, 14px);line-height:var(--mdc-typography-body2-line-height, 20px);font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:var(--mdc-typography-body2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:var(--mdc-typography-body2-text-transform, none)}.ruc-custom-theme .mat-mdc-slide-toggle{--mdc-switch-state-layer-size: 48px}.ruc-custom-theme .mat-mdc-radio-button .mdc-radio{padding:10px}.ruc-custom-theme .mat-mdc-radio-button .mdc-radio .mdc-radio__background:before{top:-10px;left:-10px;width:40px;height:40px}.ruc-custom-theme .mat-mdc-radio-button .mdc-radio .mdc-radio__native-control{top:0;right:0;left:0;width:40px;height:40px}.ruc-custom-theme .mat-mdc-slider{--mdc-slider-label-label-text-font: Roboto, sans-serif;--mdc-slider-label-label-text-size: 20px;--mdc-slider-label-label-text-line-height: 24px;--mdc-slider-label-label-text-tracking: normal;--mdc-slider-label-label-text-weight: 500}.ruc-custom-theme .mat-mdc-menu-content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);line-height:var(--mdc-typography-subtitle1-line-height, 28px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none);line-height:24px}.ruc-custom-theme .mat-mdc-menu-content,.ruc-custom-theme .mat-mdc-menu-content .mat-mdc-menu-item .mdc-list-item__primary-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:var(--mdc-typography-body1-text-transform, none)}.ruc-custom-theme .mat-mdc-list-base{--mdc-list-list-item-one-line-container-height: 48px;--mdc-list-list-item-two-line-container-height: 64px;--mdc-list-list-item-three-line-container-height: 88px}.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-one-line,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-one-line,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-one-line{height:56px}.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines{height:72px}.ruc-custom-theme .mat-mdc-list-base{--mdc-list-list-item-label-text-font: Roboto, sans-serif;--mdc-list-list-item-label-text-line-height: 24px;--mdc-list-list-item-label-text-size: 15px;--mdc-list-list-item-label-text-tracking: normal;--mdc-list-list-item-label-text-weight: 400;--mdc-list-list-item-supporting-text-font: Roboto, sans-serif;--mdc-list-list-item-supporting-text-line-height: 20px;--mdc-list-list-item-supporting-text-size: 14px;--mdc-list-list-item-supporting-text-tracking: normal;--mdc-list-list-item-supporting-text-weight: 400;--mdc-list-list-item-trailing-supporting-text-font: Roboto, sans-serif;--mdc-list-list-item-trailing-supporting-text-line-height: 20px;--mdc-list-list-item-trailing-supporting-text-size: 12px;--mdc-list-list-item-trailing-supporting-text-tracking: normal;--mdc-list-list-item-trailing-supporting-text-weight: 400}.ruc-custom-theme .mdc-list-group__subheader{font-size:16px;font-weight:400;line-height:28px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-form-field-infix{min-height:40px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:20px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY( -26.75px) scale(var(--mat-mdc-form-field-floating-label-scale, .75));transform:var(--mat-mdc-form-field-label-transform)}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px}.ruc-custom-theme .mat-mdc-paginator .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-floating-label{display:none}.ruc-custom-theme .mat-mdc-paginator-container{min-height:56px}.ruc-custom-theme .mat-mdc-paginator{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-caption-font-size, 12px);line-height:var(--mdc-typography-caption-line-height, 20px);font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:var(--mdc-typography-caption-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:var(--mdc-typography-caption-text-transform, none)}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-select-value{font-size:12px}.ruc-custom-theme .mat-mdc-tab-header .mdc-tab{height:48px}.ruc-custom-theme .mdc-tab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-button-font-size, 20px);line-height:var(--mdc-typography-button-line-height, 60px);font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:var(--mdc-typography-button-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:var(--mdc-typography-button-text-transform, none)}.ruc-custom-theme .mat-mdc-checkbox .mdc-checkbox{padding:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2);margin:calc((var(--mdc-checkbox-touch-target-size, 40px) - 40px) / 2)}.ruc-custom-theme .mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__background{top:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2);left:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2)}.ruc-custom-theme .mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control{top:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);right:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);left:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);width:var(--mdc-checkbox-touch-target-size, 40px);height:var(--mdc-checkbox-touch-target-size, 40px)}@media all and (-ms-high-contrast: none){.ruc-custom-theme .mdc-checkbox .mdc-checkbox__focus-ring{display:none}}.ruc-custom-theme .mdc-form-field{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body2-font-size, 14px);line-height:var(--mdc-typography-body2-line-height, 20px);font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:var(--mdc-typography-body2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:var(--mdc-typography-body2-text-transform, none)}.ruc-custom-theme .mat-mdc-button.mat-mdc-button-base,.ruc-custom-theme .mat-mdc-raised-button.mat-mdc-button-base,.ruc-custom-theme .mat-mdc-unelevated-button.mat-mdc-button-base,.ruc-custom-theme .mat-mdc-outlined-button.mat-mdc-button-base{height:36px}.ruc-custom-theme .mdc-button{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-button-font-size, 20px);line-height:var(--mdc-typography-button-line-height, 60px);font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:var(--mdc-typography-button-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:var(--mdc-typography-button-text-transform, none)}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base{width:48px;height:48px;padding:12px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__focus-ring{max-height:48px;max-width:48px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:40px;height:40px;margin:4px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__focus-ring{max-height:40px;max-width:40px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%,-50%)}.ruc-custom-theme .mdc-fab--extended{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-button-font-size, 20px);line-height:var(--mdc-typography-button-line-height, 60px);font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:var(--mdc-typography-button-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:var(--mdc-typography-button-text-transform, none)}.ruc-custom-theme .mat-mdc-snack-bar-container{--mdc-snackbar-supporting-text-font: Roboto, sans-serif;--mdc-snackbar-supporting-text-line-height: 20px;--mdc-snackbar-supporting-text-size: 14px;--mdc-snackbar-supporting-text-weight: 400}.ruc-custom-theme .mat-mdc-table .mdc-data-table__row{height:52px}.ruc-custom-theme .mat-mdc-table .mdc-data-table__pagination{min-height:52px}.ruc-custom-theme .mat-mdc-table .mdc-data-table__header-row{height:56px}.ruc-custom-theme .mdc-data-table__content,.ruc-custom-theme .mdc-data-table__cell{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body2-font-size, 14px);line-height:var(--mdc-typography-body2-line-height, 20px);font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:var(--mdc-typography-body2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:var(--mdc-typography-body2-text-transform, none)}.ruc-custom-theme .mdc-data-table__header-cell{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle2-font-size, 20px);line-height:var(--mdc-typography-subtitle2-line-height, 24px);font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle2-text-transform, none)}.ruc-custom-theme .mat-badge{position:relative}.ruc-custom-theme .mat-badge.mat-badge{overflow:visible}.ruc-custom-theme .mat-badge-hidden .mat-badge-content{display:none}.ruc-custom-theme .mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform .2s ease-in-out;transform:scale(.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.ruc-custom-theme .ng-animate-disabled .mat-badge-content,.ruc-custom-theme .mat-badge-content._mat-animation-noopable{transition:none}.ruc-custom-theme .mat-badge-content.mat-badge-active{transform:none}.ruc-custom-theme .mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.ruc-custom-theme .mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.ruc-custom-theme .mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.ruc-custom-theme .mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.ruc-custom-theme .mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.ruc-custom-theme .mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.ruc-custom-theme .mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.ruc-custom-theme .mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.ruc-custom-theme .mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.ruc-custom-theme .mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.ruc-custom-theme .mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.ruc-custom-theme .mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.ruc-custom-theme .mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.ruc-custom-theme .mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.ruc-custom-theme .mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.ruc-custom-theme .mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto,sans-serif}.ruc-custom-theme .mat-badge-small .mat-badge-content{font-size:9px}.ruc-custom-theme .mat-badge-large .mat-badge-content{font-size:24px}.ruc-custom-theme .mat-bottom-sheet-container{font-size:14px;font-weight:400;line-height:20px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:48px}.ruc-custom-theme .mat-button-toggle{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base{width:40px;height:40px;padding:8px}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__focus-ring{max-height:40px;max-width:40px}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:40px;height:40px;margin:0}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__focus-ring{max-height:40px;max-width:40px}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__touch{position:absolute;top:50%;height:40px;left:50%;width:40px;transform:translate(-50%,-50%)}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base .mat-mdc-button-touch-target{display:none}.ruc-custom-theme .mat-calendar{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-calendar-body{font-size:13px}.ruc-custom-theme .mat-calendar-body-label,.ruc-custom-theme .mat-calendar-period-button{font-size:20px;font-weight:500}.ruc-custom-theme .mat-calendar-table-header th{font-size:11px;font-weight:400}.ruc-custom-theme .mat-expansion-panel-header{height:48px}.ruc-custom-theme .mat-expansion-panel-header.mat-expanded{height:64px}.ruc-custom-theme .mat-expansion-panel-header{font-family:Roboto,sans-serif;font-size:15px;font-weight:400}.ruc-custom-theme .mat-expansion-panel-content{font-size:14px;font-weight:400;line-height:20px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-grid-tile-header,.ruc-custom-theme .mat-grid-tile-footer{font-size:14px}.ruc-custom-theme .mat-grid-tile-header .mat-line,.ruc-custom-theme .mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.ruc-custom-theme .mat-grid-tile-header .mat-line:nth-child(n+2),.ruc-custom-theme .mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px}.ruc-custom-theme .mat-horizontal-stepper-header{height:72px}.ruc-custom-theme .mat-stepper-label-position-bottom .mat-horizontal-stepper-header,.ruc-custom-theme .mat-vertical-stepper-header{padding:24px}.ruc-custom-theme .mat-stepper-vertical-line:before{top:-16px;bottom:-16px}.ruc-custom-theme .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:after,.ruc-custom-theme .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:before{top:36px}.ruc-custom-theme .mat-stepper-label-position-bottom .mat-stepper-horizontal-line{top:36px}.ruc-custom-theme .mat-stepper-vertical,.ruc-custom-theme .mat-stepper-horizontal{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-step-label{font-size:14px;font-weight:400}.ruc-custom-theme .mat-step-sub-label-error{font-weight:400}.ruc-custom-theme .mat-step-label-error{font-size:20px}.ruc-custom-theme .mat-step-label-selected{font-size:20px;font-weight:500}.ruc-custom-theme .mat-toolbar-multiple-rows{min-height:64px}.ruc-custom-theme .mat-toolbar-row,.ruc-custom-theme .mat-toolbar-single-row{height:64px}@media (max-width: 599px){.ruc-custom-theme .mat-toolbar-multiple-rows{min-height:56px}.ruc-custom-theme .mat-toolbar-row,.ruc-custom-theme .mat-toolbar-single-row{height:56px}}.ruc-custom-theme .mat-toolbar,.ruc-custom-theme .mat-toolbar h1,.ruc-custom-theme .mat-toolbar h2,.ruc-custom-theme .mat-toolbar h3,.ruc-custom-theme .mat-toolbar h4,.ruc-custom-theme .mat-toolbar h5,.ruc-custom-theme .mat-toolbar h6{font-size:20px;font-weight:500;line-height:32px;font-family:Roboto,sans-serif;letter-spacing:normal;margin:0}.ruc-custom-theme .mat-tree-node{min-height:48px}.ruc-custom-theme .mat-tree{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-tree-node,.ruc-custom-theme .mat-nested-tree-node{font-weight:400;font-size:14px}:host{display:block;position:relative;overflow:hidden}.custom-backdrop{position:absolute;inset:0;background-color:#000;z-index:999;visibility:hidden}.ruclib-drawer-container{width:100%;height:400px;border:1px solid #ccc;position:relative;overflow:hidden}.drawer-content-wrapper{padding:16px;position:relative;box-sizing:border-box;height:100%;display:flex;flex-direction:column}.ruclib-drawer-title{margin-top:0;margin-bottom:16px;font-size:1.5em;flex-shrink:0}.ruclib-drawer-close-button{position:absolute;top:8px;right:8px;padding:5px 0 0!important;flex-shrink:0}.ruclib-drawer-body{flex-grow:1;overflow-y:auto;word-break:break-word}.dynamic-drawer{background-color:var(--mat-sidenav-content-background-color, white);position:absolute;box-sizing:border-box;box-shadow:0 2px 10px #0003;z-index:1000;overflow:hidden}.dynamic-drawer.drawer-left{top:0;bottom:0;left:0}.dynamic-drawer.drawer-right{top:0;bottom:0;right:0}.dynamic-drawer.drawer-top{top:0;left:0;right:0}.dynamic-drawer.drawer-bottom{bottom:0;left:0;right:0}.dynamic-drawer.light-theme{background-color:#fff;color:#000000de}.dynamic-drawer.light-theme .ruclib-drawer-title{color:#000000de}.dynamic-drawer.light-theme .ruclib-drawer-close-button .mat-icon{color:#0000008a}.dynamic-drawer.dark-theme{background-color:#424242;color:#fff}.dynamic-drawer.dark-theme .ruclib-drawer-title,.dynamic-drawer.dark-theme .ruclib-drawer-close-button .mat-icon{color:#fff}.dynamic-drawer.custom-theme-one{background-color:#fff;color:#000000de}.dynamic-drawer.custom-theme-one .ruclib-drawer-title{color:#000000de}.dynamic-drawer.custom-theme-one .ruclib-drawer-close-button .mat-icon{color:#0000008a}.dynamic-drawer.custom-theme-two{background-color:#424242;color:#fff}.dynamic-drawer.custom-theme-two .ruclib-drawer-title,.dynamic-drawer.custom-theme-two .ruclib-drawer-close-button .mat-icon{color:#fff}.ruclib-drawer-toggle-image{object-fit:contain;display:block}.drawer-toggle-button{margin-bottom:15px;display:inline-flex;align-items:center;justify-content:center;gap:8px}.ruclib-main-content{padding:16px;display:flex;flex-direction:column;align-items:flex-start}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i4.MatDrawerContent, selector: "mat-drawer-content" }, { kind: "pipe", type: i5.SafeHtmlPipe, name: "safeHtml" }], animations: [
342
342
  trigger('backdropFade', [
343
343
  state('out', style({ opacity: 0, visibility: 'hidden' })),
344
344
  state('in', style({ opacity: 0.6, visibility: 'visible' })),
@@ -395,7 +395,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
395
395
  state('in', style({ transform: 'translateY(0%)', visibility: 'visible' })),
396
396
  transition('out <=> in', animate('{{duration}} ease-in-out')),
397
397
  ])
398
- ], template: "<!-- \r\n Custom Backdrop element.\r\n Visible only when:\r\n - rucInputData.mode is 'over'\r\n - rucInputData.hasBackdrop is true (or undefined, defaulting to true)\r\n - drawerAnimationState is 'in' (drawer is open or opening)\r\n Animates using 'backdropFade' trigger.\r\n Clicking the backdrop will toggle the drawer for the current position.\r\n Background color can be customized via rucInputData.backdropBackgroundColor.\r\n-->\r\n<div class=\"custom-backdrop\"\r\n *ngIf=\"rucInputData.mode === 'over' && (rucInputData.hasBackdrop ?? true) && drawerAnimationState === 'in'\"\r\n [@backdropFade]=\"backdropAnimationParams\"\r\n (click)=\"handleBackdropClick()\"\r\n [style.background-color]=\"rucInputData.hasBackdrop ? rucInputData.backdropBackgroundColor : ''\">\r\n</div>\r\n\r\n<!-- \r\n Custom Dynamic Drawer element.\r\n This is the main panel that slides in and out.\r\n - Applies CSS classes based on currentDrawerPosition and customTheme.\r\n - Dynamically sets width and height based on drawer orientation and input data.\r\n - Uses one of four animation triggers (slideInOutLeft, slideInOutRight, slideInOutTop, slideInOutBottom)\r\n based on currentDrawerPosition. Only the active trigger runs its animation; others are set to an\r\n instant 'out' state to prevent interference.\r\n - Animation completion events are handled by onAnimationDone().\r\n-->\r\n<div class=\"dynamic-drawer\"\r\n [ngClass]=\"'drawer-' + currentDrawerPosition + ' ' + (customTheme || '')\"\r\n [style.width]=\"!isVerticalLayout ? effectiveDrawerDimension : '100%'\"\r\n [style.height]=\"isVerticalLayout ? effectiveDrawerDimension : '100%'\"\r\n\r\n [@slideInOutLeft]=\"currentDrawerPosition === 'left' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutLeft.done)=\"currentDrawerPosition === 'left' && onAnimationDone($event)\"\r\n\r\n [@slideInOutRight]=\"currentDrawerPosition === 'right' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutRight.done)=\"currentDrawerPosition === 'right' && onAnimationDone($event)\"\r\n\r\n [@slideInOutTop]=\"currentDrawerPosition === 'top' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutTop.done)=\"currentDrawerPosition === 'top' && onAnimationDone($event)\"\r\n\r\n [@slideInOutBottom]=\"currentDrawerPosition === 'bottom' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutBottom.done)=\"currentDrawerPosition === 'bottom' && onAnimationDone($event)\">\r\n\r\n <!-- Wrapper for the content inside the drawer, handles padding and layout. -->\r\n <div class=\"drawer-content-wrapper\">\r\n <!-- Optional title for the drawer. -->\r\n <h2 *ngIf=\"rucInputData.content?.drawerTitle\" class=\"ruclib-drawer-title\">\r\n {{ rucInputData.content?.drawerTitle }}\r\n </h2>\r\n <!-- \r\n Optional close button inside the drawer.\r\n Toggles the drawer for the current position when clicked.\r\n ARIA label provides accessibility.\r\n Dimensions can be customized via rucInputData.closeButtonDimensions.\r\n -->\r\n <button *ngIf=\"rucInputData.showCloseIcon\"\r\n mat-icon-button class=\"ruclib-drawer-close-button\"\r\n (click)=\"toggleDrawer(currentDrawerPosition)\"\r\n [attr.aria-label]=\"'Close ' + currentDrawerPosition + ' drawer'\"\r\n [style.width]=\"rucInputData.closeButtonDimensions?.width\"\r\n [style.height]=\"rucInputData.closeButtonDimensions?.height\">\r\n <!-- Material icon for the close button. Size can be customized. -->\r\n <mat-icon [style.font-size]=\"rucInputData.closeButtonDimensions?.iconSize\">close</mat-icon>\r\n </button>\r\n <!-- Main body content of the drawer. -->\r\n <div class=\"ruclib-drawer-body\">\r\n <!-- Host for dynamically injected component -->\r\n <ng-template #drawerComponentHost></ng-template>\r\n <!-- Fallback to HTML content if no component is provided -->\r\n <div *ngIf=\"!rucInputData.content?.drawerContentComponent\" [innerHTML]=\"rucInputData.content?.drawerBody || '' | safeHtml\"></div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- \r\n Angular Material Drawer Container.\r\n Acts as the main container for the drawer system, especially if 'side' or 'push' modes\r\n were to be implemented with MatDrawer's native behavior. With custom fixed-position animations,\r\n its primary role here is to host the mat-drawer-content.\r\n - Applies 'vertical-layout' class if the drawer is top/bottom.\r\n - MatDrawer's own backdrop is disabled as a custom one is used.\r\n-->\r\n<mat-drawer-container\r\n class=\"ruclib-drawer-container\"\r\n [class.vertical-layout]=\"isVerticalLayout\"\r\n [hasBackdrop]=\"false\"> <!-- MatDrawer's backdrop is not used with custom animation -->\r\n <mat-drawer-content class=\"ruclib-main-content\">\r\n <button [disabled]=\"rucInputData.disableToggleButtonInMainContent\"\r\n mat-raised-button\r\n color=\"primary\"\r\n title=\"Toggle Drawer\"\r\n class=\"drawer-toggle-button\"\r\n [style.width]=\"rucInputData.toggleButtonDimensions?.width\"\r\n [style.height]=\"rucInputData.toggleButtonDimensions?.height\"\r\n [style.padding]=\"rucInputData.toggleButtonDimensions?.padding\"\r\n [style.font-size]=\"rucInputData.toggleButtonDimensions?.fontSize\"\r\n (click)=\"toggleDrawer(currentDrawerPosition)\"\r\n [attr.aria-label]=\"getToggleButtonAriaLabel()\"\r\n [attr.aria-expanded]=\"drawerAnimationState === 'in'\">\r\n <!-- Optional Material icon for the toggle button. Show only if no image URL is provided. -->\r\n <mat-icon *ngIf=\"rucInputData.toggleButtonIcon && !rucInputData.toggleButtonImageUrl\" [style.font-size]=\"rucInputData.toggleButtonDimensions?.iconSize\">{{ rucInputData.toggleButtonIcon }}</mat-icon>\r\n <!-- Optional image for the toggle button. If present, it should fill the button. -->\r\n <img *ngIf=\"rucInputData.toggleButtonImageUrl\"\r\n [src]=\"rucInputData.toggleButtonImageUrl\"\r\n [alt]=\"rucInputData.toggleButtonImageAlt || 'Toggle Drawer'\"\r\n class=\"ruclib-drawer-toggle-image\"\r\n [style.width]=\"rucInputData.toggleButtonDimensions?.width\"\r\n [style.height]=\"rucInputData.toggleButtonDimensions?.height\"\r\n [style.padding]=\"rucInputData.toggleButtonDimensions?.padding\">\r\n <!-- Text for the toggle button. Show only if NO icon AND NO image URL is provided. -->\r\n <span *ngIf=\"!rucInputData.toggleButtonIcon && !rucInputData.toggleButtonImageUrl && (rucInputData.toggleButtonText?.open || rucInputData.toggleButtonText?.close)\">\r\n {{ drawerAnimationState === 'in' ? (rucInputData.toggleButtonText?.close || 'Close') : (rucInputData.toggleButtonText?.open || 'Open') }}\r\n </span>\r\n <!-- Text for the toggle button when an icon (but NO image) IS also present. -->\r\n <span *ngIf=\"rucInputData.toggleButtonIcon && !rucInputData.toggleButtonImageUrl && (rucInputData.toggleButtonText?.open || rucInputData.toggleButtonText?.close)\" class=\"toggle-button-text-with-icon\">\r\n {{ drawerAnimationState === 'in' ? (rucInputData.toggleButtonText?.close || 'Close') : (rucInputData.toggleButtonText?.open || 'Open') }}\r\n </span>\r\n </button>\r\n <!-- Main application content area, rendered from HTML string via safeHtml pipe. -->\r\n <div [innerHTML]=\"rucInputData.content?.mainBody || '' | safeHtml\"></div>\r\n </mat-drawer-content>\r\n</mat-drawer-container>", styles: [":host{display:block;position:relative;overflow:hidden}.custom-backdrop{position:absolute;inset:0;background-color:#000;z-index:999;visibility:hidden}.ruclib-drawer-container{width:100%;height:400px;border:1px solid #ccc;position:relative;overflow:hidden}.drawer-content-wrapper{padding:16px;position:relative;box-sizing:border-box;height:100%;display:flex;flex-direction:column}.ruclib-drawer-title{margin-top:0;margin-bottom:16px;font-size:1.5em;flex-shrink:0}.ruclib-drawer-close-button{position:absolute;top:8px;right:8px;padding:5px 0 0!important;flex-shrink:0}.ruclib-drawer-body{flex-grow:1;overflow-y:auto;word-break:break-word}.dynamic-drawer{background-color:var(--mat-sidenav-content-background-color, white);position:absolute;box-sizing:border-box;box-shadow:0 2px 10px #0003;z-index:1000;overflow:hidden}.dynamic-drawer.drawer-left{top:0;bottom:0;left:0}.dynamic-drawer.drawer-right{top:0;bottom:0;right:0}.dynamic-drawer.drawer-top{top:0;left:0;right:0}.dynamic-drawer.drawer-bottom{bottom:0;left:0;right:0}.dynamic-drawer.light-theme{background-color:#fff;color:#000000de}.dynamic-drawer.light-theme .ruclib-drawer-title{color:#000000de}.dynamic-drawer.light-theme .ruclib-drawer-close-button .mat-icon{color:#0000008a}.dynamic-drawer.dark-theme{background-color:#424242;color:#fff}.dynamic-drawer.dark-theme .ruclib-drawer-title,.dynamic-drawer.dark-theme .ruclib-drawer-close-button .mat-icon{color:#fff}.dynamic-drawer.custom-theme-one{background-color:#fff;color:#000000de}.dynamic-drawer.custom-theme-one .ruclib-drawer-title{color:#000000de}.dynamic-drawer.custom-theme-one .ruclib-drawer-close-button .mat-icon{color:#0000008a}.dynamic-drawer.custom-theme-two{background-color:#424242;color:#fff}.dynamic-drawer.custom-theme-two .ruclib-drawer-title,.dynamic-drawer.custom-theme-two .ruclib-drawer-close-button .mat-icon{color:#fff}.ruclib-drawer-toggle-image{object-fit:contain;display:block}.drawer-toggle-button{margin-bottom:15px;display:inline-flex;align-items:center;justify-content:center;gap:8px}.ruclib-main-content{padding:16px;display:flex;flex-direction:column;align-items:flex-start}\n"] }]
398
+ ], template: "<!-- \r\n Custom Backdrop element.\r\n Visible only when:\r\n - rucInputData.mode is 'over'\r\n - rucInputData.hasBackdrop is true (or undefined, defaulting to true)\r\n - drawerAnimationState is 'in' (drawer is open or opening)\r\n Animates using 'backdropFade' trigger.\r\n Clicking the backdrop will toggle the drawer for the current position.\r\n Background color can be customized via rucInputData.backdropBackgroundColor.\r\n-->\r\n<div class=\"custom-backdrop\"\r\n *ngIf=\"rucInputData.mode === 'over' && (rucInputData.hasBackdrop ?? true) && drawerAnimationState === 'in'\"\r\n [@backdropFade]=\"backdropAnimationParams\"\r\n (click)=\"handleBackdropClick()\"\r\n [style.background-color]=\"rucInputData.hasBackdrop ? rucInputData.backdropBackgroundColor : ''\">\r\n</div>\r\n\r\n<!-- \r\n Custom Dynamic Drawer element.\r\n This is the main panel that slides in and out.\r\n - Applies CSS classes based on currentDrawerPosition and customTheme.\r\n - Dynamically sets width and height based on drawer orientation and input data.\r\n - Uses one of four animation triggers (slideInOutLeft, slideInOutRight, slideInOutTop, slideInOutBottom)\r\n based on currentDrawerPosition. Only the active trigger runs its animation; others are set to an\r\n instant 'out' state to prevent interference.\r\n - Animation completion events are handled by onAnimationDone().\r\n-->\r\n\r\n<div class=\"main\">\r\n <div class=\"dynamic-drawer\"\r\n [ngClass]=\"'drawer-' + currentDrawerPosition + ' ' + (customTheme || '')\"\r\n [style.width]=\"!isVerticalLayout ? effectiveDrawerDimension : '100%'\"\r\n [style.height]=\"isVerticalLayout ? effectiveDrawerDimension : '100%'\"\r\n\r\n [@slideInOutLeft]=\"currentDrawerPosition === 'left' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutLeft.done)=\"currentDrawerPosition === 'left' && onAnimationDone($event)\"\r\n\r\n [@slideInOutRight]=\"currentDrawerPosition === 'right' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutRight.done)=\"currentDrawerPosition === 'right' && onAnimationDone($event)\"\r\n\r\n [@slideInOutTop]=\"currentDrawerPosition === 'top' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutTop.done)=\"currentDrawerPosition === 'top' && onAnimationDone($event)\"\r\n\r\n [@slideInOutBottom]=\"currentDrawerPosition === 'bottom' ? animationParams : {value: 'out', params: {duration: '0ms'}}\"\r\n (@slideInOutBottom.done)=\"currentDrawerPosition === 'bottom' && onAnimationDone($event)\">\r\n\r\n <!-- Wrapper for the content inside the drawer, handles padding and layout. -->\r\n <div class=\"drawer-content-wrapper\">\r\n <!-- Optional title for the drawer. -->\r\n <h2 *ngIf=\"rucInputData.content?.drawerTitle\" class=\"ruclib-drawer-title\">\r\n {{ rucInputData.content?.drawerTitle }}\r\n </h2>\r\n <!-- \r\n Optional close button inside the drawer.\r\n Toggles the drawer for the current position when clicked.\r\n ARIA label provides accessibility.\r\n Dimensions can be customized via rucInputData.closeButtonDimensions.\r\n -->\r\n <button *ngIf=\"rucInputData.showCloseIcon\"\r\n mat-icon-button class=\"ruclib-drawer-close-button\"\r\n (click)=\"toggleDrawer(currentDrawerPosition)\"\r\n [attr.aria-label]=\"'Close ' + currentDrawerPosition + ' drawer'\"\r\n [style.width]=\"rucInputData.closeButtonDimensions?.width\"\r\n [style.height]=\"rucInputData.closeButtonDimensions?.height\">\r\n <!-- Material icon for the close button. Size can be customized. -->\r\n <mat-icon [style.font-size]=\"rucInputData.closeButtonDimensions?.iconSize\">close</mat-icon>\r\n </button>\r\n <!-- Main body content of the drawer. -->\r\n <div class=\"ruclib-drawer-body\">\r\n <!-- Host for dynamically injected component -->\r\n <ng-template #drawerComponentHost></ng-template>\r\n <!-- Fallback to HTML content if no component is provided -->\r\n <div *ngIf=\"!rucInputData.content?.drawerContentComponent\" [innerHTML]=\"rucInputData.content?.drawerBody || '' | safeHtml\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- \r\n Angular Material Drawer Container.\r\n Acts as the main container for the drawer system, especially if 'side' or 'push' modes\r\n were to be implemented with MatDrawer's native behavior. With custom fixed-position animations,\r\n its primary role here is to host the mat-drawer-content.\r\n - Applies 'vertical-layout' class if the drawer is top/bottom.\r\n - MatDrawer's own backdrop is disabled as a custom one is used.\r\n-->\r\n<mat-drawer-container\r\n class=\"ruclib-drawer-container\"\r\n [class.vertical-layout]=\"isVerticalLayout\"\r\n [hasBackdrop]=\"false\"> <!-- MatDrawer's backdrop is not used with custom animation -->\r\n <mat-drawer-content class=\"ruclib-main-content\">\r\n <button [disabled]=\"rucInputData.disableToggleButtonInMainContent\"\r\n mat-raised-button\r\n color=\"primary\"\r\n title=\"Toggle Drawer\"\r\n class=\"drawer-toggle-button\"\r\n [style.width]=\"rucInputData.toggleButtonDimensions?.width\"\r\n [style.height]=\"rucInputData.toggleButtonDimensions?.height\"\r\n [style.padding]=\"rucInputData.toggleButtonDimensions?.padding\"\r\n [style.font-size]=\"rucInputData.toggleButtonDimensions?.fontSize\"\r\n (click)=\"toggleDrawer(currentDrawerPosition)\"\r\n [attr.aria-label]=\"getToggleButtonAriaLabel()\"\r\n [attr.aria-expanded]=\"drawerAnimationState === 'in'\">\r\n <!-- Optional Material icon for the toggle button. Show only if no image URL is provided. -->\r\n <mat-icon *ngIf=\"rucInputData.toggleButtonIcon && !rucInputData.toggleButtonImageUrl\" [style.font-size]=\"rucInputData.toggleButtonDimensions?.iconSize\">{{ rucInputData.toggleButtonIcon }}</mat-icon>\r\n <!-- Optional image for the toggle button. If present, it should fill the button. -->\r\n <img *ngIf=\"rucInputData.toggleButtonImageUrl\"\r\n [src]=\"rucInputData.toggleButtonImageUrl\"\r\n [alt]=\"rucInputData.toggleButtonImageAlt || 'Toggle Drawer'\"\r\n class=\"ruclib-drawer-toggle-image\"\r\n [style.width]=\"rucInputData.toggleButtonDimensions?.width\"\r\n [style.height]=\"rucInputData.toggleButtonDimensions?.height\"\r\n [style.padding]=\"rucInputData.toggleButtonDimensions?.padding\">\r\n <!-- Text for the toggle button. Show only if NO icon AND NO image URL is provided. -->\r\n <span *ngIf=\"!rucInputData.toggleButtonIcon && !rucInputData.toggleButtonImageUrl && (rucInputData.toggleButtonText?.open || rucInputData.toggleButtonText?.close)\">\r\n {{ drawerAnimationState === 'in' ? (rucInputData.toggleButtonText?.close || 'Close') : (rucInputData.toggleButtonText?.open || 'Open') }}\r\n </span>\r\n <!-- Text for the toggle button when an icon (but NO image) IS also present. -->\r\n <span *ngIf=\"rucInputData.toggleButtonIcon && !rucInputData.toggleButtonImageUrl && (rucInputData.toggleButtonText?.open || rucInputData.toggleButtonText?.close)\" class=\"toggle-button-text-with-icon\">\r\n {{ drawerAnimationState === 'in' ? (rucInputData.toggleButtonText?.close || 'Close') : (rucInputData.toggleButtonText?.open || 'Open') }}\r\n </span>\r\n </button>\r\n <!-- Main application content area, rendered from HTML string via safeHtml pipe. -->\r\n <div [innerHTML]=\"rucInputData.content?.mainBody || '' | safeHtml\"></div>\r\n </mat-drawer-content>\r\n</mat-drawer-container>", styles: [".mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0,0,.2,1);transform:scale3d(0,0,0)}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;inset:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity .4s cubic-bezier(.25,.8,.25,1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0!important;box-sizing:content-box!important;height:auto!important;overflow:hidden!important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0!important;box-sizing:content-box!important;height:0!important}@keyframes cdk-text-field-autofill-start{}@keyframes cdk-text-field-autofill-end{}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator:before{inset:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus:before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.main{font-size:16px;font-weight:400;line-height:24px;font-family:Roboto,sans-serif;letter-spacing:.03125em}.ruc-custom-theme{font-size:14px;font-weight:400;line-height:20px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-mdc-option{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal)}.ruc-custom-theme .mat-mdc-card-title{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-headline6-font-size, 20px);line-height:var(--mdc-typography-headline6-line-height, 32px);font-weight:var(--mdc-typography-headline6-font-weight, 500);letter-spacing:var(--mdc-typography-headline6-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-transform:var(--mdc-typography-headline6-text-transform, none)}.ruc-custom-theme .mat-mdc-card-subtitle{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle2-font-size, 20px);line-height:var(--mdc-typography-subtitle2-line-height, 24px);font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle2-text-transform, none)}.ruc-custom-theme .mat-mdc-tooltip{--mdc-plain-tooltip-supporting-text-font: Roboto, sans-serif;--mdc-plain-tooltip-supporting-text-size: 12px;--mdc-plain-tooltip-supporting-text-weight: 400;--mdc-plain-tooltip-supporting-text-tracking: normal}.ruc-custom-theme .mat-mdc-form-field-infix{min-height:56px}.ruc-custom-theme .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:28px}.ruc-custom-theme .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY( -34.75px) scale(var(--mat-mdc-form-field-floating-label-scale, .75));transform:var(--mat-mdc-form-field-label-transform)}.ruc-custom-theme .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:16px;padding-bottom:16px}.ruc-custom-theme .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding-top:24px;padding-bottom:8px}.ruc-custom-theme .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix{padding-top:16px;padding-bottom:16px}.ruc-custom-theme .mdc-text-field__input,.ruc-custom-theme .mdc-text-field__affix{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none)}.ruc-custom-theme .mdc-text-field--textarea .mdc-text-field__input{line-height:1.5rem}.ruc-custom-theme .mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none)}.ruc-custom-theme .mat-mdc-form-field-subscript-wrapper,.ruc-custom-theme .mat-mdc-form-field-bottom-align:before{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-caption-font-size, 12px);line-height:var(--mdc-typography-caption-line-height, 20px);font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:var(--mdc-typography-caption-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:var(--mdc-typography-caption-text-transform, none)}.ruc-custom-theme .mat-mdc-form-field,.ruc-custom-theme .mat-mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:var(--mdc-typography-body1-text-transform, none)}.ruc-custom-theme .mat-mdc-form-field .mdc-text-field--outlined .mdc-floating-label--float-above{font-size:calc(15px * var(--mat-mdc-form-field-floating-label-scale, .75))}.ruc-custom-theme .mat-mdc-form-field .mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:15px}.ruc-custom-theme .mat-mdc-select-panel{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);line-height:var(--mdc-typography-subtitle1-line-height, 28px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none);line-height:24px}.ruc-custom-theme .mat-mdc-select{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:var(--mdc-typography-body1-text-transform, none)}.ruc-custom-theme .mat-mdc-autocomplete-panel{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);line-height:var(--mdc-typography-subtitle1-line-height, 28px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none);line-height:24px}.ruc-custom-theme .mat-mdc-dialog-container{--mdc-dialog-subhead-font: Roboto, sans-serif;--mdc-dialog-subhead-line-height: 32px;--mdc-dialog-subhead-size: 20px;--mdc-dialog-subhead-weight: 500;--mdc-dialog-subhead-tracking: normal;--mdc-dialog-supporting-text-font: Roboto, sans-serif;--mdc-dialog-supporting-text-line-height: 24px;--mdc-dialog-supporting-text-size: 15px;--mdc-dialog-supporting-text-weight: 400;--mdc-dialog-supporting-text-tracking: normal}.ruc-custom-theme .mat-mdc-chip{height:32px}.ruc-custom-theme .mat-mdc-standard-chip{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body2-font-size, 14px);line-height:var(--mdc-typography-body2-line-height, 20px);font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:var(--mdc-typography-body2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:var(--mdc-typography-body2-text-transform, none)}.ruc-custom-theme .mat-mdc-slide-toggle{--mdc-switch-state-layer-size: 48px}.ruc-custom-theme .mat-mdc-radio-button .mdc-radio{padding:10px}.ruc-custom-theme .mat-mdc-radio-button .mdc-radio .mdc-radio__background:before{top:-10px;left:-10px;width:40px;height:40px}.ruc-custom-theme .mat-mdc-radio-button .mdc-radio .mdc-radio__native-control{top:0;right:0;left:0;width:40px;height:40px}.ruc-custom-theme .mat-mdc-slider{--mdc-slider-label-label-text-font: Roboto, sans-serif;--mdc-slider-label-label-text-size: 20px;--mdc-slider-label-label-text-line-height: 24px;--mdc-slider-label-label-text-tracking: normal;--mdc-slider-label-label-text-weight: 500}.ruc-custom-theme .mat-mdc-menu-content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle1-font-size, 16px);line-height:var(--mdc-typography-subtitle1-line-height, 28px);font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle1-text-transform, none);line-height:24px}.ruc-custom-theme .mat-mdc-menu-content,.ruc-custom-theme .mat-mdc-menu-content .mat-mdc-menu-item .mdc-list-item__primary-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body1-font-size, 15px);line-height:var(--mdc-typography-body1-line-height, 24px);font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:var(--mdc-typography-body1-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:var(--mdc-typography-body1-text-transform, none)}.ruc-custom-theme .mat-mdc-list-base{--mdc-list-list-item-one-line-container-height: 48px;--mdc-list-list-item-two-line-container-height: 64px;--mdc-list-list-item-three-line-container-height: 88px}.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-one-line,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-one-line,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-one-line{height:56px}.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines,.ruc-custom-theme .mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines{height:72px}.ruc-custom-theme .mat-mdc-list-base{--mdc-list-list-item-label-text-font: Roboto, sans-serif;--mdc-list-list-item-label-text-line-height: 24px;--mdc-list-list-item-label-text-size: 15px;--mdc-list-list-item-label-text-tracking: normal;--mdc-list-list-item-label-text-weight: 400;--mdc-list-list-item-supporting-text-font: Roboto, sans-serif;--mdc-list-list-item-supporting-text-line-height: 20px;--mdc-list-list-item-supporting-text-size: 14px;--mdc-list-list-item-supporting-text-tracking: normal;--mdc-list-list-item-supporting-text-weight: 400;--mdc-list-list-item-trailing-supporting-text-font: Roboto, sans-serif;--mdc-list-list-item-trailing-supporting-text-line-height: 20px;--mdc-list-list-item-trailing-supporting-text-size: 12px;--mdc-list-list-item-trailing-supporting-text-tracking: normal;--mdc-list-list-item-trailing-supporting-text-weight: 400}.ruc-custom-theme .mdc-list-group__subheader{font-size:16px;font-weight:400;line-height:28px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-form-field-infix{min-height:40px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-floating-label{top:20px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{--mat-mdc-form-field-label-transform: translateY( -26.75px) scale(var(--mat-mdc-form-field-floating-label-scale, .75));transform:var(--mat-mdc-form-field-label-transform)}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px}.ruc-custom-theme .mat-mdc-paginator .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix{padding-top:8px;padding-bottom:8px}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-floating-label{display:none}.ruc-custom-theme .mat-mdc-paginator-container{min-height:56px}.ruc-custom-theme .mat-mdc-paginator{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-caption-font-size, 12px);line-height:var(--mdc-typography-caption-line-height, 20px);font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:var(--mdc-typography-caption-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:var(--mdc-typography-caption-text-transform, none)}.ruc-custom-theme .mat-mdc-paginator .mat-mdc-select-value{font-size:12px}.ruc-custom-theme .mat-mdc-tab-header .mdc-tab{height:48px}.ruc-custom-theme .mdc-tab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-button-font-size, 20px);line-height:var(--mdc-typography-button-line-height, 60px);font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:var(--mdc-typography-button-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:var(--mdc-typography-button-text-transform, none)}.ruc-custom-theme .mat-mdc-checkbox .mdc-checkbox{padding:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2);margin:calc((var(--mdc-checkbox-touch-target-size, 40px) - 40px) / 2)}.ruc-custom-theme .mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__background{top:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2);left:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2)}.ruc-custom-theme .mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control{top:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);right:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);left:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);width:var(--mdc-checkbox-touch-target-size, 40px);height:var(--mdc-checkbox-touch-target-size, 40px)}@media all and (-ms-high-contrast: none){.ruc-custom-theme .mdc-checkbox .mdc-checkbox__focus-ring{display:none}}.ruc-custom-theme .mdc-form-field{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body2-font-size, 14px);line-height:var(--mdc-typography-body2-line-height, 20px);font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:var(--mdc-typography-body2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:var(--mdc-typography-body2-text-transform, none)}.ruc-custom-theme .mat-mdc-button.mat-mdc-button-base,.ruc-custom-theme .mat-mdc-raised-button.mat-mdc-button-base,.ruc-custom-theme .mat-mdc-unelevated-button.mat-mdc-button-base,.ruc-custom-theme .mat-mdc-outlined-button.mat-mdc-button-base{height:36px}.ruc-custom-theme .mdc-button{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-button-font-size, 20px);line-height:var(--mdc-typography-button-line-height, 60px);font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:var(--mdc-typography-button-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:var(--mdc-typography-button-text-transform, none)}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base{width:48px;height:48px;padding:12px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__focus-ring{max-height:48px;max-width:48px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:40px;height:40px;margin:4px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__focus-ring{max-height:40px;max-width:40px}.ruc-custom-theme .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%,-50%)}.ruc-custom-theme .mdc-fab--extended{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-button-font-size, 20px);line-height:var(--mdc-typography-button-line-height, 60px);font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:var(--mdc-typography-button-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-button-text-decoration, none);text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:var(--mdc-typography-button-text-transform, none)}.ruc-custom-theme .mat-mdc-snack-bar-container{--mdc-snackbar-supporting-text-font: Roboto, sans-serif;--mdc-snackbar-supporting-text-line-height: 20px;--mdc-snackbar-supporting-text-size: 14px;--mdc-snackbar-supporting-text-weight: 400}.ruc-custom-theme .mat-mdc-table .mdc-data-table__row{height:52px}.ruc-custom-theme .mat-mdc-table .mdc-data-table__pagination{min-height:52px}.ruc-custom-theme .mat-mdc-table .mdc-data-table__header-row{height:56px}.ruc-custom-theme .mdc-data-table__content,.ruc-custom-theme .mdc-data-table__cell{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-body2-font-size, 14px);line-height:var(--mdc-typography-body2-line-height, 20px);font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:var(--mdc-typography-body2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:var(--mdc-typography-body2-text-transform, none)}.ruc-custom-theme .mdc-data-table__header-cell{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mdc-typography-subtitle2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:var(--mdc-typography-subtitle2-font-size, 20px);line-height:var(--mdc-typography-subtitle2-line-height, 24px);font-weight:var(--mdc-typography-subtitle2-font-weight, 500);letter-spacing:var(--mdc-typography-subtitle2-letter-spacing, normal);-webkit-text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-decoration:var(--mdc-typography-subtitle2-text-decoration, inherit);text-transform:var(--mdc-typography-subtitle2-text-transform, none)}.ruc-custom-theme .mat-badge{position:relative}.ruc-custom-theme .mat-badge.mat-badge{overflow:visible}.ruc-custom-theme .mat-badge-hidden .mat-badge-content{display:none}.ruc-custom-theme .mat-badge-content{position:absolute;text-align:center;display:inline-block;border-radius:50%;transition:transform .2s ease-in-out;transform:scale(.6);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}.ruc-custom-theme .ng-animate-disabled .mat-badge-content,.ruc-custom-theme .mat-badge-content._mat-animation-noopable{transition:none}.ruc-custom-theme .mat-badge-content.mat-badge-active{transform:none}.ruc-custom-theme .mat-badge-small .mat-badge-content{width:16px;height:16px;line-height:16px}.ruc-custom-theme .mat-badge-small.mat-badge-above .mat-badge-content{top:-8px}.ruc-custom-theme .mat-badge-small.mat-badge-below .mat-badge-content{bottom:-8px}.ruc-custom-theme .mat-badge-small.mat-badge-before .mat-badge-content{left:-16px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-before .mat-badge-content{left:auto;right:-16px}.ruc-custom-theme .mat-badge-small.mat-badge-after .mat-badge-content{right:-16px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-after .mat-badge-content{right:auto;left:-16px}.ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-8px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-8px}.ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-8px}[dir=rtl] .ruc-custom-theme .mat-badge-small.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-8px}.ruc-custom-theme .mat-badge-medium .mat-badge-content{width:22px;height:22px;line-height:22px}.ruc-custom-theme .mat-badge-medium.mat-badge-above .mat-badge-content{top:-11px}.ruc-custom-theme .mat-badge-medium.mat-badge-below .mat-badge-content{bottom:-11px}.ruc-custom-theme .mat-badge-medium.mat-badge-before .mat-badge-content{left:-22px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-before .mat-badge-content{left:auto;right:-22px}.ruc-custom-theme .mat-badge-medium.mat-badge-after .mat-badge-content{right:-22px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-after .mat-badge-content{right:auto;left:-22px}.ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-11px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-11px}.ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-11px}[dir=rtl] .ruc-custom-theme .mat-badge-medium.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-11px}.ruc-custom-theme .mat-badge-large .mat-badge-content{width:28px;height:28px;line-height:28px}.ruc-custom-theme .mat-badge-large.mat-badge-above .mat-badge-content{top:-14px}.ruc-custom-theme .mat-badge-large.mat-badge-below .mat-badge-content{bottom:-14px}.ruc-custom-theme .mat-badge-large.mat-badge-before .mat-badge-content{left:-28px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-before .mat-badge-content{left:auto;right:-28px}.ruc-custom-theme .mat-badge-large.mat-badge-after .mat-badge-content{right:-28px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-after .mat-badge-content{right:auto;left:-28px}.ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:-14px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-before .mat-badge-content{left:auto;right:-14px}.ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:-14px}[dir=rtl] .ruc-custom-theme .mat-badge-large.mat-badge-overlap.mat-badge-after .mat-badge-content{right:auto;left:-14px}.ruc-custom-theme .mat-badge-content{font-weight:600;font-size:12px;font-family:Roboto,sans-serif}.ruc-custom-theme .mat-badge-small .mat-badge-content{font-size:9px}.ruc-custom-theme .mat-badge-large .mat-badge-content{font-size:24px}.ruc-custom-theme .mat-bottom-sheet-container{font-size:14px;font-weight:400;line-height:20px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:48px}.ruc-custom-theme .mat-button-toggle{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base{width:40px;height:40px;padding:8px}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__focus-ring{max-height:40px;max-width:40px}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:40px;height:40px;margin:0}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base.mdc-icon-button--reduced-size .mdc-icon-button__focus-ring{max-height:40px;max-width:40px}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base .mdc-icon-button__touch{position:absolute;top:50%;height:40px;left:50%;width:40px;transform:translate(-50%,-50%)}.ruc-custom-theme .mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base .mat-mdc-button-touch-target{display:none}.ruc-custom-theme .mat-calendar{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-calendar-body{font-size:13px}.ruc-custom-theme .mat-calendar-body-label,.ruc-custom-theme .mat-calendar-period-button{font-size:20px;font-weight:500}.ruc-custom-theme .mat-calendar-table-header th{font-size:11px;font-weight:400}.ruc-custom-theme .mat-expansion-panel-header{height:48px}.ruc-custom-theme .mat-expansion-panel-header.mat-expanded{height:64px}.ruc-custom-theme .mat-expansion-panel-header{font-family:Roboto,sans-serif;font-size:15px;font-weight:400}.ruc-custom-theme .mat-expansion-panel-content{font-size:14px;font-weight:400;line-height:20px;font-family:Roboto,sans-serif;letter-spacing:normal}.ruc-custom-theme .mat-grid-tile-header,.ruc-custom-theme .mat-grid-tile-footer{font-size:14px}.ruc-custom-theme .mat-grid-tile-header .mat-line,.ruc-custom-theme .mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.ruc-custom-theme .mat-grid-tile-header .mat-line:nth-child(n+2),.ruc-custom-theme .mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px}.ruc-custom-theme .mat-horizontal-stepper-header{height:72px}.ruc-custom-theme .mat-stepper-label-position-bottom .mat-horizontal-stepper-header,.ruc-custom-theme .mat-vertical-stepper-header{padding:24px}.ruc-custom-theme .mat-stepper-vertical-line:before{top:-16px;bottom:-16px}.ruc-custom-theme .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:after,.ruc-custom-theme .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:before{top:36px}.ruc-custom-theme .mat-stepper-label-position-bottom .mat-stepper-horizontal-line{top:36px}.ruc-custom-theme .mat-stepper-vertical,.ruc-custom-theme .mat-stepper-horizontal{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-step-label{font-size:14px;font-weight:400}.ruc-custom-theme .mat-step-sub-label-error{font-weight:400}.ruc-custom-theme .mat-step-label-error{font-size:20px}.ruc-custom-theme .mat-step-label-selected{font-size:20px;font-weight:500}.ruc-custom-theme .mat-toolbar-multiple-rows{min-height:64px}.ruc-custom-theme .mat-toolbar-row,.ruc-custom-theme .mat-toolbar-single-row{height:64px}@media (max-width: 599px){.ruc-custom-theme .mat-toolbar-multiple-rows{min-height:56px}.ruc-custom-theme .mat-toolbar-row,.ruc-custom-theme .mat-toolbar-single-row{height:56px}}.ruc-custom-theme .mat-toolbar,.ruc-custom-theme .mat-toolbar h1,.ruc-custom-theme .mat-toolbar h2,.ruc-custom-theme .mat-toolbar h3,.ruc-custom-theme .mat-toolbar h4,.ruc-custom-theme .mat-toolbar h5,.ruc-custom-theme .mat-toolbar h6{font-size:20px;font-weight:500;line-height:32px;font-family:Roboto,sans-serif;letter-spacing:normal;margin:0}.ruc-custom-theme .mat-tree-node{min-height:48px}.ruc-custom-theme .mat-tree{font-family:Roboto,sans-serif}.ruc-custom-theme .mat-tree-node,.ruc-custom-theme .mat-nested-tree-node{font-weight:400;font-size:14px}:host{display:block;position:relative;overflow:hidden}.custom-backdrop{position:absolute;inset:0;background-color:#000;z-index:999;visibility:hidden}.ruclib-drawer-container{width:100%;height:400px;border:1px solid #ccc;position:relative;overflow:hidden}.drawer-content-wrapper{padding:16px;position:relative;box-sizing:border-box;height:100%;display:flex;flex-direction:column}.ruclib-drawer-title{margin-top:0;margin-bottom:16px;font-size:1.5em;flex-shrink:0}.ruclib-drawer-close-button{position:absolute;top:8px;right:8px;padding:5px 0 0!important;flex-shrink:0}.ruclib-drawer-body{flex-grow:1;overflow-y:auto;word-break:break-word}.dynamic-drawer{background-color:var(--mat-sidenav-content-background-color, white);position:absolute;box-sizing:border-box;box-shadow:0 2px 10px #0003;z-index:1000;overflow:hidden}.dynamic-drawer.drawer-left{top:0;bottom:0;left:0}.dynamic-drawer.drawer-right{top:0;bottom:0;right:0}.dynamic-drawer.drawer-top{top:0;left:0;right:0}.dynamic-drawer.drawer-bottom{bottom:0;left:0;right:0}.dynamic-drawer.light-theme{background-color:#fff;color:#000000de}.dynamic-drawer.light-theme .ruclib-drawer-title{color:#000000de}.dynamic-drawer.light-theme .ruclib-drawer-close-button .mat-icon{color:#0000008a}.dynamic-drawer.dark-theme{background-color:#424242;color:#fff}.dynamic-drawer.dark-theme .ruclib-drawer-title,.dynamic-drawer.dark-theme .ruclib-drawer-close-button .mat-icon{color:#fff}.dynamic-drawer.custom-theme-one{background-color:#fff;color:#000000de}.dynamic-drawer.custom-theme-one .ruclib-drawer-title{color:#000000de}.dynamic-drawer.custom-theme-one .ruclib-drawer-close-button .mat-icon{color:#0000008a}.dynamic-drawer.custom-theme-two{background-color:#424242;color:#fff}.dynamic-drawer.custom-theme-two .ruclib-drawer-title,.dynamic-drawer.custom-theme-two .ruclib-drawer-close-button .mat-icon{color:#fff}.ruclib-drawer-toggle-image{object-fit:contain;display:block}.drawer-toggle-button{margin-bottom:15px;display:inline-flex;align-items:center;justify-content:center;gap:8px}.ruclib-main-content{padding:16px;display:flex;flex-direction:column;align-items:flex-start}\n"] }]
399
399
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { rucInputData: [{
400
400
  type: Input
401
401
  }], customTheme: [{
@@ -409,4 +409,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
409
409
  type: HostListener,
410
410
  args: ['document:keydown.escape', ['$event']]
411
411
  }] } });
412
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVjbGliLWRyYXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3J1Y2xpYi1kcmF3ZXIvcnVjbGliLWRyYXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL3J1Y2xpYi1kcmF3ZXIvcnVjbGliLWRyYXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBb0MsTUFBTSxFQUFFLFlBQVksRUFBaUIsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBMkIsTUFBTSxlQUFlLENBQUM7QUFDL00sT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQWtCLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7QUFJakc7Ozs7R0FJRztBQWtDSCxNQUFNLE9BQU8scUJBQXFCO0lBK0VoQyxZQUNVLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBL0VoQzs7O1dBR0c7UUFDTSxpQkFBWSxHQUFzQixFQUFFLENBQUM7UUFNOUM7Ozs7V0FJRztRQUNPLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBSzdDLHNEQUFzRDtRQUM5Qyx3QkFBbUIsR0FBNkIsSUFBSSxDQUFDO1FBRTdEOzs7V0FHRztRQUNJLHlCQUFvQixHQUFpQixLQUFLLENBQUM7UUFDbEQ7Ozs7V0FJRztRQUNJLDBCQUFxQixHQUF3QyxNQUFNLENBQUMsQ0FBQyxVQUFVO1FBQ3RGOzs7O1dBSUc7UUFDSywwQkFBcUIsR0FBK0MsSUFBSSxDQUFDO1FBQ2pGOzs7V0FHRztRQUNJLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQ3BDOzs7O1dBSUc7UUFDSSwrQkFBMEIsR0FBVyxPQUFPLENBQUM7UUFFcEQ7Ozs7V0FJRztRQUNJLGtCQUFhLEdBQWtCLE1BQU0s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QUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7NEJBQzdFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDOzRCQUMxRSxVQUFVLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO3lCQUM5RCxDQUFDO3dCQUNGLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTs0QkFDMUIsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7NEJBQzVFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDOzRCQUMxRSxVQUFVLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO3lCQUM5RCxDQUFDO3FCQUNIO3dHQU9RLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFNSSxRQUFRO3NCQUFqQixNQUFNO2dCQUdxRSxtQkFBbUI7c0JBQTlGLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkF1VDFFLGdCQUFnQjtzQkFEZixZQUFZO3VCQUFDLHlCQUF5QixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgSG9zdExpc3RlbmVyLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIENvbXBvbmVudFJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRyaWdnZXIsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgYW5pbWF0ZSwgQW5pbWF0aW9uRXZlbnQgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgTWF0RHJhd2VyTW9kZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xyXG5pbXBvcnQgeyBSdWNsaWJEcmF3ZXJJbnB1dCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZS9kcmF3ZXInO1xyXG5cclxuLyoqXHJcbiAqIEBDb21wb25lbnQgUnVjbGliRHJhd2VyQ29tcG9uZW50XHJcbiAqIEBkZXNjcmlwdGlvbiBBIGhpZ2hseSBjb25maWd1cmFibGUgZHJhd2VyIGNvbXBvbmVudCB0aGF0IGNhbiBzbGlkZSBpbiBmcm9tIGFueSBvZiB0aGUgZm91ciBkaXJlY3Rpb25zIChsZWZ0LCByaWdodCwgdG9wLCBib3R0b20pLlxyXG4gKiBJdCB1c2VzIGN1c3RvbSBBbmd1bGFyIGFuaW1hdGlvbnMgZm9yIHNtb290aCB0cmFuc2l0aW9ucyBhbmQgc3VwcG9ydHMgdGhlbWluZy5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndXhwLXJ1Y2xpYi1kcmF3ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ydWNsaWItZHJhd2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ydWNsaWItZHJhd2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignYmFja2Ryb3BGYWRlJywgW1xyXG4gICAgICBzdGF0ZSgnb3V0Jywgc3R5bGUoeyBvcGFjaXR5OiAwLCB2aXNpYmlsaXR5OiAnaGlkZGVuJyB9KSksXHJcbiAgICAgIHN0YXRlKCdpbicsIHN0eWxlKHsgb3BhY2l0eTogMC42LCB2aXNpYmlsaXR5OiAndmlzaWJsZScgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCdvdXQgPT4gaW4nLCBhbmltYXRlKCd7e2R1cmF0aW9ufX0gZWFzZS1pbicpKSxcclxuICAgICAgdHJhbnNpdGlvbignaW4gPT4gb3V0JywgYW5pbWF0ZSgne3tkdXJhdGlvbn19IGVhc2Utb3V0JykpLFxyXG4gICAgXSksXHJcbiAgICB0cmlnZ2VyKCdzbGlkZUluT3V0TGVmdCcsIFtcclxuICAgICAgc3RhdGUoJ291dCcsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgtMTAwJSknLCB2aXNpYmlsaXR5OiAnaGlkZGVuJyB9KSksXHJcbiAgICAgIHN0YXRlKCdpbicsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScsIHZpc2liaWxpdHk6ICd2aXNpYmxlJyB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ291dCA8PT4gaW4nLCBhbmltYXRlKCd7e2R1cmF0aW9ufX0gZWFzZS1pbi1vdXQnKSksXHJcbiAgICBdKSxcclxuICAgIHRyaWdnZXIoJ3NsaWRlSW5PdXRSaWdodCcsIFtcclxuICAgICAgc3RhdGUoJ291dCcsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgxMDAlKScsIHZpc2liaWxpdHk6ICdoaWRkZW4nIH0pKSxcclxuICAgICAgc3RhdGUoJ2luJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDApJywgdmlzaWJpbGl0eTogJ3Zpc2libGUnIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbignb3V0IDw9PiBpbicsIGFuaW1hdGUoJ3t7ZHVyYXRpb259fSBlYXNlLWluLW91dCcpKSxcclxuICAgIF0pLFxyXG4gICAgdHJpZ2dlcignc2xpZGVJbk91dFRvcCcsIFtcclxuICAgICAgc3RhdGUoJ291dCcsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMTAwJSknLCB2aXNpYmlsaXR5OiAnaGlkZGVuJyB9KSksXHJcbiAgICAgIHN0YXRlKCdpbicsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwJSknLCB2aXNpYmlsaXR5OiAndmlzaWJsZScgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCdvdXQgPD0+IGluJywgYW5pbWF0ZSgne3tkdXJhdGlvbn19IGVhc2UtaW4tb3V0JykpLFxyXG4gICAgXSksXHJcbiAgICB0cmlnZ2VyKCdzbGlkZUluT3V0Qm90dG9tJywgW1xyXG4gICAgICBzdGF0ZSgnb3V0Jywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwMCUpJywgdmlzaWJpbGl0eTogJ2hpZGRlbicgfSkpLFxyXG4gICAgICBzdGF0ZSgnaW4nLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCUpJywgdmlzaWJpbGl0eTogJ3Zpc2libGUnIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbignb3V0IDw9PiBpbicsIGFuaW1hdGUoJ3t7ZHVyYXRpb259fSBlYXNlLWluLW91dCcpKSxcclxuICAgIF0pXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUnVjbGliRHJhd2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgLyoqXHJcbiAgICogSW5wdXQgZGF0YSBmb3IgY29uZmlndXJpbmcgdGhlIGRyYXdlcidzIGFwcGVhcmFuY2UgYW5kIGJlaGF2aW9yLlxyXG4gICAqIEBzZWUgUnVjbGliRHJhd2VySW5wdXQgaW50ZXJmYWNlIGZvciBkZXRhaWxlZCBwcm9wZXJ0aWVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHJ1Y0lucHV0RGF0YTogUnVjbGliRHJhd2VySW5wdXQgPSB7fTtcclxuICAvKipcclxuICAgKiBPcHRpb25hbCBjdXN0b20gdGhlbWUgY2xhc3MgdG8gYmUgYXBwbGllZCB0byB0aGUgZHJhd2VyIHBhbmVsLlxyXG4gICAqIEBleGFtcGxlICdkYXJrLXRoZW1lJywgJ2N1c3RvbS10aGVtZS1vbmUnXHJcbiAgICovXHJcbiAgQElucHV0KCkgY3VzdG9tVGhlbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvKipcclxuICAgKiBFdmVudEVtaXR0ZXIgZm9yIHZhcmlvdXMgZHJhd2VyIGV2ZW50cy5cclxuICAgKiBFbWl0cyBvYmplY3RzIHdpdGggYHR5cGVgIChlLmcuLCAnb3BlbmVkU3RhcnQnLCAnY2xvc2VkU3RhcnQnLCAnb3BlbmVkQ2hhbmdlJywgJ2RyYXdlclRvZ2dsZScpXHJcbiAgICogYW5kIGBvcGVuZWRgIChib29sZWFuKSBhbmQgYHBvc2l0aW9uYCAoc3RyaW5nKSBwcm9wZXJ0aWVzLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBydWNFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAvKiogVmlld0NvbnRhaW5lclJlZiB0byBob3N0IHRoZSBkeW5hbWljYWxseSBsb2FkZWQgY29tcG9uZW50LiAqL1xyXG4gIEBWaWV3Q2hpbGQoJ2RyYXdlckNvbXBvbmVudEhvc3QnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZSB9KSBkcmF3ZXJDb21wb25lbnRIb3N0ITogVmlld0NvbnRhaW5lclJlZjtcclxuXHJcbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgZHluYW1pY2FsbHkgY3JlYXRlZCBjb21wb25lbnQuICovXHJcbiAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBDdXJyZW50IGFuaW1hdGlvbiBzdGF0ZSBvZiB0aGUgZHJhd2VyICgnaW4nIG9yICdvdXQnKS5cclxuICAgKiBAcHVibGljXHJcbiAgICovXHJcbiAgcHVibGljIGRyYXdlckFuaW1hdGlvblN0YXRlOiAnaW4nIHwgJ291dCcgPSAnb3V0JztcclxuICAvKipcclxuICAgKiBDdXJyZW50IGFjdGl2ZSBwb3NpdGlvbiBvZiB0aGUgZHJhd2VyLlxyXG4gICAqIEBwdWJsaWNcclxuICAgKiBAZGVmYXVsdCAnbGVmdCdcclxuICAgKi9cclxuICBwdWJsaWMgY3VycmVudERyYXdlclBvc2l0aW9uOiAnbGVmdCcgfCAncmlnaHQnIHwgJ3RvcCcgfCAnYm90dG9tJyA9ICdsZWZ0JzsgLy8gRGVmYXVsdFxyXG4gIC8qKlxyXG4gICAqIFN0b3JlcyB0aGUgbmV4dCBwb3NpdGlvbiBpZiB0aGUgZHJhd2VyIGlzIGN1cnJlbnRseSBvcGVuIGFuZCBhIG5ldyBwb3NpdGlvbiBpcyByZXF1ZXN0ZWQuXHJcbiAgICogVXNlZCB0byBzZXF1ZW5jZSBjbG9zZSBhbmQgb3BlbiBhbmltYXRpb25zLlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwZW5kaW5nRHJhd2VyUG9zaXRpb246ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyB8ICdib3R0b20nIHwgbnVsbCA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogRmxhZyB0byBpbmRpY2F0ZSBpZiBhbiBhbmltYXRpb24gaXMgY3VycmVudGx5IGluIHByb2dyZXNzIHRvIHByZXZlbnQgcmFwaWQgdG9nZ2xpbmcuXHJcbiAgICogQHB1YmxpY1xyXG4gICAqL1xyXG4gIHB1YmxpYyBpc0FuaW1hdGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIEVmZmVjdGl2ZSBhbmltYXRpb24gZHVyYXRpb24gZm9yIHRoZSBkcmF3ZXIsIGRlcml2ZWQgZnJvbSBpbnB1dCBvciBkZWZhdWx0LlxyXG4gICAqIEBwdWJsaWNcclxuICAgKiBAZGVmYXVsdCAnMzAwbXMnXHJcbiAgICovXHJcbiAgcHVibGljIGVmZmVjdGl2ZUFuaW1hdGlvbkR1cmF0aW9uOiBzdHJpbmcgPSAnMzAwbXMnO1xyXG5cclxuICAvKipcclxuICAgKiBNb2RlIG9mIHRoZSBkcmF3ZXIsIHByaW1hcmlseSBmb3IgZGV0ZXJtaW5pbmcgYmFja2Ryb3AgYmVoYXZpb3Igd2l0aCBjdXN0b20gYW5pbWF0aW9ucy5cclxuICAgKiBAcHVibGljXHJcbiAgICogQGRlZmF1bHQgJ3NpZGUnXHJcbiAgICovXHJcbiAgcHVibGljIG1hdERyYXdlck1vZGU6IE1hdERyYXdlck1vZGUgPSAnc2lkZSc7XHJcbiAgLyoqXHJcbiAgICogQWN0dWFsIHBvc2l0aW9uICgnc3RhcnQnIG9yICdlbmQnKSB1c2VkIGJ5IEFuZ3VsYXIgTWF0ZXJpYWwncyBNYXREcmF3ZXIgaWYgaXQgd2VyZSBkaXJlY3RseSB1c2VkLlxyXG4gICAqIFJldGFpbmVkIGZvciBsb2dpY2FsIGNvbnNpc3RlbmN5IGluIGRldGVybWluaW5nIGxheW91dC5cclxuICAgKiBAcHVibGljXHJcbiAgICogQGRlZmF1bHQgJ3N0YXJ0J1xyXG4gICAqL1xyXG4gIHB1YmxpYyBtYXRBY3R1YWxQb3NpdGlvbjogJ3N0YXJ0JyB8ICdlbmQnID0gJ3N0YXJ0JztcclxuICAvKipcclxuICAgKiBGbGFnIGluZGljYXRpbmcgaWYgdGhlIGRyYXdlciBpcyBpbiBhIHZlcnRpY2FsIGxheW91dCAodG9wL2JvdHRvbSkuXHJcbiAgICogSGVscHMgZGV0ZXJtaW5lIGlmIHdpZHRoIG9yIGhlaWdodCBzaG91bGQgYmUgMTAwJS5cclxuICAgKiBAcHVibGljXHJcbiAgICovXHJcbiAgcHVibGljIGlzVmVydGljYWxMYXlvdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBFZmZlY3RpdmUgZGltZW5zaW9uICh3aWR0aCBvciBoZWlnaHQpIG9mIHRoZSBkcmF3ZXIgcGFuZWwuXHJcbiAgICogQHB1YmxpY1xyXG4gICAqIEBkZWZhdWx0ICcyNTBweCdcclxuICAgKi9cclxuICBwdWJsaWMgZWZmZWN0aXZlRHJhd2VyRGltZW5zaW9uOiBzdHJpbmcgPSAnMjUwcHgnO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuZ3VsYXIgbGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzIG9mIGEgZGlyZWN0aXZlIGFyZSBpbml0aWFsaXplZC5cclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXBwbHlJbnB1dHMoKTtcclxuICAgIHRoaXMuZHJhd2VyQW5pbWF0aW9uU3RhdGUgPSAnb3V0JztcclxuICAgIHRoaXMubG9hZER5bmFtaWNDb250ZW50KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbmd1bGFyIGxpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIEFuZ3VsYXIgaGFzIGZ1bGx5IGluaXRpYWxpemVkIGEgY29tcG9uZW50J3Mgdmlldy5cclxuICAgKi9cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5ydWNJbnB1dERhdGEuaW5pdGlhbE9wZW5lZFN0YXRlICYmIHRoaXMuZHJhd2VyQW5pbWF0aW9uU3RhdGUgPT09ICdvdXQnKSB7XHJcbiAgICAgIC8vIERlZmVyIHN0YXRlIHVwZGF0ZSB0byB0aGUgbmV4dCBtaWNyb3Rhc2sgcXVldWUuXHJcbiAgICAgIC8vIFRoaXMgaGVscHMgYXZvaWQgRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvciB3aGVuIGluaXRpYWxpemluZyB0aGUgZHJhd2VyJ3Mgb3BlbiBzdGF0ZS5cclxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLnNldERyYXdlck9wZW5TdGF0ZSh0cnVlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbmd1bGFyIGxpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIHdoZW4gYW55IGRhdGEtYm91bmQgcHJvcGVydHkgb2YgYSBkaXJlY3RpdmUgY2hhbmdlcy5cclxuICAgKiBAcGFyYW0gY2hhbmdlcyAtIE9iamVjdCBjb250YWluaW5nIHRoZSBjaGFuZ2VkIHByb3BlcnRpZXMuXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3J1Y0lucHV0RGF0YSddKSB7XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzUnVjSW5wdXREYXRhID0gY2hhbmdlc1sncnVjSW5wdXREYXRhJ10ucHJldmlvdXNWYWx1ZSBhcyBSdWNsaWJEcmF3ZXJJbnB1dCB8fCB7fTtcclxuICAgICAgY29uc3QgY3VycmVudFJ1Y0lucHV0RGF0YSA9IGNoYW5nZXNbJ3J1Y0lucHV0RGF0YSddLmN1cnJlbnRWYWx1ZSBhcyBSdWNsaWJEcmF3ZXJJbnB1dCB8fCB7fTtcclxuXHJcbiAgICAgIGNvbnN0IG9sZFBvc2l0aW9uID0gcHJldmlvdXNSdWNJbnB1dERhdGEuZHJhd2VyUG9zaXRpb24gPz8gdGhpcy5jdXJyZW50RHJhd2VyUG9zaXRpb247XHJcbiAgICAgIGNvbnN0IHdhc09wZW4gPSB0aGlzLmRyYXdlckFuaW1hdGlvblN0YXRlID09PSAnaW4nO1xyXG5cclxuICAgICAgdGhpcy5jdXJyZW50RHJhd2VyUG9zaXRpb24gPSBjdXJyZW50UnVjSW5wdXREYXRhLmRyYXdlclBvc2l0aW9uID8/ICdsZWZ0JztcclxuICAgICAgdGhpcy5hcHBseUlucHV0cygpO1xyXG5cclxuICAgICAgY29uc3QgbmV3UG9zaXRpb24gPSB0aGlzLmN1cnJlbnREcmF3ZXJQb3NpdGlvbjtcclxuICAgICAgY29uc3Qgc2hvdWxkQmVPcGVuID0gdGhpcy5ydWNJbnB1dERhdGEuaW5pdGlhbE9wZW5lZFN0YXRlID8/IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKHdhc09wZW4gJiYgb2xkUG9zaXRpb24gIT09IG5ld1Bvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nRHJhd2VyUG9zaXRpb24gPSBuZXdQb3NpdGlvbjtcclxuICAgICAgICB0aGlzLnNldERyYXdlck9wZW5TdGF0ZShmYWxzZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAod2FzT3BlbiAhPT0gc2hvdWxkQmVPcGVuKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldERyYXdlck9wZW5TdGF0ZShzaG91bGRCZU9wZW4pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9hZER5bmFtaWNDb250ZW50KCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbGllcyBpbnB1dCBkYXRhIHRvIGNvbXBvbmVudCBwcm9wZXJ0aWVzLCBjYWxjdWxhdGluZyBkaW1lbnNpb25zIGFuZCBwb3NpdGlvbnMuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIGFwcGx5SW5wdXRzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5tYXREcmF3ZXJNb2RlID0gdGhpcy5ydWNJbnB1dERhdGEubW9kZSA/PyAnc2lkZSc7XHJcbiAgICB0aGlzLmVmZmVjdGl2ZUFuaW1hdGlvbkR1cmF0aW9uID0gdGhpcy5ydWNJbnB1dERhdGEuYW5pbWF0aW9uRHVyYXRpb24gfHwgJzMwMG1zJztcclxuXHJcbiAgICBjb25zdCBnZXREaW1lbnNpb24gPSAoaW5wdXREaW1lbnNpb246IHN0cmluZyB8IHVuZGVmaW5lZCwgZGVmYXVsdERpbWVuc2lvbjogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICAgICAgcmV0dXJuIChpbnB1dERpbWVuc2lvbiAmJiBpbnB1dERpbWVuc2lvbi50cmltKCkgIT09ICcnKSA/IGlucHV0RGltZW5zaW9uIDogZGVmYXVsdERpbWVuc2lvbjtcclxuICAgIH07XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLmN1cnJlbnREcmF3ZXJQb3NpdGlvbikge1xyXG4gICAgICBjYXNlICdyaWdodCc6XHJcbiAgICAgICAgdGhpcy5tYXRBY3R1YWxQb3NpdGlvbiA9ICdlbmQnO1xyXG4gICAgICAgIHRoaXMuaXNWZXJ0aWNhbExheW91dCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0aXZlRHJhd2VyRGltZW5zaW9uID0gZ2V0RGltZW5zaW9uKHRoaXMucnVjSW5wdXREYXRhLmRyYXdlcldpZHRoLCAnMjUwcHgnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndG9wJzpcclxuICAgICAgICB0aGlzLm1hdEFjdHVhbFBvc2l0aW9uID0gJ3N0YXJ0JztcclxuICAgICAgICB0aGlzLmlzVmVydGljYWxMYXlvdXQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0aXZlRHJhd2VyRGltZW5zaW9uID0gZ2V0RGltZW5zaW9uKHRoaXMucnVjSW5wdXREYXRhLmRyYXdlckhlaWdodCwgJzIwMHB4Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2JvdHRvbSc6XHJcbiAgICAgICAgdGhpcy5tYXRBY3R1YWxQb3NpdGlvbiA9ICdlbmQnO1xyXG4gICAgICAgIHRoaXMuaXNWZXJ0aWNhbExheW91dCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RpdmVEcmF3ZXJEaW1lbnNpb24gPSBnZXREaW1lbnNpb24odGhpcy5ydWNJbnB1dERhdGEuZHJhd2VySGVpZ2h0LCAnMjAwcHgnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbGVmdCc6XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5tYXRBY3R1YWxQb3NpdGlvbiA9ICdzdGFydCc7XHJcbiAgICAgICAgdGhpcy5pc1ZlcnRpY2FsTGF5b3V0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZmZlY3RpdmVEcmF3ZXJEaW1lbnNpb24gPSBnZXREaW1lbnNpb24odGhpcy5ydWNJbnB1dERhdGEuZHJhd2VyV2lkdGgsICcyNTBweCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlcyB0aGUgZHJhd2VyJ3Mgb3Blbi9jbG9zZSBzdGF0ZSBvciBzd2l0Y2hlcyB0byBhIG5ldyBwb3NpdGlvbi5cclxuICAgKiBAcGFyYW0gcmVxdWVzdGVkUG9zaXRpb24gLSBUaGUgZGVzaXJlZCBwb3NpdGlvbiB0byBvcGVuIHRoZSBkcmF3ZXIgZnJvbS4gSWYgbm90IHByb3ZpZGVkLCB1c2VzIGBjdXJyZW50RHJhd2VyUG9zaXRpb25gLlxyXG4gICAqL1xyXG4gIHRvZ2dsZURyYXdlcihyZXF1ZXN0ZWRQb3NpdGlvbj86ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyB8ICdib3R0b20nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0FuaW1hdGluZyAmJiAhdGhpcy5wZW5kaW5nRHJhd2VyUG9zaXRpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zdCBwb3NpdGlvblRvVG9nZ2xlID0gcmVxdWVzdGVkUG9zaXRpb24gfHwgdGhpcy5jdXJyZW50RHJhd2VyUG9zaXRpb247XHJcbiAgICBjb25zdCBpc0RyYXdlck9wZW4gPSB0aGlzLmRyYXdlckFuaW1hdGlvblN0YXRlID09PSAnaW4nO1xyXG4gICAgY29uc3QgaXNTYW1lUG9zaXRpb24gPSB0aGlzLmN1cnJlbnREcmF3ZXJQb3NpdGlvbiA9PT0gcG9zaXRpb25Ub1RvZ2dsZTtcclxuXHJcbiAgICBpZiAoaXNEcmF3ZXJPcGVuKSB7XHJcbiAgICAgIGlmIChpc1NhbWVQb3NpdGlvbikge1xyXG4gICAgICAgIHRoaXMuc2V0RHJhd2VyT3BlblN0YXRlKGZhbHNlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBlbmRpbmdEcmF3ZXJQb3NpdGlvbiA9IHBvc2l0aW9uVG9Ub2dnbGU7XHJcbiAgICAgICAgdGhpcy5zZXREcmF3ZXJPcGVuU3RhdGUoZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIWlzU2FtZVBvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RHJhd2VyUG9zaXRpb24gPSBwb3NpdGlvblRvVG9nZ2xlO1xyXG4gICAgICAgIHRoaXMuYXBwbHlJbnB1dHMoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldERyYXdlck9wZW5TdGF0ZSh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGRyYXdlcidzIG9wZW4gc3RhdGUgYW5kIHRyaWdnZXJzIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIG9wZW4gLSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBvcGVuICh0cnVlKSBvciBjbG9zZSAoZmFsc2UpIHRoZSBkcmF3ZXIuXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIHNldERyYXdlck9wZW5TdGF0ZShvcGVuOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0FuaW1hdGluZyAmJiAhdGhpcy5wZW5kaW5nRHJhd2VyUG9zaXRpb24gJiYgb3BlbiA9PT0gKHRoaXMuZHJhd2VyQW5pbWF0aW9uU3RhdGUgPT09ICdpbicpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaXNBbmltYXRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5kcmF3ZXJBbmltYXRpb25TdGF0ZSA9IG9wZW4gPyAnaW4nIDogJ291dCc7XHJcbiAgICB0aGlzLnJ1Y0V2ZW50LmVtaXQoe1xyXG4gICAgICB0eXBlOiBvcGVuID8gJ29wZW5lZFN0YXJ0JyA6ICdjbG9zZWRTdGFydCcsXHJcbiAgICAgIG9wZW5lZDogb3BlbixcclxuICAgICAgcG9zaXRpb246IHRoaXMuY3VycmVudERyYXdlclBvc2l0aW9uXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxiYWNrIGZvciB3aGVuIGEgZHJhd2VyIGFuaW1hdGlvbiBmaW5pc2hlcy5cclxuICAgKiBNYW5hZ2VzIHN0YXRlIHRyYW5zaXRpb25zLCBlc3BlY2lhbGx5IHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gb3BlbiBkcmF3ZXJzLlxyXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBBbmd1bGFyIEFuaW1hdGlvbkV2ZW50LlxyXG4gICAqL1xyXG4gIG9uQW5pbWF0aW9uRG9uZShldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChldmVudC5lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZHluYW1pYy1kcmF3ZXInKSkge1xyXG4gICAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ291dCcpIHtcclxuICAgICAgICB0aGlzLnJ1Y0V2ZW50LmVtaXQoeyB0eXBlOiAnb3BlbmVkQ2hhbmdlJywgb3BlbmVkOiBmYWxzZSwgcG9zaXRpb246IHRoaXMuY3VycmVudERyYXdlclBvc2l0aW9uIH0pO1xyXG4gICAgICAgIHRoaXMucnVjRXZlbnQuZW1pdCh7IHR5cGU6ICdkcmF3ZXJUb2dnbGUnLCBvcGVuZWQ6IGZhbHNlLCBwb3NpdGlvbjogdGhpcy5jdXJyZW50RHJhd2VyUG9zaXRpb24gfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdEcmF3ZXJQb3NpdGlvbikge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RHJhd2VyUG9zaXRpb24gPSB0aGlzLnBlbmRpbmdEcmF3ZXJQb3NpdGlvbjtcclxuICAgICAgICAgIHRoaXMucGVuZGluZ0RyYXdlclBvc2l0aW9uID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuYXBwbHlJbnB1dHMoKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldERyYXdlck9wZW5TdGF0ZSh0cnVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChldmVudC50b1N0YXRlID09PSAnaW4nKSB7XHJcbiAgICAgICAgdGhpcy5ydWNFdmVudC5lbWl0KHsgdHlwZTogJ29wZW5lZENoYW5nZScsIG9wZW5lZDogdHJ1ZSwgcG9zaXRpb246IHRoaXMuY3VycmVudERyYXdlclBvc2l0aW9uIH0pO1xyXG4gICAgICAgIHRoaXMucnVjRXZlbnQuZW1pdCh7IHR5cGU6ICdkcmF3ZXJUb2dnbGUnLCBvcGVuZWQ6IHRydWUsIHBvc2l0aW9uOiB0aGlzLmN1cnJlbnREcmF3ZXJQb3NpdGlvbiB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzQW5pbWF0aW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWRzIHRoZSBkeW5hbWljIGNvbXBvbmVudCBpbnRvIHRoZSBkcmF3ZXIgaWYgc3BlY2lmaWVkIGluIHJ1Y0lucHV0RGF0YS5cclxuICAgKiBDbGVhcnMgZXhpc3RpbmcgZHluYW1pYyBjb21wb25lbnQgaWYgYW55LlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsb2FkRHluYW1pY0NvbnRlbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyRHluYW1pY0NvbnRlbnQoKTtcclxuXHJcbiAgICBjb25zdCBjb21wb25lbnRUeXBlID0gdGhpcy5ydWNJbnB1dERhdGEuY29udGVudD8uZHJhd2VyQ29udGVudENvbXBvbmVudDtcclxuICAgIGlmIChjb21wb25lbnRUeXBlICYmIHRoaXMuZHJhd2VyQ29tcG9uZW50SG9zdCkge1xyXG4gICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRSZWYgPSB0aGlzLmRyYXdlckNvbXBvbmVudEhvc3QuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUpO1xyXG4gICAgICBpZiAodGhpcy5keW5hbWljQ29tcG9uZW50UmVmLmluc3RhbmNlKSB7XHJcbiAgICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucnVjSW5wdXREYXRhLmRyYXdlckNvbnRlbnRDb21wb25lbnREYXRhICYmIHRoaXMuZHluYW1pY0NvbXBvbmVudFJlZi5pbnN0YW5jZSkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMucnVjSW5wdXREYXRhLmRyYXdlckNvbnRlbnRDb21wb25lbnREYXRhKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICBpZiAoa2V5IGluIHRoaXMuZHluYW1pY0NvbXBvbmVudFJlZiEuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50UmVmIS5pbnN0YW5jZVtrZXldID0gdGhpcy5ydWNJbnB1dERhdGEuZHJhd2VyQ29udGVudENvbXBvbmVudERhdGFba2V5XTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHRlciBmb3IgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIHRoZSBhbmltYXRpb24gdHJpZ2dlcnMgaW4gdGhlIHRlbXBsYXRlLlxyXG4gICAqIEluY2x1ZGVzIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZSAoJ2luJyBvciAnb3V0JykgYW5kIHRoZSBlZmZlY3RpdmUgZHVyYXRpb24uXHJcbiAgICovXHJcbiAgZ2V0IGFuaW1hdGlvblBhcmFtcygpIHtcclxuICAgIHJldHVybiB7IHZhbHVlOiB0aGlzLmRyYXdlckFuaW1hdGlvblN0YXRlLCBwYXJhbXM6IHsgZHVyYXRpb246IHRoaXMuZWZmZWN0aXZlQW5pbWF0aW9uRHVyYXRpb24gfSB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0dGVyIGZvciB0aGUgYmFja2Ryb3AgYW5pbWF0aW9uIHBhcmFtZXRlcnMuXHJcbiAgICogVHlwaWNhbGx5IHVzZXMgYSBmYXN0ZXIgZHVyYXRpb24gdGhhbiB0aGUgbWFpbiBkcmF3ZXIgYW5pbWF0aW9uLlxyXG4gICAqL1xyXG4gIGdldCBiYWNrZHJvcEFuaW1hdGlvblBhcmFtcygpIHtcclxuICAgIGxldCBkdXJhdGlvbk1zID0gMDtcclxuICAgIGlmICh0aGlzLmVmZmVjdGl2ZUFuaW1hdGlvbkR1cmF0aW9uLmVuZHNXaXRoKCdtcycpKSB7XHJcbiAgICAgIGR1cmF0aW9uTXMgPSBwYXJzZUludCh0aGlzLmVmZmVjdGl2ZUFuaW1hdGlvbkR1cmF0aW9uLCAxMCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWZmZWN0aXZlQW5pbWF0aW9uRHVyYXRpb24uZW5kc1dpdGgoJ3MnKSkge1xyXG4gICAgICBkdXJhdGlvbk1zID0gcGFyc2VGbG9hdCh0aGlzLmVmZmVjdGl2ZUFuaW1hdGlvbkR1cmF0aW9uKSAqIDEwMDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkdXJhdGlvbk1zID0gcGFyc2VJbnQodGhpcy5lZmZlY3RpdmVBbmltYXRpb25EdXJhdGlvbiwgMTApIHx8IDMwMDsgLy8gRmFsbGJhY2sgaWYgZm9ybWF0IGlzIHVuZXhwZWN0ZWRcclxuICAgIH1cclxuICAgIGNvbnN0IGJhY2tkcm9wRHVyYXRpb25WYWx1ZSA9IE1hdGguZmxvb3IoZHVyYXRpb25NcyAvIDIpOyAvLyBFbnN1cmUgaW50ZWdlciBmb3IgbXNcclxuICAgIGNvbnN0IGJhY2tkcm9wRHVyYXRpb24gPSBiYWNrZHJvcER1cmF0aW9uVmFsdWUgPiAwID8gYCR7YmFja2Ryb3BEdXJhdGlvblZhbHVlfW1zYCA6ICcxNTBtcyc7IC8vIEZhbGxiYWNrIGlmIGNhbGN1bGF0ZWQgZHVyYXRpb24gaXMgMCBvciBsZXNzXHJcbiAgICByZXR1cm4geyB2YWx1ZTogdGhpcy5kcmF3ZXJBbmltYXRpb25TdGF0ZSwgcGFyYW1zOiB7IGR1cmF0aW9uOiBiYWNrZHJvcER1cmF0aW9uIH0gfTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGVzIGFuIGFjY2Vzc2libGUgbGFiZWwgZm9yIHRoZSB0b2dnbGUgYnV0dG9uIGJhc2VkIG9uIHRoZSBkcmF3ZXIncyBzdGF0ZSBhbmQgcG9zaXRpb24uXHJcbiAgICogQHJldHVybnMgVGhlIEFSSUEgbGFiZWwgc3RyaW5nIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbi5cclxuICAgKi9cclxuICBnZXRUb2dnbGVCdXR0b25BcmlhTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRlZmF1bHRPcGVuID0gYE9wZW4gJHt0aGlzLmN1cnJlbnREcmF3ZXJQb3NpdGlvbn0gRHJhd2VyYDtcclxuICAgIGNvbnN0IGRlZmF1bHRDbG9zZSA9IGBDbG9zZSAke3RoaXMuY3VycmVudERyYXdlclBvc2l0aW9ufSBEcmF3ZXJgO1xyXG4gICAgY29uc3Qgb3BlblRleHQgPSB0aGlzLnJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25UZXh0Py5vcGVuIHx8IGRlZmF1bHRPcGVuO1xyXG4gICAgY29uc3QgY2xvc2VUZXh0ID0gdGhpcy5ydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uVGV4dD8uY2xvc2UgfHwgZGVmYXVsdENsb3NlO1xyXG4gICAgcmV0dXJuIHRoaXMuZHJhd2VyQW5pbWF0aW9uU3RhdGUgPT09ICdpbicgPyBjbG9zZVRleHQgOiBvcGVuVGV4dDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgY2xpY2tzIG9uIHRoZSBiYWNrZHJvcC5cclxuICAgKiBDbG9zZXMgdGhlIGRyYXdlciBvbmx5IGlmIGBkaXNhYmxlQ2xvc2VgIGlzIG5vdCB0cnVlLlxyXG4gICAqIEBwdWJsaWNcclxuICAgKi9cclxuICBwdWJsaWMgaGFuZGxlQmFja2Ryb3BDbGljaygpOiB2b2lkIHtcclxuICAgIGlmICghKHRoaXMucnVjSW5wdXREYXRhLmRpc2FibGVDbG9zZSA/PyBmYWxzZSkpIHtcclxuICAgICAgdGhpcy50b2dnbGVEcmF3ZXIodGhpcy5jdXJyZW50RHJhd2VyUG9zaXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVucyBmb3IgRXNjYXBlIGtleSBwcmVzc2VzIG9uIHRoZSBkb2N1bWVudC5cclxuICAgKiBDbG9zZXMgdGhlIGRyYXdlciBpZiBpdCdzIG9wZW4gYW5kIGBkaXNhYmxlQ2xvc2VgIGlzIG5vdCB0cnVlLlxyXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBLZXlib2FyZEV2ZW50LlxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJywgWyckZXZlbnQnXSlcclxuICBvbktleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5kcmF3ZXJBbmltYXRpb25TdGF0ZSA9PT0gJ2luJyAmJiAhKHRoaXMucnVjSW5wdXREYXRhLmRpc2FibGVDbG9zZSA/PyBmYWxzZSkpIHtcclxuICAgICAgdGhpcy50b2dnbGVEcmF3ZXIodGhpcy5jdXJyZW50RHJhd2VyUG9zaXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXJzIGFueSBkeW5hbWljYWxseSBsb2FkZWQgY29tcG9uZW50LlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjbGVhckR5bmFtaWNDb250ZW50KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZHJhd2VyQ29tcG9uZW50SG9zdCkge1xyXG4gICAgICB0aGlzLmRyYXdlckNvbXBvbmVudEhvc3QuY2xlYXIoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmR5bmFtaWNDb21wb25lbnRSZWYpIHtcclxuICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50UmVmLmRlc3Ryb3koKTtcclxuICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50UmVmID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuZ3VsYXIgbGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgY2xlYXIgZHluYW1pYyBjb21wb25lbnQgY29udGVudC5cclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXJEeW5hbWljQ29udGVudCgpO1xyXG4gIH1cclxufSIsIjwhLS0gXHJcbiAgQ3VzdG9tIEJhY2tkcm9wIGVsZW1lbnQuXHJcbiAgVmlzaWJsZSBvbmx5IHdoZW46XHJcbiAgLSBydWNJbnB1dERhdGEubW9kZSBpcyAnb3ZlcidcclxuICAtIHJ1Y0lucHV0RGF0YS5oYXNCYWNrZHJvcCBpcyB0cnVlIChvciB1bmRlZmluZWQsIGRlZmF1bHRpbmcgdG8gdHJ1ZSlcclxuICAtIGRyYXdlckFuaW1hdGlvblN0YXRlIGlzICdpbicgKGRyYXdlciBpcyBvcGVuIG9yIG9wZW5pbmcpXHJcbiAgQW5pbWF0ZXMgdXNpbmcgJ2JhY2tkcm9wRmFkZScgdHJpZ2dlci5cclxuICBDbGlja2luZyB0aGUgYmFja2Ryb3Agd2lsbCB0b2dnbGUgdGhlIGRyYXdlciBmb3IgdGhlIGN1cnJlbnQgcG9zaXRpb24uXHJcbiAgQmFja2dyb3VuZCBjb2xvciBjYW4gYmUgY3VzdG9taXplZCB2aWEgcnVjSW5wdXREYXRhLmJhY2tkcm9wQmFja2dyb3VuZENvbG9yLlxyXG4tLT5cclxuPGRpdiBjbGFzcz1cImN1c3RvbS1iYWNrZHJvcFwiXHJcbiAgICAgKm5nSWY9XCJydWNJbnB1dERhdGEubW9kZSA9PT0gJ292ZXInICYmIChydWNJbnB1dERhdGEuaGFzQmFja2Ryb3AgPz8gdHJ1ZSkgJiYgZHJhd2VyQW5pbWF0aW9uU3RhdGUgPT09ICdpbidcIlxyXG4gICAgIFtAYmFja2Ryb3BGYWRlXT1cImJhY2tkcm9wQW5pbWF0aW9uUGFyYW1zXCJcclxuICAgICAoY2xpY2spPVwiaGFuZGxlQmFja2Ryb3BDbGljaygpXCJcclxuICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJydWNJbnB1dERhdGEuaGFzQmFja2Ryb3AgPyBydWNJbnB1dERhdGEuYmFja2Ryb3BCYWNrZ3JvdW5kQ29sb3IgOiAnJ1wiPlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gXHJcbiAgQ3VzdG9tIER5bmFtaWMgRHJhd2VyIGVsZW1lbnQuXHJcbiAgVGhpcyBpcyB0aGUgbWFpbiBwYW5lbCB0aGF0IHNsaWRlcyBpbiBhbmQgb3V0LlxyXG4gIC0gQXBwbGllcyBDU1MgY2xhc3NlcyBiYXNlZCBvbiBjdXJyZW50RHJhd2VyUG9zaXRpb24gYW5kIGN1c3RvbVRoZW1lLlxyXG4gIC0gRHluYW1pY2FsbHkgc2V0cyB3aWR0aCBhbmQgaGVpZ2h0IGJhc2VkIG9uIGRyYXdlciBvcmllbnRhdGlvbiBhbmQgaW5wdXQgZGF0YS5cclxuICAtIFVzZXMgb25lIG9mIGZvdXIgYW5pbWF0aW9uIHRyaWdnZXJzIChzbGlkZUluT3V0TGVmdCwgc2xpZGVJbk91dFJpZ2h0LCBzbGlkZUluT3V0VG9wLCBzbGlkZUluT3V0Qm90dG9tKVxyXG4gICAgYmFzZWQgb24gY3VycmVudERyYXdlclBvc2l0aW9uLiBPbmx5IHRoZSBhY3RpdmUgdHJpZ2dlciBydW5zIGl0cyBhbmltYXRpb247IG90aGVycyBhcmUgc2V0IHRvIGFuXHJcbiAgICBpbnN0YW50ICdvdXQnIHN0YXRlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlLlxyXG4gIC0gQW5pbWF0aW9uIGNvbXBsZXRpb24gZXZlbnRzIGFyZSBoYW5kbGVkIGJ5IG9uQW5pbWF0aW9uRG9uZSgpLlxyXG4tLT5cclxuPGRpdiBjbGFzcz1cImR5bmFtaWMtZHJhd2VyXCJcclxuICAgICBbbmdDbGFzc109XCInZHJhd2VyLScgKyBjdXJyZW50RHJhd2VyUG9zaXRpb24gKyAnICcgKyAoY3VzdG9tVGhlbWUgfHwgJycpXCJcclxuICAgICBbc3R5bGUud2lkdGhdPVwiIWlzVmVydGljYWxMYXlvdXQgPyBlZmZlY3RpdmVEcmF3ZXJEaW1lbnNpb24gOiAnMTAwJSdcIlxyXG4gICAgIFtzdHlsZS5oZWlnaHRdPVwiaXNWZXJ0aWNhbExheW91dCA/IGVmZmVjdGl2ZURyYXdlckRpbWVuc2lvbiA6ICcxMDAlJ1wiXHJcblxyXG4gICAgIFtAc2xpZGVJbk91dExlZnRdPVwiY3VycmVudERyYXdlclBvc2l0aW9uID09PSAnbGVmdCcgPyBhbmltYXRpb25QYXJhbXMgOiB7dmFsdWU6ICdvdXQnLCBwYXJhbXM6IHtkdXJhdGlvbjogJzBtcyd9fVwiXHJcbiAgICAgKEBzbGlkZUluT3V0TGVmdC5kb25lKT1cImN1cnJlbnREcmF3ZXJQb3NpdGlvbiA9PT0gJ2xlZnQnICYmIG9uQW5pbWF0aW9uRG9uZSgkZXZlbnQpXCJcclxuXHJcbiAgICAgW0BzbGlkZUluT3V0UmlnaHRdPVwiY3VycmVudERyYXdlclBvc2l0aW9uID09PSAncmlnaHQnID8gYW5pbWF0aW9uUGFyYW1zIDoge3ZhbHVlOiAnb3V0JywgcGFyYW1zOiB7ZHVyYXRpb246ICcwbXMnfX1cIlxyXG4gICAgIChAc2xpZGVJbk91dFJpZ2h0LmRvbmUpPVwiY3VycmVudERyYXdlclBvc2l0aW9uID09PSAncmlnaHQnICYmIG9uQW5pbWF0aW9uRG9uZSgkZXZlbnQpXCJcclxuXHJcbiAgICAgW0BzbGlkZUluT3V0VG9wXT1cImN1cnJlbnREcmF3ZXJQb3NpdGlvbiA9PT0gJ3RvcCcgPyBhbmltYXRpb25QYXJhbXMgOiB7dmFsdWU6ICdvdXQnLCBwYXJhbXM6IHtkdXJhdGlvbjogJzBtcyd9fVwiXHJcbiAgICAgKEBzbGlkZUluT3V0VG9wLmRvbmUpPVwiY3VycmVudERyYXdlclBvc2l0aW9uID09PSAndG9wJyAmJiBvbkFuaW1hdGlvbkRvbmUoJGV2ZW50KVwiXHJcblxyXG4gICAgIFtAc2xpZGVJbk91dEJvdHRvbV09XCJjdXJyZW50RHJhd2VyUG9zaXRpb24gPT09ICdib3R0b20nID8gYW5pbWF0aW9uUGFyYW1zIDoge3ZhbHVlOiAnb3V0JywgcGFyYW1zOiB7ZHVyYXRpb246ICcwbXMnfX1cIlxyXG4gICAgIChAc2xpZGVJbk91dEJvdHRvbS5kb25lKT1cImN1cnJlbnREcmF3ZXJQb3NpdGlvbiA9PT0gJ2JvdHRvbScgJiYgb25BbmltYXRpb25Eb25lKCRldmVudClcIj5cclxuXHJcbiAgPCEtLSBXcmFwcGVyIGZvciB0aGUgY29udGVudCBpbnNpZGUgdGhlIGRyYXdlciwgaGFuZGxlcyBwYWRkaW5nIGFuZCBsYXlvdXQuIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJkcmF3ZXItY29udGVudC13cmFwcGVyXCI+XHJcbiAgICA8IS0tIE9wdGlvbmFsIHRpdGxlIGZvciB0aGUgZHJhd2VyLiAtLT5cclxuICAgIDxoMiAqbmdJZj1cInJ1Y0lucHV0RGF0YS5jb250ZW50Py5kcmF3ZXJUaXRsZVwiIGNsYXNzPVwicnVjbGliLWRyYXdlci10aXRsZVwiPlxyXG4gICAgICB7eyBydWNJbnB1dERhdGEuY29udGVudD8uZHJhd2VyVGl0bGUgfX1cclxuICAgIDwvaDI+XHJcbiAgICA8IS0tIFxyXG4gICAgICBPcHRpb25hbCBjbG9zZSBidXR0b24gaW5zaWRlIHRoZSBkcmF3ZXIuXHJcbiAgICAgIFRvZ2dsZXMgdGhlIGRyYXdlciBmb3IgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2hlbiBjbGlja2VkLlxyXG4gICAgICBBUklBIGxhYmVsIHByb3ZpZGVzIGFjY2Vzc2liaWxpdHkuXHJcbiAgICAgIERpbWVuc2lvbnMgY2FuIGJlIGN1c3RvbWl6ZWQgdmlhIHJ1Y0lucHV0RGF0YS5jbG9zZUJ1dHRvbkRpbWVuc2lvbnMuXHJcbiAgICAtLT5cclxuICAgIDxidXR0b24gKm5nSWY9XCJydWNJbnB1dERhdGEuc2hvd0Nsb3NlSWNvblwiXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cInJ1Y2xpYi1kcmF3ZXItY2xvc2UtYnV0dG9uXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURyYXdlcihjdXJyZW50RHJhd2VyUG9zaXRpb24pXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQ2xvc2UgJyArIGN1cnJlbnREcmF3ZXJQb3NpdGlvbiArICcgZHJhd2VyJ1wiXHJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJydWNJbnB1dERhdGEuY2xvc2VCdXR0b25EaW1lbnNpb25zPy53aWR0aFwiXHJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwicnVjSW5wdXREYXRhLmNsb3NlQnV0dG9uRGltZW5zaW9ucz8uaGVpZ2h0XCI+XHJcbiAgICAgIDwhLS0gTWF0ZXJpYWwgaWNvbiBmb3IgdGhlIGNsb3NlIGJ1dHRvbi4gU2l6ZSBjYW4gYmUgY3VzdG9taXplZC4gLS0+XHJcbiAgICAgIDxtYXQtaWNvbiBbc3R5bGUuZm9udC1zaXplXT1cInJ1Y0lucHV0RGF0YS5jbG9zZUJ1dHRvbkRpbWVuc2lvbnM/Lmljb25TaXplXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8IS0tIE1haW4gYm9keSBjb250ZW50IG9mIHRoZSBkcmF3ZXIuIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInJ1Y2xpYi1kcmF3ZXItYm9keVwiPlxyXG4gICAgICA8IS0tIEhvc3QgZm9yIGR5bmFtaWNhbGx5IGluamVjdGVkIGNvbXBvbmVudCAtLT5cclxuICAgICAgPG5nLXRlbXBsYXRlICNkcmF3ZXJDb21wb25lbnRIb3N0PjwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwhLS0gRmFsbGJhY2sgdG8gSFRNTCBjb250ZW50IGlmIG5vIGNvbXBvbmVudCBpcyBwcm92aWRlZCAtLT5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFydWNJbnB1dERhdGEuY29udGVudD8uZHJhd2VyQ29udGVudENvbXBvbmVudFwiIFtpbm5lckhUTUxdPVwicnVjSW5wdXREYXRhLmNvbnRlbnQ/LmRyYXdlckJvZHkgfHwgJycgfCBzYWZlSHRtbFwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBcclxuICBBbmd1bGFyIE1hdGVyaWFsIERyYXdlciBDb250YWluZXIuXHJcbiAgQWN0cyBhcyB0aGUgbWFpbiBjb250YWluZXIgZm9yIHRoZSBkcmF3ZXIgc3lzdGVtLCBlc3BlY2lhbGx5IGlmICdzaWRlJyBvciAncHVzaCcgbW9kZXNcclxuICB3ZXJlIHRvIGJlIGltcGxlbWVudGVkIHdpdGggTWF0RHJhd2VyJ3MgbmF0aXZlIGJlaGF2aW9yLiBXaXRoIGN1c3RvbSBmaXhlZC1wb3NpdGlvbiBhbmltYXRpb25zLFxyXG4gIGl0cyBwcmltYXJ5IHJvbGUgaGVyZSBpcyB0byBob3N0IHRoZSBtYXQtZHJhd2VyLWNvbnRlbnQuXHJcbiAgLSBBcHBsaWVzICd2ZXJ0aWNhbC1sYXlvdXQnIGNsYXNzIGlmIHRoZSBkcmF3ZXIgaXMgdG9wL2JvdHRvbS5cclxuICAtIE1hdERyYXdlcidzIG93biBiYWNrZHJvcCBpcyBkaXNhYmxlZCBhcyBhIGN1c3RvbSBvbmUgaXMgdXNlZC5cclxuLS0+XHJcbjxtYXQtZHJhd2VyLWNvbnRhaW5lclxyXG4gIGNsYXNzPVwicnVjbGliLWRyYXdlci1jb250YWluZXJcIlxyXG4gIFtjbGFzcy52ZXJ0aWNhbC1sYXlvdXRdPVwiaXNWZXJ0aWNhbExheW91dFwiXHJcbiAgW2hhc0JhY2tkcm9wXT1cImZhbHNlXCI+IDwhLS0gTWF0RHJhd2VyJ3MgYmFja2Ryb3AgaXMgbm90IHVzZWQgd2l0aCBjdXN0b20gYW5pbWF0aW9uIC0tPlxyXG4gIDxtYXQtZHJhd2VyLWNvbnRlbnQgY2xhc3M9XCJydWNsaWItbWFpbi1jb250ZW50XCI+XHJcbiAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJydWNJbnB1dERhdGEuZGlzYWJsZVRvZ2dsZUJ1dHRvbkluTWFpbkNvbnRlbnRcIlxyXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICB0aXRsZT1cIlRvZ2dsZSBEcmF3ZXJcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImRyYXdlci10b2dnbGUtYnV0dG9uXCJcclxuICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cInJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25EaW1lbnNpb25zPy53aWR0aFwiXHJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwicnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvbkRpbWVuc2lvbnM/LmhlaWdodFwiXHJcbiAgICAgICAgICAgIFtzdHlsZS5wYWRkaW5nXT1cInJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25EaW1lbnNpb25zPy5wYWRkaW5nXCJcclxuICAgICAgICAgICAgW3N0eWxlLmZvbnQtc2l6ZV09XCJydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uRGltZW5zaW9ucz8uZm9udFNpemVcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRHJhd2VyKGN1cnJlbnREcmF3ZXJQb3NpdGlvbilcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImdldFRvZ2dsZUJ1dHRvbkFyaWFMYWJlbCgpXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJkcmF3ZXJBbmltYXRpb25TdGF0ZSA9PT0gJ2luJ1wiPlxyXG4gICAgICA8IS0tIE9wdGlvbmFsIE1hdGVyaWFsIGljb24gZm9yIHRoZSB0b2dnbGUgYnV0dG9uLiBTaG93IG9ubHkgaWYgbm8gaW1hZ2UgVVJMIGlzIHByb3ZpZGVkLiAtLT5cclxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwicnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvbkljb24gJiYgIXJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25JbWFnZVVybFwiIFtzdHlsZS5mb250LXNpemVdPVwicnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvbkRpbWVuc2lvbnM/Lmljb25TaXplXCI+e3sgcnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvbkljb24gfX08L21hdC1pY29uPlxyXG4gICAgICA8IS0tIE9wdGlvbmFsIGltYWdlIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbi4gSWYgcHJlc2VudCwgaXQgc2hvdWxkIGZpbGwgdGhlIGJ1dHRvbi4gLS0+XHJcbiAgICAgIDxpbWcgKm5nSWY9XCJydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uSW1hZ2VVcmxcIlxyXG4gICAgICAgICAgIFtzcmNdPVwicnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvbkltYWdlVXJsXCJcclxuICAgICAgICAgICBbYWx0XT1cInJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25JbWFnZUFsdCB8fCAnVG9nZ2xlIERyYXdlcidcIlxyXG4gICAgICAgICAgIGNsYXNzPVwicnVjbGliLWRyYXdlci10b2dnbGUtaW1hZ2VcIlxyXG4gICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uRGltZW5zaW9ucz8ud2lkdGhcIlxyXG4gICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwicnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvbkRpbWVuc2lvbnM/LmhlaWdodFwiXHJcbiAgICAgICAgICAgW3N0eWxlLnBhZGRpbmddPVwicnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvbkRpbWVuc2lvbnM/LnBhZGRpbmdcIj5cclxuICAgICAgPCEtLSBUZXh0IGZvciB0aGUgdG9nZ2xlIGJ1dHRvbi4gU2hvdyBvbmx5IGlmIE5PIGljb24gQU5EIE5PIGltYWdlIFVSTCBpcyBwcm92aWRlZC4gLS0+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwiIXJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25JY29uICYmICFydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uSW1hZ2VVcmwgJiYgKHJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25UZXh0Py5vcGVuIHx8IHJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25UZXh0Py5jbG9zZSlcIj5cclxuICAgICAgICB7eyBkcmF3ZXJBbmltYXRpb25TdGF0ZSA9PT0gJ2luJyA/IChydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uVGV4dD8uY2xvc2UgfHwgJ0Nsb3NlJykgOiAocnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvblRleHQ/Lm9wZW4gfHwgJ09wZW4nKSB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS0gVGV4dCBmb3IgdGhlIHRvZ2dsZSBidXR0b24gd2hlbiBhbiBpY29uIChidXQgTk8gaW1hZ2UpIElTIGFsc28gcHJlc2VudC4gLS0+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwicnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvbkljb24gJiYgIXJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25JbWFnZVVybCAmJiAocnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvblRleHQ/Lm9wZW4gfHwgcnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvblRleHQ/LmNsb3NlKVwiIGNsYXNzPVwidG9nZ2xlLWJ1dHRvbi10ZXh0LXdpdGgtaWNvblwiPlxyXG4gICAgICAgIHt7IGRyYXdlckFuaW1hdGlvblN0YXRlID09PSAnaW4nID8gKHJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25UZXh0Py5jbG9zZSB8fCAnQ2xvc2UnKSA6IChydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uVGV4dD8ub3BlbiB8fCAnT3BlbicpIH19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPCEtLSBNYWluIGFwcGxpY2F0aW9uIGNvbnRlbnQgYXJlYSwgcmVuZGVyZWQgZnJvbSBIVE1MIHN0cmluZyB2aWEgc2FmZUh0bWwgcGlwZS4gLS0+XHJcbiAgICA8ZGl2IFtpbm5lckhUTUxdPVwicnVjSW5wdXREYXRhLmNvbnRlbnQ/Lm1haW5Cb2R5IHx8ICcnIHwgc2FmZUh0bWxcIj48L2Rpdj5cclxuICA8L21hdC1kcmF3ZXItY29udGVudD5cclxuPC9tYXQtZHJhd2VyLWNvbnRhaW5lcj4iXX0=
412
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVjbGliLWRyYXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3J1Y2xpYi1kcmF3ZXIvcnVjbGliLWRyYXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL3J1Y2xpYi1kcmF3ZXIvcnVjbGliLWRyYXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBb0MsTUFBTSxFQUFFLFlBQVksRUFBaUIsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBMkIsTUFBTSxlQUFlLENBQUM7QUFDL00sT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQWtCLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7QUFJakc7Ozs7R0FJRztBQWtDSCxNQUFNLE9BQU8scUJBQXFCO0lBK0VoQyxZQUNVLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBL0VoQzs7O1dBR0c7UUFDTSxpQkFBWSxHQUFzQixFQUFFLENBQUM7UUFNOUM7Ozs7V0FJRztRQUNPLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBSzdDLHNEQUFzRDtRQUM5Qyx3QkFBbUIsR0FBNkIsSUFBSSxDQUFDO1FBRTdEOzs7V0FHRztRQUNJLHlCQUFvQixHQUFpQixLQUFLLENBQUM7UUFDbEQ7Ozs7V0FJRztRQUNJLDBCQUFxQixHQUF3QyxNQUFNLENBQUMsQ0FBQyxVQUFVO1FBQ3RGOzs7O1dBSUc7UUFDSywwQkFBcUIsR0FBK0MsSUFBSSxDQUFDO1FBQ2pGOzs7V0FHRztRQUNJLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQ3BDOzs7O1dBSUc7UUFDSSwrQkFBMEIsR0FBVyxPQUFPLENBQUM7UUFFcEQ7Ozs7V0FJRztRQUNJLGtCQUFhLEdBQWtCLE1BQU0sQ0FBQztRQUM3Qzs7Ozs7V0FLRztRQUNJLHNCQUFpQixHQUFvQixPQUFPLENBQUM7UUFDcEQ7Ozs7V0FJRztRQUNJLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUN6Qzs7OztXQUlHO1FBQ0ksNkJBQXdCLEdBQVcsT0FBTyxDQUFDO0lBSTlDLENBQUM7SUFFTDs7T0FFRztJQUNILFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxLQUFLLEVBQUU7WUFDL0Usa0RBQWtEO1lBQ2xELDBHQUEwRztZQUMxRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzdEO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUMzQixNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxhQUFrQyxJQUFJLEVBQUUsQ0FBQztZQUM5RixNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxZQUFpQyxJQUFJLEVBQUUsQ0FBQztZQUU1RixNQUFNLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ3RGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxJQUFJLENBQUM7WUFFbkQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUM7WUFDMUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRW5CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztZQUMvQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixJQUFJLEtBQUssQ0FBQztZQUVuRSxJQUFJLE9BQU8sSUFBSSxXQUFXLEtBQUssV0FBVyxFQUFFO2dCQUMxQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsV0FBVyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDaEM7aUJBQU0sSUFBSSxPQUFPLEtBQUssWUFBWSxFQUFFO2dCQUNuQyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMzQjtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssV0FBVztRQUNqQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztRQUN0RCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLENBQUM7UUFFakYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxjQUFrQyxFQUFFLGdCQUF3QixFQUFVLEVBQUU7WUFDNUYsT0FBTyxDQUFDLGNBQWMsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7UUFDOUYsQ0FBQyxDQUFDO1FBRUYsUUFBUSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDbEMsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7Z0JBQzlCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3JGLE1BQU07WUFDUixLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQztnQkFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDN0IsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDdEYsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO2dCQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2dCQUM3QixJQUFJLENBQUMsd0JBQXdCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN0RixNQUFNO1lBQ1IsS0FBSyxNQUFNLENBQUM7WUFDWjtnQkFDRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO2dCQUM5QixJQUFJLENBQUMsd0JBQXdCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNyRixNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLGlCQUF1RDtRQUNsRSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDbkQsT0FBTztTQUNSO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDekUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixLQUFLLElBQUksQ0FBQztRQUN4RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLEtBQUssZ0JBQWdCLENBQUM7UUFFdkUsSUFBSSxZQUFZLEVBQUU7WUFDaEIsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNoQztpQkFBTTtnQkFDTCxJQUFJLENBQUMscUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNoQztTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNuQixJQUFJLENBQUMscUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUNwQjtZQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssa0JBQWtCLENBQUMsSUFBYTtRQUN0QyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ3BHLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYTtZQUMxQyxNQUFNLEVBQUUsSUFBSTtZQUNaLFFBQVEsRUFBRSxJQUFJLENBQUMscUJBQXFCO1NBQ3JDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsS0FBcUI7UUFDbkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUN0RCxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO2dCQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztnQkFDbEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7Z0JBRWxHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO29CQUM5QixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO29CQUN4RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO29CQUNsQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ25CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNoQyxDQUFDLENBQUMsQ0FBQztvQkFDSCxPQUFPO2lCQUNSO2FBQ0Y7aUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtnQkFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7Z0JBQ2pHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO2FBQ2xHO1lBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTNCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDO1FBQ3hFLElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM3QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuRixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUM1RDtZQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFO2dCQUNyRixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3RFLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxtQkFBb0IsQ0FBQyxRQUFRLEVBQUU7d0JBQzdDLElBQUksQ0FBQyxtQkFBb0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDN0Y7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQzVEO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLGVBQWU7UUFDakIsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQywwQkFBMEIsRUFBRSxFQUFFLENBQUM7SUFDckcsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksdUJBQXVCO1FBQ3pCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEQsVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDNUQ7YUFBTSxJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEQsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDakU7YUFBTTtZQUNMLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLG1DQUFtQztTQUN2RztRQUNELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7UUFDbEYsTUFBTSxnQkFBZ0IsR0FBRyxxQkFBcUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQXFCLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsK0NBQStDO1FBQzVJLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7SUFDdEYsQ0FBQztJQUNEOzs7T0FHRztJQUNILHdCQUF3QjtRQUN0QixNQUFNLFdBQVcsR0FBRyxRQUFRLElBQUksQ0FBQyxxQkFBcUIsU0FBUyxDQUFDO1FBQ2hFLE1BQU0sWUFBWSxHQUFHLFNBQVMsSUFBSSxDQUFDLHFCQUFxQixTQUFTLENBQUM7UUFDbEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLElBQUksV0FBVyxDQUFDO1FBQ3pFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxJQUFJLFlBQVksQ0FBQztRQUM1RSxPQUFPLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ25FLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksbUJBQW1CO1FBQ3hCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDL0M7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUVILGdCQUFnQixDQUFDLEtBQW9CO1FBQ25DLElBQUksSUFBSSxDQUFDLG9CQUFvQixLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDcEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUMvQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDNUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDNUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQzs7bUhBbldVLHFCQUFxQjt1R0FBckIscUJBQXFCLHlWQW1CVSxnQkFBZ0IsZ0VDOUQ1RCwwclBBNkh1QixzZ29DRC9HVDtRQUNWLE9BQU8sQ0FBQyxjQUFjLEVBQUU7WUFDdEIsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUMzRCxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3hELFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDMUQsQ0FBQztRQUNGLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtZQUN4QixLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM3RSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDekUsVUFBVSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQztTQUM5RCxDQUFDO1FBQ0YsT0FBTyxDQUFDLGlCQUFpQixFQUFFO1lBQ3pCLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUN6RSxVQUFVLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQzlELENBQUM7UUFDRixPQUFPLENBQUMsZUFBZSxFQUFFO1lBQ3ZCLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLFVBQVUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDOUQsQ0FBQztRQUNGLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtZQUMxQixLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM1RSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUMxRSxVQUFVLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQzlELENBQUM7S0FDSDs0RkFFVSxxQkFBcUI7a0JBakNqQyxTQUFTOytCQUNFLG1CQUFtQixjQUdqQjt3QkFDVixPQUFPLENBQUMsY0FBYyxFQUFFOzRCQUN0QixLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7NEJBQ3pELEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQzs0QkFDM0QsVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQzs0QkFDeEQsVUFBVSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQzt5QkFDMUQsQ0FBQzt3QkFDRixPQUFPLENBQUMsZ0JBQWdCLEVBQUU7NEJBQ3hCLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDOzRCQUM3RSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7NEJBQ3pFLFVBQVUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUM7eUJBQzlELENBQUM7d0JBQ0YsT0FBTyxDQUFDLGlCQUFpQixFQUFFOzRCQUN6QixLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQzs0QkFDNUUsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDOzRCQUN6RSxVQUFVLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO3lCQUM5RCxDQUFDO3dCQUNGLE9BQU8sQ0FBQyxlQUFlLEVBQUU7NEJBQ3ZCLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDOzRCQUM3RSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQzs0QkFDMUUsVUFBVSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQzt5QkFDOUQsQ0FBQzt3QkFDRixPQUFPLENBQUMsa0JBQWtCLEVBQUU7NEJBQzFCLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDOzRCQUM1RSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQzs0QkFDMUUsVUFBVSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQzt5QkFDOUQsQ0FBQztxQkFDSDt3R0FPUSxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTUksUUFBUTtzQkFBakIsTUFBTTtnQkFHcUUsbUJBQW1CO3NCQUE5RixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBdVQxRSxnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEhvc3RMaXN0ZW5lciwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBDb21wb25lbnRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0cmlnZ2VyLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIGFuaW1hdGUsIEFuaW1hdGlvbkV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IE1hdERyYXdlck1vZGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcclxuaW1wb3J0IHsgUnVjbGliRHJhd2VySW5wdXQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvZHJhd2VyJztcclxuXHJcbi8qKlxyXG4gKiBAQ29tcG9uZW50IFJ1Y2xpYkRyYXdlckNvbXBvbmVudFxyXG4gKiBAZGVzY3JpcHRpb24gQSBoaWdobHkgY29uZmlndXJhYmxlIGRyYXdlciBjb21wb25lbnQgdGhhdCBjYW4gc2xpZGUgaW4gZnJvbSBhbnkgb2YgdGhlIGZvdXIgZGlyZWN0aW9ucyAobGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tKS5cclxuICogSXQgdXNlcyBjdXN0b20gQW5ndWxhciBhbmltYXRpb25zIGZvciBzbW9vdGggdHJhbnNpdGlvbnMgYW5kIHN1cHBvcnRzIHRoZW1pbmcuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3V4cC1ydWNsaWItZHJhd2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcnVjbGliLWRyYXdlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcnVjbGliLWRyYXdlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ2JhY2tkcm9wRmFkZScsIFtcclxuICAgICAgc3RhdGUoJ291dCcsIHN0eWxlKHsgb3BhY2l0eTogMCwgdmlzaWJpbGl0eTogJ2hpZGRlbicgfSkpLFxyXG4gICAgICBzdGF0ZSgnaW4nLCBzdHlsZSh7IG9wYWNpdHk6IDAuNiwgdmlzaWJpbGl0eTogJ3Zpc2libGUnIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbignb3V0ID0+IGluJywgYW5pbWF0ZSgne3tkdXJhdGlvbn19IGVhc2UtaW4nKSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ2luID0+IG91dCcsIGFuaW1hdGUoJ3t7ZHVyYXRpb259fSBlYXNlLW91dCcpKSxcclxuICAgIF0pLFxyXG4gICAgdHJpZ2dlcignc2xpZGVJbk91dExlZnQnLCBbXHJcbiAgICAgIHN0YXRlKCdvdXQnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoLTEwMCUpJywgdmlzaWJpbGl0eTogJ2hpZGRlbicgfSkpLFxyXG4gICAgICBzdGF0ZSgnaW4nLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMCknLCB2aXNpYmlsaXR5OiAndmlzaWJsZScgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCdvdXQgPD0+IGluJywgYW5pbWF0ZSgne3tkdXJhdGlvbn19IGVhc2UtaW4tb3V0JykpLFxyXG4gICAgXSksXHJcbiAgICB0cmlnZ2VyKCdzbGlkZUluT3V0UmlnaHQnLCBbXHJcbiAgICAgIHN0YXRlKCdvdXQnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMTAwJSknLCB2aXNpYmlsaXR5OiAnaGlkZGVuJyB9KSksXHJcbiAgICAgIHN0YXRlKCdpbicsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScsIHZpc2liaWxpdHk6ICd2aXNpYmxlJyB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ291dCA8PT4gaW4nLCBhbmltYXRlKCd7e2R1cmF0aW9ufX0gZWFzZS1pbi1vdXQnKSksXHJcbiAgICBdKSxcclxuICAgIHRyaWdnZXIoJ3NsaWRlSW5PdXRUb3AnLCBbXHJcbiAgICAgIHN0YXRlKCdvdXQnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwMCUpJywgdmlzaWJpbGl0eTogJ2hpZGRlbicgfSkpLFxyXG4gICAgICBzdGF0ZSgnaW4nLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCUpJywgdmlzaWJpbGl0eTogJ3Zpc2libGUnIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbignb3V0IDw9PiBpbicsIGFuaW1hdGUoJ3t7ZHVyYXRpb259fSBlYXNlLWluLW91dCcpKSxcclxuICAgIF0pLFxyXG4gICAgdHJpZ2dlcignc2xpZGVJbk91dEJvdHRvbScsIFtcclxuICAgICAgc3RhdGUoJ291dCcsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgxMDAlKScsIHZpc2liaWxpdHk6ICdoaWRkZW4nIH0pKSxcclxuICAgICAgc3RhdGUoJ2luJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDAlKScsIHZpc2liaWxpdHk6ICd2aXNpYmxlJyB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ291dCA8PT4gaW4nLCBhbmltYXRlKCd7e2R1cmF0aW9ufX0gZWFzZS1pbi1vdXQnKSksXHJcbiAgICBdKVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJ1Y2xpYkRyYXdlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8qKlxyXG4gICAqIElucHV0IGRhdGEgZm9yIGNvbmZpZ3VyaW5nIHRoZSBkcmF3ZXIncyBhcHBlYXJhbmNlIGFuZCBiZWhhdmlvci5cclxuICAgKiBAc2VlIFJ1Y2xpYkRyYXdlcklucHV0IGludGVyZmFjZSBmb3IgZGV0YWlsZWQgcHJvcGVydGllcy5cclxuICAgKi9cclxuICBASW5wdXQoKSBydWNJbnB1dERhdGE6IFJ1Y2xpYkRyYXdlcklucHV0ID0ge307XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgY3VzdG9tIHRoZW1lIGNsYXNzIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGRyYXdlciBwYW5lbC5cclxuICAgKiBAZXhhbXBsZSAnZGFyay10aGVtZScsICdjdXN0b20tdGhlbWUtb25lJ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGN1c3RvbVRoZW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLyoqXHJcbiAgICogRXZlbnRFbWl0dGVyIGZvciB2YXJpb3VzIGRyYXdlciBldmVudHMuXHJcbiAgICogRW1pdHMgb2JqZWN0cyB3aXRoIGB0eXBlYCAoZS5nLiwgJ29wZW5lZFN0YXJ0JywgJ2Nsb3NlZFN0YXJ0JywgJ29wZW5lZENoYW5nZScsICdkcmF3ZXJUb2dnbGUnKVxyXG4gICAqIGFuZCBgb3BlbmVkYCAoYm9vbGVhbikgYW5kIGBwb3NpdGlvbmAgKHN0cmluZykgcHJvcGVydGllcy5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcnVjRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgLyoqIFZpZXdDb250YWluZXJSZWYgdG8gaG9zdCB0aGUgZHluYW1pY2FsbHkgbG9hZGVkIGNvbXBvbmVudC4gKi9cclxuICBAVmlld0NoaWxkKCdkcmF3ZXJDb21wb25lbnRIb3N0JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgZHJhd2VyQ29tcG9uZW50SG9zdCE6IFZpZXdDb250YWluZXJSZWY7XHJcblxyXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIGR5bmFtaWNhbGx5IGNyZWF0ZWQgY29tcG9uZW50LiAqL1xyXG4gIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3VycmVudCBhbmltYXRpb24gc3RhdGUgb2YgdGhlIGRyYXdlciAoJ2luJyBvciAnb3V0JykuXHJcbiAgICogQHB1YmxpY1xyXG4gICAqL1xyXG4gIHB1YmxpYyBkcmF3ZXJBbmltYXRpb25TdGF0ZTogJ2luJyB8ICdvdXQnID0gJ291dCc7XHJcbiAgLyoqXHJcbiAgICogQ3VycmVudCBhY3RpdmUgcG9zaXRpb24gb2YgdGhlIGRyYXdlci5cclxuICAgKiBAcHVibGljXHJcbiAgICogQGRlZmF1bHQgJ2xlZnQnXHJcbiAgICovXHJcbiAgcHVibGljIGN1cnJlbnREcmF3ZXJQb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbScgPSAnbGVmdCc7IC8vIERlZmF1bHRcclxuICAvKipcclxuICAgKiBTdG9yZXMgdGhlIG5leHQgcG9zaXRpb24gaWYgdGhlIGRyYXdlciBpcyBjdXJyZW50bHkgb3BlbiBhbmQgYSBuZXcgcG9zaXRpb24gaXMgcmVxdWVzdGVkLlxyXG4gICAqIFVzZWQgdG8gc2VxdWVuY2UgY2xvc2UgYW5kIG9wZW4gYW5pbWF0aW9ucy5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGVuZGluZ0RyYXdlclBvc2l0aW9uOiAnbGVmdCcgfCAncmlnaHQnIHwgJ3RvcCcgfCAnYm90dG9tJyB8IG51bGwgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgYW4gYW5pbWF0aW9uIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcyB0byBwcmV2ZW50IHJhcGlkIHRvZ2dsaW5nLlxyXG4gICAqIEBwdWJsaWNcclxuICAgKi9cclxuICBwdWJsaWMgaXNBbmltYXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBFZmZlY3RpdmUgYW5pbWF0aW9uIGR1cmF0aW9uIGZvciB0aGUgZHJhd2VyLCBkZXJpdmVkIGZyb20gaW5wdXQgb3IgZGVmYXVsdC5cclxuICAgKiBAcHVibGljXHJcbiAgICogQGRlZmF1bHQgJzMwMG1zJ1xyXG4gICAqL1xyXG4gIHB1YmxpYyBlZmZlY3RpdmVBbmltYXRpb25EdXJhdGlvbjogc3RyaW5nID0gJzMwMG1zJztcclxuXHJcbiAgLyoqXHJcbiAgICogTW9kZSBvZiB0aGUgZHJhd2VyLCBwcmltYXJpbHkgZm9yIGRldGVybWluaW5nIGJhY2tkcm9wIGJlaGF2aW9yIHdpdGggY3VzdG9tIGFuaW1hdGlvbnMuXHJcbiAgICogQHB1YmxpY1xyXG4gICAqIEBkZWZhdWx0ICdzaWRlJ1xyXG4gICAqL1xyXG4gIHB1YmxpYyBtYXREcmF3ZXJNb2RlOiBNYXREcmF3ZXJNb2RlID0gJ3NpZGUnO1xyXG4gIC8qKlxyXG4gICAqIEFjdHVhbCBwb3NpdGlvbiAoJ3N0YXJ0JyBvciAnZW5kJykgdXNlZCBieSBBbmd1bGFyIE1hdGVyaWFsJ3MgTWF0RHJhd2VyIGlmIGl0IHdlcmUgZGlyZWN0bHkgdXNlZC5cclxuICAgKiBSZXRhaW5lZCBmb3IgbG9naWNhbCBjb25zaXN0ZW5jeSBpbiBkZXRlcm1pbmluZyBsYXlvdXQuXHJcbiAgICogQHB1YmxpY1xyXG4gICAqIEBkZWZhdWx0ICdzdGFydCdcclxuICAgKi9cclxuICBwdWJsaWMgbWF0QWN0dWFsUG9zaXRpb246ICdzdGFydCcgfCAnZW5kJyA9ICdzdGFydCc7XHJcbiAgLyoqXHJcbiAgICogRmxhZyBpbmRpY2F0aW5nIGlmIHRoZSBkcmF3ZXIgaXMgaW4gYSB2ZXJ0aWNhbCBsYXlvdXQgKHRvcC9ib3R0b20pLlxyXG4gICAqIEhlbHBzIGRldGVybWluZSBpZiB3aWR0aCBvciBoZWlnaHQgc2hvdWxkIGJlIDEwMCUuXHJcbiAgICogQHB1YmxpY1xyXG4gICAqL1xyXG4gIHB1YmxpYyBpc1ZlcnRpY2FsTGF5b3V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogRWZmZWN0aXZlIGRpbWVuc2lvbiAod2lkdGggb3IgaGVpZ2h0KSBvZiB0aGUgZHJhd2VyIHBhbmVsLlxyXG4gICAqIEBwdWJsaWNcclxuICAgKiBAZGVmYXVsdCAnMjUwcHgnXHJcbiAgICovXHJcbiAgcHVibGljIGVmZmVjdGl2ZURyYXdlckRpbWVuc2lvbjogc3RyaW5nID0gJzI1MHB4JztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBBbmd1bGFyIGxpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIGRhdGEtYm91bmQgcHJvcGVydGllcyBvZiBhIGRpcmVjdGl2ZSBhcmUgaW5pdGlhbGl6ZWQuXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFwcGx5SW5wdXRzKCk7XHJcbiAgICB0aGlzLmRyYXdlckFuaW1hdGlvblN0YXRlID0gJ291dCc7XHJcbiAgICB0aGlzLmxvYWREeW5hbWljQ29udGVudCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQW5ndWxhciBsaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCBhZnRlciBBbmd1bGFyIGhhcyBmdWxseSBpbml0aWFsaXplZCBhIGNvbXBvbmVudCdzIHZpZXcuXHJcbiAgICovXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucnVjSW5wdXREYXRhLmluaXRpYWxPcGVuZWRTdGF0ZSAmJiB0aGlzLmRyYXdlckFuaW1hdGlvblN0YXRlID09PSAnb3V0Jykge1xyXG4gICAgICAvLyBEZWZlciBzdGF0ZSB1cGRhdGUgdG8gdGhlIG5leHQgbWljcm90YXNrIHF1ZXVlLlxyXG4gICAgICAvLyBUaGlzIGhlbHBzIGF2b2lkIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3Igd2hlbiBpbml0aWFsaXppbmcgdGhlIGRyYXdlcidzIG9wZW4gc3RhdGUuXHJcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5zZXREcmF3ZXJPcGVuU3RhdGUodHJ1ZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQW5ndWxhciBsaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCB3aGVuIGFueSBkYXRhLWJvdW5kIHByb3BlcnR5IG9mIGEgZGlyZWN0aXZlIGNoYW5nZXMuXHJcbiAgICogQHBhcmFtIGNoYW5nZXMgLSBPYmplY3QgY29udGFpbmluZyB0aGUgY2hhbmdlZCBwcm9wZXJ0aWVzLlxyXG4gICAqL1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydydWNJbnB1dERhdGEnXSkge1xyXG4gICAgICBjb25zdCBwcmV2aW91c1J1Y0lucHV0RGF0YSA9IGNoYW5nZXNbJ3J1Y0lucHV0RGF0YSddLnByZXZpb3VzVmFsdWUgYXMgUnVjbGliRHJhd2VySW5wdXQgfHwge307XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRSdWNJbnB1dERhdGEgPSBjaGFuZ2VzWydydWNJbnB1dERhdGEnXS5jdXJyZW50VmFsdWUgYXMgUnVjbGliRHJhd2VySW5wdXQgfHwge307XHJcblxyXG4gICAgICBjb25zdCBvbGRQb3NpdGlvbiA9IHByZXZpb3VzUnVjSW5wdXREYXRhLmRyYXdlclBvc2l0aW9uID8/IHRoaXMuY3VycmVudERyYXdlclBvc2l0aW9uO1xyXG4gICAgICBjb25zdCB3YXNPcGVuID0gdGhpcy5kcmF3ZXJBbmltYXRpb25TdGF0ZSA9PT0gJ2luJztcclxuXHJcbiAgICAgIHRoaXMuY3VycmVudERyYXdlclBvc2l0aW9uID0gY3VycmVudFJ1Y0lucHV0RGF0YS5kcmF3ZXJQb3NpdGlvbiA/PyAnbGVmdCc7XHJcbiAgICAgIHRoaXMuYXBwbHlJbnB1dHMoKTtcclxuXHJcbiAgICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gdGhpcy5jdXJyZW50RHJhd2VyUG9zaXRpb247XHJcbiAgICAgIGNvbnN0IHNob3VsZEJlT3BlbiA9IHRoaXMucnVjSW5wdXREYXRhLmluaXRpYWxPcGVuZWRTdGF0ZSA/PyBmYWxzZTtcclxuXHJcbiAgICAgIGlmICh3YXNPcGVuICYmIG9sZFBvc2l0aW9uICE9PSBuZXdQb3NpdGlvbikge1xyXG4gICAgICAgIHRoaXMucGVuZGluZ0RyYXdlclBvc2l0aW9uID0gbmV3UG9zaXRpb247XHJcbiAgICAgICAgdGhpcy5zZXREcmF3ZXJPcGVuU3RhdGUoZmFsc2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKHdhc09wZW4gIT09IHNob3VsZEJlT3Blbikge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXREcmF3ZXJPcGVuU3RhdGUoc2hvdWxkQmVPcGVuKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvYWREeW5hbWljQ29udGVudCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGxpZXMgaW5wdXQgZGF0YSB0byBjb21wb25lbnQgcHJvcGVydGllcywgY2FsY3VsYXRpbmcgZGltZW5zaW9ucyBhbmQgcG9zaXRpb25zLlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhcHBseUlucHV0cygpOiB2b2lkIHtcclxuICAgIHRoaXMubWF0RHJhd2VyTW9kZSA9IHRoaXMucnVjSW5wdXREYXRhLm1vZGUgPz8gJ3NpZGUnO1xyXG4gICAgdGhpcy5lZmZlY3RpdmVBbmltYXRpb25EdXJhdGlvbiA9IHRoaXMucnVjSW5wdXREYXRhLmFuaW1hdGlvbkR1cmF0aW9uIHx8ICczMDBtcyc7XHJcblxyXG4gICAgY29uc3QgZ2V0RGltZW5zaW9uID0gKGlucHV0RGltZW5zaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsIGRlZmF1bHREaW1lbnNpb246IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgICAgIHJldHVybiAoaW5wdXREaW1lbnNpb24gJiYgaW5wdXREaW1lbnNpb24udHJpbSgpICE9PSAnJykgPyBpbnB1dERpbWVuc2lvbiA6IGRlZmF1bHREaW1lbnNpb247XHJcbiAgICB9O1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50RHJhd2VyUG9zaXRpb24pIHtcclxuICAgICAgY2FzZSAncmlnaHQnOlxyXG4gICAgICAgIHRoaXMubWF0QWN0dWFsUG9zaXRpb24gPSAnZW5kJztcclxuICAgICAgICB0aGlzLmlzVmVydGljYWxMYXlvdXQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVmZmVjdGl2ZURyYXdlckRpbWVuc2lvbiA9IGdldERpbWVuc2lvbih0aGlzLnJ1Y0lucHV0RGF0YS5kcmF3ZXJXaWR0aCwgJzI1MHB4Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3RvcCc6XHJcbiAgICAgICAgdGhpcy5tYXRBY3R1YWxQb3NpdGlvbiA9ICdzdGFydCc7XHJcbiAgICAgICAgdGhpcy5pc1ZlcnRpY2FsTGF5b3V0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVmZmVjdGl2ZURyYXdlckRpbWVuc2lvbiA9IGdldERpbWVuc2lvbih0aGlzLnJ1Y0lucHV0RGF0YS5kcmF3ZXJIZWlnaHQsICcyMDBweCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdib3R0b20nOlxyXG4gICAgICAgIHRoaXMubWF0QWN0dWFsUG9zaXRpb24gPSAnZW5kJztcclxuICAgICAgICB0aGlzLmlzVmVydGljYWxMYXlvdXQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0aXZlRHJhd2VyRGltZW5zaW9uID0gZ2V0RGltZW5zaW9uKHRoaXMucnVjSW5wdXREYXRhLmRyYXdlckhlaWdodCwgJzIwMHB4Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2xlZnQnOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMubWF0QWN0dWFsUG9zaXRpb24gPSAnc3RhcnQnO1xyXG4gICAgICAgIHRoaXMuaXNWZXJ0aWNhbExheW91dCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZWZmZWN0aXZlRHJhd2VyRGltZW5zaW9uID0gZ2V0RGltZW5zaW9uKHRoaXMucnVjSW5wdXREYXRhLmRyYXdlcldpZHRoLCAnMjUwcHgnKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZXMgdGhlIGRyYXdlcidzIG9wZW4vY2xvc2Ugc3RhdGUgb3Igc3dpdGNoZXMgdG8gYSBuZXcgcG9zaXRpb24uXHJcbiAgICogQHBhcmFtIHJlcXVlc3RlZFBvc2l0aW9uIC0gVGhlIGRlc2lyZWQgcG9zaXRpb24gdG8gb3BlbiB0aGUgZHJhd2VyIGZyb20uIElmIG5vdCBwcm92aWRlZCwgdXNlcyBgY3VycmVudERyYXdlclBvc2l0aW9uYC5cclxuICAgKi9cclxuICB0b2dnbGVEcmF3ZXIocmVxdWVzdGVkUG9zaXRpb24/OiAnbGVmdCcgfCAncmlnaHQnIHwgJ3RvcCcgfCAnYm90dG9tJyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNBbmltYXRpbmcgJiYgIXRoaXMucGVuZGluZ0RyYXdlclBvc2l0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc3QgcG9zaXRpb25Ub1RvZ2dsZSA9IHJlcXVlc3RlZFBvc2l0aW9uIHx8IHRoaXMuY3VycmVudERyYXdlclBvc2l0aW9uO1xyXG4gICAgY29uc3QgaXNEcmF3ZXJPcGVuID0gdGhpcy5kcmF3ZXJBbmltYXRpb25TdGF0ZSA9PT0gJ2luJztcclxuICAgIGNvbnN0IGlzU2FtZVBvc2l0aW9uID0gdGhpcy5jdXJyZW50RHJhd2VyUG9zaXRpb24gPT09IHBvc2l0aW9uVG9Ub2dnbGU7XHJcblxyXG4gICAgaWYgKGlzRHJhd2VyT3Blbikge1xyXG4gICAgICBpZiAoaXNTYW1lUG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLnNldERyYXdlck9wZW5TdGF0ZShmYWxzZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nRHJhd2VyUG9zaXRpb24gPSBwb3NpdGlvblRvVG9nZ2xlO1xyXG4gICAgICAgIHRoaXMuc2V0RHJhd2VyT3BlblN0YXRlKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCFpc1NhbWVQb3NpdGlvbikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudERyYXdlclBvc2l0aW9uID0gcG9zaXRpb25Ub1RvZ2dsZTtcclxuICAgICAgICB0aGlzLmFwcGx5SW5wdXRzKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXREcmF3ZXJPcGVuU3RhdGUodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBkcmF3ZXIncyBvcGVuIHN0YXRlIGFuZCB0cmlnZ2VycyB0aGUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSBvcGVuIC0gQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gb3BlbiAodHJ1ZSkgb3IgY2xvc2UgKGZhbHNlKSB0aGUgZHJhd2VyLlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXREcmF3ZXJPcGVuU3RhdGUob3BlbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNBbmltYXRpbmcgJiYgIXRoaXMucGVuZGluZ0RyYXdlclBvc2l0aW9uICYmIG9wZW4gPT09ICh0aGlzLmRyYXdlckFuaW1hdGlvblN0YXRlID09PSAnaW4nKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzQW5pbWF0aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuZHJhd2VyQW5pbWF0aW9uU3RhdGUgPSBvcGVuID8gJ2luJyA6ICdvdXQnO1xyXG4gICAgdGhpcy5ydWNFdmVudC5lbWl0KHtcclxuICAgICAgdHlwZTogb3BlbiA/ICdvcGVuZWRTdGFydCcgOiAnY2xvc2VkU3RhcnQnLFxyXG4gICAgICBvcGVuZWQ6IG9wZW4sXHJcbiAgICAgIHBvc2l0aW9uOiB0aGlzLmN1cnJlbnREcmF3ZXJQb3NpdGlvblxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsYmFjayBmb3Igd2hlbiBhIGRyYXdlciBhbmltYXRpb24gZmluaXNoZXMuXHJcbiAgICogTWFuYWdlcyBzdGF0ZSB0cmFuc2l0aW9ucywgZXNwZWNpYWxseSB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIG9wZW4gZHJhd2Vycy5cclxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgQW5ndWxhciBBbmltYXRpb25FdmVudC5cclxuICAgKi9cclxuICBvbkFuaW1hdGlvbkRvbmUoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQuZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2R5bmFtaWMtZHJhd2VyJykpIHtcclxuICAgICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICdvdXQnKSB7XHJcbiAgICAgICAgdGhpcy5ydWNFdmVudC5lbWl0KHsgdHlwZTogJ29wZW5lZENoYW5nZScsIG9wZW5lZDogZmFsc2UsIHBvc2l0aW9uOiB0aGlzLmN1cnJlbnREcmF3ZXJQb3NpdGlvbiB9KTtcclxuICAgICAgICB0aGlzLnJ1Y0V2ZW50LmVtaXQoeyB0eXBlOiAnZHJhd2VyVG9nZ2xlJywgb3BlbmVkOiBmYWxzZSwgcG9zaXRpb246IHRoaXMuY3VycmVudERyYXdlclBvc2l0aW9uIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wZW5kaW5nRHJhd2VyUG9zaXRpb24pIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudERyYXdlclBvc2l0aW9uID0gdGhpcy5wZW5kaW5nRHJhd2VyUG9zaXRpb247XHJcbiAgICAgICAgICB0aGlzLnBlbmRpbmdEcmF3ZXJQb3NpdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmFwcGx5SW5wdXRzKCk7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXREcmF3ZXJPcGVuU3RhdGUodHJ1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ2luJykge1xyXG4gICAgICAgIHRoaXMucnVjRXZlbnQuZW1pdCh7IHR5cGU6ICdvcGVuZWRDaGFuZ2UnLCBvcGVuZWQ6IHRydWUsIHBvc2l0aW9uOiB0aGlzLmN1cnJlbnREcmF3ZXJQb3NpdGlvbiB9KTtcclxuICAgICAgICB0aGlzLnJ1Y0V2ZW50LmVtaXQoeyB0eXBlOiAnZHJhd2VyVG9nZ2xlJywgb3BlbmVkOiB0cnVlLCBwb3NpdGlvbjogdGhpcy5jdXJyZW50RHJhd2VyUG9zaXRpb24gfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc0FuaW1hdGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkcyB0aGUgZHluYW1pYyBjb21wb25lbnQgaW50byB0aGUgZHJhd2VyIGlmIHNwZWNpZmllZCBpbiBydWNJbnB1dERhdGEuXHJcbiAgICogQ2xlYXJzIGV4aXN0aW5nIGR5bmFtaWMgY29tcG9uZW50IGlmIGFueS5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgbG9hZER5bmFtaWNDb250ZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGVhckR5bmFtaWNDb250ZW50KCk7XHJcblxyXG4gICAgY29uc3QgY29tcG9uZW50VHlwZSA9IHRoaXMucnVjSW5wdXREYXRhLmNvbnRlbnQ/LmRyYXdlckNvbnRlbnRDb21wb25lbnQ7XHJcbiAgICBpZiAoY29tcG9uZW50VHlwZSAmJiB0aGlzLmRyYXdlckNvbXBvbmVudEhvc3QpIHtcclxuICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50UmVmID0gdGhpcy5kcmF3ZXJDb21wb25lbnRIb3N0LmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlKTtcclxuICAgICAgaWYgKHRoaXMuZHluYW1pY0NvbXBvbmVudFJlZi5pbnN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnJ1Y0lucHV0RGF0YS5kcmF3ZXJDb250ZW50Q29tcG9uZW50RGF0YSAmJiB0aGlzLmR5bmFtaWNDb21wb25lbnRSZWYuaW5zdGFuY2UpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnJ1Y0lucHV0RGF0YS5kcmF3ZXJDb250ZW50Q29tcG9uZW50RGF0YSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgaWYgKGtleSBpbiB0aGlzLmR5bmFtaWNDb21wb25lbnRSZWYhLmluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFJlZiEuaW5zdGFuY2Vba2V5XSA9IHRoaXMucnVjSW5wdXREYXRhLmRyYXdlckNvbnRlbnRDb21wb25lbnREYXRhW2tleV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXR0ZXIgZm9yIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byB0aGUgYW5pbWF0aW9uIHRyaWdnZXJzIGluIHRoZSB0ZW1wbGF0ZS5cclxuICAgKiBJbmNsdWRlcyB0aGUgY3VycmVudCBhbmltYXRpb24gc3RhdGUgKCdpbicgb3IgJ291dCcpIGFuZCB0aGUgZWZmZWN0aXZlIGR1cmF0aW9uLlxyXG4gICAqL1xyXG4gIGdldCBhbmltYXRpb25QYXJhbXMoKSB7XHJcbiAgICByZXR1cm4geyB2YWx1ZTogdGhpcy5kcmF3ZXJBbmltYXRpb25TdGF0ZSwgcGFyYW1zOiB7IGR1cmF0aW9uOiB0aGlzLmVmZmVjdGl2ZUFuaW1hdGlvbkR1cmF0aW9uIH0gfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHRlciBmb3IgdGhlIGJhY2tkcm9wIGFuaW1hdGlvbiBwYXJhbWV0ZXJzLlxyXG4gICAqIFR5cGljYWxseSB1c2VzIGEgZmFzdGVyIGR1cmF0aW9uIHRoYW4gdGhlIG1haW4gZHJhd2VyIGFuaW1hdGlvbi5cclxuICAgKi9cclxuICBnZXQgYmFja2Ryb3BBbmltYXRpb25QYXJhbXMoKSB7XHJcbiAgICBsZXQgZHVyYXRpb25NcyA9IDA7XHJcbiAgICBpZiAodGhpcy5lZmZlY3RpdmVBbmltYXRpb25EdXJhdGlvbi5lbmRzV2l0aCgnbXMnKSkge1xyXG4gICAgICBkdXJhdGlvbk1zID0gcGFyc2VJbnQodGhpcy5lZmZlY3RpdmVBbmltYXRpb25EdXJhdGlvbiwgMTApO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmVmZmVjdGl2ZUFuaW1hdGlvbkR1cmF0aW9uLmVuZHNXaXRoKCdzJykpIHtcclxuICAgICAgZHVyYXRpb25NcyA9IHBhcnNlRmxvYXQodGhpcy5lZmZlY3RpdmVBbmltYXRpb25EdXJhdGlvbikgKiAxMDAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZHVyYXRpb25NcyA9IHBhcnNlSW50KHRoaXMuZWZmZWN0aXZlQW5pbWF0aW9uRHVyYXRpb24sIDEwKSB8fCAzMDA7IC8vIEZhbGxiYWNrIGlmIGZvcm1hdCBpcyB1bmV4cGVjdGVkXHJcbiAgICB9XHJcbiAgICBjb25zdCBiYWNrZHJvcER1cmF0aW9uVmFsdWUgPSBNYXRoLmZsb29yKGR1cmF0aW9uTXMgLyAyKTsgLy8gRW5zdXJlIGludGVnZXIgZm9yIG1zXHJcbiAgICBjb25zdCBiYWNrZHJvcER1cmF0aW9uID0gYmFja2Ryb3BEdXJhdGlvblZhbHVlID4gMCA/IGAke2JhY2tkcm9wRHVyYXRpb25WYWx1ZX1tc2AgOiAnMTUwbXMnOyAvLyBGYWxsYmFjayBpZiBjYWxjdWxhdGVkIGR1cmF0aW9uIGlzIDAgb3IgbGVzc1xyXG4gICAgcmV0dXJuIHsgdmFsdWU6IHRoaXMuZHJhd2VyQW5pbWF0aW9uU3RhdGUsIHBhcmFtczogeyBkdXJhdGlvbjogYmFja2Ryb3BEdXJhdGlvbiB9IH07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyBhbiBhY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbiBiYXNlZCBvbiB0aGUgZHJhd2VyJ3Mgc3RhdGUgYW5kIHBvc2l0aW9uLlxyXG4gICAqIEByZXR1cm5zIFRoZSBBUklBIGxhYmVsIHN0cmluZyBmb3IgdGhlIHRvZ2dsZSBidXR0b24uXHJcbiAgICovXHJcbiAgZ2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkZWZhdWx0T3BlbiA9IGBPcGVuICR7dGhpcy5jdXJyZW50RHJhd2VyUG9zaXRpb259IERyYXdlcmA7XHJcbiAgICBjb25zdCBkZWZhdWx0Q2xvc2UgPSBgQ2xvc2UgJHt0aGlzLmN1cnJlbnREcmF3ZXJQb3NpdGlvbn0gRHJhd2VyYDtcclxuICAgIGNvbnN0IG9wZW5UZXh0ID0gdGhpcy5ydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uVGV4dD8ub3BlbiB8fCBkZWZhdWx0T3BlbjtcclxuICAgIGNvbnN0IGNsb3NlVGV4dCA9IHRoaXMucnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvblRleHQ/LmNsb3NlIHx8IGRlZmF1bHRDbG9zZTtcclxuICAgIHJldHVybiB0aGlzLmRyYXdlckFuaW1hdGlvblN0YXRlID09PSAnaW4nID8gY2xvc2VUZXh0IDogb3BlblRleHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGNsaWNrcyBvbiB0aGUgYmFja2Ryb3AuXHJcbiAgICogQ2xvc2VzIHRoZSBkcmF3ZXIgb25seSBpZiBgZGlzYWJsZUNsb3NlYCBpcyBub3QgdHJ1ZS5cclxuICAgKiBAcHVibGljXHJcbiAgICovXHJcbiAgcHVibGljIGhhbmRsZUJhY2tkcm9wQ2xpY2soKTogdm9pZCB7XHJcbiAgICBpZiAoISh0aGlzLnJ1Y0lucHV0RGF0YS5kaXNhYmxlQ2xvc2UgPz8gZmFsc2UpKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlRHJhd2VyKHRoaXMuY3VycmVudERyYXdlclBvc2l0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbnMgZm9yIEVzY2FwZSBrZXkgcHJlc3NlcyBvbiB0aGUgZG9jdW1lbnQuXHJcbiAgICogQ2xvc2VzIHRoZSBkcmF3ZXIgaWYgaXQncyBvcGVuIGFuZCBgZGlzYWJsZUNsb3NlYCBpcyBub3QgdHJ1ZS5cclxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgS2V5Ym9hcmRFdmVudC5cclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXHJcbiAgb25LZXlkb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuZHJhd2VyQW5pbWF0aW9uU3RhdGUgPT09ICdpbicgJiYgISh0aGlzLnJ1Y0lucHV0RGF0YS5kaXNhYmxlQ2xvc2UgPz8gZmFsc2UpKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlRHJhd2VyKHRoaXMuY3VycmVudERyYXdlclBvc2l0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFycyBhbnkgZHluYW1pY2FsbHkgbG9hZGVkIGNvbXBvbmVudC5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2xlYXJEeW5hbWljQ29udGVudCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRyYXdlckNvbXBvbmVudEhvc3QpIHtcclxuICAgICAgdGhpcy5kcmF3ZXJDb21wb25lbnRIb3N0LmNsZWFyKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5keW5hbWljQ29tcG9uZW50UmVmKSB7XHJcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFJlZiA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbmd1bGFyIGxpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGNsZWFyIGR5bmFtaWMgY29tcG9uZW50IGNvbnRlbnQuXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyRHluYW1pY0NvbnRlbnQoKTtcclxuICB9XHJcbn0iLCI8IS0tIFxyXG4gIEN1c3RvbSBCYWNrZHJvcCBlbGVtZW50LlxyXG4gIFZpc2libGUgb25seSB3aGVuOlxyXG4gIC0gcnVjSW5wdXREYXRhLm1vZGUgaXMgJ292ZXInXHJcbiAgLSBydWNJbnB1dERhdGEuaGFzQmFja2Ryb3AgaXMgdHJ1ZSAob3IgdW5kZWZpbmVkLCBkZWZhdWx0aW5nIHRvIHRydWUpXHJcbiAgLSBkcmF3ZXJBbmltYXRpb25TdGF0ZSBpcyAnaW4nIChkcmF3ZXIgaXMgb3BlbiBvciBvcGVuaW5nKVxyXG4gIEFuaW1hdGVzIHVzaW5nICdiYWNrZHJvcEZhZGUnIHRyaWdnZXIuXHJcbiAgQ2xpY2tpbmcgdGhlIGJhY2tkcm9wIHdpbGwgdG9nZ2xlIHRoZSBkcmF3ZXIgZm9yIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxyXG4gIEJhY2tncm91bmQgY29sb3IgY2FuIGJlIGN1c3RvbWl6ZWQgdmlhIHJ1Y0lucHV0RGF0YS5iYWNrZHJvcEJhY2tncm91bmRDb2xvci5cclxuLS0+XHJcbjxkaXYgY2xhc3M9XCJjdXN0b20tYmFja2Ryb3BcIlxyXG4gICAgICpuZ0lmPVwicnVjSW5wdXREYXRhLm1vZGUgPT09ICdvdmVyJyAmJiAocnVjSW5wdXREYXRhLmhhc0JhY2tkcm9wID8/IHRydWUpICYmIGRyYXdlckFuaW1hdGlvblN0YXRlID09PSAnaW4nXCJcclxuICAgICBbQGJhY2tkcm9wRmFkZV09XCJiYWNrZHJvcEFuaW1hdGlvblBhcmFtc1wiXHJcbiAgICAgKGNsaWNrKT1cImhhbmRsZUJhY2tkcm9wQ2xpY2soKVwiXHJcbiAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwicnVjSW5wdXREYXRhLmhhc0JhY2tkcm9wID8gcnVjSW5wdXREYXRhLmJhY2tkcm9wQmFja2dyb3VuZENvbG9yIDogJydcIj5cclxuPC9kaXY+XHJcblxyXG48IS0tIFxyXG4gIEN1c3RvbSBEeW5hbWljIERyYXdlciBlbGVtZW50LlxyXG4gIFRoaXMgaXMgdGhlIG1haW4gcGFuZWwgdGhhdCBzbGlkZXMgaW4gYW5kIG91dC5cclxuICAtIEFwcGxpZXMgQ1NTIGNsYXNzZXMgYmFzZWQgb24gY3VycmVudERyYXdlclBvc2l0aW9uIGFuZCBjdXN0b21UaGVtZS5cclxuICAtIER5bmFtaWNhbGx5IHNldHMgd2lkdGggYW5kIGhlaWdodCBiYXNlZCBvbiBkcmF3ZXIgb3JpZW50YXRpb24gYW5kIGlucHV0IGRhdGEuXHJcbiAgLSBVc2VzIG9uZSBvZiBmb3VyIGFuaW1hdGlvbiB0cmlnZ2VycyAoc2xpZGVJbk91dExlZnQsIHNsaWRlSW5PdXRSaWdodCwgc2xpZGVJbk91dFRvcCwgc2xpZGVJbk91dEJvdHRvbSlcclxuICAgIGJhc2VkIG9uIGN1cnJlbnREcmF3ZXJQb3NpdGlvbi4gT25seSB0aGUgYWN0aXZlIHRyaWdnZXIgcnVucyBpdHMgYW5pbWF0aW9uOyBvdGhlcnMgYXJlIHNldCB0byBhblxyXG4gICAgaW5zdGFudCAnb3V0JyBzdGF0ZSB0byBwcmV2ZW50IGludGVyZmVyZW5jZS5cclxuICAtIEFuaW1hdGlvbiBjb21wbGV0aW9uIGV2ZW50cyBhcmUgaGFuZGxlZCBieSBvbkFuaW1hdGlvbkRvbmUoKS5cclxuLS0+XHJcblxyXG48ZGl2IGNsYXNzPVwibWFpblwiPlxyXG4gIDxkaXYgY2xhc3M9XCJkeW5hbWljLWRyYXdlclwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cIidkcmF3ZXItJyArIGN1cnJlbnREcmF3ZXJQb3NpdGlvbiArICcgJyArIChjdXN0b21UaGVtZSB8fCAnJylcIlxyXG4gICAgICBbc3R5bGUud2lkdGhdPVwiIWlzVmVydGljYWxMYXlvdXQgPyBlZmZlY3RpdmVEcmF3ZXJEaW1lbnNpb24gOiAnMTAwJSdcIlxyXG4gICAgICBbc3R5bGUuaGVpZ2h0XT1cImlzVmVydGljYWxMYXlvdXQgPyBlZmZlY3RpdmVEcmF3ZXJEaW1lbnNpb24gOiAnMTAwJSdcIlxyXG5cclxuICAgICAgW0BzbGlkZUluT3V0TGVmdF09XCJjdXJyZW50RHJhd2VyUG9zaXRpb24gPT09ICdsZWZ0JyA/IGFuaW1hdGlvblBhcmFtcyA6IHt2YWx1ZTogJ291dCcsIHBhcmFtczoge2R1cmF0aW9uOiAnMG1zJ319XCJcclxuICAgICAgKEBzbGlkZUluT3V0TGVmdC5kb25lKT1cImN1cnJlbnREcmF3ZXJQb3NpdGlvbiA9PT0gJ2xlZnQnICYmIG9uQW5pbWF0aW9uRG9uZSgkZXZlbnQpXCJcclxuXHJcbiAgICAgIFtAc2xpZGVJbk91dFJpZ2h0XT1cImN1cnJlbnREcmF3ZXJQb3NpdGlvbiA9PT0gJ3JpZ2h0JyA/IGFuaW1hdGlvblBhcmFtcyA6IHt2YWx1ZTogJ291dCcsIHBhcmFtczoge2R1cmF0aW9uOiAnMG1zJ319XCJcclxuICAgICAgKEBzbGlkZUluT3V0UmlnaHQuZG9uZSk9XCJjdXJyZW50RHJhd2VyUG9zaXRpb24gPT09ICdyaWdodCcgJiYgb25BbmltYXRpb25Eb25lKCRldmVudClcIlxyXG5cclxuICAgICAgW0BzbGlkZUluT3V0VG9wXT1cImN1cnJlbnREcmF3ZXJQb3NpdGlvbiA9PT0gJ3RvcCcgPyBhbmltYXRpb25QYXJhbXMgOiB7dmFsdWU6ICdvdXQnLCBwYXJhbXM6IHtkdXJhdGlvbjogJzBtcyd9fVwiXHJcbiAgICAgIChAc2xpZGVJbk91dFRvcC5kb25lKT1cImN1cnJlbnREcmF3ZXJQb3NpdGlvbiA9PT0gJ3RvcCcgJiYgb25BbmltYXRpb25Eb25lKCRldmVudClcIlxyXG5cclxuICAgICAgW0BzbGlkZUluT3V0Qm90dG9tXT1cImN1cnJlbnREcmF3ZXJQb3NpdGlvbiA9PT0gJ2JvdHRvbScgPyBhbmltYXRpb25QYXJhbXMgOiB7dmFsdWU6ICdvdXQnLCBwYXJhbXM6IHtkdXJhdGlvbjogJzBtcyd9fVwiXHJcbiAgICAgIChAc2xpZGVJbk91dEJvdHRvbS5kb25lKT1cImN1cnJlbnREcmF3ZXJQb3NpdGlvbiA9PT0gJ2JvdHRvbScgJiYgb25BbmltYXRpb25Eb25lKCRldmVudClcIj5cclxuXHJcbiAgICA8IS0tIFdyYXBwZXIgZm9yIHRoZSBjb250ZW50IGluc2lkZSB0aGUgZHJhd2VyLCBoYW5kbGVzIHBhZGRpbmcgYW5kIGxheW91dC4gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJhd2VyLWNvbnRlbnQtd3JhcHBlclwiPlxyXG4gICAgICA8IS0tIE9wdGlvbmFsIHRpdGxlIGZvciB0aGUgZHJhd2VyLiAtLT5cclxuICAgICAgPGgyICpuZ0lmPVwicnVjSW5wdXREYXRhLmNvbnRlbnQ/LmRyYXdlclRpdGxlXCIgY2xhc3M9XCJydWNsaWItZHJhd2VyLXRpdGxlXCI+XHJcbiAgICAgICAge3sgcnVjSW5wdXREYXRhLmNvbnRlbnQ/LmRyYXdlclRpdGxlIH19XHJcbiAgICAgIDwvaDI+XHJcbiAgICAgIDwhLS0gXHJcbiAgICAgICAgT3B0aW9uYWwgY2xvc2UgYnV0dG9uIGluc2lkZSB0aGUgZHJhd2VyLlxyXG4gICAgICAgIFRvZ2dsZXMgdGhlIGRyYXdlciBmb3IgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2hlbiBjbGlja2VkLlxyXG4gICAgICAgIEFSSUEgbGFiZWwgcHJvdmlkZXMgYWNjZXNzaWJpbGl0eS5cclxuICAgICAgICBEaW1lbnNpb25zIGNhbiBiZSBjdXN0b21pemVkIHZpYSBydWNJbnB1dERhdGEuY2xvc2VCdXR0b25EaW1lbnNpb25zLlxyXG4gICAgICAtLT5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cInJ1Y0lucHV0RGF0YS5zaG93Q2xvc2VJY29uXCJcclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJydWNsaWItZHJhd2VyLWNsb3NlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURyYXdlcihjdXJyZW50RHJhd2VyUG9zaXRpb24pXCJcclxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidDbG9zZSAnICsgY3VycmVudERyYXdlclBvc2l0aW9uICsgJyBkcmF3ZXInXCJcclxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwicnVjSW5wdXREYXRhLmNsb3NlQnV0dG9uRGltZW5zaW9ucz8ud2lkdGhcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwicnVjSW5wdXREYXRhLmNsb3NlQnV0dG9uRGltZW5zaW9ucz8uaGVpZ2h0XCI+XHJcbiAgICAgICAgPCEtLSBNYXRlcmlhbCBpY29uIGZvciB0aGUgY2xvc2UgYnV0dG9uLiBTaXplIGNhbiBiZSBjdXN0b21pemVkLiAtLT5cclxuICAgICAgICA8bWF0LWljb24gW3N0eWxlLmZvbnQtc2l6ZV09XCJydWNJbnB1dERhdGEuY2xvc2VCdXR0b25EaW1lbnNpb25zPy5pY29uU2l6ZVwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwhLS0gTWFpbiBib2R5IGNvbnRlbnQgb2YgdGhlIGRyYXdlci4gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJydWNsaWItZHJhd2VyLWJvZHlcIj5cclxuICAgICAgICA8IS0tIEhvc3QgZm9yIGR5bmFtaWNhbGx5IGluamVjdGVkIGNvbXBvbmVudCAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RyYXdlckNvbXBvbmVudEhvc3Q+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8IS0tIEZhbGxiYWNrIHRvIEhUTUwgY29udGVudCBpZiBubyBjb21wb25lbnQgaXMgcHJvdmlkZWQgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFydWNJbnB1dERhdGEuY29udGVudD8uZHJhd2VyQ29udGVudENvbXBvbmVudFwiIFtpbm5lckhUTUxdPVwicnVjSW5wdXREYXRhLmNvbnRlbnQ/LmRyYXdlckJvZHkgfHwgJycgfCBzYWZlSHRtbFwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gXHJcbiAgQW5ndWxhciBNYXRlcmlhbCBEcmF3ZXIgQ29udGFpbmVyLlxyXG4gIEFjdHMgYXMgdGhlIG1haW4gY29udGFpbmVyIGZvciB0aGUgZHJhd2VyIHN5c3RlbSwgZXNwZWNpYWxseSBpZiAnc2lkZScgb3IgJ3B1c2gnIG1vZGVzXHJcbiAgd2VyZSB0byBiZSBpbXBsZW1lbnRlZCB3aXRoIE1hdERyYXdlcidzIG5hdGl2ZSBiZWhhdmlvci4gV2l0aCBjdXN0b20gZml4ZWQtcG9zaXRpb24gYW5pbWF0aW9ucyxcclxuICBpdHMgcHJpbWFyeSByb2xlIGhlcmUgaXMgdG8gaG9zdCB0aGUgbWF0LWRyYXdlci1jb250ZW50LlxyXG4gIC0gQXBwbGllcyAndmVydGljYWwtbGF5b3V0JyBjbGFzcyBpZiB0aGUgZHJhd2VyIGlzIHRvcC9ib3R0b20uXHJcbiAgLSBNYXREcmF3ZXIncyBvd24gYmFja2Ryb3AgaXMgZGlzYWJsZWQgYXMgYSBjdXN0b20gb25lIGlzIHVzZWQuXHJcbi0tPlxyXG48bWF0LWRyYXdlci1jb250YWluZXJcclxuICBjbGFzcz1cInJ1Y2xpYi1kcmF3ZXItY29udGFpbmVyXCJcclxuICBbY2xhc3MudmVydGljYWwtbGF5b3V0XT1cImlzVmVydGljYWxMYXlvdXRcIlxyXG4gIFtoYXNCYWNrZHJvcF09XCJmYWxzZVwiPiA8IS0tIE1hdERyYXdlcidzIGJhY2tkcm9wIGlzIG5vdCB1c2VkIHdpdGggY3VzdG9tIGFuaW1hdGlvbiAtLT5cclxuICA8bWF0LWRyYXdlci1jb250ZW50IGNsYXNzPVwicnVjbGliLW1haW4tY29udGVudFwiPlxyXG4gICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicnVjSW5wdXREYXRhLmRpc2FibGVUb2dnbGVCdXR0b25Jbk1haW5Db250ZW50XCJcclxuICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgdGl0bGU9XCJUb2dnbGUgRHJhd2VyXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJkcmF3ZXItdG9nZ2xlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uRGltZW5zaW9ucz8ud2lkdGhcIlxyXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cInJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25EaW1lbnNpb25zPy5oZWlnaHRcIlxyXG4gICAgICAgICAgICBbc3R5bGUucGFkZGluZ109XCJydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uRGltZW5zaW9ucz8ucGFkZGluZ1wiXHJcbiAgICAgICAgICAgIFtzdHlsZS5mb250LXNpemVdPVwicnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvbkRpbWVuc2lvbnM/LmZvbnRTaXplXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURyYXdlcihjdXJyZW50RHJhd2VyUG9zaXRpb24pXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRUb2dnbGVCdXR0b25BcmlhTGFiZWwoKVwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiZHJhd2VyQW5pbWF0aW9uU3RhdGUgPT09ICdpbidcIj5cclxuICAgICAgPCEtLSBPcHRpb25hbCBNYXRlcmlhbCBpY29uIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbi4gU2hvdyBvbmx5IGlmIG5vIGltYWdlIFVSTCBpcyBwcm92aWRlZC4gLS0+XHJcbiAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25JY29uICYmICFydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uSW1hZ2VVcmxcIiBbc3R5bGUuZm9udC1zaXplXT1cInJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25EaW1lbnNpb25zPy5pY29uU2l6ZVwiPnt7IHJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25JY29uIH19PC9tYXQtaWNvbj5cclxuICAgICAgPCEtLSBPcHRpb25hbCBpbWFnZSBmb3IgdGhlIHRvZ2dsZSBidXR0b24uIElmIHByZXNlbnQsIGl0IHNob3VsZCBmaWxsIHRoZSBidXR0b24uIC0tPlxyXG4gICAgICA8aW1nICpuZ0lmPVwicnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvbkltYWdlVXJsXCJcclxuICAgICAgICAgICBbc3JjXT1cInJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25JbWFnZVVybFwiXHJcbiAgICAgICAgICAgW2FsdF09XCJydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uSW1hZ2VBbHQgfHwgJ1RvZ2dsZSBEcmF3ZXInXCJcclxuICAgICAgICAgICBjbGFzcz1cInJ1Y2xpYi1kcmF3ZXItdG9nZ2xlLWltYWdlXCJcclxuICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwicnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvbkRpbWVuc2lvbnM/LndpZHRoXCJcclxuICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cInJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25EaW1lbnNpb25zPy5oZWlnaHRcIlxyXG4gICAgICAgICAgIFtzdHlsZS5wYWRkaW5nXT1cInJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25EaW1lbnNpb25zPy5wYWRkaW5nXCI+XHJcbiAgICAgIDwhLS0gVGV4dCBmb3IgdGhlIHRvZ2dsZSBidXR0b24uIFNob3cgb25seSBpZiBOTyBpY29uIEFORCBOTyBpbWFnZSBVUkwgaXMgcHJvdmlkZWQuIC0tPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIiFydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uSWNvbiAmJiAhcnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvbkltYWdlVXJsICYmIChydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uVGV4dD8ub3BlbiB8fCBydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uVGV4dD8uY2xvc2UpXCI+XHJcbiAgICAgICAge3sgZHJhd2VyQW5pbWF0aW9uU3RhdGUgPT09ICdpbicgPyAocnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvblRleHQ/LmNsb3NlIHx8ICdDbG9zZScpIDogKHJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25UZXh0Py5vcGVuIHx8ICdPcGVuJykgfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8IS0tIFRleHQgZm9yIHRoZSB0b2dnbGUgYnV0dG9uIHdoZW4gYW4gaWNvbiAoYnV0IE5PIGltYWdlKSBJUyBhbHNvIHByZXNlbnQuIC0tPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cInJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25JY29uICYmICFydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uSW1hZ2VVcmwgJiYgKHJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25UZXh0Py5vcGVuIHx8IHJ1Y0lucHV0RGF0YS50b2dnbGVCdXR0b25UZXh0Py5jbG9zZSlcIiBjbGFzcz1cInRvZ2dsZS1idXR0b24tdGV4dC13aXRoLWljb25cIj5cclxuICAgICAgICB7eyBkcmF3ZXJBbmltYXRpb25TdGF0ZSA9PT0gJ2luJyA/IChydWNJbnB1dERhdGEudG9nZ2xlQnV0dG9uVGV4dD8uY2xvc2UgfHwgJ0Nsb3NlJykgOiAocnVjSW5wdXREYXRhLnRvZ2dsZUJ1dHRvblRleHQ/Lm9wZW4gfHwgJ09wZW4nKSB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDwhLS0gTWFpbiBhcHBsaWNhdGlvbiBjb250ZW50IGFyZWEsIHJlbmRlcmVkIGZyb20gSFRNTCBzdHJpbmcgdmlhIHNhZmVIdG1sIHBpcGUuIC0tPlxyXG4gICAgPGRpdiBbaW5uZXJIVE1MXT1cInJ1Y0lucHV0RGF0YS5jb250ZW50Py5tYWluQm9keSB8fCAnJyB8IHNhZmVIdG1sXCI+PC9kaXY+XHJcbiAgPC9tYXQtZHJhd2VyLWNvbnRlbnQ+XHJcbjwvbWF0LWRyYXdlci1jb250YWluZXI+Il19